Levantamento Sistemático da Produção Agropecuária - LSPA
Boletim produzido pela SPE com informações mensais sobre previsão e acompanhamento de safras agrícolas a partir de dados divulgados pelo IBGE
Publicado em
10/06/2021 09h38
Atualizado em
15/11/2023 12h28
Informativo - LSPA maio2021.html — 6408 KB
Conteúdo do arquivo
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="generator" content="pandoc" /> <meta http-equiv="X-UA-Compatible" content="IE=EDGE" /> <title>Informativo SPE: LSPA</title> <script src="data:application/javascript;base64,Ly8gUGFuZG9jIDIuOSBhZGRzIGF0dHJpYnV0ZXMgb24gYm90aCBoZWFkZXIgYW5kIGRpdi4gV2UgcmVtb3ZlIHRoZSBmb3JtZXIgKHRvCi8vIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgYmVoYXZpb3Igb2YgUGFuZG9jIDwgMi44KS4KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKGUpIHsKICB2YXIgaHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkaXYuc2VjdGlvbltjbGFzcyo9J2xldmVsJ10gPiA6Zmlyc3QtY2hpbGQiKTsKICB2YXIgaSwgaCwgYTsKICBmb3IgKGkgPSAwOyBpIDwgaHMubGVuZ3RoOyBpKyspIHsKICAgIGggPSBoc1tpXTsKICAgIGlmICghL15oWzEtNl0kL2kudGVzdChoLnRhZ05hbWUpKSBjb250aW51ZTsgIC8vIGl0IHNob3VsZCBiZSBhIGhlYWRlciBoMS1oNgogICAgYSA9IGguYXR0cmlidXRlczsKICAgIHdoaWxlIChhLmxlbmd0aCA+IDApIGgucmVtb3ZlQXR0cmlidXRlKGFbMF0ubmFtZSk7CiAgfQp9KTsK"></script> <script src="data:application/javascript;base64,LyohIGpRdWVyeSB2My41LjEgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIHQoZSl9OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKEMsZSl7InVzZSBzdHJpY3QiO3ZhciB0PVtdLHI9T2JqZWN0LmdldFByb3RvdHlwZU9mLHM9dC5zbGljZSxnPXQuZmxhdD9mdW5jdGlvbihlKXtyZXR1cm4gdC5mbGF0LmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmNvbmNhdC5hcHBseShbXSxlKX0sdT10LnB1c2gsaT10LmluZGV4T2Ysbj17fSxvPW4udG9TdHJpbmcsdj1uLmhhc093blByb3BlcnR5LGE9di50b1N0cmluZyxsPWEuY2FsbChPYmplY3QpLHk9e30sbT1mdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlLm5vZGVUeXBlfSx4PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT09ZS53aW5kb3d9LEU9Qy5kb2N1bWVudCxjPXt0eXBlOiEwLHNyYzohMCxub25jZTohMCxub01vZHVsZTohMH07ZnVuY3Rpb24gYihlLHQsbil7dmFyIHIsaSxvPShuPW58fEUpLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2lmKG8udGV4dD1lLHQpZm9yKHIgaW4gYykoaT10W3JdfHx0LmdldEF0dHJpYnV0ZSYmdC5nZXRBdHRyaWJ1dGUocikpJiZvLnNldEF0dHJpYnV0ZShyLGkpO24uaGVhZC5hcHBlbmRDaGlsZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWZ1bmN0aW9uIHcoZSl7cmV0dXJuIG51bGw9PWU/ZSsiIjoib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP25bby5jYWxsKGUpXXx8Im9iamVjdCI6dHlwZW9mIGV9dmFyIGY9IjMuNS4xIixTPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBTLmZuLmluaXQoZSx0KX07ZnVuY3Rpb24gcChlKXt2YXIgdD0hIWUmJiJsZW5ndGgiaW4gZSYmZS5sZW5ndGgsbj13KGUpO3JldHVybiFtKGUpJiYheChlKSYmKCJhcnJheSI9PT1ufHwwPT09dHx8Im51bWJlciI9PXR5cGVvZiB0JiYwPHQmJnQtMSBpbiBlKX1TLmZuPVMucHJvdG90eXBlPXtqcXVlcnk6Zixjb25zdHJ1Y3RvcjpTLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/cy5jYWxsKHRoaXMpOmU8MD90aGlzW2UrdGhpcy5sZW5ndGhdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD1TLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdH0sZWFjaDpmdW5jdGlvbihlKXtyZXR1cm4gUy5lYWNoKHRoaXMsZSl9LG1hcDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5tYXAodGhpcyxmdW5jdGlvbihlLHQpe3JldHVybiBuLmNhbGwoZSx0LGUpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGV2ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5ncmVwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4odCsxKSUyfSkpfSxvZGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy5ncmVwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCUyfSkpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soMDw9biYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDp1LHNvcnQ6dC5zb3J0LHNwbGljZTp0LnNwbGljZX0sUy5leHRlbmQ9Uy5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgYSYmKGw9YSxhPWFyZ3VtZW50c1tzXXx8e30scysrKSwib2JqZWN0Ij09dHlwZW9mIGF8fG0oYSl8fChhPXt9KSxzPT09dSYmKGE9dGhpcyxzLS0pO3M8dTtzKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW3NdKSlmb3IodCBpbiBlKXI9ZVt0XSwiX19wcm90b19fIiE9PXQmJmEhPT1yJiYobCYmciYmKFMuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhuPWFbdF0sbz1pJiYhQXJyYXkuaXNBcnJheShuKT9bXTppfHxTLmlzUGxhaW5PYmplY3Qobik/bjp7fSxpPSExLGFbdF09Uy5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LFMuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhmK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1vLmNhbGwoZSkpJiYoISh0PXIoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobj12LmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcikmJmEuY2FsbChuKT09PWwpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSx0LG4pe2IoZSx7bm9uY2U6dCYmdC5ub25jZX0sbil9LGVhY2g6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTA7aWYocChlKSl7Zm9yKG49ZS5sZW5ndGg7cjxuO3IrKylpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWt9ZWxzZSBmb3IociBpbiBlKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVhaztyZXR1cm4gZX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihwKE9iamVjdChlKSk/Uy5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6dS5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT10Py0xOmkuY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPSt0Lmxlbmd0aCxyPTAsaT1lLmxlbmd0aDtyPG47cisrKWVbaSsrXT10W3JdO3JldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1bXSxpPTAsbz1lLmxlbmd0aCxhPSFuO2k8bztpKyspIXQoZVtpXSxpKSE9PWEmJnIucHVzaChlW2ldKTtyZXR1cm4gcn0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89MCxhPVtdO2lmKHAoZSkpZm9yKHI9ZS5sZW5ndGg7bzxyO28rKyludWxsIT0oaT10KGVbb10sbyxuKSkmJmEucHVzaChpKTtlbHNlIGZvcihvIGluIGUpbnVsbCE9KGk9dChlW29dLG8sbikpJiZhLnB1c2goaSk7cmV0dXJuIGcoYSl9LGd1aWQ6MSxzdXBwb3J0Onl9KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoUy5mbltTeW1ib2wuaXRlcmF0b3JdPXRbU3ltYm9sLml0ZXJhdG9yXSksUy5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe25bIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSk7dmFyIGQ9ZnVuY3Rpb24obil7dmFyIGUsZCxiLG8saSxoLGYsZyx3LHUsbCxULEMsYSxFLHYscyxjLHksUz0ic2l6emxlIisxKm5ldyBEYXRlLHA9bi5kb2N1bWVudCxrPTAscj0wLG09dWUoKSx4PXVlKCksQT11ZSgpLE49dWUoKSxEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYobD0hMCksMH0saj17fS5oYXNPd25Qcm9wZXJ0eSx0PVtdLHE9dC5wb3AsTD10LnB1c2gsSD10LnB1c2gsTz10LnNsaWNlLFA9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LFI9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixJPSIoPzpcXFxcW1xcZGEtZkEtRl17MSw2fSIrTSsiP3xcXFxcW15cXHJcXG5cXGZdfFtcXHctXXxbXlwwLVxceDdmXSkrIixXPSJcXFsiK00rIiooIitJKyIpKD86IitNKyIqKFsqXiR8IX5dPz0pIitNKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrSSsiKSl8KSIrTSsiKlxcXSIsRj0iOigiK0krIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK1crIikqKXwuKilcXCl8KSIsQj1uZXcgUmVnRXhwKE0rIisiLCJnIiksJD1uZXcgUmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89bmV3IFJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSx6PW5ldyBSZWdFeHAoIl4iK00rIiooWz4rfl18IitNKyIpIitNKyIqIiksVT1uZXcgUmVnRXhwKE0rInw+IiksWD1uZXcgUmVnRXhwKEYpLFY9bmV3IFJlZ0V4cCgiXiIrSSsiJCIpLEc9e0lEOm5ldyBSZWdFeHAoIl4jKCIrSSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitJKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitJKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrVyksUFNFVURPOm5ldyBSZWdFeHAoIl4iK0YpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L0hUTUwkL2ksUT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLEo9L15oXGQkL2ksSz0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGVlPS9bK35dLyx0ZT1uZXcgUmVnRXhwKCJcXFxcW1xcZGEtZkEtRl17MSw2fSIrTSsiP3xcXFxcKFteXFxyXFxuXFxmXSkiLCJnIiksbmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0iMHgiK2Uuc2xpY2UoMSktNjU1MzY7cmV0dXJuIHR8fChuPDA/U3RyaW5nLmZyb21DaGFyQ29kZShuKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKG4+PjEwfDU1Mjk2LDEwMjMmbnw1NjMyMCkpfSxyZT0vKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZyxpZT1mdW5jdGlvbihlLHQpe3JldHVybiB0PyJcMCI9PT1lPyJcdWZmZmQiOmUuc2xpY2UoMCwtMSkrIlxcIitlLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSkudG9TdHJpbmcoMTYpKyIgIjoiXFwiK2V9LG9lPWZ1bmN0aW9uKCl7VCgpfSxhZT1iZShmdW5jdGlvbihlKXtyZXR1cm4hMD09PWUuZGlzYWJsZWQmJiJmaWVsZHNldCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9LHtkaXI6InBhcmVudE5vZGUiLG5leHQ6ImxlZ2VuZCJ9KTt0cnl7SC5hcHBseSh0PU8uY2FsbChwLmNoaWxkTm9kZXMpLHAuY2hpbGROb2RlcyksdFtwLmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChlKXtIPXthcHBseTp0Lmxlbmd0aD9mdW5jdGlvbihlLHQpe0wuYXBwbHkoZSxPLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDt3aGlsZShlW24rK109dFtyKytdKTtlLmxlbmd0aD1uLTF9fX1mdW5jdGlvbiBzZSh0LGUsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmPWUmJmUub3duZXJEb2N1bWVudCxwPWU/ZS5ub2RlVHlwZTo5O2lmKG49bnx8W10sInN0cmluZyIhPXR5cGVvZiB0fHwhdHx8MSE9PXAmJjkhPT1wJiYxMSE9PXApcmV0dXJuIG47aWYoIXImJihUKGUpLGU9ZXx8QyxFKSl7aWYoMTEhPT1wJiYodT1aLmV4ZWModCkpKWlmKGk9dVsxXSl7aWYoOT09PXApe2lmKCEoYT1lLmdldEVsZW1lbnRCeUlkKGkpKSlyZXR1cm4gbjtpZihhLmlkPT09aSlyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZSBpZihmJiYoYT1mLmdldEVsZW1lbnRCeUlkKGkpKSYmeShlLGEpJiZhLmlkPT09aSlyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZXtpZih1WzJdKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0KSksbjtpZigoaT11WzNdKSYmZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkobixlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaSkpLG59aWYoZC5xc2EmJiFOW3QrIiAiXSYmKCF2fHwhdi50ZXN0KHQpKSYmKDEhPT1wfHwib2JqZWN0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpe2lmKGM9dCxmPWUsMT09PXAmJihVLnRlc3QodCl8fHoudGVzdCh0KSkpeyhmPWVlLnRlc3QodCkmJnllKGUucGFyZW50Tm9kZSl8fGUpPT09ZSYmZC5zY29wZXx8KChzPWUuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXMucmVwbGFjZShyZSxpZSk6ZS5zZXRBdHRyaWJ1dGUoImlkIixzPVMpKSxvPShsPWgodCkpLmxlbmd0aDt3aGlsZShvLS0pbFtvXT0ocz8iIyIrczoiOnNjb3BlIikrIiAiK3hlKGxbb10pO2M9bC5qb2luKCIsIil9dHJ5e3JldHVybiBILmFwcGx5KG4sZi5xdWVyeVNlbGVjdG9yQWxsKGMpKSxufWNhdGNoKGUpe04odCwhMCl9ZmluYWxseXtzPT09UyYmZS5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gZyh0LnJlcGxhY2UoJCwiJDEiKSxlLG4scil9ZnVuY3Rpb24gdWUoKXt2YXIgcj1bXTtyZXR1cm4gZnVuY3Rpb24gZSh0LG4pe3JldHVybiByLnB1c2godCsiICIpPmIuY2FjaGVMZW5ndGgmJmRlbGV0ZSBlW3Iuc2hpZnQoKV0sZVt0KyIgIl09bn19ZnVuY3Rpb24gbGUoZSl7cmV0dXJuIGVbU109ITAsZX1mdW5jdGlvbiBjZShlKXt2YXIgdD1DLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7dHJ5e3JldHVybiEhZSh0KX1jYXRjaChlKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gZmUoZSx0KXt2YXIgbj1lLnNwbGl0KCJ8Iikscj1uLmxlbmd0aDt3aGlsZShyLS0pYi5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gcGUoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiZlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXg7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIGRlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZlLnR5cGU9PT10fX1mdW5jdGlvbiBoZShuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09dHx8ImJ1dHRvbiI9PT10KSYmZS50eXBlPT09bn19ZnVuY3Rpb24gZ2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJmb3JtImluIGU/ZS5wYXJlbnROb2RlJiYhMT09PWUuZGlzYWJsZWQ/ImxhYmVsImluIGU/ImxhYmVsImluIGUucGFyZW50Tm9kZT9lLnBhcmVudE5vZGUuZGlzYWJsZWQ9PT10OmUuZGlzYWJsZWQ9PT10OmUuaXNEaXNhYmxlZD09PXR8fGUuaXNEaXNhYmxlZCE9PSF0JiZhZShlKT09PXQ6ZS5kaXNhYmxlZD09PXQ6ImxhYmVsImluIGUmJmUuZGlzYWJsZWQ9PT10fX1mdW5jdGlvbiB2ZShhKXtyZXR1cm4gbGUoZnVuY3Rpb24obyl7cmV0dXJuIG89K28sbGUoZnVuY3Rpb24oZSx0KXt2YXIgbixyPWEoW10sZS5sZW5ndGgsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPXJbaV1dJiYoZVtuXT0hKHRbbl09ZVtuXSkpfSl9KX1mdW5jdGlvbiB5ZShlKXtyZXR1cm4gZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZlfWZvcihlIGluIGQ9c2Uuc3VwcG9ydD17fSxpPXNlLmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZXNwYWNlVVJJLG49KGUub3duZXJEb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiFZLnRlc3QodHx8biYmbi5ub2RlTmFtZXx8IkhUTUwiKX0sVD1zZS5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdCxuLHI9ZT9lLm93bmVyRG9jdW1lbnR8fGU6cDtyZXR1cm4gciE9QyYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVtZW50JiYoYT0oQz1yKS5kb2N1bWVudEVsZW1lbnQsRT0haShDKSxwIT1DJiYobj1DLmRlZmF1bHRWaWV3KSYmbi50b3AhPT1uJiYobi5hZGRFdmVudExpc3RlbmVyP24uYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixvZSwhMSk6bi5hdHRhY2hFdmVudCYmbi5hdHRhY2hFdmVudCgib251bmxvYWQiLG9lKSksZC5zY29wZT1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZChDLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwidW5kZWZpbmVkIiE9dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbCYmIWUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlIGZpZWxkc2V0IGRpdiIpLmxlbmd0aH0pLGQuYXR0cmlidXRlcz1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxkLmdldEVsZW1lbnRzQnlUYWdOYW1lPWNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKEMuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPUsudGVzdChDLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGQuZ2V0QnlJZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5pZD1TLCFDLmdldEVsZW1lbnRzQnlOYW1lfHwhQy5nZXRFbGVtZW50c0J5TmFtZShTKS5sZW5ndGh9KSxkLmdldEJ5SWQ/KGIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0ZSxuZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4/W25dOltdfX0pOihiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgbj1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiB0JiZ0LnZhbHVlPT09bn19LGIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmRSl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb107aT10LmdldEVsZW1lbnRzQnlOYW1lKGUpLHI9MDt3aGlsZShvPWlbcisrXSlpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb119cmV0dXJuW119fSksYi5maW5kLlRBRz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6ZC5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoIioiPT09ZSl7d2hpbGUobj1vW2krK10pMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gb30sYi5maW5kLkNMQVNTPWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmRSlyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxzPVtdLHY9W10sKGQucXNhPUsudGVzdChDLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGNlKGZ1bmN0aW9uKGUpe3ZhciB0O2EuYXBwZW5kQ2hpbGQoZSkuaW5uZXJIVE1MPSI8YSBpZD0nIitTKyInPjwvYT48c2VsZWN0IGlkPSciK1MrIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmdi5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49IitTKyItXSIpLmxlbmd0aHx8di5wdXNoKCJ+PSIpLCh0PUMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJuYW1lIiwiIiksZS5hcHBlbmRDaGlsZCh0KSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPScnXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIipuYW1lIitNKyIqPSIrTSsiKig/OicnfFwiXCIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8di5wdXNoKCI6Y2hlY2tlZCIpLGUucXVlcnlTZWxlY3RvckFsbCgiYSMiK1MrIisqIikubGVuZ3RofHx2LnB1c2goIi4jLitbK35dIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJcXFxmIiksdi5wdXNoKCJbXFxyXFxuXFxmXSIpfSksY2UoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmdi5wdXNoKCJuYW1lIitNKyIqWypeJHwhfl0/PSIpLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJnYucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSx2LnB1c2goIiwuKjoiKX0pKSwoZC5tYXRjaGVzU2VsZWN0b3I9Sy50ZXN0KGM9YS5tYXRjaGVzfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEub01hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcikpJiZjZShmdW5jdGlvbihlKXtkLmRpc2Nvbm5lY3RlZE1hdGNoPWMuY2FsbChlLCIqIiksYy5jYWxsKGUsIltzIT0nJ106eCIpLHMucHVzaCgiIT0iLEYpfSksdj12Lmxlbmd0aCYmbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSkscz1zLmxlbmd0aCYmbmV3IFJlZ0V4cChzLmpvaW4oInwiKSksdD1LLnRlc3QoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseT10fHxLLnRlc3QoYS5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBufHwoMSYobj0oZS5vd25lckRvY3VtZW50fHxlKT09KHQub3duZXJEb2N1bWVudHx8dCk/ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KToxKXx8IWQuc29ydERldGFjaGVkJiZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09bj9lPT1DfHxlLm93bmVyRG9jdW1lbnQ9PXAmJnkocCxlKT8tMTp0PT1DfHx0Lm93bmVyRG9jdW1lbnQ9PXAmJnkocCx0KT8xOnU/UCh1LGUpLVAodSx0KTowOjQmbj8tMToxKX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuLHI9MCxpPWUucGFyZW50Tm9kZSxvPXQucGFyZW50Tm9kZSxhPVtlXSxzPVt0XTtpZighaXx8IW8pcmV0dXJuIGU9PUM/LTE6dD09Qz8xOmk/LTE6bz8xOnU/UCh1LGUpLVAodSx0KTowO2lmKGk9PT1vKXJldHVybiBwZShlLHQpO249ZTt3aGlsZShuPW4ucGFyZW50Tm9kZSlhLnVuc2hpZnQobik7bj10O3doaWxlKG49bi5wYXJlbnROb2RlKXMudW5zaGlmdChuKTt3aGlsZShhW3JdPT09c1tyXSlyKys7cmV0dXJuIHI/cGUoYVtyXSxzW3JdKTphW3JdPT1wPy0xOnNbcl09PXA/MTowfSksQ30sc2UubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBzZShlLG51bGwsbnVsbCx0KX0sc2UubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoVChlKSxkLm1hdGNoZXNTZWxlY3RvciYmRSYmIU5bdCsiICJdJiYoIXN8fCFzLnRlc3QodCkpJiYoIXZ8fCF2LnRlc3QodCkpKXRyeXt2YXIgbj1jLmNhbGwoZSx0KTtpZihufHxkLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIG59Y2F0Y2goZSl7Tih0LCEwKX1yZXR1cm4gMDxzZSh0LEMsbnVsbCxbZV0pLmxlbmd0aH0sc2UuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9QyYmVChlKSx5KGUsdCl9LHNlLmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9QyYmVChlKTt2YXIgbj1iLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxyPW4mJmouY2FsbChiLmF0dHJIYW5kbGUsdC50b0xvd2VyQ2FzZSgpKT9uKGUsdCwhRSk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1yP3I6ZC5hdHRyaWJ1dGVzfHwhRT9lLmdldEF0dHJpYnV0ZSh0KToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9LHNlLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZSsiIikucmVwbGFjZShyZSxpZSl9LHNlLmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sc2UudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLHI9MCxpPTA7aWYobD0hZC5kZXRlY3REdXBsaWNhdGVzLHU9IWQuc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoRCksbCl7d2hpbGUodD1lW2krK10pdD09PWVbaV0mJihyPW4ucHVzaChpKSk7d2hpbGUoci0tKWUuc3BsaWNlKG5bcl0sMSl9cmV0dXJuIHU9bnVsbCxlfSxvPXNlLmdldFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsaT1lLm5vZGVUeXBlO2lmKGkpe2lmKDE9PT1pfHw5PT09aXx8MTE9PT1pKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPW8oZSl9ZWxzZSBpZigzPT09aXx8ND09PWkpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2Ugd2hpbGUodD1lW3IrK10pbis9byh0KTtyZXR1cm4gbn0sKGI9c2Uuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86bGUsbWF0Y2g6RyxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKHRlLG5lKSxlWzNdPShlWzNdfHxlWzRdfHxlWzVdfHwiIikucmVwbGFjZSh0ZSxuZSksIn49Ij09PWVbMl0mJihlWzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1lWzFdLnNsaWNlKDAsMyk/KGVbM118fHNlLmVycm9yKGVbMF0pLGVbNF09KyhlWzRdP2VbNV0rKGVbNl18fDEpOjIqKCJldmVuIj09PWVbM118fCJvZGQiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fCJvZGQiPT09ZVszXSkpOmVbM10mJnNlLmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIgdCxuPSFlWzZdJiZlWzJdO3JldHVybiBHLkNISUxELnRlc3QoZVswXSk/bnVsbDooZVszXT9lWzJdPWVbNF18fGVbNV18fCIiOm4mJlgudGVzdChuKSYmKHQ9aChuLCEwKSkmJih0PW4uaW5kZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PW1bZSsiICJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2UrIigiK00rInwkKSIpKSYmbShlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoInN0cmluZyI9PXR5cGVvZiBlLmNsYXNzTmFtZSYmZS5jbGFzc05hbWV8fCJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihuLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXNlLmF0dHIoZSxuKTtyZXR1cm4gbnVsbD09dD8iIT0iPT09cjohcnx8KHQrPSIiLCI9Ij09PXI/dD09PWk6IiE9Ij09PXI/dCE9PWk6Il49Ij09PXI/aSYmMD09PXQuaW5kZXhPZihpKToiKj0iPT09cj9pJiYtMTx0LmluZGV4T2YoaSk6IiQ9Ij09PXI/aSYmdC5zbGljZSgtaS5sZW5ndGgpPT09aToifj0iPT09cj8tMTwoIiAiK3QucmVwbGFjZShCLCIgIikrIiAiKS5pbmRleE9mKGkpOiJ8PSI9PT1yJiYodD09PWl8fHQuc2xpY2UoMCxpLmxlbmd0aCsxKT09PWkrIi0iKSl9fSxDSElMRDpmdW5jdGlvbihoLGUsdCxnLHYpe3ZhciB5PSJudGgiIT09aC5zbGljZSgwLDMpLG09Imxhc3QiIT09aC5zbGljZSgtNCkseD0ib2YtdHlwZSI9PT1lO3JldHVybiAxPT09ZyYmMD09PXY/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD15IT09bT8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLGM9ZS5wYXJlbnROb2RlLGY9eCYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHA9IW4mJiF4LGQ9ITE7aWYoYyl7aWYoeSl7d2hpbGUobCl7YT1lO3doaWxlKGE9YVtsXSlpZih4P2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWY6MT09PWEubm9kZVR5cGUpcmV0dXJuITE7dT1sPSJvbmx5Ij09PWgmJiF1JiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKHU9W20/Yy5maXJzdENoaWxkOmMubGFzdENoaWxkXSxtJiZwKXtkPShzPShyPShpPShvPShhPWMpW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1rJiZyWzFdKSYmclsyXSxhPXMmJmMuY2hpbGROb2Rlc1tzXTt3aGlsZShhPSsrcyYmYSYmYVtsXXx8KGQ9cz0wKXx8dS5wb3AoKSlpZigxPT09YS5ub2RlVHlwZSYmKytkJiZhPT09ZSl7aVtoXT1bayxzLGRdO2JyZWFrfX1lbHNlIGlmKHAmJihkPXM9KHI9KGk9KG89KGE9ZSlbU118fChhW1NdPXt9KSlbYS51bmlxdWVJRF18fChvW2EudW5pcXVlSURdPXt9KSlbaF18fFtdKVswXT09PWsmJnJbMV0pLCExPT09ZCl3aGlsZShhPSsrcyYmYSYmYVtsXXx8KGQ9cz0wKXx8dS5wb3AoKSlpZigoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKSYmKytkJiYocCYmKChpPShvPWFbU118fChhW1NdPXt9KSlbYS51bmlxdWVJRF18fChvW2EudW5pcXVlSURdPXt9KSlbaF09W2ssZF0pLGE9PT1lKSlicmVhaztyZXR1cm4oZC09dik9PT1nfHxkJWc9PTAmJjA8PWQvZ319fSxQU0VVRE86ZnVuY3Rpb24oZSxvKXt2YXIgdCxhPWIucHNldWRvc1tlXXx8Yi5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fHNlLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7cmV0dXJuIGFbU10/YShvKToxPGEubGVuZ3RoPyh0PVtlLGUsIiIsb10sYi5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/bGUoZnVuY3Rpb24oZSx0KXt2YXIgbixyPWEoZSxvKSxpPXIubGVuZ3RoO3doaWxlKGktLSllW249UChlLHJbaV0pXT0hKHRbbl09cltpXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gYShlLDAsdCl9KTphfX0scHNldWRvczp7bm90OmxlKGZ1bmN0aW9uKGUpe3ZhciByPVtdLGk9W10scz1mKGUucmVwbGFjZSgkLCIkMSIpKTtyZXR1cm4gc1tTXT9sZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPXMoZSxudWxsLHIsW10pLGE9ZS5sZW5ndGg7d2hpbGUoYS0tKShpPW9bYV0pJiYoZVthXT0hKHRbYV09aSkpfSk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiByWzBdPWUscyhyLG51bGwsbixpKSxyWzBdPW51bGwsIWkucG9wKCl9fSksaGFzOmxlKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMDxzZSh0LGUpLmxlbmd0aH19KSxjb250YWluczpsZShmdW5jdGlvbih0KXtyZXR1cm4gdD10LnJlcGxhY2UodGUsbmUpLGZ1bmN0aW9uKGUpe3JldHVybi0xPChlLnRleHRDb250ZW50fHxvKGUpKS5pbmRleE9mKHQpfX0pLGxhbmc6bGUoZnVuY3Rpb24obil7cmV0dXJuIFYudGVzdChufHwiIil8fHNlLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK24pLG49bi5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGUpe3ZhciB0O2Rve2lmKHQ9RT9lLmxhbmc6ZS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGUuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJuKHQ9dC50b0xvd2VyQ2FzZSgpKT09PW58fDA9PT10LmluZGV4T2YobisiLSIpfXdoaWxlKChlPWUucGFyZW50Tm9kZSkmJjE9PT1lLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5sb2NhdGlvbiYmbi5sb2NhdGlvbi5oYXNoO3JldHVybiB0JiZ0LnNsaWNlKDEpPT09ZS5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWF9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Qy5hY3RpdmVFbGVtZW50JiYoIUMuaGFzRm9jdXN8fEMuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6Z2UoITEpLGRpc2FibGVkOmdlKCEwKSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwhMD09PWUuc2VsZWN0ZWR9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4hYi5wc2V1ZG9zLmVtcHR5KGUpfSxoZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIEoudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFEudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09dC50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6dmUoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0OnZlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTp2ZShmdW5jdGlvbihlLHQsbil7cmV0dXJuW248MD9uK3Q6bl19KSxldmVuOnZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOnZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTE7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0OnQ8bj90Om47MDw9LS1yOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDp2ZShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjsrK3I8dDspZS5wdXNoKHIpO3JldHVybiBlfSl9fSkucHNldWRvcy5udGg9Yi5wc2V1ZG9zLmVxLHtyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSliLnBzZXVkb3NbZV09ZGUoZSk7Zm9yKGUgaW57c3VibWl0OiEwLHJlc2V0OiEwfSliLnBzZXVkb3NbZV09aGUoZSk7ZnVuY3Rpb24gbWUoKXt9ZnVuY3Rpb24geGUoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBiZShzLGUsdCl7dmFyIHU9ZS5kaXIsbD1lLm5leHQsYz1sfHx1LGY9dCYmInBhcmVudE5vZGUiPT09YyxwPXIrKztyZXR1cm4gZS5maXJzdD9mdW5jdGlvbihlLHQsbil7d2hpbGUoZT1lW3VdKWlmKDE9PT1lLm5vZGVUeXBlfHxmKXJldHVybiBzKGUsdCxuKTtyZXR1cm4hMX06ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPVtrLHBdO2lmKG4pe3doaWxlKGU9ZVt1XSlpZigoMT09PWUubm9kZVR5cGV8fGYpJiZzKGUsdCxuKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilpZihpPShvPWVbU118fChlW1NdPXt9KSlbZS51bmlxdWVJRF18fChvW2UudW5pcXVlSURdPXt9KSxsJiZsPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKWU9ZVt1XXx8ZTtlbHNle2lmKChyPWlbY10pJiZyWzBdPT09ayYmclsxXT09PXApcmV0dXJuIGFbMl09clsyXTtpZigoaVtjXT1hKVsyXT1zKGUsdCxuKSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24gd2UoaSl7cmV0dXJuIDE8aS5sZW5ndGg/ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWkubGVuZ3RoO3doaWxlKHItLSlpZighaVtyXShlLHQsbikpcmV0dXJuITE7cmV0dXJuITB9OmlbMF19ZnVuY3Rpb24gVGUoZSx0LG4scixpKXtmb3IodmFyIG8sYT1bXSxzPTAsdT1lLmxlbmd0aCxsPW51bGwhPXQ7czx1O3MrKykobz1lW3NdKSYmKG4mJiFuKG8scixpKXx8KGEucHVzaChvKSxsJiZ0LnB1c2gocykpKTtyZXR1cm4gYX1mdW5jdGlvbiBDZShkLGgsZyx2LHksZSl7cmV0dXJuIHYmJiF2W1NdJiYodj1DZSh2KSkseSYmIXlbU10mJih5PUNlKHksZSkpLGxlKGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPVtdLHU9W10sbD10Lmxlbmd0aCxjPWV8fGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspc2UoZSx0W3JdLG4pO3JldHVybiBufShofHwiKiIsbi5ub2RlVHlwZT9bbl06bixbXSksZj0hZHx8IWUmJmg/YzpUZShjLHMsZCxuLHIpLHA9Zz95fHwoZT9kOmx8fHYpP1tdOnQ6ZjtpZihnJiZnKGYscCxuLHIpLHYpe2k9VGUocCx1KSx2KGksW10sbixyKSxvPWkubGVuZ3RoO3doaWxlKG8tLSkoYT1pW29dKSYmKHBbdVtvXV09IShmW3Vbb11dPWEpKX1pZihlKXtpZih5fHxkKXtpZih5KXtpPVtdLG89cC5sZW5ndGg7d2hpbGUoby0tKShhPXBbb10pJiZpLnB1c2goZltvXT1hKTt5KG51bGwscD1bXSxpLHIpfW89cC5sZW5ndGg7d2hpbGUoby0tKShhPXBbb10pJiYtMTwoaT15P1AoZSxhKTpzW29dKSYmKGVbaV09ISh0W2ldPWEpKX19ZWxzZSBwPVRlKHA9PT10P3Auc3BsaWNlKGwscC5sZW5ndGgpOnApLHk/eShudWxsLHQscCxyKTpILmFwcGx5KHQscCl9KX1mdW5jdGlvbiBFZShlKXtmb3IodmFyIGksdCxuLHI9ZS5sZW5ndGgsbz1iLnJlbGF0aXZlW2VbMF0udHlwZV0sYT1vfHxiLnJlbGF0aXZlWyIgIl0scz1vPzE6MCx1PWJlKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09aX0sYSwhMCksbD1iZShmdW5jdGlvbihlKXtyZXR1cm4tMTxQKGksZSl9LGEsITApLGM9W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0hbyYmKG58fHQhPT13KXx8KChpPXQpLm5vZGVUeXBlP3UoZSx0LG4pOmwoZSx0LG4pKTtyZXR1cm4gaT1udWxsLHJ9XTtzPHI7cysrKWlmKHQ9Yi5yZWxhdGl2ZVtlW3NdLnR5cGVdKWM9W2JlKHdlKGMpLHQpXTtlbHNle2lmKCh0PWIuZmlsdGVyW2Vbc10udHlwZV0uYXBwbHkobnVsbCxlW3NdLm1hdGNoZXMpKVtTXSl7Zm9yKG49KytzO248cjtuKyspaWYoYi5yZWxhdGl2ZVtlW25dLnR5cGVdKWJyZWFrO3JldHVybiBDZSgxPHMmJndlKGMpLDE8cyYmeGUoZS5zbGljZSgwLHMtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW3MtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZSgkLCIkMSIpLHQsczxuJiZFZShlLnNsaWNlKHMsbikpLG48ciYmRWUoZT1lLnNsaWNlKG4pKSxuPHImJnhlKGUpKX1jLnB1c2godCl9cmV0dXJuIHdlKGMpfXJldHVybiBtZS5wcm90b3R5cGU9Yi5maWx0ZXJzPWIucHNldWRvcyxiLnNldEZpbHRlcnM9bmV3IG1lLGg9c2UudG9rZW5pemU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHMsdSxsPXhbZSsiICJdO2lmKGwpcmV0dXJuIHQ/MDpsLnNsaWNlKDApO2E9ZSxzPVtdLHU9Yi5wcmVGaWx0ZXI7d2hpbGUoYSl7Zm9yKG8gaW4gbiYmIShyPV8uZXhlYyhhKSl8fChyJiYoYT1hLnNsaWNlKHJbMF0ubGVuZ3RoKXx8YSkscy5wdXNoKGk9W10pKSxuPSExLChyPXouZXhlYyhhKSkmJihuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpyWzBdLnJlcGxhY2UoJCwiICIpfSksYT1hLnNsaWNlKG4ubGVuZ3RoKSksYi5maWx0ZXIpIShyPUdbb10uZXhlYyhhKSl8fHVbb10mJiEocj11W29dKHIpKXx8KG49ci5zaGlmdCgpLGkucHVzaCh7dmFsdWU6bix0eXBlOm8sbWF0Y2hlczpyfSksYT1hLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/YS5sZW5ndGg6YT9zZS5lcnJvcihlKTp4KGUscykuc2xpY2UoMCl9LGY9c2UuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHYseSxtLHgscixpPVtdLG89W10sYT1BW2UrIiAiXTtpZighYSl7dHx8KHQ9aChlKSksbj10Lmxlbmd0aDt3aGlsZShuLS0pKGE9RWUodFtuXSkpW1NdP2kucHVzaChhKTpvLnB1c2goYSk7KGE9QShlLCh2PW8sbT0wPCh5PWkpLmxlbmd0aCx4PTA8di5sZW5ndGgscj1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1PTAsbD0iMCIsYz1lJiZbXSxmPVtdLHA9dyxkPWV8fHgmJmIuZmluZC5UQUcoIioiLGkpLGg9ays9bnVsbD09cD8xOk1hdGgucmFuZG9tKCl8fC4xLGc9ZC5sZW5ndGg7Zm9yKGkmJih3PXQ9PUN8fHR8fGkpO2whPT1nJiZudWxsIT0obz1kW2xdKTtsKyspe2lmKHgmJm8pe2E9MCx0fHxvLm93bmVyRG9jdW1lbnQ9PUN8fChUKG8pLG49IUUpO3doaWxlKHM9dlthKytdKWlmKHMobyx0fHxDLG4pKXtyLnB1c2gobyk7YnJlYWt9aSYmKGs9aCl9bSYmKChvPSFzJiZvKSYmdS0tLGUmJmMucHVzaChvKSl9aWYodSs9bCxtJiZsIT09dSl7YT0wO3doaWxlKHM9eVthKytdKXMoYyxmLHQsbik7aWYoZSl7aWYoMDx1KXdoaWxlKGwtLSljW2xdfHxmW2xdfHwoZltsXT1xLmNhbGwocikpO2Y9VGUoZil9SC5hcHBseShyLGYpLGkmJiFlJiYwPGYubGVuZ3RoJiYxPHUreS5sZW5ndGgmJnNlLnVuaXF1ZVNvcnQocil9cmV0dXJuIGkmJihrPWgsdz1wKSxjfSxtP2xlKHIpOnIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4gYX0sZz1zZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLGM9IXImJmgoZT1sLnNlbGVjdG9yfHxlKTtpZihuPW58fFtdLDE9PT1jLmxlbmd0aCl7aWYoMjwobz1jWzBdPWNbMF0uc2xpY2UoMCkpLmxlbmd0aCYmIklEIj09PShhPW9bMF0pLnR5cGUmJjk9PT10Lm5vZGVUeXBlJiZFJiZiLnJlbGF0aXZlW29bMV0udHlwZV0pe2lmKCEodD0oYi5maW5kLklEKGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtsJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZShvLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPUcubmVlZHNDb250ZXh0LnRlc3QoZSk/MDpvLmxlbmd0aDt3aGlsZShpLS0pe2lmKGE9b1tpXSxiLnJlbGF0aXZlW3M9YS50eXBlXSlicmVhaztpZigodT1iLmZpbmRbc10pJiYocj11KGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSxlZS50ZXN0KG9bMF0udHlwZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpKSl7aWYoby5zcGxpY2UoaSwxKSwhKGU9ci5sZW5ndGgmJnhlKG8pKSlyZXR1cm4gSC5hcHBseShuLHIpLG47YnJlYWt9fX1yZXR1cm4obHx8ZihlLGMpKShyLHQsIUUsbiwhdHx8ZWUudGVzdChlKSYmeWUodC5wYXJlbnROb2RlKXx8dCksbn0sZC5zb3J0U3RhYmxlPVMuc3BsaXQoIiIpLnNvcnQoRCkuam9pbigiIik9PT1TLGQuZGV0ZWN0RHVwbGljYXRlcz0hIWwsVCgpLGQuc29ydERldGFjaGVkPWNlKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oQy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGZlKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxkLmF0dHJpYnV0ZXMmJmNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGZlKCJ2YWx1ZSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxmZShSLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLHNlfShDKTtTLmZpbmQ9ZCxTLmV4cHI9ZC5zZWxlY3RvcnMsUy5leHByWyI6Il09Uy5leHByLnBzZXVkb3MsUy51bmlxdWVTb3J0PVMudW5pcXVlPWQudW5pcXVlU29ydCxTLnRleHQ9ZC5nZXRUZXh0LFMuaXNYTUxEb2M9ZC5pc1hNTCxTLmNvbnRhaW5zPWQuY29udGFpbnMsUy5lc2NhcGVTZWxlY3Rvcj1kLmVzY2FwZTt2YXIgaD1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT12b2lkIDAhPT1uO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmUyhlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LFQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59LGs9Uy5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtmdW5jdGlvbiBBKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX12YXIgTj0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaTtmdW5jdGlvbiBEKGUsbixyKXtyZXR1cm4gbShuKT9TLmdyZXAoZSxmdW5jdGlvbihlLHQpe3JldHVybiEhbi5jYWxsKGUsdCxlKSE9PXJ9KTpuLm5vZGVUeXBlP1MuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09biE9PXJ9KToic3RyaW5nIiE9dHlwZW9mIG4/Uy5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuLTE8aS5jYWxsKG4sZSkhPT1yfSk6Uy5maWx0ZXIobixlLHIpfVMuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP1MuZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106Uy5maW5kLm1hdGNoZXMoZSxTLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LFMuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmxlbmd0aCxpPXRoaXM7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayhTKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZihTLmNvbnRhaW5zKGlbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKG49dGhpcy5wdXNoU3RhY2soW10pLHQ9MDt0PHI7dCsrKVMuZmluZChlLGlbdF0sbik7cmV0dXJuIDE8cj9TLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhEKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhEKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFEKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZrLnRlc3QoZSk/UyhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBqLHE9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLzsoUy5mbi5pbml0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKCFlKXJldHVybiB0aGlzO2lmKG49bnx8aiwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCEocj0iPCI9PT1lWzBdJiYiPiI9PT1lW2UubGVuZ3RoLTFdJiYzPD1lLmxlbmd0aD9bbnVsbCxlLG51bGxdOnEuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2YgUz90WzBdOnQsUy5tZXJnZSh0aGlzLFMucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6RSwhMCkpLE4udGVzdChyWzFdKSYmUy5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpbSh0aGlzW3JdKT90aGlzW3JdKHRbcl0pOnRoaXMuYXR0cihyLHRbcl0pO3JldHVybiB0aGlzfXJldHVybihpPUUuZ2V0RWxlbWVudEJ5SWQoclsyXSkpJiYodGhpc1swXT1pLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0oZSk/dm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUoUyk6Uy5tYWtlQXJyYXkoZSx0aGlzKX0pLnByb3RvdHlwZT1TLmZuLGo9UyhFKTt2YXIgTD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxIPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2Z1bmN0aW9uIE8oZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfVMuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9UyhlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZihTLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10sYT0ic3RyaW5nIiE9dHlwZW9mIGUmJlMoZSk7aWYoIWsudGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT8tMTxhLmluZGV4KG4pOjE9PT1uLm5vZGVUeXBlJiZTLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKDE8by5sZW5ndGg/Uy51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/aS5jYWxsKFMoZSksdGhpc1swXSk6aS5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhTLnVuaXF1ZVNvcnQoUy5tZXJnZSh0aGlzLmdldCgpLFMoZSx0KSkpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksUy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaChlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gTyhlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBPKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBUKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gVChlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZS5jb250ZW50RG9jdW1lbnQmJnIoZS5jb250ZW50RG9jdW1lbnQpP2UuY29udGVudERvY3VtZW50OihBKGUsInRlbXBsYXRlIikmJihlPWUuY29udGVudHx8ZSksUy5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKHIsaSl7Uy5mbltyXT1mdW5jdGlvbihlLHQpe3ZhciBuPVMubWFwKHRoaXMsaSxlKTtyZXR1cm4iVW50aWwiIT09ci5zbGljZSgtNSkmJih0PWUpLHQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG49Uy5maWx0ZXIodCxuKSksMTx0aGlzLmxlbmd0aCYmKEhbcl18fFMudW5pcXVlU29ydChuKSxMLnRlc3QocikmJm4ucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUD0vW15ceDIwXHRcclxuXGZdKy9nO2Z1bmN0aW9uIFIoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gTShlKXt0aHJvdyBlfWZ1bmN0aW9uIEkoZSx0LG4scil7dmFyIGk7dHJ5e2UmJm0oaT1lLnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmbShpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fVMuQ2FsbGJhY2tzPWZ1bmN0aW9uKHIpe3ZhciBlLG47cj0ic3RyaW5nIj09dHlwZW9mIHI/KGU9cixuPXt9LFMuZWFjaChlLm1hdGNoKFApfHxbXSxmdW5jdGlvbihlLHQpe25bdF09ITB9KSxuKTpTLmV4dGVuZCh7fSxyKTt2YXIgaSx0LG8sYSxzPVtdLHU9W10sbD0tMSxjPWZ1bmN0aW9uKCl7Zm9yKGE9YXx8ci5vbmNlLG89aT0hMDt1Lmxlbmd0aDtsPS0xKXt0PXUuc2hpZnQoKTt3aGlsZSgrK2w8cy5sZW5ndGgpITE9PT1zW2xdLmFwcGx5KHRbMF0sdFsxXSkmJnIuc3RvcE9uRmFsc2UmJihsPXMubGVuZ3RoLHQ9ITEpfXIubWVtb3J5fHwodD0hMSksaT0hMSxhJiYocz10P1tdOiIiKX0sZj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIHMmJih0JiYhaSYmKGw9cy5sZW5ndGgtMSx1LnB1c2godCkpLGZ1bmN0aW9uIG4oZSl7Uy5lYWNoKGUsZnVuY3Rpb24oZSx0KXttKHQpP3IudW5pcXVlJiZmLmhhcyh0KXx8cy5wdXNoKHQpOnQmJnQubGVuZ3RoJiYic3RyaW5nIiE9PXcodCkmJm4odCl9KX0oYXJndW1lbnRzKSx0JiYhaSYmYygpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gUy5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKC0xPChuPVMuaW5BcnJheSh0LHMsbikpKXMuc3BsaWNlKG4sMSksbjw9bCYmbC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlPy0xPFMuaW5BcnJheShlLHMpOjA8cy5sZW5ndGh9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHMmJihzPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT1bXSxzPXQ9IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hc30sbG9jazpmdW5jdGlvbigpe3JldHVybiBhPXU9W10sdHx8aXx8KHM9dD0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFhfSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiBhfHwodD1bZSwodD10fHxbXSkuc2xpY2U/dC5zbGljZSgpOnRdLHUucHVzaCh0KSxpfHxjKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99fTtyZXR1cm4gZn0sUy5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciBvPVtbIm5vdGlmeSIsInByb2dyZXNzIixTLkNhbGxiYWNrcygibWVtb3J5IiksUy5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLFMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLFMuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxpPSJwZW5kaW5nIixhPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBpfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGEudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGk9YXJndW1lbnRzO3JldHVybiBTLkRlZmVycmVkKGZ1bmN0aW9uKHIpe1MuZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49bShpW3RbNF1dKSYmaVt0WzRdXTtzW3RbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmbShlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHIubm90aWZ5KS5kb25lKHIucmVzb2x2ZSkuZmFpbChyLnJlamVjdCk6clt0WzBdKyJXaXRoIl0odGhpcyxuP1tlXTphcmd1bWVudHMpfSl9KSxpPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxuLHIpe3ZhciB1PTA7ZnVuY3Rpb24gbChpLG8sYSxzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzLGU9ZnVuY3Rpb24oKXt2YXIgZSx0O2lmKCEoaTx1KSl7aWYoKGU9YS5hcHBseShuLHIpKT09PW8ucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpO3Q9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sbSh0KT9zP3QuY2FsbChlLGwodSxvLFIscyksbCh1LG8sTSxzKSk6KHUrKyx0LmNhbGwoZSxsKHUsbyxSLHMpLGwodSxvLE0scyksbCh1LG8sUixvLm5vdGlmeVdpdGgpKSk6KGEhPT1SJiYobj12b2lkIDAscj1bZV0pLChzfHxvLnJlc29sdmVXaXRoKShuLHIpKX19LHQ9cz9lOmZ1bmN0aW9uKCl7dHJ5e2UoKX1jYXRjaChlKXtTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJlMuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhlLHQuc3RhY2tUcmFjZSksdTw9aSsxJiYoYSE9PU0mJihuPXZvaWQgMCxyPVtlXSksby5yZWplY3RXaXRoKG4scikpfX07aT90KCk6KFMuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYodC5zdGFja1RyYWNlPVMuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLEMuc2V0VGltZW91dCh0KSl9fXJldHVybiBTLkRlZmVycmVkKGZ1bmN0aW9uKGUpe29bMF1bM10uYWRkKGwoMCxlLG0ocik/cjpSLGUubm90aWZ5V2l0aCkpLG9bMV1bM10uYWRkKGwoMCxlLG0odCk/dDpSKSksb1syXVszXS5hZGQobCgwLGUsbShuKT9uOk0pKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT9TLmV4dGVuZChlLGEpOmF9fSxzPXt9O3JldHVybiBTLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPXRbMl0scj10WzVdO2FbdFsxXV09bi5hZGQsciYmbi5hZGQoZnVuY3Rpb24oKXtpPXJ9LG9bMy1lXVsyXS5kaXNhYmxlLG9bMy1lXVszXS5kaXNhYmxlLG9bMF1bMl0ubG9jayxvWzBdWzNdLmxvY2spLG4uYWRkKHRbM10uZmlyZSksc1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBzW3RbMF0rIldpdGgiXSh0aGlzPT09cz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LHNbdFswXSsiV2l0aCJdPW4uZmlyZVdpdGh9KSxhLnByb21pc2UocyksZSYmZS5jYWxsKHMscyksc30sd2hlbjpmdW5jdGlvbihlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHQ9bixyPUFycmF5KHQpLGk9cy5jYWxsKGFyZ3VtZW50cyksbz1TLkRlZmVycmVkKCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7clt0XT10aGlzLGlbdF09MTxhcmd1bWVudHMubGVuZ3RoP3MuY2FsbChhcmd1bWVudHMpOmUsLS1ufHxvLnJlc29sdmVXaXRoKHIsaSl9fTtpZihuPD0xJiYoSShlLG8uZG9uZShhKHQpKS5yZXNvbHZlLG8ucmVqZWN0LCFuKSwicGVuZGluZyI9PT1vLnN0YXRlKCl8fG0oaVt0XSYmaVt0XS50aGVuKSkpcmV0dXJuIG8udGhlbigpO3doaWxlKHQtLSlJKGlbdF0sYSh0KSxvLnJlamVjdCk7cmV0dXJuIG8ucHJvbWlzZSgpfX0pO3ZhciBXPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1MuRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbihlLHQpe0MuY29uc29sZSYmQy5jb25zb2xlLndhcm4mJmUmJlcudGVzdChlLm5hbWUpJiZDLmNvbnNvbGUud2FybigialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UsZS5zdGFjayx0KX0sUy5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbihlKXtDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9O3ZhciBGPVMuRGVmZXJyZWQoKTtmdW5jdGlvbiBCKCl7RS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCKSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEIpLFMucmVhZHkoKX1TLmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3JldHVybiBGLnRoZW4oZSlbImNhdGNoIl0oZnVuY3Rpb24oZSl7Uy5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LFMuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS1TLnJlYWR5V2FpdDpTLmlzUmVhZHkpfHwoUy5pc1JlYWR5PSEwKSE9PWUmJjA8LS1TLnJlYWR5V2FpdHx8Ri5yZXNvbHZlV2l0aChFLFtTXSl9fSksUy5yZWFkeS50aGVuPUYudGhlbiwiY29tcGxldGUiPT09RS5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1FLnJlYWR5U3RhdGUmJiFFLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9DLnNldFRpbWVvdXQoUy5yZWFkeSk6KEUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixCKSk7dmFyICQ9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZigib2JqZWN0Ij09PXcobikpZm9yKHMgaW4gaT0hMCxuKSQoZSx0LHMsbltzXSwhMCxvLGEpO2Vsc2UgaWYodm9pZCAwIT09ciYmKGk9ITAsbShyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbChTKGUpLG4pfSkpLHQpKWZvcig7czx1O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LF89L14tbXMtLyx6PS8tKFthLXpdKS9nO2Z1bmN0aW9uIFUoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIGUucmVwbGFjZShfLCJtcy0iKS5yZXBsYWNlKHosVSl9dmFyIFY9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZXx8IStlLm5vZGVUeXBlfTtmdW5jdGlvbiBHKCl7dGhpcy5leHBhbmRvPVMuZXhwYW5kbytHLnVpZCsrfUcudWlkPTEsRy5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdHx8KHQ9e30sVihlKSYmKGUubm9kZVR5cGU/ZVt0aGlzLmV4cGFuZG9dPXQ6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdGhpcy5leHBhbmRvLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pKSksdH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMuY2FjaGUoZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlbWCh0KV09bjtlbHNlIGZvcihyIGluIHQpaVtYKHIpXT10W3JdO3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4cGFuZG9dW1godCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKFgpOih0PVgodCkpaW4gcj9bdF06dC5tYXRjaChQKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fFMuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIVMuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBZPW5ldyBHLFE9bmV3IEcsSj0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLEs9L1tBLVpdL2c7ZnVuY3Rpb24gWihlLHQsbil7dmFyIHIsaTtpZih2b2lkIDA9PT1uJiYxPT09ZS5ub2RlVHlwZSlpZihyPSJkYXRhLSIrdC5yZXBsYWNlKEssIi0kJiIpLnRvTG93ZXJDYXNlKCksInN0cmluZyI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKHIpKSl7dHJ5e249InRydWUiPT09KGk9bil8fCJmYWxzZSIhPT1pJiYoIm51bGwiPT09aT9udWxsOmk9PT0raSsiIj8raTpKLnRlc3QoaSk/SlNPTi5wYXJzZShpKTppKX1jYXRjaChlKXt9US5zZXQoZSx0LG4pfWVsc2Ugbj12b2lkIDA7cmV0dXJuIG59Uy5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIFEuaGFzRGF0YShlKXx8WS5oYXNEYXRhKGUpfSxkYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUS5hY2Nlc3MoZSx0LG4pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7US5yZW1vdmUoZSx0KX0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBZLmFjY2VzcyhlLHQsbil9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7WS5yZW1vdmUoZSx0KX19KSxTLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihuLGUpe3ZhciB0LHIsaSxvPXRoaXNbMF0sYT1vJiZvLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09bil7aWYodGhpcy5sZW5ndGgmJihpPVEuZ2V0KG8pLDE9PT1vLm5vZGVUeXBlJiYhWS5nZXQobywiaGFzRGF0YUF0dHJzIikpKXt0PWEubGVuZ3RoO3doaWxlKHQtLSlhW3RdJiYwPT09KHI9YVt0XS5uYW1lKS5pbmRleE9mKCJkYXRhLSIpJiYocj1YKHIuc2xpY2UoNSkpLFoobyxyLGlbcl0pKTtZLnNldChvLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gaX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7US5zZXQodGhpcyxuKX0pOiQodGhpcyxmdW5jdGlvbihlKXt2YXIgdDtpZihvJiZ2b2lkIDA9PT1lKXJldHVybiB2b2lkIDAhPT0odD1RLmdldChvLG4pKT90OnZvaWQgMCE9PSh0PVoobyxuKSk/dDp2b2lkIDA7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7US5zZXQodGhpcyxuLGUpfSl9LG51bGwsZSwxPGFyZ3VtZW50cy5sZW5ndGgsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1EucmVtb3ZlKHRoaXMsZSl9KX19KSxTLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1ZLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPVkuYWNjZXNzKGUsdCxTLm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj1TLnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPVMuX3F1ZXVlSG9va3MoZSx0KTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsZnVuY3Rpb24oKXtTLmRlcXVldWUoZSx0KX0sbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gWS5nZXQoZSxuKXx8WS5hY2Nlc3MoZSxuLHtlbXB0eTpTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtZLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSxTLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24odCxuKXt2YXIgZT0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSJmeCIsZS0tKSxhcmd1bWVudHMubGVuZ3RoPGU/Uy5xdWV1ZSh0aGlzWzBdLHQpOnZvaWQgMD09PW4/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TLnF1ZXVlKHRoaXMsdCxuKTtTLl9xdWV1ZUhvb2tzKHRoaXMsdCksImZ4Ij09PXQmJiJpbnByb2dyZXNzIiE9PWVbMF0mJlMuZGVxdWV1ZSh0aGlzLHQpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZGVxdWV1ZSh0aGlzLGUpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTEsaT1TLkRlZmVycmVkKCksbz10aGlzLGE9dGhpcy5sZW5ndGgscz1mdW5jdGlvbigpey0tcnx8aS5yZXNvbHZlV2l0aChvLFtvXSl9OyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHwiZngiO3doaWxlKGEtLSkobj1ZLmdldChvW2FdLGUrInF1ZXVlSG9va3MiKSkmJm4uZW1wdHkmJihyKyssbi5lbXB0eS5hZGQocykpO3JldHVybiBzKCksaS5wcm9taXNlKHQpfX0pO3ZhciBlZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSx0ZT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrZWUrIikoW2EteiVdKikkIiwiaSIpLG5lPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0scmU9RS5kb2N1bWVudEVsZW1lbnQsaWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFMuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfSxvZT17Y29tcG9zZWQ6ITB9O3JlLmdldFJvb3ROb2RlJiYoaWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFMuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHxlLmdldFJvb3ROb2RlKG9lKT09PWUub3duZXJEb2N1bWVudH0pO3ZhciBhZT1mdW5jdGlvbihlLHQpe3JldHVybiJub25lIj09PShlPXR8fGUpLnN0eWxlLmRpc3BsYXl8fCIiPT09ZS5zdHlsZS5kaXNwbGF5JiZpZShlKSYmIm5vbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIpfTtmdW5jdGlvbiBzZShlLHQsbixyKXt2YXIgaSxvLGE9MjAscz1yP2Z1bmN0aW9uKCl7cmV0dXJuIHIuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIFMuY3NzKGUsdCwiIil9LHU9cygpLGw9biYmblszXXx8KFMuY3NzTnVtYmVyW3RdPyIiOiJweCIpLGM9ZS5ub2RlVHlwZSYmKFMuY3NzTnVtYmVyW3RdfHwicHgiIT09bCYmK3UpJiZ0ZS5leGVjKFMuY3NzKGUsdCkpO2lmKGMmJmNbM10hPT1sKXt1Lz0yLGw9bHx8Y1szXSxjPSt1fHwxO3doaWxlKGEtLSlTLnN0eWxlKGUsdCxjK2wpLCgxLW8pKigxLShvPXMoKS91fHwuNSkpPD0wJiYoYT0wKSxjLz1vO2MqPTIsUy5zdHlsZShlLHQsYytsKSxuPW58fFtdfXJldHVybiBuJiYoYz0rY3x8K3V8fDAsaT1uWzFdP2MrKG5bMV0rMSkqblsyXTorblsyXSxyJiYoci51bml0PWwsci5zdGFydD1jLHIuZW5kPWkpKSxpfXZhciB1ZT17fTtmdW5jdGlvbiBsZShlLHQpe2Zvcih2YXIgbixyLGksbyxhLHMsdSxsPVtdLGM9MCxmPWUubGVuZ3RoO2M8ZjtjKyspKHI9ZVtjXSkuc3R5bGUmJihuPXIuc3R5bGUuZGlzcGxheSx0Pygibm9uZSI9PT1uJiYobFtjXT1ZLmdldChyLCJkaXNwbGF5Iil8fG51bGwsbFtjXXx8KHIuc3R5bGUuZGlzcGxheT0iIikpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZhZShyKSYmKGxbY109KHU9YT1vPXZvaWQgMCxhPShpPXIpLm93bmVyRG9jdW1lbnQscz1pLm5vZGVOYW1lLCh1PXVlW3NdKXx8KG89YS5ib2R5LmFwcGVuZENoaWxkKGEuY3JlYXRlRWxlbWVudChzKSksdT1TLmNzcyhvLCJkaXNwbGF5Iiksby5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pLCJub25lIj09PXUmJih1PSJibG9jayIpLHVlW3NdPXUpKSkpOiJub25lIiE9PW4mJihsW2NdPSJub25lIixZLnNldChyLCJkaXNwbGF5IixuKSkpO2ZvcihjPTA7YzxmO2MrKyludWxsIT1sW2NdJiYoZVtjXS5zdHlsZS5kaXNwbGF5PWxbY10pO3JldHVybiBlfVMuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIGxlKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIGxlKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2FlKHRoaXMpP1ModGhpcykuc2hvdygpOlModGhpcykuaGlkZSgpfSl9fSk7dmFyIGNlLGZlLHBlPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLGRlPS88KFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0qKS9pLGhlPS9eJHxebW9kdWxlJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaTtjZT1FLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5hcHBlbmRDaGlsZChFLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwoZmU9RS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGZlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxmZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IiksY2UuYXBwZW5kQ2hpbGQoZmUpLHkuY2hlY2tDbG9uZT1jZS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsY2UuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+Iix5Lm5vQ2xvbmVDaGVja2VkPSEhY2UuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlLGNlLmlubmVySFRNTD0iPG9wdGlvbj48L29wdGlvbj4iLHkub3B0aW9uPSEhY2UubGFzdENoaWxkO3ZhciBnZT17dGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O2Z1bmN0aW9uIHZlKGUsdCl7dmFyIG47cmV0dXJuIG49InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKToidW5kZWZpbmVkIiE9dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbD9lLnF1ZXJ5U2VsZWN0b3JBbGwodHx8IioiKTpbXSx2b2lkIDA9PT10fHx0JiZBKGUsdCk/Uy5tZXJnZShbZV0sbik6bn1mdW5jdGlvbiB5ZShlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylZLnNldChlW25dLCJnbG9iYWxFdmFsIiwhdHx8WS5nZXQodFtuXSwiZ2xvYmFsRXZhbCIpKX1nZS50Ym9keT1nZS50Zm9vdD1nZS5jb2xncm91cD1nZS5jYXB0aW9uPWdlLnRoZWFkLGdlLnRoPWdlLnRkLHkub3B0aW9ufHwoZ2Uub3B0Z3JvdXA9Z2Uub3B0aW9uPVsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0pO3ZhciBtZT0vPHwmIz9cdys7LztmdW5jdGlvbiB4ZShlLHQsbixyLGkpe2Zvcih2YXIgbyxhLHMsdSxsLGMsZj10LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxwPVtdLGQ9MCxoPWUubGVuZ3RoO2Q8aDtkKyspaWYoKG89ZVtkXSl8fDA9PT1vKWlmKCJvYmplY3QiPT09dyhvKSlTLm1lcmdlKHAsby5ub2RlVHlwZT9bb106byk7ZWxzZSBpZihtZS50ZXN0KG8pKXthPWF8fGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSkscz0oZGUuZXhlYyhvKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSx1PWdlW3NdfHxnZS5fZGVmYXVsdCxhLmlubmVySFRNTD11WzFdK1MuaHRtbFByZWZpbHRlcihvKSt1WzJdLGM9dVswXTt3aGlsZShjLS0pYT1hLmxhc3RDaGlsZDtTLm1lcmdlKHAsYS5jaGlsZE5vZGVzKSwoYT1mLmZpcnN0Q2hpbGQpLnRleHRDb250ZW50PSIifWVsc2UgcC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUobykpO2YudGV4dENvbnRlbnQ9IiIsZD0wO3doaWxlKG89cFtkKytdKWlmKHImJi0xPFMuaW5BcnJheShvLHIpKWkmJmkucHVzaChvKTtlbHNlIGlmKGw9aWUobyksYT12ZShmLmFwcGVuZENoaWxkKG8pLCJzY3JpcHQiKSxsJiZ5ZShhKSxuKXtjPTA7d2hpbGUobz1hW2MrK10paGUudGVzdChvLnR5cGV8fCIiKSYmbi5wdXNoKG8pfXJldHVybiBmfXZhciBiZT0vXmtleS8sd2U9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFRlPS9eKFteLl0qKSg/OlwuKC4rKXwpLztmdW5jdGlvbiBDZSgpe3JldHVybiEwfWZ1bmN0aW9uIEVlKCl7cmV0dXJuITF9ZnVuY3Rpb24gU2UoZSx0KXtyZXR1cm4gZT09PWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBFLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goZSl7fX0oKT09KCJmb2N1cyI9PT10KX1mdW5jdGlvbiBrZShlLHQsbixyLGksbyl7dmFyIGEscztpZigib2JqZWN0Ij09dHlwZW9mIHQpe2ZvcihzIGluInN0cmluZyIhPXR5cGVvZiBuJiYocj1yfHxuLG49dm9pZCAwKSx0KWtlKGUscyxuLHIsdFtzXSxvKTtyZXR1cm4gZX1pZihudWxsPT1yJiZudWxsPT1pPyhpPW4scj1uPXZvaWQgMCk6bnVsbD09aSYmKCJzdHJpbmciPT10eXBlb2Ygbj8oaT1yLHI9dm9pZCAwKTooaT1yLHI9bixuPXZvaWQgMCkpLCExPT09aSlpPUVlO2Vsc2UgaWYoIWkpcmV0dXJuIGU7cmV0dXJuIDE9PT1vJiYoYT1pLChpPWZ1bmN0aW9uKGUpe3JldHVybiBTKCkub2ZmKGUpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9Uy5ndWlkKyspKSxlLmVhY2goZnVuY3Rpb24oKXtTLmV2ZW50LmFkZCh0aGlzLHQsaSxyLG4pfSl9ZnVuY3Rpb24gQWUoZSxpLG8pe28/KFkuc2V0KGUsaSwhMSksUy5ldmVudC5hZGQoZSxpLHtuYW1lc3BhY2U6ITEsaGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdCxuLHI9WS5nZXQodGhpcyxpKTtpZigxJmUuaXNUcmlnZ2VyJiZ0aGlzW2ldKXtpZihyLmxlbmd0aCkoUy5ldmVudC5zcGVjaWFsW2ldfHx7fSkuZGVsZWdhdGVUeXBlJiZlLnN0b3BQcm9wYWdhdGlvbigpO2Vsc2UgaWYocj1zLmNhbGwoYXJndW1lbnRzKSxZLnNldCh0aGlzLGksciksdD1vKHRoaXMsaSksdGhpc1tpXSgpLHIhPT0obj1ZLmdldCh0aGlzLGkpKXx8dD9ZLnNldCh0aGlzLGksITEpOm49e30sciE9PW4pcmV0dXJuIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLG4udmFsdWV9ZWxzZSByLmxlbmd0aCYmKFkuc2V0KHRoaXMsaSx7dmFsdWU6Uy5ldmVudC50cmlnZ2VyKFMuZXh0ZW5kKHJbMF0sUy5FdmVudC5wcm90b3R5cGUpLHIuc2xpY2UoMSksdGhpcyl9KSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19KSk6dm9pZCAwPT09WS5nZXQoZSxpKSYmUy5ldmVudC5hZGQoZSxpLENlKX1TLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG8sYSxzLHUsbCxjLGYscCxkLGgsZyx2PVkuZ2V0KHQpO2lmKFYodCkpe24uaGFuZGxlciYmKG49KG89bikuaGFuZGxlcixpPW8uc2VsZWN0b3IpLGkmJlMuZmluZC5tYXRjaGVzU2VsZWN0b3IocmUsaSksbi5ndWlkfHwobi5ndWlkPVMuZ3VpZCsrKSwodT12LmV2ZW50cyl8fCh1PXYuZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCkpLChhPXYuaGFuZGxlKXx8KGE9di5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBTJiZTLmV2ZW50LnRyaWdnZXJlZCE9PWUudHlwZT9TLmV2ZW50LmRpc3BhdGNoLmFwcGx5KHQsYXJndW1lbnRzKTp2b2lkIDB9KSxsPShlPShlfHwiIikubWF0Y2goUCl8fFsiIl0pLmxlbmd0aDt3aGlsZShsLS0pZD1nPShzPVRlLmV4ZWMoZVtsXSl8fFtdKVsxXSxoPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCYmKGY9Uy5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShpP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9Uy5ldmVudC5zcGVjaWFsW2RdfHx7fSxjPVMuZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6ZyxkYXRhOnIsaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmksbmVlZHNDb250ZXh0OmkmJlMuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChpKSxuYW1lc3BhY2U6aC5qb2luKCIuIil9LG8pLChwPXVbZF0pfHwoKHA9dVtkXT1bXSkuZGVsZWdhdGVDb3VudD0wLGYuc2V0dXAmJiExIT09Zi5zZXR1cC5jYWxsKHQscixoLGEpfHx0LmFkZEV2ZW50TGlzdGVuZXImJnQuYWRkRXZlbnRMaXN0ZW5lcihkLGEpKSxmLmFkZCYmKGYuYWRkLmNhbGwodCxjKSxjLmhhbmRsZXIuZ3VpZHx8KGMuaGFuZGxlci5ndWlkPW4uZ3VpZCkpLGk/cC5zcGxpY2UocC5kZWxlZ2F0ZUNvdW50KyssMCxjKTpwLnB1c2goYyksUy5ldmVudC5nbG9iYWxbZF09ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYSxzLHUsbCxjLGYscCxkLGgsZyx2PVkuaGFzRGF0YShlKSYmWS5nZXQoZSk7aWYodiYmKHU9di5ldmVudHMpKXtsPSh0PSh0fHwiIikubWF0Y2goUCl8fFsiIl0pLmxlbmd0aDt3aGlsZShsLS0paWYoZD1nPShzPVRlLmV4ZWModFtsXSl8fFtdKVsxXSxoPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCl7Zj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9dVtkPShyP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkXXx8W10scz1zWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGE9bz1wLmxlbmd0aDt3aGlsZShvLS0pYz1wW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxzJiYhcy50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2VsZWN0b3IpfHwocC5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZwLmRlbGVnYXRlQ291bnQtLSxmLnJlbW92ZSYmZi5yZW1vdmUuY2FsbChlLGMpKTthJiYhcC5sZW5ndGgmJihmLnRlYXJkb3duJiYhMSE9PWYudGVhcmRvd24uY2FsbChlLGgsdi5oYW5kbGUpfHxTLnJlbW92ZUV2ZW50KGUsZCx2LmhhbmRsZSksZGVsZXRlIHVbZF0pfWVsc2UgZm9yKGQgaW4gdSlTLmV2ZW50LnJlbW92ZShlLGQrdFtsXSxuLHIsITApO1MuaXNFbXB0eU9iamVjdCh1KSYmWS5yZW1vdmUoZSwiaGFuZGxlIGV2ZW50cyIpfX0sZGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHU9Uy5ldmVudC5maXgoZSksbD0oWS5nZXQodGhpcywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW3UudHlwZV18fFtdLGM9Uy5ldmVudC5zcGVjaWFsW3UudHlwZV18fHt9O2ZvcihzWzBdPXUsdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspc1t0XT1hcmd1bWVudHNbdF07aWYodS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLHUpKXthPVMuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLHUsbCksdD0wO3doaWxlKChpPWFbdCsrXSkmJiF1LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe3UuY3VycmVudFRhcmdldD1pLmVsZW0sbj0wO3doaWxlKChvPWkuaGFuZGxlcnNbbisrXSkmJiF1LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpdS5ybmFtZXNwYWNlJiYhMSE9PW8ubmFtZXNwYWNlJiYhdS5ybmFtZXNwYWNlLnRlc3Qoby5uYW1lc3BhY2UpfHwodS5oYW5kbGVPYmo9byx1LmRhdGE9by5kYXRhLHZvaWQgMCE9PShyPSgoUy5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSxzKSkmJiExPT09KHUucmVzdWx0PXIpJiYodS5wcmV2ZW50RGVmYXVsdCgpLHUuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyx1KSx1LnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzPVtdLHU9dC5kZWxlZ2F0ZUNvdW50LGw9ZS50YXJnZXQ7aWYodSYmbC5ub2RlVHlwZSYmISgiY2xpY2siPT09ZS50eXBlJiYxPD1lLmJ1dHRvbikpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKCJjbGljayIhPT1lLnR5cGV8fCEwIT09bC5kaXNhYmxlZCkpe2ZvcihvPVtdLGE9e30sbj0wO248dTtuKyspdm9pZCAwPT09YVtpPShyPXRbbl0pLnNlbGVjdG9yKyIgIl0mJihhW2ldPXIubmVlZHNDb250ZXh0Py0xPFMoaSx0aGlzKS5pbmRleChsKTpTLmZpbmQoaSx0aGlzLG51bGwsW2xdKS5sZW5ndGgpLGFbaV0mJm8ucHVzaChyKTtvLmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6b30pfXJldHVybiBsPXRoaXMsdTx0Lmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6dC5zbGljZSh1KX0pLHN9LGFkZFByb3A6ZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoUy5FdmVudC5wcm90b3R5cGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0Om0oZSk/ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIGUodGhpcy5vcmlnaW5hbEV2ZW50KX06ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFt0XX0sc2V0OmZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX19KX0sZml4OmZ1bmN0aW9uKGUpe3JldHVybiBlW1MuZXhwYW5kb10/ZTpuZXcgUy5FdmVudChlKX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGNsaWNrOntzZXR1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmQWUodCwiY2xpY2siLENlKSwhMX0sdHJpZ2dlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmQWUodCwiY2xpY2siKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZZLmdldCh0LCJjbGljayIpfHxBKHQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUucmVzdWx0JiZlLm9yaWdpbmFsRXZlbnQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19fSxTLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfSxTLkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgUy5FdmVudCkpcmV0dXJuIG5ldyBTLkV2ZW50KGUsdCk7ZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09ZS5kZWZhdWx0UHJldmVudGVkJiYhMT09PWUucmV0dXJuVmFsdWU/Q2U6RWUsdGhpcy50YXJnZXQ9ZS50YXJnZXQmJjM9PT1lLnRhcmdldC5ub2RlVHlwZT9lLnRhcmdldC5wYXJlbnROb2RlOmUudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1lLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PWUucmVsYXRlZFRhcmdldCk6dGhpcy50eXBlPWUsdCYmUy5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKSx0aGlzW1MuZXhwYW5kb109ITB9LFMuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDpFZSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpFZSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpFZSxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1DZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1DZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Q2UsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LFMuZWFjaCh7YWx0S2V5OiEwLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjaGFuZ2VkVG91Y2hlczohMCxjdHJsS2V5OiEwLGRldGFpbDohMCxldmVudFBoYXNlOiEwLG1ldGFLZXk6ITAscGFnZVg6ITAscGFnZVk6ITAsc2hpZnRLZXk6ITAsdmlldzohMCwiY2hhciI6ITAsY29kZTohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmYmUudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU/ZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJndlLnRlc3QoZS50eXBlKT8xJnQ/MToyJnQ/Mzo0JnQ/MjowOmUud2hpY2h9fSxTLmV2ZW50LmFkZFByb3ApLFMuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtTLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIEFlKHRoaXMsZSxTZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gQWUodGhpcyxlKSwhMH0sZGVsZWdhdGVUeXBlOnR9fSksUy5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe1MuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOmksYmluZFR5cGU6aSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnJlbGF0ZWRUYXJnZXQscj1lLmhhbmRsZU9iajtyZXR1cm4gbiYmKG49PT10aGlzfHxTLmNvbnRhaW5zKHRoaXMsbikpfHwoZS50eXBlPXIub3JpZ1R5cGUsdD1yLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT1pKSx0fX19KSxTLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGtlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4ga2UodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosUyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49RWUpLHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIE5lPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLERlPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGplPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZztmdW5jdGlvbiBxZShlLHQpe3JldHVybiBBKGUsInRhYmxlIikmJkEoMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpJiZTKGUpLmNoaWxkcmVuKCJ0Ym9keSIpWzBdfHxlfWZ1bmN0aW9uIExlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gSGUoZSl7cmV0dXJuInRydWUvIj09PShlLnR5cGV8fCIiKS5zbGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0aW9uIE9lKGUsdCl7dmFyIG4scixpLG8sYSxzO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihZLmhhc0RhdGEoZSkmJihzPVkuZ2V0KGUpLmV2ZW50cykpZm9yKGkgaW4gWS5yZW1vdmUodCwiaGFuZGxlIGV2ZW50cyIpLHMpZm9yKG49MCxyPXNbaV0ubGVuZ3RoO248cjtuKyspUy5ldmVudC5hZGQodCxpLHNbaV1bbl0pO1EuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1TLmV4dGVuZCh7fSxvKSxRLnNldCh0LGEpKX19ZnVuY3Rpb24gUGUobixyLGksbyl7cj1nKHIpO3ZhciBlLHQsYSxzLHUsbCxjPTAsZj1uLmxlbmd0aCxwPWYtMSxkPXJbMF0saD1tKGQpO2lmKGh8fDE8ZiYmInN0cmluZyI9PXR5cGVvZiBkJiYheS5jaGVja0Nsb25lJiZEZS50ZXN0KGQpKXJldHVybiBuLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bi5lcShlKTtoJiYoclswXT1kLmNhbGwodGhpcyxlLHQuaHRtbCgpKSksUGUodCxyLGksbyl9KTtpZihmJiYodD0oZT14ZShyLG5bMF0ub3duZXJEb2N1bWVudCwhMSxuLG8pKS5maXJzdENoaWxkLDE9PT1lLmNoaWxkTm9kZXMubGVuZ3RoJiYoZT10KSx0fHxvKSl7Zm9yKHM9KGE9Uy5tYXAodmUoZSwic2NyaXB0IiksTGUpKS5sZW5ndGg7YzxmO2MrKyl1PWUsYyE9PXAmJih1PVMuY2xvbmUodSwhMCwhMCkscyYmUy5tZXJnZShhLHZlKHUsInNjcmlwdCIpKSksaS5jYWxsKG5bY10sdSxjKTtpZihzKWZvcihsPWFbYS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxTLm1hcChhLEhlKSxjPTA7YzxzO2MrKyl1PWFbY10saGUudGVzdCh1LnR5cGV8fCIiKSYmIVkuYWNjZXNzKHUsImdsb2JhbEV2YWwiKSYmUy5jb250YWlucyhsLHUpJiYodS5zcmMmJiJtb2R1bGUiIT09KHUudHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk/Uy5fZXZhbFVybCYmIXUubm9Nb2R1bGUmJlMuX2V2YWxVcmwodS5zcmMse25vbmNlOnUubm9uY2V8fHUuZ2V0QXR0cmlidXRlKCJub25jZSIpfSxsKTpiKHUudGV4dENvbnRlbnQucmVwbGFjZShqZSwiIiksdSxsKSl9cmV0dXJuIG59ZnVuY3Rpb24gUmUoZSx0LG4pe2Zvcih2YXIgcixpPXQ/Uy5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fFMuY2xlYW5EYXRhKHZlKHIpKSxyLnBhcmVudE5vZGUmJihuJiZpZShyKSYmeWUodmUociwic2NyaXB0IikpLHIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSk7cmV0dXJuIGV9Uy5leHRlbmQoe2h0bWxQcmVmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPWUuY2xvbmVOb2RlKCEwKSxmPWllKGUpO2lmKCEoeS5ub0Nsb25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8Uy5pc1hNTERvYyhlKSkpZm9yKGE9dmUoYykscj0wLGk9KG89dmUoZSkpLmxlbmd0aDtyPGk7cisrKXM9b1tyXSx1PWFbcl0sdm9pZCAwLCJpbnB1dCI9PT0obD11Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZwZS50ZXN0KHMudHlwZSk/dS5jaGVja2VkPXMuY2hlY2tlZDoiaW5wdXQiIT09bCYmInRleHRhcmVhIiE9PWx8fCh1LmRlZmF1bHRWYWx1ZT1zLmRlZmF1bHRWYWx1ZSk7aWYodClpZihuKWZvcihvPW98fHZlKGUpLGE9YXx8dmUoYykscj0wLGk9by5sZW5ndGg7cjxpO3IrKylPZShvW3JdLGFbcl0pO2Vsc2UgT2UoZSxjKTtyZXR1cm4gMDwoYT12ZShjLCJzY3JpcHQiKSkubGVuZ3RoJiZ5ZShhLCFmJiZ2ZShlLCJzY3JpcHQiKSksY30sY2xlYW5EYXRhOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaT1TLmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShuPWVbb10pO28rKylpZihWKG4pKXtpZih0PW5bWS5leHBhbmRvXSl7aWYodC5ldmVudHMpZm9yKHIgaW4gdC5ldmVudHMpaVtyXT9TLmV2ZW50LnJlbW92ZShuLHIpOlMucmVtb3ZlRXZlbnQobixyLHQuaGFuZGxlKTtuW1kuZXhwYW5kb109dm9pZCAwfW5bUS5leHBhbmRvXSYmKG5bUS5leHBhbmRvXT12b2lkIDApfX19KSxTLmZuLmV4dGVuZCh7ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBSZSh0aGlzLGUsITApfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIFJlKHRoaXMsZSl9LHRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9TLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fHFlKHRoaXMsZSkuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cWUodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBQZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PTA7bnVsbCE9KGU9dGhpc1t0XSk7dCsrKTE9PT1lLm5vZGVUeXBlJiYoUy5jbGVhbkRhdGEodmUoZSwhMSkpLGUudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBTLmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmIU5lLnRlc3QoZSkmJiFnZVsoZGUuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9Uy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKFMuY2xlYW5EYXRhKHZlKHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIG49W107cmV0dXJuIFBlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtTLmluQXJyYXkodGhpcyxuKTwwJiYoUy5jbGVhbkRhdGEodmUodGhpcykpLHQmJnQucmVwbGFjZUNoaWxkKGUsdGhpcykpfSxuKX19KSxTLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLGEpe1MuZm5bZV09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W10scj1TKGUpLGk9ci5sZW5ndGgtMSxvPTA7bzw9aTtvKyspdD1vPT09aT90aGlzOnRoaXMuY2xvbmUoITApLFMocltvXSlbYV0odCksdS5hcHBseShuLHQuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgTWU9bmV3IFJlZ0V4cCgiXigiK2VlKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksSWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiB0JiZ0Lm9wZW5lcnx8KHQ9QyksdC5nZXRDb21wdXRlZFN0eWxlKGUpfSxXZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9O2ZvcihpIGluIHQpb1tpXT1lLnN0eWxlW2ldLGUuc3R5bGVbaV09dFtpXTtmb3IoaSBpbiByPW4uY2FsbChlKSx0KWUuc3R5bGVbaV09b1tpXTtyZXR1cm4gcn0sRmU9bmV3IFJlZ0V4cChuZS5qb2luKCJ8IiksImkiKTtmdW5jdGlvbiBCZShlLHQsbil7dmFyIHIsaSxvLGEscz1lLnN0eWxlO3JldHVybihuPW58fEllKGUpKSYmKCIiIT09KGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdKXx8aWUoZSl8fChhPVMuc3R5bGUoZSx0KSksIXkucGl4ZWxCb3hTdHlsZXMoKSYmTWUudGVzdChhKSYmRmUudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsbz1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hKyIiOmF9ZnVuY3Rpb24gJGUoZSx0KXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7aWYoIWUoKSlyZXR1cm4odGhpcy5nZXQ9dCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSB0aGlzLmdldH19fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZihsKXt1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAiLGwuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NjAlO3RvcDoxJSIscmUuYXBwZW5kQ2hpbGQodSkuYXBwZW5kQ2hpbGQobCk7dmFyIGU9Qy5nZXRDb21wdXRlZFN0eWxlKGwpO249IjElIiE9PWUudG9wLHM9MTI9PT10KGUubWFyZ2luTGVmdCksbC5zdHlsZS5yaWdodD0iNjAlIixvPTM2PT09dChlLnJpZ2h0KSxyPTM2PT09dChlLndpZHRoKSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaT0xMj09PXQobC5vZmZzZXRXaWR0aC8zKSxyZS5yZW1vdmVDaGlsZCh1KSxsPW51bGx9fWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIG4scixpLG8sYSxzLHU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPUUuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZSYmKGwuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixsLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIseS5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWwuc3R5bGUuYmFja2dyb3VuZENsaXAsUy5leHRlbmQoeSx7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHJ9LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxvfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxufSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHN9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLGl9LHJlbGlhYmxlVHJEaW1lbnNpb25zOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7cmV0dXJuIG51bGw9PWEmJihlPUUuY3JlYXRlRWxlbWVudCgidGFibGUiKSx0PUUuY3JlYXRlRWxlbWVudCgidHIiKSxuPUUuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4Iix0LnN0eWxlLmhlaWdodD0iMXB4IixuLnN0eWxlLmhlaWdodD0iOXB4IixyZS5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZCh0KS5hcHBlbmRDaGlsZChuKSxyPUMuZ2V0Q29tcHV0ZWRTdHlsZSh0KSxhPTM8cGFyc2VJbnQoci5oZWlnaHQpLHJlLnJlbW92ZUNoaWxkKGUpKSxhfX0pKX0oKTt2YXIgX2U9WyJXZWJraXQiLCJNb3oiLCJtcyJdLHplPUUuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsVWU9e307ZnVuY3Rpb24gWGUoZSl7dmFyIHQ9Uy5jc3NQcm9wc1tlXXx8VWVbZV07cmV0dXJuIHR8fChlIGluIHplP2U6VWVbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1fZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPV9lW25dK3QpaW4gemUpcmV0dXJuIGV9KGUpfHxlKX12YXIgVmU9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLEdlPS9eLS0vLFllPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxRZT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn07ZnVuY3Rpb24gSmUoZSx0LG4pe3ZhciByPXRlLmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzJdLShufHwwKSkrKHJbM118fCJweCIpOnR9ZnVuY3Rpb24gS2UoZSx0LG4scixpLG8pe3ZhciBhPSJ3aWR0aCI9PT10PzE6MCxzPTAsdT0wO2lmKG49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpKXJldHVybiAwO2Zvcig7YTw0O2ErPTIpIm1hcmdpbiI9PT1uJiYodSs9Uy5jc3MoZSxuK25lW2FdLCEwLGkpKSxyPygiY29udGVudCI9PT1uJiYodS09Uy5jc3MoZSwicGFkZGluZyIrbmVbYV0sITAsaSkpLCJtYXJnaW4iIT09biYmKHUtPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKSkpOih1Kz1TLmNzcyhlLCJwYWRkaW5nIituZVthXSwhMCxpKSwicGFkZGluZyIhPT1uP3UrPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKTpzKz1TLmNzcyhlLCJib3JkZXIiK25lW2FdKyJXaWR0aCIsITAsaSkpO3JldHVybiFyJiYwPD1vJiYodSs9TWF0aC5tYXgoMCxNYXRoLmNlaWwoZVsib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tby11LXMtLjUpKXx8MCksdX1mdW5jdGlvbiBaZShlLHQsbil7dmFyIHI9SWUoZSksaT0oIXkuYm94U2l6aW5nUmVsaWFibGUoKXx8bikmJiJib3JkZXItYm94Ij09PVMuY3NzKGUsImJveFNpemluZyIsITEsciksbz1pLGE9QmUoZSx0LHIpLHM9Im9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7aWYoTWUudGVzdChhKSl7aWYoIW4pcmV0dXJuIGE7YT0iYXV0byJ9cmV0dXJuKCF5LmJveFNpemluZ1JlbGlhYmxlKCkmJml8fCF5LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkmJkEoZSwidHIiKXx8ImF1dG8iPT09YXx8IXBhcnNlRmxvYXQoYSkmJiJpbmxpbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIsITEscikpJiZlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiYoaT0iYm9yZGVyLWJveCI9PT1TLmNzcyhlLCJib3hTaXppbmciLCExLHIpLChvPXMgaW4gZSkmJihhPWVbc10pKSwoYT1wYXJzZUZsb2F0KGEpfHwwKStLZShlLHQsbnx8KGk/ImJvcmRlciI6ImNvbnRlbnQiKSxvLHIsYSkrInB4In1mdW5jdGlvbiBldChlLHQsbixyLGkpe3JldHVybiBuZXcgZXQucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX1TLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPUJlKGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGdyaWRBcmVhOiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTdGFydDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnt9LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIGksbyxhLHM9WCh0KSx1PUdlLnRlc3QodCksbD1lLnN0eWxlO2lmKHV8fCh0PVhlKHMpKSxhPVMuY3NzSG9va3NbdF18fFMuY3NzSG9va3Nbc10sdm9pZCAwPT09bilyZXR1cm4gYSYmImdldCJpbiBhJiZ2b2lkIDAhPT0oaT1hLmdldChlLCExLHIpKT9pOmxbdF07InN0cmluZyI9PT0obz10eXBlb2YgbikmJihpPXRlLmV4ZWMobikpJiZpWzFdJiYobj1zZShlLHQsaSksbz0ibnVtYmVyIiksbnVsbCE9biYmbj09biYmKCJudW1iZXIiIT09b3x8dXx8KG4rPWkmJmlbM118fChTLmNzc051bWJlcltzXT8iIjoicHgiKSkseS5jbGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwobFt0XT0iaW5oZXJpdCIpLGEmJiJzZXQiaW4gYSYmdm9pZCAwPT09KG49YS5zZXQoZSxuLHIpKXx8KHU/bC5zZXRQcm9wZXJ0eSh0LG4pOmxbdF09bikpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPVgodCk7cmV0dXJuIEdlLnRlc3QodCl8fCh0PVhlKHMpKSwoYT1TLmNzc0hvb2tzW3RdfHxTLmNzc0hvb2tzW3NdKSYmImdldCJpbiBhJiYoaT1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1CZShlLHQscikpLCJub3JtYWwiPT09aSYmdCBpbiBRZSYmKGk9UWVbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLCEwPT09bnx8aXNGaW5pdGUobyk/b3x8MDppKTppfX0pLFMuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx1KXtTLmNzc0hvb2tzW3VdPXtnZXQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHQpcmV0dXJuIVZlLnRlc3QoUy5jc3MoZSwiZGlzcGxheSIpKXx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9aZShlLHUsbik6V2UoZSxZZSxmdW5jdGlvbigpe3JldHVybiBaZShlLHUsbil9KX0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPUllKGUpLG89IXkuc2Nyb2xsYm94U2l6ZSgpJiYiYWJzb2x1dGUiPT09aS5wb3NpdGlvbixhPShvfHxuKSYmImJvcmRlci1ib3giPT09Uy5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSxzPW4/S2UoZSx1LG4sYSxpKTowO3JldHVybiBhJiZvJiYocy09TWF0aC5jZWlsKGVbIm9mZnNldCIrdVswXS50b1VwcGVyQ2FzZSgpK3Uuc2xpY2UoMSldLXBhcnNlRmxvYXQoaVt1XSktS2UoZSx1LCJib3JkZXIiLCExLGkpLS41KSkscyYmKHI9dGUuZXhlYyh0KSkmJiJweCIhPT0oclszXXx8InB4IikmJihlLnN0eWxlW3VdPXQsdD1TLmNzcyhlLHUpKSxKZSgwLHQscyl9fX0pLFMuY3NzSG9va3MubWFyZ2luTGVmdD0kZSh5LnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoQmUoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LVdlKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSxTLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihpLG8pe1MuY3NzSG9va3NbaStvXT17ZXhwYW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49e30scj0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgiICIpOltlXTt0PDQ7dCsrKW5baStuZVt0XStvXT1yW3RdfHxyW3QtMl18fHJbMF07cmV0dXJuIG59fSwibWFyZ2luIiE9PWkmJihTLmNzc0hvb2tzW2krb10uc2V0PUplKX0pLFMuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPUllKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPVMuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj9TLnN0eWxlKGUsdCxuKTpTLmNzcyhlLHQpfSxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX19KSwoKFMuVHdlZW49ZXQpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZXQsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8Uy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fChTLmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9ZXQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOmV0LnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPWV0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD1TLmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6ZXQucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0pLmluaXQucHJvdG90eXBlPWV0LnByb3RvdHlwZSwoZXQucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9Uy5jc3MoZS5lbGVtLGUucHJvcCwiIikpJiYiYXV0byIhPT10P3Q6MH0sc2V0OmZ1bmN0aW9uKGUpe1MuZnguc3RlcFtlLnByb3BdP1MuZnguc3RlcFtlLnByb3BdKGUpOjEhPT1lLmVsZW0ubm9kZVR5cGV8fCFTLmNzc0hvb2tzW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVtYZShlLnByb3ApXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzpTLnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSkuc2Nyb2xsVG9wPWV0LnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LFMuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn0sUy5meD1ldC5wcm90b3R5cGUuaW5pdCxTLmZ4LnN0ZXA9e307dmFyIHR0LG50LHJ0LGl0LG90PS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxhdD0vcXVldWVIb29rcyQvO2Z1bmN0aW9uIHN0KCl7bnQmJighMT09PUUuaGlkZGVuJiZDLnJlcXVlc3RBbmltYXRpb25GcmFtZT9DLnJlcXVlc3RBbmltYXRpb25GcmFtZShzdCk6Qy5zZXRUaW1lb3V0KHN0LFMuZnguaW50ZXJ2YWwpLFMuZngudGljaygpKX1mdW5jdGlvbiB1dCgpe3JldHVybiBDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0dD12b2lkIDB9KSx0dD1EYXRlLm5vdygpfWZ1bmN0aW9uIGx0KGUsdCl7dmFyIG4scj0wLGk9e2hlaWdodDplfTtmb3IodD10PzE6MDtyPDQ7cis9Mi10KWlbIm1hcmdpbiIrKG49bmVbcl0pXT1pWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiBjdChlLHQsbil7Zm9yKHZhciByLGk9KGZ0LnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KGZ0LnR3ZWVuZXJzWyIqIl0pLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVybiByfWZ1bmN0aW9uIGZ0KG8sZSx0KXt2YXIgbixhLHI9MCxpPWZ0LnByZWZpbHRlcnMubGVuZ3RoLHM9Uy5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoYSlyZXR1cm4hMTtmb3IodmFyIGU9dHR8fHV0KCksdD1NYXRoLm1heCgwLGwuc3RhcnRUaW1lK2wuZHVyYXRpb24tZSksbj0xLSh0L2wuZHVyYXRpb258fDApLHI9MCxpPWwudHdlZW5zLmxlbmd0aDtyPGk7cisrKWwudHdlZW5zW3JdLnJ1bihuKTtyZXR1cm4gcy5ub3RpZnlXaXRoKG8sW2wsbix0XSksbjwxJiZpP3Q6KGl8fHMubm90aWZ5V2l0aChvLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgobyxbbF0pLCExKX0sbD1zLnByb21pc2Uoe2VsZW06byxwcm9wczpTLmV4dGVuZCh7fSxlKSxvcHRzOlMuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpTLmVhc2luZy5fZGVmYXVsdH0sdCksb3JpZ2luYWxQcm9wZXJ0aWVzOmUsb3JpZ2luYWxPcHRpb25zOnQsc3RhcnRUaW1lOnR0fHx1dCgpLGR1cmF0aW9uOnQuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49Uy5Ud2VlbihvLGwub3B0cyxlLHQsbC5vcHRzLnNwZWNpYWxFYXNpbmdbZV18fGwub3B0cy5lYXNpbmcpO3JldHVybiBsLnR3ZWVucy5wdXNoKG4pLG59LHN0b3A6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWU/bC50d2VlbnMubGVuZ3RoOjA7aWYoYSlyZXR1cm4gdGhpcztmb3IoYT0hMDt0PG47dCsrKWwudHdlZW5zW3RdLnJ1bigxKTtyZXR1cm4gZT8ocy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsLGVdKSk6cy5yZWplY3RXaXRoKG8sW2wsZV0pLHRoaXN9fSksYz1sLnByb3BzO2ZvcighZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhO2ZvcihuIGluIGUpaWYoaT10W3I9WChuKV0sbz1lW25dLEFycmF5LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSwoYT1TLmNzc0hvb2tzW3JdKSYmImV4cGFuZCJpbiBhKWZvcihuIGluIG89YS5leHBhbmQobyksZGVsZXRlIGVbcl0sbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKTtlbHNlIHRbcl09aX0oYyxsLm9wdHMuc3BlY2lhbEVhc2luZyk7cjxpO3IrKylpZihuPWZ0LnByZWZpbHRlcnNbcl0uY2FsbChsLG8sYyxsLm9wdHMpKXJldHVybiBtKG4uc3RvcCkmJihTLl9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9wdHMucXVldWUpLnN0b3A9bi5zdG9wLmJpbmQobikpLG47cmV0dXJuIFMubWFwKGMsY3QsbCksbShsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChvLGwpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwub3B0cy5kb25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdheXMpLFMuZngudGltZXIoUy5leHRlbmQodSx7ZWxlbTpvLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbH1TLkFuaW1hdGlvbj1TLmV4dGVuZChmdCx7dHdlZW5lcnM6eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIHNlKG4uZWxlbSxlLHRlLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7bShlKT8odD1lLGU9WyIqIl0pOmU9ZS5tYXRjaChQKTtmb3IodmFyIG4scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluPWVbcl0sZnQudHdlZW5lcnNbbl09ZnQudHdlZW5lcnNbbl18fFtdLGZ0LnR3ZWVuZXJzW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcnM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjLGY9IndpZHRoImluIHR8fCJoZWlnaHQiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZhZShlKSx2PVkuZ2V0KGUsImZ4c2hvdyIpO2ZvcihyIGluIG4ucXVldWV8fChudWxsPT0oYT1TLl9xdWV1ZUhvb2tzKGUsImZ4IikpLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHM9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHMoKX0pLGEudW5xdWV1ZWQrKyxwLmFsd2F5cyhmdW5jdGlvbigpe3AuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLFMucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksdClpZihpPXRbcl0sb3QudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShnPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1pfHwhdnx8dm9pZCAwPT09dltyXSljb250aW51ZTtnPSEwfWRbcl09diYmdltyXXx8Uy5zdHlsZShlLHIpfWlmKCh1PSFTLmlzRW1wdHlPYmplY3QodCkpfHwhUy5pc0VtcHR5T2JqZWN0KGQpKWZvcihyIGluIGYmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbnVsbD09KGw9diYmdi5kaXNwbGF5KSYmKGw9WS5nZXQoZSwiZGlzcGxheSIpKSwibm9uZSI9PT0oYz1TLmNzcyhlLCJkaXNwbGF5IikpJiYobD9jPWw6KGxlKFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz1TLmNzcyhlLCJkaXNwbGF5IiksbGUoW2VdKSkpLCgiaW5saW5lIj09PWN8fCJpbmxpbmUtYmxvY2siPT09YyYmbnVsbCE9bCkmJiJub25lIj09PVMuY3NzKGUsImZsb2F0IikmJih1fHwocC5kb25lKGZ1bmN0aW9uKCl7aC5kaXNwbGF5PWx9KSxudWxsPT1sJiYoYz1oLmRpc3BsYXksbD0ibm9uZSI9PT1jPyIiOmMpKSxoLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYoaC5vdmVyZmxvdz0iaGlkZGVuIixwLmFsd2F5cyhmdW5jdGlvbigpe2gub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxoLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGgub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMSxkKXV8fCh2PyJoaWRkZW4iaW4gdiYmKGc9di5oaWRkZW4pOnY9WS5hY2Nlc3MoZSwiZnhzaG93Iix7ZGlzcGxheTpsfSksbyYmKHYuaGlkZGVuPSFnKSxnJiZsZShbZV0sITApLHAuZG9uZShmdW5jdGlvbigpe2ZvcihyIGluIGd8fGxlKFtlXSksWS5yZW1vdmUoZSwiZnhzaG93IiksZClTLnN0eWxlKGUscixkW3JdKX0pKSx1PWN0KGc/dltyXTowLHIscCksciBpbiB2fHwodltyXT11LnN0YXJ0LGcmJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfV0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9mdC5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6ZnQucHJlZmlsdGVycy5wdXNoKGUpfX0pLFMuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT9TLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fG0oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIW0odCkmJnR9O3JldHVybiBTLmZ4Lm9mZj9yLmR1cmF0aW9uPTA6Im51bWJlciIhPXR5cGVvZiByLmR1cmF0aW9uJiYoci5kdXJhdGlvbiBpbiBTLmZ4LnNwZWVkcz9yLmR1cmF0aW9uPVMuZnguc3BlZWRzW3IuZHVyYXRpb25dOnIuZHVyYXRpb249Uy5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPXIucXVldWUmJiEwIT09ci5xdWV1ZXx8KHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bShyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmUy5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LFMuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKGFlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1TLmlzRW1wdHlPYmplY3QodCksbz1TLnNwZWVkKGUsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIGU9ZnQodGhpcyxTLmV4dGVuZCh7fSx0KSxvKTsoaXx8WS5nZXQodGhpcywiZmluaXNoIikpJiZlLnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihpLGUsbyl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChvKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBpJiYobz1lLGU9aSxpPXZvaWQgMCksZSYmdGhpcy5xdWV1ZShpfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0hMCx0PW51bGwhPWkmJmkrInF1ZXVlSG9va3MiLG49Uy50aW1lcnMscj1ZLmdldCh0aGlzKTtpZih0KXJbdF0mJnJbdF0uc3RvcCYmYShyW3RdKTtlbHNlIGZvcih0IGluIHIpclt0XSYmclt0XS5zdG9wJiZhdC50ZXN0KHQpJiZhKHJbdF0pO2Zvcih0PW4ubGVuZ3RoO3QtLTspblt0XS5lbGVtIT09dGhpc3x8bnVsbCE9aSYmblt0XS5xdWV1ZSE9PWl8fChuW3RdLmFuaW0uc3RvcChvKSxlPSExLG4uc3BsaWNlKHQsMSkpOyFlJiZvfHxTLmRlcXVldWUodGhpcyxpKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuITEhPT1hJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0PVkuZ2V0KHRoaXMpLG49dFthKyJxdWV1ZSJdLHI9dFthKyJxdWV1ZUhvb2tzIl0saT1TLnRpbWVycyxvPW4/bi5sZW5ndGg6MDtmb3IodC5maW5pc2g9ITAsUy5xdWV1ZSh0aGlzLGEsW10pLHImJnIuc3RvcCYmci5zdG9wLmNhbGwodGhpcywhMCksZT1pLmxlbmd0aDtlLS07KWlbZV0uZWxlbT09PXRoaXMmJmlbZV0ucXVldWU9PT1hJiYoaVtlXS5hbmltLnN0b3AoITApLGkuc3BsaWNlKGUsMSkpO2ZvcihlPTA7ZTxvO2UrKyluW2VdJiZuW2VdLmZpbmlzaCYmbltlXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgdC5maW5pc2h9KX19KSxTLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUscil7dmFyIGk9Uy5mbltyXTtTLmZuW3JdPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUobHQociwhMCksZSx0LG4pfX0pLFMuZWFjaCh7c2xpZGVEb3duOmx0KCJzaG93Iiksc2xpZGVVcDpsdCgiaGlkZSIpLHNsaWRlVG9nZ2xlOmx0KCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUscil7Uy5mbltlXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuYW5pbWF0ZShyLGUsdCxuKX19KSxTLnRpbWVycz1bXSxTLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj1TLnRpbWVycztmb3IodHQ9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHxTLmZ4LnN0b3AoKSx0dD12b2lkIDB9LFMuZngudGltZXI9ZnVuY3Rpb24oZSl7Uy50aW1lcnMucHVzaChlKSxTLmZ4LnN0YXJ0KCl9LFMuZnguaW50ZXJ2YWw9MTMsUy5meC5zdGFydD1mdW5jdGlvbigpe250fHwobnQ9ITAsc3QoKSl9LFMuZnguc3RvcD1mdW5jdGlvbigpe250PW51bGx9LFMuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LFMuZm4uZGVsYXk9ZnVuY3Rpb24ocixlKXtyZXR1cm4gcj1TLmZ4JiZTLmZ4LnNwZWVkc1tyXXx8cixlPWV8fCJmeCIsdGhpcy5xdWV1ZShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49Qy5zZXRUaW1lb3V0KGUscik7dC5zdG9wPWZ1bmN0aW9uKCl7Qy5jbGVhclRpbWVvdXQobil9fSl9LHJ0PUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpdD1FLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKEUuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLHJ0LnR5cGU9ImNoZWNrYm94Iix5LmNoZWNrT249IiIhPT1ydC52YWx1ZSx5Lm9wdFNlbGVjdGVkPWl0LnNlbGVjdGVkLChydD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0IixydC50eXBlPSJyYWRpbyIseS5yYWRpb1ZhbHVlPSJ0Ij09PXJ0LnZhbHVlO3ZhciBwdCxkdD1TLmV4cHIuYXR0ckhhbmRsZTtTLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiAkKHRoaXMsUy5hdHRyLGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLnJlbW92ZUF0dHIodGhpcyxlKX0pfX0pLFMuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/Uy5wcm9wKGUsdCxuKTooMT09PW8mJlMuaXNYTUxEb2MoZSl8fChpPVMuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fChTLmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP3B0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCBTLnJlbW92ZUF0dHIoZSx0KTppJiYic2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShyPVMuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZigheS5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmQShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goUCk7aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9fSkscHQ9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P1MucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LFMuZWFjaChTLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBhPWR0W3RdfHxTLmZpbmQuYXR0cjtkdFt0XT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gbnx8KGk9ZHRbb10sZHRbb109cixyPW51bGwhPWEoZSx0LG4pP286bnVsbCxkdFtvXT1pKSxyfX0pO3ZhciBodD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGd0PS9eKD86YXxhcmVhKSQvaTtmdW5jdGlvbiB2dChlKXtyZXR1cm4oZS5tYXRjaChQKXx8W10pLmpvaW4oIiAiKX1mdW5jdGlvbiB5dChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiBtdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOiJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaChQKXx8W119Uy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLFMucHJvcCxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbUy5wcm9wRml4W2VdfHxlXX0pfX0pLFMuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmUy5pc1hNTERvYyhlKXx8KHQ9Uy5wcm9wRml4W3RdfHx0LGk9Uy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6aHQudGVzdChlLm5vZGVOYW1lKXx8Z3QudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSkseS5vcHRTZWxlY3RlZHx8KFMucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7dCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxTLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe1MucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxTLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLmFkZENsYXNzKHQuY2FsbCh0aGlzLGUseXQodGhpcykpKX0pO2lmKChlPW10KHQpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT15dChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIrdnQoaSkrIiAiKXthPTA7d2hpbGUobz1lW2ErK10pci5pbmRleE9mKCIgIitvKyIgIik8MCYmKHIrPW8rIiAiKTtpIT09KHM9dnQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGEscyx1PTA7aWYobSh0KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1ModGhpcykucmVtb3ZlQ2xhc3ModC5jYWxsKHRoaXMsZSx5dCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIiKTtpZigoZT1tdCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9eXQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK3Z0KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXdoaWxlKC0xPHIuaW5kZXhPZigiICIrbysiICIpKXI9ci5yZXBsYWNlKCIgIitvKyIgIiwiICIpO2khPT0ocz12dChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGksdCl7dmFyIG89dHlwZW9mIGksYT0ic3RyaW5nIj09PW98fEFycmF5LmlzQXJyYXkoaSk7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmYT90P3RoaXMuYWRkQ2xhc3MoaSk6dGhpcy5yZW1vdmVDbGFzcyhpKTptKGkpP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLnRvZ2dsZUNsYXNzKGkuY2FsbCh0aGlzLGUseXQodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtpZihhKXt0PTAsbj1TKHRoaXMpLHI9bXQoaSk7d2hpbGUoZT1yW3QrK10pbi5oYXNDbGFzcyhlKT9uLnJlbW92ZUNsYXNzKGUpOm4uYWRkQ2xhc3MoZSl9ZWxzZSB2b2lkIDAhPT1pJiYiYm9vbGVhbiIhPT1vfHwoKGU9eXQodGhpcykpJiZZLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIixlKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIixlfHwhMT09PWk/IiI6WS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYtMTwoIiAiK3Z0KHl0KG4pKSsiICIpLmluZGV4T2YodCkpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIHh0PS9cci9nO1MuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24obil7dmFyIHIsZSxpLHQ9dGhpc1swXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tKG4pLHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgdDsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PSh0PWk/bi5jYWxsKHRoaXMsZSxTKHRoaXMpLnZhbCgpKTpuKT90PSIiOiJudW1iZXIiPT10eXBlb2YgdD90Kz0iIjpBcnJheS5pc0FycmF5KHQpJiYodD1TLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHI9Uy52YWxIb29rc1t0aGlzLnR5cGVdfHxTLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHImJnZvaWQgMCE9PXIuc2V0KHRoaXMsdCwidmFsdWUiKXx8KHRoaXMudmFsdWU9dCkpfSkpOnQ/KHI9Uy52YWxIb29rc1t0LnR5cGVdfHxTLnZhbEhvb2tzW3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYiZ2V0ImluIHImJnZvaWQgMCE9PShlPXIuZ2V0KHQsInZhbHVlIikpP2U6InN0cmluZyI9PXR5cGVvZihlPXQudmFsdWUpP2UucmVwbGFjZSh4dCwiIik6bnVsbD09ZT8iIjplOnZvaWQgMH19KSxTLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInZhbHVlIik7cmV0dXJuIG51bGwhPXQ/dDp2dChTLnRleHQoZSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5vcHRpb25zLG89ZS5zZWxlY3RlZEluZGV4LGE9InNlbGVjdC1vbmUiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhQShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PVMobikudmFsKCksYSlyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz1TLm1ha2VBcnJheSh0KSxhPWkubGVuZ3RoO3doaWxlKGEtLSkoKHI9aVthXSkuc2VsZWN0ZWQ9LTE8Uy5pbkFycmF5KFMudmFsSG9va3Mub3B0aW9uLmdldChyKSxvKSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fX0pLFMuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe1MudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD0tMTxTLmluQXJyYXkoUyhlKS52YWwoKSx0KX19LHkuY2hlY2tPbnx8KFMudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KSx5LmZvY3VzaW49Im9uZm9jdXNpbiJpbiBDO3ZhciBidD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sd3Q9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07Uy5leHRlbmQoUy5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmLHA9W258fEVdLGQ9di5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxoPXYuY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKG89Zj1hPW49bnx8RSwzIT09bi5ub2RlVHlwZSYmOCE9PW4ubm9kZVR5cGUmJiFidC50ZXN0KGQrUy5ldmVudC50cmlnZ2VyZWQpJiYoLTE8ZC5pbmRleE9mKCIuIikmJihkPShoPWQuc3BsaXQoIi4iKSkuc2hpZnQoKSxoLnNvcnQoKSksdT1kLmluZGV4T2YoIjoiKTwwJiYib24iK2QsKGU9ZVtTLmV4cGFuZG9dP2U6bmV3IFMuRXZlbnQoZCwib2JqZWN0Ij09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9cj8yOjMsZS5uYW1lc3BhY2U9aC5qb2luKCIuIiksZS5ybmFtZXNwYWNlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1uKSx0PW51bGw9PXQ/W2VdOlMubWFrZUFycmF5KHQsW2VdKSxjPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scnx8IWMudHJpZ2dlcnx8ITEhPT1jLnRyaWdnZXIuYXBwbHkobix0KSkpe2lmKCFyJiYhYy5ub0J1YmJsZSYmIXgobikpe2ZvcihzPWMuZGVsZWdhdGVUeXBlfHxkLGJ0LnRlc3QocytkKXx8KG89by5wYXJlbnROb2RlKTtvO289by5wYXJlbnROb2RlKXAucHVzaChvKSxhPW87YT09PShuLm93bmVyRG9jdW1lbnR8fEUpJiZwLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fEMpfWk9MDt3aGlsZSgobz1wW2krK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWY9byxlLnR5cGU9MTxpP3M6Yy5iaW5kVHlwZXx8ZCwobD0oWS5nZXQobywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW2UudHlwZV0mJlkuZ2V0KG8sImhhbmRsZSIpKSYmbC5hcHBseShvLHQpLChsPXUmJm9bdV0pJiZsLmFwcGx5JiZWKG8pJiYoZS5yZXN1bHQ9bC5hcHBseShvLHQpLCExPT09ZS5yZXN1bHQmJmUucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGUudHlwZT1kLHJ8fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fGMuX2RlZmF1bHQmJiExIT09Yy5fZGVmYXVsdC5hcHBseShwLnBvcCgpLHQpfHwhVihuKXx8dSYmbShuW2RdKSYmIXgobikmJigoYT1uW3VdKSYmKG5bdV09bnVsbCksUy5ldmVudC50cmlnZ2VyZWQ9ZCxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYuYWRkRXZlbnRMaXN0ZW5lcihkLHd0KSxuW2RdKCksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZmLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCx3dCksUy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGEmJihuW3VdPWEpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1TLmV4dGVuZChuZXcgUy5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTtTLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLFMuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIFMuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSkseS5mb2N1c2lufHxTLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7Uy5ldmVudC5zaW11bGF0ZShyLGUudGFyZ2V0LFMuZXZlbnQuZml4KGUpKX07Uy5ldmVudC5zcGVjaWFsW3JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcyx0PVkuYWNjZXNzKGUscik7dHx8ZS5hZGRFdmVudExpc3RlbmVyKG4saSwhMCksWS5hY2Nlc3MoZSxyLCh0fHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1ZLmFjY2VzcyhlLHIpLTE7dD9ZLmFjY2VzcyhlLHIsdCk6KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGksITApLFkucmVtb3ZlKGUscikpfX19KTt2YXIgVHQ9Qy5sb2NhdGlvbixDdD17Z3VpZDpEYXRlLm5vdygpfSxFdD0vXD8vO1MucGFyc2VYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7dD0obmV3IEMuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZSwidGV4dC94bWwiKX1jYXRjaChlKXt0PXZvaWQgMH1yZXR1cm4gdCYmIXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RofHxTLmVycm9yKCJJbnZhbGlkIFhNTDogIitlKSx0fTt2YXIgU3Q9L1xbXF0kLyxrdD0vXHI/XG4vZyxBdD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksTnQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIER0KG4sZSxyLGkpe3ZhciB0O2lmKEFycmF5LmlzQXJyYXkoZSkpUy5lYWNoKGUsZnVuY3Rpb24oZSx0KXtyfHxTdC50ZXN0KG4pP2kobix0KTpEdChuKyJbIisoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10P2U6IiIpKyJdIix0LHIsaSl9KTtlbHNlIGlmKHJ8fCJvYmplY3QiIT09dyhlKSlpKG4sZSk7ZWxzZSBmb3IodCBpbiBlKUR0KG4rIlsiK3QrIl0iLGVbdF0scixpKX1TLnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49bSh0KT90KCk6dDtyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uPyIiOm4pfTtpZihudWxsPT1lKXJldHVybiIiO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhUy5pc1BsYWluT2JqZWN0KGUpKVMuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpRHQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpfSxTLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIFMucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT1TLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT9TLm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFTKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmTnQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUF0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPVModGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP1MubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShrdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2Uoa3QsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIganQ9LyUyMC9nLHF0PS8jLiokLyxMdD0vKFs/Jl0pXz1bXiZdKi8sSHQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxPdD0vXig/OkdFVHxIRUFEKSQvLFB0PS9eXC9cLy8sUnQ9e30sTXQ9e30sSXQ9IiovIi5jb25jYXQoIioiKSxXdD1FLmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBGdChvKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iKiIpO3ZhciBuLHI9MCxpPWUudG9Mb3dlckNhc2UoKS5tYXRjaChQKXx8W107aWYobSh0KSl3aGlsZShuPWlbcisrXSkiKyI9PT1uWzBdPyhuPW4uc2xpY2UoMSl8fCIqIiwob1tuXT1vW25dfHxbXSkudW5zaGlmdCh0KSk6KG9bbl09b1tuXXx8W10pLnB1c2godCl9fWZ1bmN0aW9uIEJ0KHQsaSxvLGEpe3ZhciBzPXt9LHU9dD09PU10O2Z1bmN0aW9uIGwoZSl7dmFyIHI7cmV0dXJuIHNbZV09ITAsUy5lYWNoKHRbZV18fFtdLGZ1bmN0aW9uKGUsdCl7dmFyIG49dChpLG8sYSk7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBufHx1fHxzW25dP3U/IShyPW4pOnZvaWQgMDooaS5kYXRhVHlwZXMudW5zaGlmdChuKSxsKG4pLCExKX0pLHJ9cmV0dXJuIGwoaS5kYXRhVHlwZXNbMF0pfHwhc1siKiJdJiZsKCIqIil9ZnVuY3Rpb24gJHQoZSx0KXt2YXIgbixyLGk9Uy5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihuIGluIHQpdm9pZCAwIT09dFtuXSYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKTtyZXR1cm4gciYmUy5leHRlbmQoITAsZSxyKSxlfVd0LmhyZWY9VHQuaHJlZixTLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6VHQuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdChUdC5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpJdCx0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpKU09OLnBhcnNlLCJ0ZXh0IHhtbCI6Uy5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/JHQoJHQoZSxTLmFqYXhTZXR0aW5ncyksdCk6JHQoUy5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6RnQoUnQpLGFqYXhUcmFuc3BvcnQ6RnQoTXQpLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLHQ9dHx8e307dmFyIGMsZixwLG4sZCxyLGgsZyxpLG8sdj1TLmFqYXhTZXR1cCh7fSx0KSx5PXYuY29udGV4dHx8dixtPXYuY29udGV4dCYmKHkubm9kZVR5cGV8fHkuanF1ZXJ5KT9TKHkpOlMuZXZlbnQseD1TLkRlZmVycmVkKCksYj1TLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSx3PXYuc3RhdHVzQ29kZXx8e30sYT17fSxzPXt9LHU9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoaCl7aWYoIW4pe249e307d2hpbGUodD1IdC5leGVjKHApKW5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl09KG5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQodFsyXSl9dD1uW2UudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT10P251bGw6dC5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gaD9wOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09aCYmKGU9c1tlLnRvTG93ZXJDYXNlKCldPXNbZS50b0xvd2VyQ2FzZSgpXXx8ZSxhW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWgmJih2Lm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihoKVQuYWx3YXlzKGVbVC5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpd1t0XT1bd1t0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dTtyZXR1cm4gYyYmYy5hYm9ydCh0KSxsKDAsdCksdGhpc319O2lmKHgucHJvbWlzZShUKSx2LnVybD0oKGV8fHYudXJsfHxUdC5ocmVmKSsiIikucmVwbGFjZShQdCxUdC5wcm90b2NvbCsiLy8iKSx2LnR5cGU9dC5tZXRob2R8fHQudHlwZXx8di5tZXRob2R8fHYudHlwZSx2LmRhdGFUeXBlcz0odi5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFApfHxbIiJdLG51bGw9PXYuY3Jvc3NEb21haW4pe3I9RS5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e3IuaHJlZj12LnVybCxyLmhyZWY9ci5ocmVmLHYuY3Jvc3NEb21haW49V3QucHJvdG9jb2wrIi8vIitXdC5ob3N0IT1yLnByb3RvY29sKyIvLyIrci5ob3N0fWNhdGNoKGUpe3YuY3Jvc3NEb21haW49ITB9fWlmKHYuZGF0YSYmdi5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiB2LmRhdGEmJih2LmRhdGE9Uy5wYXJhbSh2LmRhdGEsdi50cmFkaXRpb25hbCkpLEJ0KFJ0LHYsdCxUKSxoKXJldHVybiBUO2ZvcihpIGluKGc9Uy5ldmVudCYmdi5nbG9iYWwpJiYwPT1TLmFjdGl2ZSsrJiZTLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLHYudHlwZT12LnR5cGUudG9VcHBlckNhc2UoKSx2Lmhhc0NvbnRlbnQ9IU90LnRlc3Qodi50eXBlKSxmPXYudXJsLnJlcGxhY2UocXQsIiIpLHYuaGFzQ29udGVudD92LmRhdGEmJnYucHJvY2Vzc0RhdGEmJjA9PT0odi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYodi5kYXRhPXYuZGF0YS5yZXBsYWNlKGp0LCIrIikpOihvPXYudXJsLnNsaWNlKGYubGVuZ3RoKSx2LmRhdGEmJih2LnByb2Nlc3NEYXRhfHwic3RyaW5nIj09dHlwZW9mIHYuZGF0YSkmJihmKz0oRXQudGVzdChmKT8iJiI6Ij8iKSt2LmRhdGEsZGVsZXRlIHYuZGF0YSksITE9PT12LmNhY2hlJiYoZj1mLnJlcGxhY2UoTHQsIiQxIiksbz0oRXQudGVzdChmKT8iJiI6Ij8iKSsiXz0iK0N0Lmd1aWQrKytvKSx2LnVybD1mK28pLHYuaWZNb2RpZmllZCYmKFMubGFzdE1vZGlmaWVkW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixTLmxhc3RNb2RpZmllZFtmXSksUy5ldGFnW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLFMuZXRhZ1tmXSkpLCh2LmRhdGEmJnYuaGFzQ29udGVudCYmITEhPT12LmNvbnRlbnRUeXBlfHx0LmNvbnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHYuY29udGVudFR5cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0Iix2LmRhdGFUeXBlc1swXSYmdi5hY2NlcHRzW3YuZGF0YVR5cGVzWzBdXT92LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dKygiKiIhPT12LmRhdGFUeXBlc1swXT8iLCAiK0l0KyI7IHE9MC4wMSI6IiIpOnYuYWNjZXB0c1siKiJdKSx2LmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGksdi5oZWFkZXJzW2ldKTtpZih2LmJlZm9yZVNlbmQmJighMT09PXYuYmVmb3JlU2VuZC5jYWxsKHksVCx2KXx8aCkpcmV0dXJuIFQuYWJvcnQoKTtpZih1PSJhYm9ydCIsYi5hZGQodi5jb21wbGV0ZSksVC5kb25lKHYuc3VjY2VzcyksVC5mYWlsKHYuZXJyb3IpLGM9QnQoTXQsdix0LFQpKXtpZihULnJlYWR5U3RhdGU9MSxnJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbVCx2XSksaClyZXR1cm4gVDt2LmFzeW5jJiYwPHYudGltZW91dCYmKGQ9Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSx2LnRpbWVvdXQpKTt0cnl7aD0hMSxjLnNlbmQoYSxsKX1jYXRjaChlKXtpZihoKXRocm93IGU7bCgtMSxlKX19ZWxzZSBsKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD10O2h8fChoPSEwLGQmJkMuY2xlYXJUaW1lb3V0KGQpLGM9dm9pZCAwLHA9cnx8IiIsVC5yZWFkeVN0YXRlPTA8ZT80OjAsaT0yMDA8PWUmJmU8MzAwfHwzMDQ9PT1lLG4mJihzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IoaSBpbiBzKWlmKHNbaV0mJnNbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31hfHwoYT1pKX1vPW98fGF9aWYobylyZXR1cm4gbyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dfSh2LFQsbikpLCFpJiYtMTxTLmluQXJyYXkoInNjcmlwdCIsdi5kYXRhVHlwZXMpJiYodi5jb252ZXJ0ZXJzWyJ0ZXh0IHNjcmlwdCJdPWZ1bmN0aW9uKCl7fSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoUy5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKFMuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09di50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgoeSxbbyxsLFRdKTp4LnJlamVjdFdpdGgoeSxbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx2LGk/bzphXSksYi5maXJlV2l0aCh5LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHZdKSwtLVMuYWN0aXZlfHxTLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFMuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBTLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxTLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtTW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksUy5hamF4KFMuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxTLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxTLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZS5oZWFkZXJzKSJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpJiYoZS5jb250ZW50VHlwZT1lLmhlYWRlcnNbdF18fCIiKX0pLFMuX2V2YWxVcmw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBTLmFqYXgoe3VybDplLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oKXt9fSxkYXRhRmlsdGVyOmZ1bmN0aW9uKGUpe1MuZ2xvYmFsRXZhbChlLHQsbil9fSl9LFMuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PVMoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLFMuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hUy5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sUy5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LFMuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIF90PXswOjIwMCwxMjIzOjIwNH0senQ9Uy5hamF4U2V0dGluZ3MueGhyKCk7eS5jb3JzPSEhenQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4genQseS5hamF4PXp0PSEhenQsUy5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYoeS5jb3JzfHx6dCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChfdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksUy5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxTLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gUy5nbG9iYWxFdmFsKGUpLGV9fX0pLFMuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxTLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1TKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgVXQsWHQ9W10sVnQ9Lyg9KVw/KD89JnwkKXxcP1w/LztTLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9WHQucG9wKCl8fFMuZXhwYW5kbysiXyIrQ3QuZ3VpZCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksUy5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9ITEhPT1lLmpzb25wJiYoVnQudGVzdChlLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiBlLmRhdGEmJjA9PT0oZS5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZWdC50ZXN0KGUuZGF0YSkmJiJkYXRhIik7aWYoYXx8Impzb25wIj09PWUuZGF0YVR5cGVzWzBdKXJldHVybiByPWUuanNvbnBDYWxsYmFjaz1tKGUuanNvbnBDYWxsYmFjayk/ZS5qc29ucENhbGxiYWNrKCk6ZS5qc29ucENhbGxiYWNrLGE/ZVthXT1lW2FdLnJlcGxhY2UoVnQsIiQxIityKTohMSE9PWUuanNvbnAmJihlLnVybCs9KEV0LnRlc3QoZS51cmwpPyImIjoiPyIpK2UuanNvbnArIj0iK3IpLGUuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBvfHxTLmVycm9yKHIrIiB3YXMgbm90IGNhbGxlZCIpLG9bMF19LGUuZGF0YVR5cGVzWzBdPSJqc29uIixpPUNbcl0sQ1tyXT1mdW5jdGlvbigpe289YXJndW1lbnRzfSxuLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PWk/UyhDKS5yZW1vdmVQcm9wKHIpOkNbcl09aSxlW3JdJiYoZS5qc29ucENhbGxiYWNrPXQuanNvbnBDYWxsYmFjayxYdC5wdXNoKHIpKSxvJiZtKGkpJiZpKG9bMF0pLG89aT12b2lkIDB9KSwic2NyaXB0In0pLHkuY3JlYXRlSFRNTERvY3VtZW50PSgoVXQ9RS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHkpLmlubmVySFRNTD0iPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1VdC5jaGlsZE5vZGVzLmxlbmd0aCksUy5wYXJzZUhUTUw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9bXTooImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0fHwoeS5jcmVhdGVIVE1MRG9jdW1lbnQ/KChyPSh0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSkuY3JlYXRlRWxlbWVudCgiYmFzZSIpKS5ocmVmPUUubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQocikpOnQ9RSksbz0hbiYmW10sKGk9Ti5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KGlbMV0pXTooaT14ZShbZV0sdCxvKSxvJiZvLmxlbmd0aCYmUyhvKS5yZW1vdmUoKSxTLm1lcmdlKFtdLGkuY2hpbGROb2RlcykpKTt2YXIgcixpLG99LFMuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9dGhpcyxzPWUuaW5kZXhPZigiICIpO3JldHVybi0xPHMmJihyPXZ0KGUuc2xpY2UocykpLGU9ZS5zbGljZSgwLHMpKSxtKHQpPyhuPXQsdD12b2lkIDApOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKGk9IlBPU1QiKSwwPGEubGVuZ3RoJiZTLmFqYXgoe3VybDplLHR5cGU6aXx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsYS5odG1sKHI/UygiPGRpdj4iKS5hcHBlbmQoUy5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSxTLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gUy5ncmVwKFMudGltZXJzLGZ1bmN0aW9uKGUpe3JldHVybiB0PT09ZS5lbGVtfSkubGVuZ3RofSxTLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD1TLmNzcyhlLCJwb3NpdGlvbiIpLGM9UyhlKSxmPXt9OyJzdGF0aWMiPT09bCYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIikscz1jLm9mZnNldCgpLG89Uy5jc3MoZSwidG9wIiksdT1TLmNzcyhlLCJsZWZ0IiksKCJhYnNvbHV0ZSI9PT1sfHwiZml4ZWQiPT09bCkmJi0xPChvK3UpLmluZGV4T2YoImF1dG8iKT8oYT0ocj1jLnBvc2l0aW9uKCkpLnRvcCxpPXIubGVmdCk6KGE9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLG0odCkmJih0PXQuY2FsbChlLG4sUy5leHRlbmQoe30scykpKSxudWxsIT10LnRvcCYmKGYudG9wPXQudG9wLXMudG9wK2EpLG51bGwhPXQubGVmdCYmKGYubGVmdD10LmxlZnQtcy5sZWZ0K2kpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGYpOigibnVtYmVyIj09dHlwZW9mIGYudG9wJiYoZi50b3ArPSJweCIpLCJudW1iZXIiPT10eXBlb2YgZi5sZWZ0JiYoZi5sZWZ0Kz0icHgiKSxjLmNzcyhmKSl9fSxTLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oZSl7Uy5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsdCxlKX0pO3ZhciBlLG4scj10aGlzWzBdO3JldHVybiByP3IuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg/KGU9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyx7dG9wOmUudG9wK24ucGFnZVlPZmZzZXQsbGVmdDplLmxlZnQrbi5wYWdlWE9mZnNldH0pOnt0b3A6MCxsZWZ0OjB9OnZvaWQgMH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG4scj10aGlzWzBdLGk9e3RvcDowLGxlZnQ6MH07aWYoImZpeGVkIj09PVMuY3NzKHIsInBvc2l0aW9uIikpdD1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Vsc2V7dD10aGlzLm9mZnNldCgpLG49ci5vd25lckRvY3VtZW50LGU9ci5vZmZzZXRQYXJlbnR8fG4uZG9jdW1lbnRFbGVtZW50O3doaWxlKGUmJihlPT09bi5ib2R5fHxlPT09bi5kb2N1bWVudEVsZW1lbnQpJiYic3RhdGljIj09PVMuY3NzKGUsInBvc2l0aW9uIikpZT1lLnBhcmVudE5vZGU7ZSYmZSE9PXImJjE9PT1lLm5vZGVUeXBlJiYoKGk9UyhlKS5vZmZzZXQoKSkudG9wKz1TLmNzcyhlLCJib3JkZXJUb3BXaWR0aCIsITApLGkubGVmdCs9Uy5jc3MoZSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpfXJldHVybnt0b3A6dC50b3AtaS50b3AtUy5jc3MociwibWFyZ2luVG9wIiwhMCksbGVmdDp0LmxlZnQtaS5sZWZ0LVMuY3NzKHIsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9mZnNldFBhcmVudDt3aGlsZShlJiYic3RhdGljIj09PVMuY3NzKGUsInBvc2l0aW9uIikpZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8cmV9KX19KSxTLmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24odCxpKXt2YXIgbz0icGFnZVlPZmZzZXQiPT09aTtTLmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKHgoZSk/cj1lOjk9PT1lLm5vZGVUeXBlJiYocj1lLmRlZmF1bHRWaWV3KSx2b2lkIDA9PT1uKXJldHVybiByP3JbaV06ZVt0XTtyP3Iuc2Nyb2xsVG8obz9yLnBhZ2VYT2Zmc2V0Om4sbz9uOnIucGFnZVlPZmZzZXQpOmVbdF09bn0sdCxlLGFyZ3VtZW50cy5sZW5ndGgpfX0pLFMuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLG4pe1MuY3NzSG9va3Nbbl09JGUoeS5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4gdD1CZShlLG4pLE1lLnRlc3QodCk/UyhlKS5wb3NpdGlvbigpW25dKyJweCI6dH0pfSksUy5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oYSxzKXtTLmVhY2goe3BhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6cywiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKHIsbyl7Uy5mbltvXT1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGgmJihyfHwiYm9vbGVhbiIhPXR5cGVvZiBlKSxpPXJ8fCghMD09PWV8fCEwPT09dD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHgoZSk/MD09PW8uaW5kZXhPZigib3V0ZXIiKT9lWyJpbm5lciIrYV06ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWUubm9kZVR5cGU/KHI9ZS5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoZS5ib2R5WyJzY3JvbGwiK2FdLHJbInNjcm9sbCIrYV0sZS5ib2R5WyJvZmZzZXQiK2FdLHJbIm9mZnNldCIrYV0sclsiY2xpZW50IithXSkpOnZvaWQgMD09PW4/Uy5jc3MoZSx0LGkpOlMuc3R5bGUoZSx0LG4saSl9LHMsbj9lOnZvaWQgMCxuKX19KX0pLFMuZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7Uy5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLFMuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX0saG92ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9fSksUy5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsbil7Uy5mbltuXT1mdW5jdGlvbihlLHQpe3JldHVybiAwPGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vbihuLG51bGwsZSx0KTp0aGlzLnRyaWdnZXIobil9fSk7dmFyIEd0PS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZztTLnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxtKGUpKXJldHVybiByPXMuY2FsbChhcmd1bWVudHMsMiksKGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KHMuY2FsbChhcmd1bWVudHMpKSl9KS5ndWlkPWUuZ3VpZD1lLmd1aWR8fFMuZ3VpZCsrLGl9LFMuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/Uy5yZWFkeVdhaXQrKzpTLnJlYWR5KCEwKX0sUy5pc0FycmF5PUFycmF5LmlzQXJyYXksUy5wYXJzZUpTT049SlNPTi5wYXJzZSxTLm5vZGVOYW1lPUEsUy5pc0Z1bmN0aW9uPW0sUy5pc1dpbmRvdz14LFMuY2FtZWxDYXNlPVgsUy50eXBlPXcsUy5ub3c9RGF0ZS5ub3csUy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9Uy50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSxTLnRyaW09ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6KGUrIiIpLnJlcGxhY2UoR3QsIiIpfSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gU30pO3ZhciBZdD1DLmpRdWVyeSxRdD1DLiQ7cmV0dXJuIFMubm9Db25mbGljdD1mdW5jdGlvbihlKXtyZXR1cm4gQy4kPT09UyYmKEMuJD1RdCksZSYmQy5qUXVlcnk9PT1TJiYoQy5qUXVlcnk9WXQpLFN9LCJ1bmRlZmluZWQiPT10eXBlb2YgZSYmKEMualF1ZXJ5PUMuJD1TKSxTfSk7Cg=="></script> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link href="data:text/css,html%7Bfont%2Dfamily%3Asans%2Dserif%3B%2Dwebkit%2Dtext%2Dsize%2Dadjust%3A100%25%3B%2Dms%2Dtext%2Dsize%2Dadjust%3A100%25%7Dbody%7Bmargin%3A0%7Darticle%2Caside%2Cdetails%2Cfigcaption%2Cfigure%2Cfooter%2Cheader%2Chgroup%2Cmain%2Cmenu%2Cnav%2Csection%2Csummary%7Bdisplay%3Ablock%7Daudio%2Ccanvas%2Cprogress%2Cvideo%7Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Abaseline%7Daudio%3Anot%28%5Bcontrols%5D%29%7Bdisplay%3Anone%3Bheight%3A0%7D%5Bhidden%5D%2Ctemplate%7Bdisplay%3Anone%7Da%7Bbackground%2Dcolor%3Atransparent%7Da%3Aactive%2Ca%3Ahover%7Boutline%3A0%7Dabbr%5Btitle%5D%7Bborder%2Dbottom%3A1px%20dotted%7Db%2Cstrong%7Bfont%2Dweight%3A700%7Ddfn%7Bfont%2Dstyle%3Aitalic%7Dh1%7Bmargin%3A%2E67em%200%3Bfont%2Dsize%3A2em%7Dmark%7Bcolor%3A%23000%3Bbackground%3A%23ff0%7Dsmall%7Bfont%2Dsize%3A80%25%7Dsub%2Csup%7Bposition%3Arelative%3Bfont%2Dsize%3A75%25%3Bline%2Dheight%3A0%3Bvertical%2Dalign%3Abaseline%7Dsup%7Btop%3A%2D%2E5em%7Dsub%7Bbottom%3A%2D%2E25em%7Dimg%7Bborder%3A0%7Dsvg%3Anot%28%3Aroot%29%7Boverflow%3Ahidden%7Dfigure%7Bmargin%3A1em%2040px%7Dhr%7Bheight%3A0%3B%2Dwebkit%2Dbox%2Dsizing%3Acontent%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Acontent%2Dbox%3Bbox%2Dsizing%3Acontent%2Dbox%7Dpre%7Boverflow%3Aauto%7Dcode%2Ckbd%2Cpre%2Csamp%7Bfont%2Dfamily%3Amonospace%2Cmonospace%3Bfont%2Dsize%3A1em%7Dbutton%2Cinput%2Coptgroup%2Cselect%2Ctextarea%7Bmargin%3A0%3Bfont%3Ainherit%3Bcolor%3Ainherit%7Dbutton%7Boverflow%3Avisible%7Dbutton%2Cselect%7Btext%2Dtransform%3Anone%7Dbutton%2Chtml%20input%5Btype%3Dbutton%5D%2Cinput%5Btype%3Dreset%5D%2Cinput%5Btype%3Dsubmit%5D%7B%2Dwebkit%2Dappearance%3Abutton%3Bcursor%3Apointer%7Dbutton%5Bdisabled%5D%2Chtml%20input%5Bdisabled%5D%7Bcursor%3Adefault%7Dbutton%3A%3A%2Dmoz%2Dfocus%2Dinner%2Cinput%3A%3A%2Dmoz%2Dfocus%2Dinner%7Bpadding%3A0%3Bborder%3A0%7Dinput%7Bline%2Dheight%3Anormal%7Dinput%5Btype%3Dcheckbox%5D%2Cinput%5Btype%3Dradio%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%3Bpadding%3A0%7Dinput%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Dinner%2Dspin%2Dbutton%2Cinput%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Douter%2Dspin%2Dbutton%7Bheight%3Aauto%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Acontent%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Acontent%2Dbox%3Bbox%2Dsizing%3Acontent%2Dbox%3B%2Dwebkit%2Dappearance%3Atextfield%7Dinput%5Btype%3Dsearch%5D%3A%3A%2Dwebkit%2Dsearch%2Dcancel%2Dbutton%2Cinput%5Btype%3Dsearch%5D%3A%3A%2Dwebkit%2Dsearch%2Ddecoration%7B%2Dwebkit%2Dappearance%3Anone%7Dfieldset%7Bpadding%3A%2E35em%20%2E625em%20%2E75em%3Bmargin%3A0%202px%3Bborder%3A1px%20solid%20silver%7Dlegend%7Bpadding%3A0%3Bborder%3A0%7Dtextarea%7Boverflow%3Aauto%7Doptgroup%7Bfont%2Dweight%3A700%7Dtable%7Bborder%2Dspacing%3A0%3Bborder%2Dcollapse%3Acollapse%7Dtd%2Cth%7Bpadding%3A0%7D%40media%20print%7B%2A%2C%3Aafter%2C%3Abefore%7Bcolor%3A%23000%21important%3Btext%2Dshadow%3Anone%21important%3Bbackground%3A0%200%21important%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%21important%3Bbox%2Dshadow%3Anone%21important%7Da%2Ca%3Avisited%7Btext%2Ddecoration%3Aunderline%7Da%5Bhref%5D%3Aafter%7Bcontent%3A%22%20%28%22%20attr%28href%29%20%22%29%22%7Dabbr%5Btitle%5D%3Aafter%7Bcontent%3A%22%20%28%22%20attr%28title%29%20%22%29%22%7Da%5Bhref%5E%3D%22javascript%3A%22%5D%3Aafter%2Ca%5Bhref%5E%3D%22%23%22%5D%3Aafter%7Bcontent%3A%22%22%7Dblockquote%2Cpre%7Bborder%3A1px%20solid%20%23999%3Bpage%2Dbreak%2Dinside%3Aavoid%7Dthead%7Bdisplay%3Atable%2Dheader%2Dgroup%7Dimg%2Ctr%7Bpage%2Dbreak%2Dinside%3Aavoid%7Dimg%7Bmax%2Dwidth%3A100%25%21important%7Dh2%2Ch3%2Cp%7Borphans%3A3%3Bwidows%3A3%7Dh2%2Ch3%7Bpage%2Dbreak%2Dafter%3Aavoid%7D%2Enavbar%7Bdisplay%3Anone%7D%2Ebtn%3E%2Ecaret%2C%2Edropup%3E%2Ebtn%3E%2Ecaret%7Bborder%2Dtop%2Dcolor%3A%23000%21important%7D%2Elabel%7Bborder%3A1px%20solid%20%23000%7D%2Etable%7Bborder%2Dcollapse%3Acollapse%21important%7D%2Etable%20td%2C%2Etable%20th%7Bbackground%2Dcolor%3A%23fff%21important%7D%2Etable%2Dbordered%20td%2C%2Etable%2Dbordered%20th%7Bborder%3A1px%20solid%20%23ddd%21important%7D%7D%40font%2Dface%7Bfont%2Dfamily%3A%27Glyphicons%20Halflings%27%3Bsrc%3Aurl%28data%3Aapplication%2Fvnd%2Ems%2Dfontobject%3Bbase64%2Cn04AAEFNAAACAAIABAAAAAAABQAAAAAAAAABAJABAAAEAExQAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAJxJ%2FLAAAAAAAAAAAAAAAAAAAAAAAACgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAAAADgBSAGUAZwB1AGwAYQByAAAAeABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAA5ADsAUABTACAAMAAwADEALgAwADAAOQA7AGgAbwB0AGMAbwBuAHYAIAAxAC4AMAAuADcAMAA7AG0AYQBrAGUAbwB0AGYALgBsAGkAYgAyAC4ANQAuADUAOAAzADIAOQAAADgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzACAAUgBlAGcAdQBsAGEAcgAAAAAAQlNHUAAAAAAAAAAAAAAAAAAAAAADAKncAE0TAE0ZAEbuFM3pjM%2FSEdmjKHUbyow8ATBE40IvWA3vTu8LiABDQ%2BpexwUMcm1SMnNryctQSiI1K5ZnbOlXKmnVV5YvRe6RnNMFNCOs1KNVpn6yZhCJkRtVRNzEufeIq7HgSrcx4S8h%2Fv4vnrrKc6oCNxmSk2uKlZQHBii6iKFoH0746ThvkO1kJHlxjrkxs%2BLWORaDQBEtiYJIR5IB9Bi1UyL4Rmr0BNigNkMzlKQmnofBHviqVzUxwdMb3NdCn69hy%2BpRYVKGVS%2F1tnsqv4LL7wCCPZZAZPT4aCShHjHJVNuXbmMrY5LeQaGnvAkXlVrJgKRAUdFjrWEah9XebPeQMj7KS7DIBAFt8ycgC5PLGUOHSE3ErGZCiViNLL5ZARfywnCoZaKQCu6NuFX42AEeKtKUGnr%2FCm2Cy8tpFhBPMW5Fxi4Qm4TkDWh4IWFDClhU2hRWosUWqcKLlgyXB%2BlSHaWaHiWlBAR8SeSgSPCQxdVQgzUixWKSTrIQEbU94viDctkvX%2BVSjJuUmV8L4CXShI11esnp0pjWNZIyxKHS4wVQ2ime1P4RnhvGw0aDN1OLAXGERsB7buFpFGGBAre4QEQR0HOIO5oYH305G%2BKspT%2FFupEGGafCCwxSe6ZUa%2B073rXHnNdVXE6eWvibUS27XtRzkH838mYLMBmYysZTM0EM3A1fbpCBYFccN1B%2FEnCYu%2FTgCGmr7bMh8GfYL%2BBfcLvB0gRagC09w9elfldaIy%2FhNCBLRgBgtCC7jAF63wLSMAfbfAlEggYU0bUA7ACCJmTDpEmJtI78w4%2FBO7dN7JR7J7ZvbYaUbaILSQsRBiF3HGk5fEg6p9unwLvn98r%2BvnsV%2B372uf1xBLq4qU%2F45fTuqaAP%2BpssmCCCTF0mhEow8ZXZOS8D7Q85JsxZ%2BAzok7B7O%2Ff6J8AzYBySZQB%2FQHYUSA%2BEeQhEWiS6AIQzgcsDiER4MjgMBAWDV4AgQ3g1eBgIdweCQmCjJEMkJ%2BPKRWyFHHmg1Wi%2F6xzUgA0LREoKJChwnQa9B%2B5RQZRB3IlBlkAnxyQNaANwHMowzlYSMCBgnbpzvqpl0iTJNCQidDI9ZrSYNIRBhHtUa5YHMHxyGEik9hDE0AKj72AbTCaxtHPUaKZdAZSnQTyjGqGLsmBStCejApUhg4uBMU6mATujEl%2BKdDPbI6Ag4vLr%2BhjY6lbjBeoLKnZl0UZgRX8gTySOeynZVz1wOq7e1hFGYIq%2BMhrGxDLak0PrwYzSXtcuyhXEhwOYofiW%2BEcI%2Fjw8P6IY6ed%2BetAbuqKp5QIapT77LnAe505lMuqL79a0ut4rWexzFttsOsLDy7zvtQzcq3U1qabe7tB0wHWVXji%2BzDbo8x8HyIRUbXnwUcklFv51fvTymiV%2BMXLSmGH9d9%2BaXpD5X6lao41anWGig7IwIdnoBY2ht%2FpO9mClLo4NdXHAsefqWUKlXJkbqPOFhMoR4aiA1BXqhRNbB2Xwi%2B7u%2FjpAoOpKJ0UX24EsrzMfHXViakCNcKjBxuQX8BO0ZqjJ3xXzf%2B61t2VXOSgJ8xu65QKgtN6FibPmPYsXbJRHHqbgATcSZxBqGiDiU4NNNsYBsKD0MIP%2FOfKnlk%2FLkaid%2FO2NbKeuQrwOB2Gq3YHyr6ALgzym5wIBnsdC1ZkoBFZSQXChZvlesPqvK2c5oHHT3Q65jYpNxnQcGF0EHbvYqoFw60WNlXIHQF2HQB7zD6lWjZ9rVqUKBXUT6hrkZOle0RFYII0V5ZYGl1JAP0Ud1fZZMvSomBzJ710j4Me8mjQDwEre5Uv2wQfk1ifDwb5ksuJQQ3xt423lbuQjvoIQByQrNDh1JxGFkOdlJvu%2FgFtuW0wR4cgd%2BZKesSV7QkNE2kw6AV4hoIuC02LGmTomyf8PiO6CZzOTLTPQ%2BHW06H%2Btx%2BbQ8LmDYg1pTFrp2oJXgkZTyeRJZM0C8aE2LpFrNVDuhARsN543%2FFV6klQ6Tv1OoZGXLv0igKrl%2FCmJxRmX7JJbJ998VSIPQRyDBICzl4JJlYHbdql30NvYcOuZ7a10uWRrgoieOdgIm4rlq6vNOQBuqESLbXG5lzdJGHw2m0sDYmODXbYGTfSTGRKpssTO95fothJCjUGQgEL4yKoGAF%2F0SrpUDNn8CBgBcSDQByAeNkCXp4S4Ro2Xh4OeaGRgR66PVOsU8bc6TR5%2FxTcn4IVMLOkXSWiXxkZQCbvKfmoAvQaKjO3EDKwkwqHChCDEM5loQRPd5ACBki1TjF772oaQhQbQ5C0lcWXPFOzrfsDGUXGrpxasbG4iab6eByaQkQfm0VFlP0ZsDkvvqCL6QXMUwCjdMx1ZOyKhTJ7a1GWAdOUcJ8RSejxNVyGs31OKMyRyBVoZFjqIkmKlLQ5eHMeEL4MkUf23cQ%2F1SgRCJ1dk4UdBT7OoyuNgLs0oCd8RnrEIb6QdMxT2QjD4zMrJkfgx5aDMcA4orsTtKCqWb%2FVeyceqa5OGSmB28YwH4rFbkQaLoUN8OQQYnD3w2eXpI4ScQfbCUZiJ4yMOIKLyyTc7BQ4uXUw6Ee6%2FxM%2B4Y67ngNBknxIPwuppgIhFcwJyr6EIj%2BLzNj%2FmfR2vhhRlx0BILZoAYruF0caWQ7YxO66UmeguDREAFHYuC7HJviRgVO6ruJH59h%2FC%2FPkgSle8xNzZJULLWq9JMDTE2fjGE146a1Us6PZDGYle6ldWRqn%2FpdpgHKNGrGIdkRK%2BKPETT9nKT6kLyDI8xd9A1FgWmXWRAIHwZ37WyZHOVyCadJEmMVz0MadMjDrPho%2BEIochkVC2xgGiwwsQ6DMv2P7UXqT4x7CdcYGId2BJQQa85EQKmCmwcRejQ9Bm4oATENFPkxPXILHpMPUyWTI5rjNOsIlmEeMbcOCEqInpXACYQ9DDxmFo9vcmsDblcMtg4tqBerNngkIKaFJmrQAPnq1dEzsMXcwjcHdfdCibcAxxA%2Bq%2Fj9m3LM%2FO7WJka4tSidVCjsvo2lQ%2F2ewyoYyXwAYyr2PlRoR5MpgVmSUIrM3PQxXPbgjBOaDQFIyFMJvx3Pc5RSYj12ySVF9fwFPQu2e2KWVoL9q3Ayv3IzpGHUdvdPdrNUdicjsTQ2ISy7QU3DrEytIjvbzJnAkmANXjAFERA0MUoPF3%2F5KFmW14bBNOhwircYgMqoDpUMcDtCmBE82QM2YtdjVLB4kBuKho%2FbcwQdeboqfQartuU3CsCf%2BcXkgYAqp%2F0Ee3RorAZt0AvvOCSI4JICIlGlsV0bsSid%2FNIEALAAzb6HAgyWHBps6xAOwkJIGcB82CxRQq4sJf3FzA70A%2BTRqcqjEMETCoez3mkPcpnoALs0ugJY8kQwrC%2BJE5ik3w9rzrvDRjAQnqgEVvdGrNwlanR0SOKWzxOJOvLJhcd8Cl4AshACUkv9czdMkJCVQSQhp6kp7StAlpVRpK0t0SW6LHeBJnE2QchB5Ccu8kxRghZXGIgZIiSj7gEKMJDClcnX6hgoqJMwiQDigIXg3ioFLCgDgjPtYHYpsF5EiA4kcnN18MZtOrY866dEQAb0FB34OGKHGZQjwW%2FWDHA60cYFaI%2FPjpzquUqdaYGcIq%2BmLez3WLFFCtNBN2QJcrlcoELgiPku5R5dSlJFaCEqEZle1AQzAKC%2B1SotMcBNyQUFuRHRF6OlimSBgjZeTBCwLyc6A%2BP%2FoFRchXTz5ADknYJHxzrJ5pGuIKRQISU6WyKTBBjD8WozmVYWIsto1AS5rxzKlvJu4E%2FvwOiKxRtCWsDM%2BeTHUrmwrCK5BIfMzGkD%2B0Fk5LzBs0jMYXktNDblB06LMNJ09U8pzSLmo14MS0OMjcdrZ31pyQqxJJpRImlSvfYAK8inkYU52QY2FPEVsjoWewpwhRp5yAuNpkqhdb7ku9Seefl2D0B8SMTFD90xi4CSOwwZy9IKkpMtI3FmFUg3%2FkFutpQGNc3pCR7gvC4sgwbupDu3DyEN%2BW6YGLNM21jpB49irxy9BSlHrVDlnihGKHwPrbVFtc%2Bh1rVQKZduxIyojccZIIcOCmhEnC7UkY68WXKQgLi2JCDQkQWJRQuk60hZp0D3rtCTINSeY9Ej2kIKYfGxwOs4j9qMM7fYZiipzgcf7TamnehqdhsiMiCawXnz4xAbyCkLAx5EGbo3Ax1u3dUIKnTxIaxwQTHehPl3V491H0%2BbC5zgpGz7Io%2BmjdhKlPJ01EeMpM7UsRJMi1nGjmJg35i6bQBAAxjO%2FENJubU2mg3ONySEoWklCwdABETcs7ck3jgiuU9pcKKpbgn%2B3YlzV1FzIkB6pmEDOSSyDfPPlQskznctFji0kpgZjW5RZe6x9kYT4KJcXg0bNiCyif%2BpZACCyRMmYsfiKmN9tSO65F0R2OO6ytlEhY5Sj6uRKfFxw0ijJaAx%2Fk3QgnAFSq27%2F2i4GEBA%2BUvTJKK%2F9eISNvG46Em5RZfjTYLdeD8kdXHyrwId%2FDQZUaMCY4gGbke2C8vfjgV%2FY9kkRQOJIn%2FxM9INZSpiBnqX0Q9GlQPpPKAyO5y%2BW5NMPSRdBCUlmuxl40ZfMCnf2Cp044uI9WLFtCi4YVxKjuRCOBWIb4XbIsGdbo4qtMQnNOQz4XDSui7W%2FN6l54qOynCqD3DpWQ%2BmpD7C40D8BZEWGJX3tlAaZBMj1yjvDYKwCJBa201u6nBKE5UE%2B7QSEhCwrXfbRZylAaAkplhBWX50dumrElePyNMRYUrC99UmcSSNgImhFhDI4BXjMtiqkgizUGCrZ8iwFxU6fQ8GEHCFdLewwxYWxgScAYMdMLmcZR6b7rZl95eQVDGVoUKcRMM1ixXQtXNkBETZkVVPg8LoSrdetHzkuM7DjZRHP02tCxA1fmkXKF3VzfN1pc1cv%2F8lbTIkkYpqKM9VOhp65ktYk%2BQ46myFWBapDfyWUCnsnI00QTBQmuFjMZTcd0V2NQ768Fhpby04k2IzNR1wKabuGJqYWwSly6ocMFGTeeI%2BejsWDYgEvr66QgqdcIbFYDNgsm0x9UHY6SCd5%2B7tpsLpKdvhahIDyYmEJQCqMqtCF6UlrE5GXRmbu%2Bvtm3BFSxI6ND6UxIE7GsGMgWqghXxSnaRJuGFveTcK5ZVSPJyjUxe1dKgI6kNF7EZhIZs8y8FVqwEfbM0Xk2ltORVDKZZM40SD3qQoQe0orJEKwPfZwm3YPqwixhUMOndis6MhbmfvLBKjC8sKKIZKbJk8L11oNkCQzCgvjhyyEiQSuJcgCQSG4Mocfgc0Hkwcjal1UNgP0CBPikYqBIk9tONv4kLtBswH07vUCjEaHiFGlLf8MgXKzSgjp2HolRRccAOh0ILHz9qlGgIFkwAnzHJRjWFhlA7ROwINyB5HFj59PRZHFor6voq7l23EPNRwdWhgawqbivLSjRA4htEYUFkjESu67icTg5S0aW1sOkCiIysfJ9UnIWevOOLGpepcBxy1wEhd2WI3AZg7sr9WBmHWyasxMcvY%2FiOmsLtHSWNUWEGk9hScMPShasUA1AcHOtRZlqMeQ0OzYS9vQvYUjOLrzP07BUAFikcJNMi7gIxEw4pL1G54TcmmmoAQ5s7TGWErJZ2Io4yQ0ljRYhL8H5e62oDtLF8aDpnIvZ5R3GWJyAugdiiJW9hQAVTsnCBHhwu7rkBlBX6r3b7ejEY0k5GGeyKv66v%2B6dg7mcJTrWHbtMywbedYqCQ0FPwoytmSWsL8WTtChZCKKzEF7vP6De4x2BJkkniMgSdWhbeBSLtJZR9CTHetK1xb34AYIJ37OegYIoPVbXgJ%2FqDQK%2BbfCtxQRVKQu77WzOoM6SGL7MaZwCGJVk46aImai9fmam%2BWpHG%2B0BtQPWUgZ7RIAlPq6lkECUhZQ2gqWkMYKcYMYaIc4gYCDFHYa2d1nzp3%2BJ1eCBay8IYZ0wQRKGAqvCuZ%2FUgbQPyllosq%2BXtfKIZOzmeJqRazpmmoP%2F76YfkjzV2NlXTDSBYB04SVlNQsFTbGPk1t%2FI4Jktu0XSgifO2ozFOiwd%2F0SssJDn0dn4xqk4GDTTKX73%2FwQyBLdqgJ%2BWx6AQaba3BA9CKEzjtQYIfAsiYamapq80LAamYjinlKXUkxdpIDk0puXUEYzSalfRibAeDAKpNiqQ0FTwoxuGYzRnisyTotdVTclis1LHRQCy%2FqqL8oUaQzWRxilq5Mi0IJGtMY02cGLD69vGjkj3p6pGePKI8bkBv5evq8SjjyU04vJR2cQXQwSJyoinDsUJHCQ50jrFTT7yRdbdYQMB3MYCb6uBzJ9ewhXYPAIZSXfeEQBZZ3GPN3Nbhh%2FwkvAJLXnQMdi5NYYZ5GHE400GS5rXkOZSQsdZgIbzRnF9ueLnsfQ47wHAsirITnTlkCcuWWIUhJSbpM3wWhXNHvt2xUsKKMpdBSbJnBMcihkoDqAd1Zml%2FR4yrzow1Q2A5G%2Bkzo%2FRhRxQS2lCSDRV8LlYLBOOoo1bF4jwJAwKMK1tWLHlu9i0j4Ig8qVm6wE1DxXwAwQwsaBWUg2pOOol2dHxyt6npwJEdLDDVYyRc2D0HbcbLUJQj8gPevQBUBOUHXPrsAPBERICpnYESeu2OHotpXQxRGlCCtLdIsu23MhZVEoJg8Qumj%2FUMMc34IBqTKLDTp76WzL%2FdMjCxK7MjhiGjeYAC%2Fkj%2FjY%2FRde7hpSM1xChrog6yZ7OWTuD56xBJnGFE%2BpT2ElSyCnJcwVzCjkqeNLfMEJqKW0G7OFIp0G%2B9mh50I9o8k1tpCY0xYqFNIALgIfc2me4n1bmJnRZ89oepgLPT0NTMLNZsvSCZAc3TXaNB07vail36%2FdBySis4m9%2FDR8izaLJW6bWCkVgm5T%2Bius3ZXq4xI%2BGnbveLbdRwF2mNtsrE0JjYc1AXknCOrLSu7Te%2Fr4dPYMCl5qtiHNTn%2BTPbh1jCBHH%2BdMJNhwNgs3nT%2BOhQoQ0vYif56BMG6WowAcHR3DjQolxLzyVekHj00PBAaW7IIAF1EF%2BuRIWyXjQMAs2chdpaKPNaB%2BkSezYt0%2BCA04sOg5vx8Fr7Ofa9sUv87h7SLAUFSzbetCCZ9pmyLt6l6%2FTzoA1%2FZBG9bIUVHLAbi%2FkdBFgYGyGwRQGBpkqCEg2ah9UD6EedEcEL3j4y0BQQCiExEnocA3SZboh%2Bepgd3YsOkHskZwPuQ5OoyA0fTA5AXrHcUOQF%2BzkJHIA7PwCDk1gGVmGUZSSoPhNf%2BTklauz98QofOlCIQ%2FtCD4dosHYPqtPCXB3agggQQIqQJsSkB%2Bqn0rkQ1toJjON%2FOtCIB9RYv3PqRA4C4U68ZMlZn6BdgEvi2ziU%2BTQ6NIw3ej%2BAtDwMGEZk7e2IjxUWKdAxyaw9OCwSmeADTPPleyk6UhGDNXQb%2B%2BW6Uk4q6F7%2Frg6WVTo82IoCxSIsFDrav4EPHphD3u4hR53WKVvYZUwNCCeM4PMBWzK%2BEfIthZOkuAwPo5C5jgoZgn6dUdvx5rIDmd58cXXdKNfw3l%2BwM2UjgrDJeQHhbD7HW2QDoZMCujgIUkk5Fg8VCsdyjOtnGRx8wgKRPZN5dR0zPUyfGZFVihbFRniXZFOZGKPnEQzU3AnD1KfR6weHW2XS6KbPJxUkOTZsAB9vTVp3Le1F8q5l%2BDMcLiIq78jxAImD2pGFw0VHfRatScGlK6SMu8leTmhUSMy8Uhdd6xBiH3Gdman4tjQGLboJfqz6fL2WKHTmrfsKZRYX6BTDjDldKMosaSTLdQS7oDisJNqAUhw1PfTlnacCO8vl8706Km1FROgLDmudzxg%2BEWTiArtHgLsRrAXYWdB0NmToNCJdKm0KWycZQqb%2BMw76Qy29iQ5up%2FX7oyw8QZ75kP5F6iJAJz6KCmqxz8fEa%2FxnsMYcIO%2FvEkGRuMckhr4rIeLrKaXnmIzlNLxbFspOphkcnJdnz%2FChp%2FVlpj2P7jJQmQRwGnltkTV5dbF9fE3%2FfxoSqTROgq9wFUlbuYzYcasE0ouzBo%2BdDCDzxKAfhbAZYxQiHrLzV2iVexnDX%2FQnT1fsT%2Fxuhu1ui5qIytgbGmRoQkeQooO8eJNNZsf0iALur8QxZFH0nCMnjerYQqG1pIfjyVZWxhVRznmmfLG00BcBWJE6hzQWRyFknuJnXuk8A5FRDCulwrWASSNoBtR%2BCtGdkPwYN2o7DOw%2FVGlCZPusRBFXODQdUM5zeHDIVuAJBLqbO%2Ff9Qua%2BpDqEPk230Sob9lEZ8BHiCorjVghuI0lI4JDgHGRDD%2FprQ84B1pVGkIpVUAHCG%2Biz3Bn3qm2AVrYcYWhock4jso5%2BJ7HfHVj4WMIQdGctq3psBCVVzupQOEioBGA2Bk%2BUILT7%2BVoX5mdxxA5fS42gISQVi%2FHTzrgMxu0fY6hE1ocUwwbsbWcezrY2n6S8%2F6cxXkOH4prpmPuFoikTzY7T85C4T2XYlbxLglSv2uLCgFv8Quk%2FwdesUdWPeHYIH0R729JIisN9Apdd4eB10aqwXrPt%2BSu9mA8k8n1sjMwnfsfF2j3jMUzXepSHmZ%2FBfqXvzgUNQQWOXO8YEuFBh4QTYCkOAPxywpYu1VxiDyJmKVcmJPGWk%2Fgc3Pov02StyYDahwmzw3E1gYC9wkupyWfDqDSUMpCTH5e5N8B%2F%2FlHiMuIkTNw4USHrJU67bjXGqNav6PBuQSoqTxc8avHoGmvqNtXzIaoyMIQIiiUHIM64cXieouplhNYln7qgc4wBVAYR104kO%2BCvKqsg4yIUlFNThVUAKZxZt1XA34h3TCUUiXVkZ0w8Hh2R0Z5L0b4LZvPd%2Fp1gi%2F07h8qfwHrByuSxglc9cI4QIg2oqvC%2Fqm0i7tjPLTgDhoWTAKDO2ONW5oe%2B%2FeKB9vZB8K6C25yCZ9RFVMnb6NRdRjyVK57CHHSkJBfnM2%2Fj4ODUwRkqrtBBCrDsDpt8jhZdXoy%2F1BCqw3sSGhgGGy0a5Jw6BP%2FTExoCmNFYjZl248A0osgPyGEmRA%2BfAsqPVaNAfytu0vuQJ7rk3J4kTDTR2AlCHJ5cls26opZM4w3jMULh2YXKpcqGBtuleAlOZnaZGbD6DHzMd6i2oFeJ8z9XYmalg1Szd%2FocZDc1C7Y6vcALJz2lYnTXiWEr2wawtoR4g3jvWUU2Ngjd1cewtFzEvM1NiHZPeLlIXFbBPawxNgMwwAlyNSuGF3zizVeOoC9bag1qRAQKQE%2FEZBWC2J8mnXAN2aTBboZ7HewnObE8CwROudZHmUM5oZ%2FUgd%2FJZQK8lvAm43uDRAbyW8gZ%2BZGq0EVerVGUKUSm%2FIdn8AQHdR4m7bue88WBwft9mSCeMOt1ncBwziOmJYI2ZR7ewNMPiCugmSsE4EyQ%2BQATJG6qORMGd4snEzc6B4shPIo4G1T7PgSm8PY5eUkPdF8JZ0VBtadbHXoJgnEhZQaODPj2gpODKJY5Yp4DOsLBFxWbvXN755KWylJm%2BoOd4zEL9Hpubuy2gyyfxh8oEfFutnYWdfB8PdESLWYvSqbElP9qo3u6KTmkhoacDauMNNjj0oy40DFV7Ql0aZj77xfGl7TJNHnIwgqOkenruYYNo6h724%2BzUQ7%2BvkCpZB%2BpGA562hYQiDxHVWOq0oDQl%2FQsoiY%2BcuI7iWq%2FZIBtHcXJ7kks%2Bh2fCNUPA82BzjnqktNts%2BRLdk1VSu%2BtqEn7QZCCsvEqk6FkfiOYkrsw092J8jsfIuEKypNjLxrKA9kiA19mxBD2suxQKCzwXGws7kEJvlhUiV9tArLIdZW0IORcxEzdzKmjtFhsjKy%2F44XYXdI5noQoRcvjZ1RMPACRqYg2V1%2BOwOepcOknRLLFdYgTkT5UApt%2FJhLM3jeFYprZV%2BZow2g8fP%2BU68hkKFWJj2yBbKqsrp25xkZX1DAjUw52IMYWaOhab8Kp05VrdNftqwRrymWF4OQSjbdfzmRZirK8FMJELEgER2PHjEAN9pGfLhCUiTJFbd5LBkOBMaxLr%2FA1SY9dXFz4RjzoU9ExfJCmx%2FI9FKEGT3n2cmzl2X42L3Jh%2BAbQq6sA%2BSs1kitoa4TAYgKHaoybHUDJ51oETdeI%2F9ThSmjWGkyLi5QAGWhL0BG1UsTyRGRJOldKBrYJeB8ljLJHfATWTEQBXBDnQexOHTB%2BUn44zExFE4vLytcu5NwpWrUxO%2F0ZICUGM7hGABXym0V6ZvDST0E370St9MIWQOTWngeoQHUTdCJUP04spMBMS8LSker9cReVQkULFDIZDFPrhTzBl6sed9wcZQTbL%2BBDqMyaN3RJPh%2Fanbx%2BIv%2BqgQdAa3M9Z5JmvYlh4qop%2BHo1F1W5gbOE9YKLgAnWytXElU4G8GtW47lhgFE6gaSs%2Bgs37sFvi0PPVvA5dnCBgILTwoKd%2F%2BDoL9F6inlM7H4rOTzD79KJgKlZO%2FZgt22UsKhrAaXU5ZcLrAglTVKJEmNJvORGN1vqrcfSMizfpsgbIe9zno%2BgBoKVXgIL%2FVI8dB1O5o%2FR3Suez%2FgD7M781ShjKpIIORM%2FnxG%2BjjhhgPwsn2IoXsPGPqYHXA63zJ07M2GPEykQwJBYLK808qYxuIew4frk52nhCsnCYmXiR6CuapvE1IwRB4%2FQftDbEn%2BAucIr1oxrLabRj9q4ae0%2BfXkHnteAJwXRbVkR0mctVSwEbqhJiMSZUp9DNbEDMmjX22m3ABpkrPQQTP3S1sib5pD2VRKRd%2BeNAjLYyT0hGrdjWJZy24OYXRoWQAIhGBZRxuBFMjjZQhpgrWo8SiFYbojcHO8V5DyscJpLTHyx9Fimassyo5U6WNtquUMYgccaHY5amgR3PQzq3ToNM5ABnoB9kuxsebqmYZm0R9qxJbFXCQ1UPyFIbxoUraTJFDpCk0Wk9GaYJKz%2F6oHwEP0Q14lMtlddQsOAU9zlYdMVHiT7RQP3XCmWYDcHCGbVRHGnHuwzScA0BaSBOGkz3lM8CArjrBsyEoV6Ys4qgDK3ykQQPZ3hCRGNXQTNNXbEb6tDiTDLKOyMzRhCFT%2BmAUmiYbV3YQVqFVp9dorv%2BTsLeCykS2b5yyu8AV7IS9cxcL8z4Kfwp%2BxJyYLv1OsxQCZwTB4a8BZ%2F5EdxTBJthApqyfd9u3ifr%2FWILTqq5VqgwMT9SOxbSGWLQJUUWCVi4k9tho9nEsbUh7U6NUsLmkYFXOhZ0kmamaJLRNJzSj%2Fqn4Mso6zb6iLLBXoaZ6AqeWCjHQm2lztnejYYM2eubnpBdKVLORZhudH3JF1waBJKA9%2BW8EhMj3Kzf0L4vi4k6RoHh3Z5YgmSZmk6ns4fjScjAoL8GoOECgqgYEBYUGFVO4FUv4%2FYtowhEmTs0vrvlD%2FCrisnoBNDAcUi%2FteY7OctFlmARQzjOItrrlKuPO6E2Ox93L4O%2F4DcgV%2FdZ7qR3VBwVQxP1GCieA4RIpweYJ5FoYrHxqRBdJjnqbsikA2Ictbb8vE1GYIo9dacK0REgDX4smy6GAkxlH1yCGGsk%2BtgiDhNKuKu3yNrMdxafmKTF632F8Vx4BNK57GvlFisrkjN9WDAtjsWA0ENT2e2nETUb%2Fn7qwhvGnrHuf5bX6Vh%2Fn3xffU3PeHdR%2BFA92i6ufT3AlyAREoNDh6chiMWTvjKjHDeRhOa9YkOQRq1vQXEMppAQVwHCuIcV2g5rBn6GmZZpTR7vnSD6ZmhdSl176gqKTXu5E%2BYbfL0adwNtHP7dT7t7b46DVZIkzaRJOM%2BS6KcrzYVg%2BT3wSRFRQashjfU18NutrKa%2F7PXbtuJvpIjbgPeqd%2BpjmRw6YKpnANFSQcpzTZgpSNJ6J7uiagAbir%2F8tNXJ%2FOsOnRh6iuIexxrmkIneAgz8QoLmiaJ8sLQrELVK2yn3wOHp57BAZJhDZjTBzyoRAuuZ4eoxHruY1pSb7qq79cIeAdOwin4GdgMeIMHeG%2BFZWYaiUQQyC5b50zKjYw97dFjAeY2I4Bnl105Iku1y0lMA1ZHolLx19uZnRdILcXKlZGQx%2FGdEqSsMRU1BIrFqRcV1qQOOHyxOLXEGcbRtAEsuAC2V4K3p5mFJ22IDWaEkk9ttf5Izb2LkD1MnrSwztXmmD%2FQi%2FEmVEFBfiKGmftsPwVaIoZanlKndMZsIBOskFYpDOq3QUs9aSbAAtL5Dbokus2G4%2FasthNMK5UQKCOhU97oaOYNGsTah%2BjfCKsZnTRn5TbhFX8ghg8CBYt%2FBjeYYYUrtUZ5jVij%2Fop7V5SsbA4mYTOwZ46hqdpbB6Qvq3AS2HHNkC15pTDIcDNGsMPXaBidXYPHc6PJAkRh29Vx8KcgX46LoUQBhRM%2B3SW6Opll%2FwgxxsPgKJKzr5QCmwkUxNbeg6Wj34SUnEzOemSuvS2OetRCO8Tyy%2BQbSKVJcqkia%2BGvDefFwMOmgnD7h81TUtMn%2BmRpyJJ349HhAnoWFTejhpYTL9G8N2nVg1qkXBeoS9Nw2fB27t7trm7d%2FQK7Cr4uoCeOQ7%2F8JfKT77KiDzLImESHw%2F0wf73QeHu74hxv7uihi4fTX%2BXEwAyQG3264dwv17aJ5N335Vt9sdrAXhPOAv8JFvzqyYXwfx8WYJaef1gMl98JRFyl5Mv5Uo%2FoVH5ww5OzLFsiTPDns7fS6EURSSWd%2F92BxMYQ8sBaH%2Bj%2BwthQPdVgDGpTfi%2BJQIWMD8xKqULliRH01rTeyF8x8q%2FGBEEEBrAJMPf25UQwi0b8tmqRXY7kIvNkzrkvRWLnxoGYEJsz8u4oOyMp8cHyaybb1HdMCaLApUE%2B%2F7xLIZGP6H9xuSEXp1zLIdjk5nBaMuV%2FyTDRRP8Y2ww5RO6d2D94o%2B6ucWIqUAvgHIHXhZsmDhjVLczmZ3ca0Cb3PpKwt2UtHVQ0BgFJsqqTsnzZPlKahRUkEu4qmkJt%2Bkqdae76ViWe3STan69yaF9%2BfESD2lcQshLHWVu4ovItXxO69bqC5p1nZLvI8NdQB9s9UNaJGlQ5mG947ipdDA0eTIw%2FA1zEdjWquIsQXXGIVEH0thC5M%2BW9pZe7IhAVnPJkYCCXN5a32HjN6nsvokEqRS44tGIs7s2LVTvcrHAF%2BRVmI8L4HUYk4x%2B67AxSMJKqCg8zrGOgvK9kNMdDrNiUtSWuHFpC8%2Fp5qIQrEo%2FH%2B1l%2F0cAwQ2nKmpWxKcMIuHY44Y6DlkpO48tRuUGBWT0FyHwSKO72Ud%2BtJUfdaZ4CWNijzZtlRa8%2BCkmO%2FEwHYfPZFU%2FhzjFWH7vnzHRMo%2BaF9u8qHSAiEkA2HjoNQPEwHsDKOt6hOoK3Ce%2F%2B%2F9boMWDa44I6FrQhdgS7OnNaSzwxWKZMcyHi6LN4WC6sSj0qm2PSOGBTvDs%2FGWJS6SwEN%2FULwpb4LQo9fYjUfSXRwZkynUazlSpvX9e%2BG2zor8l%2BYaMxSEomDdLHGcD6YVQPegTaA74H8%2BV4WvJkFUrjMLGLlvSZQWvi8%2FQA7yzQ8GPno%2F%2F5SJHRP%2FOqKObPCo81s%2F%2B6WgLqykYpGAgQZhVDEBPXWgU%2FWzFZjKUhSFInufPRiMAUULC6T11yL45ZrRoB4DzOyJShKXaAJIBS9wzLYIoCEcJKQW8GVCx4fihqJ6mshBUXSw3wWVj3grrHQlGNGhIDNNzsxQ3M%2BGWn6ASobIWC%2BLbYOC6UpahVO13Zs2zOzZC8z7FmA05JhUGyBsF4tsG0drcggIFzgg%2Fkpf3%2BCnAXKiMgIE8Jk%2FMhpkc8DUJEUzDSnWlQFme3d0sHZDrg7LavtsEX3cHwjCYA17pMTfx8Ajw9hHscN67hyo%2BRJQ4458RmPywXykkVcW688oVUrQhahpPRvTWPnuI0B%2BSkQu7dCyvLRyFYlC1LG1gRCIvn3rwQeINzZQC2KXq31FaR9UmVV2QeGVqBHjmE%2BVMd3b1fhCynD0pQNhCG6%2FWCDbKPyE7NRQzL3BzQAJ0g09aUzcQA6mUp9iZFK6Sbp%2FYbHjo%2B%2B7%2FWj8S4YNa%2BZdqAw1hDrKWFXv9%2BzaXpf8ZTDSbiqsxnwN%2FCzK5tPkOr4tRh2kY3Bn9JtalbIOI4b3F7F1vPQMfoDcdxMS8CW9m%2FNCW%2FHILTUVWQIPiD0j1A6bo8vsv6P1hCESl2abrSJWDrq5sSzUpwoxaCU9FtJyYH4QFMxDBpkkBR6kn0LMPO%2B5EJ7Z6bCiRoPedRZ%2FP0SSdii7ZnPAtVwwHUidcdyspwncz5uq6vvm4IEDbJVLUFCn%2FLvIHfooUBTkFO130FC7CmmcrKdgDJcid9mvVzsDSibOoXtIf9k6ABle3PmIxejodc4aob0QKS432srrCMndbfD454q52V01G4q913mC5HOsTzWF4h2No1av1VbcUgWAqyoZl%2B11PoFYnNv2HwAODeNRkHj%2B8SF1fcvVBu6MrehHAZK1Gm69ICcTKizykHgGFx7QdowTVAsYEF2tVc0Z6wLryz2FI1sc5By2znJAAmINndoJiB4sfPdPrTC8RnkW7KRCwxC6YvXg5ahMlQuMpoCSXjOlBy0Kij%2BbsCYPbGp8BdCBiLmLSAkEQRaieWo1SYvZIKJGj9Ur%2FeWHjiB7SOVdqMAVmpBvfRiebsFjger7DC%2B8kRFGtNrTrnnGD2GAJb8rQCWkUPYHhwXsjNBSkE6lGWUj5QNhK0DMNM2l%2BkXRZ0KLZaGsFSIdQz%2FHXDxf3%2FTE30%2BDgBKWGWdxElyLccJfEpjsnszECNoDGZpdwdRgCixeg9L4EPhH%2BRptvRMVRaahu4cySjS3P5wxAUCPkmn%2BrhyASpmiTaiDeggaIxYBmtLZDDhiWIJaBgzfCsAGUF1Q1SFZYyXDt9skCaxJsxK2Ms65dmdp5WAZyxik%2FzbrTQk5KmgxCg%2Ff45L0jywebOWUYFJQAJia7XzCV0x89rpp%2Ff3AVWhSPyTanqmik2SkD8A3Ml4NhIGLAjBXtPShwKYfi2eXtrDuKLk4QlSyTw1ftXgwqA2jUuopDl%2B5tfUWZNwBpEPXghzbBggYCw%2Fdhy0ntds2yeHCDKkF%2FYxQjNIL%2FF%2F37jLPHCKBO9ibwYCmuxImIo0ijV2Wbg3kSN2psoe8IsABv3RNFaF9uMyCtCYtqcD%2BqNOhwMlfARQUdJ2tUX%2BMNJqOwIciWalZsmEjt07tfa8ma4cji9sqz%2BQ9hWfmMoKEbIHPOQORbhQRHIsrTYlnVTNvcq1imqmmPDdVDkJgRcTgB8Sb6epCQVmFZe%2BjGDiNJQLWnfx%2BdrTKYjm0G8yH0ZAGMWzEJhUEQ4Maimgf%2Fbkvo8PLVBsZl152y5S8%2BHRDfZIMCbYZ1WDp4yrdchOJw8k6R%2B%2F2pHmydK4NIK2PHdFPHtoLmHxRDwLFb7eB%2BM4zNZcB9NrAgjVyzLM7xyYSY13ykWfIEEd2n5%2FiYp3ZdrCf7fL%2Ben%2BsIJu2W7E30MrAgZBD1rAAbZHPgeAMtKCg3NpSpYQUDWJu9bT3V7tOKv%2BNRiJc8JAKqqgCA%2FPNRBR7ChpiEulyQApMK1AyqcWnpSOmYh6yLiWkGJ2mklCSPIqN7UypWj3dGi5MvsHQ87MrB4VFgypJaFriaHivwcHIpmyi5LhNqtem4q0n8awM19Qk8BOS0EsqGscuuydYsIGsbT5GHnERUiMpKJl4ON7qjB4fEqlGN%2FhCky89232UQCiaeWpDYCJINXjT6xl4Gc7DxRCtgV0i1ma4RgWLsNtnEBRQFqZggCLiuyEydmFd7WlogpkCw5G1x4ft2psm3KAREwVwr1Gzl6RT7FDAqpVal34ewVm3VH4qn5mjGj%2BbYL1NgfLNeXDwtmYSpwzbruDKpTjOdgiIHDVQSb5%2FzBgSMbHLkxWWgghIh9QTFSDILixVwg0Eg1puooBiHAt7DzwJ7m8i8%2Fi%2BjHvKf0QDnnHVkVTIqMvIQImOrzCJwhSR7qYB5gSwL6aWL9hERHCZc4G2%2BJrpgHNB8eCCmcIWIQ6rSdyPCyftXkDlErUkHafHRlkOIjxGbAktz75bnh50dU7YHk%2BMz7wwstg6RFZb%2BTZuSOx1qqP5C66c0mptQmzIC2dlpte7vZrauAMm%2F7RfBYkGtXWGiaWTtwvAQiq2oD4YixPLXE2khB2FRaNRDTk%2B9sZ6K74Ia9VntCpN4BhJGJMT4Z5c5FhSepRCRWmBXqx%2BwhVZC4me4saDs2iNqXMuCl6iAZflH8fscC1sTsy4PHeC%2BXYuqMBMUun5YezKbRKmEPwuK%2BCLzijPEQgfhahQswBBLfg%2FGBgBiI4QwAqzJkkyYAWtjzSg2ILgMAgqxYfwERRo3zruBL9WOryUArSD8sQOcD7fvIODJxKFS615KFPsb68USBEPPj1orNzFY2xoTtNBVTyzBhPbhFH0PI5AtlJBl2aSgNPYzxYLw7XTDBDinmVoENwiGzmngrMo8OmnRP0Z0i0Zrln9DDFcnmOoBZjABaQIbPOJYZGqX%2BRCMlDDbElcjaROLDoualmUIQ88Kekk3iM4OQrADcxi3rJguS4MOIBIgKgXrjd1WkbCdqxJk%2F4efRIFsavZA7KvvJQqp3Iid5Z0NFc5aiMRzGN3vrpBzaMy4JYde3wr96PjN90AYOIbyp6T4zj8LoE66OGcX1Ef4Z3KoWLAUF4BTg7ug%2FAbkG5UNQXAMkQezujSHeir2uTThgd3gpyzDrbnEdDRH2W7U6PeRvBX1ZFMP5RM%2BZu6UUZZD8hDPHldVWntTCNk7To8IeOW9yn2wx0gmurwqC60AOde4r3ETi5pVMSDK8wxhoGAoEX9NLWHIR33VbrbMveii2jAJlrxwytTHbWNu8Y4N8vCCyZjAX%2FpcsfwXbLze2%2BD%2Bu33OGBoJyAAL3jn3RuEcdp5If8O%2Ba4NKWvxOTyDltG0IWoHhwVGe7dKkCWFT%2B%2Btm%2BhaBCikRUUMrMhYKZJKYoVuv%2FbsJzO8DwfVIInQq3g3BYypiz8baogH3r3GwqCwFtZnz4xMjAVOYnyOi5HWbFA8n0qz1OjSpHWFzpQOpvkNETZBGpxN8ybhtqV%2FDMUxd9uFZmBfKXMCn%2FSqkWJyKPnT6lq%2B4zBZni6fYRByJn6OK%2BOgPBGRAJluwGSk4wxjOOzyce%2FPKODwRlsgrVkdcsEiYrqYdXo0Er2GXi2GQZd0tNJT6c9pK1EEJG1zgDJBoTVuCXGAU8BKTvCO%2FcEQ1Wjk3Zzuy90JX4m3O5IlxVFhYkSUwuQB2up7jhvkm%2BbddRQu5F9s0XftGEJ9JSuSk%2BZachCbdU45fEqbugzTIUokwoAKvpUQF%2FCvLbWW5BNQFqFkJg2f30E%2F48StNe5QwBg8zz3YAJ82FZoXBxXSv4QDooDo79NixyglO9AembuBcx5Re3CwOKTHebOPhkmFC7wNaWtoBhFuV4AkEuJ0J%2B1pT0tLkvFVZaNzfhs%2FKd3%2BA9YsImlO4XK4vpCo%2FelHQi%2F9gkFg07xxnuXLt21unCIpDV%2BbbRxb7FC6nWYTsMFF8%2B1LUg4JFjVt3vqbuhHmDKbgQ4e%2BRGizRiO8ky05LQGMdL2IKLSNar0kNG7lHJMaXr5mLdG3nykgj6vB%2FKVijd1ARWkFEf3yiUw1v%2FWaQivVUpIDdSNrrKbjO5NPnxz6qTTGgYg03HgPhDrCFyYZTi3XQw3HXCva39mpLNFtz8AiEhxAJHpWX13gCTAwgm9YTvMeiqetdNQv6IU0hH0G%2BZManTqDLPjyrOse7WiiwOJCG%2BJ0pZYULhN8NILulmYYvmVcV2MjAfA39sGKqGdjpiPo86fecg65UPyXDIAOyOkCx5NQsLeD4gGVjTVDwOHWkbbBW0GeNjDkcSOn2Nq4cEssP54t9D749A7M1AIOBl0Fi0sSO5v3P7LCBrM6ZwFY6kp2FX6AcbGUdybnfChHPyu6WlRZ2Fwv9YM0RMI7kISRgR8HpQSJJOyTfXj%2F6gQKuihPtiUtlCQVPohUgzfezTg8o1b3n9pNZeco1QucaoXe40Fa5JYhqdTspFmxGtW9h5ezLFZs3j%2FN46f%2BS2rjYNC2JySXrnSAFhvAkz9a5L3pza8eYKHNoPrvBRESpxYPJdKVUxBE39nJ1chrAFpy4MMkf0qKgYALctGg1DQI1kIymyeS2AJNT4X240d3IFQb%2F0jQbaHJ2YRK8A%2Bls6WMhWmpCXYG5jqapGs5%2FeOJErxi2%2F2KWVHiPellTgh%2FfNl%2F2KYPKb7DUcAg%2BmCOPQFCiU9Mq%2FWLcU1xxC8aLePFZZlE%2BPCLzf7ey46INWRw2kcXySR9FDgByXzfxiNKwDFbUSMMhALPFSedyjEVM5442GZ4hTrsAEvZxIieSHGSgkwFh%2FnFNdrrFD4tBH4Il7fW6ur4J8Xaz7RW9jgtuPEXQsYk7gcMs2neu3zJwTyUerHKSh1iTBkj2YJh1SSOZL5pLuQbFFAvyO4k1Hxg2h99MTC6cTUkbONQIAnEfGsGkNFWRbuRyyaEZInM5pij73EA9rPIUfU4XoqQpHT9THZkW%2BoKFLvpyvTBMM69tN1Ydwv1LIEhHsC%2BueVG%2Bw%2BkyCPsvV3erRikcscHjZCkccx6VrBkBRusTDDd8847GA7p2Ucy0y0HdSRN6YIBciYa4vuXcAZbQAuSEmzw%2BH%2FAuOx%2BaH%2BtBL88H57D0MsqyiZxhOEQkF%2F8DR1d2hSPMj%2FsNOa5rxcUnBgH8ictv2J%2Bcb4BA4v3MCShdZ2vtK30vAwkobnEWh7rsSyhmos3WC93Gn9C4nnAd%2FPjMMtQfyDNZsOPd6XcAsnBE%2FmRHtHEyJMzJfZFLE9OvQa0i9kUmToJ0ZxknTgdl%2FXPV8xoh0K7wNHHsnBdvFH3sv52lU7UFteseLG%2FVanIvcwycVA7%2BBE1Ulyb20BvwUWZcMTKhaCcmY3ROpvonVMV4N7yBXTL7IDtHzQ4CCcqF66LjF3xUqgErKzolLyCG6Kb7irP%2FMVTCCwGRxfrPGpMMGvPLgJ881PHMNMIO09T5ig7AzZTX%2F5PLlwnJLDAPfuHynSGhV4tPqR3gJ4kg4c06c%2FF1AcjGytKm2Yb5jwMotF7vro4YDLWlnMIpmPg36NgAZsGA0W1spfLSue4xxat0Gdwd0lqDBOgIaMANykwwDKejt5YaNtJYIkrSgu0KjIg0pznY0SCd1qlC6R19g97UrWDoYJGlrvCE05J%2F5wkjpkre727p5PTRX5FGrSBIfJqhJE%2FIS876PaHFkx9pGTH3oaY3jJRvLX9Iy3Edoar7cFvJqyUlOhAEiOSAyYgVEGkzHdug%2BoRHIEOXAExMiTSKU9A6nmRC8mp8iYhwWdP2U%2F5EkFAdPrZw03YA3gSyNUtMZeh7dDCu8pF5x0VORCTgKp07ehy7NZqKTpIC4UJJ89lnboyAfy5OyXzXtuDRbtAFjZRSyGFTpFrXwkpjSLIQIG3N0Vj4BtzK3wdlkBJrO18MNsgseR4BysJilI0wI6ZahLhBFA0XBmV8d4LUzEcNVb0xbLjLTETYN8OEVqNxkt10W614dd1FlFFVTIgB7%2FBQQp1sWlNolpIu4ekxUTBV7NmxOFKEBmmN%2BnA7pvF78%2FRII5ZHA09OAiE%2F66MF6HQ%2BqVEJCHxwymukkNvzqHEh52dULPbVasfQMgTDyBZzx4007YiKdBuUauQOt27Gmy8ISclPmEUCIcuLbkb1mzQSqIa3iE0PJh7UMYQbkpe%2BhXjTJKdldyt2mVPwywoODGJtBV1lJTgMsuSQBlDMwhEKIfrvsxGQjHPCEfNfMAY2oxvyKcKPUbQySkKG6tj9AQyEW3Q5rpaDJ5Sns9ScLKeizPRbvWYAw4bXkrZdmB7CQopCH8NAmqbuciZChHN8lVGaDbCnmddnqO1PQ4ieMYfcSiBE5zzMz%2BJV%2F4eyzrzTEShvqSGzgWimkNxLvUj86iAwcZuIkqdB0VaIB7wncLRmzHkiUQpPBIXbDDLHBlq7vp9xwuC9AiNkIptAYlG7Biyuk8ILdynuUM1cHWJgeB%2BK3wBP%2FineogxkvBNNQ4AkW0hvpBOQGFfeptF2YTR75MexYDUy7Q%2F9uocGsx41O4IZhViw%2F2FvAEuGO5g2kyXBUijAggWM08bRhXg5ijgMwDJy40QeY%2FcQpUDZiIzmvskQpO5G1zyGZA8WByjIQU4jRoFJt56behxtHUUE%2Fom7Rj2psYXGmq3llVOCgGYKNMo4pzwntITtapDqjvQtqpjaJwjHmDzSVGLxMt12gEXAdLi%2FcaHSM3FPRGRf7dB7YC%2BcD2ho6oL2zGDCkjlf%2FDFoQVl8GS%2F56wur3rdV6ggtzZW60MRB3g%2BU1W8o8cvqIpMkctiGVMzXUFI7FacFLrgtdz4mTEr4aRAaQ2AFQaNeG7GX0yOJgMRYFziXdJf24kg%2FgBQIZMG%2FYcPEllRTVNoDYR6oSJ8wQNLuihfw81UpiKPm714bZX1KYjcXJdfclCUOOpvTxr9AAJevTY4HK%2FG7F3mUc3GOAKqh60zM0v34v%2BELyhJZqhkaMA8UMMOU90f8RKEJFj7EqepBVwsRiLbwMo1J2zrE2UYJnsgIAscDmjPjnzI8a719Wxp757wqmSJBjXowhc46QN4RwKIxqEE6E5218OeK7RfcpGjWG1jD7qND%2B%2FGTk6M56Ig4yMsU6LUW1EWE%2BfIYycVV1thldSlbP6ltdC01y3KUfkobkt2q01YYMmxpKRvh1Z48uNKzP%2FIoRIZ%2FF6buOymSnW8gICitpJjKWBscSb9JJKaWkvEkqinAJ2kowKoqkqZftRqfRQlLtKoqvTRDi2vg%2FRrPD%2Fd3a09J8JhGZlEkOM6znTsoMCsuvTmywxTCDhw5dd0GJOHCMPbsj3QLkTE3MInsZsimDQ3HkvthT7U9VA4s6G07sID0FW4SHJmRGwCl%2BMu4xf0ezqeXD2PtPDnwMPo86sbwDV%2B9PWcgFcARUVYm3hrFQrHcgMElFGbSM2A1zUYA3baWfheJp2AINmTJLuoyYD%2FOwA4a6V0ChBN97E8YtDBerUECv0u0TlxR5yhJCXvJxgyM73Bb6pyq0jTFJDZ4p1Am1SA6sh8nADd1hAcGBMfq4d%2FUfwnmBqe0Jun1n1LzrgKuZMAnxA3NtCN7Klf4BH%2B14B7ibBmgt0TGUafVzI4uKlpF7v8NmgNjg90D6QE3tbx8AjSAC%2BOA1YJvclyPKgT27QpIEgVYpbPYGBsnyCNrGz9XUsCHkW1QAHgL2STZk12QGqmvAB0NFteERkvBIH7INDsNW9KKaAYyDMdBEMzJiWaJHZALqDxQDWRntumSDPcplyFiI1oDpT8wbwe01AHhW6%2BvAUUBoGhY3CT2tgwehdPqU%2F4Q7ZLYvhRl%2FogOvR9O2%2BwkkPKW5vCTjD2fHRYXONCoIl4Jh1bZY0ZE1O94mMGn%2FdFSWBWzQ%2FVYk%2BGezi46RgiDv3EshoTmMSlioUK6MQEN8qeyK6FRninyX8ZPeUWjjbMJChn0n%2FyJvrq5bh5UcCAcBYSafTFg7p0jDgrXo2QWLb3WpSOET%2FHh4oSadBTvyDo10IufLzxiMLAnbZ1vcUmj3w7BQuIXjEZXifwukVxrGa9j%2BDXfpi12m1RbzYLg9J2wFergEwOxFyD0%2FJstNK06ZN2XdZSGWxcJODpQHOq4iKqjqkJUmPu1VczL5xTGUfCgLEYyNBCCbMBFT%2FcUP6pE%2FmujnHsSDeWxMbhrNilS5MyYR0nJyzanWXBeVcEQrRIhQeJA6Xt4f2eQESNeLwmC10WJVHqwx8SSyrtAAjpGjidcj1E2FYN0LObUcFQhafUKTiGmHWRHGsFCB%2BHEXgrzJEB5bp0QiF8ZHh11nFX8AboTD0PS4O1LqF8XBks2MpjsQnwKHF6HgaKCVLJtcr0XjqFMRGfKv8tmmykhLRzu%2BvqQ02%2BKpJBjaLt9ye1Ab%2BBbEBhy4EVdIJDrL2naV0o4wU8YZ2Lq04FG1mWCKC%2BUwkXOoAjneU%2FxHplMQo2cXUlrVNqJYczgYlaOEczVCs%2FOCgkyvLmTmdaBJc1iBLuKwmr6qtRnhowngsDxhzKFAi02tf8bmET8BO27ovJKF1plJwm3b0JpMh38%2BxsrXXg7U74QUM8ZCIMOpXujHntKdaRtsgyEZl5MClMVMMMZkZLNxH9%2Bb8fH6%2Bb8Lev30A9TuEVj9CqAdmwAAHBPbfOBFEATAPZ2CS0OH1Pj%2F0Q7PFUcC8hDrxESWdfgFRm%2B7vvWbkEppHB4T%2F1ApWnlTIqQwjcPl0VgS1yHSmD0OdsCVST8CQVwuiew1Y%2Bg3QGFjNMzwRB2DSsAk26cmA8lp2wIU4p93AUBiUHFGOxOajAqD7Gm6NezNDjYzwLOaSXRBYcWipTSONHjUDXCY4mMI8XoVCR%2FRrs%2FJLKXgEx%2BqkmeDlFOD1%2FyTQNDClRuiUyKYCllfMiQiyFkmuTz2vLsBNyRW%2Bxz%2B5FElFxWB28VjYIGZ0Yd%2B5wIjkcoMaggxswbT0pCmckRAErbRlIlcOGdBo4djTNO8FAgQ%2BlT6vPS60BwTRSUAM3ddkEAZiwtEyArrkiDRnS7LJ%2B2hwbzd2YDQagSgACpsovmjil5wfPuXq3GuH0CyE7FK3M4FgRaFoIkaodORrPx1%2BJpI9psyNYIFuJogZa0%2F1AhOWdlHQxdAgbwacsHqPZo8u%2FngAH2GmaTdhYnBfSDbBfh8CHq6Bx5bttP2%2BRdM%2BMAaYaZ0Y%2FADkbNCZuAyAVQa2OcXOeICmDn9Q%2FeFkDeFQg5MgHEDXq%2FtVjj%2Bjtd26nhaaolWxs1ixSUgOBwrDhRIGOLyOVk2%2FBc0UxvseQCO2pQ2i%2BKrfhu%2FWeBovNb5dJxQtJRUDv2mCwYVpNl2efQM9xQHnK0JwLYt%2FU0Wf%2BphiA4uw8G91slC832pmOTCAoZXohg1fewCZqLBhkOUBofBWpMPsqg7XEXgPfAlDo2U5WXjtFdS87PIqClCK5nW6adCeXPkUiTGx0emOIDQqw1yFYGHEVx20xKjJVYe0O8iLmnQr3FA9nSIQilUKtJ4ZAdcTm7%2BExseJauyqo30hs%2B1qSW211A1SFAOUgDlCGq7eTIcMAeyZkV1SQJ4j%2Fe1Smbq4HcjqgFbLAGLyKxlMDMgZavK5NAYH19Olz3la%2FQCTiVelFnU6O%2FGCvykqS%2FwZJDhKN9gBtSOp%2F1SP5VRgJcoVj%2Bkmf2wBgv4gjrgARBWiURYx8xENV3bEVUAAWWD3dYDKAIWk5opaCFCMR5ZjJExiCAw7gYiSZ2rkyTce4eNMY3lfGn%2B8p6%2BvBckGlKEXnA6Eota69OxDO9oOsJoy28BXOR0UoXNRaJD5ceKdlWMJlOFzDdZNpc05tkMGQtqeNF2lttZqNco1VtwXgRstLSQ6tSPChgqtGV5h2DcDReIQadaNRR6AsAYKL5gSFsCJMgfsaZ7DpKh8mg8Wz8V7H%2BgDnLuMxaWEIUPevIbClgap4dqmVWSrPgVYCzAoZHIa5z2Ocx1D%2FGvDOEqMOKLrMefWIbSWHZ6jbgA8qVBhYNHpx0P%2BjAgN5TB3haSifDcApp6yymEi6Ij%2FGsEpDYUgcHATJUYDUAmC1SCkJ4cuZXSAP2DEpQsGUjQmKJfJOvlC2x%2FpChkOyLW7KEoMYc5FDC4v2FGqSoRWiLsbPCiyg1U5yiHZVm1XLkHMMZL11%2Fyxyw0UnGig3MFdZklN5FI%2FqiT65T%2BjOXOdO7XbgWurOAZR6Cv9uu1cm5LjkXX4xi6mWn5r5NjBS0gTliHhMZI2WNqSiSphEtiCAwnafS11JhseDGHYQ5%2BbqWiAYiAv6Jsf79%2FVUs4cIl%2Bn6%2BWOjcgB%2F2l5TreoAV2717JzZbQIR0W1cl%2FdEqCy5kJ3ZSIHuU0vBoHooEpiHeQWVkkkOqRX27eD1FWw4BfO9CJDdKoSogQi3hAAwsPRFrN5RbX7bqLdBJ9JYMohWrgJKHSjVl1sy2xAG0E3sNyO0oCbSGOxCNBRRXTXenYKuwAoDLfnDcQaCwehUOIDiHAu5m5hMpKeKM4sIo3vxACakIxKoH2YWF2QM84e6F5C5hJU4g8uxuFOlAYnqtwxmHyNEawLW%2FPhoawJDrGAP0JYWHgAVUByo%2FbGdiv2T2EMg8gsS14%2FrAdzlOYazFE7w4OzxeKiWdm3nSOnQRRKXSlVo8HEAbBfyJMKqoq%2BSCcTSx5NDtbFwNlh8VhjGGDu7JG5%2FTAGAvniQSSUog0pNzTim8Owc6QTuSKSTXlQqwV3eiEnklS3LeSXYPXGK2VgeZBqNcHG6tZHvA3vTINhV0ELuQdp3t1y9%2BogD8Kk%2FW7QoRN1UWPqM4%2BxdygkFDPLoTaumKReKiLWoPHOfY54m3qPx4c%2B4pgY3MRKKbljG8w4wvz8pxk3AqKsy4GMAkAtmRjRMsCxbb4Q2Ds0Ia9ci8cMT6DmsJG00XaHCIS%2Bo3F8YVVeikw13w%2BOEDaCYYhC0ZE54kA4jpjruBr5STWeqQG6M74HHL6TZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gPeHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EmEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%2BpT0KYV5dGtknU64JhabdqcVQbGZiAxQAnvN1u70y1AnmvOSPgLI6uB4AuDGhmAu3ATkJSw7OtS%2F2ToPjqkaq62%2F7WFG8advGlRRqxB9diP07JrXowKR9tpRa%2BjGJ91zxNTT1h8I2PcSfoUPtd7NejVoH03EUcqSBuFZPkMZhegHyo2ZAITovmm3zAIdGFWxoNNORiMRShgwdYwFzkPw5PA4a5MIIQpmq%2Bnsp3YMuXt%2FGkXxLx%2FP6%2BZJS0lFyz4MunC3eWSGE8xlCQrKvhKUPXr0hjpAN9ZK4PfEDrPMfMbGNWcHDzjA7ngMxTPnT7GMHar%2BgMQQ3NwHCv4zH4BIMYvzsdiERi6gebRmerTsVwZJTRsL8dkZgxgRxmpbgRcud%2BYlCIRpPwHShlUSwuipZnx9QCsEWziVazdDeKSYU5CF7UVPAhLer3CgJOQXl%2Fzh575R5rsrmRnKAzq4POFdgbYBuEviM4%2BLVC15ssLNFghbTtHWerS1hDt5s4qkLUha%2FqpZXhWh1C6lTQAqCNQnaDjS7UGFBC6wTu8yFnKJnExCnAs3Ok9yj5KpfZESQ4lTy5pTGTnkAUpxI%2ByjEldJfSo4y0QhG4i4IwkRFGcjWY8%2BEzgYYJUK7BXQksLxAww%2FYYWBMhJILB9e8ePEJ4OP7z%2B4%2FwOQDl64iOYDp26DaONPxpKtBxq%2FaTzRGarm3VkPYTLJKx6Z%2FMw2YbBGseJhPMwhhNswrIkyvV2BYzrvZbxLpKwcWJhYmFtVZ%2BlPEq91FzVp1HlQY1bZVLqeNR9SAUn6n0E28k%2FUuGkNpP1DBI5ch%2FEehZfjUQ9aE41NhETExoPT2gGQz0IhWJbEOvTQ4wgcXCHHFBhewYUiFHuhRSAUVmEHeCRQHQkXGFwkAgyzREJCVN7TRnTon36Zw3tPhx4EALwNdwDv%2BJ41YSP4B2CQqz0EFgARZ4ESgBHQgROwAVn9GTI%2BHYexTUevLUeta4%2FDqKrbMVS%2BYqb8hUwYCrlgKtmAq1YCrFgKrd4qpXiqZcKn1oqdWipjYKpWwVPVYqW6xUpVipKqFR3QKjagVEtAqHpxUMTitsnFaJOKx2cVhswq35RVpyiq9lFVNIKnOQVMkgqtYxVNxiqQjFS7GKlSIVIsQqPIhUWwioigFQ%2B%2BKkN8VHr49HDw9Ebo9EDo9DTo9Crg9BDg9%2FWx7gWx7YWwlobYrOGxWPNisAaAHEyALpkAVDIAeWAArsABVXACYuAD5cAF6wAKFQAQqgAbVAAsoAAlQAUaYAfkwAvogBWQACOgAD9AAHSAAKT4GUdMiOvFngBTwCn2AZ7Dv6B6k%2F90B8%2ByRnkV144AIBoAMTQATGgAjNAA4YABgwABZgB%2FmQCwyAVlwCguASlwCEuAQFwB4uAMlwBYuAJlQAUVAAhUD2KgdpUDaJgaRMDFJgX5MC1JgWJEAokQCWRAHxEAWkQBMRADpEAMkQAYROAEecC484DRpwBDTnwNOdw05tjTmiNOYwtswhYFwLA7BYG4LA2BYGOLAwRYFuLAsxYFQJAohIEyJAMwkAwiQC0JAJgkAeiQBkJAFokAPCQA0JABwcD4Dgc4cDdDgaYcDIDgYgUC6CgWgUClCgUYUAVBQBOFAEYMALgwAgDA9QYAdIn8AZzeBB2L5EcWrenUT1KXienEsuJJ7x5U8XlTjc1NVzUyXFTGb1LlpUtWlTDIjqwE4LsagowoCi2gJLKAkpoBgJQNpAIhNqaEoneI6kiiqQ6Go%2Fn6j0cS%2Ba2gEU8gIHJ%2BBwfgZX4GL%2BBd%2FgW34FZ%2BBS%2FgUH4FN6BTegTvoEv6BJegRnYEF2A79gOvYDl2BdEjCkqkGtwXp0LNToIskOTXzh%2FF062yJ7AAAAEDAWAAABWhJ%2BKPEIJgBFxMVP7w2QJBGHASQnOBKXKFIdUK4igKA9IEaYJg%29%3Bsrc%3Aurl%28data%3Aapplication%2Fvnd%2Ems%2Dfontobject%3Bbase64%2Cn04AAEFNAAACAAIABAAAAAAABQAAAAAAAAABAJABAAAEAExQAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAJxJ%2FLAAAAAAAAAAAAAAAAAAAAAAAACgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAAAADgBSAGUAZwB1AGwAYQByAAAAeABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAA5ADsAUABTACAAMAAwADEALgAwADAAOQA7AGgAbwB0AGMAbwBuAHYAIAAxAC4AMAAuADcAMAA7AG0AYQBrAGUAbwB0AGYALgBsAGkAYgAyAC4ANQAuADUAOAAzADIAOQAAADgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzACAAUgBlAGcAdQBsAGEAcgAAAAAAQlNHUAAAAAAAAAAAAAAAAAAAAAADAKncAE0TAE0ZAEbuFM3pjM%2FSEdmjKHUbyow8ATBE40IvWA3vTu8LiABDQ%2BpexwUMcm1SMnNryctQSiI1K5ZnbOlXKmnVV5YvRe6RnNMFNCOs1KNVpn6yZhCJkRtVRNzEufeIq7HgSrcx4S8h%2Fv4vnrrKc6oCNxmSk2uKlZQHBii6iKFoH0746ThvkO1kJHlxjrkxs%2BLWORaDQBEtiYJIR5IB9Bi1UyL4Rmr0BNigNkMzlKQmnofBHviqVzUxwdMb3NdCn69hy%2BpRYVKGVS%2F1tnsqv4LL7wCCPZZAZPT4aCShHjHJVNuXbmMrY5LeQaGnvAkXlVrJgKRAUdFjrWEah9XebPeQMj7KS7DIBAFt8ycgC5PLGUOHSE3ErGZCiViNLL5ZARfywnCoZaKQCu6NuFX42AEeKtKUGnr%2FCm2Cy8tpFhBPMW5Fxi4Qm4TkDWh4IWFDClhU2hRWosUWqcKLlgyXB%2BlSHaWaHiWlBAR8SeSgSPCQxdVQgzUixWKSTrIQEbU94viDctkvX%2BVSjJuUmV8L4CXShI11esnp0pjWNZIyxKHS4wVQ2ime1P4RnhvGw0aDN1OLAXGERsB7buFpFGGBAre4QEQR0HOIO5oYH305G%2BKspT%2FFupEGGafCCwxSe6ZUa%2B073rXHnNdVXE6eWvibUS27XtRzkH838mYLMBmYysZTM0EM3A1fbpCBYFccN1B%2FEnCYu%2FTgCGmr7bMh8GfYL%2BBfcLvB0gRagC09w9elfldaIy%2FhNCBLRgBgtCC7jAF63wLSMAfbfAlEggYU0bUA7ACCJmTDpEmJtI78w4%2FBO7dN7JR7J7ZvbYaUbaILSQsRBiF3HGk5fEg6p9unwLvn98r%2BvnsV%2B372uf1xBLq4qU%2F45fTuqaAP%2BpssmCCCTF0mhEow8ZXZOS8D7Q85JsxZ%2BAzok7B7O%2Ff6J8AzYBySZQB%2FQHYUSA%2BEeQhEWiS6AIQzgcsDiER4MjgMBAWDV4AgQ3g1eBgIdweCQmCjJEMkJ%2BPKRWyFHHmg1Wi%2F6xzUgA0LREoKJChwnQa9B%2B5RQZRB3IlBlkAnxyQNaANwHMowzlYSMCBgnbpzvqpl0iTJNCQidDI9ZrSYNIRBhHtUa5YHMHxyGEik9hDE0AKj72AbTCaxtHPUaKZdAZSnQTyjGqGLsmBStCejApUhg4uBMU6mATujEl%2BKdDPbI6Ag4vLr%2BhjY6lbjBeoLKnZl0UZgRX8gTySOeynZVz1wOq7e1hFGYIq%2BMhrGxDLak0PrwYzSXtcuyhXEhwOYofiW%2BEcI%2Fjw8P6IY6ed%2BetAbuqKp5QIapT77LnAe505lMuqL79a0ut4rWexzFttsOsLDy7zvtQzcq3U1qabe7tB0wHWVXji%2BzDbo8x8HyIRUbXnwUcklFv51fvTymiV%2BMXLSmGH9d9%2BaXpD5X6lao41anWGig7IwIdnoBY2ht%2FpO9mClLo4NdXHAsefqWUKlXJkbqPOFhMoR4aiA1BXqhRNbB2Xwi%2B7u%2FjpAoOpKJ0UX24EsrzMfHXViakCNcKjBxuQX8BO0ZqjJ3xXzf%2B61t2VXOSgJ8xu65QKgtN6FibPmPYsXbJRHHqbgATcSZxBqGiDiU4NNNsYBsKD0MIP%2FOfKnlk%2FLkaid%2FO2NbKeuQrwOB2Gq3YHyr6ALgzym5wIBnsdC1ZkoBFZSQXChZvlesPqvK2c5oHHT3Q65jYpNxnQcGF0EHbvYqoFw60WNlXIHQF2HQB7zD6lWjZ9rVqUKBXUT6hrkZOle0RFYII0V5ZYGl1JAP0Ud1fZZMvSomBzJ710j4Me8mjQDwEre5Uv2wQfk1ifDwb5ksuJQQ3xt423lbuQjvoIQByQrNDh1JxGFkOdlJvu%2FgFtuW0wR4cgd%2BZKesSV7QkNE2kw6AV4hoIuC02LGmTomyf8PiO6CZzOTLTPQ%2BHW06H%2Btx%2BbQ8LmDYg1pTFrp2oJXgkZTyeRJZM0C8aE2LpFrNVDuhARsN543%2FFV6klQ6Tv1OoZGXLv0igKrl%2FCmJxRmX7JJbJ998VSIPQRyDBICzl4JJlYHbdql30NvYcOuZ7a10uWRrgoieOdgIm4rlq6vNOQBuqESLbXG5lzdJGHw2m0sDYmODXbYGTfSTGRKpssTO95fothJCjUGQgEL4yKoGAF%2F0SrpUDNn8CBgBcSDQByAeNkCXp4S4Ro2Xh4OeaGRgR66PVOsU8bc6TR5%2FxTcn4IVMLOkXSWiXxkZQCbvKfmoAvQaKjO3EDKwkwqHChCDEM5loQRPd5ACBki1TjF772oaQhQbQ5C0lcWXPFOzrfsDGUXGrpxasbG4iab6eByaQkQfm0VFlP0ZsDkvvqCL6QXMUwCjdMx1ZOyKhTJ7a1GWAdOUcJ8RSejxNVyGs31OKMyRyBVoZFjqIkmKlLQ5eHMeEL4MkUf23cQ%2F1SgRCJ1dk4UdBT7OoyuNgLs0oCd8RnrEIb6QdMxT2QjD4zMrJkfgx5aDMcA4orsTtKCqWb%2FVeyceqa5OGSmB28YwH4rFbkQaLoUN8OQQYnD3w2eXpI4ScQfbCUZiJ4yMOIKLyyTc7BQ4uXUw6Ee6%2FxM%2B4Y67ngNBknxIPwuppgIhFcwJyr6EIj%2BLzNj%2FmfR2vhhRlx0BILZoAYruF0caWQ7YxO66UmeguDREAFHYuC7HJviRgVO6ruJH59h%2FC%2FPkgSle8xNzZJULLWq9JMDTE2fjGE146a1Us6PZDGYle6ldWRqn%2FpdpgHKNGrGIdkRK%2BKPETT9nKT6kLyDI8xd9A1FgWmXWRAIHwZ37WyZHOVyCadJEmMVz0MadMjDrPho%2BEIochkVC2xgGiwwsQ6DMv2P7UXqT4x7CdcYGId2BJQQa85EQKmCmwcRejQ9Bm4oATENFPkxPXILHpMPUyWTI5rjNOsIlmEeMbcOCEqInpXACYQ9DDxmFo9vcmsDblcMtg4tqBerNngkIKaFJmrQAPnq1dEzsMXcwjcHdfdCibcAxxA%2Bq%2Fj9m3LM%2FO7WJka4tSidVCjsvo2lQ%2F2ewyoYyXwAYyr2PlRoR5MpgVmSUIrM3PQxXPbgjBOaDQFIyFMJvx3Pc5RSYj12ySVF9fwFPQu2e2KWVoL9q3Ayv3IzpGHUdvdPdrNUdicjsTQ2ISy7QU3DrEytIjvbzJnAkmANXjAFERA0MUoPF3%2F5KFmW14bBNOhwircYgMqoDpUMcDtCmBE82QM2YtdjVLB4kBuKho%2FbcwQdeboqfQartuU3CsCf%2BcXkgYAqp%2F0Ee3RorAZt0AvvOCSI4JICIlGlsV0bsSid%2FNIEALAAzb6HAgyWHBps6xAOwkJIGcB82CxRQq4sJf3FzA70A%2BTRqcqjEMETCoez3mkPcpnoALs0ugJY8kQwrC%2BJE5ik3w9rzrvDRjAQnqgEVvdGrNwlanR0SOKWzxOJOvLJhcd8Cl4AshACUkv9czdMkJCVQSQhp6kp7StAlpVRpK0t0SW6LHeBJnE2QchB5Ccu8kxRghZXGIgZIiSj7gEKMJDClcnX6hgoqJMwiQDigIXg3ioFLCgDgjPtYHYpsF5EiA4kcnN18MZtOrY866dEQAb0FB34OGKHGZQjwW%2FWDHA60cYFaI%2FPjpzquUqdaYGcIq%2BmLez3WLFFCtNBN2QJcrlcoELgiPku5R5dSlJFaCEqEZle1AQzAKC%2B1SotMcBNyQUFuRHRF6OlimSBgjZeTBCwLyc6A%2BP%2FoFRchXTz5ADknYJHxzrJ5pGuIKRQISU6WyKTBBjD8WozmVYWIsto1AS5rxzKlvJu4E%2FvwOiKxRtCWsDM%2BeTHUrmwrCK5BIfMzGkD%2B0Fk5LzBs0jMYXktNDblB06LMNJ09U8pzSLmo14MS0OMjcdrZ31pyQqxJJpRImlSvfYAK8inkYU52QY2FPEVsjoWewpwhRp5yAuNpkqhdb7ku9Seefl2D0B8SMTFD90xi4CSOwwZy9IKkpMtI3FmFUg3%2FkFutpQGNc3pCR7gvC4sgwbupDu3DyEN%2BW6YGLNM21jpB49irxy9BSlHrVDlnihGKHwPrbVFtc%2Bh1rVQKZduxIyojccZIIcOCmhEnC7UkY68WXKQgLi2JCDQkQWJRQuk60hZp0D3rtCTINSeY9Ej2kIKYfGxwOs4j9qMM7fYZiipzgcf7TamnehqdhsiMiCawXnz4xAbyCkLAx5EGbo3Ax1u3dUIKnTxIaxwQTHehPl3V491H0%2BbC5zgpGz7Io%2BmjdhKlPJ01EeMpM7UsRJMi1nGjmJg35i6bQBAAxjO%2FENJubU2mg3ONySEoWklCwdABETcs7ck3jgiuU9pcKKpbgn%2B3YlzV1FzIkB6pmEDOSSyDfPPlQskznctFji0kpgZjW5RZe6x9kYT4KJcXg0bNiCyif%2BpZACCyRMmYsfiKmN9tSO65F0R2OO6ytlEhY5Sj6uRKfFxw0ijJaAx%2Fk3QgnAFSq27%2F2i4GEBA%2BUvTJKK%2F9eISNvG46Em5RZfjTYLdeD8kdXHyrwId%2FDQZUaMCY4gGbke2C8vfjgV%2FY9kkRQOJIn%2FxM9INZSpiBnqX0Q9GlQPpPKAyO5y%2BW5NMPSRdBCUlmuxl40ZfMCnf2Cp044uI9WLFtCi4YVxKjuRCOBWIb4XbIsGdbo4qtMQnNOQz4XDSui7W%2FN6l54qOynCqD3DpWQ%2BmpD7C40D8BZEWGJX3tlAaZBMj1yjvDYKwCJBa201u6nBKE5UE%2B7QSEhCwrXfbRZylAaAkplhBWX50dumrElePyNMRYUrC99UmcSSNgImhFhDI4BXjMtiqkgizUGCrZ8iwFxU6fQ8GEHCFdLewwxYWxgScAYMdMLmcZR6b7rZl95eQVDGVoUKcRMM1ixXQtXNkBETZkVVPg8LoSrdetHzkuM7DjZRHP02tCxA1fmkXKF3VzfN1pc1cv%2F8lbTIkkYpqKM9VOhp65ktYk%2BQ46myFWBapDfyWUCnsnI00QTBQmuFjMZTcd0V2NQ768Fhpby04k2IzNR1wKabuGJqYWwSly6ocMFGTeeI%2BejsWDYgEvr66QgqdcIbFYDNgsm0x9UHY6SCd5%2B7tpsLpKdvhahIDyYmEJQCqMqtCF6UlrE5GXRmbu%2Bvtm3BFSxI6ND6UxIE7GsGMgWqghXxSnaRJuGFveTcK5ZVSPJyjUxe1dKgI6kNF7EZhIZs8y8FVqwEfbM0Xk2ltORVDKZZM40SD3qQoQe0orJEKwPfZwm3YPqwixhUMOndis6MhbmfvLBKjC8sKKIZKbJk8L11oNkCQzCgvjhyyEiQSuJcgCQSG4Mocfgc0Hkwcjal1UNgP0CBPikYqBIk9tONv4kLtBswH07vUCjEaHiFGlLf8MgXKzSgjp2HolRRccAOh0ILHz9qlGgIFkwAnzHJRjWFhlA7ROwINyB5HFj59PRZHFor6voq7l23EPNRwdWhgawqbivLSjRA4htEYUFkjESu67icTg5S0aW1sOkCiIysfJ9UnIWevOOLGpepcBxy1wEhd2WI3AZg7sr9WBmHWyasxMcvY%2FiOmsLtHSWNUWEGk9hScMPShasUA1AcHOtRZlqMeQ0OzYS9vQvYUjOLrzP07BUAFikcJNMi7gIxEw4pL1G54TcmmmoAQ5s7TGWErJZ2Io4yQ0ljRYhL8H5e62oDtLF8aDpnIvZ5R3GWJyAugdiiJW9hQAVTsnCBHhwu7rkBlBX6r3b7ejEY0k5GGeyKv66v%2B6dg7mcJTrWHbtMywbedYqCQ0FPwoytmSWsL8WTtChZCKKzEF7vP6De4x2BJkkniMgSdWhbeBSLtJZR9CTHetK1xb34AYIJ37OegYIoPVbXgJ%2FqDQK%2BbfCtxQRVKQu77WzOoM6SGL7MaZwCGJVk46aImai9fmam%2BWpHG%2B0BtQPWUgZ7RIAlPq6lkECUhZQ2gqWkMYKcYMYaIc4gYCDFHYa2d1nzp3%2BJ1eCBay8IYZ0wQRKGAqvCuZ%2FUgbQPyllosq%2BXtfKIZOzmeJqRazpmmoP%2F76YfkjzV2NlXTDSBYB04SVlNQsFTbGPk1t%2FI4Jktu0XSgifO2ozFOiwd%2F0SssJDn0dn4xqk4GDTTKX73%2FwQyBLdqgJ%2BWx6AQaba3BA9CKEzjtQYIfAsiYamapq80LAamYjinlKXUkxdpIDk0puXUEYzSalfRibAeDAKpNiqQ0FTwoxuGYzRnisyTotdVTclis1LHRQCy%2FqqL8oUaQzWRxilq5Mi0IJGtMY02cGLD69vGjkj3p6pGePKI8bkBv5evq8SjjyU04vJR2cQXQwSJyoinDsUJHCQ50jrFTT7yRdbdYQMB3MYCb6uBzJ9ewhXYPAIZSXfeEQBZZ3GPN3Nbhh%2FwkvAJLXnQMdi5NYYZ5GHE400GS5rXkOZSQsdZgIbzRnF9ueLnsfQ47wHAsirITnTlkCcuWWIUhJSbpM3wWhXNHvt2xUsKKMpdBSbJnBMcihkoDqAd1Zml%2FR4yrzow1Q2A5G%2Bkzo%2FRhRxQS2lCSDRV8LlYLBOOoo1bF4jwJAwKMK1tWLHlu9i0j4Ig8qVm6wE1DxXwAwQwsaBWUg2pOOol2dHxyt6npwJEdLDDVYyRc2D0HbcbLUJQj8gPevQBUBOUHXPrsAPBERICpnYESeu2OHotpXQxRGlCCtLdIsu23MhZVEoJg8Qumj%2FUMMc34IBqTKLDTp76WzL%2FdMjCxK7MjhiGjeYAC%2Fkj%2FjY%2FRde7hpSM1xChrog6yZ7OWTuD56xBJnGFE%2BpT2ElSyCnJcwVzCjkqeNLfMEJqKW0G7OFIp0G%2B9mh50I9o8k1tpCY0xYqFNIALgIfc2me4n1bmJnRZ89oepgLPT0NTMLNZsvSCZAc3TXaNB07vail36%2FdBySis4m9%2FDR8izaLJW6bWCkVgm5T%2Bius3ZXq4xI%2BGnbveLbdRwF2mNtsrE0JjYc1AXknCOrLSu7Te%2Fr4dPYMCl5qtiHNTn%2BTPbh1jCBHH%2BdMJNhwNgs3nT%2BOhQoQ0vYif56BMG6WowAcHR3DjQolxLzyVekHj00PBAaW7IIAF1EF%2BuRIWyXjQMAs2chdpaKPNaB%2BkSezYt0%2BCA04sOg5vx8Fr7Ofa9sUv87h7SLAUFSzbetCCZ9pmyLt6l6%2FTzoA1%2FZBG9bIUVHLAbi%2FkdBFgYGyGwRQGBpkqCEg2ah9UD6EedEcEL3j4y0BQQCiExEnocA3SZboh%2Bepgd3YsOkHskZwPuQ5OoyA0fTA5AXrHcUOQF%2BzkJHIA7PwCDk1gGVmGUZSSoPhNf%2BTklauz98QofOlCIQ%2FtCD4dosHYPqtPCXB3agggQQIqQJsSkB%2Bqn0rkQ1toJjON%2FOtCIB9RYv3PqRA4C4U68ZMlZn6BdgEvi2ziU%2BTQ6NIw3ej%2BAtDwMGEZk7e2IjxUWKdAxyaw9OCwSmeADTPPleyk6UhGDNXQb%2B%2BW6Uk4q6F7%2Frg6WVTo82IoCxSIsFDrav4EPHphD3u4hR53WKVvYZUwNCCeM4PMBWzK%2BEfIthZOkuAwPo5C5jgoZgn6dUdvx5rIDmd58cXXdKNfw3l%2BwM2UjgrDJeQHhbD7HW2QDoZMCujgIUkk5Fg8VCsdyjOtnGRx8wgKRPZN5dR0zPUyfGZFVihbFRniXZFOZGKPnEQzU3AnD1KfR6weHW2XS6KbPJxUkOTZsAB9vTVp3Le1F8q5l%2BDMcLiIq78jxAImD2pGFw0VHfRatScGlK6SMu8leTmhUSMy8Uhdd6xBiH3Gdman4tjQGLboJfqz6fL2WKHTmrfsKZRYX6BTDjDldKMosaSTLdQS7oDisJNqAUhw1PfTlnacCO8vl8706Km1FROgLDmudzxg%2BEWTiArtHgLsRrAXYWdB0NmToNCJdKm0KWycZQqb%2BMw76Qy29iQ5up%2FX7oyw8QZ75kP5F6iJAJz6KCmqxz8fEa%2FxnsMYcIO%2FvEkGRuMckhr4rIeLrKaXnmIzlNLxbFspOphkcnJdnz%2FChp%2FVlpj2P7jJQmQRwGnltkTV5dbF9fE3%2FfxoSqTROgq9wFUlbuYzYcasE0ouzBo%2BdDCDzxKAfhbAZYxQiHrLzV2iVexnDX%2FQnT1fsT%2Fxuhu1ui5qIytgbGmRoQkeQooO8eJNNZsf0iALur8QxZFH0nCMnjerYQqG1pIfjyVZWxhVRznmmfLG00BcBWJE6hzQWRyFknuJnXuk8A5FRDCulwrWASSNoBtR%2BCtGdkPwYN2o7DOw%2FVGlCZPusRBFXODQdUM5zeHDIVuAJBLqbO%2Ff9Qua%2BpDqEPk230Sob9lEZ8BHiCorjVghuI0lI4JDgHGRDD%2FprQ84B1pVGkIpVUAHCG%2Biz3Bn3qm2AVrYcYWhock4jso5%2BJ7HfHVj4WMIQdGctq3psBCVVzupQOEioBGA2Bk%2BUILT7%2BVoX5mdxxA5fS42gISQVi%2FHTzrgMxu0fY6hE1ocUwwbsbWcezrY2n6S8%2F6cxXkOH4prpmPuFoikTzY7T85C4T2XYlbxLglSv2uLCgFv8Quk%2FwdesUdWPeHYIH0R729JIisN9Apdd4eB10aqwXrPt%2BSu9mA8k8n1sjMwnfsfF2j3jMUzXepSHmZ%2FBfqXvzgUNQQWOXO8YEuFBh4QTYCkOAPxywpYu1VxiDyJmKVcmJPGWk%2Fgc3Pov02StyYDahwmzw3E1gYC9wkupyWfDqDSUMpCTH5e5N8B%2F%2FlHiMuIkTNw4USHrJU67bjXGqNav6PBuQSoqTxc8avHoGmvqNtXzIaoyMIQIiiUHIM64cXieouplhNYln7qgc4wBVAYR104kO%2BCvKqsg4yIUlFNThVUAKZxZt1XA34h3TCUUiXVkZ0w8Hh2R0Z5L0b4LZvPd%2Fp1gi%2F07h8qfwHrByuSxglc9cI4QIg2oqvC%2Fqm0i7tjPLTgDhoWTAKDO2ONW5oe%2B%2FeKB9vZB8K6C25yCZ9RFVMnb6NRdRjyVK57CHHSkJBfnM2%2Fj4ODUwRkqrtBBCrDsDpt8jhZdXoy%2F1BCqw3sSGhgGGy0a5Jw6BP%2FTExoCmNFYjZl248A0osgPyGEmRA%2BfAsqPVaNAfytu0vuQJ7rk3J4kTDTR2AlCHJ5cls26opZM4w3jMULh2YXKpcqGBtuleAlOZnaZGbD6DHzMd6i2oFeJ8z9XYmalg1Szd%2FocZDc1C7Y6vcALJz2lYnTXiWEr2wawtoR4g3jvWUU2Ngjd1cewtFzEvM1NiHZPeLlIXFbBPawxNgMwwAlyNSuGF3zizVeOoC9bag1qRAQKQE%2FEZBWC2J8mnXAN2aTBboZ7HewnObE8CwROudZHmUM5oZ%2FUgd%2FJZQK8lvAm43uDRAbyW8gZ%2BZGq0EVerVGUKUSm%2FIdn8AQHdR4m7bue88WBwft9mSCeMOt1ncBwziOmJYI2ZR7ewNMPiCugmSsE4EyQ%2BQATJG6qORMGd4snEzc6B4shPIo4G1T7PgSm8PY5eUkPdF8JZ0VBtadbHXoJgnEhZQaODPj2gpODKJY5Yp4DOsLBFxWbvXN755KWylJm%2BoOd4zEL9Hpubuy2gyyfxh8oEfFutnYWdfB8PdESLWYvSqbElP9qo3u6KTmkhoacDauMNNjj0oy40DFV7Ql0aZj77xfGl7TJNHnIwgqOkenruYYNo6h724%2BzUQ7%2BvkCpZB%2BpGA562hYQiDxHVWOq0oDQl%2FQsoiY%2BcuI7iWq%2FZIBtHcXJ7kks%2Bh2fCNUPA82BzjnqktNts%2BRLdk1VSu%2BtqEn7QZCCsvEqk6FkfiOYkrsw092J8jsfIuEKypNjLxrKA9kiA19mxBD2suxQKCzwXGws7kEJvlhUiV9tArLIdZW0IORcxEzdzKmjtFhsjKy%2F44XYXdI5noQoRcvjZ1RMPACRqYg2V1%2BOwOepcOknRLLFdYgTkT5UApt%2FJhLM3jeFYprZV%2BZow2g8fP%2BU68hkKFWJj2yBbKqsrp25xkZX1DAjUw52IMYWaOhab8Kp05VrdNftqwRrymWF4OQSjbdfzmRZirK8FMJELEgER2PHjEAN9pGfLhCUiTJFbd5LBkOBMaxLr%2FA1SY9dXFz4RjzoU9ExfJCmx%2FI9FKEGT3n2cmzl2X42L3Jh%2BAbQq6sA%2BSs1kitoa4TAYgKHaoybHUDJ51oETdeI%2F9ThSmjWGkyLi5QAGWhL0BG1UsTyRGRJOldKBrYJeB8ljLJHfATWTEQBXBDnQexOHTB%2BUn44zExFE4vLytcu5NwpWrUxO%2F0ZICUGM7hGABXym0V6ZvDST0E370St9MIWQOTWngeoQHUTdCJUP04spMBMS8LSker9cReVQkULFDIZDFPrhTzBl6sed9wcZQTbL%2BBDqMyaN3RJPh%2Fanbx%2BIv%2BqgQdAa3M9Z5JmvYlh4qop%2BHo1F1W5gbOE9YKLgAnWytXElU4G8GtW47lhgFE6gaSs%2Bgs37sFvi0PPVvA5dnCBgILTwoKd%2F%2BDoL9F6inlM7H4rOTzD79KJgKlZO%2FZgt22UsKhrAaXU5ZcLrAglTVKJEmNJvORGN1vqrcfSMizfpsgbIe9zno%2BgBoKVXgIL%2FVI8dB1O5o%2FR3Suez%2FgD7M781ShjKpIIORM%2FnxG%2BjjhhgPwsn2IoXsPGPqYHXA63zJ07M2GPEykQwJBYLK808qYxuIew4frk52nhCsnCYmXiR6CuapvE1IwRB4%2FQftDbEn%2BAucIr1oxrLabRj9q4ae0%2BfXkHnteAJwXRbVkR0mctVSwEbqhJiMSZUp9DNbEDMmjX22m3ABpkrPQQTP3S1sib5pD2VRKRd%2BeNAjLYyT0hGrdjWJZy24OYXRoWQAIhGBZRxuBFMjjZQhpgrWo8SiFYbojcHO8V5DyscJpLTHyx9Fimassyo5U6WNtquUMYgccaHY5amgR3PQzq3ToNM5ABnoB9kuxsebqmYZm0R9qxJbFXCQ1UPyFIbxoUraTJFDpCk0Wk9GaYJKz%2F6oHwEP0Q14lMtlddQsOAU9zlYdMVHiT7RQP3XCmWYDcHCGbVRHGnHuwzScA0BaSBOGkz3lM8CArjrBsyEoV6Ys4qgDK3ykQQPZ3hCRGNXQTNNXbEb6tDiTDLKOyMzRhCFT%2BmAUmiYbV3YQVqFVp9dorv%2BTsLeCykS2b5yyu8AV7IS9cxcL8z4Kfwp%2BxJyYLv1OsxQCZwTB4a8BZ%2F5EdxTBJthApqyfd9u3ifr%2FWILTqq5VqgwMT9SOxbSGWLQJUUWCVi4k9tho9nEsbUh7U6NUsLmkYFXOhZ0kmamaJLRNJzSj%2Fqn4Mso6zb6iLLBXoaZ6AqeWCjHQm2lztnejYYM2eubnpBdKVLORZhudH3JF1waBJKA9%2BW8EhMj3Kzf0L4vi4k6RoHh3Z5YgmSZmk6ns4fjScjAoL8GoOECgqgYEBYUGFVO4FUv4%2FYtowhEmTs0vrvlD%2FCrisnoBNDAcUi%2FteY7OctFlmARQzjOItrrlKuPO6E2Ox93L4O%2F4DcgV%2FdZ7qR3VBwVQxP1GCieA4RIpweYJ5FoYrHxqRBdJjnqbsikA2Ictbb8vE1GYIo9dacK0REgDX4smy6GAkxlH1yCGGsk%2BtgiDhNKuKu3yNrMdxafmKTF632F8Vx4BNK57GvlFisrkjN9WDAtjsWA0ENT2e2nETUb%2Fn7qwhvGnrHuf5bX6Vh%2Fn3xffU3PeHdR%2BFA92i6ufT3AlyAREoNDh6chiMWTvjKjHDeRhOa9YkOQRq1vQXEMppAQVwHCuIcV2g5rBn6GmZZpTR7vnSD6ZmhdSl176gqKTXu5E%2BYbfL0adwNtHP7dT7t7b46DVZIkzaRJOM%2BS6KcrzYVg%2BT3wSRFRQashjfU18NutrKa%2F7PXbtuJvpIjbgPeqd%2BpjmRw6YKpnANFSQcpzTZgpSNJ6J7uiagAbir%2F8tNXJ%2FOsOnRh6iuIexxrmkIneAgz8QoLmiaJ8sLQrELVK2yn3wOHp57BAZJhDZjTBzyoRAuuZ4eoxHruY1pSb7qq79cIeAdOwin4GdgMeIMHeG%2BFZWYaiUQQyC5b50zKjYw97dFjAeY2I4Bnl105Iku1y0lMA1ZHolLx19uZnRdILcXKlZGQx%2FGdEqSsMRU1BIrFqRcV1qQOOHyxOLXEGcbRtAEsuAC2V4K3p5mFJ22IDWaEkk9ttf5Izb2LkD1MnrSwztXmmD%2FQi%2FEmVEFBfiKGmftsPwVaIoZanlKndMZsIBOskFYpDOq3QUs9aSbAAtL5Dbokus2G4%2FasthNMK5UQKCOhU97oaOYNGsTah%2BjfCKsZnTRn5TbhFX8ghg8CBYt%2FBjeYYYUrtUZ5jVij%2Fop7V5SsbA4mYTOwZ46hqdpbB6Qvq3AS2HHNkC15pTDIcDNGsMPXaBidXYPHc6PJAkRh29Vx8KcgX46LoUQBhRM%2B3SW6Opll%2FwgxxsPgKJKzr5QCmwkUxNbeg6Wj34SUnEzOemSuvS2OetRCO8Tyy%2BQbSKVJcqkia%2BGvDefFwMOmgnD7h81TUtMn%2BmRpyJJ349HhAnoWFTejhpYTL9G8N2nVg1qkXBeoS9Nw2fB27t7trm7d%2FQK7Cr4uoCeOQ7%2F8JfKT77KiDzLImESHw%2F0wf73QeHu74hxv7uihi4fTX%2BXEwAyQG3264dwv17aJ5N335Vt9sdrAXhPOAv8JFvzqyYXwfx8WYJaef1gMl98JRFyl5Mv5Uo%2FoVH5ww5OzLFsiTPDns7fS6EURSSWd%2F92BxMYQ8sBaH%2Bj%2BwthQPdVgDGpTfi%2BJQIWMD8xKqULliRH01rTeyF8x8q%2FGBEEEBrAJMPf25UQwi0b8tmqRXY7kIvNkzrkvRWLnxoGYEJsz8u4oOyMp8cHyaybb1HdMCaLApUE%2B%2F7xLIZGP6H9xuSEXp1zLIdjk5nBaMuV%2FyTDRRP8Y2ww5RO6d2D94o%2B6ucWIqUAvgHIHXhZsmDhjVLczmZ3ca0Cb3PpKwt2UtHVQ0BgFJsqqTsnzZPlKahRUkEu4qmkJt%2Bkqdae76ViWe3STan69yaF9%2BfESD2lcQshLHWVu4ovItXxO69bqC5p1nZLvI8NdQB9s9UNaJGlQ5mG947ipdDA0eTIw%2FA1zEdjWquIsQXXGIVEH0thC5M%2BW9pZe7IhAVnPJkYCCXN5a32HjN6nsvokEqRS44tGIs7s2LVTvcrHAF%2BRVmI8L4HUYk4x%2B67AxSMJKqCg8zrGOgvK9kNMdDrNiUtSWuHFpC8%2Fp5qIQrEo%2FH%2B1l%2F0cAwQ2nKmpWxKcMIuHY44Y6DlkpO48tRuUGBWT0FyHwSKO72Ud%2BtJUfdaZ4CWNijzZtlRa8%2BCkmO%2FEwHYfPZFU%2FhzjFWH7vnzHRMo%2BaF9u8qHSAiEkA2HjoNQPEwHsDKOt6hOoK3Ce%2F%2B%2F9boMWDa44I6FrQhdgS7OnNaSzwxWKZMcyHi6LN4WC6sSj0qm2PSOGBTvDs%2FGWJS6SwEN%2FULwpb4LQo9fYjUfSXRwZkynUazlSpvX9e%2BG2zor8l%2BYaMxSEomDdLHGcD6YVQPegTaA74H8%2BV4WvJkFUrjMLGLlvSZQWvi8%2FQA7yzQ8GPno%2F%2F5SJHRP%2FOqKObPCo81s%2F%2B6WgLqykYpGAgQZhVDEBPXWgU%2FWzFZjKUhSFInufPRiMAUULC6T11yL45ZrRoB4DzOyJShKXaAJIBS9wzLYIoCEcJKQW8GVCx4fihqJ6mshBUXSw3wWVj3grrHQlGNGhIDNNzsxQ3M%2BGWn6ASobIWC%2BLbYOC6UpahVO13Zs2zOzZC8z7FmA05JhUGyBsF4tsG0drcggIFzgg%2Fkpf3%2BCnAXKiMgIE8Jk%2FMhpkc8DUJEUzDSnWlQFme3d0sHZDrg7LavtsEX3cHwjCYA17pMTfx8Ajw9hHscN67hyo%2BRJQ4458RmPywXykkVcW688oVUrQhahpPRvTWPnuI0B%2BSkQu7dCyvLRyFYlC1LG1gRCIvn3rwQeINzZQC2KXq31FaR9UmVV2QeGVqBHjmE%2BVMd3b1fhCynD0pQNhCG6%2FWCDbKPyE7NRQzL3BzQAJ0g09aUzcQA6mUp9iZFK6Sbp%2FYbHjo%2B%2B7%2FWj8S4YNa%2BZdqAw1hDrKWFXv9%2BzaXpf8ZTDSbiqsxnwN%2FCzK5tPkOr4tRh2kY3Bn9JtalbIOI4b3F7F1vPQMfoDcdxMS8CW9m%2FNCW%2FHILTUVWQIPiD0j1A6bo8vsv6P1hCESl2abrSJWDrq5sSzUpwoxaCU9FtJyYH4QFMxDBpkkBR6kn0LMPO%2B5EJ7Z6bCiRoPedRZ%2FP0SSdii7ZnPAtVwwHUidcdyspwncz5uq6vvm4IEDbJVLUFCn%2FLvIHfooUBTkFO130FC7CmmcrKdgDJcid9mvVzsDSibOoXtIf9k6ABle3PmIxejodc4aob0QKS432srrCMndbfD454q52V01G4q913mC5HOsTzWF4h2No1av1VbcUgWAqyoZl%2B11PoFYnNv2HwAODeNRkHj%2B8SF1fcvVBu6MrehHAZK1Gm69ICcTKizykHgGFx7QdowTVAsYEF2tVc0Z6wLryz2FI1sc5By2znJAAmINndoJiB4sfPdPrTC8RnkW7KRCwxC6YvXg5ahMlQuMpoCSXjOlBy0Kij%2BbsCYPbGp8BdCBiLmLSAkEQRaieWo1SYvZIKJGj9Ur%2FeWHjiB7SOVdqMAVmpBvfRiebsFjger7DC%2B8kRFGtNrTrnnGD2GAJb8rQCWkUPYHhwXsjNBSkE6lGWUj5QNhK0DMNM2l%2BkXRZ0KLZaGsFSIdQz%2FHXDxf3%2FTE30%2BDgBKWGWdxElyLccJfEpjsnszECNoDGZpdwdRgCixeg9L4EPhH%2BRptvRMVRaahu4cySjS3P5wxAUCPkmn%2BrhyASpmiTaiDeggaIxYBmtLZDDhiWIJaBgzfCsAGUF1Q1SFZYyXDt9skCaxJsxK2Ms65dmdp5WAZyxik%2FzbrTQk5KmgxCg%2Ff45L0jywebOWUYFJQAJia7XzCV0x89rpp%2Ff3AVWhSPyTanqmik2SkD8A3Ml4NhIGLAjBXtPShwKYfi2eXtrDuKLk4QlSyTw1ftXgwqA2jUuopDl%2B5tfUWZNwBpEPXghzbBggYCw%2Fdhy0ntds2yeHCDKkF%2FYxQjNIL%2FF%2F37jLPHCKBO9ibwYCmuxImIo0ijV2Wbg3kSN2psoe8IsABv3RNFaF9uMyCtCYtqcD%2BqNOhwMlfARQUdJ2tUX%2BMNJqOwIciWalZsmEjt07tfa8ma4cji9sqz%2BQ9hWfmMoKEbIHPOQORbhQRHIsrTYlnVTNvcq1imqmmPDdVDkJgRcTgB8Sb6epCQVmFZe%2BjGDiNJQLWnfx%2BdrTKYjm0G8yH0ZAGMWzEJhUEQ4Maimgf%2Fbkvo8PLVBsZl152y5S8%2BHRDfZIMCbYZ1WDp4yrdchOJw8k6R%2B%2F2pHmydK4NIK2PHdFPHtoLmHxRDwLFb7eB%2BM4zNZcB9NrAgjVyzLM7xyYSY13ykWfIEEd2n5%2FiYp3ZdrCf7fL%2Ben%2BsIJu2W7E30MrAgZBD1rAAbZHPgeAMtKCg3NpSpYQUDWJu9bT3V7tOKv%2BNRiJc8JAKqqgCA%2FPNRBR7ChpiEulyQApMK1AyqcWnpSOmYh6yLiWkGJ2mklCSPIqN7UypWj3dGi5MvsHQ87MrB4VFgypJaFriaHivwcHIpmyi5LhNqtem4q0n8awM19Qk8BOS0EsqGscuuydYsIGsbT5GHnERUiMpKJl4ON7qjB4fEqlGN%2FhCky89232UQCiaeWpDYCJINXjT6xl4Gc7DxRCtgV0i1ma4RgWLsNtnEBRQFqZggCLiuyEydmFd7WlogpkCw5G1x4ft2psm3KAREwVwr1Gzl6RT7FDAqpVal34ewVm3VH4qn5mjGj%2BbYL1NgfLNeXDwtmYSpwzbruDKpTjOdgiIHDVQSb5%2FzBgSMbHLkxWWgghIh9QTFSDILixVwg0Eg1puooBiHAt7DzwJ7m8i8%2Fi%2BjHvKf0QDnnHVkVTIqMvIQImOrzCJwhSR7qYB5gSwL6aWL9hERHCZc4G2%2BJrpgHNB8eCCmcIWIQ6rSdyPCyftXkDlErUkHafHRlkOIjxGbAktz75bnh50dU7YHk%2BMz7wwstg6RFZb%2BTZuSOx1qqP5C66c0mptQmzIC2dlpte7vZrauAMm%2F7RfBYkGtXWGiaWTtwvAQiq2oD4YixPLXE2khB2FRaNRDTk%2B9sZ6K74Ia9VntCpN4BhJGJMT4Z5c5FhSepRCRWmBXqx%2BwhVZC4me4saDs2iNqXMuCl6iAZflH8fscC1sTsy4PHeC%2BXYuqMBMUun5YezKbRKmEPwuK%2BCLzijPEQgfhahQswBBLfg%2FGBgBiI4QwAqzJkkyYAWtjzSg2ILgMAgqxYfwERRo3zruBL9WOryUArSD8sQOcD7fvIODJxKFS615KFPsb68USBEPPj1orNzFY2xoTtNBVTyzBhPbhFH0PI5AtlJBl2aSgNPYzxYLw7XTDBDinmVoENwiGzmngrMo8OmnRP0Z0i0Zrln9DDFcnmOoBZjABaQIbPOJYZGqX%2BRCMlDDbElcjaROLDoualmUIQ88Kekk3iM4OQrADcxi3rJguS4MOIBIgKgXrjd1WkbCdqxJk%2F4efRIFsavZA7KvvJQqp3Iid5Z0NFc5aiMRzGN3vrpBzaMy4JYde3wr96PjN90AYOIbyp6T4zj8LoE66OGcX1Ef4Z3KoWLAUF4BTg7ug%2FAbkG5UNQXAMkQezujSHeir2uTThgd3gpyzDrbnEdDRH2W7U6PeRvBX1ZFMP5RM%2BZu6UUZZD8hDPHldVWntTCNk7To8IeOW9yn2wx0gmurwqC60AOde4r3ETi5pVMSDK8wxhoGAoEX9NLWHIR33VbrbMveii2jAJlrxwytTHbWNu8Y4N8vCCyZjAX%2FpcsfwXbLze2%2BD%2Bu33OGBoJyAAL3jn3RuEcdp5If8O%2Ba4NKWvxOTyDltG0IWoHhwVGe7dKkCWFT%2B%2Btm%2BhaBCikRUUMrMhYKZJKYoVuv%2FbsJzO8DwfVIInQq3g3BYypiz8baogH3r3GwqCwFtZnz4xMjAVOYnyOi5HWbFA8n0qz1OjSpHWFzpQOpvkNETZBGpxN8ybhtqV%2FDMUxd9uFZmBfKXMCn%2FSqkWJyKPnT6lq%2B4zBZni6fYRByJn6OK%2BOgPBGRAJluwGSk4wxjOOzyce%2FPKODwRlsgrVkdcsEiYrqYdXo0Er2GXi2GQZd0tNJT6c9pK1EEJG1zgDJBoTVuCXGAU8BKTvCO%2FcEQ1Wjk3Zzuy90JX4m3O5IlxVFhYkSUwuQB2up7jhvkm%2BbddRQu5F9s0XftGEJ9JSuSk%2BZachCbdU45fEqbugzTIUokwoAKvpUQF%2FCvLbWW5BNQFqFkJg2f30E%2F48StNe5QwBg8zz3YAJ82FZoXBxXSv4QDooDo79NixyglO9AembuBcx5Re3CwOKTHebOPhkmFC7wNaWtoBhFuV4AkEuJ0J%2B1pT0tLkvFVZaNzfhs%2FKd3%2BA9YsImlO4XK4vpCo%2FelHQi%2F9gkFg07xxnuXLt21unCIpDV%2BbbRxb7FC6nWYTsMFF8%2B1LUg4JFjVt3vqbuhHmDKbgQ4e%2BRGizRiO8ky05LQGMdL2IKLSNar0kNG7lHJMaXr5mLdG3nykgj6vB%2FKVijd1ARWkFEf3yiUw1v%2FWaQivVUpIDdSNrrKbjO5NPnxz6qTTGgYg03HgPhDrCFyYZTi3XQw3HXCva39mpLNFtz8AiEhxAJHpWX13gCTAwgm9YTvMeiqetdNQv6IU0hH0G%2BZManTqDLPjyrOse7WiiwOJCG%2BJ0pZYULhN8NILulmYYvmVcV2MjAfA39sGKqGdjpiPo86fecg65UPyXDIAOyOkCx5NQsLeD4gGVjTVDwOHWkbbBW0GeNjDkcSOn2Nq4cEssP54t9D749A7M1AIOBl0Fi0sSO5v3P7LCBrM6ZwFY6kp2FX6AcbGUdybnfChHPyu6WlRZ2Fwv9YM0RMI7kISRgR8HpQSJJOyTfXj%2F6gQKuihPtiUtlCQVPohUgzfezTg8o1b3n9pNZeco1QucaoXe40Fa5JYhqdTspFmxGtW9h5ezLFZs3j%2FN46f%2BS2rjYNC2JySXrnSAFhvAkz9a5L3pza8eYKHNoPrvBRESpxYPJdKVUxBE39nJ1chrAFpy4MMkf0qKgYALctGg1DQI1kIymyeS2AJNT4X240d3IFQb%2F0jQbaHJ2YRK8A%2Bls6WMhWmpCXYG5jqapGs5%2FeOJErxi2%2F2KWVHiPellTgh%2FfNl%2F2KYPKb7DUcAg%2BmCOPQFCiU9Mq%2FWLcU1xxC8aLePFZZlE%2BPCLzf7ey46INWRw2kcXySR9FDgByXzfxiNKwDFbUSMMhALPFSedyjEVM5442GZ4hTrsAEvZxIieSHGSgkwFh%2FnFNdrrFD4tBH4Il7fW6ur4J8Xaz7RW9jgtuPEXQsYk7gcMs2neu3zJwTyUerHKSh1iTBkj2YJh1SSOZL5pLuQbFFAvyO4k1Hxg2h99MTC6cTUkbONQIAnEfGsGkNFWRbuRyyaEZInM5pij73EA9rPIUfU4XoqQpHT9THZkW%2BoKFLvpyvTBMM69tN1Ydwv1LIEhHsC%2BueVG%2Bw%2BkyCPsvV3erRikcscHjZCkccx6VrBkBRusTDDd8847GA7p2Ucy0y0HdSRN6YIBciYa4vuXcAZbQAuSEmzw%2BH%2FAuOx%2BaH%2BtBL88H57D0MsqyiZxhOEQkF%2F8DR1d2hSPMj%2FsNOa5rxcUnBgH8ictv2J%2Bcb4BA4v3MCShdZ2vtK30vAwkobnEWh7rsSyhmos3WC93Gn9C4nnAd%2FPjMMtQfyDNZsOPd6XcAsnBE%2FmRHtHEyJMzJfZFLE9OvQa0i9kUmToJ0ZxknTgdl%2FXPV8xoh0K7wNHHsnBdvFH3sv52lU7UFteseLG%2FVanIvcwycVA7%2BBE1Ulyb20BvwUWZcMTKhaCcmY3ROpvonVMV4N7yBXTL7IDtHzQ4CCcqF66LjF3xUqgErKzolLyCG6Kb7irP%2FMVTCCwGRxfrPGpMMGvPLgJ881PHMNMIO09T5ig7AzZTX%2F5PLlwnJLDAPfuHynSGhV4tPqR3gJ4kg4c06c%2FF1AcjGytKm2Yb5jwMotF7vro4YDLWlnMIpmPg36NgAZsGA0W1spfLSue4xxat0Gdwd0lqDBOgIaMANykwwDKejt5YaNtJYIkrSgu0KjIg0pznY0SCd1qlC6R19g97UrWDoYJGlrvCE05J%2F5wkjpkre727p5PTRX5FGrSBIfJqhJE%2FIS876PaHFkx9pGTH3oaY3jJRvLX9Iy3Edoar7cFvJqyUlOhAEiOSAyYgVEGkzHdug%2BoRHIEOXAExMiTSKU9A6nmRC8mp8iYhwWdP2U%2F5EkFAdPrZw03YA3gSyNUtMZeh7dDCu8pF5x0VORCTgKp07ehy7NZqKTpIC4UJJ89lnboyAfy5OyXzXtuDRbtAFjZRSyGFTpFrXwkpjSLIQIG3N0Vj4BtzK3wdlkBJrO18MNsgseR4BysJilI0wI6ZahLhBFA0XBmV8d4LUzEcNVb0xbLjLTETYN8OEVqNxkt10W614dd1FlFFVTIgB7%2FBQQp1sWlNolpIu4ekxUTBV7NmxOFKEBmmN%2BnA7pvF78%2FRII5ZHA09OAiE%2F66MF6HQ%2BqVEJCHxwymukkNvzqHEh52dULPbVasfQMgTDyBZzx4007YiKdBuUauQOt27Gmy8ISclPmEUCIcuLbkb1mzQSqIa3iE0PJh7UMYQbkpe%2BhXjTJKdldyt2mVPwywoODGJtBV1lJTgMsuSQBlDMwhEKIfrvsxGQjHPCEfNfMAY2oxvyKcKPUbQySkKG6tj9AQyEW3Q5rpaDJ5Sns9ScLKeizPRbvWYAw4bXkrZdmB7CQopCH8NAmqbuciZChHN8lVGaDbCnmddnqO1PQ4ieMYfcSiBE5zzMz%2BJV%2F4eyzrzTEShvqSGzgWimkNxLvUj86iAwcZuIkqdB0VaIB7wncLRmzHkiUQpPBIXbDDLHBlq7vp9xwuC9AiNkIptAYlG7Biyuk8ILdynuUM1cHWJgeB%2BK3wBP%2FineogxkvBNNQ4AkW0hvpBOQGFfeptF2YTR75MexYDUy7Q%2F9uocGsx41O4IZhViw%2F2FvAEuGO5g2kyXBUijAggWM08bRhXg5ijgMwDJy40QeY%2FcQpUDZiIzmvskQpO5G1zyGZA8WByjIQU4jRoFJt56behxtHUUE%2Fom7Rj2psYXGmq3llVOCgGYKNMo4pzwntITtapDqjvQtqpjaJwjHmDzSVGLxMt12gEXAdLi%2FcaHSM3FPRGRf7dB7YC%2BcD2ho6oL2zGDCkjlf%2FDFoQVl8GS%2F56wur3rdV6ggtzZW60MRB3g%2BU1W8o8cvqIpMkctiGVMzXUFI7FacFLrgtdz4mTEr4aRAaQ2AFQaNeG7GX0yOJgMRYFziXdJf24kg%2FgBQIZMG%2FYcPEllRTVNoDYR6oSJ8wQNLuihfw81UpiKPm714bZX1KYjcXJdfclCUOOpvTxr9AAJevTY4HK%2FG7F3mUc3GOAKqh60zM0v34v%2BELyhJZqhkaMA8UMMOU90f8RKEJFj7EqepBVwsRiLbwMo1J2zrE2UYJnsgIAscDmjPjnzI8a719Wxp757wqmSJBjXowhc46QN4RwKIxqEE6E5218OeK7RfcpGjWG1jD7qND%2B%2FGTk6M56Ig4yMsU6LUW1EWE%2BfIYycVV1thldSlbP6ltdC01y3KUfkobkt2q01YYMmxpKRvh1Z48uNKzP%2FIoRIZ%2FF6buOymSnW8gICitpJjKWBscSb9JJKaWkvEkqinAJ2kowKoqkqZftRqfRQlLtKoqvTRDi2vg%2FRrPD%2Fd3a09J8JhGZlEkOM6znTsoMCsuvTmywxTCDhw5dd0GJOHCMPbsj3QLkTE3MInsZsimDQ3HkvthT7U9VA4s6G07sID0FW4SHJmRGwCl%2BMu4xf0ezqeXD2PtPDnwMPo86sbwDV%2B9PWcgFcARUVYm3hrFQrHcgMElFGbSM2A1zUYA3baWfheJp2AINmTJLuoyYD%2FOwA4a6V0ChBN97E8YtDBerUECv0u0TlxR5yhJCXvJxgyM73Bb6pyq0jTFJDZ4p1Am1SA6sh8nADd1hAcGBMfq4d%2FUfwnmBqe0Jun1n1LzrgKuZMAnxA3NtCN7Klf4BH%2B14B7ibBmgt0TGUafVzI4uKlpF7v8NmgNjg90D6QE3tbx8AjSAC%2BOA1YJvclyPKgT27QpIEgVYpbPYGBsnyCNrGz9XUsCHkW1QAHgL2STZk12QGqmvAB0NFteERkvBIH7INDsNW9KKaAYyDMdBEMzJiWaJHZALqDxQDWRntumSDPcplyFiI1oDpT8wbwe01AHhW6%2BvAUUBoGhY3CT2tgwehdPqU%2F4Q7ZLYvhRl%2FogOvR9O2%2BwkkPKW5vCTjD2fHRYXONCoIl4Jh1bZY0ZE1O94mMGn%2FdFSWBWzQ%2FVYk%2BGezi46RgiDv3EshoTmMSlioUK6MQEN8qeyK6FRninyX8ZPeUWjjbMJChn0n%2FyJvrq5bh5UcCAcBYSafTFg7p0jDgrXo2QWLb3WpSOET%2FHh4oSadBTvyDo10IufLzxiMLAnbZ1vcUmj3w7BQuIXjEZXifwukVxrGa9j%2BDXfpi12m1RbzYLg9J2wFergEwOxFyD0%2FJstNK06ZN2XdZSGWxcJODpQHOq4iKqjqkJUmPu1VczL5xTGUfCgLEYyNBCCbMBFT%2FcUP6pE%2FmujnHsSDeWxMbhrNilS5MyYR0nJyzanWXBeVcEQrRIhQeJA6Xt4f2eQESNeLwmC10WJVHqwx8SSyrtAAjpGjidcj1E2FYN0LObUcFQhafUKTiGmHWRHGsFCB%2BHEXgrzJEB5bp0QiF8ZHh11nFX8AboTD0PS4O1LqF8XBks2MpjsQnwKHF6HgaKCVLJtcr0XjqFMRGfKv8tmmykhLRzu%2BvqQ02%2BKpJBjaLt9ye1Ab%2BBbEBhy4EVdIJDrL2naV0o4wU8YZ2Lq04FG1mWCKC%2BUwkXOoAjneU%2FxHplMQo2cXUlrVNqJYczgYlaOEczVCs%2FOCgkyvLmTmdaBJc1iBLuKwmr6qtRnhowngsDxhzKFAi02tf8bmET8BO27ovJKF1plJwm3b0JpMh38%2BxsrXXg7U74QUM8ZCIMOpXujHntKdaRtsgyEZl5MClMVMMMZkZLNxH9%2Bb8fH6%2Bb8Lev30A9TuEVj9CqAdmwAAHBPbfOBFEATAPZ2CS0OH1Pj%2F0Q7PFUcC8hDrxESWdfgFRm%2B7vvWbkEppHB4T%2F1ApWnlTIqQwjcPl0VgS1yHSmD0OdsCVST8CQVwuiew1Y%2Bg3QGFjNMzwRB2DSsAk26cmA8lp2wIU4p93AUBiUHFGOxOajAqD7Gm6NezNDjYzwLOaSXRBYcWipTSONHjUDXCY4mMI8XoVCR%2FRrs%2FJLKXgEx%2BqkmeDlFOD1%2FyTQNDClRuiUyKYCllfMiQiyFkmuTz2vLsBNyRW%2Bxz%2B5FElFxWB28VjYIGZ0Yd%2B5wIjkcoMaggxswbT0pCmckRAErbRlIlcOGdBo4djTNO8FAgQ%2BlT6vPS60BwTRSUAM3ddkEAZiwtEyArrkiDRnS7LJ%2B2hwbzd2YDQagSgACpsovmjil5wfPuXq3GuH0CyE7FK3M4FgRaFoIkaodORrPx1%2BJpI9psyNYIFuJogZa0%2F1AhOWdlHQxdAgbwacsHqPZo8u%2FngAH2GmaTdhYnBfSDbBfh8CHq6Bx5bttP2%2BRdM%2BMAaYaZ0Y%2FADkbNCZuAyAVQa2OcXOeICmDn9Q%2FeFkDeFQg5MgHEDXq%2FtVjj%2Bjtd26nhaaolWxs1ixSUgOBwrDhRIGOLyOVk2%2FBc0UxvseQCO2pQ2i%2BKrfhu%2FWeBovNb5dJxQtJRUDv2mCwYVpNl2efQM9xQHnK0JwLYt%2FU0Wf%2BphiA4uw8G91slC832pmOTCAoZXohg1fewCZqLBhkOUBofBWpMPsqg7XEXgPfAlDo2U5WXjtFdS87PIqClCK5nW6adCeXPkUiTGx0emOIDQqw1yFYGHEVx20xKjJVYe0O8iLmnQr3FA9nSIQilUKtJ4ZAdcTm7%2BExseJauyqo30hs%2B1qSW211A1SFAOUgDlCGq7eTIcMAeyZkV1SQJ4j%2Fe1Smbq4HcjqgFbLAGLyKxlMDMgZavK5NAYH19Olz3la%2FQCTiVelFnU6O%2FGCvykqS%2FwZJDhKN9gBtSOp%2F1SP5VRgJcoVj%2Bkmf2wBgv4gjrgARBWiURYx8xENV3bEVUAAWWD3dYDKAIWk5opaCFCMR5ZjJExiCAw7gYiSZ2rkyTce4eNMY3lfGn%2B8p6%2BvBckGlKEXnA6Eota69OxDO9oOsJoy28BXOR0UoXNRaJD5ceKdlWMJlOFzDdZNpc05tkMGQtqeNF2lttZqNco1VtwXgRstLSQ6tSPChgqtGV5h2DcDReIQadaNRR6AsAYKL5gSFsCJMgfsaZ7DpKh8mg8Wz8V7H%2BgDnLuMxaWEIUPevIbClgap4dqmVWSrPgVYCzAoZHIa5z2Ocx1D%2FGvDOEqMOKLrMefWIbSWHZ6jbgA8qVBhYNHpx0P%2BjAgN5TB3haSifDcApp6yymEi6Ij%2FGsEpDYUgcHATJUYDUAmC1SCkJ4cuZXSAP2DEpQsGUjQmKJfJOvlC2x%2FpChkOyLW7KEoMYc5FDC4v2FGqSoRWiLsbPCiyg1U5yiHZVm1XLkHMMZL11%2Fyxyw0UnGig3MFdZklN5FI%2FqiT65T%2BjOXOdO7XbgWurOAZR6Cv9uu1cm5LjkXX4xi6mWn5r5NjBS0gTliHhMZI2WNqSiSphEtiCAwnafS11JhseDGHYQ5%2BbqWiAYiAv6Jsf79%2FVUs4cIl%2Bn6%2BWOjcgB%2F2l5TreoAV2717JzZbQIR0W1cl%2FdEqCy5kJ3ZSIHuU0vBoHooEpiHeQWVkkkOqRX27eD1FWw4BfO9CJDdKoSogQi3hAAwsPRFrN5RbX7bqLdBJ9JYMohWrgJKHSjVl1sy2xAG0E3sNyO0oCbSGOxCNBRRXTXenYKuwAoDLfnDcQaCwehUOIDiHAu5m5hMpKeKM4sIo3vxACakIxKoH2YWF2QM84e6F5C5hJU4g8uxuFOlAYnqtwxmHyNEawLW%2FPhoawJDrGAP0JYWHgAVUByo%2FbGdiv2T2EMg8gsS14%2FrAdzlOYazFE7w4OzxeKiWdm3nSOnQRRKXSlVo8HEAbBfyJMKqoq%2BSCcTSx5NDtbFwNlh8VhjGGDu7JG5%2FTAGAvniQSSUog0pNzTim8Owc6QTuSKSTXlQqwV3eiEnklS3LeSXYPXGK2VgeZBqNcHG6tZHvA3vTINhV0ELuQdp3t1y9%2BogD8Kk%2FW7QoRN1UWPqM4%2BxdygkFDPLoTaumKReKiLWoPHOfY54m3qPx4c%2B4pgY3MRKKbljG8w4wvz8pxk3AqKsy4GMAkAtmRjRMsCxbb4Q2Ds0Ia9ci8cMT6DmsJG00XaHCIS%2Bo3F8YVVeikw13w%2BOEDaCYYhC0ZE54kA4jpjruBr5STWeqQG6M74HHL6TZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gPeHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EmEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%2BpT0KYV5dGtknU64JhabdqcVQbGZiAxQAnvN1u70y1AnmvOSPgLI6uB4AuDGhmAu3ATkJSw7OtS%2F2ToPjqkaq62%2F7WFG8advGlRRqxB9diP07JrXowKR9tpRa%2BjGJ91zxNTT1h8I2PcSfoUPtd7NejVoH03EUcqSBuFZPkMZhegHyo2ZAITovmm3zAIdGFWxoNNORiMRShgwdYwFzkPw5PA4a5MIIQpmq%2Bnsp3YMuXt%2FGkXxLx%2FP6%2BZJS0lFyz4MunC3eWSGE8xlCQrKvhKUPXr0hjpAN9ZK4PfEDrPMfMbGNWcHDzjA7ngMxTPnT7GMHar%2BgMQQ3NwHCv4zH4BIMYvzsdiERi6gebRmerTsVwZJTRsL8dkZgxgRxmpbgRcud%2BYlCIRpPwHShlUSwuipZnx9QCsEWziVazdDeKSYU5CF7UVPAhLer3CgJOQXl%2Fzh575R5rsrmRnKAzq4POFdgbYBuEviM4%2BLVC15ssLNFghbTtHWerS1hDt5s4qkLUha%2FqpZXhWh1C6lTQAqCNQnaDjS7UGFBC6wTu8yFnKJnExCnAs3Ok9yj5KpfZESQ4lTy5pTGTnkAUpxI%2ByjEldJfSo4y0QhG4i4IwkRFGcjWY8%2BEzgYYJUK7BXQksLxAww%2FYYWBMhJILB9e8ePEJ4OP7z%2B4%2FwOQDl64iOYDp26DaONPxpKtBxq%2FaTzRGarm3VkPYTLJKx6Z%2FMw2YbBGseJhPMwhhNswrIkyvV2BYzrvZbxLpKwcWJhYmFtVZ%2BlPEq91FzVp1HlQY1bZVLqeNR9SAUn6n0E28k%2FUuGkNpP1DBI5ch%2FEehZfjUQ9aE41NhETExoPT2gGQz0IhWJbEOvTQ4wgcXCHHFBhewYUiFHuhRSAUVmEHeCRQHQkXGFwkAgyzREJCVN7TRnTon36Zw3tPhx4EALwNdwDv%2BJ41YSP4B2CQqz0EFgARZ4ESgBHQgROwAVn9GTI%2BHYexTUevLUeta4%2FDqKrbMVS%2BYqb8hUwYCrlgKtmAq1YCrFgKrd4qpXiqZcKn1oqdWipjYKpWwVPVYqW6xUpVipKqFR3QKjagVEtAqHpxUMTitsnFaJOKx2cVhswq35RVpyiq9lFVNIKnOQVMkgqtYxVNxiqQjFS7GKlSIVIsQqPIhUWwioigFQ%2B%2BKkN8VHr49HDw9Ebo9EDo9DTo9Crg9BDg9%2FWx7gWx7YWwlobYrOGxWPNisAaAHEyALpkAVDIAeWAArsABVXACYuAD5cAF6wAKFQAQqgAbVAAsoAAlQAUaYAfkwAvogBWQACOgAD9AAHSAAKT4GUdMiOvFngBTwCn2AZ7Dv6B6k%2F90B8%2ByRnkV144AIBoAMTQATGgAjNAA4YABgwABZgB%2FmQCwyAVlwCguASlwCEuAQFwB4uAMlwBYuAJlQAUVAAhUD2KgdpUDaJgaRMDFJgX5MC1JgWJEAokQCWRAHxEAWkQBMRADpEAMkQAYROAEecC484DRpwBDTnwNOdw05tjTmiNOYwtswhYFwLA7BYG4LA2BYGOLAwRYFuLAsxYFQJAohIEyJAMwkAwiQC0JAJgkAeiQBkJAFokAPCQA0JABwcD4Dgc4cDdDgaYcDIDgYgUC6CgWgUClCgUYUAVBQBOFAEYMALgwAgDA9QYAdIn8AZzeBB2L5EcWrenUT1KXienEsuJJ7x5U8XlTjc1NVzUyXFTGb1LlpUtWlTDIjqwE4LsagowoCi2gJLKAkpoBgJQNpAIhNqaEoneI6kiiqQ6Go%2Fn6j0cS%2Ba2gEU8gIHJ%2BBwfgZX4GL%2BBd%2FgW34FZ%2BBS%2FgUH4FN6BTegTvoEv6BJegRnYEF2A79gOvYDl2BdEjCkqkGtwXp0LNToIskOTXzh%2FF062yJ7AAAAEDAWAAABWhJ%2BKPEIJgBFxMVP7w2QJBGHASQnOBKXKFIdUK4igKA9IEaYJg%29%20format%28%27embedded%2Dopentype%27%29%2Curl%28data%3Aapplication%2Ffont%2Dwoff%3Bbase64%2Cd09GRgABAAAAAFuAAA8AAAAAsVwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABWAAAABwAAAAcbSqX3EdERUYAAAF0AAAAHwAAACABRAAET1MvMgAAAZQAAABFAAAAYGe5a4ljbWFwAAAB3AAAAsAAAAZy2q3jgWN2dCAAAAScAAAABAAAAAQAKAL4Z2FzcAAABKAAAAAIAAAACP%2F%2FAANnbHlmAAAEqAAATRcAAJSkfV3Cb2hlYWQAAFHAAAAANAAAADYFTS%2FYaGhlYQAAUfQAAAAcAAAAJApEBBFobXR4AABSEAAAAU8AAAN00scgYGxvY2EAAFNgAAACJwAAAjBv%2B5XObWF4cAAAVYgAAAAgAAAAIAFqANhuYW1lAABVqAAAAZ4AAAOisyygm3Bvc3QAAFdIAAAELQAACtG6o%2BU1d2ViZgAAW3gAAAAGAAAABsMYVFAAAAABAAAAAMw9os8AAAAA0HaBdQAAAADQdnOXeNpjYGRgYOADYgkGEGBiYGRgZBQDkixgHgMABUgASgB42mNgZulmnMDAysDCzMN0gYGBIQpCMy5hMGLaAeQDpRCACYkd6h3ux%2BDAoPD%2FP%2FOB%2FwJAdSIM1UBhRiQlCgyMADGWCwwAAAB42u2UP2hTQRzHf5ekaVPExv6JjW3fvTQ0sa3QLA5xylBLgyBx0gzSWEUaXbIoBBQyCQGHLqXUqYNdtIIgIg5FHJxEtwqtpbnfaV1E1KFaSvX5vVwGEbW6OPngk8%2FvvXfv7pt3v4SImojIDw6BViKxRgIVBaZwVdSv%2BxvXA%2BIuzqcog2cOkkvDNE8Lbqs74k64i%2B5Sf3u8Z2AnIRLbyVCyTflVSEXVoEqrrMqrgiqqsqqqWQ5xlAc5zWOc5TwXucxVnuE5HdQhHdFRHdNJndZZndeFLc%2FzsKJLQ%2FWV6BcrCdWkwspVKZVROaw0qUqqoqZZcJhdTnGGxznHBS5xhad5VhNWCuturBTXKZ3RObuS98pb9c57k6ql9rp2v1as5deb1r6s9q1GV2IrHSt73T631424YXzjgPwqt%2BRn%2BVG%2BlRvyirwsS%2FKCPCfPytPypDwhj8mjctRZd9acF86y89x55jxxHjkPnXstXfbt%2FpNjj%2FnwXW%2BcHa6%2FSYvZ7yEwbDYazDcIgoUGzY3h2HtqgUcs1AFPWKgTXrRQF7xkoQhRf7uF9hPFeyzUTTSwY6EoUUJY6AC8bSGMS4Ys1Au3WaiPSGGsMtkdGH2rzJgYHAaYjxIwQqtB1CnYkEZ9BM6ALOpROAfyqI%2FDBQudgidBETXuqRIooz4DV0AV9UV4GsyivkTEyMMmw1UYGdhkuAYjA5sMGMvIwCbDDRgZeAz1TXgcmDy3YeRhk%2BcOjCxsMjyAkYFNhscwMrDJ8BQ2886gXoaRhedQvyTSkDZ7uA6HLLQBI5vGntAbGHugTc53cMxC7%2BE4SKL%2BACOzNpk3YWTWJid%2BiRo5NXIKM3fBItAPW55FdJLY3FeHBDr90606JCIU9Jk%2BMs3%2FY%2F8L8jUq3y79bJ%2F0%2F%2BROoP4v9v%2F4%2Fmj%2Bi7HBXUd0%2FelU6IHfHt8Aj9EPGAAoAvgAAAAB%2F%2F8AAnjaxb0JfBvVtTA%2BdxaN1hltI1m2ZVuSJVneLVlSHCdy9oTEWchqtrBEJRAgCYEsQNhC2EsbWmpI2dqkQBoSYgKlpaQthVL0yusrpW77aEubfq%2Fly%2BujvJampSTW5Dvnzmi1E%2Bjr%2F%2F3%2BXmbu3Llz77nnbuece865DMu0MAy5jGtiOEZkOp8lTNeUwyLP%2FDH%2BrEH41ZTDHAtB5lkOowWMPiwayNiUwwTjE46AI5xwhFrINPXYn%2F7ENY0dbWHfZAiTZbL8ID%2FInAd5xz2NpIH4STpDGonHIJNE3OP1KG4ISaSNeBuITAyRLgIxoiEUhFAnmUpEiXSRSGqAQEw0kuyFUIb0k2gnGSApyBFi0il2SI5YLGb5MdFjXCey4mNHzQ7WwLGEdZiPPgYR64we8THZHAt%2BwnT84D%2Fx8YTpGPgheKH4CMEDVF9xBOIeP3EbQgGH29BGgpGkIxCMTCW9qUTA0Zsir%2BQUP1mt%2BP2KusevwIO6Bx%2FIaj8%2FOD5O0VNrZW2EsqZBWbO1skRiEKE0DdlKKaSVO5VAuRpqk8VQJAqY7ydxaK44YJvrO2EWjOoDBoFYzQbDNkON%2BUbiKoRkywMWWf1j4bEY2iIY1AeMgvmEz%2FkVo9v4FSc%2FaMZMrFbjl4zWLL0%2BY5FlyzNlEVYDudJohg8gPUP7kcB%2Fmn%2BG6cd%2B5PV4Q72dXCgocWJADBgUuDTwiXiGSyZo14HOEQ2lE6k0XDIEusexDzZOMXwt1Dutz%2BtqmxTvlskNWXXUQIbhaurum9GrePqm9Yaeabjkiqf%2BbUvzDOvb2Y1E%2BEX2DnemcTP%2FzLcuu7xjQXdAtjR0Lo5n4%2FHs%2FGtntMlysHt%2B29NXbH6se%2F%2FWbFcyu%2Br28H0MwzI30DYeYTLMXIA2EG8QlHpAsyS0EfEToR0a3utIxFPJ3kiIHCCrZ66b0e2xEmL1dM9YN%2FMwS5p01N5jMX%2FBLKt%2F1R83l0LyC29M6%2BiYxo%2FUNg%2FEF7c2WyyW5tYl8WnhWg2%2FhyySbD5UhnDyS7OcU0dnrFw%2BDfGdI7v4QfYIIzOMq9hFtY55gmvC7jZ2FK7sEdrn6IXBuucYhjsGdQ8z0yEbWkkczjjsE5hNAIZrPx2zOLZDmKNXcXtg7EMqidAEEWg%2BSJCBBNwxvxJfc%2FbZa%2BKKf%2BxoKZybnq5vaqpPTye7CiF%2BZFjxZ8%2F7Qij0hfOG%2FcowPA1rT1l4ymWnrKmxxqfErTVrpgwPlz1kC%2BOy8NMDz6c%2BIO38K%2Fx0xkPnLW8Kx6qGAoQdL%2BTD9V9rb%2B%2Fctn%2F%2Ftrxz8dUrZrD%2Fzk%2FferF0cNt1BzctmX2FZPXt%2FjnFCQNz4Ah%2FiKllGiCMs1w5Lkg0kiEwj6VTXCDKsX9rMpnvIj9pcDecXAIXMnqn2dTUbN6w0XQ9ue6FV%2FnnXCH7S3lPWGltVcLsH75ub3ab7A8M28caNrIeOr3o5Q0yFsYL80xaa0EY%2FUEczV7icUMY5pnelAkmUAXmHYjvFWFGxuqlSaow3OM%2B%2FiYY7%2Fl%2FhVELF4EjRqNR%2FbvRbOY%2BDUGzGR%2FOh3EqmE%2FugIQQguGt%2FeMYz%2F%2BL0cimjeZfQDI3phXMbMQsqH%2BCjwVz%2Fhf4idHovgVmB8gLvjbicDcC%2FNypP536E%2F9N%2FpuMibExdohBmNwyiaZdJGoigos7GpF222xrfnZhML%2F7Z%2BylaqP63Hr%2Bm7bdUkQ6%2F2cXqdfmvwixY%2Bs2ksXFeXcE%2BiX0Z%2BIow76DBNgjJ7TOdUK18iPsPflfQD%2BDPsZG2Aj9VmKMMJ4fYRrhIaxhTDR0Elh2vA6h%2FAE6xUb29mj3sjmL72petXjejPy%2Boel60M99tFduCI59N3221xe7apOvxs6aHs7vab1IqY2tv7q2xsHeHGml%2FcV06u%2F8S%2FxTjJ%2BJYc0bWEX0ukW6YmIbGkJRMdjJ9mYIH5QIdJF4hvRGyK7cC7ctImQRcUET99fGXOoft35GYLMQu%2Bg2smnkgZUrH8AL%2F9Si217IssJ916nv14ZrJrvdxLkQvrvtBcjgPC0NXOicO8Qf4mcxPqh3hgUw3DDfdvLJXngg7N3dN2zbPJSaed3OfZnMU7dvmznp3C3bruO%2BNmue0LFsy7S%2B6265%2BfCKFYdvvuW6vmlblnUI8xCXp37CrOZv4B9gauDBlYp7adcUXB5DNCwYImlXOJJKkAdvExXxVvKEYnCo%2B3eIskP9qrrfIYs71CccBjfXRC52udTHHdaP1A1ui%2FVvH1otbrLrpNXBsGX5B89QghDyimlvNB2KfkxZ5C9%2Fem3%2Bd1%2Bd%2F%2FIfFp2%2B2Oxn%2Fs%2B9n%2F79p39S3s8idN6g0yZObwJOgKUpNB3GyU0Ls0PbRzIRq4lcarLKOJBkLRzJQD4j2090XrbA7DW8K3jNF5hlGS5e4V2D17zgss4T20egOJte5iD0bReM9yjTxnQxCRj3c5kFzGJmGbNKmwGw39IJDJcXJZGMkaAB4jyJAKw0jt5IAuIE%2BA%2BU3cVAZZrq9zhDyBrU8oosuxcGNTzCKJfla7JjNVmuSb%2F%2BtuzN2H%2BX4vlB%2BPpdfMXXmuVsNiub1T34SFbjYw5itEvVi0K0Nt9pNJUMI7SLGRhf2xipfCYf8z5OdlGKayOucFeVPeS%2Fdbo3lBrbSMmwUiQN5%2Fed7g0Ds1s17IuZC5kNzM3MZ6EWCa0DtekdJfAxz%2BR%2FOX28sND7yRMTBcf%2B%2Bs8mQCQWHya4qBv%2FufeMoWyslPA9DtMxUknxkH%2FyfTnm2CMYzs%2BCq3r7PxY%2FMXomrvTEsRpfEGHa%2BWN8E1AHjElb7d06ddA7oK%2F%2B5Mdsv9EtPms0jv0Z5kf1FqPxWdFtfFr0kHfgDX0Y%2B5PRSG7RUj0tQr7rmfX8DH4G5W28kKeJLtmQsQkuwMP1pk16EV4sl7vrMJATfyUWo%2FGwEco4rh4XFQgaiUX9qxZHrMQqKnz%2Fc2d8b9TysYrAuXpP%2FRf%2FGr8b1qwwc5a%2BeuLa6S6sneNXToG2XrEJi4R5SGs8Sq2S3d97bsfCRaTdaLwKClRHt37mkudvXbjwVrLhuYeGhh56bvfQkHpk2CwvwClqgWwuBfndC3c8dwmstj81KkagcUgbfPY8Zje0W%2F82VPWJHmSq6pP8hPWpotc%2FEexDOK3qU%2BwngPhOCiO9MJRm8TJefjelrzoKnG2Bn%2B1NCUmPE4gHFmBN9jrTigRIpsACrc9Gstg58ULkp9467%2BGf%2FeFnD5%2F31lNrt2967dhrm7bzI%2BVT5m%2BfzKhvf2MzpICEm79Bopkn07lt1762adNr127LwVqQLdJ5%2BlpQDcvHPQtVY5knhYrK6q8%2FJsiP6EuhGZdFdaNszjvpqvc%2BPI0CdjN0AXsFOC3ZfALDJwr4q2Xq%2BGF%2BGNbsxUg5NLLIEXi8otcDQcUts0D8eQ1iVDRAMBTsYiNdRIxE09EIBJO9A2xqgERTaW86BUFn0OD2xFO97FAgFhF6OoQ7prYt4XwSeUgQHiJyDbeke9IdQntciLQ1FlJMaYcUNvZBg%2BFB1ubjlnRNvl3o6IEU2w7fdNPhm%2Fhh%2BFLysUu6%2B%2BDLHkOkrSHYEjH0tEPe7WdD3uyDgvAgK%2Fm4szFFR7ch0toUgBTdWHr7EpaWru6%2B6dmbbnqWEbV2EtxAsXiZAPTtGPSbHsotI2leoM8TePEqgSQprs7AGFf8kuOkPdZPXGb55POAW1d%2FjLST9v5YflasP6v%2FCO7%2BGNAPC2BMZWmsOjp2NNbfHwMCJD%2BLPVL%2BD%2FOYlWEEI%2F9jpPddOFkB5d1GSuKZYggmCCd7JUxD7EXAzxyirYnNDLdDZoFdx14kivkvGc3579Jm36reTTvDgBnaO6vzyQ6chQmlsMoIkIQ2%2BbBDWBud1Va4pcCn8CPqxlh%2FfgtG8IPaPH8C5wk6%2FnZDv69jurV5QhtwE0x2iqOsj9Mx8B9%2F0EaUdiPfOYYDCi%2Fq9jhWRuupMDEU0%2BCtX0sDFxv07T%2FK5niBPqN9%2BtQjgEc31NGCXFeMcCEuQBIc%2FBK4CO78u7EPYvl3yaEfK3vcb6qP1R2tI7vUjVDDUdKubsSrNjYKY1qBEa2P50SJoaXiksIoLiCwnxS6EBuBde87botNfdEWwYvF%2FR0%2Fu5yCqhGeEOR2ynSeyXjt6ka7neyye8kryBSWE52y%2BRBgogrXPZ8E1yIHoHIFUM%2BAbJhE7lbMtt8ApL%2BxmZW7PwbjAO0fAVoXQOuiSP%2FksIVdFZ0aulsamKUzwPZ%2FNYDMJRBPCxsBqLzqHyneXF6Ej9HlIFo7%2Bpg%2BjUb3unRmGpstGkm6etOuDBGA5wCMefp1gTHcdZlvPBXlOslvYTp1cd8UjYLVd%2FJ5awNrIOKLnIt9MD9qdrKrWCvA6ALm3QV9VrsPm60Q7%2BRHJHP%2B2hqfugo%2FMvI2H%2Fmqr4b9tFnKSRY1Y5Ek80Nm%2FWIhr1ikKnxGz9TWXrokf9xwujfvcOTtNTWnxd0F37Y2W79tteBqZ4G5qLCuomw%2BnSr28QESCRVLTyYKILGJOPfcnaIFOsewhRdvv%2BrWa%2FWih0vlbX6Zb75T5C0qNKVFvH1QL%2FvazSWgC2s6oWXXIuUxQelKiJbowuJDQViatLmLijg9CQBMg8WiPgiw3LEeYRmm5f%2BXdnvkDnxLLjMLxtvX74C3OlwPQqx4xwIdpPx38LrlDphiyWUWHWKAzzxurS%2FxTo%2BP5wGFak62ap1PVFFN4v%2Fy%2BxuR39WnIO7lsWfwgVsK17wxrs9K8ltIKuhkw7f%2F6dhK6gQokFKhWX3urrjk%2FrnI0pgfpGMeuQIUaEM7%2BGF5q2iMkCaMQwxxOzcvU0eXbsnS9XknXvP7Gtw5dwPXlFu2ecvSHEZgNDsU6x%2FGdXBYXyOQjzZReSedeEPY6nEv9gJR4oBQJtFO6Kd0fwC6BO4LNHDeBujB6dSNcUQC9zIv2LnAzGk99bUDrdFY%2B9yGFQtEo0GQPNv6vS2drj4%2B1jHbv3aJSMUWP%2BQTZrmbNTjU8wyG%2FiXNNpskybLcJ3CiTF5Ir%2BJYzmJwE0mSVhlxbtbmvweB3ulB6Til5UuUZydpgiFVeobhU0WaBqpJ198d%2B%2FXeNRTZ9%2F1OPfG7%2B2hwzd5W3D%2BhmyjsRcUg%2F%2BCavb%2B%2BVh2ls3L7zT%2FetOnHNxeerv313vzLVqPai4nJv%2BK1FC6040%2F4udw7sAb3laSg0XCkAAs0npBO6VJabS4Elk%2FU%2BD4gTXW%2Bj0wnrMlqNamq4tMIYB87tE10i0FR3LZNhJsb7%2FR561btmes8YBCRkhYNByRtKd55mqTas9FYhJnbRGHuOh3M4QTdgQSqmgRxuzGdSvZGcbMxNQGk5C3ebLjoXIOFM4l%2BWKHmLTJwRv9E8GWJ6dYvf%2FFmEyEGr%2Bgyrr1p5zrgkz0Cw2j94Hv8Jdx7dIVegBSNtgsqGsRQEYiIBoXwD0LNvQ5d7s5Z00QzwNhqZA0b%2BtMG1tQq5nd84uq8R0zPvX35G8uRaze4jcOHzz0w1%2BQ2BIRvf6J6Kgatnrbiem%2BCFvAxfkrndzD9MFPP1GWTUHclpASUkCNAQkpCCcCgDSUDAhDZ%2BCuEkgn8J7i9nMA7pA4lISappxILKfAeSAbIcSDuN2bJcfZILqeO5rLs0MnngSHYRdrHjmaz7JEsEPw51ZqDJDmUIOZIe34WaQeegNsJn1qz8AIpT3yCjyEih%2FxELkuJ0lEMYTLVCiWpo5oYMleMH6USyYJcD%2BuOe%2BkWKpn1Qns34iyYDjkSLvgnZXcgVQNeqINXr48m3iS7cjm8tedyY0f1QvTnHHdsrKby%2F%2BSSbPY8%2FNH6vpl%2FEsq3Ae4ZU1HC44KFiI9o7CEgab%2FRqHbj7s5KAg06s39ZP%2FzxI%2FmVuF%2FTbTSy%2B3Fb8If9%2Fcv7%2Bwt91yy8RfP1QXtW5RzQn7qIiZyuFM5QfJ5E9uVnqT85TanFx0lkP3ukBAMprvsRyi%2FC8NAJL1xbIIirSvnSj4O5netb4JxmNANHPssHAcHMHsFRgEug816gDBeMbdfiuRcghqYcm0%2BXxx%2F5IAEtN3fqFF3LzAXqwoT0PN0OVTNqxo8sxMkd5Ig6k79Zk7VxxX6gMLOZFQgvpW2RrMW1D0BDihaXQ9wVRoBxPLfpknmkeMtoB%2FqM9cRc9IqmMD2XUmdZ7GSRKPUZvChf8BoykriM2MnKYbOHX8R7cLdNCxSFFVQqoYswnlWtlFS2mNkhswVpZiQW1J%2FUKFfipHGlUkM6UKBhMz1istELIHJLMSctu3ugzfaVSOjKvUgc%2FTHK4Sdg2Wscz69leKIkkrwuuWiOe9yGYKQXRumkC3qbRcMwrvhjNXgdZk3RxAUEhuSPvn3nnd%2B%2BU%2F3vlVOmrJzCD8JLxV1OHRjrZifbcFDOuRNTGqdgQm1tSNJ2OcQ04YiEXuxtII1ECSQRoQGYioEsgCfchB4ghAtw7FfJre4WZ9hkVi9MtjuWqtdNDlpMrfEG9fOT6q21okg%2Be4As38MfGquNt7oUws6Ysarj1%2FefE%2Byst86YUVNvDdts3Pv5c8m%2FaP0C%2Bf8%2FQb%2BIMnGq09BgwN01oIOAnAdagI8mBSrqk1gxTDUBOtk2ousEtBH2z4Ir2d3f6k8PXXVlt2qN9RODxRuoJT%2Fv27wm09jRYVc%2Fe%2B%2Biyx2tyzJb%2Fn3J0htXP87eSsQaf2Ly0s6Zmxela88REy1cf4273mI3iXNJ7KxrZibOm9xm6rl4fqy%2Ft27smU8tOfdW2ucBzg2UfmOIVyLIl3kpYlwphDISTXJXsctmiDtN7fNV6zelgxwnWxsVr83Aj%2FS5ki1jL%2Fa0GC6%2B2L6Um%2BaoddlNFuj%2BbJ8mH%2FiaLh8I0%2FU51NspIEfq0dohwyFXKgm4NggwQ4rRhCOUFtxxo8XnitT4cnGfT93IS8FaT85XE3H5LMY4zIEPL1hw443wz%2B1UmhTJyJGxZzw%2BwsKkKZgUiVtKOKMEb2AKHTv61FNc01PQFwKnvsZ%2F9pPA4RKTASWahmh%2B8MxwzHxKy74IRn5LGRjsPUUwTu64UYNY38caqd7HKucZ%2FtHnODtENw%2F2UfHRMaq1UUPDJQ0OKkWCeet5fYOhII1VRz8%2B%2FElg5j4Gxur3J8o2PJ4rg%2B2d08T%2FfwEzSVbyZ9XPro95T477lRKqUSRXQnauHNsISAl27oWi6Fv9z48JMv8r%2FaMMj8onCP%2FDuDZOuN%2BGPPr%2F%2Bp7bx%2B7JlbYdppcNhzKU%2F1Px5aiaGDn%2Fs1iGMaBcleKUo%2Fv9rcxkZj7DBEKOfrayytXNLYiUdBY%2BpleQXdnscKlQcpzuWluxsieeyuXIK6SdxozitWyGOV3vOHHjguyCQ6fpIYy2JwvrQEF%2FQa9Pdf%2FQqOSqCiE%2FEE1%2FXIVKTc2tzWbHnimrEd%2BVyz311Ml3P0GVTj7PD5aDnsvCvH36alEaPMePcMegXs7x8igTu4B9v7G9vTHvhCu%2FkzIdx%2BBxC0ay9zRSvoS0F2lIxI%2BX7klU63I40gLQ3w5ep5na%2BSFnba3z5D64zv%2BQtM4n4ffG3tq4aNHGRfxgrXPMim%2B5487abL7xhdseIRn1KDl%2B7aINixdv0OD%2BJSPwKf5%2BxoP6aiTeQIDVlIhMcL1H5R9PYXvprs3fv2bO7MOplCmweuiq2JRZ1zz%2B9a%2Fv2PH1Hfz9236w%2BZrPXvWfAxlj4NLLHpq3c%2FPQ3uvmvbrjG7fe%2Bo2y%2FcLdtE6VUlXi0ASb1VLUBVSUWSU4HdvAraTyS8xzM8NxvxFkXV6pUVRiJwcgC5zEeht4rwcp7ki0k41G0qlQhG1Vzlq8alEmnFi58caB5Q9vn988MLhqyVlHvLEWjtQFeupdiocF%2FtkkOGPW2ibWaBTkeZ%2FdvPWazXfOnnvL6jkRXpi85sFzZt%2B55ZptW3bl1cCCHZPD06MhySha7UFzjcjbp8fOecFCirzAG%2FyVjBX6OFIaadSjQq1nNhyIe8tVbaaSdHlXIWKacMeuZA1uxS95zILhyrxAdsXTL6m7kNQlx2P9uZf2qhufePFFbpI6%2FOU0WcP99RrCsrwseVot5mtytpf6Y0gm9sdeyKnPQ7onyK4nXlR%2Frg7H95M1upzu89DH6pgUcikoiihJ6NJKmRxV1x%2BMJiOA3YwhDRQrWU0u%2F0rvq0VYXnyCwsLeTJYBq3dAtJDavuzyoVpzZ99Z0%2Ba0uoiFH%2FxcqgDR7rUFeOrUn6Cywb8ZeNMbhLV5ugP9l0zv9UN5b5mFkjzxUcpPJCn3V402pRxtJd2GrnLdhtVk9ZSZh9W91fCSH5B7ofxPiWL%2Bj3D%2FuwhBRdyAyozeZwvQzs79soi%2BBKSnafLviZCcfrpBpLyimfLfTyJtbyruIQKD01tUwJyKEo%2FybaxkSNFUMdMkhQoJyRBQFhnUkDQSXhTM%2B3NmY0EDM7ffLIjqWEGt8lCO6mLia3PukFnghosJD5p5SIho%2FVDkzQfLE%2BIrYoJXkD19pdP7OwG%2FvoIUtagiWiZ4PAFTHHlTVhRZ7dYmPar%2BNJ%2B8JhmR6DFK5DV1foHoLNO%2FpHrvZfmWZ15RQlwvoVDKhCWNK3CCch9lfFBuAqUgpFSShmNaPj%2Bi5%2B%2BWZfKeViJfW5HnUakVL4UCNVkA4%2BETfIqx4B5xSaP2L1yn0zn2ltPn4%2BOqZGmwwEVCaCSqG53ldtL1oLGAhdMLd09MpCCF6tD6ZnAZBY9hDaYsP0jzZ0j5ZjKsF4i1UmLuhbJMCnYJPt5VwFNvmZawXjEvLJqIH8STonZjq7BZ8gKgR20C9MDFqJAX1H64QW2NEup6qgzLP8cvppL%2FNNTOBTCJABOHeWoXzLhw4Wuy7gaBtjKr9kgKq8ZlRYBS32Lpxc8vIhpNDTfyNXWybMJbn2RyQ5EmWc2QF9wmSZ0KYCE%2BcPuYO6b15Uotj2Kd4MItLS7gtFbkTdrFND6pvEZqv5Yv7jXAus7Pg7avo7KDot50NX3CPkP%2BKps8J9%2F3mGQIteY%2FLGPC%2BL7872SPR2br5fy8MtKBMHedGuM28%2FMZmPJMrGgi3Gb1S%2BSi1%2FL%2FzrZwO9XH1ce%2Fz7ZQ1WSoY%2F%2BpMb5FT4ua0Wm%2BJf%2F298nFmChEQ%2BTi71est4mq9VYI6RsymoRJKYidElT2FGnDTZvqtfhGAFTbeqEw68GqtfmbVa%2F1IFO1%2FjdWr%2F8BDRRtQh9XNjubEm4aWVpVonpTGR7PVGc%2BKJNoBIWF7kYi4gUV3r1U6723i6TxUl3n3%2FtM27aZfKb7THiHW9VzFSwHJ05VfK6Ar7kaB0XgPPE0BSkSFKsBUpaLihEWoA9wBt8qirh2VSOkZwXEwyrxZ5jyt2rJmSo9gX7cg6jsEUGJU9z9xJPOEM3uQQxKgkh35DNATnVyrmJ3mbCNyIB%2Fyox4wH1bg2DwN7q9kov4pFqny8oSm3RQbGgJ1QQTs6ZMLilOVYJ9v6Wha3HcJ9jddsXp9YhGUXLXt%2FqMDnvLpPNTXfNa60z5%2FyjXQOMq%2BlNmwh5egpYrdfZQZV9rI47xlRkuyTjpzsmCBSWNkAXVoK8sgYWqQJWbo1RLo6QH0YW6pxqfCnRgkd%2BRiFjUQUQ7poIaYoakgXxwFd9BuuI38H1xBxXSFb%2FpBDIKQFn7YB3dB36l7sG1FLaKiBdp1KxLvfswap%2F30lnVESgNnvjbUoT6w9N%2BXoio0qcYOIM%2Bheg940YimsucQVvli9NEcft2UZwGQwLuilj1fFr1i3NP94X%2BPE7Hpvtj6lBJfJ4R6NvWiaL6MgzWHxiN66DExa%2BdAdAbMYX6HVF8A%2B7rjEZIXAVbDe7PVI9rmN69JOLV1DOSvRPxWNPZBZf%2FNf%2BNy65BhYxxxV%2B77XJ2wfQ389%2FIQPgajXbwMsuAz%2F0IaQcXJavKbRqR2IqyZruXjVC2%2Bhdee%2F5vdnYOedpmVtR3NGXldxSzDSIiBVpkGb9by89UpEPKrSLZmyFDzMab%2FwXl2CNe7s%2FqCtTvWgG5kpBmCBlSzDS%2Fr8N4uwBwohRW63JTS1y32f0TQsPfXVGEHQrV8%2FNCfiOUVirYcBbIeA2%2BiF68rQIo3B%2FS628vYESr79ehzS7Q9LEL9UXmik9XVHb1yBO3Ngvt5935%2Bk1efkV51mzzrM0LL3%2F20avnwMeKuWyOUZg2TasSqZ%2BKcZQiOn1Iu2Vh497ALUVZiCKt%2Fgh6IvTIj1ZLRjWAkpHKOKovNwp00eqPROiAbiNEKieXwMLcXhVJ1%2FuzmLP4tfxaHR59cBdJVG1kTAgl9ze9QKUEQ946Hkb%2BokJ5JRDyf54Axur1D%2BWS49cLr0tTPEu7UmXrxcSr3XNvumv4yXzInXKH4F7Tc7p17Zt%2Bt%2FqW2%2B93k063X7VW6lALxTY7i1nBXMxcxmzQbabxz%2BtJo%2BwijYaIGMNS8AoSMgAPt84DdHOoMPfjXhF%2BkuH1tZvuFQrRCN07xGcXRX9MYxYchDe5BcHj%2BZ4i%2B42WyPc8Xofi7bbZJN5nJLJ5qr6IqRtzqNlM17SpFsnkEyTWoABEjz4JXOQvzWYuwdnV5LNGOwTM5v9r4RpQ8ZXsYodks3o31JBlzbYtNotisnm22MxiwGFXam5oN1n0TA%2FhRvshvTSDwHff4nNzRo9Dum6PaJbMXzDz%2Bx%2BFkj4L4bFNBb1asqsgH7Dyh4DvbkPtf5yMDKzEwyoaESMSNS9P9gJVA3%2FRTlwoMwZvxECFWxIPNw9gi01nOHjP32esZTtmXHnxvZd8ZtakqQ7ekajbXetpNa6ocTVxJtY%2BuSe69OLz77zh5bDR3xjZMzUz6fxrz1nqrZGcHQHfPVefN%2BfiK86LeXj%2BSc5lPKy%2Bk%2FvCUI%2FDaLFYCWHr6nbXuILTIsb5imNKY%2FrCm28fSMxPhkN1XbNMNZGuqwOBhtTSxWuTk6bw0ZaG86b1hKddePOKuBvmiguYBn4T%2FyOqOyGRBt7bKUI1GjioBC8aUKwF7Q319UgcmtFGIzCJGBqwQij0ynDsfdFGc3TS3BlNfJ25xmzniMkpXXTPvCaD3ZaZvyzjmZdudBostmhb0ORZNN2sJBeed1HXkrUsywueQH%2BL0eCPxmsa5ZpgRJSDZ11yDv%2Bjmbd86vxZfc1WcZJ3UkMq1BOOOVtvu%2F%2BpB%2Ben186d3GTwWAw2jheaJs09%2F%2BLNfZft37DALyrNj1wABMuUKbODyTVnT%2FKYbJ3Tpq8IrNh92dkxOj5P%2FYpZx4%2FycyiVcDYdn4JbEoKdQi9054iBKsygLW46FRGxAb0NPNCm8BSNCPjoKcj6EAus4SuP3rB%2BcV99%2FeTF6294dA8%2BTK6v74MHVpYNRt%2FI30e8QGTOOdfGWzzxcy%2B87a7bLjw37rHw1nPzp0KyyRSeZO%2BQQhInt3dYgvycjrPOv%2BT8s1rptaP84VeywdWX2T4ysr0%2F7TLIs6%2Bx9zib56ye1dM9e%2FXsZmePY3NDs9zlnNVt4%2BWgHJbbz3Livg4P9WWgviOMm4kCRT6I8vw0NbUUEnFvOuFKoxQW1gTsvFirsF5pb7qTUCx4i7VmtToveaDxvK9uOaedVvPRpVOnNz0Q6bry7uiSdQ8t7Vy4JQKVS%2BXPplV2ts4bvCwZu%2BKzgITtxepaPRzWdpv74muvv6RO0SorX6cu%2FdqKn%2FXWnrtp%2FZragz13DUCl5myiFW2Ycvb0PtsXnU%2Btx8pvLFbUspLX68mdegwmOif%2FNPDONajTGoUh6tU56HBJCTBASVvNUB5VIiKpc9kd7kludodSFz7xQbiOmMk5dOYk56gzL6uaf7N8a6MQOHm0ae6snZpFDfuT3%2FjdYzjzwkXXIVHoXNuCfQslQZqBZjTsoHMqrkE4jaYdgkGz2ATOgB3cPkSukD01DnV3ttb1wx%2B6arPqbkcNAHoFPzKUUQ%2BqL0k97pjbZv1I%2FegC9zTFbrrlFpNdmea%2BgIgfWW3wqkcis8ky5FAcRd1If5nNZrl2FFpungc8wpoCl1BpQV%2FScS%2BzjlASyUTVv%2FAJ46gkJI4bHX4lTnloctxPZE1ckS3%2BjG2fKIjkQFyzuo8jvYQG1OrGvJPSTu%2FnSp9PHNTl4z5hK%2F8gtXVKF6gEKiglgcKiRlCESsQCV5QIlKWKpr34lt%2FwkSx%2FJCmP5%2FcBKQfl%2F5gd%2BrOS%2F%2Bp91%2F%2BYCg5CXK2W4M9fu%2B%2F6xxX%2BvnelVuldIDCG0VQTpU9Dw4pRfei%2B6zWx0MLie0gPbyrkmRU7OwT16JGeyXLHqOLqAfVN1GPlBzWtFNzj0TRTCjogtP1NjIvu5habN5Aoa1k66wGpqriVetJgiGdwDZtKhnN0y4n9sXYnsqGmZfDSR15%2B5NLBlhoDaedEm7sxmpqRija6ZEEg2EAnTiAC8IrmFbGz1q08P9PSkjl%2F5bqzYqT9hMmptEXDgTqP3Wiye%2BsD4Wir4jCeoHbbp5hRfpB7BakUIppIlPCD30dR1GtslDz8OsqbXmejFC%2Fv8wu5X2myq7SJ8Avzv9DFUJySf5uNvq4%2BTi7W9D%2FOZrLChdwxmPNiBRqVjnpK%2FaGxRCDspVYKAW9AN1JANoo8wP4BJUlGqdgw6m1qPQ2QW3%2BOfU5%2FieLS%2FNuKpDU3uf8bcAXyBal5jMR2NEAbPAZt0K3hvxHBEDlUxfIGcD%2BN2gNSNx36nfqlAYow0puatNpRz0e4W2oahKzQHsjf2c16ad%2F3t2KTtPobnX6D8C8pd0MDP%2BKx7wnXqGGlLQcvikMErm6TmfsuxJXbSAxqNjOogJLQBLiKEHAE%2BJGTS3JoEhTrz8%2FCB%2B5YlupJ58aOat8Kv4JvregxwcU5Cp8GFAFm1FyOfto6GS2m1NGTS6CPNKkbsTdCBlnN9onMho55BX8IJZtEQ35lk%2BhtwN5A0V3RCPoD%2FyXAcv6pAtbZczRUA64JmcUf4q7Q89ZHLeJVZ5D1Ps%2Ft%2B0iCT3AHVtZC7JDCXfR7OSb%2FXja5H3zQbZL1B%2BULX1BMTEk3AseSpmnKEK4T9ekMIidUCRQFfcbj7z8gNLvzF7mbhQN8h6ZbRset%2BnQWdS%2FZX3k7WpS8P9sfo0iGS64wV516pOhjI6TZ2dApgI5%2BLhxywYoWxKUrykKJsIoDsR4mSrCTg0egMPnLW%2F3Q5Nn8BZEuzqEI7HK3n0%2BzFmuO3TtWQ5WJoG9YqCD6Gc32SxnbnVPfsxvrFXK2dILl7bLthDp6glhcsfp4bYvbSmj%2FmQ94uBTw0E73x2jbNRCvC6VL6GCFDwU7eWQDcC5FY5s0slieRDwtAbRsbLXbaXAuu14e2OJw1dc6jQ3ZdY8v7rv2%2FBWZLqvFWVvvcmwZkK9f5jS4muO9yR5res4kfkRxhV03L1RfPOiPtYi8pd7jNEsOpyTwxpaY%2FyCZu%2FAmd5Or9uS3DYaeqVOhH7gZN%2F8I%2Fwi1fEuLXvyNivibjuKvN%2B1Nc01HF%2F3h%2Bef%2FsOhox8MPd5SFucPjorQwXT%2BytA8EmA5mamHNFDVhBI5pjZbQpugBNkO8MvRub8KVDKST1Wag7D3xlin1ZF7LFP%2F79nbvCXFOY%2BPUjrT7%2FotsPXXZ4exdPzuhZuL5LUXVAn7k7PbhG89uz3b41X01gbjP1xwlu5rrvvf9%2Bpbs6E%2FVu7Nk642%2FPYRaAiUBdrmO6CDTBLPQFA1ur0uXoBR1INDMkypKpoTqnSMx5GiEdTEaSHLs0Alvu%2F19%2F5QW9Rv1U1ridT22i%2B53pzumbs%2BXFFXYC%2B%2BCGsTj5JUT%2FGCgRt3n78i2n71FHG4%2Fu6X%2B%2B9%2Braya7os3ZbDmgWfXun44e%2Bu2NZKuGZ0HiF8M4TlMPR%2BEU6rPKRJ8wOU2RFUFLex3egEsz3YqEAq0cqhAAW19dBZIlVzR61tuIdTnpXH7l%2BuXrbjPUyep%2B8cl6aXKWhPHpDcXl9KiTWDNr4mBQc8Tq%2BNzK%2FOKSbsfl79o9G20R%2BbrBXYvUg0rLHhtrc4TN81TTOWSZ0gL1ZVlOYH2ery%2F7XVUjFMbzYpg7UswcqJPQwBd0LKLabJ8IaCr2otcjSkIrGwootKECaUd4XH1%2BSdazRrfddkBU98t1htvWrbjqSqjaCguxrffM%2F5zDCpBALUycmajhd%2BR6ww4SWafuZ5eU%2BtPid4lgd3gt%2Bb%2FY9rQoZNmiXYPXyRHbRs8zX%2Ff4WIFjWZJtUdSD55AP3xtXH%2BZipC0EqdBGDA4CoYEU6gRLGPU11QhkLTBiEYPiqOeQgwTCl9aok1Qr5pFf71qEeNxjy%2F8F0GoqYPv75Yh9j3x4DuJ%2BuEzHRpAq2lMqb%2BqfTdiq6kGtzfOWsv0c7lSeMXDHBDe1MT%2BLUgx0Pg%2Fp87u2UicdIvqQi8DkxhcUwUXCedMpb4NQjwY3npTmgsURJavLwCRyEcN2HfWsDVGfv%2Fu9ZUWUx%2BPYFueUKwaNvbtu%2BXps3eVWbN1GcgVrdMnWJ7WmJz9SD66EBidag0NF1Ukep0t5A7sFCWdhzvYwHv6L%2FBehXuHqfaBwBEU7hfVLcXvS4VQv%2BT%2FvaSIl7cbeMc7ekv9i8S3e1L5xxpvMGcu1EYPbKyCiijjGXcDKckm43PqU2qNWlXusZMiqF82cuVzolUHN9NNR0HZPxFPV9V0wLtvq%2Bk4DqOwVWDlzuQLVdqFiP08cRX7aRlBVfR8cb55bWe5LExnlcsDp1vAP8Q9BucPMk1Ulh4GnN0SAdxcNHv3q9ohx1Ati4S%2FtkWjIDe3hQdkUGrGRaFBiUdiTSkI41UkMuuQHP%2BEaSQYlPQTFWJF03BNPpTu5KFAdkWgDukzsZKMG0Q1TAQQglScOaP%2FdsZ8%2BfP75D%2F9Uu5Gs3FY%2F2SxPld0DHOciXI9gqjcEidXjE%2B3BLosy0OcX3T7O5g65ROGyzQ2BZs7WbZVnO5ydLe32hMwTQ4wnnKXW6XW5LAa7oaXOIHoUl0FgLQLH2by8wSTWeAx2Y5PDazK3BqZbeJZwXGPaYhX87ZNszoDdaRxotXO1nNlpdvAPFWHDm8PqEE0sZxDEqGzxisFNnuCWetPcGrObN0p23tTZwMuRVodSV8%2BLTrOV3eRvzjQZiSjaLYS1WEJe0kNsJlZu9LFun7%2B%2BwW4gRDRbaxw2nrOGm%2BxOj9cmtbp9ZqeTM1m8UXfQQCSTVSQox6pvtjot%2FFpHvIUjJovFEoYvHYV9C5Y%2FxN9OfcalvII37UEhTbTg%2FAQIaPb4Vz6j5u8%2FaViycMod%2FfkDcpu8QZbZoeBi%2FvbzP3XPsZvOubMtaPHkD9jt6%2BU2O7vqU%2F9C9SMvgrXpQNG%2FE0oJxun%2BCiElUa0IKQSUwERxOntKSV7ekcuh9VBZBBo3VUcB58ofKBHCwLyf9qFosz9Ibf8dGqwaBMjRig4SGOZ2UkWI7UiO9OfUPdxOYFApUZyfpY7mgEc5rtNGGk2H1lPhAk1Hp%2FVAMqQEHEUfEYkkUQq1JMdzsX7kklRrTrUi1wMcDjmu1YYfATj7Y%2BpGpPEBXuoQIj8rR9mgCl4C9yqmF7xnVWxGVniNqtpVmXBvQ6iwni5YQ8a1jYrXtc2J13HvgkvqWxuva1sbr%2BP2S5ceKGyBwDv2DbrToe1u6BkAJV7xnVLUaq0sJB8pFqcUIPi3yuwxi4JuLr%2BP30f3OkPQ72aO0xYo3%2FEsmO3QO5qEF8S0qQH0UsKXv0brnl9%2B8M7jF174%2BDsfvPOl1au%2FRL5%2F9DsbNnwHL2pHR1NTRxMZhJtHktOOxLxErPF6YlLvpC9YP73x%2B4ofw%2B3xVdrHcDE0dQQCmCRgvt9b35xINDf1CDcRSfJ%2BpYl%2BSf8YcurfmXP5F%2Fkj6J82jNsrkWiEuhVlgFfyNkB3S5MUzLhoNiwSCYcxQ7Ui4J0Xh7fmqRbaPa1tzujxkBRlsEHy0%2FOM4pYLPb7g9O6BQJN6l9zQ0OGyCaZz0vMTbHOzXfQ7a2tsterTcqxeInODoemdktw%2B1SbVhKwtW9ffe8VKadK0OVuC3bWzyKm5LeddsWTeorWyY9IMtUFutdu5g%2BRn533qkocdvLs2HmhU75br%2FMmWtD8zA3OP2t1ea636jEzqYxJZGAwFiDEd61oTsrRuW3%2F3pYNi3bS%2BRd%2BGjOfVpAPNd6y64Gsz1GaZleWIPoYL%2Fv9mTeQBENVEguiF1aC4YeXxFETw6QyPfn0m9g8IrMFAvKM1EI11DARnbqibHk%2FIojy5rSdgCyZi06y8sS024PeuO4MfwQ5Y9yKRZCqyYaF30vzeHlmUprR21tR0t0yz8KZY66zWuGvxVQB%2F36kP%2BK38t2Hu6NQ9SFJfw0AdpqPEK2qTMpf2VCqJwqPoJezTL824b8akoL%2Bx03nhh%2BoNo5e77psxg9Q5LzebIKD%2BfsY34f2MtB9fk9v5b8PT6tYrgv4kRPwd0q9z3gdJSJ0653KjCYPwCaR5aUY63eW48O%2Fkdo33yxX9wCiMv2QTrk8eGSI6Ag6moG9t2P%2FF7GRNlDjl0gw7pJ5aOXXqyqn8SENnXBmbSwUYLyqJjv3UmY1nKr4t80no0faXsaIEiF%2FBRaIBnItSce4OUif7W6Vm9T9H1X9Vj71BEm%2BRdmIJQST%2FZfVdudUvh9S%2FqqNvqT98g9SQ3lHibZY0mRVHooyDN%2FFHmTgzjdozKw28NwQ0hwN6BCoPKaEk3YtKwNhwRLXuk076CGoZNXDQcRwZvreTZY9EZi%2Bd0s4%2Bztv8iei04JQl6ZbDD2eHV7X4uHuFVfPrOmcs6m6Kr7hssr%2B1VZFcEZ%2FPdJkn1hOs8SXS%2FNFFgqt94PIZzZ3tdaL6Q5vo6piSzdy737pwsX1VyxUrF15iJ4uNkq%2Brbyg1Z%2BO8VsNC1UmcvORPRfxtPrfRwL2p%2FoA1eZp6Z%2FaGffoewaXcA%2FxBlKlQLfhQL%2FoPgBGP3qsA7IQS8qDVNswHKRSheDUvA3Q7MZoRcJMxlEygujn1QdyzfPfq3dEp%2FbXh5e5YXW2Ngfvza0ZF6UgFL%2FE0fTq4LBlvTE2qb%2FKuuzYSXVnjTfM1osvqMHVbm9950quIZlbqaL6YP7jk3kUtA0GnX2nvq53f3WoSsvEdDRnULgo2fN7lNZJgI8%2FVWi33c3bBZnGY05%2Bdm%2B3qc7fNmj4YGKLj2nfqFP%2Bg7jdDlxEV5XsJQZP6hYrS1l0VQr4c69Xueixp90gnZPmE5OF22j%2BSYEWHlZ0K%2FHgsh%2FZtsbh6h2DNRlvv6jJh9XaJaHCZDiUDKNTMkvb8vsqCyf3ZNdSmO0fa0Y4baJTtpbKzuVzeeSI7fCKr2Z0WypapnXJ4gnoWy3PoUIlIQ1TXdqhQJIXp9Wx5fYdpeWh2TY5D%2BYVyKd0jw3iumwi%2FBC3cEy4o83QlZnW79MrCgCjbhWXBlRZVVZZv4rIKpXC01HFlHdHLoeWVl6UVc%2FJ5uGm6CViW5mulYMk%2BHqNYr0AyUPivLg2oMs2MPqtuhHyRyiwvNJej1Br%2BfcLyoAyu8D9B7bgmzUqfFobF5nKnK4%2Bt8MPJkI%2FxHUNWk117jugWF%2BxazTAALQn6%2BUE9lhoI5ApGA%2FiuJOsrlNP28SVVuBVajXmircLel46w2bJS1Q0Ft0KDuikDFL%2F3pYrid1Q4FvofwRIo4R9h2ftSwc6jHAMqLcCql8YPHtlzGoByNXYN6v8hXnRaOhUvx0sVLCexwupGDR4NOYC7PePa5keIPACnuAdD7dEadRuTIiS6Lb7uskb381My5yjzF8lGCjBRqdwrWJCagfB3yCy7XT1i92hbcZ5Ci1FJkgYMDf6n%2BjspIsHFjJrTOdzSMuOa9DbDcj%2FnH9N9bIoGVgzHPWIQuFuYtaMRaq8eCKI0gEF6lPOZjBz3EEvaaxwSUT9U%2F8JbJZPJJLBLolH1La%2FRbF9AbC8JJjv%2FmMnssKjLRBJyqj9QXxNko0Ux%2FX79epfiXkm6fmKwF%2Fen1HLc6LxloXWKvGa5rVCVL83VuiPcDEX%2FK5pTXOxHfx6HHB0t2FI0qI2rCZFTrvPWU67zVuS%2FkTsLnc7IKhFg30e4FOkqNSfH5PtkmUy6Cpiv%2F36k2sbqCeCFNa%2BURpoY0sZoYmCgCr3qgZz6s8I0gP1bYiR%2BD79H56NOz0EVWCTy2%2FfffvSCCx59W7uRV9995eqrX8GLesOXNm360iZ%2BT%2FEl3uZqL%2BFyzSZ8XxpTiI%2FG0nkT4zznFZ0t4ipMz5v4q9ssqbdKUZt6u82knPCrt6PZwsnn0XySVnyPR1ZXAn72yx48bWJsu7apnI3Hy8bygUK5Js32qcytapqgmn95uexccj205vGgJ%2BeuOeG2SORmKZr%2FqKzcx9SFctMJdwMUFZDJITs7dnOp1EKZCxg304Cevyfya%2BvlKqv6aXK1qIj3imL%2BL6hL%2ByvUlFfE0VKZ7E8gBY3M%2F8VoJCFgizH1W6VyC76nH6b7jiibYVxUmVIEspry%2FLgZIlCeP11Z4zs%2FAwvVwtGFEut5S1JY4lfyT0N%2FevOLo%2BrUEgjcqc9IkGpQbv3iW7Co5b%2BKgjvpzYdH85PLcc4X21ouwEGl%2FS4qnUAvoSlXUUhR1eKr2VWFTB%2BGMl6FsiQsVD1R3urlAAIoSn7JQkmiVVCHSpCwDH%2FqPepXQ0Db77CJOAImohB%2BRPWr31ev5g%2FkE%2BzTa4lbvZo8xdWPffQu9yJTPCNB66s%2BzXoJt%2F0L6hSoCuBIoK8fnBGG87OoRckJpLqyWe4YbpGi50g0%2B3I3UD85Oa0fzubfoXxPLbW3FDWzigmyJeM0tQkax7PqTy80%2BUxfUHPlBZIRVNQ%2Bv0xRm8REKPoLmNr0%2BUo48v9GFbXPKylqQ2IKm00QddgyWGMROCTxdLB9nCY8P7j2DjlsV%2F%2Bmfr0C0r%2FNkeXbbpPlOTBBwT0mVz1zx9S%2FwJecBF9Wgv3p032iP2v4VSgfgW2G%2BHUEdEXU6iq4CtpLJfIN9XQG8dwa1VoO8XC2SrPDDyCOQptXgbcPvlAgBfxBoGwftQKeKFrNTASPt3pGGqDt%2FQRasn2kri%2BH6L80MJRsmVYJrAKyDItpJUy3%2F15WYIJqcJ9Q5N%2FLFJ4c3dc1URpWl9hW6mu50MUIelg4ucTPf15zs5DFo1c0VSp1tKB9jkwIyuM45kb%2BIP8gHed%2B6jO3v0KbIknzLy636E8KPTdCuUpB0wLo9JKnAO6pv0vS31EtBha%2FfJemkgLVVnd8KCk4qBTpQ5m7FbifBKrPJcq0pZAFVG%2FXbOFz%2BTcq2MLrcmV28Nmi%2FOHskh82bau0k8eWCaPijQPWQ5lUvslwVCfHkXBMIehqUgtDNLeauH1huvZTbYmw%2BluPjyWoNGEuxRLR7LK5fSyXFUyK7PURQv2v8D3XOt2NJ6liBbmPGOsakw1kbeOs%2B31Wm5qpH%2BiJWSzqdPr2O7zc2TmtnrzCig6bBd%2FvgQmzOlz0STWIlmZEQfupogOZFHUZ7EkUnMn0RrpIMqAgHRJAOjIJ3yGw1I%2FMAp9q9S3Q%2FclADNm1wEeO%2Bxbwg5OIYHZLY3ehG5lJk2xhco%2B6JWybpEVz2wrR6hZyD0QXZbeDVB%2BonmlimpkWprdAs4WEZDSQppsDlcdCBJJESIYFuAtUnC4GIF2C3Uu2Kv7L1bdz6FxtqxpG4TqQOqOUNAJ2HLvPWA2GgDy4O4vaDrtyl6P%2B1fAll%2BSyFcQ28GHqh7fvvf37udylf0fNwhzgz87Y%2Bcf5x9GnF6ygHu18sAbipWeF0YPBgp2GaKeQduxxdEr3SgbH1kvH7tvqSLhedomOvZyts2dw8acu3dY%2Ff%2BucuMtCuP%2Fe4zC4XnH3OLZ8ZuxTWxy8dJfU5dhDeKPSlJy5pn%2F%2B7u3XrJhmr9C5CuleGflGQocKnlAUaRKp0BAHV0ZwUt9VCqk6zYOgRIuMfePJzdmBdpPJ7%2F6B23%2Bf%2Bsp9NMDZevovvfYHG5dGPISQq1DojqNckchVrCcCYz%2FQ0hI0m3NKDRfkgsrnamo%2Bp0CAq1FyvC3a3Nak%2Fs5VX282x9Ufy3E39VAx6o7LpCvO2wK%2Bch9jNqpJCutcIOooKnYWtDK8gTRVYygRQfwgzKM5%2BjP2jOZdx3r32Py7rQUPOzAnoRs95NvRAR0qLGU11Taqu1bUYSzMcWjMEir067JQQHfIrLBHsrgv00%2FWavd8HRLMEEYFSW3HCSNQehnrHztKqHcDyo4VfZ6gPKCR%2BgufwA8GegxUEo4A%2Bgd0BASHiH6jYMLIsUdQJTs%2FC641KN4oCHWolCMLlMfIdtWKScjx7SM5LD9HnfmhrGI0S139UWfUnxgOXdJFW%2BAMcGjKr6eHAttHF5sUoeArYKDcxMSYcKA%2FxUDhPiEOEAPafSIUFArN0r24ynI91EPARDXvIDYyvqZaWeroBOUABQA%2FE%2BDXC7PWafDLQY2oiwpUEyj4RQtVlUp1GrM7In2p2A7VuiOW6otMiGOo5Mrp05ejVuTy6dNX%2Fk%2F7mybZQ0nUmfrbx3U4KueDnlHm5wdh8FFeKnoaKKh%2FTK18StOPhwG9Xo5mqXAxvw%2F79YQwwDR%2BnAKQQ4izVXioB84qcppWB7IqjU45z4CE17OvF1Dw%2BoTFqxtz8dxwtogBnF9MjIl%2Fin%2BK8s3hM9laIn0TiCbTAXL0T798bPXqx36p3chrv0O%2BGC9Xaj48Ecv8U8UEeBvUEsDlTepiU5OvlpeNGvpnKF0RvUooWhIjnx6GeBapXCQYTw9DNg6%2FOC3gZjp76oNTj9Kz6Jqobxb9NDqc08vcKReOpcsQV2K8InXFaXW3aI6Ofr1k48rp7CX7rx%2Bv1UKPsfvzQU0Kc83i2VdILmd2%2FyX55zT9luN2%2BCu4nKfwPcK%2FCvDVU%2BpHh8%2BLaldIf1fA5h3ndT6Fln9%2FW%2F9Ce1vndfvJtnPVO2xhm3qbafHVCN1X363UXHq9xuVD8OSD29Z8pZ5cZrern9cAdGW%2Fuib%2Fud%2BVK0L9a42r6C90kL8KzxwLQw9NkIQJL0ASU8M%2BVG0KsUdgdvpgP%2F6NqqP0%2FgHZFUfGEijZLHpiIgvV5%2FBltrj8Qd7XQd5p4P%2B7tJo30NMO6VGBwahSPMYiaaBYoLY6uEnciyhhh1Z%2FvvacG%2Frjpsvnpzs0B1Id6fmX8119l88XnOxe%2FuGrzzHcdu7UtY3%2B2vmXN5zUyj3ZcPl8p1sZSs6%2FnGXtwrV7Ka0XZdz83fwjjINpZWYw85lL8BRK4nGyIir2RiOsEyipuEcIakpGjWgBjLiHWOgj0Yi34gW1kKPxHt2Na5q%2Blwg1RdRSpFDNzosb44YJXnAfoEOpZW%2F%2F6u1lhYA6leevezbI26zNHO811M2dc5HFxpk4i1jPC0s21%2FBWW5DnPQbn2X1WK43%2FaM2n18DfSoybbNHijFpamzXI31eRibGUOxSu%2FlT96YZlq1Yt20DaSBuG6knw2eusHs5EPBfNmVvHKdaQzcDfz9ZsXmLDWGXy2U5OsYSsIn8CS12jQIyD12KKqZrLPy7mSPdICmd6WGHG8NDZkkHuE4h9TU8FpmUO%2FVjC%2FEinToFyoNDz2p9XD6g78WgQdPG7Z3R0T%2FZ5dTM9lsL8Ktek7szl2L%2BgQwGgwkZHc2g5Su7NvVqwGy2Ua4KSXUwt1X4PaM5paaEu6jQ5zVFyNabxvUksVt2T%2F4VeamYPlLtffdQsk%2B2sUTY%2FzDXl%2F05W53%2FBz9UK3p7LjapZ2ZxOm%2BUlZXrL3HHGqO8%2BwVroDaCTTnTxitMxmiAAYQzVJQH%2Bnj3oIHnPaN6Zq6sNSLjBl8tKgVr2mj%2F9CWi9dnKca8rBQBsd5R1tzVlgrl5pbnPw6kZclCr2CHxMnHohLz%2B3KRQokzALyeIKFU1TNCiayJdoHvDYe7K6mZLm8S3uJ9dojuaJ62%2FqN%2FtjQxnSnhnKPw%2BLNrLi8ZKyJ3x1YhiI1aNAtP6NzCGzYv3DmaGh%2FLvQZnt0evgIhTFV0kE%2FPYxAnOHhCQUZdCWY5JWJwMzlAGl1mpNbDU7yyGnhRMILsYhH3VRAijrPcBU8%2FCj1Y9NY6cnGVW0CjTLaz7E3epvaT%2FLtTV72Rs%2B0WVVmd0dz%2FMGTI5F0OsIviaqDlbbO5X6xT3PeXbXHRtf%2Fz%2Bfdka%2BeKPr8KF7IF4vBsT9MFPuPJMBTBMq9hQxXelQ%2Bbewnf18ap4Ib%2BmSMrtDU5zqlD8QANa5MBGh%2FOwOvSDfcV2d66mfEWsbGWmIz6nsyZDWQSmqmxDneYyvjHPmRXHZxeueyRGLZzvRioKnGto9nIPkibAJA16adcOZRQr1iAP3bUyBR7T4RgAWTKxhkCYFwshq%2B7iV9r0whk50cmRcTg4fy5x4OmmNkHndIA2%2BYuMbmE9dwGYB4KFTsvnDE6Ah47r%2FfE3AYI%2BoXADpkdlENcZ8OZEEf8FFGZNxMs6ZLpG3SUFLL7Q2kcFU%2FA%2FJsw%2BvWDa%2F7emewLaoeibaF1B9qUNnuqWK3%2BUfXYVL1v%2FomD15xxeDkPnXTOKSVcCbDGtOu0YQNpGAP7U1HU58UrqGu8xIbHtkQ3LVhb7Dx46ET3Ffcm1q0YcOizNmf3bC3VjWfAcpSv3MyTlgJ23FHQgmgvk%2Bgk8pL0mcCDOn08MDAQlf%2B%2FSlTZ1z12fnqntOhbOTL9%2FZdevbAPN%2Byby1f%2FuUtC%2Fixm8ZBo59LTXEW060hGrTDplNprWd58fwB%2Fb%2FE27BdS%2Fs7U%2BrGVCeQ46nzaw9QccnmZerGZZs3Yw9aVHt%2BKh6HN4ti6lxIhT%2FwahnZtWwzlY9QHQ2c79C%2BdxzvVDKy8GqKWQERO9YAKbpsDUTLdWV5dE8PVPjvj9pqw7ah%2FPFVtkit7aj6G5xY9mfJrCz1j1e0BcnPol4UjtrCdbahIVtd2HaURujnFJR8CuOuUUfhrGhgKKgjCYNSvCc1WKlEp8wHUaAYynFNyzZn%2B2MnYv36dbMDBTonl%2FT%2Fma5IKAyEGz%2B4eRnVtaX6tss2o34u8mWorFtuFgm4A6qK%2Fyp%2FgLEBVat5WnPDdKA574ubuFJ%2FIUfZ%2FY2Nt6mN%2BZNNTSTaeI56gKwkXerTe9DDHUw8%2FH35FY3nNN7GGuBKWhrV9ep%2B0k1WjNWVaHkW1yA%2BQHWNu8rtBw2a5YXuE40rs7%2FGA%2Bj09V3hA98yRnFPOGr8ltGlsFdD%2F7tRce3LH6Trcneuiy7K7J3khKu%2B3qUaXPWaX7T6%2FKfj9BX2eZq2XAcZT79u1ClJzUtHUqfqSMWBcZS43Ena0cUGLgpkKxB1QM%2B0Fxz10wgg6r5rltnFpH05pepUq3Y2HfYqeKRntmUFNz%2BXmcOs1H31U6cC6RTVLfCg7RNBF1UF2%2FwBgu0fFQtPEU1sSg3VcNsR7dWq3af87tUFn1l3ltXpaJxpNvtcZkH2WmMst3JqRpxUH%2BWC0E1qOGtP66s1MYv%2BVLu8%2FXFXvV%2FZbunYYBeVN64ls0ur6NzpV9xzlmQwB5qC4Tq70WC0tk8dWJXeHvkD0h9zJOM0vD86%2F1NJMaIAolctvlByferCsqOKDKceOfUu1PsmoFCamV5mCrMUOCi6V6FJosMF22AcrKJgQDVhfYh6tepp%2FlYgvnCEAbJQ1L0rOpajEmRcasMiPfxhgGoVo4rwreQpV6fUJHH2e8fa1s2c13Apl1b89a58ozdoap2sjgLN9uISl7P1DrulyeIkt0zr6JjWocoPOZsaXPb6jtqBblsgsaRre2xHi4nELm0MhG1%2Bx1SXwLpFi53b%2BaHRYo%2FIrbZtuWAKu5cSEXfybnnmUCaXGTpQr0xK2O2WWY76f%2BnAjNVf7nCZHU5XqIkTnpt6VtvsFlPXg1031g%2FVRdpkkyVpD7jnmax88QwDvg%2F66NnMRdRXTcGTmQc3cuINwN5IQqi0yzb%2BYFVHuVqI5s4ADfg5oE4ybDLd28mFSFmYvRoomsWXEdLU2Wl3GJy93ZNb%2Fd5gqmNaqJZSO1l6PVRy0nZIj%2F45EetjLguh1rLqR%2BSK0hO6NrsqcNX8zoUdjQYDJ7tb4os6%2Bi%2BY0qpY2AWlnLRDWdGFTfGY1gV0zNAtJ7pdo24se0D88AwLY%2FgZmE9iuP4V5v7CSR%2FRThaHLh%2BUeBkXwU6BC7lGOevK65udTv%2BtS%2FPfW7qj3ljTcj3b9OkbV85t8xsMj7Ddj7DGpthZKwKPvso%2Fc%2F1K9aLE12fMWLV1y1D9ua8lyJdWXr%2FbG%2BnoCFutf%2FmLILe39ITUV4igr3876fpX5g2zeB52sWnIL4fXHlgeUzOx5QfIvJQyrKQE9wHUqVq%2BPEaOrz0wVvNbJZVSfsuMzxN4l9PkedFzw9V5Dj%2BnzpgoT4ZxCxJfC5RWLc74YVHxKlExCYt0JAOMatREhHBSCAtSfod6x6Ls8HCWECLwXZ9nd5Dz1T24JUdWs6fU3%2B%2BfcnT49Qe%2BkBs%2BwdsMZgPXMp3U5S958snPP%2FEE7bvkOPCuTUDTUQ%2FUzirLhML9yPahoe1D5Fj5jWsaoveyP00PehdUAHk%2FseDVWsvDWXXXsyn%2F4wfpXc2V3%2FQxli3jl%2F5hj%2F83avSCfpTNxOEKLmTjxOEKuxgNlsQn0xgct724mhynupNW1Ph6o3RYS3%2F%2B2TJrzLlkFz%2Bip3qCHKf6eqW02QJLjBYuuj4sobhCWqa%2FYHGEHpcnumuWSOhxeaL7sOakNR6vvmo%2BYcfFA8UFXEPZf9UjyudIOyNwx%2Fi90DdsujS%2FFX2UAwvWSVK4NxaMhAGw3oowp%2Fuc8CTi7D2rBgZWwb%2F60faR7SPsEbjkXy4G0XaqhXPwe2cePjxjxuHD6ssQuR1fq6PF0E%2Bo2t1nePTn8TUmxz%2FA3crMoCc7egESuoTHYc7mYdg6etORoOhR7BBGD%2BqJopELrl4S6cJNRtEAsLP%2FOdvnJq0Wo0GolY2Et9VFB2Kf%2B4bZvVyxfOMz3WdFfSIryj6DwWghre7aQbdiDrkTL3A3vNDuDpk93HqXwam%2BbWmUJZfNn5ozKV5Pmmq8PF%2FjVY%2B2Tlk2M2RzSXKjmbQ4RZcQavEYrN%2F9rlXwtIQqzxQNMzPPfHYLvuPoO9TbT8bpGw5CQPGd%2BSyX%2FCyf0Vxjd2R9NmsunnXYa8xGHzn%2BsSfM5J0y0DZEXWWxkXjcR75KBLNLHi7XvX2G8VOrf4Ykg0AMdBESIpo7MgAfyakA6rkqpI6UjNs0px7cMV%2BD5BF49Tez1VGnYmq0WIijp985m4Sn2gJR9b07riPPFo97OYbUZbxJCpot7H%2FlpZBicglCPN7WOfJkcHqc3ElWqvvz%2F1E6bIQrG%2Btz6WkM1SM9FBTR7FSs8KyBBytSmNEoquJNFN5EQyTiCrnKDx1h58yxCepPHU5nxGoxEQeeOZi2m80DxNxncVhr6BmEfUarxejw%2BWSiHhWk19bSY7aKR5MsteblJpfTLtjimBouXsm3d3djjYM%2BwEW0El9dM%2FueVRWIsXwe43R7SgbVZqrnqoJ1X%2FkuF7pcgf8duv4q6vayV5U9zMV91GxO59UUjW8rHV6u799WzKMT7umRCXbYUKM%2BfoaCcwgaoqZUtmodV3p%2BX7akb4dnU9B9La38RPFUG2SCC90tVA4XwEFhyOpZZrUCsgWYHsczLFBBVGNtstoN1bw0Z%2BO4fYIbvZVt4EUcJEKOhHeincWqONw%2Bq6w5Go%2BWGOSR7LhKV%2BKBqbBPpfUvOf9QqkpDyVhBeyyZQGMsdA5FBUqvFMtUyGq9vjnsAJU4UcrxldP1CCaofyDkSAifoP5QwWx%2BSyUGxp75BzGAvtG7uQ38LehlyEQMeh0TeE6Bm7tYdXqdkt0uOb3kfYlNwmOdDyacOq%2FqlFo1v%2BPTmTi3E%2FglC9W11b34A22zmLzvb231Q0L2Bgg60OTW4YdstO%2BYOJnO38TtpH7zy9ymokWyA79qlVSn38HtpFlImFnhu3b4boNWXklOXV0Iwo7lQ1hrZyPFcwtjwFP7iEKSHSSJw509kh8kj6pr%2BH1jR7km9vcvqN9657vffefkv%2BfKxge1X%2B7RdjYUPIESN7gTvRkB%2FRMYtEkaVkdHApmdBPpnKmz0n1xSWFOyVIuLrinZwpoCRe6kyiVZoHX088F%2BUX4%2BWKS4iBTP0IWxGtZgOdMaV4KTayqHQF%2FVihBwTbgDXTCmKoOBJeNhwJMzEVjtjIFLuU38fPR7hqNG1JS7g%2FqRCuy3vmQ3W9Vu8qbVbP%2BSzazGRJH83MzP90Ck2m31mMjP8TiLn5uwD2Ugr2PFvPQjB5BnSJvQxGQZZEB%2BLopqzGzDbMmbkAPkZVJjeO5FzOSBKCgJze2ZS4Gemc9twrwY6u9H61iUQTcRvtdT9RW3tRxAWwFs2tcuJRnI6xjmBdWjbgFNRHMHiF1uHYBfUR%2Fut5Ug2jXAaT96%2B9RH%2FFToRwIzGbKmVJ1AZQnoabSB1yyIg7ByAridHApPMjyw0OiV6RjSbCuzwLAvFizBliWJua1tsuAgvNPbmljYbpt8lkWam7b3XZiOiKJskMOtmfScnsbPW208knwjuXrXK4Q1iKIgNyYXXDVT9C2Ye%2F78GQ5BEEXfFdde2RwauOysdJNL5AzCy84ard%2FnGAVN8alecnFdgu5Gbd5DJTL%2BhHZK0vApVy3OfU8XTSJg1TlssivsPYUlIqvn66PzrVTymCc4wgF6SDNR0pDf%2B9Gp%2BVnsUH5WtpHYsuhOaey8zdwLN47V8MTbm78g687%2BP3cx6tcAeNpjYGRgYGBk8s0%2FzBIfz2%2FzlUGeZQNQhOFCWfF0GP0%2F8P8c1jusIkAuBwMTSBQAYwQM6HjaY2BkYGAV%2Bd8KJgP%2FXWG9wwAUQQGLAYqPBl942n1TvUoDQRCe1VM8kWARjNrZGIurBAsRBIuA2vkAFsJiKTYW4guIjT5ARMgTxCLoA1hcb5OgDyGHrY7f7M65e8fpLF%2B%2B2W%2FnZ2eTmGfaIJi5I0qGDlZZcD51QzTTJirZPAI9JIwVA%2BwT8L5nOdMaV0AuMJ%2BicRHq8of6LSD18fzq8ds7xjpwBnQiSI9V5QVl6NwPvgM15NXn%2FAtWZyj3W0HjEXitOc%2FdIdbetPdFTZ%2BP6t%2BX7xU0%2Fk6GJtOe1%2FB3arN0%2Fpmz1J4UZc%2BD6ExwjD7vioeGd5HvhvU%2BR%2BDZcGZ6YBPNfAi0G97iBPwFXqph2cW8%2BD7kjMfwtinHb6kLb6Wygk3cZytSEoptGrlScdHtLPeri1JKueACMZfU1ViJG1Sq5E43dIt7SZZFl1zuRhb%2FGOs44xFVDbrJzB5tYs35OmaXTrEmkv0DajnMWQB42mNgYNCCwk0MLxheMPrhgUuY2JiUmOqY2pjWMD1hdmPOY%2B5hPsLCwWLEksSyiOUOawzrLrYiti%2FsCuxJ7Kc45DiSOPZxmnG2cG7jvMelweXDNYXrEbcBdxf3KR4OngheLd443g18fHwZfFv4NfiX8T8TEBIIEZggsEpQS7BMcJsQl5CFUI3QAWEp4RLhCyJaIldEbURXiJ4RYxEzE0sQ2yD2TzxIfJkEk4SeRJbENIkNEg8k%2FklqSGZITpE8InlL8p2UmVSG1A6pb9Jx0ltkjGSmyDySlZF1kc2RnSK7R%2FaZnJ5cmdwB%2BST5SwpuCvsUjRTLFHcoOShNU9qhzKespGyhXKV8SPmBCpOKgUqcyjSVR6omqgmqe9RE1OrUnqkHqO9R%2F6FholGgsUZzgeYZLTUtL60WbS7tKh0OnQydXTpvdGV0O3S%2F6Gnopekt0ruhz6fvpl%2Bnv0n%2Fh4GdQYvBJUMhwwTDdYYvjFSM4oxmGd0zVjK2M84w3mYiYZJgssLkkqmO6TzTF2Z2ZjVmd8ylzP3MJ5lfsRCwcLJoszhhyWXpZdlhecZKxirHapbVPesF1ndsJGwCbBbZ%2FLA1sn1jZ2XXY3fFXsM%2Bz36V%2FS8HD4cGh2OOTI51ThJOK5zeOUs4OzmXOS9wPuUi4JLgss7lm2uU6zY3NrcSty1u39zN3Mvct7l%2F8xDzMPLw88jyaPM44ynkaeEZ59niucqLyUvPKwgAn3OqOQAAAQAAARcApwARAAAAAAACAAAAAQABAAAAQAAuAAAAAHjarZK9TgJBEMf%2Fd6CRaAyRhMLqCgsbL4ciglTGRPEjSiSKlnLycXJ86CEniU%2FhM9jYWPgIFkYfwd6nsDD%2Bd1mBIIUx3mZnfzs3MzszuwDCeIYG8UUwQxmAFgxxPeeuyxrmcaNYxzTuFAewi0fFQSTxqXgM11pC8TgS2oPiCUS1d8Uh8ofiSczpYcVT5LjiCPlY8Qui%2BncOr7D02y6%2FBTCrP%2Fm%2Bb5bdTrPi2I26Z9qNGtbRQBMdXMJBGRW0YOCecxEWYoiTCvxrYBunqHPdoX2bLOyrMKlZg8thDETw5K7Itci1TXlGy0124QRZZLDFU%2FexhxztMozlosTpMH6ZPge0L%2BOKGnFKjJ4WRwppHPL0PP3SI2P9jLQwFOu3GRhDfkeyDo%2F%2FG7IHgzllZQxLdquvrdCyBVvat3seJlYo06gxapUxhU2JWnFygR03sSxnEkvcpf5Y5eibGq315TDp7fKWm8zbUVl71Aqq%2FZtNnlkWmLnQtno9ycvXYbA6W2pF3aKfCayyC0Ja7Fr%2FPW70%2FHO4YM0OKxFvzf0C1MyPjwAAeNpt1VWUU2cYRuHsgxenQt1d8%2F3JOUnqAyR1d%2FcCLQVKO22pu7tQd3d3d3d3d3cXmGzumrWy3pWLs%2FNdPDMpZaWu1783l1Lpf14MnfzO6FbqVupfGkD30iR60JNe9KYP09CXfvRnAAMZxGCGMG3pW6ZjemZgKDMyEzMzC7MyG7MzB3MyF3MzD%2FMyH%2FOzAAuyEAuzCIuyGIuzBGWCRIUqOQU16jRYkqVYmmVYluVYng6GMZwRNGmxAiuyEiuzCquyGquzBmuyFmuzDuuyHuuzARuyERuzCZuyGZuzBVuyFVuzDduyHdszklGMZgd2ZAw7MZZxjGdnJrALu9LJbuzOHkxkT%2FZib%2FZhX%2FZjfw7gQA7iYA7hUA7jcI7gSI7iaI7hWI7jeE7gRE7iZE5hEqdyGqdzBmdyFmdzDudyHudzARdyERdzCZdyGZdzBVdyFVdzDddyHddzAzdyEzdzC7dyG7dzB3dyF3dzD%2FdyH%2FfzAA%2FyEA%2FzCI%2FyGI%2FzBE%2FyFE%2FzDM%2FyHM%2FzAi%2FyEi%2FzCq%2FyGq%2FzBm%2FyFm%2FzDu%2FyHu%2FzAR%2FyER%2FzCZ%2FyGZ%2FzBV%2FyFV%2FzDd%2FyHd%2FzAz%2FyEz%2FzC7%2FyG7%2FzB3%2FyF3%2FzD%2F9mpYwsy7pl3bMeWc%2BsV9Y765NNk%2FXN%2BmX9swHZwGxQNjgb0nPkmInjR0V7Uq%2FOsaPL5Y7ylE3l8tQNN7kVt%2BrmbuHW3LrbcDvam1rtzVvdm50TxrU%2FDBvRtZUY1rV5a3jXFn550Wo%2FXDNWK3dFmh7X9LimxzU9qulRTY9qelTTo5rlKLt2wk7YiaprL%2ByFvbAX9pK9ZC%2FZS%2FaSvWQv2Uv2kr1kr2KvYq9ir2KvYq9ir2KvYq9ir2Kvaq9qr2qvaq9qr2qvaq9qr2qvai%2B3l9vL7eX2cnu5vdxebi%2B3l9sr7BV2CjuFncJOYaewU9gp7NTs1LyrZq9mr2avZq9mr2avZq9mr26vbq9ur26vbq9ur26vbq9ur26vYa9hr2GvYa9hr2GvYa%2FR7oXuQ%2Feh%2B2j%2FUU7e3C3cqc%2FV3fYdof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D92H7kP3ofvQfeg%2BdB%2B6D92H7kP3ofvQfRT29B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6j6nuG3Ya7U5q%2F0hN3nCTW3Grbu4Wrs%2FrP%2Bk%2F6T%2FpP%2Bk%2F6T%2FpP%2Bk%2B6T7pPek86TzpPOk86TzpOuk66TrpOuk66TrpOlWmPu%2F36zrpOuk66TrpOuk66TrpOvl%2FPek76TvpO%2Bk76TvpO%2Bk76TvpO%2Bk76TvpO7V9t%2BqtVs%2FOaOURU6bo6PgPt6rZbwAAAAABVFDDFwAA%29%20format%28%27woff%27%29%2Curl%28data%3Aapplication%2Ffont%2Dsfnt%3Bbase64%2CAAEAAAAPAIAAAwBwRkZUTW0ql9wAAAD8AAAAHEdERUYBRAAEAAABGAAAACBPUy8yZ7lriQAAATgAAABgY21hcNqt44EAAAGYAAAGcmN2dCAAKAL4AAAIDAAAAARnYXNw%2F%2F8AAwAACBAAAAAIZ2x5Zn1dwm8AAAgYAACUpGhlYWQFTS%2FYAACcvAAAADZoaGVhCkQEEQAAnPQAAAAkaG10eNLHIGAAAJ0YAAADdGxvY2Fv%2B5XOAACgjAAAAjBtYXhwAWoA2AAAorwAAAAgbmFtZbMsoJsAAKLcAAADonBvc3S6o%2BU1AACmgAAACtF3ZWJmwxhUUAAAsVQAAAAGAAAAAQAAAADMPaLPAAAAANB2gXUAAAAA0HZzlwABAAAADgAAABgAAAAAAAIAAQABARYAAQAEAAAAAgAAAAMEiwGQAAUABAMMAtAAAABaAwwC0AAAAaQAMgK4AAAAAAUAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAFVLV04AQAAg%2F%2F8DwP8QAAAFFAB7AAAAAQAAAAAAAAAAAAAAIAABAAAABQAAAAMAAAAsAAAACgAAAdwAAQAAAAAEaAADAAEAAAAsAAMACgAAAdwABAGwAAAAaABAAAUAKAAgACsAoAClIAogLyBfIKwgvSISIxsl%2FCYBJvonCScP4APgCeAZ4CngOeBJ4FngYOBp4HngieCX4QnhGeEp4TnhRuFJ4VnhaeF54YnhleGZ4gbiCeIW4hniIeIn4jniSeJZ4mD4%2F%2F%2F%2FAAAAIAAqAKAApSAAIC8gXyCsIL0iEiMbJfwmASb6JwknD%2BAB4AXgEOAg4DDgQOBQ4GDgYuBw4IDgkOEB4RDhIOEw4UDhSOFQ4WDhcOGA4ZDhl%2BIA4gniEOIY4iHiI%2BIw4kDiUOJg%2BP%2F%2F%2F%2F%2Fj%2F9r%2FZv9i4Ajf5N%2B132nfWd4F3P3aHdoZ2SHZE9kOIB0gHCAWIBAgCiAEH%2F4f%2BB%2F3H%2FEf6x%2FlH3wfdh9wH2ofZB9jH10fVx9RH0sfRR9EHt4e3B7WHtUezh7NHsUevx65HrMIFQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAACjAAAAAAAAAA1AAAAIAAAACAAAAADAAAAKgAAACsAAAAEAAAAoAAAAKAAAAAGAAAApQAAAKUAAAAHAAAgAAAAIAoAAAAIAAAgLwAAIC8AAAATAAAgXwAAIF8AAAAUAAAgrAAAIKwAAAAVAAAgvQAAIL0AAAAWAAAiEgAAIhIAAAAXAAAjGwAAIxsAAAAYAAAl%2FAAAJfwAAAAZAAAmAQAAJgEAAAAaAAAm%2BgAAJvoAAAAbAAAnCQAAJwkAAAAcAAAnDwAAJw8AAAAdAADgAQAA4AMAAAAeAADgBQAA4AkAAAAhAADgEAAA4BkAAAAmAADgIAAA4CkAAAAwAADgMAAA4DkAAAA6AADgQAAA4EkAAABEAADgUAAA4FkAAABOAADgYAAA4GAAAABYAADgYgAA4GkAAABZAADgcAAA4HkAAABhAADggAAA4IkAAABrAADgkAAA4JcAAAB1AADhAQAA4QkAAAB9AADhEAAA4RkAAACGAADhIAAA4SkAAACQAADhMAAA4TkAAACaAADhQAAA4UYAAACkAADhSAAA4UkAAACrAADhUAAA4VkAAACtAADhYAAA4WkAAAC3AADhcAAA4XkAAADBAADhgAAA4YkAAADLAADhkAAA4ZUAAADVAADhlwAA4ZkAAADbAADiAAAA4gYAAADeAADiCQAA4gkAAADlAADiEAAA4hYAAADmAADiGAAA4hkAAADtAADiIQAA4iEAAADvAADiIwAA4icAAADwAADiMAAA4jkAAAD1AADiQAAA4kkAAAD%2FAADiUAAA4lkAAAEJAADiYAAA4mAAAAETAAD4%2FwAA%2BP8AAAEUAAH1EQAB9REAAAEVAAH2qgAB9qoAAAEWAAYCCgAAAAABAAABAAAAAAAAAAAAAAAAAAAAAQACAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAL4AAAAAf%2F%2FAAIAAgAoAAABaAMgAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCxAwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIRElMxEjKAFA%2Fujw8AMg%2FOAoAtAAAQBkAGQETARMAFsAAAEyFh8BHgEdATc%2BAR8BFgYPATMyFhcWFRQGDwEOASsBFx4BDwEGJi8BFRQGBwYjIiYvAS4BPQEHDgEvASY2PwEjIiYnJjU0Nj8BPgE7AScuAT8BNhYfATU0Njc2AlgPJgsLCg%2BeBxYIagcCB57gChECBgMCAQIRCuCeBwIHaggWB54PCikiDyYLCwoPngcWCGoHAgee4AoRAgYDAgECEQrgngcCB2oIFgeeDwopBEwDAgECEQrgngcCB2oIFgeeDwopIg8mCwsKD54HFghqBwIHnuAKEQIGAwIBAhEK4J4HAgdqCBYHng8KKSIPJgsLCg%2BeBxYIagcCB57gChECBgAAAAABAAAAAARMBEwAIwAAATMyFhURITIWHQEUBiMhERQGKwEiJjURISImPQE0NjMhETQ2AcLIFR0BXhUdHRX%2Boh0VyBUd%2FqIVHR0VAV4dBEwdFf6iHRXIFR3%2BohUdHRUBXh0VyBUdAV4VHQAAAAABAHAAAARABEwARQAAATMyFgcBBgchMhYPAQ4BKwEVITIWDwEOASsBFRQGKwEiJj0BISImPwE%2BATsBNSEiJj8BPgE7ASYnASY2OwEyHwEWMj8BNgM5%2BgoFCP6UBgUBDAoGBngGGAp9ARMKBgZ4BhgKfQ8LlAsP%2Fu0KBgZ4BhgKff7tCgYGeAYYCnYFBv6UCAUK%2BhkSpAgUCKQSBEwKCP6UBgwMCKAIDGQMCKAIDK4LDw8LrgwIoAgMZAwIoAgMDAYBbAgKEqQICKQSAAABAGQABQSMBK4AOwAAATIXFhcjNC4DIyIOAwchByEGFSEHIR4EMzI%2BAzUzBgcGIyInLgEnIzczNjcjNzM%2BATc2AujycDwGtSM0QDkXEys4MjAPAXtk%2FtQGAZZk%2FtQJMDlCNBUWOUA0I64eYmunznYkQgzZZHABBdpkhhQ%2BH3UErr1oaS1LMCEPCx4uTzJkMjJkSnRCKw8PIjBKK6trdZ4wqndkLzVkV4UljQAAAgB7AAAETASwAD4ARwAAASEyHgUVHAEVFA4FKwEHITIWDwEOASsBFRQGKwEiJj0BISImPwE%2BATsBNSEiJj8BPgE7ARE0NhcRMzI2NTQmIwGsAV5DakIwFgwBAQwWMEJqQ7ICASAKBgZ4BhgKigsKlQoP%2FvUKBgZ4BhgKdf71CgYGeAYYCnUPtstALS1ABLAaJD8yTyokCwsLJCpQMkAlGmQMCKAIDK8LDg8KrwwIoAgMZAwIoAgMAdsKD8j%2B1EJWVEAAAAEAyAGQBEwCvAAPAAATITIWHQEUBiMhIiY9ATQ2%2BgMgFR0dFfzgFR0dArwdFcgVHR0VyBUdAAAAAgDIAAAD6ASwACUAQQAAARUUBisBFRQGBx4BHQEzMhYdASE1NDY7ATU0NjcuAT0BIyImPQEXFRQWFx4BFAYHDgEdASE1NCYnLgE0Njc%2BAT0BA%2BgdFTJjUVFjMhUd%2FOAdFTJjUVFjMhUdyEE3HCAgHDdBAZBBNxwgIBw3QQSwlhUdZFuVIyOVW5YdFZaWFR2WW5UjI5VbZB0VlshkPGMYDDI8MgwYYzyWljxjGAwyPDIMGGM8ZAAAAAEAAAAAAAAAAAAAAAAxAAAB%2F%2FIBLATCBEEAFgAAATIWFzYzMhYVFAYjISImNTQ2NyY1NDYB9261LCwueKqqeP0ST3FVQgLYBEF3YQ6teHmtclBFaw4MGZnXAAAAAgAAAGQEsASvABoAHgAAAB4BDwEBMzIWHQEhNTQ2OwEBJyY%2BARYfATc2AyEnAwL2IAkKiAHTHhQe%2B1AeFB4B1IcKCSAkCm9wCXoBebbDBLMTIxC7%2FRYlFSoqFSUC6rcQJBQJEJSWEPwecAIWAAAAAAQAAABkBLAETAALABcAIwA3AAATITIWBwEGIicBJjYXARYUBwEGJjURNDYJATYWFREUBicBJjQHARYGIyEiJjcBNjIfARYyPwE2MhkEfgoFCP3MCBQI%2FcwIBQMBCAgI%2FvgICgoDjAEICAoKCP74CFwBbAgFCvuCCgUIAWwIFAikCBQIpAgUBEwKCP3JCAgCNwgK2v74CBQI%2FvgIBQoCJgoF%2FvABCAgFCv3aCgUIAQgIFID%2BlAgKCggBbAgIpAgIpAgAAAAD%2F%2FD%2F8AS6BLoACQANABAAAAAyHwEWFA8BJzcTAScJAQUTA%2BAmDpkNDWPWXyL9mdYCZv4f%2FrNuBLoNmQ4mDlzWYP50%2FZrWAmb8anABTwAAAAEAAAAABLAEsAAPAAABETMyFh0BITU0NjsBEQEhArz6FR384B0V%2Bv4MBLACiv3aHRUyMhUdAiYCJgAAAAEADgAIBEwEnAAfAAABJTYWFREUBgcGLgE2NzYXEQURFAYHBi4BNjc2FxE0NgFwAoUnMFNGT4gkV09IQv2oWEFPiCRXT0hCHQP5ow8eIvzBN1EXGSltchkYEAIJm%2F2iKmAVGilucRoYEQJ%2FJioAAAACAAn%2F%2BAS7BKcAHQApAAAAMh4CFQcXFAcBFgYPAQYiJwEGIycHIi4CND4BBCIOARQeATI%2BATQmAZDItoNOAQFOARMXARY7GikT%2Fu13jgUCZLaDTk6DAXKwlFZWlLCUVlYEp06DtmQCBY15%2Fu4aJRg6FBQBEk0BAU6Dtsi2g1tWlLCUVlaUsJQAAQBkAFgErwREABkAAAE%2BAh4CFRQOAwcuBDU0PgIeAQKJMHt4dVg2Q3mEqD4%2Bp4V4Qzhadnh5A7VESAUtU3ZAOXmAf7JVVbJ%2FgHk5QHZTLQVIAAAAAf%2FTAF4EewSUABgAAAETNjIXEyEyFgcFExYGJyUFBiY3EyUmNjMBl4MHFQeBAaUVBhH%2BqoIHDxH%2Bqf6qEQ8Hgv6lEQYUAyABYRMT%2Fp8RDPn%2BbxQLDPb3DAsUAZD7DBEAAv%2FTAF4EewSUABgAIgAAARM2MhcTITIWBwUTFgYnJQUGJjcTJSY2MwUjFwc3Fyc3IycBl4MHFQeBAaUVBhH%2BqoIHDxH%2Bqf6qEQ8Hgv6lEQYUAfPwxUrBw0rA6k4DIAFhExP%2BnxEM%2Bf5vFAsM9vcMCxQBkPsMEWSO4ouM5YzTAAABAAAAAASwBLAAJgAAATIWHQEUBiMVFBYXBR4BHQEUBiMhIiY9ATQ2NyU%2BAT0BIiY9ATQ2Alh8sD4mDAkBZgkMDwr7ggoPDAkBZgkMJj6wBLCwfPouaEsKFwbmBRcKXQoPDwpdChcF5gYXCktoLvp8sAAAAA0AAAAABLAETAAPABMAIwAnACsALwAzADcARwBLAE8AUwBXAAATITIWFREUBiMhIiY1ETQ2FxUzNSkBIgYVERQWMyEyNjURNCYzFTM1BRUzNSEVMzUFFTM1IRUzNQchIgYVERQWMyEyNjURNCYFFTM1IRUzNQUVMzUhFTM1GQR%2BCg8PCvuCCg8PVWQCo%2F3aCg8PCgImCg8Pc2T8GGQDIGT8GGQDIGTh%2FdoKDw8KAiYKDw%2F872QDIGT8GGQDIGQETA8K%2B%2BYKDw8KBBoKD2RkZA8K%2FqIKDw8KAV4KD2RkyGRkZGTIZGRkZGQPCv6iCg8PCgFeCg9kZGRkZMhkZGRkAAAEAAAAAARMBEwADwAfAC8APwAAEyEyFhURFAYjISImNRE0NikBMhYVERQGIyEiJjURNDYBITIWFREUBiMhIiY1ETQ2KQEyFhURFAYjISImNRE0NjIBkBUdHRX%2BcBUdHQJtAZAVHR0V%2FnAVHR39vQGQFR0dFf5wFR0dAm0BkBUdHRX%2BcBUdHQRMHRX%2BcBUdHRUBkBUdHRX%2BcBUdHRUBkBUd%2FagdFf5wFR0dFQGQFR0dFf5wFR0dFQGQFR0AAAkAAAAABEwETAAPAB8ALwA%2FAE8AXwBvAH8AjwAAEzMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2ATMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2ATMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2MsgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR389cgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR389cgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR0ETB0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHf5wHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUd%2FnAdFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0ABgAAAAAEsARMAA8AHwAvAD8ATwBfAAATMzIWHQEUBisBIiY9ATQ2KQEyFh0BFAYjISImPQE0NgEzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2ATMyFh0BFAYrASImPQE0NikBMhYdARQGIyEiJj0BNDYyyBUdHRXIFR0dAaUCvBUdHRX9RBUdHf6FyBUdHRXIFR0dAaUCvBUdHRX9RBUdHf6FyBUdHRXIFR0dAaUCvBUdHRX9RBUdHQRMHRXIFR0dFcgVHR0VyBUdHRXIFR3%2BcB0VyBUdHRXIFR0dFcgVHR0VyBUd%2FnAdFcgVHR0VyBUdHRXIFR0dFcgVHQAAAAABACYALAToBCAAFwAACQE2Mh8BFhQHAQYiJwEmND8BNjIfARYyAdECOwgUB7EICPzxBxUH%2FoAICLEHFAirBxYB3QI7CAixBxQI%2FPAICAGACBQHsQgIqwcAAQBuAG4EQgRCACMAAAEXFhQHCQEWFA8BBiInCQEGIi8BJjQ3CQEmND8BNjIXCQE2MgOIsggI%2FvUBCwgIsggVB%2F70%2FvQHFQiyCAgBC%2F71CAiyCBUHAQwBDAcVBDuzCBUH%2FvT%2B9AcVCLIICAEL%2FvUICLIIFQcBDAEMBxUIsggI%2FvUBDAcAAwAX%2F%2BsExQSZABkAJQBJAAAAMh4CFRQHARYUDwEGIicBBiMiLgI0PgEEIg4BFB4BMj4BNCYFMzIWHQEzMhYdARQGKwEVFAYrASImPQEjIiY9ATQ2OwE1NDYBmcSzgk1OASwICG0HFQj%2B1HeOYrSBTU2BAW%2BzmFhYmLOZWFj%2BvJYKD0sKDw8KSw8KlgoPSwoPDwpLDwSZTYKzYo15%2FtUIFQhsCAgBK01NgbTEs4JNWJmzmFhYmLOZIw8KSw8KlgoPSwoPDwpLDwqWCg9LCg8AAAMAF%2F%2FrBMUEmQAZACUANQAAADIeAhUUBwEWFA8BBiInAQYjIi4CND4BBCIOARQeATI%2BATQmBSEyFh0BFAYjISImPQE0NgGZxLOCTU4BLAgIbQcVCP7Ud45itIFNTYEBb7OYWFiYs5lYWP5YAV4KDw8K%2FqIKDw8EmU2Cs2KNef7VCBUIbAgIAStNTYG0xLOCTViZs5hYWJizmYcPCpYKDw8KlgoPAAAAAAIAFwAXBJkEsAAPAC0AAAEzMhYVERQGKwEiJjURNDYFNRYSFRQOAiIuAjU0EjcVDgEVFB4BMj4BNTQmAiZkFR0dFWQVHR0BD6fSW5vW6tabW9KnZ3xyxejFcnwEsB0V%2FnAVHR0VAZAVHeGmPv7ZuHXWm1tbm9Z1uAEnPqY3yHh0xXJyxXR4yAAEAGQAAASwBLAADwAfAC8APwAAATMyFhURFAYrASImNRE0NgEzMhYVERQGKwEiJjURNDYBMzIWFREUBisBIiY1ETQ2BTMyFh0BFAYrASImPQE0NgQBlgoPDwqWCg8P%2Ft6WCg8PCpYKDw%2F%2B3pYKDw8KlgoPD%2F7elgoPDwqWCg8PBLAPCvuCCg8PCgR%2BCg%2F%2BcA8K%2FRIKDw8KAu4KD%2F7UDwr%2BPgoPDwoBwgoPyA8K%2BgoPDwr6Cg8AAAAAAgAaABsElgSWAEcATwAAATIfAhYfATcWFwcXFh8CFhUUDwIGDwEXBgcnBwYPAgYjIi8CJi8BByYnNycmLwImNTQ%2FAjY%2FASc2Nxc3Nj8CNhIiBhQWMjY0AlghKSYFMS0Fhj0rUAMZDgGYBQWYAQ8YA1AwOIYFLDIFJisfISkmBTEtBYY8LFADGQ0ClwYGlwINGQNQLzqFBS0xBSYreLJ%2BfrJ%2BBJYFmAEOGQJQMDmGBSwxBiYrHiIoJgYxLAWGPSxRAxkOApcFBZcCDhkDUTA5hgUtMAYmKiAhKCYGMC0Fhj0sUAIZDgGYBf6ZfrF%2BfrEABwBkAAAEsAUUABMAFwAhACUAKQAtADEAAAEhMhYdASEyFh0BITU0NjMhNTQ2FxUhNQERFAYjISImNREXETMRMxEzETMRMxEzETMRAfQBLCk7ARMKD%2Fu0DwoBEzspASwBLDsp%2FUQpO2RkZGRkZGRkBRQ7KWQPCktLCg9kKTtkZGT%2B1PzgKTs7KQMgZP1EArz9RAK8%2FUQCvP1EArwAAQAMAAAFCATRAB8AABMBNjIXARYGKwERFAYrASImNREhERQGKwEiJjURIyImEgJsCBUHAmAIBQqvDwr6Cg%2F%2B1A8K%2BgoPrwoFAmoCYAcH%2FaAICv3BCg8PCgF3%2FokKDw8KAj8KAAIAZAAAA%2BgEsAARABcAAAERFBYzIREUBiMhIiY1ETQ2MwEjIiY9AQJYOykBLB0V%2FOAVHR0VA1L6FR0EsP5wKTv9dhUdHRUETBUd%2FnAdFfoAAwAXABcEmQSZAA8AGwAwAAAAMh4CFA4CIi4CND4BBCIOARQeATI%2BATQmBTMyFhURMzIWHQEUBisBIiY1ETQ2AePq1ptbW5vW6tabW1ubAb%2FoxXJyxejFcnL%2BfDIKD68KDw8K%2BgoPDwSZW5vW6tabW1ub1urWmztyxejFcnLF6MUNDwr%2B7Q8KMgoPDwoBXgoPAAAAAAL%2FnAAABRQEsAALAA8AACkBAyMDIQEzAzMDMwEDMwMFFP3mKfIp%2FeYBr9EVohTQ%2Fp4b4BsBkP5wBLD%2B1AEs%2FnD%2B1AEsAAAAAAIAZAAABLAEsAAVAC8AAAEzMhYVETMyFgcBBiInASY2OwERNDYBMzIWFREUBiMhIiY1ETQ2OwEyFh0BITU0NgImyBUdvxQLDf65DSYN%2FrkNCxS%2FHQJUMgoPDwr75goPDwoyCg8DhA8EsB0V%2Fj4XEP5wEBABkBAXAcIVHfzgDwr%2BogoPDwoBXgoPDwqvrwoPAAMAFwAXBJkEmQAPABsAMQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgUzMhYVETMyFgcDBiInAyY2OwERNDYB4%2BrWm1tbm9bq1ptbW5sBv%2BjFcnLF6MVycv58lgoPiRUKDd8NJg3fDQoViQ8EmVub1urWm1tbm9bq1ps7csXoxXJyxejFDQ8K%2Fu0XEP7tEBABExAXARMKDwAAAAMAFwAXBJkEmQAPABsAMQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JiUTFgYrAREUBisBIiY1ESMiJjcTNjIB4%2BrWm1tbm9bq1ptbW5sBv%2BjFcnLF6MVycv7n3w0KFYkPCpYKD4kVCg3fDSYEmVub1urWm1tbm9bq1ps7csXoxXJyxejFAf7tEBf%2B7QoPDwoBExcQARMQAAAAAAIAAAAABLAEsAAZADkAABMhMhYXExYVERQGBwYjISImJyY1EzQ3Ez4BBSEiBgcDBhY7ATIWHwEeATsBMjY%2FAT4BOwEyNicDLgHhAu4KEwO6BwgFDBn7tAweAgYBB7kDEwKX%2FdQKEgJXAgwKlgoTAiYCEwr6ChMCJgITCpYKDAJXAhIEsA4K%2FXQYGf5XDB4CBggEDRkBqRkYAowKDsgOC%2F4%2BCw4OCpgKDg4KmAoODgsBwgsOAAMAFwAXBJkEmQAPABsAJwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgUXFhQPAQYmNRE0NgHj6tabW1ub1urWm1tbmwG%2F6MVycsXoxXJy%2Fov9ERH9EBgYBJlbm9bq1ptbW5vW6tabO3LF6MVycsXoxV2%2BDCQMvgwLFQGQFQsAAQAXABcEmQSwACgAAAE3NhYVERQGIyEiJj8BJiMiDgEUHgEyPgE1MxQOAiIuAjQ%2BAjMyA7OHBwsPCv6WCwQHhW2BdMVycsXoxXKWW5vW6tabW1ub1nXABCSHBwQL%2FpYKDwsHhUxyxejFcnLFdHXWm1tbm9bq1ptbAAAAAAIAFwABBJkEsAAaADUAAAE3NhYVERQGIyEiJj8BJiMiDgEVIzQ%2BAjMyEzMUDgIjIicHBiY1ETQ2MyEyFg8BFjMyPgEDs4cHCw8L%2FpcLBAeGboF0xXKWW5vWdcDrllub1nXAnIYHCw8LAWgKBQiFboJ0xXIEJIcHBAv%2BlwsPCweGS3LFdHXWm1v9v3XWm1t2hggFCgFoCw8LB4VMcsUAAAAKAGQAAASwBLAADwAfAC8APwBPAF8AbwB%2FAI8AnwAAEyEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCYFMzIWHQEUBisBIiY9ATQ2MyEyFh0BFAYjISImPQE0NgczMhYdARQGKwEiJj0BNDYzITIWHQEUBiMhIiY9ATQ2BzMyFh0BFAYrASImPQE0NjMhMhYdARQGIyEiJj0BNDYHMzIWHQEUBisBIiY9ATQ2MyEyFh0BFAYjISImPQE0Nn0EGgoPDwr75goPDwPA%2FK4KDw8KA1IKDw%2F9CDIKDw8KMgoPD9IBwgoPDwr%2BPgoPD74yCg8PCjIKDw%2FSAcIKDw8K%2Fj4KDw%2B%2BMgoPDwoyCg8P0gHCCg8PCv4%2BCg8PvjIKDw8KMgoPD9IBwgoPDwr%2BPgoPDwSwDwr7ggoPDwoEfgoPyA8K%2FK4KDw8KA1IKD2QPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKDwAAAAACAAAAAARMBLAAGQAjAAABNTQmIyEiBh0BIyIGFREUFjMhMjY1ETQmIyE1NDY7ATIWHQEDhHVT%2FtRSdmQpOzspA4QpOzsp%2FageFMgUHgMgyFN1dlLIOyn9qCk7OykCWCk7lhUdHRWWAAIAZAAABEwETAAJADcAABMzMhYVESMRNDYFMhcWFREUBw4DIyIuAScuAiMiBwYjIicmNRE%2BATc2HgMXHgIzMjc2fTIKD2QPA8AEBRADIUNAMRwaPyonKSxHHlVLBwgGBQ4WeDsXKC4TOQQpLUUdZ1AHBEwPCvvNBDMKDzACBhH%2BWwYGO1AkDQ0ODg8PDzkFAwcPAbY3VwMCAwsGFAEODg5XCAAAAwAAAAAEsASXACEAMQBBAAAAMh4CFREUBisBIiY1ETQuASAOARURFAYrASImNRE0PgEDMzIWFREUBisBIiY1ETQ2ITMyFhURFAYrASImNRE0NgHk6N6jYw8KMgoPjeT%2B%2BuSNDwoyCg9joyqgCAwMCKAIDAwCYKAIDAwIoAgMDASXY6PedP7UCg8PCgEsf9FyctF%2F%2FtQKDw8KASx03qP9wAwI%2FjQIDAwIAcwIDAwI%2FjQIDAwIAcwIDAAAAAACAAAA0wRHA90AFQA5AAABJTYWFREUBiclJisBIiY1ETQ2OwEyBTc2Mh8BFhQPARcWFA8BBiIvAQcGIi8BJjQ%2FAScmND8BNjIXAUEBAgkMDAn%2B%2FhUZ%2BgoPDwr6GQJYeAcUByIHB3h4BwciBxQHeHgHFAciBwd3dwcHIgcUBwMurAYHCv0SCgcGrA4PCgFeCg%2BEeAcHIgcUB3h4BxQHIgcHd3cHByIHFAd4eAcUByIICAAAAAACAAAA0wNyA90AFQAvAAABJTYWFREUBiclJisBIiY1ETQ2OwEyJTMWFxYVFAcGDwEiLwEuATc2NTQnJjY%2FATYBQQECCQwMCf7%2BFRn6Cg8PCvoZAdIECgZgWgYLAwkHHQcDBkhOBgMIHQcDLqwGBwr9EgoHBqwODwoBXgoPZAEJgaGafwkBAQYXBxMIZ36EaggUBxYFAAAAAAMAAADEBGID7AAbADEASwAAATMWFxYVFAYHBgcjIi8BLgE3NjU0JicmNj8BNgUlNhYVERQGJyUmKwEiJjURNDY7ATIlMxYXFhUUBwYPASIvAS4BNzY1NCcmNj8BNgPHAwsGh0RABwoDCQcqCAIGbzs3BgIJKgf9ggECCQwMCf7%2BFRn6Cg8PCvoZAdIECgZgWgYLAwkHHQcDBkhOBgMIHQcD7AEJs9lpy1QJAQYiBhQIlrJarEcJFAYhBb6sBgcK%2FRIKBwasDg8KAV4KD2QBCYGhmn8JAQEGFwcTCGd%2BhGoIFQYWBQAAAAANAAAAAASwBLAACQAVABkAHQAhACUALQA7AD8AQwBHAEsATwAAATMVIxUhFSMRIQEjFTMVIREjESM1IQURIREhESERBSM1MwUjNTMBMxEhETM1MwEzFSMVIzUjNTM1IzUhBREhEQcjNTMFIzUzASM1MwUhNSEB9GRk%2FnBkAfQCvMjI%2FtTIZAJY%2B7QBLAGQASz84GRkArxkZP1EyP4MyGQB9MhkyGRkyAEs%2FUQBLGRkZAOEZGT%2BDGRkAfT%2B1AEsA4RkZGQCWP4MZMgBLAEsyGT%2B1AEs%2FtQBLMhkZGT%2BDP4MAfRk%2FtRkZGRkyGTI%2FtQBLMhkZGT%2B1GRkZAAAAAAJAAAAAASwBLAAAwAHAAsADwATABcAGwAfACMAADcjETMTIxEzASMRMxMjETMBIxEzASE1IRcjNTMXIzUzBSM1M2RkZMhkZAGQyMjIZGQBLMjI%2FOD%2B1AEsyGRkyGRkASzIyMgD6PwYA%2Bj8GAPo%2FBgD6PwYA%2Bj7UGRkW1tbW1sAAAIAAAAKBKYEsAANABUAAAkBFhQHAQYiJwETNDYzBCYiBhQWMjYB9AKqCAj%2BMAgUCP1WAQ8KAUM7Uzs7UzsEsP1WCBQI%2FjAICAKqAdsKD807O1Q7OwAAAAADAAAACgXSBLAADQAZACEAAAkBFhQHAQYiJwETNDYzIQEWFAcBBiIvAQkBBCYiBhQWMjYB9AKqCAj%2BMAgUCP1WAQ8KAwYCqggI%2FjAIFAg4Aaj9RP7TO1M7O1M7BLD9VggUCP4wCAgCqgHbCg%2F9VggUCP4wCAg4AaoCvM07O1Q7OwAAAAABAGQAAASwBLAAJgAAASEyFREUDwEGJjURNCYjISIPAQYWMyEyFhURFAYjISImNRE0PwE2ASwDOUsSQAgKDwr9RBkSQAgFCgK8Cg8PCvyuCg8SixIEsEv8fBkSQAgFCgO2Cg8SQAgKDwr8SgoPDwoDzxkSixIAAAABAMj%2F%2FwRMBLAACgAAEyEyFhURCQERNDb6AyAVHf4%2B%2Fj4dBLAdFfuCAbz%2BQwR%2FFR0AAAAAAwAAAAAEsASwABUARQBVAAABISIGBwMGHwEeATMhMjY%2FATYnAy4BASMiBg8BDgEjISImLwEuASsBIgYVERQWOwEyNj0BNDYzITIWHQEUFjsBMjY1ETQmASEiBg8BBhYzITI2LwEuAQM2%2FkQLEAFOBw45BhcKAcIKFwY%2BDgdTARABVpYKFgROBBYK%2FdoKFgROBBYKlgoPDwqWCg8PCgLuCg8PCpYKDw%2F%2Bsf4MChMCJgILCgJYCgsCJgITBLAPCv7TGBVsCQwMCWwVGAEtCg%2F%2BcA0JnAkNDQmcCQ0PCv12Cg8PCpYKDw8KlgoPDwoCigoP%2FagOCpgKDg4KmAoOAAAAAAQAAABkBLAETAAdACEAKQAxAAABMzIeAh8BMzIWFREUBiMhIiY1ETQ2OwE%2BBAEVMzUEIgYUFjI2NCQyFhQGIiY0AfTIOF00JAcGlik7Oyn8GCk7OymWAgknM10ByGT%2Bz76Hh76H%2Fu9WPDxWPARMKTs7FRQ7Kf2oKTs7KQJYKTsIG0U1K%2F7UZGRGh76Hh74IPFY8PFYAAAAAAgA1AAAEsASvACAAIwAACQEWFx4BHwEVITUyNi8BIQYHBh4CMxUhNTY3PgE%2FAQEDIQMCqQGBFCgSJQkK%2Fl81LBFS%2Fnk6IgsJKjIe%2FpM4HAwaBwcBj6wBVKIEr%2FwaMioTFQECQkJXLd6RWSIuHAxCQhgcDCUNDQPu%2FVoByQAAAAADAGQAAAPwBLAAJwAyADsAAAEeBhUUDgMjITU%2BATURNC4EJzUFMh4CFRQOAgclMzI2NTQuAisBETMyNjU0JisBAvEFEzUwOyodN1htbDD%2BDCk7AQYLFyEaAdc5dWM%2BHy0tEP6Pi05pESpTPnbYUFJ9Xp8CgQEHGB0zOlIuQ3VONxpZBzMoAzsYFBwLEAkHRwEpSXNDM1s6KwkxYUopOzQb%2FK5lUFqBAAABAMgAAANvBLAAGQAAARcOAQcDBhYXFSE1NjcTNjQuBCcmJzUDbQJTQgeECSxK%2Fgy6Dq0DAw8MHxUXDQYEsDkTNSj8uTEoBmFhEFIDQBEaExAJCwYHAwI5AAAAAAL%2FtQAABRQEsAAlAC8AAAEjNC4FKwERFBYfARUhNTI%2BAzURIyIOBRUjESEFIxEzByczESM3BRQyCAsZEyYYGcgyGRn%2BcAQOIhoWyBkYJhMZCwgyA%2Bj7m0tLfX1LS30DhBUgFQ4IAwH8rhYZAQJkZAEFCRUOA1IBAwgOFSAVASzI%2FOCnpwMgpwACACH%2FtQSPBLAAJQAvAAABIzQuBSsBERQWHwEVITUyPgM1ESMiDgUVIxEhEwc1IRUnNxUhNQRMMggLGRMmGBnIMhkZ%2FnAEDiIaFsgZGCYTGQsIMgPoQ6f84KenAyADhBUgFQ4IAwH9dhYZAQJkZAEFCRUOAooBAwgOFSAVASz7gn1LS319S0sABAAAAAAEsARMAA8AHwAvAD8AABMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYyAlgVHR0V%2FagVHR0VA%2BgVHR0V%2FBgVHR0VAyAVHR0V%2FOAVHR0VBEwVHR0V%2B7QVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0ABAAAAAAEsARMAA8AHwAvAD8AABMhMhYdARQGIyEiJj0BNDYDITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NgMhMhYdARQGIyEiJj0BNDb6ArwVHR0V%2FUQVHR2zBEwVHR0V%2B7QVHR3dArwVHR0V%2FUQVHR2zBEwVHR0V%2B7QVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0ABAAAAAAEsARMAA8AHwAvAD8AAAE1NDYzITIWHQEUBiMhIiYBNTQ2MyEyFh0BFAYjISImEzU0NjMhMhYdARQGIyEiJgE1NDYzITIWHQEUBiMhIiYB9B0VAlgVHR0V%2FagVHf5wHRUD6BUdHRX8GBUdyB0VAyAVHR0V%2FOAVHf7UHRUETBUdHRX7tBUdA7ZkFR0dFWQVHR3%2B6WQVHR0VZBUdHf7pZBUdHRVkFR0d%2FulkFR0dFWQVHR0AAAQAAAAABLAETAAPAB8ALwA%2FAAATITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2MgRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dBEwdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdAAgAAAAABLAETAAPAB8ALwA%2FAE8AXwBvAH8AABMzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2ATMyFh0BFAYrASImPQE0NikBMhYdARQGIyEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2KQEyFh0BFAYjISImPQE0NgEzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2MmQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR0ETB0VZBUdHRVkFR0dFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdHRVkFR0dFWQVHf7UHRVkFR0dFWQVHR0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0dFWQVHR0VZBUdAAAG%2F5wAAASwBEwAAwATACMAKgA6AEoAACEjETsCMhYdARQGKwEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2BQc1IzUzNQUhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2AZBkZJZkFR0dFWQVHR0VAfQVHR0V%2FgwVHR3%2B%2BqfIyAHCASwVHR0V%2FtQVHR0VAlgVHR0V%2FagVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR36fUtkS68dFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdAAAABgAAAAAFFARMAA8AEwAjACoAOgBKAAATMzIWHQEUBisBIiY9ATQ2ASMRMwEhMhYdARQGIyEiJj0BNDYFMxUjFSc3BSEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYyZBUdHRVkFR0dA2dkZPyuAfQVHR0V%2FgwVHR0EL8jIp6f75gEsFR0dFf7UFR0dFQJYFR0dFf2oFR0dBEwdFWQVHR0VZBUd%2B7QETP7UHRVkFR0dFWQVHchkS319rx0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0AAAAAAgAAAMgEsAPoAA8AEgAAEyEyFhURFAYjISImNRE0NgkCSwLuHywsH%2F0SHywsBIT%2B1AEsA%2BgsH%2F12HywsHwKKHyz9RAEsASwAAwAAAAAEsARMAA8AFwAfAAATITIWFREUBiMhIiY1ETQ2FxE3BScBExEEMhYUBiImNCwEWBIaGhL7qBIaGkr3ASpKASXs%2FNJwTk5wTgRMGhL8DBIaGhID9BIaZP0ftoOcAT7%2B4AH0dE5vT09vAAAAAAIA2wAFBDYEkQAWAB4AAAEyHgEVFAcOAQ8BLgQnJjU0PgIWIgYUFjI2NAKIdcZzRkWyNjYJIV5YbSk8RHOft7eCgreCBJF4ynVzj23pPz4IIWZomEiEdVijeUjDgriBgbgAAAACABcAFwSZBJkADwAXAAAAMh4CFA4CIi4CND4BAREiDgEUHgEB4%2BrWm1tbm9bq1ptbW5sBS3TFcnLFBJlbm9bq1ptbW5vW6tab%2FG8DVnLF6MVyAAACAHUAAwPfBQ8AGgA1AAABHgYVFA4DBy4DNTQ%2BBQMOAhceBBcWNj8BNiYnLgInJjc2IyYCKhVJT1dOPiUzVnB9P1SbfEokP0xXUEm8FykoAwEbITEcExUWAgYCCQkFEikMGiACCAgFD0iPdXdzdYdFR4BeRiYEBTpjl1lFh3ZzeHaQ%2Ff4hS4I6JUEnIw4IBwwQIgoYBwQQQSlZtgsBAAAAAwAAAAAEywRsAAwAKgAvAAABNz4CHgEXHgEPAiUhMhcHISIGFREUFjMhMjY9ATcRFAYjISImNRE0NgkBBzcBA%2BhsAgYUFR0OFgoFBmz9BQGQMje7%2FpApOzspAfQpO8i7o%2F5wpbm5Azj%2BlqE3AWMD9XMBAgIEDw4WKgsKc8gNuzsp%2FgwpOzsptsj%2BtKW5uaUBkKW5%2Ftf%2BljKqAWMAAgAAAAAEkwRMABsANgAAASEGByMiBhURFBYzITI2NTcVFAYjISImNRE0NgUBFhQHAQYmJzUmDgMHPgY3NT4BAV4BaaQ0wyk7OykB9Ck7yLml%2FnClubkCfwFTCAj%2BrAcLARo5ZFRYGgouOUlARioTAQsETJI2Oyn%2BDCk7OymZZ6W5uaUBkKW5G%2F7TBxUH%2Fs4GBAnLAQINFjAhO2JBNB0UBwHSCgUAAAAAAgAAAAAEnQRMAB0ANQAAASEyFwchIgYVERQWMyEyNj0BNxUUBiMhIiY1ETQ2CQE2Mh8BFhQHAQYiLwEmND8BNjIfARYyAV4BXjxDsv6jKTs7KQH0KTvIuaX%2BcKW5uQHKAYsHFQdlBwf97QcVB%2FgHB2UHFQdvCBQETBexOyn%2BDCk7OylFyNulubmlAZCluf4zAYsHB2UHFQf97AcH%2BAcVB2UHB28HAAAAAQAKAAoEpgSmADsAAAkBNjIXARYGKwEVMzU0NhcBFhQHAQYmPQEjFTMyFgcBBiInASY2OwE1IxUUBicBJjQ3ATYWHQEzNSMiJgE%2BAQgIFAgBBAcFCqrICggBCAgI%2FvgICsiqCgUH%2FvwIFAj%2B%2BAgFCq%2FICgj%2B%2BAgIAQgICsivCgUDlgEICAj%2B%2BAgKyK0KBAf%2B%2FAcVB%2F73BwQKrcgKCP74CAgBCAgKyK0KBAcBCQcVBwEEBwQKrcgKAAEAyAAAA4QETAAZAAATMzIWFREBNhYVERQGJwERFAYrASImNRE0NvpkFR0B0A8VFQ%2F%2BMB0VZBUdHQRMHRX%2BSgHFDggV%2FBgVCA4Bxf5KFR0dFQPoFR0AAAABAAAAAASwBEwAIwAAEzMyFhURATYWFREBNhYVERQGJwERFAYnAREUBisBIiY1ETQ2MmQVHQHQDxUB0A8VFQ%2F%2BMBUP%2FjAdFWQVHR0ETB0V%2FkoBxQ4IFf5KAcUOCBX8GBUIDgHF%2FkoVCA4Bxf5KFR0dFQPoFR0AAAABAJ0AGQSwBDMAFQAAAREUBicBERQGJwEmNDcBNhYVEQE2FgSwFQ%2F%2BMBUP%2FhQPDwHsDxUB0A8VBBr8GBUIDgHF%2FkoVCA4B4A4qDgHgDggV%2FkoBxQ4IAAAAAQDIABYEMwQ2AAsAABMBFhQHAQYmNRE0NvMDLhIS%2FNISGRkEMv4OCx4L%2Fg4LDhUD6BUOAAIAyABkA4QD6AAPAB8AABMzMhYVERQGKwEiJjURNDYhMzIWFREUBisBIiY1ETQ2%2BsgVHR0VyBUdHQGlyBUdHRXIFR0dA%2BgdFfzgFR0dFQMgFR0dFfzgFR0dFQMgFR0AAAEAyABkBEwD6AAPAAABERQGIyEiJjURNDYzITIWBEwdFfzgFR0dFQMgFR0DtvzgFR0dFQMgFR0dAAAAAAEAAAAZBBMEMwAVAAABETQ2FwEWFAcBBiY1EQEGJjURNDYXAfQVDwHsDw%2F%2BFA8V%2FjAPFRUPAmQBthUIDv4gDioO%2FiAOCBUBtv47DggVA%2BgVCA4AAAH%2F%2FgACBLMETwAjAAABNzIWFRMUBiMHIiY1AwEGJjUDAQYmNQM0NhcBAzQ2FwEDNDYEGGQUHgUdFWQVHQL%2BMQ4VAv4yDxUFFQ8B0gIVDwHSAh0ETgEdFfwYFR0BHRUBtf46DwkVAbX%2BOQ4JFAPoFQkP%2Fj4BthQJDv49AbYVHQAAAQEsAAAD6ARMABkAAAEzMhYVERQGKwEiJjURAQYmNRE0NhcBETQ2A1JkFR0dFWQVHf4wDxUVDwHQHQRMHRX8GBUdHRUBtv47DggVA%2BgVCA7%2BOwG2FR0AAAIAZADIBLAESAALABsAAAkBFgYjISImNwE2MgEhMhYdARQGIyEiJj0BNDYCrgH1DwkW%2B%2B4WCQ8B9Q8q%2FfcD6BUdHRX8GBUdHQQ5%2FeQPFhYPAhwP%2FUgdFWQVHR0VZBUdAAEAiP%2F8A3UESgAFAAAJAgcJAQN1%2FqABYMX92AIoA4T%2Bn%2F6fxgIoAiYAAAAAAQE7%2F%2FwEKARKAAUAAAkBJwkBNwQo%2FdnGAWH%2Bn8YCI%2F3ZxgFhAWHGAAIAFwAXBJkEmQAPADMAAAAyHgIUDgIiLgI0PgEFIyIGHQEjIgYdARQWOwEVFBY7ATI2PQEzMjY9ATQmKwE1NCYB4%2BrWm1tbm9bq1ptbW5sBfWQVHZYVHR0Vlh0VZBUdlhUdHRWWHQSZW5vW6tabW1ub1urWm7odFZYdFWQVHZYVHR0Vlh0VZBUdlhUdAAAAAAIAFwAXBJkEmQAPAB8AAAAyHgIUDgIiLgI0PgEBISIGHQEUFjMhMjY9ATQmAePq1ptbW5vW6tabW1ubAkX%2BDBUdHRUB9BUdHQSZW5vW6tabW1ub1urWm%2F5%2BHRVkFR0dFWQVHQACABcAFwSZBJkADwAzAAAAMh4CFA4CIi4CND4BBCIPAScmIg8BBhQfAQcGFB8BFjI%2FARcWMj8BNjQvATc2NC8BAePq1ptbW5vW6tabW1ubAeUZCXh4CRkJjQkJeHgJCY0JGQl4eAkZCY0JCXh4CQmNBJlbm9bq1ptbW5vW6tabrQl4eAkJjQkZCXh4CRkJjQkJeHgJCY0JGQl4eAkZCY0AAgAXABcEmQSZAA8AJAAAADIeAhQOAiIuAjQ%2BAQEnJiIPAQYUHwEWMjcBNjQvASYiBwHj6tabW1ub1urWm1tbmwEVVAcVCIsHB%2FIHFQcBdwcHiwcVBwSZW5vW6tabW1ub1urWm%2F4xVQcHiwgUCPEICAF3BxUIiwcHAAAAAAMAFwAXBJkEmQAPADsASwAAADIeAhQOAiIuAjQ%2BAQUiDgMVFDsBFjc%2BATMyFhUUBgciDgUHBhY7ATI%2BAzU0LgMTIyIGHQEUFjsBMjY9ATQmAePq1ptbW5vW6tabW1ubAT8dPEIyIRSDHgUGHR8UFw4TARkOGhITDAIBDQ6tBx4oIxgiM0Q8OpYKDw8KlgoPDwSZW5vW6tabW1ub1urWm5ELHi9PMhkFEBQQFRIXFgcIBw4UHCoZCBEQKDhcNi9IKhsJ%2FeMPCpYKDw8KlgoPAAADABcAFwSZBJkADwAfAD4AAAAyHgIUDgIiLgI0PgEFIyIGHQEUFjsBMjY9ATQmAyMiBh0BFBY7ARUjIgYdARQWMyEyNj0BNCYrARE0JgHj6tabW1ub1urWm1tbmwGWlgoPDwqWCg8PCvoKDw8KS0sKDw8KAV4KDw8KSw8EmVub1urWm1tbm9bq1ptWDwqWCg8PCpYKD%2F7UDwoyCg%2FIDwoyCg8PCjIKDwETCg8AAgAAAAAEsASwAC8AXwAAATMyFh0BHgEXMzIWHQEUBisBDgEHFRQGKwEiJj0BLgEnIyImPQE0NjsBPgE3NTQ2ExUUBisBIiY9AQ4BBzMyFh0BFAYrAR4BFzU0NjsBMhYdAT4BNyMiJj0BNDY7AS4BAg2WCg9nlxvCCg8PCsIbl2cPCpYKD2eXG8IKDw8KwhuXZw%2B5DwqWCg9EZheoCg8PCqgXZkQPCpYKD0RmF6gKDw8KqBdmBLAPCsIbl2cPCpYKD2eXG8IKDw8KwhuXZw8KlgoPZ5cbwgoP%2Fs2oCg8PCqgXZkQPCpYKD0RmF6gKDw8KqBdmRA8KlgoPRGYAAwAXABcEmQSZAA8AGwA%2FAAAAMh4CFA4CIi4CND4BBCIOARQeATI%2BATQmBxcWFA8BFxYUDwEGIi8BBwYiLwEmND8BJyY0PwE2Mh8BNzYyAePq1ptbW5vW6tabW1ubAb%2FoxXJyxejFcnKaQAcHfHwHB0AHFQd8fAcVB0AHB3x8BwdABxUHfHwHFQSZW5vW6tabW1ub1urWmztyxejFcnLF6MVaQAcVB3x8BxUHQAcHfHwHB0AHFQd8fAcVB0AHB3x8BwAAAAMAFwAXBJkEmQAPABsAMAAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgcXFhQHAQYiLwEmND8BNjIfATc2MgHj6tabW1ub1urWm1tbmwG%2F6MVycsXoxXJyg2oHB%2F7ACBQIyggIagcVB0%2FFBxUEmVub1urWm1tbm9bq1ps7csXoxXJyxejFfWoHFQf%2BvwcHywcVB2oICE%2FFBwAAAAMAFwAXBJkEmQAPABgAIQAAADIeAhQOAiIuAjQ%2BAQUiDgEVFBcBJhcBFjMyPgE1NAHj6tabW1ub1urWm1tbmwFLdMVyQQJLafX9uGhzdMVyBJlbm9bq1ptbW5vW6tabO3LFdHhpAktB0P24PnLFdHMAAAAAAQAXAFMEsAP5ABUAABMBNhYVESEyFh0BFAYjIREUBicBJjQnAgoQFwImFR0dFf3aFxD99hACRgGrDQoV%2Ft0dFcgVHf7dFQoNAasNJgAAAAABAAAAUwSZA%2FkAFQAACQEWFAcBBiY1ESEiJj0BNDYzIRE0NgJ%2FAgoQEP32EBf92hUdHRUCJhcD8f5VDSYN%2FlUNChUBIx0VyBUdASMVCgAAAAEAtwAABF0EmQAVAAAJARYGIyERFAYrASImNREhIiY3ATYyAqoBqw0KFf7dHRXIFR3%2B3RUKDQGrDSYEif32EBf92hUdHRUCJhcQAgoQAAAAAQC3ABcEXQSwABUAAAEzMhYVESEyFgcBBiInASY2MyERNDYCJsgVHQEjFQoN%2FlUNJg3%2BVQ0KFQEjHQSwHRX92hcQ%2FfYQEAIKEBcCJhUdAAABAAAAtwSZBF0AFwAACQEWFAcBBiY1EQ4DBz4ENxE0NgJ%2FAgoQEP32EBdesKWBJAUsW4fHfhcEVf5VDSYN%2FlUNChUBIwIkRHVNabGdcUYHAQYVCgACAAAAAASwBLAAFQArAAABITIWFREUBi8BBwYiLwEmND8BJyY2ASEiJjURNDYfATc2Mh8BFhQPARcWBgNSASwVHRUOXvkIFAhqBwf5Xg4I%2FiH%2B1BUdFQ5e%2BQgUCGoHB%2FleDggEsB0V%2FtQVCA5e%2BQcHaggUCPleDhX7UB0VASwVCA5e%2BQcHaggUCPleDhUAAAACAEkASQRnBGcAFQArAAABFxYUDwEXFgYjISImNRE0Nh8BNzYyASEyFhURFAYvAQcGIi8BJjQ%2FAScmNgP2agcH%2BV4OCBX%2B1BUdFQ5e%2BQgU%2FQwBLBUdFQ5e%2BQgUCGoHB%2FleDggEYGoIFAj5Xg4VHRUBLBUIDl75B%2F3xHRX%2B1BUIDl75BwdqCBQI%2BV4OFQAAAAADABcAFwSZBJkADwAfAC8AAAAyHgIUDgIiLgI0PgEFIyIGFxMeATsBMjY3EzYmAyMiBh0BFBY7ATI2PQE0JgHj6tabW1ub1urWm1tbmwGz0BQYBDoEIxQ2FCMEOgQYMZYKDw8KlgoPDwSZW5vW6tabW1ub1urWm7odFP7SFB0dFAEuFB3%2BDA8KlgoPDwqWCg8AAAAABQAAAAAEsASwAEkAVQBhAGgAbwAAATIWHwEWHwEWFxY3Nj8BNjc2MzIWHwEWHwIeATsBMhYdARQGKwEiBh0BIREjESE1NCYrASImPQE0NjsBMjY1ND8BNjc%2BBAUHBhY7ATI2LwEuAQUnJgYPAQYWOwEyNhMhIiY1ESkBERQGIyERAQQJFAUFFhbEFQ8dCAsmxBYXERUXMA0NDgQZCAEPCj0KDw8KMgoP%2FnDI%2FnAPCjIKDw8KPQsOCRkFDgIGFRYfAp2mBwQK2woKAzMDEP41sQgQAzMDCgrnCwMe%2FokKDwGQAlgPCv6JBLAEAgIKDXYNCxUJDRZ2DQoHIREQFRh7LAkLDwoyCg8PCq8BLP7UrwoPDwoyCg8GBQQwgBkUAwgWEQ55ogcKDgqVCgSqnQcECo8KDgr8cg8KAXf%2BiQoPAZAAAAAAAgAAAAwErwSmACsASQAAATYWFQYCDgQuAScmByYOAQ8BBiY1NDc%2BATc%2BAScuAT4BNz4GFyYGBw4BDwEOBAcOARY2Nz4CNz4DNz4BBI0IGgItQmxhi2KORDg9EQQRMxuZGhYqCFUYEyADCQIQOjEnUmFch3vAJQgdHyaiPT44XHRZUhcYDhItIRmKcVtGYWtbKRYEBKYDEwiy%2Ft3IlVgxEQgLCwwBAQIbG5kYEyJAJghKFRE8Hzdff4U%2FM0o1JSMbL0QJGCYvcSEhHjZST2c1ODwEJygeW0AxJUBff1UyFAABAF0AHgRyBM8ATwAAAQ4BHgQXLgc%2BATceAwYHDgQHBicmNzY3PgQuAScWDgMmJy4BJyY%2BBDcGHgM3PgEuAicmPgMCjScfCic4R0IgBBsKGAoQAwEJEg5gikggBhANPkpTPhZINx8SBgsNJysiCRZOQQoVNU1bYC9QZwICBAUWITsoCAYdJzIYHw8YIiYHDyJJYlkEz0OAZVxEOSQMBzgXOB42IzElKRIqg5Gnl0o3Z0c6IAYWCwYNAwQFIDhHXGF1OWiqb0sdBxUknF0XNTQ8PEUiNWNROBYJDS5AQVUhVZloUSkAAAAAA%2F%2FcAGoE1ARGABsAPwBRAAAAMh4FFA4FIi4FND4EBSYGFxYVFAYiJjU0NzYmBwYHDgEXHgQyPgM3NiYnJgUHDgEXFhcWNj8BNiYnJicuAQIGpJ17bk85HBw6T257naKde25POhwcOU9uewIPDwYIGbD4sBcIBw5GWg0ECxYyWl%2BDiINfWjIWCwQMWv3%2FIw8JCSU4EC0OIw4DDywtCyIERi1JXGJcSSpJXGJcSS0tSVxiXEkqSVxiXEncDwYTOT58sLB8OzcTBg9FcxAxEiRGXkQxMEVeRSQSMRF1HiQPLxJEMA0EDyIPJQ8sSRIEAAAABP%2FcAAAE1ASwABQAJwA7AEwAACEjNy4ENTQ%2BBTMyFzczEzceARUUDgMHNz4BNzYmJyYlBgcOARceBBc3LgE1NDc2JhcHDgEXFhcWNj8CJyYnLgECUJQfW6l2WSwcOU9ue51SPUEglCYvbIknUGqYUi5NdiYLBAw2%2FVFGWg0ECxIqSExoNSlrjxcIB3wjDwkJJTgQLQ4MFgMsLQsieBRhdHpiGxVJXGJcSS0Pef5StVXWNBpacm5jGq0xiD8SMRFGckVzEDESHjxRQTkNmhKnbjs3EwZwJA8vEkQwDQQPC1YELEkSBAAAAAP%2FngAABRIEqwALABgAKAAAJwE2FhcBFgYjISImJSE1NDY7ATIWHQEhAQczMhYPAQ4BKwEiJi8BJjZaAoIUOBQCghUbJfryJRsBCgFZDwqWCg8BWf5DaNAUGAQ6BCMUNhQjBDoEGGQEKh8FIfvgIEdEhEsKDw8KSwLT3x0U%2FBQdHRT8FB0AAAABAGQAFQSwBLAAKAAAADIWFREBHgEdARQGJyURFh0BFAYvAQcGJj0BNDcRBQYmPQE0NjcBETQCTHxYAWsPFhgR%2FplkGhPNzRMaZP6ZERgWDwFrBLBYPv6t%2FrsOMRQpFA0M%2Bf75XRRAFRAJgIAJEBVAFF0BB%2FkMDRQpFDEOAUUBUz4AAAARAAAAAARMBLAAHQAnACsALwAzADcAOwA%2FAEMARwBLAE8AUwBXAFsAXwBjAAABMzIWHQEzMhYdASE1NDY7ATU0NjsBMhYdASE1NDYBERQGIyEiJjURFxUzNTMVMzUzFTM1MxUzNTMVMzUFFTM1MxUzNTMVMzUzFTM1MxUzNQUVMzUzFTM1MxUzNTMVMzUzFTM1A1JkFR0yFR37tB0VMh0VZBUdAfQdAQ8dFfwYFR1kZGRkZGRkZGRk%2FHxkZGRkZGRkZGT8fGRkZGRkZGRkZASwHRUyHRWWlhUdMhUdHRUyMhUd%2FnD9EhUdHRUC7shkZGRkZGRkZGRkyGRkZGRkZGRkZGTIZGRkZGRkZGRkZAAAAAMAAAAZBXcElwAZACUANwAAARcWFA8BBiY9ASMBISImPQE0NjsBATM1NDYBBycjIiY9ATQ2MyEBFxYUDwEGJj0BIyc3FzM1NDYEb%2FkPD%2FkOFZ%2F9qP7dFR0dFdECWPEV%2FamNetEVHR0VASMDGvkPD%2FkOFfG1jXqfFQSN5g4qDuYOCBWW%2FagdFWQVHQJYlhUI%2FpiNeh0VZBUd%2Fk3mDioO5g4IFZa1jXqWFQgAAAABAAAAAASwBEwAEgAAEyEyFhURFAYjIQERIyImNRE0NmQD6Ck7Oyn9rP7QZCk7OwRMOyn9qCk7%2FtQBLDspAlgpOwAAAAMAZAAABEwEsAAJABMAPwAAEzMyFh0BITU0NiEzMhYdASE1NDYBERQOBSIuBTURIRUUFRwBHgYyPgYmNTQ9AZbIFR3%2B1B0C0cgVHf7UHQEPBhgoTGacwJxmTCgYBgEsAwcNFB8nNkI2Jx8TDwUFAQSwHRX6%2BhUdHRX6%2BhUd%2FnD%2B1ClJalZcPigoPlxWakkpASz6CRIVKyclIRsWEAgJEBccISUnKhURCPoAAAAB%2F%2F8A1ARMA8IABQAAAQcJAScBBEzG%2Fp%2F%2Bn8UCJwGbxwFh%2Fp%2FHAicAAQAAAO4ETQPcAAUAAAkCNwkBBE392v3ZxgFhAWEDFf3ZAifH%2Fp8BYQAAAAAC%2F1EAZAVfA%2BgAFAApAAABITIWFREzMhYPAQYiLwEmNjsBESElFxYGKwERIRchIiY1ESMiJj8BNjIBlALqFR2WFQgO5g4qDuYOCBWW%2FoP%2BHOYOCBWWAYHX%2FRIVHZYVCA7mDioD6B0V%2FdkVDvkPD%2FkOFQGRuPkOFf5wyB0VAiYVDvkPAAABAAYAAASeBLAAMAAAEzMyFh8BITIWBwMOASMhFyEyFhQGKwEVFAYiJj0BIRUUBiImPQEjIiYvAQMjIiY0NjheERwEJgOAGB4FZAUsIf2HMAIXFR0dFTIdKh3%2B1B0qHR8SHQYFyTYUHh4EsBYQoiUY%2FiUVK8gdKh0yFR0dFTIyFR0dFTIUCQoDwR0qHQAAAAACAAAAAASwBEwACwAPAAABFSE1MzQ2MyEyFhUFIREhBLD7UMg7KQEsKTv9RASw%2B1AD6GRkKTs7Kcj84AACAAAAAAXcBEwADAAQAAATAxEzNDYzITIWFSEVBQEhAcjIyDspASwqOgH0ASz%2B1PtQASwDIP5wAlgpOzspyGT9RAK8AAEBRQAAA2sErwAbAAABFxYGKwERMzIWDwEGIi8BJjY7AREjIiY%2FATYyAnvmDggVlpYVCA7mDioO5g4IFZaWFQgO5g4qBKD5DhX9pxUO%2BQ8P%2BQ4VAlkVDvkPAAAAAQABAUQErwNrABsAAAEXFhQPAQYmPQEhFRQGLwEmND8BNhYdASE1NDYDqPkODvkPFf2oFQ%2F5Dg75DxUCWBUDYOUPKQ%2FlDwkUl5cUCQ%2FlDykP5Q8JFZWVFQkAAAAEAAAAAASwBLAACQAZAB0AIQAAAQMuASMhIgYHAwUhIgYdARQWMyEyNj0BNCYFNTMVMzUzFQSRrAUkFP1gFCQFrAQt%2FBgpOzspA%2BgpOzv%2Bq2RkZAGQAtwXLSgV%2FR1kOylkKTs7KWQpO8hkZGRkAAAAA%2F%2BcAGQEsARMAAsAIwAxAAAAMhYVERQGIiY1ETQDJSMTFgYjIisBIiYnAj0BNDU0PgE7ASUBFSIuAz0BND4CNwRpKh0dKh1k%2FV0mLwMRFQUCVBQdBDcCCwzIAqP8GAQOIhoWFR0dCwRMHRX8rhUdHRUDUhX8mcj%2B7BAIHBUBUQ76AgQQDw36%2FtT6AQsTKRwyGigUDAEAAAACAEoAAARmBLAALAA1AAABMzIWDwEeARcTFzMyFhQGBw4EIyIuBC8BLgE0NjsBNxM%2BATcnJjYDFjMyNw4BIiYCKV4UEgYSU3oPP3YRExwaEggeZGqfTzl0XFU%2BLwwLEhocExF2Pw96UxIGEyQyNDUxDDdGOASwFRMlE39N%2FrmtHSkoBwQLHBYSCg4REg4FBAgoKR2tAUdNfhQgExr7vgYGMT09AAEAFAAUBJwEnAAXAAABNwcXBxcHFycHJwcnBzcnNyc3Jxc3FzcDIOBO6rS06k7gLZubLeBO6rS06k7gLZubA7JO4C2bmy3gTuq0tOpO4C2bmy3gTuq0tAADAAAAZASwBLAAIQAtAD0AAAEzMhYdAQchMhYdARQHAw4BKwEiJi8BIyImNRE0PwI%2BARcPAREzFzMTNSE3NQEzMhYVERQGKwEiJjURNDYCijIoPBwBSCg8He4QLBf6B0YfHz0tNxSRYA0xG2SWZIjW%2Bv4%2BMv12ZBUdHRVkFR0dBLBRLJZ9USxkLR3%2BqBghMhkZJCcBkCQbxMYcKGTU1f6JZAF3feGv%2FtQdFf4MFR0dFQH0FR0AAAAAAwAAAAAEsARMACAAMAA8AAABMzIWFxMWHQEUBiMhFh0BFAYrASImLwImNRE0NjsBNgUzMhYVERQGKwEiJjURNDYhByMRHwEzNSchNQMCWPoXLBDuHTwo%2FrgcPCgyGzENYJEUNy09fP3pZBUdHRVkFR0dAl%2BIZJZkMjIBwvoETCEY%2FqgdLWQsUXYHlixRKBzGxBskAZAnJGRkHRX%2BDBUdHRUB9BUdZP6J1dSv4X0BdwADAAAAZAUOBE8AGwA3AEcAAAElNh8BHgEPASEyFhQGKwEDDgEjISImNRE0NjcXERchEz4BOwEyNiYjISoDLgQnJj8BJwUzMhYVERQGKwEiJjURNDYBZAFrHxZuDQEMVAEuVGxuVGqDBhsP%2FqoHphwOOmQBJYMGGw%2FLFRMSFv44AgoCCQMHAwUDAQwRklb9T2QVHR0VZBUdHQNp5hAWcA0mD3lMkE7%2BrRUoog0CDRElCkj%2BCVkBUxUoMjIBAgIDBQIZFrdT5B0V%2FgwVHR0VAfQVHQAAAAP%2FnABkBLAETwAdADYARgAAAQUeBBURFAYjISImJwMjIiY0NjMhJyY2PwE2BxcWBw4FKgIjIRUzMhYXEyE3ESUFMzIWFREUBisBIiY1ETQ2AdsBbgIIFBANrAf%2Bqg8bBoNqVW1sVAEuVQsBDW4WSpIRDAIDBQMHAwkDCgH%2BJd0PHAaCASZq%2FqoCUGQVHR0VZBUdHQRP5gEFEBEXC%2F3zDaIoFQFTTpBMeQ8mDXAWrrcWGQIFAwICAWQoFf6tWQH37OQdFf4MFR0dFQH0FR0AAAADAGEAAARMBQ4AGwA3AEcAAAAyFh0BBR4BFREUBiMhIiYvAQMmPwE%2BAR8BETQXNTQmBhURHAMOBAcGLwEHEyE3ESUuAQMhMhYdARQGIyEiJj0BNDYB3pBOAVMVKKIN%2FfMRJQoJ5hAWcA0mD3nGMjIBAgIDBQIZFrdT7AH3Wf6tFSiWAfQVHR0V%2FgwVHR0FDm5UaoMGGw%2F%2BqgemHA4OAWsfFm4NAQxUAS5U1ssVExIW%2FjgCCgIJAwcDBQMBDBGSVv6tZAElgwYb%2FQsdFWQVHR0VZBUdAAP%2F%2FQAGA%2BgFFAAPAC0ASQAAASEyNj0BNCYjISIGHQEUFgEVFAYiJjURBwYmLwEmNxM%2BBDMhMhYVERQGBwEDFzc2Fx4FHAIVERQWNj0BNDY3JREnAV4B9BUdHRX%2BDBUdHQEPTpBMeQ8mDXAWEOYBBRARFwsCDQ2iKBX9iexTtxYZAgUDAgIBMjIoFQFTWQRMHRVkFR0dFWQVHfzmalRubFQBLlQMAQ1uFh8BawIIEw8Mpgf%2Bqg8bBgHP%2Fq1WkhEMAQMFAwcDCQIKAv44FhITFcsPGwaDASVkAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEBJSYGHQEhIgYdARQWMyEVFBY3JTY0AeLs1ptbW5vW7NabW1ubAob%2B7RAX%2Fu0KDw8KARMXEAETEASaW5vW7NabW1ub1uzWm%2F453w0KFYkPCpYKD4kVCg3fDSYAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgENAQYUFwUWNj0BITI2PQE0JiMhNTQmAeLs1ptbW5vW7NabW1ubASX%2B7RAQARMQFwETCg8PCv7tFwSaW5vW7NabW1ub1uzWm%2BjfDSYN3w0KFYkPCpYKD4kVCgAAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEBAyYiBwMGFjsBERQWOwEyNjURMzI2AeLs1ptbW5vW7NabW1ubAkvfDSYN3w0KFYkPCpYKD4kVCgSaW5vW7NabW1ub1uzWm%2F5AARMQEP7tEBf%2B7QoPDwoBExcAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEFIyIGFREjIgYXExYyNxM2JisBETQmAeLs1ptbW5vW7NabW1ubAZeWCg%2BJFQoN3w0mDd8NChWJDwSaW5vW7NabW1ub1uzWm7sPCv7tFxD%2B7RAQARMQFwETCg8AAAMAGAAYBJgEmAAPAJYApgAAADIeAhQOAiIuAjQ%2BASUOAwcGJgcOAQcGFgcOAQcGFgcUFgcyHgEXHgIXHgI3Fg4BFx4CFxQGFBcWNz4CNy4BJy4BJyIOAgcGJyY2NS4BJzYuAQYHBicmNzY3HgIXHgMfAT4CJyY%2BATc%2BAzcmNzIWMjY3LgMnND4CJiceAT8BNi4CJwYHFB4BFS4CJz4BNxYyPgEB5OjVm1xcm9Xo1ZtcXJsBZA8rHDoKDz0PFD8DAxMBAzEFCRwGIgEMFhkHECIvCxU%2FOR0HFBkDDRQjEwcFaHUeISQDDTAMD0UREi4oLBAzDwQBBikEAQMLGhIXExMLBhAGKBsGBxYVEwYFAgsFAwMNFwQGCQcYFgYQCCARFwkKKiFBCwQCAQMDHzcLDAUdLDgNEiEQEgg%2FKhADGgMKEgoRBJhcm9Xo1ZtcXJvV6NWbEQwRBwkCAwYFBycPCxcHInIWInYcCUcYChQECA4QBAkuHgQPJioRFRscBAcSCgwCch0kPiAIAQcHEAsBAgsLIxcBMQENCQIPHxkCFBkdHB4QBgEBBwoMGBENBAMMJSAQEhYXDQ4qFBkKEhIDCQsXJxQiBgEOCQwHAQ0DBAUcJAwSCwRnETIoAwEJCwsLJQcKDBEAAAAAAQAAAAIErwSFABYAAAE2FwUXNxYGBw4BJwEGIi8BJjQ3ASY2AvSkjv79kfsGUE08hjv9rA8rD28PDwJYIk8EhVxliuh%2BWYcrIgsW%2FawQEG4PKxACV2XJAAYAAABgBLAErAAPABMAIwAnADcAOwAAEyEyFh0BFAYjISImPQE0NgUjFTMFITIWHQEUBiMhIiY9ATQ2BSEVIQUhMhYdARQGIyEiJj0BNDYFIRUhZAPoKTs7KfwYKTs7BBHIyPwYA%2BgpOzsp%2FBgpOzsEEf4MAfT8GAPoKTs7KfwYKTs7BBH%2B1AEsBKw7KWQpOzspZCk7ZGTIOylkKTs7KWQpO2RkyDspZCk7OylkKTtkZAAAAAIAZAAABEwEsAALABEAABMhMhYUBiMhIiY0NgERBxEBIZYDhBUdHRX8fBUdHQI7yP6iA4QEsB0qHR0qHf1E%2FtTIAfQB9AAAAAMAAABkBLAEsAAXABsAJQAAATMyFh0BITIWFREhNSMVIRE0NjMhNTQ2FxUzNQEVFAYjISImPQEB9MgpOwEsKTv%2BDMj%2BDDspASw7KcgB9Dsp%2FBgpOwSwOylkOyn%2BcGRkAZApO2QpO2RkZP1EyCk7OynIAAAABAAAAAAEsASwABUAKwBBAFcAABMhMhYPARcWFA8BBiIvAQcGJjURNDYpATIWFREUBi8BBwYiLwEmND8BJyY2ARcWFA8BFxYGIyEiJjURNDYfATc2MgU3NhYVERQGIyEiJj8BJyY0PwE2MhcyASwVCA5exwcHaggUCMdeDhUdAzUBLBUdFQ5exwgUCGoHB8deDgj%2BL2oHB8deDggV%2FtQVHRUOXscIFALLXg4VHRX%2B1BUIDl7HBwdqCBQIBLAVDl7HCBQIagcHx14OCBUBLBUdHRX%2B1BUIDl7HBwdqCBQIx14OFf0maggUCMdeDhUdFQEsFQgOXscHzl4OCBX%2B1BUdFQ5exwgUCGoHBwAAAAYAAAAABKgEqAAPABsAIwA7AEMASwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JiQyFhQGIiY0JDIWFAYjIicHFhUUBiImNTQ2PwImNTQEMhYUBiImNCQyFhQGIiY0Advy3Z9fX5%2Fd8t2gXl6gAcbgv29vv%2BC%2Fb2%2F%2BLS0gIC0gAUwtICAWDg83ETNIMykfegEJ%2FoctICAtIAIdLSAgLSAEqF%2Bf3fLdoF5eoN3y3Z9Xb7%2Fgv29vv%2BC%2FBiAtISEtICAtIQqRFxwkMzMkIDEFfgEODhekIC0gIC0gIC0gIC0AAf%2FYAFoEuQS8AFsAACUBNjc2JicmIyIOAwcABw4EFx4BMzI3ATYnLgEjIgcGBwEOASY0NwA3PgEzMhceARcWBgcOBgcGIyImJyY2NwE2NzYzMhceARcWBgcBDgEnLgECIgHVWwgHdl8WGSJBMD8hIP6IDx4eLRMNBQlZN0ozAiQkEAcdEhoYDRr%2Bqw8pHA4BRyIjQS4ODyw9DQ4YIwwod26La1YOOEBGdiIwGkQB%2F0coW2tQSE5nDxE4Qv4eDyoQEAOtAdZbZWKbEQQUGjIhH%2F6JDxsdNSg3HT5CMwIkJCcQFBcMGv6uDwEcKQ4BTSIjIQEINykvYyMLKnhuiWZMBxtAOU6%2BRAH%2FSBg3ISSGV121Qv4kDwIPDyYAAAACAGQAWASvBEQAGQBEAAABPgIeAhUUDgMHLgQ1ND4CHgEFIg4DIi4DIyIGFRQeAhcWFx4EMj4DNzY3PgQ1NCYCiTB7eHVYNkN5hKg%2BPqeFeEM4WnZ4eQEjIT8yLSohJyktPyJDbxtBMjMPBw86KzEhDSIzKUAMBAgrKT8dF2oDtURIBS1TdkA5eYB%2FslVVsn%2BAeTlAdlMtBUgtJjY1JiY1NiZvTRc4SjQxDwcOPCouGBgwKEALBAkpKkQqMhNPbQACADn%2F8gR3BL4AFwAuAAAAMh8BFhUUBg8BJi8BNycBFwcvASY0NwEDNxYfARYUBwEGIi8BJjQ%2FARYfAQcXAQKru0KNQjgiHR8uEl%2F3%2FnvUaRONQkIBGxJpCgmNQkL%2B5UK6Qo1CQjcdLhJf9wGFBL5CjUJeKmsiHTUuEl%2F4%2FnvUahKNQrpCARv%2BRmkICY1CukL%2B5UJCjUK7Qjc3LxFf%2BAGFAAAAAAMAyAAAA%2BgEsAARABUAHQAAADIeAhURFAYjISImNRE0PgEHESERACIGFBYyNjQCBqqaZDo7Kf2oKTs8Zj4CWP7%2FVj09Vj0EsB4uMhX8Ryk7OykDuRUzLar9RAK8%2FRY9Vj09VgABAAAAAASwBLAAFgAACQEWFAYiLwEBEScBBRMBJyEBJyY0NjIDhgEbDx0qDiT%2B6dT%2BzP7oywEz0gEsAQsjDx0qBKH%2B5g8qHQ8j%2FvX%2B1NL%2BzcsBGAE01AEXJA4qHQAAAAADAScAEQQJBOAAMgBAAEsAAAEVHgQXIy4DJxEXHgQVFAYHFSM1JicuASczHgEXEScuBDU0PgI3NRkBDgMVFB4DFxYXET4ENC4CArwmRVI8LAKfBA0dMydAIjxQNyiym2SWVygZA4sFV0obLkJOMCAyVWg6HSoqFQ4TJhkZCWgWKTEiGBkzNwTgTgUTLD9pQiQuLBsH%2Fs0NBxMtPGQ%2Bi6oMTU8QVyhrVk1iEAFPCA4ZLzlYNkZwSCoGTf4SARIEDh02Jh0rGRQIBgPQ%2FsoCCRYgNEM0JRkAAAABAGQAZgOUBK0ASgAAATIeARUjNC4CIyIGBwYVFB4BFxYXMxUjFgYHBgc%2BATM2FjMyNxcOAyMiLgEHDgEPASc%2BBTc%2BAScjNTMmJy4CPgE3NgIxVJlemSc8OxolVBQpGxoYBgPxxQgVFS02ImIWIIwiUzUyHzY4HCAXanQmJ1YYFzcEGAcTDBEJMAwk3aYXFQcKAg4tJGEErVCLTig%2FIhIdFSw5GkowKgkFZDKCHj4yCg8BIh6TExcIASIfBAMaDAuRAxAFDQsRCjePR2QvORQrREFMIVgAAAACABn%2F%2FwSXBLAADwAfAAABMzIWDwEGIi8BJjY7AREzBRcWBisBESMRIyImPwE2MgGQlhUIDuYOKg7mDggVlsgCF%2BYOCBWWyJYVCA7mDioBLBYO%2Bg8P%2Bg4WA4QQ%2BQ4V%2FHwDhBUO%2BQ8AAAQAGf%2F%2FA%2BgEsAAHABcAGwAlAAABIzUjFSMRIQEzMhYPAQYiLwEmNjsBETMFFTM1EwczFSE1NyM1IQPoZGRkASz9qJYVCA7mDioO5g4IFZbIAZFkY8jI%2FtTIyAEsArxkZAH0%2FHwWDvoPD%2FoOFgOEZMjI%2FRL6ZJb6ZAAAAAAEABn%2F%2FwPoBLAADwAZACEAJQAAATMyFg8BBiIvASY2OwERMwUHMxUhNTcjNSERIzUjFSMRIQcVMzUBkJYVCA7mDioO5g4IFZbIAljIyP7UyMgBLGRkZAEsx2QBLBYO%2Bg8P%2Bg4WA4SW%2BmSW%2BmT7UGRkAfRkyMgAAAAEABn%2F%2FwRMBLAADwAVABsAHwAAATMyFg8BBiIvASY2OwERMwEjESM1MxMjNSMRIQcVMzUBkJYVCA7mDioO5g4IFZbIAlhkZMhkZMgBLMdkASwWDvoPD%2FoOFgOE%2FgwBkGT7UGQBkGTIyAAAAAAEABn%2F%2FwRMBLAADwAVABkAHwAAATMyFg8BBiIvASY2OwERMwEjNSMRIQcVMzUDIxEjNTMBkJYVCA7mDioO5g4IFZbIArxkyAEsx2QBZGTIASwWDvoPD%2FoOFgOE%2FgxkAZBkyMj7tAGQZAAAAAAFABn%2F%2FwSwBLAADwATABcAGwAfAAABMzIWDwEGIi8BJjY7AREzBSM1MxMhNSETITUhEyE1IQGQlhUIDuYOKg7mDggVlsgB9MjIZP7UASxk%2FnABkGT%2BDAH0ASwWDvoPD%2FoOFgOEyMj%2BDMj%2BDMj%2BDMgABQAZ%2F%2F8EsASwAA8AEwAXABsAHwAAATMyFg8BBiIvASY2OwERMwUhNSEDITUhAyE1IQMjNTMBkJYVCA7mDioO5g4IFZbIAyD%2BDAH0ZP5wAZBk%2FtQBLGTIyAEsFg76Dw%2F6DhYDhMjI%2FgzI%2FgzI%2FgzIAAIAAAAABEwETAAPAB8AAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmAV4BkKK8u6P%2BcKW5uQJn%2FgwpOzspAfQpOzsETLuj%2FnClubmlAZClucg7Kf4MKTs7KQH0KTsAAAAAAwAAAAAETARMAA8AHwArAAABITIWFREUBiMhIiY1ETQ2BSEiBhURFBYzITI2NRE0JgUXFhQPAQYmNRE0NgFeAZClubml%2FnCju7wCZP4MKTs7KQH0KTs7%2Fm%2F9ERH9EBgYBEy5pf5wpbm5pQGQo7vIOyn%2BDCk7OykB9Ck7gr4MJAy%2BDAsVAZAVCwAAAAADAAAAAARMBEwADwAfACsAAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmBSEyFg8BBiIvASY2AV4BkKO7uaX%2BcKW5uQJn%2FgwpOzspAfQpOzv%2BFQGQFQsMvgwkDL4MCwRMvKL%2BcKW5uaUBkKO7yDsp%2FgwpOzspAfQpO8gYEP0REf0QGAAAAAMAAAAABEwETAAPAB8AKwAAASEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCYFFxYGIyEiJj8BNjIBXgGQpbm5pf5wo7u5Amf%2BDCk7OykB9Ck7O%2F77vgwLFf5wFQsMvgwkBEy5pf5wo7u8ogGQpbnIOyn%2BDCk7OykB9Ck7z%2F0QGBgQ%2FREAAAAAAgAAAAAFFARMAB8ANQAAASEyFhURFAYjISImPQE0NjMhMjY1ETQmIyEiJj0BNDYHARYUBwEGJj0BIyImPQE0NjsBNTQ2AiYBkKW5uaX%2BcBUdHRUBwik7Oyn%2BPhUdHb8BRBAQ%2FrwQFvoVHR0V%2BhYETLml%2FnCluR0VZBUdOykB9Ck7HRVkFR3p%2FuQOJg7%2B5A4KFZYdFcgVHZYVCgAAAQDZAAID1wSeACMAAAEXFgcGAgclMhYHIggBBwYrAScmNz4BPwEhIicmNzYANjc2MwMZCQgDA5gCASwYEQ4B%2Fvf%2B8wQMDgkJCQUCUCcn%2FtIXCAoQSwENuwUJEASeCQoRC%2F5TBwEjEv7K%2FsUFDwgLFQnlbm4TFRRWAS%2FTBhAAAAACAAAAAAT%2BBEwAHwA1AAABITIWHQEUBiMhIgYVERQWMyEyFh0BFAYjISImNRE0NgUBFhQHAQYmPQEjIiY9ATQ2OwE1NDYBXgGQFR0dFf4%2BKTs7KQHCFR0dFf5wpbm5AvEBRBAQ%2FrwQFvoVHR0V%2BhYETB0VZBUdOyn%2BDCk7HRVkFR25pQGQpbnp%2FuQOJg7%2B5A4KFZYdFcgVHZYVCgACAAAAAASwBLAAFQAxAAABITIWFREUBi8BAQYiLwEmNDcBJyY2ASMiBhURFBYzITI2PQE3ERQGIyEiJjURNDYzIQLuAZAVHRUObf7IDykPjQ8PAThtDgj%2B75wpOzspAfQpO8i7o%2F5wpbm5pQEsBLAdFf5wFQgObf7IDw%2BNDykPAThtDhX%2B1Dsp%2FgwpOzsplMj%2B1qW5uaUBkKW5AAADAA4ADgSiBKIADwAbACMAAAAyHgIUDgIiLgI0PgEEIg4BFB4BMj4BNCYEMhYUBiImNAHh7tmdXV2d2e7ZnV1dnQHD5sJxccLmwnFx%2FnugcnKgcgSiXZ3Z7tmdXV2d2e7ZnUdxwubCcXHC5sJzcqBycqAAAAMAAAAABEwEsAAVAB8AIwAAATMyFhURMzIWBwEGIicBJjY7ARE0NgEhMhYdASE1NDYFFTM1AcLIFR31FAoO%2FoEOJw3%2BhQ0JFfod%2FoUD6BUd%2B7QdA2dkBLAdFf6iFg%2F%2BVg8PAaoPFgFeFR38fB0V%2BvoVHWQyMgAAAAMAAAAABEwErAAVAB8AIwAACQEWBisBFRQGKwEiJj0BIyImNwE%2BAQEhMhYdASE1NDYFFTM1AkcBeg4KFfQiFsgUGPoUCw4Bfw4n%2FfkD6BUd%2B7QdA2dkBJ7%2BTQ8g%2BhQeHRX6IQ8BrxAC%2FH8dFfr6FR1kMjIAAwAAAAAETARLABQAHgAiAAAJATYyHwEWFAcBBiInASY0PwE2MhcDITIWHQEhNTQ2BRUzNQGMAXEHFQeLBwf98wcVB%2F7cBweLCBUH1APoFR37tB0DZ2QC0wFxBweLCBUH%2FfMICAEjCBQIiwcH%2FdIdFfr6FR1kMjIABAAAAAAETASbAAkAGQAjACcAABM3NjIfAQcnJjQFNzYWFQMOASMFIiY%2FASc3ASEyFh0BITU0NgUVMzWHjg4qDk3UTQ4CFtIOFQIBHRX9qxUIDtCa1P49A%2BgVHfu0HQNnZAP%2Fjg4OTdRMDyqa0g4IFf2pFB4BFQ7Qm9T9Oh0V%2BvoVHWQyMgAAAAQAAAAABEwEsAAPABkAIwAnAAABBR4BFRMUBi8BByc3JyY2EwcGIi8BJjQ%2FAQEhMhYdASE1NDYFFTM1AV4CVxQeARUO0JvUm9IOCMNMDyoOjg4OTf76A%2BgVHfu0HQNnZASwAgEdFf2rFQgO0JrUmtIOFf1QTQ4Ojg4qDk3%2BWB0V%2BvoVHWQyMgACAAT%2F7ASwBK8ABQAIAAAlCQERIQkBFQEEsP4d%2Fsb%2BcQSs%2FTMCq2cBFP5xAacDHPz55gO5AAAAAAIAAABkBEwEsAAVABkAAAERFAYrAREhESMiJjURNDY7AREhETMHIzUzBEwdFZb9RJYVHR0V%2BgH0ZMhkZAPo%2FK4VHQGQ%2FnAdFQPoFB7%2B1AEsyMgAAAMAAABFBN0EsAAWABoALwAAAQcBJyYiDwEhESMiJjURNDY7AREhETMHIzUzARcWFAcBBiIvASY0PwE2Mh8BATYyBEwC%2FtVfCRkJlf7IlhUdHRX6AfRkyGRkAbBqBwf%2BXAgUCMoICGoHFQdPASkHFQPolf7VXwkJk%2F5wHRUD6BQe%2FtQBLMjI%2Fc5qBxUH%2FlsHB8sHFQdqCAhPASkHAAMAAAANBQcEsAAWABoAPgAAAREHJy4BBwEhESMiJjURNDY7AREhETMHIzUzARcWFA8BFxYUDwEGIi8BBwYiLwEmND8BJyY0PwE2Mh8BNzYyBExnhg8lEP72%2FreWFR0dFfoB9GTIZGQB9kYPD4ODDw9GDykPg4MPKQ9GDw%2BDgw8PRg8pD4ODDykD6P7zZ4YPAw7%2B9v5wHRUD6BQe%2FtQBLMjI%2FYxGDykPg4MPKQ9GDw%2BDgw8PRg8pD4ODDykPRg8Pg4MPAAADAAAAFQSXBLAAFQAZAC8AAAERISIGHQEhESMiJjURNDY7AREhETMHIzUzEzMyFh0BMzIWDwEGIi8BJjY7ATU0NgRM%2FqIVHf4MlhUdHRX6AfRkyGRklmQVHZYVCA7mDioO5g4IFZYdA%2Bj%2B1B0Vlv5wHRUD6BQe%2FtQBLMjI%2FagdFfoVDuYODuYOFfoVHQAAAAADAAAAAASXBLAAFQAZAC8AAAERJyYiBwEhESMiJjURNDY7AREhETMHIzUzExcWBisBFRQGKwEiJj0BIyImPwE2MgRMpQ4qDv75%2Fm6WFR0dFfoB9GTIZGTr5g4IFZYdFWQVHZYVCA7mDioD6P5wpQ8P%2Fvf%2BcB0VA%2BgUHv7UASzIyP2F5Q8V%2BhQeHhT6FQ%2FlDwADAAAAyASwBEwACQATABcAABMhMhYdASE1NDYBERQGIyEiJjURExUhNTIETBUd%2B1AdBJMdFfu0FR1kAZAETB0VlpYVHf7U%2FdoVHR0VAib%2B1MjIAAAGAAMAfQStBJcADwAZAB0ALQAxADsAAAEXFhQPAQYmPQEhNSE1NDYBIyImPQE0NjsBFyM1MwE3NhYdASEVIRUUBi8BJjQFIzU7AjIWHQEUBisBA6f4Dg74DhX%2BcAGQFf0vMhUdHRUyyGRk%2FoL3DhUBkP5wFQ73DwOBZGRkMxQdHRQzBI3mDioO5g4IFZbIlhUI%2FoUdFWQVHcjI%2FcvmDggVlsiWFQgO5g4qecgdFWQVHQAAAAACAGQAAASwBLAAFgBRAAABJTYWFREUBisBIiY1ES4ENRE0NiUyFh8BERQOAg8BERQGKwEiJjURLgQ1ETQ%2BAzMyFh8BETMRPAE%2BAjMyFh8BETMRND4DA14BFBklHRXIFR0EDiIaFiX%2B4RYZAgEVHR0LCh0VyBUdBA4iGhYBBwoTDRQZAgNkBQkVDxcZAQFkAQUJFQQxdBIUH%2FuuFR0dFQGNAQgbHzUeAWcfRJEZDA3%2BPhw%2FMSkLC%2F5BFR0dFQG%2FBA8uLkAcAcICBxENCxkMDf6iAV4CBxENCxkMDf6iAV4CBxENCwABAGQAAASwBEwAMwAAARUiDgMVERQWHwEVITUyNjURIREUFjMVITUyPgM1ETQmLwE1IRUiBhURIRE0JiM1BLAEDiIaFjIZGf5wSxn%2BDBlL%2FnAEDiIaFjIZGQGQSxkB9BlLBEw4AQUKFA78iBYZAQI4OA0lAYr%2BdiUNODgBBQoUDgN4FhkBAjg4DSX%2BdgGKJQ04AAAABgAAAAAETARMAAwAHAAgACQAKAA0AAABITIWHQEjBTUnITchBSEyFhURFAYjISImNRE0NhcVITUBBTUlBRUhNQUVFAYjIQchJyE3MwKjAXcVHWn%2B2cj%2BcGQBd%2F4lASwpOzsp%2FtQpOzspASwCvP5wAZD8GAEsArwdFf6JZP6JZAGQyGkD6B0VlmJiyGTIOyn%2BDCk7OykB9Ck7ZMjI%2FveFo4XGyMhm%2BBUdZGTIAAEAEAAQBJ8EnwAmAAATNzYWHwEWBg8BHgEXNz4BHwEeAQ8BBiIuBicuBTcRohEuDosOBhF3ZvyNdxEzE8ATBxGjAw0uMUxPZWZ4O0p3RjITCwED76IRBhPCFDERdo78ZXYRBA6IDi8RogEECBUgNUNjO0qZfHNVQBAAAAACAAAAAASwBEwAIwBBAAAAMh4EHwEVFAYvAS4BPQEmIAcVFAYPAQYmPQE%2BBRIyHgIfARUBHgEdARQGIyEiJj0BNDY3ATU0PgIB%2FLimdWQ%2FLAkJHRTKFB2N%2FsKNHRTKFB0DDTE7ZnTKcFImFgEBAW0OFR0V%2B7QVHRUOAW0CFiYETBUhKCgiCgrIFRgDIgMiFZIYGJIVIgMiAxgVyAQNJyQrIP7kExwcCgoy%2FtEPMhTUFR0dFdQUMg8BLzIEDSEZAAADAAAAAASwBLAADQAdACcAAAEHIScRMxUzNTMVMzUzASEyFhQGKwEXITcjIiY0NgMhMhYdASE1NDYETMj9qMjIyMjIyPyuArwVHR0VDIn8SokMFR0dswRMFR37UB0CvMjIAfTIyMjI%2FOAdKh1kZB0qHf7UHRUyMhUdAAAAAwBkAAAEsARMAAkAEwAdAAABIyIGFREhETQmASMiBhURIRE0JgEhETQ2OwEyFhUCvGQpOwEsOwFnZCk7ASw7%2FRv%2B1DspZCk7BEw7KfwYA%2BgpO%2F7UOyn9RAK8KTv84AGQKTs7KQAAAAAF%2F5wAAASwBEwADwATAB8AJQApAAATITIWFREUBiMhIiY1ETQ2FxEhEQUjFTMRITUzNSMRIQURByMRMwcRMxHIArx8sLB8%2FUR8sLAYA4T%2BDMjI%2FtTIyAEsAZBkyMhkZARMsHz%2BDHywsHwB9HywyP1EArzIZP7UZGQBLGT%2B1GQB9GT%2B1AEsAAAABf%2BcAAAEsARMAA8AEwAfACUAKQAAEyEyFhURFAYjISImNRE0NhcRIREBIzUjFSMRMxUzNTMFEQcjETMHETMRyAK8fLCwfP1EfLCwGAOE%2FgxkZGRkZGQBkGTIyGRkBEywfP4MfLCwfAH0fLDI%2FUQCvP2oyMgB9MjIZP7UZAH0ZP7UASwABP%2BcAAAEsARMAA8AEwAbACMAABMhMhYVERQGIyEiJjURNDYXESERBSMRMxUhESEFIxEzFSERIcgCvHywsHz9RHywsBgDhP4MyMj%2B1AEsAZDIyP7UASwETLB8%2Fgx8sLB8AfR8sMj9RAK8yP7UZAH0ZP7UZAH0AAAABP%2BcAAAEsARMAA8AEwAWABkAABMhMhYVERQGIyEiJjURNDYXESERAS0BDQERyAK8fLCwfP1EfLCwGAOE%2Fgz%2B1AEsAZD%2B1ARMsHz%2BDHywsHwB9HywyP1EArz%2BDJaWlpYBLAAAAAX%2FnAAABLAETAAPABMAFwAgACkAABMhMhYVERQGIyEiJjURNDYXESERAyERIQcjIgYVFBY7AQERMzI2NTQmI8gCvHywsHz9RHywsBgDhGT9RAK8ZIImOTYpgv4Mgik2OSYETLB8%2Fgx8sLB8AfR8sMj9RAK8%2FagB9GRWQUFUASz%2B1FRBQVYAAAAF%2F5wAAASwBEwADwATAB8AJQApAAATITIWFREUBiMhIiY1ETQ2FxEhEQUjFTMRITUzNSMRIQEjESM1MwMjNTPIArx8sLB8%2FUR8sLAYA4T%2BDMjI%2FtTIyAEsAZBkZMjIZGQETLB8%2Fgx8sLB8AfR8sMj9RAK8yGT%2B1GRkASz%2BDAGQZP4MZAAG%2F5wAAASwBEwADwATABkAHwAjACcAABMhMhYVERQGIyEiJjURNDYXESERBTMRIREzASMRIzUzBRUzNQEjNTPIArx8sLB8%2FUR8sLAYA4T9RMj%2B1GQCWGRkyP2oZAEsZGQETLB8%2Fgx8sLB8AfR8sMj9RAK8yP5wAfT%2BDAGQZMjIyP7UZAAF%2F5wAAASwBEwADwATABwAIgAmAAATITIWFREUBiMhIiY1ETQ2FxEhEQEHIzU3NSM1IQEjESM1MwMjNTPIArx8sLB8%2FUR8sLAYA4T%2BDMdkx8gBLAGQZGTIx2RkBEywfP4MfLCwfAH0fLDI%2FUQCvP5wyDLIlmT%2BDAGQZP4MZAAAAAMACQAJBKcEpwAPABsAJQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgchFSEVISc1NyEB4PDbnl5entvw255eXp4BxeTCcXHC5MJxcWz%2B1AEs%2FtRkZAEsBKdentvw255eXp7b8NueTHHC5MJxccLkwtDIZGTIZAAAAAAEAAkACQSnBKcADwAbACcAKwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgcVBxcVIycjFSMRIQcVMzUB4PDbnl5entvw255eXp4BxeTCcXHC5MJxcWwyZGRklmQBLMjIBKdentvw255eXp7b8NueTHHC5MJxccLkwtBkMmQyZGQBkGRkZAAAAv%2Fy%2F50EwgRBACAANgAAATIWFzYzMhYUBisBNTQmIyEiBh0BIyImNTQ2NyY1ND4BEzMyFhURMzIWDwEGIi8BJjY7ARE0NgH3brUsLC54qqp4gB0V%2FtQVHd5QcFZBAmKqepYKD4kVCg3fDSYN3w0KFYkPBEF3YQ6t8a36FR0dFfpzT0VrDhMSZKpi%2FbMPCv7tFxD0EBD0EBcBEwoPAAAAAAL%2F8v%2BcBMMEQQAcADMAAAEyFhc2MzIWFxQGBwEmIgcBIyImNTQ2NyY1ND4BExcWBisBERQGKwEiJjURIyImNzY3NjIB9m62LCsueaoBeFr%2Bhg0lDf6DCU9xVkECYqnm3w0KFYkPCpYKD4kVCg3HGBMZBEF3YQ%2BteGOkHAFoEBD%2Bk3NPRWsOExNkqWP9kuQQF%2F7tCg8PCgETFxDMGBMAAAABAGQAAARMBG0AGAAAJTUhATMBMwkBMwEzASEVIyIGHQEhNTQmIwK8AZD%2B8qr%2B8qr%2B1P7Uqv7yqv7yAZAyFR0BkB0VZGQBLAEsAU3%2Bs%2F7U%2FtRkHRUyMhUdAAAAAAEAeQAABDcEmwAvAAABMhYXHgEVFAYHFhUUBiMiJxUyFh0BITU0NjM1BiMiJjU0Ny4BNTQ2MzIXNCY1NDYCWF6TGll7OzIJaUo3LRUd%2FtQdFS03SmkELzlpSgUSAqMEm3FZBoNaPWcfHRpKaR77HRUyMhUd%2Bx5pShIUFVg1SmkCAhAFdKMAAAAGACcAFASJBJwAEQAqAEIASgBiAHsAAAEWEgIHDgEiJicmAhI3PgEyFgUiBw4BBwYWHwEWMzI3Njc2Nz4BLwEmJyYXIgcOAQcGFh8BFjMyNz4BNz4BLwEmJyYWJiIGFBYyNjciBw4BBw4BHwEWFxYzMjc%2BATc2Ji8BJhciBwYHBgcOAR8BFhcWMzI3PgE3NiYvASYD8m9PT29T2dzZU29PT29T2dzZ%2Fj0EBHmxIgQNDCQDBBcGG0dGYAsNAwkDCwccBAVQdRgEDA0iBAQWBhJROQwMAwkDCwf5Y4xjY4xjVhYGElE6CwwDCQMLBwgEBVB1GAQNDCIEjRcGG0dGYAsNAwkDCwcIBAR5sSIEDQwkAwPyb%2F7V%2FtVvU1dXU28BKwErb1NXVxwBIrF5DBYDCQEWYEZHGwMVDCMNBgSRAhh1UA0WAwkBFTpREgMVCyMMBwT6Y2OMY2MVFTpREQQVCyMMBwQCGHVQDRYDCQEkFmBGRxsDFQwjDQYEASKxeQwWAwkBAAAABQBkAAAD6ASwAAwADwAWABwAIgAAASERIzUhFSERNDYzIQEjNQMzByczNTMDISImNREFFRQGKwECvAEstP6s%2FoQPCgI%2FASzIZKLU1KJktP51Cg8DhA8KwwMg%2FoTIyALzCg%2F%2B1Mj84NTUyP4MDwoBi8jDCg8AAAAABQBkAAAD6ASwAAkADAATABoAIQAAASERCQERNDYzIQEjNRMjFSM1IzcDISImPQEpARUUBisBNQK8ASz%2Bov3aDwoCPwEsyD6iZKLUqv6dCg8BfAIIDwqbAyD9%2BAFe%2FdoERwoP%2FtTI%2FHzIyNT%2BZA8KNzcKD1AAAAAAAwAAAAAEsAP0AAgAGQAfAAABIxUzFyERIzcFMzIeAhUhFSEDETM0PgIBMwMhASEEiqJkZP7UotT9EsgbGiEOASz9qMhkDiEaAnPw8PzgASwB9AMgyGQBLNTUBBErJGT%2BogHCJCsRBP5w%2FnAB9AAAAAMAAAAABEwETAAZADIAOQAAATMyFh0BMzIWHQEUBiMhIiY9ATQ2OwE1NDYFNTIWFREUBiMhIic3ARE0NjMVFBYzITI2AQc1IzUzNQKKZBUdMhUdHRX%2B1BUdHRUyHQFzKTs7Kf2oARP2%2Fro7KVg%2BASw%2BWP201MjIBEwdFTIdFWQVHR0VZBUdMhUd%2BpY7KfzgKTsE9gFGAUQpO5Y%2BWFj95tSiZKIAAwBkAAAEvARMABkANgA9AAABMzIWHQEzMhYdARQGIyEiJj0BNDY7ATU0NgU1MhYVESMRMxQOAiMhIiY1ETQ2MxUUFjMhMjYBBzUjNTM1AcJkFR0yFR0dFf7UFR0dFTIdAXMpO8jIDiEaG%2F2oKTs7KVg%2BASw%2BWAGc1MjIBEwdFTIdFWQVHR0VZBUdMhUd%2BpY7Kf4M%2FtQkKxEEOykDICk7lj5YWP3m1KJkogAAAAP%2FogAABRYE1AALABsAHwAACQEWBiMhIiY3ATYyEyMiBhcTHgE7ATI2NxM2JgMVMzUCkgJ9FyAs%2BwQsIBcCfRZARNAUGAQ6BCMUNhQjBDoEGODIBK37sCY3NyYEUCf%2BTB0U%2FtIUHR0UAS4UHf4MZGQAAAAACQAAAAAETARMAA8AHwAvAD8ATwBfAG8AfwCPAAABMzIWHQEUBisBIiY9ATQ2EzMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2ITMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2ITMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBqfoKDw8K%2BgoPDwr6Cg8PCvoKDw8BmvoKDw8K%2BgoPD%2Fzq%2BgoPDwr6Cg8PAZr6Cg8PCvoKDw8BmvoKDw8K%2BgoPD%2Fzq%2BgoPDwr6Cg8PAZr6Cg8PCvoKDw8BmvoKDw8K%2BgoPDwRMDwqWCg8PCpYKD%2F7UDwqWCg8PCpYKDw8KlgoPDwqWCg%2F%2B1A8KlgoPDwqWCg8PCpYKDw8KlgoPDwqWCg8PCpYKD%2F7UDwqWCg8PCpYKDw8KlgoPDwqWCg8PCpYKDw8KlgoPAAAAAwAAAAAEsAUUABkAKQAzAAABMxUjFSEyFg8BBgchJi8BJjYzITUjNTM1MwEhMhYUBisBFyE3IyImNDYDITIWHQEhNTQ2ArxkZAFePjEcQiko%2FPwoKUIcMT4BXmRkyP4%2BArwVHR0VDIn8SooNFR0dswRMFR37UB0EsMhkTzeEUzMzU4Q3T2TIZPx8HSodZGQdKh3%2B1B0VMjIVHQAABAAAAAAEsAUUAAUAGQArADUAAAAyFhUjNAchFhUUByEyFg8BIScmNjMhJjU0AyEyFhQGKwEVBSElNSMiJjQ2AyEyFh0BITU0NgIwUDnCPAE6EgMBSCkHIq%2F9WrIiCikBSAOvArwVHR0VlgET%2FEoBE5YVHR2zBEwVHftQHQUUOykpjSUmCBEhFpGRFiERCCb%2BlR0qHcjIyMgdKh39qB0VMjIVHQAEAAAAAASwBJ0ABwAUACQALgAAADIWFAYiJjQTMzIWFRQXITY1NDYzASEyFhQGKwEXITcjIiY0NgMhMhYdASE1NDYCDZZqapZqty4iKyf%2BvCcrI%2F7NArwVHR0VDYr8SokMFR0dswRMFR37UB0EnWqWamqW%2Fus5Okxra0w6Of5yHSodZGQdKh3%2B1B0VMjIVHQAEAAAAAASwBRQADwAcACwANgAAATIeARUUBiImNTQ3FzcnNhMzMhYVFBchNjU0NjMBITIWFAYrARchNyMiJjQ2AyEyFh0BITU0NgJYL1szb5xvIpBvoyIfLiIrJ%2F68Jysj%2Fs0CvBUdHRUNivxKiQwVHR2zBEwVHftQHQUUa4s2Tm9vTj5Rj2%2BjGv4KOTpMa2tMOjn%2Bch0qHWRkHSod%2FtQdFTIyFR0AAAADAAAAAASwBRIAEgAiACwAAAEFFSEUHgMXIS4BNTQ%2BAjcBITIWFAYrARchNyMiJjQ2AyEyFh0BITU0NgJYASz%2B1CU%2FP00T%2Fe48PUJtj0r%2BogK8FR0dFQ2K%2FEqJDBUdHbMETBUd%2B1AdBLChizlmUT9IGVO9VFShdksE%2FH4dKh1kZB0qHf7UHRUyMhUdAAIAyAAAA%2BgFFAAPACkAAAAyFh0BHgEdASE1NDY3NTQDITIWFyMVMxUjFTMVIxUzFAYjISImNRE0NgIvUjsuNv5wNi5kAZA2XBqsyMjIyMh1U%2F5wU3V1BRQ7KU4aXDYyMjZcGk4p%2Fkc2LmRkZGRkU3V1UwGQU3UAAAMAZP%2F%2FBEwETAAPAC8AMwAAEyEyFhURFAYjISImNRE0NgMhMhYdARQGIyEXFhQGIi8BIQcGIiY0PwEhIiY9ATQ2BQchJ5YDhBUdHRX8fBUdHQQDtgoPDwr%2B5eANGiUNWP30Vw0mGg3g%2Ft8KDw8BqmQBRGQETB0V%2FgwVHR0VAfQVHf1EDwoyCg%2FgDSUbDVhYDRslDeAPCjIKD2RkZAAAAAAEAAAAAASwBEwAGQAjAC0ANwAAEyEyFh0BIzQmKwEiBhUjNCYrASIGFSM1NDYDITIWFREhETQ2ExUUBisBIiY9ASEVFAYrASImPQHIAyBTdWQ7KfopO2Q7KfopO2R1EQPoKTv7UDvxHRVkFR0D6B0VZBUdBEx1U8gpOzspKTs7KchTdf4MOyn%2B1AEsKTv%2BDDIVHR0VMjIVHR0VMgADAAEAAASpBKwADQARABsAAAkBFhQPASEBJjQ3ATYyCQMDITIWHQEhNTQ2AeACqh8fg%2F4f%2FfsgIAEnH1n%2BrAFWAS%2F%2Bq6IDIBUd%2FHwdBI39VR9ZH4MCBh9ZHwEoH%2F5u%2FqoBMAFV%2FBsdFTIyFR0AAAAAAgCPAAAEIQSwABcALwAAAQMuASMhIgYHAwYWMyEVFBYyNj0BMzI2AyE1NDY7ATU0NjsBETMRMzIWHQEzMhYVBCG9CCcV%2FnAVJwi9CBMVAnEdKh19FROo%2Fa0dFTIdFTDILxUdMhUdAocB%2BhMcHBP%2BBhMclhUdHRWWHP2MMhUdMhUdASz%2B1B0VMh0VAAAEAAAAAASwBLAADQAQAB8AIgAAASERFAYjIREBNTQ2MyEBIzUBIREUBiMhIiY1ETQ2MyEBIzUDhAEsDwr%2Bif7UDwoBdwEsyP2oASwPCv12Cg8PCgF3ASzIAyD9wQoPAk8BLFQKD%2F7UyP4M%2FcEKDw8KA7YKD%2F7UyAAC%2F5wAZAUUBEcARgBWAAABMzIeAhcWFxY2NzYnJjc%2BARYXFgcOASsBDgEPAQ4BKwEiJj8BBisBIicHDgErASImPwEmLwEuAT0BNDY7ATY3JyY2OwE2BSMiBh0BFBY7ATI2PQE0JgHkw0uOakkMEhEfQwoKGRMKBQ8XDCkCA1Y9Pgc4HCcDIhVkFRgDDDEqwxgpCwMiFWQVGAMaVCyfExwdFXwLLW8QBxXLdAFF%2BgoPDwr6Cg8PBEdBa4pJDgYKISAiJRsQCAYIDCw9P1c3fCbqFB0dFEYOCEAUHR0UnUplNQcmFTIVHVdPXw4TZV8PCjIKDw8KMgoPAAb%2FnP%2FmBRQEfgAJACQANAA8AFIAYgAAASU2Fh8BFgYPASUzMhYfASEyFh0BFAYHBQYmJyYjISImPQE0NhcjIgYdARQ7ATI2NTQmJyYEIgYUFjI2NAE3PgEeARceAT8BFxYGDwEGJi8BJjYlBwYfAR4BPwE2Jy4BJy4BAoEBpxMuDiAOAxCL%2FCtqQ0geZgM3FR0cE%2F0fFyIJKjr%2B1D5YWLlQExIqhhALIAsSAYBALS1ALf4PmBIgHhMQHC0aPzANITNQL3wpgigJASlmHyElDR0RPRMFAhQHCxADhPcICxAmDyoNeMgiNtQdFTIVJgeEBBQPQ1g%2ByD5YrBwVODMQEAtEERzJLUAtLUD%2B24ITChESEyMgAwWzPUkrRSgJL5cvfRxYGyYrDwkLNRAhFEgJDAQAAAAAAwBkAAAEOQSwAFEAYABvAAABMzIWHQEeARcWDgIPATIeBRUUDgUjFRQGKwEiJj0BIxUUBisBIiY9ASMiJj0BNDY7AREjIiY9ATQ2OwE1NDY7ATIWHQEzNTQ2AxUhMj4CNTc0LgMjARUhMj4CNTc0LgMjAnGWCg9PaAEBIC4uEBEGEjQwOiodFyI2LUAjGg8KlgoPZA8KlgoPrwoPDwpLSwoPDwqvDwqWCg9kD9cBBxwpEwsBAQsTKRz%2B%2BQFrHCkTCwEBCxMpHASwDwptIW1KLk0tHwYGAw8UKDJOLTtdPCoVCwJLCg8PCktLCg8PCksPCpYKDwJYDwqWCg9LCg8PCktLCg%2F%2B1MgVHR0LCgQOIhoW%2FnDIFR0dCwoEDiIaFgAAAwAEAAIEsASuABcAKQAsAAATITIWFREUBg8BDgEjISImJy4CNRE0NgQiDgQPARchNy4FAyMT1AMMVnokEhIdgVL9xFKCHAgYKHoCIIx9VkcrHQYGnAIwnAIIIClJVSGdwwSuelb%2BYDO3QkJXd3ZYHFrFMwGgVnqZFyYtLSUMDPPzBQ8sKDEj%2FsIBBQACAMgAAAOEBRQADwAZAAABMzIWFREUBiMhIiY1ETQ2ARUUBisBIiY9AQHblmesVCn%2BPilUrAFINhWWFTYFFKxn%2FgwpVFQpAfRnrPwY4RU2NhXhAAACAMgAAAOEBRQADwAZAAABMxQWMxEUBiMhIiY1ETQ2ARUUBisBIiY9AQHbYLOWVCn%2BPilUrAFINhWWFTYFFJaz%2FkIpVFQpAfRnrPwY4RU2NhXhAAACAAAAFAUOBBoAFAAaAAAJASUHFRcVJwc1NzU0Jj4CPwEnCQEFJTUFJQUO%2FYL%2Bhk5klpZkAQEBBQQvkwKCAVz%2Bov6iAV4BXgL%2F%2FuWqPOCWx5SVyJb6BA0GCgYDKEEBG%2F1ipqaTpaUAAAMAZAH0BLADIAAHAA8AFwAAEjIWFAYiJjQkMhYUBiImNCQyFhQGIiY0vHxYWHxYAeh8WFh8WAHofFhYfFgDIFh8WFh8WFh8WFh8WFh8WFh8AAAAAAMBkAAAArwETAAHAA8AFwAAADIWFAYiJjQSMhYUBiImNBIyFhQGIiY0Aeh8WFh8WFh8WFh8WFh8WFh8WARMWHxYWHz%2ByFh8WFh8%2FshYfFhYfAAAAAMAZABkBEwETAAPAB8ALwAAEyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2fQO2Cg8PCvxKCg8PCgO2Cg8PCvxKCg8PCgO2Cg8PCvxKCg8PBEwPCpYKDw8KlgoP%2FnAPCpYKDw8KlgoP%2FnAPCpYKDw8KlgoPAAAABAAAAAAEsASwAA8AHwAvADMAAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmBSEyFhURFAYjISImNRE0NhcVITUBXgH0ory7o%2F4Mpbm5Asv9qCk7OykCWCk7O%2F2xAfQVHR0V%2FgwVHR1HAZAEsLuj%2FgylubmlAfSlucg7Kf2oKTs7KQJYKTtkHRX%2B1BUdHRUBLBUdZMjIAAAAAAEAZABkBLAETAA7AAATITIWFAYrARUzMhYUBisBFTMyFhQGKwEVMzIWFAYjISImNDY7ATUjIiY0NjsBNSMiJjQ2OwE1IyImNDaWA%2BgVHR0VMjIVHR0VMjIVHR0VMjIVHR0V%2FBgVHR0VMjIVHR0VMjIVHR0VMjIVHR0ETB0qHcgdKh3IHSodyB0qHR0qHcgdKh3IHSodyB0qHQAAAAYBLAAFA%2BgEowAHAA0AEwAZAB8AKgAAAR4BBgcuATYBMhYVIiYlFAYjNDYBMhYVIiYlFAYjNDYDFRQGIiY9ARYzMgKKVz8%2FV1c%2FP%2F75fLB8sAK8sHyw%2FcB8sHywArywfLCwHSodKAMRBKNDsrJCQrKy%2FsCwfLB8fLB8sP7UsHywfHywfLD%2B05AVHR0VjgQAAAH%2FtQDIBJQDgQBCAAABNzYXAR4BBw4BKwEyFRQOBCsBIhE0NyYiBxYVECsBIi4DNTQzIyImJyY2NwE2HwEeAQ4BLwEHIScHBi4BNgLpRRkUASoLCAYFGg8IAQQNGyc%2FKZK4ChRUFQu4jjBJJxkHAgcPGQYGCAsBKhQaTBQVCiMUM7YDe7YsFCMKFgNuEwYS%2FtkLHw8OEw0dNkY4MhwBIBgXBAQYF%2F7gKjxTQyMNEw4PHwoBKBIHEwUjKBYGDMHBDAUWKCMAAAAAAgAAAAAEsASwACUAQwAAASM0LgUrAREUFh8BFSE1Mj4DNREjIg4FFSMRIQEjNC4DKwERFBYXMxUjNTI1ESMiDgMVIzUhBLAyCAsZEyYYGcgyGRn%2BcAQOIhoWyBkYJhMZCwgyA%2Bj9RBkIChgQEWQZDQzIMmQREBgKCBkB9AOEFSAVDggDAfyuFhkBAmRkAQUJFQ4DUgEDCA4VIBUBLP0SDxMKBQH%2BVwsNATIyGQGpAQUKEw%2BWAAAAAAMAAAAABEwErgAdACAAMAAAATUiJy4BLwEBIwEGBw4BDwEVITUiJj8BIRcWBiMVARsBARUUBiMhIiY9ATQ2MyEyFgPoGR4OFgUE%2Ft9F%2FtQSFQkfCwsBETE7EkUBJT0NISf%2B7IZ5AbEdFfwYFR0dFQPoFR0BLDIgDiIKCwLr%2FQ4jFQkTBQUyMisusKYiQTIBhwFW%2Fqr942QVHR0VZBUdHQADAAAAAASwBLAADwBHAEoAABMhMhYVERQGIyEiJjURNDYFIyIHAQYHBgcGHQEUFjMhMjY9ATQmIyInJj8BIRcWBwYjIgYdARQWMyEyNj0BNCYnIicmJyMBJhMjEzIETBUdHRX7tBUdHQJGRg0F%2FtUREhImDAsJAREIDAwINxAKCj8BCjkLEQwYCAwMCAE5CAwLCBEZGQ8B%2FuAFDsVnBLAdFfu0FR0dFQRMFR1SDP0PIBMSEAUNMggMDAgyCAwXDhmjmR8YEQwIMggMDAgyBwwBGRskAuwM%2FgUBCAAABAAAAAAEsASwAAMAEwAjACcAAAEhNSEFITIWFREUBiMhIiY1ETQ2KQEyFhURFAYjISImNRE0NhcRIREEsPtQBLD7ggGQFR0dFf5wFR0dAm0BkBUdHRX%2BcBUdHUcBLARMZMgdFfx8FR0dFQOEFR0dFf5wFR0dFQGQFR1k%2FtQBLAAEAAAAAASwBLAADwAfACMAJwAAEyEyFhURFAYjISImNRE0NgEhMhYVERQGIyEiJjURNDYXESEREyE1ITIBkBUdHRX%2BcBUdHQJtAZAVHR0V%2FnAVHR1HASzI%2B1AEsASwHRX8fBUdHRUDhBUd%2FgwdFf5wFR0dFQGQFR1k%2FtQBLP2oZAAAAAACAAAAZASwA%2BgAJwArAAATITIWFREzNTQ2MyEyFh0BMxUjFRQGIyEiJj0BIxEUBiMhIiY1ETQ2AREhETIBkBUdZB0VAZAVHWRkHRX%2BcBUdZB0V%2FnAVHR0CnwEsA%2BgdFf6ilhUdHRWWZJYVHR0Vlv6iFR0dFQMgFR3%2B1P7UASwAAAQAAAAABLAEsAADABMAFwAnAAAzIxEzFyEyFhURFAYjISImNRE0NhcRIREBITIWFREUBiMhIiY1ETQ2ZGRklgGQFR0dFf5wFR0dRwEs%2FqIDhBUdHRX8fBUdHQSwZB0V%2FnAVHR0VAZAVHWT%2B1AEs%2FgwdFf5wFR0dFQGQFR0AAAAAAgBkAAAETASwACcAKwAAATMyFhURFAYrARUhMhYVERQGIyEiJjURNDYzITUjIiY1ETQ2OwE1MwcRIRECWJYVHR0VlgHCFR0dFfx8FR0dFQFelhUdHRWWZMgBLARMHRX%2BcBUdZB0V%2FnAVHR0VAZAVHWQdFQGQFR1kyP7UASwAAAAEAAAAAASwBLAAAwATABcAJwAAISMRMwUhMhYVERQGIyEiJjURNDYXESERASEyFhURFAYjISImNRE0NgSwZGT9dgGQFR0dFf5wFR0dRwEs%2FK4DhBUdHRX8fBUdHQSwZB0V%2FnAVHR0VAZAVHWT%2B1AEs%2FgwdFf5wFR0dFQGQFR0AAAEBLAAwA28EgAAPAAAJAQYjIiY1ETQ2MzIXARYUA2H%2BEhcSDhAQDhIXAe4OAjX%2BEhcbGQPoGRsX%2FhIOKgAAAAABAUEAMgOEBH4ACwAACQE2FhURFAYnASY0AU8B7h0qKh3%2BEg4CewHuHREp%2FBgpER0B7g4qAAAAAAEAMgFBBH4DhAALAAATITIWBwEGIicBJjZkA%2BgpER3%2BEg4qDv4SHREDhCod%2FhIODgHuHSoAAAAAAQAyASwEfgNvAAsAAAkBFgYjISImNwE2MgJ7Ae4dESn8GCkRHQHuDioDYf4SHSoqHQHuDgAAAAACAAgAAASwBCgABgAKAAABFQE1LQE1ASE1IQK8%2FUwBnf5jBKj84AMgAuW2%2Fr3dwcHd%2B9jIAAAAAAIAAABkBLAEsAALADEAAAEjFTMVIREzNSM1IQEzND4FOwERFAYPARUhNSIuAzURMzIeBRUzESEEsMjI%2FtTIyAEs%2B1AyCAsZEyYYGWQyGRkBkAQOIhoWZBkYJhMZCwgy%2FOADhGRkASxkZP4MFSAVDggDAf3aFhkBAmRkAQUJFQ4CJgEDCA4VIBUBLAAAAgAAAAAETAPoACUAMQAAASM0LgUrAREUFh8BFSE1Mj4DNREjIg4FFSMRIQEjFTMVIREzNSM1IQMgMggLGRMmGBlkMhkZ%2FnAEDiIaFmQZGCYTGQsIMgMgASzIyP7UyMgBLAK8FSAVDggDAf3aFhkCAWRkAQUJFQ4CJgEDCA4VIBUBLPzgZGQBLGRkAAABAMgAZgNyBEoAEgAAATMyFgcJARYGKwEiJwEmNDcBNgK9oBAKDP4wAdAMChCgDQr%2BKQcHAdcKBEoWDP4w%2FjAMFgkB1wgUCAHXCQAAAQE%2BAGYD6ARKABIAAAEzMhcBFhQHAQYrASImNwkBJjYBU6ANCgHXBwf%2BKQoNoBAKDAHQ%2FjAMCgRKCf4pCBQI%2FikJFgwB0AHQDBYAAAEAZgDIBEoDcgASAAAAFh0BFAcBBiInASY9ATQ2FwkBBDQWCf4pCBQI%2FikJFgwB0AHQA3cKEKANCv4pBwcB1woNoBAKDP4wAdAAAAABAGYBPgRKA%2BgAEgAACQEWHQEUBicJAQYmPQE0NwE2MgJqAdcJFgz%2BMP4wDBYJAdcIFAPh%2FikKDaAQCgwB0P4wDAoQoA0KAdcHAAAAAgDZ%2F%2FkEPQSwAAUAOgAAARQGIzQ2BTMyFh8BNjc%2BAh4EBgcOBgcGIiYjIgYiJy4DLwEuAT4EHgEXJyY2A%2BiwfLD%2BVmQVJgdPBQsiKFAzRyorDwURAQQSFyozTSwNOkkLDkc3EDlfNyYHBw8GDyUqPjdGMR%2BTDA0EsHywfLDIHBPCAQIGBwcFDx81S21DBxlLR1xKQhEFBQcHGWt0bCQjP2hJNyATBwMGBcASGAAAAAACAMgAFQOEBLAAFgAaAAATITIWFREUBisBEQcGJjURIyImNRE0NhcVITX6AlgVHR0Vlv8TGpYVHR2rASwEsB0V%2FnAVHf4MsgkQFQKKHRUBkBUdZGRkAAAAAgDIABkETASwAA4AEgAAEyEyFhURBRElIREjETQ2ARU3NfoC7ic9%2FUQCWP1EZB8BDWQEsFEs%2FFt1A7Z9%2FBgEARc0%2FV1kFGQAAQAAAAECTW%2FDBF9fDzz1AB8EsAAAAADQdnOXAAAAANB2c5f%2FUf%2BcBdwFFAAAAAgAAgAAAAAAAAABAAAFFP%2BFAAAFFP9R%2FtQF3AABAAAAAAAAAAAAAAAAAAAAowG4ACgAAAAAAZAAAASwAAAEsABkBLAAAASwAAAEsABwAooAAAUUAAACigAABRQAAAGxAAABRQAAANgAAADYAAAAogAAAQQAAABIAAABBAAAAUUAAASwAGQEsAB7BLAAyASwAMgB9AAABLD%2F8gSwAAAEsAAABLD%2F8ASwAAAEsAAOBLAACQSwAGQEsP%2FTBLD%2F0wSwAAAEsAAABLAAAASwAAAEsAAABLAAJgSwAG4EsAAXBLAAFwSwABcEsABkBLAAGgSwAGQEsAAMBLAAZASwABcEsP%2BcBLAAZASwABcEsAAXBLAAAASwABcEsAAXBLAAFwSwAGQEsAAABLAAZASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAZASwAMgEsAAABLAAAASwADUEsABkBLAAyASw%2F7UEsAAhBLAAAASwAAAEsAAABLAAAASwAAAEsP%2BcBLAAAASwAAAEsAAABLAA2wSwABcEsAB1BLAAAASwAAAEsAAABLAACgSwAMgEsAAABLAAnQSwAMgEsADIBLAAyASwAAAEsP%2F%2BBLABLASwAGQEsACIBLABOwSwABcEsAAXBLAAFwSwABcEsAAXBLAAFwSwAAAEsAAXBLAAFwSwABcEsAAXBLAAAASwALcEsAC3BLAAAASwAAAEsABJBLAAFwSwAAAEsAAABLAAXQSw%2F9wEsP%2FcBLD%2FnwSwAGQEsAAABLAAAASwAAAEsABkBLD%2F%2FwSwAAAEsP9RBLAABgSwAAAEsAAABLABRQSwAAEEsAAABLD%2FnASwAEoEsAAUBLAAAASwAAAEsAAABLD%2FnASwAGEEsP%2F9BLAAFgSwABYEsAAWBLAAFgSwABgEsAAABMQAAASwAGQAAAAAAAD%2F2ABkADkAyAAAAScAZAAZABkAGQAZABkAGQAZAAAAAAAAAAAAAADZAAAAAAAOAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAMAZABkAAAAEAAAAAAAZP%2Bc%2F5z%2FnP%2Bc%2F5z%2FnP%2Bc%2F5wACQAJ%2F%2FL%2F8gBkAHkAJwBkAGQAAAAAAGT%2FogAAAAAAAAAAAAAAAADIAGQAAAABAI8AAP%2Bc%2F5wAZAAEAMgAyAAAAGQBkABkAAAAZAEs%2F7UAAAAAAAAAAAAAAAAAAABkAAABLAFBADIAMgAIAAAAAADIAT4AZgBmANkAyADIAAAAKgAqACoAKgCyAOgA6AFOAU4BTgFOAU4BTgFOAU4BTgFOAU4BTgFOAU4BpAIGAiICfgKGAqwC5ANGA24DjAPEBAgEMgRiBKIE3AVcBboGcgb0ByAHYgfKCB4IYgi%2BCTYJhAm2Cd4KKApMCpQK4gswC4oLygwIDFgNKg1eDbAODg5oDrQPKA%2BmD%2BYQEhBUEJAQqhEqEXYRthIKEjgSfBLAExoTdBPQFCoU1BU8FagVzBYEFjYWYBawFv4XUhemGAIYLhhqGJYYsBjgGP4ZKBloGZQZxBnaGe4aNhpoGrga9hteG7QcMhyUHOIdHB1EHWwdlB28HeYeLh52HsAfYh%2FSIEYgviEyIXYhuCJAIpYiuCMOIyIjOCN6I8Ij4CQCJDAkXiSWJOIlNCVgJbwmFCZ%2BJuYnUCe8J%2FgoNChwKKwpoCnMKiYqSiqEKworeiwILGgsuizsLRwtiC30LiguZi6iLtgvDi9GL34vsi%2F4MD4whDDSMRIxYDGuMegyJDJeMpoy3jMiMz4zaDO2NBg0YDSoNNI1LDWeNeg2PjZ8Ntw3GjdON5I31DgQOEI4hjjIOQo5SjmIOcw6HDpsOpo63jugO9w8GDxQPKI8%2BD0yPew%2BOj6MPtQ%2FKD9uP6o%2F%2BkBIQIBAxkECQX5CGEKoQu5DGENCQ3ZDoEPKRBBEYESuRPZFWkW2RgZGdEa0RvZHNkd2R7ZH9kgWSDJITkhqSIZIzEkSSThJXkmESapKAkouSlIAAQAAARcApwARAAAAAAACAAAAAQABAAAAQAAuAAAAAAAAABAAxgABAAAAAAATABIAAAADAAEECQAAAGoAEgADAAEECQABACgAfAADAAEECQACAA4ApAADAAEECQADAEwAsgADAAEECQAEADgA%2FgADAAEECQAFAHgBNgADAAEECQAGADYBrgADAAEECQAIABYB5AADAAEECQAJABYB%2BgADAAEECQALACQCEAADAAEECQAMACQCNAADAAEECQATACQCWAADAAEECQDIABYCfAADAAEECQDJADACkgADAAEECdkDABoCwnd3dy5nbHlwaGljb25zLmNvbQBDAG8AcAB5AHIAaQBnAGgAdAAgAKkAIAAyADAAMQA0ACAAYgB5ACAASgBhAG4AIABLAG8AdgBhAHIAaQBrAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkAC4ARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAFIAZQBnAHUAbABhAHIAMQAuADAAMAA5ADsAVQBLAFcATgA7AEcATABZAFAASABJAEMATwBOAFMASABhAGwAZgBsAGkAbgBnAHMALQBSAGUAZwB1AGwAYQByAEcATABZAFAASABJAEMATwBOAFMAIABIAGEAbABmAGwAaQBuAGcAcwAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwADAAOQA7AFAAUwAgADAAMAAxAC4AMAAwADkAOwBoAG8AdABjAG8AbgB2ACAAMQAuADAALgA3ADAAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA1ADgAMwAyADkARwBMAFkAUABIAEkAQwBPAE4AUwBIAGEAbABmAGwAaQBuAGcAcwAtAFIAZQBnAHUAbABhAHIASgBhAG4AIABLAG8AdgBhAHIAaQBrAEoAYQBuACAASwBvAHYAYQByAGkAawB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQBXAGUAYgBmAG8AbgB0ACAAMQAuADAAVwBlAGQAIABPAGMAdAAgADIAOQAgADAANgA6ADMANgA6ADAANwAgADIAMAAxADQARgBvAG4AdAAgAFMAcQB1AGkAcgByAGUAbAAAAAIAAAAAAAD%2FtQAyAAAAAAAAAAAAAAAAAAAAAAAAAAABFwAAAQIBAwADAA0ADgEEAJYBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMA7wEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE%2BAT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG%2FAcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB%2BgH7AfwB%2FQH%2BAf8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgZnbHlwaDEGZ2x5cGgyB3VuaTAwQTAHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMkYHdW5pMjA1RgRFdXJvB3VuaTIwQkQHdW5pMjMxQgd1bmkyNUZDB3VuaTI2MDEHdW5pMjZGQQd1bmkyNzA5B3VuaTI3MEYHdW5pRTAwMQd1bmlFMDAyB3VuaUUwMDMHdW5pRTAwNQd1bmlFMDA2B3VuaUUwMDcHdW5pRTAwOAd1bmlFMDA5B3VuaUUwMTAHdW5pRTAxMQd1bmlFMDEyB3VuaUUwMTMHdW5pRTAxNAd1bmlFMDE1B3VuaUUwMTYHdW5pRTAxNwd1bmlFMDE4B3VuaUUwMTkHdW5pRTAyMAd1bmlFMDIxB3VuaUUwMjIHdW5pRTAyMwd1bmlFMDI0B3VuaUUwMjUHdW5pRTAyNgd1bmlFMDI3B3VuaUUwMjgHdW5pRTAyOQd1bmlFMDMwB3VuaUUwMzEHdW5pRTAzMgd1bmlFMDMzB3VuaUUwMzQHdW5pRTAzNQd1bmlFMDM2B3VuaUUwMzcHdW5pRTAzOAd1bmlFMDM5B3VuaUUwNDAHdW5pRTA0MQd1bmlFMDQyB3VuaUUwNDMHdW5pRTA0NAd1bmlFMDQ1B3VuaUUwNDYHdW5pRTA0Nwd1bmlFMDQ4B3VuaUUwNDkHdW5pRTA1MAd1bmlFMDUxB3VuaUUwNTIHdW5pRTA1Mwd1bmlFMDU0B3VuaUUwNTUHdW5pRTA1Ngd1bmlFMDU3B3VuaUUwNTgHdW5pRTA1OQd1bmlFMDYwB3VuaUUwNjIHdW5pRTA2Mwd1bmlFMDY0B3VuaUUwNjUHdW5pRTA2Ngd1bmlFMDY3B3VuaUUwNjgHdW5pRTA2OQd1bmlFMDcwB3VuaUUwNzEHdW5pRTA3Mgd1bmlFMDczB3VuaUUwNzQHdW5pRTA3NQd1bmlFMDc2B3VuaUUwNzcHdW5pRTA3OAd1bmlFMDc5B3VuaUUwODAHdW5pRTA4MQd1bmlFMDgyB3VuaUUwODMHdW5pRTA4NAd1bmlFMDg1B3VuaUUwODYHdW5pRTA4Nwd1bmlFMDg4B3VuaUUwODkHdW5pRTA5MAd1bmlFMDkxB3VuaUUwOTIHdW5pRTA5Mwd1bmlFMDk0B3VuaUUwOTUHdW5pRTA5Ngd1bmlFMDk3B3VuaUUxMDEHdW5pRTEwMgd1bmlFMTAzB3VuaUUxMDQHdW5pRTEwNQd1bmlFMTA2B3VuaUUxMDcHdW5pRTEwOAd1bmlFMTA5B3VuaUUxMTAHdW5pRTExMQd1bmlFMTEyB3VuaUUxMTMHdW5pRTExNAd1bmlFMTE1B3VuaUUxMTYHdW5pRTExNwd1bmlFMTE4B3VuaUUxMTkHdW5pRTEyMAd1bmlFMTIxB3VuaUUxMjIHdW5pRTEyMwd1bmlFMTI0B3VuaUUxMjUHdW5pRTEyNgd1bmlFMTI3B3VuaUUxMjgHdW5pRTEyOQd1bmlFMTMwB3VuaUUxMzEHdW5pRTEzMgd1bmlFMTMzB3VuaUUxMzQHdW5pRTEzNQd1bmlFMTM2B3VuaUUxMzcHdW5pRTEzOAd1bmlFMTM5B3VuaUUxNDAHdW5pRTE0MQd1bmlFMTQyB3VuaUUxNDMHdW5pRTE0NAd1bmlFMTQ1B3VuaUUxNDYHdW5pRTE0OAd1bmlFMTQ5B3VuaUUxNTAHdW5pRTE1MQd1bmlFMTUyB3VuaUUxNTMHdW5pRTE1NAd1bmlFMTU1B3VuaUUxNTYHdW5pRTE1Nwd1bmlFMTU4B3VuaUUxNTkHdW5pRTE2MAd1bmlFMTYxB3VuaUUxNjIHdW5pRTE2Mwd1bmlFMTY0B3VuaUUxNjUHdW5pRTE2Ngd1bmlFMTY3B3VuaUUxNjgHdW5pRTE2OQd1bmlFMTcwB3VuaUUxNzEHdW5pRTE3Mgd1bmlFMTczB3VuaUUxNzQHdW5pRTE3NQd1bmlFMTc2B3VuaUUxNzcHdW5pRTE3OAd1bmlFMTc5B3VuaUUxODAHdW5pRTE4MQd1bmlFMTgyB3VuaUUxODMHdW5pRTE4NAd1bmlFMTg1B3VuaUUxODYHdW5pRTE4Nwd1bmlFMTg4B3VuaUUxODkHdW5pRTE5MAd1bmlFMTkxB3VuaUUxOTIHdW5pRTE5Mwd1bmlFMTk0B3VuaUUxOTUHdW5pRTE5Nwd1bmlFMTk4B3VuaUUxOTkHdW5pRTIwMAd1bmlFMjAxB3VuaUUyMDIHdW5pRTIwMwd1bmlFMjA0B3VuaUUyMDUHdW5pRTIwNgd1bmlFMjA5B3VuaUUyMTAHdW5pRTIxMQd1bmlFMjEyB3VuaUUyMTMHdW5pRTIxNAd1bmlFMjE1B3VuaUUyMTYHdW5pRTIxOAd1bmlFMjE5B3VuaUUyMjEHdW5pRTIyMwd1bmlFMjI0B3VuaUUyMjUHdW5pRTIyNgd1bmlFMjI3B3VuaUUyMzAHdW5pRTIzMQd1bmlFMjMyB3VuaUUyMzMHdW5pRTIzNAd1bmlFMjM1B3VuaUUyMzYHdW5pRTIzNwd1bmlFMjM4B3VuaUUyMzkHdW5pRTI0MAd1bmlFMjQxB3VuaUUyNDIHdW5pRTI0Mwd1bmlFMjQ0B3VuaUUyNDUHdW5pRTI0Ngd1bmlFMjQ3B3VuaUUyNDgHdW5pRTI0OQd1bmlFMjUwB3VuaUUyNTEHdW5pRTI1Mgd1bmlFMjUzB3VuaUUyNTQHdW5pRTI1NQd1bmlFMjU2B3VuaUUyNTcHdW5pRTI1OAd1bmlFMjU5B3VuaUUyNjAHdW5pRjhGRgZ1MUY1MTEGdTFGNkFBAAAAAAFUUMMXAAA%3D%29%20format%28%27truetype%27%29%2Curl%28data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI%2FPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE%2BPC9tZXRhZGF0YT4KPGRlZnM%2BCjxmb250IGlkPSJnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXIiIGhvcml6LWFkdi14PSIxMjAwIiA%2BCjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMjAwIiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTI0MCIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUwMCIgLz4KPGdseXBoIGhvcml6LWFkdi14PSIwIiAvPgo8Z2x5cGggaG9yaXotYWR2LXg9IjQwMCIgLz4KPGdseXBoIHVuaWNvZGU9IiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSIqIiBkPSJNNjAwIDExMDBxMTUgMCAzNCAtMS41dDMwIC0zLjVsMTEgLTFxMTAgLTIgMTcuNSAtMTAuNXQ3LjUgLTE4LjV2LTIyNGwxNTggMTU4cTcgNyAxOCA4dDE5IC02bDEwNiAtMTA2cTcgLTggNiAtMTl0LTggLTE4bC0xNTggLTE1OGgyMjRxMTAgMCAxOC41IC03LjV0MTAuNSAtMTcuNXE2IC00MSA2IC03NXEwIC0xNSAtMS41IC0zNHQtMy41IC0zMGwtMSAtMTFxLTIgLTEwIC0xMC41IC0xNy41dC0xOC41IC03LjVoLTIyNGwxNTggLTE1OCBxNyAtNyA4IC0xOHQtNiAtMTlsLTEwNiAtMTA2cS04IC03IC0xOSAtNnQtMTggOGwtMTU4IDE1OHYtMjI0cTAgLTEwIC03LjUgLTE4LjV0LTE3LjUgLTEwLjVxLTQxIC02IC03NSAtNnEtMTUgMCAtMzQgMS41dC0zMCAzLjVsLTExIDFxLTEwIDIgLTE3LjUgMTAuNXQtNy41IDE4LjV2MjI0bC0xNTggLTE1OHEtNyAtNyAtMTggLTh0LTE5IDZsLTEwNiAxMDZxLTcgOCAtNiAxOXQ4IDE4bDE1OCAxNThoLTIyNHEtMTAgMCAtMTguNSA3LjUgdC0xMC41IDE3LjVxLTYgNDEgLTYgNzVxMCAxNSAxLjUgMzR0My41IDMwbDEgMTFxMiAxMCAxMC41IDE3LjV0MTguNSA3LjVoMjI0bC0xNTggMTU4cS03IDcgLTggMTh0NiAxOWwxMDYgMTA2cTggNyAxOSA2dDE4IC04bDE1OCAtMTU4djIyNHEwIDEwIDcuNSAxOC41dDE3LjUgMTAuNXE0MSA2IDc1IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iKyIgZD0iTTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzUwaDM1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zNTB2LTM1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzNTBoLTM1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNSBoMzUwdjM1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTA7IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTU7IiBkPSJNODI1IDExMDBoMjUwcTEwIDAgMTIuNSAtNXQtNS41IC0xM2wtMzY0IC0zNjRxLTYgLTYgLTExIC0xOGgyNjhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTEwMGgyNzVxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTE3NHEwIC0xMSAtNy41IC0xOC41dC0xOC41IC03LjVoLTE0OHEtMTEgMCAtMTguNSA3LjV0LTcuNSAxOC41djE3NCBoLTI3NXEtMTAgMCAtMTMgNnQzIDE0bDEyMCAxNjBxNiA4IDE4IDE0dDIyIDZoMTI1djEwMGgtMjc1cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMThxLTUgMTIgLTExIDE4bC0zNjQgMzY0cS04IDggLTUuNSAxM3QxMi41IDVoMjUwcTI1IDAgNDMgLTE4bDE2NCAtMTY0cTggLTggMTggLTh0MTggOGwxNjQgMTY0cTE4IDE4IDQzIDE4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDA7IiBob3Jpei1hZHYteD0iNjUwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMTsiIGhvcml6LWFkdi14PSIxMzAwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMjsiIGhvcml6LWFkdi14PSI2NTAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDAzOyIgaG9yaXotYWR2LXg9IjEzMDAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDA0OyIgaG9yaXotYWR2LXg9IjQzMyIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzI1IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwNjsiIGhvcml6LWFkdi14PSIyMTYiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDA3OyIgaG9yaXotYWR2LXg9IjIxNiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTYyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwOTsiIGhvcml6LWFkdi14PSIyNjAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDBhOyIgaG9yaXotYWR2LXg9IjcyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIyNjAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDVmOyIgaG9yaXotYWR2LXg9IjMyNSIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwYWM7IiBkPSJNNzQ0IDExOThxMjQyIDAgMzU0IC0xODlxNjAgLTEwNCA2NiAtMjA5aC0xODFxMCA0NSAtMTcuNSA4Mi41dC00My41IDYxLjV0LTU4IDQwLjV0LTYwLjUgMjR0LTUxLjUgNy41cS0xOSAwIC00MC41IC01LjV0LTQ5LjUgLTIwLjV0LTUzIC0zOHQtNDkgLTYyLjV0LTM5IC04OS41aDM3OWwtMTAwIC0xMDBoLTMwMHEtNiAtNTAgLTYgLTEwMGg0MDZsLTEwMCAtMTAwaC0zMDBxOSAtNzQgMzMgLTEzMnQ1Mi41IC05MXQ2MS41IC01NC41dDU5IC0yOSB0NDcgLTcuNXEyMiAwIDUwLjUgNy41dDYwLjUgMjQuNXQ1OCA0MXQ0My41IDYxdDE3LjUgODBoMTc0cS0zMCAtMTcxIC0xMjggLTI3OHEtMTA3IC0xMTcgLTI3NCAtMTE3cS0yMDYgMCAtMzI0IDE1OHEtMzYgNDggLTY5IDEzM3QtNDUgMjA0aC0yMTdsMTAwIDEwMGgxMTJxMSA0NyA2IDEwMGgtMjE4bDEwMCAxMDBoMTM0cTIwIDg3IDUxIDE1My41dDYyIDEwMy41cTExNyAxNDEgMjk3IDE0MXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMGJkOyIgZD0iTTQyOCAxMjAwaDM1MHE2NyAwIDEyMCAtMTN0ODYgLTMxdDU3IC00OS41dDM1IC01Ni41dDE3IC02NC41dDYuNSAtNjAuNXQwLjUgLTU3di0xNi41di0xNi41cTAgLTM2IC0wLjUgLTU3dC02LjUgLTYxdC0xNyAtNjV0LTM1IC01N3QtNTcgLTUwLjV0LTg2IC0zMS41dC0xMjAgLTEzaC0xNzhsLTIgLTEwMGgyODhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMzh2LTE3NXEwIC0xMSAtNS41IC0xOCB0LTE1LjUgLTdoLTE0OXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE3NWgtMjY3cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMTd2MTAwaC0yNjdxLTEwIDAgLTEzIDZ0MyAxNGwxMjAgMTYwcTYgOCAxOCAxNHQyMiA2aDExN3Y0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNjAwIDEwMDB2LTMwMGgyMDNxNjQgMCA4Ni41IDMzdDIyLjUgMTE5cTAgODQgLTIyLjUgMTE2dC04Ni41IDMyaC0yMDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjIxMjsiIGQ9Ik0yNTAgNzAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjMxYjsiIGQ9Ik0xMDAwIDEyMDB2LTE1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTEwMHEwIC05MSAtNDkuNSAtMTY1LjV0LTEzMC41IC0xMDkuNXE4MSAtMzUgMTMwLjUgLTEwOS41dDQ5LjUgLTE2NS41di0xNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtODAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MTUwcTAgOTEgNDkuNSAxNjUuNXQxMzAuNSAxMDkuNXEtODEgMzUgLTEzMC41IDEwOS41IHQtNDkuNSAxNjUuNXYxMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxNTBoODAwek00MDAgMTAwMHYtMTAwcTAgLTYwIDMyLjUgLTEwOS41dDg3LjUgLTczLjVxMjggLTEyIDQ0IC0zN3QxNiAtNTV0LTE2IC01NXQtNDQgLTM3cS01NSAtMjQgLTg3LjUgLTczLjV0LTMyLjUgLTEwOS41di0xNTBoNDAwdjE1MHEwIDYwIC0zMi41IDEwOS41dC04Ny41IDczLjVxLTI4IDEyIC00NCAzN3QtMTYgNTV0MTYgNTV0NDQgMzcgcTU1IDI0IDg3LjUgNzMuNXQzMi41IDEwOS41djEwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI1ZmM7IiBob3Jpei1hZHYteD0iNTAwIiBkPSJNMCAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI2MDE7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA2LjVxMCAtMTIxIC04NSAtMjA3LjV0LTIwNSAtODYuNWgtNzUwcS03OSAwIC0xMzUuNSA1N3QtNTYuNSAxMzdxMCA2OSA0Mi41IDEyMi41dDEwOC41IDY3LjVxLTIgMTIgLTIgMzdxMCAxNTMgMTA4IDI2MC41dDI2MCAxMDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyNmZhOyIgZD0iTTc3NCAxMTkzLjVxMTYgLTkuNSAyMC41IC0yN3QtNS41IC0zMy41bC0xMzYgLTE4N2w0NjcgLTc0NmgzMHEyMCAwIDM1IC0xOC41dDE1IC0zOS41di00MmgtMTIwMHY0MnEwIDIxIDE1IDM5LjV0MzUgMTguNWgzMGw0NjggNzQ2bC0xMzUgMTgzcS0xMCAxNiAtNS41IDM0dDIwLjUgMjh0MzQgNS41dDI4IC0yMC41bDExMSAtMTQ4bDExMiAxNTBxOSAxNiAyNyAyMC41dDM0IC01ek02MDAgMjAwaDM3N2wtMTgyIDExMmwtMTk1IDUzNHYtNjQ2eiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyNzA5OyIgZD0iTTI1IDExMDBoMTE1MHExMCAwIDEyLjUgLTV0LTUuNSAtMTNsLTU2NCAtNTY3cS04IC04IC0xOCAtOHQtMTggOGwtNTY0IDU2N3EtOCA4IC01LjUgMTN0MTIuNSA1ek0xOCA4ODJsMjY0IC0yNjRxOCAtOCA4IC0xOHQtOCAtMThsLTI2NCAtMjY0cS04IC04IC0xMyAtNS41dC01IDEyLjV2NTUwcTAgMTAgNSAxMi41dDEzIC01LjV6TTkxOCA2MThsMjY0IDI2NHE4IDggMTMgNS41dDUgLTEyLjV2LTU1MHEwIC0xMCAtNSAtMTIuNXQtMTMgNS41IGwtMjY0IDI2NHEtOCA4IC04IDE4dDggMTh6TTgxOCA0ODJsMzY0IC0zNjRxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xMTUwcS0xMCAwIC0xMi41IDV0NS41IDEzbDM2NCAzNjRxOCA4IDE4IDh0MTggLThsMTY0IC0xNjRxOCAtOCAxOCAtOHQxOCA4bDE2NCAxNjRxOCA4IDE4IDh0MTggLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjcwZjsiIGQ9Ik0xMDExIDEyMTBxMTkgMCAzMyAtMTNsMTUzIC0xNTNxMTMgLTE0IDEzIC0zM3QtMTMgLTMzbC05OSAtOTJsLTIxNCAyMTRsOTUgOTZxMTMgMTQgMzIgMTR6TTEwMTMgODAwbC02MTUgLTYxNGwtMjE0IDIxNGw2MTQgNjE0ek0zMTcgOTZsLTMzMyAtMTEybDExMCAzMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMTsiIGQ9Ik03MDAgNjUwdi01NTBoMjUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtODAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyNTB2NTUwbC01MDAgNTUwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMjsiIGQ9Ik0zNjggMTAxN2w2NDUgMTYzcTM5IDE1IDYzIDB0MjQgLTQ5di04MzFxMCAtNTUgLTQxLjUgLTk1LjV0LTExMS41IC02My41cS03OSAtMjUgLTE0NyAtNC41dC04NiA3NXQyNS41IDExMS41dDEyMi41IDgycTcyIDI0IDEzOCA4djUyMWwtNjAwIC0xNTV2LTYwNnEwIC00MiAtNDQgLTkwdC0xMDkgLTY5cS03OSAtMjYgLTE0NyAtNS41dC04NiA3NS41dDI1LjUgMTExLjV0MTIyLjUgODIuNXE3MiAyNCAxMzggN3Y2MzlxMCAzOCAxNC41IDU5IHQ1My41IDM0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDM7IiBkPSJNNTAwIDExOTFxMTAwIDAgMTkxIC0zOXQxNTYuNSAtMTA0LjV0MTA0LjUgLTE1Ni41dDM5IC0xOTFsLTEgLTJsMSAtNXEwIC0xNDEgLTc4IC0yNjJsMjc1IC0yNzRxMjMgLTI2IDIyLjUgLTQ0LjV0LTIyLjUgLTQyLjVsLTU5IC01OHEtMjYgLTIwIC00Ni41IC0yMHQtMzkuNSAyMGwtMjc1IDI3NHEtMTE5IC03NyAtMjYxIC03N2wtNSAxbC0yIC0xcS0xMDAgMCAtMTkxIDM5dC0xNTYuNSAxMDQuNXQtMTA0LjUgMTU2LjV0LTM5IDE5MSB0MzkgMTkxdDEwNC41IDE1Ni41dDE1Ni41IDEwNC41dDE5MSAzOXpNNTAwIDEwMjJxLTg4IDAgLTE2MiAtNDN0LTExNyAtMTE3dC00MyAtMTYydDQzIC0xNjJ0MTE3IC0xMTd0MTYyIC00M3QxNjIgNDN0MTE3IDExN3Q0MyAxNjJ0LTQzIDE2MnQtMTE3IDExN3QtMTYyIDQzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDU7IiBkPSJNNjQ5IDk0OXE0OCA2OCAxMDkuNSAxMDR0MTIxLjUgMzguNXQxMTguNSAtMjB0MTAyLjUgLTY0dDcxIC0xMDAuNXQyNyAtMTIzcTAgLTU3IC0zMy41IC0xMTcuNXQtOTQgLTEyNC41dC0xMjYuNSAtMTI3LjV0LTE1MCAtMTUyLjV0LTE0NiAtMTc0cS02MiA4NSAtMTQ1LjUgMTc0dC0xNTAgMTUyLjV0LTEyNi41IDEyNy41dC05My41IDEyNC41dC0zMy41IDExNy41cTAgNjQgMjggMTIzdDczIDEwMC41dDEwNCA2NHQxMTkgMjAgdDEyMC41IC0zOC41dDEwNC41IC0xMDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwNjsiIGQ9Ik00MDcgODAwbDEzMSAzNTNxNyAxOSAxNy41IDE5dDE3LjUgLTE5bDEyOSAtMzUzaDQyMXEyMSAwIDI0IC04LjV0LTE0IC0yMC41bC0zNDIgLTI0OWwxMzAgLTQwMXE3IC0yMCAtMC41IC0yNS41dC0yNC41IDYuNWwtMzQzIDI0NmwtMzQyIC0yNDdxLTE3IC0xMiAtMjQuNSAtNi41dC0wLjUgMjUuNWwxMzAgNDAwbC0zNDcgMjUxcS0xNyAxMiAtMTQgMjAuNXQyMyA4LjVoNDI5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDc7IiBkPSJNNDA3IDgwMGwxMzEgMzUzcTcgMTkgMTcuNSAxOXQxNy41IC0xOWwxMjkgLTM1M2g0MjFxMjEgMCAyNCAtOC41dC0xNCAtMjAuNWwtMzQyIC0yNDlsMTMwIC00MDFxNyAtMjAgLTAuNSAtMjUuNXQtMjQuNSA2LjVsLTM0MyAyNDZsLTM0MiAtMjQ3cS0xNyAtMTIgLTI0LjUgLTYuNXQtMC41IDI1LjVsMTMwIDQwMGwtMzQ3IDI1MXEtMTcgMTIgLTE0IDIwLjV0MjMgOC41aDQyOXpNNDc3IDcwMGgtMjQwbDE5NyAtMTQybC03NCAtMjI2IGwxOTMgMTM5bDE5NSAtMTQwbC03NCAyMjlsMTkyIDE0MGgtMjM0bC03OCAyMTF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwODsiIGQ9Ik02MDAgMTIwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTI1MHEwIC00NiAtMzEgLTk4dC02OSAtNTJ2LTc1cTAgLTEwIDYgLTIxLjV0MTUgLTE3LjVsMzU4IC0yMzBxOSAtNSAxNSAtMTYuNXQ2IC0yMS41di05M3EwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5M3EwIDEwIDYgMjEuNXQxNSAxNi41bDM1OCAyMzBxOSA2IDE1IDE3LjV0NiAyMS41djc1cS0zOCAwIC02OSA1MiB0LTMxIDk4djI1MHEwIDEyNCA4OCAyMTJ0MjEyIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDk7IiBkPSJNMjUgMTEwMGgxMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTA1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMDUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwMCAxMDAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgMTAwMGgtNTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMzUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNTUwIHExMCAwIDE3LjUgNy41dDcuNSAxNy41djM1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTEwMDAgMTAwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwIDgwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA4MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgNTAwaC01NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0zNTBxMCAtMTAgNy41IC0xNy41IHQxNy41IC03LjVoNTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MzUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMTAwIDQwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCAyMDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTA7IiBkPSJNNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCA1MDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMTsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTEwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODUwIDcwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoMjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTg1MCAzMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41IHQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMjsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNDUwIDcwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMzsiIGQ9Ik00NjUgNDc3bDU3MSA1NzFxOCA4IDE4IDh0MTcgLThsMTc3IC0xNzdxOCAtNyA4IC0xN3QtOCAtMThsLTc4MyAtNzg0cS03IC04IC0xNy41IC04dC0xNy41IDhsLTM4NCAzODRxLTggOCAtOCAxOHQ4IDE3bDE3NyAxNzdxNyA4IDE3IDh0MTggLThsMTcxIC0xNzFxNyAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTQ7IiBkPSJNOTA0IDEwODNsMTc4IC0xNzlxOCAtOCA4IC0xOC41dC04IC0xNy41bC0yNjcgLTI2OGwyNjcgLTI2OHE4IC03IDggLTE3LjV0LTggLTE4LjVsLTE3OCAtMTc4cS04IC04IC0xOC41IC04dC0xNy41IDhsLTI2OCAyNjdsLTI2OCAtMjY3cS03IC04IC0xNy41IC04dC0xOC41IDhsLTE3OCAxNzhxLTggOCAtOCAxOC41dDggMTcuNWwyNjcgMjY4bC0yNjcgMjY4cS04IDcgLTggMTcuNXQ4IDE4LjVsMTc4IDE3OHE4IDggMTguNSA4dDE3LjUgLTggbDI2OCAtMjY3bDI2OCAyNjhxNyA3IDE3LjUgN3QxOC41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTU7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNNDI1IDkwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWg3NXExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41IHQtMTcuNSAtNy41aC03NXYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtNzVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg3NXY3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTY7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNMzI1IDgwMGgzNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxNzsiIGQ9Ik01NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04MDAgOTc1djE2NnExNjcgLTYyIDI3MiAtMjA5LjV0MTA1IC0zMzEuNXEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNSB0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHEwIDE4NCAxMDUgMzMxLjV0MjcyIDIwOS41di0xNjZxLTEwMyAtNTUgLTE2NSAtMTU1dC02MiAtMjIwcTAgLTExNiA1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXEwIDEyMCAtNjIgMjIwdC0xNjUgMTU1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTg7IiBkPSJNMTAyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTExNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTcyNSA4MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgNTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTQ1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djQ1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0xMjUgMzAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41IHYyNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDE5OyIgZD0iTTYwMCAxMTc0cTMzIDAgNzQgLTVsMzggLTE1Mmw1IC0xcTQ5IC0xNCA5NCAtMzlsNSAtMmwxMzQgODBxNjEgLTQ4IDEwNCAtMTA1bC04MCAtMTM0bDMgLTVxMjUgLTQ0IDM5IC05M2wxIC02bDE1MiAtMzhxNSAtNDMgNSAtNzNxMCAtMzQgLTUgLTc0bC0xNTIgLTM4bC0xIC02cS0xNSAtNDkgLTM5IC05M2wtMyAtNWw4MCAtMTM0cS00OCAtNjEgLTEwNCAtMTA1bC0xMzQgODFsLTUgLTNxLTQ0IC0yNSAtOTQgLTM5bC01IC0ybC0zOCAtMTUxIHEtNDMgLTUgLTc0IC01cS0zMyAwIC03NCA1bC0zOCAxNTFsLTUgMnEtNDkgMTQgLTk0IDM5bC01IDNsLTEzNCAtODFxLTYwIDQ4IC0xMDQgMTA1bDgwIDEzNGwtMyA1cS0yNSA0NSAtMzggOTNsLTIgNmwtMTUxIDM4cS02IDQyIC02IDc0cTAgMzMgNiA3M2wxNTEgMzhsMiA2cTEzIDQ4IDM4IDkzbDMgNWwtODAgMTM0cTQ3IDYxIDEwNSAxMDVsMTMzIC04MGw1IDJxNDUgMjUgOTQgMzlsNSAxbDM4IDE1MnE0MyA1IDc0IDV6TTYwMCA4MTUgcS04OSAwIC0xNTIgLTYzdC02MyAtMTUxLjV0NjMgLTE1MS41dDE1MiAtNjN0MTUyIDYzdDYzIDE1MS41dC02MyAxNTEuNXQtMTUyIDYzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjA7IiBkPSJNNTAwIDEzMDBoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMjc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoLTExMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNzV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNTAwIDEyMDB2LTEwMGgzMDB2MTAwaC0zMDB6TTExMDAgOTAwdi04MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTcwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjUgdjgwMGg5MDB6TTMwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTUwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTcwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTkwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMTsiIGQ9Ik0xOCA2MThsNjIwIDYwOHE4IDcgMTguNSA3dDE3LjUgLTdsNjA4IC02MDhxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xNzV2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWgtMzAwdi0zNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NzVoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDIyOyIgZD0iTTYwMCAxMjAwdi00MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDMwMHYtNjUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djExMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHpNMTAwMCA4MDBoLTI1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxMDI3cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd0MjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjV0LTU3IDIxNC41dC0xNTUuNSAxNTUuNXQtMjE0LjUgNTd6TTUyNSA5MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0yNzVoMTc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI0OyIgZD0iTTEzMDAgMGgtNTM4bC00MSA0MDBoLTI0MmwtNDEgLTQwMGgtNTM4bDQzMSAxMjAwaDIwOWwtMjEgLTMwMGgxNjJsLTIwIDMwMGgyMDh6TTUxNSA4MDBsLTI3IC0zMDBoMjI0bC0yNyAzMDBoLTE3MHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI1OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDUwaDE5MXEyMCAwIDI1LjUgLTExLjV0LTcuNSAtMjcuNWwtMzI3IC00MDBxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMzI3IDQwMHEtMTMgMTYgLTcuNSAyNy41dDI1LjUgMTEuNWgxOTF2NDUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEyNSA0MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0zNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41IGgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTc1aDkwMHYxNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01MjUgOTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI3NWgxMzdxMjEgMCAyNiAtMTEuNXQtOCAtMjcuNWwtMjIzIC0yNzVxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMjIzIDI3NXEtMTMgMTYgLTggMjcuNXQyNiAxMS41aDEzN3YyNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNzsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNjMyIDkxNGwyMjMgLTI3NXExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTEzN3YtMjc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2Mjc1aC0xMzdxLTIxIDAgLTI2IDExLjV0OCAyNy41bDIyMyAyNzVxMTMgMTYgMzIgMTYgdDMyIC0xNnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI4OyIgZD0iTTIyNSAxMjAwaDc1MHExMCAwIDE5LjUgLTd0MTIuNSAtMTdsMTg2IC02NTJxNyAtMjQgNyAtNDl2LTQyNXEwIC0xMiAtNCAtMjd0LTkgLTE3cS0xMiAtNiAtMzcgLTZoLTExMDBxLTEyIDAgLTI3IDR0LTE3IDhxLTYgMTMgLTYgMzhsMSA0MjVxMCAyNSA3IDQ5bDE4NSA2NTJxMyAxMCAxMi41IDE3dDE5LjUgN3pNODc4IDEwMDBoLTU1NnEtMTAgMCAtMTkgLTd0LTExIC0xOGwtODcgLTQ1MHEtMiAtMTEgNCAtMTh0MTYgLTdoMTUwIHExMCAwIDE5LjUgLTd0MTEuNSAtMTdsMzggLTE1MnEyIC0xMCAxMS41IC0xN3QxOS41IC03aDI1MHExMCAwIDE5LjUgN3QxMS41IDE3bDM4IDE1MnEyIDEwIDExLjUgMTd0MTkuNSA3aDE1MHExMCAwIDE2IDd0NCAxOGwtODcgNDUwcS0yIDExIC0xMSAxOHQtMTkgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI5OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01NDAgODIwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMDsiIGQ9Ik05NDcgMTA2MGwxMzUgMTM1cTcgNyAxMi41IDV0NS41IC0xM3YtMzYycTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMzYycS0xMSAwIC0xMyA1LjV0NSAxMi41bDEzMyAxMzNxLTEwOSA3NiAtMjM4IDc2cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNWgxNTBxMCAtMTE3IC00NS41IC0yMjQgdC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDMxOyIgZD0iTTk0NyAxMDYwbDEzNSAxMzVxNyA3IDEyLjUgNXQ1LjUgLTEzdi0zNjFxMCAtMTEgLTcuNSAtMTguNXQtMTguNSAtNy41aC0zNjFxLTExIDAgLTEzIDUuNXQ1IDEyLjVsMTM0IDEzNHEtMTEwIDc1IC0yMzkgNzVxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41aC0xNTBxMCAxMTcgNDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3pNMTAyNyA2MDBoMTUwIHEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41cS0xOTIgMCAtMzQ4IDExOGwtMTM0IC0xMzRxLTcgLTggLTEyLjUgLTUuNXQtNS41IDEyLjV2MzYwcTAgMTEgNy41IDE4LjV0MTguNSA3LjVoMzYwcTEwIDAgMTIuNSAtNS41dC01LjUgLTEyLjVsLTEzMyAtMTMzcTExMCAtNzYgMjQwIC03NnExMTYgMCAyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDMyOyIgZD0iTTEyNSAxMjAwaDEwNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djExNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMTA3NSAxMDAwaC04NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di04NTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWg4NTBxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXY4NTAgcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMzI1IDkwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgOTAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTMyNSA3MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNTI1IDcwMGg0NTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTQ1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0zMjUgNTAwaDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTUyNSA1MDBoNDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC00NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMzI1IDMwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgMzAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMzsiIGQ9Ik05MDAgODAwdjIwMHEwIDgzIC01OC41IDE0MS41dC0xNDEuNSA1OC41aC0zMDBxLTgyIDAgLTE0MSAtNTl0LTU5IC0xNDF2LTIwMGgtMTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDkwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NjAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0xMDB6TTQwMCA4MDB2MTUwcTAgMjEgMTUgMzUuNXQzNSAxNC41aDIwMCBxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNXYtMTUwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNDsiIGQ9Ik0xMjUgMTEwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwNzVoLTEwMHYxMDc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwNzUgMTA1MnE0IDAgOSAtMnExNiAtNiAxNiAtMjN2LTQyMXEwIC02IC0zIC0xMnEtMzMgLTU5IC02Ni41IC05OXQtNjUuNSAtNTh0LTU2LjUgLTI0LjV0LTUyLjUgLTYuNXEtMjYgMCAtNTcuNSA2LjV0LTUyLjUgMTMuNXQtNjAgMjFxLTQxIDE1IC02MyAyMi41dC01Ny41IDE1dC02NS41IDcuNSBxLTg1IDAgLTE2MCAtNTdxLTcgLTUgLTE1IC01cS02IDAgLTExIDNxLTE0IDcgLTE0IDIydjQzOHEyMiA1NSA4MiA5OC41dDExOSA0Ni41cTIzIDIgNDMgMC41dDQzIC03dDMyLjUgLTguNXQzOCAtMTN0MzIuNSAtMTFxNDEgLTE0IDYzLjUgLTIxdDU3IC0xNHQ2My41IC03cTEwMyAwIDE4MyA4N3E3IDggMTggOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDM1OyIgZD0iTTYwMCAxMTc1cTExNiAwIDIyNyAtNDkuNXQxOTIuNSAtMTMxdDEzMSAtMTkyLjV0NDkuNSAtMjI3di0zMDBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djMwMHEwIDEyNyAtNzAuNSAyMzEuNXQtMTg0LjUgMTYxLjV0LTI0NSA1N3QtMjQ1IC01N3QtMTg0LjUgLTE2MS41dC03MC41IC0yMzEuNXYtMzAwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTAgcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzAwcTAgMTE2IDQ5LjUgMjI3dDEzMSAxOTIuNXQxOTIuNSAxMzF0MjI3IDQ5LjV6TTIyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwcTAgOCA2IDE0dDE0IDZ6TTgyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwIHEwIDggNiAxNHQxNCA2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzY7IiBkPSJNMzIxIDgxNGwyNTggMTcycTkgNiAxNSAyLjV0NiAtMTMuNXYtNzUwcTAgLTEwIC02IC0xMy41dC0xNSAyLjVsLTI1OCAxNzJxLTIxIDE0IC00NiAxNGgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMjUwcTI1IDAgNDYgMTR6TTkwMCA2NjhsMTIwIDEyMHE3IDcgMTcgN3QxNyAtN2wzNCAtMzRxNyAtNyA3IC0xN3QtNyAtMTdsLTEyMCAtMTIwbDEyMCAtMTIwcTcgLTcgNyAtMTcgdC03IC0xN2wtMzQgLTM0cS03IC03IC0xNyAtN3QtMTcgN2wtMTIwIDExOWwtMTIwIC0xMTlxLTcgLTcgLTE3IC03dC0xNyA3bC0zNCAzNHEtNyA3IC03IDE3dDcgMTdsMTE5IDEyMGwtMTE5IDEyMHEtNyA3IC03IDE3dDcgMTdsMzQgMzRxNyA4IDE3IDh0MTcgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNzsiIGQ9Ik0zMjEgODE0bDI1OCAxNzJxOSA2IDE1IDIuNXQ2IC0xMy41di03NTBxMCAtMTAgLTYgLTEzLjV0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNiBsLTI5IDIzcS03IDcgLTguNSAxNi41dDQuNSAxNy41cTcyIDEwMyA3MiAyMjlxMCAxMzIgLTc4IDIzOHEtNiA4IC00LjUgMTh0OS41IDE3bDI5IDIycTcgNSAxNSA1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzg7IiBkPSJNOTY3IDEwMDRoM3ExMSAtMSAxNyAtMTBxMTM1IC0xNzkgMTM1IC0zOTZxMCAtMTA1IC0zNCAtMjA2LjV0LTk4IC0xODUuNXEtNyAtOSAtMTcgLTEwaC0zcS05IDAgLTE2IDZsLTQyIDM0cS04IDYgLTkgMTZ0NSAxOHExMTEgMTUwIDExMSAzMjhxMCA5MCAtMjkuNSAxNzZ0LTg0LjUgMTU3cS02IDkgLTUgMTl0MTAgMTZsNDIgMzNxNyA1IDE1IDV6TTMyMSA4MTRsMjU4IDE3MnE5IDYgMTUgMi41dDYgLTEzLjV2LTc1MHEwIC0xMCAtNiAtMTMuNSB0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNmwtMjkgMjNxLTcgNyAtOC41IDE2LjV0NC41IDE3LjVxNzIgMTAzIDcyIDIyOXEwIDEzMiAtNzggMjM4IHEtNiA4IC00LjUgMTguNXQ5LjUgMTYuNWwyOSAyMnE3IDUgMTUgNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDM5OyIgZD0iTTUwMCA5MDBoMTAwdi0xMDBoLTEwMHYtMTAwaC00MDB2LTEwMGgtMTAwdjYwMGg1MDB2LTMwMHpNMTIwMCA3MDBoLTIwMHYtMTAwaDIwMHYtMjAwaC0zMDB2MzAwaC0yMDB2MzAwaC0xMDB2MjAwaDYwMHYtNTAwek0xMDAgMTEwMHYtMzAwaDMwMHYzMDBoLTMwMHpNODAwIDExMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTMwMCA5MDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEwMDAgOTAwaC0xMDB2MTAwaDEwMHYtMTAwek0zMDAgNTAwaDIwMHYtNTAwIGgtNTAwdjUwMGgyMDB2MTAwaDEwMHYtMTAwek04MDAgMzAwaDIwMHYtMTAwaC0xMDB2LTEwMGgtMjAwdjEwMGgtMTAwdjEwMGgxMDB2MjAwaC0yMDB2MTAwaDMwMHYtMzAwek0xMDAgNDAwdi0zMDBoMzAwdjMwMGgtMzAwek0zMDAgMjAwaC0xMDB2MTAwaDEwMHYtMTAwek0xMjAwIDIwMGgtMTAwdjEwMGgxMDB2LTEwMHpNNzAwIDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEyMDAgMGgtMzAwdjEwMGgzMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQwOyIgZD0iTTEwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMzAwIDIwMGgtMTAwdjEwMDBoMTAwdi0xMDAwek03MDAgMjAwaC0yMDB2MTAwMGgyMDB2LTEwMDB6TTkwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMTIwMCAyMDBoLTIwMHYxMDAwaDIwMHYtMTAwMHpNNDAwIDBoLTMwMHYxMDBoMzAwdi0xMDB6TTYwMCAwaC0xMDB2OTFoMTAwdi05MXpNODAwIDBoLTEwMHY5MWgxMDB2LTkxek0xMTAwIDBoLTIwMHY5MWgyMDB2LTkxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNDE7IiBkPSJNNTAwIDEyMDBsNjgyIC02ODJxOCAtOCA4IC0xOHQtOCAtMThsLTQ2NCAtNDY0cS04IC04IC0xOCAtOHQtMTggOGwtNjgyIDY4MmwxIDQ3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDQ3NHpNMzE5LjUgMTAyNC41cS0yOS41IDI5LjUgLTcxIDI5LjV0LTcxIC0yOS41dC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQyOyIgZD0iTTUwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTY4MiA2ODJsMSA0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg0NzR6TTgwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTU2IDU2bDQyNCA0MjZsLTcwMCA3MDBoMTUwek0zMTkuNSAxMDI0LjVxLTI5LjUgMjkuNSAtNzEgMjkuNXQtNzEgLTI5LjUgdC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQzOyIgZD0iTTMwMCAxMjAwaDgyNXE3NSAwIDc1IC03NXYtOTAwcTAgLTI1IC0xOCAtNDNsLTY0IC02NHEtOCAtOCAtMTMgLTUuNXQtNSAxMi41djk1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjVoLTcwMHEtMjUgMCAtNDMgLTE4bC02NCAtNjRxLTggLTggLTUuNSAtMTN0MTIuNSAtNWg3MDBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di05NTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC04NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NzUgcTAgMjUgMTggNDNsMTM5IDEzOXExOCAxOCA0MyAxOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ0OyIgZD0iTTI1MCAxMjAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTE1MGwtNDUwIDQ0NGwtNDUwIC00NDV2MTE1MXEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NTsiIGQ9Ik04MjIgMTIwMGgtNDQ0cS0xMSAwIC0xOSAtNy41dC05IC0xNy41bC03OCAtMzAxcS03IC0yNCA3IC00NWw1NyAtMTA4cTYgLTkgMTcuNSAtMTV0MjEuNSAtNmg0NTBxMTAgMCAyMS41IDZ0MTcuNSAxNWw2MiAxMDhxMTQgMjEgNyA0NWwtODMgMzAxcS0xIDEwIC05IDE3LjV0LTE5IDcuNXpNMTE3NSA4MDBoLTE1MHEtMTAgMCAtMjEgLTYuNXQtMTUgLTE1LjVsLTc4IC0xNTZxLTQgLTkgLTE1IC0xNS41dC0yMSAtNi41aC01NTAgcS0xMCAwIC0yMSA2LjV0LTE1IDE1LjVsLTc4IDE1NnEtNCA5IC0xNSAxNS41dC0yMSA2LjVoLTE1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTY1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDc1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41IHQ3LjUgMTcuNXY2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41ek04NTAgMjAwaC01MDBxLTEwIDAgLTE5LjUgLTd0LTExLjUgLTE3bC0zOCAtMTUycS0yIC0xMCAzLjUgLTE3dDE1LjUgLTdoNjAwcTEwIDAgMTUuNSA3dDMuNSAxN2wtMzggMTUycS0yIDEwIC0xMS41IDE3dC0xOS41IDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NjsiIGQ9Ik01MDAgMTEwMGgyMDBxNTYgMCAxMDIuNSAtMjAuNXQ3Mi41IC01MHQ0NCAtNTl0MjUgLTUwLjVsNiAtMjBoMTUwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTUwcTIgOCA2LjUgMjEuNXQyNCA0OHQ0NSA2MXQ3MiA0OHQxMDIuNSAyMS41ek05MDAgODAwdi0xMDAgaDEwMHYxMDBoLTEwMHpNNjAwIDczMHEtOTUgMCAtMTYyLjUgLTY3LjV0LTY3LjUgLTE2Mi41dDY3LjUgLTE2Mi41dDE2Mi41IC02Ny41dDE2Mi41IDY3LjV0NjcuNSAxNjIuNXQtNjcuNSAxNjIuNXQtMTYyLjUgNjcuNXpNNjAwIDYwM3E0MyAwIDczIC0zMHQzMCAtNzN0LTMwIC03M3QtNzMgLTMwdC03MyAzMHQtMzAgNzN0MzAgNzN0NzMgMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NzsiIGQ9Ik02ODEgMTE5OWwzODUgLTk5OHEyMCAtNTAgNjAgLTkycTE4IC0xOSAzNi41IC0yOS41dDI3LjUgLTExLjVsMTAgLTJ2LTY2aC00MTd2NjZxNTMgMCA3NSA0My41dDUgODguNWwtODIgMjIyaC0zOTFxLTU4IC0xNDUgLTkyIC0yMzRxLTExIC0zNCAtNi41IC01N3QyNS41IC0zN3Q0NiAtMjB0NTUgLTZ2LTY2aC0zNjV2NjZxNTYgMjQgODQgNTJxMTIgMTIgMjUgMzAuNXQyMCAzMS41bDcgMTNsMzk5IDEwMDZoOTN6TTQxNiA1MjFoMzQwIGwtMTYyIDQ1N3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ4OyIgZD0iTTc1MyA2NDFxNSAtMSAxNC41IC00LjV0MzYgLTE1LjV0NTAuNSAtMjYuNXQ1My41IC00MHQ1MC41IC01NC41dDM1LjUgLTcwdDE0LjUgLTg3cTAgLTY3IC0yNy41IC0xMjUuNXQtNzEuNSAtOTcuNXQtOTguNSAtNjYuNXQtMTA4LjUgLTQwLjV0LTEwMiAtMTNoLTUwMHY4OXE0MSA3IDcwLjUgMzIuNXQyOS41IDY1LjV2ODI3cTAgMjQgLTAuNSAzNHQtMy41IDI0dC04LjUgMTkuNXQtMTcgMTMuNXQtMjggMTIuNXQtNDIuNSAxMS41djcxIGw0NzEgLTFxNTcgMCAxMTUuNSAtMjAuNXQxMDggLTU3dDgwLjUgLTk0dDMxIC0xMjQuNXEwIC01MSAtMTUuNSAtOTYuNXQtMzggLTc0LjV0LTQ1IC01MC41dC0zOC41IC0zMC41ek00MDAgNzAwaDEzOXE3OCAwIDEzMC41IDQ4LjV0NTIuNSAxMjIuNXEwIDQxIC04LjUgNzAuNXQtMjkuNSA1NS41dC02Mi41IDM5LjV0LTEwMy41IDEzLjVoLTExOHYtMzUwek00MDAgMjAwaDIxNnE4MCAwIDEyMSA1MC41dDQxIDEzMC41cTAgOTAgLTYyLjUgMTU0LjUgdC0xNTYuNSA2NC41aC0xNTl2LTQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ5OyIgZD0iTTg3NyAxMjAwbDIgLTU3cS04MyAtMTkgLTExNiAtNDUuNXQtNDAgLTY2LjVsLTEzMiAtODM5cS05IC00OSAxMyAtNjl0OTYgLTI2di05N2gtNTAwdjk3cTE4NiAxNiAyMDAgOThsMTczIDgzMnEzIDE3IDMgMzB0LTEuNSAyMi41dC05IDE3LjV0LTEzLjUgMTIuNXQtMjEuNSAxMHQtMjYgOC41dC0zMy41IDEwcS0xMyAzIC0xOSA1djU3aDQyNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDUwOyIgZD0iTTEzMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTE3NSAxMDAwaC03NXYtODAwaDc1bC0xMjUgLTE2N2wtMTI1IDE2N2g3NXY4MDBoLTc1bDEyNSAxNjd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MTsiIGQ9Ik0xMTAwIDkwMGgtNTBxMCAyMSAtNCAzN3QtOS41IDI2LjV0LTE4IDE3LjV0LTIyIDExdC0yOC41IDUuNXQtMzEgMnQtMzcgMC41aC0yMDB2LTY1MHEwIC0yMiAyNSAtMzQuNXQ1MCAtMTMuNWwyNSAtMnYtMTAwaC00MDB2MTAwcTQgMCAxMSAwLjV0MjQgM3QzMCA3dDI0IDE1dDExIDI0LjV2NjUwaC0yMDBxLTI1IDAgLTM3IC0wLjV0LTMxIC0ydC0yOC41IC01LjV0LTIyIC0xMXQtMTggLTE3LjV0LTkuNSAtMjYuNXQtNCAtMzdoLTUwdjMwMCBoMTAwMHYtMzAwek0xMTY3IDUwbC0xNjcgLTEyNXY3NWgtODAwdi03NWwtMTY3IDEyNWwxNjcgMTI1di03NWg4MDB2NzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MjsiIGQ9Ik01MCAxMTAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDgwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MzsiIGQ9Ik0yNTAgMTEwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjUwIDUwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDU0OyIgZD0iTTUwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg2MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMTAwIDY1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0zMDAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDU1OyIgZD0iTTUwIDExMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NjsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCAxMTAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMzUwIDgwMGg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zNTAgMjAwaDgwMCBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNTc7IiBkPSJNNDAwIDBoLTEwMHYxMTAwaDEwMHYtMTEwMHpNNTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjY3IDU1MGwtMTY3IC0xMjV2NzVoLTIwMHYxMDBoMjAwdjc1ek01NTAgNTAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTU1MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1ODsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAwaC0xMDB2MTEwMGgxMDB2LTExMDB6TTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEwMCA2MDBoMjAwdi0xMDBoLTIwMHYtNzVsLTE2NyAxMjVsMTY3IDEyNXYtNzV6TTUwIDUwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1OTsiIGQ9Ik03NSAxMDAwaDc1MHEzMSAwIDUzIC0yMnQyMiAtNTN2LTY1MHEwIC0zMSAtMjIgLTUzdC01MyAtMjJoLTc1MHEtMzEgMCAtNTMgMjJ0LTIyIDUzdjY1MHEwIDMxIDIyIDUzdDUzIDIyek0xMjAwIDMwMGwtMzAwIDMwMGwzMDAgMzAwdi02MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MDsiIGQ9Ik00NCAxMTAwaDExMTJxMTggMCAzMSAtMTN0MTMgLTMxdi0xMDEycTAgLTE4IC0xMyAtMzF0LTMxIC0xM2gtMTExMnEtMTggMCAtMzEgMTN0LTEzIDMxdjEwMTJxMCAxOCAxMyAzMXQzMSAxM3pNMTAwIDEwMDB2LTczN2wyNDcgMTgybDI5OCAtMTMxbC03NCAxNTZsMjkzIDMxOGwyMzYgLTI4OHY1MDBoLTEwMDB6TTM0MiA4ODRxNTYgMCA5NSAtMzl0MzkgLTk0LjV0LTM5IC05NXQtOTUgLTM5LjV0LTk1IDM5LjV0LTM5IDk1dDM5IDk0LjUgdDk1IDM5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjI7IiBkPSJNNjQ4IDExNjlxMTE3IDAgMjE2IC02MHQxNTYuNSAtMTYxdDU3LjUgLTIxOHEwIC0xMTUgLTcwIC0yNThxLTY5IC0xMDkgLTE1OCAtMjI1LjV0LTE0MyAtMTc5LjVsLTU0IC02MnEtOSA4IC0yNS41IDI0LjV0LTYzLjUgNjcuNXQtOTEgMTAzdC05OC41IDEyOHQtOTUuNSAxNDhxLTYwIDEzMiAtNjAgMjQ5cTAgODggMzQgMTY5LjV0OTEuNSAxNDJ0MTM3IDk2LjV0MTY2LjUgMzZ6TTY1Mi41IDk3NHEtOTEuNSAwIC0xNTYuNSAtNjUgdC02NSAtMTU3dDY1IC0xNTYuNXQxNTYuNSAtNjQuNXQxNTYuNSA2NC41dDY1IDE1Ni41dC02NSAxNTd0LTE1Ni41IDY1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxNzN2ODU0cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NDsiIGQ9Ik01NTQgMTI5NXEyMSAtNzIgNTcuNSAtMTQzLjV0NzYgLTEzMHQ4MyAtMTE4dDgyLjUgLTExN3Q3MCAtMTE2dDQ5LjUgLTEyNnQxOC41IC0xMzYuNXEwIC03MSAtMjUuNSAtMTM1dC02OC41IC0xMTF0LTk5IC04MnQtMTE4LjUgLTU0dC0xMjUuNSAtMjNxLTg0IDUgLTE2MS41IDM0dC0xMzkuNSA3OC41dC05OSAxMjV0LTM3IDE2NC41cTAgNjkgMTggMTM2LjV0NDkuNSAxMjYuNXQ2OS41IDExNi41dDgxLjUgMTE3LjV0ODMuNSAxMTkgdDc2LjUgMTMxdDU4LjUgMTQzek0zNDQgNzEwcS0yMyAtMzMgLTQzLjUgLTcwLjV0LTQwLjUgLTEwMi41dC0xNyAtMTIzcTEgLTM3IDE0LjUgLTY5LjV0MzAgLTUydDQxIC0zN3QzOC41IC0yNC41dDMzIC0xNXEyMSAtNyAzMiAtMXQxMyAyMmw2IDM0cTIgMTAgLTIuNSAyMnQtMTMuNSAxOXEtNSA0IC0xNCAxMnQtMjkuNSA0MC41dC0zMi41IDczLjVxLTI2IDg5IDYgMjcxcTIgMTEgLTYgMTFxLTggMSAtMTUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjU7IiBkPSJNMTAwMCAxMDEzbDEwOCAxMTVxMiAxIDUgMnQxMyAydDIwLjUgLTF0MjUgLTkuNXQyOC41IC0yMS41cTIyIC0yMiAyNyAtNDN0MCAtMzJsLTYgLTEwbC0xMDggLTExNXpNMzUwIDExMDBoNDAwcTUwIDAgMTA1IC0xM2wtMTg3IC0xODdoLTM2OHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djE4MmwyMDAgMjAwdi0zMzIgcTAgLTE2NSAtOTMuNSAtMjU3LjV0LTI1Ni41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTEwMDkgODAzbC0zNjIgLTM2MmwtMTYxIC01MGw1NSAxNzBsMzU1IDM1NXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY2OyIgZD0iTTM1MCAxMTAwaDM2MXEtMTY0IC0xNDYgLTIxNiAtMjAwaC0xOTVxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNWwyMDAgMTUzdi0xMDNxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTgyNCAxMDczbDMzOSAtMzAxcTggLTcgOCAtMTcuNXQtOCAtMTcuNWwtMzQwIC0zMDZxLTcgLTYgLTEyLjUgLTR0LTYuNSAxMXYyMDNxLTI2IDEgLTU0LjUgMHQtNzguNSAtNy41dC05MiAtMTcuNXQtODYgLTM1dC03MCAtNTdxMTAgNTkgMzMgMTA4dDUxLjUgODEuNXQ2NSA1OC41dDY4LjUgNDAuNXQ2NyAyNC41dDU2IDEzLjV0NDAgNC41djIxMHExIDEwIDYuNSAxMi41dDEzLjUgLTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY3OyIgZD0iTTM1MCAxMTAwaDM1MHE2MCAwIDEyNyAtMjNsLTE3OCAtMTc3aC0zNDlxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2OWwyMDAgMjAwdi0yMTlxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTY0MyA2MzlsMzk1IDM5NXE3IDcgMTcuNSA3dDE3LjUgLTdsMTAxIC0xMDFxNyAtNyA3IC0xNy41dC03IC0xNy41bC01MzEgLTUzMnEtNyAtNyAtMTcuNSAtN3QtMTcuNSA3bC0yNDggMjQ4cS03IDcgLTcgMTcuNXQ3IDE3LjVsMTAxIDEwMXE3IDcgMTcuNSA3dDE3LjUgLTdsMTExIC0xMTFxOCAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjg7IiBkPSJNMzE4IDkxOGwyNjQgMjY0cTggOCAxOCA4dDE4IC04bDI2MCAtMjY0cTcgLTggNC41IC0xM3QtMTIuNSAtNWgtMTcwdi0yMDBoMjAwdjE3M3EwIDEwIDUgMTJ0MTMgLTVsMjY0IC0yNjBxOCAtNyA4IC0xNy41dC04IC0xNy41bC0yNjQgLTI2NXEtOCAtNyAtMTMgLTV0LTUgMTJ2MTczaC0yMDB2LTIwMGgxNzBxMTAgMCAxMi41IC01dC00LjUgLTEzbC0yNjAgLTI2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTI2NCAyNjRxLTggOCAtNS41IDEzIHQxMi41IDVoMTc1djIwMGgtMjAwdi0xNzNxMCAtMTAgLTUgLTEydC0xMyA1bC0yNjQgMjY1cS04IDcgLTggMTcuNXQ4IDE3LjVsMjY0IDI2MHE4IDcgMTMgNXQ1IC0xMnYtMTczaDIwMHYyMDBoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY5OyIgZD0iTTI1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM4bDQ2NCA0NTNxMTUgMTQgMjUuNSAxMHQxMC41IC0yNXYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDcwOyIgZD0iTTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di0xMDAwcTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDcxOyIgZD0iTTEyMDAgMTA1MHYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ5MiA0ODBxLTE1IDE0IC0xNSAzNXQxNSAzNWw0OTIgNDgwcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV2LTQzOGw0NjQgNDUzcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MjsiIGQ9Ik0yNDMgMTA3NGw4MTQgLTQ5OHExOCAtMTEgMTggLTI2dC0xOCAtMjZsLTgxNCAtNDk4cS0xOCAtMTEgLTMwLjUgLTR0LTEyLjUgMjh2MTAwMHEwIDIxIDEyLjUgMjh0MzAuNSAtNHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDczOyIgZD0iTTI1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzQ7IiBkPSJNMTEwMCA5NTB2LTgwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY4MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDc1OyIgZD0iTTUwMCA2MTJ2NDM4cTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0OTIgLTQ4MHExNSAtMTQgMTUgLTM1dC0xNSAtMzVsLTQ5MiAtNDgwcS0xNSAtMTQgLTI1LjUgLTEwdC0xMC41IDI1djQzOGwtNDY0IC00NTNxLTE1IC0xNCAtMjUuNSAtMTB0LTEwLjUgMjV2MTAwMHEwIDIxIDEwLjUgMjV0MjUuNSAtMTB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NjsiIGQ9Ik0xMDQ4IDExMDJsMTAwIDFxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNWw1IC0xMDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41bC0xMDAgLTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41bC0yIDQzN2wtNDYzIC00NTRxLTE0IC0xNSAtMjQuNSAtMTAuNXQtMTAuNSAyNS41bC0yIDQzN2wtNDYyIC00NTVxLTE1IC0xNCAtMjUuNSAtOS41dC0xMC41IDI0LjVsLTUgMTAwMHEwIDIxIDEwLjUgMjUuNXQyNS41IC0xMC41bDQ2NiAtNDUwIGwtMiA0MzhxMCAyMCAxMC41IDI0LjV0MjUuNSAtOS41bDQ2NiAtNDUxbC0yIDQzOHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NzsiIGQ9Ik04NTAgMTEwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDM4bC00NjQgLTQ1M3EtMTUgLTE0IC0yNS41IC0xMHQtMTAuNSAyNXYxMDAwcTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0NjQgLTQ1M3Y0MzhxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzg7IiBkPSJNNjg2IDEwODFsNTAxIC01NDBxMTUgLTE1IDEwLjUgLTI2dC0yNi41IC0xMWgtMTA0MnEtMjIgMCAtMjYuNSAxMXQxMC41IDI2bDUwMSA1NDBxMTUgMTUgMzYgMTV0MzYgLTE1ek0xNTAgNDAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDc5OyIgZD0iTTg4NSA5MDBsLTM1MiAtMzUzbDM1MiAtMzUzbC0xOTcgLTE5OGwtNTUyIDU1Mmw1NTIgNTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODA7IiBkPSJNMTA2NCA1NDdsLTU1MSAtNTUxbC0xOTggMTk4bDM1MyAzNTNsLTM1MyAzNTNsMTk4IDE5OHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDgxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NTAgOTAwaC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MGgtMTUwIHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxNTB2LTE1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMTAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxNTBoMTUwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTE1MHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MjsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNODUwIDcwMGgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNSB0MzUuNSAtMTQuNWg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDgzOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03NDEuNSA5MTNxLTEyLjUgMCAtMjEuNSAtOWwtMTIwIC0xMjBsLTEyMCAxMjBxLTkgOSAtMjEuNSA5IHQtMjEuNSAtOWwtMTQxIC0xNDFxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxMjAgLTEyMGwtMTIwIC0xMjBxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxNDEgLTE0MXE5IC05IDIxLjUgLTl0MjEuNSA5bDEyMCAxMjBsMTIwIC0xMjBxOSAtOSAyMS41IC05dDIxLjUgOWwxNDEgMTQxcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTIwIDEyMGwxMjAgMTIwcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTQxIDE0MXEtOSA5IC0yMS41IDl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NDsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNTQ2IDYyM2wtODQgODVxLTcgNyAtMTcuNSA3dC0xOC41IC03bC0xMzkgLTEzOXEtNyAtOCAtNyAtMTh0NyAtMTggbDI0MiAtMjQxcTcgLTggMTcuNSAtOHQxNy41IDhsMzc1IDM3NXE3IDcgNyAxNy41dC03IDE4LjVsLTEzOSAxMzlxLTcgNyAtMTcuNSA3dC0xNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODU7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTU4OCA5NDFxLTI5IDAgLTU5IC01LjV0LTYzIC0yMC41dC01OCAtMzguNXQtNDEuNSAtNjN0LTE2LjUgLTg5LjUgcTAgLTI1IDIwIC0yNWgxMzFxMzAgLTUgMzUgMTFxNiAyMCAyMC41IDI4dDQ1LjUgOHEyMCAwIDMxLjUgLTEwLjV0MTEuNSAtMjguNXEwIC0yMyAtNyAtMzR0LTI2IC0xOHEtMSAwIC0xMy41IC00dC0xOS41IC03LjV0LTIwIC0xMC41dC0yMiAtMTd0LTE4LjUgLTI0dC0xNS41IC0zNXQtOCAtNDZxLTEgLTggNS41IC0xNi41dDIwLjUgLTguNWgxNzNxNyAwIDIyIDh0MzUgMjh0MzcuNSA0OHQyOS41IDc0dDEyIDEwMHEwIDQ3IC0xNyA4MyB0LTQyLjUgNTd0LTU5LjUgMzQuNXQtNjQgMTh0LTU5IDQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDg2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NzUgMTAwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNSB0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTY3NSA3MDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNzV2LTIwMGgtNzVxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di01MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDM1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djUwcTAgMTAgLTcuNSAxNy41IHQtMTcuNSA3LjVoLTc1djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NzsiIGQ9Ik01MjUgMTIwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xOTRxMTAzIC0yNyAxNzguNSAtMTAyLjV0MTAyLjUgLTE3OC41aDE5NHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE5NHEtMjcgLTEwMyAtMTAyLjUgLTE3OC41dC0xNzguNSAtMTAyLjV2LTE5NHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE5NCBxLTEwMyAyNyAtMTc4LjUgMTAyLjV0LTEwMi41IDE3OC41aC0xOTRxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxOTRxMjcgMTAzIDEwMi41IDE3OC41dDE3OC41IDEwMi41djE5NHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek03MDAgODkzdi0xNjhxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNjhxLTY4IC0yMyAtMTE5IC03NCB0LTc0IC0xMTloMTY4cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTY4cTIzIC02OCA3NCAtMTE5dDExOSAtNzR2MTY4cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTY4cTY4IDIzIDExOSA3NHQ3NCAxMTloLTE2OHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDE2OCBxLTIzIDY4IC03NCAxMTl0LTExOSA3NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDg4OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek03NTkgODIzbDY0IC02NHE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTEyNCAtMTI0bDEyNCAtMTI0cTcgLTcgNyAtMTcuNXQtNyAtMTcuNWwtNjQgLTY0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTEyNCAxMjRsLTEyNCAtMTI0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTY0IDY0IHEtNyA3IC03IDE3LjV0NyAxNy41bDEyNCAxMjRsLTEyNCAxMjRxLTcgNyAtNyAxNy41dDcgMTcuNWw2NCA2NHE3IDcgMTcuNSA3dDE3LjUgLTdsMTI0IC0xMjRsMTI0IDEyNHE3IDcgMTcuNSA3dDE3LjUgLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4OTsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNzgyIDc4OGwxMDYgLTEwNnE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTMyMCAtMzIxcS04IC03IC0xOCAtN3QtMTggN2wtMjAyIDIwM3EtOCA3IC04IDE3LjV0OCAxNy41bDEwNiAxMDZxNyA4IDE3LjUgOHQxNy41IC04bDc5IC03OWwxOTcgMTk3cTcgNyAxNy41IDd0MTcuNSAtN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDkwOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjVxMCAtMTIwIDY1IC0yMjUgbDU4NyA1ODdxLTEwNSA2NSAtMjI1IDY1ek05NjUgODE5bC01ODQgLTU4NHExMDQgLTYyIDIxOSAtNjJxMTE2IDAgMjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjVxMCAxMTUgLTYyIDIxOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDkxOyIgZD0iTTM5IDU4Mmw1MjIgNDI3cTE2IDEzIDI3LjUgOHQxMS41IC0yNnYtMjkxaDU1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC01NTB2LTI5MXEwIC0yMSAtMTEuNSAtMjZ0LTI3LjUgOGwtNTIyIDQyN3EtMTYgMTMgLTE2IDMydDE2IDMyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwOTI7IiBkPSJNNjM5IDEwMDlsNTIyIC00MjdxMTYgLTEzIDE2IC0zMnQtMTYgLTMybC01MjIgLTQyN3EtMTYgLTEzIC0yNy41IC04dC0xMS41IDI2djI5MWgtNTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDU1MHYyOTFxMCAyMSAxMS41IDI2dDI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MzsiIGQ9Ik02ODIgMTE2MWw0MjcgLTUyMnExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTI5MXYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djU1MGgtMjkxcS0yMSAwIC0yNiAxMS41dDggMjcuNWw0MjcgNTIycTEzIDE2IDMyIDE2dDMyIC0xNnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk0OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUwaDI5MXEyMSAwIDI2IC0xMS41dC04IC0yNy41bC00MjcgLTUyMnEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC00MjcgNTIycS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMjkxdjU1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NTsiIGQ9Ik02MzkgMTEwOWw1MjIgLTQyN3ExNiAtMTMgMTYgLTMydC0xNiAtMzJsLTUyMiAtNDI3cS0xNiAtMTMgLTI3LjUgLTh0LTExLjUgMjZ2MjkxcS05NCAtMiAtMTgyIC0yMHQtMTcwLjUgLTUydC0xNDcgLTkyLjV0LTEwMC41IC0xMzUuNXE1IDEwNSAyNyAxOTMuNXQ2Ny41IDE2N3QxMTMgMTM1dDE2NyA5MS41dDIyNS41IDQydjI2MnEwIDIxIDExLjUgMjZ0MjcuNSAtOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk2OyIgZD0iTTg1MCAxMjAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzAwcTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtOTQgOTRsLTI0OSAtMjQ5cS04IC03IC0xOCAtN3QtMTggN2wtMTA2IDEwNnEtNyA4IC03IDE4dDcgMThsMjQ5IDI0OWwtOTQgOTRxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjV6TTM1MCAwaC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djMwMHEwIDIxIDEwLjUgMjV0MjQuNSAtMTBsOTQgLTk0bDI0OSAyNDkgcTggNyAxOCA3dDE4IC03bDEwNiAtMTA2cTcgLTggNyAtMTh0LTcgLTE4bC0yNDkgLTI0OWw5NCAtOTRxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk3OyIgZD0iTTEwMTQgMTEyMGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMjQ5IC0yNDlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMjQ5IDI0OXE4IDcgMTggN3QxOCAtN3pNMjUwIDYwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMjQ5IC0yNDlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwyNDkgMjQ5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03MDQgOTAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNSB0MzcuNSAtMTQuNWg1NHEyMCAwIDM3LjUgMTQuNXQyMS41IDM0LjVsNTggMzAycTQgMjAgLTggMzQuNXQtMzIgMTQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAyOyIgZD0iTTI2MCAxMjAwcTkgMCAxOSAtMnQxNSAtNGw1IC0ycTIyIC0xMCA0NCAtMjNsMTk2IC0xMThxMjEgLTEzIDM2IC0yNHEyOSAtMjEgMzcgLTEycTExIDEzIDQ5IDM1bDE5NiAxMThxMjIgMTMgNDUgMjNxMTcgNyAzOCA3cTIzIDAgNDcgLTE2LjV0MzcgLTMzLjVsMTMgLTE2cTE0IC0yMSAxOCAtNDVsMjUgLTEyM2w4IC00NHExIC05IDguNSAtMTQuNXQxNy41IC01LjVoNjFxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MCBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE3NWgtNDAwdjMwMGgtMjAwdi0zMDBoLTQwMHYxNzVxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNjFxMTEgMCAxOCAzdDcgOHEwIDQgOSA1MmwyNSAxMjhxNSAyNSAxOSA0NXEyIDMgNSA3dDEzLjUgMTV0MjEuNSAxOS41dDI2LjUgMTUuNSB0MjkuNSA3ek05MTUgMTA3OWwtMTY2IC0xNjJxLTcgLTcgLTUgLTEydDEyIC01aDIxOXExMCAwIDE1IDd0MiAxN2wtNTEgMTQ5cS0zIDEwIC0xMSAxMnQtMTUgLTZ6TTQ2MyA5MTdsLTE3NyAxNTdxLTggNyAtMTYgNXQtMTEgLTEybC01MSAtMTQzcS0zIC0xMCAyIC0xN3QxNSAtN2gyMzFxMTEgMCAxMi41IDV0LTUuNSAxMnpNNTAwIDBoLTM3NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWg0MDB2LTQwMHpNMTEwMCA0MDB2LTM3NSBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNzV2NDAwaDQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAzOyIgZD0iTTExNjUgMTE5MHE4IDMgMjEgLTYuNXQxMyAtMTcuNXEtMiAtMTc4IC0yNC41IC0zMjMuNXQtNTUuNSAtMjQ1LjV0LTg3IC0xNzQuNXQtMTAyLjUgLTExOC41dC0xMTggLTY4LjV0LTExOC41IC0zM3QtMTIwIC00LjV0LTEwNSA5LjV0LTkwIDE2LjVxLTYxIDEyIC03OCAxMXEtNCAxIC0xMi41IDB0LTM0IC0xNC41dC01Mi41IC00MC41bC0xNTMgLTE1M3EtMjYgLTI0IC0zNyAtMTQuNXQtMTEgNDMuNXEwIDY0IDQyIDEwMnE4IDggNTAuNSA0NSB0NjYuNSA1OHExOSAxNyAzNSA0N3QxMyA2MXEtOSA1NSAtMTAgMTAyLjV0NyAxMTF0MzcgMTMwdDc4IDEyOS41cTM5IDUxIDgwIDg4dDg5LjUgNjMuNXQ5NC41IDQ1dDExMy41IDM2dDEyOSAzMXQxNTcuNSAzN3QxODIgNDcuNXpNMTExNiAxMDk4cS04IDkgLTIyLjUgLTN0LTQ1LjUgLTUwcS0zOCAtNDcgLTExOSAtMTAzLjV0LTE0MiAtODkuNWwtNjIgLTMzcS01NiAtMzAgLTEwMiAtNTd0LTEwNCAtNjh0LTEwMi41IC04MC41dC04NS41IC05MSB0LTY0IC0xMDQuNXEtMjQgLTU2IC0zMSAtODZ0MiAtMzJ0MzEuNSAxNy41dDU1LjUgNTkuNXEyNSAzMCA5NCA3NS41dDEyNS41IDc3LjV0MTQ3LjUgODFxNzAgMzcgMTE4LjUgNjl0MTAyIDc5LjV0OTkgMTExdDg2LjUgMTQ4LjVxMjIgNTAgMjQgNjB0LTYgMTl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNDsiIGQ9Ik02NTMgMTIzMXEtMzkgLTY3IC01NC41IC0xMzF0LTEwLjUgLTExNC41dDI0LjUgLTk2LjV0NDcuNSAtODB0NjMuNSAtNjIuNXQ2OC41IC00Ni41dDY1IC0zMHEtNCA3IC0xNy41IDM1dC0xOC41IDM5LjV0LTE3IDM5LjV0LTE3IDQzdC0xMyA0MnQtOS41IDQ0LjV0LTIgNDJ0NCA0M3QxMy41IDM5dDIzIDM4LjVxOTYgLTQyIDE2NSAtMTA3LjV0MTA1IC0xMzh0NTIgLTE1NnQxMyAtMTU5dC0xOSAtMTQ5LjVxLTEzIC01NSAtNDQgLTEwNi41IHQtNjggLTg3dC03OC41IC02NC41dC03Mi41IC00NXQtNTMgLTIycS03MiAtMjIgLTEyNyAtMTFxLTMxIDYgLTEzIDE5cTYgMyAxNyA3cTEzIDUgMzIuNSAyMXQ0MSA0NHQzOC41IDYzLjV0MjEuNSA4MS41dC02LjUgOTQuNXQtNTAgMTA3dC0xMDQgMTE1LjVxMTAgLTEwNCAtMC41IC0xODl0LTM3IC0xNDAuNXQtNjUgLTkzdC04NCAtNTJ0LTkzLjUgLTExdC05NSAyNC41cS04MCAzNiAtMTMxLjUgMTE0dC01My41IDE3MXEtMiAyMyAwIDQ5LjUgdDQuNSA1Mi41dDEzLjUgNTZ0MjcuNSA2MHQ0NiA2NC41dDY5LjUgNjguNXEtOCAtNTMgLTUgLTEwMi41dDE3LjUgLTkwdDM0IC02OC41dDQ0LjUgLTM5dDQ5IC0ycTMxIDEzIDM4LjUgMzZ0LTQuNSA1NXQtMjkgNjQuNXQtMzYgNzV0LTI2IDc1LjVxLTE1IDg1IDIgMTYxLjV0NTMuNSAxMjguNXQ4NS41IDkyLjV0OTMuNSA2MXQ4MS41IDI1LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNTsiIGQ9Ik02MDAgMTA5NHE4MiAwIDE2MC41IC0yMi41dDE0MCAtNTl0MTE2LjUgLTgyLjV0OTQuNSAtOTV0NjggLTk1dDQyLjUgLTgyLjV0MTQgLTU3LjV0LTE0IC01Ny41dC00MyAtODIuNXQtNjguNSAtOTV0LTk0LjUgLTk1dC0xMTYuNSAtODIuNXQtMTQwIC01OXQtMTU5LjUgLTIyLjV0LTE1OS41IDIyLjV0LTE0MCA1OXQtMTE2LjUgODIuNXQtOTQuNSA5NXQtNjguNSA5NXQtNDMgODIuNXQtMTQgNTcuNXQxNCA1Ny41dDQyLjUgODIuNXQ2OCA5NSB0OTQuNSA5NXQxMTYuNSA4Mi41dDE0MCA1OXQxNjAuNSAyMi41ek04ODggODI5cS0xNSAxNSAtMTggMTJ0NSAtMjJxMjUgLTU3IDI1IC0xMTlxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4dC0yMTIgODh0LTg4IDIxMnEwIDU5IDIzIDExNHE4IDE5IDQuNSAyMnQtMTcuNSAtMTJxLTcwIC02OSAtMTYwIC0xODRxLTEzIC0xNiAtMTUgLTQwLjV0OSAtNDIuNXEyMiAtMzYgNDcgLTcxdDcwIC04MnQ5Mi41IC04MXQxMTMgLTU4LjV0MTMzLjUgLTI0LjUgdDEzMy41IDI0dDExMyA1OC41dDkyLjUgODEuNXQ3MCA4MS41dDQ3IDcwLjVxMTEgMTggOSA0Mi41dC0xNCA0MS41cS05MCAxMTcgLTE2MyAxODl6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wzNSAzNHExNCAxNSAxMi41IDMzLjV0LTE2LjUgMzMuNXEtNDQgNDQgLTg5IDExN3EtMTEgMTggLTI4IDIwdC0zMiAtMTJ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNjsiIGQ9Ik01OTIgMGgtMTQ4bDMxIDEyMHEtOTEgMjAgLTE3NS41IDY4LjV0LTE0My41IDEwNi41dC0xMDMuNSAxMTl0LTY2LjUgMTEwdC0yMiA3NnEwIDIxIDE0IDU3LjV0NDIuNSA4Mi41dDY4IDk1dDk0LjUgOTV0MTE2LjUgODIuNXQxNDAgNTl0MTYwLjUgMjIuNXE2MSAwIDEyNiAtMTVsMzIgMTIxaDE0OHpNOTQ0IDc3MGw0NyAxODFxMTA4IC04NSAxNzYuNSAtMTkydDY4LjUgLTE1OXEwIC0yNiAtMTkuNSAtNzF0LTU5LjUgLTEwMnQtOTMgLTExMiB0LTEyOSAtMTA0LjV0LTE1OCAtNzUuNWw0NiAxNzNxNzcgNDkgMTM2IDExN3Q5NyAxMzFxMTEgMTggOSA0Mi41dC0xNCA0MS41cS01NCA3MCAtMTA3IDEzMHpNMzEwIDgyNHEtNzAgLTY5IC0xNjAgLTE4NHEtMTMgLTE2IC0xNSAtNDAuNXQ5IC00Mi41cTE4IC0zMCAzOSAtNjB0NTcgLTcwLjV0NzQgLTczdDkwIC02MXQxMDUgLTQxLjVsNDEgMTU0cS0xMDcgMTggLTE3OC41IDEwMS41dC03MS41IDE5My41cTAgNTkgMjMgMTE0cTggMTkgNC41IDIyIHQtMTcuNSAtMTJ6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wxMiAxMWwyMiA4NmwtMyA0cS00NCA0NCAtODkgMTE3cS0xMSAxOCAtMjggMjB0LTMyIC0xMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTA3OyIgZD0iTS05MCAxMDBsNjQyIDEwNjZxMjAgMzEgNDggMjguNXQ0OCAtMzUuNWw2NDIgLTEwNTZxMjEgLTMyIDcuNSAtNjcuNXQtNTAuNSAtMzUuNWgtMTI5NHEtMzcgMCAtNTAuNSAzNHQ3LjUgNjZ6TTE1NSAyMDBoMzQ1djc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoMzQ1bC00NDUgNzIzek00OTYgNzAwaDIwOHEyMCAwIDMyIC0xNC41dDggLTM0LjVsLTU4IC0yNTIgcS00IC0yMCAtMjEuNSAtMzQuNXQtMzcuNSAtMTQuNWgtNTRxLTIwIDAgLTM3LjUgMTQuNXQtMjEuNSAzNC41bC01OCAyNTJxLTQgMjAgOCAzNC41dDMyIDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwODsiIGQ9Ik02NTAgMTIwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnYtMzM5bDM2MyAtMzI1cTE1IC0xNCAyNiAtMzguNXQxMSAtNDQuNXYtNDFxMCAtMjAgLTEyIC0yNi41dC0yOSA1LjVsLTM1OSAyNDl2LTI2M3ExMDAgLTkzIDEwMCAtMTEzdi02NHEwIC0yMSAtMTMgLTI5dC0zMiAxbC0yMDUgMTI4bC0yMDUgLTEyOHEtMTkgLTkgLTMyIC0xdC0xMyAyOXY2NHEwIDIwIDEwMCAxMTN2MjYzbC0zNTkgLTI0OXEtMTcgLTEyIC0yOSAtNS41dC0xMiAyNi41djQxIHEwIDIwIDExIDQ0LjV0MjYgMzguNWwzNjMgMzI1djMzOXEwIDYyIDQ0IDEwNnQxMDYgNDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwOTsiIGQ9Ik04NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTExMDB2MTUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMTAwIDgwMHYtNzUwcTAgLTIxIC0xNC41IC0zNS41IHQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NzUwaDExMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTcwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTkwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA0MDAgdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek0xMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek0zMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek01MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTA7IiBkPSJNMTEzNSAxMTY1bDI0OSAtMjMwcTE1IC0xNCAxNSAtMzV0LTE1IC0zNWwtMjQ5IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC0xNTlsLTYwMCAtNjAwaC0yOTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjA5bDYwMCA2MDBoMjQxdjE1MHEwIDIxIDEwLjUgMjV0MjQuNSAtMTB6TTUyMiA4MTlsLTE0MSAtMTQxbC0xMjIgMTIyaC0yMDlxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI5MXpNMTEzNSA1NjVsMjQ5IC0yMzBxMTUgLTE0IDE1IC0zNXQtMTUgLTM1bC0yNDkgLTIzMHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYxNTBoLTI0MWwtMTgxIDE4MWwxNDEgMTQxbDEyMiAtMTIyaDE1OXYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTE7IiBkPSJNMTAwIDExMDBoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01OTZsLTMwNCAtMzAwdjMwMGgtMTAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXY2MDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTI7IiBkPSJNMTUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTMwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMzAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTExMDAgODAwdi0zMDBxMCAtNDEgLTMgLTc3LjV0LTE1IC04OS41dC0zMiAtOTZ0LTU4IC04OXQtODkgLTc3dC0xMjkgLTUxdC0xNzQgLTIwdC0xNzQgMjAgdC0xMjkgNTF0LTg5IDc3dC01OCA4OXQtMzIgOTZ0LTE1IDg5LjV0LTMgNzcuNXYzMDBoMzAwdi0yNTB2LTI3di00Mi41dDEuNSAtNDF0NSAtMzh0MTAgLTM1dDE2LjUgLTMwdDI1LjUgLTI0LjV0MzUgLTE5dDQ2LjUgLTEydDYwIC00dDYwIDQuNXQ0Ni41IDEyLjV0MzUgMTkuNXQyNSAyNS41dDE3IDMwLjV0MTAgMzV0NSAzOHQyIDQwLjV0LTAuNSA0MnYyNXYyNTBoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTM7IiBkPSJNMTEwMCA0MTFsLTE5OCAtMTk5bC0zNTMgMzUzbC0zNTMgLTM1M2wtMTk3IDE5OWw1NTEgNTUxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTQ7IiBkPSJNMTEwMSA3ODlsLTU1MCAtNTUxbC01NTEgNTUxbDE5OCAxOTlsMzUzIC0zNTNsMzUzIDM1M3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTE1OyIgZD0iTTQwNCAxMDAwaDc0NnEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUxaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtMjMwIC0yNDlxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI0OXEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNWgxNTB2NDAxaC0zODF6TTEzNSA5ODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi00MDBoMzg1bDIxNSAtMjAwaC03NTBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXY1NTBoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTY7IiBkPSJNNTYgMTIwMGg5NHExNyAwIDMxIC0xMXQxOCAtMjdsMzggLTE2Mmg4OTZxMjQgMCAzOSAtMTguNXQxMCAtNDIuNWwtMTAwIC00NzVxLTUgLTIxIC0yNyAtNDIuNXQtNTUgLTIxLjVoLTYzM2w0OCAtMjAwaDUzNXEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41dC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MGgtMzAwdi01MCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaC0zMXEtMTggMCAtMzIuNSAxMHQtMjAuNSAxOWwtNSAxMGwtMjAxIDk2MWgtNTRxLTIwIDAgLTM1IDE0LjV0LTE1IDM1LjV0MTUgMzUuNXQzNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTc7IiBkPSJNMTIwMCAxMDAwdi0xMDBoLTEyMDB2MTAwaDIwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41aDUwMHpNMCA4MDBoMTIwMHYtODAwaC0xMjAwdjgwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTE4OyIgZD0iTTIwMCA4MDBsLTIwMCAtNDAwdjYwMGgyMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHE0MiAwIDcxIC0yOS41dDI5IC03MC41aDUwMHYtMjAwaC0xMDAwek0xNTAwIDcwMGwtMzAwIC03MDBoLTEyMDBsMzAwIDcwMGgxMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTk7IiBkPSJNNjM1IDExODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi02MDFoMTUwcTIxIDAgMjUgLTEwLjV0LTEwIC0yNC41bC0yMzAgLTI0OXEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjQ5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41aDE1MHY2MDFoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjA7IiBkPSJNOTM2IDg2NGwyNDkgLTIyOXExNCAtMTUgMTQgLTM1LjV0LTE0IC0zNS41bC0yNDkgLTIyOXEtMTUgLTE1IC0yNS41IC0xMC41dC0xMC41IDI0LjV2MTUxaC02MDB2LTE1MXEwIC0yMCAtMTAuNSAtMjQuNXQtMjUuNSAxMC41bC0yNDkgMjI5cS0xNCAxNSAtMTQgMzUuNXQxNCAzNS41bDI0OSAyMjlxMTUgMTUgMjUuNSAxMC41dDEwLjUgLTI1LjV2LTE0OWg2MDB2MTQ5cTAgMjEgMTAuNSAyNS41dDI1LjUgLTEwLjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMTsiIGQ9Ik0xMTY5IDQwMGwtMTcyIDczMnEtNSAyMyAtMjMgNDUuNXQtMzggMjIuNWgtNjcycS0yMCAwIC0zOCAtMjB0LTIzIC00MWwtMTcyIC03MzloMTEzOHpNMTEwMCAzMDBoLTEwMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTEwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMTAwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek04MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwIHpNMTAwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMjsiIGQ9Ik0xMTUwIDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTg1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUuNSAxNC41dC0xNC41IDM1LjV2ODUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTAwMCAyMDBsLTY3NSAyMDBoLTM4bDQ3IC0yNzZxMyAtMTYgLTUuNSAtMjB0LTI5LjUgLTRoLTdoLTg0cS0yMCAwIC0zNC41IDE0dC0xOC41IDM1cS01NSAzMzcgLTU1IDM1MXYyNTB2NnEwIDE2IDEgMjMuNXQ2LjUgMTQgdDE3LjUgNi41aDIwMGw2NzUgMjUwdi04NTB6TTAgNzUwdi0yNTBxLTQgMCAtMTEgMC41dC0yNCA2dC0zMCAxNXQtMjQgMzB0LTExIDQ4LjV2NTBxMCAyNiAxMC41IDQ2dDI1IDMwdDI5IDE2dDI1LjUgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTIzOyIgZD0iTTU1MyAxMjAwaDk0cTIwIDAgMjkgLTEwLjV0MyAtMjkuNWwtMTggLTM3cTgzIC0xOSAxNDQgLTgyLjV0NzYgLTE0MC41bDYzIC0zMjdsMTE4IC0xNzNoMTdxMTkgMCAzMyAtMTQuNXQxNCAtMzV0LTEzIC00MC41dC0zMSAtMjdxLTggLTQgLTIzIC05LjV0LTY1IC0xOS41dC0xMDMgLTI1dC0xMzIuNSAtMjB0LTE1OC41IC05cS01NyAwIC0xMTUgNXQtMTA0IDEydC04OC41IDE1LjV0LTczLjUgMTcuNXQtNTQuNSAxNnQtMzUuNSAxMmwtMTEgNCBxLTE4IDggLTMxIDI4dC0xMyA0MC41dDE0IDM1dDMzIDE0LjVoMTdsMTE4IDE3M2w2MyAzMjdxMTUgNzcgNzYgMTQwdDE0NCA4M2wtMTggMzJxLTYgMTkgMy41IDMydDI4LjUgMTN6TTQ5OCAxMTBxNTAgLTYgMTAyIC02cTUzIDAgMTAyIDZxLTEyIC00OSAtMzkuNSAtNzkuNXQtNjIuNSAtMzAuNXQtNjMgMzAuNXQtMzkgNzkuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTI0OyIgZD0iTTgwMCA5NDZsMjI0IDc4bC03OCAtMjI0bDIzNCAtNDVsLTE4MCAtMTU1bDE4MCAtMTU1bC0yMzQgLTQ1bDc4IC0yMjRsLTIyNCA3OGwtNDUgLTIzNGwtMTU1IDE4MGwtMTU1IC0xODBsLTQ1IDIzNGwtMjI0IC03OGw3OCAyMjRsLTIzNCA0NWwxODAgMTU1bC0xODAgMTU1bDIzNCA0NWwtNzggMjI0bDIyNCAtNzhsNDUgMjM0bDE1NSAtMTgwbDE1NSAxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNTsiIGQ9Ik02NTAgMTIwMGg1MHE0MCAwIDcwIC00MC41dDMwIC04NC41di0xNTBsLTI4IC0xMjVoMzI4cTQwIDAgNzAgLTQwLjV0MzAgLTg0LjV2LTEwMHEwIC00NSAtMjkgLTc0bC0yMzggLTM0NHEtMTYgLTI0IC0zOCAtNDAuNXQtNDUgLTE2LjVoLTI1MHEtNyAwIC00MiAyNXQtNjYgNTBsLTMxIDI1aC02MXEtNDUgMCAtNzIuNSAxOHQtMjcuNSA1N3Y0MDBxMCAzNiAyMCA2M2wxNDUgMTk2bDk2IDE5OHExMyAyOCAzNy41IDQ4dDUxLjUgMjB6IE02NTAgMTEwMGwtMTAwIC0yMTJsLTE1MCAtMjEzdi0zNzVoMTAwbDEzNiAtMTAwaDIxNGwyNTAgMzc1djEyNWgtNDUwbDUwIDIyNXYxNzVoLTUwek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTI2OyIgZD0iTTYwMCAxMTAwaDI1MHEyMyAwIDQ1IC0xNi41dDM4IC00MC41bDIzOCAtMzQ0cTI5IC0yOSAyOSAtNzR2LTEwMHEwIC00NCAtMzAgLTg0LjV0LTcwIC00MC41aC0zMjhxMjggLTExOCAyOCAtMTI1di0xNTBxMCAtNDQgLTMwIC04NC41dC03MCAtNDAuNWgtNTBxLTI3IDAgLTUxLjUgMjB0LTM3LjUgNDhsLTk2IDE5OGwtMTQ1IDE5NnEtMjAgMjcgLTIwIDYzdjQwMHEwIDM5IDI3LjUgNTd0NzIuNSAxOGg2MXExMjQgMTAwIDEzOSAxMDB6IE01MCAxMDAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTYzNiAxMDAwbC0xMzYgLTEwMGgtMTAwdi0zNzVsMTUwIC0yMTNsMTAwIC0yMTJoNTB2MTc1bC01MCAyMjVoNDUwdjEyNWwtMjUwIDM3NWgtMjE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjc7IiBkPSJNMzU2IDg3M2wzNjMgMjMwcTMxIDE2IDUzIC02bDExMCAtMTEycTEzIC0xMyAxMy41IC0zMnQtMTEuNSAtMzRsLTg0IC0xMjFoMzAycTg0IDAgMTM4IC0zOHQ1NCAtMTEwdC01NSAtMTExdC0xMzkgLTM5aC0xMDZsLTEzMSAtMzM5cS02IC0yMSAtMTkuNSAtNDF0LTI4LjUgLTIwaC0zNDJxLTcgMCAtOTAgODF0LTgzIDk0djUyNXEwIDE3IDE0IDM1LjV0MjggMjguNXpNNDAwIDc5MnYtNTAzbDEwMCAtODloMjkzbDEzMSAzMzkgcTYgMjEgMTkuNSA0MXQyOC41IDIwaDIwM3EyMSAwIDMwLjUgMjV0MC41IDUwdC0zMSAyNWgtNDU2aC03aC02aC01LjV0LTYgMC41dC01IDEuNXQtNSAydC00IDIuNXQtNCA0dC0yLjUgNC41cS0xMiAyNSA1IDQ3bDE0NiAxODNsLTg2IDgzek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwIHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyODsiIGQ9Ik00NzUgMTEwM2wzNjYgLTIzMHEyIC0xIDYgLTMuNXQxNCAtMTAuNXQxOCAtMTYuNXQxNC41IC0yMHQ2LjUgLTIyLjV2LTUyNXEwIC0xMyAtODYgLTk0dC05MyAtODFoLTM0MnEtMTUgMCAtMjguNSAyMHQtMTkuNSA0MWwtMTMxIDMzOWgtMTA2cS04NSAwIC0xMzkuNSAzOXQtNTQuNSAxMTF0NTQgMTEwdDEzOCAzOGgzMDJsLTg1IDEyMXEtMTEgMTUgLTEwLjUgMzR0MTMuNSAzMmwxMTAgMTEycTIyIDIyIDUzIDZ6TTM3MCA5NDVsMTQ2IC0xODMgcTE3IC0yMiA1IC00N3EtMiAtMiAtMy41IC00LjV0LTQgLTR0LTQgLTIuNXQtNSAtMnQtNSAtMS41dC02IC0wLjVoLTZoLTYuNWgtNmgtNDc1di0xMDBoMjIxcTE1IDAgMjkgLTIwdDIwIC00MWwxMzAgLTMzOWgyOTRsMTA2IDg5djUwM2wtMzQyIDIzNnpNMTA1MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjUgdjUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyOTsiIGQ9Ik01NTAgMTI5NHE3MiAwIDExMSAtNTV0MzkgLTEzOXYtMTA2bDMzOSAtMTMxcTIxIC02IDQxIC0xOS41dDIwIC0yOC41di0zNDJxMCAtNyAtODEgLTkwdC05NCAtODNoLTUyNXEtMTcgMCAtMzUuNSAxNHQtMjguNSAyOGwtOSAxNGwtMjMwIDM2M3EtMTYgMzEgNiA1M2wxMTIgMTEwcTEzIDEzIDMyIDEzLjV0MzQgLTExLjVsMTIxIC04NHYzMDJxMCA4NCAzOCAxMzh0MTEwIDU0ek02MDAgOTcydjIwM3EwIDIxIC0yNSAzMC41dC01MCAwLjUgdC0yNSAtMzF2LTQ1NnYtN3YtNnYtNS41dC0wLjUgLTZ0LTEuNSAtNXQtMiAtNXQtMi41IC00dC00IC00dC00LjUgLTIuNXEtMjUgLTEyIC00NyA1bC0xODMgMTQ2bC04MyAtODZsMjM2IC0zMzloNTAzbDg5IDEwMHYyOTNsLTMzOSAxMzFxLTIxIDYgLTQxIDE5LjV0LTIwIDI4LjV6TTQ1MCAyMDBoNTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTUwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMDsiIGQ9Ik0zNTAgMTEwMGg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41ek02MDAgMzA2di0xMDZxMCAtODQgLTM5IC0xMzl0LTExMSAtNTV0LTExMCA1NHQtMzggMTM4djMwMmwtMTIxIC04NHEtMTUgLTEyIC0zNCAtMTEuNXQtMzIgMTMuNWwtMTEyIDExMCBxLTIyIDIyIC02IDUzbDIzMCAzNjNxMSAyIDMuNSA2dDEwLjUgMTMuNXQxNi41IDE3dDIwIDEzLjV0MjIuNSA2aDUyNXExMyAwIDk0IC04M3Q4MSAtOTB2LTM0MnEwIC0xNSAtMjAgLTI4LjV0LTQxIC0xOS41ek0zMDggOTAwbC0yMzYgLTMzOWw4MyAtODZsMTgzIDE0NnEyMiAxNyA0NyA1cTIgLTEgNC41IC0yLjV0NCAtNHQyLjUgLTR0MiAtNXQxLjUgLTV0MC41IC02di01LjV2LTZ2LTd2LTQ1NnEwIC0yMiAyNSAtMzF0NTAgMC41dDI1IDMwLjUgdjIwM3EwIDE1IDIwIDI4LjV0NDEgMTkuNWwzMzkgMTMxdjI5M2wtODkgMTAwaC01MDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMTsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNOTE0IDYzMmwtMjc1IDIyM3EtMTYgMTMgLTI3LjUgOHQtMTEuNSAtMjZ2LTEzN2gtMjc1IHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDI3NXYtMTM3cTAgLTIxIDExLjUgLTI2dDI3LjUgOGwyNzUgMjIzcTE2IDEzIDE2IDMydC0xNiAzMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTMyOyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek01NjEgODU1bC0yNzUgLTIyM3EtMTYgLTEzIC0xNiAtMzJ0MTYgLTMybDI3NSAtMjIzcTE2IC0xMyAyNy41IC04IHQxMS41IDI2djEzN2gyNzVxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXYxNTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC0yNzV2MTM3cTAgMjEgLTExLjUgMjZ0LTI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMzsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNODU1IDYzOWwtMjIzIDI3NXEtMTMgMTYgLTMyIDE2dC0zMiAtMTZsLTIyMyAtMjc1cS0xMyAtMTYgLTggLTI3LjUgdDI2IC0xMS41aDEzN3YtMjc1cTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2Mjc1aDEzN3EyMSAwIDI2IDExLjV0LTggMjcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM0OyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek02NzUgOTAwaC0xNTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0yNzVoLTEzN3EtMjEgMCAtMjYgLTExLjUgdDggLTI3LjVsMjIzIC0yNzVxMTMgLTE2IDMyIC0xNnQzMiAxNmwyMjMgMjc1cTEzIDE2IDggMjcuNXQtMjYgMTEuNWgtMTM3djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzNTsiIGQ9Ik02MDAgMTE3NnExMTYgMCAyMjIuNSAtNDZ0MTg0IC0xMjMuNXQxMjMuNSAtMTg0dDQ2IC0yMjIuNXQtNDYgLTIyMi41dC0xMjMuNSAtMTg0dC0xODQgLTEyMy41dC0yMjIuNSAtNDZ0LTIyMi41IDQ2dC0xODQgMTIzLjV0LTEyMy41IDE4NHQtNDYgMjIyLjV0NDYgMjIyLjV0MTIzLjUgMTg0dDE4NCAxMjMuNXQyMjIuNSA0NnpNNjI3IDExMDFxLTE1IC0xMiAtMzYuNSAtMjAuNXQtMzUuNSAtMTJ0LTQzIC04dC0zOSAtNi41IHEtMTUgLTMgLTQ1LjUgMHQtNDUuNSAtMnEtMjAgLTcgLTUxLjUgLTI2LjV0LTM0LjUgLTM0LjVxLTMgLTExIDYuNSAtMjIuNXQ4LjUgLTE4LjVxLTMgLTM0IC0yNy41IC05MXQtMjkuNSAtNzlxLTkgLTM0IDUgLTkzdDggLTg3cTAgLTkgMTcgLTQ0LjV0MTYgLTU5LjVxMTIgMCAyMyAtNXQyMy41IC0xNXQxOS41IC0xNHExNiAtOCAzMyAtMTV0NDAuNSAtMTV0MzQuNSAtMTJxMjEgLTkgNTIuNSAtMzJ0NjAgLTM4dDU3LjUgLTExIHE3IC0xNSAtMyAtMzR0LTIyLjUgLTQwdC05LjUgLTM4cTEzIC0yMSAyMyAtMzQuNXQyNy41IC0yNy41dDM2LjUgLTE4cTAgLTcgLTMuNSAtMTZ0LTMuNSAtMTR0NSAtMTdxMTA0IC0yIDIyMSAxMTJxMzAgMjkgNDYuNSA0N3QzNC41IDQ5dDIxIDYzcS0xMyA4IC0zNyA4LjV0LTM2IDcuNXEtMTUgNyAtNDkuNSAxNXQtNTEuNSAxOXEtMTggMCAtNDEgLTAuNXQtNDMgLTEuNXQtNDIgLTYuNXQtMzggLTE2LjVxLTUxIC0zNSAtNjYgLTEyIHEtNCAxIC0zLjUgMjUuNXQwLjUgMjUuNXEtNiAxMyAtMjYuNSAxNy41dC0yNC41IDYuNXExIDE1IC0wLjUgMzAuNXQtNyAyOHQtMTguNSAxMS41dC0zMSAtMjFxLTIzIC0yNSAtNDIgNHEtMTkgMjggLTggNThxNiAxNiAyMiAyMnE2IC0xIDI2IC0xLjV0MzMuNSAtNHQxOS41IC0xMy41cTcgLTEyIDE4IC0yNHQyMS41IC0yMC41dDIwIC0xNXQxNS41IC0xMC41bDUgLTNxMiAxMiA3LjUgMzAuNXQ4IDM0LjV0LTAuNSAzMnEtMyAxOCAzLjUgMjkgdDE4IDIyLjV0MTUuNSAyNC41cTYgMTQgMTAuNSAzNXQ4IDMxdDE1LjUgMjIuNXQzNCAyMi41cS02IDE4IDEwIDM2cTggMCAyNCAtMS41dDI0LjUgLTEuNXQyMCA0LjV0MjAuNSAxNS41cS0xMCAyMyAtMzEgNDIuNXQtMzcuNSAyOS41dC00OSAyN3QtNDMuNSAyM3EwIDEgMiA4dDMgMTEuNXQxLjUgMTAuNXQtMSA5LjV0LTQuNSA0LjVxMzEgLTEzIDU4LjUgLTE0LjV0MzguNSAyLjVsMTIgNXE1IDI4IC05LjUgNDZ0LTM2LjUgMjR0LTUwIDE1IHQtNDEgMjBxLTE4IC00IC0zNyAwek02MTMgOTk0cTAgLTE3IDggLTQydDE3IC00NXQ5IC0yM3EtOCAxIC0zOS41IDUuNXQtNTIuNSAxMHQtMzcgMTYuNXEzIDExIDE2IDI5LjV0MTYgMjUuNXExMCAtMTAgMTkgLTEwdDE0IDZ0MTMuNSAxNC41dDE2LjUgMTIuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM2OyIgZD0iTTc1NiAxMTU3cTE2NCA5MiAzMDYgLTlsLTI1OSAtMTM4bDE0NSAtMjMybDI1MSAxMjZxNiAtODkgLTM0IC0xNTYuNXQtMTE3IC0xMTAuNXEtNjAgLTM0IC0xMjcgLTM5LjV0LTEyNiAxNi41bC01OTYgLTU5NnEtMTUgLTE2IC0zNi41IC0xNnQtMzYuNSAxNmwtMTExIDExMHEtMTUgMTUgLTE1IDM2LjV0MTUgMzcuNWw2MDAgNTk5cS0zNCAxMDEgNS41IDIwMS41dDEzNS41IDE1NC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzc7IiBob3Jpei1hZHYteD0iMTIyMCIgZD0iTTEwMCAxMTk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAxMDk2aC0yMDB2LTEwMGgyMDB2MTAwek0xMDAgNzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMCBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTExMDAgNjk2aC01MDB2LTEwMGg1MDB2MTAwek0xMDAgMzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAyOTZoLTMwMHYtMTAwaDMwMHYxMDB6ICIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzg7IiBkPSJNMTUwIDEyMDBoOTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41dC0xNC41IC0zNS41dC0zNS41IC0xNC41aC05MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA1MDB2LTMwMGwtMjAwIC0yMDB2NTAwbC0zNTAgNTAwaDkwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM5OyIgZD0iTTUwMCAxMjAwaDIwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNDAwaC01MDB2MTAwaC0yMDB2LTEwMGgtNTAwdjQwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwdjEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTUwMCAxMTAwdi0xMDBoMjAwdjEwMGgtMjAwek0xMjAwIDQwMHYtMjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwIHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MjAwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MDsiIGQ9Ik01MCAxMjAwaDMwMHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtOTQgLTk0bDE5OSAtMTk5cTcgLTggNyAtMTh0LTcgLTE4bC0xMDYgLTEwNnEtOCAtNyAtMTggLTd0LTE4IDdsLTE5OSAxOTlsLTk0IC05NHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMTk5IC0xOTlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwxOTkgMTk5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNMzY0IDQ3MGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMTk5IC0xOTlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMTk5IDE5OSBxOCA3IDE4IDd0MTggLTd6TTEwNzEgMjcxbDk0IDk0cTE0IDE0IDI0LjUgMTB0MTAuNSAtMjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0yNSAxMC41dDEwIDI0LjVsOTQgOTRsLTE5OSAxOTlxLTcgOCAtNyAxOHQ3IDE4bDEwNiAxMDZxOCA3IDE4IDd0MTggLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MTsiIGQ9Ik01OTYgMTE5MnExMjEgMCAyMzEuNSAtNDcuNXQxOTAgLTEyN3QxMjcgLTE5MHQ0Ny41IC0yMzEuNXQtNDcuNSAtMjMxLjV0LTEyNyAtMTkwLjV0LTE5MCAtMTI3dC0yMzEuNSAtNDd0LTIzMS41IDQ3dC0xOTAuNSAxMjd0LTEyNyAxOTAuNXQtNDcgMjMxLjV0NDcgMjMxLjV0MTI3IDE5MHQxOTAuNSAxMjd0MjMxLjUgNDcuNXpNNTk2IDEwMTBxLTExMiAwIC0yMDcuNSAtNTUuNXQtMTUxIC0xNTF0LTU1LjUgLTIwNy41dDU1LjUgLTIwNy41IHQxNTEgLTE1MXQyMDcuNSAtNTUuNXQyMDcuNSA1NS41dDE1MSAxNTF0NTUuNSAyMDcuNXQtNTUuNSAyMDcuNXQtMTUxIDE1MXQtMjA3LjUgNTUuNXpNNDU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOC41IC0xNi41dC0zOC41IDE2LjV0LTE2IDM5dDE2IDM4LjV0MzguNSAxNnpNNzU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOCAtMTYuNXEtMTQgMCAtMjkgMTBsLTU1IC0xNDUgcTE3IC0yMyAxNyAtNTFxMCAtMzYgLTI1LjUgLTYxLjV0LTYxLjUgLTI1LjV0LTYxLjUgMjUuNXQtMjUuNSA2MS41cTAgMzIgMjAuNSA1Ni41dDUxLjUgMjkuNWwxMjIgMTI2bDEgMXEtOSAxNCAtOSAyOHEwIDIzIDE2IDM5dDM4LjUgMTZ6TTM0NS41IDcwOXEyMi41IDAgMzguNSAtMTZ0MTYgLTM4LjV0LTE2IC0zOC41dC0zOC41IC0xNnQtMzguNSAxNnQtMTYgMzguNXQxNiAzOC41dDM4LjUgMTZ6TTg1NC41IDcwOXEyMi41IDAgMzguNSAtMTYgdDE2IC0zOC41dC0xNiAtMzguNXQtMzguNSAtMTZ0LTM4LjUgMTZ0LTE2IDM4LjV0MTYgMzguNXQzOC41IDE2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDI7IiBkPSJNNTQ2IDE3M2w0NjkgNDcwcTkxIDkxIDk5IDE5MnE3IDk4IC01MiAxNzUuNXQtMTU0IDk0LjVxLTIyIDQgLTQ3IDRxLTM0IDAgLTY2LjUgLTEwdC01Ni41IC0yM3QtNTUuNSAtMzh0LTQ4IC00MS41dC00OC41IC00Ny41cS0zNzYgLTM3NSAtMzkxIC0zOTBxLTMwIC0yNyAtNDUgLTQxLjV0LTM3LjUgLTQxdC0zMiAtNDYuNXQtMTYgLTQ3LjV0LTEuNSAtNTYuNXE5IC02MiA1My41IC05NXQ5OS41IC0zM3E3NCAwIDEyNSA1MWw1NDggNTQ4IHEzNiAzNiAyMCA3NXEtNyAxNiAtMjEuNSAyNnQtMzIuNSAxMHEtMjYgMCAtNTAgLTIzcS0xMyAtMTIgLTM5IC0zOGwtMzQxIC0zMzhxLTE1IC0xNSAtMzUuNSAtMTUuNXQtMzQuNSAxMy41dC0xNCAzNC41dDE0IDM0LjVxMzI3IDMzMyAzNjEgMzY3cTM1IDM1IDY3LjUgNTEuNXQ3OC41IDE2LjVxMTQgMCAyOSAtMXE0NCAtOCA3NC41IC0zNS41dDQzLjUgLTY4LjVxMTQgLTQ3IDIgLTk2LjV0LTQ3IC04NC41cS0xMiAtMTEgLTMyIC0zMiB0LTc5LjUgLTgxdC0xMTQuNSAtMTE1dC0xMjQuNSAtMTIzLjV0LTEyMyAtMTE5LjV0LTk2LjUgLTg5dC01NyAtNDVxLTU2IC0yNyAtMTIwIC0yN3EtNzAgMCAtMTI5IDMydC05MyA4OXEtNDggNzggLTM1IDE3M3Q4MSAxNjNsNTExIDUxMXE3MSA3MiAxMTEgOTZxOTEgNTUgMTk4IDU1cTgwIDAgMTUyIC0zM3E3OCAtMzYgMTI5LjUgLTEwM3Q2Ni41IC0xNTRxMTcgLTkzIC0xMSAtMTgzLjV0LTk0IC0xNTYuNWwtNDgyIC00NzYgcS0xNSAtMTUgLTM2IC0xNnQtMzcgMTR0LTE3LjUgMzR0MTQuNSAzNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTQzOyIgZD0iTTY0OSA5NDlxNDggNjggMTA5LjUgMTA0dDEyMS41IDM4LjV0MTE4LjUgLTIwdDEwMi41IC02NHQ3MSAtMTAwLjV0MjcgLTEyM3EwIC01NyAtMzMuNSAtMTE3LjV0LTk0IC0xMjQuNXQtMTI2LjUgLTEyNy41dC0xNTAgLTE1Mi41dC0xNDYgLTE3NHEtNjIgODUgLTE0NS41IDE3NHQtMTUwIDE1Mi41dC0xMjYuNSAxMjcuNXQtOTMuNSAxMjQuNXQtMzMuNSAxMTcuNXEwIDY0IDI4IDEyM3Q3MyAxMDAuNXQxMDQgNjR0MTE5IDIwIHQxMjAuNSAtMzguNXQxMDQuNSAtMTA0ek04OTYgOTcycS0zMyAwIC02NC41IC0xOXQtNTYuNSAtNDZ0LTQ3LjUgLTUzLjV0LTQzLjUgLTQ1LjV0LTM3LjUgLTE5dC0zNiAxOXQtNDAgNDUuNXQtNDMgNTMuNXQtNTQgNDZ0LTY1LjUgMTlxLTY3IDAgLTEyMi41IC01NS41dC01NS41IC0xMzIuNXEwIC0yMyAxMy41IC01MXQ0NiAtNjV0NTcuNSAtNjN0NzYgLTc1bDIyIC0yMnExNSAtMTQgNDQgLTQ0dDUwLjUgLTUxdDQ2IC00NHQ0MSAtMzV0MjMgLTEyIHQyMy41IDEydDQyLjUgMzZ0NDYgNDR0NTIuNSA1MnQ0NCA0M3E0IDQgMTIgMTNxNDMgNDEgNjMuNSA2MnQ1MiA1NXQ0NiA1NXQyNiA0NnQxMS41IDQ0cTAgNzkgLTUzIDEzMy41dC0xMjAgNTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTQ0OyIgZD0iTTc3Ni41IDEyMTRxOTMuNSAwIDE1OS41IC02NmwxNDEgLTE0MXE2NiAtNjYgNjYgLTE2MHEwIC00MiAtMjggLTk1LjV0LTYyIC04Ny41bC0yOSAtMjlxLTMxIDUzIC03NyA5OWwtMTggMThsOTUgOTVsLTI0NyAyNDhsLTM4OSAtMzg5bDIxMiAtMjEybC0xMDUgLTEwNmwtMTkgMThsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTl0NjYgMTU5bDI4MyAyODNxNjUgNjYgMTU4LjUgNjZ6TTYwMCA3MDZsMTA1IDEwNXExMCAtOCAxOSAtMTdsMTQxIC0xNDEgcTY2IC02NiA2NiAtMTU5dC02NiAtMTU5bC0yODMgLTI4M3EtNjYgLTY2IC0xNTkgLTY2dC0xNTkgNjZsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTkuNXQ2NiAxNTkuNWw1NSA1NXEyOSAtNTUgNzUgLTEwMmwxOCAtMTdsLTk1IC05NWwyNDcgLTI0OGwzODkgMzg5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDU7IiBkPSJNNjAzIDEyMDBxODUgMCAxNjIgLTE1dDEyNyAtMzh0NzkgLTQ4dDI5IC00NnYtOTUzcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djk1M3EwIDIxIDMwIDQ2LjV0ODEgNDh0MTI5IDM3LjV0MTYzIDE1ek0zMDAgMTAwMHYtNzAwaDYwMHY3MDBoLTYwMHpNNjAwIDI1NHEtNDMgMCAtNzMuNSAtMzAuNXQtMzAuNSAtNzMuNXQzMC41IC03My41dDczLjUgLTMwLjV0NzMuNSAzMC41IHQzMC41IDczLjV0LTMwLjUgNzMuNXQtNzMuNSAzMC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDY7IiBkPSJNOTAyIDExODVsMjgzIC0yODJxMTUgLTE1IDE1IC0zNnQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUgMTVsLTM2IDM1bC0yNzkgLTI2N3YtMzAwbC0yMTIgMjEwbC0zMDggLTMwN2wtMjgwIC0yMDNsMjAzIDI4MGwzMDcgMzA4bC0yMTAgMjEyaDMwMGwyNjcgMjc5bC0zNSAzNnEtMTUgMTQgLTE1IDM1dDE0LjUgMzUuNXQzNS41IDE0LjV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDg7IiBkPSJNNzAwIDEyNDh2LTc4cTM4IC01IDcyLjUgLTE0LjV0NzUuNSAtMzEuNXQ3MSAtNTMuNXQ1MiAtODR0MjQgLTExOC41aC0xNTlxLTQgMzYgLTEwLjUgNTl0LTIxIDQ1dC00MCAzNS41dC02NC41IDIwLjV2LTMwN2w2NCAtMTNxMzQgLTcgNjQgLTE2LjV0NzAgLTMydDY3LjUgLTUyLjV0NDcuNSAtODB0MjAgLTExMnEwIC0xMzkgLTg5IC0yMjR0LTI0NCAtOTd2LTc3aC0xMDB2NzlxLTE1MCAxNiAtMjM3IDEwM3EtNDAgNDAgLTUyLjUgOTMuNSB0LTE1LjUgMTM5LjVoMTM5cTUgLTc3IDQ4LjUgLTEyNnQxMTcuNSAtNjV2MzM1bC0yNyA4cS00NiAxNCAtNzkgMjYuNXQtNzIgMzZ0LTYzIDUydC00MCA3Mi41dC0xNiA5OHEwIDcwIDI1IDEyNnQ2Ny41IDkydDk0LjUgNTd0MTEwIDI3djc3aDEwMHpNNjAwIDc1NHYyNzRxLTI5IC00IC01MCAtMTF0LTQyIC0yMS41dC0zMS41IC00MS41dC0xMC41IC02NXEwIC0yOSA3IC01MC41dDE2LjUgLTM0dDI4LjUgLTIyLjV0MzEuNSAtMTR0MzcuNSAtMTAgcTkgLTMgMTMgLTR6TTcwMCA1NDd2LTMxMHEyMiAyIDQyLjUgNi41dDQ1IDE1LjV0NDEuNSAyN3QyOSA0MnQxMiA1OS41dC0xMi41IDU5LjV0LTM4IDQ0LjV0LTUzIDMxdC02Ni41IDI0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0OTsiIGQ9Ik01NjEgMTE5N3E4NCAwIDE2MC41IC00MHQxMjMuNSAtMTA5LjV0NDcgLTE0Ny41aC0xNTNxMCA0MCAtMTkuNSA3MS41dC00OS41IDQ4LjV0LTU5LjUgMjZ0LTU1LjUgOXEtMzcgMCAtNzkgLTE0LjV0LTYyIC0zNS41cS00MSAtNDQgLTQxIC0xMDFxMCAtMjYgMTMuNSAtNjN0MjYuNSAtNjF0MzcgLTY2cTYgLTkgOSAtMTRoMjQxdi0xMDBoLTE5N3E4IC01MCAtMi41IC0xMTV0LTMxLjUgLTk1cS00NSAtNjIgLTk5IC0xMTIgcTM0IDEwIDgzIDE3LjV0NzEgNy41cTMyIDEgMTAyIC0xNnQxMDQgLTE3cTgzIDAgMTM2IDMwbDUwIC0xNDdxLTMxIC0xOSAtNTggLTMwLjV0LTU1IC0xNS41dC00MiAtNC41dC00NiAtMC41cS0yMyAwIC03NiAxN3QtMTExIDMyLjV0LTk2IDExLjVxLTM5IC0zIC04MiAtMTZ0LTY3IC0yNWwtMjMgLTExbC01NSAxNDVxNCAzIDE2IDExdDE1LjUgMTAuNXQxMyA5dDE1LjUgMTJ0MTQuNSAxNHQxNy41IDE4LjVxNDggNTUgNTQgMTI2LjUgdC0zMCAxNDIuNWgtMjIxdjEwMGgxNjZxLTIzIDQ3IC00NCAxMDRxLTcgMjAgLTEyIDQxLjV0LTYgNTUuNXQ2IDY2LjV0MjkuNSA3MC41dDU4LjUgNzFxOTcgODggMjYzIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTA7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkzNSAxMTg0bDIzMCAtMjQ5cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTE1MHYtOTAwaC0yMDB2OTAwaC0xNTBxLTIxIDAgLTI1IDEwLjV0MTAgMjQuNWwyMzAgMjQ5cTE0IDE1IDM1IDE1dDM1IC0xNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTUxOyIgZD0iTTEwMDAgNzAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwdjUwMGgzMDB2LTUwMHpNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTgwMSAxMTAwdi0yMDBoMTAwdjIwMGgtMTAwek0xMDAwIDM1MGwtMjAwIC0yNTBoMjAwdi0xMDBoLTMwMHYxNTBsMjAwIDI1MGgtMjAwdjEwMGgzMDB2LTE1MHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MjsiIGQ9Ik00MDAgMzAwaDE1MHEyMSAwIDI1IC0xMXQtMTAgLTI1bC0yMzAgLTI1MHEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjUwcS0xNCAxNCAtMTAgMjV0MjUgMTFoMTUwdjkwMGgyMDB2LTkwMHpNMTAwMCAxMDUwbC0yMDAgLTI1MGgyMDB2LTEwMGgtMzAwdjE1MGwyMDAgMjUwaC0yMDB2MTAwaDMwMHYtMTUwek0xMDAwIDBoLTEwMHYxMDBoLTEwMHYtMTAwaC0xMDB2NTAwaDMwMHYtNTAwek04MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTUzOyIgZD0iTTQwMCAzMDBoMTUwcTIxIDAgMjUgLTExdC0xMCAtMjVsLTIzMCAtMjUwcS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTIzMCAyNTBxLTE0IDE0IC0xMCAyNXQyNSAxMWgxNTB2OTAwaDIwMHYtOTAwek0xMDAwIDcwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMTEwMCAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTQ7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTExMDAgNzAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgMTEwMHYtMjAwaDEwMHYyMDBoLTEwMHpNMTAwMCAwaC0xMDB2NDAwaC0xMDB2MTAwaDIwMHYtNTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTU7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkwMCAxMDAwaC0yMDB2MjAwaDIwMHYtMjAwek0xMDAwIDcwMGgtMzAwdjIwMGgzMDB2LTIwMHpNMTEwMCA0MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEyMDAgMTAwaC01MDB2MjAwaDUwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTY7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTEyMDAgMTAwMGgtNTAwdjIwMGg1MDB2LTIwMHpNMTEwMCA3MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEwMDAgNDAwaC0zMDB2MjAwaDMwMHYtMjAwek05MDAgMTAwaC0yMDB2MjAwaDIwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTc7IiBkPSJNMzUwIDExMDBoNDAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTQwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTg7IiBkPSJNMzUwIDExMDBoNDAwcTE2NSAwIDI1Ny41IC05Mi41dDkyLjUgLTI1Ny41di00MDBxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTYzIDAgLTI1Ni41IDkyLjV0LTkzLjUgMjU3LjV2NDAwcTAgMTYzIDk0IDI1Ni41dDI1NiA5My41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek00NDAgNzcwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1OTsiIGQ9Ik0zNTAgMTEwMGg0MDBxMTYzIDAgMjU2LjUgLTk0dDkzLjUgLTI1NnYtNDAwcTAgLTE2NSAtOTIuNSAtMjU3LjV0LTI1Ny41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2MyA5Mi41IDI1Ni41dDI1Ny41IDkzLjV6TTgwMCA5MDBoLTUwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41IHY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTM1MCA3MDBoNDAwcTIxIDAgMjYuNSAtMTJ0LTYuNSAtMjhsLTE5MCAtMjUzcS0xMiAtMTcgLTMwIC0xN3QtMzAgMTdsLTE5MCAyNTNxLTEyIDE2IC02LjUgMjh0MjYuNSAxMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYwOyIgZD0iTTM1MCAxMTAwaDQwMHExNjUgMCAyNTcuNSAtOTIuNXQ5Mi41IC0yNTcuNXYtNDAwcTAgLTE2MyAtOTIuNSAtMjU2LjV0LTI1Ny41IC05My41aC00MDBxLTE2MyAwIC0yNTYuNSA5NHQtOTMuNSAyNTZ2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXpNODAwIDkwMGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjUgdjUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNNTgwIDY5M2wxOTAgLTI1M3ExMiAtMTYgNi41IC0yOHQtMjYuNSAtMTJoLTQwMHEtMjEgMCAtMjYuNSAxMnQ2LjUgMjhsMTkwIDI1M3ExMiAxNyAzMCAxN3QzMCAtMTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MTsiIGQ9Ik01NTAgMTEwMGg0MDBxMTY1IDAgMjU3LjUgLTkyLjV0OTIuNSAtMjU3LjV2LTQwMHEwIC0xNjUgLTkyLjUgLTI1Ny41dC0yNTcuNSAtOTIuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC00NTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMzggODY3bDMyNCAtMjg0cTE2IC0xNCAxNiAtMzN0LTE2IC0zM2wtMzI0IC0yODRxLTE2IC0xNCAtMjcgLTl0LTExIDI2djE1MGgtMjUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI1MHYxNTBxMCAyMSAxMSAyNnQyNyAtOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYyOyIgZD0iTTc5MyAxMTgybDkgLTlxOCAtMTAgNSAtMjdxLTMgLTExIC03OSAtMjI1LjV0LTc4IC0yMjEuNWwzMDAgMXEyNCAwIDMyLjUgLTE3LjV0LTUuNSAtMzUuNXEtMSAwIC0xMzMuNSAtMTU1dC0yNjcgLTMxMi41dC0xMzguNSAtMTYyLjVxLTEyIC0xNSAtMjYgLTE1aC05bC05IDhxLTkgMTEgLTQgMzJxMiA5IDQyIDEyMy41dDc5IDIyNC41bDM5IDExMGgtMzAycS0yMyAwIC0zMSAxOXEtMTAgMjEgNiA0MXE3NSA4NiAyMDkuNSAyMzcuNSB0MjI4IDI1N3Q5OC41IDExMS41cTkgMTYgMjUgMTZoOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYzOyIgZD0iTTM1MCAxMTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00NTBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwIHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTkzOCA4NjdsMzI0IC0yODRxMTYgLTE0IDE2IC0zM3QtMTYgLTMzbC0zMjQgLTI4NHEtMTYgLTE0IC0yNyAtOXQtMTEgMjZ2MTUwaC0yNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjUwdjE1MHEwIDIxIDExIDI2dDI3IC05eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjQ7IiBkPSJNNzUwIDEyMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTEwLjUgLTI1dC0yNC41IDEwbC0xMDkgMTA5bC0zMTIgLTMxMnEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtMTQxIDE0MXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWwzMTIgMzEybC0xMDkgMTA5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41ek00NTYgOTAwaC0xNTZxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMCBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTQ4bDIwMCAyMDB2LTI5OHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41aDMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTY1OyIgZD0iTTYwMCAxMTg2cTExOSAwIDIyNy41IC00Ni41dDE4NyAtMTI1dDEyNSAtMTg3dDQ2LjUgLTIyNy41dC00Ni41IC0yMjcuNXQtMTI1IC0xODd0LTE4NyAtMTI1dC0yMjcuNSAtNDYuNXQtMjI3LjUgNDYuNXQtMTg3IDEyNXQtMTI1IDE4N3QtNDYuNSAyMjcuNXQ0Ni41IDIyNy41dDEyNSAxODd0MTg3IDEyNXQyMjcuNSA0Ni41ek02MDAgMTAyMnEtMTE1IDAgLTIxMiAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTJ0NTYuNSAtMjEyIHQxNTMuNSAtMTUzLjV0MjEyIC01Ni41dDIxMiA1Ni41dDE1My41IDE1My41dDU2LjUgMjEydC01Ni41IDIxMnQtMTUzLjUgMTUzLjV0LTIxMiA1Ni41ek02MDAgNzk0cTgwIDAgMTM3IC01N3Q1NyAtMTM3dC01NyAtMTM3dC0xMzcgLTU3dC0xMzcgNTd0LTU3IDEzN3Q1NyAxMzd0MTM3IDU3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjY7IiBkPSJNNDUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMjQ1cTIwIDAgMjUgLTExdC05IC0yNmwtMzgzIC00MjZxLTE0IC0xNSAtMzMuNSAtMTV0LTMyLjUgMTVsLTM3OSA0MjZxLTEzIDE1IC04LjUgMjZ0MjUuNSAxMWgyNTB2MzUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMTEwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiBNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2NzsiIGQ9Ik01ODMgMTE4MmwzNzggLTQzNXExNCAtMTUgOSAtMzF0LTI2IC0xNmgtMjQ0di0yNTBxMCAtMjAgLTE3IC0zNXQtMzkgLTE1aC0yMDBxLTIwIDAgLTMyIDE0LjV0LTEyIDM1LjV2MjUwaC0yNTBxLTIwIDAgLTI1LjUgMTYuNXQ4LjUgMzEuNWwzODMgNDMxcTE0IDE2IDMzLjUgMTd0MzMuNSAtMTR6TTUwIDMwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXogTTkwMCAyMDB2LTUwaDEwMHY1MGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjg7IiBkPSJNMzk2IDcyM2wzNjkgMzY5cTcgNyAxNy41IDd0MTcuNSAtN2wxMzkgLTEzOXE3IC04IDcgLTE4LjV0LTcgLTE3LjVsLTUyNSAtNTI1cS03IC04IC0xNy41IC04dC0xNy41IDhsLTI5MiAyOTFxLTcgOCAtNyAxOHQ3IDE4bDEzOSAxMzlxOCA3IDE4LjUgN3QxNy41IC03ek01MCAzMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaC0xMTAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAyMDB2LTUwaDEwMHY1MCBoLTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTY5OyIgZD0iTTEzNSAxMDIzbDE0MiAxNDJxMTQgMTQgMzUgMTR0MzUgLTE0bDc3IC03N2wtMjEyIC0yMTJsLTc3IDc2cS0xNCAxNSAtMTQgMzZ0MTQgMzV6TTY1NSA4NTVsMjEwIDIxMHExNCAxNCAyNC41IDEwdDEwLjUgLTI1bC0yIC01OTlxLTEgLTIwIC0xNS41IC0zNXQtMzUuNSAtMTVsLTU5NyAtMXEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIwOCAyMDhsLTE1NCAxNTVsMjEyIDIxMnpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MDsiIGQ9Ik0zNTAgMTIwMGw1OTkgLTJxMjAgLTEgMzUgLTE1LjV0MTUgLTM1LjVsMSAtNTk3cTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtMjA4IDIwOGwtMTU1IC0xNTRsLTIxMiAyMTJsMTU1IDE1NGwtMjEwIDIxMHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNNTI0IDUxMmwtNzYgLTc3cS0xNSAtMTQgLTM2IC0xNHQtMzUgMTRsLTE0MiAxNDJxLTE0IDE0IC0xNCAzNXQxNCAzNWw3NyA3N3pNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41IHQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MTsiIGQ9Ik0xMjAwIDEwM2wtNDgzIDI3NmwtMzE0IC0zOTl2NDIzaC0zOTlsMTE5NiA3OTZ2LTEwOTZ6TTQ4MyA0MjR2LTIzMGw2ODMgOTUzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzI7IiBkPSJNMTEwMCAxMDAwdi04NTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTE1MHY0MDBoLTcwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzM7IiBkPSJNMTEwMCAxMDAwbC0yIC0xNDlsLTI5OSAtMjk5bC05NSA5NXEtOSA5IC0yMS41IDl0LTIxLjUgLTlsLTE0OSAtMTQ3aC0zMTJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTEzMiA2MzhsMTA2IC0xMDZxNyAtNyA3IC0xNy41dC03IC0xNy41bC00MjAgLTQyMXEtOCAtNyAtMTggLTcgdC0xOCA3bC0yMDIgMjAzcS04IDcgLTggMTcuNXQ4IDE3LjVsMTA2IDEwNnE3IDggMTcuNSA4dDE3LjUgLThsNzkgLTc5bDI5NyAyOTdxNyA3IDE3LjUgN3QxNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzQ7IiBkPSJNMTEwMCAxMDAwdi0yNjlsLTEwMyAtMTAzbC0xMzQgMTM0cS0xNSAxNSAtMzMuNSAxNi41dC0zNC41IC0xMi41bC0yNjYgLTI2NmgtMzI5di00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMHpNNzAwIDEwMDBoLTEwMHYyMDBoMTAwdi0yMDB6TTEyMDIgNTcybDcwIC03MHExNSAtMTUgMTUgLTM1LjV0LTE1IC0zNS41bC0xMzEgLTEzMSBsMTMxIC0xMzFxMTUgLTE1IDE1IC0zNS41dC0xNSAtMzUuNWwtNzAgLTcwcS0xNSAtMTUgLTM1LjUgLTE1dC0zNS41IDE1bC0xMzEgMTMxbC0xMzEgLTEzMXEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtNzAgNzBxLTE1IDE1IC0xNSAzNS41dDE1IDM1LjVsMTMxIDEzMWwtMTMxIDEzMXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWw3MCA3MHExNSAxNSAzNS41IDE1dDM1LjUgLTE1bDEzMSAtMTMxbDEzMSAxMzFxMTUgMTUgMzUuNSAxNSB0MzUuNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NTsiIGQ9Ik0xMTAwIDEwMDB2LTMwMGgtMzUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xNTBoLTUwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAwek04NTAgNjAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNSBsLTIzMCAtMjMwcS0xNCAtMTQgLTM1IC0xNHQtMzUgMTRsLTIzMCAyMzBxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjVoMTUwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NjsiIGQ9Ik0xMTAwIDEwMDB2LTQwMGwtMTY1IDE2NXEtMTQgMTUgLTM1IDE1dC0zNSAtMTVsLTI2MyAtMjY1aC00MDJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNOTM1IDU2NWwyMzAgLTIyOXExNCAtMTUgMTAgLTI1LjV0LTI1IC0xMC41aC0xNTB2LTI1MHEwIC0yMCAtMTQuNSAtMzUgdC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1djI1MGgtMTUwcS0yMSAwIC0yNSAxMC41dDEwIDI1LjVsMjMwIDIyOXExNCAxNSAzNSAxNXQzNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NzsiIGQ9Ik01MCAxMTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtMTIwMHYxNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjAwIDgwMHYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1NTBoMTIwMHpNMTAwIDUwMHYtMjAwaDQwMHYyMDBoLTQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTc4OyIgZD0iTTkzNSAxMTY1bDI0OCAtMjMwcTE0IC0xNCAxNCAtMzV0LTE0IC0zNWwtMjQ4IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC00MDB2MjAwaDQwMHYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEwek0yMDAgODAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHYtMjAwek00MDAgODAwaC0xMDB2MjAwaDEwMHYtMjAwek0xOCA0MzVsMjQ3IDIzMCBxMTQgMTQgMjQuNSAxMHQxMC41IC0yNXYtMTUwaDQwMHYtMjAwaC00MDB2LTE1MHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTI0NyAyMzBxLTE1IDE0IC0xNSAzNXQxNSAzNXpNOTAwIDMwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTAwMCA1MDBoNTFxMjAgMCAzNC41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzQuNSAtMTQuNWgtNTF2MjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzk7IiBkPSJNODYyIDEwNzNsMjc2IDExNnEyNSAxOCA0My41IDh0MTguNSAtNDF2LTExMDZxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2Mzk3cS00IDEgLTExIDV0LTI0IDE3LjV0LTMwIDI5dC0yNCA0MnQtMTEgNTYuNXYzNTlxMCAzMSAxOC41IDY1dDQzLjUgNTJ6TTU1MCAxMjAwcTIyIDAgMzQuNSAtMTIuNXQxNC41IC0yNC41bDEgLTEzdi00NTBxMCAtMjggLTEwLjUgLTU5LjUgdC0yNSAtNTZ0LTI5IC00NXQtMjUuNSAtMzEuNWwtMTAgLTExdi00NDdxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDQ3cS00IDQgLTExIDExLjV0LTI0IDMwLjV0LTMwIDQ2dC0yNCA1NXQtMTEgNjB2NDUwcTAgMiAwLjUgNS41dDQgMTJ0OC41IDE1dDE0LjUgMTJ0MjIuNSA1LjVxMjAgMCAzMi41IC0xMi41dDE0LjUgLTI0LjVsMyAtMTN2LTM1MGgxMDB2MzUwdjUuNXQyLjUgMTIgdDcgMTV0MTUgMTJ0MjUuNSA1LjVxMjMgMCAzNS41IC0xMi41dDEzLjUgLTI0LjVsMSAtMTN2LTM1MGgxMDB2MzUwcTAgMiAwLjUgNS41dDMgMTJ0NyAxNXQxNSAxMnQyNC41IDUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTgwOyIgZD0iTTEyMDAgMTEwMHYtNTZxLTQgMCAtMTEgLTAuNXQtMjQgLTN0LTMwIC03LjV0LTI0IC0xNXQtMTEgLTI0di04ODhxMCAtMjIgMjUgLTM0LjV0NTAgLTEzLjVsMjUgLTJ2LTU2aC00MDB2NTZxNzUgMCA4Ny41IDYuNXQxMi41IDQzLjV2Mzk0aC01MDB2LTM5NHEwIC0zNyAxMi41IC00My41dDg3LjUgLTYuNXYtNTZoLTQwMHY1NnE0IDAgMTEgMC41dDI0IDN0MzAgNy41dDI0IDE1dDExIDI0djg4OHEwIDIyIC0yNSAzNC41dC01MCAxMy41IGwtMjUgMnY1Nmg0MDB2LTU2cS03NSAwIC04Ny41IC02LjV0LTEyLjUgLTQzLjV2LTM5NGg1MDB2Mzk0cTAgMzcgLTEyLjUgNDMuNXQtODcuNSA2LjV2NTZoNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODE7IiBkPSJNNjc1IDEwMDBoMzc1cTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTEwNWwtMjk1IC05OHY5OGwtMjAwIDIwMGgtNDAwbDEwMCAxMDBoMzc1ek0xMDAgOTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0zMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTEwMCA4MDB2LTIwMGgzMDB2MjAwIGgtMzAwek0xMTAwIDUzNWwtNDAwIC0xMzN2MTYzbDQwMCAxMzN2LTE2M3pNMTAwIDUwMHYtMjAwaDMwMHYyMDBoLTMwMHpNMTEwMCAzOTh2LTI0OHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzc1bC0xMDAgLTEwMGgtMzc1bC0xMDAgMTAwaDQwMGwyMDAgMjAwaDEwNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTgyOyIgZD0iTTE3IDEwMDdsMTYyIDE2MnExNyAxNyA0MCAxNHQzNyAtMjJsMTM5IC0xOTRxMTQgLTIwIDExIC00NC41dC0yMCAtNDEuNWwtMTE5IC0xMThxMTAyIC0xNDIgMjI4IC0yNjh0MjY3IC0yMjdsMTE5IDExOHExNyAxNyA0Mi41IDE5dDQ0LjUgLTEybDE5MiAtMTM2cTE5IC0xNCAyMi41IC0zNy41dC0xMy41IC00MC41bC0xNjMgLTE2MnEtMyAtMSAtOS41IC0xdC0yOS41IDJ0LTQ3LjUgNnQtNjIuNSAxNC41dC03Ny41IDI2LjV0LTkwIDQyLjUgdC0xMDEuNSA2MHQtMTExIDgzdC0xMTkgMTA4LjVxLTc0IDc0IC0xMzMuNSAxNTAuNXQtOTQuNSAxMzguNXQtNjAgMTE5LjV0LTM0LjUgMTAwdC0xNSA3NC41dC00LjUgNDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MzsiIGQ9Ik02MDAgMTEwMHE5MiAwIDE3NSAtMTAuNXQxNDEuNSAtMjd0MTA4LjUgLTM2LjV0ODEuNSAtNDB0NTMuNSAtMzd0MzEgLTI3bDkgLTEwdi0yMDBxMCAtMjEgLTE0LjUgLTMzdC0zNC41IC05bC0yMDIgMzRxLTIwIDMgLTM0LjUgMjB0LTE0LjUgMzh2MTQ2cS0xNDEgMjQgLTMwMCAyNHQtMzAwIC0yNHYtMTQ2cTAgLTIxIC0xNC41IC0zOHQtMzQuNSAtMjBsLTIwMiAtMzRxLTIwIC0zIC0zNC41IDl0LTE0LjUgMzN2MjAwcTMgNCA5LjUgMTAuNSB0MzEgMjZ0NTQgMzcuNXQ4MC41IDM5LjV0MTA5IDM3LjV0MTQxIDI2LjV0MTc1IDEwLjV6TTYwMCA3OTVxNTYgMCA5NyAtOS41dDYwIC0yMy41dDMwIC0yOHQxMiAtMjRsMSAtMTB2LTUwbDM2NSAtMzAzcTE0IC0xNSAyNC41IC00MHQxMC41IC00NXYtMjEycTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMTJxMCAyMCAxMC41IDQ1dDI0LjUgNDBsMzY1IDMwM3Y1MCBxMCA0IDEgMTAuNXQxMiAyM3QzMCAyOXQ2MCAyMi41dDk3IDEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODQ7IiBkPSJNMTEwMCA3MDBsLTIwMCAtMjAwaC02MDBsLTIwMCAyMDB2NTAwaDIwMHYtMjAwaDIwMHYyMDBoMjAwdi0yMDBoMjAwdjIwMGgyMDB2LTUwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODU7IiBkPSJNNzAwIDExMDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtMTAwMGgzMDB2MTAwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMTEwMCA4MDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNzAwaDMwMHY3MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTQwMCAwaC0zMDB2NDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTQwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4NjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDcwMHYtMzAwbC0xMDAgLTEwMGgtMjAwdjUwMGgyMDB6IE03MDAgNzAwdi0zMDBoMTAwdjMwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODc7IiBkPSJNMjAwIDExMDBoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODh6TTEwMCA5MDB2LTcwMGg5MDB2NzAwaC05MDB6TTUwMCAzMDBoLTEwMHYyMDBoLTEwMHYtMjAwaC0xMDB2NTAwaDEwMHYtMjAwaDEwMHYyMDBoMTAwdi01MDB6TTkwMCA3MDB2LTMwMGwtMTAwIC0xMDBoLTIwMHY1MDBoMjAweiBNNzAwIDcwMHYtMzAwaDEwMHYzMDBoLTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTg4OyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek01MDAgNzAwaC0yMDB2LTMwMGgyMDB2LTEwMGgtMzAwdjUwMGgzMDB2LTEwMHpNOTAwIDcwMGgtMjAwdi0zMDBoMjAwdi0xMDBoLTMwMHY1MDBoMzAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4OTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDQwMGwtMzAwIDE1MGwzMDAgMTUwdi0zMDB6TTkwMCA1NTBsLTMwMCAtMTUwdjMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTkwOyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek05MDAgMzAwaC03MDB2NTAwaDcwMHYtNTAwek04MDAgNzAwaC0xMzBxLTM4IDAgLTY2LjUgLTQzdC0yOC41IC0xMDh0MjcgLTEwN3Q2OCAtNDJoMTMwdjMwMHpNMzAwIDcwMHYtMzAwIGgxMzBxNDEgMCA2OCA0MnQyNyAxMDd0LTI4LjUgMTA4dC02Ni41IDQzaC0xMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNMzAwIDcwMGgyMDB2LTQwMGgtMzAwdjUwMGgxMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMzAwIDYwMHYtMjAwaDEwMHYyMDBoLTEwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MzsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDUwMGwtMTk5IC0yMDBoLTEwMHY1MGwxOTkgMjAwdjE1MGgtMjAwdjEwMGgzMDB2LTMwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNNzAxIDMwMGgtMTAwIHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5NDsiIGQ9Ik02MDAgMTE5MXExMjAgMCAyMjkuNSAtNDd0MTg4LjUgLTEyNnQxMjYgLTE4OC41dDQ3IC0yMjkuNXQtNDcgLTIyOS41dC0xMjYgLTE4OC41dC0xODguNSAtMTI2dC0yMjkuNSAtNDd0LTIyOS41IDQ3dC0xODguNSAxMjZ0LTEyNiAxODguNXQtNDcgMjI5LjV0NDcgMjI5LjV0MTI2IDE4OC41dDE4OC41IDEyNnQyMjkuNSA0N3pNNjAwIDEwMjFxLTExNCAwIC0yMTEgLTU2LjV0LTE1My41IC0xNTMuNXQtNTYuNSAtMjExdDU2LjUgLTIxMSB0MTUzLjUgLTE1My41dDIxMSAtNTYuNXQyMTEgNTYuNXQxNTMuNSAxNTMuNXQ1Ni41IDIxMXQtNTYuNSAyMTF0LTE1My41IDE1My41dC0yMTEgNTYuNXpNODAwIDcwMGgtMzAwdi0yMDBoMzAwdi0xMDBoLTMwMGwtMTAwIDEwMHYyMDBsMTAwIDEwMGgzMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTk1OyIgZD0iTTYwMCAxMTkxcTEyMCAwIDIyOS41IC00N3QxODguNSAtMTI2dDEyNiAtMTg4LjV0NDcgLTIyOS41dC00NyAtMjI5LjV0LTEyNiAtMTg4LjV0LTE4OC41IC0xMjZ0LTIyOS41IC00N3QtMjI5LjUgNDd0LTE4OC41IDEyNnQtMTI2IDE4OC41dC00NyAyMjkuNXQ0NyAyMjkuNXQxMjYgMTg4LjV0MTg4LjUgMTI2dDIyOS41IDQ3ek02MDAgMTAyMXEtMTE0IDAgLTIxMSAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTF0NTYuNSAtMjExIHQxNTMuNSAtMTUzLjV0MjExIC01Ni41dDIxMSA1Ni41dDE1My41IDE1My41dDU2LjUgMjExdC01Ni41IDIxMXQtMTUzLjUgMTUzLjV0LTIxMSA1Ni41ek04MDAgNzAwdi0xMDBsLTUwIC01MGwxMDAgLTEwMHYtNTBoLTEwMGwtMTAwIDEwMGgtMTUwdi0xMDBoLTEwMHY0MDBoMzAwek01MDAgNzAwdi0xMDBoMjAwdjEwMGgtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTc7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA3dC04NSAtMjA3dC0yMDUgLTg2LjVoLTEyOHYyNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMjUwaC0yMjJxLTgwIDAgLTEzNiA1Ny41dC01NiAxMzYuNXEwIDY5IDQzIDEyMi41dDEwOCA2Ny41cS0yIDE5IC0yIDM3cTAgMTAwIDQ5IDE4NSB0MTM0IDEzNHQxODUgNDl6TTUyNSA1MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMjc1aDEzN3EyMSAwIDI2IC0xMS41dC04IC0yNy41bC0yMjMgLTI0NHEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC0yMjMgMjQ0cS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMTM3djI3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTg7IiBkPSJNNTAyIDEwODlxMTEwIDAgMjAxIC01OS41dDEzNSAtMTU2LjVxNDMgMTUgODkgMTVxMTIxIDAgMjA2IC04Ni41dDg2IC0yMDYuNXEwIC05OSAtNjAgLTE4MXQtMTUwIC0xMTBsLTM3OCAzNjBxLTEzIDE2IC0zMS41IDE2dC0zMS41IC0xNmwtMzgxIC0zNjVoLTlxLTc5IDAgLTEzNS41IDU3LjV0LTU2LjUgMTM2LjVxMCA2OSA0MyAxMjIuNXQxMDggNjcuNXEtMiAxOSAtMiAzOHEwIDEwMCA0OSAxODQuNXQxMzMuNSAxMzR0MTg0LjUgNDkuNXogTTYzMiA0NjdsMjIzIC0yMjhxMTMgLTE2IDggLTI3LjV0LTI2IC0xMS41aC0xMzd2LTI3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djI3NWgtMTM3cS0yMSAwIC0yNiAxMS41dDggMjcuNXExOTkgMjA0IDIyMyAyMjhxMTkgMTkgMzEuNSAxOXQzMi41IC0xOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTk5OyIgZD0iTTcwMCAxMDB2MTAwaDQwMGwtMjcwIDMwMGgxNzBsLTI3MCAzMDBoMTcwbC0zMDAgMzMzbC0zMDAgLTMzM2gxNzBsLTI3MCAtMzAwaDE3MGwtMjcwIC0zMDBoNDAwdi0xMDBoLTUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di01MGg0MDB2NTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDA7IiBkPSJNNjAwIDExNzlxOTQgMCAxNjcuNSAtNTYuNXQ5OS41IC0xNDUuNXE4OSAtNiAxNTAuNSAtNzEuNXQ2MS41IC0xNTUuNXEwIC02MSAtMjkuNSAtMTEyLjV0LTc5LjUgLTgyLjVxOSAtMjkgOSAtNTVxMCAtNzQgLTUyLjUgLTEyNi41dC0xMjYuNSAtNTIuNXEtNTUgMCAtMTAwIDMwdi0yNTFxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaC0zMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41djI1MXEtNDUgLTMwIC0xMDAgLTMwIHEtNzQgMCAtMTI2LjUgNTIuNXQtNTIuNSAxMjYuNXEwIDE4IDQgMzhxLTQ3IDIxIC03NS41IDY1dC0yOC41IDk3cTAgNzQgNTIuNSAxMjYuNXQxMjYuNSA1Mi41cTUgMCAyMyAtMnEwIDIgLTEgMTB0LTEgMTNxMCAxMTYgODEuNSAxOTcuNXQxOTcuNSA4MS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDE7IiBkPSJNMTAxMCAxMDEwcTExMSAtMTExIDE1MC41IC0yNjAuNXQwIC0yOTl0LTE1MC41IC0yNjAuNXEtODMgLTgzIC0xOTEuNSAtMTI2LjV0LTIxOC41IC00My41dC0yMTguNSA0My41dC0xOTEuNSAxMjYuNXEtMTExIDExMSAtMTUwLjUgMjYwLjV0MCAyOTl0MTUwLjUgMjYwLjVxODMgODMgMTkxLjUgMTI2LjV0MjE4LjUgNDMuNXQyMTguNSAtNDMuNXQxOTEuNSAtMTI2LjV6TTQ3NiAxMDY1cS00IDAgLTggLTFxLTEyMSAtMzQgLTIwOS41IC0xMjIuNSB0LTEyMi41IC0yMDkuNXEtNCAtMTIgMi41IC0yM3QxOC41IC0xNGwzNiAtOXEzIC0xIDcgLTFxMjMgMCAyOSAyMnEyNyA5NiA5OCAxNjZxNzAgNzEgMTY2IDk4cTExIDMgMTcuNSAxMy41dDMuNSAyMi41bC05IDM1cS0zIDEzIC0xNCAxOXEtNyA0IC0xNSA0ek01MTIgOTIwcS00IDAgLTkgLTJxLTgwIC0yNCAtMTM4LjUgLTgyLjV0LTgyLjUgLTEzOC41cS00IC0xMyAyIC0yNHQxOSAtMTRsMzQgLTlxNCAtMSA4IC0xcTIyIDAgMjggMjEgcTE4IDU4IDU4LjUgOTguNXQ5Ny41IDU4LjVxMTIgMyAxOCAxMy41dDMgMjEuNWwtOSAzNXEtMyAxMiAtMTQgMTlxLTcgNCAtMTUgNHpNNzE5LjUgNzE5LjVxLTQ5LjUgNDkuNSAtMTE5LjUgNDkuNXQtMTE5LjUgLTQ5LjV0LTQ5LjUgLTExOS41dDQ5LjUgLTExOS41dDExOS41IC00OS41dDExOS41IDQ5LjV0NDkuNSAxMTkuNXQtNDkuNSAxMTkuNXpNODU1IDU1MXEtMjIgMCAtMjggLTIxcS0xOCAtNTggLTU4LjUgLTk4LjV0LTk4LjUgLTU3LjUgcS0xMSAtNCAtMTcgLTE0LjV0LTMgLTIxLjVsOSAtMzVxMyAtMTIgMTQgLTE5cTcgLTQgMTUgLTRxNCAwIDkgMnE4MCAyNCAxMzguNSA4Mi41dDgyLjUgMTM4LjVxNCAxMyAtMi41IDI0dC0xOC41IDE0bC0zNCA5cS00IDEgLTggMXpNMTAwMCA1MTVxLTIzIDAgLTI5IC0yMnEtMjcgLTk2IC05OCAtMTY2cS03MCAtNzEgLTE2NiAtOThxLTExIC0zIC0xNy41IC0xMy41dC0zLjUgLTIyLjVsOSAtMzVxMyAtMTMgMTQgLTE5cTcgLTQgMTUgLTQgcTQgMCA4IDFxMTIxIDM0IDIwOS41IDEyMi41dDEyMi41IDIwOS41cTQgMTIgLTIuNSAyM3QtMTguNSAxNGwtMzYgOXEtMyAxIC03IDF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMjsiIGQ9Ik03MDAgODAwaDMwMHYtMzgwaC0xODB2MjAwaC0zNDB2LTIwMGgtMzgwdjc1NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDU3NXYtNDAwek0xMDAwIDkwMGgtMjAwdjIwMHpNNzAwIDMwMGgxNjJsLTIxMiAtMjEybC0yMTIgMjEyaDE2MnYyMDBoMTAwdi0yMDB6TTUyMCAwaC0zOTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzOTV6TTEwMDAgMjIwdi0xOTVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xOTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMzsiIGQ9Ik03MDAgODAwaDMwMHYtNTIwbC0zNTAgMzUwbC01NTAgLTU1MHYxMDk1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNTc1di00MDB6TTEwMDAgOTAwaC0yMDB2MjAwek04NjIgMjAwaC0xNjJ2LTIwMGgtMTAwdjIwMGgtMTYybDIxMiAyMTJ6TTQ4MCAwaC0zNTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NWgzODB2LTgwek0xMDAwIDgwdi01NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1NXY4MGgxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwNDsiIGQ9Ik0xMTYyIDgwMGgtMTYydi0yMDBoMTAwbDEwMCAtMTAwaC0zMDB2MzAwaC0xNjJsMjEyIDIxMnpNMjAwIDgwMGgyMDBxMjcgMCA0MCAtMnQyOS41IC0xMC41dDIzLjUgLTMwdDcgLTU3LjVoMzAwdi0xMDBoLTYwMGwtMjAwIC0zNTB2NDUwaDEwMHEwIDM2IDcgNTcuNXQyMy41IDMwdDI5LjUgMTAuNXQ0MCAyek04MDAgNDAwaDI0MGwtMjQwIC00MDBoLTgwMGwzMDAgNTAwaDUwMHYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDU7IiBkPSJNNjUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMDAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTgwMCBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTYwMHEtMSAwIC0yMCA0bDI0NiAyNDZsLTMyNiAzMjZ2MzI0cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXYtMTUwcTAgLTYyIDQ0IC0xMDZ0MTA2IC00NGgzMDBxNjIgMCAxMDYgNDR0NDQgMTA2ek00MTIgMjUwbC0yMTIgLTIxMnYxNjJoLTIwMHYxMDBoMjAwdjE2MnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjA2OyIgZD0iTTQ1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDUwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTUwMCBoLTIwMHYtMzAwaDIwMHEwIC0zNiAtNyAtNTcuNXQtMjMuNSAtMzB0LTI5LjUgLTEwLjV0LTQwIC0yaC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djgwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV2LTE1MHEwIC02MiA0NCAtMTA2dDEwNiAtNDRoMzAwcTYyIDAgMTA2IDQ0dDQ0IDEwNnpNMTIxMiAyNTBsLTIxMiAtMjEydjE2MmgtMjAwdjEwMGgyMDB2MTYyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDk7IiBkPSJNNjU4IDExOTdsNjM3IC0xMTA0cTIzIC0zOCA3IC02NS41dC02MCAtMjcuNWgtMTI3NnEtNDQgMCAtNjAgMjcuNXQ3IDY1LjVsNjM3IDExMDRxMjIgMzkgNTQgMzl0NTQgLTM5ek03MDQgODAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNXQzNy41IC0xNC41aDU0cTIwIDAgMzcuNSAxNC41dDIxLjUgMzQuNWw1OCAzMDJxNCAyMCAtOCAzNC41dC0zMiAxNC41ek01MDAgMzAwdi0xMDBoMjAwIHYxMDBoLTIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjEwOyIgZD0iTTQyNSAxMTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgODAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41IHQxNy41IDcuNXpNODI1IDgwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMjUgNTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNODI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNSB2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTgyNSAyMDBoMjUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxMTsiIGQ9Ik03MDAgMTIwMGgxMDB2LTIwMGgtMTAwdi0xMDBoMzUwcTYyIDAgODYuNSAtMzkuNXQtMy41IC05NC41bC02NiAtMTMycS00MSAtODMgLTgxIC0xMzRoLTc3MnEtNDAgNTEgLTgxIDEzNGwtNjYgMTMycS0yOCA1NSAtMy41IDk0LjV0ODYuNSAzOS41aDM1MHYxMDBoLTEwMHYyMDBoMTAwdjEwMGgyMDB2LTEwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwIGgtOTUwbDEzOCAxMDBoLTEzcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTI7IiBkPSJNNjAwIDEzMDBxNDAgMCA2OC41IC0yOS41dDI4LjUgLTcwLjVoLTE5NHEwIDQxIDI4LjUgNzAuNXQ2OC41IDI5LjV6TTQ0MyAxMTAwaDMxNHExOCAtMzcgMTggLTc1cTAgLTggLTMgLTI1aDMyOHE0MSAwIDQ0LjUgLTE2LjV0LTMwLjUgLTM4LjVsLTE3NSAtMTQ1aC02NzhsLTE3OCAxNDVxLTM0IDIyIC0yOSAzOC41dDQ2IDE2LjVoMzI4cS0zIDE3IC0zIDI1cTAgMzggMTggNzV6TTI1MCA3MDBoNzAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTUwdi0yMDBsMjc1IC0yMDBoLTk1MGwyNzUgMjAwdjIwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTM7IiBkPSJNNjAwIDExODFxNzUgMCAxMjggLTUzdDUzIC0xMjh0LTUzIC0xMjh0LTEyOCAtNTN0LTEyOCA1M3QtNTMgMTI4dDUzIDEyOHQxMjggNTN6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTMgbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNDsiIGQ9Ik02MDAgMTMwMHE0NyAwIDkyLjUgLTUzLjV0NzEgLTEyM3QyNS41IC0xMjMuNXEwIC03OCAtNTUuNSAtMTMzLjV0LTEzMy41IC01NS41dC0xMzMuNSA1NS41dC01NS41IDEzMy41cTAgNjIgMzQgMTQzbDE0NCAtMTQzbDExMSAxMTFsLTE2MyAxNjNxMzQgMjYgNjMgMjZ6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1IHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEzbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNTsiIGQ9Ik02MDAgMTIwMGwzMDAgLTE2MXYtMTM5aC0zMDBxMCAtNTcgMTguNSAtMTA4dDUwIC05MS41dDYzIC03MnQ3MCAtNjcuNXQ1Ny41IC02MWgtNTMwcS02MCA4MyAtOTAuNSAxNzcuNXQtMzAuNSAxNzguNXQzMyAxNjQuNXQ4Ny41IDEzOS41dDEyNiA5Ni41dDE0NS41IDQxLjV2LTk4ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTNsMTM4IC0xMDBoLTk1MGwxMzcgMTAwIGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNjsiIGQ9Ik02MDAgMTMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNzhxNDYgLTI2IDczIC03MnQyNyAtMTAwdi01MGgtNDAwdjUwcTAgNTQgMjcgMTAwdDczIDcydjc4cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNDAwIDgwMGg0MDBxNTQgMCAxMDAgLTI3dDcyIC03M2gtMTcydi0xMDBoMjAwdi0xMDBoLTIwMHYtMTAwaDIwMHYtMTAwaC0yMDB2LTEwMGgyMDBxMCAtODMgLTU4LjUgLTE0MS41dC0xNDEuNSAtNTguNWgtNDAwIHEtODMgMCAtMTQxLjUgNTguNXQtNTguNSAxNDEuNXY0MDBxMCA4MyA1OC41IDE0MS41dDE0MS41IDU4LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxODsiIGQ9Ik0xNTAgMTEwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjUgNDAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjgzbDIyNCAtMjI0cTEzIC0xMyAxMyAtMzEuNXQtMTMgLTMyIHQtMzEuNSAtMTMuNXQtMzEuNSAxM2wtODggODhoLTUyNGwtODcgLTg4cS0xMyAtMTMgLTMyIC0xM3QtMzIgMTMuNXQtMTMgMzJ0MTMgMzEuNWwyMjQgMjI0aC0yODlxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01NDEgMzAwbC0xMDAgLTEwMGgzMjRsLTEwMCAxMDBoLTEyNHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjE5OyIgZD0iTTIwMCAxMTAwaDgwMHE4MyAwIDE0MS41IC01OC41dDU4LjUgLTE0MS41di0yMDBoLTEwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtMjUwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41aC0xMDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTI1MHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNWgtMTAwdjIwMHEwIDgzIDU4LjUgMTQxLjV0MTQxLjUgNTguNXpNMTAwIDYwMGgxMDAwcTQxIDAgNzAuNSAtMjkuNSB0MjkuNSAtNzAuNXYtMzAwaC0xMjAwdjMwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTMwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHpNMTEwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjIxOyIgZD0iTTQ4MCAxMTY1bDY4MiAtNjgzcTMxIC0zMSAzMSAtNzUuNXQtMzEgLTc1LjVsLTEzMSAtMTMxaC00ODFsLTUxNyA1MThxLTMyIDMxIC0zMiA3NS41dDMyIDc1LjVsMjk1IDI5NnEzMSAzMSA3NS41IDMxdDc2LjUgLTMxek0xMDggNzk0bDM0MiAtMzQybDMwMyAzMDRsLTM0MSAzNDF6TTI1MCAxMDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtOTAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjIzOyIgZD0iTTEwNTcgNjQ3bC0xODkgNTA2cS04IDE5IC0yNy41IDMzdC00MC41IDE0aC00MDBxLTIxIDAgLTQwLjUgLTE0dC0yNy41IC0zM2wtMTg5IC01MDZxLTggLTE5IDEuNSAtMzN0MzAuNSAtMTRoNjI1di0xNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41dDM1LjUgMTQuNXQxNC41IDM1LjV2MTUwaDEyNXEyMSAwIDMwLjUgMTR0MS41IDMzek04OTcgMGgtNTk1djUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ4djMwMGgyMDB2LTMwMGg0N3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjQ7IiBkPSJNOTAwIDgwMGgzMDB2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTM3NXY1OTFsLTMwMCAzMDB2ODRxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNMTIwMCA5MDBoLTIwMHYyMDB6TTQwMCA2MDBoMzAwdi01NzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC02NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNNzAwIDcwMGgtMjAwdjIwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIyNTsiIGQ9Ik00ODQgMTA5NWgxOTVxNzUgMCAxNDYgLTMyLjV0MTI0IC04NnQ4OS41IC0xMjIuNXQ0OC41IC0xNDJxMTggLTE0IDM1IC0yMHEzMSAtMTAgNjQuNSA2LjV0NDMuNSA0OC41cTEwIDM0IC0xNSA3MXEtMTkgMjcgLTkgNDNxNSA4IDEyLjUgMTF0MTkgLTF0MjMuNSAtMTZxNDEgLTQ0IDM5IC0xMDVxLTMgLTYzIC00NiAtMTA2LjV0LTEwNCAtNDMuNWgtNjJxLTcgLTU1IC0zNSAtMTE3dC01NiAtMTAwbC0zOSAtMjM0cS0zIC0yMCAtMjAgLTM0LjUgdC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMTIgNzBxLTQ5IC0xNCAtOTEgLTE0aC0xOTVxLTI0IDAgLTY1IDhsLTExIC02NHEtMyAtMjAgLTIwIC0zNC41dC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMjYgMTU3cS04NCA3NCAtMTI4IDE3NWwtMTU5IDUzcS0xOSA3IC0zMyAyNnQtMTQgNDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEyNHExMSA4NyA1NiAxNjZsLTExMSA5NSBxLTE2IDE0IC0xMi41IDIzLjV0MjQuNSA5LjVoMjAzcTExNiAxMDEgMjUwIDEwMXpNNjc1IDEwMDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMjUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjY7IiBkPSJNNjQxIDkwMGw0MjMgMjQ3cTE5IDggNDIgMi41dDM3IC0yMS41bDMyIC0zOHExNCAtMTUgMTIuNSAtMzZ0LTE3LjUgLTM0bC0xMzkgLTEyMGgtMzkwek01MCAxMTAwaDEwNnE2NyAwIDEwMyAtMTd0NjYgLTcxbDEwMiAtMjEyaDgyM3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBxMCAtMjEgLTE0IC00MHQtMzMgLTI2bC03MzcgLTEzMnEtMjMgLTQgLTQwIDZ0LTI2IDI1cS00MiA2NyAtMTAwIDY3aC0zMDBxLTYyIDAgLTEwNiA0NCB0LTQ0IDEwNnYyMDBxMCA2MiA0NCAxMDZ0MTA2IDQ0ek0xNzMgOTI4aC04MHEtMTkgMCAtMjggLTE0dC05IC0zNXYtNTZxMCAtNTEgNDIgLTUxaDEzNHExNiAwIDIxLjUgOHQ1LjUgMjRxMCAxMSAtMTYgNDV0LTI3IDUxcS0xOCAyOCAtNDMgMjh6TTU1MCA3MjdxLTMyIDAgLTU0LjUgLTIyLjV0LTIyLjUgLTU0LjV0MjIuNSAtNTQuNXQ1NC41IC0yMi41dDU0LjUgMjIuNXQyMi41IDU0LjV0LTIyLjUgNTQuNXQtNTQuNSAyMi41ek0xMzAgMzg5IGwxNTIgMTMwcTE4IDE5IDM0IDI0dDMxIC0zLjV0MjQuNSAtMTcuNXQyNS41IC0yOHEyOCAtMzUgNTAuNSAtNTF0NDguNSAtMTNsNjMgNWw0OCAtMTc5cTEzIC02MSAtMy41IC05Ny41dC02Ny41IC03OS41bC04MCAtNjlxLTQ3IC00MCAtMTA5IC0zNS41dC0xMDMgNTEuNWwtMTMwIDE1MXEtNDAgNDcgLTM1LjUgMTA5LjV0NTEuNSAxMDIuNXpNMzgwIDM3N2wtMTAyIC04OHEtMzEgLTI3IDIgLTY1bDM3IC00M3ExMyAtMTUgMjcuNSAtMTkuNSB0MzEuNSA2LjVsNjEgNTNxMTkgMTYgMTQgNDlxLTIgMjAgLTEyIDU2dC0xNyA0NXEtMTEgMTIgLTE5IDE0dC0yMyAtOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjI3OyIgZD0iTTYyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwOXE3OSAtMzMgMTMxIC04Ny41dDUzIC0xMjguNXExIC00NiAtMTUgLTg0LjV0LTM5IC02MXQtNDYgLTM4dC0zOSAtMjEuNWwtMTcgLTZxNiAwIDE1IC0xLjV0MzUgLTl0NTAgLTE3LjV0NTMgLTMwdDUwIC00NXQzNS41IC02NHQxNC41IC04NHEwIC01OSAtMTEuNSAtMTA1LjV0LTI4LjUgLTc2LjV0LTQ0IC01MXQtNDkuNSAtMzEuNXQtNTQuNSAtMTZ0LTQ5LjUgLTYuNSB0LTQzLjUgLTF2LTc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzVoLTEwMHYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtMTc1cS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNzV2NjAwaC03NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNzV2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWgxMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDAwIDkwMHYtMjAwaDI2M3EyOCAwIDQ4LjUgMTAuNXQzMCAyNXQxNSAyOXQ1LjUgMjUuNWwxIDEwcTAgNCAtMC41IDExdC02IDI0dC0xNSAzMHQtMzAgMjR0LTQ4LjUgMTFoLTI2M3pNNDAwIDUwMHYtMjAwaDM2M3EyOCAwIDQ4LjUgMTAuNSB0MzAgMjV0MTUgMjl0NS41IDI1LjVsMSAxMHEwIDQgLTAuNSAxMXQtNiAyNHQtMTUgMzB0LTMwIDI0dC00OC41IDExaC0zNjN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMDsiIGQ9Ik0yMTIgMTE5OGg3ODBxODYgMCAxNDcgLTYxdDYxIC0xNDd2LTQxNnEwIC01MSAtMTggLTE0Mi41dC0zNiAtMTU3LjVsLTE4IC02NnEtMjkgLTg3IC05My41IC0xNDYuNXQtMTQ2LjUgLTU5LjVoLTU3MnEtODIgMCAtMTQ3IDU5dC05MyAxNDdxLTggMjggLTIwIDczdC0zMiAxNDMuNXQtMjAgMTQ5LjV2NDE2cTAgODYgNjEgMTQ3dDE0NyA2MXpNNjAwIDEwNDVxLTcwIDAgLTEzMi41IC0xMS41dC0xMDUuNSAtMzAuNXQtNzguNSAtNDEuNSB0LTU3IC00NXQtMzYgLTQxdC0yMC41IC0zMC41bC02IC0xMmwxNTYgLTI0M2g1NjBsMTU2IDI0M3EtMiA1IC02IDEyLjV0LTIwIDI5LjV0LTM2LjUgNDJ0LTU3IDQ0LjV0LTc5IDQydC0xMDUgMjkuNXQtMTMyLjUgMTJ6TTc2MiA3MDNoLTE1N2wxOTUgMjYxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzE7IiBkPSJNNDc1IDEzMDBoMTUwcTEwMyAwIDE4OSAtODZ0ODYgLTE4OXYtNTAwcTAgLTQxIC00MiAtODN0LTgzIC00MmgtNDUwcS00MSAwIC04MyA0MnQtNDIgODN2NTAwcTAgMTAzIDg2IDE4OXQxODkgODZ6TTcwMCAzMDB2LTIyNXEwIC0yMSAtMjcgLTQ4dC00OCAtMjdoLTE1MHEtMjEgMCAtNDggMjd0LTI3IDQ4djIyNWgzMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMjsiIGQ9Ik00NzUgMTMwMGg5NnEwIC0xNTAgODkuNSAtMjM5LjV0MjM5LjUgLTg5LjV2LTQ0NnEwIC00MSAtNDIgLTgzdC04MyAtNDJoLTQ1MHEtNDEgMCAtODMgNDJ0LTQyIDgzdjUwMHEwIDEwMyA4NiAxODl0MTg5IDg2ek03MDAgMzAwdi0yMjVxMCAtMjEgLTI3IC00OHQtNDggLTI3aC0xNTBxLTIxIDAgLTQ4IDI3dC0yNyA0OHYyMjVoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzM7IiBkPSJNMTI5NCA3NjdsLTYzOCAtMjgzbC0zNzggMTcwbC03OCAtNjB2LTIyNGwxMDAgLTE1MHYtMTk5bC0xNTAgMTQ4bC0xNTAgLTE0OXYyMDBsMTAwIDE1MHYyNTBxMCA0IC0wLjUgMTAuNXQwIDkuNXQxIDh0MyA4dDYuNSA2bDQ3IDQwbC0xNDcgNjVsNjQyIDI4M3pNMTAwMCAzODBsLTM1MCAtMTY2bC0zNTAgMTY2djE0N2wzNTAgLTE2NWwzNTAgMTY1di0xNDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzNDsiIGQ9Ik0yNTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek02NTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek0xMDUwIDgwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnQtNDQgLTEwNnQtMTA2IC00NHQtMTA2IDQ0dC00NCAxMDZ0NDQgMTA2dDEwNiA0NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjM1OyIgZD0iTTU1MCAxMTAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgNzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgMzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzY7IiBkPSJNMTI1IDExMDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEyNSA3MDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjUgdDE3LjUgNy41ek0xMjUgMzAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTk1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzc7IiBkPSJNMzUwIDEyMDBoNTAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTUwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNTAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY1MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek05MDAgMTAwMGgtNjAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDYwMHE0MSAwIDcwLjUgMjkuNSB0MjkuNSA3MC41djYwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMzUwIDkwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek00MDAgODAwdi0yMDBoNDAwdjIwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzg7IiBkPSJNMTUwIDExMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNSB0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MjAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV0MTQuNSAzNS41dDM1LjUgMTQuNWg1MHYyMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41aDUwdjIwMGgtNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzOTsiIGQ9Ik02NTAgMTE4N3E4NyAtNjcgMTE4LjUgLTE1NnQwIC0xNzh0LTExOC41IC0xNTVxLTg3IDY2IC0xMTguNSAxNTV0MCAxNzh0MTE4LjUgMTU2ek0zMDAgODAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAwIDgwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhxMCAxMjQgODggMjEydDIxMiA4OHpNMzAwIDUwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnogTTEwMDAgNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek03MDAgMTk5di0xNDRxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djE0MnE0MCAtNCA0MyAtNHExNyAwIDU3IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0MDsiIGQ9Ik03NDUgODc4bDY5IDE5cTI1IDYgNDUgLTEybDI5OCAtMjk1cTExIC0xMSAxNSAtMjYuNXQtMiAtMzAuNXEtNSAtMTQgLTE4IC0yMy41dC0yOCAtOS41aC04cTEgMCAxIC0xM3EwIC0yOSAtMiAtNTZ0LTguNSAtNjJ0LTIwIC02M3QtMzMgLTUzdC01MSAtMzl0LTcyLjUgLTE0aC0xNDZxLTE4NCAwIC0xODQgMjg4cTAgMjQgMTAgNDdxLTIwIDQgLTYyIDR0LTYzIC00cTExIC0yNCAxMSAtNDdxMCAtMjg4IC0xODQgLTI4OGgtMTQyIHEtNDggMCAtODQuNSAyMXQtNTYgNTF0LTMyIDcxLjV0LTE2IDc1dC0zLjUgNjguNXEwIDEzIDIgMTNoLTdxLTE1IDAgLTI3LjUgOS41dC0xOC41IDIzLjVxLTYgMTUgLTIgMzAuNXQxNSAyNS41bDI5OCAyOTZxMjAgMTggNDYgMTFsNzYgLTE5cTIwIC01IDMwLjUgLTIyLjV0NS41IC0zNy41dC0yMi41IC0zMXQtMzcuNSAtNWwtNTEgMTJsLTE4MiAtMTkzaDg5MWwtMTgyIDE5M2wtNDQgLTEycS0yMCAtNSAtMzcuNSA2dC0yMi41IDMxdDYgMzcuNSB0MzEgMjIuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQxOyIgZD0iTTEyMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTUwMCA0NTBoLTI1cTAgMTUgLTQgMjQuNXQtOSAxNC41dC0xNyA3LjV0LTIwIDN0LTI1IDAuNWgtMTAwdi00MjVxMCAtMTEgMTIuNSAtMTcuNXQyNS41IC03LjVoMTJ2LTUwaC0yMDB2NTBxNTAgMCA1MCAyNXY0MjVoLTEwMHEtMTcgMCAtMjUgLTAuNXQtMjAgLTN0LTE3IC03LjV0LTkgLTE0LjV0LTQgLTI0LjVoLTI1djE1MGg1MDB2LTE1MHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQyOyIgZD0iTTEwMDAgMzAwdjUwcS0yNSAwIC01NSAzMnEtMTQgMTQgLTI1IDMxdC0xNiAyN2wtNCAxMWwtMjg5IDc0N2gtNjlsLTMwMCAtNzU0cS0xOCAtMzUgLTM5IC01NnEtOSAtOSAtMjQuNSAtMTguNXQtMjYuNSAtMTQuNWwtMTEgLTV2LTUwaDI3M3Y1MHEtNDkgMCAtNzguNSAyMS41dC0xMS41IDY3LjVsNjkgMTc2aDI5M2w2MSAtMTY2cTEzIC0zNCAtMy41IC02Ni41dC01NS41IC0zMi41di01MGgzMTJ6TTQxMiA2OTFsMTM0IDM0MmwxMjEgLTM0MiBoLTI1NXpNMTEwMCAxNTB2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDM7IiBkPSJNNTAgMTIwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjExIDExMThoLTcwcS0xMyAwIC0xOCAtMTJsLTI5OSAtNzUzcS0xNyAtMzIgLTM1IC01MXEtMTggLTE4IC01NiAtMzRxLTEyIC01IC0xMiAtMTh2LTUwcTAgLTggNS41IC0xNHQxNC41IC02IGgyNzNxOCAwIDE0IDZ0NiAxNHY1MHEwIDggLTYgMTR0LTE0IDZxLTU1IDAgLTcxIDIzcS0xMCAxNCAwIDM5bDYzIDE2M2gyNjZsNTcgLTE1M3ExMSAtMzEgLTYgLTU1cS0xMiAtMTcgLTM2IC0xN3EtOCAwIC0xNCAtNnQtNiAtMTR2LTUwcTAgLTggNiAtMTR0MTQgLTZoMzEzcTggMCAxNCA2dDYgMTR2NTBxMCA3IC01LjUgMTN0LTEzLjUgN3EtMTcgMCAtNDIgMjVxLTI1IDI3IC00MCA2M2gtMWwtMjg4IDc0OHEtNSAxMiAtMTkgMTJ6TTYzOSA2MTEgaC0xOTdsMTAzIDI2NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ0OyIgZD0iTTEyMDAgMTEwMGgtMTIwMHYxMDBoMTIwMHYtMTAwek01MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtOTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djkwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgOTAwdi0zMDBoMzAwdjMwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDU7IiBkPSJNNTAgMTIwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTkwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY5MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgNzAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgNjAwdi0zMDBoMzAwdjMwMGgtMzAwek0xMjAwIDBoLTEyMDB2MTAwaDEyMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ2OyIgZD0iTTUwIDEwMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMTAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoMTAwdi0xMDBoLTEwMHYtMTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djE1MGgtMTAwdi0zNTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA3MDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0NzsiIGQ9Ik0xMDAgMGgtMTAwdjEyMDBoMTAwdi0xMjAwek0yNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMDAgMTAwMHYtMzAwaDMwMHYzMDBoLTMwMHpNMjUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ4OyIgZD0iTTYwMCAxMTAwaDE1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTEwMGg0NTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDM1MHYxMDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41IHQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTUwdjEwMGgxMDB2LTEwMHpNNDAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0OTsiIGQ9Ik0xMjAwIDBoLTEwMHYxMjAwaDEwMHYtMTIwMHpNNTUwIDExMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUwOyIgZD0iTTg2NSA1NjVsLTQ5NCAtNDk0cS0yMyAtMjMgLTQxIC0yM3EtMTQgMCAtMjIgMTMuNXQtOCAzOC41djEwMDBxMCAyNSA4IDM4LjV0MjIgMTMuNXExOCAwIDQxIC0yM2w0OTQgLTQ5NHExNCAtMTQgMTQgLTM1dC0xNCAtMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI1MTsiIGQ9Ik0zMzUgNjM1bDQ5NCA0OTRxMjkgMjkgNTAgMjAuNXQyMSAtNDkuNXYtMTAwMHEwIC00MSAtMjEgLTQ5LjV0LTUwIDIwLjVsLTQ5NCA0OTRxLTE0IDE0IC0xNCAzNXQxNCAzNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUyOyIgZD0iTTEwMCA5MDBoMTAwMHE0MSAwIDQ5LjUgLTIxdC0yMC41IC01MGwtNDk0IC00OTRxLTE0IC0xNCAtMzUgLTE0dC0zNSAxNGwtNDk0IDQ5NHEtMjkgMjkgLTIwLjUgNTB0NDkuNSAyMXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUzOyIgZD0iTTYzNSA4NjVsNDk0IC00OTRxMjkgLTI5IDIwLjUgLTUwdC00OS41IC0yMWgtMTAwMHEtNDEgMCAtNDkuNSAyMXQyMC41IDUwbDQ5NCA0OTRxMTQgMTQgMzUgMTR0MzUgLTE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTQ7IiBkPSJNNzAwIDc0MXYtMTgybC02OTIgLTMyM3YyMjFsNDEzIDE5M2wtNDEzIDE5M3YyMjF6TTEyMDAgMGgtODAwdjIwMGg4MDB2LTIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU1OyIgZD0iTTEyMDAgOTAwaC0yMDB2LTEwMGgyMDB2LTEwMGgtMzAwdjMwMGgyMDB2MTAwaC0yMDB2MTAwaDMwMHYtMzAwek0wIDcwMGg1MHEwIDIxIDQgMzd0OS41IDI2LjV0MTggMTcuNXQyMiAxMXQyOC41IDUuNXQzMSAydDM3IDAuNWgxMDB2LTU1MHEwIC0yMiAtMjUgLTM0LjV0LTUwIC0xMy41bC0yNSAtMnYtMTAwaDQwMHYxMDBxLTQgMCAtMTEgMC41dC0yNCAzdC0zMCA3dC0yNCAxNXQtMTEgMjQuNXY1NTBoMTAwcTI1IDAgMzcgLTAuNXQzMSAtMiB0MjguNSAtNS41dDIyIC0xMXQxOCAtMTcuNXQ5LjUgLTI2LjV0NCAtMzdoNTB2MzAwaC04MDB2LTMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU2OyIgZD0iTTgwMCA3MDBoLTUwcTAgMjEgLTQgMzd0LTkuNSAyNi41dC0xOCAxNy41dC0yMiAxMXQtMjguNSA1LjV0LTMxIDJ0LTM3IDAuNWgtMTAwdi01NTBxMCAtMjIgMjUgLTM0LjV0NTAgLTE0LjVsMjUgLTF2LTEwMGgtNDAwdjEwMHE0IDAgMTEgMC41dDI0IDN0MzAgN3QyNCAxNXQxMSAyNC41djU1MGgtMTAwcS0yNSAwIC0zNyAtMC41dC0zMSAtMnQtMjguNSAtNS41dC0yMiAtMTF0LTE4IC0xNy41dC05LjUgLTI2LjV0LTQgLTM3aC01MHYzMDAgaDgwMHYtMzAwek0xMTAwIDIwMGgtMjAwdi0xMDBoMjAwdi0xMDBoLTMwMHYzMDBoMjAwdjEwMGgtMjAwdjEwMGgzMDB2LTMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU3OyIgZD0iTTcwMSAxMDk4aDE2MHExNiAwIDIxIC0xMXQtNyAtMjNsLTQ2NCAtNDY0bDQ2NCAtNDY0cTEyIC0xMiA3IC0yM3QtMjEgLTExaC0xNjBxLTEzIDAgLTIzIDlsLTQ3MSA0NzFxLTcgOCAtNyAxOHQ3IDE4bDQ3MSA0NzFxMTAgOSAyMyA5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTg7IiBkPSJNMzM5IDEwOThoMTYwcTEzIDAgMjMgLTlsNDcxIC00NzFxNyAtOCA3IC0xOHQtNyAtMThsLTQ3MSAtNDcxcS0xMCAtOSAtMjMgLTloLTE2MHEtMTYgMCAtMjEgMTF0NyAyM2w0NjQgNDY0bC00NjQgNDY0cS0xMiAxMiAtNyAyM3QyMSAxMXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU5OyIgZD0iTTEwODcgODgycTExIC01IDExIC0yMXYtMTYwcTAgLTEzIC05IC0yM2wtNDcxIC00NzFxLTggLTcgLTE4IC03dC0xOCA3bC00NzEgNDcxcS05IDEwIC05IDIzdjE2MHEwIDE2IDExIDIxdDIzIC03bDQ2NCAtNDY0bDQ2NCA0NjRxMTIgMTIgMjMgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjYwOyIgZD0iTTYxOCA5OTNsNDcxIC00NzFxOSAtMTAgOSAtMjN2LTE2MHEwIC0xNiAtMTEgLTIxdC0yMyA3bC00NjQgNDY0bC00NjQgLTQ2NHEtMTIgLTEyIC0yMyAtN3QtMTEgMjF2MTYwcTAgMTMgOSAyM2w0NzEgNDcxcTggNyAxOCA3dDE4IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGY4ZmY7IiBkPSJNMTAwMCAxMjAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek00NTAgMTAwMGgxMDBxMjEgMCA0MCAtMTR0MjYgLTMzbDc5IC0xOTRxNSAxIDE2IDNxMzQgNiA1NCA5LjV0NjAgN3Q2NS41IDF0NjEgLTEwdDU2LjUgLTIzdDQyLjUgLTQydDI5IC02NHQ1IC05MnQtMTkuNSAtMTIxLjVxLTEgLTcgLTMgLTE5LjV0LTExIC01MHQtMjAuNSAtNzN0LTMyLjUgLTgxLjV0LTQ2LjUgLTgzdC02NCAtNzAgdC04Mi41IC01MHEtMTMgLTUgLTQyIC01dC02NS41IDIuNXQtNDcuNSAyLjVxLTE0IDAgLTQ5LjUgLTMuNXQtNjMgLTMuNXQtNDMuNSA3cS01NyAyNSAtMTA0LjUgNzguNXQtNzUgMTExLjV0LTQ2LjUgMTEydC0yNiA5MGwtNyAzNXEtMTUgNjMgLTE4IDExNXQ0LjUgODguNXQyNiA2NHQzOS41IDQzLjV0NTIgMjUuNXQ1OC41IDEzdDYyLjUgMnQ1OS41IC00LjV0NTUuNSAtOGwtMTQ3IDE5MnEtMTIgMTggLTUuNSAzMHQyNy41IDEyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNTExOyIgZD0iTTI1MCAxMjAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTUwMGwtMjU1IC0xNzhxLTE5IC05IC0zMiAtMXQtMTMgMjl2NjUwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQwMCAxMTAwdi0xMDBoMzAwdjEwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNmFhOyIgZD0iTTI1MCAxMjAwaDc1MHEzOSAwIDY5LjUgLTQwLjV0MzAuNSAtODQuNXYtOTMzbC03MDAgLTExN3Y5NTBsNjAwIDEyNWgtNzAwdi0xMDAwaC0xMDB2MTAyNXEwIDIzIDE1LjUgNDl0MzQuNSAyNnpNNTAwIDUyNXYtMTAwbDEwMCAyMHYxMDB6IiAvPgo8L2ZvbnQ%2BCjwvZGVmcz48L3N2Zz4g%29%20format%28%27svg%27%29%7D%2Eglyphicon%7Bposition%3Arelative%3Btop%3A1px%3Bdisplay%3Ainline%2Dblock%3Bfont%2Dfamily%3A%27Glyphicons%20Halflings%27%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3B%2Dwebkit%2Dfont%2Dsmoothing%3Aantialiased%3B%2Dmoz%2Dosx%2Dfont%2Dsmoothing%3Agrayscale%7D%2Eglyphicon%2Dasterisk%3Abefore%7Bcontent%3A%22%5C2a%22%7D%2Eglyphicon%2Dplus%3Abefore%7Bcontent%3A%22%5C2b%22%7D%2Eglyphicon%2Deur%3Abefore%2C%2Eglyphicon%2Deuro%3Abefore%7Bcontent%3A%22%5C20ac%22%7D%2Eglyphicon%2Dminus%3Abefore%7Bcontent%3A%22%5C2212%22%7D%2Eglyphicon%2Dcloud%3Abefore%7Bcontent%3A%22%5C2601%22%7D%2Eglyphicon%2Denvelope%3Abefore%7Bcontent%3A%22%5C2709%22%7D%2Eglyphicon%2Dpencil%3Abefore%7Bcontent%3A%22%5C270f%22%7D%2Eglyphicon%2Dglass%3Abefore%7Bcontent%3A%22%5Ce001%22%7D%2Eglyphicon%2Dmusic%3Abefore%7Bcontent%3A%22%5Ce002%22%7D%2Eglyphicon%2Dsearch%3Abefore%7Bcontent%3A%22%5Ce003%22%7D%2Eglyphicon%2Dheart%3Abefore%7Bcontent%3A%22%5Ce005%22%7D%2Eglyphicon%2Dstar%3Abefore%7Bcontent%3A%22%5Ce006%22%7D%2Eglyphicon%2Dstar%2Dempty%3Abefore%7Bcontent%3A%22%5Ce007%22%7D%2Eglyphicon%2Duser%3Abefore%7Bcontent%3A%22%5Ce008%22%7D%2Eglyphicon%2Dfilm%3Abefore%7Bcontent%3A%22%5Ce009%22%7D%2Eglyphicon%2Dth%2Dlarge%3Abefore%7Bcontent%3A%22%5Ce010%22%7D%2Eglyphicon%2Dth%3Abefore%7Bcontent%3A%22%5Ce011%22%7D%2Eglyphicon%2Dth%2Dlist%3Abefore%7Bcontent%3A%22%5Ce012%22%7D%2Eglyphicon%2Dok%3Abefore%7Bcontent%3A%22%5Ce013%22%7D%2Eglyphicon%2Dremove%3Abefore%7Bcontent%3A%22%5Ce014%22%7D%2Eglyphicon%2Dzoom%2Din%3Abefore%7Bcontent%3A%22%5Ce015%22%7D%2Eglyphicon%2Dzoom%2Dout%3Abefore%7Bcontent%3A%22%5Ce016%22%7D%2Eglyphicon%2Doff%3Abefore%7Bcontent%3A%22%5Ce017%22%7D%2Eglyphicon%2Dsignal%3Abefore%7Bcontent%3A%22%5Ce018%22%7D%2Eglyphicon%2Dcog%3Abefore%7Bcontent%3A%22%5Ce019%22%7D%2Eglyphicon%2Dtrash%3Abefore%7Bcontent%3A%22%5Ce020%22%7D%2Eglyphicon%2Dhome%3Abefore%7Bcontent%3A%22%5Ce021%22%7D%2Eglyphicon%2Dfile%3Abefore%7Bcontent%3A%22%5Ce022%22%7D%2Eglyphicon%2Dtime%3Abefore%7Bcontent%3A%22%5Ce023%22%7D%2Eglyphicon%2Droad%3Abefore%7Bcontent%3A%22%5Ce024%22%7D%2Eglyphicon%2Ddownload%2Dalt%3Abefore%7Bcontent%3A%22%5Ce025%22%7D%2Eglyphicon%2Ddownload%3Abefore%7Bcontent%3A%22%5Ce026%22%7D%2Eglyphicon%2Dupload%3Abefore%7Bcontent%3A%22%5Ce027%22%7D%2Eglyphicon%2Dinbox%3Abefore%7Bcontent%3A%22%5Ce028%22%7D%2Eglyphicon%2Dplay%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce029%22%7D%2Eglyphicon%2Drepeat%3Abefore%7Bcontent%3A%22%5Ce030%22%7D%2Eglyphicon%2Drefresh%3Abefore%7Bcontent%3A%22%5Ce031%22%7D%2Eglyphicon%2Dlist%2Dalt%3Abefore%7Bcontent%3A%22%5Ce032%22%7D%2Eglyphicon%2Dlock%3Abefore%7Bcontent%3A%22%5Ce033%22%7D%2Eglyphicon%2Dflag%3Abefore%7Bcontent%3A%22%5Ce034%22%7D%2Eglyphicon%2Dheadphones%3Abefore%7Bcontent%3A%22%5Ce035%22%7D%2Eglyphicon%2Dvolume%2Doff%3Abefore%7Bcontent%3A%22%5Ce036%22%7D%2Eglyphicon%2Dvolume%2Ddown%3Abefore%7Bcontent%3A%22%5Ce037%22%7D%2Eglyphicon%2Dvolume%2Dup%3Abefore%7Bcontent%3A%22%5Ce038%22%7D%2Eglyphicon%2Dqrcode%3Abefore%7Bcontent%3A%22%5Ce039%22%7D%2Eglyphicon%2Dbarcode%3Abefore%7Bcontent%3A%22%5Ce040%22%7D%2Eglyphicon%2Dtag%3Abefore%7Bcontent%3A%22%5Ce041%22%7D%2Eglyphicon%2Dtags%3Abefore%7Bcontent%3A%22%5Ce042%22%7D%2Eglyphicon%2Dbook%3Abefore%7Bcontent%3A%22%5Ce043%22%7D%2Eglyphicon%2Dbookmark%3Abefore%7Bcontent%3A%22%5Ce044%22%7D%2Eglyphicon%2Dprint%3Abefore%7Bcontent%3A%22%5Ce045%22%7D%2Eglyphicon%2Dcamera%3Abefore%7Bcontent%3A%22%5Ce046%22%7D%2Eglyphicon%2Dfont%3Abefore%7Bcontent%3A%22%5Ce047%22%7D%2Eglyphicon%2Dbold%3Abefore%7Bcontent%3A%22%5Ce048%22%7D%2Eglyphicon%2Ditalic%3Abefore%7Bcontent%3A%22%5Ce049%22%7D%2Eglyphicon%2Dtext%2Dheight%3Abefore%7Bcontent%3A%22%5Ce050%22%7D%2Eglyphicon%2Dtext%2Dwidth%3Abefore%7Bcontent%3A%22%5Ce051%22%7D%2Eglyphicon%2Dalign%2Dleft%3Abefore%7Bcontent%3A%22%5Ce052%22%7D%2Eglyphicon%2Dalign%2Dcenter%3Abefore%7Bcontent%3A%22%5Ce053%22%7D%2Eglyphicon%2Dalign%2Dright%3Abefore%7Bcontent%3A%22%5Ce054%22%7D%2Eglyphicon%2Dalign%2Djustify%3Abefore%7Bcontent%3A%22%5Ce055%22%7D%2Eglyphicon%2Dlist%3Abefore%7Bcontent%3A%22%5Ce056%22%7D%2Eglyphicon%2Dindent%2Dleft%3Abefore%7Bcontent%3A%22%5Ce057%22%7D%2Eglyphicon%2Dindent%2Dright%3Abefore%7Bcontent%3A%22%5Ce058%22%7D%2Eglyphicon%2Dfacetime%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce059%22%7D%2Eglyphicon%2Dpicture%3Abefore%7Bcontent%3A%22%5Ce060%22%7D%2Eglyphicon%2Dmap%2Dmarker%3Abefore%7Bcontent%3A%22%5Ce062%22%7D%2Eglyphicon%2Dadjust%3Abefore%7Bcontent%3A%22%5Ce063%22%7D%2Eglyphicon%2Dtint%3Abefore%7Bcontent%3A%22%5Ce064%22%7D%2Eglyphicon%2Dedit%3Abefore%7Bcontent%3A%22%5Ce065%22%7D%2Eglyphicon%2Dshare%3Abefore%7Bcontent%3A%22%5Ce066%22%7D%2Eglyphicon%2Dcheck%3Abefore%7Bcontent%3A%22%5Ce067%22%7D%2Eglyphicon%2Dmove%3Abefore%7Bcontent%3A%22%5Ce068%22%7D%2Eglyphicon%2Dstep%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce069%22%7D%2Eglyphicon%2Dfast%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce070%22%7D%2Eglyphicon%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce071%22%7D%2Eglyphicon%2Dplay%3Abefore%7Bcontent%3A%22%5Ce072%22%7D%2Eglyphicon%2Dpause%3Abefore%7Bcontent%3A%22%5Ce073%22%7D%2Eglyphicon%2Dstop%3Abefore%7Bcontent%3A%22%5Ce074%22%7D%2Eglyphicon%2Dforward%3Abefore%7Bcontent%3A%22%5Ce075%22%7D%2Eglyphicon%2Dfast%2Dforward%3Abefore%7Bcontent%3A%22%5Ce076%22%7D%2Eglyphicon%2Dstep%2Dforward%3Abefore%7Bcontent%3A%22%5Ce077%22%7D%2Eglyphicon%2Deject%3Abefore%7Bcontent%3A%22%5Ce078%22%7D%2Eglyphicon%2Dchevron%2Dleft%3Abefore%7Bcontent%3A%22%5Ce079%22%7D%2Eglyphicon%2Dchevron%2Dright%3Abefore%7Bcontent%3A%22%5Ce080%22%7D%2Eglyphicon%2Dplus%2Dsign%3Abefore%7Bcontent%3A%22%5Ce081%22%7D%2Eglyphicon%2Dminus%2Dsign%3Abefore%7Bcontent%3A%22%5Ce082%22%7D%2Eglyphicon%2Dremove%2Dsign%3Abefore%7Bcontent%3A%22%5Ce083%22%7D%2Eglyphicon%2Dok%2Dsign%3Abefore%7Bcontent%3A%22%5Ce084%22%7D%2Eglyphicon%2Dquestion%2Dsign%3Abefore%7Bcontent%3A%22%5Ce085%22%7D%2Eglyphicon%2Dinfo%2Dsign%3Abefore%7Bcontent%3A%22%5Ce086%22%7D%2Eglyphicon%2Dscreenshot%3Abefore%7Bcontent%3A%22%5Ce087%22%7D%2Eglyphicon%2Dremove%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce088%22%7D%2Eglyphicon%2Dok%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce089%22%7D%2Eglyphicon%2Dban%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce090%22%7D%2Eglyphicon%2Darrow%2Dleft%3Abefore%7Bcontent%3A%22%5Ce091%22%7D%2Eglyphicon%2Darrow%2Dright%3Abefore%7Bcontent%3A%22%5Ce092%22%7D%2Eglyphicon%2Darrow%2Dup%3Abefore%7Bcontent%3A%22%5Ce093%22%7D%2Eglyphicon%2Darrow%2Ddown%3Abefore%7Bcontent%3A%22%5Ce094%22%7D%2Eglyphicon%2Dshare%2Dalt%3Abefore%7Bcontent%3A%22%5Ce095%22%7D%2Eglyphicon%2Dresize%2Dfull%3Abefore%7Bcontent%3A%22%5Ce096%22%7D%2Eglyphicon%2Dresize%2Dsmall%3Abefore%7Bcontent%3A%22%5Ce097%22%7D%2Eglyphicon%2Dexclamation%2Dsign%3Abefore%7Bcontent%3A%22%5Ce101%22%7D%2Eglyphicon%2Dgift%3Abefore%7Bcontent%3A%22%5Ce102%22%7D%2Eglyphicon%2Dleaf%3Abefore%7Bcontent%3A%22%5Ce103%22%7D%2Eglyphicon%2Dfire%3Abefore%7Bcontent%3A%22%5Ce104%22%7D%2Eglyphicon%2Deye%2Dopen%3Abefore%7Bcontent%3A%22%5Ce105%22%7D%2Eglyphicon%2Deye%2Dclose%3Abefore%7Bcontent%3A%22%5Ce106%22%7D%2Eglyphicon%2Dwarning%2Dsign%3Abefore%7Bcontent%3A%22%5Ce107%22%7D%2Eglyphicon%2Dplane%3Abefore%7Bcontent%3A%22%5Ce108%22%7D%2Eglyphicon%2Dcalendar%3Abefore%7Bcontent%3A%22%5Ce109%22%7D%2Eglyphicon%2Drandom%3Abefore%7Bcontent%3A%22%5Ce110%22%7D%2Eglyphicon%2Dcomment%3Abefore%7Bcontent%3A%22%5Ce111%22%7D%2Eglyphicon%2Dmagnet%3Abefore%7Bcontent%3A%22%5Ce112%22%7D%2Eglyphicon%2Dchevron%2Dup%3Abefore%7Bcontent%3A%22%5Ce113%22%7D%2Eglyphicon%2Dchevron%2Ddown%3Abefore%7Bcontent%3A%22%5Ce114%22%7D%2Eglyphicon%2Dretweet%3Abefore%7Bcontent%3A%22%5Ce115%22%7D%2Eglyphicon%2Dshopping%2Dcart%3Abefore%7Bcontent%3A%22%5Ce116%22%7D%2Eglyphicon%2Dfolder%2Dclose%3Abefore%7Bcontent%3A%22%5Ce117%22%7D%2Eglyphicon%2Dfolder%2Dopen%3Abefore%7Bcontent%3A%22%5Ce118%22%7D%2Eglyphicon%2Dresize%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce119%22%7D%2Eglyphicon%2Dresize%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce120%22%7D%2Eglyphicon%2Dhdd%3Abefore%7Bcontent%3A%22%5Ce121%22%7D%2Eglyphicon%2Dbullhorn%3Abefore%7Bcontent%3A%22%5Ce122%22%7D%2Eglyphicon%2Dbell%3Abefore%7Bcontent%3A%22%5Ce123%22%7D%2Eglyphicon%2Dcertificate%3Abefore%7Bcontent%3A%22%5Ce124%22%7D%2Eglyphicon%2Dthumbs%2Dup%3Abefore%7Bcontent%3A%22%5Ce125%22%7D%2Eglyphicon%2Dthumbs%2Ddown%3Abefore%7Bcontent%3A%22%5Ce126%22%7D%2Eglyphicon%2Dhand%2Dright%3Abefore%7Bcontent%3A%22%5Ce127%22%7D%2Eglyphicon%2Dhand%2Dleft%3Abefore%7Bcontent%3A%22%5Ce128%22%7D%2Eglyphicon%2Dhand%2Dup%3Abefore%7Bcontent%3A%22%5Ce129%22%7D%2Eglyphicon%2Dhand%2Ddown%3Abefore%7Bcontent%3A%22%5Ce130%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dright%3Abefore%7Bcontent%3A%22%5Ce131%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dleft%3Abefore%7Bcontent%3A%22%5Ce132%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dup%3Abefore%7Bcontent%3A%22%5Ce133%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Ddown%3Abefore%7Bcontent%3A%22%5Ce134%22%7D%2Eglyphicon%2Dglobe%3Abefore%7Bcontent%3A%22%5Ce135%22%7D%2Eglyphicon%2Dwrench%3Abefore%7Bcontent%3A%22%5Ce136%22%7D%2Eglyphicon%2Dtasks%3Abefore%7Bcontent%3A%22%5Ce137%22%7D%2Eglyphicon%2Dfilter%3Abefore%7Bcontent%3A%22%5Ce138%22%7D%2Eglyphicon%2Dbriefcase%3Abefore%7Bcontent%3A%22%5Ce139%22%7D%2Eglyphicon%2Dfullscreen%3Abefore%7Bcontent%3A%22%5Ce140%22%7D%2Eglyphicon%2Ddashboard%3Abefore%7Bcontent%3A%22%5Ce141%22%7D%2Eglyphicon%2Dpaperclip%3Abefore%7Bcontent%3A%22%5Ce142%22%7D%2Eglyphicon%2Dheart%2Dempty%3Abefore%7Bcontent%3A%22%5Ce143%22%7D%2Eglyphicon%2Dlink%3Abefore%7Bcontent%3A%22%5Ce144%22%7D%2Eglyphicon%2Dphone%3Abefore%7Bcontent%3A%22%5Ce145%22%7D%2Eglyphicon%2Dpushpin%3Abefore%7Bcontent%3A%22%5Ce146%22%7D%2Eglyphicon%2Dusd%3Abefore%7Bcontent%3A%22%5Ce148%22%7D%2Eglyphicon%2Dgbp%3Abefore%7Bcontent%3A%22%5Ce149%22%7D%2Eglyphicon%2Dsort%3Abefore%7Bcontent%3A%22%5Ce150%22%7D%2Eglyphicon%2Dsort%2Dby%2Dalphabet%3Abefore%7Bcontent%3A%22%5Ce151%22%7D%2Eglyphicon%2Dsort%2Dby%2Dalphabet%2Dalt%3Abefore%7Bcontent%3A%22%5Ce152%22%7D%2Eglyphicon%2Dsort%2Dby%2Dorder%3Abefore%7Bcontent%3A%22%5Ce153%22%7D%2Eglyphicon%2Dsort%2Dby%2Dorder%2Dalt%3Abefore%7Bcontent%3A%22%5Ce154%22%7D%2Eglyphicon%2Dsort%2Dby%2Dattributes%3Abefore%7Bcontent%3A%22%5Ce155%22%7D%2Eglyphicon%2Dsort%2Dby%2Dattributes%2Dalt%3Abefore%7Bcontent%3A%22%5Ce156%22%7D%2Eglyphicon%2Dunchecked%3Abefore%7Bcontent%3A%22%5Ce157%22%7D%2Eglyphicon%2Dexpand%3Abefore%7Bcontent%3A%22%5Ce158%22%7D%2Eglyphicon%2Dcollapse%2Ddown%3Abefore%7Bcontent%3A%22%5Ce159%22%7D%2Eglyphicon%2Dcollapse%2Dup%3Abefore%7Bcontent%3A%22%5Ce160%22%7D%2Eglyphicon%2Dlog%2Din%3Abefore%7Bcontent%3A%22%5Ce161%22%7D%2Eglyphicon%2Dflash%3Abefore%7Bcontent%3A%22%5Ce162%22%7D%2Eglyphicon%2Dlog%2Dout%3Abefore%7Bcontent%3A%22%5Ce163%22%7D%2Eglyphicon%2Dnew%2Dwindow%3Abefore%7Bcontent%3A%22%5Ce164%22%7D%2Eglyphicon%2Drecord%3Abefore%7Bcontent%3A%22%5Ce165%22%7D%2Eglyphicon%2Dsave%3Abefore%7Bcontent%3A%22%5Ce166%22%7D%2Eglyphicon%2Dopen%3Abefore%7Bcontent%3A%22%5Ce167%22%7D%2Eglyphicon%2Dsaved%3Abefore%7Bcontent%3A%22%5Ce168%22%7D%2Eglyphicon%2Dimport%3Abefore%7Bcontent%3A%22%5Ce169%22%7D%2Eglyphicon%2Dexport%3Abefore%7Bcontent%3A%22%5Ce170%22%7D%2Eglyphicon%2Dsend%3Abefore%7Bcontent%3A%22%5Ce171%22%7D%2Eglyphicon%2Dfloppy%2Ddisk%3Abefore%7Bcontent%3A%22%5Ce172%22%7D%2Eglyphicon%2Dfloppy%2Dsaved%3Abefore%7Bcontent%3A%22%5Ce173%22%7D%2Eglyphicon%2Dfloppy%2Dremove%3Abefore%7Bcontent%3A%22%5Ce174%22%7D%2Eglyphicon%2Dfloppy%2Dsave%3Abefore%7Bcontent%3A%22%5Ce175%22%7D%2Eglyphicon%2Dfloppy%2Dopen%3Abefore%7Bcontent%3A%22%5Ce176%22%7D%2Eglyphicon%2Dcredit%2Dcard%3Abefore%7Bcontent%3A%22%5Ce177%22%7D%2Eglyphicon%2Dtransfer%3Abefore%7Bcontent%3A%22%5Ce178%22%7D%2Eglyphicon%2Dcutlery%3Abefore%7Bcontent%3A%22%5Ce179%22%7D%2Eglyphicon%2Dheader%3Abefore%7Bcontent%3A%22%5Ce180%22%7D%2Eglyphicon%2Dcompressed%3Abefore%7Bcontent%3A%22%5Ce181%22%7D%2Eglyphicon%2Dearphone%3Abefore%7Bcontent%3A%22%5Ce182%22%7D%2Eglyphicon%2Dphone%2Dalt%3Abefore%7Bcontent%3A%22%5Ce183%22%7D%2Eglyphicon%2Dtower%3Abefore%7Bcontent%3A%22%5Ce184%22%7D%2Eglyphicon%2Dstats%3Abefore%7Bcontent%3A%22%5Ce185%22%7D%2Eglyphicon%2Dsd%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce186%22%7D%2Eglyphicon%2Dhd%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce187%22%7D%2Eglyphicon%2Dsubtitles%3Abefore%7Bcontent%3A%22%5Ce188%22%7D%2Eglyphicon%2Dsound%2Dstereo%3Abefore%7Bcontent%3A%22%5Ce189%22%7D%2Eglyphicon%2Dsound%2Ddolby%3Abefore%7Bcontent%3A%22%5Ce190%22%7D%2Eglyphicon%2Dsound%2D5%2D1%3Abefore%7Bcontent%3A%22%5Ce191%22%7D%2Eglyphicon%2Dsound%2D6%2D1%3Abefore%7Bcontent%3A%22%5Ce192%22%7D%2Eglyphicon%2Dsound%2D7%2D1%3Abefore%7Bcontent%3A%22%5Ce193%22%7D%2Eglyphicon%2Dcopyright%2Dmark%3Abefore%7Bcontent%3A%22%5Ce194%22%7D%2Eglyphicon%2Dregistration%2Dmark%3Abefore%7Bcontent%3A%22%5Ce195%22%7D%2Eglyphicon%2Dcloud%2Ddownload%3Abefore%7Bcontent%3A%22%5Ce197%22%7D%2Eglyphicon%2Dcloud%2Dupload%3Abefore%7Bcontent%3A%22%5Ce198%22%7D%2Eglyphicon%2Dtree%2Dconifer%3Abefore%7Bcontent%3A%22%5Ce199%22%7D%2Eglyphicon%2Dtree%2Ddeciduous%3Abefore%7Bcontent%3A%22%5Ce200%22%7D%2Eglyphicon%2Dcd%3Abefore%7Bcontent%3A%22%5Ce201%22%7D%2Eglyphicon%2Dsave%2Dfile%3Abefore%7Bcontent%3A%22%5Ce202%22%7D%2Eglyphicon%2Dopen%2Dfile%3Abefore%7Bcontent%3A%22%5Ce203%22%7D%2Eglyphicon%2Dlevel%2Dup%3Abefore%7Bcontent%3A%22%5Ce204%22%7D%2Eglyphicon%2Dcopy%3Abefore%7Bcontent%3A%22%5Ce205%22%7D%2Eglyphicon%2Dpaste%3Abefore%7Bcontent%3A%22%5Ce206%22%7D%2Eglyphicon%2Dalert%3Abefore%7Bcontent%3A%22%5Ce209%22%7D%2Eglyphicon%2Dequalizer%3Abefore%7Bcontent%3A%22%5Ce210%22%7D%2Eglyphicon%2Dking%3Abefore%7Bcontent%3A%22%5Ce211%22%7D%2Eglyphicon%2Dqueen%3Abefore%7Bcontent%3A%22%5Ce212%22%7D%2Eglyphicon%2Dpawn%3Abefore%7Bcontent%3A%22%5Ce213%22%7D%2Eglyphicon%2Dbishop%3Abefore%7Bcontent%3A%22%5Ce214%22%7D%2Eglyphicon%2Dknight%3Abefore%7Bcontent%3A%22%5Ce215%22%7D%2Eglyphicon%2Dbaby%2Dformula%3Abefore%7Bcontent%3A%22%5Ce216%22%7D%2Eglyphicon%2Dtent%3Abefore%7Bcontent%3A%22%5C26fa%22%7D%2Eglyphicon%2Dblackboard%3Abefore%7Bcontent%3A%22%5Ce218%22%7D%2Eglyphicon%2Dbed%3Abefore%7Bcontent%3A%22%5Ce219%22%7D%2Eglyphicon%2Dapple%3Abefore%7Bcontent%3A%22%5Cf8ff%22%7D%2Eglyphicon%2Derase%3Abefore%7Bcontent%3A%22%5Ce221%22%7D%2Eglyphicon%2Dhourglass%3Abefore%7Bcontent%3A%22%5C231b%22%7D%2Eglyphicon%2Dlamp%3Abefore%7Bcontent%3A%22%5Ce223%22%7D%2Eglyphicon%2Dduplicate%3Abefore%7Bcontent%3A%22%5Ce224%22%7D%2Eglyphicon%2Dpiggy%2Dbank%3Abefore%7Bcontent%3A%22%5Ce225%22%7D%2Eglyphicon%2Dscissors%3Abefore%7Bcontent%3A%22%5Ce226%22%7D%2Eglyphicon%2Dbitcoin%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dbtc%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dxbt%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dyen%3Abefore%7Bcontent%3A%22%5C00a5%22%7D%2Eglyphicon%2Djpy%3Abefore%7Bcontent%3A%22%5C00a5%22%7D%2Eglyphicon%2Druble%3Abefore%7Bcontent%3A%22%5C20bd%22%7D%2Eglyphicon%2Drub%3Abefore%7Bcontent%3A%22%5C20bd%22%7D%2Eglyphicon%2Dscale%3Abefore%7Bcontent%3A%22%5Ce230%22%7D%2Eglyphicon%2Dice%2Dlolly%3Abefore%7Bcontent%3A%22%5Ce231%22%7D%2Eglyphicon%2Dice%2Dlolly%2Dtasted%3Abefore%7Bcontent%3A%22%5Ce232%22%7D%2Eglyphicon%2Deducation%3Abefore%7Bcontent%3A%22%5Ce233%22%7D%2Eglyphicon%2Doption%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce234%22%7D%2Eglyphicon%2Doption%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce235%22%7D%2Eglyphicon%2Dmenu%2Dhamburger%3Abefore%7Bcontent%3A%22%5Ce236%22%7D%2Eglyphicon%2Dmodal%2Dwindow%3Abefore%7Bcontent%3A%22%5Ce237%22%7D%2Eglyphicon%2Doil%3Abefore%7Bcontent%3A%22%5Ce238%22%7D%2Eglyphicon%2Dgrain%3Abefore%7Bcontent%3A%22%5Ce239%22%7D%2Eglyphicon%2Dsunglasses%3Abefore%7Bcontent%3A%22%5Ce240%22%7D%2Eglyphicon%2Dtext%2Dsize%3Abefore%7Bcontent%3A%22%5Ce241%22%7D%2Eglyphicon%2Dtext%2Dcolor%3Abefore%7Bcontent%3A%22%5Ce242%22%7D%2Eglyphicon%2Dtext%2Dbackground%3Abefore%7Bcontent%3A%22%5Ce243%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dtop%3Abefore%7Bcontent%3A%22%5Ce244%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dbottom%3Abefore%7Bcontent%3A%22%5Ce245%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce246%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dleft%3Abefore%7Bcontent%3A%22%5Ce247%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce248%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dright%3Abefore%7Bcontent%3A%22%5Ce249%22%7D%2Eglyphicon%2Dtriangle%2Dright%3Abefore%7Bcontent%3A%22%5Ce250%22%7D%2Eglyphicon%2Dtriangle%2Dleft%3Abefore%7Bcontent%3A%22%5Ce251%22%7D%2Eglyphicon%2Dtriangle%2Dbottom%3Abefore%7Bcontent%3A%22%5Ce252%22%7D%2Eglyphicon%2Dtriangle%2Dtop%3Abefore%7Bcontent%3A%22%5Ce253%22%7D%2Eglyphicon%2Dconsole%3Abefore%7Bcontent%3A%22%5Ce254%22%7D%2Eglyphicon%2Dsuperscript%3Abefore%7Bcontent%3A%22%5Ce255%22%7D%2Eglyphicon%2Dsubscript%3Abefore%7Bcontent%3A%22%5Ce256%22%7D%2Eglyphicon%2Dmenu%2Dleft%3Abefore%7Bcontent%3A%22%5Ce257%22%7D%2Eglyphicon%2Dmenu%2Dright%3Abefore%7Bcontent%3A%22%5Ce258%22%7D%2Eglyphicon%2Dmenu%2Ddown%3Abefore%7Bcontent%3A%22%5Ce259%22%7D%2Eglyphicon%2Dmenu%2Dup%3Abefore%7Bcontent%3A%22%5Ce260%22%7D%2A%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7D%3Aafter%2C%3Abefore%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7Dhtml%7Bfont%2Dsize%3A10px%3B%2Dwebkit%2Dtap%2Dhighlight%2Dcolor%3Argba%280%2C0%2C0%2C0%29%7Dbody%7Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23fff%7Dbutton%2Cinput%2Cselect%2Ctextarea%7Bfont%2Dfamily%3Ainherit%3Bfont%2Dsize%3Ainherit%3Bline%2Dheight%3Ainherit%7Da%7Bcolor%3A%23337ab7%3Btext%2Ddecoration%3Anone%7Da%3Afocus%2Ca%3Ahover%7Bcolor%3A%2323527c%3Btext%2Ddecoration%3Aunderline%7Da%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7Dfigure%7Bmargin%3A0%7Dimg%7Bvertical%2Dalign%3Amiddle%7D%2Ecarousel%2Dinner%3E%2Eitem%3Ea%3Eimg%2C%2Ecarousel%2Dinner%3E%2Eitem%3Eimg%2C%2Eimg%2Dresponsive%2C%2Ethumbnail%20a%3Eimg%2C%2Ethumbnail%3Eimg%7Bdisplay%3Ablock%3Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%7D%2Eimg%2Drounded%7Bborder%2Dradius%3A6px%7D%2Eimg%2Dthumbnail%7Bdisplay%3Ainline%2Dblock%3Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%3Bpadding%3A4px%3Bline%2Dheight%3A1%2E42857143%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dtransition%3Aall%20%2E2s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3Aall%20%2E2s%20ease%2Din%2Dout%3Btransition%3Aall%20%2E2s%20ease%2Din%2Dout%7D%2Eimg%2Dcircle%7Bborder%2Dradius%3A50%25%7Dhr%7Bmargin%2Dtop%3A20px%3Bmargin%2Dbottom%3A20px%3Bborder%3A0%3Bborder%2Dtop%3A1px%20solid%20%23eee%7D%2Esr%2Donly%7Bposition%3Aabsolute%3Bwidth%3A1px%3Bheight%3A1px%3Bpadding%3A0%3Bmargin%3A%2D1px%3Boverflow%3Ahidden%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bborder%3A0%7D%2Esr%2Donly%2Dfocusable%3Aactive%2C%2Esr%2Donly%2Dfocusable%3Afocus%7Bposition%3Astatic%3Bwidth%3Aauto%3Bheight%3Aauto%3Bmargin%3A0%3Boverflow%3Avisible%3Bclip%3Aauto%7D%5Brole%3Dbutton%5D%7Bcursor%3Apointer%7D%2Eh1%2C%2Eh2%2C%2Eh3%2C%2Eh4%2C%2Eh5%2C%2Eh6%2Ch1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%7Bfont%2Dfamily%3Ainherit%3Bfont%2Dweight%3A500%3Bline%2Dheight%3A1%2E1%3Bcolor%3Ainherit%7D%2Eh1%20%2Esmall%2C%2Eh1%20small%2C%2Eh2%20%2Esmall%2C%2Eh2%20small%2C%2Eh3%20%2Esmall%2C%2Eh3%20small%2C%2Eh4%20%2Esmall%2C%2Eh4%20small%2C%2Eh5%20%2Esmall%2C%2Eh5%20small%2C%2Eh6%20%2Esmall%2C%2Eh6%20small%2Ch1%20%2Esmall%2Ch1%20small%2Ch2%20%2Esmall%2Ch2%20small%2Ch3%20%2Esmall%2Ch3%20small%2Ch4%20%2Esmall%2Ch4%20small%2Ch5%20%2Esmall%2Ch5%20small%2Ch6%20%2Esmall%2Ch6%20small%7Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3Bcolor%3A%23777%7D%2Eh1%2C%2Eh2%2C%2Eh3%2Ch1%2Ch2%2Ch3%7Bmargin%2Dtop%3A20px%3Bmargin%2Dbottom%3A10px%7D%2Eh1%20%2Esmall%2C%2Eh1%20small%2C%2Eh2%20%2Esmall%2C%2Eh2%20small%2C%2Eh3%20%2Esmall%2C%2Eh3%20small%2Ch1%20%2Esmall%2Ch1%20small%2Ch2%20%2Esmall%2Ch2%20small%2Ch3%20%2Esmall%2Ch3%20small%7Bfont%2Dsize%3A65%25%7D%2Eh4%2C%2Eh5%2C%2Eh6%2Ch4%2Ch5%2Ch6%7Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Eh4%20%2Esmall%2C%2Eh4%20small%2C%2Eh5%20%2Esmall%2C%2Eh5%20small%2C%2Eh6%20%2Esmall%2C%2Eh6%20small%2Ch4%20%2Esmall%2Ch4%20small%2Ch5%20%2Esmall%2Ch5%20small%2Ch6%20%2Esmall%2Ch6%20small%7Bfont%2Dsize%3A75%25%7D%2Eh1%2Ch1%7Bfont%2Dsize%3A36px%7D%2Eh2%2Ch2%7Bfont%2Dsize%3A30px%7D%2Eh3%2Ch3%7Bfont%2Dsize%3A24px%7D%2Eh4%2Ch4%7Bfont%2Dsize%3A18px%7D%2Eh5%2Ch5%7Bfont%2Dsize%3A14px%7D%2Eh6%2Ch6%7Bfont%2Dsize%3A12px%7Dp%7Bmargin%3A0%200%2010px%7D%2Elead%7Bmargin%2Dbottom%3A20px%3Bfont%2Dsize%3A16px%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E4%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Elead%7Bfont%2Dsize%3A21px%7D%7D%2Esmall%2Csmall%7Bfont%2Dsize%3A85%25%7D%2Emark%2Cmark%7Bpadding%3A%2E2em%3Bbackground%2Dcolor%3A%23fcf8e3%7D%2Etext%2Dleft%7Btext%2Dalign%3Aleft%7D%2Etext%2Dright%7Btext%2Dalign%3Aright%7D%2Etext%2Dcenter%7Btext%2Dalign%3Acenter%7D%2Etext%2Djustify%7Btext%2Dalign%3Ajustify%7D%2Etext%2Dnowrap%7Bwhite%2Dspace%3Anowrap%7D%2Etext%2Dlowercase%7Btext%2Dtransform%3Alowercase%7D%2Etext%2Duppercase%7Btext%2Dtransform%3Auppercase%7D%2Etext%2Dcapitalize%7Btext%2Dtransform%3Acapitalize%7D%2Etext%2Dmuted%7Bcolor%3A%23777%7D%2Etext%2Dprimary%7Bcolor%3A%23337ab7%7Da%2Etext%2Dprimary%3Afocus%2Ca%2Etext%2Dprimary%3Ahover%7Bcolor%3A%23286090%7D%2Etext%2Dsuccess%7Bcolor%3A%233c763d%7Da%2Etext%2Dsuccess%3Afocus%2Ca%2Etext%2Dsuccess%3Ahover%7Bcolor%3A%232b542c%7D%2Etext%2Dinfo%7Bcolor%3A%2331708f%7Da%2Etext%2Dinfo%3Afocus%2Ca%2Etext%2Dinfo%3Ahover%7Bcolor%3A%23245269%7D%2Etext%2Dwarning%7Bcolor%3A%238a6d3b%7Da%2Etext%2Dwarning%3Afocus%2Ca%2Etext%2Dwarning%3Ahover%7Bcolor%3A%2366512c%7D%2Etext%2Ddanger%7Bcolor%3A%23a94442%7Da%2Etext%2Ddanger%3Afocus%2Ca%2Etext%2Ddanger%3Ahover%7Bcolor%3A%23843534%7D%2Ebg%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%7Da%2Ebg%2Dprimary%3Afocus%2Ca%2Ebg%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%23286090%7D%2Ebg%2Dsuccess%7Bbackground%2Dcolor%3A%23dff0d8%7Da%2Ebg%2Dsuccess%3Afocus%2Ca%2Ebg%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%23c1e2b3%7D%2Ebg%2Dinfo%7Bbackground%2Dcolor%3A%23d9edf7%7Da%2Ebg%2Dinfo%3Afocus%2Ca%2Ebg%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%23afd9ee%7D%2Ebg%2Dwarning%7Bbackground%2Dcolor%3A%23fcf8e3%7Da%2Ebg%2Dwarning%3Afocus%2Ca%2Ebg%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23f7ecb5%7D%2Ebg%2Ddanger%7Bbackground%2Dcolor%3A%23f2dede%7Da%2Ebg%2Ddanger%3Afocus%2Ca%2Ebg%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23e4b9b9%7D%2Epage%2Dheader%7Bpadding%2Dbottom%3A9px%3Bmargin%3A40px%200%2020px%3Bborder%2Dbottom%3A1px%20solid%20%23eee%7Dol%2Cul%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A10px%7Dol%20ol%2Col%20ul%2Cul%20ol%2Cul%20ul%7Bmargin%2Dbottom%3A0%7D%2Elist%2Dunstyled%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%7Bpadding%2Dleft%3A0%3Bmargin%2Dleft%3A%2D5px%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%3Eli%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dright%3A5px%3Bpadding%2Dleft%3A5px%7Ddl%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A20px%7Ddd%2Cdt%7Bline%2Dheight%3A1%2E42857143%7Ddt%7Bfont%2Dweight%3A700%7Ddd%7Bmargin%2Dleft%3A0%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Edl%2Dhorizontal%20dt%7Bfloat%3Aleft%3Bwidth%3A160px%3Boverflow%3Ahidden%3Bclear%3Aleft%3Btext%2Dalign%3Aright%3Btext%2Doverflow%3Aellipsis%3Bwhite%2Dspace%3Anowrap%7D%2Edl%2Dhorizontal%20dd%7Bmargin%2Dleft%3A180px%7D%7Dabbr%5Bdata%2Doriginal%2Dtitle%5D%2Cabbr%5Btitle%5D%7Bcursor%3Ahelp%3Bborder%2Dbottom%3A1px%20dotted%20%23777%7D%2Einitialism%7Bfont%2Dsize%3A90%25%3Btext%2Dtransform%3Auppercase%7Dblockquote%7Bpadding%3A10px%2020px%3Bmargin%3A0%200%2020px%3Bfont%2Dsize%3A17%2E5px%3Bborder%2Dleft%3A5px%20solid%20%23eee%7Dblockquote%20ol%3Alast%2Dchild%2Cblockquote%20p%3Alast%2Dchild%2Cblockquote%20ul%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7Dblockquote%20%2Esmall%2Cblockquote%20footer%2Cblockquote%20small%7Bdisplay%3Ablock%3Bfont%2Dsize%3A80%25%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23777%7Dblockquote%20%2Esmall%3Abefore%2Cblockquote%20footer%3Abefore%2Cblockquote%20small%3Abefore%7Bcontent%3A%27%5C2014%20%5C00A0%27%7D%2Eblockquote%2Dreverse%2Cblockquote%2Epull%2Dright%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A0%3Btext%2Dalign%3Aright%3Bborder%2Dright%3A5px%20solid%20%23eee%3Bborder%2Dleft%3A0%7D%2Eblockquote%2Dreverse%20%2Esmall%3Abefore%2C%2Eblockquote%2Dreverse%20footer%3Abefore%2C%2Eblockquote%2Dreverse%20small%3Abefore%2Cblockquote%2Epull%2Dright%20%2Esmall%3Abefore%2Cblockquote%2Epull%2Dright%20footer%3Abefore%2Cblockquote%2Epull%2Dright%20small%3Abefore%7Bcontent%3A%27%27%7D%2Eblockquote%2Dreverse%20%2Esmall%3Aafter%2C%2Eblockquote%2Dreverse%20footer%3Aafter%2C%2Eblockquote%2Dreverse%20small%3Aafter%2Cblockquote%2Epull%2Dright%20%2Esmall%3Aafter%2Cblockquote%2Epull%2Dright%20footer%3Aafter%2Cblockquote%2Epull%2Dright%20small%3Aafter%7Bcontent%3A%27%5C00A0%20%5C2014%27%7Daddress%7Bmargin%2Dbottom%3A20px%3Bfont%2Dstyle%3Anormal%3Bline%2Dheight%3A1%2E42857143%7Dcode%2Ckbd%2Cpre%2Csamp%7Bfont%2Dfamily%3Amonospace%7Dcode%7Bpadding%3A2px%204px%3Bfont%2Dsize%3A90%25%3Bcolor%3A%23c7254e%3Bbackground%2Dcolor%3A%23f9f2f4%3Bborder%2Dradius%3A4px%7Dkbd%7Bpadding%3A2px%204px%3Bfont%2Dsize%3A90%25%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23333%3Bborder%2Dradius%3A3px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E25%29%3Bbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E25%29%7Dkbd%20kbd%7Bpadding%3A0%3Bfont%2Dsize%3A100%25%3Bfont%2Dweight%3A700%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7Dpre%7Bdisplay%3Ablock%3Bpadding%3A9%2E5px%3Bmargin%3A0%200%2010px%3Bfont%2Dsize%3A13px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bword%2Dbreak%3Abreak%2Dall%3Bword%2Dwrap%3Abreak%2Dword%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%7Dpre%20code%7Bpadding%3A0%3Bfont%2Dsize%3Ainherit%3Bcolor%3Ainherit%3Bwhite%2Dspace%3Apre%2Dwrap%3Bbackground%2Dcolor%3Atransparent%3Bborder%2Dradius%3A0%7D%2Epre%2Dscrollable%7Bmax%2Dheight%3A340px%3Boverflow%2Dy%3Ascroll%7D%2Econtainer%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Econtainer%7Bwidth%3A750px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Econtainer%7Bwidth%3A970px%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Econtainer%7Bwidth%3A1170px%7D%7D%2Econtainer%2Dfluid%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%2Erow%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%2Ecol%2Dlg%2D1%2C%2Ecol%2Dlg%2D10%2C%2Ecol%2Dlg%2D11%2C%2Ecol%2Dlg%2D12%2C%2Ecol%2Dlg%2D2%2C%2Ecol%2Dlg%2D3%2C%2Ecol%2Dlg%2D4%2C%2Ecol%2Dlg%2D5%2C%2Ecol%2Dlg%2D6%2C%2Ecol%2Dlg%2D7%2C%2Ecol%2Dlg%2D8%2C%2Ecol%2Dlg%2D9%2C%2Ecol%2Dmd%2D1%2C%2Ecol%2Dmd%2D10%2C%2Ecol%2Dmd%2D11%2C%2Ecol%2Dmd%2D12%2C%2Ecol%2Dmd%2D2%2C%2Ecol%2Dmd%2D3%2C%2Ecol%2Dmd%2D4%2C%2Ecol%2Dmd%2D5%2C%2Ecol%2Dmd%2D6%2C%2Ecol%2Dmd%2D7%2C%2Ecol%2Dmd%2D8%2C%2Ecol%2Dmd%2D9%2C%2Ecol%2Dsm%2D1%2C%2Ecol%2Dsm%2D10%2C%2Ecol%2Dsm%2D11%2C%2Ecol%2Dsm%2D12%2C%2Ecol%2Dsm%2D2%2C%2Ecol%2Dsm%2D3%2C%2Ecol%2Dsm%2D4%2C%2Ecol%2Dsm%2D5%2C%2Ecol%2Dsm%2D6%2C%2Ecol%2Dsm%2D7%2C%2Ecol%2Dsm%2D8%2C%2Ecol%2Dsm%2D9%2C%2Ecol%2Dxs%2D1%2C%2Ecol%2Dxs%2D10%2C%2Ecol%2Dxs%2D11%2C%2Ecol%2Dxs%2D12%2C%2Ecol%2Dxs%2D2%2C%2Ecol%2Dxs%2D3%2C%2Ecol%2Dxs%2D4%2C%2Ecol%2Dxs%2D5%2C%2Ecol%2Dxs%2D6%2C%2Ecol%2Dxs%2D7%2C%2Ecol%2Dxs%2D8%2C%2Ecol%2Dxs%2D9%7Bposition%3Arelative%3Bmin%2Dheight%3A1px%3Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%7D%2Ecol%2Dxs%2D1%2C%2Ecol%2Dxs%2D10%2C%2Ecol%2Dxs%2D11%2C%2Ecol%2Dxs%2D12%2C%2Ecol%2Dxs%2D2%2C%2Ecol%2Dxs%2D3%2C%2Ecol%2Dxs%2D4%2C%2Ecol%2Dxs%2D5%2C%2Ecol%2Dxs%2D6%2C%2Ecol%2Dxs%2D7%2C%2Ecol%2Dxs%2D8%2C%2Ecol%2Dxs%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dxs%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dxs%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dxs%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dxs%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dxs%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dxs%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dxs%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dxs%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dxs%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dxs%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dxs%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dxs%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dxs%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dxs%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dxs%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dxs%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dxs%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dxs%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dxs%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dxs%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dxs%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dxs%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dxs%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dxs%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dxs%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dxs%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Ecol%2Dsm%2D1%2C%2Ecol%2Dsm%2D10%2C%2Ecol%2Dsm%2D11%2C%2Ecol%2Dsm%2D12%2C%2Ecol%2Dsm%2D2%2C%2Ecol%2Dsm%2D3%2C%2Ecol%2Dsm%2D4%2C%2Ecol%2Dsm%2D5%2C%2Ecol%2Dsm%2D6%2C%2Ecol%2Dsm%2D7%2C%2Ecol%2Dsm%2D8%2C%2Ecol%2Dsm%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dsm%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dsm%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dsm%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dsm%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dsm%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dsm%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dsm%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dsm%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dsm%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dsm%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dsm%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dsm%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dsm%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dsm%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dsm%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dsm%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dsm%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dsm%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dsm%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dsm%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dsm%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dsm%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dsm%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dsm%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dsm%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dsm%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Ecol%2Dmd%2D1%2C%2Ecol%2Dmd%2D10%2C%2Ecol%2Dmd%2D11%2C%2Ecol%2Dmd%2D12%2C%2Ecol%2Dmd%2D2%2C%2Ecol%2Dmd%2D3%2C%2Ecol%2Dmd%2D4%2C%2Ecol%2Dmd%2D5%2C%2Ecol%2Dmd%2D6%2C%2Ecol%2Dmd%2D7%2C%2Ecol%2Dmd%2D8%2C%2Ecol%2Dmd%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dmd%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dmd%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dmd%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dmd%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dmd%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dmd%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dmd%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dmd%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dmd%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dmd%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dmd%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dmd%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dmd%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dmd%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dmd%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dmd%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dmd%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dmd%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dmd%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dmd%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dmd%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dmd%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dmd%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dmd%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dmd%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dmd%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ecol%2Dlg%2D1%2C%2Ecol%2Dlg%2D10%2C%2Ecol%2Dlg%2D11%2C%2Ecol%2Dlg%2D12%2C%2Ecol%2Dlg%2D2%2C%2Ecol%2Dlg%2D3%2C%2Ecol%2Dlg%2D4%2C%2Ecol%2Dlg%2D5%2C%2Ecol%2Dlg%2D6%2C%2Ecol%2Dlg%2D7%2C%2Ecol%2Dlg%2D8%2C%2Ecol%2Dlg%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dlg%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dlg%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dlg%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dlg%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dlg%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dlg%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dlg%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dlg%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dlg%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dlg%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dlg%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dlg%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dlg%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dlg%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dlg%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dlg%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dlg%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dlg%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dlg%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dlg%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dlg%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dlg%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dlg%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dlg%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dlg%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dlg%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7Dtable%7Bbackground%2Dcolor%3Atransparent%7Dcaption%7Bpadding%2Dtop%3A8px%3Bpadding%2Dbottom%3A8px%3Bcolor%3A%23777%3Btext%2Dalign%3Aleft%7Dth%7B%7D%2Etable%7Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%3Bmargin%2Dbottom%3A20px%7D%2Etable%3Etbody%3Etr%3Etd%2C%2Etable%3Etbody%3Etr%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2C%2Etable%3Etfoot%3Etr%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2C%2Etable%3Ethead%3Etr%3Eth%7Bpadding%3A8px%3Bline%2Dheight%3A1%2E42857143%3Bvertical%2Dalign%3Atop%3Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Etable%3Ethead%3Etr%3Eth%7Bvertical%2Dalign%3Abottom%3Bborder%2Dbottom%3A2px%20solid%20%23ddd%7D%2Etable%3Ecaption%2Bthead%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ecaption%2Bthead%3Etr%3Afirst%2Dchild%3Eth%2C%2Etable%3Ecolgroup%2Bthead%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ecolgroup%2Bthead%3Etr%3Afirst%2Dchild%3Eth%2C%2Etable%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%3Eth%7Bborder%2Dtop%3A0%7D%2Etable%3Etbody%2Btbody%7Bborder%2Dtop%3A2px%20solid%20%23ddd%7D%2Etable%20%2Etable%7Bbackground%2Dcolor%3A%23fff%7D%2Etable%2Dcondensed%3Etbody%3Etr%3Etd%2C%2Etable%2Dcondensed%3Etbody%3Etr%3Eth%2C%2Etable%2Dcondensed%3Etfoot%3Etr%3Etd%2C%2Etable%2Dcondensed%3Etfoot%3Etr%3Eth%2C%2Etable%2Dcondensed%3Ethead%3Etr%3Etd%2C%2Etable%2Dcondensed%3Ethead%3Etr%3Eth%7Bpadding%3A5px%7D%2Etable%2Dbordered%7Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dbordered%3Etbody%3Etr%3Etd%2C%2Etable%2Dbordered%3Etbody%3Etr%3Eth%2C%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%2C%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%2C%2Etable%2Dbordered%3Ethead%3Etr%3Etd%2C%2Etable%2Dbordered%3Ethead%3Etr%3Eth%7Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dbordered%3Ethead%3Etr%3Etd%2C%2Etable%2Dbordered%3Ethead%3Etr%3Eth%7Bborder%2Dbottom%2Dwidth%3A2px%7D%2Etable%2Dstriped%3Etbody%3Etr%3Anth%2Dof%2Dtype%28odd%29%7Bbackground%2Dcolor%3A%23f9f9f9%7D%2Etable%2Dhover%3Etbody%3Etr%3Ahover%7Bbackground%2Dcolor%3A%23f5f5f5%7Dtable%20col%5Bclass%2A%3Dcol%2D%5D%7Bposition%3Astatic%3Bdisplay%3Atable%2Dcolumn%3Bfloat%3Anone%7Dtable%20td%5Bclass%2A%3Dcol%2D%5D%2Ctable%20th%5Bclass%2A%3Dcol%2D%5D%7Bposition%3Astatic%3Bdisplay%3Atable%2Dcell%3Bfloat%3Anone%7D%2Etable%3Etbody%3Etr%2Eactive%3Etd%2C%2Etable%3Etbody%3Etr%2Eactive%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Eactive%2C%2Etable%3Etbody%3Etr%3Eth%2Eactive%2C%2Etable%3Etfoot%3Etr%2Eactive%3Etd%2C%2Etable%3Etfoot%3Etr%2Eactive%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Eactive%2C%2Etable%3Etfoot%3Etr%3Eth%2Eactive%2C%2Etable%3Ethead%3Etr%2Eactive%3Etd%2C%2Etable%3Ethead%3Etr%2Eactive%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Eactive%2C%2Etable%3Ethead%3Etr%3Eth%2Eactive%7Bbackground%2Dcolor%3A%23f5f5f5%7D%2Etable%2Dhover%3Etbody%3Etr%2Eactive%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Eactive%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Eactive%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Eactive%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Eactive%3Ahover%7Bbackground%2Dcolor%3A%23e8e8e8%7D%2Etable%3Etbody%3Etr%2Esuccess%3Etd%2C%2Etable%3Etbody%3Etr%2Esuccess%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Esuccess%2C%2Etable%3Etbody%3Etr%3Eth%2Esuccess%2C%2Etable%3Etfoot%3Etr%2Esuccess%3Etd%2C%2Etable%3Etfoot%3Etr%2Esuccess%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Esuccess%2C%2Etable%3Etfoot%3Etr%3Eth%2Esuccess%2C%2Etable%3Ethead%3Etr%2Esuccess%3Etd%2C%2Etable%3Ethead%3Etr%2Esuccess%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Esuccess%2C%2Etable%3Ethead%3Etr%3Eth%2Esuccess%7Bbackground%2Dcolor%3A%23dff0d8%7D%2Etable%2Dhover%3Etbody%3Etr%2Esuccess%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Esuccess%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Esuccess%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Esuccess%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Esuccess%3Ahover%7Bbackground%2Dcolor%3A%23d0e9c6%7D%2Etable%3Etbody%3Etr%2Einfo%3Etd%2C%2Etable%3Etbody%3Etr%2Einfo%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Einfo%2C%2Etable%3Etbody%3Etr%3Eth%2Einfo%2C%2Etable%3Etfoot%3Etr%2Einfo%3Etd%2C%2Etable%3Etfoot%3Etr%2Einfo%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Einfo%2C%2Etable%3Etfoot%3Etr%3Eth%2Einfo%2C%2Etable%3Ethead%3Etr%2Einfo%3Etd%2C%2Etable%3Ethead%3Etr%2Einfo%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Einfo%2C%2Etable%3Ethead%3Etr%3Eth%2Einfo%7Bbackground%2Dcolor%3A%23d9edf7%7D%2Etable%2Dhover%3Etbody%3Etr%2Einfo%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Einfo%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Einfo%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Einfo%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Einfo%3Ahover%7Bbackground%2Dcolor%3A%23c4e3f3%7D%2Etable%3Etbody%3Etr%2Ewarning%3Etd%2C%2Etable%3Etbody%3Etr%2Ewarning%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Ewarning%2C%2Etable%3Etbody%3Etr%3Eth%2Ewarning%2C%2Etable%3Etfoot%3Etr%2Ewarning%3Etd%2C%2Etable%3Etfoot%3Etr%2Ewarning%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Ewarning%2C%2Etable%3Etfoot%3Etr%3Eth%2Ewarning%2C%2Etable%3Ethead%3Etr%2Ewarning%3Etd%2C%2Etable%3Ethead%3Etr%2Ewarning%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Ewarning%2C%2Etable%3Ethead%3Etr%3Eth%2Ewarning%7Bbackground%2Dcolor%3A%23fcf8e3%7D%2Etable%2Dhover%3Etbody%3Etr%2Ewarning%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Ewarning%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Ewarning%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Ewarning%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Ewarning%3Ahover%7Bbackground%2Dcolor%3A%23faf2cc%7D%2Etable%3Etbody%3Etr%2Edanger%3Etd%2C%2Etable%3Etbody%3Etr%2Edanger%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Edanger%2C%2Etable%3Etbody%3Etr%3Eth%2Edanger%2C%2Etable%3Etfoot%3Etr%2Edanger%3Etd%2C%2Etable%3Etfoot%3Etr%2Edanger%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Edanger%2C%2Etable%3Etfoot%3Etr%3Eth%2Edanger%2C%2Etable%3Ethead%3Etr%2Edanger%3Etd%2C%2Etable%3Ethead%3Etr%2Edanger%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Edanger%2C%2Etable%3Ethead%3Etr%3Eth%2Edanger%7Bbackground%2Dcolor%3A%23f2dede%7D%2Etable%2Dhover%3Etbody%3Etr%2Edanger%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Edanger%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Edanger%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Edanger%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Edanger%3Ahover%7Bbackground%2Dcolor%3A%23ebcccc%7D%2Etable%2Dresponsive%7Bmin%2Dheight%3A%2E01%25%3Boverflow%2Dx%3Aauto%7D%40media%20screen%20and%20%28max%2Dwidth%3A767px%29%7B%2Etable%2Dresponsive%7Bwidth%3A100%25%3Bmargin%2Dbottom%3A15px%3Boverflow%2Dy%3Ahidden%3B%2Dms%2Doverflow%2Dstyle%3A%2Dms%2Dautohiding%2Dscrollbar%3Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dresponsive%3E%2Etable%7Bmargin%2Dbottom%3A0%7D%2Etable%2Dresponsive%3E%2Etable%3Etbody%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Etbody%3Etr%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%3Etfoot%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Etfoot%3Etr%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%3Ethead%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Ethead%3Etr%3Eth%7Bwhite%2Dspace%3Anowrap%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%7Bborder%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%7Bborder%2Dleft%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%7Bborder%2Dright%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%7Dfieldset%7Bmin%2Dwidth%3A0%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3A0%7Dlegend%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bpadding%3A0%3Bmargin%2Dbottom%3A20px%3Bfont%2Dsize%3A21px%3Bline%2Dheight%3Ainherit%3Bcolor%3A%23333%3Bborder%3A0%3Bborder%2Dbottom%3A1px%20solid%20%23e5e5e5%7Dlabel%7Bdisplay%3Ainline%2Dblock%3Bmax%2Dwidth%3A100%25%3Bmargin%2Dbottom%3A5px%3Bfont%2Dweight%3A700%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7Dinput%5Btype%3Dcheckbox%5D%2Cinput%5Btype%3Dradio%5D%7Bmargin%3A4px%200%200%3Bmargin%2Dtop%3A1px%5C9%3Bline%2Dheight%3Anormal%7Dinput%5Btype%3Dfile%5D%7Bdisplay%3Ablock%7Dinput%5Btype%3Drange%5D%7Bdisplay%3Ablock%3Bwidth%3A100%25%7Dselect%5Bmultiple%5D%2Cselect%5Bsize%5D%7Bheight%3Aauto%7Dinput%5Btype%3Dfile%5D%3Afocus%2Cinput%5Btype%3Dcheckbox%5D%3Afocus%2Cinput%5Btype%3Dradio%5D%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7Doutput%7Bdisplay%3Ablock%3Bpadding%2Dtop%3A7px%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23555%7D%2Eform%2Dcontrol%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bheight%3A34px%3Bpadding%3A6px%2012px%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3B%2Dwebkit%2Dtransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2C%2Dwebkit%2Dbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%3B%2Do%2Dtransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2Cbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%3Btransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2Cbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%7D%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%2366afe9%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%208px%20rgba%28102%2C175%2C233%2C%2E6%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%208px%20rgba%28102%2C175%2C233%2C%2E6%29%7D%2Eform%2Dcontrol%3A%3A%2Dmoz%2Dplaceholder%7Bcolor%3A%23999%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%23999%7D%2Eform%2Dcontrol%3A%3A%2Dwebkit%2Dinput%2Dplaceholder%7Bcolor%3A%23999%7D%2Eform%2Dcontrol%5Bdisabled%5D%2C%2Eform%2Dcontrol%5Breadonly%5D%2Cfieldset%5Bdisabled%5D%20%2Eform%2Dcontrol%7Bbackground%2Dcolor%3A%23eee%3Bopacity%3A1%7D%2Eform%2Dcontrol%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Eform%2Dcontrol%7Bcursor%3Anot%2Dallowed%7Dtextarea%2Eform%2Dcontrol%7Bheight%3Aauto%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dappearance%3Anone%7D%40media%20screen%20and%20%28%2Dwebkit%2Dmin%2Ddevice%2Dpixel%2Dratio%3A0%29%7Binput%5Btype%3Ddate%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Dtime%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Dmonth%5D%2Eform%2Dcontrol%7Bline%2Dheight%3A34px%7D%2Einput%2Dgroup%2Dsm%20input%5Btype%3Ddate%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Dtime%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Ddatetime%2Dlocal%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Dmonth%5D%2Cinput%5Btype%3Ddate%5D%2Einput%2Dsm%2Cinput%5Btype%3Dtime%5D%2Einput%2Dsm%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Einput%2Dsm%2Cinput%5Btype%3Dmonth%5D%2Einput%2Dsm%7Bline%2Dheight%3A30px%7D%2Einput%2Dgroup%2Dlg%20input%5Btype%3Ddate%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Dtime%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Ddatetime%2Dlocal%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Dmonth%5D%2Cinput%5Btype%3Ddate%5D%2Einput%2Dlg%2Cinput%5Btype%3Dtime%5D%2Einput%2Dlg%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Einput%2Dlg%2Cinput%5Btype%3Dmonth%5D%2Einput%2Dlg%7Bline%2Dheight%3A46px%7D%7D%2Eform%2Dgroup%7Bmargin%2Dbottom%3A15px%7D%2Echeckbox%2C%2Eradio%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Echeckbox%20label%2C%2Eradio%20label%7Bmin%2Dheight%3A20px%3Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bcursor%3Apointer%7D%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Echeckbox%2Dinline%20input%5Btype%3Dcheckbox%5D%2C%2Eradio%20input%5Btype%3Dradio%5D%2C%2Eradio%2Dinline%20input%5Btype%3Dradio%5D%7Bposition%3Aabsolute%3Bmargin%2Dtop%3A4px%5C9%3Bmargin%2Dleft%3A%2D20px%7D%2Echeckbox%2B%2Echeckbox%2C%2Eradio%2B%2Eradio%7Bmargin%2Dtop%3A%2D5px%7D%2Echeckbox%2Dinline%2C%2Eradio%2Dinline%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bvertical%2Dalign%3Amiddle%3Bcursor%3Apointer%7D%2Echeckbox%2Dinline%2B%2Echeckbox%2Dinline%2C%2Eradio%2Dinline%2B%2Eradio%2Dinline%7Bmargin%2Dtop%3A0%3Bmargin%2Dleft%3A10px%7Dfieldset%5Bdisabled%5D%20input%5Btype%3Dcheckbox%5D%2Cfieldset%5Bdisabled%5D%20input%5Btype%3Dradio%5D%2Cinput%5Btype%3Dcheckbox%5D%2Edisabled%2Cinput%5Btype%3Dcheckbox%5D%5Bdisabled%5D%2Cinput%5Btype%3Dradio%5D%2Edisabled%2Cinput%5Btype%3Dradio%5D%5Bdisabled%5D%7Bcursor%3Anot%2Dallowed%7D%2Echeckbox%2Dinline%2Edisabled%2C%2Eradio%2Dinline%2Edisabled%2Cfieldset%5Bdisabled%5D%20%2Echeckbox%2Dinline%2Cfieldset%5Bdisabled%5D%20%2Eradio%2Dinline%7Bcursor%3Anot%2Dallowed%7D%2Echeckbox%2Edisabled%20label%2C%2Eradio%2Edisabled%20label%2Cfieldset%5Bdisabled%5D%20%2Echeckbox%20label%2Cfieldset%5Bdisabled%5D%20%2Eradio%20label%7Bcursor%3Anot%2Dallowed%7D%2Eform%2Dcontrol%2Dstatic%7Bmin%2Dheight%3A34px%3Bpadding%2Dtop%3A7px%3Bpadding%2Dbottom%3A7px%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dcontrol%2Dstatic%2Einput%2Dlg%2C%2Eform%2Dcontrol%2Dstatic%2Einput%2Dsm%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Einput%2Dsm%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7Dselect%2Einput%2Dsm%7Bheight%3A30px%3Bline%2Dheight%3A30px%7Dselect%5Bmultiple%5D%2Einput%2Dsm%2Ctextarea%2Einput%2Dsm%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Eform%2Dgroup%2Dsm%20select%2Eform%2Dcontrol%7Bheight%3A30px%3Bline%2Dheight%3A30px%7D%2Eform%2Dgroup%2Dsm%20select%5Bmultiple%5D%2Eform%2Dcontrol%2C%2Eform%2Dgroup%2Dsm%20textarea%2Eform%2Dcontrol%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%2Dstatic%7Bheight%3A30px%3Bmin%2Dheight%3A32px%3Bpadding%3A6px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%7D%2Einput%2Dlg%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7Dselect%2Einput%2Dlg%7Bheight%3A46px%3Bline%2Dheight%3A46px%7Dselect%5Bmultiple%5D%2Einput%2Dlg%2Ctextarea%2Einput%2Dlg%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7D%2Eform%2Dgroup%2Dlg%20select%2Eform%2Dcontrol%7Bheight%3A46px%3Bline%2Dheight%3A46px%7D%2Eform%2Dgroup%2Dlg%20select%5Bmultiple%5D%2Eform%2Dcontrol%2C%2Eform%2Dgroup%2Dlg%20textarea%2Eform%2Dcontrol%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%2Dstatic%7Bheight%3A46px%3Bmin%2Dheight%3A38px%3Bpadding%3A11px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%7D%2Ehas%2Dfeedback%7Bposition%3Arelative%7D%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%7Bpadding%2Dright%3A42%2E5px%7D%2Eform%2Dcontrol%2Dfeedback%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bz%2Dindex%3A2%3Bdisplay%3Ablock%3Bwidth%3A34px%3Bheight%3A34px%3Bline%2Dheight%3A34px%3Btext%2Dalign%3Acenter%3Bpointer%2Devents%3Anone%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dgroup%2Dlg%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dlg%2B%2Eform%2Dcontrol%2Dfeedback%7Bwidth%3A46px%3Bheight%3A46px%3Bline%2Dheight%3A46px%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dgroup%2Dsm%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dsm%2B%2Eform%2Dcontrol%2Dfeedback%7Bwidth%3A30px%3Bheight%3A30px%3Bline%2Dheight%3A30px%7D%2Ehas%2Dsuccess%20%2Echeckbox%2C%2Ehas%2Dsuccess%20%2Echeckbox%2Dinline%2C%2Ehas%2Dsuccess%20%2Econtrol%2Dlabel%2C%2Ehas%2Dsuccess%20%2Ehelp%2Dblock%2C%2Ehas%2Dsuccess%20%2Eradio%2C%2Ehas%2Dsuccess%20%2Eradio%2Dinline%2C%2Ehas%2Dsuccess%2Echeckbox%20label%2C%2Ehas%2Dsuccess%2Echeckbox%2Dinline%20label%2C%2Ehas%2Dsuccess%2Eradio%20label%2C%2Ehas%2Dsuccess%2Eradio%2Dinline%20label%7Bcolor%3A%233c763d%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%233c763d%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%232b542c%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%2367b168%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%2367b168%7D%2Ehas%2Dsuccess%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%233c763d%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%233c763d%7D%2Ehas%2Dwarning%20%2Echeckbox%2C%2Ehas%2Dwarning%20%2Echeckbox%2Dinline%2C%2Ehas%2Dwarning%20%2Econtrol%2Dlabel%2C%2Ehas%2Dwarning%20%2Ehelp%2Dblock%2C%2Ehas%2Dwarning%20%2Eradio%2C%2Ehas%2Dwarning%20%2Eradio%2Dinline%2C%2Ehas%2Dwarning%2Echeckbox%20label%2C%2Ehas%2Dwarning%2Echeckbox%2Dinline%20label%2C%2Ehas%2Dwarning%2Eradio%20label%2C%2Ehas%2Dwarning%2Eradio%2Dinline%20label%7Bcolor%3A%238a6d3b%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%238a6d3b%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%2366512c%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23c0a16b%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23c0a16b%7D%2Ehas%2Dwarning%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%238a6d3b%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%238a6d3b%7D%2Ehas%2Derror%20%2Echeckbox%2C%2Ehas%2Derror%20%2Echeckbox%2Dinline%2C%2Ehas%2Derror%20%2Econtrol%2Dlabel%2C%2Ehas%2Derror%20%2Ehelp%2Dblock%2C%2Ehas%2Derror%20%2Eradio%2C%2Ehas%2Derror%20%2Eradio%2Dinline%2C%2Ehas%2Derror%2Echeckbox%20label%2C%2Ehas%2Derror%2Echeckbox%2Dinline%20label%2C%2Ehas%2Derror%2Eradio%20label%2C%2Ehas%2Derror%2Eradio%2Dinline%20label%7Bcolor%3A%23a94442%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%23a94442%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%23843534%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23ce8483%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23ce8483%7D%2Ehas%2Derror%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23a94442%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%23a94442%7D%2Ehas%2Dfeedback%20label%7E%2Eform%2Dcontrol%2Dfeedback%7Btop%3A25px%7D%2Ehas%2Dfeedback%20label%2Esr%2Donly%7E%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%2Ehelp%2Dblock%7Bdisplay%3Ablock%3Bmargin%2Dtop%3A5px%3Bmargin%2Dbottom%3A10px%3Bcolor%3A%23737373%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dinline%20%2Eform%2Dgroup%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%7Bdisplay%3Ainline%2Dblock%3Bwidth%3Aauto%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%2Dstatic%7Bdisplay%3Ainline%2Dblock%7D%2Eform%2Dinline%20%2Einput%2Dgroup%7Bdisplay%3Ainline%2Dtable%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Daddon%2C%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Dbtn%7Bwidth%3Aauto%7D%2Eform%2Dinline%20%2Einput%2Dgroup%3E%2Eform%2Dcontrol%7Bwidth%3A100%25%7D%2Eform%2Dinline%20%2Econtrol%2Dlabel%7Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Echeckbox%2C%2Eform%2Dinline%20%2Eradio%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Echeckbox%20label%2C%2Eform%2Dinline%20%2Eradio%20label%7Bpadding%2Dleft%3A0%7D%2Eform%2Dinline%20%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Eform%2Dinline%20%2Eradio%20input%5Btype%3Dradio%5D%7Bposition%3Arelative%3Bmargin%2Dleft%3A0%7D%2Eform%2Dinline%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%7D%2Eform%2Dhorizontal%20%2Echeckbox%2C%2Eform%2Dhorizontal%20%2Echeckbox%2Dinline%2C%2Eform%2Dhorizontal%20%2Eradio%2C%2Eform%2Dhorizontal%20%2Eradio%2Dinline%7Bpadding%2Dtop%3A7px%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dhorizontal%20%2Echeckbox%2C%2Eform%2Dhorizontal%20%2Eradio%7Bmin%2Dheight%3A27px%7D%2Eform%2Dhorizontal%20%2Eform%2Dgroup%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A7px%3Bmargin%2Dbottom%3A0%3Btext%2Dalign%3Aright%7D%7D%2Eform%2Dhorizontal%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Bright%3A15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Eform%2Dgroup%2Dlg%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A14%2E33px%3Bfont%2Dsize%3A18px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Eform%2Dgroup%2Dsm%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A6px%3Bfont%2Dsize%3A12px%7D%7D%2Ebtn%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A6px%2012px%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A14px%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%3B%2Dms%2Dtouch%2Daction%3Amanipulation%3Btouch%2Daction%3Amanipulation%3Bcursor%3Apointer%3B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Ebtn%2Eactive%2Efocus%2C%2Ebtn%2Eactive%3Afocus%2C%2Ebtn%2Efocus%2C%2Ebtn%3Aactive%2Efocus%2C%2Ebtn%3Aactive%3Afocus%2C%2Ebtn%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7D%2Ebtn%2Efocus%2C%2Ebtn%3Afocus%2C%2Ebtn%3Ahover%7Bcolor%3A%23333%3Btext%2Ddecoration%3Anone%7D%2Ebtn%2Eactive%2C%2Ebtn%3Aactive%7Bbackground%2Dimage%3Anone%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%3Bbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ebtn%2Edisabled%2C%2Ebtn%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Ebtn%7Bcursor%3Anot%2Dallowed%3Bfilter%3Aalpha%28opacity%3D65%29%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%3Bopacity%3A%2E65%7Da%2Ebtn%2Edisabled%2Cfieldset%5Bdisabled%5D%20a%2Ebtn%7Bpointer%2Devents%3Anone%7D%2Ebtn%2Ddefault%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ccc%7D%2Ebtn%2Ddefault%2Efocus%2C%2Ebtn%2Ddefault%3Afocus%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%238c8c8c%7D%2Ebtn%2Ddefault%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%23adadad%7D%2Ebtn%2Ddefault%2Eactive%2C%2Ebtn%2Ddefault%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%23adadad%7D%2Ebtn%2Ddefault%2Eactive%2Efocus%2C%2Ebtn%2Ddefault%2Eactive%3Afocus%2C%2Ebtn%2Ddefault%2Eactive%3Ahover%2C%2Ebtn%2Ddefault%3Aactive%2Efocus%2C%2Ebtn%2Ddefault%3Aactive%3Afocus%2C%2Ebtn%2Ddefault%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23d4d4d4%3Bborder%2Dcolor%3A%238c8c8c%7D%2Ebtn%2Ddefault%2Eactive%2C%2Ebtn%2Ddefault%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Ddefault%2Edisabled%2C%2Ebtn%2Ddefault%2Edisabled%2Eactive%2C%2Ebtn%2Ddefault%2Edisabled%2Efocus%2C%2Ebtn%2Ddefault%2Edisabled%3Aactive%2C%2Ebtn%2Ddefault%2Edisabled%3Afocus%2C%2Ebtn%2Ddefault%2Edisabled%3Ahover%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Ahover%7Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ccc%7D%2Ebtn%2Ddefault%20%2Ebadge%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23333%7D%2Ebtn%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%232e6da4%7D%2Ebtn%2Dprimary%2Efocus%2C%2Ebtn%2Dprimary%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23122b40%7D%2Ebtn%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23204d74%7D%2Ebtn%2Dprimary%2Eactive%2C%2Ebtn%2Dprimary%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23204d74%7D%2Ebtn%2Dprimary%2Eactive%2Efocus%2C%2Ebtn%2Dprimary%2Eactive%3Afocus%2C%2Ebtn%2Dprimary%2Eactive%3Ahover%2C%2Ebtn%2Dprimary%3Aactive%2Efocus%2C%2Ebtn%2Dprimary%3Aactive%3Afocus%2C%2Ebtn%2Dprimary%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23204d74%3Bborder%2Dcolor%3A%23122b40%7D%2Ebtn%2Dprimary%2Eactive%2C%2Ebtn%2Dprimary%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dprimary%2Edisabled%2C%2Ebtn%2Dprimary%2Edisabled%2Eactive%2C%2Ebtn%2Dprimary%2Edisabled%2Efocus%2C%2Ebtn%2Dprimary%2Edisabled%3Aactive%2C%2Ebtn%2Dprimary%2Edisabled%3Afocus%2C%2Ebtn%2Dprimary%2Edisabled%3Ahover%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%232e6da4%7D%2Ebtn%2Dprimary%20%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%235cb85c%3Bborder%2Dcolor%3A%234cae4c%7D%2Ebtn%2Dsuccess%2Efocus%2C%2Ebtn%2Dsuccess%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23255625%7D%2Ebtn%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23398439%7D%2Ebtn%2Dsuccess%2Eactive%2C%2Ebtn%2Dsuccess%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23398439%7D%2Ebtn%2Dsuccess%2Eactive%2Efocus%2C%2Ebtn%2Dsuccess%2Eactive%3Afocus%2C%2Ebtn%2Dsuccess%2Eactive%3Ahover%2C%2Ebtn%2Dsuccess%3Aactive%2Efocus%2C%2Ebtn%2Dsuccess%3Aactive%3Afocus%2C%2Ebtn%2Dsuccess%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23398439%3Bborder%2Dcolor%3A%23255625%7D%2Ebtn%2Dsuccess%2Eactive%2C%2Ebtn%2Dsuccess%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dsuccess%2Edisabled%2C%2Ebtn%2Dsuccess%2Edisabled%2Eactive%2C%2Ebtn%2Dsuccess%2Edisabled%2Efocus%2C%2Ebtn%2Dsuccess%2Edisabled%3Aactive%2C%2Ebtn%2Dsuccess%2Edisabled%3Afocus%2C%2Ebtn%2Dsuccess%2Edisabled%3Ahover%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%235cb85c%3Bborder%2Dcolor%3A%234cae4c%7D%2Ebtn%2Dsuccess%20%2Ebadge%7Bcolor%3A%235cb85c%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%235bc0de%3Bborder%2Dcolor%3A%2346b8da%7D%2Ebtn%2Dinfo%2Efocus%2C%2Ebtn%2Dinfo%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%231b6d85%7D%2Ebtn%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%23269abc%7D%2Ebtn%2Dinfo%2Eactive%2C%2Ebtn%2Dinfo%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%23269abc%7D%2Ebtn%2Dinfo%2Eactive%2Efocus%2C%2Ebtn%2Dinfo%2Eactive%3Afocus%2C%2Ebtn%2Dinfo%2Eactive%3Ahover%2C%2Ebtn%2Dinfo%3Aactive%2Efocus%2C%2Ebtn%2Dinfo%3Aactive%3Afocus%2C%2Ebtn%2Dinfo%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23269abc%3Bborder%2Dcolor%3A%231b6d85%7D%2Ebtn%2Dinfo%2Eactive%2C%2Ebtn%2Dinfo%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dinfo%2Edisabled%2C%2Ebtn%2Dinfo%2Edisabled%2Eactive%2C%2Ebtn%2Dinfo%2Edisabled%2Efocus%2C%2Ebtn%2Dinfo%2Edisabled%3Aactive%2C%2Ebtn%2Dinfo%2Edisabled%3Afocus%2C%2Ebtn%2Dinfo%2Edisabled%3Ahover%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%235bc0de%3Bborder%2Dcolor%3A%2346b8da%7D%2Ebtn%2Dinfo%20%2Ebadge%7Bcolor%3A%235bc0de%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dwarning%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23f0ad4e%3Bborder%2Dcolor%3A%23eea236%7D%2Ebtn%2Dwarning%2Efocus%2C%2Ebtn%2Dwarning%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23985f0d%7D%2Ebtn%2Dwarning%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23d58512%7D%2Ebtn%2Dwarning%2Eactive%2C%2Ebtn%2Dwarning%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23d58512%7D%2Ebtn%2Dwarning%2Eactive%2Efocus%2C%2Ebtn%2Dwarning%2Eactive%3Afocus%2C%2Ebtn%2Dwarning%2Eactive%3Ahover%2C%2Ebtn%2Dwarning%3Aactive%2Efocus%2C%2Ebtn%2Dwarning%3Aactive%3Afocus%2C%2Ebtn%2Dwarning%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23d58512%3Bborder%2Dcolor%3A%23985f0d%7D%2Ebtn%2Dwarning%2Eactive%2C%2Ebtn%2Dwarning%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dwarning%2Edisabled%2C%2Ebtn%2Dwarning%2Edisabled%2Eactive%2C%2Ebtn%2Dwarning%2Edisabled%2Efocus%2C%2Ebtn%2Dwarning%2Edisabled%3Aactive%2C%2Ebtn%2Dwarning%2Edisabled%3Afocus%2C%2Ebtn%2Dwarning%2Edisabled%3Ahover%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23f0ad4e%3Bborder%2Dcolor%3A%23eea236%7D%2Ebtn%2Dwarning%20%2Ebadge%7Bcolor%3A%23f0ad4e%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23d9534f%3Bborder%2Dcolor%3A%23d43f3a%7D%2Ebtn%2Ddanger%2Efocus%2C%2Ebtn%2Ddanger%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23761c19%7D%2Ebtn%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23ac2925%7D%2Ebtn%2Ddanger%2Eactive%2C%2Ebtn%2Ddanger%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23ac2925%7D%2Ebtn%2Ddanger%2Eactive%2Efocus%2C%2Ebtn%2Ddanger%2Eactive%3Afocus%2C%2Ebtn%2Ddanger%2Eactive%3Ahover%2C%2Ebtn%2Ddanger%3Aactive%2Efocus%2C%2Ebtn%2Ddanger%3Aactive%3Afocus%2C%2Ebtn%2Ddanger%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ac2925%3Bborder%2Dcolor%3A%23761c19%7D%2Ebtn%2Ddanger%2Eactive%2C%2Ebtn%2Ddanger%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Ddanger%2Edisabled%2C%2Ebtn%2Ddanger%2Edisabled%2Eactive%2C%2Ebtn%2Ddanger%2Edisabled%2Efocus%2C%2Ebtn%2Ddanger%2Edisabled%3Aactive%2C%2Ebtn%2Ddanger%2Edisabled%3Afocus%2C%2Ebtn%2Ddanger%2Edisabled%3Ahover%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23d9534f%3Bborder%2Dcolor%3A%23d43f3a%7D%2Ebtn%2Ddanger%20%2Ebadge%7Bcolor%3A%23d9534f%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dlink%7Bfont%2Dweight%3A400%3Bcolor%3A%23337ab7%3Bborder%2Dradius%3A0%7D%2Ebtn%2Dlink%2C%2Ebtn%2Dlink%2Eactive%2C%2Ebtn%2Dlink%3Aactive%2C%2Ebtn%2Dlink%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%7Bbackground%2Dcolor%3Atransparent%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Ebtn%2Dlink%2C%2Ebtn%2Dlink%3Aactive%2C%2Ebtn%2Dlink%3Afocus%2C%2Ebtn%2Dlink%3Ahover%7Bborder%2Dcolor%3Atransparent%7D%2Ebtn%2Dlink%3Afocus%2C%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%2323527c%3Btext%2Ddecoration%3Aunderline%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23777%3Btext%2Ddecoration%3Anone%7D%2Ebtn%2Dgroup%2Dlg%3E%2Ebtn%2C%2Ebtn%2Dlg%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7D%2Ebtn%2Dgroup%2Dsm%3E%2Ebtn%2C%2Ebtn%2Dsm%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Ebtn%2Dgroup%2Dxs%3E%2Ebtn%2C%2Ebtn%2Dxs%7Bpadding%3A1px%205px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Ebtn%2Dblock%7Bdisplay%3Ablock%3Bwidth%3A100%25%7D%2Ebtn%2Dblock%2B%2Ebtn%2Dblock%7Bmargin%2Dtop%3A5px%7Dinput%5Btype%3Dbutton%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dreset%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dsubmit%5D%2Ebtn%2Dblock%7Bwidth%3A100%25%7D%2Efade%7Bopacity%3A0%3B%2Dwebkit%2Dtransition%3Aopacity%20%2E15s%20linear%3B%2Do%2Dtransition%3Aopacity%20%2E15s%20linear%3Btransition%3Aopacity%20%2E15s%20linear%7D%2Efade%2Ein%7Bopacity%3A1%7D%2Ecollapse%7Bdisplay%3Anone%7D%2Ecollapse%2Ein%7Bdisplay%3Ablock%7Dtr%2Ecollapse%2Ein%7Bdisplay%3Atable%2Drow%7Dtbody%2Ecollapse%2Ein%7Bdisplay%3Atable%2Drow%2Dgroup%7D%2Ecollapsing%7Bposition%3Arelative%3Bheight%3A0%3Boverflow%3Ahidden%3B%2Dwebkit%2Dtransition%2Dtiming%2Dfunction%3Aease%3B%2Do%2Dtransition%2Dtiming%2Dfunction%3Aease%3Btransition%2Dtiming%2Dfunction%3Aease%3B%2Dwebkit%2Dtransition%2Dduration%3A%2E35s%3B%2Do%2Dtransition%2Dduration%3A%2E35s%3Btransition%2Dduration%3A%2E35s%3B%2Dwebkit%2Dtransition%2Dproperty%3Aheight%2Cvisibility%3B%2Do%2Dtransition%2Dproperty%3Aheight%2Cvisibility%3Btransition%2Dproperty%3Aheight%2Cvisibility%7D%2Ecaret%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A0%3Bheight%3A0%3Bmargin%2Dleft%3A2px%3Bvertical%2Dalign%3Amiddle%3Bborder%2Dtop%3A4px%20dashed%3Bborder%2Dtop%3A4px%20solid%5C9%3Bborder%2Dright%3A4px%20solid%20transparent%3Bborder%2Dleft%3A4px%20solid%20transparent%7D%2Edropdown%2C%2Edropup%7Bposition%3Arelative%7D%2Edropdown%2Dtoggle%3Afocus%7Boutline%3A0%7D%2Edropdown%2Dmenu%7Bposition%3Aabsolute%3Btop%3A100%25%3Bleft%3A0%3Bz%2Dindex%3A1000%3Bdisplay%3Anone%3Bfloat%3Aleft%3Bmin%2Dwidth%3A160px%3Bpadding%3A5px%200%3Bmargin%3A2px%200%200%3Bfont%2Dsize%3A14px%3Btext%2Dalign%3Aleft%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23ccc%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E15%29%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%206px%2012px%20rgba%280%2C0%2C0%2C%2E175%29%3Bbox%2Dshadow%3A0%206px%2012px%20rgba%280%2C0%2C0%2C%2E175%29%7D%2Edropdown%2Dmenu%2Epull%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Edropdown%2Dmenu%20%2Edivider%7Bheight%3A1px%3Bmargin%3A9px%200%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23e5e5e5%7D%2Edropdown%2Dmenu%3Eli%3Ea%7Bdisplay%3Ablock%3Bpadding%3A3px%2020px%3Bclear%3Aboth%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bwhite%2Dspace%3Anowrap%7D%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23262626%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%7D%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23337ab7%3Boutline%3A0%7D%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23777%7D%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28enabled%3Dfalse%29%7D%2Eopen%3E%2Edropdown%2Dmenu%7Bdisplay%3Ablock%7D%2Eopen%3Ea%7Boutline%3A0%7D%2Edropdown%2Dmenu%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Edropdown%2Dmenu%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%2Edropdown%2Dheader%7Bdisplay%3Ablock%3Bpadding%3A3px%2020px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23777%3Bwhite%2Dspace%3Anowrap%7D%2Edropdown%2Dbackdrop%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A990%7D%2Epull%2Dright%3E%2Edropdown%2Dmenu%7Bright%3A0%3Bleft%3Aauto%7D%2Edropup%20%2Ecaret%2C%2Enavbar%2Dfixed%2Dbottom%20%2Edropdown%20%2Ecaret%7Bcontent%3A%22%22%3Bborder%2Dtop%3A0%3Bborder%2Dbottom%3A4px%20dashed%3Bborder%2Dbottom%3A4px%20solid%5C9%7D%2Edropup%20%2Edropdown%2Dmenu%2C%2Enavbar%2Dfixed%2Dbottom%20%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bbottom%3A100%25%3Bmargin%2Dbottom%3A2px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dright%20%2Edropdown%2Dmenu%7Bright%3A0%3Bleft%3Aauto%7D%2Enavbar%2Dright%20%2Edropdown%2Dmenu%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%7D%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2C%2Ebtn%2Dgroup%3E%2Ebtn%7Bposition%3Arelative%3Bfloat%3Aleft%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Afocus%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Ahover%2C%2Ebtn%2Dgroup%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Afocus%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Ahover%7Bz%2Dindex%3A2%7D%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%2C%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%20%2Ebtn%2Dgroup%2B%2Ebtn%2C%2Ebtn%2Dgroup%20%2Ebtn%2Dgroup%2B%2Ebtn%2Dgroup%7Bmargin%2Dleft%3A%2D1px%7D%2Ebtn%2Dtoolbar%7Bmargin%2Dleft%3A%2D5px%7D%2Ebtn%2Dtoolbar%20%2Ebtn%2C%2Ebtn%2Dtoolbar%20%2Ebtn%2Dgroup%2C%2Ebtn%2Dtoolbar%20%2Einput%2Dgroup%7Bfloat%3Aleft%7D%2Ebtn%2Dtoolbar%3E%2Ebtn%2C%2Ebtn%2Dtoolbar%3E%2Ebtn%2Dgroup%2C%2Ebtn%2Dtoolbar%3E%2Einput%2Dgroup%7Bmargin%2Dleft%3A5px%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Afirst%2Dchild%7Bmargin%2Dleft%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%2C%2Ebtn%2Dgroup%3E%2Edropdown%2Dtoggle%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%7Bfloat%3Aleft%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%3Alast%2Dchild%2C%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Edropdown%2Dtoggle%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%20%2Edropdown%2Dtoggle%3Aactive%2C%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%7Boutline%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2B%2Edropdown%2Dtoggle%7Bpadding%2Dright%3A8px%3Bpadding%2Dleft%3A8px%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dlg%2B%2Edropdown%2Dtoggle%7Bpadding%2Dright%3A12px%3Bpadding%2Dleft%3A12px%7D%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%7B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%3Bbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%2Ebtn%2Dlink%7B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Ebtn%20%2Ecaret%7Bmargin%2Dleft%3A0%7D%2Ebtn%2Dlg%20%2Ecaret%7Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Edropup%20%2Ebtn%2Dlg%20%2Ecaret%7Bborder%2Dwidth%3A0%205px%205px%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3E%2Ebtn%7Bdisplay%3Ablock%3Bfloat%3Anone%3Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3E%2Ebtn%7Bfloat%3Anone%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2B%2Ebtn%2Dgroup%7Bmargin%2Dtop%3A%2D1px%3Bmargin%2Dleft%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%3Alast%2Dchild%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Edropdown%2Dtoggle%7Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Djustified%7Bdisplay%3Atable%3Bwidth%3A100%25%3Btable%2Dlayout%3Afixed%3Bborder%2Dcollapse%3Aseparate%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%7Bdisplay%3Atable%2Dcell%3Bfloat%3Anone%3Bwidth%3A1%25%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%20%2Ebtn%7Bwidth%3A100%25%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%20%2Edropdown%2Dmenu%7Bleft%3Aauto%7D%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%20input%5Btype%3Dradio%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dradio%5D%7Bposition%3Aabsolute%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bpointer%2Devents%3Anone%7D%2Einput%2Dgroup%7Bposition%3Arelative%3Bdisplay%3Atable%3Bborder%2Dcollapse%3Aseparate%7D%2Einput%2Dgroup%5Bclass%2A%3Dcol%2D%5D%7Bfloat%3Anone%3Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%7Bposition%3Arelative%3Bz%2Dindex%3A2%3Bfloat%3Aleft%3Bwidth%3A100%25%3Bmargin%2Dbottom%3A0%7D%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7Dselect%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Cselect%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Cselect%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A46px%3Bline%2Dheight%3A46px%7Dselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3Aauto%7D%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7Dselect%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Cselect%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Cselect%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A30px%3Bline%2Dheight%3A30px%7Dselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3Aauto%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dbtn%7Bdisplay%3Atable%2Dcell%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%2Daddon%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%2Dbtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dbtn%7Bwidth%3A1%25%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%7D%2Einput%2Dgroup%2Daddon%7Bpadding%3A6px%2012px%3Bfont%2Dsize%3A14px%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3Bcolor%3A%23555%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23eee%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%7D%2Einput%2Dgroup%2Daddon%2Einput%2Dsm%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bborder%2Dradius%3A3px%7D%2Einput%2Dgroup%2Daddon%2Einput%2Dlg%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bborder%2Dradius%3A6px%7D%2Einput%2Dgroup%2Daddon%20input%5Btype%3Dcheckbox%5D%2C%2Einput%2Dgroup%2Daddon%20input%5Btype%3Dradio%5D%7Bmargin%2Dtop%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Afirst%2Dchild%2C%2Einput%2Dgroup%2Daddon%3Afirst%2Dchild%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Edropdown%2Dtoggle%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%3Afirst%2Dchild%7Bborder%2Dright%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Alast%2Dchild%2C%2Einput%2Dgroup%2Daddon%3Alast%2Dchild%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Edropdown%2Dtoggle%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%3Alast%2Dchild%7Bborder%2Dleft%3A0%7D%2Einput%2Dgroup%2Dbtn%7Bposition%3Arelative%3Bfont%2Dsize%3A0%3Bwhite%2Dspace%3Anowrap%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bposition%3Arelative%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2B%2Ebtn%7Bmargin%2Dleft%3A%2D1px%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Aactive%2C%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Afocus%2C%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Ahover%7Bz%2Dindex%3A2%7D%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%7Bmargin%2Dright%3A%2D1px%7D%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%7Bz%2Dindex%3A2%3Bmargin%2Dleft%3A%2D1px%7D%2Enav%7Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A0%3Blist%2Dstyle%3Anone%7D%2Enav%3Eli%7Bposition%3Arelative%3Bdisplay%3Ablock%7D%2Enav%3Eli%3Ea%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A10px%2015px%7D%2Enav%3Eli%3Ea%3Afocus%2C%2Enav%3Eli%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23eee%7D%2Enav%3Eli%2Edisabled%3Ea%7Bcolor%3A%23777%7D%2Enav%3Eli%2Edisabled%3Ea%3Afocus%2C%2Enav%3Eli%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23777%3Btext%2Ddecoration%3Anone%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3Atransparent%7D%2Enav%20%2Eopen%3Ea%2C%2Enav%20%2Eopen%3Ea%3Afocus%2C%2Enav%20%2Eopen%3Ea%3Ahover%7Bbackground%2Dcolor%3A%23eee%3Bborder%2Dcolor%3A%23337ab7%7D%2Enav%20%2Enav%2Ddivider%7Bheight%3A1px%3Bmargin%3A9px%200%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23e5e5e5%7D%2Enav%3Eli%3Ea%3Eimg%7Bmax%2Dwidth%3Anone%7D%2Enav%2Dtabs%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%7D%2Enav%2Dtabs%3Eli%7Bfloat%3Aleft%3Bmargin%2Dbottom%3A%2D1px%7D%2Enav%2Dtabs%3Eli%3Ea%7Bmargin%2Dright%3A2px%3Bline%2Dheight%3A1%2E42857143%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%3Eli%3Ea%3Ahover%7Bborder%2Dcolor%3A%23eee%20%23eee%20%23ddd%7D%2Enav%2Dtabs%3Eli%2Eactive%3Ea%2C%2Enav%2Dtabs%3Eli%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%3Eli%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bcursor%3Adefault%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dbottom%2Dcolor%3Atransparent%7D%2Enav%2Dtabs%2Enav%2Djustified%7Bwidth%3A100%25%3Bborder%2Dbottom%3A0%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%7Bfloat%3Anone%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A5px%3Btext%2Dalign%3Acenter%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Enav%2Djustified%3Eli%7Bdisplay%3Atable%2Dcell%3Bwidth%3A1%25%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A0%7D%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dright%3A0%3Bborder%2Dradius%3A4px%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%3A1px%20solid%20%23ddd%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%2Dbottom%2Dcolor%3A%23fff%7D%7D%2Enav%2Dpills%3Eli%7Bfloat%3Aleft%7D%2Enav%2Dpills%3Eli%3Ea%7Bborder%2Dradius%3A4px%7D%2Enav%2Dpills%3Eli%2Bli%7Bmargin%2Dleft%3A2px%7D%2Enav%2Dpills%3Eli%2Eactive%3Ea%2C%2Enav%2Dpills%3Eli%2Eactive%3Ea%3Afocus%2C%2Enav%2Dpills%3Eli%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%7D%2Enav%2Dstacked%3Eli%7Bfloat%3Anone%7D%2Enav%2Dstacked%3Eli%2Bli%7Bmargin%2Dtop%3A2px%3Bmargin%2Dleft%3A0%7D%2Enav%2Djustified%7Bwidth%3A100%25%7D%2Enav%2Djustified%3Eli%7Bfloat%3Anone%7D%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A5px%3Btext%2Dalign%3Acenter%7D%2Enav%2Djustified%3E%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Djustified%3Eli%7Bdisplay%3Atable%2Dcell%3Bwidth%3A1%25%7D%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A0%7D%7D%2Enav%2Dtabs%2Djustified%7Bborder%2Dbottom%3A0%7D%2Enav%2Dtabs%2Djustified%3Eli%3Ea%7Bmargin%2Dright%3A0%3Bborder%2Dradius%3A4px%7D%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%3A1px%20solid%20%23ddd%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Djustified%3Eli%3Ea%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%2Dbottom%2Dcolor%3A%23fff%7D%7D%2Etab%2Dcontent%3E%2Etab%2Dpane%7Bdisplay%3Anone%7D%2Etab%2Dcontent%3E%2Eactive%7Bdisplay%3Ablock%7D%2Enav%2Dtabs%20%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A%2D1px%3Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Enavbar%7Bposition%3Arelative%3Bmin%2Dheight%3A50px%3Bmargin%2Dbottom%3A20px%3Bborder%3A1px%20solid%20transparent%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%7Bborder%2Dradius%3A4px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dheader%7Bfloat%3Aleft%7D%7D%2Enavbar%2Dcollapse%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Boverflow%2Dx%3Avisible%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3Bborder%2Dtop%3A1px%20solid%20transparent%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%7D%2Enavbar%2Dcollapse%2Ein%7Boverflow%2Dy%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dcollapse%7Bwidth%3Aauto%3Bborder%2Dtop%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Enavbar%2Dcollapse%2Ecollapse%7Bdisplay%3Ablock%21important%3Bheight%3Aauto%21important%3Bpadding%2Dbottom%3A0%3Boverflow%3Avisible%21important%7D%2Enavbar%2Dcollapse%2Ein%7Boverflow%2Dy%3Avisible%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dstatic%2Dtop%20%2Enavbar%2Dcollapse%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%7Bmax%2Dheight%3A340px%7D%40media%20%28max%2Ddevice%2Dwidth%3A480px%29%20and%20%28orientation%3Alandscape%29%7B%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%7Bmax%2Dheight%3A200px%7D%7D%2Econtainer%2Dfluid%3E%2Enavbar%2Dcollapse%2C%2Econtainer%2Dfluid%3E%2Enavbar%2Dheader%2C%2Econtainer%3E%2Enavbar%2Dcollapse%2C%2Econtainer%3E%2Enavbar%2Dheader%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Econtainer%2Dfluid%3E%2Enavbar%2Dcollapse%2C%2Econtainer%2Dfluid%3E%2Enavbar%2Dheader%2C%2Econtainer%3E%2Enavbar%2Dcollapse%2C%2Econtainer%3E%2Enavbar%2Dheader%7Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%7D%7D%2Enavbar%2Dstatic%2Dtop%7Bz%2Dindex%3A1000%3Bborder%2Dwidth%3A0%200%201px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dstatic%2Dtop%7Bborder%2Dradius%3A0%7D%7D%2Enavbar%2Dfixed%2Dbottom%2C%2Enavbar%2Dfixed%2Dtop%7Bposition%3Afixed%3Bright%3A0%3Bleft%3A0%3Bz%2Dindex%3A1030%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dfixed%2Dbottom%2C%2Enavbar%2Dfixed%2Dtop%7Bborder%2Dradius%3A0%7D%7D%2Enavbar%2Dfixed%2Dtop%7Btop%3A0%3Bborder%2Dwidth%3A0%200%201px%7D%2Enavbar%2Dfixed%2Dbottom%7Bbottom%3A0%3Bmargin%2Dbottom%3A0%3Bborder%2Dwidth%3A1px%200%200%7D%2Enavbar%2Dbrand%7Bfloat%3Aleft%3Bheight%3A50px%3Bpadding%3A15px%2015px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A20px%7D%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dbrand%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Enavbar%2Dbrand%3Eimg%7Bdisplay%3Ablock%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%3E%2Econtainer%20%2Enavbar%2Dbrand%2C%2Enavbar%3E%2Econtainer%2Dfluid%20%2Enavbar%2Dbrand%7Bmargin%2Dleft%3A%2D15px%7D%7D%2Enavbar%2Dtoggle%7Bposition%3Arelative%3Bfloat%3Aright%3Bpadding%3A9px%2010px%3Bmargin%2Dtop%3A8px%3Bmargin%2Dright%3A15px%3Bmargin%2Dbottom%3A8px%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Enavbar%2Dtoggle%3Afocus%7Boutline%3A0%7D%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bdisplay%3Ablock%3Bwidth%3A22px%3Bheight%3A2px%3Bborder%2Dradius%3A1px%7D%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%2B%2Eicon%2Dbar%7Bmargin%2Dtop%3A4px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dtoggle%7Bdisplay%3Anone%7D%7D%2Enavbar%2Dnav%7Bmargin%3A7%2E5px%20%2D15px%7D%2Enavbar%2Dnav%3Eli%3Ea%7Bpadding%2Dtop%3A10px%3Bpadding%2Dbottom%3A10px%3Bline%2Dheight%3A20px%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%7Bposition%3Astatic%3Bfloat%3Anone%3Bwidth%3Aauto%3Bmargin%2Dtop%3A0%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%20%2Edropdown%2Dheader%2C%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bpadding%3A5px%2015px%205px%2025px%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bline%2Dheight%3A20px%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bbackground%2Dimage%3Anone%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dnav%7Bfloat%3Aleft%3Bmargin%3A0%7D%2Enavbar%2Dnav%3Eli%7Bfloat%3Aleft%7D%2Enavbar%2Dnav%3Eli%3Ea%7Bpadding%2Dtop%3A15px%3Bpadding%2Dbottom%3A15px%7D%7D%2Enavbar%2Dform%7Bpadding%3A10px%2015px%3Bmargin%2Dtop%3A8px%3Bmargin%2Dright%3A%2D15px%3Bmargin%2Dbottom%3A8px%3Bmargin%2Dleft%3A%2D15px%3Bborder%2Dtop%3A1px%20solid%20transparent%3Bborder%2Dbottom%3A1px%20solid%20transparent%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%2C0%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%2C0%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dform%20%2Eform%2Dgroup%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Eform%2Dcontrol%7Bdisplay%3Ainline%2Dblock%3Bwidth%3Aauto%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Eform%2Dcontrol%2Dstatic%7Bdisplay%3Ainline%2Dblock%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%7Bdisplay%3Ainline%2Dtable%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Daddon%2C%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Dbtn%7Bwidth%3Aauto%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%3E%2Eform%2Dcontrol%7Bwidth%3A100%25%7D%2Enavbar%2Dform%20%2Econtrol%2Dlabel%7Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Echeckbox%2C%2Enavbar%2Dform%20%2Eradio%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Echeckbox%20label%2C%2Enavbar%2Dform%20%2Eradio%20label%7Bpadding%2Dleft%3A0%7D%2Enavbar%2Dform%20%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Enavbar%2Dform%20%2Eradio%20input%5Btype%3Dradio%5D%7Bposition%3Arelative%3Bmargin%2Dleft%3A0%7D%2Enavbar%2Dform%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dform%20%2Eform%2Dgroup%7Bmargin%2Dbottom%3A5px%7D%2Enavbar%2Dform%20%2Eform%2Dgroup%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dform%7Bwidth%3Aauto%3Bpadding%2Dtop%3A0%3Bpadding%2Dbottom%3A0%3Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%3Bborder%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%7D%2Enavbar%2Dnav%3Eli%3E%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dnav%3Eli%3E%2Edropdown%2Dmenu%7Bmargin%2Dbottom%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Enavbar%2Dbtn%7Bmargin%2Dtop%3A8px%3Bmargin%2Dbottom%3A8px%7D%2Enavbar%2Dbtn%2Ebtn%2Dsm%7Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Enavbar%2Dbtn%2Ebtn%2Dxs%7Bmargin%2Dtop%3A14px%3Bmargin%2Dbottom%3A14px%7D%2Enavbar%2Dtext%7Bmargin%2Dtop%3A15px%3Bmargin%2Dbottom%3A15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dtext%7Bfloat%3Aleft%3Bmargin%2Dright%3A15px%3Bmargin%2Dleft%3A15px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dleft%7Bfloat%3Aleft%21important%7D%2Enavbar%2Dright%7Bfloat%3Aright%21important%3Bmargin%2Dright%3A%2D15px%7D%2Enavbar%2Dright%7E%2Enavbar%2Dright%7Bmargin%2Dright%3A0%7D%7D%2Enavbar%2Ddefault%7Bbackground%2Dcolor%3A%23f8f8f8%3Bborder%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3A%235e5e5e%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtext%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23ccc%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%7Bborder%2Dcolor%3A%23ddd%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%3Ahover%7Bbackground%2Dcolor%3A%23ddd%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bbackground%2Dcolor%3A%23888%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dform%7Bborder%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23ccc%3Bbackground%2Dcolor%3Atransparent%7D%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dlink%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dlink%3Ahover%7Bcolor%3A%23333%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Afocus%2C%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23333%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23ccc%7D%2Enavbar%2Dinverse%7Bbackground%2Dcolor%3A%23222%3Bborder%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtext%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23444%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%7Bborder%2Dcolor%3A%23333%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%3Ahover%7Bbackground%2Dcolor%3A%23333%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bbackground%2Dcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dform%7Bborder%2Dcolor%3A%23101010%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edropdown%2Dheader%7Bborder%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%20%2Edivider%7Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23444%3Bbackground%2Dcolor%3Atransparent%7D%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dlink%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dlink%3Ahover%7Bcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Afocus%2C%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23444%7D%2Ebreadcrumb%7Bpadding%3A8px%2015px%3Bmargin%2Dbottom%3A20px%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dradius%3A4px%7D%2Ebreadcrumb%3Eli%7Bdisplay%3Ainline%2Dblock%7D%2Ebreadcrumb%3Eli%2Bli%3Abefore%7Bpadding%3A0%205px%3Bcolor%3A%23ccc%3Bcontent%3A%22%2F%5C00a0%22%7D%2Ebreadcrumb%3E%2Eactive%7Bcolor%3A%23777%7D%2Epagination%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dleft%3A0%3Bmargin%3A20px%200%3Bborder%2Dradius%3A4px%7D%2Epagination%3Eli%7Bdisplay%3Ainline%7D%2Epagination%3Eli%3Ea%2C%2Epagination%3Eli%3Espan%7Bposition%3Arelative%3Bfloat%3Aleft%3Bpadding%3A6px%2012px%3Bmargin%2Dleft%3A%2D1px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23337ab7%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%7D%2Epagination%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%3Eli%3Afirst%2Dchild%3Espan%7Bmargin%2Dleft%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7D%2Epagination%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A4px%7D%2Epagination%3Eli%3Ea%3Afocus%2C%2Epagination%3Eli%3Ea%3Ahover%2C%2Epagination%3Eli%3Espan%3Afocus%2C%2Epagination%3Eli%3Espan%3Ahover%7Bz%2Dindex%3A3%3Bcolor%3A%2323527c%3Bbackground%2Dcolor%3A%23eee%3Bborder%2Dcolor%3A%23ddd%7D%2Epagination%3E%2Eactive%3Ea%2C%2Epagination%3E%2Eactive%3Ea%3Afocus%2C%2Epagination%3E%2Eactive%3Ea%3Ahover%2C%2Epagination%3E%2Eactive%3Espan%2C%2Epagination%3E%2Eactive%3Espan%3Afocus%2C%2Epagination%3E%2Eactive%3Espan%3Ahover%7Bz%2Dindex%3A2%3Bcolor%3A%23fff%3Bcursor%3Adefault%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Epagination%3E%2Edisabled%3Ea%2C%2Epagination%3E%2Edisabled%3Ea%3Afocus%2C%2Epagination%3E%2Edisabled%3Ea%3Ahover%2C%2Epagination%3E%2Edisabled%3Espan%2C%2Epagination%3E%2Edisabled%3Espan%3Afocus%2C%2Epagination%3E%2Edisabled%3Espan%3Ahover%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ddd%7D%2Epagination%2Dlg%3Eli%3Ea%2C%2Epagination%2Dlg%3Eli%3Espan%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%7D%2Epagination%2Dlg%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%2Dlg%3Eli%3Afirst%2Dchild%3Espan%7Bborder%2Dtop%2Dleft%2Dradius%3A6px%3Bborder%2Dbottom%2Dleft%2Dradius%3A6px%7D%2Epagination%2Dlg%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%2Dlg%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A6px%3Bborder%2Dbottom%2Dright%2Dradius%3A6px%7D%2Epagination%2Dsm%3Eli%3Ea%2C%2Epagination%2Dsm%3Eli%3Espan%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%7D%2Epagination%2Dsm%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%2Dsm%3Eli%3Afirst%2Dchild%3Espan%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epagination%2Dsm%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%2Dsm%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%7D%2Epager%7Bpadding%2Dleft%3A0%3Bmargin%3A20px%200%3Btext%2Dalign%3Acenter%3Blist%2Dstyle%3Anone%7D%2Epager%20li%7Bdisplay%3Ainline%7D%2Epager%20li%3Ea%2C%2Epager%20li%3Espan%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A5px%2014px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A15px%7D%2Epager%20li%3Ea%3Afocus%2C%2Epager%20li%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23eee%7D%2Epager%20%2Enext%3Ea%2C%2Epager%20%2Enext%3Espan%7Bfloat%3Aright%7D%2Epager%20%2Eprevious%3Ea%2C%2Epager%20%2Eprevious%3Espan%7Bfloat%3Aleft%7D%2Epager%20%2Edisabled%3Ea%2C%2Epager%20%2Edisabled%3Ea%3Afocus%2C%2Epager%20%2Edisabled%3Ea%3Ahover%2C%2Epager%20%2Edisabled%3Espan%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23fff%7D%2Elabel%7Bdisplay%3Ainline%3Bpadding%3A%2E2em%20%2E6em%20%2E3em%3Bfont%2Dsize%3A75%25%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Abaseline%3Bborder%2Dradius%3A%2E25em%7Da%2Elabel%3Afocus%2Ca%2Elabel%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%7D%2Elabel%3Aempty%7Bdisplay%3Anone%7D%2Ebtn%20%2Elabel%7Bposition%3Arelative%3Btop%3A%2D1px%7D%2Elabel%2Ddefault%7Bbackground%2Dcolor%3A%23777%7D%2Elabel%2Ddefault%5Bhref%5D%3Afocus%2C%2Elabel%2Ddefault%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%235e5e5e%7D%2Elabel%2Dprimary%7Bbackground%2Dcolor%3A%23337ab7%7D%2Elabel%2Dprimary%5Bhref%5D%3Afocus%2C%2Elabel%2Dprimary%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23286090%7D%2Elabel%2Dsuccess%7Bbackground%2Dcolor%3A%235cb85c%7D%2Elabel%2Dsuccess%5Bhref%5D%3Afocus%2C%2Elabel%2Dsuccess%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23449d44%7D%2Elabel%2Dinfo%7Bbackground%2Dcolor%3A%235bc0de%7D%2Elabel%2Dinfo%5Bhref%5D%3Afocus%2C%2Elabel%2Dinfo%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%2331b0d5%7D%2Elabel%2Dwarning%7Bbackground%2Dcolor%3A%23f0ad4e%7D%2Elabel%2Dwarning%5Bhref%5D%3Afocus%2C%2Elabel%2Dwarning%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23ec971f%7D%2Elabel%2Ddanger%7Bbackground%2Dcolor%3A%23d9534f%7D%2Elabel%2Ddanger%5Bhref%5D%3Afocus%2C%2Elabel%2Ddanger%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23c9302c%7D%2Ebadge%7Bdisplay%3Ainline%2Dblock%3Bmin%2Dwidth%3A10px%3Bpadding%3A3px%207px%3Bfont%2Dsize%3A12px%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%3Bbackground%2Dcolor%3A%23777%3Bborder%2Dradius%3A10px%7D%2Ebadge%3Aempty%7Bdisplay%3Anone%7D%2Ebtn%20%2Ebadge%7Bposition%3Arelative%3Btop%3A%2D1px%7D%2Ebtn%2Dgroup%2Dxs%3E%2Ebtn%20%2Ebadge%2C%2Ebtn%2Dxs%20%2Ebadge%7Btop%3A0%3Bpadding%3A1px%205px%7Da%2Ebadge%3Afocus%2Ca%2Ebadge%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%7D%2Elist%2Dgroup%2Ditem%2Eactive%3E%2Ebadge%2C%2Enav%2Dpills%3E%2Eactive%3Ea%3E%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Elist%2Dgroup%2Ditem%3E%2Ebadge%7Bfloat%3Aright%7D%2Elist%2Dgroup%2Ditem%3E%2Ebadge%2B%2Ebadge%7Bmargin%2Dright%3A5px%7D%2Enav%2Dpills%3Eli%3Ea%3E%2Ebadge%7Bmargin%2Dleft%3A3px%7D%2Ejumbotron%7Bpadding%2Dtop%3A30px%3Bpadding%2Dbottom%3A30px%3Bmargin%2Dbottom%3A30px%3Bcolor%3Ainherit%3Bbackground%2Dcolor%3A%23eee%7D%2Ejumbotron%20%2Eh1%2C%2Ejumbotron%20h1%7Bcolor%3Ainherit%7D%2Ejumbotron%20p%7Bmargin%2Dbottom%3A15px%3Bfont%2Dsize%3A21px%3Bfont%2Dweight%3A200%7D%2Ejumbotron%3Ehr%7Bborder%2Dtop%2Dcolor%3A%23d5d5d5%7D%2Econtainer%20%2Ejumbotron%2C%2Econtainer%2Dfluid%20%2Ejumbotron%7Bborder%2Dradius%3A6px%7D%2Ejumbotron%20%2Econtainer%7Bmax%2Dwidth%3A100%25%7D%40media%20screen%20and%20%28min%2Dwidth%3A768px%29%7B%2Ejumbotron%7Bpadding%2Dtop%3A48px%3Bpadding%2Dbottom%3A48px%7D%2Econtainer%20%2Ejumbotron%2C%2Econtainer%2Dfluid%20%2Ejumbotron%7Bpadding%2Dright%3A60px%3Bpadding%2Dleft%3A60px%7D%2Ejumbotron%20%2Eh1%2C%2Ejumbotron%20h1%7Bfont%2Dsize%3A63px%7D%7D%2Ethumbnail%7Bdisplay%3Ablock%3Bpadding%3A4px%3Bmargin%2Dbottom%3A20px%3Bline%2Dheight%3A1%2E42857143%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dtransition%3Aborder%20%2E2s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3Aborder%20%2E2s%20ease%2Din%2Dout%3Btransition%3Aborder%20%2E2s%20ease%2Din%2Dout%7D%2Ethumbnail%20a%3Eimg%2C%2Ethumbnail%3Eimg%7Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7Da%2Ethumbnail%2Eactive%2Ca%2Ethumbnail%3Afocus%2Ca%2Ethumbnail%3Ahover%7Bborder%2Dcolor%3A%23337ab7%7D%2Ethumbnail%20%2Ecaption%7Bpadding%3A9px%3Bcolor%3A%23333%7D%2Ealert%7Bpadding%3A15px%3Bmargin%2Dbottom%3A20px%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Ealert%20h4%7Bmargin%2Dtop%3A0%3Bcolor%3Ainherit%7D%2Ealert%20%2Ealert%2Dlink%7Bfont%2Dweight%3A700%7D%2Ealert%3Ep%2C%2Ealert%3Eul%7Bmargin%2Dbottom%3A0%7D%2Ealert%3Ep%2Bp%7Bmargin%2Dtop%3A5px%7D%2Ealert%2Ddismissable%2C%2Ealert%2Ddismissible%7Bpadding%2Dright%3A35px%7D%2Ealert%2Ddismissable%20%2Eclose%2C%2Ealert%2Ddismissible%20%2Eclose%7Bposition%3Arelative%3Btop%3A%2D2px%3Bright%3A%2D21px%3Bcolor%3Ainherit%7D%2Ealert%2Dsuccess%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%23d6e9c6%7D%2Ealert%2Dsuccess%20hr%7Bborder%2Dtop%2Dcolor%3A%23c9e2b3%7D%2Ealert%2Dsuccess%20%2Ealert%2Dlink%7Bcolor%3A%232b542c%7D%2Ealert%2Dinfo%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%3Bborder%2Dcolor%3A%23bce8f1%7D%2Ealert%2Dinfo%20hr%7Bborder%2Dtop%2Dcolor%3A%23a6e1ec%7D%2Ealert%2Dinfo%20%2Ealert%2Dlink%7Bcolor%3A%23245269%7D%2Ealert%2Dwarning%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%23faebcc%7D%2Ealert%2Dwarning%20hr%7Bborder%2Dtop%2Dcolor%3A%23f7e1b5%7D%2Ealert%2Dwarning%20%2Ealert%2Dlink%7Bcolor%3A%2366512c%7D%2Ealert%2Ddanger%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23ebccd1%7D%2Ealert%2Ddanger%20hr%7Bborder%2Dtop%2Dcolor%3A%23e4b9c0%7D%2Ealert%2Ddanger%20%2Ealert%2Dlink%7Bcolor%3A%23843534%7D%40%2Dwebkit%2Dkeyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%40%2Do%2Dkeyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%40keyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%2Eprogress%7Bheight%3A20px%3Bmargin%2Dbottom%3A20px%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%202px%20rgba%280%2C0%2C0%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%202px%20rgba%280%2C0%2C0%2C%2E1%29%7D%2Eprogress%2Dbar%7Bfloat%3Aleft%3Bwidth%3A0%3Bheight%3A100%25%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23337ab7%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E15%29%3Bbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E15%29%3B%2Dwebkit%2Dtransition%3Awidth%20%2E6s%20ease%3B%2Do%2Dtransition%3Awidth%20%2E6s%20ease%3Btransition%3Awidth%20%2E6s%20ease%7D%2Eprogress%2Dbar%2Dstriped%2C%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3B%2Dwebkit%2Dbackground%2Dsize%3A40px%2040px%3Bbackground%2Dsize%3A40px%2040px%7D%2Eprogress%2Dbar%2Eactive%2C%2Eprogress%2Eactive%20%2Eprogress%2Dbar%7B%2Dwebkit%2Danimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%3B%2Do%2Danimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%3Banimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%7D%2Eprogress%2Dbar%2Dsuccess%7Bbackground%2Dcolor%3A%235cb85c%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dsuccess%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Dinfo%7Bbackground%2Dcolor%3A%235bc0de%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dinfo%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Dwarning%7Bbackground%2Dcolor%3A%23f0ad4e%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dwarning%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Ddanger%7Bbackground%2Dcolor%3A%23d9534f%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Ddanger%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Emedia%7Bmargin%2Dtop%3A15px%7D%2Emedia%3Afirst%2Dchild%7Bmargin%2Dtop%3A0%7D%2Emedia%2C%2Emedia%2Dbody%7Boverflow%3Ahidden%3Bzoom%3A1%7D%2Emedia%2Dbody%7Bwidth%3A10000px%7D%2Emedia%2Dobject%7Bdisplay%3Ablock%7D%2Emedia%2Dobject%2Eimg%2Dthumbnail%7Bmax%2Dwidth%3Anone%7D%2Emedia%2Dright%2C%2Emedia%3E%2Epull%2Dright%7Bpadding%2Dleft%3A10px%7D%2Emedia%2Dleft%2C%2Emedia%3E%2Epull%2Dleft%7Bpadding%2Dright%3A10px%7D%2Emedia%2Dbody%2C%2Emedia%2Dleft%2C%2Emedia%2Dright%7Bdisplay%3Atable%2Dcell%3Bvertical%2Dalign%3Atop%7D%2Emedia%2Dmiddle%7Bvertical%2Dalign%3Amiddle%7D%2Emedia%2Dbottom%7Bvertical%2Dalign%3Abottom%7D%2Emedia%2Dheading%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A5px%7D%2Emedia%2Dlist%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dgroup%7Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A20px%7D%2Elist%2Dgroup%2Ditem%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A10px%2015px%3Bmargin%2Dbottom%3A%2D1px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%7D%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dtop%2Dright%2Dradius%3A4px%7D%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7Da%2Elist%2Dgroup%2Ditem%2Cbutton%2Elist%2Dgroup%2Ditem%7Bcolor%3A%23555%7Da%2Elist%2Dgroup%2Ditem%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3A%23333%7Da%2Elist%2Dgroup%2Ditem%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%3Ahover%7Bcolor%3A%23555%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%7Dbutton%2Elist%2Dgroup%2Ditem%7Bwidth%3A100%25%3Btext%2Dalign%3Aleft%7D%2Elist%2Dgroup%2Ditem%2Edisabled%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23eee%7D%2Elist%2Dgroup%2Ditem%2Edisabled%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7D%2Elist%2Dgroup%2Ditem%2Edisabled%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dtext%7Bcolor%3A%23777%7D%2Elist%2Dgroup%2Ditem%2Eactive%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%7Bz%2Dindex%3A2%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%7Bcolor%3Ainherit%7D%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dtext%7Bcolor%3A%23c7ddef%7D%2Elist%2Dgroup%2Ditem%2Dsuccess%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%7Bcolor%3A%233c763d%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%3Ahover%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23d0e9c6%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%233c763d%3Bborder%2Dcolor%3A%233c763d%7D%2Elist%2Dgroup%2Ditem%2Dinfo%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%7Bcolor%3A%2331708f%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%3Ahover%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23c4e3f3%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331708f%3Bborder%2Dcolor%3A%2331708f%7D%2Elist%2Dgroup%2Ditem%2Dwarning%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%7Bcolor%3A%238a6d3b%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%3Ahover%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23faf2cc%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%238a6d3b%3Bborder%2Dcolor%3A%238a6d3b%7D%2Elist%2Dgroup%2Ditem%2Ddanger%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%7Bcolor%3A%23a94442%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%3Ahover%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23ebcccc%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23a94442%3Bborder%2Dcolor%3A%23a94442%7D%2Elist%2Dgroup%2Ditem%2Dheading%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A5px%7D%2Elist%2Dgroup%2Ditem%2Dtext%7Bmargin%2Dbottom%3A0%3Bline%2Dheight%3A1%2E3%7D%2Epanel%7Bmargin%2Dbottom%3A20px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%3Bbox%2Dshadow%3A0%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%7D%2Epanel%2Dbody%7Bpadding%3A15px%7D%2Epanel%2Dheading%7Bpadding%3A10px%2015px%3Bborder%2Dbottom%3A1px%20solid%20transparent%3Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%2Dheading%3E%2Edropdown%20%2Edropdown%2Dtoggle%7Bcolor%3Ainherit%7D%2Epanel%2Dtitle%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A16px%3Bcolor%3Ainherit%7D%2Epanel%2Dtitle%3E%2Esmall%2C%2Epanel%2Dtitle%3E%2Esmall%3Ea%2C%2Epanel%2Dtitle%3Ea%2C%2Epanel%2Dtitle%3Esmall%2C%2Epanel%2Dtitle%3Esmall%3Ea%7Bcolor%3Ainherit%7D%2Epanel%2Dfooter%7Bpadding%3A10px%2015px%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dtop%3A1px%20solid%20%23ddd%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Elist%2Dgroup%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%7Bmargin%2Dbottom%3A0%7D%2Epanel%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%7Bborder%2Dwidth%3A1px%200%3Bborder%2Dradius%3A0%7D%2Epanel%3E%2Elist%2Dgroup%3Afirst%2Dchild%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%3Afirst%2Dchild%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Elist%2Dgroup%3Alast%2Dchild%20%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%3Alast%2Dchild%20%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dbottom%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Epanel%2Dheading%2B%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dwidth%3A0%7D%2Elist%2Dgroup%2B%2Epanel%2Dfooter%7Bborder%2Dtop%2Dwidth%3A0%7D%2Epanel%3E%2Epanel%2Dcollapse%3E%2Etable%2C%2Epanel%3E%2Etable%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%7Bmargin%2Dbottom%3A0%7D%2Epanel%3E%2Epanel%2Dcollapse%3E%2Etable%20caption%2C%2Epanel%3E%2Etable%20caption%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%20caption%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%7Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%7Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Epanel%2Dbody%2B%2Etable%2C%2Epanel%3E%2Epanel%2Dbody%2B%2Etable%2Dresponsive%2C%2Epanel%3E%2Etable%2B%2Epanel%2Dbody%2C%2Epanel%3E%2Etable%2Dresponsive%2B%2Epanel%2Dbody%7Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Epanel%3E%2Etable%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%2C%2Epanel%3E%2Etable%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%7Bborder%2Dtop%3A0%7D%2Epanel%3E%2Etable%2Dbordered%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%7Bborder%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%7Bborder%2Dleft%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%7Bborder%2Dright%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%2Epanel%3E%2Etable%2Dresponsive%7Bmargin%2Dbottom%3A0%3Bborder%3A0%7D%2Epanel%2Dgroup%7Bmargin%2Dbottom%3A20px%7D%2Epanel%2Dgroup%20%2Epanel%7Bmargin%2Dbottom%3A0%3Bborder%2Dradius%3A4px%7D%2Epanel%2Dgroup%20%2Epanel%2B%2Epanel%7Bmargin%2Dtop%3A5px%7D%2Epanel%2Dgroup%20%2Epanel%2Dheading%7Bborder%2Dbottom%3A0%7D%2Epanel%2Dgroup%20%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%2C%2Epanel%2Dgroup%20%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Epanel%2Dgroup%20%2Epanel%2Dfooter%7Bborder%2Dtop%3A0%7D%2Epanel%2Dgroup%20%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%20%2Epanel%2Dbody%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%7D%2Epanel%2Ddefault%7Bborder%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23f5f5f5%3Bbackground%2Dcolor%3A%23333%7D%2Epanel%2Ddefault%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23ddd%7D%2Epanel%2Dprimary%7Bborder%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Epanel%2Dprimary%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23337ab7%7D%2Epanel%2Dsuccess%7Bborder%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23dff0d8%3Bbackground%2Dcolor%3A%233c763d%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dinfo%7Bborder%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%3Bborder%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23d9edf7%3Bbackground%2Dcolor%3A%2331708f%7D%2Epanel%2Dinfo%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dwarning%7Bborder%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23fcf8e3%3Bbackground%2Dcolor%3A%238a6d3b%7D%2Epanel%2Dwarning%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23faebcc%7D%2Epanel%2Ddanger%7Bborder%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23f2dede%3Bbackground%2Dcolor%3A%23a94442%7D%2Epanel%2Ddanger%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23ebccd1%7D%2Eembed%2Dresponsive%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bheight%3A0%3Bpadding%3A0%3Boverflow%3Ahidden%7D%2Eembed%2Dresponsive%20%2Eembed%2Dresponsive%2Ditem%2C%2Eembed%2Dresponsive%20embed%2C%2Eembed%2Dresponsive%20iframe%2C%2Eembed%2Dresponsive%20object%2C%2Eembed%2Dresponsive%20video%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Bborder%3A0%7D%2Eembed%2Dresponsive%2D16by9%7Bpadding%2Dbottom%3A56%2E25%25%7D%2Eembed%2Dresponsive%2D4by3%7Bpadding%2Dbottom%3A75%25%7D%2Ewell%7Bmin%2Dheight%3A20px%3Bpadding%3A19px%3Bmargin%2Dbottom%3A20px%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%3A1px%20solid%20%23e3e3e3%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%7D%2Ewell%20blockquote%7Bborder%2Dcolor%3A%23ddd%3Bborder%2Dcolor%3Argba%280%2C0%2C0%2C%2E15%29%7D%2Ewell%2Dlg%7Bpadding%3A24px%3Bborder%2Dradius%3A6px%7D%2Ewell%2Dsm%7Bpadding%3A9px%3Bborder%2Dradius%3A3px%7D%2Eclose%7Bfloat%3Aright%3Bfont%2Dsize%3A21px%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23000%3Btext%2Dshadow%3A0%201px%200%20%23fff%3Bfilter%3Aalpha%28opacity%3D20%29%3Bopacity%3A%2E2%7D%2Eclose%3Afocus%2C%2Eclose%3Ahover%7Bcolor%3A%23000%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%3Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7Dbutton%2Eclose%7B%2Dwebkit%2Dappearance%3Anone%3Bpadding%3A0%3Bcursor%3Apointer%3Bbackground%3A0%200%3Bborder%3A0%7D%2Emodal%2Dopen%7Boverflow%3Ahidden%7D%2Emodal%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1050%3Bdisplay%3Anone%3Boverflow%3Ahidden%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3Boutline%3A0%7D%2Emodal%2Efade%20%2Emodal%2Ddialog%7B%2Dwebkit%2Dtransition%3A%2Dwebkit%2Dtransform%20%2E3s%20ease%2Dout%3B%2Do%2Dtransition%3A%2Do%2Dtransform%20%2E3s%20ease%2Dout%3Btransition%3Atransform%20%2E3s%20ease%2Dout%3B%2Dwebkit%2Dtransform%3Atranslate%280%2C%2D25%25%29%3B%2Dms%2Dtransform%3Atranslate%280%2C%2D25%25%29%3B%2Do%2Dtransform%3Atranslate%280%2C%2D25%25%29%3Btransform%3Atranslate%280%2C%2D25%25%29%7D%2Emodal%2Ein%20%2Emodal%2Ddialog%7B%2Dwebkit%2Dtransform%3Atranslate%280%2C0%29%3B%2Dms%2Dtransform%3Atranslate%280%2C0%29%3B%2Do%2Dtransform%3Atranslate%280%2C0%29%3Btransform%3Atranslate%280%2C0%29%7D%2Emodal%2Dopen%20%2Emodal%7Boverflow%2Dx%3Ahidden%3Boverflow%2Dy%3Aauto%7D%2Emodal%2Ddialog%7Bposition%3Arelative%3Bwidth%3Aauto%3Bmargin%3A10px%7D%2Emodal%2Dcontent%7Bposition%3Arelative%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23999%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A6px%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3A0%203px%209px%20rgba%280%2C0%2C0%2C%2E5%29%3Bbox%2Dshadow%3A0%203px%209px%20rgba%280%2C0%2C0%2C%2E5%29%7D%2Emodal%2Dbackdrop%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1040%3Bbackground%2Dcolor%3A%23000%7D%2Emodal%2Dbackdrop%2Efade%7Bfilter%3Aalpha%28opacity%3D0%29%3Bopacity%3A0%7D%2Emodal%2Dbackdrop%2Ein%7Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7D%2Emodal%2Dheader%7Bmin%2Dheight%3A16%2E43px%3Bpadding%3A15px%3Bborder%2Dbottom%3A1px%20solid%20%23e5e5e5%7D%2Emodal%2Dheader%20%2Eclose%7Bmargin%2Dtop%3A%2D2px%7D%2Emodal%2Dtitle%7Bmargin%3A0%3Bline%2Dheight%3A1%2E42857143%7D%2Emodal%2Dbody%7Bposition%3Arelative%3Bpadding%3A15px%7D%2Emodal%2Dfooter%7Bpadding%3A15px%3Btext%2Dalign%3Aright%3Bborder%2Dtop%3A1px%20solid%20%23e5e5e5%7D%2Emodal%2Dfooter%20%2Ebtn%2B%2Ebtn%7Bmargin%2Dbottom%3A0%3Bmargin%2Dleft%3A5px%7D%2Emodal%2Dfooter%20%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%7Bmargin%2Dleft%3A%2D1px%7D%2Emodal%2Dfooter%20%2Ebtn%2Dblock%2B%2Ebtn%2Dblock%7Bmargin%2Dleft%3A0%7D%2Emodal%2Dscrollbar%2Dmeasure%7Bposition%3Aabsolute%3Btop%3A%2D9999px%3Bwidth%3A50px%3Bheight%3A50px%3Boverflow%3Ascroll%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Emodal%2Ddialog%7Bwidth%3A600px%3Bmargin%3A30px%20auto%7D%2Emodal%2Dcontent%7B%2Dwebkit%2Dbox%2Dshadow%3A0%205px%2015px%20rgba%280%2C0%2C0%2C%2E5%29%3Bbox%2Dshadow%3A0%205px%2015px%20rgba%280%2C0%2C0%2C%2E5%29%7D%2Emodal%2Dsm%7Bwidth%3A300px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Emodal%2Dlg%7Bwidth%3A900px%7D%7D%2Etooltip%7Bposition%3Aabsolute%3Bz%2Dindex%3A1070%3Bdisplay%3Ablock%3Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A12px%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bword%2Dwrap%3Anormal%3Bwhite%2Dspace%3Anormal%3Bfilter%3Aalpha%28opacity%3D0%29%3Bopacity%3A0%3Bline%2Dbreak%3Aauto%7D%2Etooltip%2Ein%7Bfilter%3Aalpha%28opacity%3D90%29%3Bopacity%3A%2E9%7D%2Etooltip%2Etop%7Bpadding%3A5px%200%3Bmargin%2Dtop%3A%2D3px%7D%2Etooltip%2Eright%7Bpadding%3A0%205px%3Bmargin%2Dleft%3A3px%7D%2Etooltip%2Ebottom%7Bpadding%3A5px%200%3Bmargin%2Dtop%3A3px%7D%2Etooltip%2Eleft%7Bpadding%3A0%205px%3Bmargin%2Dleft%3A%2D3px%7D%2Etooltip%2Dinner%7Bmax%2Dwidth%3A200px%3Bpadding%3A3px%208px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23000%3Bborder%2Dradius%3A4px%7D%2Etooltip%2Darrow%7Bposition%3Aabsolute%3Bwidth%3A0%3Bheight%3A0%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Etooltip%2Etop%20%2Etooltip%2Darrow%7Bbottom%3A0%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Etop%2Dleft%20%2Etooltip%2Darrow%7Bright%3A5px%3Bbottom%3A0%3Bmargin%2Dbottom%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Etop%2Dright%20%2Etooltip%2Darrow%7Bbottom%3A0%3Bleft%3A5px%3Bmargin%2Dbottom%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Eright%20%2Etooltip%2Darrow%7Btop%3A50%25%3Bleft%3A0%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%205px%200%3Bborder%2Dright%2Dcolor%3A%23000%7D%2Etooltip%2Eleft%20%2Etooltip%2Darrow%7Btop%3A50%25%3Bright%3A0%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A5px%200%205px%205px%3Bborder%2Dleft%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%20%2Etooltip%2Darrow%7Btop%3A0%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%2Dleft%20%2Etooltip%2Darrow%7Btop%3A0%3Bright%3A5px%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%2Dright%20%2Etooltip%2Darrow%7Btop%3A0%3Bleft%3A5px%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Epopover%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bz%2Dindex%3A1060%3Bdisplay%3Anone%3Bmax%2Dwidth%3A276px%3Bpadding%3A1px%3Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A14px%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bword%2Dwrap%3Anormal%3Bwhite%2Dspace%3Anormal%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23ccc%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A6px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%205px%2010px%20rgba%280%2C0%2C0%2C%2E2%29%3Bbox%2Dshadow%3A0%205px%2010px%20rgba%280%2C0%2C0%2C%2E2%29%3Bline%2Dbreak%3Aauto%7D%2Epopover%2Etop%7Bmargin%2Dtop%3A%2D10px%7D%2Epopover%2Eright%7Bmargin%2Dleft%3A10px%7D%2Epopover%2Ebottom%7Bmargin%2Dtop%3A10px%7D%2Epopover%2Eleft%7Bmargin%2Dleft%3A%2D10px%7D%2Epopover%2Dtitle%7Bpadding%3A8px%2014px%3Bmargin%3A0%3Bfont%2Dsize%3A14px%3Bbackground%2Dcolor%3A%23f7f7f7%3Bborder%2Dbottom%3A1px%20solid%20%23ebebeb%3Bborder%2Dradius%3A5px%205px%200%200%7D%2Epopover%2Dcontent%7Bpadding%3A9px%2014px%7D%2Epopover%3E%2Earrow%2C%2Epopover%3E%2Earrow%3Aafter%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bwidth%3A0%3Bheight%3A0%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Epopover%3E%2Earrow%7Bborder%2Dwidth%3A11px%7D%2Epopover%3E%2Earrow%3Aafter%7Bcontent%3A%22%22%3Bborder%2Dwidth%3A10px%7D%2Epopover%2Etop%3E%2Earrow%7Bbottom%3A%2D11px%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D11px%3Bborder%2Dtop%2Dcolor%3A%23999%3Bborder%2Dtop%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Epopover%2Etop%3E%2Earrow%3Aafter%7Bbottom%3A1px%3Bmargin%2Dleft%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dtop%2Dcolor%3A%23fff%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Epopover%2Eright%3E%2Earrow%7Btop%3A50%25%3Bleft%3A%2D11px%3Bmargin%2Dtop%3A%2D11px%3Bborder%2Dright%2Dcolor%3A%23999%3Bborder%2Dright%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%3Bborder%2Dleft%2Dwidth%3A0%7D%2Epopover%2Eright%3E%2Earrow%3Aafter%7Bbottom%3A%2D10px%3Bleft%3A1px%3Bcontent%3A%22%20%22%3Bborder%2Dright%2Dcolor%3A%23fff%3Bborder%2Dleft%2Dwidth%3A0%7D%2Epopover%2Ebottom%3E%2Earrow%7Btop%3A%2D11px%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D11px%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%23999%3Bborder%2Dbottom%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Epopover%2Ebottom%3E%2Earrow%3Aafter%7Btop%3A1px%3Bmargin%2Dleft%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%23fff%7D%2Epopover%2Eleft%3E%2Earrow%7Btop%3A50%25%3Bright%3A%2D11px%3Bmargin%2Dtop%3A%2D11px%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%23999%3Bborder%2Dleft%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Epopover%2Eleft%3E%2Earrow%3Aafter%7Bright%3A1px%3Bbottom%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%23fff%7D%2Ecarousel%7Bposition%3Arelative%7D%2Ecarousel%2Dinner%7Bposition%3Arelative%3Bwidth%3A100%25%3Boverflow%3Ahidden%7D%2Ecarousel%2Dinner%3E%2Eitem%7Bposition%3Arelative%3Bdisplay%3Anone%3B%2Dwebkit%2Dtransition%3A%2E6s%20ease%2Din%2Dout%20left%3B%2Do%2Dtransition%3A%2E6s%20ease%2Din%2Dout%20left%3Btransition%3A%2E6s%20ease%2Din%2Dout%20left%7D%2Ecarousel%2Dinner%3E%2Eitem%3Ea%3Eimg%2C%2Ecarousel%2Dinner%3E%2Eitem%3Eimg%7Bline%2Dheight%3A1%7D%40media%20all%20and%20%28transform%2D3d%29%2C%28%2Dwebkit%2Dtransform%2D3d%29%7B%2Ecarousel%2Dinner%3E%2Eitem%7B%2Dwebkit%2Dtransition%3A%2Dwebkit%2Dtransform%20%2E6s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3A%2Do%2Dtransform%20%2E6s%20ease%2Din%2Dout%3Btransition%3Atransform%20%2E6s%20ease%2Din%2Dout%3B%2Dwebkit%2Dbackface%2Dvisibility%3Ahidden%3Bbackface%2Dvisibility%3Ahidden%3B%2Dwebkit%2Dperspective%3A1000px%3Bperspective%3A1000px%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2Eright%2C%2Ecarousel%2Dinner%3E%2Eitem%2Enext%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%28100%25%2C0%2C0%29%3Btransform%3Atranslate3d%28100%25%2C0%2C0%29%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eitem%2Eprev%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%28%2D100%25%2C0%2C0%29%3Btransform%3Atranslate3d%28%2D100%25%2C0%2C0%29%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2C%2Ecarousel%2Dinner%3E%2Eitem%2Enext%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eitem%2Eprev%2Eright%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%280%2C0%2C0%29%3Btransform%3Atranslate3d%280%2C0%2C0%29%7D%7D%2Ecarousel%2Dinner%3E%2Eactive%2C%2Ecarousel%2Dinner%3E%2Enext%2C%2Ecarousel%2Dinner%3E%2Eprev%7Bdisplay%3Ablock%7D%2Ecarousel%2Dinner%3E%2Eactive%7Bleft%3A0%7D%2Ecarousel%2Dinner%3E%2Enext%2C%2Ecarousel%2Dinner%3E%2Eprev%7Bposition%3Aabsolute%3Btop%3A0%3Bwidth%3A100%25%7D%2Ecarousel%2Dinner%3E%2Enext%7Bleft%3A100%25%7D%2Ecarousel%2Dinner%3E%2Eprev%7Bleft%3A%2D100%25%7D%2Ecarousel%2Dinner%3E%2Enext%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eprev%2Eright%7Bleft%3A0%7D%2Ecarousel%2Dinner%3E%2Eactive%2Eleft%7Bleft%3A%2D100%25%7D%2Ecarousel%2Dinner%3E%2Eactive%2Eright%7Bleft%3A100%25%7D%2Ecarousel%2Dcontrol%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bwidth%3A15%25%3Bfont%2Dsize%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Btext%2Dshadow%3A0%201px%202px%20rgba%280%2C0%2C0%2C%2E6%29%3Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7D%2Ecarousel%2Dcontrol%2Eleft%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bbackground%2Dimage%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cright%20top%2Cfrom%28rgba%280%2C0%2C0%2C%2E5%29%29%2Cto%28rgba%280%2C0%2C0%2C%2E0001%29%29%29%3Bbackground%2Dimage%3Alinear%2Dgradient%28to%20right%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28startColorstr%3D%27%2380000000%27%2C%20endColorstr%3D%27%2300000000%27%2C%20GradientType%3D1%29%3Bbackground%2Drepeat%3Arepeat%2Dx%7D%2Ecarousel%2Dcontrol%2Eright%7Bright%3A0%3Bleft%3Aauto%3Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bbackground%2Dimage%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cright%20top%2Cfrom%28rgba%280%2C0%2C0%2C%2E0001%29%29%2Cto%28rgba%280%2C0%2C0%2C%2E5%29%29%29%3Bbackground%2Dimage%3Alinear%2Dgradient%28to%20right%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28startColorstr%3D%27%2300000000%27%2C%20endColorstr%3D%27%2380000000%27%2C%20GradientType%3D1%29%3Bbackground%2Drepeat%3Arepeat%2Dx%7D%2Ecarousel%2Dcontrol%3Afocus%2C%2Ecarousel%2Dcontrol%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bfilter%3Aalpha%28opacity%3D90%29%3Boutline%3A0%3Bopacity%3A%2E9%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bposition%3Aabsolute%3Btop%3A50%25%3Bz%2Dindex%3A5%3Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bleft%3A50%25%3Bmargin%2Dleft%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%7Bright%3A50%25%3Bmargin%2Dright%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bwidth%3A20px%3Bheight%3A20px%3Bfont%2Dfamily%3Aserif%3Bline%2Dheight%3A1%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%3Abefore%7Bcontent%3A%27%5C2039%27%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%3Abefore%7Bcontent%3A%27%5C203a%27%7D%2Ecarousel%2Dindicators%7Bposition%3Aabsolute%3Bbottom%3A10px%3Bleft%3A50%25%3Bz%2Dindex%3A15%3Bwidth%3A60%25%3Bpadding%2Dleft%3A0%3Bmargin%2Dleft%3A%2D30%25%3Btext%2Dalign%3Acenter%3Blist%2Dstyle%3Anone%7D%2Ecarousel%2Dindicators%20li%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A10px%3Bheight%3A10px%3Bmargin%3A1px%3Btext%2Dindent%3A%2D999px%3Bcursor%3Apointer%3Bbackground%2Dcolor%3A%23000%5C9%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C0%29%3Bborder%3A1px%20solid%20%23fff%3Bborder%2Dradius%3A10px%7D%2Ecarousel%2Dindicators%20%2Eactive%7Bwidth%3A12px%3Bheight%3A12px%3Bmargin%3A0%3Bbackground%2Dcolor%3A%23fff%7D%2Ecarousel%2Dcaption%7Bposition%3Aabsolute%3Bright%3A15%25%3Bbottom%3A20px%3Bleft%3A15%25%3Bz%2Dindex%3A10%3Bpadding%2Dtop%3A20px%3Bpadding%2Dbottom%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Btext%2Dshadow%3A0%201px%202px%20rgba%280%2C0%2C0%2C%2E6%29%7D%2Ecarousel%2Dcaption%20%2Ebtn%7Btext%2Dshadow%3Anone%7D%40media%20screen%20and%20%28min%2Dwidth%3A768px%29%7B%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bwidth%3A30px%3Bheight%3A30px%3Bmargin%2Dtop%3A%2D15px%3Bfont%2Dsize%3A30px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bmargin%2Dleft%3A%2D15px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%7Bmargin%2Dright%3A%2D15px%7D%2Ecarousel%2Dcaption%7Bright%3A20%25%3Bleft%3A20%25%3Bpadding%2Dbottom%3A30px%7D%2Ecarousel%2Dindicators%7Bbottom%3A20px%7D%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Aafter%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Abefore%2C%2Ebtn%2Dtoolbar%3Aafter%2C%2Ebtn%2Dtoolbar%3Abefore%2C%2Eclearfix%3Aafter%2C%2Eclearfix%3Abefore%2C%2Econtainer%2Dfluid%3Aafter%2C%2Econtainer%2Dfluid%3Abefore%2C%2Econtainer%3Aafter%2C%2Econtainer%3Abefore%2C%2Edl%2Dhorizontal%20dd%3Aafter%2C%2Edl%2Dhorizontal%20dd%3Abefore%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Aafter%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Abefore%2C%2Emodal%2Dfooter%3Aafter%2C%2Emodal%2Dfooter%3Abefore%2C%2Enav%3Aafter%2C%2Enav%3Abefore%2C%2Enavbar%2Dcollapse%3Aafter%2C%2Enavbar%2Dcollapse%3Abefore%2C%2Enavbar%2Dheader%3Aafter%2C%2Enavbar%2Dheader%3Abefore%2C%2Enavbar%3Aafter%2C%2Enavbar%3Abefore%2C%2Epager%3Aafter%2C%2Epager%3Abefore%2C%2Epanel%2Dbody%3Aafter%2C%2Epanel%2Dbody%3Abefore%2C%2Erow%3Aafter%2C%2Erow%3Abefore%7Bdisplay%3Atable%3Bcontent%3A%22%20%22%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Aafter%2C%2Ebtn%2Dtoolbar%3Aafter%2C%2Eclearfix%3Aafter%2C%2Econtainer%2Dfluid%3Aafter%2C%2Econtainer%3Aafter%2C%2Edl%2Dhorizontal%20dd%3Aafter%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Aafter%2C%2Emodal%2Dfooter%3Aafter%2C%2Enav%3Aafter%2C%2Enavbar%2Dcollapse%3Aafter%2C%2Enavbar%2Dheader%3Aafter%2C%2Enavbar%3Aafter%2C%2Epager%3Aafter%2C%2Epanel%2Dbody%3Aafter%2C%2Erow%3Aafter%7Bclear%3Aboth%7D%2Ecenter%2Dblock%7Bdisplay%3Ablock%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%2Epull%2Dright%7Bfloat%3Aright%21important%7D%2Epull%2Dleft%7Bfloat%3Aleft%21important%7D%2Ehide%7Bdisplay%3Anone%21important%7D%2Eshow%7Bdisplay%3Ablock%21important%7D%2Einvisible%7Bvisibility%3Ahidden%7D%2Etext%2Dhide%7Bfont%3A0%2F0%20a%3Bcolor%3Atransparent%3Btext%2Dshadow%3Anone%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Ehidden%7Bdisplay%3Anone%21important%7D%2Eaffix%7Bposition%3Afixed%7D%40%2Dms%2Dviewport%7Bwidth%3Adevice%2Dwidth%7D%2Evisible%2Dlg%2C%2Evisible%2Dmd%2C%2Evisible%2Dsm%2C%2Evisible%2Dxs%7Bdisplay%3Anone%21important%7D%2Evisible%2Dlg%2Dblock%2C%2Evisible%2Dlg%2Dinline%2C%2Evisible%2Dlg%2Dinline%2Dblock%2C%2Evisible%2Dmd%2Dblock%2C%2Evisible%2Dmd%2Dinline%2C%2Evisible%2Dmd%2Dinline%2Dblock%2C%2Evisible%2Dsm%2Dblock%2C%2Evisible%2Dsm%2Dinline%2C%2Evisible%2Dsm%2Dinline%2Dblock%2C%2Evisible%2Dxs%2Dblock%2C%2Evisible%2Dxs%2Dinline%2C%2Evisible%2Dxs%2Dinline%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dxs%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dxs%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dxs%2Cth%2Evisible%2Dxs%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dsm%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dsm%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dsm%2Cth%2Evisible%2Dsm%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dmd%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dmd%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dmd%2Cth%2Evisible%2Dmd%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dlg%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dlg%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dlg%2Cth%2Evisible%2Dlg%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Ehidden%2Dxs%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Ehidden%2Dsm%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Ehidden%2Dmd%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ehidden%2Dlg%7Bdisplay%3Anone%21important%7D%7D%2Evisible%2Dprint%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dprint%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dprint%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dprint%2Cth%2Evisible%2Dprint%7Bdisplay%3Atable%2Dcell%21important%7D%7D%2Evisible%2Dprint%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%2Evisible%2Dprint%2Dinline%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%2Evisible%2Dprint%2Dinline%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20print%7B%2Ehidden%2Dprint%7Bdisplay%3Anone%21important%7D%7D%0A" rel="stylesheet" /> <script src="data:application/javascript;base64,LyohCiAqIEJvb3RzdHJhcCB2My4zLjUgKGh0dHA6Ly9nZXRib290c3RyYXAuY29tKQogKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqLwppZigidW5kZWZpbmVkIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5Iik7K2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1hLmZuLmpxdWVyeS5zcGxpdCgiICIpWzBdLnNwbGl0KCIuIik7aWYoYlswXTwyJiZiWzFdPDl8fDE9PWJbMF0mJjk9PWJbMV0mJmJbMl08MSl0aHJvdyBuZXcgRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5IHZlcnNpb24gMS45LjEgb3IgaGlnaGVyIil9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9vdHN0cmFwIiksYj17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn07Zm9yKHZhciBjIGluIGIpaWYodm9pZCAwIT09YS5zdHlsZVtjXSlyZXR1cm57ZW5kOmJbY119O3JldHVybiExfWEuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oYil7dmFyIGM9ITEsZD10aGlzO2EodGhpcykub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Yz0hMH0pO3ZhciBlPWZ1bmN0aW9uKCl7Y3x8YShkKS50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCl9O3JldHVybiBzZXRUaW1lb3V0KGUsYiksdGhpc30sYShmdW5jdGlvbigpe2Euc3VwcG9ydC50cmFuc2l0aW9uPWIoKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGEuZXZlbnQuc3BlY2lhbC5ic1RyYW5zaXRpb25FbmQ9e2JpbmRUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxkZWxlZ2F0ZVR5cGU6YS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGhhbmRsZTpmdW5jdGlvbihiKXtyZXR1cm4gYShiLnRhcmdldCkuaXModGhpcyk/Yi5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGU9Yy5kYXRhKCJicy5hbGVydCIpO2V8fGMuZGF0YSgiYnMuYWxlcnQiLGU9bmV3IGQodGhpcykpLCJzdHJpbmciPT10eXBlb2YgYiYmZVtiXS5jYWxsKGMpfSl9dmFyIGM9J1tkYXRhLWRpc21pc3M9ImFsZXJ0Il0nLGQ9ZnVuY3Rpb24oYil7YShiKS5vbigiY2xpY2siLGMsdGhpcy5jbG9zZSl9O2QuVkVSU0lPTj0iMy4zLjUiLGQuVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsZC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYygpe2cuZGV0YWNoKCkudHJpZ2dlcigiY2xvc2VkLmJzLmFsZXJ0IikucmVtb3ZlKCl9dmFyIGU9YSh0aGlzKSxmPWUuYXR0cigiZGF0YS10YXJnZXQiKTtmfHwoZj1lLmF0dHIoImhyZWYiKSxmPWYmJmYucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7dmFyIGc9YShmKTtiJiZiLnByZXZlbnREZWZhdWx0KCksZy5sZW5ndGh8fChnPWUuY2xvc2VzdCgiLmFsZXJ0IikpLGcudHJpZ2dlcihiPWEuRXZlbnQoImNsb3NlLmJzLmFsZXJ0IikpLGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fChnLnJlbW92ZUNsYXNzKCJpbiIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZnLmhhc0NsYXNzKCJmYWRlIik/Zy5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYykuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKTpjKCkpfTt2YXIgZT1hLmZuLmFsZXJ0O2EuZm4uYWxlcnQ9YixhLmZuLmFsZXJ0LkNvbnN0cnVjdG9yPWQsYS5mbi5hbGVydC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWxlcnQ9ZSx0aGlzfSxhKGRvY3VtZW50KS5vbigiY2xpY2suYnMuYWxlcnQuZGF0YS1hcGkiLGMsZC5wcm90b3R5cGUuY2xvc2UpfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMuYnV0dG9uIiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5idXR0b24iLGU9bmV3IGModGhpcyxmKSksInRvZ2dsZSI9PWI/ZS50b2dnbGUoKTpiJiZlLnNldFN0YXRlKGIpfSl9dmFyIGM9ZnVuY3Rpb24oYixkKXt0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy5pc0xvYWRpbmc9ITF9O2MuVkVSU0lPTj0iMy4zLjUiLGMuREVGQVVMVFM9e2xvYWRpbmdUZXh0OiJsb2FkaW5nLi4uIn0sYy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYil7dmFyIGM9ImRpc2FibGVkIixkPXRoaXMuJGVsZW1lbnQsZT1kLmlzKCJpbnB1dCIpPyJ2YWwiOiJodG1sIixmPWQuZGF0YSgpO2IrPSJUZXh0IixudWxsPT1mLnJlc2V0VGV4dCYmZC5kYXRhKCJyZXNldFRleHQiLGRbZV0oKSksc2V0VGltZW91dChhLnByb3h5KGZ1bmN0aW9uKCl7ZFtlXShudWxsPT1mW2JdP3RoaXMub3B0aW9uc1tiXTpmW2JdKSwibG9hZGluZ1RleHQiPT1iPyh0aGlzLmlzTG9hZGluZz0hMCxkLmFkZENsYXNzKGMpLmF0dHIoYyxjKSk6dGhpcy5pc0xvYWRpbmcmJih0aGlzLmlzTG9hZGluZz0hMSxkLnJlbW92ZUNsYXNzKGMpLnJlbW92ZUF0dHIoYykpfSx0aGlzKSwwKX0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIGE9ITAsYj10aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdJyk7aWYoYi5sZW5ndGgpe3ZhciBjPXRoaXMuJGVsZW1lbnQuZmluZCgiaW5wdXQiKTsicmFkaW8iPT1jLnByb3AoInR5cGUiKT8oYy5wcm9wKCJjaGVja2VkIikmJihhPSExKSxiLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC5hZGRDbGFzcygiYWN0aXZlIikpOiJjaGVja2JveCI9PWMucHJvcCgidHlwZSIpJiYoYy5wcm9wKCJjaGVja2VkIikhPT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJhY3RpdmUiKSYmKGE9ITEpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpKSxjLnByb3AoImNoZWNrZWQiLHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpKSxhJiZjLnRyaWdnZXIoImNoYW5nZSIpfWVsc2UgdGhpcy4kZWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJhY3RpdmUiKSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIil9O3ZhciBkPWEuZm4uYnV0dG9uO2EuZm4uYnV0dG9uPWIsYS5mbi5idXR0b24uQ29uc3RydWN0b3I9YyxhLmZuLmJ1dHRvbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYnV0dG9uPWQsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmJ1dHRvbi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZV49ImJ1dHRvbiJdJyxmdW5jdGlvbihjKXt2YXIgZD1hKGMudGFyZ2V0KTtkLmhhc0NsYXNzKCJidG4iKXx8KGQ9ZC5jbG9zZXN0KCIuYnRuIikpLGIuY2FsbChkLCJ0b2dnbGUiKSxhKGMudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT0icmFkaW8iXScpfHxhKGMudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT0iY2hlY2tib3giXScpfHxjLnByZXZlbnREZWZhdWx0KCl9KS5vbigiZm9jdXMuYnMuYnV0dG9uLmRhdGEtYXBpIGJsdXIuYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXj0iYnV0dG9uIl0nLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmNsb3Nlc3QoIi5idG4iKS50b2dnbGVDbGFzcygiZm9jdXMiLC9eZm9jdXMoaW4pPyQvLnRlc3QoYi50eXBlKSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmNhcm91c2VsIiksZj1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQuZGF0YSgpLCJvYmplY3QiPT10eXBlb2YgYiYmYiksZz0ic3RyaW5nIj09dHlwZW9mIGI/YjpmLnNsaWRlO2V8fGQuZGF0YSgiYnMuY2Fyb3VzZWwiLGU9bmV3IGModGhpcyxmKSksIm51bWJlciI9PXR5cGVvZiBiP2UudG8oYik6Zz9lW2ddKCk6Zi5pbnRlcnZhbCYmZS5wYXVzZSgpLmN5Y2xlKCl9KX12YXIgYz1mdW5jdGlvbihiLGMpe3RoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRpbmRpY2F0b3JzPXRoaXMuJGVsZW1lbnQuZmluZCgiLmNhcm91c2VsLWluZGljYXRvcnMiKSx0aGlzLm9wdGlvbnM9Yyx0aGlzLnBhdXNlZD1udWxsLHRoaXMuc2xpZGluZz1udWxsLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzLiRhY3RpdmU9bnVsbCx0aGlzLiRpdGVtcz1udWxsLHRoaXMub3B0aW9ucy5rZXlib2FyZCYmdGhpcy4kZWxlbWVudC5vbigia2V5ZG93bi5icy5jYXJvdXNlbCIsYS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLCJob3ZlciI9PXRoaXMub3B0aW9ucy5wYXVzZSYmISgib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJnRoaXMuJGVsZW1lbnQub24oIm1vdXNlZW50ZXIuYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oIm1vdXNlbGVhdmUuYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5jeWNsZSx0aGlzKSl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuVFJBTlNJVElPTl9EVVJBVElPTj02MDAsYy5ERUZBVUxUUz17aW50ZXJ2YWw6NWUzLHBhdXNlOiJob3ZlciIsd3JhcDohMCxrZXlib2FyZDohMH0sYy5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihhKXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdChhLnRhcmdldC50YWdOYW1lKSl7c3dpdGNoKGEud2hpY2gpe2Nhc2UgMzc6dGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0aGlzLm5leHQoKTticmVhaztkZWZhdWx0OnJldHVybn1hLnByZXZlbnREZWZhdWx0KCl9fSxjLnByb3RvdHlwZS5jeWNsZT1mdW5jdGlvbihiKXtyZXR1cm4gYnx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxjLnByb3RvdHlwZS5nZXRJdGVtSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJGl0ZW1zPWEucGFyZW50KCkuY2hpbGRyZW4oIi5pdGVtIiksdGhpcy4kaXRlbXMuaW5kZXgoYXx8dGhpcy4kYWN0aXZlKX0sYy5wcm90b3R5cGUuZ2V0SXRlbUZvckRpcmVjdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0SXRlbUluZGV4KGIpLGQ9InByZXYiPT1hJiYwPT09Y3x8Im5leHQiPT1hJiZjPT10aGlzLiRpdGVtcy5sZW5ndGgtMTtpZihkJiYhdGhpcy5vcHRpb25zLndyYXApcmV0dXJuIGI7dmFyIGU9InByZXYiPT1hPy0xOjEsZj0oYytlKSV0aGlzLiRpdGVtcy5sZW5ndGg7cmV0dXJuIHRoaXMuJGl0ZW1zLmVxKGYpfSxjLnByb3RvdHlwZS50bz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9dGhpcy5nZXRJdGVtSW5kZXgodGhpcy4kYWN0aXZlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIikpO3JldHVybiBhPnRoaXMuJGl0ZW1zLmxlbmd0aC0xfHwwPmE/dm9pZCAwOnRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZSgic2xpZC5icy5jYXJvdXNlbCIsZnVuY3Rpb24oKXtiLnRvKGEpfSk6Yz09YT90aGlzLnBhdXNlKCkuY3ljbGUoKTp0aGlzLnNsaWRlKGE+Yz8ibmV4dCI6InByZXYiLHRoaXMuJGl0ZW1zLmVxKGEpKX0sYy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKCIubmV4dCwgLnByZXYiKS5sZW5ndGgmJmEuc3VwcG9ydC50cmFuc2l0aW9uJiYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCksdGhpcy5jeWNsZSghMCkpLHRoaXMuaW50ZXJ2YWw9Y2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzfSxjLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgibmV4dCIpfSxjLnByb3RvdHlwZS5wcmV2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgicHJldiIpfSxjLnByb3RvdHlwZS5zbGlkZT1mdW5jdGlvbihiLGQpe3ZhciBlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksZj1kfHx0aGlzLmdldEl0ZW1Gb3JEaXJlY3Rpb24oYixlKSxnPXRoaXMuaW50ZXJ2YWwsaD0ibmV4dCI9PWI/ImxlZnQiOiJyaWdodCIsaT10aGlzO2lmKGYuaGFzQ2xhc3MoImFjdGl2ZSIpKXJldHVybiB0aGlzLnNsaWRpbmc9ITE7dmFyIGo9ZlswXSxrPWEuRXZlbnQoInNsaWRlLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGspLCFrLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZih0aGlzLnNsaWRpbmc9ITAsZyYmdGhpcy5wYXVzZSgpLHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKXt0aGlzLiRpbmRpY2F0b3JzLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7dmFyIGw9YSh0aGlzLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbdGhpcy5nZXRJdGVtSW5kZXgoZildKTtsJiZsLmFkZENsYXNzKCJhY3RpdmUiKX12YXIgbT1hLkV2ZW50KCJzbGlkLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJzbGlkZSIpPyhmLmFkZENsYXNzKGIpLGZbMF0ub2Zmc2V0V2lkdGgsZS5hZGRDbGFzcyhoKSxmLmFkZENsYXNzKGgpLGUub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcyhbYixoXS5qb2luKCIgIikpLmFkZENsYXNzKCJhY3RpdmUiKSxlLnJlbW92ZUNsYXNzKFsiYWN0aXZlIixoXS5qb2luKCIgIikpLGkuc2xpZGluZz0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS4kZWxlbWVudC50cmlnZ2VyKG0pfSwwKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTikpOihlLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxmLmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKG0pKSxnJiZ0aGlzLmN5Y2xlKCksdGhpc319O3ZhciBkPWEuZm4uY2Fyb3VzZWw7YS5mbi5jYXJvdXNlbD1iLGEuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9YyxhLmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jYXJvdXNlbD1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe3ZhciBkLGU9YSh0aGlzKSxmPWEoZS5hdHRyKCJkYXRhLXRhcmdldCIpfHwoZD1lLmF0dHIoImhyZWYiKSkmJmQucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSk7aWYoZi5oYXNDbGFzcygiY2Fyb3VzZWwiKSl7dmFyIGc9YS5leHRlbmQoe30sZi5kYXRhKCksZS5kYXRhKCkpLGg9ZS5hdHRyKCJkYXRhLXNsaWRlLXRvIik7aCYmKGcuaW50ZXJ2YWw9ITEpLGIuY2FsbChmLGcpLGgmJmYuZGF0YSgiYnMuY2Fyb3VzZWwiKS50byhoKSxjLnByZXZlbnREZWZhdWx0KCl9fTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0iLGUpLm9uKCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlLXRvXSIsZSksYSh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpe2EoJ1tkYXRhLXJpZGU9ImNhcm91c2VsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKTtiLmNhbGwoYyxjLmRhdGEoKSl9KX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXt2YXIgYyxkPWIuYXR0cigiZGF0YS10YXJnZXQiKXx8KGM9Yi5hdHRyKCJocmVmIikpJiZjLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIik7cmV0dXJuIGEoZCl9ZnVuY3Rpb24gYyhiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxlPWMuZGF0YSgiYnMuY29sbGFwc2UiKSxmPWEuZXh0ZW5kKHt9LGQuREVGQVVMVFMsYy5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBiJiZiKTshZSYmZi50b2dnbGUmJi9zaG93fGhpZGUvLnRlc3QoYikmJihmLnRvZ2dsZT0hMSksZXx8Yy5kYXRhKCJicy5jb2xsYXBzZSIsZT1uZXcgZCh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBkPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxkLkRFRkFVTFRTLGMpLHRoaXMuJHRyaWdnZXI9YSgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2hyZWY9IiMnK2IuaWQrJyJdLFtkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXRhcmdldD0iIycrYi5pZCsnIl0nKSx0aGlzLnRyYW5zaXRpb25pbmc9bnVsbCx0aGlzLm9wdGlvbnMucGFyZW50P3RoaXMuJHBhcmVudD10aGlzLmdldFBhcmVudCgpOnRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuJGVsZW1lbnQsdGhpcy4kdHJpZ2dlciksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07ZC5WRVJTSU9OPSIzLjMuNSIsZC5UUkFOU0lUSU9OX0RVUkFUSU9OPTM1MCxkLkRFRkFVTFRTPXt0b2dnbGU6ITB9LGQucHJvdG90eXBlLmRpbWVuc2lvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoIndpZHRoIik7cmV0dXJuIGE/IndpZHRoIjoiaGVpZ2h0In0sZC5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJiF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpKXt2YXIgYixlPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmNoaWxkcmVuKCIucGFuZWwiKS5jaGlsZHJlbigiLmluLCAuY29sbGFwc2luZyIpO2lmKCEoZSYmZS5sZW5ndGgmJihiPWUuZGF0YSgiYnMuY29sbGFwc2UiKSxiJiZiLnRyYW5zaXRpb25pbmcpKSl7dmFyIGY9YS5FdmVudCgic2hvdy5icy5jb2xsYXBzZSIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihmKSwhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7ZSYmZS5sZW5ndGgmJihjLmNhbGwoZSwiaGlkZSIpLGJ8fGUuZGF0YSgiYnMuY29sbGFwc2UiLG51bGwpKTt2YXIgZz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIikuYWRkQ2xhc3MoImNvbGxhcHNpbmciKVtnXSgwKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksdGhpcy4kdHJpZ2dlci5yZW1vdmVDbGFzcygiY29sbGFwc2VkIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITApLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBoPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLmFkZENsYXNzKCJjb2xsYXBzZSBpbiIpW2ddKCIiKSx0aGlzLnRyYW5zaXRpb25pbmc9MCx0aGlzLiRlbGVtZW50LnRyaWdnZXIoInNob3duLmJzLmNvbGxhcHNlIil9O2lmKCFhLnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gaC5jYWxsKHRoaXMpO3ZhciBpPWEuY2FtZWxDYXNlKFsic2Nyb2xsIixnXS5qb2luKCItIikpO3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoaCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKVtnXSh0aGlzLiRlbGVtZW50WzBdW2ldKX19fX0sZC5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpe3ZhciBiPWEuRXZlbnQoImhpZGUuYnMuY29sbGFwc2UiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYiksIWIuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBjPXRoaXMuZGltZW5zaW9uKCk7dGhpcy4kZWxlbWVudFtjXSh0aGlzLiRlbGVtZW50W2NdKCkpWzBdLm9mZnNldEhlaWdodCx0aGlzLiRlbGVtZW50LmFkZENsYXNzKCJjb2xsYXBzaW5nIikucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIGluIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLHRoaXMuJHRyaWdnZXIuYWRkQ2xhc3MoImNvbGxhcHNlZCIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgZT1mdW5jdGlvbigpe3RoaXMudHJhbnNpdGlvbmluZz0wLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNpbmciKS5hZGRDbGFzcygiY29sbGFwc2UiKS50cmlnZ2VyKCJoaWRkZW4uYnMuY29sbGFwc2UiKX07cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uP3ZvaWQgdGhpcy4kZWxlbWVudFtjXSgwKS5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYS5wcm94eShlLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChkLlRSQU5TSVRJT05fRFVSQVRJT04pOmUuY2FsbCh0aGlzKX19fSxkLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIik/ImhpZGUiOiJzaG93Il0oKX0sZC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5vcHRpb25zLnBhcmVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtcGFyZW50PSInK3RoaXMub3B0aW9ucy5wYXJlbnQrJyJdJykuZWFjaChhLnByb3h5KGZ1bmN0aW9uKGMsZCl7dmFyIGU9YShkKTt0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhiKGUpLGUpfSx0aGlzKSkuZW5kKCl9LGQucHJvdG90eXBlLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuaGFzQ2xhc3MoImluIik7YS5hdHRyKCJhcmlhLWV4cGFuZGVkIixjKSxiLnRvZ2dsZUNsYXNzKCJjb2xsYXBzZWQiLCFjKS5hdHRyKCJhcmlhLWV4cGFuZGVkIixjKX07dmFyIGU9YS5mbi5jb2xsYXBzZTthLmZuLmNvbGxhcHNlPWMsYS5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1kLGEuZm4uY29sbGFwc2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmNvbGxhcHNlPWUsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmNvbGxhcHNlLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdJyxmdW5jdGlvbihkKXt2YXIgZT1hKHRoaXMpO2UuYXR0cigiZGF0YS10YXJnZXQiKXx8ZC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWIoZSksZz1mLmRhdGEoImJzLmNvbGxhcHNlIiksaD1nPyJ0b2dnbGUiOmUuZGF0YSgpO2MuY2FsbChmLGgpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3ZhciBjPWIuYXR0cigiZGF0YS10YXJnZXQiKTtjfHwoYz1iLmF0dHIoImhyZWYiKSxjPWMmJi8jW0EtWmEtel0vLnRlc3QoYykmJmMucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7dmFyIGQ9YyYmYShjKTtyZXR1cm4gZCYmZC5sZW5ndGg/ZDpiLnBhcmVudCgpfWZ1bmN0aW9uIGMoYyl7YyYmMz09PWMud2hpY2h8fChhKGUpLnJlbW92ZSgpLGEoZikuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1iKGQpLGY9e3JlbGF0ZWRUYXJnZXQ6dGhpc307ZS5oYXNDbGFzcygib3BlbiIpJiYoYyYmImNsaWNrIj09Yy50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpJiZhLmNvbnRhaW5zKGVbMF0sYy50YXJnZXQpfHwoZS50cmlnZ2VyKGM9YS5FdmVudCgiaGlkZS5icy5kcm9wZG93biIsZikpLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fChkLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLGUucmVtb3ZlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJoaWRkZW4uYnMuZHJvcGRvd24iLGYpKSkpfSkpfWZ1bmN0aW9uIGQoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoImJzLmRyb3Bkb3duIik7ZHx8Yy5kYXRhKCJicy5kcm9wZG93biIsZD1uZXcgZyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZkW2JdLmNhbGwoYyl9KX12YXIgZT0iLmRyb3Bkb3duLWJhY2tkcm9wIixmPSdbZGF0YS10b2dnbGU9ImRyb3Bkb3duIl0nLGc9ZnVuY3Rpb24oYil7YShiKS5vbigiY2xpY2suYnMuZHJvcGRvd24iLHRoaXMudG9nZ2xlKX07Zy5WRVJTSU9OPSIzLjMuNSIsZy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7aWYoIWUuaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpe3ZhciBmPWIoZSksZz1mLmhhc0NsYXNzKCJvcGVuIik7aWYoYygpLCFnKXsib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWYuY2xvc2VzdCgiLm5hdmJhci1uYXYiKS5sZW5ndGgmJmEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmFkZENsYXNzKCJkcm9wZG93bi1iYWNrZHJvcCIpLmluc2VydEFmdGVyKGEodGhpcykpLm9uKCJjbGljayIsYyk7dmFyIGg9e3JlbGF0ZWRUYXJnZXQ6dGhpc307aWYoZi50cmlnZ2VyKGQ9YS5FdmVudCgic2hvdy5icy5kcm9wZG93biIsaCkpLGQuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO2UudHJpZ2dlcigiZm9jdXMiKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLGYudG9nZ2xlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJzaG93bi5icy5kcm9wZG93biIsaCl9cmV0dXJuITF9fSxnLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKGMpe2lmKC8oMzh8NDB8Mjd8MzIpLy50ZXN0KGMud2hpY2gpJiYhL2lucHV0fHRleHRhcmVhL2kudGVzdChjLnRhcmdldC50YWdOYW1lKSl7dmFyIGQ9YSh0aGlzKTtpZihjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSwhZC5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSl7dmFyIGU9YihkKSxnPWUuaGFzQ2xhc3MoIm9wZW4iKTtpZighZyYmMjchPWMud2hpY2h8fGcmJjI3PT1jLndoaWNoKXJldHVybiAyNz09Yy53aGljaCYmZS5maW5kKGYpLnRyaWdnZXIoImZvY3VzIiksZC50cmlnZ2VyKCJjbGljayIpO3ZhciBoPSIgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhIixpPWUuZmluZCgiLmRyb3Bkb3duLW1lbnUiK2gpO2lmKGkubGVuZ3RoKXt2YXIgaj1pLmluZGV4KGMudGFyZ2V0KTszOD09Yy53aGljaCYmaj4wJiZqLS0sNDA9PWMud2hpY2gmJmo8aS5sZW5ndGgtMSYmaisrLH5qfHwoaj0wKSxpLmVxKGopLnRyaWdnZXIoImZvY3VzIil9fX19O3ZhciBoPWEuZm4uZHJvcGRvd247YS5mbi5kcm9wZG93bj1kLGEuZm4uZHJvcGRvd24uQ29uc3RydWN0b3I9ZyxhLmZuLmRyb3Bkb3duLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5kcm9wZG93bj1oLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsYykub24oImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duIGZvcm0iLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGkiLGYsZy5wcm90b3R5cGUudG9nZ2xlKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsZixnLnByb3RvdHlwZS5rZXlkb3duKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93bi1tZW51IixnLnByb3RvdHlwZS5rZXlkb3duKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYixkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YSgiYnMubW9kYWwiKSxnPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZS5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBiJiZiKTtmfHxlLmRhdGEoImJzLm1vZGFsIixmPW5ldyBjKHRoaXMsZykpLCJzdHJpbmciPT10eXBlb2YgYj9mW2JdKGQpOmcuc2hvdyYmZi5zaG93KGQpfSl9dmFyIGM9ZnVuY3Rpb24oYixjKXt0aGlzLm9wdGlvbnM9Yyx0aGlzLiRib2R5PWEoZG9jdW1lbnQuYm9keSksdGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuJGRpYWxvZz10aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1kaWFsb2ciKSx0aGlzLiRiYWNrZHJvcD1udWxsLHRoaXMuaXNTaG93bj1udWxsLHRoaXMub3JpZ2luYWxCb2R5UGFkPW51bGwsdGhpcy5zY3JvbGxiYXJXaWR0aD0wLHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1jb250ZW50IikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLGEucHJveHkoZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoImxvYWRlZC5icy5tb2RhbCIpfSx0aGlzKSl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuVFJBTlNJVElPTl9EVVJBVElPTj0zMDAsYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzaG93OiEwfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3coYSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPWEuRXZlbnQoInNob3cuYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSksdGhpcy5pc1Nob3dufHxlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5pc1Nob3duPSEwLHRoaXMuY2hlY2tTY3JvbGxiYXIoKSx0aGlzLnNldFNjcm9sbGJhcigpLHRoaXMuJGJvZHkuYWRkQ2xhc3MoIm1vZGFsLW9wZW4iKSx0aGlzLmVzY2FwZSgpLHRoaXMucmVzaXplKCksdGhpcy4kZWxlbWVudC5vbigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIsJ1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLGEucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLiRkaWFsb2cub24oIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuJGVsZW1lbnQub25lKCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwiLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmlzKGQuJGVsZW1lbnQpJiYoZC5pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBlPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZkLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik7ZC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fGQuJGVsZW1lbnQuYXBwZW5kVG8oZC4kYm9keSksZC4kZWxlbWVudC5zaG93KCkuc2Nyb2xsVG9wKDApLGQuYWRqdXN0RGlhbG9nKCksZSYmZC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCxkLiRlbGVtZW50LmFkZENsYXNzKCJpbiIpLGQuZW5mb3JjZUZvY3VzKCk7dmFyIGY9YS5FdmVudCgic2hvd24uYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTtlP2QuJGRpYWxvZy5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZnVuY3Rpb24oKXtkLiRlbGVtZW50LnRyaWdnZXIoImZvY3VzIikudHJpZ2dlcihmKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZC4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpLnRyaWdnZXIoZil9KSl9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7YiYmYi5wcmV2ZW50RGVmYXVsdCgpLGI9YS5FdmVudCgiaGlkZS5icy5tb2RhbCIpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihiKSx0aGlzLmlzU2hvd24mJiFiLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYodGhpcy5pc1Nob3duPSExLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSxhKGRvY3VtZW50KS5vZmYoImZvY3VzaW4uYnMubW9kYWwiKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJpbiIpLm9mZigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIpLm9mZigibW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsIiksdGhpcy4kZGlhbG9nLm9mZigibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkodGhpcy5oaWRlTW9kYWwsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6dGhpcy5oaWRlTW9kYWwoKSl9LGMucHJvdG90eXBlLmVuZm9yY2VGb2N1cz1mdW5jdGlvbigpe2EoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5icy5tb2RhbCIpLm9uKCJmb2N1c2luLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpe3RoaXMuJGVsZW1lbnRbMF09PT1hLnRhcmdldHx8dGhpcy4kZWxlbWVudC5oYXMoYS50YXJnZXQpLmxlbmd0aHx8dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpfSx0aGlzKSl9LGMucHJvdG90eXBlLmVzY2FwZT1mdW5jdGlvbigpe3RoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkP3RoaXMuJGVsZW1lbnQub24oImtleWRvd24uZGlzbWlzcy5icy5tb2RhbCIsYS5wcm94eShmdW5jdGlvbihhKXsyNz09YS53aGljaCYmdGhpcy5oaWRlKCl9LHRoaXMpKTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKCJrZXlkb3duLmRpc21pc3MuYnMubW9kYWwiKX0sYy5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duP2Eod2luZG93KS5vbigicmVzaXplLmJzLm1vZGFsIixhLnByb3h5KHRoaXMuaGFuZGxlVXBkYXRlLHRoaXMpKTphKHdpbmRvdykub2ZmKCJyZXNpemUuYnMubW9kYWwiKX0sYy5wcm90b3R5cGUuaGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLiRlbGVtZW50LmhpZGUoKSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7YS4kYm9keS5yZW1vdmVDbGFzcygibW9kYWwtb3BlbiIpLGEucmVzZXRBZGp1c3RtZW50cygpLGEucmVzZXRTY3JvbGxiYXIoKSxhLiRlbGVtZW50LnRyaWdnZXIoImhpZGRlbi5icy5tb2RhbCIpfSl9LGMucHJvdG90eXBlLnJlbW92ZUJhY2tkcm9wPWZ1bmN0aW9uKCl7dGhpcy4kYmFja2Ryb3AmJnRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpLHRoaXMuJGJhY2tkcm9wPW51bGx9LGMucHJvdG90eXBlLmJhY2tkcm9wPWZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMsZT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgZj1hLnN1cHBvcnQudHJhbnNpdGlvbiYmZTtpZih0aGlzLiRiYWNrZHJvcD1hKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5hZGRDbGFzcygibW9kYWwtYmFja2Ryb3AgIitlKS5hcHBlbmRUbyh0aGlzLiRib2R5KSx0aGlzLiRlbGVtZW50Lm9uKCJjbGljay5kaXNtaXNzLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s/dm9pZCh0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITEpOnZvaWQoYS50YXJnZXQ9PT1hLmN1cnJlbnRUYXJnZXQmJigic3RhdGljIj09dGhpcy5vcHRpb25zLmJhY2tkcm9wP3RoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKTp0aGlzLmhpZGUoKSkpfSx0aGlzKSksZiYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoImluIiksIWIpcmV0dXJuO2Y/dGhpcy4kYmFja2Ryb3Aub25lKCJic1RyYW5zaXRpb25FbmQiLGIpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6YigpfWVsc2UgaWYoIXRoaXMuaXNTaG93biYmdGhpcy4kYmFja2Ryb3Ape3RoaXMuJGJhY2tkcm9wLnJlbW92ZUNsYXNzKCJpbiIpO3ZhciBnPWZ1bmN0aW9uKCl7ZC5yZW1vdmVCYWNrZHJvcCgpLGImJmIoKX07YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZykuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKTpnKCl9ZWxzZSBiJiZiKCl9LGMucHJvdG90eXBlLmhhbmRsZVVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuYWRqdXN0RGlhbG9nKCl9LGMucHJvdG90eXBlLmFkanVzdERpYWxvZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OiF0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiFhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiJ9KX0sYy5wcm90b3R5cGUucmVzZXRBZGp1c3RtZW50cz1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDoiIixwYWRkaW5nUmlnaHQ6IiJ9KX0sYy5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuaW5uZXJXaWR0aDtpZighYSl7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2E9Yi5yaWdodC1NYXRoLmFicyhiLmxlZnQpfXRoaXMuYm9keUlzT3ZlcmZsb3dpbmc9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDxhLHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCl9LGMucHJvdG90eXBlLnNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBhPXBhcnNlSW50KHRoaXMuJGJvZHkuY3NzKCJwYWRkaW5nLXJpZ2h0Iil8fDAsMTApO3RoaXMub3JpZ2luYWxCb2R5UGFkPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0fHwiIix0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZ0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIsYSt0aGlzLnNjcm9sbGJhcldpZHRoKX0sYy5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIsdGhpcy5vcmlnaW5hbEJvZHlQYWQpfSxjLnByb3RvdHlwZS5tZWFzdXJlU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5jbGFzc05hbWU9Im1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIix0aGlzLiRib2R5LmFwcGVuZChhKTt2YXIgYj1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGg7cmV0dXJuIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQoYSksYn07dmFyIGQ9YS5mbi5tb2RhbDthLmZuLm1vZGFsPWIsYS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1jLGEuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLm1vZGFsPWQsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLm1vZGFsLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyxmdW5jdGlvbihjKXt2YXIgZD1hKHRoaXMpLGU9ZC5hdHRyKCJocmVmIiksZj1hKGQuYXR0cigiZGF0YS10YXJnZXQiKXx8ZSYmZS5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxnPWYuZGF0YSgiYnMubW9kYWwiKT8idG9nZ2xlIjphLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChlKSYmZX0sZi5kYXRhKCksZC5kYXRhKCkpO2QuaXMoImEiKSYmYy5wcmV2ZW50RGVmYXVsdCgpLGYub25lKCJzaG93LmJzLm1vZGFsIixmdW5jdGlvbihhKXthLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxmLm9uZSgiaGlkZGVuLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuaXMoIjp2aXNpYmxlIikmJmQudHJpZ2dlcigiZm9jdXMiKX0pfSksYi5jYWxsKGYsZyx0aGlzKX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMudG9vbHRpcCIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiOyhlfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdChiKSkmJihlfHxkLmRhdGEoImJzLnRvb2x0aXAiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLnR5cGU9bnVsbCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLmVuYWJsZWQ9bnVsbCx0aGlzLnRpbWVvdXQ9bnVsbCx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pblN0YXRlPW51bGwsdGhpcy5pbml0KCJ0b29sdGlwIixhLGIpfTtjLlZFUlNJT049IjMuMy41IixjLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGMuREVGQVVMVFM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6InRvcCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicsdHJpZ2dlcjoiaG92ZXIgZm9jdXMiLHRpdGxlOiIiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOiJib2R5IixwYWRkaW5nOjB9fSxjLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGIsYyxkKXtpZih0aGlzLmVuYWJsZWQ9ITAsdGhpcy50eXBlPWIsdGhpcy4kZWxlbWVudD1hKGMpLHRoaXMub3B0aW9ucz10aGlzLmdldE9wdGlvbnMoZCksdGhpcy4kdmlld3BvcnQ9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZhKGEuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMudmlld3BvcnQpP3RoaXMub3B0aW9ucy52aWV3cG9ydC5jYWxsKHRoaXMsdGhpcy4kZWxlbWVudCk6dGhpcy5vcHRpb25zLnZpZXdwb3J0LnNlbGVjdG9yfHx0aGlzLm9wdGlvbnMudmlld3BvcnQpLHRoaXMuaW5TdGF0ZT17Y2xpY2s6ITEsaG92ZXI6ITEsZm9jdXM6ITF9LHRoaXMuJGVsZW1lbnRbMF1pbnN0YW5jZW9mIGRvY3VtZW50LmNvbnN0cnVjdG9yJiYhdGhpcy5vcHRpb25zLnNlbGVjdG9yKXRocm93IG5ldyBFcnJvcigiYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgIit0aGlzLnR5cGUrIiBvbiB0aGUgd2luZG93LmRvY3VtZW50IG9iamVjdCEiKTtmb3IodmFyIGU9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoIiAiKSxmPWUubGVuZ3RoO2YtLTspe3ZhciBnPWVbZl07aWYoImNsaWNrIj09Zyl0aGlzLiRlbGVtZW50Lm9uKCJjbGljay4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZigibWFudWFsIiE9Zyl7dmFyIGg9ImhvdmVyIj09Zz8ibW91c2VlbnRlciI6ImZvY3VzaW4iLGk9ImhvdmVyIj09Zz8ibW91c2VsZWF2ZSI6ImZvY3Vzb3V0Ijt0aGlzLiRlbGVtZW50Lm9uKGgrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmVudGVyLHRoaXMpKSx0aGlzLiRlbGVtZW50Lm9uKGkrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSk6dGhpcy5maXhUaXRsZSgpfSxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKGIpe3JldHVybiBiPWEuZXh0ZW5kKHt9LHRoaXMuZ2V0RGVmYXVsdHMoKSx0aGlzLiRlbGVtZW50LmRhdGEoKSxiKSxiLmRlbGF5JiYibnVtYmVyIj09dHlwZW9mIGIuZGVsYXkmJihiLmRlbGF5PXtzaG93OmIuZGVsYXksaGlkZTpiLmRlbGF5fSksYn0sYy5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz10aGlzLmdldERlZmF1bHRzKCk7cmV0dXJuIHRoaXMuX29wdGlvbnMmJmEuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGEsZCl7Y1thXSE9ZCYmKGJbYV09ZCl9KSxifSxjLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7cmV0dXJuIGN8fChjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGIuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsYykpLGIgaW5zdGFuY2VvZiBhLkV2ZW50JiYoYy5pblN0YXRlWyJmb2N1c2luIj09Yi50eXBlPyJmb2N1cyI6ImhvdmVyIl09ITApLGMudGlwKCkuaGFzQ2xhc3MoImluIil8fCJpbiI9PWMuaG92ZXJTdGF0ZT92b2lkKGMuaG92ZXJTdGF0ZT0iaW4iKTooY2xlYXJUaW1lb3V0KGMudGltZW91dCksYy5ob3ZlclN0YXRlPSJpbiIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuc2hvdz92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ImluIj09Yy5ob3ZlclN0YXRlJiZjLnNob3coKX0sYy5vcHRpb25zLmRlbGF5LnNob3cpKTpjLnNob3coKSl9LGMucHJvdG90eXBlLmlzSW5TdGF0ZVRydWU9ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcy5pblN0YXRlKWlmKHRoaXMuaW5TdGF0ZVthXSlyZXR1cm4hMDtyZXR1cm4hMX0sYy5wcm90b3R5cGUubGVhdmU9ZnVuY3Rpb24oYil7dmFyIGM9YiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/YjphKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUpO3JldHVybiBjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlLGMpKSxiIGluc3RhbmNlb2YgYS5FdmVudCYmKGMuaW5TdGF0ZVsiZm9jdXNvdXQiPT1iLnR5cGU/ImZvY3VzIjoiaG92ZXIiXT0hMSksYy5pc0luU3RhdGVUcnVlKCk/dm9pZCAwOihjbGVhclRpbWVvdXQoYy50aW1lb3V0KSxjLmhvdmVyU3RhdGU9Im91dCIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuaGlkZT92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Im91dCI9PWMuaG92ZXJTdGF0ZSYmYy5oaWRlKCl9LGMub3B0aW9ucy5kZWxheS5oaWRlKSk6Yy5oaWRlKCkpfSxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9YS5FdmVudCgic2hvdy5icy4iK3RoaXMudHlwZSk7aWYodGhpcy5oYXNDb250ZW50KCkmJnRoaXMuZW5hYmxlZCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpO3ZhciBkPWEuY29udGFpbnModGhpcy4kZWxlbWVudFswXS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLiRlbGVtZW50WzBdKTtpZihiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwhZClyZXR1cm47dmFyIGU9dGhpcyxmPXRoaXMudGlwKCksZz10aGlzLmdldFVJRCh0aGlzLnR5cGUpO3RoaXMuc2V0Q29udGVudCgpLGYuYXR0cigiaWQiLGcpLHRoaXMuJGVsZW1lbnQuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsZyksdGhpcy5vcHRpb25zLmFuaW1hdGlvbiYmZi5hZGRDbGFzcygiZmFkZSIpO3ZhciBoPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLGZbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCxpPS9ccz9hdXRvP1xzPy9pLGo9aS50ZXN0KGgpO2omJihoPWgucmVwbGFjZShpLCIiKXx8InRvcCIpLGYuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSkuYWRkQ2xhc3MoaCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsdGhpcyksdGhpcy5vcHRpb25zLmNvbnRhaW5lcj9mLmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOmYuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJpbnNlcnRlZC5icy4iK3RoaXMudHlwZSk7dmFyIGs9dGhpcy5nZXRQb3NpdGlvbigpLGw9ZlswXS5vZmZzZXRXaWR0aCxtPWZbMF0ub2Zmc2V0SGVpZ2h0O2lmKGope3ZhciBuPWgsbz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtoPSJib3R0b20iPT1oJiZrLmJvdHRvbSttPm8uYm90dG9tPyJ0b3AiOiJ0b3AiPT1oJiZrLnRvcC1tPG8udG9wPyJib3R0b20iOiJyaWdodCI9PWgmJmsucmlnaHQrbD5vLndpZHRoPyJsZWZ0IjoibGVmdCI9PWgmJmsubGVmdC1sPG8ubGVmdD8icmlnaHQiOmgsZi5yZW1vdmVDbGFzcyhuKS5hZGRDbGFzcyhoKX12YXIgcD10aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQoaCxrLGwsbSk7dGhpcy5hcHBseVBsYWNlbWVudChwLGgpO3ZhciBxPWZ1bmN0aW9uKCl7dmFyIGE9ZS5ob3ZlclN0YXRlO2UuJGVsZW1lbnQudHJpZ2dlcigic2hvd24uYnMuIitlLnR5cGUpLGUuaG92ZXJTdGF0ZT1udWxsLCJvdXQiPT1hJiZlLmxlYXZlKGUpfTthLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKCJmYWRlIik/Zi5vbmUoImJzVHJhbnNpdGlvbkVuZCIscSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpxKCl9fSxjLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMudGlwKCksZT1kWzBdLm9mZnNldFdpZHRoLGY9ZFswXS5vZmZzZXRIZWlnaHQsZz1wYXJzZUludChkLmNzcygibWFyZ2luLXRvcCIpLDEwKSxoPXBhcnNlSW50KGQuY3NzKCJtYXJnaW4tbGVmdCIpLDEwKTtpc05hTihnKSYmKGc9MCksaXNOYU4oaCkmJihoPTApLGIudG9wKz1nLGIubGVmdCs9aCxhLm9mZnNldC5zZXRPZmZzZXQoZFswXSxhLmV4dGVuZCh7dXNpbmc6ZnVuY3Rpb24oYSl7ZC5jc3Moe3RvcDpNYXRoLnJvdW5kKGEudG9wKSxsZWZ0Ok1hdGgucm91bmQoYS5sZWZ0KX0pfX0sYiksMCksZC5hZGRDbGFzcygiaW4iKTt2YXIgaT1kWzBdLm9mZnNldFdpZHRoLGo9ZFswXS5vZmZzZXRIZWlnaHQ7InRvcCI9PWMmJmohPWYmJihiLnRvcD1iLnRvcCtmLWopO3ZhciBrPXRoaXMuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhKGMsYixpLGopO2subGVmdD9iLmxlZnQrPWsubGVmdDpiLnRvcCs9ay50b3A7dmFyIGw9L3RvcHxib3R0b20vLnRlc3QoYyksbT1sPzIqay5sZWZ0LWUraToyKmsudG9wLWYraixuPWw/Im9mZnNldFdpZHRoIjoib2Zmc2V0SGVpZ2h0IjtkLm9mZnNldChiKSx0aGlzLnJlcGxhY2VBcnJvdyhtLGRbMF1bbl0sbCl9LGMucHJvdG90eXBlLnJlcGxhY2VBcnJvdz1mdW5jdGlvbihhLGIsYyl7dGhpcy5hcnJvdygpLmNzcyhjPyJsZWZ0IjoidG9wIiw1MCooMS1hL2IpKyIlIikuY3NzKGM/InRvcCI6ImxlZnQiLCIiKX0sYy5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMudGlwKCksYj10aGlzLmdldFRpdGxlKCk7YS5maW5kKCIudG9vbHRpcC1pbm5lciIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKGIpLGEucmVtb3ZlQ2xhc3MoImZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0Iil9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZCgpeyJpbiIhPWUuaG92ZXJTdGF0ZSYmZi5kZXRhY2goKSxlLiRlbGVtZW50LnJlbW92ZUF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKS50cmlnZ2VyKCJoaWRkZW4uYnMuIitlLnR5cGUpLGImJmIoKX12YXIgZT10aGlzLGY9YSh0aGlzLiR0aXApLGc9YS5FdmVudCgiaGlkZS5icy4iK3RoaXMudHlwZSk7cmV0dXJuIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihnKSxnLmlzRGVmYXVsdFByZXZlbnRlZCgpP3ZvaWQgMDooZi5yZW1vdmVDbGFzcygiaW4iKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmZi5oYXNDbGFzcygiZmFkZSIpP2Yub25lKCJic1RyYW5zaXRpb25FbmQiLGQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZCgpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXMpfSxjLnByb3RvdHlwZS5maXhUaXRsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQ7KGEuYXR0cigidGl0bGUiKXx8InN0cmluZyIhPXR5cGVvZiBhLmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKSkmJmEuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsYS5hdHRyKCJ0aXRsZSIpfHwiIikuYXR0cigidGl0bGUiLCIiKX0sYy5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGMucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKGIpe2I9Ynx8dGhpcy4kZWxlbWVudDt2YXIgYz1iWzBdLGQ9IkJPRFkiPT1jLnRhZ05hbWUsZT1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO251bGw9PWUud2lkdGgmJihlPWEuZXh0ZW5kKHt9LGUse3dpZHRoOmUucmlnaHQtZS5sZWZ0LGhlaWdodDplLmJvdHRvbS1lLnRvcH0pKTt2YXIgZj1kP3t0b3A6MCxsZWZ0OjB9OmIub2Zmc2V0KCksZz17c2Nyb2xsOmQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A6Yi5zY3JvbGxUb3AoKX0saD1kP3t3aWR0aDphKHdpbmRvdykud2lkdGgoKSxoZWlnaHQ6YSh3aW5kb3cpLmhlaWdodCgpfTpudWxsO3JldHVybiBhLmV4dGVuZCh7fSxlLGcsaCxmKX0sYy5wcm90b3R5cGUuZ2V0Q2FsY3VsYXRlZE9mZnNldD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4iYm90dG9tIj09YT97dG9wOmIudG9wK2IuaGVpZ2h0LGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OiJ0b3AiPT1hP3t0b3A6Yi50b3AtZCxsZWZ0OmIubGVmdCtiLndpZHRoLzItYy8yfToibGVmdCI9PWE/e3RvcDpiLnRvcCtiLmhlaWdodC8yLWQvMixsZWZ0OmIubGVmdC1jfTp7dG9wOmIudG9wK2IuaGVpZ2h0LzItZC8yLGxlZnQ6Yi5sZWZ0K2Iud2lkdGh9fSxjLnByb3RvdHlwZS5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9e3RvcDowLGxlZnQ6MH07aWYoIXRoaXMuJHZpZXdwb3J0KXJldHVybiBlO3ZhciBmPXRoaXMub3B0aW9ucy52aWV3cG9ydCYmdGhpcy5vcHRpb25zLnZpZXdwb3J0LnBhZGRpbmd8fDAsZz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtpZigvcmlnaHR8bGVmdC8udGVzdChhKSl7dmFyIGg9Yi50b3AtZi1nLnNjcm9sbCxpPWIudG9wK2YtZy5zY3JvbGwrZDtoPGcudG9wP2UudG9wPWcudG9wLWg6aT5nLnRvcCtnLmhlaWdodCYmKGUudG9wPWcudG9wK2cuaGVpZ2h0LWkpfWVsc2V7dmFyIGo9Yi5sZWZ0LWYsaz1iLmxlZnQrZitjO2o8Zy5sZWZ0P2UubGVmdD1nLmxlZnQtajprPmcucmlnaHQmJihlLmxlZnQ9Zy5sZWZ0K2cud2lkdGgtayl9cmV0dXJuIGV9LGMucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLiRlbGVtZW50LGM9dGhpcy5vcHRpb25zO3JldHVybiBhPWIuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpfHwoImZ1bmN0aW9uIj09dHlwZW9mIGMudGl0bGU/Yy50aXRsZS5jYWxsKGJbMF0pOmMudGl0bGUpfSxjLnByb3RvdHlwZS5nZXRVSUQ9ZnVuY3Rpb24oYSl7ZG8gYSs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpO3doaWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKTtyZXR1cm4gYX0sYy5wcm90b3R5cGUudGlwPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJHRpcCYmKHRoaXMuJHRpcD1hKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSksMSE9dGhpcy4kdGlwLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKHRoaXMudHlwZSsiIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhIik7cmV0dXJuIHRoaXMuJHRpcH0sYy5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZCgiLnRvb2x0aXAtYXJyb3ciKX0sYy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxjLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSxjLnByb3RvdHlwZS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXt2YXIgYz10aGlzO2ImJihjPWEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSksY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSxjKSkpLGI/KGMuaW5TdGF0ZS5jbGljaz0hYy5pblN0YXRlLmNsaWNrLGMuaXNJblN0YXRlVHJ1ZSgpP2MuZW50ZXIoYyk6Yy5sZWF2ZShjKSk6Yy50aXAoKS5oYXNDbGFzcygiaW4iKT9jLmxlYXZlKGMpOmMuZW50ZXIoYyl9LGMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMuaGlkZShmdW5jdGlvbigpe2EuJGVsZW1lbnQub2ZmKCIuIithLnR5cGUpLnJlbW92ZURhdGEoImJzLiIrYS50eXBlKSxhLiR0aXAmJmEuJHRpcC5kZXRhY2goKSxhLiR0aXA9bnVsbCxhLiRhcnJvdz1udWxsLGEuJHZpZXdwb3J0PW51bGx9KX07dmFyIGQ9YS5mbi50b29sdGlwO2EuZm4udG9vbHRpcD1iLGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1jLGEuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udG9vbHRpcD1kLHRoaXN9fShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMucG9wb3ZlciIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiOyhlfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdChiKSkmJihlfHxkLmRhdGEoImJzLnBvcG92ZXIiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLmluaXQoInBvcG92ZXIiLGEsYil9O2lmKCFhLmZuLnRvb2x0aXApdGhyb3cgbmV3IEVycm9yKCJQb3BvdmVyIHJlcXVpcmVzIHRvb2x0aXAuanMiKTtjLlZFUlNJT049IjMuMy41IixjLkRFRkFVTFRTPWEuZXh0ZW5kKHt9LGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoiY2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InBvcG92ZXIiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48aDMgY2xhc3M9InBvcG92ZXItdGl0bGUiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50Ij48L2Rpdj48L2Rpdj4nfSksYy5wcm90b3R5cGU9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSksYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKSxjPXRoaXMuZ2V0Q29udGVudCgpO2EuZmluZCgiLnBvcG92ZXItdGl0bGUiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXShiKSxhLmZpbmQoIi5wb3BvdmVyLWNvbnRlbnQiKS5jaGlsZHJlbigpLmRldGFjaCgpLmVuZCgpW3RoaXMub3B0aW9ucy5odG1sPyJzdHJpbmciPT10eXBlb2YgYz8iaHRtbCI6ImFwcGVuZCI6InRleHQiXShjKSxhLnJlbW92ZUNsYXNzKCJmYWRlIHRvcCBib3R0b20gbGVmdCByaWdodCBpbiIpLGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5odG1sKCl8fGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5oaWRlKCl9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sYy5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQsYj10aGlzLm9wdGlvbnM7cmV0dXJuIGEuYXR0cigiZGF0YS1jb250ZW50Iil8fCgiZnVuY3Rpb24iPT10eXBlb2YgYi5jb250ZW50P2IuY29udGVudC5jYWxsKGFbMF0pOmIuY29udGVudCl9LGMucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoIi5hcnJvdyIpfTt2YXIgZD1hLmZuLnBvcG92ZXI7YS5mbi5wb3BvdmVyPWIsYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWMsYS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5wb3BvdmVyPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGMsZCl7dGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJHNjcm9sbEVsZW1lbnQ9YShhKGMpLmlzKGRvY3VtZW50LmJvZHkpP3dpbmRvdzpjKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYi5ERUZBVUxUUyxkKSx0aGlzLnNlbGVjdG9yPSh0aGlzLm9wdGlvbnMudGFyZ2V0fHwiIikrIiAubmF2IGxpID4gYSIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbigic2Nyb2xsLmJzLnNjcm9sbHNweSIsYS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcykpLHRoaXMucmVmcmVzaCgpLHRoaXMucHJvY2VzcygpfWZ1bmN0aW9uIGMoYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLnNjcm9sbHNweSIpLGY9Im9iamVjdCI9PXR5cGVvZiBjJiZjO2V8fGQuZGF0YSgiYnMuc2Nyb2xsc3B5IixlPW5ldyBiKHRoaXMsZikpLCJzdHJpbmciPT10eXBlb2YgYyYmZVtjXSgpfSl9Yi5WRVJTSU9OPSIzLjMuNSIsYi5ERUZBVUxUUz17b2Zmc2V0OjEwfSxiLnByb3RvdHlwZS5nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxiLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPSJvZmZzZXQiLGQ9MDt0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuc2Nyb2xsSGVpZ2h0PXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksYS5pc1dpbmRvdyh0aGlzLiRzY3JvbGxFbGVtZW50WzBdKXx8KGM9InBvc2l0aW9uIixkPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkpLHRoaXMuJGJvZHkuZmluZCh0aGlzLnNlbGVjdG9yKS5tYXAoZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLGU9Yi5kYXRhKCJ0YXJnZXQiKXx8Yi5hdHRyKCJocmVmIiksZj0vXiMuLy50ZXN0KGUpJiZhKGUpO3JldHVybiBmJiZmLmxlbmd0aCYmZi5pcygiOnZpc2libGUiKSYmW1tmW2NdKCkudG9wK2QsZV1dfHxudWxsfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhWzBdLWJbMF19KS5lYWNoKGZ1bmN0aW9uKCl7Yi5vZmZzZXRzLnB1c2godGhpc1swXSksYi50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0sYi5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LGM9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQrYy10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLGU9dGhpcy5vZmZzZXRzLGY9dGhpcy50YXJnZXRzLGc9dGhpcy5hY3RpdmVUYXJnZXQ7aWYodGhpcy5zY3JvbGxIZWlnaHQhPWMmJnRoaXMucmVmcmVzaCgpLGI+PWQpcmV0dXJuIGchPShhPWZbZi5sZW5ndGgtMV0pJiZ0aGlzLmFjdGl2YXRlKGEpO2lmKGcmJmI8ZVswXSlyZXR1cm4gdGhpcy5hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLmNsZWFyKCk7Zm9yKGE9ZS5sZW5ndGg7YS0tOylnIT1mW2FdJiZiPj1lW2FdJiYodm9pZCAwPT09ZVthKzFdfHxiPGVbYSsxXSkmJnRoaXMuYWN0aXZhdGUoZlthXSl9LGIucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIpe3RoaXMuYWN0aXZlVGFyZ2V0PWIsdGhpcy5jbGVhcigpO3ZhciBjPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJytiKyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK2IrJyJdJyxkPWEoYykucGFyZW50cygibGkiKS5hZGRDbGFzcygiYWN0aXZlIik7ZC5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiYoZD1kLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpKSwKZC50cmlnZ2VyKCJhY3RpdmF0ZS5icy5zY3JvbGxzcHkiKX0sYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgZD1hLmZuLnNjcm9sbHNweTthLmZuLnNjcm9sbHNweT1jLGEuZm4uc2Nyb2xsc3B5LkNvbnN0cnVjdG9yPWIsYS5mbi5zY3JvbGxzcHkubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnNjcm9sbHNweT1kLHRoaXN9LGEod2luZG93KS5vbigibG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGkiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpO2MuY2FsbChiLGIuZGF0YSgpKX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy50YWIiKTtlfHxkLmRhdGEoImJzLnRhYiIsZT1uZXcgYyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiKXt0aGlzLmVsZW1lbnQ9YShiKX07Yy5WRVJTSU9OPSIzLjMuNSIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpIiksZD1iLmRhdGEoInRhcmdldCIpO2lmKGR8fChkPWIuYXR0cigiaHJlZiIpLGQ9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKSwhYi5wYXJlbnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpKXt2YXIgZT1jLmZpbmQoIi5hY3RpdmU6bGFzdCBhIiksZj1hLkV2ZW50KCJoaWRlLmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6YlswXX0pLGc9YS5FdmVudCgic2hvdy5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmVbMF19KTtpZihlLnRyaWdnZXIoZiksYi50cmlnZ2VyKGcpLCFnLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGg9YShkKTt0aGlzLmFjdGl2YXRlKGIuY2xvc2VzdCgibGkiKSxjKSx0aGlzLmFjdGl2YXRlKGgsaC5wYXJlbnQoKSxmdW5jdGlvbigpe2UudHJpZ2dlcih7dHlwZToiaGlkZGVuLmJzLnRhYiIscmVsYXRlZFRhcmdldDpiWzBdfSksYi50cmlnZ2VyKHt0eXBlOiJzaG93bi5icy50YWIiLHJlbGF0ZWRUYXJnZXQ6ZVswXX0pfSl9fX0sYy5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oYixkLGUpe2Z1bmN0aW9uIGYoKXtnLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5maW5kKCI+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGU9InRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLGIuYWRkQ2xhc3MoImFjdGl2ZSIpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksaD8oYlswXS5vZmZzZXRXaWR0aCxiLmFkZENsYXNzKCJpbiIpKTpiLnJlbW92ZUNsYXNzKCJmYWRlIiksYi5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiZiLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksZSYmZSgpfXZhciBnPWQuZmluZCgiPiAuYWN0aXZlIiksaD1lJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGcubGVuZ3RoJiZnLmhhc0NsYXNzKCJmYWRlIil8fCEhZC5maW5kKCI+IC5mYWRlIikubGVuZ3RoKTtnLmxlbmd0aCYmaD9nLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSxnLnJlbW92ZUNsYXNzKCJpbiIpfTt2YXIgZD1hLmZuLnRhYjthLmZuLnRhYj1iLGEuZm4udGFiLkNvbnN0cnVjdG9yPWMsYS5mbi50YWIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnRhYj1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe2MucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSwic2hvdyIpfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMudGFiLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJ0YWIiXScsZSkub24oImNsaWNrLmJzLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0icGlsbCJdJyxlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmFmZml4IiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5hZmZpeCIsZT1uZXcgYyh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy4kdGFyZ2V0PWEodGhpcy5vcHRpb25zLnRhcmdldCkub24oInNjcm9sbC5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKCJjbGljay5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wLHRoaXMpKSx0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5hZmZpeGVkPW51bGwsdGhpcy51bnBpbj1udWxsLHRoaXMucGlubmVkT2Zmc2V0PW51bGwsdGhpcy5jaGVja1Bvc2l0aW9uKCl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuUkVTRVQ9ImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b20iLGMuREVGQVVMVFM9e29mZnNldDowLHRhcmdldDp3aW5kb3d9LGMucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxmPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksZz10aGlzLiR0YXJnZXQuaGVpZ2h0KCk7aWYobnVsbCE9YyYmInRvcCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gYz5lPyJ0b3AiOiExO2lmKCJib3R0b20iPT10aGlzLmFmZml4ZWQpcmV0dXJuIG51bGwhPWM/ZSt0aGlzLnVucGluPD1mLnRvcD8hMToiYm90dG9tIjphLWQ+PWUrZz8hMToiYm90dG9tIjt2YXIgaD1udWxsPT10aGlzLmFmZml4ZWQsaT1oP2U6Zi50b3Asaj1oP2c6YjtyZXR1cm4gbnVsbCE9YyYmYz49ZT8idG9wIjpudWxsIT1kJiZpK2o+PWEtZD8iYm90dG9tIjohMX0sYy5wcm90b3R5cGUuZ2V0UGlubmVkT2Zmc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5waW5uZWRPZmZzZXQpcmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0O3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYy5SRVNFVCkuYWRkQ2xhc3MoImFmZml4Iik7dmFyIGE9dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpLGI9dGhpcy4kZWxlbWVudC5vZmZzZXQoKTtyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ9Yi50b3AtYX0sYy5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3A9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpLDEpfSxjLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy4kZWxlbWVudC5pcygiOnZpc2libGUiKSl7dmFyIGI9dGhpcy4kZWxlbWVudC5oZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQsZT1kLnRvcCxmPWQuYm90dG9tLGc9TWF0aC5tYXgoYShkb2N1bWVudCkuaGVpZ2h0KCksYShkb2N1bWVudC5ib2R5KS5oZWlnaHQoKSk7Im9iamVjdCIhPXR5cGVvZiBkJiYoZj1lPWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZT1kLnRvcCh0aGlzLiRlbGVtZW50KSksImZ1bmN0aW9uIj09dHlwZW9mIGYmJihmPWQuYm90dG9tKHRoaXMuJGVsZW1lbnQpKTt2YXIgaD10aGlzLmdldFN0YXRlKGcsYixlLGYpO2lmKHRoaXMuYWZmaXhlZCE9aCl7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoInRvcCIsIiIpO3ZhciBpPSJhZmZpeCIrKGg/Ii0iK2g6IiIpLGo9YS5FdmVudChpKyIuYnMuYWZmaXgiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoaiksai5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5hZmZpeGVkPWgsdGhpcy51bnBpbj0iYm90dG9tIj09aD90aGlzLmdldFBpbm5lZE9mZnNldCgpOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhpKS50cmlnZ2VyKGkucmVwbGFjZSgiYWZmaXgiLCJhZmZpeGVkIikrIi5icy5hZmZpeCIpfSJib3R0b20iPT1oJiZ0aGlzLiRlbGVtZW50Lm9mZnNldCh7dG9wOmctYi1mfSl9fTt2YXIgZD1hLmZuLmFmZml4O2EuZm4uYWZmaXg9YixhLmZuLmFmZml4LkNvbnN0cnVjdG9yPWMsYS5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWZmaXg9ZCx0aGlzfSxhKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e30sbnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pLG51bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKSxiLmNhbGwoYyxkKX0pfSl9KGpRdWVyeSk7"></script> <script src="data:application/javascript;base64,LyoqCiogQHByZXNlcnZlIEhUTUw1IFNoaXYgMy43LjIgfCBAYWZhcmthcyBAamRhbHRvbiBAam9uX25lYWwgQHJlbSB8IE1JVC9HUEwyIExpY2Vuc2VkCiovCi8vIE9ubHkgcnVuIHRoaXMgY29kZSBpbiBJRSA4CmlmICghIXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKCJNU0lFIDgiKSkgewohZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGM9YS5jcmVhdGVFbGVtZW50KCJwIiksZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybiBjLmlubmVySFRNTD0ieDxzdHlsZT4iK2IrIjwvc3R5bGU+IixkLmluc2VydEJlZm9yZShjLmxhc3RDaGlsZCxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGQoKXt2YXIgYT10LmVsZW1lbnRzO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT9hLnNwbGl0KCIgIik6YX1mdW5jdGlvbiBlKGEsYil7dmFyIGM9dC5lbGVtZW50czsic3RyaW5nIiE9dHlwZW9mIGMmJihjPWMuam9pbigiICIpKSwic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEuam9pbigiICIpKSx0LmVsZW1lbnRzPWMrIiAiK2EsaihiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPXNbYVtxXV07cmV0dXJuIGJ8fChiPXt9LHIrKyxhW3FdPXIsc1tyXT1iKSxifWZ1bmN0aW9uIGcoYSxjLGQpe2lmKGN8fChjPWIpLGwpcmV0dXJuIGMuY3JlYXRlRWxlbWVudChhKTtkfHwoZD1mKGMpKTt2YXIgZTtyZXR1cm4gZT1kLmNhY2hlW2FdP2QuY2FjaGVbYV0uY2xvbmVOb2RlKCk6cC50ZXN0KGEpPyhkLmNhY2hlW2FdPWQuY3JlYXRlRWxlbShhKSkuY2xvbmVOb2RlKCk6ZC5jcmVhdGVFbGVtKGEpLCFlLmNhbkhhdmVDaGlsZHJlbnx8by50ZXN0KGEpfHxlLnRhZ1Vybj9lOmQuZnJhZy5hcHBlbmRDaGlsZChlKX1mdW5jdGlvbiBoKGEsYyl7aWYoYXx8KGE9YiksbClyZXR1cm4gYS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yz1jfHxmKGEpO2Zvcih2YXIgZT1jLmZyYWcuY2xvbmVOb2RlKCksZz0wLGg9ZCgpLGk9aC5sZW5ndGg7aT5nO2crKyllLmNyZWF0ZUVsZW1lbnQoaFtnXSk7cmV0dXJuIGV9ZnVuY3Rpb24gaShhLGIpe2IuY2FjaGV8fChiLmNhY2hlPXt9LGIuY3JlYXRlRWxlbT1hLmNyZWF0ZUVsZW1lbnQsYi5jcmVhdGVGcmFnPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxiLmZyYWc9Yi5jcmVhdGVGcmFnKCkpLGEuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihjKXtyZXR1cm4gdC5zaGl2TWV0aG9kcz9nKGMsYSxiKTpiLmNyZWF0ZUVsZW0oYyl9LGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD1GdW5jdGlvbigiaCxmIiwicmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49Zi5jbG9uZU5vZGUoKSxjPW4uY3JlYXRlRWxlbWVudDtoLnNoaXZNZXRob2RzJiYoIitkKCkuam9pbigpLnJlcGxhY2UoL1tcd1wtOl0rL2csZnVuY3Rpb24oYSl7cmV0dXJuIGIuY3JlYXRlRWxlbShhKSxiLmZyYWcuY3JlYXRlRWxlbWVudChhKSwnYygiJythKyciKSd9KSsiKTtyZXR1cm4gbn0iKSh0LGIuZnJhZyl9ZnVuY3Rpb24gaihhKXthfHwoYT1iKTt2YXIgZD1mKGEpO3JldHVybiF0LnNoaXZDU1N8fGt8fGQuaGFzQ1NTfHwoZC5oYXNDU1M9ISFjKGEsImFydGljbGUsYXNpZGUsZGlhbG9nLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG1haW4sbmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja31tYXJre2JhY2tncm91bmQ6I0ZGMDtjb2xvcjojMDAwfXRlbXBsYXRle2Rpc3BsYXk6bm9uZX0iKSksbHx8aShhLGQpLGF9dmFyIGssbCxtPSIzLjcuMiIsbj1hLmh0bWw1fHx7fSxvPS9ePHxeKD86YnV0dG9ufG1hcHxzZWxlY3R8dGV4dGFyZWF8b2JqZWN0fGlmcmFtZXxvcHRpb258b3B0Z3JvdXApJC9pLHA9L14oPzphfGJ8Y29kZXxkaXZ8ZmllbGRzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aXxsYWJlbHxsaXxvbHxwfHF8c3BhbnxzdHJvbmd8c3R5bGV8dGFibGV8dGJvZHl8dGR8dGh8dHJ8dWwpJC9pLHE9Il9odG1sNXNoaXYiLHI9MCxzPXt9OyFmdW5jdGlvbigpe3RyeXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImEiKTthLmlubmVySFRNTD0iPHh5ej48L3h5ej4iLGs9ImhpZGRlbiJpbiBhLGw9MT09YS5jaGlsZE5vZGVzLmxlbmd0aHx8ZnVuY3Rpb24oKXtiLmNyZWF0ZUVsZW1lbnQoImEiKTt2YXIgYT1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGEuY2xvbmVOb2RlfHwidW5kZWZpbmVkIj09dHlwZW9mIGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8InVuZGVmaW5lZCI9PXR5cGVvZiBhLmNyZWF0ZUVsZW1lbnR9KCl9Y2F0Y2goYyl7az0hMCxsPSEwfX0oKTt2YXIgdD17ZWxlbWVudHM6bi5lbGVtZW50c3x8ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiZGkgY2FudmFzIGRhdGEgZGF0YWxpc3QgZGV0YWlscyBkaWFsb2cgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFpbiBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcGljdHVyZSBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGVtcGxhdGUgdGltZSB2aWRlbyIsdmVyc2lvbjptLHNoaXZDU1M6bi5zaGl2Q1NTIT09ITEsc3VwcG9ydHNVbmtub3duRWxlbWVudHM6bCxzaGl2TWV0aG9kczpuLnNoaXZNZXRob2RzIT09ITEsdHlwZToiZGVmYXVsdCIsc2hpdkRvY3VtZW50OmosY3JlYXRlRWxlbWVudDpnLGNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6aCxhZGRFbGVtZW50czplfTthLmh0bWw1PXQsaihiKX0odGhpcyxkb2N1bWVudCk7Cn07Cg=="></script> <script src="data:application/javascript;base64,LyohIFJlc3BvbmQuanMgdjEuNC4yOiBtaW4vbWF4LXdpZHRoIG1lZGlhIHF1ZXJ5IHBvbHlmaWxsICogQ29weXJpZ2h0IDIwMTMgU2NvdHQgSmVobAogKiBMaWNlbnNlZCB1bmRlciBodHRwczovL2dpdGh1Yi5jb20vc2NvdHRqZWhsL1Jlc3BvbmQvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVQKICogICovCgovLyBPbmx5IHJ1biB0aGlzIGNvZGUgaW4gSUUgOAppZiAoISF3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgiTVNJRSA4IikpIHsKIWZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjthLm1hdGNoTWVkaWE9YS5tYXRjaE1lZGlhfHxmdW5jdGlvbihhKXt2YXIgYixjPWEuZG9jdW1lbnRFbGVtZW50LGQ9Yy5maXJzdEVsZW1lbnRDaGlsZHx8Yy5maXJzdENoaWxkLGU9YS5jcmVhdGVFbGVtZW50KCJib2R5IiksZj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBmLmlkPSJtcS10ZXN0LTEiLGYuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7dG9wOi0xMDBlbSIsZS5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIixlLmFwcGVuZENoaWxkKGYpLGZ1bmN0aW9uKGEpe3JldHVybiBmLmlubmVySFRNTD0nJnNoeTs8c3R5bGUgbWVkaWE9IicrYSsnIj4gI21xLXRlc3QtMSB7IHdpZHRoOiA0MnB4OyB9PC9zdHlsZT4nLGMuaW5zZXJ0QmVmb3JlKGUsZCksYj00Mj09PWYub2Zmc2V0V2lkdGgsYy5yZW1vdmVDaGlsZChlKSx7bWF0Y2hlczpiLG1lZGlhOmF9fX0oYS5kb2N1bWVudCl9KHRoaXMpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7dSghMCl9dmFyIGM9e307YS5yZXNwb25kPWMsYy51cGRhdGU9ZnVuY3Rpb24oKXt9O3ZhciBkPVtdLGU9ZnVuY3Rpb24oKXt2YXIgYj0hMTt0cnl7Yj1uZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChjKXtiPW5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGJ9fSgpLGY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1lKCk7YyYmKGMub3BlbigiR0VUIixhLCEwKSxjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQhPT1jLnJlYWR5U3RhdGV8fDIwMCE9PWMuc3RhdHVzJiYzMDQhPT1jLnN0YXR1c3x8YihjLnJlc3BvbnNlVGV4dCl9LDQhPT1jLnJlYWR5U3RhdGUmJmMuc2VuZChudWxsKSl9O2lmKGMuYWpheD1mLGMucXVldWU9ZCxjLnJlZ2V4PXttZWRpYTovQG1lZGlhW15ce10rXHsoW15ce1x9XSpce1teXH1ce10qXH0pKy9naSxrZXlmcmFtZXM6L0AoPzpcLSg/Om98bW96fHdlYmtpdClcLSk/a2V5ZnJhbWVzW15ce10rXHsoPzpbXlx7XH1dKlx7W15cfVx7XSpcfSkrW15cfV0qXH0vZ2ksdXJsczovKHVybFwoKVsnIl0/KFteXC9cKSciXVteOlwpJyJdKylbJyJdPyhcKSkvZyxmaW5kU3R5bGVzOi9AbWVkaWEgKihbXlx7XSspXHsoW1xTXHNdKz8pJC8sb25seTovKG9ubHlccyspPyhbYS16QS1aXSspXHM/LyxtaW53Oi9cKFtcc10qbWluXC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpLyxtYXh3Oi9cKFtcc10qbWF4XC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpL30sYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQ9YS5tYXRjaE1lZGlhJiZudWxsIT09YS5tYXRjaE1lZGlhKCJvbmx5IGFsbCIpJiZhLm1hdGNoTWVkaWEoIm9ubHkgYWxsIikubWF0Y2hlcywhYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQpe3ZhciBnLGgsaSxqPWEuZG9jdW1lbnQsaz1qLmRvY3VtZW50RWxlbWVudCxsPVtdLG09W10sbj1bXSxvPXt9LHA9MzAscT1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGsscj1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJiYXNlIilbMF0scz1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIiksdD1mdW5jdGlvbigpe3ZhciBhLGI9ai5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPWouYm9keSxkPWsuc3R5bGUuZm9udFNpemUsZT1jJiZjLnN0eWxlLmZvbnRTaXplLGY9ITE7cmV0dXJuIGIuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjFlbTt3aWR0aDoxZW0iLGN8fChjPWY9ai5jcmVhdGVFbGVtZW50KCJib2R5IiksYy5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIiksay5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5hcHBlbmRDaGlsZChiKSxmJiZrLmluc2VydEJlZm9yZShjLGsuZmlyc3RDaGlsZCksYT1iLm9mZnNldFdpZHRoLGY/ay5yZW1vdmVDaGlsZChjKTpjLnJlbW92ZUNoaWxkKGIpLGsuc3R5bGUuZm9udFNpemU9ZCxlJiYoYy5zdHlsZS5mb250U2l6ZT1lKSxhPWk9cGFyc2VGbG9hdChhKX0sdT1mdW5jdGlvbihiKXt2YXIgYz0iY2xpZW50V2lkdGgiLGQ9a1tjXSxlPSJDU1MxQ29tcGF0Ij09PWouY29tcGF0TW9kZSYmZHx8ai5ib2R5W2NdfHxkLGY9e30sbz1zW3MubGVuZ3RoLTFdLHI9KG5ldyBEYXRlKS5nZXRUaW1lKCk7aWYoYiYmZyYmcD5yLWcpcmV0dXJuIGEuY2xlYXJUaW1lb3V0KGgpLGg9YS5zZXRUaW1lb3V0KHUscCksdm9pZCAwO2c9cjtmb3IodmFyIHYgaW4gbClpZihsLmhhc093blByb3BlcnR5KHYpKXt2YXIgdz1sW3ZdLHg9dy5taW53LHk9dy5tYXh3LHo9bnVsbD09PXgsQT1udWxsPT09eSxCPSJlbSI7eCYmKHg9cGFyc2VGbG9hdCh4KSooeC5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSkseSYmKHk9cGFyc2VGbG9hdCh5KSooeS5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSksdy5oYXNxdWVyeSYmKHomJkF8fCEoenx8ZT49eCl8fCEoQXx8eT49ZSkpfHwoZlt3Lm1lZGlhXXx8KGZbdy5tZWRpYV09W10pLGZbdy5tZWRpYV0ucHVzaChtW3cucnVsZXNdKSl9Zm9yKHZhciBDIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShDKSYmbltDXSYmbltDXS5wYXJlbnROb2RlPT09cSYmcS5yZW1vdmVDaGlsZChuW0NdKTtuLmxlbmd0aD0wO2Zvcih2YXIgRCBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkoRCkpe3ZhciBFPWouY3JlYXRlRWxlbWVudCgic3R5bGUiKSxGPWZbRF0uam9pbigiXG4iKTtFLnR5cGU9InRleHQvY3NzIixFLm1lZGlhPUQscS5pbnNlcnRCZWZvcmUoRSxvLm5leHRTaWJsaW5nKSxFLnN0eWxlU2hlZXQ/RS5zdHlsZVNoZWV0LmNzc1RleHQ9RjpFLmFwcGVuZENoaWxkKGouY3JlYXRlVGV4dE5vZGUoRikpLG4ucHVzaChFKX19LHY9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEucmVwbGFjZShjLnJlZ2V4LmtleWZyYW1lcywiIikubWF0Y2goYy5yZWdleC5tZWRpYSksZj1lJiZlLmxlbmd0aHx8MDtiPWIuc3Vic3RyaW5nKDAsYi5sYXN0SW5kZXhPZigiLyIpKTt2YXIgZz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGMucmVnZXgudXJscywiJDEiK2IrIiQyJDMiKX0saD0hZiYmZDtiLmxlbmd0aCYmKGIrPSIvIiksaCYmKGY9MSk7Zm9yKHZhciBpPTA7Zj5pO2krKyl7dmFyIGosayxuLG87aD8oaj1kLG0ucHVzaChnKGEpKSk6KGo9ZVtpXS5tYXRjaChjLnJlZ2V4LmZpbmRTdHlsZXMpJiZSZWdFeHAuJDEsbS5wdXNoKFJlZ0V4cC4kMiYmZyhSZWdFeHAuJDIpKSksbj1qLnNwbGl0KCIsIiksbz1uLmxlbmd0aDtmb3IodmFyIHA9MDtvPnA7cCsrKWs9bltwXSxsLnB1c2goe21lZGlhOmsuc3BsaXQoIigiKVswXS5tYXRjaChjLnJlZ2V4Lm9ubHkpJiZSZWdFeHAuJDJ8fCJhbGwiLHJ1bGVzOm0ubGVuZ3RoLTEsaGFzcXVlcnk6ay5pbmRleE9mKCIoIik+LTEsbWludzprLm1hdGNoKGMucmVnZXgubWludykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIiksbWF4dzprLm1hdGNoKGMucmVnZXgubWF4dykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIil9KX11KCl9LHc9ZnVuY3Rpb24oKXtpZihkLmxlbmd0aCl7dmFyIGI9ZC5zaGlmdCgpO2YoYi5ocmVmLGZ1bmN0aW9uKGMpe3YoYyxiLmhyZWYsYi5tZWRpYSksb1tiLmhyZWZdPSEwLGEuc2V0VGltZW91dChmdW5jdGlvbigpe3coKX0sMCl9KX19LHg9ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHMubGVuZ3RoO2IrKyl7dmFyIGM9c1tiXSxlPWMuaHJlZixmPWMubWVkaWEsZz1jLnJlbCYmInN0eWxlc2hlZXQiPT09Yy5yZWwudG9Mb3dlckNhc2UoKTtlJiZnJiYhb1tlXSYmKGMuc3R5bGVTaGVldCYmYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQ/KHYoYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQsZSxmKSxvW2VdPSEwKTooIS9eKFthLXpBLVo6XSpcL1wvKS8udGVzdChlKSYmIXJ8fGUucmVwbGFjZShSZWdFeHAuJDEsIiIpLnNwbGl0KCIvIilbMF09PT1hLmxvY2F0aW9uLmhvc3QpJiYoIi8vIj09PWUuc3Vic3RyaW5nKDAsMikmJihlPWEubG9jYXRpb24ucHJvdG9jb2wrZSksZC5wdXNoKHtocmVmOmUsbWVkaWE6Zn0pKSl9dygpfTt4KCksYy51cGRhdGU9eCxjLmdldEVtVmFsdWU9dCxhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGIsITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9ucmVzaXplIixiKX19KHRoaXMpOwp9Owo="></script> <script src="data:application/javascript;base64,LyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE2LTAxLTA1CiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBjb3JlLmpzLCB3aWRnZXQuanMsIG1vdXNlLmpzLCBwb3NpdGlvbi5qcywgZHJhZ2dhYmxlLmpzLCBkcm9wcGFibGUuanMsIHJlc2l6YWJsZS5qcywgc2VsZWN0YWJsZS5qcywgc29ydGFibGUuanMsIGFjY29yZGlvbi5qcywgYXV0b2NvbXBsZXRlLmpzLCBidXR0b24uanMsIGRpYWxvZy5qcywgbWVudS5qcywgcHJvZ3Jlc3NiYXIuanMsIHNlbGVjdG1lbnUuanMsIHNsaWRlci5qcywgc3Bpbm5lci5qcywgdGFicy5qcywgdG9vbHRpcC5qcywgZWZmZWN0LmpzLCBlZmZlY3QtYmxpbmQuanMsIGVmZmVjdC1ib3VuY2UuanMsIGVmZmVjdC1jbGlwLmpzLCBlZmZlY3QtZHJvcC5qcywgZWZmZWN0LWV4cGxvZGUuanMsIGVmZmVjdC1mYWRlLmpzLCBlZmZlY3QtZm9sZC5qcywgZWZmZWN0LWhpZ2hsaWdodC5qcywgZWZmZWN0LXB1ZmYuanMsIGVmZmVjdC1wdWxzYXRlLmpzLCBlZmZlY3Qtc2NhbGUuanMsIGVmZmVjdC1zaGFrZS5qcywgZWZmZWN0LXNpemUuanMsIGVmZmVjdC1zbGlkZS5qcywgZWZmZWN0LXRyYW5zZmVyLmpzCiogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLwoKKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5Il0sZSk6ZShqUXVlcnkpfSkoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHMpe3ZhciBuLGEsbyxyPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iYXJlYSI9PT1yPyhuPXQucGFyZW50Tm9kZSxhPW4ubmFtZSx0LmhyZWYmJmEmJiJtYXAiPT09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPyhvPWUoImltZ1t1c2VtYXA9JyMiK2ErIiddIilbMF0sISFvJiZpKG8pKTohMSk6KC9eKGlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvLnRlc3Qocik/IXQuZGlzYWJsZWQ6ImEiPT09cj90LmhyZWZ8fHM6cykmJmkodCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZS5leHByLmZpbHRlcnMudmlzaWJsZSh0KSYmIWUodCkucGFyZW50cygpLmFkZEJhY2soKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4iaGlkZGVuIj09PWUuY3NzKHRoaXMsInZpc2liaWxpdHkiKX0pLmxlbmd0aH1mdW5jdGlvbiBzKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudC52YWwoKTtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9yZWZyZXNoKCksdCE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIil9fWUudWk9ZS51aXx8e30sZS5leHRlbmQoZS51aSx7dmVyc2lvbjoiMS4xMS40IixrZXlDb2RlOntCQUNLU1BBQ0U6OCxDT01NQToxODgsREVMRVRFOjQ2LERPV046NDAsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxIT01FOjM2LExFRlQ6MzcsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTUEFDRTozMixUQUI6OSxVUDozOH19KSxlLmZuLmV4dGVuZCh7c2Nyb2xsUGFyZW50OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuY3NzKCJwb3NpdGlvbiIpLHM9ImFic29sdXRlIj09PWksbj10Py8oYXV0b3xzY3JvbGx8aGlkZGVuKS86LyhhdXRvfHNjcm9sbCkvLGE9dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gcyYmInN0YXRpYyI9PT10LmNzcygicG9zaXRpb24iKT8hMTpuLnRlc3QodC5jc3MoIm92ZXJmbG93IikrdC5jc3MoIm92ZXJmbG93LXkiKSt0LmNzcygib3ZlcmZsb3cteCIpKX0pLmVxKDApO3JldHVybiJmaXhlZCIhPT1pJiZhLmxlbmd0aD9hOmUodGhpc1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudCl9LHVuaXF1ZUlkOmZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZHx8KHRoaXMuaWQ9InVpLWlkLSIrICsrZSl9KX19KCkscmVtb3ZlVW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7L151aS1pZC1cZCskLy50ZXN0KHRoaXMuaWQpJiZlKHRoaXMpLnJlbW92ZUF0dHIoImlkIil9KX19KSxlLmV4dGVuZChlLmV4cHJbIjoiXSx7ZGF0YTplLmV4cHIuY3JlYXRlUHNldWRvP2UuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiEhZS5kYXRhKGksdCl9fSk6ZnVuY3Rpb24odCxpLHMpe3JldHVybiEhZS5kYXRhKHQsc1szXSl9LGZvY3VzYWJsZTpmdW5jdGlvbihpKXtyZXR1cm4gdChpLCFpc05hTihlLmF0dHIoaSwidGFiaW5kZXgiKSkpfSx0YWJiYWJsZTpmdW5jdGlvbihpKXt2YXIgcz1lLmF0dHIoaSwidGFiaW5kZXgiKSxuPWlzTmFOKHMpO3JldHVybihufHxzPj0wKSYmdChpLCFuKX19KSxlKCI8YT4iKS5vdXRlcldpZHRoKDEpLmpxdWVyeXx8ZS5lYWNoKFsiV2lkdGgiLCJIZWlnaHQiXSxmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHModCxpLHMsYSl7cmV0dXJuIGUuZWFjaChuLGZ1bmN0aW9uKCl7aS09cGFyc2VGbG9hdChlLmNzcyh0LCJwYWRkaW5nIit0aGlzKSl8fDAscyYmKGktPXBhcnNlRmxvYXQoZS5jc3ModCwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCksYSYmKGktPXBhcnNlRmxvYXQoZS5jc3ModCwibWFyZ2luIit0aGlzKSl8fDApfSksaX12YXIgbj0iV2lkdGgiPT09aT9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl0sYT1pLnRvTG93ZXJDYXNlKCksbz17aW5uZXJXaWR0aDplLmZuLmlubmVyV2lkdGgsaW5uZXJIZWlnaHQ6ZS5mbi5pbm5lckhlaWdodCxvdXRlcldpZHRoOmUuZm4ub3V0ZXJXaWR0aCxvdXRlckhlaWdodDplLmZuLm91dGVySGVpZ2h0fTtlLmZuWyJpbm5lciIraV09ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/b1siaW5uZXIiK2ldLmNhbGwodGhpcyk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3MoYSxzKHRoaXMsdCkrInB4Iil9KX0sZS5mblsib3V0ZXIiK2ldPWZ1bmN0aW9uKHQsbil7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0P29bIm91dGVyIitpXS5jYWxsKHRoaXMsdCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3MoYSxzKHRoaXMsdCwhMCxuKSsicHgiKX0pfX0pLGUuZm4uYWRkQmFja3x8KGUuZm4uYWRkQmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9KSxlKCI8YT4iKS5kYXRhKCJhLWIiLCJhIikucmVtb3ZlRGF0YSgiYS1iIikuZGF0YSgiYS1iIikmJihlLmZuLnJlbW92ZURhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2FsbCh0aGlzLGUuY2FtZWxDYXNlKGkpKTp0LmNhbGwodGhpcyl9fShlLmZuLnJlbW92ZURhdGEpKSxlLnVpLmllPSEhL21zaWUgW1x3Ll0rLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSksZS5mbi5leHRlbmQoe2ZvY3VzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlKHQpLmZvY3VzKCkscyYmcy5jYWxsKHQpfSxpKX0pOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oZS5mbi5mb2N1cyksZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBlPSJvbnNlbGVjdHN0YXJ0ImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpPyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmluZChlKyIudWktZGlzYWJsZVNlbGVjdGlvbiIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSl9fSgpLGVuYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgiLnVpLWRpc2FibGVTZWxlY3Rpb24iKX0sekluZGV4OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpcmV0dXJuIHRoaXMuY3NzKCJ6SW5kZXgiLHQpO2lmKHRoaXMubGVuZ3RoKWZvcih2YXIgaSxzLG49ZSh0aGlzWzBdKTtuLmxlbmd0aCYmblswXSE9PWRvY3VtZW50Oyl7aWYoaT1uLmNzcygicG9zaXRpb24iKSwoImFic29sdXRlIj09PWl8fCJyZWxhdGl2ZSI9PT1pfHwiZml4ZWQiPT09aSkmJihzPXBhcnNlSW50KG4uY3NzKCJ6SW5kZXgiKSwxMCksIWlzTmFOKHMpJiYwIT09cykpcmV0dXJuIHM7bj1uLnBhcmVudCgpfXJldHVybiAwfX0pLGUudWkucGx1Z2luPXthZGQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGE9ZS51aVt0XS5wcm90b3R5cGU7Zm9yKG4gaW4gcylhLnBsdWdpbnNbbl09YS5wbHVnaW5zW25dfHxbXSxhLnBsdWdpbnNbbl0ucHVzaChbaSxzW25dXSl9LGNhbGw6ZnVuY3Rpb24oZSx0LGkscyl7dmFyIG4sYT1lLnBsdWdpbnNbdF07aWYoYSYmKHN8fGUuZWxlbWVudFswXS5wYXJlbnROb2RlJiYxMSE9PWUuZWxlbWVudFswXS5wYXJlbnROb2RlLm5vZGVUeXBlKSlmb3Iobj0wO2EubGVuZ3RoPm47bisrKWUub3B0aW9uc1thW25dWzBdXSYmYVtuXVsxXS5hcHBseShlLmVsZW1lbnQsaSl9fTt2YXIgbj0wLGE9QXJyYXkucHJvdG90eXBlLnNsaWNlO2UuY2xlYW5EYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcyxuLGE7Zm9yKGE9MDtudWxsIT0obj1pW2FdKTthKyspdHJ5e3M9ZS5fZGF0YShuLCJldmVudHMiKSxzJiZzLnJlbW92ZSYmZShuKS50cmlnZ2VySGFuZGxlcigicmVtb3ZlIil9Y2F0Y2gobyl7fXQoaSl9fShlLmNsZWFuRGF0YSksZS53aWRnZXQ9ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbyxyLGg9e30sbD10LnNwbGl0KCIuIilbMF07cmV0dXJuIHQ9dC5zcGxpdCgiLiIpWzFdLG49bCsiLSIrdCxzfHwocz1pLGk9ZS5XaWRnZXQpLGUuZXhwclsiOiJdW24udG9Mb3dlckNhc2UoKV09ZnVuY3Rpb24odCl7cmV0dXJuISFlLmRhdGEodCxuKX0sZVtsXT1lW2xdfHx7fSxhPWVbbF1bdF0sbz1lW2xdW3RdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVdpZGdldD8oYXJndW1lbnRzLmxlbmd0aCYmdGhpcy5fY3JlYXRlV2lkZ2V0KGUsdCksdm9pZCAwKTpuZXcgbyhlLHQpfSxlLmV4dGVuZChvLGEse3ZlcnNpb246cy52ZXJzaW9uLF9wcm90bzplLmV4dGVuZCh7fSxzKSxfY2hpbGRDb25zdHJ1Y3RvcnM6W119KSxyPW5ldyBpLHIub3B0aW9ucz1lLndpZGdldC5leHRlbmQoe30sci5vcHRpb25zKSxlLmVhY2gocyxmdW5jdGlvbih0LHMpe3JldHVybiBlLmlzRnVuY3Rpb24ocyk/KGhbdF09ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiBpLnByb3RvdHlwZVt0XS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG49ZnVuY3Rpb24oZSl7cmV0dXJuIGkucHJvdG90eXBlW3RdLmFwcGx5KHRoaXMsZSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciB0LGk9dGhpcy5fc3VwZXIsYT10aGlzLl9zdXBlckFwcGx5O3JldHVybiB0aGlzLl9zdXBlcj1lLHRoaXMuX3N1cGVyQXBwbHk9bix0PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3N1cGVyPWksdGhpcy5fc3VwZXJBcHBseT1hLHR9fSgpLHZvaWQgMCk6KGhbdF09cyx2b2lkIDApfSksby5wcm90b3R5cGU9ZS53aWRnZXQuZXh0ZW5kKHIse3dpZGdldEV2ZW50UHJlZml4OmE/ci53aWRnZXRFdmVudFByZWZpeHx8dDp0fSxoLHtjb25zdHJ1Y3RvcjpvLG5hbWVzcGFjZTpsLHdpZGdldE5hbWU6dCx3aWRnZXRGdWxsTmFtZTpufSksYT8oZS5lYWNoKGEuX2NoaWxkQ29uc3RydWN0b3JzLGZ1bmN0aW9uKHQsaSl7dmFyIHM9aS5wcm90b3R5cGU7ZS53aWRnZXQocy5uYW1lc3BhY2UrIi4iK3Mud2lkZ2V0TmFtZSxvLGkuX3Byb3RvKX0pLGRlbGV0ZSBhLl9jaGlsZENvbnN0cnVjdG9ycyk6aS5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaChvKSxlLndpZGdldC5icmlkZ2UodCxvKSxvfSxlLndpZGdldC5leHRlbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBpLHMsbj1hLmNhbGwoYXJndW1lbnRzLDEpLG89MCxyPW4ubGVuZ3RoO3I+bztvKyspZm9yKGkgaW4gbltvXSlzPW5bb11baV0sbltvXS5oYXNPd25Qcm9wZXJ0eShpKSYmdm9pZCAwIT09cyYmKHRbaV09ZS5pc1BsYWluT2JqZWN0KHMpP2UuaXNQbGFpbk9iamVjdCh0W2ldKT9lLndpZGdldC5leHRlbmQoe30sdFtpXSxzKTplLndpZGdldC5leHRlbmQoe30scyk6cyk7cmV0dXJuIHR9LGUud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbih0LGkpe3ZhciBzPWkucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lfHx0O2UuZm5bdF09ZnVuY3Rpb24obil7dmFyIG89InN0cmluZyI9PXR5cGVvZiBuLHI9YS5jYWxsKGFyZ3VtZW50cywxKSxoPXRoaXM7cmV0dXJuIG8/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGksYT1lLmRhdGEodGhpcyxzKTtyZXR1cm4iaW5zdGFuY2UiPT09bj8oaD1hLCExKTphP2UuaXNGdW5jdGlvbihhW25dKSYmIl8iIT09bi5jaGFyQXQoMCk/KGk9YVtuXS5hcHBseShhLHIpLGkhPT1hJiZ2b2lkIDAhPT1pPyhoPWkmJmkuanF1ZXJ5P2gucHVzaFN0YWNrKGkuZ2V0KCkpOmksITEpOnZvaWQgMCk6ZS5lcnJvcigibm8gc3VjaCBtZXRob2QgJyIrbisiJyBmb3IgIit0KyIgd2lkZ2V0IGluc3RhbmNlIik6ZS5lcnJvcigiY2Fubm90IGNhbGwgbWV0aG9kcyBvbiAiK3QrIiBwcmlvciB0byBpbml0aWFsaXphdGlvbjsgIisiYXR0ZW1wdGVkIHRvIGNhbGwgbWV0aG9kICciK24rIiciKX0pOihyLmxlbmd0aCYmKG49ZS53aWRnZXQuZXh0ZW5kLmFwcGx5KG51bGwsW25dLmNvbmNhdChyKSkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUuZGF0YSh0aGlzLHMpO3Q/KHQub3B0aW9uKG58fHt9KSx0Ll9pbml0JiZ0Ll9pbml0KCkpOmUuZGF0YSh0aGlzLHMsbmV3IGkobix0aGlzKSl9KSksaH19LGUuV2lkZ2V0PWZ1bmN0aW9uKCl7fSxlLldpZGdldC5fY2hpbGRDb25zdHJ1Y3RvcnM9W10sZS5XaWRnZXQucHJvdG90eXBlPXt3aWRnZXROYW1lOiJ3aWRnZXQiLHdpZGdldEV2ZW50UHJlZml4OiIiLGRlZmF1bHRFbGVtZW50OiI8ZGl2PiIsb3B0aW9uczp7ZGlzYWJsZWQ6ITEsY3JlYXRlOm51bGx9LF9jcmVhdGVXaWRnZXQ6ZnVuY3Rpb24odCxpKXtpPWUoaXx8dGhpcy5kZWZhdWx0RWxlbWVudHx8dGhpcylbMF0sdGhpcy5lbGVtZW50PWUoaSksdGhpcy51dWlkPW4rKyx0aGlzLmV2ZW50TmFtZXNwYWNlPSIuIit0aGlzLndpZGdldE5hbWUrdGhpcy51dWlkLHRoaXMuYmluZGluZ3M9ZSgpLHRoaXMuaG92ZXJhYmxlPWUoKSx0aGlzLmZvY3VzYWJsZT1lKCksaSE9PXRoaXMmJihlLmRhdGEoaSx0aGlzLndpZGdldEZ1bGxOYW1lLHRoaXMpLHRoaXMuX29uKCEwLHRoaXMuZWxlbWVudCx7cmVtb3ZlOmZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09aSYmdGhpcy5kZXN0cm95KCl9fSksdGhpcy5kb2N1bWVudD1lKGkuc3R5bGU/aS5vd25lckRvY3VtZW50OmkuZG9jdW1lbnR8fGkpLHRoaXMud2luZG93PWUodGhpcy5kb2N1bWVudFswXS5kZWZhdWx0Vmlld3x8dGhpcy5kb2N1bWVudFswXS5wYXJlbnRXaW5kb3cpKSx0aGlzLm9wdGlvbnM9ZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx0aGlzLl9nZXRDcmVhdGVPcHRpb25zKCksdCksdGhpcy5fY3JlYXRlKCksdGhpcy5fdHJpZ2dlcigiY3JlYXRlIixudWxsLHRoaXMuX2dldENyZWF0ZUV2ZW50RGF0YSgpKSx0aGlzLl9pbml0KCl9LF9nZXRDcmVhdGVPcHRpb25zOmUubm9vcCxfZ2V0Q3JlYXRlRXZlbnREYXRhOmUubm9vcCxfY3JlYXRlOmUubm9vcCxfaW5pdDplLm5vb3AsZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3koKSx0aGlzLmVsZW1lbnQudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZURhdGEodGhpcy53aWRnZXRGdWxsTmFtZSkucmVtb3ZlRGF0YShlLmNhbWVsQ2FzZSh0aGlzLndpZGdldEZ1bGxOYW1lKSksdGhpcy53aWRnZXQoKS51bmJpbmQodGhpcy5ldmVudE5hbWVzcGFjZSkucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLnJlbW92ZUNsYXNzKHRoaXMud2lkZ2V0RnVsbE5hbWUrIi1kaXNhYmxlZCAiKyJ1aS1zdGF0ZS1kaXNhYmxlZCIpLHRoaXMuYmluZGluZ3MudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLHRoaXMuaG92ZXJhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuZm9jdXNhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSxfZGVzdHJveTplLm5vb3Asd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudH0sb3B0aW9uOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89dDtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlmKG89e30scz10LnNwbGl0KCIuIiksdD1zLnNoaWZ0KCkscy5sZW5ndGgpe2ZvcihuPW9bdF09ZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9uc1t0XSksYT0wO3MubGVuZ3RoLTE+YTthKyspbltzW2FdXT1uW3NbYV1dfHx7fSxuPW5bc1thXV07aWYodD1zLnBvcCgpLDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1uW3RdP251bGw6blt0XTtuW3RdPWl9ZWxzZXtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09dGhpcy5vcHRpb25zW3RdP251bGw6dGhpcy5vcHRpb25zW3RdO29bdF09aX1yZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyhvKSx0aGlzfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXRoaXMuX3NldE9wdGlvbih0LGVbdF0pO3JldHVybiB0aGlzfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub3B0aW9uc1tlXT10LCJkaXNhYmxlZCI9PT1lJiYodGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lKyItZGlzYWJsZWQiLCEhdCksdCYmKHRoaXMuaG92ZXJhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuZm9jdXNhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpKSksdGhpc30sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOiExfSl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyh7ZGlzYWJsZWQ6ITB9KX0sX29uOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhPXRoaXM7ImJvb2xlYW4iIT10eXBlb2YgdCYmKHM9aSxpPXQsdD0hMSkscz8oaT1uPWUoaSksdGhpcy5iaW5kaW5ncz10aGlzLmJpbmRpbmdzLmFkZChpKSk6KHM9aSxpPXRoaXMuZWxlbWVudCxuPXRoaXMud2lkZ2V0KCkpLGUuZWFjaChzLGZ1bmN0aW9uKHMsbyl7ZnVuY3Rpb24gcigpe3JldHVybiB0fHxhLm9wdGlvbnMuZGlzYWJsZWQhPT0hMCYmIWUodGhpcykuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIik/KCJzdHJpbmciPT10eXBlb2Ygbz9hW29dOm8pLmFwcGx5KGEsYXJndW1lbnRzKTp2b2lkIDB9InN0cmluZyIhPXR5cGVvZiBvJiYoci5ndWlkPW8uZ3VpZD1vLmd1aWR8fHIuZ3VpZHx8ZS5ndWlkKyspO3ZhciBoPXMubWF0Y2goL14oW1x3Oi1dKilccyooLiopJC8pLGw9aFsxXSthLmV2ZW50TmFtZXNwYWNlLHU9aFsyXTt1P24uZGVsZWdhdGUodSxsLHIpOmkuYmluZChsLHIpfSl9LF9vZmY6ZnVuY3Rpb24odCxpKXtpPShpfHwiIikuc3BsaXQoIiAiKS5qb2luKHRoaXMuZXZlbnROYW1lc3BhY2UrIiAiKSt0aGlzLmV2ZW50TmFtZXNwYWNlLHQudW5iaW5kKGkpLnVuZGVsZWdhdGUoaSksdGhpcy5iaW5kaW5ncz1lKHRoaXMuYmluZGluZ3Mubm90KHQpLmdldCgpKSx0aGlzLmZvY3VzYWJsZT1lKHRoaXMuZm9jdXNhYmxlLm5vdCh0KS5nZXQoKSksdGhpcy5ob3ZlcmFibGU9ZSh0aGlzLmhvdmVyYWJsZS5ub3QodCkuZ2V0KCkpfSxfZGVsYXk6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7cmV0dXJuKCJzdHJpbmciPT10eXBlb2YgZT9zW2VdOmUpLmFwcGx5KHMsYXJndW1lbnRzKX12YXIgcz10aGlzO3JldHVybiBzZXRUaW1lb3V0KGksdHx8MCl9LF9ob3ZlcmFibGU6ZnVuY3Rpb24odCl7dGhpcy5ob3ZlcmFibGU9dGhpcy5ob3ZlcmFibGUuYWRkKHQpLHRoaXMuX29uKHQse21vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKX19KX0sX2ZvY3VzYWJsZTpmdW5jdGlvbih0KXt0aGlzLmZvY3VzYWJsZT10aGlzLmZvY3VzYWJsZS5hZGQodCksdGhpcy5fb24odCx7Zm9jdXNpbjpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9LGZvY3Vzb3V0OmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX19KX0sX3RyaWdnZXI6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbz10aGlzLm9wdGlvbnNbdF07aWYocz1zfHx7fSxpPWUuRXZlbnQoaSksaS50eXBlPSh0PT09dGhpcy53aWRnZXRFdmVudFByZWZpeD90OnRoaXMud2lkZ2V0RXZlbnRQcmVmaXgrdCkudG9Mb3dlckNhc2UoKSxpLnRhcmdldD10aGlzLmVsZW1lbnRbMF0sYT1pLm9yaWdpbmFsRXZlbnQpZm9yKG4gaW4gYSluIGluIGl8fChpW25dPWFbbl0pO3JldHVybiB0aGlzLmVsZW1lbnQudHJpZ2dlcihpLHMpLCEoZS5pc0Z1bmN0aW9uKG8pJiZvLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbaV0uY29uY2F0KHMpKT09PSExfHxpLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19LGUuZWFjaCh7c2hvdzoiZmFkZUluIixoaWRlOiJmYWRlT3V0In0sZnVuY3Rpb24odCxpKXtlLldpZGdldC5wcm90b3R5cGVbIl8iK3RdPWZ1bmN0aW9uKHMsbixhKXsic3RyaW5nIj09dHlwZW9mIG4mJihuPXtlZmZlY3Q6bn0pO3ZhciBvLHI9bj9uPT09ITB8fCJudW1iZXIiPT10eXBlb2Ygbj9pOm4uZWZmZWN0fHxpOnQ7bj1ufHx7fSwibnVtYmVyIj09dHlwZW9mIG4mJihuPXtkdXJhdGlvbjpufSksbz0hZS5pc0VtcHR5T2JqZWN0KG4pLG4uY29tcGxldGU9YSxuLmRlbGF5JiZzLmRlbGF5KG4uZGVsYXkpLG8mJmUuZWZmZWN0cyYmZS5lZmZlY3RzLmVmZmVjdFtyXT9zW3RdKG4pOnIhPT10JiZzW3JdP3Nbcl0obi5kdXJhdGlvbixuLmVhc2luZyxhKTpzLnF1ZXVlKGZ1bmN0aW9uKGkpe2UodGhpcylbdF0oKSxhJiZhLmNhbGwoc1swXSksaSgpfSl9fSksZS53aWRnZXQ7dmFyIG89ITE7ZShkb2N1bWVudCkubW91c2V1cChmdW5jdGlvbigpe289ITF9KSxlLndpZGdldCgidWkubW91c2UiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2NhbmNlbDoiaW5wdXQsdGV4dGFyZWEsYnV0dG9uLHNlbGVjdCxvcHRpb24iLGRpc3RhbmNlOjEsZGVsYXk6MH0sX21vdXNlSW5pdDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5lbGVtZW50LmJpbmQoIm1vdXNlZG93bi4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihlKXtyZXR1cm4gdC5fbW91c2VEb3duKGUpfSkuYmluZCgiY2xpY2suIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oaSl7cmV0dXJuITA9PT1lLmRhdGEoaS50YXJnZXQsdC53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKT8oZS5yZW1vdmVEYXRhKGkudGFyZ2V0LHQud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiksaS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwhMSk6dm9pZCAwfSksdGhpcy5zdGFydGVkPSExfSxfbW91c2VEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnVuYmluZCgiLiIrdGhpcy53aWRnZXROYW1lKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSYmdGhpcy5kb2N1bWVudC51bmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSl9LF9tb3VzZURvd246ZnVuY3Rpb24odCl7aWYoIW8pe3RoaXMuX21vdXNlTW92ZWQ9ITEsdGhpcy5fbW91c2VTdGFydGVkJiZ0aGlzLl9tb3VzZVVwKHQpLHRoaXMuX21vdXNlRG93bkV2ZW50PXQ7dmFyIGk9dGhpcyxzPTE9PT10LndoaWNoLG49InN0cmluZyI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsJiZ0LnRhcmdldC5ub2RlTmFtZT9lKHQudGFyZ2V0KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5jYW5jZWwpLmxlbmd0aDohMTtyZXR1cm4gcyYmIW4mJnRoaXMuX21vdXNlQ2FwdHVyZSh0KT8odGhpcy5tb3VzZURlbGF5TWV0PSF0aGlzLm9wdGlvbnMuZGVsYXksdGhpcy5tb3VzZURlbGF5TWV0fHwodGhpcy5fbW91c2VEZWxheVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLm1vdXNlRGVsYXlNZXQ9ITB9LHRoaXMub3B0aW9ucy5kZWxheSkpLHRoaXMuX21vdXNlRGlzdGFuY2VNZXQodCkmJnRoaXMuX21vdXNlRGVsYXlNZXQodCkmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydCh0KSE9PSExLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpPyh0LnByZXZlbnREZWZhdWx0KCksITApOighMD09PWUuZGF0YSh0LnRhcmdldCx0aGlzLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpJiZlLnJlbW92ZURhdGEodC50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZT1mdW5jdGlvbihlKXtyZXR1cm4gaS5fbW91c2VNb3ZlKGUpfSx0aGlzLl9tb3VzZVVwRGVsZWdhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuX21vdXNlVXAoZSl9LHRoaXMuZG9jdW1lbnQuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksdC5wcmV2ZW50RGVmYXVsdCgpLG89ITAsITApKTohMH19LF9tb3VzZU1vdmU6ZnVuY3Rpb24odCl7aWYodGhpcy5fbW91c2VNb3ZlZCl7aWYoZS51aS5pZSYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk+ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSYmIXQuYnV0dG9uKXJldHVybiB0aGlzLl9tb3VzZVVwKHQpO2lmKCF0LndoaWNoKXJldHVybiB0aGlzLl9tb3VzZVVwKHQpfXJldHVybih0LndoaWNofHx0LmJ1dHRvbikmJih0aGlzLl9tb3VzZU1vdmVkPSEwKSx0aGlzLl9tb3VzZVN0YXJ0ZWQ/KHRoaXMuX21vdXNlRHJhZyh0KSx0LnByZXZlbnREZWZhdWx0KCkpOih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KHQpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KHQpJiYodGhpcy5fbW91c2VTdGFydGVkPXRoaXMuX21vdXNlU3RhcnQodGhpcy5fbW91c2VEb3duRXZlbnQsdCkhPT0hMSx0aGlzLl9tb3VzZVN0YXJ0ZWQ/dGhpcy5fbW91c2VEcmFnKHQpOnRoaXMuX21vdXNlVXAodCkpLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpfSxfbW91c2VVcDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kb2N1bWVudC51bmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksdGhpcy5fbW91c2VTdGFydGVkJiYodGhpcy5fbW91c2VTdGFydGVkPSExLHQudGFyZ2V0PT09dGhpcy5fbW91c2VEb3duRXZlbnQudGFyZ2V0JiZlLmRhdGEodC50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiLCEwKSx0aGlzLl9tb3VzZVN0b3AodCkpLG89ITEsITF9LF9tb3VzZURpc3RhbmNlTWV0OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWC1lLnBhZ2VYKSxNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWS1lLnBhZ2VZKSk+PXRoaXMub3B0aW9ucy5kaXN0YW5jZX0sX21vdXNlRGVsYXlNZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbigpe30sX21vdXNlRHJhZzpmdW5jdGlvbigpe30sX21vdXNlU3RvcDpmdW5jdGlvbigpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbigpe3JldHVybiEwfX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQsaSl7cmV0dXJuW3BhcnNlRmxvYXQoZVswXSkqKHAudGVzdChlWzBdKT90LzEwMDoxKSxwYXJzZUZsb2F0KGVbMV0pKihwLnRlc3QoZVsxXSk/aS8xMDA6MSldfWZ1bmN0aW9uIGkodCxpKXtyZXR1cm4gcGFyc2VJbnQoZS5jc3ModCxpKSwxMCl8fDB9ZnVuY3Rpb24gcyh0KXt2YXIgaT10WzBdO3JldHVybiA5PT09aS5ub2RlVHlwZT97d2lkdGg6dC53aWR0aCgpLGhlaWdodDp0LmhlaWdodCgpLG9mZnNldDp7dG9wOjAsbGVmdDowfX06ZS5pc1dpbmRvdyhpKT97d2lkdGg6dC53aWR0aCgpLGhlaWdodDp0LmhlaWdodCgpLG9mZnNldDp7dG9wOnQuc2Nyb2xsVG9wKCksbGVmdDp0LnNjcm9sbExlZnQoKX19OmkucHJldmVudERlZmF1bHQ/e3dpZHRoOjAsaGVpZ2h0OjAsb2Zmc2V0Ont0b3A6aS5wYWdlWSxsZWZ0OmkucGFnZVh9fTp7d2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKSxvZmZzZXQ6dC5vZmZzZXQoKX19ZS51aT1lLnVpfHx7fTt2YXIgbixhLG89TWF0aC5tYXgscj1NYXRoLmFicyxoPU1hdGgucm91bmQsbD0vbGVmdHxjZW50ZXJ8cmlnaHQvLHU9L3RvcHxjZW50ZXJ8Ym90dG9tLyxkPS9bXCtcLV1cZCsoXC5bXGRdKyk/JT8vLGM9L15cdysvLHA9LyUkLyxmPWUuZm4ucG9zaXRpb247ZS5wb3NpdGlvbj17c2Nyb2xsYmFyV2lkdGg6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1uKXJldHVybiBuO3ZhciB0LGkscz1lKCI8ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6aGlkZGVuOyc+PGRpdiBzdHlsZT0naGVpZ2h0OjEwMHB4O3dpZHRoOmF1dG87Jz48L2Rpdj48L2Rpdj4iKSxhPXMuY2hpbGRyZW4oKVswXTtyZXR1cm4gZSgiYm9keSIpLmFwcGVuZChzKSx0PWEub2Zmc2V0V2lkdGgscy5jc3MoIm92ZXJmbG93Iiwic2Nyb2xsIiksaT1hLm9mZnNldFdpZHRoLHQ9PT1pJiYoaT1zWzBdLmNsaWVudFdpZHRoKSxzLnJlbW92ZSgpLG49dC1pfSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKHQpe3ZhciBpPXQuaXNXaW5kb3d8fHQuaXNEb2N1bWVudD8iIjp0LmVsZW1lbnQuY3NzKCJvdmVyZmxvdy14Iikscz10LmlzV2luZG93fHx0LmlzRG9jdW1lbnQ/IiI6dC5lbGVtZW50LmNzcygib3ZlcmZsb3cteSIpLG49InNjcm9sbCI9PT1pfHwiYXV0byI9PT1pJiZ0LndpZHRoPHQuZWxlbWVudFswXS5zY3JvbGxXaWR0aCxhPSJzY3JvbGwiPT09c3x8ImF1dG8iPT09cyYmdC5oZWlnaHQ8dC5lbGVtZW50WzBdLnNjcm9sbEhlaWdodDtyZXR1cm57d2lkdGg6YT9lLnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MCxoZWlnaHQ6bj9lLnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MH19LGdldFdpdGhpbkluZm86ZnVuY3Rpb24odCl7dmFyIGk9ZSh0fHx3aW5kb3cpLHM9ZS5pc1dpbmRvdyhpWzBdKSxuPSEhaVswXSYmOT09PWlbMF0ubm9kZVR5cGU7cmV0dXJue2VsZW1lbnQ6aSxpc1dpbmRvdzpzLGlzRG9jdW1lbnQ6bixvZmZzZXQ6aS5vZmZzZXQoKXx8e2xlZnQ6MCx0b3A6MH0sc2Nyb2xsTGVmdDppLnNjcm9sbExlZnQoKSxzY3JvbGxUb3A6aS5zY3JvbGxUb3AoKSx3aWR0aDpzfHxuP2kud2lkdGgoKTppLm91dGVyV2lkdGgoKSxoZWlnaHQ6c3x8bj9pLmhlaWdodCgpOmkub3V0ZXJIZWlnaHQoKX19fSxlLmZuLnBvc2l0aW9uPWZ1bmN0aW9uKG4pe2lmKCFufHwhbi5vZilyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj1lLmV4dGVuZCh7fSxuKTt2YXIgcCxtLGcsdix5LGIsXz1lKG4ub2YpLHg9ZS5wb3NpdGlvbi5nZXRXaXRoaW5JbmZvKG4ud2l0aGluKSx3PWUucG9zaXRpb24uZ2V0U2Nyb2xsSW5mbyh4KSxrPShuLmNvbGxpc2lvbnx8ImZsaXAiKS5zcGxpdCgiICIpLFQ9e307cmV0dXJuIGI9cyhfKSxfWzBdLnByZXZlbnREZWZhdWx0JiYobi5hdD0ibGVmdCB0b3AiKSxtPWIud2lkdGgsZz1iLmhlaWdodCx2PWIub2Zmc2V0LHk9ZS5leHRlbmQoe30sdiksZS5lYWNoKFsibXkiLCJhdCJdLGZ1bmN0aW9uKCl7dmFyIGUsdCxpPShuW3RoaXNdfHwiIikuc3BsaXQoIiAiKTsxPT09aS5sZW5ndGgmJihpPWwudGVzdChpWzBdKT9pLmNvbmNhdChbImNlbnRlciJdKTp1LnRlc3QoaVswXSk/WyJjZW50ZXIiXS5jb25jYXQoaSk6WyJjZW50ZXIiLCJjZW50ZXIiXSksaVswXT1sLnRlc3QoaVswXSk/aVswXToiY2VudGVyIixpWzFdPXUudGVzdChpWzFdKT9pWzFdOiJjZW50ZXIiLGU9ZC5leGVjKGlbMF0pLHQ9ZC5leGVjKGlbMV0pLFRbdGhpc109W2U/ZVswXTowLHQ/dFswXTowXSxuW3RoaXNdPVtjLmV4ZWMoaVswXSlbMF0sYy5leGVjKGlbMV0pWzBdXX0pLDE9PT1rLmxlbmd0aCYmKGtbMV09a1swXSksInJpZ2h0Ij09PW4uYXRbMF0/eS5sZWZ0Kz1tOiJjZW50ZXIiPT09bi5hdFswXSYmKHkubGVmdCs9bS8yKSwiYm90dG9tIj09PW4uYXRbMV0/eS50b3ArPWc6ImNlbnRlciI9PT1uLmF0WzFdJiYoeS50b3ArPWcvMikscD10KFQuYXQsbSxnKSx5LmxlZnQrPXBbMF0seS50b3ArPXBbMV0sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHMsbCx1PWUodGhpcyksZD11Lm91dGVyV2lkdGgoKSxjPXUub3V0ZXJIZWlnaHQoKSxmPWkodGhpcywibWFyZ2luTGVmdCIpLGI9aSh0aGlzLCJtYXJnaW5Ub3AiKSxEPWQrZitpKHRoaXMsIm1hcmdpblJpZ2h0Iikrdy53aWR0aCxTPWMrYitpKHRoaXMsIm1hcmdpbkJvdHRvbSIpK3cuaGVpZ2h0LE49ZS5leHRlbmQoe30seSksTT10KFQubXksdS5vdXRlcldpZHRoKCksdS5vdXRlckhlaWdodCgpKTsicmlnaHQiPT09bi5teVswXT9OLmxlZnQtPWQ6ImNlbnRlciI9PT1uLm15WzBdJiYoTi5sZWZ0LT1kLzIpLCJib3R0b20iPT09bi5teVsxXT9OLnRvcC09YzoiY2VudGVyIj09PW4ubXlbMV0mJihOLnRvcC09Yy8yKSxOLmxlZnQrPU1bMF0sTi50b3ArPU1bMV0sYXx8KE4ubGVmdD1oKE4ubGVmdCksTi50b3A9aChOLnRvcCkpLHM9e21hcmdpbkxlZnQ6ZixtYXJnaW5Ub3A6Yn0sZS5lYWNoKFsibGVmdCIsInRvcCJdLGZ1bmN0aW9uKHQsaSl7ZS51aS5wb3NpdGlvbltrW3RdXSYmZS51aS5wb3NpdGlvbltrW3RdXVtpXShOLHt0YXJnZXRXaWR0aDptLHRhcmdldEhlaWdodDpnLGVsZW1XaWR0aDpkLGVsZW1IZWlnaHQ6Yyxjb2xsaXNpb25Qb3NpdGlvbjpzLGNvbGxpc2lvbldpZHRoOkQsY29sbGlzaW9uSGVpZ2h0OlMsb2Zmc2V0OltwWzBdK01bMF0scFsxXStNWzFdXSxteTpuLm15LGF0Om4uYXQsd2l0aGluOngsZWxlbTp1fSl9KSxuLnVzaW5nJiYobD1mdW5jdGlvbihlKXt2YXIgdD12LmxlZnQtTi5sZWZ0LGk9dCttLWQscz12LnRvcC1OLnRvcCxhPXMrZy1jLGg9e3RhcmdldDp7ZWxlbWVudDpfLGxlZnQ6di5sZWZ0LHRvcDp2LnRvcCx3aWR0aDptLGhlaWdodDpnfSxlbGVtZW50OntlbGVtZW50OnUsbGVmdDpOLmxlZnQsdG9wOk4udG9wLHdpZHRoOmQsaGVpZ2h0OmN9LGhvcml6b250YWw6MD5pPyJsZWZ0Ijp0PjA/InJpZ2h0IjoiY2VudGVyIix2ZXJ0aWNhbDowPmE/InRvcCI6cz4wPyJib3R0b20iOiJtaWRkbGUifTtkPm0mJm0+cih0K2kpJiYoaC5ob3Jpem9udGFsPSJjZW50ZXIiKSxjPmcmJmc+cihzK2EpJiYoaC52ZXJ0aWNhbD0ibWlkZGxlIiksaC5pbXBvcnRhbnQ9byhyKHQpLHIoaSkpPm8ocihzKSxyKGEpKT8iaG9yaXpvbnRhbCI6InZlcnRpY2FsIixuLnVzaW5nLmNhbGwodGhpcyxlLGgpfSksdS5vZmZzZXQoZS5leHRlbmQoTix7dXNpbmc6bH0pKX0pfSxlLnVpLnBvc2l0aW9uPXtmaXQ6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzPXQud2l0aGluLG49cy5pc1dpbmRvdz9zLnNjcm9sbExlZnQ6cy5vZmZzZXQubGVmdCxhPXMud2lkdGgscj1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LGg9bi1yLGw9cit0LmNvbGxpc2lvbldpZHRoLWEtbjt0LmNvbGxpc2lvbldpZHRoPmE/aD4wJiYwPj1sPyhpPWUubGVmdCtoK3QuY29sbGlzaW9uV2lkdGgtYS1uLGUubGVmdCs9aC1pKTplLmxlZnQ9bD4wJiYwPj1oP246aD5sP24rYS10LmNvbGxpc2lvbldpZHRoOm46aD4wP2UubGVmdCs9aDpsPjA/ZS5sZWZ0LT1sOmUubGVmdD1vKGUubGVmdC1yLGUubGVmdCl9LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBpLHM9dC53aXRoaW4sbj1zLmlzV2luZG93P3Muc2Nyb2xsVG9wOnMub2Zmc2V0LnRvcCxhPXQud2l0aGluLmhlaWdodCxyPWUudG9wLXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wLGg9bi1yLGw9cit0LmNvbGxpc2lvbkhlaWdodC1hLW47dC5jb2xsaXNpb25IZWlnaHQ+YT9oPjAmJjA+PWw/KGk9ZS50b3AraCt0LmNvbGxpc2lvbkhlaWdodC1hLW4sZS50b3ArPWgtaSk6ZS50b3A9bD4wJiYwPj1oP246aD5sP24rYS10LmNvbGxpc2lvbkhlaWdodDpuOmg+MD9lLnRvcCs9aDpsPjA/ZS50b3AtPWw6ZS50b3A9byhlLnRvcC1yLGUudG9wKX19LGZsaXA6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG49dC53aXRoaW4sYT1uLm9mZnNldC5sZWZ0K24uc2Nyb2xsTGVmdCxvPW4ud2lkdGgsaD1uLmlzV2luZG93P24uc2Nyb2xsTGVmdDpuLm9mZnNldC5sZWZ0LGw9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCx1PWwtaCxkPWwrdC5jb2xsaXNpb25XaWR0aC1vLWgsYz0ibGVmdCI9PT10Lm15WzBdPy10LmVsZW1XaWR0aDoicmlnaHQiPT09dC5teVswXT90LmVsZW1XaWR0aDowLHA9ImxlZnQiPT09dC5hdFswXT90LnRhcmdldFdpZHRoOiJyaWdodCI9PT10LmF0WzBdPy10LnRhcmdldFdpZHRoOjAsZj0tMip0Lm9mZnNldFswXTswPnU/KGk9ZS5sZWZ0K2MrcCtmK3QuY29sbGlzaW9uV2lkdGgtby1hLCgwPml8fHIodSk+aSkmJihlLmxlZnQrPWMrcCtmKSk6ZD4wJiYocz1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0K2MrcCtmLWgsKHM+MHx8ZD5yKHMpKSYmKGUubGVmdCs9YytwK2YpKX0sdG9wOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxuPXQud2l0aGluLGE9bi5vZmZzZXQudG9wK24uc2Nyb2xsVG9wLG89bi5oZWlnaHQsaD1uLmlzV2luZG93P24uc2Nyb2xsVG9wOm4ub2Zmc2V0LnRvcCxsPWUudG9wLXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wLHU9bC1oLGQ9bCt0LmNvbGxpc2lvbkhlaWdodC1vLWgsYz0idG9wIj09PXQubXlbMV0scD1jPy10LmVsZW1IZWlnaHQ6ImJvdHRvbSI9PT10Lm15WzFdP3QuZWxlbUhlaWdodDowLGY9InRvcCI9PT10LmF0WzFdP3QudGFyZ2V0SGVpZ2h0OiJib3R0b20iPT09dC5hdFsxXT8tdC50YXJnZXRIZWlnaHQ6MCxtPS0yKnQub2Zmc2V0WzFdOzA+dT8ocz1lLnRvcCtwK2YrbSt0LmNvbGxpc2lvbkhlaWdodC1vLWEsKDA+c3x8cih1KT5zKSYmKGUudG9wKz1wK2YrbSkpOmQ+MCYmKGk9ZS50b3AtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3ArcCtmK20taCwoaT4wfHxkPnIoaSkpJiYoZS50b3ArPXArZittKSl9fSxmbGlwZml0OntsZWZ0OmZ1bmN0aW9uKCl7ZS51aS5wb3NpdGlvbi5mbGlwLmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudWkucG9zaXRpb24uZml0LmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0b3A6ZnVuY3Rpb24oKXtlLnVpLnBvc2l0aW9uLmZsaXAudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnVpLnBvc2l0aW9uLmZpdC50b3AuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19LGZ1bmN0aW9uKCl7dmFyIHQsaSxzLG4sbyxyPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0saD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocj8iZGl2IjoiYm9keSIpLHM9e3Zpc2liaWxpdHk6ImhpZGRlbiIsd2lkdGg6MCxoZWlnaHQ6MCxib3JkZXI6MCxtYXJnaW46MCxiYWNrZ3JvdW5kOiJub25lIn0sciYmZS5leHRlbmQocyx7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiItMTAwMHB4Iix0b3A6Ii0xMDAwcHgifSk7Zm9yKG8gaW4gcyl0LnN0eWxlW29dPXNbb107dC5hcHBlbmRDaGlsZChoKSxpPXJ8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpLmluc2VydEJlZm9yZSh0LGkuZmlyc3RDaGlsZCksaC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEwLjc0MzIyMjJweDsiLG49ZShoKS5vZmZzZXQoKS5sZWZ0LGE9bj4xMCYmMTE+bix0LmlubmVySFRNTD0iIixpLnJlbW92ZUNoaWxkKHQpfSgpfSgpLGUudWkucG9zaXRpb24sZS53aWRnZXQoInVpLmRyYWdnYWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40Iix3aWRnZXRFdmVudFByZWZpeDoiZHJhZyIsb3B0aW9uczp7YWRkQ2xhc3NlczohMCxhcHBlbmRUbzoicGFyZW50IixheGlzOiExLGNvbm5lY3RUb1NvcnRhYmxlOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjoiYXV0byIsY3Vyc29yQXQ6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOiJvcmlnaW5hbCIsaWZyYW1lRml4OiExLG9wYWNpdHk6ITEscmVmcmVzaFBvc2l0aW9uczohMSxyZXZlcnQ6ITEscmV2ZXJ0RHVyYXRpb246NTAwLHNjb3BlOiJkZWZhdWx0IixzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc25hcDohMSxzbmFwTW9kZToiYm90aCIsc25hcFRvbGVyYW5jZToyMCxzdGFjazohMSx6SW5kZXg6ITEsZHJhZzpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7Im9yaWdpbmFsIj09PXRoaXMub3B0aW9ucy5oZWxwZXImJnRoaXMuX3NldFBvc2l0aW9uUmVsYXRpdmUoKSx0aGlzLm9wdGlvbnMuYWRkQ2xhc3NlcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUiKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VJbml0KCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJoYW5kbGUiPT09ZSYmKHRoaXMuX3JlbW92ZUhhbmRsZUNsYXNzTmFtZSgpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVudCkuaXMoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKT8odGhpcy5kZXN0cm95T25DbGVhcj0hMCx2b2lkIDApOih0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZSB1aS1kcmFnZ2FibGUtZHJhZ2dpbmcgdWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VEZXN0cm95KCksdm9pZCAwKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX2JsdXJBY3RpdmVFbGVtZW50KHQpLHRoaXMuaGVscGVyfHxpLmRpc2FibGVkfHxlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktcmVzaXphYmxlLWhhbmRsZSIpLmxlbmd0aD4wPyExOih0aGlzLmhhbmRsZT10aGlzLl9nZXRIYW5kbGUodCksdGhpcy5oYW5kbGU/KHRoaXMuX2Jsb2NrRnJhbWVzKGkuaWZyYW1lRml4PT09ITA/ImlmcmFtZSI6aS5pZnJhbWVGaXgpLCEwKTohMSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbih0KXt0aGlzLmlmcmFtZUJsb2Nrcz10aGlzLmRvY3VtZW50LmZpbmQodCkubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZSgiPGRpdj4iKS5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5hcHBlbmRUbyh0LnBhcmVudCgpKS5vdXRlcldpZHRoKHQub3V0ZXJXaWR0aCgpKS5vdXRlckhlaWdodCh0Lm91dGVySGVpZ2h0KCkpLm9mZnNldCh0Lm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2JsdXJBY3RpdmVFbGVtZW50OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZG9jdW1lbnRbMF07aWYodGhpcy5oYW5kbGVFbGVtZW50LmlzKHQudGFyZ2V0KSl0cnl7aS5hY3RpdmVFbGVtZW50JiYiYm9keSIhPT1pLmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZShpLmFjdGl2ZUVsZW1lbnQpLmJsdXIoKX1jYXRjaChzKXt9fSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcih0KSx0aGlzLmhlbHBlci5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRyYWdnaW5nIiksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLGUudWkuZGRtYW5hZ2VyJiYoZS51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoITApLHRoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpLHRoaXMuaGFzRml4ZWRBbmNlc3Rvcj10aGlzLmhlbHBlci5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImZpeGVkIj09PWUodGhpcykuY3NzKCJwb3NpdGlvbiIpfSkubGVuZ3RoPjAsdGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fcmVmcmVzaE9mZnNldHModCksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbih0LCExKSx0aGlzLm9yaWdpbmFsUGFnZVg9dC5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9dC5wYWdlWSxpLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGkuY3Vyc29yQXQpLHRoaXMuX3NldENvbnRhaW5tZW50KCksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQpPT09ITE/KHRoaXMuX2NsZWFyKCksITEpOih0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksZS51aS5kZG1hbmFnZXImJiFpLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCksdGhpcy5fbm9ybWFsaXplUmlnaHRCb3R0b20oKSx0aGlzLl9tb3VzZURyYWcodCwhMCksZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLHQpLCEwKX0sX3JlZnJlc2hPZmZzZXRzOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0PXt0b3A6dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMucG9zaXRpb25BYnMubGVmdC10aGlzLm1hcmdpbnMubGVmdCxzY3JvbGw6ITEscGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9LHRoaXMub2Zmc2V0LmNsaWNrPXtsZWZ0OmUucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6ZS5wYWdlWS10aGlzLm9mZnNldC50b3B9fSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQsaSl7aWYodGhpcy5oYXNGaXhlZEFuY2VzdG9yJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKSx0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCwhMCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSwhaSl7dmFyIHM9dGhpcy5fdWlIYXNoKCk7aWYodGhpcy5fdHJpZ2dlcigiZHJhZyIsdCxzKT09PSExKXJldHVybiB0aGlzLl9tb3VzZVVwKHt9KSwhMTt0aGlzLnBvc2l0aW9uPXMucG9zaXRpb259cmV0dXJuIHRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIsdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIsZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyx0KSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLHM9ITE7cmV0dXJuIGUudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJihzPWUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSksdGhpcy5kcm9wcGVkJiYocz10aGlzLmRyb3BwZWQsdGhpcy5kcm9wcGVkPSExKSwiaW52YWxpZCI9PT10aGlzLm9wdGlvbnMucmV2ZXJ0JiYhc3x8InZhbGlkIj09PXRoaXMub3B0aW9ucy5yZXZlcnQmJnN8fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT0hMHx8ZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LHMpP2UodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXtpLl90cmlnZ2VyKCJzdG9wIix0KSE9PSExJiZpLl9jbGVhcigpfSk6dGhpcy5fdHJpZ2dlcigic3RvcCIsdCkhPT0hMSYmdGhpcy5fY2xlYXIoKSwhMX0sX21vdXNlVXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VuYmxvY2tGcmFtZXMoKSxlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZ1N0b3AodGhpcyx0KSx0aGlzLmhhbmRsZUVsZW1lbnQuaXModC50YXJnZXQpJiZ0aGlzLmVsZW1lbnQuZm9jdXMoKSxlLnVpLm1vdXNlLnByb3RvdHlwZS5fbW91c2VVcC5jYWxsKHRoaXMsdCl9LGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlbHBlci5pcygiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpP3RoaXMuX21vdXNlVXAoe30pOnRoaXMuX2NsZWFyKCksdGhpc30sX2dldEhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmhhbmRsZT8hIWUodC50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhhbmRsZSkpLmxlbmd0aDohMH0sX3NldEhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlRWxlbWVudD10aGlzLm9wdGlvbnMuaGFuZGxlP3RoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oYW5kbGUpOnRoaXMuZWxlbWVudCx0aGlzLmhhbmRsZUVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1oYW5kbGUiKX0sX3JlbW92ZUhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlRWxlbWVudC5yZW1vdmVDbGFzcygidWktZHJhZ2dhYmxlLWhhbmRsZSIpfSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucyxzPWUuaXNGdW5jdGlvbihpLmhlbHBlciksbj1zP2UoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFt0XSkpOiJjbG9uZSI9PT1pLmhlbHBlcj90aGlzLmVsZW1lbnQuY2xvbmUoKS5yZW1vdmVBdHRyKCJpZCIpOnRoaXMuZWxlbWVudDtyZXR1cm4gbi5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxuLmFwcGVuZFRvKCJwYXJlbnQiPT09aS5hcHBlbmRUbz90aGlzLmVsZW1lbnRbMF0ucGFyZW50Tm9kZTppLmFwcGVuZFRvKSxzJiZuWzBdPT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9zZXRQb3NpdGlvblJlbGF0aXZlKCksblswXT09PXRoaXMuZWxlbWVudFswXXx8LyhmaXhlZHxhYnNvbHV0ZSkvLnRlc3Qobi5jc3MoInBvc2l0aW9uIikpfHxuLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpLG59LF9zZXRQb3NpdGlvblJlbGF0aXZlOmZ1bmN0aW9uKCl7L14oPzpyfGF8ZikvLnRlc3QodGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSl8fCh0aGlzLmVsZW1lbnRbMF0uc3R5bGUucG9zaXRpb249InJlbGF0aXZlIil9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5zcGxpdCgiICIpKSxlLmlzQXJyYXkodCkmJih0PXtsZWZ0Oit0WzBdLHRvcDordFsxXXx8MH0pLCJsZWZ0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXQubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXQudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10LmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2lzUm9vdE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuLyhodG1sfGJvZHkpL2kudGVzdChlLnRhZ05hbWUpfHxlPT09dGhpcy5kb2N1bWVudFswXX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpLGk9dGhpcy5kb2N1bWVudFswXTtyZXR1cm4iYWJzb2x1dGUiPT09dGhpcy5jc3NQb3NpdGlvbiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT1pJiZlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKHQubGVmdCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLHQudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksdGhpcy5faXNSb290Tm9kZSh0aGlzLm9mZnNldFBhcmVudFswXSkmJih0PXt0b3A6MCxsZWZ0OjB9KSx7dG9wOnQudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSxsZWZ0OnQubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoInJlbGF0aXZlIiE9PXRoaXMuY3NzUG9zaXRpb24pcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIGU9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCksdD10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrKHQ/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrKHQ/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCkpfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5MZWZ0IiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDAscmlnaHQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSwxMCl8fDAsYm90dG9tOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpbkJvdHRvbSIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG49dGhpcy5vcHRpb25zLGE9dGhpcy5kb2N1bWVudFswXTtyZXR1cm4gdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1udWxsLG4uY29udGFpbm1lbnQ/IndpbmRvdyI9PT1uLmNvbnRhaW5tZW50Pyh0aGlzLmNvbnRhaW5tZW50PVtlKHdpbmRvdykuc2Nyb2xsTGVmdCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsZSh3aW5kb3cpLnNjcm9sbFRvcCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLGUod2luZG93KS5zY3JvbGxMZWZ0KCkrZSh3aW5kb3cpLndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCxlKHdpbmRvdykuc2Nyb2xsVG9wKCkrKGUod2luZG93KS5oZWlnaHQoKXx8YS5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSx2b2lkIDApOiJkb2N1bWVudCI9PT1uLmNvbnRhaW5tZW50Pyh0aGlzLmNvbnRhaW5tZW50PVswLDAsZShhKS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKGUoYSkuaGVpZ2h0KCl8fGEuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0sdm9pZCAwKTpuLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yPT09QXJyYXk/KHRoaXMuY29udGFpbm1lbnQ9bi5jb250YWlubWVudCx2b2lkIDApOigicGFyZW50Ij09PW4uY29udGFpbm1lbnQmJihuLmNvbnRhaW5tZW50PXRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLGk9ZShuLmNvbnRhaW5tZW50KSxzPWlbMF0scyYmKHQ9LyhzY3JvbGx8YXV0bykvLnRlc3QoaS5jc3MoIm92ZXJmbG93IikpLHRoaXMuY29udGFpbm1lbnQ9WyhwYXJzZUludChpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKSwocGFyc2VJbnQoaS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLCh0P01hdGgubWF4KHMuc2Nyb2xsV2lkdGgscy5vZmZzZXRXaWR0aCk6cy5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGkuY3NzKCJib3JkZXJSaWdodFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdSaWdodCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdC10aGlzLm1hcmdpbnMucmlnaHQsKHQ/TWF0aC5tYXgocy5zY3JvbGxIZWlnaHQscy5vZmZzZXRIZWlnaHQpOnMub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoaS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3AtdGhpcy5tYXJnaW5zLmJvdHRvbV0sdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1pKSx2b2lkIDApOih0aGlzLmNvbnRhaW5tZW50PW51bGwsdm9pZCAwKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKGUsdCl7dHx8KHQ9dGhpcy5wb3NpdGlvbik7dmFyIGk9ImFic29sdXRlIj09PWU/MTotMSxzPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pO3JldHVybnt0b3A6dC50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKmkrdGhpcy5vZmZzZXQucGFyZW50LnRvcCppLSgiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLnRvcDpzPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCkqaSxsZWZ0OnQubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KmkrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqaS0oImZpeGVkIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0OnM/MDp0aGlzLm9mZnNldC5zY3JvbGwubGVmdCkqaX19LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxuLGEsbz10aGlzLm9wdGlvbnMscj10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKSxoPWUucGFnZVgsbD1lLnBhZ2VZO3JldHVybiByJiZ0aGlzLm9mZnNldC5zY3JvbGx8fCh0aGlzLm9mZnNldC5zY3JvbGw9e3RvcDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSxsZWZ0OnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX0pLHQmJih0aGlzLmNvbnRhaW5tZW50JiYodGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj8ocz10aGlzLnJlbGF0aXZlQ29udGFpbmVyLm9mZnNldCgpLGk9W3RoaXMuY29udGFpbm1lbnRbMF0rcy5sZWZ0LHRoaXMuY29udGFpbm1lbnRbMV0rcy50b3AsdGhpcy5jb250YWlubWVudFsyXStzLmxlZnQsdGhpcy5jb250YWlubWVudFszXStzLnRvcF0pOmk9dGhpcy5jb250YWlubWVudCxlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8aVswXSYmKGg9aVswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSxlLnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDxpWzFdJiYobD1pWzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksZS5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PmlbMl0mJihoPWlbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksZS5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+aVszXSYmKGw9aVszXSt0aGlzLm9mZnNldC5jbGljay50b3ApKSxvLmdyaWQmJihuPW8uZ3JpZFsxXT90aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgobC10aGlzLm9yaWdpbmFsUGFnZVkpL28uZ3JpZFsxXSkqby5ncmlkWzFdOnRoaXMub3JpZ2luYWxQYWdlWSxsPWk/bi10aGlzLm9mZnNldC5jbGljay50b3A+PWlbMV18fG4tdGhpcy5vZmZzZXQuY2xpY2sudG9wPmlbM10/bjpuLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49aVsxXT9uLW8uZ3JpZFsxXTpuK28uZ3JpZFsxXTpuLGE9by5ncmlkWzBdP3RoaXMub3JpZ2luYWxQYWdlWCtNYXRoLnJvdW5kKChoLXRoaXMub3JpZ2luYWxQYWdlWCkvby5ncmlkWzBdKSpvLmdyaWRbMF06dGhpcy5vcmlnaW5hbFBhZ2VYLGg9aT9hLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PWlbMF18fGEtdGhpcy5vZmZzZXQuY2xpY2subGVmdD5pWzJdP2E6YS10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj1pWzBdP2Etby5ncmlkWzBdOmErby5ncmlkWzBdOmEpLCJ5Ij09PW8uYXhpcyYmKGg9dGhpcy5vcmlnaW5hbFBhZ2VYKSwieCI9PT1vLmF4aXMmJihsPXRoaXMub3JpZ2luYWxQYWdlWSkpLHt0b3A6bC10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwudG9wOnI/MDp0aGlzLm9mZnNldC5zY3JvbGwudG9wKSxsZWZ0OmgtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KygiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQ6cj8wOnRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0KX19LF9jbGVhcjpmdW5jdGlvbigpe3RoaXMuaGVscGVyLnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSx0aGlzLmhlbHBlclswXT09PXRoaXMuZWxlbWVudFswXXx8dGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfHx0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLmRlc3Ryb3lPbkNsZWFyJiZ0aGlzLmRlc3Ryb3koKX0sX25vcm1hbGl6ZVJpZ2h0Qm90dG9tOmZ1bmN0aW9uKCl7InkiIT09dGhpcy5vcHRpb25zLmF4aXMmJiJhdXRvIiE9PXRoaXMuaGVscGVyLmNzcygicmlnaHQiKSYmKHRoaXMuaGVscGVyLndpZHRoKHRoaXMuaGVscGVyLndpZHRoKCkpLHRoaXMuaGVscGVyLmNzcygicmlnaHQiLCJhdXRvIikpLCJ4IiE9PXRoaXMub3B0aW9ucy5heGlzJiYiYXV0byIhPT10aGlzLmhlbHBlci5jc3MoImJvdHRvbSIpJiYodGhpcy5oZWxwZXIuaGVpZ2h0KHRoaXMuaGVscGVyLmhlaWdodCgpKSx0aGlzLmhlbHBlci5jc3MoImJvdHRvbSIsImF1dG8iKSl9LF90cmlnZ2VyOmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4gcz1zfHx0aGlzLl91aUhhc2goKSxlLnVpLnBsdWdpbi5jYWxsKHRoaXMsdCxbaSxzLHRoaXNdLCEwKSwvXihkcmFnfHN0YXJ0fHN0b3ApLy50ZXN0KHQpJiYodGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSxzLm9mZnNldD10aGlzLnBvc2l0aW9uQWJzKSxlLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuY2FsbCh0aGlzLHQsaSxzKX0scGx1Z2luczp7fSxfdWlIYXNoOmZ1bmN0aW9uKCl7cmV0dXJue2hlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9uLG9mZnNldDp0aGlzLnBvc2l0aW9uQWJzfX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImNvbm5lY3RUb1NvcnRhYmxlIix7c3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPWUuZXh0ZW5kKHt9LGkse2l0ZW06cy5lbGVtZW50fSk7cy5zb3J0YWJsZXM9W10sZShzLm9wdGlvbnMuY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLnNvcnRhYmxlKCJpbnN0YW5jZSIpO2kmJiFpLm9wdGlvbnMuZGlzYWJsZWQmJihzLnNvcnRhYmxlcy5wdXNoKGkpLGkucmVmcmVzaFBvc2l0aW9ucygpLGkuX3RyaWdnZXIoImFjdGl2YXRlIix0LG4pKX0pfSxzdG9wOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lLmV4dGVuZCh7fSxpLHtpdGVtOnMuZWxlbWVudH0pO3MuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSxlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuaXNPdmVyPyhlLmlzT3Zlcj0wLHMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCxlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsZS5fc3RvcmVkQ1NTPXtwb3NpdGlvbjplLnBsYWNlaG9sZGVyLmNzcygicG9zaXRpb24iKSx0b3A6ZS5wbGFjZWhvbGRlci5jc3MoInRvcCIpLGxlZnQ6ZS5wbGFjZWhvbGRlci5jc3MoImxlZnQiKX0sZS5fbW91c2VTdG9wKHQpLGUub3B0aW9ucy5oZWxwZXI9ZS5vcHRpb25zLl9oZWxwZXIpOihlLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCxuKSl9KX0sZHJhZzpmdW5jdGlvbih0LGkscyl7ZS5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7dmFyIG49ITEsYT10aGlzO2EucG9zaXRpb25BYnM9cy5wb3NpdGlvbkFicyxhLmhlbHBlclByb3BvcnRpb25zPXMuaGVscGVyUHJvcG9ydGlvbnMsYS5vZmZzZXQuY2xpY2s9cy5vZmZzZXQuY2xpY2ssYS5faW50ZXJzZWN0c1dpdGgoYS5jb250YWluZXJDYWNoZSkmJihuPSEwLGUuZWFjaChzLnNvcnRhYmxlcyxmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uQWJzPXMucG9zaXRpb25BYnMsdGhpcy5oZWxwZXJQcm9wb3J0aW9ucz1zLmhlbHBlclByb3BvcnRpb25zLHRoaXMub2Zmc2V0LmNsaWNrPXMub2Zmc2V0LmNsaWNrLHRoaXMhPT1hJiZ0aGlzLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmNvbnRhaW5lckNhY2hlKSYmZS5jb250YWlucyhhLmVsZW1lbnRbMF0sdGhpcy5lbGVtZW50WzBdKSYmKG49ITEpLG4KfSkpLG4/KGEuaXNPdmVyfHwoYS5pc092ZXI9MSxzLl9wYXJlbnQ9aS5oZWxwZXIucGFyZW50KCksYS5jdXJyZW50SXRlbT1pLmhlbHBlci5hcHBlbmRUbyhhLmVsZW1lbnQpLmRhdGEoInVpLXNvcnRhYmxlLWl0ZW0iLCEwKSxhLm9wdGlvbnMuX2hlbHBlcj1hLm9wdGlvbnMuaGVscGVyLGEub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaS5oZWxwZXJbMF19LHQudGFyZ2V0PWEuY3VycmVudEl0ZW1bMF0sYS5fbW91c2VDYXB0dXJlKHQsITApLGEuX21vdXNlU3RhcnQodCwhMCwhMCksYS5vZmZzZXQuY2xpY2sudG9wPXMub2Zmc2V0LmNsaWNrLnRvcCxhLm9mZnNldC5jbGljay5sZWZ0PXMub2Zmc2V0LmNsaWNrLmxlZnQsYS5vZmZzZXQucGFyZW50LmxlZnQtPXMub2Zmc2V0LnBhcmVudC5sZWZ0LWEub2Zmc2V0LnBhcmVudC5sZWZ0LGEub2Zmc2V0LnBhcmVudC50b3AtPXMub2Zmc2V0LnBhcmVudC50b3AtYS5vZmZzZXQucGFyZW50LnRvcCxzLl90cmlnZ2VyKCJ0b1NvcnRhYmxlIix0KSxzLmRyb3BwZWQ9YS5lbGVtZW50LGUuZWFjaChzLnNvcnRhYmxlcyxmdW5jdGlvbigpe3RoaXMucmVmcmVzaFBvc2l0aW9ucygpfSkscy5jdXJyZW50SXRlbT1zLmVsZW1lbnQsYS5mcm9tT3V0c2lkZT1zKSxhLmN1cnJlbnRJdGVtJiYoYS5fbW91c2VEcmFnKHQpLGkucG9zaXRpb249YS5wb3NpdGlvbikpOmEuaXNPdmVyJiYoYS5pc092ZXI9MCxhLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsYS5vcHRpb25zLl9yZXZlcnQ9YS5vcHRpb25zLnJldmVydCxhLm9wdGlvbnMucmV2ZXJ0PSExLGEuX3RyaWdnZXIoIm91dCIsdCxhLl91aUhhc2goYSkpLGEuX21vdXNlU3RvcCh0LCEwKSxhLm9wdGlvbnMucmV2ZXJ0PWEub3B0aW9ucy5fcmV2ZXJ0LGEub3B0aW9ucy5oZWxwZXI9YS5vcHRpb25zLl9oZWxwZXIsYS5wbGFjZWhvbGRlciYmYS5wbGFjZWhvbGRlci5yZW1vdmUoKSxpLmhlbHBlci5hcHBlbmRUbyhzLl9wYXJlbnQpLHMuX3JlZnJlc2hPZmZzZXRzKHQpLGkucG9zaXRpb249cy5fZ2VuZXJhdGVQb3NpdGlvbih0LCEwKSxzLl90cmlnZ2VyKCJmcm9tU29ydGFibGUiLHQpLHMuZHJvcHBlZD0hMSxlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX0pKX0pfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiY3Vyc29yIix7c3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPWUoImJvZHkiKSxhPXMub3B0aW9ucztuLmNzcygiY3Vyc29yIikmJihhLl9jdXJzb3I9bi5jc3MoImN1cnNvciIpKSxuLmNzcygiY3Vyc29yIixhLmN1cnNvcil9LHN0b3A6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl9jdXJzb3ImJmUoImJvZHkiKS5jc3MoImN1cnNvciIsbi5fY3Vyc29yKX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsIm9wYWNpdHkiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG49ZShpLmhlbHBlciksYT1zLm9wdGlvbnM7bi5jc3MoIm9wYWNpdHkiKSYmKGEuX29wYWNpdHk9bi5jc3MoIm9wYWNpdHkiKSksbi5jc3MoIm9wYWNpdHkiLGEub3BhY2l0eSl9LHN0b3A6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl9vcGFjaXR5JiZlKGkuaGVscGVyKS5jc3MoIm9wYWNpdHkiLG4uX29wYWNpdHkpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwic2Nyb2xsIix7c3RhcnQ6ZnVuY3Rpb24oZSx0LGkpe2kuc2Nyb2xsUGFyZW50Tm90SGlkZGVufHwoaS5zY3JvbGxQYXJlbnROb3RIaWRkZW49aS5oZWxwZXIuc2Nyb2xsUGFyZW50KCExKSksaS5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0hPT1pLmRvY3VtZW50WzBdJiYiSFRNTCIhPT1pLnNjcm9sbFBhcmVudE5vdEhpZGRlblswXS50YWdOYW1lJiYoaS5vdmVyZmxvd09mZnNldD1pLnNjcm9sbFBhcmVudE5vdEhpZGRlbi5vZmZzZXQoKSl9LGRyYWc6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucyxhPSExLG89cy5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0scj1zLmRvY3VtZW50WzBdO28hPT1yJiYiSFRNTCIhPT1vLnRhZ05hbWU/KG4uYXhpcyYmIngiPT09bi5heGlzfHwocy5vdmVyZmxvd09mZnNldC50b3Arby5vZmZzZXRIZWlnaHQtdC5wYWdlWTxuLnNjcm9sbFNlbnNpdGl2aXR5P28uc2Nyb2xsVG9wPWE9by5zY3JvbGxUb3Arbi5zY3JvbGxTcGVlZDp0LnBhZ2VZLXMub3ZlcmZsb3dPZmZzZXQudG9wPG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihvLnNjcm9sbFRvcD1hPW8uc2Nyb2xsVG9wLW4uc2Nyb2xsU3BlZWQpKSxuLmF4aXMmJiJ5Ij09PW4uYXhpc3x8KHMub3ZlcmZsb3dPZmZzZXQubGVmdCtvLm9mZnNldFdpZHRoLXQucGFnZVg8bi5zY3JvbGxTZW5zaXRpdml0eT9vLnNjcm9sbExlZnQ9YT1vLnNjcm9sbExlZnQrbi5zY3JvbGxTcGVlZDp0LnBhZ2VYLXMub3ZlcmZsb3dPZmZzZXQubGVmdDxuLnNjcm9sbFNlbnNpdGl2aXR5JiYoby5zY3JvbGxMZWZ0PWE9by5zY3JvbGxMZWZ0LW4uc2Nyb2xsU3BlZWQpKSk6KG4uYXhpcyYmIngiPT09bi5heGlzfHwodC5wYWdlWS1lKHIpLnNjcm9sbFRvcCgpPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/YT1lKHIpLnNjcm9sbFRvcChlKHIpLnNjcm9sbFRvcCgpLW4uc2Nyb2xsU3BlZWQpOmUod2luZG93KS5oZWlnaHQoKS0odC5wYWdlWS1lKHIpLnNjcm9sbFRvcCgpKTxuLnNjcm9sbFNlbnNpdGl2aXR5JiYoYT1lKHIpLnNjcm9sbFRvcChlKHIpLnNjcm9sbFRvcCgpK24uc2Nyb2xsU3BlZWQpKSksbi5heGlzJiYieSI9PT1uLmF4aXN8fCh0LnBhZ2VYLWUocikuc2Nyb2xsTGVmdCgpPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/YT1lKHIpLnNjcm9sbExlZnQoZShyKS5zY3JvbGxMZWZ0KCktbi5zY3JvbGxTcGVlZCk6ZSh3aW5kb3cpLndpZHRoKCktKHQucGFnZVgtZShyKS5zY3JvbGxMZWZ0KCkpPG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihhPWUocikuc2Nyb2xsTGVmdChlKHIpLnNjcm9sbExlZnQoKStuLnNjcm9sbFNwZWVkKSkpKSxhIT09ITEmJmUudWkuZGRtYW5hZ2VyJiYhbi5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhzLHQpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwic25hcCIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1zLm9wdGlvbnM7cy5zbmFwRWxlbWVudHM9W10sZShuLnNuYXAuY29uc3RydWN0b3IhPT1TdHJpbmc/bi5zbmFwLml0ZW1zfHwiOmRhdGEodWktZHJhZ2dhYmxlKSI6bi5zbmFwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxpPXQub2Zmc2V0KCk7dGhpcyE9PXMuZWxlbWVudFswXSYmcy5zbmFwRWxlbWVudHMucHVzaCh7aXRlbTp0aGlzLHdpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCksdG9wOmkudG9wLGxlZnQ6aS5sZWZ0fSl9KX0sZHJhZzpmdW5jdGlvbih0LGkscyl7dmFyIG4sYSxvLHIsaCxsLHUsZCxjLHAsZj1zLm9wdGlvbnMsbT1mLnNuYXBUb2xlcmFuY2UsZz1pLm9mZnNldC5sZWZ0LHY9ZytzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLHk9aS5vZmZzZXQudG9wLGI9eStzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodDtmb3IoYz1zLnNuYXBFbGVtZW50cy5sZW5ndGgtMTtjPj0wO2MtLSloPXMuc25hcEVsZW1lbnRzW2NdLmxlZnQtcy5tYXJnaW5zLmxlZnQsbD1oK3Muc25hcEVsZW1lbnRzW2NdLndpZHRoLHU9cy5zbmFwRWxlbWVudHNbY10udG9wLXMubWFyZ2lucy50b3AsZD11K3Muc25hcEVsZW1lbnRzW2NdLmhlaWdodCxoLW0+dnx8Zz5sK218fHUtbT5ifHx5PmQrbXx8IWUuY29udGFpbnMocy5zbmFwRWxlbWVudHNbY10uaXRlbS5vd25lckRvY3VtZW50LHMuc25hcEVsZW1lbnRzW2NdLml0ZW0pPyhzLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZyYmcy5vcHRpb25zLnNuYXAucmVsZWFzZSYmcy5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKHMuZWxlbWVudCx0LGUuZXh0ZW5kKHMuX3VpSGFzaCgpLHtzbmFwSXRlbTpzLnNuYXBFbGVtZW50c1tjXS5pdGVtfSkpLHMuc25hcEVsZW1lbnRzW2NdLnNuYXBwaW5nPSExKTooImlubmVyIiE9PWYuc25hcE1vZGUmJihuPW0+PU1hdGguYWJzKHUtYiksYT1tPj1NYXRoLmFicyhkLXkpLG89bT49TWF0aC5hYnMoaC12KSxyPW0+PU1hdGguYWJzKGwtZyksbiYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDp1LXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcCksYSYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpkLGxlZnQ6MH0pLnRvcCksbyYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0Omgtcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aH0pLmxlZnQpLHImJihpLnBvc2l0aW9uLmxlZnQ9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpsfSkubGVmdCkpLHA9bnx8YXx8b3x8ciwib3V0ZXIiIT09Zi5zbmFwTW9kZSYmKG49bT49TWF0aC5hYnModS15KSxhPW0+PU1hdGguYWJzKGQtYiksbz1tPj1NYXRoLmFicyhoLWcpLHI9bT49TWF0aC5hYnMobC12KSxuJiYoaS5wb3NpdGlvbi50b3A9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOnUsbGVmdDowfSkudG9wKSxhJiYoaS5wb3NpdGlvbi50b3A9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOmQtcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbGVmdDowfSkudG9wKSxvJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6aH0pLmxlZnQpLHImJihpLnBvc2l0aW9uLmxlZnQ9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpsLXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0KSksIXMuc25hcEVsZW1lbnRzW2NdLnNuYXBwaW5nJiYobnx8YXx8b3x8cnx8cCkmJnMub3B0aW9ucy5zbmFwLnNuYXAmJnMub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChzLmVsZW1lbnQsdCxlLmV4dGVuZChzLl91aUhhc2goKSx7c25hcEl0ZW06cy5zbmFwRWxlbWVudHNbY10uaXRlbX0pKSxzLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZz1ufHxhfHxvfHxyfHxwKX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInN0YWNrIix7c3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGE9cy5vcHRpb25zLG89ZS5tYWtlQXJyYXkoZShhLnN0YWNrKSkuc29ydChmdW5jdGlvbih0LGkpe3JldHVybihwYXJzZUludChlKHQpLmNzcygiekluZGV4IiksMTApfHwwKS0ocGFyc2VJbnQoZShpKS5jc3MoInpJbmRleCIpLDEwKXx8MCl9KTtvLmxlbmd0aCYmKG49cGFyc2VJbnQoZShvWzBdKS5jc3MoInpJbmRleCIpLDEwKXx8MCxlKG8pLmVhY2goZnVuY3Rpb24odCl7ZSh0aGlzKS5jc3MoInpJbmRleCIsbit0KX0pLHRoaXMuY3NzKCJ6SW5kZXgiLG4rby5sZW5ndGgpKX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInpJbmRleCIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lKGkuaGVscGVyKSxhPXMub3B0aW9ucztuLmNzcygiekluZGV4IikmJihhLl96SW5kZXg9bi5jc3MoInpJbmRleCIpKSxuLmNzcygiekluZGV4IixhLnpJbmRleCl9LHN0b3A6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl96SW5kZXgmJmUoaS5oZWxwZXIpLmNzcygiekluZGV4IixuLl96SW5kZXgpfX0pLGUudWkuZHJhZ2dhYmxlLGUud2lkZ2V0KCJ1aS5kcm9wcGFibGUiLHt2ZXJzaW9uOiIxLjExLjQiLHdpZGdldEV2ZW50UHJlZml4OiJkcm9wIixvcHRpb25zOnthY2NlcHQ6IioiLGFjdGl2ZUNsYXNzOiExLGFkZENsYXNzZXM6ITAsZ3JlZWR5OiExLGhvdmVyQ2xhc3M6ITEsc2NvcGU6ImRlZmF1bHQiLHRvbGVyYW5jZToiaW50ZXJzZWN0IixhY3RpdmF0ZTpudWxsLGRlYWN0aXZhdGU6bnVsbCxkcm9wOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLm9wdGlvbnMscz1pLmFjY2VwdDt0aGlzLmlzb3Zlcj0hMSx0aGlzLmlzb3V0PSEwLHRoaXMuYWNjZXB0PWUuaXNGdW5jdGlvbihzKT9zOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzKHMpfSx0aGlzLnByb3BvcnRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9YXJndW1lbnRzWzBdLHZvaWQgMCk6dD90OnQ9e3dpZHRoOnRoaXMuZWxlbWVudFswXS5vZmZzZXRXaWR0aCxoZWlnaHQ6dGhpcy5lbGVtZW50WzBdLm9mZnNldEhlaWdodH19LHRoaXMuX2FkZFRvTWFuYWdlcihpLnNjb3BlKSxpLmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJvcHBhYmxlIil9LF9hZGRUb01hbmFnZXI6ZnVuY3Rpb24odCl7ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0XT1lLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RdfHxbXSxlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RdLnB1c2godGhpcyl9LF9zcGxpY2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7ZS5sZW5ndGg+dDt0KyspZVt0XT09PXRoaXMmJmUuc3BsaWNlKHQsMSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ9ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0aGlzLm9wdGlvbnMuc2NvcGVdO3RoaXMuX3NwbGljZSh0KSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyb3BwYWJsZSB1aS1kcm9wcGFibGUtZGlzYWJsZWQiKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGkpe2lmKCJhY2NlcHQiPT09dCl0aGlzLmFjY2VwdD1lLmlzRnVuY3Rpb24oaSk/aTpmdW5jdGlvbihlKXtyZXR1cm4gZS5pcyhpKX07ZWxzZSBpZigic2NvcGUiPT09dCl7dmFyIHM9ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0aGlzLm9wdGlvbnMuc2NvcGVdO3RoaXMuX3NwbGljZShzKSx0aGlzLl9hZGRUb01hbmFnZXIoaSl9dGhpcy5fc3VwZXIodCxpKX0sX2FjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBpPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSxpJiZ0aGlzLl90cmlnZ2VyKCJhY3RpdmF0ZSIsdCx0aGlzLnVpKGkpKX0sX2RlYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIGk9ZS51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLGkmJnRoaXMuX3RyaWdnZXIoImRlYWN0aXZhdGUiLHQsdGhpcy51aShpKSl9LF9vdmVyOmZ1bmN0aW9uKHQpe3ZhciBpPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aSYmKGkuY3VycmVudEl0ZW18fGkuZWxlbWVudClbMF0hPT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLGkuY3VycmVudEl0ZW18fGkuZWxlbWVudCkmJih0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJvdmVyIix0LHRoaXMudWkoaSkpKX0sX291dDpmdW5jdGlvbih0KXt2YXIgaT1lLnVpLmRkbWFuYWdlci5jdXJyZW50O2kmJihpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpJiYodGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigib3V0Iix0LHRoaXMudWkoaSkpKX0sX2Ryb3A6ZnVuY3Rpb24odCxpKXt2YXIgcz1pfHxlLnVpLmRkbWFuYWdlci5jdXJyZW50LG49ITE7cmV0dXJuIHMmJihzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdPyh0aGlzLmVsZW1lbnQuZmluZCgiOmRhdGEodWktZHJvcHBhYmxlKSIpLm5vdCgiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLmRyb3BwYWJsZSgiaW5zdGFuY2UiKTtyZXR1cm4gaS5vcHRpb25zLmdyZWVkeSYmIWkub3B0aW9ucy5kaXNhYmxlZCYmaS5vcHRpb25zLnNjb3BlPT09cy5vcHRpb25zLnNjb3BlJiZpLmFjY2VwdC5jYWxsKGkuZWxlbWVudFswXSxzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpJiZlLnVpLmludGVyc2VjdChzLGUuZXh0ZW5kKGkse29mZnNldDppLmVsZW1lbnQub2Zmc2V0KCl9KSxpLm9wdGlvbnMudG9sZXJhbmNlLHQpPyhuPSEwLCExKTp2b2lkIDB9KSxuPyExOnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHMuY3VycmVudEl0ZW18fHMuZWxlbWVudCk/KHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigiZHJvcCIsdCx0aGlzLnVpKHMpKSx0aGlzLmVsZW1lbnQpOiExKTohMX0sdWk6ZnVuY3Rpb24oZSl7cmV0dXJue2RyYWdnYWJsZTplLmN1cnJlbnRJdGVtfHxlLmVsZW1lbnQsaGVscGVyOmUuaGVscGVyLHBvc2l0aW9uOmUucG9zaXRpb24sb2Zmc2V0OmUucG9zaXRpb25BYnN9fX0pLGUudWkuaW50ZXJzZWN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsaSl7cmV0dXJuIGU+PXQmJnQraT5lfXJldHVybiBmdW5jdGlvbih0LGkscyxuKXtpZighaS5vZmZzZXQpcmV0dXJuITE7dmFyIGE9KHQucG9zaXRpb25BYnN8fHQucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQrdC5tYXJnaW5zLmxlZnQsbz0odC5wb3NpdGlvbkFic3x8dC5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wK3QubWFyZ2lucy50b3Ascj1hK3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsaD1vK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGw9aS5vZmZzZXQubGVmdCx1PWkub2Zmc2V0LnRvcCxkPWwraS5wcm9wb3J0aW9ucygpLndpZHRoLGM9dStpLnByb3BvcnRpb25zKCkuaGVpZ2h0O3N3aXRjaChzKXtjYXNlImZpdCI6cmV0dXJuIGE+PWwmJmQ+PXImJm8+PXUmJmM+PWg7Y2FzZSJpbnRlcnNlY3QiOnJldHVybiBhK3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMj5sJiZkPnItdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZvK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI+dSYmYz5oLXQuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI7Y2FzZSJwb2ludGVyIjpyZXR1cm4gZShuLnBhZ2VZLHUsaS5wcm9wb3J0aW9ucygpLmhlaWdodCkmJmUobi5wYWdlWCxsLGkucHJvcG9ydGlvbnMoKS53aWR0aCk7Y2FzZSJ0b3VjaCI6cmV0dXJuKG8+PXUmJmM+PW98fGg+PXUmJmM+PWh8fHU+byYmaD5jKSYmKGE+PWwmJmQ+PWF8fHI+PWwmJmQ+PXJ8fGw+YSYmcj5kKTtkZWZhdWx0OnJldHVybiExfX19KCksZS51aS5kZG1hbmFnZXI9e2N1cnJlbnQ6bnVsbCxkcm9wcGFibGVzOnsiZGVmYXVsdCI6W119LHByZXBhcmVPZmZzZXRzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sbz1pP2kudHlwZTpudWxsLHI9KHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkuZmluZCgiOmRhdGEodWktZHJvcHBhYmxlKSIpLmFkZEJhY2soKTtlOmZvcihzPTA7YS5sZW5ndGg+cztzKyspaWYoIShhW3NdLm9wdGlvbnMuZGlzYWJsZWR8fHQmJiFhW3NdLmFjY2VwdC5jYWxsKGFbc10uZWxlbWVudFswXSx0LmN1cnJlbnRJdGVtfHx0LmVsZW1lbnQpKSl7Zm9yKG49MDtyLmxlbmd0aD5uO24rKylpZihyW25dPT09YVtzXS5lbGVtZW50WzBdKXthW3NdLnByb3BvcnRpb25zKCkuaGVpZ2h0PTA7Y29udGludWUgZX1hW3NdLnZpc2libGU9Im5vbmUiIT09YVtzXS5lbGVtZW50LmNzcygiZGlzcGxheSIpLGFbc10udmlzaWJsZSYmKCJtb3VzZWRvd24iPT09byYmYVtzXS5fYWN0aXZhdGUuY2FsbChhW3NdLGkpLGFbc10ub2Zmc2V0PWFbc10uZWxlbWVudC5vZmZzZXQoKSxhW3NdLnByb3BvcnRpb25zKHt3aWR0aDphW3NdLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OmFbc10uZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KSl9fSxkcm9wOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ITE7cmV0dXJuIGUuZWFjaCgoZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0Lm9wdGlvbnMuc2NvcGVdfHxbXSkuc2xpY2UoKSxmdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmKCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmZS51aS5pbnRlcnNlY3QodCx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UsaSkmJihzPXRoaXMuX2Ryb3AuY2FsbCh0aGlzLGkpfHxzKSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkmJih0aGlzLmlzb3V0PSEwLHRoaXMuaXNvdmVyPSExLHRoaXMuX2RlYWN0aXZhdGUuY2FsbCh0aGlzLGkpKSl9KSxzfSxkcmFnU3RhcnQ6ZnVuY3Rpb24odCxpKXt0LmVsZW1lbnQucGFyZW50c1VudGlsKCJib2R5IikuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8ZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModCxpKX0pfSxkcmFnOmZ1bmN0aW9uKHQsaSl7dC5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnMmJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHQsaSksZS5lYWNoKGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sZnVuY3Rpb24oKXtpZighdGhpcy5vcHRpb25zLmRpc2FibGVkJiYhdGhpcy5ncmVlZHlDaGlsZCYmdGhpcy52aXNpYmxlKXt2YXIgcyxuLGEsbz1lLnVpLmludGVyc2VjdCh0LHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSxpKSxyPSFvJiZ0aGlzLmlzb3Zlcj8iaXNvdXQiOm8mJiF0aGlzLmlzb3Zlcj8iaXNvdmVyIjpudWxsO3ImJih0aGlzLm9wdGlvbnMuZ3JlZWR5JiYobj10aGlzLm9wdGlvbnMuc2NvcGUsYT10aGlzLmVsZW1lbnQucGFyZW50cygiOmRhdGEodWktZHJvcHBhYmxlKSIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmRyb3BwYWJsZSgiaW5zdGFuY2UiKS5vcHRpb25zLnNjb3BlPT09bn0pLGEubGVuZ3RoJiYocz1lKGFbMF0pLmRyb3BwYWJsZSgiaW5zdGFuY2UiKSxzLmdyZWVkeUNoaWxkPSJpc292ZXIiPT09cikpLHMmJiJpc292ZXIiPT09ciYmKHMuaXNvdmVyPSExLHMuaXNvdXQ9ITAscy5fb3V0LmNhbGwocyxpKSksdGhpc1tyXT0hMCx0aGlzWyJpc291dCI9PT1yPyJpc292ZXIiOiJpc291dCJdPSExLHRoaXNbImlzb3ZlciI9PT1yPyJfb3ZlciI6Il9vdXQiXS5jYWxsKHRoaXMsaSkscyYmImlzb3V0Ij09PXImJihzLmlzb3V0PSExLHMuaXNvdmVyPSEwLHMuX292ZXIuY2FsbChzLGkpKSl9fSl9LGRyYWdTdG9wOmZ1bmN0aW9uKHQsaSl7dC5lbGVtZW50LnBhcmVudHNVbnRpbCgiYm9keSIpLnVuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIpLHQub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHxlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0LGkpfX0sZS51aS5kcm9wcGFibGUsZS53aWRnZXQoInVpLnJlc2l6YWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40Iix3aWRnZXRFdmVudFByZWZpeDoicmVzaXplIixvcHRpb25zOnthbHNvUmVzaXplOiExLGFuaW1hdGU6ITEsYW5pbWF0ZUR1cmF0aW9uOiJzbG93IixhbmltYXRlRWFzaW5nOiJzd2luZyIsYXNwZWN0UmF0aW86ITEsYXV0b0hpZGU6ITEsY29udGFpbm1lbnQ6ITEsZ2hvc3Q6ITEsZ3JpZDohMSxoYW5kbGVzOiJlLHMsc2UiLGhlbHBlcjohMSxtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxMCxtaW5XaWR0aDoxMCx6SW5kZXg6OTAscmVzaXplOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9udW06ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfHwwfSxfaXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKHBhcnNlSW50KGUsMTApKX0sX2hhc1Njcm9sbDpmdW5jdGlvbih0LGkpe2lmKCJoaWRkZW4iPT09ZSh0KS5jc3MoIm92ZXJmbG93IikpcmV0dXJuITE7dmFyIHM9aSYmImxlZnQiPT09aT8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCIsbj0hMTtyZXR1cm4gdFtzXT4wPyEwOih0W3NdPTEsbj10W3NdPjAsdFtzXT0wLG4pfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG4sYSxvPXRoaXMscj10aGlzLm9wdGlvbnM7aWYodGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1yZXNpemFibGUiKSxlLmV4dGVuZCh0aGlzLHtfYXNwZWN0UmF0aW86ISFyLmFzcGVjdFJhdGlvLGFzcGVjdFJhdGlvOnIuYXNwZWN0UmF0aW8sb3JpZ2luYWxFbGVtZW50OnRoaXMuZWxlbWVudCxfcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50czpbXSxfaGVscGVyOnIuaGVscGVyfHxyLmdob3N0fHxyLmFuaW1hdGU/ci5oZWxwZXJ8fCJ1aS1yZXNpemFibGUtaGVscGVyIjpudWxsfSksdGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLm1hdGNoKC9eKGNhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZykkL2kpJiYodGhpcy5lbGVtZW50LndyYXAoZSgiPGRpdiBjbGFzcz0ndWktd3JhcHBlcicgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47Jz48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOnRoaXMuZWxlbWVudC5jc3MoInBvc2l0aW9uIiksd2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCksdG9wOnRoaXMuZWxlbWVudC5jc3MoInRvcCIpLGxlZnQ6dGhpcy5lbGVtZW50LmNzcygibGVmdCIpfSkpLHRoaXMuZWxlbWVudD10aGlzLmVsZW1lbnQucGFyZW50KCkuZGF0YSgidWktcmVzaXphYmxlIix0aGlzLmVsZW1lbnQucmVzaXphYmxlKCJpbnN0YW5jZSIpKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXI9ITAsdGhpcy5lbGVtZW50LmNzcyh7bWFyZ2luTGVmdDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbkxlZnQiKSxtYXJnaW5Ub3A6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSxtYXJnaW5SaWdodDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksbWFyZ2luQm90dG9tOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luQm90dG9tIil9KSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbkxlZnQ6MCxtYXJnaW5Ub3A6MCxtYXJnaW5SaWdodDowLG1hcmdpbkJvdHRvbTowfSksdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlPXRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIiksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiLCJub25lIiksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5wdXNoKHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246InN0YXRpYyIsem9vbToxLGRpc3BsYXk6ImJsb2NrIn0pKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbjp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbiIpfSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5oYW5kbGVzPXIuaGFuZGxlc3x8KGUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmxlbmd0aD97bjoiLnVpLXJlc2l6YWJsZS1uIixlOiIudWktcmVzaXphYmxlLWUiLHM6Ii51aS1yZXNpemFibGUtcyIsdzoiLnVpLXJlc2l6YWJsZS13IixzZToiLnVpLXJlc2l6YWJsZS1zZSIsc3c6Ii51aS1yZXNpemFibGUtc3ciLG5lOiIudWktcmVzaXphYmxlLW5lIixudzoiLnVpLXJlc2l6YWJsZS1udyJ9OiJlLHMsc2UiKSx0aGlzLl9oYW5kbGVzPWUoKSx0aGlzLmhhbmRsZXMuY29uc3RydWN0b3I9PT1TdHJpbmcpZm9yKCJhbGwiPT09dGhpcy5oYW5kbGVzJiYodGhpcy5oYW5kbGVzPSJuLGUscyx3LHNlLHN3LG5lLG53IiksdD10aGlzLmhhbmRsZXMuc3BsaXQoIiwiKSx0aGlzLmhhbmRsZXM9e30saT0wO3QubGVuZ3RoPmk7aSsrKXM9ZS50cmltKHRbaV0pLGE9InVpLXJlc2l6YWJsZS0iK3Msbj1lKCI8ZGl2IGNsYXNzPSd1aS1yZXNpemFibGUtaGFuZGxlICIrYSsiJz48L2Rpdj4iKSxuLmNzcyh7ekluZGV4OnIuekluZGV4fSksInNlIj09PXMmJm4uYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UiKSx0aGlzLmhhbmRsZXNbc109Ii51aS1yZXNpemFibGUtIitzLHRoaXMuZWxlbWVudC5hcHBlbmQobik7dGhpcy5fcmVuZGVyQXhpcz1mdW5jdGlvbih0KXt2YXIgaSxzLG4sYTt0PXR8fHRoaXMuZWxlbWVudDtmb3IoaSBpbiB0aGlzLmhhbmRsZXMpdGhpcy5oYW5kbGVzW2ldLmNvbnN0cnVjdG9yPT09U3RyaW5nP3RoaXMuaGFuZGxlc1tpXT10aGlzLmVsZW1lbnQuY2hpbGRyZW4odGhpcy5oYW5kbGVzW2ldKS5maXJzdCgpLnNob3coKToodGhpcy5oYW5kbGVzW2ldLmpxdWVyeXx8dGhpcy5oYW5kbGVzW2ldLm5vZGVUeXBlKSYmKHRoaXMuaGFuZGxlc1tpXT1lKHRoaXMuaGFuZGxlc1tpXSksdGhpcy5fb24odGhpcy5oYW5kbGVzW2ldLHttb3VzZWRvd246by5fbW91c2VEb3dufSkpLHRoaXMuZWxlbWVudElzV3JhcHBlciYmdGhpcy5vcmlnaW5hbEVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL14odGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbikkL2kpJiYocz1lKHRoaXMuaGFuZGxlc1tpXSx0aGlzLmVsZW1lbnQpLGE9L3N3fG5lfG53fHNlfG58cy8udGVzdChpKT9zLm91dGVySGVpZ2h0KCk6cy5vdXRlcldpZHRoKCksbj1bInBhZGRpbmciLC9uZXxud3xuLy50ZXN0KGkpPyJUb3AiOi9zZXxzd3xzLy50ZXN0KGkpPyJCb3R0b20iOi9eZSQvLnRlc3QoaSk/IlJpZ2h0IjoiTGVmdCJdLmpvaW4oIiIpLHQuY3NzKG4sYSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5faGFuZGxlcz10aGlzLl9oYW5kbGVzLmFkZCh0aGlzLmhhbmRsZXNbaV0pfSx0aGlzLl9yZW5kZXJBeGlzKHRoaXMuZWxlbWVudCksdGhpcy5faGFuZGxlcz10aGlzLl9oYW5kbGVzLmFkZCh0aGlzLmVsZW1lbnQuZmluZCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKSksdGhpcy5faGFuZGxlcy5kaXNhYmxlU2VsZWN0aW9uKCksdGhpcy5faGFuZGxlcy5tb3VzZW92ZXIoZnVuY3Rpb24oKXtvLnJlc2l6aW5nfHwodGhpcy5jbGFzc05hbWUmJihuPXRoaXMuY2xhc3NOYW1lLm1hdGNoKC91aS1yZXNpemFibGUtKHNlfHN3fG5lfG53fG58ZXxzfHcpL2kpKSxvLmF4aXM9biYmblsxXT9uWzFdOiJzZSIpfSksci5hdXRvSGlkZSYmKHRoaXMuX2hhbmRsZXMuaGlkZSgpLGUodGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIikubW91c2VlbnRlcihmdW5jdGlvbigpe3IuZGlzYWJsZWR8fChlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKSxvLl9oYW5kbGVzLnNob3coKSl9KS5tb3VzZWxlYXZlKGZ1bmN0aW9uKCl7ci5kaXNhYmxlZHx8by5yZXNpemluZ3x8KGUodGhpcykuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLG8uX2hhbmRsZXMuaGlkZSgpKX0pKSx0aGlzLl9tb3VzZUluaXQoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZURlc3Ryb3koKTt2YXIgdCxpPWZ1bmN0aW9uKHQpe2UodCkucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZSB1aS1yZXNpemFibGUtZGlzYWJsZWQgdWktcmVzaXphYmxlLXJlc2l6aW5nIikucmVtb3ZlRGF0YSgicmVzaXphYmxlIikucmVtb3ZlRGF0YSgidWktcmVzaXphYmxlIikudW5iaW5kKCIucmVzaXphYmxlIikuZmluZCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKS5yZW1vdmUoKX07cmV0dXJuIHRoaXMuZWxlbWVudElzV3JhcHBlciYmKGkodGhpcy5lbGVtZW50KSx0PXRoaXMuZWxlbWVudCx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOnQuY3NzKCJwb3NpdGlvbiIpLHdpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCksdG9wOnQuY3NzKCJ0b3AiKSxsZWZ0OnQuY3NzKCJsZWZ0Iil9KS5pbnNlcnRBZnRlcih0KSx0LnJlbW92ZSgpKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlKSxpKHRoaXMub3JpZ2luYWxFbGVtZW50KSx0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbj0hMTtmb3IoaSBpbiB0aGlzLmhhbmRsZXMpcz1lKHRoaXMuaGFuZGxlc1tpXSlbMF0sKHM9PT10LnRhcmdldHx8ZS5jb250YWlucyhzLHQudGFyZ2V0KSkmJihuPSEwKTtyZXR1cm4hdGhpcy5vcHRpb25zLmRpc2FibGVkJiZufSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYT10aGlzLm9wdGlvbnMsbz10aGlzLmVsZW1lbnQ7cmV0dXJuIHRoaXMucmVzaXppbmc9ITAsdGhpcy5fcmVuZGVyUHJveHkoKSxpPXRoaXMuX251bSh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSkscz10aGlzLl9udW0odGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSksYS5jb250YWlubWVudCYmKGkrPWUoYS5jb250YWlubWVudCkuc2Nyb2xsTGVmdCgpfHwwLHMrPWUoYS5jb250YWlubWVudCkuc2Nyb2xsVG9wKCl8fDApLHRoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMucG9zaXRpb249e2xlZnQ6aSx0b3A6c30sdGhpcy5zaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6dGhpcy5oZWxwZXIud2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIuaGVpZ2h0KCl9Ont3aWR0aDpvLndpZHRoKCksaGVpZ2h0Om8uaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxTaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6by5vdXRlcldpZHRoKCksaGVpZ2h0Om8ub3V0ZXJIZWlnaHQoKX06e3dpZHRoOm8ud2lkdGgoKSxoZWlnaHQ6by5oZWlnaHQoKX0sdGhpcy5zaXplRGlmZj17d2lkdGg6by5vdXRlcldpZHRoKCktby53aWR0aCgpLGhlaWdodDpvLm91dGVySGVpZ2h0KCktby5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtsZWZ0OmksdG9wOnN9LHRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uPXtsZWZ0OnQucGFnZVgsdG9wOnQucGFnZVl9LHRoaXMuYXNwZWN0UmF0aW89Im51bWJlciI9PXR5cGVvZiBhLmFzcGVjdFJhdGlvP2EuYXNwZWN0UmF0aW86dGhpcy5vcmlnaW5hbFNpemUud2lkdGgvdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0fHwxLG49ZSgiLnVpLXJlc2l6YWJsZS0iK3RoaXMuYXhpcykuY3NzKCJjdXJzb3IiKSxlKCJib2R5IikuY3NzKCJjdXJzb3IiLCJhdXRvIj09PW4/dGhpcy5heGlzKyItcmVzaXplIjpuKSxvLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtcmVzaXppbmciKSx0aGlzLl9wcm9wYWdhdGUoInN0YXJ0Iix0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt2YXIgaSxzLG49dGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24sYT10aGlzLmF4aXMsbz10LnBhZ2VYLW4ubGVmdHx8MCxyPXQucGFnZVktbi50b3B8fDAsaD10aGlzLl9jaGFuZ2VbYV07cmV0dXJuIHRoaXMuX3VwZGF0ZVByZXZQcm9wZXJ0aWVzKCksaD8oaT1oLmFwcGx5KHRoaXMsW3QsbyxyXSksdGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXModC5zaGlmdEtleSksKHRoaXMuX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5KSYmKGk9dGhpcy5fdXBkYXRlUmF0aW8oaSx0KSksaT10aGlzLl9yZXNwZWN0U2l6ZShpLHQpLHRoaXMuX3VwZGF0ZUNhY2hlKGkpLHRoaXMuX3Byb3BhZ2F0ZSgicmVzaXplIix0KSxzPXRoaXMuX2FwcGx5Q2hhbmdlcygpLCF0aGlzLl9oZWxwZXImJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpLGUuaXNFbXB0eU9iamVjdChzKXx8KHRoaXMuX3VwZGF0ZVByZXZQcm9wZXJ0aWVzKCksdGhpcy5fdHJpZ2dlcigicmVzaXplIix0LHRoaXMudWkoKSksdGhpcy5fYXBwbHlDaGFuZ2VzKCkpLCExKTohMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt0aGlzLnJlc2l6aW5nPSExO3ZhciBpLHMsbixhLG8scixoLGw9dGhpcy5vcHRpb25zLHU9dGhpcztyZXR1cm4gdGhpcy5faGVscGVyJiYoaT10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLHM9aS5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoaVswXS5ub2RlTmFtZSksbj1zJiZ0aGlzLl9oYXNTY3JvbGwoaVswXSwibGVmdCIpPzA6dS5zaXplRGlmZi5oZWlnaHQsYT1zPzA6dS5zaXplRGlmZi53aWR0aCxvPXt3aWR0aDp1LmhlbHBlci53aWR0aCgpLWEsaGVpZ2h0OnUuaGVscGVyLmhlaWdodCgpLW59LHI9cGFyc2VJbnQodS5lbGVtZW50LmNzcygibGVmdCIpLDEwKSsodS5wb3NpdGlvbi5sZWZ0LXUub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCxoPXBhcnNlSW50KHUuZWxlbWVudC5jc3MoInRvcCIpLDEwKSsodS5wb3NpdGlvbi50b3AtdS5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGwsbC5hbmltYXRlfHx0aGlzLmVsZW1lbnQuY3NzKGUuZXh0ZW5kKG8se3RvcDpoLGxlZnQ6cn0pKSx1LmhlbHBlci5oZWlnaHQodS5zaXplLmhlaWdodCksdS5oZWxwZXIud2lkdGgodS5zaXplLndpZHRoKSx0aGlzLl9oZWxwZXImJiFsLmFuaW1hdGUmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLGUoImJvZHkiKS5jc3MoImN1cnNvciIsImF1dG8iKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLHRoaXMuX3Byb3BhZ2F0ZSgic3RvcCIsdCksdGhpcy5faGVscGVyJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX0sX3VwZGF0ZVByZXZQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7dGhpcy5wcmV2UG9zaXRpb249e3RvcDp0aGlzLnBvc2l0aW9uLnRvcCxsZWZ0OnRoaXMucG9zaXRpb24ubGVmdH0sdGhpcy5wcmV2U2l6ZT17d2lkdGg6dGhpcy5zaXplLndpZHRoLGhlaWdodDp0aGlzLnNpemUuaGVpZ2h0fX0sX2FwcGx5Q2hhbmdlczpmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiB0aGlzLnBvc2l0aW9uLnRvcCE9PXRoaXMucHJldlBvc2l0aW9uLnRvcCYmKGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIpLHRoaXMucG9zaXRpb24ubGVmdCE9PXRoaXMucHJldlBvc2l0aW9uLmxlZnQmJihlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIpLHRoaXMuc2l6ZS53aWR0aCE9PXRoaXMucHJldlNpemUud2lkdGgmJihlLndpZHRoPXRoaXMuc2l6ZS53aWR0aCsicHgiKSx0aGlzLnNpemUuaGVpZ2h0IT09dGhpcy5wcmV2U2l6ZS5oZWlnaHQmJihlLmhlaWdodD10aGlzLnNpemUuaGVpZ2h0KyJweCIpLHRoaXMuaGVscGVyLmNzcyhlKSxlfSxfdXBkYXRlVmlydHVhbEJvdW5kYXJpZXM6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLG4sYSxvPXRoaXMub3B0aW9uczthPXttaW5XaWR0aDp0aGlzLl9pc051bWJlcihvLm1pbldpZHRoKT9vLm1pbldpZHRoOjAsbWF4V2lkdGg6dGhpcy5faXNOdW1iZXIoby5tYXhXaWR0aCk/by5tYXhXaWR0aDoxLzAsbWluSGVpZ2h0OnRoaXMuX2lzTnVtYmVyKG8ubWluSGVpZ2h0KT9vLm1pbkhlaWdodDowLG1heEhlaWdodDp0aGlzLl9pc051bWJlcihvLm1heEhlaWdodCk/by5tYXhIZWlnaHQ6MS8wfSwodGhpcy5fYXNwZWN0UmF0aW98fGUpJiYodD1hLm1pbkhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLHM9YS5taW5XaWR0aC90aGlzLmFzcGVjdFJhdGlvLGk9YS5tYXhIZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxuPWEubWF4V2lkdGgvdGhpcy5hc3BlY3RSYXRpbyx0PmEubWluV2lkdGgmJihhLm1pbldpZHRoPXQpLHM+YS5taW5IZWlnaHQmJihhLm1pbkhlaWdodD1zKSxhLm1heFdpZHRoPmkmJihhLm1heFdpZHRoPWkpLGEubWF4SGVpZ2h0Pm4mJihhLm1heEhlaWdodD1uKSksdGhpcy5fdkJvdW5kYXJpZXM9YX0sX3VwZGF0ZUNhY2hlOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMuX2lzTnVtYmVyKGUubGVmdCkmJih0aGlzLnBvc2l0aW9uLmxlZnQ9ZS5sZWZ0KSx0aGlzLl9pc051bWJlcihlLnRvcCkmJih0aGlzLnBvc2l0aW9uLnRvcD1lLnRvcCksdGhpcy5faXNOdW1iZXIoZS5oZWlnaHQpJiYodGhpcy5zaXplLmhlaWdodD1lLmhlaWdodCksdGhpcy5faXNOdW1iZXIoZS53aWR0aCkmJih0aGlzLnNpemUud2lkdGg9ZS53aWR0aCl9LF91cGRhdGVSYXRpbzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uLGk9dGhpcy5zaXplLHM9dGhpcy5heGlzO3JldHVybiB0aGlzLl9pc051bWJlcihlLmhlaWdodCk/ZS53aWR0aD1lLmhlaWdodCp0aGlzLmFzcGVjdFJhdGlvOnRoaXMuX2lzTnVtYmVyKGUud2lkdGgpJiYoZS5oZWlnaHQ9ZS53aWR0aC90aGlzLmFzcGVjdFJhdGlvKSwic3ciPT09cyYmKGUubGVmdD10LmxlZnQrKGkud2lkdGgtZS53aWR0aCksZS50b3A9bnVsbCksIm53Ij09PXMmJihlLnRvcD10LnRvcCsoaS5oZWlnaHQtZS5oZWlnaHQpLGUubGVmdD10LmxlZnQrKGkud2lkdGgtZS53aWR0aCkpLGV9LF9yZXNwZWN0U2l6ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92Qm91bmRhcmllcyxpPXRoaXMuYXhpcyxzPXRoaXMuX2lzTnVtYmVyKGUud2lkdGgpJiZ0Lm1heFdpZHRoJiZ0Lm1heFdpZHRoPGUud2lkdGgsbj10aGlzLl9pc051bWJlcihlLmhlaWdodCkmJnQubWF4SGVpZ2h0JiZ0Lm1heEhlaWdodDxlLmhlaWdodCxhPXRoaXMuX2lzTnVtYmVyKGUud2lkdGgpJiZ0Lm1pbldpZHRoJiZ0Lm1pbldpZHRoPmUud2lkdGgsbz10aGlzLl9pc051bWJlcihlLmhlaWdodCkmJnQubWluSGVpZ2h0JiZ0Lm1pbkhlaWdodD5lLmhlaWdodCxyPXRoaXMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0K3RoaXMub3JpZ2luYWxTaXplLndpZHRoLGg9dGhpcy5wb3NpdGlvbi50b3ArdGhpcy5zaXplLmhlaWdodCxsPS9zd3xud3x3Ly50ZXN0KGkpLHU9L253fG5lfG4vLnRlc3QoaSk7cmV0dXJuIGEmJihlLndpZHRoPXQubWluV2lkdGgpLG8mJihlLmhlaWdodD10Lm1pbkhlaWdodCkscyYmKGUud2lkdGg9dC5tYXhXaWR0aCksbiYmKGUuaGVpZ2h0PXQubWF4SGVpZ2h0KSxhJiZsJiYoZS5sZWZ0PXItdC5taW5XaWR0aCkscyYmbCYmKGUubGVmdD1yLXQubWF4V2lkdGgpLG8mJnUmJihlLnRvcD1oLXQubWluSGVpZ2h0KSxuJiZ1JiYoZS50b3A9aC10Lm1heEhlaWdodCksZS53aWR0aHx8ZS5oZWlnaHR8fGUubGVmdHx8IWUudG9wP2Uud2lkdGh8fGUuaGVpZ2h0fHxlLnRvcHx8IWUubGVmdHx8KGUubGVmdD1udWxsKTplLnRvcD1udWxsLGV9LF9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsaT1bXSxzPVtlLmNzcygiYm9yZGVyVG9wV2lkdGgiKSxlLmNzcygiYm9yZGVyUmlnaHRXaWR0aCIpLGUuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLGUuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKV0sbj1bZS5jc3MoInBhZGRpbmdUb3AiKSxlLmNzcygicGFkZGluZ1JpZ2h0IiksZS5jc3MoInBhZGRpbmdCb3R0b20iKSxlLmNzcygicGFkZGluZ0xlZnQiKV07ND50O3QrKylpW3RdPXBhcnNlSW50KHNbdF0sMTApfHwwLGlbdF0rPXBhcnNlSW50KG5bdF0sMTApfHwwO3JldHVybntoZWlnaHQ6aVswXStpWzJdLHdpZHRoOmlbMV0raVszXX19LF9wcm9wb3J0aW9uYWxseVJlc2l6ZTpmdW5jdGlvbigpe2lmKHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoKWZvcih2YXIgZSx0PTAsaT10aGlzLmhlbHBlcnx8dGhpcy5lbGVtZW50O3RoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoPnQ7dCsrKWU9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50c1t0XSx0aGlzLm91dGVyRGltZW5zaW9uc3x8KHRoaXMub3V0ZXJEaW1lbnNpb25zPXRoaXMuX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9ucyhlKSksZS5jc3Moe2hlaWdodDppLmhlaWdodCgpLXRoaXMub3V0ZXJEaW1lbnNpb25zLmhlaWdodHx8MCx3aWR0aDppLndpZHRoKCktdGhpcy5vdXRlckRpbWVuc2lvbnMud2lkdGh8fDB9KX0sX3JlbmRlclByb3h5OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LGk9dGhpcy5vcHRpb25zO3RoaXMuZWxlbWVudE9mZnNldD10Lm9mZnNldCgpLHRoaXMuX2hlbHBlcj8odGhpcy5oZWxwZXI9dGhpcy5oZWxwZXJ8fGUoIjxkaXYgc3R5bGU9J292ZXJmbG93OmhpZGRlbjsnPjwvZGl2PiIpLHRoaXMuaGVscGVyLmFkZENsYXNzKHRoaXMuX2hlbHBlcikuY3NzKHt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLTEsaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLTEscG9zaXRpb246ImFic29sdXRlIixsZWZ0OnRoaXMuZWxlbWVudE9mZnNldC5sZWZ0KyJweCIsdG9wOnRoaXMuZWxlbWVudE9mZnNldC50b3ArInB4Iix6SW5kZXg6KytpLnpJbmRleH0pLHRoaXMuaGVscGVyLmFwcGVuZFRvKCJib2R5IikuZGlzYWJsZVNlbGVjdGlvbigpKTp0aGlzLmhlbHBlcj10aGlzLmVsZW1lbnR9LF9jaGFuZ2U6e2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm57d2lkdGg6dGhpcy5vcmlnaW5hbFNpemUud2lkdGgrdH19LHc6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLm9yaWdpbmFsU2l6ZSxzPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57bGVmdDpzLmxlZnQrdCx3aWR0aDppLndpZHRoLXR9fSxuOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz10aGlzLm9yaWdpbmFsU2l6ZSxuPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57dG9wOm4udG9wK2ksaGVpZ2h0OnMuaGVpZ2h0LWl9fSxzOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm57aGVpZ2h0OnRoaXMub3JpZ2luYWxTaXplLmhlaWdodCtpfX0sc2U6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbdCxpLHNdKSl9LHN3OmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW3QsaSxzXSkpfSxuZTpmdW5jdGlvbih0LGkscyl7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFt0LGksc10pKX0sbnc6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbdCxpLHNdKSl9fSxfcHJvcGFnYXRlOmZ1bmN0aW9uKHQsaSl7ZS51aS5wbHVnaW4uY2FsbCh0aGlzLHQsW2ksdGhpcy51aSgpXSksInJlc2l6ZSIhPT10JiZ0aGlzLl90cmlnZ2VyKHQsaSx0aGlzLnVpKCkpfSxwbHVnaW5zOnt9LHVpOmZ1bmN0aW9uKCl7cmV0dXJue29yaWdpbmFsRWxlbWVudDp0aGlzLm9yaWdpbmFsRWxlbWVudCxlbGVtZW50OnRoaXMuZWxlbWVudCxoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixzaXplOnRoaXMuc2l6ZSxvcmlnaW5hbFNpemU6dGhpcy5vcmlnaW5hbFNpemUsb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb259fX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYW5pbWF0ZSIse3N0b3A6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIikscz1pLm9wdGlvbnMsbj1pLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLGE9bi5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoblswXS5ub2RlTmFtZSksbz1hJiZpLl9oYXNTY3JvbGwoblswXSwibGVmdCIpPzA6aS5zaXplRGlmZi5oZWlnaHQscj1hPzA6aS5zaXplRGlmZi53aWR0aCxoPXt3aWR0aDppLnNpemUud2lkdGgtcixoZWlnaHQ6aS5zaXplLmhlaWdodC1vfSxsPXBhcnNlSW50KGkuZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKGkucG9zaXRpb24ubGVmdC1pLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsdT1wYXJzZUludChpLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCkrKGkucG9zaXRpb24udG9wLWkub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO2kuZWxlbWVudC5hbmltYXRlKGUuZXh0ZW5kKGgsdSYmbD97dG9wOnUsbGVmdDpsfTp7fSkse2R1cmF0aW9uOnMuYW5pbWF0ZUR1cmF0aW9uLGVhc2luZzpzLmFuaW1hdGVFYXNpbmcsc3RlcDpmdW5jdGlvbigpe3ZhciBzPXt3aWR0aDpwYXJzZUludChpLmVsZW1lbnQuY3NzKCJ3aWR0aCIpLDEwKSxoZWlnaHQ6cGFyc2VJbnQoaS5lbGVtZW50LmNzcygiaGVpZ2h0IiksMTApLHRvcDpwYXJzZUludChpLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCksbGVmdDpwYXJzZUludChpLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApfTtuJiZuLmxlbmd0aCYmZShuWzBdKS5jc3Moe3dpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0fSksaS5fdXBkYXRlQ2FjaGUocyksaS5fcHJvcGFnYXRlKCJyZXNpemUiLHQpfX0pfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiY29udGFpbm1lbnQiLHtzdGFydDpmdW5jdGlvbigpe3ZhciB0LGkscyxuLGEsbyxyLGg9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksbD1oLm9wdGlvbnMsdT1oLmVsZW1lbnQsZD1sLmNvbnRhaW5tZW50LGM9ZCBpbnN0YW5jZW9mIGU/ZC5nZXQoMCk6L3BhcmVudC8udGVzdChkKT91LnBhcmVudCgpLmdldCgwKTpkO2MmJihoLmNvbnRhaW5lckVsZW1lbnQ9ZShjKSwvZG9jdW1lbnQvLnRlc3QoZCl8fGQ9PT1kb2N1bWVudD8oaC5jb250YWluZXJPZmZzZXQ9e2xlZnQ6MCx0b3A6MH0saC5jb250YWluZXJQb3NpdGlvbj17bGVmdDowLHRvcDowfSxoLnBhcmVudERhdGE9e2VsZW1lbnQ6ZShkb2N1bWVudCksbGVmdDowLHRvcDowLHdpZHRoOmUoZG9jdW1lbnQpLndpZHRoKCksaGVpZ2h0OmUoZG9jdW1lbnQpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0fSk6KHQ9ZShjKSxpPVtdLGUoWyJUb3AiLCJSaWdodCIsIkxlZnQiLCJCb3R0b20iXSkuZWFjaChmdW5jdGlvbihlLHMpe2lbZV09aC5fbnVtKHQuY3NzKCJwYWRkaW5nIitzKSl9KSxoLmNvbnRhaW5lck9mZnNldD10Lm9mZnNldCgpLGguY29udGFpbmVyUG9zaXRpb249dC5wb3NpdGlvbigpLGguY29udGFpbmVyU2l6ZT17aGVpZ2h0OnQuaW5uZXJIZWlnaHQoKS1pWzNdLHdpZHRoOnQuaW5uZXJXaWR0aCgpLWlbMV19LHM9aC5jb250YWluZXJPZmZzZXQsbj1oLmNvbnRhaW5lclNpemUuaGVpZ2h0LGE9aC5jb250YWluZXJTaXplLndpZHRoLG89aC5faGFzU2Nyb2xsKGMsImxlZnQiKT9jLnNjcm9sbFdpZHRoOmEscj1oLl9oYXNTY3JvbGwoYyk/Yy5zY3JvbGxIZWlnaHQ6bixoLnBhcmVudERhdGE9e2VsZW1lbnQ6YyxsZWZ0OnMubGVmdCx0b3A6cy50b3Asd2lkdGg6byxoZWlnaHQ6cn0pKX0scmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG89ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIikscj1vLm9wdGlvbnMsaD1vLmNvbnRhaW5lck9mZnNldCxsPW8ucG9zaXRpb24sdT1vLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleSxkPXt0b3A6MCxsZWZ0OjB9LGM9by5jb250YWluZXJFbGVtZW50LHA9ITA7Y1swXSE9PWRvY3VtZW50JiYvc3RhdGljLy50ZXN0KGMuY3NzKCJwb3NpdGlvbiIpKSYmKGQ9aCksbC5sZWZ0PChvLl9oZWxwZXI/aC5sZWZ0OjApJiYoby5zaXplLndpZHRoPW8uc2l6ZS53aWR0aCsoby5faGVscGVyP28ucG9zaXRpb24ubGVmdC1oLmxlZnQ6by5wb3NpdGlvbi5sZWZ0LWQubGVmdCksdSYmKG8uc2l6ZS5oZWlnaHQ9by5zaXplLndpZHRoL28uYXNwZWN0UmF0aW8scD0hMSksby5wb3NpdGlvbi5sZWZ0PXIuaGVscGVyP2gubGVmdDowKSxsLnRvcDwoby5faGVscGVyP2gudG9wOjApJiYoby5zaXplLmhlaWdodD1vLnNpemUuaGVpZ2h0KyhvLl9oZWxwZXI/by5wb3NpdGlvbi50b3AtaC50b3A6by5wb3NpdGlvbi50b3ApLHUmJihvLnNpemUud2lkdGg9by5zaXplLmhlaWdodCpvLmFzcGVjdFJhdGlvLHA9ITEpLG8ucG9zaXRpb24udG9wPW8uX2hlbHBlcj9oLnRvcDowKSxuPW8uY29udGFpbmVyRWxlbWVudC5nZXQoMCk9PT1vLmVsZW1lbnQucGFyZW50KCkuZ2V0KDApLGE9L3JlbGF0aXZlfGFic29sdXRlLy50ZXN0KG8uY29udGFpbmVyRWxlbWVudC5jc3MoInBvc2l0aW9uIikpLG4mJmE/KG8ub2Zmc2V0LmxlZnQ9by5wYXJlbnREYXRhLmxlZnQrby5wb3NpdGlvbi5sZWZ0LG8ub2Zmc2V0LnRvcD1vLnBhcmVudERhdGEudG9wK28ucG9zaXRpb24udG9wKTooby5vZmZzZXQubGVmdD1vLmVsZW1lbnQub2Zmc2V0KCkubGVmdCxvLm9mZnNldC50b3A9by5lbGVtZW50Lm9mZnNldCgpLnRvcCksaT1NYXRoLmFicyhvLnNpemVEaWZmLndpZHRoKyhvLl9oZWxwZXI/by5vZmZzZXQubGVmdC1kLmxlZnQ6by5vZmZzZXQubGVmdC1oLmxlZnQpKSxzPU1hdGguYWJzKG8uc2l6ZURpZmYuaGVpZ2h0KyhvLl9oZWxwZXI/by5vZmZzZXQudG9wLWQudG9wOm8ub2Zmc2V0LnRvcC1oLnRvcCkpLGkrby5zaXplLndpZHRoPj1vLnBhcmVudERhdGEud2lkdGgmJihvLnNpemUud2lkdGg9by5wYXJlbnREYXRhLndpZHRoLWksdSYmKG8uc2l6ZS5oZWlnaHQ9by5zaXplLndpZHRoL28uYXNwZWN0UmF0aW8scD0hMSkpLHMrby5zaXplLmhlaWdodD49by5wYXJlbnREYXRhLmhlaWdodCYmKG8uc2l6ZS5oZWlnaHQ9by5wYXJlbnREYXRhLmhlaWdodC1zLHUmJihvLnNpemUud2lkdGg9by5zaXplLmhlaWdodCpvLmFzcGVjdFJhdGlvLHA9ITEpKSxwfHwoby5wb3NpdGlvbi5sZWZ0PW8ucHJldlBvc2l0aW9uLmxlZnQsby5wb3NpdGlvbi50b3A9by5wcmV2UG9zaXRpb24udG9wLG8uc2l6ZS53aWR0aD1vLnByZXZTaXplLndpZHRoLG8uc2l6ZS5oZWlnaHQ9by5wcmV2U2l6ZS5oZWlnaHQpfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksaT10Lm9wdGlvbnMscz10LmNvbnRhaW5lck9mZnNldCxuPXQuY29udGFpbmVyUG9zaXRpb24sYT10LmNvbnRhaW5lckVsZW1lbnQsbz1lKHQuaGVscGVyKSxyPW8ub2Zmc2V0KCksaD1vLm91dGVyV2lkdGgoKS10LnNpemVEaWZmLndpZHRoLGw9by5vdXRlckhlaWdodCgpLXQuc2l6ZURpZmYuaGVpZ2h0O3QuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3JlbGF0aXZlLy50ZXN0KGEuY3NzKCJwb3NpdGlvbiIpKSYmZSh0aGlzKS5jc3Moe2xlZnQ6ci5sZWZ0LW4ubGVmdC1zLmxlZnQsd2lkdGg6aCxoZWlnaHQ6bH0pLHQuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3N0YXRpYy8udGVzdChhLmNzcygicG9zaXRpb24iKSkmJmUodGhpcykuY3NzKHtsZWZ0OnIubGVmdC1uLmxlZnQtcy5sZWZ0LHdpZHRoOmgsaGVpZ2h0Omx9KX19KSxlLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImFsc29SZXNpemUiLHtzdGFydDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLGk9dC5vcHRpb25zO2UoaS5hbHNvUmVzaXplKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LmRhdGEoInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplIix7d2lkdGg6cGFyc2VJbnQodC53aWR0aCgpLDEwKSxoZWlnaHQ6cGFyc2VJbnQodC5oZWlnaHQoKSwxMCksbGVmdDpwYXJzZUludCh0LmNzcygibGVmdCIpLDEwKSx0b3A6cGFyc2VJbnQodC5jc3MoInRvcCIpLDEwKX0pfSl9LHJlc2l6ZTpmdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLG49cy5vcHRpb25zLGE9cy5vcmlnaW5hbFNpemUsbz1zLm9yaWdpbmFsUG9zaXRpb24scj17aGVpZ2h0OnMuc2l6ZS5oZWlnaHQtYS5oZWlnaHR8fDAsd2lkdGg6cy5zaXplLndpZHRoLWEud2lkdGh8fDAsdG9wOnMucG9zaXRpb24udG9wLW8udG9wfHwwLGxlZnQ6cy5wb3NpdGlvbi5sZWZ0LW8ubGVmdHx8MH07ZShuLmFsc29SZXNpemUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLHM9ZSh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZSIpLG49e30sYT10LnBhcmVudHMoaS5vcmlnaW5hbEVsZW1lbnRbMF0pLmxlbmd0aD9bIndpZHRoIiwiaGVpZ2h0Il06WyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiXTtlLmVhY2goYSxmdW5jdGlvbihlLHQpe3ZhciBpPShzW3RdfHwwKSsoclt0XXx8MCk7aSYmaT49MCYmKG5bdF09aXx8bnVsbCl9KSx0LmNzcyhuKX0pfSxzdG9wOmZ1bmN0aW9uKCl7ZSh0aGlzKS5yZW1vdmVEYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIpfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ2hvc3QiLHtzdGFydDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLGk9dC5vcHRpb25zLHM9dC5zaXplO3QuZ2hvc3Q9dC5vcmlnaW5hbEVsZW1lbnQuY2xvbmUoKSx0Lmdob3N0LmNzcyh7b3BhY2l0eTouMjUsZGlzcGxheToiYmxvY2siLHBvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OnMuaGVpZ2h0LHdpZHRoOnMud2lkdGgsbWFyZ2luOjAsbGVmdDowLHRvcDowfSkuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1naG9zdCIpLmFkZENsYXNzKCJzdHJpbmciPT10eXBlb2YgaS5naG9zdD9pLmdob3N0OiIiKSx0Lmdob3N0LmFwcGVuZFRvKHQuaGVscGVyKX0scmVzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIik7dC5naG9zdCYmdC5naG9zdC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OnQuc2l6ZS5oZWlnaHQsd2lkdGg6dC5zaXplLndpZHRofSl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLnJlc2l6YWJsZSgiaW5zdGFuY2UiKTt0Lmdob3N0JiZ0LmhlbHBlciYmdC5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxkKHQuZ2hvc3QuZ2V0KDApKX19KSxlLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImdyaWQiLHtyZXNpemU6ZnVuY3Rpb24oKXt2YXIgdCxpPWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLHM9aS5vcHRpb25zLG49aS5zaXplLGE9aS5vcmlnaW5hbFNpemUsbz1pLm9yaWdpbmFsUG9zaXRpb24scj1pLmF4aXMsaD0ibnVtYmVyIj09dHlwZW9mIHMuZ3JpZD9bcy5ncmlkLHMuZ3JpZF06cy5ncmlkLGw9aFswXXx8MSx1PWhbMV18fDEsZD1NYXRoLnJvdW5kKChuLndpZHRoLWEud2lkdGgpL2wpKmwsYz1NYXRoLnJvdW5kKChuLmhlaWdodC1hLmhlaWdodCkvdSkqdSxwPWEud2lkdGgrZCxmPWEuaGVpZ2h0K2MsbT1zLm1heFdpZHRoJiZwPnMubWF4V2lkdGgsZz1zLm1heEhlaWdodCYmZj5zLm1heEhlaWdodCx2PXMubWluV2lkdGgmJnMubWluV2lkdGg+cCx5PXMubWluSGVpZ2h0JiZzLm1pbkhlaWdodD5mO3MuZ3JpZD1oLHYmJihwKz1sKSx5JiYoZis9dSksbSYmKHAtPWwpLGcmJihmLT11KSwvXihzZXxzfGUpJC8udGVzdChyKT8oaS5zaXplLndpZHRoPXAsaS5zaXplLmhlaWdodD1mKTovXihuZSkkLy50ZXN0KHIpPyhpLnNpemUud2lkdGg9cCxpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi50b3A9by50b3AtYyk6L14oc3cpJC8udGVzdChyKT8oaS5zaXplLndpZHRoPXAsaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24ubGVmdD1vLmxlZnQtZCk6KCgwPj1mLXV8fDA+PXAtbCkmJih0PWkuX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9ucyh0aGlzKSksZi11PjA/KGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLnRvcD1vLnRvcC1jKTooZj11LXQuaGVpZ2h0LGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLnRvcD1vLnRvcCthLmhlaWdodC1mKSxwLWw+MD8oaS5zaXplLndpZHRoPXAsaS5wb3NpdGlvbi5sZWZ0PW8ubGVmdC1kKToocD1sLXQud2lkdGgsaS5zaXplLndpZHRoPXAsaS5wb3NpdGlvbi5sZWZ0PW8ubGVmdCthLndpZHRoLXApKX19KSxlLnVpLnJlc2l6YWJsZSxlLndpZGdldCgidWkuc2VsZWN0YWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40IixvcHRpb25zOnthcHBlbmRUbzoiYm9keSIsYXV0b1JlZnJlc2g6ITAsZGlzdGFuY2U6MCxmaWx0ZXI6IioiLHRvbGVyYW5jZToidG91Y2giLHNlbGVjdGVkOm51bGwsc2VsZWN0aW5nOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdW5zZWxlY3RlZDpudWxsLHVuc2VsZWN0aW5nOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXM7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RhYmxlIiksdGhpcy5kcmFnZ2VkPSExLHRoaXMucmVmcmVzaD1mdW5jdGlvbigpe3Q9ZShpLm9wdGlvbnMuZmlsdGVyLGkuZWxlbWVudFswXSksdC5hZGRDbGFzcygidWktc2VsZWN0ZWUiKSx0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5vZmZzZXQoKTtlLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIix7ZWxlbWVudDp0aGlzLCRlbGVtZW50OnQsbGVmdDppLmxlZnQsdG9wOmkudG9wLHJpZ2h0OmkubGVmdCt0Lm91dGVyV2lkdGgoKSxib3R0b206aS50b3ArdC5vdXRlckhlaWdodCgpLHN0YXJ0c2VsZWN0ZWQ6ITEsc2VsZWN0ZWQ6dC5oYXNDbGFzcygidWktc2VsZWN0ZWQiKSxzZWxlY3Rpbmc6dC5oYXNDbGFzcygidWktc2VsZWN0aW5nIiksdW5zZWxlY3Rpbmc6dC5oYXNDbGFzcygidWktdW5zZWxlY3RpbmciKX0pfSl9LHRoaXMucmVmcmVzaCgpLHRoaXMuc2VsZWN0ZWVzPXQuYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksdGhpcy5fbW91c2VJbml0KCksdGhpcy5oZWxwZXI9ZSgiPGRpdiBjbGFzcz0ndWktc2VsZWN0YWJsZS1oZWxwZXInPjwvZGl2PiIpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWVzLnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZSIpLnJlbW92ZURhdGEoInNlbGVjdGFibGUtaXRlbSIpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0YWJsZSB1aS1zZWxlY3RhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz10aGlzLm9wdGlvbnM7dGhpcy5vcG9zPVt0LnBhZ2VYLHQucGFnZVldLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8KHRoaXMuc2VsZWN0ZWVzPWUocy5maWx0ZXIsdGhpcy5lbGVtZW50WzBdKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsdCksZShzLmFwcGVuZFRvKS5hcHBlbmQodGhpcy5oZWxwZXIpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDp0LnBhZ2VYLHRvcDp0LnBhZ2VZLHdpZHRoOjAsaGVpZ2h0OjB9KSxzLmF1dG9SZWZyZXNoJiZ0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcy5maWx0ZXIoIi51aS1zZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgcz1lLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7cy5zdGFydHNlbGVjdGVkPSEwLHQubWV0YUtleXx8dC5jdHJsS2V5fHwocy4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxzLnNlbGVjdGVkPSExLHMuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIikscy51bnNlbGVjdGluZz0hMCxpLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6cy5lbGVtZW50fSkpfSksZSh0LnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHMsbj1lLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7cmV0dXJuIG4/KHM9IXQubWV0YUtleSYmIXQuY3RybEtleXx8IW4uJGVsZW1lbnQuaGFzQ2xhc3MoInVpLXNlbGVjdGVkIiksbi4kZWxlbWVudC5yZW1vdmVDbGFzcyhzPyJ1aS11bnNlbGVjdGluZyI6InVpLXNlbGVjdGVkIikuYWRkQ2xhc3Mocz8idWktc2VsZWN0aW5nIjoidWktdW5zZWxlY3RpbmciKSxuLnVuc2VsZWN0aW5nPSFzLG4uc2VsZWN0aW5nPXMsbi5zZWxlY3RlZD1zLHM/aS5fdHJpZ2dlcigic2VsZWN0aW5nIix0LHtzZWxlY3Rpbmc6bi5lbGVtZW50fSk6aS5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOm4uZWxlbWVudH0pLCExKTp2b2lkIDB9KSl9LF9tb3VzZURyYWc6ZnVuY3Rpb24odCl7aWYodGhpcy5kcmFnZ2VkPSEwLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpe3ZhciBpLHM9dGhpcyxuPXRoaXMub3B0aW9ucyxhPXRoaXMub3Bvc1swXSxvPXRoaXMub3Bvc1sxXSxyPXQucGFnZVgsaD10LnBhZ2VZO3JldHVybiBhPnImJihpPXIscj1hLGE9aSksbz5oJiYoaT1oLGg9byxvPWkpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDphLHRvcDpvLHdpZHRoOnItYSxoZWlnaHQ6aC1vfSksdGhpcy5zZWxlY3RlZXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKSxsPSExOwppJiZpLmVsZW1lbnQhPT1zLmVsZW1lbnRbMF0mJigidG91Y2giPT09bi50b2xlcmFuY2U/bD0hKGkubGVmdD5yfHxhPmkucmlnaHR8fGkudG9wPmh8fG8+aS5ib3R0b20pOiJmaXQiPT09bi50b2xlcmFuY2UmJihsPWkubGVmdD5hJiZyPmkucmlnaHQmJmkudG9wPm8mJmg+aS5ib3R0b20pLGw/KGkuc2VsZWN0ZWQmJihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuc2VsZWN0ZWQ9ITEpLGkudW5zZWxlY3RpbmcmJihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGkudW5zZWxlY3Rpbmc9ITEpLGkuc2VsZWN0aW5nfHwoaS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0aW5nIiksaS5zZWxlY3Rpbmc9ITAscy5fdHJpZ2dlcigic2VsZWN0aW5nIix0LHtzZWxlY3Rpbmc6aS5lbGVtZW50fSkpKTooaS5zZWxlY3RpbmcmJigodC5tZXRhS2V5fHx0LmN0cmxLZXkpJiZpLnN0YXJ0c2VsZWN0ZWQ/KGkuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLGkuc2VsZWN0aW5nPSExLGkuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXNlbGVjdGVkIiksaS5zZWxlY3RlZD0hMCk6KGkuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLGkuc2VsZWN0aW5nPSExLGkuc3RhcnRzZWxlY3RlZCYmKGkuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksaS51bnNlbGVjdGluZz0hMCkscy5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOmkuZWxlbWVudH0pKSksaS5zZWxlY3RlZCYmKHQubWV0YUtleXx8dC5jdHJsS2V5fHxpLnN0YXJ0c2VsZWN0ZWR8fChpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuc2VsZWN0ZWQ9ITEsaS4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxpLnVuc2VsZWN0aW5nPSEwLHMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIix0LHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSkpKSl9KSwhMX19LF9tb3VzZVN0b3A6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcztyZXR1cm4gdGhpcy5kcmFnZ2VkPSExLGUoIi51aS11bnNlbGVjdGluZyIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO3MuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXVuc2VsZWN0aW5nIikscy51bnNlbGVjdGluZz0hMSxzLnN0YXJ0c2VsZWN0ZWQ9ITEsaS5fdHJpZ2dlcigidW5zZWxlY3RlZCIsdCx7dW5zZWxlY3RlZDpzLmVsZW1lbnR9KX0pLGUoIi51aS1zZWxlY3RpbmciLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBzPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKS5hZGRDbGFzcygidWktc2VsZWN0ZWQiKSxzLnNlbGVjdGluZz0hMSxzLnNlbGVjdGVkPSEwLHMuc3RhcnRzZWxlY3RlZD0hMCxpLl90cmlnZ2VyKCJzZWxlY3RlZCIsdCx7c2VsZWN0ZWQ6cy5lbGVtZW50fSl9KSx0aGlzLl90cmlnZ2VyKCJzdG9wIix0KSx0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX19KSxlLndpZGdldCgidWkuc29ydGFibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuMTEuNCIsd2lkZ2V0RXZlbnRQcmVmaXg6InNvcnQiLHJlYWR5OiExLG9wdGlvbnM6e2FwcGVuZFRvOiJwYXJlbnQiLGF4aXM6ITEsY29ubmVjdFdpdGg6ITEsY29udGFpbm1lbnQ6ITEsY3Vyc29yOiJhdXRvIixjdXJzb3JBdDohMSxkcm9wT25FbXB0eTohMCxmb3JjZVBsYWNlaG9sZGVyU2l6ZTohMSxmb3JjZUhlbHBlclNpemU6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOiJvcmlnaW5hbCIsaXRlbXM6Ij4gKiIsb3BhY2l0eTohMSxwbGFjZWhvbGRlcjohMSxyZXZlcnQ6ITEsc2Nyb2xsOiEwLHNjcm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNjb3BlOiJkZWZhdWx0Iix0b2xlcmFuY2U6ImludGVyc2VjdCIsekluZGV4OjFlMyxhY3RpdmF0ZTpudWxsLGJlZm9yZVN0b3A6bnVsbCxjaGFuZ2U6bnVsbCxkZWFjdGl2YXRlOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsLHJlY2VpdmU6bnVsbCxyZW1vdmU6bnVsbCxzb3J0Om51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdXBkYXRlOm51bGx9LF9pc092ZXJBeGlzOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gZT49dCYmdCtpPmV9LF9pc0Zsb2F0aW5nOmZ1bmN0aW9uKGUpe3JldHVybi9sZWZ0fHJpZ2h0Ly50ZXN0KGUuY3NzKCJmbG9hdCIpKXx8L2lubGluZXx0YWJsZS1jZWxsLy50ZXN0KGUuY3NzKCJkaXNwbGF5IikpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXJDYWNoZT17fSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNvcnRhYmxlIiksdGhpcy5yZWZyZXNoKCksdGhpcy5vZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpLHRoaXMucmVhZHk9ITB9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJoYW5kbGUiPT09ZSYmdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCl9LF9zZXRIYW5kbGVDbGFzc05hbWU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuZmluZCgiLnVpLXNvcnRhYmxlLWhhbmRsZSIpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oYW5kbGUiKSxlLmVhY2godGhpcy5pdGVtcyxmdW5jdGlvbigpeyh0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGFuZGxlP3RoaXMuaXRlbS5maW5kKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oYW5kbGUpOnRoaXMuaXRlbSkuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhhbmRsZSIpfSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZSB1aS1zb3J0YWJsZS1kaXNhYmxlZCIpLmZpbmQoIi51aS1zb3J0YWJsZS1oYW5kbGUiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGFuZGxlIiksdGhpcy5fbW91c2VEZXN0cm95KCk7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy5pdGVtc1tlXS5pdGVtLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lKyItaXRlbSIpO3JldHVybiB0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQsaSl7dmFyIHM9bnVsbCxuPSExLGE9dGhpcztyZXR1cm4gdGhpcy5yZXZlcnRpbmc/ITE6dGhpcy5vcHRpb25zLmRpc2FibGVkfHwic3RhdGljIj09PXRoaXMub3B0aW9ucy50eXBlPyExOih0aGlzLl9yZWZyZXNoSXRlbXModCksZSh0LnRhcmdldCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRhKHRoaXMsYS53aWRnZXROYW1lKyItaXRlbSIpPT09YT8ocz1lKHRoaXMpLCExKTp2b2lkIDB9KSxlLmRhdGEodC50YXJnZXQsYS53aWRnZXROYW1lKyItaXRlbSIpPT09YSYmKHM9ZSh0LnRhcmdldCkpLHM/IXRoaXMub3B0aW9ucy5oYW5kbGV8fGl8fChlKHRoaXMub3B0aW9ucy5oYW5kbGUscykuZmluZCgiKiIpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09PXQudGFyZ2V0JiYobj0hMCl9KSxuKT8odGhpcy5jdXJyZW50SXRlbT1zLHRoaXMuX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zKCksITApOiExOiExKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbz10aGlzLm9wdGlvbnM7aWYodGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKHQpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSx0aGlzLm9mZnNldD10aGlzLmN1cnJlbnRJdGVtLm9mZnNldCgpLHRoaXMub2Zmc2V0PXt0b3A6dGhpcy5vZmZzZXQudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLm9mZnNldC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0fSxlLmV4dGVuZCh0aGlzLm9mZnNldCx7Y2xpY2s6e2xlZnQ6dC5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDp0LnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9KSx0aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbih0KSx0aGlzLm9yaWdpbmFsUGFnZVg9dC5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9dC5wYWdlWSxvLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKG8uY3Vyc29yQXQpLHRoaXMuZG9tUG9zaXRpb249e3ByZXY6dGhpcy5jdXJyZW50SXRlbS5wcmV2KClbMF0scGFyZW50OnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF19LHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5jdXJyZW50SXRlbS5oaWRlKCksdGhpcy5fY3JlYXRlUGxhY2Vob2xkZXIoKSxvLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLG8uY3Vyc29yJiYiYXV0byIhPT1vLmN1cnNvciYmKGE9dGhpcy5kb2N1bWVudC5maW5kKCJib2R5IiksdGhpcy5zdG9yZWRDdXJzb3I9YS5jc3MoImN1cnNvciIpLGEuY3NzKCJjdXJzb3IiLG8uY3Vyc29yKSx0aGlzLnN0b3JlZFN0eWxlc2hlZXQ9ZSgiPHN0eWxlPip7IGN1cnNvcjogIitvLmN1cnNvcisiICFpbXBvcnRhbnQ7IH08L3N0eWxlPiIpLmFwcGVuZFRvKGEpKSxvLm9wYWNpdHkmJih0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiKSYmKHRoaXMuX3N0b3JlZE9wYWNpdHk9dGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikpLHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIsby5vcGFjaXR5KSksby56SW5kZXgmJih0aGlzLmhlbHBlci5jc3MoInpJbmRleCIpJiYodGhpcy5fc3RvcmVkWkluZGV4PXRoaXMuaGVscGVyLmNzcygiekluZGV4IikpLHRoaXMuaGVscGVyLmNzcygiekluZGV4IixvLnpJbmRleCkpLHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmIkhUTUwiIT09dGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSYmKHRoaXMub3ZlcmZsb3dPZmZzZXQ9dGhpcy5zY3JvbGxQYXJlbnQub2Zmc2V0KCkpLHRoaXMuX3RyaWdnZXIoInN0YXJ0Iix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLl9wcmVzZXJ2ZUhlbHBlclByb3BvcnRpb25zfHx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksIXMpZm9yKG49dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO24+PTA7bi0tKXRoaXMuY29udGFpbmVyc1tuXS5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKTtyZXR1cm4gZS51aS5kZG1hbmFnZXImJihlLnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLGUudWkuZGRtYW5hZ2VyJiYhby5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpLHRoaXMuX21vdXNlRHJhZyh0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYSxvPXRoaXMub3B0aW9ucyxyPSExO2Zvcih0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSx0aGlzLmxhc3RQb3NpdGlvbkFic3x8KHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMpLHRoaXMub3B0aW9ucy5zY3JvbGwmJih0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJiJIVE1MIiE9PXRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWU/KHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wK3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldEhlaWdodC10LnBhZ2VZPG8uc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wK28uc2Nyb2xsU3BlZWQ6dC5wYWdlWS10aGlzLm92ZXJmbG93T2Zmc2V0LnRvcDxvLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wLW8uc2Nyb2xsU3BlZWQpLHRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aC10LnBhZ2VYPG8uc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQrby5zY3JvbGxTcGVlZDp0LnBhZ2VYLXRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdDxvLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQtby5zY3JvbGxTcGVlZCkpOih0LnBhZ2VZLXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCk8by5zY3JvbGxTZW5zaXRpdml0eT9yPXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCktby5zY3JvbGxTcGVlZCk6dGhpcy53aW5kb3cuaGVpZ2h0KCktKHQucGFnZVktdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSk8by5zY3JvbGxTZW5zaXRpdml0eSYmKHI9dGhpcy5kb2N1bWVudC5zY3JvbGxUb3AodGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKStvLnNjcm9sbFNwZWVkKSksdC5wYWdlWC10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKTxvLnNjcm9sbFNlbnNpdGl2aXR5P3I9dGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KHRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLW8uc2Nyb2xsU3BlZWQpOnRoaXMud2luZG93LndpZHRoKCktKHQucGFnZVgtdGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCkpPG8uc2Nyb2xsU2Vuc2l0aXZpdHkmJihyPXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCh0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKStvLnNjcm9sbFNwZWVkKSkpLHIhPT0hMSYmZS51aS5kZG1hbmFnZXImJiFvLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCkpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIiksdGhpcy5vcHRpb25zLmF4aXMmJiJ5Ij09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrInB4IiksdGhpcy5vcHRpb25zLmF4aXMmJiJ4Ij09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIpLGk9dGhpcy5pdGVtcy5sZW5ndGgtMTtpPj0wO2ktLSlpZihzPXRoaXMuaXRlbXNbaV0sbj1zLml0ZW1bMF0sYT10aGlzLl9pbnRlcnNlY3RzV2l0aFBvaW50ZXIocyksYSYmcy5pbnN0YW5jZT09PXRoaXMuY3VycmVudENvbnRhaW5lciYmbiE9PXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMucGxhY2Vob2xkZXJbMT09PWE/Im5leHQiOiJwcmV2Il0oKVswXSE9PW4mJiFlLmNvbnRhaW5zKHRoaXMucGxhY2Vob2xkZXJbMF0sbikmJigic2VtaS1keW5hbWljIj09PXRoaXMub3B0aW9ucy50eXBlPyFlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSxuKTohMCkpe2lmKHRoaXMuZGlyZWN0aW9uPTE9PT1hPyJkb3duIjoidXAiLCJwb2ludGVyIiE9PXRoaXMub3B0aW9ucy50b2xlcmFuY2UmJiF0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKHMpKWJyZWFrO3RoaXMuX3JlYXJyYW5nZSh0LHMpLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2goKSk7YnJlYWt9cmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKHQpLGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsdCksdGhpcy5fdHJpZ2dlcigic29ydCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicywhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0LGkpe2lmKHQpe2lmKGUudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSx0aGlzLm9wdGlvbnMucmV2ZXJ0KXt2YXIgcz10aGlzLG49dGhpcy5wbGFjZWhvbGRlci5vZmZzZXQoKSxhPXRoaXMub3B0aW9ucy5heGlzLG89e307YSYmIngiIT09YXx8KG8ubGVmdD1uLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCkpLGEmJiJ5IiE9PWF8fChvLnRvcD1uLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLXRoaXMubWFyZ2lucy50b3ArKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsVG9wKSksdGhpcy5yZXZlcnRpbmc9ITAsZSh0aGlzLmhlbHBlcikuYW5pbWF0ZShvLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnQsMTApfHw1MDAsZnVuY3Rpb24oKXtzLl9jbGVhcih0KX0pfWVsc2UgdGhpcy5fY2xlYXIodCxpKTtyZXR1cm4hMX19LGNhbmNlbDpmdW5jdGlvbigpe2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuX21vdXNlVXAoe3RhcmdldDpudWxsfSksIm9yaWdpbmFsIj09PXRoaXMub3B0aW9ucy5oZWxwZXI/dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIik6dGhpcy5jdXJyZW50SXRlbS5zaG93KCk7Zm9yKHZhciB0PXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLmNvbnRhaW5lcnNbdF0uX3RyaWdnZXIoImRlYWN0aXZhdGUiLG51bGwsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbdF0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1t0XS5fdHJpZ2dlcigib3V0IixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3RdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCl9cmV0dXJuIHRoaXMucGxhY2Vob2xkZXImJih0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUmJnRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSwib3JpZ2luYWwiIT09dGhpcy5vcHRpb25zLmhlbHBlciYmdGhpcy5oZWxwZXImJnRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUmJnRoaXMuaGVscGVyLnJlbW92ZSgpLGUuZXh0ZW5kKHRoaXMse2hlbHBlcjpudWxsLGRyYWdnaW5nOiExLHJldmVydGluZzohMSxfbm9GaW5hbFNvcnQ6bnVsbH0pLHRoaXMuZG9tUG9zaXRpb24ucHJldj9lKHRoaXMuZG9tUG9zaXRpb24ucHJldikuYWZ0ZXIodGhpcy5jdXJyZW50SXRlbSk6ZSh0aGlzLmRvbVBvc2l0aW9uLnBhcmVudCkucHJlcGVuZCh0aGlzLmN1cnJlbnRJdGVtKSksdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkodCYmdC5jb25uZWN0ZWQpLHM9W107cmV0dXJuIHQ9dHx8e30sZShpKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9KGUodC5pdGVtfHx0aGlzKS5hdHRyKHQuYXR0cmlidXRlfHwiaWQiKXx8IiIpLm1hdGNoKHQuZXhwcmVzc2lvbnx8LyguKylbXC09X10oLispLyk7aSYmcy5wdXNoKCh0LmtleXx8aVsxXSsiW10iKSsiPSIrKHQua2V5JiZ0LmV4cHJlc3Npb24/aVsxXTppWzJdKSl9KSwhcy5sZW5ndGgmJnQua2V5JiZzLnB1c2godC5rZXkrIj0iKSxzLmpvaW4oIiYiKX0sdG9BcnJheTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxzPVtdO3JldHVybiB0PXR8fHt9LGkuZWFjaChmdW5jdGlvbigpe3MucHVzaChlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8ImlkIil8fCIiKX0pLHN9LF9pbnRlcnNlY3RzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uQWJzLmxlZnQsaT10K3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgscz10aGlzLnBvc2l0aW9uQWJzLnRvcCxuPXMrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsYT1lLmxlZnQsbz1hK2Uud2lkdGgscj1lLnRvcCxoPXIrZS5oZWlnaHQsbD10aGlzLm9mZnNldC5jbGljay50b3AsdT10aGlzLm9mZnNldC5jbGljay5sZWZ0LGQ9IngiPT09dGhpcy5vcHRpb25zLmF4aXN8fHMrbD5yJiZoPnMrbCxjPSJ5Ij09PXRoaXMub3B0aW9ucy5heGlzfHx0K3U+YSYmbz50K3UscD1kJiZjO3JldHVybiJwb2ludGVyIj09PXRoaXMub3B0aW9ucy50b2xlcmFuY2V8fHRoaXMub3B0aW9ucy5mb3JjZVBvaW50ZXJGb3JDb250YWluZXJzfHwicG9pbnRlciIhPT10aGlzLm9wdGlvbnMudG9sZXJhbmNlJiZ0aGlzLmhlbHBlclByb3BvcnRpb25zW3RoaXMuZmxvYXRpbmc/IndpZHRoIjoiaGVpZ2h0Il0+ZVt0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdP3A6dCt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI+YSYmbz5pLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmcyt0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPnImJmg+bi10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yfSxfaW50ZXJzZWN0c1dpdGhQb2ludGVyOmZ1bmN0aW9uKGUpe3ZhciB0PSJ4Ij09PXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCxlLnRvcCxlLmhlaWdodCksaT0ieSI9PT10aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCxlLmxlZnQsZS53aWR0aCkscz10JiZpLG49dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksYT10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiBzP3RoaXMuZmxvYXRpbmc/YSYmInJpZ2h0Ij09PWF8fCJkb3duIj09PW4/MjoxOm4mJigiZG93biI9PT1uPzI6MSk6ITF9LF9pbnRlcnNlY3RzV2l0aFNpZGVzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLGUudG9wK2UuaGVpZ2h0LzIsZS5oZWlnaHQpLGk9dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCxlLmxlZnQrZS53aWR0aC8yLGUud2lkdGgpLHM9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksbj10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiB0aGlzLmZsb2F0aW5nJiZuPyJyaWdodCI9PT1uJiZpfHwibGVmdCI9PT1uJiYhaTpzJiYoImRvd24iPT09cyYmdHx8InVwIj09PXMmJiF0KX0sX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9zaXRpb25BYnMudG9wLXRoaXMubGFzdFBvc2l0aW9uQWJzLnRvcDtyZXR1cm4gMCE9PWUmJihlPjA/ImRvd24iOiJ1cCIpfSxfZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBvc2l0aW9uQWJzLmxlZnQtdGhpcy5sYXN0UG9zaXRpb25BYnMubGVmdDtyZXR1cm4gMCE9PWUmJihlPjA/InJpZ2h0IjoibGVmdCIpfSxyZWZyZXNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZWZyZXNoSXRlbXMoZSksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpc30sX2Nvbm5lY3RXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiBlLmNvbm5lY3RXaXRoLmNvbnN0cnVjdG9yPT09U3RyaW5nP1tlLmNvbm5lY3RXaXRoXTplLmNvbm5lY3RXaXRofSxfZ2V0SXRlbXNBc2pRdWVyeTpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7ci5wdXNoKHRoaXMpfXZhciBzLG4sYSxvLHI9W10saD1bXSxsPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYobCYmdClmb3Iocz1sLmxlbmd0aC0xO3M+PTA7cy0tKWZvcihhPWUobFtzXSx0aGlzLmRvY3VtZW50WzBdKSxuPWEubGVuZ3RoLTE7bj49MDtuLS0pbz1lLmRhdGEoYVtuXSx0aGlzLndpZGdldEZ1bGxOYW1lKSxvJiZvIT09dGhpcyYmIW8ub3B0aW9ucy5kaXNhYmxlZCYmaC5wdXNoKFtlLmlzRnVuY3Rpb24oby5vcHRpb25zLml0ZW1zKT9vLm9wdGlvbnMuaXRlbXMuY2FsbChvLmVsZW1lbnQpOmUoby5vcHRpb25zLml0ZW1zLG8uZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSxvXSk7Zm9yKGgucHVzaChbZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSx0aGlzXSkscz1oLmxlbmd0aC0xO3M+PTA7cy0tKWhbc11bMF0uZWFjaChpKTtyZXR1cm4gZShyKX0sX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50SXRlbS5maW5kKCI6ZGF0YSgiK3RoaXMud2lkZ2V0TmFtZSsiLWl0ZW0pIik7dGhpcy5pdGVtcz1lLmdyZXAodGhpcy5pdGVtcyxmdW5jdGlvbihlKXtmb3IodmFyIGk9MDt0Lmxlbmd0aD5pO2krKylpZih0W2ldPT09ZS5pdGVtWzBdKXJldHVybiExO3JldHVybiEwfSl9LF9yZWZyZXNoSXRlbXM6ZnVuY3Rpb24odCl7dGhpcy5pdGVtcz1bXSx0aGlzLmNvbnRhaW5lcnM9W3RoaXNdO3ZhciBpLHMsbixhLG8scixoLGwsdT10aGlzLml0ZW1zLGQ9W1tlLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLml0ZW1zKT90aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnRbMF0sdCx7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6ZSh0aGlzLm9wdGlvbnMuaXRlbXMsdGhpcy5lbGVtZW50KSx0aGlzXV0sYz10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGMmJnRoaXMucmVhZHkpZm9yKGk9Yy5sZW5ndGgtMTtpPj0wO2ktLSlmb3Iobj1lKGNbaV0sdGhpcy5kb2N1bWVudFswXSkscz1uLmxlbmd0aC0xO3M+PTA7cy0tKWE9ZS5kYXRhKG5bc10sdGhpcy53aWRnZXRGdWxsTmFtZSksYSYmYSE9PXRoaXMmJiFhLm9wdGlvbnMuZGlzYWJsZWQmJihkLnB1c2goW2UuaXNGdW5jdGlvbihhLm9wdGlvbnMuaXRlbXMpP2Eub3B0aW9ucy5pdGVtcy5jYWxsKGEuZWxlbWVudFswXSx0LHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTplKGEub3B0aW9ucy5pdGVtcyxhLmVsZW1lbnQpLGFdKSx0aGlzLmNvbnRhaW5lcnMucHVzaChhKSk7Zm9yKGk9ZC5sZW5ndGgtMTtpPj0wO2ktLSlmb3Iobz1kW2ldWzFdLHI9ZFtpXVswXSxzPTAsbD1yLmxlbmd0aDtsPnM7cysrKWg9ZShyW3NdKSxoLmRhdGEodGhpcy53aWRnZXROYW1lKyItaXRlbSIsbyksdS5wdXNoKHtpdGVtOmgsaW5zdGFuY2U6byx3aWR0aDowLGhlaWdodDowLGxlZnQ6MCx0b3A6MH0pfSxyZWZyZXNoUG9zaXRpb25zOmZ1bmN0aW9uKHQpe3RoaXMuZmxvYXRpbmc9dGhpcy5pdGVtcy5sZW5ndGg/IngiPT09dGhpcy5vcHRpb25zLmF4aXN8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5pdGVtc1swXS5pdGVtKTohMSx0aGlzLm9mZnNldFBhcmVudCYmdGhpcy5oZWxwZXImJih0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkpO3ZhciBpLHMsbixhO2ZvcihpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0pcz10aGlzLml0ZW1zW2ldLHMuaW5zdGFuY2UhPT10aGlzLmN1cnJlbnRDb250YWluZXImJnRoaXMuY3VycmVudENvbnRhaW5lciYmcy5pdGVtWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXXx8KG49dGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQ/ZSh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCxzLml0ZW0pOnMuaXRlbSx0fHwocy53aWR0aD1uLm91dGVyV2lkdGgoKSxzLmhlaWdodD1uLm91dGVySGVpZ2h0KCkpLGE9bi5vZmZzZXQoKSxzLmxlZnQ9YS5sZWZ0LHMudG9wPWEudG9wKTtpZih0aGlzLm9wdGlvbnMuY3VzdG9tJiZ0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzKXRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMuY2FsbCh0aGlzKTtlbHNlIGZvcihpPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtpPj0wO2ktLSlhPXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm9mZnNldCgpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5sZWZ0PWEubGVmdCx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUudG9wPWEudG9wLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS53aWR0aD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlcldpZHRoKCksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmhlaWdodD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlckhlaWdodCgpO3JldHVybiB0aGlzfSxfY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCl7dD10fHx0aGlzO3ZhciBpLHM9dC5vcHRpb25zO3MucGxhY2Vob2xkZXImJnMucGxhY2Vob2xkZXIuY29uc3RydWN0b3IhPT1TdHJpbmd8fChpPXMucGxhY2Vob2xkZXIscy5wbGFjZWhvbGRlcj17ZWxlbWVudDpmdW5jdGlvbigpe3ZhciBzPXQuY3VycmVudEl0ZW1bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPWUoIjwiK3MrIj4iLHQuZG9jdW1lbnRbMF0pLmFkZENsYXNzKGl8fHQuY3VycmVudEl0ZW1bMF0uY2xhc3NOYW1lKyIgdWktc29ydGFibGUtcGxhY2Vob2xkZXIiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIik7cmV0dXJuInRib2R5Ij09PXM/dC5fY3JlYXRlVHJQbGFjZWhvbGRlcih0LmN1cnJlbnRJdGVtLmZpbmQoInRyIikuZXEoMCksZSgiPHRyPiIsdC5kb2N1bWVudFswXSkuYXBwZW5kVG8obikpOiJ0ciI9PT1zP3QuX2NyZWF0ZVRyUGxhY2Vob2xkZXIodC5jdXJyZW50SXRlbSxuKToiaW1nIj09PXMmJm4uYXR0cigic3JjIix0LmN1cnJlbnRJdGVtLmF0dHIoInNyYyIpKSxpfHxuLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpLG59LHVwZGF0ZTpmdW5jdGlvbihlLG4peyghaXx8cy5mb3JjZVBsYWNlaG9sZGVyU2l6ZSkmJihuLmhlaWdodCgpfHxuLmhlaWdodCh0LmN1cnJlbnRJdGVtLmlubmVySGVpZ2h0KCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdUb3AiKXx8MCwxMCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdCb3R0b20iKXx8MCwxMCkpLG4ud2lkdGgoKXx8bi53aWR0aCh0LmN1cnJlbnRJdGVtLmlubmVyV2lkdGgoKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0xlZnQiKXx8MCwxMCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdSaWdodCIpfHwwLDEwKSkpfX0pLHQucGxhY2Vob2xkZXI9ZShzLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbCh0LmVsZW1lbnQsdC5jdXJyZW50SXRlbSkpLHQuY3VycmVudEl0ZW0uYWZ0ZXIodC5wbGFjZWhvbGRlcikscy5wbGFjZWhvbGRlci51cGRhdGUodCx0LnBsYWNlaG9sZGVyKX0sX2NyZWF0ZVRyUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz10aGlzO3QuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7ZSgiPHRkPiYjMTYwOzwvdGQ+IixzLmRvY3VtZW50WzBdKS5hdHRyKCJjb2xzcGFuIixlKHRoaXMpLmF0dHIoImNvbHNwYW4iKXx8MSkuYXBwZW5kVG8oaSl9KX0sX2NvbnRhY3RDb250YWluZXJzOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG8scixoLGwsdSxkLGM9bnVsbCxwPW51bGw7Zm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKWlmKCFlLmNvbnRhaW5zKHRoaXMuY3VycmVudEl0ZW1bMF0sdGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0pKWlmKHRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZSkpe2lmKGMmJmUuY29udGFpbnModGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0sYy5lbGVtZW50WzBdKSljb250aW51ZTtjPXRoaXMuY29udGFpbmVyc1tpXSxwPWl9ZWxzZSB0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tpXS5fdHJpZ2dlcigib3V0Iix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLm92ZXI9MCk7aWYoYylpZigxPT09dGhpcy5jb250YWluZXJzLmxlbmd0aCl0aGlzLmNvbnRhaW5lcnNbcF0uY29udGFpbmVyQ2FjaGUub3Zlcnx8KHRoaXMuY29udGFpbmVyc1twXS5fdHJpZ2dlcigib3ZlciIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1twXS5jb250YWluZXJDYWNoZS5vdmVyPTEpO2Vsc2V7Zm9yKG49MWU0LGE9bnVsbCx1PWMuZmxvYXRpbmd8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5jdXJyZW50SXRlbSksbz11PyJsZWZ0IjoidG9wIixyPXU/IndpZHRoIjoiaGVpZ2h0IixkPXU/ImNsaWVudFgiOiJjbGllbnRZIixzPXRoaXMuaXRlbXMubGVuZ3RoLTE7cz49MDtzLS0pZS5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudFswXSx0aGlzLml0ZW1zW3NdLml0ZW1bMF0pJiZ0aGlzLml0ZW1zW3NdLml0ZW1bMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiYoaD10aGlzLml0ZW1zW3NdLml0ZW0ub2Zmc2V0KClbb10sbD0hMSx0W2RdLWg+dGhpcy5pdGVtc1tzXVtyXS8yJiYobD0hMCksbj5NYXRoLmFicyh0W2RdLWgpJiYobj1NYXRoLmFicyh0W2RdLWgpLGE9dGhpcy5pdGVtc1tzXSx0aGlzLmRpcmVjdGlvbj1sPyJ1cCI6ImRvd24iKSk7aWYoIWEmJiF0aGlzLm9wdGlvbnMuZHJvcE9uRW1wdHkpcmV0dXJuO2lmKHRoaXMuY3VycmVudENvbnRhaW5lcj09PXRoaXMuY29udGFpbmVyc1twXSlyZXR1cm4gdGhpcy5jdXJyZW50Q29udGFpbmVyLmNvbnRhaW5lckNhY2hlLm92ZXJ8fCh0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoIm92ZXIiLHQsdGhpcy5fdWlIYXNoKCkpLHRoaXMuY3VycmVudENvbnRhaW5lci5jb250YWluZXJDYWNoZS5vdmVyPTEpLHZvaWQgMDthP3RoaXMuX3JlYXJyYW5nZSh0LGEsbnVsbCwhMCk6dGhpcy5fcmVhcnJhbmdlKHQsbnVsbCx0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudCwhMCksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLmNvbnRhaW5lcnNbcF0sdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyLnVwZGF0ZSh0aGlzLmN1cnJlbnRDb250YWluZXIsdGhpcy5wbGFjZWhvbGRlciksdGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKCJvdmVyIix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3BdLmNvbnRhaW5lckNhY2hlLm92ZXI9MX19LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9ZS5pc0Z1bmN0aW9uKGkuaGVscGVyKT9lKGkuaGVscGVyLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbdCx0aGlzLmN1cnJlbnRJdGVtXSkpOiJjbG9uZSI9PT1pLmhlbHBlcj90aGlzLmN1cnJlbnRJdGVtLmNsb25lKCk6dGhpcy5jdXJyZW50SXRlbTtyZXR1cm4gcy5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxlKCJwYXJlbnQiIT09aS5hcHBlbmRUbz9pLmFwcGVuZFRvOnRoaXMuY3VycmVudEl0ZW1bMF0ucGFyZW50Tm9kZSlbMF0uYXBwZW5kQ2hpbGQoc1swXSksc1swXT09PXRoaXMuY3VycmVudEl0ZW1bMF0mJih0aGlzLl9zdG9yZWRDU1M9e3dpZHRoOnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUuaGVpZ2h0LHBvc2l0aW9uOnRoaXMuY3VycmVudEl0ZW0uY3NzKCJwb3NpdGlvbiIpLHRvcDp0aGlzLmN1cnJlbnRJdGVtLmNzcygidG9wIiksbGVmdDp0aGlzLmN1cnJlbnRJdGVtLmNzcygibGVmdCIpfSksKCFzWzBdLnN0eWxlLndpZHRofHxpLmZvcmNlSGVscGVyU2l6ZSkmJnMud2lkdGgodGhpcy5jdXJyZW50SXRlbS53aWR0aCgpKSwoIXNbMF0uc3R5bGUuaGVpZ2h0fHxpLmZvcmNlSGVscGVyU2l6ZSkmJnMuaGVpZ2h0KHRoaXMuY3VycmVudEl0ZW0uaGVpZ2h0KCkpLHN9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5zcGxpdCgiICIpKSxlLmlzQXJyYXkodCkmJih0PXtsZWZ0Oit0WzBdLHRvcDordFsxXXx8MH0pLCJsZWZ0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXQubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXQudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10LmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3RoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO3JldHVybiJhYnNvbHV0ZSI9PT10aGlzLmNzc1Bvc2l0aW9uJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodC5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksdC50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSwodGhpcy5vZmZzZXRQYXJlbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJiJodG1sIj09PXRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmZS51aS5pZSkmJih0PXt0b3A6MCxsZWZ0OjB9KSx7dG9wOnQudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSxsZWZ0OnQubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoInJlbGF0aXZlIj09PXRoaXMuY3NzUG9zaXRpb24pe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0ucG9zaXRpb24oKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcygibWFyZ2luTGVmdCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG49dGhpcy5vcHRpb25zOyJwYXJlbnQiPT09bi5jb250YWlubWVudCYmKG4uY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSksKCJkb2N1bWVudCI9PT1uLmNvbnRhaW5tZW50fHwid2luZG93Ij09PW4uY29udGFpbm1lbnQpJiYodGhpcy5jb250YWlubWVudD1bMC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LDAtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsImRvY3VtZW50Ij09PW4uY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC53aWR0aCgpOnRoaXMud2luZG93LndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCwoImRvY3VtZW50Ij09PW4uY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC53aWR0aCgpOnRoaXMud2luZG93LmhlaWdodCgpfHx0aGlzLmRvY3VtZW50WzBdLmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKSwvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvLnRlc3Qobi5jb250YWlubWVudCl8fCh0PWUobi5jb250YWlubWVudClbMF0saT1lKG4uY29udGFpbm1lbnQpLm9mZnNldCgpLHM9ImhpZGRlbiIhPT1lKHQpLmNzcygib3ZlcmZsb3ciKSx0aGlzLmNvbnRhaW5tZW50PVtpLmxlZnQrKHBhcnNlSW50KGUodCkuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKHQpLmNzcygicGFkZGluZ0xlZnQiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LGkudG9wKyhwYXJzZUludChlKHQpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKHQpLmNzcygicGFkZGluZ1RvcCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLnRvcCxpLmxlZnQrKHM/TWF0aC5tYXgodC5zY3JvbGxXaWR0aCx0Lm9mZnNldFdpZHRoKTp0Lm9mZnNldFdpZHRoKS0ocGFyc2VJbnQoZSh0KS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGUodCkuY3NzKCJwYWRkaW5nUmlnaHQiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsaS50b3ArKHM/TWF0aC5tYXgodC5zY3JvbGxIZWlnaHQsdC5vZmZzZXRIZWlnaHQpOnQub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoZSh0KS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZSh0KS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKHQsaSl7aXx8KGk9dGhpcy5wb3NpdGlvbik7dmFyIHM9ImFic29sdXRlIj09PXQ/MTotMSxuPSJhYnNvbHV0ZSIhPT10aGlzLmNzc1Bvc2l0aW9ufHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGE9LyhodG1sfGJvZHkpL2kudGVzdChuWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6aS50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnMrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpzLSgiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6YT8wOm4uc2Nyb2xsVG9wKCkpKnMsbGVmdDppLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCpzK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KnMtKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6YT8wOm4uc2Nyb2xsTGVmdCgpKSpzfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGkscyxuPXRoaXMub3B0aW9ucyxhPXQucGFnZVgsbz10LnBhZ2VZLHI9ImFic29sdXRlIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsaD0vKGh0bWx8Ym9keSkvaS50ZXN0KHJbMF0udGFnTmFtZSk7cmV0dXJuInJlbGF0aXZlIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLm9mZnNldFBhcmVudFswXXx8KHRoaXMub2Zmc2V0LnJlbGF0aXZlPXRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkpLHRoaXMub3JpZ2luYWxQb3NpdGlvbiYmKHRoaXMuY29udGFpbm1lbnQmJih0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXSYmKGE9dGhpcy5jb250YWlubWVudFswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdJiYobz10aGlzLmNvbnRhaW5tZW50WzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksdC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PnRoaXMuY29udGFpbm1lbnRbMl0mJihhPXRoaXMuY29udGFpbm1lbnRbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+dGhpcy5jb250YWlubWVudFszXSYmKG89dGhpcy5jb250YWlubWVudFszXSt0aGlzLm9mZnNldC5jbGljay50b3ApKSxuLmdyaWQmJihpPXRoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChvLXRoaXMub3JpZ2luYWxQYWdlWSkvbi5ncmlkWzFdKSpuLmdyaWRbMV0sbz10aGlzLmNvbnRhaW5tZW50P2ktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdJiZpLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDw9dGhpcy5jb250YWlubWVudFszXT9pOmktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdP2ktbi5ncmlkWzFdOmkrbi5ncmlkWzFdOmkscz10aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgoYS10aGlzLm9yaWdpbmFsUGFnZVgpL24uZ3JpZFswXSkqbi5ncmlkWzBdLGE9dGhpcy5jb250YWlubWVudD9zLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PXRoaXMuY29udGFpbm1lbnRbMF0mJnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdDw9dGhpcy5jb250YWlubWVudFsyXT9zOnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdD49dGhpcy5jb250YWlubWVudFswXT9zLW4uZ3JpZFswXTpzK24uZ3JpZFswXTpzKSkse3RvcDpvLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsoImZpeGVkIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmg/MDpyLnNjcm9sbFRvcCgpKSxsZWZ0OmEtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KygiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpOmg/MDpyLnNjcm9sbExlZnQoKSl9fSxfcmVhcnJhbmdlOmZ1bmN0aW9uKGUsdCxpLHMpe2k/aVswXS5hcHBlbmRDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKTp0Lml0ZW1bMF0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5wbGFjZWhvbGRlclswXSwiZG93biI9PT10aGlzLmRpcmVjdGlvbj90Lml0ZW1bMF06dC5pdGVtWzBdLm5leHRTaWJsaW5nKSx0aGlzLmNvdW50ZXI9dGhpcy5jb3VudGVyPysrdGhpcy5jb3VudGVyOjE7dmFyIG49dGhpcy5jb3VudGVyO3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7bj09PXRoaXMuY291bnRlciYmdGhpcy5yZWZyZXNoUG9zaXRpb25zKCFzKX0pfSxfY2xlYXI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKGUsdCxpKXtyZXR1cm4gZnVuY3Rpb24ocyl7aS5fdHJpZ2dlcihlLHMsdC5fdWlIYXNoKHQpKX19dGhpcy5yZXZlcnRpbmc9ITE7dmFyIHMsbj1bXTtpZighdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsLHRoaXMuaGVscGVyWzBdPT09dGhpcy5jdXJyZW50SXRlbVswXSl7Zm9yKHMgaW4gdGhpcy5fc3RvcmVkQ1NTKSgiYXV0byI9PT10aGlzLl9zdG9yZWRDU1Nbc118fCJzdGF0aWMiPT09dGhpcy5fc3RvcmVkQ1NTW3NdKSYmKHRoaXMuX3N0b3JlZENTU1tzXT0iIik7dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIil9ZWxzZSB0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodGhpcy5mcm9tT3V0c2lkZSYmIXQmJm4ucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJyZWNlaXZlIixlLHRoaXMuX3VpSGFzaCh0aGlzLmZyb21PdXRzaWRlKSl9KSwhdGhpcy5mcm9tT3V0c2lkZSYmdGhpcy5kb21Qb3NpdGlvbi5wcmV2PT09dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCIudWktc29ydGFibGUtaGVscGVyIilbMF0mJnRoaXMuZG9tUG9zaXRpb24ucGFyZW50PT09dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXXx8dHx8bi5wdXNoKGZ1bmN0aW9uKGUpe3RoaXMuX3RyaWdnZXIoInVwZGF0ZSIsZSx0aGlzLl91aUhhc2goKSl9KSx0aGlzIT09dGhpcy5jdXJyZW50Q29udGFpbmVyJiYodHx8KG4ucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJyZW1vdmUiLGUsdGhpcy5fdWlIYXNoKCkpfSksbi5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJyZWNlaXZlIix0LHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSksbi5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJ1cGRhdGUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmN1cnJlbnRDb250YWluZXIpKSkpLHM9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3M+PTA7cy0tKXR8fG4ucHVzaChpKCJkZWFjdGl2YXRlIix0aGlzLHRoaXMuY29udGFpbmVyc1tzXSkpLHRoaXMuY29udGFpbmVyc1tzXS5jb250YWluZXJDYWNoZS5vdmVyJiYobi5wdXNoKGkoIm91dCIsdGhpcyx0aGlzLmNvbnRhaW5lcnNbc10pKSx0aGlzLmNvbnRhaW5lcnNbc10uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTtpZih0aGlzLnN0b3JlZEN1cnNvciYmKHRoaXMuZG9jdW1lbnQuZmluZCgiYm9keSIpLmNzcygiY3Vyc29yIix0aGlzLnN0b3JlZEN1cnNvciksdGhpcy5zdG9yZWRTdHlsZXNoZWV0LnJlbW92ZSgpKSx0aGlzLl9zdG9yZWRPcGFjaXR5JiZ0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLCJhdXRvIj09PXRoaXMuX3N0b3JlZFpJbmRleD8iIjp0aGlzLl9zdG9yZWRaSW5kZXgpLHRoaXMuZHJhZ2dpbmc9ITEsdHx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlU3RvcCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbHx8KHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksdGhpcy5oZWxwZXI9bnVsbCksIXQpe2ZvcihzPTA7bi5sZW5ndGg+cztzKyspbltzXS5jYWxsKHRoaXMsZSk7dGhpcy5fdHJpZ2dlcigic3RvcCIsZSx0aGlzLl91aUhhc2goKSl9cmV0dXJuIHRoaXMuZnJvbU91dHNpZGU9ITEsIXRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbH0sX3RyaWdnZXI6ZnVuY3Rpb24oKXtlLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpPT09ITEmJnRoaXMuY2FuY2VsKCl9LF91aUhhc2g6ZnVuY3Rpb24odCl7dmFyIGk9dHx8dGhpcztyZXR1cm57aGVscGVyOmkuaGVscGVyLHBsYWNlaG9sZGVyOmkucGxhY2Vob2xkZXJ8fGUoW10pLHBvc2l0aW9uOmkucG9zaXRpb24sb3JpZ2luYWxQb3NpdGlvbjppLm9yaWdpbmFsUG9zaXRpb24sb2Zmc2V0OmkucG9zaXRpb25BYnMsaXRlbTppLmN1cnJlbnRJdGVtLHNlbmRlcjp0P3QuZWxlbWVudDpudWxsfX19KSxlLndpZGdldCgidWkuYWNjb3JkaW9uIix7dmVyc2lvbjoiMS4xMS40IixvcHRpb25zOnthY3RpdmU6MCxhbmltYXRlOnt9LGNvbGxhcHNpYmxlOiExLGV2ZW50OiJjbGljayIsaGVhZGVyOiI+IGxpID4gOmZpcnN0LWNoaWxkLD4gOm5vdChsaSk6ZXZlbiIsaGVpZ2h0U3R5bGU6ImF1dG8iLGljb25zOnthY3RpdmVIZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1zIixoZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1lIn0sYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsfSxoaWRlUHJvcHM6e2JvcmRlclRvcFdpZHRoOiJoaWRlIixib3JkZXJCb3R0b21XaWR0aDoiaGlkZSIscGFkZGluZ1RvcDoiaGlkZSIscGFkZGluZ0JvdHRvbToiaGlkZSIsaGVpZ2h0OiJoaWRlIn0sc2hvd1Byb3BzOntib3JkZXJUb3BXaWR0aDoic2hvdyIsYm9yZGVyQm90dG9tV2lkdGg6InNob3ciLHBhZGRpbmdUb3A6InNob3ciLHBhZGRpbmdCb3R0b206InNob3ciLGhlaWdodDoic2hvdyJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7dGhpcy5wcmV2U2hvdz10aGlzLnByZXZIaWRlPWUoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikuYXR0cigicm9sZSIsInRhYmxpc3QiKSx0LmNvbGxhcHNpYmxlfHx0LmFjdGl2ZSE9PSExJiZudWxsIT10LmFjdGl2ZXx8KHQuYWN0aXZlPTApLHRoaXMuX3Byb2Nlc3NQYW5lbHMoKSwwPnQuYWN0aXZlJiYodC5hY3RpdmUrPXRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMuX3JlZnJlc2goKX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybntoZWFkZXI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLm5leHQoKTplKCl9fSxfY3JlYXRlSWNvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuaWNvbnM7dCYmKGUoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWljb24gdWktaWNvbiAiK3QuaGVhZGVyKS5wcmVwZW5kVG8odGhpcy5oZWFkZXJzKSx0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKHQuaGVhZGVyKS5hZGRDbGFzcyh0LmFjdGl2ZUhlYWRlciksdGhpcy5oZWFkZXJzLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taWNvbnMiKSl9LF9kZXN0cm95SWNvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlcnMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1pY29ucyIpLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24gdWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldCIpLnJlbW92ZUF0dHIoInJvbGUiKSx0aGlzLmhlYWRlcnMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXIgdWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1jb250cm9scyIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLl9kZXN0cm95SWNvbnMoKSxlPXRoaXMuaGVhZGVycy5uZXh0KCkucmVtb3ZlQ2xhc3MoInVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIHVpLWFjY29yZGlvbi1jb250ZW50IHVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCIpLmNzcygiZGlzcGxheSIsIiIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtbGFiZWxsZWRieSIpLnJlbW92ZVVuaXF1ZUlkKCksImNvbnRlbnQiIT09dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlJiZlLmNzcygiaGVpZ2h0IiwiIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4iYWN0aXZlIj09PWU/KHRoaXMuX2FjdGl2YXRlKHQpLHZvaWQgMCk6KCJldmVudCI9PT1lJiYodGhpcy5vcHRpb25zLmV2ZW50JiZ0aGlzLl9vZmYodGhpcy5oZWFkZXJzLHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBFdmVudHModCkpLHRoaXMuX3N1cGVyKGUsdCksImNvbGxhcHNpYmxlIiE9PWV8fHR8fHRoaXMub3B0aW9ucy5hY3RpdmUhPT0hMXx8dGhpcy5fYWN0aXZhdGUoMCksImljb25zIj09PWUmJih0aGlzLl9kZXN0cm95SWNvbnMoKSx0JiZ0aGlzLl9jcmVhdGVJY29ucygpKSwiZGlzYWJsZWQiPT09ZSYmKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKS50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkpLHZvaWQgMCl9LF9rZXlkb3duOmZ1bmN0aW9uKHQpe2lmKCF0LmFsdEtleSYmIXQuY3RybEtleSl7dmFyIGk9ZS51aS5rZXlDb2RlLHM9dGhpcy5oZWFkZXJzLmxlbmd0aCxuPXRoaXMuaGVhZGVycy5pbmRleCh0LnRhcmdldCksYT0hMTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGkuUklHSFQ6Y2FzZSBpLkRPV046YT10aGlzLmhlYWRlcnNbKG4rMSklc107YnJlYWs7Y2FzZSBpLkxFRlQ6Y2FzZSBpLlVQOmE9dGhpcy5oZWFkZXJzWyhuLTErcyklc107YnJlYWs7Y2FzZSBpLlNQQUNFOmNhc2UgaS5FTlRFUjp0aGlzLl9ldmVudEhhbmRsZXIodCk7YnJlYWs7Y2FzZSBpLkhPTUU6YT10aGlzLmhlYWRlcnNbMF07YnJlYWs7Y2FzZSBpLkVORDphPXRoaXMuaGVhZGVyc1tzLTFdfWEmJihlKHQudGFyZ2V0KS5hdHRyKCJ0YWJJbmRleCIsLTEpLGUoYSkuYXR0cigidGFiSW5kZXgiLDApLGEuZm9jdXMoKSx0LnByZXZlbnREZWZhdWx0KCkpfX0sX3BhbmVsS2V5RG93bjpmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuVVAmJnQuY3RybEtleSYmZSh0LmN1cnJlbnRUYXJnZXQpLnByZXYoKS5mb2N1cygpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3RoaXMuX3Byb2Nlc3NQYW5lbHMoKSx0LmFjdGl2ZT09PSExJiZ0LmNvbGxhcHNpYmxlPT09ITB8fCF0aGlzLmhlYWRlcnMubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnQuYWN0aXZlPT09ITE/dGhpcy5fYWN0aXZhdGUoMCk6dGhpcy5hY3RpdmUubGVuZ3RoJiYhZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMuaGVhZGVycy5sZW5ndGg9PT10aGlzLmhlYWRlcnMuZmluZCgiLnVpLXN0YXRlLWRpc2FibGVkIikubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnRoaXMuX2FjdGl2YXRlKE1hdGgubWF4KDAsdC5hY3RpdmUtMSkpOnQuYWN0aXZlPXRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmFjdGl2ZSksdGhpcy5fZGVzdHJveUljb25zKCksdGhpcy5fcmVmcmVzaCgpfSxfcHJvY2Vzc1BhbmVsczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaGVhZGVycyx0PXRoaXMucGFuZWxzO3RoaXMuaGVhZGVycz10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGVhZGVyKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSx0aGlzLnBhbmVscz10aGlzLmhlYWRlcnMubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudCB1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmZpbHRlcigiOm5vdCgudWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlKSIpLmhpZGUoKSx0JiYodGhpcy5fb2ZmKGUubm90KHRoaXMuaGVhZGVycykpLHRoaXMuX29mZih0Lm5vdCh0aGlzLnBhbmVscykpKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXMub3B0aW9ucyxzPWkuaGVpZ2h0U3R5bGUsbj10aGlzLmVsZW1lbnQucGFyZW50KCk7dGhpcy5hY3RpdmU9dGhpcy5fZmluZEFjdGl2ZShpLmFjdGl2ZSkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSB1aS1jb3JuZXItdG9wIikucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0aGlzLmFjdGl2ZS5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpLnNob3coKSx0aGlzLmhlYWRlcnMuYXR0cigicm9sZSIsInRhYiIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC51bmlxdWVJZCgpLmF0dHIoImlkIikscz10Lm5leHQoKSxuPXMudW5pcXVlSWQoKS5hdHRyKCJpZCIpO3QuYXR0cigiYXJpYS1jb250cm9scyIsbikscy5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGkpfSkubmV4dCgpLmF0dHIoInJvbGUiLCJ0YWJwYW5lbCIpLHRoaXMuaGVhZGVycy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmF0dHIoeyJhcmlhLWhpZGRlbiI6InRydWUifSkuaGlkZSgpLHRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pLm5leHQoKS5hdHRyKHsiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KTp0aGlzLmhlYWRlcnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApLHRoaXMuX2NyZWF0ZUljb25zKCksdGhpcy5fc2V0dXBFdmVudHMoaS5ldmVudCksImZpbGwiPT09cz8odD1uLmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncygiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKSxzPWkuY3NzKCJwb3NpdGlvbiIpOyJhYnNvbHV0ZSIhPT1zJiYiZml4ZWQiIT09cyYmKHQtPWkub3V0ZXJIZWlnaHQoITApKX0pLHRoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uKCl7dC09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLHQtZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOiJhdXRvIj09PXMmJih0PTAsdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7dD1NYXRoLm1heCh0LGUodGhpcykuY3NzKCJoZWlnaHQiLCIiKS5oZWlnaHQoKSl9KS5oZWlnaHQodCkpfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fZmluZEFjdGl2ZSh0KVswXTtpIT09dGhpcy5hY3RpdmVbMF0mJihpPWl8fHRoaXMuYWN0aXZlWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0OmksY3VycmVudFRhcmdldDppLHByZXZlbnREZWZhdWx0OmUubm9vcH0pKX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3RoaXMuaGVhZGVycy5lcSh0KTplKCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbih0KXt2YXIgaT17a2V5ZG93bjoiX2tleWRvd24ifTt0JiZlLmVhY2godC5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7aVt0XT0iX2V2ZW50SGFuZGxlciJ9KSx0aGlzLl9vZmYodGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKSksdGhpcy5fb24odGhpcy5oZWFkZXJzLGkpLHRoaXMuX29uKHRoaXMuaGVhZGVycy5uZXh0KCkse2tleWRvd246Il9wYW5lbEtleURvd24ifSksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGVhZGVycyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGVhZGVycyl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9dGhpcy5hY3RpdmUsbj1lKHQuY3VycmVudFRhcmdldCksYT1uWzBdPT09c1swXSxvPWEmJmkuY29sbGFwc2libGUscj1vP2UoKTpuLm5leHQoKSxoPXMubmV4dCgpLGw9e29sZEhlYWRlcjpzLG9sZFBhbmVsOmgsbmV3SGVhZGVyOm8/ZSgpOm4sbmV3UGFuZWw6cn07CnQucHJldmVudERlZmF1bHQoKSxhJiYhaS5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlQWN0aXZhdGUiLHQsbCk9PT0hMXx8KGkuYWN0aXZlPW8/ITE6dGhpcy5oZWFkZXJzLmluZGV4KG4pLHRoaXMuYWN0aXZlPWE/ZSgpOm4sdGhpcy5fdG9nZ2xlKGwpLHMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLGkuaWNvbnMmJnMuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyhpLmljb25zLmFjdGl2ZUhlYWRlcikuYWRkQ2xhc3MoaS5pY29ucy5oZWFkZXIpLGF8fChuLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSB1aS1jb3JuZXItdG9wIiksaS5pY29ucyYmbi5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKGkuaWNvbnMuaGVhZGVyKS5hZGRDbGFzcyhpLmljb25zLmFjdGl2ZUhlYWRlciksbi5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpKSl9LF90b2dnbGU6ZnVuY3Rpb24odCl7dmFyIGk9dC5uZXdQYW5lbCxzPXRoaXMucHJldlNob3cubGVuZ3RoP3RoaXMucHJldlNob3c6dC5vbGRQYW5lbDt0aGlzLnByZXZTaG93LmFkZCh0aGlzLnByZXZIaWRlKS5zdG9wKCEwLCEwKSx0aGlzLnByZXZTaG93PWksdGhpcy5wcmV2SGlkZT1zLHRoaXMub3B0aW9ucy5hbmltYXRlP3RoaXMuX2FuaW1hdGUoaSxzLHQpOihzLmhpZGUoKSxpLnNob3coKSx0aGlzLl90b2dnbGVDb21wbGV0ZSh0KSkscy5hdHRyKHsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLHMucHJldigpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UifSksaS5sZW5ndGgmJnMubGVuZ3RoP3MucHJldigpLmF0dHIoe3RhYkluZGV4Oi0xLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UifSk6aS5sZW5ndGgmJnRoaXMuaGVhZGVycy5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMD09PXBhcnNlSW50KGUodGhpcykuYXR0cigidGFiSW5kZXgiKSwxMCl9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLGkuYXR0cigiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLnByZXYoKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pfSxfYW5pbWF0ZTpmdW5jdGlvbihlLHQsaSl7dmFyIHMsbixhLG89dGhpcyxyPTAsaD1lLmNzcygiYm94LXNpemluZyIpLGw9ZS5sZW5ndGgmJighdC5sZW5ndGh8fGUuaW5kZXgoKTx0LmluZGV4KCkpLHU9dGhpcy5vcHRpb25zLmFuaW1hdGV8fHt9LGQ9bCYmdS5kb3dufHx1LGM9ZnVuY3Rpb24oKXtvLl90b2dnbGVDb21wbGV0ZShpKX07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBkJiYoYT1kKSwic3RyaW5nIj09dHlwZW9mIGQmJihuPWQpLG49bnx8ZC5lYXNpbmd8fHUuZWFzaW5nLGE9YXx8ZC5kdXJhdGlvbnx8dS5kdXJhdGlvbix0Lmxlbmd0aD9lLmxlbmd0aD8ocz1lLnNob3coKS5vdXRlckhlaWdodCgpLHQuYW5pbWF0ZSh0aGlzLmhpZGVQcm9wcyx7ZHVyYXRpb246YSxlYXNpbmc6bixzdGVwOmZ1bmN0aW9uKGUsdCl7dC5ub3c9TWF0aC5yb3VuZChlKX19KSxlLmhpZGUoKS5hbmltYXRlKHRoaXMuc2hvd1Byb3BzLHtkdXJhdGlvbjphLGVhc2luZzpuLGNvbXBsZXRlOmMsc3RlcDpmdW5jdGlvbihlLGkpe2kubm93PU1hdGgucm91bmQoZSksImhlaWdodCIhPT1pLnByb3A/ImNvbnRlbnQtYm94Ij09PWgmJihyKz1pLm5vdyk6ImNvbnRlbnQiIT09by5vcHRpb25zLmhlaWdodFN0eWxlJiYoaS5ub3c9TWF0aC5yb3VuZChzLXQub3V0ZXJIZWlnaHQoKS1yKSxyPTApfX0pLHZvaWQgMCk6dC5hbmltYXRlKHRoaXMuaGlkZVByb3BzLGEsbixjKTplLmFuaW1hdGUodGhpcy5zaG93UHJvcHMsYSxuLGMpfSxfdG9nZ2xlQ29tcGxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vbGRQYW5lbDt0LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKS5wcmV2KCkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci10b3AiKS5hZGRDbGFzcygidWktY29ybmVyLWFsbCIpLHQubGVuZ3RoJiYodC5wYXJlbnQoKVswXS5jbGFzc05hbWU9dC5wYXJlbnQoKVswXS5jbGFzc05hbWUpLHRoaXMuX3RyaWdnZXIoImFjdGl2YXRlIixudWxsLGUpfX0pLGUud2lkZ2V0KCJ1aS5tZW51Iix7dmVyc2lvbjoiMS4xMS40IixkZWZhdWx0RWxlbWVudDoiPHVsPiIsZGVsYXk6MzAwLG9wdGlvbnM6e2ljb25zOntzdWJtZW51OiJ1aS1pY29uLWNhcmF0LTEtZSJ9LGl0ZW1zOiI+ICoiLG1lbnVzOiJ1bCIscG9zaXRpb246e215OiJsZWZ0LTEgdG9wIixhdDoicmlnaHQgdG9wIn0scm9sZToibWVudSIsYmx1cjpudWxsLGZvY3VzOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZU1lbnU9dGhpcy5lbGVtZW50LHRoaXMubW91c2VIYW5kbGVkPSExLHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCIpLnRvZ2dsZUNsYXNzKCJ1aS1tZW51LWljb25zIiwhIXRoaXMuZWxlbWVudC5maW5kKCIudWktaWNvbiIpLmxlbmd0aCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSx0YWJJbmRleDowfSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLl9vbih7Im1vdXNlZG93biAudWktbWVudS1pdGVtIjpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9LCJjbGljayAudWktbWVudS1pdGVtIjpmdW5jdGlvbih0KXt2YXIgaT1lKHQudGFyZ2V0KTshdGhpcy5tb3VzZUhhbmRsZWQmJmkubm90KCIudWktc3RhdGUtZGlzYWJsZWQiKS5sZW5ndGgmJih0aGlzLnNlbGVjdCh0KSx0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCl8fCh0aGlzLm1vdXNlSGFuZGxlZD0hMCksaS5oYXMoIi51aS1tZW51IikubGVuZ3RoP3RoaXMuZXhwYW5kKHQpOiF0aGlzLmVsZW1lbnQuaXMoIjpmb2N1cyIpJiZlKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCkuY2xvc2VzdCgiLnVpLW1lbnUiKS5sZW5ndGgmJih0aGlzLmVsZW1lbnQudHJpZ2dlcigiZm9jdXMiLFshMF0pLHRoaXMuYWN0aXZlJiYxPT09dGhpcy5hY3RpdmUucGFyZW50cygiLnVpLW1lbnUiKS5sZW5ndGgmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSwibW91c2VlbnRlciAudWktbWVudS1pdGVtIjpmdW5jdGlvbih0KXtpZighdGhpcy5wcmV2aW91c0ZpbHRlcil7dmFyIGk9ZSh0LmN1cnJlbnRUYXJnZXQpO2kuc2libGluZ3MoIi51aS1zdGF0ZS1hY3RpdmUiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5mb2N1cyh0LGkpfX0sbW91c2VsZWF2ZToiY29sbGFwc2VBbGwiLCJtb3VzZWxlYXZlIC51aS1tZW51IjoiY29sbGFwc2VBbGwiLGZvY3VzOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5hY3RpdmV8fHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZXEoMCk7dHx8dGhpcy5mb2N1cyhlLGkpfSxibHVyOmZ1bmN0aW9uKHQpe3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KXx8dGhpcy5jb2xsYXBzZUFsbCh0KX0pfSxrZXlkb3duOiJfa2V5ZG93biJ9KSx0aGlzLnJlZnJlc2goKSx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHtjbGljazpmdW5jdGlvbihlKXt0aGlzLl9jbG9zZU9uRG9jdW1lbnRDbGljayhlKSYmdGhpcy5jb2xsYXBzZUFsbChlKSx0aGlzLm1vdXNlSGFuZGxlZD0hMX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IikuZmluZCgiLnVpLW1lbnUiKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLW1lbnUtaWNvbnMgdWktZnJvbnQiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIikucmVtb3ZlVW5pcXVlSWQoKS5zaG93KCksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWl0ZW0iKS5yZW1vdmVDbGFzcygidWktbWVudS1pdGVtIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtaGFzcG9wdXAiKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IikmJnQucmVtb3ZlKCl9KSx0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtZGl2aWRlciIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWRpdmlkZXIgdWktd2lkZ2V0LWNvbnRlbnQiKX0sX2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbz0hMDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMucHJldmlvdXNQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjp0aGlzLm5leHRQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6dGhpcy5fbW92ZSgiZmlyc3QiLCJmaXJzdCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnRoaXMuX21vdmUoImxhc3QiLCJsYXN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDp0aGlzLnByZXZpb3VzKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046dGhpcy5uZXh0KHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkxFRlQ6dGhpcy5jb2xsYXBzZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5SSUdIVDp0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdGhpcy5leHBhbmQodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5fYWN0aXZhdGUodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY29sbGFwc2UodCk7YnJlYWs7ZGVmYXVsdDpvPSExLHM9dGhpcy5wcmV2aW91c0ZpbHRlcnx8IiIsbj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSksYT0hMSxjbGVhclRpbWVvdXQodGhpcy5maWx0ZXJUaW1lciksbj09PXM/YT0hMDpuPXMrbixpPXRoaXMuX2ZpbHRlck1lbnVJdGVtcyhuKSxpPWEmJi0xIT09aS5pbmRleCh0aGlzLmFjdGl2ZS5uZXh0KCkpP3RoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKTppLGkubGVuZ3RofHwobj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSksaT10aGlzLl9maWx0ZXJNZW51SXRlbXMobikpLGkubGVuZ3RoPyh0aGlzLmZvY3VzKHQsaSksdGhpcy5wcmV2aW91c0ZpbHRlcj1uLHRoaXMuZmlsdGVyVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn0sMWUzKSk6ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9byYmdC5wcmV2ZW50RGVmYXVsdCgpfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpfHwodGhpcy5hY3RpdmUuaXMoIlthcmlhLWhhc3BvcHVwPSd0cnVlJ10iKT90aGlzLmV4cGFuZChlKTp0aGlzLnNlbGVjdChlKSl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdCxpLHM9dGhpcyxuPXRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51LGE9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLm1lbnVzKTt0aGlzLmVsZW1lbnQudG9nZ2xlQ2xhc3MoInVpLW1lbnUtaWNvbnMiLCEhdGhpcy5lbGVtZW50LmZpbmQoIi51aS1pY29uIikubGVuZ3RoKSxhLmZpbHRlcigiOm5vdCgudWktbWVudSkiKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktZnJvbnQiKS5oaWRlKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSwiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5wYXJlbnQoKSxzPWUoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1tZW51LWljb24gdWktaWNvbiAiK24pLmRhdGEoInVpLW1lbnUtc3VibWVudS1jYXJhdCIsITApO2kuYXR0cigiYXJpYS1oYXNwb3B1cCIsInRydWUiKS5wcmVwZW5kKHMpLHQuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixpLmF0dHIoImlkIikpfSksdD1hLmFkZCh0aGlzLmVsZW1lbnQpLGk9dC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcyksaS5ub3QoIi51aS1tZW51LWl0ZW0iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtzLl9pc0RpdmlkZXIodCkmJnQuYWRkQ2xhc3MoInVpLXdpZGdldC1jb250ZW50IHVpLW1lbnUtZGl2aWRlciIpfSksaS5ub3QoIi51aS1tZW51LWl0ZW0sIC51aS1tZW51LWRpdmlkZXIiKS5hZGRDbGFzcygidWktbWVudS1pdGVtIikudW5pcXVlSWQoKS5hdHRyKHt0YWJJbmRleDotMSxyb2xlOnRoaXMuX2l0ZW1Sb2xlKCl9KSxpLmZpbHRlcigiLnVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLmFjdGl2ZSYmIWUuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuYWN0aXZlWzBdKSYmdGhpcy5ibHVyKCl9LF9pdGVtUm9sZTpmdW5jdGlvbigpe3JldHVybnttZW51OiJtZW51aXRlbSIsbGlzdGJveDoib3B0aW9uIn1bdGhpcy5vcHRpb25zLnJvbGVdfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7Imljb25zIj09PWUmJnRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUpLmFkZENsYXNzKHQuc3VibWVudSksImRpc2FibGVkIj09PWUmJnRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5fc3VwZXIoZSx0KX0sZm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzO3RoaXMuYmx1cihlLGUmJiJmb2N1cyI9PT1lLnR5cGUpLHRoaXMuX3Njcm9sbEludG9WaWV3KHQpLHRoaXMuYWN0aXZlPXQuZmlyc3QoKSxzPXRoaXMuYWN0aXZlLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLm9wdGlvbnMucm9sZSYmdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIscy5hdHRyKCJpZCIpKSx0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGUmJiJrZXlkb3duIj09PWUudHlwZT90aGlzLl9jbG9zZSgpOnRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpfSx0aGlzLmRlbGF5KSxpPXQuY2hpbGRyZW4oIi51aS1tZW51IiksaS5sZW5ndGgmJmUmJi9ebW91c2UvLnRlc3QoZS50eXBlKSYmdGhpcy5fc3RhcnRPcGVuaW5nKGkpLHRoaXMuYWN0aXZlTWVudT10LnBhcmVudCgpLHRoaXMuX3RyaWdnZXIoImZvY3VzIixlLHtpdGVtOnR9KX0sX3Njcm9sbEludG9WaWV3OmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG8scjt0aGlzLl9oYXNTY3JvbGwoKSYmKGk9cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLHM9cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sInBhZGRpbmdUb3AiKSl8fDAsbj10Lm9mZnNldCgpLnRvcC10aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wLWktcyxhPXRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoKSxvPXRoaXMuYWN0aXZlTWVudS5oZWlnaHQoKSxyPXQub3V0ZXJIZWlnaHQoKSwwPm4/dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChhK24pOm4rcj5vJiZ0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKGErbi1vK3IpKX0sYmx1cjpmdW5jdGlvbihlLHQpe3R8fGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmFjdGl2ZSYmKHRoaXMuYWN0aXZlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLHRoaXMuYWN0aXZlPW51bGwsdGhpcy5fdHJpZ2dlcigiYmx1ciIsZSx7aXRlbTp0aGlzLmFjdGl2ZX0pKX0sX3N0YXJ0T3BlbmluZzpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksInRydWUiPT09ZS5hdHRyKCJhcmlhLWhpZGRlbiIpJiYodGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCksdGhpcy5fb3BlbihlKX0sdGhpcy5kZWxheSkpfSxfb3BlbjpmdW5jdGlvbih0KXt2YXIgaT1lLmV4dGVuZCh7b2Y6dGhpcy5hY3RpdmV9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpLm5vdCh0LnBhcmVudHMoIi51aS1tZW51IikpLmhpZGUoKS5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0LnNob3coKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIikucG9zaXRpb24oaSl9LGNvbGxhcHNlQWxsOmZ1bmN0aW9uKHQsaSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgcz1pP3RoaXMuZWxlbWVudDplKHQmJnQudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpKTtzLmxlbmd0aHx8KHM9dGhpcy5lbGVtZW50KSx0aGlzLl9jbG9zZShzKSx0aGlzLmJsdXIodCksdGhpcy5hY3RpdmVNZW51PXN9LHRoaXMuZGVsYXkpfSxfY2xvc2U6ZnVuY3Rpb24oZSl7ZXx8KGU9dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSxlLmZpbmQoIi51aS1tZW51IikuaGlkZSgpLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLmVuZCgpLmZpbmQoIi51aS1zdGF0ZS1hY3RpdmUiKS5ub3QoIi51aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0sX2Nsb3NlT25Eb2N1bWVudENsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiFlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudSIpLmxlbmd0aH0sX2lzRGl2aWRlcjpmdW5jdGlvbihlKXtyZXR1cm4hL1teXC1cdTIwMTRcdTIwMTNcc10vLnRlc3QoZS50ZXh0KCkpfSxjb2xsYXBzZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIsdGhpcy5lbGVtZW50KTt0JiZ0Lmxlbmd0aCYmKHRoaXMuX2Nsb3NlKCksdGhpcy5mb2N1cyhlLHQpKX0sZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLW1lbnUgIikuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpcnN0KCk7dCYmdC5sZW5ndGgmJih0aGlzLl9vcGVuKHQucGFyZW50KCkpLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5mb2N1cyhlLHQpfSkpfSxuZXh0OmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoIm5leHQiLCJmaXJzdCIsZSl9LHByZXZpb3VzOmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoInByZXYiLCJsYXN0IixlKX0saXNGaXJzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5wcmV2QWxsKCIudWktbWVudS1pdGVtIikubGVuZ3RofSxpc0xhc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0sX21vdmU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzO3RoaXMuYWN0aXZlJiYocz0iZmlyc3QiPT09ZXx8Imxhc3QiPT09ZT90aGlzLmFjdGl2ZVsiZmlyc3QiPT09ZT8icHJldkFsbCI6Im5leHRBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKC0xKTp0aGlzLmFjdGl2ZVtlKyJBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKDApKSxzJiZzLmxlbmd0aCYmdGhpcy5hY3RpdmV8fChzPXRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcylbdF0oKSksdGhpcy5mb2N1cyhpLHMpfSxuZXh0UGFnZTpmdW5jdGlvbih0KXt2YXIgaSxzLG47cmV0dXJuIHRoaXMuYWN0aXZlPyh0aGlzLmlzTGFzdEl0ZW0oKXx8KHRoaXMuX2hhc1Njcm9sbCgpPyhzPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxuPXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmFjdGl2ZS5uZXh0QWxsKCIudWktbWVudS1pdGVtIikuZWFjaChmdW5jdGlvbigpe3JldHVybiBpPWUodGhpcyksMD5pLm9mZnNldCgpLnRvcC1zLW59KSx0aGlzLmZvY3VzKHQsaSkpOnRoaXMuZm9jdXModCx0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpW3RoaXMuYWN0aXZlPyJsYXN0IjoiZmlyc3QiXSgpKSksdm9pZCAwKToodGhpcy5uZXh0KHQpLHZvaWQgMCl9LHByZXZpb3VzUGFnZTpmdW5jdGlvbih0KXt2YXIgaSxzLG47cmV0dXJuIHRoaXMuYWN0aXZlPyh0aGlzLmlzRmlyc3RJdGVtKCl8fCh0aGlzLl9oYXNTY3JvbGwoKT8ocz10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3Asbj10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gaT1lKHRoaXMpLGkub2Zmc2V0KCkudG9wLXMrbj4wfSksdGhpcy5mb2N1cyh0LGkpKTp0aGlzLmZvY3VzKHQsdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maXJzdCgpKSksdm9pZCAwKToodGhpcy5uZXh0KHQpLHZvaWQgMCl9LF9oYXNTY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCk8dGhpcy5lbGVtZW50LnByb3AoInNjcm9sbEhlaWdodCIpfSxzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU9dGhpcy5hY3RpdmV8fGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTt2YXIgaT17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKCIudWktbWVudSIpLmxlbmd0aHx8dGhpcy5jb2xsYXBzZUFsbCh0LCEwKSx0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLHQsaSl9LF9maWx0ZXJNZW51SXRlbXM6ZnVuY3Rpb24odCl7dmFyIGk9dC5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCJcXCQmIikscz1SZWdFeHAoIl4iK2ksImkiKTtyZXR1cm4gdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoIi51aS1tZW51LWl0ZW0iKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gcy50ZXN0KGUudHJpbShlKHRoaXMpLnRleHQoKSkpfSl9fSksZS53aWRnZXQoInVpLmF1dG9jb21wbGV0ZSIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxpbnB1dD4iLG9wdGlvbnM6e2FwcGVuZFRvOm51bGwsYXV0b0ZvY3VzOiExLGRlbGF5OjMwMCxtaW5MZW5ndGg6MSxwb3NpdGlvbjp7bXk6ImxlZnQgdG9wIixhdDoibGVmdCBib3R0b20iLGNvbGxpc2lvbjoibm9uZSJ9LHNvdXJjZTpudWxsLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzcG9uc2U6bnVsbCxzZWFyY2g6bnVsbCxzZWxlY3Q6bnVsbH0scmVxdWVzdEluZGV4OjAscGVuZGluZzowLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpLHMsbj10aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJ0ZXh0YXJlYSI9PT1uLG89ImlucHV0Ij09PW47dGhpcy5pc011bHRpTGluZT1hPyEwOm8/ITE6dGhpcy5lbGVtZW50LnByb3AoImlzQ29udGVudEVkaXRhYmxlIiksdGhpcy52YWx1ZU1ldGhvZD10aGlzLmVsZW1lbnRbYXx8bz8idmFsIjoidGV4dCJdLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYXV0b2NvbXBsZXRlLWlucHV0IikuYXR0cigiYXV0b2NvbXBsZXRlIiwib2ZmIiksdGhpcy5fb24odGhpcy5lbGVtZW50LHtrZXlkb3duOmZ1bmN0aW9uKG4pe2lmKHRoaXMuZWxlbWVudC5wcm9wKCJyZWFkT25seSIpKXJldHVybiB0PSEwLHM9ITAsaT0hMCx2b2lkIDA7dD0hMSxzPSExLGk9ITE7dmFyIGE9ZS51aS5rZXlDb2RlO3N3aXRjaChuLmtleUNvZGUpe2Nhc2UgYS5QQUdFX1VQOnQ9ITAsdGhpcy5fbW92ZSgicHJldmlvdXNQYWdlIixuKTticmVhaztjYXNlIGEuUEFHRV9ET1dOOnQ9ITAsdGhpcy5fbW92ZSgibmV4dFBhZ2UiLG4pO2JyZWFrO2Nhc2UgYS5VUDp0PSEwLHRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIsbik7YnJlYWs7Y2FzZSBhLkRPV046dD0hMCx0aGlzLl9rZXlFdmVudCgibmV4dCIsbik7YnJlYWs7Y2FzZSBhLkVOVEVSOnRoaXMubWVudS5hY3RpdmUmJih0PSEwLG4ucHJldmVudERlZmF1bHQoKSx0aGlzLm1lbnUuc2VsZWN0KG4pKTticmVhaztjYXNlIGEuVEFCOnRoaXMubWVudS5hY3RpdmUmJnRoaXMubWVudS5zZWxlY3Qobik7YnJlYWs7Y2FzZSBhLkVTQ0FQRTp0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSYmKHRoaXMuaXNNdWx0aUxpbmV8fHRoaXMuX3ZhbHVlKHRoaXMudGVybSksdGhpcy5jbG9zZShuKSxuLnByZXZlbnREZWZhdWx0KCkpO2JyZWFrO2RlZmF1bHQ6aT0hMCx0aGlzLl9zZWFyY2hUaW1lb3V0KG4pfX0sa2V5cHJlc3M6ZnVuY3Rpb24ocyl7aWYodClyZXR1cm4gdD0hMSwoIXRoaXMuaXNNdWx0aUxpbmV8fHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpKSYmcy5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgMDtpZighaSl7dmFyIG49ZS51aS5rZXlDb2RlO3N3aXRjaChzLmtleUNvZGUpe2Nhc2Ugbi5QQUdFX1VQOnRoaXMuX21vdmUoInByZXZpb3VzUGFnZSIscyk7YnJlYWs7Y2FzZSBuLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKCJuZXh0UGFnZSIscyk7YnJlYWs7Y2FzZSBuLlVQOnRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIscyk7YnJlYWs7Y2FzZSBuLkRPV046dGhpcy5fa2V5RXZlbnQoIm5leHQiLHMpfX19LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBzPyhzPSExLGUucHJldmVudERlZmF1bHQoKSx2b2lkIDApOih0aGlzLl9zZWFyY2hUaW1lb3V0KGUpLHZvaWQgMCl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW09bnVsbCx0aGlzLnByZXZpb3VzPXRoaXMuX3ZhbHVlKCl9LGJsdXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2FuY2VsQmx1cj8oZGVsZXRlIHRoaXMuY2FuY2VsQmx1cix2b2lkIDApOihjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UoZSksdGhpcy5fY2hhbmdlKGUpLHZvaWQgMCl9fSksdGhpcy5faW5pdFNvdXJjZSgpLHRoaXMubWVudT1lKCI8dWw+IikuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLm1lbnUoe3JvbGU6bnVsbH0pLmhpZGUoKS5tZW51KCJpbnN0YW5jZSIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXJ9KTt2YXIgaT10aGlzLm1lbnUuZWxlbWVudFswXTtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikubGVuZ3RofHx0aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5kb2N1bWVudC5vbmUoIm1vdXNlZG93biIsZnVuY3Rpb24ocyl7cy50YXJnZXQ9PT10LmVsZW1lbnRbMF18fHMudGFyZ2V0PT09aXx8ZS5jb250YWlucyhpLHMudGFyZ2V0KXx8dC5jbG9zZSgpfSl9KX0sbWVudWZvY3VzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbjtyZXR1cm4gdGhpcy5pc05ld01lbnUmJih0aGlzLmlzTmV3TWVudT0hMSx0Lm9yaWdpbmFsRXZlbnQmJi9ebW91c2UvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpKT8odGhpcy5tZW51LmJsdXIoKSx0aGlzLmRvY3VtZW50Lm9uZSgibW91c2Vtb3ZlIixmdW5jdGlvbigpe2UodC50YXJnZXQpLnRyaWdnZXIodC5vcmlnaW5hbEV2ZW50KX0pLHZvaWQgMCk6KG49aS5pdGVtLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIiksITEhPT10aGlzLl90cmlnZ2VyKCJmb2N1cyIsdCx7aXRlbTpufSkmJnQub3JpZ2luYWxFdmVudCYmL15rZXkvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpJiZ0aGlzLl92YWx1ZShuLnZhbHVlKSxzPWkuaXRlbS5hdHRyKCJhcmlhLWxhYmVsIil8fG4udmFsdWUscyYmZS50cmltKHMpLmxlbmd0aCYmKHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxlKCI8ZGl2PiIpLnRleHQocykuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSksdm9pZCAwKX0sbWVudXNlbGVjdDpmdW5jdGlvbihlLHQpe3ZhciBpPXQuaXRlbS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIpLHM9dGhpcy5wcmV2aW91czt0aGlzLmVsZW1lbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQmJih0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXMsdGhpcy5zZWxlY3RlZEl0ZW09aX0pKSwhMSE9PXRoaXMuX3RyaWdnZXIoInNlbGVjdCIsZSx7aXRlbTppfSkmJnRoaXMuX3ZhbHVlKGkudmFsdWUpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHRoaXMuY2xvc2UoZSksdGhpcy5zZWxlY3RlZEl0ZW09aX19KSx0aGlzLmxpdmVSZWdpb249ZSgiPHNwYW4+Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoiYXNzZXJ0aXZlIiwiYXJpYS1yZWxldmFudCI6ImFkZGl0aW9ucyJ9KS5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIikuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKSx0aGlzLm1lbnUuZWxlbWVudC5yZW1vdmUoKSx0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJzb3VyY2UiPT09ZSYmdGhpcy5faW5pdFNvdXJjZSgpLCJhcHBlbmRUbyI9PT1lJiZ0aGlzLm1lbnUuZWxlbWVudC5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwiZGlzYWJsZWQiPT09ZSYmdCYmdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gdCYmKHQ9dC5qcXVlcnl8fHQubm9kZVR5cGU/ZSh0KTp0aGlzLmRvY3VtZW50LmZpbmQodCkuZXEoMCkpLHQmJnRbMF18fCh0PXRoaXMuZWxlbWVudC5jbG9zZXN0KCIudWktZnJvbnQiKSksdC5sZW5ndGh8fCh0PXRoaXMuZG9jdW1lbnRbMF0uYm9keSksdH0sX2luaXRTb3VyY2U6ZnVuY3Rpb24oKXt2YXIgdCxpLHM9dGhpcztlLmlzQXJyYXkodGhpcy5vcHRpb25zLnNvdXJjZSk/KHQ9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihpLHMpe3MoZS51aS5hdXRvY29tcGxldGUuZmlsdGVyKHQsaS50ZXJtKSl9KToic3RyaW5nIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2U/KGk9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbih0LG4pe3MueGhyJiZzLnhoci5hYm9ydCgpLHMueGhyPWUuYWpheCh7dXJsOmksZGF0YTp0LGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKGUpe24oZSl9LGVycm9yOmZ1bmN0aW9uKCl7bihbXSl9fSl9KTp0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlfSxfc2VhcmNoVGltZW91dDpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuc2VhcmNoaW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50ZXJtPT09dGhpcy5fdmFsdWUoKSxpPXRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpLHM9ZS5hbHRLZXl8fGUuY3RybEtleXx8ZS5tZXRhS2V5fHxlLnNoaWZ0S2V5OyghdHx8dCYmIWkmJiFzKSYmKHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCxlKSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWU/ZTp0aGlzLl92YWx1ZSgpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLGUubGVuZ3RoPHRoaXMub3B0aW9ucy5taW5MZW5ndGg/dGhpcy5jbG9zZSh0KTp0aGlzLl90cmlnZ2VyKCJzZWFyY2giLHQpIT09ITE/dGhpcy5fc2VhcmNoKGUpOnZvaWQgMH0sX3NlYXJjaDpmdW5jdGlvbihlKXt0aGlzLnBlbmRpbmcrKyx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIiksdGhpcy5jYW5jZWxTZWFyY2g9ITEsdGhpcy5zb3VyY2Uoe3Rlcm06ZX0sdGhpcy5fcmVzcG9uc2UoKSl9LF9yZXNwb25zZTpmdW5jdGlvbigpe3ZhciB0PSsrdGhpcy5yZXF1ZXN0SW5kZXg7cmV0dXJuIGUucHJveHkoZnVuY3Rpb24oZSl7dD09PXRoaXMucmVxdWVzdEluZGV4JiZ0aGlzLl9fcmVzcG9uc2UoZSksdGhpcy5wZW5kaW5nLS0sdGhpcy5wZW5kaW5nfHx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIil9LHRoaXMpfSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKGUpe2UmJihlPXRoaXMuX25vcm1hbGl6ZShlKSksdGhpcy5fdHJpZ2dlcigicmVzcG9uc2UiLG51bGwse2NvbnRlbnQ6ZX0pLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJmUmJmUubGVuZ3RoJiYhdGhpcy5jYW5jZWxTZWFyY2g/KHRoaXMuX3N1Z2dlc3QoZSksdGhpcy5fdHJpZ2dlcigib3BlbiIpKTp0aGlzLl9jbG9zZSgpfSxjbG9zZTpmdW5jdGlvbihlKXt0aGlzLmNhbmNlbFNlYXJjaD0hMCx0aGlzLl9jbG9zZShlKX0sX2Nsb3NlOmZ1bmN0aW9uKGUpe3RoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiYodGhpcy5tZW51LmVsZW1lbnQuaGlkZSgpLHRoaXMubWVudS5ibHVyKCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fdHJpZ2dlcigiY2xvc2UiLGUpKX0sX2NoYW5nZTpmdW5jdGlvbihlKXt0aGlzLnByZXZpb3VzIT09dGhpcy5fdmFsdWUoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixlLHtpdGVtOnRoaXMuc2VsZWN0ZWRJdGVtfSl9LF9ub3JtYWxpemU6ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoJiZ0WzBdLmxhYmVsJiZ0WzBdLnZhbHVlP3Q6ZS5tYXAodCxmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/e2xhYmVsOnQsdmFsdWU6dH06ZS5leHRlbmQoe30sdCx7bGFiZWw6dC5sYWJlbHx8dC52YWx1ZSx2YWx1ZTp0LnZhbHVlfHx0LmxhYmVsfSl9KX0sX3N1Z2dlc3Q6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5tZW51LmVsZW1lbnQuZW1wdHkoKTt0aGlzLl9yZW5kZXJNZW51KGksdCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5tZW51LnJlZnJlc2goKSxpLnNob3coKSx0aGlzLl9yZXNpemVNZW51KCksaS5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6dGhpcy5lbGVtZW50fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzJiZ0aGlzLm1lbnUubmV4dCgpfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWVudS5lbGVtZW50O2Uub3V0ZXJXaWR0aChNYXRoLm1heChlLndpZHRoKCIiKS5vdXRlcldpZHRoKCkrMSx0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpKSl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKHQsaSl7dmFyIHM9dGhpcztlLmVhY2goaSxmdW5jdGlvbihlLGkpe3MuX3JlbmRlckl0ZW1EYXRhKHQsaSl9KX0sX3JlbmRlckl0ZW1EYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3JlbmRlckl0ZW0oZSx0KS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIsdCl9LF9yZW5kZXJJdGVtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGUoIjxsaT4iKS50ZXh0KGkubGFiZWwpLmFwcGVuZFRvKHQpfSxfbW92ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKT90aGlzLm1lbnUuaXNGaXJzdEl0ZW0oKSYmL15wcmV2aW91cy8udGVzdChlKXx8dGhpcy5tZW51LmlzTGFzdEl0ZW0oKSYmL15uZXh0Ly50ZXN0KGUpPyh0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMubWVudS5ibHVyKCksdm9pZCAwKToodGhpcy5tZW51W2VdKHQpLHZvaWQgMCk6KHRoaXMuc2VhcmNoKG51bGwsdCksdm9pZCAwKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudS5lbGVtZW50fSxfdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZU1ldGhvZC5hcHBseSh0aGlzLmVsZW1lbnQsYXJndW1lbnRzKX0sX2tleUV2ZW50OmZ1bmN0aW9uKGUsdCl7KCF0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSkmJih0aGlzLl9tb3ZlKGUsdCksdC5wcmV2ZW50RGVmYXVsdCgpKX19KSxlLmV4dGVuZChlLnVpLmF1dG9jb21wbGV0ZSx7ZXNjYXBlUmVnZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpfSxmaWx0ZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz1SZWdFeHAoZS51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoaSksImkiKTtyZXR1cm4gZS5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIHMudGVzdChlLmxhYmVsfHxlLnZhbHVlfHxlKX0pfX0pLGUud2lkZ2V0KCJ1aS5hdXRvY29tcGxldGUiLGUudWkuYXV0b2NvbXBsZXRlLHtvcHRpb25zOnttZXNzYWdlczp7bm9SZXN1bHRzOiJObyBzZWFyY2ggcmVzdWx0cy4iLHJlc3VsdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrKGU+MT8iIHJlc3VsdHMgYXJlIjoiIHJlc3VsdCBpcyIpKyIgYXZhaWxhYmxlLCB1c2UgdXAgYW5kIGRvd24gYXJyb3cga2V5cyB0byBuYXZpZ2F0ZS4ifX19LF9fcmVzcG9uc2U6ZnVuY3Rpb24odCl7dmFyIGk7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8dGhpcy5jYW5jZWxTZWFyY2h8fChpPXQmJnQubGVuZ3RoP3RoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKHQubGVuZ3RoKTp0aGlzLm9wdGlvbnMubWVzc2FnZXMubm9SZXN1bHRzLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxlKCI8ZGl2PiIpLnRleHQoaSkuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSl9fSksZS51aS5hdXRvY29tcGxldGU7dmFyIHIsaD0idWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiLGw9InVpLWJ1dHRvbi1pY29ucy1vbmx5IHVpLWJ1dHRvbi1pY29uLW9ubHkgdWktYnV0dG9uLXRleHQtaWNvbnMgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IHVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IHVpLWJ1dHRvbi10ZXh0LW9ubHkiLHU9ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmZpbmQoIjp1aS1idXR0b24iKS5idXR0b24oInJlZnJlc2giKX0sMSl9LGQ9ZnVuY3Rpb24odCl7dmFyIGk9dC5uYW1lLHM9dC5mb3JtLG49ZShbXSk7cmV0dXJuIGkmJihpPWkucmVwbGFjZSgvJy9nLCJcXCciKSxuPXM/ZShzKS5maW5kKCJbbmFtZT0nIitpKyInXVt0eXBlPXJhZGlvXSIpOmUoIltuYW1lPSciK2krIiddW3R5cGU9cmFkaW9dIix0Lm93bmVyRG9jdW1lbnQpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiF0aGlzLmZvcm19KSksbn07ZS53aWRnZXQoInVpLmJ1dHRvbiIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxidXR0b24+IixvcHRpb25zOntkaXNhYmxlZDpudWxsLHRleHQ6ITAsbGFiZWw6bnVsbCxpY29uczp7cHJpbWFyeTpudWxsLHNlY29uZGFyeTpudWxsfX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5jbG9zZXN0KCJmb3JtIikudW5iaW5kKCJyZXNldCIrdGhpcy5ldmVudE5hbWVzcGFjZSkuYmluZCgicmVzZXQiK3RoaXMuZXZlbnROYW1lc3BhY2UsdSksImJvb2xlYW4iIT10eXBlb2YgdGhpcy5vcHRpb25zLmRpc2FibGVkP3RoaXMub3B0aW9ucy5kaXNhYmxlZD0hIXRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9kZXRlcm1pbmVCdXR0b25UeXBlKCksdGhpcy5oYXNUaXRsZT0hIXRoaXMuYnV0dG9uRWxlbWVudC5hdHRyKCJ0aXRsZSIpO3ZhciB0PXRoaXMsaT10aGlzLm9wdGlvbnMscz0iY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlLG49cz8iIjoidWktc3RhdGUtYWN0aXZlIjtudWxsPT09aS5sYWJlbCYmKGkubGFiZWw9ImlucHV0Ij09PXRoaXMudHlwZT90aGlzLmJ1dHRvbkVsZW1lbnQudmFsKCk6dGhpcy5idXR0b25FbGVtZW50Lmh0bWwoKSksdGhpcy5faG92ZXJhYmxlKHRoaXMuYnV0dG9uRWxlbWVudCksdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKGgpLmF0dHIoInJvbGUiLCJidXR0b24iKS5iaW5kKCJtb3VzZWVudGVyIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aS5kaXNhYmxlZHx8dGhpcz09PXImJmUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgibW91c2VsZWF2ZSIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2kuZGlzYWJsZWR8fGUodGhpcykucmVtb3ZlQ2xhc3Mobil9KS5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbihlKXtpLmRpc2FibGVkJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSksdGhpcy5fb24oe2ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSxibHVyOmZ1bmN0aW9uKCl7dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfX0pLHMmJnRoaXMuZWxlbWVudC5iaW5kKCJjaGFuZ2UiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXt0LnJlZnJlc2goKX0pLCJjaGVja2JveCI9PT10aGlzLnR5cGU/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGlzYWJsZWQ/ITE6dm9pZCAwfSk6InJhZGlvIj09PXRoaXMudHlwZT90aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZihpLmRpc2FibGVkKXJldHVybiExO2UodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHQuYnV0dG9uRWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik7dmFyIHM9dC5lbGVtZW50WzBdO2Qocykubm90KHMpLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKX0pOih0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgibW91c2Vkb3duIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGlzYWJsZWQ/ITE6KGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHI9dGhpcyx0LmRvY3VtZW50Lm9uZSgibW91c2V1cCIsZnVuY3Rpb24oKXtyPW51bGx9KSx2b2lkIDApfSkuYmluZCgibW91c2V1cCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3JldHVybiBpLmRpc2FibGVkPyExOihlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx2b2lkIDApfSkuYmluZCgia2V5ZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbih0KXtyZXR1cm4gaS5kaXNhYmxlZD8hMTooKHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5TUEFDRXx8dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVOVEVSKSYmZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdm9pZCAwKX0pLmJpbmQoImtleXVwIit0aGlzLmV2ZW50TmFtZXNwYWNlKyIgYmx1ciIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSksdGhpcy5idXR0b25FbGVtZW50LmlzKCJhIikmJnRoaXMuYnV0dG9uRWxlbWVudC5rZXl1cChmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuU1BBQ0UmJmUodGhpcykuY2xpY2soKX0pKSx0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIixpLmRpc2FibGVkKSx0aGlzLl9yZXNldEJ1dHRvbigpfSxfZGV0ZXJtaW5lQnV0dG9uVHlwZTpmdW5jdGlvbigpe3ZhciBlLHQsaTt0aGlzLnR5cGU9dGhpcy5lbGVtZW50LmlzKCJbdHlwZT1jaGVja2JveF0iKT8iY2hlY2tib3giOnRoaXMuZWxlbWVudC5pcygiW3R5cGU9cmFkaW9dIik/InJhZGlvIjp0aGlzLmVsZW1lbnQuaXMoImlucHV0Iik/ImlucHV0IjoiYnV0dG9uIiwiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlPyhlPXRoaXMuZWxlbWVudC5wYXJlbnRzKCkubGFzdCgpLHQ9ImxhYmVsW2Zvcj0nIit0aGlzLmVsZW1lbnQuYXR0cigiaWQiKSsiJ10iLHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbmQodCksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KGU9ZS5sZW5ndGg/ZS5zaWJsaW5ncygpOnRoaXMuZWxlbWVudC5zaWJsaW5ncygpLHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbHRlcih0KSx0aGlzLmJ1dHRvbkVsZW1lbnQubGVuZ3RofHwodGhpcy5idXR0b25FbGVtZW50PWUuZmluZCh0KSkpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIiksaT10aGlzLmVsZW1lbnQuaXMoIjpjaGVja2VkIiksaSYmdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucHJvcCgiYXJpYS1wcmVzc2VkIixpKSk6dGhpcy5idXR0b25FbGVtZW50PXRoaXMuZWxlbWVudH0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnV0dG9uRWxlbWVudH0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhoKyIgdWktc3RhdGUtYWN0aXZlICIrbCkucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtcHJlc3NlZCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSksdGhpcy5oYXNUaXRsZXx8dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUF0dHIoInRpdGxlIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fc3VwZXIoZSx0KSwiZGlzYWJsZWQiPT09ZT8odGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCksdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhIXQpLHQmJigiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlP3RoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKTp0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIHVpLXN0YXRlLWFjdGl2ZSIpKSx2b2lkIDApOih0aGlzLl9yZXNldEJ1dHRvbigpLHZvaWQgMCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuaXMoImlucHV0LCBidXR0b24iKT90aGlzLmVsZW1lbnQuaXMoIjpkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5oYXNDbGFzcygidWktYnV0dG9uLWRpc2FibGVkIik7dCE9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdCksInJhZGlvIj09PXRoaXMudHlwZT9kKHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe2UodGhpcykuaXMoIjpjaGVja2VkIik/ZSh0aGlzKS5idXR0b24oIndpZGdldCIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik6ZSh0aGlzKS5idXR0b24oIndpZGdldCIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpfSk6ImNoZWNrYm94Ij09PXRoaXMudHlwZSYmKHRoaXMuZWxlbWVudC5pcygiOmNoZWNrZWQiKT90aGlzLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTp0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIikpfSxfcmVzZXRCdXR0b246ZnVuY3Rpb24oKXtpZigiaW5wdXQiPT09dGhpcy50eXBlKXJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuZWxlbWVudC52YWwodGhpcy5vcHRpb25zLmxhYmVsKSx2b2lkIDA7dmFyIHQ9dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKGwpLGk9ZSgiPHNwYW4+PC9zcGFuPiIsdGhpcy5kb2N1bWVudFswXSkuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0IikuaHRtbCh0aGlzLm9wdGlvbnMubGFiZWwpLmFwcGVuZFRvKHQuZW1wdHkoKSkudGV4dCgpLHM9dGhpcy5vcHRpb25zLmljb25zLG49cy5wcmltYXJ5JiZzLnNlY29uZGFyeSxhPVtdO3MucHJpbWFyeXx8cy5zZWNvbmRhcnk/KHRoaXMub3B0aW9ucy50ZXh0JiZhLnB1c2goInVpLWJ1dHRvbi10ZXh0LWljb24iKyhuPyJzIjpzLnByaW1hcnk/Ii1wcmltYXJ5IjoiLXNlY29uZGFyeSIpKSxzLnByaW1hcnkmJnQucHJlcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXByaW1hcnkgdWktaWNvbiAiK3MucHJpbWFyeSsiJz48L3NwYW4+Iikscy5zZWNvbmRhcnkmJnQuYXBwZW5kKCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHVpLWljb24gIitzLnNlY29uZGFyeSsiJz48L3NwYW4+IiksdGhpcy5vcHRpb25zLnRleHR8fChhLnB1c2gobj8idWktYnV0dG9uLWljb25zLW9ubHkiOiJ1aS1idXR0b24taWNvbi1vbmx5IiksdGhpcy5oYXNUaXRsZXx8dC5hdHRyKCJ0aXRsZSIsZS50cmltKGkpKSkpOmEucHVzaCgidWktYnV0dG9uLXRleHQtb25seSIpLHQuYWRkQ2xhc3MoYS5qb2luKCIgIikpfX0pLGUud2lkZ2V0KCJ1aS5idXR0b25zZXQiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2l0ZW1zOiJidXR0b24sIGlucHV0W3R5cGU9YnV0dG9uXSwgaW5wdXRbdHlwZT1zdWJtaXRdLCBpbnB1dFt0eXBlPXJlc2V0XSwgaW5wdXRbdHlwZT1jaGVja2JveF0sIGlucHV0W3R5cGU9cmFkaW9dLCBhLCA6ZGF0YSh1aS1idXR0b24pIn0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYnV0dG9uc2V0Iil9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXsiZGlzYWJsZWQiPT09ZSYmdGhpcy5idXR0b25zLmJ1dHRvbigib3B0aW9uIixlLHQpLHRoaXMuX3N1cGVyKGUsdCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD0icnRsIj09PXRoaXMuZWxlbWVudC5jc3MoImRpcmVjdGlvbiIpLGk9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKSxzPWkuZmlsdGVyKCI6dWktYnV0dG9uIik7aS5ub3QoIjp1aS1idXR0b24iKS5idXR0b24oKSxzLmJ1dHRvbigicmVmcmVzaCIpLHRoaXMuYnV0dG9ucz1pLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCB1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5maWx0ZXIoIjpmaXJzdCIpLmFkZENsYXNzKHQ/InVpLWNvcm5lci1yaWdodCI6InVpLWNvcm5lci1sZWZ0IikuZW5kKCkuZmlsdGVyKCI6bGFzdCIpLmFkZENsYXNzKHQ/InVpLWNvcm5lci1sZWZ0IjoidWktY29ybmVyLXJpZ2h0IikuZW5kKCkuZW5kKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1idXR0b25zZXQiKSx0aGlzLmJ1dHRvbnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5lbmQoKS5idXR0b24oImRlc3Ryb3kiKX19KSxlLnVpLmJ1dHRvbixlLndpZGdldCgidWkuZGlhbG9nIix7dmVyc2lvbjoiMS4xMS40IixvcHRpb25zOnthcHBlbmRUbzoiYm9keSIsYXV0b09wZW46ITAsYnV0dG9uczpbXSxjbG9zZU9uRXNjYXBlOiEwLGNsb3NlVGV4dDoiQ2xvc2UiLGRpYWxvZ0NsYXNzOiIiLGRyYWdnYWJsZTohMCxoaWRlOm51bGwsaGVpZ2h0OiJhdXRvIixtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxNTAsbWluV2lkdGg6MTUwLG1vZGFsOiExLHBvc2l0aW9uOntteToiY2VudGVyIixhdDoiY2VudGVyIixvZjp3aW5kb3csY29sbGlzaW9uOiJmaXQiLHVzaW5nOmZ1bmN0aW9uKHQpe3ZhciBpPWUodGhpcykuY3NzKHQpLm9mZnNldCgpLnRvcDswPmkmJmUodGhpcykuY3NzKCJ0b3AiLHQudG9wLWkpfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCx0aXRsZTpudWxsLHdpZHRoOjMwMCxiZWZvcmVDbG9zZTpudWxsLGNsb3NlOm51bGwsZHJhZzpudWxsLGRyYWdTdGFydDpudWxsLGRyYWdTdG9wOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzaXplOm51bGwscmVzaXplU3RhcnQ6bnVsbCxyZXNpemVTdG9wOm51bGx9LHNpemVSZWxhdGVkT3B0aW9uczp7YnV0dG9uczohMCxoZWlnaHQ6ITAsbWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLG1pbkhlaWdodDohMCxtaW5XaWR0aDohMCx3aWR0aDohMH0scmVzaXphYmxlUmVsYXRlZE9wdGlvbnM6e21heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITB9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsQ3NzPXtkaXNwbGF5OnRoaXMuZWxlbWVudFswXS5zdHlsZS5kaXNwbGF5LHdpZHRoOnRoaXMuZWxlbWVudFswXS5zdHlsZS53aWR0aCxtaW5IZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1pbkhlaWdodCxtYXhIZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1heEhlaWdodCxoZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLmhlaWdodH0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtwYXJlbnQ6dGhpcy5lbGVtZW50LnBhcmVudCgpLGluZGV4OnRoaXMuZWxlbWVudC5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4KHRoaXMuZWxlbWVudCl9LHRoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiKSx0aGlzLm9wdGlvbnMudGl0bGU9dGhpcy5vcHRpb25zLnRpdGxlfHx0aGlzLm9yaWdpbmFsVGl0bGUsdGhpcy5fY3JlYXRlV3JhcHBlcigpLHRoaXMuZWxlbWVudC5zaG93KCkucmVtb3ZlQXR0cigidGl0bGUiKS5hZGRDbGFzcygidWktZGlhbG9nLWNvbnRlbnQgdWktd2lkZ2V0LWNvbnRlbnQiKS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nKSx0aGlzLl9jcmVhdGVUaXRsZWJhcigpLHRoaXMuX2NyZWF0ZUJ1dHRvblBhbmUoKSx0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlJiZlLmZuLmRyYWdnYWJsZSYmdGhpcy5fbWFrZURyYWdnYWJsZSgpLHRoaXMub3B0aW9ucy5yZXNpemFibGUmJmUuZm4ucmVzaXphYmxlJiZ0aGlzLl9tYWtlUmVzaXphYmxlKCksdGhpcy5faXNPcGVuPSExLHRoaXMuX3RyYWNrRm9jdXMoKX0sX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuYXV0b09wZW4mJnRoaXMub3BlbigpfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIHQmJih0LmpxdWVyeXx8dC5ub2RlVHlwZSk/ZSh0KTp0aGlzLmRvY3VtZW50LmZpbmQodHx8ImJvZHkiKS5lcSgwKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMub3JpZ2luYWxQb3NpdGlvbjt0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSx0aGlzLl9kZXN0cm95T3ZlcmxheSgpLHRoaXMuZWxlbWVudC5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmNzcyh0aGlzLm9yaWdpbmFsQ3NzKS5kZXRhY2goKSx0aGlzLnVpRGlhbG9nLnN0b3AoITAsITApLnJlbW92ZSgpLHRoaXMub3JpZ2luYWxUaXRsZSYmdGhpcy5lbGVtZW50LmF0dHIoInRpdGxlIix0aGlzLm9yaWdpbmFsVGl0bGUpLGU9dC5wYXJlbnQuY2hpbGRyZW4oKS5lcSh0LmluZGV4KSxlLmxlbmd0aCYmZVswXSE9PXRoaXMuZWxlbWVudFswXT9lLmJlZm9yZSh0aGlzLmVsZW1lbnQpOnQucGFyZW50LmFwcGVuZCh0aGlzLmVsZW1lbnQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aURpYWxvZ30sZGlzYWJsZTplLm5vb3AsZW5hYmxlOmUubm9vcCxjbG9zZTpmdW5jdGlvbih0KXt2YXIgaSxzPXRoaXM7aWYodGhpcy5faXNPcGVuJiZ0aGlzLl90cmlnZ2VyKCJiZWZvcmVDbG9zZSIsdCkhPT0hMSl7aWYodGhpcy5faXNPcGVuPSExLHRoaXMuX2ZvY3VzZWRFbGVtZW50PW51bGwsdGhpcy5fZGVzdHJveU92ZXJsYXkoKSx0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSwhdGhpcy5vcGVuZXIuZmlsdGVyKCI6Zm9jdXNhYmxlIikuZm9jdXMoKS5sZW5ndGgpdHJ5e2k9dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50LGkmJiJib2R5IiE9PWkubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZShpKS5ibHVyKCl9Y2F0Y2gobil7fXRoaXMuX2hpZGUodGhpcy51aURpYWxvZyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe3MuX3RyaWdnZXIoImNsb3NlIix0KX0pfX0saXNPcGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzT3Blbn0sbW92ZVRvVG9wOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZVRvVG9wKCl9LF9tb3ZlVG9Ub3A6ZnVuY3Rpb24odCxpKXt2YXIgcz0hMSxuPXRoaXMudWlEaWFsb2cuc2libGluZ3MoIi51aS1mcm9udDp2aXNpYmxlIikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuK2UodGhpcykuY3NzKCJ6LWluZGV4Iil9KS5nZXQoKSxhPU1hdGgubWF4LmFwcGx5KG51bGwsbik7cmV0dXJuIGE+PSt0aGlzLnVpRGlhbG9nLmNzcygiei1pbmRleCIpJiYodGhpcy51aURpYWxvZy5jc3MoInotaW5kZXgiLGErMSkscz0hMCkscyYmIWkmJnRoaXMuX3RyaWdnZXIoImZvY3VzIix0KSxzfSxvcGVuOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5faXNPcGVuPyh0aGlzLl9tb3ZlVG9Ub3AoKSYmdGhpcy5fZm9jdXNUYWJiYWJsZSgpLHZvaWQgMCk6KHRoaXMuX2lzT3Blbj0hMCx0aGlzLm9wZW5lcj1lKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCksdGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCksdGhpcy5fY3JlYXRlT3ZlcmxheSgpLHRoaXMuX21vdmVUb1RvcChudWxsLCEwKSx0aGlzLm92ZXJsYXkmJnRoaXMub3ZlcmxheS5jc3MoInotaW5kZXgiLHRoaXMudWlEaWFsb2cuY3NzKCJ6LWluZGV4IiktMSksdGhpcy5fc2hvdyh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5zaG93LGZ1bmN0aW9uKCl7dC5fZm9jdXNUYWJiYWJsZSgpLHQuX3RyaWdnZXIoImZvY3VzIil9KSx0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKSx0aGlzLl90cmlnZ2VyKCJvcGVuIiksdm9pZCAwKX0sX2ZvY3VzVGFiYmFibGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mb2N1c2VkRWxlbWVudDtlfHwoZT10aGlzLmVsZW1lbnQuZmluZCgiW2F1dG9mb2N1c10iKSksZS5sZW5ndGh8fChlPXRoaXMuZWxlbWVudC5maW5kKCI6dGFiYmFibGUiKSksZS5sZW5ndGh8fChlPXRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmZpbmQoIjp0YWJiYWJsZSIpKSxlLmxlbmd0aHx8KGU9dGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuZmlsdGVyKCI6dGFiYmFibGUiKSksZS5sZW5ndGh8fChlPXRoaXMudWlEaWFsb2cpLGUuZXEoMCkuZm9jdXMoKX0sX2tlZXBGb2N1czpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7dmFyIHQ9dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50LGk9dGhpcy51aURpYWxvZ1swXT09PXR8fGUuY29udGFpbnModGhpcy51aURpYWxvZ1swXSx0KTtpfHx0aGlzLl9mb2N1c1RhYmJhYmxlKCl9dC5wcmV2ZW50RGVmYXVsdCgpLGkuY2FsbCh0aGlzKSx0aGlzLl9kZWxheShpKX0sX2NyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oKXt0aGlzLnVpRGlhbG9nPWUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLWRpYWxvZyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS1mcm9udCAiK3RoaXMub3B0aW9ucy5kaWFsb2dDbGFzcykuaGlkZSgpLmF0dHIoe3RhYkluZGV4Oi0xLHJvbGU6ImRpYWxvZyJ9KS5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nLHtrZXlkb3duOmZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy5jbG9zZU9uRXNjYXBlJiYhdC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmdC5rZXlDb2RlJiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuRVNDQVBFKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZSh0KSx2b2lkIDA7aWYodC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlRBQiYmIXQuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBpPXRoaXMudWlEaWFsb2cuZmluZCgiOnRhYmJhYmxlIikscz1pLmZpbHRlcigiOmZpcnN0Iiksbj1pLmZpbHRlcigiOmxhc3QiKTt0LnRhcmdldCE9PW5bMF0mJnQudGFyZ2V0IT09dGhpcy51aURpYWxvZ1swXXx8dC5zaGlmdEtleT90LnRhcmdldCE9PXNbMF0mJnQudGFyZ2V0IT09dGhpcy51aURpYWxvZ1swXXx8IXQuc2hpZnRLZXl8fCh0aGlzLl9kZWxheShmdW5jdGlvbigpe24uZm9jdXMoKX0pLHQucHJldmVudERlZmF1bHQoKSk6KHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7cy5mb2N1cygpfSksdC5wcmV2ZW50RGVmYXVsdCgpKX19LG1vdXNlZG93bjpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlVG9Ub3AoZSkmJnRoaXMuX2ZvY3VzVGFiYmFibGUoKX19KSx0aGlzLmVsZW1lbnQuZmluZCgiW2FyaWEtZGVzY3JpYmVkYnldIikubGVuZ3RofHx0aGlzLnVpRGlhbG9nLmF0dHIoeyJhcmlhLWRlc2NyaWJlZGJ5Ijp0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKCJpZCIpfSl9LF9jcmVhdGVUaXRsZWJhcjpmdW5jdGlvbigpe3ZhciB0O3RoaXMudWlEaWFsb2dUaXRsZWJhcj1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIHVpLWhlbHBlci1jbGVhcmZpeCIpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nVGl0bGViYXIse21vdXNlZG93bjpmdW5jdGlvbih0KXtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIil8fHRoaXMudWlEaWFsb2cuZm9jdXMoKX19KSx0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZT1lKCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PC9idXR0b24+IikuYnV0dG9uKHtsYWJlbDp0aGlzLm9wdGlvbnMuY2xvc2VUZXh0LGljb25zOntwcmltYXJ5OiJ1aS1pY29uLWNsb3NldGhpY2sifSx0ZXh0OiExfSkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2dUaXRsZWJhciksdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2Use2NsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKGUpfX0pLHQ9ZSgiPHNwYW4+IikudW5pcXVlSWQoKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlIikucHJlcGVuZFRvKHRoaXMudWlEaWFsb2dUaXRsZWJhciksdGhpcy5fdGl0bGUodCksdGhpcy51aURpYWxvZy5hdHRyKHsiYXJpYS1sYWJlbGxlZGJ5Ijp0LmF0dHIoImlkIil9KX0sX3RpdGxlOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy50aXRsZXx8ZS5odG1sKCImIzE2MDsiKSxlLnRleHQodGhpcy5vcHRpb25zLnRpdGxlKQp9LF9jcmVhdGVCdXR0b25QYW5lOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZ0J1dHRvblBhbmU9ZSgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IiksdGhpcy51aUJ1dHRvblNldD1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9uc2V0IikuYXBwZW5kVG8odGhpcy51aURpYWxvZ0J1dHRvblBhbmUpLHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKX0sX2NyZWF0ZUJ1dHRvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9dGhpcy5vcHRpb25zLmJ1dHRvbnM7cmV0dXJuIHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpLHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKSxlLmlzRW1wdHlPYmplY3QoaSl8fGUuaXNBcnJheShpKSYmIWkubGVuZ3RoPyh0aGlzLnVpRGlhbG9nLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucyIpLHZvaWQgMCk6KGUuZWFjaChpLGZ1bmN0aW9uKGkscyl7dmFyIG4sYTtzPWUuaXNGdW5jdGlvbihzKT97Y2xpY2s6cyx0ZXh0Oml9OnMscz1lLmV4dGVuZCh7dHlwZToiYnV0dG9uIn0scyksbj1zLmNsaWNrLHMuY2xpY2s9ZnVuY3Rpb24oKXtuLmFwcGx5KHQuZWxlbWVudFswXSxhcmd1bWVudHMpfSxhPXtpY29uczpzLmljb25zLHRleHQ6cy5zaG93VGV4dH0sZGVsZXRlIHMuaWNvbnMsZGVsZXRlIHMuc2hvd1RleHQsZSgiPGJ1dHRvbj48L2J1dHRvbj4iLHMpLmJ1dHRvbihhKS5hcHBlbmRUbyh0LnVpQnV0dG9uU2V0KX0pLHRoaXMudWlEaWFsb2cuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zIiksdGhpcy51aURpYWxvZ0J1dHRvblBhbmUuYXBwZW5kVG8odGhpcy51aURpYWxvZyksdm9pZCAwKX0sX21ha2VEcmFnZ2FibGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3JldHVybntwb3NpdGlvbjplLnBvc2l0aW9uLG9mZnNldDplLm9mZnNldH19dmFyIGk9dGhpcyxzPXRoaXMub3B0aW9uczt0aGlzLnVpRGlhbG9nLmRyYWdnYWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQsIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2UiLGhhbmRsZToiLnVpLWRpYWxvZy10aXRsZWJhciIsY29udGFpbm1lbnQ6ImRvY3VtZW50IixzdGFydDpmdW5jdGlvbihzLG4pe2UodGhpcykuYWRkQ2xhc3MoInVpLWRpYWxvZy1kcmFnZ2luZyIpLGkuX2Jsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcigiZHJhZ1N0YXJ0IixzLHQobikpfSxkcmFnOmZ1bmN0aW9uKGUscyl7aS5fdHJpZ2dlcigiZHJhZyIsZSx0KHMpKX0sc3RvcDpmdW5jdGlvbihuLGEpe3ZhciBvPWEub2Zmc2V0LmxlZnQtaS5kb2N1bWVudC5zY3JvbGxMZWZ0KCkscj1hLm9mZnNldC50b3AtaS5kb2N1bWVudC5zY3JvbGxUb3AoKTtzLnBvc2l0aW9uPXtteToibGVmdCB0b3AiLGF0OiJsZWZ0Iisobz49MD8iKyI6IiIpK28rIiAiKyJ0b3AiKyhyPj0wPyIrIjoiIikrcixvZjppLndpbmRvd30sZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoImRyYWdTdG9wIixuLHQoYSkpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246ZS5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTplLm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjplLnBvc2l0aW9uLHNpemU6ZS5zaXplfX12YXIgaT10aGlzLHM9dGhpcy5vcHRpb25zLG49cy5yZXNpemFibGUsYT10aGlzLnVpRGlhbG9nLmNzcygicG9zaXRpb24iKSxvPSJzdHJpbmciPT10eXBlb2Ygbj9uOiJuLGUscyx3LHNlLHN3LG5lLG53Ijt0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQiLGNvbnRhaW5tZW50OiJkb2N1bWVudCIsYWxzb1Jlc2l6ZTp0aGlzLmVsZW1lbnQsbWF4V2lkdGg6cy5tYXhXaWR0aCxtYXhIZWlnaHQ6cy5tYXhIZWlnaHQsbWluV2lkdGg6cy5taW5XaWR0aCxtaW5IZWlnaHQ6dGhpcy5fbWluSGVpZ2h0KCksaGFuZGxlczpvLHN0YXJ0OmZ1bmN0aW9uKHMsbil7ZSh0aGlzKS5hZGRDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksaS5fYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKCJyZXNpemVTdGFydCIscyx0KG4pKX0scmVzaXplOmZ1bmN0aW9uKGUscyl7aS5fdHJpZ2dlcigicmVzaXplIixlLHQocykpfSxzdG9wOmZ1bmN0aW9uKG4sYSl7dmFyIG89aS51aURpYWxvZy5vZmZzZXQoKSxyPW8ubGVmdC1pLmRvY3VtZW50LnNjcm9sbExlZnQoKSxoPW8udG9wLWkuZG9jdW1lbnQuc2Nyb2xsVG9wKCk7cy5oZWlnaHQ9aS51aURpYWxvZy5oZWlnaHQoKSxzLndpZHRoPWkudWlEaWFsb2cud2lkdGgoKSxzLnBvc2l0aW9uPXtteToibGVmdCB0b3AiLGF0OiJsZWZ0Iisocj49MD8iKyI6IiIpK3IrIiAiKyJ0b3AiKyhoPj0wPyIrIjoiIikraCxvZjppLndpbmRvd30sZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoInJlc2l6ZVN0b3AiLG4sdChhKSl9fSkuY3NzKCJwb3NpdGlvbiIsYSl9LF90cmFja0ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fb24odGhpcy53aWRnZXQoKSx7Zm9jdXNpbjpmdW5jdGlvbih0KXt0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKSx0aGlzLl9mb2N1c2VkRWxlbWVudD1lKHQudGFyZ2V0KX19KX0sX21ha2VGb2N1c1RhcmdldDpmdW5jdGlvbigpe3RoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCkudW5zaGlmdCh0aGlzKX0sX3VudHJhY2tJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCksaT1lLmluQXJyYXkodGhpcyx0KTstMSE9PWkmJnQuc3BsaWNlKGksMSl9LF90cmFja2luZ0luc3RhbmNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLWluc3RhbmNlcyIpO3JldHVybiBlfHwoZT1bXSx0aGlzLmRvY3VtZW50LmRhdGEoInVpLWRpYWxvZy1pbnN0YW5jZXMiLGUpKSxlfSxfbWluSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiJhdXRvIj09PWUuaGVpZ2h0P2UubWluSGVpZ2h0Ok1hdGgubWluKGUubWluSGVpZ2h0LGUuaGVpZ2h0KX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKTtlfHx0aGlzLnVpRGlhbG9nLnNob3coKSx0aGlzLnVpRGlhbG9nLnBvc2l0aW9uKHRoaXMub3B0aW9ucy5wb3NpdGlvbiksZXx8dGhpcy51aURpYWxvZy5oaWRlKCl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz0hMSxuPXt9O2UuZWFjaCh0LGZ1bmN0aW9uKGUsdCl7aS5fc2V0T3B0aW9uKGUsdCksZSBpbiBpLnNpemVSZWxhdGVkT3B0aW9ucyYmKHM9ITApLGUgaW4gaS5yZXNpemFibGVSZWxhdGVkT3B0aW9ucyYmKG5bZV09dCl9KSxzJiYodGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCkpLHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoIm9wdGlvbiIsbil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG49dGhpcy51aURpYWxvZzsiZGlhbG9nQ2xhc3MiPT09ZSYmbi5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZGlhbG9nQ2xhc3MpLmFkZENsYXNzKHQpLCJkaXNhYmxlZCIhPT1lJiYodGhpcy5fc3VwZXIoZSx0KSwiYXBwZW5kVG8iPT09ZSYmdGhpcy51aURpYWxvZy5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwiYnV0dG9ucyI9PT1lJiZ0aGlzLl9jcmVhdGVCdXR0b25zKCksImNsb3NlVGV4dCI9PT1lJiZ0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5idXR0b24oe2xhYmVsOiIiK3R9KSwiZHJhZ2dhYmxlIj09PWUmJihpPW4uaXMoIjpkYXRhKHVpLWRyYWdnYWJsZSkiKSxpJiYhdCYmbi5kcmFnZ2FibGUoImRlc3Ryb3kiKSwhaSYmdCYmdGhpcy5fbWFrZURyYWdnYWJsZSgpKSwicG9zaXRpb24iPT09ZSYmdGhpcy5fcG9zaXRpb24oKSwicmVzaXphYmxlIj09PWUmJihzPW4uaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSxzJiYhdCYmbi5yZXNpemFibGUoImRlc3Ryb3kiKSxzJiYic3RyaW5nIj09dHlwZW9mIHQmJm4ucmVzaXphYmxlKCJvcHRpb24iLCJoYW5kbGVzIix0KSxzfHx0PT09ITF8fHRoaXMuX21ha2VSZXNpemFibGUoKSksInRpdGxlIj09PWUmJnRoaXMuX3RpdGxlKHRoaXMudWlEaWFsb2dUaXRsZWJhci5maW5kKCIudWktZGlhbG9nLXRpdGxlIikpKX0sX3NpemU6ZnVuY3Rpb24oKXt2YXIgZSx0LGkscz10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LnNob3coKS5jc3Moe3dpZHRoOiJhdXRvIixtaW5IZWlnaHQ6MCxtYXhIZWlnaHQ6Im5vbmUiLGhlaWdodDowfSkscy5taW5XaWR0aD5zLndpZHRoJiYocy53aWR0aD1zLm1pbldpZHRoKSxlPXRoaXMudWlEaWFsb2cuY3NzKHtoZWlnaHQ6ImF1dG8iLHdpZHRoOnMud2lkdGh9KS5vdXRlckhlaWdodCgpLHQ9TWF0aC5tYXgoMCxzLm1pbkhlaWdodC1lKSxpPSJudW1iZXIiPT10eXBlb2Ygcy5tYXhIZWlnaHQ/TWF0aC5tYXgoMCxzLm1heEhlaWdodC1lKToibm9uZSIsImF1dG8iPT09cy5oZWlnaHQ/dGhpcy5lbGVtZW50LmNzcyh7bWluSGVpZ2h0OnQsbWF4SGVpZ2h0OmksaGVpZ2h0OiJhdXRvIn0pOnRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoMCxzLmhlaWdodC1lKSksdGhpcy51aURpYWxvZy5pcygiOmRhdGEodWktcmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwibWluSGVpZ2h0Iix0aGlzLl9taW5IZWlnaHQoKSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzPXRoaXMuZG9jdW1lbnQuZmluZCgiaWZyYW1lIikubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZSgiPGRpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKX0pLmFwcGVuZFRvKHQucGFyZW50KCkpLm9mZnNldCh0Lm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2FsbG93SW50ZXJhY3Rpb246ZnVuY3Rpb24odCl7cmV0dXJuIGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1kaWFsb2ciKS5sZW5ndGg/ITA6ISFlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktZGF0ZXBpY2tlciIpLmxlbmd0aH0sX2NyZWF0ZU92ZXJsYXk6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMubW9kYWwpe3ZhciB0PSEwO3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dD0hMX0pLHRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIil8fHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2ZvY3VzaW46ZnVuY3Rpb24oZSl7dHx8dGhpcy5fYWxsb3dJbnRlcmFjdGlvbihlKXx8KGUucHJldmVudERlZmF1bHQoKSx0aGlzLl90cmFja2luZ0luc3RhbmNlcygpWzBdLl9mb2N1c1RhYmJhYmxlKCkpfX0pLHRoaXMub3ZlcmxheT1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS13aWRnZXQtb3ZlcmxheSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX29uKHRoaXMub3ZlcmxheSx7bW91c2Vkb3duOiJfa2VlcEZvY3VzIn0pLHRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIiwodGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiKXx8MCkrMSl9fSxfZGVzdHJveU92ZXJsYXk6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMubW9kYWwmJnRoaXMub3ZlcmxheSl7dmFyIGU9dGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiKS0xO2U/dGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiLGUpOnRoaXMuZG9jdW1lbnQudW5iaW5kKCJmb2N1c2luIikucmVtb3ZlRGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIiksdGhpcy5vdmVybGF5LnJlbW92ZSgpLHRoaXMub3ZlcmxheT1udWxsfX19KSxlLndpZGdldCgidWkucHJvZ3Jlc3NiYXIiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e21heDoxMDAsdmFsdWU6MCxjaGFuZ2U6bnVsbCxjb21wbGV0ZTpudWxsfSxtaW46MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vbGRWYWx1ZT10aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZSgpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktcHJvZ3Jlc3NiYXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5hdHRyKHtyb2xlOiJwcm9ncmVzc2JhciIsImFyaWEtdmFsdWVtaW4iOnRoaXMubWlufSksdGhpcy52YWx1ZURpdj1lKCI8ZGl2IGNsYXNzPSd1aS1wcm9ncmVzc2Jhci12YWx1ZSB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1sZWZ0Jz48L2Rpdj4iKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktcHJvZ3Jlc3NiYXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1pbiIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtYXgiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy52YWx1ZURpdi5yZW1vdmUoKX0sdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/dGhpcy5vcHRpb25zLnZhbHVlOih0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZShlKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx2b2lkIDApfSxfY29uc3RyYWluZWRWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dGhpcy5vcHRpb25zLnZhbHVlKSx0aGlzLmluZGV0ZXJtaW5hdGU9ZT09PSExLCJudW1iZXIiIT10eXBlb2YgZSYmKGU9MCksdGhpcy5pbmRldGVybWluYXRlPyExOk1hdGgubWluKHRoaXMub3B0aW9ucy5tYXgsTWF0aC5tYXgodGhpcy5taW4sZSkpfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO2RlbGV0ZSBlLnZhbHVlLHRoaXMuX3N1cGVyKGUpLHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKHQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7Im1heCI9PT1lJiYodD1NYXRoLm1heCh0aGlzLm1pbix0KSksImRpc2FibGVkIj09PWUmJnRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5fc3VwZXIoZSx0KX0sX3BlcmNlbnRhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRldGVybWluYXRlPzEwMDoxMDAqKHRoaXMub3B0aW9ucy52YWx1ZS10aGlzLm1pbikvKHRoaXMub3B0aW9ucy5tYXgtdGhpcy5taW4pfSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnZhbHVlLGk9dGhpcy5fcGVyY2VudGFnZSgpO3RoaXMudmFsdWVEaXYudG9nZ2xlKHRoaXMuaW5kZXRlcm1pbmF0ZXx8dD50aGlzLm1pbikudG9nZ2xlQ2xhc3MoInVpLWNvcm5lci1yaWdodCIsdD09PXRoaXMub3B0aW9ucy5tYXgpLndpZHRoKGkudG9GaXhlZCgwKSsiJSIpLHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktcHJvZ3Jlc3NiYXItaW5kZXRlcm1pbmF0ZSIsdGhpcy5pbmRldGVybWluYXRlKSx0aGlzLmluZGV0ZXJtaW5hdGU/KHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy5vdmVybGF5RGl2fHwodGhpcy5vdmVybGF5RGl2PWUoIjxkaXYgY2xhc3M9J3VpLXByb2dyZXNzYmFyLW92ZXJsYXknPjwvZGl2PiIpLmFwcGVuZFRvKHRoaXMudmFsdWVEaXYpKSk6KHRoaXMuZWxlbWVudC5hdHRyKHsiYXJpYS12YWx1ZW1heCI6dGhpcy5vcHRpb25zLm1heCwiYXJpYS12YWx1ZW5vdyI6dH0pLHRoaXMub3ZlcmxheURpdiYmKHRoaXMub3ZlcmxheURpdi5yZW1vdmUoKSx0aGlzLm92ZXJsYXlEaXY9bnVsbCkpLHRoaXMub2xkVmFsdWUhPT10JiYodGhpcy5vbGRWYWx1ZT10LHRoaXMuX3RyaWdnZXIoImNoYW5nZSIpKSx0PT09dGhpcy5vcHRpb25zLm1heCYmdGhpcy5fdHJpZ2dlcigiY29tcGxldGUiKX19KSxlLndpZGdldCgidWkuc2VsZWN0bWVudSIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxzZWxlY3Q+IixvcHRpb25zOnthcHBlbmRUbzpudWxsLGRpc2FibGVkOm51bGwsaWNvbnM6e2J1dHRvbjoidWktaWNvbi10cmlhbmdsZS0xLXMifSxwb3NpdGlvbjp7bXk6ImxlZnQgdG9wIixhdDoibGVmdCBib3R0b20iLGNvbGxpc2lvbjoibm9uZSJ9LHdpZHRoOm51bGwsY2hhbmdlOm51bGwsY2xvc2U6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxzZWxlY3Q6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoImlkIik7dGhpcy5pZHM9e2VsZW1lbnQ6ZSxidXR0b246ZSsiLWJ1dHRvbiIsbWVudTplKyItbWVudSJ9LHRoaXMuX2RyYXdCdXR0b24oKSx0aGlzLl9kcmF3TWVudSgpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5kaXNhYmxlKCl9LF9kcmF3QnV0dG9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmxhYmVsPWUoImxhYmVsW2Zvcj0nIit0aGlzLmlkcy5lbGVtZW50KyInXSIpLmF0dHIoImZvciIsdGhpcy5pZHMuYnV0dG9uKSx0aGlzLl9vbih0aGlzLmxhYmVsLHtjbGljazpmdW5jdGlvbihlKXt0aGlzLmJ1dHRvbi5mb2N1cygpLGUucHJldmVudERlZmF1bHQoKX19KSx0aGlzLmVsZW1lbnQuaGlkZSgpLHRoaXMuYnV0dG9uPWUoIjxzcGFuPiIseyJjbGFzcyI6InVpLXNlbGVjdG1lbnUtYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiLHRhYmluZGV4OnRoaXMub3B0aW9ucy5kaXNhYmxlZD8tMTowLGlkOnRoaXMuaWRzLmJ1dHRvbixyb2xlOiJjb21ib2JveCIsImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtYXV0b2NvbXBsZXRlIjoibGlzdCIsImFyaWEtb3ducyI6dGhpcy5pZHMubWVudSwiYXJpYS1oYXNwb3B1cCI6InRydWUifSkuaW5zZXJ0QWZ0ZXIodGhpcy5lbGVtZW50KSxlKCI8c3Bhbj4iLHsiY2xhc3MiOiJ1aS1pY29uICIrdGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbn0pLnByZXBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5idXR0b25UZXh0PWUoIjxzcGFuPiIseyJjbGFzcyI6InVpLXNlbGVjdG1lbnUtdGV4dCJ9KS5hcHBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5fc2V0VGV4dCh0aGlzLmJ1dHRvblRleHQsdGhpcy5lbGVtZW50LmZpbmQoIm9wdGlvbjpzZWxlY3RlZCIpLnRleHQoKSksdGhpcy5fcmVzaXplQnV0dG9uKCksdGhpcy5fb24odGhpcy5idXR0b24sdGhpcy5fYnV0dG9uRXZlbnRzKSx0aGlzLmJ1dHRvbi5vbmUoImZvY3VzaW4iLGZ1bmN0aW9uKCl7dC5tZW51SXRlbXN8fHQuX3JlZnJlc2hNZW51KCl9KSx0aGlzLl9ob3ZlcmFibGUodGhpcy5idXR0b24pLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLmJ1dHRvbil9LF9kcmF3TWVudTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5tZW51PWUoIjx1bD4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiYXJpYS1sYWJlbGxlZGJ5Ijp0aGlzLmlkcy5idXR0b24saWQ6dGhpcy5pZHMubWVudX0pLHRoaXMubWVudVdyYXA9ZSgiPGRpdj4iLHsiY2xhc3MiOiJ1aS1zZWxlY3RtZW51LW1lbnUgdWktZnJvbnQifSkuYXBwZW5kKHRoaXMubWVudSkuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5tZW51SW5zdGFuY2U9dGhpcy5tZW51Lm1lbnUoe3JvbGU6Imxpc3Rib3giLHNlbGVjdDpmdW5jdGlvbihlLGkpe2UucHJldmVudERlZmF1bHQoKSx0Ll9zZXRTZWxlY3Rpb24oKSx0Ll9zZWxlY3QoaS5pdGVtLmRhdGEoInVpLXNlbGVjdG1lbnUtaXRlbSIpLGUpfSxmb2N1czpmdW5jdGlvbihlLGkpe3ZhciBzPWkuaXRlbS5kYXRhKCJ1aS1zZWxlY3RtZW51LWl0ZW0iKTtudWxsIT10LmZvY3VzSW5kZXgmJnMuaW5kZXghPT10LmZvY3VzSW5kZXgmJih0Ll90cmlnZ2VyKCJmb2N1cyIsZSx7aXRlbTpzfSksdC5pc09wZW58fHQuX3NlbGVjdChzLGUpKSx0LmZvY3VzSW5kZXg9cy5pbmRleCx0LmJ1dHRvbi5hdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHQubWVudUl0ZW1zLmVxKHMuaW5kZXgpLmF0dHIoImlkIikpfX0pLm1lbnUoImluc3RhbmNlIiksdGhpcy5tZW51LmFkZENsYXNzKCJ1aS1jb3JuZXItYm90dG9tIikucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0aGlzLm1lbnVJbnN0YW5jZS5fb2ZmKHRoaXMubWVudSwibW91c2VsZWF2ZSIpLHRoaXMubWVudUluc3RhbmNlLl9jbG9zZU9uRG9jdW1lbnRDbGljaz1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLm1lbnVJbnN0YW5jZS5faXNEaXZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuITF9fSxyZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fcmVmcmVzaE1lbnUoKSx0aGlzLl9zZXRUZXh0KHRoaXMuYnV0dG9uVGV4dCx0aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKS50ZXh0KCkpLHRoaXMub3B0aW9ucy53aWR0aHx8dGhpcy5fcmVzaXplQnV0dG9uKCl9LF9yZWZyZXNoTWVudTpmdW5jdGlvbigpe3RoaXMubWVudS5lbXB0eSgpO3ZhciBlLHQ9dGhpcy5lbGVtZW50LmZpbmQoIm9wdGlvbiIpO3QubGVuZ3RoJiYodGhpcy5fcGFyc2VPcHRpb25zKHQpLHRoaXMuX3JlbmRlck1lbnUodGhpcy5tZW51LHRoaXMuaXRlbXMpLHRoaXMubWVudUluc3RhbmNlLnJlZnJlc2goKSx0aGlzLm1lbnVJdGVtcz10aGlzLm1lbnUuZmluZCgibGkiKS5ub3QoIi51aS1zZWxlY3RtZW51LW9wdGdyb3VwIiksZT10aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKSx0aGlzLm1lbnVJbnN0YW5jZS5mb2N1cyhudWxsLGUpLHRoaXMuX3NldEFyaWEoZS5kYXRhKCJ1aS1zZWxlY3RtZW51LWl0ZW0iKSksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIikpKX0sb3BlbjpmdW5jdGlvbihlKXt0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fCh0aGlzLm1lbnVJdGVtcz8odGhpcy5tZW51LmZpbmQoIi51aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLHRoaXMubWVudUluc3RhbmNlLmZvY3VzKG51bGwsdGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCkpKTp0aGlzLl9yZWZyZXNoTWVudSgpLHRoaXMuaXNPcGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHIoKSx0aGlzLl9yZXNpemVNZW51KCksdGhpcy5fcG9zaXRpb24oKSx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHRoaXMuX2RvY3VtZW50Q2xpY2spLHRoaXMuX3RyaWdnZXIoIm9wZW4iLGUpKX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5tZW51V3JhcC5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6dGhpcy5idXR0b259LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpfSxjbG9zZTpmdW5jdGlvbihlKXt0aGlzLmlzT3BlbiYmKHRoaXMuaXNPcGVuPSExLHRoaXMuX3RvZ2dsZUF0dHIoKSx0aGlzLnJhbmdlPW51bGwsdGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQpLHRoaXMuX3RyaWdnZXIoImNsb3NlIixlKSl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbn0sbWVudVdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnV9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKHQsaSl7dmFyIHM9dGhpcyxuPSIiO2UuZWFjaChpLGZ1bmN0aW9uKGksYSl7YS5vcHRncm91cCE9PW4mJihlKCI8bGk+Iix7ImNsYXNzIjoidWktc2VsZWN0bWVudS1vcHRncm91cCB1aS1tZW51LWRpdmlkZXIiKyhhLmVsZW1lbnQucGFyZW50KCJvcHRncm91cCIpLnByb3AoImRpc2FibGVkIik/IiB1aS1zdGF0ZS1kaXNhYmxlZCI6IiIpLHRleHQ6YS5vcHRncm91cH0pLmFwcGVuZFRvKHQpLG49YS5vcHRncm91cCkscy5fcmVuZGVySXRlbURhdGEodCxhKX0pfSxfcmVuZGVySXRlbURhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcmVuZGVySXRlbShlLHQpLmRhdGEoInVpLXNlbGVjdG1lbnUtaXRlbSIsdCl9LF9yZW5kZXJJdGVtOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSgiPGxpPiIpO3JldHVybiBpLmRpc2FibGVkJiZzLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLHRoaXMuX3NldFRleHQocyxpLmxhYmVsKSxzLmFwcGVuZFRvKHQpfSxfc2V0VGV4dDpmdW5jdGlvbihlLHQpe3Q/ZS50ZXh0KHQpOmUuaHRtbCgiJiMxNjA7Iil9LF9tb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxuPSIudWktbWVudS1pdGVtIjt0aGlzLmlzT3Blbj9pPXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZm9jdXNJbmRleCk6KGk9dGhpcy5tZW51SXRlbXMuZXEodGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpLG4rPSI6bm90KC51aS1zdGF0ZS1kaXNhYmxlZCkiKSxzPSJmaXJzdCI9PT1lfHwibGFzdCI9PT1lP2lbImZpcnN0Ij09PWU/InByZXZBbGwiOiJuZXh0QWxsIl0obikuZXEoLTEpOmlbZSsiQWxsIl0obikuZXEoMCkscy5sZW5ndGgmJnRoaXMubWVudUluc3RhbmNlLmZvY3VzKHQscyl9LF9nZXRTZWxlY3RlZEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51SXRlbXMuZXEodGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpfSxfdG9nZ2xlOmZ1bmN0aW9uKGUpe3RoaXNbdGhpcy5pc09wZW4/ImNsb3NlIjoib3BlbiJdKGUpfSxfc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5yYW5nZSYmKHdpbmRvdy5nZXRTZWxlY3Rpb24/KGU9d2luZG93LmdldFNlbGVjdGlvbigpLGUucmVtb3ZlQWxsUmFuZ2VzKCksZS5hZGRSYW5nZSh0aGlzLnJhbmdlKSk6dGhpcy5yYW5nZS5zZWxlY3QoKSx0aGlzLmJ1dHRvbi5mb2N1cygpKX0sX2RvY3VtZW50Q2xpY2s6e21vdXNlZG93bjpmdW5jdGlvbih0KXt0aGlzLmlzT3BlbiYmKGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1zZWxlY3RtZW51LW1lbnUsICMiK3RoaXMuaWRzLmJ1dHRvbikubGVuZ3RofHx0aGlzLmNsb3NlKHQpKX19LF9idXR0b25FdmVudHM6e21vdXNlZG93bjpmdW5jdGlvbigpe3ZhciBlO3dpbmRvdy5nZXRTZWxlY3Rpb24/KGU9d2luZG93LmdldFNlbGVjdGlvbigpLGUucmFuZ2VDb3VudCYmKHRoaXMucmFuZ2U9ZS5nZXRSYW5nZUF0KDApKSk6dGhpcy5yYW5nZT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX0sY2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0aW9uKCksdGhpcy5fdG9nZ2xlKGUpfSxrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpPSEwO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlRBQjpjYXNlIGUudWkua2V5Q29kZS5FU0NBUEU6dGhpcy5jbG9zZSh0KSxpPSExO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVOVEVSOnRoaXMuaXNPcGVuJiZ0aGlzLl9zZWxlY3RGb2N1c2VkSXRlbSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDp0LmFsdEtleT90aGlzLl90b2dnbGUodCk6dGhpcy5fbW92ZSgicHJldiIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjp0LmFsdEtleT90aGlzLl90b2dnbGUodCk6dGhpcy5fbW92ZSgibmV4dCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5pc09wZW4/dGhpcy5fc2VsZWN0Rm9jdXNlZEl0ZW0odCk6dGhpcy5fdG9nZ2xlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkxFRlQ6dGhpcy5fbW92ZSgicHJldiIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6dGhpcy5fbW92ZSgibmV4dCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTpjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMuX21vdmUoImZpcnN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMuX21vdmUoImxhc3QiLHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5tZW51LnRyaWdnZXIodCksaT0hMX1pJiZ0LnByZXZlbnREZWZhdWx0KCl9fSxfc2VsZWN0Rm9jdXNlZEl0ZW06ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tZW51SXRlbXMuZXEodGhpcy5mb2N1c0luZGV4KTt0Lmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHx0aGlzLl9zZWxlY3QodC5kYXRhKCJ1aS1zZWxlY3RtZW51LWl0ZW0iKSxlKX0sX3NlbGVjdDpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4O3RoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4PWUuaW5kZXgsdGhpcy5fc2V0VGV4dCh0aGlzLmJ1dHRvblRleHQsZS5sYWJlbCksdGhpcy5fc2V0QXJpYShlKSx0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLHQse2l0ZW06ZX0pLGUuaW5kZXghPT1pJiZ0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLHQse2l0ZW06ZX0pLHRoaXMuY2xvc2UodCl9LF9zZXRBcmlhOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubWVudUl0ZW1zLmVxKGUuaW5kZXgpLmF0dHIoImlkIik7dGhpcy5idXR0b24uYXR0cih7ImFyaWEtbGFiZWxsZWRieSI6dCwiYXJpYS1hY3RpdmVkZXNjZW5kYW50Ijp0fSksdGhpcy5tZW51LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsdCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXsiaWNvbnMiPT09ZSYmdGhpcy5idXR0b24uZmluZCgic3Bhbi51aS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbikuYWRkQ2xhc3ModC5idXR0b24pLHRoaXMuX3N1cGVyKGUsdCksImFwcGVuZFRvIj09PWUmJnRoaXMubWVudVdyYXAuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksImRpc2FibGVkIj09PWUmJih0aGlzLm1lbnVJbnN0YW5jZS5vcHRpb24oImRpc2FibGVkIix0KSx0aGlzLmJ1dHRvbi50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLHQpLmF0dHIoImFyaWEtZGlzYWJsZWQiLHQpLHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsdCksdD8odGhpcy5idXR0b24uYXR0cigidGFiaW5kZXgiLC0xKSx0aGlzLmNsb3NlKCkpOnRoaXMuYnV0dG9uLmF0dHIoInRhYmluZGV4IiwwKSksIndpZHRoIj09PWUmJnRoaXMuX3Jlc2l6ZUJ1dHRvbigpfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIHQmJih0PXQuanF1ZXJ5fHx0Lm5vZGVUeXBlP2UodCk6dGhpcy5kb2N1bWVudC5maW5kKHQpLmVxKDApKSx0JiZ0WzBdfHwodD10aGlzLmVsZW1lbnQuY2xvc2VzdCgiLnVpLWZyb250IikpLHQubGVuZ3RofHwodD10aGlzLmRvY3VtZW50WzBdLmJvZHkpLHR9LF90b2dnbGVBdHRyOmZ1bmN0aW9uKCl7dGhpcy5idXR0b24udG9nZ2xlQ2xhc3MoInVpLWNvcm5lci10b3AiLHRoaXMuaXNPcGVuKS50b2dnbGVDbGFzcygidWktY29ybmVyLWFsbCIsIXRoaXMuaXNPcGVuKS5hdHRyKCJhcmlhLWV4cGFuZGVkIix0aGlzLmlzT3BlbiksdGhpcy5tZW51V3JhcC50b2dnbGVDbGFzcygidWktc2VsZWN0bWVudS1vcGVuIix0aGlzLmlzT3BlbiksdGhpcy5tZW51LmF0dHIoImFyaWEtaGlkZGVuIiwhdGhpcy5pc09wZW4pfSxfcmVzaXplQnV0dG9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLndpZHRoO2V8fChlPXRoaXMuZWxlbWVudC5zaG93KCkub3V0ZXJXaWR0aCgpLHRoaXMuZWxlbWVudC5oaWRlKCkpLHRoaXMuYnV0dG9uLm91dGVyV2lkdGgoZSl9LF9yZXNpemVNZW51OmZ1bmN0aW9uKCl7dGhpcy5tZW51Lm91dGVyV2lkdGgoTWF0aC5tYXgodGhpcy5idXR0b24ub3V0ZXJXaWR0aCgpLHRoaXMubWVudS53aWR0aCgiIikub3V0ZXJXaWR0aCgpKzEpKX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm57ZGlzYWJsZWQ6dGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIil9fSxfcGFyc2VPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBpPVtdO3QuZWFjaChmdW5jdGlvbih0LHMpe3ZhciBuPWUocyksYT1uLnBhcmVudCgib3B0Z3JvdXAiKTtpLnB1c2goe2VsZW1lbnQ6bixpbmRleDp0LHZhbHVlOm4udmFsKCksbGFiZWw6bi50ZXh0KCksb3B0Z3JvdXA6YS5hdHRyKCJsYWJlbCIpfHwiIixkaXNhYmxlZDphLnByb3AoImRpc2FibGVkIil8fG4ucHJvcCgiZGlzYWJsZWQiKX0pfSksdGhpcy5pdGVtcz1pfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMubWVudVdyYXAucmVtb3ZlKCksdGhpcy5idXR0b24ucmVtb3ZlKCksdGhpcy5lbGVtZW50LnNob3coKSx0aGlzLmVsZW1lbnQucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLmxhYmVsLmF0dHIoImZvciIsdGhpcy5pZHMuZWxlbWVudCl9fSksZS53aWRnZXQoInVpLnNsaWRlciIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40Iix3aWRnZXRFdmVudFByZWZpeDoic2xpZGUiLG9wdGlvbnM6e2FuaW1hdGU6ITEsZGlzdGFuY2U6MCxtYXg6MTAwLG1pbjowLG9yaWVudGF0aW9uOiJob3Jpem9udGFsIixyYW5nZTohMSxzdGVwOjEsdmFsdWU6MCx2YWx1ZXM6bnVsbCxjaGFuZ2U6bnVsbCxzbGlkZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxudW1QYWdlczo1LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNsaWRlciB1aS1zbGlkZXItIit0aGlzLm9yaWVudGF0aW9uKyIgdWktd2lkZ2V0IisiIHVpLXdpZGdldC1jb250ZW50IisiIHVpLWNvcm5lci1hbGwiKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9hbmltYXRlT2ZmPSExfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX2NyZWF0ZVJhbmdlKCksdGhpcy5fY3JlYXRlSGFuZGxlcygpLHRoaXMuX3NldHVwRXZlbnRzKCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9jcmVhdGVIYW5kbGVzOmZ1bmN0aW9uKCl7dmFyIHQsaSxzPXRoaXMub3B0aW9ucyxuPXRoaXMuZWxlbWVudC5maW5kKCIudWktc2xpZGVyLWhhbmRsZSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSxhPSI8c3BhbiBjbGFzcz0ndWktc2xpZGVyLWhhbmRsZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwnIHRhYmluZGV4PScwJz48L3NwYW4+IixvPVtdO2ZvcihpPXMudmFsdWVzJiZzLnZhbHVlcy5sZW5ndGh8fDEsbi5sZW5ndGg+aSYmKG4uc2xpY2UoaSkucmVtb3ZlKCksbj1uLnNsaWNlKDAsaSkpLHQ9bi5sZW5ndGg7aT50O3QrKylvLnB1c2goYSk7dGhpcy5oYW5kbGVzPW4uYWRkKGUoby5qb2luKCIiKSkuYXBwZW5kVG8odGhpcy5lbGVtZW50KSksdGhpcy5oYW5kbGU9dGhpcy5oYW5kbGVzLmVxKDApLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHQpe2UodGhpcykuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIsdCl9KX0sX2NyZWF0ZVJhbmdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGk9IiI7dC5yYW5nZT8odC5yYW5nZT09PSEwJiYodC52YWx1ZXM/dC52YWx1ZXMubGVuZ3RoJiYyIT09dC52YWx1ZXMubGVuZ3RoP3QudmFsdWVzPVt0LnZhbHVlc1swXSx0LnZhbHVlc1swXV06ZS5pc0FycmF5KHQudmFsdWVzKSYmKHQudmFsdWVzPXQudmFsdWVzLnNsaWNlKDApKTp0LnZhbHVlcz1bdGhpcy5fdmFsdWVNaW4oKSx0aGlzLl92YWx1ZU1pbigpXSksdGhpcy5yYW5nZSYmdGhpcy5yYW5nZS5sZW5ndGg/dGhpcy5yYW5nZS5yZW1vdmVDbGFzcygidWktc2xpZGVyLXJhbmdlLW1pbiB1aS1zbGlkZXItcmFuZ2UtbWF4IikuY3NzKHtsZWZ0OiIiLGJvdHRvbToiIn0pOih0aGlzLnJhbmdlPWUoIjxkaXY+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSxpPSJ1aS1zbGlkZXItcmFuZ2UgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIiksdGhpcy5yYW5nZS5hZGRDbGFzcyhpKygibWluIj09PXQucmFuZ2V8fCJtYXgiPT09dC5yYW5nZT8iIHVpLXNsaWRlci1yYW5nZS0iK3QucmFuZ2U6IiIpKSk6KHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5yYW5nZT1udWxsKX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5fb2ZmKHRoaXMuaGFuZGxlcyksdGhpcy5fb24odGhpcy5oYW5kbGVzLHRoaXMuX2hhbmRsZUV2ZW50cyksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGFuZGxlcyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGFuZGxlcyl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVzLnJlbW92ZSgpLHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXIgdWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbyxyLGgsbCx1PXRoaXMsZD10aGlzLm9wdGlvbnM7cmV0dXJuIGQuZGlzYWJsZWQ/ITE6KHRoaXMuZWxlbWVudFNpemU9e3dpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpfSx0aGlzLmVsZW1lbnRPZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLGk9e3g6dC5wYWdlWCx5OnQucGFnZVl9LHM9dGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKGkpLG49dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKzEsdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5hYnMocy11LnZhbHVlcyh0KSk7KG4+aXx8bj09PWkmJih0PT09dS5fbGFzdENoYW5nZWRWYWx1ZXx8dS52YWx1ZXModCk9PT1kLm1pbikpJiYobj1pLGE9ZSh0aGlzKSxvPXQpfSkscj10aGlzLl9zdGFydCh0LG8pLHI9PT0hMT8hMToodGhpcy5fbW91c2VTbGlkaW5nPSEwLHRoaXMuX2hhbmRsZUluZGV4PW8sYS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuZm9jdXMoKSxoPWEub2Zmc2V0KCksbD0hZSh0LnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5pcygiLnVpLXNsaWRlci1oYW5kbGUiKSx0aGlzLl9jbGlja09mZnNldD1sP3tsZWZ0OjAsdG9wOjB9OntsZWZ0OnQucGFnZVgtaC5sZWZ0LWEud2lkdGgoKS8yLHRvcDp0LnBhZ2VZLWgudG9wLWEuaGVpZ2h0KCkvMi0ocGFyc2VJbnQoYS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoYS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoYS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MCl9LHRoaXMuaGFuZGxlcy5oYXNDbGFzcygidWktc3RhdGUtaG92ZXIiKXx8dGhpcy5fc2xpZGUodCxvLHMpLHRoaXMuX2FuaW1hdGVPZmY9ITAsITApKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sX21vdXNlRHJhZzpmdW5jdGlvbihlKXt2YXIgdD17eDplLnBhZ2VYLHk6ZS5wYWdlWX0saT10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UodCk7cmV0dXJuIHRoaXMuX3NsaWRlKGUsdGhpcy5faGFuZGxlSW5kZXgsaSksITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGFuZGxlcy5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX3N0b3AoZSx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5fY2hhbmdlKGUsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fY2xpY2tPZmZzZXQ9bnVsbCx0aGlzLl9hbmltYXRlT2ZmPSExLCExfSxfZGV0ZWN0T3JpZW50YXRpb246ZnVuY3Rpb24oKXt0aGlzLm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI9PT10aGlzLm9wdGlvbnMub3JpZW50YXRpb24/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LF9ub3JtVmFsdWVGcm9tTW91c2U6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLG4sYTtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyh0PXRoaXMuZWxlbWVudFNpemUud2lkdGgsaT1lLngtdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LmxlZnQ6MCkpOih0PXRoaXMuZWxlbWVudFNpemUuaGVpZ2h0LGk9ZS55LXRoaXMuZWxlbWVudE9mZnNldC50b3AtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LnRvcDowKSkscz1pL3Qscz4xJiYocz0xKSwwPnMmJihzPTApLCJ2ZXJ0aWNhbCI9PT10aGlzLm9yaWVudGF0aW9uJiYocz0xLXMpLG49dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpLGE9dGhpcy5fdmFsdWVNaW4oKStzKm4sdGhpcy5fdHJpbUFsaWduVmFsdWUoYSl9LF9zdGFydDpmdW5jdGlvbihlLHQpe3ZhciBpPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYoaS52YWx1ZT10aGlzLnZhbHVlcyh0KSxpLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSxpKX0sX3NsaWRlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcyxuLGE7dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/KHM9dGhpcy52YWx1ZXModD8wOjEpLDI9PT10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmdGhpcy5vcHRpb25zLnJhbmdlPT09ITAmJigwPT09dCYmaT5zfHwxPT09dCYmcz5pKSYmKGk9cyksaSE9PXRoaXMudmFsdWVzKHQpJiYobj10aGlzLnZhbHVlcygpLG5bdF09aSxhPXRoaXMuX3RyaWdnZXIoInNsaWRlIixlLHtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOmksdmFsdWVzOm59KSxzPXRoaXMudmFsdWVzKHQ/MDoxKSxhIT09ITEmJnRoaXMudmFsdWVzKHQsaSkpKTppIT09dGhpcy52YWx1ZSgpJiYoYT10aGlzLl90cmlnZ2VyKCJzbGlkZSIsZSx7aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTppfSksYSE9PSExJiZ0aGlzLnZhbHVlKGkpKX0sX3N0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgaT17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYoaS52YWx1ZT10aGlzLnZhbHVlcyh0KSxpLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdG9wIixlLGkpfSxfY2hhbmdlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2tleVNsaWRpbmcmJiF0aGlzLl9tb3VzZVNsaWRpbmcpe3ZhciBpPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihpLnZhbHVlPXRoaXMudmFsdWVzKHQpLGkudmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX2xhc3RDaGFuZ2VkVmFsdWU9dCx0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLGUsaSl9fSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3RyaW1BbGlnblZhbHVlKGUpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLDApLHZvaWQgMCk6dGhpcy5fdmFsdWUoKX0sdmFsdWVzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlc1t0XT10aGlzLl90cmltQWxpZ25WYWx1ZShpKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCx0KSx2b2lkIDA7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3ZhbHVlcygpO2lmKCFlLmlzQXJyYXkoYXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/dGhpcy5fdmFsdWVzKHQpOnRoaXMudmFsdWUoKTtmb3Iocz10aGlzLm9wdGlvbnMudmFsdWVzLG49YXJndW1lbnRzWzBdLGE9MDtzLmxlbmd0aD5hO2ErPTEpc1thXT10aGlzLl90cmltQWxpZ25WYWx1ZShuW2FdKSx0aGlzLl9jaGFuZ2UobnVsbCxhKTt0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGkpe3ZhciBzLG49MDtzd2l0Y2goInJhbmdlIj09PXQmJnRoaXMub3B0aW9ucy5yYW5nZT09PSEwJiYoIm1pbiI9PT1pPyh0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdmFsdWVzKDApLHRoaXMub3B0aW9ucy52YWx1ZXM9bnVsbCk6Im1heCI9PT1pJiYodGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3ZhbHVlcyh0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aC0xKSx0aGlzLm9wdGlvbnMudmFsdWVzPW51bGwpKSxlLmlzQXJyYXkodGhpcy5vcHRpb25zLnZhbHVlcykmJihuPXRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKSwiZGlzYWJsZWQiPT09dCYmdGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIsISFpKSx0aGlzLl9zdXBlcih0LGkpLHQpe2Nhc2Uib3JpZW50YXRpb24iOnRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWwiKS5hZGRDbGFzcygidWktc2xpZGVyLSIrdGhpcy5vcmllbnRhdGlvbiksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5oYW5kbGVzLmNzcygiaG9yaXpvbnRhbCI9PT1pPyJib3R0b20iOiJsZWZ0IiwiIik7YnJlYWs7Y2FzZSJ2YWx1ZSI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2UidmFsdWVzIjpmb3IodGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSxzPTA7bj5zO3MrPTEpdGhpcy5fY2hhbmdlKG51bGwscyk7dGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlInN0ZXAiOmNhc2UibWluIjpjYXNlIm1heCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2UicmFuZ2UiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaCgpLHRoaXMuX2FuaW1hdGVPZmY9ITF9fSxfdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMudmFsdWU7cmV0dXJuIGU9dGhpcy5fdHJpbUFsaWduVmFsdWUoZSl9LF92YWx1ZXM6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQ9dGhpcy5vcHRpb25zLnZhbHVlc1tlXSx0PXRoaXMuX3RyaW1BbGlnblZhbHVlKHQpO2lmKHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKXtmb3IoaT10aGlzLm9wdGlvbnMudmFsdWVzLnNsaWNlKCkscz0wO2kubGVuZ3RoPnM7cys9MSlpW3NdPXRoaXMuX3RyaW1BbGlnblZhbHVlKGlbc10pO3JldHVybiBpfXJldHVybltdfSxfdHJpbUFsaWduVmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fdmFsdWVNaW4oKT49ZSlyZXR1cm4gdGhpcy5fdmFsdWVNaW4oKTtpZihlPj10aGlzLl92YWx1ZU1heCgpKXJldHVybiB0aGlzLl92YWx1ZU1heCgpO3ZhciB0PXRoaXMub3B0aW9ucy5zdGVwPjA/dGhpcy5vcHRpb25zLnN0ZXA6MSxpPShlLXRoaXMuX3ZhbHVlTWluKCkpJXQscz1lLWk7cmV0dXJuIDIqTWF0aC5hYnMoaSk+PXQmJihzKz1pPjA/dDotdCkscGFyc2VGbG9hdChzLnRvRml4ZWQoNSkpfSxfY2FsY3VsYXRlTmV3TWF4OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLm1heCx0PXRoaXMuX3ZhbHVlTWluKCksaT10aGlzLm9wdGlvbnMuc3RlcCxzPU1hdGguZmxvb3IoKyhlLXQpLnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpL2kpKmk7ZT1zK3QsdGhpcy5tYXg9cGFyc2VGbG9hdChlLnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpKX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gbnVsbCE9PXRoaXMub3B0aW9ucy5taW4mJihlPU1hdGgubWF4KGUsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSxlfSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9IiIrZSxpPXQuaW5kZXhPZigiLiIpO3JldHVybi0xPT09aT8wOnQubGVuZ3RoLWktMX0sX3ZhbHVlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW59LF92YWx1ZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sX3JlZnJlc2hWYWx1ZTpmdW5jdGlvbigpe3ZhciB0LGkscyxuLGEsbz10aGlzLm9wdGlvbnMucmFuZ2Uscj10aGlzLm9wdGlvbnMsaD10aGlzLGw9dGhpcy5fYW5pbWF0ZU9mZj8hMTpyLmFuaW1hdGUsdT17fTt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihzKXtpPTEwMCooKGgudmFsdWVzKHMpLWguX3ZhbHVlTWluKCkpLyhoLl92YWx1ZU1heCgpLWguX3ZhbHVlTWluKCkpKSx1WyJob3Jpem9udGFsIj09PWgub3JpZW50YXRpb24/ImxlZnQiOiJib3R0b20iXT1pKyIlIixlKHRoaXMpLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0odSxyLmFuaW1hdGUpLGgub3B0aW9ucy5yYW5nZT09PSEwJiYoImhvcml6b250YWwiPT09aC5vcmllbnRhdGlvbj8oMD09PXMmJmgucmFuZ2Uuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXSh7bGVmdDppKyIlIn0sci5hbmltYXRlKSwxPT09cyYmaC5yYW5nZVtsPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOmktdCsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpyLmFuaW1hdGV9KSk6KDA9PT1zJiZoLnJhbmdlLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0oe2JvdHRvbTppKyIlIn0sci5hbmltYXRlKSwxPT09cyYmaC5yYW5nZVtsPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDppLXQrIiUifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpKSx0PWl9KToocz10aGlzLnZhbHVlKCksbj10aGlzLl92YWx1ZU1pbigpLGE9dGhpcy5fdmFsdWVNYXgoKSxpPWEhPT1uPzEwMCooKHMtbikvKGEtbikpOjAsdVsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoiYm90dG9tIl09aSsiJSIsdGhpcy5oYW5kbGUuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXSh1LHIuYW5pbWF0ZSksIm1pbiI9PT1vJiYiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOmkrIiUifSxyLmFuaW1hdGUpLCJtYXgiPT09byYmImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZVtsPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOjEwMC1pKyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnIuYW5pbWF0ZX0pLCJtaW4iPT09byYmInZlcnRpY2FsIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0OmkrIiUifSxyLmFuaW1hdGUpLCJtYXgiPT09byYmInZlcnRpY2FsIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2VbbD8iYW5pbWF0ZSI6ImNzcyJdKHtoZWlnaHQ6MTAwLWkrIiUifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpfSxfaGFuZGxlRXZlbnRzOntrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG89ZSh0LnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6Y2FzZSBlLnVpLmtleUNvZGUuRU5EOmNhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOmNhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDppZih0LnByZXZlbnREZWZhdWx0KCksIXRoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSEwLGUodC50YXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSxpPXRoaXMuX3N0YXJ0KHQsbyksaT09PSExKSlyZXR1cm59c3dpdGNoKGE9dGhpcy5vcHRpb25zLnN0ZXAscz1uPXRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMudmFsdWVzKG8pOnRoaXMudmFsdWUoKSx0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6bj10aGlzLl92YWx1ZU1pbigpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVORDpuPXRoaXMuX3ZhbHVlTWF4KCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9VUDpuPXRoaXMuX3RyaW1BbGlnblZhbHVlKHMrKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvdGhpcy5udW1QYWdlcyk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOm49dGhpcy5fdHJpbUFsaWduVmFsdWUocy0odGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS90aGlzLm51bVBhZ2VzKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDpjYXNlIGUudWkua2V5Q29kZS5SSUdIVDppZihzPT09dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm47bj10aGlzLl90cmltQWxpZ25WYWx1ZShzK2EpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDppZihzPT09dGhpcy5fdmFsdWVNaW4oKSlyZXR1cm47bj10aGlzLl90cmltQWxpZ25WYWx1ZShzLWEpfXRoaXMuX3NsaWRlKHQsbyxuKX0sa2V5dXA6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0LnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpO3RoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX3N0b3AodCxpKSx0aGlzLl9jaGFuZ2UodCxpKSxlKHQudGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikpfX19KSxlLndpZGdldCgidWkuc3Bpbm5lciIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxpbnB1dD4iLHdpZGdldEV2ZW50UHJlZml4OiJzcGluIixvcHRpb25zOntjdWx0dXJlOm51bGwsaWNvbnM6e2Rvd246InVpLWljb24tdHJpYW5nbGUtMS1zIix1cDoidWktaWNvbi10cmlhbmdsZS0xLW4ifSxpbmNyZW1lbnRhbDohMCxtYXg6bnVsbCxtaW46bnVsbCxudW1iZXJGb3JtYXQ6bnVsbCxwYWdlOjEwLHN0ZXA6MSxjaGFuZ2U6bnVsbCxzcGluOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRPcHRpb24oIm1heCIsdGhpcy5vcHRpb25zLm1heCksdGhpcy5fc2V0T3B0aW9uKCJtaW4iLHRoaXMub3B0aW9ucy5taW4pLHRoaXMuX3NldE9wdGlvbigic3RlcCIsdGhpcy5vcHRpb25zLnN0ZXApLCIiIT09dGhpcy52YWx1ZSgpJiZ0aGlzLl92YWx1ZSh0aGlzLmVsZW1lbnQudmFsKCksITApLHRoaXMuX2RyYXcoKSx0aGlzLl9vbih0aGlzLl9ldmVudHMpLHRoaXMuX3JlZnJlc2goKSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfX0pfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXt9LGk9dGhpcy5lbGVtZW50O3JldHVybiBlLmVhY2goWyJtaW4iLCJtYXgiLCJzdGVwIl0sZnVuY3Rpb24oZSxzKXt2YXIgbj1pLmF0dHIocyk7dm9pZCAwIT09biYmbi5sZW5ndGgmJih0W3NdPW4pfSksdH0sX2V2ZW50czp7a2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLl9zdGFydChlKSYmdGhpcy5fa2V5ZG93bihlKSYmZS5wcmV2ZW50RGVmYXVsdCgpfSxrZXl1cDoiX3N0b3AiLGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz10aGlzLmVsZW1lbnQudmFsKCl9LGJsdXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2FuY2VsQmx1cj8oZGVsZXRlIHRoaXMuY2FuY2VsQmx1cix2b2lkIDApOih0aGlzLl9zdG9wKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMucHJldmlvdXMhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIsZSksdm9pZCAwKX0sbW91c2V3aGVlbDpmdW5jdGlvbihlLHQpe2lmKHQpe2lmKCF0aGlzLnNwaW5uaW5nJiYhdGhpcy5fc3RhcnQoZSkpcmV0dXJuITE7dGhpcy5fc3BpbigodD4wPzE6LTEpKnRoaXMub3B0aW9ucy5zdGVwLGUpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5tb3VzZXdoZWVsVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnNwaW5uaW5nJiZ0aGlzLl9zdG9wKGUpfSwxMDApLGUucHJldmVudERlZmF1bHQoKX19LCJtb3VzZWRvd24gLnVpLXNwaW5uZXItYnV0dG9uIjpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50O2V8fCh0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXN9KSl9dmFyIHM7cz10aGlzLmVsZW1lbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ/dGhpcy5wcmV2aW91czp0aGlzLmVsZW1lbnQudmFsKCksdC5wcmV2ZW50RGVmYXVsdCgpLGkuY2FsbCh0aGlzKSx0aGlzLmNhbmNlbEJsdXI9ITAsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyLGkuY2FsbCh0aGlzKX0pLHRoaXMuX3N0YXJ0KHQpIT09ITEmJnRoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCl9LCJtb3VzZXVwIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIiwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b24iOmZ1bmN0aW9uKHQpe3JldHVybiBlKHQuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpP3RoaXMuX3N0YXJ0KHQpPT09ITE/ITE6KHRoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCksdm9pZCAwKTp2b2lkIDB9LCJtb3VzZWxlYXZlIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIn0sX2RyYXc6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVpU3Bpbm5lcj10aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNwaW5uZXItaW5wdXQiKS5hdHRyKCJhdXRvY29tcGxldGUiLCJvZmYiKS53cmFwKHRoaXMuX3VpU3Bpbm5lckh0bWwoKSkucGFyZW50KCkuYXBwZW5kKHRoaXMuX2J1dHRvbkh0bWwoKSk7dGhpcy5lbGVtZW50LmF0dHIoInJvbGUiLCJzcGluYnV0dG9uIiksdGhpcy5idXR0b25zPWUuZmluZCgiLnVpLXNwaW5uZXItYnV0dG9uIikuYXR0cigidGFiSW5kZXgiLC0xKS5idXR0b24oKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLHRoaXMuYnV0dG9ucy5oZWlnaHQoKT5NYXRoLmNlaWwoLjUqZS5oZWlnaHQoKSkmJmUuaGVpZ2h0KCk+MCYmZS5oZWlnaHQoZS5oZWlnaHQoKSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmRpc2FibGUoKX0sX2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9ZS51aS5rZXlDb2RlO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2Ugcy5VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsMSx0KSwhMDtjYXNlIHMuRE9XTjpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsLTEsdCksITA7Y2FzZSBzLlBBR0VfVVA6cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLGkucGFnZSx0KSwhMDtjYXNlIHMuUEFHRV9ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtaS5wYWdlLHQpLCEwfXJldHVybiExfSxfdWlTcGlubmVySHRtbDpmdW5jdGlvbigpe3JldHVybiI8c3BhbiBjbGFzcz0ndWktc3Bpbm5lciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCc+PC9zcGFuPiJ9LF9idXR0b25IdG1sOmZ1bmN0aW9uKCl7cmV0dXJuIjxhIGNsYXNzPSd1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLXVwIHVpLWNvcm5lci10cic+PHNwYW4gY2xhc3M9J3VpLWljb24gIit0aGlzLm9wdGlvbnMuaWNvbnMudXArIic+JiM5NjUwOzwvc3Bhbj4iKyI8L2E+IisiPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItZG93biB1aS1jb3JuZXItYnInPiIrIjxzcGFuIGNsYXNzPSd1aS1pY29uICIrdGhpcy5vcHRpb25zLmljb25zLmRvd24rIic+JiM5NjYwOzwvc3Bhbj4iKyI8L2E+In0sX3N0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNwaW5uaW5nfHx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSkhPT0hMT8odGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLHRoaXMuc3Bpbm5pbmc9ITAsITApOiExfSxfcmVwZWF0OmZ1bmN0aW9uKGUsdCxpKXtlPWV8fDUwMCxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX3JlcGVhdCg0MCx0LGkpfSxlKSx0aGlzLl9zcGluKHQqdGhpcy5vcHRpb25zLnN0ZXAsaSl9LF9zcGluOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy52YWx1ZSgpfHwwO3RoaXMuY291bnRlcnx8KHRoaXMuY291bnRlcj0xKSxpPXRoaXMuX2FkanVzdFZhbHVlKGkrZSp0aGlzLl9pbmNyZW1lbnQodGhpcy5jb3VudGVyKSksdGhpcy5zcGlubmluZyYmdGhpcy5fdHJpZ2dlcigic3BpbiIsdCx7dmFsdWU6aX0pPT09ITF8fCh0aGlzLl92YWx1ZShpKSx0aGlzLmNvdW50ZXIrKyl9LF9pbmNyZW1lbnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLmluY3JlbWVudGFsO3JldHVybiBpP2UuaXNGdW5jdGlvbihpKT9pKHQpOk1hdGguZmxvb3IodCp0KnQvNWU0LXQqdC81MDArMTcqdC8yMDArMSk6MX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gbnVsbCE9PXRoaXMub3B0aW9ucy5taW4mJihlPU1hdGgubWF4KGUsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSxlfSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9IiIrZSxpPXQuaW5kZXhPZigiLiIpO3JldHVybi0xPT09aT8wOnQubGVuZ3RoLWktMX0sX2FkanVzdFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LGkscz10aGlzLm9wdGlvbnM7cmV0dXJuIHQ9bnVsbCE9PXMubWluP3MubWluOjAsaT1lLXQsaT1NYXRoLnJvdW5kKGkvcy5zdGVwKSpzLnN0ZXAsZT10K2ksZT1wYXJzZUZsb2F0KGUudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpLG51bGwhPT1zLm1heCYmZT5zLm1heD9zLm1heDpudWxsIT09cy5taW4mJnMubWluPmU/cy5taW46ZX0sX3N0b3A6ZnVuY3Rpb24oZSl7dGhpcy5zcGlubmluZyYmKGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMuY291bnRlcj0wLHRoaXMuc3Bpbm5pbmc9ITEsdGhpcy5fdHJpZ2dlcigic3RvcCIsZSkpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoImN1bHR1cmUiPT09ZXx8Im51bWJlckZvcm1hdCI9PT1lKXt2YXIgaT10aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpO3JldHVybiB0aGlzLm9wdGlvbnNbZV09dCx0aGlzLmVsZW1lbnQudmFsKHRoaXMuX2Zvcm1hdChpKSksdm9pZCAwfSgibWF4Ij09PWV8fCJtaW4iPT09ZXx8InN0ZXAiPT09ZSkmJiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dGhpcy5fcGFyc2UodCkpLCJpY29ucyI9PT1lJiYodGhpcy5idXR0b25zLmZpcnN0KCkuZmluZCgiLnVpLWljb24iKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbnMudXApLmFkZENsYXNzKHQudXApLHRoaXMuYnV0dG9ucy5sYXN0KCkuZmluZCgiLnVpLWljb24iKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbnMuZG93bikuYWRkQ2xhc3ModC5kb3duKSksdGhpcy5fc3VwZXIoZSx0KSwiZGlzYWJsZWQiPT09ZSYmKHRoaXMud2lkZ2V0KCkudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiwhIXQpLHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsISF0KSx0aGlzLmJ1dHRvbnMuYnV0dG9uKHQ/ImRpc2FibGUiOiJlbmFibGUiKSl9LF9zZXRPcHRpb25zOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3VwZXIoZSl9KSxfcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWUmJihlPXdpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLnBhcnNlRmxvYXQoZSwxMCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6K2UpLCIiPT09ZXx8aXNOYU4oZSk/bnVsbDplCn0sX2Zvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4iIj09PWU/IiI6d2luZG93Lkdsb2JhbGl6ZSYmdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdD9HbG9iYWxpemUuZm9ybWF0KGUsdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6ZX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYXR0cih7ImFyaWEtdmFsdWVtaW4iOnRoaXMub3B0aW9ucy5taW4sImFyaWEtdmFsdWVtYXgiOnRoaXMub3B0aW9ucy5tYXgsImFyaWEtdmFsdWVub3ciOnRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSl9KX0saXNWYWxpZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmFsdWUoKTtyZXR1cm4gbnVsbD09PWU/ITE6ZT09PXRoaXMuX2FkanVzdFZhbHVlKGUpfSxfdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgaTsiIiE9PWUmJihpPXRoaXMuX3BhcnNlKGUpLG51bGwhPT1pJiYodHx8KGk9dGhpcy5fYWRqdXN0VmFsdWUoaSkpLGU9dGhpcy5fZm9ybWF0KGkpKSksdGhpcy5lbGVtZW50LnZhbChlKSx0aGlzLl9yZWZyZXNoKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zcGlubmVyLWlucHV0IikucHJvcCgiZGlzYWJsZWQiLCExKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1pbiIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtYXgiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy51aVNwaW5uZXIucmVwbGFjZVdpdGgodGhpcy5lbGVtZW50KX0sc3RlcFVwOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcFVwKGUpfSksX3N0ZXBVcDpmdW5jdGlvbihlKXt0aGlzLl9zdGFydCgpJiYodGhpcy5fc3BpbigoZXx8MSkqdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3N0b3AoKSl9LHN0ZXBEb3duOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcERvd24oZSl9KSxfc3RlcERvd246ZnVuY3Rpb24oZSl7dGhpcy5fc3RhcnQoKSYmKHRoaXMuX3NwaW4oKGV8fDEpKi10aGlzLm9wdGlvbnMuc3RlcCksdGhpcy5fc3RvcCgpKX0scGFnZVVwOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcFVwKChlfHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSxwYWdlRG93bjpzKGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBEb3duKChlfHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0aGlzLl92YWx1ZSkuY2FsbCh0aGlzLGUpLHZvaWQgMCk6dGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWlTcGlubmVyfX0pLGUud2lkZ2V0KCJ1aS50YWJzIix7dmVyc2lvbjoiMS4xMS40IixkZWxheTozMDAsb3B0aW9uczp7YWN0aXZlOm51bGwsY29sbGFwc2libGU6ITEsZXZlbnQ6ImNsaWNrIixoZWlnaHRTdHlsZToiY29udGVudCIsaGlkZTpudWxsLHNob3c6bnVsbCxhY3RpdmF0ZTpudWxsLGJlZm9yZUFjdGl2YXRlOm51bGwsYmVmb3JlTG9hZDpudWxsLGxvYWQ6bnVsbH0sX2lzTG9jYWw6ZnVuY3Rpb24oKXt2YXIgZT0vIy4qJC87cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpLHM7dD10LmNsb25lTm9kZSghMSksaT10LmhyZWYucmVwbGFjZShlLCIiKSxzPWxvY2F0aW9uLmhyZWYucmVwbGFjZShlLCIiKTt0cnl7aT1kZWNvZGVVUklDb21wb25lbnQoaSl9Y2F0Y2gobil7fXRyeXtzPWRlY29kZVVSSUNvbXBvbmVudChzKX1jYXRjaChuKXt9cmV0dXJuIHQuaGFzaC5sZW5ndGg+MSYmaT09PXN9fSgpLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9dGhpcy5vcHRpb25zO3RoaXMucnVubmluZz0hMSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS50b2dnbGVDbGFzcygidWktdGFicy1jb2xsYXBzaWJsZSIsaS5jb2xsYXBzaWJsZSksdGhpcy5fcHJvY2Vzc1RhYnMoKSxpLmFjdGl2ZT10aGlzLl9pbml0aWFsQWN0aXZlKCksZS5pc0FycmF5KGkuZGlzYWJsZWQpJiYoaS5kaXNhYmxlZD1lLnVuaXF1ZShpLmRpc2FibGVkLmNvbmNhdChlLm1hcCh0aGlzLnRhYnMuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihlKXtyZXR1cm4gdC50YWJzLmluZGV4KGUpfSkpKS5zb3J0KCkpLHRoaXMuYWN0aXZlPXRoaXMub3B0aW9ucy5hY3RpdmUhPT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLl9maW5kQWN0aXZlKGkuYWN0aXZlKTplKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMuYWN0aXZlLmxlbmd0aCYmdGhpcy5sb2FkKGkuYWN0aXZlKX0sX2luaXRpYWxBY3RpdmU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYWN0aXZlLGk9dGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlLHM9bG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7cmV0dXJuIG51bGw9PT10JiYocyYmdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oaSxuKXtyZXR1cm4gZShuKS5hdHRyKCJhcmlhLWNvbnRyb2xzIik9PT1zPyh0PWksITEpOnZvaWQgMH0pLG51bGw9PT10JiYodD10aGlzLnRhYnMuaW5kZXgodGhpcy50YWJzLmZpbHRlcigiLnVpLXRhYnMtYWN0aXZlIikpKSwobnVsbD09PXR8fC0xPT09dCkmJih0PXRoaXMudGFicy5sZW5ndGg/MDohMSkpLHQhPT0hMSYmKHQ9dGhpcy50YWJzLmluZGV4KHRoaXMudGFicy5lcSh0KSksLTE9PT10JiYodD1pPyExOjApKSwhaSYmdD09PSExJiZ0aGlzLmFuY2hvcnMubGVuZ3RoJiYodD0wKSx0fSxfZ2V0Q3JlYXRlRXZlbnREYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3RhYjp0aGlzLmFjdGl2ZSxwYW5lbDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpOmUoKX19LF90YWJLZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpPWUodGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KS5jbG9zZXN0KCJsaSIpLHM9dGhpcy50YWJzLmluZGV4KGkpLG49ITA7aWYoIXRoaXMuX2hhbmRsZVBhZ2VOYXYodCkpe3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046cysrO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6bj0hMSxzLS07YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnM9dGhpcy5hbmNob3JzLmxlbmd0aC0xO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6cz0wO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlNQQUNFOnJldHVybiB0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdGhpcy5fYWN0aXZhdGUocyksdm9pZCAwO2Nhc2UgZS51aS5rZXlDb2RlLkVOVEVSOnJldHVybiB0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdGhpcy5fYWN0aXZhdGUocz09PXRoaXMub3B0aW9ucy5hY3RpdmU/ITE6cyksdm9pZCAwO2RlZmF1bHQ6cmV0dXJufXQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSxzPXRoaXMuX2ZvY3VzTmV4dFRhYihzLG4pLHQuY3RybEtleXx8dC5tZXRhS2V5fHwoaS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx0aGlzLnRhYnMuZXEocykuYXR0cigiYXJpYS1zZWxlY3RlZCIsInRydWUiKSx0aGlzLmFjdGl2YXRpbmc9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLm9wdGlvbigiYWN0aXZlIixzKX0sdGhpcy5kZWxheSkpfX0sX3BhbmVsS2V5ZG93bjpmdW5jdGlvbih0KXt0aGlzLl9oYW5kbGVQYWdlTmF2KHQpfHx0LmN0cmxLZXkmJnQua2V5Q29kZT09PWUudWkua2V5Q29kZS5VUCYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZS5mb2N1cygpKX0sX2hhbmRsZVBhZ2VOYXY6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWx0S2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuUEFHRV9VUD8odGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUtMSwhMSkpLCEwKTp0LmFsdEtleSYmdC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlBBR0VfRE9XTj8odGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUrMSwhMCkpLCEwKTp2b2lkIDB9LF9maW5kTmV4dFRhYjpmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHMoKXtyZXR1cm4gdD5uJiYodD0wKSwwPnQmJih0PW4pLHR9Zm9yKHZhciBuPXRoaXMudGFicy5sZW5ndGgtMTstMSE9PWUuaW5BcnJheShzKCksdGhpcy5vcHRpb25zLmRpc2FibGVkKTspdD1pP3QrMTp0LTE7cmV0dXJuIHR9LF9mb2N1c05leHRUYWI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT10aGlzLl9maW5kTmV4dFRhYihlLHQpLHRoaXMudGFicy5lcShlKS5mb2N1cygpLGV9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4iYWN0aXZlIj09PWU/KHRoaXMuX2FjdGl2YXRlKHQpLHZvaWQgMCk6ImRpc2FibGVkIj09PWU/KHRoaXMuX3NldHVwRGlzYWJsZWQodCksdm9pZCAwKToodGhpcy5fc3VwZXIoZSx0KSwiY29sbGFwc2libGUiPT09ZSYmKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktdGFicy1jb2xsYXBzaWJsZSIsdCksdHx8dGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExfHx0aGlzLl9hY3RpdmF0ZSgwKSksImV2ZW50Ij09PWUmJnRoaXMuX3NldHVwRXZlbnRzKHQpLCJoZWlnaHRTdHlsZSI9PT1lJiZ0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHQpLHZvaWQgMCl9LF9zYW5pdGl6ZVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiBlP2UucmVwbGFjZSgvWyEiJCUmJygpKissLlwvOjs8PT4/QFxbXF1cXmB7fH1+XS9nLCJcXCQmIik6IiJ9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsaT10aGlzLnRhYmxpc3QuY2hpbGRyZW4oIjpoYXMoYVtocmVmXSkiKTt0LmRpc2FibGVkPWUubWFwKGkuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihlKXtyZXR1cm4gaS5pbmRleChlKX0pLHRoaXMuX3Byb2Nlc3NUYWJzKCksdC5hY3RpdmUhPT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLmFjdGl2ZS5sZW5ndGgmJiFlLmNvbnRhaW5zKHRoaXMudGFibGlzdFswXSx0aGlzLmFjdGl2ZVswXSk/dGhpcy50YWJzLmxlbmd0aD09PXQuZGlzYWJsZWQubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZpbmROZXh0VGFiKE1hdGgubWF4KDAsdC5hY3RpdmUtMSksITEpKTp0LmFjdGl2ZT10aGlzLnRhYnMuaW5kZXgodGhpcy5hY3RpdmUpOih0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpLHRoaXMuX3JlZnJlc2goKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9zZXR1cERpc2FibGVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fc2V0dXBFdmVudHModGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSksdGhpcy50YWJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJmYWxzZSIsImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsdGFiSW5kZXg6LTF9KSx0aGlzLnBhbmVscy5ub3QodGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpKS5oaWRlKCkuYXR0cih7ImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSx0aGlzLmFjdGl2ZS5sZW5ndGg/KHRoaXMuYWN0aXZlLmFkZENsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pLHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKS5zaG93KCkuYXR0cih7ImFyaWEtaGlkZGVuIjoiZmFsc2UifSkpOnRoaXMudGFicy5lcSgwKS5hdHRyKCJ0YWJJbmRleCIsMCl9LF9wcm9jZXNzVGFiczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT10aGlzLnRhYnMscz10aGlzLmFuY2hvcnMsbj10aGlzLnBhbmVsczt0aGlzLnRhYmxpc3Q9dGhpcy5fZ2V0TGlzdCgpLmFkZENsYXNzKCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLmF0dHIoInJvbGUiLCJ0YWJsaXN0IikuZGVsZWdhdGUoIj4gbGkiLCJtb3VzZWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24odCl7ZSh0aGlzKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnQucHJldmVudERlZmF1bHQoKX0pLmRlbGVnYXRlKCIudWktdGFicy1hbmNob3IiLCJmb2N1cyIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2UodGhpcykuY2xvc2VzdCgibGkiKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnRoaXMuYmx1cigpfSksdGhpcy50YWJzPXRoaXMudGFibGlzdC5maW5kKCI+IGxpOmhhcyhhW2hyZWZdKSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AiKS5hdHRyKHtyb2xlOiJ0YWIiLHRhYkluZGV4Oi0xfSksdGhpcy5hbmNob3JzPXRoaXMudGFicy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSgiYSIsdGhpcylbMF19KS5hZGRDbGFzcygidWktdGFicy1hbmNob3IiKS5hdHRyKHtyb2xlOiJwcmVzZW50YXRpb24iLHRhYkluZGV4Oi0xfSksdGhpcy5wYW5lbHM9ZSgpLHRoaXMuYW5jaG9ycy5lYWNoKGZ1bmN0aW9uKGkscyl7dmFyIG4sYSxvLHI9ZShzKS51bmlxdWVJZCgpLmF0dHIoImlkIiksaD1lKHMpLmNsb3Nlc3QoImxpIiksbD1oLmF0dHIoImFyaWEtY29udHJvbHMiKTt0Ll9pc0xvY2FsKHMpPyhuPXMuaGFzaCxvPW4uc3Vic3RyaW5nKDEpLGE9dC5lbGVtZW50LmZpbmQodC5fc2FuaXRpemVTZWxlY3RvcihuKSkpOihvPWguYXR0cigiYXJpYS1jb250cm9scyIpfHxlKHt9KS51bmlxdWVJZCgpWzBdLmlkLG49IiMiK28sYT10LmVsZW1lbnQuZmluZChuKSxhLmxlbmd0aHx8KGE9dC5fY3JlYXRlUGFuZWwobyksYS5pbnNlcnRBZnRlcih0LnBhbmVsc1tpLTFdfHx0LnRhYmxpc3QpKSxhLmF0dHIoImFyaWEtbGl2ZSIsInBvbGl0ZSIpKSxhLmxlbmd0aCYmKHQucGFuZWxzPXQucGFuZWxzLmFkZChhKSksbCYmaC5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiLGwpLGguYXR0cih7ImFyaWEtY29udHJvbHMiOm8sImFyaWEtbGFiZWxsZWRieSI6cn0pLGEuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixyKX0pLHRoaXMucGFuZWxzLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5hdHRyKCJyb2xlIiwidGFicGFuZWwiKSxpJiYodGhpcy5fb2ZmKGkubm90KHRoaXMudGFicykpLHRoaXMuX29mZihzLm5vdCh0aGlzLmFuY2hvcnMpKSx0aGlzLl9vZmYobi5ub3QodGhpcy5wYW5lbHMpKSl9LF9nZXRMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFibGlzdHx8dGhpcy5lbGVtZW50LmZpbmQoIm9sLHVsIikuZXEoMCl9LF9jcmVhdGVQYW5lbDpmdW5jdGlvbih0KXtyZXR1cm4gZSgiPGRpdj4iKS5hdHRyKCJpZCIsdCkuYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmRhdGEoInVpLXRhYnMtZGVzdHJveSIsITApfSxfc2V0dXBEaXNhYmxlZDpmdW5jdGlvbih0KXtlLmlzQXJyYXkodCkmJih0Lmxlbmd0aD90Lmxlbmd0aD09PXRoaXMuYW5jaG9ycy5sZW5ndGgmJih0PSEwKTp0PSExKTtmb3IodmFyIGkscz0wO2k9dGhpcy50YWJzW3NdO3MrKyl0PT09ITB8fC0xIT09ZS5pbkFycmF5KHMsdCk/ZShpKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpOmUoaSkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpO3RoaXMub3B0aW9ucy5kaXNhYmxlZD10fSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24odCl7dmFyIGk9e307dCYmZS5lYWNoKHQuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2lbdF09Il9ldmVudEhhbmRsZXIifSksdGhpcy5fb2ZmKHRoaXMuYW5jaG9ycy5hZGQodGhpcy50YWJzKS5hZGQodGhpcy5wYW5lbHMpKSx0aGlzLl9vbighMCx0aGlzLmFuY2hvcnMse2NsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX19KSx0aGlzLl9vbih0aGlzLmFuY2hvcnMsaSksdGhpcy5fb24odGhpcy50YWJzLHtrZXlkb3duOiJfdGFiS2V5ZG93biJ9KSx0aGlzLl9vbih0aGlzLnBhbmVscyx7a2V5ZG93bjoiX3BhbmVsS2V5ZG93biJ9KSx0aGlzLl9mb2N1c2FibGUodGhpcy50YWJzKSx0aGlzLl9ob3ZlcmFibGUodGhpcy50YWJzKX0sX3NldHVwSGVpZ2h0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGkscz10aGlzLmVsZW1lbnQucGFyZW50KCk7ImZpbGwiPT09dD8oaT1zLmhlaWdodCgpLGktPXRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmVsZW1lbnQuc2libGluZ3MoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscz10LmNzcygicG9zaXRpb24iKTsiYWJzb2x1dGUiIT09cyYmImZpeGVkIiE9PXMmJihpLT10Lm91dGVySGVpZ2h0KCEwKSl9KSx0aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5ub3QodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtpLT1lKHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLGktZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOiJhdXRvIj09PXQmJihpPTAsdGhpcy5wYW5lbHMuZWFjaChmdW5jdGlvbigpe2k9TWF0aC5tYXgoaSxlKHRoaXMpLmhlaWdodCgiIikuaGVpZ2h0KCkpfSkuaGVpZ2h0KGkpKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMscz10aGlzLmFjdGl2ZSxuPWUodC5jdXJyZW50VGFyZ2V0KSxhPW4uY2xvc2VzdCgibGkiKSxvPWFbMF09PT1zWzBdLHI9byYmaS5jb2xsYXBzaWJsZSxoPXI/ZSgpOnRoaXMuX2dldFBhbmVsRm9yVGFiKGEpLGw9cy5sZW5ndGg/dGhpcy5fZ2V0UGFuZWxGb3JUYWIocyk6ZSgpLHU9e29sZFRhYjpzLG9sZFBhbmVsOmwsbmV3VGFiOnI/ZSgpOmEsbmV3UGFuZWw6aH07dC5wcmV2ZW50RGVmYXVsdCgpLGEuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIil8fGEuaGFzQ2xhc3MoInVpLXRhYnMtbG9hZGluZyIpfHx0aGlzLnJ1bm5pbmd8fG8mJiFpLmNvbGxhcHNpYmxlfHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVBY3RpdmF0ZSIsdCx1KT09PSExfHwoaS5hY3RpdmU9cj8hMTp0aGlzLnRhYnMuaW5kZXgoYSksdGhpcy5hY3RpdmU9bz9lKCk6YSx0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSxsLmxlbmd0aHx8aC5sZW5ndGh8fGUuZXJyb3IoImpRdWVyeSBVSSBUYWJzOiBNaXNtYXRjaGluZyBmcmFnbWVudCBpZGVudGlmaWVyLiIpLGgubGVuZ3RoJiZ0aGlzLmxvYWQodGhpcy50YWJzLmluZGV4KGEpLHQpLHRoaXMuX3RvZ2dsZSh0LHUpKX0sX3RvZ2dsZTpmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHMoKXthLnJ1bm5pbmc9ITEsYS5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsaSl9ZnVuY3Rpb24gbigpe2kubmV3VGFiLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLG8ubGVuZ3RoJiZhLm9wdGlvbnMuc2hvdz9hLl9zaG93KG8sYS5vcHRpb25zLnNob3cscyk6KG8uc2hvdygpLHMoKSl9dmFyIGE9dGhpcyxvPWkubmV3UGFuZWwscj1pLm9sZFBhbmVsO3RoaXMucnVubmluZz0hMCxyLmxlbmd0aCYmdGhpcy5vcHRpb25zLmhpZGU/dGhpcy5faGlkZShyLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7aS5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksbigpfSk6KGkub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHIuaGlkZSgpLG4oKSksci5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSxpLm9sZFRhYi5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6ImZhbHNlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pLG8ubGVuZ3RoJiZyLmxlbmd0aD9pLm9sZFRhYi5hdHRyKCJ0YWJJbmRleCIsLTEpOm8ubGVuZ3RoJiZ0aGlzLnRhYnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT1lKHRoaXMpLmF0dHIoInRhYkluZGV4Iil9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLG8uYXR0cigiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLGkubmV3VGFiLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsImFyaWEtZXhwYW5kZWQiOiJ0cnVlIix0YWJJbmRleDowfSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgaSxzPXRoaXMuX2ZpbmRBY3RpdmUodCk7c1swXSE9PXRoaXMuYWN0aXZlWzBdJiYocy5sZW5ndGh8fChzPXRoaXMuYWN0aXZlKSxpPXMuZmluZCgiLnVpLXRhYnMtYW5jaG9yIilbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6ZS5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gdD09PSExP2UoKTp0aGlzLnRhYnMuZXEodCl9LF9nZXRJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXRoaXMuYW5jaG9ycy5pbmRleCh0aGlzLmFuY2hvcnMuZmlsdGVyKCJbaHJlZiQ9JyIrZSsiJ10iKSkpLGV9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIHVpLXRhYnMtY29sbGFwc2libGUiKSx0aGlzLnRhYmxpc3QucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuYW5jaG9ycy5yZW1vdmVDbGFzcygidWktdGFicy1hbmNob3IiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVVbmlxdWVJZCgpLHRoaXMudGFibGlzdC51bmJpbmQodGhpcy5ldmVudE5hbWVzcGFjZSksdGhpcy50YWJzLmFkZCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2UuZGF0YSh0aGlzLCJ1aS10YWJzLWRlc3Ryb3kiKT9lKHRoaXMpLnJlbW92ZSgpOmUodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktc3RhdGUtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIHVpLWNvcm5lci10b3AgdWktY29ybmVyLWJvdHRvbSB1aS13aWRnZXQtY29udGVudCB1aS10YWJzLWFjdGl2ZSB1aS10YWJzLXBhbmVsIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxpdmUiKS5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigicm9sZSIpfSksdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiKTtpP3QuYXR0cigiYXJpYS1jb250cm9scyIsaSkucmVtb3ZlRGF0YSgidWktdGFicy1hcmlhLWNvbnRyb2xzIik6dC5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIil9KSx0aGlzLnBhbmVscy5zaG93KCksImNvbnRlbnQiIT09dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlJiZ0aGlzLnBhbmVscy5jc3MoImhlaWdodCIsIiIpfSxlbmFibGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLmRpc2FibGVkO2khPT0hMSYmKHZvaWQgMD09PXQ/aT0hMToodD10aGlzLl9nZXRJbmRleCh0KSxpPWUuaXNBcnJheShpKT9lLm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dD9lOm51bGx9KTplLm1hcCh0aGlzLnRhYnMsZnVuY3Rpb24oZSxpKXtyZXR1cm4gaSE9PXQ/aTpudWxsfSkpLHRoaXMuX3NldHVwRGlzYWJsZWQoaSkpfSxkaXNhYmxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5kaXNhYmxlZDtpZihpIT09ITApe2lmKHZvaWQgMD09PXQpaT0hMDtlbHNle2lmKHQ9dGhpcy5fZ2V0SW5kZXgodCksLTEhPT1lLmluQXJyYXkodCxpKSlyZXR1cm47aT1lLmlzQXJyYXkoaSk/ZS5tZXJnZShbdF0saSkuc29ydCgpOlt0XX10aGlzLl9zZXR1cERpc2FibGVkKGkpfX0sbG9hZDpmdW5jdGlvbih0LGkpe3Q9dGhpcy5fZ2V0SW5kZXgodCk7dmFyIHM9dGhpcyxuPXRoaXMudGFicy5lcSh0KSxhPW4uZmluZCgiLnVpLXRhYnMtYW5jaG9yIiksbz10aGlzLl9nZXRQYW5lbEZvclRhYihuKSxyPXt0YWI6bixwYW5lbDpvfSxoPWZ1bmN0aW9uKGUsdCl7ImFib3J0Ij09PXQmJnMucGFuZWxzLnN0b3AoITEsITApLG4ucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbG9hZGluZyIpLG8ucmVtb3ZlQXR0cigiYXJpYS1idXN5IiksZT09PXMueGhyJiZkZWxldGUgcy54aHJ9O3RoaXMuX2lzTG9jYWwoYVswXSl8fCh0aGlzLnhocj1lLmFqYXgodGhpcy5fYWpheFNldHRpbmdzKGEsaSxyKSksdGhpcy54aHImJiJjYW5jZWxlZCIhPT10aGlzLnhoci5zdGF0dXNUZXh0JiYobi5hZGRDbGFzcygidWktdGFicy1sb2FkaW5nIiksby5hdHRyKCJhcmlhLWJ1c3kiLCJ0cnVlIiksdGhpcy54aHIuZG9uZShmdW5jdGlvbihlLHQsbil7c2V0VGltZW91dChmdW5jdGlvbigpe28uaHRtbChlKSxzLl90cmlnZ2VyKCJsb2FkIixpLHIpLGgobix0KX0sMSl9KS5mYWlsKGZ1bmN0aW9uKGUsdCl7c2V0VGltZW91dChmdW5jdGlvbigpe2goZSx0KX0sMSl9KSkpfSxfYWpheFNldHRpbmdzOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj10aGlzO3JldHVybnt1cmw6dC5hdHRyKCJocmVmIiksYmVmb3JlU2VuZDpmdW5jdGlvbih0LGEpe3JldHVybiBuLl90cmlnZ2VyKCJiZWZvcmVMb2FkIixpLGUuZXh0ZW5kKHtqcVhIUjp0LGFqYXhTZXR0aW5nczphfSxzKSl9fX0sX2dldFBhbmVsRm9yVGFiOmZ1bmN0aW9uKHQpe3ZhciBpPWUodCkuYXR0cigiYXJpYS1jb250cm9scyIpO3JldHVybiB0aGlzLmVsZW1lbnQuZmluZCh0aGlzLl9zYW5pdGl6ZVNlbGVjdG9yKCIjIitpKSl9fSksZS53aWRnZXQoInVpLnRvb2x0aXAiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2NvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLmF0dHIoInRpdGxlIil8fCIiO3JldHVybiBlKCI8YT4iKS50ZXh0KHQpLmh0bWwoKX0saGlkZTohMCxpdGVtczoiW3RpdGxlXTpub3QoW2Rpc2FibGVkXSkiLHBvc2l0aW9uOntteToibGVmdCB0b3ArMTUiLGF0OiJsZWZ0IGJvdHRvbSIsY29sbGlzaW9uOiJmbGlwZml0IGZsaXAifSxzaG93OiEwLHRvb2x0aXBDbGFzczpudWxsLHRyYWNrOiExLGNsb3NlOm51bGwsb3BlbjpudWxsfSxfYWRkRGVzY3JpYmVkQnk6ZnVuY3Rpb24odCxpKXt2YXIgcz0odC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iil8fCIiKS5zcGxpdCgvXHMrLyk7cy5wdXNoKGkpLHQuZGF0YSgidWktdG9vbHRpcC1pZCIsaSkuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsZS50cmltKHMuam9pbigiICIpKSl9LF9yZW1vdmVEZXNjcmliZWRCeTpmdW5jdGlvbih0KXt2YXIgaT10LmRhdGEoInVpLXRvb2x0aXAtaWQiKSxzPSh0LmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKXx8IiIpLnNwbGl0KC9ccysvKSxuPWUuaW5BcnJheShpLHMpOy0xIT09biYmcy5zcGxpY2UobiwxKSx0LnJlbW92ZURhdGEoInVpLXRvb2x0aXAtaWQiKSxzPWUudHJpbShzLmpvaW4oIiAiKSkscz90LmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLHMpOnQucmVtb3ZlQXR0cigiYXJpYS1kZXNjcmliZWRieSIpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fb24oe21vdXNlb3Zlcjoib3BlbiIsZm9jdXNpbjoib3BlbiJ9KSx0aGlzLnRvb2x0aXBzPXt9LHRoaXMucGFyZW50cz17fSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGUoKSx0aGlzLmxpdmVSZWdpb249ZSgiPGRpdj4iKS5hdHRyKHtyb2xlOiJsb2ciLCJhcmlhLWxpdmUiOiJhc3NlcnRpdmUiLCJhcmlhLXJlbGV2YW50IjoiYWRkaXRpb25zIn0pLmFkZENsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKS5hcHBlbmRUbyh0aGlzLmRvY3VtZW50WzBdLmJvZHkpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsaSl7dmFyIHM9dGhpcztyZXR1cm4iZGlzYWJsZWQiPT09dD8odGhpc1tpPyJfZGlzYWJsZSI6Il9lbmFibGUiXSgpLHRoaXMub3B0aW9uc1t0XT1pLHZvaWQgMCk6KHRoaXMuX3N1cGVyKHQsaSksImNvbnRlbnQiPT09dCYmZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oZSx0KXtzLl91cGRhdGVDb250ZW50KHQuZWxlbWVudCl9KSx2b2lkIDApfSxfZGlzYWJsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7ZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oaSxzKXt2YXIgbj1lLkV2ZW50KCJibHVyIik7bi50YXJnZXQ9bi5jdXJyZW50VGFyZ2V0PXMuZWxlbWVudFswXSx0LmNsb3NlKG4sITApfSksdGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5pcygiW3RpdGxlXSIpJiZ0LmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiLHQuYXR0cigidGl0bGUiKSkucmVtb3ZlQXR0cigidGl0bGUiKX0pfSxfZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikmJnQuYXR0cigidGl0bGUiLHQuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKX0pfSxvcGVuOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz1lKHQ/dC50YXJnZXQ6dGhpcy5lbGVtZW50KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5pdGVtcyk7cy5sZW5ndGgmJiFzLmRhdGEoInVpLXRvb2x0aXAtaWQiKSYmKHMuYXR0cigidGl0bGUiKSYmcy5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIixzLmF0dHIoInRpdGxlIikpLHMuZGF0YSgidWktdG9vbHRpcC1vcGVuIiwhMCksdCYmIm1vdXNlb3ZlciI9PT10LnR5cGUmJnMucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxzPWUodGhpcyk7cy5kYXRhKCJ1aS10b29sdGlwLW9wZW4iKSYmKHQ9ZS5FdmVudCgiYmx1ciIpLHQudGFyZ2V0PXQuY3VycmVudFRhcmdldD10aGlzLGkuY2xvc2UodCwhMCkpLHMuYXR0cigidGl0bGUiKSYmKHMudW5pcXVlSWQoKSxpLnBhcmVudHNbdGhpcy5pZF09e2VsZW1lbnQ6dGhpcyx0aXRsZTpzLmF0dHIoInRpdGxlIil9LHMuYXR0cigidGl0bGUiLCIiKSl9KSx0aGlzLl9yZWdpc3RlckNsb3NlSGFuZGxlcnModCxzKSx0aGlzLl91cGRhdGVDb250ZW50KHMsdCkpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbihlLHQpe3ZhciBpLHM9dGhpcy5vcHRpb25zLmNvbnRlbnQsbj10aGlzLGE9dD90LnR5cGU6bnVsbDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHM/dGhpcy5fb3Blbih0LGUscyk6KGk9cy5jYWxsKGVbMF0sZnVuY3Rpb24oaSl7bi5fZGVsYXkoZnVuY3Rpb24oKXtlLmRhdGEoInVpLXRvb2x0aXAtb3BlbiIpJiYodCYmKHQudHlwZT1hKSx0aGlzLl9vcGVuKHQsZSxpKSl9KX0pLGkmJnRoaXMuX29wZW4odCxlLGkpLHZvaWQgMCl9LF9vcGVuOmZ1bmN0aW9uKHQsaSxzKXtmdW5jdGlvbiBuKGUpe2wub2Y9ZSxvLmlzKCI6aGlkZGVuIil8fG8ucG9zaXRpb24obCl9dmFyIGEsbyxyLGgsbD1lLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pO2lmKHMpe2lmKGE9dGhpcy5fZmluZChpKSlyZXR1cm4gYS50b29sdGlwLmZpbmQoIi51aS10b29sdGlwLWNvbnRlbnQiKS5odG1sKHMpLHZvaWQgMDtpLmlzKCJbdGl0bGVdIikmJih0JiYibW91c2VvdmVyIj09PXQudHlwZT9pLmF0dHIoInRpdGxlIiwiIik6aS5yZW1vdmVBdHRyKCJ0aXRsZSIpKSxhPXRoaXMuX3Rvb2x0aXAoaSksbz1hLnRvb2x0aXAsdGhpcy5fYWRkRGVzY3JpYmVkQnkoaSxvLmF0dHIoImlkIikpLG8uZmluZCgiLnVpLXRvb2x0aXAtY29udGVudCIpLmh0bWwocyksdGhpcy5saXZlUmVnaW9uLmNoaWxkcmVuKCkuaGlkZSgpLHMuY2xvbmU/KGg9cy5jbG9uZSgpLGgucmVtb3ZlQXR0cigiaWQiKS5maW5kKCJbaWRdIikucmVtb3ZlQXR0cigiaWQiKSk6aD1zLGUoIjxkaXY+IikuaHRtbChoKS5hcHBlbmRUbyh0aGlzLmxpdmVSZWdpb24pLHRoaXMub3B0aW9ucy50cmFjayYmdCYmL15tb3VzZS8udGVzdCh0LnR5cGUpPyh0aGlzLl9vbih0aGlzLmRvY3VtZW50LHttb3VzZW1vdmU6bn0pLG4odCkpOm8ucG9zaXRpb24oZS5leHRlbmQoe29mOml9LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpLG8uaGlkZSgpLHRoaXMuX3Nob3cobyx0aGlzLm9wdGlvbnMuc2hvdyksdGhpcy5vcHRpb25zLnNob3cmJnRoaXMub3B0aW9ucy5zaG93LmRlbGF5JiYocj10aGlzLmRlbGF5ZWRTaG93PXNldEludGVydmFsKGZ1bmN0aW9uKCl7by5pcygiOnZpc2libGUiKSYmKG4obC5vZiksY2xlYXJJbnRlcnZhbChyKSl9LGUuZnguaW50ZXJ2YWwpKSx0aGlzLl90cmlnZ2VyKCJvcGVuIix0LHt0b29sdGlwOm99KX19LF9yZWdpc3RlckNsb3NlSGFuZGxlcnM6ZnVuY3Rpb24odCxpKXt2YXIgcz17a2V5dXA6ZnVuY3Rpb24odCl7aWYodC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVTQ0FQRSl7dmFyIHM9ZS5FdmVudCh0KTtzLmN1cnJlbnRUYXJnZXQ9aVswXSx0aGlzLmNsb3NlKHMsITApfX19O2lbMF0hPT10aGlzLmVsZW1lbnRbMF0mJihzLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3JlbW92ZVRvb2x0aXAodGhpcy5fZmluZChpKS50b29sdGlwKX0pLHQmJiJtb3VzZW92ZXIiIT09dC50eXBlfHwocy5tb3VzZWxlYXZlPSJjbG9zZSIpLHQmJiJmb2N1c2luIiE9PXQudHlwZXx8KHMuZm9jdXNvdXQ9ImNsb3NlIiksdGhpcy5fb24oITAsaSxzKX0sY2xvc2U6ZnVuY3Rpb24odCl7dmFyIGkscz10aGlzLG49ZSh0P3QuY3VycmVudFRhcmdldDp0aGlzLmVsZW1lbnQpLGE9dGhpcy5fZmluZChuKTtyZXR1cm4gYT8oaT1hLnRvb2x0aXAsYS5jbG9zaW5nfHwoY2xlYXJJbnRlcnZhbCh0aGlzLmRlbGF5ZWRTaG93KSxuLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSYmIW4uYXR0cigidGl0bGUiKSYmbi5hdHRyKCJ0aXRsZSIsbi5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpLHRoaXMuX3JlbW92ZURlc2NyaWJlZEJ5KG4pLGEuaGlkaW5nPSEwLGkuc3RvcCghMCksdGhpcy5faGlkZShpLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7cy5fcmVtb3ZlVG9vbHRpcChlKHRoaXMpKX0pLG4ucmVtb3ZlRGF0YSgidWktdG9vbHRpcC1vcGVuIiksdGhpcy5fb2ZmKG4sIm1vdXNlbGVhdmUgZm9jdXNvdXQga2V5dXAiKSxuWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9vZmYobiwicmVtb3ZlIiksdGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQsIm1vdXNlbW92ZSIpLHQmJiJtb3VzZWxlYXZlIj09PXQudHlwZSYmZS5lYWNoKHRoaXMucGFyZW50cyxmdW5jdGlvbih0LGkpe2UoaS5lbGVtZW50KS5hdHRyKCJ0aXRsZSIsaS50aXRsZSksZGVsZXRlIHMucGFyZW50c1t0XX0pLGEuY2xvc2luZz0hMCx0aGlzLl90cmlnZ2VyKCJjbG9zZSIsdCx7dG9vbHRpcDppfSksYS5oaWRpbmd8fChhLmNsb3Npbmc9ITEpKSx2b2lkIDApOihuLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtb3BlbiIpLHZvaWQgMCl9LF90b29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBpPWUoIjxkaXY+IikuYXR0cigicm9sZSIsInRvb2x0aXAiKS5hZGRDbGFzcygidWktdG9vbHRpcCB1aS13aWRnZXQgdWktY29ybmVyLWFsbCB1aS13aWRnZXQtY29udGVudCAiKyh0aGlzLm9wdGlvbnMudG9vbHRpcENsYXNzfHwiIikpLHM9aS51bmlxdWVJZCgpLmF0dHIoImlkIik7cmV0dXJuIGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLXRvb2x0aXAtY29udGVudCIpLmFwcGVuZFRvKGkpLGkuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSx0aGlzLnRvb2x0aXBzW3NdPXtlbGVtZW50OnQsdG9vbHRpcDppfX0sX2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhKCJ1aS10b29sdGlwLWlkIik7cmV0dXJuIHQ/dGhpcy50b29sdGlwc1t0XTpudWxsfSxfcmVtb3ZlVG9vbHRpcDpmdW5jdGlvbihlKXtlLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnRvb2x0aXBzW2UuYXR0cigiaWQiKV19LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztlLmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihpLHMpe3ZhciBuPWUuRXZlbnQoImJsdXIiKSxhPXMuZWxlbWVudDtuLnRhcmdldD1uLmN1cnJlbnRUYXJnZXQ9YVswXSx0LmNsb3NlKG4sITApLGUoIiMiK2kpLnJlbW92ZSgpLGEuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiYoYS5hdHRyKCJ0aXRsZSIpfHxhLmF0dHIoInRpdGxlIixhLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSksYS5yZW1vdmVEYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpfSksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfX0pO3ZhciBjPSJ1aS1lZmZlY3RzLSIscD1lO2UuZWZmZWN0cz17ZWZmZWN0Ont9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoZSx0LGkpe3ZhciBzPWRbdC50eXBlXXx8e307cmV0dXJuIG51bGw9PWU/aXx8IXQuZGVmP251bGw6dC5kZWY6KGU9cy5mbG9vcj9+fmU6cGFyc2VGbG9hdChlKSxpc05hTihlKT90LmRlZjpzLm1vZD8oZStzLm1vZCklcy5tb2Q6MD5lPzA6ZT5zLm1heD9zLm1heDplKX1mdW5jdGlvbiBzKGkpe3ZhciBzPWwoKSxuPXMuX3JnYmE9W107cmV0dXJuIGk9aS50b0xvd2VyQ2FzZSgpLGYoaCxmdW5jdGlvbihlLGEpe3ZhciBvLHI9YS5yZS5leGVjKGkpLGg9ciYmYS5wYXJzZShyKSxsPWEuc3BhY2V8fCJyZ2JhIjtyZXR1cm4gaD8obz1zW2xdKGgpLHNbdVtsXS5jYWNoZV09b1t1W2xdLmNhY2hlXSxuPXMuX3JnYmE9by5fcmdiYSwhMSk6dH0pLG4ubGVuZ3RoPygiMCwwLDAsMCI9PT1uLmpvaW4oKSYmZS5leHRlbmQobixhLnRyYW5zcGFyZW50KSxzKTphW2ldfWZ1bmN0aW9uIG4oZSx0LGkpe3JldHVybiBpPShpKzEpJTEsMT42Kmk/ZSs2Kih0LWUpKmk6MT4yKmk/dDoyPjMqaT9lKzYqKHQtZSkqKDIvMy1pKTplfXZhciBhLG89ImJhY2tncm91bmRDb2xvciBib3JkZXJCb3R0b21Db2xvciBib3JkZXJMZWZ0Q29sb3IgYm9yZGVyUmlnaHRDb2xvciBib3JkZXJUb3BDb2xvciBjb2xvciBjb2x1bW5SdWxlQ29sb3Igb3V0bGluZUNvbG9yIHRleHREZWNvcmF0aW9uQ29sb3IgdGV4dEVtcGhhc2lzQ29sb3IiLHI9L14oW1wtK10pPVxzKihcZCtcLj9cZCopLyxoPVt7cmU6L3JnYmE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKig/OixccyooXGQ/KD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bZVsxXSxlWzJdLGVbM10sZVs0XV19fSx7cmU6L3JnYmE/XChccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKig/OixccyooXGQ/KD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bMi41NSplWzFdLDIuNTUqZVsyXSwyLjU1KmVbM10sZVs0XV19fSx7cmU6LyMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdLDE2KSxwYXJzZUludChlWzJdLDE2KSxwYXJzZUludChlWzNdLDE2KV19fSx7cmU6LyMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdK2VbMV0sMTYpLHBhcnNlSW50KGVbMl0rZVsyXSwxNikscGFyc2VJbnQoZVszXStlWzNdLDE2KV19fSx7cmU6L2hzbGE/XChccyooXGQrKD86XC5cZCspPylccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyooPzosXHMqKFxkPyg/OlwuXGQrKT8pXHMqKT9cKS8sc3BhY2U6ImhzbGEiLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF1dfX1dLGw9ZS5Db2xvcj1mdW5jdGlvbih0LGkscyxuKXtyZXR1cm4gbmV3IGUuQ29sb3IuZm4ucGFyc2UodCxpLHMsbil9LHU9e3JnYmE6e3Byb3BzOntyZWQ6e2lkeDowLHR5cGU6ImJ5dGUifSxncmVlbjp7aWR4OjEsdHlwZToiYnl0ZSJ9LGJsdWU6e2lkeDoyLHR5cGU6ImJ5dGUifX19LGhzbGE6e3Byb3BzOntodWU6e2lkeDowLHR5cGU6ImRlZ3JlZXMifSxzYXR1cmF0aW9uOntpZHg6MSx0eXBlOiJwZXJjZW50In0sbGlnaHRuZXNzOntpZHg6Mix0eXBlOiJwZXJjZW50In19fX0sZD17ImJ5dGUiOntmbG9vcjohMCxtYXg6MjU1fSxwZXJjZW50OnttYXg6MX0sZGVncmVlczp7bW9kOjM2MCxmbG9vcjohMH19LGM9bC5zdXBwb3J0PXt9LHA9ZSgiPHA+IilbMF0sZj1lLmVhY2g7cC5zdHlsZS5jc3NUZXh0PSJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMSwxLDEsLjUpIixjLnJnYmE9cC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZigicmdiYSIpPi0xLGYodSxmdW5jdGlvbihlLHQpe3QuY2FjaGU9Il8iK2UsdC5wcm9wcy5hbHBoYT17aWR4OjMsdHlwZToicGVyY2VudCIsZGVmOjF9fSksbC5mbj1lLmV4dGVuZChsLnByb3RvdHlwZSx7cGFyc2U6ZnVuY3Rpb24obixvLHIsaCl7aWYobj09PXQpcmV0dXJuIHRoaXMuX3JnYmE9W251bGwsbnVsbCxudWxsLG51bGxdLHRoaXM7KG4uanF1ZXJ5fHxuLm5vZGVUeXBlKSYmKG49ZShuKS5jc3Mobyksbz10KTt2YXIgZD10aGlzLGM9ZS50eXBlKG4pLHA9dGhpcy5fcmdiYT1bXTtyZXR1cm4gbyE9PXQmJihuPVtuLG8scixoXSxjPSJhcnJheSIpLCJzdHJpbmciPT09Yz90aGlzLnBhcnNlKHMobil8fGEuX2RlZmF1bHQpOiJhcnJheSI9PT1jPyhmKHUucmdiYS5wcm9wcyxmdW5jdGlvbihlLHQpe3BbdC5pZHhdPWkoblt0LmlkeF0sdCl9KSx0aGlzKToib2JqZWN0Ij09PWM/KG4gaW5zdGFuY2VvZiBsP2YodSxmdW5jdGlvbihlLHQpe25bdC5jYWNoZV0mJihkW3QuY2FjaGVdPW5bdC5jYWNoZV0uc2xpY2UoKSl9KTpmKHUsZnVuY3Rpb24odCxzKXt2YXIgYT1zLmNhY2hlO2Yocy5wcm9wcyxmdW5jdGlvbihlLHQpe2lmKCFkW2FdJiZzLnRvKXtpZigiYWxwaGEiPT09ZXx8bnVsbD09bltlXSlyZXR1cm47ZFthXT1zLnRvKGQuX3JnYmEpfWRbYV1bdC5pZHhdPWkobltlXSx0LCEwKX0pLGRbYV0mJjA+ZS5pbkFycmF5KG51bGwsZFthXS5zbGljZSgwLDMpKSYmKGRbYV1bM109MSxzLmZyb20mJihkLl9yZ2JhPXMuZnJvbShkW2FdKSkpfSksdGhpcyk6dH0saXM6ZnVuY3Rpb24oZSl7dmFyIGk9bChlKSxzPSEwLG49dGhpcztyZXR1cm4gZih1LGZ1bmN0aW9uKGUsYSl7dmFyIG8scj1pW2EuY2FjaGVdO3JldHVybiByJiYobz1uW2EuY2FjaGVdfHxhLnRvJiZhLnRvKG4uX3JnYmEpfHxbXSxmKGEucHJvcHMsZnVuY3Rpb24oZSxpKXtyZXR1cm4gbnVsbCE9cltpLmlkeF0/cz1yW2kuaWR4XT09PW9baS5pZHhdOnR9KSksc30pLHN9LF9zcGFjZTpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcztyZXR1cm4gZih1LGZ1bmN0aW9uKGkscyl7dFtzLmNhY2hlXSYmZS5wdXNoKGkpfSksZS5wb3AoKX0sdHJhbnNpdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBzPWwoZSksbj1zLl9zcGFjZSgpLGE9dVtuXSxvPTA9PT10aGlzLmFscGhhKCk/bCgidHJhbnNwYXJlbnQiKTp0aGlzLHI9b1thLmNhY2hlXXx8YS50byhvLl9yZ2JhKSxoPXIuc2xpY2UoKTtyZXR1cm4gcz1zW2EuY2FjaGVdLGYoYS5wcm9wcyxmdW5jdGlvbihlLG4pe3ZhciBhPW4uaWR4LG89clthXSxsPXNbYV0sdT1kW24udHlwZV18fHt9O251bGwhPT1sJiYobnVsbD09PW8/aFthXT1sOih1Lm1vZCYmKGwtbz51Lm1vZC8yP28rPXUubW9kOm8tbD51Lm1vZC8yJiYoby09dS5tb2QpKSxoW2FdPWkoKGwtbykqdCtvLG4pKSl9KSx0aGlzW25dKGgpfSxibGVuZDpmdW5jdGlvbih0KXtpZigxPT09dGhpcy5fcmdiYVszXSlyZXR1cm4gdGhpczt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCkscz1pLnBvcCgpLG49bCh0KS5fcmdiYTtyZXR1cm4gbChlLm1hcChpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDEtcykqblt0XStzKmV9KSl9LHRvUmdiYVN0cmluZzpmdW5jdGlvbigpe3ZhciB0PSJyZ2JhKCIsaT1lLm1hcCh0aGlzLl9yZ2JhLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/dD4yPzE6MDplfSk7cmV0dXJuIDE9PT1pWzNdJiYoaS5wb3AoKSx0PSJyZ2IoIiksdCtpLmpvaW4oKSsiKSJ9LHRvSHNsYVN0cmluZzpmdW5jdGlvbigpe3ZhciB0PSJoc2xhKCIsaT1lLm1hcCh0aGlzLmhzbGEoKSxmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lJiYoZT10PjI/MTowKSx0JiYzPnQmJihlPU1hdGgucm91bmQoMTAwKmUpKyIlIiksZX0pO3JldHVybiAxPT09aVszXSYmKGkucG9wKCksdD0iaHNsKCIpLHQraS5qb2luKCkrIikifSx0b0hleFN0cmluZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCkscz1pLnBvcCgpO3JldHVybiB0JiZpLnB1c2gofn4oMjU1KnMpKSwiIyIrZS5tYXAoaSxmdW5jdGlvbihlKXtyZXR1cm4gZT0oZXx8MCkudG9TdHJpbmcoMTYpLDE9PT1lLmxlbmd0aD8iMCIrZTplfSkuam9pbigiIil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9yZ2JhWzNdPyJ0cmFuc3BhcmVudCI6dGhpcy50b1JnYmFTdHJpbmcoKX19KSxsLmZuLnBhcnNlLnByb3RvdHlwZT1sLmZuLHUuaHNsYS50bz1mdW5jdGlvbihlKXtpZihudWxsPT1lWzBdfHxudWxsPT1lWzFdfHxudWxsPT1lWzJdKXJldHVybltudWxsLG51bGwsbnVsbCxlWzNdXTt2YXIgdCxpLHM9ZVswXS8yNTUsbj1lWzFdLzI1NSxhPWVbMl0vMjU1LG89ZVszXSxyPU1hdGgubWF4KHMsbixhKSxoPU1hdGgubWluKHMsbixhKSxsPXItaCx1PXIraCxkPS41KnU7cmV0dXJuIHQ9aD09PXI/MDpzPT09cj82MCoobi1hKS9sKzM2MDpuPT09cj82MCooYS1zKS9sKzEyMDo2MCoocy1uKS9sKzI0MCxpPTA9PT1sPzA6LjU+PWQ/bC91OmwvKDItdSksW01hdGgucm91bmQodCklMzYwLGksZCxudWxsPT1vPzE6b119LHUuaHNsYS5mcm9tPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWVbMF18fG51bGw9PWVbMV18fG51bGw9PWVbMl0pcmV0dXJuW251bGwsbnVsbCxudWxsLGVbM11dO3ZhciB0PWVbMF0vMzYwLGk9ZVsxXSxzPWVbMl0sYT1lWzNdLG89LjU+PXM/cyooMStpKTpzK2ktcyppLHI9MipzLW87cmV0dXJuW01hdGgucm91bmQoMjU1Km4ocixvLHQrMS8zKSksTWF0aC5yb3VuZCgyNTUqbihyLG8sdCkpLE1hdGgucm91bmQoMjU1Km4ocixvLHQtMS8zKSksYV19LGYodSxmdW5jdGlvbihzLG4pe3ZhciBhPW4ucHJvcHMsbz1uLmNhY2hlLGg9bi50byx1PW4uZnJvbTtsLmZuW3NdPWZ1bmN0aW9uKHMpe2lmKGgmJiF0aGlzW29dJiYodGhpc1tvXT1oKHRoaXMuX3JnYmEpKSxzPT09dClyZXR1cm4gdGhpc1tvXS5zbGljZSgpO3ZhciBuLHI9ZS50eXBlKHMpLGQ9ImFycmF5Ij09PXJ8fCJvYmplY3QiPT09cj9zOmFyZ3VtZW50cyxjPXRoaXNbb10uc2xpY2UoKTtyZXR1cm4gZihhLGZ1bmN0aW9uKGUsdCl7dmFyIHM9ZFsib2JqZWN0Ij09PXI/ZTp0LmlkeF07bnVsbD09cyYmKHM9Y1t0LmlkeF0pLGNbdC5pZHhdPWkocyx0KX0pLHU/KG49bCh1KGMpKSxuW29dPWMsbik6bChjKX0sZihhLGZ1bmN0aW9uKHQsaSl7bC5mblt0XXx8KGwuZm5bdF09ZnVuY3Rpb24obil7dmFyIGEsbz1lLnR5cGUobiksaD0iYWxwaGEiPT09dD90aGlzLl9oc2xhPyJoc2xhIjoicmdiYSI6cyxsPXRoaXNbaF0oKSx1PWxbaS5pZHhdO3JldHVybiJ1bmRlZmluZWQiPT09bz91OigiZnVuY3Rpb24iPT09byYmKG49bi5jYWxsKHRoaXMsdSksbz1lLnR5cGUobikpLG51bGw9PW4mJmkuZW1wdHk/dGhpczooInN0cmluZyI9PT1vJiYoYT1yLmV4ZWMobiksYSYmKG49dStwYXJzZUZsb2F0KGFbMl0pKigiKyI9PT1hWzFdPzE6LTEpKSksbFtpLmlkeF09bix0aGlzW2hdKGwpKSl9KX0pfSksbC5ob29rPWZ1bmN0aW9uKHQpe3ZhciBpPXQuc3BsaXQoIiAiKTtmKGksZnVuY3Rpb24odCxpKXtlLmNzc0hvb2tzW2ldPXtzZXQ6ZnVuY3Rpb24odCxuKXt2YXIgYSxvLHI9IiI7aWYoInRyYW5zcGFyZW50IiE9PW4mJigic3RyaW5nIiE9PWUudHlwZShuKXx8KGE9cyhuKSkpKXtpZihuPWwoYXx8biksIWMucmdiYSYmMSE9PW4uX3JnYmFbM10pe2ZvcihvPSJiYWNrZ3JvdW5kQ29sb3IiPT09aT90LnBhcmVudE5vZGU6dDsoIiI9PT1yfHwidHJhbnNwYXJlbnQiPT09cikmJm8mJm8uc3R5bGU7KXRyeXtyPWUuY3NzKG8sImJhY2tncm91bmRDb2xvciIpLG89by5wYXJlbnROb2RlfWNhdGNoKGgpe31uPW4uYmxlbmQociYmInRyYW5zcGFyZW50IiE9PXI/cjoiX2RlZmF1bHQiKX1uPW4udG9SZ2JhU3RyaW5nKCl9dHJ5e3Quc3R5bGVbaV09bn1jYXRjaChoKXt9fX0sZS5meC5zdGVwW2ldPWZ1bmN0aW9uKHQpe3QuY29sb3JJbml0fHwodC5zdGFydD1sKHQuZWxlbSxpKSx0LmVuZD1sKHQuZW5kKSx0LmNvbG9ySW5pdD0hMCksZS5jc3NIb29rc1tpXS5zZXQodC5lbGVtLHQuc3RhcnQudHJhbnNpdGlvbih0LmVuZCx0LnBvcykpfX0pfSxsLmhvb2sobyksZS5jc3NIb29rcy5ib3JkZXJDb2xvcj17ZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBmKFsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sZnVuY3Rpb24oaSxzKXt0WyJib3JkZXIiK3MrIkNvbG9yIl09ZX0pLHR9fSxhPWUuQ29sb3IubmFtZXM9e2FxdWE6IiMwMGZmZmYiLGJsYWNrOiIjMDAwMDAwIixibHVlOiIjMDAwMGZmIixmdWNoc2lhOiIjZmYwMGZmIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsbGltZToiIzAwZmYwMCIsbWFyb29uOiIjODAwMDAwIixuYXZ5OiIjMDAwMDgwIixvbGl2ZToiIzgwODAwMCIscHVycGxlOiIjODAwMDgwIixyZWQ6IiNmZjAwMDAiLHNpbHZlcjoiI2MwYzBjMCIsdGVhbDoiIzAwODA4MCIsd2hpdGU6IiNmZmZmZmYiLHllbGxvdzoiI2ZmZmYwMCIsdHJhbnNwYXJlbnQ6W251bGwsbnVsbCxudWxsLDBdLF9kZWZhdWx0OiIjZmZmZmZmIn19KHApLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgaSxzLG49dC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3P3Qub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCk6dC5jdXJyZW50U3R5bGUsYT17fTtpZihuJiZuLmxlbmd0aCYmblswXSYmbltuWzBdXSlmb3Iocz1uLmxlbmd0aDtzLS07KWk9bltzXSwic3RyaW5nIj09dHlwZW9mIG5baV0mJihhW2UuY2FtZWxDYXNlKGkpXT1uW2ldKTtlbHNlIGZvcihpIGluIG4pInN0cmluZyI9PXR5cGVvZiBuW2ldJiYoYVtpXT1uW2ldKTtyZXR1cm4gYX1mdW5jdGlvbiBpKHQsaSl7dmFyIHMsYSxvPXt9O2ZvcihzIGluIGkpYT1pW3NdLHRbc10hPT1hJiYobltzXXx8KGUuZnguc3RlcFtzXXx8IWlzTmFOKHBhcnNlRmxvYXQoYSkpKSYmKG9bc109YSkpO3JldHVybiBvfXZhciBzPVsiYWRkIiwicmVtb3ZlIiwidG9nZ2xlIl0sbj17Ym9yZGVyOjEsYm9yZGVyQm90dG9tOjEsYm9yZGVyQ29sb3I6MSxib3JkZXJMZWZ0OjEsYm9yZGVyUmlnaHQ6MSxib3JkZXJUb3A6MSxib3JkZXJXaWR0aDoxLG1hcmdpbjoxLHBhZGRpbmc6MX07ZS5lYWNoKFsiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyVG9wU3R5bGUiXSxmdW5jdGlvbih0LGkpe2UuZnguc3RlcFtpXT1mdW5jdGlvbihlKXsoIm5vbmUiIT09ZS5lbmQmJiFlLnNldEF0dHJ8fDE9PT1lLnBvcyYmIWUuc2V0QXR0cikmJihwLnN0eWxlKGUuZWxlbSxpLGUuZW5kKSxlLnNldEF0dHI9ITApfX0pLGUuZm4uYWRkQmFja3x8KGUuZm4uYWRkQmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9KSxlLmVmZmVjdHMuYW5pbWF0ZUNsYXNzPWZ1bmN0aW9uKG4sYSxvLHIpe3ZhciBoPWUuc3BlZWQoYSxvLHIpO3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIGEsbz1lKHRoaXMpLHI9by5hdHRyKCJjbGFzcyIpfHwiIixsPWguY2hpbGRyZW4/by5maW5kKCIqIikuYWRkQmFjaygpOm87bD1sLm1hcChmdW5jdGlvbigpe3ZhciBpPWUodGhpcyk7cmV0dXJue2VsOmksc3RhcnQ6dCh0aGlzKX19KSxhPWZ1bmN0aW9uKCl7ZS5lYWNoKHMsZnVuY3Rpb24oZSx0KXtuW3RdJiZvW3QrIkNsYXNzIl0oblt0XSl9KX0sYSgpLGw9bC5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmQ9dCh0aGlzLmVsWzBdKSx0aGlzLmRpZmY9aSh0aGlzLnN0YXJ0LHRoaXMuZW5kKSx0aGlzfSksby5hdHRyKCJjbGFzcyIsciksbD1sLm1hcChmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT1lLkRlZmVycmVkKCkscz1lLmV4dGVuZCh7fSxoLHtxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe2kucmVzb2x2ZSh0KX19KTtyZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZixzKSxpLnByb21pc2UoKX0pLGUud2hlbi5hcHBseShlLGwuZ2V0KCkpLmRvbmUoZnVuY3Rpb24oKXthKCksZS5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWw7ZS5lYWNoKHRoaXMuZGlmZixmdW5jdGlvbihlKXt0LmNzcyhlLCIiKX0pfSksaC5jb21wbGV0ZS5jYWxsKG9bMF0pfSl9KX0sZS5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMsbixhKXtyZXR1cm4gcz9lLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOml9LHMsbixhKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KGUuZm4uYWRkQ2xhc3MpLHJlbW92ZUNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMsbixhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHtyZW1vdmU6aX0scyxuLGEpOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oZS5mbi5yZW1vdmVDbGFzcyksdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkscyxuLGEsbyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygc3x8dm9pZCAwPT09cz9uP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHM/e2FkZDppfTp7cmVtb3ZlOml9LG4sYSxvKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7dG9nZ2xlOml9LHMsbixhKX19KGUuZm4udG9nZ2xlQ2xhc3MpLHN3aXRjaENsYXNzOmZ1bmN0aW9uKHQsaSxzLG4sYSl7cmV0dXJuIGUuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6aSxyZW1vdmU6dH0scyxuLGEpfX0pfSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGkscyxuKXtyZXR1cm4gZS5pc1BsYWluT2JqZWN0KHQpJiYoaT10LHQ9dC5lZmZlY3QpLHQ9e2VmZmVjdDp0fSxudWxsPT1pJiYoaT17fSksZS5pc0Z1bmN0aW9uKGkpJiYobj1pLHM9bnVsbCxpPXt9KSwoIm51bWJlciI9PXR5cGVvZiBpfHxlLmZ4LnNwZWVkc1tpXSkmJihuPXMscz1pLGk9e30pLGUuaXNGdW5jdGlvbihzKSYmKG49cyxzPW51bGwpLGkmJmUuZXh0ZW5kKHQsaSkscz1zfHxpLmR1cmF0aW9uLHQuZHVyYXRpb249ZS5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIHM/czpzIGluIGUuZnguc3BlZWRzP2UuZnguc3BlZWRzW3NdOmUuZnguc3BlZWRzLl9kZWZhdWx0LHQuY29tcGxldGU9bnx8aS5jb21wbGV0ZSx0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIXR8fCJudW1iZXIiPT10eXBlb2YgdHx8ZS5meC5zcGVlZHNbdF0/ITA6InN0cmluZyIhPXR5cGVvZiB0fHxlLmVmZmVjdHMuZWZmZWN0W3RdP2UuaXNGdW5jdGlvbih0KT8hMDoib2JqZWN0IiE9dHlwZW9mIHR8fHQuZWZmZWN0PyExOiEwOiEwfWUuZXh0ZW5kKGUuZWZmZWN0cyx7dmVyc2lvbjoiMS4xMS40IixzYXZlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPTA7dC5sZW5ndGg+aTtpKyspbnVsbCE9PXRbaV0mJmUuZGF0YShjK3RbaV0sZVswXS5zdHlsZVt0W2ldXSl9LHJlc3RvcmU6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzO2ZvcihzPTA7dC5sZW5ndGg+cztzKyspbnVsbCE9PXRbc10mJihpPWUuZGF0YShjK3Rbc10pLHZvaWQgMD09PWkmJihpPSIiKSxlLmNzcyh0W3NdLGkpKX0sc2V0TW9kZTpmdW5jdGlvbihlLHQpe3JldHVybiJ0b2dnbGUiPT09dCYmKHQ9ZS5pcygiOmhpZGRlbiIpPyJzaG93IjoiaGlkZSIpLHR9LGdldEJhc2VsaW5lOmZ1bmN0aW9uKGUsdCl7dmFyIGkscztzd2l0Y2goZVswXSl7Y2FzZSJ0b3AiOmk9MDticmVhaztjYXNlIm1pZGRsZSI6aT0uNTticmVhaztjYXNlImJvdHRvbSI6aT0xO2JyZWFrO2RlZmF1bHQ6aT1lWzBdL3QuaGVpZ2h0fXN3aXRjaChlWzFdKXtjYXNlImxlZnQiOnM9MDticmVhaztjYXNlImNlbnRlciI6cz0uNTticmVhaztjYXNlInJpZ2h0IjpzPTE7YnJlYWs7ZGVmYXVsdDpzPWVbMV0vdC53aWR0aH1yZXR1cm57eDpzLHk6aX19LGNyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24odCl7aWYodC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpKXJldHVybiB0LnBhcmVudCgpO3ZhciBpPXt3aWR0aDp0Lm91dGVyV2lkdGgoITApLGhlaWdodDp0Lm91dGVySGVpZ2h0KCEwKSwiZmxvYXQiOnQuY3NzKCJmbG9hdCIpfSxzPWUoIjxkaXY+PC9kaXY+IikuYWRkQ2xhc3MoInVpLWVmZmVjdHMtd3JhcHBlciIpLmNzcyh7Zm9udFNpemU6IjEwMCUiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLG1hcmdpbjowLHBhZGRpbmc6MH0pLG49e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKX0sYT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3RyeXthLmlkfWNhdGNoKG8pe2E9ZG9jdW1lbnQuYm9keX1yZXR1cm4gdC53cmFwKHMpLCh0WzBdPT09YXx8ZS5jb250YWlucyh0WzBdLGEpKSYmZShhKS5mb2N1cygpLHM9dC5wYXJlbnQoKSwic3RhdGljIj09PXQuY3NzKCJwb3NpdGlvbiIpPyhzLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIn0pLHQuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSkpOihlLmV4dGVuZChpLHtwb3NpdGlvbjp0LmNzcygicG9zaXRpb24iKSx6SW5kZXg6dC5jc3MoInotaW5kZXgiKX0pLGUuZWFjaChbInRvcCIsImxlZnQiLCJib3R0b20iLCJyaWdodCJdLGZ1bmN0aW9uKGUscyl7aVtzXT10LmNzcyhzKSxpc05hTihwYXJzZUludChpW3NdLDEwKSkmJihpW3NdPSJhdXRvIil9KSx0LmNzcyh7cG9zaXRpb246InJlbGF0aXZlIix0b3A6MCxsZWZ0OjAscmlnaHQ6ImF1dG8iLGJvdHRvbToiYXV0byJ9KSksdC5jc3Mobikscy5jc3MoaSkuc2hvdygpfSxyZW1vdmVXcmFwcGVyOmZ1bmN0aW9uKHQpe3ZhciBpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIHQucGFyZW50KCkuaXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKSYmKHQucGFyZW50KCkucmVwbGFjZVdpdGgodCksKHRbMF09PT1pfHxlLmNvbnRhaW5zKHRbMF0saSkpJiZlKGkpLmZvY3VzKCkpLHR9LHNldFRyYW5zaXRpb246ZnVuY3Rpb24odCxpLHMsbil7cmV0dXJuIG49bnx8e30sZS5lYWNoKGksZnVuY3Rpb24oZSxpKXt2YXIgYT10LmNzc1VuaXQoaSk7YVswXT4wJiYobltpXT1hWzBdKnMrYVsxXSl9KSxufX0pLGUuZm4uZXh0ZW5kKHtlZmZlY3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGkoKXtlLmlzRnVuY3Rpb24oYSkmJmEuY2FsbChuWzBdKSxlLmlzRnVuY3Rpb24odCkmJnQoKX12YXIgbj1lKHRoaXMpLGE9cy5jb21wbGV0ZSxyPXMubW9kZTsobi5pcygiOmhpZGRlbiIpPyJoaWRlIj09PXI6InNob3ciPT09cik/KG5bcl0oKSxpKCkpOm8uY2FsbChuWzBdLHMsaSl9dmFyIHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1zLm1vZGUsYT1zLnF1ZXVlLG89ZS5lZmZlY3RzLmVmZmVjdFtzLmVmZmVjdF07cmV0dXJuIGUuZngub2ZmfHwhbz9uP3RoaXNbbl0ocy5kdXJhdGlvbixzLmNvbXBsZXRlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtzLmNvbXBsZXRlJiZzLmNvbXBsZXRlLmNhbGwodGhpcyl9KTphPT09ITE/dGhpcy5lYWNoKGkpOnRoaXMucXVldWUoYXx8ImZ4IixpKX0sc2hvdzpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKSlyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT0ic2hvdyIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLG4pfX0oZS5mbi5zaG93KSxoaWRlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihzKXtpZihpKHMpKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPSJoaWRlIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9fShlLmZuLmhpZGUpLHRvZ2dsZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKXx8ImJvb2xlYW4iPT10eXBlb2YgcylyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT0idG9nZ2xlIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9fShlLmZuLnRvZ2dsZSksY3NzVW5pdDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmNzcyh0KSxzPVtdO3JldHVybiBlLmVhY2goWyJlbSIsInB4IiwiJSIsInB0Il0sZnVuY3Rpb24oZSx0KXtpLmluZGV4T2YodCk+MCYmKHM9W3BhcnNlRmxvYXQoaSksdF0pfSksc319KX0oKSxmdW5jdGlvbigpe3ZhciB0PXt9O2UuZWFjaChbIlF1YWQiLCJDdWJpYyIsIlF1YXJ0IiwiUXVpbnQiLCJFeHBvIl0sZnVuY3Rpb24oZSxpKXt0W2ldPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUrMil9fSksZS5leHRlbmQodCx7U2luZTpmdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLmNvcyhlKk1hdGguUEkvMil9LENpcmM6ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX0sRWxhc3RpYzpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV8fDE9PT1lP2U6LU1hdGgucG93KDIsOCooZS0xKSkqTWF0aC5zaW4oKDgwKihlLTEpLTcuNSkqTWF0aC5QSS8xNSl9LEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooMyplLTIpfSxCb3VuY2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9NDsoKHQ9TWF0aC5wb3coMiwtLWkpKS0xKS8xMT5lOyk7cmV0dXJuIDEvTWF0aC5wb3coNCwzLWkpLTcuNTYyNSpNYXRoLnBvdygoMyp0LTIpLzIyLWUsMil9fSksZS5lYWNoKHQsZnVuY3Rpb24odCxpKXtlLmVhc2luZ1siZWFzZUluIit0XT1pLGUuZWFzaW5nWyJlYXNlT3V0Iit0XT1mdW5jdGlvbihlKXtyZXR1cm4gMS1pKDEtZSl9LGUuZWFzaW5nWyJlYXNlSW5PdXQiK3RdPWZ1bmN0aW9uKGUpe3JldHVybi41PmU/aSgyKmUpLzI6MS1pKC0yKmUrMikvMn19KX0oKSxlLmVmZmVjdHMsZS5lZmZlY3RzLmVmZmVjdC5ibGluZD1mdW5jdGlvbih0LGkpe3ZhciBzLG4sYSxvPWUodGhpcykscj0vdXB8ZG93bnx2ZXJ0aWNhbC8saD0vdXB8bGVmdHx2ZXJ0aWNhbHxob3Jpem9udGFsLyxsPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHU9ZS5lZmZlY3RzLnNldE1vZGUobyx0Lm1vZGV8fCJoaWRlIiksZD10LmRpcmVjdGlvbnx8InVwIixjPXIudGVzdChkKSxwPWM/ImhlaWdodCI6IndpZHRoIixmPWM/InRvcCI6ImxlZnQiLG09aC50ZXN0KGQpLGc9e30sdj0ic2hvdyI9PT11O28ucGFyZW50KCkuaXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKT9lLmVmZmVjdHMuc2F2ZShvLnBhcmVudCgpLGwpOmUuZWZmZWN0cy5zYXZlKG8sbCksby5zaG93KCkscz1lLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihvKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksbj1zW3BdKCksYT1wYXJzZUZsb2F0KHMuY3NzKGYpKXx8MCxnW3BdPXY/bjowLG18fChvLmNzcyhjPyJib3R0b20iOiJyaWdodCIsMCkuY3NzKGM/InRvcCI6ImxlZnQiLCJhdXRvIikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUifSksZ1tmXT12P2E6bithKSx2JiYocy5jc3MocCwwKSxtfHxzLmNzcyhmLGErbikpLHMuYW5pbWF0ZShnLHtkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpeyJoaWRlIj09PXUmJm8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8sbCksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpCn19KX0sZS5lZmZlY3RzLmVmZmVjdC5ib3VuY2U9ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGEsbz1lKHRoaXMpLHI9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0saD1lLmVmZmVjdHMuc2V0TW9kZShvLHQubW9kZXx8ImVmZmVjdCIpLGw9ImhpZGUiPT09aCx1PSJzaG93Ij09PWgsZD10LmRpcmVjdGlvbnx8InVwIixjPXQuZGlzdGFuY2UscD10LnRpbWVzfHw1LGY9MipwKyh1fHxsPzE6MCksbT10LmR1cmF0aW9uL2YsZz10LmVhc2luZyx2PSJ1cCI9PT1kfHwiZG93biI9PT1kPyJ0b3AiOiJsZWZ0Iix5PSJ1cCI9PT1kfHwibGVmdCI9PT1kLGI9by5xdWV1ZSgpLF89Yi5sZW5ndGg7Zm9yKCh1fHxsKSYmci5wdXNoKCJvcGFjaXR5IiksZS5lZmZlY3RzLnNhdmUobyxyKSxvLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihvKSxjfHwoYz1vWyJ0b3AiPT09dj8ib3V0ZXJIZWlnaHQiOiJvdXRlcldpZHRoIl0oKS8zKSx1JiYoYT17b3BhY2l0eToxfSxhW3ZdPTAsby5jc3MoIm9wYWNpdHkiLDApLmNzcyh2LHk/MiotYzoyKmMpLmFuaW1hdGUoYSxtLGcpKSxsJiYoYy89TWF0aC5wb3coMixwLTEpKSxhPXt9LGFbdl09MCxzPTA7cD5zO3MrKyluPXt9LG5bdl09KHk/Ii09IjoiKz0iKStjLG8uYW5pbWF0ZShuLG0sZykuYW5pbWF0ZShhLG0sZyksYz1sPzIqYzpjLzI7bCYmKG49e29wYWNpdHk6MH0sblt2XT0oeT8iLT0iOiIrPSIpK2Msby5hbmltYXRlKG4sbSxnKSksby5xdWV1ZShmdW5jdGlvbigpe2wmJm8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8sciksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpfSksXz4xJiZiLnNwbGljZS5hcHBseShiLFsxLDBdLmNvbmNhdChiLnNwbGljZShfLGYrMSkpKSxvLmRlcXVldWUoKX0sZS5lZmZlY3RzLmVmZmVjdC5jbGlwPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89ZSh0aGlzKSxyPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLGg9ZS5lZmZlY3RzLnNldE1vZGUobyx0Lm1vZGV8fCJoaWRlIiksbD0ic2hvdyI9PT1oLHU9dC5kaXJlY3Rpb258fCJ2ZXJ0aWNhbCIsZD0idmVydGljYWwiPT09dSxjPWQ/ImhlaWdodCI6IndpZHRoIixwPWQ/InRvcCI6ImxlZnQiLGY9e307ZS5lZmZlY3RzLnNhdmUobyxyKSxvLnNob3coKSxzPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxuPSJJTUciPT09b1swXS50YWdOYW1lP3M6byxhPW5bY10oKSxsJiYobi5jc3MoYywwKSxuLmNzcyhwLGEvMikpLGZbY109bD9hOjAsZltwXT1sPzA6YS8yLG4uYW5pbWF0ZShmLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe2x8fG8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8sciksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LmRyb3A9ZnVuY3Rpb24odCxpKXt2YXIgcyxuPWUodGhpcyksYT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwib3BhY2l0eSIsImhlaWdodCIsIndpZHRoIl0sbz1lLmVmZmVjdHMuc2V0TW9kZShuLHQubW9kZXx8ImhpZGUiKSxyPSJzaG93Ij09PW8saD10LmRpcmVjdGlvbnx8ImxlZnQiLGw9InVwIj09PWh8fCJkb3duIj09PWg/InRvcCI6ImxlZnQiLHU9InVwIj09PWh8fCJsZWZ0Ij09PWg/InBvcyI6Im5lZyIsZD17b3BhY2l0eTpyPzE6MH07ZS5lZmZlY3RzLnNhdmUobixhKSxuLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKSxzPXQuZGlzdGFuY2V8fG5bInRvcCI9PT1sPyJvdXRlckhlaWdodCI6Im91dGVyV2lkdGgiXSghMCkvMixyJiZuLmNzcygib3BhY2l0eSIsMCkuY3NzKGwsInBvcyI9PT11Py1zOnMpLGRbbF09KHI/InBvcyI9PT11PyIrPSI6Ii09IjoicG9zIj09PXU/Ii09IjoiKz0iKStzLG4uYW5pbWF0ZShkLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpeyJoaWRlIj09PW8mJm4uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG4sYSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobiksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LmV4cGxvZGU9ZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBzKCl7Yi5wdXNoKHRoaXMpLGIubGVuZ3RoPT09ZCpjJiZuKCl9ZnVuY3Rpb24gbigpe3AuY3NzKHt2aXNpYmlsaXR5OiJ2aXNpYmxlIn0pLGUoYikucmVtb3ZlKCksbXx8cC5oaWRlKCksaSgpfXZhciBhLG8scixoLGwsdSxkPXQucGllY2VzP01hdGgucm91bmQoTWF0aC5zcXJ0KHQucGllY2VzKSk6MyxjPWQscD1lKHRoaXMpLGY9ZS5lZmZlY3RzLnNldE1vZGUocCx0Lm1vZGV8fCJoaWRlIiksbT0ic2hvdyI9PT1mLGc9cC5zaG93KCkuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikub2Zmc2V0KCksdj1NYXRoLmNlaWwocC5vdXRlcldpZHRoKCkvYykseT1NYXRoLmNlaWwocC5vdXRlckhlaWdodCgpL2QpLGI9W107Zm9yKGE9MDtkPmE7YSsrKWZvcihoPWcudG9wK2EqeSx1PWEtKGQtMSkvMixvPTA7Yz5vO28rKylyPWcubGVmdCtvKnYsbD1vLShjLTEpLzIscC5jbG9uZSgpLmFwcGVuZFRvKCJib2R5Iikud3JhcCgiPGRpdj48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsbGVmdDotbyp2LHRvcDotYSp5fSkucGFyZW50KCkuYWRkQ2xhc3MoInVpLWVmZmVjdHMtZXhwbG9kZSIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixvdmVyZmxvdzoiaGlkZGVuIix3aWR0aDp2LGhlaWdodDp5LGxlZnQ6cisobT9sKnY6MCksdG9wOmgrKG0/dSp5OjApLG9wYWNpdHk6bT8wOjF9KS5hbmltYXRlKHtsZWZ0OnIrKG0/MDpsKnYpLHRvcDpoKyhtPzA6dSp5KSxvcGFjaXR5Om0/MTowfSx0LmR1cmF0aW9ufHw1MDAsdC5lYXNpbmcscyl9LGUuZWZmZWN0cy5lZmZlY3QuZmFkZT1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbj1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8InRvZ2dsZSIpO3MuYW5pbWF0ZSh7b3BhY2l0eTpufSx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6aX0pfSxlLmVmZmVjdHMuZWZmZWN0LmZvbGQ9ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGE9ZSh0aGlzKSxvPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHI9ZS5lZmZlY3RzLnNldE1vZGUoYSx0Lm1vZGV8fCJoaWRlIiksaD0ic2hvdyI9PT1yLGw9ImhpZGUiPT09cix1PXQuc2l6ZXx8MTUsZD0vKFswLTldKyklLy5leGVjKHUpLGM9ISF0Lmhvcml6Rmlyc3QscD1oIT09YyxmPXA/WyJ3aWR0aCIsImhlaWdodCJdOlsiaGVpZ2h0Iiwid2lkdGgiXSxtPXQuZHVyYXRpb24vMixnPXt9LHY9e307ZS5lZmZlY3RzLnNhdmUoYSxvKSxhLnNob3coKSxzPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGEpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxuPXA/W3Mud2lkdGgoKSxzLmhlaWdodCgpXTpbcy5oZWlnaHQoKSxzLndpZHRoKCldLGQmJih1PXBhcnNlSW50KGRbMV0sMTApLzEwMCpuW2w/MDoxXSksaCYmcy5jc3MoYz97aGVpZ2h0OjAsd2lkdGg6dX06e2hlaWdodDp1LHdpZHRoOjB9KSxnW2ZbMF1dPWg/blswXTp1LHZbZlsxXV09aD9uWzFdOjAscy5hbmltYXRlKGcsbSx0LmVhc2luZykuYW5pbWF0ZSh2LG0sdC5lYXNpbmcsZnVuY3Rpb24oKXtsJiZhLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShhLG8pLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGEpLGkoKX0pfSxlLmVmZmVjdHMuZWZmZWN0LmhpZ2hsaWdodD1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbj1bImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRDb2xvciIsIm9wYWNpdHkiXSxhPWUuZWZmZWN0cy5zZXRNb2RlKHMsdC5tb2RlfHwic2hvdyIpLG89e2JhY2tncm91bmRDb2xvcjpzLmNzcygiYmFja2dyb3VuZENvbG9yIil9OyJoaWRlIj09PWEmJihvLm9wYWNpdHk9MCksZS5lZmZlY3RzLnNhdmUocyxuKSxzLnNob3coKS5jc3Moe2JhY2tncm91bmRJbWFnZToibm9uZSIsYmFja2dyb3VuZENvbG9yOnQuY29sb3J8fCIjZmZmZjk5In0pLmFuaW1hdGUobyx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXsiaGlkZSI9PT1hJiZzLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShzLG4pLGkoKX19KX0sZS5lZmZlY3RzLmVmZmVjdC5zaXplPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89ZSh0aGlzKSxyPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJ3aWR0aCIsImhlaWdodCIsIm92ZXJmbG93Iiwib3BhY2l0eSJdLGg9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIm92ZXJmbG93Iiwib3BhY2l0eSJdLGw9WyJ3aWR0aCIsImhlaWdodCIsIm92ZXJmbG93Il0sdT1bImZvbnRTaXplIl0sZD1bImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLGM9WyJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxwPWUuZWZmZWN0cy5zZXRNb2RlKG8sdC5tb2RlfHwiZWZmZWN0IiksZj10LnJlc3RvcmV8fCJlZmZlY3QiIT09cCxtPXQuc2NhbGV8fCJib3RoIixnPXQub3JpZ2lufHxbIm1pZGRsZSIsImNlbnRlciJdLHY9by5jc3MoInBvc2l0aW9uIikseT1mP3I6aCxiPXtoZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTsic2hvdyI9PT1wJiZvLnNob3coKSxzPXtoZWlnaHQ6by5oZWlnaHQoKSx3aWR0aDpvLndpZHRoKCksb3V0ZXJIZWlnaHQ6by5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6by5vdXRlcldpZHRoKCl9LCJ0b2dnbGUiPT09dC5tb2RlJiYic2hvdyI9PT1wPyhvLmZyb209dC50b3x8YixvLnRvPXQuZnJvbXx8cyk6KG8uZnJvbT10LmZyb218fCgic2hvdyI9PT1wP2I6cyksby50bz10LnRvfHwoImhpZGUiPT09cD9iOnMpKSxhPXtmcm9tOnt5Om8uZnJvbS5oZWlnaHQvcy5oZWlnaHQseDpvLmZyb20ud2lkdGgvcy53aWR0aH0sdG86e3k6by50by5oZWlnaHQvcy5oZWlnaHQseDpvLnRvLndpZHRoL3Mud2lkdGh9fSwoImJveCI9PT1tfHwiYm90aCI9PT1tKSYmKGEuZnJvbS55IT09YS50by55JiYoeT15LmNvbmNhdChkKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxkLGEuZnJvbS55LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGQsYS50by55LG8udG8pKSxhLmZyb20ueCE9PWEudG8ueCYmKHk9eS5jb25jYXQoYyksby5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sYyxhLmZyb20ueCxvLmZyb20pLG8udG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxjLGEudG8ueCxvLnRvKSkpLCgiY29udGVudCI9PT1tfHwiYm90aCI9PT1tKSYmYS5mcm9tLnkhPT1hLnRvLnkmJih5PXkuY29uY2F0KHUpLmNvbmNhdChsKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyx1LGEuZnJvbS55LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLHUsYS50by55LG8udG8pKSxlLmVmZmVjdHMuc2F2ZShvLHkpLG8uc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLG8uY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpLmNzcyhvLmZyb20pLGcmJihuPWUuZWZmZWN0cy5nZXRCYXNlbGluZShnLHMpLG8uZnJvbS50b3A9KHMub3V0ZXJIZWlnaHQtby5vdXRlckhlaWdodCgpKSpuLnksby5mcm9tLmxlZnQ9KHMub3V0ZXJXaWR0aC1vLm91dGVyV2lkdGgoKSkqbi54LG8udG8udG9wPShzLm91dGVySGVpZ2h0LW8udG8ub3V0ZXJIZWlnaHQpKm4ueSxvLnRvLmxlZnQ9KHMub3V0ZXJXaWR0aC1vLnRvLm91dGVyV2lkdGgpKm4ueCksby5jc3Moby5mcm9tKSwoImNvbnRlbnQiPT09bXx8ImJvdGgiPT09bSkmJihkPWQuY29uY2F0KFsibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIl0pLmNvbmNhdCh1KSxjPWMuY29uY2F0KFsibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0Il0pLGw9ci5jb25jYXQoZCkuY29uY2F0KGMpLG8uZmluZCgiKlt3aWR0aF0iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKSxzPXtoZWlnaHQ6aS5oZWlnaHQoKSx3aWR0aDppLndpZHRoKCksb3V0ZXJIZWlnaHQ6aS5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6aS5vdXRlcldpZHRoKCl9O2YmJmUuZWZmZWN0cy5zYXZlKGksbCksaS5mcm9tPXtoZWlnaHQ6cy5oZWlnaHQqYS5mcm9tLnksd2lkdGg6cy53aWR0aCphLmZyb20ueCxvdXRlckhlaWdodDpzLm91dGVySGVpZ2h0KmEuZnJvbS55LG91dGVyV2lkdGg6cy5vdXRlcldpZHRoKmEuZnJvbS54fSxpLnRvPXtoZWlnaHQ6cy5oZWlnaHQqYS50by55LHdpZHRoOnMud2lkdGgqYS50by54LG91dGVySGVpZ2h0OnMuaGVpZ2h0KmEudG8ueSxvdXRlcldpZHRoOnMud2lkdGgqYS50by54fSxhLmZyb20ueSE9PWEudG8ueSYmKGkuZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGQsYS5mcm9tLnksaS5mcm9tKSxpLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksZCxhLnRvLnksaS50bykpLGEuZnJvbS54IT09YS50by54JiYoaS5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksYyxhLmZyb20ueCxpLmZyb20pLGkudG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxjLGEudG8ueCxpLnRvKSksaS5jc3MoaS5mcm9tKSxpLmFuaW1hdGUoaS50byx0LmR1cmF0aW9uLHQuZWFzaW5nLGZ1bmN0aW9uKCl7ZiYmZS5lZmZlY3RzLnJlc3RvcmUoaSxsKX0pfSkpLG8uYW5pbWF0ZShvLnRvLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpezA9PT1vLnRvLm9wYWNpdHkmJm8uY3NzKCJvcGFjaXR5IixvLmZyb20ub3BhY2l0eSksImhpZGUiPT09cCYmby5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobyx5KSxmfHwoInN0YXRpYyI9PT12P28uY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLHRvcDpvLnRvLnRvcCxsZWZ0Om8udG8ubGVmdH0pOmUuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe28uY3NzKHQsZnVuY3Rpb24odCxpKXt2YXIgcz1wYXJzZUludChpLDEwKSxuPWU/by50by5sZWZ0Om8udG8udG9wO3JldHVybiJhdXRvIj09PWk/bisicHgiOnMrbisicHgifSl9KSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LnNjYWxlPWZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0aGlzKSxuPWUuZXh0ZW5kKCEwLHt9LHQpLGE9ZS5lZmZlY3RzLnNldE1vZGUocyx0Lm1vZGV8fCJlZmZlY3QiKSxvPXBhcnNlSW50KHQucGVyY2VudCwxMCl8fCgwPT09cGFyc2VJbnQodC5wZXJjZW50LDEwKT8wOiJoaWRlIj09PWE/MDoxMDApLHI9dC5kaXJlY3Rpb258fCJib3RoIixoPXQub3JpZ2luLGw9e2hlaWdodDpzLmhlaWdodCgpLHdpZHRoOnMud2lkdGgoKSxvdXRlckhlaWdodDpzLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpzLm91dGVyV2lkdGgoKX0sdT17eToiaG9yaXpvbnRhbCIhPT1yP28vMTAwOjEseDoidmVydGljYWwiIT09cj9vLzEwMDoxfTtuLmVmZmVjdD0ic2l6ZSIsbi5xdWV1ZT0hMSxuLmNvbXBsZXRlPWksImVmZmVjdCIhPT1hJiYobi5vcmlnaW49aHx8WyJtaWRkbGUiLCJjZW50ZXIiXSxuLnJlc3RvcmU9ITApLG4uZnJvbT10LmZyb218fCgic2hvdyI9PT1hP3toZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTpsKSxuLnRvPXtoZWlnaHQ6bC5oZWlnaHQqdS55LHdpZHRoOmwud2lkdGgqdS54LG91dGVySGVpZ2h0Omwub3V0ZXJIZWlnaHQqdS55LG91dGVyV2lkdGg6bC5vdXRlcldpZHRoKnUueH0sbi5mYWRlJiYoInNob3ciPT09YSYmKG4uZnJvbS5vcGFjaXR5PTAsbi50by5vcGFjaXR5PTEpLCJoaWRlIj09PWEmJihuLmZyb20ub3BhY2l0eT0xLG4udG8ub3BhY2l0eT0wKSkscy5lZmZlY3Qobil9LGUuZWZmZWN0cy5lZmZlY3QucHVmZj1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbj1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8ImhpZGUiKSxhPSJoaWRlIj09PW4sbz1wYXJzZUludCh0LnBlcmNlbnQsMTApfHwxNTAscj1vLzEwMCxoPXtoZWlnaHQ6cy5oZWlnaHQoKSx3aWR0aDpzLndpZHRoKCksb3V0ZXJIZWlnaHQ6cy5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6cy5vdXRlcldpZHRoKCl9O2UuZXh0ZW5kKHQse2VmZmVjdDoic2NhbGUiLHF1ZXVlOiExLGZhZGU6ITAsbW9kZTpuLGNvbXBsZXRlOmkscGVyY2VudDphP286MTAwLGZyb206YT9oOntoZWlnaHQ6aC5oZWlnaHQqcix3aWR0aDpoLndpZHRoKnIsb3V0ZXJIZWlnaHQ6aC5vdXRlckhlaWdodCpyLG91dGVyV2lkdGg6aC5vdXRlcldpZHRoKnJ9fSkscy5lZmZlY3QodCl9LGUuZWZmZWN0cy5lZmZlY3QucHVsc2F0ZT1mdW5jdGlvbih0LGkpe3ZhciBzLG49ZSh0aGlzKSxhPWUuZWZmZWN0cy5zZXRNb2RlKG4sdC5tb2RlfHwic2hvdyIpLG89InNob3ciPT09YSxyPSJoaWRlIj09PWEsaD1vfHwiaGlkZSI9PT1hLGw9MioodC50aW1lc3x8NSkrKGg/MTowKSx1PXQuZHVyYXRpb24vbCxkPTAsYz1uLnF1ZXVlKCkscD1jLmxlbmd0aDtmb3IoKG98fCFuLmlzKCI6dmlzaWJsZSIpKSYmKG4uY3NzKCJvcGFjaXR5IiwwKS5zaG93KCksZD0xKSxzPTE7bD5zO3MrKyluLmFuaW1hdGUoe29wYWNpdHk6ZH0sdSx0LmVhc2luZyksZD0xLWQ7bi5hbmltYXRlKHtvcGFjaXR5OmR9LHUsdC5lYXNpbmcpLG4ucXVldWUoZnVuY3Rpb24oKXtyJiZuLmhpZGUoKSxpKCl9KSxwPjEmJmMuc3BsaWNlLmFwcGx5KGMsWzEsMF0uY29uY2F0KGMuc3BsaWNlKHAsbCsxKSkpLG4uZGVxdWV1ZSgpfSxlLmVmZmVjdHMuZWZmZWN0LnNoYWtlPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbj1lKHRoaXMpLGE9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0sbz1lLmVmZmVjdHMuc2V0TW9kZShuLHQubW9kZXx8ImVmZmVjdCIpLHI9dC5kaXJlY3Rpb258fCJsZWZ0IixoPXQuZGlzdGFuY2V8fDIwLGw9dC50aW1lc3x8Myx1PTIqbCsxLGQ9TWF0aC5yb3VuZCh0LmR1cmF0aW9uL3UpLGM9InVwIj09PXJ8fCJkb3duIj09PXI/InRvcCI6ImxlZnQiLHA9InVwIj09PXJ8fCJsZWZ0Ij09PXIsZj17fSxtPXt9LGc9e30sdj1uLnF1ZXVlKCkseT12Lmxlbmd0aDtmb3IoZS5lZmZlY3RzLnNhdmUobixhKSxuLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKSxmW2NdPShwPyItPSI6Iis9IikraCxtW2NdPShwPyIrPSI6Ii09IikrMipoLGdbY109KHA/Ii09IjoiKz0iKSsyKmgsbi5hbmltYXRlKGYsZCx0LmVhc2luZykscz0xO2w+cztzKyspbi5hbmltYXRlKG0sZCx0LmVhc2luZykuYW5pbWF0ZShnLGQsdC5lYXNpbmcpO24uYW5pbWF0ZShtLGQsdC5lYXNpbmcpLmFuaW1hdGUoZixkLzIsdC5lYXNpbmcpLnF1ZXVlKGZ1bmN0aW9uKCl7ImhpZGUiPT09byYmbi5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobixhKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihuKSxpKCl9KSx5PjEmJnYuc3BsaWNlLmFwcGx5KHYsWzEsMF0uY29uY2F0KHYuc3BsaWNlKHksdSsxKSkpLG4uZGVxdWV1ZSgpfSxlLmVmZmVjdHMuZWZmZWN0LnNsaWRlPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbj1lKHRoaXMpLGE9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIndpZHRoIiwiaGVpZ2h0Il0sbz1lLmVmZmVjdHMuc2V0TW9kZShuLHQubW9kZXx8InNob3ciKSxyPSJzaG93Ij09PW8saD10LmRpcmVjdGlvbnx8ImxlZnQiLGw9InVwIj09PWh8fCJkb3duIj09PWg/InRvcCI6ImxlZnQiLHU9InVwIj09PWh8fCJsZWZ0Ij09PWgsZD17fTtlLmVmZmVjdHMuc2F2ZShuLGEpLG4uc2hvdygpLHM9dC5kaXN0YW5jZXx8blsidG9wIj09PWw/Im91dGVySGVpZ2h0Ijoib3V0ZXJXaWR0aCJdKCEwKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksciYmbi5jc3MobCx1P2lzTmFOKHMpPyItIitzOi1zOnMpLGRbbF09KHI/dT8iKz0iOiItPSI6dT8iLT0iOiIrPSIpK3Msbi5hbmltYXRlKGQse3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7ImhpZGUiPT09byYmbi5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobixhKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihuKSxpKCl9fSl9LGUuZWZmZWN0cy5lZmZlY3QudHJhbnNmZXI9ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHRoaXMpLG49ZSh0LnRvKSxhPSJmaXhlZCI9PT1uLmNzcygicG9zaXRpb24iKSxvPWUoImJvZHkiKSxyPWE/by5zY3JvbGxUb3AoKTowLGg9YT9vLnNjcm9sbExlZnQoKTowLGw9bi5vZmZzZXQoKSx1PXt0b3A6bC50b3AtcixsZWZ0OmwubGVmdC1oLGhlaWdodDpuLmlubmVySGVpZ2h0KCksd2lkdGg6bi5pbm5lcldpZHRoKCl9LGQ9cy5vZmZzZXQoKSxjPWUoIjxkaXYgY2xhc3M9J3VpLWVmZmVjdHMtdHJhbnNmZXInPjwvZGl2PiIpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKHQuY2xhc3NOYW1lKS5jc3Moe3RvcDpkLnRvcC1yLGxlZnQ6ZC5sZWZ0LWgsaGVpZ2h0OnMuaW5uZXJIZWlnaHQoKSx3aWR0aDpzLmlubmVyV2lkdGgoKSxwb3NpdGlvbjphPyJmaXhlZCI6ImFic29sdXRlIn0pLmFuaW1hdGUodSx0LmR1cmF0aW9uLHQuZWFzaW5nLGZ1bmN0aW9uKCl7Yy5yZW1vdmUoKSxpKCl9KX19KTs="></script> <link href="data:text/css,%0A%0A%2Etocify%20%7B%0Awidth%3A%2020%25%3B%0Amax%2Dheight%3A%2090%25%3B%0Aoverflow%3A%20auto%3B%0Amargin%2Dleft%3A%202%25%3B%0Aposition%3A%20fixed%3B%0Aborder%3A%201px%20solid%20%23ccc%3B%0Aborder%2Dradius%3A%206px%3B%0A%7D%0A%0A%2Etocify%20ul%2C%20%2Etocify%20li%20%7B%0Alist%2Dstyle%3A%20none%3B%0Amargin%3A%200%3B%0Apadding%3A%200%3B%0Aborder%3A%20none%3B%0Aline%2Dheight%3A%2030px%3B%0A%7D%0A%0A%2Etocify%2Dheader%20%7B%0Atext%2Dindent%3A%2010px%3B%0A%7D%0A%0A%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2020px%3B%0Adisplay%3A%20none%3B%0A%7D%0A%0A%2Etocify%2Dsubheader%20li%20%7B%0Afont%2Dsize%3A%2012px%3B%0A%7D%0A%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2030px%3B%0A%7D%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2040px%3B%0A%7D%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2050px%3B%0A%7D%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2060px%3B%0A%7D%0A%0A%2Etocify%20%2Etocify%2Ditem%20%3E%20a%2C%20%2Etocify%20%2Enav%2Dlist%20%2Enav%2Dheader%20%7B%0Amargin%3A%200px%3B%0A%7D%0A%0A%2Etocify%20%2Etocify%2Ditem%20a%2C%20%2Etocify%20%2Elist%2Dgroup%2Ditem%20%7B%0Apadding%3A%205px%3B%0A%7D%0A%2Etocify%20%2Enav%2Dpills%20%3E%20li%20%7B%0Afloat%3A%20none%3B%0A%7D%0A%0A%0A" rel="stylesheet" /> <script src="data:application/javascript;base64,LyoganF1ZXJ5IFRvY2lmeSAtIHYxLjkuMSAtIDIwMTMtMTAtMjIKICogaHR0cDovL3d3dy5ncmVnZnJhbmtvLmNvbS9qcXVlcnkudG9jaWZ5LmpzLwogKiBDb3B5cmlnaHQgKGMpIDIwMTMgR3JlZyBGcmFua287IExpY2Vuc2VkIE1JVCAqLwoKLy8gSW1tZWRpYXRlbHktSW52b2tlZCBGdW5jdGlvbiBFeHByZXNzaW9uIChJSUZFKSBbQmVuIEFsbWFuIEJsb2cgUG9zdF0oaHR0cDovL2JlbmFsbWFuLmNvbS9uZXdzLzIwMTAvMTEvaW1tZWRpYXRlbHktaW52b2tlZC1mdW5jdGlvbi1leHByZXNzaW9uLykgdGhhdCBjYWxscyBhbm90aGVyIElJRkUgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIHBsdWdpbiBsb2dpYy4gIEkgdXNlZCB0aGlzIHBhdHRlcm4gc28gdGhhdCBhbnlvbmUgdmlld2luZyB0aGlzIGNvZGUgd291bGQgbm90IGhhdmUgdG8gc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIHBhZ2UgdG8gdmlldyB0aGUgbG9jYWwgcGFyYW1ldGVycyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoZSBtYWluIElJRkUuCihmdW5jdGlvbih0b2NpZnkpIHsKCiAgICAvLyBFQ01BU2NyaXB0IDUgU3RyaWN0IE1vZGU6IFtKb2huIFJlc2lnIEJsb2cgUG9zdF0oaHR0cDovL2Vqb2huLm9yZy9ibG9nL2VjbWFzY3JpcHQtNS1zdHJpY3QtbW9kZS1qc29uLWFuZC1tb3JlLykKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAvLyBDYWxscyB0aGUgc2Vjb25kIElJRkUgYW5kIGxvY2FsbHkgcGFzc2VzIGluIHRoZSBnbG9iYWwgalF1ZXJ5LCB3aW5kb3csIGFuZCBkb2N1bWVudCBvYmplY3RzCiAgICB0b2NpZnkod2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCk7CgogIH0KCiAgLy8gTG9jYWxseSBwYXNzZXMgaW4gYGpRdWVyeWAsIHRoZSBgd2luZG93YCBvYmplY3QsIHRoZSBgZG9jdW1lbnRgIG9iamVjdCwgYW5kIGFuIGB1bmRlZmluZWRgIHZhcmlhYmxlLiAgVGhlIGBqUXVlcnlgLCBgd2luZG93YCBhbmQgYGRvY3VtZW50YCBvYmplY3RzIGFyZSBwYXNzZWQgaW4gbG9jYWxseSwgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgc2luY2UgamF2YXNjcmlwdCBmaXJzdCBzZWFyY2hlcyBmb3IgYSB2YXJpYWJsZSBtYXRjaCB3aXRoaW4gdGhlIGxvY2FsIHZhcmlhYmxlcyBzZXQgYmVmb3JlIHNlYXJjaGluZyB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBzZXQuICBBbGwgb2YgdGhlIGdsb2JhbCB2YXJpYWJsZXMgYXJlIGFsc28gcGFzc2VkIGluIGxvY2FsbHkgdG8gYmUgbWluaWZpZXIgZnJpZW5kbHkuIGB1bmRlZmluZWRgIGNhbiBiZSBwYXNzZWQgaW4gbG9jYWxseSwgYmVjYXVzZSBpdCBpcyBub3QgYSByZXNlcnZlZCB3b3JkIGluIEphdmFTY3JpcHQuCiAgKGZ1bmN0aW9uKCQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkgewoKICAgIC8vIEVDTUFTY3JpcHQgNSBTdHJpY3QgTW9kZTogW0pvaG4gUmVzaWcgQmxvZyBQb3N0XShodHRwOi8vZWpvaG4ub3JnL2Jsb2cvZWNtYXNjcmlwdC01LXN0cmljdC1tb2RlLWpzb24tYW5kLW1vcmUvKQogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciB0b2NDbGFzc05hbWUgPSAidG9jaWZ5IiwKICAgICAgdG9jQ2xhc3MgPSAiLiIgKyB0b2NDbGFzc05hbWUsCiAgICAgIHRvY0ZvY3VzQ2xhc3NOYW1lID0gInRvY2lmeS1mb2N1cyIsCiAgICAgIHRvY0hvdmVyQ2xhc3NOYW1lID0gInRvY2lmeS1ob3ZlciIsCiAgICAgIGhpZGVUb2NDbGFzc05hbWUgPSAidG9jaWZ5LWhpZGUiLAogICAgICBoaWRlVG9jQ2xhc3MgPSAiLiIgKyBoaWRlVG9jQ2xhc3NOYW1lLAogICAgICBoZWFkZXJDbGFzc05hbWUgPSAidG9jaWZ5LWhlYWRlciIsCiAgICAgIGhlYWRlckNsYXNzID0gIi4iICsgaGVhZGVyQ2xhc3NOYW1lLAogICAgICBzdWJoZWFkZXJDbGFzc05hbWUgPSAidG9jaWZ5LXN1YmhlYWRlciIsCiAgICAgIHN1YmhlYWRlckNsYXNzID0gIi4iICsgc3ViaGVhZGVyQ2xhc3NOYW1lLAogICAgICBpdGVtQ2xhc3NOYW1lID0gInRvY2lmeS1pdGVtIiwKICAgICAgaXRlbUNsYXNzID0gIi4iICsgaXRlbUNsYXNzTmFtZSwKICAgICAgZXh0ZW5kUGFnZUNsYXNzTmFtZSA9ICJ0b2NpZnktZXh0ZW5kLXBhZ2UiLAogICAgICBleHRlbmRQYWdlQ2xhc3MgPSAiLiIgKyBleHRlbmRQYWdlQ2xhc3NOYW1lOwoKICAgIC8vIENhbGxpbmcgdGhlIGpRdWVyeVVJIFdpZGdldCBGYWN0b3J5IE1ldGhvZAogICAgJC53aWRnZXQoInRvYy50b2NpZnkiLCB7CgogICAgICAvL1BsdWdpbiB2ZXJzaW9uCiAgICAgIHZlcnNpb246ICIxLjkuMSIsCgogICAgICAvLyBUaGVzZSBvcHRpb25zIHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0cwogICAgICBvcHRpb25zOiB7CgogICAgICAgIC8vICoqY29udGV4dCoqOiBBY2NlcHRzIFN0cmluZzogQW55IGpRdWVyeSBzZWxlY3RvcgogICAgICAgIC8vIFRoZSBjb250YWluZXIgZWxlbWVudCB0aGF0IGhvbGRzIGFsbCBvZiB0aGUgZWxlbWVudHMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGFibGUgb2YgY29udGVudHMKICAgICAgICBjb250ZXh0OiAiYm9keSIsCgogICAgICAgIC8vICoqaWdub3JlU2VsZWN0b3IqKjogQWNjZXB0cyBTdHJpbmc6IEFueSBqUXVlcnkgc2VsZWN0b3IKICAgICAgICAvLyBBIHNlbGVjdG9yIHRvIGFueSBlbGVtZW50IHRoYXQgd291bGQgYmUgbWF0Y2hlZCBieSBzZWxlY3RvcnMgdGhhdCB5b3Ugd2lzaCB0byBiZSBpZ25vcmVkCiAgICAgICAgaWdub3JlU2VsZWN0b3I6IG51bGwsCgogICAgICAgIC8vICoqc2VsZWN0b3JzKio6IEFjY2VwdHMgYW4gQXJyYXkgb2YgU3RyaW5nczogQW55IGpRdWVyeSBzZWxlY3RvcnMKICAgICAgICAvLyBUaGUgZWxlbWVudCdzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgVGhlIG9yZGVyIGlzIHZlcnkgaW1wb3J0YW50IHNpbmNlIGl0IHdpbGwgZGV0ZXJtaW5lIHRoZSB0YWJsZSBvZiBjb250ZW50J3MgbmVzdGluZyBzdHJ1Y3R1cmUKICAgICAgICBzZWxlY3RvcnM6ICJoMSwgaDIsIGgzIiwKCiAgICAgICAgLy8gKipzaG93QW5kSGlkZSoqOiBBY2NlcHRzIGEgYm9vbGVhbjogdHJ1ZSBvciBmYWxzZQogICAgICAgIC8vIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGVsZW1lbnRzIHNob3VsZCBiZSBzaG93biBhbmQgaGlkZGVuCiAgICAgICAgc2hvd0FuZEhpZGU6IHRydWUsCgogICAgICAgIC8vICoqc2hvd0VmZmVjdCoqOiBBY2NlcHRzIFN0cmluZzogIm5vbmUiLCAiZmFkZUluIiwgInNob3ciLCBvciAic2xpZGVEb3duIgogICAgICAgIC8vIFVzZWQgdG8gZGlzcGxheSBhbnkgb2YgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIG5lc3RlZCBpdGVtcwogICAgICAgIHNob3dFZmZlY3Q6ICJzbGlkZURvd24iLAoKICAgICAgICAvLyAqKnNob3dFZmZlY3RTcGVlZCoqOiBBY2NlcHRzIE51bWJlciAobWlsbGlzZWNvbmRzKSBvciBTdHJpbmc6ICJzbG93IiwgIm1lZGl1bSIsIG9yICJmYXN0IgogICAgICAgIC8vIFRoZSB0aW1lIGR1cmF0aW9uIG9mIHRoZSBzaG93IGFuaW1hdGlvbgogICAgICAgIHNob3dFZmZlY3RTcGVlZDogIm1lZGl1bSIsCgogICAgICAgIC8vICoqaGlkZUVmZmVjdCoqOiBBY2NlcHRzIFN0cmluZzogIm5vbmUiLCAiZmFkZU91dCIsICJoaWRlIiwgb3IgInNsaWRlVXAiCiAgICAgICAgLy8gVXNlZCB0byBoaWRlIGFueSBvZiB0aGUgdGFibGUgb2YgY29udGVudHMgbmVzdGVkIGl0ZW1zCiAgICAgICAgaGlkZUVmZmVjdDogInNsaWRlVXAiLAoKICAgICAgICAvLyAqKmhpZGVFZmZlY3RTcGVlZCoqOiBBY2NlcHRzIE51bWJlciAobWlsbGlzZWNvbmRzKSBvciBTdHJpbmc6ICJzbG93IiwgIm1lZGl1bSIsIG9yICJmYXN0IgogICAgICAgIC8vIFRoZSB0aW1lIGR1cmF0aW9uIG9mIHRoZSBoaWRlIGFuaW1hdGlvbgogICAgICAgIGhpZGVFZmZlY3RTcGVlZDogIm1lZGl1bSIsCgogICAgICAgIC8vICoqc21vb3RoU2Nyb2xsKio6IEFjY2VwdHMgYSBib29sZWFuOiB0cnVlIG9yIGZhbHNlCiAgICAgICAgLy8gRGV0ZXJtaW5lcyBpZiBhIGpRdWVyeSBhbmltYXRpb24gc2hvdWxkIGJlIHVzZWQgdG8gc2Nyb2xsIHRvIHNwZWNpZmljIHRhYmxlIG9mIGNvbnRlbnRzIGl0ZW1zIG9uIHRoZSBwYWdlCiAgICAgICAgc21vb3RoU2Nyb2xsOiB0cnVlLAoKICAgICAgICAvLyAqKnNtb290aFNjcm9sbFNwZWVkKio6IEFjY2VwdHMgTnVtYmVyIChtaWxsaXNlY29uZHMpIG9yIFN0cmluZzogInNsb3ciLCAibWVkaXVtIiwgb3IgImZhc3QiCiAgICAgICAgLy8gVGhlIHRpbWUgZHVyYXRpb24gb2YgdGhlIHNtb290aFNjcm9sbCBhbmltYXRpb24KICAgICAgICBzbW9vdGhTY3JvbGxTcGVlZDogIm1lZGl1bSIsCgogICAgICAgIC8vICoqc2Nyb2xsVG8qKjogQWNjZXB0cyBOdW1iZXIgKHBpeGVscykKICAgICAgICAvLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHRvcCBvZiBwYWdlIGFuZCB0aGUgc2VsZWN0ZWQgdGFibGUgb2YgY29udGVudHMgaXRlbSBhZnRlciB0aGUgcGFnZSBoYXMgYmVlbiBzY3JvbGxlZAogICAgICAgIHNjcm9sbFRvOiAwLAoKICAgICAgICAvLyAqKnNob3dBbmRIaWRlT25TY3JvbGwqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBEZXRlcm1pbmVzIGlmIHRhYmxlIG9mIGNvbnRlbnRzIG5lc3RlZCBpdGVtcyBzaG91bGQgYmUgc2hvd24gYW5kIGhpZGRlbiB3aGlsZSBzY3JvbGxpbmcKICAgICAgICBzaG93QW5kSGlkZU9uU2Nyb2xsOiB0cnVlLAoKICAgICAgICAvLyAqKmhpZ2hsaWdodE9uU2Nyb2xsKio6IEFjY2VwdHMgYSBib29sZWFuOiB0cnVlIG9yIGZhbHNlCiAgICAgICAgLy8gRGV0ZXJtaW5lcyBpZiB0YWJsZSBvZiBjb250ZW50cyBuZXN0ZWQgaXRlbXMgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIChzZXQgdG8gYSBkaWZmZXJlbnQgY29sb3IpIHdoaWxlIHNjcm9sbGluZwogICAgICAgIGhpZ2hsaWdodE9uU2Nyb2xsOiB0cnVlLAoKICAgICAgICAvLyAqKmhpZ2hsaWdodE9mZnNldCoqOiBBY2NlcHRzIGEgbnVtYmVyCiAgICAgICAgLy8gVGhlIG9mZnNldCBkaXN0YW5jZSBpbiBwaXhlbHMgdG8gdHJpZ2dlciB0aGUgbmV4dCBhY3RpdmUgdGFibGUgb2YgY29udGVudHMgaXRlbQogICAgICAgIGhpZ2hsaWdodE9mZnNldDogNDAsCgogICAgICAgIC8vICoqdGhlbWUqKjogQWNjZXB0cyBhIHN0cmluZzogImJvb3RzdHJhcCIsICJqcXVlcnl1aSIsIG9yICJub25lIgogICAgICAgIC8vIERldGVybWluZXMgaWYgVHdpdHRlciBCb290c3RyYXAsIGpRdWVyeVVJLCBvciBUb2NpZnkgY2xhc3NlcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHRhYmxlIG9mIGNvbnRlbnRzCiAgICAgICAgdGhlbWU6ICJib290c3RyYXAiLAoKICAgICAgICAvLyAqKmV4dGVuZFBhZ2UqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBJZiBhIHVzZXIgc2Nyb2xscyB0byB0aGUgYm90dG9tIG9mIHRoZSBwYWdlIGFuZCB0aGUgcGFnZSBpcyBub3QgdGFsbCBlbm91Z2ggdG8gc2Nyb2xsIHRvIHRoZSBsYXN0IHRhYmxlIG9mIGNvbnRlbnRzIGl0ZW0sIHRoZW4gdGhlIHBhZ2UgaGVpZ2h0IGlzIGluY3JlYXNlZAogICAgICAgIGV4dGVuZFBhZ2U6IHRydWUsCgogICAgICAgIC8vICoqZXh0ZW5kUGFnZU9mZnNldCoqOiBBY2NlcHRzIGEgbnVtYmVyOiBwaXhlbHMKICAgICAgICAvLyBIb3cgY2xvc2UgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBhIHVzZXIgbXVzdCBzY3JvbGwgYmVmb3JlIHRoZSBwYWdlIGlzIGV4dGVuZGVkCiAgICAgICAgZXh0ZW5kUGFnZU9mZnNldDogMTAwLAoKICAgICAgICAvLyAqKmhpc3RvcnkqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBBZGRzIGEgaGFzaCB0byB0aGUgcGFnZSB1cmwgdG8gbWFpbnRhaW4gaGlzdG9yeQogICAgICAgIGhpc3Rvcnk6IHRydWUsCgogICAgICAgIC8vICoqc2Nyb2xsSGlzdG9yeSoqOiBBY2NlcHRzIGEgYm9vbGVhbjogdHJ1ZSBvciBmYWxzZQogICAgICAgIC8vIEFkZHMgYSBoYXNoIHRvIHRoZSBwYWdlIHVybCwgdG8gbWFpbnRhaW4gaGlzdG9yeSwgd2hlbiBzY3JvbGxpbmcgdG8gYSBUT0MgaXRlbQogICAgICAgIHNjcm9sbEhpc3Rvcnk6IGZhbHNlLAoKICAgICAgICAvLyAqKmhhc2hHZW5lcmF0b3IqKjogSG93IHRoZSBoYXNoIHZhbHVlICh0aGUgYW5jaG9yIHNlZ21lbnQgb2YgdGhlIFVSTCwgZm9sbG93aW5nIHRoZQogICAgICAgIC8vICMgY2hhcmFjdGVyKSB3aWxsIGJlIGdlbmVyYXRlZC4KICAgICAgICAvLwogICAgICAgIC8vICJjb21wYWN0IiAoZGVmYXVsdCkgLSAjQ29tcHJlc3Nlc0V2ZXJ5dGhpbmdUb2dldGhlcgogICAgICAgIC8vICJwcmV0dHkiIC0gI2xvb2tzLWxpa2UtYS1uaWNlLXVybC1hbmQtaXMtZWFzaWx5LXJlYWRhYmxlCiAgICAgICAgLy8gZnVuY3Rpb24odGV4dCwgZWxlbWVudCl7fSAtIFlvdXIgb3duIGhhc2ggZ2VuZXJhdGlvbiBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIHRleHQgYXMgYW4KICAgICAgICAvLyBhcmd1bWVudCwgYW5kIHJldHVybnMgdGhlIGhhc2ggdmFsdWUuCiAgICAgICAgaGFzaEdlbmVyYXRvcjogImNvbXBhY3QiLAoKICAgICAgICAvLyAqKmhpZ2hsaWdodERlZmF1bHQqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBTZXQncyB0aGUgZmlyc3QgVE9DIGl0ZW0gYXMgYWN0aXZlIGlmIG5vIG90aGVyIFRPQyBpdGVtIGlzIGFjdGl2ZS4KICAgICAgICBoaWdobGlnaHREZWZhdWx0OiB0cnVlCgogICAgICB9LAoKICAgICAgLy8gX0NyZWF0ZQogICAgICAvLyAtLS0tLS0tCiAgICAgIC8vICAgICAgQ29uc3RydWN0cyB0aGUgcGx1Z2luLiAgT25seSBjYWxsZWQgb25jZS4KICAgICAgX2NyZWF0ZTogZnVuY3Rpb24oKSB7CgogICAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICAgc2VsZi5leHRlbmRQYWdlU2Nyb2xsID0gdHJ1ZTsKCiAgICAgICAgLy8gSW50ZXJuYWwgYXJyYXkgdGhhdCBrZWVwcyB0cmFjayBvZiBhbGwgVE9DIGl0ZW1zIChIZWxwcyB0byByZWNvZ25pemUgaWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBUT0MgaXRlbSBzdHJpbmdzKQogICAgICAgIHNlbGYuaXRlbXMgPSBbXTsKCiAgICAgICAgLy8gR2VuZXJhdGVzIHRoZSBIVE1MIGZvciB0aGUgZHluYW1pYyB0YWJsZSBvZiBjb250ZW50cwogICAgICAgIHNlbGYuX2dlbmVyYXRlVG9jKCk7CgogICAgICAgIC8vIEFkZHMgQ1NTIGNsYXNzZXMgdG8gdGhlIG5ld2x5IGdlbmVyYXRlZCB0YWJsZSBvZiBjb250ZW50cyBIVE1MCiAgICAgICAgc2VsZi5fYWRkQ1NTQ2xhc3NlcygpOwoKICAgICAgICBzZWxmLndlYmtpdCA9IChmdW5jdGlvbigpIHsKCiAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHdpbmRvdykgewoKICAgICAgICAgICAgaWYgKHByb3ApIHsKCiAgICAgICAgICAgICAgaWYgKHByb3AudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJ3ZWJraXQiKSAhPT0gLTEpIHsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIH0oKSk7CgogICAgICAgIC8vIEFkZHMgalF1ZXJ5IGV2ZW50IGhhbmRsZXJzIHRvIHRoZSBuZXdseSBnZW5lcmF0ZWQgdGFibGUgb2YgY29udGVudHMKICAgICAgICBzZWxmLl9zZXRFdmVudEhhbmRsZXJzKCk7CgogICAgICAgIC8vIEJpbmRpbmcgdG8gdGhlIFdpbmRvdyBsb2FkIGV2ZW50IHRvIG1ha2Ugc3VyZSB0aGUgY29ycmVjdCBzY3JvbGxUb3AgaXMgY2FsY3VsYXRlZAogICAgICAgICQod2luZG93KS5sb2FkKGZ1bmN0aW9uKCkgewoKICAgICAgICAgIC8vIFNldHMgdGhlIGFjdGl2ZSBUT0MgaXRlbQogICAgICAgICAgc2VsZi5fc2V0QWN0aXZlRWxlbWVudCh0cnVlKTsKCiAgICAgICAgICAvLyBPbmNlIGFsbCBhbmltYXRpb25zIG9uIHRoZSBwYWdlIGFyZSBjb21wbGV0ZSwgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZAogICAgICAgICAgJCgiaHRtbCwgYm9keSIpLnByb21pc2UoKS5kb25lKGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgc2VsZi5leHRlbmRQYWdlU2Nyb2xsID0gZmFsc2U7CgogICAgICAgICAgICB9LCAwKTsKCiAgICAgICAgICB9KTsKCiAgICAgICAgfSk7CgogICAgICB9LAoKICAgICAgLy8gX2dlbmVyYXRlVG9jCiAgICAgIC8vIC0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEdlbmVyYXRlcyB0aGUgSFRNTCBmb3IgdGhlIGR5bmFtaWMgdGFibGUgb2YgY29udGVudHMKICAgICAgX2dlbmVyYXRlVG9jOiBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gX0xvY2FsIHZhcmlhYmxlc18KCiAgICAgICAgLy8gU3RvcmVzIHRoZSBwbHVnaW4gY29udGV4dCBpbiB0aGUgc2VsZiB2YXJpYWJsZQogICAgICAgIHZhciBzZWxmID0gdGhpcywKCiAgICAgICAgICAvLyBBbGwgb2YgdGhlIEhUTUwgdGFncyBmb3VuZCB3aXRoaW4gdGhlIGNvbnRleHQgcHJvdmlkZWQgKGkuZS4gYm9keSkgdGhhdCBtYXRjaCB0aGUgdG9wIGxldmVsIGpRdWVyeSBzZWxlY3RvciBhYm92ZQogICAgICAgICAgZmlyc3RFbGVtLAoKICAgICAgICAgIC8vIEluc3RhbnRpYXRlZCB2YXJpYWJsZSB0aGF0IHdpbGwgc3RvcmUgdGhlIHRvcCBsZXZlbCBuZXdseSBjcmVhdGVkIHVub3JkZXJlZCBsaXN0IERPTSBlbGVtZW50CiAgICAgICAgICB1bCwKICAgICAgICAgIGlnbm9yZVNlbGVjdG9yID0gc2VsZi5vcHRpb25zLmlnbm9yZVNlbGVjdG9yOwoKCiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBlbGVtZW50IHRvIHN0YXJ0IHRoZSB0b2Mgd2l0aAogICAgICAgIC8vIGdldCBhbGwgdGhlIHRvcCBsZXZlbCBzZWxlY3RvcnMKICAgICAgICBmaXJzdEVsZW0gPSBbXTsKICAgICAgICB2YXIgc2VsZWN0b3JzID0gdGhpcy5vcHRpb25zLnNlbGVjdG9ycy5yZXBsYWNlKC8gL2csICIiKS5zcGxpdCgiLCIpOwogICAgICAgIC8vIGZpbmQgdGhlIGZpcnN0IHNldCB0aGF0IGhhdmUgYXQgbGVhc3Qgb25lIG5vbi1pZ25vcmVkIGVsZW1lbnQKICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgZm91bmRTZWxlY3RvcnMgPSAkKHRoaXMub3B0aW9ucy5jb250ZXh0KS5maW5kKHNlbGVjdG9yc1tpXSk7CiAgICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IGZvdW5kU2VsZWN0b3JzLmxlbmd0aDsgcysrKSB7CiAgICAgICAgICAgIGlmICghJChmb3VuZFNlbGVjdG9yc1tzXSkuaXMoaWdub3JlU2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgZmlyc3RFbGVtID0gZm91bmRTZWxlY3RvcnM7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChmaXJzdEVsZW0ubGVuZ3RoPiAwKQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmICghZmlyc3RFbGVtLmxlbmd0aCkgewoKICAgICAgICAgIHNlbGYuZWxlbWVudC5hZGRDbGFzcyhoaWRlVG9jQ2xhc3NOYW1lKTsKCiAgICAgICAgICByZXR1cm47CgogICAgICAgIH0KCiAgICAgICAgc2VsZi5lbGVtZW50LmFkZENsYXNzKHRvY0NsYXNzTmFtZSk7CgogICAgICAgIC8vIExvb3BzIHRocm91Z2ggZWFjaCB0b3AgbGV2ZWwgc2VsZWN0b3IKICAgICAgICBmaXJzdEVsZW0uZWFjaChmdW5jdGlvbihpbmRleCkgewoKICAgICAgICAgIC8vSWYgdGhlIGVsZW1lbnQgbWF0Y2hlcyB0aGUgaWdub3JlU2VsZWN0b3IgdGhlbiB3ZSBza2lwIGl0CiAgICAgICAgICBpZiAoJCh0aGlzKS5pcyhpZ25vcmVTZWxlY3RvcikpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIENyZWF0ZXMgYW4gdW5vcmRlcmVkIGxpc3QgSFRNTCBlbGVtZW50IGFuZCBhZGRzIGEgZHluYW1pYyBJRCBhbmQgc3RhbmRhcmQgY2xhc3MgbmFtZQogICAgICAgICAgdWwgPSAkKCI8dWwvPiIsIHsKICAgICAgICAgICAgImlkIjogaGVhZGVyQ2xhc3NOYW1lICsgaW5kZXgsCiAgICAgICAgICAgICJjbGFzcyI6IGhlYWRlckNsYXNzTmFtZQogICAgICAgICAgfSkuCgogICAgICAgICAgLy8gQXBwZW5kcyBhIHRvcCBsZXZlbCBsaXN0IGl0ZW0gSFRNTCBlbGVtZW50IHRvIHRoZSBwcmV2aW91c2x5IGNyZWF0ZWQgSFRNTCBoZWFkZXIKICAgICAgICAgIGFwcGVuZChzZWxmLl9uZXN0RWxlbWVudHMoJCh0aGlzKSwgaW5kZXgpKTsKCiAgICAgICAgICAvLyBBZGQgdGhlIGNyZWF0ZWQgdW5vcmRlcmVkIGxpc3QgZWxlbWVudCB0byB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgICAgc2VsZi5lbGVtZW50LmFwcGVuZCh1bCk7CgogICAgICAgICAgLy8gRmluZHMgYWxsIG9mIHRoZSBIVE1MIHRhZ3MgYmV0d2VlbiB0aGUgaGVhZGVyIGFuZCBzdWJoZWFkZXIgZWxlbWVudHMKICAgICAgICAgICQodGhpcykubmV4dFVudGlsKHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkuZWFjaChmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBuZXN0ZWQgc3ViaGVhZGVyIGVsZW1lbWVudHMKICAgICAgICAgICAgaWYgKCQodGhpcykuZmluZChzZWxmLm9wdGlvbnMuc2VsZWN0b3JzKS5sZW5ndGggPT09IDApIHsKCiAgICAgICAgICAgICAgLy8gTG9vcHMgdGhyb3VnaCBhbGwgb2YgdGhlIHN1YmhlYWRlciBlbGVtZW50cwogICAgICAgICAgICAgICQodGhpcykuZmlsdGVyKHNlbGYub3B0aW9ucy5zZWxlY3RvcnMpLmVhY2goZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAgICAgLy9JZiB0aGUgZWxlbWVudCBtYXRjaGVzIHRoZSBpZ25vcmVTZWxlY3RvciB0aGVuIHdlIHNraXAgaXQKICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmlzKGlnbm9yZVNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2VsZi5fYXBwZW5kU3ViaGVhZGVycy5jYWxsKHRoaXMsIHNlbGYsIHVsKTsKCiAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbmVzdGVkIHN1YmhlYWRlciBlbGVtZW50cwogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgLy8gTG9vcHMgdGhyb3VnaCBhbGwgb2YgdGhlIHN1YmhlYWRlciBlbGVtZW50cwogICAgICAgICAgICAgICQodGhpcykuZmluZChzZWxmLm9wdGlvbnMuc2VsZWN0b3JzKS5lYWNoKGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIC8vSWYgdGhlIGVsZW1lbnQgbWF0Y2hlcyB0aGUgaWdub3JlU2VsZWN0b3IgdGhlbiB3ZSBza2lwIGl0CiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5pcyhpZ25vcmVTZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNlbGYuX2FwcGVuZFN1YmhlYWRlcnMuY2FsbCh0aGlzLCBzZWxmLCB1bCk7CgogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgfQoKICAgICAgICAgIH0pOwoKICAgICAgICB9KTsKCiAgICAgIH0sCgogICAgICBfc2V0QWN0aXZlRWxlbWVudDogZnVuY3Rpb24ocGFnZWxvYWQpIHsKCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAoKICAgICAgICAgIGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSksCgogICAgICAgICAgZWxlbSA9IHNlbGYuZWxlbWVudC5maW5kKCdsaVtkYXRhLXVuaXF1ZT0iJyArIGhhc2ggKyAnIl0nKTsKCiAgICAgICAgaWYgKGhhc2gubGVuZ3RoKSB7CgogICAgICAgICAgLy8gUmVtb3ZlcyBoaWdobGlnaHRpbmcgZnJvbSBhbGwgb2YgdGhlIGxpc3QgaXRlbSdzCiAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZCgiLiIgKyBzZWxmLmZvY3VzQ2xhc3MpLnJlbW92ZUNsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgLy8gSGlnaGxpZ2h0cyB0aGUgY3VycmVudCBsaXN0IGl0ZW0gdGhhdCB3YXMgY2xpY2tlZAogICAgICAgICAgZWxlbS5hZGRDbGFzcyhzZWxmLmZvY3VzQ2xhc3MpOwoKICAgICAgICAgIC8vIFRyaWdnZXJzIHRoZSBjbGljayBldmVudCBvbiB0aGUgY3VycmVudGx5IGZvY3VzZWQgVE9DIGl0ZW0KICAgICAgICAgIGVsZW0uY2xpY2soKTsKCiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAvLyBSZW1vdmVzIGhpZ2hsaWdodGluZyBmcm9tIGFsbCBvZiB0aGUgbGlzdCBpdGVtJ3MKICAgICAgICAgIHNlbGYuZWxlbWVudC5maW5kKCIuIiArIHNlbGYuZm9jdXNDbGFzcykucmVtb3ZlQ2xhc3Moc2VsZi5mb2N1c0NsYXNzKTsKCiAgICAgICAgICBpZiAoIWhhc2gubGVuZ3RoICYmIHBhZ2Vsb2FkICYmIHNlbGYub3B0aW9ucy5oaWdobGlnaHREZWZhdWx0KSB7CgogICAgICAgICAgICAvLyBIaWdobGlnaHRzIHRoZSBmaXJzdCBUT0MgaXRlbSBpZiBubyBvdGhlciBpdGVtcyBhcmUgaGlnaGxpZ2h0ZWQKICAgICAgICAgICAgc2VsZi5lbGVtZW50LmZpbmQoaXRlbUNsYXNzKS5maXJzdCgpLmFkZENsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmOwoKICAgICAgfSwKCiAgICAgIC8vIF9uZXN0RWxlbWVudHMKICAgICAgLy8gLS0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEhlbHBzIGNyZWF0ZSB0aGUgdGFibGUgb2YgY29udGVudHMgbGlzdCBieSBhcHBlbmRpbmcgbmVzdGVkIGxpc3QgaXRlbXMKICAgICAgX25lc3RFbGVtZW50czogZnVuY3Rpb24oc2VsZiwgaW5kZXgpIHsKCiAgICAgICAgdmFyIGFyciwgaXRlbSwgaGFzaFZhbHVlOwoKICAgICAgICBhcnIgPSAkLmdyZXAodGhpcy5pdGVtcywgZnVuY3Rpb24oaXRlbSkgewoKICAgICAgICAgIHJldHVybiBpdGVtID09PSBzZWxmLnRleHQoKTsKCiAgICAgICAgfSk7CgogICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBkdXBsaWNhdGUgVE9DIGl0ZW0KICAgICAgICBpZiAoYXJyLmxlbmd0aCkgewoKICAgICAgICAgIC8vIEFkZHMgdGhlIGN1cnJlbnQgVE9DIGl0ZW0gdGV4dCBhbmQgaW5kZXggKGZvciBzbGlnaHQgcmFuZG9taXphdGlvbikgdG8gdGhlIGludGVybmFsIGFycmF5CiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goc2VsZi50ZXh0KCkgKyBpbmRleCk7CgogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlcmUgbm90IGEgZHVwbGljYXRlIFRPQyBpdGVtCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgLy8gQWRkcyB0aGUgY3VycmVudCBUT0MgaXRlbSB0ZXh0IHRvIHRoZSBpbnRlcm5hbCBhcnJheQogICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHNlbGYudGV4dCgpKTsKCiAgICAgICAgfQoKICAgICAgICBoYXNoVmFsdWUgPSB0aGlzLl9nZW5lcmF0ZUhhc2hWYWx1ZShhcnIsIHNlbGYsIGluZGV4KTsKCiAgICAgICAgLy8gQXBwZW5kcyBhIGxpc3QgaXRlbSBIVE1MIGVsZW1lbnQgdG8gdGhlIGxhc3QgdW5vcmRlcmVkIGxpc3QgSFRNTCBlbGVtZW50IGZvdW5kIHdpdGhpbiB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgIGl0ZW0gPSAkKCI8bGkvPiIsIHsKCiAgICAgICAgICAvLyBTZXRzIGEgY29tbW9uIGNsYXNzIG5hbWUgdG8gdGhlIGxpc3QgaXRlbQogICAgICAgICAgImNsYXNzIjogaXRlbUNsYXNzTmFtZSwKCiAgICAgICAgICAiZGF0YS11bmlxdWUiOiBoYXNoVmFsdWUKCiAgICAgICAgfSk7CgogICAgICAgIGlmICh0aGlzLm9wdGlvbnMudGhlbWUgIT09ICJib290c3RyYXAzIikgewoKICAgICAgICAgIGl0ZW0uYXBwZW5kKCQoIjxhLz4iLCB7CgogICAgICAgICAgICAiaHRtbCI6IHNlbGYuaHRtbCgpCgogICAgICAgICAgfSkpOwoKICAgICAgICB9IGVsc2UgewoKICAgICAgICAgIGl0ZW0uaHRtbChzZWxmLmh0bWwoKSk7CgogICAgICAgIH0KCiAgICAgICAgLy8gQWRkcyBhbiBIVE1MIGFuY2hvciB0YWcgYmVmb3JlIHRoZSBjdXJyZW50bHkgdHJhdmVyc2VkIEhUTUwgZWxlbWVudAogICAgICAgIHNlbGYuYmVmb3JlKCQoIjxkaXYvPiIsIHsKCiAgICAgICAgICAvLyBTZXRzIGEgbmFtZSBhdHRyaWJ1dGUgb24gdGhlIGFuY2hvciB0YWcgdG8gdGhlIHRleHQgb2YgdGhlIGN1cnJlbnRseSB0cmF2ZXJzZWQgSFRNTCBlbGVtZW50IChhbHNvIG1ha2luZyBzdXJlIHRoYXQgYWxsIHdoaXRlc3BhY2UgaXMgcmVwbGFjZWQgd2l0aCBhbiB1bmRlcnNjb3JlKQogICAgICAgICAgIm5hbWUiOiBoYXNoVmFsdWUsCgogICAgICAgICAgImRhdGEtdW5pcXVlIjogaGFzaFZhbHVlCgogICAgICAgIH0pKTsKCiAgICAgICAgcmV0dXJuIGl0ZW07CgogICAgICB9LAoKICAgICAgLy8gX2dlbmVyYXRlSGFzaFZhbHVlCiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEdlbmVyYXRlcyB0aGUgaGFzaCB2YWx1ZSB0aGF0IHdpbGwgYmUgdXNlZCB0byByZWZlciB0byBlYWNoIGl0ZW0uCiAgICAgIF9nZW5lcmF0ZUhhc2hWYWx1ZTogZnVuY3Rpb24oYXJyLCBzZWxmLCBpbmRleCkgewoKICAgICAgICB2YXIgaGFzaFZhbHVlID0gIiIsCiAgICAgICAgICBoYXNoR2VuZXJhdG9yT3B0aW9uID0gdGhpcy5vcHRpb25zLmhhc2hHZW5lcmF0b3I7CgogICAgICAgIGlmIChoYXNoR2VuZXJhdG9yT3B0aW9uID09PSAicHJldHR5IikgewoKICAgICAgICAgIC8vIHByZXR0aWZ5IHRoZSB0ZXh0CiAgICAgICAgICBoYXNoVmFsdWUgPSBzZWxmLnRleHQoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzL2csICItIik7CgogICAgICAgICAgLy8gZml4IGRvdWJsZSBoeXBoZW5zCiAgICAgICAgICB3aGlsZSAoaGFzaFZhbHVlLmluZGV4T2YoIi0tIikgPiAtMSkgewogICAgICAgICAgICBoYXNoVmFsdWUgPSBoYXNoVmFsdWUucmVwbGFjZSgvLS0vZywgIi0iKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBmaXggY29sb24tc3BhY2UgaW5zdGFuY2VzCiAgICAgICAgICB3aGlsZSAoaGFzaFZhbHVlLmluZGV4T2YoIjotIikgPiAtMSkgewogICAgICAgICAgICBoYXNoVmFsdWUgPSBoYXNoVmFsdWUucmVwbGFjZSgvOi0vZywgIi0iKTsKICAgICAgICAgIH0KCiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaGFzaEdlbmVyYXRvck9wdGlvbiA9PT0gImZ1bmN0aW9uIikgewoKICAgICAgICAgIC8vIGNhbGwgdGhlIGZ1bmN0aW9uCiAgICAgICAgICBoYXNoVmFsdWUgPSBoYXNoR2VuZXJhdG9yT3B0aW9uKHNlbGYudGV4dCgpLCBzZWxmKTsKCiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAvLyBjb21wYWN0IC0gdGhlIGRlZmF1bHQKICAgICAgICAgIGhhc2hWYWx1ZSA9IHNlbGYudGV4dCgpLnJlcGxhY2UoL1xzL2csICIiKTsKCiAgICAgICAgfQoKICAgICAgICAvLyBhZGQgdGhlIGluZGV4IGlmIHdlIG5lZWQgdG8KICAgICAgICBpZiAoYXJyLmxlbmd0aCkgewogICAgICAgICAgaGFzaFZhbHVlICs9ICIiICsgaW5kZXg7CiAgICAgICAgfQoKICAgICAgICAvLyByZXR1cm4gdGhlIHZhbHVlCiAgICAgICAgcmV0dXJuIGhhc2hWYWx1ZTsKCiAgICAgIH0sCgogICAgICAvLyBfYXBwZW5kRWxlbWVudHMKICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tCiAgICAgIC8vICAgICAgSGVscHMgY3JlYXRlIHRoZSB0YWJsZSBvZiBjb250ZW50cyBsaXN0IGJ5IGFwcGVuZGluZyBzdWJoZWFkZXIgZWxlbWVudHMKCiAgICAgIF9hcHBlbmRTdWJoZWFkZXJzOiBmdW5jdGlvbihzZWxmLCB1bCkgewoKICAgICAgICAvLyBUaGUgY3VycmVudCBlbGVtZW50IGluZGV4CiAgICAgICAgdmFyIGluZGV4ID0gJCh0aGlzKS5pbmRleChzZWxmLm9wdGlvbnMuc2VsZWN0b3JzKSwKCiAgICAgICAgICAvLyBGaW5kcyB0aGUgcHJldmlvdXMgaGVhZGVyIERPTSBlbGVtZW50CiAgICAgICAgICBwcmV2aW91c0hlYWRlciA9ICQoc2VsZi5vcHRpb25zLnNlbGVjdG9ycykuZXEoaW5kZXggLSAxKSwKCiAgICAgICAgICBjdXJyZW50VGFnTmFtZSA9ICskKHRoaXMpLnByb3AoInRhZ05hbWUiKS5jaGFyQXQoMSksCgogICAgICAgICAgcHJldmlvdXNUYWdOYW1lID0gK3ByZXZpb3VzSGVhZGVyLnByb3AoInRhZ05hbWUiKS5jaGFyQXQoMSksCgogICAgICAgICAgbGFzdFN1YmhlYWRlcjsKCiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgaGVhZGVyIERPTSBlbGVtZW50IGlzIHNtYWxsZXIgdGhhbiB0aGUgcHJldmlvdXMgaGVhZGVyIERPTSBlbGVtZW50IG9yIHRoZSBmaXJzdCBzdWJoZWFkZXIKICAgICAgICBpZiAoY3VycmVudFRhZ05hbWUgPCBwcmV2aW91c1RhZ05hbWUpIHsKCiAgICAgICAgICAvLyBTZWxlY3RzIHRoZSBsYXN0IHVub3JkZXJlZCBsaXN0IEhUTUwgZm91bmQgd2l0aGluIHRoZSBIVE1MIGVsZW1lbnQgY2FsbGluZyB0aGUgcGx1Z2luCiAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZChzdWJoZWFkZXJDbGFzcyArICJbZGF0YS10YWc9IiArIGN1cnJlbnRUYWdOYW1lICsgIl0iKS5sYXN0KCkuYXBwZW5kKHNlbGYuX25lc3RFbGVtZW50cygkKHRoaXMpLCBpbmRleCkpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGhlYWRlciBET00gZWxlbWVudCBpcyB0aGUgc2FtZSB0eXBlIG9mIGhlYWRlcihlZy4gaDQpIGFzIHRoZSBwcmV2aW91cyBoZWFkZXIgRE9NIGVsZW1lbnQKICAgICAgICBlbHNlIGlmIChjdXJyZW50VGFnTmFtZSA9PT0gcHJldmlvdXNUYWdOYW1lKSB7CgogICAgICAgICAgdWwuZmluZChpdGVtQ2xhc3MpLmxhc3QoKS5hZnRlcihzZWxmLl9uZXN0RWxlbWVudHMoJCh0aGlzKSwgaW5kZXgpKTsKCiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAvLyBTZWxlY3RzIHRoZSBsYXN0IHVub3JkZXJlZCBsaXN0IEhUTUwgZm91bmQgd2l0aGluIHRoZSBIVE1MIGVsZW1lbnQgY2FsbGluZyB0aGUgcGx1Z2luCiAgICAgICAgICB1bC5maW5kKGl0ZW1DbGFzcykubGFzdCgpLgoKICAgICAgICAgIC8vIEFwcGVuZHMgYW4gdW5vcmRlcmVkTGlzdCBIVE1MIGVsZW1lbnQgdG8gdGhlIGR5bmFtaWMgYHVub3JkZXJlZExpc3RgIHZhcmlhYmxlIGFuZCBzZXRzIGEgY29tbW9uIGNsYXNzIG5hbWUKICAgICAgICAgIGFmdGVyKCQoIjx1bC8+IiwgewoKICAgICAgICAgICAgImNsYXNzIjogc3ViaGVhZGVyQ2xhc3NOYW1lLAoKICAgICAgICAgICAgImRhdGEtdGFnIjogY3VycmVudFRhZ05hbWUKCiAgICAgICAgICB9KSkubmV4dChzdWJoZWFkZXJDbGFzcykuCgogICAgICAgICAgLy8gQXBwZW5kcyBhIGxpc3QgaXRlbSBIVE1MIGVsZW1lbnQgdG8gdGhlIGxhc3QgdW5vcmRlcmVkIGxpc3QgSFRNTCBlbGVtZW50IGZvdW5kIHdpdGhpbiB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgICAgYXBwZW5kKHNlbGYuX25lc3RFbGVtZW50cygkKHRoaXMpLCBpbmRleCkpOwogICAgICAgIH0KCiAgICAgIH0sCgogICAgICAvLyBfc2V0RXZlbnRIYW5kbGVycwogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tCiAgICAgIC8vICAgICAgQWRkcyBqUXVlcnkgZXZlbnQgaGFuZGxlcnMgdG8gdGhlIG5ld2x5IGdlbmVyYXRlZCB0YWJsZSBvZiBjb250ZW50cwogICAgICBfc2V0RXZlbnRIYW5kbGVyczogZnVuY3Rpb24oKSB7CgogICAgICAgIC8vIF9Mb2NhbCB2YXJpYWJsZXNfCgogICAgICAgIC8vIFN0b3JlcyB0aGUgcGx1Z2luIGNvbnRleHQgaW4gdGhlIHNlbGYgdmFyaWFibGUKICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCgogICAgICAgICAgLy8gSW5zdGFudGlhdGVzIGEgbmV3IHZhcmlhYmxlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGhvbGQgYSBzcGVjaWZpYyBlbGVtZW50J3MgY29udGV4dAogICAgICAgICAgJHNlbGYsCgogICAgICAgICAgLy8gSW5zdGFudGlhdGVzIGEgbmV3IHZhcmlhYmxlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgc21vb3RoU2Nyb2xsIGFuaW1hdGlvbiB0aW1lIGR1cmF0aW9uCiAgICAgICAgICBkdXJhdGlvbjsKCiAgICAgICAgLy8gRXZlbnQgZGVsZWdhdGlvbiB0aGF0IGxvb2tzIGZvciBhbnkgY2xpY2tzIG9uIGxpc3QgaXRlbSBlbGVtZW50cyBpbnNpZGUgb2YgdGhlIEhUTUwgZWxlbWVudCBjYWxsaW5nIHRoZSBwbHVnaW4KICAgICAgICB0aGlzLmVsZW1lbnQub24oImNsaWNrLnRvY2lmeSIsICJsaSIsIGZ1bmN0aW9uKGV2ZW50KSB7CgogICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5oaXN0b3J5KSB7CgogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICQodGhpcykuYXR0cigiZGF0YS11bmlxdWUiKTsKCiAgICAgICAgICB9CgogICAgICAgICAgLy8gUmVtb3ZlcyBoaWdobGlnaHRpbmcgZnJvbSBhbGwgb2YgdGhlIGxpc3QgaXRlbSdzCiAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZCgiLiIgKyBzZWxmLmZvY3VzQ2xhc3MpLnJlbW92ZUNsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgLy8gSGlnaGxpZ2h0cyB0aGUgY3VycmVudCBsaXN0IGl0ZW0gdGhhdCB3YXMgY2xpY2tlZAogICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhzZWxmLmZvY3VzQ2xhc3MpOwoKICAgICAgICAgIC8vIElmIHRoZSBzaG93QW5kSGlkZSBvcHRpb24gaXMgdHJ1ZQogICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5zaG93QW5kSGlkZSkgewoKICAgICAgICAgICAgdmFyIGVsZW0gPSAkKCdsaVtkYXRhLXVuaXF1ZT0iJyArICQodGhpcykuYXR0cigiZGF0YS11bmlxdWUiKSArICciXScpOwoKICAgICAgICAgICAgc2VsZi5fdHJpZ2dlclNob3coZWxlbSk7CgogICAgICAgICAgfQoKICAgICAgICAgIHNlbGYuX3Njcm9sbFRvKCQodGhpcykpOwoKICAgICAgICB9KTsKCiAgICAgICAgLy8gTW91c2VlbnRlciBhbmQgTW91c2VsZWF2ZSBldmVudCBoYW5kbGVycyBmb3IgdGhlIGxpc3QgaXRlbSdzIHdpdGhpbiB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgIHRoaXMuZWxlbWVudC5maW5kKCJsaSIpLm9uKHsKCiAgICAgICAgICAvLyBNb3VzZWVudGVyIGV2ZW50IGhhbmRsZXIKICAgICAgICAgICJtb3VzZWVudGVyLnRvY2lmeSI6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgLy8gQWRkcyBhIGhvdmVyIENTUyBjbGFzcyB0byB0aGUgY3VycmVudCBsaXN0IGl0ZW0KICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhzZWxmLmhvdmVyQ2xhc3MpOwoKICAgICAgICAgICAgLy8gTWFrZXMgc3VyZSB0aGUgY3Vyc29yIGlzIHNldCB0byB0aGUgcG9pbnRlciBpY29uCiAgICAgICAgICAgICQodGhpcykuY3NzKCJjdXJzb3IiLCAicG9pbnRlciIpOwoKICAgICAgICAgIH0sCgogICAgICAgICAgLy8gTW91c2VsZWF2ZSBldmVudCBoYW5kbGVyCiAgICAgICAgICAibW91c2VsZWF2ZS50b2NpZnkiOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMudGhlbWUgIT09ICJib290c3RyYXAiKSB7CgogICAgICAgICAgICAgIC8vIFJlbW92ZXMgdGhlIGhvdmVyIENTUyBjbGFzcyBmcm9tIHRoZSBjdXJyZW50IGxpc3QgaXRlbQogICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3Moc2VsZi5ob3ZlckNsYXNzKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIG9ubHkgYXR0YWNoIGhhbmRsZXIgaWYgbmVlZGVkIChleHBlbnNpdmUgaW4gSUUpCiAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5leHRlbmRQYWdlIHx8IHNlbGYub3B0aW9ucy5oaWdobGlnaHRPblNjcm9sbCB8fCBzZWxmLm9wdGlvbnMuc2Nyb2xsSGlzdG9yeSB8fCBzZWxmLm9wdGlvbnMuc2hvd0FuZEhpZGVPblNjcm9sbCkgewogICAgICAgICAgLy8gV2luZG93IHNjcm9sbCBldmVudCBoYW5kbGVyCiAgICAgICAgICAkKHdpbmRvdykub24oInNjcm9sbC50b2NpZnkiLCBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIC8vIE9uY2UgYWxsIGFuaW1hdGlvbnMgb24gdGhlIHBhZ2UgYXJlIGNvbXBsZXRlLCB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCiAgICAgICAgICAgICQoImh0bWwsIGJvZHkiKS5wcm9taXNlKCkuZG9uZShmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgLy8gTG9jYWwgdmFyaWFibGVzCgogICAgICAgICAgICAgIC8vIFN0b3JlcyBob3cgZmFyIHRoZSB1c2VyIGhhcyBzY3JvbGxlZAogICAgICAgICAgICAgIHZhciB3aW5TY3JvbGxUb3AgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCksCgogICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRoZSBoZWlnaHQgb2YgdGhlIHdpbmRvdwogICAgICAgICAgICAgICAgd2luSGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpLAoKICAgICAgICAgICAgICAgIC8vIFN0b3JlcyB0aGUgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudAogICAgICAgICAgICAgICAgZG9jSGVpZ2h0ID0gJChkb2N1bWVudCkuaGVpZ2h0KCksCgogICAgICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gJCgiYm9keSIpWzBdLnNjcm9sbEhlaWdodCwKCiAgICAgICAgICAgICAgICAvLyBJbnN0YW50aWF0ZXMgYSB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBob2xkIGEgc2VsZWN0ZWQgSFRNTCBlbGVtZW50CiAgICAgICAgICAgICAgICBlbGVtLAoKICAgICAgICAgICAgICAgIGxhc3RFbGVtLAoKICAgICAgICAgICAgICAgIGxhc3RFbGVtT2Zmc2V0LAoKICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtOwoKICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmV4dGVuZFBhZ2UpIHsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBhbmQgdGhlIGxhc3QgdG9jIGl0ZW0gaXMgbm90IGZvY3VzZWQKICAgICAgICAgICAgICAgIGlmICgoc2VsZi53ZWJraXQgJiYgd2luU2Nyb2xsVG9wID49IHNjcm9sbEhlaWdodCAtIHdpbkhlaWdodCAtIHNlbGYub3B0aW9ucy5leHRlbmRQYWdlT2Zmc2V0KSB8fCAoIXNlbGYud2Via2l0ICYmIHdpbkhlaWdodCArIHdpblNjcm9sbFRvcCA+IGRvY0hlaWdodCAtIHNlbGYub3B0aW9ucy5leHRlbmRQYWdlT2Zmc2V0KSkgewoKICAgICAgICAgICAgICAgICAgaWYgKCEkKGV4dGVuZFBhZ2VDbGFzcykubGVuZ3RoKSB7CgogICAgICAgICAgICAgICAgICAgIGxhc3RFbGVtID0gJCgnZGl2W2RhdGEtdW5pcXVlPSInICsgJChpdGVtQ2xhc3MpLmxhc3QoKS5hdHRyKCJkYXRhLXVuaXF1ZSIpICsgJyJdJyk7CgogICAgICAgICAgICAgICAgICAgIGlmICghbGFzdEVsZW0ubGVuZ3RoKSByZXR1cm47CgogICAgICAgICAgICAgICAgICAgIC8vIEdldHMgdGhlIHRvcCBvZmZzZXQgb2YgdGhlIHBhZ2UgaGVhZGVyIHRoYXQgaXMgbGlua2VkIHRvIHRoZSBsYXN0IHRvYyBpdGVtCiAgICAgICAgICAgICAgICAgICAgbGFzdEVsZW1PZmZzZXQgPSBsYXN0RWxlbS5vZmZzZXQoKS50b3A7CgogICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZHMgYSBkaXYgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBhbmQgc2V0cyB0aGUgaGVpZ2h0IHRvIHRoZSBkaWZmZXJlbmNlIG9mIHRoZSB3aW5kb3cgc2Nyb2xsVG9wIGFuZCB0aGUgbGFzdCBlbGVtZW50J3MgcG9zaXRpb24gdG9wIG9mZnNldAogICAgICAgICAgICAgICAgICAgICQoc2VsZi5vcHRpb25zLmNvbnRleHQpLmFwcGVuZCgkKCI8ZGl2Lz4iLCB7CgogICAgICAgICAgICAgICAgICAgICAgImNsYXNzIjogZXh0ZW5kUGFnZUNsYXNzTmFtZSwKCiAgICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0IjogTWF0aC5hYnMobGFzdEVsZW1PZmZzZXQgLSB3aW5TY3JvbGxUb3ApICsgInB4IiwKCiAgICAgICAgICAgICAgICAgICAgICAiZGF0YS11bmlxdWUiOiBleHRlbmRQYWdlQ2xhc3NOYW1lCgogICAgICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZXh0ZW5kUGFnZVNjcm9sbCkgewoKICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtID0gc2VsZi5lbGVtZW50LmZpbmQoJ2xpLicgKyBzZWxmLmZvY3VzQ2xhc3MpOwoKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Njcm9sbFRvKCQoJ2RpdltkYXRhLXVuaXF1ZT0iJyArIGN1cnJlbnRFbGVtLmF0dHIoImRhdGEtdW5pcXVlIikgKyAnIl0nKSk7CgogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgLy8gVGhlIHplcm8gdGltZW91dCBlbnN1cmVzIHRoZSBmb2xsb3dpbmcgY29kZSBpcyBydW4gYWZ0ZXIgdGhlIHNjcm9sbCBldmVudHMKICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIC8vIF9Mb2NhbCB2YXJpYWJsZXNfCgogICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRoZSBkaXN0YW5jZSB0byB0aGUgY2xvc2VzdCBhbmNob3IKICAgICAgICAgICAgICAgIHZhciBjbG9zZXN0QW5jaG9yRGlzdGFuY2UgPSBudWxsLAoKICAgICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBhbmNob3IKICAgICAgICAgICAgICAgICAgY2xvc2VzdEFuY2hvcklkeCA9IG51bGwsCgogICAgICAgICAgICAgICAgICAvLyBLZWVwcyBhIHJlZmVyZW5jZSB0byBhbGwgYW5jaG9ycwogICAgICAgICAgICAgICAgICBhbmNob3JzID0gJChzZWxmLm9wdGlvbnMuY29udGV4dCkuZmluZCgiZGl2W2RhdGEtdW5pcXVlXSIpLAoKICAgICAgICAgICAgICAgICAgYW5jaG9yVGV4dDsKCiAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmVzIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBhbmNob3IKICAgICAgICAgICAgICAgIGFuY2hvcnMuZWFjaChmdW5jdGlvbihpZHgpIHsKICAgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5hYnMoKCQodGhpcykubmV4dCgpLmxlbmd0aCA/ICQodGhpcykubmV4dCgpIDogJCh0aGlzKSkub2Zmc2V0KCkudG9wIC0gd2luU2Nyb2xsVG9wIC0gc2VsZi5vcHRpb25zLmhpZ2hsaWdodE9mZnNldCk7CiAgICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0QW5jaG9yRGlzdGFuY2UgPT0gbnVsbCB8fCBkaXN0YW5jZSA8IGNsb3Nlc3RBbmNob3JEaXN0YW5jZSkgewogICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RBbmNob3JEaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RBbmNob3JJZHggPSBpZHg7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBhbmNob3JUZXh0ID0gJChhbmNob3JzW2Nsb3Nlc3RBbmNob3JJZHhdKS5hdHRyKCJkYXRhLXVuaXF1ZSIpOwoKICAgICAgICAgICAgICAgIC8vIFN0b3JlcyB0aGUgbGlzdCBpdGVtIEhUTUwgZWxlbWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50bHkgdHJhdmVyc2VkIGFuY2hvciB0YWcKICAgICAgICAgICAgICAgIGVsZW0gPSAkKCdsaVtkYXRhLXVuaXF1ZT0iJyArIGFuY2hvclRleHQgKyAnIl0nKTsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYGhpZ2hsaWdodE9uU2Nyb2xsYCBvcHRpb24gaXMgdHJ1ZSBhbmQgYSBuZXh0IGVsZW1lbnQgaXMgZm91bmQKICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuaGlnaGxpZ2h0T25TY3JvbGwgJiYgZWxlbS5sZW5ndGgpIHsKCiAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZXMgaGlnaGxpZ2h0aW5nIGZyb20gYWxsIG9mIHRoZSBsaXN0IGl0ZW0ncwogICAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZCgiLiIgKyBzZWxmLmZvY3VzQ2xhc3MpLnJlbW92ZUNsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgICAgICAgICAvLyBIaWdobGlnaHRzIHRoZSBjb3JyZXNwb25kaW5nIGxpc3QgaXRlbQogICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuc2Nyb2xsSGlzdG9yeSkgewoKICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoICE9PSAiIyIgKyBhbmNob3JUZXh0KSB7CgogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKCIjIiArIGFuY2hvclRleHQpOwoKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIHRoZSBgc2hvd0FuZEhpZGVPblNjcm9sbGAgb3B0aW9uIGlzIHRydWUKICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuc2hvd0FuZEhpZGVPblNjcm9sbCAmJiBzZWxmLm9wdGlvbnMuc2hvd0FuZEhpZGUpIHsKCiAgICAgICAgICAgICAgICAgIHNlbGYuX3RyaWdnZXJTaG93KGVsZW0sIHRydWUpOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgfSwgMCk7CgogICAgICAgICAgICB9KTsKCiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICB9LAoKICAgICAgLy8gU2hvdwogICAgICAvLyAtLS0tCiAgICAgIC8vICAgICAgT3BlbnMgdGhlIGN1cnJlbnQgc3ViLWhlYWRlcgogICAgICBzaG93OiBmdW5jdGlvbihlbGVtLCBzY3JvbGwpIHsKCiAgICAgICAgLy8gU3RvcmVzIHRoZSBwbHVnaW4gY29udGV4dCBpbiB0aGUgYHNlbGZgIHZhcmlhYmxlCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAogICAgICAgICAgZWxlbWVudCA9IGVsZW07CgogICAgICAgIC8vIElmIHRoZSBzdWItaGVhZGVyIGlzIG5vdCBhbHJlYWR5IHZpc2libGUKICAgICAgICBpZiAoIWVsZW0uaXMoIjp2aXNpYmxlIikpIHsKCiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGRvZXMgbm90IGhhdmUgYW55IG5lc3RlZCBzdWJoZWFkZXJzLCBpcyBub3QgYSBoZWFkZXIsIGFuZCBpdHMgcGFyZW50IGlzIG5vdCB2aXNpYmxlCiAgICAgICAgICBpZiAoIWVsZW0uZmluZChzdWJoZWFkZXJDbGFzcykubGVuZ3RoICYmICFlbGVtLnBhcmVudCgpLmlzKGhlYWRlckNsYXNzKSAmJiAhZWxlbS5wYXJlbnQoKS5pcygiOnZpc2libGUiKSkgewoKICAgICAgICAgICAgLy8gU2V0cyB0aGUgY3VycmVudCBlbGVtZW50IHRvIGFsbCBvZiB0aGUgc3ViaGVhZGVycyB3aXRoaW4gdGhlIGN1cnJlbnQgaGVhZGVyCiAgICAgICAgICAgIGVsZW0gPSBlbGVtLnBhcmVudHMoc3ViaGVhZGVyQ2xhc3MpLmFkZChlbGVtKTsKCiAgICAgICAgICB9CgogICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGFueSBuZXN0ZWQgc3ViaGVhZGVycyBhbmQgaXMgbm90IGEgaGVhZGVyCiAgICAgICAgICBlbHNlIGlmICghZWxlbS5jaGlsZHJlbihzdWJoZWFkZXJDbGFzcykubGVuZ3RoICYmICFlbGVtLnBhcmVudCgpLmlzKGhlYWRlckNsYXNzKSkgewoKICAgICAgICAgICAgLy8gU2V0cyB0aGUgY3VycmVudCBlbGVtZW50IHRvIHRoZSBjbG9zZXN0IHN1YmhlYWRlcgogICAgICAgICAgICBlbGVtID0gZWxlbS5jbG9zZXN0KHN1YmhlYWRlckNsYXNzKTsKCiAgICAgICAgICB9CgogICAgICAgICAgLy9EZXRlcm1pbmVzIHdoYXQgalF1ZXJ5IGVmZmVjdCB0byB1c2UKICAgICAgICAgIHN3aXRjaCAoc2VsZi5vcHRpb25zLnNob3dFZmZlY3QpIHsKCiAgICAgICAgICAgIC8vVXNlcyBgbm8gZWZmZWN0YAogICAgICAgICAgICBjYXNlICJub25lIjoKCiAgICAgICAgICAgICAgZWxlbS5zaG93KCk7CgogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAvL1VzZXMgdGhlIGpRdWVyeSBgc2hvd2Agc3BlY2lhbCBlZmZlY3QKICAgICAgICAgICAgY2FzZSAic2hvdyI6CgogICAgICAgICAgICAgIGVsZW0uc2hvdyhzZWxmLm9wdGlvbnMuc2hvd0VmZmVjdFNwZWVkKTsKCiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIC8vVXNlcyB0aGUgalF1ZXJ5IGBzbGlkZURvd25gIHNwZWNpYWwgZWZmZWN0CiAgICAgICAgICAgIGNhc2UgInNsaWRlRG93biI6CgogICAgICAgICAgICAgIGVsZW0uc2xpZGVEb3duKHNlbGYub3B0aW9ucy5zaG93RWZmZWN0U3BlZWQpOwoKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgLy9Vc2VzIHRoZSBqUXVlcnkgYGZhZGVJbmAgc3BlY2lhbCBlZmZlY3QKICAgICAgICAgICAgY2FzZSAiZmFkZUluIjoKCiAgICAgICAgICAgICAgZWxlbS5mYWRlSW4oc2VsZi5vcHRpb25zLnNob3dFZmZlY3RTcGVlZCk7CgogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAvL0lmIG5vbmUgb2YgdGhlIGFib3ZlIG9wdGlvbnMgd2VyZSBwYXNzZWQsIHRoZW4gYSBgalF1ZXJ5VUkgc2hvdyBlZmZlY3RgIGlzIGV4cGVjdGVkCiAgICAgICAgICAgIGRlZmF1bHQ6CgogICAgICAgICAgICAgIGVsZW0uc2hvdygpOwoKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc3ViaGVhZGVyIHBhcmVudCBlbGVtZW50IGlzIGEgaGVhZGVyCiAgICAgICAgaWYgKGVsZW0ucGFyZW50KCkuaXMoaGVhZGVyQ2xhc3MpKSB7CgogICAgICAgICAgLy8gSGlkZXMgYWxsIG5vbi1hY3RpdmUgc3ViLWhlYWRlcnMKICAgICAgICAgIHNlbGYuaGlkZSgkKHN1YmhlYWRlckNsYXNzKS5ub3QoZWxlbSkpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHN1YmhlYWRlciBwYXJlbnQgZWxlbWVudCBpcyBub3QgYSBoZWFkZXIKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAvLyBIaWRlcyBhbGwgbm9uLWFjdGl2ZSBzdWItaGVhZGVycwogICAgICAgICAgc2VsZi5oaWRlKCQoc3ViaGVhZGVyQ2xhc3MpLm5vdChlbGVtLmNsb3Nlc3QoaGVhZGVyQ2xhc3MpLmZpbmQoc3ViaGVhZGVyQ2xhc3MpLm5vdChlbGVtLnNpYmxpbmdzKCkpKSk7CgogICAgICAgIH0KCiAgICAgICAgLy8gTWFpbnRhaW5zIGNoYWluYWJsaXR5CiAgICAgICAgcmV0dXJuIHNlbGY7CgogICAgICB9LAoKICAgICAgLy8gSGlkZQogICAgICAvLyAtLS0tCiAgICAgIC8vICAgICAgQ2xvc2VzIHRoZSBjdXJyZW50IHN1Yi1oZWFkZXIKICAgICAgaGlkZTogZnVuY3Rpb24oZWxlbSkgewoKICAgICAgICAvLyBTdG9yZXMgdGhlIHBsdWdpbiBjb250ZXh0IGluIHRoZSBgc2VsZmAgdmFyaWFibGUKICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgIC8vRGV0ZXJtaW5lcyB3aGF0IGpRdWVyeSBlZmZlY3QgdG8gdXNlCiAgICAgICAgc3dpdGNoIChzZWxmLm9wdGlvbnMuaGlkZUVmZmVjdCkgewoKICAgICAgICAgIC8vIFVzZXMgYG5vIGVmZmVjdGAKICAgICAgICAgIGNhc2UgIm5vbmUiOgoKICAgICAgICAgICAgZWxlbS5oaWRlKCk7CgogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIC8vIFVzZXMgdGhlIGpRdWVyeSBgaGlkZWAgc3BlY2lhbCBlZmZlY3QKICAgICAgICAgIGNhc2UgImhpZGUiOgoKICAgICAgICAgICAgZWxlbS5oaWRlKHNlbGYub3B0aW9ucy5oaWRlRWZmZWN0U3BlZWQpOwoKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAvLyBVc2VzIHRoZSBqUXVlcnkgYHNsaWRlVXBgIHNwZWNpYWwgZWZmZWN0CiAgICAgICAgICBjYXNlICJzbGlkZVVwIjoKCiAgICAgICAgICAgIGVsZW0uc2xpZGVVcChzZWxmLm9wdGlvbnMuaGlkZUVmZmVjdFNwZWVkKTsKCiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgLy8gVXNlcyB0aGUgalF1ZXJ5IGBmYWRlT3V0YCBzcGVjaWFsIGVmZmVjdAogICAgICAgICAgY2FzZSAiZmFkZU91dCI6CgogICAgICAgICAgICBlbGVtLmZhZGVPdXQoc2VsZi5vcHRpb25zLmhpZGVFZmZlY3RTcGVlZCk7CgogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIG9wdGlvbnMgd2VyZSBwYXNzZWQsIHRoZW4gYSBganF1ZXJ5VUkgaGlkZSBlZmZlY3RgIGlzIGV4cGVjdGVkCiAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgZWxlbS5oaWRlKCk7CgogICAgICAgICAgICBicmVhazsKCiAgICAgICAgfQoKICAgICAgICAvLyBNYWludGFpbnMgY2hhaW5hYmxpdHkKICAgICAgICByZXR1cm4gc2VsZjsKICAgICAgfSwKCiAgICAgIC8vIF90cmlnZ2VyU2hvdwogICAgICAvLyAtLS0tLS0tLS0tLS0KICAgICAgLy8gICAgICBEZXRlcm1pbmVzIHdoYXQgZWxlbWVudHMgZ2V0IHNob3duIG9uIHNjcm9sbCBhbmQgY2xpY2sKICAgICAgX3RyaWdnZXJTaG93OiBmdW5jdGlvbihlbGVtLCBzY3JvbGwpIHsKCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50J3MgcGFyZW50IGlzIGEgaGVhZGVyIGVsZW1lbnQgb3IgdGhlIG5leHQgZWxlbWVudCBpcyBhIG5lc3RlZCBzdWJoZWFkZXIgZWxlbWVudAogICAgICAgIGlmIChlbGVtLnBhcmVudCgpLmlzKGhlYWRlckNsYXNzKSB8fCBlbGVtLm5leHQoKS5pcyhzdWJoZWFkZXJDbGFzcykpIHsKCiAgICAgICAgICAvLyBTaG93cyB0aGUgbmV4dCBzdWItaGVhZGVyIGVsZW1lbnQKICAgICAgICAgIHNlbGYuc2hvdyhlbGVtLm5leHQoc3ViaGVhZGVyQ2xhc3MpLCBzY3JvbGwpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQncyBwYXJlbnQgaXMgYSBzdWJoZWFkZXIgZWxlbWVudAogICAgICAgIGVsc2UgaWYgKGVsZW0ucGFyZW50KCkuaXMoc3ViaGVhZGVyQ2xhc3MpKSB7CgogICAgICAgICAgLy8gU2hvd3MgdGhlIHBhcmVudCBzdWItaGVhZGVyIGVsZW1lbnQKICAgICAgICAgIHNlbGYuc2hvdyhlbGVtLnBhcmVudCgpLCBzY3JvbGwpOwoKICAgICAgICB9CgogICAgICAgIC8vIE1haW50YWlucyBjaGFpbmFiaWxpdHkKICAgICAgICByZXR1cm4gc2VsZjsKCiAgICAgIH0sCgogICAgICAvLyBfYWRkQ1NTQ2xhc3NlcwogICAgICAvLyAtLS0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEFkZHMgQ1NTIGNsYXNzZXMgdG8gdGhlIG5ld2x5IGdlbmVyYXRlZCB0YWJsZSBvZiBjb250ZW50cyBIVE1MCiAgICAgIF9hZGRDU1NDbGFzc2VzOiBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gSWYgdGhlIHVzZXIgd2FudHMgYSBqcXVlcnlVSSB0aGVtZQogICAgICAgIGlmICh0aGlzLm9wdGlvbnMudGhlbWUgPT09ICJqcXVlcnl1aSIpIHsKCiAgICAgICAgICB0aGlzLmZvY3VzQ2xhc3MgPSAidWktc3RhdGUtZGVmYXVsdCI7CgogICAgICAgICAgdGhpcy5ob3ZlckNsYXNzID0gInVpLXN0YXRlLWhvdmVyIjsKCiAgICAgICAgICAvL0FkZHMgdGhlIGRlZmF1bHQgc3R5bGluZyB0byB0aGUgZHJvcGRvd24gbGlzdAogICAgICAgICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS13aWRnZXQiKS5maW5kKCIudG9jLXRpdGxlIikuYWRkQ2xhc3MoInVpLXdpZGdldC1oZWFkZXIiKS5lbmQoKS5maW5kKCJsaSIpLmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCIpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSB1c2VyIHdhbnRzIGEgdHdpdHRlckJvb3RzdHJhcCB0aGVtZQogICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy50aGVtZSA9PT0gImJvb3RzdHJhcCIpIHsKCiAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChoZWFkZXJDbGFzcyArICIsIiArIHN1YmhlYWRlckNsYXNzKS5hZGRDbGFzcygibmF2IG5hdi1saXN0Iik7CgogICAgICAgICAgdGhpcy5mb2N1c0NsYXNzID0gImFjdGl2ZSI7CgogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlIHVzZXIgd2FudHMgYSB0d2l0dGVyQm9vdHN0cmFwIHRoZW1lCiAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnRoZW1lID09PSAiYm9vdHN0cmFwMyIpIHsKCiAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChoZWFkZXJDbGFzcyArICIsIiArIHN1YmhlYWRlckNsYXNzKS5hZGRDbGFzcygibGlzdC1ncm91cCIpOwoKICAgICAgICAgIHRoaXMuZWxlbWVudC5maW5kKGl0ZW1DbGFzcykuYWRkQ2xhc3MoImxpc3QtZ3JvdXAtaXRlbSIpOwoKICAgICAgICAgIHRoaXMuZm9jdXNDbGFzcyA9ICJhY3RpdmUiOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIGEgdXNlciBkb2VzIG5vdCB3YW50IGEgcHJlYnVpbHQgdGhlbWUKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAvLyBBZGRzIG1vcmUgbmV1dHJhbCBjbGFzc2VzIChpbnN0ZWFkIG9mIGpxdWVyeXVpKQoKICAgICAgICAgIHRoaXMuZm9jdXNDbGFzcyA9IHRvY0ZvY3VzQ2xhc3NOYW1lOwoKICAgICAgICAgIHRoaXMuaG92ZXJDbGFzcyA9IHRvY0hvdmVyQ2xhc3NOYW1lOwoKICAgICAgICB9CgogICAgICAgIC8vTWFpbnRhaW5zIGNoYWluYWJpbGl0eQogICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgfSwKCiAgICAgIC8vIHNldE9wdGlvbgogICAgICAvLyAtLS0tLS0tLS0KICAgICAgLy8gICAgICBTZXRzIGEgc2luZ2xlIFRvY2lmeSBvcHRpb24gYWZ0ZXIgdGhlIHBsdWdpbiBpcyBpbnZva2VkCiAgICAgIHNldE9wdGlvbjogZnVuY3Rpb24oKSB7CgogICAgICAgIC8vIENhbGxzIHRoZSBqUXVlcnlVSSBXaWRnZXQgRmFjdG9yeSBzZXRPcHRpb24gbWV0aG9kCiAgICAgICAgJC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCiAgICAgIH0sCgogICAgICAvLyBzZXRPcHRpb25zCiAgICAgIC8vIC0tLS0tLS0tLS0KICAgICAgLy8gICAgICBTZXRzIGEgc2luZ2xlIG9yIG11bHRpcGxlIFRvY2lmeSBvcHRpb25zIGFmdGVyIHRoZSBwbHVnaW4gaXMgaW52b2tlZAogICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gQ2FsbHMgdGhlIGpRdWVyeVVJIFdpZGdldCBGYWN0b3J5IHNldE9wdGlvbnMgbWV0aG9kCiAgICAgICAgJC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb25zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgICB9LAoKICAgICAgLy8gX3Njcm9sbFRvCiAgICAgIC8vIC0tLS0tLS0tLQogICAgICAvLyAgICAgIFNjcm9sbHMgdG8gYSBzcGVjaWZpYyBlbGVtZW50CiAgICAgIF9zY3JvbGxUbzogZnVuY3Rpb24oZWxlbSkgewoKICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICBkdXJhdGlvbiA9IHNlbGYub3B0aW9ucy5zbW9vdGhTY3JvbGwgfHwgMCwKICAgICAgICAgIHNjcm9sbFRvID0gc2VsZi5vcHRpb25zLnNjcm9sbFRvLAogICAgICAgICAgY3VycmVudERpdiA9ICQoJ2RpdltkYXRhLXVuaXF1ZT0iJyArIGVsZW0uYXR0cigiZGF0YS11bmlxdWUiKSArICciXScpOwoKICAgICAgICBpZiAoIWN1cnJlbnREaXYubGVuZ3RoKSB7CgogICAgICAgICAgcmV0dXJuIHNlbGY7CgogICAgICAgIH0KCiAgICAgICAgLy8gT25jZSBhbGwgYW5pbWF0aW9ucyBvbiB0aGUgcGFnZSBhcmUgY29tcGxldGUsIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQKICAgICAgICAkKCJodG1sLCBib2R5IikucHJvbWlzZSgpLmRvbmUoZnVuY3Rpb24oKSB7CgogICAgICAgICAgLy8gQW5pbWF0ZXMgdGhlIGh0bWwgYW5kIGJvZHkgZWxlbWVudCBzY3JvbGx0b3BzCiAgICAgICAgICAkKCJodG1sLCBib2R5IikuYW5pbWF0ZSh7CgogICAgICAgICAgICAvLyBTZXRzIHRoZSBqUXVlcnkgYHNjcm9sbFRvcGAgdG8gdGhlIHRvcCBvZmZzZXQgb2YgdGhlIEhUTUwgZGl2IHRhZyB0aGF0IG1hdGNoZXMgdGhlIGN1cnJlbnQgbGlzdCBpdGVtJ3MgYGRhdGEtdW5pcXVlYCB0YWcKICAgICAgICAgICAgInNjcm9sbFRvcCI6IGN1cnJlbnREaXYub2Zmc2V0KCkudG9wIC0gKCQuaXNGdW5jdGlvbihzY3JvbGxUbykgPyBzY3JvbGxUby5jYWxsKCkgOiBzY3JvbGxUbykgKyAicHgiCgogICAgICAgICAgfSwgewoKICAgICAgICAgICAgLy8gU2V0cyB0aGUgc21vb3RoU2Nyb2xsIGFuaW1hdGlvbiB0aW1lIGR1cmF0aW9uIHRvIHRoZSBzbW9vdGhTY3JvbGxTcGVlZCBvcHRpb24KICAgICAgICAgICAgImR1cmF0aW9uIjogZHVyYXRpb24KCiAgICAgICAgICB9KTsKCiAgICAgICAgfSk7CgogICAgICAgIC8vIE1haW50YWlucyBjaGFpbmFiaWxpdHkKICAgICAgICByZXR1cm4gc2VsZjsKCiAgICAgIH0KCiAgICB9KTsKCiAgfSkpOyAvL2VuZCBvZiBwbHVnaW4K"></script> <script src="data:application/javascript;base64,CgovKioKICogalF1ZXJ5IFBsdWdpbjogU3RpY2t5IFRhYnMKICoKICogQGF1dGhvciBBaWRhbiBMaXN0ZXIgPGFpZGFuQHBocC5uZXQ+CiAqIGFkYXB0ZWQgYnkgUnViZW4gQXJzbGFuIHRvIGFjdGl2YXRlIHBhcmVudCB0YWJzIHRvbwogKiBodHRwOi8vd3d3LmFpZGFubGlzdGVyLmNvbS8yMDE0LzAzL3BlcnNpc3RpbmctdGhlLXRhYi1zdGF0ZS1pbi1ib290c3RyYXAvCiAqLwooZnVuY3Rpb24oJCkgewogICJ1c2Ugc3RyaWN0IjsKICAkLmZuLnJtYXJrZG93blN0aWNreVRhYnMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBjb250ZXh0ID0gdGhpczsKICAgIC8vIFNob3cgdGhlIHRhYiBjb3JyZXNwb25kaW5nIHdpdGggdGhlIGhhc2ggaW4gdGhlIFVSTCwgb3IgdGhlIGZpcnN0IHRhYgogICAgdmFyIHNob3dTdHVmZkZyb21IYXNoID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CiAgICAgIHZhciBzZWxlY3RvciA9IGhhc2ggPyAnYVtocmVmPSInICsgaGFzaCArICciXScgOiAnbGkuYWN0aXZlID4gYSc7CiAgICAgIHZhciAkc2VsZWN0b3IgPSAkKHNlbGVjdG9yLCBjb250ZXh0KTsKICAgICAgaWYoJHNlbGVjdG9yLmRhdGEoJ3RvZ2dsZScpID09PSAidGFiIikgewogICAgICAgICRzZWxlY3Rvci50YWIoJ3Nob3cnKTsKICAgICAgICAvLyB3YWxrIHVwIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBlbGVtZW50LCBzaG93IGFueSBoaWRkZW4gdGFicwogICAgICAgICRzZWxlY3Rvci5wYXJlbnRzKCcuc2VjdGlvbi50YWJzZXQnKS5lYWNoKGZ1bmN0aW9uKGksIGVsbSkgewogICAgICAgICAgdmFyIGxpbmsgPSAkKCdhW2hyZWY9IiMnICsgJChlbG0pLmF0dHIoJ2lkJykgKyAnIl0nKTsKICAgICAgICAgIGlmKGxpbmsuZGF0YSgndG9nZ2xlJykgPT09ICJ0YWIiKSB7CiAgICAgICAgICAgIGxpbmsudGFiKCJzaG93Iik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CgoKICAgIC8vIFNldCB0aGUgY29ycmVjdCB0YWIgd2hlbiB0aGUgcGFnZSBsb2FkcwogICAgc2hvd1N0dWZmRnJvbUhhc2goY29udGV4dCk7CgogICAgLy8gU2V0IHRoZSBjb3JyZWN0IHRhYiB3aGVuIGEgdXNlciB1c2VzIHRoZWlyIGJhY2svZm9yd2FyZCBidXR0b24KICAgICQod2luZG93KS5vbignaGFzaGNoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICBzaG93U3R1ZmZGcm9tSGFzaChjb250ZXh0KTsKICAgIH0pOwoKICAgIC8vIENoYW5nZSB0aGUgVVJMIHdoZW4gdGFicyBhcmUgY2xpY2tlZAogICAgJCgnYScsIGNvbnRleHQpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgdGhpcy5ocmVmKTsKICAgICAgc2hvd1N0dWZmRnJvbUhhc2goY29udGV4dCk7CiAgICB9KTsKCiAgICByZXR1cm4gdGhpczsKICB9Owp9KGpRdWVyeSkpOwoKd2luZG93LmJ1aWxkVGFic2V0cyA9IGZ1bmN0aW9uKHRvY0lEKSB7CgogIC8vIGJ1aWxkIGEgdGFic2V0IGZyb20gYSBzZWN0aW9uIGRpdiB3aXRoIHRoZSAudGFic2V0IGNsYXNzCiAgZnVuY3Rpb24gYnVpbGRUYWJzZXQodGFic2V0KSB7CgogICAgLy8gY2hlY2sgZm9yIGZhZGUgYW5kIHBpbGxzIG9wdGlvbnMKICAgIHZhciBmYWRlID0gdGFic2V0Lmhhc0NsYXNzKCJ0YWJzZXQtZmFkZSIpOwogICAgdmFyIHBpbGxzID0gdGFic2V0Lmhhc0NsYXNzKCJ0YWJzZXQtcGlsbHMiKTsKICAgIHZhciBuYXZDbGFzcyA9IHBpbGxzID8gIm5hdi1waWxscyIgOiAibmF2LXRhYnMiOwoKICAgIC8vIGRldGVybWluZSB0aGUgaGVhZGluZyBsZXZlbCBvZiB0aGUgdGFic2V0IGFuZCB0YWJzCiAgICB2YXIgbWF0Y2ggPSB0YWJzZXQuYXR0cignY2xhc3MnKS5tYXRjaCgvbGV2ZWwoXGQpIC8pOwogICAgaWYgKG1hdGNoID09PSBudWxsKQogICAgICByZXR1cm47CiAgICB2YXIgdGFic2V0TGV2ZWwgPSBOdW1iZXIobWF0Y2hbMV0pOwogICAgdmFyIHRhYkxldmVsID0gdGFic2V0TGV2ZWwgKyAxOwoKICAgIC8vIGZpbmQgYWxsIHN1YmhlYWRpbmdzIGltbWVkaWF0ZWx5IGJlbG93CiAgICB2YXIgdGFicyA9IHRhYnNldC5maW5kKCJkaXYuc2VjdGlvbi5sZXZlbCIgKyB0YWJMZXZlbCk7CiAgICBpZiAoIXRhYnMubGVuZ3RoKQogICAgICByZXR1cm47CgogICAgLy8gY3JlYXRlIHRhYmxpc3QgYW5kIHRhYi1jb250ZW50IGVsZW1lbnRzCiAgICB2YXIgdGFiTGlzdCA9ICQoJzx1bCBjbGFzcz0ibmF2ICcgKyBuYXZDbGFzcyArICciIHJvbGU9InRhYmxpc3QiPjwvdWw+Jyk7CiAgICAkKHRhYnNbMF0pLmJlZm9yZSh0YWJMaXN0KTsKICAgIHZhciB0YWJDb250ZW50ID0gJCgnPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPjwvZGl2PicpOwogICAgJCh0YWJzWzBdKS5iZWZvcmUodGFiQ29udGVudCk7CgogICAgLy8gYnVpbGQgdGhlIHRhYnNldAogICAgdmFyIGFjdGl2ZVRhYiA9IDA7CiAgICB0YWJzLmVhY2goZnVuY3Rpb24oaSkgewoKICAgICAgLy8gZ2V0IHRoZSB0YWIgZGl2CiAgICAgIHZhciB0YWIgPSAkKHRhYnNbaV0pOwoKICAgICAgLy8gZ2V0IHRoZSBpZCB0aGVuIHNhbml0aXplIGl0IGZvciB1c2Ugd2l0aCBib290c3RyYXAgdGFicwogICAgICB2YXIgaWQgPSB0YWIuYXR0cignaWQnKTsKCiAgICAgIC8vIHNlZSBpZiB0aGlzIGlzIG1hcmtlZCBhcyB0aGUgYWN0aXZlIHRhYgogICAgICBpZiAodGFiLmhhc0NsYXNzKCdhY3RpdmUnKSkKICAgICAgICBhY3RpdmVUYWIgPSBpOwoKICAgICAgLy8gcmVtb3ZlIGFueSB0YWJsZSBvZiBjb250ZW50cyBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aAogICAgICAvLyB0aGlzIElEIChzaW5jZSB3ZSdsbCBiZSByZW1vdmluZyB0aGUgaGVhZGluZyBlbGVtZW50KQogICAgICAkKCJkaXYjIiArIHRvY0lEICsgIiBsaSBhW2hyZWY9JyMiICsgaWQgKyAiJ10iKS5wYXJlbnQoKS5yZW1vdmUoKTsKCiAgICAgIC8vIHNhbml0aXplIHRoZSBpZCBmb3IgdXNlIHdpdGggYm9vdHN0cmFwIHRhYnMKICAgICAgaWQgPSBpZC5yZXBsYWNlKC9bLlwvPyYhIzw+XS9nLCAnJykucmVwbGFjZSgvXHMvZywgJ18nKTsKICAgICAgdGFiLmF0dHIoJ2lkJywgaWQpOwoKICAgICAgLy8gZ2V0IHRoZSBoZWFkaW5nIGVsZW1lbnQgd2l0aGluIGl0LCBncmFiIGl0J3MgdGV4dCwgdGhlbiByZW1vdmUgaXQKICAgICAgdmFyIGhlYWRpbmcgPSB0YWIuZmluZCgnaCcgKyB0YWJMZXZlbCArICc6Zmlyc3QnKTsKICAgICAgdmFyIGhlYWRpbmdUZXh0ID0gaGVhZGluZy5odG1sKCk7CiAgICAgIGhlYWRpbmcucmVtb3ZlKCk7CgogICAgICAvLyBidWlsZCBhbmQgYXBwZW5kIHRoZSB0YWIgbGlzdCBpdGVtCiAgICAgIHZhciBhID0gJCgnPGEgcm9sZT0idGFiIiBkYXRhLXRvZ2dsZT0idGFiIj4nICsgaGVhZGluZ1RleHQgKyAnPC9hPicpOwogICAgICBhLmF0dHIoJ2hyZWYnLCAnIycgKyBpZCk7CiAgICAgIGEuYXR0cignYXJpYS1jb250cm9scycsIGlkKTsKICAgICAgdmFyIGxpID0gJCgnPGxpIHJvbGU9InByZXNlbnRhdGlvbiI+PC9saT4nKTsKICAgICAgbGkuYXBwZW5kKGEpOwogICAgICB0YWJMaXN0LmFwcGVuZChsaSk7CgogICAgICAvLyBzZXQgaXQncyBhdHRyaWJ1dGVzCiAgICAgIHRhYi5hdHRyKCdyb2xlJywgJ3RhYnBhbmVsJyk7CiAgICAgIHRhYi5hZGRDbGFzcygndGFiLXBhbmUnKTsKICAgICAgdGFiLmFkZENsYXNzKCd0YWJiZWQtcGFuZScpOwogICAgICBpZiAoZmFkZSkKICAgICAgICB0YWIuYWRkQ2xhc3MoJ2ZhZGUnKTsKCiAgICAgIC8vIG1vdmUgaXQgaW50byB0aGUgdGFiIGNvbnRlbnQgZGl2CiAgICAgIHRhYi5kZXRhY2goKS5hcHBlbmRUbyh0YWJDb250ZW50KTsKICAgIH0pOwoKICAgIC8vIHNldCBhY3RpdmUgdGFiCiAgICAkKHRhYkxpc3QuY2hpbGRyZW4oJ2xpJylbYWN0aXZlVGFiXSkuYWRkQ2xhc3MoJ2FjdGl2ZScpOwogICAgdmFyIGFjdGl2ZSA9ICQodGFiQ29udGVudC5jaGlsZHJlbignZGl2LnNlY3Rpb24nKVthY3RpdmVUYWJdKTsKICAgIGFjdGl2ZS5hZGRDbGFzcygnYWN0aXZlJyk7CiAgICBpZiAoZmFkZSkKICAgICAgYWN0aXZlLmFkZENsYXNzKCdpbicpOwoKICAgIGlmICh0YWJzZXQuaGFzQ2xhc3MoInRhYnNldC1zdGlja3kiKSkKICAgICAgdGFic2V0LnJtYXJrZG93blN0aWNreVRhYnMoKTsKICB9CgogIC8vIGNvbnZlcnQgc2VjdGlvbiBkaXZzIHdpdGggdGhlIC50YWJzZXQgY2xhc3MgdG8gdGFic2V0cwogIHZhciB0YWJzZXRzID0gJCgiZGl2LnNlY3Rpb24udGFic2V0Iik7CiAgdGFic2V0cy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgIGJ1aWxkVGFic2V0KCQodGFic2V0c1tpXSkpOwogIH0pOwp9OwoK"></script> <link href="data:text/css,%2Ehljs%2Dliteral%20%7B%0Acolor%3A%20%23990073%3B%0A%7D%0A%2Ehljs%2Dnumber%20%7B%0Acolor%3A%20%23099%3B%0A%7D%0A%2Ehljs%2Dcomment%20%7B%0Acolor%3A%20%23998%3B%0Afont%2Dstyle%3A%20italic%3B%0A%7D%0A%2Ehljs%2Dkeyword%20%7B%0Acolor%3A%20%23900%3B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0A%2Ehljs%2Dstring%20%7B%0Acolor%3A%20%23d14%3B%0A%7D%0A" rel="stylesheet" /> <script src="data:application/javascript;base64,LyohIGhpZ2hsaWdodC5qcyB2OS4xMi4wIHwgQlNEMyBMaWNlbnNlIHwgZ2l0LmlvL2hsanNsaWNlbnNlICovCiFmdW5jdGlvbihlKXt2YXIgbj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93fHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGY7InVuZGVmaW5lZCIhPXR5cGVvZiBleHBvcnRzP2UoZXhwb3J0cyk6biYmKG4uaGxqcz1lKHt9KSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gbi5obGpzfSkpfShmdW5jdGlvbihlKXtmdW5jdGlvbiBuKGUpe3JldHVybiBlLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1mdW5jdGlvbiB0KGUpe3JldHVybiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcihlLG4pe3ZhciB0PWUmJmUuZXhlYyhuKTtyZXR1cm4gdCYmMD09PXQuaW5kZXh9ZnVuY3Rpb24gYShlKXtyZXR1cm4gay50ZXN0KGUpfWZ1bmN0aW9uIGkoZSl7dmFyIG4sdCxyLGksbz1lLmNsYXNzTmFtZSsiICI7aWYobys9ZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIsdD1CLmV4ZWMobykpcmV0dXJuIHcodFsxXSk/dFsxXToibm8taGlnaGxpZ2h0Ijtmb3Iobz1vLnNwbGl0KC9ccysvKSxuPTAscj1vLmxlbmd0aDtyPm47bisrKWlmKGk9b1tuXSxhKGkpfHx3KGkpKXJldHVybiBpfWZ1bmN0aW9uIG8oZSl7dmFyIG4sdD17fSxyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmb3IobiBpbiBlKXRbbl09ZVtuXTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKGUpe2ZvcihuIGluIGUpdFtuXT1lW25dfSksdH1mdW5jdGlvbiB1KGUpe3ZhciBuPVtdO3JldHVybiBmdW5jdGlvbiByKGUsYSl7Zm9yKHZhciBpPWUuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZykzPT09aS5ub2RlVHlwZT9hKz1pLm5vZGVWYWx1ZS5sZW5ndGg6MT09PWkubm9kZVR5cGUmJihuLnB1c2goe2V2ZW50OiJzdGFydCIsb2Zmc2V0OmEsbm9kZTppfSksYT1yKGksYSksdChpKS5tYXRjaCgvYnJ8aHJ8aW1nfGlucHV0Lyl8fG4ucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDphLG5vZGU6aX0pKTtyZXR1cm4gYX0oZSwwKSxufWZ1bmN0aW9uIGMoZSxyLGEpe2Z1bmN0aW9uIGkoKXtyZXR1cm4gZS5sZW5ndGgmJnIubGVuZ3RoP2VbMF0ub2Zmc2V0IT09clswXS5vZmZzZXQ/ZVswXS5vZmZzZXQ8clswXS5vZmZzZXQ/ZTpyOiJzdGFydCI9PT1yWzBdLmV2ZW50P2U6cjplLmxlbmd0aD9lOnJ9ZnVuY3Rpb24gbyhlKXtmdW5jdGlvbiByKGUpe3JldHVybiIgIitlLm5vZGVOYW1lKyc9IicrbihlLnZhbHVlKS5yZXBsYWNlKCciJywiJnF1b3Q7IikrJyInfXMrPSI8Iit0KGUpK0UubWFwLmNhbGwoZS5hdHRyaWJ1dGVzLHIpLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB1KGUpe3MrPSI8LyIrdChlKSsiPiJ9ZnVuY3Rpb24gYyhlKXsoInN0YXJ0Ij09PWUuZXZlbnQ/bzp1KShlLm5vZGUpfWZvcih2YXIgbD0wLHM9IiIsZj1bXTtlLmxlbmd0aHx8ci5sZW5ndGg7KXt2YXIgZz1pKCk7aWYocys9bihhLnN1YnN0cmluZyhsLGdbMF0ub2Zmc2V0KSksbD1nWzBdLm9mZnNldCxnPT09ZSl7Zi5yZXZlcnNlKCkuZm9yRWFjaCh1KTtkbyBjKGcuc3BsaWNlKDAsMSlbMF0pLGc9aSgpO3doaWxlKGc9PT1lJiZnLmxlbmd0aCYmZ1swXS5vZmZzZXQ9PT1sKTtmLnJldmVyc2UoKS5mb3JFYWNoKG8pfWVsc2Uic3RhcnQiPT09Z1swXS5ldmVudD9mLnB1c2goZ1swXS5ub2RlKTpmLnBvcCgpLGMoZy5zcGxpY2UoMCwxKVswXSl9cmV0dXJuIHMrbihhLnN1YnN0cihsKSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS52JiYhZS5jYWNoZWRfdmFyaWFudHMmJihlLmNhY2hlZF92YXJpYW50cz1lLnYubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBvKGUse3Y6bnVsbH0sbil9KSksZS5jYWNoZWRfdmFyaWFudHN8fGUuZVcmJltvKGUpXXx8W2VdfWZ1bmN0aW9uIHMoZSl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5zb3VyY2V8fGV9ZnVuY3Rpb24gdCh0LHIpe3JldHVybiBuZXcgUmVnRXhwKG4odCksIm0iKyhlLmNJPyJpIjoiIikrKHI/ImciOiIiKSl9ZnVuY3Rpb24gcihhLGkpe2lmKCFhLmNvbXBpbGVkKXtpZihhLmNvbXBpbGVkPSEwLGEuaz1hLmt8fGEuYkssYS5rKXt2YXIgbz17fSx1PWZ1bmN0aW9uKG4sdCl7ZS5jSSYmKHQ9dC50b0xvd2VyQ2FzZSgpKSx0LnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCJ8Iik7b1t0WzBdXT1bbix0WzFdP051bWJlcih0WzFdKToxXX0pfTsic3RyaW5nIj09dHlwZW9mIGEuaz91KCJrZXl3b3JkIixhLmspOngoYS5rKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3UoZSxhLmtbZV0pfSksYS5rPW99YS5sUj10KGEubHx8L1x3Ky8sITApLGkmJihhLmJLJiYoYS5iPSJcXGIoIithLmJLLnNwbGl0KCIgIikuam9pbigifCIpKyIpXFxiIiksYS5ifHwoYS5iPS9cQnxcYi8pLGEuYlI9dChhLmIpLGEuZXx8YS5lV3x8KGEuZT0vXEJ8XGIvKSxhLmUmJihhLmVSPXQoYS5lKSksYS50RT1uKGEuZSl8fCIiLGEuZVcmJmkudEUmJihhLnRFKz0oYS5lPyJ8IjoiIikraS50RSkpLGEuaSYmKGEuaVI9dChhLmkpKSxudWxsPT1hLnImJihhLnI9MSksYS5jfHwoYS5jPVtdKSxhLmM9QXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxhLmMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBsKCJzZWxmIj09PWU/YTplKX0pKSxhLmMuZm9yRWFjaChmdW5jdGlvbihlKXtyKGUsYSl9KSxhLnN0YXJ0cyYmcihhLnN0YXJ0cyxpKTt2YXIgYz1hLmMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJLPyJcXC4/KCIrZS5iKyIpXFwuPyI6ZS5ifSkuY29uY2F0KFthLnRFLGEuaV0pLm1hcChuKS5maWx0ZXIoQm9vbGVhbik7YS50PWMubGVuZ3RoP3QoYy5qb2luKCJ8IiksITApOntleGVjOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fX19cihlKX1mdW5jdGlvbiBmKGUsdCxhLGkpe2Z1bmN0aW9uIG8oZSxuKXt2YXIgdCxhO2Zvcih0PTAsYT1uLmMubGVuZ3RoO2E+dDt0KyspaWYocihuLmNbdF0uYlIsZSkpcmV0dXJuIG4uY1t0XX1mdW5jdGlvbiB1KGUsbil7aWYocihlLmVSLG4pKXtmb3IoO2UuZW5kc1BhcmVudCYmZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9cmV0dXJuIGUuZVc/dShlLnBhcmVudCxuKTp2b2lkIDB9ZnVuY3Rpb24gYyhlLG4pe3JldHVybiFhJiZyKG4uaVIsZSl9ZnVuY3Rpb24gbChlLG4pe3ZhciB0PU4uY0k/blswXS50b0xvd2VyQ2FzZSgpOm5bMF07cmV0dXJuIGUuay5oYXNPd25Qcm9wZXJ0eSh0KSYmZS5rW3RdfWZ1bmN0aW9uIHAoZSxuLHQscil7dmFyIGE9cj8iIjpJLmNsYXNzUHJlZml4LGk9JzxzcGFuIGNsYXNzPSInK2Esbz10PyIiOkM7cmV0dXJuIGkrPWUrJyI+JyxpK24rb31mdW5jdGlvbiBoKCl7dmFyIGUsdCxyLGE7aWYoIUUuaylyZXR1cm4gbihrKTtmb3IoYT0iIix0PTAsRS5sUi5sYXN0SW5kZXg9MCxyPUUubFIuZXhlYyhrKTtyOylhKz1uKGsuc3Vic3RyaW5nKHQsci5pbmRleCkpLGU9bChFLHIpLGU/KEIrPWVbMV0sYSs9cChlWzBdLG4oclswXSkpKTphKz1uKHJbMF0pLHQ9RS5sUi5sYXN0SW5kZXgscj1FLmxSLmV4ZWMoayk7cmV0dXJuIGErbihrLnN1YnN0cih0KSl9ZnVuY3Rpb24gZCgpe3ZhciBlPSJzdHJpbmciPT10eXBlb2YgRS5zTDtpZihlJiYheVtFLnNMXSlyZXR1cm4gbihrKTt2YXIgdD1lP2YoRS5zTCxrLCEwLHhbRS5zTF0pOmcoayxFLnNMLmxlbmd0aD9FLnNMOnZvaWQgMCk7cmV0dXJuIEUucj4wJiYoQis9dC5yKSxlJiYoeFtFLnNMXT10LnRvcCkscCh0Lmxhbmd1YWdlLHQudmFsdWUsITEsITApfWZ1bmN0aW9uIGIoKXtMKz1udWxsIT1FLnNMP2QoKTpoKCksaz0iIn1mdW5jdGlvbiB2KGUpe0wrPWUuY04/cChlLmNOLCIiLCEwKToiIixFPU9iamVjdC5jcmVhdGUoZSx7cGFyZW50Ont2YWx1ZTpFfX0pfWZ1bmN0aW9uIG0oZSxuKXtpZihrKz1lLG51bGw9PW4pcmV0dXJuIGIoKSwwO3ZhciB0PW8obixFKTtpZih0KXJldHVybiB0LnNraXA/ays9bjoodC5lQiYmKGsrPW4pLGIoKSx0LnJCfHx0LmVCfHwoaz1uKSksdih0LG4pLHQuckI/MDpuLmxlbmd0aDt2YXIgcj11KEUsbik7aWYocil7dmFyIGE9RTthLnNraXA/ays9bjooYS5yRXx8YS5lRXx8KGsrPW4pLGIoKSxhLmVFJiYoaz1uKSk7ZG8gRS5jTiYmKEwrPUMpLEUuc2tpcHx8KEIrPUUuciksRT1FLnBhcmVudDt3aGlsZShFIT09ci5wYXJlbnQpO3JldHVybiByLnN0YXJ0cyYmdihyLnN0YXJ0cywiIiksYS5yRT8wOm4ubGVuZ3RofWlmKGMobixFKSl0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgbGV4ZW1lICInK24rJyIgZm9yIG1vZGUgIicrKEUuY058fCI8dW5uYW1lZD4iKSsnIicpO3JldHVybiBrKz1uLG4ubGVuZ3RofHwxfXZhciBOPXcoZSk7aWYoIU4pdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJytlKyciJyk7cyhOKTt2YXIgUixFPWl8fE4seD17fSxMPSIiO2ZvcihSPUU7UiE9PU47Uj1SLnBhcmVudClSLmNOJiYoTD1wKFIuY04sIiIsITApK0wpO3ZhciBrPSIiLEI9MDt0cnl7Zm9yKHZhciBNLGosTz0wOzspe2lmKEUudC5sYXN0SW5kZXg9TyxNPUUudC5leGVjKHQpLCFNKWJyZWFrO2o9bSh0LnN1YnN0cmluZyhPLE0uaW5kZXgpLE1bMF0pLE89TS5pbmRleCtqfWZvcihtKHQuc3Vic3RyKE8pKSxSPUU7Ui5wYXJlbnQ7Uj1SLnBhcmVudClSLmNOJiYoTCs9Qyk7cmV0dXJue3I6Qix2YWx1ZTpMLGxhbmd1YWdlOmUsdG9wOkV9fWNhdGNoKFQpe2lmKFQubWVzc2FnZSYmLTEhPT1ULm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpKXJldHVybntyOjAsdmFsdWU6bih0KX07dGhyb3cgVH19ZnVuY3Rpb24gZyhlLHQpe3Q9dHx8SS5sYW5ndWFnZXN8fHgoeSk7dmFyIHI9e3I6MCx2YWx1ZTpuKGUpfSxhPXI7cmV0dXJuIHQuZmlsdGVyKHcpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHQ9ZihuLGUsITEpO3QubGFuZ3VhZ2U9bix0LnI+YS5yJiYoYT10KSx0LnI+ci5yJiYoYT1yLHI9dCl9KSxhLmxhbmd1YWdlJiYoci5zZWNvbmRfYmVzdD1hKSxyfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIEkudGFiUmVwbGFjZXx8SS51c2VCUj9lLnJlcGxhY2UoTSxmdW5jdGlvbihlLG4pe3JldHVybiBJLnVzZUJSJiYiXG4iPT09ZT8iPGJyPiI6SS50YWJSZXBsYWNlP24ucmVwbGFjZSgvXHQvZyxJLnRhYlJlcGxhY2UpOiIifSk6ZX1mdW5jdGlvbiBoKGUsbix0KXt2YXIgcj1uP0xbbl06dCxhPVtlLnRyaW0oKV07cmV0dXJuIGUubWF0Y2goL1xiaGxqc1xiLyl8fGEucHVzaCgiaGxqcyIpLC0xPT09ZS5pbmRleE9mKHIpJiZhLnB1c2gociksYS5qb2luKCIgIikudHJpbSgpfWZ1bmN0aW9uIGQoZSl7dmFyIG4sdCxyLG8sbCxzPWkoZSk7YShzKXx8KEkudXNlQlI/KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksbi5pbm5lckhUTUw9ZS5pbm5lckhUTUwucmVwbGFjZSgvXG4vZywiIikucmVwbGFjZSgvPGJyWyBcL10qPi9nLCJcbiIpKTpuPWUsbD1uLnRleHRDb250ZW50LHI9cz9mKHMsbCwhMCk6ZyhsKSx0PXUobiksdC5sZW5ndGgmJihvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImRpdiIpLG8uaW5uZXJIVE1MPXIudmFsdWUsci52YWx1ZT1jKHQsdShvKSxsKSksci52YWx1ZT1wKHIudmFsdWUpLGUuaW5uZXJIVE1MPXIudmFsdWUsZS5jbGFzc05hbWU9aChlLmNsYXNzTmFtZSxzLHIubGFuZ3VhZ2UpLGUucmVzdWx0PXtsYW5ndWFnZTpyLmxhbmd1YWdlLHJlOnIucn0sci5zZWNvbmRfYmVzdCYmKGUuc2Vjb25kX2Jlc3Q9e2xhbmd1YWdlOnIuc2Vjb25kX2Jlc3QubGFuZ3VhZ2UscmU6ci5zZWNvbmRfYmVzdC5yfSkpfWZ1bmN0aW9uIGIoZSl7ST1vKEksZSl9ZnVuY3Rpb24gdigpe2lmKCF2LmNhbGxlZCl7di5jYWxsZWQ9ITA7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicHJlIGNvZGUiKTtFLmZvckVhY2guY2FsbChlLGQpfX1mdW5jdGlvbiBtKCl7YWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsdiwhMSksYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdiwhMSl9ZnVuY3Rpb24gTihuLHQpe3ZhciByPXlbbl09dChlKTtyLmFsaWFzZXMmJnIuYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe0xbZV09bn0pfWZ1bmN0aW9uIFIoKXtyZXR1cm4geCh5KX1mdW5jdGlvbiB3KGUpe3JldHVybiBlPShlfHwiIikudG9Mb3dlckNhc2UoKSx5W2VdfHx5W0xbZV1dfXZhciBFPVtdLHg9T2JqZWN0LmtleXMseT17fSxMPXt9LGs9L14obm8tP2hpZ2hsaWdodHxwbGFpbnx0ZXh0KSQvaSxCPS9cYmxhbmcoPzp1YWdlKT8tKFtcdy1dKylcYi9pLE09LygoXig8W14+XSs+fFx0fCkrfCg/OlxuKSkpL2dtLEM9Ijwvc3Bhbj4iLEk9e2NsYXNzUHJlZml4OiJobGpzLSIsdGFiUmVwbGFjZTpudWxsLHVzZUJSOiExLGxhbmd1YWdlczp2b2lkIDB9O3JldHVybiBlLmhpZ2hsaWdodD1mLGUuaGlnaGxpZ2h0QXV0bz1nLGUuZml4TWFya3VwPXAsZS5oaWdobGlnaHRCbG9jaz1kLGUuY29uZmlndXJlPWIsZS5pbml0SGlnaGxpZ2h0aW5nPXYsZS5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPW0sZS5yZWdpc3Rlckxhbmd1YWdlPU4sZS5saXN0TGFuZ3VhZ2VzPVIsZS5nZXRMYW5ndWFnZT13LGUuaW5oZXJpdD1vLGUuSVI9IlthLXpBLVpdXFx3KiIsZS5VSVI9IlthLXpBLVpfXVxcdyoiLGUuTlI9IlxcYlxcZCsoXFwuXFxkKyk/IixlLkNOUj0iKC0/KShcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSIsZS5CTlI9IlxcYigwYlswMV0rKSIsZS5SU1I9IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfC18LT18Lz18L3w6fDt8PDx8PDw9fDw9fDx8PT09fD09fD18Pj4+PXw+Pj18Pj18Pj4+fD4+fD58XFw/fFxcW3xcXHt8XFwofFxcXnxcXF49fFxcfHxcXHw9fFxcfFxcfHx+IixlLkJFPXtiOiJcXFxcW1xcc1xcU10iLHI6MH0sZS5BU009e2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGk6IlxcbiIsYzpbZS5CRV19LGUuUVNNPXtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W2UuQkVdfSxlLlBXTT17YjovXGIoYXxhbnx0aGV8YXJlfEknbXxpc24ndHxkb24ndHxkb2Vzbid0fHdvbid0fGJ1dHxqdXN0fHNob3VsZHxwcmV0dHl8c2ltcGx5fGVub3VnaHxnb25uYXxnb2luZ3x3dGZ8c298c3VjaHx3aWxsfHlvdXx5b3VyfHRoZXl8bGlrZXxtb3JlKVxiL30sZS5DPWZ1bmN0aW9uKG4sdCxyKXt2YXIgYT1lLmluaGVyaXQoe2NOOiJjb21tZW50IixiOm4sZTp0LGM6W119LHJ8fHt9KTtyZXR1cm4gYS5jLnB1c2goZS5QV00pLGEuYy5wdXNoKHtjTjoiZG9jdGFnIixiOiIoPzpUT0RPfEZJWE1FfE5PVEV8QlVHfFhYWCk6IixyOjB9KSxhfSxlLkNMQ009ZS5DKCIvLyIsIiQiKSxlLkNCQ009ZS5DKCIvXFwqIiwiXFwqLyIpLGUuSENNPWUuQygiIyIsIiQiKSxlLk5NPXtjTjoibnVtYmVyIixiOmUuTlIscjowfSxlLkNOTT17Y046Im51bWJlciIsYjplLkNOUixyOjB9LGUuQk5NPXtjTjoibnVtYmVyIixiOmUuQk5SLHI6MH0sZS5DU1NOTT17Y046Im51bWJlciIsYjplLk5SKyIoJXxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjfHB4fGRlZ3xncmFkfHJhZHx0dXJufHN8bXN8SHp8a0h6fGRwaXxkcGNtfGRwcHgpPyIscjowfSxlLlJNPXtjTjoicmVnZXhwIixiOi9cLy8sZTovXC9bZ2ltdXldKi8saTovXG4vLGM6W2UuQkUse2I6L1xbLyxlOi9cXS8scjowLGM6W2UuQkVdfV19LGUuVE09e2NOOiJ0aXRsZSIsYjplLklSLHI6MH0sZS5VVE09e2NOOiJ0aXRsZSIsYjplLlVJUixyOjB9LGUuTUVUSE9EX0dVQVJEPXtiOiJcXC5cXHMqIitlLlVJUixyOjB9LGV9KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInNxbCIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5DKCItLSIsIiQiKTtyZXR1cm57Y0k6ITAsaTovWzw+e30qI10vLGM6W3tiSzoiYmVnaW4gZW5kIHN0YXJ0IGNvbW1pdCByb2xsYmFjayBzYXZlcG9pbnQgbG9jayBhbHRlciBjcmVhdGUgZHJvcCByZW5hbWUgY2FsbCBkZWxldGUgZG8gaGFuZGxlciBpbnNlcnQgbG9hZCByZXBsYWNlIHNlbGVjdCB0cnVuY2F0ZSB1cGRhdGUgc2V0IHNob3cgcHJhZ21hIGdyYW50IG1lcmdlIGRlc2NyaWJlIHVzZSBleHBsYWluIGhlbHAgZGVjbGFyZSBwcmVwYXJlIGV4ZWN1dGUgZGVhbGxvY2F0ZSByZWxlYXNlIHVubG9jayBwdXJnZSByZXNldCBjaGFuZ2Ugc3RvcCBhbmFseXplIGNhY2hlIGZsdXNoIG9wdGltaXplIHJlcGFpciBraWxsIGluc3RhbGwgdW5pbnN0YWxsIGNoZWNrc3VtIHJlc3RvcmUgY2hlY2sgYmFja3VwIHJldm9rZSBjb21tZW50IixlOi87LyxlVzohMCxsOi9bXHdcLl0rLyxrOntrZXl3b3JkOiJhYm9ydCBhYnMgYWJzb2x1dGUgYWNjIGFjY2UgYWNjZXAgYWNjZXB0IGFjY2VzcyBhY2Nlc3NlZCBhY2Nlc3NpYmxlIGFjY291bnQgYWNvcyBhY3Rpb24gYWN0aXZhdGUgYWRkIGFkZHRpbWUgYWRtaW4gYWRtaW5pc3RlciBhZHZhbmNlZCBhZHZpc2UgYWVzX2RlY3J5cHQgYWVzX2VuY3J5cHQgYWZ0ZXIgYWdlbnQgYWdncmVnYXRlIGFsaSBhbGlhIGFsaWFzIGFsbG9jYXRlIGFsbG93IGFsdGVyIGFsd2F5cyBhbmFseXplIGFuY2lsbGFyeSBhbmQgYW55IGFueWRhdGEgYW55ZGF0YXNldCBhbnlzY2hlbWEgYW55dHlwZSBhcHBseSBhcmNoaXZlIGFyY2hpdmVkIGFyY2hpdmVsb2cgYXJlIGFzIGFzYyBhc2NpaSBhc2luIGFzc2VtYmx5IGFzc2VydGlvbiBhc3NvY2lhdGUgYXN5bmNocm9ub3VzIGF0IGF0YW4gYXRuMiBhdHRyIGF0dHJpIGF0dHJpYiBhdHRyaWJ1IGF0dHJpYnV0IGF0dHJpYnV0ZSBhdHRyaWJ1dGVzIGF1ZGl0IGF1dGhlbnRpY2F0ZWQgYXV0aGVudGljYXRpb24gYXV0aGlkIGF1dGhvcnMgYXV0byBhdXRvYWxsb2NhdGUgYXV0b2RibGluayBhdXRvZXh0ZW5kIGF1dG9tYXRpYyBhdmFpbGFiaWxpdHkgYXZnIGJhY2t1cCBiYWRmaWxlIGJhc2ljZmlsZSBiZWZvcmUgYmVnaW4gYmVnaW5uaW5nIGJlbmNobWFyayBiZXR3ZWVuIGJmaWxlIGJmaWxlX2Jhc2UgYmlnIGJpZ2ZpbGUgYmluIGJpbmFyeV9kb3VibGUgYmluYXJ5X2Zsb2F0IGJpbmxvZyBiaXRfYW5kIGJpdF9jb3VudCBiaXRfbGVuZ3RoIGJpdF9vciBiaXRfeG9yIGJpdG1hcCBibG9iX2Jhc2UgYmxvY2sgYmxvY2tzaXplIGJvZHkgYm90aCBib3VuZCBidWZmZXJfY2FjaGUgYnVmZmVyX3Bvb2wgYnVpbGQgYnVsayBieSBieXRlIGJ5dGVvcmRlcm1hcmsgYnl0ZXMgY2FjaGUgY2FjaGluZyBjYWxsIGNhbGxpbmcgY2FuY2VsIGNhcGFjaXR5IGNhc2NhZGUgY2FzY2FkZWQgY2FzZSBjYXN0IGNhdGFsb2cgY2F0ZWdvcnkgY2VpbCBjZWlsaW5nIGNoYWluIGNoYW5nZSBjaGFuZ2VkIGNoYXJfYmFzZSBjaGFyX2xlbmd0aCBjaGFyYWN0ZXJfbGVuZ3RoIGNoYXJhY3RlcnMgY2hhcmFjdGVyc2V0IGNoYXJpbmRleCBjaGFyc2V0IGNoYXJzZXRmb3JtIGNoYXJzZXRpZCBjaGVjayBjaGVja3N1bSBjaGVja3N1bV9hZ2cgY2hpbGQgY2hvb3NlIGNociBjaHVuayBjbGFzcyBjbGVhbnVwIGNsZWFyIGNsaWVudCBjbG9iIGNsb2JfYmFzZSBjbG9uZSBjbG9zZSBjbHVzdGVyX2lkIGNsdXN0ZXJfcHJvYmFiaWxpdHkgY2x1c3Rlcl9zZXQgY2x1c3RlcmluZyBjb2FsZXNjZSBjb2VyY2liaWxpdHkgY29sIGNvbGxhdGUgY29sbGF0aW9uIGNvbGxlY3QgY29sdSBjb2x1bSBjb2x1bW4gY29sdW1uX3ZhbHVlIGNvbHVtbnMgY29sdW1uc191cGRhdGVkIGNvbW1lbnQgY29tbWl0IGNvbXBhY3QgY29tcGF0aWJpbGl0eSBjb21waWxlZCBjb21wbGV0ZSBjb21wb3NpdGVfbGltaXQgY29tcG91bmQgY29tcHJlc3MgY29tcHV0ZSBjb25jYXQgY29uY2F0X3dzIGNvbmN1cnJlbnQgY29uZmlybSBjb25uIGNvbm5lYyBjb25uZWN0IGNvbm5lY3RfYnlfaXNjeWNsZSBjb25uZWN0X2J5X2lzbGVhZiBjb25uZWN0X2J5X3Jvb3QgY29ubmVjdF90aW1lIGNvbm5lY3Rpb24gY29uc2lkZXIgY29uc2lzdGVudCBjb25zdGFudCBjb25zdHJhaW50IGNvbnN0cmFpbnRzIGNvbnN0cnVjdG9yIGNvbnRhaW5lciBjb250ZW50IGNvbnRlbnRzIGNvbnRleHQgY29udHJpYnV0b3JzIGNvbnRyb2xmaWxlIGNvbnYgY29udmVydCBjb252ZXJ0X3R6IGNvcnIgY29ycl9rIGNvcnJfcyBjb3JyZXNwb25kaW5nIGNvcnJ1cHRpb24gY29zIGNvc3QgY291bnQgY291bnRfYmlnIGNvdW50ZWQgY292YXJfcG9wIGNvdmFyX3NhbXAgY3B1X3Blcl9jYWxsIGNwdV9wZXJfc2Vzc2lvbiBjcmMzMiBjcmVhdGUgY3JlYXRpb24gY3JpdGljYWwgY3Jvc3MgY3ViZSBjdW1lX2Rpc3QgY3VyZGF0ZSBjdXJyZW50IGN1cnJlbnRfZGF0ZSBjdXJyZW50X3RpbWUgY3VycmVudF90aW1lc3RhbXAgY3VycmVudF91c2VyIGN1cnNvciBjdXJ0aW1lIGN1c3RvbWRhdHVtIGN5Y2xlIGRhdGEgZGF0YWJhc2UgZGF0YWJhc2VzIGRhdGFmaWxlIGRhdGFmaWxlcyBkYXRhbGVuZ3RoIGRhdGVfYWRkIGRhdGVfY2FjaGUgZGF0ZV9mb3JtYXQgZGF0ZV9zdWIgZGF0ZWFkZCBkYXRlZGlmZiBkYXRlZnJvbXBhcnRzIGRhdGVuYW1lIGRhdGVwYXJ0IGRhdGV0aW1lMmZyb21wYXJ0cyBkYXkgZGF5X3RvX3NlY29uZCBkYXluYW1lIGRheW9mbW9udGggZGF5b2Z3ZWVrIGRheW9meWVhciBkYXlzIGRiX3JvbGVfY2hhbmdlIGRidGltZXpvbmUgZGRsIGRlYWxsb2NhdGUgZGVjbGFyZSBkZWNvZGUgZGVjb21wb3NlIGRlY3JlbWVudCBkZWNyeXB0IGRlZHVwbGljYXRlIGRlZiBkZWZhIGRlZmF1IGRlZmF1bCBkZWZhdWx0IGRlZmF1bHRzIGRlZmVycmVkIGRlZmkgZGVmaW4gZGVmaW5lIGRlZ3JlZXMgZGVsYXllZCBkZWxlZ2F0ZSBkZWxldGUgZGVsZXRlX2FsbCBkZWxpbWl0ZWQgZGVtYW5kIGRlbnNlX3JhbmsgZGVwdGggZGVxdWV1ZSBkZXNfZGVjcnlwdCBkZXNfZW5jcnlwdCBkZXNfa2V5X2ZpbGUgZGVzYyBkZXNjciBkZXNjcmkgZGVzY3JpYiBkZXNjcmliZSBkZXNjcmlwdG9yIGRldGVybWluaXN0aWMgZGlhZ25vc3RpY3MgZGlmZmVyZW5jZSBkaW1lbnNpb24gZGlyZWN0X2xvYWQgZGlyZWN0b3J5IGRpc2FibGUgZGlzYWJsZV9hbGwgZGlzYWxsb3cgZGlzYXNzb2NpYXRlIGRpc2NhcmRmaWxlIGRpc2Nvbm5lY3QgZGlza2dyb3VwIGRpc3RpbmN0IGRpc3RpbmN0cm93IGRpc3RyaWJ1dGUgZGlzdHJpYnV0ZWQgZGl2IGRvIGRvY3VtZW50IGRvbWFpbiBkb3RuZXQgZG91YmxlIGRvd25ncmFkZSBkcm9wIGR1bXBmaWxlIGR1cGxpY2F0ZSBkdXJhdGlvbiBlYWNoIGVkaXRpb24gZWRpdGlvbmFibGUgZWRpdGlvbnMgZWxlbWVudCBlbGxpcHNpcyBlbHNlIGVsc2lmIGVsdCBlbXB0eSBlbmFibGUgZW5hYmxlX2FsbCBlbmNsb3NlZCBlbmNvZGUgZW5jb2RpbmcgZW5jcnlwdCBlbmQgZW5kLWV4ZWMgZW5kaWFuIGVuZm9yY2VkIGVuZ2luZSBlbmdpbmVzIGVucXVldWUgZW50ZXJwcmlzZSBlbnRpdHllc2NhcGluZyBlb21vbnRoIGVycm9yIGVycm9ycyBlc2NhcGVkIGV2YWxuYW1lIGV2YWx1YXRlIGV2ZW50IGV2ZW50ZGF0YSBldmVudHMgZXhjZXB0IGV4Y2VwdGlvbiBleGNlcHRpb25zIGV4Y2hhbmdlIGV4Y2x1ZGUgZXhjbHVkaW5nIGV4ZWN1IGV4ZWN1dCBleGVjdXRlIGV4ZW1wdCBleGlzdHMgZXhpdCBleHAgZXhwaXJlIGV4cGxhaW4gZXhwb3J0IGV4cG9ydF9zZXQgZXh0ZW5kZWQgZXh0ZW50IGV4dGVybmFsIGV4dGVybmFsXzEgZXh0ZXJuYWxfMiBleHRlcm5hbGx5IGV4dHJhY3QgZmFpbGVkIGZhaWxlZF9sb2dpbl9hdHRlbXB0cyBmYWlsb3ZlciBmYWlsdXJlIGZhciBmYXN0IGZlYXR1cmVfc2V0IGZlYXR1cmVfdmFsdWUgZmV0Y2ggZmllbGQgZmllbGRzIGZpbGUgZmlsZV9uYW1lX2NvbnZlcnQgZmlsZXN5c3RlbV9saWtlX2xvZ2dpbmcgZmluYWwgZmluaXNoIGZpcnN0IGZpcnN0X3ZhbHVlIGZpeGVkIGZsYXNoX2NhY2hlIGZsYXNoYmFjayBmbG9vciBmbHVzaCBmb2xsb3dpbmcgZm9sbG93cyBmb3IgZm9yYWxsIGZvcmNlIGZvcm0gZm9ybWEgZm9ybWF0IGZvdW5kIGZvdW5kX3Jvd3MgZnJlZWxpc3QgZnJlZWxpc3RzIGZyZWVwb29scyBmcmVzaCBmcm9tIGZyb21fYmFzZTY0IGZyb21fZGF5cyBmdHAgZnVsbCBmdW5jdGlvbiBnZW5lcmFsIGdlbmVyYXRlZCBnZXQgZ2V0X2Zvcm1hdCBnZXRfbG9jayBnZXRkYXRlIGdldHV0Y2RhdGUgZ2xvYmFsIGdsb2JhbF9uYW1lIGdsb2JhbGx5IGdvIGdvdG8gZ3JhbnQgZ3JhbnRzIGdyZWF0ZXN0IGdyb3VwIGdyb3VwX2NvbmNhdCBncm91cF9pZCBncm91cGluZyBncm91cGluZ19pZCBncm91cHMgZ3RpZF9zdWJ0cmFjdCBndWFyYW50ZWUgZ3VhcmQgaGFuZGxlciBoYXNoIGhhc2hrZXlzIGhhdmluZyBoZWEgaGVhZCBoZWFkaSBoZWFkaW4gaGVhZGluZyBoZWFwIGhlbHAgaGV4IGhpZXJhcmNoeSBoaWdoIGhpZ2hfcHJpb3JpdHkgaG9zdHMgaG91ciBodHRwIGlkIGlkZW50X2N1cnJlbnQgaWRlbnRfaW5jciBpZGVudF9zZWVkIGlkZW50aWZpZWQgaWRlbnRpdHkgaWRsZV90aW1lIGlmIGlmbnVsbCBpZ25vcmUgaWlmIGlsaWtlIGlsbSBpbW1lZGlhdGUgaW1wb3J0IGluIGluY2x1ZGUgaW5jbHVkaW5nIGluY3JlbWVudCBpbmRleCBpbmRleGVzIGluZGV4aW5nIGluZGV4dHlwZSBpbmRpY2F0b3IgaW5kaWNlcyBpbmV0Nl9hdG9uIGluZXQ2X250b2EgaW5ldF9hdG9uIGluZXRfbnRvYSBpbmZpbGUgaW5pdGlhbCBpbml0aWFsaXplZCBpbml0aWFsbHkgaW5pdHJhbnMgaW5tZW1vcnkgaW5uZXIgaW5ub2RiIGlucHV0IGluc2VydCBpbnN0YWxsIGluc3RhbmNlIGluc3RhbnRpYWJsZSBpbnN0ciBpbnRlcmZhY2UgaW50ZXJsZWF2ZWQgaW50ZXJzZWN0IGludG8gaW52YWxpZGF0ZSBpbnZpc2libGUgaXMgaXNfZnJlZV9sb2NrIGlzX2lwdjQgaXNfaXB2NF9jb21wYXQgaXNfbm90IGlzX25vdF9udWxsIGlzX3VzZWRfbG9jayBpc2RhdGUgaXNudWxsIGlzb2xhdGlvbiBpdGVyYXRlIGphdmEgam9pbiBqc29uIGpzb25fZXhpc3RzIGtlZXAga2VlcF9kdXBsaWNhdGVzIGtleSBrZXlzIGtpbGwgbGFuZ3VhZ2UgbGFyZ2UgbGFzdCBsYXN0X2RheSBsYXN0X2luc2VydF9pZCBsYXN0X3ZhbHVlIGxheCBsY2FzZSBsZWFkIGxlYWRpbmcgbGVhc3QgbGVhdmVzIGxlZnQgbGVuIGxlbmdodCBsZW5ndGggbGVzcyBsZXZlbCBsZXZlbHMgbGlicmFyeSBsaWtlIGxpa2UyIGxpa2U0IGxpa2VjIGxpbWl0IGxpbmVzIGxpbmsgbGlzdCBsaXN0YWdnIGxpdHRsZSBsbiBsb2FkIGxvYWRfZmlsZSBsb2IgbG9icyBsb2NhbCBsb2NhbHRpbWUgbG9jYWx0aW1lc3RhbXAgbG9jYXRlIGxvY2F0b3IgbG9jayBsb2NrZWQgbG9nIGxvZzEwIGxvZzIgbG9nZmlsZSBsb2dmaWxlcyBsb2dnaW5nIGxvZ2ljYWwgbG9naWNhbF9yZWFkc19wZXJfY2FsbCBsb2dvZmYgbG9nb24gbG9ncyBsb25nIGxvb3AgbG93IGxvd19wcmlvcml0eSBsb3dlciBscGFkIGxydHJpbSBsdHJpbSBtYWluIG1ha2Vfc2V0IG1ha2VkYXRlIG1ha2V0aW1lIG1hbmFnZWQgbWFuYWdlbWVudCBtYW51YWwgbWFwIG1hcHBpbmcgbWFzayBtYXN0ZXIgbWFzdGVyX3Bvc193YWl0IG1hdGNoIG1hdGNoZWQgbWF0ZXJpYWxpemVkIG1heCBtYXhleHRlbnRzIG1heGltaXplIG1heGluc3RhbmNlcyBtYXhsZW4gbWF4bG9nZmlsZXMgbWF4bG9naGlzdG9yeSBtYXhsb2dtZW1iZXJzIG1heHNpemUgbWF4dHJhbnMgbWQ1IG1lYXN1cmVzIG1lZGlhbiBtZWRpdW0gbWVtYmVyIG1lbWNvbXByZXNzIG1lbW9yeSBtZXJnZSBtaWNyb3NlY29uZCBtaWQgbWlncmF0aW9uIG1pbiBtaW5leHRlbnRzIG1pbmltdW0gbWluaW5nIG1pbnVzIG1pbnV0ZSBtaW52YWx1ZSBtaXNzaW5nIG1vZCBtb2RlIG1vZGVsIG1vZGlmaWNhdGlvbiBtb2RpZnkgbW9kdWxlIG1vbml0b3JpbmcgbW9udGggbW9udGhzIG1vdW50IG1vdmUgbW92ZW1lbnQgbXVsdGlzZXQgbXV0ZXggbmFtZSBuYW1lX2NvbnN0IG5hbWVzIG5hbiBuYXRpb25hbCBuYXRpdmUgbmF0dXJhbCBuYXYgbmNoYXIgbmNsb2IgbmVzdGVkIG5ldmVyIG5ldyBuZXdsaW5lIG5leHQgbmV4dHZhbCBubyBub193cml0ZV90b19iaW5sb2cgbm9hcmNoaXZlbG9nIG5vYXVkaXQgbm9iYWRmaWxlIG5vY2hlY2sgbm9jb21wcmVzcyBub2NvcHkgbm9jeWNsZSBub2RlbGF5IG5vZGlzY2FyZGZpbGUgbm9lbnRpdHllc2NhcGluZyBub2d1YXJhbnRlZSBub2tlZXAgbm9sb2dmaWxlIG5vbWFwcGluZyBub21heHZhbHVlIG5vbWluaW1pemUgbm9taW52YWx1ZSBub21vbml0b3Jpbmcgbm9uZSBub25lZGl0aW9uYWJsZSBub25zY2hlbWEgbm9vcmRlciBub3ByIG5vcHJvIG5vcHJvbSBub3Byb21wIG5vcHJvbXB0IG5vcmVseSBub3Jlc2V0bG9ncyBub3JldmVyc2Ugbm9ybWFsIG5vcm93ZGVwZW5kZW5jaWVzIG5vc2NoZW1hY2hlY2sgbm9zd2l0Y2ggbm90IG5vdGhpbmcgbm90aWNlIG5vdHJpbSBub3ZhbGlkYXRlIG5vdyBub3dhaXQgbnRoX3ZhbHVlIG51bGxpZiBudWxscyBudW0gbnVtYiBudW1iZSBudmFyY2hhciBudmFyY2hhcjIgb2JqZWN0IG9jaWNvbGwgb2NpZGF0ZSBvY2lkYXRldGltZSBvY2lkdXJhdGlvbiBvY2lpbnRlcnZhbCBvY2lsb2Jsb2NhdG9yIG9jaW51bWJlciBvY2lyZWYgb2NpcmVmY3Vyc29yIG9jaXJvd2lkIG9jaXN0cmluZyBvY2l0eXBlIG9jdCBvY3RldF9sZW5ndGggb2Ygb2ZmIG9mZmxpbmUgb2Zmc2V0IG9pZCBvaWRpbmRleCBvbGQgb24gb25saW5lIG9ubHkgb3BhcXVlIG9wZW4gb3BlcmF0aW9ucyBvcGVyYXRvciBvcHRpbWFsIG9wdGltaXplIG9wdGlvbiBvcHRpb25hbGx5IG9yIG9yYWNsZSBvcmFjbGVfZGF0ZSBvcmFkYXRhIG9yZCBvcmRhdWRpbyBvcmRkaWNvbSBvcmRkb2Mgb3JkZXIgb3JkaW1hZ2Ugb3JkaW5hbGl0eSBvcmR2aWRlbyBvcmdhbml6YXRpb24gb3JsYW55IG9ybHZhcnkgb3V0IG91dGVyIG91dGZpbGUgb3V0bGluZSBvdXRwdXQgb3ZlciBvdmVyZmxvdyBvdmVycmlkaW5nIHBhY2thZ2UgcGFkIHBhcmFsbGVsIHBhcmFsbGVsX2VuYWJsZSBwYXJhbWV0ZXJzIHBhcmVudCBwYXJzZSBwYXJ0aWFsIHBhcnRpdGlvbiBwYXJ0aXRpb25zIHBhc2NhbCBwYXNzaW5nIHBhc3N3b3JkIHBhc3N3b3JkX2dyYWNlX3RpbWUgcGFzc3dvcmRfbG9ja190aW1lIHBhc3N3b3JkX3JldXNlX21heCBwYXNzd29yZF9yZXVzZV90aW1lIHBhc3N3b3JkX3ZlcmlmeV9mdW5jdGlvbiBwYXRjaCBwYXRoIHBhdGluZGV4IHBjdGluY3JlYXNlIHBjdHRocmVzaG9sZCBwY3R1c2VkIHBjdHZlcnNpb24gcGVyY2VudCBwZXJjZW50X3JhbmsgcGVyY2VudGlsZV9jb250IHBlcmNlbnRpbGVfZGlzYyBwZXJmb3JtYW5jZSBwZXJpb2QgcGVyaW9kX2FkZCBwZXJpb2RfZGlmZiBwZXJtYW5lbnQgcGh5c2ljYWwgcGkgcGlwZSBwaXBlbGluZWQgcGl2b3QgcGx1Z2dhYmxlIHBsdWdpbiBwb2xpY3kgcG9zaXRpb24gcG9zdF90cmFuc2FjdGlvbiBwb3cgcG93ZXIgcHJhZ21hIHByZWJ1aWx0IHByZWNlZGVzIHByZWNlZGluZyBwcmVjaXNpb24gcHJlZGljdGlvbiBwcmVkaWN0aW9uX2Nvc3QgcHJlZGljdGlvbl9kZXRhaWxzIHByZWRpY3Rpb25fcHJvYmFiaWxpdHkgcHJlZGljdGlvbl9zZXQgcHJlcGFyZSBwcmVzZW50IHByZXNlcnZlIHByaW9yIHByaW9yaXR5IHByaXZhdGUgcHJpdmF0ZV9zZ2EgcHJpdmlsZWdlcyBwcm9jZWR1cmFsIHByb2NlZHVyZSBwcm9jZWR1cmVfYW5hbHl6ZSBwcm9jZXNzbGlzdCBwcm9maWxlcyBwcm9qZWN0IHByb21wdCBwcm90ZWN0aW9uIHB1YmxpYyBwdWJsaXNoaW5nc2VydmVybmFtZSBwdXJnZSBxdWFydGVyIHF1ZXJ5IHF1aWNrIHF1aWVzY2UgcXVvdGEgcXVvdGVuYW1lIHJhZGlhbnMgcmFpc2UgcmFuZCByYW5nZSByYW5rIHJhdyByZWFkIHJlYWRzIHJlYWRzaXplIHJlYnVpbGQgcmVjb3JkIHJlY29yZHMgcmVjb3ZlciByZWNvdmVyeSByZWN1cnNpdmUgcmVjeWNsZSByZWRvIHJlZHVjZWQgcmVmIHJlZmVyZW5jZSByZWZlcmVuY2VkIHJlZmVyZW5jZXMgcmVmZXJlbmNpbmcgcmVmcmVzaCByZWdleHBfbGlrZSByZWdpc3RlciByZWdyX2F2Z3ggcmVncl9hdmd5IHJlZ3JfY291bnQgcmVncl9pbnRlcmNlcHQgcmVncl9yMiByZWdyX3Nsb3BlIHJlZ3Jfc3h4IHJlZ3Jfc3h5IHJlamVjdCByZWtleSByZWxhdGlvbmFsIHJlbGF0aXZlIHJlbGF5bG9nIHJlbGVhc2UgcmVsZWFzZV9sb2NrIHJlbGllc19vbiByZWxvY2F0ZSByZWx5IHJlbSByZW1haW5kZXIgcmVuYW1lIHJlcGFpciByZXBlYXQgcmVwbGFjZSByZXBsaWNhdGUgcmVwbGljYXRpb24gcmVxdWlyZWQgcmVzZXQgcmVzZXRsb2dzIHJlc2l6ZSByZXNvdXJjZSByZXNwZWN0IHJlc3RvcmUgcmVzdHJpY3RlZCByZXN1bHQgcmVzdWx0X2NhY2hlIHJlc3VtYWJsZSByZXN1bWUgcmV0ZW50aW9uIHJldHVybiByZXR1cm5pbmcgcmV0dXJucyByZXVzZSByZXZlcnNlIHJldm9rZSByaWdodCBybGlrZSByb2xlIHJvbGVzIHJvbGxiYWNrIHJvbGxpbmcgcm9sbHVwIHJvdW5kIHJvdyByb3dfY291bnQgcm93ZGVwZW5kZW5jaWVzIHJvd2lkIHJvd251bSByb3dzIHJ0cmltIHJ1bGVzIHNhZmUgc2FsdCBzYW1wbGUgc2F2ZSBzYXZlcG9pbnQgc2IxIHNiMiBzYjQgc2NhbiBzY2hlbWEgc2NoZW1hY2hlY2sgc2NuIHNjb3BlIHNjcm9sbCBzZG9fZ2VvcmFzdGVyIHNkb190b3BvX2dlb21ldHJ5IHNlYXJjaCBzZWNfdG9fdGltZSBzZWNvbmQgc2VjdGlvbiBzZWN1cmVmaWxlIHNlY3VyaXR5IHNlZWQgc2VnbWVudCBzZWxlY3Qgc2VsZiBzZXF1ZW5jZSBzZXF1ZW50aWFsIHNlcmlhbGl6YWJsZSBzZXJ2ZXIgc2VydmVyZXJyb3Igc2Vzc2lvbiBzZXNzaW9uX3VzZXIgc2Vzc2lvbnNfcGVyX3VzZXIgc2V0IHNldHMgc2V0dGluZ3Mgc2hhIHNoYTEgc2hhMiBzaGFyZSBzaGFyZWQgc2hhcmVkX3Bvb2wgc2hvcnQgc2hvdyBzaHJpbmsgc2h1dGRvd24gc2lfYXZlcmFnZWNvbG9yIHNpX2NvbG9yaGlzdG9ncmFtIHNpX2ZlYXR1cmVsaXN0IHNpX3Bvc2l0aW9uYWxjb2xvciBzaV9zdGlsbGltYWdlIHNpX3RleHR1cmUgc2libGluZ3Mgc2lkIHNpZ24gc2luIHNpemUgc2l6ZV90IHNpemVzIHNraXAgc2xhdmUgc2xlZXAgc21hbGxkYXRldGltZWZyb21wYXJ0cyBzbWFsbGZpbGUgc25hcHNob3Qgc29tZSBzb25hbWUgc29ydCBzb3VuZGV4IHNvdXJjZSBzcGFjZSBzcGFyc2Ugc3BmaWxlIHNwbGl0IHNxbCBzcWxfYmlnX3Jlc3VsdCBzcWxfYnVmZmVyX3Jlc3VsdCBzcWxfY2FjaGUgc3FsX2NhbGNfZm91bmRfcm93cyBzcWxfc21hbGxfcmVzdWx0IHNxbF92YXJpYW50X3Byb3BlcnR5IHNxbGNvZGUgc3FsZGF0YSBzcWxlcnJvciBzcWxuYW1lIHNxbHN0YXRlIHNxcnQgc3F1YXJlIHN0YW5kYWxvbmUgc3RhbmRieSBzdGFydCBzdGFydGluZyBzdGFydHVwIHN0YXRlbWVudCBzdGF0aWMgc3RhdGlzdGljcyBzdGF0c19iaW5vbWlhbF90ZXN0IHN0YXRzX2Nyb3NzdGFiIHN0YXRzX2tzX3Rlc3Qgc3RhdHNfbW9kZSBzdGF0c19td190ZXN0IHN0YXRzX29uZV93YXlfYW5vdmEgc3RhdHNfdF90ZXN0XyBzdGF0c190X3Rlc3RfaW5kZXAgc3RhdHNfdF90ZXN0X29uZSBzdGF0c190X3Rlc3RfcGFpcmVkIHN0YXRzX3dzcl90ZXN0IHN0YXR1cyBzdGQgc3RkZGV2IHN0ZGRldl9wb3Agc3RkZGV2X3NhbXAgc3RkZXYgc3RvcCBzdG9yYWdlIHN0b3JlIHN0b3JlZCBzdHIgc3RyX3RvX2RhdGUgc3RyYWlnaHRfam9pbiBzdHJjbXAgc3RyaWN0IHN0cmluZyBzdHJ1Y3Qgc3R1ZmYgc3R5bGUgc3ViZGF0ZSBzdWJwYXJ0aXRpb24gc3VicGFydGl0aW9ucyBzdWJzdGl0dXRhYmxlIHN1YnN0ciBzdWJzdHJpbmcgc3VidGltZSBzdWJ0cmluZ19pbmRleCBzdWJ0eXBlIHN1Y2Nlc3Mgc3VtIHN1c3BlbmQgc3dpdGNoIHN3aXRjaG9mZnNldCBzd2l0Y2hvdmVyIHN5bmMgc3luY2hyb25vdXMgc3lub255bSBzeXMgc3lzX3htbGFnZyBzeXNhc20gc3lzYXV4IHN5c2RhdGUgc3lzZGF0ZXRpbWVvZmZzZXQgc3lzZGJhIHN5c29wZXIgc3lzdGVtIHN5c3RlbV91c2VyIHN5c3V0Y2RhdGV0aW1lIHRhYmxlIHRhYmxlcyB0YWJsZXNwYWNlIHRhbiB0ZG8gdGVtcGxhdGUgdGVtcG9yYXJ5IHRlcm1pbmF0ZWQgdGVydGlhcnlfd2VpZ2h0cyB0ZXN0IHRoYW4gdGhlbiB0aHJlYWQgdGhyb3VnaCB0aWVyIHRpZXMgdGltZSB0aW1lX2Zvcm1hdCB0aW1lX3pvbmUgdGltZWRpZmYgdGltZWZyb21wYXJ0cyB0aW1lb3V0IHRpbWVzdGFtcCB0aW1lc3RhbXBhZGQgdGltZXN0YW1wZGlmZiB0aW1lem9uZV9hYmJyIHRpbWV6b25lX21pbnV0ZSB0aW1lem9uZV9yZWdpb24gdG8gdG9fYmFzZTY0IHRvX2RhdGUgdG9fZGF5cyB0b19zZWNvbmRzIHRvZGF0ZXRpbWVvZmZzZXQgdHJhY2UgdHJhY2tpbmcgdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb25hbCB0cmFuc2xhdGUgdHJhbnNsYXRpb24gdHJlYXQgdHJpZ2dlciB0cmlnZ2VyX25lc3RsZXZlbCB0cmlnZ2VycyB0cmltIHRydW5jYXRlIHRyeV9jYXN0IHRyeV9jb252ZXJ0IHRyeV9wYXJzZSB0eXBlIHViMSB1YjIgdWI0IHVjYXNlIHVuYXJjaGl2ZWQgdW5ib3VuZGVkIHVuY29tcHJlc3MgdW5kZXIgdW5kbyB1bmhleCB1bmljb2RlIHVuaWZvcm0gdW5pbnN0YWxsIHVuaW9uIHVuaXF1ZSB1bml4X3RpbWVzdGFtcCB1bmtub3duIHVubGltaXRlZCB1bmxvY2sgdW5waXZvdCB1bnJlY292ZXJhYmxlIHVuc2FmZSB1bnNpZ25lZCB1bnRpbCB1bnRydXN0ZWQgdW51c2FibGUgdW51c2VkIHVwZGF0ZSB1cGRhdGVkIHVwZ3JhZGUgdXBwZWQgdXBwZXIgdXBzZXJ0IHVybCB1cm93aWQgdXNhYmxlIHVzYWdlIHVzZSB1c2Vfc3RvcmVkX291dGxpbmVzIHVzZXIgdXNlcl9kYXRhIHVzZXJfcmVzb3VyY2VzIHVzZXJzIHVzaW5nIHV0Y19kYXRlIHV0Y190aW1lc3RhbXAgdXVpZCB1dWlkX3Nob3J0IHZhbGlkYXRlIHZhbGlkYXRlX3Bhc3N3b3JkX3N0cmVuZ3RoIHZhbGlkYXRpb24gdmFsaXN0IHZhbHVlIHZhbHVlcyB2YXIgdmFyX3NhbXAgdmFyY2hhcmMgdmFyaSB2YXJpYSB2YXJpYWIgdmFyaWFibCB2YXJpYWJsZSB2YXJpYWJsZXMgdmFyaWFuY2UgdmFycCB2YXJyYXcgdmFycmF3YyB2YXJyYXkgdmVyaWZ5IHZlcnNpb24gdmVyc2lvbnMgdmlldyB2aXJ0dWFsIHZpc2libGUgdm9pZCB3YWl0IHdhbGxldCB3YXJuaW5nIHdhcm5pbmdzIHdlZWsgd2Vla2RheSB3ZWVrb2Z5ZWFyIHdlbGxmb3JtZWQgd2hlbiB3aGVuZSB3aGVuZXYgd2hlbmV2ZSB3aGVuZXZlciB3aGVyZSB3aGlsZSB3aGl0ZXNwYWNlIHdpdGggd2l0aGluIHdpdGhvdXQgd29yayB3cmFwcGVkIHhkYiB4bWwgeG1sYWdnIHhtbGF0dHJpYnV0ZXMgeG1sY2FzdCB4bWxjb2xhdHR2YWwgeG1sZWxlbWVudCB4bWxleGlzdHMgeG1sZm9yZXN0IHhtbGluZGV4IHhtbG5hbWVzcGFjZXMgeG1scGkgeG1scXVlcnkgeG1scm9vdCB4bWxzY2hlbWEgeG1sc2VyaWFsaXplIHhtbHRhYmxlIHhtbHR5cGUgeG9yIHllYXIgeWVhcl90b19tb250aCB5ZWFycyB5ZWFyd2VlayIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIixidWlsdF9pbjoiYXJyYXkgYmlnaW50IGJpbmFyeSBiaXQgYmxvYiBib29sZWFuIGNoYXIgY2hhcmFjdGVyIGRhdGUgZGVjIGRlY2ltYWwgZmxvYXQgaW50IGludDggaW50ZWdlciBpbnRlcnZhbCBudW1iZXIgbnVtZXJpYyByZWFsIHJlY29yZCBzZXJpYWwgc2VyaWFsOCBzbWFsbGludCB0ZXh0IHZhcmNoYXIgdmFyeWluZyB2b2lkIn0sYzpbe2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2UuQkUse2I6IicnIn1dfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbZS5CRSx7YjonIiInfV19LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFXX0sZS5DTk0sZS5DQkNNLHRdfSxlLkNCQ00sdF19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJyIixmdW5jdGlvbihlKXt2YXIgcj0iKFthLXpBLVpdfFxcLlthLXpBLVouXSlbYS16QS1aMC05Ll9dKiI7cmV0dXJue2M6W2UuSENNLHtiOnIsbDpyLGs6e2tleXdvcmQ6ImZ1bmN0aW9uIGlmIGluIGJyZWFrIG5leHQgcmVwZWF0IGVsc2UgZm9yIHJldHVybiBzd2l0Y2ggd2hpbGUgdHJ5IHRyeUNhdGNoIHN0b3Agd2FybmluZyByZXF1aXJlIGxpYnJhcnkgYXR0YWNoIGRldGFjaCBzb3VyY2Ugc2V0TWV0aG9kIHNldEdlbmVyaWMgc2V0R3JvdXBHZW5lcmljIHNldENsYXNzIC4uLiIsbGl0ZXJhbDoiTlVMTCBOQSBUUlVFIEZBTFNFIFQgRiBJbmYgTmFOIE5BX2ludGVnZXJffDEwIE5BX3JlYWxffDEwIE5BX2NoYXJhY3Rlcl98MTAgTkFfY29tcGxleF98MTAifSxyOjB9LHtjTjoibnVtYmVyIixiOiIwW3hYXVswLTlhLWZBLUZdK1tMaV0/XFxiIixyOjB9LHtjTjoibnVtYmVyIixiOiJcXGQrKD86W2VFXVsrXFwtXT9cXGQqKT9MXFxiIixyOjB9LHtjTjoibnVtYmVyIixiOiJcXGQrXFwuKD8hXFxkKSg/OmlcXGIpPyIscjowfSx7Y046Im51bWJlciIsYjoiXFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKik/aT9cXGIiLHI6MH0se2NOOiJudW1iZXIiLGI6IlxcLlxcZCsoPzpbZUVdWytcXC1dP1xcZCopP2k/XFxiIixyOjB9LHtiOiJgIixlOiJgIixyOjB9LHtjTjoic3RyaW5nIixjOltlLkJFXSx2Olt7YjonIicsZTonIid9LHtiOiInIixlOiInIn1dfV19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJwZXJsIixmdW5jdGlvbihlKXt2YXIgdD0iZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjIG1hIHN5c3dyaXRlIHRyIHNlbmQgdW1hc2sgc3lzb3BlbiBzaG13cml0ZSB2ZWMgcXggdXRpbWUgbG9jYWwgb2N0IHNlbWN0bCBsb2NhbHRpbWUgcmVhZHBpcGUgZG8gcmV0dXJuIGZvcm1hdCByZWFkIHNwcmludGYgZGJtb3BlbiBwb3AgZ2V0cGdycCBub3QgZ2V0cHduYW0gcmV3aW5kZGlyIHFxZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50IHNodXRkb3duIGR1bXAgY2hvbXAgY29ubmVjdCBnZXRzb2NrbmFtZSBkaWUgc29ja2V0cGFpciBjbG9zZSBmbG9jayBleGlzdHMgaW5kZXggc2htZ2V0c3ViIGZvciBlbmRwd2VudCByZWRvIGxzdGF0IG1zZ2N0bCBzZXRwZ3JwIGFicyBleGl0IHNlbGVjdCBwcmludCByZWYgZ2V0aG9zdGJ5YWRkciB1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCBnZXRwZWVybmFtZSByZWN2IGxvZyBzZXRzb2Nrb3B0IGNvcyBsYXN0IHJldmVyc2UgZ2V0aG9zdGJ5bmFtZSBnZXRncm5hbSBzdHVkeSBmb3JtbGluZSBlbmRob3N0ZW50IHRpbWVzIGNob3AgbGVuZ3RoIGdldGhvc3RlbnQgZ2V0bmV0ZW50IHBhY2sgZ2V0cHJvdG9lbnQgZ2V0c2VydmJ5bmFtZSByYW5kIG1rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgZ2V0c29ja29wdCBnZXRwcmlvcml0eSByaW5kZXggd2FudGFycmF5IGhleCBzeXN0ZW0gZ2V0c2VydmJ5cG9ydCBlbmRzZXJ2ZW50IGludCBjaHIgdW50aWUgcm1kaXIgcHJvdG90eXBlIHRlbGwgbGlzdGVuIGZvcmsgc2htcmVhZCB1Y2ZpcnN0IHNldHByb3RvZW50IGVsc2Ugc3lzc2VlayBsaW5rIGdldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciBsY2ZpcnN0IHVudGlsIHdhcm4gd2hpbGUgdmFsdWVzIHNoaWZ0IHRlbGxkaXIgZ2V0cHd1aWQgbXkgZ2V0cHJvdG9ieW51bWJlciBkZWxldGUgYW5kIHNvcnQgdWMgZGVmaW5lZCBzcmFuZCBhY2NlcHQgcGFja2FnZSBzZWVrZGlyIGdldHByb3RvYnluYW1lIHNlbW9wIG91ciByZW5hbWUgc2VlayBpZiBxfDAgY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoIHRpZSBzaW4gbXNnZ2V0IG1hcCBzdGF0IGdldGxvZ2luIHVubGVzcyBlbHNpZiB0cnVuY2F0ZSBleGVjIGtleXMgZ2xvYiB0aWVkIGNsb3NlZGlyaW9jdGwgc29ja2V0IHJlYWRsaW5rIGV2YWwgeG9yIHJlYWRsaW5lIGJpbm1vZGUgc2V0c2VydmVudCBlb2Ygb3JkIGJpbmQgYWxhcm0gcGlwZSBhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbiIscj17Y046InN1YnN0IixiOiJbJEBdXFx7IixlOiJcXH0iLGs6dH0scz17YjoiLT57IixlOiJ9In0sbj17djpbe2I6L1wkXGQvfSx7YjovW1wkJUBdKFxeXHdcYnwjXHcrKDo6XHcrKSp8e1x3K318XHcrKDo6XHcqKSopL30se2I6L1tcJCVAXVteXHNcd3tdLyxyOjB9XX0saT1bZS5CRSxyLG5dLG89W24sZS5IQ00sZS5DKCJeXFw9XFx3IiwiXFw9Y3V0Iix7ZVc6ITB9KSxzLHtjTjoic3RyaW5nIixjOmksdjpbe2I6InFbcXd4cl0/XFxzKlxcKCIsZToiXFwpIixyOjV9LHtiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIscjo1fSx7YjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLHI6NX0se2I6InFbcXd4cl0/XFxzKlxcfCIsZToiXFx8IixyOjV9LHtiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIscjo1fSx7YjoicXdcXHMrcSIsZToicSIscjo1fSx7YjoiJyIsZToiJyIsYzpbZS5CRV19LHtiOiciJyxlOiciJ30se2I6ImAiLGU6ImAiLGM6W2UuQkVdfSx7Yjoie1xcdyt9IixjOltdLHI6MH0se2I6Ii0/XFx3K1xccypcXD1cXD4iLGM6W10scjowfV19LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtiOiIoXFwvXFwvfCIrZS5SU1IrInxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXGIpXFxzKiIsazoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscjowLGM6W2UuSENNLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2UuQkVdLHI6MH1dfSx7Y046ImZ1bmN0aW9uIixiSzoic3ViIixlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsZUU6ITAscjo1LGM6W2UuVE1dfSx7YjoiLVxcd1xcYiIscjowfSx7YjoiXl9fREFUQV9fJCIsZToiXl9fRU5EX18kIixzTDoibW9qb2xpY2lvdXMiLGM6W3tiOiJeQEAuKiIsZToiJCIsY046ImNvbW1lbnQifV19XTtyZXR1cm4gci5jPW8scy5jPW8se2FsaWFzZXM6WyJwbCIsInBtIl0sbDovW1x3XC5dKy8sazp0LGM6b319KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImluaSIsZnVuY3Rpb24oZSl7dmFyIGI9e2NOOiJzdHJpbmciLGM6W2UuQkVdLHY6W3tiOiInJyciLGU6IicnJyIscjoxMH0se2I6JyIiIicsZTonIiIiJyxyOjEwfSx7YjonIicsZTonIid9LHtiOiInIixlOiInIn1dfTtyZXR1cm57YWxpYXNlczpbInRvbWwiXSxjSTohMCxpOi9cUy8sYzpbZS5DKCI7IiwiJCIpLGUuSENNLHtjTjoic2VjdGlvbiIsYjovXlxzKlxbKy8sZTovXF0rL30se2I6L15bYS16MC05XFtcXV8tXStccyo9XHMqLyxlOiIkIixyQjohMCxjOlt7Y046ImF0dHIiLGI6L1thLXowLTlcW1xdXy1dKy99LHtiOi89LyxlVzohMCxyOjAsYzpbe2NOOiJsaXRlcmFsIixiOi9cYm9ufG9mZnx0cnVlfGZhbHNlfHllc3xub1xiL30se2NOOiJ2YXJpYWJsZSIsdjpbe2I6L1wkW1x3XGQiXVtcd1xkX10qL30se2I6L1wkXHsoLio/KX0vfV19LGIse2NOOiJudW1iZXIiLGI6LyhbXCtcLV0rKT9bXGRdK19bXGRfXSsvfSxlLk5NXX1dfV19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJkaWZmIixmdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbInBhdGNoIl0sYzpbe2NOOiJtZXRhIixyOjEwLHY6W3tiOi9eQEAgK1wtXGQrLFxkKyArXCtcZCssXGQrICtAQCQvfSx7YjovXlwqXCpcKiArXGQrLFxkKyArXCpcKlwqXCokL30se2I6L15cLVwtXC0gK1xkKyxcZCsgK1wtXC1cLVwtJC99XX0se2NOOiJjb21tZW50Iix2Olt7YjovSW5kZXg6IC8sZTovJC99LHtiOi89ezMsfS8sZTovJC99LHtiOi9eXC17M30vLGU6LyQvfSx7YjovXlwqezN9IC8sZTovJC99LHtiOi9eXCt7M30vLGU6LyQvfSx7YjovXCp7NX0vLGU6L1wqezV9JC99XX0se2NOOiJhZGRpdGlvbiIsYjoiXlxcKyIsZToiJCJ9LHtjTjoiZGVsZXRpb24iLGI6Il5cXC0iLGU6IiQifSx7Y046ImFkZGl0aW9uIixiOiJeXFwhIixlOiIkIn1dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiZ28iLGZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiJicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIgYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUiLGxpdGVyYWw6InRydWUgZmFsc2UgaW90YSBuaWwiLGJ1aWx0X2luOiJhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUifTtyZXR1cm57YWxpYXNlczpbImdvbGFuZyJdLGs6dCxpOiI8LyIsYzpbZS5DTENNLGUuQ0JDTSx7Y046InN0cmluZyIsdjpbZS5RU00se2I6IiciLGU6IlteXFxcXF0nIn0se2I6ImAiLGU6ImAifV19LHtjTjoibnVtYmVyIix2Olt7YjplLkNOUisiW2RmbHNpXSIscjoxfSxlLkNOTV19LHtiOi86PS99LHtjTjoiZnVuY3Rpb24iLGJLOiJmdW5jIixlOi9ccypcey8sZUU6ITAsYzpbZS5UTSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxrOnQsaTovWyInXS99XX1dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiYmFzaCIsZnVuY3Rpb24oZSl7dmFyIHQ9e2NOOiJ2YXJpYWJsZSIsdjpbe2I6L1wkW1x3XGQjQF1bXHdcZF9dKi99LHtiOi9cJFx7KC4qPyl9L31dfSxzPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOltlLkJFLHQse2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6W2UuQkVdfV19LGE9e2NOOiJzdHJpbmciLGI6LycvLGU6LycvfTtyZXR1cm57YWxpYXNlczpbInNoIiwienNoIl0sbDovXGItP1thLXpcLl9dK1xiLyxrOntrZXl3b3JkOiJpZiB0aGVuIGVsc2UgZWxpZiBmaSBmb3Igd2hpbGUgaW4gZG8gZG9uZSBjYXNlIGVzYWMgZnVuY3Rpb24iLGxpdGVyYWw6InRydWUgZmFsc2UiLGJ1aWx0X2luOiJicmVhayBjZCBjb250aW51ZSBldmFsIGV4ZWMgZXhpdCBleHBvcnQgZ2V0b3B0cyBoYXNoIHB3ZCByZWFkb25seSByZXR1cm4gc2hpZnQgdGVzdCB0aW1lcyB0cmFwIHVtYXNrIHVuc2V0IGFsaWFzIGJpbmQgYnVpbHRpbiBjYWxsZXIgY29tbWFuZCBkZWNsYXJlIGVjaG8gZW5hYmxlIGhlbHAgbGV0IGxvY2FsIGxvZ291dCBtYXBmaWxlIHByaW50ZiByZWFkIHJlYWRhcnJheSBzb3VyY2UgdHlwZSB0eXBlc2V0IHVsaW1pdCB1bmFsaWFzIHNldCBzaG9wdCBhdXRvbG9hZCBiZyBiaW5ka2V5IGJ5ZSBjYXAgY2hkaXIgY2xvbmUgY29tcGFyZ3VtZW50cyBjb21wY2FsbCBjb21wY3RsIGNvbXBkZXNjcmliZSBjb21wZmlsZXMgY29tcGdyb3VwcyBjb21wcXVvdGUgY29tcHRhZ3MgY29tcHRyeSBjb21wdmFsdWVzIGRpcnMgZGlzYWJsZSBkaXNvd24gZWNob3RjIGVjaG90aSBlbXVsYXRlIGZjIGZnIGZsb2F0IGZ1bmN0aW9ucyBnZXRjYXAgZ2V0bG4gaGlzdG9yeSBpbnRlZ2VyIGpvYnMga2lsbCBsaW1pdCBsb2cgbm9nbG9iIHBvcGQgcHJpbnQgcHVzaGQgcHVzaGxuIHJlaGFzaCBzY2hlZCBzZXRjYXAgc2V0b3B0IHN0YXQgc3VzcGVuZCB0dHljdGwgdW5mdW5jdGlvbiB1bmhhc2ggdW5saW1pdCB1bnNldG9wdCB2YXJlZCB3YWl0IHdoZW5jZSB3aGVyZSB3aGljaCB6Y29tcGlsZSB6Zm9ybWF0IHpmdHAgemxlIHptb2Rsb2FkIHpwYXJzZW9wdHMgenByb2YgenB0eSB6cmVnZXhwYXJzZSB6c29ja2V0IHpzdHlsZSB6dGNwIixfOiItbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEifSxjOlt7Y046Im1ldGEiLGI6L14jIVteXG5dK3NoXHMqJC8scjoxMH0se2NOOiJmdW5jdGlvbiIsYjovXHdbXHdcZF9dKlxzKlwoXHMqXClccypcey8sckI6ITAsYzpbZS5pbmhlcml0KGUuVE0se2I6L1x3W1x3XGRfXSovfSldLHI6MH0sZS5IQ00scyxhLHRdfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgicHl0aG9uIixmdW5jdGlvbihlKXt2YXIgcj17a2V5d29yZDoiYW5kIGVsaWYgaXMgZ2xvYmFsIGFzIGluIGlmIGZyb20gcmFpc2UgZm9yIGV4Y2VwdCBmaW5hbGx5IHByaW50IGltcG9ydCBwYXNzIHJldHVybiBleGVjIGVsc2UgYnJlYWsgbm90IHdpdGggY2xhc3MgYXNzZXJ0IHlpZWxkIHRyeSB3aGlsZSBjb250aW51ZSBkZWwgb3IgZGVmIGxhbWJkYSBhc3luYyBhd2FpdCBub25sb2NhbHwxMCBOb25lIFRydWUgRmFsc2UiLGJ1aWx0X2luOiJFbGxpcHNpcyBOb3RJbXBsZW1lbnRlZCJ9LGI9e2NOOiJtZXRhIixiOi9eKD4+PnxcLlwuXC4pIC99LGM9e2NOOiJzdWJzdCIsYjovXHsvLGU6L1x9LyxrOnIsaTovIy99LGE9e2NOOiJzdHJpbmciLGM6W2UuQkVdLHY6W3tiOi8odXxiKT9yPycnJy8sZTovJycnLyxjOltiXSxyOjEwfSx7YjovKHV8Yik/cj8iIiIvLGU6LyIiIi8sYzpbYl0scjoxMH0se2I6LyhmcnxyZnxmKScnJy8sZTovJycnLyxjOltiLGNdfSx7YjovKGZyfHJmfGYpIiIiLyxlOi8iIiIvLGM6W2IsY119LHtiOi8odXxyfHVyKScvLGU6LycvLHI6MTB9LHtiOi8odXxyfHVyKSIvLGU6LyIvLHI6MTB9LHtiOi8oYnxiciknLyxlOi8nL30se2I6LyhifGJyKSIvLGU6LyIvfSx7YjovKGZyfHJmfGYpJy8sZTovJy8sYzpbY119LHtiOi8oZnJ8cmZ8ZikiLyxlOi8iLyxjOltjXX0sZS5BU00sZS5RU01dfSxzPXtjTjoibnVtYmVyIixyOjAsdjpbe2I6ZS5CTlIrIltsTGpKXT8ifSx7YjoiXFxiKDBvWzAtN10rKVtsTGpKXT8ifSx7YjplLkNOUisiW2xMakpdPyJ9XX0saT17Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxjOlsic2VsZiIsYixzLGFdfTtyZXR1cm4gYy5jPVthLHMsYl0se2FsaWFzZXM6WyJweSIsImd5cCJdLGs6cixpOi8oPFwvfC0+fFw/KXw9Pi8sYzpbYixzLGEsZS5IQ00se3Y6W3tjTjoiZnVuY3Rpb24iLGJLOiJkZWYifSx7Y046ImNsYXNzIixiSzoiY2xhc3MifV0sZTovOi8saTovWyR7PTtcbixdLyxjOltlLlVUTSxpLHtiOi8tPi8sZVc6ITAsazoiTm9uZSJ9XX0se2NOOiJtZXRhIixiOi9eW1x0IF0qQC8sZTovJC99LHtiOi9cYihwcmludHxleGVjKVwoL31dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgianVsaWEiLGZ1bmN0aW9uKGUpe3ZhciByPXtrZXl3b3JkOiJpbiBpc2Egd2hlcmUgYmFyZW1vZHVsZSBiZWdpbiBicmVhayBjYXRjaCBjY2FsbCBjb25zdCBjb250aW51ZSBkbyBlbHNlIGVsc2VpZiBlbmQgZXhwb3J0IGZhbHNlIGZpbmFsbHkgZm9yIGZ1bmN0aW9uIGdsb2JhbCBpZiBpbXBvcnQgaW1wb3J0YWxsIGxldCBsb2NhbCBtYWNybyBtb2R1bGUgcXVvdGUgcmV0dXJuIHRydWUgdHJ5IHVzaW5nIHdoaWxlIHR5cGUgaW1tdXRhYmxlIGFic3RyYWN0IGJpdHN0eXBlIHR5cGVhbGlhcyAiLGxpdGVyYWw6InRydWUgZmFsc2UgQVJHUyBDX05VTEwgRGV2TnVsbCBFTkRJQU5fQk9NIEVOViBJIEluZiBJbmYxNiBJbmYzMiBJbmY2NCBJbnNlcnRpb25Tb3J0IEpVTElBX0hPTUUgTE9BRF9QQVRIIE1lcmdlU29ydCBOYU4gTmFOMTYgTmFOMzIgTmFONjQgUFJPR1JBTV9GSUxFIFF1aWNrU29ydCBSb3VuZERvd24gUm91bmRGcm9tWmVybyBSb3VuZE5lYXJlc3QgUm91bmROZWFyZXN0VGllc0F3YXkgUm91bmROZWFyZXN0VGllc1VwIFJvdW5kVG9aZXJvIFJvdW5kVXAgU1RERVJSIFNURElOIFNURE9VVCBWRVJTSU9OIGNhdGFsYW4gZXwwIGV1fDAgZXVsZXJnYW1tYSBnb2xkZW4gaW0gbm90aGluZyBwaSDOsyDPgCDPhiAiLGJ1aWx0X2luOiJBTlkgQWJzdHJhY3RBcnJheSBBYnN0cmFjdENoYW5uZWwgQWJzdHJhY3RGbG9hdCBBYnN0cmFjdE1hdHJpeCBBYnN0cmFjdFJORyBBYnN0cmFjdFNlcmlhbGl6ZXIgQWJzdHJhY3RTZXQgQWJzdHJhY3RTcGFyc2VBcnJheSBBYnN0cmFjdFNwYXJzZU1hdHJpeCBBYnN0cmFjdFNwYXJzZVZlY3RvciBBYnN0cmFjdFN0cmluZyBBYnN0cmFjdFVuaXRSYW5nZSBBYnN0cmFjdFZlY09yTWF0IEFic3RyYWN0VmVjdG9yIEFueSBBcmd1bWVudEVycm9yIEFycmF5IEFzc2VydGlvbkVycm9yIEFzc29jaWF0aXZlIEJhc2U2NERlY29kZVBpcGUgQmFzZTY0RW5jb2RlUGlwZSBCaWRpYWdvbmFsIEJpZ0Zsb2F0IEJpZ0ludCBCaXRBcnJheSBCaXRNYXRyaXggQml0VmVjdG9yIEJvb2wgQm91bmRzRXJyb3IgQnVmZmVyU3RyZWFtIENhY2hpbmdQb29sIENhcHR1cmVkRXhjZXB0aW9uIENhcnRlc2lhbkluZGV4IENhcnRlc2lhblJhbmdlIENjaGFyIENkb3VibGUgQ2Zsb2F0IENoYW5uZWwgQ2hhciBDaW50IENpbnRtYXhfdCBDbG9uZyBDbG9uZ2xvbmcgQ2x1c3Rlck1hbmFnZXIgQ21kIENvZGVJbmZvIENvbG9uIENvbXBsZXggQ29tcGxleDEyOCBDb21wbGV4MzIgQ29tcGxleDY0IENvbXBvc2l0ZUV4Y2VwdGlvbiBDb25kaXRpb24gQ29uakFycmF5IENvbmpNYXRyaXggQ29ualZlY3RvciBDcHRyZGlmZl90IENzaG9ydCBDc2l6ZV90IENzc2l6ZV90IENzdHJpbmcgQ3VjaGFyIEN1aW50IEN1aW50bWF4X3QgQ3Vsb25nIEN1bG9uZ2xvbmcgQ3VzaG9ydCBDd2NoYXJfdCBDd3N0cmluZyBEYXRhVHlwZSBEYXRlIERhdGVGb3JtYXQgRGF0ZVRpbWUgRGVuc2VBcnJheSBEZW5zZU1hdHJpeCBEZW5zZVZlY09yTWF0IERlbnNlVmVjdG9yIERpYWdvbmFsIERpY3QgRGltZW5zaW9uTWlzbWF0Y2ggRGltcyBEaXJlY3RJbmRleFN0cmluZyBEaXNwbGF5IERpdmlkZUVycm9yIERvbWFpbkVycm9yIEVPRkVycm9yIEVhY2hMaW5lIEVudW0gRW51bWVyYXRlIEVycm9yRXhjZXB0aW9uIEV4Y2VwdGlvbiBFeHBvbmVudGlhbEJhY2tPZmYgRXhwciBGYWN0b3JpemF0aW9uIEZpbGVNb25pdG9yIEZsb2F0MTYgRmxvYXQzMiBGbG9hdDY0IEZ1bmN0aW9uIEZ1dHVyZSBHbG9iYWxSZWYgR290b05vZGUgSFRNTCBIZXJtaXRpYW4gSU8gSU9CdWZmZXIgSU9Db250ZXh0IElPU3RyZWFtIElQQWRkciBJUHY0IElQdjYgSW5kZXhDYXJ0ZXNpYW4gSW5kZXhMaW5lYXIgSW5kZXhTdHlsZSBJbmV4YWN0RXJyb3IgSW5pdEVycm9yIEludCBJbnQxMjggSW50MTYgSW50MzIgSW50NjQgSW50OCBJbnRTZXQgSW50ZWdlciBJbnRlcnJ1cHRFeGNlcHRpb24gSW52YWxpZFN0YXRlRXhjZXB0aW9uIElycmF0aW9uYWwgS2V5RXJyb3IgTGFiZWxOb2RlIExpblNwYWNlIExpbmVOdW1iZXJOb2RlIExvYWRFcnJvciBMb3dlclRyaWFuZ3VsYXIgTUlNRSBNYXRyaXggTWVyc2VubmVUd2lzdGVyIE1ldGhvZCBNZXRob2RFcnJvciBNZXRob2RUYWJsZSBNb2R1bGUgTlR1cGxlIE5ld3Zhck5vZGUgTnVsbEV4Y2VwdGlvbiBOdWxsYWJsZSBOdW1iZXIgT2JqZWN0SWREaWN0IE9yZGluYWxSYW5nZSBPdXRPZk1lbW9yeUVycm9yIE92ZXJmbG93RXJyb3IgUGFpciBQYXJzZUVycm9yIFBhcnRpYWxRdWlja1NvcnQgUGVybXV0ZWREaW1zQXJyYXkgUGlwZSBQb2xsaW5nRmlsZVdhdGNoZXIgUHJvY2Vzc0V4aXRlZEV4Y2VwdGlvbiBQdHIgUXVvdGVOb2RlIFJhbmRvbURldmljZSBSYW5nZSBSYW5nZUluZGV4IFJhdGlvbmFsIFJhd0ZEIFJlYWRPbmx5TWVtb3J5RXJyb3IgUmVhbCBSZWVudHJhbnRMb2NrIFJlZiBSZWdleCBSZWdleE1hdGNoIFJlbW90ZUNoYW5uZWwgUmVtb3RlRXhjZXB0aW9uIFJldlN0cmluZyBSb3VuZGluZ01vZGUgUm93VmVjdG9yIFNTQVZhbHVlIFNlZ21lbnRhdGlvbkZhdWx0IFNlcmlhbGl6YXRpb25TdGF0ZSBTZXQgU2hhcmVkQXJyYXkgU2hhcmVkTWF0cml4IFNoYXJlZFZlY3RvciBTaWduZWQgU2ltcGxlVmVjdG9yIFNsb3QgU2xvdE51bWJlciBTcGFyc2VNYXRyaXhDU0MgU3BhcnNlVmVjdG9yIFN0YWNrRnJhbWUgU3RhY2tPdmVyZmxvd0Vycm9yIFN0YWNrVHJhY2UgU3RlcFJhbmdlIFN0ZXBSYW5nZUxlbiBTdHJpZGVkQXJyYXkgU3RyaWRlZE1hdHJpeCBTdHJpZGVkVmVjT3JNYXQgU3RyaWRlZFZlY3RvciBTdHJpbmcgU3ViQXJyYXkgU3ViU3RyaW5nIFN5bVRyaWRpYWdvbmFsIFN5bWJvbCBTeW1tZXRyaWMgU3lzdGVtRXJyb3IgVENQU29ja2V0IFRhc2sgVGV4dCBUZXh0RGlzcGxheSBUaW1lciBUcmlkaWFnb25hbCBUdXBsZSBUeXBlIFR5cGVFcnJvciBUeXBlTWFwRW50cnkgVHlwZU1hcExldmVsIFR5cGVOYW1lIFR5cGVWYXIgVHlwZWRTbG90IFVEUFNvY2tldCBVSW50IFVJbnQxMjggVUludDE2IFVJbnQzMiBVSW50NjQgVUludDggVW5kZWZSZWZFcnJvciBVbmRlZlZhckVycm9yIFVuaWNvZGVFcnJvciBVbmlmb3JtU2NhbGluZyBVbmlvbiBVbmlvbkFsbCBVbml0UmFuZ2UgVW5zaWduZWQgVXBwZXJUcmlhbmd1bGFyIFZhbCBWYXJhcmcgVmVjRWxlbWVudCBWZWNPck1hdCBWZWN0b3IgVmVyc2lvbk51bWJlciBWb2lkIFdlYWtLZXlEaWN0IFdlYWtSZWYgV29ya2VyQ29uZmlnIFdvcmtlclBvb2wgIn0sdD0iW0EtWmEtel9cXHUwMEExLVxcdUZGRkZdW0EtWmEtel8wLTlcXHUwMEExLVxcdUZGRkZdKiIsYT17bDp0LGs6cixpOi88XC8vfSxuPXtjTjoibnVtYmVyIixiOi8oXGIweFtcZF9dKihcLltcZF9dKik/fDB4XC5cZFtcZF9dKilwWy0rXT9cZCt8XGIwW2JveF1bYS1mQS1GMC05XVthLWZBLUYwLTlfXSp8KFxiXGRbXGRfXSooXC5bXGRfXSopP3xcLlxkW1xkX10qKShbZUVmRl1bLStdP1xkKyk/LyxyOjB9LG89e2NOOiJzdHJpbmciLGI6LycoLnxcXFt4WHVVXVthLXpBLVowLTldKyknL30saT17Y046InN1YnN0IixiOi9cJFwoLyxlOi9cKS8sazpyfSxsPXtjTjoidmFyaWFibGUiLGI6IlxcJCIrdH0sYz17Y046InN0cmluZyIsYzpbZS5CRSxpLGxdLHY6W3tiOi9cdyoiIiIvLGU6LyIiIlx3Ki8scjoxMH0se2I6L1x3KiIvLGU6LyJcdyovfV19LHM9e2NOOiJzdHJpbmciLGM6W2UuQkUsaSxsXSxiOiJgIixlOiJgIn0sZD17Y046Im1ldGEiLGI6IkAiK3R9LHU9e2NOOiJjb21tZW50Iix2Olt7YjoiIz0iLGU6Ij0jIixyOjEwfSx7YjoiIyIsZToiJCJ9XX07cmV0dXJuIGEuYz1bbixvLGMscyxkLHUsZS5IQ00se2NOOiJrZXl3b3JkIixiOiJcXGIoKChhYnN0cmFjdHxwcmltaXRpdmUpXFxzKyl0eXBlfChtdXRhYmxlXFxzKyk/c3RydWN0KVxcYiJ9LHtiOi88Oi99XSxpLmM9YS5jLGF9KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImNvZmZlZXNjcmlwdCIsZnVuY3Rpb24oZSl7dmFyIGM9e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHlpZWxkIGltcG9ydCBleHBvcnQgZnJvbSBhcyBkZWZhdWx0IGF3YWl0IHRoZW4gdW5sZXNzIHVudGlsIGxvb3Agb2YgYnkgd2hlbiBhbmQgb3IgaXMgaXNudCBub3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgeWVzIG5vIG9uIG9mZiIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGdsb2JhbCB3aW5kb3cgZG9jdW1lbnQifSxuPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiLHI9e2NOOiJzdWJzdCIsYjovI1x7LyxlOi99LyxrOmN9LGk9W2UuQk5NLGUuaW5oZXJpdChlLkNOTSx7c3RhcnRzOntlOiIoXFxzKi8pPyIscjowfX0pLHtjTjoic3RyaW5nIix2Olt7YjovJycnLyxlOi8nJycvLGM6W2UuQkVdfSx7YjovJy8sZTovJy8sYzpbZS5CRV19LHtiOi8iIiIvLGU6LyIiIi8sYzpbZS5CRSxyXX0se2I6LyIvLGU6LyIvLGM6W2UuQkUscl19XX0se2NOOiJyZWdleHAiLHY6W3tiOiIvLy8iLGU6Ii8vLyIsYzpbcixlLkhDTV19LHtiOiIvL1tnaW1dKiIscjowfSx7YjovXC8oPyFbICpdKShcXFwvfC4pKj9cL1tnaW1dKig/PVxXfCQpL31dfSx7YjoiQCIrbn0se3NMOiJqYXZhc2NyaXB0IixlQjohMCxlRTohMCx2Olt7YjoiYGBgIixlOiJgYGAifSx7YjoiYCIsZToiYCJ9XX1dO3IuYz1pO3ZhciBzPWUuaW5oZXJpdChlLlRNLHtiOm59KSx0PSIoXFwoLipcXCkpP1xccypcXEJbLT1dPiIsbz17Y046InBhcmFtcyIsYjoiXFwoW15cXChdIixyQjohMCxjOlt7YjovXCgvLGU6L1wpLyxrOmMsYzpbInNlbGYiXS5jb25jYXQoaSl9XX07cmV0dXJue2FsaWFzZXM6WyJjb2ZmZWUiLCJjc29uIiwiaWNlZCJdLGs6YyxpOi9cL1wqLyxjOmkuY29uY2F0KFtlLkMoIiMjIyIsIiMjIyIpLGUuSENNLHtjTjoiZnVuY3Rpb24iLGI6Il5cXHMqIituKyJcXHMqPVxccyoiK3QsZToiWy09XT4iLHJCOiEwLGM6W3Msb119LHtiOi9bOlwoLD1dXHMqLyxyOjAsYzpbe2NOOiJmdW5jdGlvbiIsYjp0LGU6IlstPV0+IixyQjohMCxjOltvXX1dfSx7Y046ImNsYXNzIixiSzoiY2xhc3MiLGU6IiQiLGk6L1s6PSJcW1xdXS8sYzpbe2JLOiJleHRlbmRzIixlVzohMCxpOi9bOj0iXFtcXV0vLGM6W3NdfSxzXX0se2I6bisiOiIsZToiOiIsckI6ITAsckU6ITAscjowfV0pfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiY3BwIixmdW5jdGlvbih0KXt2YXIgZT17Y046ImtleXdvcmQiLGI6IlxcYlthLXpcXGRfXSpfdFxcYiJ9LHI9e2NOOiJzdHJpbmciLHY6W3tiOicodTg/fFUpP0w/IicsZTonIicsaToiXFxuIixjOlt0LkJFXX0se2I6Jyh1OD98VSk/UiInLGU6JyInLGM6W3QuQkVdfSx7YjoiJ1xcXFw/LiIsZToiJyIsaToiLiJ9XX0scz17Y046Im51bWJlciIsdjpbe2I6IlxcYigwYlswMSddKykifSx7YjoiKC0/KVxcYihbXFxkJ10rKFxcLltcXGQnXSopP3xcXC5bXFxkJ10rKSh1fFV8bHxMfHVsfFVMfGZ8RnxifEIpIn0se2I6IigtPykoXFxiMFt4WF1bYS1mQS1GMC05J10rfChcXGJbXFxkJ10rKFxcLltcXGQnXSopP3xcXC5bXFxkJ10rKShbZUVdWy0rXT9bXFxkJ10rKT8pIn1dLHI6MH0saT17Y046Im1ldGEiLGI6LyNccypbYS16XStcYi8sZTovJC8sazp7Im1ldGEta2V5d29yZCI6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSJ9LGM6W3tiOi9cXFxuLyxyOjB9LHQuaW5oZXJpdChyLHtjTjoibWV0YS1zdHJpbmcifSkse2NOOiJtZXRhLXN0cmluZyIsYjovPFteXG4+XSo+LyxlOi8kLyxpOiJcXG4ifSx0LkNMQ00sdC5DQkNNXX0sYT10LklSKyJcXHMqXFwoIixjPXtrZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNhdGNoIGltcG9ydCBtb2R1bGUgZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mIGR5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgZG8gZ290byBhdXRvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiB1c2luZyBhc20gY2FzZSB0eXBlaWQgc2hvcnQgcmVpbnRlcnByZXRfY2FzdHwxMCBkZWZhdWx0IGRvdWJsZSByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIGlubGluZSBkZWxldGUgYWxpZ25vZiBjb25zdGV4cHIgZGVjbHR5cGUgbm9leGNlcHQgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgX0Jvb2wgY29tcGxleCBfQ29tcGxleCBfSW1hZ2luYXJ5IGF0b21pY19ib29sIGF0b21pY19jaGFyIGF0b21pY19zY2hhciBhdG9taWNfdWNoYXIgYXRvbWljX3Nob3J0IGF0b21pY191c2hvcnQgYXRvbWljX2ludCBhdG9taWNfdWludCBhdG9taWNfbG9uZyBhdG9taWNfdWxvbmcgYXRvbWljX2xsb25nIGF0b21pY191bGxvbmcgbmV3IHRocm93IHJldHVybiBhbmQgb3Igbm90IixidWlsdF9pbjoic3RkIHN0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RkaW4gc3Rkb3V0IHN0ZGVyciBzdHJpbmdzdHJlYW0gaXN0cmluZ3N0cmVhbSBvc3RyaW5nc3RyZWFtIGF1dG9fcHRyIGRlcXVlIGxpc3QgcXVldWUgc3RhY2sgdmVjdG9yIG1hcCBzZXQgYml0c2V0IG11bHRpc2V0IG11bHRpbWFwIHVub3JkZXJlZF9zZXQgdW5vcmRlcmVkX21hcCB1bm9yZGVyZWRfbXVsdGlzZXQgdW5vcmRlcmVkX211bHRpbWFwIGFycmF5IHNoYXJlZF9wdHIgYWJvcnQgYWJzIGFjb3MgYXNpbiBhdGFuMiBhdGFuIGNhbGxvYyBjZWlsIGNvc2ggY29zIGV4aXQgZXhwIGZhYnMgZmxvb3IgZm1vZCBmcHJpbnRmIGZwdXRzIGZyZWUgZnJleHAgZnNjYW5mIGlzYWxudW0gaXNhbHBoYSBpc2NudHJsIGlzZGlnaXQgaXNncmFwaCBpc2xvd2VyIGlzcHJpbnQgaXNwdW5jdCBpc3NwYWNlIGlzdXBwZXIgaXN4ZGlnaXQgdG9sb3dlciB0b3VwcGVyIGxhYnMgbGRleHAgbG9nMTAgbG9nIG1hbGxvYyByZWFsbG9jIG1lbWNociBtZW1jbXAgbWVtY3B5IG1lbXNldCBtb2RmIHBvdyBwcmludGYgcHV0Y2hhciBwdXRzIHNjYW5mIHNpbmggc2luIHNucHJpbnRmIHNwcmludGYgc3FydCBzc2NhbmYgc3RyY2F0IHN0cmNociBzdHJjbXAgc3RyY3B5IHN0cmNzcG4gc3RybGVuIHN0cm5jYXQgc3RybmNtcCBzdHJuY3B5IHN0cnBicmsgc3RycmNociBzdHJzcG4gc3Ryc3RyIHRhbmggdGFuIHZmcHJpbnRmIHZwcmludGYgdnNwcmludGYgZW5kbCBpbml0aWFsaXplcl9saXN0IHVuaXF1ZV9wdHIiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbHB0ciBOVUxMIn0sbj1bZSx0LkNMQ00sdC5DQkNNLHMscl07cmV0dXJue2FsaWFzZXM6WyJjIiwiY2MiLCJoIiwiYysrIiwiaCsrIiwiaHBwIl0sazpjLGk6IjwvIixjOm4uY29uY2F0KFtpLHtiOiJcXGIoZGVxdWV8bGlzdHxxdWV1ZXxzdGFja3x2ZWN0b3J8bWFwfHNldHxiaXRzZXR8bXVsdGlzZXR8bXVsdGltYXB8dW5vcmRlcmVkX21hcHx1bm9yZGVyZWRfc2V0fHVub3JkZXJlZF9tdWx0aXNldHx1bm9yZGVyZWRfbXVsdGltYXB8YXJyYXkpXFxzKjwiLGU6Ij4iLGs6YyxjOlsic2VsZiIsZV19LHtiOnQuSVIrIjo6IixrOmN9LHt2Olt7YjovPS8sZTovOy99LHtiOi9cKC8sZTovXCkvfSx7Yks6Im5ldyB0aHJvdyByZXR1cm4gZWxzZSIsZTovOy99XSxrOmMsYzpuLmNvbmNhdChbe2I6L1woLyxlOi9cKS8sazpjLGM6bi5jb25jYXQoWyJzZWxmIl0pLHI6MH1dKSxyOjB9LHtjTjoiZnVuY3Rpb24iLGI6IigiK3QuSVIrIltcXComXFxzXSspKyIrYSxyQjohMCxlOi9bezs9XS8sZUU6ITAsazpjLGk6L1teXHdcc1wqJl0vLGM6W3tiOmEsckI6ITAsYzpbdC5UTV0scjowfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxrOmMscjowLGM6W3QuQ0xDTSx0LkNCQ00scixzLGVdfSx0LkNMQ00sdC5DQkNNLGldfSx7Y046ImNsYXNzIixiSzoiY2xhc3Mgc3RydWN0IixlOi9bezs6XS8sYzpbe2I6LzwvLGU6Lz4vLGM6WyJzZWxmIl19LHQuVE1dfV0pLGV4cG9ydHM6e3ByZXByb2Nlc3NvcjppLHN0cmluZ3M6cixrOmN9fX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgicnVieSIsZnVuY3Rpb24oZSl7dmFyIGI9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iLHI9e2tleXdvcmQ6ImFuZCB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIGlmIEJFR0lOIHJldHJ5IGVuZCBmb3Igc2VsZiB3aGVuIG5leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgZWxzZSBicmVhayB1bmRlZiBub3Qgc3VwZXIgY2xhc3MgY2FzZSByZXF1aXJlIHlpZWxkIGFsaWFzIHdoaWxlIGVuc3VyZSBlbHNpZiBvciBpbmNsdWRlIGF0dHJfcmVhZGVyIGF0dHJfd3JpdGVyIGF0dHJfYWNjZXNzb3IiLGxpdGVyYWw6InRydWUgZmFsc2UgbmlsIn0sYz17Y046ImRvY3RhZyIsYjoiQFtBLVphLXpdKyJ9LGE9e2I6IiM8IixlOiI+In0scz1bZS5DKCIjIiwiJCIse2M6W2NdfSksZS5DKCJeXFw9YmVnaW4iLCJeXFw9ZW5kIix7YzpbY10scjoxMH0pLGUuQygiXl9fRU5EX18iLCJcXG4kIildLG49e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsazpyfSx0PXtjTjoic3RyaW5nIixjOltlLkJFLG5dLHY6W3tiOi8nLyxlOi8nL30se2I6LyIvLGU6LyIvfSx7YjovYC8sZTovYC99LHtiOiIlW3FRd1d4XT9cXCgiLGU6IlxcKSJ9LHtiOiIlW3FRd1d4XT9cXFsiLGU6IlxcXSJ9LHtiOiIlW3FRd1d4XT97IixlOiJ9In0se2I6IiVbcVF3V3hdPzwiLGU6Ij4ifSx7YjoiJVtxUXdXeF0/LyIsZToiLyJ9LHtiOiIlW3FRd1d4XT8lIixlOiIlIn0se2I6IiVbcVF3V3hdPy0iLGU6Ii0ifSx7YjoiJVtxUXdXeF0/XFx8IixlOiJcXHwifSx7YjovXEJcPyhcXFxkezEsM318XFx4W0EtRmEtZjAtOV17MSwyfXxcXHVbQS1GYS1mMC05XXs0fXxcXD9cUylcYi99LHtiOi88PCgtPylcdyskLyxlOi9eXHMqXHcrJC99XX0saT17Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGVuZHNQYXJlbnQ6ITAsazpyfSxkPVt0LGEse2NOOiJjbGFzcyIsYks6ImNsYXNzIG1vZHVsZSIsZToiJHw7IixpOi89LyxjOltlLmluaGVyaXQoZS5UTSx7YjoiW0EtWmEtel9dXFx3Kig6OlxcdyspKihcXD98XFwhKT8ifSkse2I6IjxcXHMqIixjOlt7YjoiKCIrZS5JUisiOjopPyIrZS5JUn1dfV0uY29uY2F0KHMpfSx7Y046ImZ1bmN0aW9uIixiSzoiZGVmIixlOiIkfDsiLGM6W2UuaW5oZXJpdChlLlRNLHtiOmJ9KSxpXS5jb25jYXQocyl9LHtiOmUuSVIrIjo6In0se2NOOiJzeW1ib2wiLGI6ZS5VSVIrIihcXCF8XFw/KT86IixyOjB9LHtjTjoic3ltYm9sIixiOiI6KD8hXFxzKSIsYzpbdCx7YjpifV0scjowfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscjowfSx7YjoiKFxcJFxcVyl8KChcXCR8XFxAXFxAPykoXFx3KykpIn0se2NOOiJwYXJhbXMiLGI6L1x8LyxlOi9cfC8sazpyfSx7YjoiKCIrZS5SU1IrInx1bmxlc3MpXFxzKiIsazoidW5sZXNzIixjOlthLHtjTjoicmVnZXhwIixjOltlLkJFLG5dLGk6L1xuLyx2Olt7YjoiLyIsZToiL1thLXpdKiJ9LHtiOiIlcnsiLGU6In1bYS16XSoifSx7YjoiJXJcXCgiLGU6IlxcKVthLXpdKiJ9LHtiOiIlciEiLGU6IiFbYS16XSoifSx7YjoiJXJcXFsiLGU6IlxcXVthLXpdKiJ9XX1dLmNvbmNhdChzKSxyOjB9XS5jb25jYXQocyk7bi5jPWQsaS5jPWQ7dmFyIGw9Ils+P10+IixvPSJbXFx3I10rXFwoXFx3K1xcKTpcXGQrOlxcZCs+Iix1PSIoXFx3Ky0pP1xcZCtcXC5cXGQrXFwuXFxkKHBcXGQrKT9bXj5dKz4iLHc9W3tiOi9eXHMqPT4vLHN0YXJ0czp7ZToiJCIsYzpkfX0se2NOOiJtZXRhIixiOiJeKCIrbCsifCIrbysifCIrdSsiKSIsc3RhcnRzOntlOiIkIixjOmR9fV07cmV0dXJue2FsaWFzZXM6WyJyYiIsImdlbXNwZWMiLCJwb2RzcGVjIiwidGhvciIsImlyYiJdLGs6cixpOi9cL1wqLyxjOnMuY29uY2F0KHcpLmNvbmNhdChkKX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInlhbWwiLGZ1bmN0aW9uKGUpe3ZhciBiPSJ0cnVlIGZhbHNlIHllcyBubyBudWxsIixhPSJeWyBcXC1dKiIscj0iW2EtekEtWl9dW1xcd1xcLV0qIix0PXtjTjoiYXR0ciIsdjpbe2I6YStyKyI6In0se2I6YSsnIicrcisnIjonfSx7YjphKyInIityKyInOiJ9XX0sYz17Y046InRlbXBsYXRlLXZhcmlhYmxlIix2Olt7Yjoie3siLGU6In19In0se2I6IiV7IixlOiJ9In1dfSxsPXtjTjoic3RyaW5nIixyOjAsdjpbe2I6LycvLGU6LycvfSx7YjovIi8sZTovIi99LHtiOi9cUysvfV0sYzpbZS5CRSxjXX07cmV0dXJue2NJOiEwLGFsaWFzZXM6WyJ5bWwiLCJZQU1MIiwieWFtbCJdLGM6W3Qse2NOOiJtZXRhIixiOiJeLS0tcyokIixyOjEwfSx7Y046InN0cmluZyIsYjoiW1xcfD5dICokIixyRTohMCxjOmwuYyxlOnQudlswXS5ifSx7YjoiPCVbJT0tXT8iLGU6IlslLV0/JT4iLHNMOiJydWJ5IixlQjohMCxlRTohMCxyOjB9LHtjTjoidHlwZSIsYjoiISEiK2UuVUlSfSx7Y046Im1ldGEiLGI6IiYiK2UuVUlSKyIkIn0se2NOOiJtZXRhIixiOiJcXCoiK2UuVUlSKyIkIn0se2NOOiJidWxsZXQiLGI6Il4gKi0iLHI6MH0sZS5IQ00se2JLOmIsazp7bGl0ZXJhbDpifX0sZS5DTk0sbF19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJjc3MiLGZ1bmN0aW9uKGUpe3ZhciBjPSJbYS16QS1aLV1bYS16QS1aMC05Xy1dKiIsdD17YjovW0EtWlxfXC5cLV0rXHMqOi8sckI6ITAsZToiOyIsZVc6ITAsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6L1xTLyxlOiI6IixlRTohMCxzdGFydHM6e2VXOiEwLGVFOiEwLGM6W3tiOi9bXHctXStcKC8sckI6ITAsYzpbe2NOOiJidWlsdF9pbiIsYjovW1x3LV0rL30se2I6L1woLyxlOi9cKS8sYzpbZS5BU00sZS5RU01dfV19LGUuQ1NTTk0sZS5RU00sZS5BU00sZS5DQkNNLHtjTjoibnVtYmVyIixiOiIjWzAtOUEtRmEtZl0rIn0se2NOOiJtZXRhIixiOiIhaW1wb3J0YW50In1dfX1dfTtyZXR1cm57Y0k6ITAsaTovWz1cL3wnXCRdLyxjOltlLkNCQ00se2NOOiJzZWxlY3Rvci1pZCIsYjovI1tBLVphLXowLTlfLV0rL30se2NOOiJzZWxlY3Rvci1jbGFzcyIsYjovXC5bQS1aYS16MC05Xy1dKy99LHtjTjoic2VsZWN0b3ItYXR0ciIsYjovXFsvLGU6L1xdLyxpOiIkIn0se2NOOiJzZWxlY3Rvci1wc2V1ZG8iLGI6LzooOik/W2EtekEtWjAtOVxfXC1cK1woXCkiJy5dKy99LHtiOiJAKGZvbnQtZmFjZXxwYWdlKSIsbDoiW2Etei1dKyIsazoiZm9udC1mYWNlIHBhZ2UifSx7YjoiQCIsZToiW3s7XSIsaTovOi8sYzpbe2NOOiJrZXl3b3JkIixiOi9cdysvfSx7YjovXHMvLGVXOiEwLGVFOiEwLHI6MCxjOltlLkFTTSxlLlFTTSxlLkNTU05NXX1dfSx7Y046InNlbGVjdG9yLXRhZyIsYjpjLHI6MH0se2I6InsiLGU6In0iLGk6L1xTLyxjOltlLkNCQ00sdF19XX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImZvcnRyYW4iLGZ1bmN0aW9uKGUpe3ZhciB0PXtjTjoicGFyYW1zIixiOiJcXCgiLGU6IlxcKSJ9LG49e2xpdGVyYWw6Ii5GYWxzZS4gLlRydWUuIixrZXl3b3JkOiJraW5kIGRvIHdoaWxlIHByaXZhdGUgY2FsbCBpbnRyaW5zaWMgd2hlcmUgZWxzZXdoZXJlIHR5cGUgZW5kdHlwZSBlbmRtb2R1bGUgZW5kc2VsZWN0IGVuZGludGVyZmFjZSBlbmQgZW5kZG8gZW5kaWYgaWYgZm9yYWxsIGVuZGZvcmFsbCBvbmx5IGNvbnRhaW5zIGRlZmF1bHQgcmV0dXJuIHN0b3AgdGhlbiBwdWJsaWMgc3Vicm91dGluZXwxMCBmdW5jdGlvbiBwcm9ncmFtIC5hbmQuIC5vci4gLm5vdC4gLmxlLiAuZXEuIC5nZS4gLmd0LiAubHQuIGdvdG8gc2F2ZSBlbHNlIHVzZSBtb2R1bGUgc2VsZWN0IGNhc2UgYWNjZXNzIGJsYW5rIGRpcmVjdCBleGlzdCBmaWxlIGZtdCBmb3JtIGZvcm1hdHRlZCBpb3N0YXQgbmFtZSBuYW1lZCBuZXh0cmVjIG51bWJlciBvcGVuZWQgcmVjIHJlY2wgc2VxdWVudGlhbCBzdGF0dXMgdW5mb3JtYXR0ZWQgdW5pdCBjb250aW51ZSBmb3JtYXQgcGF1c2UgY3ljbGUgZXhpdCBjX251bGxfY2hhciBjX2FsZXJ0IGNfYmFja3NwYWNlIGNfZm9ybV9mZWVkIGZsdXNoIHdhaXQgZGVjaW1hbCByb3VuZCBpb21zZyBzeW5jaHJvbm91cyBub3Bhc3Mgbm9uX292ZXJyaWRhYmxlIHBhc3MgcHJvdGVjdGVkIHZvbGF0aWxlIGFic3RyYWN0IGV4dGVuZHMgaW1wb3J0IG5vbl9pbnRyaW5zaWMgdmFsdWUgZGVmZXJyZWQgZ2VuZXJpYyBmaW5hbCBlbnVtZXJhdG9yIGNsYXNzIGFzc29jaWF0ZSBiaW5kIGVudW0gY19pbnQgY19zaG9ydCBjX2xvbmcgY19sb25nX2xvbmcgY19zaWduZWRfY2hhciBjX3NpemVfdCBjX2ludDhfdCBjX2ludDE2X3QgY19pbnQzMl90IGNfaW50NjRfdCBjX2ludF9sZWFzdDhfdCBjX2ludF9sZWFzdDE2X3QgY19pbnRfbGVhc3QzMl90IGNfaW50X2xlYXN0NjRfdCBjX2ludF9mYXN0OF90IGNfaW50X2Zhc3QxNl90IGNfaW50X2Zhc3QzMl90IGNfaW50X2Zhc3Q2NF90IGNfaW50bWF4X3QgQ19pbnRwdHJfdCBjX2Zsb2F0IGNfZG91YmxlIGNfbG9uZ19kb3VibGUgY19mbG9hdF9jb21wbGV4IGNfZG91YmxlX2NvbXBsZXggY19sb25nX2RvdWJsZV9jb21wbGV4IGNfYm9vbCBjX2NoYXIgY19udWxsX3B0ciBjX251bGxfZnVucHRyIGNfbmV3X2xpbmUgY19jYXJyaWFnZV9yZXR1cm4gY19ob3Jpem9udGFsX3RhYiBjX3ZlcnRpY2FsX3RhYiBpc29fY19iaW5kaW5nIGNfbG9jIGNfZnVubG9jIGNfYXNzb2NpYXRlZCAgY19mX3BvaW50ZXIgY19wdHIgY19mdW5wdHIgaXNvX2ZvcnRyYW5fZW52IGNoYXJhY3Rlcl9zdG9yYWdlX3NpemUgZXJyb3JfdW5pdCBmaWxlX3N0b3JhZ2Vfc2l6ZSBpbnB1dF91bml0IGlvc3RhdF9lbmQgaW9zdGF0X2VvciBudW1lcmljX3N0b3JhZ2Vfc2l6ZSBvdXRwdXRfdW5pdCBjX2ZfcHJvY3BvaW50ZXIgaWVlZV9hcml0aG1ldGljIGllZWVfc3VwcG9ydF91bmRlcmZsb3dfY29udHJvbCBpZWVlX2dldF91bmRlcmZsb3dfbW9kZSBpZWVlX3NldF91bmRlcmZsb3dfbW9kZSBuZXd1bml0IGNvbnRpZ3VvdXMgcmVjdXJzaXZlIHBhZCBwb3NpdGlvbiBhY3Rpb24gZGVsaW0gcmVhZHdyaXRlIGVvciBhZHZhbmNlIG5tbCBpbnRlcmZhY2UgcHJvY2VkdXJlIG5hbWVsaXN0IGluY2x1ZGUgc2VxdWVuY2UgZWxlbWVudGFsIHB1cmUgaW50ZWdlciByZWFsIGNoYXJhY3RlciBjb21wbGV4IGxvZ2ljYWwgZGltZW5zaW9uIGFsbG9jYXRhYmxlfDEwIHBhcmFtZXRlciBleHRlcm5hbCBpbXBsaWNpdHwxMCBub25lIGRvdWJsZSBwcmVjaXNpb24gYXNzaWduIGludGVudCBvcHRpb25hbCBwb2ludGVyIHRhcmdldCBpbiBvdXQgY29tbW9uIGVxdWl2YWxlbmNlIGRhdGEiLGJ1aWx0X2luOiJhbG9nIGFsb2cxMCBhbWF4MCBhbWF4MSBhbWluMCBhbWluMSBhbW9kIGNhYnMgY2NvcyBjZXhwIGNsb2cgY3NpbiBjc3FydCBkYWJzIGRhY29zIGRhc2luIGRhdGFuIGRhdGFuMiBkY29zIGRjb3NoIGRkaW0gZGV4cCBkaW50IGRsb2cgZGxvZzEwIGRtYXgxIGRtaW4xIGRtb2QgZG5pbnQgZHNpZ24gZHNpbiBkc2luaCBkc3FydCBkdGFuIGR0YW5oIGZsb2F0IGlhYnMgaWRpbSBpZGludCBpZG5pbnQgaWZpeCBpc2lnbiBtYXgwIG1heDEgbWluMCBtaW4xIHNuZ2wgYWxnYW1hIGNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydCBjcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQgZGNtcGx4IGRjb25qZyBkZXJmIGRlcmZjIGRmbG9hdCBkZ2FtbWEgZGltYWcgZGxnYW1hIGlxaW50IHFhYnMgcWFjb3MgcWFzaW4gcWF0YW4gcWF0YW4yIHFjbXBseCBxY29uamcgcWNvcyBxY29zaCBxZGltIHFlcmYgcWVyZmMgcWV4cCBxZ2FtbWEgcWltYWcgcWxnYW1hIHFsb2cgcWxvZzEwIHFtYXgxIHFtaW4xIHFtb2QgcW5pbnQgcXNpZ24gcXNpbiBxc2luaCBxc3FydCBxdGFuIHF0YW5oIGFicyBhY29zIGFpbWFnIGFpbnQgYW5pbnQgYXNpbiBhdGFuIGF0YW4yIGNoYXIgY21wbHggY29uamcgY29zIGNvc2ggZXhwIGljaGFyIGluZGV4IGludCBsb2cgbG9nMTAgbWF4IG1pbiBuaW50IHNpZ24gc2luIHNpbmggc3FydCB0YW4gdGFuaCBwcmludCB3cml0ZSBkaW0gbGdlIGxndCBsbGUgbGx0IG1vZCBudWxsaWZ5IGFsbG9jYXRlIGRlYWxsb2NhdGUgYWRqdXN0bCBhZGp1c3RyIGFsbCBhbGxvY2F0ZWQgYW55IGFzc29jaWF0ZWQgYml0X3NpemUgYnRlc3QgY2VpbGluZyBjb3VudCBjc2hpZnQgZGF0ZV9hbmRfdGltZSBkaWdpdHMgZG90X3Byb2R1Y3QgZW9zaGlmdCBlcHNpbG9uIGV4cG9uZW50IGZsb29yIGZyYWN0aW9uIGh1Z2UgaWFuZCBpYmNsciBpYml0cyBpYnNldCBpZW9yIGlvciBpc2hmdCBpc2hmdGMgbGJvdW5kIGxlbl90cmltIG1hdG11bCBtYXhleHBvbmVudCBtYXhsb2MgbWF4dmFsIG1lcmdlIG1pbmV4cG9uZW50IG1pbmxvYyBtaW52YWwgbW9kdWxvIG12Yml0cyBuZWFyZXN0IHBhY2sgcHJlc2VudCBwcm9kdWN0IHJhZGl4IHJhbmRvbV9udW1iZXIgcmFuZG9tX3NlZWQgcmFuZ2UgcmVwZWF0IHJlc2hhcGUgcnJzcGFjaW5nIHNjYWxlIHNjYW4gc2VsZWN0ZWRfaW50X2tpbmQgc2VsZWN0ZWRfcmVhbF9raW5kIHNldF9leHBvbmVudCBzaGFwZSBzaXplIHNwYWNpbmcgc3ByZWFkIHN1bSBzeXN0ZW1fY2xvY2sgdGlueSB0cmFuc3Bvc2UgdHJpbSB1Ym91bmQgdW5wYWNrIHZlcmlmeSBhY2hhciBpYWNoYXIgdHJhbnNmZXIgZGJsZSBlbnRyeSBkcHJvZCBjcHVfdGltZSBjb21tYW5kX2FyZ3VtZW50X2NvdW50IGdldF9jb21tYW5kIGdldF9jb21tYW5kX2FyZ3VtZW50IGdldF9lbnZpcm9ubWVudF92YXJpYWJsZSBpc19pb3N0YXRfZW5kIGllZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgaXNfaW9zdGF0X2VvciBtb3ZlX2FsbG9jIG5ld19saW5lIHNlbGVjdGVkX2NoYXJfa2luZCBzYW1lX3R5cGVfYXMgZXh0ZW5kc190eXBlX29mYWNvc2ggYXNpbmggYXRhbmggYmVzc2VsX2owIGJlc3NlbF9qMSBiZXNzZWxfam4gYmVzc2VsX3kwIGJlc3NlbF95MSBiZXNzZWxfeW4gZXJmIGVyZmMgZXJmY19zY2FsZWQgZ2FtbWEgbG9nX2dhbW1hIGh5cG90IG5vcm0yIGF0b21pY19kZWZpbmUgYXRvbWljX3JlZiBleGVjdXRlX2NvbW1hbmRfbGluZSBsZWFkeiB0cmFpbHogc3RvcmFnZV9zaXplIG1lcmdlX2JpdHMgYmdlIGJndCBibGUgYmx0IGRzaGlmdGwgZHNoaWZ0ciBmaW5kbG9jIGlhbGwgaWFueSBpcGFyaXR5IGltYWdlX2luZGV4IGxjb2JvdW5kIHVjb2JvdW5kIG1hc2tsIG1hc2tyIG51bV9pbWFnZXMgcGFyaXR5IHBvcGNudCBwb3BwYXIgc2hpZnRhIHNoaWZ0bCBzaGlmdHIgdGhpc19pbWFnZSJ9O3JldHVybntjSTohMCxhbGlhc2VzOlsiZjkwIiwiZjk1Il0sazpuLGk6L1wvXCovLGM6W2UuaW5oZXJpdChlLkFTTSx7Y046InN0cmluZyIscjowfSksZS5pbmhlcml0KGUuUVNNLHtjTjoic3RyaW5nIixyOjB9KSx7Y046ImZ1bmN0aW9uIixiSzoic3Vicm91dGluZSBmdW5jdGlvbiBwcm9ncmFtIixpOiJbJHs9XFxuXSIsYzpbZS5VVE0sdF19LGUuQygiISIsIiQiLHtyOjB9KSx7Y046Im51bWJlciIsYjoiKD89XFxifFxcK3xcXC18XFwuKSg/PVxcLlxcZHxcXGQpKD86XFxkKyk/KD86XFwuP1xcZCopKD86W2RlXVsrLV0/XFxkKyk/XFxiXFwuPyIscjowfV19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJhd2siLGZ1bmN0aW9uKGUpe3ZhciByPXtjTjoidmFyaWFibGUiLHY6W3tiOi9cJFtcd1xkI0BdW1x3XGRfXSovfSx7YjovXCRceyguKj8pfS99XX0sYj0iQkVHSU4gRU5EIGlmIGVsc2Ugd2hpbGUgZG8gZm9yIGluIGJyZWFrIGNvbnRpbnVlIGRlbGV0ZSBuZXh0IG5leHRmaWxlIGZ1bmN0aW9uIGZ1bmMgZXhpdHwxMCIsbj17Y046InN0cmluZyIsYzpbZS5CRV0sdjpbe2I6Lyh1fGIpP3I/JycnLyxlOi8nJycvLHI6MTB9LHtiOi8odXxiKT9yPyIiIi8sZTovIiIiLyxyOjEwfSx7YjovKHV8cnx1ciknLyxlOi8nLyxyOjEwfSx7YjovKHV8cnx1cikiLyxlOi8iLyxyOjEwfSx7YjovKGJ8YnIpJy8sZTovJy99LHtiOi8oYnxicikiLyxlOi8iL30sZS5BU00sZS5RU01dfTtyZXR1cm57azp7a2V5d29yZDpifSxjOltyLG4sZS5STSxlLkhDTSxlLk5NXX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoIm1ha2VmaWxlIixmdW5jdGlvbihlKXt2YXIgaT17Y046InZhcmlhYmxlIix2Olt7YjoiXFwkXFwoIitlLlVJUisiXFwpIixjOltlLkJFXX0se2I6L1wkW0AlPD9cXlwrXCpdL31dfSxyPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOltlLkJFLGldfSxhPXtjTjoidmFyaWFibGUiLGI6L1wkXChbXHctXStccy8sZTovXCkvLGs6e2J1aWx0X2luOiJzdWJzdCBwYXRzdWJzdCBzdHJpcCBmaW5kc3RyaW5nIGZpbHRlciBmaWx0ZXItb3V0IHNvcnQgd29yZCB3b3JkbGlzdCBmaXJzdHdvcmQgbGFzdHdvcmQgZGlyIG5vdGRpciBzdWZmaXggYmFzZW5hbWUgYWRkc3VmZml4IGFkZHByZWZpeCBqb2luIHdpbGRjYXJkIHJlYWxwYXRoIGFic3BhdGggZXJyb3Igd2FybmluZyBzaGVsbCBvcmlnaW4gZmxhdm9yIGZvcmVhY2ggaWYgb3IgYW5kIGNhbGwgZXZhbCBmaWxlIHZhbHVlIn0sYzpbaV19LG49e2I6Il4iK2UuVUlSKyJcXHMqWzorP10/PSIsaToiXFxuIixyQjohMCxjOlt7YjoiXiIrZS5VSVIsZToiWzorP10/PSIsZUU6ITB9XX0sdD17Y046Im1ldGEiLGI6L15cLlBIT05ZOi8sZTovJC8sazp7Im1ldGEta2V5d29yZCI6Ii5QSE9OWSJ9LGw6L1tcLlx3XSsvfSxsPXtjTjoic2VjdGlvbiIsYjovXlteXHNdKzovLGU6LyQvLGM6W2ldfTtyZXR1cm57YWxpYXNlczpbIm1rIiwibWFrIl0sazoiZGVmaW5lIGVuZGVmIHVuZGVmaW5lIGlmZGVmIGlmbmRlZiBpZmVxIGlmbmVxIGVsc2UgZW5kaWYgaW5jbHVkZSAtaW5jbHVkZSBzaW5jbHVkZSBvdmVycmlkZSBleHBvcnQgdW5leHBvcnQgcHJpdmF0ZSB2cGF0aCIsbDovW1x3LV0rLyxjOltlLkhDTSxpLHIsYSxuLHQsbF19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJqYXZhIixmdW5jdGlvbihlKXt2YXIgYT0iW8OALcq4YS16QS1aXyRdW8OALcq4YS16QS1aXyQwLTldKiIsdD1hKyIoPCIrYSsiKFxccyosXFxzKiIrYSsiKSo+KT8iLHI9ImZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHZvaWQgZW51bSBlbHNlIGJyZWFrIHRyYW5zaWVudCBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyBwcm90ZWN0ZWQgcHVibGljIHByaXZhdGUgbW9kdWxlIHJlcXVpcmVzIGV4cG9ydHMgZG8iLHM9IlxcYigwW2JCXShbMDFdK1swMV9dK1swMV0rfFswMV0rKXwwW3hYXShbYS1mQS1GMC05XStbYS1mQS1GMC05X10rW2EtZkEtRjAtOV0rfFthLWZBLUYwLTldKyl8KChbXFxkXStbXFxkX10rW1xcZF0rfFtcXGRdKykoXFwuKFtcXGRdK1tcXGRfXStbXFxkXSt8W1xcZF0rKSk/fFxcLihbXFxkXStbXFxkX10rW1xcZF0rfFtcXGRdKykpKFtlRV1bLStdP1xcZCspPylbbExmRl0/IixjPXtjTjoibnVtYmVyIixiOnMscjowfTtyZXR1cm57YWxpYXNlczpbImpzcCJdLGs6cixpOi88XC98Iy8sYzpbZS5DKCIvXFwqXFwqIiwiXFwqLyIse3I6MCxjOlt7YjovXHcrQC8scjowfSx7Y046ImRvY3RhZyIsYjoiQFtBLVphLXpdKyJ9XX0pLGUuQ0xDTSxlLkNCQ00sZS5BU00sZS5RU00se2NOOiJjbGFzcyIsYks6ImNsYXNzIGludGVyZmFjZSIsZTovW3s7PV0vLGVFOiEwLGs6ImNsYXNzIGludGVyZmFjZSIsaTovWzoiXFtcXV0vLGM6W3tiSzoiZXh0ZW5kcyBpbXBsZW1lbnRzIn0sZS5VVE1dfSx7Yks6Im5ldyB0aHJvdyByZXR1cm4gZWxzZSIscjowfSx7Y046ImZ1bmN0aW9uIixiOiIoIit0KyJcXHMrKSsiK2UuVUlSKyJcXHMqXFwoIixyQjohMCxlOi9bezs9XS8sZUU6ITAsazpyLGM6W3tiOmUuVUlSKyJcXHMqXFwoIixyQjohMCxyOjAsYzpbZS5VVE1dfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxrOnIscjowLGM6W2UuQVNNLGUuUVNNLGUuQ05NLGUuQ0JDTV19LGUuQ0xDTSxlLkNCQ01dfSxjLHtjTjoibWV0YSIsYjoiQFtBLVphLXpdKyJ9XX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInN0YW4iLGZ1bmN0aW9uKGUpe3JldHVybntjOltlLkhDTSxlLkNMQ00sZS5DQkNNLHtiOmUuVUlSLGw6ZS5VSVIsazp7bmFtZToiZm9yIGluIHdoaWxlIHJlcGVhdCB1bnRpbCBpZiB0aGVuIGVsc2UiLHN5bWJvbDoiYmVybm91bGxpIGJlcm5vdWxsaV9sb2dpdCBiaW5vbWlhbCBiaW5vbWlhbF9sb2dpdCBiZXRhX2Jpbm9taWFsIGh5cGVyZ2VvbWV0cmljIGNhdGVnb3JpY2FsIGNhdGVnb3JpY2FsX2xvZ2l0IG9yZGVyZWRfbG9naXN0aWMgbmVnX2Jpbm9taWFsIG5lZ19iaW5vbWlhbF8yIG5lZ19iaW5vbWlhbF8yX2xvZyBwb2lzc29uIHBvaXNzb25fbG9nIG11bHRpbm9taWFsIG5vcm1hbCBleHBfbW9kX25vcm1hbCBza2V3X25vcm1hbCBzdHVkZW50X3QgY2F1Y2h5IGRvdWJsZV9leHBvbmVudGlhbCBsb2dpc3RpYyBndW1iZWwgbG9nbm9ybWFsIGNoaV9zcXVhcmUgaW52X2NoaV9zcXVhcmUgc2NhbGVkX2ludl9jaGlfc3F1YXJlIGV4cG9uZW50aWFsIGludl9nYW1tYSB3ZWlidWxsIGZyZWNoZXQgcmF5bGVpZ2ggd2llbmVyIHBhcmV0byBwYXJldG9fdHlwZV8yIHZvbl9taXNlcyB1bmlmb3JtIG11bHRpX25vcm1hbCBtdWx0aV9ub3JtYWxfcHJlYyBtdWx0aV9ub3JtYWxfY2hvbGVza3kgbXVsdGlfZ3AgbXVsdGlfZ3BfY2hvbGVza3kgbXVsdGlfc3R1ZGVudF90IGdhdXNzaWFuX2RsbV9vYnMgZGlyaWNobGV0IGxral9jb3JyIGxral9jb3JyX2Nob2xlc2t5IHdpc2hhcnQgaW52X3dpc2hhcnQiLCJzZWxlY3Rvci10YWciOiJpbnQgcmVhbCB2ZWN0b3Igc2ltcGxleCB1bml0X3ZlY3RvciBvcmRlcmVkIHBvc2l0aXZlX29yZGVyZWQgcm93X3ZlY3RvciBtYXRyaXggY2hvbGVza3lfZmFjdG9yX2NvcnIgY2hvbGVza3lfZmFjdG9yX2NvdiBjb3JyX21hdHJpeCBjb3ZfbWF0cml4Iix0aXRsZToiZnVuY3Rpb25zIG1vZGVsIGRhdGEgcGFyYW1ldGVycyBxdWFudGl0aWVzIHRyYW5zZm9ybWVkIGdlbmVyYXRlZCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSJ9LHI6MH0se2NOOiJudW1iZXIiLGI6IjBbeFhdWzAtOWEtZkEtRl0rW0xpXT9cXGIiLHI6MH0se2NOOiJudW1iZXIiLGI6IjBbeFhdWzAtOWEtZkEtRl0rW0xpXT9cXGIiLHI6MH0se2NOOiJudW1iZXIiLGI6IlxcZCsoPzpbZUVdWytcXC1dP1xcZCopP0xcXGIiLHI6MH0se2NOOiJudW1iZXIiLGI6IlxcZCtcXC4oPyFcXGQpKD86aVxcYik/IixyOjB9LHtjTjoibnVtYmVyIixiOiJcXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQqKT9pP1xcYiIscjowfSx7Y046Im51bWJlciIsYjoiXFwuXFxkKyg/OltlRV1bK1xcLV0/XFxkKik/aT9cXGIiLHI6MH1dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiamF2YXNjcmlwdCIsZnVuY3Rpb24oZSl7dmFyIHI9IltBLVphLXokX11bMC05QS1aYS16JF9dKiIsdD17a2V5d29yZDoiaW4gb2YgaWYgZm9yIHdoaWxlIGZpbmFsbHkgdmFyIG5ldyBmdW5jdGlvbiBkbyByZXR1cm4gdm9pZCBlbHNlIGJyZWFrIGNhdGNoIGluc3RhbmNlb2Ygd2l0aCB0aHJvdyBjYXNlIGRlZmF1bHQgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHR5cGVvZiBkZWxldGUgbGV0IHlpZWxkIGNvbnN0IGV4cG9ydCBzdXBlciBkZWJ1Z2dlciBhcyBhc3luYyBhd2FpdCBzdGF0aWMgaW1wb3J0IGZyb20gYXMiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5IixidWlsdF9pbjoiZXZhbCBpc0Zpbml0ZSBpc05hTiBwYXJzZUZsb2F0IHBhcnNlSW50IGRlY29kZVVSSSBkZWNvZGVVUklDb21wb25lbnQgZW5jb2RlVVJJIGVuY29kZVVSSUNvbXBvbmVudCBlc2NhcGUgdW5lc2NhcGUgT2JqZWN0IEZ1bmN0aW9uIEJvb2xlYW4gRXJyb3IgRXZhbEVycm9yIEludGVybmFsRXJyb3IgUmFuZ2VFcnJvciBSZWZlcmVuY2VFcnJvciBTdG9wSXRlcmF0aW9uIFN5bnRheEVycm9yIFR5cGVFcnJvciBVUklFcnJvciBOdW1iZXIgTWF0aCBEYXRlIFN0cmluZyBSZWdFeHAgQXJyYXkgRmxvYXQzMkFycmF5IEZsb2F0NjRBcnJheSBJbnQxNkFycmF5IEludDMyQXJyYXkgSW50OEFycmF5IFVpbnQxNkFycmF5IFVpbnQzMkFycmF5IFVpbnQ4QXJyYXkgVWludDhDbGFtcGVkQXJyYXkgQXJyYXlCdWZmZXIgRGF0YVZpZXcgSlNPTiBJbnRsIGFyZ3VtZW50cyByZXF1aXJlIG1vZHVsZSBjb25zb2xlIHdpbmRvdyBkb2N1bWVudCBTeW1ib2wgU2V0IE1hcCBXZWFrU2V0IFdlYWtNYXAgUHJveHkgUmVmbGVjdCBQcm9taXNlIn0sYT17Y046Im51bWJlciIsdjpbe2I6IlxcYigwW2JCXVswMV0rKSJ9LHtiOiJcXGIoMFtvT11bMC03XSspIn0se2I6ZS5DTlJ9XSxyOjB9LG49e2NOOiJzdWJzdCIsYjoiXFwkXFx7IixlOiJcXH0iLGs6dCxjOltdfSxjPXtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFLG5dfTtuLmM9W2UuQVNNLGUuUVNNLGMsYSxlLlJNXTt2YXIgcz1uLmMuY29uY2F0KFtlLkNCQ00sZS5DTENNXSk7cmV0dXJue2FsaWFzZXM6WyJqcyIsImpzeCJdLGs6dCxjOlt7Y046Im1ldGEiLHI6MTAsYjovXlxzKlsnIl11c2UgKHN0cmljdHxhc20pWyciXS99LHtjTjoibWV0YSIsYjovXiMhLyxlOi8kL30sZS5BU00sZS5RU00sYyxlLkNMQ00sZS5DQkNNLGEse2I6L1t7LF1ccyovLHI6MCxjOlt7YjpyKyJcXHMqOiIsckI6ITAscjowLGM6W3tjTjoiYXR0ciIsYjpyLHI6MH1dfV19LHtiOiIoIitlLlJTUisifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsazoicmV0dXJuIHRocm93IGNhc2UiLGM6W2UuQ0xDTSxlLkNCQ00sZS5STSx7Y046ImZ1bmN0aW9uIixiOiIoXFwoLio/XFwpfCIrcisiKVxccyo9PiIsckI6ITAsZToiXFxzKj0+IixjOlt7Y046InBhcmFtcyIsdjpbe2I6cn0se2I6L1woXHMqXCkvfSx7YjovXCgvLGU6L1wpLyxlQjohMCxlRTohMCxrOnQsYzpzfV19XX0se2I6LzwvLGU6LyhcL1x3K3xcdytcLyk+LyxzTDoieG1sIixjOlt7YjovPFx3K1xzKlwvPi8sc2tpcDohMH0se2I6LzxcdysvLGU6LyhcL1x3K3xcdytcLyk+Lyxza2lwOiEwLGM6W3tiOi88XHcrXHMqXC8+Lyxza2lwOiEwfSwic2VsZiJdfV19XSxyOjB9LHtjTjoiZnVuY3Rpb24iLGJLOiJmdW5jdGlvbiIsZTovXHsvLGVFOiEwLGM6W2UuaW5oZXJpdChlLlRNLHtiOnJ9KSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxlQjohMCxlRTohMCxjOnN9XSxpOi9cW3wlL30se2I6L1wkWyguXS99LGUuTUVUSE9EX0dVQVJELHtjTjoiY2xhc3MiLGJLOiJjbGFzcyIsZTovW3s7PV0vLGVFOiEwLGk6L1s6IlxbXF1dLyxjOlt7Yks6ImV4dGVuZHMifSxlLlVUTV19LHtiSzoiY29uc3RydWN0b3IiLGU6L1x7LyxlRTohMH1dLGk6LyMoPyEhKS99fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJ0ZXgiLGZ1bmN0aW9uKGMpe3ZhciBlPXtjTjoidGFnIixiOi9cXC8scjowLGM6W3tjTjoibmFtZSIsdjpbe2I6L1thLXpBLVrQsC3Rj9CQLdGPXStbKl0/L30se2I6L1teYS16QS1a0LAt0Y/QkC3RjzAtOV0vfV0sc3RhcnRzOntlVzohMCxyOjAsYzpbe2NOOiJzdHJpbmciLHY6W3tiOi9cWy8sZTovXF0vfSx7YjovXHsvLGU6L1x9L31dfSx7YjovXHMqPVxzKi8sZVc6ITAscjowLGM6W3tjTjoibnVtYmVyIixiOi8tP1xkKlwuP1xkKyhwdHxwY3xtbXxjbXxpbnxkZHxjY3xleHxlbSk/L31dfV19fV19O3JldHVybntjOltlLHtjTjoiZm9ybXVsYSIsYzpbZV0scjowLHY6W3tiOi9cJFwkLyxlOi9cJFwkL30se2I6L1wkLyxlOi9cJC99XX0sYy5DKCIlIiwiJCIse3I6MH0pXX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInhtbCIsZnVuY3Rpb24ocyl7dmFyIGU9IltBLVphLXowLTlcXC5fOi1dKyIsdD17ZVc6ITAsaTovPC8scjowLGM6W3tjTjoiYXR0ciIsYjplLHI6MH0se2I6Lz1ccyovLHI6MCxjOlt7Y046InN0cmluZyIsZW5kc1BhcmVudDohMCx2Olt7YjovIi8sZTovIi99LHtiOi8nLyxlOi8nL30se2I6L1teXHMiJz08PmBdKy99XX1dfV19O3JldHVybnthbGlhc2VzOlsiaHRtbCIsInhodG1sIiwicnNzIiwiYXRvbSIsInhqYiIsInhzZCIsInhzbCIsInBsaXN0Il0sY0k6ITAsYzpbe2NOOiJtZXRhIixiOiI8IURPQ1RZUEUiLGU6Ij4iLHI6MTAsYzpbe2I6IlxcWyIsZToiXFxdIn1dfSxzLkMoIjwhLS0iLCItLT4iLHtyOjEwfSkse2I6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiIscjoxMH0se2I6LzxcPyhwaHApPy8sZTovXD8+LyxzTDoicGhwIixjOlt7YjoiL1xcKiIsZToiXFwqLyIsc2tpcDohMH1dfSx7Y046InRhZyIsYjoiPHN0eWxlKD89XFxzfD58JCkiLGU6Ij4iLGs6e25hbWU6InN0eWxlIn0sYzpbdF0sc3RhcnRzOntlOiI8L3N0eWxlPiIsckU6ITAsc0w6WyJjc3MiLCJ4bWwiXX19LHtjTjoidGFnIixiOiI8c2NyaXB0KD89XFxzfD58JCkiLGU6Ij4iLGs6e25hbWU6InNjcmlwdCJ9LGM6W3RdLHN0YXJ0czp7ZToiPC9zY3JpcHQ+IixyRTohMCxzTDpbImFjdGlvbnNjcmlwdCIsImphdmFzY3JpcHQiLCJoYW5kbGViYXJzIiwieG1sIl19fSx7Y046Im1ldGEiLHY6W3tiOi88XD94bWwvLGU6L1w/Pi8scjoxMH0se2I6LzxcP1x3Ky8sZTovXD8+L31dfSx7Y046InRhZyIsYjoiPC8/IixlOiIvPz4iLGM6W3tjTjoibmFtZSIsYjovW15cLz48XHNdKy8scjowfSx0XX1dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgibWFya2Rvd24iLGZ1bmN0aW9uKGUpe3JldHVybnthbGlhc2VzOlsibWQiLCJta2Rvd24iLCJta2QiXSxjOlt7Y046InNlY3Rpb24iLHY6W3tiOiJeI3sxLDZ9IixlOiIkIn0se2I6Il4uKz9cXG5bPS1dezIsfSQifV19LHtiOiI8IixlOiI+IixzTDoieG1sIixyOjB9LHtjTjoiYnVsbGV0IixiOiJeKFsqKy1dfChcXGQrXFwuKSlcXHMrIn0se2NOOiJzdHJvbmciLGI6IlsqX117Mn0uKz9bKl9dezJ9In0se2NOOiJlbXBoYXNpcyIsdjpbe2I6IlxcKi4rP1xcKiJ9LHtiOiJfLis/XyIscjowfV19LHtjTjoicXVvdGUiLGI6Il4+XFxzKyIsZToiJCJ9LHtjTjoiY29kZSIsdjpbe2I6Il5gYGB3KnMqJCIsZToiXmBgYHMqJCJ9LHtiOiJgLis/YCJ9LHtiOiJeKCB7NH18CSkiLGU6IiQiLHI6MH1dfSx7YjoiXlstXFwqXXszLH0iLGU6IiQifSx7YjoiXFxbLis/XFxdW1xcKFxcW10uKj9bXFwpXFxdXSIsckI6ITAsYzpbe2NOOiJzdHJpbmciLGI6IlxcWyIsZToiXFxdIixlQjohMCxyRTohMCxyOjB9LHtjTjoibGluayIsYjoiXFxdXFwoIixlOiJcXCkiLGVCOiEwLGVFOiEwfSx7Y046InN5bWJvbCIsYjoiXFxdXFxbIixlOiJcXF0iLGVCOiEwLGVFOiEwfV0scjoxMH0se2I6L15cW1teXG5dK1xdOi8sckI6ITAsYzpbe2NOOiJzeW1ib2wiLGI6L1xbLyxlOi9cXS8sZUI6ITAsZUU6ITB9LHtjTjoibGluayIsYjovOlxzKi8sZTovJC8sZUI6ITB9XX1dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgianNvbiIsZnVuY3Rpb24oZSl7dmFyIGk9e2xpdGVyYWw6InRydWUgZmFsc2UgbnVsbCJ9LG49W2UuUVNNLGUuQ05NXSxyPXtlOiIsIixlVzohMCxlRTohMCxjOm4sazppfSx0PXtiOiJ7IixlOiJ9IixjOlt7Y046ImF0dHIiLGI6LyIvLGU6LyIvLGM6W2UuQkVdLGk6IlxcbiJ9LGUuaW5oZXJpdChyLHtiOi86L30pXSxpOiJcXFMifSxjPXtiOiJcXFsiLGU6IlxcXSIsYzpbZS5pbmhlcml0KHIpXSxpOiJcXFMifTtyZXR1cm4gbi5zcGxpY2Uobi5sZW5ndGgsMCx0LGMpLHtjOm4sazppLGk6IlxcUyJ9fSk7"></script> <script src="data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gdHJ5RXZhbCh0YXNrKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gQXR0ZW1wdCBldmFsKCkgYm90aCB3aXRoIGFuZCB3aXRob3V0IGVuY2xvc2luZyBpbiBwYXJlbnRoZXNlcy4KICAvLyBOb3RlIHRoYXQgZW5jbG9zaW5nIGNvZXJjZXMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbnRvCiAgLy8gYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWwoKSBjYW4gcGFyc2UKICAvLyAob3RoZXJ3aXNlLCBhIFN5bnRheEVycm9yIGlzIHRocm93bikKICBmdW5jdGlvbiB0cnlFdmFsKGNvZGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gZXZhbCgiKCIgKyBjb2RlICsgIikiKTsKICAgIH0gY2F0Y2goZXJyb3IpIHsKICAgICAgaWYgKCFlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICByZXN1bHQgPSBldmFsKGNvZGUpOwogICAgICB9IGNhdGNoKGUpIHsKICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBpbml0U2l6aW5nKGVsKSB7CiAgICB2YXIgc2l6aW5nID0gc2l6aW5nUG9saWN5KGVsKTsKICAgIGlmICghc2l6aW5nKQogICAgICByZXR1cm47CgogICAgdmFyIGNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodG1sd2lkZ2V0X2NvbnRhaW5lciIpOwogICAgaWYgKCFjZWwpCiAgICAgIHJldHVybjsKCiAgICBpZiAodHlwZW9mKHNpemluZy5wYWRkaW5nKSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAiMCI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZyA9IHBhZGRpbmdUb0Nzcyh1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKSk7CiAgICB9CgogICAgaWYgKHNpemluZy5maWxsKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgaWYgKGNlbCkgewogICAgICAgIGNlbC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgICAgdmFyIHBhZCA9IHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpOwogICAgICAgIGNlbC5zdHlsZS50b3AgPSBwYWQudG9wICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUucmlnaHQgPSBwYWQucmlnaHQgKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5ib3R0b20gPSBwYWQuYm90dG9tICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUubGVmdCA9IHBhZC5sZWZ0ICsgInB4IjsKICAgICAgICBlbC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIH0KCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwub2Zmc2V0SGVpZ2h0OyB9CiAgICAgIH07CgogICAgfSBlbHNlIHsKICAgICAgZWwuc3R5bGUud2lkdGggPSBweChzaXppbmcud2lkdGgpOwogICAgICBlbC5zdHlsZS5oZWlnaHQgPSBweChzaXppbmcuaGVpZ2h0KTsKCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0V2lkdGg7IH0sCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwogICAgfQogIH0KCiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgZm9yIG1ldGhvZHMKICB2YXIgZGVmYXVsdHMgPSB7CiAgICBmaW5kOiBmdW5jdGlvbihzY29wZSkgewogICAgICByZXR1cm4gcXVlcnlTZWxlY3RvckFsbChzY29wZSwgIi4iICsgdGhpcy5uYW1lKTsKICAgIH0sCiAgICByZW5kZXJFcnJvcjogZnVuY3Rpb24oZWwsIGVycikgewogICAgICB2YXIgJGVsID0gJChlbCk7CgogICAgICB0aGlzLmNsZWFyRXJyb3IoZWwpOwoKICAgICAgLy8gQWRkIGFsbCB0aGVzZSBlcnJvciBjbGFzc2VzLCBhcyBTaGlueSBkb2VzCiAgICAgIHZhciBlcnJDbGFzcyA9ICJzaGlueS1vdXRwdXQtZXJyb3IiOwogICAgICBpZiAoZXJyLnR5cGUgIT09IG51bGwpIHsKICAgICAgICAvLyB1c2UgdGhlIGNsYXNzZXMgb2YgdGhlIGVycm9yIGNvbmRpdGlvbiBhcyBDU1MgY2xhc3MgbmFtZXMKICAgICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiAiICsgJC5tYXAoYXNBcnJheShlcnIudHlwZSksIGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICAgIHJldHVybiBlcnJDbGFzcyArICItIiArIHR5cGU7CiAgICAgICAgfSkuam9pbigiICIpOwogICAgICB9CiAgICAgIGVyckNsYXNzID0gZXJyQ2xhc3MgKyAiIGh0bWx3aWRnZXRzLWVycm9yIjsKCiAgICAgIC8vIElzIGVsIGlubGluZSBvciBibG9jaz8gSWYgaW5saW5lIG9yIGlubGluZS1ibG9jaywganVzdCBkaXNwbGF5Om5vbmUgaXQKICAgICAgLy8gYW5kIGFkZCBhbiBpbmxpbmUgZXJyb3IuCiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmNzcygiZGlzcGxheSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBkaXNwbGF5KTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgICRlbC5oaWRlKCk7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yU3BhbiA9ICQoIjxzcGFuPiIpLmFkZENsYXNzKGVyckNsYXNzKTsKICAgICAgICAgIGVycm9yU3Bhbi50ZXh0KGVyci5tZXNzYWdlKTsKICAgICAgICAgICRlbC5hZnRlcihlcnJvclNwYW4pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKSB7CiAgICAgICAgLy8gSWYgYmxvY2ssIGFkZCBhbiBlcnJvciBqdXN0IGFmdGVyIHRoZSBlbCwgc2V0IHZpc2liaWxpdHk6bm9uZSBvbiB0aGUKICAgICAgICAvLyBlbCwgYW5kIHBvc2l0aW9uIHRoZSBlcnJvciB0byBiZSBvbiB0b3Agb2YgdGhlIGVsLgogICAgICAgIC8vIE1hcmsgaXQgd2l0aCBhIHVuaXF1ZSBJRCBhbmQgQ1NTIGNsYXNzIHNvIHdlIGNhbiByZW1vdmUgaXQgbGF0ZXIuCiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsKICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICIiKSB7CiAgICAgICAgICB2YXIgZXJyb3JEaXYgPSAkKCI8ZGl2PiIpLmFkZENsYXNzKGVyckNsYXNzKS5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIikKICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgLy8gc2V0dGluZyB3aWR0aCBjYW4gcHVzaCBvdXQgdGhlIHBhZ2Ugc2l6ZSwgZm9yY2luZyBvdGhlcndpc2UKICAgICAgICAgICAgLy8gdW5uZWNlc3Nhcnkgc2Nyb2xsYmFycyB0byBhcHBlYXIgYW5kIG1ha2luZyBpdCBpbXBvc3NpYmxlIGZvcgogICAgICAgICAgICAvLyB0aGUgZWxlbWVudCB0byBzaHJpbms7IHNvIHVzZSBtYXgtd2lkdGggaW5zdGVhZAogICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgZXJyb3JEaXYudGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JEaXYpOwoKICAgICAgICAgIC8vIFJlYWxseSBkdW1iIHdheSB0byBrZWVwIHRoZSBzaXplL3Bvc2l0aW9uIG9mIHRoZSBlcnJvciBpbiBzeW5jIHdpdGgKICAgICAgICAgIC8vIHRoZSBwYXJlbnQgZWxlbWVudCBhcyB0aGUgd2luZG93IGlzIHJlc2l6ZWQgb3Igd2hhdGV2ZXIuCiAgICAgICAgICB2YXIgaW50SWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFlcnJvckRpdlswXS5wYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRJZCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yRGl2CiAgICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQogICAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgY2xlYXJFcnJvcjogZnVuY3Rpb24oZWwpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwogICAgICB2YXIgZGlzcGxheSA9ICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBudWxsKTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgIGlmIChkaXNwbGF5KQogICAgICAgICAgJGVsLmNzcygiZGlzcGxheSIsIGRpc3BsYXkpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIil7CiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJpbmhlcml0Iik7CiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsKICAgICAgfQogICAgfSwKICAgIHNpemluZzoge30KICB9OwoKICAvLyBDYWxsZWQgYnkgd2lkZ2V0IGJpbmRpbmdzIHRvIHJlZ2lzdGVyIGEgbmV3IHR5cGUgb2Ygd2lkZ2V0LiBUaGUgZGVmaW5pdGlvbgogIC8vIG9iamVjdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAgLy8gLSBuYW1lIChyZXF1aXJlZCkgLSBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBiaW5kaW5nIG5hbWUsIHdoaWNoIHdpbGwgYmUKICAvLyAgIHVzZWQgYnkgZGVmYXVsdCBhcyB0aGUgQ1NTIGNsYXNzbmFtZSB0byBsb29rIGZvci4KICAvLyAtIGluaXRpYWxpemUgKG9wdGlvbmFsKSAtIEEgZnVuY3Rpb24oZWwpIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIHdpZGdldCBlbGVtZW50OyBpZiBhIHZhbHVlIGlzIHJldHVybmVkLCBpdCB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgdGhpcmQKICAvLyAgIHZhbHVlIHRvIHJlbmRlclZhbHVlLgogIC8vIC0gcmVuZGVyVmFsdWUgKHJlcXVpcmVkKSAtIEEgZnVuY3Rpb24oZWwsIGRhdGEsIGluaXRWYWx1ZSkgdGhhdCB3aWxsIGJlCiAgLy8gICBjYWxsZWQgd2l0aCBkYXRhLiBTdGF0aWMgY29udGV4dHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBvbmNlIHBlcgogIC8vICAgZWxlbWVudDsgU2hpbnkgYXBwcyB3aWxsIGNhdXNlIHRoaXMgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHBlcgogIC8vICAgZWxlbWVudCwgYXMgdGhlIGRhdGEgY2hhbmdlcy4KICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0ID0gZnVuY3Rpb24oZGVmaW5pdGlvbikgewogICAgaWYgKCFkZWZpbml0aW9uLm5hbWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAgfQogICAgaWYgKCFkZWZpbml0aW9uLnR5cGUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgdHlwZSIpOwogICAgfQogICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBvdXRwdXQgd2lkZ2V0cwogICAgaWYgKGRlZmluaXRpb24udHlwZSAhPT0gIm91dHB1dCIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgd2lkZ2V0IHR5cGUgJyIgKyBkZWZpbml0aW9uLnR5cGUgKyAiJyIpOwogICAgfQogICAgLy8gVE9ETzogVmVyaWZ5IHRoYXQgLm5hbWUgaXMgYSB2YWxpZCBDU1MgY2xhc3NuYW1lCgogICAgLy8gU3VwcG9ydCBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMuIE9sZC1zdHlsZSBjbGFzcy1ib3VuZAogICAgLy8gZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0ICJvYmplY3QiIHBlciB3aWRnZXQgcGVyIHR5cGUvY2xhc3Mgb2YKICAgIC8vIHdpZGdldDsgdGhlIHJlbmRlclZhbHVlIGFuZCByZXNpemUgbWV0aG9kcyBvbiBzdWNoIHdpZGdldCBvYmplY3RzCiAgICAvLyB0YWtlIGVsIGFuZCBpbnN0YW5jZSBhcmd1bWVudHMsIGJlY2F1c2UgdGhlIHdpZGdldCBvYmplY3QgY2FuJ3QKICAgIC8vIHN0b3JlIHRoZW0uIE5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQKICAgIC8vIG9iamVjdCBwZXIgd2lkZ2V0IGluc3RhbmNlOyB0aGUgZGVmaW5pdGlvbiB0aGF0J3MgcGFzc2VkIGluIGRvZXNuJ3QKICAgIC8vIHByb3ZpZGUgcmVuZGVyVmFsdWUgb3IgcmVzaXplIG1ldGhvZHMgYXQgYWxsLCBqdXN0IHRoZSBzaW5nbGUgbWV0aG9kCiAgICAvLyAgIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpCiAgICAvLyB3aGljaCByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGhhcyByZW5kZXJWYWx1ZSh4KSBhbmQgcmVzaXplKHcsIGgpLgogICAgLy8gVGhpcyBlbmFibGVzIGEgZmFyIG1vcmUgbmF0dXJhbCBwcm9ncmFtbWluZyBzdHlsZSBmb3IgdGhlIHdpZGdldAogICAgLy8gYXV0aG9yLCB3aG8gY2FuIHN0b3JlIHBlci1pbnN0YW5jZSBzdGF0ZSB1c2luZyBlaXRoZXIgT08tc3R5bGUKICAgIC8vIGluc3RhbmNlIGZpZWxkcyBvciBmdW5jdGlvbmFsLXN0eWxlIGNsb3N1cmUgdmFyaWFibGVzIChJIGd1ZXNzIHRoaXMKICAgIC8vIGlzIGluIGNvbnRyYXN0IHRvIHdoYXQgY2FuIG9ubHkgYmUgY2FsbGVkIEMtc3R5bGUgcHNldWRvLU9PIHdoaWNoIGlzCiAgICAvLyB3aGF0IHdlIHJlcXVpcmVkIGJlZm9yZSkuCiAgICBpZiAoZGVmaW5pdGlvbi5mYWN0b3J5KSB7CiAgICAgIGRlZmluaXRpb24gPSBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZpbml0aW9uKTsKICAgIH0KCiAgICBpZiAoIWRlZmluaXRpb24ucmVuZGVyVmFsdWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgcmVuZGVyVmFsdWUgZnVuY3Rpb24iKTsKICAgIH0KCiAgICAvLyBGb3Igc3RhdGljIHJlbmRlcmluZyAobm9uLVNoaW55KSwgdXNlIGEgc2ltcGxlIHdpZGdldCByZWdpc3RyYXRpb24KICAgIC8vIHNjaGVtZS4gV2UgYWxzbyB1c2UgdGhpcyBzY2hlbWUgZm9yIFNoaW55IGFwcHMvZG9jdW1lbnRzIHRoYXQgYWxzbwogICAgLy8gY29udGFpbiBzdGF0aWMgd2lkZ2V0cy4KICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICAvLyBNZXJnZSBkZWZhdWx0cyBpbnRvIHRoZSBkZWZpbml0aW9uOyBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24uCiAgICB2YXIgc3RhdGljQmluZGluZyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwogICAgb3ZlcnJpZGVNZXRob2Qoc3RhdGljQmluZGluZywgImZpbmQiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgdmFyIHJlc3VsdHMgPSBzdXBlcmZ1bmMoc2NvcGUpOwogICAgICAgIC8vIEZpbHRlciBvdXQgU2hpbnkgb3V0cHV0cywgd2Ugb25seSB3YW50IHRoZSBzdGF0aWMga2luZAogICAgICAgIHJldHVybiBmaWx0ZXJCeUNsYXNzKHJlc3VsdHMsICJodG1sLXdpZGdldC1vdXRwdXQiLCBmYWxzZSk7CiAgICAgIH07CiAgICB9KTsKICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzLnB1c2goc3RhdGljQmluZGluZyk7CgogICAgaWYgKHNoaW55TW9kZSkgewogICAgICAvLyBTaGlueSBpcyBydW5uaW5nLiBSZWdpc3RlciB0aGUgZGVmaW5pdGlvbiB3aXRoIGFuIG91dHB1dCBiaW5kaW5nLgogICAgICAvLyBUaGUgZGVmaW5pdGlvbiBpdHNlbGYgd2lsbCBub3QgYmUgdGhlIG91dHB1dCBiaW5kaW5nLCBpbnN0ZWFkCiAgICAgIC8vIHdlIHdpbGwgbWFrZSBhbiBvdXRwdXQgYmluZGluZyBvYmplY3QgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlCiAgICAgIC8vIGRlZmluaXRpb24uIFRoaXMgaXMgYmVjYXVzZSB3ZSBmb29saXNobHkgdXNlZCB0aGUgc2FtZSBtZXRob2QKICAgICAgLy8gbmFtZSAocmVuZGVyVmFsdWUpIGZvciBodG1sd2lkZ2V0cyBkZWZpbml0aW9uIGFuZCBTaGlueSBiaW5kaW5ncwogICAgICAvLyBidXQgdGhleSBhY3R1YWxseSBoYXZlIHF1aXRlIGRpZmZlcmVudCBzZW1hbnRpY3MgKHRoZSBTaGlueQogICAgICAvLyBiaW5kaW5ncyByZWNlaXZlIGRhdGEgdGhhdCBpbmNsdWRlcyBsb3RzIG9mIG1ldGFkYXRhIHRoYXQgaXQKICAgICAgLy8gc3RyaXBzIG9mZiBiZWZvcmUgY2FsbGluZyBodG1sd2lkZ2V0cyByZW5kZXJWYWx1ZSkuIFdlIGNhbid0CiAgICAgIC8vIGp1c3QgaWdub3JlIHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgaW4gc29tZSB3aWRnZXRzIGl0J3MgaGVscGZ1bAogICAgICAvLyB0byBjYWxsIHRoaXMucmVuZGVyVmFsdWUoKSBmcm9tIGluc2lkZSBvZiByZXNpemUoKSwgYW5kIGlmCiAgICAgIC8vIHdlJ3JlIG5vdCBkZWxlZ2F0aW5nLCB0aGVuIHRoYXQgY2FsbCB3aWxsIGdvIHRvIHRoZSBTaGlueQogICAgICAvLyB2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIGh0bWx3aWRnZXRzIHZlcnNpb24uCgogICAgICAvLyBNZXJnZSBkZWZhdWx0cyB3aXRoIGRlZmluaXRpb24sIHdpdGhvdXQgbXV0YXRpbmcgZWl0aGVyLgogICAgICB2YXIgYmluZGluZ0RlZiA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwoKICAgICAgLy8gVGhpcyBvYmplY3Qgd2lsbCBiZSBvdXIgYWN0dWFsIFNoaW55IGJpbmRpbmcuCiAgICAgIHZhciBzaGlueUJpbmRpbmcgPSBuZXcgU2hpbnkuT3V0cHV0QmluZGluZygpOwoKICAgICAgLy8gV2l0aCBhIGZldyBleGNlcHRpb25zLCB3ZSdsbCB3YW50IHRvIHNpbXBseSB1c2UgdGhlIGJpbmRpbmdEZWYncwogICAgICAvLyB2ZXJzaW9uIG9mIG1ldGhvZHMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCiAgICAgIC8vIFNoaW55J3MgZGVmYXVsdHMuIE5PVEU6IElmIFNoaW55J3Mgb3V0cHV0IGJpbmRpbmdzIGdhaW4gYWRkaXRpb25hbAogICAgICAvLyBtZXRob2RzIGluIHRoZSBmdXR1cmUsIGFuZCB3ZSB3YW50IHRoZW0gdG8gYmUgb3ZlcnJpZGVhYmxlIGJ5CiAgICAgIC8vIEhUTUxXaWRnZXQgYmluZGluZyBkZWZpbml0aW9ucywgdGhlbiB3ZSdsbCBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoaXMKICAgICAgLy8gbGlzdC4KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiZ2V0SWQiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUNoYW5nZSIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJvblZhbHVlRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAicmVuZGVyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiY2xlYXJFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJzaG93UHJvZ3Jlc3MiKTsKCiAgICAgIC8vIFRoZSBmaW5kLCByZW5kZXJWYWx1ZSwgYW5kIHJlc2l6ZSBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB3ZQogICAgICAvLyB3YW50IHRvIGFjdHVhbGx5IGRlY29yYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgYmluZGluZ0RlZiBtZXRob2RzLgoKICAgICAgc2hpbnlCaW5kaW5nLmZpbmQgPSBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gYmluZGluZ0RlZi5maW5kKHNjb3BlKTsKCiAgICAgICAgLy8gT25seSByZXR1cm4gZWxlbWVudHMgdGhhdCBhcmUgU2hpbnkgb3V0cHV0cywgbm90IHN0YXRpYyBvbmVzCiAgICAgICAgdmFyIGR5bmFtaWNSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoIi5odG1sLXdpZGdldC1vdXRwdXQiKTsKCiAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdoYXRldmVyIGNhdXNlZCBTaGlueSB0byB0aGluayB0aGVyZSBtaWdodCBiZQogICAgICAgIC8vIG5ldyBkeW5hbWljIG91dHB1dHMsIGFsc28gY2F1c2VkIHRoZXJlIHRvIGJlIG5ldyBzdGF0aWMgb3V0cHV0cy4KICAgICAgICAvLyBTaW5jZSB0aGVyZSBtaWdodCBiZSBsb3RzIG9mIGRpZmZlcmVudCBodG1sd2lkZ2V0cyBiaW5kaW5ncywgd2UKICAgICAgICAvLyBzY2hlZHVsZSBleGVjdXRpb24gZm9yIGxhdGVyLS1ubyBuZWVkIHRvIHN0YXRpY1JlbmRlciBtdWx0aXBsZQogICAgICAgIC8vIHRpbWVzLgogICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gZHluYW1pY1Jlc3VsdHMubGVuZ3RoKQogICAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXIoKTsKCiAgICAgICAgcmV0dXJuIGR5bmFtaWNSZXN1bHRzOwogICAgICB9OwoKICAgICAgLy8gV3JhcCByZW5kZXJWYWx1ZSB0byBoYW5kbGUgaW5pdGlhbGl6YXRpb24sIHdoaWNoIHVuZm9ydHVuYXRlbHkgaXNuJ3QKICAgICAgLy8gc3VwcG9ydGVkIG5hdGl2ZWx5IGJ5IFNoaW55IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4KCiAgICAgIHNoaW55QmluZGluZy5yZW5kZXJWYWx1ZSA9IGZ1bmN0aW9uKGVsLCBkYXRhKSB7CiAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGRhdGEuZGVwcyk7CiAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICBpZiAoIShkYXRhLmV2YWxzIGluc3RhbmNlb2YgQXJyYXkpKSBkYXRhLmV2YWxzID0gW2RhdGEuZXZhbHNdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBkYXRhLmV2YWxzICYmIGkgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2ldKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFiaW5kaW5nRGVmLnJlbmRlck9uTnVsbFZhbHVlKSB7CiAgICAgICAgICBpZiAoZGF0YS54ID09PSBudWxsKSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJpbmhlcml0IjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgIGluaXRTaXppbmcoZWwpOwoKICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiLCB0cnVlKTsKICAgICAgICAgIGlmIChiaW5kaW5nRGVmLmluaXRpYWxpemUpIHsKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJpbmRpbmdEZWYuaW5pdGlhbGl6ZShlbCwgZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJpbmRpbmdEZWYucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSwgW2VsLCBkYXRhLnhdKTsKICAgICAgfTsKCiAgICAgIC8vIE9ubHkgb3ZlcnJpZGUgcmVzaXplIGlmIGJpbmRpbmdEZWYgaW1wbGVtZW50cyBpdAogICAgICBpZiAoYmluZGluZ0RlZi5yZXNpemUpIHsKICAgICAgICBzaGlueUJpbmRpbmcucmVzaXplID0gZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICAgIC8vIFNoaW55IGNhbiBjYWxsIHJlc2l6ZSBiZWZvcmUgaW5pdGlhbGl6ZS9yZW5kZXJWYWx1ZSBoYXZlIGJlZW4KICAgICAgICAgIC8vIGNhbGxlZCwgd2hpY2ggZG9lc24ndCBtYWtlIHNlbnNlIGZvciB3aWRnZXRzLgogICAgICAgICAgaWYgKGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgICBiaW5kaW5nRGVmLnJlc2l6ZShlbCwgd2lkdGgsIGhlaWdodCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CgogICAgICBTaGlueS5vdXRwdXRCaW5kaW5ncy5yZWdpc3RlcihzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYubmFtZSk7CiAgICB9CiAgfTsKCiAgdmFyIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgZnVuY3Rpb24gc2NoZWR1bGVTdGF0aWNSZW5kZXIoKSB7CiAgICBpZiAoIXNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCkgewogICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9LCAxKTsKICAgIH0KICB9CgogIC8vIFJlbmRlciBzdGF0aWMgd2lkZ2V0cyBhZnRlciB0aGUgZG9jdW1lbnQgZmluaXNoZXMgbG9hZGluZwogIC8vIFN0YXRpY2FsbHkgcmVuZGVyIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBvZiB0aGlzIHdpZGdldCdzIGNsYXNzCiAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGJpbmRpbmdzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7CiAgICAgIHZhciBtYXRjaGVzID0gYmluZGluZy5maW5kKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICAgIGZvckVhY2gobWF0Y2hlcywgZnVuY3Rpb24oZWwpIHsKICAgICAgICB2YXIgc2l6ZU9iaiA9IGluaXRTaXppbmcoZWwsIGJpbmRpbmcpOwoKICAgICAgICBpZiAoaGFzQ2xhc3MoZWwsICJodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUgKyAiIGh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCI7CgogICAgICAgIHZhciBpbml0UmVzdWx0OwogICAgICAgIGlmIChiaW5kaW5nLmluaXRpYWxpemUpIHsKICAgICAgICAgIGluaXRSZXN1bHQgPSBiaW5kaW5nLmluaXRpYWxpemUoZWwsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICk7CiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgaW5pdFJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYmluZGluZy5yZXNpemUpIHsKICAgICAgICAgIHZhciBsYXN0U2l6ZSA9IHsKICAgICAgICAgICAgdzogc2l6ZU9iaiA/IHNpemVPYmouZ2V0V2lkdGgoKSA6IGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgfTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCgogIGZ1bmN0aW9uIGhhc19qUXVlcnkzKCkgewogICAgaWYgKCF3aW5kb3cualF1ZXJ5KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciAkdmVyc2lvbiA9IHdpbmRvdy5qUXVlcnkuZm4uanF1ZXJ5OwogICAgdmFyICRtYWpvcl92ZXJzaW9uID0gcGFyc2VJbnQoJHZlcnNpb24uc3BsaXQoIi4iKVswXSk7CiAgICByZXR1cm4gJG1ham9yX3ZlcnNpb24gPj0gMzsKICB9CgogIC8qCiAgLyBTaGlueSAxLjQgYnVtcGVkIGpRdWVyeSBmcm9tIDEueCB0byAzLnggd2hpY2ggbWVhbnMgalF1ZXJ5J3MKICAvIG9uLXJlYWR5IGhhbmRsZXIgKGkuZS4sICQoZm4pKSBpcyBub3cgYXN5bmNyb25vdXMgKGkuZS4sIGl0IG5vdwogIC8gcmVhbGx5IG1lYW5zICQoc2V0VGltZW91dChmbikpLgogIC8gaHR0cHM6Ly9qcXVlcnkuY29tL3VwZ3JhZGUtZ3VpZGUvMy4wLyNicmVha2luZy1jaGFuZ2UtZG9jdW1lbnQtcmVhZHktaGFuZGxlcnMtYXJlLW5vdy1hc3luY2hyb25vdXMKICAvCiAgLyBTaW5jZSBTaGlueSB1c2VzICQoKSB0byBzY2hlZHVsZSBpbml0U2hpbnksIHNoaW55Pj0xLjQgY2FsbHMgaW5pdFNoaW55CiAgLyBvbmUgdGljayBsYXRlciB0aGFuIGl0IGRpZCBiZWZvcmUsIHdoaWNoIG1lYW5zIHN0YXRpY1JlbmRlcigpIGlzCiAgLyBjYWxsZWQgcmVuZGVyVmFsdWUoKSBlYXJsaWVyIHRoYW4gKGFkdmFuY2VkKSB3aWRnZXQgYXV0aG9ycyBtaWdodCBiZSBleHBlY3RpbmcuCiAgLyBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9zaGlueS9pc3N1ZXMvMjYzMAogIC8KICAvIEZvciBhIGNvbmNyZXRlIGV4YW1wbGUsIGxlYWZsZXQgaGFzIHNvbWUgbWV0aG9kcyAoZS5nLiwgdXBkYXRlQm91bmRzKQogIC8gd2hpY2ggcmVmZXJlbmNlIFNoaW55IG1ldGhvZHMgcmVnaXN0ZXJlZCBpbiBpbml0U2hpbnkgKGUuZy4sIHNldElucHV0VmFsdWUpLgogIC8gU2luY2UgbGVhZmxldCBpcyBwcml2eSB0byB0aGlzIGxpZmUtY3ljbGUsIGl0IGtub3dzIHRvIHVzZSBzZXRUaW1lb3V0KCkgdG8KICAvIGRlbGF5IGV4ZWN1dGlvbiBvZiB0aG9zZSBtZXRob2RzICh1bnRpbCBTaGlueSBtZXRob2RzIGFyZSByZWFkeSkKICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvYmxvYi8xOGVjOTgxL2phdmFzY3JpcHQvc3JjL2luZGV4LmpzI0wyNjYtTDI2OAogIC8KICAvIElkZWFsbHkgd2lkZ2V0IGF1dGhvcnMgd291bGRuJ3QgbmVlZCB0byB1c2UgdGhpcyBzZXRUaW1lb3V0KCkgaGFjayB0aGF0CiAgLyBsZWFmbGV0IHVzZXMgdG8gY2FsbCBTaGlueSBtZXRob2RzIG9uIGEgc3RhdGljUmVuZGVyKCkuIEluIHRoZSBsb25nIHJ1biwKICAvIHRoZSBsb2dpYyBpbml0U2hpbnkgc2hvdWxkIGJlIGJyb2tlbiB1cCBzbyB0aGF0IG1ldGhvZCByZWdpc3RyYXRpb24gaGFwcGVucwogIC8gcmlnaHQgYXdheSwgYnV0IGJpbmRpbmcgaGFwcGVucyBsYXRlci4KICAqLwogIGZ1bmN0aW9uIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKSB7CiAgICBpZiAoc2hpbnlNb2RlICYmIGhhc19qUXVlcnkzKCkpIHsKICAgICAgd2luZG93LmpRdWVyeSh3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgIH0KICB9CgogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBhcmd1bWVudHMuY2FsbGVlLCBmYWxzZSk7CiAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgIH0sIGZhbHNlKTsKICB9IGVsc2UgaWYgKGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7CiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiKSB7CiAgICAgICAgZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUpOwogICAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgICAgfQogICAgfSk7CiAgfQoKCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsKICAgIC8vIElmIG5vIGtleSwgZGVmYXVsdCB0byB0aGUgZmlyc3QgaXRlbQogICAgaWYgKHR5cGVvZihrZXkpID09PSAidW5kZWZpbmVkIikKICAgICAga2V5ID0gMTsKCiAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlcG5hbWUgKyAiLSIgKyBrZXkgKyAiLWF0dGFjaG1lbnQiKTsKICAgIGlmICghbGluaykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0dGFjaG1lbnQgIiArIGRlcG5hbWUgKyAiLyIgKyBrZXkgKyAiIG5vdCBmb3VuZCBpbiBkb2N1bWVudCIpOwogICAgfQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgewogICAgdmFyIG5hbWVzID0gW107CiAgICB2YXIgbGVuZ3RoOwogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgewogICAgICAgIGlmIChkZi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lKTsKICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGxlbmd0aCkgIT09ICJ1bmRlZmluZWQiICYmIGxlbmd0aCAhPT0gZGZbbmFtZV0ubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoID0gZGZbbmFtZV0ubGVuZ3RoOwogICAgfQogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHZhciBpdGVtOwogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgewogICAgICAgIGl0ZW0gPSB7fTsKICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuYW1lcy5sZW5ndGg7IGNvbCsrKSB7CiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOwogICAgICAgIH0KICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMudHJhbnNwb3NlQXJyYXkyRCA9IGZ1bmN0aW9uKGFycmF5KSB7CiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBhcnJheTsKICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgewogICAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbihyb3cpIHsKICAgICAgICAgICAgICByZXR1cm4gcm93W2ldCiAgICAgICAgICB9KQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ld0FycmF5OwogIH07CiAgLy8gU3BsaXQgdmFsdWUgYXQgc3BsaXRDaGFyLCBidXQgYWxsb3cgc3BsaXRDaGFyIHRvIGJlIGVzY2FwZWQKICAvLyB1c2luZyBlc2NhcGVDaGFyLiBBbnkgb3RoZXIgY2hhcmFjdGVycyBlc2NhcGVkIGJ5IGVzY2FwZUNoYXIKICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLgogIGZ1bmN0aW9uIHNwbGl0V2l0aEVzY2FwZSh2YWx1ZSwgc3BsaXRDaGFyLCBlc2NhcGVDaGFyKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgIHZhciBjdXJyZW50UmVzdWx0ID0gIiI7CiAgICBmb3IgKHZhciBwb3MgPSAwOyBwb3MgPCB2YWx1ZS5sZW5ndGg7IHBvcysrKSB7CiAgICAgIGlmICghZXNjYXBlTW9kZSkgewogICAgICAgIGlmICh2YWx1ZVtwb3NdID09PSBzcGxpdENoYXIpIHsKICAgICAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW3Bvc10gPT09IGVzY2FwZUNoYXIpIHsKICAgICAgICAgIGVzY2FwZU1vZGUgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICBlc2NhcGVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChjdXJyZW50UmVzdWx0ICE9PSAiIikgewogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9CiAgLy8gRnVuY3Rpb24gYXV0aG9yZWQgYnkgWWlodWkvSkogQWxsYWlyZQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlciA9IGZ1bmN0aW9uKG8sIG1lbWJlcikgewogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsKICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07CiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQogICAgICBpZiAobyAhPT0gbnVsbCAmJiB0eXBlb2YgbyA9PT0gIm9iamVjdCIgJiYgcGFydCBpbiBvKSB7CiAgICAgICAgaWYgKGkgPT0gKGwgLSAxKSkgeyAvLyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGVuIGV2YWx1bGF0ZQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikKICAgICAgICAgICAgb1twYXJ0XSA9IHRyeUV2YWwob1twYXJ0XSk7CiAgICAgICAgfSBlbHNlIHsgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHRvIG5leHQgZW1iZWRkZWQgb2JqZWN0CiAgICAgICAgICBvID0gb1twYXJ0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuCiAgLy8gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCwgb3IgbnVsbCBpZiBub25lLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7CiAgICByZXR1cm4gZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpOwogIH07CgogIC8vIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzY29wZSB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLAogIC8vIGFuZCByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YKICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGVsZW1lbnQsIGlmIGFueS4gSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZQogIC8vIHNlbGVjdG9yLCBvciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBoYXMgbm8gSFRNTFdpZGdldAogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgICBpZiAoZWwgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKGVsKTsKICAgIH0KICB9OwoKICAvLyBGaW5kcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLCBhbmQKICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50cywgaW4gYW4gYXJyYXkuIElmIGVsZW1lbnRzIHRoYXQKICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQKICAvLyBpbnN0YW5jZSwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgY29udGFpbiBudWxscy4KICAvLwogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4KICB3aW5kb3cuSFRNTFdpZGdldHMuZmluZEFsbCA9IGZ1bmN0aW9uKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICBzZWxlY3RvciA9IHNjb3BlOwogICAgICBzY29wZSA9IGRvY3VtZW50OwogICAgfQoKICAgIHZhciBub2RlcyA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0cy5wdXNoKHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShub2Rlc1tpXSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOwogIGZ1bmN0aW9uIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpIHsKICAgIHdoaWxlIChwb3N0UmVuZGVySGFuZGxlcnMubGVuZ3RoKSB7CiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7CiAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgaGFuZGxlcigpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZWdpc3RlciB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUKICAvLyBuZXh0IHRpbWUgc3RhdGljIHdpZGdldHMgYXJlIHJlbmRlcmVkLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICBwb3N0UmVuZGVySGFuZGxlcnMucHVzaChjYWxsYmFjayk7CiAgfTsKCiAgLy8gVGFrZXMgYSBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbiwgYW5kIHJldHVybnMgYW4KICAvLyBvbGQtc3R5bGUgY2xhc3MtYm91bmQgZGVmaW5pdGlvbi4gVGhpcyBzYXZlcyB1cyBmcm9tIGhhdmluZwogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoCiAgLy8gdHlwZXMgb2YgZGVmaW5pdGlvbnMuCiAgZnVuY3Rpb24gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmbikgewogICAgdmFyIHJlc3VsdCA9IHsKICAgICAgbmFtZTogZGVmbi5uYW1lLAogICAgICB0eXBlOiBkZWZuLnR5cGUsCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgcmV0dXJuIGRlZm4uZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0sCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVuZGVyVmFsdWUoeCk7CiAgICAgIH0sCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgfQogICAgfTsKCiAgICBpZiAoZGVmbi5maW5kKQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsKICAgIGlmIChkZWZuLnJlbmRlckVycm9yKQogICAgICByZXN1bHQucmVuZGVyRXJyb3IgPSBkZWZuLnJlbmRlckVycm9yOwogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikKICAgICAgcmVzdWx0LmNsZWFyRXJyb3IgPSBkZWZuLmNsZWFyRXJyb3I7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0pKCk7Cgo="></script> <link href="data:text/css,%0Adiv%20%2Edygraphs%20input%5Btype%3D%22text%22%5D%20%7B%0Awidth%3A%2025px%3B%0A%7D%0Adiv%20%2Eqt%20%2Edygraph%2Daxis%2Dlabel%20%7B%0Afont%2Dsize%3A%2011px%3B%0A%7D" rel="stylesheet" /> <script src="data:application/javascript;base64,LyohIEBsaWNlbnNlIENvcHlyaWdodCAyMDE0IERhbiBWYW5kZXJrYW0gKGRhbnZka0BnbWFpbC5jb20pIE1JVC1saWNlbnNlZCAoaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCkgKi8KIWZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIGUsYSxpPXt9LHI9ZnVuY3Rpb24oKXt9LG49Im1lbW9yeSIuc3BsaXQoIiwiKSxvPSJhc3NlcnQsY2xlYXIsY291bnQsZGVidWcsZGlyLGRpcnhtbCxlcnJvcixleGNlcHRpb24sZ3JvdXAsZ3JvdXBDb2xsYXBzZWQsZ3JvdXBFbmQsaW5mbyxsb2csbWFya1RpbWVsaW5lLHByb2ZpbGUscHJvZmlsZXMscHJvZmlsZUVuZCxzaG93LHRhYmxlLHRpbWUsdGltZUVuZCx0aW1lbGluZSx0aW1lbGluZUVuZCx0aW1lU3RhbXAsdHJhY2Usd2FybiIuc3BsaXQoIiwiKTtlPW4ucG9wKCk7KXRbZV09dFtlXXx8aTtmb3IoO2E9by5wb3AoKTspdFthXT10W2FdfHxyfSh0aGlzLmNvbnNvbGU9dGhpcy5jb25zb2xlfHx7fSksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZS5pbnN0YWxsUGF0dGVybj1mdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMuaXNQYXR0ZXJuSW5zdGFsbGVkKXRocm93Ik11c3QgdW4taW5zdGFsbCBvbGQgbGluZSBwYXR0ZXJuIGJlZm9yZSBpbnN0YWxsaW5nIGEgbmV3IG9uZS4iO3RoaXMuaXNQYXR0ZXJuSW5zdGFsbGVkPSEwO3ZhciBlPVswLDBdLGE9W10saT10aGlzLmJlZ2luUGF0aCxyPXRoaXMubGluZVRvLG49dGhpcy5tb3ZlVG8sbz10aGlzLnN0cm9rZTt0aGlzLnVuaW5zdGFsbFBhdHRlcm49ZnVuY3Rpb24oKXt0aGlzLmJlZ2luUGF0aD1pLHRoaXMubGluZVRvPXIsdGhpcy5tb3ZlVG89bix0aGlzLnN0cm9rZT1vLHRoaXMudW5pbnN0YWxsUGF0dGVybj12b2lkIDAsdGhpcy5pc1BhdHRlcm5JbnN0YWxsZWQ9dm9pZCAwfSx0aGlzLmJlZ2luUGF0aD1mdW5jdGlvbigpe2E9W10saS5jYWxsKHRoaXMpfSx0aGlzLm1vdmVUbz1mdW5jdGlvbih0LGUpe2EucHVzaChbW3QsZV1dKSxuLmNhbGwodGhpcyx0LGUpfSx0aGlzLmxpbmVUbz1mdW5jdGlvbih0LGUpe3ZhciBpPWFbYS5sZW5ndGgtMV07aS5wdXNoKFt0LGVdKX0sdGhpcy5zdHJva2U9ZnVuY3Rpb24oKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuIHZvaWQgby5jYWxsKHRoaXMpO2Zvcih2YXIgaT0wO2k8YS5sZW5ndGg7aSsrKWZvcih2YXIgcz1hW2ldLGw9c1swXVswXSxoPXNbMF1bMV0scD0xO3A8cy5sZW5ndGg7cCsrKXt2YXIgZz1zW3BdWzBdLGQ9c1twXVsxXTt0aGlzLnNhdmUoKTt2YXIgdT1nLWwsYz1kLWgseT1NYXRoLnNxcnQodSp1K2MqYyksXz1NYXRoLmF0YW4yKGMsdSk7dGhpcy50cmFuc2xhdGUobCxoKSxuLmNhbGwodGhpcywwLDApLHRoaXMucm90YXRlKF8pO2Zvcih2YXIgdj1lWzBdLGY9MDt5PmY7KXt2YXIgeD10W3ZdO2YrPWVbMV0/ZVsxXTp4LGY+eT8oZT1bdixmLXldLGY9eSk6ZT1bKHYrMSkldC5sZW5ndGgsMF0sdiUyPT09MD9yLmNhbGwodGhpcyxmLDApOm4uY2FsbCh0aGlzLGYsMCksdj0odisxKSV0Lmxlbmd0aH10aGlzLnJlc3RvcmUoKSxsPWcsaD1kfW8uY2FsbCh0aGlzKSxhPVtdfX0sQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZS51bmluc3RhbGxQYXR0ZXJuPWZ1bmN0aW9uKCl7dGhyb3ciTXVzdCBpbnN0YWxsIGEgbGluZSBwYXR0ZXJuIGJlZm9yZSB1bmluc3RhbGxpbmcgaXQuIn19KCk7dmFyIER5Z3JhcGhPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQpe3RoaXMuZHlncmFwaF89dCx0aGlzLnlBeGVzXz1bXSx0aGlzLnhBeGlzXz17fSx0aGlzLnNlcmllc189e30sdGhpcy5nbG9iYWxfPXRoaXMuZHlncmFwaF8uYXR0cnNfLHRoaXMudXNlcl89dGhpcy5keWdyYXBoXy51c2VyX2F0dHJzX3x8e30sdGhpcy5sYWJlbHNfPVtdLHRoaXMuaGlnaGxpZ2h0U2VyaWVzXz10aGlzLmdldCgiaGlnaGxpZ2h0U2VyaWVzT3B0cyIpfHx7fSx0aGlzLnJlcGFyc2VTZXJpZXMoKX07dC5BWElTX1NUUklOR19NQVBQSU5HU189e3k6MCxZOjAseTE6MCxZMTowLHkyOjEsWTI6MX0sdC5heGlzVG9JbmRleF89ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZih0LkFYSVNfU1RSSU5HX01BUFBJTkdTXy5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gdC5BWElTX1NUUklOR19NQVBQSU5HU19bZV07dGhyb3ciVW5rbm93biBheGlzIDogIitlfWlmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoMD09PWV8fDE9PT1lKXJldHVybiBlO3Rocm93IkR5Z3JhcGhzIG9ubHkgc3VwcG9ydHMgdHdvIHktYXhlcywgaW5kZXhlZCBmcm9tIDAtMS4ifWlmKGUpdGhyb3ciVW5rbm93biBheGlzIDogIitlO3JldHVybiAwfSx0LnByb3RvdHlwZS5yZXBhcnNlU2VyaWVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXQoImxhYmVscyIpO2lmKGUpe3RoaXMubGFiZWxzXz1lLnNsaWNlKDEpLHRoaXMueUF4ZXNfPVt7c2VyaWVzOltdLG9wdGlvbnM6e319XSx0aGlzLnhBeGlzXz17b3B0aW9uczp7fX0sdGhpcy5zZXJpZXNfPXt9O3ZhciBhPSF0aGlzLnVzZXJfLnNlcmllcztpZihhKXtmb3IodmFyIGk9MCxyPTA7cjx0aGlzLmxhYmVsc18ubGVuZ3RoO3IrKyl7dmFyIG49dGhpcy5sYWJlbHNfW3JdLG89dGhpcy51c2VyX1tuXXx8e30scz0wLGw9by5heGlzOyJvYmplY3QiPT10eXBlb2YgbCYmKHM9KytpLHRoaXMueUF4ZXNfW3NdPXtzZXJpZXM6W25dLG9wdGlvbnM6bH0pLGx8fHRoaXMueUF4ZXNfWzBdLnNlcmllcy5wdXNoKG4pLHRoaXMuc2VyaWVzX1tuXT17aWR4OnIseUF4aXM6cyxvcHRpb25zOm99fWZvcih2YXIgcj0wO3I8dGhpcy5sYWJlbHNfLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMubGFiZWxzX1tyXSxvPXRoaXMuc2VyaWVzX1tuXS5vcHRpb25zLGw9by5heGlzO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7aWYoIXRoaXMuc2VyaWVzXy5oYXNPd25Qcm9wZXJ0eShsKSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJTZXJpZXMgIituKyIgd2FudHMgdG8gc2hhcmUgYSB5LWF4aXMgd2l0aCBzZXJpZXMgIitsKyIsIHdoaWNoIGRvZXMgbm90IGRlZmluZSBpdHMgb3duIGF4aXMuIik7dmFyIHM9dGhpcy5zZXJpZXNfW2xdLnlBeGlzO3RoaXMuc2VyaWVzX1tuXS55QXhpcz1zLHRoaXMueUF4ZXNfW3NdLnNlcmllcy5wdXNoKG4pfX19ZWxzZSBmb3IodmFyIHI9MDtyPHRoaXMubGFiZWxzXy5sZW5ndGg7cisrKXt2YXIgbj10aGlzLmxhYmVsc19bcl0sbz10aGlzLnVzZXJfLnNlcmllc1tuXXx8e30scz10LmF4aXNUb0luZGV4XyhvLmF4aXMpO3RoaXMuc2VyaWVzX1tuXT17aWR4OnIseUF4aXM6cyxvcHRpb25zOm99LHRoaXMueUF4ZXNfW3NdP3RoaXMueUF4ZXNfW3NdLnNlcmllcy5wdXNoKG4pOnRoaXMueUF4ZXNfW3NdPXtzZXJpZXM6W25dLG9wdGlvbnM6e319fXZhciBoPXRoaXMudXNlcl8uYXhlc3x8e307RHlncmFwaC51cGRhdGUodGhpcy55QXhlc19bMF0ub3B0aW9ucyxoLnl8fHt9KSx0aGlzLnlBeGVzXy5sZW5ndGg+MSYmRHlncmFwaC51cGRhdGUodGhpcy55QXhlc19bMV0ub3B0aW9ucyxoLnkyfHx7fSksRHlncmFwaC51cGRhdGUodGhpcy54QXhpc18ub3B0aW9ucyxoLnh8fHt9KX19LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldEdsb2JhbFVzZXJfKHQpO3JldHVybiBudWxsIT09ZT9lOnRoaXMuZ2V0R2xvYmFsRGVmYXVsdF8odCl9LHQucHJvdG90eXBlLmdldEdsb2JhbFVzZXJfPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVzZXJfLmhhc093blByb3BlcnR5KHQpP3RoaXMudXNlcl9bdF06bnVsbH0sdC5wcm90b3R5cGUuZ2V0R2xvYmFsRGVmYXVsdF89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2xvYmFsXy5oYXNPd25Qcm9wZXJ0eSh0KT90aGlzLmdsb2JhbF9bdF06RHlncmFwaC5ERUZBVUxUX0FUVFJTLmhhc093blByb3BlcnR5KHQpP0R5Z3JhcGguREVGQVVMVF9BVFRSU1t0XTpudWxsfSx0LnByb3RvdHlwZS5nZXRGb3JBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIGEsaTtpZigibnVtYmVyIj09dHlwZW9mIGUpYT1lLGk9MD09PWE/InkiOiJ5MiI7ZWxzZXtpZigieTEiPT1lJiYoZT0ieSIpLCJ5Ij09ZSlhPTA7ZWxzZSBpZigieTIiPT1lKWE9MTtlbHNle2lmKCJ4IiE9ZSl0aHJvdyJVbmtub3duIGF4aXMgIitlO2E9LTF9aT1lfXZhciByPS0xPT1hP3RoaXMueEF4aXNfOnRoaXMueUF4ZXNfW2FdO2lmKHIpe3ZhciBuPXIub3B0aW9ucztpZihuLmhhc093blByb3BlcnR5KHQpKXJldHVybiBuW3RdfWlmKCJ4IiE9PWV8fCJsb2dzY2FsZSIhPT10KXt2YXIgbz10aGlzLmdldEdsb2JhbFVzZXJfKHQpO2lmKG51bGwhPT1vKXJldHVybiBvfXZhciBzPUR5Z3JhcGguREVGQVVMVF9BVFRSUy5heGVzW2ldO3JldHVybiBzLmhhc093blByb3BlcnR5KHQpP3NbdF06dGhpcy5nZXRHbG9iYWxEZWZhdWx0Xyh0KX0sdC5wcm90b3R5cGUuZ2V0Rm9yU2VyaWVzPWZ1bmN0aW9uKHQsZSl7aWYoZT09PXRoaXMuZHlncmFwaF8uZ2V0SGlnaGxpZ2h0U2VyaWVzKCkmJnRoaXMuaGlnaGxpZ2h0U2VyaWVzXy5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gdGhpcy5oaWdobGlnaHRTZXJpZXNfW3RdO2lmKCF0aGlzLnNlcmllc18uaGFzT3duUHJvcGVydHkoZSkpdGhyb3ciVW5rbm93biBzZXJpZXM6ICIrZTt2YXIgYT10aGlzLnNlcmllc19bZV0saT1hLm9wdGlvbnM7cmV0dXJuIGkuaGFzT3duUHJvcGVydHkodCk/aVt0XTp0aGlzLmdldEZvckF4aXModCxhLnlBeGlzKX0sdC5wcm90b3R5cGUubnVtQXhlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnlBeGVzXy5sZW5ndGh9LHQucHJvdG90eXBlLmF4aXNGb3JTZXJpZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VyaWVzX1t0XS55QXhpc30sdC5wcm90b3R5cGUuYXhpc09wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueUF4ZXNfW3RdLm9wdGlvbnN9LHQucHJvdG90eXBlLnNlcmllc0ZvckF4aXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueUF4ZXNfW3RdLnNlcmllc30sdC5wcm90b3R5cGUuc2VyaWVzTmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYWJlbHNffTtyZXR1cm4gdH0oKX0oKSxEeWdyYXBoTGF5b3V0PWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQpe3RoaXMuZHlncmFwaF89dCx0aGlzLnBvaW50cz1bXSx0aGlzLnNldE5hbWVzPVtdLHRoaXMuYW5ub3RhdGlvbnM9W10sdGhpcy55QXhlc189bnVsbCx0aGlzLnhUaWNrc189bnVsbCx0aGlzLnlUaWNrc189bnVsbH07cmV0dXJuIHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnBvaW50cy5wdXNoKGUpLHRoaXMuc2V0TmFtZXMucHVzaCh0KX0sdC5wcm90b3R5cGUuZ2V0UGxvdEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcmVhX30sdC5wcm90b3R5cGUuY29tcHV0ZVBsb3RBcmVhPWZ1bmN0aW9uKCl7dmFyIHQ9e3g6MCx5OjB9O3Qudz10aGlzLmR5Z3JhcGhfLndpZHRoXy10LngtdGhpcy5keWdyYXBoXy5nZXRPcHRpb24oInJpZ2h0R2FwIiksdC5oPXRoaXMuZHlncmFwaF8uaGVpZ2h0Xzt2YXIgZT17Y2hhcnRfZGl2OnRoaXMuZHlncmFwaF8uZ3JhcGhEaXYscmVzZXJ2ZVNwYWNlTGVmdDpmdW5jdGlvbihlKXt2YXIgYT17eDp0LngseTp0LnksdzplLGg6dC5ofTtyZXR1cm4gdC54Kz1lLHQudy09ZSxhfSxyZXNlcnZlU3BhY2VSaWdodDpmdW5jdGlvbihlKXt2YXIgYT17eDp0LngrdC53LWUseTp0LnksdzplLGg6dC5ofTtyZXR1cm4gdC53LT1lLGF9LHJlc2VydmVTcGFjZVRvcDpmdW5jdGlvbihlKXt2YXIgYT17eDp0LngseTp0Lnksdzp0LncsaDplfTtyZXR1cm4gdC55Kz1lLHQuaC09ZSxhfSxyZXNlcnZlU3BhY2VCb3R0b206ZnVuY3Rpb24oZSl7dmFyIGE9e3g6dC54LHk6dC55K3QuaC1lLHc6dC53LGg6ZX07cmV0dXJuIHQuaC09ZSxhfSxjaGFydFJlY3Q6ZnVuY3Rpb24oKXtyZXR1cm57eDp0LngseTp0Lnksdzp0LncsaDp0Lmh9fX07dGhpcy5keWdyYXBoXy5jYXNjYWRlRXZlbnRzXygibGF5b3V0IixlKSx0aGlzLmFyZWFfPXR9LHQucHJvdG90eXBlLnNldEFubm90YXRpb25zPWZ1bmN0aW9uKHQpe3RoaXMuYW5ub3RhdGlvbnM9W107Zm9yKHZhciBlPXRoaXMuZHlncmFwaF8uZ2V0T3B0aW9uKCJ4VmFsdWVQYXJzZXIiKXx8ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGk9e307aWYoIXRbYV0ueHZhbCYmdm9pZCAwPT09dFthXS54KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIkFubm90YXRpb25zIG11c3QgaGF2ZSBhbiAneCcgcHJvcGVydHkiKTtpZih0W2FdLmljb24mJighdFthXS5oYXNPd25Qcm9wZXJ0eSgid2lkdGgiKXx8IXRbYV0uaGFzT3duUHJvcGVydHkoImhlaWdodCIpKSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJNdXN0IHNldCB3aWR0aCBhbmQgaGVpZ2h0IHdoZW4gc2V0dGluZyBhbm5vdGF0aW9uLmljb24gcHJvcGVydHkiKTtEeWdyYXBoLnVwZGF0ZShpLHRbYV0pLGkueHZhbHx8KGkueHZhbD1lKGkueCkpLHRoaXMuYW5ub3RhdGlvbnMucHVzaChpKX19LHQucHJvdG90eXBlLnNldFhUaWNrcz1mdW5jdGlvbih0KXt0aGlzLnhUaWNrc189dH0sdC5wcm90b3R5cGUuc2V0WUF4ZXM9ZnVuY3Rpb24odCl7dGhpcy55QXhlc189dH0sdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt0aGlzLl94QXhpcz17fSx0aGlzLl9ldmFsdWF0ZUxpbWl0cygpLHRoaXMuX2V2YWx1YXRlTGluZUNoYXJ0cygpLHRoaXMuX2V2YWx1YXRlTGluZVRpY2tzKCksdGhpcy5fZXZhbHVhdGVBbm5vdGF0aW9ucygpfSx0LnByb3RvdHlwZS5fZXZhbHVhdGVMaW1pdHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmR5Z3JhcGhfLnhBeGlzUmFuZ2UoKTt0aGlzLl94QXhpcy5taW52YWw9dFswXSx0aGlzLl94QXhpcy5tYXh2YWw9dFsxXTt2YXIgZT10WzFdLXRbMF07dGhpcy5feEF4aXMuc2NhbGU9MCE9PWU/MS9lOjEsdGhpcy5keWdyYXBoXy5nZXRPcHRpb25Gb3JBeGlzKCJsb2dzY2FsZSIsIngiKSYmKHRoaXMuX3hBeGlzLnhsb2dyYW5nZT1EeWdyYXBoLmxvZzEwKHRoaXMuX3hBeGlzLm1heHZhbCktRHlncmFwaC5sb2cxMCh0aGlzLl94QXhpcy5taW52YWwpLHRoaXMuX3hBeGlzLnhsb2dzY2FsZT0wIT09dGhpcy5feEF4aXMueGxvZ3JhbmdlPzEvdGhpcy5feEF4aXMueGxvZ3JhbmdlOjEpO2Zvcih2YXIgYT0wO2E8dGhpcy55QXhlc18ubGVuZ3RoO2ErKyl7dmFyIGk9dGhpcy55QXhlc19bYV07aS5taW55dmFsPWkuY29tcHV0ZWRWYWx1ZVJhbmdlWzBdLGkubWF4eXZhbD1pLmNvbXB1dGVkVmFsdWVSYW5nZVsxXSxpLnlyYW5nZT1pLm1heHl2YWwtaS5taW55dmFsLGkueXNjYWxlPTAhPT1pLnlyYW5nZT8xL2kueXJhbmdlOjEsdGhpcy5keWdyYXBoXy5nZXRPcHRpb24oImxvZ3NjYWxlIikmJihpLnlsb2dyYW5nZT1EeWdyYXBoLmxvZzEwKGkubWF4eXZhbCktRHlncmFwaC5sb2cxMChpLm1pbnl2YWwpLGkueWxvZ3NjYWxlPTAhPT1pLnlsb2dyYW5nZT8xL2kueWxvZ3JhbmdlOjEsKCFpc0Zpbml0ZShpLnlsb2dyYW5nZSl8fGlzTmFOKGkueWxvZ3JhbmdlKSkmJmNvbnNvbGUuZXJyb3IoImF4aXMgIithKyIgb2YgZ3JhcGggYXQgIitpLmcrIiBjYW4ndCBiZSBkaXNwbGF5ZWQgaW4gbG9nIHNjYWxlIGZvciByYW5nZSBbIitpLm1pbnl2YWwrIiAtICIraS5tYXh5dmFsKyJdIikpfX0sdC5jYWxjWE5vcm1hbF89ZnVuY3Rpb24odCxlLGEpe3JldHVybiBhPyhEeWdyYXBoLmxvZzEwKHQpLUR5Z3JhcGgubG9nMTAoZS5taW52YWwpKSplLnhsb2dzY2FsZToodC1lLm1pbnZhbCkqZS5zY2FsZX0sdC5jYWxjWU5vcm1hbF89ZnVuY3Rpb24odCxlLGEpe2lmKGEpe3ZhciBpPTEtKER5Z3JhcGgubG9nMTAoZSktRHlncmFwaC5sb2cxMCh0Lm1pbnl2YWwpKSp0Lnlsb2dzY2FsZTtyZXR1cm4gaXNGaW5pdGUoaSk/aTowLzB9cmV0dXJuIDEtKGUtdC5taW55dmFsKSp0LnlzY2FsZX0sdC5wcm90b3R5cGUuX2V2YWx1YXRlTGluZUNoYXJ0cz1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmR5Z3JhcGhfLmdldE9wdGlvbigic3RhY2tlZEdyYXBoIiksYT10aGlzLmR5Z3JhcGhfLmdldE9wdGlvbkZvckF4aXMoImxvZ3NjYWxlIiwieCIpLGk9MDtpPHRoaXMucG9pbnRzLmxlbmd0aDtpKyspe2Zvcih2YXIgcj10aGlzLnBvaW50c1tpXSxuPXRoaXMuc2V0TmFtZXNbaV0sbz10aGlzLmR5Z3JhcGhfLmdldE9wdGlvbigiY29ubmVjdFNlcGFyYXRlZFBvaW50cyIsbikscz10aGlzLmR5Z3JhcGhfLmF4aXNQcm9wZXJ0aWVzRm9yU2VyaWVzKG4pLGw9dGhpcy5keWdyYXBoXy5hdHRyaWJ1dGVzXy5nZXRGb3JTZXJpZXMoImxvZ3NjYWxlIixuKSxoPTA7aDxyLmxlbmd0aDtoKyspe3ZhciBwPXJbaF07cC54PXQuY2FsY1hOb3JtYWxfKHAueHZhbCx0aGlzLl94QXhpcyxhKTt2YXIgZz1wLnl2YWw7ZSYmKHAueV9zdGFja2VkPXQuY2FsY1lOb3JtYWxfKHMscC55dmFsX3N0YWNrZWQsbCksbnVsbD09PWd8fGlzTmFOKGcpfHwoZz1wLnl2YWxfc3RhY2tlZCkpLG51bGw9PT1nJiYoZz0wLzAsb3x8KHAueXZhbD0wLzApKSxwLnk9dC5jYWxjWU5vcm1hbF8ocyxnLGwpfXRoaXMuZHlncmFwaF8uZGF0YUhhbmRsZXJfLm9uTGluZUV2YWx1YXRlZChyLHMsbCl9fSx0LnByb3RvdHlwZS5fZXZhbHVhdGVMaW5lVGlja3M9ZnVuY3Rpb24oKXt2YXIgdCxlLGEsaTtmb3IodGhpcy54dGlja3M9W10sdD0wO3Q8dGhpcy54VGlja3NfLmxlbmd0aDt0KyspZT10aGlzLnhUaWNrc19bdF0sYT1lLmxhYmVsLGk9dGhpcy5keWdyYXBoXy50b1BlcmNlbnRYQ29vcmQoZS52KSxpPj0wJiYxPmkmJnRoaXMueHRpY2tzLnB1c2goW2ksYV0pO2Zvcih0aGlzLnl0aWNrcz1bXSx0PTA7dDx0aGlzLnlBeGVzXy5sZW5ndGg7dCsrKWZvcih2YXIgcj10aGlzLnlBeGVzX1t0XSxuPTA7bjxyLnRpY2tzLmxlbmd0aDtuKyspZT1yLnRpY2tzW25dLGE9ZS5sYWJlbCxpPXRoaXMuZHlncmFwaF8udG9QZXJjZW50WUNvb3JkKGUudix0KSxpPjAmJjE+PWkmJnRoaXMueXRpY2tzLnB1c2goW3QsaSxhXSl9LHQucHJvdG90eXBlLl9ldmFsdWF0ZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHQsZT17fTtmb3IodD0wO3Q8dGhpcy5hbm5vdGF0aW9ucy5sZW5ndGg7dCsrKXt2YXIgYT10aGlzLmFubm90YXRpb25zW3RdO2VbYS54dmFsKyIsIithLnNlcmllc109YX1pZih0aGlzLmFubm90YXRlZF9wb2ludHM9W10sdGhpcy5hbm5vdGF0aW9ucyYmdGhpcy5hbm5vdGF0aW9ucy5sZW5ndGgpZm9yKHZhciBpPTA7aTx0aGlzLnBvaW50cy5sZW5ndGg7aSsrKXt2YXIgcj10aGlzLnBvaW50c1tpXTtmb3IodD0wO3Q8ci5sZW5ndGg7dCsrKXt2YXIgbj1yW3RdLG89bi54dmFsKyIsIituLm5hbWU7byBpbiBlJiYobi5hbm5vdGF0aW9uPWVbb10sdGhpcy5hbm5vdGF0ZWRfcG9pbnRzLnB1c2gobikpfX19LHQucHJvdG90eXBlLnJlbW92ZUFsbERhdGFzZXRzPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMucG9pbnRzLGRlbGV0ZSB0aGlzLnNldE5hbWVzLGRlbGV0ZSB0aGlzLnNldFBvaW50c0xlbmd0aHMsZGVsZXRlIHRoaXMuc2V0UG9pbnRzT2Zmc2V0cyx0aGlzLnBvaW50cz1bXSx0aGlzLnNldE5hbWVzPVtdLHRoaXMuc2V0UG9pbnRzTGVuZ3Rocz1bXSx0aGlzLnNldFBvaW50c09mZnNldHM9W119LHR9KCksRHlncmFwaENhbnZhc1JlbmRlcmVyPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsZSxhLGkpe2lmKHRoaXMuZHlncmFwaF89dCx0aGlzLmxheW91dD1pLHRoaXMuZWxlbWVudD1lLHRoaXMuZWxlbWVudENvbnRleHQ9YSx0aGlzLmhlaWdodD10LmhlaWdodF8sdGhpcy53aWR0aD10LndpZHRoXywhdGhpcy5pc0lFJiYhRHlncmFwaC5pc0NhbnZhc1N1cHBvcnRlZCh0aGlzLmVsZW1lbnQpKXRocm93IkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLiI7aWYodGhpcy5hcmVhPWkuZ2V0UGxvdEFyZWEoKSx0aGlzLmR5Z3JhcGhfLmlzVXNpbmdFeGNhbnZhc18pdGhpcy5fY3JlYXRlSUVDbGlwQXJlYSgpO2Vsc2UgaWYoIUR5Z3JhcGguaXNBbmRyb2lkKCkpe3ZhciByPXRoaXMuZHlncmFwaF8uY2FudmFzX2N0eF87ci5iZWdpblBhdGgoKSxyLnJlY3QodGhpcy5hcmVhLngsdGhpcy5hcmVhLnksdGhpcy5hcmVhLncsdGhpcy5hcmVhLmgpLHIuY2xpcCgpLHI9dGhpcy5keWdyYXBoXy5oaWRkZW5fY3R4XyxyLmJlZ2luUGF0aCgpLHIucmVjdCh0aGlzLmFyZWEueCx0aGlzLmFyZWEueSx0aGlzLmFyZWEudyx0aGlzLmFyZWEuaCksci5jbGlwKCl9fTtyZXR1cm4gdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLmlzSUUpdHJ5e3RoaXMuY2xlYXJEZWxheSYmKHRoaXMuY2xlYXJEZWxheS5jYW5jZWwoKSx0aGlzLmNsZWFyRGVsYXk9bnVsbCksdD10aGlzLmVsZW1lbnRDb250ZXh0fWNhdGNoKGUpe3JldHVybn10PXRoaXMuZWxlbWVudENvbnRleHQsdC5jbGVhclJlY3QoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQb2ludHMoKSx0aGlzLl9yZW5kZXJMaW5lQ2hhcnQoKX0sdC5wcm90b3R5cGUuX2NyZWF0ZUlFQ2xpcEFyZWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKDAhPT10LncmJjAhPT10Lmgpe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kuY2xhc3NOYW1lPWUsaS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9cixpLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5zdHlsZS5sZWZ0PXQueCsicHgiLGkuc3R5bGUudG9wPXQueSsicHgiLGkuc3R5bGUud2lkdGg9dC53KyJweCIsaS5zdHlsZS5oZWlnaHQ9dC5oKyJweCIsYS5hcHBlbmRDaGlsZChpKX19Zm9yKHZhciBlPSJkeWdyYXBoLWNsaXAtZGl2IixhPXRoaXMuZHlncmFwaF8uZ3JhcGhEaXYsaT1hLmNoaWxkTm9kZXMubGVuZ3RoLTE7aT49MDtpLS0pYS5jaGlsZE5vZGVzW2ldLmNsYXNzTmFtZT09ZSYmYS5yZW1vdmVDaGlsZChhLmNoaWxkTm9kZXNbaV0pO2Zvcih2YXIgcj1kb2N1bWVudC5iZ0NvbG9yLG49dGhpcy5keWdyYXBoXy5ncmFwaERpdjtuIT1kb2N1bWVudDspe3ZhciBvPW4uY3VycmVudFN0eWxlLmJhY2tncm91bmRDb2xvcjtpZihvJiYidHJhbnNwYXJlbnQiIT1vKXtyPW87YnJlYWt9bj1uLnBhcmVudE5vZGV9dmFyIHM9dGhpcy5hcmVhO3Qoe3g6MCx5OjAsdzpzLngsaDp0aGlzLmhlaWdodH0pLHQoe3g6cy54LHk6MCx3OnRoaXMud2lkdGgtcy54LGg6cy55fSksdCh7eDpzLngrcy53LHk6MCx3OnRoaXMud2lkdGgtcy54LXMudyxoOnRoaXMuaGVpZ2h0fSksdCh7eDpzLngseTpzLnkrcy5oLHc6dGhpcy53aWR0aC1zLngsaDp0aGlzLmhlaWdodC1zLmgtcy55fSl9LHQuX2dldEl0ZXJhdG9yUHJlZGljYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBlP3QuX3ByZWRpY2F0ZVRoYXRTa2lwc0VtcHR5UG9pbnRzOm51bGx9LHQuX3ByZWRpY2F0ZVRoYXRTa2lwc0VtcHR5UG9pbnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPT10W2VdLnl2YWx9LHQuX2RyYXdTdHlsZWRMaW5lPWZ1bmN0aW9uKGUsYSxpLHIsbixvLHMpe3ZhciBsPWUuZHlncmFwaCxoPWwuZ2V0Qm9vbGVhbk9wdGlvbigic3RlcFBsb3QiLGUuc2V0TmFtZSk7RHlncmFwaC5pc0FycmF5TGlrZShyKXx8KHI9bnVsbCk7dmFyIHA9bC5nZXRCb29sZWFuT3B0aW9uKCJkcmF3R2FwRWRnZVBvaW50cyIsZS5zZXROYW1lKSxnPWUucG9pbnRzLGQ9ZS5zZXROYW1lLHU9RHlncmFwaC5jcmVhdGVJdGVyYXRvcihnLDAsZy5sZW5ndGgsdC5fZ2V0SXRlcmF0b3JQcmVkaWNhdGUobC5nZXRCb29sZWFuT3B0aW9uKCJjb25uZWN0U2VwYXJhdGVkUG9pbnRzIixkKSkpLGM9ciYmci5sZW5ndGg+PTIseT1lLmRyYXdpbmdDb250ZXh0O3kuc2F2ZSgpLGMmJnkuaW5zdGFsbFBhdHRlcm4ocik7dmFyIF89dC5fZHJhd1NlcmllcyhlLHUsaSxzLG4scCxoLGEpO3QuX2RyYXdQb2ludHNPbkxpbmUoZSxfLG8sYSxzKSxjJiZ5LnVuaW5zdGFsbFBhdHRlcm4oKSx5LnJlc3RvcmUoKX0sdC5fZHJhd1Nlcmllcz1mdW5jdGlvbih0LGUsYSxpLHIsbixvLHMpe3ZhciBsLGgscD1udWxsLGc9bnVsbCxkPW51bGwsdT1bXSxjPSEwLHk9dC5kcmF3aW5nQ29udGV4dDt5LmJlZ2luUGF0aCgpLHkuc3Ryb2tlU3R5bGU9cyx5LmxpbmVXaWR0aD1hO2Zvcih2YXIgXz1lLmFycmF5Xyx2PWUuZW5kXyxmPWUucHJlZGljYXRlXyx4PWUuc3RhcnRfO3Y+eDt4Kyspe2lmKGg9X1t4XSxmKXtmb3IoO3Y+eCYmIWYoXyx4KTspeCsrO2lmKHg9PXYpYnJlYWs7aD1fW3hdfWlmKG51bGw9PT1oLmNhbnZhc3l8fGguY2FudmFzeSE9aC5jYW52YXN5KW8mJm51bGwhPT1wJiYoeS5tb3ZlVG8ocCxnKSx5LmxpbmVUbyhoLmNhbnZhc3gsZykpLHA9Zz1udWxsO2Vsc2V7aWYobD0hMSxufHwhcCl7ZS5uZXh0SWR4Xz14LGUubmV4dCgpLGQ9ZS5oYXNOZXh0P2UucGVlay5jYW52YXN5Om51bGw7dmFyIG09bnVsbD09PWR8fGQhPWQ7bD0hcCYmbSxuJiYoIWMmJiFwfHxlLmhhc05leHQmJm0pJiYobD0hMCl9bnVsbCE9PXA/YSYmKG8mJih5Lm1vdmVUbyhwLGcpLHkubGluZVRvKGguY2FudmFzeCxnKSkseS5saW5lVG8oaC5jYW52YXN4LGguY2FudmFzeSkpOnkubW92ZVRvKGguY2FudmFzeCxoLmNhbnZhc3kpLChyfHxsKSYmdS5wdXNoKFtoLmNhbnZhc3gsaC5jYW52YXN5LGguaWR4XSkscD1oLmNhbnZhc3gsZz1oLmNhbnZhc3l9Yz0hMX1yZXR1cm4geS5zdHJva2UoKSx1fSx0Ll9kcmF3UG9pbnRzT25MaW5lPWZ1bmN0aW9uKHQsZSxhLGkscil7Zm9yKHZhciBuPXQuZHJhd2luZ0NvbnRleHQsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcz1lW29dO24uc2F2ZSgpLGEuY2FsbCh0LmR5Z3JhcGgsdC5keWdyYXBoLHQuc2V0TmFtZSxuLHNbMF0sc1sxXSxpLHIsc1syXSksbi5yZXN0b3JlKCl9fSx0LnByb3RvdHlwZS5fdXBkYXRlUG9pbnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMubGF5b3V0LnBvaW50cyxlPXQubGVuZ3RoO2UtLTspZm9yKHZhciBhPXRbZV0saT1hLmxlbmd0aDtpLS07KXt2YXIgcj1hW2ldO3IuY2FudmFzeD10aGlzLmFyZWEudypyLngrdGhpcy5hcmVhLngsci5jYW52YXN5PXRoaXMuYXJlYS5oKnIueSt0aGlzLmFyZWEueX19LHQucHJvdG90eXBlLl9yZW5kZXJMaW5lQ2hhcnQ9ZnVuY3Rpb24odCxlKXt2YXIgYSxpLHI9ZXx8dGhpcy5lbGVtZW50Q29udGV4dCxuPXRoaXMubGF5b3V0LnBvaW50cyxvPXRoaXMubGF5b3V0LnNldE5hbWVzO3RoaXMuY29sb3JzPXRoaXMuZHlncmFwaF8uY29sb3JzTWFwXzt2YXIgcz10aGlzLmR5Z3JhcGhfLmdldE9wdGlvbigicGxvdHRlciIpLGw9cztEeWdyYXBoLmlzQXJyYXlMaWtlKGwpfHwobD1bbF0pO3ZhciBoPXt9O2ZvcihhPTA7YTxvLmxlbmd0aDthKyspe2k9b1thXTt2YXIgcD10aGlzLmR5Z3JhcGhfLmdldE9wdGlvbigicGxvdHRlciIsaSk7cCE9cyYmKGhbaV09cCl9Zm9yKGE9MDthPGwubGVuZ3RoO2ErKylmb3IodmFyIGc9bFthXSxkPWE9PWwubGVuZ3RoLTEsdT0wO3U8bi5sZW5ndGg7dSsrKWlmKGk9b1t1XSwhdHx8aT09dCl7dmFyIGM9blt1XSx5PWc7aWYoaSBpbiBoKXtpZighZCljb250aW51ZTt5PWhbaV19dmFyIF89dGhpcy5jb2xvcnNbaV0sdj10aGlzLmR5Z3JhcGhfLmdldE9wdGlvbigic3Ryb2tlV2lkdGgiLGkpO3Iuc2F2ZSgpLHIuc3Ryb2tlU3R5bGU9XyxyLmxpbmVXaWR0aD12LHkoe3BvaW50czpjLHNldE5hbWU6aSxkcmF3aW5nQ29udGV4dDpyLGNvbG9yOl8sc3Ryb2tlV2lkdGg6dixkeWdyYXBoOnRoaXMuZHlncmFwaF8sYXhpczp0aGlzLmR5Z3JhcGhfLmF4aXNQcm9wZXJ0aWVzRm9yU2VyaWVzKGkpLHBsb3RBcmVhOnRoaXMuYXJlYSxzZXJpZXNJbmRleDp1LHNlcmllc0NvdW50Om4ubGVuZ3RoLHNpbmdsZVNlcmllc05hbWU6dCxhbGxTZXJpZXNQb2ludHM6bn0pLHIucmVzdG9yZSgpfX0sdC5fUGxvdHRlcnM9e2xpbmVQbG90dGVyOmZ1bmN0aW9uKGUpe3QuX2xpbmVQbG90dGVyKGUpfSxmaWxsUGxvdHRlcjpmdW5jdGlvbihlKXt0Ll9maWxsUGxvdHRlcihlKX0sZXJyb3JQbG90dGVyOmZ1bmN0aW9uKGUpe3QuX2Vycm9yUGxvdHRlcihlKX19LHQuX2xpbmVQbG90dGVyPWZ1bmN0aW9uKGUpe3ZhciBhPWUuZHlncmFwaCxpPWUuc2V0TmFtZSxyPWUuc3Ryb2tlV2lkdGgsbj1hLmdldE51bWVyaWNPcHRpb24oInN0cm9rZUJvcmRlcldpZHRoIixpKSxvPWEuZ2V0T3B0aW9uKCJkcmF3UG9pbnRDYWxsYmFjayIsaSl8fER5Z3JhcGguQ2lyY2xlcy5ERUZBVUxULHM9YS5nZXRPcHRpb24oInN0cm9rZVBhdHRlcm4iLGkpLGw9YS5nZXRCb29sZWFuT3B0aW9uKCJkcmF3UG9pbnRzIixpKSxoPWEuZ2V0TnVtZXJpY09wdGlvbigicG9pbnRTaXplIixpKTtuJiZyJiZ0Ll9kcmF3U3R5bGVkTGluZShlLGEuZ2V0T3B0aW9uKCJzdHJva2VCb3JkZXJDb2xvciIsaSkscisyKm4scyxsLG8saCksdC5fZHJhd1N0eWxlZExpbmUoZSxlLmNvbG9yLHIscyxsLG8saCl9LHQuX2Vycm9yUGxvdHRlcj1mdW5jdGlvbihlKXt2YXIgYT1lLmR5Z3JhcGgsaT1lLnNldE5hbWUscj1hLmdldEJvb2xlYW5PcHRpb24oImVycm9yQmFycyIpfHxhLmdldEJvb2xlYW5PcHRpb24oImN1c3RvbUJhcnMiKTtpZihyKXt2YXIgbj1hLmdldEJvb2xlYW5PcHRpb24oImZpbGxHcmFwaCIsaSk7biYmY29uc29sZS53YXJuKCJDYW4ndCB1c2UgZmlsbEdyYXBoIG9wdGlvbiB3aXRoIGVycm9yIGJhcnMiKTt2YXIgbyxzPWUuZHJhd2luZ0NvbnRleHQsbD1lLmNvbG9yLGg9YS5nZXROdW1lcmljT3B0aW9uKCJmaWxsQWxwaGEiLGkpLHA9YS5nZXRCb29sZWFuT3B0aW9uKCJzdGVwUGxvdCIsaSksZz1lLnBvaW50cyxkPUR5Z3JhcGguY3JlYXRlSXRlcmF0b3IoZywwLGcubGVuZ3RoLHQuX2dldEl0ZXJhdG9yUHJlZGljYXRlKGEuZ2V0Qm9vbGVhbk9wdGlvbigiY29ubmVjdFNlcGFyYXRlZFBvaW50cyIsaSkpKSx1PTAvMCxjPTAvMCx5PVstMSwtMV0sXz1EeWdyYXBoLnRvUkdCXyhsKSx2PSJyZ2JhKCIrXy5yKyIsIitfLmcrIiwiK18uYisiLCIraCsiKSI7cy5maWxsU3R5bGU9dixzLmJlZ2luUGF0aCgpO2Zvcih2YXIgZj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXR8fHZvaWQgMD09PXR8fGlzTmFOKHQpfTtkLmhhc05leHQ7KXt2YXIgeD1kLm5leHQoKTshcCYmZih4LnkpfHxwJiYhaXNOYU4oYykmJmYoYyk/dT0wLzA6KG89W3gueV9ib3R0b20seC55X3RvcF0scCYmKGM9eC55KSxpc05hTihvWzBdKSYmKG9bMF09eC55KSxpc05hTihvWzFdKSYmKG9bMV09eC55KSxvWzBdPWUucGxvdEFyZWEuaCpvWzBdK2UucGxvdEFyZWEueSxvWzFdPWUucGxvdEFyZWEuaCpvWzFdK2UucGxvdEFyZWEueSxpc05hTih1KXx8KHA/KHMubW92ZVRvKHUseVswXSkscy5saW5lVG8oeC5jYW52YXN4LHlbMF0pLHMubGluZVRvKHguY2FudmFzeCx5WzFdKSk6KHMubW92ZVRvKHUseVswXSkscy5saW5lVG8oeC5jYW52YXN4LG9bMF0pLHMubGluZVRvKHguY2FudmFzeCxvWzFdKSkscy5saW5lVG8odSx5WzFdKSxzLmNsb3NlUGF0aCgpKSx5PW8sdT14LmNhbnZhc3gpfXMuZmlsbCgpfX0sdC5fZmFzdENhbnZhc1Byb3h5PWZ1bmN0aW9uKHQpe3ZhciBlPVtdLGE9bnVsbCxpPW51bGwscj0xLG49MixvPTAscz1mdW5jdGlvbih0KXtpZighKGUubGVuZ3RoPD0xKSl7Zm9yKHZhciBhPWUubGVuZ3RoLTE7YT4wO2EtLSl7dmFyIGk9ZVthXTtpZihpWzBdPT1uKXt2YXIgbz1lW2EtMV07b1sxXT09aVsxXSYmb1syXT09aVsyXSYmZS5zcGxpY2UoYSwxKX19Zm9yKHZhciBhPTA7YTxlLmxlbmd0aC0xOyl7dmFyIGk9ZVthXTtpWzBdPT1uJiZlW2ErMV1bMF09PW4/ZS5zcGxpY2UoYSwxKTphKyt9aWYoZS5sZW5ndGg+MiYmIXQpe3ZhciBzPTA7ZVswXVswXT09biYmcysrO2Zvcih2YXIgbD1udWxsLGg9bnVsbCxhPXM7YTxlLmxlbmd0aDthKyspe3ZhciBpPWVbYV07aWYoaVswXT09cilpZihudWxsPT09bCYmbnVsbD09PWgpbD1hLGg9YTtlbHNle3ZhciBwPWlbMl07cDxlW2xdWzJdP2w9YTpwPmVbaF1bMl0mJihoPWEpfX12YXIgZz1lW2xdLGQ9ZVtoXTtlLnNwbGljZShzLGUubGVuZ3RoLXMpLGg+bD8oZS5wdXNoKGcpLGUucHVzaChkKSk6bD5oPyhlLnB1c2goZCksZS5wdXNoKGcpKTplLnB1c2goZyl9fX0sbD1mdW5jdGlvbihhKXtzKGEpO2Zvcih2YXIgbD0wLGg9ZS5sZW5ndGg7aD5sO2wrKyl7dmFyIHA9ZVtsXTtwWzBdPT1yP3QubGluZVRvKHBbMV0scFsyXSk6cFswXT09biYmdC5tb3ZlVG8ocFsxXSxwWzJdKX1lLmxlbmd0aCYmKGk9ZVtlLmxlbmd0aC0xXVsxXSksbys9ZS5sZW5ndGgsZT1bXX0saD1mdW5jdGlvbih0LHIsbil7dmFyIG89TWF0aC5yb3VuZChyKTtpZihudWxsPT09YXx8byE9YSl7dmFyIHM9YS1pPjEsaD1vLWE+MSxwPXN8fGg7bChwKSxhPW99ZS5wdXNoKFt0LHIsbl0pfTtyZXR1cm57bW92ZVRvOmZ1bmN0aW9uKHQsZSl7aChuLHQsZSl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe2gocix0LGUpfSxzdHJva2U6ZnVuY3Rpb24oKXtsKCEwKSx0LnN0cm9rZSgpfSxmaWxsOmZ1bmN0aW9uKCl7bCghMCksdC5maWxsKCl9LGJlZ2luUGF0aDpmdW5jdGlvbigpe2woITApLHQuYmVnaW5QYXRoKCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe2woITApLHQuY2xvc2VQYXRoKCl9LF9jb3VudDpmdW5jdGlvbigpe3JldHVybiBvfX19LHQuX2ZpbGxQbG90dGVyPWZ1bmN0aW9uKGUpe2lmKCFlLnNpbmdsZVNlcmllc05hbWUmJjA9PT1lLnNlcmllc0luZGV4KXtmb3IodmFyIGE9ZS5keWdyYXBoLGk9YS5nZXRMYWJlbHMoKS5zbGljZSgxKSxyPWkubGVuZ3RoO3I+PTA7ci0tKWEudmlzaWJpbGl0eSgpW3JdfHxpLnNwbGljZShyLDEpO3ZhciBuPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxpLmxlbmd0aDt0KyspaWYoYS5nZXRCb29sZWFuT3B0aW9uKCJmaWxsR3JhcGgiLGlbdF0pKXJldHVybiEwO3JldHVybiExfSgpO2lmKG4pZm9yKHZhciBvLHMsbD1lLnBsb3RBcmVhLGg9ZS5hbGxTZXJpZXNQb2ludHMscD1oLmxlbmd0aCxnPWEuZ2V0TnVtZXJpY09wdGlvbigiZmlsbEFscGhhIiksZD1hLmdldEJvb2xlYW5PcHRpb24oInN0YWNrZWRHcmFwaCIpLHU9YS5nZXRDb2xvcnMoKSxjPXt9LHk9ZnVuY3Rpb24odCxlLGEsaSl7aWYodC5saW5lVG8oZSxhKSxkKWZvcih2YXIgcj1pLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj1pW3JdO3QubGluZVRvKG5bMF0sblsxXSl9fSxfPXAtMTtfPj0wO18tLSl7dmFyIHY9ZS5kcmF3aW5nQ29udGV4dCxmPWlbX107aWYoYS5nZXRCb29sZWFuT3B0aW9uKCJmaWxsR3JhcGgiLGYpKXt2YXIgeD1hLmdldEJvb2xlYW5PcHRpb24oInN0ZXBQbG90IixmKSxtPXVbX10sRD1hLmF4aXNQcm9wZXJ0aWVzRm9yU2VyaWVzKGYpLHc9MStELm1pbnl2YWwqRC55c2NhbGU7MD53P3c9MDp3PjEmJih3PTEpLHc9bC5oKncrbC55O3ZhciBBLGI9aFtfXSxUPUR5Z3JhcGguY3JlYXRlSXRlcmF0b3IoYiwwLGIubGVuZ3RoLHQuX2dldEl0ZXJhdG9yUHJlZGljYXRlKGEuZ2V0Qm9vbGVhbk9wdGlvbigiY29ubmVjdFNlcGFyYXRlZFBvaW50cyIsZikpKSxFPTAvMCxDPVstMSwtMV0sTD1EeWdyYXBoLnRvUkdCXyhtKSxQPSJyZ2JhKCIrTC5yKyIsIitMLmcrIiwiK0wuYisiLCIrZysiKSI7di5maWxsU3R5bGU9UCx2LmJlZ2luUGF0aCgpO3ZhciBTLE89ITA7KGIubGVuZ3RoPjIqYS53aWR0aF98fER5Z3JhcGguRk9SQ0VfRkFTVF9QUk9YWSkmJih2PXQuX2Zhc3RDYW52YXNQcm94eSh2KSk7Zm9yKHZhciBNLFI9W107VC5oYXNOZXh0OylpZihNPVQubmV4dCgpLER5Z3JhcGguaXNPSyhNLnkpfHx4KXtpZihkKXtpZighTyYmUz09TS54dmFsKWNvbnRpbnVlO089ITEsUz1NLnh2YWwsbz1jW00uY2FudmFzeF07dmFyIEY7Rj12b2lkIDA9PT1vP3c6cz9vWzBdOm8sQT1bTS5jYW52YXN5LEZdLHg/LTE9PT1DWzBdP2NbTS5jYW52YXN4XT1bTS5jYW52YXN5LHddOmNbTS5jYW52YXN4XT1bTS5jYW52YXN5LENbMF1dOmNbTS5jYW52YXN4XT1NLmNhbnZhc3l9ZWxzZSBBPWlzTmFOKE0uY2FudmFzeSkmJng/W2wueStsLmgsd106W00uY2FudmFzeSx3XTtpc05hTihFKT8odi5tb3ZlVG8oTS5jYW52YXN4LEFbMV0pLHYubGluZVRvKE0uY2FudmFzeCxBWzBdKSk6KHg/KHYubGluZVRvKE0uY2FudmFzeCxDWzBdKSx2LmxpbmVUbyhNLmNhbnZhc3gsQVswXSkpOnYubGluZVRvKE0uY2FudmFzeCxBWzBdKSxkJiYoUi5wdXNoKFtFLENbMV1dKSxSLnB1c2gocyYmbz9bTS5jYW52YXN4LG9bMV1dOltNLmNhbnZhc3gsQVsxXV0pKSksQz1BLEU9TS5jYW52YXN4fWVsc2UgeSh2LEUsQ1sxXSxSKSxSPVtdLEU9MC8wLG51bGw9PT1NLnlfc3RhY2tlZHx8aXNOYU4oTS55X3N0YWNrZWQpfHwoY1tNLmNhbnZhc3hdPWwuaCpNLnlfc3RhY2tlZCtsLnkpO3M9eCxBJiZNJiYoeSh2LE0uY2FudmFzeCxBWzFdLFIpLFI9W10pLHYuZmlsbCgpfX19fSx0fSgpLER5Z3JhcGg9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24odCxlLGEsaSl7dGhpcy5pc19pbml0aWFsX2RyYXdfPSEwLHRoaXMucmVhZHlGbnNfPVtdLHZvaWQgMCE9PWk/KGNvbnNvbGUud2FybigiVXNpbmcgZGVwcmVjYXRlZCBmb3VyLWFyZ3VtZW50IGR5Z3JhcGggY29uc3RydWN0b3IiKSx0aGlzLl9fb2xkX2luaXRfXyh0LGUsYSxpKSk6dGhpcy5fX2luaXRfXyh0LGUsYSl9O3JldHVybiB0Lk5BTUU9IkR5Z3JhcGgiLHQuVkVSU0lPTj0iMS4xLjEiLHQuX19yZXByX189ZnVuY3Rpb24oKXtyZXR1cm4iWyIrdC5OQU1FKyIgIit0LlZFUlNJT04rIl0ifSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQuX19yZXByX18oKX0sdC5ERUZBVUxUX1JPTExfUEVSSU9EPTEsdC5ERUZBVUxUX1dJRFRIPTQ4MCx0LkRFRkFVTFRfSEVJR0hUPTMyMCx0LkFOSU1BVElPTl9TVEVQUz0xMix0LkFOSU1BVElPTl9EVVJBVElPTj0yMDAsdC5LTUJfTEFCRUxTPVsiSyIsIk0iLCJCIiwiVCIsIlEiXSx0LktNRzJfQklHX0xBQkVMUz1bImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0sdC5LTUcyX1NNQUxMX0xBQkVMUz1bIm0iLCJ1IiwibiIsInAiLCJmIiwiYSIsInoiLCJ5Il0sdC5udW1iZXJWYWx1ZUZvcm1hdHRlcj1mdW5jdGlvbihlLGEpe3ZhciBpPWEoInNpZ0ZpZ3MiKTtpZihudWxsIT09aSlyZXR1cm4gdC5mbG9hdEZvcm1hdChlLGkpO3ZhciByLG49YSgiZGlnaXRzQWZ0ZXJEZWNpbWFsIiksbz1hKCJtYXhOdW1iZXJXaWR0aCIpLHM9YSgibGFiZWxzS01CIiksbD1hKCJsYWJlbHNLTUcyIik7aWYocj0wIT09ZSYmKE1hdGguYWJzKGUpPj1NYXRoLnBvdygxMCxvKXx8TWF0aC5hYnMoZSk8TWF0aC5wb3coMTAsLW4pKT9lLnRvRXhwb25lbnRpYWwobik6IiIrdC5yb3VuZF8oZSxuKSxzfHxsKXt2YXIgaCxwPVtdLGc9W107cyYmKGg9MWUzLHA9dC5LTUJfTEFCRUxTKSxsJiYocyYmY29uc29sZS53YXJuKCJTZXR0aW5nIGJvdGggbGFiZWxzS01CIGFuZCBsYWJlbHNLTUcyLiBQaWNrIG9uZSEiKSxoPTEwMjQscD10LktNRzJfQklHX0xBQkVMUyxnPXQuS01HMl9TTUFMTF9MQUJFTFMpO2Zvcih2YXIgZD1NYXRoLmFicyhlKSx1PXQucG93KGgscC5sZW5ndGgpLGM9cC5sZW5ndGgtMTtjPj0wO2MtLSx1Lz1oKWlmKGQ+PXUpe3I9dC5yb3VuZF8oZS91LG4pK3BbY107YnJlYWt9aWYobCl7dmFyIHk9U3RyaW5nKGUudG9FeHBvbmVudGlhbCgpKS5zcGxpdCgiZS0iKTsyPT09eS5sZW5ndGgmJnlbMV0+PTMmJnlbMV08PTI0JiYocj15WzFdJTM+MD90LnJvdW5kXyh5WzBdL3QucG93KDEwLHlbMV0lMyksbik6TnVtYmVyKHlbMF0pLnRvRml4ZWQoMikscis9Z1tNYXRoLmZsb29yKHlbMV0vMyktMV0pfX1yZXR1cm4gcn0sdC5udW1iZXJBeGlzTGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24oZSxhLGkpe3JldHVybiB0Lm51bWJlclZhbHVlRm9ybWF0dGVyLmNhbGwodGhpcyxlLGkpfSx0LlNIT1JUX01PTlRIX05BTUVTXz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLHQuZGF0ZUF4aXNMYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihlLGEsaSl7dmFyIHI9aSgibGFiZWxzVVRDIiksbj1yP3QuRGF0ZUFjY2Vzc29yc1VUQzp0LkRhdGVBY2Nlc3NvcnNMb2NhbCxvPW4uZ2V0RnVsbFllYXIoZSkscz1uLmdldE1vbnRoKGUpLGw9bi5nZXREYXRlKGUpLGg9bi5nZXRIb3VycyhlKSxwPW4uZ2V0TWludXRlcyhlKSxnPW4uZ2V0U2Vjb25kcyhlKSxkPW4uZ2V0U2Vjb25kcyhlKTtpZihhPj10LkRFQ0FEQUwpcmV0dXJuIiIrbztpZihhPj10Lk1PTlRITFkpcmV0dXJuIHQuU0hPUlRfTU9OVEhfTkFNRVNfW3NdKyImIzE2MDsiK287dmFyIHU9MzYwMCpoKzYwKnArZysuMDAxKmQ7cmV0dXJuIDA9PT11fHxhPj10LkRBSUxZP3QuemVyb3BhZChsKSsiJiMxNjA7Iit0LlNIT1JUX01PTlRIX05BTUVTX1tzXTp0Lmhtc1N0cmluZ18oaCxwLGcpfSx0LmRhdGVBeGlzRm9ybWF0dGVyPXQuZGF0ZUF4aXNMYWJlbEZvcm1hdHRlcix0LmRhdGVWYWx1ZUZvcm1hdHRlcj1mdW5jdGlvbihlLGEpe3JldHVybiB0LmRhdGVTdHJpbmdfKGUsYSgibGFiZWxzVVRDIikpfSx0LlBsb3R0ZXJzPUR5Z3JhcGhDYW52YXNSZW5kZXJlci5fUGxvdHRlcnMsdC5ERUZBVUxUX0FUVFJTPXtoaWdobGlnaHRDaXJjbGVTaXplOjMsaGlnaGxpZ2h0U2VyaWVzT3B0czpudWxsLGhpZ2hsaWdodFNlcmllc0JhY2tncm91bmRBbHBoYTouNSxsYWJlbHNEaXZXaWR0aDoyNTAsbGFiZWxzRGl2U3R5bGVzOnt9LGxhYmVsc1NlcGFyYXRlTGluZXM6ITEsbGFiZWxzU2hvd1plcm9WYWx1ZXM6ITAsbGFiZWxzS01COiExLGxhYmVsc0tNRzI6ITEsc2hvd0xhYmVsc09uSGlnaGxpZ2h0OiEwLGRpZ2l0c0FmdGVyRGVjaW1hbDoyLG1heE51bWJlcldpZHRoOjYsc2lnRmlnczpudWxsLHN0cm9rZVdpZHRoOjEsc3Ryb2tlQm9yZGVyV2lkdGg6MCxzdHJva2VCb3JkZXJDb2xvcjoid2hpdGUiLGF4aXNUaWNrU2l6ZTozLGF4aXNMYWJlbEZvbnRTaXplOjE0LHJpZ2h0R2FwOjUsc2hvd1JvbGxlcjohMSx4VmFsdWVQYXJzZXI6dC5kYXRlUGFyc2VyLGRlbGltaXRlcjoiLCIsc2lnbWE6MixlcnJvckJhcnM6ITEsZnJhY3Rpb25zOiExLHdpbHNvbkludGVydmFsOiEwLGN1c3RvbUJhcnM6ITEsZmlsbEdyYXBoOiExLGZpbGxBbHBoYTouMTUsY29ubmVjdFNlcGFyYXRlZFBvaW50czohMSxzdGFja2VkR3JhcGg6ITEsc3RhY2tlZEdyYXBoTmFORmlsbDoiYWxsIixoaWRlT3ZlcmxheU9uTW91c2VPdXQ6ITAsbGVnZW5kOiJvbm1vdXNlb3ZlciIsc3RlcFBsb3Q6ITEsYXZvaWRNaW5aZXJvOiExLHhSYW5nZVBhZDowLHlSYW5nZVBhZDpudWxsLGRyYXdBeGVzQXRaZXJvOiExLHRpdGxlSGVpZ2h0OjI4LHhMYWJlbEhlaWdodDoxOCx5TGFiZWxXaWR0aDoxOCxkcmF3WEF4aXM6ITAsZHJhd1lBeGlzOiEwLGF4aXNMaW5lQ29sb3I6ImJsYWNrIixheGlzTGluZVdpZHRoOi4zLGdyaWRMaW5lV2lkdGg6LjMsYXhpc0xhYmVsQ29sb3I6ImJsYWNrIixheGlzTGFiZWxXaWR0aDo1MCxkcmF3WUdyaWQ6ITAsZHJhd1hHcmlkOiEwLGdyaWRMaW5lQ29sb3I6InJnYigxMjgsMTI4LDEyOCkiLGludGVyYWN0aW9uTW9kZWw6bnVsbCxhbmltYXRlZFpvb21zOiExLHNob3dSYW5nZVNlbGVjdG9yOiExLHJhbmdlU2VsZWN0b3JIZWlnaHQ6NDAscmFuZ2VTZWxlY3RvclBsb3RTdHJva2VDb2xvcjoiIzgwOEZBQiIscmFuZ2VTZWxlY3RvclBsb3RGaWxsQ29sb3I6IiNBN0IxQzQiLHNob3dJblJhbmdlU2VsZWN0b3I6bnVsbCxwbG90dGVyOlt0LlBsb3R0ZXJzLmZpbGxQbG90dGVyLHQuUGxvdHRlcnMuZXJyb3JQbG90dGVyLHQuUGxvdHRlcnMubGluZVBsb3R0ZXJdLHBsdWdpbnM6W10sYXhlczp7eDp7cGl4ZWxzUGVyTGFiZWw6NzAsYXhpc0xhYmVsV2lkdGg6NjAsYXhpc0xhYmVsRm9ybWF0dGVyOnQuZGF0ZUF4aXNMYWJlbEZvcm1hdHRlcix2YWx1ZUZvcm1hdHRlcjp0LmRhdGVWYWx1ZUZvcm1hdHRlcixkcmF3R3JpZDohMCxkcmF3QXhpczohMCxpbmRlcGVuZGVudFRpY2tzOiEwLHRpY2tlcjpudWxsfSx5OntheGlzTGFiZWxXaWR0aDo1MCxwaXhlbHNQZXJMYWJlbDozMCx2YWx1ZUZvcm1hdHRlcjp0Lm51bWJlclZhbHVlRm9ybWF0dGVyLGF4aXNMYWJlbEZvcm1hdHRlcjp0Lm51bWJlckF4aXNMYWJlbEZvcm1hdHRlcixkcmF3R3JpZDohMCxkcmF3QXhpczohMCxpbmRlcGVuZGVudFRpY2tzOiEwLHRpY2tlcjpudWxsfSx5Mjp7YXhpc0xhYmVsV2lkdGg6NTAscGl4ZWxzUGVyTGFiZWw6MzAsdmFsdWVGb3JtYXR0ZXI6dC5udW1iZXJWYWx1ZUZvcm1hdHRlcixheGlzTGFiZWxGb3JtYXR0ZXI6dC5udW1iZXJBeGlzTGFiZWxGb3JtYXR0ZXIsZHJhd0F4aXM6ITAsZHJhd0dyaWQ6ITEsaW5kZXBlbmRlbnRUaWNrczohMSx0aWNrZXI6bnVsbH19fSx0LkhPUklaT05UQUw9MSx0LlZFUlRJQ0FMPTIsdC5QTFVHSU5TPVtdLHQuYWRkZWRBbm5vdGF0aW9uQ1NTPSExLHQucHJvdG90eXBlLl9fb2xkX2luaXRfXz1mdW5jdGlvbihlLGEsaSxyKXtpZihudWxsIT09aSl7Zm9yKHZhciBuPVsiRGF0ZSJdLG89MDtvPGkubGVuZ3RoO28rKyluLnB1c2goaVtvXSk7dC51cGRhdGUocix7bGFiZWxzOm59KX10aGlzLl9faW5pdF9fKGUsYSxyKX0sdC5wcm90b3R5cGUuX19pbml0X189ZnVuY3Rpb24oZSxhLGkpe2lmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhd2luZG93Lm9wZXJhJiYidW5kZWZpbmVkIiE9dHlwZW9mIEdfdm1sQ2FudmFzTWFuYWdlciYmImNvbXBsZXRlIiE9ZG9jdW1lbnQucmVhZHlTdGF0ZSl7dmFyIHI9dGhpcztyZXR1cm4gdm9pZCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5fX2luaXRfXyhlLGEsaSl9LDEwMCl9aWYoKG51bGw9PT1pfHx2b2lkIDA9PT1pKSYmKGk9e30pLGk9dC5tYXBMZWdhY3lPcHRpb25zXyhpKSwic3RyaW5nIj09dHlwZW9mIGUmJihlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpKSwhZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJDb25zdHJ1Y3RpbmcgZHlncmFwaCB3aXRoIGEgbm9uLWV4aXN0ZW50IGRpdiEiKTt0aGlzLmlzVXNpbmdFeGNhbnZhc189InVuZGVmaW5lZCIhPXR5cGVvZiBHX3ZtbENhbnZhc01hbmFnZXIsdGhpcy5tYWluZGl2Xz1lLHRoaXMuZmlsZV89YSx0aGlzLnJvbGxQZXJpb2RfPWkucm9sbFBlcmlvZHx8dC5ERUZBVUxUX1JPTExfUEVSSU9ELHRoaXMucHJldmlvdXNWZXJ0aWNhbFhfPS0xLHRoaXMuZnJhY3Rpb25zXz1pLmZyYWN0aW9uc3x8ITEsdGhpcy5kYXRlV2luZG93Xz1pLmRhdGVXaW5kb3d8fG51bGwsdGhpcy5hbm5vdGF0aW9uc189W10sdGhpcy56b29tZWRfeF89ITEsdGhpcy56b29tZWRfeV89ITEsZS5pbm5lckhUTUw9IiIsIiI9PT1lLnN0eWxlLndpZHRoJiZpLndpZHRoJiYoZS5zdHlsZS53aWR0aD1pLndpZHRoKyJweCIpLCIiPT09ZS5zdHlsZS5oZWlnaHQmJmkuaGVpZ2h0JiYoZS5zdHlsZS5oZWlnaHQ9aS5oZWlnaHQrInB4IiksIiI9PT1lLnN0eWxlLmhlaWdodCYmMD09PWUuY2xpZW50SGVpZ2h0JiYoZS5zdHlsZS5oZWlnaHQ9dC5ERUZBVUxUX0hFSUdIVCsicHgiLCIiPT09ZS5zdHlsZS53aWR0aCYmKGUuc3R5bGUud2lkdGg9dC5ERUZBVUxUX1dJRFRIKyJweCIpKSx0aGlzLndpZHRoXz1lLmNsaWVudFdpZHRofHxpLndpZHRofHwwLHRoaXMuaGVpZ2h0Xz1lLmNsaWVudEhlaWdodHx8aS5oZWlnaHR8fDAsaS5zdGFja2VkR3JhcGgmJihpLmZpbGxHcmFwaD0hMCksdGhpcy51c2VyX2F0dHJzXz17fSx0LnVwZGF0ZSh0aGlzLnVzZXJfYXR0cnNfLGkpLHRoaXMuYXR0cnNfPXt9LHQudXBkYXRlRGVlcCh0aGlzLmF0dHJzXyx0LkRFRkFVTFRfQVRUUlMpLHRoaXMuYm91bmRhcnlJZHNfPVtdLHRoaXMuc2V0SW5kZXhCeU5hbWVfPXt9LHRoaXMuZGF0YXNldEluZGV4Xz1bXSx0aGlzLnJlZ2lzdGVyZWRFdmVudHNfPVtdLHRoaXMuZXZlbnRMaXN0ZW5lcnNfPXt9LHRoaXMuYXR0cmlidXRlc189bmV3IER5Z3JhcGhPcHRpb25zKHRoaXMpLHRoaXMuY3JlYXRlSW50ZXJmYWNlXygpLHRoaXMucGx1Z2luc189W107Zm9yKHZhciBuPXQuUExVR0lOUy5jb25jYXQodGhpcy5nZXRPcHRpb24oInBsdWdpbnMiKSksbz0wO288bi5sZW5ndGg7bysrKXt2YXIgcyxsPW5bb107cz0idW5kZWZpbmVkIiE9dHlwZW9mIGwuYWN0aXZhdGU/bDpuZXcgbDt2YXIgaD17cGx1Z2luOnMsZXZlbnRzOnt9LG9wdGlvbnM6e30scGx1Z2luT3B0aW9uczp7fX0scD1zLmFjdGl2YXRlKHRoaXMpO2Zvcih2YXIgZyBpbiBwKXAuaGFzT3duUHJvcGVydHkoZykmJihoLmV2ZW50c1tnXT1wW2ddKTt0aGlzLnBsdWdpbnNfLnB1c2goaCl9Zm9yKHZhciBvPTA7bzx0aGlzLnBsdWdpbnNfLmxlbmd0aDtvKyspe3ZhciBkPXRoaXMucGx1Z2luc19bb107Zm9yKHZhciBnIGluIGQuZXZlbnRzKWlmKGQuZXZlbnRzLmhhc093blByb3BlcnR5KGcpKXt2YXIgdT1kLmV2ZW50c1tnXSxjPVtkLnBsdWdpbix1XTtnIGluIHRoaXMuZXZlbnRMaXN0ZW5lcnNfP3RoaXMuZXZlbnRMaXN0ZW5lcnNfW2ddLnB1c2goYyk6dGhpcy5ldmVudExpc3RlbmVyc19bZ109W2NdfX10aGlzLmNyZWF0ZURyYWdJbnRlcmZhY2VfKCksdGhpcy5zdGFydF8oKX0sdC5wcm90b3R5cGUuY2FzY2FkZUV2ZW50c189ZnVuY3Rpb24oZSxhKXtpZighKGUgaW4gdGhpcy5ldmVudExpc3RlbmVyc18pKXJldHVybiExO3ZhciBpPXtkeWdyYXBoOnRoaXMsY2FuY2VsYWJsZTohMSxkZWZhdWx0UHJldmVudGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7aWYoIWkuY2FuY2VsYWJsZSl0aHJvdyJDYW5ub3QgY2FsbCBwcmV2ZW50RGVmYXVsdCBvbiBub24tY2FuY2VsYWJsZSBldmVudC4iO2kuZGVmYXVsdFByZXZlbnRlZD0hMH0scHJvcGFnYXRpb25TdG9wcGVkOiExLHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe2kucHJvcGFnYXRpb25TdG9wcGVkPSEwfX07dC51cGRhdGUoaSxhKTt2YXIgcj10aGlzLmV2ZW50TGlzdGVuZXJzX1tlXTtpZihyKWZvcih2YXIgbj1yLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgbz1yW25dWzBdLHM9cltuXVsxXTtpZihzLmNhbGwobyxpKSxpLnByb3BhZ2F0aW9uU3RvcHBlZClicmVha31yZXR1cm4gaS5kZWZhdWx0UHJldmVudGVkfSx0LnByb3RvdHlwZS5nZXRQbHVnaW5JbnN0YW5jZV89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0aGlzLnBsdWdpbnNfLmxlbmd0aDtlKyspe3ZhciBhPXRoaXMucGx1Z2luc19bZV07aWYoYS5wbHVnaW4gaW5zdGFuY2VvZiB0KXJldHVybiBhLnBsdWdpbn1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuaXNab29tZWQ9ZnVuY3Rpb24odCl7aWYobnVsbD09PXR8fHZvaWQgMD09PXQpcmV0dXJuIHRoaXMuem9vbWVkX3hffHx0aGlzLnpvb21lZF95XztpZigieCI9PT10KXJldHVybiB0aGlzLnpvb21lZF94XztpZigieSI9PT10KXJldHVybiB0aGlzLnpvb21lZF95Xzt0aHJvdyJheGlzIHBhcmFtZXRlciBpcyBbIit0KyJdIG11c3QgYmUgbnVsbCwgJ3gnIG9yICd5Jy4ifSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWFpbmRpdl8sZT10JiZ0LmlkP3QuaWQ6dDtyZXR1cm4iW0R5Z3JhcGggIitlKyJdIn0sdC5wcm90b3R5cGUuYXR0cl89ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT90aGlzLmF0dHJpYnV0ZXNfLmdldEZvclNlcmllcyh0LGUpOnRoaXMuYXR0cmlidXRlc18uZ2V0KHQpfSx0LnByb3RvdHlwZS5nZXRPcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hdHRyXyh0LGUpfSx0LnByb3RvdHlwZS5nZXROdW1lcmljT3B0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKHQsZSl9LHQucHJvdG90eXBlLmdldFN0cmluZ09wdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldE9wdGlvbih0LGUpfSx0LnByb3RvdHlwZS5nZXRCb29sZWFuT3B0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKHQsZSl9LHQucHJvdG90eXBlLmdldEZ1bmN0aW9uT3B0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKHQsZSl9LHQucHJvdG90eXBlLmdldE9wdGlvbkZvckF4aXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzXy5nZXRGb3JBeGlzKHQsZSl9LHQucHJvdG90eXBlLm9wdGlvbnNWaWV3Rm9yQXhpc189ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGk9ZS51c2VyX2F0dHJzXy5heGVzO3JldHVybiBpJiZpW3RdJiZpW3RdLmhhc093blByb3BlcnR5KGEpP2lbdF1bYV06IngiPT09dCYmImxvZ3NjYWxlIj09PWE/ITE6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnVzZXJfYXR0cnNfW2FdP2UudXNlcl9hdHRyc19bYV06KGk9ZS5hdHRyc18uYXhlcyxpJiZpW3RdJiZpW3RdLmhhc093blByb3BlcnR5KGEpP2lbdF1bYV06InkiPT10JiZlLmF4ZXNfWzBdLmhhc093blByb3BlcnR5KGEpP2UuYXhlc19bMF1bYV06InkyIj09dCYmZS5heGVzX1sxXS5oYXNPd25Qcm9wZXJ0eShhKT9lLmF4ZXNfWzFdW2FdOmUuYXR0cl8oYSkpfX0sdC5wcm90b3R5cGUucm9sbFBlcmlvZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvbGxQZXJpb2RffSx0LnByb3RvdHlwZS54QXhpc1JhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0ZVdpbmRvd18/dGhpcy5kYXRlV2luZG93Xzp0aGlzLnhBeGlzRXh0cmVtZXMoKX0sdC5wcm90b3R5cGUueEF4aXNFeHRyZW1lcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0TnVtZXJpY09wdGlvbigieFJhbmdlUGFkIikvdGhpcy5wbG90dGVyXy5hcmVhLnc7aWYoMD09PXRoaXMubnVtUm93cygpKXJldHVyblswLXQsMSt0XTt2YXIgZT10aGlzLnJhd0RhdGFfWzBdWzBdLGE9dGhpcy5yYXdEYXRhX1t0aGlzLnJhd0RhdGFfLmxlbmd0aC0xXVswXTtpZih0KXt2YXIgaT1hLWU7ZS09aSp0LGErPWkqdH1yZXR1cm5bZSxhXX0sdC5wcm90b3R5cGUueUF4aXNSYW5nZT1mdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIj09dHlwZW9mIHQmJih0PTApLDA+dHx8dD49dGhpcy5heGVzXy5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGU9dGhpcy5heGVzX1t0XTtyZXR1cm5bZS5jb21wdXRlZFZhbHVlUmFuZ2VbMF0sZS5jb21wdXRlZFZhbHVlUmFuZ2VbMV1dfSx0LnByb3RvdHlwZS55QXhpc1Jhbmdlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTx0aGlzLmF4ZXNfLmxlbmd0aDtlKyspdC5wdXNoKHRoaXMueUF4aXNSYW5nZShlKSk7cmV0dXJuIHR9LHQucHJvdG90eXBlLnRvRG9tQ29vcmRzPWZ1bmN0aW9uKHQsZSxhKXtyZXR1cm5bdGhpcy50b0RvbVhDb29yZCh0KSx0aGlzLnRvRG9tWUNvb3JkKGUsYSldfSx0LnByb3RvdHlwZS50b0RvbVhDb29yZD1mdW5jdGlvbih0KXtpZihudWxsPT09dClyZXR1cm4gbnVsbDt2YXIgZT10aGlzLnBsb3R0ZXJfLmFyZWEsYT10aGlzLnhBeGlzUmFuZ2UoKTtyZXR1cm4gZS54Kyh0LWFbMF0pLyhhWzFdLWFbMF0pKmUud30sdC5wcm90b3R5cGUudG9Eb21ZQ29vcmQ9ZnVuY3Rpb24odCxlKXt2YXIgYT10aGlzLnRvUGVyY2VudFlDb29yZCh0LGUpO2lmKG51bGw9PT1hKXJldHVybiBudWxsO3ZhciBpPXRoaXMucGxvdHRlcl8uYXJlYTtyZXR1cm4gaS55K2EqaS5ofSx0LnByb3RvdHlwZS50b0RhdGFDb29yZHM9ZnVuY3Rpb24odCxlLGEpe3JldHVyblt0aGlzLnRvRGF0YVhDb29yZCh0KSx0aGlzLnRvRGF0YVlDb29yZChlLGEpXX0sdC5wcm90b3R5cGUudG9EYXRhWENvb3JkPWZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBhPXRoaXMucGxvdHRlcl8uYXJlYSxpPXRoaXMueEF4aXNSYW5nZSgpO2lmKHRoaXMuYXR0cmlidXRlc18uZ2V0Rm9yQXhpcygibG9nc2NhbGUiLCJ4Iikpe3ZhciByPShlLWEueCkvYS53LG49dC5sb2cxMChpWzBdKSxvPXQubG9nMTAoaVsxXSkscz1uK3IqKG8tbiksbD1NYXRoLnBvdyh0LkxPR19TQ0FMRSxzKTtyZXR1cm4gbH1yZXR1cm4gaVswXSsoZS1hLngpL2EudyooaVsxXS1pWzBdKX0sdC5wcm90b3R5cGUudG9EYXRhWUNvb3JkPWZ1bmN0aW9uKGUsYSl7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7dmFyIGk9dGhpcy5wbG90dGVyXy5hcmVhLHI9dGhpcy55QXhpc1JhbmdlKGEpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgYSYmKGE9MCksdGhpcy5hdHRyaWJ1dGVzXy5nZXRGb3JBeGlzKCJsb2dzY2FsZSIsYSkpe3ZhciBuPShlLWkueSkvaS5oLG89dC5sb2cxMChyWzBdKSxzPXQubG9nMTAoclsxXSksbD1zLW4qKHMtbyksaD1NYXRoLnBvdyh0LkxPR19TQ0FMRSxsKTtyZXR1cm4gaH1yZXR1cm4gclswXSsoaS55K2kuaC1lKS9pLmgqKHJbMV0tclswXSl9LHQucHJvdG90eXBlLnRvUGVyY2VudFlDb29yZD1mdW5jdGlvbihlLGEpe2lmKG51bGw9PT1lKXJldHVybiBudWxsOyJ1bmRlZmluZWQiPT10eXBlb2YgYSYmKGE9MCk7dmFyIGkscj10aGlzLnlBeGlzUmFuZ2UoYSksbj10aGlzLmF0dHJpYnV0ZXNfLmdldEZvckF4aXMoImxvZ3NjYWxlIixhKTtpZihuKXt2YXIgbz10LmxvZzEwKHJbMF0pLHM9dC5sb2cxMChyWzFdKTtpPShzLXQubG9nMTAoZSkpLyhzLW8pfWVsc2UgaT0oclsxXS1lKS8oclsxXS1yWzBdKTtyZXR1cm4gaX0sdC5wcm90b3R5cGUudG9QZXJjZW50WENvb3JkPWZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBhLGk9dGhpcy54QXhpc1JhbmdlKCkscj10aGlzLmF0dHJpYnV0ZXNfLmdldEZvckF4aXMoImxvZ3NjYWxlIiwieCIpO2lmKHI9PT0hMCl7dmFyIG49dC5sb2cxMChpWzBdKSxvPXQubG9nMTAoaVsxXSk7YT0odC5sb2cxMChlKS1uKS8oby1uKX1lbHNlIGE9KGUtaVswXSkvKGlbMV0taVswXSk7cmV0dXJuIGF9LHQucHJvdG90eXBlLm51bUNvbHVtbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYXdEYXRhXz90aGlzLnJhd0RhdGFfWzBdP3RoaXMucmF3RGF0YV9bMF0ubGVuZ3RoOnRoaXMuYXR0cl8oImxhYmVscyIpLmxlbmd0aDowfSx0LnByb3RvdHlwZS5udW1Sb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmF3RGF0YV8/dGhpcy5yYXdEYXRhXy5sZW5ndGg6MH0sdC5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD50fHx0PnRoaXMucmF3RGF0YV8ubGVuZ3RoP251bGw6MD5lfHxlPnRoaXMucmF3RGF0YV9bdF0ubGVuZ3RoP251bGw6dGhpcy5yYXdEYXRhX1t0XVtlXX0sdC5wcm90b3R5cGUuY3JlYXRlSW50ZXJmYWNlXz1mdW5jdGlvbigpe3ZhciBlPXRoaXMubWFpbmRpdl87dGhpcy5ncmFwaERpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmdyYXBoRGl2LnN0eWxlLnRleHRBbGlnbj0ibGVmdCIsdGhpcy5ncmFwaERpdi5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGUuYXBwZW5kQ2hpbGQodGhpcy5ncmFwaERpdiksdGhpcy5jYW52YXNfPXQuY3JlYXRlQ2FudmFzKCksdGhpcy5jYW52YXNfLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5oaWRkZW5fPXRoaXMuY3JlYXRlUGxvdEtpdENhbnZhc18odGhpcy5jYW52YXNfKSx0aGlzLmNhbnZhc19jdHhfPXQuZ2V0Q29udGV4dCh0aGlzLmNhbnZhc18pLHRoaXMuaGlkZGVuX2N0eF89dC5nZXRDb250ZXh0KHRoaXMuaGlkZGVuXyksdGhpcy5yZXNpemVFbGVtZW50c18oKSx0aGlzLmdyYXBoRGl2LmFwcGVuZENoaWxkKHRoaXMuaGlkZGVuXyksdGhpcy5ncmFwaERpdi5hcHBlbmRDaGlsZCh0aGlzLmNhbnZhc18pLHRoaXMubW91c2VFdmVudEVsZW1lbnRfPXRoaXMuY3JlYXRlTW91c2VFdmVudEVsZW1lbnRfKCksdGhpcy5sYXlvdXRfPW5ldyBEeWdyYXBoTGF5b3V0KHRoaXMpO3ZhciBhPXRoaXM7dGhpcy5tb3VzZU1vdmVIYW5kbGVyXz1mdW5jdGlvbih0KXthLm1vdXNlTW92ZV8odCl9LHRoaXMubW91c2VPdXRIYW5kbGVyXz1mdW5jdGlvbihlKXt2YXIgaT1lLnRhcmdldHx8ZS5mcm9tRWxlbWVudCxyPWUucmVsYXRlZFRhcmdldHx8ZS50b0VsZW1lbnQ7dC5pc05vZGVDb250YWluZWRCeShpLGEuZ3JhcGhEaXYpJiYhdC5pc05vZGVDb250YWluZWRCeShyLGEuZ3JhcGhEaXYpJiZhLm1vdXNlT3V0XyhlKX0sdGhpcy5hZGRBbmRUcmFja0V2ZW50KHdpbmRvdywibW91c2VvdXQiLHRoaXMubW91c2VPdXRIYW5kbGVyXyksdGhpcy5hZGRBbmRUcmFja0V2ZW50KHRoaXMubW91c2VFdmVudEVsZW1lbnRfLCJtb3VzZW1vdmUiLHRoaXMubW91c2VNb3ZlSGFuZGxlcl8pLHRoaXMucmVzaXplSGFuZGxlcl98fCh0aGlzLnJlc2l6ZUhhbmRsZXJfPWZ1bmN0aW9uKHQpe2EucmVzaXplKCl9LHRoaXMuYWRkQW5kVHJhY2tFdmVudCh3aW5kb3csInJlc2l6ZSIsdGhpcy5yZXNpemVIYW5kbGVyXykpfSx0LnByb3RvdHlwZS5yZXNpemVFbGVtZW50c189ZnVuY3Rpb24oKXt0aGlzLmdyYXBoRGl2LnN0eWxlLndpZHRoPXRoaXMud2lkdGhfKyJweCIsdGhpcy5ncmFwaERpdi5zdHlsZS5oZWlnaHQ9dGhpcy5oZWlnaHRfKyJweCI7dmFyIGU9dC5nZXRDb250ZXh0UGl4ZWxSYXRpbyh0aGlzLmNhbnZhc19jdHhfKTt0aGlzLmNhbnZhc18ud2lkdGg9dGhpcy53aWR0aF8qZSx0aGlzLmNhbnZhc18uaGVpZ2h0PXRoaXMuaGVpZ2h0XyplLHRoaXMuY2FudmFzXy5zdHlsZS53aWR0aD10aGlzLndpZHRoXysicHgiLHRoaXMuY2FudmFzXy5zdHlsZS5oZWlnaHQ9dGhpcy5oZWlnaHRfKyJweCIsMSE9PWUmJnRoaXMuY2FudmFzX2N0eF8uc2NhbGUoZSxlKTt2YXIgYT10LmdldENvbnRleHRQaXhlbFJhdGlvKHRoaXMuaGlkZGVuX2N0eF8pO3RoaXMuaGlkZGVuXy53aWR0aD10aGlzLndpZHRoXyphLHRoaXMuaGlkZGVuXy5oZWlnaHQ9dGhpcy5oZWlnaHRfKmEsdGhpcy5oaWRkZW5fLnN0eWxlLndpZHRoPXRoaXMud2lkdGhfKyJweCIsdGhpcy5oaWRkZW5fLnN0eWxlLmhlaWdodD10aGlzLmhlaWdodF8rInB4IiwxIT09YSYmdGhpcy5oaWRkZW5fY3R4Xy5zY2FsZShhLGEpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jYW52YXNfY3R4Xy5yZXN0b3JlKCksdGhpcy5oaWRkZW5fY3R4Xy5yZXN0b3JlKCk7Zm9yKHZhciBlPXRoaXMucGx1Z2luc18ubGVuZ3RoLTE7ZT49MDtlLS0pe3ZhciBhPXRoaXMucGx1Z2luc18ucG9wKCk7YS5wbHVnaW4uZGVzdHJveSYmYS5wbHVnaW4uZGVzdHJveSgpfXZhciBpPWZ1bmN0aW9uKHQpe2Zvcig7dC5oYXNDaGlsZE5vZGVzKCk7KWkodC5maXJzdENoaWxkKSx0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCl9O3RoaXMucmVtb3ZlVHJhY2tlZEV2ZW50c18oKSx0LnJlbW92ZUV2ZW50KHdpbmRvdywibW91c2VvdXQiLHRoaXMubW91c2VPdXRIYW5kbGVyXyksdC5yZW1vdmVFdmVudCh0aGlzLm1vdXNlRXZlbnRFbGVtZW50XywibW91c2Vtb3ZlIix0aGlzLm1vdXNlTW92ZUhhbmRsZXJfKSx0LnJlbW92ZUV2ZW50KHdpbmRvdywicmVzaXplIix0aGlzLnJlc2l6ZUhhbmRsZXJfKSx0aGlzLnJlc2l6ZUhhbmRsZXJfPW51bGwsaSh0aGlzLm1haW5kaXZfKTt2YXIgcj1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCkib2JqZWN0Ij09dHlwZW9mIHRbZV0mJih0W2VdPW51bGwpfTtyKHRoaXMubGF5b3V0Xykscih0aGlzLnBsb3R0ZXJfKSxyKHRoaXMpfSx0LnByb3RvdHlwZS5jcmVhdGVQbG90S2l0Q2FudmFzXz1mdW5jdGlvbihlKXt2YXIgYT10LmNyZWF0ZUNhbnZhcygpO3JldHVybiBhLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS50b3A9ZS5zdHlsZS50b3AsYS5zdHlsZS5sZWZ0PWUuc3R5bGUubGVmdCxhLndpZHRoPXRoaXMud2lkdGhfLGEuaGVpZ2h0PXRoaXMuaGVpZ2h0XyxhLnN0eWxlLndpZHRoPXRoaXMud2lkdGhfKyJweCIsYS5zdHlsZS5oZWlnaHQ9dGhpcy5oZWlnaHRfKyJweCIsYX0sdC5wcm90b3R5cGUuY3JlYXRlTW91c2VFdmVudEVsZW1lbnRfPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1VzaW5nRXhjYW52YXNfKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUuYmFja2dyb3VuZENvbG9yPSJ3aGl0ZSIsdC5zdHlsZS5maWx0ZXI9ImFscGhhKG9wYWNpdHk9MCkiLHQuc3R5bGUud2lkdGg9dGhpcy53aWR0aF8rInB4Iix0LnN0eWxlLmhlaWdodD10aGlzLmhlaWdodF8rInB4Iix0aGlzLmdyYXBoRGl2LmFwcGVuZENoaWxkKHQpLHR9cmV0dXJuIHRoaXMuY2FudmFzX30sdC5wcm90b3R5cGUuc2V0Q29sb3JzXz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0TGFiZWxzKCksYT1lLmxlbmd0aC0xO3RoaXMuY29sb3JzXz1bXSx0aGlzLmNvbG9yc01hcF89e307Zm9yKHZhciBpPXRoaXMuZ2V0TnVtZXJpY09wdGlvbigiY29sb3JTYXR1cmF0aW9uIil8fDEscj10aGlzLmdldE51bWVyaWNPcHRpb24oImNvbG9yVmFsdWUiKXx8LjUsbj1NYXRoLmNlaWwoYS8yKSxvPXRoaXMuZ2V0T3B0aW9uKCJjb2xvcnMiKSxzPXRoaXMudmlzaWJpbGl0eSgpLGw9MDthPmw7bCsrKWlmKHNbbF0pewp2YXIgaD1lW2wrMV0scD10aGlzLmF0dHJpYnV0ZXNfLmdldEZvclNlcmllcygiY29sb3IiLGgpO2lmKCFwKWlmKG8pcD1vW2wlby5sZW5ndGhdO2Vsc2V7dmFyIGc9bCUyP24rKGwrMSkvMjpNYXRoLmNlaWwoKGwrMSkvMiksZD0xKmcvKDErYSk7cD10LmhzdlRvUkdCKGQsaSxyKX10aGlzLmNvbG9yc18ucHVzaChwKSx0aGlzLmNvbG9yc01hcF9baF09cH19LHQucHJvdG90eXBlLmdldENvbG9ycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbG9yc199LHQucHJvdG90eXBlLmdldFByb3BlcnRpZXNGb3JTZXJpZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xLGE9dGhpcy5nZXRMYWJlbHMoKSxpPTE7aTxhLmxlbmd0aDtpKyspaWYoYVtpXT09dCl7ZT1pO2JyZWFrfXJldHVybi0xPT1lP251bGw6e25hbWU6dCxjb2x1bW46ZSx2aXNpYmxlOnRoaXMudmlzaWJpbGl0eSgpW2UtMV0sY29sb3I6dGhpcy5jb2xvcnNNYXBfW3RdLGF4aXM6MSt0aGlzLmF0dHJpYnV0ZXNfLmF4aXNGb3JTZXJpZXModCl9fSx0LnByb3RvdHlwZS5jcmVhdGVSb2xsSW50ZXJmYWNlXz1mdW5jdGlvbigpe3RoaXMucm9sbGVyX3x8KHRoaXMucm9sbGVyXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHRoaXMucm9sbGVyXy50eXBlPSJ0ZXh0Iix0aGlzLnJvbGxlcl8uc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ncmFwaERpdi5hcHBlbmRDaGlsZCh0aGlzLnJvbGxlcl8pKTt2YXIgdD10aGlzLmdldEJvb2xlYW5PcHRpb24oInNob3dSb2xsZXIiKT8iYmxvY2siOiJub25lIixlPXRoaXMucGxvdHRlcl8uYXJlYSxhPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHpJbmRleDoxMCx0b3A6ZS55K2UuaC0yNSsicHgiLGxlZnQ6ZS54KzErInB4IixkaXNwbGF5OnR9O3RoaXMucm9sbGVyXy5zaXplPSIyIix0aGlzLnJvbGxlcl8udmFsdWU9dGhpcy5yb2xsUGVyaW9kXztmb3IodmFyIGkgaW4gYSlhLmhhc093blByb3BlcnR5KGkpJiYodGhpcy5yb2xsZXJfLnN0eWxlW2ldPWFbaV0pO3ZhciByPXRoaXM7dGhpcy5yb2xsZXJfLm9uY2hhbmdlPWZ1bmN0aW9uKCl7ci5hZGp1c3RSb2xsKHIucm9sbGVyXy52YWx1ZSl9fSx0LnByb3RvdHlwZS5jcmVhdGVEcmFnSW50ZXJmYWNlXz1mdW5jdGlvbigpe3ZhciBlPXtpc1pvb21pbmc6ITEsaXNQYW5uaW5nOiExLGlzMkRQYW46ITEsZHJhZ1N0YXJ0WDpudWxsLGRyYWdTdGFydFk6bnVsbCxkcmFnRW5kWDpudWxsLGRyYWdFbmRZOm51bGwsZHJhZ0RpcmVjdGlvbjpudWxsLHByZXZFbmRYOm51bGwscHJldkVuZFk6bnVsbCxwcmV2RHJhZ0RpcmVjdGlvbjpudWxsLGNhbmNlbE5leHREYmxjbGljazohMSxpbml0aWFsTGVmdG1vc3REYXRlOm51bGwseFVuaXRzUGVyUGl4ZWw6bnVsbCxkYXRlUmFuZ2U6bnVsbCxweDowLHB5OjAsYm91bmRlZERhdGVzOm51bGwsYm91bmRlZFZhbHVlczpudWxsLHRhcnA6bmV3IHQuSUZyYW1lVGFycCxpbml0aWFsaXplTW91c2VEb3duOmZ1bmN0aW9uKGUsYSxpKXtlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTooZS5yZXR1cm5WYWx1ZT0hMSxlLmNhbmNlbEJ1YmJsZT0hMCk7dmFyIHI9dC5maW5kUG9zKGEuY2FudmFzXyk7aS5weD1yLngsaS5weT1yLnksaS5kcmFnU3RhcnRYPXQuZHJhZ0dldFhfKGUsaSksaS5kcmFnU3RhcnRZPXQuZHJhZ0dldFlfKGUsaSksaS5jYW5jZWxOZXh0RGJsY2xpY2s9ITEsaS50YXJwLmNvdmVyKCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCh0LmlzWm9vbWluZ3x8dC5pc1Bhbm5pbmcpJiYodC5pc1pvb21pbmc9ITEsdC5kcmFnU3RhcnRYPW51bGwsdC5kcmFnU3RhcnRZPW51bGwpLHQuaXNQYW5uaW5nKXt0LmlzUGFubmluZz0hMSx0LmRyYWdnaW5nRGF0ZT1udWxsLHQuZGF0ZVJhbmdlPW51bGw7Zm9yKHZhciBlPTA7ZTxpLmF4ZXNfLmxlbmd0aDtlKyspZGVsZXRlIGkuYXhlc19bZV0uZHJhZ2dpbmdWYWx1ZSxkZWxldGUgaS5heGVzX1tlXS5kcmFnVmFsdWVSYW5nZX10LnRhcnAudW5jb3ZlcigpfX0sYT10aGlzLmdldE9wdGlvbigiaW50ZXJhY3Rpb25Nb2RlbCIpLGk9dGhpcyxyPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihhKXt0KGEsaSxlKX19O2Zvcih2YXIgbiBpbiBhKWEuaGFzT3duUHJvcGVydHkobikmJnRoaXMuYWRkQW5kVHJhY2tFdmVudCh0aGlzLm1vdXNlRXZlbnRFbGVtZW50XyxuLHIoYVtuXSkpO2lmKCFhLndpbGxEZXN0cm95Q29udGV4dE15c2VsZil7dmFyIG89ZnVuY3Rpb24odCl7ZS5kZXN0cm95KCl9O3RoaXMuYWRkQW5kVHJhY2tFdmVudChkb2N1bWVudCwibW91c2V1cCIsbyl9fSx0LnByb3RvdHlwZS5kcmF3Wm9vbVJlY3RfPWZ1bmN0aW9uKGUsYSxpLHIsbixvLHMsbCl7dmFyIGg9dGhpcy5jYW52YXNfY3R4XztvPT10LkhPUklaT05UQUw/aC5jbGVhclJlY3QoTWF0aC5taW4oYSxzKSx0aGlzLmxheW91dF8uZ2V0UGxvdEFyZWEoKS55LE1hdGguYWJzKGEtcyksdGhpcy5sYXlvdXRfLmdldFBsb3RBcmVhKCkuaCk6bz09dC5WRVJUSUNBTCYmaC5jbGVhclJlY3QodGhpcy5sYXlvdXRfLmdldFBsb3RBcmVhKCkueCxNYXRoLm1pbihyLGwpLHRoaXMubGF5b3V0Xy5nZXRQbG90QXJlYSgpLncsTWF0aC5hYnMoci1sKSksZT09dC5IT1JJWk9OVEFMP2kmJmEmJihoLmZpbGxTdHlsZT0icmdiYSgxMjgsMTI4LDEyOCwwLjMzKSIsaC5maWxsUmVjdChNYXRoLm1pbihhLGkpLHRoaXMubGF5b3V0Xy5nZXRQbG90QXJlYSgpLnksTWF0aC5hYnMoaS1hKSx0aGlzLmxheW91dF8uZ2V0UGxvdEFyZWEoKS5oKSk6ZT09dC5WRVJUSUNBTCYmbiYmciYmKGguZmlsbFN0eWxlPSJyZ2JhKDEyOCwxMjgsMTI4LDAuMzMpIixoLmZpbGxSZWN0KHRoaXMubGF5b3V0Xy5nZXRQbG90QXJlYSgpLngsTWF0aC5taW4ocixuKSx0aGlzLmxheW91dF8uZ2V0UGxvdEFyZWEoKS53LE1hdGguYWJzKG4tcikpKSx0aGlzLmlzVXNpbmdFeGNhbnZhc18mJih0aGlzLmN1cnJlbnRab29tUmVjdEFyZ3NfPVtlLGEsaSxyLG4sMCwwLDBdKX0sdC5wcm90b3R5cGUuY2xlYXJab29tUmVjdF89ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRab29tUmVjdEFyZ3NfPW51bGwsdGhpcy5jYW52YXNfY3R4Xy5jbGVhclJlY3QoMCwwLHRoaXMud2lkdGhfLHRoaXMuaGVpZ2h0Xyl9LHQucHJvdG90eXBlLmRvWm9vbVhfPWZ1bmN0aW9uKHQsZSl7dGhpcy5jdXJyZW50Wm9vbVJlY3RBcmdzXz1udWxsO3ZhciBhPXRoaXMudG9EYXRhWENvb3JkKHQpLGk9dGhpcy50b0RhdGFYQ29vcmQoZSk7dGhpcy5kb1pvb21YRGF0ZXNfKGEsaSl9LHQucHJvdG90eXBlLmRvWm9vbVhEYXRlc189ZnVuY3Rpb24odCxlKXt2YXIgYT10aGlzLnhBeGlzUmFuZ2UoKSxpPVt0LGVdO3RoaXMuem9vbWVkX3hfPSEwO3ZhciByPXRoaXM7dGhpcy5kb0FuaW1hdGVkWm9vbShhLGksbnVsbCxudWxsLGZ1bmN0aW9uKCl7ci5nZXRGdW5jdGlvbk9wdGlvbigiem9vbUNhbGxiYWNrIikmJnIuZ2V0RnVuY3Rpb25PcHRpb24oInpvb21DYWxsYmFjayIpLmNhbGwocix0LGUsci55QXhpc1JhbmdlcygpKX0pfSx0LnByb3RvdHlwZS5kb1pvb21ZXz1mdW5jdGlvbih0LGUpe3RoaXMuY3VycmVudFpvb21SZWN0QXJnc189bnVsbDtmb3IodmFyIGE9dGhpcy55QXhpc1JhbmdlcygpLGk9W10scj0wO3I8dGhpcy5heGVzXy5sZW5ndGg7cisrKXt2YXIgbj10aGlzLnRvRGF0YVlDb29yZCh0LHIpLG89dGhpcy50b0RhdGFZQ29vcmQoZSxyKTtpLnB1c2goW28sbl0pfXRoaXMuem9vbWVkX3lfPSEwO3ZhciBzPXRoaXM7dGhpcy5kb0FuaW1hdGVkWm9vbShudWxsLG51bGwsYSxpLGZ1bmN0aW9uKCl7aWYocy5nZXRGdW5jdGlvbk9wdGlvbigiem9vbUNhbGxiYWNrIikpe3ZhciB0PXMueEF4aXNSYW5nZSgpO3MuZ2V0RnVuY3Rpb25PcHRpb24oInpvb21DYWxsYmFjayIpLmNhbGwocyx0WzBdLHRbMV0scy55QXhpc1JhbmdlcygpKX19KX0sdC56b29tQW5pbWF0aW9uRnVuY3Rpb249ZnVuY3Rpb24odCxlKXt2YXIgYT0xLjU7cmV0dXJuKDEtTWF0aC5wb3coYSwtdCkpLygxLU1hdGgucG93KGEsLWUpKX0sdC5wcm90b3R5cGUucmVzZXRab29tPWZ1bmN0aW9uKCl7dmFyIHQ9ITEsZT0hMSxhPSExO251bGwhPT10aGlzLmRhdGVXaW5kb3dfJiYodD0hMCxlPSEwKTtmb3IodmFyIGk9MDtpPHRoaXMuYXhlc18ubGVuZ3RoO2krKykidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMuYXhlc19baV0udmFsdWVXaW5kb3cmJm51bGwhPT10aGlzLmF4ZXNfW2ldLnZhbHVlV2luZG93JiYodD0hMCxhPSEwKTtpZih0aGlzLmNsZWFyU2VsZWN0aW9uKCksdCl7dGhpcy56b29tZWRfeF89ITEsdGhpcy56b29tZWRfeV89ITE7dmFyIHI9dGhpcy5yYXdEYXRhX1swXVswXSxuPXRoaXMucmF3RGF0YV9bdGhpcy5yYXdEYXRhXy5sZW5ndGgtMV1bMF07aWYoIXRoaXMuZ2V0Qm9vbGVhbk9wdGlvbigiYW5pbWF0ZWRab29tcyIpKXtmb3IodGhpcy5kYXRlV2luZG93Xz1udWxsLGk9MDtpPHRoaXMuYXhlc18ubGVuZ3RoO2krKyludWxsIT09dGhpcy5heGVzX1tpXS52YWx1ZVdpbmRvdyYmZGVsZXRlIHRoaXMuYXhlc19baV0udmFsdWVXaW5kb3c7cmV0dXJuIHRoaXMuZHJhd0dyYXBoXygpLHZvaWQodGhpcy5nZXRGdW5jdGlvbk9wdGlvbigiem9vbUNhbGxiYWNrIikmJnRoaXMuZ2V0RnVuY3Rpb25PcHRpb24oInpvb21DYWxsYmFjayIpLmNhbGwodGhpcyxyLG4sdGhpcy55QXhpc1JhbmdlcygpKSl9dmFyIG89bnVsbCxzPW51bGwsbD1udWxsLGg9bnVsbDtpZihlJiYobz10aGlzLnhBeGlzUmFuZ2UoKSxzPVtyLG5dKSxhKXtsPXRoaXMueUF4aXNSYW5nZXMoKTt2YXIgcD10aGlzLmdhdGhlckRhdGFzZXRzXyh0aGlzLnJvbGxlZFNlcmllc18sbnVsbCksZz1wLmV4dHJlbWVzO2Zvcih0aGlzLmNvbXB1dGVZQXhpc1Jhbmdlc18oZyksaD1bXSxpPTA7aTx0aGlzLmF4ZXNfLmxlbmd0aDtpKyspe3ZhciBkPXRoaXMuYXhlc19baV07aC5wdXNoKG51bGwhPT1kLnZhbHVlUmFuZ2UmJnZvaWQgMCE9PWQudmFsdWVSYW5nZT9kLnZhbHVlUmFuZ2U6ZC5leHRyZW1lUmFuZ2UpfX12YXIgdT10aGlzO3RoaXMuZG9BbmltYXRlZFpvb20obyxzLGwsaCxmdW5jdGlvbigpe3UuZGF0ZVdpbmRvd189bnVsbDtmb3IodmFyIHQ9MDt0PHUuYXhlc18ubGVuZ3RoO3QrKyludWxsIT09dS5heGVzX1t0XS52YWx1ZVdpbmRvdyYmZGVsZXRlIHUuYXhlc19bdF0udmFsdWVXaW5kb3c7dS5nZXRGdW5jdGlvbk9wdGlvbigiem9vbUNhbGxiYWNrIikmJnUuZ2V0RnVuY3Rpb25PcHRpb24oInpvb21DYWxsYmFjayIpLmNhbGwodSxyLG4sdS55QXhpc1JhbmdlcygpKX0pfX0sdC5wcm90b3R5cGUuZG9BbmltYXRlZFpvb209ZnVuY3Rpb24oZSxhLGkscixuKXt2YXIgbyxzLGw9dGhpcy5nZXRCb29sZWFuT3B0aW9uKCJhbmltYXRlZFpvb21zIik/dC5BTklNQVRJT05fU1RFUFM6MSxoPVtdLHA9W107aWYobnVsbCE9PWUmJm51bGwhPT1hKWZvcihvPTE7bD49bztvKyspcz10Lnpvb21BbmltYXRpb25GdW5jdGlvbihvLGwpLGhbby0xXT1bZVswXSooMS1zKStzKmFbMF0sZVsxXSooMS1zKStzKmFbMV1dO2lmKG51bGwhPT1pJiZudWxsIT09cilmb3Iobz0xO2w+PW87bysrKXtzPXQuem9vbUFuaW1hdGlvbkZ1bmN0aW9uKG8sbCk7Zm9yKHZhciBnPVtdLGQ9MDtkPHRoaXMuYXhlc18ubGVuZ3RoO2QrKylnLnB1c2goW2lbZF1bMF0qKDEtcykrcypyW2RdWzBdLGlbZF1bMV0qKDEtcykrcypyW2RdWzFdXSk7cFtvLTFdPWd9dmFyIHU9dGhpczt0LnJlcGVhdEFuZENsZWFudXAoZnVuY3Rpb24odCl7aWYocC5sZW5ndGgpZm9yKHZhciBlPTA7ZTx1LmF4ZXNfLmxlbmd0aDtlKyspe3ZhciBhPXBbdF1bZV07dS5heGVzX1tlXS52YWx1ZVdpbmRvdz1bYVswXSxhWzFdXX1oLmxlbmd0aCYmKHUuZGF0ZVdpbmRvd189aFt0XSksdS5kcmF3R3JhcGhfKCl9LGwsdC5BTklNQVRJT05fRFVSQVRJT04vbCxuKX0sdC5wcm90b3R5cGUuZ2V0QXJlYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBsb3R0ZXJfLmFyZWF9LHQucHJvdG90eXBlLmV2ZW50VG9Eb21Db29yZHM9ZnVuY3Rpb24oZSl7aWYoZS5vZmZzZXRYJiZlLm9mZnNldFkpcmV0dXJuW2Uub2Zmc2V0WCxlLm9mZnNldFldO3ZhciBhPXQuZmluZFBvcyh0aGlzLm1vdXNlRXZlbnRFbGVtZW50XyksaT10LnBhZ2VYKGUpLWEueCxyPXQucGFnZVkoZSktYS55O3JldHVybltpLHJdfSx0LnByb3RvdHlwZS5maW5kQ2xvc2VzdFJvdz1mdW5jdGlvbihlKXtmb3IodmFyIGE9MS8wLGk9LTEscj10aGlzLmxheW91dF8ucG9pbnRzLG49MDtuPHIubGVuZ3RoO24rKylmb3IodmFyIG89cltuXSxzPW8ubGVuZ3RoLGw9MDtzPmw7bCsrKXt2YXIgaD1vW2xdO2lmKHQuaXNWYWxpZFBvaW50KGgsITApKXt2YXIgcD1NYXRoLmFicyhoLmNhbnZhc3gtZSk7YT5wJiYoYT1wLGk9aC5pZHgpfX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuZmluZENsb3Nlc3RQb2ludD1mdW5jdGlvbihlLGEpe2Zvcih2YXIgaSxyLG4sbyxzLGwsaCxwPTEvMCxnPXRoaXMubGF5b3V0Xy5wb2ludHMubGVuZ3RoLTE7Zz49MDstLWcpZm9yKHZhciBkPXRoaXMubGF5b3V0Xy5wb2ludHNbZ10sdT0wO3U8ZC5sZW5ndGg7Kyt1KW89ZFt1XSx0LmlzVmFsaWRQb2ludChvKSYmKHI9by5jYW52YXN4LWUsbj1vLmNhbnZhc3ktYSxpPXIqcituKm4scD5pJiYocD1pLHM9byxsPWcsaD1vLmlkeCkpO3ZhciBjPXRoaXMubGF5b3V0Xy5zZXROYW1lc1tsXTtyZXR1cm57cm93Omgsc2VyaWVzTmFtZTpjLHBvaW50OnN9fSx0LnByb3RvdHlwZS5maW5kU3RhY2tlZFBvaW50PWZ1bmN0aW9uKGUsYSl7Zm9yKHZhciBpLHIsbj10aGlzLmZpbmRDbG9zZXN0Um93KGUpLG89MDtvPHRoaXMubGF5b3V0Xy5wb2ludHMubGVuZ3RoOysrbyl7dmFyIHM9dGhpcy5nZXRMZWZ0Qm91bmRhcnlfKG8pLGw9bi1zLGg9dGhpcy5sYXlvdXRfLnBvaW50c1tvXTtpZighKGw+PWgubGVuZ3RoKSl7dmFyIHA9aFtsXTtpZih0LmlzVmFsaWRQb2ludChwKSl7dmFyIGc9cC5jYW52YXN5O2lmKGU+cC5jYW52YXN4JiZsKzE8aC5sZW5ndGgpe3ZhciBkPWhbbCsxXTtpZih0LmlzVmFsaWRQb2ludChkKSl7dmFyIHU9ZC5jYW52YXN4LXAuY2FudmFzeDtpZih1PjApe3ZhciBjPShlLXAuY2FudmFzeCkvdTtnKz1jKihkLmNhbnZhc3ktcC5jYW52YXN5KX19fWVsc2UgaWYoZTxwLmNhbnZhc3gmJmw+MCl7dmFyIHk9aFtsLTFdO2lmKHQuaXNWYWxpZFBvaW50KHkpKXt2YXIgdT1wLmNhbnZhc3gteS5jYW52YXN4O2lmKHU+MCl7dmFyIGM9KHAuY2FudmFzeC1lKS91O2crPWMqKHkuY2FudmFzeS1wLmNhbnZhc3kpfX19KDA9PT1vfHxhPmcpJiYoaT1wLHI9byl9fX12YXIgXz10aGlzLmxheW91dF8uc2V0TmFtZXNbcl07cmV0dXJue3JvdzpuLHNlcmllc05hbWU6Xyxwb2ludDppfX0sdC5wcm90b3R5cGUubW91c2VNb3ZlXz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxheW91dF8ucG9pbnRzO2lmKHZvaWQgMCE9PWUmJm51bGwhPT1lKXt2YXIgYT10aGlzLmV2ZW50VG9Eb21Db29yZHModCksaT1hWzBdLHI9YVsxXSxuPXRoaXMuZ2V0T3B0aW9uKCJoaWdobGlnaHRTZXJpZXNPcHRzIiksbz0hMTtpZihuJiYhdGhpcy5pc1Nlcmllc0xvY2tlZCgpKXt2YXIgcztzPXRoaXMuZ2V0Qm9vbGVhbk9wdGlvbigic3RhY2tlZEdyYXBoIik/dGhpcy5maW5kU3RhY2tlZFBvaW50KGkscik6dGhpcy5maW5kQ2xvc2VzdFBvaW50KGksciksbz10aGlzLnNldFNlbGVjdGlvbihzLnJvdyxzLnNlcmllc05hbWUpfWVsc2V7dmFyIGw9dGhpcy5maW5kQ2xvc2VzdFJvdyhpKTtvPXRoaXMuc2V0U2VsZWN0aW9uKGwpfXZhciBoPXRoaXMuZ2V0RnVuY3Rpb25PcHRpb24oImhpZ2hsaWdodENhbGxiYWNrIik7aCYmbyYmaC5jYWxsKHRoaXMsdCx0aGlzLmxhc3R4Xyx0aGlzLnNlbFBvaW50c18sdGhpcy5sYXN0Um93Xyx0aGlzLmhpZ2hsaWdodFNldF8pfX0sdC5wcm90b3R5cGUuZ2V0TGVmdEJvdW5kYXJ5Xz1mdW5jdGlvbih0KXtpZih0aGlzLmJvdW5kYXJ5SWRzX1t0XSlyZXR1cm4gdGhpcy5ib3VuZGFyeUlkc19bdF1bMF07Zm9yKHZhciBlPTA7ZTx0aGlzLmJvdW5kYXJ5SWRzXy5sZW5ndGg7ZSsrKWlmKHZvaWQgMCE9PXRoaXMuYm91bmRhcnlJZHNfW2VdKXJldHVybiB0aGlzLmJvdW5kYXJ5SWRzX1tlXVswXTtyZXR1cm4gMH0sdC5wcm90b3R5cGUuYW5pbWF0ZVNlbGVjdGlvbl89ZnVuY3Rpb24oZSl7dmFyIGE9MTAsaT0zMDt2b2lkIDA9PT10aGlzLmZhZGVMZXZlbCYmKHRoaXMuZmFkZUxldmVsPTApLHZvaWQgMD09PXRoaXMuYW5pbWF0ZUlkJiYodGhpcy5hbmltYXRlSWQ9MCk7dmFyIHI9dGhpcy5mYWRlTGV2ZWwsbj0wPmU/cjphLXI7aWYoMD49bilyZXR1cm4gdm9pZCh0aGlzLmZhZGVMZXZlbCYmdGhpcy51cGRhdGVTZWxlY3Rpb25fKDEpKTt2YXIgbz0rK3RoaXMuYW5pbWF0ZUlkLHM9dGhpczt0LnJlcGVhdEFuZENsZWFudXAoZnVuY3Rpb24odCl7cy5hbmltYXRlSWQ9PW8mJihzLmZhZGVMZXZlbCs9ZSwwPT09cy5mYWRlTGV2ZWw/cy5jbGVhclNlbGVjdGlvbigpOnMudXBkYXRlU2VsZWN0aW9uXyhzLmZhZGVMZXZlbC9hKSl9LG4saSxmdW5jdGlvbigpe30pfSx0LnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb25fPWZ1bmN0aW9uKGUpe3RoaXMuY2FzY2FkZUV2ZW50c18oInNlbGVjdCIse3NlbGVjdGVkUm93OnRoaXMubGFzdFJvd18sc2VsZWN0ZWRYOnRoaXMubGFzdHhfLHNlbGVjdGVkUG9pbnRzOnRoaXMuc2VsUG9pbnRzX30pO3ZhciBhLGk9dGhpcy5jYW52YXNfY3R4XztpZih0aGlzLmdldE9wdGlvbigiaGlnaGxpZ2h0U2VyaWVzT3B0cyIpKXtpLmNsZWFyUmVjdCgwLDAsdGhpcy53aWR0aF8sdGhpcy5oZWlnaHRfKTt2YXIgcj0xLXRoaXMuZ2V0TnVtZXJpY09wdGlvbigiaGlnaGxpZ2h0U2VyaWVzQmFja2dyb3VuZEFscGhhIik7aWYocil7dmFyIG49ITA7aWYobil7aWYodm9pZCAwPT09ZSlyZXR1cm4gdm9pZCB0aGlzLmFuaW1hdGVTZWxlY3Rpb25fKDEpO3IqPWV9aS5maWxsU3R5bGU9InJnYmEoMjU1LDI1NSwyNTUsIityKyIpIixpLmZpbGxSZWN0KDAsMCx0aGlzLndpZHRoXyx0aGlzLmhlaWdodF8pfXRoaXMucGxvdHRlcl8uX3JlbmRlckxpbmVDaGFydCh0aGlzLmhpZ2hsaWdodFNldF8saSl9ZWxzZSBpZih0aGlzLnByZXZpb3VzVmVydGljYWxYXz49MCl7dmFyIG89MCxzPXRoaXMuYXR0cl8oImxhYmVscyIpO2ZvcihhPTE7YTxzLmxlbmd0aDthKyspe3ZhciBsPXRoaXMuZ2V0TnVtZXJpY09wdGlvbigiaGlnaGxpZ2h0Q2lyY2xlU2l6ZSIsc1thXSk7bD5vJiYobz1sKX12YXIgaD10aGlzLnByZXZpb3VzVmVydGljYWxYXztpLmNsZWFyUmVjdChoLW8tMSwwLDIqbysyLHRoaXMuaGVpZ2h0Xyl9aWYodGhpcy5pc1VzaW5nRXhjYW52YXNfJiZ0aGlzLmN1cnJlbnRab29tUmVjdEFyZ3NfJiZ0LnByb3RvdHlwZS5kcmF3Wm9vbVJlY3RfLmFwcGx5KHRoaXMsdGhpcy5jdXJyZW50Wm9vbVJlY3RBcmdzXyksdGhpcy5zZWxQb2ludHNfLmxlbmd0aD4wKXt2YXIgcD10aGlzLnNlbFBvaW50c19bMF0uY2FudmFzeDtmb3IoaS5zYXZlKCksYT0wO2E8dGhpcy5zZWxQb2ludHNfLmxlbmd0aDthKyspe3ZhciBnPXRoaXMuc2VsUG9pbnRzX1thXTtpZih0LmlzT0soZy5jYW52YXN5KSl7dmFyIGQ9dGhpcy5nZXROdW1lcmljT3B0aW9uKCJoaWdobGlnaHRDaXJjbGVTaXplIixnLm5hbWUpLHU9dGhpcy5nZXRGdW5jdGlvbk9wdGlvbigiZHJhd0hpZ2hsaWdodFBvaW50Q2FsbGJhY2siLGcubmFtZSksYz10aGlzLnBsb3R0ZXJfLmNvbG9yc1tnLm5hbWVdO3V8fCh1PXQuQ2lyY2xlcy5ERUZBVUxUKSxpLmxpbmVXaWR0aD10aGlzLmdldE51bWVyaWNPcHRpb24oInN0cm9rZVdpZHRoIixnLm5hbWUpLGkuc3Ryb2tlU3R5bGU9YyxpLmZpbGxTdHlsZT1jLHUuY2FsbCh0aGlzLHRoaXMsZy5uYW1lLGkscCxnLmNhbnZhc3ksYyxkLGcuaWR4KX19aS5yZXN0b3JlKCksdGhpcy5wcmV2aW91c1ZlcnRpY2FsWF89cH19LHQucHJvdG90eXBlLnNldFNlbGVjdGlvbj1mdW5jdGlvbih0LGUsYSl7dGhpcy5zZWxQb2ludHNfPVtdO3ZhciBpPSExO2lmKHQhPT0hMSYmdD49MCl7dCE9dGhpcy5sYXN0Um93XyYmKGk9ITApLHRoaXMubGFzdFJvd189dDtmb3IodmFyIHI9MDtyPHRoaXMubGF5b3V0Xy5wb2ludHMubGVuZ3RoOysrcil7dmFyIG49dGhpcy5sYXlvdXRfLnBvaW50c1tyXSxvPXQtdGhpcy5nZXRMZWZ0Qm91bmRhcnlfKHIpO2lmKG88bi5sZW5ndGgmJm5bb10uaWR4PT10KXt2YXIgcz1uW29dO251bGwhPT1zLnl2YWwmJnRoaXMuc2VsUG9pbnRzXy5wdXNoKHMpfWVsc2UgZm9yKHZhciBsPTA7bDxuLmxlbmd0aDsrK2wpe3ZhciBzPW5bbF07aWYocy5pZHg9PXQpe251bGwhPT1zLnl2YWwmJnRoaXMuc2VsUG9pbnRzXy5wdXNoKHMpO2JyZWFrfX19fWVsc2UgdGhpcy5sYXN0Um93Xz49MCYmKGk9ITApLHRoaXMubGFzdFJvd189LTE7cmV0dXJuIHRoaXMuc2VsUG9pbnRzXy5sZW5ndGg/dGhpcy5sYXN0eF89dGhpcy5zZWxQb2ludHNfWzBdLnh2YWw6dGhpcy5sYXN0eF89LTEsdm9pZCAwIT09ZSYmKHRoaXMuaGlnaGxpZ2h0U2V0XyE9PWUmJihpPSEwKSx0aGlzLmhpZ2hsaWdodFNldF89ZSksdm9pZCAwIT09YSYmKHRoaXMubG9ja2VkU2V0Xz1hKSxpJiZ0aGlzLnVwZGF0ZVNlbGVjdGlvbl8odm9pZCAwKSxpfSx0LnByb3RvdHlwZS5tb3VzZU91dF89ZnVuY3Rpb24odCl7dGhpcy5nZXRGdW5jdGlvbk9wdGlvbigidW5oaWdobGlnaHRDYWxsYmFjayIpJiZ0aGlzLmdldEZ1bmN0aW9uT3B0aW9uKCJ1bmhpZ2hsaWdodENhbGxiYWNrIikuY2FsbCh0aGlzLHQpLHRoaXMuZ2V0Qm9vbGVhbk9wdGlvbigiaGlkZU92ZXJsYXlPbk1vdXNlT3V0IikmJiF0aGlzLmxvY2tlZFNldF8mJnRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdC5wcm90b3R5cGUuY2xlYXJTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYXNjYWRlRXZlbnRzXygiZGVzZWxlY3QiLHt9KSx0aGlzLmxvY2tlZFNldF89ITEsdGhpcy5mYWRlTGV2ZWw/dm9pZCB0aGlzLmFuaW1hdGVTZWxlY3Rpb25fKC0xKToodGhpcy5jYW52YXNfY3R4Xy5jbGVhclJlY3QoMCwwLHRoaXMud2lkdGhfLHRoaXMuaGVpZ2h0XyksdGhpcy5mYWRlTGV2ZWw9MCx0aGlzLnNlbFBvaW50c189W10sdGhpcy5sYXN0eF89LTEsdGhpcy5sYXN0Um93Xz0tMSx2b2lkKHRoaXMuaGlnaGxpZ2h0U2V0Xz1udWxsKSl9LHQucHJvdG90eXBlLmdldFNlbGVjdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLnNlbFBvaW50c198fHRoaXMuc2VsUG9pbnRzXy5sZW5ndGg8MSlyZXR1cm4tMTtmb3IodmFyIHQ9MDt0PHRoaXMubGF5b3V0Xy5wb2ludHMubGVuZ3RoO3QrKylmb3IodmFyIGU9dGhpcy5sYXlvdXRfLnBvaW50c1t0XSxhPTA7YTxlLmxlbmd0aDthKyspaWYoZVthXS54PT10aGlzLnNlbFBvaW50c19bMF0ueClyZXR1cm4gZVthXS5pZHg7cmV0dXJuLTF9LHQucHJvdG90eXBlLmdldEhpZ2hsaWdodFNlcmllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhpZ2hsaWdodFNldF99LHQucHJvdG90eXBlLmlzU2VyaWVzTG9ja2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9ja2VkU2V0X30sdC5wcm90b3R5cGUubG9hZGVkRXZlbnRfPWZ1bmN0aW9uKHQpe3RoaXMucmF3RGF0YV89dGhpcy5wYXJzZUNTVl8odCksdGhpcy5jYXNjYWRlRGF0YURpZFVwZGF0ZUV2ZW50XygpLHRoaXMucHJlZHJhd18oKX0sdC5wcm90b3R5cGUuYWRkWFRpY2tzXz1mdW5jdGlvbigpe3ZhciB0O3Q9dGhpcy5kYXRlV2luZG93Xz9bdGhpcy5kYXRlV2luZG93X1swXSx0aGlzLmRhdGVXaW5kb3dfWzFdXTp0aGlzLnhBeGlzRXh0cmVtZXMoKTt2YXIgZT10aGlzLm9wdGlvbnNWaWV3Rm9yQXhpc18oIngiKSxhPWUoInRpY2tlciIpKHRbMF0sdFsxXSx0aGlzLnBsb3R0ZXJfLmFyZWEudyxlLHRoaXMpO3RoaXMubGF5b3V0Xy5zZXRYVGlja3MoYSl9LHQucHJvdG90eXBlLmdldEhhbmRsZXJDbGFzc189ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmF0dHJfKCJkYXRhSGFuZGxlciIpP3RoaXMuYXR0cl8oImRhdGFIYW5kbGVyIik6dGhpcy5mcmFjdGlvbnNfP3RoaXMuZ2V0Qm9vbGVhbk9wdGlvbigiZXJyb3JCYXJzIik/dC5EYXRhSGFuZGxlcnMuRnJhY3Rpb25zQmFyc0hhbmRsZXI6dC5EYXRhSGFuZGxlcnMuRGVmYXVsdEZyYWN0aW9uSGFuZGxlcjp0aGlzLmdldEJvb2xlYW5PcHRpb24oImN1c3RvbUJhcnMiKT90LkRhdGFIYW5kbGVycy5DdXN0b21CYXJzSGFuZGxlcjp0aGlzLmdldEJvb2xlYW5PcHRpb24oImVycm9yQmFycyIpP3QuRGF0YUhhbmRsZXJzLkVycm9yQmFyc0hhbmRsZXI6dC5EYXRhSGFuZGxlcnMuRGVmYXVsdEhhbmRsZXJ9LHQucHJvdG90eXBlLnByZWRyYXdfPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IERhdGU7dGhpcy5kYXRhSGFuZGxlcl89bmV3KHRoaXMuZ2V0SGFuZGxlckNsYXNzXygpKSx0aGlzLmxheW91dF8uY29tcHV0ZVBsb3RBcmVhKCksdGhpcy5jb21wdXRlWUF4ZXNfKCksdGhpcy5pc19pbml0aWFsX2RyYXdffHwodGhpcy5jYW52YXNfY3R4Xy5yZXN0b3JlKCksdGhpcy5oaWRkZW5fY3R4Xy5yZXN0b3JlKCkpLHRoaXMuY2FudmFzX2N0eF8uc2F2ZSgpLHRoaXMuaGlkZGVuX2N0eF8uc2F2ZSgpLHRoaXMucGxvdHRlcl89bmV3IER5Z3JhcGhDYW52YXNSZW5kZXJlcih0aGlzLHRoaXMuaGlkZGVuXyx0aGlzLmhpZGRlbl9jdHhfLHRoaXMubGF5b3V0XyksdGhpcy5jcmVhdGVSb2xsSW50ZXJmYWNlXygpLHRoaXMuY2FzY2FkZUV2ZW50c18oInByZWRyYXciKSx0aGlzLnJvbGxlZFNlcmllc189W251bGxdO2Zvcih2YXIgZT0xO2U8dGhpcy5udW1Db2x1bW5zKCk7ZSsrKXt2YXIgYT10aGlzLmRhdGFIYW5kbGVyXy5leHRyYWN0U2VyaWVzKHRoaXMucmF3RGF0YV8sZSx0aGlzLmF0dHJpYnV0ZXNfKTt0aGlzLnJvbGxQZXJpb2RfPjEmJihhPXRoaXMuZGF0YUhhbmRsZXJfLnJvbGxpbmdBdmVyYWdlKGEsdGhpcy5yb2xsUGVyaW9kXyx0aGlzLmF0dHJpYnV0ZXNfKSksdGhpcy5yb2xsZWRTZXJpZXNfLnB1c2goYSl9dGhpcy5kcmF3R3JhcGhfKCk7dmFyIGk9bmV3IERhdGU7dGhpcy5kcmF3aW5nVGltZU1zXz1pLXR9LHQuUG9pbnRUeXBlPXZvaWQgMCx0LnN0YWNrUG9pbnRzXz1mdW5jdGlvbih0LGUsYSxpKXtmb3IodmFyIHI9bnVsbCxuPW51bGwsbz1udWxsLHM9LTEsbD1mdW5jdGlvbihlKXtpZighKHM+PWUpKWZvcih2YXIgYT1lO2E8dC5sZW5ndGg7KythKWlmKG89bnVsbCwhaXNOYU4odFthXS55dmFsKSYmbnVsbCE9PXRbYV0ueXZhbCl7cz1hLG89dFthXTticmVha319LGg9MDtoPHQubGVuZ3RoOysraCl7dmFyIHA9dFtoXSxnPXAueHZhbDt2b2lkIDA9PT1lW2ddJiYoZVtnXT0wKTt2YXIgZD1wLnl2YWw7aXNOYU4oZCl8fG51bGw9PT1kPyJub25lIj09aT9kPTA6KGwoaCksZD1uJiZvJiYibm9uZSIhPWk/bi55dmFsKyhvLnl2YWwtbi55dmFsKSooKGctbi54dmFsKS8oby54dmFsLW4ueHZhbCkpOm4mJiJhbGwiPT1pP24ueXZhbDpvJiYiYWxsIj09aT9vLnl2YWw6MCk6bj1wO3ZhciB1PWVbZ107ciE9ZyYmKHUrPWQsZVtnXT11KSxyPWcscC55dmFsX3N0YWNrZWQ9dSx1PmFbMV0mJihhWzFdPXUpLHU8YVswXSYmKGFbMF09dSl9fSx0LnByb3RvdHlwZS5nYXRoZXJEYXRhc2V0c189ZnVuY3Rpb24oZSxhKXt2YXIgaSxyLG4sbyxzLGwsaD1bXSxwPVtdLGc9W10sZD17fSx1PWUubGVuZ3RoLTE7Zm9yKGk9dTtpPj0xO2ktLSlpZih0aGlzLnZpc2liaWxpdHkoKVtpLTFdKXtpZihhKXtsPWVbaV07dmFyIGM9YVswXSx5PWFbMV07Zm9yKG49bnVsbCxvPW51bGwscj0wO3I8bC5sZW5ndGg7cisrKWxbcl1bMF0+PWMmJm51bGw9PT1uJiYobj1yKSxsW3JdWzBdPD15JiYobz1yKTtudWxsPT09biYmKG49MCk7Zm9yKHZhciBfPW4sdj0hMDt2JiZfPjA7KV8tLSx2PW51bGw9PT1sW19dWzFdO251bGw9PT1vJiYobz1sLmxlbmd0aC0xKTt2YXIgZj1vO2Zvcih2PSEwO3YmJmY8bC5sZW5ndGgtMTspZisrLHY9bnVsbD09PWxbZl1bMV07XyE9PW4mJihuPV8pLGYhPT1vJiYobz1mKSxoW2ktMV09W24sb10sbD1sLnNsaWNlKG4sbysxKX1lbHNlIGw9ZVtpXSxoW2ktMV09WzAsbC5sZW5ndGgtMV07dmFyIHg9dGhpcy5hdHRyXygibGFiZWxzIilbaV0sbT10aGlzLmRhdGFIYW5kbGVyXy5nZXRFeHRyZW1lWVZhbHVlcyhsLGEsdGhpcy5nZXRCb29sZWFuT3B0aW9uKCJzdGVwUGxvdCIseCkpLEQ9dGhpcy5kYXRhSGFuZGxlcl8uc2VyaWVzVG9Qb2ludHMobCx4LGhbaS0xXVswXSk7dGhpcy5nZXRCb29sZWFuT3B0aW9uKCJzdGFja2VkR3JhcGgiKSYmKHM9dGhpcy5hdHRyaWJ1dGVzXy5heGlzRm9yU2VyaWVzKHgpLHZvaWQgMD09PWdbc10mJihnW3NdPVtdKSx0LnN0YWNrUG9pbnRzXyhELGdbc10sbSx0aGlzLmdldEJvb2xlYW5PcHRpb24oInN0YWNrZWRHcmFwaE5hTkZpbGwiKSkpLGRbeF09bSxwW2ldPUR9cmV0dXJue3BvaW50czpwLGV4dHJlbWVzOmQsYm91bmRhcnlJZHM6aH19LHQucHJvdG90eXBlLmRyYXdHcmFwaF89ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRGF0ZSxlPXRoaXMuaXNfaW5pdGlhbF9kcmF3Xzt0aGlzLmlzX2luaXRpYWxfZHJhd189ITEsdGhpcy5sYXlvdXRfLnJlbW92ZUFsbERhdGFzZXRzKCksdGhpcy5zZXRDb2xvcnNfKCksdGhpcy5hdHRyc18ucG9pbnRTaXplPS41KnRoaXMuZ2V0TnVtZXJpY09wdGlvbigiaGlnaGxpZ2h0Q2lyY2xlU2l6ZSIpO3ZhciBhPXRoaXMuZ2F0aGVyRGF0YXNldHNfKHRoaXMucm9sbGVkU2VyaWVzXyx0aGlzLmRhdGVXaW5kb3dfKSxpPWEucG9pbnRzLHI9YS5leHRyZW1lczt0aGlzLmJvdW5kYXJ5SWRzXz1hLmJvdW5kYXJ5SWRzLHRoaXMuc2V0SW5kZXhCeU5hbWVfPXt9O3ZhciBuPXRoaXMuYXR0cl8oImxhYmVscyIpO24ubGVuZ3RoPjAmJih0aGlzLnNldEluZGV4QnlOYW1lX1tuWzBdXT0wKTtmb3IodmFyIG89MCxzPTE7czxpLmxlbmd0aDtzKyspdGhpcy5zZXRJbmRleEJ5TmFtZV9bbltzXV09cyx0aGlzLnZpc2liaWxpdHkoKVtzLTFdJiYodGhpcy5sYXlvdXRfLmFkZERhdGFzZXQobltzXSxpW3NdKSx0aGlzLmRhdGFzZXRJbmRleF9bc109bysrKTt0aGlzLmNvbXB1dGVZQXhpc1Jhbmdlc18ociksdGhpcy5sYXlvdXRfLnNldFlBeGVzKHRoaXMuYXhlc18pLHRoaXMuYWRkWFRpY2tzXygpO3ZhciBsPXRoaXMuem9vbWVkX3hfO2lmKHRoaXMuem9vbWVkX3hfPWwsdGhpcy5sYXlvdXRfLmV2YWx1YXRlKCksdGhpcy5yZW5kZXJHcmFwaF8oZSksdGhpcy5nZXRTdHJpbmdPcHRpb24oInRpbWluZ05hbWUiKSl7dmFyIGg9bmV3IERhdGU7Y29uc29sZS5sb2codGhpcy5nZXRTdHJpbmdPcHRpb24oInRpbWluZ05hbWUiKSsiIC0gZHJhd0dyYXBoOiAiKyhoLXQpKyJtcyIpfX0sdC5wcm90b3R5cGUucmVuZGVyR3JhcGhfPWZ1bmN0aW9uKHQpe3RoaXMuY2FzY2FkZUV2ZW50c18oImNsZWFyQ2hhcnQiKSx0aGlzLnBsb3R0ZXJfLmNsZWFyKCksdGhpcy5nZXRGdW5jdGlvbk9wdGlvbigidW5kZXJsYXlDYWxsYmFjayIpJiZ0aGlzLmdldEZ1bmN0aW9uT3B0aW9uKCJ1bmRlcmxheUNhbGxiYWNrIikuY2FsbCh0aGlzLHRoaXMuaGlkZGVuX2N0eF8sdGhpcy5sYXlvdXRfLmdldFBsb3RBcmVhKCksdGhpcyx0aGlzKTt2YXIgZT17Y2FudmFzOnRoaXMuaGlkZGVuXyxkcmF3aW5nQ29udGV4dDp0aGlzLmhpZGRlbl9jdHhffTtpZih0aGlzLmNhc2NhZGVFdmVudHNfKCJ3aWxsRHJhd0NoYXJ0IixlKSx0aGlzLnBsb3R0ZXJfLnJlbmRlcigpLHRoaXMuY2FzY2FkZUV2ZW50c18oImRpZERyYXdDaGFydCIsZSksdGhpcy5sYXN0Um93Xz0tMSx0aGlzLmNhbnZhc18uZ2V0Q29udGV4dCgiMmQiKS5jbGVhclJlY3QoMCwwLHRoaXMud2lkdGhfLHRoaXMuaGVpZ2h0XyksbnVsbCE9PXRoaXMuZ2V0RnVuY3Rpb25PcHRpb24oImRyYXdDYWxsYmFjayIpJiZ0aGlzLmdldEZ1bmN0aW9uT3B0aW9uKCJkcmF3Q2FsbGJhY2siKS5jYWxsKHRoaXMsdGhpcyx0KSx0KWZvcih0aGlzLnJlYWR5RmlyZWRfPSEwO3RoaXMucmVhZHlGbnNfLmxlbmd0aD4wOyl7dmFyIGE9dGhpcy5yZWFkeUZuc18ucG9wKCk7YSh0aGlzKX19LHQucHJvdG90eXBlLmNvbXB1dGVZQXhlc189ZnVuY3Rpb24oKXt2YXIgZSxhLGkscixuO2lmKHZvaWQgMCE9PXRoaXMuYXhlc18mJnRoaXMudXNlcl9hdHRyc18uaGFzT3duUHJvcGVydHkoInZhbHVlUmFuZ2UiKT09PSExKWZvcihlPVtdLGk9MDtpPHRoaXMuYXhlc18ubGVuZ3RoO2krKyllLnB1c2godGhpcy5heGVzX1tpXS52YWx1ZVdpbmRvdyk7Zm9yKHRoaXMuYXhlc189W10sYT0wO2E8dGhpcy5hdHRyaWJ1dGVzXy5udW1BeGVzKCk7YSsrKXI9e2c6dGhpc30sdC51cGRhdGUocix0aGlzLmF0dHJpYnV0ZXNfLmF4aXNPcHRpb25zKGEpKSx0aGlzLmF4ZXNfW2FdPXI7aWYobj10aGlzLmF0dHJfKCJ2YWx1ZVJhbmdlIiksbiYmKHRoaXMuYXhlc19bMF0udmFsdWVSYW5nZT1uKSx2b2lkIDAhPT1lKXt2YXIgbz1NYXRoLm1pbihlLmxlbmd0aCx0aGlzLmF4ZXNfLmxlbmd0aCk7Zm9yKGk9MDtvPmk7aSsrKXRoaXMuYXhlc19baV0udmFsdWVXaW5kb3c9ZVtpXX1mb3IoYT0wO2E8dGhpcy5heGVzXy5sZW5ndGg7YSsrKWlmKDA9PT1hKXI9dGhpcy5vcHRpb25zVmlld0ZvckF4aXNfKCJ5IisoYT8iMiI6IiIpKSxuPXIoInZhbHVlUmFuZ2UiKSxuJiYodGhpcy5heGVzX1thXS52YWx1ZVJhbmdlPW4pO2Vsc2V7dmFyIHM9dGhpcy51c2VyX2F0dHJzXy5heGVzO3MmJnMueTImJihuPXMueTIudmFsdWVSYW5nZSxuJiYodGhpcy5heGVzX1thXS52YWx1ZVJhbmdlPW4pKX19LHQucHJvdG90eXBlLm51bUF4ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzXy5udW1BeGVzKCl9LHQucHJvdG90eXBlLmF4aXNQcm9wZXJ0aWVzRm9yU2VyaWVzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF4ZXNfW3RoaXMuYXR0cmlidXRlc18uYXhpc0ZvclNlcmllcyh0KV19LHQucHJvdG90eXBlLmNvbXB1dGVZQXhpc1Jhbmdlc189ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGEsaSxyLG4sbz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4ocGFyc2VGbG9hdCh0KSl9LHM9dGhpcy5hdHRyaWJ1dGVzXy5udW1BeGVzKCksbD0wO3M+bDtsKyspe3ZhciBoPXRoaXMuYXhlc19bbF0scD10aGlzLmF0dHJpYnV0ZXNfLmdldEZvckF4aXMoImxvZ3NjYWxlIixsKSxnPXRoaXMuYXR0cmlidXRlc18uZ2V0Rm9yQXhpcygiaW5jbHVkZVplcm8iLGwpLGQ9dGhpcy5hdHRyaWJ1dGVzXy5nZXRGb3JBeGlzKCJpbmRlcGVuZGVudFRpY2tzIixsKTtpZihpPXRoaXMuYXR0cmlidXRlc18uc2VyaWVzRm9yQXhpcyhsKSxlPSEwLHI9LjEsbnVsbCE9PXRoaXMuZ2V0TnVtZXJpY09wdGlvbigieVJhbmdlUGFkIikmJihlPSExLHI9dGhpcy5nZXROdW1lcmljT3B0aW9uKCJ5UmFuZ2VQYWQiKS90aGlzLnBsb3R0ZXJfLmFyZWEuaCksMD09PWkubGVuZ3RoKWguZXh0cmVtZVJhbmdlPVswLDFdO2Vsc2V7Zm9yKHZhciB1LGMseT0xLzAsXz0tKDEvMCksdj0wO3Y8aS5sZW5ndGg7disrKXQuaGFzT3duUHJvcGVydHkoaVt2XSkmJih1PXRbaVt2XV1bMF0sbnVsbCE9PXUmJih5PU1hdGgubWluKHUseSkpLGM9dFtpW3ZdXVsxXSxudWxsIT09YyYmKF89TWF0aC5tYXgoYyxfKSkpO2cmJiFwJiYoeT4wJiYoeT0wKSwwPl8mJihfPTApKSx5PT0xLzAmJih5PTApLF89PS0oMS8wKSYmKF89MSksYT1fLXksMD09PWEmJigwIT09Xz9hPU1hdGguYWJzKF8pOihfPTEsYT0xKSk7dmFyIGYseDtpZihwKWlmKGUpZj1fK3IqYSx4PXk7ZWxzZXt2YXIgbT1NYXRoLmV4cChNYXRoLmxvZyhhKSpyKTtmPV8qbSx4PXkvbX1lbHNlIGY9XytyKmEseD15LXIqYSxlJiYhdGhpcy5nZXRCb29sZWFuT3B0aW9uKCJhdm9pZE1pblplcm8iKSYmKDA+eCYmeT49MCYmKHg9MCksZj4wJiYwPj1fJiYoZj0wKSk7aC5leHRyZW1lUmFuZ2U9W3gsZl19aWYoaC52YWx1ZVdpbmRvdyloLmNvbXB1dGVkVmFsdWVSYW5nZT1baC52YWx1ZVdpbmRvd1swXSxoLnZhbHVlV2luZG93WzFdXTtlbHNlIGlmKGgudmFsdWVSYW5nZSl7dmFyIEQ9byhoLnZhbHVlUmFuZ2VbMF0pP2guZXh0cmVtZVJhbmdlWzBdOmgudmFsdWVSYW5nZVswXSx3PW8oaC52YWx1ZVJhbmdlWzFdKT9oLmV4dHJlbWVSYW5nZVsxXTpoLnZhbHVlUmFuZ2VbMV07aWYoIWUpaWYoaC5sb2dzY2FsZSl7dmFyIG09TWF0aC5leHAoTWF0aC5sb2coYSkqcik7RCo9bSx3Lz1tfWVsc2UgYT13LUQsRC09YSpyLHcrPWEqcjtoLmNvbXB1dGVkVmFsdWVSYW5nZT1bRCx3XX1lbHNlIGguY29tcHV0ZWRWYWx1ZVJhbmdlPWguZXh0cmVtZVJhbmdlO2lmKGQpe2guaW5kZXBlbmRlbnRUaWNrcz1kO3ZhciBBPXRoaXMub3B0aW9uc1ZpZXdGb3JBeGlzXygieSIrKGw/IjIiOiIiKSksYj1BKCJ0aWNrZXIiKTtoLnRpY2tzPWIoaC5jb21wdXRlZFZhbHVlUmFuZ2VbMF0saC5jb21wdXRlZFZhbHVlUmFuZ2VbMV0sdGhpcy5wbG90dGVyXy5hcmVhLmgsQSx0aGlzKSxufHwobj1oKX19aWYodm9pZCAwPT09bil0aHJvdydDb25maWd1cmF0aW9uIEVycm9yOiBBdCBsZWFzdCBvbmUgYXhpcyBoYXMgdG8gaGF2ZSB0aGUgImluZGVwZW5kZW50VGlja3MiIG9wdGlvbiBhY3RpdmF0ZWQuJztmb3IodmFyIGw9MDtzPmw7bCsrKXt2YXIgaD10aGlzLmF4ZXNfW2xdO2lmKCFoLmluZGVwZW5kZW50VGlja3Mpe2Zvcih2YXIgQT10aGlzLm9wdGlvbnNWaWV3Rm9yQXhpc18oInkiKyhsPyIyIjoiIikpLGI9QSgidGlja2VyIiksVD1uLnRpY2tzLEU9bi5jb21wdXRlZFZhbHVlUmFuZ2VbMV0tbi5jb21wdXRlZFZhbHVlUmFuZ2VbMF0sQz1oLmNvbXB1dGVkVmFsdWVSYW5nZVsxXS1oLmNvbXB1dGVkVmFsdWVSYW5nZVswXSxMPVtdLFA9MDtQPFQubGVuZ3RoO1ArKyl7dmFyIFM9KFRbUF0udi1uLmNvbXB1dGVkVmFsdWVSYW5nZVswXSkvRSxPPWguY29tcHV0ZWRWYWx1ZVJhbmdlWzBdK1MqQztMLnB1c2goTyl9aC50aWNrcz1iKGguY29tcHV0ZWRWYWx1ZVJhbmdlWzBdLGguY29tcHV0ZWRWYWx1ZVJhbmdlWzFdLHRoaXMucGxvdHRlcl8uYXJlYS5oLEEsdGhpcyxMKX19fSx0LnByb3RvdHlwZS5kZXRlY3RUeXBlRnJvbVN0cmluZ189ZnVuY3Rpb24odCl7dmFyIGU9ITEsYT10LmluZGV4T2YoIi0iKTthPjAmJiJlIiE9dFthLTFdJiYiRSIhPXRbYS0xXXx8dC5pbmRleE9mKCIvIik+PTB8fGlzTmFOKHBhcnNlRmxvYXQodCkpP2U9ITA6OD09dC5sZW5ndGgmJnQ+IjE5NzAwMTAxIiYmIjIwMzcxMjMxIj50JiYoZT0hMCksdGhpcy5zZXRYQXhpc09wdGlvbnNfKGUpfSx0LnByb3RvdHlwZS5zZXRYQXhpc09wdGlvbnNfPWZ1bmN0aW9uKGUpe2U/KHRoaXMuYXR0cnNfLnhWYWx1ZVBhcnNlcj10LmRhdGVQYXJzZXIsdGhpcy5hdHRyc18uYXhlcy54LnZhbHVlRm9ybWF0dGVyPXQuZGF0ZVZhbHVlRm9ybWF0dGVyLHRoaXMuYXR0cnNfLmF4ZXMueC50aWNrZXI9dC5kYXRlVGlja2VyLHRoaXMuYXR0cnNfLmF4ZXMueC5heGlzTGFiZWxGb3JtYXR0ZXI9dC5kYXRlQXhpc0xhYmVsRm9ybWF0dGVyKToodGhpcy5hdHRyc18ueFZhbHVlUGFyc2VyPWZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfSx0aGlzLmF0dHJzXy5heGVzLngudmFsdWVGb3JtYXR0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHRoaXMuYXR0cnNfLmF4ZXMueC50aWNrZXI9dC5udW1lcmljVGlja3MsdGhpcy5hdHRyc18uYXhlcy54LmF4aXNMYWJlbEZvcm1hdHRlcj10aGlzLmF0dHJzXy5heGVzLngudmFsdWVGb3JtYXR0ZXIpfSx0LnByb3RvdHlwZS5wYXJzZUNTVl89ZnVuY3Rpb24oZSl7dmFyIGEsaSxyPVtdLG49dC5kZXRlY3RMaW5lRGVsaW1pdGVyKGUpLG89ZS5zcGxpdChufHwiXG4iKSxzPXRoaXMuZ2V0U3RyaW5nT3B0aW9uKCJkZWxpbWl0ZXIiKTstMT09b1swXS5pbmRleE9mKHMpJiZvWzBdLmluZGV4T2YoIgkiKT49MCYmKHM9IgkiKTt2YXIgbD0wOyJsYWJlbHMiaW4gdGhpcy51c2VyX2F0dHJzX3x8KGw9MSx0aGlzLmF0dHJzXy5sYWJlbHM9b1swXS5zcGxpdChzKSx0aGlzLmF0dHJpYnV0ZXNfLnJlcGFyc2VTZXJpZXMoKSk7Zm9yKHZhciBoLHA9MCxnPSExLGQ9dGhpcy5hdHRyXygibGFiZWxzIikubGVuZ3RoLHU9ITEsYz1sO2M8by5sZW5ndGg7YysrKXt2YXIgeT1vW2NdO2lmKHA9YywwIT09eS5sZW5ndGgmJiIjIiE9eVswXSl7dmFyIF89eS5zcGxpdChzKTtpZighKF8ubGVuZ3RoPDIpKXt2YXIgdj1bXTtpZihnfHwodGhpcy5kZXRlY3RUeXBlRnJvbVN0cmluZ18oX1swXSksaD10aGlzLmdldEZ1bmN0aW9uT3B0aW9uKCJ4VmFsdWVQYXJzZXIiKSxnPSEwKSx2WzBdPWgoX1swXSx0aGlzKSx0aGlzLmZyYWN0aW9uc18pZm9yKGk9MTtpPF8ubGVuZ3RoO2krKylhPV9baV0uc3BsaXQoIi8iKSwyIT1hLmxlbmd0aD8oY29uc29sZS5lcnJvcignRXhwZWN0ZWQgZnJhY3Rpb25hbCAibnVtL2RlbiIgdmFsdWVzIGluIENTViBkYXRhIGJ1dCBmb3VuZCBhIHZhbHVlIFwnJytfW2ldKyInIG9uIGxpbmUgIisoMStjKSsiICgnIit5KyInKSB3aGljaCBpcyBub3Qgb2YgdGhpcyBmb3JtLiIpLHZbaV09WzAsMF0pOnZbaV09W3QucGFyc2VGbG9hdF8oYVswXSxjLHkpLHQucGFyc2VGbG9hdF8oYVsxXSxjLHkpXTtlbHNlIGlmKHRoaXMuZ2V0Qm9vbGVhbk9wdGlvbigiZXJyb3JCYXJzIikpZm9yKF8ubGVuZ3RoJTIhPTEmJmNvbnNvbGUuZXJyb3IoIkV4cGVjdGVkIGFsdGVybmF0aW5nICh2YWx1ZSwgc3RkZXYuKSBwYWlycyBpbiBDU1YgZGF0YSBidXQgbGluZSAiKygxK2MpKyIgaGFzIGFuIG9kZCBudW1iZXIgb2YgdmFsdWVzICgiKyhfLmxlbmd0aC0xKSsiKTogJyIreSsiJyIpLGk9MTtpPF8ubGVuZ3RoO2krPTIpdlsoaSsxKS8yXT1bdC5wYXJzZUZsb2F0XyhfW2ldLGMseSksdC5wYXJzZUZsb2F0XyhfW2krMV0sYyx5KV07ZWxzZSBpZih0aGlzLmdldEJvb2xlYW5PcHRpb24oImN1c3RvbUJhcnMiKSlmb3IoaT0xO2k8Xy5sZW5ndGg7aSsrKXt2YXIgZj1fW2ldOy9eICokLy50ZXN0KGYpP3ZbaV09W251bGwsbnVsbCxudWxsXTooYT1mLnNwbGl0KCI7IiksMz09YS5sZW5ndGg/dltpXT1bdC5wYXJzZUZsb2F0XyhhWzBdLGMseSksdC5wYXJzZUZsb2F0XyhhWzFdLGMseSksdC5wYXJzZUZsb2F0XyhhWzJdLGMseSldOmNvbnNvbGUud2FybignV2hlbiB1c2luZyBjdXN0b21CYXJzLCB2YWx1ZXMgbXVzdCBiZSBlaXRoZXIgYmxhbmsgb3IgImxvdztjZW50ZXI7aGlnaCIgdHVwbGVzIChnb3QgIicrZisnIiBvbiBsaW5lICcrKDErYykpKX1lbHNlIGZvcihpPTE7aTxfLmxlbmd0aDtpKyspdltpXT10LnBhcnNlRmxvYXRfKF9baV0sYyx5KTtpZihyLmxlbmd0aD4wJiZ2WzBdPHJbci5sZW5ndGgtMV1bMF0mJih1PSEwKSx2Lmxlbmd0aCE9ZCYmY29uc29sZS5lcnJvcigiTnVtYmVyIG9mIGNvbHVtbnMgaW4gbGluZSAiK2MrIiAoIit2Lmxlbmd0aCsiKSBkb2VzIG5vdCBhZ3JlZSB3aXRoIG51bWJlciBvZiBsYWJlbHMgKCIrZCsiKSAiK3kpLDA9PT1jJiZ0aGlzLmF0dHJfKCJsYWJlbHMiKSl7dmFyIHg9ITA7Zm9yKGk9MDt4JiZpPHYubGVuZ3RoO2krKyl2W2ldJiYoeD0hMSk7aWYoeCl7Y29uc29sZS53YXJuKCJUaGUgZHlncmFwaHMgJ2xhYmVscycgb3B0aW9uIGlzIHNldCwgYnV0IHRoZSBmaXJzdCByb3cgb2YgQ1NWIGRhdGEgKCciK3krIicpIGFwcGVhcnMgdG8gYWxzbyBjb250YWluIGxhYmVscy4gV2lsbCBkcm9wIHRoZSBDU1YgbGFiZWxzIGFuZCB1c2UgdGhlIG9wdGlvbiBsYWJlbHMuIik7Y29udGludWV9fXIucHVzaCh2KX19fXJldHVybiB1JiYoY29uc29sZS53YXJuKCJDU1YgaXMgb3V0IG9mIG9yZGVyOyBvcmRlciBpdCBjb3JyZWN0bHkgdG8gc3BlZWQgbG9hZGluZy4iKSxyLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSkpLHJ9LHQucHJvdG90eXBlLnBhcnNlQXJyYXlfPWZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gY29uc29sZS5lcnJvcigiQ2FuJ3QgcGxvdCBlbXB0eSBkYXRhIHNldCIpLG51bGw7aWYoMD09PWVbMF0ubGVuZ3RoKXJldHVybiBjb25zb2xlLmVycm9yKCJEYXRhIHNldCBjYW5ub3QgY29udGFpbiBhbiBlbXB0eSByb3ciKSxudWxsO3ZhciBhO2lmKG51bGw9PT10aGlzLmF0dHJfKCJsYWJlbHMiKSl7Zm9yKGNvbnNvbGUud2FybigiVXNpbmcgZGVmYXVsdCBsYWJlbHMuIFNldCBsYWJlbHMgZXhwbGljaXRseSB2aWEgJ2xhYmVscycgaW4gdGhlIG9wdGlvbnMgcGFyYW1ldGVyIiksdGhpcy5hdHRyc18ubGFiZWxzPVsiWCJdLGE9MTthPGVbMF0ubGVuZ3RoO2ErKyl0aGlzLmF0dHJzXy5sYWJlbHMucHVzaCgiWSIrYSk7dGhpcy5hdHRyaWJ1dGVzXy5yZXBhcnNlU2VyaWVzKCl9ZWxzZXt2YXIgaT10aGlzLmF0dHJfKCJsYWJlbHMiKTtpZihpLmxlbmd0aCE9ZVswXS5sZW5ndGgpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIk1pc21hdGNoIGJldHdlZW4gbnVtYmVyIG9mIGxhYmVscyAoIitpKyIpIGFuZCBudW1iZXIgb2YgY29sdW1ucyBpbiBhcnJheSAoIitlWzBdLmxlbmd0aCsiKSIpLG51bGx9aWYodC5pc0RhdGVMaWtlKGVbMF1bMF0pKXt0aGlzLmF0dHJzXy5heGVzLngudmFsdWVGb3JtYXR0ZXI9dC5kYXRlVmFsdWVGb3JtYXR0ZXIsdGhpcy5hdHRyc18uYXhlcy54LnRpY2tlcj10LmRhdGVUaWNrZXIsdGhpcy5hdHRyc18uYXhlcy54LmF4aXNMYWJlbEZvcm1hdHRlcj10LmRhdGVBeGlzTGFiZWxGb3JtYXR0ZXI7dmFyIHI9dC5jbG9uZShlKTtmb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKXtpZigwPT09clthXS5sZW5ndGgpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlJvdyAiKygxK2EpKyIgb2YgZGF0YSBpcyBlbXB0eSIpLG51bGw7aWYobnVsbD09PXJbYV1bMF18fCJmdW5jdGlvbiIhPXR5cGVvZiByW2FdWzBdLmdldFRpbWV8fGlzTmFOKHJbYV1bMF0uZ2V0VGltZSgpKSlyZXR1cm4gY29uc29sZS5lcnJvcigieCB2YWx1ZSBpbiByb3cgIisoMSthKSsiIGlzIG5vdCBhIERhdGUiKSxudWxsO3JbYV1bMF09clthXVswXS5nZXRUaW1lKCl9cmV0dXJuIHJ9cmV0dXJuIHRoaXMuYXR0cnNfLmF4ZXMueC52YWx1ZUZvcm1hdHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdGhpcy5hdHRyc18uYXhlcy54LnRpY2tlcj10Lm51bWVyaWNUaWNrcyx0aGlzLmF0dHJzXy5heGVzLnguYXhpc0xhYmVsRm9ybWF0dGVyPXQubnVtYmVyQXhpc0xhYmVsRm9ybWF0dGVyLGV9LHQucHJvdG90eXBlLnBhcnNlRGF0YVRhYmxlXz1mdW5jdGlvbihlKXt2YXIgYT1mdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcuZnJvbUNoYXJDb2RlKDY1K3QlMjYpO2Zvcih0PU1hdGguZmxvb3IodC8yNik7dD4wOyllPVN0cmluZy5mcm9tQ2hhckNvZGUoNjUrKHQtMSklMjYpK2UudG9Mb3dlckNhc2UoKSx0PU1hdGguZmxvb3IoKHQtMSkvMjYpO3JldHVybiBlfSxpPWUuZ2V0TnVtYmVyT2ZDb2x1bW5zKCkscj1lLmdldE51bWJlck9mUm93cygpLG49ZS5nZXRDb2x1bW5UeXBlKDApO2lmKCJkYXRlIj09bnx8ImRhdGV0aW1lIj09bil0aGlzLmF0dHJzXy54VmFsdWVQYXJzZXI9dC5kYXRlUGFyc2VyLHRoaXMuYXR0cnNfLmF4ZXMueC52YWx1ZUZvcm1hdHRlcj10LmRhdGVWYWx1ZUZvcm1hdHRlcix0aGlzLmF0dHJzXy5heGVzLngudGlja2VyPXQuZGF0ZVRpY2tlcix0aGlzLmF0dHJzXy5heGVzLnguYXhpc0xhYmVsRm9ybWF0dGVyPXQuZGF0ZUF4aXNMYWJlbEZvcm1hdHRlcjtlbHNle2lmKCJudW1iZXIiIT1uKXJldHVybiBjb25zb2xlLmVycm9yKCJvbmx5ICdkYXRlJywgJ2RhdGV0aW1lJyBhbmQgJ251bWJlcicgdHlwZXMgYXJlIHN1cHBvcnRlZCBmb3IgY29sdW1uIDEgb2YgRGF0YVRhYmxlIGlucHV0IChHb3QgJyIrbisiJykiKSxudWxsO3RoaXMuYXR0cnNfLnhWYWx1ZVBhcnNlcj1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0sdGhpcy5hdHRyc18uYXhlcy54LnZhbHVlRm9ybWF0dGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0fSx0aGlzLmF0dHJzXy5heGVzLngudGlja2VyPXQubnVtZXJpY1RpY2tzLHRoaXMuYXR0cnNfLmF4ZXMueC5heGlzTGFiZWxGb3JtYXR0ZXI9dGhpcy5hdHRyc18uYXhlcy54LnZhbHVlRm9ybWF0dGVyfXZhciBvLHMsbD1bXSxoPXt9LHA9ITE7Zm9yKG89MTtpPm87bysrKXt2YXIgZz1lLmdldENvbHVtblR5cGUobyk7aWYoIm51bWJlciI9PWcpbC5wdXNoKG8pO2Vsc2UgaWYoInN0cmluZyI9PWcmJnRoaXMuZ2V0Qm9vbGVhbk9wdGlvbigiZGlzcGxheUFubm90YXRpb25zIikpe3ZhciBkPWxbbC5sZW5ndGgtMV07aC5oYXNPd25Qcm9wZXJ0eShkKT9oW2RdLnB1c2gobyk6aFtkXT1bb10scD0hMH1lbHNlIGNvbnNvbGUuZXJyb3IoIk9ubHkgJ251bWJlcicgaXMgc3VwcG9ydGVkIGFzIGEgZGVwZW5kZW50IHR5cGUgd2l0aCBHdml6LiAnc3RyaW5nJyBpcyBvbmx5IHN1cHBvcnRlZCBpZiBkaXNwbGF5QW5ub3RhdGlvbnMgaXMgdHJ1ZSIpfXZhciB1PVtlLmdldENvbHVtbkxhYmVsKDApXTtmb3Iobz0wO288bC5sZW5ndGg7bysrKXUucHVzaChlLmdldENvbHVtbkxhYmVsKGxbb10pKSx0aGlzLmdldEJvb2xlYW5PcHRpb24oImVycm9yQmFycyIpJiYobys9MSk7dGhpcy5hdHRyc18ubGFiZWxzPXUsaT11Lmxlbmd0aDt2YXIgYz1bXSx5PSExLF89W107Zm9yKG89MDtyPm87bysrKXt2YXIgdj1bXTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0VmFsdWUobywwKSYmbnVsbCE9PWUuZ2V0VmFsdWUobywwKSl7aWYodi5wdXNoKCJkYXRlIj09bnx8ImRhdGV0aW1lIj09bj9lLmdldFZhbHVlKG8sMCkuZ2V0VGltZSgpOmUuZ2V0VmFsdWUobywwKSksdGhpcy5nZXRCb29sZWFuT3B0aW9uKCJlcnJvckJhcnMiKSlmb3Iocz0wO2ktMT5zO3MrKyl2LnB1c2goW2UuZ2V0VmFsdWUobywxKzIqcyksZS5nZXRWYWx1ZShvLDIrMipzKV0pO2Vsc2V7Zm9yKHM9MDtzPGwubGVuZ3RoO3MrKyl7dmFyIGY9bFtzXTtpZih2LnB1c2goZS5nZXRWYWx1ZShvLGYpKSxwJiZoLmhhc093blByb3BlcnR5KGYpJiZudWxsIT09ZS5nZXRWYWx1ZShvLGhbZl1bMF0pKXt2YXIgeD17fTt4LnNlcmllcz1lLmdldENvbHVtbkxhYmVsKGYpLHgueHZhbD12WzBdLHguc2hvcnRUZXh0PWEoXy5sZW5ndGgpLHgudGV4dD0iIjtmb3IodmFyIG09MDttPGhbZl0ubGVuZ3RoO20rKyltJiYoeC50ZXh0Kz0iXG4iKSx4LnRleHQrPWUuZ2V0VmFsdWUobyxoW2ZdW21dKTtfLnB1c2goeCl9fWZvcihzPTA7czx2Lmxlbmd0aDtzKyspaXNGaW5pdGUodltzXSl8fCh2W3NdPW51bGwpfWMubGVuZ3RoPjAmJnZbMF08Y1tjLmxlbmd0aC0xXVswXSYmKHk9ITApLGMucHVzaCh2KX1lbHNlIGNvbnNvbGUud2FybigiSWdub3Jpbmcgcm93ICIrbysiIG9mIERhdGFUYWJsZSBiZWNhdXNlIG9mIHVuZGVmaW5lZCBvciBudWxsIGZpcnN0IGNvbHVtbi4iKX15JiYoY29uc29sZS53YXJuKCJEYXRhVGFibGUgaXMgb3V0IG9mIG9yZGVyOyBvcmRlciBpdCBjb3JyZWN0bHkgdG8gc3BlZWQgbG9hZGluZy4iKSxjLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSkpLHRoaXMucmF3RGF0YV89YyxfLmxlbmd0aD4wJiZ0aGlzLnNldEFubm90YXRpb25zKF8sITApLHRoaXMuYXR0cmlidXRlc18ucmVwYXJzZVNlcmllcygpfSx0LnByb3RvdHlwZS5jYXNjYWRlRGF0YURpZFVwZGF0ZUV2ZW50Xz1mdW5jdGlvbigpe3RoaXMuY2FzY2FkZUV2ZW50c18oImRhdGFEaWRVcGRhdGUiLHt9KX0sdC5wcm90b3R5cGUuc3RhcnRfPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5maWxlXztpZigiZnVuY3Rpb24iPT10eXBlb2YgZSYmKGU9ZSgpKSx0LmlzQXJyYXlMaWtlKGUpKXRoaXMucmF3RGF0YV89dGhpcy5wYXJzZUFycmF5XyhlKSx0aGlzLmNhc2NhZGVEYXRhRGlkVXBkYXRlRXZlbnRfKCksdGhpcy5wcmVkcmF3XygpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRDb2x1bW5SYW5nZSl0aGlzLnBhcnNlRGF0YVRhYmxlXyhlKSx0aGlzLmNhc2NhZGVEYXRhRGlkVXBkYXRlRXZlbnRfKCksdGhpcy5wcmVkcmF3XygpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgYT10LmRldGVjdExpbmVEZWxpbWl0ZXIoZSk7aWYoYSl0aGlzLmxvYWRlZEV2ZW50XyhlKTtlbHNle3ZhciBpO2k9d2luZG93LlhNTEh0dHBSZXF1ZXN0P25ldyBYTUxIdHRwUmVxdWVzdDpuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTt2YXIgcj10aGlzO2kub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09aS5yZWFkeVN0YXRlJiYoMjAwPT09aS5zdGF0dXN8fDA9PT1pLnN0YXR1cykmJnIubG9hZGVkRXZlbnRfKGkucmVzcG9uc2VUZXh0KX0saS5vcGVuKCJHRVQiLGUsITApLGkuc2VuZChudWxsKX19ZWxzZSBjb25zb2xlLmVycm9yKCJVbmtub3duIGRhdGEgZm9ybWF0OiAiK3R5cGVvZiBlKX0sdC5wcm90b3R5cGUudXBkYXRlT3B0aW9ucz1mdW5jdGlvbihlLGEpeyJ1bmRlZmluZWQiPT10eXBlb2YgYSYmKGE9ITEpO3ZhciBpPWUuZmlsZSxyPXQubWFwTGVnYWN5T3B0aW9uc18oZSk7InJvbGxQZXJpb2QiaW4gciYmKHRoaXMucm9sbFBlcmlvZF89ci5yb2xsUGVyaW9kKSwiZGF0ZVdpbmRvdyJpbiByJiYodGhpcy5kYXRlV2luZG93Xz1yLmRhdGVXaW5kb3csImlzWm9vbWVkSWdub3JlUHJvZ3JhbW1hdGljWm9vbSJpbiByfHwodGhpcy56b29tZWRfeF89bnVsbCE9PXIuZGF0ZVdpbmRvdykpLCJ2YWx1ZVJhbmdlImluIHImJiEoImlzWm9vbWVkSWdub3JlUHJvZ3JhbW1hdGljWm9vbSJpbiByKSYmKHRoaXMuem9vbWVkX3lfPW51bGwhPT1yLnZhbHVlUmFuZ2UpO3ZhciBuPXQuaXNQaXhlbENoYW5naW5nT3B0aW9uTGlzdCh0aGlzLmF0dHJfKCJsYWJlbHMiKSxyKTt0LnVwZGF0ZURlZXAodGhpcy51c2VyX2F0dHJzXyxyKSx0aGlzLmF0dHJpYnV0ZXNfLnJlcGFyc2VTZXJpZXMoKSxpPyh0aGlzLmNhc2NhZGVFdmVudHNfKCJkYXRhV2lsbFVwZGF0ZSIse30pLHRoaXMuZmlsZV89aSxhfHx0aGlzLnN0YXJ0XygpKTphfHwobj90aGlzLnByZWRyYXdfKCk6dGhpcy5yZW5kZXJHcmFwaF8oITEpKX0sdC5tYXBMZWdhY3lPcHRpb25zXz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIGEgaW4gdCl0Lmhhc093blByb3BlcnR5KGEpJiYiZmlsZSIhPWEmJnQuaGFzT3duUHJvcGVydHkoYSkmJihlW2FdPXRbYV0pO3ZhciBpPWZ1bmN0aW9uKHQsYSxpKXtlLmF4ZXN8fChlLmF4ZXM9e30pLGUuYXhlc1t0XXx8KGUuYXhlc1t0XT17fSksZS5heGVzW3RdW2FdPWl9LHI9ZnVuY3Rpb24oYSxyLG4peyJ1bmRlZmluZWQiIT10eXBlb2YgdFthXSYmKGNvbnNvbGUud2FybigiT3B0aW9uICIrYSsiIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgIituKyIgb3B0aW9uIGZvciB0aGUgIityKyIgYXhpcyBpbnN0ZWFkLiAoZS5nLiB7IGF4ZXMgOiB7ICIrcisiIDogeyAiK24rIiA6IC4uLiB9IH0gfSAoc2VlIGh0dHA6Ly9keWdyYXBocy5jb20vcGVyLWF4aXMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKSxpKHIsbix0W2FdKSxkZWxldGUgZVthXSl9O3JldHVybiByKCJ4VmFsdWVGb3JtYXR0ZXIiLCJ4IiwidmFsdWVGb3JtYXR0ZXIiKSxyKCJwaXhlbHNQZXJYTGFiZWwiLCJ4IiwicGl4ZWxzUGVyTGFiZWwiKSxyKCJ4QXhpc0xhYmVsRm9ybWF0dGVyIiwieCIsImF4aXNMYWJlbEZvcm1hdHRlciIpLHIoInhUaWNrZXIiLCJ4IiwidGlja2VyIikscigieVZhbHVlRm9ybWF0dGVyIiwieSIsInZhbHVlRm9ybWF0dGVyIikscigicGl4ZWxzUGVyWUxhYmVsIiwieSIsInBpeGVsc1BlckxhYmVsIikscigieUF4aXNMYWJlbEZvcm1hdHRlciIsInkiLCJheGlzTGFiZWxGb3JtYXR0ZXIiKSxyKCJ5VGlja2VyIiwieSIsInRpY2tlciIpLHIoImRyYXdYR3JpZCIsIngiLCJkcmF3R3JpZCIpLHIoImRyYXdYQXhpcyIsIngiLCJkcmF3QXhpcyIpLHIoImRyYXdZR3JpZCIsInkiLCJkcmF3R3JpZCIpLHIoImRyYXdZQXhpcyIsInkiLCJkcmF3QXhpcyIpLHIoInhBeGlzTGFiZWxXaWR0aCIsIngiLCJheGlzTGFiZWxXaWR0aCIpLHIoInlBeGlzTGFiZWxXaWR0aCIsInkiLCJheGlzTGFiZWxXaWR0aCIpLGV9LHQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLnJlc2l6ZV9sb2NrKXt0aGlzLnJlc2l6ZV9sb2NrPSEwLG51bGw9PT10IT0obnVsbD09PWUpJiYoY29uc29sZS53YXJuKCJEeWdyYXBoLnJlc2l6ZSgpIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB6ZXJvIHBhcmFtZXRlcnMgb3IgdHdvIG5vbi1OVUxMIHBhcmFtZXRlcnMuIFByZXRlbmRpbmcgaXQgd2FzIHplcm8uIiksdD1lPW51bGwpO3ZhciBhPXRoaXMud2lkdGhfLGk9dGhpcy5oZWlnaHRfO3Q/KHRoaXMubWFpbmRpdl8uc3R5bGUud2lkdGg9dCsicHgiLHRoaXMubWFpbmRpdl8uc3R5bGUuaGVpZ2h0PWUrInB4Iix0aGlzLndpZHRoXz10LHRoaXMuaGVpZ2h0Xz1lKToodGhpcy53aWR0aF89dGhpcy5tYWluZGl2Xy5jbGllbnRXaWR0aCx0aGlzLmhlaWdodF89dGhpcy5tYWluZGl2Xy5jbGllbnRIZWlnaHQpLChhIT10aGlzLndpZHRoX3x8aSE9dGhpcy5oZWlnaHRfKSYmKHRoaXMucmVzaXplRWxlbWVudHNfKCksdGhpcy5wcmVkcmF3XygpKSx0aGlzLnJlc2l6ZV9sb2NrPSExfX0sdC5wcm90b3R5cGUuYWRqdXN0Um9sbD1mdW5jdGlvbih0KXt0aGlzLnJvbGxQZXJpb2RfPXQsdGhpcy5wcmVkcmF3XygpfSx0LnByb3RvdHlwZS52aXNpYmlsaXR5PWZ1bmN0aW9uKCl7Zm9yKHRoaXMuZ2V0T3B0aW9uKCJ2aXNpYmlsaXR5Iil8fCh0aGlzLmF0dHJzXy52aXNpYmlsaXR5PVtdKTt0aGlzLmdldE9wdGlvbigidmlzaWJpbGl0eSIpLmxlbmd0aDx0aGlzLm51bUNvbHVtbnMoKS0xOyl0aGlzLmF0dHJzXy52aXNpYmlsaXR5LnB1c2goITApO3JldHVybiB0aGlzLmdldE9wdGlvbigidmlzaWJpbGl0eSIpfSx0LnByb3RvdHlwZS5zZXRWaXNpYmlsaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIGE9dGhpcy52aXNpYmlsaXR5KCk7MD50fHx0Pj1hLmxlbmd0aD9jb25zb2xlLndhcm4oImludmFsaWQgc2VyaWVzIG51bWJlciBpbiBzZXRWaXNpYmlsaXR5OiAiK3QpOihhW3RdPWUsdGhpcy5wcmVkcmF3XygpKX0sdC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybnt3aWR0aDp0aGlzLndpZHRoXyxoZWlnaHQ6dGhpcy5oZWlnaHRffX0sdC5wcm90b3R5cGUuc2V0QW5ub3RhdGlvbnM9ZnVuY3Rpb24oZSxhKXtyZXR1cm4gdC5hZGRBbm5vdGF0aW9uUnVsZSgpLHRoaXMuYW5ub3RhdGlvbnNfPWUsdGhpcy5sYXlvdXRfPyh0aGlzLmxheW91dF8uc2V0QW5ub3RhdGlvbnModGhpcy5hbm5vdGF0aW9uc18pLHZvaWQoYXx8dGhpcy5wcmVkcmF3XygpKSk6dm9pZCBjb25zb2xlLndhcm4oIlRyaWVkIHRvIHNldEFubm90YXRpb25zIGJlZm9yZSBkeWdyYXBoIHdhcyByZWFkeS4gVHJ5IHNldHRpbmcgdGhlbSBpbiBhIHJlYWR5KCkgYmxvY2suIFNlZSBkeWdyYXBocy5jb20vdGVzdHMvYW5ub3RhdGlvbi5odG1sIil9LHQucHJvdG90eXBlLmFubm90YXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5ub3RhdGlvbnNffSx0LnByb3RvdHlwZS5nZXRMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmF0dHJfKCJsYWJlbHMiKTtyZXR1cm4gdD90LnNsaWNlKCk6bnVsbH0sdC5wcm90b3R5cGUuaW5kZXhGcm9tU2V0TmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZXRJbmRleEJ5TmFtZV9bdF19LHQucHJvdG90eXBlLnJlYWR5PWZ1bmN0aW9uKHQpe3RoaXMuaXNfaW5pdGlhbF9kcmF3Xz90aGlzLnJlYWR5Rm5zXy5wdXNoKHQpOnQuY2FsbCh0aGlzLHRoaXMpfSx0LmFkZEFubm90YXRpb25SdWxlPWZ1bmN0aW9uKCl7aWYoIXQuYWRkZWRBbm5vdGF0aW9uQ1NTKXt2YXIgZT0iYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB0ZXh0LWFsaWduOiBjZW50ZXI7IixhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7YS50eXBlPSJ0ZXh0L2NzcyIsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChhKTtmb3IodmFyIGk9MDtpPGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDtpKyspaWYoIWRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLmRpc2FibGVkKXt2YXIgcj1kb2N1bWVudC5zdHlsZVNoZWV0c1tpXTt0cnl7aWYoci5pbnNlcnRSdWxlKXt2YXIgbj1yLmNzc1J1bGVzP3IuY3NzUnVsZXMubGVuZ3RoOjA7ci5pbnNlcnRSdWxlKCIuZHlncmFwaERlZmF1bHRBbm5vdGF0aW9uIHsgIitlKyIgfSIsbil9ZWxzZSByLmFkZFJ1bGUmJnIuYWRkUnVsZSgiLmR5Z3JhcGhEZWZhdWx0QW5ub3RhdGlvbiIsZSk7cmV0dXJuIHZvaWQodC5hZGRlZEFubm90YXRpb25DU1M9ITApfWNhdGNoKG8pe319Y29uc29sZS53YXJuKCJVbmFibGUgdG8gYWRkIGRlZmF1bHQgYW5ub3RhdGlvbiBDU1MgcnVsZTsgZGlzcGxheSBtYXkgYmUgb2ZmLiIpfX0sIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSYmKG1vZHVsZS5leHBvcnRzPXQpLHR9KCk7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQodCl7dmFyIGU9YS5leGVjKHQpO2lmKCFlKXJldHVybiBudWxsO3ZhciBpPXBhcnNlSW50KGVbMV0sMTApLHI9cGFyc2VJbnQoZVsyXSwxMCksbj1wYXJzZUludChlWzNdLDEwKTtyZXR1cm4gZVs0XT97cjppLGc6cixiOm4sYTpwYXJzZUZsb2F0KGVbNF0pfTp7cjppLGc6cixiOm59fUR5Z3JhcGguTE9HX1NDQUxFPTEwLER5Z3JhcGguTE5fVEVOPU1hdGgubG9nKER5Z3JhcGguTE9HX1NDQUxFKSxEeWdyYXBoLmxvZzEwPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9EeWdyYXBoLkxOX1RFTn0sRHlncmFwaC5ET1RURURfTElORT1bMiwyXSxEeWdyYXBoLkRBU0hFRF9MSU5FPVs3LDNdLER5Z3JhcGguRE9UX0RBU0hfTElORT1bNywyLDIsMl0sRHlncmFwaC5nZXRDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldENvbnRleHQoIjJkIil9LER5Z3JhcGguYWRkRXZlbnQ9ZnVuY3Rpb24odCxlLGEpe3QuYWRkRXZlbnRMaXN0ZW5lcj90LmFkZEV2ZW50TGlzdGVuZXIoZSxhLCExKToodFtlK2FdPWZ1bmN0aW9uKCl7YSh3aW5kb3cuZXZlbnQpfSx0LmF0dGFjaEV2ZW50KCJvbiIrZSx0W2UrYV0pKX0sRHlncmFwaC5wcm90b3R5cGUuYWRkQW5kVHJhY2tFdmVudD1mdW5jdGlvbih0LGUsYSl7RHlncmFwaC5hZGRFdmVudCh0LGUsYSksdGhpcy5yZWdpc3RlcmVkRXZlbnRzXy5wdXNoKHtlbGVtOnQsdHlwZTplLGZuOmF9KX0sRHlncmFwaC5yZW1vdmVFdmVudD1mdW5jdGlvbih0LGUsYSl7aWYodC5yZW1vdmVFdmVudExpc3RlbmVyKXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGEsITEpO2Vsc2V7dHJ5e3QuZGV0YWNoRXZlbnQoIm9uIitlLHRbZSthXSl9Y2F0Y2goaSl7fXRbZSthXT1udWxsfX0sRHlncmFwaC5wcm90b3R5cGUucmVtb3ZlVHJhY2tlZEV2ZW50c189ZnVuY3Rpb24oKXtpZih0aGlzLnJlZ2lzdGVyZWRFdmVudHNfKWZvcih2YXIgdD0wO3Q8dGhpcy5yZWdpc3RlcmVkRXZlbnRzXy5sZW5ndGg7dCsrKXt2YXIgZT10aGlzLnJlZ2lzdGVyZWRFdmVudHNfW3RdO0R5Z3JhcGgucmVtb3ZlRXZlbnQoZS5lbGVtLGUudHlwZSxlLmZuKX10aGlzLnJlZ2lzdGVyZWRFdmVudHNfPVtdfSxEeWdyYXBoLmNhbmNlbEV2ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PXQ/dDp3aW5kb3cuZXZlbnQsdC5zdG9wUHJvcGFnYXRpb24mJnQuc3RvcFByb3BhZ2F0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCYmdC5wcmV2ZW50RGVmYXVsdCgpLHQuY2FuY2VsQnViYmxlPSEwLHQuY2FuY2VsPSEwLHQucmV0dXJuVmFsdWU9ITEsITF9LER5Z3JhcGguaHN2VG9SR0I9ZnVuY3Rpb24odCxlLGEpe3ZhciBpLHIsbjtpZigwPT09ZSlpPWEscj1hLG49YTtlbHNle3ZhciBvPU1hdGguZmxvb3IoNip0KSxzPTYqdC1vLGw9YSooMS1lKSxoPWEqKDEtZSpzKSxwPWEqKDEtZSooMS1zKSk7c3dpdGNoKG8pe2Nhc2UgMTppPWgscj1hLG49bDticmVhaztjYXNlIDI6aT1sLHI9YSxuPXA7YnJlYWs7Y2FzZSAzOmk9bCxyPWgsbj1hO2JyZWFrO2Nhc2UgNDppPXAscj1sLG49YTticmVhaztjYXNlIDU6aT1hLHI9bCxuPWg7YnJlYWs7Y2FzZSA2OmNhc2UgMDppPWEscj1wLG49bH19cmV0dXJuIGk9TWF0aC5mbG9vcigyNTUqaSsuNSkscj1NYXRoLmZsb29yKDI1NSpyKy41KSxuPU1hdGguZmxvb3IoMjU1Km4rLjUpLCJyZ2IoIitpKyIsIityKyIsIituKyIpIn0sRHlncmFwaC5maW5kUG9zPWZ1bmN0aW9uKHQpe3ZhciBlPTAsYT0wO2lmKHQub2Zmc2V0UGFyZW50KWZvcih2YXIgaT10Ozspe3ZhciByPSIwIixuPSIwIjtpZih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSl7CnZhciBvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCk7cj1vLmJvcmRlckxlZnR8fCIwIixuPW8uYm9yZGVyVG9wfHwiMCJ9aWYoZSs9cGFyc2VJbnQociwxMCksYSs9cGFyc2VJbnQobiwxMCksZSs9aS5vZmZzZXRMZWZ0LGErPWkub2Zmc2V0VG9wLCFpLm9mZnNldFBhcmVudClicmVhaztpPWkub2Zmc2V0UGFyZW50fWVsc2UgdC54JiYoZSs9dC54KSx0LnkmJihhKz10LnkpO2Zvcig7dCYmdCE9ZG9jdW1lbnQuYm9keTspZS09dC5zY3JvbGxMZWZ0LGEtPXQuc2Nyb2xsVG9wLHQ9dC5wYXJlbnROb2RlO3JldHVybnt4OmUseTphfX0sRHlncmFwaC5wYWdlWD1mdW5jdGlvbih0KXtpZih0LnBhZ2VYKXJldHVybiF0LnBhZ2VYfHx0LnBhZ2VYPDA/MDp0LnBhZ2VYO3ZhciBlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWRvY3VtZW50LmJvZHk7cmV0dXJuIHQuY2xpZW50WCsoZS5zY3JvbGxMZWZ0fHxhLnNjcm9sbExlZnQpLShlLmNsaWVudExlZnR8fDApfSxEeWdyYXBoLnBhZ2VZPWZ1bmN0aW9uKHQpe2lmKHQucGFnZVkpcmV0dXJuIXQucGFnZVl8fHQucGFnZVk8MD8wOnQucGFnZVk7dmFyIGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9ZG9jdW1lbnQuYm9keTtyZXR1cm4gdC5jbGllbnRZKyhlLnNjcm9sbFRvcHx8YS5zY3JvbGxUb3ApLShlLmNsaWVudFRvcHx8MCl9LER5Z3JhcGguZHJhZ0dldFhfPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIER5Z3JhcGgucGFnZVgodCktZS5weH0sRHlncmFwaC5kcmFnR2V0WV89ZnVuY3Rpb24odCxlKXtyZXR1cm4gRHlncmFwaC5wYWdlWSh0KS1lLnB5fSxEeWdyYXBoLmlzT0s9ZnVuY3Rpb24odCl7cmV0dXJuISF0JiYhaXNOYU4odCl9LER5Z3JhcGguaXNWYWxpZFBvaW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/bnVsbD09PXQueXZhbD8hMTpudWxsPT09dC54fHx2b2lkIDA9PT10Lng/ITE6bnVsbD09PXQueXx8dm9pZCAwPT09dC55PyExOmlzTmFOKHQueCl8fCFlJiZpc05hTih0LnkpPyExOiEwOiExfSxEeWdyYXBoLmZsb2F0Rm9ybWF0PWZ1bmN0aW9uKHQsZSl7dmFyIGE9TWF0aC5taW4oTWF0aC5tYXgoMSxlfHwyKSwyMSk7cmV0dXJuIE1hdGguYWJzKHQpPC4wMDEmJjAhPT10P3QudG9FeHBvbmVudGlhbChhLTEpOnQudG9QcmVjaXNpb24oYSl9LER5Z3JhcGguemVyb3BhZD1mdW5jdGlvbih0KXtyZXR1cm4gMTA+dD8iMCIrdDoiIit0fSxEeWdyYXBoLkRhdGVBY2Nlc3NvcnNMb2NhbD17Z2V0RnVsbFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0sZ2V0TW9udGg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0sZ2V0RGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCl9LGdldEhvdXJzOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9LGdldE1pbnV0ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX0sZ2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpfSxnZXREYXk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCl9LG1ha2VEYXRlOmZ1bmN0aW9uKHQsZSxhLGkscixuLG8pe3JldHVybiBuZXcgRGF0ZSh0LGUsYSxpLHIsbixvKX19LER5Z3JhcGguRGF0ZUFjY2Vzc29yc1VUQz17Z2V0RnVsbFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0sZ2V0TW9udGg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0sZ2V0RGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCl9LGdldEhvdXJzOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9LGdldE1pbnV0ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0sZ2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXREYXk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9LG1ha2VEYXRlOmZ1bmN0aW9uKHQsZSxhLGkscixuLG8pe3JldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0LGUsYSxpLHIsbixvKSl9fSxEeWdyYXBoLmhtc1N0cmluZ189ZnVuY3Rpb24odCxlLGEpe3ZhciBpPUR5Z3JhcGguemVyb3BhZCxyPWkodCkrIjoiK2koZSk7cmV0dXJuIGEmJihyKz0iOiIraShhKSkscn0sRHlncmFwaC5kYXRlU3RyaW5nXz1mdW5jdGlvbih0LGUpe3ZhciBhPUR5Z3JhcGguemVyb3BhZCxpPWU/RHlncmFwaC5EYXRlQWNjZXNzb3JzVVRDOkR5Z3JhcGguRGF0ZUFjY2Vzc29yc0xvY2FsLHI9bmV3IERhdGUodCksbj1pLmdldEZ1bGxZZWFyKHIpLG89aS5nZXRNb250aChyKSxzPWkuZ2V0RGF0ZShyKSxsPWkuZ2V0SG91cnMociksaD1pLmdldE1pbnV0ZXMocikscD1pLmdldFNlY29uZHMociksZz0iIituLGQ9YShvKzEpLHU9YShzKSxjPTM2MDAqbCs2MCpoK3AseT1nKyIvIitkKyIvIit1O3JldHVybiBjJiYoeSs9IiAiK0R5Z3JhcGguaG1zU3RyaW5nXyhsLGgscCkpLHl9LER5Z3JhcGgucm91bmRfPWZ1bmN0aW9uKHQsZSl7dmFyIGE9TWF0aC5wb3coMTAsZSk7cmV0dXJuIE1hdGgucm91bmQodCphKS9hfSxEeWdyYXBoLmJpbmFyeVNlYXJjaD1mdW5jdGlvbih0LGUsYSxpLHIpe2lmKChudWxsPT09aXx8dm9pZCAwPT09aXx8bnVsbD09PXJ8fHZvaWQgMD09PXIpJiYoaT0wLHI9ZS5sZW5ndGgtMSksaT5yKXJldHVybi0xOyhudWxsPT09YXx8dm9pZCAwPT09YSkmJihhPTApO3ZhciBuLG89ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTAmJnQ8ZS5sZW5ndGh9LHM9cGFyc2VJbnQoKGkrcikvMiwxMCksbD1lW3NdO3JldHVybiBsPT10P3M6bD50P2E+MCYmKG49cy0xLG8obikmJmVbbl08dCk/czpEeWdyYXBoLmJpbmFyeVNlYXJjaCh0LGUsYSxpLHMtMSk6dD5sPzA+YSYmKG49cysxLG8obikmJmVbbl0+dCk/czpEeWdyYXBoLmJpbmFyeVNlYXJjaCh0LGUsYSxzKzEscik6LTF9LER5Z3JhcGguZGF0ZVBhcnNlcj1mdW5jdGlvbih0KXt2YXIgZSxhO2lmKCgtMT09dC5zZWFyY2goIi0iKXx8LTEhPXQuc2VhcmNoKCJUIil8fC0xIT10LnNlYXJjaCgiWiIpKSYmKGE9RHlncmFwaC5kYXRlU3RyVG9NaWxsaXModCksYSYmIWlzTmFOKGEpKSlyZXR1cm4gYTtpZigtMSE9dC5zZWFyY2goIi0iKSl7Zm9yKGU9dC5yZXBsYWNlKCItIiwiLyIsImciKTstMSE9ZS5zZWFyY2goIi0iKTspZT1lLnJlcGxhY2UoIi0iLCIvIik7YT1EeWdyYXBoLmRhdGVTdHJUb01pbGxpcyhlKX1lbHNlIDg9PXQubGVuZ3RoPyhlPXQuc3Vic3RyKDAsNCkrIi8iK3Quc3Vic3RyKDQsMikrIi8iK3Quc3Vic3RyKDYsMiksYT1EeWdyYXBoLmRhdGVTdHJUb01pbGxpcyhlKSk6YT1EeWdyYXBoLmRhdGVTdHJUb01pbGxpcyh0KTtyZXR1cm4oIWF8fGlzTmFOKGEpKSYmY29uc29sZS5lcnJvcigiQ291bGRuJ3QgcGFyc2UgIit0KyIgYXMgYSBkYXRlIiksYX0sRHlncmFwaC5kYXRlU3RyVG9NaWxsaXM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKHQpLmdldFRpbWUoKX0sRHlncmFwaC51cGRhdGU9ZnVuY3Rpb24odCxlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGUmJm51bGwhPT1lKWZvcih2YXIgYSBpbiBlKWUuaGFzT3duUHJvcGVydHkoYSkmJih0W2FdPWVbYV0pO3JldHVybiB0fSxEeWdyYXBoLnVwZGF0ZURlZXA9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBhKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgTm9kZT90IGluc3RhbmNlb2YgTm9kZToib2JqZWN0Ij09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgdC5ub2RlVHlwZSYmInN0cmluZyI9PXR5cGVvZiB0Lm5vZGVOYW1lfWlmKCJ1bmRlZmluZWQiIT10eXBlb2YgZSYmbnVsbCE9PWUpZm9yKHZhciBpIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShpKSYmKG51bGw9PT1lW2ldP3RbaV09bnVsbDpEeWdyYXBoLmlzQXJyYXlMaWtlKGVbaV0pP3RbaV09ZVtpXS5zbGljZSgpOmEoZVtpXSk/dFtpXT1lW2ldOiJvYmplY3QiPT10eXBlb2YgZVtpXT8oKCJvYmplY3QiIT10eXBlb2YgdFtpXXx8bnVsbD09PXRbaV0pJiYodFtpXT17fSksRHlncmFwaC51cGRhdGVEZWVwKHRbaV0sZVtpXSkpOnRbaV09ZVtpXSk7cmV0dXJuIHR9LER5Z3JhcGguaXNBcnJheUxpa2U9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIm9iamVjdCIhPWUmJigiZnVuY3Rpb24iIT1lfHwiZnVuY3Rpb24iIT10eXBlb2YgdC5pdGVtKXx8bnVsbD09PXR8fCJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fDM9PT10Lm5vZGVUeXBlPyExOiEwfSxEeWdyYXBoLmlzRGF0ZUxpa2U9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0fHxudWxsPT09dHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQuZ2V0VGltZT8hMTohMH0sRHlncmFwaC5jbG9uZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sYT0wO2E8dC5sZW5ndGg7YSsrKWUucHVzaChEeWdyYXBoLmlzQXJyYXlMaWtlKHRbYV0pP0R5Z3JhcGguY2xvbmUodFthXSk6dFthXSk7cmV0dXJuIGV9LER5Z3JhcGguY3JlYXRlQ2FudmFzPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZT0vTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5vcGVyYTtyZXR1cm4gZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBHX3ZtbENhbnZhc01hbmFnZXImJih0PUdfdm1sQ2FudmFzTWFuYWdlci5pbml0RWxlbWVudCh0KSksdH0sRHlncmFwaC5nZXRDb250ZXh0UGl4ZWxSYXRpbz1mdW5jdGlvbih0KXt0cnl7dmFyIGU9d2luZG93LmRldmljZVBpeGVsUmF0aW8sYT10LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MTtyZXR1cm4gdm9pZCAwIT09ZT9lL2E6MX1jYXRjaChpKXtyZXR1cm4gMX19LER5Z3JhcGguaXNBbmRyb2lkPWZ1bmN0aW9uKCl7cmV0dXJuL0FuZHJvaWQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LER5Z3JhcGguSXRlcmF0b3I9ZnVuY3Rpb24odCxlLGEsaSl7ZT1lfHwwLGE9YXx8dC5sZW5ndGgsdGhpcy5oYXNOZXh0PSEwLHRoaXMucGVlaz1udWxsLHRoaXMuc3RhcnRfPWUsdGhpcy5hcnJheV89dCx0aGlzLnByZWRpY2F0ZV89aSx0aGlzLmVuZF89TWF0aC5taW4odC5sZW5ndGgsZSthKSx0aGlzLm5leHRJZHhfPWUtMSx0aGlzLm5leHQoKX0sRHlncmFwaC5JdGVyYXRvci5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe2lmKCF0aGlzLmhhc05leHQpcmV0dXJuIG51bGw7Zm9yKHZhciB0PXRoaXMucGVlayxlPXRoaXMubmV4dElkeF8rMSxhPSExO2U8dGhpcy5lbmRfOyl7aWYoIXRoaXMucHJlZGljYXRlX3x8dGhpcy5wcmVkaWNhdGVfKHRoaXMuYXJyYXlfLGUpKXt0aGlzLnBlZWs9dGhpcy5hcnJheV9bZV0sYT0hMDticmVha31lKyt9cmV0dXJuIHRoaXMubmV4dElkeF89ZSxhfHwodGhpcy5oYXNOZXh0PSExLHRoaXMucGVlaz1udWxsKSx0fSxEeWdyYXBoLmNyZWF0ZUl0ZXJhdG9yPWZ1bmN0aW9uKHQsZSxhLGkpe3JldHVybiBuZXcgRHlncmFwaC5JdGVyYXRvcih0LGUsYSxpKX0sRHlncmFwaC5yZXF1ZXN0QW5pbUZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKHQpe3dpbmRvdy5zZXRUaW1lb3V0KHQsMWUzLzYwKX19KCksRHlncmFwaC5yZXBlYXRBbmRDbGVhbnVwPWZ1bmN0aW9uKHQsZSxhLGkpe3ZhciByLG49MCxvPShuZXcgRGF0ZSkuZ2V0VGltZSgpO2lmKHQobiksMT09ZSlyZXR1cm4gdm9pZCBpKCk7dmFyIHM9ZS0xOyFmdW5jdGlvbiBsKCl7bj49ZXx8RHlncmFwaC5yZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2luZG93LGZ1bmN0aW9uKCl7dmFyIGU9KG5ldyBEYXRlKS5nZXRUaW1lKCksaD1lLW87cj1uLG49TWF0aC5mbG9vcihoL2EpO3ZhciBwPW4tcixnPW4rcD5zO2d8fG4+PXM/KHQocyksaSgpKTooMCE9PXAmJnQobiksbCgpKX0pfSgpfTt2YXIgZT17YW5ub3RhdGlvbkNsaWNrSGFuZGxlcjohMCxhbm5vdGF0aW9uRGJsQ2xpY2tIYW5kbGVyOiEwLGFubm90YXRpb25Nb3VzZU91dEhhbmRsZXI6ITAsYW5ub3RhdGlvbk1vdXNlT3ZlckhhbmRsZXI6ITAsYXhpc0xhYmVsQ29sb3I6ITAsYXhpc0xpbmVDb2xvcjohMCxheGlzTGluZVdpZHRoOiEwLGNsaWNrQ2FsbGJhY2s6ITAsZHJhd0NhbGxiYWNrOiEwLGRyYXdIaWdobGlnaHRQb2ludENhbGxiYWNrOiEwLGRyYXdQb2ludHM6ITAsZHJhd1BvaW50Q2FsbGJhY2s6ITAsZHJhd1hHcmlkOiEwLGRyYXdZR3JpZDohMCxmaWxsQWxwaGE6ITAsZ3JpZExpbmVDb2xvcjohMCxncmlkTGluZVdpZHRoOiEwLGhpZGVPdmVybGF5T25Nb3VzZU91dDohMCxoaWdobGlnaHRDYWxsYmFjazohMCxoaWdobGlnaHRDaXJjbGVTaXplOiEwLGludGVyYWN0aW9uTW9kZWw6ITAsaXNab29tZWRJZ25vcmVQcm9ncmFtbWF0aWNab29tOiEwLGxhYmVsc0RpdjohMCxsYWJlbHNEaXZTdHlsZXM6ITAsbGFiZWxzRGl2V2lkdGg6ITAsbGFiZWxzS01COiEwLGxhYmVsc0tNRzI6ITAsbGFiZWxzU2VwYXJhdGVMaW5lczohMCxsYWJlbHNTaG93WmVyb1ZhbHVlczohMCxsZWdlbmQ6ITAscGFuRWRnZUZyYWN0aW9uOiEwLHBpeGVsc1BlcllMYWJlbDohMCxwb2ludENsaWNrQ2FsbGJhY2s6ITAscG9pbnRTaXplOiEwLHJhbmdlU2VsZWN0b3JQbG90RmlsbENvbG9yOiEwLHJhbmdlU2VsZWN0b3JQbG90U3Ryb2tlQ29sb3I6ITAsc2hvd0xhYmVsc09uSGlnaGxpZ2h0OiEwLHNob3dSb2xsZXI6ITAsc3Ryb2tlV2lkdGg6ITAsdW5kZXJsYXlDYWxsYmFjazohMCx1bmhpZ2hsaWdodENhbGxiYWNrOiEwLHpvb21DYWxsYmFjazohMH07RHlncmFwaC5pc1BpeGVsQ2hhbmdpbmdPcHRpb25MaXN0PWZ1bmN0aW9uKHQsYSl7dmFyIGk9e307aWYodClmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKylpW3Rbcl1dPSEwO3ZhciBuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgYSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoYSkmJiFlW2FdKXJldHVybiEwO3JldHVybiExfTtmb3IodmFyIG8gaW4gYSlpZihhLmhhc093blByb3BlcnR5KG8pKWlmKCJoaWdobGlnaHRTZXJpZXNPcHRzIj09b3x8aVtvXSYmIWEuc2VyaWVzKXtpZihuKGFbb10pKXJldHVybiEwfWVsc2UgaWYoInNlcmllcyI9PW98fCJheGVzIj09byl7dmFyIHM9YVtvXTtmb3IodmFyIGwgaW4gcylpZihzLmhhc093blByb3BlcnR5KGwpJiZuKHNbbF0pKXJldHVybiEwfWVsc2UgaWYoIWVbb10pcmV0dXJuITA7cmV0dXJuITF9LER5Z3JhcGguQ2lyY2xlcz17REVGQVVMVDpmdW5jdGlvbih0LGUsYSxpLHIsbixvKXthLmJlZ2luUGF0aCgpLGEuZmlsbFN0eWxlPW4sYS5hcmMoaSxyLG8sMCwyKk1hdGguUEksITEpLGEuZmlsbCgpfX0sRHlncmFwaC5JRnJhbWVUYXJwPWZ1bmN0aW9uKCl7dGhpcy50YXJwcz1bXX0sRHlncmFwaC5JRnJhbWVUYXJwLnByb3RvdHlwZS5jb3Zlcj1mdW5jdGlvbigpe2Zvcih2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1lIiksZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgYT10W2VdLGk9RHlncmFwaC5maW5kUG9zKGEpLHI9aS54LG49aS55LG89YS5vZmZzZXRXaWR0aCxzPWEub2Zmc2V0SGVpZ2h0LGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGwuc3R5bGUubGVmdD1yKyJweCIsbC5zdHlsZS50b3A9bisicHgiLGwuc3R5bGUud2lkdGg9bysicHgiLGwuc3R5bGUuaGVpZ2h0PXMrInB4IixsLnN0eWxlLnpJbmRleD05OTksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsKSx0aGlzLnRhcnBzLnB1c2gobCl9fSxEeWdyYXBoLklGcmFtZVRhcnAucHJvdG90eXBlLnVuY292ZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHRoaXMudGFycHMubGVuZ3RoO3QrKyl0aGlzLnRhcnBzW3RdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy50YXJwc1t0XSk7dGhpcy50YXJwcz1bXX0sRHlncmFwaC5kZXRlY3RMaW5lRGVsaW1pdGVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgYT10LmNoYXJBdChlKTtpZigiXHIiPT09YSlyZXR1cm4gZSsxPHQubGVuZ3RoJiYiXG4iPT09dC5jaGFyQXQoZSsxKT8iXHJcbiI6YTtpZigiXG4iPT09YSlyZXR1cm4gZSsxPHQubGVuZ3RoJiYiXHIiPT09dC5jaGFyQXQoZSsxKT8iXG5cciI6YX1yZXR1cm4gbnVsbH0sRHlncmFwaC5pc05vZGVDb250YWluZWRCeT1mdW5jdGlvbih0LGUpe2lmKG51bGw9PT1lfHxudWxsPT09dClyZXR1cm4hMTtmb3IodmFyIGE9dDthJiZhIT09ZTspYT1hLnBhcmVudE5vZGU7cmV0dXJuIGE9PT1lfSxEeWdyYXBoLnBvdz1mdW5jdGlvbih0LGUpe3JldHVybiAwPmU/MS9NYXRoLnBvdyh0LC1lKTpNYXRoLnBvdyh0LGUpfTt2YXIgYT0vXnJnYmE/XCgoXGR7MSwzfSksXHMqKFxkezEsM30pLFxzKihcZHsxLDN9KSg/OixccyooWzAxXSg/OlwuXGQrKT8pKT9cKSQvO0R5Z3JhcGgudG9SR0JfPWZ1bmN0aW9uKGUpe3ZhciBhPXQoZSk7aWYoYSlyZXR1cm4gYTt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lLGkuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpO3ZhciByO3JldHVybiByPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlP3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCkuYmFja2dyb3VuZENvbG9yOmkuY3VycmVudFN0eWxlLmJhY2tncm91bmRDb2xvcixkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGkpLHQocil9LER5Z3JhcGguaXNDYW52YXNTdXBwb3J0ZWQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZS5nZXRDb250ZXh0KCIyZCIpfWNhdGNoKGEpe3ZhciBpPW5hdmlnYXRvci5hcHBWZXJzaW9uLm1hdGNoKC9NU0lFIChcZFwuXGQpLykscj0tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm9wZXJhIik7cmV0dXJuIWl8fGlbMV08Nnx8cj8hMTohMH1yZXR1cm4hMH0sRHlncmFwaC5wYXJzZUZsb2F0Xz1mdW5jdGlvbih0LGUsYSl7dmFyIGk9cGFyc2VGbG9hdCh0KTtpZighaXNOYU4oaSkpcmV0dXJuIGk7aWYoL14gKiQvLnRlc3QodCkpcmV0dXJuIG51bGw7aWYoL14gKm5hbiAqJC9pLnRlc3QodCkpcmV0dXJuIDAvMDt2YXIgcj0iVW5hYmxlIHRvIHBhcnNlICciK3QrIicgYXMgYSBudW1iZXIiO3JldHVybiB2b2lkIDAhPT1hJiZ2b2lkIDAhPT1lJiYocis9IiBvbiBsaW5lICIrKDErKGV8fDApKSsiICgnIithKyInKSBvZiBDU1YuIiksY29uc29sZS5lcnJvcihyKSxudWxsfX0oKSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtEeWdyYXBoLkdWaXpDaGFydD1mdW5jdGlvbih0KXt0aGlzLmNvbnRhaW5lcj10fSxEeWdyYXBoLkdWaXpDaGFydC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUpe3RoaXMuY29udGFpbmVyLmlubmVySFRNTD0iIiwidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMuZGF0ZV9ncmFwaCYmdGhpcy5kYXRlX2dyYXBoLmRlc3Ryb3koKSx0aGlzLmRhdGVfZ3JhcGg9bmV3IER5Z3JhcGgodGhpcy5jb250YWluZXIsdCxlKX0sRHlncmFwaC5HVml6Q2hhcnQucHJvdG90eXBlLnNldFNlbGVjdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0hMTt0Lmxlbmd0aCYmKGU9dFswXS5yb3cpLHRoaXMuZGF0ZV9ncmFwaC5zZXRTZWxlY3Rpb24oZSl9LER5Z3JhcGguR1ZpekNoYXJ0LnByb3RvdHlwZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuZGF0ZV9ncmFwaC5nZXRTZWxlY3Rpb24oKTtpZigwPmUpcmV0dXJuIHQ7Zm9yKHZhciBhPXRoaXMuZGF0ZV9ncmFwaC5sYXlvdXRfLnBvaW50cyxpPTA7aTxhLmxlbmd0aDsrK2kpdC5wdXNoKHtyb3c6ZSxjb2x1bW46aSsxfSk7cmV0dXJuIHR9fSgpLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PTEwMDtEeWdyYXBoLkludGVyYWN0aW9uPXt9LER5Z3JhcGguSW50ZXJhY3Rpb24ubWF5YmVUcmVhdE1vdXNlT3BBc0NsaWNrPWZ1bmN0aW9uKHQsZSxhKXthLmRyYWdFbmRYPUR5Z3JhcGguZHJhZ0dldFhfKHQsYSksYS5kcmFnRW5kWT1EeWdyYXBoLmRyYWdHZXRZXyh0LGEpO3ZhciBpPU1hdGguYWJzKGEuZHJhZ0VuZFgtYS5kcmFnU3RhcnRYKSxyPU1hdGguYWJzKGEuZHJhZ0VuZFktYS5kcmFnU3RhcnRZKTsyPmkmJjI+ciYmdm9pZCAwIT09ZS5sYXN0eF8mJi0xIT1lLmxhc3R4XyYmRHlncmFwaC5JbnRlcmFjdGlvbi50cmVhdE1vdXNlT3BBc0NsaWNrKGUsdCxhKSxhLnJlZ2lvbldpZHRoPWksYS5yZWdpb25IZWlnaHQ9cn0sRHlncmFwaC5JbnRlcmFjdGlvbi5zdGFydFBhbj1mdW5jdGlvbih0LGUsYSl7dmFyIGkscjthLmlzUGFubmluZz0hMDt2YXIgbj1lLnhBeGlzUmFuZ2UoKTtpZihlLmdldE9wdGlvbkZvckF4aXMoImxvZ3NjYWxlIiwieCIpPyhhLmluaXRpYWxMZWZ0bW9zdERhdGU9RHlncmFwaC5sb2cxMChuWzBdKSxhLmRhdGVSYW5nZT1EeWdyYXBoLmxvZzEwKG5bMV0pLUR5Z3JhcGgubG9nMTAoblswXSkpOihhLmluaXRpYWxMZWZ0bW9zdERhdGU9blswXSxhLmRhdGVSYW5nZT1uWzFdLW5bMF0pLGEueFVuaXRzUGVyUGl4ZWw9YS5kYXRlUmFuZ2UvKGUucGxvdHRlcl8uYXJlYS53LTEpLGUuZ2V0TnVtZXJpY09wdGlvbigicGFuRWRnZUZyYWN0aW9uIikpe3ZhciBvPWUud2lkdGhfKmUuZ2V0TnVtZXJpY09wdGlvbigicGFuRWRnZUZyYWN0aW9uIikscz1lLnhBeGlzRXh0cmVtZXMoKSxsPWUudG9Eb21YQ29vcmQoc1swXSktbyxoPWUudG9Eb21YQ29vcmQoc1sxXSkrbyxwPWUudG9EYXRhWENvb3JkKGwpLGc9ZS50b0RhdGFYQ29vcmQoaCk7YS5ib3VuZGVkRGF0ZXM9W3AsZ107dmFyIGQ9W10sdT1lLmhlaWdodF8qZS5nZXROdW1lcmljT3B0aW9uKCJwYW5FZGdlRnJhY3Rpb24iKTtmb3IoaT0wO2k8ZS5heGVzXy5sZW5ndGg7aSsrKXtyPWUuYXhlc19baV07dmFyIGM9ci5leHRyZW1lUmFuZ2UseT1lLnRvRG9tWUNvb3JkKGNbMF0saSkrdSxfPWUudG9Eb21ZQ29vcmQoY1sxXSxpKS11LHY9ZS50b0RhdGFZQ29vcmQoeSxpKSxmPWUudG9EYXRhWUNvb3JkKF8saSk7ZFtpXT1bdixmXX1hLmJvdW5kZWRWYWx1ZXM9ZH1mb3IoYS5pczJEUGFuPSExLGEuYXhlcz1bXSxpPTA7aTxlLmF4ZXNfLmxlbmd0aDtpKyspe3I9ZS5heGVzX1tpXTt2YXIgeD17fSxtPWUueUF4aXNSYW5nZShpKSxEPWUuYXR0cmlidXRlc18uZ2V0Rm9yQXhpcygibG9nc2NhbGUiLGkpO0Q/KHguaW5pdGlhbFRvcFZhbHVlPUR5Z3JhcGgubG9nMTAobVsxXSkseC5kcmFnVmFsdWVSYW5nZT1EeWdyYXBoLmxvZzEwKG1bMV0pLUR5Z3JhcGgubG9nMTAobVswXSkpOih4LmluaXRpYWxUb3BWYWx1ZT1tWzFdLHguZHJhZ1ZhbHVlUmFuZ2U9bVsxXS1tWzBdKSx4LnVuaXRzUGVyUGl4ZWw9eC5kcmFnVmFsdWVSYW5nZS8oZS5wbG90dGVyXy5hcmVhLmgtMSksYS5heGVzLnB1c2goeCksKHIudmFsdWVXaW5kb3d8fHIudmFsdWVSYW5nZSkmJihhLmlzMkRQYW49ITApfX0sRHlncmFwaC5JbnRlcmFjdGlvbi5tb3ZlUGFuPWZ1bmN0aW9uKHQsZSxhKXthLmRyYWdFbmRYPUR5Z3JhcGguZHJhZ0dldFhfKHQsYSksYS5kcmFnRW5kWT1EeWdyYXBoLmRyYWdHZXRZXyh0LGEpO3ZhciBpPWEuaW5pdGlhbExlZnRtb3N0RGF0ZS0oYS5kcmFnRW5kWC1hLmRyYWdTdGFydFgpKmEueFVuaXRzUGVyUGl4ZWw7YS5ib3VuZGVkRGF0ZXMmJihpPU1hdGgubWF4KGksYS5ib3VuZGVkRGF0ZXNbMF0pKTt2YXIgcj1pK2EuZGF0ZVJhbmdlO2lmKGEuYm91bmRlZERhdGVzJiZyPmEuYm91bmRlZERhdGVzWzFdJiYoaS09ci1hLmJvdW5kZWREYXRlc1sxXSxyPWkrYS5kYXRlUmFuZ2UpLGUuZ2V0T3B0aW9uRm9yQXhpcygibG9nc2NhbGUiLCJ4Iik/ZS5kYXRlV2luZG93Xz1bTWF0aC5wb3coRHlncmFwaC5MT0dfU0NBTEUsaSksTWF0aC5wb3coRHlncmFwaC5MT0dfU0NBTEUscildOmUuZGF0ZVdpbmRvd189W2kscl0sYS5pczJEUGFuKWZvcih2YXIgbj1hLmRyYWdFbmRZLWEuZHJhZ1N0YXJ0WSxvPTA7bzxlLmF4ZXNfLmxlbmd0aDtvKyspe3ZhciBzPWUuYXhlc19bb10sbD1hLmF4ZXNbb10saD1uKmwudW5pdHNQZXJQaXhlbCxwPWEuYm91bmRlZFZhbHVlcz9hLmJvdW5kZWRWYWx1ZXNbb106bnVsbCxnPWwuaW5pdGlhbFRvcFZhbHVlK2g7cCYmKGc9TWF0aC5taW4oZyxwWzFdKSk7dmFyIGQ9Zy1sLmRyYWdWYWx1ZVJhbmdlO3AmJmQ8cFswXSYmKGctPWQtcFswXSxkPWctbC5kcmFnVmFsdWVSYW5nZSksZS5hdHRyaWJ1dGVzXy5nZXRGb3JBeGlzKCJsb2dzY2FsZSIsbyk/cy52YWx1ZVdpbmRvdz1bTWF0aC5wb3coRHlncmFwaC5MT0dfU0NBTEUsZCksTWF0aC5wb3coRHlncmFwaC5MT0dfU0NBTEUsZyldOnMudmFsdWVXaW5kb3c9W2QsZ119ZS5kcmF3R3JhcGhfKCExKX0sRHlncmFwaC5JbnRlcmFjdGlvbi5lbmRQYW49RHlncmFwaC5JbnRlcmFjdGlvbi5tYXliZVRyZWF0TW91c2VPcEFzQ2xpY2ssRHlncmFwaC5JbnRlcmFjdGlvbi5zdGFydFpvb209ZnVuY3Rpb24odCxlLGEpe2EuaXNab29taW5nPSEwLGEuem9vbU1vdmVkPSExfSxEeWdyYXBoLkludGVyYWN0aW9uLm1vdmVab29tPWZ1bmN0aW9uKHQsZSxhKXthLnpvb21Nb3ZlZD0hMCxhLmRyYWdFbmRYPUR5Z3JhcGguZHJhZ0dldFhfKHQsYSksYS5kcmFnRW5kWT1EeWdyYXBoLmRyYWdHZXRZXyh0LGEpO3ZhciBpPU1hdGguYWJzKGEuZHJhZ1N0YXJ0WC1hLmRyYWdFbmRYKSxyPU1hdGguYWJzKGEuZHJhZ1N0YXJ0WS1hLmRyYWdFbmRZKTthLmRyYWdEaXJlY3Rpb249ci8yPmk/RHlncmFwaC5WRVJUSUNBTDpEeWdyYXBoLkhPUklaT05UQUwsZS5kcmF3Wm9vbVJlY3RfKGEuZHJhZ0RpcmVjdGlvbixhLmRyYWdTdGFydFgsYS5kcmFnRW5kWCxhLmRyYWdTdGFydFksYS5kcmFnRW5kWSxhLnByZXZEcmFnRGlyZWN0aW9uLGEucHJldkVuZFgsYS5wcmV2RW5kWSksYS5wcmV2RW5kWD1hLmRyYWdFbmRYLGEucHJldkVuZFk9YS5kcmFnRW5kWSxhLnByZXZEcmFnRGlyZWN0aW9uPWEuZHJhZ0RpcmVjdGlvbn0sRHlncmFwaC5JbnRlcmFjdGlvbi50cmVhdE1vdXNlT3BBc0NsaWNrPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9dC5nZXRGdW5jdGlvbk9wdGlvbigiY2xpY2tDYWxsYmFjayIpLHI9dC5nZXRGdW5jdGlvbk9wdGlvbigicG9pbnRDbGlja0NhbGxiYWNrIiksbj1udWxsLG89LTEscz1OdW1iZXIuTUFYX1ZBTFVFLGw9MDtsPHQuc2VsUG9pbnRzXy5sZW5ndGg7bCsrKXt2YXIgaD10LnNlbFBvaW50c19bbF0scD1NYXRoLnBvdyhoLmNhbnZhc3gtYS5kcmFnRW5kWCwyKStNYXRoLnBvdyhoLmNhbnZhc3ktYS5kcmFnRW5kWSwyKTshaXNOYU4ocCkmJigtMT09b3x8cz5wKSYmKHM9cCxvPWwpfXZhciBnPXQuZ2V0TnVtZXJpY09wdGlvbigiaGlnaGxpZ2h0Q2lyY2xlU2l6ZSIpKzI7aWYoZypnPj1zJiYobj10LnNlbFBvaW50c19bb10pLG4pe3ZhciBkPXtjYW5jZWxhYmxlOiEwLHBvaW50Om4sY2FudmFzeDphLmRyYWdFbmRYLGNhbnZhc3k6YS5kcmFnRW5kWX0sdT10LmNhc2NhZGVFdmVudHNfKCJwb2ludENsaWNrIixkKTtpZih1KXJldHVybjtyJiZyLmNhbGwodCxlLG4pfXZhciBkPXtjYW5jZWxhYmxlOiEwLHh2YWw6dC5sYXN0eF8scHRzOnQuc2VsUG9pbnRzXyxjYW52YXN4OmEuZHJhZ0VuZFgsY2FudmFzeTphLmRyYWdFbmRZfTt0LmNhc2NhZGVFdmVudHNfKCJjbGljayIsZCl8fGkmJmkuY2FsbCh0LGUsdC5sYXN0eF8sdC5zZWxQb2ludHNfKX0sRHlncmFwaC5JbnRlcmFjdGlvbi5lbmRab29tPWZ1bmN0aW9uKHQsZSxhKXtlLmNsZWFyWm9vbVJlY3RfKCksYS5pc1pvb21pbmc9ITEsRHlncmFwaC5JbnRlcmFjdGlvbi5tYXliZVRyZWF0TW91c2VPcEFzQ2xpY2sodCxlLGEpO3ZhciBpPWUuZ2V0QXJlYSgpO2lmKGEucmVnaW9uV2lkdGg+PTEwJiZhLmRyYWdEaXJlY3Rpb249PUR5Z3JhcGguSE9SSVpPTlRBTCl7dmFyIHI9TWF0aC5taW4oYS5kcmFnU3RhcnRYLGEuZHJhZ0VuZFgpLG49TWF0aC5tYXgoYS5kcmFnU3RhcnRYLGEuZHJhZ0VuZFgpO3I9TWF0aC5tYXgocixpLngpLG49TWF0aC5taW4obixpLngraS53KSxuPnImJmUuZG9ab29tWF8ocixuKSxhLmNhbmNlbE5leHREYmxjbGljaz0hMH1lbHNlIGlmKGEucmVnaW9uSGVpZ2h0Pj0xMCYmYS5kcmFnRGlyZWN0aW9uPT1EeWdyYXBoLlZFUlRJQ0FMKXt2YXIgbz1NYXRoLm1pbihhLmRyYWdTdGFydFksYS5kcmFnRW5kWSkscz1NYXRoLm1heChhLmRyYWdTdGFydFksYS5kcmFnRW5kWSk7bz1NYXRoLm1heChvLGkueSkscz1NYXRoLm1pbihzLGkueStpLmgpLHM+byYmZS5kb1pvb21ZXyhvLHMpLGEuY2FuY2VsTmV4dERibGNsaWNrPSEwfWEuZHJhZ1N0YXJ0WD1udWxsLGEuZHJhZ1N0YXJ0WT1udWxsfSxEeWdyYXBoLkludGVyYWN0aW9uLnN0YXJ0VG91Y2g9ZnVuY3Rpb24odCxlLGEpe3QucHJldmVudERlZmF1bHQoKSx0LnRvdWNoZXMubGVuZ3RoPjEmJihhLnN0YXJ0VGltZUZvckRvdWJsZVRhcE1zPW51bGwpO2Zvcih2YXIgaT1bXSxyPTA7cjx0LnRvdWNoZXMubGVuZ3RoO3IrKyl7dmFyIG49dC50b3VjaGVzW3JdO2kucHVzaCh7cGFnZVg6bi5wYWdlWCxwYWdlWTpuLnBhZ2VZLGRhdGFYOmUudG9EYXRhWENvb3JkKG4ucGFnZVgpLGRhdGFZOmUudG9EYXRhWUNvb3JkKG4ucGFnZVkpfSl9aWYoYS5pbml0aWFsVG91Y2hlcz1pLDE9PWkubGVuZ3RoKWEuaW5pdGlhbFBpbmNoQ2VudGVyPWlbMF0sYS50b3VjaERpcmVjdGlvbnM9e3g6ITAseTohMH07ZWxzZSBpZihpLmxlbmd0aD49Mil7YS5pbml0aWFsUGluY2hDZW50ZXI9e3BhZ2VYOi41KihpWzBdLnBhZ2VYK2lbMV0ucGFnZVgpLHBhZ2VZOi41KihpWzBdLnBhZ2VZK2lbMV0ucGFnZVkpLGRhdGFYOi41KihpWzBdLmRhdGFYK2lbMV0uZGF0YVgpLGRhdGFZOi41KihpWzBdLmRhdGFZK2lbMV0uZGF0YVkpfTt2YXIgbz0xODAvTWF0aC5QSSpNYXRoLmF0YW4yKGEuaW5pdGlhbFBpbmNoQ2VudGVyLnBhZ2VZLWlbMF0ucGFnZVksaVswXS5wYWdlWC1hLmluaXRpYWxQaW5jaENlbnRlci5wYWdlWCk7bz1NYXRoLmFicyhvKSxvPjkwJiYobz05MC1vKSxhLnRvdWNoRGlyZWN0aW9ucz17eDo2Ny41Pm8seTpvPjIyLjV9fWEuaW5pdGlhbFJhbmdlPXt4OmUueEF4aXNSYW5nZSgpLHk6ZS55QXhpc1JhbmdlKCl9fSxEeWdyYXBoLkludGVyYWN0aW9uLm1vdmVUb3VjaD1mdW5jdGlvbih0LGUsYSl7YS5zdGFydFRpbWVGb3JEb3VibGVUYXBNcz1udWxsO3ZhciBpLHI9W107Zm9yKGk9MDtpPHQudG91Y2hlcy5sZW5ndGg7aSsrKXt2YXIgbj10LnRvdWNoZXNbaV07ci5wdXNoKHtwYWdlWDpuLnBhZ2VYLHBhZ2VZOm4ucGFnZVl9KX12YXIgbyxzPWEuaW5pdGlhbFRvdWNoZXMsbD1hLmluaXRpYWxQaW5jaENlbnRlcjtvPTE9PXIubGVuZ3RoP3JbMF06e3BhZ2VYOi41KihyWzBdLnBhZ2VYK3JbMV0ucGFnZVgpLHBhZ2VZOi41KihyWzBdLnBhZ2VZK3JbMV0ucGFnZVkpfTt2YXIgaD17cGFnZVg6by5wYWdlWC1sLnBhZ2VYLHBhZ2VZOm8ucGFnZVktbC5wYWdlWX0scD1hLmluaXRpYWxSYW5nZS54WzFdLWEuaW5pdGlhbFJhbmdlLnhbMF0sZz1hLmluaXRpYWxSYW5nZS55WzBdLWEuaW5pdGlhbFJhbmdlLnlbMV07aC5kYXRhWD1oLnBhZ2VYL2UucGxvdHRlcl8uYXJlYS53KnAsaC5kYXRhWT1oLnBhZ2VZL2UucGxvdHRlcl8uYXJlYS5oKmc7dmFyIGQsdTtpZigxPT1yLmxlbmd0aClkPTEsdT0xO2Vsc2UgaWYoci5sZW5ndGg+PTIpe3ZhciBjPXNbMV0ucGFnZVgtbC5wYWdlWDtkPShyWzFdLnBhZ2VYLW8ucGFnZVgpL2M7dmFyIHk9c1sxXS5wYWdlWS1sLnBhZ2VZO3U9KHJbMV0ucGFnZVktby5wYWdlWSkveX1kPU1hdGgubWluKDgsTWF0aC5tYXgoLjEyNSxkKSksdT1NYXRoLm1pbig4LE1hdGgubWF4KC4xMjUsdSkpO3ZhciBfPSExO2lmKGEudG91Y2hEaXJlY3Rpb25zLngmJihlLmRhdGVXaW5kb3dfPVtsLmRhdGFYLWguZGF0YVgrKGEuaW5pdGlhbFJhbmdlLnhbMF0tbC5kYXRhWCkvZCxsLmRhdGFYLWguZGF0YVgrKGEuaW5pdGlhbFJhbmdlLnhbMV0tbC5kYXRhWCkvZF0sXz0hMCksYS50b3VjaERpcmVjdGlvbnMueSlmb3IoaT0wOzE+aTtpKyspe3ZhciB2PWUuYXhlc19baV0sZj1lLmF0dHJpYnV0ZXNfLmdldEZvckF4aXMoImxvZ3NjYWxlIixpKTtmfHwodi52YWx1ZVdpbmRvdz1bbC5kYXRhWS1oLmRhdGFZKyhhLmluaXRpYWxSYW5nZS55WzBdLWwuZGF0YVkpL3UsbC5kYXRhWS1oLmRhdGFZKyhhLmluaXRpYWxSYW5nZS55WzFdLWwuZGF0YVkpL3VdLF89ITApfWlmKGUuZHJhd0dyYXBoXyghMSksXyYmci5sZW5ndGg+MSYmZS5nZXRGdW5jdGlvbk9wdGlvbigiem9vbUNhbGxiYWNrIikpe3ZhciB4PWUueEF4aXNSYW5nZSgpO2UuZ2V0RnVuY3Rpb25PcHRpb24oInpvb21DYWxsYmFjayIpLmNhbGwoZSx4WzBdLHhbMV0sZS55QXhpc1JhbmdlcygpKX19LER5Z3JhcGguSW50ZXJhY3Rpb24uZW5kVG91Y2g9ZnVuY3Rpb24odCxlLGEpe2lmKDAhPT10LnRvdWNoZXMubGVuZ3RoKUR5Z3JhcGguSW50ZXJhY3Rpb24uc3RhcnRUb3VjaCh0LGUsYSk7ZWxzZSBpZigxPT10LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCl7dmFyIGk9KG5ldyBEYXRlKS5nZXRUaW1lKCkscj10LmNoYW5nZWRUb3VjaGVzWzBdO2Euc3RhcnRUaW1lRm9yRG91YmxlVGFwTXMmJmktYS5zdGFydFRpbWVGb3JEb3VibGVUYXBNczw1MDAmJmEuZG91YmxlVGFwWCYmTWF0aC5hYnMoYS5kb3VibGVUYXBYLXIuc2NyZWVuWCk8NTAmJmEuZG91YmxlVGFwWSYmTWF0aC5hYnMoYS5kb3VibGVUYXBZLXIuc2NyZWVuWSk8NTA/ZS5yZXNldFpvb20oKTooYS5zdGFydFRpbWVGb3JEb3VibGVUYXBNcz1pLGEuZG91YmxlVGFwWD1yLnNjcmVlblgsYS5kb3VibGVUYXBZPXIuc2NyZWVuWSl9fTt2YXIgZT1mdW5jdGlvbih0LGUsYSl7cmV0dXJuIGU+dD9lLXQ6dD5hP3QtYTowfSxhPWZ1bmN0aW9uKHQsYSl7dmFyIGk9RHlncmFwaC5maW5kUG9zKGEuY2FudmFzXykscj17bGVmdDppLngscmlnaHQ6aS54K2EuY2FudmFzXy5vZmZzZXRXaWR0aCx0b3A6aS55LGJvdHRvbTppLnkrYS5jYW52YXNfLm9mZnNldEhlaWdodH0sbj17eDpEeWdyYXBoLnBhZ2VYKHQpLHk6RHlncmFwaC5wYWdlWSh0KX0sbz1lKG4ueCxyLmxlZnQsci5yaWdodCkscz1lKG4ueSxyLnRvcCxyLmJvdHRvbSk7cmV0dXJuIE1hdGgubWF4KG8scyl9O0R5Z3JhcGguSW50ZXJhY3Rpb24uZGVmYXVsdE1vZGVsPXttb3VzZWRvd246ZnVuY3Rpb24oZSxpLHIpe2lmKCFlLmJ1dHRvbnx8MiE9ZS5idXR0b24pe3IuaW5pdGlhbGl6ZU1vdXNlRG93bihlLGksciksZS5hbHRLZXl8fGUuc2hpZnRLZXk/RHlncmFwaC5zdGFydFBhbihlLGkscik6RHlncmFwaC5zdGFydFpvb20oZSxpLHIpO3ZhciBuPWZ1bmN0aW9uKGUpe2lmKHIuaXNab29taW5nKXt2YXIgbj1hKGUsaSk7dD5uP0R5Z3JhcGgubW92ZVpvb20oZSxpLHIpOm51bGwhPT1yLmRyYWdFbmRYJiYoci5kcmFnRW5kWD1udWxsLHIuZHJhZ0VuZFk9bnVsbCxpLmNsZWFyWm9vbVJlY3RfKCkpfWVsc2Ugci5pc1Bhbm5pbmcmJkR5Z3JhcGgubW92ZVBhbihlLGkscil9LG89ZnVuY3Rpb24odCl7ci5pc1pvb21pbmc/bnVsbCE9PXIuZHJhZ0VuZFg/RHlncmFwaC5lbmRab29tKHQsaSxyKTpEeWdyYXBoLkludGVyYWN0aW9uLm1heWJlVHJlYXRNb3VzZU9wQXNDbGljayh0LGkscik6ci5pc1Bhbm5pbmcmJkR5Z3JhcGguZW5kUGFuKHQsaSxyKSxEeWdyYXBoLnJlbW92ZUV2ZW50KGRvY3VtZW50LCJtb3VzZW1vdmUiLG4pLER5Z3JhcGgucmVtb3ZlRXZlbnQoZG9jdW1lbnQsIm1vdXNldXAiLG8pLHIuZGVzdHJveSgpfTtpLmFkZEFuZFRyYWNrRXZlbnQoZG9jdW1lbnQsIm1vdXNlbW92ZSIsbiksaS5hZGRBbmRUcmFja0V2ZW50KGRvY3VtZW50LCJtb3VzZXVwIixvKX19LHdpbGxEZXN0cm95Q29udGV4dE15c2VsZjohMCx0b3VjaHN0YXJ0OmZ1bmN0aW9uKHQsZSxhKXtEeWdyYXBoLkludGVyYWN0aW9uLnN0YXJ0VG91Y2godCxlLGEpfSx0b3VjaG1vdmU6ZnVuY3Rpb24odCxlLGEpe0R5Z3JhcGguSW50ZXJhY3Rpb24ubW92ZVRvdWNoKHQsZSxhKX0sdG91Y2hlbmQ6ZnVuY3Rpb24odCxlLGEpe0R5Z3JhcGguSW50ZXJhY3Rpb24uZW5kVG91Y2godCxlLGEpfSxkYmxjbGljazpmdW5jdGlvbih0LGUsYSl7aWYoYS5jYW5jZWxOZXh0RGJsY2xpY2spcmV0dXJuIHZvaWQoYS5jYW5jZWxOZXh0RGJsY2xpY2s9ITEpO3ZhciBpPXtjYW52YXN4OmEuZHJhZ0VuZFgsY2FudmFzeTphLmRyYWdFbmRZfTtlLmNhc2NhZGVFdmVudHNfKCJkYmxjbGljayIsaSl8fHQuYWx0S2V5fHx0LnNoaWZ0S2V5fHxlLnJlc2V0Wm9vbSgpfX0sRHlncmFwaC5ERUZBVUxUX0FUVFJTLmludGVyYWN0aW9uTW9kZWw9RHlncmFwaC5JbnRlcmFjdGlvbi5kZWZhdWx0TW9kZWwsRHlncmFwaC5kZWZhdWx0SW50ZXJhY3Rpb25Nb2RlbD1EeWdyYXBoLkludGVyYWN0aW9uLmRlZmF1bHRNb2RlbCxEeWdyYXBoLmVuZFpvb209RHlncmFwaC5JbnRlcmFjdGlvbi5lbmRab29tLER5Z3JhcGgubW92ZVpvb209RHlncmFwaC5JbnRlcmFjdGlvbi5tb3ZlWm9vbSxEeWdyYXBoLnN0YXJ0Wm9vbT1EeWdyYXBoLkludGVyYWN0aW9uLnN0YXJ0Wm9vbSxEeWdyYXBoLmVuZFBhbj1EeWdyYXBoLkludGVyYWN0aW9uLmVuZFBhbixEeWdyYXBoLm1vdmVQYW49RHlncmFwaC5JbnRlcmFjdGlvbi5tb3ZlUGFuLER5Z3JhcGguc3RhcnRQYW49RHlncmFwaC5JbnRlcmFjdGlvbi5zdGFydFBhbixEeWdyYXBoLkludGVyYWN0aW9uLm5vbkludGVyYWN0aXZlTW9kZWxfPXttb3VzZWRvd246ZnVuY3Rpb24odCxlLGEpe2EuaW5pdGlhbGl6ZU1vdXNlRG93bih0LGUsYSl9LG1vdXNldXA6RHlncmFwaC5JbnRlcmFjdGlvbi5tYXliZVRyZWF0TW91c2VPcEFzQ2xpY2t9LER5Z3JhcGguSW50ZXJhY3Rpb24uZHJhZ0lzUGFuSW50ZXJhY3Rpb25Nb2RlbD17bW91c2Vkb3duOmZ1bmN0aW9uKHQsZSxhKXthLmluaXRpYWxpemVNb3VzZURvd24odCxlLGEpLER5Z3JhcGguc3RhcnRQYW4odCxlLGEpfSxtb3VzZW1vdmU6ZnVuY3Rpb24odCxlLGEpe2EuaXNQYW5uaW5nJiZEeWdyYXBoLm1vdmVQYW4odCxlLGEpfSxtb3VzZXVwOmZ1bmN0aW9uKHQsZSxhKXthLmlzUGFubmluZyYmRHlncmFwaC5lbmRQYW4odCxlLGEpfX19KCksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7RHlncmFwaC5UaWNrTGlzdD12b2lkIDAsRHlncmFwaC5UaWNrZXI9dm9pZCAwLER5Z3JhcGgubnVtZXJpY0xpbmVhclRpY2tzPWZ1bmN0aW9uKHQsZSxhLGkscixuKXt2YXIgbz1mdW5jdGlvbih0KXtyZXR1cm4ibG9nc2NhbGUiPT09dD8hMTppKHQpfTtyZXR1cm4gRHlncmFwaC5udW1lcmljVGlja3ModCxlLGEsbyxyLG4pfSxEeWdyYXBoLm51bWVyaWNUaWNrcz1mdW5jdGlvbih0LGUsYSxpLHIsbil7dmFyIG8scyxsLGgscD1pKCJwaXhlbHNQZXJMYWJlbCIpLGc9W107aWYobilmb3Iobz0wO288bi5sZW5ndGg7bysrKWcucHVzaCh7djpuW29dfSk7ZWxzZXtpZihpKCJsb2dzY2FsZSIpKXtoPU1hdGguZmxvb3IoYS9wKTt2YXIgZD1EeWdyYXBoLmJpbmFyeVNlYXJjaCh0LER5Z3JhcGguUFJFRkVSUkVEX0xPR19USUNLX1ZBTFVFUywxKSx1PUR5Z3JhcGguYmluYXJ5U2VhcmNoKGUsRHlncmFwaC5QUkVGRVJSRURfTE9HX1RJQ0tfVkFMVUVTLC0xKTstMT09ZCYmKGQ9MCksLTE9PXUmJih1PUR5Z3JhcGguUFJFRkVSUkVEX0xPR19USUNLX1ZBTFVFUy5sZW5ndGgtMSk7dmFyIGM9bnVsbDtpZih1LWQ+PWgvNCl7Zm9yKHZhciB5PXU7eT49ZDt5LS0pe3ZhciBfPUR5Z3JhcGguUFJFRkVSUkVEX0xPR19USUNLX1ZBTFVFU1t5XSx2PU1hdGgubG9nKF8vdCkvTWF0aC5sb2coZS90KSphLGY9e3Y6X307bnVsbD09PWM/Yz17dGlja1ZhbHVlOl8scGl4ZWxfY29vcmQ6dn06TWF0aC5hYnModi1jLnBpeGVsX2Nvb3JkKT49cD9jPXt0aWNrVmFsdWU6XyxwaXhlbF9jb29yZDp2fTpmLmxhYmVsPSIiLGcucHVzaChmKX1nLnJldmVyc2UoKX19aWYoMD09PWcubGVuZ3RoKXt2YXIgeCxtLEQ9aSgibGFiZWxzS01HMiIpO0Q/KHg9WzEsMiw0LDgsMTYsMzIsNjQsMTI4LDI1Nl0sbT0xNik6KHg9WzEsMiw1LDEwLDIwLDUwLDEwMF0sbT0xMCk7dmFyIHcsQSxiLFQsRT1NYXRoLmNlaWwoYS9wKSxDPU1hdGguYWJzKGUtdCkvRSxMPU1hdGguZmxvb3IoTWF0aC5sb2coQykvTWF0aC5sb2cobSkpLFA9TWF0aC5wb3cobSxMKTtmb3Iocz0wO3M8eC5sZW5ndGgmJih3PVAqeFtzXSxBPU1hdGguZmxvb3IodC93KSp3LGI9TWF0aC5jZWlsKGUvdykqdyxoPU1hdGguYWJzKGItQSkvdyxUPWEvaCwhKFQ+cCkpO3MrKyk7Zm9yKEE+YiYmKHcqPS0xKSxvPTA7aD49bztvKyspbD1BK28qdyxnLnB1c2goe3Y6bH0pfX12YXIgUz1pKCJheGlzTGFiZWxGb3JtYXR0ZXIiKTtmb3Iobz0wO288Zy5sZW5ndGg7bysrKXZvaWQgMD09PWdbb10ubGFiZWwmJihnW29dLmxhYmVsPVMuY2FsbChyLGdbb10udiwwLGkscikpO3JldHVybiBnfSxEeWdyYXBoLmRhdGVUaWNrZXI9ZnVuY3Rpb24odCxlLGEsaSxyLG4pe3ZhciBvPUR5Z3JhcGgucGlja0RhdGVUaWNrR3JhbnVsYXJpdHkodCxlLGEsaSk7cmV0dXJuIG8+PTA/RHlncmFwaC5nZXREYXRlQXhpcyh0LGUsbyxpLHIpOltdfSxEeWdyYXBoLlNFQ09ORExZPTAsRHlncmFwaC5UV09fU0VDT05ETFk9MSxEeWdyYXBoLkZJVkVfU0VDT05ETFk9MixEeWdyYXBoLlRFTl9TRUNPTkRMWT0zLER5Z3JhcGguVEhJUlRZX1NFQ09ORExZPTQsRHlncmFwaC5NSU5VVEVMWT01LER5Z3JhcGguVFdPX01JTlVURUxZPTYsRHlncmFwaC5GSVZFX01JTlVURUxZPTcsRHlncmFwaC5URU5fTUlOVVRFTFk9OCxEeWdyYXBoLlRISVJUWV9NSU5VVEVMWT05LER5Z3JhcGguSE9VUkxZPTEwLER5Z3JhcGguVFdPX0hPVVJMWT0xMSxEeWdyYXBoLlNJWF9IT1VSTFk9MTIsRHlncmFwaC5EQUlMWT0xMyxEeWdyYXBoLlRXT19EQUlMWT0xNCxEeWdyYXBoLldFRUtMWT0xNSxEeWdyYXBoLk1PTlRITFk9MTYsRHlncmFwaC5RVUFSVEVSTFk9MTcsRHlncmFwaC5CSUFOTlVBTD0xOCxEeWdyYXBoLkFOTlVBTD0xOSxEeWdyYXBoLkRFQ0FEQUw9MjAsRHlncmFwaC5DRU5URU5OSUFMPTIxLER5Z3JhcGguTlVNX0dSQU5VTEFSSVRJRVM9MjIsRHlncmFwaC5EQVRFRklFTERfWT0wLER5Z3JhcGguREFURUZJRUxEX009MSxEeWdyYXBoLkRBVEVGSUVMRF9EPTIsRHlncmFwaC5EQVRFRklFTERfSEg9MyxEeWdyYXBoLkRBVEVGSUVMRF9NTT00LER5Z3JhcGguREFURUZJRUxEX1NTPTUsRHlncmFwaC5EQVRFRklFTERfTVM9NixEeWdyYXBoLk5VTV9EQVRFRklFTERTPTcsRHlncmFwaC5USUNLX1BMQUNFTUVOVD1bXSxEeWdyYXBoLlRJQ0tfUExBQ0VNRU5UW0R5Z3JhcGguU0VDT05ETFldPXtkYXRlZmllbGQ6RHlncmFwaC5EQVRFRklFTERfU1Msc3RlcDoxLHNwYWNpbmc6MWUzfSxEeWdyYXBoLlRJQ0tfUExBQ0VNRU5UW0R5Z3JhcGguVFdPX1NFQ09ORExZXT17ZGF0ZWZpZWxkOkR5Z3JhcGguREFURUZJRUxEX1NTLHN0ZXA6MixzcGFjaW5nOjJlM30sRHlncmFwaC5USUNLX1BMQUNFTUVOVFtEeWdyYXBoLkZJVkVfU0VDT05ETFldPXtkYXRlZmllbGQ6RHlncmFwaC5EQVRFRklFTERfU1Msc3RlcDo1LHNwYWNpbmc6NWUzfSxEeWdyYXBoLlRJQ0tfUExBQ0VNRU5UW0R5Z3JhcGguVEVOX1NFQ09ORExZXT17ZGF0ZWZpZWxkOkR5Z3JhcGguREFURUZJRUxEX1NTLHN0ZXA6MTAsc3BhY2luZzoxZTR9LER5Z3JhcGguVElDS19QTEFDRU1FTlRbRHlncmFwaC5USElSVFlfU0VDT05ETFldPXtkYXRlZmllbGQ6RHlncmFwaC5EQVRFRklFTERfU1Msc3RlcDozMCxzcGFjaW5nOjNlNH0sRHlncmFwaC5USUNLX1BMQUNFTUVOVFtEeWdyYXBoLk1JTlVURUxZXT17ZGF0ZWZpZWxkOkR5Z3JhcGguREFURUZJRUxEX01NLHN0ZXA6MSxzcGFjaW5nOjZlNH0sRHlncmFwaC5USUNLX1BMQUNFTUVOVFtEeWdyYXBoLlRXT19NSU5VVEVMWV09e2RhdGVmaWVsZDpEeWdyYXBoLkRBVEVGSUVMRF9NTSxzdGVwOjIsc3BhY2luZzoxMmU0fSxEeWdyYXBoLlRJQ0tfUExBQ0VNRU5UW0R5Z3JhcGguRklWRV9NSU5VVEVMWV09e2RhdGVmaWVsZDpEeWdyYXBoLkRBVEVGSUVMRF9NTSxzdGVwOjUsc3BhY2luZzozZTV9LER5Z3JhcGguVElDS19QTEFDRU1FTlRbRHlncmFwaC5URU5fTUlOVVRFTFldPXtkYXRlZmllbGQ6RHlncmFwaC5EQVRFRklFTERfTU0sc3RlcDoxMCxzcGFjaW5nOjZlNX0sRHlncmFwaC5USUNLX1BMQUNFTUVOVFtEeWdyYXBoLlRISVJUWV9NSU5VVEVMWV09e2RhdGVmaWVsZDpEeWdyYXBoLkRBVEVGSUVMRF9NTSxzdGVwOjMwLHNwYWNpbmc6MThlNX0sRHlncmFwaC5USUNLX1BMQUNFTUVOVFtEeWdyYXBoLkhPVVJMWV09e2RhdGVmaWVsZDpEeWdyYXBoLkRBVEVGSUVMRF9ISCxzdGVwOjEsc3BhY2luZzozNmU1fSxEeWdyYXBoLlRJQ0tfUExBQ0VNRU5UW0R5Z3JhcGguVFdPX0hPVVJMWV09e2RhdGVmaWVsZDpEeWdyYXBoLkRBVEVGSUVMRF9ISCxzdGVwOjIsc3BhY2luZzo3MmU1fSxEeWdyYXBoLlRJQ0tfUExBQ0VNRU5UW0R5Z3JhcGguU0lYX0hPVVJMWV09e2RhdGVmaWVsZDpEeWdyYXBoLkRBVEVGSUVMRF9ISCxzdGVwOjYsc3BhY2luZzoyMTZlNX0sRHlncmFwaC5USUNLX1BMQUNFTUVOVFtEeWdyYXBoLkRBSUxZXT17ZGF0ZWZpZWxkOkR5Z3JhcGguREFURUZJRUxEX0Qsc3RlcDoxLHNwYWNpbmc6ODY0ZTV9LER5Z3JhcGguVElDS19QTEFDRU1FTlRbRHlncmFwaC5UV09fREFJTFldPXtkYXRlZmllbGQ6RHlncmFwaC5EQVRFRklFTERfRCxzdGVwOjIsc3BhY2luZzoxNzI4ZTV9LER5Z3JhcGguVElDS19QTEFDRU1FTlRbRHlncmFwaC5XRUVLTFldPXtkYXRlZmllbGQ6RHlncmFwaC5EQVRFRklFTERfRCxzdGVwOjcsc3BhY2luZzo2MDQ4ZTV9LER5Z3JhcGguVElDS19QTEFDRU1FTlRbRHlncmFwaC5NT05USExZXT17ZGF0ZWZpZWxkOkR5Z3JhcGguREFURUZJRUxEX00sc3RlcDoxLHNwYWNpbmc6MjYyOTgxNzI4MH0sRHlncmFwaC5USUNLX1BMQUNFTUVOVFtEeWdyYXBoLlFVQVJURVJMWV09e2RhdGVmaWVsZDpEeWdyYXBoLkRBVEVGSUVMRF9NLHN0ZXA6MyxzcGFjaW5nOjIxNmU1KjM2NS4yNTI0fSxEeWdyYXBoLlRJQ0tfUExBQ0VNRU5UW0R5Z3JhcGguQklBTk5VQUxdPXtkYXRlZmllbGQ6RHlncmFwaC5EQVRFRklFTERfTSxzdGVwOjYsc3BhY2luZzo0MzJlNSozNjUuMjUyNH0sRHlncmFwaC5USUNLX1BMQUNFTUVOVFtEeWdyYXBoLkFOTlVBTF09e2RhdGVmaWVsZDpEeWdyYXBoLkRBVEVGSUVMRF9ZLHN0ZXA6MSxzcGFjaW5nOjg2NGU1KjM2NS4yNTI0fSxEeWdyYXBoLlRJQ0tfUExBQ0VNRU5UW0R5Z3JhcGguREVDQURBTF09e2RhdGVmaWVsZDpEeWdyYXBoLkRBVEVGSUVMRF9ZLHN0ZXA6MTAsc3BhY2luZzozMTU1NzgwNzM2MDB9LER5Z3JhcGguVElDS19QTEFDRU1FTlRbRHlncmFwaC5DRU5URU5OSUFMXT17ZGF0ZWZpZWxkOkR5Z3JhcGguREFURUZJRUxEX1ksc3RlcDoxMDAsc3BhY2luZzozMTU1NzgwNzM2ZTN9LER5Z3JhcGguUFJFRkVSUkVEX0xPR19USUNLX1ZBTFVFUz1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPS0zOTszOT49ZTtlKyspZm9yKHZhciBhPU1hdGgucG93KDEwLGUpLGk9MTs5Pj1pO2krKyl7dmFyIHI9YSppO3QucHVzaChyKX1yZXR1cm4gdH0oKSxEeWdyYXBoLnBpY2tEYXRlVGlja0dyYW51bGFyaXR5PWZ1bmN0aW9uKHQsZSxhLGkpe2Zvcih2YXIgcj1pKCJwaXhlbHNQZXJMYWJlbCIpLG49MDtuPER5Z3JhcGguTlVNX0dSQU5VTEFSSVRJRVM7bisrKXt2YXIgbz1EeWdyYXBoLm51bURhdGVUaWNrcyh0LGUsbik7aWYoYS9vPj1yKXJldHVybiBufXJldHVybi0xfSxEeWdyYXBoLm51bURhdGVUaWNrcz1mdW5jdGlvbih0LGUsYSl7dmFyIGk9RHlncmFwaC5USUNLX1BMQUNFTUVOVFthXS5zcGFjaW5nO3JldHVybiBNYXRoLnJvdW5kKDEqKGUtdCkvaSl9LER5Z3JhcGguZ2V0RGF0ZUF4aXM9ZnVuY3Rpb24odCxlLGEsaSxyKXt2YXIgbj1pKCJheGlzTGFiZWxGb3JtYXR0ZXIiKSxvPWkoImxhYmVsc1VUQyIpLHM9bz9EeWdyYXBoLkRhdGVBY2Nlc3NvcnNVVEM6RHlncmFwaC5EYXRlQWNjZXNzb3JzTG9jYWwsbD1EeWdyYXBoLlRJQ0tfUExBQ0VNRU5UW2FdLmRhdGVmaWVsZCxoPUR5Z3JhcGguVElDS19QTEFDRU1FTlRbYV0uc3RlcCxwPUR5Z3JhcGguVElDS19QTEFDRU1FTlRbYV0uc3BhY2luZyxnPW5ldyBEYXRlKHQpLGQ9W107ZFtEeWdyYXBoLkRBVEVGSUVMRF9ZXT1zLmdldEZ1bGxZZWFyKGcpLGRbRHlncmFwaC5EQVRFRklFTERfTV09cy5nZXRNb250aChnKSxkW0R5Z3JhcGguREFURUZJRUxEX0RdPXMuZ2V0RGF0ZShnKSxkW0R5Z3JhcGguREFURUZJRUxEX0hIXT1zLmdldEhvdXJzKGcpLGRbRHlncmFwaC5EQVRFRklFTERfTU1dPXMuZ2V0TWludXRlcyhnKSxkW0R5Z3JhcGguREFURUZJRUxEX1NTXT1zLmdldFNlY29uZHMoZyksZFtEeWdyYXBoLkRBVEVGSUVMRF9NU109cy5nZXRNaWxsaXNlY29uZHMoZyk7dmFyIHU9ZFtsXSVoO2E9PUR5Z3JhcGguV0VFS0xZJiYodT1zLmdldERheShnKSksZFtsXS09dTtmb3IodmFyIGM9bCsxO2M8RHlncmFwaC5OVU1fREFURUZJRUxEUztjKyspZFtjXT1jPT09RHlncmFwaC5EQVRFRklFTERfRD8xOjA7dmFyIHk9W10sXz1zLm1ha2VEYXRlLmFwcGx5KG51bGwsZCksdj1fLmdldFRpbWUoKTtpZihhPD1EeWdyYXBoLkhPVVJMWSlmb3IodD52JiYodis9cCxfPW5ldyBEYXRlKHYpKTtlPj12Oyl5LnB1c2goe3Y6dixsYWJlbDpuLmNhbGwocixfLGEsaSxyKX0pLHYrPXAsXz1uZXcgRGF0ZSh2KTtlbHNlIGZvcih0PnYmJihkW2xdKz1oLF89cy5tYWtlRGF0ZS5hcHBseShudWxsLGQpLHY9Xy5nZXRUaW1lKCkpO2U+PXY7KShhPj1EeWdyYXBoLkRBSUxZfHxzLmdldEhvdXJzKF8pJWg9PT0wKSYmeS5wdXNoKHt2OnYsbGFiZWw6bi5jYWxsKHIsXyxhLGkscil9KSxkW2xdKz1oLF89cy5tYWtlRGF0ZS5hcHBseShudWxsLGQpLHY9Xy5nZXRUaW1lKCk7cmV0dXJuIHl9LER5Z3JhcGgmJkR5Z3JhcGguREVGQVVMVF9BVFRSUyYmRHlncmFwaC5ERUZBVUxUX0FUVFJTLmF4ZXMmJkR5Z3JhcGguREVGQVVMVF9BVFRSUy5heGVzLngmJkR5Z3JhcGguREVGQVVMVF9BVFRSUy5heGVzLnkmJkR5Z3JhcGguREVGQVVMVF9BVFRSUy5heGVzLnkyJiYoRHlncmFwaC5ERUZBVUxUX0FUVFJTLmF4ZXMueC50aWNrZXI9RHlncmFwaC5kYXRlVGlja2VyLER5Z3JhcGguREVGQVVMVF9BVFRSUy5heGVzLnkudGlja2VyPUR5Z3JhcGgubnVtZXJpY1RpY2tzLER5Z3JhcGguREVGQVVMVF9BVFRSUy5heGVzLnkyLnRpY2tlcj1EeWdyYXBoLm51bWVyaWNUaWNrcyl9KCksRHlncmFwaC5QbHVnaW5zPXt9LER5Z3JhcGguUGx1Z2lucy5Bbm5vdGF0aW9ucz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbigpe3RoaXMuYW5ub3RhdGlvbnNfPVtdfTtyZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQW5ub3RhdGlvbnMgUGx1Z2luIn0sdC5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24odCl7cmV0dXJue2NsZWFyQ2hhcnQ6dGhpcy5jbGVhckNoYXJ0LGRpZERyYXdDaGFydDp0aGlzLmRpZERyYXdDaGFydH19LHQucHJvdG90eXBlLmRldGFjaExhYmVscz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy5hbm5vdGF0aW9uc18ubGVuZ3RoO3QrKyl7dmFyIGU9dGhpcy5hbm5vdGF0aW9uc19bdF07ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksdGhpcy5hbm5vdGF0aW9uc19bdF09bnVsbH10aGlzLmFubm90YXRpb25zXz1bXX0sdC5wcm90b3R5cGUuY2xlYXJDaGFydD1mdW5jdGlvbih0KXt0aGlzLmRldGFjaExhYmVscygpfSx0LnByb3RvdHlwZS5kaWREcmF3Q2hhcnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5keWdyYXBoLGE9ZS5sYXlvdXRfLmFubm90YXRlZF9wb2ludHM7aWYoYSYmMCE9PWEubGVuZ3RoKWZvcih2YXIgaT10LmNhbnZhcy5wYXJlbnROb2RlLHI9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZm9udFNpemU6ZS5nZXRPcHRpb24oImF4aXNMYWJlbEZvbnRTaXplIikrInB4Iix6SW5kZXg6MTAsb3ZlcmZsb3c6ImhpZGRlbiJ9LG49ZnVuY3Rpb24odCxhLGkpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1pLmFubm90YXRpb247bi5oYXNPd25Qcm9wZXJ0eSh0KT9uW3RdKG4saSxlLHIpOmUuZ2V0T3B0aW9uKGEpJiZlLmdldE9wdGlvbihhKShuLGksZSxyKX19LG89dC5keWdyYXBoLnBsb3R0ZXJfLmFyZWEscz17fSxsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBoPWFbbF07aWYoIShoLmNhbnZhc3g8by54fHxoLmNhbnZhc3g+by54K28ud3x8aC5jYW52YXN5PG8ueXx8aC5jYW52YXN5Pm8ueStvLmgpKXt2YXIgcD1oLmFubm90YXRpb24sZz02O3AuaGFzT3duUHJvcGVydHkoInRpY2tIZWlnaHQiKSYmKGc9cC50aWNrSGVpZ2h0KTt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IodmFyIHUgaW4gcilyLmhhc093blByb3BlcnR5KHUpJiYoZC5zdHlsZVt1XT1yW3VdKTtwLmhhc093blByb3BlcnR5KCJpY29uIil8fChkLmNsYXNzTmFtZT0iZHlncmFwaERlZmF1bHRBbm5vdGF0aW9uIikscC5oYXNPd25Qcm9wZXJ0eSgiY3NzQ2xhc3MiKSYmKGQuY2xhc3NOYW1lKz0iICIrcC5jc3NDbGFzcyk7dmFyIGM9cC5oYXNPd25Qcm9wZXJ0eSgid2lkdGgiKT9wLndpZHRoOjE2LHk9cC5oYXNPd25Qcm9wZXJ0eSgiaGVpZ2h0Iik/cC5oZWlnaHQ6MTY7aWYocC5oYXNPd25Qcm9wZXJ0eSgiaWNvbiIpKXt2YXIgXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTtfLnNyYz1wLmljb24sXy53aWR0aD1jLF8uaGVpZ2h0PXksZC5hcHBlbmRDaGlsZChfKX1lbHNlIGguYW5ub3RhdGlvbi5oYXNPd25Qcm9wZXJ0eSgic2hvcnRUZXh0IikmJmQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaC5hbm5vdGF0aW9uLnNob3J0VGV4dCkpO3ZhciB2PWguY2FudmFzeC1jLzI7ZC5zdHlsZS5sZWZ0PXYrInB4Ijt2YXIgZj0wO2lmKHAuYXR0YWNoQXRCb3R0b20pe3ZhciB4PW8ueStvLmgteS1nO3Nbdl0/eC09c1t2XTpzW3ZdPTAsc1t2XSs9Zyt5LGY9eH1lbHNlIGY9aC5jYW52YXN5LXktZztkLnN0eWxlLnRvcD1mKyJweCIsZC5zdHlsZS53aWR0aD1jKyJweCIsZC5zdHlsZS5oZWlnaHQ9eSsicHgiLGQudGl0bGU9aC5hbm5vdGF0aW9uLnRleHQsZC5zdHlsZS5jb2xvcj1lLmNvbG9yc01hcF9baC5uYW1lXSxkLnN0eWxlLmJvcmRlckNvbG9yPWUuY29sb3JzTWFwX1toLm5hbWVdLHAuZGl2PWQsZS5hZGRBbmRUcmFja0V2ZW50KGQsImNsaWNrIixuKCJjbGlja0hhbmRsZXIiLCJhbm5vdGF0aW9uQ2xpY2tIYW5kbGVyIixoLHRoaXMpKSxlLmFkZEFuZFRyYWNrRXZlbnQoZCwibW91c2VvdmVyIixuKCJtb3VzZU92ZXJIYW5kbGVyIiwiYW5ub3RhdGlvbk1vdXNlT3ZlckhhbmRsZXIiLGgsdGhpcykpLGUuYWRkQW5kVHJhY2tFdmVudChkLCJtb3VzZW91dCIsbigibW91c2VPdXRIYW5kbGVyIiwiYW5ub3RhdGlvbk1vdXNlT3V0SGFuZGxlciIsaCx0aGlzKSksZS5hZGRBbmRUcmFja0V2ZW50KGQsImRibGNsaWNrIixuKCJkYmxDbGlja0hhbmRsZXIiLCJhbm5vdGF0aW9uRGJsQ2xpY2tIYW5kbGVyIixoLHRoaXMpKSxpLmFwcGVuZENoaWxkKGQpLHRoaXMuYW5ub3RhdGlvbnNfLnB1c2goZCk7dmFyIG09dC5kcmF3aW5nQ29udGV4dDtpZihtLnNhdmUoKSxtLnN0cm9rZVN0eWxlPWUuY29sb3JzTWFwX1toLm5hbWVdLG0uYmVnaW5QYXRoKCkscC5hdHRhY2hBdEJvdHRvbSl7dmFyIHg9Zit5O20ubW92ZVRvKGguY2FudmFzeCx4KSxtLmxpbmVUbyhoLmNhbnZhc3gseCtnKX1lbHNlIG0ubW92ZVRvKGguY2FudmFzeCxoLmNhbnZhc3kpLG0ubGluZVRvKGguY2FudmFzeCxoLmNhbnZhc3ktMi1nKTttLmNsb3NlUGF0aCgpLG0uc3Ryb2tlKCksbS5yZXN0b3JlKCl9fX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGV0YWNoTGFiZWxzKCl9LHR9KCksRHlncmFwaC5QbHVnaW5zLkF4ZXM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24oKXt0aGlzLnhsYWJlbHNfPVtdLHRoaXMueWxhYmVsc189W119O3JldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJBeGVzIFBsdWdpbiJ9LHQucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKHQpe3JldHVybntsYXlvdXQ6dGhpcy5sYXlvdXQsY2xlYXJDaGFydDp0aGlzLmNsZWFyQ2hhcnQsd2lsbERyYXdDaGFydDp0aGlzLndpbGxEcmF3Q2hhcnR9fSx0LnByb3RvdHlwZS5sYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5keWdyYXBoO2lmKGUuZ2V0T3B0aW9uRm9yQXhpcygiZHJhd0F4aXMiLCJ5Iikpe3ZhciBhPWUuZ2V0T3B0aW9uRm9yQXhpcygiYXhpc0xhYmVsV2lkdGgiLCJ5IikrMiplLmdldE9wdGlvbkZvckF4aXMoImF4aXNUaWNrU2l6ZSIsInkiKTt0LnJlc2VydmVTcGFjZUxlZnQoYSl9aWYoZS5nZXRPcHRpb25Gb3JBeGlzKCJkcmF3QXhpcyIsIngiKSl7dmFyIGk7aT1lLmdldE9wdGlvbigieEF4aXNIZWlnaHQiKT9lLmdldE9wdGlvbigieEF4aXNIZWlnaHQiKTplLmdldE9wdGlvbkZvckF4aXMoImF4aXNMYWJlbEZvbnRTaXplIiwieCIpKzIqZS5nZXRPcHRpb25Gb3JBeGlzKCJheGlzVGlja1NpemUiLCJ4IiksdC5yZXNlcnZlU3BhY2VCb3R0b20oaSl9aWYoMj09ZS5udW1BeGVzKCkpe2lmKGUuZ2V0T3B0aW9uRm9yQXhpcygiZHJhd0F4aXMiLCJ5MiIpKXt2YXIgYT1lLmdldE9wdGlvbkZvckF4aXMoImF4aXNMYWJlbFdpZHRoIiwieTIiKSsyKmUuZ2V0T3B0aW9uRm9yQXhpcygiYXhpc1RpY2tTaXplIiwieTIiKTt0LnJlc2VydmVTcGFjZVJpZ2h0KGEpfX1lbHNlIGUubnVtQXhlcygpPjImJmUuZXJyb3IoIk9ubHkgdHdvIHktYXhlcyBhcmUgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4gKFRyeWluZyB0byB1c2UgIitlLm51bUF4ZXMoKSsiKSIpfSx0LnByb3RvdHlwZS5kZXRhY2hMYWJlbHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgYT10W2VdO2EucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfX10KHRoaXMueGxhYmVsc18pLHQodGhpcy55bGFiZWxzXyksdGhpcy54bGFiZWxzXz1bXSx0aGlzLnlsYWJlbHNfPVtdfSx0LnByb3RvdHlwZS5jbGVhckNoYXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZGV0YWNoTGFiZWxzKCl9LHQucHJvdG90eXBlLndpbGxEcmF3Q2hhcnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KSsuNX1mdW5jdGlvbiBhKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLS41fXZhciBpPXQuZHlncmFwaDtpZihpLmdldE9wdGlvbkZvckF4aXMoImRyYXdBeGlzIiwieCIpfHxpLmdldE9wdGlvbkZvckF4aXMoImRyYXdBeGlzIiwieSIpfHxpLmdldE9wdGlvbkZvckF4aXMoImRyYXdBeGlzIiwieTIiKSl7dmFyIHIsbixvLHMsbCxoPXQuZHJhd2luZ0NvbnRleHQscD10LmNhbnZhcy5wYXJlbnROb2RlLGc9aS53aWR0aF8sZD1pLmhlaWdodF8sdT1mdW5jdGlvbih0KXtyZXR1cm57cG9zaXRpb246ImFic29sdXRlIixmb250U2l6ZTppLmdldE9wdGlvbkZvckF4aXMoImF4aXNMYWJlbEZvbnRTaXplIix0KSsicHgiLHpJbmRleDoxMCxjb2xvcjppLmdldE9wdGlvbkZvckF4aXMoImF4aXNMYWJlbENvbG9yIix0KSx3aWR0aDppLmdldE9wdGlvbkZvckF4aXMoImF4aXNMYWJlbFdpZHRoIix0KSsicHgiLGxpbmVIZWlnaHQ6Im5vcm1hbCIsb3ZlcmZsb3c6ImhpZGRlbiJ9fSxjPXt4OnUoIngiKSx5OnUoInkiKSx5Mjp1KCJ5MiIpfSx5PWZ1bmN0aW9uKHQsZSxhKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxyPWNbInkyIj09YT8ieTIiOmVdO2Zvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJihpLnN0eWxlW25dPXJbbl0pO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBvLmNsYXNzTmFtZT0iZHlncmFwaC1heGlzLWxhYmVsIGR5Z3JhcGgtYXhpcy1sYWJlbC0iK2UrKGE/IiBkeWdyYXBoLWF4aXMtbGFiZWwtIithOiIiKSxvLmlubmVySFRNTD10LGkuYXBwZW5kQ2hpbGQobyksaX07aC5zYXZlKCk7dmFyIF89aS5sYXlvdXRfLHY9dC5keWdyYXBoLnBsb3R0ZXJfLmFyZWEsZj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGkuZ2V0T3B0aW9uRm9yQXhpcyhlLHQpfX07aWYoaS5nZXRPcHRpb25Gb3JBeGlzKCJkcmF3QXhpcyIsInkiKSl7aWYoXy55dGlja3MmJl8ueXRpY2tzLmxlbmd0aD4wKXt2YXIgeD1pLm51bUF4ZXMoKSxtPVtmKCJ5IiksZigieTIiKV07Zm9yKGw9MDtsPF8ueXRpY2tzLmxlbmd0aDtsKyspe2lmKHM9Xy55dGlja3NbbF0sImZ1bmN0aW9uIj09dHlwZW9mIHMpcmV0dXJuO249di54O3ZhciBEPTEsdz0ieTEiLEE9bVswXTsxPT1zWzBdJiYobj12Lngrdi53LEQ9LTEsdz0ieTIiLEE9bVsxXSk7dmFyIGI9QSgiYXhpc0xhYmVsRm9udFNpemUiKTtvPXYueStzWzFdKnYuaCxyPXkoc1syXSwieSIsMj09eD93Om51bGwpO3ZhciBUPW8tYi8yOzA+VCYmKFQ9MCksVCtiKzM+ZD9yLnN0eWxlLmJvdHRvbT0iMCI6ci5zdHlsZS50b3A9VCsicHgiLDA9PT1zWzBdPyhyLnN0eWxlLmxlZnQ9di54LUEoImF4aXNMYWJlbFdpZHRoIiktQSgiYXhpc1RpY2tTaXplIikrInB4IixyLnN0eWxlLnRleHRBbGlnbj0icmlnaHQiKToxPT1zWzBdJiYoci5zdHlsZS5sZWZ0PXYueCt2LncrQSgiYXhpc1RpY2tTaXplIikrInB4IixyLnN0eWxlLnRleHRBbGlnbj0ibGVmdCIpLHIuc3R5bGUud2lkdGg9QSgiYXhpc0xhYmVsV2lkdGgiKSsicHgiLHAuYXBwZW5kQ2hpbGQociksdGhpcy55bGFiZWxzXy5wdXNoKHIpfXZhciBFPXRoaXMueWxhYmVsc19bMF0sYj1pLmdldE9wdGlvbkZvckF4aXMoImF4aXNMYWJlbEZvbnRTaXplIiwieSIpLEM9cGFyc2VJbnQoRS5zdHlsZS50b3AsMTApK2I7Qz5kLWImJihFLnN0eWxlLnRvcD1wYXJzZUludChFLnN0eWxlLnRvcCwxMCktYi8yKyJweCIpfXZhciBMO2lmKGkuZ2V0T3B0aW9uKCJkcmF3QXhlc0F0WmVybyIpKXt2YXIgUD1pLnRvUGVyY2VudFhDb29yZCgwKTsoUD4xfHwwPlB8fGlzTmFOKFApKSYmKFA9MCksTD1lKHYueCtQKnYudyl9ZWxzZSBMPWUodi54KTtoLnN0cm9rZVN0eWxlPWkuZ2V0T3B0aW9uRm9yQXhpcygiYXhpc0xpbmVDb2xvciIsInkiKSxoLmxpbmVXaWR0aD1pLmdldE9wdGlvbkZvckF4aXMoImF4aXNMaW5lV2lkdGgiLCJ5IiksaC5iZWdpblBhdGgoKSxoLm1vdmVUbyhMLGEodi55KSksaC5saW5lVG8oTCxhKHYueSt2LmgpKSxoLmNsb3NlUGF0aCgpLGguc3Ryb2tlKCksMj09aS5udW1BeGVzKCkmJihoLnN0cm9rZVN0eWxlPWkuZ2V0T3B0aW9uRm9yQXhpcygiYXhpc0xpbmVDb2xvciIsInkyIiksaC5saW5lV2lkdGg9aS5nZXRPcHRpb25Gb3JBeGlzKCJheGlzTGluZVdpZHRoIiwieTIiKSxoLmJlZ2luUGF0aCgpLGgubW92ZVRvKGEodi54K3YudyksYSh2LnkpKSxoLmxpbmVUbyhhKHYueCt2LncpLGEodi55K3YuaCkpLGguY2xvc2VQYXRoKCksaC5zdHJva2UoKSl9aWYoaS5nZXRPcHRpb25Gb3JBeGlzKCJkcmF3QXhpcyIsIngiKSl7aWYoXy54dGlja3Mpe3ZhciBBPWYoIngiKTtmb3IobD0wO2w8Xy54dGlja3MubGVuZ3RoO2wrKyl7cz1fLnh0aWNrc1tsXSxuPXYueCtzWzBdKnYudyxvPXYueSt2Lmgscj15KHNbMV0sIngiKSxyLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIixyLnN0eWxlLnRvcD1vK0EoImF4aXNUaWNrU2l6ZSIpKyJweCI7dmFyIFM9bi1BKCJheGlzTGFiZWxXaWR0aCIpLzI7UytBKCJheGlzTGFiZWxXaWR0aCIpPmcmJihTPWctQSgiYXhpc0xhYmVsV2lkdGgiKSxyLnN0eWxlLnRleHRBbGlnbj0icmlnaHQiKSwwPlMmJihTPTAsci5zdHlsZS50ZXh0QWxpZ249ImxlZnQiKSxyLnN0eWxlLmxlZnQ9UysicHgiLHIuc3R5bGUud2lkdGg9QSgiYXhpc0xhYmVsV2lkdGgiKSsicHgiLApwLmFwcGVuZENoaWxkKHIpLHRoaXMueGxhYmVsc18ucHVzaChyKX19aC5zdHJva2VTdHlsZT1pLmdldE9wdGlvbkZvckF4aXMoImF4aXNMaW5lQ29sb3IiLCJ4IiksaC5saW5lV2lkdGg9aS5nZXRPcHRpb25Gb3JBeGlzKCJheGlzTGluZVdpZHRoIiwieCIpLGguYmVnaW5QYXRoKCk7dmFyIE87aWYoaS5nZXRPcHRpb24oImRyYXdBeGVzQXRaZXJvIikpe3ZhciBQPWkudG9QZXJjZW50WUNvb3JkKDAsMCk7KFA+MXx8MD5QKSYmKFA9MSksTz1hKHYueStQKnYuaCl9ZWxzZSBPPWEodi55K3YuaCk7aC5tb3ZlVG8oZSh2LngpLE8pLGgubGluZVRvKGUodi54K3YudyksTyksaC5jbG9zZVBhdGgoKSxoLnN0cm9rZSgpfWgucmVzdG9yZSgpfX0sdH0oKSxEeWdyYXBoLlBsdWdpbnMuQ2hhcnRMYWJlbHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24oKXt0aGlzLnRpdGxlX2Rpdl89bnVsbCx0aGlzLnhsYWJlbF9kaXZfPW51bGwsdGhpcy55bGFiZWxfZGl2Xz1udWxsLHRoaXMueTJsYWJlbF9kaXZfPW51bGx9O3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNoYXJ0TGFiZWxzIFBsdWdpbiJ9LHQucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKHQpe3JldHVybntsYXlvdXQ6dGhpcy5sYXlvdXQsZGlkRHJhd0NoYXJ0OnRoaXMuZGlkRHJhd0NoYXJ0fX07dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLnN0eWxlLmxlZnQ9dC54KyJweCIsZS5zdHlsZS50b3A9dC55KyJweCIsZS5zdHlsZS53aWR0aD10LncrInB4IixlLnN0eWxlLmhlaWdodD10LmgrInB4IixlfTt0LnByb3RvdHlwZS5kZXRhY2hMYWJlbHNfPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVt0aGlzLnRpdGxlX2Rpdl8sdGhpcy54bGFiZWxfZGl2Xyx0aGlzLnlsYWJlbF9kaXZfLHRoaXMueTJsYWJlbF9kaXZfXSxlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBhPXRbZV07YSYmYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSl9dGhpcy50aXRsZV9kaXZfPW51bGwsdGhpcy54bGFiZWxfZGl2Xz1udWxsLHRoaXMueWxhYmVsX2Rpdl89bnVsbCx0aGlzLnkybGFiZWxfZGl2Xz1udWxsfTt2YXIgYT1mdW5jdGlvbih0LGUsYSxpLHIpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO24uc3R5bGUucG9zaXRpb249ImFic29sdXRlIiwxPT1hP24uc3R5bGUubGVmdD0iMHB4IjpuLnN0eWxlLmxlZnQ9ZS54KyJweCIsbi5zdHlsZS50b3A9ZS55KyJweCIsbi5zdHlsZS53aWR0aD1lLncrInB4IixuLnN0eWxlLmhlaWdodD1lLmgrInB4IixuLnN0eWxlLmZvbnRTaXplPXQuZ2V0T3B0aW9uKCJ5TGFiZWxXaWR0aCIpLTIrInB4Ijt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zdHlsZS53aWR0aD1lLmgrInB4IixvLnN0eWxlLmhlaWdodD1lLncrInB4IixvLnN0eWxlLnRvcD1lLmgvMi1lLncvMisicHgiLG8uc3R5bGUubGVmdD1lLncvMi1lLmgvMisicHgiLG8uc3R5bGUudGV4dEFsaWduPSJjZW50ZXIiO3ZhciBzPSJyb3RhdGUoIisoMT09YT8iLSI6IiIpKyI5MGRlZykiO28uc3R5bGUudHJhbnNmb3JtPXMsby5zdHlsZS5XZWJraXRUcmFuc2Zvcm09cyxvLnN0eWxlLk1velRyYW5zZm9ybT1zLG8uc3R5bGUuT1RyYW5zZm9ybT1zLG8uc3R5bGUubXNUcmFuc2Zvcm09cywidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50LmRvY3VtZW50TW9kZSYmZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDkmJihvLnN0eWxlLmZpbHRlcj0icHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249IisoMT09YT8iMyI6IjEiKSsiKSIsby5zdHlsZS5sZWZ0PSIwcHgiLG8uc3R5bGUudG9wPSIwcHgiKTt2YXIgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gbC5jbGFzc05hbWU9aSxsLmlubmVySFRNTD1yLG8uYXBwZW5kQ2hpbGQobCksbi5hcHBlbmRDaGlsZChvKSxufTtyZXR1cm4gdC5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKHQpe3RoaXMuZGV0YWNoTGFiZWxzXygpO3ZhciBpPXQuZHlncmFwaCxyPXQuY2hhcnRfZGl2O2lmKGkuZ2V0T3B0aW9uKCJ0aXRsZSIpKXt2YXIgbj10LnJlc2VydmVTcGFjZVRvcChpLmdldE9wdGlvbigidGl0bGVIZWlnaHQiKSk7dGhpcy50aXRsZV9kaXZfPWUobiksdGhpcy50aXRsZV9kaXZfLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIix0aGlzLnRpdGxlX2Rpdl8uc3R5bGUuZm9udFNpemU9aS5nZXRPcHRpb24oInRpdGxlSGVpZ2h0IiktOCsicHgiLHRoaXMudGl0bGVfZGl2Xy5zdHlsZS5mb250V2VpZ2h0PSJib2xkIix0aGlzLnRpdGxlX2Rpdl8uc3R5bGUuekluZGV4PTEwO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uY2xhc3NOYW1lPSJkeWdyYXBoLWxhYmVsIGR5Z3JhcGgtdGl0bGUiLG8uaW5uZXJIVE1MPWkuZ2V0T3B0aW9uKCJ0aXRsZSIpLHRoaXMudGl0bGVfZGl2Xy5hcHBlbmRDaGlsZChvKSxyLmFwcGVuZENoaWxkKHRoaXMudGl0bGVfZGl2Xyl9aWYoaS5nZXRPcHRpb24oInhsYWJlbCIpKXt2YXIgcz10LnJlc2VydmVTcGFjZUJvdHRvbShpLmdldE9wdGlvbigieExhYmVsSGVpZ2h0IikpO3RoaXMueGxhYmVsX2Rpdl89ZShzKSx0aGlzLnhsYWJlbF9kaXZfLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIix0aGlzLnhsYWJlbF9kaXZfLnN0eWxlLmZvbnRTaXplPWkuZ2V0T3B0aW9uKCJ4TGFiZWxIZWlnaHQiKS0yKyJweCI7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7by5jbGFzc05hbWU9ImR5Z3JhcGgtbGFiZWwgZHlncmFwaC14bGFiZWwiLG8uaW5uZXJIVE1MPWkuZ2V0T3B0aW9uKCJ4bGFiZWwiKSx0aGlzLnhsYWJlbF9kaXZfLmFwcGVuZENoaWxkKG8pLHIuYXBwZW5kQ2hpbGQodGhpcy54bGFiZWxfZGl2Xyl9aWYoaS5nZXRPcHRpb24oInlsYWJlbCIpKXt2YXIgbD10LnJlc2VydmVTcGFjZUxlZnQoMCk7dGhpcy55bGFiZWxfZGl2Xz1hKGksbCwxLCJkeWdyYXBoLWxhYmVsIGR5Z3JhcGgteWxhYmVsIixpLmdldE9wdGlvbigieWxhYmVsIikpLHIuYXBwZW5kQ2hpbGQodGhpcy55bGFiZWxfZGl2Xyl9aWYoaS5nZXRPcHRpb24oInkybGFiZWwiKSYmMj09aS5udW1BeGVzKCkpe3ZhciBoPXQucmVzZXJ2ZVNwYWNlUmlnaHQoMCk7dGhpcy55MmxhYmVsX2Rpdl89YShpLGgsMiwiZHlncmFwaC1sYWJlbCBkeWdyYXBoLXkybGFiZWwiLGkuZ2V0T3B0aW9uKCJ5MmxhYmVsIikpLHIuYXBwZW5kQ2hpbGQodGhpcy55MmxhYmVsX2Rpdl8pfX0sdC5wcm90b3R5cGUuZGlkRHJhd0NoYXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXQuZHlncmFwaDt0aGlzLnRpdGxlX2Rpdl8mJih0aGlzLnRpdGxlX2Rpdl8uY2hpbGRyZW5bMF0uaW5uZXJIVE1MPWUuZ2V0T3B0aW9uKCJ0aXRsZSIpKSx0aGlzLnhsYWJlbF9kaXZfJiYodGhpcy54bGFiZWxfZGl2Xy5jaGlsZHJlblswXS5pbm5lckhUTUw9ZS5nZXRPcHRpb24oInhsYWJlbCIpKSx0aGlzLnlsYWJlbF9kaXZfJiYodGhpcy55bGFiZWxfZGl2Xy5jaGlsZHJlblswXS5jaGlsZHJlblswXS5pbm5lckhUTUw9ZS5nZXRPcHRpb24oInlsYWJlbCIpKSx0aGlzLnkybGFiZWxfZGl2XyYmKHRoaXMueTJsYWJlbF9kaXZfLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmlubmVySFRNTD1lLmdldE9wdGlvbigieTJsYWJlbCIpKX0sdC5wcm90b3R5cGUuY2xlYXJDaGFydD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGV0YWNoTGFiZWxzXygpfSx0fSgpLER5Z3JhcGguUGx1Z2lucy5HcmlkPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKCl7fTtyZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iR3JpZGxpbmUgUGx1Z2luIn0sdC5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24odCl7cmV0dXJue3dpbGxEcmF3Q2hhcnQ6dGhpcy53aWxsRHJhd0NoYXJ0fX0sdC5wcm90b3R5cGUud2lsbERyYXdDaGFydD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpKy41fWZ1bmN0aW9uIGEodCl7cmV0dXJuIE1hdGgucm91bmQodCktLjV9dmFyIGkscixuLG8scz10LmR5Z3JhcGgsbD10LmRyYXdpbmdDb250ZXh0LGg9cy5sYXlvdXRfLHA9dC5keWdyYXBoLnBsb3R0ZXJfLmFyZWE7aWYocy5nZXRPcHRpb25Gb3JBeGlzKCJkcmF3R3JpZCIsInkiKSl7Zm9yKHZhciBnPVsieSIsInkyIl0sZD1bXSx1PVtdLGM9W10seT1bXSxfPVtdLG49MDtuPGcubGVuZ3RoO24rKyljW25dPXMuZ2V0T3B0aW9uRm9yQXhpcygiZHJhd0dyaWQiLGdbbl0pLGNbbl0mJihkW25dPXMuZ2V0T3B0aW9uRm9yQXhpcygiZ3JpZExpbmVDb2xvciIsZ1tuXSksdVtuXT1zLmdldE9wdGlvbkZvckF4aXMoImdyaWRMaW5lV2lkdGgiLGdbbl0pLF9bbl09cy5nZXRPcHRpb25Gb3JBeGlzKCJncmlkTGluZVBhdHRlcm4iLGdbbl0pLHlbbl09X1tuXSYmX1tuXS5sZW5ndGg+PTIpO2ZvcihvPWgueXRpY2tzLGwuc2F2ZSgpLG49MDtuPG8ubGVuZ3RoO24rKyl7dmFyIHY9b1tuXVswXTtjW3ZdJiYoeVt2XSYmbC5pbnN0YWxsUGF0dGVybihfW3ZdKSxsLnN0cm9rZVN0eWxlPWRbdl0sbC5saW5lV2lkdGg9dVt2XSxpPWUocC54KSxyPWEocC55K29bbl1bMV0qcC5oKSxsLmJlZ2luUGF0aCgpLGwubW92ZVRvKGksciksbC5saW5lVG8oaStwLncsciksbC5jbG9zZVBhdGgoKSxsLnN0cm9rZSgpLHlbdl0mJmwudW5pbnN0YWxsUGF0dGVybigpKX1sLnJlc3RvcmUoKX1pZihzLmdldE9wdGlvbkZvckF4aXMoImRyYXdHcmlkIiwieCIpKXtvPWgueHRpY2tzLGwuc2F2ZSgpO3ZhciBfPXMuZ2V0T3B0aW9uRm9yQXhpcygiZ3JpZExpbmVQYXR0ZXJuIiwieCIpLHk9XyYmXy5sZW5ndGg+PTI7Zm9yKHkmJmwuaW5zdGFsbFBhdHRlcm4oXyksbC5zdHJva2VTdHlsZT1zLmdldE9wdGlvbkZvckF4aXMoImdyaWRMaW5lQ29sb3IiLCJ4IiksbC5saW5lV2lkdGg9cy5nZXRPcHRpb25Gb3JBeGlzKCJncmlkTGluZVdpZHRoIiwieCIpLG49MDtuPG8ubGVuZ3RoO24rKylpPWUocC54K29bbl1bMF0qcC53KSxyPWEocC55K3AuaCksbC5iZWdpblBhdGgoKSxsLm1vdmVUbyhpLHIpLGwubGluZVRvKGkscC55KSxsLmNsb3NlUGF0aCgpLGwuc3Ryb2tlKCk7eSYmbC51bmluc3RhbGxQYXR0ZXJuKCksbC5yZXN0b3JlKCl9fSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSx0fSgpLER5Z3JhcGguUGx1Z2lucy5MZWdlbmQ9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24oKXt0aGlzLmxlZ2VuZF9kaXZfPW51bGwsdGhpcy5pc19nZW5lcmF0ZWRfZGl2Xz0hMX07dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTGVnZW5kIFBsdWdpbiJ9O3ZhciBlO3QucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKHQpe3ZhciBlLGE9dC5nZXRPcHRpb24oImxhYmVsc0RpdldpZHRoIiksaT10LmdldE9wdGlvbigibGFiZWxzRGl2Iik7aWYoaSYmbnVsbCE9PWkpZT0ic3RyaW5nIj09dHlwZW9mIGl8fGkgaW5zdGFuY2VvZiBTdHJpbmc/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSk6aTtlbHNle3ZhciByPXtwb3NpdGlvbjoiYWJzb2x1dGUiLGZvbnRTaXplOiIxNHB4Iix6SW5kZXg6MTAsd2lkdGg6YSsicHgiLHRvcDoiMHB4IixsZWZ0OnQuc2l6ZSgpLndpZHRoLWEtMisicHgiLGJhY2tncm91bmQ6IndoaXRlIixsaW5lSGVpZ2h0OiJub3JtYWwiLHRleHRBbGlnbjoibGVmdCIsb3ZlcmZsb3c6ImhpZGRlbiJ9O0R5Z3JhcGgudXBkYXRlKHIsdC5nZXRPcHRpb24oImxhYmVsc0RpdlN0eWxlcyIpKSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuY2xhc3NOYW1lPSJkeWdyYXBoLWxlZ2VuZCI7Zm9yKHZhciBuIGluIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShuKSl0cnl7ZS5zdHlsZVtuXT1yW25dfWNhdGNoKG8pe2NvbnNvbGUud2FybigiWW91IGFyZSB1c2luZyB1bnN1cHBvcnRlZCBjc3MgcHJvcGVydGllcyBmb3IgeW91ciBicm93c2VyIGluIGxhYmVsc0RpdlN0eWxlcyIpfXQuZ3JhcGhEaXYuYXBwZW5kQ2hpbGQoZSksdGhpcy5pc19nZW5lcmF0ZWRfZGl2Xz0hMH1yZXR1cm4gdGhpcy5sZWdlbmRfZGl2Xz1lLHRoaXMub25lX2VtX3dpZHRoXz0xMCx7c2VsZWN0OnRoaXMuc2VsZWN0LGRlc2VsZWN0OnRoaXMuZGVzZWxlY3QscHJlZHJhdzp0aGlzLnByZWRyYXcsZGlkRHJhd0NoYXJ0OnRoaXMuZGlkRHJhd0NoYXJ0fX07dmFyIGE9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2Uuc2V0QXR0cmlidXRlKCJzdHlsZSIsIm1hcmdpbjogMDsgcGFkZGluZzogMCAwIDAgMWVtOyBib3JkZXI6IDA7IiksdC5hcHBlbmRDaGlsZChlKTt2YXIgYT1lLm9mZnNldFdpZHRoO3JldHVybiB0LnJlbW92ZUNoaWxkKGUpLGF9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9O3JldHVybiB0LnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oZSl7dmFyIGE9ZS5zZWxlY3RlZFgsaT1lLnNlbGVjdGVkUG9pbnRzLHI9ZS5zZWxlY3RlZFJvdyxuPWUuZHlncmFwaC5nZXRPcHRpb24oImxlZ2VuZCIpO2lmKCJuZXZlciI9PT1uKXJldHVybiB2b2lkKHRoaXMubGVnZW5kX2Rpdl8uc3R5bGUuZGlzcGxheT0ibm9uZSIpO2lmKCJmb2xsb3ciPT09bil7dmFyIG89ZS5keWdyYXBoLnBsb3R0ZXJfLmFyZWEscz1lLmR5Z3JhcGguZ2V0T3B0aW9uKCJsYWJlbHNEaXZXaWR0aCIpLGw9ZS5keWdyYXBoLmdldE9wdGlvbkZvckF4aXMoImF4aXNMYWJlbFdpZHRoIiwieSIpLGg9aVswXS54Km8udysyMCxwPWlbMF0ueSpvLmgtMjA7aCtzKzE+d2luZG93LnNjcm9sbFgrd2luZG93LmlubmVyV2lkdGgmJihoPWgtNDAtcy0obC1vLngpKSxlLmR5Z3JhcGguZ3JhcGhEaXYuYXBwZW5kQ2hpbGQodGhpcy5sZWdlbmRfZGl2XyksdGhpcy5sZWdlbmRfZGl2Xy5zdHlsZS5sZWZ0PWwraCsicHgiLHRoaXMubGVnZW5kX2Rpdl8uc3R5bGUudG9wPXArInB4In12YXIgZz10LmdlbmVyYXRlTGVnZW5kSFRNTChlLmR5Z3JhcGgsYSxpLHRoaXMub25lX2VtX3dpZHRoXyxyKTt0aGlzLmxlZ2VuZF9kaXZfLmlubmVySFRNTD1nLHRoaXMubGVnZW5kX2Rpdl8uc3R5bGUuZGlzcGxheT0iIn0sdC5wcm90b3R5cGUuZGVzZWxlY3Q9ZnVuY3Rpb24oZSl7dmFyIGk9ZS5keWdyYXBoLmdldE9wdGlvbigibGVnZW5kIik7ImFsd2F5cyIhPT1pJiYodGhpcy5sZWdlbmRfZGl2Xy5zdHlsZS5kaXNwbGF5PSJub25lIik7dmFyIHI9YSh0aGlzLmxlZ2VuZF9kaXZfKTt0aGlzLm9uZV9lbV93aWR0aF89cjt2YXIgbj10LmdlbmVyYXRlTGVnZW5kSFRNTChlLmR5Z3JhcGgsdm9pZCAwLHZvaWQgMCxyLG51bGwpO3RoaXMubGVnZW5kX2Rpdl8uaW5uZXJIVE1MPW59LHQucHJvdG90eXBlLmRpZERyYXdDaGFydD1mdW5jdGlvbih0KXt0aGlzLmRlc2VsZWN0KHQpfSx0LnByb3RvdHlwZS5wcmVkcmF3PWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNfZ2VuZXJhdGVkX2Rpdl8pe3QuZHlncmFwaC5ncmFwaERpdi5hcHBlbmRDaGlsZCh0aGlzLmxlZ2VuZF9kaXZfKTt2YXIgZT10LmR5Z3JhcGgucGxvdHRlcl8uYXJlYSxhPXQuZHlncmFwaC5nZXRPcHRpb24oImxhYmVsc0RpdldpZHRoIik7dGhpcy5sZWdlbmRfZGl2Xy5zdHlsZS5sZWZ0PWUueCtlLnctYS0xKyJweCIsdGhpcy5sZWdlbmRfZGl2Xy5zdHlsZS50b3A9ZS55KyJweCIsdGhpcy5sZWdlbmRfZGl2Xy5zdHlsZS53aWR0aD1hKyJweCJ9fSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sZWdlbmRfZGl2Xz1udWxsfSx0LmdlbmVyYXRlTGVnZW5kSFRNTD1mdW5jdGlvbih0LGEscixuLG8pe2lmKHQuZ2V0T3B0aW9uKCJzaG93TGFiZWxzT25IaWdobGlnaHQiKSE9PSEwKXJldHVybiIiO3ZhciBzLGwsaCxwLGcsZD10LmdldExhYmVscygpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgYSl7aWYoImFsd2F5cyIhPXQuZ2V0T3B0aW9uKCJsZWdlbmQiKSlyZXR1cm4iIjtmb3IobD10LmdldE9wdGlvbigibGFiZWxzU2VwYXJhdGVMaW5lcyIpLHM9IiIsaD0xO2g8ZC5sZW5ndGg7aCsrKXt2YXIgdT10LmdldFByb3BlcnRpZXNGb3JTZXJpZXMoZFtoXSk7dS52aXNpYmxlJiYoIiIhPT1zJiYocys9bD8iPGJyLz4iOiIgIiksZz10LmdldE9wdGlvbigic3Ryb2tlUGF0dGVybiIsZFtoXSkscD1lKGcsdS5jb2xvcixuKSxzKz0iPHNwYW4gc3R5bGU9J2ZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogIit1LmNvbG9yKyI7Jz4iK3ArIiAiK2koZFtoXSkrIjwvc3Bhbj4iKX1yZXR1cm4gc312YXIgYz10Lm9wdGlvbnNWaWV3Rm9yQXhpc18oIngiKSx5PWMoInZhbHVlRm9ybWF0dGVyIik7cz15LmNhbGwodCxhLGMsZFswXSx0LG8sMCksIiIhPT1zJiYocys9IjoiKTt2YXIgXz1bXSx2PXQubnVtQXhlcygpO2ZvcihoPTA7dj5oO2grKylfW2hdPXQub3B0aW9uc1ZpZXdGb3JBeGlzXygieSIrKGg/MStoOiIiKSk7dmFyIGY9dC5nZXRPcHRpb24oImxhYmVsc1Nob3daZXJvVmFsdWVzIik7bD10LmdldE9wdGlvbigibGFiZWxzU2VwYXJhdGVMaW5lcyIpO3ZhciB4PXQuZ2V0SGlnaGxpZ2h0U2VyaWVzKCk7Zm9yKGg9MDtoPHIubGVuZ3RoO2grKyl7dmFyIG09cltoXTtpZigoMCE9PW0ueXZhbHx8ZikmJkR5Z3JhcGguaXNPSyhtLmNhbnZhc3kpKXtsJiYocys9Ijxici8+Iik7dmFyIHU9dC5nZXRQcm9wZXJ0aWVzRm9yU2VyaWVzKG0ubmFtZSksRD1fW3UuYXhpcy0xXSx3PUQoInZhbHVlRm9ybWF0dGVyIiksQT13LmNhbGwodCxtLnl2YWwsRCxtLm5hbWUsdCxvLGQuaW5kZXhPZihtLm5hbWUpKSxiPW0ubmFtZT09eD8iIGNsYXNzPSdoaWdobGlnaHQnIjoiIjtzKz0iPHNwYW4iK2IrIj4gPGI+PHNwYW4gc3R5bGU9J2NvbG9yOiAiK3UuY29sb3IrIjsnPiIraShtLm5hbWUpKyI8L3NwYW4+PC9iPjomIzE2MDsiK0ErIjwvc3Bhbj4ifX1yZXR1cm4gc30sZT1mdW5jdGlvbih0LGUsYSl7dmFyIGk9L01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF3aW5kb3cub3BlcmE7aWYoaSlyZXR1cm4iJm1kYXNoOyI7aWYoIXR8fHQubGVuZ3RoPD0xKXJldHVybic8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYm90dG9tOiAuNWV4OyBwYWRkaW5nLWxlZnQ6IDFlbTsgaGVpZ2h0OiAxcHg7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAnK2UrJzsiPjwvZGl2Pic7dmFyIHIsbixvLHMsbCxoPTAscD0wLGc9W107Zm9yKHI9MDtyPD10Lmxlbmd0aDtyKyspaCs9dFtyJXQubGVuZ3RoXTtpZihsPU1hdGguZmxvb3IoYS8oaC10WzBdKSksbD4xKXtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWdbcl09dFtyXS9hO3A9Zy5sZW5ndGh9ZWxzZXtmb3IobD0xLHI9MDtyPHQubGVuZ3RoO3IrKylnW3JdPXRbcl0vaDtwPWcubGVuZ3RoKzF9dmFyIGQ9IiI7Zm9yKG49MDtsPm47bisrKWZvcihyPTA7cD5yO3IrPTIpbz1nW3IlZy5sZW5ndGhdLHM9cjx0Lmxlbmd0aD9nWyhyKzEpJWcubGVuZ3RoXTowLGQrPSc8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYm90dG9tOiAuNWV4OyBtYXJnaW4tcmlnaHQ6ICcrcysiZW07IHBhZGRpbmctbGVmdDogIitvKyJlbTsgaGVpZ2h0OiAxcHg7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAiK2UrJzsiPjwvZGl2Pic7cmV0dXJuIGR9LHR9KCksRHlncmFwaC5QbHVnaW5zLlJhbmdlU2VsZWN0b3I9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24oKXt0aGlzLmlzSUVfPS9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhd2luZG93Lm9wZXJhLHRoaXMuaGFzVG91Y2hJbnRlcmZhY2VfPSJ1bmRlZmluZWQiIT10eXBlb2YgVG91Y2hFdmVudCx0aGlzLmlzTW9iaWxlRGV2aWNlXz0vbW9iaWxlfGFuZHJvaWQvZ2kudGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbiksdGhpcy5pbnRlcmZhY2VDcmVhdGVkXz0hMX07cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJhbmdlU2VsZWN0b3IgUGx1Z2luIn0sdC5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZHlncmFwaF89dCx0aGlzLmlzVXNpbmdFeGNhbnZhc189dC5pc1VzaW5nRXhjYW52YXNfLHRoaXMuZ2V0T3B0aW9uXygic2hvd1JhbmdlU2VsZWN0b3IiKSYmdGhpcy5jcmVhdGVJbnRlcmZhY2VfKCkse2xheW91dDp0aGlzLnJlc2VydmVTcGFjZV8scHJlZHJhdzp0aGlzLnJlbmRlclN0YXRpY0xheWVyXyxkaWREcmF3Q2hhcnQ6dGhpcy5yZW5kZXJJbnRlcmFjdGl2ZUxheWVyX319LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmJnY2FudmFzXz1udWxsLHRoaXMuZmdjYW52YXNfPW51bGwsdGhpcy5sZWZ0Wm9vbUhhbmRsZV89bnVsbCx0aGlzLnJpZ2h0Wm9vbUhhbmRsZV89bnVsbCx0aGlzLmllUGFuT3ZlcmxheV89bnVsbH0sdC5wcm90b3R5cGUuZ2V0T3B0aW9uXz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmR5Z3JhcGhfLmdldE9wdGlvbih0LGUpfSx0LnByb3RvdHlwZS5zZXREZWZhdWx0T3B0aW9uXz1mdW5jdGlvbih0LGUpe3RoaXMuZHlncmFwaF8uYXR0cnNfW3RdPWV9LHQucHJvdG90eXBlLmNyZWF0ZUludGVyZmFjZV89ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZUNhbnZhc2VzXygpLHRoaXMuaXNVc2luZ0V4Y2FudmFzXyYmdGhpcy5jcmVhdGVJRVBhbk92ZXJsYXlfKCksdGhpcy5jcmVhdGVab29tSGFuZGxlc18oKSx0aGlzLmluaXRJbnRlcmFjdGlvbl8oKSx0aGlzLmdldE9wdGlvbl8oImFuaW1hdGVkWm9vbXMiKSYmKGNvbnNvbGUud2FybigiQW5pbWF0ZWQgem9vbXMgYW5kIHJhbmdlIHNlbGVjdG9yIGFyZSBub3QgY29tcGF0aWJsZTsgZGlzYWJsaW5nIGFuaW1hdGVkWm9vbXMuIiksdGhpcy5keWdyYXBoXy51cGRhdGVPcHRpb25zKHthbmltYXRlZFpvb21zOiExfSwhMCkpLHRoaXMuaW50ZXJmYWNlQ3JlYXRlZF89ITAsdGhpcy5hZGRUb0dyYXBoXygpfSx0LnByb3RvdHlwZS5hZGRUb0dyYXBoXz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ3JhcGhEaXZfPXRoaXMuZHlncmFwaF8uZ3JhcGhEaXY7dC5hcHBlbmRDaGlsZCh0aGlzLmJnY2FudmFzXyksdC5hcHBlbmRDaGlsZCh0aGlzLmZnY2FudmFzXyksdC5hcHBlbmRDaGlsZCh0aGlzLmxlZnRab29tSGFuZGxlXyksdC5hcHBlbmRDaGlsZCh0aGlzLnJpZ2h0Wm9vbUhhbmRsZV8pfSx0LnByb3RvdHlwZS5yZW1vdmVGcm9tR3JhcGhfPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdl87dC5yZW1vdmVDaGlsZCh0aGlzLmJnY2FudmFzXyksdC5yZW1vdmVDaGlsZCh0aGlzLmZnY2FudmFzXyksdC5yZW1vdmVDaGlsZCh0aGlzLmxlZnRab29tSGFuZGxlXyksdC5yZW1vdmVDaGlsZCh0aGlzLnJpZ2h0Wm9vbUhhbmRsZV8pLHRoaXMuZ3JhcGhEaXZfPW51bGx9LHQucHJvdG90eXBlLnJlc2VydmVTcGFjZV89ZnVuY3Rpb24odCl7dGhpcy5nZXRPcHRpb25fKCJzaG93UmFuZ2VTZWxlY3RvciIpJiZ0LnJlc2VydmVTcGFjZUJvdHRvbSh0aGlzLmdldE9wdGlvbl8oInJhbmdlU2VsZWN0b3JIZWlnaHQiKSs0KX0sdC5wcm90b3R5cGUucmVuZGVyU3RhdGljTGF5ZXJfPWZ1bmN0aW9uKCl7dGhpcy51cGRhdGVWaXNpYmlsaXR5XygpJiYodGhpcy5yZXNpemVfKCksdGhpcy5kcmF3U3RhdGljTGF5ZXJfKCkpfSx0LnByb3RvdHlwZS5yZW5kZXJJbnRlcmFjdGl2ZUxheWVyXz1mdW5jdGlvbigpe3RoaXMudXBkYXRlVmlzaWJpbGl0eV8oKSYmIXRoaXMuaXNDaGFuZ2luZ1JhbmdlXyYmKHRoaXMucGxhY2Vab29tSGFuZGxlc18oKSx0aGlzLmRyYXdJbnRlcmFjdGl2ZUxheWVyXygpKX0sdC5wcm90b3R5cGUudXBkYXRlVmlzaWJpbGl0eV89ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldE9wdGlvbl8oInNob3dSYW5nZVNlbGVjdG9yIik7aWYodCl0aGlzLmludGVyZmFjZUNyZWF0ZWRfP3RoaXMuZ3JhcGhEaXZfJiZ0aGlzLmdyYXBoRGl2Xy5wYXJlbnROb2RlfHx0aGlzLmFkZFRvR3JhcGhfKCk6dGhpcy5jcmVhdGVJbnRlcmZhY2VfKCk7ZWxzZSBpZih0aGlzLmdyYXBoRGl2Xyl7dGhpcy5yZW1vdmVGcm9tR3JhcGhfKCk7dmFyIGU9dGhpcy5keWdyYXBoXztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS53aWR0aF89MCxlLnJlc2l6ZSgpfSwxKX1yZXR1cm4gdH0sdC5wcm90b3R5cGUucmVzaXplXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLGEpe3ZhciBpPUR5Z3JhcGguZ2V0Q29udGV4dFBpeGVsUmF0aW8oZSk7dC5zdHlsZS50b3A9YS55KyJweCIsdC5zdHlsZS5sZWZ0PWEueCsicHgiLHQud2lkdGg9YS53KmksdC5oZWlnaHQ9YS5oKmksdC5zdHlsZS53aWR0aD1hLncrInB4Iix0LnN0eWxlLmhlaWdodD1hLmgrInB4IiwxIT1pJiZlLnNjYWxlKGksaSl9dmFyIGU9dGhpcy5keWdyYXBoXy5sYXlvdXRfLmdldFBsb3RBcmVhKCksYT0wO3RoaXMuZHlncmFwaF8uZ2V0T3B0aW9uRm9yQXhpcygiZHJhd0F4aXMiLCJ4IikmJihhPXRoaXMuZ2V0T3B0aW9uXygieEF4aXNIZWlnaHQiKXx8dGhpcy5nZXRPcHRpb25fKCJheGlzTGFiZWxGb250U2l6ZSIpKzIqdGhpcy5nZXRPcHRpb25fKCJheGlzVGlja1NpemUiKSksdGhpcy5jYW52YXNSZWN0Xz17eDplLngseTplLnkrZS5oK2ErNCx3OmUudyxoOnRoaXMuZ2V0T3B0aW9uXygicmFuZ2VTZWxlY3RvckhlaWdodCIpfSx0KHRoaXMuYmdjYW52YXNfLHRoaXMuYmdjYW52YXNfY3R4Xyx0aGlzLmNhbnZhc1JlY3RfKSx0KHRoaXMuZmdjYW52YXNfLHRoaXMuZmdjYW52YXNfY3R4Xyx0aGlzLmNhbnZhc1JlY3RfKX0sdC5wcm90b3R5cGUuY3JlYXRlQ2FudmFzZXNfPWZ1bmN0aW9uKCl7dGhpcy5iZ2NhbnZhc189RHlncmFwaC5jcmVhdGVDYW52YXMoKSx0aGlzLmJnY2FudmFzXy5jbGFzc05hbWU9ImR5Z3JhcGgtcmFuZ2VzZWwtYmdjYW52YXMiLHRoaXMuYmdjYW52YXNfLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5iZ2NhbnZhc18uc3R5bGUuekluZGV4PTksdGhpcy5iZ2NhbnZhc19jdHhfPUR5Z3JhcGguZ2V0Q29udGV4dCh0aGlzLmJnY2FudmFzXyksdGhpcy5mZ2NhbnZhc189RHlncmFwaC5jcmVhdGVDYW52YXMoKSx0aGlzLmZnY2FudmFzXy5jbGFzc05hbWU9ImR5Z3JhcGgtcmFuZ2VzZWwtZmdjYW52YXMiLHRoaXMuZmdjYW52YXNfLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5mZ2NhbnZhc18uc3R5bGUuekluZGV4PTksdGhpcy5mZ2NhbnZhc18uc3R5bGUuY3Vyc29yPSJkZWZhdWx0Iix0aGlzLmZnY2FudmFzX2N0eF89RHlncmFwaC5nZXRDb250ZXh0KHRoaXMuZmdjYW52YXNfKX0sdC5wcm90b3R5cGUuY3JlYXRlSUVQYW5PdmVybGF5Xz1mdW5jdGlvbigpe3RoaXMuaWVQYW5PdmVybGF5Xz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmllUGFuT3ZlcmxheV8uc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmllUGFuT3ZlcmxheV8uc3R5bGUuYmFja2dyb3VuZENvbG9yPSJ3aGl0ZSIsdGhpcy5pZVBhbk92ZXJsYXlfLnN0eWxlLmZpbHRlcj0iYWxwaGEob3BhY2l0eT0wKSIsdGhpcy5pZVBhbk92ZXJsYXlfLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuaWVQYW5PdmVybGF5Xy5zdHlsZS5jdXJzb3I9Im1vdmUiLHRoaXMuZmdjYW52YXNfLmFwcGVuZENoaWxkKHRoaXMuaWVQYW5PdmVybGF5Xyl9LHQucHJvdG90eXBlLmNyZWF0ZVpvb21IYW5kbGVzXz1mdW5jdGlvbigpe3ZhciB0PW5ldyBJbWFnZTt0LmNsYXNzTmFtZT0iZHlncmFwaC1yYW5nZXNlbC16b29taGFuZGxlIix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zdHlsZS56SW5kZXg9MTAsdC5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHQuc3R5bGUuY3Vyc29yPSJjb2wtcmVzaXplIiwvTVNJRSA3Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpPyh0LndpZHRoPTcsdC5oZWlnaHQ9MTQsdC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IndoaXRlIix0LnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkICMzMzMzMzMiKToodC53aWR0aD05LHQuaGVpZ2h0PTE2LHQuc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFrQUFBQVFDQVlBQUFERVNGVkRBQUFBQVhOU1IwSUFyczRjNlFBQUFBWmlTMGRFQU5BQXp3RFA0WjdLZWdBQUFBbHdTRmx6QUFBT3hBQUFEc1FCbFNzT0d3QUFBQWQwU1UxRkI5c0hHdzBjTXFkdDFVd0FBQUFaZEVWWWRFTnZiVzFsYm5RQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZCWGdRNFhBQUFBYUVsRVFWUW96KzNTc1JGQVFCQ0Y0WjlXSk04S0NEVndvd25sNllYc1RtQ1VzeUtHa1p6Y2w3emt6M1lMa3lwZ0FucmVGbURFcEhrSXdWT01mcGRpOUNFRU4ybkdwRmR3RDAzeUVxRHRPZ0NhdW43c3FTVERIMzJJMXBRQTJQYjlzWmVjQXhjNXIzSUFiMjFkNjg3OHhzQUFBQUFBU1VWT1JLNUNZSUk9IiksdGhpcy5pc01vYmlsZURldmljZV8mJih0LndpZHRoKj0yLHQuaGVpZ2h0Kj0yKSx0aGlzLmxlZnRab29tSGFuZGxlXz10LHRoaXMucmlnaHRab29tSGFuZGxlXz10LmNsb25lTm9kZSghMSl9LHQucHJvdG90eXBlLmluaXRJbnRlcmFjdGlvbl89ZnVuY3Rpb24oKXt2YXIgdCxlLGEsaSxyLG4sbyxzLGwsaCxwLGcsZCx1LGM9dGhpcyx5PWRvY3VtZW50LF89MCx2PW51bGwsZj0hMSx4PSExLG09IXRoaXMuaXNNb2JpbGVEZXZpY2VfJiYhdGhpcy5pc1VzaW5nRXhjYW52YXNfLEQ9bmV3IER5Z3JhcGguSUZyYW1lVGFycDt0PWZ1bmN0aW9uKHQpe3ZhciBlPWMuZHlncmFwaF8ueEF4aXNFeHRyZW1lcygpLGE9KGVbMV0tZVswXSkvYy5jYW52YXNSZWN0Xy53LGk9ZVswXSsodC5sZWZ0SGFuZGxlUG9zLWMuY2FudmFzUmVjdF8ueCkqYSxyPWVbMF0rKHQucmlnaHRIYW5kbGVQb3MtYy5jYW52YXNSZWN0Xy54KSphO3JldHVybltpLHJdfSxlPWZ1bmN0aW9uKHQpe3JldHVybiBEeWdyYXBoLmNhbmNlbEV2ZW50KHQpLGY9ITAsXz10LmNsaWVudFgsdj10LnRhcmdldD90LnRhcmdldDp0LnNyY0VsZW1lbnQsKCJtb3VzZWRvd24iPT09dC50eXBlfHwiZHJhZ3N0YXJ0Ij09PXQudHlwZSkmJihEeWdyYXBoLmFkZEV2ZW50KHksIm1vdXNlbW92ZSIsYSksRHlncmFwaC5hZGRFdmVudCh5LCJtb3VzZXVwIixpKSksYy5mZ2NhbnZhc18uc3R5bGUuY3Vyc29yPSJjb2wtcmVzaXplIixELmNvdmVyKCksITB9LGE9ZnVuY3Rpb24odCl7aWYoIWYpcmV0dXJuITE7RHlncmFwaC5jYW5jZWxFdmVudCh0KTt2YXIgZT10LmNsaWVudFgtXztpZihNYXRoLmFicyhlKTw0KXJldHVybiEwO189dC5jbGllbnRYO3ZhciBhLGk9Yy5nZXRab29tSGFuZGxlU3RhdHVzXygpO3Y9PWMubGVmdFpvb21IYW5kbGVfPyhhPWkubGVmdEhhbmRsZVBvcytlLGE9TWF0aC5taW4oYSxpLnJpZ2h0SGFuZGxlUG9zLXYud2lkdGgtMyksYT1NYXRoLm1heChhLGMuY2FudmFzUmVjdF8ueCkpOihhPWkucmlnaHRIYW5kbGVQb3MrZSxhPU1hdGgubWluKGEsYy5jYW52YXNSZWN0Xy54K2MuY2FudmFzUmVjdF8udyksYT1NYXRoLm1heChhLGkubGVmdEhhbmRsZVBvcyt2LndpZHRoKzMpKTt2YXIgbj12LndpZHRoLzI7cmV0dXJuIHYuc3R5bGUubGVmdD1hLW4rInB4IixjLmRyYXdJbnRlcmFjdGl2ZUxheWVyXygpLG0mJnIoKSwhMH0saT1mdW5jdGlvbih0KXtyZXR1cm4gZj8oZj0hMSxELnVuY292ZXIoKSxEeWdyYXBoLnJlbW92ZUV2ZW50KHksIm1vdXNlbW92ZSIsYSksRHlncmFwaC5yZW1vdmVFdmVudCh5LCJtb3VzZXVwIixpKSxjLmZnY2FudmFzXy5zdHlsZS5jdXJzb3I9ImRlZmF1bHQiLG18fHIoKSwhMCk6ITF9LHI9ZnVuY3Rpb24oKXt0cnl7dmFyIGU9Yy5nZXRab29tSGFuZGxlU3RhdHVzXygpO2lmKGMuaXNDaGFuZ2luZ1JhbmdlXz0hMCxlLmlzWm9vbWVkKXt2YXIgYT10KGUpO2MuZHlncmFwaF8uZG9ab29tWERhdGVzXyhhWzBdLGFbMV0pfWVsc2UgYy5keWdyYXBoXy5yZXNldFpvb20oKX1maW5hbGx5e2MuaXNDaGFuZ2luZ1JhbmdlXz0hMX19LG49ZnVuY3Rpb24odCl7aWYoYy5pc1VzaW5nRXhjYW52YXNfKXJldHVybiB0LnNyY0VsZW1lbnQ9PWMuaWVQYW5PdmVybGF5Xzt2YXIgZT1jLmxlZnRab29tSGFuZGxlXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWUubGVmdCtlLndpZHRoLzI7ZT1jLnJpZ2h0Wm9vbUhhbmRsZV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIGk9ZS5sZWZ0K2Uud2lkdGgvMjtyZXR1cm4gdC5jbGllbnRYPmEmJnQuY2xpZW50WDxpfSxvPWZ1bmN0aW9uKHQpe3JldHVybiF4JiZuKHQpJiZjLmdldFpvb21IYW5kbGVTdGF0dXNfKCkuaXNab29tZWQ/KER5Z3JhcGguY2FuY2VsRXZlbnQodCkseD0hMCxfPXQuY2xpZW50WCwibW91c2Vkb3duIj09PXQudHlwZSYmKER5Z3JhcGguYWRkRXZlbnQoeSwibW91c2Vtb3ZlIixzKSxEeWdyYXBoLmFkZEV2ZW50KHksIm1vdXNldXAiLGwpKSwhMCk6ITF9LHM9ZnVuY3Rpb24odCl7aWYoIXgpcmV0dXJuITE7RHlncmFwaC5jYW5jZWxFdmVudCh0KTt2YXIgZT10LmNsaWVudFgtXztpZihNYXRoLmFicyhlKTw0KXJldHVybiEwO189dC5jbGllbnRYO3ZhciBhPWMuZ2V0Wm9vbUhhbmRsZVN0YXR1c18oKSxpPWEubGVmdEhhbmRsZVBvcyxyPWEucmlnaHRIYW5kbGVQb3Msbj1yLWk7aStlPD1jLmNhbnZhc1JlY3RfLng/KGk9Yy5jYW52YXNSZWN0Xy54LHI9aStuKTpyK2U+PWMuY2FudmFzUmVjdF8ueCtjLmNhbnZhc1JlY3RfLnc/KHI9Yy5jYW52YXNSZWN0Xy54K2MuY2FudmFzUmVjdF8udyxpPXItbik6KGkrPWUscis9ZSk7dmFyIG89Yy5sZWZ0Wm9vbUhhbmRsZV8ud2lkdGgvMjtyZXR1cm4gYy5sZWZ0Wm9vbUhhbmRsZV8uc3R5bGUubGVmdD1pLW8rInB4IixjLnJpZ2h0Wm9vbUhhbmRsZV8uc3R5bGUubGVmdD1yLW8rInB4IixjLmRyYXdJbnRlcmFjdGl2ZUxheWVyXygpLG0mJmgoKSwhMH0sbD1mdW5jdGlvbih0KXtyZXR1cm4geD8oeD0hMSxEeWdyYXBoLnJlbW92ZUV2ZW50KHksIm1vdXNlbW92ZSIscyksRHlncmFwaC5yZW1vdmVFdmVudCh5LCJtb3VzZXVwIixsKSxtfHxoKCksITApOiExfSxoPWZ1bmN0aW9uKCl7dHJ5e2MuaXNDaGFuZ2luZ1JhbmdlXz0hMCxjLmR5Z3JhcGhfLmRhdGVXaW5kb3dfPXQoYy5nZXRab29tSGFuZGxlU3RhdHVzXygpKSxjLmR5Z3JhcGhfLmRyYXdHcmFwaF8oITEpfWZpbmFsbHl7Yy5pc0NoYW5naW5nUmFuZ2VfPSExfX0scD1mdW5jdGlvbih0KXtpZighZiYmIXgpe3ZhciBlPW4odCk/Im1vdmUiOiJkZWZhdWx0IjtlIT1jLmZnY2FudmFzXy5zdHlsZS5jdXJzb3ImJihjLmZnY2FudmFzXy5zdHlsZS5jdXJzb3I9ZSl9fSxnPWZ1bmN0aW9uKHQpeyJ0b3VjaHN0YXJ0Ij09dC50eXBlJiYxPT10LnRhcmdldFRvdWNoZXMubGVuZ3RoP2UodC50YXJnZXRUb3VjaGVzWzBdKSYmRHlncmFwaC5jYW5jZWxFdmVudCh0KToidG91Y2htb3ZlIj09dC50eXBlJiYxPT10LnRhcmdldFRvdWNoZXMubGVuZ3RoP2EodC50YXJnZXRUb3VjaGVzWzBdKSYmRHlncmFwaC5jYW5jZWxFdmVudCh0KTppKHQpfSxkPWZ1bmN0aW9uKHQpeyJ0b3VjaHN0YXJ0Ij09dC50eXBlJiYxPT10LnRhcmdldFRvdWNoZXMubGVuZ3RoP28odC50YXJnZXRUb3VjaGVzWzBdKSYmRHlncmFwaC5jYW5jZWxFdmVudCh0KToidG91Y2htb3ZlIj09dC50eXBlJiYxPT10LnRhcmdldFRvdWNoZXMubGVuZ3RoP3ModC50YXJnZXRUb3VjaGVzWzBdKSYmRHlncmFwaC5jYW5jZWxFdmVudCh0KTpsKHQpfSx1PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBhPVsidG91Y2hzdGFydCIsInRvdWNoZW5kIiwidG91Y2htb3ZlIiwidG91Y2hjYW5jZWwiXSxpPTA7aTxhLmxlbmd0aDtpKyspYy5keWdyYXBoXy5hZGRBbmRUcmFja0V2ZW50KHQsYVtpXSxlKX0sdGhpcy5zZXREZWZhdWx0T3B0aW9uXygiaW50ZXJhY3Rpb25Nb2RlbCIsRHlncmFwaC5JbnRlcmFjdGlvbi5kcmFnSXNQYW5JbnRlcmFjdGlvbk1vZGVsKSx0aGlzLnNldERlZmF1bHRPcHRpb25fKCJwYW5FZGdlRnJhY3Rpb24iLDFlLTQpO3ZhciB3PXdpbmRvdy5vcGVyYT8ibW91c2Vkb3duIjoiZHJhZ3N0YXJ0Ijt0aGlzLmR5Z3JhcGhfLmFkZEFuZFRyYWNrRXZlbnQodGhpcy5sZWZ0Wm9vbUhhbmRsZV8sdyxlKSx0aGlzLmR5Z3JhcGhfLmFkZEFuZFRyYWNrRXZlbnQodGhpcy5yaWdodFpvb21IYW5kbGVfLHcsZSksdGhpcy5pc1VzaW5nRXhjYW52YXNfP3RoaXMuZHlncmFwaF8uYWRkQW5kVHJhY2tFdmVudCh0aGlzLmllUGFuT3ZlcmxheV8sIm1vdXNlZG93biIsbyk6KHRoaXMuZHlncmFwaF8uYWRkQW5kVHJhY2tFdmVudCh0aGlzLmZnY2FudmFzXywibW91c2Vkb3duIixvKSx0aGlzLmR5Z3JhcGhfLmFkZEFuZFRyYWNrRXZlbnQodGhpcy5mZ2NhbnZhc18sIm1vdXNlbW92ZSIscCkpLHRoaXMuaGFzVG91Y2hJbnRlcmZhY2VfJiYodSh0aGlzLmxlZnRab29tSGFuZGxlXyxnKSx1KHRoaXMucmlnaHRab29tSGFuZGxlXyxnKSx1KHRoaXMuZmdjYW52YXNfLGQpKX0sdC5wcm90b3R5cGUuZHJhd1N0YXRpY0xheWVyXz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuYmdjYW52YXNfY3R4Xzt0LmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNSZWN0Xy53LHRoaXMuY2FudmFzUmVjdF8uaCk7dHJ5e3RoaXMuZHJhd01pbmlQbG90XygpfWNhdGNoKGUpe2NvbnNvbGUud2FybihlKX12YXIgYT0uNTt0aGlzLmJnY2FudmFzX2N0eF8ubGluZVdpZHRoPTEsdC5zdHJva2VTdHlsZT0iZ3JheSIsdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhhLGEpLHQubGluZVRvKGEsdGhpcy5jYW52YXNSZWN0Xy5oLWEpLHQubGluZVRvKHRoaXMuY2FudmFzUmVjdF8udy1hLHRoaXMuY2FudmFzUmVjdF8uaC1hKSx0LmxpbmVUbyh0aGlzLmNhbnZhc1JlY3RfLnctYSxhKSx0LnN0cm9rZSgpfSx0LnByb3RvdHlwZS5kcmF3TWluaVBsb3RfPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRPcHRpb25fKCJyYW5nZVNlbGVjdG9yUGxvdEZpbGxDb2xvciIpLGU9dGhpcy5nZXRPcHRpb25fKCJyYW5nZVNlbGVjdG9yUGxvdFN0cm9rZUNvbG9yIik7aWYodHx8ZSl7dmFyIGE9dGhpcy5nZXRPcHRpb25fKCJzdGVwUGxvdCIpLGk9dGhpcy5jb21wdXRlQ29tYmluZWRTZXJpZXNBbmRMaW1pdHNfKCkscj1pLnlNYXgtaS55TWluLG49dGhpcy5iZ2NhbnZhc19jdHhfLG89LjUscz10aGlzLmR5Z3JhcGhfLnhBeGlzRXh0cmVtZXMoKSxsPU1hdGgubWF4KHNbMV0tc1swXSwxZS0zMCksaD0odGhpcy5jYW52YXNSZWN0Xy53LW8pL2wscD0odGhpcy5jYW52YXNSZWN0Xy5oLW8pL3IsZz10aGlzLmNhbnZhc1JlY3RfLnctbyxkPXRoaXMuY2FudmFzUmVjdF8uaC1vLHU9bnVsbCxjPW51bGw7bi5iZWdpblBhdGgoKSxuLm1vdmVUbyhvLGQpO2Zvcih2YXIgeT0wO3k8aS5kYXRhLmxlbmd0aDt5Kyspe3ZhciBfPWkuZGF0YVt5XSx2PW51bGwhPT1fWzBdPyhfWzBdLXNbMF0pKmg6MC8wLGY9bnVsbCE9PV9bMV0/ZC0oX1sxXS1pLnlNaW4pKnA6MC8wOyhhfHxudWxsPT09dXx8TWF0aC5yb3VuZCh2KSE9TWF0aC5yb3VuZCh1KSkmJihpc0Zpbml0ZSh2KSYmaXNGaW5pdGUoZik/KG51bGw9PT11P24ubGluZVRvKHYsZCk6YSYmbi5saW5lVG8odixjKSxuLmxpbmVUbyh2LGYpLHU9dixjPWYpOihudWxsIT09dSYmKGE/KG4ubGluZVRvKHYsYyksbi5saW5lVG8odixkKSk6bi5saW5lVG8odSxkKSksdT1jPW51bGwpKX1pZihuLmxpbmVUbyhnLGQpLG4uY2xvc2VQYXRoKCksdCl7dmFyIHg9dGhpcy5iZ2NhbnZhc19jdHhfLmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsMCwwLGQpO3guYWRkQ29sb3JTdG9wKDAsIndoaXRlIikseC5hZGRDb2xvclN0b3AoMSx0KSx0aGlzLmJnY2FudmFzX2N0eF8uZmlsbFN0eWxlPXgsbi5maWxsKCl9ZSYmKHRoaXMuYmdjYW52YXNfY3R4Xy5zdHJva2VTdHlsZT1lLHRoaXMuYmdjYW52YXNfY3R4Xy5saW5lV2lkdGg9MS41LG4uc3Ryb2tlKCkpfX0sdC5wcm90b3R5cGUuY29tcHV0ZUNvbWJpbmVkU2VyaWVzQW5kTGltaXRzXz1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5keWdyYXBoXyxhPXRoaXMuZ2V0T3B0aW9uXygibG9nc2NhbGUiKSxpPWUubnVtQ29sdW1ucygpLHI9ZS5nZXRMYWJlbHMoKSxuPW5ldyBBcnJheShpKSxvPSExO2Zvcih0PTE7aT50O3QrKyl7dmFyIHM9dGhpcy5nZXRPcHRpb25fKCJzaG93SW5SYW5nZVNlbGVjdG9yIixyW3RdKTtuW3RdPXMsbnVsbCE9PXMmJihvPSEwKX1pZighbylmb3IodD0wO3Q8bi5sZW5ndGg7dCsrKW5bdF09ITA7dmFyIGw9W10saD1lLmRhdGFIYW5kbGVyXyxwPWUuYXR0cmlidXRlc187Zm9yKHQ9MTt0PGUubnVtQ29sdW1ucygpO3QrKylpZihuW3RdKXt2YXIgZz1oLmV4dHJhY3RTZXJpZXMoZS5yYXdEYXRhXyx0LHApO2Uucm9sbFBlcmlvZCgpPjEmJihnPWgucm9sbGluZ0F2ZXJhZ2UoZyxlLnJvbGxQZXJpb2QoKSxwKSksbC5wdXNoKGcpfXZhciBkPVtdO2Zvcih0PTA7dDxsWzBdLmxlbmd0aDt0Kyspe2Zvcih2YXIgdT0wLGM9MCx5PTA7eTxsLmxlbmd0aDt5Kyspe3ZhciBfPWxbeV1bdF1bMV07bnVsbD09PV98fGlzTmFOKF8pfHwoYysrLHUrPV8pfWQucHVzaChbbFswXVt0XVswXSx1L2NdKX12YXIgdj1OdW1iZXIuTUFYX1ZBTFVFLGY9LU51bWJlci5NQVhfVkFMVUU7Zm9yKHQ9MDt0PGQubGVuZ3RoO3QrKyl7dmFyIHg9ZFt0XVsxXTtudWxsIT09eCYmaXNGaW5pdGUoeCkmJighYXx8eD4wKSYmKHY9TWF0aC5taW4odix4KSxmPU1hdGgubWF4KGYseCkpfXZhciBtPS4yNTtpZihhKWZvcihmPUR5Z3JhcGgubG9nMTAoZiksZis9ZiptLHY9RHlncmFwaC5sb2cxMCh2KSx0PTA7dDxkLmxlbmd0aDt0KyspZFt0XVsxXT1EeWdyYXBoLmxvZzEwKGRbdF1bMV0pO2Vsc2V7dmFyIEQsdz1mLXY7RD13PD1OdW1iZXIuTUlOX1ZBTFVFP2YqbTp3Km0sZis9RCx2LT1EfXJldHVybntkYXRhOmQseU1pbjp2LHlNYXg6Zn19LHQucHJvdG90eXBlLnBsYWNlWm9vbUhhbmRsZXNfPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5keWdyYXBoXy54QXhpc0V4dHJlbWVzKCksZT10aGlzLmR5Z3JhcGhfLnhBeGlzUmFuZ2UoKSxhPXRbMV0tdFswXSxpPU1hdGgubWF4KDAsKGVbMF0tdFswXSkvYSkscj1NYXRoLm1heCgwLCh0WzFdLWVbMV0pL2EpLG49dGhpcy5jYW52YXNSZWN0Xy54K3RoaXMuY2FudmFzUmVjdF8udyppLG89dGhpcy5jYW52YXNSZWN0Xy54K3RoaXMuY2FudmFzUmVjdF8udyooMS1yKSxzPU1hdGgubWF4KHRoaXMuY2FudmFzUmVjdF8ueSx0aGlzLmNhbnZhc1JlY3RfLnkrKHRoaXMuY2FudmFzUmVjdF8uaC10aGlzLmxlZnRab29tSGFuZGxlXy5oZWlnaHQpLzIpLGw9dGhpcy5sZWZ0Wm9vbUhhbmRsZV8ud2lkdGgvMjt0aGlzLmxlZnRab29tSGFuZGxlXy5zdHlsZS5sZWZ0PW4tbCsicHgiLHRoaXMubGVmdFpvb21IYW5kbGVfLnN0eWxlLnRvcD1zKyJweCIsdGhpcy5yaWdodFpvb21IYW5kbGVfLnN0eWxlLmxlZnQ9by1sKyJweCIsdGhpcy5yaWdodFpvb21IYW5kbGVfLnN0eWxlLnRvcD10aGlzLmxlZnRab29tSGFuZGxlXy5zdHlsZS50b3AsdGhpcy5sZWZ0Wm9vbUhhbmRsZV8uc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIsdGhpcy5yaWdodFpvb21IYW5kbGVfLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifSx0LnByb3RvdHlwZS5kcmF3SW50ZXJhY3RpdmVMYXllcl89ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZnY2FudmFzX2N0eF87dC5jbGVhclJlY3QoMCwwLHRoaXMuY2FudmFzUmVjdF8udyx0aGlzLmNhbnZhc1JlY3RfLmgpO3ZhciBlPTEsYT10aGlzLmNhbnZhc1JlY3RfLnctZSxpPXRoaXMuY2FudmFzUmVjdF8uaC1lLHI9dGhpcy5nZXRab29tSGFuZGxlU3RhdHVzXygpO2lmKHQuc3Ryb2tlU3R5bGU9ImJsYWNrIixyLmlzWm9vbWVkKXt2YXIgbj1NYXRoLm1heChlLHIubGVmdEhhbmRsZVBvcy10aGlzLmNhbnZhc1JlY3RfLngpLG89TWF0aC5taW4oYSxyLnJpZ2h0SGFuZGxlUG9zLXRoaXMuY2FudmFzUmVjdF8ueCk7dC5maWxsU3R5bGU9InJnYmEoMjQwLCAyNDAsIDI0MCwgMC42KSIsdC5maWxsUmVjdCgwLDAsbix0aGlzLmNhbnZhc1JlY3RfLmgpLHQuZmlsbFJlY3QobywwLHRoaXMuY2FudmFzUmVjdF8udy1vLHRoaXMuY2FudmFzUmVjdF8uaCksdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlLGUpLHQubGluZVRvKG4sZSksdC5saW5lVG8obixpKSx0LmxpbmVUbyhvLGkpLHQubGluZVRvKG8sZSksdC5saW5lVG8oYSxlKSx0LnN0cm9rZSgpLHRoaXMuaXNVc2luZ0V4Y2FudmFzXyYmKHRoaXMuaWVQYW5PdmVybGF5Xy5zdHlsZS53aWR0aD1vLW4rInB4Iix0aGlzLmllUGFuT3ZlcmxheV8uc3R5bGUubGVmdD1uKyJweCIsdGhpcy5pZVBhbk92ZXJsYXlfLnN0eWxlLmhlaWdodD1pKyJweCIsdGhpcy5pZVBhbk92ZXJsYXlfLnN0eWxlLmRpc3BsYXk9ImlubGluZSIpfWVsc2UgdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlLGUpLHQubGluZVRvKGUsaSksdC5saW5lVG8oYSxpKSx0LmxpbmVUbyhhLGUpLHQuc3Ryb2tlKCksdGhpcy5pZVBhbk92ZXJsYXlfJiYodGhpcy5pZVBhbk92ZXJsYXlfLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX0sdC5wcm90b3R5cGUuZ2V0Wm9vbUhhbmRsZVN0YXR1c189ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlZnRab29tSGFuZGxlXy53aWR0aC8yLGU9cGFyc2VGbG9hdCh0aGlzLmxlZnRab29tSGFuZGxlXy5zdHlsZS5sZWZ0KSt0LGE9cGFyc2VGbG9hdCh0aGlzLnJpZ2h0Wm9vbUhhbmRsZV8uc3R5bGUubGVmdCkrdDtyZXR1cm57bGVmdEhhbmRsZVBvczplLHJpZ2h0SGFuZGxlUG9zOmEsaXNab29tZWQ6ZS0xPnRoaXMuY2FudmFzUmVjdF8ueHx8YSsxPHRoaXMuY2FudmFzUmVjdF8ueCt0aGlzLmNhbnZhc1JlY3RfLnd9fSx0fSgpLER5Z3JhcGguUExVR0lOUy5wdXNoKER5Z3JhcGguUGx1Z2lucy5MZWdlbmQsRHlncmFwaC5QbHVnaW5zLkF4ZXMsRHlncmFwaC5QbHVnaW5zLlJhbmdlU2VsZWN0b3IsRHlncmFwaC5QbHVnaW5zLkNoYXJ0TGFiZWxzLER5Z3JhcGguUGx1Z2lucy5Bbm5vdGF0aW9ucyxEeWdyYXBoLlBsdWdpbnMuR3JpZCksRHlncmFwaC5EYXRhSGFuZGxlcj1mdW5jdGlvbigpe30sRHlncmFwaC5EYXRhSGFuZGxlcnM9e30sZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9RHlncmFwaC5EYXRhSGFuZGxlcjt0Llg9MCx0Llk9MSx0LkVYVFJBUz0yLHQucHJvdG90eXBlLmV4dHJhY3RTZXJpZXM9ZnVuY3Rpb24odCxlLGEpe30sdC5wcm90b3R5cGUuc2VyaWVzVG9Qb2ludHM9ZnVuY3Rpb24oZSxhLGkpe2Zvcih2YXIgcj1bXSxuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciBvPWVbbl0scz1vWzFdLGw9bnVsbD09PXM/bnVsbDp0LnBhcnNlRmxvYXQocyksaD17eDowLzAseTowLzAseHZhbDp0LnBhcnNlRmxvYXQob1swXSkseXZhbDpsLG5hbWU6YSxpZHg6bitpfTtyLnB1c2goaCl9cmV0dXJuIHRoaXMub25Qb2ludHNDcmVhdGVkXyhlLHIpLHJ9LHQucHJvdG90eXBlLm9uUG9pbnRzQ3JlYXRlZF89ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnJvbGxpbmdBdmVyYWdlPWZ1bmN0aW9uKHQsZSxhKXt9LHQucHJvdG90eXBlLmdldEV4dHJlbWVZVmFsdWVzPWZ1bmN0aW9uKHQsZSxhKXt9LHQucHJvdG90eXBlLm9uTGluZUV2YWx1YXRlZD1mdW5jdGlvbih0LGUsYSl7fSx0LnByb3RvdHlwZS5jb21wdXRlWUludGVycG9sYXRpb25fPWZ1bmN0aW9uKHQsZSxhKXt2YXIgaT1lWzFdLXRbMV0scj1lWzBdLXRbMF0sbj1pL3Isbz0oYS10WzBdKSpuO3JldHVybiB0WzFdK299LHQucHJvdG90eXBlLmdldEluZGV4ZXNJbldpbmRvd189ZnVuY3Rpb24odCxlKXt2YXIgYT0wLGk9dC5sZW5ndGgtMTtpZihlKXtmb3IodmFyIHI9MCxuPWVbMF0sbz1lWzFdO3I8dC5sZW5ndGgtMSYmdFtyXVswXTxuOylhKysscisrO2ZvcihyPXQubGVuZ3RoLTE7cj4wJiZ0W3JdWzBdPm87KWktLSxyLS19cmV0dXJuIGk+PWE/W2EsaV06WzAsdC5sZW5ndGgtMV19LHQucGFyc2VGbG9hdD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXQ/MC8wOnR9fSgpLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO0R5Z3JhcGguRGF0YUhhbmRsZXJzLkRlZmF1bHRIYW5kbGVyPWZ1bmN0aW9uKCl7fTt2YXIgdD1EeWdyYXBoLkRhdGFIYW5kbGVycy5EZWZhdWx0SGFuZGxlcjt0LnByb3RvdHlwZT1uZXcgRHlncmFwaC5EYXRhSGFuZGxlcix0LnByb3RvdHlwZS5leHRyYWN0U2VyaWVzPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9W10scj1hLmdldCgibG9nc2NhbGUiKSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBvPXRbbl1bMF0scz10W25dW2VdO3ImJjA+PXMmJihzPW51bGwpLGkucHVzaChbbyxzXSl9cmV0dXJuIGl9LHQucHJvdG90eXBlLnJvbGxpbmdBdmVyYWdlPWZ1bmN0aW9uKHQsZSxhKXtlPU1hdGgubWluKGUsdC5sZW5ndGgpO3ZhciBpLHIsbixvLHMsbD1bXTtpZigxPT1lKXJldHVybiB0O2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2ZvcihvPTAscz0wLHI9TWF0aC5tYXgoMCxpLWUrMSk7aSsxPnI7cisrKW49dFtyXVsxXSxudWxsPT09bnx8aXNOYU4obil8fChzKyssbys9dFtyXVsxXSk7cz9sW2ldPVt0W2ldWzBdLG8vc106bFtpXT1bdFtpXVswXSxudWxsXX1yZXR1cm4gbH0sdC5wcm90b3R5cGUuZ2V0RXh0cmVtZVlWYWx1ZXM9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaSxyPW51bGwsbj1udWxsLG89MCxzPXQubGVuZ3RoLTEsbD1vO3M+PWw7bCsrKWk9dFtsXVsxXSxudWxsPT09aXx8aXNOYU4oaSl8fCgobnVsbD09PW58fGk+bikmJihuPWkpLChudWxsPT09cnx8cj5pKSYmKHI9aSkpO3JldHVybltyLG5dfX0oKSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtEeWdyYXBoLkRhdGFIYW5kbGVycy5EZWZhdWx0RnJhY3Rpb25IYW5kbGVyPWZ1bmN0aW9uKCl7fTt2YXIgdD1EeWdyYXBoLkRhdGFIYW5kbGVycy5EZWZhdWx0RnJhY3Rpb25IYW5kbGVyO3QucHJvdG90eXBlPW5ldyBEeWdyYXBoLkRhdGFIYW5kbGVycy5EZWZhdWx0SGFuZGxlcix0LnByb3RvdHlwZS5leHRyYWN0U2VyaWVzPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGkscixuLG8scyxsLGg9W10scD0xMDAsZz1hLmdldCgibG9nc2NhbGUiKSxkPTA7ZDx0Lmxlbmd0aDtkKyspaT10W2RdWzBdLG49dFtkXVtlXSxnJiZudWxsIT09biYmKG5bMF08PTB8fG5bMV08PTApJiYobj1udWxsKSxudWxsIT09bj8obz1uWzBdLHM9blsxXSxudWxsPT09b3x8aXNOYU4obyk/aC5wdXNoKFtpLG8sW28sc11dKToobD1zP28vczowLHI9cCpsLGgucHVzaChbaSxyLFtvLHNdXSkpKTpoLnB1c2goW2ksbnVsbCxbbnVsbCxudWxsXV0pO3JldHVybiBofSx0LnByb3RvdHlwZS5yb2xsaW5nQXZlcmFnZT1mdW5jdGlvbih0LGUsYSl7ZT1NYXRoLm1pbihlLHQubGVuZ3RoKTt2YXIgaSxyPVtdLG49MCxvPTAscz0xMDA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7bis9dFtpXVsyXVswXSxvKz10W2ldWzJdWzFdLGktZT49MCYmKG4tPXRbaS1lXVsyXVswXSxvLT10W2ktZV1bMl1bMV0pO3ZhciBsPXRbaV1bMF0saD1vP24vbzowO3JbaV09W2wscypoXX1yZXR1cm4gcn19KCksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7RHlncmFwaC5EYXRhSGFuZGxlcnMuQmFyc0hhbmRsZXI9ZnVuY3Rpb24oKXtEeWdyYXBoLkRhdGFIYW5kbGVyLmNhbGwodGhpcyl9LER5Z3JhcGguRGF0YUhhbmRsZXJzLkJhcnNIYW5kbGVyLnByb3RvdHlwZT1uZXcgRHlncmFwaC5EYXRhSGFuZGxlcjt2YXIgdD1EeWdyYXBoLkRhdGFIYW5kbGVycy5CYXJzSGFuZGxlcjt0LnByb3RvdHlwZS5leHRyYWN0U2VyaWVzPWZ1bmN0aW9uKHQsZSxhKXt9LHQucHJvdG90eXBlLnJvbGxpbmdBdmVyYWdlPWZ1bmN0aW9uKHQsZSxhKXt9LHQucHJvdG90eXBlLm9uUG9pbnRzQ3JlYXRlZF89ZnVuY3Rpb24odCxlKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIGk9dFthXSxyPWVbYV07ci55X3RvcD0wLzAsci55X2JvdHRvbT0wLzAsci55dmFsX21pbnVzPUR5Z3JhcGguRGF0YUhhbmRsZXIucGFyc2VGbG9hdChpWzJdWzBdKSxyLnl2YWxfcGx1cz1EeWdyYXBoLkRhdGFIYW5kbGVyLnBhcnNlRmxvYXQoaVsyXVsxXSl9fSx0LnByb3RvdHlwZS5nZXRFeHRyZW1lWVZhbHVlcz1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpLHI9bnVsbCxuPW51bGwsbz0wLHM9dC5sZW5ndGgtMSxsPW87cz49bDtsKyspaWYoaT10W2xdWzFdLG51bGwhPT1pJiYhaXNOYU4oaSkpe3ZhciBoPXRbbF1bMl1bMF0scD10W2xdWzJdWzFdO2g+aSYmKGg9aSksaT5wJiYocD1pKSwobnVsbD09PW58fHA+bikmJihuPXApLChudWxsPT09cnx8cj5oKSYmKHI9aCl9cmV0dXJuW3Isbl19LHQucHJvdG90eXBlLm9uTGluZUV2YWx1YXRlZD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpLHI9MDtyPHQubGVuZ3RoO3IrKylpPXRbcl0saS55X3RvcD1EeWdyYXBoTGF5b3V0LmNhbGNZTm9ybWFsXyhlLGkueXZhbF9taW51cyxhKSxpLnlfYm90dG9tPUR5Z3JhcGhMYXlvdXQuY2FsY1lOb3JtYWxfKGUsaS55dmFsX3BsdXMsYSl9fSgpLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO0R5Z3JhcGguRGF0YUhhbmRsZXJzLkN1c3RvbUJhcnNIYW5kbGVyPWZ1bmN0aW9uKCl7fTt2YXIgdD1EeWdyYXBoLkRhdGFIYW5kbGVycy5DdXN0b21CYXJzSGFuZGxlcjt0LnByb3RvdHlwZT1uZXcgRHlncmFwaC5EYXRhSGFuZGxlcnMuQmFyc0hhbmRsZXIsdC5wcm90b3R5cGUuZXh0cmFjdFNlcmllcz1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpLHIsbixvPVtdLHM9YS5nZXQoImxvZ3NjYWxlIiksbD0wO2w8dC5sZW5ndGg7bCsrKWk9dFtsXVswXSxuPXRbbF1bZV0scyYmbnVsbCE9PW4mJihuWzBdPD0wfHxuWzFdPD0wfHxuWzJdPD0wKSYmKG49bnVsbCksbnVsbCE9PW4/KHI9blsxXSxvLnB1c2gobnVsbD09PXJ8fGlzTmFOKHIpP1tpLHIsW3Iscl1dOltpLHIsW25bMF0sblsyXV1dKSk6by5wdXNoKFtpLG51bGwsW251bGwsbnVsbF1dKTtyZXR1cm4gb30sdC5wcm90b3R5cGUucm9sbGluZ0F2ZXJhZ2U9ZnVuY3Rpb24odCxlLGEpe2U9TWF0aC5taW4oZSx0Lmxlbmd0aCk7dmFyIGkscixuLG8scyxsLGgscD1bXTtmb3Iocj0wLG89MCxuPTAscz0wLGw9MDtsPHQubGVuZ3RoO2wrKyl7aWYoaT10W2xdWzFdLGg9dFtsXVsyXSxwW2xdPXRbbF0sbnVsbD09PWl8fGlzTmFOKGkpfHwocis9aFswXSxvKz1pLG4rPWhbMV0scys9MSksbC1lPj0wKXt2YXIgZz10W2wtZV07bnVsbD09PWdbMV18fGlzTmFOKGdbMV0pfHwoci09Z1syXVswXSxvLT1nWzFdLG4tPWdbMl1bMV0scy09MSl9cz9wW2xdPVt0W2xdWzBdLDEqby9zLFsxKnIvcywxKm4vc11dOnBbbF09W3RbbF1bMF0sbnVsbCxbbnVsbCxudWxsXV19cmV0dXJuIHB9fSgpLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO0R5Z3JhcGguRGF0YUhhbmRsZXJzLkVycm9yQmFyc0hhbmRsZXI9ZnVuY3Rpb24oKXt9O3ZhciB0PUR5Z3JhcGguRGF0YUhhbmRsZXJzLkVycm9yQmFyc0hhbmRsZXI7dC5wcm90b3R5cGU9bmV3IER5Z3JhcGguRGF0YUhhbmRsZXJzLkJhcnNIYW5kbGVyLHQucHJvdG90eXBlLmV4dHJhY3RTZXJpZXM9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaSxyLG4sbyxzPVtdLGw9YS5nZXQoInNpZ21hIiksaD1hLmdldCgibG9nc2NhbGUiKSxwPTA7cDx0Lmxlbmd0aDtwKyspaT10W3BdWzBdLG89dFtwXVtlXSxoJiZudWxsIT09byYmKG9bMF08PTB8fG9bMF0tbCpvWzFdPD0wKSYmKG89bnVsbCksbnVsbCE9PW8/KHI9b1swXSxudWxsPT09cnx8aXNOYU4ocik/cy5wdXNoKFtpLHIsW3IscixyXV0pOihuPWwqb1sxXSxzLnB1c2goW2kscixbci1uLHIrbixvWzFdXV0pKSk6cy5wdXNoKFtpLG51bGwsW251bGwsbnVsbCxudWxsXV0pO3JldHVybiBzfSx0LnByb3RvdHlwZS5yb2xsaW5nQXZlcmFnZT1mdW5jdGlvbih0LGUsYSl7ZT1NYXRoLm1pbihlLHQubGVuZ3RoKTt2YXIgaSxyLG4sbyxzLGwsaCxwLGcsZD1bXSx1PWEuZ2V0KCJzaWdtYSIpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2ZvcihzPTAscD0wLGw9MCxyPU1hdGgubWF4KDAsaS1lKzEpO2krMT5yO3IrKyluPXRbcl1bMV0sbnVsbD09PW58fGlzTmFOKG4pfHwobCsrLHMrPW4scCs9TWF0aC5wb3codFtyXVsyXVsyXSwyKSk7bD8oaD1NYXRoLnNxcnQocCkvbCxnPXMvbCxkW2ldPVt0W2ldWzBdLGcsW2ctdSpoLGcrdSpoXV0pOihvPTE9PWU/dFtpXVsxXTpudWxsLGRbaV09W3RbaV1bMF0sbyxbbyxvXV0pfXJldHVybiBkfX0oKSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtEeWdyYXBoLkRhdGFIYW5kbGVycy5GcmFjdGlvbnNCYXJzSGFuZGxlcj1mdW5jdGlvbigpe307dmFyIHQ9RHlncmFwaC5EYXRhSGFuZGxlcnMuRnJhY3Rpb25zQmFyc0hhbmRsZXI7dC5wcm90b3R5cGU9bmV3IER5Z3JhcGguRGF0YUhhbmRsZXJzLkJhcnNIYW5kbGVyLHQucHJvdG90eXBlLmV4dHJhY3RTZXJpZXM9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaSxyLG4sbyxzLGwsaCxwLGc9W10sZD0xMDAsdT1hLmdldCgic2lnbWEiKSxjPWEuZ2V0KCJsb2dzY2FsZSIpLHk9MDt5PHQubGVuZ3RoO3krKylpPXRbeV1bMF0sbj10W3ldW2VdLGMmJm51bGwhPT1uJiYoblswXTw9MHx8blsxXTw9MCkmJihuPW51bGwpLG51bGwhPT1uPyhvPW5bMF0scz1uWzFdLG51bGw9PT1vfHxpc05hTihvKT9nLnB1c2goW2ksbyxbbyxvLG8sc11dKToobD1zP28vczowLGg9cz91Kk1hdGguc3FydChsKigxLWwpL3MpOjEscD1kKmgscj1kKmwsZy5wdXNoKFtpLHIsW3ItcCxyK3AsbyxzXV0pKSk6Zy5wdXNoKFtpLG51bGwsW251bGwsbnVsbCxudWxsLG51bGxdXSk7cmV0dXJuIGd9LHQucHJvdG90eXBlLnJvbGxpbmdBdmVyYWdlPWZ1bmN0aW9uKHQsZSxhKXtlPU1hdGgubWluKGUsdC5sZW5ndGgpO3ZhciBpLHIsbixvLHM9W10sbD1hLmdldCgic2lnbWEiKSxoPWEuZ2V0KCJ3aWxzb25JbnRlcnZhbCIpLHA9MCxnPTAsZD0xMDA7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl7cCs9dFtuXVsyXVsyXSxnKz10W25dWzJdWzNdLG4tZT49MCYmKHAtPXRbbi1lXVsyXVsyXSxnLT10W24tZV1bMl1bM10pO3ZhciB1PXRbbl1bMF0sYz1nP3AvZzowO2lmKGgpaWYoZyl7dmFyIHk9MD5jPzA6YyxfPWcsdj1sKk1hdGguc3FydCh5KigxLXkpL18rbCpsLyg0Kl8qXykpLGY9MStsKmwvZztpPSh5K2wqbC8oMipnKS12KS9mLHI9KHkrbCpsLygyKmcpK3YpL2Ysc1tuXT1bdSx5KmQsW2kqZCxyKmRdXX1lbHNlIHNbbl09W3UsMCxbMCwwXV07ZWxzZSBvPWc/bCpNYXRoLnNxcnQoYyooMS1jKS9nKToxLHNbbl09W3UsZCpjLFtkKihjLW8pLGQqKGMrbyldXX1yZXR1cm4gc319KCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWR5Z3JhcGgtY29tYmluZWQuanMubWFw"></script> <script src="data:application/javascript;base64,LyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAyMDExIERhbiBWYW5kZXJrYW0gKGRhbnZka0BnbWFpbC5jb20pCiAqIE1JVC1saWNlbnNlZCAoaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCkKICovCgovKioKICogQGZpbGVvdmVydmlldwogKiBJbmNsdWRpbmcgdGhpcyBmaWxlIHdpbGwgYWRkIHNldmVyYWwgYWRkaXRpb25hbCBzaGFwZXMgdG8gRHlncmFwaC5DaXJjbGVzCiAqIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gZHJhd1BvaW50Q2FsbGJhY2suCiAqIFNlZSB0ZXN0cy9jdXN0b20tY2lyY2xlcy5odG1sIGZvciB1c2FnZS4KICovCgooZnVuY3Rpb24oKSB7CgovKioKICogQHBhcmFtIHshQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggdGhlIGNhbnZhcyBjb250ZXh0CiAqIEBwYXJhbSB7bnVtYmVyfSBzaWRlcyB0aGUgbnVtYmVyIG9mIHNpZGVzIGluIHRoZSBzaGFwZS4KICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1cyB0aGUgcmFkaXVzIG9mIHRoZSBpbWFnZS4KICogQHBhcmFtIHtudW1iZXJ9IGN4IGNlbnRlciB4IGNvb3JkYXRlCiAqIEBwYXJhbSB7bnVtYmVyfSBjeSBjZW50ZXIgeSBjb29yZGluYXRlCiAqIEBwYXJhbSB7bnVtYmVyPX0gcm90YXRpb25SYWRpYW5zIHRoZSBzaGlmdCBvZiB0aGUgaW5pdGlhbCBhbmdsZSwgaW4gcmFkaWFucy4KICogQHBhcmFtIHtudW1iZXI9fSBkZWx0YSB0aGUgYW5nbGUgc2hpZnQgZm9yIGVhY2ggbGluZS4gSWYgbWlzc2luZywgY3JlYXRlcyBhCiAqICAgICByZWd1bGFyIHBvbHlnb24uCiAqLwp2YXIgcmVndWxhclNoYXBlID0gZnVuY3Rpb24oCiAgICBjdHgsIHNpZGVzLCByYWRpdXMsIGN4LCBjeSwgcm90YXRpb25SYWRpYW5zLCBkZWx0YSkgewogIHJvdGF0aW9uUmFkaWFucyA9IHJvdGF0aW9uUmFkaWFucyB8fCAwOwogIGRlbHRhID0gZGVsdGEgfHwgTWF0aC5QSSAqIDIgLyBzaWRlczsKCiAgY3R4LmJlZ2luUGF0aCgpOwogIHZhciBpbml0aWFsQW5nbGUgPSByb3RhdGlvblJhZGlhbnM7CiAgdmFyIGFuZ2xlID0gaW5pdGlhbEFuZ2xlOwoKICB2YXIgY29tcHV0ZUNvb3JkaW5hdGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgeCA9IGN4ICsgKE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyk7CiAgICB2YXIgeSA9IGN5ICsgKC1NYXRoLmNvcyhhbmdsZSkgKiByYWRpdXMpOwogICAgcmV0dXJuIFt4LCB5XTsKICB9OwoKICB2YXIgaW5pdGlhbENvb3JkaW5hdGVzID0gY29tcHV0ZUNvb3JkaW5hdGVzKCk7CiAgdmFyIHggPSBpbml0aWFsQ29vcmRpbmF0ZXNbMF07CiAgdmFyIHkgPSBpbml0aWFsQ29vcmRpbmF0ZXNbMV07CiAgY3R4Lm1vdmVUbyh4LCB5KTsKCiAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgc2lkZXM7IGlkeCsrKSB7CiAgICBhbmdsZSA9IChpZHggPT0gc2lkZXMgLSAxKSA/IGluaXRpYWxBbmdsZSA6IChhbmdsZSArIGRlbHRhKTsKICAgIHZhciBjb29yZHMgPSBjb21wdXRlQ29vcmRpbmF0ZXMoKTsKICAgIGN0eC5saW5lVG8oY29vcmRzWzBdLCBjb29yZHNbMV0pOwogIH0KICBjdHguZmlsbCgpOwogIGN0eC5zdHJva2UoKTsKfTsKCi8qKgogKiBUT0RPKGRhbnZrKTogYmUgbW9yZSBzcGVjaWZpYyBvbiB0aGUgcmV0dXJuIHR5cGUuCiAqIEBwYXJhbSB7bnVtYmVyfSBzaWRlcwogKiBAcGFyYW0ge251bWJlcj19IHJvdGF0aW9uUmFkaWFucwogKiBAcGFyYW0ge251bWJlcj19IGRlbHRhCiAqIEByZXR1cm4ge0Z1bmN0aW9ufQogKiBAcHJpdmF0ZQogKi8KdmFyIHNoYXBlRnVuY3Rpb24gPSBmdW5jdGlvbihzaWRlcywgcm90YXRpb25SYWRpYW5zLCBkZWx0YSkgewogIHJldHVybiBmdW5jdGlvbihnLCBuYW1lLCBjdHgsIGN4LCBjeSwgY29sb3IsIHJhZGl1cykgewogICAgY3R4LnN0cm9rZVN0eWxlID0gY29sb3I7CiAgICBjdHguZmlsbFN0eWxlID0gIndoaXRlIjsKICAgIHJlZ3VsYXJTaGFwZShjdHgsIHNpZGVzLCByYWRpdXMsIGN4LCBjeSwgcm90YXRpb25SYWRpYW5zLCBkZWx0YSk7CiAgfTsKfTsKCnZhciBjdXN0b21DaXJjbGVzID0gewogIFRSSUFOR0xFIDogc2hhcGVGdW5jdGlvbigzKSwKICBTUVVBUkUgOiBzaGFwZUZ1bmN0aW9uKDQsIE1hdGguUEkgLyA0KSwKICBESUFNT05EIDogc2hhcGVGdW5jdGlvbig0KSwKICBQRU5UQUdPTiA6IHNoYXBlRnVuY3Rpb24oNSksCiAgSEVYQUdPTiA6IHNoYXBlRnVuY3Rpb24oNiksCiAgQ0lSQ0xFIDogZnVuY3Rpb24oZywgbmFtZSwgY3R4LCBjeCwgY3ksIGNvbG9yLCByYWRpdXMpIHsKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yOwogICAgY3R4LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CiAgICBjdHguYXJjKGN4LCBjeSwgcmFkaXVzLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpOwogICAgY3R4LmZpbGwoKTsKICAgIGN0eC5zdHJva2UoKTsKICB9LAogIFNUQVIgOiBzaGFwZUZ1bmN0aW9uKDUsIDAsIDQgKiBNYXRoLlBJIC8gNSksCiAgUExVUyA6IGZ1bmN0aW9uKGcsIG5hbWUsIGN0eCwgY3gsIGN5LCBjb2xvciwgcmFkaXVzKSB7CiAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjsKCiAgICBjdHguYmVnaW5QYXRoKCk7CiAgICBjdHgubW92ZVRvKGN4ICsgcmFkaXVzLCBjeSk7CiAgICBjdHgubGluZVRvKGN4IC0gcmFkaXVzLCBjeSk7CiAgICBjdHguY2xvc2VQYXRoKCk7CiAgICBjdHguc3Ryb2tlKCk7CgogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4Lm1vdmVUbyhjeCwgY3kgKyByYWRpdXMpOwogICAgY3R4LmxpbmVUbyhjeCwgY3kgLSByYWRpdXMpOwogICAgY3R4LmNsb3NlUGF0aCgpOwogICAgY3R4LnN0cm9rZSgpOwogIH0sCiAgRVggOiBmdW5jdGlvbihnLCBuYW1lLCBjdHgsIGN4LCBjeSwgY29sb3IsIHJhZGl1cykgewogICAgY3R4LnN0cm9rZVN0eWxlID0gY29sb3I7CgogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4Lm1vdmVUbyhjeCArIHJhZGl1cywgY3kgKyByYWRpdXMpOwogICAgY3R4LmxpbmVUbyhjeCAtIHJhZGl1cywgY3kgLSByYWRpdXMpOwogICAgY3R4LmNsb3NlUGF0aCgpOwogICAgY3R4LnN0cm9rZSgpOwoKICAgIGN0eC5iZWdpblBhdGgoKTsKICAgIGN0eC5tb3ZlVG8oY3ggKyByYWRpdXMsIGN5IC0gcmFkaXVzKTsKICAgIGN0eC5saW5lVG8oY3ggLSByYWRpdXMsIGN5ICsgcmFkaXVzKTsKICAgIGN0eC5jbG9zZVBhdGgoKTsKICAgIGN0eC5zdHJva2UoKTsKICB9Cn07Cgpmb3IgKHZhciBrIGluIGN1c3RvbUNpcmNsZXMpIHsKICBpZiAoIWN1c3RvbUNpcmNsZXMuaGFzT3duUHJvcGVydHkoaykpIGNvbnRpbnVlOwogIER5Z3JhcGguQ2lyY2xlc1trXSA9IGN1c3RvbUNpcmNsZXNba107Cn0KCn0pKCk7Cg=="></script> <script src="data:application/javascript;base64,Ly8hIG1vbWVudC5qcwovLyEgdmVyc2lvbiA6IDIuOC40Ci8vISBhdXRob3JzIDogVGltIFdvb2QsIElza3JlbiBDaGVybmV2LCBNb21lbnQuanMgY29udHJpYnV0b3JzCi8vISBsaWNlbnNlIDogTUlUCi8vISBtb21lbnRqcy5jb20KCihmdW5jdGlvbiAodW5kZWZpbmVkKSB7CiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgQ29uc3RhbnRzCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgdmFyIG1vbWVudCwKICAgICAgICBWRVJTSU9OID0gJzIuOC40JywKICAgICAgICAvLyB0aGUgZ2xvYmFsLXNjb3BlIHRoaXMgaXMgTk9UIHRoZSBnbG9iYWwgb2JqZWN0IGluIE5vZGUuanMKICAgICAgICBnbG9iYWxTY29wZSA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdGhpcywKICAgICAgICBvbGRHbG9iYWxNb21lbnQsCiAgICAgICAgcm91bmQgPSBNYXRoLnJvdW5kLAogICAgICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwKICAgICAgICBpLAoKICAgICAgICBZRUFSID0gMCwKICAgICAgICBNT05USCA9IDEsCiAgICAgICAgREFURSA9IDIsCiAgICAgICAgSE9VUiA9IDMsCiAgICAgICAgTUlOVVRFID0gNCwKICAgICAgICBTRUNPTkQgPSA1LAogICAgICAgIE1JTExJU0VDT05EID0gNiwKCiAgICAgICAgLy8gaW50ZXJuYWwgc3RvcmFnZSBmb3IgbG9jYWxlIGNvbmZpZyBmaWxlcwogICAgICAgIGxvY2FsZXMgPSB7fSwKCiAgICAgICAgLy8gZXh0cmEgbW9tZW50IGludGVybmFsIHByb3BlcnRpZXMgKHBsdWdpbnMgcmVnaXN0ZXIgcHJvcHMgaGVyZSkKICAgICAgICBtb21lbnRQcm9wZXJ0aWVzID0gW10sCgogICAgICAgIC8vIGNoZWNrIGZvciBub2RlSlMKICAgICAgICBoYXNNb2R1bGUgPSAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKSwKCiAgICAgICAgLy8gQVNQLk5FVCBqc29uIGRhdGUgZm9ybWF0IHJlZ2V4CiAgICAgICAgYXNwTmV0SnNvblJlZ2V4ID0gL15cLz9EYXRlXCgoXC0/XGQrKS9pLAogICAgICAgIGFzcE5ldFRpbWVTcGFuSnNvblJlZ2V4ID0gLyhcLSk/KD86KFxkKilcLik/KFxkKylcOihcZCspKD86XDooXGQrKVwuPyhcZHszfSk/KT8vLAoKICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbAogICAgICAgIC8vIHNvbWV3aGF0IG1vcmUgaW4gbGluZSB3aXRoIDQuNC4zLjIgMjAwNCBzcGVjLCBidXQgYWxsb3dzIGRlY2ltYWwgYW55d2hlcmUKICAgICAgICBpc29EdXJhdGlvblJlZ2V4ID0gL14oLSk/UCg/Oig/OihbMC05LC5dKilZKT8oPzooWzAtOSwuXSopTSk/KD86KFswLTksLl0qKUQpPyg/OlQoPzooWzAtOSwuXSopSCk/KD86KFswLTksLl0qKU0pPyg/OihbMC05LC5dKilTKT8pP3woWzAtOSwuXSopVykkLywKCiAgICAgICAgLy8gZm9ybWF0IHRva2VucwogICAgICAgIGZvcm1hdHRpbmdUb2tlbnMgPSAvKFxbW15cW10qXF0pfChcXCk/KE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFF8WVlZWVlZfFlZWVlZfFlZWVl8WVl8Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98bW0/fHNzP3xTezEsNH18eHxYfHp6P3xaWj98LikvZywKICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMgPSAvKFxbW15cW10qXF0pfChcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZywKCiAgICAgICAgLy8gcGFyc2luZyB0b2tlbiByZWdleGVzCiAgICAgICAgcGFyc2VUb2tlbk9uZU9yVHdvRGlnaXRzID0gL1xkXGQ/LywgLy8gMCAtIDk5CiAgICAgICAgcGFyc2VUb2tlbk9uZVRvVGhyZWVEaWdpdHMgPSAvXGR7MSwzfS8sIC8vIDAgLSA5OTkKICAgICAgICBwYXJzZVRva2VuT25lVG9Gb3VyRGlnaXRzID0gL1xkezEsNH0vLCAvLyAwIC0gOTk5OQogICAgICAgIHBhcnNlVG9rZW5PbmVUb1NpeERpZ2l0cyA9IC9bK1wtXT9cZHsxLDZ9LywgLy8gLTk5OSw5OTkgLSA5OTksOTk5CiAgICAgICAgcGFyc2VUb2tlbkRpZ2l0cyA9IC9cZCsvLCAvLyBub256ZXJvIG51bWJlciBvZiBkaWdpdHMKICAgICAgICBwYXJzZVRva2VuV29yZCA9IC9bMC05XSpbJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdK3xbXHUwNjAwLVx1MDZGRlwvXSsoXHMqP1tcdTA2MDAtXHUwNkZGXSspezEsMn0vaSwgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuCiAgICAgICAgcGFyc2VUb2tlblRpbWV6b25lID0gL1p8W1wrXC1dXGRcZDo/XGRcZC9naSwgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaCiAgICAgICAgcGFyc2VUb2tlblQgPSAvVC9pLCAvLyBUIChJU08gc2VwYXJhdG9yKQogICAgICAgIHBhcnNlVG9rZW5PZmZzZXRNcyA9IC9bXCtcLV0/XGQrLywgLy8gMTIzNDU2Nzg5MDEyMwogICAgICAgIHBhcnNlVG9rZW5UaW1lc3RhbXBNcyA9IC9bXCtcLV0/XGQrKFwuXGR7MSwzfSk/LywgLy8gMTIzNDU2Nzg5IDEyMzQ1Njc4OS4xMjMKCiAgICAgICAgLy9zdHJpY3QgcGFyc2luZyByZWdleGVzCiAgICAgICAgcGFyc2VUb2tlbk9uZURpZ2l0ID0gL1xkLywgLy8gMCAtIDkKICAgICAgICBwYXJzZVRva2VuVHdvRGlnaXRzID0gL1xkXGQvLCAvLyAwMCAtIDk5CiAgICAgICAgcGFyc2VUb2tlblRocmVlRGlnaXRzID0gL1xkezN9LywgLy8gMDAwIC0gOTk5CiAgICAgICAgcGFyc2VUb2tlbkZvdXJEaWdpdHMgPSAvXGR7NH0vLCAvLyAwMDAwIC0gOTk5OQogICAgICAgIHBhcnNlVG9rZW5TaXhEaWdpdHMgPSAvWystXT9cZHs2fS8sIC8vIC05OTksOTk5IC0gOTk5LDk5OQogICAgICAgIHBhcnNlVG9rZW5TaWduZWROdW1iZXIgPSAvWystXT9cZCsvLCAvLyAtaW5mIC0gaW5mCgogICAgICAgIC8vIGlzbyA4NjAxIHJlZ2V4CiAgICAgICAgLy8gMDAwMC0wMC0wMCAwMDAwLVcwMCBvciAwMDAwLVcwMC0wICsgVCArIDAwIG9yIDAwOjAwIG9yIDAwOjAwOjAwIG9yIDAwOjAwOjAwLjAwMCArICswMDowMCBvciArMDAwMCBvciArMDApCiAgICAgICAgaXNvUmVnZXggPSAvXlxzKig/OlsrLV1cZHs2fXxcZHs0fSktKD86KFxkXGQtXGRcZCl8KFdcZFxkJCl8KFdcZFxkLVxkKXwoXGRcZFxkKSkoKFR8ICkoXGRcZCg6XGRcZCg6XGRcZChcLlxkKyk/KT8pPyk/KFtcK1wtXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLAoKICAgICAgICBpc29Gb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onLAoKICAgICAgICBpc29EYXRlcyA9IFsKICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxkezZ9LVxkezJ9LVxkezJ9L10sCiAgICAgICAgICAgIFsnWVlZWS1NTS1ERCcsIC9cZHs0fS1cZHsyfS1cZHsyfS9dLAogICAgICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cZHs0fS1XXGR7Mn0tXGQvXSwKICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xkezR9LVdcZHsyfS9dLAogICAgICAgICAgICBbJ1lZWVktREREJywgL1xkezR9LVxkezN9L10KICAgICAgICBdLAoKICAgICAgICAvLyBpc28gdGltZSBmb3JtYXRzIGFuZCByZWdleGVzCiAgICAgICAgaXNvVGltZXMgPSBbCiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC8oVHwgKVxkXGQ6XGRcZDpcZFxkXC5cZCsvXSwKICAgICAgICAgICAgWydISDptbTpzcycsIC8oVHwgKVxkXGQ6XGRcZDpcZFxkL10sCiAgICAgICAgICAgIFsnSEg6bW0nLCAvKFR8IClcZFxkOlxkXGQvXSwKICAgICAgICAgICAgWydISCcsIC8oVHwgKVxkXGQvXQogICAgICAgIF0sCgogICAgICAgIC8vIHRpbWV6b25lIGNodW5rZXIgJysxMDowMCcgPiBbJzEwJywgJzAwJ10gb3IgJy0xNTMwJyA+IFsnLTE1JywgJzMwJ10KICAgICAgICBwYXJzZVRpbWV6b25lQ2h1bmtlciA9IC8oW1wrXC1dfFxkXGQpL2dpLAoKICAgICAgICAvLyBnZXR0ZXIgYW5kIHNldHRlciBuYW1lcwogICAgICAgIHByb3h5R2V0dGVyc0FuZFNldHRlcnMgPSAnRGF0ZXxIb3Vyc3xNaW51dGVzfFNlY29uZHN8TWlsbGlzZWNvbmRzJy5zcGxpdCgnfCcpLAogICAgICAgIHVuaXRNaWxsaXNlY29uZEZhY3RvcnMgPSB7CiAgICAgICAgICAgICdNaWxsaXNlY29uZHMnIDogMSwKICAgICAgICAgICAgJ1NlY29uZHMnIDogMWUzLAogICAgICAgICAgICAnTWludXRlcycgOiA2ZTQsCiAgICAgICAgICAgICdIb3VycycgOiAzNmU1LAogICAgICAgICAgICAnRGF5cycgOiA4NjRlNSwKICAgICAgICAgICAgJ01vbnRocycgOiAyNTkyZTYsCiAgICAgICAgICAgICdZZWFycycgOiAzMTUzNmU2CiAgICAgICAgfSwKCiAgICAgICAgdW5pdEFsaWFzZXMgPSB7CiAgICAgICAgICAgIG1zIDogJ21pbGxpc2Vjb25kJywKICAgICAgICAgICAgcyA6ICdzZWNvbmQnLAogICAgICAgICAgICBtIDogJ21pbnV0ZScsCiAgICAgICAgICAgIGggOiAnaG91cicsCiAgICAgICAgICAgIGQgOiAnZGF5JywKICAgICAgICAgICAgRCA6ICdkYXRlJywKICAgICAgICAgICAgdyA6ICd3ZWVrJywKICAgICAgICAgICAgVyA6ICdpc29XZWVrJywKICAgICAgICAgICAgTSA6ICdtb250aCcsCiAgICAgICAgICAgIFEgOiAncXVhcnRlcicsCiAgICAgICAgICAgIHkgOiAneWVhcicsCiAgICAgICAgICAgIERERCA6ICdkYXlPZlllYXInLAogICAgICAgICAgICBlIDogJ3dlZWtkYXknLAogICAgICAgICAgICBFIDogJ2lzb1dlZWtkYXknLAogICAgICAgICAgICBnZzogJ3dlZWtZZWFyJywKICAgICAgICAgICAgR0c6ICdpc29XZWVrWWVhcicKICAgICAgICB9LAoKICAgICAgICBjYW1lbEZ1bmN0aW9ucyA9IHsKICAgICAgICAgICAgZGF5b2Z5ZWFyIDogJ2RheU9mWWVhcicsCiAgICAgICAgICAgIGlzb3dlZWtkYXkgOiAnaXNvV2Vla2RheScsCiAgICAgICAgICAgIGlzb3dlZWsgOiAnaXNvV2VlaycsCiAgICAgICAgICAgIHdlZWt5ZWFyIDogJ3dlZWtZZWFyJywKICAgICAgICAgICAgaXNvd2Vla3llYXIgOiAnaXNvV2Vla1llYXInCiAgICAgICAgfSwKCiAgICAgICAgLy8gZm9ybWF0IGZ1bmN0aW9uIHN0cmluZ3MKICAgICAgICBmb3JtYXRGdW5jdGlvbnMgPSB7fSwKCiAgICAgICAgLy8gZGVmYXVsdCByZWxhdGl2ZSB0aW1lIHRocmVzaG9sZHMKICAgICAgICByZWxhdGl2ZVRpbWVUaHJlc2hvbGRzID0gewogICAgICAgICAgICBzOiA0NSwgIC8vIHNlY29uZHMgdG8gbWludXRlCiAgICAgICAgICAgIG06IDQ1LCAgLy8gbWludXRlcyB0byBob3VyCiAgICAgICAgICAgIGg6IDIyLCAgLy8gaG91cnMgdG8gZGF5CiAgICAgICAgICAgIGQ6IDI2LCAgLy8gZGF5cyB0byBtb250aAogICAgICAgICAgICBNOiAxMSAgIC8vIG1vbnRocyB0byB5ZWFyCiAgICAgICAgfSwKCiAgICAgICAgLy8gdG9rZW5zIHRvIG9yZGluYWxpemUgYW5kIHBhZAogICAgICAgIG9yZGluYWxpemVUb2tlbnMgPSAnREREIHcgVyBNIEQgZCcuc3BsaXQoJyAnKSwKICAgICAgICBwYWRkZWRUb2tlbnMgPSAnTSBEIEggaCBtIHMgdyBXJy5zcGxpdCgnICcpLAoKICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHsKICAgICAgICAgICAgTSAgICA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxOwogICAgICAgICAgICB9LAogICAgICAgICAgICBNTU0gIDogZnVuY3Rpb24gKGZvcm1hdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsIGZvcm1hdCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE1NTU0gOiBmdW5jdGlvbiAoZm9ybWF0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEQgICAgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIERERCAgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXlPZlllYXIoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZCAgICA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBkZCAgIDogZnVuY3Rpb24gKGZvcm1hdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRkZCAgOiBmdW5jdGlvbiAoZm9ybWF0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBkZGRkIDogZnVuY3Rpb24gKGZvcm1hdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsIGZvcm1hdCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHcgICAgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy53ZWVrKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFcgICAgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFlZICAgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdFplcm9GaWxsKHRoaXMueWVhcigpICUgMTAwLCAyKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgWVlZWSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0WmVyb0ZpbGwodGhpcy55ZWFyKCksIDQpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBZWVlZWSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0WmVyb0ZpbGwodGhpcy55ZWFyKCksIDUpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBZWVlZWVkgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgeSA9IHRoaXMueWVhcigpLCBzaWduID0geSA+PSAwID8gJysnIDogJy0nOwogICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyBsZWZ0WmVyb0ZpbGwoTWF0aC5hYnMoeSksIDYpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZyAgIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGxlZnRaZXJvRmlsbCh0aGlzLndlZWtZZWFyKCkgJSAxMDAsIDIpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZ2dnIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGxlZnRaZXJvRmlsbCh0aGlzLndlZWtZZWFyKCksIDQpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZ2dnZyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0WmVyb0ZpbGwodGhpcy53ZWVrWWVhcigpLCA1KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgR0cgICA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0WmVyb0ZpbGwodGhpcy5pc29XZWVrWWVhcigpICUgMTAwLCAyKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgR0dHRyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0WmVyb0ZpbGwodGhpcy5pc29XZWVrWWVhcigpLCA0KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgR0dHR0cgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdFplcm9GaWxsKHRoaXMuaXNvV2Vla1llYXIoKSwgNSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy53ZWVrZGF5KCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrZGF5KCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGEgICAgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLCB0aGlzLm1pbnV0ZXMoKSwgdHJ1ZSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEEgICAgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLCB0aGlzLm1pbnV0ZXMoKSwgZmFsc2UpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBIICAgIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaCAgICA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbSAgICA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1pbnV0ZXMoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcyAgICA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlY29uZHMoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUyAgICA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0b0ludCh0aGlzLm1pbGxpc2Vjb25kcygpIC8gMTAwKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU1MgICA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0WmVyb0ZpbGwodG9JbnQodGhpcy5taWxsaXNlY29uZHMoKSAvIDEwKSwgMik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNTUyAgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdFplcm9GaWxsKHRoaXMubWlsbGlzZWNvbmRzKCksIDMpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBTU1NTIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGxlZnRaZXJvRmlsbCh0aGlzLm1pbGxpc2Vjb25kcygpLCAzKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgWiAgICA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBhID0gLXRoaXMuem9uZSgpLAogICAgICAgICAgICAgICAgICAgIGIgPSAnKyc7CiAgICAgICAgICAgICAgICBpZiAoYSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBhID0gLWE7CiAgICAgICAgICAgICAgICAgICAgYiA9ICctJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBiICsgbGVmdFplcm9GaWxsKHRvSW50KGEgLyA2MCksIDIpICsgJzonICsgbGVmdFplcm9GaWxsKHRvSW50KGEpICUgNjAsIDIpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBaWiAgIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIGEgPSAtdGhpcy56b25lKCksCiAgICAgICAgICAgICAgICAgICAgYiA9ICcrJzsKICAgICAgICAgICAgICAgIGlmIChhIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGEgPSAtYTsKICAgICAgICAgICAgICAgICAgICBiID0gJy0nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGIgKyBsZWZ0WmVyb0ZpbGwodG9JbnQoYSAvIDYwKSwgMikgKyBsZWZ0WmVyb0ZpbGwodG9JbnQoYSkgJSA2MCwgMik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHogOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy56b25lQWJicigpOwogICAgICAgICAgICB9LAogICAgICAgICAgICB6eiA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnpvbmVOYW1lKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHggICAgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFggICAgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51bml4KCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFEgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5xdWFydGVyKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBkZXByZWNhdGlvbnMgPSB7fSwKCiAgICAgICAgbGlzdHMgPSBbJ21vbnRocycsICdtb250aHNTaG9ydCcsICd3ZWVrZGF5cycsICd3ZWVrZGF5c1Nob3J0JywgJ3dlZWtkYXlzTWluJ107CgogICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLiBkZmwgY29tZXMgZnJvbQogICAgLy8gZGVmYXVsdC4KICAgIGZ1bmN0aW9uIGRmbChhLCBiLCBjKSB7CiAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIGEgIT0gbnVsbCA/IGEgOiBiOwogICAgICAgICAgICBjYXNlIDM6IHJldHVybiBhICE9IG51bGwgPyBhIDogYiAhPSBudWxsID8gYiA6IGM7CiAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcignSW1wbGVtZW50IG1lJyk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikgewogICAgICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7CiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LCBhbmQgZXM1IHN0YW5kYXJkIGlzIG5vdCB2ZXJ5CiAgICAgICAgLy8gaGVscGZ1bC4KICAgICAgICByZXR1cm4gewogICAgICAgICAgICBlbXB0eSA6IGZhbHNlLAogICAgICAgICAgICB1bnVzZWRUb2tlbnMgOiBbXSwKICAgICAgICAgICAgdW51c2VkSW5wdXQgOiBbXSwKICAgICAgICAgICAgb3ZlcmZsb3cgOiAtMiwKICAgICAgICAgICAgY2hhcnNMZWZ0T3ZlciA6IDAsCiAgICAgICAgICAgIG51bGxJbnB1dCA6IGZhbHNlLAogICAgICAgICAgICBpbnZhbGlkTW9udGggOiBudWxsLAogICAgICAgICAgICBpbnZhbGlkRm9ybWF0IDogZmFsc2UsCiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZCA6IGZhbHNlLAogICAgICAgICAgICBpc286IGZhbHNlCiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBwcmludE1zZyhtc2cpIHsKICAgICAgICBpZiAobW9tZW50LnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiYKICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZGVwcmVjYXRlKG1zZywgZm4pIHsKICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTsKICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkgewogICAgICAgICAgICAgICAgcHJpbnRNc2cobXNnKTsKICAgICAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH0sIGZuKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZXByZWNhdGVTaW1wbGUobmFtZSwgbXNnKSB7CiAgICAgICAgaWYgKCFkZXByZWNhdGlvbnNbbmFtZV0pIHsKICAgICAgICAgICAgcHJpbnRNc2cobXNnKTsKICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcGFkVG9rZW4oZnVuYywgY291bnQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgcmV0dXJuIGxlZnRaZXJvRmlsbChmdW5jLmNhbGwodGhpcywgYSksIGNvdW50KTsKICAgICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gb3JkaW5hbGl6ZVRva2VuKGZ1bmMsIHBlcmlvZCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChmdW5jLmNhbGwodGhpcywgYSksIHBlcmlvZCk7CiAgICAgICAgfTsKICAgIH0KCiAgICB3aGlsZSAob3JkaW5hbGl6ZVRva2Vucy5sZW5ndGgpIHsKICAgICAgICBpID0gb3JkaW5hbGl6ZVRva2Vucy5wb3AoKTsKICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tpICsgJ28nXSA9IG9yZGluYWxpemVUb2tlbihmb3JtYXRUb2tlbkZ1bmN0aW9uc1tpXSwgaSk7CiAgICB9CiAgICB3aGlsZSAocGFkZGVkVG9rZW5zLmxlbmd0aCkgewogICAgICAgIGkgPSBwYWRkZWRUb2tlbnMucG9wKCk7CiAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbaSArIGldID0gcGFkVG9rZW4oZm9ybWF0VG9rZW5GdW5jdGlvbnNbaV0sIDIpOwogICAgfQogICAgZm9ybWF0VG9rZW5GdW5jdGlvbnMuRERERCA9IHBhZFRva2VuKGZvcm1hdFRva2VuRnVuY3Rpb25zLkRERCwgMyk7CgoKICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICBDb25zdHJ1Y3RvcnMKICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICBmdW5jdGlvbiBMb2NhbGUoKSB7CiAgICB9CgogICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3QKICAgIGZ1bmN0aW9uIE1vbWVudChjb25maWcsIHNraXBPdmVyZmxvdykgewogICAgICAgIGlmIChza2lwT3ZlcmZsb3cgIT09IGZhbHNlKSB7CiAgICAgICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTsKICAgICAgICB9CiAgICAgICAgY29weUNvbmZpZyh0aGlzLCBjb25maWcpOwogICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZSgrY29uZmlnLl9kKTsKICAgIH0KCiAgICAvLyBEdXJhdGlvbiBDb25zdHJ1Y3RvcgogICAgZnVuY3Rpb24gRHVyYXRpb24oZHVyYXRpb24pIHsKICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLAogICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsCiAgICAgICAgICAgIHF1YXJ0ZXJzID0gbm9ybWFsaXplZElucHV0LnF1YXJ0ZXIgfHwgMCwKICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsCiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgMCwKICAgICAgICAgICAgZGF5cyA9IG5vcm1hbGl6ZWRJbnB1dC5kYXkgfHwgMCwKICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLAogICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLAogICAgICAgICAgICBzZWNvbmRzID0gbm9ybWFsaXplZElucHV0LnNlY29uZCB8fCAwLAogICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDsKCiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmUKICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPSArbWlsbGlzZWNvbmRzICsKICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDAKICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MAogICAgICAgICAgICBob3VycyAqIDM2ZTU7IC8vIDEwMDAgKiA2MCAqIDYwCiAgICAgICAgLy8gQmVjYXVzZSBvZiBkYXRlQWRkUmVtb3ZlIHRyZWF0cyAyNCBob3VycyBhcyBkaWZmZXJlbnQgZnJvbSBhCiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseQogICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArCiAgICAgICAgICAgIHdlZWtzICogNzsKICAgICAgICAvLyBJdCBpcyBpbXBvc3NpYmxlIHRyYW5zbGF0ZSBtb250aHMgaW50byBkYXlzIHdpdGhvdXQga25vd2luZwogICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlCiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS4KICAgICAgICB0aGlzLl9tb250aHMgPSArbW9udGhzICsKICAgICAgICAgICAgcXVhcnRlcnMgKiAzICsKICAgICAgICAgICAgeWVhcnMgKiAxMjsKCiAgICAgICAgdGhpcy5fZGF0YSA9IHt9OwoKICAgICAgICB0aGlzLl9sb2NhbGUgPSBtb21lbnQubG9jYWxlRGF0YSgpOwoKICAgICAgICB0aGlzLl9idWJibGUoKTsKICAgIH0KCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgSGVscGVycwogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikgewogICAgICAgIGZvciAodmFyIGkgaW4gYikgewogICAgICAgICAgICBpZiAoaGFzT3duUHJvcChiLCBpKSkgewogICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7CiAgICAgICAgICAgIGEudG9TdHJpbmcgPSBiLnRvU3RyaW5nOwogICAgICAgIH0KCiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3ZhbHVlT2YnKSkgewogICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7CiAgICAgICAgdmFyIGksIHByb3AsIHZhbDsKCiAgICAgICAgaWYgKHR5cGVvZiBmcm9tLl9pc0FNb21lbnRPYmplY3QgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZnJvbS5faSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGZyb20uX2YgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBmcm9tLl9sICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZnJvbS5fc3RyaWN0ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGZyb20uX3R6bSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBmcm9tLl9pc1VUQyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZnJvbS5fb2Zmc2V0ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGZyb20uX3BmICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICB0by5fcGYgPSBmcm9tLl9wZjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBmcm9tLl9sb2NhbGUgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7CiAgICAgICAgfQoKICAgICAgICBpZiAobW9tZW50UHJvcGVydGllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGZvciAoaSBpbiBtb21lbnRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTsKICAgICAgICAgICAgICAgIHZhbCA9IGZyb21bcHJvcF07CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRvOwogICAgfQoKICAgIGZ1bmN0aW9uIGFic1JvdW5kKG51bWJlcikgewogICAgICAgIGlmIChudW1iZXIgPCAwKSB7CiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBsZWZ0IHplcm8gZmlsbCBhIG51bWJlcgogICAgLy8gc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2xlZnQtemVyby1maWxsaW5nIGZvciBwZXJmb3JtYW5jZSBjb21wYXJpc29uCiAgICBmdW5jdGlvbiBsZWZ0WmVyb0ZpbGwobnVtYmVyLCB0YXJnZXRMZW5ndGgsIGZvcmNlU2lnbikgewogICAgICAgIHZhciBvdXRwdXQgPSAnJyArIE1hdGguYWJzKG51bWJlciksCiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDsKCiAgICAgICAgd2hpbGUgKG91dHB1dC5sZW5ndGggPCB0YXJnZXRMZW5ndGgpIHsKICAgICAgICAgICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gKHNpZ24gPyAoZm9yY2VTaWduID8gJysnIDogJycpIDogJy0nKSArIG91dHB1dDsKICAgIH0KCiAgICBmdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7CiAgICAgICAgdmFyIHJlcyA9IHttaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMH07CgogICAgICAgIHJlcy5tb250aHMgPSBvdGhlci5tb250aCgpIC0gYmFzZS5tb250aCgpICsKICAgICAgICAgICAgKG90aGVyLnllYXIoKSAtIGJhc2UueWVhcigpKSAqIDEyOwogICAgICAgIGlmIChiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykuaXNBZnRlcihvdGhlcikpIHsKICAgICAgICAgICAgLS1yZXMubW9udGhzOwogICAgICAgIH0KCiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICsoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpKTsKCiAgICAgICAgcmV0dXJuIHJlczsKICAgIH0KCiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikgewogICAgICAgIHZhciByZXM7CiAgICAgICAgb3RoZXIgPSBtYWtlQXMob3RoZXIsIGJhc2UpOwogICAgICAgIGlmIChiYXNlLmlzQmVmb3JlKG90aGVyKSkgewogICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKG90aGVyLCBiYXNlKTsKICAgICAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzOwogICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzOwogICAgfQoKICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWQKICAgIGZ1bmN0aW9uIGNyZWF0ZUFkZGVyKGRpcmVjdGlvbiwgbmFtZSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsLCBwZXJpb2QpIHsKICAgICAgICAgICAgdmFyIGR1ciwgdG1wOwogICAgICAgICAgICAvL2ludmVydCB0aGUgYXJndW1lbnRzLCBidXQgY29tcGxhaW4gYWJvdXQgaXQKICAgICAgICAgICAgaWYgKHBlcmlvZCAhPT0gbnVsbCAmJiAhaXNOYU4oK3BlcmlvZCkpIHsKICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCAnbW9tZW50KCkuJyArIG5hbWUgICsgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICsgbmFtZSArICcobnVtYmVyLCBwZXJpb2QpLicpOwogICAgICAgICAgICAgICAgdG1wID0gdmFsOyB2YWwgPSBwZXJpb2Q7IHBlcmlvZCA9IHRtcDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyArdmFsIDogdmFsOwogICAgICAgICAgICBkdXIgPSBtb21lbnQuZHVyYXRpb24odmFsLCBwZXJpb2QpOwogICAgICAgICAgICBhZGRPclN1YnRyYWN0RHVyYXRpb25Gcm9tTW9tZW50KHRoaXMsIGR1ciwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGRPclN1YnRyYWN0RHVyYXRpb25Gcm9tTW9tZW50KG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHsKICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcywKICAgICAgICAgICAgZGF5cyA9IGR1cmF0aW9uLl9kYXlzLAogICAgICAgICAgICBtb250aHMgPSBkdXJhdGlvbi5fbW9udGhzOwogICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDsKCiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykgewogICAgICAgICAgICBtb20uX2Quc2V0VGltZSgrbW9tLl9kICsgbWlsbGlzZWNvbmRzICogaXNBZGRpbmcpOwogICAgICAgIH0KICAgICAgICBpZiAoZGF5cykgewogICAgICAgICAgICByYXdTZXR0ZXIobW9tLCAnRGF0ZScsIHJhd0dldHRlcihtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpOwogICAgICAgIH0KICAgICAgICBpZiAobW9udGhzKSB7CiAgICAgICAgICAgIHJhd01vbnRoU2V0dGVyKG1vbSwgcmF3R2V0dGVyKG1vbSwgJ01vbnRoJykgKyBtb250aHMgKiBpc0FkZGluZyk7CiAgICAgICAgfQogICAgICAgIGlmICh1cGRhdGVPZmZzZXQpIHsKICAgICAgICAgICAgbW9tZW50LnVwZGF0ZU9mZnNldChtb20sIGRheXMgfHwgbW9udGhzKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gY2hlY2sgaWYgaXMgYW4gYXJyYXkKICAgIGZ1bmN0aW9uIGlzQXJyYXkoaW5wdXQpIHsKICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHsKICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nIHx8CiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZTsKICAgIH0KCiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzCiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkgewogICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcnJheTEubGVuZ3RoLCBhcnJheTIubGVuZ3RoKSwKICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSwKICAgICAgICAgICAgZGlmZnMgPSAwLAogICAgICAgICAgICBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICBpZiAoKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fAogICAgICAgICAgICAgICAgKCFkb250Q29udmVydCAmJiB0b0ludChhcnJheTFbaV0pICE9PSB0b0ludChhcnJheTJbaV0pKSkgewogICAgICAgICAgICAgICAgZGlmZnMrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmOwogICAgfQoKICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7CiAgICAgICAgaWYgKHVuaXRzKSB7CiAgICAgICAgICAgIHZhciBsb3dlcmVkID0gdW5pdHMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oLilzJC8sICckMScpOwogICAgICAgICAgICB1bml0cyA9IHVuaXRBbGlhc2VzW3VuaXRzXSB8fCBjYW1lbEZ1bmN0aW9uc1tsb3dlcmVkXSB8fCBsb3dlcmVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdW5pdHM7CiAgICB9CgogICAgZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0VW5pdHMoaW5wdXRPYmplY3QpIHsKICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sCiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLAogICAgICAgICAgICBwcm9wOwoKICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHsKICAgICAgICAgICAgaWYgKGhhc093blByb3AoaW5wdXRPYmplY3QsIHByb3ApKSB7CiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApOwogICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZElucHV0W25vcm1hbGl6ZWRQcm9wXSA9IGlucHV0T2JqZWN0W3Byb3BdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0OwogICAgfQoKICAgIGZ1bmN0aW9uIG1ha2VMaXN0KGZpZWxkKSB7CiAgICAgICAgdmFyIGNvdW50LCBzZXR0ZXI7CgogICAgICAgIGlmIChmaWVsZC5pbmRleE9mKCd3ZWVrJykgPT09IDApIHsKICAgICAgICAgICAgY291bnQgPSA3OwogICAgICAgICAgICBzZXR0ZXIgPSAnZGF5JzsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZmllbGQuaW5kZXhPZignbW9udGgnKSA9PT0gMCkgewogICAgICAgICAgICBjb3VudCA9IDEyOwogICAgICAgICAgICBzZXR0ZXIgPSAnbW9udGgnOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbW9tZW50W2ZpZWxkXSA9IGZ1bmN0aW9uIChmb3JtYXQsIGluZGV4KSB7CiAgICAgICAgICAgIHZhciBpLCBnZXR0ZXIsCiAgICAgICAgICAgICAgICBtZXRob2QgPSBtb21lbnQuX2xvY2FsZVtmaWVsZF0sCiAgICAgICAgICAgICAgICByZXN1bHRzID0gW107CgogICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdCA9PT0gJ251bWJlcicpIHsKICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0OwogICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkOwogICAgICAgICAgICB9CgogICAgICAgICAgICBnZXR0ZXIgPSBmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgdmFyIG0gPSBtb21lbnQoKS51dGMoKS5zZXQoc2V0dGVyLCBpKTsKICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2QuY2FsbChtb21lbnQuX2xvY2FsZSwgbSwgZm9ybWF0IHx8ICcnKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0dGVyKGluZGV4KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGdldHRlcihpKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikgewogICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sCiAgICAgICAgICAgIHZhbHVlID0gMDsKCiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHsKICAgICAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgPj0gMCkgewogICAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLmZsb29yKGNvZXJjZWROdW1iZXIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLmNlaWwoY29lcmNlZE51bWJlcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkgewogICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCArIDEsIDApKS5nZXRVVENEYXRlKCk7CiAgICB9CgogICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHsKICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb21lbnQoW3llYXIsIDExLCAzMSArIGRvdyAtIGRveV0pLCBkb3csIGRveSkud2VlazsKICAgIH0KCiAgICBmdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpIHsKICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHsKICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7CiAgICB9CgogICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyhtKSB7CiAgICAgICAgdmFyIG92ZXJmbG93OwogICAgICAgIGlmIChtLl9hICYmIG0uX3BmLm92ZXJmbG93ID09PSAtMikgewogICAgICAgICAgICBvdmVyZmxvdyA9CiAgICAgICAgICAgICAgICBtLl9hW01PTlRIXSA8IDAgfHwgbS5fYVtNT05USF0gPiAxMSA/IE1PTlRIIDoKICAgICAgICAgICAgICAgIG0uX2FbREFURV0gPCAxIHx8IG0uX2FbREFURV0gPiBkYXlzSW5Nb250aChtLl9hW1lFQVJdLCBtLl9hW01PTlRIXSkgPyBEQVRFIDoKICAgICAgICAgICAgICAgIG0uX2FbSE9VUl0gPCAwIHx8IG0uX2FbSE9VUl0gPiAyNCB8fAogICAgICAgICAgICAgICAgICAgIChtLl9hW0hPVVJdID09PSAyNCAmJiAobS5fYVtNSU5VVEVdICE9PSAwIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLl9hW1NFQ09ORF0gIT09IDAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uX2FbTUlMTElTRUNPTkRdICE9PSAwKSkgPyBIT1VSIDoKICAgICAgICAgICAgICAgIG0uX2FbTUlOVVRFXSA8IDAgfHwgbS5fYVtNSU5VVEVdID4gNTkgPyBNSU5VVEUgOgogICAgICAgICAgICAgICAgbS5fYVtTRUNPTkRdIDwgMCB8fCBtLl9hW1NFQ09ORF0gPiA1OSA/IFNFQ09ORCA6CiAgICAgICAgICAgICAgICBtLl9hW01JTExJU0VDT05EXSA8IDAgfHwgbS5fYVtNSUxMSVNFQ09ORF0gPiA5OTkgPyBNSUxMSVNFQ09ORCA6CiAgICAgICAgICAgICAgICAtMTsKCiAgICAgICAgICAgIGlmIChtLl9wZi5fb3ZlcmZsb3dEYXlPZlllYXIgJiYgKG92ZXJmbG93IDwgWUVBUiB8fCBvdmVyZmxvdyA+IERBVEUpKSB7CiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG0uX3BmLm92ZXJmbG93ID0gb3ZlcmZsb3c7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkgewogICAgICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHsKICAgICAgICAgICAgbS5faXNWYWxpZCA9ICFpc05hTihtLl9kLmdldFRpbWUoKSkgJiYKICAgICAgICAgICAgICAgIG0uX3BmLm92ZXJmbG93IDwgMCAmJgogICAgICAgICAgICAgICAgIW0uX3BmLmVtcHR5ICYmCiAgICAgICAgICAgICAgICAhbS5fcGYuaW52YWxpZE1vbnRoICYmCiAgICAgICAgICAgICAgICAhbS5fcGYubnVsbElucHV0ICYmCiAgICAgICAgICAgICAgICAhbS5fcGYuaW52YWxpZEZvcm1hdCAmJgogICAgICAgICAgICAgICAgIW0uX3BmLnVzZXJJbnZhbGlkYXRlZDsKCiAgICAgICAgICAgIGlmIChtLl9zdHJpY3QpIHsKICAgICAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBtLl9pc1ZhbGlkICYmCiAgICAgICAgICAgICAgICAgICAgbS5fcGYuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJgogICAgICAgICAgICAgICAgICAgIG0uX3BmLnVudXNlZFRva2Vucy5sZW5ndGggPT09IDAgJiYKICAgICAgICAgICAgICAgICAgICBtLl9wZi5iaWdIb3VyID09PSB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7CiAgICB9CgogICAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGtleSkgewogICAgICAgIHJldHVybiBrZXkgPyBrZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdfJywgJy0nKSA6IGtleTsKICAgIH0KCiAgICAvLyBwaWNrIHRoZSBsb2NhbGUgZnJvbSB0aGUgYXJyYXkKICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoCiAgICAvLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290CiAgICBmdW5jdGlvbiBjaG9vc2VMb2NhbGUobmFtZXMpIHsKICAgICAgICB2YXIgaSA9IDAsIGosIG5leHQsIGxvY2FsZSwgc3BsaXQ7CgogICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7CiAgICAgICAgICAgIHNwbGl0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2ldKS5zcGxpdCgnLScpOwogICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoOwogICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7CiAgICAgICAgICAgIG5leHQgPSBuZXh0ID8gbmV4dC5zcGxpdCgnLScpIDogbnVsbDsKICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7CiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7CiAgICAgICAgICAgICAgICBpZiAobG9jYWxlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQubGVuZ3RoID49IGogJiYgY29tcGFyZUFycmF5cyhzcGxpdCwgbmV4dCwgdHJ1ZSkgPj0gaiAtIDEpIHsKICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBqLS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaSsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHsKICAgICAgICB2YXIgb2xkTG9jYWxlID0gbnVsbDsKICAgICAgICBpZiAoIWxvY2FsZXNbbmFtZV0gJiYgaGFzTW9kdWxlKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBvbGRMb2NhbGUgPSBtb21lbnQubG9jYWxlKCk7CiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7CiAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIGRlZmluZUxvY2FsZSBjdXJyZW50bHkgYWxzbyBzZXRzIHRoZSBnbG9iYWwgbG9jYWxlLCB3ZSB3YW50IHRvIHVuZG8gdGhhdCBmb3IgbGF6eSBsb2FkZWQgbG9jYWxlcwogICAgICAgICAgICAgICAgbW9tZW50LmxvY2FsZShvbGRMb2NhbGUpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07CiAgICB9CgogICAgLy8gUmV0dXJuIGEgbW9tZW50IGZyb20gaW5wdXQsIHRoYXQgaXMgbG9jYWwvdXRjL3pvbmUgZXF1aXZhbGVudCB0byBtb2RlbC4KICAgIGZ1bmN0aW9uIG1ha2VBcyhpbnB1dCwgbW9kZWwpIHsKICAgICAgICB2YXIgcmVzLCBkaWZmOwogICAgICAgIGlmIChtb2RlbC5faXNVVEMpIHsKICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTsKICAgICAgICAgICAgZGlmZiA9IChtb21lbnQuaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dCkgPwogICAgICAgICAgICAgICAgICAgICtpbnB1dCA6ICttb21lbnQoaW5wdXQpKSAtICgrcmVzKTsKICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLgogICAgICAgICAgICByZXMuX2Quc2V0VGltZSgrcmVzLl9kICsgZGlmZik7CiAgICAgICAgICAgIG1vbWVudC51cGRhdGVPZmZzZXQocmVzLCBmYWxzZSk7CiAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG1vbWVudChpbnB1dCkubG9jYWwoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgIExvY2FsZQogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCiAgICBleHRlbmQoTG9jYWxlLnByb3RvdHlwZSwgewoKICAgICAgICBzZXQgOiBmdW5jdGlvbiAoY29uZmlnKSB7CiAgICAgICAgICAgIHZhciBwcm9wLCBpOwogICAgICAgICAgICBmb3IgKGkgaW4gY29uZmlnKSB7CiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0bwogICAgICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9vcmRpbmFsUGFyc2VMZW5pZW50LgogICAgICAgICAgICB0aGlzLl9vcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cCh0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlICsgJ3wnICsgL1xkezEsMn0vLnNvdXJjZSk7CiAgICAgICAgfSwKCiAgICAgICAgX21vbnRocyA6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdCgnXycpLAogICAgICAgIG1vbnRocyA6IGZ1bmN0aW9uIChtKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNbbS5tb250aCgpXTsKICAgICAgICB9LAoKICAgICAgICBfbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksCiAgICAgICAgbW9udGhzU2hvcnQgOiBmdW5jdGlvbiAobSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXTsKICAgICAgICB9LAoKICAgICAgICBtb250aHNQYXJzZSA6IGZ1bmN0aW9uIChtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7CiAgICAgICAgICAgIHZhciBpLCBtb20sIHJlZ2V4OwoKICAgICAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkgewogICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTsKICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdOwogICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgewogICAgICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5CiAgICAgICAgICAgICAgICBtb20gPSBtb21lbnQudXRjKFsyMDAwLCBpXSk7CiAgICAgICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsICdpJyk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLCAnaScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgcmVnZXggPSAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXgKICAgICAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnTU1NTScgJiYgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnTU1NJyAmJiB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgX3dlZWtkYXlzIDogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLAogICAgICAgIHdlZWtkYXlzIDogZnVuY3Rpb24gKG0pIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzW20uZGF5KCldOwogICAgICAgIH0sCgogICAgICAgIF93ZWVrZGF5c1Nob3J0IDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSwKICAgICAgICB3ZWVrZGF5c1Nob3J0IDogZnVuY3Rpb24gKG0pIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV07CiAgICAgICAgfSwKCiAgICAgICAgX3dlZWtkYXlzTWluIDogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLAogICAgICAgIHdlZWtkYXlzTWluIDogZnVuY3Rpb24gKG0pIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldOwogICAgICAgIH0sCgogICAgICAgIHdlZWtkYXlzUGFyc2UgOiBmdW5jdGlvbiAod2Vla2RheU5hbWUpIHsKICAgICAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7CgogICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHsKICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewogICAgICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHsKICAgICAgICAgICAgICAgICAgICBtb20gPSBtb21lbnQoWzIwMDAsIDFdKS5kYXkoaSk7CiAgICAgICAgICAgICAgICAgICAgcmVnZXggPSAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSArICd8XicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleAogICAgICAgICAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIF9sb25nRGF0ZUZvcm1hdCA6IHsKICAgICAgICAgICAgTFRTIDogJ2g6bW06c3MgQScsCiAgICAgICAgICAgIExUIDogJ2g6bW0gQScsCiAgICAgICAgICAgIEwgOiAnTU0vREQvWVlZWScsCiAgICAgICAgICAgIExMIDogJ01NTU0gRCwgWVlZWScsCiAgICAgICAgICAgIExMTCA6ICdNTU1NIEQsIFlZWVkgTFQnLAogICAgICAgICAgICBMTExMIDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBMVCcKICAgICAgICB9LAogICAgICAgIGxvbmdEYXRlRm9ybWF0IDogZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTsKICAgICAgICAgICAgaWYgKCFvdXRwdXQgJiYgdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldKSB7CiAgICAgICAgICAgICAgICBvdXRwdXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV0ucmVwbGFjZSgvTU1NTXxNTXxERHxkZGRkL2csIGZ1bmN0aW9uICh2YWwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsLnNsaWNlKDEpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gb3V0cHV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7CiAgICAgICAgfSwKCiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkgewogICAgICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzCiAgICAgICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLgogICAgICAgICAgICByZXR1cm4gKChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSA9PT0gJ3AnKTsKICAgICAgICB9LAoKICAgICAgICBfbWVyaWRpZW1QYXJzZSA6IC9bYXBdXC4/bT9cLj8vaSwKICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikgewogICAgICAgICAgICBpZiAoaG91cnMgPiAxMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG0nIDogJ1BNJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2FtJyA6ICdBTSc7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBfY2FsZW5kYXIgOiB7CiAgICAgICAgICAgIHNhbWVEYXkgOiAnW1RvZGF5IGF0XSBMVCcsCiAgICAgICAgICAgIG5leHREYXkgOiAnW1RvbW9ycm93IGF0XSBMVCcsCiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2F0XSBMVCcsCiAgICAgICAgICAgIGxhc3REYXkgOiAnW1llc3RlcmRheSBhdF0gTFQnLAogICAgICAgICAgICBsYXN0V2VlayA6ICdbTGFzdF0gZGRkZCBbYXRdIExUJywKICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCcKICAgICAgICB9LAogICAgICAgIGNhbGVuZGFyIDogZnVuY3Rpb24gKGtleSwgbW9tLCBub3cpIHsKICAgICAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX2NhbGVuZGFyW2tleV07CiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnZnVuY3Rpb24nID8gb3V0cHV0LmFwcGx5KG1vbSwgW25vd10pIDogb3V0cHV0OwogICAgICAgIH0sCgogICAgICAgIF9yZWxhdGl2ZVRpbWUgOiB7CiAgICAgICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsCiAgICAgICAgICAgIHBhc3QgOiAnJXMgYWdvJywKICAgICAgICAgICAgcyA6ICdhIGZldyBzZWNvbmRzJywKICAgICAgICAgICAgbSA6ICdhIG1pbnV0ZScsCiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZXMnLAogICAgICAgICAgICBoIDogJ2FuIGhvdXInLAogICAgICAgICAgICBoaCA6ICclZCBob3VycycsCiAgICAgICAgICAgIGQgOiAnYSBkYXknLAogICAgICAgICAgICBkZCA6ICclZCBkYXlzJywKICAgICAgICAgICAgTSA6ICdhIG1vbnRoJywKICAgICAgICAgICAgTU0gOiAnJWQgbW9udGhzJywKICAgICAgICAgICAgeSA6ICdhIHllYXInLAogICAgICAgICAgICB5eSA6ICclZCB5ZWFycycKICAgICAgICB9LAoKICAgICAgICByZWxhdGl2ZVRpbWUgOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7CiAgICAgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbc3RyaW5nXTsKICAgICAgICAgICAgcmV0dXJuICh0eXBlb2Ygb3V0cHV0ID09PSAnZnVuY3Rpb24nKSA/CiAgICAgICAgICAgICAgICBvdXRwdXQobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSA6CiAgICAgICAgICAgICAgICBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTsKICAgICAgICB9LAoKICAgICAgICBwYXN0RnV0dXJlIDogZnVuY3Rpb24gKGRpZmYsIG91dHB1dCkgewogICAgICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW2RpZmYgPiAwID8gJ2Z1dHVyZScgOiAncGFzdCddOwogICAgICAgICAgICByZXR1cm4gdHlwZW9mIGZvcm1hdCA9PT0gJ2Z1bmN0aW9uJyA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7CiAgICAgICAgfSwKCiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpOwogICAgICAgIH0sCiAgICAgICAgX29yZGluYWwgOiAnJWQnLAogICAgICAgIF9vcmRpbmFsUGFyc2UgOiAvXGR7MSwyfS8sCgogICAgICAgIHByZXBhcnNlIDogZnVuY3Rpb24gKHN0cmluZykgewogICAgICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgICAgIH0sCgogICAgICAgIHBvc3Rmb3JtYXQgOiBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgICAgfSwKCiAgICAgICAgd2VlayA6IGZ1bmN0aW9uIChtb20pIHsKICAgICAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIobW9tLCB0aGlzLl93ZWVrLmRvdywgdGhpcy5fd2Vlay5kb3kpLndlZWs7CiAgICAgICAgfSwKCiAgICAgICAgX3dlZWsgOiB7CiAgICAgICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLgogICAgICAgICAgICBkb3kgOiA2ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuCiAgICAgICAgfSwKCiAgICAgICAgX2ludmFsaWREYXRlOiAnSW52YWxpZCBkYXRlJywKICAgICAgICBpbnZhbGlkRGF0ZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7CiAgICAgICAgfQogICAgfSk7CgogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgIEZvcm1hdHRpbmcKICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgogICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkgewogICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFtbXHNcU10vKSkgewogICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxbfFxdJC9nLCAnJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXC9nLCAnJyk7CiAgICB9CgogICAgZnVuY3Rpb24gbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCkgewogICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSwgaSwgbGVuZ3RoOwoKICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dKSB7CiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGFycmF5W2ldID0gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhhcnJheVtpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7CiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJzsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYXJyYXlbaV0gaW5zdGFuY2VvZiBGdW5jdGlvbiA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpIDogYXJyYXlbaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG91dHB1dDsKICAgICAgICB9OwogICAgfQoKICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdAogICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkgewogICAgICAgIGlmICghbS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7CiAgICAgICAgfQoKICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7CgogICAgICAgIGlmICghZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0pIHsKICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPSBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTsKICAgIH0KCiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHsKICAgICAgICB2YXIgaSA9IDU7CgogICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkgewogICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDsKICAgICAgICB9CgogICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwOwogICAgICAgIHdoaWxlIChpID49IDAgJiYgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLnRlc3QoZm9ybWF0KSkgewogICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShsb2NhbEZvcm1hdHRpbmdUb2tlbnMsIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2Vucyk7CiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwOwogICAgICAgICAgICBpIC09IDE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZm9ybWF0OwogICAgfQoKCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgUGFyc2luZwogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCiAgICAvLyBnZXQgdGhlIHJlZ2V4IHRvIGZpbmQgdGhlIG5leHQgdG9rZW4KICAgIGZ1bmN0aW9uIGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSB7CiAgICAgICAgdmFyIGEsIHN0cmljdCA9IGNvbmZpZy5fc3RyaWN0OwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICBjYXNlICdRJzoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5PbmVEaWdpdDsKICAgICAgICBjYXNlICdEREREJzoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5UaHJlZURpZ2l0czsKICAgICAgICBjYXNlICdZWVlZJzoKICAgICAgICBjYXNlICdHR0dHJzoKICAgICAgICBjYXNlICdnZ2dnJzoKICAgICAgICAgICAgcmV0dXJuIHN0cmljdCA/IHBhcnNlVG9rZW5Gb3VyRGlnaXRzIDogcGFyc2VUb2tlbk9uZVRvRm91ckRpZ2l0czsKICAgICAgICBjYXNlICdZJzoKICAgICAgICBjYXNlICdHJzoKICAgICAgICBjYXNlICdnJzoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5TaWduZWROdW1iZXI7CiAgICAgICAgY2FzZSAnWVlZWVlZJzoKICAgICAgICBjYXNlICdZWVlZWSc6CiAgICAgICAgY2FzZSAnR0dHR0cnOgogICAgICAgIGNhc2UgJ2dnZ2dnJzoKICAgICAgICAgICAgcmV0dXJuIHN0cmljdCA/IHBhcnNlVG9rZW5TaXhEaWdpdHMgOiBwYXJzZVRva2VuT25lVG9TaXhEaWdpdHM7CiAgICAgICAgY2FzZSAnUyc6CiAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRva2VuT25lRGlnaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgICAgIGNhc2UgJ1NTJzoKICAgICAgICAgICAgaWYgKHN0cmljdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5Ud29EaWdpdHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgICAgIGNhc2UgJ1NTUyc6CiAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRva2VuVGhyZWVEaWdpdHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgICAgIGNhc2UgJ0RERCc6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRva2VuT25lVG9UaHJlZURpZ2l0czsKICAgICAgICBjYXNlICdNTU0nOgogICAgICAgIGNhc2UgJ01NTU0nOgogICAgICAgIGNhc2UgJ2RkJzoKICAgICAgICBjYXNlICdkZGQnOgogICAgICAgIGNhc2UgJ2RkZGQnOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbldvcmQ7CiAgICAgICAgY2FzZSAnYSc6CiAgICAgICAgY2FzZSAnQSc6CiAgICAgICAgICAgIHJldHVybiBjb25maWcuX2xvY2FsZS5fbWVyaWRpZW1QYXJzZTsKICAgICAgICBjYXNlICd4JzoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5PZmZzZXRNczsKICAgICAgICBjYXNlICdYJzoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5UaW1lc3RhbXBNczsKICAgICAgICBjYXNlICdaJzoKICAgICAgICBjYXNlICdaWic6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRva2VuVGltZXpvbmU7CiAgICAgICAgY2FzZSAnVCc6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRva2VuVDsKICAgICAgICBjYXNlICdTU1NTJzoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5EaWdpdHM7CiAgICAgICAgY2FzZSAnTU0nOgogICAgICAgIGNhc2UgJ0REJzoKICAgICAgICBjYXNlICdZWSc6CiAgICAgICAgY2FzZSAnR0cnOgogICAgICAgIGNhc2UgJ2dnJzoKICAgICAgICBjYXNlICdISCc6CiAgICAgICAgY2FzZSAnaGgnOgogICAgICAgIGNhc2UgJ21tJzoKICAgICAgICBjYXNlICdzcyc6CiAgICAgICAgY2FzZSAnd3cnOgogICAgICAgIGNhc2UgJ1dXJzoKICAgICAgICAgICAgcmV0dXJuIHN0cmljdCA/IHBhcnNlVG9rZW5Ud29EaWdpdHMgOiBwYXJzZVRva2VuT25lT3JUd29EaWdpdHM7CiAgICAgICAgY2FzZSAnTSc6CiAgICAgICAgY2FzZSAnRCc6CiAgICAgICAgY2FzZSAnZCc6CiAgICAgICAgY2FzZSAnSCc6CiAgICAgICAgY2FzZSAnaCc6CiAgICAgICAgY2FzZSAnbSc6CiAgICAgICAgY2FzZSAncyc6CiAgICAgICAgY2FzZSAndyc6CiAgICAgICAgY2FzZSAnVyc6CiAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgY2FzZSAnRSc6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRva2VuT25lT3JUd29EaWdpdHM7CiAgICAgICAgY2FzZSAnRG8nOgogICAgICAgICAgICByZXR1cm4gc3RyaWN0ID8gY29uZmlnLl9sb2NhbGUuX29yZGluYWxQYXJzZSA6IGNvbmZpZy5fbG9jYWxlLl9vcmRpbmFsUGFyc2VMZW5pZW50OwogICAgICAgIGRlZmF1bHQgOgogICAgICAgICAgICBhID0gbmV3IFJlZ0V4cChyZWdleHBFc2NhcGUodW5lc2NhcGVGb3JtYXQodG9rZW4ucmVwbGFjZSgnXFwnLCAnJykpLCAnaScpKTsKICAgICAgICAgICAgcmV0dXJuIGE7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHRpbWV6b25lTWludXRlc0Zyb21TdHJpbmcoc3RyaW5nKSB7CiAgICAgICAgc3RyaW5nID0gc3RyaW5nIHx8ICcnOwogICAgICAgIHZhciBwb3NzaWJsZVR6TWF0Y2hlcyA9IChzdHJpbmcubWF0Y2gocGFyc2VUb2tlblRpbWV6b25lKSB8fCBbXSksCiAgICAgICAgICAgIHR6Q2h1bmsgPSBwb3NzaWJsZVR6TWF0Y2hlc1twb3NzaWJsZVR6TWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXSwKICAgICAgICAgICAgcGFydHMgPSAodHpDaHVuayArICcnKS5tYXRjaChwYXJzZVRpbWV6b25lQ2h1bmtlcikgfHwgWyctJywgMCwgMF0sCiAgICAgICAgICAgIG1pbnV0ZXMgPSArKHBhcnRzWzFdICogNjApICsgdG9JbnQocGFydHNbMl0pOwoKICAgICAgICByZXR1cm4gcGFydHNbMF0gPT09ICcrJyA/IC1taW51dGVzIDogbWludXRlczsKICAgIH0KCiAgICAvLyBmdW5jdGlvbiB0byBjb252ZXJ0IHN0cmluZyBpbnB1dCB0byBkYXRlCiAgICBmdW5jdGlvbiBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgaW5wdXQsIGNvbmZpZykgewogICAgICAgIHZhciBhLCBkYXRlUGFydEFycmF5ID0gY29uZmlnLl9hOwoKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgLy8gUVVBUlRFUgogICAgICAgIGNhc2UgJ1EnOgogICAgICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgZGF0ZVBhcnRBcnJheVtNT05USF0gPSAodG9JbnQoaW5wdXQpIC0gMSkgKiAzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC8vIE1PTlRICiAgICAgICAgY2FzZSAnTScgOiAvLyBmYWxsIHRocm91Z2ggdG8gTU0KICAgICAgICBjYXNlICdNTScgOgogICAgICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgZGF0ZVBhcnRBcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ01NTScgOiAvLyBmYWxsIHRocm91Z2ggdG8gTU1NTQogICAgICAgIGNhc2UgJ01NTU0nIDoKICAgICAgICAgICAgYSA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpOwogICAgICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC4KICAgICAgICAgICAgaWYgKGEgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgZGF0ZVBhcnRBcnJheVtNT05USF0gPSBhOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uZmlnLl9wZi5pbnZhbGlkTW9udGggPSBpbnB1dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAvLyBEQVkgT0YgTU9OVEgKICAgICAgICBjYXNlICdEJyA6IC8vIGZhbGwgdGhyb3VnaCB0byBERAogICAgICAgIGNhc2UgJ0REJyA6CiAgICAgICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBkYXRlUGFydEFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0RvJyA6CiAgICAgICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBkYXRlUGFydEFycmF5W0RBVEVdID0gdG9JbnQocGFyc2VJbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5tYXRjaCgvXGR7MSwyfS8pWzBdLCAxMCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC8vIERBWSBPRiBZRUFSCiAgICAgICAgY2FzZSAnREREJyA6IC8vIGZhbGwgdGhyb3VnaCB0byBERERECiAgICAgICAgY2FzZSAnRERERCcgOgogICAgICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC8vIFlFQVIKICAgICAgICBjYXNlICdZWScgOgogICAgICAgICAgICBkYXRlUGFydEFycmF5W1lFQVJdID0gbW9tZW50LnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnWVlZWScgOgogICAgICAgIGNhc2UgJ1lZWVlZJyA6CiAgICAgICAgY2FzZSAnWVlZWVlZJyA6CiAgICAgICAgICAgIGRhdGVQYXJ0QXJyYXlbWUVBUl0gPSB0b0ludChpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC8vIEFNIC8gUE0KICAgICAgICBjYXNlICdhJyA6IC8vIGZhbGwgdGhyb3VnaCB0byBBCiAgICAgICAgY2FzZSAnQScgOgogICAgICAgICAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgLy8gSE9VUgogICAgICAgIGNhc2UgJ2gnIDogLy8gZmFsbCB0aHJvdWdoIHRvIGhoCiAgICAgICAgY2FzZSAnaGgnIDoKICAgICAgICAgICAgY29uZmlnLl9wZi5iaWdIb3VyID0gdHJ1ZTsKICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgICAgIGNhc2UgJ0gnIDogLy8gZmFsbCB0aHJvdWdoIHRvIEhICiAgICAgICAgY2FzZSAnSEgnIDoKICAgICAgICAgICAgZGF0ZVBhcnRBcnJheVtIT1VSXSA9IHRvSW50KGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgLy8gTUlOVVRFCiAgICAgICAgY2FzZSAnbScgOiAvLyBmYWxsIHRocm91Z2ggdG8gbW0KICAgICAgICBjYXNlICdtbScgOgogICAgICAgICAgICBkYXRlUGFydEFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC8vIFNFQ09ORAogICAgICAgIGNhc2UgJ3MnIDogLy8gZmFsbCB0aHJvdWdoIHRvIHNzCiAgICAgICAgY2FzZSAnc3MnIDoKICAgICAgICAgICAgZGF0ZVBhcnRBcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAvLyBNSUxMSVNFQ09ORAogICAgICAgIGNhc2UgJ1MnIDoKICAgICAgICBjYXNlICdTUycgOgogICAgICAgIGNhc2UgJ1NTUycgOgogICAgICAgIGNhc2UgJ1NTU1MnIDoKICAgICAgICAgICAgZGF0ZVBhcnRBcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAvLyBVTklYIE9GRlNFVCAoTUlMTElTRUNPTkRTKQogICAgICAgIGNhc2UgJ3gnOgogICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAvLyBVTklYIFRJTUVTVEFNUCBXSVRIIE1TCiAgICAgICAgY2FzZSAnWCc6CiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC8vIFRJTUVaT05FCiAgICAgICAgY2FzZSAnWicgOiAvLyBmYWxsIHRocm91Z2ggdG8gWloKICAgICAgICBjYXNlICdaWicgOgogICAgICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7CiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gdGltZXpvbmVNaW51dGVzRnJvbVN0cmluZyhpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC8vIFdFRUtEQVkgLSBodW1hbgogICAgICAgIGNhc2UgJ2RkJzoKICAgICAgICBjYXNlICdkZGQnOgogICAgICAgIGNhc2UgJ2RkZGQnOgogICAgICAgICAgICBhID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7CiAgICAgICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZAogICAgICAgICAgICBpZiAoYSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307CiAgICAgICAgICAgICAgICBjb25maWcuX3dbJ2QnXSA9IGE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25maWcuX3BmLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgLy8gV0VFSywgV0VFSyBEQVkgLSBudW1lcmljCiAgICAgICAgY2FzZSAndyc6CiAgICAgICAgY2FzZSAnd3cnOgogICAgICAgIGNhc2UgJ1cnOgogICAgICAgIGNhc2UgJ1dXJzoKICAgICAgICBjYXNlICdkJzoKICAgICAgICBjYXNlICdlJzoKICAgICAgICBjYXNlICdFJzoKICAgICAgICAgICAgdG9rZW4gPSB0b2tlbi5zdWJzdHIoMCwgMSk7CiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgICAgICBjYXNlICdnZ2dnJzoKICAgICAgICBjYXNlICdHR0dHJzoKICAgICAgICBjYXNlICdHR0dHRyc6CiAgICAgICAgICAgIHRva2VuID0gdG9rZW4uc3Vic3RyKDAsIDIpOwogICAgICAgICAgICBpZiAoaW5wdXQpIHsKICAgICAgICAgICAgICAgIGNvbmZpZy5fdyA9IGNvbmZpZy5fdyB8fCB7fTsKICAgICAgICAgICAgICAgIGNvbmZpZy5fd1t0b2tlbl0gPSB0b0ludChpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZ2cnOgogICAgICAgIGNhc2UgJ0dHJzoKICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9OwogICAgICAgICAgICBjb25maWcuX3dbdG9rZW5dID0gbW9tZW50LnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykgewogICAgICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXA7CgogICAgICAgIHcgPSBjb25maWcuX3c7CiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkgewogICAgICAgICAgICBkb3cgPSAxOwogICAgICAgICAgICBkb3kgPSA0OwoKICAgICAgICAgICAgLy8gVE9ETzogV2UgbmVlZCB0byB0YWtlIHRoZSBjdXJyZW50IGlzb1dlZWtZZWFyLCBidXQgdGhhdCBkZXBlbmRzIG9uCiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGUKICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmQKICAgICAgICAgICAgLy8gY3JlYXRlIG5vdykuCiAgICAgICAgICAgIHdlZWtZZWFyID0gZGZsKHcuR0csIGNvbmZpZy5fYVtZRUFSXSwgd2Vla09mWWVhcihtb21lbnQoKSwgMSwgNCkueWVhcik7CiAgICAgICAgICAgIHdlZWsgPSBkZmwody5XLCAxKTsKICAgICAgICAgICAgd2Vla2RheSA9IGRmbCh3LkUsIDEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdzsKICAgICAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95OwoKICAgICAgICAgICAgd2Vla1llYXIgPSBkZmwody5nZywgY29uZmlnLl9hW1lFQVJdLCB3ZWVrT2ZZZWFyKG1vbWVudCgpLCBkb3csIGRveSkueWVhcik7CiAgICAgICAgICAgIHdlZWsgPSBkZmwody53LCAxKTsKCiAgICAgICAgICAgIGlmICh3LmQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrCiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5kOwogICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCBkb3cpIHsKICAgICAgICAgICAgICAgICAgICArK3dlZWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAody5lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5pbmcgb2Ygd2VlawogICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZSArIGRvdzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5pbmcgb2Ygd2VlawogICAgICAgICAgICAgICAgd2Vla2RheSA9IGRvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0ZW1wID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3ksIGRvdyk7CgogICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjsKICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRlbXAuZGF5T2ZZZWFyOwogICAgfQoKICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLgogICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3cKICAgIC8vIG5vdGU6IGFsbCB2YWx1ZXMgcGFzdCB0aGUgeWVhciBhcmUgb3B0aW9uYWwgYW5kIHdpbGwgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlLgogICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdCiAgICBmdW5jdGlvbiBkYXRlRnJvbUNvbmZpZyhjb25maWcpIHsKICAgICAgICB2YXIgaSwgZGF0ZSwgaW5wdXQgPSBbXSwgY3VycmVudERhdGUsIHllYXJUb1VzZTsKCiAgICAgICAgaWYgKGNvbmZpZy5fZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTsKCiAgICAgICAgLy9jb21wdXRlIGRheSBvZiB0aGUgeWVhciBmcm9tIHdlZWtzIGFuZCB3ZWVrZGF5cwogICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7CiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpOwogICAgICAgIH0KCiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzCiAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyKSB7CiAgICAgICAgICAgIHllYXJUb1VzZSA9IGRmbChjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTsKCiAgICAgICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSkgewogICAgICAgICAgICAgICAgY29uZmlnLl9wZi5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkYXRlID0gbWFrZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7CiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7CiAgICAgICAgICAgIGNvbmZpZy5fYVtEQVRFXSA9IGRhdGUuZ2V0VVRDRGF0ZSgpOwogICAgICAgIH0KCiAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IGRhdGUuCiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheQogICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyCiAgICAgICAgLy8gKiBpZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBvbmx5IHllYXIKICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmcKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7CiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gY3VycmVudERhdGVbaV07CiAgICAgICAgfQoKICAgICAgICAvLyBaZXJvIG91dCB3aGF0ZXZlciB3YXMgbm90IGRlZmF1bHRlZCwgaW5jbHVkaW5nIHRpbWUKICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykgewogICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IChjb25maWcuX2FbaV0gPT0gbnVsbCkgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDAKICAgICAgICBpZiAoY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJgogICAgICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiYKICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmCiAgICAgICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwKSB7CiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7CiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7CiAgICAgICAgfQoKICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBtYWtlVVRDRGF0ZSA6IG1ha2VEYXRlKS5hcHBseShudWxsLCBpbnB1dCk7CiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgem9uZSBjYW4gYmUgY2hhbmdlZAogICAgICAgIC8vIHdpdGggcGFyc2Vab25lLgogICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7CiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgKyBjb25maWcuX3R6bSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uZmlnLl9uZXh0RGF5KSB7CiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0OwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBkYXRlRnJvbU9iamVjdChjb25maWcpIHsKICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0OwoKICAgICAgICBpZiAoY29uZmlnLl9kKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGNvbmZpZy5faSk7CiAgICAgICAgY29uZmlnLl9hID0gWwogICAgICAgICAgICBub3JtYWxpemVkSW5wdXQueWVhciwKICAgICAgICAgICAgbm9ybWFsaXplZElucHV0Lm1vbnRoLAogICAgICAgICAgICBub3JtYWxpemVkSW5wdXQuZGF5IHx8IG5vcm1hbGl6ZWRJbnB1dC5kYXRlLAogICAgICAgICAgICBub3JtYWxpemVkSW5wdXQuaG91ciwKICAgICAgICAgICAgbm9ybWFsaXplZElucHV0Lm1pbnV0ZSwKICAgICAgICAgICAgbm9ybWFsaXplZElucHV0LnNlY29uZCwKICAgICAgICAgICAgbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kCiAgICAgICAgXTsKCiAgICAgICAgZGF0ZUZyb21Db25maWcoY29uZmlnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykgewogICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOwogICAgICAgIGlmIChjb25maWcuX3VzZVVUQykgewogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgbm93LmdldFVUQ0Z1bGxZZWFyKCksCiAgICAgICAgICAgICAgICBub3cuZ2V0VVRDTW9udGgoKSwKICAgICAgICAgICAgICAgIG5vdy5nZXRVVENEYXRlKCkKICAgICAgICAgICAgXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gW25vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbm93LmdldERhdGUoKV07CiAgICAgICAgfQogICAgfQoKICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmcKICAgIGZ1bmN0aW9uIG1ha2VEYXRlRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpIHsKICAgICAgICBpZiAoY29uZmlnLl9mID09PSBtb21lbnQuSVNPXzg2MDEpIHsKICAgICAgICAgICAgcGFyc2VJU08oY29uZmlnKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgY29uZmlnLl9hID0gW107CiAgICAgICAgY29uZmlnLl9wZi5lbXB0eSA9IHRydWU7CgogICAgICAgIC8vIFRoaXMgYXJyYXkgaXMgdXNlZCB0byBtYWtlIGEgRGF0ZSwgZWl0aGVyIHdpdGggYG5ldyBEYXRlYCBvciBgRGF0ZS5VVENgCiAgICAgICAgdmFyIHN0cmluZyA9ICcnICsgY29uZmlnLl9pLAogICAgICAgICAgICBpLCBwYXJzZWRJbnB1dCwgdG9rZW5zLCB0b2tlbiwgc2tpcHBlZCwKICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCwKICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDA7CgogICAgICAgIHRva2VucyA9IGV4cGFuZEZvcm1hdChjb25maWcuX2YsIGNvbmZpZy5fbG9jYWxlKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSB8fCBbXTsKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgcGFyc2VkSW5wdXQgPSAoc3RyaW5nLm1hdGNoKGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSkgfHwgW10pWzBdOwogICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHsKICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7CiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9wZi51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuCiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHsKICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkgewogICAgICAgICAgICAgICAgICAgIGNvbmZpZy5fcGYuZW1wdHkgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGNvbmZpZy5fcGYudW51c2VkVG9rZW5zLnB1c2godG9rZW4pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIHBhcnNlZElucHV0LCBjb25maWcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkgewogICAgICAgICAgICAgICAgY29uZmlnLl9wZi51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmcKICAgICAgICBjb25maWcuX3BmLmNoYXJzTGVmdE92ZXIgPSBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoOwogICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25maWcuX3BmLnVudXNlZElucHV0LnB1c2goc3RyaW5nKTsKICAgICAgICB9CgogICAgICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyCiAgICAgICAgaWYgKGNvbmZpZy5fcGYuYmlnSG91ciA9PT0gdHJ1ZSAmJiBjb25maWcuX2FbSE9VUl0gPD0gMTIpIHsKICAgICAgICAgICAgY29uZmlnLl9wZi5iaWdIb3VyID0gdW5kZWZpbmVkOwogICAgICAgIH0KICAgICAgICAvLyBoYW5kbGUgYW0gcG0KICAgICAgICBpZiAoY29uZmlnLl9pc1BtICYmIGNvbmZpZy5fYVtIT1VSXSA8IDEyKSB7CiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSArPSAxMjsKICAgICAgICB9CiAgICAgICAgLy8gaWYgaXMgMTIgYW0sIGNoYW5nZSBob3VycyB0byAwCiAgICAgICAgaWYgKGNvbmZpZy5faXNQbSA9PT0gZmFsc2UgJiYgY29uZmlnLl9hW0hPVVJdID09PSAxMikgewogICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwOwogICAgICAgIH0KICAgICAgICBkYXRlRnJvbUNvbmZpZyhjb25maWcpOwogICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTsKICAgIH0KCiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7CiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXFwoXFspfFxcKFxdKXxcWyhbXlxdXFtdKilcXXxcXCguKS9nLCBmdW5jdGlvbiAobWF0Y2hlZCwgcDEsIHAyLCBwMywgcDQpIHsKICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0OwogICAgICAgIH0pOwogICAgfQoKICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHQKICAgIGZ1bmN0aW9uIHJlZ2V4cEVzY2FwZShzKSB7CiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cL1xcXiQqKz8uKCl8W1xde31dL2csICdcXCQmJyk7CiAgICB9CgogICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3MKICAgIGZ1bmN0aW9uIG1ha2VEYXRlRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZykgewogICAgICAgIHZhciB0ZW1wQ29uZmlnLAogICAgICAgICAgICBiZXN0TW9tZW50LAoKICAgICAgICAgICAgc2NvcmVUb0JlYXQsCiAgICAgICAgICAgIGksCiAgICAgICAgICAgIGN1cnJlbnRTY29yZTsKCiAgICAgICAgaWYgKGNvbmZpZy5fZi5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgY29uZmlnLl9wZi5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTsKICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZy5fZi5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBjdXJyZW50U2NvcmUgPSAwOwogICAgICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTsKICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRlbXBDb25maWcuX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpOwogICAgICAgICAgICB0ZW1wQ29uZmlnLl9mID0gY29uZmlnLl9mW2ldOwogICAgICAgICAgICBtYWtlRGF0ZUZyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7CgogICAgICAgICAgICBpZiAoIWlzVmFsaWQodGVtcENvbmZpZykpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdAogICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gdGVtcENvbmZpZy5fcGYuY2hhcnNMZWZ0T3ZlcjsKCiAgICAgICAgICAgIC8vb3IgdG9rZW5zCiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSB0ZW1wQ29uZmlnLl9wZi51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7CgogICAgICAgICAgICB0ZW1wQ29uZmlnLl9wZi5zY29yZSA9IGN1cnJlbnRTY29yZTsKCiAgICAgICAgICAgIGlmIChzY29yZVRvQmVhdCA9PSBudWxsIHx8IGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7CiAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTsKICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpOwogICAgfQoKICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0CiAgICBmdW5jdGlvbiBwYXJzZUlTTyhjb25maWcpIHsKICAgICAgICB2YXIgaSwgbCwKICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLAogICAgICAgICAgICBtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoc3RyaW5nKTsKCiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGNvbmZpZy5fcGYuaXNvID0gdHJ1ZTsKICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb0RhdGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMoc3RyaW5nKSkgewogICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzVdIHNob3VsZCBiZSAnVCcgb3IgdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9mID0gaXNvRGF0ZXNbaV1bMF0gKyAobWF0Y2hbNl0gfHwgJyAnKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhzdHJpbmcpKSB7CiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9mICs9IGlzb1RpbWVzW2ldWzBdOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdHJpbmcubWF0Y2gocGFyc2VUb2tlblRpbWV6b25lKSkgewogICAgICAgICAgICAgICAgY29uZmlnLl9mICs9ICdaJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBtYWtlRGF0ZUZyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXQgb3IgZmFsbGJhY2sKICAgIGZ1bmN0aW9uIG1ha2VEYXRlRnJvbVN0cmluZyhjb25maWcpIHsKICAgICAgICBwYXJzZUlTTyhjb25maWcpOwogICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7CiAgICAgICAgICAgIG1vbWVudC5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikgewogICAgICAgIHZhciByZXMgPSBbXSwgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIHJlcy5wdXNoKGZuKGFycltpXSwgaSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgfQoKICAgIGZ1bmN0aW9uIG1ha2VEYXRlRnJvbUlucHV0KGNvbmZpZykgewogICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faSwgbWF0Y2hlZDsKICAgICAgICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgpOwogICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkgewogICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgraW5wdXQpOwogICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhpbnB1dCkpICE9PSBudWxsKSB7CiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgbWFrZURhdGVGcm9tU3RyaW5nKGNvbmZpZyk7CiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkgewogICAgICAgICAgICBjb25maWcuX2EgPSBtYXAoaW5wdXQuc2xpY2UoMCksIGZ1bmN0aW9uIChvYmopIHsKICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmosIDEwKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGRhdGVGcm9tQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YoaW5wdXQpID09PSAnb2JqZWN0JykgewogICAgICAgICAgICBkYXRlRnJvbU9iamVjdChjb25maWcpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGlucHV0KSA9PT0gJ251bWJlcicpIHsKICAgICAgICAgICAgLy8gZnJvbSBtaWxsaXNlY29uZHMKICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1vbWVudC5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBtYWtlRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcykgewogICAgICAgIC8vY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6CiAgICAgICAgLy9odHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4MTM0OC9pbnN0YW50aWF0aW5nLWEtamF2YXNjcmlwdC1vYmplY3QtYnktY2FsbGluZy1wcm90b3R5cGUtY29uc3RydWN0b3ItYXBwbHkKICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTsKCiAgICAgICAgLy90aGUgZGF0ZSBjb25zdHJ1Y3RvciBkb2Vzbid0IGFjY2VwdCB5ZWFycyA8IDE5NzAKICAgICAgICBpZiAoeSA8IDE5NzApIHsKICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICB9CgogICAgZnVuY3Rpb24gbWFrZVVUQ0RhdGUoeSkgewogICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7CiAgICAgICAgaWYgKHkgPCAxOTcwKSB7CiAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkYXRlOwogICAgfQoKICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7CiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHsKICAgICAgICAgICAgICAgIGlucHV0ID0gcGFyc2VJbnQoaW5wdXQsIDEwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlucHV0ID0gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ251bWJlcicpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CgogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgIFJlbGF0aXZlIFRpbWUKICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgogICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemUKICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVUaW1lQWdvKHN0cmluZywgbnVtYmVyLCB3aXRob3V0U3VmZml4LCBpc0Z1dHVyZSwgbG9jYWxlKSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCBsb2NhbGUpIHsKICAgICAgICB2YXIgZHVyYXRpb24gPSBtb21lbnQuZHVyYXRpb24ocG9zTmVnRHVyYXRpb24pLmFicygpLAogICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksCiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSwKICAgICAgICAgICAgaG91cnMgPSByb3VuZChkdXJhdGlvbi5hcygnaCcpKSwKICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLAogICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSwKICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSwKCiAgICAgICAgICAgIGFyZ3MgPSBzZWNvbmRzIDwgcmVsYXRpdmVUaW1lVGhyZXNob2xkcy5zICYmIFsncycsIHNlY29uZHNdIHx8CiAgICAgICAgICAgICAgICBtaW51dGVzID09PSAxICYmIFsnbSddIHx8CiAgICAgICAgICAgICAgICBtaW51dGVzIDwgcmVsYXRpdmVUaW1lVGhyZXNob2xkcy5tICYmIFsnbW0nLCBtaW51dGVzXSB8fAogICAgICAgICAgICAgICAgaG91cnMgPT09IDEgJiYgWydoJ10gfHwKICAgICAgICAgICAgICAgIGhvdXJzIDwgcmVsYXRpdmVUaW1lVGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10gfHwKICAgICAgICAgICAgICAgIGRheXMgPT09IDEgJiYgWydkJ10gfHwKICAgICAgICAgICAgICAgIGRheXMgPCByZWxhdGl2ZVRpbWVUaHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdIHx8CiAgICAgICAgICAgICAgICBtb250aHMgPT09IDEgJiYgWydNJ10gfHwKICAgICAgICAgICAgICAgIG1vbnRocyA8IHJlbGF0aXZlVGltZVRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSB8fAogICAgICAgICAgICAgICAgeWVhcnMgPT09IDEgJiYgWyd5J10gfHwgWyd5eScsIHllYXJzXTsKCiAgICAgICAgYXJnc1syXSA9IHdpdGhvdXRTdWZmaXg7CiAgICAgICAgYXJnc1szXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7CiAgICAgICAgYXJnc1s0XSA9IGxvY2FsZTsKICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZVRpbWVBZ28uYXBwbHkoe30sIGFyZ3MpOwogICAgfQoKCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgV2VlayBvZiBZZWFyCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKICAgIC8vIGZpcnN0RGF5T2ZXZWVrICAgICAgIDAgPSBzdW4sIDYgPSBzYXQKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHRoZSBkYXkgb2YgdGhlIHdlZWsgdGhhdCBzdGFydHMgdGhlIHdlZWsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICh1c3VhbGx5IHN1bmRheSBvciBtb25kYXkpCiAgICAvLyBmaXJzdERheU9mV2Vla09mWWVhciAwID0gc3VuLCA2ID0gc2F0CiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3Qgd2VlayBpcyB0aGUgd2VlayB0aGF0IGNvbnRhaW5zIHRoZSBmaXJzdAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgb2YgdGhpcyBkYXkgb2YgdGhlIHdlZWsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIChlZy4gSVNPIHdlZWtzIHVzZSB0aHVyc2RheSAoNCkpCiAgICBmdW5jdGlvbiB3ZWVrT2ZZZWFyKG1vbSwgZmlyc3REYXlPZldlZWssIGZpcnN0RGF5T2ZXZWVrT2ZZZWFyKSB7CiAgICAgICAgdmFyIGVuZCA9IGZpcnN0RGF5T2ZXZWVrT2ZZZWFyIC0gZmlyc3REYXlPZldlZWssCiAgICAgICAgICAgIGRheXNUb0RheU9mV2VlayA9IGZpcnN0RGF5T2ZXZWVrT2ZZZWFyIC0gbW9tLmRheSgpLAogICAgICAgICAgICBhZGp1c3RlZE1vbWVudDsKCgogICAgICAgIGlmIChkYXlzVG9EYXlPZldlZWsgPiBlbmQpIHsKICAgICAgICAgICAgZGF5c1RvRGF5T2ZXZWVrIC09IDc7CiAgICAgICAgfQoKICAgICAgICBpZiAoZGF5c1RvRGF5T2ZXZWVrIDwgZW5kIC0gNykgewogICAgICAgICAgICBkYXlzVG9EYXlPZldlZWsgKz0gNzsKICAgICAgICB9CgogICAgICAgIGFkanVzdGVkTW9tZW50ID0gbW9tZW50KG1vbSkuYWRkKGRheXNUb0RheU9mV2VlaywgJ2QnKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICB3ZWVrOiBNYXRoLmNlaWwoYWRqdXN0ZWRNb21lbnQuZGF5T2ZZZWFyKCkgLyA3KSwKICAgICAgICAgICAgeWVhcjogYWRqdXN0ZWRNb21lbnQueWVhcigpCiAgICAgICAgfTsKICAgIH0KCiAgICAvL2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXkKICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBmaXJzdERheU9mV2Vla09mWWVhciwgZmlyc3REYXlPZldlZWspIHsKICAgICAgICB2YXIgZCA9IG1ha2VVVENEYXRlKHllYXIsIDAsIDEpLmdldFVUQ0RheSgpLCBkYXlzVG9BZGQsIGRheU9mWWVhcjsKCiAgICAgICAgZCA9IGQgPT09IDAgPyA3IDogZDsKICAgICAgICB3ZWVrZGF5ID0gd2Vla2RheSAhPSBudWxsID8gd2Vla2RheSA6IGZpcnN0RGF5T2ZXZWVrOwogICAgICAgIGRheXNUb0FkZCA9IGZpcnN0RGF5T2ZXZWVrIC0gZCArIChkID4gZmlyc3REYXlPZldlZWtPZlllYXIgPyA3IDogMCkgLSAoZCA8IGZpcnN0RGF5T2ZXZWVrID8gNyA6IDApOwogICAgICAgIGRheU9mWWVhciA9IDcgKiAod2VlayAtIDEpICsgKHdlZWtkYXkgLSBmaXJzdERheU9mV2VlaykgKyBkYXlzVG9BZGQgKyAxOwoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICB5ZWFyOiBkYXlPZlllYXIgPiAwID8geWVhciA6IHllYXIgLSAxLAogICAgICAgICAgICBkYXlPZlllYXI6IGRheU9mWWVhciA+IDAgPyAgZGF5T2ZZZWFyIDogZGF5c0luWWVhcih5ZWFyIC0gMSkgKyBkYXlPZlllYXIKICAgICAgICB9OwogICAgfQoKICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICBUb3AgTGV2ZWwgRnVuY3Rpb25zCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgZnVuY3Rpb24gbWFrZU1vbWVudChjb25maWcpIHsKICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksCiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZiwKICAgICAgICAgICAgcmVzOwoKICAgICAgICBjb25maWcuX2xvY2FsZSA9IGNvbmZpZy5fbG9jYWxlIHx8IG1vbWVudC5sb2NhbGVEYXRhKGNvbmZpZy5fbCk7CgogICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkgewogICAgICAgICAgICByZXR1cm4gbW9tZW50LmludmFsaWQoe251bGxJbnB1dDogdHJ1ZX0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgY29uZmlnLl9pID0gaW5wdXQgPSBjb25maWcuX2xvY2FsZS5wcmVwYXJzZShpbnB1dCk7CiAgICAgICAgfQoKICAgICAgICBpZiAobW9tZW50LmlzTW9tZW50KGlucHV0KSkgewogICAgICAgICAgICByZXR1cm4gbmV3IE1vbWVudChpbnB1dCwgdHJ1ZSk7CiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQpIHsKICAgICAgICAgICAgaWYgKGlzQXJyYXkoZm9ybWF0KSkgewogICAgICAgICAgICAgICAgbWFrZURhdGVGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1ha2VEYXRlRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWFrZURhdGVGcm9tSW5wdXQoY29uZmlnKTsKICAgICAgICB9CgogICAgICAgIHJlcyA9IG5ldyBNb21lbnQoY29uZmlnKTsKICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7CiAgICAgICAgICAgIC8vIEFkZGluZyBpcyBzbWFydCBlbm91Z2ggYXJvdW5kIERTVAogICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7CiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXM7CiAgICB9CgogICAgbW9tZW50ID0gZnVuY3Rpb24gKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7CiAgICAgICAgdmFyIGM7CgogICAgICAgIGlmICh0eXBlb2YobG9jYWxlKSA9PT0gJ2Jvb2xlYW4nKSB7CiAgICAgICAgICAgIHN0cmljdCA9IGxvY2FsZTsKICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkOwogICAgICAgIH0KICAgICAgICAvLyBvYmplY3QgY29uc3RydWN0aW9uIG11c3QgYmUgZG9uZSB0aGlzIHdheS4KICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyMwogICAgICAgIGMgPSB7fTsKICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlOwogICAgICAgIGMuX2kgPSBpbnB1dDsKICAgICAgICBjLl9mID0gZm9ybWF0OwogICAgICAgIGMuX2wgPSBsb2NhbGU7CiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0OwogICAgICAgIGMuX2lzVVRDID0gZmFsc2U7CiAgICAgICAgYy5fcGYgPSBkZWZhdWx0UGFyc2luZ0ZsYWdzKCk7CgogICAgICAgIHJldHVybiBtYWtlTW9tZW50KGMpOwogICAgfTsKCiAgICBtb21lbnQuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7CgogICAgbW9tZW50LmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKAogICAgICAgICdtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZS4gVGhpcyBpcyAnICsKICAgICAgICAnZGlzY291cmFnZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB1cGNvbWluZyBtYWpvciAnICsKICAgICAgICAncmVsZWFzZS4gUGxlYXNlIHJlZmVyIHRvICcgKwogICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQwNyBmb3IgbW9yZSBpbmZvLicsCiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykgewogICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpOwogICAgICAgIH0KICAgICk7CgogICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGwKICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS4KICAgIC8vCiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlCiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLgogICAgZnVuY3Rpb24gcGlja0J5KGZuLCBtb21lbnRzKSB7CiAgICAgICAgdmFyIHJlcywgaTsKICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkgewogICAgICAgICAgICBtb21lbnRzID0gbW9tZW50c1swXTsKICAgICAgICB9CiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gbW9tZW50KCk7CiAgICAgICAgfQogICAgICAgIHJlcyA9IG1vbWVudHNbMF07CiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgaWYgKG1vbWVudHNbaV1bZm5dKHJlcykpIHsKICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlczsKICAgIH0KCiAgICBtb21lbnQubWluID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwoKICAgICAgICByZXR1cm4gcGlja0J5KCdpc0JlZm9yZScsIGFyZ3MpOwogICAgfTsKCiAgICBtb21lbnQubWF4ID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwoKICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7CiAgICB9OwoKICAgIC8vIGNyZWF0aW5nIHdpdGggdXRjCiAgICBtb21lbnQudXRjID0gZnVuY3Rpb24gKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7CiAgICAgICAgdmFyIGM7CgogICAgICAgIGlmICh0eXBlb2YobG9jYWxlKSA9PT0gJ2Jvb2xlYW4nKSB7CiAgICAgICAgICAgIHN0cmljdCA9IGxvY2FsZTsKICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkOwogICAgICAgIH0KICAgICAgICAvLyBvYmplY3QgY29uc3RydWN0aW9uIG11c3QgYmUgZG9uZSB0aGlzIHdheS4KICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyMwogICAgICAgIGMgPSB7fTsKICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlOwogICAgICAgIGMuX3VzZVVUQyA9IHRydWU7CiAgICAgICAgYy5faXNVVEMgPSB0cnVlOwogICAgICAgIGMuX2wgPSBsb2NhbGU7CiAgICAgICAgYy5faSA9IGlucHV0OwogICAgICAgIGMuX2YgPSBmb3JtYXQ7CiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0OwogICAgICAgIGMuX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpOwoKICAgICAgICByZXR1cm4gbWFrZU1vbWVudChjKS51dGMoKTsKICAgIH07CgogICAgLy8gY3JlYXRpbmcgd2l0aCB1bml4IHRpbWVzdGFtcCAoaW4gc2Vjb25kcykKICAgIG1vbWVudC51bml4ID0gZnVuY3Rpb24gKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIG1vbWVudChpbnB1dCAqIDEwMDApOwogICAgfTsKCiAgICAvLyBkdXJhdGlvbgogICAgbW9tZW50LmR1cmF0aW9uID0gZnVuY3Rpb24gKGlucHV0LCBrZXkpIHsKICAgICAgICB2YXIgZHVyYXRpb24gPSBpbnB1dCwKICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmQKICAgICAgICAgICAgbWF0Y2ggPSBudWxsLAogICAgICAgICAgICBzaWduLAogICAgICAgICAgICByZXQsCiAgICAgICAgICAgIHBhcnNlSXNvLAogICAgICAgICAgICBkaWZmUmVzOwoKICAgICAgICBpZiAobW9tZW50LmlzRHVyYXRpb24oaW5wdXQpKSB7CiAgICAgICAgICAgIGR1cmF0aW9uID0gewogICAgICAgICAgICAgICAgbXM6IGlucHV0Ll9taWxsaXNlY29uZHMsCiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cywKICAgICAgICAgICAgICAgIE06IGlucHV0Ll9tb250aHMKICAgICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHsKICAgICAgICAgICAgZHVyYXRpb24gPSB7fTsKICAgICAgICAgICAgaWYgKGtleSkgewogICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9IGlucHV0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gaW5wdXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKCEhKG1hdGNoID0gYXNwTmV0VGltZVNwYW5Kc29uUmVnZXguZXhlYyhpbnB1dCkpKSB7CiAgICAgICAgICAgIHNpZ24gPSAobWF0Y2hbMV0gPT09ICctJykgPyAtMSA6IDE7CiAgICAgICAgICAgIGR1cmF0aW9uID0gewogICAgICAgICAgICAgICAgeTogMCwKICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sCiAgICAgICAgICAgICAgICBoOiB0b0ludChtYXRjaFtIT1VSXSkgKiBzaWduLAogICAgICAgICAgICAgICAgbTogdG9JbnQobWF0Y2hbTUlOVVRFXSkgKiBzaWduLAogICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLAogICAgICAgICAgICAgICAgbXM6IHRvSW50KG1hdGNoW01JTExJU0VDT05EXSkgKiBzaWduCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIGlmICghIShtYXRjaCA9IGlzb0R1cmF0aW9uUmVnZXguZXhlYyhpbnB1dCkpKSB7CiAgICAgICAgICAgIHNpZ24gPSAobWF0Y2hbMV0gPT09ICctJykgPyAtMSA6IDE7CiAgICAgICAgICAgIHBhcnNlSXNvID0gZnVuY3Rpb24gKGlucCkgewogICAgICAgICAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc28KICAgICAgICAgICAgICAgIC8vIGNvbnZlcnRzIGZsb2F0cyB0byBpbnRzLgogICAgICAgICAgICAgICAgLy8gaW5wIG1heSBiZSB1bmRlZmluZWQsIHNvIGNhcmVmdWwgY2FsbGluZyByZXBsYWNlIG9uIGl0LgogICAgICAgICAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7CiAgICAgICAgICAgICAgICAvLyBhcHBseSBzaWduIHdoaWxlIHdlJ3JlIGF0IGl0CiAgICAgICAgICAgICAgICByZXR1cm4gKGlzTmFOKHJlcykgPyAwIDogcmVzKSAqIHNpZ247CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGR1cmF0aW9uID0gewogICAgICAgICAgICAgICAgeTogcGFyc2VJc28obWF0Y2hbMl0pLAogICAgICAgICAgICAgICAgTTogcGFyc2VJc28obWF0Y2hbM10pLAogICAgICAgICAgICAgICAgZDogcGFyc2VJc28obWF0Y2hbNF0pLAogICAgICAgICAgICAgICAgaDogcGFyc2VJc28obWF0Y2hbNV0pLAogICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbNl0pLAogICAgICAgICAgICAgICAgczogcGFyc2VJc28obWF0Y2hbN10pLAogICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbOF0pCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmCiAgICAgICAgICAgICAgICAoJ2Zyb20nIGluIGR1cmF0aW9uIHx8ICd0bycgaW4gZHVyYXRpb24pKSB7CiAgICAgICAgICAgIGRpZmZSZXMgPSBtb21lbnRzRGlmZmVyZW5jZShtb21lbnQoZHVyYXRpb24uZnJvbSksIG1vbWVudChkdXJhdGlvbi50bykpOwoKICAgICAgICAgICAgZHVyYXRpb24gPSB7fTsKICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kczsKICAgICAgICAgICAgZHVyYXRpb24uTSA9IGRpZmZSZXMubW9udGhzOwogICAgICAgIH0KCiAgICAgICAgcmV0ID0gbmV3IER1cmF0aW9uKGR1cmF0aW9uKTsKCiAgICAgICAgaWYgKG1vbWVudC5pc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2xvY2FsZScpKSB7CiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXQ7CiAgICB9OwoKICAgIC8vIHZlcnNpb24gbnVtYmVyCiAgICBtb21lbnQudmVyc2lvbiA9IFZFUlNJT047CgogICAgLy8gZGVmYXVsdCBmb3JtYXQKICAgIG1vbWVudC5kZWZhdWx0Rm9ybWF0ID0gaXNvRm9ybWF0OwoKICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmQKICAgIG1vbWVudC5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9OwoKICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSwKICAgIC8vIHNvIHdlIGNhbiBwcm9wZXJseSBjbG9uZSBvdXJzZWx2ZXMuCiAgICBtb21lbnQubW9tZW50UHJvcGVydGllcyA9IG1vbWVudFByb3BlcnRpZXM7CgogICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG1vbWVudCBpcyBtdXRhdGVkLgogICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuCiAgICBtb21lbnQudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307CgogICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzCiAgICBtb21lbnQucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZnVuY3Rpb24gKHRocmVzaG9sZCwgbGltaXQpIHsKICAgICAgICBpZiAocmVsYXRpdmVUaW1lVGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByZXR1cm4gcmVsYXRpdmVUaW1lVGhyZXNob2xkc1t0aHJlc2hvbGRdOwogICAgICAgIH0KICAgICAgICByZWxhdGl2ZVRpbWVUaHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgbW9tZW50LmxhbmcgPSBkZXByZWNhdGUoCiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJywKICAgICAgICBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbW9tZW50LmxvY2FsZShrZXksIHZhbHVlKTsKICAgICAgICB9CiAgICApOwoKICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZgogICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWwKICAgIC8vIGxvY2FsZSBrZXkuCiAgICBtb21lbnQubG9jYWxlID0gZnVuY3Rpb24gKGtleSwgdmFsdWVzKSB7CiAgICAgICAgdmFyIGRhdGE7CiAgICAgICAgaWYgKGtleSkgewogICAgICAgICAgICBpZiAodHlwZW9mKHZhbHVlcykgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICBkYXRhID0gbW9tZW50LmRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBkYXRhID0gbW9tZW50LmxvY2FsZURhdGEoa2V5KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgICAgIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbW9tZW50Ll9sb2NhbGUuX2FiYnI7CiAgICB9OwoKICAgIG1vbWVudC5kZWZpbmVMb2NhbGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWVzKSB7CiAgICAgICAgaWYgKHZhbHVlcyAhPT0gbnVsbCkgewogICAgICAgICAgICB2YWx1ZXMuYWJiciA9IG5hbWU7CiAgICAgICAgICAgIGlmICghbG9jYWxlc1tuYW1lXSkgewogICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsb2NhbGVzW25hbWVdLnNldCh2YWx1ZXMpOwoKICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlCiAgICAgICAgICAgIG1vbWVudC5sb2NhbGUobmFtZSk7CgogICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmcKICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH07CgogICAgbW9tZW50LmxhbmdEYXRhID0gZGVwcmVjYXRlKAogICAgICAgICdtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuJywKICAgICAgICBmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgICAgIHJldHVybiBtb21lbnQubG9jYWxlRGF0YShrZXkpOwogICAgICAgIH0KICAgICk7CgogICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YQogICAgbW9tZW50LmxvY2FsZURhdGEgPSBmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgdmFyIGxvY2FsZTsKCiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikgewogICAgICAgICAgICBrZXkgPSBrZXkuX2xvY2FsZS5fYWJicjsKICAgICAgICB9CgogICAgICAgIGlmICgha2V5KSB7CiAgICAgICAgICAgIHJldHVybiBtb21lbnQuX2xvY2FsZTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7CiAgICAgICAgICAgIC8vc2hvcnQtY2lyY3VpdCBldmVyeXRoaW5nIGVsc2UKICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpOwogICAgICAgICAgICBpZiAobG9jYWxlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGtleSA9IFtrZXldOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpOwogICAgfTsKCiAgICAvLyBjb21wYXJlIG1vbWVudCBvYmplY3QKICAgIG1vbWVudC5pc01vbWVudCA9IGZ1bmN0aW9uIChvYmopIHsKICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8CiAgICAgICAgICAgIChvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wKG9iaiwgJ19pc0FNb21lbnRPYmplY3QnKSk7CiAgICB9OwoKICAgIC8vIGZvciB0eXBlY2hlY2tpbmcgRHVyYXRpb24gb2JqZWN0cwogICAgbW9tZW50LmlzRHVyYXRpb24gPSBmdW5jdGlvbiAob2JqKSB7CiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uOwogICAgfTsKCiAgICBmb3IgKGkgPSBsaXN0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewogICAgICAgIG1ha2VMaXN0KGxpc3RzW2ldKTsKICAgIH0KCiAgICBtb21lbnQubm9ybWFsaXplVW5pdHMgPSBmdW5jdGlvbiAodW5pdHMpIHsKICAgICAgICByZXR1cm4gbm9ybWFsaXplVW5pdHModW5pdHMpOwogICAgfTsKCiAgICBtb21lbnQuaW52YWxpZCA9IGZ1bmN0aW9uIChmbGFncykgewogICAgICAgIHZhciBtID0gbW9tZW50LnV0YyhOYU4pOwogICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7CiAgICAgICAgICAgIGV4dGVuZChtLl9wZiwgZmxhZ3MpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbS5fcGYudXNlckludmFsaWRhdGVkID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBtOwogICAgfTsKCiAgICBtb21lbnQucGFyc2Vab25lID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBtb21lbnQuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTsKICAgIH07CgogICAgbW9tZW50LnBhcnNlVHdvRGlnaXRZZWFyID0gZnVuY3Rpb24gKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTsKICAgIH07CgogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgIE1vbWVudCBQcm90b3R5cGUKICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgogICAgZXh0ZW5kKG1vbWVudC5mbiA9IE1vbWVudC5wcm90b3R5cGUsIHsKCiAgICAgICAgY2xvbmUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBtb21lbnQodGhpcyk7CiAgICAgICAgfSwKCiAgICAgICAgdmFsdWVPZiA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuICt0aGlzLl9kICsgKCh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMCk7CiAgICAgICAgfSwKCiAgICAgICAgdW5peCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoK3RoaXMgLyAxMDAwKTsKICAgICAgICB9LAoKICAgICAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpOwogICAgICAgIH0sCgogICAgICAgIHRvRGF0ZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29mZnNldCA/IG5ldyBEYXRlKCt0aGlzKSA6IHRoaXMuX2Q7CiAgICAgICAgfSwKCiAgICAgICAgdG9JU09TdHJpbmcgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBtID0gbW9tZW50KHRoaXMpLnV0YygpOwogICAgICAgICAgICBpZiAoMCA8IG0ueWVhcigpICYmIG0ueWVhcigpIDw9IDk5OTkpIHsKICAgICAgICAgICAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpIHsKICAgICAgICAgICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhbgogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQobSwgJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQobSwgJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgdG9BcnJheSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIG0gPSB0aGlzOwogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgbS55ZWFyKCksCiAgICAgICAgICAgICAgICBtLm1vbnRoKCksCiAgICAgICAgICAgICAgICBtLmRhdGUoKSwKICAgICAgICAgICAgICAgIG0uaG91cnMoKSwKICAgICAgICAgICAgICAgIG0ubWludXRlcygpLAogICAgICAgICAgICAgICAgbS5zZWNvbmRzKCksCiAgICAgICAgICAgICAgICBtLm1pbGxpc2Vjb25kcygpCiAgICAgICAgICAgIF07CiAgICAgICAgfSwKCiAgICAgICAgaXNWYWxpZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7CiAgICAgICAgfSwKCiAgICAgICAgaXNEU1RTaGlmdGVkIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAodGhpcy5fYSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXModGhpcy5fYSwgKHRoaXMuX2lzVVRDID8gbW9tZW50LnV0Yyh0aGlzLl9hKSA6IG1vbWVudCh0aGlzLl9hKSkudG9BcnJheSgpKSA+IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9LAoKICAgICAgICBwYXJzaW5nRmxhZ3MgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBleHRlbmQoe30sIHRoaXMuX3BmKTsKICAgICAgICB9LAoKICAgICAgICBpbnZhbGlkQXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BmLm92ZXJmbG93OwogICAgICAgIH0sCgogICAgICAgIHV0YyA6IGZ1bmN0aW9uIChrZWVwTG9jYWxUaW1lKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnpvbmUoMCwga2VlcExvY2FsVGltZSk7CiAgICAgICAgfSwKCiAgICAgICAgbG9jYWwgOiBmdW5jdGlvbiAoa2VlcExvY2FsVGltZSkgewogICAgICAgICAgICBpZiAodGhpcy5faXNVVEMpIHsKICAgICAgICAgICAgICAgIHRoaXMuem9uZSgwLCBrZWVwTG9jYWxUaW1lKTsKICAgICAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7CgogICAgICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZCh0aGlzLl9kYXRlVHpPZmZzZXQoKSwgJ20nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBmb3JtYXQgOiBmdW5jdGlvbiAoaW5wdXRTdHJpbmcpIHsKICAgICAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyB8fCBtb21lbnQuZGVmYXVsdEZvcm1hdCk7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7CiAgICAgICAgfSwKCiAgICAgICAgYWRkIDogY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLAoKICAgICAgICBzdWJ0cmFjdCA6IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKSwKCiAgICAgICAgZGlmZiA6IGZ1bmN0aW9uIChpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHsKICAgICAgICAgICAgdmFyIHRoYXQgPSBtYWtlQXMoaW5wdXQsIHRoaXMpLAogICAgICAgICAgICAgICAgem9uZURpZmYgPSAodGhpcy56b25lKCkgLSB0aGF0LnpvbmUoKSkgKiA2ZTQsCiAgICAgICAgICAgICAgICBkaWZmLCBvdXRwdXQsIGRheXNBZGp1c3Q7CgogICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTsKCiAgICAgICAgICAgIGlmICh1bml0cyA9PT0gJ3llYXInIHx8IHVuaXRzID09PSAnbW9udGgnKSB7CiAgICAgICAgICAgICAgICAvLyBhdmVyYWdlIG51bWJlciBvZiBkYXlzIGluIHRoZSBtb250aHMgaW4gdGhlIGdpdmVuIGRhdGVzCiAgICAgICAgICAgICAgICBkaWZmID0gKHRoaXMuZGF5c0luTW9udGgoKSArIHRoYXQuZGF5c0luTW9udGgoKSkgKiA0MzJlNTsgLy8gMjQgKiA2MCAqIDYwICogMTAwMCAvIDIKICAgICAgICAgICAgICAgIC8vIGRpZmZlcmVuY2UgaW4gbW9udGhzCiAgICAgICAgICAgICAgICBvdXRwdXQgPSAoKHRoaXMueWVhcigpIC0gdGhhdC55ZWFyKCkpICogMTIpICsgKHRoaXMubW9udGgoKSAtIHRoYXQubW9udGgoKSk7CiAgICAgICAgICAgICAgICAvLyBhZGp1c3QgYnkgdGFraW5nIGRpZmZlcmVuY2UgaW4gZGF5cywgYXZlcmFnZSBudW1iZXIgb2YgZGF5cwogICAgICAgICAgICAgICAgLy8gYW5kIGRzdCBpbiB0aGUgZ2l2ZW4gbW9udGhzLgogICAgICAgICAgICAgICAgZGF5c0FkanVzdCA9ICh0aGlzIC0gbW9tZW50KHRoaXMpLnN0YXJ0T2YoJ21vbnRoJykpIC0KICAgICAgICAgICAgICAgICAgICAodGhhdCAtIG1vbWVudCh0aGF0KS5zdGFydE9mKCdtb250aCcpKTsKICAgICAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdpdGggem9uZXMsIHRvIG5lZ2F0ZSBhbGwgZHN0CiAgICAgICAgICAgICAgICBkYXlzQWRqdXN0IC09ICgodGhpcy56b25lKCkgLSBtb21lbnQodGhpcykuc3RhcnRPZignbW9udGgnKS56b25lKCkpIC0KICAgICAgICAgICAgICAgICAgICAgICAgKHRoYXQuem9uZSgpIC0gbW9tZW50KHRoYXQpLnN0YXJ0T2YoJ21vbnRoJykuem9uZSgpKSkgKiA2ZTQ7CiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gZGF5c0FkanVzdCAvIGRpZmY7CiAgICAgICAgICAgICAgICBpZiAodW5pdHMgPT09ICd5ZWFyJykgewogICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCAvIDEyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZGlmZiA9ICh0aGlzIC0gdGhhdCk7CiAgICAgICAgICAgICAgICBvdXRwdXQgPSB1bml0cyA9PT0gJ3NlY29uZCcgPyBkaWZmIC8gMWUzIDogLy8gMTAwMAogICAgICAgICAgICAgICAgICAgIHVuaXRzID09PSAnbWludXRlJyA/IGRpZmYgLyA2ZTQgOiAvLyAxMDAwICogNjAKICAgICAgICAgICAgICAgICAgICB1bml0cyA9PT0gJ2hvdXInID8gZGlmZiAvIDM2ZTUgOiAvLyAxMDAwICogNjAgKiA2MAogICAgICAgICAgICAgICAgICAgIHVuaXRzID09PSAnZGF5JyA/IChkaWZmIC0gem9uZURpZmYpIC8gODY0ZTUgOiAvLyAxMDAwICogNjAgKiA2MCAqIDI0LCBuZWdhdGUgZHN0CiAgICAgICAgICAgICAgICAgICAgdW5pdHMgPT09ICd3ZWVrJyA/IChkaWZmIC0gem9uZURpZmYpIC8gNjA0OGU1IDogLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3QKICAgICAgICAgICAgICAgICAgICBkaWZmOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBhc0Zsb2F0ID8gb3V0cHV0IDogYWJzUm91bmQob3V0cHV0KTsKICAgICAgICB9LAoKICAgICAgICBmcm9tIDogZnVuY3Rpb24gKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHsKICAgICAgICAgICAgcmV0dXJuIG1vbWVudC5kdXJhdGlvbih7dG86IHRoaXMsIGZyb206IHRpbWV9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpOwogICAgICAgIH0sCgogICAgICAgIGZyb21Ob3cgOiBmdW5jdGlvbiAod2l0aG91dFN1ZmZpeCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tKG1vbWVudCgpLCB3aXRob3V0U3VmZml4KTsKICAgICAgICB9LAoKICAgICAgICBjYWxlbmRhciA6IGZ1bmN0aW9uICh0aW1lKSB7CiAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuCiAgICAgICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIHpvbmUnZCBvciBub3QuCiAgICAgICAgICAgIHZhciBub3cgPSB0aW1lIHx8IG1vbWVudCgpLAogICAgICAgICAgICAgICAgc29kID0gbWFrZUFzKG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksCiAgICAgICAgICAgICAgICBkaWZmID0gdGhpcy5kaWZmKHNvZCwgJ2RheXMnLCB0cnVlKSwKICAgICAgICAgICAgICAgIGZvcm1hdCA9IGRpZmYgPCAtNiA/ICdzYW1lRWxzZScgOgogICAgICAgICAgICAgICAgICAgIGRpZmYgPCAtMSA/ICdsYXN0V2VlaycgOgogICAgICAgICAgICAgICAgICAgIGRpZmYgPCAwID8gJ2xhc3REYXknIDoKICAgICAgICAgICAgICAgICAgICBkaWZmIDwgMSA/ICdzYW1lRGF5JyA6CiAgICAgICAgICAgICAgICAgICAgZGlmZiA8IDIgPyAnbmV4dERheScgOgogICAgICAgICAgICAgICAgICAgIGRpZmYgPCA3ID8gJ25leHRXZWVrJyA6ICdzYW1lRWxzZSc7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdCh0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIG1vbWVudChub3cpKSk7CiAgICAgICAgfSwKCiAgICAgICAgaXNMZWFwWWVhciA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpOwogICAgICAgIH0sCgogICAgICAgIGlzRFNUIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gKHRoaXMuem9uZSgpIDwgdGhpcy5jbG9uZSgpLm1vbnRoKDApLnpvbmUoKSB8fAogICAgICAgICAgICAgICAgdGhpcy56b25lKCkgPCB0aGlzLmNsb25lKCkubW9udGgoNSkuem9uZSgpKTsKICAgICAgICB9LAoKICAgICAgICBkYXkgOiBmdW5jdGlvbiAoaW5wdXQpIHsKICAgICAgICAgICAgdmFyIGRheSA9IHRoaXMuX2lzVVRDID8gdGhpcy5fZC5nZXRVVENEYXkoKSA6IHRoaXMuX2QuZ2V0RGF5KCk7CiAgICAgICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBpbnB1dCA9IHBhcnNlV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGlucHV0IC0gZGF5LCAnZCcpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGRheTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIG1vbnRoIDogbWFrZUFjY2Vzc29yKCdNb250aCcsIHRydWUpLAoKICAgICAgICBzdGFydE9mIDogZnVuY3Rpb24gKHVuaXRzKSB7CiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpOwogICAgICAgICAgICAvLyB0aGUgZm9sbG93aW5nIHN3aXRjaCBpbnRlbnRpb25hbGx5IG9taXRzIGJyZWFrIGtleXdvcmRzCiAgICAgICAgICAgIC8vIHRvIHV0aWxpemUgZmFsbGluZyB0aHJvdWdoIHRoZSBjYXNlcy4KICAgICAgICAgICAgc3dpdGNoICh1bml0cykgewogICAgICAgICAgICBjYXNlICd5ZWFyJzoKICAgICAgICAgICAgICAgIHRoaXMubW9udGgoMCk7CiAgICAgICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOgogICAgICAgICAgICBjYXNlICdtb250aCc6CiAgICAgICAgICAgICAgICB0aGlzLmRhdGUoMSk7CiAgICAgICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOgogICAgICAgICAgICBjYXNlICdpc29XZWVrJzoKICAgICAgICAgICAgY2FzZSAnZGF5JzoKICAgICAgICAgICAgICAgIHRoaXMuaG91cnMoMCk7CiAgICAgICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICAgICAgICAgIGNhc2UgJ2hvdXInOgogICAgICAgICAgICAgICAgdGhpcy5taW51dGVzKDApOwogICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgICAgICAgICBjYXNlICdtaW51dGUnOgogICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRzKDApOwogICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgICAgICAgICBjYXNlICdzZWNvbmQnOgogICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZHMoMCk7CiAgICAgICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHdlZWtzIGFyZSBhIHNwZWNpYWwgY2FzZQogICAgICAgICAgICBpZiAodW5pdHMgPT09ICd3ZWVrJykgewogICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5KDApOwogICAgICAgICAgICB9IGVsc2UgaWYgKHVuaXRzID09PSAnaXNvV2VlaycpIHsKICAgICAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gcXVhcnRlcnMgYXJlIGFsc28gc3BlY2lhbAogICAgICAgICAgICBpZiAodW5pdHMgPT09ICdxdWFydGVyJykgewogICAgICAgICAgICAgICAgdGhpcy5tb250aChNYXRoLmZsb29yKHRoaXMubW9udGgoKSAvIDMpICogMyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGVuZE9mOiBmdW5jdGlvbiAodW5pdHMpIHsKICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7CiAgICAgICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKHVuaXRzKS5hZGQoMSwgKHVuaXRzID09PSAnaXNvV2VlaycgPyAnd2VlaycgOiB1bml0cykpLnN1YnRyYWN0KDEsICdtcycpOwogICAgICAgIH0sCgogICAgICAgIGlzQWZ0ZXI6IGZ1bmN0aW9uIChpbnB1dCwgdW5pdHMpIHsKICAgICAgICAgICAgdmFyIGlucHV0TXM7CiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModHlwZW9mIHVuaXRzICE9PSAndW5kZWZpbmVkJyA/IHVuaXRzIDogJ21pbGxpc2Vjb25kJyk7CiAgICAgICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykgewogICAgICAgICAgICAgICAgaW5wdXQgPSBtb21lbnQuaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBtb21lbnQoaW5wdXQpOwogICAgICAgICAgICAgICAgcmV0dXJuICt0aGlzID4gK2lucHV0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW5wdXRNcyA9IG1vbWVudC5pc01vbWVudChpbnB1dCkgPyAraW5wdXQgOiArbW9tZW50KGlucHV0KTsKICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dE1zIDwgK3RoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGlzQmVmb3JlOiBmdW5jdGlvbiAoaW5wdXQsIHVuaXRzKSB7CiAgICAgICAgICAgIHZhciBpbnB1dE1zOwogICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHR5cGVvZiB1bml0cyAhPT0gJ3VuZGVmaW5lZCcgPyB1bml0cyA6ICdtaWxsaXNlY29uZCcpOwogICAgICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHsKICAgICAgICAgICAgICAgIGlucHV0ID0gbW9tZW50LmlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogbW9tZW50KGlucHV0KTsKICAgICAgICAgICAgICAgIHJldHVybiArdGhpcyA8ICtpbnB1dDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlucHV0TXMgPSBtb21lbnQuaXNNb21lbnQoaW5wdXQpID8gK2lucHV0IDogK21vbWVudChpbnB1dCk7CiAgICAgICAgICAgICAgICByZXR1cm4gK3RoaXMuY2xvbmUoKS5lbmRPZih1bml0cykgPCBpbnB1dE1zOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgaXNTYW1lOiBmdW5jdGlvbiAoaW5wdXQsIHVuaXRzKSB7CiAgICAgICAgICAgIHZhciBpbnB1dE1zOwogICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzIHx8ICdtaWxsaXNlY29uZCcpOwogICAgICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHsKICAgICAgICAgICAgICAgIGlucHV0ID0gbW9tZW50LmlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogbW9tZW50KGlucHV0KTsKICAgICAgICAgICAgICAgIHJldHVybiArdGhpcyA9PT0gK2lucHV0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW5wdXRNcyA9ICttb21lbnQoaW5wdXQpOwogICAgICAgICAgICAgICAgcmV0dXJuICsodGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpKSA8PSBpbnB1dE1zICYmIGlucHV0TXMgPD0gKyh0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIG1pbjogZGVwcmVjYXRlKAogICAgICAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE1NDgnLAogICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChvdGhlcikgewogICAgICAgICAgICAgICAgICAgICBvdGhlciA9IG1vbWVudC5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPCB0aGlzID8gdGhpcyA6IG90aGVyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgKSwKCiAgICAgICAgbWF4OiBkZXByZWNhdGUoCiAgICAgICAgICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNTQ4JywKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChvdGhlcikgewogICAgICAgICAgICAgICAgICAgIG90aGVyID0gbW9tZW50LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyID4gdGhpcyA/IHRoaXMgOiBvdGhlcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICApLAoKICAgICAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXQKICAgICAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bem9uZSgyLCB0cnVlKV0tLT4KICAgICAgICAvLyA1OjMxOjI2ICswMjAwIEl0IGlzIHBvc3NpYmxlIHRoYXQgNTozMToyNiBkb2Vzbid0IGV4aXN0IGludCB6b25lCiAgICAgICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLgogICAgICAgIC8vCiAgICAgICAgLy8gS2VlcGluZyB0aGUgdGltZSBhY3R1YWxseSBhZGRzL3N1YnRyYWN0cyAob25lIGhvdXIpCiAgICAgICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0CiAgICAgICAgLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpbgogICAgICAgIC8vIF9jaGFuZ2VJblByb2dyZXNzID09IHRydWUgY2FzZSwgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCwgYmVjYXVzZQogICAgICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuCiAgICAgICAgem9uZSA6IGZ1bmN0aW9uIChpbnB1dCwga2VlcExvY2FsVGltZSkgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0IHx8IDAsCiAgICAgICAgICAgICAgICBsb2NhbEFkanVzdDsKICAgICAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSB0aW1lem9uZU1pbnV0ZXNGcm9tU3RyaW5nKGlucHV0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhpbnB1dCkgPCAxNikgewogICAgICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkgewogICAgICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gdGhpcy5fZGF0ZVR6T2Zmc2V0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBpbnB1dDsKICAgICAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmIChsb2NhbEFkanVzdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChsb2NhbEFkanVzdCwgJ20nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3JTdWJ0cmFjdER1cmF0aW9uRnJvbU1vbWVudCh0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudC5kdXJhdGlvbihvZmZzZXQgLSBpbnB1dCwgJ20nKSwgMSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudC51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG9mZnNldCA6IHRoaXMuX2RhdGVUek9mZnNldCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIHpvbmVBYmJyIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnVVRDJyA6ICcnOwogICAgICAgIH0sCgogICAgICAgIHpvbmVOYW1lIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUnIDogJyc7CiAgICAgICAgfSwKCiAgICAgICAgcGFyc2Vab25lIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAodGhpcy5fdHptKSB7CiAgICAgICAgICAgICAgICB0aGlzLnpvbmUodGhpcy5fdHptKTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgIHRoaXMuem9uZSh0aGlzLl9pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBoYXNBbGlnbmVkSG91ck9mZnNldCA6IGZ1bmN0aW9uIChpbnB1dCkgewogICAgICAgICAgICBpZiAoIWlucHV0KSB7CiAgICAgICAgICAgICAgICBpbnB1dCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpbnB1dCA9IG1vbWVudChpbnB1dCkuem9uZSgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gKHRoaXMuem9uZSgpIC0gaW5wdXQpICUgNjAgPT09IDA7CiAgICAgICAgfSwKCiAgICAgICAgZGF5c0luTW9udGggOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTsKICAgICAgICB9LAoKICAgICAgICBkYXlPZlllYXIgOiBmdW5jdGlvbiAoaW5wdXQpIHsKICAgICAgICAgICAgdmFyIGRheU9mWWVhciA9IHJvdW5kKChtb21lbnQodGhpcykuc3RhcnRPZignZGF5JykgLSBtb21lbnQodGhpcykuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1KSArIDE7CiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoKGlucHV0IC0gZGF5T2ZZZWFyKSwgJ2QnKTsKICAgICAgICB9LAoKICAgICAgICBxdWFydGVyIDogZnVuY3Rpb24gKGlucHV0KSB7CiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpIDogdGhpcy5tb250aCgoaW5wdXQgLSAxKSAqIDMgKyB0aGlzLm1vbnRoKCkgJSAzKTsKICAgICAgICB9LAoKICAgICAgICB3ZWVrWWVhciA6IGZ1bmN0aW9uIChpbnB1dCkgewogICAgICAgICAgICB2YXIgeWVhciA9IHdlZWtPZlllYXIodGhpcywgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LCB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3kpLnllYXI7CiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8geWVhciA6IHRoaXMuYWRkKChpbnB1dCAtIHllYXIpLCAneScpOwogICAgICAgIH0sCgogICAgICAgIGlzb1dlZWtZZWFyIDogZnVuY3Rpb24gKGlucHV0KSB7CiAgICAgICAgICAgIHZhciB5ZWFyID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS55ZWFyOwogICAgICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHllYXIgOiB0aGlzLmFkZCgoaW5wdXQgLSB5ZWFyKSwgJ3knKTsKICAgICAgICB9LAoKICAgICAgICB3ZWVrIDogZnVuY3Rpb24gKGlucHV0KSB7CiAgICAgICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTsKICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpOwogICAgICAgIH0sCgogICAgICAgIGlzb1dlZWsgOiBmdW5jdGlvbiAoaW5wdXQpIHsKICAgICAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7CiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTsKICAgICAgICB9LAoKICAgICAgICB3ZWVrZGF5IDogZnVuY3Rpb24gKGlucHV0KSB7CiAgICAgICAgICAgIHZhciB3ZWVrZGF5ID0gKHRoaXMuZGF5KCkgKyA3IC0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSAlIDc7CiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2Vla2RheSA6IHRoaXMuYWRkKGlucHV0IC0gd2Vla2RheSwgJ2QnKTsKICAgICAgICB9LAoKICAgICAgICBpc29XZWVrZGF5IDogZnVuY3Rpb24gKGlucHV0KSB7CiAgICAgICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHQKICAgICAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNikKICAgICAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLgogICAgICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHRoaXMuZGF5KCkgfHwgNyA6IHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gaW5wdXQgOiBpbnB1dCAtIDcpOwogICAgICAgIH0sCgogICAgICAgIGlzb1dlZWtzSW5ZZWFyIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpOwogICAgICAgIH0sCgogICAgICAgIHdlZWtzSW5ZZWFyIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlazsKICAgICAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7CiAgICAgICAgfSwKCiAgICAgICAgZ2V0IDogZnVuY3Rpb24gKHVuaXRzKSB7CiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpOwogICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10oKTsKICAgICAgICB9LAoKICAgICAgICBzZXQgOiBmdW5jdGlvbiAodW5pdHMsIHZhbHVlKSB7CiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpOwogICAgICAgICAgICBpZiAodHlwZW9mIHRoaXNbdW5pdHNdID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICB0aGlzW3VuaXRzXSh2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgLy8gSWYgcGFzc2VkIGEgbG9jYWxlIGtleSwgaXQgd2lsbCBzZXQgdGhlIGxvY2FsZSBmb3IgdGhpcwogICAgICAgIC8vIGluc3RhbmNlLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiB0aGUgbG9jYWxlIGNvbmZpZ3VyYXRpb24KICAgICAgICAvLyB2YXJpYWJsZXMgZm9yIHRoaXMgaW5zdGFuY2UuCiAgICAgICAgbG9jYWxlIDogZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTsKCiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5ld0xvY2FsZURhdGEgPSBtb21lbnQubG9jYWxlRGF0YShrZXkpOwogICAgICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGxhbmcgOiBkZXByZWNhdGUoCiAgICAgICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsCiAgICAgICAgICAgIGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICApLAoKICAgICAgICBsb2NhbGVEYXRhIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlOwogICAgICAgIH0sCgogICAgICAgIF9kYXRlVHpPZmZzZXQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIC8vIE9uIEZpcmVmb3guMjQgRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIGEgZmxvYXRpbmcgcG9pbnQuCiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L3B1bGwvMTg3MQogICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkgLyAxNSkgKiAxNTsKICAgICAgICB9CiAgICB9KTsKCiAgICBmdW5jdGlvbiByYXdNb250aFNldHRlcihtb20sIHZhbHVlKSB7CiAgICAgICAgdmFyIGRheU9mTW9udGg7CgogICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBvdXQgb2YgaGVyZSEKICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgewogICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpOwogICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlPwogICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykgewogICAgICAgICAgICAgICAgcmV0dXJuIG1vbTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZGF5T2ZNb250aCA9IE1hdGgubWluKG1vbS5kYXRlKCksCiAgICAgICAgICAgICAgICBkYXlzSW5Nb250aChtb20ueWVhcigpLCB2YWx1ZSkpOwogICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyAnTW9udGgnXSh2YWx1ZSwgZGF5T2ZNb250aCk7CiAgICAgICAgcmV0dXJuIG1vbTsKICAgIH0KCiAgICBmdW5jdGlvbiByYXdHZXR0ZXIobW9tLCB1bml0KSB7CiAgICAgICAgcmV0dXJuIG1vbS5fZFsnZ2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSgpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJhd1NldHRlcihtb20sIHVuaXQsIHZhbHVlKSB7CiAgICAgICAgaWYgKHVuaXQgPT09ICdNb250aCcpIHsKICAgICAgICAgICAgcmV0dXJuIHJhd01vbnRoU2V0dGVyKG1vbSwgdmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0odmFsdWUpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBtYWtlQWNjZXNzb3IodW5pdCwga2VlcFRpbWUpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICByYXdTZXR0ZXIodGhpcywgdW5pdCwgdmFsdWUpOwogICAgICAgICAgICAgICAgbW9tZW50LnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiByYXdHZXR0ZXIodGhpcywgdW5pdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfQoKICAgIG1vbWVudC5mbi5taWxsaXNlY29uZCA9IG1vbWVudC5mbi5taWxsaXNlY29uZHMgPSBtYWtlQWNjZXNzb3IoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTsKICAgIG1vbWVudC5mbi5zZWNvbmQgPSBtb21lbnQuZm4uc2Vjb25kcyA9IG1ha2VBY2Nlc3NvcignU2Vjb25kcycsIGZhbHNlKTsKICAgIG1vbWVudC5mbi5taW51dGUgPSBtb21lbnQuZm4ubWludXRlcyA9IG1ha2VBY2Nlc3NvcignTWludXRlcycsIGZhbHNlKTsKICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseQogICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgaGUgd2FudHMuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpbgogICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93CiAgICAvLyB0aGlzIHJ1bGUuCiAgICBtb21lbnQuZm4uaG91ciA9IG1vbWVudC5mbi5ob3VycyA9IG1ha2VBY2Nlc3NvcignSG91cnMnLCB0cnVlKTsKICAgIC8vIG1vbWVudC5mbi5tb250aCBpcyBkZWZpbmVkIHNlcGFyYXRlbHkKICAgIG1vbWVudC5mbi5kYXRlID0gbWFrZUFjY2Vzc29yKCdEYXRlJywgdHJ1ZSk7CiAgICBtb21lbnQuZm4uZGF0ZXMgPSBkZXByZWNhdGUoJ2RhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuJywgbWFrZUFjY2Vzc29yKCdEYXRlJywgdHJ1ZSkpOwogICAgbW9tZW50LmZuLnllYXIgPSBtYWtlQWNjZXNzb3IoJ0Z1bGxZZWFyJywgdHJ1ZSk7CiAgICBtb21lbnQuZm4ueWVhcnMgPSBkZXByZWNhdGUoJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQuJywgbWFrZUFjY2Vzc29yKCdGdWxsWWVhcicsIHRydWUpKTsKCiAgICAvLyBhZGQgcGx1cmFsIG1ldGhvZHMKICAgIG1vbWVudC5mbi5kYXlzID0gbW9tZW50LmZuLmRheTsKICAgIG1vbWVudC5mbi5tb250aHMgPSBtb21lbnQuZm4ubW9udGg7CiAgICBtb21lbnQuZm4ud2Vla3MgPSBtb21lbnQuZm4ud2VlazsKICAgIG1vbWVudC5mbi5pc29XZWVrcyA9IG1vbWVudC5mbi5pc29XZWVrOwogICAgbW9tZW50LmZuLnF1YXJ0ZXJzID0gbW9tZW50LmZuLnF1YXJ0ZXI7CgogICAgLy8gYWRkIGFsaWFzZWQgZm9ybWF0IG1ldGhvZHMKICAgIG1vbWVudC5mbi50b0pTT04gPSBtb21lbnQuZm4udG9JU09TdHJpbmc7CgogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgIER1cmF0aW9uIFByb3RvdHlwZQogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCiAgICBmdW5jdGlvbiBkYXlzVG9ZZWFycyAoZGF5cykgewogICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDE0NjA5NyBkYXlzICh0YWtpbmcgaW50byBhY2NvdW50IGxlYXAgeWVhciBydWxlcykKICAgICAgICByZXR1cm4gZGF5cyAqIDQwMCAvIDE0NjA5NzsKICAgIH0KCiAgICBmdW5jdGlvbiB5ZWFyc1RvRGF5cyAoeWVhcnMpIHsKICAgICAgICAvLyB5ZWFycyAqIDM2NSArIGFic1JvdW5kKHllYXJzIC8gNCkgLQogICAgICAgIC8vICAgICBhYnNSb3VuZCh5ZWFycyAvIDEwMCkgKyBhYnNSb3VuZCh5ZWFycyAvIDQwMCk7CiAgICAgICAgcmV0dXJuIHllYXJzICogMTQ2MDk3IC8gNDAwOwogICAgfQoKICAgIGV4dGVuZChtb21lbnQuZHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGUsIHsKCiAgICAgICAgX2J1YmJsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcywKICAgICAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLAogICAgICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLAogICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsCiAgICAgICAgICAgICAgICBzZWNvbmRzLCBtaW51dGVzLCBob3VycywgeWVhcnMgPSAwOwoKICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvcgogICAgICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuCiAgICAgICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDsKCiAgICAgICAgICAgIHNlY29uZHMgPSBhYnNSb3VuZChtaWxsaXNlY29uZHMgLyAxMDAwKTsKICAgICAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwOwoKICAgICAgICAgICAgbWludXRlcyA9IGFic1JvdW5kKHNlY29uZHMgLyA2MCk7CiAgICAgICAgICAgIGRhdGEubWludXRlcyA9IG1pbnV0ZXMgJSA2MDsKCiAgICAgICAgICAgIGhvdXJzID0gYWJzUm91bmQobWludXRlcyAvIDYwKTsKICAgICAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7CgogICAgICAgICAgICBkYXlzICs9IGFic1JvdW5kKGhvdXJzIC8gMjQpOwoKICAgICAgICAgICAgLy8gQWNjdXJhdGVseSBjb252ZXJ0IGRheXMgdG8geWVhcnMsIGFzc3VtZSBzdGFydCBmcm9tIHllYXIgMC4KICAgICAgICAgICAgeWVhcnMgPSBhYnNSb3VuZChkYXlzVG9ZZWFycyhkYXlzKSk7CiAgICAgICAgICAgIGRheXMgLT0gYWJzUm91bmQoeWVhcnNUb0RheXMoeWVhcnMpKTsKCiAgICAgICAgICAgIC8vIDMwIGRheXMgdG8gYSBtb250aAogICAgICAgICAgICAvLyBUT0RPIChpc2tyZW4pOiBVc2UgYW5jaG9yIGRhdGUgKGxpa2UgMXN0IEphbikgdG8gY29tcHV0ZSB0aGlzLgogICAgICAgICAgICBtb250aHMgKz0gYWJzUm91bmQoZGF5cyAvIDMwKTsKICAgICAgICAgICAgZGF5cyAlPSAzMDsKCiAgICAgICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXIKICAgICAgICAgICAgeWVhcnMgKz0gYWJzUm91bmQobW9udGhzIC8gMTIpOwogICAgICAgICAgICBtb250aHMgJT0gMTI7CgogICAgICAgICAgICBkYXRhLmRheXMgPSBkYXlzOwogICAgICAgICAgICBkYXRhLm1vbnRocyA9IG1vbnRoczsKICAgICAgICAgICAgZGF0YS55ZWFycyA9IHllYXJzOwogICAgICAgIH0sCgogICAgICAgIGFicyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gTWF0aC5hYnModGhpcy5fbWlsbGlzZWNvbmRzKTsKICAgICAgICAgICAgdGhpcy5fZGF5cyA9IE1hdGguYWJzKHRoaXMuX2RheXMpOwogICAgICAgICAgICB0aGlzLl9tb250aHMgPSBNYXRoLmFicyh0aGlzLl9tb250aHMpOwoKICAgICAgICAgICAgdGhpcy5fZGF0YS5taWxsaXNlY29uZHMgPSBNYXRoLmFicyh0aGlzLl9kYXRhLm1pbGxpc2Vjb25kcyk7CiAgICAgICAgICAgIHRoaXMuX2RhdGEuc2Vjb25kcyA9IE1hdGguYWJzKHRoaXMuX2RhdGEuc2Vjb25kcyk7CiAgICAgICAgICAgIHRoaXMuX2RhdGEubWludXRlcyA9IE1hdGguYWJzKHRoaXMuX2RhdGEubWludXRlcyk7CiAgICAgICAgICAgIHRoaXMuX2RhdGEuaG91cnMgPSBNYXRoLmFicyh0aGlzLl9kYXRhLmhvdXJzKTsKICAgICAgICAgICAgdGhpcy5fZGF0YS5tb250aHMgPSBNYXRoLmFicyh0aGlzLl9kYXRhLm1vbnRocyk7CiAgICAgICAgICAgIHRoaXMuX2RhdGEueWVhcnMgPSBNYXRoLmFicyh0aGlzLl9kYXRhLnllYXJzKTsKCiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIHdlZWtzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gYWJzUm91bmQodGhpcy5kYXlzKCkgLyA3KTsKICAgICAgICB9LAoKICAgICAgICB2YWx1ZU9mIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fbWlsbGlzZWNvbmRzICsKICAgICAgICAgICAgICB0aGlzLl9kYXlzICogODY0ZTUgKwogICAgICAgICAgICAgICh0aGlzLl9tb250aHMgJSAxMikgKiAyNTkyZTYgKwogICAgICAgICAgICAgIHRvSW50KHRoaXMuX21vbnRocyAvIDEyKSAqIDMxNTM2ZTY7CiAgICAgICAgfSwKCiAgICAgICAgaHVtYW5pemUgOiBmdW5jdGlvbiAod2l0aFN1ZmZpeCkgewogICAgICAgICAgICB2YXIgb3V0cHV0ID0gcmVsYXRpdmVUaW1lKHRoaXMsICF3aXRoU3VmZml4LCB0aGlzLmxvY2FsZURhdGEoKSk7CgogICAgICAgICAgICBpZiAod2l0aFN1ZmZpeCkgewogICAgICAgICAgICAgICAgb3V0cHV0ID0gdGhpcy5sb2NhbGVEYXRhKCkucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQob3V0cHV0KTsKICAgICAgICB9LAoKICAgICAgICBhZGQgOiBmdW5jdGlvbiAoaW5wdXQsIHZhbCkgewogICAgICAgICAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQobW9tZW50KQogICAgICAgICAgICB2YXIgZHVyID0gbW9tZW50LmR1cmF0aW9uKGlucHV0LCB2YWwpOwoKICAgICAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzICs9IGR1ci5fbWlsbGlzZWNvbmRzOwogICAgICAgICAgICB0aGlzLl9kYXlzICs9IGR1ci5fZGF5czsKICAgICAgICAgICAgdGhpcy5fbW9udGhzICs9IGR1ci5fbW9udGhzOwoKICAgICAgICAgICAgdGhpcy5fYnViYmxlKCk7CgogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBzdWJ0cmFjdCA6IGZ1bmN0aW9uIChpbnB1dCwgdmFsKSB7CiAgICAgICAgICAgIHZhciBkdXIgPSBtb21lbnQuZHVyYXRpb24oaW5wdXQsIHZhbCk7CgogICAgICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgLT0gZHVyLl9taWxsaXNlY29uZHM7CiAgICAgICAgICAgIHRoaXMuX2RheXMgLT0gZHVyLl9kYXlzOwogICAgICAgICAgICB0aGlzLl9tb250aHMgLT0gZHVyLl9tb250aHM7CgogICAgICAgICAgICB0aGlzLl9idWJibGUoKTsKCiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGdldCA6IGZ1bmN0aW9uICh1bml0cykgewogICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHMudG9Mb3dlckNhc2UoKSArICdzJ10oKTsKICAgICAgICB9LAoKICAgICAgICBhcyA6IGZ1bmN0aW9uICh1bml0cykgewogICAgICAgICAgICB2YXIgZGF5cywgbW9udGhzOwogICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTsKCiAgICAgICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3llYXInKSB7CiAgICAgICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIHRoaXMuX21pbGxpc2Vjb25kcyAvIDg2NGU1OwogICAgICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzICsgZGF5c1RvWWVhcnMoZGF5cykgKiAxMjsKICAgICAgICAgICAgICAgIHJldHVybiB1bml0cyA9PT0gJ21vbnRoJyA/IG1vbnRocyA6IG1vbnRocyAvIDEyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KQogICAgICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKHllYXJzVG9EYXlzKHRoaXMuX21vbnRocyAvIDEyKSk7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnd2Vlayc6IHJldHVybiBkYXlzIC8gNyArIHRoaXMuX21pbGxpc2Vjb25kcyAvIDYwNDhlNTsKICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXknOiByZXR1cm4gZGF5cyArIHRoaXMuX21pbGxpc2Vjb25kcyAvIDg2NGU1OwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hvdXInOiByZXR1cm4gZGF5cyAqIDI0ICsgdGhpcy5fbWlsbGlzZWNvbmRzIC8gMzZlNTsKICAgICAgICAgICAgICAgICAgICBjYXNlICdtaW51dGUnOiByZXR1cm4gZGF5cyAqIDI0ICogNjAgKyB0aGlzLl9taWxsaXNlY29uZHMgLyA2ZTQ7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzogcmV0dXJuIGRheXMgKiAyNCAqIDYwICogNjAgKyB0aGlzLl9taWxsaXNlY29uZHMgLyAxMDAwOwogICAgICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzogcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApICsgdGhpcy5fbWlsbGlzZWNvbmRzOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcignVW5rbm93biB1bml0ICcgKyB1bml0cyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBsYW5nIDogbW9tZW50LmZuLmxhbmcsCiAgICAgICAgbG9jYWxlIDogbW9tZW50LmZuLmxvY2FsZSwKCiAgICAgICAgdG9Jc29TdHJpbmcgOiBkZXByZWNhdGUoCiAgICAgICAgICAgICd0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkICcgKwogICAgICAgICAgICAnKG5vdGljZSB0aGUgY2FwaXRhbHMpJywKICAgICAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgICksCgogICAgICAgIHRvSVNPU3RyaW5nIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qcwogICAgICAgICAgICB2YXIgeWVhcnMgPSBNYXRoLmFicyh0aGlzLnllYXJzKCkpLAogICAgICAgICAgICAgICAgbW9udGhzID0gTWF0aC5hYnModGhpcy5tb250aHMoKSksCiAgICAgICAgICAgICAgICBkYXlzID0gTWF0aC5hYnModGhpcy5kYXlzKCkpLAogICAgICAgICAgICAgICAgaG91cnMgPSBNYXRoLmFicyh0aGlzLmhvdXJzKCkpLAogICAgICAgICAgICAgICAgbWludXRlcyA9IE1hdGguYWJzKHRoaXMubWludXRlcygpKSwKICAgICAgICAgICAgICAgIHNlY29uZHMgPSBNYXRoLmFicyh0aGlzLnNlY29uZHMoKSArIHRoaXMubWlsbGlzZWNvbmRzKCkgLyAxMDAwKTsKCiAgICAgICAgICAgIGlmICghdGhpcy5hc1NlY29uZHMoKSkgewogICAgICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLgogICAgICAgICAgICAgICAgLy8gYnV0IG5vdCBvdGhlciBKUyAoZ29vZy5kYXRlKQogICAgICAgICAgICAgICAgcmV0dXJuICdQMEQnOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gKHRoaXMuYXNTZWNvbmRzKCkgPCAwID8gJy0nIDogJycpICsKICAgICAgICAgICAgICAgICdQJyArCiAgICAgICAgICAgICAgICAoeWVhcnMgPyB5ZWFycyArICdZJyA6ICcnKSArCiAgICAgICAgICAgICAgICAobW9udGhzID8gbW9udGhzICsgJ00nIDogJycpICsKICAgICAgICAgICAgICAgIChkYXlzID8gZGF5cyArICdEJyA6ICcnKSArCiAgICAgICAgICAgICAgICAoKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcykgPyAnVCcgOiAnJykgKwogICAgICAgICAgICAgICAgKGhvdXJzID8gaG91cnMgKyAnSCcgOiAnJykgKwogICAgICAgICAgICAgICAgKG1pbnV0ZXMgPyBtaW51dGVzICsgJ00nIDogJycpICsKICAgICAgICAgICAgICAgIChzZWNvbmRzID8gc2Vjb25kcyArICdTJyA6ICcnKTsKICAgICAgICB9LAoKICAgICAgICBsb2NhbGVEYXRhIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlOwogICAgICAgIH0KICAgIH0pOwoKICAgIG1vbWVudC5kdXJhdGlvbi5mbi50b1N0cmluZyA9IG1vbWVudC5kdXJhdGlvbi5mbi50b0lTT1N0cmluZzsKCiAgICBmdW5jdGlvbiBtYWtlRHVyYXRpb25HZXR0ZXIobmFtZSkgewogICAgICAgIG1vbWVudC5kdXJhdGlvbi5mbltuYW1lXSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFbbmFtZV07CiAgICAgICAgfTsKICAgIH0KCiAgICBmb3IgKGkgaW4gdW5pdE1pbGxpc2Vjb25kRmFjdG9ycykgewogICAgICAgIGlmIChoYXNPd25Qcm9wKHVuaXRNaWxsaXNlY29uZEZhY3RvcnMsIGkpKSB7CiAgICAgICAgICAgIG1ha2VEdXJhdGlvbkdldHRlcihpLnRvTG93ZXJDYXNlKCkpOwogICAgICAgIH0KICAgIH0KCiAgICBtb21lbnQuZHVyYXRpb24uZm4uYXNNaWxsaXNlY29uZHMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuYXMoJ21zJyk7CiAgICB9OwogICAgbW9tZW50LmR1cmF0aW9uLmZuLmFzU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5hcygncycpOwogICAgfTsKICAgIG1vbWVudC5kdXJhdGlvbi5mbi5hc01pbnV0ZXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuYXMoJ20nKTsKICAgIH07CiAgICBtb21lbnQuZHVyYXRpb24uZm4uYXNIb3VycyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5hcygnaCcpOwogICAgfTsKICAgIG1vbWVudC5kdXJhdGlvbi5mbi5hc0RheXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuYXMoJ2QnKTsKICAgIH07CiAgICBtb21lbnQuZHVyYXRpb24uZm4uYXNXZWVrcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5hcygnd2Vla3MnKTsKICAgIH07CiAgICBtb21lbnQuZHVyYXRpb24uZm4uYXNNb250aHMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuYXMoJ00nKTsKICAgIH07CiAgICBtb21lbnQuZHVyYXRpb24uZm4uYXNZZWFycyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5hcygneScpOwogICAgfTsKCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgRGVmYXVsdCBMb2NhbGUKICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgogICAgLy8gU2V0IGRlZmF1bHQgbG9jYWxlLCBvdGhlciBsb2NhbGUgd2lsbCBpbmhlcml0IGZyb20gRW5nbGlzaC4KICAgIG1vbWVudC5sb2NhbGUoJ2VuJywgewogICAgICAgIG9yZGluYWxQYXJzZTogL1xkezEsMn0odGh8c3R8bmR8cmQpLywKICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikgewogICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLAogICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRvSW50KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDoKICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOgogICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ25kJyA6CiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJzsKICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDsKICAgICAgICB9CiAgICB9KTsKCiAgICAvKiBFTUJFRF9MT0NBTEVTICovCgogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgIEV4cG9zaW5nIE1vbWVudAogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKICAgIGZ1bmN0aW9uIG1ha2VHbG9iYWwoc2hvdWxkRGVwcmVjYXRlKSB7CiAgICAgICAgLypnbG9iYWwgZW5kZXI6ZmFsc2UgKi8KICAgICAgICBpZiAodHlwZW9mIGVuZGVyICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIG9sZEdsb2JhbE1vbWVudCA9IGdsb2JhbFNjb3BlLm1vbWVudDsKICAgICAgICBpZiAoc2hvdWxkRGVwcmVjYXRlKSB7CiAgICAgICAgICAgIGdsb2JhbFNjb3BlLm1vbWVudCA9IGRlcHJlY2F0ZSgKICAgICAgICAgICAgICAgICAgICAnQWNjZXNzaW5nIE1vbWVudCB0aHJvdWdoIHRoZSBnbG9iYWwgc2NvcGUgaXMgJyArCiAgICAgICAgICAgICAgICAgICAgJ2RlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYW4gdXBjb21pbmcgJyArCiAgICAgICAgICAgICAgICAgICAgJ3JlbGVhc2UuJywKICAgICAgICAgICAgICAgICAgICBtb21lbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdsb2JhbFNjb3BlLm1vbWVudCA9IG1vbWVudDsKICAgICAgICB9CiAgICB9CgogICAgLy8gQ29tbW9uSlMgbW9kdWxlIGlzIGRlZmluZWQKICAgIGlmIChoYXNNb2R1bGUpIHsKICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vbWVudDsKICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CiAgICAgICAgZGVmaW5lKCdtb21lbnQnLCBmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAgICAgICAgICAgIGlmIChtb2R1bGUuY29uZmlnICYmIG1vZHVsZS5jb25maWcoKSAmJiBtb2R1bGUuY29uZmlnKCkubm9HbG9iYWwgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgIC8vIHJlbGVhc2UgdGhlIGdsb2JhbCB2YXJpYWJsZQogICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUubW9tZW50ID0gb2xkR2xvYmFsTW9tZW50OwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbW9tZW50OwogICAgICAgIH0pOwogICAgICAgIG1ha2VHbG9iYWwodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIG1ha2VHbG9iYWwoKTsKICAgIH0KfSkuY2FsbCh0aGlzKTsK"></script> <script src="data:application/javascript;base64,Ly8hIG1vbWVudC10aW1lem9uZS5qcwovLyEgdmVyc2lvbiA6IDAuMi41Ci8vISBhdXRob3IgOiBUaW0gV29vZAovLyEgbGljZW5zZSA6IE1JVAovLyEgZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50LXRpbWV6b25lCgooZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHsKCSJ1c2Ugc3RyaWN0IjsKCgkvKmdsb2JhbCBkZWZpbmUqLwoJaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgewoJCWRlZmluZShbJ21vbWVudCddLCBmYWN0b3J5KTsgICAgICAgICAgICAgICAgIC8vIEFNRAoJfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHsKCQltb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnbW9tZW50JykpOyAvLyBOb2RlCgl9IGVsc2UgewoJCWZhY3Rvcnkocm9vdC5tb21lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJyb3dzZXIKCX0KfSh0aGlzLCBmdW5jdGlvbiAobW9tZW50KSB7CgkidXNlIHN0cmljdCI7CgoJLy8gRG8gbm90IGxvYWQgbW9tZW50LXRpbWV6b25lIGEgc2Vjb25kIHRpbWUuCglpZiAobW9tZW50LnR6ICE9PSB1bmRlZmluZWQpIHsgcmV0dXJuIG1vbWVudDsgfQoKCXZhciBWRVJTSU9OID0gIjAuMi41IiwKCQl6b25lcyA9IHt9LAoJCWxpbmtzID0ge30sCgoJCW1vbWVudFZlcnNpb24gPSBtb21lbnQudmVyc2lvbi5zcGxpdCgnLicpLAoJCW1ham9yID0gK21vbWVudFZlcnNpb25bMF0sCgkJbWlub3IgPSArbW9tZW50VmVyc2lvblsxXTsKCgkvLyBNb21lbnQuanMgdmVyc2lvbiBjaGVjawoJaWYgKG1ham9yIDwgMiB8fCAobWFqb3IgPT09IDIgJiYgbWlub3IgPCA2KSkgewoJCWxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgcmVxdWlyZXMgTW9tZW50LmpzID49IDIuNi4wLiBZb3UgYXJlIHVzaW5nIE1vbWVudC5qcyAnICsgbW9tZW50LnZlcnNpb24gKyAnLiBTZWUgbW9tZW50anMuY29tJyk7Cgl9CgoJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJCVVucGFja2luZwoJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCWZ1bmN0aW9uIGNoYXJDb2RlVG9JbnQoY2hhckNvZGUpIHsKCQlpZiAoY2hhckNvZGUgPiA5NikgewoJCQlyZXR1cm4gY2hhckNvZGUgLSA4NzsKCQl9IGVsc2UgaWYgKGNoYXJDb2RlID4gNjQpIHsKCQkJcmV0dXJuIGNoYXJDb2RlIC0gMjk7CgkJfQoJCXJldHVybiBjaGFyQ29kZSAtIDQ4OwoJfQoKCWZ1bmN0aW9uIHVucGFja0Jhc2U2MChzdHJpbmcpIHsKCQl2YXIgaSA9IDAsCgkJCXBhcnRzID0gc3RyaW5nLnNwbGl0KCcuJyksCgkJCXdob2xlID0gcGFydHNbMF0sCgkJCWZyYWN0aW9uYWwgPSBwYXJ0c1sxXSB8fCAnJywKCQkJbXVsdGlwbGllciA9IDEsCgkJCW51bSwKCQkJb3V0ID0gMCwKCQkJc2lnbiA9IDE7CgoJCS8vIGhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzCgkJaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NSkgewoJCQlpID0gMTsKCQkJc2lnbiA9IC0xOwoJCX0KCgkJLy8gaGFuZGxlIGRpZ2l0cyBiZWZvcmUgdGhlIGRlY2ltYWwKCQlmb3IgKGk7IGkgPCB3aG9sZS5sZW5ndGg7IGkrKykgewoJCQludW0gPSBjaGFyQ29kZVRvSW50KHdob2xlLmNoYXJDb2RlQXQoaSkpOwoJCQlvdXQgPSA2MCAqIG91dCArIG51bTsKCQl9CgoJCS8vIGhhbmRsZSBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwKCQlmb3IgKGkgPSAwOyBpIDwgZnJhY3Rpb25hbC5sZW5ndGg7IGkrKykgewoJCQltdWx0aXBsaWVyID0gbXVsdGlwbGllciAvIDYwOwoJCQludW0gPSBjaGFyQ29kZVRvSW50KGZyYWN0aW9uYWwuY2hhckNvZGVBdChpKSk7CgkJCW91dCArPSBudW0gKiBtdWx0aXBsaWVyOwoJCX0KCgkJcmV0dXJuIG91dCAqIHNpZ247Cgl9CgoJZnVuY3Rpb24gYXJyYXlUb0ludCAoYXJyYXkpIHsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CgkJCWFycmF5W2ldID0gdW5wYWNrQmFzZTYwKGFycmF5W2ldKTsKCQl9Cgl9CgoJZnVuY3Rpb24gaW50VG9VbnRpbCAoYXJyYXksIGxlbmd0aCkgewoJCWZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKCQkJYXJyYXlbaV0gPSBNYXRoLnJvdW5kKChhcnJheVtpIC0gMV0gfHwgMCkgKyAoYXJyYXlbaV0gKiA2MDAwMCkpOyAvLyBtaW51dGVzIHRvIG1pbGxpc2Vjb25kcwoJCX0KCgkJYXJyYXlbbGVuZ3RoIC0gMV0gPSBJbmZpbml0eTsKCX0KCglmdW5jdGlvbiBtYXBJbmRpY2VzIChzb3VyY2UsIGluZGljZXMpIHsKCQl2YXIgb3V0ID0gW10sIGk7CgoJCWZvciAoaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7CgkJCW91dFtpXSA9IHNvdXJjZVtpbmRpY2VzW2ldXTsKCQl9CgoJCXJldHVybiBvdXQ7Cgl9CgoJZnVuY3Rpb24gdW5wYWNrIChzdHJpbmcpIHsKCQl2YXIgZGF0YSA9IHN0cmluZy5zcGxpdCgnfCcpLAoJCQlvZmZzZXRzID0gZGF0YVsyXS5zcGxpdCgnICcpLAoJCQlpbmRpY2VzID0gZGF0YVszXS5zcGxpdCgnJyksCgkJCXVudGlscyAgPSBkYXRhWzRdLnNwbGl0KCcgJyk7CgoJCWFycmF5VG9JbnQob2Zmc2V0cyk7CgkJYXJyYXlUb0ludChpbmRpY2VzKTsKCQlhcnJheVRvSW50KHVudGlscyk7CgoJCWludFRvVW50aWwodW50aWxzLCBpbmRpY2VzLmxlbmd0aCk7CgoJCXJldHVybiB7CgkJCW5hbWUgICAgOiBkYXRhWzBdLAoJCQlhYmJycyAgIDogbWFwSW5kaWNlcyhkYXRhWzFdLnNwbGl0KCcgJyksIGluZGljZXMpLAoJCQlvZmZzZXRzIDogbWFwSW5kaWNlcyhvZmZzZXRzLCBpbmRpY2VzKSwKCQkJdW50aWxzICA6IHVudGlscwoJCX07Cgl9CgoJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJCVpvbmUgb2JqZWN0CgkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJZnVuY3Rpb24gWm9uZSAocGFja2VkU3RyaW5nKSB7CgkJaWYgKHBhY2tlZFN0cmluZykgewoJCQl0aGlzLl9zZXQodW5wYWNrKHBhY2tlZFN0cmluZykpOwoJCX0KCX0KCglab25lLnByb3RvdHlwZSA9IHsKCQlfc2V0IDogZnVuY3Rpb24gKHVucGFja2VkKSB7CgkJCXRoaXMubmFtZSAgICA9IHVucGFja2VkLm5hbWU7CgkJCXRoaXMuYWJicnMgICA9IHVucGFja2VkLmFiYnJzOwoJCQl0aGlzLnVudGlscyAgPSB1bnBhY2tlZC51bnRpbHM7CgkJCXRoaXMub2Zmc2V0cyA9IHVucGFja2VkLm9mZnNldHM7CgkJfSwKCgkJX2luZGV4IDogZnVuY3Rpb24gKHRpbWVzdGFtcCkgewoJCQl2YXIgdGFyZ2V0ID0gK3RpbWVzdGFtcCwKCQkJCXVudGlscyA9IHRoaXMudW50aWxzLAoJCQkJaTsKCgkJCWZvciAoaSA9IDA7IGkgPCB1bnRpbHMubGVuZ3RoOyBpKyspIHsKCQkJCWlmICh0YXJnZXQgPCB1bnRpbHNbaV0pIHsKCQkJCQlyZXR1cm4gaTsKCQkJCX0KCQkJfQoJCX0sCgoJCXBhcnNlIDogZnVuY3Rpb24gKHRpbWVzdGFtcCkgewoJCQl2YXIgdGFyZ2V0ICA9ICt0aW1lc3RhbXAsCgkJCQlvZmZzZXRzID0gdGhpcy5vZmZzZXRzLAoJCQkJdW50aWxzICA9IHRoaXMudW50aWxzLAoJCQkJbWF4ICAgICA9IHVudGlscy5sZW5ndGggLSAxLAoJCQkJb2Zmc2V0LCBvZmZzZXROZXh0LCBvZmZzZXRQcmV2LCBpOwoKCQkJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CgkJCQlvZmZzZXQgICAgID0gb2Zmc2V0c1tpXTsKCQkJCW9mZnNldE5leHQgPSBvZmZzZXRzW2kgKyAxXTsKCQkJCW9mZnNldFByZXYgPSBvZmZzZXRzW2kgPyBpIC0gMSA6IGldOwoKCQkJCWlmIChvZmZzZXQgPCBvZmZzZXROZXh0ICYmIHR6Lm1vdmVBbWJpZ3VvdXNGb3J3YXJkKSB7CgkJCQkJb2Zmc2V0ID0gb2Zmc2V0TmV4dDsKCQkJCX0gZWxzZSBpZiAob2Zmc2V0ID4gb2Zmc2V0UHJldiAmJiB0ei5tb3ZlSW52YWxpZEZvcndhcmQpIHsKCQkJCQlvZmZzZXQgPSBvZmZzZXRQcmV2OwoJCQkJfQoKCQkJCWlmICh0YXJnZXQgPCB1bnRpbHNbaV0gLSAob2Zmc2V0ICogNjAwMDApKSB7CgkJCQkJcmV0dXJuIG9mZnNldHNbaV07CgkJCQl9CgkJCX0KCgkJCXJldHVybiBvZmZzZXRzW21heF07CgkJfSwKCgkJYWJiciA6IGZ1bmN0aW9uIChtb20pIHsKCQkJcmV0dXJuIHRoaXMuYWJicnNbdGhpcy5faW5kZXgobW9tKV07CgkJfSwKCgkJb2Zmc2V0IDogZnVuY3Rpb24gKG1vbSkgewoJCQlyZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KG1vbSldOwoJCX0KCX07CgoJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJCUdsb2JhbCBNZXRob2RzCgkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJZnVuY3Rpb24gbm9ybWFsaXplTmFtZSAobmFtZSkgewoJCXJldHVybiAobmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cLy9nLCAnXycpOwoJfQoKCWZ1bmN0aW9uIGFkZFpvbmUgKHBhY2tlZCkgewoJCXZhciBpLCB6b25lLCB6b25lTmFtZTsKCgkJaWYgKHR5cGVvZiBwYWNrZWQgPT09ICJzdHJpbmciKSB7CgkJCXBhY2tlZCA9IFtwYWNrZWRdOwoJCX0KCgkJZm9yIChpID0gMDsgaSA8IHBhY2tlZC5sZW5ndGg7IGkrKykgewoJCQl6b25lID0gbmV3IFpvbmUocGFja2VkW2ldKTsKCQkJem9uZU5hbWUgPSBub3JtYWxpemVOYW1lKHpvbmUubmFtZSk7CgkJCXpvbmVzW3pvbmVOYW1lXSA9IHpvbmU7CgkJCXVwZ3JhZGVMaW5rc1RvWm9uZXMoem9uZU5hbWUpOwoJCX0KCX0KCglmdW5jdGlvbiBnZXRab25lIChuYW1lKSB7CgkJcmV0dXJuIHpvbmVzW25vcm1hbGl6ZU5hbWUobmFtZSldIHx8IG51bGw7Cgl9CgoJZnVuY3Rpb24gZ2V0TmFtZXMgKCkgewoJCXZhciBpLCBvdXQgPSBbXTsKCgkJZm9yIChpIGluIHpvbmVzKSB7CgkJCWlmICh6b25lcy5oYXNPd25Qcm9wZXJ0eShpKSAmJiB6b25lc1tpXSkgewoJCQkJb3V0LnB1c2goem9uZXNbaV0ubmFtZSk7CgkJCX0KCQl9CgoJCXJldHVybiBvdXQuc29ydCgpOwoJfQoKCWZ1bmN0aW9uIGFkZExpbmsgKGFsaWFzZXMpIHsKCQl2YXIgaSwgYWxpYXM7CgoJCWlmICh0eXBlb2YgYWxpYXNlcyA9PT0gInN0cmluZyIpIHsKCQkJYWxpYXNlcyA9IFthbGlhc2VzXTsKCQl9CgoJCWZvciAoaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsrKSB7CgkJCWFsaWFzID0gYWxpYXNlc1tpXS5zcGxpdCgnfCcpOwoJCQlwdXNoTGluayhhbGlhc1swXSwgYWxpYXNbMV0pOwoJCQlwdXNoTGluayhhbGlhc1sxXSwgYWxpYXNbMF0pOwoJCX0KCX0KCglmdW5jdGlvbiB1cGdyYWRlTGlua3NUb1pvbmVzICh6b25lTmFtZSkgewoJCWlmICghbGlua3Nbem9uZU5hbWVdKSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciBpLAoJCQl6b25lID0gem9uZXNbem9uZU5hbWVdLAoJCQlsaW5rTmFtZXMgPSBsaW5rc1t6b25lTmFtZV07CgoJCWZvciAoaSA9IDA7IGkgPCBsaW5rTmFtZXMubGVuZ3RoOyBpKyspIHsKCQkJY29weVpvbmVXaXRoTmFtZSh6b25lLCBsaW5rTmFtZXNbaV0pOwoJCX0KCgkJbGlua3Nbem9uZU5hbWVdID0gbnVsbDsKCX0KCglmdW5jdGlvbiBjb3B5Wm9uZVdpdGhOYW1lICh6b25lLCBuYW1lKSB7CgkJdmFyIGxpbmtab25lID0gem9uZXNbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBuZXcgWm9uZSgpOwoJCWxpbmtab25lLl9zZXQoem9uZSk7CgkJbGlua1pvbmUubmFtZSA9IG5hbWU7Cgl9CgoJZnVuY3Rpb24gcHVzaExpbmsgKHpvbmVOYW1lLCBsaW5rTmFtZSkgewoJCXpvbmVOYW1lID0gbm9ybWFsaXplTmFtZSh6b25lTmFtZSk7CgoJCWlmICh6b25lc1t6b25lTmFtZV0pIHsKCQkJY29weVpvbmVXaXRoTmFtZSh6b25lc1t6b25lTmFtZV0sIGxpbmtOYW1lKTsKCQl9IGVsc2UgewoJCQlsaW5rc1t6b25lTmFtZV0gPSBsaW5rc1t6b25lTmFtZV0gfHwgW107CgkJCWxpbmtzW3pvbmVOYW1lXS5wdXNoKGxpbmtOYW1lKTsKCQl9Cgl9CgoJZnVuY3Rpb24gbG9hZERhdGEgKGRhdGEpIHsKCQlhZGRab25lKGRhdGEuem9uZXMpOwoJCWFkZExpbmsoZGF0YS5saW5rcyk7CgkJdHouZGF0YVZlcnNpb24gPSBkYXRhLnZlcnNpb247Cgl9CgoJZnVuY3Rpb24gem9uZUV4aXN0cyAobmFtZSkgewoJCWlmICghem9uZUV4aXN0cy5kaWRTaG93RXJyb3IpIHsKCQkJem9uZUV4aXN0cy5kaWRTaG93RXJyb3IgPSB0cnVlOwoJCQkJbG9nRXJyb3IoIm1vbWVudC50ei56b25lRXhpc3RzKCciICsgbmFtZSArICInKSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mICFtb21lbnQudHouem9uZSgnIiArIG5hbWUgKyAiJykiKTsKCQl9CgkJcmV0dXJuICEhZ2V0Wm9uZShuYW1lKTsKCX0KCglmdW5jdGlvbiBuZWVkc09mZnNldCAobSkgewoJCXJldHVybiAhIShtLl9hICYmIChtLl90em0gPT09IHVuZGVmaW5lZCkpOwoJfQoKCWZ1bmN0aW9uIGxvZ0Vycm9yIChtZXNzYWdlKSB7CgkJaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykgewoJCQljb25zb2xlLmVycm9yKG1lc3NhZ2UpOwoJCX0KCX0KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkJbW9tZW50LnR6IG5hbWVzcGFjZQoJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCWZ1bmN0aW9uIHR6ICgpIHsKCQl2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgLTEpLAoJCQluYW1lID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSwKCQkJem9uZSA9IGdldFpvbmUobmFtZSksCgkJCW91dCAgPSBtb21lbnQudXRjLmFwcGx5KG51bGwsIGFyZ3MpOwoKCQlpZiAoem9uZSAmJiBuZWVkc09mZnNldChvdXQpKSB7CgkJCW91dC5hZGQoem9uZS5wYXJzZShvdXQpLCAnbWludXRlcycpOwoJCX0KCgkJb3V0LnR6KG5hbWUpOwoKCQlyZXR1cm4gb3V0OwoJfQoKCXR6LnZlcnNpb24gICAgICA9IFZFUlNJT047Cgl0ei5kYXRhVmVyc2lvbiAgPSAnJzsKCXR6Ll96b25lcyAgICAgICA9IHpvbmVzOwoJdHouX2xpbmtzICAgICAgID0gbGlua3M7Cgl0ei5hZGQgICAgICAgICAgPSBhZGRab25lOwoJdHoubGluayAgICAgICAgID0gYWRkTGluazsKCXR6LmxvYWQgICAgICAgICA9IGxvYWREYXRhOwoJdHouem9uZSAgICAgICAgID0gZ2V0Wm9uZTsKCXR6LnpvbmVFeGlzdHMgICA9IHpvbmVFeGlzdHM7IC8vIGRlcHJlY2F0ZWQgaW4gMC4xLjAKCXR6Lm5hbWVzICAgICAgICA9IGdldE5hbWVzOwoJdHouWm9uZSAgICAgICAgID0gWm9uZTsKCXR6LnVucGFjayAgICAgICA9IHVucGFjazsKCXR6LnVucGFja0Jhc2U2MCA9IHVucGFja0Jhc2U2MDsKCXR6Lm5lZWRzT2Zmc2V0ICA9IG5lZWRzT2Zmc2V0OwoJdHoubW92ZUludmFsaWRGb3J3YXJkICAgPSB0cnVlOwoJdHoubW92ZUFtYmlndW91c0ZvcndhcmQgPSBmYWxzZTsKCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkJSW50ZXJmYWNlIHdpdGggTW9tZW50LmpzCgkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJdmFyIGZuID0gbW9tZW50LmZuOwoKCW1vbWVudC50eiA9IHR6OwoKCW1vbWVudC51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAobW9tLCBrZWVwVGltZSkgewoJCXZhciBvZmZzZXQ7CgkJaWYgKG1vbS5feikgewoJCQlvZmZzZXQgPSBtb20uX3oub2Zmc2V0KG1vbSk7CgkJCWlmIChNYXRoLmFicyhvZmZzZXQpIDwgMTYpIHsKCQkJCW9mZnNldCA9IG9mZnNldCAvIDYwOwoJCQl9CgkJCW1vbS56b25lKG9mZnNldCwga2VlcFRpbWUpOwoJCX0KCX07CgoJZm4udHogPSBmdW5jdGlvbiAobmFtZSkgewoJCWlmIChuYW1lKSB7CgkJCXRoaXMuX3ogPSBnZXRab25lKG5hbWUpOwoJCQlpZiAodGhpcy5feikgewoJCQkJbW9tZW50LnVwZGF0ZU9mZnNldCh0aGlzKTsKCQkJfSBlbHNlIHsKCQkJCWxvZ0Vycm9yKCJNb21lbnQgVGltZXpvbmUgaGFzIG5vIGRhdGEgZm9yICIgKyBuYW1lICsgIi4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vdGltZXpvbmUvZG9jcy8jL2RhdGEtbG9hZGluZy8uIik7CgkJCX0KCQkJcmV0dXJuIHRoaXM7CgkJfQoJCWlmICh0aGlzLl96KSB7IHJldHVybiB0aGlzLl96Lm5hbWU7IH0KCX07CgoJZnVuY3Rpb24gYWJicldyYXAgKG9sZCkgewoJCXJldHVybiBmdW5jdGlvbiAoKSB7CgkJCWlmICh0aGlzLl96KSB7IHJldHVybiB0aGlzLl96LmFiYnIodGhpcyk7IH0KCQkJcmV0dXJuIG9sZC5jYWxsKHRoaXMpOwoJCX07Cgl9CgoJZnVuY3Rpb24gcmVzZXRab25lV3JhcCAob2xkKSB7CgkJcmV0dXJuIGZ1bmN0aW9uICgpIHsKCQkJdGhpcy5feiA9IG51bGw7CgkJCXJldHVybiBvbGQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCQl9OwoJfQoKCWZuLnpvbmVOYW1lID0gYWJicldyYXAoZm4uem9uZU5hbWUpOwoJZm4uem9uZUFiYnIgPSBhYmJyV3JhcChmbi56b25lQWJicik7Cglmbi51dGMgICAgICA9IHJlc2V0Wm9uZVdyYXAoZm4udXRjKTsKCgkvLyBDbG9uaW5nIGEgbW9tZW50IHNob3VsZCBpbmNsdWRlIHRoZSBfeiBwcm9wZXJ0eS4KCXZhciBtb21lbnRQcm9wZXJ0aWVzID0gbW9tZW50Lm1vbWVudFByb3BlcnRpZXM7CglpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1vbWVudFByb3BlcnRpZXMpID09PSAnW29iamVjdCBBcnJheV0nKSB7CgkJLy8gbW9tZW50IDIuOC4xKwoJCW1vbWVudFByb3BlcnRpZXMucHVzaCgnX3onKTsKCQltb21lbnRQcm9wZXJ0aWVzLnB1c2goJ19hJyk7Cgl9IGVsc2UgaWYgKG1vbWVudFByb3BlcnRpZXMpIHsKCQkvLyBtb21lbnQgMi43LjAKCQltb21lbnRQcm9wZXJ0aWVzLl96ID0gbnVsbDsKCX0KCglsb2FkRGF0YSh7CgkJInZlcnNpb24iOiAiMjAxNGoiLAoJCSJ6b25lcyI6IFsKCQkJIkFmcmljYS9BYmlkamFufExNVCBHTVR8Zy44IDB8MDF8LTJsZFhILlEiLAoJCQkiQWZyaWNhL0FjY3JhfExNVCBHTVQgR0hTVHwuUSAwIC1rfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMjZCYlguOCA2dHpYLjggTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFDMGsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFDMGsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFDMGsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFDMGsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFDMGsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIiwKCQkJIkFmcmljYS9BZGRpc19BYmFiYXxMTVQgRUFUIEJFQVQgQkVBVVR8LTJyLmcgLTMwIC0ydSAtMkp8MDEyMzF8LTFGM0NyLmcgM0R6ci5nIG9rTXUgTUZYSiIsCgkJCSJBZnJpY2EvQWxnaWVyc3xQTVQgV0VUIFdFU1QgQ0VUIENFU1R8LTkubCAwIC0xMCAtMTAgLTIwfDAxMjEyMTIxMjEyMTIxMjEzNDM0MzEzMTIxMjM0MzEyMTN8LTJuY285LmwgY05iOS5sIEhBMCAxOUEwIDFpTTAgMTFjMCAxb28wIFdvMCAxcmMwIFFNMCAxRU0wIFVNMCBEQTAgSW1vMCByZDAgRGUwIDlYejAgMWZiMCAxYXAwIDE2SzAgMnlvMCBtRXAwIGh3TDAganhBMCAxMUEwIGREZDAgMTdiMCAxMUIwIDFjTjAgMkR5MCAxY04wIDFmQjAgMWNMMCIsCgkJCSJBZnJpY2EvQmFuZ3VpfExNVCBXQVR8LWQuQSAtMTB8MDF8LTIyeTBkLkEiLAoJCQkiQWZyaWNhL0Jpc3NhdXxMTVQgV0FUIEdNVHwxMi5rIDEwIDB8MDEyfC0ybGRXVi5FIDJ4b25WLkUiLAoJCQkiQWZyaWNhL0JsYW50eXJlfExNVCBDQVR8LTJhLmsgLTIwfDAxfC0yR0plYS5rIiwKCQkJIkFmcmljYS9DYWlyb3xFRVQgRUVTVHwtMjAgLTMwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMWJJTzAgdmIwIDFpcDAgMTF6MCAxaU4wIDFuejAgMTJwMCAxcHowIDEwTjAgMXB6MCAxNnAwIDFqejAgczNkMCBWejAgMW9OMCAxMWIwIDFvTzAgMTBOMCAxcHowIDEwTjAgMXBiMCAxME4wIDFwYjAgMTBOMCAxcGIwIDEwTjAgMXB6MCAxME4wIDFwYjAgMTBOMCAxcGIwIDExZDAgMW9MMCAxMWQwIDFwYjAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFvTDAgMTFkMCAxcGIwIDExZDAgMW9MMCAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMXBiMCAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFwYjAgMTFkMCAxb0wwIDExZDAgMVdMMCByZDAgMVJ6MCB3cDAgMXBiMCAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFwYjAgMTFkMCAxcUwwIFhkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFwYjAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFueTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCBXTDAgMXFOMCBSYjAgMXdwMCBPbjAgMXpkMCBMejAgMUVOMCBGYjAgYzEwIDhuMCA4TmQwIGdMMCBlMTAgbW4wIDFvMTAganowIGdOMCBwYjAgMXFOMCBkWDAgZTEwIHh6MCAxbzEwIGJiMCBlMTAgQW4wIDFvMTAgNXowIGUxMCBGWDAgMW8xMCAyTDAgZTEwIElMMCAxQzEwIEx6MCAxd3AwIFRYMCAxcU4wIFdMMCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCIsCgkJCSJBZnJpY2EvQ2FzYWJsYW5jYXxMTVQgV0VUIFdFU1QgQ0VUfHUuayAwIC0xMCAtMTB8MDEyMTIxMjEyMTIxMjEyMTIxMzEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ01udC5FIDEzMEx0LkUgcmIwIERkMCBkVmIwIGI2cDAgVFgwIEVvQjAgTEwwIGduZDAgcnowIDQzZDAgQUwwIDFOZDAgWFgwIDFDcDAgcHowIGRFcDAgNG1uMCBTeU4wIEFMMCAxTmQwIHduMCAxRkIwIERiMCAxemQwIEx6MCAxTmYwIHdNMCBjbzAgZ28wIDFvMDAgczAwIGRBMCB2YzAgMTFBMCBBMDAgZTAwIHkwMCAxMUEwIHVvMCBlMDAgREEwIDExQTAgckEwIGUwMCBKYzAgV00wIG0wMCBnTTAgTTAwIFdNMCBqYzAgZTAwIFJBMCAxMUEwIGRBMCBlMDAgVW8wIDExQTAgODAwIGdNMCBYYzAgMTFBMCA1YzAgZTAwIDE3QTAgV00wIDJvMCBlMDAgMWFvMCAxOUEwIDFnMDAgMTZNMCAxaU0wIDE0MDAgMWxBMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcW8wIDEyMDAgMWtNMCAxNE0wIDFpMDAiLAoJCQkiQWZyaWNhL0NldXRhfFdFVCBXRVNUIENFVCBDRVNUfDAgLTEwIC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0yNUtOMCAxMXowIGRyZDAgMThvMCAzSTAwIDE3YzAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxeTdwMCBMTDAgZ25kMCByejAgNDNkMCBBTDAgMU5kMCBYWDAgMUNwMCBwejAgZEVwMCA0VkIwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJBZnJpY2EvRWxfQWFpdW58TE1UIFdBVCBXRVQgV0VTVHxRLk0gMTAgMCAtMTB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMXJEejcuYyAxR1ZBNy5jIDZMMCBBTDAgMU5kMCBYWDAgMUNwMCBwejAgMWNCQjAgQUwwIDFOZDAgd24wIDFGQjAgRGIwIDF6ZDAgTHowIDFOZjAgd00wIGNvMCBnbzAgMW8wMCBzMDAgZEEwIHZjMCAxMUEwIEEwMCBlMDAgeTAwIDExQTAgdW8wIGUwMCBEQTAgMTFBMCByQTAgZTAwIEpjMCBXTTAgbTAwIGdNMCBNMDAgV00wIGpjMCBlMDAgUkEwIDExQTAgZEEwIGUwMCBVbzAgMTFBMCA4MDAgZ00wIFhjMCAxMUEwIDVjMCBlMDAgMTdBMCBXTTAgMm8wIGUwMCAxYW8wIDE5QTAgMWcwMCAxNk0wIDFpTTAgMTQwMCAxbEEwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxbzAgMTIwMCAxa00wIDE0TTAgMWkwMCIsCgkJCSJBZnJpY2EvSm9oYW5uZXNidXJnfFNBU1QgU0FTVCBTQVNUfC0xdSAtMjAgLTMwfDAxMjEyMXwtMkdKZHUgMUFqZHUgMWNMMCAxY04wIDFjTDAiLAoJCQkiQWZyaWNhL0p1YmF8TE1UIENBVCBDQVNUIEVBVHwtMmEuOCAtMjAgLTMwIC0zMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxM3wtMXlXMmEuOCAxekswYS44IDE2TDAgMWlOMCAxN2IwIDFqZDAgMTdiMCAxaXAwIDE3ejAgMWkxMCAxN1gwIDFoQjAgMThuMCAxaGQwIDE5YjAgMWdwMCAxOXowIDFpTjAgMTdiMCAxaXAwIDE3ejAgMWkxMCAxOG4wIDFoZDAgMThMMCAxZ04wIDE5YjAgMWdwMCAxOXowIDFpTjAgMTd6MCAxaTEwIDE3WDAgeUdkMCIsCgkJCSJBZnJpY2EvTW9ucm92aWF8TU1UIExSVCBHTVR8SC44IEkudSAwfDAxMnwtMjNMemcuUSAyOXMwMS5tIiwKCQkJIkFmcmljYS9OZGphbWVuYXxMTVQgV0FUIFdBU1R8LTEwLmMgLTEwIC0yMHwwMTIxfC0ybGUxMC5jIDJKM2MwLmMgV24wIiwKCQkJIkFmcmljYS9Ucmlwb2xpfExNVCBDRVQgQ0VTVCBFRVR8LVEuSSAtMTAgLTIwIC0yMHwwMTIxMjEyMTMxMjEyMTIxMjEyMTIxMjEyMTMxMjMxMjN8LTIxSmNRLkkgMWhuQlEuSSB2eDAgNGlQMCB4eDAgNGVOMCBCYjAgN2lwMCBVMG4wIEExMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFkYjAgMWVOMCAxYmIwIDFlMTAgMWNMMCAxYzEwIDFkYjAgMWRkMCAxZGIwIDFjTjAgMWRiMCAxcTEwIGZBbjAgMWVwMCAxZGIwIEFLcTAgVEEwIDFvMDAiLAoJCQkiQWZyaWNhL1R1bmlzfFBNVCBDRVQgQ0VTVHwtOS5sIC0xMCAtMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMm5jbzkubCAxOHBhOS5sIDFxTTAgREEwIDNUYzAgMTFCMCAxemUwIFdNMCA3ejAgM2QwIDE0TDAgMWNOMCAxZjkwIDFhcjAgMTZKMCAxZ1hCMCBXTTAgMXJBMCAxMWMwIG53bzAgS28wIDFjTTAgMWNNMCAxckEwIDEwTTAgenVNMCAxME4wIDFhTjAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAiLAoJCQkiQWZyaWNhL1dpbmRob2VrfFNXQVQgU0FTVCBTQVNUIENBVCBXQVQgV0FTVHwtMXUgLTIwIC0zMCAtMjAgLTEwIC0yMHwwMTIxMzQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDV8LTJHSmR1IDFBamR1IDFjTDAgMVNxTDAgOU5BMCAxMUQwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCIsCgkJCSJBbWVyaWNhL0FkYWt8TlNUIE5XVCBOUFQgQlNUIEJEVCBBSFNUIEhBU1QgSEFEVHxiMCBhMCBhMCBiMCBhMCBhMCBhMCA5MHwwMTIwMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0NTY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzZ8LTE3U1gwIDh3VzAgaUIwIFFsYjAgNTJPMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIGNtMCAxMHEwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvQW5jaG9yYWdlfENBVCBDQVdUIENBUFQgQUhTVCBBSERUIFlTVCBBS1NUIEFLRFR8YTAgOTAgOTAgYTAgOTAgOTAgOTAgODB8MDEyMDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDU2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2fC0xN1QwMCA4d1gwIGlBMCBRbGIwIDUyTzAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCBjbTAgMTBxMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL0FuZ3VpbGxhfExNVCBBU1R8NDYuNCA0MHwwMXwtMmtOdlIuVSIsCgkJCSJBbWVyaWNhL0FudGlndWF8TE1UIEVTVCBBU1R8NDcuYyA1MCA0MHwwMTJ8LTJrTnZRLk0gMXl4QVEuTSIsCgkJCSJBbWVyaWNhL0FyYWd1YWluYXxMTVQgQlJUIEJSU1R8M2MuTSAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x3TC5jIEhkS0wuYyAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCAxRU4wIEZYMCAxSEIwIEx6MCBkTU4wIEx6MCAxemQwIFJiMCAxd04wIFduMCAxdEIwIFJiMCAxdEIwIFdMMCAxdEIwIFJiMCAxemQwIE9uMCAxSEIwIEZYMCBueTEwIEx6MCIsCgkJCSJBbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXN8Q01UIEFSVCBBUlNUIEFSVCBBUlNUfDRnLk0gNDAgMzAgMzAgMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQzNDM0MzQzNDM0MzIzNDM0M3wtMjBVSEguYyBwS25ILmMgTW4wIDFpTjAgVGIwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIE1OMCAyanowIE1OMCA0bFgwIHUxMCA1TGIwIDFwQjAgRm56MCB1MTAgdUwwIDF2ZDAgU0wwIDF2ZDAgU0wwIDF2ZDAgMTd6MCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgYXNuMCBEYjAgenZkMCBCejAgMXRCMCBUWDAgMXdwMCBSYjAgMXdwMCBSYjAgMXdwMCBUWDAgZzBwMCAxME0wIGozYzAgdUwwIDFxTjAgV0wwIiwKCQkJIkFtZXJpY2EvQXJnZW50aW5hL0NhdGFtYXJjYXxDTVQgQVJUIEFSU1QgQVJUIEFSU1QgV0FSVHw0Zy5NIDQwIDMwIDMwIDIwIDQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTM0MzQzNDM0NTQzNDMyMzUzNDN8LTIwVUhILmMgcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgVFgwIDF3cDAgUmIwIDF3cTAgUmEwIDF3cDAgVFgwIGcwcDAgMTBNMCBha28wIDdCMCA4emIwIHVMMCIsCgkJCSJBbWVyaWNhL0FyZ2VudGluYS9Db3Jkb2JhfENNVCBBUlQgQVJTVCBBUlQgQVJTVCBXQVJUfDRnLk0gNDAgMzAgMzAgMjAgNDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQzNDM0MzQ1NDM0MzIzNDM0M3wtMjBVSEguYyBwS25ILmMgTW4wIDFpTjAgVGIwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIE1OMCAyanowIE1OMCA0bFgwIHUxMCA1TGIwIDFwQjAgRm56MCB1MTAgdUwwIDF2ZDAgU0wwIDF2ZDAgU0wwIDF2ZDAgMTd6MCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgYXNuMCBEYjAgenZkMCBCejAgMXRCMCBUWDAgMXdwMCBSYjAgMXdxMCBSYTAgMXdwMCBUWDAgZzBwMCAxME0wIGozYzAgdUwwIDFxTjAgV0wwIiwKCQkJIkFtZXJpY2EvQXJnZW50aW5hL0p1anV5fENNVCBBUlQgQVJTVCBBUlQgQVJTVCBXQVJUIFdBUlNUfDRnLk0gNDAgMzAgMzAgMjAgNDAgMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQzNDM0NTY1NDM0MzIzNDN8LTIwVUhILmMgcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgVFgwIDF6ZTAgVFgwIDFsZDAgV0swIDF3cDAgVFgwIGcwcDAgMTBNMCBqM2MwIHVMMCIsCgkJCSJBbWVyaWNhL0FyZ2VudGluYS9MYV9SaW9qYXxDTVQgQVJUIEFSU1QgQVJUIEFSU1QgV0FSVHw0Zy5NIDQwIDMwIDMwIDIwIDQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTM0MzQzNDM0NTM0MzQzMjM1MzQzfC0yMFVISC5jIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxd3AwIFFuMCBxTzAgMTZuMCBSYjAgMXdwMCBUWDAgZzBwMCAxME0wIGFrbzAgN0IwIDh6YjAgdUwwIiwKCQkJIkFtZXJpY2EvQXJnZW50aW5hL01lbmRvemF8Q01UIEFSVCBBUlNUIEFSVCBBUlNUIFdBUlQgV0FSU1R8NGcuTSA0MCAzMCAzMCAyMCA0MCAzMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzNDM0MzQ1NjU2NTQzMjM1MzQzfC0yMFVISC5jIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxdTIwIFNMMCAxdmQwIFRiMCAxd3AwIFRXMCBnMHAwIDEwTTAgYWdNMCBPcDAgN1RYMCB1TDAiLAoJCQkiQW1lcmljYS9BcmdlbnRpbmEvUmlvX0dhbGxlZ29zfENNVCBBUlQgQVJTVCBBUlQgQVJTVCBXQVJUfDRnLk0gNDAgMzAgMzAgMjAgNDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQzNDM0MzQzNDM0MzIzNTM0M3wtMjBVSEguYyBwS25ILmMgTW4wIDFpTjAgVGIwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIE1OMCAyanowIE1OMCA0bFgwIHUxMCA1TGIwIDFwQjAgRm56MCB1MTAgdUwwIDF2ZDAgU0wwIDF2ZDAgU0wwIDF2ZDAgMTd6MCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgYXNuMCBEYjAgenZkMCBCejAgMXRCMCBUWDAgMXdwMCBSYjAgMXdwMCBSYjAgMXdwMCBUWDAgZzBwMCAxME0wIGFrbzAgN0IwIDh6YjAgdUwwIiwKCQkJIkFtZXJpY2EvQXJnZW50aW5hL1NhbHRhfENNVCBBUlQgQVJTVCBBUlQgQVJTVCBXQVJUfDRnLk0gNDAgMzAgMzAgMjAgNDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQzNDM0MzQ1NDM0MzIzNDN8LTIwVUhILmMgcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgVFgwIDF3cDAgUmIwIDF3cTAgUmEwIDF3cDAgVFgwIGcwcDAgMTBNMCBqM2MwIHVMMCIsCgkJCSJBbWVyaWNhL0FyZ2VudGluYS9TYW5fSnVhbnxDTVQgQVJUIEFSU1QgQVJUIEFSU1QgV0FSVHw0Zy5NIDQwIDMwIDMwIDIwIDQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTM0MzQzNDM0NTM0MzQzMjM1MzQzfC0yMFVISC5jIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxd3AwIFFuMCBxTzAgMTZuMCBSYjAgMXdwMCBUWDAgZzBwMCAxME0wIGFrMDAgbTEwIDhsYjAgdUwwIiwKCQkJIkFtZXJpY2EvQXJnZW50aW5hL1Nhbl9MdWlzfENNVCBBUlQgQVJTVCBBUlQgQVJTVCBXQVJUIFdBUlNUfDRnLk0gNDAgMzAgMzAgMjAgNDAgMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQzNDM0NTY1MzYzNTM0NjU2NTN8LTIwVUhILmMgcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgWFgwIDFxMjAgU0wwIEFOMCBraW4wIDEwTTAgYWswMCBtMTAgOGxiMCA4TDAgamQwIDFxTjAgV0wwIDFxTjAiLAoJCQkiQW1lcmljYS9BcmdlbnRpbmEvVHVjdW1hbnxDTVQgQVJUIEFSU1QgQVJUIEFSU1QgV0FSVHw0Zy5NIDQwIDMwIDMwIDIwIDQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTM0MzQzNDM0NTQzNDMyMzUzNDM0M3wtMjBVSEguYyBwS25ILmMgTW4wIDFpTjAgVGIwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIE1OMCAyanowIE1OMCA0bFgwIHUxMCA1TGIwIDFwQjAgRm56MCB1MTAgdUwwIDF2ZDAgU0wwIDF2ZDAgU0wwIDF2ZDAgMTd6MCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgYXNuMCBEYjAgenZkMCBCejAgMXRCMCBUWDAgMXdwMCBSYjAgMXdxMCBSYTAgMXdwMCBUWDAgZzBwMCAxME0wIGFrbzAgNE4wIDhCWDAgdUwwIDFxTjAgV0wwIiwKCQkJIkFtZXJpY2EvQXJnZW50aW5hL1VzaHVhaWF8Q01UIEFSVCBBUlNUIEFSVCBBUlNUIFdBUlR8NGcuTSA0MCAzMCAzMCAyMCA0MHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzNDM0MzQzNDM0MzQzMjM1MzQzfC0yMFVISC5jIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxd3AwIFJiMCAxd3AwIFJiMCAxd3AwIFRYMCBnMHAwIDEwTTAgYWpBMCA4cDAgOHpiMCB1TDAiLAoJCQkiQW1lcmljYS9BcnViYXxMTVQgQU5UIEFTVHw0ei5MIDR1IDQwfDAxMnwtMmtWN28uZCAyOEtMUy5kIiwKCQkJIkFtZXJpY2EvQXN1bmNpb258QU1UIFBZVCBQWVQgUFlTVHwzTy5FIDQwIDMwIDMwfDAxMjEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxM3wtMXg1ODkuayAxREtNOS5rIDNDTDAgM0RkMCAxMEwwIDFwQjAgMTBuMCAxcEIwIDEwbjAgMXBCMCAxY0wwIDFkZDAgMWRiMCAxZGQwIDFjTDAgMWRkMCAxY0wwIDFkZDAgMWNMMCAxZGQwIDFkYjAgMWRkMCAxY0wwIDFkZDAgMWNMMCAxZGQwIDFjTDAgMWRkMCAxZGIwIDFkZDAgMWNMMCAxbEIwIDE0bjAgMWRkMCAxY0wwIDFmZDAgV0wwIDFyZDAgMWFMMCAxZEIwIFh6MCAxcXAwIFhiMCAxcU4wIDEwTDAgMXJCMCBUWDAgMXRCMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxY0wwIFdOMCAxcUwwIDExQjAgMW5YMCAxaXAwIFdMMCAxcU4wIFdMMCAxcU4wIFdMMCAxdEIwIFRYMCAxdEIwIFRYMCAxdEIwIDE5WDAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCIsCgkJCSJBbWVyaWNhL0F0aWtva2FufENTVCBDRFQgQ1dUIENQVCBFU1R8NjAgNTAgNTAgNTAgNTB8MDEwMTIzNHwtMjVUUTAgMWluMCBSbmIwIDNqZTAgOHgzMCBpdzAiLAoJCQkiQW1lcmljYS9CYWhpYXxMTVQgQlJUIEJSU1R8MnkuNCAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmdseHAuVSBIZExwLlUgMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgMUVOMCBGWDAgMUhCMCBMejAgMUVOMCBMejAgMUMxMCBJTDAgMUhCMCBEYjAgMUhCMCBPbjAgMXpkMCBPbjAgMXpkMCBMejAgMXpkMCBSYjAgMXdOMCBXbjAgMXRCMCBSYjAgMXRCMCBXTDAgMXRCMCBSYjAgMXpkMCBPbjAgMUhCMCBGWDAgbDVCMCBSYjAiLAoJCQkiQW1lcmljYS9CYWhpYV9CYW5kZXJhc3xMTVQgTVNUIENTVCBQU1QgTURUIENEVHw3MSA3MCA2MCA4MCA2MCA1MHwwMTIxMjEyMTMxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyfC0xVVFGMCBkZUwwIDhsYzAgMTdjMCAxME0wIDFkZDAgb3RYMCBnbU4wIFAyTjAgMTNWZDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuVzAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAiLAoJCQkiQW1lcmljYS9CYXJiYWRvc3xMTVQgQk1UIEFTVCBBRFR8M1cudCAzVy50IDQwIDMwfDAxMjMyMzIzMjMyfC0xUTBJMS52IGpzTTAgMU9EQzEudiBJTDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxbGQwIDEzYjAiLAoJCQkiQW1lcmljYS9CZWxlbXxMTVQgQlJUIEJSU1R8M2QuVSAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHdLLjQgSGRLSy40IDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIiwKCQkJIkFtZXJpY2EvQmVsaXplfExNVCBDU1QgQ0hEVCBDRFR8NVEuTSA2MCA1dSA1MHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzEzMXwtMmtCdTcuYyBmUEE3LmMgT251IDF6Y3UgUmJ1IDF3b3UgUmJ1IDF3b3UgUmJ1IDF6Y3UgT251IDF6Y3UgT251IDF6Y3UgUmJ1IDF3b3UgUmJ1IDF3b3UgUmJ1IDF3b3UgUmJ1IDF6Y3UgT251IDF6Y3UgT251IDF6Y3UgUmJ1IDF3b3UgUmJ1IDF3b3UgUmJ1IDF6Y3UgT251IDF6Y3UgT251IDF6Y3UgT251IDF6Y3UgUmJ1IDF3b3UgUmJ1IDF3b3UgUmJ1IDF6Y3UgT251IDF6Y3UgT251IDF6Y3UgUmJ1IDF3b3UgUmJ1IDFmME11IHFuMCBseEIwIG1uMCIsCgkJCSJBbWVyaWNhL0JsYW5jLVNhYmxvbnxBU1QgQURUIEFXVCBBUFR8NDAgMzAgMzAgMzB8MDEwMjMwfC0yNVRTMCAxaW4wIFVHcDAgOHg1MCBpdTAiLAoJCQkiQW1lcmljYS9Cb2FfVmlzdGF8TE1UIEFNVCBBTVNUfDQyLkUgNDAgMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmdsdlYuayBIZEtWLmsgMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgc21wMCBXTDAgMXRCMCAyTDAiLAoJCQkiQW1lcmljYS9Cb2dvdGF8Qk1UIENPVCBDT1NUfDRVLmcgNTAgNDB8MDEyMXwtMmViNzMuSSAzOHlvMy5JIDJlbjAiLAoJCQkiQW1lcmljYS9Cb2lzZXxQU1QgUERUIE1TVCBNV1QgTVBUIE1EVHw4MCA3MCA3MCA2MCA2MCA2MHwwMTAxMDIzNDI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyfC0yNjFxMCAxblgwIDExQjAgMW5YMCA4QzEwIEpDTDAgOHgyMCBpeDAgUXdOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIERkMCAxS24wIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL0NhbWJyaWRnZV9CYXl8enp6IE1TVCBNV1QgTVBUIE1ERFQgTURUIENTVCBDRFQgRVNUfDAgNzAgNjAgNjAgNTAgNjAgNjAgNTAgNTB8MDEyMzE0MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTY3ODY1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MXwtMjFKYzAgUk85MCA4eDIwIGl4MCBMQ0wwIDFmQTAgemdPMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUEwIDFuWDAgMkswIFdRMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9DYW1wb19HcmFuZGV8TE1UIEFNVCBBTVNUfDNDLnMgNDAgMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyfC0yZ2x3bC53IEhkTGwudyAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCAxRU4wIEZYMCAxSEIwIEx6MCAxRU4wIEx6MCAxQzEwIElMMCAxSEIwIERiMCAxSEIwIE9uMCAxemQwIE9uMCAxemQwIEx6MCAxemQwIFJiMCAxd04wIFduMCAxdEIwIFJiMCAxdEIwIFdMMCAxdEIwIFJiMCAxemQwIE9uMCAxSEIwIEZYMCAxQzEwIEx6MCAxSXAwIEhYMCAxemQwIE9uMCAxSEIwIElMMCAxd3AwIE9uMCAxQzEwIEx6MCAxQzEwIE9uMCAxemQwIE9uMCAxemQwIFJiMCAxemQwIEx6MCAxQzEwIEx6MCAxQzEwIE9uMCAxemQwIE9uMCAxemQwIE9uMCAxemQwIE9uMCAxQzEwIEx6MCAxQzEwIEx6MCAxQzEwIE9uMCAxemQwIE9uMCAxemQwIFJiMCAxd3AwIE9uMCAxQzEwIEx6MCAxQzEwIE9uMCAxemQwIE9uMCAxemQwIE9uMCAxemQwIE9uMCAxQzEwIEx6MCAxQzEwIEx6MCAxQzEwIEx6MCAxQzEwIE9uMCAxemQwIFJiMCAxd3AwIE9uMCAxQzEwIEx6MCAxQzEwIE9uMCAxemQwIiwKCQkJIkFtZXJpY2EvQ2FuY3VufExNVCBDU1QgRVNUIEVEVCBDRFR8NUwuNCA2MCA1MCA0MCA1MHwwMTIzMjMyMzQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxfC0xVVFHMCAycTJvMCB5TEIwIDFsYjAgMTRwMCAxbGIwIDE0cDAgTHowIHhCMCAxNHAwIDFuWDAgMTFCMCAxblgwIDFmQjAgV0wwIDFmQjAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIiwKCQkJIkFtZXJpY2EvQ2FyYWNhc3xDTVQgVkVUIFZFVHw0ci5FIDR1IDQwfDAxMjF8LTJrVjd3LmsgMjhLTTIuayAxSXdPdSIsCgkJCSJBbWVyaWNhL0NheWVubmV8TE1UIEdGVCBHRlR8M3QuayA0MCAzMHwwMTJ8LTJtcnd1LkUgMmdXb3UuRSIsCgkJCSJBbWVyaWNhL0NheW1hbnxLTVQgRVNUfDU3LmIgNTB8MDF8LTJsMXVRLk4iLAoJCQkiQW1lcmljYS9DaGljYWdvfENTVCBDRFQgRVNUIENXVCBDUFR8NjAgNTAgNTAgNTAgNTB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDIwMTAxMDEwMTAxMDM0MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTI2MXMwIDFuWDAgMTFCMCAxblgwIDF3cDAgVFgwIFdOMCAxcUwwIDFjTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDExQjAgMUh6MCAxNHAwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgUkIwIDh4MzAgaXcwIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL0NoaWh1YWh1YXxMTVQgTVNUIENTVCBDRFQgTURUfDc0LmsgNzAgNjAgNTAgNjB8MDEyMTIxMjMyMzI0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MXwtMVVRRjAgZGVMMCA4bGMwIDE3YzAgMTBNMCAxZGQwIDJ6UU4wIDFsYjAgMTRwMCAxbGIwIDE0cTAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDFmQjAgV0wwIDFmQjAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIiwKCQkJIkFtZXJpY2EvQ29zdGFfUmljYXxTSk1UIENTVCBDRFR8NUEuZCA2MCA1MHwwMTIxMjEyMTIxfC0xWGQ2bi5MIDJsdTBuLkwgRGIwIDFLcDAgRGIwIHBSQjAgMTViMCAxa3AwIG1MMCIsCgkJCSJBbWVyaWNhL0NyZXN0b258TVNUIFBTVHw3MCA4MHwwMTB8LTI5RFIwIDQzQjAiLAoJCQkiQW1lcmljYS9DdWlhYmF8TE1UIEFNVCBBTVNUfDNJLmsgNDAgMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMmdsd2YuRSBIZExmLkUgMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgMUVOMCBGWDAgMUhCMCBMejAgMUVOMCBMejAgMUMxMCBJTDAgMUhCMCBEYjAgMUhCMCBPbjAgMXpkMCBPbjAgMXpkMCBMejAgMXpkMCBSYjAgMXdOMCBXbjAgMXRCMCBSYjAgMXRCMCBXTDAgMXRCMCBSYjAgMXpkMCBPbjAgMUhCMCBGWDAgNGExMCBIWDAgMXpkMCBPbjAgMUhCMCBJTDAgMXdwMCBPbjAgMUMxMCBMejAgMUMxMCBPbjAgMXpkMCBPbjAgMXpkMCBSYjAgMXpkMCBMejAgMUMxMCBMejAgMUMxMCBPbjAgMXpkMCBPbjAgMXpkMCBPbjAgMXpkMCBPbjAgMUMxMCBMejAgMUMxMCBMejAgMUMxMCBPbjAgMXpkMCBPbjAgMXpkMCBSYjAgMXdwMCBPbjAgMUMxMCBMejAgMUMxMCBPbjAgMXpkMCBPbjAgMXpkMCBPbjAgMXpkMCBPbjAgMUMxMCBMejAgMUMxMCBMejAgMUMxMCBMejAgMUMxMCBPbjAgMXpkMCBSYjAgMXdwMCBPbjAgMUMxMCBMejAgMUMxMCBPbjAgMXpkMCIsCgkJCSJBbWVyaWNhL0Rhbm1hcmtzaGF2bnxMTVQgV0dUIFdHU1QgR01UfDFlLkUgMzAgMjAgMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxM3wtMmE1V0ouayAyejVmSi5rIDE5VTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgREMwIiwKCQkJIkFtZXJpY2EvRGF3c29ufFlTVCBZRFQgWVdUIFlQVCBZRERUIFBTVCBQRFR8OTAgODAgODAgODAgNzAgODAgNzB8MDEwMTAyMzA0MDU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NXwtMjVUTjAgMWluMCAxbzEwIDEzVjAgU2VyMCA4eDAwIGl6MCBMQ0wwIDFmQTAganJBMCBmTmQwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL0Rhd3Nvbl9DcmVla3xQU1QgUERUIFBXVCBQUFQgTVNUfDgwIDcwIDcwIDcwIDcwfDAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTR8LTI1VE8wIDFpbjAgVUdwMCA4eDEwIGl5MCAzTkIwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgTUwwIiwKCQkJIkFtZXJpY2EvRGVudmVyfE1TVCBNRFQgTVdUIE1QVHw3MCA2MCA2MCA2MHwwMTAxMDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjYxcjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCBtbjAgT3JkMCA4eDIwIGl4MCBMQ04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9EZXRyb2l0fExNVCBDU1QgRVNUIEVXVCBFUFQgRURUfDV3LmIgNjAgNTAgNDAgNDAgNDB8MDEyMzQyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTJ8LTJDZ2lyLk4gcGVxci5OIDE1NkwwIDh4NDAgaXYwIDZmZDAgMTF6MCBKeTEwIFNMMCBkbkIwIDFjTDAgczEwIDFWejAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL0VkbW9udG9ufExNVCBNU1QgTURUIE1XVCBNUFR8N3guUSA3MCA2MCA2MCA2MHwwMTIxMjEyMTIxMjEyMTM0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMnlkNHEuOCBzaGRxLjggMWluMCAxN2QwIGh6MCAyZEIwIDFmejAgMWExMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCBJR04wIDh4MjAgaXgwIDNOQjAgMTF6MCBMRkIwIDFjTDAgM0NwMCAxY0wwIDY2TjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9FaXJ1bmVwZXxMTVQgQUNUIEFDU1QgQU1UfDRELnMgNTAgNDAgNDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzMXwtMmdsdmsudyBIZExrLncgMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgZFBCMCBPbjAgeVRkMCBkNVgwIiwKCQkJIkFtZXJpY2EvRWxfU2FsdmFkb3J8TE1UIENTVCBDRFR8NVUuTSA2MCA1MHwwMTIxMjF8LTFYaUczLmMgMkZ2YzMuYyBXTDAgMXFOMCBXTDAiLAoJCQkiQW1lcmljYS9FbnNlbmFkYXxMTVQgTVNUIFBTVCBQRFQgUFdUIFBQVHw3TS40IDcwIDgwIDcwIDcwIDcwfDAxMjEyMzI0NTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMVVRRTAgNFBYMCA4bU0wIDhsYzAgU04wIDFjTDAgcEhCMCA4M3IwIHpJMCA1TzEwIDFSejAgY09QMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIEJVcDAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCBVMTAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL0ZvcnRfV2F5bmV8Q1NUIENEVCBDV1QgQ1BUIEVTVCBFRFR8NjAgNTAgNTAgNTAgNTAgNDB8MDEwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDQwNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0yNjFzMCAxblgwIDExQjAgMW5YMCBRSTEwIERiMCBSQjAgOHgzMCBpdzAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDVUejAgMW8xMCBxTGIwIDFjTDAgMWNOMCAxY0wwIDFxaGQwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9Gb3J0YWxlemF8TE1UIEJSVCBCUlNUfDJ5IDMwIDIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHhxIEhkTHEgMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgMUVOMCBGWDAgMUhCMCBMejAgbnNwMCBXTDAgMXRCMCA1ejAgMm1OMCBPbjAiLAoJCQkiQW1lcmljYS9HbGFjZV9CYXl8TE1UIEFTVCBBRFQgQVdUIEFQVHwzWC5NIDQwIDMwIDMwIDMwfDAxMjEzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMklzSTAuYyBDd08wLmMgMWluMCBVR3AwIDh4NTAgaXUwIGlxMTAgMTF6MCBKZzEwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvR29kdGhhYnxMTVQgV0dUIFdHU1R8M3EuVSAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yYTVVeC40IDJ6NWR4LjQgMTlVMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkFtZXJpY2EvR29vc2VfQmF5fE5TVCBORFQgTlNUIE5EVCBOV1QgTlBUIEFTVCBBRFQgQUREVHwzdS5RIDJ1LlEgM3UgMnUgMnUgMnUgNDAgMzAgMjB8MDEwMjMyMzIzMjMyMzIzMjQ1MjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzI2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY4Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2fC0yNVRTdC44IDFpbjAgRFhiMCAySGJYLjggV0wwIDFxTjAgV0wwIDFxTjAgV0wwIDF0QjAgVFgwIDF0QjAgV0wwIDFxTjAgV0wwIDFxTjAgN1VIdSBpdHUgMXRCMCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXRCMCBXTDAgMWxkMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgUzEwIGcwdSAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRuMSAxbGIwIDE0cDAgMW5XMCAxMUMwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpjWCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL0dyYW5kX1R1cmt8S01UIEVTVCBFRFQgQVNUfDU3LmIgNTAgNDAgNDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyM3wtMmwxdVEuTiAySEhCUS5OIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9HdWF0ZW1hbGF8TE1UIENTVCBDRFR8NjIuNCA2MCA1MHwwMTIxMjEyMTIxfC0yNEtoVi5VIDJlZlhWLlUgQW4wIG10ZDAgTnowIGlmQjAgMTdiMCB6REIwIDExejAiLAoJCQkiQW1lcmljYS9HdWF5YXF1aWx8UU1UIEVDVHw1ZSA1MHwwMXwtMXlWU0siLAoJCQkiQW1lcmljYS9HdXlhbmF8TE1UIEdCR1QgR1lUIEdZVCBHWVR8M1EuRSAzSiAzSiAzMCA0MHwwMTIzNHwtMmR2VTcuayAyNEp6US5rIG1sYzAgQnhiZiIsCgkJCSJBbWVyaWNhL0hhbGlmYXh8TE1UIEFTVCBBRFQgQVdUIEFQVHw0ZS5vIDQwIDMwIDMwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJJc0hKLkEgeHp6Si5BIDFkYjAgM0kzMCAxaW4wIDNIWDAgSUwwIDFFMTAgTUwwIDF5TjAgUGIwIDFCZDAgTW4wIDFCZDAgUnowIDF3MTAgWGIwIDF3MTAgTFgwIDF3MTAgWGIwIDF3MTAgTHowIDFDMTAgSnowIDFFMTAgT0wwIDF5TjAgVW4wIDFxcDAgWGIwIDFxcDAgMTFYMCAxdzEwIEx6MCAxSEIwIExYMCAxQzEwIEZYMCAxdzEwIFhiMCAxcXAwIFhiMCAxQkIwIExYMCAxdGQwIFhiMCAxcXAwIFhiMCBSZjAgOHg1MCBpdTAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDNRcDAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAzUXAwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgNmkxMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9IYXZhbmF8SE1UIENTVCBDRFR8NXQuQSA1MCA0MHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTFNZXV1Lm8gNzJ6dS5vIE1MMCBzbGQwIEFuMCAxTmQwIERiMCAxTmQwIEFuMCA2RXAwIEFuMCAxTmQwIEFuMCBKRGQwIE1uMCAxQXAwIE9uMCAxZmQwIDExWDAgMXFOMCBXTDAgMXdwMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxNG4wIDFsZDAgMTRMMCAxa04wIDE1YjAgMWtwMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWZCMCAxMXowIDE0cDAgMW5YMCAxMUIwIDFuWDAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxNG4wIDFsZDAgMTRuMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMWExMCAxaW4wIDFhMTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxN2MwIDFvMDAgMTFBMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxMUEwIDZpMDAgUmMwIDF3bzAgVTAwIDF0QTAgUmMwIDF3bzAgVTAwIDF3bzAgVTAwIDF6YzAgVTAwIDFxTTAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAiLAoJCQkiQW1lcmljYS9IZXJtb3NpbGxvfExNVCBNU1QgQ1NUIFBTVCBNRFR8N24uUSA3MCA2MCA4MCA2MHwwMTIxMjEyMTMxNDE0MTQxfC0xVVFGMCBkZUwwIDhsYzAgMTdjMCAxME0wIDFkZDAgb3RYMCBnbU4wIFAyTjAgMTNWZDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIiwKCQkJIkFtZXJpY2EvSW5kaWFuYS9Lbm94fENTVCBDRFQgQ1dUIENQVCBFU1R8NjAgNTAgNTAgNTAgNTB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTA0MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDE0MTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjYxczAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCAzTkIwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDExejAgMW8xMCAxMXowIDFvMTAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgM0NuMCA4d3AwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIHo4bzAgMW8wMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL0luZGlhbmEvTWFyZW5nb3xDU1QgQ0RUIENXVCBDUFQgRVNUIEVEVHw2MCA1MCA1MCA1MCA1MCA0MHwwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTA0NTQ1NDU0NTQ1NDE0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0yNjFzMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MzAgaXcwIGR5TjAgMTF6MCA2ZmQwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBqcnowIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVkEwIExBMCAxQlgwIDFlNnAwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9JbmRpYW5hL1BldGVyc2J1cmd8Q1NUIENEVCBDV1QgQ1BUIEVTVCBFRFR8NjAgNTAgNTAgNTAgNTAgNDB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDQwMTAxMDEwMTAxMDEwMTAxMDEwMTAxNDEwMTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTI2MXMwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgzMCBpdzAgbmpYMCBXTjAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAzRmIwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDE5Y28wIDFvMDAgUmQwIDF6YjAgT28wIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9JbmRpYW5hL1RlbGxfQ2l0eXxDU1QgQ0RUIENXVCBDUFQgRVNUIEVEVHw2MCA1MCA1MCA1MCA1MCA0MHwwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDQ1NDU0MTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjYxczAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCAxbzEwIDExejAgZzBwMCAxMXowIDFvMTAgMTF6MCAxcUwwIFdOMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgV0wwIDFxTjAgMWNMMCAxY04wIDFjTDAgMWNOMCBjYUwwIDFjTDAgMWNOMCAxY0wwIDFxaGQwIDFvMDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9JbmRpYW5hL1ZldmF5fENTVCBDRFQgQ1dUIENQVCBFU1QgRURUfDYwIDUwIDUwIDUwIDUwIDQwfDAxMDEwMjMwNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NHwtMjYxczAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCBrUEIwIEF3bjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxbG5kMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvSW5kaWFuYS9WaW5jZW5uZXN8Q1NUIENEVCBDV1QgQ1BUIEVTVCBFRFR8NjAgNTAgNTAgNTAgNTAgNDB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTA0NTQ1NDEwMTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTI2MXMwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgzMCBpdzAgMW8xMCAxMXowIGcwcDAgMTF6MCAxbzEwIDExejAgMXFMMCBXTjAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMWZ6MCAxY04wIFdMMCAxcU4wIDFjTDAgMWNOMCAxY0wwIDFjTjAgY2FMMCAxY0wwIDFjTjAgMWNMMCAxcWhkMCAxbzAwIFJkMCAxemIwIE9vMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvSW5kaWFuYS9XaW5hbWFjfENTVCBDRFQgQ1dUIENQVCBFU1QgRURUfDYwIDUwIDUwIDUwIDUwIDQwfDAxMDEwMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwNDU0NTQxMDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0yNjFzMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MzAgaXcwIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBqcnowIDFjTDAgMWNOMCAxY0wwIDFxaGQwIDFvMDAgUmQwIDF6YTAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9JbnV2aWt8enp6IFBTVCBQRERUIE1TVCBNRFR8MCA4MCA2MCA3MCA2MHwwMTIxMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzfC1GbkEwIHRXVTAgMWZBMCB3UGUwIDJwejAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvSXFhbHVpdHx6enogRVdUIEVQVCBFU1QgRUREVCBFRFQgQ1NUIENEVHwwIDQwIDQwIDUwIDMwIDQwIDYwIDUwfDAxMjM0MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTY3MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzfC0xNkswMCA3blgwIGl2MCBMQ0wwIDFmQTAgemdPMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUMwIDFuWDAgMTFBMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9KYW1haWNhfEtNVCBFU1QgRURUfDU3LmIgNTAgNDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmwxdVEuTiAydU0xUS5OIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCIsCgkJCSJBbWVyaWNhL0p1bmVhdXxQU1QgUFdUIFBQVCBQRFQgWURUIFlTVCBBS1NUIEFLRFR8ODAgNzAgNzAgNzAgODAgOTAgOTAgODB8MDEyMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzA0MDMwMzAzNTY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzZ8LTE3VDIwIDh4MTAgaXkwIFZvMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNNMCAxY00wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCBjbzAgMTBxMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL0tlbnR1Y2t5L0xvdWlzdmlsbGV8Q1NUIENEVCBDV1QgQ1BUIEVTVCBFRFR8NjAgNTAgNTAgNTAgNTAgNDB8MDEwMTAxMDEwMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTQ1NDU0NTQ1NDU0NTQxNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NHwtMjYxczAgMW5YMCAxMUIwIDFuWDAgM0ZkMCBOYjAgTFBkMCAxMXowIFJCMCA4eDMwIGl3MCBCYjAgMTBOMCAyYkIwIDhpbjAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgeHowIGdzbzAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVkEwIExBMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL0tlbnR1Y2t5L01vbnRpY2VsbG98Q1NUIENEVCBDV1QgQ1BUIEVTVCBFRFR8NjAgNTAgNTAgNTAgNTAgNDB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NHwtMjYxczAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCBTV3AwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFBMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9MYV9QYXp8Q01UIEJPU1QgQk9UfDR3LkEgM3cuQSA0MHwwMTJ8LTF4MzdyLm8gMTNiMCIsCgkJCSJBbWVyaWNhL0xpbWF8TE1UIFBFVCBQRVNUfDU4LkEgNTAgNDB8MDEyMTIxMjEyMTIxMjEyMXwtMnR5R1AubyAxYkR6UC5vIHpYMCAxYU4wIDFjTDAgMWNOMCAxY0wwIDFQckIwIHpYMCAxTzEwIHpYMCA2R3AwIHpYMCA5OHAwIHpYMCIsCgkJCSJBbWVyaWNhL0xvc19BbmdlbGVzfFBTVCBQRFQgUFdUIFBQVHw4MCA3MCA3MCA3MHwwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTI2MXEwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgxMCBpeTAgNVdwMCAxVmIwIDNkQjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9NYWNlaW98TE1UIEJSVCBCUlNUfDJtLlEgMzAgMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x4Qi44IEhkTEIuOCAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCAxRU4wIEZYMCAxSEIwIEx6MCBkTU4wIEx6MCA4UTEwIFdMMCAxdEIwIDV6MCAybU4wIE9uMCIsCgkJCSJBbWVyaWNhL01hbmFndWF8TU1UIENTVCBFU1QgQ0RUfDVKLmMgNjAgNTAgNTB8MDEyMTMxMzEyMTIxMzEzMXwtMXF1aWUuTSAxeUFNZS5NIDRtbjAgOVVwMCBEejAgMUsxMCBEejAgczNGMCAxS0gwIERCMCA5SW4wIGs4cDAgMTlYMCAxbzMwIDExeTAiLAoJCQkiQW1lcmljYS9NYW5hdXN8TE1UIEFNVCBBTVNUfDQwLjQgNDAgMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHZYLlUgSGRLWC5VIDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIGRQQjAgT24wIiwKCQkJIkFtZXJpY2EvTWFydGluaXF1ZXxGRk1UIEFTVCBBRFR8NDQuayA0MCAzMHwwMTIxfC0ybVBUVC5FIDJMUGJULkUgMTlYMCIsCgkJCSJBbWVyaWNhL01hdGFtb3Jvc3xMTVQgQ1NUIENEVHw2RSA2MCA1MHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0xVVFHMCAyRmpDMCAxblgwIGk2cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCBVMTAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL01hemF0bGFufExNVCBNU1QgQ1NUIFBTVCBNRFR8NzUuRSA3MCA2MCA4MCA2MHwwMTIxMjEyMTMxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxfC0xVVFGMCBkZUwwIDhsYzAgMTdjMCAxME0wIDFkZDAgb3RYMCBnbU4wIFAyTjAgMTNWZDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAiLAoJCQkiQW1lcmljYS9NZW5vbWluZWV8Q1NUIENEVCBDV1QgQ1BUIEVTVHw2MCA1MCA1MCA1MCA1MHwwMTAxMDIzMDEwMTA0MTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjYxczAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCAxbzEwIDExejAgTENOMCAxZnowIDY0MTAgOUpiMCAxY00wIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL01lcmlkYXxMTVQgQ1NUIEVTVCBDRFR8NVcucyA2MCA1MCA1MHwwMTIxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxfC0xVVFHMCAycTJvMCAyaHowIHd1MzAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAiLAoJCQkiQW1lcmljYS9NZXRsYWthdGxhfFBTVCBQV1QgUFBUIFBEVHw4MCA3MCA3MCA3MHwwMTIwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwfC0xN1QyMCA4eDEwIGl5MCBWbzEwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAiLAoJCQkiQW1lcmljYS9NZXhpY29fQ2l0eXxMTVQgTVNUIENTVCBDRFQgQ1dUfDZBLkEgNzAgNjAgNTAgNTB8MDEyMTIxMjMyMzI0MjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0xVVFGMCBkZUwwIDhsYzAgMTdjMCAxME0wIDFkZDAgZ0VuMCBUWDAgM3hkMCBKYjAgNnpCMCBTTDAgZTVkMCAxN2IwIDFQZmYwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDFmQjAgV0wwIDFmQjAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIiwKCQkJIkFtZXJpY2EvTWlxdWVsb258TE1UIEFTVCBQTVNUIFBNRFR8M0kuRSA0MCAzMCAyMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTJtS2tmLmsgMkxUQWYuayBnUTEwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvTW9uY3RvbnxFU1QgQVNUIEFEVCBBV1QgQVBUfDUwIDQwIDMwIDMwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMklzSDAgQ3dOMCAxaW4wIHpBbzAgQW4wIDFOZDAgQW4wIDFOZDAgQW4wIDFOZDAgQW4wIDFOZDAgQW4wIDFOZDAgQW4wIDFLMTAgTHowIDF6QjAgTlgwIDF1MTAgV24wIFMyMCA4eDUwIGl1MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDNDcDAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNG4xIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJlWCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvTW9udGVycmV5fExNVCBDU1QgQ0RUfDZGLmcgNjAgNTB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMVVRRzAgMkZqQzAgMW5YMCBpNnAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDFmQjAgV0wwIDFmQjAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIiwKCQkJIkFtZXJpY2EvTW9udGV2aWRlb3xNTVQgVVlUIFVZSFNUIFVZU1QgVVlUIFVZSFNUfDNJLkkgM3UgMzAgMjAgMzAgMnV8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzNDM0MzQzNDM0MzQ1NDU0NTQzNDUzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzfC0yMFVJZi5nIDhqekouZyAxY0x1IDFkY3UgMWNMdSAxZGN1IDFjTHUgaXJjdSAxMXp1IDFvMHUgMTF6dSAxbzB1IDExenUgMXFNdSBXTHUgMXFNdSBXTHUgMXFNdSBXTHUgMXFNdSAxMXp1IDFvMHUgMTF6dSBOQXUgMTFidSAyaU11IHpXdSBEcTEwIDE5WDAgcGQwIGp6MCBjbTEwIDE5WDAgMWZCMCAxb24wIDExZDAgMW9MMCAxbkIwIDFmenUgMWFvdSAxZnp1IDFhb3UgMWZ6dSAzbkF1IEpiMCAzTU4wIDFTTHUgNGp6dSAyUEIwIExiMCAzRGQwIDFwYjAgaXhkMCBBbjAgMU1OMCBBbjAgMXdwMCBPbjAgMXdwMCBSYjAgMXpkMCBPbjAgMXdwMCBSYjAgczhwMCAxZkIwIDFpcDAgMTF6MCAxbGQwIDE0bjAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDE0bjAgMWxkMCAxNG4wIDFsZDAgMTRuMCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDE0bjAgMWxkMCAxNG4wIDFsZDAgMTRuMCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTRuMCAxbGQwIDE0bjAgMWxkMCAxNG4wIDFsZDAgMTRuMCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTRuMCAxbGQwIDE0bjAgMWxkMCAxNG4wIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxNG4wIDFsZDAgMTRuMCAxbGQwIDE0bjAgMWxkMCAxNG4wIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCIsCgkJCSJBbWVyaWNhL01vbnRyZWFsfEVTVCBFRFQgRVdUIEVQVHw1MCA0MCA0MCA0MHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjh0UjAgYlYwIDJtMzAgMWluMCAxMjF1IDFuYjAgMWcxMCAxMXowIDFvMHUgMTF6dSAxbzB1IDExenUgM1ZBdSBSenUgMXFNdSBXTHUgMXFNdSBXTHUgMXFLdSBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgNGtPMCA4eDQwIGl2MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9OYXNzYXV8TE1UIEVTVCBFRFR8NTkudSA1MCA0MHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJrTnVPLnUgMjZYZE8udSAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvTmV3X1lvcmt8RVNUIEVEVCBFV1QgRVBUfDUwIDQwIDQwIDQwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNjF0MCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgMWExMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgUkIwIDh4NDAgaXYwIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL05pcGlnb258RVNUIEVEVCBFV1QgRVBUfDUwIDQwIDQwIDQwfDAxMDEyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjVUUjAgMWluMCBSbmIwIDNqZTAgOHg0MCBpdjAgMTl5TjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvTm9tZXxOU1QgTldUIE5QVCBCU1QgQkRUIFlTVCBBS1NUIEFLRFR8YjAgYTAgYTAgYjAgYTAgOTAgOTAgODB8MDEyMDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDU2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2fC0xN1NYMCA4d1cwIGlCMCBRbGIwIDUyTzAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCBjbDAgMTBxMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL05vcm9uaGF8TE1UIEZOVCBGTlNUfDI5LkUgMjAgMTB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmdseE8uayBIZEtPLmsgMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgMUVOMCBGWDAgMUhCMCBMejAgbnNwMCBXTDAgMXRCMCAyTDAgMnBCMCBPbjAiLAoJCQkiQW1lcmljYS9Ob3J0aF9EYWtvdGEvQmV1bGFofE1TVCBNRFQgTVdUIE1QVCBDU1QgQ0RUfDcwIDYwIDYwIDYwIDYwIDUwfDAxMDEwMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NHwtMjYxcjAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDIwIGl4MCBRd04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9vMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvTm9ydGhfRGFrb3RhL0NlbnRlcnxNU1QgTURUIE1XVCBNUFQgQ1NUIENEVHw3MCA2MCA2MCA2MCA2MCA1MHwwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTI2MXIwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgyMCBpeDAgUXdOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRvMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL05vcnRoX0Rha290YS9OZXdfU2FsZW18TVNUIE1EVCBNV1QgTVBUIENTVCBDRFR8NzAgNjAgNjAgNjAgNjAgNTB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0yNjFyMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MjAgaXgwIFF3TjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRvMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9PamluYWdhfExNVCBNU1QgQ1NUIENEVCBNRFR8NlYuRSA3MCA2MCA1MCA2MHwwMTIxMjEyMzIzMjQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxfC0xVVFGMCBkZUwwIDhsYzAgMTdjMCAxME0wIDFkZDAgMnpRTjAgMWxiMCAxNHAwIDFsYjAgMTRxMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCBVMTAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL1BhbmFtYXxDTVQgRVNUfDVqLkEgNTB8MDF8LTJ1ZHVFLm8iLAoJCQkiQW1lcmljYS9QYW5nbmlydHVuZ3x6enogQVNUIEFXVCBBUFQgQUREVCBBRFQgRURUIEVTVCBDU1QgQ0RUfDAgNDAgMzAgMzAgMjAgMzAgNDAgNTAgNjAgNTB8MDEyMzE0MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTY3Njc2NzY3Njg5NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3fC0xWGlNMCBQbkcwIDh4NTAgaXUwIExDTDAgMWZBMCB6Z08wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFvMDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQzAgMW5YMCAxMUEwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL1BhcmFtYXJpYm98TE1UIFBNVCBQTVQgTkVHVCBTUlQgU1JUfDNFLkUgM0UuUSAzRS5BIDN1IDN1IDMwfDAxMjM0NXwtMm5EVWouayBXcW8wLmMgcWFuWC5JIDFkbUxOLm8gbHpjMCIsCgkJCSJBbWVyaWNhL1Bob2VuaXh8TVNUIE1EVCBNV1R8NzAgNjAgNjB8MDEwMTAyMDIwMTB8LTI2MXIwIDFuWDAgMTFCMCAxblgwIFNnTjAgNEFsMSBBcDAgMWRiMCBTV3FYIDFjTDAiLAoJCQkiQW1lcmljYS9Qb3J0LWF1LVByaW5jZXxQUE1UIEVTVCBFRFR8NE4gNTAgNDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMjhSSGIgMkZuTWIgMTlYMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRxMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxNG8wIDFsYzAgMTRvMCAxbGMwIGk2bjAgMW5YMCAxMUIwIDFuWDAgZDQzMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvUG9ydG9fQWNyZXxMTVQgQUNUIEFDU1QgQU1UfDR2LmMgNTAgNDAgNDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzF8LTJnbHZzLk0gSGRMcy5NIDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIE5CZDAgZDVYMCIsCgkJCSJBbWVyaWNhL1BvcnRvX1ZlbGhvfExNVCBBTVQgQU1TVHw0Zi5BIDQwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmdsdkkubyBIZEtJLm8gMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAiLAoJCQkiQW1lcmljYS9QdWVydG9fUmljb3xBU1QgQVdUIEFQVHw0MCAzMCAzMHwwMTIwfC0xN2xVMCA3WFQwIGl1MCIsCgkJCSJBbWVyaWNhL1JhaW55X1JpdmVyfENTVCBDRFQgQ1dUIENQVHw2MCA1MCA1MCA1MHwwMTAxMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTI1VFEwIDFpbjAgUm5iMCAzamUwIDh4MzAgaXcwIDE5eU4wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL1Jhbmtpbl9JbmxldHx6enogQ1NUIENERFQgQ0RUIEVTVHwwIDYwIDQwIDUwIDUwfDAxMjEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzQzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMXwtdkRjMCBrZXUwIDFmQTAgemdPMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9SZWNpZmV8TE1UIEJSVCBCUlNUfDJqLkEgMzAgMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmdseEUubyBIZExFLm8gMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgMUVOMCBGWDAgMUhCMCBMejAgbnNwMCBXTDAgMXRCMCAyTDAgMnBCMCBPbjAiLAoJCQkiQW1lcmljYS9SZWdpbmF8TE1UIE1TVCBNRFQgTVdUIE1QVCBDU1R8NlcuQSA3MCA2MCA2MCA2MCA2MHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTV8LTJBRDUxLm8gdUhlMS5vIDFpbjAgczJMMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDY2TjAgMWNMMCAxY04wIDE5WDAgMWZCMCAxY0wwIDFmQjAgMWNMMCAxY04wIDFjTDAgTTMwIDh4MjAgaXgwIDFpcDAgMWNMMCAxaXAwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgM05CMCAxY0wwIDFjTjAiLAoJCQkiQW1lcmljYS9SZXNvbHV0ZXx6enogQ1NUIENERFQgQ0RUIEVTVHwwIDYwIDQwIDUwIDUwfDAxMjEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzQzMTMxMzEzMTMxMzQzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMXwtU25BMCBHV1MwIDFmQTAgemdPMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9TYW50YV9Jc2FiZWx8TE1UIE1TVCBQU1QgUERUIFBXVCBQUFR8N0QucyA3MCA4MCA3MCA3MCA3MHwwMTIxMjMyNDUyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFVUUUwIDRQWDAgOG1NMCA4bGMwIFNOMCAxY0wwIHBIQjAgODNyMCB6STAgNU8xMCAxUnowIGNPUDAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCBCVXAwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIiwKCQkJIkFtZXJpY2EvU2FudGFyZW18TE1UIEFNVCBBTVNUIEJSVHwzQy5NIDQwIDMwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTN8LTJnbHdsLmMgSGRMbC5jIDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIE5CZDAiLAoJCQkiQW1lcmljYS9TYW50aWFnb3xTTVQgQ0xUIENMVCBDTFNUIENMU1R8NEcuSyA1MCA0MCA0MCAzMHwwMTAyMDMxMzEzMTMxMzEzMTMxMjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjR8LTJxNVRoLmUgZk5jaC5lIDVnTEcuSyAyMWJoLmUgalJBRy5LIDFwYmguZSAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFwYjAgMTFkMCBuSFgwIG9wMCA5VUswIDFKZTAgUWVuMCBXTDAgMXpkMCBPbjAgMWlwMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxbGQwIDE0bjAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgMWNMMCAxY04wIDExejAgMWxkMCAxNG4wIDFxTjAgMTF6MCAxY04wIDE5WDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTdiMCAxaXAwIDExejAgMWlwMCAxZnowIDFmQjAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDE3YjAgMWlwMCAxMXowIDFvMTAgMTlYMCAxZkIwIDFuWDAgRzEwIDFFTDAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF6YjAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF6YjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF6YjAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF6YjAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIiwKCQkJIkFtZXJpY2EvU2FudG9fRG9taW5nb3xTRE1UIEVTVCBFRFQgRUhEVCBBU1R8NEUgNTAgNDAgNHUgNDB8MDEyMTMxMzEzMTMxMzE0MTR8LTF0dGprIDFsSk1rIE1uMCA2c3AwIExidSAxQ291IHlMdSAxUkF1IHdMdSAxUU11IHh6dSAxUTB1IHhYdSAxUEF1IDEzakIwIGUwMCIsCgkJCSJBbWVyaWNhL1Nhb19QYXVsb3xMTVQgQlJUIEJSU1R8MzYucyAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LTJnbHdSLncgSGRLUi53IDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHBUZDAgUFgwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIDFFTjAgRlgwIDFIQjAgTHowIDFFTjAgTHowIDFDMTAgSUwwIDFIQjAgRGIwIDFIQjAgT24wIDF6ZDAgT24wIDF6ZDAgTHowIDF6ZDAgUmIwIDF3TjAgV24wIDF0QjAgUmIwIDF0QjAgV0wwIDF0QjAgUmIwIDF6ZDAgT24wIDFIQjAgRlgwIDFDMTAgTHowIDFJcDAgSFgwIDF6ZDAgT24wIDFIQjAgSUwwIDF3cDAgT24wIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAgT24wIDF6ZDAgUmIwIDF6ZDAgTHowIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAgT24wIDF6ZDAgT24wIDF6ZDAgT24wIDFDMTAgTHowIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAgT24wIDF6ZDAgUmIwIDF3cDAgT24wIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAgT24wIDF6ZDAgT24wIDF6ZDAgT24wIDFDMTAgTHowIDFDMTAgTHowIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAgUmIwIDF3cDAgT24wIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAiLAoJCQkiQW1lcmljYS9TY29yZXNieXN1bmR8TE1UIENHVCBDR1NUIEVHU1QgRUdUfDFyLlEgMjAgMTAgMCAxMHwwMTIxMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0fC0yYTVXdy44IDJ6NWV3LjggMWEwMCAxY0swIDFjTDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkFtZXJpY2EvU2l0a2F8UFNUIFBXVCBQUFQgUERUIFlTVCBBS1NUIEFLRFR8ODAgNzAgNzAgNzAgOTAgOTAgODB8MDEyMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzNDU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjV8LTE3VDIwIDh4MTAgaXkwIFZvMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCBjbzAgMTBxMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL1N0X0pvaG5zfE5TVCBORFQgTlNUIE5EVCBOV1QgTlBUIE5ERFR8M3UuUSAydS5RIDN1IDJ1IDJ1IDJ1IDF1fDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAyMzIzMjMyMzIzMjMyMzI0NTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzI2MjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0yOG9pdC44IDE0TDAgMW5CMCAxaW4wIDFnbTAgRHowIDFKQjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMWNMMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDEwTzAgZUtYLjggMTlYMCAxaXEwIFdMMCAxcU4wIFdMMCAxcU4wIFdMMCAxdEIwIFRYMCAxdEIwIFdMMCAxcU4wIFdMMCAxcU4wIDdVSHUgaXR1IDF0QjAgV0wwIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgV0wwIDF0QjAgV0wwIDFsZDAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0bjEgMWxiMCAxNHAwIDFuVzAgMTFDMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6Y1ggT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9Td2lmdF9DdXJyZW50fExNVCBNU1QgTURUIE1XVCBNUFQgQ1NUfDdiLmsgNzAgNjAgNjAgNjAgNjB8MDEyMTM0MTIxMjEyMTIxMjEyMTIxMjE1fC0yQUQ0TS5FIHVIZE0uRSAxaW4wIFVHcDAgOHgyMCBpeDAgMW8xMCAxN2IwIDFpcDAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIGlzTjAgMWNMMCAzQ3AwIDFjTDAgMWNOMCAxMXowIDFxTjAgV0wwIHBNcDAiLAoJCQkiQW1lcmljYS9UZWd1Y2lnYWxwYXxMTVQgQ1NUIENEVHw1TS5RIDYwIDUwfDAxMjEyMTIxfC0xV0dHYi44IDJFVGNiLjggV0wwIDFxTjAgV0wwIEdSZDAgQUwwIiwKCQkJIkFtZXJpY2EvVGh1bGV8TE1UIEFTVCBBRFR8NHouOCA0MCAzMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJhNVRvLlEgMzFOQm8uUSAxY0wwIDFjTjAgMWNMMCAxZkIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvVGh1bmRlcl9CYXl8Q1NUIEVTVCBFV1QgRVBUIEVEVHw2MCA1MCA0MCA0MCA0MHwwMTIzMTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxfC0ycTVTMCAxaWFOMCA4eDQwIGl2MCBYTkIwIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAzQ3AwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL1Rvcm9udG98RVNUIEVEVCBFV1QgRVBUfDUwIDQwIDQwIDQwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNVRSMCAxaW4wIDExV3UgMW56dSAxZkQwIFdKMCAxd3IwIE5iMCAxQXAwIE9uMCAxemQwIE9uMCAxd3AwIFRYMCAxdEIwIFRYMCAxdEIwIFRYMCAxdEIwIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCA0a00wIDh4NDAgaXYwIDFvMTAgMTF6MCAxblgwIDExejAgMW8xMCAxMXowIDFvMTAgMXFMMCAxMUQwIDFuWDAgMTFCMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL1ZhbmNvdXZlcnxQU1QgUERUIFBXVCBQUFR8ODAgNzAgNzAgNzB8MDEwMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjVUTzAgMWluMCBVR3AwIDh4MTAgaXkwIDFvMTAgMTdiMCAxaXAwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9XaGl0ZWhvcnNlfFlTVCBZRFQgWVdUIFlQVCBZRERUIFBTVCBQRFR8OTAgODAgODAgODAgNzAgODAgNzB8MDEwMTAyMzA0MDU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NXwtMjVUTjAgMWluMCAxbzEwIDEzVjAgU2VyMCA4eDAwIGl6MCBMQ0wwIDFmQTAgMUJlMCB4RHowIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJBbWVyaWNhL1dpbm5pcGVnfENTVCBDRFQgQ1dUIENQVHw2MCA1MCA1MCA1MHwwMTAxMDEwMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJhSWkwIFdMMCAzTkQwIDFpbjAgSmFwMCBSYjAgYUNOMCA4eDMwIGl3MCAxdEIwIDExejAgMWlwMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXJkMCAxMEwwIDFvcDAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxY0wwIDFjTjAgMTF6MCA2aTEwIFdMMCA2aTEwIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxNG8wIDFsYzAgMTRvMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFtZXJpY2EvWWFrdXRhdHxZU1QgWVdUIFlQVCBZRFQgQUtTVCBBS0RUfDkwIDgwIDgwIDgwIDkwIDgwfDAxMjAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzA0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0xN1QxMCA4eDAwIGl6MCBWbzEwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgY24wIDEwcTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQW1lcmljYS9ZZWxsb3drbmlmZXx6enogTVNUIE1XVCBNUFQgTUREVCBNRFR8MCA3MCA2MCA2MCA1MCA2MHwwMTIzMTQxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTF8LTFwZEEwIGhpeDAgOHgyMCBpeDAgTENMMCAxZkEwIHpnTzAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIiwKCQkJIkFudGFyY3RpY2EvQ2FzZXl8enp6IEFXU1QgQ0FTVHwwIC04MCAtYjB8MDEyMTIxfC0ycTAwIDFEalMwIFQ5MCA0MFAwIEtMMCIsCgkJCSJBbnRhcmN0aWNhL0RhdmlzfHp6eiBEQVZUIERBVlR8MCAtNzAgLTUwfDAxMDEyMTIxfC12eW8wIGlYdDAgYWxqMCAxRDd2MCBWQjAgM1duMCBLTjAiLAoJCQkiQW50YXJjdGljYS9EdW1vbnREVXJ2aWxsZXx6enogUE1UIEREVVR8MCAtYTAgLWEwfDAxMDJ8LVUwbzAgY2ZxMCBiRm0wIiwKCQkJIkFudGFyY3RpY2EvTWFjcXVhcmllfEFFU1QgQUVEVCB6enogTUlTVHwtYTAgLWIwIDAgLWIwfDAxMDIwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTN8LTI5RTgwIDE5WDAgNFNMMCAxYXl5MCBMdnMwIDFjTTAgMW8wMCBSYzAgMXdvMCBSYzAgMXdvMCBVMDAgMXdvMCBMQTAgMUMwMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCAxMUEwIDFxTTAgV00wIDFxTTAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF3bzAgV00wIDF0QTAgV00wIDF0QTAgVTAwIDF0QTAgVTAwIDF0QTAgMTFBMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxMUEwIDFvMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFhMDAgMWlvMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAiLAoJCQkiQW50YXJjdGljYS9NYXdzb258enp6IE1BV1QgTUFXVHwwIC02MCAtNTB8MDEyfC1DRW8wIDJmeWswIiwKCQkJIkFudGFyY3RpY2EvTWNNdXJkb3xOWk1UIE5aU1QgTlpTVCBOWkRUfC1idSAtY3UgLWMwIC1kMHwwMTAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyM3wtMUdDVnUgTHowIDF0QjAgMTF6dSAxbzB1IDExenUgMW8wdSAxMXp1IDFvMHUgMTRudSAxbGN1IDE0bnUgMWxjdSAxbGJ1IDExQXUgMW5YdSAxMUF1IDFuWHUgMTFBdSAxblh1IDExQXUgMW5YdSAxMUF1IDFxTHUgV011IDFxTHUgMTFBdSAxbjFidSBJTTAgMUMwMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXFNMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE3YzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCIsCgkJCSJBbnRhcmN0aWNhL1BhbG1lcnx6enogQVJTVCBBUlQgQVJUIEFSU1QgQ0xUIENMU1R8MCAzMCA0MCAzMCAyMCA0MCAzMHwwMTIxMjEyMTIxMjM0MzU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTZ8LWNhbzAgbkQwIDF2ZDAgU0wwIDF2ZDAgMTd6MCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgYXNuMCBEYjAganNOMCAxNE4wIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgMWNMMCAxY04wIDExejAgMWxkMCAxNG4wIDFxTjAgMTF6MCAxY04wIDE5WDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTdiMCAxaXAwIDExejAgMWlwMCAxZnowIDFmQjAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDE3YjAgMWlwMCAxMXowIDFvMTAgMTlYMCAxZkIwIDFuWDAgRzEwIDFFTDAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF6YjAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF6YjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF6YjAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgUmQwIDF6YjAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIiwKCQkJIkFudGFyY3RpY2EvUm90aGVyYXx6enogUk9UVHwwIDMwfDAxfGdPbzAiLAoJCQkiQW50YXJjdGljYS9TeW93YXx6enogU1lPVHwwIC0zMHwwMXwtdnMwMCIsCgkJCSJBbnRhcmN0aWNhL1Ryb2xsfHp6eiBVVEMgQ0VTVHwwIDAgLTIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfDFwdW8wIGhkMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJBbnRhcmN0aWNhL1Zvc3Rva3x6enogVk9TVHwwIC02MHwwMXwtdGpBMCIsCgkJCSJBcmN0aWMvTG9uZ3llYXJieWVufENFVCBDRVNUfC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yYXdNMCBRbTAgVzZvMCA1cGYwIFdNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgd0pjMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMXFNMCBXTTAgenBjMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiQXNpYS9BZGVufExNVCBBU1R8LTJYLlMgLTMwfDAxfC1NRzJYLlMiLAoJCQkiQXNpYS9BbG1hdHl8TE1UIEFMTVQgQUxNVCBBTE1TVHwtNTcuTSAtNTAgLTYwIC03MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0xUGM1Ny5NIGVVbzcuTSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDNDbDAgMWNMMCAxY1EwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAiLAoJCQkiQXNpYS9BbW1hbnxMTVQgRUVUIEVFU1R8LTJuLkkgLTIwIC0zMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0xeVcybi5JIDFIaU1uLkkgS0wwIDFvTjAgMTFiMCAxb04wIDExYjAgMXBkMCAxZHowIDFjcDAgMTFiMCAxb3AwIDExYjAgZk8xMCAxZGIwIDFlMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFwZDAgMTBuMCAxbGQwIDE0bjAgMWhCMCAxNWIwIDFpcDAgMTlYMCAxY04wIDFjTDAgMWNOMCAxN2IwIDFsZDAgMTRvMCAxbGMwIDE3YzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxU28wIHkwMCAxZmMwIDFkYzAgMWNvMCAxZGMwIDFjTTAgMWNNMCAxY00wIDFvMDAgMTFBMCAxbGMwIDE3YzAgMWNNMCAxY00wIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCA0YlgwIERkMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAiLAoJCQkiQXNpYS9BbmFkeXJ8TE1UIEFOQVQgQU5BVCBBTkFTVCBBTkFTVCBBTkFTVCBBTkFUfC1iTi5VIC1jMCAtZDAgLWUwIC1kMCAtYzAgLWIwfDAxMjMyNDE0MTQxNDE0MTQxNDE0MTQxNTYxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNTYxfC0xUGNiTi5VIGVVbk4uVSAyM0NMMCAxZGIwIDFjTjAgMWRjMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCBJTTAgclUwIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU4wIFdNMCIsCgkJCSJBc2lhL0FxdGF1fExNVCBGT1JUIEZPUlQgU0hFVCBTSEVUIFNIRVNUIEFRVFQgQVFUU1QgQVFUU1QgQVFUVHwtM2wuNCAtNDAgLTUwIC01MCAtNjAgLTYwIC01MCAtNjAgLTUwIC00MHwwMTIzNDUzNTM1MzUzNTM1MzUzNTM1MzY3Njc2NzY4OTg5ODk4OTg5ODk4OTg5ODk4OTZ8LTFQYzNsLjQgZVVubC40IDFqY0wwIEpEYzAgMWNMMCAxZGMwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMlVLMCBGejAgMWNMMCAxY1EwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgUlcwIiwKCQkJIkFzaWEvQXF0b2JlfExNVCBBS1RUIEFLVFQgQUtUU1QgQUtUVCBBUVRUIEFRVFNUfC0zTS5FIC00MCAtNTAgLTYwIC02MCAtNTAgLTYwfDAxMjM0MzIzMjMyMzIzMjMyMzIzMjMyNTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1fC0xUGMzTS5FIGVVbk0uRSAyM0NMMCAxZGIwIDFjTTAgMWRjMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJVSzAgRnowIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIiwKCQkJIkFzaWEvQXNoZ2FiYXR8TE1UIEFTSFQgQVNIVCBBU0hTVCBBU0hTVCBUTVQgVE1UfC0zUi53IC00MCAtNTAgLTYwIC01MCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyNDE1NnwtMVBjM1IudyBlVW5SLncgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTjAgYmEwIHhDMCIsCgkJCSJBc2lhL0JhZ2hkYWR8Qk1UIEFTVCBBRFR8LTJWLkEgLTMwIC00MHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTI2QmVWLkEgMkFDblYuQSAxMWIwIDFjcDAgMWR6MCAxZGQwIDFkYjAgMWNOMCAxY3AwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWRlMCAxZGMwIDFkYzAgMWRjMCAxY00wIDFkYzAgMWNNMCAxZGMwIDFjTTAgMWRjMCAxZGMwIDFkYzAgMWNNMCAxZGMwIDFjTTAgMWRjMCAxY00wIDFkYzAgMWRjMCAxZGMwIDFjTTAgMWRjMCAxY00wIDFkYzAgMWNNMCAxZGMwIDFkYzAgMWRjMCAxY00wIDFkYzAgMWNNMCAxZGMwIDFjTTAgMWRjMCIsCgkJCSJBc2lhL0JhaHJhaW58TE1UIEdTVCBBU1R8LTNtLmsgLTQwIC0zMHwwMTJ8LTIxSmZtLmsgMjdCWG0uayIsCgkJCSJBc2lhL0Jha3V8TE1UIEJBS1QgQkFLVCBCQUtTVCBCQUtTVCBBWlNUIEFaVCBBWlQgQVpTVHwtM2oubyAtMzAgLTQwIC01MCAtNDAgLTQwIC0zMCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyNDU2NTc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODd8LTFQYzNqLm8gMWpVb2oubyBXQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxMEswIGMzMCAxY0owIDFjTDAgOHd1MCAxbzAwIDExejAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJBc2lhL0Jhbmdrb2t8Qk1UIElDVHwtNkcuNCAtNzB8MDF8LTIxOFNHLjQiLAoJCQkiQXNpYS9CZWlydXR8RUVUIEVFU1R8LTIwIC0zMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTIxYXEwIDFvbjAgMTQxMCAxZGIwIDE5QjAgMWluMCAxaXAwIFdMMCAxbFFwMCAxMWIwIDFvTjAgMTFiMCAxb04wIDExYjAgMXBkMCAxMWIwIDFvTjAgMTFiMCBxNk4wIEVuMCAxb04wIDExYjAgMW9OMCAxMWIwIDFvTjAgMTFiMCAxcGQwIDExYjAgMW9OMCAxMWIwIDFvcDAgMTFiMCBkQTEwIDE3YjAgMWlOMCAxN2IwIDFpTjAgMTdiMCAxaU4wIDE3YjAgMXZCMCBTTDAgMW1wMCAxM3owIDFpTjAgMTdiMCAxaU4wIDE3YjAgMWpkMCAxMm4wIDFhMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAiLAoJCQkiQXNpYS9CaXNoa2VrfExNVCBGUlVUIEZSVVQgRlJVU1QgRlJVU1QgS0dUIEtHU1QgS0dUfC00Vy5vIC01MCAtNjAgLTcwIC02MCAtNTAgLTYwIC02MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjQ1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2N3wtMVBjNFcubyBlVW5XLm8gMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDExYzAgMXRYMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxY1B1IDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgVDh1IiwKCQkJIkFzaWEvQnJ1bmVpfExNVCBCTlQgQk5UfC03RC5FIC03dSAtODB8MDEyfC0xS0lURC5FIGdEYzkuRSIsCgkJCSJBc2lhL0NhbGN1dHRhfEhNVCBCVVJUIElTVCBJU1R8LTVSLmsgLTZ1IC01dSAtNnV8MDEyMzJ8LTE4TEZSLmsgMXVubi5rIEhCMCA3elgwIiwKCQkJIkFzaWEvQ2hpdGF8TE1UIFlBS1QgWUFLVCBZQUtTVCBZQUtTVCBZQUtUIElSS1R8LTd4LlEgLTgwIC05MCAtYTAgLTkwIC1hMCAtODB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzI0MTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjU2fC0yMVE3eC5RIHBBbnguUSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCBJTTAgclUwIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIiwKCQkJIkFzaWEvQ2hvaWJhbHNhbnxMTVQgVUxBVCBVTEFUIENIT1NUIENIT1QgQ0hPVHwtN0MgLTcwIC04MCAtYTAgLTkwIC04MHwwMTIzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDV8LTJBUEhDIDJVa29DIGNLbjAgMWRhMCAxZGQwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCA2aEQwIDExejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAzRGIwIiwKCQkJIkFzaWEvQ2hvbmdxaW5nfENTVCBDRFR8LTgwIC05MHwwMTAxMDEwMTAxMDEwMTAxMHwtMWMxSTAgTFgwIDE2cDAgMWp6MCAxTXlwMCBSYjAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCIsCgkJCSJBc2lhL0NvbG9tYm98TU1UIElTVCBJSFNUIElTVCBMS1QgTEtUfC01ai53IC01dSAtNjAgLTZ1IC02dSAtNjB8MDEyMzE0NTF8LTJ6T3RqLncgMXJGYk4udyAxenp1IDdBcHUgMjNkejAgMTF6dSBuM2N1IiwKCQkJIkFzaWEvRGFjY2F8SE1UIEJVUlQgSVNUIERBQ1QgQkRUIEJEU1R8LTVSLmsgLTZ1IC01dSAtNjAgLTYwIC03MHwwMTIxMzQ1NHwtMThMRlIuayAxdW5uLmsgSEIwIG02bjAgTHFNdSAxeDZuMCAxaTAwIiwKCQkJIkFzaWEvRGFtYXNjdXN8TE1UIEVFVCBFRVNUfC0ycC5jIC0yMCAtMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTIxSmVwLmMgSGVwLmMgMTdiMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxeFJCMCAxMVgwIDFvTjAgMTBMMCAxcEIwIDExYjAgMW9OMCAxMEwwIDFtcDAgMTNYMCAxb04wIDExYjAgMXBkMCAxMWIwIDFvTjAgMTFiMCAxb04wIDExYjAgMW9OMCAxMWIwIDFwZDAgMTFiMCAxb04wIDExYjAgMW9OMCAxMWIwIDFvTjAgMTFiMCAxcGQwIDExYjAgMW9OMCBOYjAgMUFOMCBOYjAgYmNwMCAxOVgwIDFncDAgMTlYMCAzbGQwIDF4WDAgVmQwIDFCejAgU3AwIDF2WDAgMTBwMCAxZHowIDFjTjAgMWNMMCAxZGIwIDFkYjAgMWcxMCAxYW4wIDFhcDAgMWRiMCAxZmQwIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWRiMCAxY3AwIDFkejAgMWMxMCAxZFgwIDFjTjAgMWRiMCAxZGQwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxZGIwIDFjTjAgMWRiMCAxY04wIDE5ejAgMWZCMCAxcUwwIDExQjAgMW9uMCBXcDAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAiLAoJCQkiQXNpYS9EaWxpfExNVCBUTFQgSlNUIFRMVCBXSVRBfC04bS5rIC04MCAtOTAgLTkwIC04MHwwMTIzNDN8LTJsZThtLmsgMWRuWG0uayA4SEEwIDFldzAwIFhsZDAiLAoJCQkiQXNpYS9EdWJhaXxMTVQgR1NUfC0zRi5jIC00MHwwMXwtMjFKZkYuYyIsCgkJCSJBc2lhL0R1c2hhbmJlfExNVCBEVVNUIERVU1QgRFVTU1QgRFVTU1QgVEpUfC00ei5jIC01MCAtNjAgLTcwIC02MCAtNTB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzI0NXwtMVBjNHouYyBlVW56LmMgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDE0TjAiLAoJCQkiQXNpYS9HYXphfEVFVCBFRVQgRUVTVCBJU1QgSURUfC0yMCAtMzAgLTMwIC0yMCAtMzB8MDEwMTAxMDEwMTAyMDIwMjAyMDIwMjAyMDIwMjAyMDIzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDMwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwfC0xYzJxMCA1UmIwIDEwcjAgMXB4MCAxME4wIDFwejAgMTZwMCAxakIwIDE2cDAgMWp4MCBwQmQwIFZ6MCAxb04wIDExYjAgMW9PMCAxME4wIDFwejAgMTBOMCAxcGIwIDEwTjAgMXBiMCAxME4wIDFwYjAgMTBOMCAxcHowIDEwTjAgMXBiMCAxME4wIDFwYjAgMTFkMCAxb0wwIGRXMCBoZkIwIERiMCAxZkIwIFJiMCBucEIwIDExejAgMUMxMCBJTDAgMXMxMCAxMG4wIDFvMTAgV0wwIDF6ZDAgT24wIDFsZDAgMTF6MCAxbzEwIDE0bjAgMW8xMCAxNG4wIDFuZDAgMTJuMCAxbmQwIFh6MCAxcTEwIDEybjAgTTEwIEMwMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMW8wMCAxY0wwIDFmQjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDE3YzAgMWlvMCAxOE4wIDFiejAgMTl6MCAxZ3AwIDE2MTAgMWlMMCAxMXowIDFvMTAgMTRvMCAxbEExIFNLWCAxeGQxIE1LWCAxQU4wIDFhMDAgMWZBMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDFjTDAgMWNOMCAxY0wwIiwKCQkJIkFzaWEvSGVicm9ufEVFVCBFRVQgRUVTVCBJU1QgSURUfC0yMCAtMzAgLTMwIC0yMCAtMzB8MDEwMTAxMDEwMTAyMDIwMjAyMDIwMjAyMDIwMjAyMDIzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDMwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjB8LTFjMnEwIDVSYjAgMTByMCAxcHgwIDEwTjAgMXB6MCAxNnAwIDFqQjAgMTZwMCAxangwIHBCZDAgVnowIDFvTjAgMTFiMCAxb08wIDEwTjAgMXB6MCAxME4wIDFwYjAgMTBOMCAxcGIwIDEwTjAgMXBiMCAxME4wIDFwejAgMTBOMCAxcGIwIDEwTjAgMXBiMCAxMWQwIDFvTDAgZFcwIGhmQjAgRGIwIDFmQjAgUmIwIG5wQjAgMTF6MCAxQzEwIElMMCAxczEwIDEwbjAgMW8xMCBXTDAgMXpkMCBPbjAgMWxkMCAxMXowIDFvMTAgMTRuMCAxbzEwIDE0bjAgMW5kMCAxMm4wIDFuZDAgWHowIDFxMTAgMTJuMCBNMTAgQzAwIDE3YzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxbzAwIDFjTDAgMWZCMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMTdjMCAxaW8wIDE4TjAgMWJ6MCAxOXowIDFncDAgMTYxMCAxaUwwIDEyTDAgMW1OMCAxNG8wIDFsYzAgVGIwIDF4ZDEgTUtYIGJCMCBjbjAgMWNOMCAxYTAwIDFmQTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxY0wwIDFjTjAgMWNMMCIsCgkJCSJBc2lhL0hvX0NoaV9NaW5ofExNVCBQTE1UIElDVCBJRFQgSlNUfC03Ni5FIC03Ni51IC03MCAtODAgLTkwfDAxMjM0MjMyMzJ8LTJ5Qzc2LkUgYkswMC5hIDFoN2I2LnUgNWx6MCAxOG8wIDNPcTAgazViMCBhVzAwIEJBTTAiLAoJCQkiQXNpYS9Ib25nX0tvbmd8TE1UIEhLVCBIS1NUIEpTVHwtN0EuRyAtODAgLTkwIC05MHwwMTIxMzEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yQ0ZIQS5HIDFzRVA2LkcgMWNMMCB5bHUgOTNYMCAxcVF1IDF0WDAgUmQwIDFJbjAgTkIwIDFjTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxa0wwIDE0TjAgMW5YMCBVMTAgMXR6MCBVMTAgMXduMCBSZDAgMXduMCBVMTAgMXR6MCBVMTAgMXR6MCBVMTAgMXR6MCBVMTAgMXduMCBSZDAgMXduMCBSZDAgMXduMCBVMTAgMXR6MCBVMTAgMXR6MCAxN2QwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCBzMTAgMVZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDZmZDAgMTRuMCIsCgkJCSJBc2lhL0hvdmR8TE1UIEhPVlQgSE9WVCBIT1ZTVHwtNjYuQSAtNjAgLTcwIC04MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMkFQRzYuQSAyVWtvNi5BIGNLbjAgMWRiMCAxZGQwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCA2aEQwIDExejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCIsCgkJCSJBc2lhL0lya3V0c2t8SU1UIElSS1QgSVJLVCBJUktTVCBJUktTVCBJUktUfC02Vi41IC03MCAtODAgLTkwIC04MCAtOTB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzI0MTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjUyfC0yMXpHVi41IHBqWFYuNSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCBJTTAgclUwIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIiwKCQkJIkFzaWEvSXN0YW5idWx8SU1UIEVFVCBFRVNUIFRSU1QgVFJUfC0xVS5VIC0yMCAtMzAgLTQwIC0zMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzQzNDM0MzQzNDIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJvZ05VLlUgZHp6VS5VIDExYjAgOHRCMCAxb24wIDE0MTAgMWRiMCAxOUIwIDFpbjAgM1JkMCBVbjAgMW9OMCAxMWIwIHpTcDAgQ0wwIG1OMCAxVnowIDFnTjAgMXB6MCA1UmQwIDFmejAgMXlwMCBNTDAgMWtwMCAxN2IwIDFpcDAgMTdiMCAxZkIwIDE5WDAgMWpCMCAxOEwwIDFpcDAgMTd6MCBxZGQwIHhYMCAzUzEwIFR6MCBkQTEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxemUwIDExQjAgV00wIDFxTzAgV0kwIDFuWDAgMXJCMCAxMEwwIDExQjAgMWluMCAxN2QwIDFpbjAgMnBYMCAxOUUwIDFmVTAgMTZRMCAxaUkwIDE2UTAgMWlJMCAxVmQwIHBiMCAzS3AwIDE0bzAgMWRmMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY0wwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTzAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBYYzAgMXFvMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTIwMCAxbkEwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiQXNpYS9KYWthcnRhfEJNVCBKQVZUIFdJQiBKU1QgV0lCIFdJQnwtNzcuYyAtN2sgLTd1IC05MCAtODAgLTcwfDAxMjMyNDI1fC0xUTBUayBsdU0wIG1Qek8gOHZXdSA2a3B1IDRQWHUgeGhjdSIsCgkJCSJBc2lhL0pheWFwdXJhfExNVCBXSVQgQUNTVHwtOW0uTSAtOTAgLTl1fDAxMjF8LTF1dTltLk0gc01NbS5NIEw0bnUiLAoJCQkiQXNpYS9KZXJ1c2FsZW18Sk1UIElTVCBJRFQgSUREVHwtMmsuRSAtMjAgLTMwIC00MHwwMTIxMjEyMTIxMjEzMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMjZCZWsuRSBTeU1rLkUgNVJiMCAxMHIwIDFweDAgMTBOMCAxcHowIDE2cDAgMWpCMCAxNnAwIDFqeDAgM0xCMCBFbTAgb3IwIDFjbjAgMWRCMCAxNm4wIDEwTzAgMWphMCAxdEMwIDE0bzAgMWNNMCAxYTAwIDExQTAgMU5hMCBBbjAgMU1QMCBBSjAgMUtwMCBMQzAgMW9vMCBXbDAgRVFOMCBEYjAgMWZCMCBSYjAgbnBCMCAxMXowIDFDMTAgSUwwIDFzMTAgMTBuMCAxbzEwIFdMMCAxemQwIE9uMCAxbGQwIDExejAgMW8xMCAxNG4wIDFvMTAgMTRuMCAxbmQwIDEybjAgMW5kMCBYejAgMXExMCAxMm4wIDFoQjAgMWRYMCAxZXAwIDFhTDAgMWVOMCAxN1gwIDFuZjAgMTF6MCAxdEIwIDE5VzAgMWUxMCAxN2IwIDFlcDAgMWdMMCAxOE4wIDFmejAgMWVOMCAxN2IwIDFncTAgMWduMCAxOWQwIDFkejAgMWMxMCAxN1gwIDFoQjAgMWduMCAxOWQwIDFkejAgMWMxMCAxN1gwIDFrcDAgMWR6MCAxYzEwIDFhTDAgMWVOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIiwKCQkJIkFzaWEvS2FidWx8QUZUIEFGVHwtNDAgLTR1fDAxfC0xMFFzMCIsCgkJCSJBc2lhL0thbWNoYXRrYXxMTVQgUEVUVCBQRVRUIFBFVFNUIFBFVFNUfC1heS5BIC1iMCAtYzAgLWQwIC1jMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjQxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjQxMnwtMVNMS3kuQSBpdlh5LkEgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTjAgSU0wIHJVMCAxY0wwIDFjUTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFOMCBXTTAiLAoJCQkiQXNpYS9LYXJhY2hpfExNVCBJU1QgSVNUIEtBUlQgUEtUIFBLU1R8LTRzLmMgLTV1IC02dSAtNTAgLTUwIC02MHwwMTIxMzQ1NDU0NTR8LTJ4b3NzLmMgMXFPS1cuYyA3elgwIGV1cDAgTHFNdSAxZnkwMSAxY0wwIGRLMFggMTFiMCAxNjEwIDFqWDAiLAoJCQkiQXNpYS9LYXNoZ2FyfExNVCBYSlR8LTVPLmsgLTYwfDAxfC0xR2d0Ty5rIiwKCQkJIkFzaWEvS2F0aG1hbmR1fExNVCBJU1QgTlBUfC01Ri5nIC01dSAtNUp8MDEyfC0yMUpoRi5nIDJFR01iLmciLAoJCQkiQXNpYS9LaGFuZHlnYXxMTVQgWUFLVCBZQUtUIFlBS1NUIFlBS1NUIFZMQVQgVkxBU1QgVkxBVCBZQUtUfC05Mi5kIC04MCAtOTAgLWEwIC05MCAtYTAgLWIwIC1iMCAtYTB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzI0MTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzI1NjU2NTY1NjU2NTY1NjU3ODJ8LTIxUTkyLmQgcEFwMi5kIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY04wIElNMCByVTAgMWNMMCAxY1EwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCBxSzAgeU4wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDE3VjAgN3pEMCIsCgkJCSJBc2lhL0tyYXNub3lhcnNrfExNVCBLUkFUIEtSQVQgS1JBU1QgS1JBU1QgS1JBVHwtNmIucSAtNjAgLTcwIC04MCAtNzAgLTgwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyNDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzI1MnwtMjFIaWIucSBwckFiLnEgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTjAgSU0wIHJVMCAxY0wwIDFjUTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MCIsCgkJCSJBc2lhL0t1YWxhX0x1bXB1cnxTTVQgTUFMVCBNQUxTVCBNQUxUIE1BTFQgSlNUIE1ZVHwtNlQucCAtNzAgLTdrIC03ayAtN3UgLTkwIC04MHwwMTIzNDU0NnwtMkJnNlQucCAxN2FuVC5wIDdoWEUgZE0wMCAxN2JPIDhGeXUgMXNvMXUiLAoJCQkiQXNpYS9LdWNoaW5nfExNVCBCT1JUIEJPUlQgQk9SVFNUIEpTVCBNWVR8LTdsLmsgLTd1IC04MCAtOGsgLTkwIC04MHwwMTIzMjMyMzIzMjMyMzIzMjQyNXwtMUtJVGwuayBnRGJQLmsgNnludSBBbkUgMU8wayBBbkUgMU5BayBBbkUgMU5BayBBbkUgMU5BayBBbkUgMU8wayBBbkUgMU5BayBBbkUgcEFrIDhGejAgMXNvMTAiLAoJCQkiQXNpYS9LdXdhaXR8TE1UIEFTVHwtM2IuVSAtMzB8MDF8LU1HM2IuVSIsCgkJCSJBc2lhL01hY2FvfExNVCBNT1QgTU9TVCBDU1R8LTd5LmsgLTgwIC05MCAtODB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxM3wtMmxlN3kuayAxWE8zNC5rIDF3bjAgUmQwIDF3bjAgUjl1IDF3cXUgVTEwIDF0ejAgVFZ1IDF0ejAgMTdndSAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNKdSAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjT3UgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNKdSAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgS0VwMCIsCgkJCSJBc2lhL01hZ2FkYW58TE1UIE1BR1QgTUFHVCBNQUdTVCBNQUdTVCBNQUdUfC1hMy5jIC1hMCAtYjAgLWMwIC1iMCAtYzB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzI0MTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjUxfC0xUGNhMy5jIGVVbzMuYyAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCBJTTAgclUwIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIiwKCQkJIkFzaWEvTWFrYXNzYXJ8TE1UIE1NVCBXSVRBIEpTVHwtN1YuQSAtN1YuQSAtODAgLTkwfDAxMjMyfC0yMUpqVi5BIHZmYzAgbXlMVi5BIDhNTDAiLAoJCQkiQXNpYS9NYW5pbGF8UEhUIFBIU1QgSlNUfC04MCAtOTAgLTkwfDAxMDIwMTAxMHwtMWtKSTAgQUwwIGNLMTAgNjVYMCBtWEIwIHZYMCBWSzEwIDFkYjAiLAoJCQkiQXNpYS9NdXNjYXR8TE1UIEdTVHwtM1MubyAtNDB8MDF8LTIxSmZTLm8iLAoJCQkiQXNpYS9OaWNvc2lhfExNVCBFRVQgRUVTVHwtMmQucyAtMjAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0xVmMyZC5zIDJhM2NkLnMgMWNMMCAxcXAwIFh6MCAxOUIwIDE5WDAgMWZCMCAxZGIwIDFjcDAgMWNMMCAxZkIwIDE5WDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFvMzAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJBc2lhL05vdm9rdXpuZXRza3xMTVQgS1JBVCBLUkFUIEtSQVNUIEtSQVNUIE5PVlNUIE5PVlQgTk9WVHwtNU0uTSAtNjAgLTcwIC04MCAtNzAgLTcwIC02MCAtNzB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzI0MTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzI1NjcyfC0xUGN0TS5NIGVVTE0uTSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCBJTTAgclUwIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU4wIFdNMCA4SHowIiwKCQkJIkFzaWEvTm92b3NpYmlyc2t8TE1UIE5PVlQgTk9WVCBOT1ZTVCBOT1ZTVHwtNXYuRSAtNjAgLTcwIC04MCAtNzB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzI0MTIzMjM0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDEyMXwtMjFRbnYuRSBwQUZ2LkUgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTjAgSU0wIHJVMCAxY0wwIDFjUTAgbWwwIE9zMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MCIsCgkJCSJBc2lhL09tc2t8TE1UIE9NU1QgT01TVCBPTVNTVCBPTVNTVCBPTVNUfC00Ui51IC01MCAtNjAgLTcwIC02MCAtNzB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzI0MTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjUyfC0yMjRzUi51IHBNTFIudSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCBJTTAgclUwIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIiwKCQkJIkFzaWEvT3JhbHxMTVQgVVJBVCBVUkFUIFVSQVNUIFVSQVQgVVJBU1QgT1JBVCBPUkFTVCBPUkFUfC0zcC5vIC00MCAtNTAgLTYwIC02MCAtNTAgLTQwIC01MCAtNTB8MDEyMzQzMjMyMzIzMjMyMzIzMjUxNTE2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY4fC0xUGMzcC5vIGVVbnAubyAyM0NMMCAxZGIwIDFjTTAgMWRjMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTjAgMWNNMCAxZkEwIDJVSzAgRnowIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFJXMCIsCgkJCSJBc2lhL1BvbnRpYW5ha3xMTVQgUE1UIFdJQiBKU1QgV0lCIFdJVEEgV0lCfC03aC5rIC03aC5rIC03dSAtOTAgLTgwIC04MCAtNzB8MDEyMzI0MjU2fC0ydWE3aC5rIFhFMDAgbXVuTC5rIDhSYXUgNmtwdSA0UFh1IHhoY3UgV3FudSIsCgkJCSJBc2lhL1B5b25neWFuZ3xMTVQgS1NUIEpDU1QgSlNUIEtTVHwtOG4gLTh1IC05MCAtOTAgLTkwfDAxMjM0fC0ydW04biA5N1hSIDEyRlh1IGpkQTAiLAoJCQkiQXNpYS9RYXRhcnxMTVQgR1NUIEFTVHwtM3EuOCAtNDAgLTMwfDAxMnwtMjFKZnEuOCAyN0JYcS44IiwKCQkJIkFzaWEvUXl6eWxvcmRhfExNVCBLSVpUIEtJWlQgS0laU1QgS0laVCBRWVpUIFFZWlQgUVlaU1R8LTRsLlEgLTQwIC01MCAtNjAgLTYwIC01MCAtNjAgLTcwfDAxMjM0MzIzMjMyMzIzMjMyMzIzMjMyNTY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3NnwtMVBjNGwuUSBlVW9sLlEgMjNDTDAgMWRiMCAxY00wIDFkYzAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAyVUswIGRDMCByVTAgMWNMMCAxY1EwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAiLAoJCQkiQXNpYS9SYW5nb29ufFJNVCBCVVJUIEpTVCBNTVR8LTZvLkUgLTZ1IC05MCAtNnV8MDEyM3wtMjFKaW8uRSBTbW5TLkUgN2o5dSIsCgkJCSJBc2lhL1JpeWFkaHxMTVQgQVNUfC0zNi5RIC0zMHwwMXwtVHZENi5RIiwKCQkJIkFzaWEvU2FraGFsaW58TE1UIEpDU1QgSlNUIFNBS1QgU0FLU1QgU0FLU1QgU0FLVHwtOXUuTSAtOTAgLTkwIC1iMCAtYzAgLWIwIC1hMHwwMTIzNDM0MzQzNDM0MzQzNDM0MzQzNDM1NjM0MzQzNDM0MzQzNTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjM2fC0yQUdWdS5NIDFpYU11Lk0gamUwMCAxcUZhMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCBJTTAgclUwIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8xMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIiwKCQkJIkFzaWEvU2FtYXJrYW5kfExNVCBTQU1UIFNBTVQgU0FNU1QgVEFTVCBVWlNUIFVaVHwtNHIuUiAtNDAgLTUwIC02MCAtNjAgLTYwIC01MHwwMTIzNDMyMzIzMjMyMzIzMjMyMzIzMjM1NnwtMVBjNHIuUiBlVW9yLlIgMjNDTDAgMWRiMCAxY00wIDFkYzAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDExeDAgYmYwIiwKCQkJIkFzaWEvU2VvdWx8TE1UIEtTVCBKQ1NUIEpTVCBLU1QgS0RUIEtEVHwtOHIuUSAtOHUgLTkwIC05MCAtOTAgLTl1IC1hMHwwMTIzNDE1MTUxNTE1MTUxNTE0NjQ2NHwtMnVtOHIuUSA5N1hWLlEgMTJGWHUgampBMCBrS28wIDJJMHUgT0wwIDFGQjAgUmIwIDFxTjAgVFgwIDF0QjAgVFgwIDF0QjAgVFgwIDF0QjAgVFgwIDJhcDAgMTJGQnUgMTFBMCAxbzAwIDExQTAiLAoJCQkiQXNpYS9TaW5nYXBvcmV8U01UIE1BTFQgTUFMU1QgTUFMVCBNQUxUIEpTVCBTR1QgU0dUfC02VC5wIC03MCAtN2sgLTdrIC03dSAtOTAgLTd1IC04MHwwMTIzNDU0Njd8LTJCZzZULnAgMTdhblQucCA3aFhFIGRNMDAgMTdiTyA4Rnl1IE1zcHUgRFRBMCIsCgkJCSJBc2lhL1NyZWRuZWtvbHltc2t8TE1UIE1BR1QgTUFHVCBNQUdTVCBNQUdTVCBNQUdUIFNSRVR8LWFlLlEgLWEwIC1iMCAtYzAgLWIwIC1jMCAtYjB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzI0MTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjU2fC0xUGNhZS5RIGVVb2UuUSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCBJTTAgclUwIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIiwKCQkJIkFzaWEvVGFpcGVpfEpXU1QgSlNUIENTVCBDRFR8LTgwIC05MCAtODAgLTkwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0xaXc4MCBqb00wIDF5bzAgVHowIDFpcDAgMWpYMCAxY04wIDExYjAgMW9OMCAxMWIwIDFvTjAgMTFiMCAxb04wIDExYjAgMTBOMCAxQlgwIDEwcDAgMXB6MCAxMHAwIDFwejAgMTBwMCAxZGIwIDFkZDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxQkIwIE1MMCAxQmQwIE1MMCB1cTEwIDFkYjAgMWNOMCAxZGIwIDk3QjAgQUwwIiwKCQkJIkFzaWEvVGFzaGtlbnR8TE1UIFRBU1QgVEFTVCBUQVNTVCBUQVNTVCBVWlNUIFVaVHwtNEIuYiAtNTAgLTYwIC03MCAtNjAgLTYwIC01MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjQ1NnwtMVBjNEIuYiBlVW5CLmIgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDExeTAgYmYwIiwKCQkJIkFzaWEvVGJpbGlzaXxUQk1UIFRCSVQgVEJJVCBUQklTVCBUQklTVCBHRVNUIEdFVCBHRVQgR0VTVHwtMlguYiAtMzAgLTQwIC01MCAtNDAgLTQwIC0zMCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyNDU2NTY1NjU3ODc4Nzg3ODc4Nzg3ODc4Nzg1Njd8LTFQYzJYLmIgMWpVblguYiBXQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAzeTAgMTlmMCAxY0swIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY00wIDFjTDAgMWZCMCAzTnowIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIEFuMCBPczAgV00wIiwKCQkJIkFzaWEvVGVocmFufExNVCBUTVQgSVJTVCBJUlNUIElSRFQgSVJEVHwtM3AuSSAtM3AuSSAtM3UgLTQwIC01MCAtNHV8MDEyMzQzMjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTJ8LTJidERwLkkgMWQzYzAgMWh1TFQuSSBUWHUgMXB6MCBzTjAgdkF1IDFjTDAgMWRCMCAxZW4wIHBOQjAgVUwwIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNOMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY04wIDFkejAgNjRwMCAxZHowIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY04wIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNOMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY04wIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY04wIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAiLAoJCQkiQXNpYS9UaGltYnV8TE1UIElTVCBCVFR8LTVXLkEgLTV1IC02MHwwMTJ8LVN1NVcuQSAxQkdNcy5BIiwKCQkJIkFzaWEvVG9reW98SkNTVCBKU1QgSkRUfC05MCAtOTAgLWEwfDAxMjEyMTIxMjF8LTFpdzkwIHBLcTAgUUwwIDFsQjAgMTNYMCAxekIwIE5YMCAxekIwIE5YMCIsCgkJCSJBc2lhL1VsYWFuYmFhdGFyfExNVCBVTEFUIFVMQVQgVUxBU1R8LTc3LncgLTcwIC04MCAtOTB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTJBUEg3LncgMlVrbzcudyBjS24wIDFkYjAgMWRkMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgNmhEMCAxMXowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAiLAoJCQkiQXNpYS9Vc3QtTmVyYXxMTVQgWUFLVCBZQUtUIE1BR1NUIE1BR1QgTUFHU1QgTUFHVCBNQUdUIFZMQVQgVkxBVHwtOXcuUyAtODAgLTkwIC1jMCAtYjAgLWIwIC1hMCAtYzAgLWIwIC1hMHwwMTIzNDM0MzQzNDM0MzQzNDM0MzQzNDU2NDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0Nzg5fC0yMVE5dy5TIHBBcHcuUyAyM0NMMCAxZDkwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCBJTTAgclUwIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxN1YwIDd6RDAiLAoJCQkiQXNpYS9WbGFkaXZvc3Rva3xMTVQgVkxBVCBWTEFUIFZMQVNUIFZMQVNUIFZMQVR8LThMLnYgLTkwIC1hMCAtYjAgLWEwIC1iMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjQxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyNTJ8LTFTSklMLnYgaXRYTC52IDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY04wIElNMCByVTAgMWNMMCAxY1EwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejAiLAoJCQkiQXNpYS9ZYWt1dHNrfExNVCBZQUtUIFlBS1QgWUFLU1QgWUFLU1QgWUFLVHwtOEMuVyAtODAgLTkwIC1hMCAtOTAgLWEwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyNDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzI1MnwtMjFROEMuVyBwQW9DLlcgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTjAgSU0wIHJVMCAxY0wwIDFjUTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MCIsCgkJCSJBc2lhL1lla2F0ZXJpbmJ1cmd8TE1UIFBNVCBTVkVUIFNWRVQgU1ZFU1QgU1ZFU1QgWUVLVCBZRUtTVCBZRUtUfC00Mi54IC0zSi41IC00MCAtNTAgLTYwIC01MCAtNTAgLTYwIC02MHwwMTIzNDM0MzQzNDM0MzQzNDM0MzQzNDM1MjY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njg2fC0yYWc0Mi54IDdtUWgucyBxQnZKLjUgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTjAgSU0wIHJVMCAxY0wwIDFjUTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MCIsCgkJCSJBc2lhL1llcmV2YW58TE1UIFlFUlQgWUVSVCBZRVJTVCBZRVJTVCBBTVNUIEFNVCBBTVQgQU1TVHwtMlcgLTMwIC00MCAtNTAgLTQwIC00MCAtMzAgLTQwIC01MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjQ1NjU2NTY1NjU3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3fC0xUGMyVyAxalVuVyBXQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxYW0wIDJyMCAxY0owIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgM0ZiMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAiLAoJCQkiQXRsYW50aWMvQXpvcmVzfEhNVCBBWk9UIEFaT1NUIEFaT01UIEFaT1QgQVpPU1QgV0VUfDFTLncgMjAgMTAgMCAxMCAwIDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIxMjMyMTIzMjEyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjE0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTY1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTJsZFc1LnMgYVBYNS5zIFNwMCBMWDAgMXZjMCBUYzAgMXVNMCBTTTAgMXZjMCBUYzAgMXZjMCBTTTAgMXZjMCA2NjAwIDFjbzAgM0UwMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWlvMCAxN2MwIDNJMDAgMTdjMCAxY00wIDFjTTAgM0ZjMCAxY00wIDFhMDAgMWZBMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDFxTTAgRGMwIDF0QTAgMWNNMCAxZGMwIDE0MDAgZ0wwIElNMCBzMTAgVTAwIGRYMCBSYzAgcGQwIFJjMCBnTDAgT28wIHBkMCBSYzAgZ0wwIE9vMCBwZDAgMTRvMCAxY00wIDFjUDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDNDbzAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgcUlsMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTjAgMWNMMCAxY04wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY0wwIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiQXRsYW50aWMvQmVybXVkYXxMTVQgQVNUIEFEVHw0ai5pIDQwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTFCblJFLkcgMUxUYkUuRyAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQXRsYW50aWMvQ2FuYXJ5fExNVCBDQU5UIFdFVCBXRVNUfDExLkEgMTAgMCAtMTB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFVdGFXLm8gWFBBVy5vIDFsQUswIDFhMTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJBdGxhbnRpYy9DYXBlX1ZlcmRlfExNVCBDVlQgQ1ZTVCBDVlR8MXkuNCAyMCAxMCAxMHwwMTIxM3wtMnhvbXAuVSAxcU9NcC5VIDd6WDAgMWRqZjAiLAoJCQkiQXRsYW50aWMvRmFlcm9lfExNVCBXRVQgV0VTVHxyLjQgMCAtMTB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJ1U253LlUgMldnb3cuVSAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJBdGxhbnRpYy9NYWRlaXJhfEZNVCBNQURUIE1BRFNUIE1BRE1UIFdFVCBXRVNUfDE3LkEgMTAgMCAtMTAgMCAtMTB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIxMjMyMTIzMjEyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjE0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTJsZFdRLm8gYVBXUS5vIFNwMCBMWDAgMXZjMCBUYzAgMXVNMCBTTTAgMXZjMCBUYzAgMXZjMCBTTTAgMXZjMCA2NjAwIDFjbzAgM0UwMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWlvMCAxN2MwIDNJMDAgMTdjMCAxY00wIDFjTTAgM0ZjMCAxY00wIDFhMDAgMWZBMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDFxTTAgRGMwIDF0QTAgMWNNMCAxZGMwIDE0MDAgZ0wwIElNMCBzMTAgVTAwIGRYMCBSYzAgcGQwIFJjMCBnTDAgT28wIHBkMCBSYzAgZ0wwIE9vMCBwZDAgMTRvMCAxY00wIDFjUDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDNDbzAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgcUlsMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTjAgMWNMMCAxY04wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY0wwIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiQXRsYW50aWMvUmV5a2phdmlrfFJNVCBJU1QgSVNTVCBHTVR8MXIuTSAxMCAwIDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTN8LTJ1V213LmMgbWZhdy5jIDFCZDAgTUwwIDFMQjAgTkxYMCAxcGUwIHpkMCAxRUwwIExBMCAxQzAwIE9vMCAxd28wIFJjMCAxd28wIFJjMCAxd28wIFJjMCAxemMwIE9vMCAxemMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbzAwIDExQTAgMWxjMCAxNG8wIDFvMDAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMW8wMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMW8wMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbzAwIDE0bzAiLAoJCQkiQXRsYW50aWMvU291dGhfR2VvcmdpYXxHU1R8MjB8MHwiLAoJCQkiQXRsYW50aWMvU3RhbmxleXxTTVQgRktUIEZLU1QgRktUIEZLU1R8M1AubyA0MCAzMCAzMCAyMHwwMTIxMjEyMTIxMjEyMTM0MzQzMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyfC0ya0p3OC5BIDEyYkE4LkEgMTlYMCAxZkIwIDE5WDAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCBDbjAgMUNjMTAgV0wwIDFxTDAgVTEwIDF0ejAgVTEwIDFxTTAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDF0ejAgVTEwIDF0ejAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDF0ejAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTjAgVTEwIDF3bjAgUmQwIDF3bjAgVTEwIDF0ejAgVTEwIDF0ejAgVTEwIDF0ejAgVTEwIDF0ejAgVTEwIDF3bjAgVTEwIDF0ejAgVTEwIDF0ejAgVTEwIiwKCQkJIkF1c3RyYWxpYS9BQ1R8QUVTVCBBRURUfC1hMCAtYjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMXwtMjkzbFggeGNYIDEwamQwIHlMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDE3YzEwIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIDE0bzAgMW8wMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBVMDAgMXFNMCBXTTAgMXRBMCBXTTAgMXRBMCBVMDAgMXRBMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDExQTAgMW8wMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCBXTTAgMXFNMCAxNG8wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCIsCgkJCSJBdXN0cmFsaWEvQWRlbGFpZGV8QUNTVCBBQ0RUfC05dSAtYXV8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMXwtMjkzbHQgeGNYIDEwamQwIHlMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDE3YzEwIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFUwMCAxcU0wIFdNMCAxdEEwIFdNMCAxdEEwIFUwMCAxdEEwIFUwMCAxdEEwIE9vMCAxemMwIFdNMCAxcU0wIFJjMCAxemMwIFUwMCAxdEEwIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgV00wIDFxTTAgMTRvMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAiLAoJCQkiQXVzdHJhbGlhL0JyaXNiYW5lfEFFU1QgQUVEVHwtYTAgLWIwfDAxMDEwMTAxMDEwMTAxMDEwfC0yOTNsWCB4Y1ggMTBqZDAgeUwwIDFjTjAgMWNMMCAxZkIwIDE5WDAgMTdjMTAgTEEwIEgxQTAgT28wIDF6YzAgT28wIDF6YzAgT28wIiwKCQkJIkF1c3RyYWxpYS9Ccm9rZW5fSGlsbHxBQ1NUIEFDRFR8LTl1IC1hdXwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxfC0yOTNsdCB4Y1ggMTBqZDAgeUwwIDFjTjAgMWNMMCAxZkIwIDE5WDAgMTdjMTAgTEEwIDFDMDAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgMTRvMCAxbzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFUwMCAxcU0wIFdNMCAxdEEwIFdNMCAxdEEwIFUwMCAxdEEwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgV00wIDFxTTAgMTRvMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAiLAoJCQkiQXVzdHJhbGlhL0N1cnJpZXxBRVNUIEFFRFR8LWEwIC1iMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxfC0yOUU4MCAxOVgwIDEwamQwIHlMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDE3YzEwIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIDExQTAgMXFNMCBXTTAgMXFNMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXdvMCBXTTAgMXRBMCBXTTAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCAxMUEwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDExQTAgMW8wMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWEwMCAxaW8wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIiwKCQkJIkF1c3RyYWxpYS9EYXJ3aW58QUNTVCBBQ0RUfC05dSAtYXV8MDEwMTAxMDEwfC0yOTNsdCB4Y1ggMTBqZDAgeUwwIDFjTjAgMWNMMCAxZkIwIDE5WDAiLAoJCQkiQXVzdHJhbGlhL0V1Y2xhfEFDV1NUIEFDV0RUfC04SiAtOUp8MDEwMTAxMDEwMTAxMDEwMTAxMHwtMjkza0kgeGNYIDEwamQwIHlMMCAxY04wIDFjTDAgMWdTcDAgT28wIGw1QTAgT28wIGlKQTAgRzAwIHpVMDAgSU0wIDFxTTAgMTFBMCAxbzAwIDExQTAiLAoJCQkiQXVzdHJhbGlhL0hvYmFydHxBRVNUIEFFRFR8LWEwIC1iMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDF8LTI5RTgwIDE5WDAgMTBqZDAgeUwwIDFjTjAgMWNMMCAxZkIwIDE5WDAgVmZCMCAxY00wIDFvMDAgUmMwIDF3bzAgUmMwIDF3bzAgVTAwIDF3bzAgTEEwIDFDMDAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgMTFBMCAxcU0wIFdNMCAxcU0wIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxd28wIFdNMCAxdEEwIFdNMCAxdEEwIFUwMCAxdEEwIFUwMCAxdEEwIDExQTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMTFBMCAxbzAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxYTAwIDFpbzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAiLAoJCQkiQXVzdHJhbGlhL0xISXxBRVNUIExIU1QgTEhEVCBMSERUfC1hMCAtYXUgLWJ1IC1iMHwwMTIxMjEyMTIxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzfHJhQzAgMXpkdSBSYjAgMXpkMCBPbjAgMXpkMCBPbjAgMXpkMCBPbjAgMXpkMCBUWHUgMXFNdSBXTHUgMXRBdSBXTHUgMXRBdSBUWHUgMXRBdSBPbnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBSYnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSAxMXp1IDFvMHUgMTF6dSAxbzB1IDExenUgMW8wdSAxMXp1IDFxTXUgV0x1IDExQXUgMW5YdSAxcU11IDExenUgMW8wdSAxMXp1IDFvMHUgMTF6dSAxcU11IFdMdSAxcU11IDExenUgMW8wdSBXTHUgMXFNdSAxNG51IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWZ6dSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSIsCgkJCSJBdXN0cmFsaWEvTGluZGVtYW58QUVTVCBBRURUfC1hMCAtYjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yOTNsWCB4Y1ggMTBqZDAgeUwwIDFjTjAgMWNMMCAxZkIwIDE5WDAgMTdjMTAgTEEwIEgxQTAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIiwKCQkJIkF1c3RyYWxpYS9NZWxib3VybmV8QUVTVCBBRURUfC1hMCAtYjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMXwtMjkzbFggeGNYIDEwamQwIHlMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDE3YzEwIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFUwMCAxcU0wIFdNMCAxcU0wIDExQTAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDExQTAgMW8wMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCBXTTAgMXFNMCAxNG8wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCIsCgkJCSJBdXN0cmFsaWEvUGVydGh8QVdTVCBBV0RUfC04MCAtOTB8MDEwMTAxMDEwMTAxMDEwMTAxMHwtMjkzalggeGNYIDEwamQwIHlMMCAxY04wIDFjTDAgMWdTcDAgT28wIGw1QTAgT28wIGlKQTAgRzAwIHpVMDAgSU0wIDFxTTAgMTFBMCAxbzAwIDExQTAiLAoJCQkiQ0VUfENFVCBDRVNUfC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJhRmUwIDExZDAgMWlPMCAxMUEwIDFvMDAgMTFBMCBRcmMwIDZpMDAgV00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMTZNMCAxZ01NMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiQ1NUNkNEVHxDU1QgQ0RUIENXVCBDUFR8NjAgNTAgNTAgNTB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNjFzMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MzAgaXcwIFF3TjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiQ2hpbGUvRWFzdGVySXNsYW5kfEVNVCBFQVNTVCBFQVNUIEVBU1QgRUFTU1R8N2gucyA2MCA3MCA2MCA1MHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzR8LTF1U2dHLncgbkhVRy53IG9wMCA5VUswIFJYQjAgV0wwIDF6ZDAgT24wIDFpcDAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMWxkMCAxNG4wIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDFjTDAgMWNOMCAxMXowIDFsZDAgMTRuMCAxcU4wIDExejAgMWNOMCAxOVgwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDE3YjAgMWlwMCAxMXowIDFpcDAgMWZ6MCAxZkIwIDExejAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxN2IwIDFpcDAgMTF6MCAxbzEwIDE5WDAgMWZCMCAxblgwIEcxMCAxRUwwIE9wMCAxemIwIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxemIwIE9wMCAxemIwIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxemIwIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxemIwIE9wMCAxemIwIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxd24wIFJkMCAxemIwIE9wMCAxemIwIFJkMCAxd24wIFJkMCIsCgkJCSJFRVR8RUVUIEVFU1R8LTIwIC0zMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8aERCMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiRVNUfEVTVHw1MHwwfCIsCgkJCSJFU1Q1RURUfEVTVCBFRFQgRVdUIEVQVHw1MCA0MCA0MCA0MHwwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTI2MXQwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHg0MCBpdjAgUXdOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCIsCgkJCSJFaXJlfERNVCBJU1QgR01UIEJTVCBJU1R8cC5sIC15LkQgMCAtMTAgLTEwfDAxMjMyMzIzMjMyMzI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyfC0yYXg5eS5EIFJjMCAxZnp5LkQgMTRNMCAxZmMwIDFnMDAgMWNvMCAxZGMwIDFjbzAgMW9vMCAxNDAwIDFkYzAgMTlBMCAxaW8wIDFpbzAgV00wIDFvMDAgMTRvMCAxbzAwIDE3YzAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxbGMwIDE3YzAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFmQTAgMWNNMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMXFNMCBEYzAgZzVYMCAxNHAwIDF3bjAgMTdkMCAxaW8wIDExQTAgMW8wMCAxN2MwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxbGMwIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFhMDAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDF0QTAgSU0wIDkwbzAgVTAwIDF0QTAgVTAwIDF0QTAgVTAwIDF0QTAgVTAwIDF0QTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDF0QTAgVTAwIDF0QTAgVTAwIDF0QTAgMTF6MCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxNG8wIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkV0Yy9HTVQrMHxHTVR8MHwwfCIsCgkJCSJFdGMvR01UKzF8R01UKzF8MTB8MHwiLAoJCQkiRXRjL0dNVCsxMHxHTVQrMTB8YTB8MHwiLAoJCQkiRXRjL0dNVCsxMXxHTVQrMTF8YjB8MHwiLAoJCQkiRXRjL0dNVCsxMnxHTVQrMTJ8YzB8MHwiLAoJCQkiRXRjL0dNVCsyfEdNVCsyfDIwfDB8IiwKCQkJIkV0Yy9HTVQrM3xHTVQrM3wzMHwwfCIsCgkJCSJFdGMvR01UKzR8R01UKzR8NDB8MHwiLAoJCQkiRXRjL0dNVCs1fEdNVCs1fDUwfDB8IiwKCQkJIkV0Yy9HTVQrNnxHTVQrNnw2MHwwfCIsCgkJCSJFdGMvR01UKzd8R01UKzd8NzB8MHwiLAoJCQkiRXRjL0dNVCs4fEdNVCs4fDgwfDB8IiwKCQkJIkV0Yy9HTVQrOXxHTVQrOXw5MHwwfCIsCgkJCSJFdGMvR01ULTF8R01ULTF8LTEwfDB8IiwKCQkJIkV0Yy9HTVQtMTB8R01ULTEwfC1hMHwwfCIsCgkJCSJFdGMvR01ULTExfEdNVC0xMXwtYjB8MHwiLAoJCQkiRXRjL0dNVC0xMnxHTVQtMTJ8LWMwfDB8IiwKCQkJIkV0Yy9HTVQtMTN8R01ULTEzfC1kMHwwfCIsCgkJCSJFdGMvR01ULTE0fEdNVC0xNHwtZTB8MHwiLAoJCQkiRXRjL0dNVC0yfEdNVC0yfC0yMHwwfCIsCgkJCSJFdGMvR01ULTN8R01ULTN8LTMwfDB8IiwKCQkJIkV0Yy9HTVQtNHxHTVQtNHwtNDB8MHwiLAoJCQkiRXRjL0dNVC01fEdNVC01fC01MHwwfCIsCgkJCSJFdGMvR01ULTZ8R01ULTZ8LTYwfDB8IiwKCQkJIkV0Yy9HTVQtN3xHTVQtN3wtNzB8MHwiLAoJCQkiRXRjL0dNVC04fEdNVC04fC04MHwwfCIsCgkJCSJFdGMvR01ULTl8R01ULTl8LTkwfDB8IiwKCQkJIkV0Yy9VQ1R8VUNUfDB8MHwiLAoJCQkiRXRjL1VUQ3xVVEN8MHwwfCIsCgkJCSJFdXJvcGUvQW1zdGVyZGFtfEFNVCBOU1QgTkVTVCBORVQgQ0VTVCBDRVR8LWoudyAtMWoudyAtMWsgLWsgLTIwIC0xMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTIzMjMyMzQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDV8LTJhRmNqLncgMTFiMCAxaVAwIDExQTAgMWlvMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFjbzAgMWlvMCAxeW8wIFBjMCAxYTAwIDFmQTAgMUJjMCBNbzAgMXRjMCBVbzAgMXRBMCBVMDAgMXVvMCBXMDAgMXMwMCBWQTAgMXNvMCBWYzAgMXNNMCBVTTAgMXdvMCBSYzAgMXUwMCBXbzAgMXJBMCBXMDAgMXMwMCBWQTAgMXNNMCBVTTAgMXcwMCBmVjAgQkNYLncgMXRBMCBVMDAgMXUwMCBXbzAgMXNtMCA2MDFrIFdNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDE2TTAgMWdNTTAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkV1cm9wZS9BbmRvcnJhfFdFVCBDRVQgQ0VTVHwwIC0xMCAtMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC1VQkEwIDF4SU4wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiRXVyb3BlL0F0aGVuc3xBTVQgRUVUIEVFU1QgQ0VTVCBDRVR8LTF5LlEgLTIwIC0zMCAtMjAgLTEwfDAxMjEyMzQzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmE2MXguUSBDTmJ4LlEgbW4wIGtVMTAgOWIwIDNFczAgWGEwIDFmYjAgMWRkMCBrM1gwIE56MCBTQ3AwIDF2YzAgU08wIDFjTTAgMWEwMCAxYW8wIDFmYzAgMWExMCAxZkcwIDFjZzAgMWRYMCAxYlgwIDFjUTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiRXVyb3BlL0JlbGZhc3R8R01UIEJTVCBCRFNUfDAgLTEwIC0yMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTIxMjEyMTIxMjEwMTAxMjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yYXhhMCBSYzAgMWZBMCAxNE0wIDFmYzAgMWcwMCAxY28wIDFkYzAgMWNvMCAxb28wIDE0MDAgMWRjMCAxOUEwIDFpbzAgMWlvMCBXTTAgMW8wMCAxNG8wIDFvMDAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxY00wIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxcU0wIERjMCAyUnowIERjMCAxemMwIE9vMCAxemMwIFJjMCAxd28wIDE3YzAgMWlNMCBGQTAgeEIwIDFmQTAgMWEwMCAxNG8wIGJiMCBMQTAgeEIwIFJjMCAxd28wIDExQTAgMW8wMCAxN2MwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxbGMwIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFhMDAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDF0QTAgSU0wIDkwbzAgVTAwIDF0QTAgVTAwIDF0QTAgVTAwIDF0QTAgVTAwIDF0QTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDF0QTAgVTAwIDF0QTAgVTAwIDF0QTAgMTF6MCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxNG8wIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkV1cm9wZS9CZWxncmFkZXxDRVQgQ0VTVHwtMTAgLTIwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0xOVJDMCAzSVAwIFdNMCAxZkEwIDFjTTAgMWNNMCAxcmMwIFFvMCAxdm1vMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiRXVyb3BlL0JlcmxpbnxDRVQgQ0VTVCBDRU1UfC0xMCAtMjAgLTMwfDAxMDEwMTAxMDEwMTAxMjEwMTAxMjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yYUZlMCAxMWQwIDFpTzAgMTFBMCAxbzAwIDExQTAgUXJjMCA2aTAwIFdNMCAxZkEwIDFjTTAgMWNNMCAxY00wIGtMMCBOYzAgbTEwIFdNMCAxYW8wIDFjcDAgZFgwIGp6MCBEZDAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxZWhBMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiRXVyb3BlL0JyYXRpc2xhdmF8Q0VUIENFU1R8LTEwIC0yMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJhRmUwIDExZDAgMWlPMCAxMUEwIDFvMDAgMTFBMCBRcmMwIDZpMDAgV00wIDFmQTAgMWNNMCAxNk0wIDFsYzAgMXRBMCAxN0EwIDExYzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxZmMwIDFhbzAgMWJOYzAgMWNNMCAxZkEwIDFhMDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvQnJ1c3NlbHN8V0VUIENFVCBDRVNUIFdFU1R8MCAtMTAgLTIwIC0xMHwwMTIxMjEyMTAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZWhjMCAzelgwIDExYzAgMWlPMCAxMUEwIDFvMDAgMTFBMCBteTAgSWMwIDFxTTAgUmMwIDFFTTAgVU0wIDF1MDAgMTBvMCAxaW8wIDFpbzAgMTdjMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxYTMwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFpbzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDFxTTAgRGMwIHkwMCA1V24wIFdNMCAxZkEwIDFjTTAgMTZNMCAxaU0wIDE2TTAgMUMwMCBVbzAgMWVlbzAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkV1cm9wZS9CdWNoYXJlc3R8Qk1UIEVFVCBFRVNUfC0xSS5vIC0yMCAtMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMXhBcEkubyAyMExJLm8gUkEwIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxQXhjMCBPbjAgMWZBMCAxYTEwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY0swIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMW5YMCAxMUUwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiRXVyb3BlL0J1ZGFwZXN0fENFVCBDRVNUfC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMmFGZTAgMTFkMCAxaU8wIDExQTAgMWlwMCAxN2IwIDFvcDAgMXRiMCBRMm0wIDNOZTAgV00wIDFmQTAgMWNNMCAxY00wIDFvSjAgMWRjMCAxMDMwIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFhMDAgMWlNMCAxZkEwIDhIYTAgUmIwIDF3TjAgUmIwIDFCQjAgTHowIDFDMjAgTEIwIFNOWDAgMWExMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkV1cm9wZS9CdXNpbmdlbnxDRVQgQ0VTVHwtMTAgLTIwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0xOUxjMCAxMUEwIDFvMDAgMTFBMCAxeEcxMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvQ2hpc2luYXV8Q01UIEJNVCBFRVQgRUVTVCBDRVNUIENFVCBNU0sgTVNEfC0xVCAtMUkubyAtMjAgLTMwIC0yMCAtMTAgLTMwIC00MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzQ1NDU0Njc2NzY3Njc2NzY3Njc2NzY3NjIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0yNmpkVCB3R01hLkEgMjBMSS5vIFJBMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMjdBMCAyZW4wIDM5ZzAgV00wIDFmQTAgMWNNMCBWOTAgMXQ3ejAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDF0eTAgMmJEMCAxY00wIDFjSzAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDFuWDAgMTFFMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkV1cm9wZS9Db3BlbmhhZ2VufENFVCBDRVNUfC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMmF6QzAgVHowIFZ1TzAgNjBxMCBXTTAgMWZBMCAxY00wIDFjTTAgMWNNMCBTMDAgMUhBMCBOYzAgMUMwMCBEYzAgMU5jMCBBbzAgMWg1QTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkV1cm9wZS9HaWJyYWx0YXJ8R01UIEJTVCBCRFNUIENFVCBDRVNUfDAgLTEwIC0yMCAtMTAgLTIwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMjEyMTIxMjEyMTAxMDEyMTAxMDEwMTAxMDEwMTAxMDEwMTAzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0M3wtMmF4YTAgUmMwIDFmQTAgMTRNMCAxZmMwIDFnMDAgMWNvMCAxZGMwIDFjbzAgMW9vMCAxNDAwIDFkYzAgMTlBMCAxaW8wIDFpbzAgV00wIDFvMDAgMTRvMCAxbzAwIDE3YzAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxbGMwIDE3YzAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFmQTAgMWNNMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMXFNMCBEYzAgMlJ6MCBEYzAgMXpjMCBPbzAgMXpjMCBSYzAgMXdvMCAxN2MwIDFpTTAgRkEwIHhCMCAxZkEwIDFhMDAgMTRvMCBiYjAgTEEwIHhCMCBSYzAgMXdvMCAxMUEwIDFvMDAgMTdjMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDE3YzAgMWxjMCAxN2MwIDFmQTAgMTBKejAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvSGVsc2lua2l8SE1UIEVFVCBFRVNUfC0xRC5OIC0yMCAtMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMVd1TkQuTiBPVUxELk4gMWRBMCAxeEdxMCAxY00wIDFjTTAgMWNNMCAxY04wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvS2FsaW5pbmdyYWR8Q0VUIENFU1QgQ0VUIENFU1QgTVNLIE1TRCBFRVNUIEVFVCBGRVR8LTEwIC0yMCAtMjAgLTMwIC0zMCAtNDAgLTMwIC0yMCAtMzB8MDEwMTAxMDEwMTAxMDIzMjQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc4N3wtMmFGZTAgMTFkMCAxaU8wIDExQTAgMW8wMCAxMUEwIFFyYzAgNmkwMCBXTTAgMWZBMCAxY00wIDFjTTAgQW0wIExiMCAxZW4wIG9wMCAxcE56MCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCAxY0owIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIiwKCQkJIkV1cm9wZS9LaWV2fEtNVCBFRVQgTVNLIENFU1QgQ0VUIE1TRCBFRVNUfC0yMi40IC0yMCAtMzAgLTIwIC0xMCAtNDAgLTMwfDAxMjM0MzQyNTI1MjUyNTI1MjUyNTI1MjUyNTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjF8LTFQYzIyLjQgZVVvMi40IHJuejAgMkhnMCBXTTAgMWZBMCBkYTAgMXY0bTAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgRGIwIDMyMjAgMWNLMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNRMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiRXVyb3BlL0xpc2JvbnxMTVQgV0VUIFdFU1QgV0VNVCBDRVQgQ0VTVHxBLkogMCAtMTAgLTIwIC0xMCAtMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIxMjMyMTIzMjEyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjE0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTI0NTQ1NDU0MjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0ybGRYbi5mIGFQV24uZiBTcDAgTFgwIDF2YzAgVGMwIDF1TTAgU00wIDF2YzAgVGMwIDF2YzAgU00wIDF2YzAgNjYwMCAxY28wIDNFMDAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFpbzAgMTdjMCAzSTAwIDE3YzAgMWNNMCAxY00wIDNGYzAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxcU0wIERjMCAxdEEwIDFjTTAgMWRjMCAxNDAwIGdMMCBJTTAgczEwIFUwMCBkWDAgUmMwIHBkMCBSYzAgZ0wwIE9vMCBwZDAgUmMwIGdMMCBPbzAgcGQwIDE0bzAgMWNNMCAxY1AwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAzQ28wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIHB2eTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTjAgMWNMMCAxY04wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY0wwIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiRXVyb3BlL0x1eGVtYm91cmd8TE1UIENFVCBDRVNUIFdFVCBXRVNUIFdFU1QgV0VUfC1vLkEgLTEwIC0yMCAwIC0xMCAtMjAgLTEwfDAxMjEyMTIxMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQ1NjU2NTEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJERzBvLkEgdDZtby5BIFRCMCAxblgwIFVwMCAxbzIwIDExQTAgclcwIENNMCAxcVAwIFI5MCAxRU8wIFVLMCAxdTIwIDEwbTAgMWlwMCAxaW4wIDE3ZTAgMTlXMCAxZkIwIDFkYjAgMWNwMCAxaW4wIDE3ZDAgMWZ6MCAxYTEwIDFpbjAgMWExMCAxaW4wIDE3ZjAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxY00wIDFjTTAgMWEwMCAxaW8wIDFjTTAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxcU0wIERjMCB2QTAgNjBMMCBXTTAgMWZBMCAxY00wIDE3YzAgMWlvMCAxNk0wIDFDMDAgVW8wIDFlZW8wIDFhMDAgMWZBMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFhMDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvTWFkcmlkfFdFVCBXRVNUIFdFTVQgQ0VUIENFU1R8MCAtMTAgLTIwIC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMjEyMTIxMjEyMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDN8LTI4ZGQwIDExQTAgMWdvMCAxOUEwIDFjbzAgMWRBMCBiMUEwIDE4bzAgM0kwMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWlvMCAxN2MwIGl5bzAgUmMwIDE4bzAgMWhjMCAxaW8wIDFhMDAgMTRvMCA1YUwwIE1NMCAxdmMwIDE3QTAgMWkwMCAxYmMwIDFlbzAgMTdkMCAxaW4wIDE3QTAgNmhBMCAxME4wIFhJTDAgMWExMCAxaW4wIDE3ZDAgMTlYMCAxY04wIDFmejAgMWExMCAxZlgwIDFjcDAgMWNPMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkV1cm9wZS9NYWx0YXxDRVQgQ0VTVHwtMTAgLTIwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJhczEwIE0wMCAxY00wIDFjTTAgMTRvMCAxbzAwIFdNMCAxcU0wIDE3YzAgMWNNMCBNM0EwIDVNMjAgV00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMTZtMCAxZGUwIDFsYzAgMTRtMCAxbGMwIFdPMCAxcU0wIEdUVzAgT24wIDFDMTAgTHowIDFDMTAgTHowIDFFTjAgTHowIDFDMTAgTHowIDF6ZDAgT28wIDFDMDAgT24wIDFjcDAgMWNNMCAxbEEwIFhjMCAxcXEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFpTjAgMTl6MCAxZkIwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkV1cm9wZS9NaW5za3xNTVQgRUVUIE1TSyBDRVNUIENFVCBNU0QgRUVTVCBGRVR8LTFPIC0yMCAtMzAgLTIwIC0xMCAtNDAgLTMwIC0zMHwwMTIzNDM0MzI1MjUyNTI1MjUyNTI1MjUyNTI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNzJ8LTFQYzFPIGVVbk8gcU5YMCAzZ1EwIFdNMCAxZkEwIDFjTTAgQWwwIDF0c24wIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAzRmMwIDFjTjAgMWNLMCAxY00wIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh5MCIsCgkJCSJFdXJvcGUvTW9uYWNvfFBNVCBXRVQgV0VTVCBXRU1UIENFVCBDRVNUfC05LmwgMCAtMTAgLTIwIC0xMCAtMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIzMjMyMzIzNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTJuY285LmwgY05iOS5sIEhBMCAxOUEwIDFpTTAgMTFjMCAxb28wIFdvMCAxcmMwIFFNMCAxRU0wIFVNMCAxdTAwIDEwbzAgMWlvMCAxd28wIFJjMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFpbzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDFxTTAgRGYwIDJSVjAgMTF6MCAxMUIwIDF6ZTAgV00wIDFmQTAgMWNNMCAxZmEwIDFhcTAgMTZNMCAxZWtuMCAxY0wwIDFmQzAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkV1cm9wZS9Nb3Njb3d8TU1UIE1NVCBNU1QgTURTVCBNU0QgTVNLIE1TTSBFRVQgRUVTVCBNU0t8LTJ1LmggLTJ2LmogLTN2LmogLTR2LmogLTQwIC0zMCAtNTAgLTIwIC0zMCAtNDB8MDEyMTMyMzQ1NDY0NTc1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU4NzU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTk1fC0yYWcydS5oIDJweVcuVyAxYkEwIDExWDAgR04wIDFIYjAgYzIwIGltdi5qIDNEQTAgZHowIDE1QTAgYzEwIDJxMTAgaU0xMCAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCBJTTAgclUwIDFjTDAgMWNRMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIiwKCQkJIkV1cm9wZS9QYXJpc3xQTVQgV0VUIFdFU1QgQ0VTVCBDRVQgV0VNVHwtOS5sIDAgLTEwIC0yMCAtMTAgLTIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjM0MzQzNTI1NDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzR8LTJuY284LmwgY05iOC5sIEhBMCAxOUEwIDFpTTAgMTFjMCAxb28wIFdvMCAxcmMwIFFNMCAxRU0wIFVNMCAxdTAwIDEwbzAgMWlvMCAxd28wIFJjMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFpbzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDFxTTAgRGYwIElrMCA1TTMwIFdNMCAxZkEwIDFjTTAgVngwIGhCMCAxYXEwIDE2TTAgMWVrbjAgMWNMMCAxZkMwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFhMDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvUmlnYXxSTVQgTFNUIEVFVCBNU0sgQ0VTVCBDRVQgTVNEIEVFU1R8LTFBLnkgLTJBLnkgLTIwIC0zMCAtMjAgLTEwIC00MCAtMzB8MDEwMTAyMzQ1NDU0NTM2MzYzNjM2MzYzNjM2MzYzNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyfC0yNVR6QS55IDExQTAgMWlNMCBrbzAgZ1dtMCB5RFhBLnkgMmJYMCAzZkUwIFdNMCAxZkEwIDFjTTAgMWNNMCA0bTAgMXNMeTAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY04wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY04wIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCAzb28wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIkV1cm9wZS9Sb21lfENFVCBDRVNUfC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMmFzMTAgTTAwIDFjTTAgMWNNMCAxNG8wIDFvMDAgV00wIDFxTTAgMTdjMCAxY00wIE0zQTAgNU0yMCBXTTAgMWZBMCAxY00wIDE2SzAgMWlPMCAxNm0wIDFkZTAgMWxjMCAxNG0wIDFsYzAgV08wIDFxTTAgR1RXMCBPbjAgMUMxMCBMejAgMUMxMCBMejAgMUVOMCBMejAgMUMxMCBMejAgMXpkMCBPbzAgMUMwMCBPbjAgMUMxMCBMejAgMXpkMCBPbjAgMUMxMCBMQTAgMUMwMCBMQTAgMXpjMCBPbzAgMUMwMCBPbzAgMXpjMCBPbzAgMWZDMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiRXVyb3BlL1NhbWFyYXxMTVQgU0FNVCBTQU1UIEtVWVQgS1VZU1QgTVNEIE1TSyBFRVNUIEtVWVQgU0FNU1QgU0FNU1R8LTNrLmsgLTMwIC00MCAtNDAgLTUwIC00MCAtMzAgLTMwIC0zMCAtNTAgLTQwfDAxMjM0MzQzNDM0MzQzNDM0MzQzNTY1Njc4MjkyOTI5MjkyOTI5MjkyOTI5MjkyOTI5MjkyOTI5MjkyOTI5MmExMnwtMjJXTmsuayBxSGFrLmsgYmNuMCAxUXFvMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTjAgMWNNMCAxZkEwIDFjTTAgMWNOMCA4bzAgMTRqMCAxY0wwIDFjUTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFOMCBXTTAiLAoJCQkiRXVyb3BlL1NpbWZlcm9wb2x8U01UIEVFVCBNU0sgQ0VTVCBDRVQgTVNEIEVFU1QgTVNLfC0yZyAtMjAgLTMwIC0yMCAtMTAgLTQwIC0zMCAtNDB8MDEyMzQzNDMyNTI1MjUyNTI1MjUyNTI1MjUyMTYxNjE2NTI1MjUyNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTcyfC0xUGMyZyBlVW9nIHJFbjAgMnFzMCBXTTAgMWZBMCAxY00wIDNWMCAxdTBMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMVEwMCA0ZUwwIDFjTDAgMWNOMCAxY0wwIDFjTjAgZFgwIFdMMCAxY04wIDFjTDAgMWZCMCAxbzMwIDExQjAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMXowIDFuVzAiLAoJCQkiRXVyb3BlL1NvZmlhfEVFVCBDRVQgQ0VTVCBFRVNUfC0yMCAtMTAgLTIwIC0zMHwwMTIxMjEwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMHwtMTY4TDAgV00wIDFmQTAgMWNNMCAxY00wIDFjTjAgMW1LSDAgMWRkMCAxZmIwIDFhcDAgMWZiMCAxYTIwIDFmeTAgMWEzMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjSzAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxblgwIDExRTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvU3RvY2tob2xtfENFVCBDRVNUfC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJhekMwIFRCMCAyeURlMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiRXVyb3BlL1RhbGxpbm58VE1UIENFVCBDRVNUIEVFVCBNU0sgTVNEIEVFU1R8LTFEIC0xMCAtMjAgLTIwIC0zMCAtNDAgLTMwfDAxMjEwMzQyMTIxMjQ1NDU0NTQ1NDU0NTQ1NDU0NjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2M3wtMjZvTkQgdGVEIDExQTAgMVRhMCA0clhsIEtTTEQgMkZYMCAySmcwIFdNMCAxZkEwIDFjTTAgMThKMCAxc1RYMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTjAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMTAgMTFBMCAxcU0wIDVRTTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvVGlyYW5lfExNVCBDRVQgQ0VTVHwtMWouayAtMTAgLTIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2xCai5rIDE0cGNqLmsgNUxDMCBXTTAgNE0wIDFmQ0swIDEwbjAgMW9wMCAxMXowIDFwZDAgMTF6MCAxcU4wIFdMMCAxcXAwIFhiMCAxcXAwIFhiMCAxcXAwIDExejAgMWxCMCAxMXowIDFxTjAgMTF6MCAxaU4wIDE2bjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvVXpoZ29yb2R8Q0VUIENFU1QgTVNLIE1TRCBFRVQgRUVTVHwtMTAgLTIwIC0zMCAtNDAgLTIwIC0zMHwwMTAxMDEwMjMyMzIzMjMyMzIzMjMyMzIzMjA0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTFjcUwwIDZpMDAgV00wIDFmQTAgMWNNMCAxbWwwIDFDcDAgMXIzVzAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFRMDAgMU5mMCAycHcwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY1EwIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvVmllbm5hfENFVCBDRVNUfC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMmFGZTAgMTFkMCAxaU8wIDExQTAgMW8wMCAxMUEwIDNLTTAgMTRvMCBMQTAwIDZpMDAgV00wIDFmQTAgMWNNMCAxY00wIDFjTTAgNDAwIDJxTTAgMWEwMCAxY00wIDFjTTAgMWlvMCAxN2MwIDFnSGEwIDE5WDAgMWNQMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvVmlsbml1c3xXTVQgS01UIENFVCBFRVQgTVNLIENFU1QgTVNEIEVFU1R8LTFvIC0xei5BIC0xMCAtMjAgLTMwIC0yMCAtNDAgLTMwfDAxMjMyNDUyNTI1NDY0NjQ2NDY0NjQ2NDY0NjQ2NDY0NzM3MzczNzM3MzczNzM1MjUzNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3M3wtMjkzZG8gNklMTS5vIDFPb3ouQSB6ejAgTWZkMCAyOVcwIDNpczAgV00wIDFmQTAgMWNNMCBMVjAgMXRnTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTjAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFCMCAxbzAwIDExQTAgMXFNMCA4aW8wIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIsCgkJCSJFdXJvcGUvVm9sZ29ncmFkfExNVCBUU0FUIFNUQVQgU1RBVCBWT0xUIFZPTFNUIFZPTFNUIFZPTFQgTVNLIE1TS3wtMlYuRSAtMzAgLTMwIC00MCAtNDAgLTUwIC00MCAtMzAgLTQwIC0zMHwwMTIzNDU0NTQ1NDU0NTQ1NDU0NTQ2NzY3NDg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODl8LTIxSXFWLkUgY0xYVi5FIGNFTTAgMWdxbjAgTGNvMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTjAgMWNNMCAxZkEwIDFjTTAgMnB6MCAxY0owIDFjUTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MCIsCgkJCSJFdXJvcGUvV2Fyc2F3fFdNVCBDRVQgQ0VTVCBFRVQgRUVTVHwtMW8gLTEwIC0yMCAtMjAgLTMwfDAxMjEyMTIzNDMxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmN0ZG8gMUxYbyAxMWQwIDFpTzAgMTFBMCAxbzAwIDExQTAgMW9uMCAxMUEwIDZ6eTAgSFdQMCA1SU0wIFdNMCAxZkEwIDFjTTAgMWR6MCAxbUwwIDFlbjAgMTVCMCAxYXEwIDFuQTAgMTFBMCAxaW8wIDE3YzAgMWZBMCAxYTAwIGlEWDAgTEEwIDFjTTAgMWNNMCAxQzAwIE9vMCAxY00wIDFjTTAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMUMwMCBMQTAgdXNvMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY04wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiRXVyb3BlL1phcG9yb3poeWV8Q1VUIEVFVCBNU0sgQ0VTVCBDRVQgTVNEIEVFU1R8LTJrIC0yMCAtMzAgLTIwIC0xMCAtNDAgLTMwfDAxMjM0MzQyNTI1MjUyNTI1MjUyNTI1MjUyNTI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxfC0xUGMyayBlVW9rIHJkYjAgMlJFMCBXTTAgMWZBMCA4bTAgMXY5YTAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjSzAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNRMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAiLAoJCQkiSFNUfEhTVHxhMHwwfCIsCgkJCSJJbmRpYW4vQ2hhZ29zfExNVCBJT1QgSU9UfC00Ti5FIC01MCAtNjB8MDEyfC0yeG9zTi5FIDNBR0xOLkUiLAoJCQkiSW5kaWFuL0NocmlzdG1hc3xDWFR8LTcwfDB8IiwKCQkJIkluZGlhbi9Db2Nvc3xDQ1R8LTZ1fDB8IiwKCQkJIkluZGlhbi9LZXJndWVsZW58enp6IFRGVHwwIC01MHwwMXwtTUcwMCIsCgkJCSJJbmRpYW4vTWFoZXxMTVQgU0NUfC0zRi5NIC00MHwwMXwtMnlPM0YuTSIsCgkJCSJJbmRpYW4vTWFsZGl2ZXN8TU1UIE1WVHwtNFMgLTUwfDAxfC1vbGdTIiwKCQkJIkluZGlhbi9NYXVyaXRpdXN8TE1UIE1VVCBNVVNUfC0zTyAtNDAgLTUwfDAxMjEyMXwtMnhvck8gMzR1bk8gMTRMMCAxMmtyMCAxMXowIiwKCQkJIkluZGlhbi9SZXVuaW9ufExNVCBSRVR8LTNGLlEgLTQwfDAxfC0ybURERi5RIiwKCQkJIkt3YWphbGVpbnxNSFQgS1dBVCBNSFR8LWIwIGMwIC1jMHwwMTJ8LUFYMCBXOVgwIiwKCQkJIk1FVHxNRVQgTUVTVHwtMTAgLTIwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yYUZlMCAxMWQwIDFpTzAgMTFBMCAxbzAwIDExQTAgUXJjMCA2aTAwIFdNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDE2TTAgMWdNTTAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIiwKCQkJIk1TVHxNU1R8NzB8MHwiLAoJCQkiTVNUN01EVHxNU1QgTURUIE1XVCBNUFR8NzAgNjAgNjAgNjB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNjFyMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MjAgaXgwIFF3TjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiTlotQ0hBVHxDSEFTVCBDSEFTVCBDSEFEVHwtY2YgLWNKIC1kSnwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LVdxQWYgMWFkZWYgSU0wIDFDMDAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDFxTTAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFpbzAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAiLAoJCQkiUFNUOFBEVHxQU1QgUERUIFBXVCBQUFR8ODAgNzAgNzAgNzB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNjFxMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MTAgaXkwIFF3TjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAiLAoJCQkiUGFjaWZpYy9BcGlhfExNVCBXU1NUIFNTVCBTRFQgV1NEVCBXU1NUfGJxLlUgYnUgYjAgYTAgLWUwIC1kMHwwMTIzMjM0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NHwtMm5ETXguNCAxeVcwMy40IDJyUmJ1IDFmZjAgMWEwMCBDSTAgQVEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIiwKCQkJIlBhY2lmaWMvQm91Z2FpbnZpbGxlfFBHVCBKU1QgQlNUfC1hMCAtOTAgLWIwfDAxMDJ8LTE2V3kwIDdDTjAgMk1RcDAiLAoJCQkiUGFjaWZpYy9DaHV1a3xDSFVUfC1hMHwwfCIsCgkJCSJQYWNpZmljL0VmYXRlfExNVCBWVVQgVlVTVHwtYmQuZyAtYjAgLWMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJsOW5kLmcgMlN6Y2QuZyAxY0wwIDFvTjAgMTBMMCAxZkIwIDE5WDAgMWZCMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxZkIwIEx6MCAxTmQwIEFuMCIsCgkJCSJQYWNpZmljL0VuZGVyYnVyeXxQSE9UIFBIT1QgUEhPVHxjMCBiMCAtZDB8MDEyfG5JYzAgQjhuMCIsCgkJCSJQYWNpZmljL0Zha2FvZm98VEtUIFRLVHxiMCAtZDB8MDF8MUdmbjAiLAoJCQkiUGFjaWZpYy9GaWppfExNVCBGSlQgRkpTVHwtYlQuSSAtYzAgLWQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMmJVelQuSSAzbThOVC5JIExBMCAxRU0wIElNMCBuSmMwIExBMCAxbzAwIFJjMCAxd28wIEFvMCAxTmMwIEFvMCAxUTAwIHh6MCAxU04wIHVNMCAxU00wIHhBMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHhBMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHhBMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxVkEwIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxU00wIiwKCQkJIlBhY2lmaWMvRnVuYWZ1dGl8VFZUfC1jMHwwfCIsCgkJCSJQYWNpZmljL0dhbGFwYWdvc3xMTVQgRUNUIEdBTFR8NVcubyA1MCA2MHwwMTJ8LTF5VlMxLkEgMmRUejEuQSIsCgkJCSJQYWNpZmljL0dhbWJpZXJ8TE1UIEdBTVR8OFguTSA5MHwwMXwtMmpvZjAuYyIsCgkJCSJQYWNpZmljL0d1YWRhbGNhbmFsfExNVCBTQlR8LWFELk0gLWIwfDAxfC0yam95RC5NIiwKCQkJIlBhY2lmaWMvR3VhbXxHU1QgQ2hTVHwtYTAgLWEwfDAxfDFmcHEwIiwKCQkJIlBhY2lmaWMvSG9ub2x1bHV8SFNUIEhEVCBIU1R8YXUgOXUgYTB8MDEwMTAyfC0xdGhMdSA4eDAgbGVmMCA4UHowIDQ2cDAiLAoJCQkiUGFjaWZpYy9LaXJpdGltYXRpfExJTlQgTElOVCBMSU5UfGFFIGEwIC1lMHwwMTJ8bklhRSBCOG5rIiwKCQkJIlBhY2lmaWMvS29zcmFlfEtPU1QgS09TVHwtYjAgLWMwfDAxMHwtQVgwIDFiZHowIiwKCQkJIlBhY2lmaWMvTWFqdXJvfE1IVCBNSFR8LWIwIC1jMHwwMXwtQVgwIiwKCQkJIlBhY2lmaWMvTWFycXVlc2FzfExNVCBNQVJUfDlpIDl1fDAxfC0yam9lRyIsCgkJCSJQYWNpZmljL01pZHdheXxOU1QgTkRUIEJTVCBTU1R8YjAgYTAgYjAgYjB8MDEwMjN8LXgzTjAgQW4wIHBKZDAgRXlNMCIsCgkJCSJQYWNpZmljL05hdXJ1fExNVCBOUlQgSlNUIE5SVHwtYjcuRSAtYnUgLTkwIC1jMHwwMTIxM3wtMVhkbjcuRSBQdnpCLkUgNVJDdSAxb3VKdSIsCgkJCSJQYWNpZmljL05pdWV8TlVUIE5VVCBOVVR8YmsgYnUgYjB8MDEyfC1LZk1FIDE3eTBhIiwKCQkJIlBhY2lmaWMvTm9yZm9sa3xOTVQgTkZUfC1iYyAtYnV8MDF8LUtnYmMiLAoJCQkiUGFjaWZpYy9Ob3VtZWF8TE1UIE5DVCBOQ1NUfC1iNS5NIC1iMCAtYzB8MDEyMTIxMjF8LTJsOW41Lk0gMkVxTTUuTSB4WDAgMVBCMCB5bjAgSGVQMCBBbzAiLAoJCQkiUGFjaWZpYy9QYWdvX1BhZ298TE1UIE5TVCBCU1QgU1NUfGJtLk0gYjAgYjAgYjB8MDEyM3wtMm5ETUIuYyAyZ1Z6Qi5jIEV5TTAiLAoJCQkiUGFjaWZpYy9QYWxhdXxQV1R8LTkwfDB8IiwKCQkJIlBhY2lmaWMvUGl0Y2Fpcm58UE5UIFBTVHw4dSA4MHwwMXwxOFZrdSIsCgkJCSJQYWNpZmljL1BvaG5wZWl8UE9OVHwtYjB8MHwiLAoJCQkiUGFjaWZpYy9Qb3J0X01vcmVzYnl8UEdUfC1hMHwwfCIsCgkJCSJQYWNpZmljL1Jhcm90b25nYXxDS1QgQ0tIU1QgQ0tUfGF1IDl1IGEwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnxseVd1IElMMCAxemN1IE9udSAxemN1IE9udSAxemN1IFJidSAxemN1IE9udSAxemN1IE9udSAxemN1IE9udSAxemN1IE9udSAxemN1IE9udSAxemN1IFJidSAxemN1IE9udSAxemN1IE9udSAxemN1IE9udSIsCgkJCSJQYWNpZmljL1NhaXBhbnxNUFQgTVBUIENoU1R8LTkwIC1hMCAtYTB8MDEyfC1BVjAgMWcybjAiLAoJCQkiUGFjaWZpYy9UYWhpdGl8TE1UIFRBSFR8OVcuZyBhMHwwMXwtMmpvZTEuSSIsCgkJCSJQYWNpZmljL1RhcmF3YXxHSUxUfC1jMHwwfCIsCgkJCSJQYWNpZmljL1RvbmdhdGFwdXxUT1QgVE9UIFRPU1R8LWNrIC1kMCAtZTB8MDEyMTIxMjF8LTFhQjBrIDJuNWRrIDE1QTAgMXdvMCB4ejAgMVExMCB4ejAiLAoJCQkiUGFjaWZpYy9XYWtlfFdBS1R8LWMwfDB8IiwKCQkJIlBhY2lmaWMvV2FsbGlzfFdGVHwtYzB8MHwiLAoJCQkiV0VUfFdFVCBXRVNUfDAgLTEwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHxoREIwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFhMDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCIKCQldLAoJCSJsaW5rcyI6IFsKCQkJIkFmcmljYS9BYmlkamFufEFmcmljYS9CYW1ha28iLAoJCQkiQWZyaWNhL0FiaWRqYW58QWZyaWNhL0Jhbmp1bCIsCgkJCSJBZnJpY2EvQWJpZGphbnxBZnJpY2EvQ29uYWtyeSIsCgkJCSJBZnJpY2EvQWJpZGphbnxBZnJpY2EvRGFrYXIiLAoJCQkiQWZyaWNhL0FiaWRqYW58QWZyaWNhL0ZyZWV0b3duIiwKCQkJIkFmcmljYS9BYmlkamFufEFmcmljYS9Mb21lIiwKCQkJIkFmcmljYS9BYmlkamFufEFmcmljYS9Ob3Vha2Nob3R0IiwKCQkJIkFmcmljYS9BYmlkamFufEFmcmljYS9PdWFnYWRvdWdvdSIsCgkJCSJBZnJpY2EvQWJpZGphbnxBZnJpY2EvU2FvX1RvbWUiLAoJCQkiQWZyaWNhL0FiaWRqYW58QWZyaWNhL1RpbWJ1a3R1IiwKCQkJIkFmcmljYS9BYmlkamFufEF0bGFudGljL1N0X0hlbGVuYSIsCgkJCSJBZnJpY2EvQWRkaXNfQWJhYmF8QWZyaWNhL0FzbWFyYSIsCgkJCSJBZnJpY2EvQWRkaXNfQWJhYmF8QWZyaWNhL0FzbWVyYSIsCgkJCSJBZnJpY2EvQWRkaXNfQWJhYmF8QWZyaWNhL0Rhcl9lc19TYWxhYW0iLAoJCQkiQWZyaWNhL0FkZGlzX0FiYWJhfEFmcmljYS9Eamlib3V0aSIsCgkJCSJBZnJpY2EvQWRkaXNfQWJhYmF8QWZyaWNhL0thbXBhbGEiLAoJCQkiQWZyaWNhL0FkZGlzX0FiYWJhfEFmcmljYS9Nb2dhZGlzaHUiLAoJCQkiQWZyaWNhL0FkZGlzX0FiYWJhfEFmcmljYS9OYWlyb2JpIiwKCQkJIkFmcmljYS9BZGRpc19BYmFiYXxJbmRpYW4vQW50YW5hbmFyaXZvIiwKCQkJIkFmcmljYS9BZGRpc19BYmFiYXxJbmRpYW4vQ29tb3JvIiwKCQkJIkFmcmljYS9BZGRpc19BYmFiYXxJbmRpYW4vTWF5b3R0ZSIsCgkJCSJBZnJpY2EvQmFuZ3VpfEFmcmljYS9CcmF6emF2aWxsZSIsCgkJCSJBZnJpY2EvQmFuZ3VpfEFmcmljYS9Eb3VhbGEiLAoJCQkiQWZyaWNhL0Jhbmd1aXxBZnJpY2EvS2luc2hhc2EiLAoJCQkiQWZyaWNhL0Jhbmd1aXxBZnJpY2EvTGFnb3MiLAoJCQkiQWZyaWNhL0Jhbmd1aXxBZnJpY2EvTGlicmV2aWxsZSIsCgkJCSJBZnJpY2EvQmFuZ3VpfEFmcmljYS9MdWFuZGEiLAoJCQkiQWZyaWNhL0Jhbmd1aXxBZnJpY2EvTWFsYWJvIiwKCQkJIkFmcmljYS9CYW5ndWl8QWZyaWNhL05pYW1leSIsCgkJCSJBZnJpY2EvQmFuZ3VpfEFmcmljYS9Qb3J0by1Ob3ZvIiwKCQkJIkFmcmljYS9CbGFudHlyZXxBZnJpY2EvQnVqdW1idXJhIiwKCQkJIkFmcmljYS9CbGFudHlyZXxBZnJpY2EvR2Fib3JvbmUiLAoJCQkiQWZyaWNhL0JsYW50eXJlfEFmcmljYS9IYXJhcmUiLAoJCQkiQWZyaWNhL0JsYW50eXJlfEFmcmljYS9LaWdhbGkiLAoJCQkiQWZyaWNhL0JsYW50eXJlfEFmcmljYS9MdWJ1bWJhc2hpIiwKCQkJIkFmcmljYS9CbGFudHlyZXxBZnJpY2EvTHVzYWthIiwKCQkJIkFmcmljYS9CbGFudHlyZXxBZnJpY2EvTWFwdXRvIiwKCQkJIkFmcmljYS9DYWlyb3xFZ3lwdCIsCgkJCSJBZnJpY2EvSm9oYW5uZXNidXJnfEFmcmljYS9NYXNlcnUiLAoJCQkiQWZyaWNhL0pvaGFubmVzYnVyZ3xBZnJpY2EvTWJhYmFuZSIsCgkJCSJBZnJpY2EvSnViYXxBZnJpY2EvS2hhcnRvdW0iLAoJCQkiQWZyaWNhL1RyaXBvbGl8TGlieWEiLAoJCQkiQW1lcmljYS9BZGFrfEFtZXJpY2EvQXRrYSIsCgkJCSJBbWVyaWNhL0FkYWt8VVMvQWxldXRpYW4iLAoJCQkiQW1lcmljYS9BbmNob3JhZ2V8VVMvQWxhc2thIiwKCQkJIkFtZXJpY2EvQW5ndWlsbGF8QW1lcmljYS9Eb21pbmljYSIsCgkJCSJBbWVyaWNhL0FuZ3VpbGxhfEFtZXJpY2EvR3JlbmFkYSIsCgkJCSJBbWVyaWNhL0FuZ3VpbGxhfEFtZXJpY2EvR3VhZGVsb3VwZSIsCgkJCSJBbWVyaWNhL0FuZ3VpbGxhfEFtZXJpY2EvTWFyaWdvdCIsCgkJCSJBbWVyaWNhL0FuZ3VpbGxhfEFtZXJpY2EvTW9udHNlcnJhdCIsCgkJCSJBbWVyaWNhL0FuZ3VpbGxhfEFtZXJpY2EvUG9ydF9vZl9TcGFpbiIsCgkJCSJBbWVyaWNhL0FuZ3VpbGxhfEFtZXJpY2EvU3RfQmFydGhlbGVteSIsCgkJCSJBbWVyaWNhL0FuZ3VpbGxhfEFtZXJpY2EvU3RfS2l0dHMiLAoJCQkiQW1lcmljYS9Bbmd1aWxsYXxBbWVyaWNhL1N0X0x1Y2lhIiwKCQkJIkFtZXJpY2EvQW5ndWlsbGF8QW1lcmljYS9TdF9UaG9tYXMiLAoJCQkiQW1lcmljYS9Bbmd1aWxsYXxBbWVyaWNhL1N0X1ZpbmNlbnQiLAoJCQkiQW1lcmljYS9Bbmd1aWxsYXxBbWVyaWNhL1RvcnRvbGEiLAoJCQkiQW1lcmljYS9Bbmd1aWxsYXxBbWVyaWNhL1ZpcmdpbiIsCgkJCSJBbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXN8QW1lcmljYS9CdWVub3NfQWlyZXMiLAoJCQkiQW1lcmljYS9BcmdlbnRpbmEvQ2F0YW1hcmNhfEFtZXJpY2EvQXJnZW50aW5hL0NvbW9kUml2YWRhdmlhIiwKCQkJIkFtZXJpY2EvQXJnZW50aW5hL0NhdGFtYXJjYXxBbWVyaWNhL0NhdGFtYXJjYSIsCgkJCSJBbWVyaWNhL0FyZ2VudGluYS9Db3Jkb2JhfEFtZXJpY2EvQ29yZG9iYSIsCgkJCSJBbWVyaWNhL0FyZ2VudGluYS9Db3Jkb2JhfEFtZXJpY2EvUm9zYXJpbyIsCgkJCSJBbWVyaWNhL0FyZ2VudGluYS9KdWp1eXxBbWVyaWNhL0p1anV5IiwKCQkJIkFtZXJpY2EvQXJnZW50aW5hL01lbmRvemF8QW1lcmljYS9NZW5kb3phIiwKCQkJIkFtZXJpY2EvQXJ1YmF8QW1lcmljYS9DdXJhY2FvIiwKCQkJIkFtZXJpY2EvQXJ1YmF8QW1lcmljYS9LcmFsZW5kaWprIiwKCQkJIkFtZXJpY2EvQXJ1YmF8QW1lcmljYS9Mb3dlcl9QcmluY2VzIiwKCQkJIkFtZXJpY2EvQXRpa29rYW58QW1lcmljYS9Db3JhbF9IYXJib3VyIiwKCQkJIkFtZXJpY2EvQ2hpY2Fnb3xVUy9DZW50cmFsIiwKCQkJIkFtZXJpY2EvRGVudmVyfEFtZXJpY2EvU2hpcHJvY2siLAoJCQkiQW1lcmljYS9EZW52ZXJ8TmF2YWpvIiwKCQkJIkFtZXJpY2EvRGVudmVyfFVTL01vdW50YWluIiwKCQkJIkFtZXJpY2EvRGV0cm9pdHxVUy9NaWNoaWdhbiIsCgkJCSJBbWVyaWNhL0VkbW9udG9ufENhbmFkYS9Nb3VudGFpbiIsCgkJCSJBbWVyaWNhL0Vuc2VuYWRhfEFtZXJpY2EvVGlqdWFuYSIsCgkJCSJBbWVyaWNhL0Vuc2VuYWRhfE1leGljby9CYWphTm9ydGUiLAoJCQkiQW1lcmljYS9Gb3J0X1dheW5lfEFtZXJpY2EvSW5kaWFuYS9JbmRpYW5hcG9saXMiLAoJCQkiQW1lcmljYS9Gb3J0X1dheW5lfEFtZXJpY2EvSW5kaWFuYXBvbGlzIiwKCQkJIkFtZXJpY2EvRm9ydF9XYXluZXxVUy9FYXN0LUluZGlhbmEiLAoJCQkiQW1lcmljYS9IYWxpZmF4fENhbmFkYS9BdGxhbnRpYyIsCgkJCSJBbWVyaWNhL0hhdmFuYXxDdWJhIiwKCQkJIkFtZXJpY2EvSW5kaWFuYS9Lbm94fEFtZXJpY2EvS25veF9JTiIsCgkJCSJBbWVyaWNhL0luZGlhbmEvS25veHxVUy9JbmRpYW5hLVN0YXJrZSIsCgkJCSJBbWVyaWNhL0phbWFpY2F8SmFtYWljYSIsCgkJCSJBbWVyaWNhL0tlbnR1Y2t5L0xvdWlzdmlsbGV8QW1lcmljYS9Mb3Vpc3ZpbGxlIiwKCQkJIkFtZXJpY2EvTG9zX0FuZ2VsZXN8VVMvUGFjaWZpYyIsCgkJCSJBbWVyaWNhL0xvc19BbmdlbGVzfFVTL1BhY2lmaWMtTmV3IiwKCQkJIkFtZXJpY2EvTWFuYXVzfEJyYXppbC9XZXN0IiwKCQkJIkFtZXJpY2EvTWF6YXRsYW58TWV4aWNvL0JhamFTdXIiLAoJCQkiQW1lcmljYS9NZXhpY29fQ2l0eXxNZXhpY28vR2VuZXJhbCIsCgkJCSJBbWVyaWNhL05ld19Zb3JrfFVTL0Vhc3Rlcm4iLAoJCQkiQW1lcmljYS9Ob3JvbmhhfEJyYXppbC9EZU5vcm9uaGEiLAoJCQkiQW1lcmljYS9QaG9lbml4fFVTL0FyaXpvbmEiLAoJCQkiQW1lcmljYS9Qb3J0b19BY3JlfEFtZXJpY2EvUmlvX0JyYW5jbyIsCgkJCSJBbWVyaWNhL1BvcnRvX0FjcmV8QnJhemlsL0FjcmUiLAoJCQkiQW1lcmljYS9SZWdpbmF8Q2FuYWRhL0Vhc3QtU2Fza2F0Y2hld2FuIiwKCQkJIkFtZXJpY2EvUmVnaW5hfENhbmFkYS9TYXNrYXRjaGV3YW4iLAoJCQkiQW1lcmljYS9TYW50aWFnb3xDaGlsZS9Db250aW5lbnRhbCIsCgkJCSJBbWVyaWNhL1Nhb19QYXVsb3xCcmF6aWwvRWFzdCIsCgkJCSJBbWVyaWNhL1N0X0pvaG5zfENhbmFkYS9OZXdmb3VuZGxhbmQiLAoJCQkiQW1lcmljYS9Ub3JvbnRvfENhbmFkYS9FYXN0ZXJuIiwKCQkJIkFtZXJpY2EvVmFuY291dmVyfENhbmFkYS9QYWNpZmljIiwKCQkJIkFtZXJpY2EvV2hpdGVob3JzZXxDYW5hZGEvWXVrb24iLAoJCQkiQW1lcmljYS9XaW5uaXBlZ3xDYW5hZGEvQ2VudHJhbCIsCgkJCSJBbnRhcmN0aWNhL01jTXVyZG98QW50YXJjdGljYS9Tb3V0aF9Qb2xlIiwKCQkJIkFudGFyY3RpY2EvTWNNdXJkb3xOWiIsCgkJCSJBbnRhcmN0aWNhL01jTXVyZG98UGFjaWZpYy9BdWNrbGFuZCIsCgkJCSJBcmN0aWMvTG9uZ3llYXJieWVufEF0bGFudGljL0phbl9NYXllbiIsCgkJCSJBcmN0aWMvTG9uZ3llYXJieWVufEV1cm9wZS9Pc2xvIiwKCQkJIkFzaWEvQXNoZ2FiYXR8QXNpYS9Bc2hraGFiYWQiLAoJCQkiQXNpYS9CYW5na29rfEFzaWEvUGhub21fUGVuaCIsCgkJCSJBc2lhL0Jhbmdrb2t8QXNpYS9WaWVudGlhbmUiLAoJCQkiQXNpYS9DYWxjdXR0YXxBc2lhL0tvbGthdGEiLAoJCQkiQXNpYS9DaG9uZ3Fpbmd8QXNpYS9DaHVuZ2tpbmciLAoJCQkiQXNpYS9DaG9uZ3Fpbmd8QXNpYS9IYXJiaW4iLAoJCQkiQXNpYS9DaG9uZ3Fpbmd8QXNpYS9TaGFuZ2hhaSIsCgkJCSJBc2lhL0Nob25ncWluZ3xQUkMiLAoJCQkiQXNpYS9EYWNjYXxBc2lhL0RoYWthIiwKCQkJIkFzaWEvSG9fQ2hpX01pbmh8QXNpYS9TYWlnb24iLAoJCQkiQXNpYS9Ib25nX0tvbmd8SG9uZ2tvbmciLAoJCQkiQXNpYS9Jc3RhbmJ1bHxFdXJvcGUvSXN0YW5idWwiLAoJCQkiQXNpYS9Jc3RhbmJ1bHxUdXJrZXkiLAoJCQkiQXNpYS9KZXJ1c2FsZW18QXNpYS9UZWxfQXZpdiIsCgkJCSJBc2lhL0plcnVzYWxlbXxJc3JhZWwiLAoJCQkiQXNpYS9LYXNoZ2FyfEFzaWEvVXJ1bXFpIiwKCQkJIkFzaWEvS2F0aG1hbmR1fEFzaWEvS2F0bWFuZHUiLAoJCQkiQXNpYS9NYWNhb3xBc2lhL01hY2F1IiwKCQkJIkFzaWEvTWFrYXNzYXJ8QXNpYS9VanVuZ19QYW5kYW5nIiwKCQkJIkFzaWEvTmljb3NpYXxFdXJvcGUvTmljb3NpYSIsCgkJCSJBc2lhL1Nlb3VsfFJPSyIsCgkJCSJBc2lhL1NpbmdhcG9yZXxTaW5nYXBvcmUiLAoJCQkiQXNpYS9UYWlwZWl8Uk9DIiwKCQkJIkFzaWEvVGVocmFufElyYW4iLAoJCQkiQXNpYS9UaGltYnV8QXNpYS9UaGltcGh1IiwKCQkJIkFzaWEvVG9reW98SmFwYW4iLAoJCQkiQXNpYS9VbGFhbmJhYXRhcnxBc2lhL1VsYW5fQmF0b3IiLAoJCQkiQXRsYW50aWMvRmFlcm9lfEF0bGFudGljL0Zhcm9lIiwKCQkJIkF0bGFudGljL1JleWtqYXZpa3xJY2VsYW5kIiwKCQkJIkF1c3RyYWxpYS9BQ1R8QXVzdHJhbGlhL0NhbmJlcnJhIiwKCQkJIkF1c3RyYWxpYS9BQ1R8QXVzdHJhbGlhL05TVyIsCgkJCSJBdXN0cmFsaWEvQUNUfEF1c3RyYWxpYS9TeWRuZXkiLAoJCQkiQXVzdHJhbGlhL0FkZWxhaWRlfEF1c3RyYWxpYS9Tb3V0aCIsCgkJCSJBdXN0cmFsaWEvQnJpc2JhbmV8QXVzdHJhbGlhL1F1ZWVuc2xhbmQiLAoJCQkiQXVzdHJhbGlhL0Jyb2tlbl9IaWxsfEF1c3RyYWxpYS9ZYW5jb3dpbm5hIiwKCQkJIkF1c3RyYWxpYS9EYXJ3aW58QXVzdHJhbGlhL05vcnRoIiwKCQkJIkF1c3RyYWxpYS9Ib2JhcnR8QXVzdHJhbGlhL1Rhc21hbmlhIiwKCQkJIkF1c3RyYWxpYS9MSEl8QXVzdHJhbGlhL0xvcmRfSG93ZSIsCgkJCSJBdXN0cmFsaWEvTWVsYm91cm5lfEF1c3RyYWxpYS9WaWN0b3JpYSIsCgkJCSJBdXN0cmFsaWEvUGVydGh8QXVzdHJhbGlhL1dlc3QiLAoJCQkiQ2hpbGUvRWFzdGVySXNsYW5kfFBhY2lmaWMvRWFzdGVyIiwKCQkJIkVpcmV8RXVyb3BlL0R1YmxpbiIsCgkJCSJFdGMvR01UKzB8RXRjL0dNVCIsCgkJCSJFdGMvR01UKzB8RXRjL0dNVC0wIiwKCQkJIkV0Yy9HTVQrMHxFdGMvR01UMCIsCgkJCSJFdGMvR01UKzB8RXRjL0dyZWVud2ljaCIsCgkJCSJFdGMvR01UKzB8R01UIiwKCQkJIkV0Yy9HTVQrMHxHTVQrMCIsCgkJCSJFdGMvR01UKzB8R01ULTAiLAoJCQkiRXRjL0dNVCswfEdNVDAiLAoJCQkiRXRjL0dNVCswfEdyZWVud2ljaCIsCgkJCSJFdGMvVUNUfFVDVCIsCgkJCSJFdGMvVVRDfEV0Yy9Vbml2ZXJzYWwiLAoJCQkiRXRjL1VUQ3xFdGMvWnVsdSIsCgkJCSJFdGMvVVRDfFVUQyIsCgkJCSJFdGMvVVRDfFVuaXZlcnNhbCIsCgkJCSJFdGMvVVRDfFp1bHUiLAoJCQkiRXVyb3BlL0JlbGZhc3R8RXVyb3BlL0d1ZXJuc2V5IiwKCQkJIkV1cm9wZS9CZWxmYXN0fEV1cm9wZS9Jc2xlX29mX01hbiIsCgkJCSJFdXJvcGUvQmVsZmFzdHxFdXJvcGUvSmVyc2V5IiwKCQkJIkV1cm9wZS9CZWxmYXN0fEV1cm9wZS9Mb25kb24iLAoJCQkiRXVyb3BlL0JlbGZhc3R8R0IiLAoJCQkiRXVyb3BlL0JlbGZhc3R8R0ItRWlyZSIsCgkJCSJFdXJvcGUvQmVsZ3JhZGV8RXVyb3BlL0xqdWJsamFuYSIsCgkJCSJFdXJvcGUvQmVsZ3JhZGV8RXVyb3BlL1BvZGdvcmljYSIsCgkJCSJFdXJvcGUvQmVsZ3JhZGV8RXVyb3BlL1NhcmFqZXZvIiwKCQkJIkV1cm9wZS9CZWxncmFkZXxFdXJvcGUvU2tvcGplIiwKCQkJIkV1cm9wZS9CZWxncmFkZXxFdXJvcGUvWmFncmViIiwKCQkJIkV1cm9wZS9CcmF0aXNsYXZhfEV1cm9wZS9QcmFndWUiLAoJCQkiRXVyb3BlL0J1c2luZ2VufEV1cm9wZS9WYWR1eiIsCgkJCSJFdXJvcGUvQnVzaW5nZW58RXVyb3BlL1p1cmljaCIsCgkJCSJFdXJvcGUvQ2hpc2luYXV8RXVyb3BlL1RpcmFzcG9sIiwKCQkJIkV1cm9wZS9IZWxzaW5raXxFdXJvcGUvTWFyaWVoYW1uIiwKCQkJIkV1cm9wZS9MaXNib258UG9ydHVnYWwiLAoJCQkiRXVyb3BlL01vc2Nvd3xXLVNVIiwKCQkJIkV1cm9wZS9Sb21lfEV1cm9wZS9TYW5fTWFyaW5vIiwKCQkJIkV1cm9wZS9Sb21lfEV1cm9wZS9WYXRpY2FuIiwKCQkJIkV1cm9wZS9XYXJzYXd8UG9sYW5kIiwKCQkJIkt3YWphbGVpbnxQYWNpZmljL0t3YWphbGVpbiIsCgkJCSJOWi1DSEFUfFBhY2lmaWMvQ2hhdGhhbSIsCgkJCSJQYWNpZmljL0NodXVrfFBhY2lmaWMvVHJ1ayIsCgkJCSJQYWNpZmljL0NodXVrfFBhY2lmaWMvWWFwIiwKCQkJIlBhY2lmaWMvSG9ub2x1bHV8UGFjaWZpYy9Kb2huc3RvbiIsCgkJCSJQYWNpZmljL0hvbm9sdWx1fFVTL0hhd2FpaSIsCgkJCSJQYWNpZmljL1BhZ29fUGFnb3xQYWNpZmljL1NhbW9hIiwKCQkJIlBhY2lmaWMvUGFnb19QYWdvfFVTL1NhbW9hIiwKCQkJIlBhY2lmaWMvUG9obnBlaXxQYWNpZmljL1BvbmFwZSIKCQldCgl9KTsKCgoJcmV0dXJuIG1vbWVudDsKfSkpOwo="></script> <script src="data:application/javascript;base64,KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbi5mbi5mcXVhcnRlcj1mdW5jdGlvbihuKXt2YXIgdT10aGlzLmxhbmcoKS5fcXVhcnRlcnx8IlEiLHQ9e30scixpPW51bGw7cmV0dXJuIG49bnx8NCxuPjE/KHI9dGhpcy5zdWJ0cmFjdCgibW9udGhzIixuLTEpLGk9ci5jbG9uZSgpLmFkZCgieWVhcnMiLDEpKTpyPXRoaXMsdC5xdWFydGVyPU1hdGguY2VpbCgoci5tb250aCgpKzEpLzMpLHQueWVhcj1yLnllYXIoKSx0Lm5leHRZZWFyPWk/aS55ZWFyKCk6aSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIG49dSt0LnF1YXJ0ZXIrIiAiK3QueWVhcjtyZXR1cm4gaT9uKyIvIitpLmZvcm1hdCgiWVkiKTpufSx0fSxufXR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKCJtb21lbnQtZnF1YXJ0ZXIiLFsibW9tZW50Il0sbik6dHlwZW9mIG1vZHVsZSE9InVuZGVmaW5lZCI/bW9kdWxlLmV4cG9ydHM9bihyZXF1aXJlKCJtb21lbnQiKSk6dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5tb21lbnQmJm4od2luZG93Lm1vbWVudCl9KS5hcHBseSh0aGlzKTs="></script> <script src="data:application/javascript;base64,Ci8vIHBvbHlmaWxsIGluZGV4T2YgZm9yIElFOAppZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7CiAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbihlbHQgLyosIGZyb20qLykgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoID4+PiAwOwoKICAgIHZhciBmcm9tID0gTnVtYmVyKGFyZ3VtZW50c1sxXSkgfHwgMDsKICAgIGZyb20gPSAoZnJvbSA8IDApCiAgICAgICAgID8gTWF0aC5jZWlsKGZyb20pCiAgICAgICAgIDogTWF0aC5mbG9vcihmcm9tKTsKICAgIGlmIChmcm9tIDwgMCkKICAgICAgZnJvbSArPSBsZW47CgogICAgZm9yICg7IGZyb20gPCBsZW47IGZyb20rKykgewogICAgICBpZiAoZnJvbSBpbiB0aGlzICYmCiAgICAgICAgICB0aGlzW2Zyb21dID09PSBlbHQpCiAgICAgICAgcmV0dXJuIGZyb207CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfTsKfQoKSFRNTFdpZGdldHMud2lkZ2V0KHsKCiAgbmFtZTogImR5Z3JhcGhzIiwKCiAgdHlwZTogIm91dHB1dCIsCgogIGZhY3Rvcnk6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAKICAgIC8vIHJlZmVyZW5jZSB0byBkeWdyYXBoCiAgICB2YXIgZHlncmFwaCA9IG51bGw7CiAgICAKICAgIC8vIHJlZmVyZW5jZSB0byB3aWRnZXQgZ2xvYmFsIGdyb3VwcwogICAgdmFyIGdyb3VwcyA9IHRoaXMuZ3JvdXBzOwogCiAgICAvLyBhZGQgcXQgc3R5bGUgaWYgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgUXQKICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCIgUXQvIikgPiAwKQogICAgICBlbC5jbGFzc05hbWUgKz0gIiBxdCI7CiAgICAKICAgIHJldHVybiB7CiAgICAgIAogICAgICByZW5kZXJWYWx1ZTogZnVuY3Rpb24oeCkgewogICAgICAgIAogICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGlzIGZvciBjbG9zdXJlcwogICAgICAgIHZhciB0aGl6ID0gdGhpczsKICAgICAgICAKICAgICAgICAvLyBnZXQgZHlncmFwaCBhdHRycyBhbmQgcG9wdWxhdGUgZmlsZSBmaWVsZAogICAgICAgIHZhciBhdHRycyA9IHguYXR0cnM7CiAgICAgICAgYXR0cnMuZmlsZSA9IHguZGF0YTsKCSAgICAgIAoJLy8gZGlzYWJsZSB6b29tIGludGVyYWN0aW9uIGV4Y2VwdCBmb3IgY2xpY2tzCiAgICAgICAgaWYgKGF0dHJzLmRpc2FibGVab29tKSB7CiAgICAgICAgICBhdHRycy5pbnRlcmFjdGlvbk1vZGVsID0gRHlncmFwaC5JbnRlcmFjdGlvbi5ub25JbnRlcmFjdGl2ZU1vZGVsXzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gY29udmVydCBub24tYXJyYXlzIHRvIGFycmF5cwogICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBhdHRycy5maWxlLmxlbmd0aDsgaW5kZXgrKykgewogICAgICAgICAgaWYgKCEkLmlzQXJyYXkoYXR0cnMuZmlsZVtpbmRleF0pKQogICAgICAgICAgICBhdHRycy5maWxlW2luZGV4XSA9IFtdLmNvbmNhdChhdHRycy5maWxlW2luZGV4XSk7CiAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAvLyByZXNvbHZlICJhdXRvIiBsZWdlbmQgYmVoYXZpb3IKICAgICAgICBpZiAoeC5hdHRycy5sZWdlbmQgPT0gImF1dG8iKSB7CiAgICAgICAgICBpZiAoeC5kYXRhLmxlbmd0aCA8PSAyKQogICAgICAgICAgICB4LmF0dHJzLmxlZ2VuZCA9ICJvbm1vdXNlb3ZlciI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHguYXR0cnMubGVnZW5kID0gImFsd2F5cyI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICh4LmZvcm1hdCA9PSAiZGF0ZSIpIHsKICAgICAgICAgIAogICAgICAgICAgLy8gc2V0IGFwcHJvcHJpYXRlZCBmdW5jdGlvbiBpbiBjYXNlIG9mIGZpeGVkIHR6CiAgICAgICAgICBpZiAoKGF0dHJzLmF4ZXMueC5heGlzTGFiZWxGb3JtYXR0ZXIgPT09IHVuZGVmaW5lZCkgJiYgeC5maXhlZHR6KQogICAgICAgICAgICBhdHRycy5heGVzLnguYXhpc0xhYmVsRm9ybWF0dGVyID0gdGhpcy54QXhpc0xhYmVsRm9ybWF0dGVyRml4ZWRUWih4LnR6b25lKTsKICAgICAgICAgICAgCiAgICAgICAgICBpZiAoKGF0dHJzLmF4ZXMueC52YWx1ZUZvcm1hdHRlciA9PT0gdW5kZWZpbmVkKSAmJiB4LmZpeGVkdHopCiAgICAgICAgICAgIGF0dHJzLmF4ZXMueC52YWx1ZUZvcm1hdHRlciA9IHRoaXMueFZhbHVlRm9ybWF0dGVyRml4ZWRUWih4LnNjYWxlLCB4LnR6b25lKTsKICAgICAgCiAgICAgICAgICBpZiAoKGF0dHJzLmF4ZXMueC50aWNrZXIgPT09IHVuZGVmaW5lZCkgJiYgeC5maXhlZHR6KQogICAgICAgICAgICBhdHRycy5heGVzLngudGlja2VyID0gdGhpcy5jdXN0b21EYXRlVGlja2VyRml4ZWRUWih4LnR6b25lKTsKICAgICAgICAKICAgICAgICAgIC8vIHByb3ZpZGUgYW4gYXV0b21hdGljIHggdmFsdWUgZm9ybWF0dGVyIGlmIG5vbmUgaXMgYWxyZWFkeSBzcGVjaWZpZWQKICAgICAgICAgIGlmICgoYXR0cnMuYXhlcy54LnZhbHVlRm9ybWF0dGVyID09PSB1bmRlZmluZWQpICYmICh4LmZpeGVkdHogIT0gdHJ1ZSkpCiAgICAgICAgICAgIGF0dHJzLmF4ZXMueC52YWx1ZUZvcm1hdHRlciA9IHRoaXMueFZhbHVlRm9ybWF0dGVyKHguc2NhbGUpOwogICAgICAgICAgCiAgICAgICAgICAvLyBjb252ZXJ0IHRpbWUgdG8ganMgdGltZQogICAgICAgICAgYXR0cnMuZmlsZVswXSA9IGF0dHJzLmZpbGVbMF0ubWFwKGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiB0aGl6Lm5vcm1hbGl6ZURhdGVWYWx1ZSh4LnNjYWxlLCB2YWx1ZSwgeC5maXhlZHR6KTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGF0dHJzLmRhdGVXaW5kb3cgIT0gbnVsbCkgewogICAgICAgICAgICBhdHRycy5kYXRlV2luZG93ID0gYXR0cnMuZGF0ZVdpbmRvdy5tYXAoZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICB2YXIgZGF0ZSA9IHRoaXoubm9ybWFsaXplRGF0ZVZhbHVlKHguc2NhbGUsIHZhbHVlLCB4LmZpeGVkdHopOwogICAgICAgICAgICAgIHJldHVybiBkYXRlLmdldFRpbWUoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIAogICAgICAgIC8vIHRyYW5zcG9zZSBhcnJheQogICAgICAgIGF0dHJzLmZpbGUgPSBIVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEKGF0dHJzLmZpbGUpOwogICAgICAgIAogICAgICAgIC8vIGFkZCBkcmF3Q2FsbGJhY2sgZm9yIGdyb3VwCiAgICAgICAgaWYgKHguZ3JvdXAgIT0gbnVsbCkKICAgICAgICAgIHRoaXMuYWRkR3JvdXBEcmF3Q2FsbGJhY2soeCk7ICAKICAgICAgICAgIAogICAgICAgIC8vIGFkZCBzaGFkaW5nIGFuZCBldmVudCBjYWxsYmFjayBpZiBuZWNlc3NhcnkKICAgICAgICB0aGlzLmFkZFNoYWRpbmdDYWxsYmFjayh4KTsKICAgICAgICB0aGlzLmFkZEV2ZW50Q2FsbGJhY2soeCk7CiAgICAgICAgdGhpcy5hZGRab29tQ2FsbGJhY2soeCk7CiAgICAgICAgCiAgICAgICAgLy8gZGlzYWJsZSB5LWF4aXMgdG91Y2ggZXZlbnRzIG9uIG1vYmlsZSBwaG9uZXMKICAgICAgICBpZiAoYXR0cnMubW9iaWxlRGlzYWJsZVlUb3VjaCAhPT0gZmFsc2UgJiYgdGhpcy5pc01vYmlsZVBob25lKCkpIHsKICAgICAgICAgIC8vIGNyZWF0ZSBkZWZhdWx0IGludGVyYWN0aW9uIG1vZGVsIGlmIG5lY2Vzc2FyeQogICAgICAgICAgaWYgKCFhdHRycy5pbnRlcmFjdGlvbk1vZGVsKQogICAgICAgICAgICBhdHRycy5pbnRlcmFjdGlvbk1vZGVsID0gRHlncmFwaC5JbnRlcmFjdGlvbi5kZWZhdWx0TW9kZWw7CiAgICAgICAgICAvLyBkaXNhYmxlIHkgdG91Y2ggZGlyZWN0aW9uCiAgICAgICAgICBhdHRycy5pbnRlcmFjdGlvbk1vZGVsLnRvdWNoc3RhcnQgPSBmdW5jdGlvbihldmVudCwgZHlncmFwaCwgY29udGV4dCkgewogICAgICAgICAgICBEeWdyYXBoLmRlZmF1bHRJbnRlcmFjdGlvbk1vZGVsLnRvdWNoc3RhcnQoZXZlbnQsIGR5Z3JhcGgsIGNvbnRleHQpOwogICAgICAgICAgICBjb250ZXh0LnRvdWNoRGlyZWN0aW9ucyA9IHsgeDogdHJ1ZSwgeTogZmFsc2UgfTsKICAgICAgICAgIH07CiAgICAgICAgfQogICAgCiAgICAgICAgLy8gY3JlYXRlIHBsdWdpbnMKICAgICAgICBpZiAoeC5wbHVnaW5zKSB7CiAgICAgICAgICBhdHRycy5wbHVnaW5zID0gW107CiAgICAgICAgICBmb3IgKHZhciBwbHVnaW4gaW4geC5wbHVnaW5zKSB7CiAgICAgICAgICAgIGlmICh4LnBsdWdpbnMuaGFzT3duUHJvcGVydHkocGx1Z2luKSkgewogICAgICAgICAgICAgIAogICAgICAgICAgICAgIC8vIGdldCBwbHVnaW4gb3B0aW9ucwogICAgICAgICAgICAgIHZhciBvcHRpb25zID0geC5wbHVnaW5zW3BsdWdpbl07CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgLy8gY3JlYXRlIHBsdWdpbiBhbmQgYWRkIHRvIGR5Z3JhcGgKICAgICAgICAgICAgICB2YXIgcCA9IG5ldyBEeWdyYXBoLlBsdWdpbnNbcGx1Z2luXShvcHRpb25zKTsKICAgICAgICAgICAgICBhdHRycy5wbHVnaW5zLnB1c2gocCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIGN1c3RvbSBwbG90dGVyCiAgICAgICAgaWYgKHgucGxvdHRlcikgewogICAgICAgICAgYXR0cnMucGxvdHRlciA9IER5Z3JhcGguUGxvdHRlcnNbeC5wbG90dGVyXTsKICAgICAgICB9CgogICAgICAgIC8vIGN1c3RvbSBkYXRhIGhhbmRsZXIKICAgICAgICBpZiAoeC5kYXRhSGFuZGxlcikgewogICAgICAgICAgYXR0cnMuZGF0YUhhbmRsZXIgPSBEeWdyYXBoLkRhdGFIYW5kbGVyc1t4LmRhdGFIYW5kbGVyXTsKICAgICAgICB9CgogICAgICAgIC8vIGN1c3RvbSBjaXJjbGVzCiAgICAgICAgaWYgKHgucG9pbnRTaGFwZSkgewogICAgICAgICAgaWYgKHR5cGVvZiB4LnBvaW50U2hhcGUgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIGF0dHJzLmRyYXdQb2ludENhbGxiYWNrID0gRHlncmFwaC5DaXJjbGVzW3gucG9pbnRTaGFwZS50b1VwcGVyQ2FzZSgpXTsKICAgICAgICAgICAgYXR0cnMuZHJhd0hpZ2hsaWdodFBvaW50Q2FsbGJhY2sgPSBEeWdyYXBoLkNpcmNsZXNbeC5wb2ludFNoYXBlLnRvVXBwZXJDYXNlKCldOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yICh2YXIgcyBpbiB4LnBvaW50U2hhcGUpIHsKICAgICAgICAgICAgICBpZiAoeC5wb2ludFNoYXBlLmhhc093blByb3BlcnR5KHMpKSB7CiAgICAgICAgICAgICAgICBhdHRycy5zZXJpZXNbc10uZHJhd1BvaW50Q2FsbGJhY2sgPSBEeWdyYXBoLkNpcmNsZXNbeC5wb2ludFNoYXBlW3NdLnRvVXBwZXJDYXNlKCldOwogICAgICAgICAgICAgICAgYXR0cnMuc2VyaWVzW3NdLmRyYXdIaWdobGlnaHRQb2ludENhbGxiYWNrID0gRHlncmFwaC5DaXJjbGVzW3gucG9pbnRTaGFwZVtzXS50b1VwcGVyQ2FzZSgpXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAKICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBleGlzdGluZyBkeWdyYXBoIHBlcmZvcm0gaW5pdGlhbGl6YXRpb24KICAgICAgICBpZiAoIWR5Z3JhcGgpIHsKICAgICAgICAgIAogICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIGN1c3RvbSBzaG93biBldmVudCAoZmlyZWQgYnkgaW9zbGlkZXMgdG8gdHJpZ2dlcgogICAgICAgICAgLy8gc2hpbnkgcmVhY3Rpdml0eSBidXQgd2UgY2FuIHVzZSBpdCBhcyB3ZWxsKS4gdGhpcyBpcyBuZWNlc3NhcnkKICAgICAgICAgIC8vIGJlY2F1c2UgaWYgYSBkeWdyYXBoIHN0YXJ0cyBvdXQgYXMgZGlzcGxheTpub25lIGl0IGhhcyBoZWlnaHQKICAgICAgICAgIC8vIGFuZCB3aWR0aCA9PSAwIGFuZCB0aGlzIGRvZXNuJ3QgY2hhbmdlIHdoZW4gaXQgYmVjb21lcyB2aXNpYmxlCiAgICAgICAgICAkKGVsKS5jbG9zZXN0KCdzbGlkZScpLm9uKCdzaG93bicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoZHlncmFwaCkKICAgICAgICAgICAgICBkeWdyYXBoLnJlc2l6ZSgpOyAgCiAgICAgICAgICB9KTsKICAgICAgICAgIAogICAgICAgICAgLy8gZG8gdGhlIHNhbWUgZm9yIHJldmVhbC5qcwogICAgICAgICAgJChlbCkuY2xvc2VzdCgnc2VjdGlvbi5zbGlkZScpLm9uKCdzaG93bicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoZHlncmFwaCkKICAgICAgICAgICAgICBkeWdyYXBoLnJlc2l6ZSgpOyAgCiAgICAgICAgICB9KTsKICAgICAgICAgIAogICAgICAgICAgLy8gcmVkcmF3IG9uIFIgTWFya2Rvd24gey50YWJzZXR9IHRhYiB2aXNpYmlsaXR5IGNoYW5nZWQKICAgICAgICAgIHZhciB0YWIgPSAkKGVsKS5jbG9zZXN0KCdkaXYudGFiLXBhbmUnKTsKICAgICAgICAgIGlmICh0YWIgIT09IG51bGwpIHsKICAgICAgICAgICAgdmFyIHRhYklEID0gdGFiLmF0dHIoJ2lkJyk7CiAgICAgICAgICAgIHZhciB0YWJBbmNob3IgPSAkKCdhW2RhdGEtdG9nZ2xlPSJ0YWIiXVtocmVmPSIjJyArIHRhYklEICsgJyJdJyk7CiAgICAgICAgICAgIGlmICh0YWJBbmNob3IgIT09IG51bGwpIHsKICAgICAgICAgICAgICB0YWJBbmNob3Iub24oJ3Nob3duLmJzLnRhYicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKGR5Z3JhcGgpCiAgICAgICAgICAgICAgICAgIGR5Z3JhcGgucmVzaXplKCk7ICAKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgLy8gYWRkIGRlZmF1bHQgZm9udCBmb3Igdmlld2VyIG1vZGUKICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5VmFyKCJ2aWV3ZXJfcGFuZSIpID09PSAiMSIpCiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuZm9udEZhbWlseSA9ICJBcmlhbCwgc2Fucy1zZXJpZiI7CiAgICAKICAgICAgICAgIC8vIGluamVjdCBjc3MgaWYgbmVjZXNzYXJ5CiAgICAgICAgICBpZiAoeC5jc3MgIT0gbnVsbCkgewogICAgICAgICAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOwogICAgICAgICAgICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJzsKICAgICAgICAgICAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIAogICAgICAgICAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHguY3NzOwogICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHguY3NzKSk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIAogICAgICAgICAgICAvLyByZXRhaW4gdGhlIHVzZXJEYXRlV2luZG93IGlmIHJlcXVlc3RlZAogICAgICAgICAgICBpZiAoZHlncmFwaC51c2VyRGF0ZVdpbmRvdyAhPSBudWxsCiAgICAgICAgICAgICAgICAmJiBhdHRycy5yZXRhaW5EYXRlV2luZG93ID09IHRydWUpIHsKICAgICAgICAgICAgICBhdHRycy5kYXRlV2luZG93ID0gZHlncmFwaC54QXhpc1JhbmdlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAvLyByZW1vdmUgaXQgZnJvbSBncm91cHMgaWYgaXQncyB0aGVyZQogICAgICAgICAgICBpZiAoeC5ncm91cCAhPSBudWxsICYmIGdyb3Vwc1t4Lmdyb3VwXSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgdmFyIGluZGV4ID0gZ3JvdXBzW3guZ3JvdXBdLmluZGV4T2YoZHlncmFwaCk7CiAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQogICAgICAgICAgICAgICAgZ3JvdXBzW3guZ3JvdXBdLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGRlc3Ryb3kgdGhlIGV4aXN0aW5nIGR5Z3JhcGggCiAgICAgICAgICAgIGR5Z3JhcGguZGVzdHJveSgpOwogICAgICAgICAgICBkeWdyYXBoID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gY3JlYXRlIHRoZSBkeWdyYXBoIGFuZCBhZGQgaXQgdG8gaXQncyBncm91cCAoaWYgYW55KQogICAgICAgIGR5Z3JhcGggPSB0aGl6LmR5Z3JhcGggPSBuZXcgRHlncmFwaChlbCwgYXR0cnMuZmlsZSwgYXR0cnMpOwogICAgICAgIGR5Z3JhcGgudXNlckRhdGVXaW5kb3cgPSBhdHRycy5kYXRlV2luZG93OwogICAgICAgIGlmICh4Lmdyb3VwICE9IG51bGwpCiAgICAgICAgICBncm91cHNbeC5ncm91cF0ucHVzaChkeWdyYXBoKTsKICAgCQogICAgICAgIC8vIGFkZCBzaGlueSBpbnB1dHMgZm9yIGRhdGUgd2luZG93IGFuZCBjbGljawogICAgICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHsKICAgICAgICAgIHZhciBpc0RhdGUgPSB4LmZvcm1hdCA9PSAiZGF0ZSI7CiAgICAgICAgICB0aGlzLmFkZENsaWNrU2hpbnlJbnB1dChlbC5pZCwgaXNEYXRlKTsKICAgICAgICAgIHRoaXMuYWRkRGF0ZVdpbmRvd1NoaW55SW5wdXQoZWwuaWQsIGlzRGF0ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHNldCBhbm5vdGF0aW9ucwogICAgICAgIGlmICh4LmFubm90YXRpb25zICE9IG51bGwpIHsKICAgICAgICAgIGR5Z3JhcGgucmVhZHkoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh4LmZvcm1hdCA9PSAiZGF0ZSIpIHsKICAgICAgICAgICAgICB4LmFubm90YXRpb25zLm1hcChmdW5jdGlvbihhbm5vdGF0aW9uKSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IHRoaXoubm9ybWFsaXplRGF0ZVZhbHVlKHguc2NhbGUsIGFubm90YXRpb24ueCwgeC5maXhlZHR6KTsKICAgICAgICAgICAgICAgIGFubm90YXRpb24ueCA9IGRhdGUuZ2V0VGltZSgpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGR5Z3JhcGguc2V0QW5ub3RhdGlvbnMoeC5hbm5vdGF0aW9ucyk7CiAgICAgICAgICB9KTsgCiAgICAgICAgfQogICAgICAgICAgCiAgICAgIH0sCiAgICAgIAogICAgICBjdXN0b21EYXRlVGlja2VyRml4ZWRUWiA6IGZ1bmN0aW9uKHR6KXsKICAgICAgICByZXR1cm4gZnVuY3Rpb24odCxlLGEsaSxyKSB7ICAgCiAgICAgICAgICB2YXIgYT1EeWdyYXBoLnBpY2tEYXRlVGlja0dyYW51bGFyaXR5KHQsZSxhLGkpOwogICAgICAgICAgaWYoYSA+PSAwKXsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBuPWkoImF4aXNMYWJlbEZvcm1hdHRlciIpLAogICAgICAgICAgICBvPWkoImxhYmVsc1VUQyIpLAogICAgICAgICAgICBzPW8/RHlncmFwaC5EYXRlQWNjZXNzb3JzVVRDOkR5Z3JhcGguRGF0ZUFjY2Vzc29yc0xvY2FsOwogICAgICAgICAgICBsPUR5Z3JhcGguVElDS19QTEFDRU1FTlRbYV0uZGF0ZWZpZWxkOwogICAgICAgICAgICBoPUR5Z3JhcGguVElDS19QTEFDRU1FTlRbYV0uc3RlcDsKICAgICAgICAgICAgcD1EeWdyYXBoLlRJQ0tfUExBQ0VNRU5UW2FdLnNwYWNpbmc7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgeSA9IFtdOwogICAgICAgICAgICB2YXIgZCA9IG1vbWVudCh0KTsKICAgICAgICAgICAgZC50eih0eik7IAogICAgICAgICAgICBkLm1pbGxpc2Vjb25kKDApOwogICAgICAgICAgCiAgICAgICAgICAgIGlmKGwgPiBEeWdyYXBoLkRBVEVGSUVMRF9NKXsKICAgICAgICAgICAgICB2YXIgeDsKICAgICAgICAgICAgICBpZiAobCA9PT0gRHlncmFwaC5EQVRFRklFTERfU1MpIHsgIC8vIHNlY29uZHMgCiAgICAgICAgICAgICAgICB4ID0gZC5zZWNvbmQoKTsgICAgICAgICAKICAgICAgICAgICAgICAgIGQuc2Vjb25kKHggLSB4ICUgaCk7ICAgICAKICAgICAgICAgICAgICB9IGVsc2UgaWYobCA9PT0gRHlncmFwaC5EQVRFRklFTERfTU0pewogICAgICAgICAgICAgICAgZC5zZWNvbmQoMCkKICAgICAgICAgICAgICAgIHggPSBkLm1pbnV0ZSgpOwogICAgICAgICAgICAgICAgZC5taW51dGUoeCAtIHggJSBoKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYobCA9PT0gRHlncmFwaC5EQVRFRklFTERfSEgpewogICAgICAgICAgICAgICAgZC5zZWNvbmQoMCk7CiAgICAgICAgICAgICAgICBkLm1pbnV0ZSgwKTsKICAgICAgICAgICAgICAgIHggPSBkLmhvdXIoKTsKICAgICAgICAgICAgICAgIGQuaG91cih4IC0geCAlIGgpOwogICAgICAgICAgICAgIH0gZWxzZSBpZihsID09PSBEeWdyYXBoLkRBVEVGSUVMRF9EKXsKICAgICAgICAgICAgICAgIGQuc2Vjb25kKDApOwogICAgICAgICAgICAgICAgZC5taW51dGUoMCk7CiAgICAgICAgICAgICAgICBkLmhvdXIoMCk7CiAgICAgICAgICAgICAgICBpZiAoaCA9PSA3KSB7ICAvLyBvbmUgd2VlawogICAgICAgICAgICAgICAgICAgIGQuc3RhcnRPZignd2VlaycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAKICAgICAgICAgICAgICB2ID0gZC52YWx1ZU9mKCk7CiAgICAgICAgICAgICAgXz1tb21lbnQodikudHoodHopOwogICAgICAgICAgICAKICAgICAgICAgICAgICAvLyBGb3Igc3BhY2luZ3MgY29hcnNlciB0aGFuIHR3by1ob3VybHksIHdlIHdhbnQgdG8gaWdub3JlIGRheWxpZ2h0CiAgICAgICAgICAgICAgLy8gc2F2aW5ncyB0cmFuc2l0aW9ucyB0byBnZXQgY29uc2lzdGVudCB0aWNrcy4gRm9yIGZpbmVyLWdyYWluZWQgdGlja3MsCiAgICAgICAgICAgICAgLy8gaXQncyBlc3NlbnRpYWwgdG8gc2hvdyB0aGUgRFNUIHRyYW5zaXRpb24gaW4gYWxsIGl0cyBtZXNzaW5lc3MuCiAgICAgICAgICAgICAgdmFyIHN0YXJ0X29mZnNldF9taW4gPSBtb21lbnQodikudHoodHopLnpvbmUoKTsKICAgICAgICAgICAgICB2YXIgY2hlY2tfZHN0ID0gKHAgPj0gRHlncmFwaC5USUNLX1BMQUNFTUVOVFtEeWdyYXBoLlRXT19IT1VSTFldLnNwYWNpbmcpOwogICAgICAgICAgICAgIAogICAgCSAgICAgICAgaWYoYTw9RHlncmFwaC5IT1VSTFkpewogICAgCQkgICAgICAgIGZvcih0PnYmJih2Kz1wLF89bW9tZW50KHYpLnR6KHR6KSk7ZT49djspewogICAgCQkJICAgICAgICB5LnB1c2goe3Y6dixsYWJlbDpuKF8sYSxpLHIpfSk7CiAgICAJCQkgICAgICAgIHYrPXA7CiAgICAJCQkgICAgICAgIF89bW9tZW50KHYpLnR6KHR6KTsKICAgIAkJICAgICAgICB9CiAgICAJICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIGZvcih0PnYmJih2Kz1wLF89bW9tZW50KHYpLnR6KHR6KSk7ZT49djspeyAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2Ugc3RheSBvbiB0aGUgc2FtZSBob3VybHkgInJoeXRobSIgYWNyb3NzCiAgICAgICAgICAgICAgICAgIC8vIGRheWxpZ2h0IHNhdmluZ3MgdHJhbnNpdGlvbnMuIFdpdGhvdXQgdGhpcywgdGhlIHRpY2tzIGNvdWxkIGdldCBvZmYKICAgICAgICAgICAgICAgICAgLy8gYnkgYW4gaG91ci4gU2VlIHRlc3RzL2RheWxpZ2h0LXNhdmluZ3MuaHRtbCBvciBpc3N1ZSAxNDcuCiAgICAgICAgICAgICAgICAgIGlmIChjaGVja19kc3QgJiYgXy56b25lKCkgIT0gc3RhcnRfb2Zmc2V0X21pbikgewogICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YV9taW4gPSBfLnpvbmUoKSAtIHN0YXJ0X29mZnNldF9taW47CiAgICAgICAgICAgICAgICAgICAgdiArPSBkZWx0YV9taW4gKiA2MCAqIDEwMDA7CiAgICAgICAgICAgICAgICAgICAgXz0gbW9tZW50KHYpLnR6KHR6KTsKICAgICAgICAgICAgICAgICAgICBzdGFydF9vZmZzZXRfbWluID0gXy56b25lKCk7CiAgICAKICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlJ3ZlIGJhY2tlZCBpbnRvIHRoZSBwcmV2aW91cyB0aW1lem9uZSBhZ2Fpbi4KICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gZHVyaW5nIGEgInNwcmluZyBmb3J3YXJkIiB0cmFuc2l0aW9uLiBJbiB0aGlzIGNhc2UsCiAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBiZXN0IHRvIHNraXAgdGhpcyB0aWNrIGFsdG9nZXRoZXIgKHdlIG1heSBiZSBzaG9vdGluZyBmb3IgYQogICAgICAgICAgICAgICAgICAgIC8vIG5vbi1leGlzdGVudCB0aW1lIGxpa2UgdGhlIDJBTSB0aGF0J3Mgc2tpcHBlZCkgYW5kIGdvIHRvIHRoZSBuZXh0CiAgICAgICAgICAgICAgICAgICAgLy8gb25lLgogICAgICAgICAgICAgICAgICAgIGlmIChtb21lbnQodiArIHApLnR6KHR6KS56b25lKCkgIT0gc3RhcnRfb2Zmc2V0X21pbikgewogICAgICAgICAgICAgICAgICAgICAgdiArPSBwOwogICAgICAgICAgICAgICAgICAgICAgXz0gbW9tZW50KHYpLnR6KHR6KTsKICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X29mZnNldF9taW4gPSBfLnpvbmUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAoYT49RHlncmFwaC5EQUlMWXx8Xy5nZXQoJ2hvdXInKSVoPT09MCkmJnkucHVzaCh7djp2LGxhYmVsOm4oXyxhLGkscil9KTsKICAgIAkJCSAgICAgICAgdis9cDsKICAgIAkJCSAgICAgICAgXz1tb21lbnQodikudHoodHopOwogICAgCQkgICAgICAgIH0KICAgIAkgICAgICAgIH0KICAgIAkgICAgICB9ZWxzZXsKICAgICAgICAgICAgICB2YXIgc3RhcnRfeWVhciA9IG1vbWVudCh0KS50eih0eikueWVhcigpOwogICAgICAgICAgICAgIHZhciBlbmRfeWVhciAgID0gbW9tZW50KGUpLnR6KHR6KS55ZWFyKCk7CiAgICAgICAgICAgICAgdmFyIHN0YXJ0X21vbnRoID0gbW9tZW50KHQpLnR6KHR6KS5tb250aCgpOwogICAgICAgICAgICAgIAogICAgICAgICAgICAgIGlmKGwgPT09IER5Z3JhcGguREFURUZJRUxEX00pewogICAgICAgICAgICAgICAgdmFyIHN0ZXBfbW9udGggPSBoOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaWkgPSBzdGFydF95ZWFyOyBpaSA8PSBlbmRfeWVhcjsgaWkrKykgewogICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDEyOykgewogICAgICAgICAgICAgICAgICAgIHZhciBkdCA9IG1vbWVudChuZXcgRGF0ZShpaSwgaiwgMSkpLnR6KHR6KTsgCiAgICAgICAgICAgICAgICAgICAgLy8gZml4IHNvbWUgdHogYnVnCiAgICAgICAgICAgICAgICAgICAgZHQueWVhcihpaSk7CiAgICAgICAgICAgICAgICAgICAgZHQubW9udGgoaik7CiAgICAgICAgICAgICAgICAgICAgZHQuZGF0ZSgxKTsKICAgICAgICAgICAgICAgICAgICBkdC5ob3VyKDApOwogICAgICAgICAgICAgICAgICAgIHYgPSBkdC52YWx1ZU9mKCk7CiAgICAgICAgICAgICAgICAgICAgeS5wdXNoKHt2OnYsbGFiZWw6bihtb21lbnQodikudHoodHopLGEsaSxyKX0pOwogICAgICAgICAgICAgICAgICAgIGorPXN0ZXBfbW9udGg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIHZhciBzdGVwX3llYXIgPSBoOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaWkgPSBzdGFydF95ZWFyOyBpaSA8PSBlbmRfeWVhcjspIHsKICAgICAgICAgICAgICAgICAgdmFyIGR0ID0gbW9tZW50KG5ldyBEYXRlKGlpLCAxLCAxKSkudHoodHopOyAKICAgICAgICAgICAgICAgICAgLy8gZml4IHNvbWUgdHogYnVnCiAgICAgICAgICAgICAgICAgIGR0LnllYXIoaWkpOwogICAgICAgICAgICAgICAgICBkdC5tb250aChqKTsKICAgICAgICAgICAgICAgICAgZHQuZGF0ZSgxKTsKICAgICAgICAgICAgICAgICAgZHQuaG91cigwKTsKICAgICAgICAgICAgICAgICAgdiA9IGR0LnZhbHVlT2YoKTsKICAgICAgICAgICAgICAgICAgeS5wdXNoKHt2OnYsbGFiZWw6bihtb21lbnQodikudHoodHopLGEsaSxyKX0pOwogICAgICAgICAgICAgICAgICBpaSs9c3RlcF95ZWFyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgIAkgICAgICB9CiAgICAJICAgICAgcmV0dXJuIHk7CiAgICAJICAgIH1lbHNlewogICAgICAgICAgIHJldHVybiBbXTsgCiAgICAJICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgCiAgICAgIHhBeGlzTGFiZWxGb3JtYXR0ZXJGaXhlZFRaIDogZnVuY3Rpb24odHopewogICAgICAKICAgICAgICByZXR1cm4gZnVuY3Rpb24gZGF0ZUF4aXNGb3JtYXR0ZXIoZGF0ZSwgZ3JhbnVsYXJpdHkpewogICAgICAgICAgdmFyIG1tbnQgPSBtb21lbnQoZGF0ZSkudHoodHopOwogICAgICAgICAgaWYgKGdyYW51bGFyaXR5ID49IER5Z3JhcGguREVDQURBTCl7CiAgICAgICAgICAgIHJldHVybiBtbW50LmZvcm1hdCgnWVlZWScpOwogICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIGlmKGdyYW51bGFyaXR5ID49IER5Z3JhcGguTU9OVEhMWSl7CiAgICAgICAgICAgICAgcmV0dXJuIG1tbnQuZm9ybWF0KCdNTU0gWVlZWScpOwogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICB2YXIgZnJhYyA9IG1tbnQuaG91cigpICogMzYwMCArIG1tbnQubWludXRlKCkgKiA2MCArIG1tbnQuc2Vjb25kKCkgKyBtbW50Lm1pbGxpc2Vjb25kKCk7CiAgICAgICAgICAgICAgICBpZiAoZnJhYyA9PT0gMCB8fCBncmFudWxhcml0eSA+PSBEeWdyYXBoLkRBSUxZKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBtbW50LmZvcm1hdCgnREQgTU1NJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChtbW50LnNlY29uZCgpKSB7CiAgICAgICAgICAgICAgICAgICByZXR1cm4gbW1udC5mb3JtYXQoJ0hIOm1tOnNzJyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgIHJldHVybiBtbW50LmZvcm1hdCgnSEg6bW0nKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgfSAgICAgICAgIAogICAgICAgfQogICAgICB9LAogICAgICAgICAgICAgCiAgICAgIHhWYWx1ZUZvcm1hdHRlckZpeGVkVFo6IGZ1bmN0aW9uKHNjYWxlLCB0eikgewogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIHJldHVybiBmdW5jdGlvbihtaWxsaXMpIHsKICAgICAgICAgIHZhciBtbW50ID0gbW9tZW50KG1pbGxpcykudHoodHopOwogICAgICAgICAgaWYgKHNjYWxlID09ICJ5ZWFybHkiKQogICAgICAgICAgICByZXR1cm4gbW1udC5mb3JtYXQoJ1lZWVknKSArICcgKCcgKyBtbW50LnpvbmVBYmJyKCkgKyAnKSc7CiAgICAgICAgICBlbHNlIGlmIChzY2FsZSA9PSAicXVhcnRlcmx5IikKICAgICAgICAgICAgcmV0dXJuIG1tbnQuZnF1YXJ0ZXIoMSkgKyAnICgnICsgbW1udC56b25lQWJicigpICsgJyknOwogICAgICAgICAgICBlbHNlIGlmIChzY2FsZSA9PSAibW9udGhseSIpCiAgICAgICAgICAgICAgcmV0dXJuIG1tbnQuZm9ybWF0KCdNTU0sIFlZWVknKSsgJyAoJyArIG1tbnQuem9uZUFiYnIoKSArICcpJzsKICAgICAgICAgICAgZWxzZSBpZiAoc2NhbGUgPT0gImRhaWx5IiB8fCBzY2FsZSA9PSAid2Vla2x5IikKICAgICAgICAgICAgICByZXR1cm4gbW1udC5mb3JtYXQoJ01NTSwgREQsIFlZWVknKSsgJyAoJyArIG1tbnQuem9uZUFiYnIoKSArICcpJzsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHJldHVybiBtbW50LmZvcm1hdCgnZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbTpzcycpKyAnICgnICsgbW1udC56b25lQWJicigpICsgJyknOwogICAgICAgIH0KICAgICAgfSwKICAgICAgCiAgICAgIHhWYWx1ZUZvcm1hdHRlcjogZnVuY3Rpb24oc2NhbGUpIHsKICAgICAgICAKICAgICAgICB2YXIgbW9udGhOYW1lcyA9IFsiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICByZXR1cm4gZnVuY3Rpb24obWlsbGlzKSB7CiAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKG1pbGxpcyk7CiAgICAgICAgICBpZiAoc2NhbGUgPT0gInllYXJseSIpCiAgICAgICAgICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7CiAgICAgICAgICBlbHNlIGlmIChzY2FsZSA9PSAicXVhcnRlcmx5IikKICAgICAgICAgICAgcmV0dXJuIG1vbWVudChtaWxsaXMpLmZxdWFydGVyKDEpOwogICAgICAgICAgZWxzZSBpZiAoc2NhbGUgPT0gIm1vbnRobHkiKQogICAgICAgICAgICByZXR1cm4gbW9udGhOYW1lc1tkYXRlLmdldE1vbnRoKCldICsgJywgJyArIGRhdGUuZ2V0RnVsbFllYXIoKTsgCiAgICAgICAgICBlbHNlIGlmIChzY2FsZSA9PSAiZGFpbHkiIHx8IHNjYWxlID09ICJ3ZWVrbHkiKQogICAgICAgICAgICByZXR1cm4gbW9udGhOYW1lc1tkYXRlLmdldE1vbnRoKCldICsgJywgJyArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlLmdldERhdGUoKSArICcsICcgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgCiAgICAgIGFkZFpvb21DYWxsYmFjazogZnVuY3Rpb24oeCkgewogICAgICAgIAogICAgICAgIC8vIGFsaWFzIHRoaXMKICAgICAgICB2YXIgdGhpeiA9IHRoaXM7CiAgICAgICAgCiAgICAgICAgLy8gZ2V0IGF0dHJzCiAgICAgICAgdmFyIGF0dHJzID0geC5hdHRyczsKICAgICAgICAKICAgICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3Rpbmcgem9vbUNhbGxiYWNrCiAgICAgICAgdmFyIHByZXZab29tQ2FsbGJhY2sgPSBhdHRyc1siem9vbUNhbGxiYWNrIl07CiAgICAgICAgCiAgICAgICAgYXR0cnMuem9vbUNhbGxiYWNrID0gZnVuY3Rpb24obWluRGF0ZSwgbWF4RGF0ZSwgeVJhbmdlcykgewogICAgICAgICAgCiAgICAgICAgICAvLyBjYWxsIGV4aXN0aW5nCiAgICAgICAgICBpZiAocHJldlpvb21DYWxsYmFjaykKICAgICAgICAgICAgcHJldlpvb21DYWxsYmFjayhtaW5EYXRlLCBtYXhEYXRlLCB5UmFuZ2VzKTsKICAgICAgICAgICAgCiAgICAgICAgICAvLyByZWNvcmQgdXNlciBkYXRlIHdpbmRvdyAob3IgbGFjayB0aGVyZW9mKQogICAgICAgICAgaWYgKGR5Z3JhcGgueEF4aXNFeHRyZW1lcygpWzBdICE9IG1pbkRhdGUgfHwKICAgICAgICAgICAgICBkeWdyYXBoLnhBeGlzRXh0cmVtZXMoKVsxXSAhPSBtYXhEYXRlKSB7CiAgICAgICAgICAgICBkeWdyYXBoLnVzZXJEYXRlV2luZG93ID0gW21pbkRhdGUsIG1heERhdGVdOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGR5Z3JhcGgudXNlckRhdGVXaW5kb3cgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICAvLyByZWNvcmQgaW4gZ3JvdXAgaWYgbmVjZXNzYXJ5CiAgICAgICAgICBpZiAoeC5ncm91cCAhPSBudWxsICYmIGdyb3Vwc1t4Lmdyb3VwXSAhPSBudWxsKSB7CiAgICAgICAgICAgIHZhciBncm91cCA9IGdyb3Vwc1t4Lmdyb3VwXTsKICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaTxncm91cC5sZW5ndGg7IGkrKykKICAgICAgICAgICAgICBncm91cFtpXS51c2VyRGF0ZVdpbmRvdyA9IGR5Z3JhcGgudXNlckRhdGVXaW5kb3c7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgCiAgICAgIGFkZEdyb3VwRHJhd0NhbGxiYWNrOiBmdW5jdGlvbih4KSB7CiAgICAgICAgCiAgICAgICAgLy8gZ2V0IGF0dHJzCiAgICAgICAgdmFyIGF0dHJzID0geC5hdHRyczsKICAgICAgICAKICAgICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3RpbmcgZHJhd0NhbGxiYWNrCiAgICAgICAgdmFyIHByZXZEcmF3Q2FsbGJhY2sgPSBhdHRyc1siZHJhd0NhbGxiYWNrIl07CiAgICAgICAgCiAgICAgICAgZ3JvdXBzW3guZ3JvdXBdID0gZ3JvdXBzW3guZ3JvdXBdIHx8IFtdOwogICAgICAgIHZhciBncm91cCA9IGdyb3Vwc1t4Lmdyb3VwXTsKICAgICAgICB2YXIgYmxvY2tSZWRyYXcgPSBmYWxzZTsKICAgICAgICBhdHRycy5kcmF3Q2FsbGJhY2sgPSBmdW5jdGlvbihtZSwgaW5pdGlhbCkgewogICAgICAgICAgCiAgICAgICAgICAvLyBjYWxsIGV4aXN0aW5nCiAgICAgICAgICBpZiAocHJldkRyYXdDYWxsYmFjaykKICAgICAgICAgICAgcHJldkRyYXdDYWxsYmFjayhtZSwgaW5pdGlhbCk7CiAgICAgICAgICAKICAgICAgICAgIC8vIHN5bmMgcGVlcnMgaW4gZ3JvdXAKICAgICAgICAgIGlmIChibG9ja1JlZHJhdyB8fCBpbml0aWFsKSByZXR1cm47CiAgICAgICAgICBibG9ja1JlZHJhdyA9IHRydWU7CiAgICAgICAgICB2YXIgcmFuZ2UgPSBkeWdyYXBoLnhBeGlzUmFuZ2UoKTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgaWYgKGdyb3VwW2pdID09IG1lKSBjb250aW51ZTsKICAgICAgICAgICAgLy8gdXBkYXRlIGdyb3VwIHJhbmdlIG9ubHkgaWYgaXQncyBkaWZmZXJlbnQgKHByZXZlbnRzCiAgICAgICAgICAgIC8vIGluZmluaXRlIHJlY3Vyc2lvbiBpbiB1cGRhdGVPcHRpb25zKQogICAgICAgICAgICB2YXIgcGVlclJhbmdlID0gZ3JvdXBbal0ueEF4aXNSYW5nZSgpOwogICAgICAgICAgICBpZiAocGVlclJhbmdlWzBdICE9IHJhbmdlWzBdIHx8IHBlZXJSYW5nZVsxXSAhPSByYW5nZVsxXSkgewogICAgICAgICAgICAgIGdyb3VwW2pdLnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgICAgICAgZGF0ZVdpbmRvdzogcmFuZ2UKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYmxvY2tSZWRyYXcgPSBmYWxzZTsKICAgICAgICB9OwogICAgICB9LAogICAgICAKICAgICAgYWRkU2hhZGluZ0NhbGxiYWNrOiBmdW5jdGlvbih4KSB7CiAgICAgICAgCiAgICAgICAgLy8gYmFpbCBpZiBubyBzaGFkaW5ncwogICAgICAgIGlmICh4LnNoYWRpbmdzLmxlbmd0aCA9PSAwKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIAogICAgICAgIC8vIGFsaWFzIHRoaXMKICAgICAgICB2YXIgdGhpeiA9IHRoaXM7CiAgICAgICAgCiAgICAgICAgLy8gZ2V0IGF0dHJzCiAgICAgICAgdmFyIGF0dHJzID0geC5hdHRyczsKICAgICAgICAKICAgICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3RpbmcgdW5kZXJsYXlDYWxsYmFjawogICAgICAgIHZhciBwcmV2VW5kZXJsYXlDYWxsYmFjayA9IGF0dHJzWyJ1bmRlcmxheUNhbGxiYWNrIl07CiAgICAgICAgCiAgICAgICAgLy8gaW5zdGFsbCBjYWxsYmFjawogICAgICAgIGF0dHJzLnVuZGVybGF5Q2FsbGJhY2sgPSBmdW5jdGlvbihjYW52YXMsIGFyZWEsIGcpIHsKICAgICAgICAgIAogICAgICAgICAgLy8gY2FsbCBleGlzdGluZwogICAgICAgICAgaWYgKHByZXZVbmRlcmxheUNhbGxiYWNrKQogICAgICAgICAgICBwcmV2VW5kZXJsYXlDYWxsYmFjayhjYW52YXMsIGFyZWEsIGcpOwogICAgICAgICAgICAKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5zaGFkaW5ncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgc2hhZGluZyA9IHguc2hhZGluZ3NbaV07CiAgICAgICAgICAgIGNhbnZhcy5zYXZlKCk7CiAgICAgICAgICAgIGNhbnZhcy5maWxsU3R5bGUgPSBzaGFkaW5nLmNvbG9yOwogICAgICAgICAgICBpZiAoc2hhZGluZy5heGlzID09ICJ4IikgewogICAgICAgICAgICAgIHZhciB4MSA9IHNoYWRpbmcuZnJvbTsKICAgICAgICAgICAgICB2YXIgeDIgPSBzaGFkaW5nLnRvOwogICAgICAgICAgICAgIGlmICh4LmZvcm1hdCA9PSAiZGF0ZSIpIHsKICAgICAgICAgICAgICAgIHgxID0gdGhpei5ub3JtYWxpemVEYXRlVmFsdWUoeC5zY2FsZSwgeDEsIHguZml4ZWR0eikuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgeDIgPSB0aGl6Lm5vcm1hbGl6ZURhdGVWYWx1ZSh4LnNjYWxlLCB4MiwgeC5maXhlZHR6KS5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBsZWZ0ID0gZy50b0RvbVhDb29yZCh4MSk7CiAgICAgICAgICAgICAgdmFyIHJpZ2h0ID0gZy50b0RvbVhDb29yZCh4Mik7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgY2FudmFzLmZpbGxSZWN0KGxlZnQsIGFyZWEueSwgcmlnaHQgLSBsZWZ0LCBhcmVhLmgpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHNoYWRpbmcuYXhpcyA9PSAieSIpIHsKICAgICAgICAgICAgICB2YXIgYm90dG9tID0gZy50b0RvbVlDb29yZChzaGFkaW5nLmZyb20pOwogICAgICAgICAgICAgIHZhciB0b3AgPSBnLnRvRG9tWUNvb3JkKHNoYWRpbmcudG8pOwogICAgCiAgICAgICAgICAgICAgY2FudmFzLmZpbGxSZWN0KGFyZWEueCwgYm90dG9tLCBhcmVhLncsIHRvcCAtIGJvdHRvbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICAKICAgICAgYWRkRXZlbnRDYWxsYmFjazogZnVuY3Rpb24oeCkgewogICAgICAgIAogICAgICAgIC8vIGJhaWwgaWYgbm8gZXZldHMKICAgICAgICBpZiAoeC5ldmVudHMubGVuZ3RoID09IDApCiAgICAgICAgICByZXR1cm47CiAgICAgICAgCiAgICAgICAgLy8gYWxpYXMgdGhpcwogICAgICAgIHZhciB0aGl6ID0gdGhpczsKICAgICAgICAKICAgICAgICAvLyBnZXQgYXR0cnMKICAgICAgICB2YXIgYXR0cnMgPSB4LmF0dHJzOwogICAgICAgIAogICAgICAgIC8vIGNoZWNrIGZvciBhbiBleGlzdGluZyB1bmRlcmxheUNhbGxiYWNrCiAgICAgICAgdmFyIHByZXZVbmRlcmxheUNhbGxiYWNrID0gYXR0cnNbInVuZGVybGF5Q2FsbGJhY2siXTsKICAgICAgICAKICAgICAgICAvLyBpbnN0YWxsIGNhbGxiYWNrCiAgICAgICAgYXR0cnMudW5kZXJsYXlDYWxsYmFjayA9IGZ1bmN0aW9uKGNhbnZhcywgYXJlYSwgZykgewogICAgICAgICAgCiAgICAgICAgICAvLyBjYWxsIGV4aXN0aW5nCiAgICAgICAgICBpZiAocHJldlVuZGVybGF5Q2FsbGJhY2spCiAgICAgICAgICAgIHByZXZVbmRlcmxheUNhbGxiYWNrKGNhbnZhcywgYXJlYSwgZyk7CiAgICAgICAgICAgIAogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4LmV2ZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAKICAgICAgICAgICAgLy8gZ2V0IGV2ZW50IGFuZCB4LWNvb3JkaW5hdGUKICAgICAgICAgICAgdmFyIGV2ZW50ID0geC5ldmVudHNbaV07CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBkcmF3IGxpbmUKICAgICAgICAgICAgY2FudmFzLnNhdmUoKTsKICAgICAgICAgICAgY2FudmFzLnN0cm9rZVN0eWxlID0gZXZlbnQuY29sb3I7CiAgICAgICAgICAgIGlmIChldmVudC5heGlzID09ICJ4IikgewogICAgICAgICAgICAgIHZhciB4UG9zOwogICAgICAgICAgICAgIGlmIChqUXVlcnkuaXNOdW1lcmljKGV2ZW50LnBvcykpIHsKICAgICAgICAgICAgICAgIHhQb3MgPSBnLnRvRG9tWENvb3JkKGV2ZW50LnBvcyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHhQb3MgPSB0aGl6Lm5vcm1hbGl6ZURhdGVWYWx1ZSh4LnNjYWxlLCBldmVudC5wb3MsIHguZml4ZWR0eikuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgeFBvcyA9IGcudG9Eb21YQ29vcmQoeFBvcyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIAogICAgICAgICAgICAgIC8vIGRyYXcgbGluZQogICAgICAgICAgICAgIHRoaXouZGFzaGVkTGluZShjYW52YXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4UG9zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlYS55LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFBvcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZWEueSArIGFyZWEuaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3Ryb2tlUGF0dGVybik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuYXhpcyA9PSAieSIpIHsKICAgICAgICAgICAgICB5UG9zID0gZy50b0RvbVlDb29yZChldmVudC5wb3MpOwogICAgICAgICAgICAgIAogICAgICAgICAgICAgIHRoaXouZGFzaGVkTGluZShjYW52YXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVhLngsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5UG9zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlYS54ICsgYXJlYS53LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeVBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3Ryb2tlUGF0dGVybik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGRyYXcgbGFiZWwKICAgICAgICAgICAgaWYgKGV2ZW50LmxhYmVsICE9IG51bGwpIHsKICAgICAgICAgICAgICBjYW52YXMuc2F2ZSgpOwogICAgICAgICAgICAgIHRoaXouc2V0Rm9udFNpemUoY2FudmFzLCAxMik7CiAgICAgICAgICAgICAgdmFyIHNpemUgPSBjYW52YXMubWVhc3VyZVRleHQoZXZlbnQubGFiZWwpOwogICAgICAgICAgICAgIGlmIChldmVudC5heGlzID09ICJ4IikgewogICAgICAgICAgICAgICAgdmFyIHR4ID0geFBvcyAtIDQ7CiAgICAgICAgICAgICAgICB2YXIgdHk7CiAgICAgICAgICAgICAgICBpZiAoZXZlbnQubGFiZWxMb2MgPT0gInRvcCIpCiAgICAgICAgICAgICAgICAgIHR5ID0gYXJlYS55ICsgc2l6ZS53aWR0aCArIDEwOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICB0eSA9IGFyZWEueSArIGFyZWEuaCAtIDEwOwogICAgICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSh0eCwgdHkpOwogICAgICAgICAgICAgICAgY2FudmFzLnJvdGF0ZSgzICogTWF0aC5QSSAvIDIpOwogICAgICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgtdHgsLXR5KTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmF4aXMgPT0gInkiKSB7CiAgICAgICAgICAgICAgICB2YXIgdHkgPSB5UG9zIC0gNDsKICAgICAgICAgICAgICAgIHZhciB0eDsKICAgICAgICAgICAgICAgIGlmIChldmVudC5sYWJlbExvYyA9PSAicmlnaHQiKQogICAgICAgICAgICAgICAgICB0eCA9IGFyZWEueCArIGFyZWEudyAtIHNpemUud2lkdGggLSAxMDsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgdHggPSBhcmVhLnggKyAxMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2FudmFzLmZpbGxTdHlsZSA9IGV2ZW50LmNvbG9yOwogICAgICAgICAgICAgIGNhbnZhcy5maWxsVGV4dChldmVudC5sYWJlbCwgdHgsIHR5KTsKICAgICAgICAgICAgICBjYW52YXMucmVzdG9yZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgCiAgICAgIGFkZERhdGVXaW5kb3dTaGlueUlucHV0OiBmdW5jdGlvbihpZCwgaXNEYXRlKSB7CiAgICAgICAgICAKICAgICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3RpbmcgZHJhd0NhbGxiYWNrCiAgICAgICAgdmFyIHByZXZEcmF3Q2FsbGJhY2sgPSBkeWdyYXBoLmdldE9wdGlvbigiZHJhd0NhbGxiYWNrIik7CiAgICAgICAgCiAgICAgICAgLy8gaW5zdGFsbCB0aGUgY2FsbGJhY2sKICAgICAgICBkeWdyYXBoLnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgZHJhd0NhbGxiYWNrOiBmdW5jdGlvbihtZSwgaW5pdGlhbCkgewogICAgICAgICAgICAvLyBjYWxsIGV4aXN0aW5nCiAgICAgICAgICAgIGlmIChwcmV2RHJhd0NhbGxiYWNrKQogICAgICAgICAgICAgIHByZXZEcmF3Q2FsbGJhY2sobWUsIGluaXRpYWwpOwogICAgICAgICAgICAvLyBmaXJlIGlucHV0IGNoYW5nZQogICAgICAgICAgICB2YXIgcmFuZ2UgPSBkeWdyYXBoLnhBeGlzUmFuZ2UoKTsKICAgICAgICAgICAgaWYgKGlzRGF0ZSkKICAgICAgICAgICAgICByYW5nZSA9IFtuZXcgRGF0ZShyYW5nZVswXSksIG5ldyBEYXRlKHJhbmdlWzFdKV07CiAgICAgICAgICAgIGlmIChTaGlueS5vbklucHV0Q2hhbmdlKSAvLyBtYXkgbm90ZSBiZSByZWFkeSB5ZXQgaW4gY2FzZSBvZiBzdGF0aWMgcmVuZGVyCiAgICAgICAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZShpZCArICJfZGF0ZV93aW5kb3ciLCByYW5nZSk7IAogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LAogICAgICAKICAgICAgYWRkQ2xpY2tTaGlueUlucHV0OiBmdW5jdGlvbihpZCwgaXNEYXRlKSB7CiAgICAgICAgCiAgICAgICAgdmFyIHByZXZDbGlja0NhbGxiYWNrID0gZHlncmFwaC5nZXRPcHRpb24oImNsaWNrQ2FsbGJhY2siKQogICAgICAgIAogICAgICAgIGR5Z3JhcGgudXBkYXRlT3B0aW9ucyh7CiAgICAgICAgICBjbGlja0NhbGxiYWNrOiBmdW5jdGlvbihlLCB4LCBwb2ludHMpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGNhbGwgZXhpc3RpbmcKICAgICAgICAgICAgaWYgKHByZXZDbGlja0NhbGxiYWNrKQogICAgICAgICAgICAgIHByZXZDbGlja0NhbGxiYWNrKGUsIHgsIHBvaW50cyk7CiAgICAgICAgICAgICAgCgkJCSAgICAgIC8vIGZpcmUgaW5wdXQgY2hhbmdlCgkJCSAgICAgIGlmIChTaGlueS5vbklucHV0Q2hhbmdlKSB7IC8vIG1heSBub3RlIGJlIHJlYWR5IHlldCBpbiBjYXNlIG9mIHN0YXRpYyByZW5kZXIKICAgICAgICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKGVsLmlkICsgIl9jbGljayIsIHsKICAgICAgICAJCQkJeDogaXNEYXRlID8gbmV3IERhdGUoeCkgOiB4LAogICAgICAgIAkJCQl4X2Nsb3Nlc3RfcG9pbnQ6IGlzRGF0ZSA/IG5ldyBEYXRlKHBvaW50c1swXS54dmFsKSA6IHBvaW50c1swXS54dmFsLAogICAgICAgIAkJCQl5X2Nsb3Nlc3RfcG9pbnQ6IHBvaW50c1swXS55dmFsLAogICAgICAgIAkJCQlzZXJpZXNfbmFtZTogcG9pbnRzWzBdLm5hbWUsCiAgICAgICAgCQkJCScubm9uY2UnOiBNYXRoLnJhbmRvbSgpIC8vIEZvcmNlIHJlYWN0aXZpdHkgaWYgY2xpY2sgaGFzbid0IGNoYW5nZWQKICAJCQkgICAgICB9KTsgCgkJCSAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSwKICAgICAgCiAgICAgIC8vIEFkZCBkYXNoZWQgbGluZSBzdXBwb3J0IHRvIGNhbnZhcyByZW5kZXJpbmcgY29udGV4dAogICAgICAvLyBTZWU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDU3NjcyNC9kb3R0ZWQtc3Ryb2tlLWluLWNhbnZhcwogICAgICBkYXNoZWRMaW5lOiBmdW5jdGlvbihjYW52YXMsIHgsIHksIHgyLCB5MiwgZGFzaEFycmF5KSB7CiAgICAgICAgY2FudmFzLmJlZ2luUGF0aCgpOwogICAgICAgIGlmICghZGFzaEFycmF5KSBkYXNoQXJyYXk9WzEwLDVdOwogICAgICAgIGlmIChkYXNoTGVuZ3RoPT0wKSBkYXNoTGVuZ3RoID0gMC4wMDE7IC8vIEhhY2sgZm9yIFNhZmFyaQogICAgICAgIHZhciBkYXNoQ291bnQgPSBkYXNoQXJyYXkubGVuZ3RoOwogICAgICAgIGNhbnZhcy5tb3ZlVG8oeCwgeSk7CiAgICAgICAgdmFyIGR4ID0gKHgyLXgpLCBkeSA9ICh5Mi15KTsKICAgICAgICB2YXIgc2xvcGUgPSBkeCA/IGR5L2R4IDogMWUxNTsKICAgICAgICB2YXIgZGlzdFJlbWFpbmluZyA9IE1hdGguc3FydCggZHgqZHggKyBkeSpkeSApOwogICAgICAgIHZhciBkYXNoSW5kZXg9MCwgZHJhdz10cnVlOwogICAgICAgIHdoaWxlIChkaXN0UmVtYWluaW5nPj0wLjEpewogICAgICAgICAgdmFyIGRhc2hMZW5ndGggPSBkYXNoQXJyYXlbZGFzaEluZGV4KyslZGFzaENvdW50XTsKICAgICAgICAgIGlmIChkYXNoTGVuZ3RoID4gZGlzdFJlbWFpbmluZykgZGFzaExlbmd0aCA9IGRpc3RSZW1haW5pbmc7CiAgICAgICAgICB2YXIgeFN0ZXAgPSBNYXRoLnNxcnQoIGRhc2hMZW5ndGgqZGFzaExlbmd0aCAvICgxICsgc2xvcGUqc2xvcGUpICk7CiAgICAgICAgICBpZiAoZHg8MCkgeFN0ZXAgPSAteFN0ZXA7CiAgICAgICAgICB4ICs9IHhTdGVwCiAgICAgICAgICB5ICs9IHNsb3BlKnhTdGVwOwogICAgICAgICAgY2FudmFzW2RyYXcgPyAnbGluZVRvJyA6ICdtb3ZlVG8nXSh4LHkpOwogICAgICAgICAgZGlzdFJlbWFpbmluZyAtPSBkYXNoTGVuZ3RoOwogICAgICAgICAgZHJhdyA9ICFkcmF3OwogICAgICAgIH0KICAgICAgICBjYW52YXMuc3Ryb2tlKCk7CiAgICAgIH0sCiAgICAgIAogICAgICBzZXRGb250U2l6ZTogZnVuY3Rpb24oY2FudmFzLCBzaXplKSB7CiAgICAgICAgdmFyIGNGb250ID0gY2FudmFzLmZvbnQ7CiAgICAgICAgdmFyIHBhcnRzID0gY0ZvbnQuc3BsaXQoJyAnKTsKICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAyKQogICAgICAgICAgY2FudmFzLmZvbnQgPSBzaXplICsgJ3B4ICcgKyBwYXJ0c1sxXTsKICAgICAgICBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPT09IDMpCiAgICAgICAgICBjYW52YXMuZm9udCA9IHBhcnRzWzBdICsgJyAnICsgc2l6ZSArICdweCAnICsgcGFydHNbMl07CiAgICAgIH0sCiAgICAgIAogICAgICAvLyBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIEdFVCB2YXJpYWJsZQogICAgICBxdWVyeVZhcjogZnVuY3Rpb24obmFtZSkgewogICAgICAgIHJldHVybiBkZWNvZGVVUkkod2luZG93LmxvY2F0aW9uLnNlYXJjaC5yZXBsYWNlKAogICAgICAgICAgbmV3IFJlZ0V4cCgiXig/Oi4qWyZcXD9dIiArCiAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSShuYW1lKS5yZXBsYWNlKC9bXC5cK1wqXS9nLCAiXFwkJiIpICsKICAgICAgICAgICAgICAgICAgICAgIig/OlxcPShbXiZdKikpPyk/LiokIiwgImkiKSwKICAgICAgICAgICIkMSIpKTsKICAgICAgfSwKICAgICAgCiAgICAgIC8vIFdlIGRlYWwgZXhjbHVzaXZlbHkgaW4gVVRDIGRhdGVzIHdpdGhpbiBSLCBob3dldmVyIGR5Z3JhcGhzIGRlYWxzIAogICAgICAvLyBleGNsdXNpdmVseSBpbiB0aGUgbG9jYWwgdGltZSB6b25lLiBUaGVyZWZvcmUsIGluIG9yZGVyIHRvIHBsb3QgZGF0ZQogICAgICAvLyBsYWJlbHMgdGhhdCBtYWtlIHNlbnNlIHRvIHRoZSB1c2VyIHdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aCBkYXlzLAogICAgICAvLyBtb250aHMgb3IgeWVhcnMgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBVVEMgZGF0ZSB2YWx1ZSB0byBhIGxvY2FsIHRpbWUKICAgICAgLy8gdmFsdWUgdGhhdCAibG9va3MgbGlrZSIgdGhlIGVxdWl2aWxhbnQgVVRDIHZhbHVlLiBUbyBkbyB0aGlzIHdlIGFkZCB0aGUKICAgICAgLy8gdGltZXpvbmUgb2Zmc2V0IHRvIHRoZSBVVEMgZGF0ZS4KICAgICAgLy8gRG9uJ3QgdXNlIGluIGNhc2Ugb2YgZml4ZWR0egogICAgICBub3JtYWxpemVEYXRlVmFsdWU6IGZ1bmN0aW9uKHNjYWxlLCB2YWx1ZSwgZml4ZWR0eikgewogICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUodmFsdWUpOyAKICAgICAgICBpZiAoc2NhbGUgIT0gIm1pbnV0ZSIgJiYgc2NhbGUgIT0gImhvdXJseSIgJiYgc2NhbGUgIT0gInNlY29uZHMiICYmICFmaXhlZHR6KSB7CiAgICAgICAgICB2YXIgbG9jYWxBc1VUQyA9IGRhdGUuZ2V0VGltZSgpICsgKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKTsKICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShsb2NhbEFzVVRDKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0sCiAgICAgIAogICAgICAvLyBzYWZlbHkgZGV0ZWN0IHJlbmRlcmluZyBvbiBhIG1vYmlsZSBwaG9uZQogICAgICBpc01vYmlsZVBob25lOiBmdW5jdGlvbigpIHsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gISB3aW5kb3cubWF0Y2hNZWRpYSgib25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSIpLm1hdGNoZXM7CiAgICAgICAgfQogICAgICAgIGNhdGNoKGUpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgICAgCiAgICAgIAogICAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICBpZiAoZHlncmFwaCkKICAgICAgICAgIGR5Z3JhcGgucmVzaXplKCk7CiAgICAgIH0sCiAgICAgIAogICAgICAvLyBleHBvcnQgZHlncmFwaCBzbyBvdGhlciBjb2RlIGNhbiBnZXQgYSBob2xkIG9mIGl0CiAgICAgIGR5Z3JhcGg6IG51bGwKICAgIAogICAgfTsKICB9LAogIAogIC8vIHRyYWNrIGdyb3VwcyBnbG9iYWxseQogIGdyb3Vwczoge30KICAKfSk7Cgo="></script> <script src="data:application/javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CiAgbmFtZTogInBsb3RseSIsCiAgdHlwZTogIm91dHB1dCIsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICByZXR1cm4ge307CiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgIGlmIChpbnN0YW5jZS5hdXRvc2l6ZSkgewogICAgICB2YXIgd2lkdGggPSBpbnN0YW5jZS53aWR0aCB8fCB3aWR0aDsKICAgICAgdmFyIGhlaWdodCA9IGluc3RhbmNlLmhlaWdodCB8fCBoZWlnaHQ7CiAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwge3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgIH0KICB9LCAgCiAgCiAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgCiAgICAvLyBQbG90bHkucmVsYXlvdXQoKSBtdXRhdGVzIHRoZSBwbG90IGlucHV0IG9iamVjdCwgc28gbWFrZSBzdXJlIHRvIAogICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdXNlci1zdXBwbGllZCB3aWR0aC9oZWlnaHQgKmJlZm9yZSoKICAgIC8vIHdlIGNhbGwgUGxvdGx5LnBsb3QoKTsKICAgIHZhciBsYXkgPSB4LmxheW91dCB8fCB7fTsKICAgIGluc3RhbmNlLndpZHRoID0gbGF5LndpZHRoOwogICAgaW5zdGFuY2UuaGVpZ2h0ID0gbGF5LmhlaWdodDsKICAgIGluc3RhbmNlLmF1dG9zaXplID0gbGF5LmF1dG9zaXplIHx8IHRydWU7CiAgICAKICAgIC8qIAogICAgLyAnaW5mb3JtIHRoZSB3b3JsZCcgYWJvdXQgaGlnaGxpZ2h0aW5nIG9wdGlvbnMgdGhpcyBpcyBzbyBvdGhlcgogICAgLyBjcm9zc3RhbGsgbGlicmFyaWVzIGhhdmUgYSBjaGFuY2UgdG8gcmVzcG9uZCB0byBzcGVjaWFsIHNldHRpbmdzIAogICAgLyBzdWNoIGFzIHBlcnNpc3RlbnQgc2VsZWN0aW9uLiAKICAgIC8gQUZBSUssIGxlYWZsZXQgaXMgdGhlIG9ubHkgbGlicmFyeSB3aXRoIHN1Y2ggaW50ZXJncmF0aW9uCiAgICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvcHVsbC8zNDYvZmlsZXMjZGlmZi1hZDBjMmQ1MWNlNWZkZjhjOTBjNzM5NWIxMDJmNDI2NVIxNTQKICAgICovCiAgICB2YXIgY3RDb25maWcgPSBjcm9zc3RhbGsudmFyKCdwbG90bHlDcm9zc3RhbGtPcHRzJykuc2V0KHguaGlnaGxpZ2h0KTsKICAgICAgCiAgICBpZiAodHlwZW9mKHdpbmRvdykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIC8vIG1ha2Ugc3VyZSBwbG90cyBkb24ndCBnZXQgY3JlYXRlZCBvdXRzaWRlIHRoZSBuZXR3b3JrIChmb3Igb24tcHJlbSkKICAgICAgd2luZG93LlBMT1RMWUVOViA9IHdpbmRvdy5QTE9UTFlFTlYgfHwge307CiAgICAgIHdpbmRvdy5QTE9UTFlFTlYuQkFTRV9VUkwgPSB4LmJhc2VfdXJsOwogICAgICAKICAgICAgLy8gRW5hYmxlIHBlcnNpc3RlbnQgc2VsZWN0aW9uIHdoZW4gc2hpZnQga2V5IGlzIGRvd24KICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTgyODYxMy9jaGVjay1pZi1hLWtleS1pcy1kb3duCiAgICAgIHZhciBwZXJzaXN0T25TaGlmdCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIWUpIHdpbmRvdy5ldmVudDsKICAgICAgICBpZiAoZS5zaGlmdEtleSkgeyAKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnQgPSB0cnVlOyAKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnQgPSBmYWxzZTsgCiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50U2hpZnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIAogICAgICAvLyBPbmx5IHJlbGV2YW50IGlmIHdlIGhhdmVuJ3QgZm9yY2VkIHBlcnNpc3RlbnQgbW9kZSBhdCBjb21tYW5kIGxpbmUKICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgd2luZG93Lm9ubW91c2Vtb3ZlID0gcGVyc2lzdE9uU2hpZnQ7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgZ3JhcGhEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbC5pZCk7CiAgICAKICAgIC8vIFRPRE86IG1vdmUgdGhlIGNvbnRyb2wgcGFuZWwgaW5qZWN0aW9uIHN0cmF0ZWd5IGluc2lkZSBoZXJlLi4uCiAgICBIVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlcihmdW5jdGlvbigpIHsKICAgICAgCiAgICAgIC8vIGxvd2VyIHRoZSB6LWluZGV4IG9mIHRoZSBtb2RlYmFyIHRvIHByZXZlbnQgaXQgZnJvbSBoaWdoamFja2luZyBob3ZlcgogICAgICAvLyAoVE9ETzogZG8gdGhpcyB2aWEgQ1NTPykKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JvcGVuc2NpL3Bsb3RseS9pc3N1ZXMvOTU2CiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvcHJvcF9zdHlsZV96aW5kZXguYXNwCiAgICAgIHZhciBtb2RlYmFycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5qcy1wbG90bHktcGxvdCAucGxvdGx5IC5tb2RlYmFyIik7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZWJhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBtb2RlYmFyc1tpXS5zdHlsZS56SW5kZXggPSAxOwogICAgICB9CiAgICB9KTsKICAgICAgCiAgICAgIC8vIGluamVjdCBhICJjb250cm9sIHBhbmVsIiBob2xkaW5nIHNlbGVjdGl6ZS9keW5hbWljIGNvbG9yIHdpZGdldChzKQogICAgaWYgKHguc2VsZWN0aXplIHx8IHguaGlnaGxpZ2h0LmR5bmFtaWMgJiYgIWluc3RhbmNlLnBsb3RseSkgewogICAgICB2YXIgZmxleCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBmbGV4LmNsYXNzID0gInBsb3RseS1jcm9zc3RhbGstY29udHJvbC1wYW5lbCI7CiAgICAgIGZsZXguc3R5bGUgPSAiZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwIjsKICAgICAgCiAgICAgIC8vIGluamVjdCB0aGUgY29sb3VycGlja2VyIEhUTUwgY29udGFpbmVyIGludG8gdGhlIGZsZXhib3gKICAgICAgaWYgKHguaGlnaGxpZ2h0LmR5bmFtaWMpIHsKICAgICAgICB2YXIgcGlja2VyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgCiAgICAgICAgdmFyIHBpY2tlcklucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgICAgICBwaWNrZXJJbnB1dC5pZCA9IGVsLmlkICsgIi1jb2xvdXJwaWNrZXIiOwogICAgICAgIHBpY2tlcklucHV0LnBsYWNlaG9sZGVyID0gImFzZGFzZCI7CiAgICAgICAgCiAgICAgICAgdmFyIHBpY2tlckxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKICAgICAgICBwaWNrZXJMYWJlbC5mb3IgPSBwaWNrZXJJbnB1dC5pZDsKICAgICAgICBwaWNrZXJMYWJlbC5pbm5lckhUTUwgPSAiQnJ1c2ggY29sb3ImbmJzcDsmbmJzcDsiOwogICAgICAgIAogICAgICAgIHBpY2tlckRpdi5hcHBlbmRDaGlsZChwaWNrZXJMYWJlbCk7CiAgICAgICAgcGlja2VyRGl2LmFwcGVuZENoaWxkKHBpY2tlcklucHV0KTsKICAgICAgICBmbGV4LmFwcGVuZENoaWxkKHBpY2tlckRpdik7CiAgICAgIH0KICAgICAgCiAgICAgIC8vIGluamVjdCBzZWxlY3RpemUgSFRNTCBjb250YWluZXJzIChvbmUgZm9yIGV2ZXJ5IGNyb3NzdGFsayBncm91cCkKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIGlkcyA9IE9iamVjdC5rZXlzKHguc2VsZWN0aXplKTsKICAgICAgICAKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgY29udGFpbmVyLmlkID0gaWRzW2ldOwogICAgICAgICAgY29udGFpbmVyLnN0eWxlID0gIndpZHRoOiA4MCU7IGhlaWdodDogMTAlIjsKICAgICAgICAgIGNvbnRhaW5lci5jbGFzcyA9ICJmb3JtLWdyb3VwIGNyb3NzdGFsay1pbnB1dC1wbG90bHktaGlnaGxpZ2h0IjsKICAgICAgICAgIAogICAgICAgICAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKICAgICAgICAgIGxhYmVsLmZvciA9IGlkc1tpXTsKICAgICAgICAgIGxhYmVsLmlubmVySFRNTCA9IHguc2VsZWN0aXplW2lkc1tpXV0uZ3JvdXA7CiAgICAgICAgICBsYWJlbC5jbGFzcyA9ICJjb250cm9sLWxhYmVsIjsKICAgICAgICAgIAogICAgICAgICAgdmFyIHNlbGVjdERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwogICAgICAgICAgc2VsZWN0Lm11bHRpcGxlID0gdHJ1ZTsKICAgICAgICAgIAogICAgICAgICAgc2VsZWN0RGl2LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobGFiZWwpOwogICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGVjdERpdik7CiAgICAgICAgICBmbGV4LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICAvLyBmaW5hbGx5LCBpbnNlcnQgdGhlIGZsZXhib3ggaW5zaWRlIHRoZSBodG1sd2lkZ2V0IGNvbnRhaW5lciwKICAgICAgLy8gYnV0IGJlZm9yZSB0aGUgcGxvdGx5IGdyYXBoIGRpdgogICAgICBncmFwaERpdi5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShmbGV4LCBncmFwaERpdik7CiAgICAgIAogICAgICBpZiAoeC5oaWdobGlnaHQuZHluYW1pYykgewogICAgICAgIHZhciBwaWNrZXIgPSAkKCIjIiArIHBpY2tlcklucHV0LmlkKTsKICAgICAgICB2YXIgY29sb3JzID0geC5oaWdobGlnaHQuY29sb3IgfHwgW107CiAgICAgICAgLy8gVE9ETzogbGV0IHVzZXJzIHNwZWNpZnkgb3B0aW9ucz8KICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIHZhbHVlOiBjb2xvcnNbMF0sCiAgICAgICAgICBzaG93Q29sb3VyOiAiYm90aCIsCiAgICAgICAgICBwYWxldHRlOiAibGltaXRlZCIsCiAgICAgICAgICBhbGxvd2VkQ29sczogY29sb3JzLmpvaW4oIiAiKSwKICAgICAgICAgIHdpZHRoOiAiMjAlIiwKICAgICAgICAgIGhlaWdodDogIjEwJSIKICAgICAgICB9OwogICAgICAgIHBpY2tlci5jb2xvdXJwaWNrZXIoe2NoYW5nZURlbGF5OiAwfSk7CiAgICAgICAgcGlja2VyLmNvbG91cnBpY2tlcigic2V0dGluZ3MiLCBvcHRzKTsKICAgICAgICBwaWNrZXIuY29sb3VycGlja2VyKCJ2YWx1ZSIsIG9wdHMudmFsdWUpOwogICAgICAgIC8vIGluZm9ybSBjcm9zc3RhbGsgYWJvdXQgYSBjaGFuZ2UgaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGNvbG91cgogICAgICAgIHZhciBncnBzID0geC5oaWdobGlnaHQuY3RHcm91cHMgfHwgW107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncnBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBjcm9zc3RhbGsuZ3JvdXAoZ3Jwc1tpXSkudmFyKCdwbG90bHlTZWxlY3Rpb25Db2xvdXInKQogICAgICAgICAgICAuc2V0KHBpY2tlci5jb2xvdXJwaWNrZXIoJ3ZhbHVlJykpOwogICAgICAgIH0KICAgICAgICBwaWNrZXIub24oImNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncnBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNyb3NzdGFsay5ncm91cChncnBzW2ldKS52YXIoJ3Bsb3RseVNlbGVjdGlvbkNvbG91cicpCiAgICAgICAgICAgICAgLnNldChwaWNrZXIuY29sb3VycGlja2VyKCd2YWx1ZScpKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgCiAgICAvLyBpZiBubyBwbG90IGV4aXN0cyB5ZXQsIGNyZWF0ZSBvbmUgd2l0aCBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbgogICAgaWYgKCFpbnN0YW5jZS5wbG90bHkpIHsKICAgICAgCiAgICAgIHZhciBwbG90ID0gUGxvdGx5LnBsb3QoZ3JhcGhEaXYsIHgpOwogICAgICBpbnN0YW5jZS5wbG90bHkgPSB0cnVlOwogICAgICAKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICAvLyB0aGlzIGlzIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gUGxvdGx5Lm5ld1Bsb3QoKSwgYnV0IGF2b2lkcyBjcmVhdGluZyAKICAgICAgLy8gYSBuZXcgd2ViZ2wgY29udGV4dAogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9ibG9iLzJiMjRmOWRlZjkwMTgzMWU2MTI4MjA3NmNmM2Y4MzU1OThkNTZmMGUvc3JjL3Bsb3RfYXBpL3Bsb3RfYXBpLmpzI0w1MzEtTDUzMgoKICAgICAgLy8gVE9ETzogcmVzdG9yZSBjcm9zc3RhbGsgc2VsZWN0aW9ucz8KICAgICAgUGxvdGx5LnB1cmdlKGdyYXBoRGl2KTsKICAgICAgLy8gVE9ETzogd2h5IGlzIHRoaXMgbmVjZXNzYXJ5IHRvIGdldCBjcm9zc3RhbGsgd29ya2luZz8KICAgICAgZ3JhcGhEaXYuZGF0YSA9IHVuZGVmaW5lZDsKICAgICAgZ3JhcGhEaXYubGF5b3V0ID0gdW5kZWZpbmVkOwogICAgICB2YXIgcGxvdCA9IFBsb3RseS5wbG90KGdyYXBoRGl2LCB4KTsKICAgIH0KICAgIAogICAgLy8gVHJpZ2dlciBwbG90bHkuanMgY2FsbHMgZGVmaW5lZCB2aWEgYHBsb3RseVByb3h5KClgCiAgICBwbG90LnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHsKICAgICAgICBTaGlueS5hZGRDdXN0b21NZXNzYWdlSGFuZGxlcigicGxvdGx5LWNhbGxzIiwgZnVuY3Rpb24obXNnKSB7CiAgICAgICAgICB2YXIgZ2QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtc2cuaWQpOwogICAgICAgICAgaWYgKCFnZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGZpbmQgcGxvdGx5IGdyYXBoIHdpdGggaWQ6ICIgKyBtc2cuaWQpOwogICAgICAgICAgfQogICAgICAgICAgLy8gVGhpcyBpc24ndCBhbiBvZmZpY2lhbCBwbG90bHkuanMgbWV0aG9kLCBidXQgaXQncyB0aGUgb25seSBjdXJyZW50IHdheSB0byAKICAgICAgICAgIC8vIGNoYW5nZSBqdXN0IHRoZSBjb25maWd1cmF0aW9uIG9mIGEgcGxvdCAKICAgICAgICAgIC8vIGh0dHBzOi8vY29tbXVuaXR5LnBsb3QubHkvdC91cGRhdGUtY29uZmlnLWZ1bmN0aW9uLzkwNTcKICAgICAgICAgIGlmIChtc2cubWV0aG9kID09ICJyZWNvbmZpZyIpIHsKICAgICAgICAgICAgUGxvdGx5LnJlYWN0KGdkLCBnZC5kYXRhLCBnZC5sYXlvdXQsIG1zZy5hcmdzKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFQbG90bHlbbXNnLm1ldGhvZF0pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1ldGhvZCAiICsgbXNnLm1ldGhvZCk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYXJncyA9IFtnZF0uY29uY2F0KG1zZy5hcmdzKTsKICAgICAgICAgIFBsb3RseVttc2cubWV0aG9kXS5hcHBseShudWxsLCBhcmdzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICAKICAgICAgLy8gcGxvdGx5J3MgbWFwYm94IEFQSSBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHNldHRpbmcgYm91bmRpbmcgYm94ZXMKICAgICAgLy8gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maXRib3VuZHMvCiAgICAgIC8vIHNvIHdlIGRvIHRoaXMgbWFudWFsbHkuLi4KICAgICAgLy8gVE9ETzogbWFrZSBzdXJlIHRoaXMgdHJpZ2dlcnMgb24gYSByZWRyYXcgYW5kIHJlbGF5b3V0IGFzIHdlbGwgYXMgb24gaW5pdGlhbCBkcmF3CiAgICAgIHZhciBtYXBib3hJRHMgPSBncmFwaERpdi5fZnVsbExheW91dC5fc3VicGxvdHMubWFwYm94IHx8IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcGJveElEcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBpZCA9IG1hcGJveElEc1tpXTsKICAgICAgICB2YXIgbWFwT3B0cyA9IHgubGF5b3V0W2lkXSB8fCB7fTsKICAgICAgICB2YXIgYXJncyA9IG1hcE9wdHMuX2ZpdEJvdW5kcyB8fCB7fTsKICAgICAgICBpZiAoIWFyZ3MpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB2YXIgbWFwT2JqID0gZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbaWRdLl9zdWJwbG90Lm1hcDsKICAgICAgICBtYXBPYmouZml0Qm91bmRzKGFyZ3MuYm91bmRzLCBhcmdzLm9wdGlvbnMpOwogICAgICB9CiAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIEF0dGFjaCBhdHRyaWJ1dGVzIChlLmcuLCAia2V5IiwgInoiKSB0byBwbG90bHkgZXZlbnQgZGF0YQogICAgZnVuY3Rpb24gZXZlbnREYXRhV2l0aEtleShldmVudERhdGEpIHsKICAgICAgaWYgKGV2ZW50RGF0YSA9PT0gdW5kZWZpbmVkIHx8ICFldmVudERhdGEuaGFzT3duUHJvcGVydHkoInBvaW50cyIpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIGV2ZW50RGF0YS5wb2ludHMubWFwKGZ1bmN0aW9uKHB0KSB7CiAgICAgICAgdmFyIG9iaiA9IHsKICAgICAgICAgIGN1cnZlTnVtYmVyOiBwdC5jdXJ2ZU51bWJlciwgCiAgICAgICAgICBwb2ludE51bWJlcjogcHQucG9pbnROdW1iZXIsIAogICAgICAgICAgeDogcHQueCwKICAgICAgICAgIHk6IHB0LnkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIElmICd6JyBpcyByZXBvcnRlZCB3aXRoIHRoZSBldmVudCBkYXRhLCB0aGVuIHVzZSBpdCEKICAgICAgICBpZiAocHQuaGFzT3duUHJvcGVydHkoInoiKSkgewogICAgICAgICAgb2JqLnogPSBwdC56OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAocHQuaGFzT3duUHJvcGVydHkoImN1c3RvbWRhdGEiKSkgewogICAgICAgICAgb2JqLmN1c3RvbWRhdGEgPSBwdC5jdXN0b21kYXRhOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiAKICAgICAgICAgIFRMO0RSOiAoSSB0aGluaykgd2UgaGF2ZSB0byBzZWxlY3QgdGhlIGdyYXBoIGRpdiAoYWdhaW4pIHRvIGF0dGFjaCBrZXlzLi4uCiAgICAgICAgICAKICAgICAgICAgIFdoeT8gUmVtZW1iZXIgdGhhdCBjcm9zc3RhbGsgd2lsbCBkeW5hbWljYWxseSBhZGQvZGVsZXRlIHRyYWNlcyAKICAgICAgICAgIChzZWUgdHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24oKSBiZWxvdykKICAgICAgICAgIEZvciB0aGlzIHJlYXNvbiwgd2UgY2FuJ3Qgc2ltcGx5IGdyYWIga2V5cyBmcm9tIHguZGF0YSAobGlrZSB3ZSBkaWQgcHJldmlvdXNseSkKICAgICAgICAgIE1vcmVvdmVyLCB3ZSBjYW4ndCB1c2UgX2Z1bGxEYXRhLCBzaW5jZSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSAKICAgICAgICAgIHVub2ZmaWNpYWwgYXR0cmlidXRlcy4gSXQncyB0cnVlIHRoYXQgY2xpY2svaG92ZXIgZXZlbnRzIGZpcmUgd2l0aCAKICAgICAgICAgIHB0LmRhdGEsIGJ1dCBkcmFnIGV2ZW50cyBkb24ndC4uLgogICAgICAgICovCiAgICAgICAgdmFyIGdkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwuaWQpOwogICAgICAgIHZhciB0cmFjZSA9IGdkLmRhdGFbcHQuY3VydmVOdW1iZXJdOwogICAgICAgIAogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB2YXIgYXR0cnNUb0F0dGFjaCA9IFsia2V5Il07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIHNpbXBsZSBrZXlzIGZpcmUgdGhlIHdob2xlIGtleQogICAgICAgICAgb2JqLmtleSA9IHRyYWNlLmtleTsKICAgICAgICAgIHZhciBhdHRyc1RvQXR0YWNoID0gW107CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnNUb0F0dGFjaC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGF0dHIgPSB0cmFjZVthdHRyc1RvQXR0YWNoW2ldXTsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHIpKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcHQucG9pbnROdW1iZXIgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgb2JqW2F0dHJzVG9BdHRhY2hbaV1dID0gYXR0cltwdC5wb2ludE51bWJlcl07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwdC5wb2ludE51bWJlcikpIHsKICAgICAgICAgICAgICBvYmpbYXR0cnNUb0F0dGFjaFtpXV0gPSBhdHRyW3B0LnBvaW50TnVtYmVyWzBdXVtwdC5wb2ludE51bWJlclsxXV07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwdC5wb2ludE51bWJlcnMpKSB7CiAgICAgICAgICAgICAgb2JqW2F0dHJzVG9BdHRhY2hbaV1dID0gcHQucG9pbnROdW1iZXJzLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIGF0dHJbaWR4XTsgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iajsKICAgICAgfSk7CiAgICB9CiAgICAKICAgIAogICAgdmFyIGxlZ2VuZEV2ZW50RGF0YSA9IGZ1bmN0aW9uKGQpIHsKICAgICAgLy8gaWYgbGVnZW5kZ3JvdXAgaXMgbm90IHJlbGV2YW50IGp1c3QgcmV0dXJuIHRoZSB0cmFjZQogICAgICB2YXIgdHJhY2UgPSBkLmRhdGFbZC5jdXJ2ZU51bWJlcl07CiAgICAgIGlmICghdHJhY2UubGVnZW5kZ3JvdXApIHJldHVybiB0cmFjZTsKICAgICAgCiAgICAgIC8vIGlmIGxlZ2VuZGdyb3VwIHdhcyBzcGVjaWZpZWQsIHJldHVybiBhbGwgdHJhY2VzIHRoYXQgbWF0Y2ggdGhlIGdyb3VwCiAgICAgIHZhciBsZWdlbmRncnBzID0gZC5kYXRhLm1hcChmdW5jdGlvbih0cmFjZSl7IHJldHVybiB0cmFjZS5sZWdlbmRncm91cDsgfSk7CiAgICAgIHZhciB0cmFjZXMgPSBbXTsKICAgICAgZm9yIChpID0gMDsgaSA8IGxlZ2VuZGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAobGVnZW5kZ3Jwc1tpXSA9PSB0cmFjZS5sZWdlbmRncm91cCkgewogICAgICAgICAgdHJhY2VzLnB1c2goZC5kYXRhW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiB0cmFjZXM7CiAgICB9OwoKICAgIAogICAgLy8gc2VuZCB1c2VyIGlucHV0IGV2ZW50IGRhdGEgdG8gc2hpbnkKICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUgJiYgU2hpbnkuc2V0SW5wdXRWYWx1ZSkgewogICAgICAKICAgICAgLy8gU29tZSBldmVudHMgY2xlYXIgb3RoZXIgaW5wdXQgdmFsdWVzCiAgICAgIC8vIFRPRE86IGFsd2F5cyByZWdpc3RlciB0aGVzZT8KICAgICAgdmFyIGV2ZW50Q2xlYXJNYXAgPSB7CiAgICAgICAgcGxvdGx5X2Rlc2VsZWN0OiBbInBsb3RseV9zZWxlY3RlZCIsICJwbG90bHlfc2VsZWN0aW5nIiwgInBsb3RseV9icnVzaGVkIiwgInBsb3RseV9icnVzaGluZyIsICJwbG90bHlfY2xpY2siXSwKICAgICAgICBwbG90bHlfdW5ob3ZlcjogWyJwbG90bHlfaG92ZXIiXSwKICAgICAgICBwbG90bHlfZG91YmxlY2xpY2s6IFsicGxvdGx5X2NsaWNrIl0KICAgICAgfTsKICAgIAogICAgICBPYmplY3Qua2V5cyhldmVudENsZWFyTWFwKS5tYXAoZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAgZ3JhcGhEaXYub24oZXZ0LCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBpbnB1dHNUb0NsZWFyID0gZXZlbnRDbGVhck1hcFtldnRdOwogICAgICAgICAgaW5wdXRzVG9DbGVhci5tYXAoZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShpbnB1dCArICItIiArIHguc291cmNlLCBudWxsLCB7cHJpb3JpdHk6ICJldmVudCJ9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgCiAgICAgIHZhciBldmVudERhdGFGdW5jdGlvbk1hcCA9IHsKICAgICAgICBwbG90bHlfY2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X3N1bmJ1cnN0Y2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X2hvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIHBsb3RseV91bmhvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIC8vIElmICdwbG90bHlfc2VsZWN0ZWQnIGhhcyBhbHJlYWR5IGJlZW4gZmlyZWQsIGFuZCB5b3UgY2xpY2sKICAgICAgICAvLyBvbiB0aGUgcGxvdCBhZnRlcndhcmRzLCB0aGlzIGV2ZW50IGZpcmVzIGB1bmRlZmluZWRgPyE/CiAgICAgICAgLy8gVGhhdCBtaWdodCBiZSBjb25zaWRlcmVkIGEgcGxvdGx5LmpzIGJ1ZywgYnV0IGl0IGRvZXNuJ3QgbWFrZSAKICAgICAgICAvLyBzZW5zZSBmb3IgdGhpcyBpbnB1dCBjaGFuZ2UgdG8gb2NjdXIgaWYgYGRgIGlzIGZhbHN5IGJlY2F1c2UsCiAgICAgICAgLy8gZXZlbiBpbiB0aGUgZW1wdHkgc2VsZWN0aW9uIGNhc2UsIGBkYCBpcyB0cnV0aHkgKGFuIG9iamVjdCksCiAgICAgICAgLy8gYW5kIHRoZSAncGxvdGx5X2Rlc2VsZWN0JyBldmVudCB3aWxsIHJlc2V0IHRoaXMgaW5wdXQKICAgICAgICBwbG90bHlfc2VsZWN0ZWQ6IGZ1bmN0aW9uKGQpIHsgaWYgKGQpIHsgcmV0dXJuIGV2ZW50RGF0YVdpdGhLZXkoZCk7IH0gfSwKICAgICAgICBwbG90bHlfc2VsZWN0aW5nOiBmdW5jdGlvbihkKSB7IGlmIChkKSB7IHJldHVybiBldmVudERhdGFXaXRoS2V5KGQpOyB9IH0sCiAgICAgICAgcGxvdGx5X2JydXNoZWQ6IGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIGlmIChkKSB7IHJldHVybiBkLnJhbmdlID8gZC5yYW5nZSA6IGQubGFzc29Qb2ludHM7IH0KICAgICAgICB9LAogICAgICAgIHBsb3RseV9icnVzaGluZzogZnVuY3Rpb24oZCkgewogICAgICAgICAgaWYgKGQpIHsgcmV0dXJuIGQucmFuZ2UgPyBkLnJhbmdlIDogZC5sYXNzb1BvaW50czsgfQogICAgICAgIH0sCiAgICAgICAgcGxvdGx5X2xlZ2VuZGNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2xlZ2VuZGRvdWJsZWNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2NsaWNrYW5ub3RhdGlvbjogZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5mdWxsQW5ub3RhdGlvbiB9CiAgICAgIH07CiAgICAgIAogICAgICB2YXIgcmVnaXN0ZXJTaGlueVZhbHVlID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICB2YXIgZXZlbnREYXRhUHJlUHJvY2Vzc29yID0gZXZlbnREYXRhRnVuY3Rpb25NYXBbZXZlbnRdIHx8IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQgPyBkIDogZWwuaWQgfTsKICAgICAgICAvLyBzb21lIGV2ZW50cyBhcmUgdW5pcXVlIHRvIHRoZSBSIHBhY2thZ2UKICAgICAgICB2YXIgcGxvdGx5SlNldmVudCA9IChldmVudCA9PSAicGxvdGx5X2JydXNoZWQiKSA/ICJwbG90bHlfc2VsZWN0ZWQiIDogKGV2ZW50ID09ICJwbG90bHlfYnJ1c2hpbmciKSA/ICJwbG90bHlfc2VsZWN0aW5nIiA6IGV2ZW50OwogICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBldmVudAogICAgICAgIGdyYXBoRGl2Lm9uKHBsb3RseUpTZXZlbnQsIGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIFNoaW55LnNldElucHV0VmFsdWUoCiAgICAgICAgICAgIGV2ZW50ICsgIi0iICsgeC5zb3VyY2UsCiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50RGF0YVByZVByb2Nlc3NvcihkKSksCiAgICAgICAgICAgIHtwcmlvcml0eTogImV2ZW50In0KICAgICAgICAgICk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIAogICAgICB2YXIgc2hpbnlFdmVudHMgPSB4LnNoaW55RXZlbnRzIHx8IFtdOwogICAgICBzaGlueUV2ZW50cy5tYXAocmVnaXN0ZXJTaGlueVZhbHVlKTsKICAgIH0KICAgIAogICAgLy8gR2l2ZW4gYW4gYXJyYXkgb2Yge2N1cnZlTnVtYmVyOiB4LCBwb2ludE51bWJlcjogeX0gb2JqZWN0cywKICAgIC8vIHJldHVybiBhIGhhc2ggb2YgewogICAgLy8gICBzZXQxOiB7dmFsdWU6IFtrZXkxLCBrZXkyLCAuLi5dLCBfaXNTaW1wbGVLZXk6IGZhbHNlfSwgCiAgICAvLyAgIHNldDI6IHt2YWx1ZTogW2tleTMsIGtleTQsIC4uLl0sIF9pc1NpbXBsZUtleTogZmFsc2V9CiAgICAvLyB9CiAgICBmdW5jdGlvbiBwb2ludHNUb0tleXMocG9pbnRzKSB7CiAgICAgIHZhciBrZXlzQnlTZXQgPSB7fTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAKICAgICAgICB2YXIgdHJhY2UgPSBncmFwaERpdi5kYXRhW3BvaW50c1tpXS5jdXJ2ZU51bWJlcl07CiAgICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgIXRyYWNlLnNldCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHNldCBkZWZhdWx0cyBmb3IgdGhpcyBrZXlTZXQKICAgICAgICAvLyBub3RlIHRoYXQgd2UgZG9uJ3QgdHJhY2sgdGhlIG5lc3RlZCBwcm9wZXJ0eSAoeWV0KSBzaW5jZSB3ZSBhbHdheXMgCiAgICAgICAgLy8gZW1pdCB0aGUgdW5pb24gLS0gaHR0cDovL2Nwc2lldmVydC5naXRodWIuaW8vdGFsa3MvMjAxNjEyMTJiLyMyMQogICAgICAgIGtleXNCeVNldFt0cmFjZS5zZXRdID0ga2V5c0J5U2V0W3RyYWNlLnNldF0gfHwgewogICAgICAgICAgdmFsdWU6IFtdLAogICAgICAgICAgX2lzU2ltcGxlS2V5OiB0cmFjZS5faXNTaW1wbGVLZXkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIFVzZSBwb2ludE51bWJlciBieSBkZWZhdWx0LCBidXQgYWdncmVnYXRlZCB0cmFjZXMgc2hvdWxkIGVtaXQgcG9pbnROdW1iZXJzCiAgICAgICAgdmFyIHB0TnVtID0gcG9pbnRzW2ldLnBvaW50TnVtYmVyOwogICAgICAgIHZhciBoYXNQdE51bSA9IHR5cGVvZiBwdE51bSA9PT0gIm51bWJlciI7CiAgICAgICAgdmFyIHB0TnVtID0gaGFzUHROdW0gPyBwdE51bSA6IHBvaW50c1tpXS5wb2ludE51bWJlcnM7CiAgICAgICAgCiAgICAgICAgLy8gc2VsZWN0aW5nIGEgcG9pbnQgb2YgYSAic2ltcGxlIiB0cmFjZSBtZWFuczogc2VsZWN0IHRoZSAKICAgICAgICAvLyBlbnRpcmUga2V5IGF0dGFjaGVkIHRvIHRoaXMgdHJhY2UsIHdoaWNoIGlzIHVzZWZ1bCBmb3IsCiAgICAgICAgLy8gc2F5IGNsaWNraW5nIG9uIGEgZml0dGVkIGxpbmUgdG8gc2VsZWN0IGNvcnJlc3BvbmRpbmcgb2JzZXJ2YXRpb25zIAogICAgICAgIHZhciBrZXkgPSB0cmFjZS5faXNTaW1wbGVLZXkgPyB0cmFjZS5rZXkgOiBBcnJheS5pc0FycmF5KHB0TnVtKSA/IHB0TnVtLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIHRyYWNlLmtleVtpZHhdOyB9KSA6IHRyYWNlLmtleVtwdE51bV07CiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDg2NTAyNS9tZXJnZS1mbGF0dGVuLWFuLWFycmF5LW9mLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgdmFyIGtleUZsYXQgPSB0cmFjZS5faXNOZXN0ZWRLZXkgPyBbXS5jb25jYXQuYXBwbHkoW10sIGtleSkgOiBrZXk7CiAgICAgICAgCiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHRvIG9ubHkgYWRkIG5ldyB2YWx1ZXM/CiAgICAgICAga2V5c0J5U2V0W3RyYWNlLnNldF0udmFsdWUgPSBrZXlzQnlTZXRbdHJhY2Uuc2V0XS52YWx1ZS5jb25jYXQoa2V5RmxhdCk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBrZXlzQnlTZXQ7CiAgICB9CiAgICAKICAgIAogICAgeC5oaWdobGlnaHQuY29sb3IgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgIC8vIG1ha2Ugc3VyZSBoaWdobGlnaHQgY29sb3IgaXMgYW4gYXJyYXkKICAgIGlmICghQXJyYXkuaXNBcnJheSh4LmhpZ2hsaWdodC5jb2xvcikpIHsKICAgICAgeC5oaWdobGlnaHQuY29sb3IgPSBbeC5oaWdobGlnaHQuY29sb3JdOwogICAgfQoKICAgIHZhciB0cmFjZU1hbmFnZXIgPSBuZXcgVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCB4LmhpZ2hsaWdodCk7CgogICAgLy8gR2F0aGVyIGFsbCAqdW5pcXVlKiBzZXRzLgogICAgdmFyIGFsbFNldHMgPSBbXTsKICAgIGZvciAodmFyIGN1cnZlSWR4ID0gMDsgY3VydmVJZHggPCB4LmRhdGEubGVuZ3RoOyBjdXJ2ZUlkeCsrKSB7CiAgICAgIHZhciBuZXdTZXQgPSB4LmRhdGFbY3VydmVJZHhdLnNldDsKICAgICAgaWYgKG5ld1NldCkgewogICAgICAgIGlmIChhbGxTZXRzLmluZGV4T2YobmV3U2V0KSA9PT0gLTEpIHsKICAgICAgICAgIGFsbFNldHMucHVzaChuZXdTZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVycyBmb3IgYWxsIHNldHMKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsU2V0cy5sZW5ndGg7IGkrKykgewogICAgICAKICAgICAgdmFyIHNldCA9IGFsbFNldHNbaV07CiAgICAgIHZhciBzZWxlY3Rpb24gPSBuZXcgY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShzZXQpOwogICAgICB2YXIgZmlsdGVyID0gbmV3IGNyb3NzdGFsay5GaWx0ZXJIYW5kbGUoc2V0KTsKICAgICAgCiAgICAgIHZhciBmaWx0ZXJDaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgcmVtb3ZlQnJ1c2goZWwpOwogICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVGaWx0ZXIoc2V0LCBlLnZhbHVlKTsKICAgICAgfTsKICAgICAgZmlsdGVyLm9uKCJjaGFuZ2UiLCBmaWx0ZXJDaGFuZ2UpOwogICAgICAKICAgICAgCiAgICAgIHZhciBzZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgCiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgJ3Bsb3RseV9zZWxlY3RlZCcgbm93IGZpcmluZyBwcmV2aW91c2x5IHNlbGVjdGVkCiAgICAgICAgLy8gcG9pbnRzIChpbiBhZGRpdGlvbiB0byBuZXcgb25lcykgd2hlbiBob2xkaW5nIHNoaWZ0IGtleS4gSW4gb3VyIGNhc2UsCiAgICAgICAgLy8gd2UganVzdCB3YW50IHRoZSBuZXcga2V5cyAKICAgICAgICBpZiAoeC5oaWdobGlnaHQub24gPT09ICJwbG90bHlfc2VsZWN0ZWQiICYmIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCkgewogICAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE4NzUxOC9ob3ctdG8tZ2V0LXRoZS1kaWZmZXJlbmNlLWJldHdlZW4tdHdvLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZGlmZiA9IGZ1bmN0aW9uKGEpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaSkge3JldHVybiBhLmluZGV4T2YoaSkgPCAwO30pOwogICAgICAgICAgfTsKICAgICAgICAgIGUudmFsdWUgPSBlLnZhbHVlLmRpZmYoZS5vbGRWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGFycmF5IG9mICJldmVudCBvYmplY3RzIiB0cmFja2luZyB0aGUgc2VsZWN0aW9uIGhpc3RvcnkKICAgICAgICAvLyB0aGlzIGlzIHVzZWQgdG8gYXZvaWQgYWRkaW5nIHJlZHVuZGFudCBzZWxlY3Rpb25zCiAgICAgICAgdmFyIHNlbGVjdGlvbkhpc3RvcnkgPSBjcm9zc3RhbGsudmFyKCJwbG90bHlTZWxlY3Rpb25IaXN0b3J5IikuZ2V0KCkgfHwgW107CiAgICAgICAgCiAgICAgICAgLy8gQ29uc3RydWN0IGFuIGV2ZW50IG9iamVjdCAiZGVmaW5pbmciIHRoZSBjdXJyZW50IGV2ZW50LiAKICAgICAgICB2YXIgZXZlbnQgPSB7CiAgICAgICAgICByZWNlaXZlcklEOiB0cmFjZU1hbmFnZXIuZ2QuaWQsCiAgICAgICAgICBwbG90bHlTZWxlY3Rpb25Db2xvdXI6IGNyb3NzdGFsay5ncm91cChzZXQpLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkKICAgICAgICB9OwogICAgICAgIGV2ZW50W3NldF0gPSBlLnZhbHVlOwogICAgICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgc21hcnRlciB3YXkgdG8gY2hlY2sgb2JqZWN0IGVxdWFsaXR5PwogICAgICAgIGlmIChzZWxlY3Rpb25IaXN0b3J5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhciBldiA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgc2VsID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0aW9uSGlzdG9yeVtpXSk7CiAgICAgICAgICAgIGlmIChzZWwgPT0gZXYpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYWNjdW11bGF0ZSBoaXN0b3J5IGZvciBwZXJzaXN0ZW50IHNlbGVjdGlvbgogICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgICAgc2VsZWN0aW9uSGlzdG9yeSA9IFtldmVudF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbGVjdGlvbkhpc3RvcnkucHVzaChldmVudCk7CiAgICAgICAgfQogICAgICAgIGNyb3NzdGFsay52YXIoInBsb3RseVNlbGVjdGlvbkhpc3RvcnkiKS5zZXQoc2VsZWN0aW9uSGlzdG9yeSk7CiAgICAgICAgCiAgICAgICAgLy8gZG8gdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0cmFjZXMsIGZyYW1lcywgYW5kIHRoZSBzZWxlY3RpemUgd2lkZ2V0CiAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIGUudmFsdWUpOwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3RpemUvc2VsZWN0aXplLmpzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpLm1kI21ldGhvZHNfaXRlbXMKICAgICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCB8fCBlLnZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGVjdGl6ZS5jbGVhcih0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGVjdGl6ZS5hZGRJdGVtcyhlLnZhbHVlLCB0cnVlKTsKICAgICAgICAgIHNlbGVjdGl6ZS5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZWxlY3Rpb24ub24oImNoYW5nZSIsIHNlbGVjdGlvbkNoYW5nZSk7CiAgICAgIAogICAgICAvLyBTZXQgYSBjcm9zc3RhbGsgdmFyaWFibGUgc2VsZWN0aW9uIHZhbHVlLCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZQogICAgICB2YXIgdHVybk9uID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChlKSB7CiAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0gcG9pbnRzVG9LZXlzKGUucG9pbnRzKTsKICAgICAgICAgIC8vIEtleXMgYXJlIGdyb3VwIG5hbWVzLCB2YWx1ZXMgYXJlIGFycmF5IG9mIHNlbGVjdGVkIGtleXMgZnJvbSBncm91cC4KICAgICAgICAgIGZvciAodmFyIHNldCBpbiBzZWxlY3RlZEtleXMpIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkS2V5cy5oYXNPd25Qcm9wZXJ0eShzZXQpKSB7CiAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3RlZEtleXNbc2V0XS52YWx1ZSwge3NlbmRlcjogZWx9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKHguaGlnaGxpZ2h0LmRlYm91bmNlID4gMCkgewogICAgICAgIHR1cm5PbiA9IGRlYm91bmNlKHR1cm5PbiwgeC5oaWdobGlnaHQuZGVib3VuY2UpOwogICAgICB9CiAgICAgIGdyYXBoRGl2Lm9uKHguaGlnaGxpZ2h0Lm9uLCB0dXJuT24pOwogICAgICAKICAgICAgZ3JhcGhEaXYub24oeC5oaWdobGlnaHQub2ZmLCBmdW5jdGlvbiB0dXJuT2ZmKGUpIHsKICAgICAgICAvLyByZW1vdmUgYW55IHZpc3VhbCBjbHVlcwogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAvLyByZW1vdmUgYW55IHNlbGVjdGlvbiBoaXN0b3J5CiAgICAgICAgY3Jvc3N0YWxrLnZhcigicGxvdGx5U2VsZWN0aW9uSGlzdG9yeSIpLnNldChudWxsKTsKICAgICAgICAvLyB0cmlnZ2VyIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiBzZWxlY3Rpb24gdHJhY2VzCiAgICAgICAgc2VsZWN0aW9uLnNldChudWxsLCB7c2VuZGVyOiBlbH0pOwogICAgICB9KTsKICAgICAgICAgIAogICAgICAvLyByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBzZWxlY3RpemUgc28gdGhhdCB0aGVyZSBpcyBiaS1kaXJlY3Rpb25hbAogICAgICAvLyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHdpZGdldCBhbmQgZGlyZWN0IG1hbmlwdWxhdGlvbiBldmVudHMKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIHNlbGVjdGl6ZUlEID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpW2ldOwogICAgICAgIHZhciBpdGVtcyA9IHguc2VsZWN0aXplW3NlbGVjdGl6ZUlEXS5pdGVtczsKICAgICAgICB2YXIgZmlyc3QgPSBbe3ZhbHVlOiAiIiwgbGFiZWw6ICIoQWxsKSJ9XTsKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIG9wdGlvbnM6IGZpcnN0LmNvbmNhdChpdGVtcyksCiAgICAgICAgICBzZWFyY2hGaWVsZDogImxhYmVsIiwKICAgICAgICAgIHZhbHVlRmllbGQ6ICJ2YWx1ZSIsCiAgICAgICAgICBsYWJlbEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgbWF4SXRlbXM6IDUwCiAgICAgICAgfTsKICAgICAgICB2YXIgc2VsZWN0ID0gJCgiIyIgKyBzZWxlY3RpemVJRCkuZmluZCgic2VsZWN0IilbMF07CiAgICAgICAgdmFyIHNlbGVjdGl6ZSA9ICQoc2VsZWN0KS5zZWxlY3RpemUob3B0cylbMF0uc2VsZWN0aXplOwogICAgICAgIC8vIE5PVEU6IHRoaXMgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gKmRpcmVjdGx5KiBhbHRlcmluZyAKICAgICAgICAvLyBkcm9wZG93biBpdGVtcwogICAgICAgIHNlbGVjdGl6ZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgY3VycmVudEl0ZW1zID0gdHJhY2VNYW5hZ2VyLmdyb3VwU2VsZWN0aW9uc1tzZXRdIHx8IFtdOwogICAgICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50SXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBzZWxlY3RpemUucmVtb3ZlSXRlbShjdXJyZW50SXRlbXNbaV0sIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbmV3SXRlbXMgPSBzZWxlY3RpemUuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGlkeCkgeyAKICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtcy5pbmRleE9mKGlkeCkgPCAwOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgbmV3SXRlbXMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSXRlbSBoYXMgYmVlbiByZW1vdmVkLi4uCiAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgbG9naWMgd29uJ3Qgd29yayBmb3IgZHluYW1pY2FsbHkgY2hhbmdpbmcgcGFsZXR0ZSAKICAgICAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIG51bGwpOwogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgc2VsZWN0aXplLml0ZW1zKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSAvLyBlbmQgb2Ygc2VsZWN0aW9uQ2hhbmdlCiAgICAKICB9IC8vIGVuZCBvZiByZW5kZXJWYWx1ZQp9KTsgLy8gZW5kIG9mIHdpZGdldCBkZWZpbml0aW9uCgovKioKICogQHBhcmFtIGdyYXBoRGl2IFRoZSBQbG90bHkgZ3JhcGggZGl2CiAqIEBwYXJhbSBoaWdobGlnaHQgQW4gb2JqZWN0IHdpdGggb3B0aW9ucyBmb3IgdXBkYXRpbmcgc2VsZWN0aW9uKHMpCiAqLwpmdW5jdGlvbiBUcmFjZU1hbmFnZXIoZ3JhcGhEaXYsIGhpZ2hsaWdodCkgewogIC8vIFRoZSBQbG90bHkgZ3JhcGggZGl2CiAgdGhpcy5nZCA9IGdyYXBoRGl2OwoKICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZGF0YS4KICAvLyBUT0RPOiB0cnkgdXNpbmcgTGliLmV4dGVuZEZsYXQoKSBhcyBkb25lIGluICAKICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9wdWxsLzExMzYgCiAgdGhpcy5vcmlnRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JhcGhEaXYuZGF0YSkpOwogIAogIC8vIGF2b2lkIGRvaW5nIHRoaXMgb3ZlciBhbmQgb3ZlcgogIHRoaXMub3JpZ09wYWNpdHkgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgIHRoaXMub3JpZ09wYWNpdHlbaV0gPSB0aGlzLm9yaWdEYXRhW2ldLm9wYWNpdHkgPT09IDAgPyAwIDogKHRoaXMub3JpZ0RhdGFbaV0ub3BhY2l0eSB8fCAxKTsKICB9CgogIC8vIGtleTogZ3JvdXAgbmFtZSwgdmFsdWU6IG51bGwgb3IgYXJyYXkgb2Yga2V5cyByZXByZXNlbnRpbmcgdGhlCiAgLy8gbW9zdCByZWNlbnRseSByZWNlaXZlZCBzZWxlY3Rpb24gZm9yIHRoYXQgZ3JvdXAuCiAgdGhpcy5ncm91cFNlbGVjdGlvbnMgPSB7fTsKICAKICAvLyBzZWxlY3Rpb24gcGFyYW1ldGVycyAoZS5nLiwgdHJhbnNpZW50IHZlcnN1cyBwZXJzaXN0ZW50IHNlbGVjdGlvbikKICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKfQoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewogIC8vIFRPRE86IFVuaG9vayBhbGwgZXZlbnQgaGFuZGxlcnMKfTsKClRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlRmlsdGVyID0gZnVuY3Rpb24oZ3JvdXAsIGtleXMpIHsKCiAgaWYgKHR5cGVvZihrZXlzKSA9PT0gInVuZGVmaW5lZCIgfHwga2V5cyA9PT0gbnVsbCkgewogICAgCiAgICB0aGlzLmdkLmRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ0RhdGEpKTsKICAgIAogIH0gZWxzZSB7CiAgCiAgICB2YXIgdHJhY2VzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHRyYWNlID0gdGhpcy5vcmlnRGF0YVtpXTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmModHJhY2UpOwogICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyh0cmFjZS5rZXksIGtleXMpOwogICAgICAKICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICAvLyBzdWJzZXRBcnJheUF0dHJzIGRvZXNuJ3QgbXV0YXRlIHRyYWNlIChpdCBtYWtlcyBhIG1vZGlmaWVkIGNsb25lKQogICAgICAgICAgdHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKHRyYWNlLCBtYXRjaGVzKTsKICAgICAgICB9CiAgICAgICAgdHJhY2VzLnB1c2godHJhY2UpOwogICAgICB9CiAgICB9CiAgfQogIAogIHRoaXMuZ2QuZGF0YSA9IHRyYWNlczsKICBQbG90bHkucmVkcmF3KHRoaXMuZ2QpOwogIAogIC8vIE5PVEU6IHdlIHB1cnBvc2VseSBkbyBfbm90XyByZXN0b3JlIHNlbGVjdGlvbihzKSwgc2luY2Ugb24gZmlsdGVyLAogIC8vIGF4aXMgbGlrZWx5IHdpbGwgdXBkYXRlLCBjaGFuZ2luZyB0aGUgcGl4ZWwgLT4gZGF0YSBtYXBwaW5nLCBsZWFkaW5nIAogIC8vIHRvIGEgbGlrZWx5IG1pc21hdGNoIGluIHRoZSBicnVzaCBvdXRsaW5lIGFuZCBoaWdobGlnaHRlZCBtYXJrcwogIAp9OwoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihncm91cCwga2V5cykgewogIAogIGlmIChrZXlzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGtleXMpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQga2V5cyBhcmd1bWVudDsgbnVsbCBvciBhcnJheSBleHBlY3RlZCIpOwogIH0KICAKICAvLyBpZiBzZWxlY3Rpb24gaGFzIGJlZW4gY2xlYXJlZCwgb3IgaWYgdGhpcyBpcyB0cmFuc2llbnQKICAvLyBzZWxlY3Rpb24sIGRlbGV0ZSB0aGUgInNlbGVjdGlvbiB0cmFjZXMiCiAgdmFyIG5OZXdUcmFjZXMgPSB0aGlzLmdkLmRhdGEubGVuZ3RoIC0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgaWYgKGtleXMgPT09IG51bGwgfHwgIXRoaXMuaGlnaGxpZ2h0LnBlcnNpc3RlbnQgJiYgbk5ld1RyYWNlcyA+IDApIHsKICAgIHZhciB0cmFjZXNUb1JlbW92ZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdkLmRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXMuZ2QuZGF0YVtpXS5faXNDcm9zc3RhbGtUcmFjZSkgdHJhY2VzVG9SZW1vdmUucHVzaChpKTsKICAgIH0KICAgIFBsb3RseS5kZWxldGVUcmFjZXModGhpcy5nZCwgdHJhY2VzVG9SZW1vdmUpOwogICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdID0ga2V5czsKICB9IGVsc2UgewogICAgLy8gYWRkIHRvIHRoZSBncm91cFNlbGVjdGlvbiwgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgaXQKICAgIC8vIFRPRE86IGNhbiB0aGlzIGJlIHJlbW92ZWQ/CiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gPSB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gfHwgW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGsgPSBrZXlzW2ldOwogICAgICBpZiAodGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLmluZGV4T2YoaykgPCAwKSB7CiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLnB1c2goayk7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgaWYgKGtleXMgPT09IG51bGwpIHsKICAgIAogICAgUGxvdGx5LnJlc3R5bGUodGhpcy5nZCwgeyJvcGFjaXR5IjogdGhpcy5vcmlnT3BhY2l0eX0pOwogICAgCiAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA+PSAxKSB7CiAgICAKICAgIC8vIHBsYWNlaG9sZGVyIGZvciBuZXcgInNlbGVjdGlvbiB0cmFjZXMiCiAgICB2YXIgdHJhY2VzID0gW107CiAgICAvLyB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBSL2hpZ2hsaWdodC5SCiAgICB2YXIgc2VsZWN0aW9uQ29sb3VyID0gY3Jvc3N0YWxrLmdyb3VwKGdyb3VwKS52YXIoInBsb3RseVNlbGVjdGlvbkNvbG91ciIpLmdldCgpIHx8IAogICAgICB0aGlzLmhpZ2hsaWdodC5jb2xvclswXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgLy8gVE9ETzogdHJ5IHVzaW5nIExpYi5leHRlbmRGbGF0KCkgYXMgZG9uZSBpbiAgCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbG90bHkvcGxvdGx5LmpzL3B1bGwvMTEzNiAKICAgICAgdmFyIHRyYWNlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdkLmRhdGFbaV0pKTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIC8vIEdldCBzb3J0ZWQgYXJyYXkgb2YgbWF0Y2hpbmcgaW5kaWNlcyBpbiB0cmFjZS5rZXkKICAgICAgdmFyIG1hdGNoRnVuYyA9IGdldE1hdGNoRnVuYyh0cmFjZSk7CiAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hGdW5jKHRyYWNlLmtleSwga2V5cyk7CiAgICAgIAogICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gSWYgdGhpcyBpcyBhICJzaW1wbGUiIGtleSwgdGhhdCBtZWFucyBzZWxlY3QgdGhlIGVudGlyZSB0cmFjZQogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB0cmFjZSA9IHN1YnNldEFycmF5QXR0cnModHJhY2UsIG1hdGNoZXMpOwogICAgICAgIH0KICAgICAgICAvLyByZWFjaCBpbnRvIHRoZSBmdWxsIHRyYWNlIG9iamVjdCBzbyB3ZSBjYW4gcHJvcGVybHkgcmVmbGVjdCB0aGUgCiAgICAgICAgLy8gc2VsZWN0aW9uIGF0dHJpYnV0ZXMgaW4gZXZlcnkgdmlldwogICAgICAgIHZhciBkID0gdGhpcy5nZC5fZnVsbERhdGFbaV07CiAgICAgICAgCiAgICAgICAgLyogCiAgICAgICAgLyBSZWN1cnNpdmVseSBpbmhlcml0IHNlbGVjdGlvbiBhdHRyaWJ1dGVzIGZyb20gdmFyaW91cyBzb3VyY2VzLCAKICAgICAgICAvIGluIG9yZGVyIG9mIHByZWZlcmVuY2U6CiAgICAgICAgLyAgKDEpIG9mZmljaWFsIHBsb3RseS5qcyBzZWxlY3RlZCBhdHRyaWJ1dGUKICAgICAgICAvICAoMikgaGlnaGxpZ2h0KHNlbGVjdGVkID0gYXR0cnNfc2VsZWN0ZWQoLi4uKSkKICAgICAgICAqLwogICAgICAgIC8vIFRPRE86IGl0IHdvdWxkIGJlIG5lYXQgdG8gaGF2ZSBhIGRyb3Bkb3duIHRvIGR5bmFtaWNhbGx5IHNwZWNpZnkgdGhlc2UhCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdHJhY2UsIHRoaXMuaGlnaGxpZ2h0LnNlbGVjdGVkKTsKICAgICAgICAKICAgICAgICAvLyBpZiBpdCBpcyBkZWZpbmVkLCBvdmVycmlkZSBjb2xvciB3aXRoIHRoZSAiZHluYW1pYyBicnVzaCBjb2xvciIiCiAgICAgICAgaWYgKGQubWFya2VyKSB7CiAgICAgICAgICB0cmFjZS5tYXJrZXIgPSB0cmFjZS5tYXJrZXIgfHwge307CiAgICAgICAgICB0cmFjZS5tYXJrZXIuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLm1hcmtlci5jb2xvciB8fCBkLm1hcmtlci5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgdHJhY2UubGluZSA9IHRyYWNlLmxpbmUgfHwge307CiAgICAgICAgICB0cmFjZS5saW5lLmNvbG9yID0gIHNlbGVjdGlvbkNvbG91ciB8fCB0cmFjZS5saW5lLmNvbG9yIHx8IGQubGluZS5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQudGV4dGZvbnQpIHsKICAgICAgICAgIHRyYWNlLnRleHRmb250ID0gdHJhY2UudGV4dGZvbnQgfHwge307CiAgICAgICAgICB0cmFjZS50ZXh0Zm9udC5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UudGV4dGZvbnQuY29sb3IgfHwgZC50ZXh0Zm9udC5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQuZmlsbGNvbG9yKSB7CiAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgc2VsZWN0aW9uQ29sb3VyIGluaGVyaXQgYWxwaGEgZnJvbSB0aGUgZXhpc3RpbmcgZmlsbGNvbG9yPwogICAgICAgICAgdHJhY2UuZmlsbGNvbG9yID0gc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLmZpbGxjb2xvciB8fCBkLmZpbGxjb2xvcjsKICAgICAgICB9CiAgICAgICAgLy8gYXR0YWNoIGEgc2Vuc2libGUgbmFtZS9sZWdlbmRncm91cAogICAgICAgIHRyYWNlLm5hbWUgPSB0cmFjZS5uYW1lIHx8IGtleXMuam9pbigiPGJyIC8+Iik7CiAgICAgICAgdHJhY2UubGVnZW5kZ3JvdXAgPSB0cmFjZS5sZWdlbmRncm91cCB8fCBrZXlzLmpvaW4oIjxiciAvPiIpOwogICAgICAgIAogICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbWFwcGluZyBiZXR3ZWVuIHRoaXMgbmV3IHRyYWNlIGFuZCB0aGUgdHJhY2UgaXQgdGFyZ2V0cwogICAgICAgIC8vIChuZWNlc3NhcnkgZm9yIHVwZGF0aW5nIGZyYW1lcyB0byByZWZsZWN0IHRoZSBzZWxlY3Rpb24gdHJhY2VzKQogICAgICAgIHRyYWNlLl9vcmlnaW5hbEluZGV4ID0gaTsKICAgICAgICB0cmFjZS5fbmV3SW5kZXggPSB0aGlzLmdkLl9mdWxsRGF0YS5sZW5ndGggKyB0cmFjZXMubGVuZ3RoOwogICAgICAgIHRyYWNlLl9pc0Nyb3NzdGFsa1RyYWNlID0gdHJ1ZTsKICAgICAgICB0cmFjZXMucHVzaCh0cmFjZSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKHRyYWNlcy5sZW5ndGggPiAwKSB7CiAgICAgIAogICAgICBQbG90bHkuYWRkVHJhY2VzKHRoaXMuZ2QsIHRyYWNlcykudGhlbihmdW5jdGlvbihnZCkgewogICAgICAgIC8vIGluY3JlbWVudGFsbHkgYWRkIHNlbGVjdGlvbiB0cmFjZXMgdG8gZnJhbWVzCiAgICAgICAgLy8gKHRoaXMgaXMgaGVhdmlseSBpbnNwaXJlZCBieSBQbG90bHkuUGxvdHMubW9kaWZ5RnJhbWVzKCkgCiAgICAgICAgLy8gaW4gc3JjL3Bsb3RzL3Bsb3RzLmpzKQogICAgICAgIHZhciBfaGFzaCA9IGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoOwogICAgICAgIHZhciBfZnJhbWVzID0gZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMgfHwgW107CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZnJhbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkZCB0byBfZnJhbWVzW2ldLnRyYWNlcyAqaWYqIHRoaXMgZnJhbWUgcmVmZXJlbmNlcyBzZWxlY3RlZCB0cmFjZShzKQogICAgICAgICAgdmFyIG5ld0luZGljZXMgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdHJhY2VzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHZhciB0ciA9IHRyYWNlc1tqXTsKICAgICAgICAgICAgaWYgKF9mcmFtZXNbaV0udHJhY2VzLmluZGV4T2YodHIuX29yaWdpbmFsSW5kZXgpID4gLTEpIHsKICAgICAgICAgICAgICBuZXdJbmRpY2VzLnB1c2godHIuX25ld0luZGV4KTsKICAgICAgICAgICAgICBfZnJhbWVzW2ldLnRyYWNlcy5wdXNoKHRyLl9uZXdJbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gbm90aGluZyB0byBkby4uLgogICAgICAgICAgaWYgKG5ld0luZGljZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICB2YXIgY3RyID0gMDsKICAgICAgICAgIHZhciBuRnJhbWVUcmFjZXMgPSBfZnJhbWVzW2ldLmRhdGEubGVuZ3RoOwogICAgICAgICAgCiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5GcmFtZVRyYWNlczsgaisrKSB7CiAgICAgICAgICAgIHZhciBmcmFtZVRyYWNlID0gX2ZyYW1lc1tpXS5kYXRhW2pdOwogICAgICAgICAgICBpZiAoIWZyYW1lVHJhY2Uua2V5IHx8IGZyYW1lVHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbWF0Y2hGdW5jID0gZ2V0TWF0Y2hGdW5jKGZyYW1lVHJhY2UpOwogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyhmcmFtZVRyYWNlLmtleSwga2V5cyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgaWYgKCF0cmFjZS5faXNTaW1wbGVLZXkpIHsKICAgICAgICAgICAgICAgIGZyYW1lVHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKGZyYW1lVHJhY2UsIG1hdGNoZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgZCA9IGdkLl9mdWxsRGF0YVtuZXdJbmRpY2VzW2N0cl1dOwogICAgICAgICAgICAgIGlmIChkLm1hcmtlcikgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5tYXJrZXIgPSBkLm1hcmtlcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5saW5lID0gZC5saW5lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZC50ZXh0Zm9udCkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS50ZXh0Zm9udCA9IGQudGV4dGZvbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGN0ciA9IGN0ciArIDE7CiAgICAgICAgICAgICAgX2ZyYW1lc1tpXS5kYXRhLnB1c2goZnJhbWVUcmFjZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gdXBkYXRlIGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoCiAgICAgICAgICBfaGFzaFtfZnJhbWVzW2ldLm5hbWVdID0gX2ZyYW1lc1tpXTsKICAgICAgICB9CiAgICAgIAogICAgICB9KTsKICAgICAgCiAgICAgIC8vIGRpbSB0cmFjZXMgdGhhdCBoYXZlIGEgc2V0IG1hdGNoaW5nIHRoZSBzZXQgb2Ygc2VsZWN0aW9uIHNldHMKICAgICAgdmFyIHRyYWNlc1RvRGltID0gW10sCiAgICAgICAgICBvcGFjaXRpZXMgPSBbXSwKICAgICAgICAgIHNldHMgPSBPYmplY3Qua2V5cyh0aGlzLmdyb3VwU2VsZWN0aW9ucyksCiAgICAgICAgICBuID0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgICAgICAgICAKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2YXIgb3BhY2l0eSA9IHRoaXMub3JpZ09wYWNpdHlbaV0gfHwgMTsKICAgICAgICAvLyBoYXZlIHdlIGFscmVhZHkgZGltbWVkIHRoaXMgdHJhY2U/IE9yIGlzIHRoaXMgZXZlbiB3b3J0aCBkb2luZz8KICAgICAgICBpZiAob3BhY2l0eSAhPT0gdGhpcy5nZC5fZnVsbERhdGFbaV0ub3BhY2l0eSB8fCB0aGlzLmhpZ2hsaWdodC5vcGFjaXR5RGltID09PSAxKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy8gaXMgdGhpcyBzZXQgYW4gZWxlbWVudCBvZiB0aGUgc2V0IG9mIHNlbGVjdGlvbiBzZXRzPwogICAgICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoZXMoc2V0cywgW3RoaXMuZ2QuZGF0YVtpXS5zZXRdKTsKICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIHsKICAgICAgICAgIHRyYWNlc1RvRGltLnB1c2goaSk7CiAgICAgICAgICBvcGFjaXRpZXMucHVzaChvcGFjaXR5ICogdGhpcy5oaWdobGlnaHQub3BhY2l0eURpbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZiAodHJhY2VzVG9EaW0ubGVuZ3RoID4gMCkgewogICAgICAgIFBsb3RseS5yZXN0eWxlKHRoaXMuZ2QsIHsib3BhY2l0eSI6IG9wYWNpdGllc30sIHRyYWNlc1RvRGltKTsKICAgICAgICAvLyB0dXJuIG9mZiB0aGUgc2VsZWN0ZWQvdW5zZWxlY3RlZCBBUEkKICAgICAgICBQbG90bHkucmVzdHlsZSh0aGlzLmdkLCB7InNlbGVjdGVkcG9pbnRzIjogbnVsbH0pOwogICAgICB9CiAgICAgIAogICAgfQogICAgCiAgfQp9OwoKLyogCk5vdGU6IGluIGFsbCBvZiB0aGVzZSBtYXRjaCBmdW5jdGlvbnMsIHdlIGFzc3VtZSBuZWVkbGVTZXQgKGkuZS4gdGhlIHNlbGVjdGVkIGtleXMpCmlzIGEgMUQgKG9yIGZsYXQpIGFycmF5LiBUaGUgcmVhbCBkaWZmZXJlbmNlIGlzIHRoZSBtZWFuaW5nIG9mIGhheXN0YWNrLgpmaW5kTWF0Y2hlcygpIGRvZXMgdGhlIHVzdWFsIHRoaW5nIHlvdSdkIGV4cGVjdCBmb3IgCmxpbmtlZCBicnVzaGluZyBvbiBhIHNjYXR0ZXJwbG90IG1hdHJpeC4gZmluZFNpbXBsZU1hdGNoZXMoKSByZXR1cm5zIGEgbWF0Y2ggaWZmIApoYXlzdGFjayBpcyBhIHN1YnNldCBvZiB0aGUgbmVlZGxlU2V0LiBmaW5kTmVzdGVkTWF0Y2hlcygpIHJldHVybnMgCiovCgpmdW5jdGlvbiBnZXRNYXRjaEZ1bmModHJhY2UpIHsKICByZXR1cm4gKHRyYWNlLl9pc05lc3RlZEtleSkgPyBmaW5kTmVzdGVkTWF0Y2hlcyA6IAogICAgKHRyYWNlLl9pc1NpbXBsZUtleSkgPyBmaW5kU2ltcGxlTWF0Y2hlcyA6IGZpbmRNYXRjaGVzOwp9CgovLyBmaW5kIG1hdGNoZXMgZm9yICJmbGF0IiBrZXlzCmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGhheXN0YWNrLCBuZWVkbGVTZXQpIHsKICB2YXIgbWF0Y2hlcyA9IFtdOwogIGhheXN0YWNrLmZvckVhY2goZnVuY3Rpb24ob2JqLCBpKSB7CiAgICBpZiAob2JqID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKG9iaikgPj0gMCkgewogICAgICBtYXRjaGVzLnB1c2goaSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG1hdGNoZXM7Cn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgInNpbXBsZSIga2V5cwpmdW5jdGlvbiBmaW5kU2ltcGxlTWF0Y2hlcyhoYXlzdGFjaywgbmVlZGxlU2V0KSB7CiAgdmFyIG1hdGNoID0gaGF5c3RhY2suZXZlcnkoZnVuY3Rpb24odmFsKSB7CiAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKHZhbCkgPj0gMDsKICB9KTsKICAvLyB5ZXMsIHRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2Ugb3RoZXIgdGhhbiBjb25mb3JtaW5nIAogIC8vIHRvIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgb3RoZXIgbWF0Y2ggZnVuY3Rpb25zCiAgcmV0dXJuIChtYXRjaCkgPyBbMF0gOiBbXQp9CgovLyBmaW5kIG1hdGNoZXMgZm9yIGEgIm5lc3RlZCIgaGF5c3RhY2sgKDJEIGFycmF5cykKZnVuY3Rpb24gZmluZE5lc3RlZE1hdGNoZXMoaGF5c3RhY2ssIG5lZWRsZVNldCkgewogIHZhciBtYXRjaGVzID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykgewogICAgdmFyIGhheSA9IGhheXN0YWNrW2ldOwogICAgdmFyIG1hdGNoID0gaGF5LmV2ZXJ5KGZ1bmN0aW9uKHZhbCkgeyAKICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCBuZWVkbGVTZXQuaW5kZXhPZih2YWwpID49IDA7IAogICAgfSk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgbWF0Y2hlcy5wdXNoKGkpOwogICAgfQogIH0KICByZXR1cm4gbWF0Y2hlczsKfQoKZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gKAogICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmCiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZQogICk7Cn0KCmZ1bmN0aW9uIHN1YnNldEFycmF5QXR0cnMob2JqLCBpbmRpY2VzKSB7CiAgdmFyIG5ld09iaiA9IHt9OwogIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICB2YXIgdmFsID0gb2JqW2tdOwoKICAgIGlmIChrLmNoYXJBdCgwKSA9PT0gIl8iKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoayA9PT0gInRyYW5zZm9ybXMiICYmIEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICBuZXdPYmpba10gPSB2YWwubWFwKGZ1bmN0aW9uKHRyYW5zZm9ybSkgewogICAgICAgIHJldHVybiBzdWJzZXRBcnJheUF0dHJzKHRyYW5zZm9ybSwgaW5kaWNlcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChrID09PSAiY29sb3JzY2FsZSIgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5QXR0cnModmFsLCBpbmRpY2VzKTsKICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5KHZhbCwgaW5kaWNlcyk7CiAgICB9IGVsc2UgewogICAgICBuZXdPYmpba10gPSB2YWw7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG5ld09iajsKfQoKZnVuY3Rpb24gc3Vic2V0QXJyYXkoYXJyLCBpbmRpY2VzKSB7CiAgdmFyIHJlc3VsdCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0LnB1c2goYXJyW2luZGljZXNbaV1dKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlbW92aW5nIHBsb3RseSdzIGJydXNoIApmdW5jdGlvbiByZW1vdmVCcnVzaChlbCkgewogIHZhciBvdXRsaW5lcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWxlY3Qtb3V0bGluZSIpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0bGluZXMubGVuZ3RoOyBpKyspIHsKICAgIG91dGxpbmVzW2ldLnJlbW92ZSgpOwogIH0KfQoKCi8vIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24KCi8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3QKLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvcgovLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUKLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy4KZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7Cgl2YXIgdGltZW91dDsKCXJldHVybiBmdW5jdGlvbigpIHsKCQl2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7CgkJdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CgkJCXRpbWVvdXQgPSBudWxsOwoJCQlpZiAoIWltbWVkaWF0ZSkgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKCQl9OwoJCXZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0OwoJCWNsZWFyVGltZW91dCh0aW1lb3V0KTsKCQl0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CgkJaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Cgl9Owp9Owo="></script> <script src="data:application/javascript;base64,KGZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO3ZhciB1bmRlZmluZWQ9dm9pZCAwO3ZhciBNQVhfQVJSQVlfTEVOR1RIPTFlNTtmdW5jdGlvbiBUeXBlKHYpe3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiJ1bmRlZmluZWQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UibnVtYmVyIjpyZXR1cm4ibnVtYmVyIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7ZGVmYXVsdDpyZXR1cm4gdj09PW51bGw/Im51bGwiOiJvYmplY3QifX1mdW5jdGlvbiBDbGFzcyh2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLnJlcGxhY2UoL15cW29iamVjdCAqfFxdJC9nLCIiKX1mdW5jdGlvbiBJc0NhbGxhYmxlKG8pe3JldHVybiB0eXBlb2Ygbz09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gVG9PYmplY3Qodil7aWYodj09PW51bGx8fHY9PT11bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCk7cmV0dXJuIE9iamVjdCh2KX1mdW5jdGlvbiBUb0ludDMyKHYpe3JldHVybiB2Pj4wfWZ1bmN0aW9uIFRvVWludDMyKHYpe3JldHVybiB2Pj4+MH12YXIgTE4yPU1hdGguTE4yLGFicz1NYXRoLmFicyxmbG9vcj1NYXRoLmZsb29yLGxvZz1NYXRoLmxvZyxtYXg9TWF0aC5tYXgsbWluPU1hdGgubWluLHBvdz1NYXRoLnBvdyxyb3VuZD1NYXRoLnJvdW5kOyhmdW5jdGlvbigpe3ZhciBvcmlnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZG9tX29ubHk9IWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KX1jYXRjaChfKXtyZXR1cm4gZmFsc2V9fSgpO2lmKCFvcmlnfHxkb21fb25seSl7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG8scHJvcCxkZXNjKXtpZihvcmlnKXRyeXtyZXR1cm4gb3JpZyhvLHByb3AsZGVzYyl9Y2F0Y2goXyl7fWlmKG8hPT1PYmplY3QobykpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3QiKTtpZihPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiJnZXQiaW4gZGVzYylPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18uY2FsbChvLHByb3AsZGVzYy5nZXQpO2lmKE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyYmInNldCJpbiBkZXNjKU9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG8scHJvcCxkZXNjLnNldCk7aWYoInZhbHVlImluIGRlc2Mpb1twcm9wXT1kZXNjLnZhbHVlO3JldHVybiBvfX19KSgpO2Z1bmN0aW9uIG1ha2VBcnJheUFjY2Vzc29ycyhvYmope2lmKG9iai5sZW5ndGg+TUFYX0FSUkFZX0xFTkdUSCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSB0b28gbGFyZ2UgZm9yIHBvbHlmaWxsIik7ZnVuY3Rpb24gbWFrZUFycmF5QWNjZXNzb3IoaW5kZXgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosaW5kZXgse2dldDpmdW5jdGlvbigpe3JldHVybiBvYmouX2dldHRlcihpbmRleCl9LHNldDpmdW5jdGlvbih2KXtvYmouX3NldHRlcihpbmRleCx2KX0sZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pfXZhciBpO2ZvcihpPTA7aTxvYmoubGVuZ3RoO2krPTEpe21ha2VBcnJheUFjY2Vzc29yKGkpfX1mdW5jdGlvbiBhc19zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+PnN9ZnVuY3Rpb24gYXNfdW5zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+Pj5zfWZ1bmN0aW9uIHBhY2tJOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja0k4KGJ5dGVzKXtyZXR1cm4gYXNfc2lnbmVkKGJ5dGVzWzBdLDgpfWZ1bmN0aW9uIHBhY2tVOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja1U4KGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF0sOCl9ZnVuY3Rpb24gcGFja1U4Q2xhbXBlZChuKXtuPXJvdW5kKE51bWJlcihuKSk7cmV0dXJuW248MD8wOm4+MjU1PzI1NTpuJjI1NV19ZnVuY3Rpb24gcGFja0kxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja0kxNihieXRlcyl7cmV0dXJuIGFzX3NpZ25lZChieXRlc1swXTw8OHxieXRlc1sxXSwxNil9ZnVuY3Rpb24gcGFja1UxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja1UxNihieXRlcyl7cmV0dXJuIGFzX3Vuc2lnbmVkKGJ5dGVzWzBdPDw4fGJ5dGVzWzFdLDE2KX1mdW5jdGlvbiBwYWNrSTMyKG4pe3JldHVybltuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LG4mMjU1XX1mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpe3JldHVybiBhc19zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja1UzMihuKXtyZXR1cm5bbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NV19ZnVuY3Rpb24gdW5wYWNrVTMyKGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja0lFRUU3NTQodixlYml0cyxmYml0cyl7dmFyIGJpYXM9KDE8PGViaXRzLTEpLTEscyxlLGYsbG4saSxiaXRzLHN0cixieXRlcztmdW5jdGlvbiByb3VuZFRvRXZlbihuKXt2YXIgdz1mbG9vcihuKSxmPW4tdztpZihmPC41KXJldHVybiB3O2lmKGY+LjUpcmV0dXJuIHcrMTtyZXR1cm4gdyUyP3crMTp3fWlmKHYhPT12KXtlPSgxPDxlYml0cyktMTtmPXBvdygyLGZiaXRzLTEpO3M9MH1lbHNlIGlmKHY9PT1JbmZpbml0eXx8dj09PS1JbmZpbml0eSl7ZT0oMTw8ZWJpdHMpLTE7Zj0wO3M9djwwPzE6MH1lbHNlIGlmKHY9PT0wKXtlPTA7Zj0wO3M9MS92PT09LUluZmluaXR5PzE6MH1lbHNle3M9djwwO3Y9YWJzKHYpO2lmKHY+PXBvdygyLDEtYmlhcykpe2U9bWluKGZsb29yKGxvZyh2KS9MTjIpLDEwMjMpO2Y9cm91bmRUb0V2ZW4odi9wb3coMixlKSpwb3coMixmYml0cykpO2lmKGYvcG93KDIsZmJpdHMpPj0yKXtlPWUrMTtmPTF9aWYoZT5iaWFzKXtlPSgxPDxlYml0cyktMTtmPTB9ZWxzZXtlPWUrYmlhcztmPWYtcG93KDIsZmJpdHMpfX1lbHNle2U9MDtmPXJvdW5kVG9FdmVuKHYvcG93KDIsMS1iaWFzLWZiaXRzKSl9fWJpdHM9W107Zm9yKGk9ZmJpdHM7aTtpLT0xKXtiaXRzLnB1c2goZiUyPzE6MCk7Zj1mbG9vcihmLzIpfWZvcihpPWViaXRzO2k7aS09MSl7Yml0cy5wdXNoKGUlMj8xOjApO2U9Zmxvb3IoZS8yKX1iaXRzLnB1c2gocz8xOjApO2JpdHMucmV2ZXJzZSgpO3N0cj1iaXRzLmpvaW4oIiIpO2J5dGVzPVtdO3doaWxlKHN0ci5sZW5ndGgpe2J5dGVzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDgpLDIpKTtzdHI9c3RyLnN1YnN0cmluZyg4KX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChieXRlcyxlYml0cyxmYml0cyl7dmFyIGJpdHM9W10saSxqLGIsc3RyLGJpYXMscyxlLGY7Zm9yKGk9Ynl0ZXMubGVuZ3RoO2k7aS09MSl7Yj1ieXRlc1tpLTFdO2ZvcihqPTg7ajtqLT0xKXtiaXRzLnB1c2goYiUyPzE6MCk7Yj1iPj4xfX1iaXRzLnJldmVyc2UoKTtzdHI9Yml0cy5qb2luKCIiKTtiaWFzPSgxPDxlYml0cy0xKS0xO3M9cGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDEpLDIpPy0xOjE7ZT1wYXJzZUludChzdHIuc3Vic3RyaW5nKDEsMStlYml0cyksMik7Zj1wYXJzZUludChzdHIuc3Vic3RyaW5nKDErZWJpdHMpLDIpO2lmKGU9PT0oMTw8ZWJpdHMpLTEpe3JldHVybiBmIT09MD9OYU46cypJbmZpbml0eX1lbHNlIGlmKGU+MCl7cmV0dXJuIHMqcG93KDIsZS1iaWFzKSooMStmL3BvdygyLGZiaXRzKSl9ZWxzZSBpZihmIT09MCl7cmV0dXJuIHMqcG93KDIsLShiaWFzLTEpKSooZi9wb3coMixmYml0cykpfWVsc2V7cmV0dXJuIHM8MD8tMDowfX1mdW5jdGlvbiB1bnBhY2tGNjQoYil7cmV0dXJuIHVucGFja0lFRUU3NTQoYiwxMSw1Mil9ZnVuY3Rpb24gcGFja0Y2NCh2KXtyZXR1cm4gcGFja0lFRUU3NTQodiwxMSw1Mil9ZnVuY3Rpb24gdW5wYWNrRjMyKGIpe3JldHVybiB1bnBhY2tJRUVFNzU0KGIsOCwyMyl9ZnVuY3Rpb24gcGFja0YzMih2KXtyZXR1cm4gcGFja0lFRUU3NTQodiw4LDIzKX0oZnVuY3Rpb24oKXtmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfYnl0ZXMiLHt2YWx1ZTpBcnJheShsZW5ndGgpfSk7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl0aGlzLl9ieXRlc1tpXT0wfWdsb2JhbC5BcnJheUJ1ZmZlcj1nbG9iYWwuQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyO2Z1bmN0aW9uICRUeXBlZEFycmF5JCgpe2lmKCFhcmd1bWVudHMubGVuZ3RofHx0eXBlb2YgYXJndW1lbnRzWzBdIT09Im9iamVjdCIpe3JldHVybiBmdW5jdGlvbihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigibGVuZ3RoIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTpsZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ5dGVMZW5ndGgpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ5dGVPZmZzZXQiLHt2YWx1ZTowfSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPj0xJiZUeXBlKGFyZ3VtZW50c1swXSk9PT0ib2JqZWN0IiYmYXJndW1lbnRzWzBdaW5zdGFuY2VvZiAkVHlwZWRBcnJheSQpe3JldHVybiBmdW5jdGlvbih0eXBlZEFycmF5KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09dHlwZWRBcnJheS5jb25zdHJ1Y3Rvcil0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYnl0ZUxlbmd0aD10eXBlZEFycmF5Lmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOjB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6dHlwZWRBcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpdGhpcy5fc2V0dGVyKGksdHlwZWRBcnJheS5fZ2V0dGVyKGkpKX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg+PTEmJlR5cGUoYXJndW1lbnRzWzBdKT09PSJvYmplY3QiJiYhKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgJFR5cGVkQXJyYXkkKSYmIShhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihhcnJheSl7dmFyIGJ5dGVMZW5ndGg9YXJyYXkubGVuZ3RoKnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6MH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTphcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpe3ZhciBzPWFycmF5W2ldO3RoaXMuX3NldHRlcihpLE51bWJlcihzKSl9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD49MSYmVHlwZShhcmd1bWVudHNbMF0pPT09Im9iamVjdCImJihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihidWZmZXIsYnl0ZU9mZnNldCxsZW5ndGgpe2J5dGVPZmZzZXQ9VG9VaW50MzIoYnl0ZU9mZnNldCk7aWYoYnl0ZU9mZnNldD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IG91dCBvZiByYW5nZSIpO2lmKGJ5dGVPZmZzZXQldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJidWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIik7aWYobGVuZ3RoPT09dW5kZWZpbmVkKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aC1ieXRlT2Zmc2V0O2lmKGJ5dGVMZW5ndGgldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJsZW5ndGggb2YgYnVmZmVyIG1pbnVzIGJ5dGVPZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpO2xlbmd0aD1ieXRlTGVuZ3RoL3RoaXMuQllURVNfUEVSX0VMRU1FTlR9ZWxzZXtsZW5ndGg9VG9VaW50MzIobGVuZ3RoKTtieXRlTGVuZ3RoPWxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWlmKGJ5dGVPZmZzZXQrYnl0ZUxlbmd0aD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IGFuZCBsZW5ndGggcmVmZXJlbmNlIGFuIGFyZWEgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpidWZmZXJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOmJ5dGVPZmZzZXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6bGVuZ3RofSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10aHJvdyBUeXBlRXJyb3IoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLCJmcm9tIix7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUpe3JldHVybiBuZXcgdGhpcyhpdGVyYWJsZSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JCwib2YiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcyhhcmd1bWVudHMpfX0pO3ZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQ9e307JFR5cGVkQXJyYXkkLnByb3RvdHlwZT0kVHlwZWRBcnJheVByb3RvdHlwZSQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsIl9nZXR0ZXIiLHt2YWx1ZTpmdW5jdGlvbihpbmRleCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXRocm93IFN5bnRheEVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO2luZGV4PVRvVWludDMyKGluZGV4KTtpZihpbmRleD49dGhpcy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgYnl0ZXM9W10saSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXtieXRlcy5wdXNoKHRoaXMuYnVmZmVyLl9ieXRlc1tvXSl9cmV0dXJuIHRoaXMuX3VucGFjayhieXRlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImdldCIse3ZhbHVlOiRUeXBlZEFycmF5JC5wcm90b3R5cGUuX2dldHRlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJfc2V0dGVyIix7dmFsdWU6ZnVuY3Rpb24oaW5kZXgsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBTeW50YXhFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtpbmRleD1Ub1VpbnQzMihpbmRleCk7aWYoaW5kZXg+PXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYnl0ZXM9dGhpcy5fcGFjayh2YWx1ZSksaSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXt0aGlzLmJ1ZmZlci5fYnl0ZXNbb109Ynl0ZXNbaV19fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOiRUeXBlZEFycmF5JH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb3B5V2l0aGluIix7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHN0YXJ0KXt2YXIgZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVUYXJnZXQ9VG9JbnQzMih0YXJnZXQpO3ZhciB0bztpZihyZWxhdGl2ZVRhcmdldDwwKXRvPW1heChsZW4rcmVsYXRpdmVUYXJnZXQsMCk7ZWxzZSB0bz1taW4ocmVsYXRpdmVUYXJnZXQsbGVuKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgZnJvbTtpZihyZWxhdGl2ZVN0YXJ0PDApZnJvbT1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBmcm9tPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3ZhciBjb3VudD1taW4oZmluYWwtZnJvbSxsZW4tdG8pO3ZhciBkaXJlY3Rpb247aWYoZnJvbTx0byYmdG88ZnJvbStjb3VudCl7ZGlyZWN0aW9uPS0xO2Zyb209ZnJvbStjb3VudC0xO3RvPXRvK2NvdW50LTF9ZWxzZXtkaXJlY3Rpb249MX13aGlsZShjb3VudD4wKXtvLl9zZXR0ZXIodG8sby5fZ2V0dGVyKGZyb20pKTtmcm9tPWZyb20rZGlyZWN0aW9uO3RvPXRvK2RpcmVjdGlvbjtjb3VudD1jb3VudC0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJldmVyeSIse3ZhbHVlOmZ1bmN0aW9uKGNhbGxiYWNrZm4pe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTtpZighSXNDYWxsYWJsZShjYWxsYmFja2ZuKSl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdGhpc0FyZz1hcmd1bWVudHNbMV07Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZighY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsdC5fZ2V0dGVyKGkpLGksdCkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWxsIix7dmFsdWU6ZnVuY3Rpb24odmFsdWUpe3ZhciBzdGFydD1hcmd1bWVudHNbMV0sZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaztpZihyZWxhdGl2ZVN0YXJ0PDApaz1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBrPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3doaWxlKGs8ZmluYWwpe28uX3NldHRlcihrLHZhbHVlKTtrKz0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWx0ZXIiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHZhbD10Ll9nZXR0ZXIoaSk7aWYoY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHZhbCxpLHQpKXJlcy5wdXNoKHZhbCl9cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHJlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZpbmQiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4ga1ZhbHVlOysra31yZXR1cm4gdW5kZWZpbmVkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaW5kSW5kZXgiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4gazsrK2t9cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZvckVhY2giLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJpbmRleE9mIix7dmFsdWU6ZnVuY3Rpb24oc2VhcmNoRWxlbWVudCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO2lmKGxlbj09PTApcmV0dXJuLTE7dmFyIG49MDtpZihhcmd1bWVudHMubGVuZ3RoPjApe249TnVtYmVyKGFyZ3VtZW50c1sxXSk7aWYobiE9PW4pe249MH1lbHNlIGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpmbG9vcihhYnMobikpfX1pZihuPj1sZW4pcmV0dXJuLTE7dmFyIGs9bj49MD9uOm1heChsZW4tYWJzKG4pLDApO2Zvcig7azxsZW47aysrKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXtyZXR1cm4ga319cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImpvaW4iLHt2YWx1ZTpmdW5jdGlvbihzZXBhcmF0b3Ipe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTt2YXIgdG1wPUFycmF5KGxlbik7Zm9yKHZhciBpPTA7aTxsZW47KytpKXRtcFtpXT10Ll9nZXR0ZXIoaSk7cmV0dXJuIHRtcC5qb2luKHNlcGFyYXRvcj09PXVuZGVmaW5lZD8iLCI6c2VwYXJhdG9yKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwibGFzdEluZGV4T2YiLHt2YWx1ZTpmdW5jdGlvbihzZWFyY2hFbGVtZW50KXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYobGVuPT09MClyZXR1cm4tMTt2YXIgbj1sZW47aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtuPU51bWJlcihhcmd1bWVudHNbMV0pO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqZmxvb3IoYWJzKG4pKX19dmFyIGs9bj49MD9taW4obixsZW4tMSk6bGVuLWFicyhuKTtmb3IoO2s+PTA7ay0tKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXJldHVybiBrfXJldHVybi0xfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJtYXAiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTtyZXMubGVuZ3RoPWxlbjt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKylyZXNbaV09Y2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihyZXMpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJyZWR1Y2UiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9MDt2YXIgYWNjdW11bGF0b3I7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7YWNjdW11bGF0b3I9YXJndW1lbnRzWzFdfWVsc2V7YWNjdW11bGF0b3I9dC5fZ2V0dGVyKGsrKyl9d2hpbGUoazxsZW4pe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7aysrfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmVkdWNlUmlnaHQiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9bGVuLTE7dmFyIGFjY3VtdWxhdG9yO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe2FjY3VtdWxhdG9yPWFyZ3VtZW50c1sxXX1lbHNle2FjY3VtdWxhdG9yPXQuX2dldHRlcihrLS0pfXdoaWxlKGs+PTApe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7ay0tfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmV2ZXJzZSIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciBoYWxmPWZsb29yKGxlbi8yKTtmb3IodmFyIGk9MCxqPWxlbi0xO2k8aGFsZjsrK2ksLS1qKXt2YXIgdG1wPXQuX2dldHRlcihpKTt0Ll9zZXR0ZXIoaSx0Ll9nZXR0ZXIoaikpO3QuX3NldHRlcihqLHRtcCl9cmV0dXJuIHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNldCIse3ZhbHVlOmZ1bmN0aW9uKGluZGV4LHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoPDEpdGhyb3cgU3ludGF4RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7dmFyIGFycmF5LHNlcXVlbmNlLG9mZnNldCxsZW4saSxzLGQsYnl0ZU9mZnNldCxieXRlTGVuZ3RoLHRtcDtpZih0eXBlb2YgYXJndW1lbnRzWzBdPT09Im9iamVjdCImJmFyZ3VtZW50c1swXS5jb25zdHJ1Y3Rvcj09PXRoaXMuY29uc3RydWN0b3Ipe2FycmF5PWFyZ3VtZW50c1swXTtvZmZzZXQ9VG9VaW50MzIoYXJndW1lbnRzWzFdKTtpZihvZmZzZXQrYXJyYXkubGVuZ3RoPnRoaXMubGVuZ3RoKXt0aHJvdyBSYW5nZUVycm9yKCJPZmZzZXQgcGx1cyBsZW5ndGggb2YgYXJyYXkgaXMgb3V0IG9mIHJhbmdlIil9Ynl0ZU9mZnNldD10aGlzLmJ5dGVPZmZzZXQrb2Zmc2V0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7Ynl0ZUxlbmd0aD1hcnJheS5sZW5ndGgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpZihhcnJheS5idWZmZXI9PT10aGlzLmJ1ZmZlcil7dG1wPVtdO2ZvcihpPTAscz1hcnJheS5ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEpe3RtcFtpXT1hcnJheS5idWZmZXIuX2J5dGVzW3NdfWZvcihpPTAsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLGQrPTEpe3RoaXMuYnVmZmVyLl9ieXRlc1tkXT10bXBbaV19fWVsc2V7Zm9yKGk9MCxzPWFycmF5LmJ5dGVPZmZzZXQsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEsZCs9MSl7dGhpcy5idWZmZXIuX2J5dGVzW2RdPWFycmF5LmJ1ZmZlci5fYnl0ZXNbc119fX1lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHNbMF09PT0ib2JqZWN0IiYmdHlwZW9mIGFyZ3VtZW50c1swXS5sZW5ndGghPT0idW5kZWZpbmVkIil7c2VxdWVuY2U9YXJndW1lbnRzWzBdO2xlbj1Ub1VpbnQzMihzZXF1ZW5jZS5sZW5ndGgpO29mZnNldD1Ub1VpbnQzMihhcmd1bWVudHNbMV0pO2lmKG9mZnNldCtsZW4+dGhpcy5sZW5ndGgpe3Rocm93IFJhbmdlRXJyb3IoIk9mZnNldCBwbHVzIGxlbmd0aCBvZiBhcnJheSBpcyBvdXQgb2YgcmFuZ2UiKX1mb3IoaT0wO2k8bGVuO2krPTEpe3M9c2VxdWVuY2VbaV07dGhpcy5fc2V0dGVyKG9mZnNldCtpLE51bWJlcihzKSl9fWVsc2V7dGhyb3cgVHlwZUVycm9yKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUocykiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNsaWNlIix7dmFsdWU6ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaz1yZWxhdGl2ZVN0YXJ0PDA/bWF4KGxlbityZWxhdGl2ZVN0YXJ0LDApOm1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kPWVuZD09PXVuZGVmaW5lZD9sZW46VG9JbnQzMihlbmQpO3ZhciBmaW5hbD1yZWxhdGl2ZUVuZDwwP21heChsZW4rcmVsYXRpdmVFbmQsMCk6bWluKHJlbGF0aXZlRW5kLGxlbik7dmFyIGNvdW50PWZpbmFsLWs7dmFyIGM9by5jb25zdHJ1Y3Rvcjt2YXIgYT1uZXcgYyhjb3VudCk7dmFyIG49MDt3aGlsZShrPGZpbmFsKXt2YXIga1ZhbHVlPW8uX2dldHRlcihrKTthLl9zZXR0ZXIobixrVmFsdWUpOysrazsrK259cmV0dXJuIGF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNvbWUiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2lmKGNhbGxiYWNrZm4uY2FsbCh0aGlzcCx0Ll9nZXR0ZXIoaSksaSx0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic29ydCIse3ZhbHVlOmZ1bmN0aW9uKGNvbXBhcmVmbil7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciB0bXA9QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjsrK2kpdG1wW2ldPXQuX2dldHRlcihpKTtpZihjb21wYXJlZm4pdG1wLnNvcnQoY29tcGFyZWZuKTtlbHNlIHRtcC5zb3J0KCk7Zm9yKGk9MDtpPGxlbjsrK2kpdC5fc2V0dGVyKGksdG1wW2ldKTtyZXR1cm4gdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic3ViYXJyYXkiLHt2YWx1ZTpmdW5jdGlvbihzdGFydCxlbmQpe2Z1bmN0aW9uIGNsYW1wKHYsbWluLG1heCl7cmV0dXJuIHY8bWluP21pbjp2Pm1heD9tYXg6dn1zdGFydD1Ub0ludDMyKHN0YXJ0KTtlbmQ9VG9JbnQzMihlbmQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSl7c3RhcnQ9MH1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2VuZD10aGlzLmxlbmd0aH1pZihzdGFydDwwKXtzdGFydD10aGlzLmxlbmd0aCtzdGFydH1pZihlbmQ8MCl7ZW5kPXRoaXMubGVuZ3RoK2VuZH1zdGFydD1jbGFtcChzdGFydCwwLHRoaXMubGVuZ3RoKTtlbmQ9Y2xhbXAoZW5kLDAsdGhpcy5sZW5ndGgpO3ZhciBsZW49ZW5kLXN0YXJ0O2lmKGxlbjwwKXtsZW49MH1yZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K3N0YXJ0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbGVuKX19KTtmdW5jdGlvbiBtYWtlVHlwZWRBcnJheShlbGVtZW50U2l6ZSxwYWNrLHVucGFjayl7dmFyIFR5cGVkQXJyYXk9ZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29uc3RydWN0b3IiLHt2YWx1ZTpUeXBlZEFycmF5fSk7JFR5cGVkQXJyYXkkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTttYWtlQXJyYXlBY2Nlc3NvcnModGhpcyl9O2lmKCJfX3Byb3RvX18iaW4gVHlwZWRBcnJheSl7VHlwZWRBcnJheS5fX3Byb3RvX189JFR5cGVkQXJyYXkkfWVsc2V7VHlwZWRBcnJheS5mcm9tPSRUeXBlZEFycmF5JC5mcm9tO1R5cGVkQXJyYXkub2Y9JFR5cGVkQXJyYXkkLm9mfVR5cGVkQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ9ZWxlbWVudFNpemU7dmFyIFR5cGVkQXJyYXlQcm90b3R5cGU9ZnVuY3Rpb24oKXt9O1R5cGVkQXJyYXlQcm90b3R5cGUucHJvdG90eXBlPSRUeXBlZEFycmF5UHJvdG90eXBlJDtUeXBlZEFycmF5LnByb3RvdHlwZT1uZXcgVHlwZWRBcnJheVByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIkJZVEVTX1BFUl9FTEVNRU5UIix7dmFsdWU6ZWxlbWVudFNpemV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIl9wYWNrIix7dmFsdWU6cGFja30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwiX3VucGFjayIse3ZhbHVlOnVucGFja30pO3JldHVybiBUeXBlZEFycmF5fXZhciBJbnQ4QXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrSTgsdW5wYWNrSTgpO3ZhciBVaW50OEFycmF5PW1ha2VUeXBlZEFycmF5KDEscGFja1U4LHVucGFja1U4KTt2YXIgVWludDhDbGFtcGVkQXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrVThDbGFtcGVkLHVucGFja1U4KTt2YXIgSW50MTZBcnJheT1tYWtlVHlwZWRBcnJheSgyLHBhY2tJMTYsdW5wYWNrSTE2KTt2YXIgVWludDE2QXJyYXk9bWFrZVR5cGVkQXJyYXkoMixwYWNrVTE2LHVucGFja1UxNik7dmFyIEludDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrSTMyLHVucGFja0kzMik7dmFyIFVpbnQzMkFycmF5PW1ha2VUeXBlZEFycmF5KDQscGFja1UzMix1bnBhY2tVMzIpO3ZhciBGbG9hdDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrRjMyLHVucGFja0YzMik7dmFyIEZsb2F0NjRBcnJheT1tYWtlVHlwZWRBcnJheSg4LHBhY2tGNjQsdW5wYWNrRjY0KTtnbG9iYWwuSW50OEFycmF5PWdsb2JhbC5JbnQ4QXJyYXl8fEludDhBcnJheTtnbG9iYWwuVWludDhBcnJheT1nbG9iYWwuVWludDhBcnJheXx8VWludDhBcnJheTtnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheTtnbG9iYWwuSW50MTZBcnJheT1nbG9iYWwuSW50MTZBcnJheXx8SW50MTZBcnJheTtnbG9iYWwuVWludDE2QXJyYXk9Z2xvYmFsLlVpbnQxNkFycmF5fHxVaW50MTZBcnJheTtnbG9iYWwuSW50MzJBcnJheT1nbG9iYWwuSW50MzJBcnJheXx8SW50MzJBcnJheTtnbG9iYWwuVWludDMyQXJyYXk9Z2xvYmFsLlVpbnQzMkFycmF5fHxVaW50MzJBcnJheTtnbG9iYWwuRmxvYXQzMkFycmF5PWdsb2JhbC5GbG9hdDMyQXJyYXl8fEZsb2F0MzJBcnJheTtnbG9iYWwuRmxvYXQ2NEFycmF5PWdsb2JhbC5GbG9hdDY0QXJyYXl8fEZsb2F0NjRBcnJheX0pKCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihhcnJheSxpbmRleCl7cmV0dXJuIElzQ2FsbGFibGUoYXJyYXkuZ2V0KT9hcnJheS5nZXQoaW5kZXgpOmFycmF5W2luZGV4XX12YXIgSVNfQklHX0VORElBTj1mdW5jdGlvbigpe3ZhciB1MTZhcnJheT1uZXcgVWludDE2QXJyYXkoWzQ2NjBdKSx1OGFycmF5PW5ldyBVaW50OEFycmF5KHUxNmFycmF5LmJ1ZmZlcik7cmV0dXJuIHIodThhcnJheSwwKT09PTE4fSgpO2Z1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlcixieXRlT2Zmc2V0LGJ5dGVMZW5ndGgpe2lmKCEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fENsYXNzKGJ1ZmZlcik9PT0iQXJyYXlCdWZmZXIiKSl0aHJvdyBUeXBlRXJyb3IoKTtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQ+YnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiYnl0ZU9mZnNldCBvdXQgb2YgcmFuZ2UiKTtpZihieXRlTGVuZ3RoPT09dW5kZWZpbmVkKWJ5dGVMZW5ndGg9YnVmZmVyLmJ5dGVMZW5ndGgtYnl0ZU9mZnNldDtlbHNlIGJ5dGVMZW5ndGg9VG9VaW50MzIoYnl0ZUxlbmd0aCk7aWYoYnl0ZU9mZnNldCtieXRlTGVuZ3RoPmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoImJ5dGVPZmZzZXQgYW5kIGxlbmd0aCByZWZlcmVuY2UgYW4gYXJlYSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOmJ1ZmZlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6Ynl0ZU9mZnNldH0pfWZ1bmN0aW9uIG1ha2VHZXR0ZXIoYXJyYXlUeXBlKXtyZXR1cm4gZnVuY3Rpb24gR2V0Vmlld1ZhbHVlKGJ5dGVPZmZzZXQsbGl0dGxlRW5kaWFuKXtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQrYXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UPnRoaXMuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTtieXRlT2Zmc2V0Kz10aGlzLmJ5dGVPZmZzZXQ7dmFyIHVpbnQ4QXJyYXk9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsYnl0ZU9mZnNldCxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpLGJ5dGVzPVtdO2Zvcih2YXIgaT0wO2k8YXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UO2krPTEpYnl0ZXMucHVzaChyKHVpbnQ4QXJyYXksaSkpO2lmKEJvb2xlYW4obGl0dGxlRW5kaWFuKT09PUJvb2xlYW4oSVNfQklHX0VORElBTikpYnl0ZXMucmV2ZXJzZSgpO3JldHVybiByKG5ldyBhcnJheVR5cGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlciksMCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQ4Iix7dmFsdWU6bWFrZUdldHRlcihVaW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDgiLHt2YWx1ZTptYWtlR2V0dGVyKEludDhBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJnZXRVaW50MTYiLHt2YWx1ZTptYWtlR2V0dGVyKFVpbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDE2Iix7dmFsdWU6bWFrZUdldHRlcihJbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoVWludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0SW50MzIiLHt2YWx1ZTptYWtlR2V0dGVyKEludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0RmxvYXQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoRmxvYXQzMkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEZsb2F0NjQiLHt2YWx1ZTptYWtlR2V0dGVyKEZsb2F0NjRBcnJheSl9KTtmdW5jdGlvbiBtYWtlU2V0dGVyKGFycmF5VHlwZSl7cmV0dXJuIGZ1bmN0aW9uIFNldFZpZXdWYWx1ZShieXRlT2Zmc2V0LHZhbHVlLGxpdHRsZUVuZGlhbil7Ynl0ZU9mZnNldD1Ub1VpbnQzMihieXRlT2Zmc2V0KTtpZihieXRlT2Zmc2V0K2FycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVD50aGlzLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7dmFyIHR5cGVBcnJheT1uZXcgYXJyYXlUeXBlKFt2YWx1ZV0pLGJ5dGVBcnJheT1uZXcgVWludDhBcnJheSh0eXBlQXJyYXkuYnVmZmVyKSxieXRlcz1bXSxpLGJ5dGVWaWV3O2ZvcihpPTA7aTxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSlieXRlcy5wdXNoKHIoYnl0ZUFycmF5LGkpKTtpZihCb29sZWFuKGxpdHRsZUVuZGlhbik9PT1Cb29sZWFuKElTX0JJR19FTkRJQU4pKWJ5dGVzLnJldmVyc2UoKTtieXRlVmlldz1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixieXRlT2Zmc2V0LGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVCk7Ynl0ZVZpZXcuc2V0KGJ5dGVzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDgiLHt2YWx1ZTptYWtlU2V0dGVyKFVpbnQ4QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50OCIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsInNldFVpbnQxNiIse3ZhbHVlOm1ha2VTZXR0ZXIoVWludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50MTYiLHt2YWx1ZTptYWtlU2V0dGVyKEludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDMyIix7dmFsdWU6bWFrZVNldHRlcihVaW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRJbnQzMiIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRGbG9hdDMyIix7dmFsdWU6bWFrZVNldHRlcihGbG9hdDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0RmxvYXQ2NCIse3ZhbHVlOm1ha2VTZXR0ZXIoRmxvYXQ2NEFycmF5KX0pO2dsb2JhbC5EYXRhVmlldz1nbG9iYWwuRGF0YVZpZXd8fERhdGFWaWV3fSkoKX0pKHRoaXMpOw=="></script> <link href="data:text/css,%0A%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20%2D30px%3B%0Amargin%2Dright%3A%20%2D30px%3B%0Awhite%2Dspace%3A%20normal%3B%0A%7D%0A%0Abody%20%3E%20%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20auto%3B%0Amargin%2Dright%3A%20auto%3B%0A%7D%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Apadding%2Dright%3A%2012px%3B%0Avertical%2Dalign%3A%20top%3B%0A%7D%0A%40media%20only%20screen%20and%20%28max%2Dwidth%3A480px%29%20%7B%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20block%3B%0Apadding%2Dright%3A%20inherit%3B%0A%7D%0A%7D%0A" rel="stylesheet" /> <script src="data:application/javascript;base64,IWZ1bmN0aW9uIG8odSxhLGwpe2Z1bmN0aW9uIHMobixlKXtpZighYVtuXSl7aWYoIXVbbl0pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFlJiZ0KXJldHVybiB0KG4sITApO2lmKGYpcmV0dXJuIGYobiwhMCk7dmFyIHI9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbisiJyIpO3Rocm93IHIuY29kZT0iTU9EVUxFX05PVF9GT1VORCIscn12YXIgaT1hW25dPXtleHBvcnRzOnt9fTt1W25dWzBdLmNhbGwoaS5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXVbbl1bMV1bZV07cmV0dXJuIHModHx8ZSl9LGksaS5leHBvcnRzLG8sdSxhLGwpfXJldHVybiBhW25dLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGU9MDtlPGwubGVuZ3RoO2UrKylzKGxbZV0pO3JldHVybiBzfSh7MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCk7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5fdHlwZXM9e30sdGhpcy5fc2VxPTB9cmV0dXJuIHIoZSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdHlwZXNbZV07bnx8KG49dGhpcy5fdHlwZXNbZV09e30pO3ZhciByPSJzdWIiK3RoaXMuX3NlcSsrO3JldHVybiBuW3JdPXQscn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90eXBlc1tlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl7Zm9yKHZhciByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSYmbltyXT09PXQpcmV0dXJuIGRlbGV0ZSBuW3JdLHI7cmV0dXJuITF9aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiEoIW58fCFuW3RdKSYmKGRlbGV0ZSBuW3RdLHQpO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlIGZvciBsaXN0ZW5lciIpfX0se2tleToidHJpZ2dlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3R5cGVzW2VdO2Zvcih2YXIgaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJnJbaV0uY2FsbChuLHQpfX1dKSxlfSgpO24uZGVmYXVsdD1pfSx7fV0sMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5GaWx0ZXJIYW5kbGU9dm9pZCAwO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGk9bChlKCIuL2V2ZW50cyIpKSxvPWwoZSgiLi9maWx0ZXJzZXQiKSksdT1sKGUoIi4vZ3JvdXAiKSksYT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPTE7bi5GaWx0ZXJIYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGUsdCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IGEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPWEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5faWQ9ImZpbHRlciIrcysrLHRoaXMuc2V0R3JvdXAoZSl9cmV0dXJuIHIobixbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzO2lmKHRoaXMuX2dyb3VwIT09ZSYmKCh0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl9maWx0ZXJWYXImJih0aGlzLl9maWx0ZXJWYXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLmNsZWFyKCksdGhpcy5fdmFyT25DaGFuZ2VTdWI9bnVsbCx0aGlzLl9maWx0ZXJWYXI9bnVsbCx0aGlzLl9maWx0ZXJTZXQ9bnVsbCksdGhpcy5fZ3JvdXA9ZSkpKXtlPSgwLHUuZGVmYXVsdCkoZSksdGhpcy5fZmlsdGVyU2V0PSh0PWUudmFyKCJmaWx0ZXJzZXQiKSwobj10LmdldCgpKXx8KG49bmV3IG8uZGVmYXVsdCx0LnNldChuKSksbiksdGhpcy5fZmlsdGVyVmFyPSgwLHUuZGVmYXVsdCkoZSkudmFyKCJmaWx0ZXIiKTt2YXIgaT10aGlzLl9maWx0ZXJWYXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7ci5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUscil9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1pfX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShlKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxlKSx0aGlzLl9vbkNoYW5nZSh0KSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihlLHQpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihlLHQpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGUpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksbn0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxhPWUoIi4vdXRpbCIpO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZT09PXQ/MDplPHQ/LTE6dDxlPzE6dm9pZCAwfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gcihlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzPXt9LHRoaXMuX2tleXM9e30sdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl9hY3RpdmVIYW5kbGVzPTB9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7bnVsbCE9PXQmJih0PXQuc2xpY2UoMCkpLnNvcnQobCk7dmFyIG49KDAsYS5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbZV0sdCkscj1uLmFkZGVkLGk9bi5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbZV09dDtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl0aGlzLl9rZXlzW3Jbb11dPSh0aGlzLl9rZXlzW3Jbb11dfHwwKSsxO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKXRoaXMuX2tleXNbaVt1XV0tLTt0aGlzLl91cGRhdGVWYWx1ZSh0KX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyx0PU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09dCl0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3RoaXMuX2tleXNbZVtuXV09PT10JiZ0aGlzLl92YWx1ZS5wdXNoKGVbbl0pfX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dGhpcy5faGFuZGxlc1tlXSl7dmFyIHQ9dGhpcy5faGFuZGxlc1tlXTt0fHwodD1bXSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5fa2V5c1t0W25dXS0tO2RlbGV0ZSB0aGlzLl9oYW5kbGVzW2VdLHRoaXMuX3VwZGF0ZVZhbHVlKCl9fX0se2tleToidmFsdWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX19LHtrZXk6Il9hbGxLZXlzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Qua2V5cyh0aGlzLl9rZXlzKTtyZXR1cm4gZS5zb3J0KGwpLGV9fV0pLGV9KCk7bi5kZWZhdWx0PWl9LHsiLi91dGlsIjoxMX1dLDQ6W2Z1bmN0aW9uKGwsZSxzKXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtzLmRlZmF1bHQ9ZnVuY3Rpb24gZSh0KXt7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1Lmhhc093blByb3BlcnR5KHQpfHwodVt0XT1uZXcgYSh0KSksdVt0XTtpZigib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnIodCkpJiZ0Ll92YXJzJiZ0LnZhcilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYxPT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdKXJldHVybiBlKHRbMF0pO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBncm91cE5hbWUgYXJndW1lbnQiKX19O3ZhciB0LGk9bCgiLi92YXIiKSxvPSh0PWkpJiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fTtlLl9fY3Jvc3N0YWxrX2dyb3Vwcz1lLl9fY3Jvc3N0YWxrX2dyb3Vwc3x8e307dmFyIHU9ZS5fX2Nyb3NzdGFsa19ncm91cHM7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMubmFtZT1lLHRoaXMuX3ZhcnM9e319cmV0dXJuIG4odCxbe2tleToidmFyIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YXIgbmFtZSIpO3JldHVybiB0aGlzLl92YXJzLmhhc093blByb3BlcnR5KGUpfHwodGhpcy5fdmFyc1tlXT1uZXcgby5kZWZhdWx0KHRoaXMsZSkpLHRoaXMuX3ZhcnNbZV19fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoZSl9fV0pLHR9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi92YXIiOjEyfV0sNTpbZnVuY3Rpb24oZixlLGMpeyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0LG49ZigiLi9ncm91cCIpLHI9KHQ9bikmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9LGk9ZigiLi9zZWxlY3Rpb24iKSxvPWYoIi4vZmlsdGVyIiksdT1mKCIuL2lucHV0Iik7ZigiLi9pbnB1dF9zZWxlY3RpemUiKSxmKCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiKSxmKCIuL2lucHV0X3NsaWRlciIpO3ZhciBhPSgwLHIuZGVmYXVsdCkoImRlZmF1bHQiKTtmdW5jdGlvbiBsKGUpe3JldHVybiBhLnZhcihlKX1lLlNoaW55JiZlLlNoaW55LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJ1cGRhdGUtY2xpZW50LXZhbHVlIixmdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGUuZ3JvdXA/KDAsci5kZWZhdWx0KShlLmdyb3VwKS52YXIoZS5uYW1lKS5zZXQoZS52YWx1ZSk6bChlLm5hbWUpLnNldChlLnZhbHVlKX0pO3ZhciBzPXtncm91cDpyLmRlZmF1bHQsdmFyOmwsaGFzOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhcyhlKX0sU2VsZWN0aW9uSGFuZGxlOmkuU2VsZWN0aW9uSGFuZGxlLEZpbHRlckhhbmRsZTpvLkZpbHRlckhhbmRsZSxiaW5kOnUuYmluZH07Yy5kZWZhdWx0PXMsZS5jcm9zc3RhbGs9c30pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9ncm91cCI6NCwiLi9pbnB1dCI6NiwiLi9pbnB1dF9jaGVja2JveGdyb3VwIjo3LCIuL2lucHV0X3NlbGVjdGl6ZSI6OCwiLi9pbnB1dF9zbGlkZXIiOjksIi4vc2VsZWN0aW9uIjoxMH1dLDY6W2Z1bmN0aW9uKGUsdCxhKXsoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxhLnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3JbZS5jbGFzc05hbWVdPWUsdC5kb2N1bWVudCYmImNvbXBsZXRlIiE9PXQuZG9jdW1lbnQucmVhZHlTdGF0ZT9vKGZ1bmN0aW9uKCl7bigpfSk6dC5kb2N1bWVudCYmc2V0VGltZW91dChuLDEwMCl9LGEuYmluZD1uO3ZhciBvPXQualF1ZXJ5LHI9e307ZnVuY3Rpb24gbigpe09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cltlXTtvKCIuIituLmNsYXNzTmFtZSkubm90KCIuY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikuZWFjaChmdW5jdGlvbihlLHQpe2kobix0KX0pfSl9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPW8odCkuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIit0LmlkLnJlcGxhY2UoLyhbISIjJCUmJygpKissLi86Ozw9Pj9AW1xcXF1eYHt8fX5dKS9nLCJcXCQxIikrIiddIikscj1KU09OLnBhcnNlKG5bMF0uaW5uZXJUZXh0KSxpPWUuZmFjdG9yeSh0LHIpO28odCkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIixpKSxvKHQpLmFkZENsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKX1pZih0LlNoaW55KXt2YXIgZT1uZXcgdC5TaGlueS5JbnB1dEJpbmRpbmcsdT10LmpRdWVyeTt1LmV4dGVuZChlLHtmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpLmZpbmQoIi5jcm9zc3RhbGstaW5wdXQiKX0saW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgdCxuO3UoZSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHwobj1vKHQ9ZSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXtuLmhhc0NsYXNzKGUpJiYhbi5oYXNDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikmJmkocltlXSx0KX0pKX0sZ2V0SWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9LGdldFZhbHVlOmZ1bmN0aW9uKGUpe30sc2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt9LHJlY2VpdmVNZXNzYWdlOmZ1bmN0aW9uKGUsdCl7fSxzdWJzY3JpYmU6ZnVuY3Rpb24oZSx0KXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnJlc3VtZSgpfSx1bnN1YnNjcmliZTpmdW5jdGlvbihlKXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnN1c3BlbmQoKX19KSx0LlNoaW55LmlucHV0QmluZGluZ3MucmVnaXN0ZXIoZSwiY3Jvc3N0YWxrLmlucHV0QmluZGluZyIpfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDc6W2Z1bmN0aW9uKHIsZSx0KXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShyKCIuL2lucHV0IikpLG49cigiLi9maWx0ZXIiKTt2YXIgYT1lLmpRdWVyeTt0LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1jaGVja2JveGdyb3VwIixmYWN0b3J5OmZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IG4uRmlsdGVySGFuZGxlKHIuZ3JvdXApLG89dm9pZCAwLHU9YShlKTtyZXR1cm4gdS5vbigiY2hhbmdlIiwiaW5wdXRbdHlwZT0nY2hlY2tib3gnXSIsZnVuY3Rpb24oKXt2YXIgZT11LmZpbmQoImlucHV0W3R5cGU9J2NoZWNrYm94J106Y2hlY2tlZCIpO2lmKDA9PT1lLmxlbmd0aClvPW51bGwsaS5jbGVhcigpO2Vsc2V7dmFyIHQ9e307ZS5lYWNoKGZ1bmN0aW9uKCl7ci5tYXBbdGhpcy52YWx1ZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLnNvcnQoKSxvPW4saS5zZXQobil9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXtpLmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe28mJmkuc2V0KG8pfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjZ9XSw4OltmdW5jdGlvbihyLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1uKHIoIi4vaW5wdXQiKSksbD1uKHIoIi4vdXRpbCIpKSxzPXIoIi4vZmlsdGVyIik7ZnVuY3Rpb24gbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9dmFyIGY9ZS5qUXVlcnk7dC5yZWdpc3Rlcih7Y2xhc3NOYW1lOiJjcm9zc3RhbGstaW5wdXQtc2VsZWN0IixmYWN0b3J5OmZ1bmN0aW9uKGUsbil7dmFyIHQ9bC5kYXRhZnJhbWVUb0QzKG4uaXRlbXMpLHI9e29wdGlvbnM6W3t2YWx1ZToiIixsYWJlbDoiKEFsbCkifV0uY29uY2F0KHQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0saT1mKGUpLmZpbmQoInNlbGVjdCIpWzBdLG89ZihpKS5zZWxlY3RpemUocilbMF0uc2VsZWN0aXplLHU9bmV3IHMuRmlsdGVySGFuZGxlKG4uZ3JvdXApLGE9dm9pZCAwO3JldHVybiBvLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7aWYoMD09PW8uaXRlbXMubGVuZ3RoKWE9bnVsbCx1LmNsZWFyKCk7ZWxzZXt2YXIgdD17fTtvLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7bi5tYXBbZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgZT1PYmplY3Qua2V5cyh0KTtlLnNvcnQoKSxhPWUsdS5zZXQoZSl9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXt1LmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe2EmJnUuc2V0KGEpfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjYsIi4vdXRpbCI6MTF9XSw5OltmdW5jdGlvbihuLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyPSEwLGk9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgdSxhPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0odT1hLm5leHQoKSkuZG9uZSkmJihuLnB1c2godS52YWx1ZSksIXR8fG4ubGVuZ3RoIT09dCk7cj0hMCk7fWNhdGNoKGUpe2k9ITAsbz1lfWZpbmFsbHl7dHJ5eyFyJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIG59KGUsdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSx0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShuKCIuL2lucHV0IikpLGE9bigiLi9maWx0ZXIiKTt2YXIgdj1lLmpRdWVyeSxwPWUuc3RyZnRpbWU7ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgbj1lLnRvU3RyaW5nKCk7bi5sZW5ndGg8dDspbj0iMCIrbjtyZXR1cm4gbn10LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oZSxsKXt2YXIgcz1uZXcgYS5GaWx0ZXJIYW5kbGUobC5ncm91cCksdD17fSxmPXYoZSkuZmluZCgiaW5wdXQiKSxuPWYuZGF0YSgiZGF0YS10eXBlIikscj1mLmRhdGEoInRpbWUtZm9ybWF0IiksaT1mLmRhdGEoInJvdW5kIiksbz12b2lkIDA7aWYoImRhdGUiPT09bilvPXAudXRjKCksdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX07ZWxzZSBpZigiZGF0ZXRpbWUiPT09bil7dmFyIHU9Zi5kYXRhKCJ0aW1lem9uZSIpO289dT9wLnRpbWV6b25lKHUpOnAsdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX19ZWxzZSJudW1iZXIiPT09biYmdm9pZCAwIT09aSYmKHQucHJldHRpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5wb3coMTAsaSk7cmV0dXJuIE1hdGgucm91bmQoZSp0KS90fSk7ZnVuY3Rpb24gYygpe3ZhciBlPWYuZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5yZXN1bHQsdD12b2lkIDAsbj1mLmRhdGEoImRhdGEtdHlwZSIpO3JldHVybiB0PSJkYXRlIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9bmV3IERhdGUoK2UpKWluc3RhbmNlb2YgRGF0ZT90LmdldFVUQ0Z1bGxZZWFyKCkrIi0iK3kodC5nZXRVVENNb250aCgpKzEsMikrIi0iK3kodC5nZXRVVENEYXRlKCksMik6bnVsbDt2YXIgdH06ImRhdGV0aW1lIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuK2UvMWUzfTpmdW5jdGlvbihlKXtyZXR1cm4rZX0sImRvdWJsZSI9PT1mLmRhdGEoImlvblJhbmdlU2xpZGVyIikub3B0aW9ucy50eXBlP1t0KGUuZnJvbSksdChlLnRvKV06dChlLmZyb20pfWYuaW9uUmFuZ2VTbGlkZXIodCk7dmFyIGg9bnVsbDtyZXR1cm4gZi5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihlKXtpZighZi5kYXRhKCJ1cGRhdGluZyIpJiYhZi5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciB0PWMoKSxuPWQodCwyKSxyPW5bMF0saT1uWzFdLG89W10sdT0wO3U8bC52YWx1ZXMubGVuZ3RoO3UrKyl7dmFyIGE9bC52YWx1ZXNbdV07cjw9YSYmYTw9aSYmby5wdXNoKGwua2V5c1t1XSl9by5zb3J0KCkscy5zZXQobyksaD1vfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7cy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtoJiZzLnNldChoKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uU2VsZWN0aW9uSGFuZGxlPXZvaWQgMDt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxpPWEoZSgiLi9ldmVudHMiKSksbz1hKGUoIi4vZ3JvdXAiKSksdT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW4uU2VsZWN0aW9uSGFuZGxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHUuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXUuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5zZXRHcm91cChlKX1yZXR1cm4gcihuLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLl9ncm91cCE9PWUmJih0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1lKSl7dGhpcy5fdmFyPSgwLG8uZGVmYXVsdCkoZSkudmFyKCJzZWxlY3Rpb24iKTt2YXIgbj10aGlzLl92YXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7dC5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUsdCl9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1ufX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoZSx0aGlzLl9tZXJnZUV4dHJhSW5mbyh0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oZSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oZSx0KX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoZSx0KX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxufSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O2Z1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PTE7dDxlLmxlbmd0aDt0KyspaWYoZVt0XTw9ZVt0LTFdKXRocm93IG5ldyBFcnJvcigiTGlzdCBpcyBub3Qgc29ydGVkIG9yIGNvbnRhaW5zIGR1cGxpY2F0ZSIpfW4uZXh0ZW5kPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoMTx0P3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKG51bGwhPW8pZm9yKHZhciB1IGluIG8pby5oYXNPd25Qcm9wZXJ0eSh1KSYmKGVbdV09b1t1XSl9cmV0dXJuIGV9LG4uY2hlY2tTb3J0ZWQ9dSxuLmRpZmZTb3J0ZWRMaXN0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj0wO2V8fChlPVtdKTt0fHwodD1bXSk7dmFyIGk9W10sbz1bXTt1KGUpLHUodCk7Zm9yKDtuPGUubGVuZ3RoJiZyPHQubGVuZ3RoOyllW25dPT09dFtyXT8obisrLHIrKyk6ZVtuXTx0W3JdP2kucHVzaChlW24rK10pOm8ucHVzaCh0W3IrK10pO248ZS5sZW5ndGgmJihpPWkuY29uY2F0KGUuc2xpY2UobikpKTtyPHQubGVuZ3RoJiYobz1vLmNvbmNhdCh0LnNsaWNlKHIpKSk7cmV0dXJue3JlbW92ZWQ6aSxhZGRlZDpvfX0sbi5kYXRhZnJhbWVUb0QzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49dm9pZCAwO2Zvcih2YXIgciBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KHIpJiZ0LnB1c2gociksIm9iamVjdCIhPT1sKGVbcl0pfHx2b2lkIDA9PT1lW3JdLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTtpZih2b2lkIDAhPT1uJiZuIT09ZVtyXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO249ZVtyXS5sZW5ndGh9Zm9yKHZhciBpPVtdLG89dm9pZCAwLHU9MDt1PG47dSsrKXtvPXt9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKW9bdFthXV09ZVt0W2FdXVt1XTtpLnB1c2gobyl9cmV0dXJuIGl9O24uU3Vic2NyaXB0aW9uVHJhY2tlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5fZW1pdHRlcj1lLHRoaXMuX3N1YnM9e319cmV0dXJuIHIodCxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZW1pdHRlci5vbihlLHQpO3JldHVybiB0aGlzLl9zdWJzW25dPWUsbn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9lbWl0dGVyLm9mZihlLHQpO3JldHVybiBuJiZkZWxldGUgdGhpcy5fc3Vic1tuXSxufX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll9lbWl0dGVyLm9mZihuW2VdLGUpfSl9fV0pLHR9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxlLGwpeyhmdW5jdGlvbihvKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlLHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCksbj1hKCIuL2V2ZW50cyIpLGk9KGU9bikmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9O3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsciksdGhpcy5fZ3JvdXA9ZSx0aGlzLl9uYW1lPXQsdGhpcy5fdmFsdWU9bix0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gdChyLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX3ZhbHVlIT09ZSl7dmFyIG49dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9ZTt2YXIgcj17fTtpZih0JiYib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnUodCkpKWZvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihyW2ldPXRbaV0pO3Iub2xkVmFsdWU9bixyLnZhbHVlPWUsdGhpcy5fZXZlbnRzLnRyaWdnZXIoImNoYW5nZSIscix0aGlzKSxvLlNoaW55JiZvLlNoaW55Lm9uSW5wdXRDaGFuZ2UmJm8uU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLSIrKG51bGwhPT10aGlzLl9ncm91cC5uYW1lP3RoaXMuX2dyb3VwLm5hbWUrIi0iOiIiKSt0aGlzLl9uYW1lLHZvaWQgMD09PWU/bnVsbDplKX19fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZXZlbnRzLm9uKGUsdCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2V2ZW50cy5vZmYoZSx0KX19XSkscn0oKTtsLmRlZmF1bHQ9cn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2V2ZW50cyI6MX1dfSx7fSxbNV0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1jcm9zc3RhbGsubWluLmpzLm1hcA=="></script> <link href="data:text/css,%0Aslide%3Anot%28%2Ecurrent%29%20%2Eplotly%2Ehtml%2Dwidget%7B%0Adisplay%3A%20none%3B%0A%7D%0A" rel="stylesheet" /> <script src="data:application/javascript;base64,LyoqCiogcGxvdGx5LmpzIHYxLjU3LjEKKiBDb3B5cmlnaHQgMjAxMi0yMDIwLCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNleygidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLlBsb3RseT10KCl9fSgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7ZnVuY3Rpb24gaShvLHMpe2lmKCFyW29dKXtpZighZVtvXSl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIXMmJmwpcmV0dXJuIGwobywhMCk7aWYoYSlyZXR1cm4gYShvLCEwKTt2YXIgYz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgYy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixjfXZhciB1PXJbb109e2V4cG9ydHM6e319O2Vbb11bMF0uY2FsbCh1LmV4cG9ydHMsKGZ1bmN0aW9uKHQpe3JldHVybiBpKGVbb11bMV1bdF18fHQpfSksdSx1LmV4cG9ydHMsdCxlLHIsbil9cmV0dXJuIHJbb10uZXhwb3J0c31mb3IodmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsbz0wO288bi5sZW5ndGg7bysrKWkobltvXSk7cmV0dXJuIGl9KHsxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NyYy9saWIiKSxpPXsiWCxYIGRpdiI6ImRpcmVjdGlvbjpsdHI7Zm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDsiLCJYIGlucHV0LFggYnV0dG9uIjoiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOyIsIlggaW5wdXQ6Zm9jdXMsWCBidXR0b246Zm9jdXMiOiJvdXRsaW5lOm5vbmU7IiwiWCBhIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCBhOmhvdmVyIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCAuY3Jpc3AiOiJzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC51c2VyLXNlbGVjdC1ub25lIjoiLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7IiwiWCBzdmciOiJvdmVyZmxvdzpoaWRkZW47IiwiWCBzdmcgYSI6ImZpbGw6IzQ0N2FkYjsiLCJYIHN2ZyBhOmhvdmVyIjoiZmlsbDojM2M2ZGM1OyIsIlggLm1haW4tc3ZnIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7IiwiWCAubWFpbi1zdmcgLmRyYWdsYXllciI6InBvaW50ZXItZXZlbnRzOmFsbDsiLCJYIC5jdXJzb3ItZGVmYXVsdCI6ImN1cnNvcjpkZWZhdWx0OyIsIlggLmN1cnNvci1wb2ludGVyIjoiY3Vyc29yOnBvaW50ZXI7IiwiWCAuY3Vyc29yLWNyb3NzaGFpciI6ImN1cnNvcjpjcm9zc2hhaXI7IiwiWCAuY3Vyc29yLW1vdmUiOiJjdXJzb3I6bW92ZTsiLCJYIC5jdXJzb3ItY29sLXJlc2l6ZSI6ImN1cnNvcjpjb2wtcmVzaXplOyIsIlggLmN1cnNvci1yb3ctcmVzaXplIjoiY3Vyc29yOnJvdy1yZXNpemU7IiwiWCAuY3Vyc29yLW5zLXJlc2l6ZSI6ImN1cnNvcjpucy1yZXNpemU7IiwiWCAuY3Vyc29yLWV3LXJlc2l6ZSI6ImN1cnNvcjpldy1yZXNpemU7IiwiWCAuY3Vyc29yLXN3LXJlc2l6ZSI6ImN1cnNvcjpzdy1yZXNpemU7IiwiWCAuY3Vyc29yLXMtcmVzaXplIjoiY3Vyc29yOnMtcmVzaXplOyIsIlggLmN1cnNvci1zZS1yZXNpemUiOiJjdXJzb3I6c2UtcmVzaXplOyIsIlggLmN1cnNvci13LXJlc2l6ZSI6ImN1cnNvcjp3LXJlc2l6ZTsiLCJYIC5jdXJzb3ItZS1yZXNpemUiOiJjdXJzb3I6ZS1yZXNpemU7IiwiWCAuY3Vyc29yLW53LXJlc2l6ZSI6ImN1cnNvcjpudy1yZXNpemU7IiwiWCAuY3Vyc29yLW4tcmVzaXplIjoiY3Vyc29yOm4tcmVzaXplOyIsIlggLmN1cnNvci1uZS1yZXNpemUiOiJjdXJzb3I6bmUtcmVzaXplOyIsIlggLmN1cnNvci1ncmFiIjoiY3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYjsiLCJYIC5tb2RlYmFyIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDtyaWdodDoycHg7IiwiWCAuZWFzZS1iZyI6Ii13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczstbW96LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzOyIsIlggLm1vZGViYXItLWhvdmVyPjpub3QoLndhdGVybWFyaykiOiJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzO3RyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7IiwiWDpob3ZlciAubW9kZWJhci0taG92ZXIgLm1vZGViYXItZ3JvdXAiOiJvcGFjaXR5OjE7IiwiWCAubW9kZWJhci1ncm91cCI6ImZsb2F0OmxlZnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctbGVmdDo4cHg7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDsiLCJYIC5tb2RlYmFyLWJ0biI6InBvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6M3B4IDRweDtoZWlnaHQ6MjJweDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDpub3JtYWw7Ym94LXNpemluZzpib3JkZXItYm94OyIsIlggLm1vZGViYXItYnRuIHN2ZyI6InBvc2l0aW9uOnJlbGF0aXZlO3RvcDoycHg7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCI6ImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOndyYXA7YWxpZ24tY29udGVudDpmbGV4LWVuZDttYXgtaGVpZ2h0OjEwMCU7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCBzdmciOiJ0b3A6LTFweDsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwIjoiZGlzcGxheTpibG9jaztmbG9hdDpub25lO3BhZGRpbmctbGVmdDowcHg7cGFkZGluZy1ib3R0b206OHB4OyIsIlggLm1vZGViYXIudmVydGljYWwgLm1vZGViYXItZ3JvdXAgLm1vZGViYXItYnRuIjoiZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmNlbnRlcjsiLCJYIFtkYXRhLXRpdGxlXTpiZWZvcmUsWCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7ZGlzcGxheTpub25lO29wYWNpdHk6MDt6LWluZGV4OjEwMDE7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MTEwJTtyaWdodDo1MCU7IiwiWCBbZGF0YS10aXRsZV06aG92ZXI6YmVmb3JlLFggW2RhdGEtdGl0bGVdOmhvdmVyOmFmdGVyIjoiZGlzcGxheTpibG9jaztvcGFjaXR5OjE7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlIjoiY29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7ei1pbmRleDoxMDAyO21hcmdpbi10b3A6LTEycHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNjk3MzhhO21hcmdpbi1yaWdodDotNnB4OyIsIlggW2RhdGEtdGl0bGVdOmFmdGVyIjoiY29udGVudDphdHRyKGRhdGEtdGl0bGUpO2JhY2tncm91bmQ6IzY5NzM4YTtjb2xvcjp3aGl0ZTtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDsiLCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlLFggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTphZnRlciI6InRvcDowJTtyaWdodDoyMDAlOyIsIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmUiOiJib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0LWNvbG9yOiM2OTczOGE7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0zMHB4OyIsIlggLnNlbGVjdC1vdXRsaW5lIjoiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnNlbGVjdC1vdXRsaW5lLTEiOiJzdHJva2U6d2hpdGU7IiwiWCAuc2VsZWN0LW91dGxpbmUtMiI6InN0cm9rZTpibGFjaztzdHJva2UtZGFzaGFycmF5OjJweCAycHg7IixZOiJmb250LWZhbWlseTonT3BlbiBTYW5zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7cG9zaXRpb246Zml4ZWQ7dG9wOjUwcHg7cmlnaHQ6MjBweDt6LWluZGV4OjEwMDAwO2ZvbnQtc2l6ZToxMHB0O21heC13aWR0aDoxODBweDsiLCJZIHAiOiJtYXJnaW46MDsiLCJZIC5ub3RpZmllci1ub3RlIjoibWluLXdpZHRoOjE4MHB4O21heC13aWR0aDoyNTBweDtib3JkZXI6MXB4IHNvbGlkICNmZmY7ei1pbmRleDozMDAwO21hcmdpbjowO2JhY2tncm91bmQtY29sb3I6IzhjOTdhZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTQwLDE1MSwxNzUsMC45KTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7d29yZC13cmFwOmJyZWFrLXdvcmQ7LW1zLWh5cGhlbnM6YXV0bzstd2Via2l0LWh5cGhlbnM6YXV0bztoeXBoZW5zOmF1dG87IiwiWSAubm90aWZpZXItY2xvc2UiOiJjb2xvcjojZmZmO29wYWNpdHk6MC44O2Zsb2F0OnJpZ2h0O3BhZGRpbmc6MCA1cHg7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDsiLCJZIC5ub3RpZmllci1jbG9zZTpob3ZlciI6ImNvbG9yOiM0NDQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7In07Zm9yKHZhciBhIGluIGkpe3ZhciBvPWEucmVwbGFjZSgvXiwvLCIgLCIpLnJlcGxhY2UoL1gvZywiLmpzLXBsb3RseS1wbG90IC5wbG90bHkiKS5yZXBsYWNlKC9ZL2csIi5wbG90bHktbm90aWZpZXIiKTtuLmFkZFN0eWxlUnVsZShvLGlbYV0pfX0seyIuLi9zcmMvbGliIjo3NTB9XSwyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9hZ2dyZWdhdGUiOjEzMzZ9XSwzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhciIpfSx7Ii4uL3NyYy90cmFjZXMvYmFyIjo5MDB9XSw0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhcnBvbGFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXJwb2xhciI6OTEzfV0sNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9ib3giKX0seyIuLi9zcmMvdHJhY2VzL2JveCI6OTIzfV0sNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIil9LHsiLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXJzIjo2MTN9XSw3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIil9LHsiLi4vc3JjL3RyYWNlcy9jYW5kbGVzdGljayI6OTMyfV0sODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jYXJwZXQiKX0seyIuLi9zcmMvdHJhY2VzL2NhcnBldCI6OTUxfV0sOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRoIil9LHsiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRoIjo5NjV9XSwxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRobWFwYm94Iil9LHsiLi4vc3JjL3RyYWNlcy9jaG9yb3BsZXRobWFwYm94Ijo5NzJ9XSwxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb25lIil9LHsiLi4vc3JjL3RyYWNlcy9jb25lIjo5Nzh9XSwxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb250b3VyIil9LHsiLi4vc3JjL3RyYWNlcy9jb250b3VyIjo5OTN9XSwxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0Iil9LHsiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0IjoxMDA0fV0sMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy9jb3JlIil9LHsiLi4vc3JjL2NvcmUiOjcyN31dLDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2RlbnNpdHltYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL2RlbnNpdHltYXBib3giOjEwMTJ9XSwxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIjoxMzM3fV0sMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvZnVubmVsIil9LHsiLi4vc3JjL3RyYWNlcy9mdW5uZWwiOjEwMjJ9XSwxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9mdW5uZWxhcmVhIil9LHsiLi4vc3JjL3RyYWNlcy9mdW5uZWxhcmVhIjoxMDMxfV0sMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnkiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5IjoxMzM4fV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGVhdG1hcCIpfSx7Ii4uL3NyYy90cmFjZXMvaGVhdG1hcCI6MTA0NH1dLDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCIpfSx7Ii4uL3NyYy90cmFjZXMvaGVhdG1hcGdsIjoxMDU0fV0sMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iOjEwNjZ9XSwyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZCIpfSx7Ii4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmQiOjEwNzJ9XSwyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkY29udG91ciI6MTA3Nn1dLDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2ltYWdlIil9LHsiLi4vc3JjL3RyYWNlcy9pbWFnZSI6MTA4NH1dLDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29yZSIpO24ucmVnaXN0ZXIoW3QoIi4vYmFyIiksdCgiLi9ib3giKSx0KCIuL2hlYXRtYXAiKSx0KCIuL2hpc3RvZ3JhbSIpLHQoIi4vaGlzdG9ncmFtMmQiKSx0KCIuL2hpc3RvZ3JhbTJkY29udG91ciIpLHQoIi4vY29udG91ciIpLHQoIi4vc2NhdHRlcnRlcm5hcnkiKSx0KCIuL3Zpb2xpbiIpLHQoIi4vZnVubmVsIiksdCgiLi93YXRlcmZhbGwiKSx0KCIuL2ltYWdlIiksdCgiLi9waWUiKSx0KCIuL3N1bmJ1cnN0IiksdCgiLi90cmVlbWFwIiksdCgiLi9mdW5uZWxhcmVhIiksdCgiLi9zY2F0dGVyM2QiKSx0KCIuL3N1cmZhY2UiKSx0KCIuL2lzb3N1cmZhY2UiKSx0KCIuL3ZvbHVtZSIpLHQoIi4vbWVzaDNkIiksdCgiLi9jb25lIiksdCgiLi9zdHJlYW10dWJlIiksdCgiLi9zY2F0dGVyZ2VvIiksdCgiLi9jaG9yb3BsZXRoIiksdCgiLi9zY2F0dGVyZ2wiKSx0KCIuL3NwbG9tIiksdCgiLi9wb2ludGNsb3VkIiksdCgiLi9oZWF0bWFwZ2wiKSx0KCIuL3BhcmNvb3JkcyIpLHQoIi4vcGFyY2F0cyIpLHQoIi4vc2NhdHRlcm1hcGJveCIpLHQoIi4vY2hvcm9wbGV0aG1hcGJveCIpLHQoIi4vZGVuc2l0eW1hcGJveCIpLHQoIi4vc2Fua2V5IiksdCgiLi9pbmRpY2F0b3IiKSx0KCIuL3RhYmxlIiksdCgiLi9jYXJwZXQiKSx0KCIuL3NjYXR0ZXJjYXJwZXQiKSx0KCIuL2NvbnRvdXJjYXJwZXQiKSx0KCIuL29obGMiKSx0KCIuL2NhbmRsZXN0aWNrIiksdCgiLi9zY2F0dGVycG9sYXIiKSx0KCIuL3NjYXR0ZXJwb2xhcmdsIiksdCgiLi9iYXJwb2xhciIpXSksbi5yZWdpc3RlcihbdCgiLi9hZ2dyZWdhdGUiKSx0KCIuL2ZpbHRlciIpLHQoIi4vZ3JvdXBieSIpLHQoIi4vc29ydCIpXSksbi5yZWdpc3RlcihbdCgiLi9jYWxlbmRhcnMiKV0pLGUuZXhwb3J0cz1ufSx7Ii4vYWdncmVnYXRlIjoyLCIuL2JhciI6MywiLi9iYXJwb2xhciI6NCwiLi9ib3giOjUsIi4vY2FsZW5kYXJzIjo2LCIuL2NhbmRsZXN0aWNrIjo3LCIuL2NhcnBldCI6OCwiLi9jaG9yb3BsZXRoIjo5LCIuL2Nob3JvcGxldGhtYXBib3giOjEwLCIuL2NvbmUiOjExLCIuL2NvbnRvdXIiOjEyLCIuL2NvbnRvdXJjYXJwZXQiOjEzLCIuL2NvcmUiOjE0LCIuL2RlbnNpdHltYXBib3giOjE1LCIuL2ZpbHRlciI6MTYsIi4vZnVubmVsIjoxNywiLi9mdW5uZWxhcmVhIjoxOCwiLi9ncm91cGJ5IjoxOSwiLi9oZWF0bWFwIjoyMCwiLi9oZWF0bWFwZ2wiOjIxLCIuL2hpc3RvZ3JhbSI6MjIsIi4vaGlzdG9ncmFtMmQiOjIzLCIuL2hpc3RvZ3JhbTJkY29udG91ciI6MjQsIi4vaW1hZ2UiOjI1LCIuL2luZGljYXRvciI6MjcsIi4vaXNvc3VyZmFjZSI6MjgsIi4vbWVzaDNkIjoyOSwiLi9vaGxjIjozMCwiLi9wYXJjYXRzIjozMSwiLi9wYXJjb29yZHMiOjMyLCIuL3BpZSI6MzMsIi4vcG9pbnRjbG91ZCI6MzQsIi4vc2Fua2V5IjozNSwiLi9zY2F0dGVyM2QiOjM2LCIuL3NjYXR0ZXJjYXJwZXQiOjM3LCIuL3NjYXR0ZXJnZW8iOjM4LCIuL3NjYXR0ZXJnbCI6MzksIi4vc2NhdHRlcm1hcGJveCI6NDAsIi4vc2NhdHRlcnBvbGFyIjo0MSwiLi9zY2F0dGVycG9sYXJnbCI6NDIsIi4vc2NhdHRlcnRlcm5hcnkiOjQzLCIuL3NvcnQiOjQ0LCIuL3NwbG9tIjo0NSwiLi9zdHJlYW10dWJlIjo0NiwiLi9zdW5idXJzdCI6NDcsIi4vc3VyZmFjZSI6NDgsIi4vdGFibGUiOjQ5LCIuL3RyZWVtYXAiOjUwLCIuL3Zpb2xpbiI6NTEsIi4vdm9sdW1lIjo1MiwiLi93YXRlcmZhbGwiOjUzfV0sMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaW5kaWNhdG9yIil9LHsiLi4vc3JjL3RyYWNlcy9pbmRpY2F0b3IiOjEwOTJ9XSwyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlIil9LHsiLi4vc3JjL3RyYWNlcy9pc29zdXJmYWNlIjoxMDk4fV0sMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvbWVzaDNkIil9LHsiLi4vc3JjL3RyYWNlcy9tZXNoM2QiOjExMDN9XSwzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9vaGxjIil9LHsiLi4vc3JjL3RyYWNlcy9vaGxjIjoxMTA4fV0sMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcGFyY2F0cyIpfSx7Ii4uL3NyYy90cmFjZXMvcGFyY2F0cyI6MTExN31dLDMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BhcmNvb3JkcyIpfSx7Ii4uL3NyYy90cmFjZXMvcGFyY29vcmRzIjoxMTI3fV0sMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcGllIil9LHsiLi4vc3JjL3RyYWNlcy9waWUiOjExMzh9XSwzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9wb2ludGNsb3VkIil9LHsiLi4vc3JjL3RyYWNlcy9wb2ludGNsb3VkIjoxMTQ3fV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2Fua2V5Iil9LHsiLi4vc3JjL3RyYWNlcy9zYW5rZXkiOjExNTN9XSwzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyM2QiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZCI6MTE5MX1dLDM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJjYXJwZXQiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJjYXJwZXQiOjExOTh9XSwzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2VvIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2VvIjoxMjA2fV0sMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdsIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2wiOjEyMTl9XSw0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVybWFwYm94Iil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVybWFwYm94IjoxMjI5fV0sNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXIiOjEyMzd9XSw0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXJnbCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyZ2wiOjEyNDR9XSw0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVydGVybmFyeSIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnkiOjEyNTJ9XSw0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvc29ydCIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiOjEzNDB9XSw0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zcGxvbSIpfSx7Ii4uL3NyYy90cmFjZXMvc3Bsb20iOjEyNjF9XSw0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zdHJlYW10dWJlIil9LHsiLi4vc3JjL3RyYWNlcy9zdHJlYW10dWJlIjoxMjY5fV0sNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3VuYnVyc3QiKX0seyIuLi9zcmMvdHJhY2VzL3N1bmJ1cnN0IjoxMjc3fV0sNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3VyZmFjZSIpfSx7Ii4uL3NyYy90cmFjZXMvc3VyZmFjZSI6MTI4Nn1dLDQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3RhYmxlIil9LHsiLi4vc3JjL3RyYWNlcy90YWJsZSI6MTI5NH1dLDUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3RyZWVtYXAiKX0seyIuLi9zcmMvdHJhY2VzL3RyZWVtYXAiOjEzMDN9XSw1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy92aW9saW4iKX0seyIuLi9zcmMvdHJhY2VzL3Zpb2xpbiI6MTMxNX1dLDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3ZvbHVtZSIpfSx7Ii4uL3NyYy90cmFjZXMvdm9sdW1lIjoxMzIzfV0sNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvd2F0ZXJmYWxsIil9LHsiLi4vc3JjL3RyYWNlcy93YXRlcmZhbGwiOjEzMzF9XSw1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmV5ZXx8WzAsMCwxXSxyPXQuY2VudGVyfHxbMCwwLDBdLHM9dC51cHx8WzAsMSwwXSxsPXQuZGlzdGFuY2VMaW1pdHN8fFswLDEvMF0sYz10Lm1vZGV8fCJ0dXJudGFibGUiLHU9bigpLGg9aSgpLGY9YSgpO3JldHVybiB1LnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksdS5sb29rQXQoMCxlLHIscyksaC5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLGgubG9va0F0KDAsZSxyLHMpLGYuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxmLmxvb2tBdCgwLGUscixzKSxuZXcgbyh7dHVybnRhYmxlOnUsb3JiaXQ6aCxtYXRyaXg6Zn0sYyl9O3ZhciBuPXQoInR1cm50YWJsZS1jYW1lcmEtY29udHJvbGxlciIpLGk9dCgib3JiaXQtY2FtZXJhLWNvbnRyb2xsZXIiKSxhPXQoIm1hdHJpeC1jYW1lcmEtY29udHJvbGxlciIpO2Z1bmN0aW9uIG8odCxlKXt0aGlzLl9jb250cm9sbGVyTmFtZXM9T2JqZWN0LmtleXModCksdGhpcy5fY29udHJvbGxlckxpc3Q9dGhpcy5fY29udHJvbGxlck5hbWVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSksdGhpcy5fbW9kZT1lLHRoaXMuX2FjdGl2ZT10W2VdLHRoaXMuX2FjdGl2ZXx8KHRoaXMuX21vZGU9InR1cm50YWJsZSIsdGhpcy5fYWN0aXZlPXQudHVybnRhYmxlKSx0aGlzLm1vZGVzPXRoaXMuX2NvbnRyb2xsZXJOYW1lcyx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9dmFyIHM9by5wcm90b3R5cGU7W1siZmx1c2giLDFdLFsiaWRsZSIsMV0sWyJsb29rQXQiLDRdLFsicm90YXRlIiw0XSxbInBhbiIsNF0sWyJ0cmFuc2xhdGUiLDRdLFsic2V0TWF0cml4IiwyXSxbInNldERpc3RhbmNlTGltaXRzIiwyXSxbInNldERpc3RhbmNlIiwyXV0uZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0scj1bXSxuPTA7bjx0WzFdOysrbilyLnB1c2goImEiK24pO3ZhciBpPSJ2YXIgY2M9dGhpcy5fY29udHJvbGxlckxpc3Q7Zm9yKHZhciBpPTA7aTxjYy5sZW5ndGg7KytpKXtjY1tpXS4iK3RbMF0rIigiK3Iuam9pbigpKyIpfSI7c1tlXT1GdW5jdGlvbi5hcHBseShudWxsLHIuY29uY2F0KGkpKX0pKSxzLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLl9hY3RpdmUucmVjYWxjTWF0cml4KHQpfSxzLmdldERpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmUuZ2V0RGlzdGFuY2UodCl9LHMuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZUxpbWl0cyh0KX0scy5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmUubGFzdFQoKX0scy5zZXRNb2RlPWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLl9tb2RlKXt2YXIgZT10aGlzLl9jb250cm9sbGVyTmFtZXMuaW5kZXhPZih0KTtpZighKGU8MCkpe3ZhciByPXRoaXMuX2FjdGl2ZSxuPXRoaXMuX2NvbnRyb2xsZXJMaXN0W2VdLGk9TWF0aC5tYXgoci5sYXN0VCgpLG4ubGFzdFQoKSk7ci5yZWNhbGNNYXRyaXgoaSksbi5zZXRNYXRyaXgoaSxyLmNvbXB1dGVkTWF0cml4KSx0aGlzLl9hY3RpdmU9bix0aGlzLl9tb2RlPXQsdGhpcy5jb21wdXRlZE1hdHJpeD10aGlzLl9hY3RpdmUuY29tcHV0ZWRNYXRyaXgsdGhpcy5jb21wdXRlZEV5ZT10aGlzLl9hY3RpdmUuY29tcHV0ZWRFeWUsdGhpcy5jb21wdXRlZFVwPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFVwLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5fYWN0aXZlLmNvbXB1dGVkQ2VudGVyLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5fYWN0aXZlLmNvbXB1dGVkUmFkaXVzfX19LHMuZ2V0TW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RlfX0seyJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiOjQ1NCwib3JiaXQtY2FtZXJhLWNvbnRyb2xsZXIiOjQ3NSwidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyIjo1NTN9XSw1NTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2kocix0KCJkMy1hcnJheSIpLHQoImQzLWNvbGxlY3Rpb24iKSx0KCJkMy1zaGFwZSIpLHQoImVsZW1lbnRhcnktY2lyY3VpdHMtZGlyZWN0ZWQtZ3JhcGgiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG51bGwpfSh0aGlzLChmdW5jdGlvbih0LGUscixuLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWk9aSYmaS5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdCIpP2kuZGVmYXVsdDppO3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGgodC5zb3VyY2UsZS5zb3VyY2UpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBoKHQudGFyZ2V0LGUudGFyZ2V0KXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5wYXJ0T2ZDeWNsZT09PWUucGFydE9mQ3ljbGU/dC55MC1lLnkwOiJ0b3AiPT09dC5jaXJjdWxhckxpbmtUeXBlfHwiYm90dG9tIj09PWUuY2lyY3VsYXJMaW5rVHlwZT8tMToxfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gcCh0KXtyZXR1cm4odC55MCt0LnkxKS8yfWZ1bmN0aW9uIGQodCl7cmV0dXJuIHAodC5zb3VyY2UpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHAodC50YXJnZXQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5ub2Rlc31mdW5jdGlvbiB5KHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj10LmdldChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYih0LGUpe3JldHVybiBlKHQpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPTA7aWYobnVsbD09PXIpe2Zvcih2YXIgYT1bXSxvPTA7bzx0LmxpbmtzLmxlbmd0aDtvKyspe3ZhciBzPXQubGlua3Nbb10sbD1zLnNvdXJjZS5pbmRleCxjPXMudGFyZ2V0LmluZGV4O2FbbF18fChhW2xdPVtdKSxhW2NdfHwoYVtjXT1bXSksLTE9PT1hW2xdLmluZGV4T2YoYykmJmFbbF0ucHVzaChjKX12YXIgdT1pKGEpO3Uuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSk7dmFyIGg9e307Zm9yKG89MDtvPHUubGVuZ3RoO28rKyl7dmFyIGY9dVtvXS5zbGljZSgtMik7aFtmWzBdXXx8KGhbZlswXV09e30pLGhbZlswXV1bZlsxXV09ITB9dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldC5pbmRleCxyPXQuc291cmNlLmluZGV4O2U9PT1yfHxoW3JdJiZoW3JdW2VdPyh0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKTp0LmNpcmN1bGFyPSExfSkpfWVsc2UgdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNvdXJjZVtyXTx0LnRhcmdldFtyXT90LmNpcmN1bGFyPSExOih0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKX0pKX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9MCxuPTA7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbihpKXtpLmNpcmN1bGFyJiYoaS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZXx8aS50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZT9pLmNpcmN1bGFyTGlua1R5cGU9aS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT9pLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlOmkudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU6aS5jaXJjdWxhckxpbmtUeXBlPXI8bj8idG9wIjoiYm90dG9tIiwidG9wIj09aS5jaXJjdWxhckxpbmtUeXBlP3IrPTE6bis9MSx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2IodCxlKSE9YihpLnNvdXJjZSxlKSYmYih0LGUpIT1iKGkudGFyZ2V0LGUpfHwodC5jaXJjdWxhckxpbmtUeXBlPWkuY2lyY3VsYXJMaW5rVHlwZSl9KSkpfSkpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9PXQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGUmJih0LmNpcmN1bGFyTGlua1R5cGU9dC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZSksSCh0LGUpJiYodC5jaXJjdWxhckxpbmtUeXBlPXQuc291cmNlLmNpcmN1bGFyTGlua1R5cGUpKX0pKX1mdW5jdGlvbiBUKHQpe3ZhciBlPU1hdGguYWJzKHQueTEtdC55MCkscj1NYXRoLmFicyh0LnRhcmdldC54MC10LnNvdXJjZS54MSk7cmV0dXJuIE1hdGguYXRhbihyL2UpfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj0wO3Quc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7cj10LmNpcmN1bGFyJiYhSCh0LGUpP3IrMTpyfSkpO3ZhciBuPTA7cmV0dXJuIHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7bj10LmNpcmN1bGFyJiYhSCh0LGUpP24rMTpufSkpLHIrbn1mdW5jdGlvbiBNKHQpe3ZhciBlPXQuc291cmNlLnNvdXJjZUxpbmtzLHI9MDtlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3I9dC5jaXJjdWxhcj9yKzE6cn0pKTt2YXIgbj10LnRhcmdldC50YXJnZXRMaW5rcyxpPTA7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7aT10LmNpcmN1bGFyP2krMTppfSkpLCEocj4xfHxpPjEpfWZ1bmN0aW9uIEEodCxlLHIpe3JldHVybiB0LnNvcnQoRSksdC5mb3JFYWNoKChmdW5jdGlvbihuLGkpe3ZhciBhLG8scz0wO2lmKEgobixyKSYmTShuKSluLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzI7ZWxzZXtmb3IodmFyIGw9MDtsPGk7bCsrKWlmKGE9dFtpXSxvPXRbbF0sIShhLnNvdXJjZS5jb2x1bW48by50YXJnZXQuY29sdW1ufHxhLnRhcmdldC5jb2x1bW4+by5zb3VyY2UuY29sdW1uKSl7dmFyIGM9dFtsXS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyK3RbbF0ud2lkdGgvMitlO3M9Yz5zP2M6c31uLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzJ9fSkpLHR9ZnVuY3Rpb24gUyh0LHIsaSxhKXt2YXIgbz1lLm1pbih0LmxpbmtzLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UueTB9KSk7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5jaXJjdWxhclBhdGhEYXRhPXt9KX0pKSxBKHQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlfSkpLHIsYSksQSh0LmxpbmtzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZX0pKSxyLGEpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5jaXJjdWxhcil7aWYoZS5jaXJjdWxhclBhdGhEYXRhLmFyY1JhZGl1cz1lLndpZHRoKzEwLGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXI9NSxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGg9ZS5zb3VyY2UueDEtZS5zb3VyY2UueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVg9ZS5zb3VyY2UueDArZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVdpZHRoLGUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYPWUudGFyZ2V0LngwLGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZPWUueTAsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk9ZS55MSxIKGUsYSkmJk0oZSkpZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cz0xMCtlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cz0xMCtlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9MTArZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPTEwK2Uud2lkdGgvMiwiYm90dG9tIj09ZS5jaXJjdWxhckxpbmtUeXBlPyhlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PWUuc291cmNlLnkxKzI1K2UuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk6KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9ZS5zb3VyY2UueTAtMjUtZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTtlbHNle3ZhciBzPWUuc291cmNlLmNvbHVtbixsPWUuY2lyY3VsYXJMaW5rVHlwZSxjPXQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UuY29sdW1uPT1zJiZ0LmNpcmN1bGFyTGlua1R5cGU9PWx9KSk7ImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT9jLnNvcnQoTCk6Yy5zb3J0KEMpO3ZhciB1PTA7Yy5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPTEwK2Uud2lkdGgvMit1LGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXM9MTArZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSkpLHM9ZS50YXJnZXQuY29sdW1uLGM9dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldC5jb2x1bW49PXMmJnQuY2lyY3VsYXJMaW5rVHlwZT09bH0pKSwiYm90dG9tIj09ZS5jaXJjdWxhckxpbmtUeXBlP2Muc29ydChJKTpjLnNvcnQoUCksdT0wLGMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXt0LmNpcmN1bGFyTGlua0lEPT1lLmNpcmN1bGFyTGlua0lEJiYoZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9MTArZS53aWR0aC8yK3UsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXM9MTArZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSkpLCJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9TWF0aC5tYXgoaSxlLnNvdXJjZS55MSxlLnRhcmdldC55MSkrMjUrZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTooZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1vLTI1LWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyl9ZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cy1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHROb2RlQnVmZmVyfWlmKGUuY2lyY3VsYXIpZS5wYXRoPWZ1bmN0aW9uKHQpe3ZhciBlPSIiO2U9InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8iTSIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWS10LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZLXQuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZOiJNIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMpKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIisodC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk7cmV0dXJuIGV9KGUpO2Vsc2V7dmFyIGg9bi5saW5rSG9yaXpvbnRhbCgpLnNvdXJjZSgoZnVuY3Rpb24odCl7cmV0dXJuW3Quc291cmNlLngwKyh0LnNvdXJjZS54MS10LnNvdXJjZS54MCksdC55MF19KSkudGFyZ2V0KChmdW5jdGlvbih0KXtyZXR1cm5bdC50YXJnZXQueDAsdC55MV19KSk7ZS5wYXRoPWgoZSl9fSkpfWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4geih0KT09eihlKT8iYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlP0wodCxlKTpDKHQsZSk6eihlKS16KHQpfWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gdC55MC1lLnkwfWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4gZS55MC10LnkwfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gdC55MS1lLnkxfWZ1bmN0aW9uIEkodCxlKXtyZXR1cm4gZS55MS10LnkxfWZ1bmN0aW9uIHoodCl7cmV0dXJuIHQudGFyZ2V0LmNvbHVtbi10LnNvdXJjZS5jb2x1bW59ZnVuY3Rpb24gTyh0KXtyZXR1cm4gdC50YXJnZXQueDAtdC5zb3VyY2UueDF9ZnVuY3Rpb24gRCh0LGUpe3ZhciByPVQodCksbj1PKGUpL01hdGgudGFuKHIpO3JldHVybiJ1cCI9PXEodCk/dC55MStuOnQueTEtbn1mdW5jdGlvbiBSKHQsZSl7dmFyIHI9VCh0KSxuPU8oZSkvTWF0aC50YW4ocik7cmV0dXJuInVwIj09cSh0KT90LnkxLW46dC55MStufWZ1bmN0aW9uIEYodCxlLHIsbil7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbihpKXtpZighaS5jaXJjdWxhciYmaS50YXJnZXQuY29sdW1uLWkuc291cmNlLmNvbHVtbj4xKXt2YXIgYT1pLnNvdXJjZS5jb2x1bW4rMSxvPWkudGFyZ2V0LmNvbHVtbi0xLHM9MSxsPW8tYSsxO2ZvcihzPTE7YTw9bzthKysscysrKXQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24obyl7aWYoby5jb2x1bW49PWEpe3ZhciBjLHU9cy8obCsxKSxoPU1hdGgucG93KDEtdSwzKSxmPTMqdSpNYXRoLnBvdygxLXUsMikscD0zKk1hdGgucG93KHUsMikqKDEtdSksZD1NYXRoLnBvdyh1LDMpLGc9aCppLnkwK2YqaS55MCtwKmkueTErZCppLnkxLG09Zy1pLndpZHRoLzIsdj1nK2kud2lkdGgvMjttPm8ueTAmJm08by55MT8oYz1vLnkxLW0rMTAsYz0iYm90dG9tIj09by5jaXJjdWxhckxpbmtUeXBlP2M6LWMsbz1OKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmQihvLHQpJiZOKHQsYyxlLHIpfSkpKToodj5vLnkwJiZ2PG8ueTF8fG08by55MCYmdj5vLnkxKSYmKGM9di1vLnkwKzEwLG89TihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJnQueTA8by55MSYmdC55MT5vLnkxJiZOKHQsYyxlLHIpfSkpKX19KSl9fSkpfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdC55MD5lLnkwJiZ0LnkwPGUueTF8fCh0LnkxPmUueTAmJnQueTE8ZS55MXx8dC55MDxlLnkwJiZ0LnkxPmUueTEpfWZ1bmN0aW9uIE4odCxlLHIsbil7cmV0dXJuIHQueTArZT49ciYmdC55MStlPD1uJiYodC55MD10LnkwK2UsdC55MT10LnkxK2UsdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkxPXQueTErZX0pKSx0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTA9dC55MCtlfSkpKSx0fWZ1bmN0aW9uIGoodCxlLHIsbil7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihpKXtuJiZpLnkrKGkueTEtaS55MCk+ZSYmKGkueT1pLnktKGkueSsoaS55MS1pLnkwKS1lKSk7dmFyIGE9dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQuc291cmNlLHIpPT1iKGkscil9KSksbz1hLmxlbmd0aDtvPjEmJmEuc29ydCgoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQudGFyZ2V0LmNvbHVtbj09ZS50YXJnZXQuY29sdW1uKXJldHVybiB0LnkxLWUueTE7aWYoIVYodCxlKSlyZXR1cm4gdC55MS1lLnkxO2lmKHQudGFyZ2V0LmNvbHVtbj5lLnRhcmdldC5jb2x1bW4pe3ZhciByPVIoZSx0KTtyZXR1cm4gdC55MS1yfWlmKGUudGFyZ2V0LmNvbHVtbj50LnRhcmdldC5jb2x1bW4pcmV0dXJuIFIodCxlKS1lLnkxfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj8idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/InRvcCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3QudGFyZ2V0LmNvbHVtbj09PWUudGFyZ2V0LmNvbHVtbj90LnRhcmdldC55MS1lLnRhcmdldC55MTplLnRhcmdldC5jb2x1bW4tdC50YXJnZXQuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/ZS50YXJnZXQueTEtdC50YXJnZXQueTE6dC50YXJnZXQuY29sdW1uLWUudGFyZ2V0LmNvbHVtbjoidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSkpO3ZhciBzPWkueTA7YS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkwPXMrdC53aWR0aC8yLHMrPXQud2lkdGh9KSksYS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2lmKCJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgcj1lKzEsbj0wO3I8bztyKyspbis9YVtyXS53aWR0aDt0LnkwPWkueTEtbi10LndpZHRoLzJ9fSkpfSkpfWZ1bmN0aW9uIFUodCxlLHIpe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQudGFyZ2V0LHIpPT1iKGUscil9KSksaT1uLmxlbmd0aDtpPjEmJm4uc29ydCgoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQuc291cmNlLmNvbHVtbj09ZS5zb3VyY2UuY29sdW1uKXJldHVybiB0LnkwLWUueTA7aWYoIVYodCxlKSlyZXR1cm4gdC55MC1lLnkwO2lmKGUuc291cmNlLmNvbHVtbjx0LnNvdXJjZS5jb2x1bW4pe3ZhciByPUQoZSx0KTtyZXR1cm4gdC55MC1yfWlmKHQuc291cmNlLmNvbHVtbjxlLnNvdXJjZS5jb2x1bW4pcmV0dXJuIEQodCxlKS1lLnkwfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj8idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/InRvcCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTp0LnNvdXJjZS5jb2x1bW4tZS5zb3VyY2UuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnNvdXJjZS5jb2x1bW49PT1lLnNvdXJjZS5jb2x1bW4/dC5zb3VyY2UueTEtZS5zb3VyY2UueTE6ZS5zb3VyY2UuY29sdW1uLXQuc291cmNlLmNvbHVtbjoidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSkpO3ZhciBhPWUueTA7bi5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkxPWErdC53aWR0aC8yLGErPXQud2lkdGh9KSksbi5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2lmKCJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgYT1yKzEsbz0wO2E8aTthKyspbys9blthXS53aWR0aDt0LnkxPWUueTEtby10LndpZHRoLzJ9fSkpfSkpfWZ1bmN0aW9uIFYodCxlKXtyZXR1cm4gcSh0KT09cShlKX1mdW5jdGlvbiBxKHQpe3JldHVybiB0LnkwLXQueTE+MD8idXAiOiJkb3duIn1mdW5jdGlvbiBIKHQsZSl7cmV0dXJuIGIodC5zb3VyY2UsZSk9PWIodC50YXJnZXQsZSl9ZnVuY3Rpb24gRyh0LHIsbil7dmFyIGk9dC5ub2RlcyxhPXQubGlua3Msbz0hMSxzPSExO2lmKGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9vPSEwOiJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUmJihzPSEwKX0pKSwwPT1vfHwwPT1zKXt2YXIgbD1lLm1pbihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC55MH0pKSxjPShuLXIpLyhlLm1heChpLChmdW5jdGlvbih0KXtyZXR1cm4gdC55MX0pKS1sKTtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnkxLXQueTApKmM7dC55MD0odC55MC1sKSpjLHQueTE9dC55MCtlfSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC55MD0odC55MC1sKSpjLHQueTE9KHQueTEtbCkqYyx0LndpZHRoPXQud2lkdGgqY30pKX19dC5zYW5rZXlDaXJjdWxhcj1mdW5jdGlvbigpe3ZhciB0LG4saT0wLGE9MCxiPTEsVD0xLE09MjQsQT1tLEU9byxDPXYsTD15LFA9MzIsST0yLHo9bnVsbDtmdW5jdGlvbiBPKCl7dmFyIHQ9e25vZGVzOkMuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOkwuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtEKHQpLF8odCxBLHopLFIodCksQih0KSx3KHQsQSksTih0LFAsQSksVih0KTtmb3IodmFyIGU9NCxyPTA7cjxlO3IrKylqKHQsVCxBKSxVKHQsVCxBKSxGKHQsYSxULEEpLGoodCxULEEpLFUodCxULEEpO3JldHVybiBHKHQsYSxUKSxTKHQsSSxULEEpLHR9ZnVuY3Rpb24gRCh0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lLHQuc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pKTt2YXIgZT1yLm1hcCh0Lm5vZGVzLEEpO3JldHVybiB0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7Im9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBuPyJ1bmRlZmluZWQiOmwobikpJiYobj10LnNvdXJjZT14KGUsbikpLCJvYmplY3QiIT09KCJ1bmRlZmluZWQiPT10eXBlb2YgaT8idW5kZWZpbmVkIjpsKGkpKSYmKGk9dC50YXJnZXQ9eChlLGkpKSxuLnNvdXJjZUxpbmtzLnB1c2godCksaS50YXJnZXRMaW5rcy5wdXNoKHQpfSkpLHR9ZnVuY3Rpb24gUih0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucGFydE9mQ3ljbGU9ITEsdC52YWx1ZT1NYXRoLm1heChlLnN1bSh0LnNvdXJjZUxpbmtzLGYpLGUuc3VtKHQudGFyZ2V0TGlua3MsZikpLHQuc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jaXJjdWxhciYmKHQucGFydE9mQ3ljbGU9ITAsdC5jaXJjdWxhckxpbmtUeXBlPWUuY2lyY3VsYXJMaW5rVHlwZSl9KSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNpcmN1bGFyJiYodC5wYXJ0T2ZDeWNsZT0hMCx0LmNpcmN1bGFyTGlua1R5cGU9ZS5jaXJjdWxhckxpbmtUeXBlKX0pKX0pKX1mdW5jdGlvbiBCKHQpe3ZhciBlLHIsbjtmb3IoZT10Lm5vZGVzLHI9W10sbj0wO2UubGVuZ3RoOysrbixlPXIscj1bXSllLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVwdGg9bix0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuaW5kZXhPZih0LnRhcmdldCk8MCYmIXQuY2lyY3VsYXImJnIucHVzaCh0LnRhcmdldCl9KSl9KSk7Zm9yKGU9dC5ub2RlcyxyPVtdLG49MDtlLmxlbmd0aDsrK24sZT1yLHI9W10pZS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmhlaWdodD1uLHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7ci5pbmRleE9mKHQuc291cmNlKTwwJiYhdC5jaXJjdWxhciYmci5wdXNoKHQuc291cmNlKX0pKX0pKTt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY29sdW1uPU1hdGguZmxvb3IoRS5jYWxsKG51bGwsdCxuKSl9KSl9ZnVuY3Rpb24gTihvLHMsbCl7dmFyIGM9ci5uZXN0KCkua2V5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KSkuc29ydEtleXMoZS5hc2NlbmRpbmcpLmVudHJpZXMoby5ub2RlcykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZXN9KSk7IWZ1bmN0aW9uKHIpe2lmKG4pe3ZhciBzPTEvMDtjLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPVQqbi8odC5sZW5ndGgrMSk7cz1lPHM/ZTpzfSkpLHQ9c312YXIgbD1lLm1pbihjLChmdW5jdGlvbihyKXtyZXR1cm4oVC1hLShyLmxlbmd0aC0xKSp0KS9lLnN1bShyLGYpfSkpO2wqPS4zLG8ubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKmx9KSk7dmFyIHU9ZnVuY3Rpb24odCl7dmFyIHI9MCxuPTAsaT0wLGE9MCxvPWUubWF4KHQubm9kZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pKTtyZXR1cm4gdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYoInRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9yKz10LndpZHRoOm4rPXQud2lkdGgsMD09dC50YXJnZXQuY29sdW1uJiYoYSs9dC53aWR0aCksdC5zb3VyY2UuY29sdW1uPT1vJiYoaSs9dC53aWR0aCkpfSkpLHt0b3A6cj1yPjA/cisyNSsxMDpyLGJvdHRvbTpuPW4+MD9uKzI1KzEwOm4sbGVmdDphPWE+MD9hKzI1KzEwOmEscmlnaHQ6aT1pPjA/aSsyNSsxMDppfX0obyksaD1mdW5jdGlvbih0LHIpe3ZhciBuPWUubWF4KHQubm9kZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pKSxvPWItaSxzPVQtYSxsPW8vKG8rci5yaWdodCtyLmxlZnQpLGM9cy8ocytyLnRvcCtyLmJvdHRvbSk7cmV0dXJuIGk9aSpsK3IubGVmdCxiPTA9PXIucmlnaHQ/YjpiKmwsYT1hKmMrci50b3AsVCo9Yyx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueDA9aSt0LmNvbHVtbiooKGItaS1NKS9uKSx0LngxPXQueDArTX0pKSxjfShvLHUpO2wqPWgsby5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqbH0pKSxjLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3QuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXt0LmRlcHRoPT1jLmxlbmd0aC0xJiYxPT1lfHwwPT10LmRlcHRoJiYxPT1lPyh0LnkwPVQvMi10LnZhbHVlKmwsdC55MT10LnkwK3QudmFsdWUqbCk6dC5wYXJ0T2ZDeWNsZT8wPT1rKHQscik/KHQueTA9VC8yK24sdC55MT10LnkwK3QudmFsdWUqbCk6InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8odC55MD1hK24sdC55MT10LnkwK3QudmFsdWUqbCk6KHQueTA9VC10LnZhbHVlKmwtbix0LnkxPXQueTArdC52YWx1ZSpsKTowPT11LnRvcHx8MD09dS5ib3R0b20/KHQueTA9KFQtYSkvZSpuLHQueTE9dC55MCt0LnZhbHVlKmwpOih0LnkwPShULWEpLzItZS8yK24sdC55MT10LnkwK3QudmFsdWUqbCl9KSl9KSl9KGwpLHkoKTtmb3IodmFyIHU9MSxtPXM7bT4wOy0tbSl2KHUqPS45OSxsKSx5KCk7ZnVuY3Rpb24gdih0LHIpe3ZhciBuPWMubGVuZ3RoO2MuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIGE9aS5sZW5ndGgsbz1pWzBdLmRlcHRoO2kuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIHM7aWYoaS5zb3VyY2VMaW5rcy5sZW5ndGh8fGkudGFyZ2V0TGlua3MubGVuZ3RoKWlmKGkucGFydE9mQ3ljbGUmJmsoaSxyKT4wKTtlbHNlIGlmKDA9PW8mJjE9PWEpcz1pLnkxLWkueTAsaS55MD1ULzItcy8yLGkueTE9VC8yK3MvMjtlbHNlIGlmKG89PW4tMSYmMT09YSlzPWkueTEtaS55MCxpLnkwPVQvMi1zLzIsaS55MT1ULzIrcy8yO2Vsc2V7dmFyIGw9ZS5tZWFuKGkuc291cmNlTGlua3MsZyksYz1lLm1lYW4oaS50YXJnZXRMaW5rcyxkKSx1PSgobCYmYz8obCtjKS8yOmx8fGMpLXAoaSkpKnQ7aS55MCs9dSxpLnkxKz11fX0pKX0pKX1mdW5jdGlvbiB5KCl7Yy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcixuLGksbz1hLHM9ZS5sZW5ndGg7Zm9yKGUuc29ydChoKSxpPTA7aTxzOysraSkobj1vLShyPWVbaV0pLnkwKT4wJiYoci55MCs9bixyLnkxKz1uKSxvPXIueTErdDtpZigobj1vLXQtVCk+MClmb3Iobz1yLnkwLT1uLHIueTEtPW4saT1zLTI7aT49MDstLWkpKG49KHI9ZVtpXSkueTErdC1vKT4wJiYoci55MC09bixyLnkxLT1uKSxvPXIueTB9KSl9fWZ1bmN0aW9uIFYodCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzLnNvcnQodSksdC50YXJnZXRMaW5rcy5zb3J0KGMpfSkpLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC55MCxyPWUsbj10LnkxLGk9bjt0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXI/KHQueTA9bi10LndpZHRoLzIsbi09dC53aWR0aCk6KHQueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aCl9KSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyPyh0LnkxPWktdC53aWR0aC8yLGktPXQud2lkdGgpOih0LnkxPXIrdC53aWR0aC8yLHIrPXQud2lkdGgpfSkpfSkpfXJldHVybiBPLm5vZGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksTyk6QX0sTy5ub2RlQWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzKHQpLE8pOkV9LE8ubm9kZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSt0LE8pOk19LE8ubm9kZVBhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsTyk6dH0sTy5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksTyk6Q30sTy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCksTyk6TH0sTy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9MCxiPSt0WzBdLFQ9K3RbMV0sTyk6W2ItaSxULWFdfSxPLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdFswXVswXSxiPSt0WzFdWzBdLGE9K3RbMF1bMV0sVD0rdFsxXVsxXSxPKTpbW2ksYV0sW2IsVF1dfSxPLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9K3QsTyk6UH0sTy5jaXJjdWxhckxpbmtHYXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEk9K3QsTyk6SX0sTy5ub2RlUGFkZGluZ1JhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LE8pOm59LE8uc29ydE5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh6PXQsTyk6en0sTy51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCxBKSxWKHQpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnkwK3QueTE8VD8idG9wIjoiYm90dG9tIix0LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlPXQuY2lyY3VsYXJMaW5rVHlwZSx0LnRhcmdldC5jaXJjdWxhckxpbmtUeXBlPXQuY2lyY3VsYXJMaW5rVHlwZSl9KSksaih0LFQsQSwhMSksVSh0LFQsQSksUyh0LEksVCxBKSx0fSxPfSx0LnNhbmtleUNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXRMaW5rcy5sZW5ndGg/dC5kZXB0aDp0LnNvdXJjZUxpbmtzLmxlbmd0aD9lLm1pbih0LnNvdXJjZUxpbmtzLGEpLTE6MH0sdC5zYW5rZXlMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlcHRofSx0LnNhbmtleVJpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtMS10LmhlaWdodH0sdC5zYW5rZXlKdXN0aWZ5PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWFycmF5IjoxNTYsImQzLWNvbGxlY3Rpb24iOjE1NywiZDMtc2hhcGUiOjE2NSwiZWxlbWVudGFyeS1jaXJjdWl0cy1kaXJlY3RlZC1ncmFwaCI6MTc5fV0sNTY6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9pKHIsdCgiZDMtYXJyYXkiKSx0KCJkMy1jb2xsZWN0aW9uIiksdCgiZDMtc2hhcGUiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlLHIsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBjKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gYyh0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiB1KHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIGgodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBmKHQpe3JldHVybiBoKHQuc291cmNlKSp0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGgodC50YXJnZXQpKnQudmFsdWV9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBnKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24gdih0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiB5KHQpe3JldHVyblt0LnNvdXJjZS54MSx0LnkwXX1mdW5jdGlvbiB4KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX10LnNhbmtleT1mdW5jdGlvbigpe3ZhciB0PTAsbj0wLGk9MSx5PTEseD0yNCxiPTgsXz1kLHc9YSxUPWcsaz1tLE09MzI7ZnVuY3Rpb24gQSgpe3ZhciB0PXtub2RlczpULmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczprLmFwcGx5KG51bGwsYXJndW1lbnRzKX07cmV0dXJuIFModCksRSh0KSxDKHQpLEwodCksUCh0KSx0fWZ1bmN0aW9uIFModCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuaW5kZXg9ZSx0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KSk7dmFyIGU9ci5tYXAodC5ub2RlcyxfKTt0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7Im9iamVjdCIhPXR5cGVvZiBuJiYobj10LnNvdXJjZT12KGUsbikpLCJvYmplY3QiIT10eXBlb2YgaSYmKGk9dC50YXJnZXQ9dihlLGkpKSxuLnNvdXJjZUxpbmtzLnB1c2godCksaS50YXJnZXRMaW5rcy5wdXNoKHQpfSkpfWZ1bmN0aW9uIEUodCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnZhbHVlPU1hdGgubWF4KGUuc3VtKHQuc291cmNlTGlua3MsdSksZS5zdW0odC50YXJnZXRMaW5rcyx1KSl9KSl9ZnVuY3Rpb24gQyhlKXt2YXIgcixuLGE7Zm9yKHI9ZS5ub2RlcyxuPVtdLGE9MDtyLmxlbmd0aDsrK2Escj1uLG49W10pci5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlcHRoPWEsdC5zb3VyY2VMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXtuLmluZGV4T2YodC50YXJnZXQpPDAmJm4ucHVzaCh0LnRhcmdldCl9KSl9KSk7Zm9yKHI9ZS5ub2RlcyxuPVtdLGE9MDtyLmxlbmd0aDsrK2Escj1uLG49W10pci5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmhlaWdodD1hLHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5pbmRleE9mKHQuc291cmNlKTwwJiZuLnB1c2godC5zb3VyY2UpfSkpfSkpO3ZhciBvPShpLXQteCkvKGEtMSk7ZS5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLngxPShlLngwPXQrTWF0aC5tYXgoMCxNYXRoLm1pbihhLTEsTWF0aC5mbG9vcih3LmNhbGwobnVsbCxlLGEpKSkpKm8pK3h9KSl9ZnVuY3Rpb24gTCh0KXt2YXIgaT1yLm5lc3QoKS5rZXkoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngwfSkpLnNvcnRLZXlzKGUuYXNjZW5kaW5nKS5lbnRyaWVzKHQubm9kZXMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSkpOyFmdW5jdGlvbigpe3ZhciByPWUubWF4KGksKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aH0pKSxhPTIvMyooeS1uKS8oci0xKTtiPmEmJihiPWEpO3ZhciBvPWUubWluKGksKGZ1bmN0aW9uKHQpe3JldHVybih5LW4tKHQubGVuZ3RoLTEpKmIpL2Uuc3VtKHQsdSl9KSk7aS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC55MT0odC55MD1lKSt0LnZhbHVlKm99KSl9KSksdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqb30pKX0oKSxkKCk7Zm9yKHZhciBhPTEsbz1NO28+MDstLW8pbChhKj0uOTkpLGQoKSxzKGEpLGQoKTtmdW5jdGlvbiBzKHQpe2kuZm9yRWFjaCgoZnVuY3Rpb24ocil7ci5mb3JFYWNoKChmdW5jdGlvbihyKXtpZihyLnRhcmdldExpbmtzLmxlbmd0aCl7dmFyIG49KGUuc3VtKHIudGFyZ2V0TGlua3MsZikvZS5zdW0oci50YXJnZXRMaW5rcyx1KS1oKHIpKSp0O3IueTArPW4sci55MSs9bn19KSl9KSl9ZnVuY3Rpb24gbCh0KXtpLnNsaWNlKCkucmV2ZXJzZSgpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3IuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYoci5zb3VyY2VMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnNvdXJjZUxpbmtzLHApL2Uuc3VtKHIuc291cmNlTGlua3MsdSktaChyKSkqdDtyLnkwKz1uLHIueTErPW59fSkpfSkpfWZ1bmN0aW9uIGQoKXtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhPW4sbz10Lmxlbmd0aDtmb3IodC5zb3J0KGMpLGk9MDtpPG87KytpKShyPWEtKGU9dFtpXSkueTApPjAmJihlLnkwKz1yLGUueTErPXIpLGE9ZS55MStiO2lmKChyPWEtYi15KT4wKWZvcihhPWUueTAtPXIsZS55MS09cixpPW8tMjtpPj0wOy0taSkocj0oZT10W2ldKS55MStiLWEpPjAmJihlLnkwLT1yLGUueTEtPXIpLGE9ZS55MH0pKX19ZnVuY3Rpb24gUCh0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3Muc29ydChsKSx0LnRhcmdldExpbmtzLnNvcnQocyl9KSksdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnkwLHI9ZTt0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aH0pKSx0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTE9cit0LndpZHRoLzIscis9dC53aWR0aH0pKX0pKX1yZXR1cm4gQS51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIFAodCksdH0sQS5ub2RlSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLEEpOl99LEEubm9kZUFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6byh0KSxBKTp3fSxBLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0rdCxBKTp4fSxBLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0LEEpOmJ9LEEubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLEEpOlR9LEEubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLEEpOmt9LEEuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uPTAsaT0rZVswXSx5PStlWzFdLEEpOltpLXQseS1uXX0sQS5leHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2VbMF1bMF0saT0rZVsxXVswXSxuPStlWzBdWzFdLHk9K2VbMV1bMV0sQSk6W1t0LG5dLFtpLHldXX0sQS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSt0LEEpOk19LEF9LHQuc2Fua2V5Q2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldExpbmtzLmxlbmd0aD90LmRlcHRoOnQuc291cmNlTGlua3MubGVuZ3RoP2UubWluKHQuc291cmNlTGlua3MsaSktMTowfSx0LnNhbmtleUxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVwdGh9LHQuc2Fua2V5UmlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS0xLXQuaGVpZ2h0fSx0LnNhbmtleUp1c3RpZnk9YSx0LnNhbmtleUxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIG4ubGlua0hvcml6b250YWwoKS5zb3VyY2UoeSkudGFyZ2V0KHgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtYXJyYXkiOjE1NiwiZDMtY29sbGVjdGlvbiI6MTU3LCJkMy1zaGFwZSI6MTY1fV0sNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vcXVhZCIpfSx7Ii4vcXVhZCI6NTh9XSw1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgiY2xhbXAiKSxhPXQoInBhcnNlLXJlY3QiKSxvPXQoImFycmF5LWJvdW5kcyIpLHM9dCgicGljay1ieS1hbGlhcyIpLGw9dCgiZGVmaW5lZCIpLGM9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLHU9dCgiaXMtb2JqIiksaD10KCJkdHlwZSIpLGY9dCgibWF0aC1sb2cyIik7ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxhPTEvKGVbMl0tciksbz0xLyhlWzNdLW4pLHM9bmV3IEFycmF5KHQubGVuZ3RoKSxsPTAsYz10Lmxlbmd0aC8yO2w8YztsKyspc1syKmxdPWkoKHRbMipsXS1yKSphLDAsMSksc1syKmwrMV09aSgodFsyKmwrMV0tbikqbywwLDEpO3JldHVybiBzfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXt9KSx0PWModCwiZmxvYXQ2NCIpLGU9cyhlLHtib3VuZHM6InJhbmdlIGJvdW5kcyBkYXRhQm94IGRhdGFib3giLG1heERlcHRoOiJkZXB0aCBtYXhEZXB0aCBtYXhkZXB0aCBsZXZlbCBtYXhMZXZlbCBtYXhsZXZlbCBsZXZlbHMiLGR0eXBlOiJ0eXBlIGR0eXBlIGZvcm1hdCBvdXQgZHN0IG91dHB1dCBkZXN0aW5hdGlvbiJ9KTt2YXIgcj1sKGUubWF4RGVwdGgsMjU1KSxpPWwoZS5ib3VuZHMsbyh0LDIpKTtpWzBdPT09aVsyXSYmaVsyXSsrLGlbMV09PT1pWzNdJiZpWzNdKys7dmFyIGQsZz1wKHQsaSksbT10Lmxlbmd0aD4+PjE7ZS5kdHlwZXx8KGUuZHR5cGU9ImFycmF5IiksInN0cmluZyI9PXR5cGVvZiBlLmR0eXBlP2Q9bmV3KGgoZS5kdHlwZSkpKG0pOmUuZHR5cGUmJihkPWUuZHR5cGUsQXJyYXkuaXNBcnJheShkKSYmKGQubGVuZ3RoPW0pKTtmb3IodmFyIHY9MDt2PG07Kyt2KWRbdl09djt2YXIgeT1bXSx4PVtdLGI9W10sXz1bXTshZnVuY3Rpb24gdChlLG4saSxhLG8scyl7aWYoIWEubGVuZ3RoKXJldHVybiBudWxsO3ZhciBsPXlbb118fCh5W29dPVtdKSxjPWJbb118fChiW29dPVtdKSx1PXhbb118fCh4W29dPVtdKSxoPWwubGVuZ3RoO2lmKCsrbz5yfHxzPjEwNzM3NDE4MjQpe2Zvcih2YXIgZj0wO2Y8YS5sZW5ndGg7ZisrKWwucHVzaChhW2ZdKSxjLnB1c2gocyksdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpO3JldHVybiBofWlmKGwucHVzaChhWzBdKSxjLnB1c2gocyksYS5sZW5ndGg8PTEpcmV0dXJuIHUucHVzaChudWxsLG51bGwsbnVsbCxudWxsKSxoO2Zvcih2YXIgcD0uNSppLGQ9ZStwLG09bitwLHY9W10sXz1bXSx3PVtdLFQ9W10saz0xLE09YS5sZW5ndGg7azxNO2srKyl7dmFyIEE9YVtrXSxTPWdbMipBXSxFPWdbMipBKzFdO1M8ZD9FPG0/di5wdXNoKEEpOl8ucHVzaChBKTpFPG0/dy5wdXNoKEEpOlQucHVzaChBKX1yZXR1cm4gczw8PTIsdS5wdXNoKHQoZSxuLHAsdixvLHMpLHQoZSxtLHAsXyxvLHMrMSksdChkLG4scCx3LG8scysyKSx0KGQsbSxwLFQsbyxzKzMpKSxofSgwLDAsMSxkLDAsMSk7Zm9yKHZhciB3PTAsVD0wO1Q8eS5sZW5ndGg7VCsrKXt2YXIgaz15W1RdO2lmKGQuc2V0KWQuc2V0KGssdyk7ZWxzZSBmb3IodmFyIE09MCxBPWsubGVuZ3RoO008QTtNKyspZFtNK3ddPWtbTV07dmFyIFM9dyt5W1RdLmxlbmd0aDtfW1RdPVt3LFNdLHc9U31yZXR1cm4gZC5yYW5nZT1mdW5jdGlvbigpe3ZhciBlLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoO2Zvcig7bi0tOylyW25dPWFyZ3VtZW50c1tuXTtpZih1KHJbci5sZW5ndGgtMV0pKXt2YXIgbz1yLnBvcCgpO3IubGVuZ3RofHxudWxsPT1vLngmJm51bGw9PW8ubCYmbnVsbD09by5sZWZ0fHwocj1bb10sZT17fSksZT1zKG8se2xldmVsOiJsZXZlbCBtYXhMZXZlbCIsZDoiZCBkaWFtIGRpYW1ldGVyIHIgcmFkaXVzIHB4IHB4U2l6ZSBwaXhlbCBwaXhlbFNpemUgbWF4RCBzaXplIG1pblNpemUiLGxvZDoibG9kIGRldGFpbHMgcmFuZ2VzIG9mZnNldHMifSl9ZWxzZSBlPXt9O3IubGVuZ3RofHwocj1pKTt2YXIgYz1hLmFwcGx5KHZvaWQgMCxyKSxoPVtNYXRoLm1pbihjLngsYy54K2Mud2lkdGgpLE1hdGgubWluKGMueSxjLnkrYy5oZWlnaHQpLE1hdGgubWF4KGMueCxjLngrYy53aWR0aCksTWF0aC5tYXgoYy55LGMueStjLmhlaWdodCldLGQ9aFswXSxnPWhbMV0sbT1oWzJdLHY9aFszXSxiPXAoW2QsZyxtLHZdLGkpLF89YlswXSx3PWJbMV0sVD1iWzJdLGs9YlszXSxNPWwoZS5sZXZlbCx5Lmxlbmd0aCk7aWYobnVsbCE9ZS5kKXt2YXIgQTsibnVtYmVyIj09dHlwZW9mIGUuZD9BPVtlLmQsZS5kXTplLmQubGVuZ3RoJiYoQT1lLmQpLE09TWF0aC5taW4oTWF0aC5tYXgoTWF0aC5jZWlsKC1mKE1hdGguYWJzKEFbMF0pLyhpWzJdLWlbMF0pKSksTWF0aC5jZWlsKC1mKE1hdGguYWJzKEFbMV0pLyhpWzNdLWlbMV0pKSkpLE0pfWlmKE09TWF0aC5taW4oTSx5Lmxlbmd0aCksZS5sb2QpcmV0dXJuIEUoXyx3LFQsayxNKTt2YXIgUz1bXTtmdW5jdGlvbiBDKGUscixuLGksYSxvKXtpZihudWxsIT09YSYmbnVsbCE9PW8mJiEoXz5lK258fHc+citufHxUPGV8fGs8cnx8aT49TXx8YT09PW8pKXt2YXIgcz15W2ldO3ZvaWQgMD09PW8mJihvPXMubGVuZ3RoKTtmb3IodmFyIGw9YTtsPG87bCsrKXt2YXIgYz1zW2xdLHU9dFsyKmNdLGg9dFsyKmMrMV07dT49ZCYmdTw9bSYmaD49ZyYmaDw9diYmUy5wdXNoKGMpfXZhciBmPXhbaV0scD1mWzQqYSswXSxiPWZbNCphKzFdLEE9Zls0KmErMl0sRT1mWzQqYSszXSxQPUwoZixhKzEpLEk9LjUqbix6PWkrMTtDKGUscixJLHoscCxifHxBfHxFfHxQKSxDKGUscitJLEkseixiLEF8fEV8fFApLEMoZStJLHIsSSx6LEEsRXx8UCksQyhlK0kscitJLEkseixFLFApfX1mdW5jdGlvbiBMKHQsZSl7Zm9yKHZhciByPW51bGwsbj0wO251bGw9PT1yOylpZihyPXRbNCplK25dLCsrbj50Lmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gcn1yZXR1cm4gQygwLDAsMSwwLDAsMSksU30sZDtmdW5jdGlvbiBFKHQsZSxyLGksYSl7Zm9yKHZhciBvPVtdLHM9MDtzPGE7cysrKXt2YXIgbD1iW3NdLGM9X1tzXVswXSx1PUModCxlLHMpLGg9QyhyLGkscyksZj1uLmdlKGwsdSkscD1uLmd0KGwsaCxmLGwubGVuZ3RoLTEpO29bc109W2YrYyxwK2NdfXJldHVybiBvfWZ1bmN0aW9uIEModCxlLHIpe2Zvcih2YXIgbj0xLGk9LjUsYT0uNSxvPS41LHM9MDtzPHI7cysrKW48PD0yLG4rPXQ8aT9lPGE/MDoxOmU8YT8yOjMsbyo9LjUsaSs9dDxpPy1vOm8sYSs9ZTxhPy1vOm87cmV0dXJuIG59fX0seyJhcnJheS1ib3VuZHMiOjcwLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6OTYsY2xhbXA6MTIwLGRlZmluZWQ6MTcwLGR0eXBlOjE3NSwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjQ0LCJpcy1vYmoiOjQ0MiwibWF0aC1sb2cyIjo0NTMsInBhcnNlLXJlY3QiOjQ3OCwicGljay1ieS1hbGlhcyI6NDg1fV0sNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXQoIkB0dXJmL21ldGEiKTtmdW5jdGlvbiBpKHQpe3ZhciBlPTA7aWYodCYmdC5sZW5ndGg+MCl7ZSs9TWF0aC5hYnMoYSh0WzBdKSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspZS09TWF0aC5hYnMoYSh0W3JdKSl9cmV0dXJuIGV9ZnVuY3Rpb24gYSh0KXt2YXIgZSxyLG4saSxhLHMsbD0wLGM9dC5sZW5ndGg7aWYoYz4yKXtmb3Iocz0wO3M8YztzKyspcz09PWMtMj8obj1jLTIsaT1jLTEsYT0wKTpzPT09Yy0xPyhuPWMtMSxpPTAsYT0xKToobj1zLGk9cysxLGE9cysyKSxlPXRbbl0scj10W2ldLGwrPShvKHRbYV1bMF0pLW8oZVswXSkpKk1hdGguc2luKG8oclsxXSkpO2w9NjM3ODEzNypsKjYzNzgxMzcvMn1yZXR1cm4gbH1mdW5jdGlvbiBvKHQpe3JldHVybiB0Kk1hdGguUEkvMTgwfXIuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gbi5nZW9tUmVkdWNlKHQsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZnVuY3Rpb24odCl7dmFyIGUscj0wO3N3aXRjaCh0LnR5cGUpe2Nhc2UiUG9seWdvbiI6cmV0dXJuIGkodC5jb29yZGluYXRlcyk7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihlPTA7ZTx0LmNvb3JkaW5hdGVzLmxlbmd0aDtlKyspcis9aSh0LmNvb3JkaW5hdGVzW2VdKTtyZXR1cm4gcjtjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOmNhc2UiTGluZVN0cmluZyI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiAwfXJldHVybiAwfShlKX0pLDApfX0seyJAdHVyZi9tZXRhIjo2M31dLDYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj10KCJAdHVyZi9tZXRhIik7ci5kZWZhdWx0PWZ1bmN0aW9uKHQpe3ZhciBlPVsxLzAsMS8wLC0xLzAsLTEvMF07cmV0dXJuIG4uY29vcmRFYWNoKHQsKGZ1bmN0aW9uKHQpe2VbMF0+dFswXSYmKGVbMF09dFswXSksZVsxXT50WzFdJiYoZVsxXT10WzFdKSxlWzJdPHRbMF0mJihlWzJdPXRbMF0pLGVbM108dFsxXSYmKGVbM109dFsxXSl9KSksZX19LHsiQHR1cmYvbWV0YSI6NjN9XSw2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49dCgiQHR1cmYvbWV0YSIpLGk9dCgiQHR1cmYvaGVscGVycyIpO3IuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgcj0wLGE9MCxvPTA7cmV0dXJuIG4uY29vcmRFYWNoKHQsKGZ1bmN0aW9uKHQpe3IrPXRbMF0sYSs9dFsxXSxvKyt9KSksaS5wb2ludChbci9vLGEvb10sZS5wcm9wZXJ0aWVzKX19LHsiQHR1cmYvaGVscGVycyI6NjIsIkB0dXJmL21ldGEiOjYzfV0sNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pO3ZhciBuPXt0eXBlOiJGZWF0dXJlIn07cmV0dXJuKDA9PT1yLmlkfHxyLmlkKSYmKG4uaWQ9ci5pZCksci5iYm94JiYobi5iYm94PXIuYmJveCksbi5wcm9wZXJ0aWVzPWV8fHt9LG4uZ2VvbWV0cnk9dCxufWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSksbih7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gYSh0LGUscil7dm9pZCAwPT09ciYmKHI9e30pO2Zvcih2YXIgaT0wLGE9dDtpPGEubGVuZ3RoO2krKyl7dmFyIG89YVtpXTtpZihvLmxlbmd0aDw0KXRocm93IG5ldyBFcnJvcigiRWFjaCBMaW5lYXJSaW5nIG9mIGEgUG9seWdvbiBtdXN0IGhhdmUgNCBvciBtb3JlIFBvc2l0aW9ucy4iKTtmb3IodmFyIHM9MDtzPG9bby5sZW5ndGgtMV0ubGVuZ3RoO3MrKylpZihvW28ubGVuZ3RoLTFdW3NdIT09b1swXVtzXSl0aHJvdyBuZXcgRXJyb3IoIkZpcnN0IGFuZCBsYXN0IFBvc2l0aW9uIGFyZSBub3QgZXF1aXZhbGVudC4iKX1yZXR1cm4gbih7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBvKHQsZSxyKXtpZih2b2lkIDA9PT1yJiYocj17fSksdC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoImNvb3JkaW5hdGVzIG11c3QgYmUgYW4gYXJyYXkgb2YgdHdvIG9yIG1vcmUgcG9zaXRpb25zIik7cmV0dXJuIG4oe3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gcyh0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgcj17dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24ifTtyZXR1cm4gZS5pZCYmKHIuaWQ9ZS5pZCksZS5iYm94JiYoci5iYm94PWUuYmJveCksci5mZWF0dXJlcz10LHJ9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJNdWx0aVBvaW50Iixjb29yZGluYXRlczp0fSxlLHIpfWZ1bmN0aW9uIHUodCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSksbih7dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0fSxlLHIpfWZ1bmN0aW9uIGgodCxlKXt2b2lkIDA9PT1lJiYoZT0ia2lsb21ldGVycyIpO3ZhciBuPXIuZmFjdG9yc1tlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoZSsiIHVuaXRzIGlzIGludmFsaWQiKTtyZXR1cm4gdCpufWZ1bmN0aW9uIGYodCxlKXt2b2lkIDA9PT1lJiYoZT0ia2lsb21ldGVycyIpO3ZhciBuPXIuZmFjdG9yc1tlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoZSsiIHVuaXRzIGlzIGludmFsaWQiKTtyZXR1cm4gdC9ufWZ1bmN0aW9uIHAodCl7cmV0dXJuIDE4MCoodCUoMipNYXRoLlBJKSkvTWF0aC5QSX1mdW5jdGlvbiBkKHQpe3JldHVybiFpc05hTih0KSYmbnVsbCE9PXQmJiFBcnJheS5pc0FycmF5KHQpJiYhL15ccyokLy50ZXN0KHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyLmVhcnRoUmFkaXVzPTYzNzEwMDguOCxyLmZhY3RvcnM9e2NlbnRpbWV0ZXJzOjEwMCpyLmVhcnRoUmFkaXVzLGNlbnRpbWV0cmVzOjEwMCpyLmVhcnRoUmFkaXVzLGRlZ3JlZXM6ci5lYXJ0aFJhZGl1cy8xMTEzMjUsZmVldDozLjI4MDg0KnIuZWFydGhSYWRpdXMsaW5jaGVzOjM5LjM3KnIuZWFydGhSYWRpdXMsa2lsb21ldGVyczpyLmVhcnRoUmFkaXVzLzFlMyxraWxvbWV0cmVzOnIuZWFydGhSYWRpdXMvMWUzLG1ldGVyczpyLmVhcnRoUmFkaXVzLG1ldHJlczpyLmVhcnRoUmFkaXVzLG1pbGVzOnIuZWFydGhSYWRpdXMvMTYwOS4zNDQsbWlsbGltZXRlcnM6MWUzKnIuZWFydGhSYWRpdXMsbWlsbGltZXRyZXM6MWUzKnIuZWFydGhSYWRpdXMsbmF1dGljYWxtaWxlczpyLmVhcnRoUmFkaXVzLzE4NTIscmFkaWFuczoxLHlhcmRzOnIuZWFydGhSYWRpdXMvMS4wOTM2fSxyLnVuaXRzRmFjdG9ycz17Y2VudGltZXRlcnM6MTAwLGNlbnRpbWV0cmVzOjEwMCxkZWdyZWVzOjEvMTExMzI1LGZlZXQ6My4yODA4NCxpbmNoZXM6MzkuMzcsa2lsb21ldGVyczouMDAxLGtpbG9tZXRyZXM6LjAwMSxtZXRlcnM6MSxtZXRyZXM6MSxtaWxlczoxLzE2MDkuMzQ0LG1pbGxpbWV0ZXJzOjFlMyxtaWxsaW1ldHJlczoxZTMsbmF1dGljYWxtaWxlczoxLzE4NTIscmFkaWFuczoxL3IuZWFydGhSYWRpdXMseWFyZHM6MS8xLjA5MzZ9LHIuYXJlYUZhY3RvcnM9e2FjcmVzOjI0NzEwNWUtOSxjZW50aW1ldGVyczoxZTQsY2VudGltZXRyZXM6MWU0LGZlZXQ6MTAuNzYzOTEwNDE3LGluY2hlczoxNTUwLjAwMzEwMDAwNixraWxvbWV0ZXJzOjFlLTYsa2lsb21ldHJlczoxZS02LG1ldGVyczoxLG1ldHJlczoxLG1pbGVzOjM4NmUtOSxtaWxsaW1ldGVyczoxZTYsbWlsbGltZXRyZXM6MWU2LHlhcmRzOjEuMTk1OTkwMDQ2fSxyLmZlYXR1cmU9bixyLmdlb21ldHJ5PWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2godm9pZCAwPT09ciYmKHI9e30pLHQpe2Nhc2UiUG9pbnQiOnJldHVybiBpKGUpLmdlb21ldHJ5O2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIG8oZSkuZ2VvbWV0cnk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gYShlKS5nZW9tZXRyeTtjYXNlIk11bHRpUG9pbnQiOnJldHVybiBjKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gbChlKS5nZW9tZXRyeTtjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIHUoZSkuZ2VvbWV0cnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IodCsiIGlzIGludmFsaWQiKX19LHIucG9pbnQ9aSxyLnBvaW50cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxzKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gaSh0LGUpfSkpLHIpfSxyLnBvbHlnb249YSxyLnBvbHlnb25zPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLHModC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBhKHQsZSl9KSkscil9LHIubGluZVN0cmluZz1vLHIubGluZVN0cmluZ3M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSkscyh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8odCxlKX0pKSxyKX0sci5mZWF0dXJlQ29sbGVjdGlvbj1zLHIubXVsdGlMaW5lU3RyaW5nPWwsci5tdWx0aVBvaW50PWMsci5tdWx0aVBvbHlnb249dSxyLmdlb21ldHJ5Q29sbGVjdGlvbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24iLGdlb21ldHJpZXM6dH0sZSxyKX0sci5yb3VuZD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLGUmJiEoZT49MCkpdGhyb3cgbmV3IEVycm9yKCJwcmVjaXNpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3ZhciByPU1hdGgucG93KDEwLGV8fDApO3JldHVybiBNYXRoLnJvdW5kKHQqcikvcn0sci5yYWRpYW5zVG9MZW5ndGg9aCxyLmxlbmd0aFRvUmFkaWFucz1mLHIubGVuZ3RoVG9EZWdyZWVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHAoZih0LGUpKX0sci5iZWFyaW5nVG9BemltdXRoPWZ1bmN0aW9uKHQpe3ZhciBlPXQlMzYwO3JldHVybiBlPDAmJihlKz0zNjApLGV9LHIucmFkaWFuc1RvRGVncmVlcz1wLHIuZGVncmVlc1RvUmFkaWFucz1mdW5jdGlvbih0KXtyZXR1cm4gdCUzNjAqTWF0aC5QSS8xODB9LHIuY29udmVydExlbmd0aD1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09ZSYmKGU9ImtpbG9tZXRlcnMiKSx2b2lkIDA9PT1yJiYocj0ia2lsb21ldGVycyIpLCEodD49MCkpdGhyb3cgbmV3IEVycm9yKCJsZW5ndGggbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3JldHVybiBoKGYodCxlKSxyKX0sci5jb252ZXJ0QXJlYT1mdW5jdGlvbih0LGUsbil7aWYodm9pZCAwPT09ZSYmKGU9Im1ldGVycyIpLHZvaWQgMD09PW4mJihuPSJraWxvbWV0ZXJzIiksISh0Pj0wKSl0aHJvdyBuZXcgRXJyb3IoImFyZWEgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3ZhciBpPXIuYXJlYUZhY3RvcnNbZV07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIG9yaWdpbmFsIHVuaXRzIik7dmFyIGE9ci5hcmVhRmFjdG9yc1tuXTtpZighYSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZmluYWwgdW5pdHMiKTtyZXR1cm4gdC9pKmF9LHIuaXNOdW1iZXI9ZCxyLmlzT2JqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmdC5jb25zdHJ1Y3Rvcj09PU9iamVjdH0sci52YWxpZGF0ZUJCb3g9ZnVuY3Rpb24odCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJiYm94IGlzIHJlcXVpcmVkIik7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJiYm94IG11c3QgYmUgYW4gQXJyYXkiKTtpZig0IT09dC5sZW5ndGgmJjYhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBiZSBhbiBBcnJheSBvZiA0IG9yIDYgbnVtYmVycyIpO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoIWQodCkpdGhyb3cgbmV3IEVycm9yKCJiYm94IG11c3Qgb25seSBjb250YWluIG51bWJlcnMiKX0pKX0sci52YWxpZGF0ZUlkPWZ1bmN0aW9uKHQpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiaWQgaXMgcmVxdWlyZWQiKTtpZigtMT09PVsic3RyaW5nIiwibnVtYmVyIl0uaW5kZXhPZih0eXBlb2YgdCkpdGhyb3cgbmV3IEVycm9yKCJpZCBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nIil9LHIucmFkaWFuczJkZWdyZWVzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgcmFkaWFuc1RvRGVncmVlc2AiKX0sci5kZWdyZWVzMnJhZGlhbnM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBkZWdyZWVzVG9SYWRpYW5zYCIpfSxyLmRpc3RhbmNlVG9EZWdyZWVzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgbGVuZ3RoVG9EZWdyZWVzYCIpfSxyLmRpc3RhbmNlVG9SYWRpYW5zPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgbGVuZ3RoVG9SYWRpYW5zYCIpfSxyLnJhZGlhbnNUb0Rpc3RhbmNlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgcmFkaWFuc1RvTGVuZ3RoYCIpfSxyLmJlYXJpbmdUb0FuZ2xlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgYmVhcmluZ1RvQXppbXV0aGAiKX0sci5jb252ZXJ0RGlzdGFuY2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBjb252ZXJ0TGVuZ3RoYCIpfX0se31dLDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj10KCJAdHVyZi9oZWxwZXJzIik7ZnVuY3Rpb24gaSh0LGUscil7aWYobnVsbCE9PXQpZm9yKHZhciBuLGEsbyxzLGwsYyx1LGgsZj0wLHA9MCxkPXQudHlwZSxnPSJGZWF0dXJlQ29sbGVjdGlvbiI9PT1kLG09IkZlYXR1cmUiPT09ZCx2PWc/dC5mZWF0dXJlcy5sZW5ndGg6MSx5PTA7eTx2O3krKyl7bD0oaD0hISh1PWc/dC5mZWF0dXJlc1t5XS5nZW9tZXRyeTptP3QuZ2VvbWV0cnk6dCkmJiJHZW9tZXRyeUNvbGxlY3Rpb24iPT09dS50eXBlKT91Lmdlb21ldHJpZXMubGVuZ3RoOjE7Zm9yKHZhciB4PTA7eDxsO3grKyl7dmFyIGI9MCxfPTA7aWYobnVsbCE9PShzPWg/dS5nZW9tZXRyaWVzW3hdOnUpKXtjPXMuY29vcmRpbmF0ZXM7dmFyIHc9cy50eXBlO3N3aXRjaChmPSFyfHwiUG9seWdvbiIhPT13JiYiTXVsdGlQb2x5Z29uIiE9PXc/MDoxLHcpe2Nhc2UgbnVsbDpicmVhaztjYXNlIlBvaW50IjppZighMT09PWUoYyxwLHksYixfKSlyZXR1cm4hMTtwKyssYisrO2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6Y2FzZSJNdWx0aVBvaW50Ijpmb3Iobj0wO248Yy5sZW5ndGg7bisrKXtpZighMT09PWUoY1tuXSxwLHksYixfKSlyZXR1cm4hMTtwKyssIk11bHRpUG9pbnQiPT09dyYmYisrfSJMaW5lU3RyaW5nIj09PXcmJmIrKzticmVhaztjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpmb3Iobj0wO248Yy5sZW5ndGg7bisrKXtmb3IoYT0wO2E8Y1tuXS5sZW5ndGgtZjthKyspe2lmKCExPT09ZShjW25dW2FdLHAseSxiLF8pKXJldHVybiExO3ArK30iTXVsdGlMaW5lU3RyaW5nIj09PXcmJmIrKywiUG9seWdvbiI9PT13JiZfKyt9IlBvbHlnb24iPT09dyYmYisrO2JyZWFrO2Nhc2UiTXVsdGlQb2x5Z29uIjpmb3Iobj0wO248Yy5sZW5ndGg7bisrKXtmb3IoXz0wLGE9MDthPGNbbl0ubGVuZ3RoO2ErKyl7Zm9yKG89MDtvPGNbbl1bYV0ubGVuZ3RoLWY7bysrKXtpZighMT09PWUoY1tuXVthXVtvXSxwLHksYixfKSlyZXR1cm4hMTtwKyt9XysrfWIrK31icmVhaztjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKG49MDtuPHMuZ2VvbWV0cmllcy5sZW5ndGg7bisrKWlmKCExPT09aShzLmdlb21ldHJpZXNbbl0sZSxyKSlyZXR1cm4hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBHZW9tZXRyeSBUeXBlIil9fX19fWZ1bmN0aW9uIGEodCxlKXt2YXIgcjtzd2l0Y2godC50eXBlKXtjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjpmb3Iocj0wO3I8dC5mZWF0dXJlcy5sZW5ndGgmJiExIT09ZSh0LmZlYXR1cmVzW3JdLnByb3BlcnRpZXMscik7cisrKTticmVhaztjYXNlIkZlYXR1cmUiOmUodC5wcm9wZXJ0aWVzLDApfX1mdW5jdGlvbiBvKHQsZSl7aWYoIkZlYXR1cmUiPT09dC50eXBlKWUodCwwKTtlbHNlIGlmKCJGZWF0dXJlQ29sbGVjdGlvbiI9PT10LnR5cGUpZm9yKHZhciByPTA7cjx0LmZlYXR1cmVzLmxlbmd0aCYmITEhPT1lKHQuZmVhdHVyZXNbcl0scik7cisrKTt9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdSxoLGY9MCxwPSJGZWF0dXJlQ29sbGVjdGlvbiI9PT10LnR5cGUsZD0iRmVhdHVyZSI9PT10LnR5cGUsZz1wP3QuZmVhdHVyZXMubGVuZ3RoOjE7Zm9yKHI9MDtyPGc7cisrKXtmb3Iocz1wP3QuZmVhdHVyZXNbcl0uZ2VvbWV0cnk6ZD90Lmdlb21ldHJ5OnQsYz1wP3QuZmVhdHVyZXNbcl0ucHJvcGVydGllczpkP3QucHJvcGVydGllczp7fSx1PXA/dC5mZWF0dXJlc1tyXS5iYm94OmQ/dC5iYm94OnZvaWQgMCxoPXA/dC5mZWF0dXJlc1tyXS5pZDpkP3QuaWQ6dm9pZCAwLG89KGw9ISFzJiYiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXMudHlwZSk/cy5nZW9tZXRyaWVzLmxlbmd0aDoxLGk9MDtpPG87aSsrKWlmKG51bGwhPT0oYT1sP3MuZ2VvbWV0cmllc1tpXTpzKSlzd2l0Y2goYS50eXBlKXtjYXNlIlBvaW50IjpjYXNlIkxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2ludCI6Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpTGluZVN0cmluZyI6Y2FzZSJNdWx0aVBvbHlnb24iOmlmKCExPT09ZShhLGYsYyx1LGgpKXJldHVybiExO2JyZWFrO2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpmb3Iobj0wO248YS5nZW9tZXRyaWVzLmxlbmd0aDtuKyspaWYoITE9PT1lKGEuZ2VvbWV0cmllc1tuXSxmLGMsdSxoKSlyZXR1cm4hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBHZW9tZXRyeSBUeXBlIil9ZWxzZSBpZighMT09PWUobnVsbCxmLGMsdSxoKSlyZXR1cm4hMTtmKyt9fWZ1bmN0aW9uIGwodCxlKXtzKHQsKGZ1bmN0aW9uKHQscixpLGEsbyl7dmFyIHMsbD1udWxsPT09dD9udWxsOnQudHlwZTtzd2l0Y2gobCl7Y2FzZSBudWxsOmNhc2UiUG9pbnQiOmNhc2UiTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjpyZXR1cm4hMSE9PWUobi5mZWF0dXJlKHQsaSx7YmJveDphLGlkOm99KSxyLDApJiZ2b2lkIDB9c3dpdGNoKGwpe2Nhc2UiTXVsdGlQb2ludCI6cz0iUG9pbnQiO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpzPSJMaW5lU3RyaW5nIjticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cz0iUG9seWdvbiJ9Zm9yKHZhciBjPTA7Yzx0LmNvb3JkaW5hdGVzLmxlbmd0aDtjKyspe3ZhciB1PXt0eXBlOnMsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlc1tjXX07aWYoITE9PT1lKG4uZmVhdHVyZSh1LGkpLHIsYykpcmV0dXJuITF9fSkpfWZ1bmN0aW9uIGModCxlKXtsKHQsKGZ1bmN0aW9uKHQscixhKXt2YXIgbz0wO2lmKHQuZ2VvbWV0cnkpe3ZhciBzPXQuZ2VvbWV0cnkudHlwZTtpZigiUG9pbnQiIT09cyYmIk11bHRpUG9pbnQiIT09cyl7dmFyIGwsYz0wLHU9MCxoPTA7cmV0dXJuITEhPT1pKHQsKGZ1bmN0aW9uKGkscyxmLHAsZCl7aWYodm9pZCAwPT09bHx8cj5jfHxwPnV8fGQ+aClyZXR1cm4gbD1pLGM9cix1PXAsaD1kLHZvaWQobz0wKTt2YXIgZz1uLmxpbmVTdHJpbmcoW2wsaV0sdC5wcm9wZXJ0aWVzKTtpZighMT09PWUoZyxyLGEsZCxvKSlyZXR1cm4hMTtvKyssbD1pfSkpJiZ2b2lkIDB9fX0pKX1mdW5jdGlvbiB1KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIHJlcXVpcmVkIik7bCh0LChmdW5jdGlvbih0LHIsaSl7aWYobnVsbCE9PXQuZ2VvbWV0cnkpe3ZhciBhPXQuZ2VvbWV0cnkudHlwZSxvPXQuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7c3dpdGNoKGEpe2Nhc2UiTGluZVN0cmluZyI6aWYoITE9PT1lKHQscixpLDAsMCkpcmV0dXJuITE7YnJlYWs7Y2FzZSJQb2x5Z29uIjpmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKylpZighMT09PWUobi5saW5lU3RyaW5nKG9bc10sdC5wcm9wZXJ0aWVzKSxyLGkscykpcmV0dXJuITF9fX0pKX1yLmNvb3JkRWFjaD1pLHIuY29vcmRSZWR1Y2U9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9cjtyZXR1cm4gaSh0LChmdW5jdGlvbih0LG4saSxvLHMpe2E9MD09PW4mJnZvaWQgMD09PXI/dDplKGEsdCxuLGksbyxzKX0pLG4pLGF9LHIucHJvcEVhY2g9YSxyLnByb3BSZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIGEodCwoZnVuY3Rpb24odCxpKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSl9KSksbn0sci5mZWF0dXJlRWFjaD1vLHIuZmVhdHVyZVJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gbyh0LChmdW5jdGlvbih0LGkpe249MD09PWkmJnZvaWQgMD09PXI/dDplKG4sdCxpKX0pKSxufSxyLmNvb3JkQWxsPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBpKHQsKGZ1bmN0aW9uKHQpe2UucHVzaCh0KX0pKSxlfSxyLmdlb21FYWNoPXMsci5nZW9tUmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yO3JldHVybiBzKHQsKGZ1bmN0aW9uKHQsaSxhLG8scyl7bj0wPT09aSYmdm9pZCAwPT09cj90OmUobix0LGksYSxvLHMpfSkpLG59LHIuZmxhdHRlbkVhY2g9bCxyLmZsYXR0ZW5SZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIGwodCwoZnVuY3Rpb24odCxpLGEpe249MD09PWkmJjA9PT1hJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSxhKX0pKSxufSxyLnNlZ21lbnRFYWNoPWMsci5zZWdtZW50UmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLGk9ITE7cmV0dXJuIGModCwoZnVuY3Rpb24odCxhLG8scyxsKXtuPSExPT09aSYmdm9pZCAwPT09cj90OmUobix0LGEsbyxzLGwpLGk9ITB9KSksbn0sci5saW5lRWFjaD11LHIubGluZVJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gdSh0LChmdW5jdGlvbih0LGksYSxvKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSxhLG8pfSkpLG59LHIuZmluZFNlZ21lbnQ9ZnVuY3Rpb24odCxlKXtpZihlPWV8fHt9LCFuLmlzT2JqZWN0KGUpKXRocm93IG5ldyBFcnJvcigib3B0aW9ucyBpcyBpbnZhbGlkIik7dmFyIHIsaT1lLmZlYXR1cmVJbmRleHx8MCxhPWUubXVsdGlGZWF0dXJlSW5kZXh8fDAsbz1lLmdlb21ldHJ5SW5kZXh8fDAscz1lLnNlZ21lbnRJbmRleHx8MCxsPWUucHJvcGVydGllcztzd2l0Y2godC50eXBlKXtjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjppPDAmJihpPXQuZmVhdHVyZXMubGVuZ3RoK2kpLGw9bHx8dC5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzLHI9dC5mZWF0dXJlc1tpXS5nZW9tZXRyeTticmVhaztjYXNlIkZlYXR1cmUiOmw9bHx8dC5wcm9wZXJ0aWVzLHI9dC5nZW9tZXRyeTticmVhaztjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOnJldHVybiBudWxsO2Nhc2UiTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpTGluZVN0cmluZyI6Y2FzZSJNdWx0aVBvbHlnb24iOnI9dDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyBpbnZhbGlkIil9aWYobnVsbD09PXIpcmV0dXJuIG51bGw7dmFyIGM9ci5jb29yZGluYXRlcztzd2l0Y2goci50eXBlKXtjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOnJldHVybiBudWxsO2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIHM8MCYmKHM9Yy5sZW5ndGgrcy0xKSxuLmxpbmVTdHJpbmcoW2Nbc10sY1tzKzFdXSxsLGUpO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG88MCYmKG89Yy5sZW5ndGgrbyksczwwJiYocz1jW29dLmxlbmd0aCtzLTEpLG4ubGluZVN0cmluZyhbY1tvXVtzXSxjW29dW3MrMV1dLGwsZSk7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLHM8MCYmKHM9Y1thXS5sZW5ndGgrcy0xKSxuLmxpbmVTdHJpbmcoW2NbYV1bc10sY1thXVtzKzFdXSxsLGUpO2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxvPDAmJihvPWNbYV0ubGVuZ3RoK28pLHM8MCYmKHM9Y1thXVtvXS5sZW5ndGgtcy0xKSxuLmxpbmVTdHJpbmcoW2NbYV1bb11bc10sY1thXVtvXVtzKzFdXSxsLGUpfXRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyBpbnZhbGlkIil9LHIuZmluZFBvaW50PWZ1bmN0aW9uKHQsZSl7aWYoZT1lfHx7fSwhbi5pc09iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMgaXMgaW52YWxpZCIpO3ZhciByLGk9ZS5mZWF0dXJlSW5kZXh8fDAsYT1lLm11bHRpRmVhdHVyZUluZGV4fHwwLG89ZS5nZW9tZXRyeUluZGV4fHwwLHM9ZS5jb29yZEluZGV4fHwwLGw9ZS5wcm9wZXJ0aWVzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOmk8MCYmKGk9dC5mZWF0dXJlcy5sZW5ndGgraSksbD1sfHx0LmZlYXR1cmVzW2ldLnByb3BlcnRpZXMscj10LmZlYXR1cmVzW2ldLmdlb21ldHJ5O2JyZWFrO2Nhc2UiRmVhdHVyZSI6bD1sfHx0LnByb3BlcnRpZXMscj10Lmdlb21ldHJ5O2JyZWFrO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9seWdvbiI6cj10O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX1pZihudWxsPT09cilyZXR1cm4gbnVsbDt2YXIgYz1yLmNvb3JkaW5hdGVzO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBuLnBvaW50KGMsbCxlKTtjYXNlIk11bHRpUG9pbnQiOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLG4ucG9pbnQoY1thXSxsLGUpO2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIHM8MCYmKHM9Yy5sZW5ndGgrcyksbi5wb2ludChjW3NdLGwsZSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbzwwJiYobz1jLmxlbmd0aCtvKSxzPDAmJihzPWNbb10ubGVuZ3RoK3MpLG4ucG9pbnQoY1tvXVtzXSxsLGUpO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxzPDAmJihzPWNbYV0ubGVuZ3RoK3MpLG4ucG9pbnQoY1thXVtzXSxsLGUpO2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxvPDAmJihvPWNbYV0ubGVuZ3RoK28pLHM8MCYmKHM9Y1thXVtvXS5sZW5ndGgtcyksbi5wb2ludChjW2FdW29dW3NdLGwsZSl9dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX19LHsiQHR1cmYvaGVscGVycyI6NjJ9XSw2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0idW5kZWZpbmVkIj09dHlwZW9mIFdlYWtNYXA/dCgid2Vhay1tYXAiKTpXZWFrTWFwLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPW5ldyBuO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1vLmdldCh0KSxyPWUmJihlLl90cmlhbmdsZUJ1ZmZlci5oYW5kbGV8fGUuX3RyaWFuZ2xlQnVmZmVyLmJ1ZmZlcik7aWYoIXJ8fCF0LmlzQnVmZmVyKHIpKXt2YXIgbj1pKHQsbmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLTEsNCw0LC0xXSkpOyhlPWEodCxbe2J1ZmZlcjpuLHR5cGU6dC5GTE9BVCxzaXplOjJ9XSkpLl90cmlhbmdsZUJ1ZmZlcj1uLG8uc2V0KHQsZSl9ZS5iaW5kKCksdC5kcmF3QXJyYXlzKHQuVFJJQU5HTEVTLDAsMyksZS51bmJpbmQoKX19LHsiZ2wtYnVmZmVyIjoyNTgsImdsLXZhbyI6MzMyLCJ3ZWFrLW1hcCI6NTc0fV0sNjU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9MCxyPTAsbj0wLGk9MDtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBhPSh0PXQuc2xpY2UoKSlbMF0sbz1hLnRvVXBwZXJDYXNlKCk7aWYoYSE9bylzd2l0Y2godFswXT1vLGEpe2Nhc2UiYSI6dFs2XSs9bix0WzddKz1pO2JyZWFrO2Nhc2UidiI6dFsxXSs9aTticmVhaztjYXNlImgiOnRbMV0rPW47YnJlYWs7ZGVmYXVsdDpmb3IodmFyIHM9MTtzPHQubGVuZ3RoOyl0W3MrK10rPW4sdFtzKytdKz1pfXN3aXRjaChvKXtjYXNlIloiOm49ZSxpPXI7YnJlYWs7Y2FzZSJIIjpuPXRbMV07YnJlYWs7Y2FzZSJWIjppPXRbMV07YnJlYWs7Y2FzZSJNIjpuPWU9dFsxXSxpPXI9dFsyXTticmVhaztkZWZhdWx0Om49dFt0Lmxlbmd0aC0yXSxpPXRbdC5sZW5ndGgtMV19cmV0dXJuIHR9KSl9fSx7fV0sNjY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJwYWQtbGVmdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT0ibnVtYmVyIj09dHlwZW9mIGU/ZToxLHI9cnx8IjogIjt2YXIgaT10LnNwbGl0KC9ccj9cbi8pLGE9U3RyaW5nKGkubGVuZ3RoK2UtMSkubGVuZ3RoO3JldHVybiBpLm1hcCgoZnVuY3Rpb24odCxpKXt2YXIgbz1pK2Uscz1TdHJpbmcobykubGVuZ3RoO3JldHVybiBuKG8sYS1zKStyK3R9KSkuam9pbigiXG4iKX19LHsicGFkLWxlZnQiOjQ3Nn1dLDY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bMF07Zm9yKHZhciByPXRbMF0ubGVuZ3RoLG49W3RbMF1dLGE9WzBdLG89MTtvPGU7KytvKWlmKG4ucHVzaCh0W29dKSxpKG4scikpe2lmKGEucHVzaChvKSxhLmxlbmd0aD09PXIrMSlyZXR1cm4gYX1lbHNlIG4ucG9wKCk7cmV0dXJuIGF9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpO2Z1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUrMSksaT0wO2k8dC5sZW5ndGg7KytpKXJbaV09dFtpXTtmb3IoaT0wO2k8PXQubGVuZ3RoOysraSl7Zm9yKHZhciBhPXQubGVuZ3RoO2E8PWU7KythKXtmb3IodmFyIG89bmV3IEFycmF5KGUpLHM9MDtzPGU7KytzKW9bc109TWF0aC5wb3coYSsxLWkscyk7clthXT1vfWlmKG4uYXBwbHkodm9pZCAwLHIpKXJldHVybiEwfXJldHVybiExfX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUyMH1dLDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKGUpLmZpbHRlcigoZnVuY3Rpb24ocil7Zm9yKHZhciBuPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKW5bYV09ZVtyW2FdXTtyZXR1cm4gaShuKSp0PDF9KSl9O3ZhciBuPXQoImRlbGF1bmF5LXRyaWFuZ3VsYXRlIiksaT10KCJjaXJjdW1yYWRpdXMiKX0se2NpcmN1bXJhZGl1czoxMTksImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNzF9XSw2OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBpKG4odCxlKSl9O3ZhciBuPXQoImFscGhhLWNvbXBsZXgiKSxpPXQoInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeSIpfSx7ImFscGhhLWNvbXBsZXgiOjY4LCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnkiOjUyN31dLDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCF0fHxudWxsPT10Lmxlbmd0aCl0aHJvdyBFcnJvcigiQXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7ZT1udWxsPT1lPzE6TWF0aC5mbG9vcihlKTtmb3IodmFyIHI9QXJyYXkoMiplKSxuPTA7bjxlO24rKyl7Zm9yKHZhciBpPS0xLzAsYT0xLzAsbz1uLHM9dC5sZW5ndGg7bzxzO28rPWUpdFtvXT5pJiYoaT10W29dKSx0W29dPGEmJihhPXRbb10pO3Jbbl09YSxyW2Urbl09aX1yZXR1cm4gcn19LHt9XSw3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJhcnJheS1ib3VuZHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCF0fHxudWxsPT10Lmxlbmd0aCl0aHJvdyBFcnJvcigiQXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Iik7bnVsbD09ZSYmKGU9MSk7bnVsbD09ciYmKHI9bih0LGUpKTtmb3IodmFyIGk9MDtpPGU7aSsrKXt2YXIgYT1yW2UraV0sbz1yW2ldLHM9aSxsPXQubGVuZ3RoO2lmKGE9PT0xLzAmJm89PT0tMS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09YT8xOnRbc109PT1vPzA6LjU7ZWxzZSBpZihhPT09MS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09YT8xOjA7ZWxzZSBpZihvPT09LTEvMClmb3Iocz1pO3M8bDtzKz1lKXRbc109dFtzXT09PW8/MDoxO2Vsc2V7dmFyIGM9YS1vO2ZvcihzPWk7czxsO3MrPWUpaXNOYU4odFtzXSl8fCh0W3NdPTA9PT1jPy41Oih0W3NdLW8pL2MpfX1yZXR1cm4gdH19LHsiYXJyYXktYm91bmRzIjo3MH1dLDcyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Im51bWJlciI9PXR5cGVvZiB0LG49Im51bWJlciI9PXR5cGVvZiBlO3ImJiFuPyhlPXQsdD0wKTpyfHxufHwodD0wLGU9MCk7dmFyIGk9KGV8PTApLSh0fD0wKTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJhcnJheSBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZSIpO2Zvcih2YXIgYT1uZXcgQXJyYXkoaSksbz0wLHM9dDtvPGk7bysrLHMrKylhW29dPXM7cmV0dXJuIGF9fSx7fV0sNzM6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm9iamVjdC1hc3NpZ24iKTsKLyohCiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi9mdW5jdGlvbiBpKHQsZSl7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wLGE9TWF0aC5taW4ocixuKTtpPGE7KytpKWlmKHRbaV0hPT1lW2ldKXtyPXRbaV0sbj1lW2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH1mdW5jdGlvbiBhKHQpe3JldHVybiByLkJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIHIuQnVmZmVyLmlzQnVmZmVyP3IuQnVmZmVyLmlzQnVmZmVyKHQpOiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX12YXIgbz10KCJ1dGlsLyIpLHM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxsPUFycmF5LnByb3RvdHlwZS5zbGljZSxjPSJmb28iPT09ZnVuY3Rpb24oKXt9Lm5hbWU7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIWEodCkmJigiZnVuY3Rpb24iPT10eXBlb2Ygci5BcnJheUJ1ZmZlciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KHQpOiEhdCYmKHQgaW5zdGFuY2VvZiBEYXRhVmlld3x8ISEodC5idWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSkpfXZhciBmPWUuZXhwb3J0cz15LHA9L1xzKmZ1bmN0aW9uXHMrKFteXChcc10qKVxzKi87ZnVuY3Rpb24gZCh0KXtpZihvLmlzRnVuY3Rpb24odCkpe2lmKGMpcmV0dXJuIHQubmFtZTt2YXIgZT10LnRvU3RyaW5nKCkubWF0Y2gocCk7cmV0dXJuIGUmJmVbMV19fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5sZW5ndGg8ZT90OnQuc2xpY2UoMCxlKTp0fWZ1bmN0aW9uIG0odCl7aWYoY3x8IW8uaXNGdW5jdGlvbih0KSlyZXR1cm4gby5pbnNwZWN0KHQpO3ZhciBlPWQodCk7cmV0dXJuIltGdW5jdGlvbiIrKGU/IjogIitlOiIiKSsiXSJ9ZnVuY3Rpb24gdih0LGUscixuLGkpe3Rocm93IG5ldyBmLkFzc2VydGlvbkVycm9yKHttZXNzYWdlOnIsYWN0dWFsOnQsZXhwZWN0ZWQ6ZSxvcGVyYXRvcjpuLHN0YWNrU3RhcnRGdW5jdGlvbjppfSl9ZnVuY3Rpb24geSh0LGUpe3R8fHYodCwhMCxlLCI9PSIsZi5vayl9ZnVuY3Rpb24geCh0LGUscixuKXtpZih0PT09ZSlyZXR1cm4hMDtpZihhKHQpJiZhKGUpKXJldHVybiAwPT09aSh0LGUpO2lmKG8uaXNEYXRlKHQpJiZvLmlzRGF0ZShlKSlyZXR1cm4gdC5nZXRUaW1lKCk9PT1lLmdldFRpbWUoKTtpZihvLmlzUmVnRXhwKHQpJiZvLmlzUmVnRXhwKGUpKXJldHVybiB0LnNvdXJjZT09PWUuc291cmNlJiZ0Lmdsb2JhbD09PWUuZ2xvYmFsJiZ0Lm11bHRpbGluZT09PWUubXVsdGlsaW5lJiZ0Lmxhc3RJbmRleD09PWUubGFzdEluZGV4JiZ0Lmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2U7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8bnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYoaCh0KSYmaChlKSYmdSh0KT09PXUoZSkmJiEodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpcmV0dXJuIDA9PT1pKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpO2lmKGEodCkhPT1hKGUpKXJldHVybiExO3ZhciBzPShuPW58fHthY3R1YWw6W10sZXhwZWN0ZWQ6W119KS5hY3R1YWwuaW5kZXhPZih0KTtyZXR1cm4tMSE9PXMmJnM9PT1uLmV4cGVjdGVkLmluZGV4T2YoZSl8fChuLmFjdHVhbC5wdXNoKHQpLG4uZXhwZWN0ZWQucHVzaChlKSxmdW5jdGlvbih0LGUscixuKXtpZihudWxsPT10fHxudWxsPT1lKXJldHVybiExO2lmKG8uaXNQcmltaXRpdmUodCl8fG8uaXNQcmltaXRpdmUoZSkpcmV0dXJuIHQ9PT1lO2lmKHImJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMTt2YXIgaT1iKHQpLGE9YihlKTtpZihpJiYhYXx8IWkmJmEpcmV0dXJuITE7aWYoaSlyZXR1cm4gdD1sLmNhbGwodCksZT1sLmNhbGwoZSkseCh0LGUscik7dmFyIHMsYyx1PVQodCksaD1UKGUpO2lmKHUubGVuZ3RoIT09aC5sZW5ndGgpcmV0dXJuITE7Zm9yKHUuc29ydCgpLGguc29ydCgpLGM9dS5sZW5ndGgtMTtjPj0wO2MtLSlpZih1W2NdIT09aFtjXSlyZXR1cm4hMTtmb3IoYz11Lmxlbmd0aC0xO2M+PTA7Yy0tKWlmKHM9dVtjXSwheCh0W3NdLGVbc10scixuKSlyZXR1cm4hMTtyZXR1cm4hMH0odCxlLHIsbikpfXJldHVybiByP3Q9PT1lOnQ9PWV9ZnVuY3Rpb24gYih0KXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF8odCxlKXtpZighdHx8IWUpcmV0dXJuITE7aWYoIltvYmplY3QgUmVnRXhwXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gZS50ZXN0KHQpO3RyeXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4hMH1jYXRjaCh0KXt9cmV0dXJuIUVycm9yLmlzUHJvdG90eXBlT2YoZSkmJiEwPT09ZS5jYWxsKHt9LHQpfWZ1bmN0aW9uIHcodCxlLHIsbil7dmFyIGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignImJsb2NrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTsic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxpPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0KCl9Y2F0Y2godCl7ZT10fXJldHVybiBlfShlKSxuPShyJiZyLm5hbWU/IiAoIityLm5hbWUrIikuIjoiLiIpKyhuPyIgIituOiIuIiksdCYmIWkmJnYoaSxyLCJNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbiIrbik7dmFyIGE9InN0cmluZyI9PXR5cGVvZiBuLHM9IXQmJmkmJiFyO2lmKCghdCYmby5pc0Vycm9yKGkpJiZhJiZfKGkscil8fHMpJiZ2KGksciwiR290IHVud2FudGVkIGV4Y2VwdGlvbiIrbiksdCYmaSYmciYmIV8oaSxyKXx8IXQmJmkpdGhyb3cgaX1mLkFzc2VydGlvbkVycm9yPWZ1bmN0aW9uKHQpe3RoaXMubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLHRoaXMuYWN0dWFsPXQuYWN0dWFsLHRoaXMuZXhwZWN0ZWQ9dC5leHBlY3RlZCx0aGlzLm9wZXJhdG9yPXQub3BlcmF0b3IsdC5tZXNzYWdlPyh0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMSk6KHRoaXMubWVzc2FnZT1mdW5jdGlvbih0KXtyZXR1cm4gZyhtKHQuYWN0dWFsKSwxMjgpKyIgIit0Lm9wZXJhdG9yKyIgIitnKG0odC5leHBlY3RlZCksMTI4KX0odGhpcyksdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSEwKTt2YXIgZT10LnN0YWNrU3RhcnRGdW5jdGlvbnx8djtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGUpO2Vsc2V7dmFyIHI9bmV3IEVycm9yO2lmKHIuc3RhY2spe3ZhciBuPXIuc3RhY2ssaT1kKGUpLGE9bi5pbmRleE9mKCJcbiIraSk7aWYoYT49MCl7dmFyIG89bi5pbmRleE9mKCJcbiIsYSsxKTtuPW4uc3Vic3RyaW5nKG8rMSl9dGhpcy5zdGFjaz1ufX19LG8uaW5oZXJpdHMoZi5Bc3NlcnRpb25FcnJvcixFcnJvciksZi5mYWlsPXYsZi5vaz15LGYuZXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPWUmJnYodCxlLHIsIj09IixmLmVxdWFsKX0sZi5ub3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09ZSYmdih0LGUsciwiIT0iLGYubm90RXF1YWwpfSxmLmRlZXBFcXVhbD1mdW5jdGlvbih0LGUscil7eCh0LGUsITEpfHx2KHQsZSxyLCJkZWVwRXF1YWwiLGYuZGVlcEVxdWFsKX0sZi5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3godCxlLCEwKXx8dih0LGUsciwiZGVlcFN0cmljdEVxdWFsIixmLmRlZXBTdHJpY3RFcXVhbCl9LGYubm90RGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt4KHQsZSwhMSkmJnYodCxlLHIsIm5vdERlZXBFcXVhbCIsZi5ub3REZWVwRXF1YWwpfSxmLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiB0KGUscixuKXt4KGUsciwhMCkmJnYoZSxyLG4sIm5vdERlZXBTdHJpY3RFcXVhbCIsdCl9LGYuc3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPT1lJiZ2KHQsZSxyLCI9PT0iLGYuc3RyaWN0RXF1YWwpfSxmLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT09ZSYmdih0LGUsciwiIT09IixmLm5vdFN0cmljdEVxdWFsKX0sZi50aHJvd3M9ZnVuY3Rpb24odCxlLHIpe3coITAsdCxlLHIpfSxmLmRvZXNOb3RUaHJvdz1mdW5jdGlvbih0LGUscil7dyghMSx0LGUscil9LGYuaWZFcnJvcj1mdW5jdGlvbih0KXtpZih0KXRocm93IHR9LGYuc3RyaWN0PW4oKGZ1bmN0aW9uIHQoZSxyKXtlfHx2KGUsITAsciwiPT0iLHQpfSksZix7ZXF1YWw6Zi5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6Zi5kZWVwU3RyaWN0RXF1YWwsbm90RXF1YWw6Zi5ub3RTdHJpY3RFcXVhbCxub3REZWVwRXF1YWw6Zi5ub3REZWVwU3RyaWN0RXF1YWx9KSxmLnN0cmljdC5zdHJpY3Q9Zi5zdHJpY3Q7dmFyIFQ9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KXMuY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Im9iamVjdC1hc3NpZ24iOjQ3MywidXRpbC8iOjc2fV0sNzQ6W2Z1bmN0aW9uKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTplLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0se31dLDc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYib2JqZWN0Ij09dHlwZW9mIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlYWRVSW50OH19LHt9XSw3NjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4pe3ZhciBpPS8lW3NkaiVdL2c7ci5mb3JtYXQ9ZnVuY3Rpb24odCl7aWYoIXYodCkpe2Zvcih2YXIgZT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllLnB1c2gocyhhcmd1bWVudHNbcl0pKTtyZXR1cm4gZS5qb2luKCIgIil9cj0xO2Zvcih2YXIgbj1hcmd1bWVudHMsYT1uLmxlbmd0aCxvPVN0cmluZyh0KS5yZXBsYWNlKGksKGZ1bmN0aW9uKHQpe2lmKCIlJSI9PT10KXJldHVybiIlIjtpZihyPj1hKXJldHVybiB0O3N3aXRjaCh0KXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKG5bcisrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihuW3IrK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobltyKytdKX1jYXRjaCh0KXtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gdH19KSksbD1uW3JdO3I8YTtsPW5bKytyXSlnKGwpfHwhYihsKT9vKz0iICIrbDpvKz0iICIrcyhsKTtyZXR1cm4gb30sci5kZXByZWNhdGU9ZnVuY3Rpb24odCxpKXtpZih5KG4ucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVwcmVjYXRlKHQsaSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZighMD09PWUubm9EZXByZWNhdGlvbilyZXR1cm4gdDt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighYSl7aWYoZS50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihpKTtlLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShpKTpjb25zb2xlLmVycm9yKGkpLGE9ITB9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIGEsbz17fTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49e3NlZW46W10sc3R5bGl6ZTpjfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKG4uZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYobi5jb2xvcnM9YXJndW1lbnRzWzNdKSxkKGUpP24uc2hvd0hpZGRlbj1lOmUmJnIuX2V4dGVuZChuLGUpLHkobi5zaG93SGlkZGVuKSYmKG4uc2hvd0hpZGRlbj0hMSkseShuLmRlcHRoKSYmKG4uZGVwdGg9MikseShuLmNvbG9ycykmJihuLmNvbG9ycz0hMSkseShuLmN1c3RvbUluc3BlY3QpJiYobi5jdXN0b21JbnNwZWN0PSEwKSxuLmNvbG9ycyYmKG4uc3R5bGl6ZT1sKSx1KG4sdCxuLmRlcHRoKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9cy5zdHlsZXNbZV07cmV0dXJuIHI/Ilx4MWJbIitzLmNvbG9yc1tyXVswXSsibSIrdCsiXHgxYlsiK3MuY29sb3JzW3JdWzFdKyJtIjp0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdH1mdW5jdGlvbiB1KHQsZSxuKXtpZih0LmN1c3RvbUluc3BlY3QmJmUmJlQoZS5pbnNwZWN0KSYmZS5pbnNwZWN0IT09ci5pbnNwZWN0JiYoIWUuY29uc3RydWN0b3J8fGUuY29uc3RydWN0b3IucHJvdG90eXBlIT09ZSkpe3ZhciBpPWUuaW5zcGVjdChuLHQpO3JldHVybiB2KGkpfHwoaT11KHQsaSxuKSksaX12YXIgYT1mdW5jdGlvbih0LGUpe2lmKHkoZSkpcmV0dXJuIHQuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYodihlKSl7dmFyIHI9IiciK0pTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHQuc3R5bGl6ZShyLCJzdHJpbmciKX1pZihtKGUpKXJldHVybiB0LnN0eWxpemUoIiIrZSwibnVtYmVyIik7aWYoZChlKSlyZXR1cm4gdC5zdHlsaXplKCIiK2UsImJvb2xlYW4iKTtpZihnKGUpKXJldHVybiB0LnN0eWxpemUoIm51bGwiLCJudWxsIil9KHQsZSk7aWYoYSlyZXR1cm4gYTt2YXIgbz1PYmplY3Qua2V5cyhlKSxzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQscil7ZVt0XT0hMH0pKSxlfShvKTtpZih0LnNob3dIaWRkZW4mJihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKSx3KGUpJiYoby5pbmRleE9mKCJtZXNzYWdlIik+PTB8fG8uaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIGgoZSk7aWYoMD09PW8ubGVuZ3RoKXtpZihUKGUpKXt2YXIgbD1lLm5hbWU/IjogIitlLm5hbWU6IiI7cmV0dXJuIHQuc3R5bGl6ZSgiW0Z1bmN0aW9uIitsKyJdIiwic3BlY2lhbCIpfWlmKHgoZSkpcmV0dXJuIHQuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksInJlZ2V4cCIpO2lmKF8oZSkpcmV0dXJuIHQuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJkYXRlIik7aWYodyhlKSlyZXR1cm4gaChlKX12YXIgYyxiPSIiLGs9ITEsTT1bInsiLCJ9Il07KHAoZSkmJihrPSEwLE09WyJbIiwiXSJdKSxUKGUpKSYmKGI9IiBbRnVuY3Rpb24iKyhlLm5hbWU/IjogIitlLm5hbWU6IiIpKyJdIik7cmV0dXJuIHgoZSkmJihiPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpLF8oZSkmJihiPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKGUpKSx3KGUpJiYoYj0iICIraChlKSksMCE9PW8ubGVuZ3RofHxrJiYwIT1lLmxlbmd0aD9uPDA/eChlKT90LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJyZWdleHAiKTp0LnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOih0LnNlZW4ucHVzaChlKSxjPWs/ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9ZS5sZW5ndGg7bzxzOysrbylFKGUsU3RyaW5nKG8pKT9hLnB1c2goZih0LGUscixuLFN0cmluZyhvKSwhMCkpOmEucHVzaCgiIik7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24oaSl7aS5tYXRjaCgvXlxkKyQvKXx8YS5wdXNoKGYodCxlLHIsbixpLCEwKSl9KSksYX0odCxlLG4scyxvKTpvLm1hcCgoZnVuY3Rpb24ocil7cmV0dXJuIGYodCxlLG4scyxyLGspfSkpLHQuc2Vlbi5wb3AoKSxmdW5jdGlvbih0LGUscil7aWYodC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaW5kZXhPZigiXG4iKT49MCYmMCx0K2UucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9KSwwKT42MClyZXR1cm4gclswXSsoIiI9PT1lPyIiOmUrIlxuICIpKyIgIit0LmpvaW4oIixcbiAgIikrIiAiK3JbMV07cmV0dXJuIHJbMF0rZSsiICIrdC5qb2luKCIsICIpKyIgIityWzFdfShjLGIsTSkpOk1bMF0rYitNWzFdfWZ1bmN0aW9uIGgodCl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKyJdIn1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgbyxzLGw7aWYoKGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpfHx7dmFsdWU6ZVtpXX0pLmdldD9zPWwuc2V0P3Quc3R5bGl6ZSgiW0dldHRlci9TZXR0ZXJdIiwic3BlY2lhbCIpOnQuc3R5bGl6ZSgiW0dldHRlcl0iLCJzcGVjaWFsIik6bC5zZXQmJihzPXQuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLEUobixpKXx8KG89IlsiK2krIl0iKSxzfHwodC5zZWVuLmluZGV4T2YobC52YWx1ZSk8MD8ocz1nKHIpP3UodCxsLnZhbHVlLG51bGwpOnUodCxsLnZhbHVlLHItMSkpLmluZGV4T2YoIlxuIik+LTEmJihzPWE/cy5zcGxpdCgiXG4iKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIgICIrdH0pKS5qb2luKCJcbiIpLnN1YnN0cigyKToiXG4iK3Muc3BsaXQoIlxuIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iICAgIit0fSkpLmpvaW4oIlxuIikpOnM9dC5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSx5KG8pKXtpZihhJiZpLm1hdGNoKC9eXGQrJC8pKXJldHVybiBzOyhvPUpTT04uc3RyaW5naWZ5KCIiK2kpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyhvPW8uc3Vic3RyKDEsby5sZW5ndGgtMiksbz10LnN0eWxpemUobywibmFtZSIpKToobz1vLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSxvPXQuc3R5bGl6ZShvLCJzdHJpbmciKSl9cmV0dXJuIG8rIjogIitzfWZ1bmN0aW9uIHAodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIGcodCl7cmV0dXJuIG51bGw9PT10fWZ1bmN0aW9uIG0odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIHYodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIHkodCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24geCh0KXtyZXR1cm4gYih0KSYmIltvYmplY3QgUmVnRXhwXSI9PT1rKHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBfKHQpe3JldHVybiBiKHQpJiYiW29iamVjdCBEYXRlXSI9PT1rKHQpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIGIodCkmJigiW29iamVjdCBFcnJvcl0iPT09ayh0KXx8dCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBUKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIGsodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBNKHQpe3JldHVybiB0PDEwPyIwIit0LnRvU3RyaW5nKDEwKTp0LnRvU3RyaW5nKDEwKX1yLmRlYnVnbG9nPWZ1bmN0aW9uKHQpe2lmKHkoYSkmJihhPWUuZW52Lk5PREVfREVCVUd8fCIiKSx0PXQudG9VcHBlckNhc2UoKSwhb1t0XSlpZihuZXcgUmVnRXhwKCJcXGIiK3QrIlxcYiIsImkiKS50ZXN0KGEpKXt2YXIgbj1lLnBpZDtvW3RdPWZ1bmN0aW9uKCl7dmFyIGU9ci5mb3JtYXQuYXBwbHkocixhcmd1bWVudHMpO2NvbnNvbGUuZXJyb3IoIiVzICVkOiAlcyIsdCxuLGUpfX1lbHNlIG9bdF09ZnVuY3Rpb24oKXt9O3JldHVybiBvW3RdfSxyLmluc3BlY3Q9cyxzLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0scy5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxyLmlzQXJyYXk9cCxyLmlzQm9vbGVhbj1kLHIuaXNOdWxsPWcsci5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dH0sci5pc051bWJlcj1tLHIuaXNTdHJpbmc9dixyLmlzU3ltYm9sPWZ1bmN0aW9uKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdH0sci5pc1VuZGVmaW5lZD15LHIuaXNSZWdFeHA9eCxyLmlzT2JqZWN0PWIsci5pc0RhdGU9XyxyLmlzRXJyb3I9dyxyLmlzRnVuY3Rpb249VCxyLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0fHwic3RyaW5nIj09dHlwZW9mIHR8fCJzeW1ib2wiPT10eXBlb2YgdHx8InVuZGVmaW5lZCI9PXR5cGVvZiB0fSxyLmlzQnVmZmVyPXQoIi4vc3VwcG9ydC9pc0J1ZmZlciIpO3ZhciBBPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gUygpe3ZhciB0PW5ldyBEYXRlLGU9W00odC5nZXRIb3VycygpKSxNKHQuZ2V0TWludXRlcygpKSxNKHQuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVyblt0LmdldERhdGUoKSxBW3QuZ2V0TW9udGgoKV0sZV0uam9pbigiICIpfWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ci5sb2c9ZnVuY3Rpb24oKXtjb25zb2xlLmxvZygiJXMgLSAlcyIsUygpLHIuZm9ybWF0LmFwcGx5KHIsYXJndW1lbnRzKSl9LHIuaW5oZXJpdHM9dCgiaW5oZXJpdHMiKSxyLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtpZighZXx8IWIoZSkpcmV0dXJuIHQ7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ci5sZW5ndGg7bi0tOyl0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9zdXBwb3J0L2lzQnVmZmVyIjo3NSxfcHJvY2Vzczo1MDAsaW5oZXJpdHM6NzR9XSw3NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYXRvYih0KX19LHt9XSw3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsYT1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyl7Zm9yKHZhciBzPW5ldyBBcnJheShyKzEpLGw9MDtsPD1yOysrbClzW2xdPXRbbF1bb107YVtvXT1zfWFbcl09bmV3IEFycmF5KHIrMSk7Zm9yKG89MDtvPD1yOysrbylhW3JdW29dPTE7dmFyIGM9bmV3IEFycmF5KHIrMSk7Zm9yKG89MDtvPHI7KytvKWNbb109ZVtvXTtjW3JdPTE7dmFyIHU9bihhLGMpLGg9aSh1W3IrMV0pOzA9PT1oJiYoaD0xKTt2YXIgZj1uZXcgQXJyYXkocisxKTtmb3Iobz0wO288PXI7KytvKWZbb109aSh1W29dKS9oO3JldHVybiBmfTt2YXIgbj10KCJyb2J1c3QtbGluZWFyLXNvbHZlIik7ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDsrK3IpZSs9dFtyXTtyZXR1cm4gZX19LHsicm9idXN0LWxpbmVhci1zb2x2ZSI6NTE5fV0sNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5ieXRlTGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBlPWModCkscj1lWzBdLG49ZVsxXTtyZXR1cm4gMyoocituKS80LW59LHIudG9CeXRlQXJyYXk9ZnVuY3Rpb24odCl7dmFyIGUscixuPWModCksbz1uWzBdLHM9blsxXSxsPW5ldyBhKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMyooZStyKS80LXJ9KDAsbyxzKSksdT0wLGg9cz4wP28tNDpvO2ZvcihyPTA7cjxoO3IrPTQpZT1pW3QuY2hhckNvZGVBdChyKV08PDE4fGlbdC5jaGFyQ29kZUF0KHIrMSldPDwxMnxpW3QuY2hhckNvZGVBdChyKzIpXTw8NnxpW3QuY2hhckNvZGVBdChyKzMpXSxsW3UrK109ZT4+MTYmMjU1LGxbdSsrXT1lPj44JjI1NSxsW3UrK109MjU1JmU7Mj09PXMmJihlPWlbdC5jaGFyQ29kZUF0KHIpXTw8MnxpW3QuY2hhckNvZGVBdChyKzEpXT4+NCxsW3UrK109MjU1JmUpOzE9PT1zJiYoZT1pW3QuY2hhckNvZGVBdChyKV08PDEwfGlbdC5jaGFyQ29kZUF0KHIrMSldPDw0fGlbdC5jaGFyQ29kZUF0KHIrMildPj4yLGxbdSsrXT1lPj44JjI1NSxsW3UrK109MjU1JmUpO3JldHVybiBsfSxyLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsaT1yJTMsYT1bXSxvPTAscz1yLWk7bzxzO28rPTE2MzgzKWEucHVzaCh1KHQsbyxvKzE2MzgzPnM/czpvKzE2MzgzKSk7MT09PWk/KGU9dFtyLTFdLGEucHVzaChuW2U+PjJdK25bZTw8NCY2M10rIj09IikpOjI9PT1pJiYoZT0odFtyLTJdPDw4KSt0W3ItMV0sYS5wdXNoKG5bZT4+MTBdK25bZT4+NCY2M10rbltlPDwyJjYzXSsiPSIpKTtyZXR1cm4gYS5qb2luKCIiKX07Zm9yKHZhciBuPVtdLGk9W10sYT0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxvPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixzPTAsbD1vLmxlbmd0aDtzPGw7KytzKW5bc109b1tzXSxpW28uY2hhckNvZGVBdChzKV09cztmdW5jdGlvbiBjKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGUlND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciByPXQuaW5kZXhPZigiPSIpO3JldHVybi0xPT09ciYmKHI9ZSksW3Iscj09PWU/MDo0LXIlNF19ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBpLGEsbz1bXSxzPWU7czxyO3MrPTMpaT0odFtzXTw8MTYmMTY3MTE2ODApKyh0W3MrMV08PDgmNjUyODApKygyNTUmdFtzKzJdKSxvLnB1c2goblsoYT1pKT4+MTgmNjNdK25bYT4+MTImNjNdK25bYT4+NiY2M10rbls2MyZhXSk7cmV0dXJuIG8uam9pbigiIil9aVsiLSIuY2hhckNvZGVBdCgwKV09NjIsaVsiXyIuY2hhckNvZGVBdCgwKV09NjN9LHt9XSw4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMV0pLmFkZChlWzBdLm11bCh0WzFdKSksdFsxXS5tdWwoZVsxXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6OTB9XSw4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS5tdWwoZVsxXSkuY21wKGVbMF0ubXVsKHRbMV0pKX19LHt9XSw4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMV0pLHRbMV0ubXVsKGVbMF0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjkwfV0sODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1yYXQiKSxpPXQoIi4vbGliL2lzLWJuIiksYT10KCIuL2xpYi9udW0tdG8tYm4iKSxvPXQoIi4vbGliL3N0ci10by1ibiIpLHM9dCgiLi9saWIvcmF0aW9uYWxpemUiKSxsPXQoIi4vZGl2Iik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtpZihuKGUpKXJldHVybiByP2woZSx0KHIpKTpbZVswXS5jbG9uZSgpLGVbMV0uY2xvbmUoKV07dmFyIGMsdSxoPTA7aWYoaShlKSljPWUuY2xvbmUoKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSljPW8oZSk7ZWxzZXtpZigwPT09ZSlyZXR1cm5bYSgwKSxhKDEpXTtpZihlPT09TWF0aC5mbG9vcihlKSljPWEoZSk7ZWxzZXtmb3IoO2UhPT1NYXRoLmZsb29yKGUpOyllKj1NYXRoLnBvdygyLDI1NiksaC09MjU2O2M9YShlKX19aWYobihyKSljLm11bChyWzFdKSx1PXJbMF0uY2xvbmUoKTtlbHNlIGlmKGkocikpdT1yLmNsb25lKCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHIpdT1vKHIpO2Vsc2UgaWYocilpZihyPT09TWF0aC5mbG9vcihyKSl1PWEocik7ZWxzZXtmb3IoO3IhPT1NYXRoLmZsb29yKHIpOylyKj1NYXRoLnBvdygyLDI1NiksaCs9MjU2O3U9YShyKX1lbHNlIHU9YSgxKTtoPjA/Yz1jLnVzaGxuKGgpOmg8MCYmKHU9dS51c2hsbigtaCkpO3JldHVybiBzKGMsdSl9fSx7Ii4vZGl2Ijo4MiwiLi9pcy1yYXQiOjg0LCIuL2xpYi9pcy1ibiI6ODgsIi4vbGliL251bS10by1ibiI6ODksIi4vbGliL3JhdGlvbmFsaXplIjo5MCwiLi9saWIvc3RyLXRvLWJuIjo5MX1dLDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2lzLWJuIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYyPT09dC5sZW5ndGgmJm4odFswXSkmJm4odFsxXSl9fSx7Ii4vbGliL2lzLWJuIjo4OH1dLDg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNtcChuZXcgbigwKSl9fSx7ImJuLmpzIjo5OX1dLDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYm4tc2lnbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxyPXQud29yZHMsaT0wO2lmKDE9PT1lKWk9clswXTtlbHNlIGlmKDI9PT1lKWk9clswXSs2NzEwODg2NCpyWzFdO2Vsc2UgZm9yKHZhciBhPTA7YTxlO2ErKyl7dmFyIG89clthXTtpKz1vKk1hdGgucG93KDY3MTA4ODY0LGEpfXJldHVybiBuKHQpKml9fSx7Ii4vYm4tc2lnbiI6ODV9XSw4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkb3VibGUtYml0cyIpLGk9dCgiYml0LXR3aWRkbGUiKS5jb3VudFRyYWlsaW5nWmVyb3M7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkobi5sbyh0KSk7aWYoZTwzMilyZXR1cm4gZTt2YXIgcj1pKG4uaGkodCkpO2lmKHI+MjApcmV0dXJuIDUyO3JldHVybiByKzMyfX0seyJiaXQtdHdpZGRsZSI6OTcsImRvdWJsZS1iaXRzIjoxNzN9XSw4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt0KCJibi5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZCb29sZWFuKHQud29yZHMpfX0seyJibi5qcyI6OTl9XSw4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJibi5qcyIpLGk9dCgiZG91YmxlLWJpdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aS5leHBvbmVudCh0KTtyZXR1cm4gZTw1Mj9uZXcgbih0KTpuZXcgbih0Kk1hdGgucG93KDIsNTItZSkpLnVzaGxuKGUtNTIpfX0seyJibi5qcyI6OTksImRvdWJsZS1iaXRzIjoxNzN9XSw5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL251bS10by1ibiIpLGk9dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0KSxhPWkoZSk7aWYoMD09PXIpcmV0dXJuW24oMCksbigxKV07aWYoMD09PWEpcmV0dXJuW24oMCksbigwKV07YTwwJiYodD10Lm5lZygpLGU9ZS5uZWcoKSk7dmFyIG89dC5nY2QoZSk7aWYoby5jbXBuKDEpKXJldHVyblt0LmRpdihvKSxlLmRpdihvKV07cmV0dXJuW3QsZV19fSx7Ii4vYm4tc2lnbiI6ODUsIi4vbnVtLXRvLWJuIjo4OX1dLDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0KX19LHsiYm4uanMiOjk5fV0sOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzBdKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo5MH1dLDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2JuLXNpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odFswXSkqbih0WzFdKX19LHsiLi9saWIvYm4tc2lnbiI6ODV9XSw5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMV0pLnN1Yih0WzFdLm11bChlWzBdKSksdFsxXS5tdWwoZVsxXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6OTB9XSw5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9ibi10by1udW0iKSxpPXQoIi4vbGliL2N0eiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXTtpZigwPT09ZS5jbXBuKDApKXJldHVybiAwO3ZhciBhPWUuYWJzKCkuZGl2bW9kKHIuYWJzKCkpLG89YS5kaXYscz1uKG8pLGw9YS5tb2QsYz1lLm5lZ2F0aXZlIT09ci5uZWdhdGl2ZT8tMToxO2lmKDA9PT1sLmNtcG4oMCkpcmV0dXJuIGMqcztpZihzKXt2YXIgdT1pKHMpKzQsaD1uKGwudXNobG4odSkuZGl2Um91bmQocikpO3JldHVybiBjKihzK2gqTWF0aC5wb3coMiwtdSkpfXZhciBmPXIuYml0TGVuZ3RoKCktbC5iaXRMZW5ndGgoKSs1MztoPW4obC51c2hsbihmKS5kaXZSb3VuZChyKSk7cmV0dXJuIGY8MTAyMz9jKmgqTWF0aC5wb3coMiwtZik6KGgqPU1hdGgucG93KDIsLTEwMjMpLGMqaCpNYXRoLnBvdygyLDEwMjMtZikpfX0seyIuL2xpYi9ibi10by1udW0iOjg2LCIuL2xpYi9jdHoiOjg3fV0sOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPVsiZnVuY3Rpb24gIix0LCIoYSxsLGgsIixuLmpvaW4oIiwiKSwiKXsiLGk/IiI6InZhciBpPSIscj8ibC0xIjoiaCsxIiwiO3doaWxlKGw8PWgpe3ZhciBtPShsK2gpPj4+MSx4PWFbbV0iXTtyZXR1cm4gaT9lLmluZGV4T2YoImMiKTwwP2EucHVzaCgiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpeyIpOmEucHVzaCgiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXsiKTphLnB1c2goIjtpZigiLGUsIil7aT1tOyIpLHI/YS5wdXNoKCJsPW0rMX1lbHNle2g9bS0xfSIpOmEucHVzaCgiaD1tLTF9ZWxzZXtsPW0rMX0iKSxhLnB1c2goIn0iKSxpP2EucHVzaCgicmV0dXJuIC0xfTsiKTphLnB1c2goInJldHVybiBpfTsiKSxhLmpvaW4oIiIpfWZ1bmN0aW9uIGkodCxlLHIsaSl7cmV0dXJuIG5ldyBGdW5jdGlvbihbbigiQSIsIngiK3QrInkiLGUsWyJ5Il0saSksbigiUCIsImMoeCx5KSIrdCsiMCIsZSxbInkiLCJjIl0saSksImZ1bmN0aW9uIGRpc3BhdGNoQnNlYXJjaCIsciwiKGEseSxjLGwsaCl7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFAoYSwobD09PXZvaWQgMCk/MDpsfDAsKGg9PT12b2lkIDApP2EubGVuZ3RoLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQShhLChjPT09dm9pZCAwKT8wOmN8MCwobD09PXZvaWQgMCk/YS5sZW5ndGgtMTpsfDAseSl9fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKSgpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSw5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPTMyO3JldHVybih0Jj0tdCkmJmUtLSw2NTUzNSZ0JiYoZS09MTYpLDE2NzExOTM1JnQmJihlLT04KSwyNTI2NDUxMzUmdCYmKGUtPTQpLDg1ODk5MzQ1OSZ0JiYoZS09MiksMTQzMTY1NTc2NSZ0JiYoZS09MSksZX1yLklOVF9CSVRTPTMyLHIuSU5UX01BWD0yMTQ3NDgzNjQ3LHIuSU5UX01JTj0tMTw8MzEsci5zaWduPWZ1bmN0aW9uKHQpe3JldHVybih0PjApLSh0PDApfSxyLmFicz1mdW5jdGlvbih0KXt2YXIgZT10Pj4zMTtyZXR1cm4odF5lKS1lfSxyLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiBlXih0XmUpJi0odDxlKX0sci5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdF4odF5lKSYtKHQ8ZSl9LHIuaXNQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiEodCZ0LTF8fCF0KX0sci5sb2cyPWZ1bmN0aW9uKHQpe3ZhciBlLHI7cmV0dXJuIGU9KHQ+NjU1MzUpPDw0LGV8PXI9KCh0Pj4+PWUpPjI1NSk8PDMsZXw9cj0oKHQ+Pj49cik+MTUpPDwyLChlfD1yPSgodD4+Pj1yKT4zKTw8MSl8KHQ+Pj49cik+PjF9LHIubG9nMTA9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTFlOT85OnQ+PTFlOD84OnQ+PTFlNz83OnQ+PTFlNj82OnQ+PTFlNT81OnQ+PTFlND80OnQ+PTFlMz8zOnQ+PTEwMD8yOnQ+PTEwPzE6MH0sci5wb3BDb3VudD1mdW5jdGlvbih0KXtyZXR1cm4gMTY4NDMwMDkqKCh0PSg4NTg5OTM0NTkmKHQtPXQ+Pj4xJjE0MzE2NTU3NjUpKSsodD4+PjImODU4OTkzNDU5KSkrKHQ+Pj40KSYyNTI2NDUxMzUpPj4+MjR9LHIuY291bnRUcmFpbGluZ1plcm9zPW4sci5uZXh0UG93Mj1mdW5jdGlvbih0KXtyZXR1cm4gdCs9MD09PXQsLS10LHR8PXQ+Pj4xLHR8PXQ+Pj4yLHR8PXQ+Pj40LHR8PXQ+Pj44LCh0fD10Pj4+MTYpKzF9LHIucHJldlBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHR8PXQ+Pj4xLHR8PXQ+Pj4yLHR8PXQ+Pj40LHR8PXQ+Pj44LCh0fD10Pj4+MTYpLSh0Pj4+MSl9LHIucGFyaXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Xj10Pj4+MTYsdF49dD4+PjgsdF49dD4+PjQsMjcwMzA+Pj4odCY9MTUpJjF9O3ZhciBpPW5ldyBBcnJheSgyNTYpOyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPDI1NjsrK2Upe3ZhciByPWUsbj1lLGk9Nztmb3Iocj4+Pj0xO3I7cj4+Pj0xKW48PD0xLG58PTEmciwtLWk7dFtlXT1uPDxpJjI1NX19KGkpLHIucmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4gaVsyNTUmdF08PDI0fGlbdD4+PjgmMjU1XTw8MTZ8aVt0Pj4+MTYmMjU1XTw8OHxpW3Q+Pj4yNCYyNTVdfSxyLmludGVybGVhdmUyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodCY9NjU1MzUpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlJj02NTUzNSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfSxyLmRlaW50ZXJsZWF2ZTI9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD02NTUzNSYoKHQ9MTY3MTE5MzUmKCh0PTI1MjY0NTEzNSYoKHQ9ODU4OTkzNDU5JigodD10Pj4+ZSYxNDMxNjU1NzY1KXx0Pj4+MSkpfHQ+Pj4yKSl8dD4+PjQpKXx0Pj4+MTYpKTw8MTY+PjE2fSxyLmludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0xMjI3MTMzNTEzJigodD0zMjcyMzU2MDM1JigodD0yNTE3MTk2OTUmKCh0PTQyNzgxOTAzMzUmKCh0Jj0xMDIzKXx0PDwxNikpfHQ8PDgpKXx0PDw0KSl8dDw8MiksKHR8PShlPTEyMjcxMzM1MTMmKChlPTMyNzIzNTYwMzUmKChlPTI1MTcxOTY5NSYoKGU9NDI3ODE5MDMzNSYoKGUmPTEwMjMpfGU8PDE2KSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSk8PDEpfChyPTEyMjcxMzM1MTMmKChyPTMyNzIzNTYwMzUmKChyPTI1MTcxOTY5NSYoKHI9NDI3ODE5MDMzNSYoKHImPTEwMjMpfHI8PDE2KSl8cjw8OCkpfHI8PDQpKXxyPDwyKSk8PDJ9LHIuZGVpbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUpe3JldHVybih0PTEwMjMmKCh0PTQyNzgxOTAzMzUmKCh0PTI1MTcxOTY5NSYoKHQ9MzI3MjM1NjAzNSYoKHQ9dD4+PmUmMTIyNzEzMzUxMyl8dD4+PjIpKXx0Pj4+NCkpfHQ+Pj44KSl8dD4+PjE2KSk8PDIyPj4yMn0sci5uZXh0Q29tYmluYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dHx0LTE7cmV0dXJuIGUrMXwofmUmLX5lKS0xPj4+bih0KSsxfX0se31dLDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pO3ZhciByLG8scyxsLGMsdSxoLGYscCxkLGcsbT1udWxsPT1lLmN1dG9mZj8uMjU6ZS5jdXRvZmYsdj1udWxsPT1lLnJhZGl1cz84OmUucmFkaXVzLHk9ZS5jaGFubmVsfHwwO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8QXJyYXkuaXNBcnJheSh0KSl7aWYoIWUud2lkdGh8fCFlLmhlaWdodCl0aHJvdyBFcnJvcigiRm9yIHJhdyBkYXRhIHdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5IG9wdGlvbnMiKTtyPWUud2lkdGgsbz1lLmhlaWdodCxsPXQsdT1lLnN0cmlkZT9lLnN0cmlkZTpNYXRoLmZsb29yKHQubGVuZ3RoL3Ivbyl9ZWxzZSB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQ/KGg9KGY9dCkuZ2V0Q29udGV4dCgiMmQiKSxyPWYud2lkdGgsbz1mLmhlaWdodCxwPWguZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCYmdCBpbnN0YW5jZW9mIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ/KGY9dC5jYW52YXMsaD10LHI9Zi53aWR0aCxvPWYuaGVpZ2h0LHA9aC5nZXRJbWFnZURhdGEoMCwwLHIsbyksbD1wLmRhdGEsdT00KTp3aW5kb3cuSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2Ygd2luZG93LkltYWdlRGF0YSYmKHA9dCxyPXQud2lkdGgsbz10LmhlaWdodCxsPXAuZGF0YSx1PTQpO2lmKHM9TWF0aC5tYXgocixvKSx3aW5kb3cuVWludDhDbGFtcGVkQXJyYXkmJmwgaW5zdGFuY2VvZiB3aW5kb3cuVWludDhDbGFtcGVkQXJyYXl8fHdpbmRvdy5VaW50OEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4QXJyYXkpZm9yKGM9bCxsPUFycmF5KHIqbyksZD0wLGc9Yy5sZW5ndGg7ZDxnO2QrKylsW2RdPWNbZCp1K3ldLzI1NTtlbHNlIGlmKDEhPT11KXRocm93IEVycm9yKCJSYXcgZGF0YSBjYW4gaGF2ZSBvbmx5IDEgdmFsdWUgcGVyIHBpeGVsIik7dmFyIHg9QXJyYXkocipvKSxiPUFycmF5KHIqbyksXz1BcnJheShzKSx3PUFycmF5KHMpLFQ9QXJyYXkocysxKSxrPUFycmF5KHMpO2ZvcihkPTAsZz1yKm87ZDxnO2QrKyl7dmFyIE09bFtkXTt4W2RdPTE9PT1NPzA6MD09PU0/aTpNYXRoLnBvdyhNYXRoLm1heCgwLC41LU0pLDIpLGJbZF09MT09PU0/aTowPT09TT8wOk1hdGgucG93KE1hdGgubWF4KDAsTS0uNSksMil9YSh4LHIsbyxfLHcsayxUKSxhKGIscixvLF8sdyxrLFQpO3ZhciBBPXdpbmRvdy5GbG9hdDMyQXJyYXk/bmV3IEZsb2F0MzJBcnJheShyKm8pOm5ldyBBcnJheShyKm8pO2ZvcihkPTAsZz1yKm87ZDxnO2QrKylBW2RdPW4oMS0oKHhbZF0tYltkXSkvdittKSwwLDEpO3JldHVybiBBfTt2YXIgaT0xZTIwO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEscyl7Zm9yKHZhciBsPTA7bDxlO2wrKyl7Zm9yKHZhciBjPTA7YzxyO2MrKyluW2NdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsciksYz0wO2M8cjtjKyspdFtjKmUrbF09aVtjXX1mb3IoYz0wO2M8cjtjKyspe2ZvcihsPTA7bDxlO2wrKyluW2xdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsZSksbD0wO2w8ZTtsKyspdFtjKmUrbF09TWF0aC5zcXJ0KGlbbF0pfX1mdW5jdGlvbiBvKHQsZSxyLG4sYSl7clswXT0wLG5bMF09LWksblsxXT0raTtmb3IodmFyIG89MSxzPTA7bzxhO28rKyl7Zm9yKHZhciBsPSh0W29dK28qby0odFtyW3NdXStyW3NdKnJbc10pKS8oMipvLTIqcltzXSk7bDw9bltzXTspcy0tLGw9KHRbb10rbypvLSh0W3Jbc11dK3Jbc10qcltzXSkpLygyKm8tMipyW3NdKTtyWysrc109byxuW3NdPWwsbltzKzFdPStpfWZvcihvPTAscz0wO288YTtvKyspe2Zvcig7bltzKzFdPG87KXMrKztlW29dPShvLXJbc10pKihvLXJbc10pK3RbcltzXV19fX0se2NsYW1wOjEyMH1dLDk5OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBhKHQsZSxyKXtpZihhLmlzQk4odCkpcmV0dXJuIHQ7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXQmJigibGUiIT09ZSYmImJlIiE9PWV8fChyPWUsZT0xMCksdGhpcy5faW5pdCh0fHwwLGV8fDEwLHJ8fCJiZSIpKX12YXIgbzsib2JqZWN0Ij09dHlwZW9mIGU/ZS5leHBvcnRzPWE6ci5CTj1hLGEuQk49YSxhLndvcmRTaXplPTI2O3RyeXtvPXQoImJ1ZmZlciIpLkJ1ZmZlcn1jYXRjaCh0KXt9ZnVuY3Rpb24gcyh0LGUscil7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxpO2ErKyl7dmFyIG89dC5jaGFyQ29kZUF0KGEpLTQ4O248PD00LG58PW8+PTQ5JiZvPD01ND9vLTQ5KzEwOm8+PTE3JiZvPD0yMj9vLTE3KzEwOjE1Jm99cmV0dXJuIG59ZnVuY3Rpb24gbCh0LGUscixuKXtmb3IodmFyIGk9MCxhPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGE7bysrKXt2YXIgcz10LmNoYXJDb2RlQXQobyktNDg7aSo9bixpKz1zPj00OT9zLTQ5KzEwOnM+PTE3P3MtMTcrMTA6c31yZXR1cm4gaX1hLmlzQk49ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhfHxudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09YS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sYS5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LGEubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxhLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZigib2JqZWN0Ij09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUscik7ImhleCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KTt2YXIgaT0wOyItIj09PSh0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSwiLSI9PT10WzBdJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCksImxlIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxhLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LGEucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCksdC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgYSxvLHM9MDtpZigiYmUiPT09cilmb3IoaT10Lmxlbmd0aC0xLGE9MDtpPj0wO2ktPTMpbz10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbYV18PW88PHMmNjcxMDg4NjMsdGhpcy53b3Jkc1thKzFdPW8+Pj4yNi1zJjY3MTA4ODYzLChzKz0yNCk+PTI2JiYocy09MjYsYSsrKTtlbHNlIGlmKCJsZSI9PT1yKWZvcihpPTAsYT0wO2k8dC5sZW5ndGg7aSs9MylvPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1thXXw9bzw8cyY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09bz4+PjI2LXMmNjcxMDg4NjMsKHMrPTI0KT49MjYmJihzLT0yNixhKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLGE9MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1zKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PGEmNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtYSY0MTk0MzAzLChhKz0yNCk+PTI2JiYoYS09MjYsbisrKTtyKzYhPT1lJiYoaT1zKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PGEmNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtYSY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgYT10Lmxlbmd0aC1yLG89YSVuLHM9TWF0aC5taW4oYSxhLW8pK3IsYz0wLHU9cjt1PHM7dSs9biljPWwodCx1LHUrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rYzw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1jOnRoaXMuX2lhZGRuKGMpO2lmKDAhPT1vKXt2YXIgaD0xO2ZvcihjPWwodCx1LHQubGVuZ3RoLGUpLHU9MDt1PG87dSsrKWgqPWU7dGhpcy5pbXVsbihoKSx0aGlzLndvcmRzWzBdK2M8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9Yzp0aGlzLl9pYWRkbihjKX19LGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LGEucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGEobnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxhLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGEucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxhLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBjPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLHU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0saD1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBmKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sYT0wfGUud29yZHNbMF0sbz1pKmEscz02NzEwODg2MyZvLGw9by82NzEwODg2NHwwO3Iud29yZHNbMF09cztmb3IodmFyIGM9MTtjPG47YysrKXtmb3IodmFyIHU9bD4+PjI2LGg9NjcxMDg4NjMmbCxmPU1hdGgubWluKGMsZS5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGMtdC5sZW5ndGgrMSk7cDw9ZjtwKyspe3ZhciBkPWMtcHwwO3UrPShvPShpPTB8dC53b3Jkc1tkXSkqKGE9MHxlLndvcmRzW3BdKStoKS82NzEwODg2NHwwLGg9NjcxMDg4NjMmb31yLndvcmRzW2NdPTB8aCxsPTB8dX1yZXR1cm4gMCE9PWw/ci53b3Jkc1tjXT0wfGw6ci5sZW5ndGgtLSxyLnN0cmlwKCl9YS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZihlPTB8ZXx8MSwxNj09PSh0PXR8fDEwKXx8ImhleCI9PT10KXtyPSIiO2Zvcih2YXIgaT0wLGE9MCxvPTA7bzx0aGlzLmxlbmd0aDtvKyspe3ZhciBzPXRoaXMud29yZHNbb10sbD0oMTY3NzcyMTUmKHM8PGl8YSkpLnRvU3RyaW5nKDE2KTtyPTAhPT0oYT1zPj4+MjQtaSYxNjc3NzIxNSl8fG8hPT10aGlzLmxlbmd0aC0xP2NbNi1sLmxlbmd0aF0rbCtyOmwrciwoaSs9Mik+PTI2JiYoaS09MjYsby0tKX1mb3IoMCE9PWEmJihyPWEudG9TdHJpbmcoMTYpK3IpO3IubGVuZ3RoJWUhPTA7KXI9IjAiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj0iLSIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgZj11W3RdLHA9aFt0XTtyPSIiO3ZhciBkPXRoaXMuY2xvbmUoKTtmb3IoZC5uZWdhdGl2ZT0wOyFkLmlzWmVybygpOyl7dmFyIGc9ZC5tb2RuKHApLnRvU3RyaW5nKHQpO3I9KGQ9ZC5pZGl2bihwKSkuaXNaZXJvKCk/ZytyOmNbZi1nLmxlbmd0aF0rZytyfWZvcih0aGlzLmlzWmVybygpJiYocj0iMCIrcik7ci5sZW5ndGglZSE9MDspcj0iMCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPSItIityKSxyfW4oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sYS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/dCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3QrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdDp0fSxhLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LGEucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oInVuZGVmaW5lZCIhPXR5cGVvZiBvKSx0aGlzLnRvQXJyYXlMaWtlKG8sdCxlKX0sYS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHQsZSl9LGEucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxhPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1hLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbihhPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgbyxzLGw9ImxlIj09PWUsYz1uZXcgdChhKSx1PXRoaXMuY2xvbmUoKTtpZihsKXtmb3Iocz0wOyF1LmlzWmVybygpO3MrKylvPXUuYW5kbG4oMjU1KSx1Lml1c2hybig4KSxjW3NdPW87Zm9yKDtzPGE7cysrKWNbc109MH1lbHNle2ZvcihzPTA7czxhLWk7cysrKWNbc109MDtmb3Iocz0wOyF1LmlzWmVybygpO3MrKylvPXUuYW5kbG4oMjU1KSx1Lml1c2hybig4KSxjW2Etcy0xXT1vfXJldHVybiBjfSxNYXRoLmNsejMyP2EucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7cmV0dXJuIDMyLU1hdGguY2x6MzIodCl9OmEucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPTA7cmV0dXJuIGU+PTQwOTYmJihyKz0xMyxlPj4+PTEzKSxlPj02NCYmKHIrPTcsZT4+Pj03KSxlPj04JiYocis9NCxlPj4+PTQpLGU+PTImJihyKz0yLGU+Pj49MikscitlfSxhLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIDI2O3ZhciBlPXQscj0wO3JldHVybiAwPT0oODE5MSZlKSYmKHIrPTEzLGU+Pj49MTMpLDA9PSgxMjcmZSkmJihyKz03LGU+Pj49NyksMD09KDE1JmUpJiYocis9NCxlPj4+PTQpLDA9PSgzJmUpJiYocis9MixlPj4+PTIpLDA9PSgxJmUpJiZyKysscn0sYS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxlPXRoaXMuX2NvdW50Qml0cyh0KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2V9LGEucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbZV0pO2lmKHQrPXIsMjYhPT1yKWJyZWFrfXJldHVybiB0fSxhLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxhLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4odCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxhLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXN0bih0LTEpP3RoaXMubm90bih0KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxhLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sYS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LGEucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LGEucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMud29yZHNbZV09dGhpcy53b3Jkc1tlXXx0LndvcmRzW2VdO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHQpfSxhLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxhLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHQpOnQuY2xvbmUoKS5pdW9yKHRoaXMpfSxhLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1YW5kKHQpfSxhLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxhLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQodCk6dC5jbG9uZSgpLml1YW5kKHRoaXMpfSxhLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih0KX0sYS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih0KTp0LmNsb25lKCkuaXhvcih0aGlzKX0sYS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHQpOnQuY2xvbmUoKS5pdXhvcih0aGlzKX0sYS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sYS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdPWU/dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7dmFyIGUscixuO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyllPSgwfHIud29yZHNbYV0pKygwfG4ud29yZHNbYV0pK2ksdGhpcy53b3Jkc1thXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJmE8ci5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDthPHIubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPXIud29yZHNbYV07cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxhLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcixuLGk9dGhpcy5jbXAodCk7aWYoMD09PWkpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO2k+MD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgYT0wLG89MDtvPG4ubGVuZ3RoO28rKylhPShlPSgwfHIud29yZHNbb10pLSgwfG4ud29yZHNbb10pK2EpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJmU7Zm9yKDswIT09YSYmbzxyLmxlbmd0aDtvKyspYT0oZT0oMHxyLndvcmRzW29dKSthKT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlO2lmKDA9PT1hJiZvPHIubGVuZ3RoJiZyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsbyksciE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPXQud29yZHMscz1lLndvcmRzLGw9ci53b3JkcyxjPTAsdT0wfG9bMF0saD04MTkxJnUsZj11Pj4+MTMscD0wfG9bMV0sZD04MTkxJnAsZz1wPj4+MTMsbT0wfG9bMl0sdj04MTkxJm0seT1tPj4+MTMseD0wfG9bM10sYj04MTkxJngsXz14Pj4+MTMsdz0wfG9bNF0sVD04MTkxJncsaz13Pj4+MTMsTT0wfG9bNV0sQT04MTkxJk0sUz1NPj4+MTMsRT0wfG9bNl0sQz04MTkxJkUsTD1FPj4+MTMsUD0wfG9bN10sST04MTkxJlAsej1QPj4+MTMsTz0wfG9bOF0sRD04MTkxJk8sUj1PPj4+MTMsRj0wfG9bOV0sQj04MTkxJkYsTj1GPj4+MTMsaj0wfHNbMF0sVT04MTkxJmosVj1qPj4+MTMscT0wfHNbMV0sSD04MTkxJnEsRz1xPj4+MTMsWT0wfHNbMl0sVz04MTkxJlksWj1ZPj4+MTMsWD0wfHNbM10sSj04MTkxJlgsSz1YPj4+MTMsUT0wfHNbNF0sJD04MTkxJlEsdHQ9UT4+PjEzLGV0PTB8c1s1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxzWzZdLGF0PTgxOTEmaXQsb3Q9aXQ+Pj4xMyxzdD0wfHNbN10sbHQ9ODE5MSZzdCxjdD1zdD4+PjEzLHV0PTB8c1s4XSxodD04MTkxJnV0LGZ0PXV0Pj4+MTMscHQ9MHxzWzldLGR0PTgxOTEmcHQsZ3Q9cHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOTt2YXIgbXQ9KGMrKG49TWF0aC5pbXVsKGgsVSkpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoaCxWKSkrTWF0aC5pbXVsKGYsVSl8MCkpPDwxMyl8MDtjPSgoYT1NYXRoLmltdWwoZixWKSkrKGk+Pj4xMyl8MCkrKG10Pj4+MjYpfDAsbXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGQsVSksaT0oaT1NYXRoLmltdWwoZCxWKSkrTWF0aC5pbXVsKGcsVSl8MCxhPU1hdGguaW11bChnLFYpO3ZhciB2dD0oYysobj1uK01hdGguaW11bChoLEgpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLEcpfDApK01hdGguaW11bChmLEgpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixHKXwwKSsoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwodixVKSxpPShpPU1hdGguaW11bCh2LFYpKStNYXRoLmltdWwoeSxVKXwwLGE9TWF0aC5pbXVsKHksViksbj1uK01hdGguaW11bChkLEgpfDAsaT0oaT1pK01hdGguaW11bChkLEcpfDApK01hdGguaW11bChnLEgpfDAsYT1hK01hdGguaW11bChnLEcpfDA7dmFyIHl0PShjKyhuPW4rTWF0aC5pbXVsKGgsVyl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsWil8MCkrTWF0aC5pbXVsKGYsVyl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLFopfDApKyhpPj4+MTMpfDApKyh5dD4+PjI2KXwwLHl0Jj02NzEwODg2MyxuPU1hdGguaW11bChiLFUpLGk9KGk9TWF0aC5pbXVsKGIsVikpK01hdGguaW11bChfLFUpfDAsYT1NYXRoLmltdWwoXyxWKSxuPW4rTWF0aC5pbXVsKHYsSCl8MCxpPShpPWkrTWF0aC5pbXVsKHYsRyl8MCkrTWF0aC5pbXVsKHksSCl8MCxhPWErTWF0aC5pbXVsKHksRyl8MCxuPW4rTWF0aC5pbXVsKGQsVyl8MCxpPShpPWkrTWF0aC5pbXVsKGQsWil8MCkrTWF0aC5pbXVsKGcsVyl8MCxhPWErTWF0aC5pbXVsKGcsWil8MDt2YXIgeHQ9KGMrKG49bitNYXRoLmltdWwoaCxKKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxLKXwwKStNYXRoLmltdWwoZixKKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsSyl8MCkrKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFQsVSksaT0oaT1NYXRoLmltdWwoVCxWKSkrTWF0aC5pbXVsKGssVSl8MCxhPU1hdGguaW11bChrLFYpLG49bitNYXRoLmltdWwoYixIKXwwLGk9KGk9aStNYXRoLmltdWwoYixHKXwwKStNYXRoLmltdWwoXyxIKXwwLGE9YStNYXRoLmltdWwoXyxHKXwwLG49bitNYXRoLmltdWwodixXKXwwLGk9KGk9aStNYXRoLmltdWwodixaKXwwKStNYXRoLmltdWwoeSxXKXwwLGE9YStNYXRoLmltdWwoeSxaKXwwLG49bitNYXRoLmltdWwoZCxKKXwwLGk9KGk9aStNYXRoLmltdWwoZCxLKXwwKStNYXRoLmltdWwoZyxKKXwwLGE9YStNYXRoLmltdWwoZyxLKXwwO3ZhciBidD0oYysobj1uK01hdGguaW11bChoLCQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLHR0KXwwKStNYXRoLmltdWwoZiwkKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsdHQpfDApKyhpPj4+MTMpfDApKyhidD4+PjI2KXwwLGJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChBLFUpLGk9KGk9TWF0aC5pbXVsKEEsVikpK01hdGguaW11bChTLFUpfDAsYT1NYXRoLmltdWwoUyxWKSxuPW4rTWF0aC5pbXVsKFQsSCl8MCxpPShpPWkrTWF0aC5pbXVsKFQsRyl8MCkrTWF0aC5pbXVsKGssSCl8MCxhPWErTWF0aC5pbXVsKGssRyl8MCxuPW4rTWF0aC5pbXVsKGIsVyl8MCxpPShpPWkrTWF0aC5pbXVsKGIsWil8MCkrTWF0aC5pbXVsKF8sVyl8MCxhPWErTWF0aC5pbXVsKF8sWil8MCxuPW4rTWF0aC5pbXVsKHYsSil8MCxpPShpPWkrTWF0aC5pbXVsKHYsSyl8MCkrTWF0aC5pbXVsKHksSil8MCxhPWErTWF0aC5pbXVsKHksSyl8MCxuPW4rTWF0aC5pbXVsKGQsJCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsdHQpfDApK01hdGguaW11bChnLCQpfDAsYT1hK01hdGguaW11bChnLHR0KXwwO3ZhciBfdD0oYysobj1uK01hdGguaW11bChoLHJ0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxudCl8MCkrTWF0aC5pbXVsKGYscnQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixudCl8MCkrKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMsVSksaT0oaT1NYXRoLmltdWwoQyxWKSkrTWF0aC5pbXVsKEwsVSl8MCxhPU1hdGguaW11bChMLFYpLG49bitNYXRoLmltdWwoQSxIKXwwLGk9KGk9aStNYXRoLmltdWwoQSxHKXwwKStNYXRoLmltdWwoUyxIKXwwLGE9YStNYXRoLmltdWwoUyxHKXwwLG49bitNYXRoLmltdWwoVCxXKXwwLGk9KGk9aStNYXRoLmltdWwoVCxaKXwwKStNYXRoLmltdWwoayxXKXwwLGE9YStNYXRoLmltdWwoayxaKXwwLG49bitNYXRoLmltdWwoYixKKXwwLGk9KGk9aStNYXRoLmltdWwoYixLKXwwKStNYXRoLmltdWwoXyxKKXwwLGE9YStNYXRoLmltdWwoXyxLKXwwLG49bitNYXRoLmltdWwodiwkKXwwLGk9KGk9aStNYXRoLmltdWwodix0dCl8MCkrTWF0aC5pbXVsKHksJCl8MCxhPWErTWF0aC5pbXVsKHksdHQpfDAsbj1uK01hdGguaW11bChkLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxudCl8MCkrTWF0aC5pbXVsKGcscnQpfDAsYT1hK01hdGguaW11bChnLG50KXwwO3ZhciB3dD0oYysobj1uK01hdGguaW11bChoLGF0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxvdCl8MCkrTWF0aC5pbXVsKGYsYXQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixvdCl8MCkrKGk+Pj4xMyl8MCkrKHd0Pj4+MjYpfDAsd3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEksVSksaT0oaT1NYXRoLmltdWwoSSxWKSkrTWF0aC5pbXVsKHosVSl8MCxhPU1hdGguaW11bCh6LFYpLG49bitNYXRoLmltdWwoQyxIKXwwLGk9KGk9aStNYXRoLmltdWwoQyxHKXwwKStNYXRoLmltdWwoTCxIKXwwLGE9YStNYXRoLmltdWwoTCxHKXwwLG49bitNYXRoLmltdWwoQSxXKXwwLGk9KGk9aStNYXRoLmltdWwoQSxaKXwwKStNYXRoLmltdWwoUyxXKXwwLGE9YStNYXRoLmltdWwoUyxaKXwwLG49bitNYXRoLmltdWwoVCxKKXwwLGk9KGk9aStNYXRoLmltdWwoVCxLKXwwKStNYXRoLmltdWwoayxKKXwwLGE9YStNYXRoLmltdWwoayxLKXwwLG49bitNYXRoLmltdWwoYiwkKXwwLGk9KGk9aStNYXRoLmltdWwoYix0dCl8MCkrTWF0aC5pbXVsKF8sJCl8MCxhPWErTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bCh2LHJ0KXwwLGk9KGk9aStNYXRoLmltdWwodixudCl8MCkrTWF0aC5pbXVsKHkscnQpfDAsYT1hK01hdGguaW11bCh5LG50KXwwLG49bitNYXRoLmltdWwoZCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsb3QpfDApK01hdGguaW11bChnLGF0KXwwLGE9YStNYXRoLmltdWwoZyxvdCl8MDt2YXIgVHQ9KGMrKG49bitNYXRoLmltdWwoaCxsdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsY3QpfDApK01hdGguaW11bChmLGx0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsY3QpfDApKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChELFUpLGk9KGk9TWF0aC5pbXVsKEQsVikpK01hdGguaW11bChSLFUpfDAsYT1NYXRoLmltdWwoUixWKSxuPW4rTWF0aC5pbXVsKEksSCl8MCxpPShpPWkrTWF0aC5pbXVsKEksRyl8MCkrTWF0aC5pbXVsKHosSCl8MCxhPWErTWF0aC5pbXVsKHosRyl8MCxuPW4rTWF0aC5pbXVsKEMsVyl8MCxpPShpPWkrTWF0aC5pbXVsKEMsWil8MCkrTWF0aC5pbXVsKEwsVyl8MCxhPWErTWF0aC5pbXVsKEwsWil8MCxuPW4rTWF0aC5pbXVsKEEsSil8MCxpPShpPWkrTWF0aC5pbXVsKEEsSyl8MCkrTWF0aC5pbXVsKFMsSil8MCxhPWErTWF0aC5pbXVsKFMsSyl8MCxuPW4rTWF0aC5pbXVsKFQsJCl8MCxpPShpPWkrTWF0aC5pbXVsKFQsdHQpfDApK01hdGguaW11bChrLCQpfDAsYT1hK01hdGguaW11bChrLHR0KXwwLG49bitNYXRoLmltdWwoYixydCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsbnQpfDApK01hdGguaW11bChfLHJ0KXwwLGE9YStNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKHYsYXQpfDAsaT0oaT1pK01hdGguaW11bCh2LG90KXwwKStNYXRoLmltdWwoeSxhdCl8MCxhPWErTWF0aC5pbXVsKHksb3QpfDAsbj1uK01hdGguaW11bChkLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxjdCl8MCkrTWF0aC5pbXVsKGcsbHQpfDAsYT1hK01hdGguaW11bChnLGN0KXwwO3ZhciBrdD0oYysobj1uK01hdGguaW11bChoLGh0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxmdCl8MCkrTWF0aC5pbXVsKGYsaHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixmdCl8MCkrKGk+Pj4xMyl8MCkrKGt0Pj4+MjYpfDAsa3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsVSksaT0oaT1NYXRoLmltdWwoQixWKSkrTWF0aC5pbXVsKE4sVSl8MCxhPU1hdGguaW11bChOLFYpLG49bitNYXRoLmltdWwoRCxIKXwwLGk9KGk9aStNYXRoLmltdWwoRCxHKXwwKStNYXRoLmltdWwoUixIKXwwLGE9YStNYXRoLmltdWwoUixHKXwwLG49bitNYXRoLmltdWwoSSxXKXwwLGk9KGk9aStNYXRoLmltdWwoSSxaKXwwKStNYXRoLmltdWwoeixXKXwwLGE9YStNYXRoLmltdWwoeixaKXwwLG49bitNYXRoLmltdWwoQyxKKXwwLGk9KGk9aStNYXRoLmltdWwoQyxLKXwwKStNYXRoLmltdWwoTCxKKXwwLGE9YStNYXRoLmltdWwoTCxLKXwwLG49bitNYXRoLmltdWwoQSwkKXwwLGk9KGk9aStNYXRoLmltdWwoQSx0dCl8MCkrTWF0aC5pbXVsKFMsJCl8MCxhPWErTWF0aC5pbXVsKFMsdHQpfDAsbj1uK01hdGguaW11bChULHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoVCxudCl8MCkrTWF0aC5pbXVsKGsscnQpfDAsYT1hK01hdGguaW11bChrLG50KXwwLG49bitNYXRoLmltdWwoYixhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsb3QpfDApK01hdGguaW11bChfLGF0KXwwLGE9YStNYXRoLmltdWwoXyxvdCl8MCxuPW4rTWF0aC5pbXVsKHYsbHQpfDAsaT0oaT1pK01hdGguaW11bCh2LGN0KXwwKStNYXRoLmltdWwoeSxsdCl8MCxhPWErTWF0aC5pbXVsKHksY3QpfDAsbj1uK01hdGguaW11bChkLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxmdCl8MCkrTWF0aC5pbXVsKGcsaHQpfDAsYT1hK01hdGguaW11bChnLGZ0KXwwO3ZhciBNdD0oYysobj1uK01hdGguaW11bChoLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxndCl8MCkrTWF0aC5pbXVsKGYsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixndCl8MCkrKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsSCksaT0oaT1NYXRoLmltdWwoQixHKSkrTWF0aC5pbXVsKE4sSCl8MCxhPU1hdGguaW11bChOLEcpLG49bitNYXRoLmltdWwoRCxXKXwwLGk9KGk9aStNYXRoLmltdWwoRCxaKXwwKStNYXRoLmltdWwoUixXKXwwLGE9YStNYXRoLmltdWwoUixaKXwwLG49bitNYXRoLmltdWwoSSxKKXwwLGk9KGk9aStNYXRoLmltdWwoSSxLKXwwKStNYXRoLmltdWwoeixKKXwwLGE9YStNYXRoLmltdWwoeixLKXwwLG49bitNYXRoLmltdWwoQywkKXwwLGk9KGk9aStNYXRoLmltdWwoQyx0dCl8MCkrTWF0aC5pbXVsKEwsJCl8MCxhPWErTWF0aC5pbXVsKEwsdHQpfDAsbj1uK01hdGguaW11bChBLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoQSxudCl8MCkrTWF0aC5pbXVsKFMscnQpfDAsYT1hK01hdGguaW11bChTLG50KXwwLG49bitNYXRoLmltdWwoVCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKFQsb3QpfDApK01hdGguaW11bChrLGF0KXwwLGE9YStNYXRoLmltdWwoayxvdCl8MCxuPW4rTWF0aC5pbXVsKGIsbHQpfDAsaT0oaT1pK01hdGguaW11bChiLGN0KXwwKStNYXRoLmltdWwoXyxsdCl8MCxhPWErTWF0aC5pbXVsKF8sY3QpfDAsbj1uK01hdGguaW11bCh2LGh0KXwwLGk9KGk9aStNYXRoLmltdWwodixmdCl8MCkrTWF0aC5pbXVsKHksaHQpfDAsYT1hK01hdGguaW11bCh5LGZ0KXwwO3ZhciBBdD0oYysobj1uK01hdGguaW11bChkLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZCxndCl8MCkrTWF0aC5pbXVsKGcsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZyxndCl8MCkrKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsVyksaT0oaT1NYXRoLmltdWwoQixaKSkrTWF0aC5pbXVsKE4sVyl8MCxhPU1hdGguaW11bChOLFopLG49bitNYXRoLmltdWwoRCxKKXwwLGk9KGk9aStNYXRoLmltdWwoRCxLKXwwKStNYXRoLmltdWwoUixKKXwwLGE9YStNYXRoLmltdWwoUixLKXwwLG49bitNYXRoLmltdWwoSSwkKXwwLGk9KGk9aStNYXRoLmltdWwoSSx0dCl8MCkrTWF0aC5pbXVsKHosJCl8MCxhPWErTWF0aC5pbXVsKHosdHQpfDAsbj1uK01hdGguaW11bChDLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxudCl8MCkrTWF0aC5pbXVsKEwscnQpfDAsYT1hK01hdGguaW11bChMLG50KXwwLG49bitNYXRoLmltdWwoQSxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEEsb3QpfDApK01hdGguaW11bChTLGF0KXwwLGE9YStNYXRoLmltdWwoUyxvdCl8MCxuPW4rTWF0aC5pbXVsKFQsbHQpfDAsaT0oaT1pK01hdGguaW11bChULGN0KXwwKStNYXRoLmltdWwoayxsdCl8MCxhPWErTWF0aC5pbXVsKGssY3QpfDAsbj1uK01hdGguaW11bChiLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoYixmdCl8MCkrTWF0aC5pbXVsKF8saHQpfDAsYT1hK01hdGguaW11bChfLGZ0KXwwO3ZhciBTdD0oYysobj1uK01hdGguaW11bCh2LGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwodixndCl8MCkrTWF0aC5pbXVsKHksZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoeSxndCl8MCkrKGk+Pj4xMyl8MCkrKFN0Pj4+MjYpfDAsU3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsSiksaT0oaT1NYXRoLmltdWwoQixLKSkrTWF0aC5pbXVsKE4sSil8MCxhPU1hdGguaW11bChOLEspLG49bitNYXRoLmltdWwoRCwkKXwwLGk9KGk9aStNYXRoLmltdWwoRCx0dCl8MCkrTWF0aC5pbXVsKFIsJCl8MCxhPWErTWF0aC5pbXVsKFIsdHQpfDAsbj1uK01hdGguaW11bChJLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoSSxudCl8MCkrTWF0aC5pbXVsKHoscnQpfDAsYT1hK01hdGguaW11bCh6LG50KXwwLG49bitNYXRoLmltdWwoQyxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsb3QpfDApK01hdGguaW11bChMLGF0KXwwLGE9YStNYXRoLmltdWwoTCxvdCl8MCxuPW4rTWF0aC5pbXVsKEEsbHQpfDAsaT0oaT1pK01hdGguaW11bChBLGN0KXwwKStNYXRoLmltdWwoUyxsdCl8MCxhPWErTWF0aC5pbXVsKFMsY3QpfDAsbj1uK01hdGguaW11bChULGh0KXwwLGk9KGk9aStNYXRoLmltdWwoVCxmdCl8MCkrTWF0aC5pbXVsKGssaHQpfDAsYT1hK01hdGguaW11bChrLGZ0KXwwO3ZhciBFdD0oYysobj1uK01hdGguaW11bChiLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoYixndCl8MCkrTWF0aC5pbXVsKF8sZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoXyxndCl8MCkrKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsJCksaT0oaT1NYXRoLmltdWwoQix0dCkpK01hdGguaW11bChOLCQpfDAsYT1NYXRoLmltdWwoTix0dCksbj1uK01hdGguaW11bChELHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoRCxudCl8MCkrTWF0aC5pbXVsKFIscnQpfDAsYT1hK01hdGguaW11bChSLG50KXwwLG49bitNYXRoLmltdWwoSSxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEksb3QpfDApK01hdGguaW11bCh6LGF0KXwwLGE9YStNYXRoLmltdWwoeixvdCl8MCxuPW4rTWF0aC5pbXVsKEMsbHQpfDAsaT0oaT1pK01hdGguaW11bChDLGN0KXwwKStNYXRoLmltdWwoTCxsdCl8MCxhPWErTWF0aC5pbXVsKEwsY3QpfDAsbj1uK01hdGguaW11bChBLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoQSxmdCl8MCkrTWF0aC5pbXVsKFMsaHQpfDAsYT1hK01hdGguaW11bChTLGZ0KXwwO3ZhciBDdD0oYysobj1uK01hdGguaW11bChULGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoVCxndCl8MCkrTWF0aC5pbXVsKGssZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoayxndCl8MCkrKGk+Pj4xMyl8MCkrKEN0Pj4+MjYpfDAsQ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscnQpLGk9KGk9TWF0aC5pbXVsKEIsbnQpKStNYXRoLmltdWwoTixydCl8MCxhPU1hdGguaW11bChOLG50KSxuPW4rTWF0aC5pbXVsKEQsYXQpfDAsaT0oaT1pK01hdGguaW11bChELG90KXwwKStNYXRoLmltdWwoUixhdCl8MCxhPWErTWF0aC5pbXVsKFIsb3QpfDAsbj1uK01hdGguaW11bChJLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoSSxjdCl8MCkrTWF0aC5pbXVsKHosbHQpfDAsYT1hK01hdGguaW11bCh6LGN0KXwwLG49bitNYXRoLmltdWwoQyxodCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsZnQpfDApK01hdGguaW11bChMLGh0KXwwLGE9YStNYXRoLmltdWwoTCxmdCl8MDt2YXIgTHQ9KGMrKG49bitNYXRoLmltdWwoQSxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEEsZ3QpfDApK01hdGguaW11bChTLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFMsZ3QpfDApKyhpPj4+MTMpfDApKyhMdD4+PjI2KXwwLEx0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLGF0KSxpPShpPU1hdGguaW11bChCLG90KSkrTWF0aC5pbXVsKE4sYXQpfDAsYT1NYXRoLmltdWwoTixvdCksbj1uK01hdGguaW11bChELGx0KXwwLGk9KGk9aStNYXRoLmltdWwoRCxjdCl8MCkrTWF0aC5pbXVsKFIsbHQpfDAsYT1hK01hdGguaW11bChSLGN0KXwwLG49bitNYXRoLmltdWwoSSxodCl8MCxpPShpPWkrTWF0aC5pbXVsKEksZnQpfDApK01hdGguaW11bCh6LGh0KXwwLGE9YStNYXRoLmltdWwoeixmdCl8MDt2YXIgUHQ9KGMrKG49bitNYXRoLmltdWwoQyxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEMsZ3QpfDApK01hdGguaW11bChMLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKEwsZ3QpfDApKyhpPj4+MTMpfDApKyhQdD4+PjI2KXwwLFB0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLGx0KSxpPShpPU1hdGguaW11bChCLGN0KSkrTWF0aC5pbXVsKE4sbHQpfDAsYT1NYXRoLmltdWwoTixjdCksbj1uK01hdGguaW11bChELGh0KXwwLGk9KGk9aStNYXRoLmltdWwoRCxmdCl8MCkrTWF0aC5pbXVsKFIsaHQpfDAsYT1hK01hdGguaW11bChSLGZ0KXwwO3ZhciBJdD0oYysobj1uK01hdGguaW11bChJLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoSSxndCl8MCkrTWF0aC5pbXVsKHosZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoeixndCl8MCkrKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsaHQpLGk9KGk9TWF0aC5pbXVsKEIsZnQpKStNYXRoLmltdWwoTixodCl8MCxhPU1hdGguaW11bChOLGZ0KTt2YXIgenQ9KGMrKG49bitNYXRoLmltdWwoRCxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEQsZ3QpfDApK01hdGguaW11bChSLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFIsZ3QpfDApKyhpPj4+MTMpfDApKyh6dD4+PjI2KXwwLHp0Jj02NzEwODg2Mzt2YXIgT3Q9KGMrKG49TWF0aC5pbXVsKEIsZHQpKXwwKSsoKDgxOTEmKGk9KGk9TWF0aC5pbXVsKEIsZ3QpKStNYXRoLmltdWwoTixkdCl8MCkpPDwxMyl8MDtyZXR1cm4gYz0oKGE9TWF0aC5pbXVsKE4sZ3QpKSsoaT4+PjEzKXwwKSsoT3Q+Pj4yNil8MCxPdCY9NjcxMDg4NjMsbFswXT1tdCxsWzFdPXZ0LGxbMl09eXQsbFszXT14dCxsWzRdPWJ0LGxbNV09X3QsbFs2XT13dCxsWzddPVR0LGxbOF09a3QsbFs5XT1NdCxsWzEwXT1BdCxsWzExXT1TdCxsWzEyXT1FdCxsWzEzXT1DdCxsWzE0XT1MdCxsWzE1XT1QdCxsWzE2XT1JdCxsWzE3XT16dCxsWzE4XT1PdCwwIT09YyYmKGxbMTldPWMsci5sZW5ndGgrKykscn07ZnVuY3Rpb24gZCh0LGUscil7cmV0dXJuKG5ldyBnKS5tdWxwKHQsZSxyKX1mdW5jdGlvbiBnKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9TWF0aC5pbXVsfHwocD1mKSxhLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PXQubGVuZ3RoP3AodGhpcyx0LGUpOnI8NjM/Zih0aGlzLHQsZSk6cjwxMDI0P2Z1bmN0aW9uKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsYT0wO2E8ci5sZW5ndGgtMTthKyspe3ZhciBvPWk7aT0wO2Zvcih2YXIgcz02NzEwODg2MyZuLGw9TWF0aC5taW4oYSxlLmxlbmd0aC0xKSxjPU1hdGgubWF4KDAsYS10Lmxlbmd0aCsxKTtjPD1sO2MrKyl7dmFyIHU9YS1jLGg9KDB8dC53b3Jkc1t1XSkqKDB8ZS53b3Jkc1tjXSksZj02NzEwODg2MyZoO3M9NjcxMDg4NjMmKGY9ZitzfDApLGkrPShvPShvPW8rKGgvNjcxMDg4NjR8MCl8MCkrKGY+Pj4yNil8MCk+Pj4yNixvJj02NzEwODg2M31yLndvcmRzW2FdPXMsbj1vLG89aX1yZXR1cm4gMCE9PW4/ci53b3Jkc1thXT1uOnIubGVuZ3RoLS0sci5zdHJpcCgpfSh0aGlzLHQsZSk6ZCh0aGlzLHQsZSl9LGcucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPWEucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZy5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGcucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288YTtvKyspbltvXT1lW3Rbb11dLGlbb109clt0W29dXX0sZy5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLnBlcm11dGUoYSx0LGUscixuLGkpO2Zvcih2YXIgbz0xO288aTtvPDw9MSlmb3IodmFyIHM9bzw8MSxsPU1hdGguY29zKDIqTWF0aC5QSS9zKSxjPU1hdGguc2luKDIqTWF0aC5QSS9zKSx1PTA7dTxpO3UrPXMpZm9yKHZhciBoPWwsZj1jLHA9MDtwPG87cCsrKXt2YXIgZD1yW3UrcF0sZz1uW3UrcF0sbT1yW3UrcCtvXSx2PW5bdStwK29dLHk9aCptLWYqdjt2PWgqditmKm0sbT15LHJbdStwXT1kK20sblt1K3BdPWcrdixyW3UrcCtvXT1kLW0sblt1K3Arb109Zy12LHAhPT1zJiYoeT1sKmgtYypmLGY9bCpmK2MqaCxoPXkpfX0sZy5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGcucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGcucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGcucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPTAsbz0wO288ZTtvKyspYSs9MHx0W29dLHJbMipvXT04MTkxJmEsYT4+Pj0xMyxyWzIqbysxXT04MTkxJmEsYT4+Pj0xMztmb3Iobz0yKmU7bzxpOysrbylyW29dPTA7bigwPT09YSksbigwPT0oLTgxOTImYSkpfSxnLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxnLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLGE9dGhpcy5zdHViKG4pLG89bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGY9ci53b3JkcztmLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLG8sbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsYyxuKSx0aGlzLnRyYW5zZm9ybShvLGEscyxsLG4saSksdGhpcy50cmFuc2Zvcm0oYyxhLHUsaCxuLGkpO2Zvcih2YXIgcD0wO3A8bjtwKyspe3ZhciBkPXNbcF0qdVtwXS1sW3BdKmhbcF07bFtwXT1zW3BdKmhbcF0rbFtwXSp1W3BdLHNbcF09ZH1yZXR1cm4gdGhpcy5jb25qdWdhdGUocyxsLG4pLHRoaXMudHJhbnNmb3JtKHMsbCxmLGEsbixpKSx0aGlzLmNvbmp1Z2F0ZShmLGEsbiksdGhpcy5ub3JtYWxpemUxM2IoZixuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LGEucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sYS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGQodGhpcyx0LGUpfSxhLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sYS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCk7Zm9yKHZhciBlPTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSp0LGE9KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZlKTtlPj49MjYsZSs9aS82NzEwODg2NHwwLGUrPWE+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJmF9cmV0dXJuIDAhPT1lJiYodGhpcy53b3Jkc1tyXT1lLHRoaXMubGVuZ3RoKyspLHRoaXN9LGEucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih0KX0sYS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxhLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxhLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0LmJpdExlbmd0aCgpKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXIvMjZ8MCxpPXIlMjY7ZVtyXT0odC53b3Jkc1tuXSYxPDxpKT4+Pml9cmV0dXJuIGV9KHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbmV3IGEoMSk7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGgmJjA9PT1lW25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjxlLmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPGUubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PWVbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sYS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZSxyPXQlMjYsaT0odC1yKS8yNixhPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIG89MDtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcz10aGlzLndvcmRzW2VdJmEsbD0oMHx0aGlzLndvcmRzW2VdKS1zPDxyO3RoaXMud29yZHNbZV09bHxvLG89cz4+PjI2LXJ9byYmKHRoaXMud29yZHNbZV09byx0aGlzLmxlbmd0aCsrKX1pZigwIT09aSl7Zm9yKGU9dGhpcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLndvcmRzW2UraV09dGhpcy53b3Jkc1tlXTtmb3IoZT0wO2U8aTtlKyspdGhpcy53b3Jkc1tlXT0wO3RoaXMubGVuZ3RoKz1pfXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih0KX0sYS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaTtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCksaT1lPyhlLWUlMjYpLzI2OjA7dmFyIGE9dCUyNixvPU1hdGgubWluKCh0LWEpLzI2LHRoaXMubGVuZ3RoKSxzPTY3MTA4ODYzXjY3MTA4ODYzPj4+YTw8YSxsPXI7aWYoaS09byxpPU1hdGgubWF4KDAsaSksbCl7Zm9yKHZhciBjPTA7YzxvO2MrKylsLndvcmRzW2NdPXRoaXMud29yZHNbY107bC5sZW5ndGg9b31pZigwPT09byk7ZWxzZSBpZih0aGlzLmxlbmd0aD5vKWZvcih0aGlzLmxlbmd0aC09byxjPTA7Yzx0aGlzLmxlbmd0aDtjKyspdGhpcy53b3Jkc1tjXT10aGlzLndvcmRzW2Mrb107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdT0wO2ZvcihjPXRoaXMubGVuZ3RoLTE7Yz49MCYmKDAhPT11fHxjPj1pKTtjLS0pe3ZhciBoPTB8dGhpcy53b3Jkc1tjXTt0aGlzLndvcmRzW2NdPXU8PDI2LWF8aD4+PmEsdT1oJnN9cmV0dXJuIGwmJjAhPT11JiYobC53b3Jkc1tsLmxlbmd0aCsrXT11KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sYS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxhLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sYS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxhLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sYS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7cmV0dXJuISh0aGlzLmxlbmd0aDw9cikmJiEhKHRoaXMud29yZHNbcl0maSl9LGEucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzO2lmKDAhPT1lJiZyKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocix0aGlzLmxlbmd0aCksMCE9PWUpe3ZhciBpPTY3MTA4ODYzXjY3MTA4ODYzPj4+ZTw8ZTt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1pfXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHQpfSxhLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gbigibnVtYmVyIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwP3RoaXMuaXN1Ym4oLXQpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8dD8odGhpcy53b3Jkc1swXT10LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHQpfSxhLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odCl7dGhpcy53b3Jkc1swXSs9dDtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPj02NzEwODg2NDtlKyspdGhpcy53b3Jkc1tlXS09NjcxMDg4NjQsZT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tlKzFdPTE6dGhpcy53b3Jkc1tlKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGUrMSksdGhpc30sYS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odCl7aWYobigibnVtYmVyIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sYS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxhLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxhLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sYS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIHM9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrczt2YXIgbD0oMHx0LndvcmRzW2ldKSplO3M9KChhLT02NzEwODg2MyZsKT4+MjYpLShsLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylzPShhPSgwfHRoaXMud29yZHNbaStyXSkrcyk+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1zKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oLTE9PT1zKSxzPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXM9KGE9LSgwfHRoaXMud29yZHNbaV0pK3MpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHRoaXMubGVuZ3RoLHQubGVuZ3RoKSxuPXRoaXMuY2xvbmUoKSxpPXQsbz0wfGkud29yZHNbaS5sZW5ndGgtMV07MCE9PShyPTI2LXRoaXMuX2NvdW50Qml0cyhvKSkmJihpPWkudXNobG4ociksbi5pdXNobG4ociksbz0wfGkud29yZHNbaS5sZW5ndGgtMV0pO3ZhciBzLGw9bi5sZW5ndGgtaS5sZW5ndGg7aWYoIm1vZCIhPT1lKXsocz1uZXcgYShudWxsKSkubGVuZ3RoPWwrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspcy53b3Jkc1tjXT0wfXZhciB1PW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLGwpOzA9PT11Lm5lZ2F0aXZlJiYobj11LHMmJihzLndvcmRzW2xdPTEpKTtmb3IodmFyIGg9bC0xO2g+PTA7aC0tKXt2YXIgZj02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2hdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2gtMV0pO2ZvcihmPU1hdGgubWluKGYvb3wwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGYsaCk7MCE9PW4ubmVnYXRpdmU7KWYtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGgpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1toXT1mKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSwiZGl2IiE9PWUmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxhLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKCF0LmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IGEoMCksbW9kOm5ldyBhKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KHM9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSwibW9kIiE9PWUmJihpPXMuZGl2Lm5lZygpKSwiZGl2IiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlhZGQodCkpLHtkaXY6aSxtb2Q6b30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8ocz10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLCJtb2QiIT09ZSYmKGk9cy5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6cy5tb2R9KTowIT0odGhpcy5uZWdhdGl2ZSZ0Lm5lZ2F0aXZlKT8ocz10aGlzLm5lZygpLmRpdm1vZCh0Lm5lZygpLGUpLCJkaXYiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaXN1Yih0KSkse2RpdjpzLmRpdixtb2Q6b30pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IGEoMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD8iZGl2Ij09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09ZT97ZGl2Om51bGwsbW9kOm5ldyBhKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgYSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHQsZSk7dmFyIGksbyxzfSxhLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsImRpdiIsITEpLmRpdn0sYS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LCJtb2QiLCExKS5tb2R9LGEucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsIm1vZCIsITApLm1vZH0sYS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaXZtb2QodCk7aWYoZS5tb2QuaXNaZXJvKCkpcmV0dXJuIGUuZGl2O3ZhciByPTAhPT1lLmRpdi5uZWdhdGl2ZT9lLm1vZC5pc3ViKHQpOmUubW9kLG49dC51c2hybigxKSxpPXQuYW5kbG4oMSksYT1yLmNtcChuKTtyZXR1cm4gYTwwfHwxPT09aSYmMD09PWE/ZS5kaXY6MCE9PWUuZGl2Lm5lZ2F0aXZlP2UuZGl2LmlzdWJuKDEpOmUuZGl2LmlhZGRuKDEpfSxhLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0oMTw8MjYpJXQscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPShlKnIrKDB8dGhpcy53b3Jkc1tpXSkpJXQ7cmV0dXJuIHJ9LGEucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqZTt0aGlzLndvcmRzW3JdPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0sYS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IGEoMSksbz1uZXcgYSgwKSxzPW5ldyBhKDApLGw9bmV3IGEoMSksYz0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrYztmb3IodmFyIHU9ci5jbG9uZSgpLGg9ZS5jbG9uZSgpOyFlLmlzWmVybygpOyl7Zm9yKHZhciBmPTAscD0xOzA9PShlLndvcmRzWzBdJnApJiZmPDI2OysrZixwPDw9MSk7aWYoZj4wKWZvcihlLml1c2hybihmKTtmLS0gPjA7KShpLmlzT2RkKCl8fG8uaXNPZGQoKSkmJihpLmlhZGQodSksby5pc3ViKGgpKSxpLml1c2hybigxKSxvLml1c2hybigxKTtmb3IodmFyIGQ9MCxnPTE7MD09KHIud29yZHNbMF0mZykmJmQ8MjY7KytkLGc8PD0xKTtpZihkPjApZm9yKHIuaXVzaHJuKGQpO2QtLSA+MDspKHMuaXNPZGQoKXx8bC5pc09kZCgpKSYmKHMuaWFkZCh1KSxsLmlzdWIoaCkpLHMuaXVzaHJuKDEpLGwuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKHMpLG8uaXN1YihsKSk6KHIuaXN1YihlKSxzLmlzdWIoaSksbC5pc3ViKG8pKX1yZXR1cm57YTpzLGI6bCxnY2Q6ci5pdXNobG4oYyl9fSxhLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpLG89bmV3IGEoMSkscz1uZXcgYSgwKSxsPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIGM9MCx1PTE7MD09KGUud29yZHNbMF0mdSkmJmM8MjY7KytjLHU8PD0xKTtpZihjPjApZm9yKGUuaXVzaHJuKGMpO2MtLSA+MDspby5pc09kZCgpJiZvLmlhZGQobCksby5pdXNocm4oMSk7Zm9yKHZhciBoPTAsZj0xOzA9PShyLndvcmRzWzBdJmYpJiZoPDI2OysraCxmPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KXMuaXNPZGQoKSYmcy5pYWRkKGwpLHMuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksby5pc3ViKHMpKTooci5pc3ViKGUpLHMuaXN1YihvKSl9cmV0dXJuKGk9MD09PWUuY21wbigxKT9vOnMpLmNtcG4oMCk8MCYmaS5pYWRkKHQpLGl9LGEucHJvdG90eXBlLmdjZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB0LmFicygpO2lmKHQuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2UubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9ZS5jbXAocik7aWYoaTwwKXt2YXIgYT1lO2U9cixyPWF9ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhaztlLmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxhLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVnY2QodCkuYS51bW9kKHQpfSxhLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LGEucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxhLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxhLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXXw9aSx0aGlzO2Zvcih2YXIgYT1pLG89cjswIT09YSYmbzx0aGlzLmxlbmd0aDtvKyspe3ZhciBzPTB8dGhpcy53b3Jkc1tvXTthPShzKz1hKT4+PjI2LHMmPTY3MTA4ODYzLHRoaXMud29yZHNbb109c31yZXR1cm4gMCE9PWEmJih0aGlzLndvcmRzW29dPWEsdGhpcy5sZW5ndGgrKyksdGhpc30sYS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGEucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24odCl7dmFyIGUscj10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFyKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZyKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKWU9MTtlbHNle3ImJih0PS10KSxuKHQ8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBpPTB8dGhpcy53b3Jkc1swXTtlPWk9PT10PzA6aTx0Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LGEucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj0wfHRoaXMud29yZHNbcl0saT0wfHQud29yZHNbcl07aWYobiE9PWkpe248aT9lPS0xOm4+aSYmKGU9MSk7YnJlYWt9fXJldHVybiBlfSxhLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT49MH0sYS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT49MH0sYS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4tMT09PXRoaXMuY21wKHQpfSxhLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LGEucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LGEucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sYS5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB3KHQpfSxhLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sYS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LGEucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxhLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZCh0KX0sYS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLm11bCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5pbXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sYS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LGEucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxhLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sYS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkJiYhdC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdCl9O3ZhciBtPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdih0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgYShlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgYSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24geSgpe3YuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiB4KCl7di5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIoKXt2LmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gXygpe3YuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB3KHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9YS5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gVCh0KXt3LmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBhKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXYucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYShudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LHYucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2Rve3RoaXMuc3BsaXQocix0aGlzLnRtcCksZT0ocj0ocj10aGlzLmltdWxLKHIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTpyLnN0cmlwKCkscn0sdi5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0sdi5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHksdikseS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsOSksbj0wO248cjtuKyspZS53b3Jkc1tuXT10LndvcmRzW25dO2lmKGUubGVuZ3RoPXIsdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBpPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109NDE5NDMwMyZpLG49MTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBhPTB8dC53b3Jkc1tuXTt0LndvcmRzW24tMTBdPSg0MTk0MzAzJmEpPDw0fGk+Pj4yMixpPWF9aT4+Pj0yMix0LndvcmRzW24tMTBdPWksMD09PWkmJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0seS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKHgsdiksaShiLHYpLGkoXyx2KSxfLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LGEuX3ByaW1lPWZ1bmN0aW9uKHQpe2lmKG1bdF0pcmV0dXJuIG1bdF07dmFyIGU7aWYoImsyNTYiPT09dCllPW5ldyB5O2Vsc2UgaWYoInAyMjQiPT09dCllPW5ldyB4O2Vsc2UgaWYoInAxOTIiPT09dCllPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT10KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3QpO2U9bmV3IF99cmV0dXJuIG1bdF09ZSxlfSx3LnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG4odC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdy5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdy5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LHcucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSx3LnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBhKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLG89MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KW8rKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgcz1uZXcgYSgxKS50b1JlZCh0aGlzKSxsPXMucmVkTmVnKCksYz10aGlzLm0uc3VibigxKS5pdXNocm4oMSksdT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHU9bmV3IGEoMip1KnUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh1LGMpLmNtcChsKTspdS5yZWRJQWRkKGwpO2Zvcih2YXIgaD10aGlzLnBvdyh1LGkpLGY9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxwPXRoaXMucG93KHQsaSksZD1vOzAhPT1wLmNtcChzKTspe2Zvcih2YXIgZz1wLG09MDswIT09Zy5jbXAocyk7bSsrKWc9Zy5yZWRTcXIoKTtuKG08ZCk7dmFyIHY9dGhpcy5wb3coaCxuZXcgYSgxKS5pdXNobG4oZC1tLTEpKTtmPWYucmVkTXVsKHYpLGg9di5yZWRTcXIoKSxwPXAucmVkTXVsKGgpLGQ9bX1yZXR1cm4gZn0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgYSgxKS50b1JlZCh0aGlzKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9bmV3IEFycmF5KDE2KTtyWzBdPW5ldyBhKDEpLnRvUmVkKHRoaXMpLHJbMV09dDtmb3IodmFyIG49MjtuPHIubGVuZ3RoO24rKylyW25dPXRoaXMubXVsKHJbbi0xXSx0KTt2YXIgaT1yWzBdLG89MCxzPTAsbD1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7Zm9yKHZhciBjPWUud29yZHNbbl0sdT1sLTE7dT49MDt1LS0pe3ZhciBoPWM+PnUmMTtpIT09clswXSYmKGk9dGhpcy5zcXIoaSkpLDAhPT1ofHwwIT09bz8obzw8PTEsb3w9aCwoND09PSsrc3x8MD09PW4mJjA9PT11KSYmKGk9dGhpcy5tdWwoaSxyW29dKSxzPTAsbz0wKSk6cz0wfWw9MjZ9cmV0dXJuIGl9LHcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LHcucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxhLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBUKHQpfSxpKFQsdyksVC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LFQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxULnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LFQucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oInVuZGVmaW5lZCI9PXR5cGVvZiBlfHxlLHRoaXMpfSx7YnVmZmVyOjEwOH1dLDEwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT0wO2ZvcihlPTA7ZTxpOysrZSlhKz10W2VdLmxlbmd0aDt2YXIgbz1uZXcgQXJyYXkoYSkscz0wO2ZvcihlPTA7ZTxpOysrZSl7dmFyIGw9dFtlXSxjPWwubGVuZ3RoO2ZvcihyPTA7cjxjOysrcil7dmFyIHU9b1tzKytdPW5ldyBBcnJheShjLTEpLGg9MDtmb3Iobj0wO248YzsrK24pbiE9PXImJih1W2grK109bFtuXSk7aWYoMSZyKXt2YXIgZj11WzFdO3VbMV09dVswXSx1WzBdPWZ9fX1yZXR1cm4gb319LHt9XSwxMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBoKHQpO2Nhc2UgMjpyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9jKHQsdCxlLCEwKTpmKHQsZSk7Y2FzZSAzOnJldHVybiBjKHQsZSxyLCExKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYm94LWludGVyc2VjdDogSW52YWxpZCBhcmd1bWVudHMiKX19O3ZhciBuLGk9dCgidHlwZWRhcnJheS1wb29sIiksYT10KCIuL2xpYi9zd2VlcCIpLG89dCgiLi9saWIvaW50ZXJzZWN0Iik7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj0wO3I8dDsrK3IpaWYoIShlW3JdPD1lW3IrdF0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wLG89MCxsPXQubGVuZ3RoO288bDsrK28pe3ZhciBjPXRbb107aWYoIXMoZSxjKSl7Zm9yKHZhciB1PTA7dTwyKmU7Kyt1KXJbaSsrXT1jW3VdO25bYSsrXT1vfX1yZXR1cm4gYX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBzPXQubGVuZ3RoLGM9ZS5sZW5ndGg7aWYoIShzPD0wfHxjPD0wKSl7dmFyIHU9dFswXS5sZW5ndGg+Pj4xO2lmKCEodTw9MCkpe3ZhciBoLGY9aS5tYWxsb2NEb3VibGUoMip1KnMpLHA9aS5tYWxsb2NJbnQzMihzKTtpZigocz1sKHQsdSxmLHApKT4wKXtpZigxPT09dSYmbilhLmluaXQocyksaD1hLnN3ZWVwQ29tcGxldGUodSxyLDAscyxmLHAsMCxzLGYscCk7ZWxzZXt2YXIgZD1pLm1hbGxvY0RvdWJsZSgyKnUqYyksZz1pLm1hbGxvY0ludDMyKGMpOyhjPWwoZSx1LGQsZykpPjAmJihhLmluaXQocytjKSxoPTE9PT11P2Euc3dlZXBCaXBhcnRpdGUodSxyLDAscyxmLHAsMCxjLGQsZyk6byh1LHIsbixzLGYscCxjLGQsZyksaS5mcmVlKGQpLGkuZnJlZShnKSl9aS5mcmVlKGYpLGkuZnJlZShwKX1yZXR1cm4gaH19fWZ1bmN0aW9uIHUodCxlKXtuLnB1c2goW3QsZV0pfWZ1bmN0aW9uIGgodCl7cmV0dXJuIG49W10sYyh0LHQsdSwhMCksbn1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIG49W10sYyh0LGUsdSwhMSksbn19LHsiLi9saWIvaW50ZXJzZWN0IjoxMDMsIi4vbGliL3N3ZWVwIjoxMDcsInR5cGVkYXJyYXktcG9vbCI6NTY3fV0sMTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPVsiZCIsImF4IiwidnYiLCJycyIsInJlIiwicmIiLCJyaSIsImJzIiwiYmUiLCJiYiIsImJpIl07ZnVuY3Rpb24gaSh0KXt2YXIgZT0iYnJ1dGVGb3JjZSIrKHQ/IkZ1bGwiOiJQYXJ0aWFsIikscj1bXSxpPW4uc2xpY2UoKTt0fHxpLnNwbGljZSgzLDAsImZwIik7dmFyIGE9WyJmdW5jdGlvbiAiK2UrIigiK2kuam9pbigpKyIpeyJdO2Z1bmN0aW9uIG8oZSxpKXt2YXIgbz1mdW5jdGlvbih0LGUscil7dmFyIGk9ImJydXRlRm9yY2UiKyh0PyJSZWQiOiJCbHVlIikrKGU/IkZsaXAiOiIiKSsocj8iRnVsbCI6IiIpLGE9WyJmdW5jdGlvbiAiLGksIigiLG4uam9pbigpLCIpeyIsInZhciAiLCJlcyIsIj0yKiIsImQiLCI7Il0sbz0iZm9yKHZhciBpPXJzLHJwPWVzKnJzO2k8cmU7KytpLHJwKz1lcyl7dmFyIHgwPXJiW2F4K3JwXSx4MT1yYltheCtycCtkXSx4aT1yaVtpXTsiLHM9ImZvcih2YXIgaj1icyxicD1lcypicztqPGJlOysraixicCs9ZXMpe3ZhciB5MD1iYltheCticF0sIisocj8ieTE9YmJbYXgrYnArZF0sIjoiIikrInlpPWJpW2pdOyI7cmV0dXJuIHQ/YS5wdXNoKG8sIlEiLCI6IixzKTphLnB1c2gocywiUSIsIjoiLG8pLHI/YS5wdXNoKCJpZih5MTx4MHx8eDE8eTApY29udGludWU7Iik6ZT9hLnB1c2goImlmKHkwPD14MHx8eDE8eTApY29udGludWU7Iik6YS5wdXNoKCJpZih5MDx4MHx8eDE8eTApY29udGludWU7IiksYS5wdXNoKCJmb3IodmFyIGs9YXgrMTtrPGQ7KytrKXt2YXIgcjA9cmJbaytycF0scjE9cmJbaytkK3JwXSxiMD1iYltrK2JwXSxiMT1iYltrK2QrYnBdO2lmKHIxPGIwfHxiMTxyMCljb250aW51ZSBRO312YXIgcnY9dnYoIiksZT9hLnB1c2goInlpLHhpIik6YS5wdXNoKCJ4aSx5aSIpLGEucHVzaCgiKTtpZihydiE9PXZvaWQgMClyZXR1cm4gcnY7fX19Iikse25hbWU6aSxjb2RlOmEuam9pbigiIil9fShlLGksdCk7ci5wdXNoKG8uY29kZSksYS5wdXNoKCJyZXR1cm4gIitvLm5hbWUrIigiK24uam9pbigpKyIpOyIpfWEucHVzaCgiaWYocmUtcnM+YmUtYnMpeyIpLHQ/KG8oITAsITEpLGEucHVzaCgifWVsc2V7IiksbyghMSwhMSkpOihhLnB1c2goImlmKGZwKXsiKSxvKCEwLCEwKSxhLnB1c2goIn1lbHNleyIpLG8oITAsITEpLGEucHVzaCgifX1lbHNle2lmKGZwKXsiKSxvKCExLCEwKSxhLnB1c2goIn1lbHNleyIpLG8oITEsITEpLGEucHVzaCgifSIpKSxhLnB1c2goIn19cmV0dXJuICIrZSk7dmFyIHM9ci5qb2luKCIiKSthLmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24ocykoKX1yLnBhcnRpYWw9aSghMSksci5mdWxsPWkoITApfSx7fV0sMTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHUsdyxULGssTSl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9OCppLmxvZzIoZSsxKSoodCsxKXwwLGE9aS5uZXh0UG93Mig2KnIpO3YubGVuZ3RoPGEmJihuLmZyZWUodiksdj1uLm1hbGxvY0ludDMyKGEpKTt2YXIgbz1pLm5leHRQb3cyKDIqcik7eS5sZW5ndGg8byYmKG4uZnJlZSh5KSx5PW4ubWFsbG9jRG91YmxlKG8pKX0odCxhK1QpO3ZhciBBLFM9MCxFPTIqdDt4KFMrKywwLDAsYSwwLFQscj8xNjowLC0xLzAsMS8wKSxyfHx4KFMrKywwLDAsVCwwLGEsMSwtMS8wLDEvMCk7Zm9yKDtTPjA7KXt2YXIgQz02KihTLT0xKSxMPXZbQ10sUD12W0MrMV0sST12W0MrMl0sej12W0MrM10sTz12W0MrNF0sRD12W0MrNV0sUj0yKlMsRj15W1JdLEI9eVtSKzFdLE49MSZELGo9ISEoMTYmRCksVT11LFY9dyxxPWssSD1NO2lmKE4mJihVPWssVj1NLHE9dSxIPXcpLCEoMiZEJiYoST1wKHQsTCxQLEksVSxWLEIpLFA+PUkpfHw0JkQmJihQPWQodCxMLFAsSSxVLFYsRikpPj1JKSl7dmFyIEc9SS1QLFk9Ty16O2lmKGope2lmKHQqRyooRytZKTwxPDwyMil7aWYodm9pZCAwIT09KEE9bC5zY2FuQ29tcGxldGUodCxMLGUsUCxJLFUsVix6LE8scSxIKSkpcmV0dXJuIEE7Y29udGludWV9fWVsc2V7aWYodCpNYXRoLm1pbihHLFkpPDEyOCl7aWYodm9pZCAwIT09KEE9byh0LEwsZSxOLFAsSSxVLFYseixPLHEsSCkpKXJldHVybiBBO2NvbnRpbnVlfWlmKHQqRypZPDE8PDIyKXtpZih2b2lkIDAhPT0oQT1sLnNjYW5CaXBhcnRpdGUodCxMLGUsTixQLEksVSxWLHosTyxxLEgpKSlyZXR1cm4gQTtjb250aW51ZX19dmFyIFc9aCh0LEwsUCxJLFUsVixGLEIpO2lmKFA8VylpZih0KihXLVApPDEyOCl7aWYodm9pZCAwIT09KEE9cyh0LEwrMSxlLFAsVyxVLFYseixPLHEsSCkpKXJldHVybiBBfWVsc2UgaWYoTD09PXQtMil7aWYodm9pZCAwIT09KEE9Tj9sLnN3ZWVwQmlwYXJ0aXRlKHQsZSx6LE8scSxILFAsVyxVLFYpOmwuc3dlZXBCaXBhcnRpdGUodCxlLFAsVyxVLFYseixPLHEsSCkpKXJldHVybiBBfWVsc2UgeChTKyssTCsxLFAsVyx6LE8sTiwtMS8wLDEvMCkseChTKyssTCsxLHosTyxQLFcsMV5OLC0xLzAsMS8wKTtpZihXPEkpe3ZhciBaPWModCxMLHosTyxxLEgpLFg9cVtFKlorTF0sSj1mKHQsTCxaLE8scSxILFgpO2lmKEo8TyYmeChTKyssTCxXLEksSixPLCg0fE4pKyhqPzE2OjApLFgsQiksejxaJiZ4KFMrKyxMLFcsSSx6LFosKDJ8TikrKGo/MTY6MCksRixYKSxaKzE9PT1KKXtpZih2b2lkIDAhPT0oQT1qP18odCxMLGUsVyxJLFUsVixaLHEsSFtaXSk6Yih0LEwsZSxOLFcsSSxVLFYsWixxLEhbWl0pKSlyZXR1cm4gQX1lbHNlIGlmKFo8Sil7dmFyIEs7aWYoail7aWYoSz1nKHQsTCxXLEksVSxWLFgpLFc8Syl7dmFyIFE9Zih0LEwsVyxLLFUsVixYKTtpZihMPT09dC0yKXtpZihXPFEmJnZvaWQgMCE9PShBPWwuc3dlZXBDb21wbGV0ZSh0LGUsVyxRLFUsVixaLEoscSxIKSkpcmV0dXJuIEE7aWYoUTxLJiZ2b2lkIDAhPT0oQT1sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxRLEssVSxWLFosSixxLEgpKSlyZXR1cm4gQX1lbHNlIFc8USYmeChTKyssTCsxLFcsUSxaLEosMTYsLTEvMCwxLzApLFE8SyYmKHgoUysrLEwrMSxRLEssWixKLDAsLTEvMCwxLzApLHgoUysrLEwrMSxaLEosUSxLLDEsLTEvMCwxLzApKX19ZWxzZSBLPU4/bSh0LEwsVyxJLFUsVixYKTpnKHQsTCxXLEksVSxWLFgpLFc8SyYmKEw9PT10LTI/QT1OP2wuc3dlZXBCaXBhcnRpdGUodCxlLFosSixxLEgsVyxLLFUsVik6bC5zd2VlcEJpcGFydGl0ZSh0LGUsVyxLLFUsVixaLEoscSxIKTooeChTKyssTCsxLFcsSyxaLEosTiwtMS8wLDEvMCkseChTKyssTCsxLFosSixXLEssMV5OLC0xLzAsMS8wKSkpfX19fX07dmFyIG49dCgidHlwZWRhcnJheS1wb29sIiksaT10KCJiaXQtdHdpZGRsZSIpLGE9dCgiLi9icnV0ZSIpLG89YS5wYXJ0aWFsLHM9YS5mdWxsLGw9dCgiLi9zd2VlcCIpLGM9dCgiLi9tZWRpYW4iKSx1PXQoIi4vcGFydGl0aW9uIiksaD11KCIhKGxvPj1wMCkmJiEocDE+PWhpKSIsWyJwMCIsInAxIl0pLGY9dSgibG89PT1wMCIsWyJwMCJdKSxwPXUoImxvPHAwIixbInAwIl0pLGQ9dSgiaGk8PXAwIixbInAwIl0pLGc9dSgibG88PXAwJiZwMDw9aGkiLFsicDAiXSksbT11KCJsbzxwMCYmcDA8PWhpIixbInAwIl0pLHY9bi5tYWxsb2NJbnQzMigxMDI0KSx5PW4ubWFsbG9jRG91YmxlKDEwMjQpO2Z1bmN0aW9uIHgodCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPTYqdDt2W2NdPWUsdltjKzFdPXIsdltjKzJdPW4sdltjKzNdPWksdltjKzRdPWEsdltjKzVdPW87dmFyIHU9Mip0O3lbdV09cyx5W3UrMV09bH1mdW5jdGlvbiBiKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGg9Mip0LGY9bCpoLHA9Y1tmK2VdO3Q6Zm9yKHZhciBkPWksZz1pKmg7ZDxhOysrZCxnKz1oKXt2YXIgbT1vW2crZV0sdj1vW2crZSt0XTtpZighKHA8bXx8djxwKSYmKCFufHxwIT09bSkpe2Zvcih2YXIgeSx4PXNbZF0sYj1lKzE7Yjx0OysrYil7bT1vW2crYl0sdj1vW2crYit0XTt2YXIgXz1jW2YrYl0sdz1jW2YrYit0XTtpZih2PF98fHc8bSljb250aW51ZSB0fWlmKHZvaWQgMCE9PSh5PW4/cih1LHgpOnIoeCx1KSkpcmV0dXJuIHl9fX1mdW5jdGlvbiBfKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PTIqdCxoPXMqdSxmPWxbaCtlXTt0OmZvcih2YXIgcD1uLGQ9bip1O3A8aTsrK3AsZCs9dSl7dmFyIGc9b1twXTtpZihnIT09Yyl7dmFyIG09YVtkK2VdLHY9YVtkK2UrdF07aWYoIShmPG18fHY8Zikpe2Zvcih2YXIgeT1lKzE7eTx0OysreSl7bT1hW2QreV0sdj1hW2QreSt0XTt2YXIgeD1sW2greV0sYj1sW2greSt0XTtpZih2PHh8fGI8bSljb250aW51ZSB0fXZhciBfPXIoZyxjKTtpZih2b2lkIDAhPT1fKXJldHVybiBffX19fX0seyIuL2JydXRlIjoxMDIsIi4vbWVkaWFuIjoxMDQsIi4vcGFydGl0aW9uIjoxMDUsIi4vc3dlZXAiOjEwNywiYml0LXR3aWRkbGUiOjk3LCJ0eXBlZGFycmF5LXBvb2wiOjU2N31dLDEwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe2lmKGE8PXIrMSlyZXR1cm4gcjt2YXIgbD1yLGM9YSx1PWErcj4+PjEsaD0yKnQsZj11LHA9b1toKnUrZV07Zm9yKDtsPGM7KXtpZihjLWw8OCl7aSh0LGUsbCxjLG8scykscD1vW2gqdStlXTticmVha312YXIgZD1jLWwsZz1NYXRoLnJhbmRvbSgpKmQrbHwwLG09b1toKmcrZV0sdj1NYXRoLnJhbmRvbSgpKmQrbHwwLHk9b1toKnYrZV0seD1NYXRoLnJhbmRvbSgpKmQrbHwwLGI9b1toKngrZV07bTw9eT9iPj15PyhmPXYscD15KTptPj1iPyhmPWcscD1tKTooZj14LHA9Yik6eT49Yj8oZj12LHA9eSk6Yj49bT8oZj1nLHA9bSk6KGY9eCxwPWIpO2Zvcih2YXIgXz1oKihjLTEpLHc9aCpmLFQ9MDtUPGg7KytULCsrXywrK3cpe3ZhciBrPW9bX107b1tfXT1vW3ddLG9bd109a312YXIgTT1zW2MtMV07c1tjLTFdPXNbZl0sc1tmXT1NLGY9bih0LGUsbCxjLTEsbyxzLHApO2ZvcihfPWgqKGMtMSksdz1oKmYsVD0wO1Q8aDsrK1QsKytfLCsrdyl7az1vW19dO29bX109b1t3XSxvW3ddPWt9TT1zW2MtMV07aWYoc1tjLTFdPXNbZl0sc1tmXT1NLHU8Zil7Zm9yKGM9Zi0xO2w8YyYmb1toKihjLTEpK2VdPT09cDspYy09MTtjKz0xfWVsc2V7aWYoIShmPHUpKWJyZWFrO2ZvcihsPWYrMTtsPGMmJm9baCpsK2VdPT09cDspbCs9MX19cmV0dXJuIG4odCxlLHIsdSxvLHMsb1toKnUrZV0pfTt2YXIgbj10KCIuL3BhcnRpdGlvbiIpKCJsbzxwMCIsWyJwMCJdKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhKXtmb3IodmFyIG89Mip0LHM9byoocisxKStlLGw9cisxO2w8bjsrK2wscys9bylmb3IodmFyIGM9aVtzXSx1PWwsaD1vKihsLTEpO3U+ciYmaVtoK2VdPmM7LS11LGgtPW8pe2Zvcih2YXIgZj1oLHA9aCtvLGQ9MDtkPG87KytkLCsrZiwrK3Ape3ZhciBnPWlbZl07aVtmXT1pW3BdLGlbcF09Z312YXIgbT1hW3VdO2FbdV09YVt1LTFdLGFbdS0xXT1tfX19LHsiLi9wYXJ0aXRpb24iOjEwNX1dLDEwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0iYWJjZGVmIi5zcGxpdCgiIikuY29uY2F0KGUpLG49W107dC5pbmRleE9mKCJsbyIpPj0wJiZuLnB1c2goImxvPWVbaytuXSIpO3QuaW5kZXhPZigiaGkiKT49MCYmbi5wdXNoKCJoaT1lW2srb10iKTtyZXR1cm4gci5wdXNoKCJmb3IodmFyIGo9MiphLGs9aipjLGw9ayxtPWMsbj1iLG89YStiLHA9YztkPnA7KytwLGsrPWope3ZhciBfO2lmKCQpaWYobT09PXApbSs9MSxsKz1qO2Vsc2V7Zm9yKHZhciBzPTA7aj5zOysrcyl7dmFyIHQ9ZVtrK3NdO2VbaytzXT1lW2xdLGVbbCsrXT10fXZhciB1PWZbcF07ZltwXT1mW21dLGZbbSsrXT11fX1yZXR1cm4gbSIucmVwbGFjZSgiXyIsbi5qb2luKCkpLnJlcGxhY2UoIiQiLHQpKSxGdW5jdGlvbi5hcHBseSh2b2lkIDAscil9fSx7fV0sMTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U8PTEyOD9uKDAsZS0xLHQpOmZ1bmN0aW9uIHQoZSxyLHUpe3ZhciBoPShyLWUrMSkvNnwwLGY9ZStoLHA9ci1oLGQ9ZStyPj4xLGc9ZC1oLG09ZCtoLHY9Zix5PWcseD1kLGI9bSxfPXAsdz1lKzEsVD1yLTEsaz0wO2wodix5LHUpJiYoaz12LHY9eSx5PWspO2woYixfLHUpJiYoaz1iLGI9XyxfPWspO2wodix4LHUpJiYoaz12LHY9eCx4PWspO2woeSx4LHUpJiYoaz15LHk9eCx4PWspO2wodixiLHUpJiYoaz12LHY9YixiPWspO2woeCxiLHUpJiYoaz14LHg9YixiPWspO2woeSxfLHUpJiYoaz15LHk9XyxfPWspO2woeSx4LHUpJiYoaz15LHk9eCx4PWspO2woYixfLHUpJiYoaz1iLGI9XyxfPWspO2Zvcih2YXIgTT11WzIqeV0sQT11WzIqeSsxXSxTPXVbMipiXSxFPXVbMipiKzFdLEM9Mip2LEw9Mip4LFA9MipfLEk9MipmLHo9MipkLE89MipwLEQ9MDtEPDI7KytEKXt2YXIgUj11W0MrRF0sRj11W0wrRF0sQj11W1ArRF07dVtJK0RdPVIsdVt6K0RdPUYsdVtPK0RdPUJ9YShnLGUsdSksYShtLHIsdSk7Zm9yKHZhciBOPXc7Tjw9VDsrK04paWYoYyhOLE0sQSx1KSlOIT09dyYmaShOLHcsdSksKyt3O2Vsc2UgaWYoIWMoTixTLEUsdSkpZm9yKDs7KXtpZihjKFQsUyxFLHUpKXtjKFQsTSxBLHUpPyhvKE4sdyxULHUpLCsrdywtLVQpOihpKE4sVCx1KSwtLVQpO2JyZWFrfWlmKC0tVDxOKWJyZWFrfXMoZSx3LTEsTSxBLHUpLHMocixUKzEsUyxFLHUpLHctMi1lPD0zMj9uKGUsdy0yLHUpOnQoZSx3LTIsdSk7ci0oVCsyKTw9MzI/bihUKzIscix1KTp0KFQrMixyLHUpO1Qtdzw9MzI/bih3LFQsdSk6dCh3LFQsdSl9KDAsZS0xLHQpfTtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG49MioodCsxKSxpPXQrMTtpPD1lOysraSl7Zm9yKHZhciBhPXJbbisrXSxvPXJbbisrXSxzPWksbD1uLTI7cy0tID50Oyl7dmFyIGM9cltsLTJdLHU9cltsLTFdO2lmKGM8YSlicmVhaztpZihjPT09YSYmdTxvKWJyZWFrO3JbbF09YyxyW2wrMV09dSxsLT0yfXJbbF09YSxyW2wrMV09b319ZnVuY3Rpb24gaSh0LGUscil7ZSo9Mjt2YXIgbj1yW3QqPTJdLGk9clt0KzFdO3JbdF09cltlXSxyW3QrMV09cltlKzFdLHJbZV09bixyW2UrMV09aX1mdW5jdGlvbiBhKHQsZSxyKXtlKj0yLHJbdCo9Ml09cltlXSxyW3QrMV09cltlKzFdfWZ1bmN0aW9uIG8odCxlLHIsbil7ZSo9MixyKj0yO3ZhciBpPW5bdCo9Ml0sYT1uW3QrMV07blt0XT1uW2VdLG5bdCsxXT1uW2UrMV0sbltlXT1uW3JdLG5bZSsxXT1uW3IrMV0sbltyXT1pLG5bcisxXT1hfWZ1bmN0aW9uIHModCxlLHIsbixpKXtlKj0yLGlbdCo9Ml09aVtlXSxpW2VdPXIsaVt0KzFdPWlbZSsxXSxpW2UrMV09bn1mdW5jdGlvbiBsKHQsZSxyKXtlKj0yO3ZhciBuPXJbdCo9Ml0saT1yW2VdO3JldHVybiEobjxpKSYmKG4hPT1pfHxyW3QrMV0+cltlKzFdKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpPW5bdCo9Ml07cmV0dXJuIGk8ZXx8aT09PWUmJm5bdCsxXTxyfX0se31dLDEwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2luaXQ6ZnVuY3Rpb24odCl7dmFyIGU9aS5uZXh0UG93Mih0KTtvLmxlbmd0aDxlJiYobi5mcmVlKG8pLG89bi5tYWxsb2NJbnQzMihlKSk7cy5sZW5ndGg8ZSYmKG4uZnJlZShzKSxzPW4ubWFsbG9jSW50MzIoZSkpO2wubGVuZ3RoPGUmJihuLmZyZWUobCksbD1uLm1hbGxvY0ludDMyKGUpKTtjLmxlbmd0aDxlJiYobi5mcmVlKGMpLGM9bi5tYWxsb2NJbnQzMihlKSk7dS5sZW5ndGg8ZSYmKG4uZnJlZSh1KSx1PW4ubWFsbG9jSW50MzIoZSkpO2gubGVuZ3RoPGUmJihuLmZyZWUoaCksaD1uLm1hbGxvY0ludDMyKGUpKTt2YXIgcj04KmU7Zi5sZW5ndGg8ciYmKG4uZnJlZShmKSxmPW4ubWFsbG9jRG91YmxlKHIpKX0sc3dlZXBCaXBhcnRpdGU6ZnVuY3Rpb24odCxlLHIsbixpLHUsaCxnLG0sdil7Zm9yKHZhciB5PTAseD0yKnQsYj10LTEsXz14LTEsdz1yO3c8bjsrK3cpe3ZhciBUPXVbd10saz14Knc7Zlt5KytdPWlbaytiXSxmW3krK109LShUKzEpLGZbeSsrXT1pW2srX10sZlt5KytdPVR9Zm9yKHc9aDt3PGc7Kyt3KXtUPXZbd10rKDE8PDI4KTt2YXIgTT14Knc7Zlt5KytdPW1bTStiXSxmW3krK109LVQsZlt5KytdPW1bTStfXSxmW3krK109VH12YXIgQT15Pj4+MTthKGYsQSk7dmFyIFM9MCxFPTA7Zm9yKHc9MDt3PEE7Kyt3KXt2YXIgQz0wfGZbMip3KzFdO2lmKEM+PTE8PDI4KXAobCxjLEUtLSxDPUMtKDE8PDI4KXwwKTtlbHNlIGlmKEM+PTApcChvLHMsUy0tLEMpO2Vsc2UgaWYoQzw9LSgxPDwyOCkpe0M9LUMtKDE8PDI4KXwwO2Zvcih2YXIgTD0wO0w8UzsrK0wpe2lmKHZvaWQgMCE9PShQPWUob1tMXSxDKSkpcmV0dXJuIFB9ZChsLGMsRSsrLEMpfWVsc2V7Qz0tQy0xfDA7Zm9yKEw9MDtMPEU7KytMKXt2YXIgUDtpZih2b2lkIDAhPT0oUD1lKEMsbFtMXSkpKXJldHVybiBQfWQobyxzLFMrKyxDKX19fSxzd2VlcENvbXBsZXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxnLG0sdix5LHgpe2Zvcih2YXIgYj0wLF89Mip0LHc9dC0xLFQ9Xy0xLGs9cjtrPG47KytrKXt2YXIgTT1nW2tdKzE8PDEsQT1fKms7ZltiKytdPWlbQSt3XSxmW2IrK109LU0sZltiKytdPWlbQStUXSxmW2IrK109TX1mb3Ioaz1tO2s8djsrK2spe009eFtrXSsxPDwxO3ZhciBTPV8qaztmW2IrK109eVtTK3ddLGZbYisrXT0xfC1NLGZbYisrXT15W1MrVF0sZltiKytdPTF8TX12YXIgRT1iPj4+MTthKGYsRSk7dmFyIEM9MCxMPTAsUD0wO2ZvcihrPTA7azxFOysrayl7dmFyIEk9MHxmWzIqaysxXSx6PTEmSTtpZihrPEUtMSYmST4+MT09ZlsyKmsrM10+PjEmJih6PTIsays9MSksSTwwKXtmb3IodmFyIE89LShJPj4xKS0xLEQ9MDtEPFA7KytEKXtpZih2b2lkIDAhPT0oUj1lKHVbRF0sTykpKXJldHVybiBSfWlmKDAhPT16KWZvcihEPTA7RDxDOysrRCl7aWYodm9pZCAwIT09KFI9ZShvW0RdLE8pKSlyZXR1cm4gUn1pZigxIT09eilmb3IoRD0wO0Q8TDsrK0Qpe3ZhciBSO2lmKHZvaWQgMCE9PShSPWUobFtEXSxPKSkpcmV0dXJuIFJ9MD09PXo/ZChvLHMsQysrLE8pOjE9PT16P2QobCxjLEwrKyxPKToyPT09eiYmZCh1LGgsUCsrLE8pfWVsc2V7Tz0oST4+MSktMTswPT09ej9wKG8scyxDLS0sTyk6MT09PXo/cChsLGMsTC0tLE8pOjI9PT16JiZwKHUsaCxQLS0sTyl9fX0sc2NhbkJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksbCxjLHUsaCxnLG0sdil7dmFyIHk9MCx4PTIqdCxiPWUsXz1lK3Qsdz0xLFQ9MTtuP1Q9MTw8Mjg6dz0xPDwyODtmb3IodmFyIGs9aTtrPGw7KytrKXt2YXIgTT1rK3csQT14Kms7Zlt5KytdPWNbQStiXSxmW3krK109LU0sZlt5KytdPWNbQStfXSxmW3krK109TX1mb3Ioaz1oO2s8ZzsrK2spe009aytUO3ZhciBTPXgqaztmW3krK109bVtTK2JdLGZbeSsrXT0tTX12YXIgRT15Pj4+MTthKGYsRSk7dmFyIEM9MDtmb3Ioaz0wO2s8RTsrK2spe3ZhciBMPTB8ZlsyKmsrMV07aWYoTDwwKXt2YXIgUD0hMTtpZigoTT0tTCk+PTE8PDI4PyhQPSFuLE0tPTE8PDI4KTooUD0hIW4sTS09MSksUClkKG8scyxDKyssTSk7ZWxzZXt2YXIgST12W01dLHo9eCpNLE89bVt6K2UrMV0sRD1tW3orZSsxK3RdO3Q6Zm9yKHZhciBSPTA7UjxDOysrUil7dmFyIEY9b1tSXSxCPXgqRjtpZighKEQ8Y1tCK2UrMV18fGNbQitlKzErdF08Tykpe2Zvcih2YXIgTj1lKzI7Tjx0OysrTilpZihtW3orTit0XTxjW0IrTl18fGNbQitOK3RdPG1beitOXSljb250aW51ZSB0O3ZhciBqLFU9dVtGXTtpZih2b2lkIDAhPT0oaj1uP3IoSSxVKTpyKFUsSSkpKXJldHVybiBqfX19fWVsc2UgcChvLHMsQy0tLEwtdyl9fSxzY2FuQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLHMsbCxjLHUsaCxwKXtmb3IodmFyIGQ9MCxnPTIqdCxtPWUsdj1lK3QseT1uO3k8aTsrK3kpe3ZhciB4PXkrKDE8PDI4KSxiPWcqeTtmW2QrK109c1tiK21dLGZbZCsrXT0teCxmW2QrK109c1tiK3ZdLGZbZCsrXT14fWZvcih5PWM7eTx1OysreSl7eD15KzE7dmFyIF89Zyp5O2ZbZCsrXT1oW18rbV0sZltkKytdPS14fXZhciB3PWQ+Pj4xO2EoZix3KTt2YXIgVD0wO2Zvcih5PTA7eTx3OysreSl7dmFyIGs9MHxmWzIqeSsxXTtpZihrPDApe2lmKCh4PS1rKT49MTw8Mjgpb1tUKytdPXgtKDE8PDI4KTtlbHNle3ZhciBNPXBbeC09MV0sQT1nKngsUz1oW0ErZSsxXSxFPWhbQStlKzErdF07dDpmb3IodmFyIEM9MDtDPFQ7KytDKXt2YXIgTD1vW0NdLFA9bFtMXTtpZihQPT09TSlicmVhazt2YXIgST1nKkw7aWYoIShFPHNbSStlKzFdfHxzW0krZSsxK3RdPFMpKXtmb3IodmFyIHo9ZSsyO3o8dDsrK3opaWYoaFtBK3ordF08c1tJK3pdfHxzW0kreit0XTxoW0Erel0pY29udGludWUgdDt2YXIgTz1yKFAsTSk7aWYodm9pZCAwIT09TylyZXR1cm4gT319fX1lbHNle2Zvcih4PWstKDE8PDI4KSxDPVQtMTtDPj0wOy0tQylpZihvW0NdPT09eCl7Zm9yKHo9QysxO3o8VDsrK3opb1t6LTFdPW9bel07YnJlYWt9LS1UfX19fTt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPXQoImJpdC10d2lkZGxlIiksYT10KCIuL3NvcnQiKSxvPW4ubWFsbG9jSW50MzIoMTAyNCkscz1uLm1hbGxvY0ludDMyKDEwMjQpLGw9bi5tYWxsb2NJbnQzMigxMDI0KSxjPW4ubWFsbG9jSW50MzIoMTAyNCksdT1uLm1hbGxvY0ludDMyKDEwMjQpLGg9bi5tYWxsb2NJbnQzMigxMDI0KSxmPW4ubWFsbG9jRG91YmxlKDgxOTIpO2Z1bmN0aW9uIHAodCxlLHIsbil7dmFyIGk9ZVtuXSxhPXRbci0xXTt0W2ldPWEsZVthXT1pfWZ1bmN0aW9uIGQodCxlLHIsbil7dFtyXT1uLGVbbl09cn19LHsiLi9zb3J0IjoxMDYsImJpdC10d2lkZGxlIjo5NywidHlwZWRhcnJheS1wb29sIjo1Njd9XSwxMDg6W2Z1bmN0aW9uKHQsZSxyKXt9LHt9XSwxMDk6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTA4XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTA4fV0sMTEwOltmdW5jdGlvbih0LGUscil7dmFyIG49T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24oKXt9O3JldHVybiBlLnByb3RvdHlwZT10LG5ldyBlfSxpPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmZS5wdXNoKHIpO3JldHVybiByfSxhPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHxmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19O2Z1bmN0aW9uIG8oKXt0aGlzLl9ldmVudHMmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCJfZXZlbnRzIil8fCh0aGlzLl9ldmVudHM9bihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9ZS5leHBvcnRzPW8sby5FdmVudEVtaXR0ZXI9byxvLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxvLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgcyxsPTEwO3RyeXt2YXIgYz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJ4Iix7dmFsdWU6MH0pLHM9MD09PWMueH1jYXRjaCh0KXtzPSExfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHZvaWQgMD09PXQuX21heExpc3RlbmVycz9vLmRlZmF1bHRNYXhMaXN0ZW5lcnM6dC5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIGgodCxlLHIpe2lmKGUpdC5jYWxsKHIpO2Vsc2UgZm9yKHZhciBuPXQubGVuZ3RoLGk9Xyh0LG4pLGE9MDthPG47KythKWlbYV0uY2FsbChyKX1mdW5jdGlvbiBmKHQsZSxyLG4pe2lmKGUpdC5jYWxsKHIsbik7ZWxzZSBmb3IodmFyIGk9dC5sZW5ndGgsYT1fKHQsaSksbz0wO288aTsrK28pYVtvXS5jYWxsKHIsbil9ZnVuY3Rpb24gcCh0LGUscixuLGkpe2lmKGUpdC5jYWxsKHIsbixpKTtlbHNlIGZvcih2YXIgYT10Lmxlbmd0aCxvPV8odCxhKSxzPTA7czxhOysrcylvW3NdLmNhbGwocixuLGkpfWZ1bmN0aW9uIGQodCxlLHIsbixpLGEpe2lmKGUpdC5jYWxsKHIsbixpLGEpO2Vsc2UgZm9yKHZhciBvPXQubGVuZ3RoLHM9Xyh0LG8pLGw9MDtsPG87KytsKXNbbF0uY2FsbChyLG4saSxhKX1mdW5jdGlvbiBnKHQsZSxyLG4pe2lmKGUpdC5hcHBseShyLG4pO2Vsc2UgZm9yKHZhciBpPXQubGVuZ3RoLGE9Xyh0LGkpLG89MDtvPGk7KytvKWFbb10uYXBwbHkocixuKX1mdW5jdGlvbiBtKHQsZSxyLGkpe3ZhciBhLG8scztpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKChvPXQuX2V2ZW50cyk/KG8ubmV3TGlzdGVuZXImJih0LmVtaXQoIm5ld0xpc3RlbmVyIixlLHIubGlzdGVuZXI/ci5saXN0ZW5lcjpyKSxvPXQuX2V2ZW50cykscz1vW2VdKToobz10Ll9ldmVudHM9bihudWxsKSx0Ll9ldmVudHNDb3VudD0wKSxzKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcz9zPW9bZV09aT9bcixzXTpbcyxyXTppP3MudW5zaGlmdChyKTpzLnB1c2gociksIXMud2FybmVkJiYoYT11KHQpKSYmYT4wJiZzLmxlbmd0aD5hKXtzLndhcm5lZD0hMDt2YXIgbD1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitzLmxlbmd0aCsnICInK1N0cmluZyhlKSsnIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicpO2wubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixsLmVtaXR0ZXI9dCxsLnR5cGU9ZSxsLmNvdW50PXMubGVuZ3RoLCJvYmplY3QiPT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIiVzOiAlcyIsbC5uYW1lLGwubWVzc2FnZSl9fWVsc2Ugcz1vW2VdPXIsKyt0Ll9ldmVudHNDb3VudDtyZXR1cm4gdH1mdW5jdGlvbiB2KCl7aWYoIXRoaXMuZmlyZWQpc3dpdGNoKHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCxhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7Y2FzZSAxOnJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQsYXJndW1lbnRzWzBdKTtjYXNlIDI6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTtjYXNlIDM6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7ZGVmYXVsdDpmb3IodmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdPWFyZ3VtZW50c1tlXTt0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LHQpfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6dCx0eXBlOmUsbGlzdGVuZXI6cn0saT1hLmNhbGwodixuKTtyZXR1cm4gaS5saXN0ZW5lcj1yLG4ud3JhcEZuPWksaX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbj10Ll9ldmVudHM7aWYoIW4pcmV0dXJuW107dmFyIGk9bltlXTtyZXR1cm4gaT8iZnVuY3Rpb24iPT10eXBlb2YgaT9yP1tpLmxpc3RlbmVyfHxpXTpbaV06cj9mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT10W3JdLmxpc3RlbmVyfHx0W3JdO3JldHVybiBlfShpKTpfKGksaS5sZW5ndGgpOltdfWZ1bmN0aW9uIGIodCl7dmFyIGU9dGhpcy5fZXZlbnRzO2lmKGUpe3ZhciByPWVbdF07aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIDE7aWYocilyZXR1cm4gci5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gXyh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dO3JldHVybiByfXM/T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsfSxzZXQ6ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQhPXQpdGhyb3cgbmV3IFR5cGVFcnJvcignImRlZmF1bHRNYXhMaXN0ZW5lcnMiIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtsPXR9fSk6by5kZWZhdWx0TWF4TGlzdGVuZXJzPWwsby5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8dDwwfHxpc05hTih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibiIgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxvLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzKX0sby5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz0iZXJyb3IiPT09dDtpZihvPXRoaXMuX2V2ZW50cylzPXMmJm51bGw9PW8uZXJyb3I7ZWxzZSBpZighcylyZXR1cm4hMTtpZihzKXtpZihhcmd1bWVudHMubGVuZ3RoPjEmJihlPWFyZ3VtZW50c1sxXSksZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGU7dmFyIGw9bmV3IEVycm9yKCdVbmhhbmRsZWQgImVycm9yIiBldmVudC4gKCcrZSsiKSIpO3Rocm93IGwuY29udGV4dD1lLGx9aWYoIShyPW9bdF0pKXJldHVybiExO3ZhciBjPSJmdW5jdGlvbiI9PXR5cGVvZiByO3N3aXRjaChuPWFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpoKHIsYyx0aGlzKTticmVhaztjYXNlIDI6ZihyLGMsdGhpcyxhcmd1bWVudHNbMV0pO2JyZWFrO2Nhc2UgMzpwKHIsYyx0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2JyZWFrO2Nhc2UgNDpkKHIsYyx0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdKTticmVhaztkZWZhdWx0OmZvcihpPW5ldyBBcnJheShuLTEpLGE9MTthPG47YSsrKWlbYS0xXT1hcmd1bWVudHNbYV07ZyhyLGMsdGhpcyxpKX1yZXR1cm4hMH0sby5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbSh0aGlzLHQsZSwhMSl9LG8ucHJvdG90eXBlLm9uPW8ucHJvdG90eXBlLmFkZExpc3RlbmVyLG8ucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBtKHRoaXMsdCxlLCEwKX0sby5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMub24odCx5KHRoaXMsdCxlKSksdGhpc30sby5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMucHJlcGVuZExpc3RlbmVyKHQseSh0aGlzLHQsZSkpLHRoaXN9LG8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scztpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKCEoaT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCEocj1pW3RdKSlyZXR1cm4gdGhpcztpZihyPT09ZXx8ci5saXN0ZW5lcj09PWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9bihudWxsKTooZGVsZXRlIGlbdF0saS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxyLmxpc3RlbmVyfHxlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil7Zm9yKGE9LTEsbz1yLmxlbmd0aC0xO28+PTA7by0tKWlmKHJbb109PT1lfHxyW29dLmxpc3RlbmVyPT09ZSl7cz1yW29dLmxpc3RlbmVyLGE9bzticmVha31pZihhPDApcmV0dXJuIHRoaXM7MD09PWE/ci5zaGlmdCgpOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUsbj1yKzEsaT10Lmxlbmd0aDtuPGk7cis9MSxuKz0xKXRbcl09dFtuXTt0LnBvcCgpfShyLGEpLDE9PT1yLmxlbmd0aCYmKGlbdF09clswXSksaS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxzfHxlKX1yZXR1cm4gdGhpc30sby5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYTtpZighKHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZighci5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1uKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnJbdF0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1uKG51bGwpOmRlbGV0ZSByW3RdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgbyxzPWkocik7Zm9yKGE9MDthPHMubGVuZ3RoOysrYSkicmVtb3ZlTGlzdGVuZXIiIT09KG89c1thXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKG8pO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9bihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKGU9clt0XSkpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGUpO2Vsc2UgaWYoZSlmb3IoYT1lLmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlW2FdKTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMsdCwhMCl9LG8ucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLHQsITEpfSxvLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5saXN0ZW5lckNvdW50P3QubGlzdGVuZXJDb3VudChlKTpiLmNhbGwodCxlKX0sby5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1iLG8ucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX19LHt9XSwxMTE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7Ci8qIQogKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci4KICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KInVzZSBzdHJpY3QiO3ZhciBuPXQoImJhc2U2NC1qcyIpLGk9dCgiaWVlZTc1NCIpO3IuQnVmZmVyPWUsci5TbG93QnVmZmVyPWZ1bmN0aW9uKHQpeyt0IT10JiYodD0wKTtyZXR1cm4gZS5hbGxvYygrdCl9LHIuSU5TUEVDVF9NQVhfQllURVM9NTA7ZnVuY3Rpb24gYSh0KXtpZih0PjIxNDc0ODM2NDcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgcj1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gci5fX3Byb3RvX189ZS5wcm90b3R5cGUscn1mdW5jdGlvbiBlKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gbCh0KX1yZXR1cm4gbyh0LGUscil9ZnVuY3Rpb24gbyh0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBmdW5jdGlvbih0LHIpeyJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yfHwocj0idXRmOCIpO2lmKCFlLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKTt2YXIgbj0wfGgodCxyKSxpPWEobiksbz1pLndyaXRlKHQscik7byE9PW4mJihpPWkuc2xpY2UoMCxvKSk7cmV0dXJuIGl9KHQscik7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBjKHQpO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiB0KTtpZihCKHQsQXJyYXlCdWZmZXIpfHx0JiZCKHQuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnVuY3Rpb24odCxyLG4pe2lmKHI8MHx8dC5ieXRlTGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIGk7aT12b2lkIDA9PT1yJiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCxyKTpuZXcgVWludDhBcnJheSh0LHIsbik7cmV0dXJuIGkuX19wcm90b19fPWUucHJvdG90eXBlLGl9KHQscixuKTtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIGk9dC52YWx1ZU9mJiZ0LnZhbHVlT2YoKTtpZihudWxsIT1pJiZpIT09dClyZXR1cm4gZS5mcm9tKGkscixuKTt2YXIgbz1mdW5jdGlvbih0KXtpZihlLmlzQnVmZmVyKHQpKXt2YXIgcj0wfHUodC5sZW5ndGgpLG49YShyKTtyZXR1cm4gMD09PW4ubGVuZ3RofHx0LmNvcHkobiwwLDAsciksbn1pZih2b2lkIDAhPT10Lmxlbmd0aClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHxOKHQubGVuZ3RoKT9hKDApOmModCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkFycmF5LmlzQXJyYXkodC5kYXRhKSlyZXR1cm4gYyh0LmRhdGEpfSh0KTtpZihvKXJldHVybiBvO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGUuZnJvbSh0W1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLHIsbik7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgdCl9ZnVuY3Rpb24gcyh0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBsKHQpe3JldHVybiBzKHQpLGEodDwwPzA6MHx1KHQpKX1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDwwPzA6MHx1KHQubGVuZ3RoKSxyPWEoZSksbj0wO248ZTtuKz0xKXJbbl09MjU1JnRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0KXtpZih0Pj0yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IisyMTQ3NDgzNjQ3Li50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfHR9ZnVuY3Rpb24gaCh0LHIpe2lmKGUuaXNCdWZmZXIodCkpcmV0dXJuIHQubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8Qih0LEFycmF5QnVmZmVyKSlyZXR1cm4gdC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7dmFyIG49dC5sZW5ndGgsaT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFpJiYwPT09bilyZXR1cm4gMDtmb3IodmFyIGE9ITE7Oylzd2l0Y2gocil7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBEKHQpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqbjtjYXNlImhleCI6cmV0dXJuIG4+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUih0KS5sZW5ndGg7ZGVmYXVsdDppZihhKXJldHVybiBpPy0xOkQodCkubGVuZ3RoO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksYT0hMH19ZnVuY3Rpb24gZih0LGUscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PWV8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KGU+Pj49MCkpcmV0dXJuIiI7Zm9yKHR8fCh0PSJ1dGY4Iik7Oylzd2l0Y2godCl7Y2FzZSJoZXgiOnJldHVybiBBKHRoaXMsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBUKHRoaXMsZSxyKTtjYXNlImFzY2lpIjpyZXR1cm4gayh0aGlzLGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gTSh0aGlzLGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiB3KHRoaXMsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIFModGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3Q9KHQrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIGQodCxyLG4saSxhKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBuPyhpPW4sbj0wKTpuPjIxNDc0ODM2NDc/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxOKG49K24pJiYobj1hPzA6dC5sZW5ndGgtMSksbjwwJiYobj10Lmxlbmd0aCtuKSxuPj10Lmxlbmd0aCl7aWYoYSlyZXR1cm4tMTtuPXQubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFhKXJldHVybi0xO249MH1pZigic3RyaW5nIj09dHlwZW9mIHImJihyPWUuZnJvbShyLGkpKSxlLmlzQnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5ndGg/LTE6Zyh0LHIsbixpLGEpO2lmKCJudW1iZXIiPT10eXBlb2YgcilyZXR1cm4gciY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2E/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHQscixuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKHQscixuKTpnKHQsW3JdLG4saSxhKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBnKHQsZSxyLG4saSl7dmFyIGEsbz0xLHM9dC5sZW5ndGgsbD1lLmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoInVjczIiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bnx8InV0ZjE2bGUiPT09bnx8InV0Zi0xNmxlIj09PW4pKXtpZih0Lmxlbmd0aDwyfHxlLmxlbmd0aDwyKXJldHVybi0xO289MixzLz0yLGwvPTIsci89Mn1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIDE9PT1vP3RbZV06dC5yZWFkVUludDE2QkUoZSpvKX1pZihpKXt2YXIgdT0tMTtmb3IoYT1yO2E8czthKyspaWYoYyh0LGEpPT09YyhlLC0xPT09dT8wOmEtdSkpe2lmKC0xPT09dSYmKHU9YSksYS11KzE9PT1sKXJldHVybiB1Km99ZWxzZS0xIT09dSYmKGEtPWEtdSksdT0tMX1lbHNlIGZvcihyK2w+cyYmKHI9cy1sKSxhPXI7YT49MDthLS0pe2Zvcih2YXIgaD0hMCxmPTA7ZjxsO2YrKylpZihjKHQsYStmKSE9PWMoZSxmKSl7aD0hMTticmVha31pZihoKXJldHVybiBhfXJldHVybi0xfWZ1bmN0aW9uIG0odCxlLHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9dC5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBhPWUubGVuZ3RoO24+YS8yJiYobj1hLzIpO2Zvcih2YXIgbz0wO288bjsrK28pe3ZhciBzPXBhcnNlSW50KGUuc3Vic3RyKDIqbywyKSwxNik7aWYoTihzKSlyZXR1cm4gbzt0W3Irb109c31yZXR1cm4gb31mdW5jdGlvbiB2KHQsZSxyLG4pe3JldHVybiBGKEQoZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24geSh0LGUscixuKXtyZXR1cm4gRihmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCgyNTUmdC5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gZX0oZSksdCxyLG4pfWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuIHkodCxlLHIsbil9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gRihSKGUpLHQscixuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3JldHVybiBGKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saSxhPVtdLG89MDtvPHQubGVuZ3RoJiYhKChlLT0yKTwwKTsrK28pcj10LmNoYXJDb2RlQXQobyksbj1yPj44LGk9ciUyNTYsYS5wdXNoKGkpLGEucHVzaChuKTtyZXR1cm4gYX0oZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24gdyh0LGUscil7cmV0dXJuIDA9PT1lJiZyPT09dC5sZW5ndGg/bi5mcm9tQnl0ZUFycmF5KHQpOm4uZnJvbUJ5dGVBcnJheSh0LnNsaWNlKGUscikpfWZ1bmN0aW9uIFQodCxlLHIpe3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9ZTtpPHI7KXt2YXIgYSxvLHMsbCxjPXRbaV0sdT1udWxsLGg9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2g8PXIpc3dpdGNoKGgpe2Nhc2UgMTpjPDEyOCYmKHU9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoYT10W2krMV0pKSYmKGw9KDMxJmMpPDw2fDYzJmEpPjEyNyYmKHU9bCk7YnJlYWs7Y2FzZSAzOmE9dFtpKzFdLG89dFtpKzJdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYobD0oMTUmYyk8PDEyfCg2MyZhKTw8Nnw2MyZvKT4yMDQ3JiYobDw1NTI5Nnx8bD41NzM0MykmJih1PWwpO2JyZWFrO2Nhc2UgNDphPXRbaSsxXSxvPXRbaSsyXSxzPXRbaSszXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYobD0oMTUmYyk8PDE4fCg2MyZhKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjY1NTM1JiZsPDExMTQxMTImJih1PWwpfW51bGw9PT11Pyh1PTY1NTMzLGg9MSk6dT42NTUzNSYmKHUtPTY1NTM2LG4ucHVzaCh1Pj4+MTAmMTAyM3w1NTI5NiksdT01NjMyMHwxMDIzJnUpLG4ucHVzaCh1KSxpKz1ofXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD00MDk2KXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0KTt2YXIgcj0iIixuPTA7Zm9yKDtuPGU7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQuc2xpY2UobixuKz00MDk2KSk7cmV0dXJuIHJ9KG4pfXIua01heExlbmd0aD0yMTQ3NDgzNjQ3LGUuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXt2YXIgdD1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gdC5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PXQuZm9vKCl9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGUuVFlQRURfQVJSQVlfU1VQUE9SVHx8InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlfHwiZnVuY3Rpb24iIT10eXBlb2YgY29uc29sZS5lcnJvcnx8Y29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGUuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihlLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC5zcGVjaWVzJiZlW1N5bWJvbC5zcGVjaWVzXT09PWUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExfSksZS5wb29sU2l6ZT04MTkyLGUuZnJvbT1mdW5jdGlvbih0LGUscil7cmV0dXJuIG8odCxlLHIpfSxlLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsZS5fX3Byb3RvX189VWludDhBcnJheSxlLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3JldHVybiBzKHQpLHQ8PTA/YSh0KTp2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2Ygcj9hKHQpLmZpbGwoZSxyKTphKHQpLmZpbGwoZSk6YSh0KX0odCxlLHIpfSxlLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQpfSxlLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0sZS5pc0J1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmITA9PT10Ll9pc0J1ZmZlciYmdCE9PWUucHJvdG90eXBlfSxlLmNvbXBhcmU9ZnVuY3Rpb24odCxyKXtpZihCKHQsVWludDhBcnJheSkmJih0PWUuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLEIocixVaW50OEFycmF5KSYmKHI9ZS5mcm9tKHIsci5vZmZzZXQsci5ieXRlTGVuZ3RoKSksIWUuaXNCdWZmZXIodCl8fCFlLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHQ9PT1yKXJldHVybiAwO2Zvcih2YXIgbj10Lmxlbmd0aCxpPXIubGVuZ3RoLGE9MCxvPU1hdGgubWluKG4saSk7YTxvOysrYSlpZih0W2FdIT09clthXSl7bj10W2FdLGk9clthXTticmVha31yZXR1cm4gbjxpPy0xOmk8bj8xOjB9LGUuaXNFbmNvZGluZz1mdW5jdGlvbih0KXtzd2l0Y2goU3RyaW5nKHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sZS5jb25jYXQ9ZnVuY3Rpb24odCxyKXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBlLmFsbG9jKDApO3ZhciBuO2lmKHZvaWQgMD09PXIpZm9yKHI9MCxuPTA7bjx0Lmxlbmd0aDsrK24pcis9dFtuXS5sZW5ndGg7dmFyIGk9ZS5hbGxvY1Vuc2FmZShyKSxhPTA7Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIG89dFtuXTtpZihCKG8sVWludDhBcnJheSkmJihvPWUuZnJvbShvKSksIWUuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShpLGEpLGErPW8ubGVuZ3RofXJldHVybiBpfSxlLmJ5dGVMZW5ndGg9aCxlLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsZS5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz0yKXAodGhpcyxlLGUrMSk7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9NClwKHRoaXMsZSxlKzMpLHAodGhpcyxlKzEsZSsyKTtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz04KXAodGhpcyxlLGUrNykscCh0aGlzLGUrMSxlKzYpLHAodGhpcyxlKzIsZSs1KSxwKHRoaXMsZSszLGUrNCk7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT10PyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP1QodGhpcywwLHQpOmYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1lLnByb3RvdHlwZS50b1N0cmluZyxlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09dHx8MD09PWUuY29tcGFyZSh0aGlzLHQpfSxlLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9IiIsZT1yLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0PXRoaXMudG9TdHJpbmcoImhleCIsMCxlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPmUmJih0Kz0iIC4uLiAiKSwiPEJ1ZmZlciAiK3QrIj4ifSxlLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHQscixuLGksYSl7aWYoQih0LFVpbnQ4QXJyYXkpJiYodD1lLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTtpZih2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1uJiYobj10P3QubGVuZ3RoOjApLHZvaWQgMD09PWkmJihpPTApLHZvaWQgMD09PWEmJihhPXRoaXMubGVuZ3RoKSxyPDB8fG4+dC5sZW5ndGh8fGk8MHx8YT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoaT49YSYmcj49bilyZXR1cm4gMDtpZihpPj1hKXJldHVybi0xO2lmKHI+PW4pcmV0dXJuIDE7aWYodGhpcz09PXQpcmV0dXJuIDA7Zm9yKHZhciBvPShhPj4+PTApLShpPj4+PTApLHM9KG4+Pj49MCktKHI+Pj49MCksbD1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShpLGEpLHU9dC5zbGljZShyLG4pLGg9MDtoPGw7KytoKWlmKGNbaF0hPT11W2hdKXtvPWNbaF0scz11W2hdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sZS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHQsZSxyKX0sZS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGQodGhpcyx0LGUsciwhMCl9LGUucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZCh0aGlzLHQsZSxyLCExKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09ZSluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLGU9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgZSluPWUscj10aGlzLmxlbmd0aCxlPTA7ZWxzZXtpZighaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2U+Pj49MCxpc0Zpbml0ZShyKT8ocj4+Pj0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLWU7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLHQubGVuZ3RoPjAmJihyPDB8fGU8MCl8fGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIGE9ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBtKHRoaXMsdCxlLHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHYodGhpcyx0LGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIHkodGhpcyx0LGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGIodGhpcyx0LGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBfKHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYoYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksYT0hMH19LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07ZnVuY3Rpb24gayh0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JnRbaV0pO3JldHVybiBufWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBufWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPXQubGVuZ3RoOyghZXx8ZTwwKSYmKGU9MCksKCFyfHxyPDB8fHI+bikmJihyPW4pO2Zvcih2YXIgaT0iIixhPWU7YTxyOysrYSlpKz1PKHRbYV0pO3JldHVybiBpfWZ1bmN0aW9uIFModCxlLHIpe2Zvcih2YXIgbj10LnNsaWNlKGUsciksaT0iIixhPTA7YTxuLmxlbmd0aDthKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUoblthXSsyNTYqblthKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBFKHQsZSxyKXtpZih0JTEhPTB8fHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYodCtlPnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBDKHQscixuLGksYSxvKXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYocj5hfHxyPG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4raT50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gTCh0LGUscixuLGksYSl7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFAodCxlLHIsbixhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8TCh0LDAsciw0KSxpLndyaXRlKHQsZSxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIEkodCxlLHIsbixhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8TCh0LDAsciw4KSxpLndyaXRlKHQsZSxyLG4sNTIsOCkscis4fWUucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5sZW5ndGg7KHQ9fn50KTwwPyh0Kz1uKTwwJiYodD0wKTp0Pm4mJih0PW4pLChyPXZvaWQgMD09PXI/bjp+fnIpPDA/KHIrPW4pPDAmJihyPTApOnI+biYmKHI9bikscjx0JiYocj10KTt2YXIgaT10aGlzLnN1YmFycmF5KHQscik7cmV0dXJuIGkuX19wcm90b19fPWUucHJvdG90eXBlLGl9LGUucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RSh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbn0sZS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGk9MTtlPjAmJihpKj0yNTYpOyluKz10aGlzW3QrLS1lXSppO3JldHVybiBufSxlLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwxLHRoaXMubGVuZ3RoKSx0aGlzW3RdfSxlLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OH0sZS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LGUucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsxNjc3NzIxNip0aGlzW3QrM119LGUucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbdF0rKHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXSl9LGUucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLGE9MDsrK2E8ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCthXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCplKSksbn0sZS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEUodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49ZSxpPTEsYT10aGlzW3QrLS1uXTtuPjAmJihpKj0yNTYpOylhKz10aGlzW3QrLS1uXSppO3JldHVybiBhPj0oaSo9MTI4KSYmKGEtPU1hdGgucG93KDIsOCplKSksYX0sZS5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1t0XT8tMSooMjU1LXRoaXNbdF0rMSk6dGhpc1t0XX0sZS5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8RSh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxlLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0KzFdfHRoaXNbdF08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGUucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNnx0aGlzW3QrM108PDI0fSxlLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0sZS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCEwLDIzLDQpfSxlLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITEsMjMsNCl9LGUucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDgsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITAsNTIsOCl9LGUucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDgsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITEsNTIsOCl9LGUucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fEModGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT0xLGE9MDtmb3IodGhpc1tlXT0yNTUmdDsrK2E8ciYmKGkqPTI1Nik7KXRoaXNbZSthXT10L2kmMjU1O3JldHVybiBlK3J9LGUucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fEModGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsYT0xO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYoYSo9MjU2KTspdGhpc1tlK2ldPXQvYSYyNTU7cmV0dXJuIGUrcn0sZS5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEModGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LGUucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxDKHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxlLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8Qyh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0sZS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEModGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LGUucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxDKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxlLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtDKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT0wLG89MSxzPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2EtMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxlLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtDKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT1yLTEsbz0xLHM9MDtmb3IodGhpc1tlK2FdPTI1NSZ0Oy0tYT49MCYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrYSsxXSYmKHM9MSksdGhpc1tlK2FdPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LGUucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEModGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0sZS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8Qyh0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxlLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxDKHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGUucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEModGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxlLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxDKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdDwwJiYodD00Mjk0OTY3Mjk1K3QrMSksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0sZS5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUCh0aGlzLHQsZSwhMCxyKX0sZS5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUCh0aGlzLHQsZSwhMSxyKX0sZS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITAscil9LGUucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBJKHRoaXMsdCxlLCExLHIpfSxlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQscixuLGkpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKG58fChuPTApLGl8fDA9PT1pfHwoaT10aGlzLmxlbmd0aCkscj49dC5sZW5ndGgmJihyPXQubGVuZ3RoKSxyfHwocj0wKSxpPjAmJmk8biYmKGk9biksaT09PW4pcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoaTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO2k+dGhpcy5sZW5ndGgmJihpPXRoaXMubGVuZ3RoKSx0Lmxlbmd0aC1yPGktbiYmKGk9dC5sZW5ndGgtcituKTt2YXIgYT1pLW47aWYodGhpcz09PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKXRoaXMuY29weVdpdGhpbihyLG4saSk7ZWxzZSBpZih0aGlzPT09dCYmbjxyJiZyPGkpZm9yKHZhciBvPWEtMTtvPj0wOy0tbyl0W28rcl09dGhpc1tvK25dO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodCx0aGlzLnN1YmFycmF5KG4saSkscik7cmV0dXJuIGF9LGUucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odCxyLG4saSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZigic3RyaW5nIj09dHlwZW9mIHI/KGk9cixyPTAsbj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBuJiYoaT1uLG49dGhpcy5sZW5ndGgpLHZvaWQgMCE9PWkmJiJzdHJpbmciIT10eXBlb2YgaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBpJiYhZS5pc0VuY29kaW5nKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIraSk7aWYoMT09PXQubGVuZ3RoKXt2YXIgYT10LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PWkmJmE8MTI4fHwibGF0aW4xIj09PWkpJiYodD1hKX19ZWxzZSJudW1iZXIiPT10eXBlb2YgdCYmKHQmPTI1NSk7aWYocjwwfHx0aGlzLmxlbmd0aDxyfHx0aGlzLmxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPD1yKXJldHVybiB0aGlzO3ZhciBvO2lmKHI+Pj49MCxuPXZvaWQgMD09PW4/dGhpcy5sZW5ndGg6bj4+PjAsdHx8KHQ9MCksIm51bWJlciI9PXR5cGVvZiB0KWZvcihvPXI7bzxuOysrbyl0aGlzW29dPXQ7ZWxzZXt2YXIgcz1lLmlzQnVmZmVyKHQpP3Q6ZS5mcm9tKHQsaSksbD1zLmxlbmd0aDtpZigwPT09bCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKG89MDtvPG4tcjsrK28pdGhpc1tvK3JdPXNbbyVsXX1yZXR1cm4gdGhpc307dmFyIHo9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBPKHQpe3JldHVybiB0PDE2PyIwIit0LnRvU3RyaW5nKDE2KTp0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI7ZT1lfHwxLzA7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bnVsbCxhPVtdLG89MDtvPG47KytvKXtpZigocj10LmNoYXJDb2RlQXQobykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKG8rMT09PW4peyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPTY1NTM2KyhpLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGkmJihlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKChlLT0xKTwwKWJyZWFrO2EucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKGUtPTIpPDApYnJlYWs7YS5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKChlLT0zKTwwKWJyZWFrO2EucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKGUtPTQpPDApYnJlYWs7YS5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gYX1mdW5jdGlvbiBSKHQpe3JldHVybiBuLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKHQpe2lmKCh0PSh0PXQuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoeiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7dC5sZW5ndGglNCE9MDspdCs9Ij0iO3JldHVybiB0fSh0KSl9ZnVuY3Rpb24gRih0LGUscixuKXtmb3IodmFyIGk9MDtpPG4mJiEoaStyPj1lLmxlbmd0aHx8aT49dC5sZW5ndGgpOysraSllW2krcl09dFtpXTtyZXR1cm4gaX1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHxudWxsIT10JiZudWxsIT10LmNvbnN0cnVjdG9yJiZudWxsIT10LmNvbnN0cnVjdG9yLm5hbWUmJnQuY29uc3RydWN0b3IubmFtZT09PWUubmFtZX1mdW5jdGlvbiBOKHQpe3JldHVybiB0IT10fX0pLmNhbGwodGhpcyx0KCJidWZmZXIiKS5CdWZmZXIpfSx7ImJhc2U2NC1qcyI6NzksYnVmZmVyOjExMSxpZWVlNzU0OjQxNn1dLDExMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9tb25vdG9uZSIpLGk9dCgiLi9saWIvdHJpYW5ndWxhdGlvbiIpLGE9dCgiLi9saWIvZGVsYXVuYXkiKSxvPXQoIi4vbGliL2ZpbHRlciIpO2Z1bmN0aW9uIHModCl7cmV0dXJuW01hdGgubWluKHRbMF0sdFsxXSksTWF0aC5tYXgodFswXSx0WzFdKV19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gZSBpbiB0P3RbZV06cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkoZSk/KHI9cnx8e30sZT1lfHxbXSk6KHI9ZXx8e30sZT1bXSk7dmFyIHU9ISFjKHIsImRlbGF1bmF5IiwhMCksaD0hIWMociwiaW50ZXJpb3IiLCEwKSxmPSEhYyhyLCJleHRlcmlvciIsITApLHA9ISFjKHIsImluZmluaXR5IiwhMSk7aWYoIWgmJiFmfHwwPT09dC5sZW5ndGgpcmV0dXJuW107dmFyIGQ9bih0LGUpO2lmKHV8fGghPT1mfHxwKXtmb3IodmFyIGc9aSh0Lmxlbmd0aCxmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuc29ydChsKX0oZSkpLG09MDttPGQubGVuZ3RoOysrbSl7dmFyIHY9ZFttXTtnLmFkZFRyaWFuZ2xlKHZbMF0sdlsxXSx2WzJdKX1yZXR1cm4gdSYmYSh0LGcpLGY/aD9wP28oZywwLHApOmcuY2VsbHMoKTpvKGcsMSxwKTpvKGcsLTEpfXJldHVybiBkfX0seyIuL2xpYi9kZWxhdW5heSI6MTEzLCIuL2xpYi9maWx0ZXIiOjExNCwiLi9saWIvbW9ub3RvbmUiOjExNSwiLi9saWIvdHJpYW5ndWxhdGlvbiI6MTE2fV0sMTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1pbi1zcGhlcmUiKVs0XTt0KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGkodCxlLHIsaSxhLG8pe3ZhciBzPWUub3Bwb3NpdGUoaSxhKTtpZighKHM8MCkpe2lmKGE8aSl7dmFyIGw9aTtpPWEsYT1sLGw9byxvPXMscz1sfWUuaXNDb25zdHJhaW50KGksYSl8fG4odFtpXSx0W2FdLHRbb10sdFtzXSk8MCYmci5wdXNoKGksYSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPXQubGVuZ3RoLG89ZS5zdGFycyxzPTA7czxhOysrcylmb3IodmFyIGw9b1tzXSxjPTE7YzxsLmxlbmd0aDtjKz0yKXtpZighKChwPWxbY10pPHMpJiYhZS5pc0NvbnN0cmFpbnQocyxwKSl7Zm9yKHZhciB1PWxbYy0xXSxoPS0xLGY9MTtmPGwubGVuZ3RoO2YrPTIpaWYobFtmLTFdPT09cCl7aD1sW2ZdO2JyZWFrfWg8MHx8bih0W3NdLHRbcF0sdFt1XSx0W2hdKTwwJiZyLnB1c2gocyxwKX19Zm9yKDtyLmxlbmd0aD4wOyl7Zm9yKHZhciBwPXIucG9wKCksZD0ocz1yLnBvcCgpLHU9LTEsaD0tMSxsPW9bc10sMSk7ZDxsLmxlbmd0aDtkKz0yKXt2YXIgZz1sW2QtMV0sbT1sW2RdO2c9PT1wP2g9bTptPT09cCYmKHU9Zyl9dTwwfHxoPDB8fChuKHRbc10sdFtwXSx0W3VdLHRbaF0pPj0wfHwoZS5mbGlwKHMscCksaSh0LGUscix1LHMsaCksaSh0LGUscixzLGgsdSksaSh0LGUscixoLHAsdSksaSh0LGUscixwLHUsaCkpKX19fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo5Niwicm9idXN0LWluLXNwaGVyZSI6NTE4fV0sMTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBhKHQsZSxyLG4saSxhLG8pe3RoaXMuY2VsbHM9dCx0aGlzLm5laWdoYm9yPWUsdGhpcy5mbGFncz1uLHRoaXMuY29uc3RyYWludD1yLHRoaXMuYWN0aXZlPWksdGhpcy5uZXh0PWEsdGhpcy5ib3VuZGFyeT1vfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV18fHRbMl0tZVsyXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY2VsbHMoKSxuPXIubGVuZ3RoLGk9MDtpPG47KytpKXt2YXIgcz0odj1yW2ldKVswXSxsPXZbMV0sYz12WzJdO2w8Yz9sPHMmJih2WzBdPWwsdlsxXT1jLHZbMl09cyk6YzxzJiYodlswXT1jLHZbMV09cyx2WzJdPWwpfXIuc29ydChvKTt2YXIgdT1uZXcgQXJyYXkobik7Zm9yKGk9MDtpPHUubGVuZ3RoOysraSl1W2ldPTA7dmFyIGg9W10sZj1bXSxwPW5ldyBBcnJheSgzKm4pLGQ9bmV3IEFycmF5KDMqbiksZz1udWxsO2UmJihnPVtdKTt2YXIgbT1uZXcgYShyLHAsZCx1LGgsZixnKTtmb3IoaT0wO2k8bjsrK2kpZm9yKHZhciB2PXJbaV0seT0wO3k8MzsrK3kpe3M9dlt5XSxsPXZbKHkrMSklM107dmFyIHg9cFszKmkreV09bS5sb2NhdGUobCxzLHQub3Bwb3NpdGUobCxzKSksYj1kWzMqaSt5XT10LmlzQ29uc3RyYWludChzLGwpO3g8MCYmKGI/Zi5wdXNoKGkpOihoLnB1c2goaSksdVtpXT0xKSxlJiZnLnB1c2goW2wscywtMV0pKX1yZXR1cm4gbX0odCxyKTtpZigwPT09ZSlyZXR1cm4gcj9uLmNlbGxzLmNvbmNhdChuLmJvdW5kYXJ5KTpuLmNlbGxzO3ZhciBpPTEscz1uLmFjdGl2ZSxsPW4ubmV4dCxjPW4uZmxhZ3MsdT1uLmNlbGxzLGg9bi5jb25zdHJhaW50LGY9bi5uZWlnaGJvcjtmb3IoO3MubGVuZ3RoPjB8fGwubGVuZ3RoPjA7KXtmb3IoO3MubGVuZ3RoPjA7KXt2YXIgcD1zLnBvcCgpO2lmKGNbcF0hPT0taSl7Y1twXT1pO3VbcF07Zm9yKHZhciBkPTA7ZDwzOysrZCl7dmFyIGc9ZlszKnArZF07Zz49MCYmMD09PWNbZ10mJihoWzMqcCtkXT9sLnB1c2goZyk6KHMucHVzaChnKSxjW2ddPWkpKX19fXZhciBtPWw7bD1zLHM9bSxsLmxlbmd0aD0wLGk9LWl9dmFyIHY9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHQubGVuZ3RoOysraSllW2ldPT09ciYmKHRbbisrXT10W2ldKTtyZXR1cm4gdC5sZW5ndGg9bix0fSh1LGMsZSk7aWYocilyZXR1cm4gdi5jb25jYXQobi5ib3VuZGFyeSk7cmV0dXJuIHZ9LGEucHJvdG90eXBlLmxvY2F0ZT0obj1bMCwwLDBdLGZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10LHM9ZSxsPXI7cmV0dXJuIGU8cj9lPHQmJihhPWUscz1yLGw9dCk6cjx0JiYoYT1yLHM9dCxsPWUpLGE8MD8tMTooblswXT1hLG5bMV09cyxuWzJdPWwsaS5lcSh0aGlzLmNlbGxzLG4sbykpfSl9LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjk2fV0sMTE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXTtmdW5jdGlvbiBhKHQsZSxyLG4saSl7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5pZHg9cix0aGlzLmxvd2VySWRzPW4sdGhpcy51cHBlcklkcz1pfWZ1bmN0aW9uIG8odCxlLHIsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy50eXBlPXIsdGhpcy5pZHg9bn1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9dC5hWzBdLWUuYVswXXx8dC5hWzFdLWUuYVsxXXx8dC50eXBlLWUudHlwZTtyZXR1cm4gcnx8KDAhPT10LnR5cGUmJihyPWkodC5hLHQuYixlLmIpKT9yOnQuaWR4LWUuaWR4KX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGkodC5hLHQuYixlKX1mdW5jdGlvbiBjKHQsZSxyLGEsbyl7Zm9yKHZhciBzPW4ubHQoZSxhLGwpLGM9bi5ndChlLGEsbCksdT1zO3U8YzsrK3Upe2Zvcih2YXIgaD1lW3VdLGY9aC5sb3dlcklkcyxwPWYubGVuZ3RoO3A+MSYmaShyW2ZbcC0yXV0scltmW3AtMV1dLGEpPjA7KXQucHVzaChbZltwLTFdLGZbcC0yXSxvXSkscC09MTtmLmxlbmd0aD1wLGYucHVzaChvKTt2YXIgZD1oLnVwcGVySWRzO2ZvcihwPWQubGVuZ3RoO3A+MSYmaShyW2RbcC0yXV0scltkW3AtMV1dLGEpPDA7KXQucHVzaChbZFtwLTJdLGRbcC0xXSxvXSkscC09MTtkLmxlbmd0aD1wLGQucHVzaChvKX19ZnVuY3Rpb24gdSh0LGUpe3ZhciByO3JldHVybihyPXQuYVswXTxlLmFbMF0/aSh0LmEsdC5iLGUuYSk6aShlLmIsZS5hLHQuYSkpP3I6KHI9ZS5iWzBdPHQuYlswXT9pKHQuYSx0LmIsZS5iKTppKGUuYixlLmEsdC5iKSl8fHQuaWR4LWUuaWR4fWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBpPW4ubGUodCxyLHUpLG89dFtpXSxzPW8udXBwZXJJZHMsbD1zW3MubGVuZ3RoLTFdO28udXBwZXJJZHM9W2xdLHQuc3BsaWNlKGkrMSwwLG5ldyBhKHIuYSxyLmIsci5pZHgsW2xdLHMpKX1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgaT1yLmE7ci5hPXIuYixyLmI9aTt2YXIgYT1uLmVxKHQscix1KSxvPXRbYV07dFthLTFdLnVwcGVySWRzPW8udXBwZXJJZHMsdC5zcGxpY2UoYSwxKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPVtdLGw9MDtsPHI7KytsKWkucHVzaChuZXcgbyh0W2xdLG51bGwsMCxsKSk7Zm9yKGw9MDtsPG47KytsKXt2YXIgdT1lW2xdLHA9dFt1WzBdXSxkPXRbdVsxXV07cFswXTxkWzBdP2kucHVzaChuZXcgbyhwLGQsMixsKSxuZXcgbyhkLHAsMSxsKSk6cFswXT5kWzBdJiZpLnB1c2gobmV3IG8oZCxwLDIsbCksbmV3IG8ocCxkLDEsbCkpfWkuc29ydChzKTtmb3IodmFyIGc9aVswXS5hWzBdLSgxK01hdGguYWJzKGlbMF0uYVswXSkpKk1hdGgucG93KDIsLTUyKSxtPVtuZXcgYShbZywxXSxbZywwXSwtMSxbXSxbXSxbXSxbXSldLHY9W10seT0obD0wLGkubGVuZ3RoKTtsPHk7KytsKXt2YXIgeD1pW2xdLGI9eC50eXBlOzA9PT1iP2ModixtLHQseC5hLHguaWR4KToyPT09Yj9oKG0sdCx4KTpmKG0sdCx4KX1yZXR1cm4gdn19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjk2LCJyb2J1c3Qtb3JpZW50YXRpb24iOjUyMH1dLDExNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGkodCxlKXt0aGlzLnN0YXJzPXQsdGhpcy5lZGdlcz1lfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1bXTtyZXR1cm4gbmV3IGkocixlKX07dmFyIGE9aS5wcm90b3R5cGU7ZnVuY3Rpb24gbyh0LGUscil7Zm9yKHZhciBuPTEsaT10Lmxlbmd0aDtuPGk7bis9MilpZih0W24tMV09PT1lJiZ0W25dPT09cilyZXR1cm4gdFtuLTFdPXRbaS0yXSx0W25dPXRbaS0xXSx2b2lkKHQubGVuZ3RoPWktMil9YS5pc0NvbnN0cmFpbnQ9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXTtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfXJldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiB0WzBdPU1hdGgubWluKHIsaSksdFsxXT1NYXRoLm1heChyLGkpLG4uZXEodGhpcy5lZGdlcyx0LGUpPj0wfX0oKSxhLnJlbW92ZVRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO28oblt0XSxlLHIpLG8obltlXSxyLHQpLG8obltyXSx0LGUpfSxhLmFkZFRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO25bdF0ucHVzaChlLHIpLG5bZV0ucHVzaChyLHQpLG5bcl0ucHVzaCh0LGUpfSxhLm9wcG9zaXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuc3RhcnNbZV0sbj0xLGk9ci5sZW5ndGg7bjxpO24rPTIpaWYocltuXT09PXQpcmV0dXJuIHJbbi0xXTtyZXR1cm4tMX0sYS5mbGlwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHBvc2l0ZSh0LGUpLG49dGhpcy5vcHBvc2l0ZShlLHQpO3RoaXMucmVtb3ZlVHJpYW5nbGUodCxlLHIpLHRoaXMucmVtb3ZlVHJpYW5nbGUoZSx0LG4pLHRoaXMuYWRkVHJpYW5nbGUodCxuLHIpLHRoaXMuYWRkVHJpYW5nbGUoZSxyLG4pfSxhLmVkZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3RhcnMsZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MCxvPWkubGVuZ3RoO2E8bzthKz0yKWUucHVzaChbaVthXSxpW2ErMV1dKTtyZXR1cm4gZX0sYS5jZWxscz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9Mil7dmFyIHM9aVthXSxsPWlbYSsxXTtyPE1hdGgubWluKHMsbCkmJmUucHVzaChbcixzLGxdKX1yZXR1cm4gZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjk2fV0sMTE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MSxyPTE7cjx0Lmxlbmd0aDsrK3IpZm9yKHZhciBuPTA7bjxyOysrbilpZih0W3JdPHRbbl0pZT0tZTtlbHNlIGlmKHRbbl09PT10W3JdKXJldHVybiAwO3JldHVybiBlfX0se31dLDExODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkdXAiKSxpPXQoInJvYnVzdC1saW5lYXItc29sdmUiKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aCxpPTA7aTxuOysraSlyKz10W2ldKmVbaV07cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTt0WzBdLmxlbmd0aDt2YXIgcj1uKFt0Lmxlbmd0aCsxLHQubGVuZ3RoKzFdLDEpLG89bihbdC5sZW5ndGgrMV0sMSk7cltlXVtlXT0wO2Zvcih2YXIgcz0wO3M8ZTsrK3Mpe2Zvcih2YXIgbD0wO2w8PXM7KytsKXJbbF1bc109cltzXVtsXT0yKmEodFtzXSx0W2xdKTtvW3NdPWEodFtzXSx0W3NdKX12YXIgYz1pKHIsbyksdT0wLGg9Y1tlKzFdO2ZvcihzPTA7czxoLmxlbmd0aDsrK3MpdSs9aFtzXTt2YXIgZj1uZXcgQXJyYXkoZSk7Zm9yKHM9MDtzPGU7KytzKXtoPWNbc107dmFyIHA9MDtmb3IobD0wO2w8aC5sZW5ndGg7KytsKXArPWhbbF07ZltzXT1wL3V9cmV0dXJuIGZ9ZnVuY3Rpb24gcyh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBlPXRbMF0ubGVuZ3RoLHI9bihbZV0pLGk9byh0KSxhPTA7YTx0Lmxlbmd0aDsrK2EpZm9yKHZhciBzPTA7czxlOysrcylyW3NdKz10W2FdW3NdKmlbYV07cmV0dXJuIHJ9cy5iYXJ5Y2VuZXRyaWM9byxlLmV4cG9ydHM9c30se2R1cDoxNzYsInJvYnVzdC1saW5lYXItc29sdmUiOjUxOX1dLDExOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0KSxyPTAsaT0wO2k8dC5sZW5ndGg7KytpKWZvcih2YXIgYT10W2ldLG89MDtvPGUubGVuZ3RoOysrbylyKz1NYXRoLnBvdyhhW29dLWVbb10sMik7cmV0dXJuIE1hdGguc3FydChyL3QubGVuZ3RoKX07dmFyIG49dCgiY2lyY3VtY2VudGVyIil9LHtjaXJjdW1jZW50ZXI6MTE4fV0sMTIwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZTxyP3Q8ZT9lOnQ+cj9yOnQ6dDxyP3I6dD5lP2U6dH19LHt9XSwxMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtpZihyKXtuPWU7Zm9yKHZhciBpPW5ldyBBcnJheShlLmxlbmd0aCksYT0wO2E8ZS5sZW5ndGg7KythKXt2YXIgbz1lW2FdO2lbYV09W29bMF0sb1sxXSxyW2FdXX1lPWl9dmFyIHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWQodCxbXSxwKHQpKTtyZXR1cm4gdihlLG4sciksISFufSh0LGUsISFyKTtmb3IoO3kodCxlLCEhcik7KXM9ITA7aWYociYmcyl7bi5sZW5ndGg9MCxyLmxlbmd0aD0wO2ZvcihhPTA7YTxlLmxlbmd0aDsrK2Epe289ZVthXTtuLnB1c2goW29bMF0sb1sxXV0pLHIucHVzaChvWzJdKX19cmV0dXJuIHN9O3ZhciBuPXQoInVuaW9uLWZpbmQiKSxpPXQoImJveC1pbnRlcnNlY3QiKSxhPXQoInJvYnVzdC1zZWdtZW50LWludGVyc2VjdCIpLG89dCgiYmlnLXJhdCIpLHM9dCgiYmlnLXJhdC9jbXAiKSxsPXQoImJpZy1yYXQvdG8tZmxvYXQiKSxjPXQoInJhdC12ZWMiKSx1PXQoIm5leHRhZnRlciIpLGg9dCgiLi9saWIvcmF0LXNlZy1pbnRlcnNlY3QiKTtmdW5jdGlvbiBmKHQpe3ZhciBlPWwodCk7cmV0dXJuW3UoZSwtMS8wKSx1KGUsMS8wKV19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPXRbcl07ZVtyXT1bdShuWzBdLC0xLzApLHUoblsxXSwtMS8wKSx1KG5bMF0sMS8wKSx1KG5bMV0sMS8wKV19cmV0dXJuIGV9ZnVuY3Rpb24gZCh0LGUscil7Zm9yKHZhciBhPWUubGVuZ3RoLG89bmV3IG4oYSkscz1bXSxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBjPWVbbF0saD1mKGNbMF0pLHA9ZihjWzFdKTtzLnB1c2goW3UoaFswXSwtMS8wKSx1KHBbMF0sLTEvMCksdShoWzFdLDEvMCksdShwWzFdLDEvMCldKX1pKHMsKGZ1bmN0aW9uKHQsZSl7by5saW5rKHQsZSl9KSk7dmFyIGQ9ITAsZz1uZXcgQXJyYXkoYSk7Zm9yKGw9MDtsPGE7KytsKXsodj1vLmZpbmQobCkpIT09bCYmKGQ9ITEsdFt2XT1bTWF0aC5taW4odFtsXVswXSx0W3ZdWzBdKSxNYXRoLm1pbih0W2xdWzFdLHRbdl1bMV0pXSl9aWYoZClyZXR1cm4gbnVsbDt2YXIgbT0wO2ZvcihsPTA7bDxhOysrbCl7dmFyIHY7KHY9by5maW5kKGwpKT09PWw/KGdbbF09bSx0W20rK109dFtsXSk6Z1tsXT0tMX10Lmxlbmd0aD1tO2ZvcihsPTA7bDxhOysrbClnW2xdPDAmJihnW2xdPWdbby5maW5kKGwpXSk7cmV0dXJuIGd9ZnVuY3Rpb24gZyh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9dFswXS1lWzBdfHx0WzFdLWVbMV07cmV0dXJuIHJ8fCh0WzJdPGVbMl0/LTE6dFsyXT5lWzJdPzE6MCl9ZnVuY3Rpb24gdih0LGUscil7aWYoMCE9PXQubGVuZ3RoKXtpZihlKWZvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKXt2YXIgaT1lWyhvPXRbbl0pWzBdXSxhPWVbb1sxXV07b1swXT1NYXRoLm1pbihpLGEpLG9bMV09TWF0aC5tYXgoaSxhKX1lbHNlIGZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBvO2k9KG89dFtuXSlbMF0sYT1vWzFdO29bMF09TWF0aC5taW4oaSxhKSxvWzFdPU1hdGgubWF4KGksYSl9cj90LnNvcnQobSk6dC5zb3J0KGcpO3ZhciBzPTE7Zm9yKG49MTtuPHQubGVuZ3RoOysrbil7dmFyIGw9dFtuLTFdLGM9dFtuXTsoY1swXSE9PWxbMF18fGNbMV0hPT1sWzFdfHxyJiZjWzJdIT09bFsyXSkmJih0W3MrK109Yyl9dC5sZW5ndGg9c319ZnVuY3Rpb24geSh0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciBpPWVbbl0sYT10W2lbMF1dLG89dFtpWzFdXTtyW25dPVt1KE1hdGgubWluKGFbMF0sb1swXSksLTEvMCksdShNYXRoLm1pbihhWzFdLG9bMV0pLC0xLzApLHUoTWF0aC5tYXgoYVswXSxvWzBdKSwxLzApLHUoTWF0aC5tYXgoYVsxXSxvWzFdKSwxLzApXX1yZXR1cm4gcn0odCxlKSxmPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gaShyLChmdW5jdGlvbihyLGkpe3ZhciBvPWVbcl0scz1lW2ldO2lmKG9bMF0hPT1zWzBdJiZvWzBdIT09c1sxXSYmb1sxXSE9PXNbMF0mJm9bMV0hPT1zWzFdKXt2YXIgbD10W29bMF1dLGM9dFtvWzFdXSx1PXRbc1swXV0saD10W3NbMV1dO2EobCxjLHUsaCkmJm4ucHVzaChbcixpXSl9fSkpLG59KHQsZSxuKSxnPXAodCksbT1mdW5jdGlvbih0LGUscixuKXt2YXIgbz1bXTtyZXR1cm4gaShyLG4sKGZ1bmN0aW9uKHIsbil7dmFyIGk9ZVtyXTtpZihpWzBdIT09biYmaVsxXSE9PW4pe3ZhciBzPXRbbl0sbD10W2lbMF1dLGM9dFtpWzFdXTthKGwsYyxzLHMpJiZvLnB1c2goW3Isbl0pfX0pKSxvfSh0LGUsbixnKSx5PWQodCxmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLHUsZj10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW28odFswXSksbyh0WzFdKV19KSk7Zm9yKGE9MDthPHIubGVuZ3RoOysrYSl7dmFyIHA9clthXTt1PXBbMF07dmFyIGQ9cFsxXSxnPWVbdV0sbT1lW2RdLHY9aChjKHRbZ1swXV0pLGModFtnWzFdXSksYyh0W21bMF1dKSxjKHRbbVsxXV0pKTtpZih2KXt2YXIgeT10Lmxlbmd0aDt0LnB1c2goW2wodlswXSksbCh2WzFdKV0pLGYucHVzaCh2KSxuLnB1c2goW3UseV0sW2QseV0pfX1mb3Iobi5zb3J0KChmdW5jdGlvbih0LGUpe2lmKHRbMF0hPT1lWzBdKXJldHVybiB0WzBdLWVbMF07dmFyIHI9Zlt0WzFdXSxuPWZbZVsxXV07cmV0dXJuIHMoclswXSxuWzBdKXx8cyhyWzFdLG5bMV0pfSkpLGE9bi5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIHg9ZVt1PShTPW5bYV0pWzBdXSxiPXhbMF0sXz14WzFdLHc9dFtiXSxUPXRbX107aWYoKHdbMF0tVFswXXx8d1sxXS1UWzFdKTwwKXt2YXIgaz1iO2I9XyxfPWt9eFswXT1iO3ZhciBNLEE9eFsxXT1TWzFdO2ZvcihpJiYoTT14WzJdKTthPjAmJm5bYS0xXVswXT09PXU7KXt2YXIgUyxFPShTPW5bLS1hXSlbMV07aT9lLnB1c2goW0EsRSxNXSk6ZS5wdXNoKFtBLEVdKSxBPUV9aT9lLnB1c2goW0EsXyxNXSk6ZS5wdXNoKFtBLF9dKX1yZXR1cm4gZn0odCxlLGYsbSxyKSk7cmV0dXJuIHYoZSx5LHIpLCEheXx8KGYubGVuZ3RoPjB8fG0ubGVuZ3RoPjApfX0seyIuL2xpYi9yYXQtc2VnLWludGVyc2VjdCI6MTIyLCJiaWctcmF0Ijo4MywiYmlnLXJhdC9jbXAiOjgxLCJiaWctcmF0L3RvLWZsb2F0Ijo5NSwiYm94LWludGVyc2VjdCI6MTAxLG5leHRhZnRlcjo0NzAsInJhdC12ZWMiOjUwNCwicm9idXN0LXNlZ21lbnQtaW50ZXJzZWN0Ijo1MjMsInVuaW9uLWZpbmQiOjU2OH1dLDEyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9cyhlLHQpLGg9cyhuLHIpLGY9dShhLGgpO2lmKDA9PT1vKGYpKXJldHVybiBudWxsO3ZhciBwPXModCxyKSxkPXUoaCxwKSxnPWkoZCxmKSxtPWMoYSxnKTtyZXR1cm4gbCh0LG0pfTt2YXIgbj10KCJiaWctcmF0L211bCIpLGk9dCgiYmlnLXJhdC9kaXYiKSxhPXQoImJpZy1yYXQvc3ViIiksbz10KCJiaWctcmF0L3NpZ24iKSxzPXQoInJhdC12ZWMvc3ViIiksbD10KCJyYXQtdmVjL2FkZCIpLGM9dCgicmF0LXZlYy9tdWxzIik7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBhKG4odFswXSxlWzFdKSxuKHRbMV0sZVswXSkpfX0seyJiaWctcmF0L2RpdiI6ODIsImJpZy1yYXQvbXVsIjo5MiwiYmlnLXJhdC9zaWduIjo5MywiYmlnLXJhdC9zdWIiOjk0LCJyYXQtdmVjL2FkZCI6NTAzLCJyYXQtdmVjL211bHMiOjUwNSwicmF0LXZlYy9zdWIiOjUwNn1dLDEyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjbGFtcCIpO2Z1bmN0aW9uIGkodCxlKXtudWxsPT1lJiYoZT0hMCk7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89dFszXTtyZXR1cm4gbnVsbD09byYmKG89ZT8xOjI1NSksZSYmKHIqPTI1NSxpKj0yNTUsYSo9MjU1LG8qPTI1NSksMTY3NzcyMTYqKHI9MjU1Jm4ociwwLDI1NSkpKygoaT0yNTUmbihpLDAsMjU1KSk8PDE2KSsoKGE9MjU1Jm4oYSwwLDI1NSkpPDw4KSsobz0yNTUmbihvLDAsMjU1KSl9ZS5leHBvcnRzPWksZS5leHBvcnRzLnRvPWksZS5leHBvcnRzLmZyb209ZnVuY3Rpb24odCxlKXt2YXIgcj0odD0rdCk+Pj4yNCxuPSgxNjcxMTY4MCZ0KT4+PjE2LGk9KDY1MjgwJnQpPj4+OCxhPTI1NSZ0O3JldHVybiExPT09ZT9bcixuLGksYV06W3IvMjU1LG4vMjU1LGkvMjU1LGEvMjU1XX19LHtjbGFtcDoxMjB9XSwxMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JlZW46WzAsMTI4LDBdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3XSxncmV5OlsxMjgsMTI4LDEyOF0saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTNdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19fSx7fV0sMTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLXJnYmEiKSxpPXQoImNsYW1wIiksYT10KCJkdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyJmbG9hdCIhPT1lJiZlfHwoZT0iYXJyYXkiKSwidWludCI9PT1lJiYoZT0idWludDgiKSwidWludF9jbGFtcGVkIj09PWUmJihlPSJ1aW50OF9jbGFtcGVkIik7dmFyIHI9bmV3KGEoZSkpKDQpLG89InVpbnQ4IiE9PWUmJiJ1aW50OF9jbGFtcGVkIiE9PWU7cmV0dXJuIHQubGVuZ3RoJiYic3RyaW5nIiE9dHlwZW9mIHR8fCgodD1uKHQpKVswXS89MjU1LHRbMV0vPTI1NSx0WzJdLz0yNTUpLGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHwhIShBcnJheS5pc0FycmF5KHQpJiYodFswXT4xfHwwPT09dFswXSkmJih0WzFdPjF8fDA9PT10WzFdKSYmKHRbMl0+MXx8MD09PXRbMl0pJiYoIXRbM118fHRbM10+MSkpfSh0KT8oclswXT10WzBdLHJbMV09dFsxXSxyWzJdPXRbMl0sclszXT1udWxsIT10WzNdP3RbM106MjU1LG8mJihyWzBdLz0yNTUsclsxXS89MjU1LHJbMl0vPTI1NSxyWzNdLz0yNTUpLHIpOihvPyhyWzBdPXRbMF0sclsxXT10WzFdLHJbMl09dFsyXSxyWzNdPW51bGwhPXRbM10/dFszXToxKTooclswXT1pKE1hdGguZmxvb3IoMjU1KnRbMF0pLDAsMjU1KSxyWzFdPWkoTWF0aC5mbG9vcigyNTUqdFsxXSksMCwyNTUpLHJbMl09aShNYXRoLmZsb29yKDI1NSp0WzJdKSwwLDI1NSksclszXT1udWxsPT10WzNdPzI1NTppKE1hdGguZmxvb3IoMjU1KnRbM10pLDAsMjU1KSkscil9fSx7Y2xhbXA6MTIwLCJjb2xvci1yZ2JhIjoxMjcsZHR5cGU6MTc1fV0sMTI2OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1uYW1lIiksaT10KCJpcy1wbGFpbi1vYmoiKSxhPXQoImRlZmluZWQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscyxsPVtdLGM9MTtpZigic3RyaW5nIj09dHlwZW9mIHQpaWYoblt0XSlsPW5bdF0uc2xpY2UoKSxzPSJyZ2IiO2Vsc2UgaWYoInRyYW5zcGFyZW50Ij09PXQpYz0wLHM9InJnYiIsbD1bMCwwLDBdO2Vsc2UgaWYoL14jW0EtRmEtZjAtOV0rJC8udGVzdCh0KSl7dmFyIHU9KHA9dC5zbGljZSgxKSkubGVuZ3RoO2M9MSx1PD00PyhsPVtwYXJzZUludChwWzBdK3BbMF0sMTYpLHBhcnNlSW50KHBbMV0rcFsxXSwxNikscGFyc2VJbnQocFsyXStwWzJdLDE2KV0sND09PXUmJihjPXBhcnNlSW50KHBbM10rcFszXSwxNikvMjU1KSk6KGw9W3BhcnNlSW50KHBbMF0rcFsxXSwxNikscGFyc2VJbnQocFsyXStwWzNdLDE2KSxwYXJzZUludChwWzRdK3BbNV0sMTYpXSw4PT09dSYmKGM9cGFyc2VJbnQocFs2XStwWzddLDE2KS8yNTUpKSxsWzBdfHwobFswXT0wKSxsWzFdfHwobFsxXT0wKSxsWzJdfHwobFsyXT0wKSxzPSJyZ2IifWVsc2UgaWYoZT0vXigoPzpyZ2J8aHNbbHZiXXxod2J8Y215az98eHlbenldfGdyYXl8bGFifGxjaHU/dj98W2x5XXV2fGxtcylhPylccypcKChbXlwpXSopXCkvLmV4ZWModCkpe3ZhciBoPWVbMV0sZj0icmdiIj09PWgscD1oLnJlcGxhY2UoL2EkLywiIik7cz1wO3U9ImNteWsiPT09cD80OiJncmF5Ij09PXA/MTozO2w9ZVsyXS50cmltKCkuc3BsaXQoL1xzKixccyovKS5tYXAoKGZ1bmN0aW9uKHQsZSl7aWYoLyUkLy50ZXN0KHQpKXJldHVybiBlPT09dT9wYXJzZUZsb2F0KHQpLzEwMDoicmdiIj09PXA/MjU1KnBhcnNlRmxvYXQodCkvMTAwOnBhcnNlRmxvYXQodCk7aWYoImgiPT09cFtlXSl7aWYoL2RlZyQvLnRlc3QodCkpcmV0dXJuIHBhcnNlRmxvYXQodCk7aWYodm9pZCAwIT09b1t0XSlyZXR1cm4gb1t0XX1yZXR1cm4gcGFyc2VGbG9hdCh0KX0pKSxoPT09cCYmbC5wdXNoKDEpLGM9Znx8dm9pZCAwPT09bFt1XT8xOmxbdV0sbD1sLnNsaWNlKDAsdSl9ZWxzZSB0Lmxlbmd0aD4xMCYmL1swLTldKD86XHN8XC8pLy50ZXN0KHQpJiYobD10Lm1hdGNoKC8oWzAtOV0rKS9nKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfSkpLHM9dC5tYXRjaCgvKFthLXpdKS9naSkuam9pbigiIikudG9Mb3dlckNhc2UoKSk7ZWxzZSBpZihpc05hTih0KSlpZihpKHQpKXt2YXIgZD1hKHQucix0LnJlZCx0LlIsbnVsbCk7bnVsbCE9PWQ/KHM9InJnYiIsbD1bZCxhKHQuZyx0LmdyZWVuLHQuRyksYSh0LmIsdC5ibHVlLHQuQildKToocz0iaHNsIixsPVthKHQuaCx0Lmh1ZSx0LkgpLGEodC5zLHQuc2F0dXJhdGlvbix0LlMpLGEodC5sLHQubGlnaHRuZXNzLHQuTCx0LmIsdC5icmlnaHRuZXNzKV0pLGM9YSh0LmEsdC5hbHBoYSx0Lm9wYWNpdHksMSksbnVsbCE9dC5vcGFjaXR5JiYoYy89MTAwKX1lbHNlKEFycmF5LmlzQXJyYXkodCl8fHIuQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpKSYmKGw9W3RbMF0sdFsxXSx0WzJdXSxzPSJyZ2IiLGM9ND09PXQubGVuZ3RoP3RbM106MSk7ZWxzZSBzPSJyZ2IiLGw9W3Q+Pj4xNiwoNjUyODAmdCk+Pj44LDI1NSZ0XTtyZXR1cm57c3BhY2U6cyx2YWx1ZXM6bCxhbHBoYTpjfX07dmFyIG89e3JlZDowLG9yYW5nZTo2MCx5ZWxsb3c6MTIwLGdyZWVuOjE4MCxibHVlOjI0MCxwdXJwbGU6MzAwfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJjb2xvci1uYW1lIjoxMjQsZGVmaW5lZDoxNzAsImlzLXBsYWluLW9iaiI6NDQzfV0sMTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLXBhcnNlIiksaT10KCJjb2xvci1zcGFjZS9oc2wiKSxhPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9bih0KTtyZXR1cm4gci5zcGFjZT8oKGU9QXJyYXkoMykpWzBdPWEoci52YWx1ZXNbMF0sMCwyNTUpLGVbMV09YShyLnZhbHVlc1sxXSwwLDI1NSksZVsyXT1hKHIudmFsdWVzWzJdLDAsMjU1KSwiaCI9PT1yLnNwYWNlWzBdJiYoZT1pLnJnYihlKSksZS5wdXNoKGEoci5hbHBoYSwwLDEpKSxlKTpbXX19LHtjbGFtcDoxMjAsImNvbG9yLXBhcnNlIjoxMjYsImNvbG9yLXNwYWNlL2hzbCI6MTI4fV0sMTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcmdiIik7ZS5leHBvcnRzPXtuYW1lOiJoc2wiLG1pbjpbMCwwLDBdLG1heDpbMzYwLDEwMCwxMDBdLGNoYW5uZWw6WyJodWUiLCJzYXR1cmF0aW9uIiwibGlnaHRuZXNzIl0sYWxpYXM6WyJIU0wiXSxyZ2I6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRbMF0vMzYwLHM9dFsxXS8xMDAsbD10WzJdLzEwMDtpZigwPT09cylyZXR1cm5bYT0yNTUqbCxhLGFdO2U9MipsLShyPWw8LjU/bCooMStzKTpsK3MtbCpzKSxpPVswLDAsMF07Zm9yKHZhciBjPTA7YzwzO2MrKykobj1vKzEvMyotKGMtMSkpPDA/bisrOm4+MSYmbi0tLGE9NipuPDE/ZSs2KihyLWUpKm46MipuPDE/cjozKm48Mj9lKyhyLWUpKigyLzMtbikqNjplLGlbY109MjU1KmE7cmV0dXJuIGl9fSxuLmhzbD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dFswXS8yNTUsaT10WzFdLzI1NSxhPXRbMl0vMjU1LG89TWF0aC5taW4obixpLGEpLHM9TWF0aC5tYXgobixpLGEpLGw9cy1vO3JldHVybiBzPT09bz9lPTA6bj09PXM/ZT0oaS1hKS9sOmk9PT1zP2U9MisoYS1uKS9sOmE9PT1zJiYoZT00KyhuLWkpL2wpLChlPU1hdGgubWluKDYwKmUsMzYwKSk8MCYmKGUrPTM2MCkscj0obytzKS8yLFtlLDEwMCoocz09PW8/MDpyPD0uNT9sLyhzK28pOmwvKDItcy1vKSksMTAwKnJdfX0seyIuL3JnYiI6MTI5fV0sMTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmdiIixtaW46WzAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1XSxjaGFubmVsOlsicmVkIiwiZ3JlZW4iLCJibHVlIl0sYWxpYXM6WyJSR0IiXX19LHt9XSwxMzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2pldDpbe2luZGV4OjAscmdiOlswLDAsMTMxXX0se2luZGV4Oi4xMjUscmdiOlswLDYwLDE3MF19LHtpbmRleDouMzc1LHJnYjpbNSwyNTUsMjU1XX0se2luZGV4Oi42MjUscmdiOlsyNTUsMjU1LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1MCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzEyOCwwLDBdfV0saHN2Olt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6LjE2OSxyZ2I6WzI1MywyNTUsMl19LHtpbmRleDouMTczLHJnYjpbMjQ3LDI1NSwyXX0se2luZGV4Oi4zMzcscmdiOlswLDI1Miw0XX0se2luZGV4Oi4zNDEscmdiOlswLDI1MiwxMF19LHtpbmRleDouNTA2LHJnYjpbMSwyNDksMjU1XX0se2luZGV4Oi42NzEscmdiOlsyLDAsMjUzXX0se2luZGV4Oi42NzUscmdiOls4LDAsMjUzXX0se2luZGV4Oi44MzkscmdiOlsyNTUsMCwyNTFdfSx7aW5kZXg6Ljg0MyxyZ2I6WzI1NSwwLDI0NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsNl19XSxob3Q6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjMscmdiOlsyMzAsMCwwXX0se2luZGV4Oi42LHJnYjpbMjU1LDIxMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzAsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMjU1XX1dLHNwcmluZzpbe2luZGV4OjAscmdiOlsyNTUsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSxzdW1tZXI6W3tpbmRleDowLHJnYjpbMCwxMjgsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDEwMl19XSxhdXR1bW46W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHdpbnRlcjpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlswLDI1NSwxMjhdfV0sYm9uZTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMzc2LHJnYjpbODQsODQsMTE2XX0se2luZGV4Oi43NTMscmdiOlsxNjksMjAwLDIwMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29wcGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi44MDQscmdiOlsyNTUsMTYwLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDE5OSwxMjddfV0sZ3JleXM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLHlpZ25idTpbe2luZGV4OjAscmdiOls4LDI5LDg4XX0se2luZGV4Oi4xMjUscmdiOlszNyw1MiwxNDhdfSx7aW5kZXg6LjI1LHJnYjpbMzQsOTQsMTY4XX0se2luZGV4Oi4zNzUscmdiOlsyOSwxNDUsMTkyXX0se2luZGV4Oi41LHJnYjpbNjUsMTgyLDE5Nl19LHtpbmRleDouNjI1LHJnYjpbMTI3LDIwNSwxODddfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxODBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIzNywyNDgsMjE3XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIxN119XSxncmVlbnM6W3tpbmRleDowLHJnYjpbMCw2OCwyN119LHtpbmRleDouMTI1LHJnYjpbMCwxMDksNDRdfSx7aW5kZXg6LjI1LHJnYjpbMzUsMTM5LDY5XX0se2luZGV4Oi4zNzUscmdiOls2NSwxNzEsOTNdfSx7aW5kZXg6LjUscmdiOlsxMTYsMTk2LDExOF19LHtpbmRleDouNjI1LHJnYjpbMTYxLDIxNywxNTVdfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxOTJdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIyOSwyNDUsMjI0XX0se2luZGV4OjEscmdiOlsyNDcsMjUyLDI0NV19XSx5aW9ycmQ6W3tpbmRleDowLHJnYjpbMTI4LDAsMzhdfSx7aW5kZXg6LjEyNSxyZ2I6WzE4OSwwLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzIyNywyNiwyOF19LHtpbmRleDouMzc1LHJnYjpbMjUyLDc4LDQyXX0se2luZGV4Oi41LHJnYjpbMjUzLDE0MSw2MF19LHtpbmRleDouNjI1LHJnYjpbMjU0LDE3OCw3Nl19LHtpbmRleDouNzUscmdiOlsyNTQsMjE3LDExOF19LHtpbmRleDouODc1LHJnYjpbMjU1LDIzNywxNjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjA0XX1dLGJsdWVyZWQ6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyZGJ1Olt7aW5kZXg6MCxyZ2I6WzUsMTAsMTcyXX0se2luZGV4Oi4zNSxyZ2I6WzEwNiwxMzcsMjQ3XX0se2luZGV4Oi41LHJnYjpbMTkwLDE5MCwxOTBdfSx7aW5kZXg6LjYscmdiOlsyMjAsMTcwLDEzMl19LHtpbmRleDouNyxyZ2I6WzIzMCwxNDUsOTBdfSx7aW5kZXg6MSxyZ2I6WzE3OCwxMCwyOF19XSxwaWNuaWM6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDouMSxyZ2I6WzUxLDE1MywyNTVdfSx7aW5kZXg6LjIscmdiOlsxMDIsMjA0LDI1NV19LHtpbmRleDouMyxyZ2I6WzE1MywyMDQsMjU1XX0se2luZGV4Oi40LHJnYjpbMjA0LDIwNCwyNTVdfSx7aW5kZXg6LjUscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDouNixyZ2I6WzI1NSwyMDQsMjU1XX0se2luZGV4Oi43LHJnYjpbMjU1LDE1MywyNTVdfSx7aW5kZXg6LjgscmdiOlsyNTUsMTAyLDIwNF19LHtpbmRleDouOSxyZ2I6WzI1NSwxMDIsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJhaW5ib3c6W3tpbmRleDowLHJnYjpbMTUwLDAsOTBdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMCwyMDBdfSx7aW5kZXg6LjI1LHJnYjpbMCwyNSwyNTVdfSx7aW5kZXg6LjM3NSxyZ2I6WzAsMTUyLDI1NV19LHtpbmRleDouNSxyZ2I6WzQ0LDI1NSwxNTBdfSx7aW5kZXg6LjYyNSxyZ2I6WzE1MSwyNTUsMF19LHtpbmRleDouNzUscmdiOlsyNTUsMjM0LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwxMTEsMF19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxwb3J0bGFuZDpbe2luZGV4OjAscmdiOlsxMiw1MSwxMzFdfSx7aW5kZXg6LjI1LHJnYjpbMTAsMTM2LDE4Nl19LHtpbmRleDouNSxyZ2I6WzI0MiwyMTEsNTZdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0Myw1Nl19LHtpbmRleDoxLHJnYjpbMjE3LDMwLDMwXX1dLGJsYWNrYm9keTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMixyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjEwLDBdfSx7aW5kZXg6LjcscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMTYwLDIwMCwyNTVdfV0sZWFydGg6W3tpbmRleDowLHJnYjpbMCwwLDEzMF19LHtpbmRleDouMSxyZ2I6WzAsMTgwLDE4MF19LHtpbmRleDouMixyZ2I6WzQwLDIxMCw0MF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMzAsNTBdfSx7aW5kZXg6LjYscmdiOlsxMjAsNzAsMjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGVsZWN0cmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4xNSxyZ2I6WzMwLDAsMTAwXX0se2luZGV4Oi40LHJnYjpbMTIwLDAsMTAwXX0se2luZGV4Oi42LHJnYjpbMTYwLDkwLDBdfSx7aW5kZXg6LjgscmdiOlsyMzAsMjAwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTAsMjIwXX1dLGFscGhhOlt7aW5kZXg6MCxyZ2I6WzI1NSwyNTUsMjU1LDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1LDFdfV0sdmlyaWRpczpbe2luZGV4OjAscmdiOls2OCwxLDg0XX0se2luZGV4Oi4xMyxyZ2I6WzcxLDQ0LDEyMl19LHtpbmRleDouMjUscmdiOls1OSw4MSwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNDQsMTEzLDE0Ml19LHtpbmRleDouNSxyZ2I6WzMzLDE0NCwxNDFdfSx7aW5kZXg6LjYzLHJnYjpbMzksMTczLDEyOV19LHtpbmRleDouNzUscmdiOls5MiwyMDAsOTldfSx7aW5kZXg6Ljg4LHJnYjpbMTcwLDIyMCw1MF19LHtpbmRleDoxLHJnYjpbMjUzLDIzMSwzN119XSxpbmZlcm5vOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzMxLDEyLDcyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDE1LDEwOV19LHtpbmRleDouMzgscmdiOlsxMzYsMzQsMTA2XX0se2luZGV4Oi41LHJnYjpbMTg2LDU0LDg1XX0se2luZGV4Oi42MyxyZ2I6WzIyNyw4OSw1MV19LHtpbmRleDouNzUscmdiOlsyNDksMTQwLDEwXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwyMDEsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTUsMTY0XX1dLG1hZ21hOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzI4LDE2LDY4XX0se2luZGV4Oi4yNSxyZ2I6Wzc5LDE4LDEyM119LHtpbmRleDouMzgscmdiOlsxMjksMzcsMTI5XX0se2luZGV4Oi41LHJnYjpbMTgxLDU0LDEyMl19LHtpbmRleDouNjMscmdiOlsyMjksODAsMTAwXX0se2luZGV4Oi43NSxyZ2I6WzI1MSwxMzUsOTddfSx7aW5kZXg6Ljg4LHJnYjpbMjU0LDE5NCwxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTMsMTkxXX1dLHBsYXNtYTpbe2luZGV4OjAscmdiOlsxMyw4LDEzNV19LHtpbmRleDouMTMscmdiOls3NSwzLDE2MV19LHtpbmRleDouMjUscmdiOlsxMjUsMywxNjhdfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDM0LDE1MF19LHtpbmRleDouNSxyZ2I6WzIwMyw3MCwxMjFdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDEwNyw5M119LHtpbmRleDouNzUscmdiOlsyNDgsMTQ4LDY1XX0se2luZGV4Oi44OCxyZ2I6WzI1MywxOTUsNDBdfSx7aW5kZXg6MSxyZ2I6WzI0MCwyNDksMzNdfV0sd2FybTpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTcyLDAsMTg3XX0se2luZGV4Oi4yNSxyZ2I6WzIxOSwwLDE3MF19LHtpbmRleDouMzgscmdiOlsyNTUsMCwxMzBdfSx7aW5kZXg6LjUscmdiOlsyNTUsNjMsNzRdfSx7aW5kZXg6LjYzLHJnYjpbMjU1LDEyMywwXX0se2luZGV4Oi43NSxyZ2I6WzIzNCwxNzYsMF19LHtpbmRleDouODgscmdiOlsxOTAsMjI4LDBdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxMTYsMCwyMThdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNzQsMjM3XX0se2luZGV4Oi4zOCxyZ2I6WzY4LDE0NiwyMzFdfSx7aW5kZXg6LjUscmdiOlswLDIwNCwxOTddfSx7aW5kZXg6LjYzLHJnYjpbMCwyNDcsMTQ2XX0se2luZGV4Oi43NSxyZ2I6WzAsMjU1LDg4XX0se2luZGV4Oi44OCxyZ2I6WzQwLDI1NSw4XX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sInJhaW5ib3ctc29mdCI6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xLHJnYjpbMTk5LDAsMTgwXX0se2luZGV4Oi4yLHJnYjpbMjU1LDAsMTIxXX0se2luZGV4Oi4zLHJnYjpbMjU1LDEwOCwwXX0se2luZGV4Oi40LHJnYjpbMjIyLDE5NCwwXX0se2luZGV4Oi41LHJnYjpbMTUwLDI1NSwwXX0se2luZGV4Oi42LHJnYjpbMCwyNTUsNTVdfSx7aW5kZXg6LjcscmdiOlswLDI0NiwxNTBdfSx7aW5kZXg6LjgscmdiOls1MCwxNjcsMjIyXX0se2luZGV4Oi45LHJnYjpbMTAzLDUxLDIzNV19LHtpbmRleDoxLHJnYjpbMTI0LDAsMTg2XX1dLGJhdGh5bWV0cnk6W3tpbmRleDowLHJnYjpbNDAsMjYsNDRdfSx7aW5kZXg6LjEzLHJnYjpbNTksNDksOTBdfSx7aW5kZXg6LjI1LHJnYjpbNjQsNzYsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzYzLDExMCwxNTFdfSx7aW5kZXg6LjUscmdiOls3MiwxNDIsMTU4XX0se2luZGV4Oi42MyxyZ2I6Wzg1LDE3NCwxNjNdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwNiwxNjNdfSx7aW5kZXg6Ljg4LHJnYjpbMTg3LDIzMCwxNzJdfSx7aW5kZXg6MSxyZ2I6WzI1MywyNTQsMjA0XX1dLGNkb206W3tpbmRleDowLHJnYjpbNDcsMTUsNjJdfSx7aW5kZXg6LjEzLHJnYjpbODcsMjMsODZdfSx7aW5kZXg6LjI1LHJnYjpbMTMwLDI4LDk5XX0se2luZGV4Oi4zOCxyZ2I6WzE3MSw0MSw5Nl19LHtpbmRleDouNSxyZ2I6WzIwNiw2Nyw4Nl19LHtpbmRleDouNjMscmdiOlsyMzAsMTA2LDg0XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDksMTAzXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTMsMTM1XX0se2luZGV4OjEscmdiOlsyNTQsMjM3LDE3Nl19XSxjaGxvcm9waHlsbDpbe2luZGV4OjAscmdiOlsxOCwzNiwyMF19LHtpbmRleDouMTMscmdiOlsyNSw2Myw0MV19LHtpbmRleDouMjUscmdiOlsyNCw5MSw1OV19LHtpbmRleDouMzgscmdiOlsxMywxMTksNzJdfSx7aW5kZXg6LjUscmdiOlsxOCwxNDgsODBdfSx7aW5kZXg6LjYzLHJnYjpbODAsMTczLDg5XX0se2luZGV4Oi43NSxyZ2I6WzEzMiwxOTYsMTIyXX0se2luZGV4Oi44OCxyZ2I6WzE3NSwyMjEsMTYyXX0se2luZGV4OjEscmdiOlsyMTUsMjQ5LDIwOF19XSxkZW5zaXR5Olt7aW5kZXg6MCxyZ2I6WzU0LDE0LDM2XX0se2luZGV4Oi4xMyxyZ2I6Wzg5LDIzLDgwXX0se2luZGV4Oi4yNSxyZ2I6WzExMCw0NSwxMzJdfSx7aW5kZXg6LjM4LHJnYjpbMTIwLDc3LDE3OF19LHtpbmRleDouNSxyZ2I6WzEyMCwxMTMsMjEzXX0se2luZGV4Oi42MyxyZ2I6WzExNSwxNTEsMjI4XX0se2luZGV4Oi43NSxyZ2I6WzEzNCwxODUsMjI3XX0se2luZGV4Oi44OCxyZ2I6WzE3NywyMTQsMjI3XX0se2luZGV4OjEscmdiOlsyMzAsMjQxLDI0MV19XSwiZnJlZXN1cmZhY2UtYmx1ZSI6W3tpbmRleDowLHJnYjpbMzAsNCwxMTBdfSx7aW5kZXg6LjEzLHJnYjpbNDcsMTQsMTc2XX0se2luZGV4Oi4yNSxyZ2I6WzQxLDQ1LDIzNl19LHtpbmRleDouMzgscmdiOlsyNSw5OSwyMTJdfSx7aW5kZXg6LjUscmdiOls2OCwxMzEsMjAwXX0se2luZGV4Oi42MyxyZ2I6WzExNCwxNTYsMTk3XX0se2luZGV4Oi43NSxyZ2I6WzE1NywxODEsMjAzXX0se2luZGV4Oi44OCxyZ2I6WzIwMCwyMDgsMjE2XX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSwiZnJlZXN1cmZhY2UtcmVkIjpbe2luZGV4OjAscmdiOls2MCw5LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzEwMCwxNywyN119LHtpbmRleDouMjUscmdiOlsxNDIsMjAsMjldfSx7aW5kZXg6LjM4LHJnYjpbMTc3LDQzLDI3XX0se2luZGV4Oi41LHJnYjpbMTkyLDg3LDYzXX0se2luZGV4Oi42MyxyZ2I6WzIwNSwxMjUsMTA1XX0se2luZGV4Oi43NSxyZ2I6WzIxNiwxNjIsMTQ4XX0se2luZGV4Oi44OCxyZ2I6WzIyNywxOTksMTkzXX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSxveHlnZW46W3tpbmRleDowLHJnYjpbNjQsNSw1XX0se2luZGV4Oi4xMyxyZ2I6WzEwNiw2LDE1XX0se2luZGV4Oi4yNSxyZ2I6WzE0NCwyNiw3XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCw2NCwzXX0se2luZGV4Oi41LHJnYjpbMTg4LDEwMCw0XX0se2luZGV4Oi42MyxyZ2I6WzIwNiwxMzYsMTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjIwLDE3NCwyNV19LHtpbmRleDouODgscmdiOlsyMzEsMjE1LDQ0XX0se2luZGV4OjEscmdiOlsyNDgsMjU0LDEwNV19XSxwYXI6W3tpbmRleDowLHJnYjpbNTEsMjAsMjRdfSx7aW5kZXg6LjEzLHJnYjpbOTAsMzIsMzVdfSx7aW5kZXg6LjI1LHJnYjpbMTI5LDQ0LDM0XX0se2luZGV4Oi4zOCxyZ2I6WzE1OSw2OCwyNV19LHtpbmRleDouNSxyZ2I6WzE4Miw5OSwxOV19LHtpbmRleDouNjMscmdiOlsxOTksMTM0LDIyXX0se2luZGV4Oi43NSxyZ2I6WzIxMiwxNzEsMzVdfSx7aW5kZXg6Ljg4LHJnYjpbMjIxLDIxMCw1NF19LHtpbmRleDoxLHJnYjpbMjI1LDI1Myw3NV19XSxwaGFzZTpbe2luZGV4OjAscmdiOlsxNDUsMTA1LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzE4NCw3MSwzOF19LHtpbmRleDouMjUscmdiOlsxODYsNTgsMTE1XX0se2luZGV4Oi4zOCxyZ2I6WzE2MCw3MSwxODVdfSx7aW5kZXg6LjUscmdiOlsxMTAsOTcsMjE4XX0se2luZGV4Oi42MyxyZ2I6WzUwLDEyMywxNjRdfSx7aW5kZXg6Ljc1LHJnYjpbMzEsMTMxLDExMF19LHtpbmRleDouODgscmdiOls3NywxMjksMzRdfSx7aW5kZXg6MSxyZ2I6WzE0NSwxMDUsMThdfV0sc2FsaW5pdHk6W3tpbmRleDowLHJnYjpbNDIsMjQsMTA4XX0se2luZGV4Oi4xMyxyZ2I6WzMzLDUwLDE2Ml19LHtpbmRleDouMjUscmdiOlsxNSw5MCwxNDVdfSx7aW5kZXg6LjM4LHJnYjpbNDAsMTE4LDEzN119LHtpbmRleDouNSxyZ2I6WzU5LDE0NiwxMzVdfSx7aW5kZXg6LjYzLHJnYjpbNzksMTc1LDEyNl19LHtpbmRleDouNzUscmdiOlsxMjAsMjAzLDEwNF19LHtpbmRleDouODgscmdiOlsxOTMsMjIxLDEwMF19LHtpbmRleDoxLHJnYjpbMjUzLDIzOSwxNTRdfV0sdGVtcGVyYXR1cmU6W3tpbmRleDowLHJnYjpbNCwzNSw1MV19LHtpbmRleDouMTMscmdiOlsyMyw1MSwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbODUsNTksMTU3XX0se2luZGV4Oi4zOCxyZ2I6WzEyOSw3OSwxNDNdfSx7aW5kZXg6LjUscmdiOlsxNzUsOTUsMTMwXX0se2luZGV4Oi42MyxyZ2I6WzIyMiwxMTIsMTAxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDYsNjZdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5Niw2NV19LHtpbmRleDoxLHJnYjpbMjMyLDI1MCw5MV19XSx0dXJiaWRpdHk6W3tpbmRleDowLHJnYjpbMzQsMzEsMjddfSx7aW5kZXg6LjEzLHJnYjpbNjUsNTAsNDFdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNjksNTJdfSx7aW5kZXg6LjM4LHJnYjpbMTMxLDg5LDU3XX0se2luZGV4Oi41LHJnYjpbMTYxLDExMiw1OV19LHtpbmRleDouNjMscmdiOlsxODUsMTQwLDY2XX0se2luZGV4Oi43NSxyZ2I6WzIwMiwxNzQsODhdfSx7aW5kZXg6Ljg4LHJnYjpbMjE2LDIwOSwxMjZdfSx7aW5kZXg6MSxyZ2I6WzIzMywyNDYsMTcxXX1dLCJ2ZWxvY2l0eS1ibHVlIjpbe2luZGV4OjAscmdiOlsxNywzMiw2NF19LHtpbmRleDouMTMscmdiOlszNSw1MiwxMTZdfSx7aW5kZXg6LjI1LHJnYjpbMjksODEsMTU2XX0se2luZGV4Oi4zOCxyZ2I6WzMxLDExMywxNjJdfSx7aW5kZXg6LjUscmdiOls1MCwxNDQsMTY5XX0se2luZGV4Oi42MyxyZ2I6Wzg3LDE3MywxNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMTQ5LDE5NiwxODldfSx7aW5kZXg6Ljg4LHJnYjpbMjAzLDIyMSwyMTFdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyNTEsMjMwXX1dLCJ2ZWxvY2l0eS1ncmVlbiI6W3tpbmRleDowLHJnYjpbMjMsMzUsMTldfSx7aW5kZXg6LjEzLHJnYjpbMjQsNjQsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTEsOTUsNDVdfSx7aW5kZXg6LjM4LHJnYjpbMzksMTIzLDM1XX0se2luZGV4Oi41LHJnYjpbOTUsMTQ2LDEyXX0se2luZGV4Oi42MyxyZ2I6WzE1MiwxNjUsMThdfSx7aW5kZXg6Ljc1LHJnYjpbMjAxLDE4Niw2OV19LHtpbmRleDouODgscmdiOlsyMzMsMjE2LDEzN119LHtpbmRleDoxLHJnYjpbMjU1LDI1MywyMDVdfV0sY3ViZWhlbGl4Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4wNyxyZ2I6WzIyLDUsNTldfSx7aW5kZXg6LjEzLHJnYjpbNjAsNCwxMDVdfSx7aW5kZXg6LjIscmdiOlsxMDksMSwxMzVdfSx7aW5kZXg6LjI3LHJnYjpbMTYxLDAsMTQ3XX0se2luZGV4Oi4zMyxyZ2I6WzIxMCwyLDE0Ml19LHtpbmRleDouNCxyZ2I6WzI1MSwxMSwxMjNdfSx7aW5kZXg6LjQ3LHJnYjpbMjU1LDI5LDk3XX0se2luZGV4Oi41MyxyZ2I6WzI1NSw1NCw2OV19LHtpbmRleDouNixyZ2I6WzI1NSw4NSw0Nl19LHtpbmRleDouNjcscmdiOlsyNTUsMTIwLDM0XX0se2luZGV4Oi43MyxyZ2I6WzI1NSwxNTcsMzddfSx7aW5kZXg6LjgscmdiOlsyNDEsMTkxLDU3XX0se2luZGV4Oi44NyxyZ2I6WzIyNCwyMjAsOTNdfSx7aW5kZXg6LjkzLHJnYjpbMjE4LDI0MSwxNDJdfSx7aW5kZXg6MSxyZ2I6WzIyNywyNTMsMTk4XX1dfX0se31dLDEzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbG9yU2NhbGUiKSxpPXQoImxlcnAiKTtmdW5jdGlvbiBhKHQpe3JldHVyblt0WzBdLzI1NSx0WzFdLzI1NSx0WzJdLzI1NSx0WzNdXX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZSxyPSIjIixuPTA7bjwzOysrbilyKz0oIjAwIisoZT0oZT10W25dKS50b1N0cmluZygxNikpKS5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiByfWZ1bmN0aW9uIHModCl7cmV0dXJuInJnYmEoIit0LmpvaW4oIiwiKSsiKSJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHUsaCxmLHAsZCxnO3R8fCh0PXt9KTtwPSh0Lm5zaGFkZXN8fDcyKS0xLGY9dC5mb3JtYXR8fCJoZXgiLChoPXQuY29sb3JtYXApfHwoaD0iamV0Iik7aWYoInN0cmluZyI9PXR5cGVvZiBoKXtpZihoPWgudG9Mb3dlckNhc2UoKSwhbltoXSl0aHJvdyBFcnJvcihoKyIgbm90IGEgc3VwcG9ydGVkIGNvbG9yc2NhbGUiKTt1PW5baF19ZWxzZXtpZighQXJyYXkuaXNBcnJheShoKSl0aHJvdyBFcnJvcigidW5zdXBwb3J0ZWQgY29sb3JtYXAgb3B0aW9uIixoKTt1PWguc2xpY2UoKX1pZih1Lmxlbmd0aD5wKzEpdGhyb3cgbmV3IEVycm9yKGgrIiBtYXAgcmVxdWlyZXMgbnNoYWRlcyB0byBiZSBhdCBsZWFzdCBzaXplICIrdS5sZW5ndGgpO2Q9QXJyYXkuaXNBcnJheSh0LmFscGhhKT8yIT09dC5hbHBoYS5sZW5ndGg/WzEsMV06dC5hbHBoYS5zbGljZSgpOiJudW1iZXIiPT10eXBlb2YgdC5hbHBoYT9bdC5hbHBoYSx0LmFscGhhXTpbMSwxXTtlPXUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LmluZGV4KnApfSkpLGRbMF09TWF0aC5taW4oTWF0aC5tYXgoZFswXSwwKSwxKSxkWzFdPU1hdGgubWluKE1hdGgubWF4KGRbMV0sMCksMSk7dmFyIG09dS5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dVtlXS5pbmRleCxuPXVbZV0ucmdiLnNsaWNlKCk7cmV0dXJuIDQ9PT1uLmxlbmd0aCYmblszXT49MCYmblszXTw9MXx8KG5bM109ZFswXSsoZFsxXS1kWzBdKSpyKSxufSkpLHY9W107Zm9yKGc9MDtnPGUubGVuZ3RoLTE7KytnKXtjPWVbZysxXS1lW2ddLHI9bVtnXSxsPW1bZysxXTtmb3IodmFyIHk9MDt5PGM7eSsrKXt2YXIgeD15L2M7di5wdXNoKFtNYXRoLnJvdW5kKGkoclswXSxsWzBdLHgpKSxNYXRoLnJvdW5kKGkoclsxXSxsWzFdLHgpKSxNYXRoLnJvdW5kKGkoclsyXSxsWzJdLHgpKSxpKHJbM10sbFszXSx4KV0pfX12LnB1c2godVt1Lmxlbmd0aC0xXS5yZ2IuY29uY2F0KGRbMV0pKSwiaGV4Ij09PWY/dj12Lm1hcChvKToicmdiYVN0cmluZyI9PT1mP3Y9di5tYXAocyk6ImZsb2F0Ij09PWYmJih2PXYubWFwKGEpKTtyZXR1cm4gdn19LHsiLi9jb2xvclNjYWxlIjoxMzAsbGVycDo0NDZ9XSwxMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4oZSxyLGEpO2lmKDA9PT1vKXt2YXIgcz1pKG4odCxlLHIpKSxjPWkobih0LGUsYSkpO2lmKHM9PT1jKXtpZigwPT09cyl7dmFyIHU9bCh0LGUsciksaD1sKHQsZSxhKTtyZXR1cm4gdT09PWg/MDp1PzE6LTF9cmV0dXJuIDB9cmV0dXJuIDA9PT1jP3M+MHx8bCh0LGUsYSk/LTE6MTowPT09cz9jPjB8fGwodCxlLHIpPzE6LTE6aShjLXMpfXZhciBmPW4odCxlLHIpO3JldHVybiBmPjA/bz4wJiZuKHQsZSxhKT4wPzE6LTE6ZjwwP28+MHx8bih0LGUsYSk+MD8xOi0xOm4odCxlLGEpPjB8fGwodCxlLHIpPzE6LTF9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGk9dCgic2lnbnVtIiksYT10KCJ0d28tc3VtIiksbz10KCJyb2J1c3QtcHJvZHVjdCIpLHM9dCgicm9idXN0LXN1bSIpO2Z1bmN0aW9uIGwodCxlLHIpe3ZhciBuPWEodFswXSwtZVswXSksaT1hKHRbMV0sLWVbMV0pLGw9YShyWzBdLC1lWzBdKSxjPWEoclsxXSwtZVsxXSksdT1zKG8obixsKSxvKGksYykpO3JldHVybiB1W3UubGVuZ3RoLTFdPj0wfX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUyMCwicm9idXN0LXByb2R1Y3QiOjUyMSwicm9idXN0LXN1bSI6NTI1LHNpZ251bTo1MjYsInR3by1zdW0iOjU1NX1dLDEzMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLGE9dC5sZW5ndGgtZS5sZW5ndGg7aWYoYSlyZXR1cm4gYTtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiAwO2Nhc2UgMTpyZXR1cm4gdFswXS1lWzBdO2Nhc2UgMjpyZXR1cm4gdFswXSt0WzFdLWVbMF0tZVsxXXx8bih0WzBdLHRbMV0pLW4oZVswXSxlWzFdKTtjYXNlIDM6dmFyIG89dFswXSt0WzFdLHM9ZVswXStlWzFdO2lmKGE9byt0WzJdLShzK2VbMl0pKXJldHVybiBhO3ZhciBsPW4odFswXSx0WzFdKSxjPW4oZVswXSxlWzFdKTtyZXR1cm4gbihsLHRbMl0pLW4oYyxlWzJdKXx8bihsK3RbMl0sbyktbihjK2VbMl0scyk7Y2FzZSA0OnZhciB1PXRbMF0saD10WzFdLGY9dFsyXSxwPXRbM10sZD1lWzBdLGc9ZVsxXSxtPWVbMl0sdj1lWzNdO3JldHVybiB1K2grZitwLShkK2crbSt2KXx8bih1LGgsZixwKS1uKGQsZyxtLHYsZCl8fG4odStoLHUrZix1K3AsaCtmLGgrcCxmK3ApLW4oZCtnLGQrbSxkK3YsZyttLGcrdixtK3YpfHxuKHUraCtmLHUraCtwLHUrZitwLGgrZitwKS1uKGQrZyttLGQrZyt2LGQrbSt2LGcrbSt2KTtkZWZhdWx0OmZvcih2YXIgeT10LnNsaWNlKCkuc29ydChpKSx4PWUuc2xpY2UoKS5zb3J0KGkpLGI9MDtiPHI7KytiKWlmKGE9eVtiXS14W2JdKXJldHVybiBhO3JldHVybiAwfX07dmFyIG49TWF0aC5taW47ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0LWV9fSx7fV0sMTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbXBhcmUtY2VsbCIpLGk9dCgiY2VsbC1vcmllbnRhdGlvbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQsZSl8fGkodCktaShlKX19LHsiY2VsbC1vcmllbnRhdGlvbiI6MTE3LCJjb21wYXJlLWNlbGwiOjEzM31dLDEzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9jaDFkIiksaT10KCIuL2xpYi9jaDJkIiksYT10KCIuL2xpYi9jaG5kIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO2lmKDE9PT1lKXJldHVybltbMF1dO3ZhciByPXRbMF0ubGVuZ3RoO2lmKDA9PT1yKXJldHVybltdO2lmKDE9PT1yKXJldHVybiBuKHQpO2lmKDI9PT1yKXJldHVybiBpKHQpO3JldHVybiBhKHQscil9fSx7Ii4vbGliL2NoMWQiOjEzNiwiLi9saWIvY2gyZCI6MTM3LCIuL2xpYi9jaG5kIjoxMzh9XSwxMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTE7bjx0Lmxlbmd0aDsrK24pdFtuXVswXTx0W2VdWzBdJiYoZT1uKSx0W25dWzBdPnRbcl1bMF0mJihyPW4pO3JldHVybiBlPHI/W1tlXSxbcl1dOmU+cj9bW3JdLFtlXV06W1tlXV19fSx7fV0sMTM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uKHQpLHI9ZS5sZW5ndGg7aWYocjw9MilyZXR1cm5bXTtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9ZVtyLTFdLG89MDtvPHI7KytvKXt2YXIgcz1lW29dO2lbb109W2Esc10sYT1zfXJldHVybiBpfTt2YXIgbj10KCJtb25vdG9uZS1jb252ZXgtaHVsbC0yZCIpfSx7Im1vbm90b25lLWNvbnZleC1odWxsLTJkIjo0NTZ9XSwxMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiBuKHQsITApfWNhdGNoKG8pe3ZhciByPWkodCk7aWYoci5sZW5ndGg8PWUpcmV0dXJuW107dmFyIGE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8ZS5sZW5ndGg7KytpKW5baV09dFtlW2ldXTt2YXIgYT1lLmxlbmd0aDtmb3IoaT0wO2k8cjsrK2kpZS5pbmRleE9mKGkpPDAmJihuW2ErK109dFtpXSk7cmV0dXJuIG59KHQscik7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wO2k8cjsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288YS5sZW5ndGg7KytvKXt2YXIgcz1hW29dO2lmKHM8bilhW29dPWVbc107ZWxzZXtzLT1uO2Zvcih2YXIgbD0wO2w8bjsrK2wpcz49ZVtsXSYmKHMrPTEpO2Fbb109c319cmV0dXJuIHR9KG4oYSwhMCkscil9fTt2YXIgbj10KCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCIpLGk9dCgiYWZmaW5lLWh1bGwiKX0seyJhZmZpbmUtaHVsbCI6NjcsImluY3JlbWVudGFsLWNvbnZleC1odWxsIjo0MzN9XSwxMzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0FGRzoiYWZnaGFuIixBTEE6IlxcYlxcd2xhbmQiLEFMQjoiYWxiYW5pYSIsRFpBOiJhbGdlcmlhIixBU006Il4oPz0uKmFtZXJpYykuKnNhbW9hIixBTkQ6ImFuZG9ycmEiLEFHTzoiYW5nb2xhIixBSUE6ImFuZ3VpbGw/YSIsQVRBOiJhbnRhcmN0aWNhIixBVEc6ImFudGlndWEiLEFSRzoiYXJnZW50aW4iLEFSTToiYXJtZW5pYSIsQUJXOiJeKD8hLipib25haXJlKS4qXFxiYXJ1YmEiLEFVUzoiYXVzdHJhbGlhIixBVVQ6Il4oPyEuKmh1bmdhcnkpLiphdXN0cmlhfFxcYmF1c3RyaS4qXFxiZW1wIixBWkU6ImF6ZXJiYWlqYW4iLEJIUzoiYmFoYW1hcyIsQkhSOiJiYWhyYWluIixCR0Q6ImJhbmdsYWRlc2h8Xig/PS4qZWFzdCkuKnBha2k/c3RhbiIsQlJCOiJiYXJiYWRvcyIsQkxSOiJiZWxhcnVzfGJ5ZWxvIixCRUw6Il4oPyEuKmx1eGVtKS4qYmVsZ2l1bSIsQkxaOiJiZWxpemV8Xig/PS4qYnJpdGlzaCkuKmhvbmR1cmFzIixCRU46ImJlbmlufGRhaG9tZSIsQk1VOiJiZXJtdWRhIixCVE46ImJodXRhbiIsQk9MOiJib2xpdmlhIixCRVM6Il4oPz0uKmJvbmFpcmUpLipldXN0YXRpdXN8Xig/PS4qY2FyaWIpLipuZXRoZXJsYW5kc3xcXGJiZXMuP2lzbGFuZHMiLEJJSDoiaGVyemVnb3ZpbmF8Ym9zbmlhIixCV0E6ImJvdHN3YW5hfGJlY2h1YW5hIixCVlQ6ImJvdXZldCIsQlJBOiJicmF6aWwiLElPVDoiYnJpdGlzaC4/aW5kaWFuLj9vY2VhbiIsQlJOOiJicnVuZWkiLEJHUjoiYnVsZ2FyaWEiLEJGQToiYnVya2luYXxcXGJmYXNvfHVwcGVyLj92b2x0YSIsQkRJOiJidXJ1bmRpIixDUFY6InZlcmRlIixLSE06ImNhbWJvZGlhfGthbXB1Y2hlYXxraG1lciIsQ01SOiJjYW1lcm9vbiIsQ0FOOiJjYW5hZGEiLENZTToiY2F5bWFuIixDQUY6IlxcYmNlbnRyYWwuYWZyaWNhbi5yZXB1YmxpYyIsVENEOiJcXGJjaGFkIixDSEw6IlxcYmNoaWxlIixDSE46Il4oPyEuKlxcYm1hYykoPyEuKlxcYmhvbmcpKD8hLipcXGJ0YWkpKD8hLipcXGJyZXApLipjaGluYXxeKD89LipwZW8pKD89LipyZXApLipjaGluYSIsQ1hSOiJjaHJpc3RtYXMiLENDSzoiXFxiY29jb3N8a2VlbGluZyIsQ09MOiJjb2xvbWJpYSIsQ09NOiJjb21vcm8iLENPRzoiXig/IS4qXFxiZGVtKSg/IS4qXFxiZFtcXC5dP3IpKD8hLipraW5zaGFzYSkoPyEuKnphaXJlKSg/IS4qYmVsZykoPyEuKmwub3BvbGR2aWxsZSkoPyEuKmZyZWUpLipcXGJjb25nbyIsQ09LOiJcXGJjb29rIixDUkk6ImNvc3RhLj9yaWNhIixDSVY6Iml2b2lyZXxpdm9yeSIsSFJWOiJjcm9hdGlhIixDVUI6IlxcYmN1YmEiLENVVzoiXig/IS4qYm9uYWlyZSkuKlxcYmN1cmEoY3xceGU3KWFvIixDWVA6ImN5cHJ1cyIsQ1NLOiJjemVjaG9zbG92YWtpYSIsQ1pFOiJeKD89LipyZXApLipjemVjaHxjemVjaGlhfGJvaGVtaWEiLENPRDoiXFxiZGVtLipjb25nb3xjb25nby4qXFxiZGVtfGNvbmdvLipcXGJkW1xcLl0/cnxcXGJkW1xcLl0/ci4qY29uZ298YmVsZ2lhbi4/Y29uZ298Y29uZ28uP2ZyZWUuP3N0YXRlfGtpbnNoYXNhfHphaXJlfGwub3BvbGR2aWxsZXxkcmN8ZHJvY3xyZGMiLEROSzoiZGVubWFyayIsREpJOiJkamlib3V0aSIsRE1BOiJkb21pbmljYSg/IW4pIixET006ImRvbWluaWNhbi5yZXAiLEVDVToiZWN1YWRvciIsRUdZOiJlZ3lwdCIsU0xWOiJlbC4/c2FsdmFkb3IiLEdOUToiZ3VpbmUuKmVxfGVxLipndWluZXxeKD89LipzcGFuKS4qZ3VpbmVhIixFUkk6ImVyaXRyZWEiLEVTVDoiZXN0b25pYSIsRVRIOiJldGhpb3BpYXxhYnlzc2luaWEiLEZMSzoiZmFsa2xhbmR8bWFsdmluYXMiLEZSTzoiZmFyb2V8ZmFlcm9lIixGSkk6ImZpamkiLEZJTjoiZmlubGFuZCIsRlJBOiJeKD8hLipcXGJkZXApKD8hLiptYXJ0aW5pcXVlKS4qZnJhbmNlfGZyZW5jaC4/cmVwdWJsaWN8XFxiZ2F1bCIsR1VGOiJeKD89LipmcmVuY2gpLipndWlhbmEiLFBZRjoiZnJlbmNoLj9wb2x5bmVzaWF8dGFoaXRpIixBVEY6ImZyZW5jaC4/c291dGhlcm4iLEdBQjoiZ2Fib24iLEdNQjoiZ2FtYmlhIixHRU86Il4oPyEuKnNvdXRoKS4qZ2VvcmdpYSIsRERSOiJnZXJtYW4uP2RlbW9jcmF0aWMuP3JlcHVibGljfGRlbW9jcmF0aWMuP3JlcHVibGljLipnZXJtYW55fGVhc3QuZ2VybWFueSIsREVVOiJeKD8hLiplYXN0KS4qZ2VybWFueXxeKD89LipcXGJmZWQuKlxcYnJlcCkuKmdlcm1hbiIsR0hBOiJnaGFuYXxnb2xkLj9jb2FzdCIsR0lCOiJnaWJyYWx0YXIiLEdSQzoiZ3JlZWNlfGhlbGxlbmljfGhlbGxhcyIsR1JMOiJncmVlbmxhbmQiLEdSRDoiZ3JlbmFkYSIsR0xQOiJndWFkZWxvdXBlIixHVU06IlxcYmd1YW0iLEdUTToiZ3VhdGVtYWxhIixHR1k6Imd1ZXJuc2V5IixHSU46Il4oPyEuKmVxKSg/IS4qc3BhbikoPyEuKmJpc3NhdSkoPyEuKnBvcnR1KSg/IS4qbmV3KS4qZ3VpbmVhIixHTkI6ImJpc3NhdXxeKD89Lipwb3J0dSkuKmd1aW5lYSIsR1VZOiJndXlhbmF8YnJpdGlzaC4/Z3VpYW5hIixIVEk6ImhhaXRpIixITUQ6ImhlYXJkLiptY2RvbmFsZCIsVkFUOiJob2x5Lj9zZWV8dmF0aWNhbnxwYXBhbC4/c3QiLEhORDoiXig/IS4qYnJpdCkuKmhvbmR1cmFzIixIS0c6ImhvbmcuP2tvbmciLEhVTjoiXig/IS4qYXVzdHIpLipodW5nYXJ5IixJU0w6ImljZWxhbmQiLElORDoiaW5kaWEoPyEuKm9jZWEpIixJRE46ImluZG9uZXNpYSIsSVJOOiJcXGJpcmFufHBlcnNpYSIsSVJROiJcXGJpcmFxfG1lc29wb3RhbWlhIixJUkw6IiheaXJlbGFuZCl8KF5yZXB1YmxpYy4qaXJlbGFuZCkiLElNTjoiXig/PS4qaXNsZSkuKlxcYm1hbiIsSVNSOiJpc3JhZWwiLElUQToiaXRhbHkiLEpBTToiamFtYWljYSIsSlBOOiJqYXBhbiIsSkVZOiJqZXJzZXkiLEpPUjoiam9yZGFuIixLQVo6ImthemFrIixLRU46ImtlbnlhfGJyaXRpc2guP2Vhc3QuP2FmcmljYXxlYXN0Lj9hZnJpY2EuP3Byb3QiLEtJUjoia2lyaWJhdGkiLFBSSzoiXig/PS4qZGVtb2NyYXR8cGVvcGxlfG5vcnRofGQuKnAuKi5yKS4qXFxia29yZWF8ZHBya3xrb3JlYS4qKGQuKnAuKnIpIixLV1Q6Imt1d2FpdCIsS0daOiJreXJneXp8a2lyZ2hpeiIsTEFPOiJcXGJsYW9zP1xcYiIsTFZBOiJsYXR2aWEiLExCTjoibGViYW5vbiIsTFNPOiJsZXNvdGhvfGJhc3V0byIsTEJSOiJsaWJlcmlhIixMQlk6ImxpYnlhIixMSUU6ImxpZWNodGVuc3RlaW4iLExUVToibGl0aHVhbmlhIixMVVg6Il4oPyEuKmJlbGcpLipsdXhlbSIsTUFDOiJtYWNhKG98dSkiLE1ERzoibWFkYWdhc2NhcnxtYWxhZ2FzeSIsTVdJOiJtYWxhd2l8bnlhc2EiLE1ZUzoibWFsYXlzaWEiLE1EVjoibWFsZGl2ZSIsTUxJOiJcXGJtYWxpXFxiIixNTFQ6IlxcYm1hbHRhIixNSEw6Im1hcnNoYWxsIixNVFE6Im1hcnRpbmlxdWUiLE1SVDoibWF1cml0YW5pYSIsTVVTOiJtYXVyaXRpdXMiLE1ZVDoiXFxibWF5b3R0ZSIsTUVYOiJcXGJtZXhpYyIsRlNNOiJmZWQuKm1pY3JvbmVzaWF8bWljcm9uZXNpYS4qZmVkIixNQ086Im1vbmFjbyIsTU5HOiJtb25nb2xpYSIsTU5FOiJeKD8hLipzZXJiaWEpLiptb250ZW5lZ3JvIixNU1I6Im1vbnRzZXJyYXQiLE1BUjoibW9yb2Njb3xcXGJtYXJvYyIsTU9aOiJtb3phbWJpcXVlIixNTVI6Im15YW5tYXJ8YnVybWEiLE5BTToibmFtaWJpYSIsTlJVOiJuYXVydSIsTlBMOiJuZXBhbCIsTkxEOiJeKD8hLipcXGJhbnQpKD8hLipcXGJjYXJpYikuKm5ldGhlcmxhbmRzIixBTlQ6Il4oPz0uKlxcYmFudCkuKihuZXRoZXJ8ZHV0Y2gpIixOQ0w6Im5ldy4/Y2FsZWRvbmlhIixOWkw6Im5ldy4/emVhbGFuZCIsTklDOiJuaWNhcmFndWEiLE5FUjoiXFxibmlnZXIoPyFpYSkiLE5HQToibmlnZXJpYSIsTklVOiJuaXVlIixORks6Im5vcmZvbGsiLE1OUDoibWFyaWFuYSIsTk9SOiJub3J3YXkiLE9NTjoiXFxib21hbnx0cnVjaWFsIixQQUs6Il4oPyEuKmVhc3QpLipwYWtpP3N0YW4iLFBMVzoicGFsYXUiLFBTRToicGFsZXN0aW58XFxiZ2F6YXx3ZXN0Lj9iYW5rIixQQU46InBhbmFtYSIsUE5HOiJwYXB1YXxuZXcuP2d1aW5lYSIsUFJZOiJwYXJhZ3VheSIsUEVSOiJwZXJ1IixQSEw6InBoaWxpcHBpbmVzIixQQ046InBpdGNhaXJuIixQT0w6InBvbGFuZCIsUFJUOiJwb3J0dWdhbCIsUFJJOiJwdWVydG8uP3JpY28iLFFBVDoicWF0YXIiLEtPUjoiXig/IS4qZC4qcC4qcikoPyEuKmRlbW9jcmF0KSg/IS4qcGVvcGxlKSg/IS4qbm9ydGgpLipcXGJrb3JlYSg/IS4qZC4qcC4qcikiLE1EQToibW9sZG92fGIoYXxlKXNzYXJhYmlhIixSRVU6InIoZXxceGU5KXVuaW9uIixST1U6InIob3x1fG91KW1hbmlhIixSVVM6IlxcYnJ1c3NpYXxzb3ZpZXQuP3VuaW9ufHVcXC4/c1xcLj9zXFwuP3J8c29jaWFsaXN0Lj9yZXB1YmxpY3MiLFJXQToicndhbmRhIixCTE06ImJhcnRoKGV8XHhlOSlsZW15IixTSE46ImhlbGVuYSIsS05BOiJraXR0c3xcXGJuZXZpcyIsTENBOiJcXGJsdWNpYSIsTUFGOiJeKD89Lipjb2xsZWN0aXZpdHkpLiptYXJ0aW58Xig/PS4qZnJhbmNlKS4qbWFydGluKD8haXF1ZSl8Xig/PS4qZnJlbmNoKS4qbWFydGluKD8haXF1ZSkiLFNQTToibWlxdWVsb24iLFZDVDoidmluY2VudCIsV1NNOiJeKD8hLiphbWVyKS4qc2Ftb2EiLFNNUjoic2FuLj9tYXJpbm8iLFNUUDoiXFxicyhhfFx4ZTMpby4/dG9tKGV8XHhlOSkiLFNBVToiXFxic2FcXHcqLj9hcmFiaWEiLFNFTjoic2VuZWdhbCIsU1JCOiJeKD8hLiptb250ZSkuKnNlcmJpYSIsU1lDOiJzZXljaGVsbCIsU0xFOiJzaWVycmEiLFNHUDoic2luZ2Fwb3JlIixTWE06Il4oPyEuKm1hcnRpbikoPyEuKnNhYmEpLiptYWFydGVuIixTVks6Il4oPyEuKmN6ZSkuKnNsb3ZhayIsU1ZOOiJzbG92ZW5pYSIsU0xCOiJzb2xvbW9uIixTT006InNvbWFsaSIsWkFGOiJzb3V0aC5hZnJpY2F8c1xcXFwuLj9hZnJpY2EiLFNHUzoic291dGguP2dlb3JnaWF8c2FuZHdpY2giLFNTRDoiXFxic1xcdyouP3N1ZGFuIixFU1A6InNwYWluIixMS0E6InNyaS4/bGFua2F8Y2V5bG9uIixTRE46Il4oPyEuKlxcYnMoPyF1KSkuKnN1ZGFuIixTVVI6InN1cmluYW18ZHV0Y2guP2d1aWFuYSIsU0pNOiJzdmFsYmFyZCIsU1daOiJzd2F6aWxhbmQiLFNXRToic3dlZGVuIixDSEU6InN3aXR6fHN3aXNzIixTWVI6InN5cmlhIixUV046InRhaXdhbnx0YWlwZWl8Zm9ybW9zYXxeKD8hLipwZW8pKD89LipyZXApLipjaGluYSIsVEpLOiJ0YWppayIsVEhBOiJ0aGFpbGFuZHxcXGJzaWFtIixNS0Q6Im1hY2Vkb25pYXxmeXJvbSIsVExTOiJeKD89LipsZXN0ZSkuKnRpbW9yfF4oPz0uKmVhc3QpLip0aW1vciIsVEdPOiJ0b2dvIixUS0w6InRva2VsYXUiLFRPTjoidG9uZ2EiLFRUTzoidHJpbmlkYWR8dG9iYWdvIixUVU46InR1bmlzaWEiLFRVUjoidHVya2V5IixUS006InR1cmttZW4iLFRDQToidHVya3MiLFRVVjoidHV2YWx1IixVR0E6InVnYW5kYSIsVUtSOiJ1a3JhaW4iLEFSRToiZW1pcmF0ZXN8XnVcXC4/YVxcLj9lXFwuPyR8dW5pdGVkLj9hcmFiLj9lbSIsR0JSOiJ1bml0ZWQuP2tpbmdkb218YnJpdGFpbnxedVxcLj9rXFwuPyQiLFRaQToidGFuemFuaWEiLFVTQToidW5pdGVkLj9zdGF0ZXNcXGIoPyEuKmlzbGFuZHMpfFxcYnVcXC4/c1xcLj9hXFwuP1xcYnxeXFxzKnVcXC4/c1xcLj9cXGIoPyEuKmlzbGFuZHMpIixVTUk6Im1pbm9yLj9vdXRseWluZy4/aXMiLFVSWToidXJ1Z3VheSIsVVpCOiJ1emJlayIsVlVUOiJ2YW51YXR1fG5ldy4/aGVicmlkZXMiLFZFTjoidmVuZXp1ZWxhIixWTk06Il4oPyEuKnJlcHVibGljKS4qdmlldC4/bmFtfF4oPz0uKnNvY2lhbGlzdCkuKnZpZXQuP25hbSIsVkdCOiJeKD89LipcXGJ1XFwuP1xccz9rKS4qdmlyZ2lufF4oPz0uKmJyaXQpLip2aXJnaW58Xig/PS4qa2luZ2RvbSkuKnZpcmdpbiIsVklSOiJeKD89LipcXGJ1XFwuP1xccz9zKS4qdmlyZ2lufF4oPz0uKnN0YXRlcykuKnZpcmdpbiIsV0xGOiJmdXR1bmF8d2FsbGlzIixFU0g6Indlc3Rlcm4uc2FoYXJhIixZRU06Il4oPyEuKmFyYWIpKD8hLipub3J0aCkoPyEuKnNhbmEpKD8hLipwZW8pKD8hLipkZW0pKD8hLipzb3V0aCkoPyEuKmFkZW4pKD8hLipcXGJwXFwuP2RcXC4/cikuKnllbWVuIixZTUQ6Il4oPz0uKnBlbykuKnllbWVufF4oPyEuKnJlcCkoPz0uKmRlbSkuKnllbWVufF4oPz0uKnNvdXRoKS4qeWVtZW58Xig/PS4qYWRlbikuKnllbWVufF4oPz0uKlxcYnBcXC4/ZFxcLj9yKS4qeWVtZW4iLFlVRzoieXVnb3NsYXZpYSIsWk1COiJ6YW1iaWF8bm9ydGhlcm4uP3Job2Rlc2lhIixFQVo6InphbnppYmFyIixaV0U6InppbWJhYndlfF4oPyEuKm5vcnRoZXJuKS4qcmhvZGVzaWEifX0se31dLDE0MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bInh4LXNtYWxsIiwieC1zbWFsbCIsInNtYWxsIiwibWVkaXVtIiwibGFyZ2UiLCJ4LWxhcmdlIiwieHgtbGFyZ2UiLCJsYXJnZXIiLCJzbWFsbGVyIl19LHt9XSwxNDE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJjb25kZW5zZWQiLCJzZW1pLWNvbmRlbnNlZCIsImV4dHJhLWNvbmRlbnNlZCIsInVsdHJhLWNvbmRlbnNlZCIsImV4cGFuZGVkIiwic2VtaS1leHBhbmRlZCIsImV4dHJhLWV4cGFuZGVkIiwidWx0cmEtZXhwYW5kZWQiXX0se31dLDE0MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIm5vcm1hbCIsIml0YWxpYyIsIm9ibGlxdWUiXX0se31dLDE0MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIiwiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiNzAwIiwiODAwIiwiOTAwIl19LHt9XSwxNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwYXJzZTp0KCIuL3BhcnNlIiksc3RyaW5naWZ5OnQoIi4vc3RyaW5naWZ5Iil9fSx7Ii4vcGFyc2UiOjE0NiwiLi9zdHJpbmdpZnkiOjE0N31dLDE0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udC1zaXplLWtleXdvcmRzIik7ZS5leHBvcnRzPXtpc1NpemU6ZnVuY3Rpb24odCl7cmV0dXJuL15bXGRcLl0vLnRlc3QodCl8fC0xIT09dC5pbmRleE9mKCIvIil8fC0xIT09bi5pbmRleE9mKHQpfX19LHsiY3NzLWZvbnQtc2l6ZS1rZXl3b3JkcyI6MTQwfV0sMTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInVucXVvdGUiKSxpPXQoImNzcy1nbG9iYWwta2V5d29yZHMiKSxhPXQoImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyIpLG89dCgiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIikscz10KCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyIpLGw9dCgiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyIpLGM9dCgic3RyaW5nLXNwbGl0LWJ5IiksdT10KCIuL2xpYi91dGlsIikuaXNTaXplO2UuZXhwb3J0cz1mO3ZhciBoPWYuY2FjaGU9e307ZnVuY3Rpb24gZih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJGb250IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuIik7aWYoaFt0XSlyZXR1cm4gaFt0XTtpZigiIj09PXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGFyc2UgYW4gZW1wdHkgc3RyaW5nLiIpO2lmKC0xIT09YS5pbmRleE9mKHQpKXJldHVybiBoW3RdPXtzeXN0ZW06dH07Zm9yKHZhciBlLHI9e3N0eWxlOiJub3JtYWwiLHZhcmlhbnQ6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHN0cmV0Y2g6Im5vcm1hbCIsbGluZUhlaWdodDoibm9ybWFsIixzaXplOiIxcmVtIixmYW1pbHk6WyJzZXJpZiJdfSxmPWModCwvXHMrLyk7ZT1mLnNoaWZ0KCk7KXtpZigtMSE9PWkuaW5kZXhPZihlKSlyZXR1cm5bInN0eWxlIiwidmFyaWFudCIsIndlaWdodCIsInN0cmV0Y2giXS5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3RdPWV9KSksaFt0XT1yO2lmKC0xPT09cy5pbmRleE9mKGUpKWlmKCJub3JtYWwiIT09ZSYmInNtYWxsLWNhcHMiIT09ZSlpZigtMT09PWwuaW5kZXhPZihlKSl7aWYoLTE9PT1vLmluZGV4T2YoZSkpe2lmKHUoZSkpe3ZhciBkPWMoZSwiLyIpO2lmKHIuc2l6ZT1kWzBdLG51bGwhPWRbMV0/ci5saW5lSGVpZ2h0PXAoZFsxXSk6Ii8iPT09ZlswXSYmKGYuc2hpZnQoKSxyLmxpbmVIZWlnaHQ9cChmLnNoaWZ0KCkpKSwhZi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkIGZvbnQtZmFtaWx5LiIpO3JldHVybiByLmZhbWlseT1jKGYuam9pbigiICIpLC9ccyosXHMqLykubWFwKG4pLGhbdF09cn10aHJvdyBuZXcgRXJyb3IoIlVua25vd24gb3IgdW5zdXBwb3J0ZWQgZm9udCB0b2tlbjogIitlKX1yLndlaWdodD1lfWVsc2Ugci5zdHJldGNoPWU7ZWxzZSByLnZhcmlhbnQ9ZTtlbHNlIHIuc3R5bGU9ZX10aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgZm9udC1zaXplLiIpfWZ1bmN0aW9uIHAodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4gZS50b1N0cmluZygpPT09dD9lOnR9fSx7Ii4vbGliL3V0aWwiOjE0NSwiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyI6MTQxLCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyI6MTQyLCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiOjE0MywiY3NzLWdsb2JhbC1rZXl3b3JkcyI6MTQ4LCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHMiOjE0OSwic3RyaW5nLXNwbGl0LWJ5Ijo1NDAsdW5xdW90ZTo1NzB9XSwxNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGljay1ieS1hbGlhcyIpLGk9dCgiLi9saWIvdXRpbCIpLmlzU2l6ZSxhPWcodCgiY3NzLWdsb2JhbC1rZXl3b3JkcyIpKSxvPWcodCgiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIikpLHM9Zyh0KCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiKSksbD1nKHQoImNzcy1mb250LXN0eWxlLWtleXdvcmRzIikpLGM9Zyh0KCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIikpLHU9e25vcm1hbDoxLCJzbWFsbC1jYXBzIjoxfSxoPXtzZXJpZjoxLCJzYW5zLXNlcmlmIjoxLG1vbm9zcGFjZToxLGN1cnNpdmU6MSxmYW50YXN5OjEsInN5c3RlbS11aSI6MX0sZj0iMXJlbSIscD0ic2VyaWYiO2Z1bmN0aW9uIGQodCxlKXtpZih0JiYhZVt0XSYmIWFbdF0pdGhyb3cgRXJyb3IoIlVua25vd24ga2V5d29yZCBgIit0KyJgIik7cmV0dXJuIHR9ZnVuY3Rpb24gZyh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXV09MTtyZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoKHQ9bih0LHtzdHlsZToic3R5bGUgZm9udHN0eWxlIGZvbnRTdHlsZSBmb250LXN0eWxlIHNsb3BlIGRpc3RpbmN0aW9uIix2YXJpYW50OiJ2YXJpYW50IGZvbnQtdmFyaWFudCBmb250VmFyaWFudCBmb250dmFyaWFudCB2YXIgY2FwaXRhbGl6YXRpb24iLHdlaWdodDoid2VpZ2h0IHcgZm9udC13ZWlnaHQgZm9udFdlaWdodCBmb250d2VpZ2h0IixzdHJldGNoOiJzdHJldGNoIGZvbnQtc3RyZXRjaCBmb250U3RyZXRjaCBmb250c3RyZXRjaCB3aWR0aCIsc2l6ZToic2l6ZSBzIGZvbnQtc2l6ZSBmb250U2l6ZSBmb250c2l6ZSBoZWlnaHQgZW0gZW1TaXplIixsaW5lSGVpZ2h0OiJsaCBsaW5lLWhlaWdodCBsaW5lSGVpZ2h0IGxpbmVoZWlnaHQgbGVhZGluZyIsZmFtaWx5OiJmb250IGZhbWlseSBmb250RmFtaWx5IGZvbnQtZmFtaWx5IGZvbnRmYW1pbHkgdHlwZSB0eXBlZmFjZSBmYWNlIixzeXN0ZW06InN5c3RlbSByZXNlcnZlZCBkZWZhdWx0IGdsb2JhbCJ9KSkuc3lzdGVtKXJldHVybiB0LnN5c3RlbSYmZCh0LnN5c3RlbSxvKSx0LnN5c3RlbTtpZihkKHQuc3R5bGUsbCksZCh0LnZhcmlhbnQsdSksZCh0LndlaWdodCxzKSxkKHQuc3RyZXRjaCxjKSxudWxsPT10LnNpemUmJih0LnNpemU9ZiksIm51bWJlciI9PXR5cGVvZiB0LnNpemUmJih0LnNpemUrPSJweCIpLCFpKXRocm93IEVycm9yKCJCYWQgc2l6ZSB2YWx1ZSBgIit0LnNpemUrImAiKTt0LmZhbWlseXx8KHQuZmFtaWx5PXApLEFycmF5LmlzQXJyYXkodC5mYW1pbHkpJiYodC5mYW1pbHkubGVuZ3RofHwodC5mYW1pbHk9W3BdKSx0LmZhbWlseT10LmZhbWlseS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBoW3RdP3Q6JyInK3QrJyInfSkpLmpvaW4oIiwgIikpO3ZhciBlPVtdO3JldHVybiBlLnB1c2godC5zdHlsZSksdC52YXJpYW50IT09dC5zdHlsZSYmZS5wdXNoKHQudmFyaWFudCksdC53ZWlnaHQhPT10LnZhcmlhbnQmJnQud2VpZ2h0IT09dC5zdHlsZSYmZS5wdXNoKHQud2VpZ2h0KSx0LnN0cmV0Y2ghPT10LndlaWdodCYmdC5zdHJldGNoIT09dC52YXJpYW50JiZ0LnN0cmV0Y2ghPT10LnN0eWxlJiZlLnB1c2godC5zdHJldGNoKSxlLnB1c2godC5zaXplKyhudWxsPT10LmxpbmVIZWlnaHR8fCJub3JtYWwiPT09dC5saW5lSGVpZ2h0fHx0LmxpbmVIZWlnaHQrIiI9PSIxIj8iIjoiLyIrdC5saW5lSGVpZ2h0KSksZS5wdXNoKHQuZmFtaWx5KSxlLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9fSx7Ii4vbGliL3V0aWwiOjE0NSwiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyI6MTQxLCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyI6MTQyLCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiOjE0MywiY3NzLWdsb2JhbC1rZXl3b3JkcyI6MTQ4LCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHMiOjE0OSwicGljay1ieS1hbGlhcyI6NDg1fV0sMTQ4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsiaW5oZXJpdCIsImluaXRpYWwiLCJ1bnNldCJdfSx7fV0sMTQ5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsiY2FwdGlvbiIsImljb24iLCJtZW51IiwibWVzc2FnZS1ib3giLCJzbWFsbC1jYXB0aW9uIiwic3RhdHVzLWJhciJdfSx7fV0sMTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89aS0xLHM9aSppLGw9bypvLGM9KDErMippKSpsLHU9aSpsLGg9cyooMy0yKmkpLGY9cypvO2lmKHQubGVuZ3RoKXthfHwoYT1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIHA9dC5sZW5ndGgtMTtwPj0wOy0tcClhW3BdPWMqdFtwXSt1KmVbcF0raCpyW3BdK2YqbltwXTtyZXR1cm4gYX1yZXR1cm4gYyp0K3UqZStoKnIrZipufSxlLmV4cG9ydHMuZGVyaXZhdGl2ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89NippKmktNippLHM9MyppKmktNCppKzEsbD0tNippKmkrNippLGM9MyppKmktMippO2lmKHQubGVuZ3RoKXthfHwoYT1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSlhW3VdPW8qdFt1XStzKmVbdV0rbCpyW3VdK2Mqblt1XTtyZXR1cm4gYX1yZXR1cm4gbyp0K3MqZStsKnJbdV0rYypufX0se31dLDE1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi90aHVuay5qcyIpO2Z1bmN0aW9uIGkoKXt0aGlzLmFyZ1R5cGVzPVtdLHRoaXMuc2hpbUFyZ3M9W10sdGhpcy5hcnJheUFyZ3M9W10sdGhpcy5hcnJheUJsb2NrSW5kaWNlcz1bXSx0aGlzLnNjYWxhckFyZ3M9W10sdGhpcy5vZmZzZXRBcmdzPVtdLHRoaXMub2Zmc2V0QXJnSW5kZXg9W10sdGhpcy5pbmRleEFyZ3M9W10sdGhpcy5zaGFwZUFyZ3M9W10sdGhpcy5mdW5jTmFtZT0iIix0aGlzLnByZT1udWxsLHRoaXMuYm9keT1udWxsLHRoaXMucG9zdD1udWxsLHRoaXMuZGVidWc9ITF9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpO2UucHJlPXQucHJlLGUuYm9keT10LmJvZHksZS5wb3N0PXQucG9zdDt2YXIgcj10LmFyZ3Muc2xpY2UoMCk7ZS5hcmdUeXBlcz1yO2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgbz1yW2FdO2lmKCJhcnJheSI9PT1vfHwib2JqZWN0Ij09dHlwZW9mIG8mJm8uYmxvY2tJbmRpY2VzKXtpZihlLmFyZ1R5cGVzW2FdPSJhcnJheSIsZS5hcnJheUFyZ3MucHVzaChhKSxlLmFycmF5QmxvY2tJbmRpY2VzLnB1c2goby5ibG9ja0luZGljZXM/by5ibG9ja0luZGljZXM6MCksZS5zaGltQXJncy5wdXNoKCJhcnJheSIrYSksYTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1thXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGFyZ3MiKTtpZihhPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgYXJncyIpfWVsc2UgaWYoInNjYWxhciI9PT1vKWUuc2NhbGFyQXJncy5wdXNoKGEpLGUuc2hpbUFyZ3MucHVzaCgic2NhbGFyIithKTtlbHNlIGlmKCJpbmRleCI9PT1vKXtpZihlLmluZGV4QXJncy5wdXNoKGEpLGE8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwcmUoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleCIpO2lmKGE8ZS5ib2R5LmFyZ3MubGVuZ3RoJiZlLmJvZHkuYXJnc1thXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgaW5kZXgiKTtpZihhPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgaW5kZXgiKX1lbHNlIGlmKCJzaGFwZSI9PT1vKXtpZihlLnNoYXBlQXJncy5wdXNoKGEpLGE8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGUiKTtpZihhPGUuYm9keS5hcmdzLmxlbmd0aCYmZS5ib2R5LmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IGJvZHkoKSBibG9jayBtYXkgbm90IHdyaXRlIHRvIGFycmF5IHNoYXBlIik7aWYoYTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZSIpfWVsc2V7aWYoIm9iamVjdCIhPXR5cGVvZiBvfHwhby5vZmZzZXQpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVW5rbm93biBhcmd1bWVudCB0eXBlICIrclthXSk7ZS5hcmdUeXBlc1thXT0ib2Zmc2V0IixlLm9mZnNldEFyZ3MucHVzaCh7YXJyYXk6by5hcnJheSxvZmZzZXQ6by5vZmZzZXR9KSxlLm9mZnNldEFyZ0luZGV4LnB1c2goYSl9fWlmKGUuYXJyYXlBcmdzLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBObyBhcnJheSBhcmd1bWVudHMgc3BlY2lmaWVkIik7aWYoZS5wcmUuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIHByZSgpIGJsb2NrIik7aWYoZS5ib2R5LmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IFRvbyBtYW55IGFyZ3VtZW50cyBpbiBib2R5KCkgYmxvY2siKTtpZihlLnBvc3QuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIHBvc3QoKSBibG9jayIpO3JldHVybiBlLmRlYnVnPSEhdC5wcmludENvZGV8fCEhdC5kZWJ1ZyxlLmZ1bmNOYW1lPXQuZnVuY05hbWV8fCJjd2lzZSIsZS5ibG9ja1NpemU9dC5ibG9ja1NpemV8fDY0LG4oZSl9fSx7Ii4vbGliL3RodW5rLmpzIjoxNTN9XSwxNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidW5pcSIpO2Z1bmN0aW9uIGkodCxlLHIpe3ZhciBuLGksYT10Lmxlbmd0aCxvPWUuYXJyYXlBcmdzLmxlbmd0aCxzPWUuaW5kZXhBcmdzLmxlbmd0aD4wLGw9W10sYz1bXSx1PTAsaD0wO2ZvcihuPTA7bjxhOysrbiljLnB1c2goWyJpIixuLCI9MCJdLmpvaW4oIiIpKTtmb3IoaT0wO2k8bzsrK2kpZm9yKG49MDtuPGE7KytuKWg9dSx1PXRbbl0sMD09PW4/Yy5wdXNoKFsiZCIsaSwicyIsbiwiPXQiLGksInAiLHVdLmpvaW4oIiIpKTpjLnB1c2goWyJkIixpLCJzIixuLCI9KHQiLGksInAiLHUsIi1zIixoLCIqdCIsaSwicCIsaCwiKSJdLmpvaW4oIiIpKTtmb3IoYy5sZW5ndGg+MCYmbC5wdXNoKCJ2YXIgIitjLmpvaW4oIiwiKSksbj1hLTE7bj49MDstLW4pdT10W25dLGwucHVzaChbImZvcihpIixuLCI9MDtpIixuLCI8cyIsdSwiOysraSIsbiwiKXsiXS5qb2luKCIiKSk7Zm9yKGwucHVzaChyKSxuPTA7bjxhOysrbil7Zm9yKGg9dSx1PXRbbl0saT0wO2k8bzsrK2kpbC5wdXNoKFsicCIsaSwiKz1kIixpLCJzIixuXS5qb2luKCIiKSk7cyYmKG4+MCYmbC5wdXNoKFsiaW5kZXhbIixoLCJdLT1zIixoXS5qb2luKCIiKSksbC5wdXNoKFsiKytpbmRleFsiLHUsIl0iXS5qb2luKCIiKSkpLGwucHVzaCgifSIpfXJldHVybiBsLmpvaW4oIlxuIil9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPXQuYm9keSxpPVtdLGE9W10sbz0wO288dC5hcmdzLmxlbmd0aDsrK28pe3ZhciBzPXQuYXJnc1tvXTtpZighKHMuY291bnQ8PTApKXt2YXIgbD1uZXcgUmVnRXhwKHMubmFtZSwiZyIpLGM9IiIsdT1lLmFycmF5QXJncy5pbmRleE9mKG8pO3N3aXRjaChlLmFyZ1R5cGVzW29dKXtjYXNlIm9mZnNldCI6dmFyIGg9ZS5vZmZzZXRBcmdJbmRleC5pbmRleE9mKG8pO3U9ZS5vZmZzZXRBcmdzW2hdLmFycmF5LGM9IitxIitoO2Nhc2UiYXJyYXkiOmM9InAiK3UrYzt2YXIgZj0ibCIrbyxwPSJhIit1O2lmKDA9PT1lLmFycmF5QmxvY2tJbmRpY2VzW3VdKTE9PT1zLmNvdW50PyJnZW5lcmljIj09PXJbdV0/cy5sdmFsdWU/KGkucHVzaChbInZhciAiLGYsIj0iLHAsIi5nZXQoIixjLCIpIl0uam9pbigiIikpLG49bi5yZXBsYWNlKGwsZiksYS5wdXNoKFtwLCIuc2V0KCIsYywiLCIsZiwiKSJdLmpvaW4oIiIpKSk6bj1uLnJlcGxhY2UobCxbcCwiLmdldCgiLGMsIikiXS5qb2luKCIiKSk6bj1uLnJlcGxhY2UobCxbcCwiWyIsYywiXSJdLmpvaW4oIiIpKToiZ2VuZXJpYyI9PT1yW3VdPyhpLnB1c2goWyJ2YXIgIixmLCI9IixwLCIuZ2V0KCIsYywiKSJdLmpvaW4oIiIpKSxuPW4ucmVwbGFjZShsLGYpLHMubHZhbHVlJiZhLnB1c2goW3AsIi5zZXQoIixjLCIsIixmLCIpIl0uam9pbigiIikpKTooaS5wdXNoKFsidmFyICIsZiwiPSIscCwiWyIsYywiXSJdLmpvaW4oIiIpKSxuPW4ucmVwbGFjZShsLGYpLHMubHZhbHVlJiZhLnB1c2goW3AsIlsiLGMsIl09IixmXS5qb2luKCIiKSkpO2Vsc2V7Zm9yKHZhciBkPVtzLm5hbWVdLGc9W2NdLG09MDttPE1hdGguYWJzKGUuYXJyYXlCbG9ja0luZGljZXNbdV0pO20rKylkLnB1c2goIlxccypcXFsoW15cXF1dKylcXF0iKSxnLnB1c2goIiQiKyhtKzEpKyIqdCIrdSsiYiIrbSk7aWYobD1uZXcgUmVnRXhwKGQuam9pbigiIiksImciKSxjPWcuam9pbigiKyIpLCJnZW5lcmljIj09PXJbdV0pdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogR2VuZXJpYyBhcnJheXMgbm90IHN1cHBvcnRlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGJsb2NrcyEiKTtuPW4ucmVwbGFjZShsLFtwLCJbIixjLCJdIl0uam9pbigiIikpfWJyZWFrO2Nhc2Uic2NhbGFyIjpuPW4ucmVwbGFjZShsLCJZIitlLnNjYWxhckFyZ3MuaW5kZXhPZihvKSk7YnJlYWs7Y2FzZSJpbmRleCI6bj1uLnJlcGxhY2UobCwiaW5kZXgiKTticmVhaztjYXNlInNoYXBlIjpuPW4ucmVwbGFjZShsLCJzaGFwZSIpfX19cmV0dXJuW2kuam9pbigiXG4iKSxuLGEuam9pbigiXG4iKV0uam9pbigiXG4iKS50cmltKCl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPSEwLG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXSxhPWkubWF0Y2goL1xkKy8pO2E9YT9hWzBdOiIiLDA9PT1pLmNoYXJBdCgwKT9lW25dPSJ1IitpLmNoYXJBdCgxKSthOmVbbl09aS5jaGFyQXQoMCkrYSxuPjAmJihyPXImJmVbbl09PT1lW24tMV0pfXJldHVybiByP2VbMF06ZS5qb2luKCIiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVsxXS5sZW5ndGgtTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSl8MCxzPW5ldyBBcnJheSh0LmFycmF5QXJncy5sZW5ndGgpLGw9bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCksYz0wO2M8dC5hcnJheUFyZ3MubGVuZ3RoOysrYylsW2NdPWVbMipjXSxzW2NdPWVbMipjKzFdO3ZhciB1PVtdLGg9W10sZj1bXSxwPVtdLGQ9W107Zm9yKGM9MDtjPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2Mpe3QuYXJyYXlCbG9ja0luZGljZXNbY108MD8oZi5wdXNoKDApLHAucHVzaChyKSx1LnB1c2gociksaC5wdXNoKHIrdC5hcnJheUJsb2NrSW5kaWNlc1tjXSkpOihmLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1tjXSkscC5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbY10rciksdS5wdXNoKDApLGgucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2NdKSk7Zm9yKHZhciBnPVtdLG09MDttPHNbY10ubGVuZ3RoO20rKylmW2NdPD1zW2NdW21dJiZzW2NdW21dPHBbY10mJmcucHVzaChzW2NdW21dLWZbY10pO2QucHVzaChnKX12YXIgdj1bIlNTIl0seT1bIid1c2Ugc3RyaWN0JyJdLHg9W107Zm9yKG09MDttPHI7KyttKXgucHVzaChbInMiLG0sIj1TU1siLG0sIl0iXS5qb2luKCIiKSk7Zm9yKGM9MDtjPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2Mpe3YucHVzaCgiYSIrYyksdi5wdXNoKCJ0IitjKSx2LnB1c2goInAiK2MpO2ZvcihtPTA7bTxyOysrbSl4LnB1c2goWyJ0IixjLCJwIixtLCI9dCIsYywiWyIsZltjXSttLCJdIl0uam9pbigiIikpO2ZvcihtPTA7bTxNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzW2NdKTsrK20peC5wdXNoKFsidCIsYywiYiIsbSwiPXQiLGMsIlsiLHVbY10rbSwiXSJdLmpvaW4oIiIpKX1mb3IoYz0wO2M8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK2Mpdi5wdXNoKCJZIitjKTtpZih0LnNoYXBlQXJncy5sZW5ndGg+MCYmeC5wdXNoKCJzaGFwZT1TUy5zbGljZSgwKSIpLHQuaW5kZXhBcmdzLmxlbmd0aD4wKXt2YXIgYj1uZXcgQXJyYXkocik7Zm9yKGM9MDtjPHI7KytjKWJbY109IjAiO3gucHVzaChbImluZGV4PVsiLGIuam9pbigiLCIpLCJdIl0uam9pbigiIikpfWZvcihjPTA7Yzx0Lm9mZnNldEFyZ3MubGVuZ3RoOysrYyl7dmFyIF89dC5vZmZzZXRBcmdzW2NdLHc9W107Zm9yKG09MDttPF8ub2Zmc2V0Lmxlbmd0aDsrK20pMCE9PV8ub2Zmc2V0W21dJiYoMT09PV8ub2Zmc2V0W21dP3cucHVzaChbInQiLF8uYXJyYXksInAiLG1dLmpvaW4oIiIpKTp3LnB1c2goW18ub2Zmc2V0W21dLCIqdCIsXy5hcnJheSwicCIsbV0uam9pbigiIikpKTswPT09dy5sZW5ndGg/eC5wdXNoKCJxIitjKyI9MCIpOngucHVzaChbInEiLGMsIj0iLHcuam9pbigiKyIpXS5qb2luKCIiKSl9dmFyIFQ9bihbXS5jb25jYXQodC5wcmUudGhpc1ZhcnMpLmNvbmNhdCh0LmJvZHkudGhpc1ZhcnMpLmNvbmNhdCh0LnBvc3QudGhpc1ZhcnMpKTtmb3IoKHg9eC5jb25jYXQoVCkpLmxlbmd0aD4wJiZ5LnB1c2goInZhciAiK3guam9pbigiLCIpKSxjPTA7Yzx0LmFycmF5QXJncy5sZW5ndGg7KytjKXkucHVzaCgicCIrYysifD0wIik7dC5wcmUuYm9keS5sZW5ndGg+MyYmeS5wdXNoKGEodC5wcmUsdCxsKSk7dmFyIGs9YSh0LmJvZHksdCxsKSxNPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dFswXS5sZW5ndGg7ZTxyOyl7Zm9yKHZhciBuPTE7bjx0Lmxlbmd0aDsrK24paWYodFtuXVtlXSE9PXRbMF1bZV0pcmV0dXJuIGU7KytlfXJldHVybiBlfShkKTtNPHI/eS5wdXNoKGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXIuYXJyYXlBcmdzLmxlbmd0aCxzPXIuYmxvY2tTaXplLGw9ci5pbmRleEFyZ3MubGVuZ3RoPjAsYz1bXSx1PTA7dTxvOysrdSljLnB1c2goWyJ2YXIgb2Zmc2V0Iix1LCI9cCIsdV0uam9pbigiIikpO2Zvcih1PXQ7dTxhOysrdSljLnB1c2goWyJmb3IodmFyIGoiK3UrIj1TU1siLGVbdV0sIl18MDtqIix1LCI+MDspeyJdLmpvaW4oIiIpKSxjLnB1c2goWyJpZihqIix1LCI8IixzLCIpeyJdLmpvaW4oIiIpKSxjLnB1c2goWyJzIixlW3VdLCI9aiIsdV0uam9pbigiIikpLGMucHVzaChbImoiLHUsIj0wIl0uam9pbigiIikpLGMucHVzaChbIn1lbHNle3MiLGVbdV0sIj0iLHNdLmpvaW4oIiIpKSxjLnB1c2goWyJqIix1LCItPSIscywifSJdLmpvaW4oIiIpKSxsJiZjLnB1c2goWyJpbmRleFsiLGVbdV0sIl09aiIsdV0uam9pbigiIikpO2Zvcih1PTA7dTxvOysrdSl7Zm9yKHZhciBoPVsib2Zmc2V0Iit1XSxmPXQ7ZjxhOysrZiloLnB1c2goWyJqIixmLCIqdCIsdSwicCIsZVtmXV0uam9pbigiIikpO2MucHVzaChbInAiLHUsIj0oIixoLmpvaW4oIisiKSwiKSJdLmpvaW4oIiIpKX1mb3IoYy5wdXNoKGkoZSxyLG4pKSx1PXQ7dTxhOysrdSljLnB1c2goIn0iKTtyZXR1cm4gYy5qb2luKCJcbiIpfShNLGRbMF0sdCxrKSk6eS5wdXNoKGkoZFswXSx0LGspKSx0LnBvc3QuYm9keS5sZW5ndGg+MyYmeS5wdXNoKGEodC5wb3N0LHQsbCkpLHQuZGVidWcmJmNvbnNvbGUubG9nKCItLS0tLUdlbmVyYXRlZCBjd2lzZSByb3V0aW5lIGZvciAiLGUsIjpcbiIreS5qb2luKCJcbiIpKyJcbi0tLS0tLS0tLS0iKTt2YXIgQT1bdC5mdW5jTmFtZXx8InVubmFtZWQiLCJfY3dpc2VfbG9vcF8iLHNbMF0uam9pbigicyIpLCJtIixNLG8obCldLmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24oWyJmdW5jdGlvbiAiLEEsIigiLHYuam9pbigiLCIpLCIpeyIseS5qb2luKCJcbiIpLCJ9IHJldHVybiAiLEFdLmpvaW4oIiIpKSgpfX0se3VuaXE6NTY5fV0sMTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29tcGlsZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bIid1c2Ugc3RyaWN0JyIsInZhciBDQUNIRUQ9e30iXSxyPVtdLGk9dC5mdW5jTmFtZSsiX2N3aXNlX3RodW5rIjtlLnB1c2goWyJyZXR1cm4gZnVuY3Rpb24gIixpLCIoIix0LnNoaW1BcmdzLmpvaW4oIiwiKSwiKXsiXS5qb2luKCIiKSk7Zm9yKHZhciBhPVtdLG89W10scz1bWyJhcnJheSIsdC5hcnJheUFyZ3NbMF0sIi5zaGFwZS5zbGljZSgiLE1hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1swXSksdC5hcnJheUJsb2NrSW5kaWNlc1swXTwwPyIsIit0LmFycmF5QmxvY2tJbmRpY2VzWzBdKyIpIjoiKSJdLmpvaW4oIiIpXSxsPVtdLGM9W10sdT0wO3U8dC5hcnJheUFyZ3MubGVuZ3RoOysrdSl7dmFyIGg9dC5hcnJheUFyZ3NbdV07ci5wdXNoKFsidCIsaCwiPWFycmF5IixoLCIuZHR5cGUsIiwiciIsaCwiPWFycmF5IixoLCIub3JkZXIiXS5qb2luKCIiKSksYS5wdXNoKCJ0IitoKSxhLnB1c2goInIiK2gpLG8ucHVzaCgidCIraCksby5wdXNoKCJyIitoKyIuam9pbigpIikscy5wdXNoKCJhcnJheSIraCsiLmRhdGEiKSxzLnB1c2goImFycmF5IitoKyIuc3RyaWRlIikscy5wdXNoKCJhcnJheSIraCsiLm9mZnNldHwwIiksdT4wJiYobC5wdXNoKCJhcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZS5sZW5ndGg9PT1hcnJheSIraCsiLnNoYXBlLmxlbmd0aCsiKyhNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKS1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzW3VdKSkpLGMucHVzaCgiYXJyYXkiK3QuYXJyYXlBcmdzWzBdKyIuc2hhcGVbc2hhcGVJbmRleCsiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1swXSkrIl09PT1hcnJheSIraCsiLnNoYXBlW3NoYXBlSW5kZXgrIitNYXRoLm1heCgwLHQuYXJyYXlCbG9ja0luZGljZXNbdV0pKyJdIikpfWZvcih0LmFycmF5QXJncy5sZW5ndGg+MSYmKGUucHVzaCgiaWYgKCEoIitsLmpvaW4oIiAmJiAiKSsiKSkgdGhyb3cgbmV3IEVycm9yKCdjd2lzZTogQXJyYXlzIGRvIG5vdCBhbGwgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb25hbGl0eSEnKSIpLGUucHVzaCgiZm9yKHZhciBzaGFwZUluZGV4PWFycmF5Iit0LmFycmF5QXJnc1swXSsiLnNoYXBlLmxlbmd0aC0iK01hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbMF0pKyI7IHNoYXBlSW5kZXgtLVx4M2UwOykgeyIpLGUucHVzaCgiaWYgKCEoIitjLmpvaW4oIiAmJiAiKSsiKSkgdGhyb3cgbmV3IEVycm9yKCdjd2lzZTogQXJyYXlzIGRvIG5vdCBhbGwgaGF2ZSB0aGUgc2FtZSBzaGFwZSEnKSIpLGUucHVzaCgifSIpKSx1PTA7dTx0LnNjYWxhckFyZ3MubGVuZ3RoOysrdSlzLnB1c2goInNjYWxhciIrdC5zY2FsYXJBcmdzW3VdKTtyZXR1cm4gci5wdXNoKFsidHlwZT1bIixvLmpvaW4oIiwiKSwiXS5qb2luKCkiXS5qb2luKCIiKSksci5wdXNoKCJwcm9jPUNBQ0hFRFt0eXBlXSIpLGUucHVzaCgidmFyICIrci5qb2luKCIsIikpLGUucHVzaChbImlmKCFwcm9jKXsiLCJDQUNIRURbdHlwZV09cHJvYz1jb21waWxlKFsiLGEuam9pbigiLCIpLCJdKX0iLCJyZXR1cm4gcHJvYygiLHMuam9pbigiLCIpLCIpfSJdLmpvaW4oIiIpKSx0LmRlYnVnJiZjb25zb2xlLmxvZygiLS0tLS1HZW5lcmF0ZWQgdGh1bms6XG4iK2Uuam9pbigiXG4iKSsiXG4tLS0tLS0tLS0tIiksbmV3IEZ1bmN0aW9uKCJjb21waWxlIixlLmpvaW4oIlxuIikpKG4uYmluZCh2b2lkIDAsdCkpfX0seyIuL2NvbXBpbGUuanMiOjE1Mn1dLDE1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoInR5cGUvdmFsdWUvaXMiKSxhPXQoInR5cGUvdmFsdWUvZW5zdXJlIiksbz10KCJ0eXBlL3BsYWluLWZ1bmN0aW9uL2Vuc3VyZSIpLHM9dCgiZXM1LWV4dC9vYmplY3QvY29weSIpLGw9dCgiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiKSxjPXQoImVzNS1leHQvb2JqZWN0L21hcCIpLHU9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsaD1PYmplY3QuZGVmaW5lUHJvcGVydHksZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O249ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9YShlKSYmbyhlLnZhbHVlKTtyZXR1cm4gZGVsZXRlKG49cyhlKSkud3JpdGFibGUsZGVsZXRlIG4udmFsdWUsbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hci5vdmVyd3JpdGVEZWZpbml0aW9uJiZmLmNhbGwodGhpcyx0KT9pOihlLnZhbHVlPXUuY2FsbChpLHIucmVzb2x2ZUNvbnRleHQ/ci5yZXNvbHZlQ29udGV4dCh0aGlzKTp0aGlzKSxoKHRoaXMsdCxlKSx0aGlzW3RdKX0sbn0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWwoYXJndW1lbnRzWzFdKTtyZXR1cm4gaShlLnJlc29sdmVDb250ZXh0KSYmbyhlLnJlc29sdmVDb250ZXh0KSxjKHQsKGZ1bmN0aW9uKHQscil7cmV0dXJuIG4ocix0LGUpfSkpfX0seyJlczUtZXh0L29iamVjdC9jb3B5IjoxOTYsImVzNS1leHQvb2JqZWN0L21hcCI6MjA0LCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9ucyI6MjA1LCJ0eXBlL3BsYWluLWZ1bmN0aW9uL2Vuc3VyZSI6NTYxLCJ0eXBlL3ZhbHVlL2Vuc3VyZSI6NTY1LCJ0eXBlL3ZhbHVlL2lzIjo1NjZ9XSwxNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHlwZS92YWx1ZS9pcyIpLGk9dCgidHlwZS9wbGFpbi1mdW5jdGlvbi9pcyIpLGE9dCgiZXM1LWV4dC9vYmplY3QvYXNzaWduIiksbz10KCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9ucyIpLHM9dCgiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyIpOyhlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGwsYyx1O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDJ8fCJzdHJpbmciIT10eXBlb2YgdD8oYz1lLGU9dCx0PW51bGwpOmM9YXJndW1lbnRzWzJdLG4odCk/KHI9cy5jYWxsKHQsImMiKSxpPXMuY2FsbCh0LCJlIiksbD1zLmNhbGwodCwidyIpKToocj1sPSEwLGk9ITEpLHU9e3ZhbHVlOmUsY29uZmlndXJhYmxlOnIsZW51bWVyYWJsZTppLHdyaXRhYmxlOmx9LGM/YShvKGMpLHUpOnV9KS5ncz1mdW5jdGlvbih0LGUscil7dmFyIGwsYyx1LGg7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0Pyh1PXIscj1lLGU9dCx0PW51bGwpOnU9YXJndW1lbnRzWzNdLG4oZSk/aShlKT9uKHIpP2kocil8fCh1PXIscj12b2lkIDApOnI9dm9pZCAwOih1PWUsZT1yPXZvaWQgMCk6ZT12b2lkIDAsbih0KT8obD1zLmNhbGwodCwiYyIpLGM9cy5jYWxsKHQsImUiKSk6KGw9ITAsYz0hMSksaD17Z2V0OmUsc2V0OnIsY29uZmlndXJhYmxlOmwsZW51bWVyYWJsZTpjfSx1P2Eobyh1KSxoKTpofX0seyJlczUtZXh0L29iamVjdC9hc3NpZ24iOjE5MywiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiOjIwNSwiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyI6MjEyLCJ0eXBlL3BsYWluLWZ1bmN0aW9uL2lzIjo1NjIsInR5cGUvdmFsdWUvaXMiOjU2Nn1dLDE1NjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4pe24oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjp0LmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gcih0KXt2YXIgcjtyZXR1cm4gMT09PXQubGVuZ3RoJiYocj10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZShyKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKT4wP2k9YTpuPWErMX1yZXR1cm4gbn19fXZhciBuPXIoZSksaT1uLnJpZ2h0LGE9bi5sZWZ0O2Z1bmN0aW9uIG8odCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBzKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gbCh0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0tMSxsPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4ocj1zKHRbb10pKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4ocj1zKGUodFtvXSxvLHQpKSl8fChjKz0obj1yLWwpKihyLShsKz1uLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWwodCxlKTtyZXR1cm4gcj9NYXRoLnNxcnQocik6cn1mdW5jdGlvbiB1KHQsZSl7dmFyIHIsbixpLGE9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxhOylpZihudWxsIT0ocj10W29dKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPXRbb10pJiYobj5yJiYobj1yKSxpPHImJihpPXIpKX1lbHNlIGZvcig7KytvPGE7KWlmKG51bGwhPShyPWUodFtvXSxvLHQpKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPWUodFtvXSxvLHQpKSYmKG4+ciYmKG49ciksaTxyJiYoaT1yKSk7cmV0dXJuW24saV19dmFyIGg9QXJyYXkucHJvdG90eXBlLGY9aC5zbGljZSxwPWgubWFwO2Z1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGcodCl7cmV0dXJuIHR9ZnVuY3Rpb24gbSh0LGUscil7dD0rdCxlPStlLHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL3IpKSxhPW5ldyBBcnJheShpKTsrK248aTspYVtuXT10K24qcjtyZXR1cm4gYX12YXIgdj1NYXRoLnNxcnQoNTApLHk9TWF0aC5zcXJ0KDEwKSx4PU1hdGguc3FydCgyKTtmdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj0oZS10KS9NYXRoLm1heCgwLHIpLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApLGE9bi9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49dj8xMDphPj15PzU6YT49eD8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PXY/MTA6YT49eT81OmE+PXg/MjoxKX1mdW5jdGlvbiBfKHQsZSxyKXt2YXIgbj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLGE9bi9pO3JldHVybiBhPj12P2kqPTEwOmE+PXk/aSo9NTphPj14JiYoaSo9MiksZTx0Py1pOml9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBUKHQsZSxyKXtpZihudWxsPT1yJiYocj1zKSxuPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fG48MilyZXR1cm4rcih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rcih0W24tMV0sbi0xLHQpO3ZhciBuLGk9KG4tMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rcih0W2FdLGEsdCk7cmV0dXJuIG8rKCtyKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fWZ1bmN0aW9uIGsodCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0ocj10W2FdKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj10W2FdKSYmbj5yJiYobj1yKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShyPWUodFthXSxhLHQpKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj1lKHRbYV0sYSx0KSkmJm4+ciYmKG49cik7cmV0dXJuIG59ZnVuY3Rpb24gTSh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgZT0tMSxyPWsodCxBKSxuPW5ldyBBcnJheShyKTsrK2U8cjspZm9yKHZhciBpLGE9LTEsbz1uW2VdPW5ldyBBcnJheShpKTsrK2E8aTspb1thXT10W2FdW2VdO3JldHVybiBufWZ1bmN0aW9uIEEodCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0PWksdC5iaXNlY3RSaWdodD1pLHQuYmlzZWN0TGVmdD1hLHQuYXNjZW5kaW5nPWUsdC5iaXNlY3Rvcj1yLHQuY3Jvc3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxzLGw9dC5sZW5ndGgsYz1lLmxlbmd0aCx1PW5ldyBBcnJheShsKmMpO2ZvcihudWxsPT1yJiYocj1vKSxuPWE9MDtuPGw7KytuKWZvcihzPXRbbl0saT0wO2k8YzsrK2ksKythKXVbYV09cihzLGVbaV0pO3JldHVybiB1fSx0LmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LHQuZGV2aWF0aW9uPWMsdC5leHRlbnQ9dSx0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe3ZhciB0PWcsZT11LHI9dztmdW5jdGlvbiBuKG4pe3ZhciBhLG8scz1uLmxlbmd0aCxsPW5ldyBBcnJheShzKTtmb3IoYT0wO2E8czsrK2EpbFthXT10KG5bYV0sYSxuKTt2YXIgYz1lKGwpLHU9Y1swXSxoPWNbMV0sZj1yKGwsdSxoKTtBcnJheS5pc0FycmF5KGYpfHwoZj1fKHUsaCxmKSxmPW0oTWF0aC5jZWlsKHUvZikqZixoLGYpKTtmb3IodmFyIHA9Zi5sZW5ndGg7ZlswXTw9dTspZi5zaGlmdCgpLC0tcDtmb3IoO2ZbcC0xXT5oOylmLnBvcCgpLC0tcDt2YXIgZCxnPW5ldyBBcnJheShwKzEpO2ZvcihhPTA7YTw9cDsrK2EpKGQ9Z1thXT1bXSkueDA9YT4wP2ZbYS0xXTp1LGQueDE9YTxwP2ZbYV06aDtmb3IoYT0wO2E8czsrK2EpdTw9KG89bFthXSkmJm88PWgmJmdbaShmLG8sMCxwKV0ucHVzaChuW2FdKTtyZXR1cm4gZ31yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmQoZSksbik6dH0sbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpkKFt0WzBdLHRbMV1dKSxuKTplfSxuLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP2QoZi5jYWxsKHQpKTpkKHQpLG4pOnJ9LG59LHQudGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcz1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHQ9cC5jYWxsKHQscykuc29ydChlKSxNYXRoLmNlaWwoKG4tcikvKDIqKFQodCwuNzUpLVQodCwuMjUpKSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFNjb3R0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLWUpLygzLjUqYyh0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFN0dXJnZXM9dyx0Lm1heD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZyPm4mJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmcj5uJiYobj1yKTtyZXR1cm4gbn0sdC5tZWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aCxpPW4sYT0tMSxvPTA7aWYobnVsbD09ZSlmb3IoOysrYTxuOylpc05hTihyPXModFthXSkpPy0taTpvKz1yO2Vsc2UgZm9yKDsrK2E8bjspaXNOYU4ocj1zKGUodFthXSxhLHQpKSk/LS1pOm8rPXI7aWYoaSlyZXR1cm4gby9pfSx0Lm1lZGlhbj1mdW5jdGlvbih0LHIpe3ZhciBuLGk9dC5sZW5ndGgsYT0tMSxvPVtdO2lmKG51bGw9PXIpZm9yKDsrK2E8aTspaXNOYU4obj1zKHRbYV0pKXx8by5wdXNoKG4pO2Vsc2UgZm9yKDsrK2E8aTspaXNOYU4obj1zKHIodFthXSxhLHQpKSl8fG8ucHVzaChuKTtyZXR1cm4gVChvLnNvcnQoZSksLjUpfSx0Lm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10Lmxlbmd0aCxhPS0xLG89MDsrK2E8aTspbys9dFthXS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pOy0taT49MDspZm9yKGU9KG49dFtpXSkubGVuZ3RoOy0tZT49MDspclstLW9dPW5bZV07cmV0dXJuIHJ9LHQubWluPWssdC5wYWlycz1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPW8pO2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMSxpPXRbMF0sYT1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylhW3JdPWUoaSxpPXRbKytyXSk7cmV0dXJuIGF9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5xdWFudGlsZT1ULHQucmFuZ2U9bSx0LnNjYW49ZnVuY3Rpb24odCxyKXtpZihuPXQubGVuZ3RoKXt2YXIgbixpLGE9MCxvPTAscz10W29dO2ZvcihudWxsPT1yJiYocj1lKTsrK2E8bjspKHIoaT10W2FdLHMpPDB8fDAhPT1yKHMscykpJiYocz1pLG89YSk7cmV0dXJuIDA9PT1yKHMscyk/bzp2b2lkIDB9fSx0LnNodWZmbGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9KG51bGw9PXI/dC5sZW5ndGg6ciktKGU9bnVsbD09ZT8wOitlKTthOylpPU1hdGgucmFuZG9tKCkqYS0tfDAsbj10W2ErZV0sdFthK2VdPXRbaStlXSx0W2krZV09bjtyZXR1cm4gdH0sdC5zdW09ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9LTEsYT0wO2lmKG51bGw9PWUpZm9yKDsrK2k8bjspKHI9K3RbaV0pJiYoYSs9cik7ZWxzZSBmb3IoOysraTxuOykocj0rZSh0W2ldLGksdCkpJiYoYSs9cik7cmV0dXJuIGF9LHQudGlja3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM9LTE7aWYocj0rciwodD0rdCk9PT0oZT0rZSkmJnI+MClyZXR1cm5bdF07aWYoKG49ZTx0KSYmKGk9dCx0PWUsZT1pKSwwPT09KG89Yih0LGUscikpfHwhaXNGaW5pdGUobykpcmV0dXJuW107aWYobz4wKWZvcih0PU1hdGguY2VpbCh0L28pLGU9TWF0aC5mbG9vcihlL28pLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKGUtdCsxKSk7KytzPGk7KWFbc109KHQrcykqbztlbHNlIGZvcih0PU1hdGguZmxvb3IodCpvKSxlPU1hdGguY2VpbChlKm8pLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtZSsxKSk7KytzPGk7KWFbc109KHQtcykvbztyZXR1cm4gbiYmYS5yZXZlcnNlKCksYX0sdC50aWNrSW5jcmVtZW50PWIsdC50aWNrU3RlcD1fLHQudHJhbnNwb3NlPU0sdC52YXJpYW5jZT1sLHQuemlwPWZ1bmN0aW9uKCl7cmV0dXJuIE0oYXJndW1lbnRzKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTU3OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7bigib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOnQuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiByKHQscil7dmFyIG49bmV3IGU7aWYodCBpbnN0YW5jZW9mIGUpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxhPS0xLG89dC5sZW5ndGg7aWYobnVsbD09cilmb3IoOysrYTxvOyluLnNldChhLHRbYV0pO2Vsc2UgZm9yKDsrK2E8bzspbi5zZXQocihpPXRbYV0sYSx0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBzIGluIHQpbi5zZXQocyx0W3NdKTtyZXR1cm4gbn1mdW5jdGlvbiBuKCl7cmV0dXJue319ZnVuY3Rpb24gaSh0LGUscil7dFtlXT1yfWZ1bmN0aW9uIGEoKXtyZXR1cm4gcigpfWZ1bmN0aW9uIG8odCxlLHIpe3Quc2V0KGUscil9ZnVuY3Rpb24gcygpe31lLnByb3RvdHlwZT1yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgbD1yLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9bmV3IHM7aWYodCBpbnN0YW5jZW9mIHMpdC5lYWNoKChmdW5jdGlvbih0KXtyLmFkZCh0KX0pKTtlbHNlIGlmKHQpe3ZhciBuPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrbjxpOylyLmFkZCh0W25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKGUodFtuXSxuLHQpKX1yZXR1cm4gcn1zLnByb3RvdHlwZT1jLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxoYXM6bC5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTpsLnJlbW92ZSxjbGVhcjpsLmNsZWFyLHZhbHVlczpsLmtleXMsc2l6ZTpsLnNpemUsZW1wdHk6bC5lbXB0eSxlYWNoOmwuZWFjaH0sdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIHQsZSxzLGw9W10sYz1bXTtmdW5jdGlvbiB1KG4saSxhLG8pe2lmKGk+PWwubGVuZ3RoKXJldHVybiBudWxsIT10JiZuLnNvcnQodCksbnVsbCE9ZT9lKG4pOm47Zm9yKHZhciBzLGMsaCxmPS0xLHA9bi5sZW5ndGgsZD1sW2krK10sZz1yKCksbT1hKCk7KytmPHA7KShoPWcuZ2V0KHM9ZChjPW5bZl0pKyIiKSk/aC5wdXNoKGMpOmcuc2V0KHMsW2NdKTtyZXR1cm4gZy5lYWNoKChmdW5jdGlvbih0LGUpe28obSxlLHUodCxpLGEsbykpfSkpLG19cmV0dXJuIHM9e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdSh0LDAsbixpKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxhLG8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KHIsbil7aWYoKytuPmwubGVuZ3RoKXJldHVybiByO3ZhciBpLGE9Y1tuLTFdO3JldHVybiBudWxsIT1lJiZuPj1sLmxlbmd0aD9pPXIuZW50cmllcygpOihpPVtdLHIuZWFjaCgoZnVuY3Rpb24oZSxyKXtpLnB1c2goe2tleTpyLHZhbHVlczp0KGUsbil9KX0pKSksbnVsbCE9YT9pLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodC5rZXksZS5rZXkpfSkpOml9KHUodCwwLGEsbyksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gbC5wdXNoKHQpLHN9LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBjW2wubGVuZ3RoLTFdPXQsc30sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLHN9LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LHN9fX0sdC5zZXQ9Yyx0Lm1hcD1yLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sdC5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNTg6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9uKHIpOm4oKHQ9dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gcih0LGUpe3ZhciByPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBuKCl7fXZhciBpPSJcXHMqKFsrLV0/XFxkKylcXHMqIixhPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLG89IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHM9L14jKFswLTlhLWZdezMsOH0pJC8sbD1uZXcgUmVnRXhwKCJecmdiXFwoIitbaSxpLGldKyJcXCkkIiksYz1uZXcgUmVnRXhwKCJecmdiXFwoIitbbyxvLG9dKyJcXCkkIiksdT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2ksaSxpLGFdKyJcXCkkIiksaD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW28sbyxvLGFdKyJcXCkkIiksZj1uZXcgUmVnRXhwKCJeaHNsXFwoIitbYSxvLG9dKyJcXCkkIikscD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2EsbyxvLGFdKyJcXCkkIiksZD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBnKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gbSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHYodCl7dmFyIGUscjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9cy5leGVjKHQpKT8ocj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1yP3koZSk6Mz09PXI/bmV3IHcoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1yP3goZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoMjU1JmUpLzI1NSk6ND09PXI/eChlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPWwuZXhlYyh0KSk/bmV3IHcoZVsxXSxlWzJdLGVbM10sMSk6KGU9Yy5leGVjKHQpKT9uZXcgdygyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT11LmV4ZWModCkpP3goZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9aC5leGVjKHQpKT94KDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPWYuZXhlYyh0KSk/QShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPXAuZXhlYyh0KSk/QShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOmQuaGFzT3duUHJvcGVydHkodCk/eShkW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgdyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG5ldyB3KHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiBuPD0wJiYodD1lPXI9TmFOKSxuZXcgdyh0LGUscixuKX1mdW5jdGlvbiBiKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbnx8KHQ9dih0KSksdD9uZXcgdygodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgd31mdW5jdGlvbiBfKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9iKHQpOm5ldyB3KHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiB3KHQsZSxyLG4pe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBUKCl7cmV0dXJuIiMiK00odGhpcy5yKStNKHRoaXMuZykrTSh0aGlzLmIpfWZ1bmN0aW9uIGsoKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX1mdW5jdGlvbiBNKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gQSh0LGUscixuKXtyZXR1cm4gbjw9MD90PWU9cj1OYU46cjw9MHx8cj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IEModCxlLHIsbil9ZnVuY3Rpb24gUyh0KXtpZih0IGluc3RhbmNlb2YgQylyZXR1cm4gbmV3IEModC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygbnx8KHQ9dih0KSksIXQpcmV0dXJuIG5ldyBDO2lmKHQgaW5zdGFuY2VvZiBDKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LHI9dC5nLzI1NSxpPXQuYi8yNTUsYT1NYXRoLm1pbihlLHIsaSksbz1NYXRoLm1heChlLHIsaSkscz1OYU4sbD1vLWEsYz0obythKS8yO3JldHVybiBsPyhzPWU9PT1vPyhyLWkpL2wrNioocjxpKTpyPT09bz8oaS1lKS9sKzI6KGUtcikvbCs0LGwvPWM8LjU/bythOjItby1hLHMqPTYwKTpsPWM+MCYmYzwxPzA6cyxuZXcgQyhzLGwsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEUodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1ModCk6bmV3IEModCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIEModCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEwodCxlLHIpe3JldHVybiAyNTUqKHQ8NjA/ZSsoci1lKSp0LzYwOnQ8MTgwP3I6dDwyNDA/ZSsoci1lKSooMjQwLXQpLzYwOmUpfWUobix2LHtjb3B5OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmcsZm9ybWF0SGV4OmcsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIFModGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjptLHRvU3RyaW5nOm19KSxlKHcsXyxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyB3KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyB3KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6VCxmb3JtYXRIZXg6VCxmb3JtYXRSZ2I6ayx0b1N0cmluZzprfSkpLGUoQyxFLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IEModGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgQyh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKmUsaT0yKnItbjtyZXR1cm4gbmV3IHcoTCh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxuKSxMKHQsaSxuKSxMKHQ8MTIwP3QrMjQwOnQtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSk7dmFyIFA9TWF0aC5QSS8xODAsST0xODAvTWF0aC5QSSx6PTYvMjksTz0zKnoqejtmdW5jdGlvbiBEKHQpe2lmKHQgaW5zdGFuY2VvZiBGKXJldHVybiBuZXcgRih0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBIKXJldHVybiBHKHQpO3QgaW5zdGFuY2VvZiB3fHwodD1iKHQpKTt2YXIgZSxyLG49VSh0LnIpLGk9VSh0LmcpLGE9VSh0LmIpLG89QigoLjIyMjUwNDUqbisuNzE2ODc4NippKy4wNjA2MTY5KmEpLzEpO3JldHVybiBuPT09aSYmaT09PWE/ZT1yPW86KGU9QigoLjQzNjA3NDcqbisuMzg1MDY0OSppKy4xNDMwODA0KmEpLy45NjQyMikscj1CKCguMDEzOTMyMipuKy4wOTcxMDQ1KmkrLjcxNDE3MzMqYSkvLjgyNTIxKSksbmV3IEYoMTE2Km8tMTYsNTAwKihlLW8pLDIwMCooby1yKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFIodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0QodCk6bmV3IEYodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIEYodCxlLHIsbil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC9PKzQvMjl9ZnVuY3Rpb24gTih0KXtyZXR1cm4gdD56P3QqdCp0Ok8qKHQtNC8yOSl9ZnVuY3Rpb24gaih0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gVih0KXtpZih0IGluc3RhbmNlb2YgSClyZXR1cm4gbmV3IEgodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgRnx8KHQ9RCh0KSksMD09PXQuYSYmMD09PXQuYilyZXR1cm4gbmV3IEgoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqSTtyZXR1cm4gbmV3IEgoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gcSh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Vih0KTpuZXcgSCh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gSCh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gRyh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgRih0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKlA7cmV0dXJuIG5ldyBGKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9ZShGLFIscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEYodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyB3KGooMy4xMzM4NTYxKihlPS45NjQyMipOKGUpKS0xLjYxNjg2NjcqKHQ9MSpOKHQpKS0uNDkwNjE0Nioocj0uODI1MjEqTihyKSkpLGooLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpyKSxqKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSksZShILHEscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEgodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBIKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIEcodGhpcykucmdiKCl9fSkpO3ZhciBZPS0uMTQ4NjEsVz0xLjc4Mjc3LFo9LS4yOTIyNyxYPS0uOTA2NDksSj0xLjk3Mjk0LEs9SipYLFE9SipXLCQ9VypaLVgqWTtmdW5jdGlvbiB0dCh0KXtpZih0IGluc3RhbmNlb2YgcnQpcmV0dXJuIG5ldyBydCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiB3fHwodD1iKHQpKTt2YXIgZT10LnIvMjU1LHI9dC5nLzI1NSxuPXQuYi8yNTUsaT0oJCpuK0sqZS1RKnIpLygkK0stUSksYT1uLWksbz0oSiooci1pKS1aKmEpL1gscz1NYXRoLnNxcnQobypvK2EqYSkvKEoqaSooMS1pKSksbD1zP01hdGguYXRhbjIobyxhKSpJLTEyMDpOYU47cmV0dXJuIG5ldyBydChsPDA/bCszNjA6bCxzLGksdC5vcGFjaXR5KX1mdW5jdGlvbiBldCh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dHQodCk6bmV3IHJ0KHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBydCh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZShydCxldCxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBydCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBydCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqUCxlPSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksbj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgdygyNTUqKGUrciooWSpuK1cqaSkpLDI1NSooZStyKihaKm4rWCppKSksMjU1KihlK3IqKEoqbikpLHRoaXMub3BhY2l0eSl9fSkpLHQuY29sb3I9dix0LmN1YmVoZWxpeD1ldCx0LmdyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEYodCwwLDAsbnVsbD09ZT8xOmUpfSx0LmhjbD1xLHQuaHNsPUUsdC5sYWI9Uix0LmxjaD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Vih0KTpuZXcgSChyLGUsdCxudWxsPT1uPzE6bil9LHQucmdiPV8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTU5OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHIoKXtmb3IodmFyIHQsZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8cjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGl8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtpW3RdPVtdfXJldHVybiBuZXcgbihpKX1mdW5jdGlvbiBuKHQpe3RoaXMuXz10fWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO2lmKG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOnJ9fSkpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHIsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilpZigocj10W25dKS5uYW1lPT09ZSlyZXR1cm4gci52YWx1ZX1mdW5jdGlvbiBvKHQscixuKXtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8YTsrK2kpaWYodFtpXS5uYW1lPT09cil7dFtpXT1lLHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6cix2YWx1ZTpufSksdH1uLnByb3RvdHlwZT1yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bixvbjpmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5fLHM9aSh0KyIiLG4pLGw9LTEsYz1zLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrbDxjOylpZihyPSh0PXNbbF0pLnR5cGUpbltyXT1vKG5bcl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IociBpbiBuKW5bcl09byhuW3JdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbDxjOylpZigocj0odD1zW2xdKS50eXBlKSYmKHI9YShuW3JdLHQubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBuKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKHI9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcixuLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09YXJndW1lbnRzW2ErMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoYT0wLHI9KG49dGhpcy5fW3RdKS5sZW5ndGg7YTxyOysrYSluW2FdLnZhbHVlLmFwcGx5KGUsaSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgbj10aGlzLl9bdF0saT0wLGE9bi5sZW5ndGg7aTxhOysraSluW2ldLnZhbHVlLmFwcGx5KGUscil9fSx0LmRpc3BhdGNoPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTYwOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/aShyLHQoImQzLXF1YWR0cmVlIiksdCgiZDMtY29sbGVjdGlvbiIpLHQoImQzLWRpc3BhdGNoIiksdCgiZDMtdGltZXIiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUscixuLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBoKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC55fXZhciBwPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTt0LmZvcmNlQ2VudGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gbigpe3ZhciBuLGksYT1yLmxlbmd0aCxvPTAscz0wO2ZvcihuPTA7bjxhOysrbilvKz0oaT1yW25dKS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLG49MDtuPGE7KytuKShpPXJbbl0pLngtPW8saS55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10fSxuLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Usbik6dH0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LG4pOmV9LG59LHQuZm9yY2VDb2xsaWRlPWZ1bmN0aW9uKHQpe3ZhciByLG4saT0xLGM9MTtmdW5jdGlvbiB1KCl7Zm9yKHZhciB0LGEsdSxmLHAsZCxnLG09ci5sZW5ndGgsdj0wO3Y8YzsrK3YpZm9yKGE9ZS5xdWFkdHJlZShyLHMsbCkudmlzaXRBZnRlcihoKSx0PTA7dDxtOysrdCl1PXJbdF0sZD1uW3UuaW5kZXhdLGc9ZCpkLGY9dS54K3UudngscD11LnkrdS52eSxhLnZpc2l0KHkpO2Z1bmN0aW9uIHkodCxlLHIsbixhKXt2YXIgcz10LmRhdGEsbD10LnIsYz1kK2w7aWYoIXMpcmV0dXJuIGU+ZitjfHxuPGYtY3x8cj5wK2N8fGE8cC1jO2lmKHMuaW5kZXg+dS5pbmRleCl7dmFyIGg9Zi1zLngtcy52eCxtPXAtcy55LXMudnksdj1oKmgrbSptO3Y8YypjJiYoMD09PWgmJih2Kz0oaD1vKCkpKmgpLDA9PT1tJiYodis9KG09bygpKSptKSx2PShjLSh2PU1hdGguc3FydCh2KSkpL3YqaSx1LnZ4Kz0oaCo9dikqKGM9KGwqPWwpLyhnK2wpKSx1LnZ5Kz0obSo9dikqYyxzLnZ4LT1oKihjPTEtYykscy52eS09bSpjKX19fWZ1bmN0aW9uIGgodCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBmKCl7aWYocil7dmFyIGUsaSxhPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxlPTA7ZTxhOysrZSlpPXJbZV0sbltpLmluZGV4XT0rdChpLGUscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MTordCkpLHUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsZigpfSx1Lml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsdSk6Y30sdS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCx1KTppfSx1LnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLGYoKSx1KTp0fSx1fSx0LmZvcmNlTGluaz1mdW5jdGlvbih0KXt2YXIgZSxuLGkscyxsLGg9YyxmPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKHNbdC5zb3VyY2UuaW5kZXhdLHNbdC50YXJnZXQuaW5kZXhdKX0scD1hKDMwKSxkPTE7ZnVuY3Rpb24gZyhyKXtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8ZDsrK2kpZm9yKHZhciBzLGMsdSxoLGYscCxnLG09MDttPGE7KyttKWM9KHM9dFttXSkuc291cmNlLGg9KHU9cy50YXJnZXQpLngrdS52eC1jLngtYy52eHx8bygpLGY9dS55K3UudnktYy55LWMudnl8fG8oKSxoKj1wPSgocD1NYXRoLnNxcnQoaCpoK2YqZikpLW5bbV0pL3AqciplW21dLGYqPXAsdS52eC09aCooZz1sW21dKSx1LnZ5LT1mKmcsYy52eCs9aCooZz0xLWcpLGMudnkrPWYqZ31mdW5jdGlvbiBtKCl7aWYoaSl7dmFyIGEsbyxjPWkubGVuZ3RoLGY9dC5sZW5ndGgscD1yLm1hcChpLGgpO2ZvcihhPTAscz1uZXcgQXJyYXkoYyk7YTxmOysrYSkobz10W2FdKS5pbmRleD1hLCJvYmplY3QiIT10eXBlb2Ygby5zb3VyY2UmJihvLnNvdXJjZT11KHAsby5zb3VyY2UpKSwib2JqZWN0IiE9dHlwZW9mIG8udGFyZ2V0JiYoby50YXJnZXQ9dShwLG8udGFyZ2V0KSksc1tvLnNvdXJjZS5pbmRleF09KHNbby5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbby50YXJnZXQuaW5kZXhdPShzW28udGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoYT0wLGw9bmV3IEFycmF5KGYpO2E8ZjsrK2Epbz10W2FdLGxbYV09c1tvLnNvdXJjZS5pbmRleF0vKHNbby5zb3VyY2UuaW5kZXhdK3Nbby50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheShmKSx2KCksbj1uZXcgQXJyYXkoZikseSgpfX1mdW5jdGlvbiB2KCl7aWYoaSlmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZVtyXT0rZih0W3JdLHIsdCl9ZnVuY3Rpb24geSgpe2lmKGkpZm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKW5bZV09K3AodFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksZy5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxtKCl9LGcubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxtKCksZyk6dH0sZy5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD10LGcpOmh9LGcuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdCxnKTpkfSxnLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksdigpLGcpOmZ9LGcuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSx5KCksZyk6cH0sZ30sdC5mb3JjZU1hbnlCb2R5PWZ1bmN0aW9uKCl7dmFyIHQscixuLGkscz1hKC0zMCksbD0xLGM9MS8wLHU9LjgxO2Z1bmN0aW9uIHAoaSl7dmFyIGEsbz10Lmxlbmd0aCxzPWUucXVhZHRyZWUodCxoLGYpLnZpc2l0QWZ0ZXIoZyk7Zm9yKG49aSxhPTA7YTxvOysrYSlyPXRbYV0scy52aXNpdChtKX1mdW5jdGlvbiBkKCl7aWYodCl7dmFyIGUscixuPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShuKSxlPTA7ZTxuOysrZSlyPXRbZV0saVtyLmluZGV4XT0rcyhyLGUsdCl9fWZ1bmN0aW9uIGcodCl7dmFyIGUscixuLGEsbyxzPTAsbD0wO2lmKHQubGVuZ3RoKXtmb3Iobj1hPW89MDtvPDQ7KytvKShlPXRbb10pJiYocj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGwrPXIsbis9ciplLngsYSs9ciplLnkpO3QueD1uL2wsdC55PWEvbH1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIG0odCxlLGEscyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGg9dC54LXIueCxmPXQueS1yLnkscD1zLWUsZD1oKmgrZipmO2lmKHAqcC91PGQpcmV0dXJuIGQ8YyYmKDA9PT1oJiYoZCs9KGg9bygpKSpoKSwwPT09ZiYmKGQrPShmPW8oKSkqZiksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSksci52eCs9aCp0LnZhbHVlKm4vZCxyLnZ5Kz1mKnQudmFsdWUqbi9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1jKSl7KHQuZGF0YSE9PXJ8fHQubmV4dCkmJigwPT09aCYmKGQrPShoPW8oKSkqaCksMD09PWYmJihkKz0oZj1vKCkpKmYpLGQ8bCYmKGQ9TWF0aC5zcXJ0KGwqZCkpKTtkb3t0LmRhdGEhPT1yJiYocD1pW3QuZGF0YS5pbmRleF0qbi9kLHIudngrPWgqcCxyLnZ5Kz1mKnApfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIHAuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt0PWUsZCgpfSxwLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksZCgpLHApOnN9LHAuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCp0LHApOk1hdGguc3FydChsKX0scC5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10KnQscCk6TWF0aC5zcXJ0KGMpfSxwLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQqdCxwKTpNYXRoLnNxcnQodSl9LHB9LHQuZm9yY2VSYWRpYWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxzPWEoLjEpO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKXt2YXIgbD1uW2FdLGM9bC54LWV8fDFlLTYsdT1sLnktcnx8MWUtNixoPU1hdGguc3FydChjKmMrdSp1KSxmPShvW2FdLWgpKmlbYV0qdC9oO2wudngrPWMqZixsLnZ5Kz11KmZ9fWZ1bmN0aW9uIGMoKXtpZihuKXt2YXIgZSxyPW4ubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxlPTA7ZTxyOysrZSlvW2VdPSt0KG5bZV0sZSxuKSxpW2VdPWlzTmFOKG9bZV0pPzA6K3MobltlXSxlLG4pfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YSgrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PXImJihyPTApLGwuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXQsYygpfSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksYygpLGwpOnN9LGwucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSksYygpLGwpOnR9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxsKTplfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsbCk6cn0sbH0sdC5mb3JjZVNpbXVsYXRpb249ZnVuY3Rpb24odCl7dmFyIGUsYT0xLG89LjAwMSxzPTEtTWF0aC5wb3cobywxLzMwMCksbD0wLGM9LjYsdT1yLm1hcCgpLGg9aS50aW1lcihkKSxmPW4uZGlzcGF0Y2goInRpY2siLCJlbmQiKTtmdW5jdGlvbiBkKCl7ZygpLGYuY2FsbCgidGljayIsZSksYTxvJiYoaC5zdG9wKCksZi5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBnKHIpe3ZhciBuLGksbz10Lmxlbmd0aDt2b2lkIDA9PT1yJiYocj0xKTtmb3IodmFyIGg9MDtoPHI7KytoKWZvcihhKz0obC1hKSpzLHUuZWFjaCgoZnVuY3Rpb24odCl7dChhKX0pKSxuPTA7bjxvOysrbiludWxsPT0oaT10W25dKS5meD9pLngrPWkudngqPWM6KGkueD1pLmZ4LGkudng9MCksbnVsbD09aS5meT9pLnkrPWkudnkqPWM6KGkueT1pLmZ5LGkudnk9MCk7cmV0dXJuIGV9ZnVuY3Rpb24gbSgpe2Zvcih2YXIgZSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKXtpZigoZT10W3JdKS5pbmRleD1yLG51bGwhPWUuZngmJihlLng9ZS5meCksbnVsbCE9ZS5meSYmKGUueT1lLmZ5KSxpc05hTihlLngpfHxpc05hTihlLnkpKXt2YXIgaT0xMCpNYXRoLnNxcnQociksYT1yKnA7ZS54PWkqTWF0aC5jb3MoYSksZS55PWkqTWF0aC5zaW4oYSl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxtKCksZT17dGljazpnLHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXN0YXJ0KGQpLGV9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gaC5zdG9wKCksZX0sbm9kZXM6ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cixtKCksdS5lYWNoKHYpLGUpOnR9LGFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGUpOmF9LGFscGhhTWluOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGUpOm99LGFscGhhRGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsZSk6K3N9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LGUpOmx9LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9MS10LGUpOjEtY30sZm9yY2U6ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1yP3UucmVtb3ZlKHQpOnUuc2V0KHQsdihyKSksZSk6dS5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz0wLHU9dC5sZW5ndGg7Zm9yKG51bGw9PW4/bj0xLzA6bio9bixjPTA7Yzx1OysrYykobz0oaT1lLShzPXRbY10pLngpKmkrKGE9ci1zLnkpKmEpPG4mJihsPXMsbj1vKTtyZXR1cm4gbH0sb246ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhmLm9uKHQsciksZSk6Zi5vbih0KX19fSx0LmZvcmNlWD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ4Kz0oblthXS1pLngpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCkscygpLG8pOml9LG8ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSx0LmZvcmNlWT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ5Kz0oblthXS1pLnkpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCkscygpLG8pOml9LG8ueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtY29sbGVjdGlvbiI6MTU3LCJkMy1kaXNwYXRjaCI6MTU5LCJkMy1xdWFkdHJlZSI6MTY0LCJkMy10aW1lciI6MTY4fV0sMTYxOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX1mdW5jdGlvbiBpKHQpe3ZhciBlPTAscj10LmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYobilmb3IoOy0tbj49MDspZSs9cltuXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gYSh0LGUpe3ZhciByLG4saSxhLHMsdT1uZXcgYyh0KSxoPSt0LnZhbHVlJiYodS52YWx1ZT10LnZhbHVlKSxmPVt1XTtmb3IobnVsbD09ZSYmKGU9byk7cj1mLnBvcCgpOylpZihoJiYoci52YWx1ZT0rci5kYXRhLnZhbHVlKSwoaT1lKHIuZGF0YSkpJiYocz1pLmxlbmd0aCkpZm9yKHIuY2hpbGRyZW49bmV3IEFycmF5KHMpLGE9cy0xO2E+PTA7LS1hKWYucHVzaChuPXIuY2hpbGRyZW5bYV09bmV3IGMoaVthXSkpLG4ucGFyZW50PXIsbi5kZXB0aD1yLmRlcHRoKzE7cmV0dXJuIHUuZWFjaEJlZm9yZShsKX1mdW5jdGlvbiBvKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHModCl7dC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIGwodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBjKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfWMucHJvdG90eXBlPWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGkpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcyxvPVthXTtkb3tmb3IoZT1vLnJldmVyc2UoKSxvPVtdO2E9ZS5wb3AoKTspaWYodChhKSxyPWEuY2hpbGRyZW4pZm9yKG49MCxpPXIubGVuZ3RoO248aTsrK24pby5wdXNoKHJbbl0pfXdoaWxlKG8ubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10aGlzLGE9W2ldLG89W107aT1hLnBvcCgpOylpZihvLnB1c2goaSksZT1pLmNoaWxkcmVuKWZvcihyPTAsbj1lLmxlbmd0aDtyPG47KytyKWEucHVzaChlW3JdKTtmb3IoO2k9by5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuPXRoaXMsaT1bbl07bj1pLnBvcCgpOylpZih0KG4pLGU9bi5jaGlsZHJlbilmb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKWkucHVzaChlW3JdKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7Zm9yKHZhciByPSt0KGUuZGF0YSl8fDAsbj1lLmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO2UudmFsdWU9cn0pKX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXQuYW5jZXN0b3JzKCksbj1lLmFuY2VzdG9ycygpLGk9bnVsbDt0PXIucG9wKCksZT1uLnBvcCgpO2Zvcig7dD09PWU7KWk9dCx0PXIucG9wKCksZT1uLnBvcCgpO3JldHVybiBpfShlLHQpLG49W2VdO2UhPT1yOyllPWUucGFyZW50LG4ucHVzaChlKTtmb3IodmFyIGk9bi5sZW5ndGg7dCE9PXI7KW4uc3BsaWNlKGksMCx0KSx0PXQucGFyZW50O3JldHVybiBufSxhbmNlc3RvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pKSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbihyKXtyIT09dCYmZS5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pKSxlfSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykuZWFjaEJlZm9yZShzKX19O3ZhciB1PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBoKHQpe2Zvcih2YXIgZSxyLG49MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49dC5sZW5ndGg7bjspcj1NYXRoLnJhbmRvbSgpKm4tLXwwLGU9dFtuXSx0W25dPXRbcl0sdFtyXT1lO3JldHVybiB0fSh1LmNhbGwodCkpKS5sZW5ndGgsYT1bXTtuPGk7KWU9dFtuXSxyJiZkKHIsZSk/KytuOihyPW0oYT1mKGEsZSkpLG49MCk7cmV0dXJuIHJ9ZnVuY3Rpb24gZih0LGUpe3ZhciByLG47aWYoZyhlLHQpKXJldHVybltlXTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKWlmKHAoZSx0W3JdKSYmZyh2KHRbcl0sZSksdCkpcmV0dXJuW3Rbcl0sZV07Zm9yKHI9MDtyPHQubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPHQubGVuZ3RoOysrbilpZihwKHYodFtyXSx0W25dKSxlKSYmcCh2KHRbcl0sZSksdFtuXSkmJnAodih0W25dLGUpLHRbcl0pJiZnKHkodFtyXSx0W25dLGUpLHQpKXJldHVyblt0W3JdLHRbbl0sZV07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj10LnItZS5yLG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXQuci1lLnIrMWUtNixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIGcodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcilpZighZCh0LGVbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG0odCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJue3g6KGU9dFswXSkueCx5OmUueSxyOmUucn07Y2FzZSAyOnJldHVybiB2KHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiB5KHRbMF0sdFsxXSx0WzJdKX12YXIgZX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dC54LG49dC55LGk9dC5yLGE9ZS54LG89ZS55LHM9ZS5yLGw9YS1yLGM9by1uLHU9cy1pLGg9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK2ErbC9oKnUpLzIseToobitvK2MvaCp1KS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj10LngsaT10LnksYT10LnIsbz1lLngscz1lLnksbD1lLnIsYz1yLngsdT1yLnksaD1yLnIsZj1uLW8scD1uLWMsZD1pLXMsZz1pLXUsbT1sLWEsdj1oLWEseT1uKm4raSppLWEqYSx4PXktbypvLXMqcytsKmwsYj15LWMqYy11KnUraCpoLF89cCpkLWYqZyx3PShkKmItZyp4KS8oMipfKS1uLFQ9KGcqbS1kKnYpL18saz0ocCp4LWYqYikvKDIqXyktaSxNPShmKnYtcCptKS9fLEE9VCpUK00qTS0xLFM9MiooYSt3KlQraypNKSxFPXcqdytrKmstYSphLEM9LShBPyhTK01hdGguc3FydChTKlMtNCpBKkUpKS8oMipBKTpFL1MpO3JldHVybnt4Om4rdytUKkMseTppK2srTSpDLHI6Q319ZnVuY3Rpb24geCh0LGUscil7dmFyIG4saSxhLG8scz10LngtZS54LGw9dC55LWUueSxjPXMqcytsKmw7Yz8oaT1lLnIrci5yLGkqPWksbz10LnIrci5yLGk+KG8qPW8pPyhuPShjK28taSkvKDIqYyksYT1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtbipuKSksci54PXQueC1uKnMtYSpsLHIueT10LnktbipsK2Eqcyk6KG49KGMraS1vKS8oMipjKSxhPU1hdGguc3FydChNYXRoLm1heCgwLGkvYy1uKm4pKSxyLng9ZS54K24qcy1hKmwsci55PWUueStuKmwrYSpzKSk6KHIueD1lLngrci5yLHIueT1lLnkpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10LnIrZS5yLTFlLTYsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBfKHQpe3ZhciBlPXQuXyxyPXQubmV4dC5fLG49ZS5yK3IucixpPShlLngqci5yK3IueCplLnIpL24sYT0oZS55KnIucityLnkqZS5yKS9uO3JldHVybiBpKmkrYSphfWZ1bmN0aW9uIHcodCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFQodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihyPXRbMV0sZS54PS1yLnIsci54PWUucixyLnk9MCwhKGk+MikpcmV0dXJuIGUucityLnI7eChyLGUsbj10WzJdKSxlPW5ldyB3KGUpLHI9bmV3IHcociksbj1uZXcgdyhuKSxlLm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD1lLnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9ZTt0OmZvcihzPTM7czxpOysrcyl7eChlLl8sci5fLG49dFtzXSksbj1uZXcgdyhuKSxsPXIubmV4dCxjPWUucHJldmlvdXMsdT1yLl8ucixmPWUuXy5yO2Rve2lmKHU8PWYpe2lmKGIobC5fLG4uXykpe3I9bCxlLm5leHQ9cixyLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9dSs9bC5fLnIsbD1sLm5leHR9ZWxzZXtpZihiKGMuXyxuLl8pKXsoZT1jKS5uZXh0PXIsci5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWYrPWMuXy5yLGM9Yy5wcmV2aW91c319d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9ZSxuLm5leHQ9cixlLm5leHQ9ci5wcmV2aW91cz1yPW4sYT1fKGUpOyhuPW4ubmV4dCkhPT1yOykobz1fKG4pKTxhJiYoZT1uLGE9byk7cj1lLm5leHR9Zm9yKGU9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyllLnB1c2gobi5fKTtmb3Iobj1oKGUpLHM9MDtzPGk7KytzKShlPXRbc10pLngtPW4ueCxlLnktPW4ueTtyZXR1cm4gbi5yfWZ1bmN0aW9uIGsodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpNKHQpfWZ1bmN0aW9uIE0odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIEEoKXtyZXR1cm4gMH1mdW5jdGlvbiBTKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBFKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7aWYobj1yLmNoaWxkcmVuKXt2YXIgbixpLGEsbz1uLmxlbmd0aCxzPXQocikqZXx8MDtpZihzKWZvcihpPTA7aTxvOysraSluW2ldLnIrPXM7aWYoYT1UKG4pLHMpZm9yKGk9MDtpPG87KytpKW5baV0uci09cztyLnI9YStzfX19ZnVuY3Rpb24gUCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9ZS5wYXJlbnQ7ZS5yKj10LHImJihlLng9ci54K3QqZS54LGUueT1yLnkrdCplLnkpfX1mdW5jdGlvbiBJKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX1mdW5jdGlvbiB6KHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYobi1lKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS55MD1yLGEueTE9aSxhLngwPWUsYS54MT1lKz1hLnZhbHVlKmN9dmFyIE89e2RlcHRoOi0xfSxEPXt9O2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIE4odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lWzBdOnQudH1mdW5jdGlvbiBqKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gVSh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBWKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIHEodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1mdW5jdGlvbiBIKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYoaS1yKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS54MD1lLGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9cS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7dmFyIEc9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIFkodCxlLHIsbixpLGEpe2Zvcih2YXIgbyxzLGwsYyx1LGgsZixwLGQsZyxtLHY9W10seT1lLmNoaWxkcmVuLHg9MCxiPTAsXz15Lmxlbmd0aCx3PWUudmFsdWU7eDxfOyl7bD1pLXIsYz1hLW47ZG97dT15W2IrK10udmFsdWV9d2hpbGUoIXUmJmI8Xyk7Zm9yKGg9Zj11LG09dSp1KihnPU1hdGgubWF4KGMvbCxsL2MpLyh3KnQpKSxkPU1hdGgubWF4KGYvbSxtL2gpO2I8XzsrK2Ipe2lmKHUrPXM9eVtiXS52YWx1ZSxzPGgmJihoPXMpLHM+ZiYmKGY9cyksbT11KnUqZywocD1NYXRoLm1heChmL20sbS9oKSk+ZCl7dS09czticmVha31kPXB9di5wdXNoKG89e3ZhbHVlOnUsZGljZTpsPGMsY2hpbGRyZW46eS5zbGljZSh4LGIpfSksby5kaWNlP3oobyxyLG4saSx3P24rPWMqdS93OmEpOkgobyxyLG4sdz9yKz1sKnUvdzppLGEpLHctPXUseD1ifXJldHVybiB2fXZhciBXPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe1koZSx0LHIsbixpLGEpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LHJ9KEcpO3ZhciBaPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe2lmKChvPXQuX3NxdWFyaWZ5KSYmby5yYXRpbz09PWUpZm9yKHZhciBvLHMsbCxjLHUsaD0tMSxmPW8ubGVuZ3RoLHA9dC52YWx1ZTsrK2g8Zjspe2ZvcihsPShzPW9baF0pLmNoaWxkcmVuLGM9cy52YWx1ZT0wLHU9bC5sZW5ndGg7Yzx1OysrYylzLnZhbHVlKz1sW2NdLnZhbHVlO3MuZGljZT96KHMscixuLGksbis9KGEtbikqcy52YWx1ZS9wKTpIKHMscixuLHIrPShpLXIpKnMudmFsdWUvcCxhKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz1ZKGUsdCxyLG4saSxhKSxvLnJhdGlvPWV9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dC5jbHVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZSxpPTEsYT0xLG89ITE7ZnVuY3Rpb24gcyhlKXt2YXIgcyxsPTA7ZS5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBpPWUuY2hpbGRyZW47aT8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShyLDApL3QubGVuZ3RofShpKSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UobiwwKX0oaSkpOihlLng9cz9sKz10KGUscyk6MCxlLnk9MCxzPWUpfSkpO3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oZSksdT1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGUpLGg9Yy54LXQoYyx1KS8yLGY9dS54K3QodSxjKS8yO3JldHVybiBlLmVhY2hBZnRlcihvP2Z1bmN0aW9uKHQpe3QueD0odC54LWUueCkqaSx0Lnk9KGUueS10LnkpKmF9OmZ1bmN0aW9uKHQpe3QueD0odC54LWgpLyhmLWgpKmksdC55PSgxLShlLnk/dC55L2UueToxKSkqYX0pfXJldHVybiBzLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxzKTp0fSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ITEsaT0rdFswXSxhPSt0WzFdLHMpOm8/bnVsbDpbaSxhXX0scy5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hMCxpPSt0WzBdLGE9K3RbMV0scyk6bz9baSxhXTpudWxsfSxzfSx0LmhpZXJhcmNoeT1hLHQucGFjaz1mdW5jdGlvbigpe3ZhciB0PW51bGwsZT0xLHI9MSxuPUE7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9ci8yLHQ/aS5lYWNoQmVmb3JlKEModCkpLmVhY2hBZnRlcihMKG4sLjUpKS5lYWNoQmVmb3JlKFAoMSkpOmkuZWFjaEJlZm9yZShDKEUpKS5lYWNoQWZ0ZXIoTChBLDEpKS5lYWNoQWZ0ZXIoTChuLGkuci9NYXRoLm1pbihlLHIpKSkuZWFjaEJlZm9yZShQKE1hdGgubWluKGUscikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWsoZSksaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0saSk6W2Uscl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLGkpOm59LGl9LHQucGFja0VuY2xvc2U9aCx0LnBhY2tTaWJsaW5ncz1mdW5jdGlvbih0KXtyZXR1cm4gVCh0KSx0fSx0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTEsZT0xLHI9MCxuPSExO2Z1bmN0aW9uIGkoaSl7dmFyIGE9aS5oZWlnaHQrMTtyZXR1cm4gaS54MD1pLnkwPXIsaS54MT10LGkueTE9ZS9hLGkuZWFjaEJlZm9yZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiZ6KG4sbi54MCx0KihuLmRlcHRoKzEpL2Usbi54MSx0KihuLmRlcHRoKzIpL2UpO3ZhciBpPW4ueDAsYT1uLnkwLG89bi54MS1yLHM9bi55MS1yO288aSYmKGk9bz0oaStvKS8yKSxzPGEmJihhPXM9KGErcykvMiksbi54MD1pLG4ueTA9YSxuLngxPW8sbi55MT1zfX0oZSxhKSksbiYmaS5lYWNoQmVmb3JlKEkpLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ISF0LGkpOm59LGkuc2l6ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rclswXSxlPStyWzFdLGkpOlt0LGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsaSk6cn0saX0sdC5zdHJhdGlmeT1mdW5jdGlvbigpe3ZhciB0PVIsZT1GO2Z1bmN0aW9uIHIocil7dmFyIG4saSxhLG8scyx1LGgsZj1yLmxlbmd0aCxwPW5ldyBBcnJheShmKSxkPXt9O2ZvcihpPTA7aTxmOysraSluPXJbaV0scz1wW2ldPW5ldyBjKG4pLG51bGwhPSh1PXQobixpLHIpKSYmKHUrPSIiKSYmKGRbaD0iJCIrKHMuaWQ9dSldPWggaW4gZD9EOnMpO2ZvcihpPTA7aTxmOysraSlpZihzPXBbaV0sbnVsbCE9KHU9ZShyW2ldLGkscikpJiYodSs9IiIpKXtpZighKG89ZFsiJCIrdV0pKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit1KTtpZihvPT09RCl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIit1KTtvLmNoaWxkcmVuP28uY2hpbGRyZW4ucHVzaChzKTpvLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1vfWVsc2V7aWYoYSl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7YT1zfWlmKCFhKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKGEucGFyZW50PU8sYS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1mfSkpLmVhY2hCZWZvcmUobCksYS5wYXJlbnQ9bnVsbCxmPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBhfXJldHVybiByLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU0oZSkscik6dH0sci5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1NKHQpLHIpOmV9LHJ9LHQudHJlZT1mdW5jdGlvbigpe3ZhciB0PUIsZT0xLHI9MSxuPW51bGw7ZnVuY3Rpb24gaShpKXt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPW5ldyBxKHQsMCkscz1bb107ZT1zLnBvcCgpOylpZihuPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkoYT1uLmxlbmd0aCksaT1hLTE7aT49MDstLWkpcy5wdXNoKHI9ZS5jaGlsZHJlbltpXT1uZXcgcShuW2ldLGkpKSxyLnBhcmVudD1lO3JldHVybihvLnBhcmVudD1uZXcgcShudWxsLDApKS5jaGlsZHJlbj1bb10sb30oaSk7aWYobC5lYWNoQWZ0ZXIoYSksbC5wYXJlbnQubT0tbC56LGwuZWFjaEJlZm9yZShvKSxuKWkuZWFjaEJlZm9yZShzKTtlbHNle3ZhciBjPWksdT1pLGg9aTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueDxjLngmJihjPXQpLHQueD51LngmJih1PXQpLHQuZGVwdGg+aC5kZXB0aCYmKGg9dCl9KSk7dmFyIGY9Yz09PXU/MTp0KGMsdSkvMixwPWYtYy54LGQ9ZS8odS54K2YrcCksZz1yLyhoLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueD0odC54K3ApKmQsdC55PXQuZGVwdGgqZ30pKX1yZXR1cm4gaX1mdW5jdGlvbiBhKGUpe3ZhciByPWUuY2hpbGRyZW4sbj1lLnBhcmVudC5jaGlsZHJlbixpPWUuaT9uW2UuaS0xXTpudWxsO2lmKHIpeyFmdW5jdGlvbih0KXtmb3IodmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDstLWE+PTA7KShlPWlbYV0pLnorPXIsZS5tKz1yLHIrPWUucysobis9ZS5jKX0oZSk7dmFyIGE9KHJbMF0ueityW3IubGVuZ3RoLTFdLnopLzI7aT8oZS56PWkueit0KGUuXyxpLl8pLGUubT1lLnotYSk6ZS56PWF9ZWxzZSBpJiYoZS56PWkueit0KGUuXyxpLl8pKTtlLnBhcmVudC5BPWZ1bmN0aW9uKGUscixuKXtpZihyKXtmb3IodmFyIGksYT1lLG89ZSxzPXIsbD1hLnBhcmVudC5jaGlsZHJlblswXSxjPWEubSx1PW8ubSxoPXMubSxmPWwubTtzPWoocyksYT1OKGEpLHMmJmE7KWw9TihsKSwobz1qKG8pKS5hPWUsKGk9cy56K2gtYS56LWMrdChzLl8sYS5fKSk+MCYmKFUoVihzLGUsbiksZSxpKSxjKz1pLHUrPWkpLGgrPXMubSxjKz1hLm0sZis9bC5tLHUrPW8ubTtzJiYhaihvKSYmKG8udD1zLG8ubSs9aC11KSxhJiYhTihsKSYmKGwudD1hLGwubSs9Yy1mLG49ZSl9cmV0dXJuIG59KGUsaSxlLnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBvKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsZT0rdFswXSxyPSt0WzFdLGkpOm4/bnVsbDpbZSxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCxlPSt0WzBdLHI9K3RbMV0saSk6bj9bZSxyXTpudWxsfSxpfSx0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdD1XLGU9ITEscj0xLG49MSxpPVswXSxhPUEsbz1BLHM9QSxsPUEsYz1BO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9cix0LnkxPW4sdC5lYWNoQmVmb3JlKGgpLGk9WzBdLGUmJnQuZWFjaEJlZm9yZShJKSx0fWZ1bmN0aW9uIGgoZSl7dmFyIHI9aVtlLmRlcHRoXSxuPWUueDArcix1PWUueTArcixoPWUueDEtcixmPWUueTEtcjtoPG4mJihuPWg9KG4raCkvMiksZjx1JiYodT1mPSh1K2YpLzIpLGUueDA9bixlLnkwPXUsZS54MT1oLGUueTE9ZixlLmNoaWxkcmVuJiYocj1pW2UuZGVwdGgrMV09YShlKS8yLG4rPWMoZSktcix1Kz1vKGUpLXIsKGgtPXMoZSktcik8biYmKG49aD0obitoKS8yKSwoZi09bChlKS1yKTx1JiYodT1mPSh1K2YpLzIpLHQoZSxuLHUsaCxmKSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LHUpOmV9LHUuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXSxuPSt0WzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9TShlKSx1KTp0fSx1LnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOnUucGFkZGluZ0lubmVyKCl9LHUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UygrdCksdSk6YX0sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTKCt0KSx1KTpvfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOnN9LHUucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTKCt0KSx1KTpjfSx1fSx0LnRyZWVtYXBCaW5hcnk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixsPXMubGVuZ3RoLGM9bmV3IEFycmF5KGwrMSk7Zm9yKGNbMF09bz1hPTA7YTxsOysrYSljW2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyxsKXtpZihlPj1yLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9aSx1LnkwPWEsdS54MT1vLHZvaWQodS55MT1sKX12YXIgaD1jW2VdLGY9bi8yK2gscD1lKzEsZD1yLTE7Zm9yKDtwPGQ7KXt2YXIgZz1wK2Q+Pj4xO2NbZ108Zj9wPWcrMTpkPWd9Zi1jW3AtMV08Y1twXS1mJiZlKzE8cCYmLS1wO3ZhciBtPWNbcF0taCx2PW4tbTtpZihvLWk+bC1hKXt2YXIgeT0oaSp2K28qbSkvbjt0KGUscCxtLGksYSx5LGwpLHQocCxyLHYseSxhLG8sbCl9ZWxzZXt2YXIgeD0oYSp2K2wqbSkvbjt0KGUscCxtLGksYSxvLHgpLHQocCxyLHYsaSx4LG8sbCl9fSgwLGwsdC52YWx1ZSxlLHIsbixpKX0sdC50cmVlbWFwRGljZT16LHQudHJlZW1hcFJlc3F1YXJpZnk9Wix0LnRyZWVtYXBTbGljZT1ILHQudHJlZW1hcFNsaWNlRGljZT1mdW5jdGlvbih0LGUscixuLGkpeygxJnQuZGVwdGg/SDp6KSh0LGUscixuLGkpfSx0LnRyZWVtYXBTcXVhcmlmeT1XLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE2MjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2kocix0KCJkMy1jb2xvciIpKTppKChuPW58fHNlbGYpLmQzPW4uZDN8fHt9LG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSxyLG4saSl7dmFyIGE9dCp0LG89YSp0O3JldHVybigoMS0zKnQrMyphLW8pKmUrKDQtNiphKzMqbykqcisoMSszKnQrMyphLTMqbykqbitvKmkpLzZ9ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksYT10W2ldLG89dFtpKzFdLHM9aT4wP3RbaS0xXToyKmEtbyxsPWk8ZS0xP3RbaSsyXToyKm8tYTtyZXR1cm4gcigobi1pL2UpKmUscyxhLG8sbCl9fWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxhPXRbKGkrZS0xKSVlXSxvPXRbaSVlXSxzPXRbKGkrMSklZV0sbD10WyhpKzIpJWVdO3JldHVybiByKChuLWkvZSkqZSxhLG8scyxsKX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdCtyKmV9fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/byh0LHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6YShpc05hTih0KT9lOnQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIDE9PSh0PSt0KT9jOmZ1bmN0aW9uKGUscil7cmV0dXJuIHItZT9mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9TWF0aC5wb3codCxyKSxlPU1hdGgucG93KGUsciktdCxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCtuKmUscil9fShlLHIsdCk6YShpc05hTihlKT9yOmUpfX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP28odCxyKTphKGlzTmFOKHQpP2U6dCl9dmFyIHU9ZnVuY3Rpb24gdChyKXt2YXIgbj1sKHIpO2Z1bmN0aW9uIGkodCxyKXt2YXIgaT1uKCh0PWUucmdiKHQpKS5yLChyPWUucmdiKHIpKS5yKSxhPW4odC5nLHIuZyksbz1uKHQuYixyLmIpLHM9Yyh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1hKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1zKGUpLHQrIiJ9fXJldHVybiBpLmdhbW1hPXQsaX0oMSk7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG4saSxhPXIubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpO2ZvcihuPTA7bjxhOysrbilpPWUucmdiKHJbbl0pLG9bbl09aS5yfHwwLHNbbl09aS5nfHwwLGxbbl09aS5ifHwwO3JldHVybiBvPXQobykscz10KHMpLGw9dChsKSxpLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gaS5yPW8odCksaS5nPXModCksaS5iPWwodCksaSsiIn19fXZhciBmPWgobikscD1oKGkpO2Z1bmN0aW9uIGQodCxlKXtlfHwoZT1bXSk7dmFyIHIsbj10P01hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKTowLGk9ZS5zbGljZSgpO3JldHVybiBmdW5jdGlvbihhKXtmb3Iocj0wO3I8bjsrK3IpaVtyXT10W3JdKigxLWEpK2Vbcl0qYTtyZXR1cm4gaX19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9ZnVuY3Rpb24gbSh0LGUpe3ZhciByLG49ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihuLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KG4pO2ZvcihyPTA7cjxpOysrcilhW3JdPVQodFtyXSxlW3JdKTtmb3IoO3I8bjsrK3Ipb1tyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8aTsrK3Ipb1tyXT1hW3JdKHQpO3JldHVybiBvfX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gci5zZXRUaW1lKHQqKDEtbikrZSpuKSxyfX1mdW5jdGlvbiB5KHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gdCooMS1yKStlKnJ9fWZ1bmN0aW9uIHgodCxlKXt2YXIgcixuPXt9LGk9e307Zm9yKHIgaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKXIgaW4gdD9uW3JdPVQodFtyXSxlW3JdKTppW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyIGluIG4paVtyXT1uW3JdKHQpO3JldHVybiBpfX12YXIgYj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csXz1uZXcgUmVnRXhwKGIuc291cmNlLCJnIik7ZnVuY3Rpb24gdyh0LGUpe3ZhciByLG4saSxhPWIubGFzdEluZGV4PV8ubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhyPWIuZXhlYyh0KSkmJihuPV8uZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OnkocixuKX0pKSxhPV8ubGFzdEluZGV4O3JldHVybiBhPGUubGVuZ3RoJiYoaT1lLnNsaWNlKGEpLHNbb10/c1tvXSs9aTpzWysrb109aSkscy5sZW5ndGg8Mj9sWzBdP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KGxbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShlKTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIHIsbj0wO248ZTsrK24pc1socj1sW25dKS5pXT1yLngodCk7cmV0dXJuIHMuam9pbigiIil9KX1mdW5jdGlvbiBUKHQscil7dmFyIG4saT10eXBlb2YgcjtyZXR1cm4gbnVsbD09cnx8ImJvb2xlYW4iPT09aT9hKHIpOigibnVtYmVyIj09PWk/eToic3RyaW5nIj09PWk/KG49ZS5jb2xvcihyKSk/KHI9bix1KTp3OnIgaW5zdGFuY2VvZiBlLmNvbG9yP3U6ciBpbnN0YW5jZW9mIERhdGU/djpnKHIpP2Q6QXJyYXkuaXNBcnJheShyKT9tOiJmdW5jdGlvbiIhPXR5cGVvZiByLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiByLnRvU3RyaW5nfHxpc05hTihyKT94OnkpKHQscil9dmFyIGssTSxBLFMsRT0xODAvTWF0aC5QSSxDPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIEwodCxlLHIsbixpLGEpe3ZhciBvLHMsbDtyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwobD10KnIrZSpuKSYmKHItPXQqbCxuLT1lKmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksdCpuPGUqciYmKHQ9LXQsZT0tZSxsPS1sLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqRSxza2V3WDpNYXRoLmF0YW4obCkqRSxzY2FsZVg6byxzY2FsZVk6c319ZnVuY3Rpb24gUCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcz1bXSxsPVtdO3JldHVybiBhPXQoYSksbz10KG8pLGZ1bmN0aW9uKHQsbixpLGEsbyxzKXtpZih0IT09aXx8biE9PWEpe3ZhciBsPW8ucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwscik7cy5wdXNoKHtpOmwtNCx4OnkodCxpKX0se2k6bC0yLHg6eShuLGEpfSl9ZWxzZShpfHxhKSYmby5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrYStyKX0oYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLHMsbCksZnVuY3Rpb24odCxlLHIsYSl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLGEucHVzaCh7aTpyLnB1c2goaShyKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6eSh0LGUpfSkpOmUmJnIucHVzaChpKHIpKyJyb3RhdGUoIitlK24pfShhLnJvdGF0ZSxvLnJvdGF0ZSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lP2EucHVzaCh7aTpyLnB1c2goaShyKSsic2tld1goIixudWxsLG4pLTIseDp5KHQsZSl9KTplJiZyLnB1c2goaShyKSsic2tld1goIitlK24pfShhLnNrZXdYLG8uc2tld1gscyxsKSxmdW5jdGlvbih0LGUscixuLGEsbyl7aWYodCE9PXJ8fGUhPT1uKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OnkodCxyKX0se2k6cy0yLHg6eShlLG4pfSl9ZWxzZSAxPT09ciYmMT09PW58fGEucHVzaChpKGEpKyJzY2FsZSgiK3IrIiwiK24rIikiKX0oYS5zY2FsZVgsYS5zY2FsZVksby5zY2FsZVgsby5zY2FsZVkscyxsKSxhPW89bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPWwubGVuZ3RoOysrcjxuOylzWyhlPWxbcl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBJPVAoKGZ1bmN0aW9uKHQpe3JldHVybiJub25lIj09PXQ/Qzooa3x8KGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksTT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQT1kb2N1bWVudC5kZWZhdWx0Vmlldyksay5zdHlsZS50cmFuc2Zvcm09dCx0PUEuZ2V0Q29tcHV0ZWRTdHlsZShNLmFwcGVuZENoaWxkKGspLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLE0ucmVtb3ZlQ2hpbGQoayksTCgrKHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpKVswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSksInB4LCAiLCJweCkiLCJkZWcpIiksej1QKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9DOihTfHwoUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxTLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1TLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP0woKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6Qyl9KSwiLCAiLCIpIiwiKSIpLE89TWF0aC5TUVJUMjtmdW5jdGlvbiBEKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIFIodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhzbChyKSkuaCwobj1lLmhzbChuKSkuaCksYT1jKHIucyxuLnMpLG89YyhyLmwsbi5sKSxzPWMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLnM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9cyh0KSxyKyIifX19dmFyIEY9UihzKSxCPVIoYyk7ZnVuY3Rpb24gTih0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT10KChyPWUuaGNsKHIpKS5oLChuPWUuaGNsKG4pKS5oKSxhPWMoci5jLG4uYyksbz1jKHIubCxuLmwpLHM9YyhyLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1pKHQpLHIuYz1hKHQpLHIubD1vKHQpLHIub3BhY2l0eT1zKHQpLHIrIiJ9fX12YXIgaj1OKHMpLFU9TihjKTtmdW5jdGlvbiBWKHQpe3JldHVybiBmdW5jdGlvbiByKG4pe2Z1bmN0aW9uIGkocixpKXt2YXIgYT10KChyPWUuY3ViZWhlbGl4KHIpKS5oLChpPWUuY3ViZWhlbGl4KGkpKS5oKSxvPWMoci5zLGkucykscz1jKHIubCxpLmwpLGw9YyhyLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1hKHQpLHIucz1vKHQpLHIubD1zKE1hdGgucG93KHQsbikpLHIub3BhY2l0eT1sKHQpLHIrIiJ9fXJldHVybiBuPStuLGkuZ2FtbWE9cixpfSgxKX12YXIgcT1WKHMpLEg9VihjKTt0LmludGVycG9sYXRlPVQsdC5pbnRlcnBvbGF0ZUFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGcoZSk/ZDptKSh0LGUpfSx0LmludGVycG9sYXRlQmFzaXM9bix0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9aSx0LmludGVycG9sYXRlQ3ViZWhlbGl4PXEsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc9SCx0LmludGVycG9sYXRlRGF0ZT12LHQuaW50ZXJwb2xhdGVEaXNjcmV0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihyKmUpKSldfX0sdC5pbnRlcnBvbGF0ZUhjbD1qLHQuaW50ZXJwb2xhdGVIY2xMb25nPVUsdC5pbnRlcnBvbGF0ZUhzbD1GLHQuaW50ZXJwb2xhdGVIc2xMb25nPUIsdC5pbnRlcnBvbGF0ZUh1ZT1mdW5jdGlvbih0LGUpe3ZhciByPXMoK3QsK2UpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1yKHQpO3JldHVybiBlLTM2MCpNYXRoLmZsb29yKGUvMzYwKX19LHQuaW50ZXJwb2xhdGVMYWI9ZnVuY3Rpb24odCxyKXt2YXIgbj1jKCh0PWUubGFiKHQpKS5sLChyPWUubGFiKHIpKS5sKSxpPWModC5hLHIuYSksYT1jKHQuYixyLmIpLG89Yyh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fSx0LmludGVycG9sYXRlTnVtYmVyPXksdC5pbnRlcnBvbGF0ZU51bWJlckFycmF5PWQsdC5pbnRlcnBvbGF0ZU9iamVjdD14LHQuaW50ZXJwb2xhdGVSZ2I9dSx0LmludGVycG9sYXRlUmdiQmFzaXM9Zix0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9cCx0LmludGVycG9sYXRlUm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtcikrZSpyKX19LHQuaW50ZXJwb2xhdGVTdHJpbmc9dyx0LmludGVycG9sYXRlVHJhbnNmb3JtQ3NzPUksdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Zz16LHQuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxoPWwtYSxmPXUqdStoKmg7aWYoZjwxZS0xMiluPU1hdGgubG9nKGMvbykvTyxyPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqdSxhK3QqaCxvKk1hdGguZXhwKE8qdCpuKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KGYpLGQ9KGMqYy1vKm8rNCpmKS8oMipvKjIqcCksZz0oYypjLW8qby00KmYpLygyKmMqMipwKSxtPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksdj1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO249KHYtbSkvTyxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9RChtKSxsPW8vKDIqcCkqKHMqKGU9TypyK20sKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpKS1mdW5jdGlvbih0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0obSkpO3JldHVybltpK2wqdSxhK2wqaCxvKnMvRChPKnIrbSldfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSx0LnBpZWNld2lzZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sYT1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylhW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4obi0xLE1hdGguZmxvb3IodCo9bikpKTtyZXR1cm4gYVtlXSh0LWUpfX0sdC5xdWFudGl6ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10KG4vKGUtMSkpO3JldHVybiByfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtY29sb3IiOjE1OH1dLDE2MzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT1NYXRoLlBJLHI9MiplLG49ci0xZS02O2Z1bmN0aW9uIGkoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBhKCl7cmV0dXJuIG5ldyBpfWkucHJvdG90eXBlPWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjppLG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUscixuKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K2EpfSxhcmNUbzpmdW5jdGlvbih0LHIsbixpLGEpe3Q9K3Qscj0rcixuPStuLGk9K2ksYT0rYTt2YXIgbz10aGlzLl94MSxzPXRoaXMuX3kxLGw9bi10LGM9aS1yLHU9by10LGg9cy1yLGY9dSp1K2gqaDtpZihhPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrYSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPXIpO2Vsc2UgaWYoZj4xZS02KWlmKE1hdGguYWJzKGgqbC1jKnUpPjFlLTYmJmEpe3ZhciBwPW4tbyxkPWktcyxnPWwqbCtjKmMsbT1wKnArZCpkLHY9TWF0aC5zcXJ0KGcpLHk9TWF0aC5zcXJ0KGYpLHg9YSpNYXRoLnRhbigoZS1NYXRoLmFjb3MoKGcrZi1tKS8oMip2KnkpKSkvMiksYj14L3ksXz14L3Y7TWF0aC5hYnMoYi0xKT4xZS02JiYodGhpcy5fKz0iTCIrKHQrYip1KSsiLCIrKHIrYipoKSksdGhpcy5fKz0iQSIrYSsiLCIrYSsiLDAsMCwiKyArKGgqcD51KmQpKyIsIisodGhpcy5feDE9dCtfKmwpKyIsIisodGhpcy5feTE9citfKmMpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9cik7ZWxzZTt9LGFyYzpmdW5jdGlvbih0LGksYSxvLHMsbCl7dD0rdCxpPStpLGw9ISFsO3ZhciBjPShhPSthKSpNYXRoLmNvcyhvKSx1PWEqTWF0aC5zaW4obyksaD10K2MsZj1pK3UscD0xXmwsZD1sP28tczpzLW87aWYoYTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2EpO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIitoKyIsIitmOihNYXRoLmFicyh0aGlzLl94MS1oKT4xZS02fHxNYXRoLmFicyh0aGlzLl95MS1mKT4xZS02KSYmKHRoaXMuXys9IkwiK2grIiwiK2YpLGEmJihkPDAmJihkPWQlcityKSxkPm4/dGhpcy5fKz0iQSIrYSsiLCIrYSsiLDAsMSwiK3ArIiwiKyh0LWMpKyIsIisoaS11KSsiQSIrYSsiLCIrYSsiLDAsMSwiK3ArIiwiKyh0aGlzLl94MT1oKSsiLCIrKHRoaXMuX3kxPWYpOmQ+MWUtNiYmKHRoaXMuXys9IkEiK2ErIiwiK2ErIiwwLCIrICsoZD49ZSkrIiwiK3ArIiwiKyh0aGlzLl94MT10K2EqTWF0aC5jb3MocykpKyIsIisodGhpcy5feTE9aSthKk1hdGguc2luKHMpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319LHQucGF0aD1hLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE2NDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSxyLG4pe2lmKGlzTmFOKGUpfHxpc05hTihyKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxsLGMsdSxoLGYscD10Ll9yb290LGQ9e2RhdGE6bn0sZz10Ll94MCxtPXQuX3kwLHY9dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1kLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KGE9KGcrdikvMikpP2c9YTp2PWEsKHU9cj49KG89KG0reSkvMikpP209bzp5PW8saT1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIGlbaF09ZCx0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmcj09PWwpcmV0dXJuIGQubmV4dD1wLGk/aVtoXT1kOnQuX3Jvb3Q9ZCx0O2Rve2k9aT9pW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0oYT0oZyt2KS8yKSk/Zz1hOnY9YSwodT1yPj0obz0obSt5KS8yKSk/bT1vOnk9b313aGlsZSgoaD11PDwxfGMpPT0oZj0obD49byk8PDF8cz49YSkpO3JldHVybiBpW2ZdPXAsaVtoXT1kLHR9ZnVuY3Rpb24gcih0LGUscixuLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX1mdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gYSh0LGUscil7dmFyIGE9bmV3IG8obnVsbD09ZT9uOmUsbnVsbD09cj9pOnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9hOmEuYWRkQWxsKHQpfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LHI9ZTt0PXQubmV4dDspcj1yLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgbD1hLnByb3RvdHlwZT1vLnByb3RvdHlwZTtsLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9bmV3IG8odGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxuPXRoaXMuX3Jvb3Q7aWYoIW4pcmV0dXJuIHI7aWYoIW4ubGVuZ3RoKXJldHVybiByLl9yb290PXMobikscjtmb3IodD1be3NvdXJjZTpuLHRhcmdldDpyLl9yb290PW5ldyBBcnJheSg0KX1dO249dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1uLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpuLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpuLnRhcmdldFtpXT1zKGUpKTtyZXR1cm4gcn0sbC5hZGQ9ZnVuY3Rpb24odCl7dmFyIHI9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBlKHRoaXMuY292ZXIocixuKSxyLG4sdCl9LGwuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciByLG4saSxhLG89dC5sZW5ndGgscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0xLzAsdT0xLzAsaD0tMS8wLGY9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwscj10W25dKSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHIpKXx8KHNbbl09aSxsW25dPWEsaTxjJiYoYz1pKSxpPmgmJihoPWkpLGE8dSYmKHU9YSksYT5mJiYoZj1hKSk7aWYoYz5ofHx1PmYpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuY292ZXIoYyx1KS5jb3ZlcihoLGYpLG49MDtuPG87KytuKWUodGhpcyxzW25dLGxbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LGwuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy5feDAsbj10aGlzLl95MCxpPXRoaXMuX3gxLGE9dGhpcy5feTE7aWYoaXNOYU4ocikpaT0ocj1NYXRoLmZsb29yKHQpKSsxLGE9KG49TWF0aC5mbG9vcihlKSkrMTtlbHNle2Zvcih2YXIgbyxzLGw9aS1yLGM9dGhpcy5fcm9vdDtyPnR8fHQ+PWl8fG4+ZXx8ZT49YTspc3dpdGNoKHM9KGU8bik8PDF8dDxyLChvPW5ldyBBcnJheSg0KSlbc109YyxjPW8sbCo9MixzKXtjYXNlIDA6aT1yK2wsYT1uK2w7YnJlYWs7Y2FzZSAxOnI9aS1sLGE9bitsO2JyZWFrO2Nhc2UgMjppPXIrbCxuPWEtbDticmVhaztjYXNlIDM6cj1pLWwsbj1hLWx9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXN9LGwuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSkpLHR9LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxsLmZpbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGg9dGhpcy5feDAsZj10aGlzLl95MCxwPXRoaXMuX3gxLGQ9dGhpcy5feTEsZz1bXSxtPXRoaXMuX3Jvb3Q7Zm9yKG0mJmcucHVzaChuZXcgcihtLGgsZixwLGQpKSxudWxsPT1uP249MS8wOihoPXQtbixmPWUtbixwPXQrbixkPWUrbixuKj1uKTtjPWcucG9wKCk7KWlmKCEoIShtPWMubm9kZSl8fChhPWMueDApPnB8fChvPWMueTApPmR8fChzPWMueDEpPGh8fChsPWMueTEpPGYpKWlmKG0ubGVuZ3RoKXt2YXIgdj0oYStzKS8yLHk9KG8rbCkvMjtnLnB1c2gobmV3IHIobVszXSx2LHkscyxsKSxuZXcgcihtWzJdLGEseSx2LGwpLG5ldyByKG1bMV0sdixvLHMseSksbmV3IHIobVswXSxhLG8sdix5KSksKHU9KGU+PXkpPDwxfHQ+PXYpJiYoYz1nW2cubGVuZ3RoLTFdLGdbZy5sZW5ndGgtMV09Z1tnLmxlbmd0aC0xLXVdLGdbZy5sZW5ndGgtMS11XT1jKX1lbHNle3ZhciB4PXQtK3RoaXMuX3guY2FsbChudWxsLG0uZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCxtLmRhdGEpLF89eCp4K2IqYjtpZihfPG4pe3ZhciB3PU1hdGguc3FydChuPV8pO2g9dC13LGY9ZS13LHA9dCt3LGQ9ZSt3LGk9bS5kYXRhfX1yZXR1cm4gaX0sbC5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4oYT0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHA9dGhpcy5fcm9vdCxkPXRoaXMuX3gwLGc9dGhpcy5feTAsbT10aGlzLl94MSx2PXRoaXMuX3kxO2lmKCFwKXJldHVybiB0aGlzO2lmKHAubGVuZ3RoKWZvcig7Oyl7aWYoKGM9YT49KHM9KGQrbSkvMikpP2Q9czptPXMsKHU9bz49KGw9KGcrdikvMikpP2c9bDp2PWwsZT1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIHRoaXM7aWYoIXAubGVuZ3RoKWJyZWFrOyhlW2grMSYzXXx8ZVtoKzImM118fGVbaCszJjNdKSYmKHI9ZSxmPWgpfWZvcig7cC5kYXRhIT09dDspaWYobj1wLCEocD1wLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPXAubmV4dCkmJmRlbGV0ZSBwLm5leHQsbj8oaT9uLm5leHQ9aTpkZWxldGUgbi5uZXh0LHRoaXMpOmU/KGk/ZVtoXT1pOmRlbGV0ZSBlW2hdLChwPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZwPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhcC5sZW5ndGgmJihyP3JbZl09cDp0aGlzLl9yb290PXApLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LGwucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sbC5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGwuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSkpLHR9LGwudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixpLGEsbyxzLGw9W10sYz10aGlzLl9yb290O2ZvcihjJiZsLnB1c2gobmV3IHIoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bC5wb3AoKTspaWYoIXQoYz1lLm5vZGUsaT1lLngwLGE9ZS55MCxvPWUueDEscz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShpK28pLzIsaD0oYStzKS8yOyhuPWNbM10pJiZsLnB1c2gobmV3IHIobix1LGgsbyxzKSksKG49Y1syXSkmJmwucHVzaChuZXcgcihuLGksaCx1LHMpKSwobj1jWzFdKSYmbC5wdXNoKG5ldyByKG4sdSxhLG8saCkpLChuPWNbMF0pJiZsLnB1c2gobmV3IHIobixpLGEsdSxoKSl9cmV0dXJuIHRoaXN9LGwudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLGk9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgcih0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGE9ZS5ub2RlO2lmKGEubGVuZ3RoKXt2YXIgbyxzPWUueDAsbD1lLnkwLGM9ZS54MSx1PWUueTEsaD0ocytjKS8yLGY9KGwrdSkvMjsobz1hWzBdKSYmbi5wdXNoKG5ldyByKG8scyxsLGgsZikpLChvPWFbMV0pJiZuLnB1c2gobmV3IHIobyxoLGwsYyxmKSksKG89YVsyXSkmJm4ucHVzaChuZXcgcihvLHMsZixoLHUpKSwobz1hWzNdKSYmbi5wdXNoKG5ldyByKG8saCxmLGMsdSkpfWkucHVzaChlKX1mb3IoO2U9aS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9LHQucXVhZHRyZWU9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNjU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9pKHIsdCgiZDMtcGF0aCIpKTppKChuPW58fHNlbGYpLmQzPW4uZDN8fHt9LG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgbj1NYXRoLmFicyxpPU1hdGguYXRhbjIsYT1NYXRoLmNvcyxvPU1hdGgubWF4LHM9TWF0aC5taW4sbD1NYXRoLnNpbixjPU1hdGguc3FydCx1PU1hdGguUEksaD11LzIsZj0yKnU7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdD4xPzA6dDwtMT91Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBkKHQpe3JldHVybiB0Pj0xP2g6dDw9LTE/LWg6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiB2KHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiB4KHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIGIodCxlLHIsbixpLGEsbyxzKXt2YXIgbD1yLXQsYz1uLWUsdT1vLWksaD1zLWEsZj1oKmwtdSpjO2lmKCEoZipmPDFlLTEyKSlyZXR1cm5bdCsoZj0odSooZS1hKS1oKih0LWkpKS9mKSpsLGUrZipjXX1mdW5jdGlvbiBfKHQsZSxyLG4saSxhLHMpe3ZhciBsPXQtcix1PWUtbixoPShzP2E6LWEpL2MobCpsK3UqdSksZj1oKnUscD0taCpsLGQ9dCtmLGc9ZStwLG09citmLHY9bitwLHk9KGQrbSkvMix4PShnK3YpLzIsYj1tLWQsXz12LWcsdz1iKmIrXypfLFQ9aS1hLGs9ZCp2LW0qZyxNPShfPDA/LTE6MSkqYyhvKDAsVCpUKnctayprKSksQT0oaypfLWIqTSkvdyxTPSgtaypiLV8qTSkvdyxFPShrKl8rYipNKS93LEM9KC1rKmIrXypNKS93LEw9QS15LFA9Uy14LEk9RS15LHo9Qy14O3JldHVybiBMKkwrUCpQPkkqSSt6KnomJihBPUUsUz1DKSx7Y3g6QSxjeTpTLHgwMTotZix5MDE6LXAseDExOkEqKGkvVC0xKSx5MTE6UyooaS9ULTEpfX1mdW5jdGlvbiB3KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBUKHQpe3JldHVybiBuZXcgdyh0KX1mdW5jdGlvbiBrKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIE0odCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gQSgpe3ZhciB0PWssbj1NLGk9cighMCksYT1udWxsLG89VCxzPW51bGw7ZnVuY3Rpb24gbChyKXt2YXIgbCxjLHUsaD1yLmxlbmd0aCxmPSExO2ZvcihudWxsPT1hJiYocz1vKHU9ZS5wYXRoKCkpKSxsPTA7bDw9aDsrK2wpIShsPGgmJmkoYz1yW2xdLGwscikpPT09ZiYmKChmPSFmKT9zLmxpbmVTdGFydCgpOnMubGluZUVuZCgpKSxmJiZzLnBvaW50KCt0KGMsbCxyKSwrbihjLGwscikpO2lmKHUpcmV0dXJuIHM9bnVsbCx1KyIifHxudWxsfXJldHVybiBsLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxsKTp0fSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxsKTpufSxsLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCEhdCksbCk6aX0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG51bGwhPWEmJihzPW8oYSkpLGwpOm99LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPW8oYT10KSxsKTphfSxsfWZ1bmN0aW9uIFMoKXt2YXIgdD1rLG49bnVsbCxpPXIoMCksYT1NLG89cighMCkscz1udWxsLGw9VCxjPW51bGw7ZnVuY3Rpb24gdShyKXt2YXIgdSxoLGYscCxkLGc9ci5sZW5ndGgsbT0hMSx2PW5ldyBBcnJheShnKSx5PW5ldyBBcnJheShnKTtmb3IobnVsbD09cyYmKGM9bChkPWUucGF0aCgpKSksdT0wO3U8PWc7Kyt1KXtpZighKHU8ZyYmbyhwPXJbdV0sdSxyKSk9PT1tKWlmKG09IW0paD11LGMuYXJlYVN0YXJ0KCksYy5saW5lU3RhcnQoKTtlbHNle2ZvcihjLmxpbmVFbmQoKSxjLmxpbmVTdGFydCgpLGY9dS0xO2Y+PWg7LS1mKWMucG9pbnQodltmXSx5W2ZdKTtjLmxpbmVFbmQoKSxjLmFyZWFFbmQoKX1tJiYodlt1XT0rdChwLHUscikseVt1XT0raShwLHUsciksYy5wb2ludChuPytuKHAsdSxyKTp2W3VdLGE/K2EocCx1LHIpOnlbdV0pKX1pZihkKXJldHVybiBjPW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiBoKCl7cmV0dXJuIEEoKS5kZWZpbmVkKG8pLmN1cnZlKGwpLmNvbnRleHQocyl9cmV0dXJuIHUueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLG49bnVsbCx1KTp0fSx1LngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSksdSk6dH0sdS54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSx1KTpufSx1Lnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxhPW51bGwsdSk6aX0sdS55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHUpOml9LHUueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksdSk6YX0sdS5saW5lWDA9dS5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gaCgpLngodCkueShpKX0sdS5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gaCgpLngodCkueShhKX0sdS5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gaCgpLngobikueShpKX0sdS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cighIXQpLHUpOm99LHUuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxudWxsIT1zJiYoYz1sKHMpKSx1KTpsfSx1LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cz1jPW51bGw6Yz1sKHM9dCksdSk6c30sdX1mdW5jdGlvbiBFKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfWZ1bmN0aW9uIEModCl7cmV0dXJuIHR9dy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX19fTt2YXIgTD1JKFQpO2Z1bmN0aW9uIFAodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBJKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIG5ldyBQKHQoZSkpfXJldHVybiBlLl9jdXJ2ZT10LGV9ZnVuY3Rpb24geih0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShJKHQpKTplKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIE8oKXtyZXR1cm4geihBKCkuY3VydmUoTCkpfWZ1bmN0aW9uIEQoKXt2YXIgdD1TKCkuY3VydmUoTCksZT10LmN1cnZlLHI9dC5saW5lWDAsbj10LmxpbmVYMSxpPXQubGluZVkwLGE9dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiB6KHIoKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiB6KG4oKSl9LGRlbGV0ZSB0LmxpbmVYMSx0LmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiB6KGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiB6KGEoKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoSSh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuWyhlPStlKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLGUqTWF0aC5zaW4odCldfVAucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgRj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gQih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gTih0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gaih0KXt2YXIgbj1CLGk9TixhPWssbz1NLHM9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIHIsbD1GLmNhbGwoYXJndW1lbnRzKSxjPW4uYXBwbHkodGhpcyxsKSx1PWkuYXBwbHkodGhpcyxsKTtpZihzfHwocz1yPWUucGF0aCgpKSx0KHMsK2EuYXBwbHkodGhpcywobFswXT1jLGwpKSwrby5hcHBseSh0aGlzLGwpLCthLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK28uYXBwbHkodGhpcyxsKSkscilyZXR1cm4gcz1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIGwuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbCk6bn0sbC50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxsKTppfSxsLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxsKTphfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxsKTpvfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsbCk6c30sbH1mdW5jdGlvbiBVKHQsZSxyLG4saSl7dC5tb3ZlVG8oZSxyKSx0LmJlemllckN1cnZlVG8oZT0oZStuKS8yLHIsZSxpLG4saSl9ZnVuY3Rpb24gVih0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGUscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIHEodCxlLHIsbixpKXt2YXIgYT1SKGUsciksbz1SKGUscj0ocitpKS8yKSxzPVIobixyKSxsPVIobixpKTt0Lm1vdmVUbyhhWzBdLGFbMV0pLHQuYmV6aWVyQ3VydmVUbyhvWzBdLG9bMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9dmFyIEg9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS91KTt0Lm1vdmVUbyhyLDApLHQuYXJjKDAsMCxyLDAsZil9fSxHPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvNSkvMjt0Lm1vdmVUbygtMypyLC1yKSx0LmxpbmVUbygtciwtciksdC5saW5lVG8oLXIsLTMqciksdC5saW5lVG8ociwtMypyKSx0LmxpbmVUbyhyLC1yKSx0LmxpbmVUbygzKnIsLXIpLHQubGluZVRvKDMqcixyKSx0LmxpbmVUbyhyLHIpLHQubGluZVRvKHIsMypyKSx0LmxpbmVUbygtciwzKnIpLHQubGluZVRvKC1yLHIpLHQubGluZVRvKC0zKnIsciksdC5jbG9zZVBhdGgoKX19LFk9TWF0aC5zcXJ0KDEvMyksVz0yKlksWj17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL1cpLG49cipZO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4sMCksdC5saW5lVG8oMCxyKSx0LmxpbmVUbygtbiwwKSx0LmNsb3NlUGF0aCgpfX0sWD1NYXRoLnNpbih1LzEwKS9NYXRoLnNpbig3KnUvMTApLEo9TWF0aC5zaW4oZi8xMCkqWCxLPS1NYXRoLmNvcyhmLzEwKSpYLFE9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqZSksbj1KKnIsaT1LKnI7dC5tb3ZlVG8oMCwtciksdC5saW5lVG8obixpKTtmb3IodmFyIGE9MTthPDU7KythKXt2YXIgbz1mKmEvNSxzPU1hdGguY29zKG8pLGw9TWF0aC5zaW4obyk7dC5saW5lVG8obCpyLC1zKnIpLHQubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9dC5jbG9zZVBhdGgoKX19LCQ9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZSksbj0tci8yO3QucmVjdChuLG4scixyKX19LHR0PU1hdGguc3FydCgzKSxldD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPS1NYXRoLnNxcnQoZS8oMyp0dCkpO3QubW92ZVRvKDAsMipyKSx0LmxpbmVUbygtdHQqciwtciksdC5saW5lVG8odHQqciwtciksdC5jbG9zZVBhdGgoKX19LHJ0PS0uNSxudD1NYXRoLnNxcnQoMykvMixpdD0xL01hdGguc3FydCgxMiksYXQ9MyooaXQvMisxKSxvdD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL2F0KSxuPXIvMixpPXIqaXQsYT1uLG89cippdCtyLHM9LWEsbD1vO3QubW92ZVRvKG4saSksdC5saW5lVG8oYSxvKSx0LmxpbmVUbyhzLGwpLHQubGluZVRvKHJ0Km4tbnQqaSxudCpuK3J0KmkpLHQubGluZVRvKHJ0KmEtbnQqbyxudCphK3J0Km8pLHQubGluZVRvKHJ0KnMtbnQqbCxudCpzK3J0KmwpLHQubGluZVRvKHJ0Km4rbnQqaSxydCppLW50Km4pLHQubGluZVRvKHJ0KmErbnQqbyxydCpvLW50KmEpLHQubGluZVRvKHJ0KnMrbnQqbCxydCpsLW50KnMpLHQuY2xvc2VQYXRoKCl9fSxzdD1bSCxHLFosJCxRLGV0LG90XTtmdW5jdGlvbiBsdCgpe31mdW5jdGlvbiBjdCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErcikvNil9ZnVuY3Rpb24gdXQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGh0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBmdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gcHQodCxlKXt0aGlzLl9iYXNpcz1uZXcgdXQodCksdGhpcy5fYmV0YT1lfXV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6Y3QodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6Y3QodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LGh0LnByb3RvdHlwZT17YXJlYVN0YXJ0Omx0LGFyZWFFbmQ6bHQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0OmN0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmN0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxwdC5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGgtMTtpZihyPjApZm9yKHZhciBuLGk9dFswXSxhPWVbMF0sbz10W3JdLWkscz1lW3JdLWEsbD0tMTsrK2w8PXI7KW49bC9yLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtsXSsoMS10aGlzLl9iZXRhKSooaStuKm8pLHRoaXMuX2JldGEqZVtsXSsoMS10aGlzLl9iZXRhKSooYStuKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIGR0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gMT09PWU/bmV3IHV0KHQpOm5ldyBwdCh0LGUpfXJldHVybiByLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguODUpO2Z1bmN0aW9uIGd0KHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1yKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gbXQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fW10LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpndCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6Z3QodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciB2dD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyBtdCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiB5dCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9eXQucHJvdG90eXBlPXthcmVhU3RhcnQ6bHQsYXJlYUVuZDpsdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0Omd0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgeHQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgeXQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24gYnQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Omd0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgX3Q9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgYnQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24gd3QodCxlLHIpe3ZhciBuPXQuX3gxLGk9dC5feTEsYT10Ll94MixvPXQuX3kyO2lmKHQuX2wwMV9hPjFlLTEyKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtuPShuKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvbCxpPShpKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvbH1pZih0Ll9sMjNfYT4xZS0xMil7dmFyIGM9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsdT0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7YT0oYSpjK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvdSxvPShvKmMrdC5feTEqdC5fbDIzXzJhLXIqdC5fbDEyXzJhKS91fXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuLGksYSxvLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBUdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVR0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6d3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIga3Q9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBUdCh0LGUpOm5ldyBtdCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIE10KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9TXQucHJvdG90eXBlPXthcmVhU3RhcnQ6bHQsYXJlYUVuZDpsdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDp3dCh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBBdD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/bmV3IE10KHQsZSk6bmV3IHl0KHQsMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguNSk7ZnVuY3Rpb24gU3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1TdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6d3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgRXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBTdCh0LGUpOm5ldyBidCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIEN0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBMdCh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gUHQodCxlLHIpe3ZhciBuPXQuX3gxLXQuX3gwLGk9ZS10Ll94MSxhPSh0Ll95MS10Ll95MCkvKG58fGk8MCYmLTApLG89KHItdC5feTEpLyhpfHxuPDAmJi0wKSxzPShhKmkrbypuKS8obitpKTtyZXR1cm4oTHQoYSkrTHQobykpKk1hdGgubWluKE1hdGguYWJzKGEpLE1hdGguYWJzKG8pLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBJdCh0LGUpe3ZhciByPXQuX3gxLXQuX3gwO3JldHVybiByPygzKih0Ll95MS10Ll95MCkvci1lKS8yOmV9ZnVuY3Rpb24genQodCxlLHIpe3ZhciBuPXQuX3gwLGk9dC5feTAsYT10Ll94MSxvPXQuX3kxLHM9KGEtbikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8obitzLGkrcyplLGEtcyxvLXMqcixhLG8pfWZ1bmN0aW9uIE90KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBEdCh0KXt0aGlzLl9jb250ZXh0PW5ldyBSdCh0KX1mdW5jdGlvbiBSdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRnQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEJ0KHQpe3ZhciBlLHIsbj10Lmxlbmd0aC0xLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pO2ZvcihpWzBdPTAsYVswXT0yLG9bMF09dFswXSsyKnRbMV0sZT0xO2U8bi0xOysrZSlpW2VdPTEsYVtlXT00LG9bZV09NCp0W2VdKzIqdFtlKzFdO2ZvcihpW24tMV09MixhW24tMV09NyxvW24tMV09OCp0W24tMV0rdFtuXSxlPTE7ZTxuOysrZSlyPWlbZV0vYVtlLTFdLGFbZV0tPXIsb1tlXS09cipvW2UtMV07Zm9yKGlbbi0xXT1vW24tMV0vYVtuLTFdLGU9bi0yO2U+PTA7LS1lKWlbZV09KG9bZV0taVtlKzFdKS9hW2VdO2ZvcihhW24tMV09KHRbbl0raVtuLTFdKS8yLGU9MDtlPG4tMTsrK2UpYVtlXT0yKnRbZSsxXS1pW2UrMV07cmV0dXJuW2ksYV19ZnVuY3Rpb24gTnQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uIGp0KHQsZSl7aWYoKGk9dC5sZW5ndGgpPjEpZm9yKHZhciByLG4saSxhPTEsbz10W2VbMF1dLHM9by5sZW5ndGg7YTxpOysrYSlmb3Iobj1vLG89dFtlW2FdXSxyPTA7cjxzOysrcilvW3JdWzFdKz1vW3JdWzBdPWlzTmFOKG5bcl1bMV0pP25bcl1bMF06bltyXVsxXX1mdW5jdGlvbiBVdCh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7LS1lPj0wOylyW2VdPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gVnQodCxlKXtyZXR1cm4gdFtlXX1mdW5jdGlvbiBxdCh0KXt2YXIgZT10Lm1hcChIdCk7cmV0dXJuIFV0KHQpLnNvcnQoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGVbdF0tZVtyXX0pKX1mdW5jdGlvbiBIdCh0KXtmb3IodmFyIGUscj0tMSxuPTAsaT10Lmxlbmd0aCxhPS0xLzA7KytyPGk7KShlPSt0W3JdWzFdKT5hJiYoYT1lLG49cik7cmV0dXJuIG59ZnVuY3Rpb24gR3QodCl7dmFyIGU9dC5tYXAoWXQpO3JldHVybiBVdCh0KS5zb3J0KChmdW5jdGlvbih0LHIpe3JldHVybiBlW3RdLWVbcl19KSl9ZnVuY3Rpb24gWXQodCl7Zm9yKHZhciBlLHI9MCxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KShlPSt0W25dWzFdKSYmKHIrPWUpO3JldHVybiByfUN0LnByb3RvdHlwZT17YXJlYVN0YXJ0Omx0LGFyZWFFbmQ6bHQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0sT3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOnp0KHRoaXMsdGhpcy5fdDAsSXQodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHp0KHRoaXMsSXQodGhpcyxyPVB0KHRoaXMsdCxlKSkscik7YnJlYWs7ZGVmYXVsdDp6dCh0aGlzLHRoaXMuX3QwLHI9UHQodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9cn19fSwoRHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoT3QucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtPdC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LFJ0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxuLHIsYSxpKX19LEZ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09cil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBuPUJ0KHQpLGk9QnQoZSksYT0wLG89MTtvPHI7KythLCsrbyl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVthXSxpWzBdW2FdLG5bMV1bYV0saVsxXVthXSx0W29dLGVbb10pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXIpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LE50LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19LHQuYXJjPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxvPW0sdz1yKDApLFQ9bnVsbCxrPXYsTT15LEE9eCxTPW51bGw7ZnVuY3Rpb24gRSgpe3ZhciByLGcsbT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdj0rby5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1rLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1oLHg9TS5hcHBseSh0aGlzLGFyZ3VtZW50cyktaCxFPW4oeC15KSxDPXg+eTtpZihTfHwoUz1yPWUucGF0aCgpKSx2PG0mJihnPXYsdj1tLG09Zyksdj4xZS0xMilpZihFPmYtMWUtMTIpUy5tb3ZlVG8odiphKHkpLHYqbCh5KSksUy5hcmMoMCwwLHYseSx4LCFDKSxtPjFlLTEyJiYoUy5tb3ZlVG8obSphKHgpLG0qbCh4KSksUy5hcmMoMCwwLG0seCx5LEMpKTtlbHNle3ZhciBMLFAsST15LHo9eCxPPXksRD14LFI9RSxGPUUsQj1BLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLE49Qj4xZS0xMiYmKFQ/K1QuYXBwbHkodGhpcyxhcmd1bWVudHMpOmMobSptK3YqdikpLGo9cyhuKHYtbSkvMiwrdy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFU9aixWPWo7aWYoTj4xZS0xMil7dmFyIHE9ZChOL20qbChCKSksSD1kKE4vdipsKEIpKTsoUi09MipxKT4xZS0xMj8oTys9cSo9Qz8xOi0xLEQtPXEpOihSPTAsTz1EPSh5K3gpLzIpLChGLT0yKkgpPjFlLTEyPyhJKz1IKj1DPzE6LTEsei09SCk6KEY9MCxJPXo9KHkreCkvMil9dmFyIEc9diphKEkpLFk9dipsKEkpLFc9bSphKEQpLFo9bSpsKEQpO2lmKGo+MWUtMTIpe3ZhciBYLEo9diphKHopLEs9dipsKHopLFE9bSphKE8pLCQ9bSpsKE8pO2lmKEU8dSYmKFg9YihHLFksUSwkLEosSyxXLFopKSl7dmFyIHR0PUctWFswXSxldD1ZLVhbMV0scnQ9Si1YWzBdLG50PUstWFsxXSxpdD0xL2wocCgodHQqcnQrZXQqbnQpLyhjKHR0KnR0K2V0KmV0KSpjKHJ0KnJ0K250Km50KSkpLzIpLGF0PWMoWFswXSpYWzBdK1hbMV0qWFsxXSk7VT1zKGosKG0tYXQpLyhpdC0xKSksVj1zKGosKHYtYXQpLyhpdCsxKSl9fUY+MWUtMTI/Vj4xZS0xMj8oTD1fKFEsJCxHLFksdixWLEMpLFA9XyhKLEssVyxaLHYsVixDKSxTLm1vdmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLFY8aj9TLmFyYyhMLmN4LEwuY3ksVixpKEwueTAxLEwueDAxKSxpKFAueTAxLFAueDAxKSwhQyk6KFMuYXJjKEwuY3gsTC5jeSxWLGkoTC55MDEsTC54MDEpLGkoTC55MTEsTC54MTEpLCFDKSxTLmFyYygwLDAsdixpKEwuY3krTC55MTEsTC5jeCtMLngxMSksaShQLmN5K1AueTExLFAuY3grUC54MTEpLCFDKSxTLmFyYyhQLmN4LFAuY3ksVixpKFAueTExLFAueDExKSxpKFAueTAxLFAueDAxKSwhQykpKTooUy5tb3ZlVG8oRyxZKSxTLmFyYygwLDAsdixJLHosIUMpKTpTLm1vdmVUbyhHLFkpLG0+MWUtMTImJlI+MWUtMTI/VT4xZS0xMj8oTD1fKFcsWixKLEssbSwtVSxDKSxQPV8oRyxZLFEsJCxtLC1VLEMpLFMubGluZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksVTxqP1MuYXJjKEwuY3gsTC5jeSxVLGkoTC55MDEsTC54MDEpLGkoUC55MDEsUC54MDEpLCFDKTooUy5hcmMoTC5jeCxMLmN5LFUsaShMLnkwMSxMLngwMSksaShMLnkxMSxMLngxMSksIUMpLFMuYXJjKDAsMCxtLGkoTC5jeStMLnkxMSxMLmN4K0wueDExKSxpKFAuY3krUC55MTEsUC5jeCtQLngxMSksQyksUy5hcmMoUC5jeCxQLmN5LFUsaShQLnkxMSxQLngxMSksaShQLnkwMSxQLngwMSksIUMpKSk6Uy5hcmMoMCwwLG0sRCxPLEMpOlMubGluZVRvKFcsWil9ZWxzZSBTLm1vdmVUbygwLDApO2lmKFMuY2xvc2VQYXRoKCkscilyZXR1cm4gUz1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIEUuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgZT0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2suYXBwbHkodGhpcyxhcmd1bWVudHMpKyArTS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItdS8yO3JldHVyblthKHIpKmUsbChyKSplXX0sRS5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLEUpOnR9LEUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTpvfSxFLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLEUpOnd9LEUucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLEUpOlR9LEUuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLEUpOmt9LEUuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTpNfSxFLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksRSk6QX0sRS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPW51bGw9PXQ/bnVsbDp0LEUpOlN9LEV9LHQuYXJlYT1TLHQuYXJlYVJhZGlhbD1ELHQuY3VydmVCYXNpcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHV0KHQpfSx0LmN1cnZlQmFzaXNDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0KX0sdC5jdXJ2ZUJhc2lzT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGZ0KHQpfSx0LmN1cnZlQnVuZGxlPWR0LHQuY3VydmVDYXJkaW5hbD12dCx0LmN1cnZlQ2FyZGluYWxDbG9zZWQ9eHQsdC5jdXJ2ZUNhcmRpbmFsT3Blbj1fdCx0LmN1cnZlQ2F0bXVsbFJvbT1rdCx0LmN1cnZlQ2F0bXVsbFJvbUNsb3NlZD1BdCx0LmN1cnZlQ2F0bXVsbFJvbU9wZW49RXQsdC5jdXJ2ZUxpbmVhcj1ULHQuY3VydmVMaW5lYXJDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBDdCh0KX0sdC5jdXJ2ZU1vbm90b25lWD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE90KHQpfSx0LmN1cnZlTW9ub3RvbmVZPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRHQodCl9LHQuY3VydmVOYXR1cmFsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRnQodCl9LHQuY3VydmVTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTnQodCwuNSl9LHQuY3VydmVTdGVwQWZ0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBOdCh0LDEpfSx0LmN1cnZlU3RlcEJlZm9yZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE50KHQsMCl9LHQubGluZT1BLHQubGluZVJhZGlhbD1PLHQubGlua0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4gaihVKX0sdC5saW5rUmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9aihxKTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0fSx0LmxpbmtWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiBqKFYpfSx0LnBpZT1mdW5jdGlvbigpe3ZhciB0PUMsZT1FLG49bnVsbCxpPXIoMCksYT1yKGYpLG89cigwKTtmdW5jdGlvbiBzKHIpe3ZhciBzLGwsYyx1LGgscD1yLmxlbmd0aCxkPTAsZz1uZXcgQXJyYXkocCksbT1uZXcgQXJyYXkocCksdj0raS5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1NYXRoLm1pbihmLE1hdGgubWF4KC1mLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLXYpKSx4PU1hdGgubWluKE1hdGguYWJzKHkpL3Asby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooeTwwPy0xOjEpO2ZvcihzPTA7czxwOysrcykoaD1tW2dbc109c109K3QocltzXSxzLHIpKT4wJiYoZCs9aCk7Zm9yKG51bGwhPWU/Zy5zb3J0KChmdW5jdGlvbih0LHIpe3JldHVybiBlKG1bdF0sbVtyXSl9KSk6bnVsbCE9biYmZy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuKHJbdF0scltlXSl9KSkscz0wLGM9ZD8oeS1wKmIpL2Q6MDtzPHA7KytzLHY9dSlsPWdbc10sdT12KygoaD1tW2xdKT4wP2gqYzowKStiLG1bbF09e2RhdGE6cltsXSxpbmRleDpzLHZhbHVlOmgsc3RhcnRBbmdsZTp2LGVuZEFuZ2xlOnUscGFkQW5nbGU6eH07cmV0dXJuIG19cmV0dXJuIHMudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxzKTp0fSxzLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuPW51bGwscyk6ZX0scy5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZT1udWxsLHMpOm59LHMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHMpOml9LHMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTphfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCkscyk6b30sc30sdC5wb2ludFJhZGlhbD1SLHQucmFkaWFsQXJlYT1ELHQucmFkaWFsTGluZT1PLHQuc3RhY2s9ZnVuY3Rpb24oKXt2YXIgdD1yKFtdKSxlPVV0LG49anQsaT1WdDtmdW5jdGlvbiBhKHIpe3ZhciBhLG8scz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxsPXIubGVuZ3RoLGM9cy5sZW5ndGgsdT1uZXcgQXJyYXkoYyk7Zm9yKGE9MDthPGM7KythKXtmb3IodmFyIGgsZj1zW2FdLHA9dVthXT1uZXcgQXJyYXkobCksZD0wO2Q8bDsrK2QpcFtkXT1oPVswLCtpKHJbZF0sZixkLHIpXSxoLmRhdGE9cltkXTtwLmtleT1mfWZvcihhPTAsbz1lKHUpO2E8YzsrK2EpdVtvW2FdXS5pbmRleD1hO3JldHVybiBuKHUsbyksdX1yZXR1cm4gYS5rZXlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cihGLmNhbGwoZSkpLGEpOnR9LGEudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxhKTppfSxhLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/VXQ6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKEYuY2FsbCh0KSksYSk6ZX0sYS5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9qdDp0LGEpOm59LGF9LHQuc3RhY2tPZmZzZXREaXZlcmdpbmc9ZnVuY3Rpb24odCxlKXtpZigocz10Lmxlbmd0aCk+MClmb3IodmFyIHIsbixpLGEsbyxzLGw9MCxjPXRbZVswXV0ubGVuZ3RoO2w8YzsrK2wpZm9yKGE9bz0wLHI9MDtyPHM7KytyKShpPShuPXRbZVtyXV1bbF0pWzFdLW5bMF0pPjA/KG5bMF09YSxuWzFdPWErPWkpOmk8MD8oblsxXT1vLG5bMF09bys9aSk6KG5bMF09MCxuWzFdPWkpfSx0LnN0YWNrT2Zmc2V0RXhwYW5kPWZ1bmN0aW9uKHQsZSl7aWYoKG49dC5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9cj0wO3I8bjsrK3IpaSs9dFtyXVthXVsxXXx8MDtpZihpKWZvcihyPTA7cjxuOysrcil0W3JdW2FdWzFdLz1pfWp0KHQsZSl9fSx0LnN0YWNrT2Zmc2V0Tm9uZT1qdCx0LnN0YWNrT2Zmc2V0U2lsaG91ZXR0ZT1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO248YTsrK24pe2Zvcih2YXIgbz0wLHM9MDtvPHI7KytvKXMrPXRbb11bbl1bMV18fDA7aVtuXVsxXSs9aVtuXVswXT0tcy8yfWp0KHQsZSl9fSx0LnN0YWNrT2Zmc2V0V2lnZ2xlPWZ1bmN0aW9uKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihuPShyPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saSxhPTAsbz0xO288bjsrK28pe2Zvcih2YXIgcz0wLGw9MCxjPTA7czxpOysrcyl7Zm9yKHZhciB1PXRbZVtzXV0saD11W29dWzFdfHwwLGY9KGgtKHVbby0xXVsxXXx8MCkpLzIscD0wO3A8czsrK3Ape3ZhciBkPXRbZVtwXV07Zis9KGRbb11bMV18fDApLShkW28tMV1bMV18fDApfWwrPWgsYys9ZipofXJbby0xXVsxXSs9cltvLTFdWzBdPWEsbCYmKGEtPWMvbCl9cltvLTFdWzFdKz1yW28tMV1bMF09YSxqdCh0LGUpfX0sdC5zdGFja09yZGVyQXBwZWFyYW5jZT1xdCx0LnN0YWNrT3JkZXJBc2NlbmRpbmc9R3QsdC5zdGFja09yZGVyRGVzY2VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gR3QodCkucmV2ZXJzZSgpfSx0LnN0YWNrT3JkZXJJbnNpZGVPdXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXQubGVuZ3RoLGk9dC5tYXAoWXQpLGE9cXQodCksbz0wLHM9MCxsPVtdLGM9W107Zm9yKGU9MDtlPG47KytlKXI9YVtlXSxvPHM/KG8rPWlbcl0sbC5wdXNoKHIpKToocys9aVtyXSxjLnB1c2gocikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9LHQuc3RhY2tPcmRlck5vbmU9VXQsdC5zdGFja09yZGVyUmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4gVXQodCkucmV2ZXJzZSgpfSx0LnN5bWJvbD1mdW5jdGlvbigpe3ZhciB0PXIoSCksbj1yKDY0KSxpPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciByO2lmKGl8fChpPXI9ZS5wYXRoKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcoaSwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHIpcmV0dXJuIGk9bnVsbCxyKyIifHxudWxsfXJldHVybiBhLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKGUpLGEpOnR9LGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLGEpOm59LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6dCxhKTppfSxhfSx0LnN5bWJvbENpcmNsZT1ILHQuc3ltYm9sQ3Jvc3M9Ryx0LnN5bWJvbERpYW1vbmQ9Wix0LnN5bWJvbFNxdWFyZT0kLHQuc3ltYm9sU3Rhcj1RLHQuc3ltYm9sVHJpYW5nbGU9ZXQsdC5zeW1ib2xXeWU9b3QsdC5zeW1ib2xzPXN0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0seyJkMy1wYXRoIjoxNjN9XSwxNjY6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9pKHIsdCgiZDMtdGltZSIpKTppKChuPW58fHNlbGYpLmQzPW4uZDN8fHt9LG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBlLnNldEZ1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiBuKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybnt5OnQsbTplLGQ6cixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIGEodCl7dmFyIGE9dC5kYXRlVGltZSxvPXQuZGF0ZSxsPXQudGltZSxjPXQucGVyaW9kcyx1PXQuZGF5cyxoPXQuc2hvcnREYXlzLGY9dC5tb250aHMseXQ9dC5zaG9ydE1vbnRocyx4dD1wKGMpLGJ0PWQoYyksX3Q9cCh1KSx3dD1kKHUpLFR0PXAoaCksa3Q9ZChoKSxNdD1wKGYpLEF0PWQoZiksU3Q9cCh5dCksRXQ9ZCh5dCksQ3Q9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIGhbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHl0W3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGZbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6RCxlOkQsZjpqLEg6UixJOkYsajpCLEw6TixtOlUsTTpWLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGNbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROm10LHM6dnQsUzpxLHU6SCxVOkcsVjpZLHc6VyxXOloseDpudWxsLFg6bnVsbCx5OlgsWTpKLFo6SywiJSI6Z3R9LEx0PXthOmZ1bmN0aW9uKHQpe3JldHVybiBoW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiB5dFt0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBmW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOlEsZTpRLGY6bnQsSDokLEk6dHQsajpldCxMOnJ0LG06aXQsTTphdCxwOmZ1bmN0aW9uKHQpe3JldHVybiBjWysodC5nZXRVVENIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHQpe3JldHVybiAxK35+KHQuZ2V0VVRDTW9udGgoKS8zKX0sUTptdCxzOnZ0LFM6b3QsdTpzdCxVOmx0LFY6Y3Qsdzp1dCxXOmh0LHg6bnVsbCxYOm51bGwseTpmdCxZOnB0LFo6ZHQsIiUiOmd0fSxQdD17YTpmdW5jdGlvbih0LGUscil7dmFyIG49VHQuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PWt0W25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPV90LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz13dFtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1TdC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lm09RXRbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUscil7dmFyIG49TXQuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPUF0W25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBPdCh0LGEsZSxyKX0sZDpNLGU6TSxmOlAsSDpTLEk6UyxqOkEsTDpMLG06ayxNOkUscDpmdW5jdGlvbih0LGUscil7dmFyIG49eHQuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5wPWJ0W25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LHE6VCxROnosczpPLFM6Qyx1Om0sVTp2LFY6eSx3OmcsVzp4LHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBPdCh0LG8sZSxyKX0sWDpmdW5jdGlvbih0LGUscil7cmV0dXJuIE90KHQsbCxlLHIpfSx5Ol8sWTpiLFo6dywiJSI6SX07ZnVuY3Rpb24gSXQodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG4saSxhLG89W10sbD0tMSxjPTAsdT10Lmxlbmd0aDtmb3IociBpbnN0YW5jZW9mIERhdGV8fChyPW5ldyBEYXRlKCtyKSk7KytsPHU7KTM3PT09dC5jaGFyQ29kZUF0KGwpJiYoby5wdXNoKHQuc2xpY2UoYyxsKSksbnVsbCE9KGk9c1tuPXQuY2hhckF0KCsrbCldKT9uPXQuY2hhckF0KCsrbCk6aT0iZSI9PT1uPyIgIjoiMCIsKGE9ZVtuXSkmJihuPWEocixpKSksby5wdXNoKG4pLGM9bCsxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UoYyxsKSksby5qb2luKCIiKX19ZnVuY3Rpb24genQodCxhKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIHMsbCxjPWkoMTkwMCx2b2lkIDAsMSk7aWYoT3QoYyx0LG8rPSIiLDApIT1vLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBjKXJldHVybiBuZXcgRGF0ZShjLlEpO2lmKCJzImluIGMpcmV0dXJuIG5ldyBEYXRlKDFlMypjLnMrKCJMImluIGM/Yy5MOjApKTtpZihhJiYhKCJaImluIGMpJiYoYy5aPTApLCJwImluIGMmJihjLkg9Yy5IJTEyKzEyKmMucCksdm9pZCAwPT09Yy5tJiYoYy5tPSJxImluIGM/Yy5xOjApLCJWImluIGMpe2lmKGMuVjwxfHxjLlY+NTMpcmV0dXJuIG51bGw7InciaW4gY3x8KGMudz0xKSwiWiJpbiBjPyhsPShzPW4oaShjLnksMCwxKSkpLmdldFVUQ0RheSgpLHM9bD40fHwwPT09bD9lLnV0Y01vbmRheS5jZWlsKHMpOmUudXRjTW9uZGF5KHMpLHM9ZS51dGNEYXkub2Zmc2V0KHMsNyooYy5WLTEpKSxjLnk9cy5nZXRVVENGdWxsWWVhcigpLGMubT1zLmdldFVUQ01vbnRoKCksYy5kPXMuZ2V0VVRDRGF0ZSgpKyhjLncrNiklNyk6KGw9KHM9cihpKGMueSwwLDEpKSkuZ2V0RGF5KCkscz1sPjR8fDA9PT1sP2UudGltZU1vbmRheS5jZWlsKHMpOmUudGltZU1vbmRheShzKSxzPWUudGltZURheS5vZmZzZXQocyw3KihjLlYtMSkpLGMueT1zLmdldEZ1bGxZZWFyKCksYy5tPXMuZ2V0TW9udGgoKSxjLmQ9cy5nZXREYXRlKCkrKGMudys2KSU3KX1lbHNlKCJXImluIGN8fCJVImluIGMpJiYoInciaW4gY3x8KGMudz0idSJpbiBjP2MudSU3OiJXImluIGM/MTowKSxsPSJaImluIGM/bihpKGMueSwwLDEpKS5nZXRVVENEYXkoKTpyKGkoYy55LDAsMSkpLmdldERheSgpLGMubT0wLGMuZD0iVyJpbiBjPyhjLncrNiklNys3KmMuVy0obCs1KSU3OmMudys3KmMuVS0obCs2KSU3KTtyZXR1cm4iWiJpbiBjPyhjLkgrPWMuWi8xMDB8MCxjLk0rPWMuWiUxMDAsbihjKSk6cihjKX19ZnVuY3Rpb24gT3QodCxlLHIsbil7Zm9yKHZhciBpLGEsbz0wLGw9ZS5sZW5ndGgsYz1yLmxlbmd0aDtvPGw7KXtpZihuPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KG8rKykpKXtpZihpPWUuY2hhckF0KG8rKyksIShhPVB0W2kgaW4gcz9lLmNoYXJBdChvKyspOmldKXx8KG49YSh0LHIsbikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1yLmNoYXJDb2RlQXQobisrKSlyZXR1cm4tMX1yZXR1cm4gbn1yZXR1cm4gQ3QueD1JdChvLEN0KSxDdC5YPUl0KGwsQ3QpLEN0LmM9SXQoYSxDdCksTHQueD1JdChvLEx0KSxMdC5YPUl0KGwsTHQpLEx0LmM9SXQoYSxMdCkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1JdCh0Kz0iIixDdCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9enQodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1JdCh0Kz0iIixMdCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9enQodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fX12YXIgbyxzPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGw9L15ccypcZCsvLGM9L14lLyx1PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj10PDA/Ii0iOiIiLGk9KG4/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQucmVwbGFjZSh1LCJcXCQmIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoZikuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPXt9LHI9LTEsbj10Lmxlbmd0aDsrK3I8bjspZVt0W3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG0odCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2KHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrNCkpO3JldHVybiBuPyh0Lnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShyLHIrNikpO3JldHVybiBuPyh0Llo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQucT0zKm5bMF0tMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lm09MCx0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTCh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFAodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KHQuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKHQsZSxyKXt2YXIgbj1jLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24geih0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LlE9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LnM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiBoKHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gUih0LGUpe3JldHVybiBoKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gaCh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gQih0LHIpe3JldHVybiBoKDErZS50aW1lRGF5LmNvdW50KGUudGltZVllYXIodCksdCksciwzKX1mdW5jdGlvbiBOKHQsZSl7cmV0dXJuIGgodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gTih0LGUpKyIwMDAifWZ1bmN0aW9uIFUodCxlKXtyZXR1cm4gaCh0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIFYodCxlKXtyZXR1cm4gaCh0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIHEodCxlKXtyZXR1cm4gaCh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIEgodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIEcodCxyKXtyZXR1cm4gaChlLnRpbWVTdW5kYXkuY291bnQoZS50aW1lWWVhcih0KS0xLHQpLHIsMil9ZnVuY3Rpb24gWSh0LHIpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIHQ9bj49NHx8MD09PW4/ZS50aW1lVGh1cnNkYXkodCk6ZS50aW1lVGh1cnNkYXkuY2VpbCh0KSxoKGUudGltZVRodXJzZGF5LmNvdW50KGUudGltZVllYXIodCksdCkrKDQ9PT1lLnRpbWVZZWFyKHQpLmdldERheSgpKSxyLDIpfWZ1bmN0aW9uIFcodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gWih0LHIpe3JldHVybiBoKGUudGltZU1vbmRheS5jb3VudChlLnRpbWVZZWFyKHQpLTEsdCksciwyKX1mdW5jdGlvbiBYKHQsZSl7cmV0dXJuIGgodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEoodCxlKXtyZXR1cm4gaCh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gSyh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK2goZS82MHwwLCIwIiwyKStoKGUlNjAsIjAiLDIpfWZ1bmN0aW9uIFEodCxlKXtyZXR1cm4gaCh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uICQodCxlKXtyZXR1cm4gaCh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiB0dCh0LGUpe3JldHVybiBoKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBldCh0LHIpe3JldHVybiBoKDErZS51dGNEYXkuY291bnQoZS51dGNZZWFyKHQpLHQpLHIsMyl9ZnVuY3Rpb24gcnQodCxlKXtyZXR1cm4gaCh0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gbnQodCxlKXtyZXR1cm4gcnQodCxlKSsiMDAwIn1mdW5jdGlvbiBpdCh0LGUpe3JldHVybiBoKHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gYXQodCxlKXtyZXR1cm4gaCh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIG90KHQsZSl7cmV0dXJuIGgodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBzdCh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gbHQodCxyKXtyZXR1cm4gaChlLnV0Y1N1bmRheS5jb3VudChlLnV0Y1llYXIodCktMSx0KSxyLDIpfWZ1bmN0aW9uIGN0KHQscil7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9lLnV0Y1RodXJzZGF5KHQpOmUudXRjVGh1cnNkYXkuY2VpbCh0KSxoKGUudXRjVGh1cnNkYXkuY291bnQoZS51dGNZZWFyKHQpLHQpKyg0PT09ZS51dGNZZWFyKHQpLmdldFVUQ0RheSgpKSxyLDIpfWZ1bmN0aW9uIHV0KHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIGh0KHQscil7cmV0dXJuIGgoZS51dGNNb25kYXkuY291bnQoZS51dGNZZWFyKHQpLTEsdCksciwyKX1mdW5jdGlvbiBmdCh0LGUpe3JldHVybiBoKHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBwdCh0LGUpe3JldHVybiBoKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBkdCgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gZ3QoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gbXQodCl7cmV0dXJuK3R9ZnVuY3Rpb24gdnQodCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiB5dChlKXtyZXR1cm4gbz1hKGUpLHQudGltZUZvcm1hdD1vLmZvcm1hdCx0LnRpbWVQYXJzZT1vLnBhcnNlLHQudXRjRm9ybWF0PW8udXRjRm9ybWF0LHQudXRjUGFyc2U9by51dGNQYXJzZSxvfXl0KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7dmFyIHh0PURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nP2Z1bmN0aW9uKHQpe3JldHVybiB0LnRvSVNPU3RyaW5nKCl9OnQudXRjRm9ybWF0KCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTt2YXIgYnQ9K25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9mdW5jdGlvbih0KXt2YXIgZT1uZXcgRGF0ZSh0KTtyZXR1cm4gaXNOYU4oZSk/bnVsbDplfTp0LnV0Y1BhcnNlKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTt0Lmlzb0Zvcm1hdD14dCx0Lmlzb1BhcnNlPWJ0LHQudGltZUZvcm1hdERlZmF1bHRMb2NhbGU9eXQsdC50aW1lRm9ybWF0TG9jYWxlPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLXRpbWUiOjE2N31dLDE2NzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT1uZXcgRGF0ZSxyPW5ldyBEYXRlO2Z1bmN0aW9uIG4odCxpLGEsbyl7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdChlPTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCtlKSksZX1yZXR1cm4gcy5mbG9vcj1mdW5jdGlvbihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKCtlKSksZX0scy5jZWlsPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoZS0xKSksaShlLDEpLHQoZSksZX0scy5yb3VuZD1mdW5jdGlvbih0KXt2YXIgZT1zKHQpLHI9cy5jZWlsKHQpO3JldHVybiB0LWU8ci10P2U6cn0scy5vZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0PW5ldyBEYXRlKCt0KSxudWxsPT1lPzE6TWF0aC5mbG9vcihlKSksdH0scy5yYW5nZT1mdW5jdGlvbihlLHIsbil7dmFyIGEsbz1bXTtpZihlPXMuY2VpbChlKSxuPW51bGw9PW4/MTpNYXRoLmZsb29yKG4pLCEoZTxyJiZuPjApKXJldHVybiBvO2Rve28ucHVzaChhPW5ldyBEYXRlKCtlKSksaShlLG4pLHQoZSl9d2hpbGUoYTxlJiZlPHIpO3JldHVybiBvfSxzLmZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gbigoZnVuY3Rpb24ocil7aWYocj49cilmb3IoO3QociksIWUocik7KXIuc2V0VGltZShyLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7aSh0LC0xKSwhZSh0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7aSh0LDEpLCFlKHQpOyk7fSkpfSxhJiYocy5jb3VudD1mdW5jdGlvbihuLGkpe3JldHVybiBlLnNldFRpbWUoK24pLHIuc2V0VGltZSgraSksdChlKSx0KHIpLE1hdGguZmxvb3IoYShlLHIpKX0scy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3MuZmlsdGVyKG8/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY291bnQoMCxlKSV0PT0wfSk6czpudWxsfSksc312YXIgaT1uKChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KSk7aS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP24oKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9KSwoZnVuY3Rpb24oZSxyKXtlLnNldFRpbWUoK2Urcip0KX0pLChmdW5jdGlvbihlLHIpe3JldHVybihyLWUpL3R9KSk6aTpudWxsfTt2YXIgYT1pLnJhbmdlLG89bigoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMWUzKmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMWUzfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pKSxzPW8ucmFuZ2UsbD1uKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxjPWwucmFuZ2UsdT1uKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKS02ZTQqdC5nZXRNaW51dGVzKCkpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSksaD11LnJhbmdlLGY9bigoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSkscD1mLnJhbmdlO2Z1bmN0aW9uIGQodCl7cmV0dXJuIG4oKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvNjA0OGU1fSkpfXZhciBnPWQoMCksbT1kKDEpLHY9ZCgyKSx5PWQoMykseD1kKDQpLGI9ZCg1KSxfPWQoNiksdz1nLnJhbmdlLFQ9bS5yYW5nZSxrPXYucmFuZ2UsTT15LnJhbmdlLEE9eC5yYW5nZSxTPWIucmFuZ2UsRT1fLnJhbmdlLEM9bigoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpLEw9Qy5yYW5nZSxQPW4oKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO1AuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9uKChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUscil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrcip0KX0pKTpudWxsfTt2YXIgST1QLnJhbmdlLHo9bigoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSxPPXoucmFuZ2UsRD1uKChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSksUj1ELnJhbmdlLEY9bigoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzg2NGU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpLEI9Ri5yYW5nZTtmdW5jdGlvbiBOKHQpe3JldHVybiBuKChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82MDQ4ZTV9KSl9dmFyIGo9TigwKSxVPU4oMSksVj1OKDIpLHE9TigzKSxIPU4oNCksRz1OKDUpLFk9Tig2KSxXPWoucmFuZ2UsWj1VLnJhbmdlLFg9Vi5yYW5nZSxKPXEucmFuZ2UsSz1ILnJhbmdlLFE9Ry5yYW5nZSwkPVkucmFuZ2UsdHQ9bigoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpLGV0PXR0LnJhbmdlLHJ0PW4oKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO3J0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/bigoZnVuY3Rpb24oZSl7ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLHIpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3IqdCl9KSk6bnVsbH07dmFyIG50PXJ0LnJhbmdlO3QudGltZURheT1mLHQudGltZURheXM9cCx0LnRpbWVGcmlkYXk9Yix0LnRpbWVGcmlkYXlzPVMsdC50aW1lSG91cj11LHQudGltZUhvdXJzPWgsdC50aW1lSW50ZXJ2YWw9bix0LnRpbWVNaWxsaXNlY29uZD1pLHQudGltZU1pbGxpc2Vjb25kcz1hLHQudGltZU1pbnV0ZT1sLHQudGltZU1pbnV0ZXM9Yyx0LnRpbWVNb25kYXk9bSx0LnRpbWVNb25kYXlzPVQsdC50aW1lTW9udGg9Qyx0LnRpbWVNb250aHM9TCx0LnRpbWVTYXR1cmRheT1fLHQudGltZVNhdHVyZGF5cz1FLHQudGltZVNlY29uZD1vLHQudGltZVNlY29uZHM9cyx0LnRpbWVTdW5kYXk9Zyx0LnRpbWVTdW5kYXlzPXcsdC50aW1lVGh1cnNkYXk9eCx0LnRpbWVUaHVyc2RheXM9QSx0LnRpbWVUdWVzZGF5PXYsdC50aW1lVHVlc2RheXM9ayx0LnRpbWVXZWRuZXNkYXk9eSx0LnRpbWVXZWRuZXNkYXlzPU0sdC50aW1lV2Vlaz1nLHQudGltZVdlZWtzPXcsdC50aW1lWWVhcj1QLHQudGltZVllYXJzPUksdC51dGNEYXk9Rix0LnV0Y0RheXM9Qix0LnV0Y0ZyaWRheT1HLHQudXRjRnJpZGF5cz1RLHQudXRjSG91cj1ELHQudXRjSG91cnM9Uix0LnV0Y01pbGxpc2Vjb25kPWksdC51dGNNaWxsaXNlY29uZHM9YSx0LnV0Y01pbnV0ZT16LHQudXRjTWludXRlcz1PLHQudXRjTW9uZGF5PVUsdC51dGNNb25kYXlzPVosdC51dGNNb250aD10dCx0LnV0Y01vbnRocz1ldCx0LnV0Y1NhdHVyZGF5PVksdC51dGNTYXR1cmRheXM9JCx0LnV0Y1NlY29uZD1vLHQudXRjU2Vjb25kcz1zLHQudXRjU3VuZGF5PWosdC51dGNTdW5kYXlzPVcsdC51dGNUaHVyc2RheT1ILHQudXRjVGh1cnNkYXlzPUssdC51dGNUdWVzZGF5PVYsdC51dGNUdWVzZGF5cz1YLHQudXRjV2VkbmVzZGF5PXEsdC51dGNXZWRuZXNkYXlzPUosdC51dGNXZWVrPWosdC51dGNXZWVrcz1XLHQudXRjWWVhcj1ydCx0LnV0Y1llYXJzPW50LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE2ODpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZSxyLG49MCxpPTAsYT0wLG89MCxzPTAsbD0wLGM9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsdT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBoKCl7cmV0dXJuIHN8fCh1KGYpLHM9Yy5ub3coKStsKX1mdW5jdGlvbiBmKCl7cz0wfWZ1bmN0aW9uIHAoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPW5ldyBwO3JldHVybiBuLnJlc3RhcnQodCxlLHIpLG59ZnVuY3Rpb24gZygpe2goKSwrK247Zm9yKHZhciB0LHI9ZTtyOykodD1zLXIuX3RpbWUpPj0wJiZyLl9jYWxsLmNhbGwobnVsbCx0KSxyPXIuX25leHQ7LS1ufWZ1bmN0aW9uIG0oKXtzPShvPWMubm93KCkpK2wsbj1pPTA7dHJ5e2coKX1maW5hbGx5e249MCxmdW5jdGlvbigpe3ZhciB0LG4saT1lLGE9MS8wO2Zvcig7aTspaS5fY2FsbD8oYT5pLl90aW1lJiYoYT1pLl90aW1lKSx0PWksaT1pLl9uZXh0KToobj1pLl9uZXh0LGkuX25leHQ9bnVsbCxpPXQ/dC5fbmV4dD1uOmU9bik7cj10LHkoYSl9KCkscz0wfX1mdW5jdGlvbiB2KCl7dmFyIHQ9Yy5ub3coKSxlPXQtbztlPjFlMyYmKGwtPWUsbz10KX1mdW5jdGlvbiB5KHQpe258fChpJiYoaT1jbGVhclRpbWVvdXQoaSkpLHQtcz4yND8odDwxLzAmJihpPXNldFRpbWVvdXQobSx0LWMubm93KCktbCkpLGEmJihhPWNsZWFySW50ZXJ2YWwoYSkpKTooYXx8KG89Yy5ub3coKSxhPXNldEludGVydmFsKHYsMWUzKSksbj0xLHUobSkpKX1wLnByb3RvdHlwZT1kLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cCxyZXN0YXJ0OmZ1bmN0aW9uKHQsbixpKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2k9KG51bGw9PWk/aCgpOitpKSsobnVsbD09bj8wOituKSx0aGlzLl9uZXh0fHxyPT09dGhpc3x8KHI/ci5fbmV4dD10aGlzOmU9dGhpcyxyPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPWkseSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx5KCkpfX0sdC5pbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IHAsaT1lO3JldHVybiBudWxsPT1lPyhuLnJlc3RhcnQodCxlLHIpLG4pOihlPStlLHI9bnVsbD09cj9oKCk6K3Isbi5yZXN0YXJ0KChmdW5jdGlvbiBhKG8pe28rPWksbi5yZXN0YXJ0KGEsaSs9ZSxyKSx0KG8pfSksZSxyKSxuKX0sdC5ub3c9aCx0LnRpbWVvdXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBwO3JldHVybiBlPW51bGw9PWU/MDorZSxuLnJlc3RhcnQoKGZ1bmN0aW9uKHIpe24uc3RvcCgpLHQocitlKX0pLGUsciksbn0sdC50aW1lcj1kLHQudGltZXJGbHVzaD1nLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE2OTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpe3ZhciB0PXt2ZXJzaW9uOiIzLjUuMTcifSxyPVtdLnNsaWNlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KX0saT10aGlzLmRvY3VtZW50O2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnR8fHQuZG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBvKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXcpfWlmKGkpdHJ5e24oaS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGV9Y2F0Y2godCl7bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxpKXRyeXtpLmNyZWF0ZUVsZW1lbnQoIkRJViIpLnN0eWxlLnNldFByb3BlcnR5KCJvcGFjaXR5IiwwLCIiKX1jYXRjaCh0KXt2YXIgcz10aGlzLkVsZW1lbnQucHJvdG90eXBlLGw9cy5zZXRBdHRyaWJ1dGUsYz1zLnNldEF0dHJpYnV0ZU5TLHU9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxoPXUuc2V0UHJvcGVydHk7cy5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtsLmNhbGwodGhpcyx0LGUrIiIpfSxzLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxyKXtjLmNhbGwodGhpcyx0LGUscisiIil9LHUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2guY2FsbCh0aGlzLHQsZSsiIixyKX19ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gZCh0KXtyZXR1cm4haXNOYU4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm57bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik+MD9pPWE6bj1hKzF9cmV0dXJuIG59fX10LmFzY2VuZGluZz1mLHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5taW49ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj10W2ldKSYmcj5uJiYocj1uKX1lbHNle2Zvcig7KytpPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJnI+biYmKHI9bil9cmV0dXJuIHJ9LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJm4+ciYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPnImJihyPW4pfXJldHVybiByfSx0LmV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPS0xLG89dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrYTxvOyludWxsIT0obj10W2FdKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9ZWxzZXtmb3IoOysrYTxvOylpZihudWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfXJldHVybltyLGldfSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLGE9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8aTspZChyPSt0W2FdKSYmKG4rPXIpO2Vsc2UgZm9yKDsrK2E8aTspZChyPStlLmNhbGwodCx0W2FdLGEpKSYmKG4rPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xLG89aTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylkKHI9cCh0W2FdKSk/bis9cjotLW87ZWxzZSBmb3IoOysrYTxpOylkKHI9cChlLmNhbGwodCx0W2FdLGEpKSk/bis9cjotLW87aWYobylyZXR1cm4gbi9vfSx0LnF1YW50aWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQubGVuZ3RoLTEpKmUrMSxuPU1hdGguZmxvb3IociksaT0rdFtuLTFdLGE9ci1uO3JldHVybiBhP2krYSoodFtuXS1pKTppfSx0Lm1lZGlhbj1mdW5jdGlvbihlLHIpe3ZhciBuLGk9W10sYT1lLmxlbmd0aCxvPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytvPGE7KWQobj1wKGVbb10pKSYmaS5wdXNoKG4pO2Vsc2UgZm9yKDsrK288YTspZChuPXAoci5jYWxsKGUsZVtvXSxvKSkpJiZpLnB1c2gobik7aWYoaS5sZW5ndGgpcmV0dXJuIHQucXVhbnRpbGUoaS5zb3J0KGYpLC41KX0sdC52YXJpYW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0wLHM9LTEsbD0wO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytzPGk7KWQocj1wKHRbc10pKSYmKG8rPShuPXItYSkqKHItKGErPW4vKytsKSkpO2Vsc2UgZm9yKDsrK3M8aTspZChyPXAoZS5jYWxsKHQsdFtzXSxzKSkpJiYobys9KG49ci1hKSooci0oYSs9bi8rK2wpKSk7aWYobD4xKXJldHVybiBvLyhsLTEpfSx0LmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlP01hdGguc3FydChlKTplfTt2YXIgbT1nKGYpO2Z1bmN0aW9uIHYodCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0TGVmdD1tLmxlZnQsdC5iaXNlY3Q9dC5iaXNlY3RSaWdodD1tLnJpZ2h0LHQuYmlzZWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGcoMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7cmV0dXJuIGYodChlKSxyKX06dCl9LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7KGE9YXJndW1lbnRzLmxlbmd0aCk8MyYmKHI9dC5sZW5ndGgsYTwyJiYoZT0wKSk7Zm9yKHZhciBuLGksYT1yLWU7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLG49dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPW47cmV0dXJuIHR9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5wYWlycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj10WzBdLGk9bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspaVtlXT1bbixuPXRbKytlXV07cmV0dXJuIGl9LHQudHJhbnNwb3NlPWZ1bmN0aW9uKGUpe2lmKCEoYT1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciByPS0xLG49dC5taW4oZSx2KSxpPW5ldyBBcnJheShuKTsrK3I8bjspZm9yKHZhciBhLG89LTEscz1pW3JdPW5ldyBBcnJheShhKTsrK288YTspc1tvXT1lW29dW3JdO3JldHVybiBpfSx0LnppcD1mdW5jdGlvbigpe3JldHVybiB0LnRyYW5zcG9zZShhcmd1bWVudHMpfSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LHQuZW50cmllcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2goe2tleTpyLHZhbHVlOnRbcl19KTtyZXR1cm4gZX0sdC5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShuPXRbaV0pLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfTt2YXIgeT1NYXRoLmFicztmdW5jdGlvbiB4KHQpe2Zvcih2YXIgZT0xO3QqZSUxOyllKj0xMDtyZXR1cm4gZX1mdW5jdGlvbiBiKHQsZSl7Zm9yKHZhciByIGluIGUpT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLHIse3ZhbHVlOmVbcl0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIF8oKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX10LnJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10LHQ9MCkpLChlLXQpL3I9PTEvMCl0aHJvdyBuZXcgRXJyb3IoImluZmluaXRlIHJhbmdlIik7dmFyIG4saT1bXSxhPXgoeShyKSksbz0tMTtpZih0Kj1hLGUqPWEsKHIqPWEpPDApZm9yKDsobj10K3IqKytvKT5lOylpLnB1c2gobi9hKTtlbHNlIGZvcig7KG49dCtyKisrbyk8ZTspaS5wdXNoKG4vYSk7cmV0dXJuIGl9LHQubWFwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IF87aWYodCBpbnN0YW5jZW9mIF8pdC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8YTspci5zZXQoaSx0W2ldKTtlbHNlIGZvcig7KytpPGE7KXIuc2V0KGUuY2FsbCh0LG49dFtpXSxpKSxuKX1lbHNlIGZvcih2YXIgbyBpbiB0KXIuc2V0KG8sdFtvXSk7cmV0dXJuIHJ9O2Z1bmN0aW9uIHcodCl7cmV0dXJuIl9fcHJvdG9fXyI9PSh0Kz0iIil8fCJcMCI9PT10WzBdPyJcMCIrdDp0fWZ1bmN0aW9uIFQodCl7cmV0dXJuIlwwIj09PSh0Kz0iIilbMF0/dC5zbGljZSgxKTp0fWZ1bmN0aW9uIGsodCl7cmV0dXJuIHcodClpbiB0aGlzLl99ZnVuY3Rpb24gTSh0KXtyZXR1cm4odD13KHQpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1t0XX1mdW5jdGlvbiBBKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goVChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gUygpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMuXykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gRSgpe2Zvcih2YXIgdCBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQygpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIEwodCl7cmV0dXJuIHR9ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q6bn19ZnVuY3Rpb24gSSh0LGUpe2lmKGUgaW4gdClyZXR1cm4gZTtlPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtmb3IodmFyIHI9MCxuPXoubGVuZ3RoO3I8bjsrK3Ipe3ZhciBpPXpbcl0rZTtpZihpIGluIHQpcmV0dXJuIGl9fWIoXyx7aGFzOmssZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bdyh0KV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9bdyh0KV09ZX0scmVtb3ZlOk0sa2V5czpBLHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHRoaXMuX1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh7a2V5OlQoZSksdmFsdWU6dGhpcy5fW2VdfSk7cmV0dXJuIHR9LHNpemU6UyxlbXB0eTpFLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxUKGUpLHRoaXMuX1tlXSl9fSksdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9W10sYT1bXTtmdW5jdGlvbiBvKHQsYSxzKXtpZihzPj1pLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwobixhKTplP2Euc29ydChlKTphO2Zvcih2YXIgbCxjLHUsaCxmPS0xLHA9YS5sZW5ndGgsZD1pW3MrK10sZz1uZXcgXzsrK2Y8cDspKGg9Zy5nZXQobD1kKGM9YVtmXSkpKT9oLnB1c2goYyk6Zy5zZXQobCxbY10pO3JldHVybiB0PyhjPXQoKSx1PWZ1bmN0aW9uKGUscil7Yy5zZXQoZSxvKHQscixzKSl9KTooYz17fSx1PWZ1bmN0aW9uKGUscil7Y1tlXT1vKHQscixzKX0pLGcuZm9yRWFjaCh1KSxjfXJldHVybiBuLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBvKGUsdCwwKX0sbi5lbnRyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiB0KGUscil7aWYocj49aS5sZW5ndGgpcmV0dXJuIGU7dmFyIG49W10sbz1hW3IrK107cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxpKXtuLnB1c2goe2tleTplLHZhbHVlczp0KGkscil9KX0pKSxvP24uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LmtleSxlLmtleSl9KSk6bn0obyh0Lm1hcCxlLDApLDApfSxuLmtleT1mdW5jdGlvbih0KXtyZXR1cm4gaS5wdXNoKHQpLG59LG4uc29ydEtleXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFbaS5sZW5ndGgtMV09dCxufSxuLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxufSxuLnJvbGx1cD1mdW5jdGlvbih0KXtyZXR1cm4gcj10LG59LG59LHQuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBDO2lmKHQpZm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47KytyKWUuYWRkKHRbcl0pO3JldHVybiBlfSxiKEMse2hhczprLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fW3codCs9IiIpXT0hMCx0fSxyZW1vdmU6TSx2YWx1ZXM6QSxzaXplOlMsZW1wdHk6RSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5jYWxsKHRoaXMsVChlKSl9fSksdC5iZWhhdmlvcj17fSx0LnJlYmluZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOyl0W3I9YXJndW1lbnRzW25dXT1QKHQsZSxlW3JdKTtyZXR1cm4gdH07dmFyIHo9WyJ3ZWJraXQiLCJtcyIsIm1veiIsIk1veiIsIm8iLCJPIl07ZnVuY3Rpb24gTygpe31mdW5jdGlvbiBEKCl7fWZ1bmN0aW9uIFIodCl7dmFyIGU9W10scj1uZXcgXztmdW5jdGlvbiBuKCl7Zm9yKHZhciByLG49ZSxpPS0xLGE9bi5sZW5ndGg7KytpPGE7KShyPW5baV0ub24pJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdH1yZXR1cm4gbi5vbj1mdW5jdGlvbihuLGkpe3ZhciBhLG89ci5nZXQobik7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9vJiZvLm9uOihvJiYoby5vbj1udWxsLGU9ZS5zbGljZSgwLGE9ZS5pbmRleE9mKG8pKS5jb25jYXQoZS5zbGljZShhKzEpKSxyLnJlbW92ZShuKSksaSYmZS5wdXNoKHIuc2V0KG4se29uOml9KSksdCl9LG59ZnVuY3Rpb24gRigpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBCKCl7Zm9yKHZhciBlLHI9dC5ldmVudDtlPXIuc291cmNlRXZlbnQ7KXI9ZTtyZXR1cm4gcn1mdW5jdGlvbiBOKGUpe2Zvcih2YXIgcj1uZXcgRCxuPTAsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOylyW2FyZ3VtZW50c1tuXV09UihyKTtyZXR1cm4gci5vZj1mdW5jdGlvbihuLGkpe3JldHVybiBmdW5jdGlvbihhKXt0cnl7dmFyIG89YS5zb3VyY2VFdmVudD10LmV2ZW50O2EudGFyZ2V0PWUsdC5ldmVudD1hLHJbYS50eXBlXS5hcHBseShuLGkpfWZpbmFsbHl7dC5ldmVudD1vfX19LHJ9dC5kaXNwYXRjaD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgRCxlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPVIodCk7cmV0dXJuIHR9LEQucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbmRleE9mKCIuIiksbj0iIjtpZihyPj0wJiYobj10LnNsaWNlKHIrMSksdD10LnNsaWNlKDAscikpLHQpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzW3RdLm9uKG4pOnRoaXNbdF0ub24obixlKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl7aWYobnVsbD09ZSlmb3IodCBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkodCkmJnRoaXNbdF0ub24obixudWxsKTtyZXR1cm4gdGhpc319LHQuZXZlbnQ9bnVsbCx0LnJlcXVvdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShqLCJcXCQmIil9O3ZhciBqPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwuXHtcfV0vZyxVPXt9Ll9fcHJvdG9fXz9mdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfTtmdW5jdGlvbiBWKHQpe3JldHVybiBVKHQsWSksdH12YXIgcT1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IodCl9LEg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yQWxsKHQpfSxHPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXRjaGVzfHx0W0kodCwibWF0Y2hlc1NlbGVjdG9yIildO3JldHVybihHPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuY2FsbCh0LGUpfSkodCxlKX07ImZ1bmN0aW9uIj09dHlwZW9mIFNpenpsZSYmKHE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gU2l6emxlKHQsZSlbMF18fG51bGx9LEg9U2l6emxlLEc9U2l6emxlLm1hdGNoZXNTZWxlY3RvciksdC5zZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5zZWxlY3QoaS5kb2N1bWVudEVsZW1lbnQpfTt2YXIgWT10LnNlbGVjdGlvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gVyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHEodCx0aGlzKX19ZnVuY3Rpb24gWih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIEgodCx0aGlzKX19WS5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT1bXTt0PVcodCk7Zm9yKHZhciBvPS0xLHM9dGhpcy5sZW5ndGg7KytvPHM7KXthLnB1c2goZT1bXSksZS5wYXJlbnROb2RlPShuPXRoaXNbb10pLnBhcmVudE5vZGU7Zm9yKHZhciBsPS0xLGM9bi5sZW5ndGg7KytsPGM7KShpPW5bbF0pPyhlLnB1c2gocj10LmNhbGwoaSxpLl9fZGF0YV9fLGwsbykpLHImJiJfX2RhdGFfXyJpbiBpJiYoci5fX2RhdGFfXz1pLl9fZGF0YV9fKSk6ZS5wdXNoKG51bGwpfXJldHVybiBWKGEpfSxZLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLGk9W107dD1aKHQpO2Zvcih2YXIgYT0tMSxvPXRoaXMubGVuZ3RoOysrYTxvOylmb3IodmFyIHM9dGhpc1thXSxsPS0xLGM9cy5sZW5ndGg7KytsPGM7KShyPXNbbF0pJiYoaS5wdXNoKGU9bih0LmNhbGwocixyLl9fZGF0YV9fLGwsYSkpKSxlLnBhcmVudE5vZGU9cik7cmV0dXJuIFYoaSl9O3ZhciBYPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixKPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpYLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gSyhlLHIpe3JldHVybiBlPXQubnMucXVhbGlmeShlKSxudWxsPT1yP2UubG9jYWw/ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9OmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9OiJmdW5jdGlvbiI9PXR5cGVvZiByP2UubG9jYWw/ZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT10P3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX06ZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT10P3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUsdCl9OmUubG9jYWw/ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX06ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBRKHQpe3JldHVybiB0LnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpfWZ1bmN0aW9uICQoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3QucmVxdW90ZShlKSsiKD86XFxzK3wkKSIsImciKX1mdW5jdGlvbiB0dCh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIGV0KHQsZSl7dmFyIHI9KHQ9dHQodCkubWFwKHJ0KSkubGVuZ3RoO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7KytuPHI7KXRbbl0odGhpcyxpKX06ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPHI7KXRbbl0odGhpcyxlKX19ZnVuY3Rpb24gcnQodCl7dmFyIGU9JCh0KTtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihpPXIuY2xhc3NMaXN0KXJldHVybiBuP2kuYWRkKHQpOmkucmVtb3ZlKHQpO3ZhciBpPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIjtuPyhlLmxhc3RJbmRleD0wLGUudGVzdChpKXx8ci5zZXRBdHRyaWJ1dGUoImNsYXNzIixRKGkrIiAiK3QpKSk6ci5zZXRBdHRyaWJ1dGUoImNsYXNzIixRKGkucmVwbGFjZShlLCIgIikpKX19ZnVuY3Rpb24gbnQodCxlLHIpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4scil9OmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUscil9fWZ1bmN0aW9uIGl0KHQsZSl7cmV0dXJuIG51bGw9PWU/ZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09cn06ZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIGF0KGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6KGU9dC5ucy5xdWFsaWZ5KGUpKS5sb2NhbD9mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1YJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1YP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBvdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHN0KHQpe3JldHVybntfX2RhdGFfXzp0fX1mdW5jdGlvbiBsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRyh0aGlzLHQpfX1mdW5jdGlvbiBjdCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aHx8KHQ9ZiksZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmcj90KGUuX19kYXRhX18sci5fX2RhdGFfXyk6IWUtIXJ9fWZ1bmN0aW9uIHV0KHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWZvcih2YXIgaSxhPXRbcl0sbz0wLHM9YS5sZW5ndGg7bzxzO28rKykoaT1hW29dKSYmZShpLG8scik7cmV0dXJuIHR9ZnVuY3Rpb24gaHQodCl7cmV0dXJuIFUodCxmdCksdH10Lm5zPXtwcmVmaXg6SixxdWFsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiOiIpLHI9dDtyZXR1cm4gZT49MCYmInhtbG5zIiE9PShyPXQuc2xpY2UoMCxlKSkmJih0PXQuc2xpY2UoZSsxKSksSi5oYXNPd25Qcm9wZXJ0eShyKT97c3BhY2U6SltyXSxsb2NhbDp0fTp0fX0sWS5hdHRyPWZ1bmN0aW9uKGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybihlPXQubnMucXVhbGlmeShlKSkubG9jYWw/bi5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOm4uZ2V0QXR0cmlidXRlKGUpfWZvcihyIGluIGUpdGhpcy5lYWNoKEsocixlW3JdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChLKGUscikpfSxZLmNsYXNzZWQ9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dGhpcy5ub2RlKCksbj0odD10dCh0KSkubGVuZ3RoLGk9LTE7aWYoZT1yLmNsYXNzTGlzdCl7Zm9yKDsrK2k8bjspaWYoIWUuY29udGFpbnModFtpXSkpcmV0dXJuITF9ZWxzZSBmb3IoZT1yLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsrK2k8bjspaWYoISQodFtpXSkudGVzdChlKSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IoZSBpbiB0KXRoaXMuZWFjaChldChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKGV0KHQsZSkpfSxZLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSIiKSx0KXRoaXMuZWFjaChudChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG8oaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9cj0iIn1yZXR1cm4gdGhpcy5lYWNoKG50KHQsZSxyKSl9LFkucHJvcGVydHk9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdGhpcy5ub2RlKClbdF07Zm9yKGUgaW4gdCl0aGlzLmVhY2goaXQoZSx0W2VdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChpdCh0LGUpKX0sWS50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sWS5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LFkuYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0PWF0KHQpLHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0sWS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1hdCh0KSxlPVcoZSksdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0sWS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKG90KX0sWS5kYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dGhpcy5sZW5ndGg7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2Zvcih0PW5ldyBBcnJheShhPShyPXRoaXNbMF0pLmxlbmd0aCk7KytpPGE7KShuPXJbaV0pJiYodFtpXT1uLl9fZGF0YV9fKTtyZXR1cm4gdH1mdW5jdGlvbiBvKHQscil7dmFyIG4saSxhLG89dC5sZW5ndGgsdT1yLmxlbmd0aCxoPU1hdGgubWluKG8sdSksZj1uZXcgQXJyYXkodSkscD1uZXcgQXJyYXkodSksZD1uZXcgQXJyYXkobyk7aWYoZSl7dmFyIGcsbT1uZXcgXyx2PW5ldyBBcnJheShvKTtmb3Iobj0tMTsrK248bzspKGk9dFtuXSkmJihtLmhhcyhnPWUuY2FsbChpLGkuX19kYXRhX18sbikpP2Rbbl09aTptLnNldChnLGkpLHZbbl09Zyk7Zm9yKG49LTE7KytuPHU7KShpPW0uZ2V0KGc9ZS5jYWxsKHIsYT1yW25dLG4pKSk/ITAhPT1pJiYoZltuXT1pLGkuX19kYXRhX189YSk6cFtuXT1zdChhKSxtLnNldChnLCEwKTtmb3Iobj0tMTsrK248bzspbiBpbiB2JiYhMCE9PW0uZ2V0KHZbbl0pJiYoZFtuXT10W25dKX1lbHNle2ZvcihuPS0xOysrbjxoOylpPXRbbl0sYT1yW25dLGk/KGkuX19kYXRhX189YSxmW25dPWkpOnBbbl09c3QoYSk7Zm9yKDtuPHU7KytuKXBbbl09c3QocltuXSk7Zm9yKDtuPG87KytuKWRbbl09dFtuXX1wLnVwZGF0ZT1mLHAucGFyZW50Tm9kZT1mLnBhcmVudE5vZGU9ZC5wYXJlbnROb2RlPXQucGFyZW50Tm9kZSxzLnB1c2gocCksbC5wdXNoKGYpLGMucHVzaChkKX12YXIgcz1odChbXSksbD1WKFtdKSxjPVYoW10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KWZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQuY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxpKSk7ZWxzZSBmb3IoOysraTxhOylvKHI9dGhpc1tpXSx0KTtyZXR1cm4gbC5lbnRlcj1mdW5jdGlvbigpe3JldHVybiBzfSxsLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY30sbH0sWS5kYXR1bT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iKX0sWS5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9W107ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWx0KHQpKTtmb3IodmFyIGE9MCxvPXRoaXMubGVuZ3RoO2E8bzthKyspe2kucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KHI9dGhpc1thXSkucGFyZW50Tm9kZTtmb3IodmFyIHM9MCxsPXIubGVuZ3RoO3M8bDtzKyspKG49cltzXSkmJnQuY2FsbChuLG4uX19kYXRhX18scyxhKSYmZS5wdXNoKG4pfXJldHVybiBWKGkpfSxZLm9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xLGU9dGhpcy5sZW5ndGg7Kyt0PGU7KWZvcih2YXIgcixuPXRoaXNbdF0saT1uLmxlbmd0aC0xLGE9bltpXTstLWk+PTA7KShyPW5baV0pJiYoYSYmYSE9PXIubmV4dFNpYmxpbmcmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixhKSxhPXIpO3JldHVybiB0aGlzfSxZLnNvcnQ9ZnVuY3Rpb24odCl7dD1jdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKHZhciBlPS0xLHI9dGhpcy5sZW5ndGg7KytlPHI7KXRoaXNbZV0uc29ydCh0KTtyZXR1cm4gdGhpcy5vcmRlcigpfSxZLmVhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHV0KHRoaXMsKGZ1bmN0aW9uKGUscixuKXt0LmNhbGwoZSxlLl9fZGF0YV9fLHIsbil9KSl9LFkuY2FsbD1mdW5jdGlvbih0KXt2YXIgZT1uKGFyZ3VtZW50cyk7cmV0dXJuIHQuYXBwbHkoZVswXT10aGlzLGUpLHRoaXN9LFkuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LFkubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5sZW5ndGg7dDxlO3QrKylmb3IodmFyIHI9dGhpc1t0XSxuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXt2YXIgYT1yW25dO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LFkuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHV0KHRoaXMsKGZ1bmN0aW9uKCl7Kyt0fSkpLHR9O3ZhciBmdD1bXTtmdW5jdGlvbiBwdCh0KXt2YXIgZSxyO3JldHVybiBmdW5jdGlvbihuLGksYSl7dmFyIG8scz10W2FdLnVwZGF0ZSxsPXMubGVuZ3RoO2ZvcihhIT1yJiYocj1hLGU9MCksaT49ZSYmKGU9aSsxKTshKG89c1tlXSkmJisrZTxsOyk7cmV0dXJuIG99fWZ1bmN0aW9uIGR0KGUscixpKXt2YXIgYT0iX19vbiIrZSxvPWUuaW5kZXhPZigiLiIpLHM9bXQ7bz4wJiYoZT1lLnNsaWNlKDAsbykpO3ZhciBsPWd0LmdldChlKTtmdW5jdGlvbiBjKCl7dmFyIHQ9dGhpc1thXTt0JiYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCx0LiQpLGRlbGV0ZSB0aGlzW2FdKX1yZXR1cm4gbCYmKGU9bCxzPXZ0KSxvP3I/ZnVuY3Rpb24oKXt2YXIgdD1zKHIsbihhcmd1bWVudHMpKTtjLmNhbGwodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGUsdGhpc1thXT10LHQuJD1pKSx0Ll89cn06YzpyP086ZnVuY3Rpb24oKXt2YXIgcixuPW5ldyBSZWdFeHAoIl5fX29uKFteLl0rKSIrdC5yZXF1b3RlKGUpKyIkIik7Zm9yKHZhciBpIGluIHRoaXMpaWYocj1pLm1hdGNoKG4pKXt2YXIgYT10aGlzW2ldO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihyWzFdLGEsYS4kKSxkZWxldGUgdGhpc1tpXX19fXQuc2VsZWN0aW9uLmVudGVyPWh0LHQuc2VsZWN0aW9uLmVudGVyLnByb3RvdHlwZT1mdCxmdC5hcHBlbmQ9WS5hcHBlbmQsZnQuZW1wdHk9WS5lbXB0eSxmdC5ub2RlPVkubm9kZSxmdC5jYWxsPVkuY2FsbCxmdC5zaXplPVkuc2l6ZSxmdC5zZWxlY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLGEsbz1bXSxzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXtuPShpPXRoaXNbc10pLnVwZGF0ZSxvLnB1c2goZT1bXSksZS5wYXJlbnROb2RlPWkucGFyZW50Tm9kZTtmb3IodmFyIGM9LTEsdT1pLmxlbmd0aDsrK2M8dTspKGE9aVtjXSk/KGUucHVzaChuW2NdPXI9dC5jYWxsKGkucGFyZW50Tm9kZSxhLl9fZGF0YV9fLGMscykpLHIuX19kYXRhX189YS5fX2RhdGFfXyk6ZS5wdXNoKG51bGwpfXJldHVybiBWKG8pfSxmdC5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1wdCh0aGlzKSksWS5pbnNlcnQuY2FsbCh0aGlzLHQsZSl9LHQuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1bcSh0LGkpXSkucGFyZW50Tm9kZT1pLmRvY3VtZW50RWxlbWVudDooZT1bdF0pLnBhcmVudE5vZGU9YSh0KSxWKFtlXSl9LHQuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1uKEgodCxpKSkpLnBhcmVudE5vZGU9aS5kb2N1bWVudEVsZW1lbnQ6KGU9bih0KSkucGFyZW50Tm9kZT1udWxsLFYoW2VdKX0sWS5vbj1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0hMSksdCl0aGlzLmVhY2goZHQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpcmV0dXJuKG49dGhpcy5ub2RlKClbIl9fb24iK3RdKSYmbi5fO3I9ITF9cmV0dXJuIHRoaXMuZWFjaChkdCh0LGUscikpfTt2YXIgZ3Q9dC5tYXAoe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7ZnVuY3Rpb24gbXQoZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9dC5ldmVudDt0LmV2ZW50PW4sclswXT10aGlzLl9fZGF0YV9fO3RyeXtlLmFwcGx5KHRoaXMscil9ZmluYWxseXt0LmV2ZW50PWl9fX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPW10KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQucmVsYXRlZFRhcmdldDtlJiYoZT09PXRoaXN8fDgmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHIuY2FsbCh0aGlzLHQpfX1pJiZndC5mb3JFYWNoKChmdW5jdGlvbih0KXsib24iK3QgaW4gaSYmZ3QucmVtb3ZlKHQpfSkpO3ZhciB5dCx4dD0wO2Z1bmN0aW9uIGJ0KGUpe3ZhciByPSIuZHJhZ3N1cHByZXNzLSIrICsreHQsbj0iY2xpY2siK3IsaT10LnNlbGVjdChvKGUpKS5vbigidG91Y2htb3ZlIityLEYpLm9uKCJkcmFnc3RhcnQiK3IsRikub24oInNlbGVjdHN0YXJ0IityLEYpO2lmKG51bGw9PXl0JiYoeXQ9ISgib25zZWxlY3RzdGFydCJpbiBlKSYmSShlLnN0eWxlLCJ1c2VyU2VsZWN0IikpLHl0KXt2YXIgcz1hKGUpLnN0eWxlLGw9c1t5dF07c1t5dF09Im5vbmUifXJldHVybiBmdW5jdGlvbih0KXtpZihpLm9uKHIsbnVsbCkseXQmJihzW3l0XT1sKSx0KXt2YXIgZT1mdW5jdGlvbigpe2kub24obixudWxsKX07aS5vbihuLChmdW5jdGlvbigpe0YoKSxlKCl9KSwhMCksc2V0VGltZW91dChlLDApfX19dC5tb3VzZT1mdW5jdGlvbih0KXtyZXR1cm4gd3QodCxCKCkpfTt2YXIgX3Q9dGhpcy5uYXZpZ2F0b3ImJi9XZWJLaXQvLnRlc3QodGhpcy5uYXZpZ2F0b3IudXNlckFnZW50KT8tMTowO2Z1bmN0aW9uIHd0KGUscil7ci5jaGFuZ2VkVG91Y2hlcyYmKHI9ci5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIG49ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIGk9bi5jcmVhdGVTVkdQb2ludCgpO2lmKF90PDApe3ZhciBhPW8oZSk7aWYoYS5zY3JvbGxYfHxhLnNjcm9sbFkpe3ZhciBzPShuPXQuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJzdmciKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzowLGJvcmRlcjoibm9uZSJ9LCJpbXBvcnRhbnQiKSlbMF1bMF0uZ2V0U2NyZWVuQ1RNKCk7X3Q9IShzLmZ8fHMuZSksbi5yZW1vdmUoKX19cmV0dXJuIF90PyhpLng9ci5wYWdlWCxpLnk9ci5wYWdlWSk6KGkueD1yLmNsaWVudFgsaS55PXIuY2xpZW50WSksWyhpPWkubWF0cml4VHJhbnNmb3JtKGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciBsPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3IuY2xpZW50WC1sLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1sLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gVHQoKXtyZXR1cm4gdC5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyfXQudG91Y2g9ZnVuY3Rpb24odCxlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9ZSxlPUIoKS5jaGFuZ2VkVG91Y2hlcyksZSlmb3IodmFyIG4saT0wLGE9ZS5sZW5ndGg7aTxhOysraSlpZigobj1lW2ldKS5pZGVudGlmaWVyPT09cilyZXR1cm4gd3QodCxuKX0sdC5iZWhhdmlvci5kcmFnPWZ1bmN0aW9uKCl7dmFyIGU9TihhLCJkcmFnIiwiZHJhZ3N0YXJ0IiwiZHJhZ2VuZCIpLHI9bnVsbCxuPXMoTyx0Lm1vdXNlLG8sIm1vdXNlbW92ZSIsIm1vdXNldXAiKSxpPXMoVHQsdC50b3VjaCxMLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpO2Z1bmN0aW9uIGEoKXt0aGlzLm9uKCJtb3VzZWRvd24uZHJhZyIsbikub24oInRvdWNoc3RhcnQuZHJhZyIsaSl9ZnVuY3Rpb24gcyhuLGksYSxvLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsLGM9dGhpcyx1PXQuZXZlbnQudGFyZ2V0LmNvcnJlc3BvbmRpbmdFbGVtZW50fHx0LmV2ZW50LnRhcmdldCxoPWMucGFyZW50Tm9kZSxmPWUub2YoYyxhcmd1bWVudHMpLHA9MCxkPW4oKSxnPSIuZHJhZyIrKG51bGw9PWQ/IiI6Ii0iK2QpLG09dC5zZWxlY3QoYSh1KSkub24obytnLHgpLm9uKHMrZyxiKSx2PWJ0KHUpLHk9aShoLGQpO2Z1bmN0aW9uIHgoKXt2YXIgdCxlLHI9aShoLGQpO3ImJih0PXJbMF0teVswXSxlPXJbMV0teVsxXSxwfD10fGUseT1yLGYoe3R5cGU6ImRyYWciLHg6clswXStsWzBdLHk6clsxXStsWzFdLGR4OnQsZHk6ZX0pKX1mdW5jdGlvbiBiKCl7aShoLGQpJiYobS5vbihvK2csbnVsbCkub24ocytnLG51bGwpLHYocCksZih7dHlwZToiZHJhZ2VuZCJ9KSl9bD1yP1sobD1yLmFwcGx5KGMsYXJndW1lbnRzKSkueC15WzBdLGwueS15WzFdXTpbMCwwXSxmKHt0eXBlOiJkcmFnc3RhcnQifSl9fXJldHVybiBhLm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LHQucmViaW5kKGEsZSwib24iKX0sdC50b3VjaGVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9QigpLnRvdWNoZXMpLGU/bihlKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPXd0KHQsZSk7cmV0dXJuIHIuaWRlbnRpZmllcj1lLmlkZW50aWZpZXIscn0pKTpbXX07dmFyIGt0PTFlLTYsTXQ9MWUtMTIsQXQ9TWF0aC5QSSxTdD0yKkF0LEV0PVN0LWt0LEN0PUF0LzIsTHQ9QXQvMTgwLFB0PTE4MC9BdDtmdW5jdGlvbiBJdCh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24genQodCxlLHIpe3JldHVybihlWzBdLXRbMF0pKihyWzFdLXRbMV0pLShlWzFdLXRbMV0pKihyWzBdLXRbMF0pfWZ1bmN0aW9uIE90KHQpe3JldHVybiB0PjE/MDp0PC0xP0F0Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4gdD4xP0N0OnQ8LTE/LUN0Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBSdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBGdCh0KXtyZXR1cm4odD1NYXRoLnNpbih0LzIpKSp0fXZhciBCdD1NYXRoLlNRUlQyO3QuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxoPWwtYSxmPXUqdStoKmg7aWYoZjxNdCluPU1hdGgubG9nKGMvbykvQnQscj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmgsbypNYXRoLmV4cChCdCp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoZiksZD0oYypjLW8qbys0KmYpLygyKm8qMipwKSxnPShjKmMtbypvLTQqZikvKDIqYyoyKnApLG09TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSx2PU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7bj0odi1tKS9CdCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9UnQobSksbD1vLygyKnApKihzKihlPUJ0KnIrbSwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShtKSk7cmV0dXJuW2krbCp1LGErbCpoLG8qcy9SdChCdCpyK20pXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7dmFyIGUscixuLGEscyxsLGMsdSxoLGY9e3g6MCx5OjAsazoxfSxwPVs5NjAsNTAwXSxkPVV0LGc9MjUwLG09MCx2PSJtb3VzZWRvd24uem9vbSIseT0ibW91c2Vtb3ZlLnpvb20iLHg9Im1vdXNldXAuem9vbSIsYj0idG91Y2hzdGFydC56b29tIixfPU4odywiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKTtmdW5jdGlvbiB3KHQpe3Qub24odixQKS5vbihqdCsiLnpvb20iLHopLm9uKCJkYmxjbGljay56b29tIixPKS5vbihiLEkpfWZ1bmN0aW9uIFQodCl7cmV0dXJuWyh0WzBdLWYueCkvZi5rLCh0WzFdLWYueSkvZi5rXX1mdW5jdGlvbiBrKHQpe2Yuaz1NYXRoLm1heChkWzBdLE1hdGgubWluKGRbMV0sdCkpfWZ1bmN0aW9uIE0odCxlKXtlPWZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKmYuaytmLngsdFsxXSpmLmsrZi55XX0oZSksZi54Kz10WzBdLWVbMF0sZi55Kz10WzFdLWVbMV19ZnVuY3Rpb24gQShlLG4saSxhKXtlLl9fY2hhcnRfXz17eDpmLngseTpmLnksazpmLmt9LGsoTWF0aC5wb3coMixhKSksTShyPW4saSksZT10LnNlbGVjdChlKSxnPjAmJihlPWUudHJhbnNpdGlvbigpLmR1cmF0aW9uKGcpKSxlLmNhbGwody5ldmVudCl9ZnVuY3Rpb24gUygpe2MmJmMuZG9tYWluKGwucmFuZ2UoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LWYueCkvZi5rfSkpLm1hcChsLmludmVydCkpLGgmJmguZG9tYWluKHUucmFuZ2UoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LWYueSkvZi5rfSkpLm1hcCh1LmludmVydCkpfWZ1bmN0aW9uIEUodCl7bSsrfHx0KHt0eXBlOiJ6b29tc3RhcnQifSl9ZnVuY3Rpb24gQyh0KXtTKCksdCh7dHlwZToiem9vbSIsc2NhbGU6Zi5rLHRyYW5zbGF0ZTpbZi54LGYueV19KX1mdW5jdGlvbiBMKHQpey0tbXx8KHQoe3R5cGU6Inpvb21lbmQifSkscj1udWxsKX1mdW5jdGlvbiBQKCl7dmFyIGU9dGhpcyxyPV8ub2YoZSxhcmd1bWVudHMpLG49MCxpPXQuc2VsZWN0KG8oZSkpLm9uKHksbCkub24oeCxjKSxhPVQodC5tb3VzZShlKSkscz1idChlKTtmdW5jdGlvbiBsKCl7bj0xLE0odC5tb3VzZShlKSxhKSxDKHIpfWZ1bmN0aW9uIGMoKXtpLm9uKHksbnVsbCkub24oeCxudWxsKSxzKG4pLEwocil9dnMuY2FsbChlKSxFKHIpfWZ1bmN0aW9uIEkoKXt2YXIgZSxyPXRoaXMsbj1fLm9mKHIsYXJndW1lbnRzKSxpPXt9LGE9MCxvPSIuem9vbS0iK3QuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcixsPSJ0b3VjaG1vdmUiK28sYz0idG91Y2hlbmQiK28sdT1bXSxoPXQuc2VsZWN0KHIpLHA9YnQocik7ZnVuY3Rpb24gZCgpe3ZhciBuPXQudG91Y2hlcyhyKTtyZXR1cm4gZT1mLmssbi5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmlkZW50aWZpZXIgaW4gaSYmKGlbdC5pZGVudGlmaWVyXT1UKHQpKX0pKSxufWZ1bmN0aW9uIGcoKXt2YXIgZT10LmV2ZW50LnRhcmdldDt0LnNlbGVjdChlKS5vbihsLG0pLm9uKGMseSksdS5wdXNoKGUpO2Zvcih2YXIgbj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89MCxoPW4ubGVuZ3RoO288aDsrK28paVtuW29dLmlkZW50aWZpZXJdPW51bGw7dmFyIHA9ZCgpLGc9RGF0ZS5ub3coKTtpZigxPT09cC5sZW5ndGgpe2lmKGctczw1MDApe3ZhciB2PXBbMF07QShyLHYsaVt2LmlkZW50aWZpZXJdLE1hdGguZmxvb3IoTWF0aC5sb2coZi5rKS9NYXRoLkxOMikrMSksRigpfXM9Z31lbHNlIGlmKHAubGVuZ3RoPjEpe3Y9cFswXTt2YXIgeD1wWzFdLGI9dlswXS14WzBdLF89dlsxXS14WzFdO2E9YipiK18qX319ZnVuY3Rpb24gbSgpe3ZhciBvLGwsYyx1LGg9dC50b3VjaGVzKHIpO3ZzLmNhbGwocik7Zm9yKHZhciBmPTAscD1oLmxlbmd0aDtmPHA7KytmLHU9bnVsbClpZihjPWhbZl0sdT1pW2MuaWRlbnRpZmllcl0pe2lmKGwpYnJlYWs7bz1jLGw9dX1pZih1KXt2YXIgZD0oZD1jWzBdLW9bMF0pKmQrKGQ9Y1sxXS1vWzFdKSpkLGc9YSYmTWF0aC5zcXJ0KGQvYSk7bz1bKG9bMF0rY1swXSkvMiwob1sxXStjWzFdKS8yXSxsPVsobFswXSt1WzBdKS8yLChsWzFdK3VbMV0pLzJdLGsoZyplKX1zPW51bGwsTShvLGwpLEMobil9ZnVuY3Rpb24geSgpe2lmKHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgZT10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9MCxhPWUubGVuZ3RoO3I8YTsrK3IpZGVsZXRlIGlbZVtyXS5pZGVudGlmaWVyXTtmb3IodmFyIHMgaW4gaSlyZXR1cm4gdm9pZCBkKCl9dC5zZWxlY3RBbGwodSkub24obyxudWxsKSxoLm9uKHYsUCkub24oYixJKSxwKCksTChuKX1nKCksRShuKSxoLm9uKHYsbnVsbCkub24oYixnKX1mdW5jdGlvbiB6KCl7dmFyIGk9Xy5vZih0aGlzLGFyZ3VtZW50cyk7YT9jbGVhclRpbWVvdXQoYSk6KHZzLmNhbGwodGhpcyksZT1UKHI9bnx8dC5tb3VzZSh0aGlzKSksRShpKSksYT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2E9bnVsbCxMKGkpfSksNTApLEYoKSxrKE1hdGgucG93KDIsLjAwMipOdCgpKSpmLmspLE0ocixlKSxDKGkpfWZ1bmN0aW9uIE8oKXt2YXIgZT10Lm1vdXNlKHRoaXMpLHI9TWF0aC5sb2coZi5rKS9NYXRoLkxOMjtBKHRoaXMsZSxUKGUpLHQuZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKHIpLTE6TWF0aC5mbG9vcihyKSsxKX1yZXR1cm4ganR8fChqdD0ib253aGVlbCJpbiBpPyhOdD1mdW5jdGlvbigpe3JldHVybi10LmV2ZW50LmRlbHRhWSoodC5ldmVudC5kZWx0YU1vZGU/MTIwOjEpfSwid2hlZWwiKToib25tb3VzZXdoZWVsImluIGk/KE50PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXZlbnQud2hlZWxEZWx0YX0sIm1vdXNld2hlZWwiKTooTnQ9ZnVuY3Rpb24oKXtyZXR1cm4tdC5ldmVudC5kZXRhaWx9LCJNb3pNb3VzZVBpeGVsU2Nyb2xsIikpLHcuZXZlbnQ9ZnVuY3Rpb24oZSl7ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPV8ub2YodGhpcyxhcmd1bWVudHMpLG49Zjticz90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsKGZ1bmN0aW9uKCl7Zj10aGlzLl9fY2hhcnRfX3x8e3g6MCx5OjAsazoxfSxFKGUpfSkpLnR3ZWVuKCJ6b29tOnpvb20iLChmdW5jdGlvbigpe3ZhciBpPXBbMF0sYT1wWzFdLG89cj9yWzBdOmkvMixzPXI/clsxXTphLzIsbD10LmludGVycG9sYXRlWm9vbShbKG8tZi54KS9mLmssKHMtZi55KS9mLmssaS9mLmtdLFsoby1uLngpL24uaywocy1uLnkpL24uayxpL24ua10pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1sKHQpLG49aS9yWzJdO3RoaXMuX19jaGFydF9fPWY9e3g6by1yWzBdKm4seTpzLXJbMV0qbixrOm59LEMoZSl9fSkpLmVhY2goImludGVycnVwdC56b29tIiwoZnVuY3Rpb24oKXtMKGUpfSkpLmVhY2goImVuZC56b29tIiwoZnVuY3Rpb24oKXtMKGUpfSkpOih0aGlzLl9fY2hhcnRfXz1mLEUoZSksQyhlKSxMKGUpKX0pKX0sdy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9e3g6K3RbMF0seTordFsxXSxrOmYua30sUygpLHcpOltmLngsZi55XX0sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj17eDpmLngseTpmLnksazpudWxsfSxrKCt0KSxTKCksdyk6Zi5rfSx3LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW51bGw9PXQ/VXQ6Wyt0WzBdLCt0WzFdXSx3KTpkfSx3LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10JiZbK3RbMF0sK3RbMV1dLHcpOm59LHcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10JiZbK3RbMF0sK3RbMV1dLHcpOnB9LHcuZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3Qsdyk6Z30sdy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbD10LmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6Y30sdy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQsdT10LmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6aH0sdC5yZWJpbmQodyxfLCJvbiIpfTt2YXIgTnQsanQsVXQ9WzAsMS8wXTtmdW5jdGlvbiBWdCgpe31mdW5jdGlvbiBxdCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBxdD8odGhpcy5oPSt0LHRoaXMucz0rZSx2b2lkKHRoaXMubD0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgcXQ/bmV3IHF0KHQuaCx0LnMsdC5sKTpsZSgiIit0LGNlLHF0KTpuZXcgcXQodCxlLHIpfXQuY29sb3I9VnQsVnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LHQuaHNsPXF0O3ZhciBIdD1xdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIEd0KHQsZSxyKXt2YXIgbixpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KmZ1bmN0aW9uKHQpe3JldHVybiB0PjM2MD90LT0zNjA6dDwwJiYodCs9MzYwKSx0PDYwP24rKGktbikqdC82MDp0PDE4MD9pOnQ8MjQwP24rKGktbikqKDI0MC10KS82MDpufSh0KSl9cmV0dXJuIHQ9aXNOYU4odCk/MDoodCU9MzYwKTwwP3QrMzYwOnQsZT1pc05hTihlKXx8ZTwwPzA6ZT4xPzE6ZSxuPTIqKHI9cjwwPzA6cj4xPzE6ciktKGk9cjw9LjU/ciooMStlKTpyK2UtciplKSxuZXcgbmUoYSh0KzEyMCksYSh0KSxhKHQtMTIwKSl9ZnVuY3Rpb24gWXQoZSxyLG4pe3JldHVybiB0aGlzIGluc3RhbmNlb2YgWXQ/KHRoaXMuaD0rZSx0aGlzLmM9K3Isdm9pZCh0aGlzLmw9K24pKTphcmd1bWVudHMubGVuZ3RoPDI/ZSBpbnN0YW5jZW9mIFl0P25ldyBZdChlLmgsZS5jLGUubCk6JHQoZSBpbnN0YW5jZW9mIFh0P2UubDooZT11ZSgoZT10LnJnYihlKSkucixlLmcsZS5iKSkubCxlLmEsZS5iKTpuZXcgWXQoZSxyLG4pfUh0LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSxuZXcgcXQodGhpcy5oLHRoaXMucyx0aGlzLmwvdCl9LEh0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IHF0KHRoaXMuaCx0aGlzLnMsdCp0aGlzLmwpfSxIdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gR3QodGhpcy5oLHRoaXMucyx0aGlzLmwpfSx0LmhjbD1ZdDt2YXIgV3Q9WXQucHJvdG90eXBlPW5ldyBWdDtmdW5jdGlvbiBadCh0LGUscil7cmV0dXJuIGlzTmFOKHQpJiYodD0wKSxpc05hTihlKSYmKGU9MCksbmV3IFh0KHIsTWF0aC5jb3ModCo9THQpKmUsTWF0aC5zaW4odCkqZSl9ZnVuY3Rpb24gWHQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgWHQ/KHRoaXMubD0rdCx0aGlzLmE9K2Usdm9pZCh0aGlzLmI9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIFh0P25ldyBYdCh0LmwsdC5hLHQuYik6dCBpbnN0YW5jZW9mIFl0P1p0KHQuaCx0LmMsdC5sKTp1ZSgodD1uZSh0KSkucix0LmcsdC5iKTpuZXcgWHQodCxlLHIpfVd0LmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWXQodGhpcy5oLHRoaXMuYyxNYXRoLm1pbigxMDAsdGhpcy5sK0p0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKX0sV3QuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWXQodGhpcy5oLHRoaXMuYyxNYXRoLm1heCgwLHRoaXMubC1KdCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFd0LnJnYj1mdW5jdGlvbigpe3JldHVybiBadCh0aGlzLmgsdGhpcy5jLHRoaXMubCkucmdiKCl9LHQubGFiPVh0O3ZhciBKdD0xOCxLdD1YdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIFF0KHQsZSxyKXt2YXIgbj0odCsxNikvMTE2LGk9bitlLzUwMCxhPW4tci8yMDA7cmV0dXJuIG5ldyBuZShyZSgzLjI0MDQ1NDIqKGk9Ljk1MDQ3KnRlKGkpKS0xLjUzNzEzODUqKG49MSp0ZShuKSktLjQ5ODUzMTQqKGE9MS4wODg4Myp0ZShhKSkpLHJlKC0uOTY5MjY2KmkrMS44NzYwMTA4Km4rLjA0MTU1NiphKSxyZSguMDU1NjQzNCppLS4yMDQwMjU5Km4rMS4wNTcyMjUyKmEpKX1mdW5jdGlvbiAkdCh0LGUscil7cmV0dXJuIHQ+MD9uZXcgWXQoTWF0aC5hdGFuMihyLGUpKlB0LE1hdGguc3FydChlKmUrcipyKSx0KTpuZXcgWXQoTmFOLE5hTix0KX1mdW5jdGlvbiB0ZSh0KXtyZXR1cm4gdD4uMjA2ODkzMDM0P3QqdCp0Oih0LTQvMjkpLzcuNzg3MDM3fWZ1bmN0aW9uIGVlKHQpe3JldHVybiB0Pi4wMDg4NTY/TWF0aC5wb3codCwxLzMpOjcuNzg3MDM3KnQrNC8yOX1mdW5jdGlvbiByZSh0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqKHQ8PS4wMDMwND8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpKX1mdW5jdGlvbiBuZSh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuZT8odGhpcy5yPX5+dCx0aGlzLmc9fn5lLHZvaWQodGhpcy5iPX5+cikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgbmU/bmV3IG5lKHQucix0LmcsdC5iKTpsZSgiIit0LG5lLEd0KTpuZXcgbmUodCxlLHIpfWZ1bmN0aW9uIGllKHQpe3JldHVybiBuZXcgbmUodD4+MTYsdD4+OCYyNTUsMjU1JnQpfWZ1bmN0aW9uIGFlKHQpe3JldHVybiBpZSh0KSsiIn1LdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFh0KE1hdGgubWluKDEwMCx0aGlzLmwrSnQqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSksdGhpcy5hLHRoaXMuYil9LEt0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFh0KE1hdGgubWF4KDAsdGhpcy5sLUp0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxLdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gUXQodGhpcy5sLHRoaXMuYSx0aGlzLmIpfSx0LnJnYj1uZTt2YXIgb2U9bmUucHJvdG90eXBlPW5ldyBWdDtmdW5jdGlvbiBzZSh0KXtyZXR1cm4gdDwxNj8iMCIrTWF0aC5tYXgoMCx0KS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LHQpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBsZSh0LGUscil7dmFyIG4saSxhLG89MCxzPTAsbD0wO2lmKG49LyhbYS16XSspXCgoLiopXCkvLmV4ZWModD10LnRvTG93ZXJDYXNlKCkpKXN3aXRjaChpPW5bMl0uc3BsaXQoIiwiKSxuWzFdKXtjYXNlImhzbCI6cmV0dXJuIHIocGFyc2VGbG9hdChpWzBdKSxwYXJzZUZsb2F0KGlbMV0pLzEwMCxwYXJzZUZsb2F0KGlbMl0pLzEwMCk7Y2FzZSJyZ2IiOnJldHVybiBlKGZlKGlbMF0pLGZlKGlbMV0pLGZlKGlbMl0pKX1yZXR1cm4oYT1wZS5nZXQodCkpP2UoYS5yLGEuZyxhLmIpOihudWxsPT10fHwiIyIhPT10LmNoYXJBdCgwKXx8aXNOYU4oYT1wYXJzZUludCh0LnNsaWNlKDEpLDE2KSl8fCg0PT09dC5sZW5ndGg/KG89KDM4NDAmYSk+PjQsb3w9bz4+NCxzPTI0MCZhLHN8PXM+PjQsbD0xNSZhLGx8PWw8PDQpOjc9PT10Lmxlbmd0aCYmKG89KDE2NzExNjgwJmEpPj4xNixzPSg2NTI4MCZhKT4+OCxsPTI1NSZhKSksZShvLHMsbCkpfWZ1bmN0aW9uIGNlKHQsZSxyKXt2YXIgbixpLGE9TWF0aC5taW4odC89MjU1LGUvPTI1NSxyLz0yNTUpLG89TWF0aC5tYXgodCxlLHIpLHM9by1hLGw9KG8rYSkvMjtyZXR1cm4gcz8oaT1sPC41P3MvKG8rYSk6cy8oMi1vLWEpLG49dD09bz8oZS1yKS9zKyhlPHI/NjowKTplPT1vPyhyLXQpL3MrMjoodC1lKS9zKzQsbio9NjApOihuPU5hTixpPWw+MCYmbDwxPzA6biksbmV3IHF0KG4saSxsKX1mdW5jdGlvbiB1ZSh0LGUscil7dmFyIG49ZWUoKC40MTI0NTY0Kih0PWhlKHQpKSsuMzU3NTc2MSooZT1oZShlKSkrLjE4MDQzNzUqKHI9aGUocikpKS8uOTUwNDcpLGk9ZWUoKC4yMTI2NzI5KnQrLjcxNTE1MjIqZSsuMDcyMTc1KnIpLzEpO3JldHVybiBYdCgxMTYqaS0xNiw1MDAqKG4taSksMjAwKihpLWVlKCguMDE5MzMzOSp0Ky4xMTkxOTIqZSsuOTUwMzA0MSpyKS8xLjA4ODgzKSkpfWZ1bmN0aW9uIGhlKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIGZlKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIiUiPT09dC5jaGFyQXQodC5sZW5ndGgtMSk/TWF0aC5yb3VuZCgyLjU1KmUpOmV9b2UuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7dD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSk7dmFyIGU9dGhpcy5yLHI9dGhpcy5nLG49dGhpcy5iLGk9MzA7cmV0dXJuIGV8fHJ8fG4/KGUmJmU8aSYmKGU9aSksciYmcjxpJiYocj1pKSxuJiZuPGkmJihuPWkpLG5ldyBuZShNYXRoLm1pbigyNTUsZS90KSxNYXRoLm1pbigyNTUsci90KSxNYXRoLm1pbigyNTUsbi90KSkpOm5ldyBuZShpLGksaSl9LG9lLmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG5lKCh0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkqdGhpcy5yLHQqdGhpcy5nLHQqdGhpcy5iKX0sb2UuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIGNlKHRoaXMucix0aGlzLmcsdGhpcy5iKX0sb2UudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIrc2UodGhpcy5yKStzZSh0aGlzLmcpK3NlKHRoaXMuYil9O3ZhciBwZT10Lm1hcCh7YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7ZnVuY3Rpb24gZGUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxtZShlLHIsdCxuKX19ZnVuY3Rpb24gbWUoZSxyLGksYSl7dmFyIG89e30scz10LmRpc3BhdGNoKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxsPXt9LGM9bmV3IFhNTEh0dHBSZXF1ZXN0LHU9bnVsbDtmdW5jdGlvbiBoKCl7dmFyIHQsZT1jLnN0YXR1cztpZighZSYmZnVuY3Rpb24odCl7dmFyIGU9dC5yZXNwb25zZVR5cGU7cmV0dXJuIGUmJiJ0ZXh0IiE9PWU/dC5yZXNwb25zZTp0LnJlc3BvbnNlVGV4dH0oYyl8fGU+PTIwMCYmZTwzMDB8fDMwND09PWUpe3RyeXt0PWkuY2FsbChvLGMpfWNhdGNoKHQpe3JldHVybiB2b2lkIHMuZXJyb3IuY2FsbChvLHQpfXMubG9hZC5jYWxsKG8sdCl9ZWxzZSBzLmVycm9yLmNhbGwobyxjKX1yZXR1cm4gdGhpcy5YRG9tYWluUmVxdWVzdCYmISgid2l0aENyZWRlbnRpYWxzImluIGMpJiYvXihodHRwKHMpPzopP1wvXC8vLnRlc3QoZSkmJihjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj1oOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJmgoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKGUpe3ZhciByPXQuZXZlbnQ7dC5ldmVudD1lO3RyeXtzLnByb2dyZXNzLmNhbGwobyxjKX1maW5hbGx5e3QuZXZlbnQ9cn19LG8uaGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9KHQrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2xbdF06KG51bGw9PWU/ZGVsZXRlIGxbdF06bFt0XT1lKyIiLG8pfSxvLm1pbWVUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDp0KyIiLG8pOnJ9LG8ucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbyk6dX0sby5yZXNwb25zZT1mdW5jdGlvbih0KXtyZXR1cm4gaT10LG99LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe29bdF09ZnVuY3Rpb24oKXtyZXR1cm4gby5zZW5kLmFwcGx5KG8sW3RdLmNvbmNhdChuKGFyZ3VtZW50cykpKX19KSksby5zZW5kPWZ1bmN0aW9uKHQsbixpKXtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihpPW4sbj1udWxsKSxjLm9wZW4odCxlLCEwKSxudWxsPT1yfHwiYWNjZXB0ImluIGx8fChsLmFjY2VwdD1yKyIsKi8qIiksYy5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgYSBpbiBsKWMuc2V0UmVxdWVzdEhlYWRlcihhLGxbYV0pO3JldHVybiBudWxsIT1yJiZjLm92ZXJyaWRlTWltZVR5cGUmJmMub3ZlcnJpZGVNaW1lVHlwZShyKSxudWxsIT11JiYoYy5yZXNwb25zZVR5cGU9dSksbnVsbCE9aSYmby5vbigiZXJyb3IiLGkpLm9uKCJsb2FkIiwoZnVuY3Rpb24odCl7aShudWxsLHQpfSkpLHMuYmVmb3Jlc2VuZC5jYWxsKG8sYyksYy5zZW5kKG51bGw9PW4/bnVsbDpuKSxvfSxvLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxvfSx0LnJlYmluZChvLHMsIm9uIiksbnVsbD09YT9vOm8uZ2V0KGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGg/ZnVuY3Rpb24oZSxyKXt0KG51bGw9PWU/cjpudWxsKX06dH0oYSkpfXBlLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7cGUuc2V0KHQsaWUoZSkpfSkpLHQuZnVuY3Rvcj1kZSx0Lnhocj1nZShMKSx0LmRzdj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBSZWdFeHAoJ1siJyt0KyJcbl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBpKHQscixuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPXIscj1udWxsKTt2YXIgaT1tZSh0LGUsbnVsbD09cj9hOm8ociksbik7cmV0dXJuIGkucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2kucmVzcG9uc2UobnVsbD09KHI9dCk/YTpvKHQpKTpyfSxpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGkucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBpLnBhcnNlKGUucmVzcG9uc2VUZXh0LHQpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLm1hcChsKS5qb2luKHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHIudGVzdCh0KT8nIicrdC5yZXBsYWNlKC9cIi9nLCciIicpKyciJzp0fXJldHVybiBpLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIGkucGFyc2VSb3dzKHQsKGZ1bmN0aW9uKHQsbil7aWYocilyZXR1cm4gcih0LG4tMSk7dmFyIGk9bmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrZSsiXSJ9KSkuam9pbigiLCIpKyJ9Iik7cj1lP2Z1bmN0aW9uKHQscil7cmV0dXJuIGUoaSh0KSxyKX06aX0pKX0saS5wYXJzZVJvd3M9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9e30sbz17fSxzPVtdLGw9dC5sZW5ndGgsYz0wLHU9MDtmdW5jdGlvbiBoKCl7aWYoYz49bClyZXR1cm4gbztpZihpKXJldHVybiBpPSExLGE7dmFyIGU9YztpZigzND09PXQuY2hhckNvZGVBdChlKSl7Zm9yKHZhciByPWU7cisrPGw7KWlmKDM0PT09dC5jaGFyQ29kZUF0KHIpKXtpZigzNCE9PXQuY2hhckNvZGVBdChyKzEpKWJyZWFrOysrcn1yZXR1cm4gYz1yKzIsMTM9PT0ocz10LmNoYXJDb2RlQXQocisxKSk/KGk9ITAsMTA9PT10LmNoYXJDb2RlQXQocisyKSYmKytjKToxMD09PXMmJihpPSEwKSx0LnNsaWNlKGUrMSxyKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtjPGw7KXt2YXIgcyx1PTE7aWYoMTA9PT0ocz10LmNoYXJDb2RlQXQoYysrKSkpaT0hMDtlbHNlIGlmKDEzPT09cylpPSEwLDEwPT09dC5jaGFyQ29kZUF0KGMpJiYoKytjLCsrdSk7ZWxzZSBpZihzIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShlLGMtdSl9cmV0dXJuIHQuc2xpY2UoZSl9Zm9yKDsocj1oKCkpIT09bzspe2Zvcih2YXIgZj1bXTtyIT09YSYmciE9PW87KWYucHVzaChyKSxyPWgoKTtlJiZudWxsPT0oZj1lKGYsdSsrKSl8fHMucHVzaChmKX1yZXR1cm4gc30saS5mb3JtYXQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlWzBdKSlyZXR1cm4gaS5mb3JtYXRSb3dzKGUpO3ZhciByPW5ldyBDLG49W107cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpci5oYXMoZSl8fG4ucHVzaChyLmFkZChlKSl9KSksW24ubWFwKGwpLmpvaW4odCldLmNvbmNhdChlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbChlW3RdKX0pKS5qb2luKHQpfSkpKS5qb2luKCJcbiIpfSxpLmZvcm1hdFJvd3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKHMpLmpvaW4oIlxuIil9LGl9LHQuY3N2PXQuZHN2KCIsIiwidGV4dC9jc3YiKSx0LnRzdj10LmRzdigiXHQiLCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIik7dmFyIHZlLHllLHhlLGJlLF9lPXRoaXNbSSh0aGlzLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKV18fGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIHdlKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO248MiYmKGU9MCksbjwzJiYocj1EYXRlLm5vdygpKTt2YXIgaT1yK2UsYT17Yzp0LHQ6aSxuOm51bGx9O3JldHVybiB5ZT95ZS5uPWE6dmU9YSx5ZT1hLHhlfHwoYmU9Y2xlYXJUaW1lb3V0KGJlKSx4ZT0xLF9lKFRlKSksYX1mdW5jdGlvbiBUZSgpe3ZhciB0PWtlKCksZT1NZSgpLXQ7ZT4yND8oaXNGaW5pdGUoZSkmJihjbGVhclRpbWVvdXQoYmUpLGJlPXNldFRpbWVvdXQoVGUsZSkpLHhlPTApOih4ZT0xLF9lKFRlKSl9ZnVuY3Rpb24ga2UoKXtmb3IodmFyIHQ9RGF0ZS5ub3coKSxlPXZlO2U7KXQ+PWUudCYmZS5jKHQtZS50KSYmKGUuYz1udWxsKSxlPWUubjtyZXR1cm4gdH1mdW5jdGlvbiBNZSgpe2Zvcih2YXIgdCxlPXZlLHI9MS8wO2U7KWUuYz8oZS50PHImJihyPWUudCksZT0odD1lKS5uKTplPXQ/dC5uPWUubjp2ZT1lLm47cmV0dXJuIHllPXQscn1mdW5jdGlvbiBBZSh0LGUpe3JldHVybiBlLSh0P01hdGguY2VpbChNYXRoLmxvZyh0KS9NYXRoLkxOMTApOjEpfXQudGltZXI9ZnVuY3Rpb24oKXt3ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHQudGltZXIuZmx1c2g9ZnVuY3Rpb24oKXtrZSgpLE1lKCl9LHQucm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9NYXRoLnJvdW5kKHQqKGU9TWF0aC5wb3coMTAsZSkpKS9lOk1hdGgucm91bmQodCl9O3ZhciBTZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMTAsMyp5KDgtZSkpO3JldHVybntzY2FsZTplPjg/ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sc3ltYm9sOnR9fSkpO2Z1bmN0aW9uIEVlKGUpe3ZhciByPWUuZGVjaW1hbCxuPWUudGhvdXNhbmRzLGk9ZS5ncm91cGluZyxhPWUuY3VycmVuY3ksbz1pJiZuP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGE9W10sbz0wLHM9aVswXSxsPTA7cj4wJiZzPjAmJihsK3MrMT5lJiYocz1NYXRoLm1heCgxLGUtbCkpLGEucHVzaCh0LnN1YnN0cmluZyhyLT1zLHIrcykpLCEoKGwrPXMrMSk+ZSkpOylzPWlbbz0obysxKSVpLmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4obil9Okw7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPUNlLmV4ZWMoZSksaT1uWzFdfHwiICIscz1uWzJdfHwiPiIsbD1uWzNdfHwiLSIsYz1uWzRdfHwiIix1PW5bNV0saD0rbls2XSxmPW5bN10scD1uWzhdLGQ9bls5XSxnPTEsbT0iIix2PSIiLHk9ITEseD0hMDtzd2l0Y2gocCYmKHA9K3Auc3Vic3RyaW5nKDEpKSwodXx8IjAiPT09aSYmIj0iPT09cykmJih1PWk9IjAiLHM9Ij0iKSxkKXtjYXNlIm4iOmY9ITAsZD0iZyI7YnJlYWs7Y2FzZSIlIjpnPTEwMCx2PSIlIixkPSJmIjticmVhaztjYXNlInAiOmc9MTAwLHY9IiUiLGQ9InIiO2JyZWFrO2Nhc2UiYiI6Y2FzZSJvIjpjYXNlIngiOmNhc2UiWCI6IiMiPT09YyYmKG09IjAiK2QudG9Mb3dlckNhc2UoKSk7Y2FzZSJjIjp4PSExO2Nhc2UiZCI6eT0hMCxwPTA7YnJlYWs7Y2FzZSJzIjpnPS0xLGQ9InIifSIkIj09PWMmJihtPWFbMF0sdj1hWzFdKSwiciIhPWR8fHB8fChkPSJnIiksbnVsbCE9cCYmKCJnIj09ZD9wPU1hdGgubWF4KDEsTWF0aC5taW4oMjEscCkpOiJlIiE9ZCYmImYiIT1kfHwocD1NYXRoLm1heCgwLE1hdGgubWluKDIwLHApKSkpLGQ9TGUuZ2V0KGQpfHxQZTt2YXIgYj11JiZmO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj12O2lmKHkmJmUlMSlyZXR1cm4iIjt2YXIgYT1lPDB8fDA9PT1lJiYxL2U8MD8oZT0tZSwiLSIpOiItIj09PWw/IiI6bDtpZihnPDApe3ZhciBjPXQuZm9ybWF0UHJlZml4KGUscCk7ZT1jLnNjYWxlKGUpLG49Yy5zeW1ib2wrdn1lbHNlIGUqPWc7dmFyIF8sdyxUPShlPWQoZSxwKSkubGFzdEluZGV4T2YoIi4iKTtpZihUPDApe3ZhciBrPXg/ZS5sYXN0SW5kZXhPZigiZSIpOi0xO2s8MD8oXz1lLHc9IiIpOihfPWUuc3Vic3RyaW5nKDAsayksdz1lLnN1YnN0cmluZyhrKSl9ZWxzZSBfPWUuc3Vic3RyaW5nKDAsVCksdz1yK2Uuc3Vic3RyaW5nKFQrMSk7IXUmJmYmJihfPW8oXywxLzApKTt2YXIgTT1tLmxlbmd0aCtfLmxlbmd0aCt3Lmxlbmd0aCsoYj8wOmEubGVuZ3RoKSxBPU08aD9uZXcgQXJyYXkoTT1oLU0rMSkuam9pbihpKToiIjtyZXR1cm4gYiYmKF89byhBK18sQS5sZW5ndGg/aC13Lmxlbmd0aDoxLzApKSxhKz1tLGU9Xyt3LCgiPCI9PT1zP2ErZStBOiI+Ij09PXM/QSthK2U6Il4iPT09cz9BLnN1YnN0cmluZygwLE0+Pj0xKSthK2UrQS5zdWJzdHJpbmcoTSk6YSsoYj9lOkErZSkpK259fX10LmZvcm1hdFByZWZpeD1mdW5jdGlvbihlLHIpe3ZhciBuPTA7cmV0dXJuKGU9K2UpJiYoZTwwJiYoZSo9LTEpLHImJihlPXQucm91bmQoZSxBZShlLHIpKSksbj0xK01hdGguZmxvb3IoMWUtMTIrTWF0aC5sb2coZSkvTWF0aC5MTjEwKSxuPU1hdGgubWF4KC0yNCxNYXRoLm1pbigyNCwzKk1hdGguZmxvb3IoKG4tMSkvMykpKSksU2VbOCtuLzNdfTt2YXIgQ2U9Lyg/OihbXntdKT8oWzw+PV5dKSk/KFsrXC0gXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuLT9cZCspPyhbYS16JV0pPy9pLExlPXQubWFwKHtiOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDE2KX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LHI6ZnVuY3Rpb24oZSxyKXtyZXR1cm4oZT10LnJvdW5kKGUsQWUoZSxyKSkpLnRvRml4ZWQoTWF0aC5tYXgoMCxNYXRoLm1pbigyMCxBZShlKigxKzFlLTE1KSxyKSkpKX19KTtmdW5jdGlvbiBQZSh0KXtyZXR1cm4gdCsiIn12YXIgSWU9dC50aW1lPXt9LHplPURhdGU7ZnVuY3Rpb24gT2UoKXt0aGlzLl89bmV3IERhdGUoYXJndW1lbnRzLmxlbmd0aD4xP0RhdGUuVVRDLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphcmd1bWVudHNbMF0pfU9lLnByb3RvdHlwZT17Z2V0RGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF0ZSgpfSxnZXREYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RheSgpfSxnZXRGdWxsWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRnVsbFllYXIoKX0sZ2V0SG91cnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0hvdXJzKCl9LGdldE1pbGxpc2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWlsbGlzZWNvbmRzKCl9LGdldE1pbnV0ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbnV0ZXMoKX0sZ2V0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01vbnRoKCl9LGdldFNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ1NlY29uZHMoKX0sZ2V0VGltZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VGltZSgpfSxnZXRUaW1lem9uZU9mZnNldDpmdW5jdGlvbigpe3JldHVybiAwfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy52YWx1ZU9mKCl9LHNldERhdGU6ZnVuY3Rpb24oKXtEZS5zZXRVVENEYXRlLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXREYXk6ZnVuY3Rpb24oKXtEZS5zZXRVVENEYXkuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7RGUuc2V0VVRDRnVsbFllYXIuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldEhvdXJzOmZ1bmN0aW9uKCl7RGUuc2V0VVRDSG91cnMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbGxpc2Vjb25kczpmdW5jdGlvbigpe0RlLnNldFVUQ01pbGxpc2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWludXRlczpmdW5jdGlvbigpe0RlLnNldFVUQ01pbnV0ZXMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1vbnRoOmZ1bmN0aW9uKCl7RGUuc2V0VVRDTW9udGguYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFNlY29uZHM6ZnVuY3Rpb24oKXtEZS5zZXRVVENTZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRUaW1lOmZ1bmN0aW9uKCl7RGUuc2V0VGltZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX19O3ZhciBEZT1EYXRlLnByb3RvdHlwZTtmdW5jdGlvbiBSZSh0LGUscil7ZnVuY3Rpb24gbihlKXt2YXIgcj10KGUpLG49YShyLDEpO3JldHVybiBlLXI8bi1lP3I6bn1mdW5jdGlvbiBpKHIpe3JldHVybiBlKHI9dChuZXcgemUoci0xKSksMSkscn1mdW5jdGlvbiBhKHQscil7cmV0dXJuIGUodD1uZXcgemUoK3QpLHIpLHR9ZnVuY3Rpb24gbyh0LG4sYSl7dmFyIG89aSh0KSxzPVtdO2lmKGE+MSlmb3IoO288bjspcihvKSVhfHxzLnB1c2gobmV3IERhdGUoK28pKSxlKG8sMSk7ZWxzZSBmb3IoO288bjspcy5wdXNoKG5ldyBEYXRlKCtvKSksZShvLDEpO3JldHVybiBzfXQuZmxvb3I9dCx0LnJvdW5kPW4sdC5jZWlsPWksdC5vZmZzZXQ9YSx0LnJhbmdlPW87dmFyIHM9dC51dGM9RmUodCk7cmV0dXJuIHMuZmxvb3I9cyxzLnJvdW5kPUZlKG4pLHMuY2VpbD1GZShpKSxzLm9mZnNldD1GZShhKSxzLnJhbmdlPWZ1bmN0aW9uKHQsZSxyKXt0cnl7emU9T2U7dmFyIG49bmV3IE9lO3JldHVybiBuLl89dCxvKG4sZSxyKX1maW5hbGx5e3plPURhdGV9fSx0fWZ1bmN0aW9uIEZlKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3RyeXt6ZT1PZTt2YXIgbj1uZXcgT2U7cmV0dXJuIG4uXz1lLHQobixyKS5ffWZpbmFsbHl7emU9RGF0ZX19fWZ1bmN0aW9uIEJlKGUpe3ZhciByPWUuZGF0ZVRpbWUsbj1lLmRhdGUsaT1lLnRpbWUsYT1lLnBlcmlvZHMsbz1lLmRheXMscz1lLnNob3J0RGF5cyxsPWUubW9udGhzLGM9ZS5zaG9ydE1vbnRocztmdW5jdGlvbiB1KHQpe3ZhciBlPXQubGVuZ3RoO2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGksYSxvPVtdLHM9LTEsbD0wOysrczxlOykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShpPU5lW249dC5jaGFyQXQoKytzKV0pJiYobj10LmNoYXJBdCgrK3MpKSwoYT1fW25dKSYmKG49YShyLG51bGw9PWk/ImUiPT09bj8iICI6IjAiOmkpKSxvLnB1c2gobiksbD1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShsLHMpKSxvLmpvaW4oIiIpfXJldHVybiByLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciByPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxsfTtpZihoKHIsdCxlLDApIT1lLmxlbmd0aClyZXR1cm4gbnVsbDsicCJpbiByJiYoci5IPXIuSCUxMisxMipyLnApO3ZhciBuPW51bGwhPXIuWiYmemUhPT1PZSxpPW5ldyhuP09lOnplKTtyZXR1cm4iaiJpbiByP2kuc2V0RnVsbFllYXIoci55LDAsci5qKToiVyJpbiByfHwiVSJpbiByPygidyJpbiByfHwoci53PSJXImluIHI/MTowKSxpLnNldEZ1bGxZZWFyKHIueSwwLDEpLGkuc2V0RnVsbFllYXIoci55LDAsIlciaW4gcj8oci53KzYpJTcrNypyLlctKGkuZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKGkuZ2V0RGF5KCkrNiklNykpOmkuc2V0RnVsbFllYXIoci55LHIubSxyLmQpLGkuc2V0SG91cnMoci5IKyhyLlovMTAwfDApLHIuTStyLlolMTAwLHIuUyxyLkwpLG4/aS5fOml9LHIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0scn1mdW5jdGlvbiBoKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8scz0wLGw9ZS5sZW5ndGgsYz1yLmxlbmd0aDtzPGw7KXtpZihuPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KHMrKykpKXtpZihvPWUuY2hhckF0KHMrKyksIShhPXdbbyBpbiBOZT9lLmNoYXJBdChzKyspOm9dKXx8KG49YSh0LHIsbikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1yLmNoYXJDb2RlQXQobisrKSlyZXR1cm4tMX1yZXR1cm4gbn11LnV0Yz1mdW5jdGlvbih0KXt2YXIgZT11KHQpO2Z1bmN0aW9uIHIodCl7dHJ5e3ZhciByPW5ldyh6ZT1PZSk7cmV0dXJuIHIuXz10LGUocil9ZmluYWxseXt6ZT1EYXRlfX1yZXR1cm4gci5wYXJzZT1mdW5jdGlvbih0KXt0cnl7emU9T2U7dmFyIHI9ZS5wYXJzZSh0KTtyZXR1cm4gciYmci5ffWZpbmFsbHl7emU9RGF0ZX19LHIudG9TdHJpbmc9ZS50b1N0cmluZyxyfSx1Lm11bHRpPXUudXRjLm11bHRpPW9yO3ZhciBmPXQubWFwKCkscD1xZShvKSxkPUhlKG8pLGc9cWUocyksbT1IZShzKSx2PXFlKGwpLHk9SGUobCkseD1xZShjKSxiPUhlKGMpO2EuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtmLnNldCh0LnRvTG93ZXJDYXNlKCksZSl9KSk7dmFyIF89e2E6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gbFt0LmdldE1vbnRoKCldfSxjOnUociksZDpmdW5jdGlvbih0LGUpe3JldHVybiBWZSh0LmdldERhdGUoKSxlLDIpfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZlKHQuZ2V0RGF0ZSgpLGUsMil9LEg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmUodC5nZXRIb3VycygpLGUsMil9LEk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmUodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfSxqOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZlKDErSWUuZGF5T2ZZZWFyKHQpLGUsMyl9LEw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmUodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfSxtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZlKHQuZ2V0TW9udGgoKSsxLGUsMil9LE06ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmUodC5nZXRNaW51dGVzKCksZSwyKX0scDpmdW5jdGlvbih0KXtyZXR1cm4gYVsrKHQuZ2V0SG91cnMoKT49MTIpXX0sUzpmdW5jdGlvbih0LGUpe3JldHVybiBWZSh0LmdldFNlY29uZHMoKSxlLDIpfSxVOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZlKEllLnN1bmRheU9mWWVhcih0KSxlLDIpfSx3OmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERheSgpfSxXOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZlKEllLm1vbmRheU9mWWVhcih0KSxlLDIpfSx4OnUobiksWDp1KGkpLHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmUodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfSxZOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZlKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX0sWjppciwiJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSx3PXthOmZ1bmN0aW9uKHQsZSxyKXtnLmxhc3RJbmRleD0wO3ZhciBuPWcuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PW0uZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxlLHIpe3AubGFzdEluZGV4PTA7dmFyIG49cC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9ZC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUscil7eC5sYXN0SW5kZXg9MDt2YXIgbj14LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1iLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxyKXt2Lmxhc3RJbmRleD0wO3ZhciBuPXYuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPXkuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBoKHQsXy5jLnRvU3RyaW5nKCksZSxyKX0sZDpRZSxlOlFlLEg6dHIsSTp0cixqOiRlLEw6bnIsbTpLZSxNOmVyLHA6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWYuZ2V0KGUuc2xpY2UocixyKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09bj8tMToodC5wPW4scil9LFM6cnIsVTpZZSx3OkdlLFc6V2UseDpmdW5jdGlvbih0LGUscil7cmV0dXJuIGgodCxfLngudG9TdHJpbmcoKSxlLHIpfSxYOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaCh0LF8uWC50b1N0cmluZygpLGUscil9LHk6WGUsWTpaZSxaOkplLCIlIjphcn07cmV0dXJuIHV9SWUueWVhcj1SZSgoZnVuY3Rpb24odCl7cmV0dXJuKHQ9SWUuZGF5KHQpKS5zZXRNb250aCgwLDEpLHR9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpLEllLnllYXJzPUllLnllYXIucmFuZ2UsSWUueWVhcnMudXRjPUllLnllYXIudXRjLnJhbmdlLEllLmRheT1SZSgoZnVuY3Rpb24odCl7dmFyIGU9bmV3IHplKDJlMywwKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKSxlfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpLEllLmRheXM9SWUuZGF5LnJhbmdlLEllLmRheXMudXRjPUllLmRheS51dGMucmFuZ2UsSWUuZGF5T2ZZZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPUllLnllYXIodCk7cmV0dXJuIE1hdGguZmxvb3IoKHQtZS02ZTQqKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNSl9LFsic3VuZGF5IiwibW9uZGF5IiwidHVlc2RheSIsIndlZG5lc2RheSIsInRodXJzZGF5IiwiZnJpZGF5Iiwic2F0dXJkYXkiXS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2U9Ny1lO3ZhciByPUllW3RdPVJlKChmdW5jdGlvbih0KXtyZXR1cm4odD1JZS5kYXkodCkpLnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrZSklNyksdH0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3Kk1hdGguZmxvb3IoZSkpfSksKGZ1bmN0aW9uKHQpe3ZhciByPUllLnllYXIodCkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKEllLmRheU9mWWVhcih0KSsocitlKSU3KS83KS0ociE9PWUpfSkpO0llW3QrInMiXT1yLnJhbmdlLEllW3QrInMiXS51dGM9ci51dGMucmFuZ2UsSWVbdCsiT2ZZZWFyIl09ZnVuY3Rpb24odCl7dmFyIHI9SWUueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoSWUuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpfX0pKSxJZS53ZWVrPUllLnN1bmRheSxJZS53ZWVrcz1JZS5zdW5kYXkucmFuZ2UsSWUud2Vla3MudXRjPUllLnN1bmRheS51dGMucmFuZ2UsSWUud2Vla09mWWVhcj1JZS5zdW5kYXlPZlllYXI7dmFyIE5lPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGplPS9eXHMqXGQrLyxVZT0vXiUvO2Z1bmN0aW9uIFZlKHQsZSxyKXt2YXIgbj10PDA/Ii0iOiIiLGk9KG4/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIHFlKGUpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86IitlLm1hcCh0LnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBIZSh0KXtmb3IodmFyIGU9bmV3IF8scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnNldCh0W3JdLnRvTG93ZXJDYXNlKCkscik7cmV0dXJuIGV9ZnVuY3Rpb24gR2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWWUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFplKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8odC55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbixpPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBpPyh0Lnk9KG49K2lbMF0pKyhuPjY4PzE5MDA6MmUzKSxyK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKZSh0LGUscil7cmV0dXJuL15bKy1dXGR7NH0kLy50ZXN0KGU9ZS5zbGljZShyLHIrNSkpPyh0Llo9LWUscis1KTotMX1mdW5jdGlvbiBLZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUWUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gJGUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lmo9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdHIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXIodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpLHI9ZT4wPyItIjoiKyIsbj15KGUpLzYwfDAsaT15KGUpJTYwO3JldHVybiByK1ZlKG4sIjAiLDIpK1ZlKGksIjAiLDIpfWZ1bmN0aW9uIGFyKHQsZSxyKXtVZS5sYXN0SW5kZXg9MDt2YXIgbj1VZS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIG9yKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPS0xOysrcjxlOyl0W3JdWzBdPXRoaXModFtyXVswXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49dFtyXTshblsxXShlKTspbj10Wysrcl07cmV0dXJuIG5bMF0oZSl9fXQubG9jYWxlPWZ1bmN0aW9uKHQpe3JldHVybntudW1iZXJGb3JtYXQ6RWUodCksdGltZUZvcm1hdDpCZSh0KX19O3ZhciBzcj10LmxvY2FsZSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlbS8lZC8lWSIsdGltZToiJUg6JU06JVMiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gbHIoKXt9dC5mb3JtYXQ9c3IubnVtYmVyRm9ybWF0LHQuZ2VvPXt9LGxyLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24odCl7dXIodCx0aGlzLnQsY3IpLHVyKGNyLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWNyLnQ6dGhpcy5zPWNyLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBjcj1uZXcgbHI7ZnVuY3Rpb24gdXIodCxlLHIpe3ZhciBuPXIucz10K2UsaT1uLXQsYT1uLWk7ci50PXQtYSsoZS1pKX1mdW5jdGlvbiBocih0LGUpe3QmJnByLmhhc093blByb3BlcnR5KHQudHlwZSkmJnByW3QudHlwZV0odCxlKX10Lmdlby5zdHJlYW09ZnVuY3Rpb24odCxlKXt0JiZmci5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP2ZyW3QudHlwZV0odCxlKTpocih0LGUpfTt2YXIgZnI9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtocih0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaHIocltuXS5nZW9tZXRyeSxlKX19LHByPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspdD1yW25dLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7ZHIodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWRyKHJbbl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe2dyKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZ3IocltuXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWhyKHJbbl0sZSl9fTtmdW5jdGlvbiBkcih0LGUscil7dmFyIG4saT0tMSxhPXQubGVuZ3RoLXI7Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KW49dFtpXSxlLnBvaW50KG5bMF0sblsxXSxuWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBncih0LGUpe3ZhciByPS0xLG49dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytyPG47KWRyKHRbcl0sZSwxKTtlLnBvbHlnb25FbmQoKX10Lmdlby5hcmVhPWZ1bmN0aW9uKGUpe3JldHVybiBtcj0wLHQuZ2VvLnN0cmVhbShlLENyKSxtcn07dmFyIG1yLHZyLHlyLHhyLGJyLF9yLHdyLFRyLGtyLE1yLEFyLFNyLEVyPW5ldyBscixDcj17c3BoZXJlOmZ1bmN0aW9uKCl7bXIrPTQqQXR9LHBvaW50Ok8sbGluZVN0YXJ0Ok8sbGluZUVuZDpPLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0VyLnJlc2V0KCksQ3IubGluZVN0YXJ0PUxyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9MipFcjttcis9dDwwPzQqQXQrdDp0LENyLmxpbmVTdGFydD1Dci5saW5lRW5kPUNyLnBvaW50PU99fTtmdW5jdGlvbiBMcigpe3ZhciB0LGUscixuLGk7ZnVuY3Rpb24gYSh0LGUpe2U9ZSpMdC8yK0F0LzQ7dmFyIGE9KHQqPUx0KS1yLG89YT49MD8xOi0xLHM9byphLGw9TWF0aC5jb3MoZSksYz1NYXRoLnNpbihlKSx1PWkqYyxoPW4qbCt1Kk1hdGguY29zKHMpLGY9dSpvKk1hdGguc2luKHMpO0VyLmFkZChNYXRoLmF0YW4yKGYsaCkpLHI9dCxuPWwsaT1jfUNyLnBvaW50PWZ1bmN0aW9uKG8scyl7Q3IucG9pbnQ9YSxyPSh0PW8pKkx0LG49TWF0aC5jb3Mocz0oZT1zKSpMdC8yK0F0LzQpLGk9TWF0aC5zaW4ocyl9LENyLmxpbmVFbmQ9ZnVuY3Rpb24oKXthKHQsZSl9fWZ1bmN0aW9uIFByKHQpe3ZhciBlPXRbMF0scj10WzFdLG49TWF0aC5jb3Mocik7cmV0dXJuW24qTWF0aC5jb3MoZSksbipNYXRoLnNpbihlKSxNYXRoLnNpbihyKV19ZnVuY3Rpb24gSXIodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24genIodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIE9yKHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gRHIodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIFJyKHQpe3ZhciBlPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89ZSx0WzFdLz1lLHRbMl0vPWV9ZnVuY3Rpb24gRnIodCl7cmV0dXJuW01hdGguYXRhbjIodFsxXSx0WzBdKSxEdCh0WzJdKV19ZnVuY3Rpb24gQnIodCxlKXtyZXR1cm4geSh0WzBdLWVbMF0pPGt0JiZ5KHRbMV0tZVsxXSk8a3R9dC5nZW8uYm91bmRzPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6bSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXYsZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9YixjPTAsQ3IucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtDci5wb2x5Z29uRW5kKCksZi5wb2ludD1wLGYubGluZVN0YXJ0PWcsZi5saW5lRW5kPW0sRXI8MD8oZT0tKG49MTgwKSxyPS0oaT05MCkpOmM+a3Q/aT05MDpjPC1rdCYmKHI9LTkwKSxoWzBdPWUsaFsxXT1ufX07ZnVuY3Rpb24gcCh0LGEpe3UucHVzaChoPVtlPXQsbj10XSksYTxyJiYocj1hKSxhPmkmJihpPWEpfWZ1bmN0aW9uIGQodCxvKXt2YXIgcz1QcihbdCpMdCxvKkx0XSk7aWYobCl7dmFyIGM9enIobCxzKSx1PXpyKFtjWzFdLC1jWzBdLDBdLGMpO1JyKHUpLHU9RnIodSk7dmFyIGg9dC1hLGY9aD4wPzE6LTEsZD11WzBdKlB0KmYsZz15KGgpPjE4MDtpZihnXihmKmE8ZCYmZDxmKnQpKShtPXVbMV0qUHQpPmkmJihpPW0pO2Vsc2UgaWYoZ14oZiphPChkPShkKzM2MCklMzYwLTE4MCkmJmQ8Zip0KSl7dmFyIG07KG09LXVbMV0qUHQpPHImJihyPW0pfWVsc2UgbzxyJiYocj1vKSxvPmkmJihpPW8pO2c/dDxhP18oZSx0KT5fKGUsbikmJihuPXQpOl8odCxuKT5fKGUsbikmJihlPXQpOm4+PWU/KHQ8ZSYmKGU9dCksdD5uJiYobj10KSk6dD5hP18oZSx0KT5fKGUsbikmJihuPXQpOl8odCxuKT5fKGUsbikmJihlPXQpfWVsc2UgcCh0LG8pO2w9cyxhPXR9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZH1mdW5jdGlvbiBtKCl7aFswXT1lLGhbMV09bixmLnBvaW50PXAsbD1udWxsfWZ1bmN0aW9uIHYodCxlKXtpZihsKXt2YXIgcj10LWE7Yys9eShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyfWVsc2Ugbz10LHM9ZTtDci5wb2ludCh0LGUpLGQodCxlKX1mdW5jdGlvbiB4KCl7Q3IubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYigpe3YobyxzKSxDci5saW5lRW5kKCkseShjKT5rdCYmKGU9LShuPTE4MCkpLGhbMF09ZSxoWzFdPW4sbD1udWxsfWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIFQodCxlKXtyZXR1cm4gZVswXTw9ZVsxXT9lWzBdPD10JiZ0PD1lWzFdOnQ8ZVswXXx8ZVsxXTx0fXJldHVybiBmdW5jdGlvbihhKXtpZihpPW49LShlPXI9MS8wKSx1PVtdLHQuZ2VvLnN0cmVhbShhLGYpLGM9dS5sZW5ndGgpe3Uuc29ydCh3KTtmb3IodmFyIG89MSxzPVtnPXVbMF1dO288YzsrK28pVCgocD11W29dKVswXSxnKXx8VChwWzFdLGcpPyhfKGdbMF0scFsxXSk+XyhnWzBdLGdbMV0pJiYoZ1sxXT1wWzFdKSxfKHBbMF0sZ1sxXSk+XyhnWzBdLGdbMV0pJiYoZ1swXT1wWzBdKSk6cy5wdXNoKGc9cCk7Zm9yKHZhciBsLGMscCxkPS0xLzAsZz0obz0wLHNbYz1zLmxlbmd0aC0xXSk7bzw9YztnPXAsKytvKXA9c1tvXSwobD1fKGdbMV0scFswXSkpPmQmJihkPWwsZT1wWzBdLG49Z1sxXSl9cmV0dXJuIHU9aD1udWxsLGU9PT0xLzB8fHI9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZSxyXSxbbixpXV19fSgpLHQuZ2VvLmNlbnRyb2lkPWZ1bmN0aW9uKGUpe3ZyPXlyPXhyPWJyPV9yPXdyPVRyPWtyPU1yPUFyPVNyPTAsdC5nZW8uc3RyZWFtKGUsTnIpO3ZhciByPU1yLG49QXIsaT1TcixhPXIqcituKm4raSppO3JldHVybiBhPE10JiYocj13cixuPVRyLGk9a3IseXI8a3QmJihyPXhyLG49YnIsaT1fciksKGE9cipyK24qbitpKmkpPE10KT9bTmFOLE5hTl06W01hdGguYXRhbjIobixyKSpQdCxEdChpL01hdGguc3FydChhKSkqUHRdfTt2YXIgTnI9e3NwaGVyZTpPLHBvaW50OmpyLGxpbmVTdGFydDpWcixsaW5lRW5kOnFyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe05yLmxpbmVTdGFydD1Icn0scG9seWdvbkVuZDpmdW5jdGlvbigpe05yLmxpbmVTdGFydD1Wcn19O2Z1bmN0aW9uIGpyKHQsZSl7dCo9THQ7dmFyIHI9TWF0aC5jb3MoZSo9THQpO1VyKHIqTWF0aC5jb3ModCkscipNYXRoLnNpbih0KSxNYXRoLnNpbihlKSl9ZnVuY3Rpb24gVXIodCxlLHIpeysrdnIseHIrPSh0LXhyKS92cixicis9KGUtYnIpL3ZyLF9yKz0oci1fcikvdnJ9ZnVuY3Rpb24gVnIoKXt2YXIgdCxlLHI7ZnVuY3Rpb24gbihuLGkpe24qPUx0O3ZhciBhPU1hdGguY29zKGkqPUx0KSxvPWEqTWF0aC5jb3Mobikscz1hKk1hdGguc2luKG4pLGw9TWF0aC5zaW4oaSksYz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYz1lKmwtcipzKSpjKyhjPXIqby10KmwpKmMrKGM9dCpzLWUqbykqYyksdCpvK2UqcytyKmwpO3lyKz1jLHdyKz1jKih0Kyh0PW8pKSxUcis9YyooZSsoZT1zKSksa3IrPWMqKHIrKHI9bCkpLFVyKHQsZSxyKX1Oci5wb2ludD1mdW5jdGlvbihpLGEpe2kqPUx0O3ZhciBvPU1hdGguY29zKGEqPUx0KTt0PW8qTWF0aC5jb3MoaSksZT1vKk1hdGguc2luKGkpLHI9TWF0aC5zaW4oYSksTnIucG9pbnQ9bixVcih0LGUscil9fWZ1bmN0aW9uIHFyKCl7TnIucG9pbnQ9anJ9ZnVuY3Rpb24gSHIoKXt2YXIgdCxlLHIsbixpO2Z1bmN0aW9uIGEodCxlKXt0Kj1MdDt2YXIgYT1NYXRoLmNvcyhlKj1MdCksbz1hKk1hdGguY29zKHQpLHM9YSpNYXRoLnNpbih0KSxsPU1hdGguc2luKGUpLGM9bipsLWkqcyx1PWkqby1yKmwsaD1yKnMtbipvLGY9TWF0aC5zcXJ0KGMqYyt1KnUraCpoKSxwPXIqbytuKnMraSpsLGQ9ZiYmLU90KHApL2YsZz1NYXRoLmF0YW4yKGYscCk7TXIrPWQqYyxBcis9ZCp1LFNyKz1kKmgseXIrPWcsd3IrPWcqKHIrKHI9bykpLFRyKz1nKihuKyhuPXMpKSxrcis9ZyooaSsoaT1sKSksVXIocixuLGkpfU5yLnBvaW50PWZ1bmN0aW9uKG8scyl7dD1vLGU9cyxOci5wb2ludD1hLG8qPUx0O3ZhciBsPU1hdGguY29zKHMqPUx0KTtyPWwqTWF0aC5jb3Mobyksbj1sKk1hdGguc2luKG8pLGk9TWF0aC5zaW4ocyksVXIocixuLGkpfSxOci5saW5lRW5kPWZ1bmN0aW9uKCl7YSh0LGUpLE5yLmxpbmVFbmQ9cXIsTnIucG9pbnQ9anJ9fWZ1bmN0aW9uIEdyKHQsZSl7ZnVuY3Rpb24gcihyLG4pe3JldHVybiByPXQocixuKSxlKHJbMF0sclsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7cmV0dXJuKHI9ZS5pbnZlcnQocixuKSkmJnQuaW52ZXJ0KHJbMF0sclsxXSl9KSxyfWZ1bmN0aW9uIFlyKCl7cmV0dXJuITB9ZnVuY3Rpb24gV3IodCxlLHIsbixpKXt2YXIgYT1bXSxvPVtdO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLHI9dFswXSxuPXRbZV07aWYoQnIocixuKSl7aS5saW5lU3RhcnQoKTtmb3IodmFyIHM9MDtzPGU7KytzKWkucG9pbnQoKHI9dFtzXSlbMF0sclsxXSk7aS5saW5lRW5kKCl9ZWxzZXt2YXIgbD1uZXcgWHIocix0LG51bGwsITApLGM9bmV3IFhyKHIsbnVsbCxsLCExKTtsLm89YyxhLnB1c2gobCksby5wdXNoKGMpLGw9bmV3IFhyKG4sdCxudWxsLCExKSxjPW5ldyBYcihuLG51bGwsbCwhMCksbC5vPWMsYS5wdXNoKGwpLG8ucHVzaChjKX19fSkpLG8uc29ydChlKSxacihhKSxacihvKSxhLmxlbmd0aCl7Zm9yKHZhciBzPTAsbD1yLGM9by5sZW5ndGg7czxjOysrcylvW3NdLmU9bD0hbDtmb3IodmFyIHUsaCxmPWFbMF07Oyl7Zm9yKHZhciBwPWYsZD0hMDtwLnY7KWlmKChwPXAubik9PT1mKXJldHVybjt1PXAueixpLmxpbmVTdGFydCgpO2Rve2lmKHAudj1wLm8udj0hMCxwLmUpe2lmKGQpZm9yKHM9MCxjPXUubGVuZ3RoO3M8YzsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4ocC54LHAubi54LDEsaSk7cD1wLm59ZWxzZXtpZihkKWZvcihzPSh1PXAucC56KS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihwLngscC5wLngsLTEsaSk7cD1wLnB9dT0ocD1wLm8pLnosZD0hZH13aGlsZSghcC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIFpyKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxyLG49MCxpPXRbMF07KytuPGU7KWkubj1yPXRbbl0sci5wPWksaT1yO2kubj1yPXRbMF0sci5wPWl9fWZ1bmN0aW9uIFhyKHQsZSxyLG4pe3RoaXMueD10LHRoaXMuej1lLHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gSnIoZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEsbyl7dmFyIHMsbD1yKG8pLGM9YS5pbnZlcnQoaVswXSxpWzFdKSx1PXtwb2ludDpoLGxpbmVTdGFydDpwLGxpbmVFbmQ6ZCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt1LnBvaW50PWIsdS5saW5lU3RhcnQ9Xyx1LmxpbmVFbmQ9dyxzPVtdLGc9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt1LnBvaW50PWgsdS5saW5lU3RhcnQ9cCx1LmxpbmVFbmQ9ZCxzPXQubWVyZ2Uocyk7dmFyIGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPVtNYXRoLnNpbihyKSwtTWF0aC5jb3MociksMF0sYT0wLG89MDtFci5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcyl7dmFyIGM9ZVtzXSx1PWMubGVuZ3RoO2lmKHUpZm9yKHZhciBoPWNbMF0sZj1oWzBdLHA9aFsxXS8yK0F0LzQsZD1NYXRoLnNpbihwKSxnPU1hdGguY29zKHApLG09MTs7KXttPT09dSYmKG09MCk7dmFyIHY9KHQ9Y1ttXSlbMF0seT10WzFdLzIrQXQvNCx4PU1hdGguc2luKHkpLGI9TWF0aC5jb3MoeSksXz12LWYsdz1fPj0wPzE6LTEsVD13Kl8saz1UPkF0LE09ZCp4O2lmKEVyLmFkZChNYXRoLmF0YW4yKE0qdypNYXRoLnNpbihUKSxnKmIrTSpNYXRoLmNvcyhUKSkpLGErPWs/Xyt3KlN0Ol8sa15mPj1yXnY+PXIpe3ZhciBBPXpyKFByKGgpLFByKHQpKTtScihBKTt2YXIgUz16cihpLEEpO1JyKFMpO3ZhciBFPShrXl8+PTA/LTE6MSkqRHQoU1syXSk7KG4+RXx8bj09PUUmJihBWzBdfHxBWzFdKSkmJihvKz1rXl8+PTA/MTotMSl9aWYoIW0rKylicmVhaztmPXYsZD14LGc9YixoPXR9fXJldHVybihhPC1rdHx8YTxrdCYmRXI8LWt0KV4xJm99KGMsZyk7cy5sZW5ndGg/KHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLFdyKHMsJHIsZSxuLG8pKTplJiYoeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksby5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpKSx4JiYoby5wb2x5Z29uRW5kKCkseD0hMSkscz1nPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe28ucG9seWdvblN0YXJ0KCksby5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpLG8ucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gaCh0LHIpe3ZhciBuPWEodCxyKTtlKHQ9blswXSxyPW5bMV0pJiZvLnBvaW50KHQscil9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWEodCxlKTtsLnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gcCgpe3UucG9pbnQ9ZixsLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGQoKXt1LnBvaW50PWgsbC5saW5lRW5kKCl9dmFyIGcsbSx2PVFyKCkseT1yKHYpLHg9ITE7ZnVuY3Rpb24gYih0LGUpe20ucHVzaChbdCxlXSk7dmFyIHI9YSh0LGUpO3kucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiBfKCl7eS5saW5lU3RhcnQoKSxtPVtdfWZ1bmN0aW9uIHcoKXtiKG1bMF1bMF0sbVswXVsxXSkseS5saW5lRW5kKCk7dmFyIHQsZT15LmNsZWFuKCkscj12LmJ1ZmZlcigpLG49ci5sZW5ndGg7aWYobS5wb3AoKSxnLnB1c2gobSksbT1udWxsLG4paWYoMSZlKXt2YXIgaSxhPS0xO2lmKChuPSh0PXJbMF0pLmxlbmd0aC0xKT4wKXtmb3IoeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksby5saW5lU3RhcnQoKTsrK2E8bjspby5wb2ludCgoaT10W2FdKVswXSxpWzFdKTtvLmxpbmVFbmQoKX19ZWxzZSBuPjEmJjImZSYmci5wdXNoKHIucG9wKCkuY29uY2F0KHIuc2hpZnQoKSkpLHMucHVzaChyLmZpbHRlcihLcikpfXJldHVybiB1fX1mdW5jdGlvbiBLcih0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBRcigpe3ZhciB0LGU9W107cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0scG9pbnQ6ZnVuY3Rpb24oZSxyKXt0LnB1c2goW2Uscl0pfSxsaW5lRW5kOk8sYnVmZmVyOmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn0scmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfX19ZnVuY3Rpb24gJHIodCxlKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tQ3Qta3Q6Q3QtdFsxXSktKChlPWUueClbMF08MD9lWzFdLUN0LWt0OkN0LWVbMV0pfXZhciB0bj1KcihZciwoZnVuY3Rpb24odCl7dmFyIGUscj1OYU4sbj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihhLG8pe3ZhciBzPWE+MD9BdDotQXQsbD15KGEtcik7eShsLUF0KTxrdD8odC5wb2ludChyLG49KG4rbykvMj4wP0N0Oi1DdCksdC5wb2ludChpLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLG4pLHQucG9pbnQoYSxuKSxlPTApOmkhPT1zJiZsPj1BdCYmKHkoci1pKTxrdCYmKHItPWkqa3QpLHkoYS1zKTxrdCYmKGEtPXMqa3QpLG49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPU1hdGguc2luKHQtcik7cmV0dXJuIHkobyk+a3Q/TWF0aC5hdGFuKChNYXRoLnNpbihlKSooYT1NYXRoLmNvcyhuKSkqTWF0aC5zaW4ociktTWF0aC5zaW4obikqKGk9TWF0aC5jb3MoZSkpKk1hdGguc2luKHQpKS8oaSphKm8pKTooZStuKS8yfShyLG4sYSxvKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsbiksZT0wKSx0LnBvaW50KHI9YSxuPW8pLGk9c30sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLHI9bj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fSksKGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpO2lmKG51bGw9PXQpaT1yKkN0LG4ucG9pbnQoLUF0LGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KEF0LGkpLG4ucG9pbnQoQXQsMCksbi5wb2ludChBdCwtaSksbi5wb2ludCgwLC1pKSxuLnBvaW50KC1BdCwtaSksbi5wb2ludCgtQXQsMCksbi5wb2ludCgtQXQsaSk7ZWxzZSBpZih5KHRbMF0tZVswXSk+a3Qpe3ZhciBhPXRbMF08ZVswXT9BdDotQXQ7aT1yKmEvMixuLnBvaW50KC1hLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KGEsaSl9ZWxzZSBuLnBvaW50KGVbMF0sZVsxXSl9KSxbLUF0LC1BdC8yXSk7ZnVuY3Rpb24gZW4odCl7dmFyIGU9TWF0aC5jb3ModCkscj1lPjAsbj15KGUpPmt0O3JldHVybiBKcihpLChmdW5jdGlvbih0KXt2YXIgZSxzLGwsYyx1O3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtjPWw9ITEsdT0xfSxwb2ludDpmdW5jdGlvbihoLGYpe3ZhciBwLGQ9W2gsZl0sZz1pKGgsZiksbT1yP2c/MDpvKGgsZik6Zz9vKGgrKGg8MD9BdDotQXQpLGYpOjA7aWYoIWUmJihjPWw9ZykmJnQubGluZVN0YXJ0KCksZyE9PWwmJihwPWEoZSxkKSwoQnIoZSxwKXx8QnIoZCxwKSkmJihkWzBdKz1rdCxkWzFdKz1rdCxnPWkoZFswXSxkWzFdKSkpLGchPT1sKXU9MCxnPyh0LmxpbmVTdGFydCgpLHA9YShkLGUpLHQucG9pbnQocFswXSxwWzFdKSk6KHA9YShlLGQpLHQucG9pbnQocFswXSxwWzFdKSx0LmxpbmVFbmQoKSksZT1wO2Vsc2UgaWYobiYmZSYmcl5nKXt2YXIgdjttJnN8fCEodj1hKGQsZSwhMCkpfHwodT0wLHI/KHQubGluZVN0YXJ0KCksdC5wb2ludCh2WzBdWzBdLHZbMF1bMV0pLHQucG9pbnQodlsxXVswXSx2WzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQodlsxXVswXSx2WzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQodlswXVswXSx2WzBdWzFdKSkpfSFnfHxlJiZCcihlLGQpfHx0LnBvaW50KGRbMF0sZFsxXSksZT1kLGw9ZyxzPW19LGxpbmVFbmQ6ZnVuY3Rpb24oKXtsJiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIHV8KGMmJmwpPDwxfX19KSxCbih0LDYqTHQpLHI/WzAsLXRdOlstQXQsdC1BdF0pO2Z1bmN0aW9uIGkodCxyKXtyZXR1cm4gTWF0aC5jb3ModCkqTWF0aC5jb3Mocik+ZX1mdW5jdGlvbiBhKHQscixuKXt2YXIgaT1bMSwwLDBdLGE9enIoUHIodCksUHIocikpLG89SXIoYSxhKSxzPWFbMF0sbD1vLXMqcztpZighbClyZXR1cm4hbiYmdDt2YXIgYz1lKm8vbCx1PS1lKnMvbCxoPXpyKGksYSksZj1EcihpLGMpO09yKGYsRHIoYSx1KSk7dmFyIHA9aCxkPUlyKGYscCksZz1JcihwLHApLG09ZCpkLWcqKElyKGYsZiktMSk7aWYoIShtPDApKXt2YXIgdj1NYXRoLnNxcnQobSkseD1EcihwLCgtZC12KS9nKTtpZihPcih4LGYpLHg9RnIoeCksIW4pcmV0dXJuIHg7dmFyIGIsXz10WzBdLHc9clswXSxUPXRbMV0saz1yWzFdO3c8XyYmKGI9XyxfPXcsdz1iKTt2YXIgTT13LV8sQT15KE0tQXQpPGt0O2lmKCFBJiZrPFQmJihiPVQsVD1rLGs9YiksQXx8TTxrdD9BP1Qraz4wXnhbMV08KHkoeFswXS1fKTxrdD9UOmspOlQ8PXhbMV0mJnhbMV08PWs6TT5BdF4oXzw9eFswXSYmeFswXTw9dykpe3ZhciBTPURyKHAsKC1kK3YpL2cpO3JldHVybiBPcihTLGYpLFt4LEZyKFMpXX19fWZ1bmN0aW9uIG8oZSxuKXt2YXIgaT1yP3Q6QXQtdCxhPTA7cmV0dXJuIGU8LWk/YXw9MTplPmkmJihhfD0yKSxuPC1pP2F8PTQ6bj5pJiYoYXw9OCksYX19ZnVuY3Rpb24gcm4odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBhLG89aS5hLHM9aS5iLGw9by54LGM9by55LHU9MCxoPTEsZj1zLngtbCxwPXMueS1jO2lmKGE9dC1sLGZ8fCEoYT4wKSl7aWYoYS89ZixmPDApe2lmKGE8dSlyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKGY+MCl7aWYoYT5oKXJldHVybjthPnUmJih1PWEpfWlmKGE9ci1sLGZ8fCEoYTwwKSl7aWYoYS89ZixmPDApe2lmKGE+aClyZXR1cm47YT51JiYodT1hKX1lbHNlIGlmKGY+MCl7aWYoYTx1KXJldHVybjthPGgmJihoPWEpfWlmKGE9ZS1jLHB8fCEoYT4wKSl7aWYoYS89cCxwPDApe2lmKGE8dSlyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKHA+MCl7aWYoYT5oKXJldHVybjthPnUmJih1PWEpfWlmKGE9bi1jLHB8fCEoYTwwKSl7aWYoYS89cCxwPDApe2lmKGE+aClyZXR1cm47YT51JiYodT1hKX1lbHNlIGlmKHA+MCl7aWYoYTx1KXJldHVybjthPGgmJihoPWEpfXJldHVybiB1PjAmJihpLmE9e3g6bCt1KmYseTpjK3UqcH0pLGg8MSYmKGkuYj17eDpsK2gqZix5OmMraCpwfSksaX19fX19fWZ1bmN0aW9uIG5uKGUscixuLGkpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgYyx1LGgsZixwLGQsZyxtLHYseSx4LGI9bCxfPVFyKCksdz1ybihlLHIsbixpKSxUPXtwb2ludDpBLGxpbmVTdGFydDpmdW5jdGlvbigpe1QucG9pbnQ9Uyx1JiZ1LnB1c2goaD1bXSk7eT0hMCx2PSExLGc9bT1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiYoUyhmLHApLGQmJnYmJl8ucmVqb2luKCksYy5wdXNoKF8uYnVmZmVyKCkpKTtULnBvaW50PUEsdiYmbC5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2w9XyxjPVtdLHU9W10seD0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe2w9YixjPXQubWVyZ2UoYyk7dmFyIHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj11Lmxlbmd0aCxuPXRbMV0saT0wO2k8cjsrK2kpZm9yKHZhciBhLG89MSxzPXVbaV0sbD1zLmxlbmd0aCxjPXNbMF07bzxsOysrbylhPXNbb10sY1sxXTw9bj9hWzFdPm4mJnp0KGMsYSx0KT4wJiYrK2U6YVsxXTw9biYmenQoYyxhLHQpPDAmJi0tZSxjPWE7cmV0dXJuIDAhPT1lfShbZSxpXSksbj14JiZyLGE9Yy5sZW5ndGg7KG58fGEpJiYobC5wb2x5Z29uU3RhcnQoKSxuJiYobC5saW5lU3RhcnQoKSxrKG51bGwsbnVsbCwxLGwpLGwubGluZUVuZCgpKSxhJiZXcihjLG8scixrLGwpLGwucG9seWdvbkVuZCgpKSxjPXU9aD1udWxsfX07ZnVuY3Rpb24gayh0LG8sbCxjKXt2YXIgdT0wLGg9MDtpZihudWxsPT10fHwodT1hKHQsbCkpIT09KGg9YShvLGwpKXx8cyh0LG8pPDBebD4wKWRve2MucG9pbnQoMD09PXV8fDM9PT11P2U6bix1PjE/aTpyKX13aGlsZSgodT0odStsKzQpJTQpIT09aCk7ZWxzZSBjLnBvaW50KG9bMF0sb1sxXSl9ZnVuY3Rpb24gTSh0LGEpe3JldHVybiBlPD10JiZ0PD1uJiZyPD1hJiZhPD1pfWZ1bmN0aW9uIEEodCxlKXtNKHQsZSkmJmwucG9pbnQodCxlKX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9TSh0PU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LHQpKSxlPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LGUpKSk7aWYodSYmaC5wdXNoKFt0LGVdKSx5KWY9dCxwPWUsZD1yLHk9ITEsciYmKGwubGluZVN0YXJ0KCksbC5wb2ludCh0LGUpKTtlbHNlIGlmKHImJnYpbC5wb2ludCh0LGUpO2Vsc2V7dmFyIG49e2E6e3g6Zyx5Om19LGI6e3g6dCx5OmV9fTt3KG4pPyh2fHwobC5saW5lU3RhcnQoKSxsLnBvaW50KG4uYS54LG4uYS55KSksbC5wb2ludChuLmIueCxuLmIueSkscnx8bC5saW5lRW5kKCkseD0hMSk6ciYmKGwubGluZVN0YXJ0KCksbC5wb2ludCh0LGUpLHg9ITEpfWc9dCxtPWUsdj1yfXJldHVybiBUfTtmdW5jdGlvbiBhKHQsaSl7cmV0dXJuIHkodFswXS1lKTxrdD9pPjA/MDozOnkodFswXS1uKTxrdD9pPjA/MjoxOnkodFsxXS1yKTxrdD9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBzKHQueCxlLngpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1hKHQsMSksbj1hKGUsMSk7cmV0dXJuIHIhPT1uP3ItbjowPT09cj9lWzFdLXRbMV06MT09PXI/dFswXS1lWzBdOjI9PT1yP3RbMV0tZVsxXTplWzBdLXRbMF19fWZ1bmN0aW9uIGFuKHQpe3ZhciBlPTAscj1BdC8zLG49TG4odCksaT1uKGUscik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZT10WzBdKkF0LzE4MCxyPXRbMV0qQXQvMTgwKTpbZS9BdCoxODAsci9BdCoxODBdfSxpfWZ1bmN0aW9uIG9uKHQsZSl7dmFyIHI9TWF0aC5zaW4odCksbj0ocitNYXRoLnNpbihlKSkvMixpPTErciooMipuLXIpLGE9TWF0aC5zcXJ0KGkpL247ZnVuY3Rpb24gbyh0LGUpe3ZhciByPU1hdGguc3FydChpLTIqbipNYXRoLnNpbihlKSkvbjtyZXR1cm5bcipNYXRoLnNpbih0Kj1uKSxhLXIqTWF0aC5jb3ModCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWEtZTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL24sRHQoKGktKHQqdCtyKnIpKm4qbikvKDIqbikpXX0sb310Lmdlby5jbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxhLG89e3N0cmVhbTpmdW5jdGlvbih0KXtyZXR1cm4gaSYmKGkudmFsaWQ9ITEpLChpPWEodCkpLnZhbGlkPSEwLGl9LGV4dGVudDpmdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1ubih0PStzWzBdWzBdLGU9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdKSxpJiYoaS52YWxpZD0hMSxpPW51bGwpLG8pOltbdCxlXSxbcixuXV19fTtyZXR1cm4gby5leHRlbnQoW1swLDBdLFs5NjAsNTAwXV0pfSwodC5nZW8uY29uaWNFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gYW4ob24pfSkucmF3PW9uLHQuZ2VvLmFsYmVycz1mdW5jdGlvbigpe3JldHVybiB0Lmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApfSx0Lmdlby5hbGJlcnNVc2E9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhPXQuZ2VvLmFsYmVycygpLG89dC5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLHM9dC5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksbD17cG9pbnQ6ZnVuY3Rpb24odCxyKXtlPVt0LHJdfX07ZnVuY3Rpb24gYyh0KXt2YXIgYT10WzBdLG89dFsxXTtyZXR1cm4gZT1udWxsLHIoYSxvKSxlfHwobihhLG8pLGUpfHxpKGEsbyksZX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9YS5zY2FsZSgpLHI9YS50cmFuc2xhdGUoKSxuPSh0WzBdLXJbMF0pL2UsaT0odFsxXS1yWzFdKS9lO3JldHVybihpPj0uMTImJmk8LjIzNCYmbj49LS40MjUmJm48LS4yMTQ/bzppPj0uMTY2JiZpPC4yMzQmJm4+PS0uMjE0JiZuPC0uMTE1P3M6YSkuaW52ZXJ0KHQpfSxjLnN0cmVhbT1mdW5jdGlvbih0KXt2YXIgZT1hLnN0cmVhbSh0KSxyPW8uc3RyZWFtKHQpLG49cy5zdHJlYW0odCk7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHQsaSl7ZS5wb2ludCh0LGkpLHIucG9pbnQodCxpKSxuLnBvaW50KHQsaSl9LHNwaGVyZTpmdW5jdGlvbigpe2Uuc3BoZXJlKCksci5zcGhlcmUoKSxuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLHIubGluZVN0YXJ0KCksbi5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2UubGluZUVuZCgpLHIubGluZUVuZCgpLG4ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLHIucG9seWdvblN0YXJ0KCksbi5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLHIucG9seWdvbkVuZCgpLG4ucG9seWdvbkVuZCgpfX19LGMucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnByZWNpc2lvbih0KSxvLnByZWNpc2lvbih0KSxzLnByZWNpc2lvbih0KSxjKTphLnByZWNpc2lvbigpfSxjLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnNjYWxlKHQpLG8uc2NhbGUoLjM1KnQpLHMuc2NhbGUodCksYy50cmFuc2xhdGUoYS50cmFuc2xhdGUoKSkpOmEuc2NhbGUoKX0sYy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudHJhbnNsYXRlKCk7dmFyIGU9YS5zY2FsZSgpLHU9K3RbMF0saD0rdFsxXTtyZXR1cm4gcj1hLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbdS0uNDU1KmUsaC0uMjM4KmVdLFt1Ky40NTUqZSxoKy4yMzgqZV1dKS5zdHJlYW0obCkucG9pbnQsbj1vLnRyYW5zbGF0ZShbdS0uMzA3KmUsaCsuMjAxKmVdKS5jbGlwRXh0ZW50KFtbdS0uNDI1KmUra3QsaCsuMTIqZStrdF0sW3UtLjIxNCplLWt0LGgrLjIzNCplLWt0XV0pLnN0cmVhbShsKS5wb2ludCxpPXMudHJhbnNsYXRlKFt1LS4yMDUqZSxoKy4yMTIqZV0pLmNsaXBFeHRlbnQoW1t1LS4yMTQqZStrdCxoKy4xNjYqZStrdF0sW3UtLjExNSplLWt0LGgrLjIzNCplLWt0XV0pLnN0cmVhbShsKS5wb2ludCxjfSxjLnNjYWxlKDEwNzApfTt2YXIgc24sbG4sY24sdW4saG4sZm4scG49e3BvaW50Ok8sbGluZVN0YXJ0Ok8sbGluZUVuZDpPLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2xuPTAscG4ubGluZVN0YXJ0PWRufSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7cG4ubGluZVN0YXJ0PXBuLmxpbmVFbmQ9cG4ucG9pbnQ9Tyxzbis9eShsbi8yKX19O2Z1bmN0aW9uIGRuKCl7dmFyIHQsZSxyLG47ZnVuY3Rpb24gaSh0LGUpe2xuKz1uKnQtciplLHI9dCxuPWV9cG4ucG9pbnQ9ZnVuY3Rpb24oYSxvKXtwbi5wb2ludD1pLHQ9cj1hLGU9bj1vfSxwbi5saW5lRW5kPWZ1bmN0aW9uKCl7aSh0LGUpfX12YXIgZ249e3BvaW50OmZ1bmN0aW9uKHQsZSl7dDxjbiYmKGNuPXQpO3Q+aG4mJihobj10KTtlPHVuJiYodW49ZSk7ZT5mbiYmKGZuPWUpfSxsaW5lU3RhcnQ6TyxsaW5lRW5kOk8scG9seWdvblN0YXJ0Ok8scG9seWdvbkVuZDpPfTtmdW5jdGlvbiBtbigpe3ZhciB0PXZuKDQuNSksZT1bXSxyPXtwb2ludDpuLGxpbmVTdGFydDpmdW5jdGlvbigpe3IucG9pbnQ9aX0sbGluZUVuZDpvLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3IubGluZUVuZD1zfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ci5saW5lRW5kPW8sci5wb2ludD1ufSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4gdD12bihlKSxyfSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZihlLmxlbmd0aCl7dmFyIHQ9ZS5qb2luKCIiKTtyZXR1cm4gZT1bXSx0fX19O2Z1bmN0aW9uIG4ocixuKXtlLnB1c2goIk0iLHIsIiwiLG4sdCl9ZnVuY3Rpb24gaSh0LG4pe2UucHVzaCgiTSIsdCwiLCIsbiksci5wb2ludD1hfWZ1bmN0aW9uIGEodCxyKXtlLnB1c2goIkwiLHQsIiwiLHIpfWZ1bmN0aW9uIG8oKXtyLnBvaW50PW59ZnVuY3Rpb24gcygpe2UucHVzaCgiWiIpfXJldHVybiByfWZ1bmN0aW9uIHZuKHQpe3JldHVybiJtMCwiK3QrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLTIqdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIisyKnQrInoifXZhciB5bix4bj17cG9pbnQ6Ym4sbGluZVN0YXJ0Ol9uLGxpbmVFbmQ6d24scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eG4ubGluZVN0YXJ0PVRufSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7eG4ucG9pbnQ9Ym4seG4ubGluZVN0YXJ0PV9uLHhuLmxpbmVFbmQ9d259fTtmdW5jdGlvbiBibih0LGUpe3hyKz10LGJyKz1lLCsrX3J9ZnVuY3Rpb24gX24oKXt2YXIgdCxlO2Z1bmN0aW9uIHIocixuKXt2YXIgaT1yLXQsYT1uLWUsbz1NYXRoLnNxcnQoaSppK2EqYSk7d3IrPW8qKHQrcikvMixUcis9byooZStuKS8yLGtyKz1vLGJuKHQ9cixlPW4pfXhuLnBvaW50PWZ1bmN0aW9uKG4saSl7eG4ucG9pbnQ9cixibih0PW4sZT1pKX19ZnVuY3Rpb24gd24oKXt4bi5wb2ludD1ibn1mdW5jdGlvbiBUbigpe3ZhciB0LGUscixuO2Z1bmN0aW9uIGkodCxlKXt2YXIgaT10LXIsYT1lLW4sbz1NYXRoLnNxcnQoaSppK2EqYSk7d3IrPW8qKHIrdCkvMixUcis9byoobitlKS8yLGtyKz1vLE1yKz0obz1uKnQtciplKSoocit0KSxBcis9byoobitlKSxTcis9MypvLGJuKHI9dCxuPWUpfXhuLnBvaW50PWZ1bmN0aW9uKGEsbyl7eG4ucG9pbnQ9aSxibih0PXI9YSxlPW49byl9LHhuLmxpbmVFbmQ9ZnVuY3Rpb24oKXtpKHQsZSl9fWZ1bmN0aW9uIGtuKHQpe3ZhciBlPTQuNSxyPXtwb2ludDpuLGxpbmVTdGFydDpmdW5jdGlvbigpe3IucG9pbnQ9aX0sbGluZUVuZDpvLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3IubGluZUVuZD1zfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ci5saW5lRW5kPW8sci5wb2ludD1ufSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gZT10LHJ9LHJlc3VsdDpPfTtmdW5jdGlvbiBuKHIsbil7dC5tb3ZlVG8ocitlLG4pLHQuYXJjKHIsbixlLDAsU3QpfWZ1bmN0aW9uIGkoZSxuKXt0Lm1vdmVUbyhlLG4pLHIucG9pbnQ9YX1mdW5jdGlvbiBhKGUscil7dC5saW5lVG8oZSxyKX1mdW5jdGlvbiBvKCl7ci5wb2ludD1ufWZ1bmN0aW9uIHMoKXt0LmNsb3NlUGF0aCgpfXJldHVybiByfWZ1bmN0aW9uIE1uKHQpe3ZhciBlPS41LHI9TWF0aC5jb3MoMzAqTHQpLG49MTY7ZnVuY3Rpb24gaSh0KXtyZXR1cm4obj9vOmEpKHQpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIEVuKGUsKGZ1bmN0aW9uKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfSkpfWZ1bmN0aW9uIG8oZSl7dmFyIHIsaSxhLG8sbCxjLHUsaCxmLHAsZCxnLG09e3BvaW50OnYsbGluZVN0YXJ0OnksbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksbS5saW5lU3RhcnQ9X30scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLG0ubGluZVN0YXJ0PXl9fTtmdW5jdGlvbiB2KHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIHkoKXtoPU5hTixtLnBvaW50PXgsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB4KHIsaSl7dmFyIGE9UHIoW3IsaV0pLG89dChyLGkpO3MoaCxmLHUscCxkLGcsaD1vWzBdLGY9b1sxXSx1PXIscD1hWzBdLGQ9YVsxXSxnPWFbMl0sbixlKSxlLnBvaW50KGgsZil9ZnVuY3Rpb24gYigpe20ucG9pbnQ9dixlLmxpbmVFbmQoKX1mdW5jdGlvbiBfKCl7eSgpLG0ucG9pbnQ9dyxtLmxpbmVFbmQ9VH1mdW5jdGlvbiB3KHQsZSl7eChyPXQsZSksaT1oLGE9ZixvPXAsbD1kLGM9ZyxtLnBvaW50PXh9ZnVuY3Rpb24gVCgpe3MoaCxmLHUscCxkLGcsaSxhLHIsbyxsLGMsbixlKSxtLmxpbmVFbmQ9YixiKCl9cmV0dXJuIG19ZnVuY3Rpb24gcyhuLGksYSxvLGwsYyx1LGgsZixwLGQsZyxtLHYpe3ZhciB4PXUtbixiPWgtaSxfPXgqeCtiKmI7aWYoXz40KmUmJm0tLSl7dmFyIHc9bytwLFQ9bCtkLGs9YytnLE09TWF0aC5zcXJ0KHcqdytUKlQrayprKSxBPU1hdGguYXNpbihrLz1NKSxTPXkoeShrKS0xKTxrdHx8eShhLWYpPGt0PyhhK2YpLzI6TWF0aC5hdGFuMihULHcpLEU9dChTLEEpLEM9RVswXSxMPUVbMV0sUD1DLW4sST1MLWksej1iKlAteCpJOyh6KnovXz5lfHx5KCh4KlArYipJKS9fLS41KT4uM3x8bypwK2wqZCtjKmc8cikmJihzKG4saSxhLG8sbCxjLEMsTCxTLHcvPU0sVC89TSxrLG0sdiksdi5wb2ludChDLEwpLHMoQyxMLFMsdyxULGssdSxoLGYscCxkLGcsbSx2KSl9fXJldHVybiBpLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0oZT10KnQpPjAmJjE2LGkpOk1hdGguc3FydChlKX0saX1mdW5jdGlvbiBBbih0KXt2YXIgZT1NbigoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdChbZSpQdCxyKlB0XSl9KSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBQbihlKHQpKX19ZnVuY3Rpb24gU24odCl7dGhpcy5zdHJlYW09dH1mdW5jdGlvbiBFbih0LGUpe3JldHVybntwb2ludDplLHNwaGVyZTpmdW5jdGlvbigpe3Quc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dC5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpfX19ZnVuY3Rpb24gQ24odCl7cmV0dXJuIExuKChmdW5jdGlvbigpe3JldHVybiB0fSkpKCl9ZnVuY3Rpb24gTG4oZSl7dmFyIHIsbixpLGEsbyxzLGw9TW4oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuWyh0PXIodCxlKSlbMF0qYythLG8tdFsxXSpjXX0pKSxjPTE1MCx1PTQ4MCxoPTI1MCxmPTAscD0wLGQ9MCxnPTAsbT0wLHY9dG4seT1MLHg9bnVsbCxiPW51bGw7ZnVuY3Rpb24gXyh0KXtyZXR1cm5bKHQ9aSh0WzBdKkx0LHRbMV0qTHQpKVswXSpjK2Esby10WzFdKmNdfWZ1bmN0aW9uIHcodCl7cmV0dXJuKHQ9aS5pbnZlcnQoKHRbMF0tYSkvYywoby10WzFdKS9jKSkmJlt0WzBdKlB0LHRbMV0qUHRdfWZ1bmN0aW9uIFQoKXtpPUdyKG49T24oZCxnLG0pLHIpO3ZhciB0PXIoZixwKTtyZXR1cm4gYT11LXRbMF0qYyxvPWgrdFsxXSpjLGsoKX1mdW5jdGlvbiBrKCl7cmV0dXJuIHMmJihzLnZhbGlkPSExLHM9bnVsbCksX31yZXR1cm4gXy5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIHMmJihzLnZhbGlkPSExKSwocz1Qbih2KG4sbCh5KHQpKSkpKS52YWxpZD0hMCxzfSxfLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1udWxsPT10Pyh4PXQsdG4pOmVuKCh4PSt0KSpMdCksaygpKTp4fSxfLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9dCx5PXQ/bm4odFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSk6TCxrKCkpOmJ9LF8uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsVCgpKTpjfSxfLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdFswXSxoPSt0WzFdLFQoKSk6W3UsaF19LF8uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXRbMF0lMzYwKkx0LHA9dFsxXSUzNjAqTHQsVCgpKTpbZipQdCxwKlB0XX0sXy5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dFswXSUzNjAqTHQsZz10WzFdJTM2MCpMdCxtPXQubGVuZ3RoPjI/dFsyXSUzNjAqTHQ6MCxUKCkpOltkKlB0LGcqUHQsbSpQdF19LHQucmViaW5kKF8sbCwicHJlY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfLmludmVydD1yLmludmVydCYmdyxUKCl9fWZ1bmN0aW9uIFBuKHQpe3JldHVybiBFbih0LChmdW5jdGlvbihlLHIpe3QucG9pbnQoZSpMdCxyKkx0KX0pKX1mdW5jdGlvbiBJbih0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIHpuKHQsZSl7cmV0dXJuW3Q+QXQ/dC1TdDp0PC1BdD90K1N0OnQsZV19ZnVuY3Rpb24gT24odCxlLHIpe3JldHVybiB0P2V8fHI/R3IoUm4odCksRm4oZSxyKSk6Um4odCk6ZXx8cj9GbihlLHIpOnpufWZ1bmN0aW9uIERuKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblsoZSs9dCk+QXQ/ZS1TdDplPC1BdD9lK1N0OmUscl19fWZ1bmN0aW9uIFJuKHQpe3ZhciBlPURuKHQpO3JldHVybiBlLmludmVydD1EbigtdCksZX1mdW5jdGlvbiBGbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT1NYXRoLmNvcyhlKSxhPU1hdGguc2luKGUpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbz1NYXRoLmNvcyhlKSxzPU1hdGguY29zKHQpKm8sbD1NYXRoLnNpbih0KSpvLGM9TWF0aC5zaW4oZSksdT1jKnIrcypuO3JldHVybltNYXRoLmF0YW4yKGwqaS11KmEscypyLWMqbiksRHQodSppK2wqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqbyxsPU1hdGguc2luKHQpKm8sYz1NYXRoLnNpbihlKSx1PWMqaS1sKmE7cmV0dXJuW01hdGguYXRhbjIobCppK2MqYSxzKnIrdSpuKSxEdCh1KnItcypuKV19LG99ZnVuY3Rpb24gQm4odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXt2YXIgbD1vKmU7bnVsbCE9aT8oaT1ObihyLGkpLGE9Tm4ocixhKSwobz4wP2k8YTppPmEpJiYoaSs9bypTdCkpOihpPXQrbypTdCxhPXQtLjUqbCk7Zm9yKHZhciBjLHU9aTtvPjA/dT5hOnU8YTt1LT1sKXMucG9pbnQoKGM9RnIoW3IsLW4qTWF0aC5jb3ModSksLW4qTWF0aC5zaW4odSldKSlbMF0sY1sxXSl9fWZ1bmN0aW9uIE5uKHQsZSl7dmFyIHI9UHIoZSk7clswXS09dCxScihyKTt2YXIgbj1PdCgtclsxXSk7cmV0dXJuKCgtclsyXTwwPy1uOm4pKzIqTWF0aC5QSS1rdCklKDIqTWF0aC5QSSl9ZnVuY3Rpb24gam4oZSxyLG4pe3ZhciBpPXQucmFuZ2UoZSxyLWt0LG4pLmNvbmNhdChyKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bdCxlXX0pKX19ZnVuY3Rpb24gVW4oZSxyLG4pe3ZhciBpPXQucmFuZ2UoZSxyLWt0LG4pLmNvbmNhdChyKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pKX19ZnVuY3Rpb24gVm4odCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIHFuKHQpe3JldHVybiB0LnRhcmdldH10Lmdlby5wYXRoPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvPTQuNTtmdW5jdGlvbiBzKGUpe3JldHVybiBlJiYoImZ1bmN0aW9uIj09dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMoK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxhJiZhLnZhbGlkfHwoYT1uKGkpKSx0Lmdlby5zdHJlYW0oZSxhKSksaS5yZXN1bHQoKX1mdW5jdGlvbiBsKCl7cmV0dXJuIGE9bnVsbCxzfXJldHVybiBzLmFyZWE9ZnVuY3Rpb24oZSl7cmV0dXJuIHNuPTAsdC5nZW8uc3RyZWFtKGUsbihwbikpLHNufSxzLmNlbnRyb2lkPWZ1bmN0aW9uKGUpe3JldHVybiB4cj1icj1fcj13cj1Ucj1rcj1Ncj1Bcj1Tcj0wLHQuZ2VvLnN0cmVhbShlLG4oeG4pKSxTcj9bTXIvU3IsQXIvU3JdOmtyP1t3ci9rcixUci9rcl06X3I/W3hyL19yLGJyL19yXTpbTmFOLE5hTl19LHMuYm91bmRzPWZ1bmN0aW9uKGUpe3JldHVybiBobj1mbj0tKGNuPXVuPTEvMCksdC5nZW8uc3RyZWFtKGUsbihnbikpLFtbY24sdW5dLFtobixmbl1dfSxzLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49KGU9dCk/dC5zdHJlYW18fEFuKHQpOkwsbCgpKTplfSxzLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KHI9dCk/bmV3IG1uOm5ldyBrbih0KSwiZnVuY3Rpb24iIT10eXBlb2YgbyYmaS5wb2ludFJhZGl1cyhvKSxsKCkpOnJ9LHMucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1cygrdCksK3QpLHMpOm99LHMucHJvamVjdGlvbih0Lmdlby5hbGJlcnNVc2EoKSkuY29udGV4dChudWxsKX0sdC5nZW8udHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06ZnVuY3Rpb24oZSl7dmFyIHI9bmV3IFNuKGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn19fSxTbi5wcm90b3R5cGU9e3BvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19LHQuZ2VvLnByb2plY3Rpb249Q24sdC5nZW8ucHJvamVjdGlvbk11dGF0b3I9TG4sKHQuZ2VvLmVxdWlyZWN0YW5ndWxhcj1mdW5jdGlvbigpe3JldHVybiBDbihJbil9KS5yYXc9SW4uaW52ZXJ0PUluLHQuZ2VvLnJvdGF0aW9uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuKGU9dChlWzBdKkx0LGVbMV0qTHQpKVswXSo9UHQsZVsxXSo9UHQsZX1yZXR1cm4gdD1Pbih0WzBdJTM2MCpMdCx0WzFdKkx0LHQubGVuZ3RoPjI/dFsyXSpMdDowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKkx0LGVbMV0qTHQpKVswXSo9UHQsZVsxXSo9UHQsZX0sZX0sem4uaW52ZXJ0PUluLHQuZ2VvLmNpcmNsZT1mdW5jdGlvbigpe3ZhciB0LGUscj1bMCwwXSxuPTY7ZnVuY3Rpb24gaSgpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIsbj1PbigtdFswXSpMdCwtdFsxXSpMdCwwKS5pbnZlcnQsaT1bXTtyZXR1cm4gZShudWxsLG51bGwsMSx7cG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2godD1uKHQsZSkpLHRbMF0qPVB0LHRbMV0qPVB0fX0pLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaV19fXJldHVybiBpLm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9LGkuYW5nbGU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Qm4oKHQ9K3IpKkx0LG4qTHQpLGkpOnR9LGkucHJlY2lzaW9uPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUJuKHQqTHQsKG49K3IpKkx0KSxpKTpufSxpLmFuZ2xlKDkwKX0sdC5nZW8uZGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuPShlWzBdLXRbMF0pKkx0LGk9dFsxXSpMdCxhPWVbMV0qTHQsbz1NYXRoLnNpbihuKSxzPU1hdGguY29zKG4pLGw9TWF0aC5zaW4oaSksYz1NYXRoLmNvcyhpKSx1PU1hdGguc2luKGEpLGg9TWF0aC5jb3MoYSk7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KChyPWgqbykqcisocj1jKnUtbCpoKnMpKnIpLGwqdStjKmgqcyl9LHQuZ2VvLmdyYXRpY3VsZT1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwPTEwLGQ9cCxnPTkwLG09MzYwLHY9Mi41O2Z1bmN0aW9uIHgoKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpiKCl9fWZ1bmN0aW9uIGIoKXtyZXR1cm4gdC5yYW5nZShNYXRoLmNlaWwoaS9nKSpnLG4sZykubWFwKGgpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChsL20pKm0scyxtKS5tYXAoZikpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChyL3ApKnAsZSxwKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB5KHQlZyk+a3R9KSkubWFwKGMpKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwoby9kKSpkLGEsZCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4geSh0JW0pPmt0fSkpLm1hcCh1KSl9cmV0dXJuIHgubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYigpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSkpfSx4Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2goaSkuY29uY2F0KGYocykuc2xpY2UoMSksaChuKS5yZXZlcnNlKCkuc2xpY2UoMSksZihsKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHguZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3gubWFqb3JFeHRlbnQodCkubWlub3JFeHRlbnQodCk6eC5taW5vckV4dGVudCgpfSx4Lm1ham9yRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0WzBdWzBdLG49K3RbMV1bMF0sbD0rdFswXVsxXSxzPSt0WzFdWzFdLGk+biYmKHQ9aSxpPW4sbj10KSxsPnMmJih0PWwsbD1zLHM9dCkseC5wcmVjaXNpb24odikpOltbaSxsXSxbbixzXV19LHgubWlub3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sZT0rdFsxXVswXSxvPSt0WzBdWzFdLGE9K3RbMV1bMV0scj5lJiYodD1yLHI9ZSxlPXQpLG8+YSYmKHQ9byxvPWEsYT10KSx4LnByZWNpc2lvbih2KSk6W1tyLG9dLFtlLGFdXX0seC5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3gubWFqb3JTdGVwKHQpLm1pbm9yU3RlcCh0KTp4Lm1pbm9yU3RlcCgpfSx4Lm1ham9yU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rdFswXSxtPSt0WzFdLHgpOltnLG1dfSx4Lm1pbm9yU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdFswXSxkPSt0WzFdLHgpOltwLGRdfSx4LnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0rdCxjPWpuKG8sYSw5MCksdT1VbihyLGUsdiksaD1qbihsLHMsOTApLGY9VW4oaSxuLHYpLHgpOnZ9LHgubWFqb3JFeHRlbnQoW1stMTgwLC05MCtrdF0sWzE4MCw5MC1rdF1dKS5taW5vckV4dGVudChbWy0xODAsLTgwLWt0XSxbMTgwLDgwK2t0XV0pfSx0Lmdlby5ncmVhdEFyYz1mdW5jdGlvbigpe3ZhciBlLHIsbj1WbixpPXFuO2Z1bmN0aW9uIGEoKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6W2V8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpXX19cmV0dXJuIGEuZGlzdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZW8uZGlzdGFuY2UoZXx8bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscnx8aS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxhLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/bnVsbDp0LGEpOm59LGEudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscj0iZnVuY3Rpb24iPT10eXBlb2YgdD9udWxsOnQsYSk6aX0sYS5wcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hOjB9LGF9LHQuZ2VvLmludGVycG9sYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHI9dFswXSpMdCxuPXRbMV0qTHQsaT1lWzBdKkx0LGE9ZVsxXSpMdCxvPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLmNvcyhhKSxjPU1hdGguc2luKGEpLHU9bypNYXRoLmNvcyhyKSxoPW8qTWF0aC5zaW4ociksZj1sKk1hdGguY29zKGkpLHA9bCpNYXRoLnNpbihpKSxkPTIqTWF0aC5hc2luKE1hdGguc3FydChGdChhLW4pK28qbCpGdChpLXIpKSksZz0xL01hdGguc2luKGQpLChtPWQ/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zaW4odCo9ZCkqZyxyPU1hdGguc2luKGQtdCkqZyxuPXIqdStlKmYsaT1yKmgrZSpwLGE9cipzK2UqYztyZXR1cm5bTWF0aC5hdGFuMihpLG4pKlB0LE1hdGguYXRhbjIoYSxNYXRoLnNxcnQobipuK2kqaSkpKlB0XX06ZnVuY3Rpb24oKXtyZXR1cm5bcipQdCxuKlB0XX0pLmRpc3RhbmNlPWQsbTt2YXIgcixuLGksYSxvLHMsbCxjLHUsaCxmLHAsZCxnLG19LHQuZ2VvLmxlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4geW49MCx0Lmdlby5zdHJlYW0oZSxIbikseW59O3ZhciBIbj17c3BoZXJlOk8scG9pbnQ6TyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt2YXIgdCxlLHI7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPU1hdGguc2luKGkqPUx0KSxvPU1hdGguY29zKGkpLHM9eSgobio9THQpLXQpLGw9TWF0aC5jb3Mocyk7eW4rPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChzPW8qTWF0aC5zaW4ocykpKnMrKHM9ciphLWUqbypsKSpzKSxlKmErcipvKmwpLHQ9bixlPWEscj1vfUhuLnBvaW50PWZ1bmN0aW9uKGksYSl7dD1pKkx0LGU9TWF0aC5zaW4oYSo9THQpLHI9TWF0aC5jb3MoYSksSG4ucG9pbnQ9bn0sSG4ubGluZUVuZD1mdW5jdGlvbigpe0huLnBvaW50PUhuLmxpbmVFbmQ9T319LGxpbmVFbmQ6Tyxwb2x5Z29uU3RhcnQ6Tyxwb2x5Z29uRW5kOk99O2Z1bmN0aW9uIEduKHQsZSl7ZnVuY3Rpb24gcihlLHIpe3ZhciBuPU1hdGguY29zKGUpLGk9TWF0aC5jb3MociksYT10KG4qaSk7cmV0dXJuW2EqaSpNYXRoLnNpbihlKSxhKk1hdGguc2luKHIpXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCxyKXt2YXIgbj1NYXRoLnNxcnQodCp0K3IqciksaT1lKG4pLGE9TWF0aC5zaW4oaSksbz1NYXRoLmNvcyhpKTtyZXR1cm5bTWF0aC5hdGFuMih0KmEsbipvKSxNYXRoLmFzaW4obiYmciphL24pXX0scn12YXIgWW49R24oKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoMi8oMSt0KSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIDIqTWF0aC5hc2luKHQvMil9KSk7KHQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBDbihZbil9KS5yYXc9WW47dmFyIFduPUduKChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmFjb3ModCk7cmV0dXJuIGUmJmUvTWF0aC5zaW4oZSl9KSxMKTtmdW5jdGlvbiBabih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgudGFuKEF0LzQrdC8yKX0saT10PT09ZT9NYXRoLnNpbih0KTpNYXRoLmxvZyhyL01hdGguY29zKGUpKS9NYXRoLmxvZyhuKGUpL24odCkpLGE9cipNYXRoLnBvdyhuKHQpLGkpL2k7aWYoIWkpcmV0dXJuIEtuO2Z1bmN0aW9uIG8odCxlKXthPjA/ZTwtQ3Qra3QmJihlPS1DdCtrdCk6ZT5DdC1rdCYmKGU9Q3Qta3QpO3ZhciByPWEvTWF0aC5wb3cobihlKSxpKTtyZXR1cm5bcipNYXRoLnNpbihpKnQpLGEtcipNYXRoLmNvcyhpKnQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1hLWUsbj1JdChpKSpNYXRoLnNxcnQodCp0K3Iqcik7cmV0dXJuW01hdGguYXRhbjIodCxyKS9pLDIqTWF0aC5hdGFuKE1hdGgucG93KGEvbiwxL2kpKS1DdF19LG99ZnVuY3Rpb24gWG4odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPXQ9PT1lP01hdGguc2luKHQpOihyLU1hdGguY29zKGUpKS8oZS10KSxpPXIvbit0O2lmKHkobik8a3QpcmV0dXJuIEluO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1pLWU7cmV0dXJuW3IqTWF0aC5zaW4obip0KSxpLXIqTWF0aC5jb3Mobip0KV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aS1lO3JldHVybltNYXRoLmF0YW4yKHQscikvbixpLUl0KG4pKk1hdGguc3FydCh0KnQrcipyKV19LGF9KHQuZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIENuKFduKX0pLnJhdz1XbiwodC5nZW8uY29uaWNDb25mb3JtYWw9ZnVuY3Rpb24oKXtyZXR1cm4gYW4oWm4pfSkucmF3PVpuLCh0Lmdlby5jb25pY0VxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIGFuKFhuKX0pLnJhdz1Ybjt2YXIgSm49R24oKGZ1bmN0aW9uKHQpe3JldHVybiAxL3R9KSxNYXRoLmF0YW4pO2Z1bmN0aW9uIEtuKHQsZSl7cmV0dXJuW3QsTWF0aC5sb2coTWF0aC50YW4oQXQvNCtlLzIpKV19ZnVuY3Rpb24gUW4odCl7dmFyIGUscj1Dbih0KSxuPXIuc2NhbGUsaT1yLnRyYW5zbGF0ZSxhPXIuY2xpcEV4dGVudDtyZXR1cm4gci5zY2FsZT1mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiB0PT09cj9lP3IuY2xpcEV4dGVudChudWxsKTpyOnR9LHIudHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBvPWEuYXBwbHkocixhcmd1bWVudHMpO2lmKG89PT1yKXtpZihlPW51bGw9PXQpe3ZhciBzPUF0Km4oKSxsPWkoKTthKFtbbFswXS1zLGxbMV0tc10sW2xbMF0rcyxsWzFdK3NdXSl9fWVsc2UgZSYmKG89bnVsbCk7cmV0dXJuIG99LHIuY2xpcEV4dGVudChudWxsKX0odC5nZW8uZ25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oSm4pfSkucmF3PUpuLEtuLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqTWF0aC5hdGFuKE1hdGguZXhwKGUpKS1DdF19LCh0Lmdlby5tZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBRbihLbil9KS5yYXc9S247dmFyICRuPUduKChmdW5jdGlvbigpe3JldHVybiAxfSksTWF0aC5hc2luKTsodC5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCRuKX0pLnJhdz0kbjt2YXIgdGk9R24oKGZ1bmN0aW9uKHQpe3JldHVybiAxLygxK3QpfSksKGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXRhbih0KX0pKTtmdW5jdGlvbiBlaSh0LGUpe3JldHVybltNYXRoLmxvZyhNYXRoLnRhbihBdC80K2UvMikpLC10XX1mdW5jdGlvbiByaSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBuaSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBpaSh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8ZTtpKyspe2Zvcig7bj4xJiZ6dCh0W3Jbbi0yXV0sdFtyW24tMV1dLHRbaV0pPD0wOyktLW47cltuKytdPWl9cmV0dXJuIHIuc2xpY2UoMCxuKX1mdW5jdGlvbiBhaSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX0odC5nZW8uc3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBDbih0aSl9KS5yYXc9dGksZWkuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQpKS1DdF19LCh0Lmdlby50cmFuc3ZlcnNlTWVyY2F0b3I9ZnVuY3Rpb24oKXt2YXIgdD1RbihlaSksZT10LmNlbnRlcixyPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD9lKFstdFsxXSx0WzBdXSk6Wyh0PWUoKSlbMV0sLXRbMF1dfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD9yKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6Wyh0PXIoKSlbMF0sdFsxXSx0WzJdLTkwXX0scihbMCwwLDkwXSl9KS5yYXc9ZWksdC5nZW9tPXt9LHQuZ2VvbS5odWxsPWZ1bmN0aW9uKHQpe3ZhciBlPXJpLHI9bmk7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbih0KTtmdW5jdGlvbiBuKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuW107dmFyIG4saT1kZShlKSxhPWRlKHIpLG89dC5sZW5ndGgscz1bXSxsPVtdO2ZvcihuPTA7bjxvO24rKylzLnB1c2goWytpLmNhbGwodGhpcyx0W25dLG4pLCthLmNhbGwodGhpcyx0W25dLG4pLG5dKTtmb3Iocy5zb3J0KGFpKSxuPTA7bjxvO24rKylsLnB1c2goW3Nbbl1bMF0sLXNbbl1bMV1dKTt2YXIgYz1paShzKSx1PWlpKGwpLGg9dVswXT09PWNbMF0sZj11W3UubGVuZ3RoLTFdPT09Y1tjLmxlbmd0aC0xXSxwPVtdO2ZvcihuPWMubGVuZ3RoLTE7bj49MDstLW4pcC5wdXNoKHRbc1tjW25dXVsyXV0pO2ZvcihuPStoO248dS5sZW5ndGgtZjsrK24pcC5wdXNoKHRbc1t1W25dXVsyXV0pO3JldHVybiBwfXJldHVybiBuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0Lmdlb20ucG9seWdvbj1mdW5jdGlvbih0KXtyZXR1cm4gVSh0LG9pKSx0fTt2YXIgb2k9dC5nZW9tLnBvbHlnb24ucHJvdG90eXBlPVtdO2Z1bmN0aW9uIHNpKHQsZSxyKXtyZXR1cm4oclswXS1lWzBdKSoodFsxXS1lWzFdKTwoclsxXS1lWzFdKSoodFswXS1lWzBdKX1mdW5jdGlvbiBsaSh0LGUscixuKXt2YXIgaT10WzBdLGE9clswXSxvPWVbMF0taSxzPW5bMF0tYSxsPXRbMV0sYz1yWzFdLHU9ZVsxXS1sLGg9blsxXS1jLGY9KHMqKGwtYyktaCooaS1hKSkvKGgqby1zKnUpO3JldHVybltpK2YqbyxsK2YqdV19ZnVuY3Rpb24gY2kodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIShlWzBdLXJbMF18fGVbMV0tclsxXSl9b2kuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPS0xLHI9dGhpcy5sZW5ndGgsbj10aGlzW3ItMV0saT0wOysrZTxyOyl0PW4sbj10aGlzW2VdLGkrPXRbMV0qblswXS10WzBdKm5bMV07cmV0dXJuLjUqaX0sb2kuY2VudHJvaWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dGhpcy5sZW5ndGgsYT0wLG89MCxzPXRoaXNbaS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KHQ9LTEvKDYqdGhpcy5hcmVhKCkpKTsrK248aTspZT1zLHM9dGhpc1tuXSxyPWVbMF0qc1sxXS1zWzBdKmVbMV0sYSs9KGVbMF0rc1swXSkqcixvKz0oZVsxXStzWzFdKSpyO3JldHVyblthKnQsbyp0XX0sb2kuY2xpcD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHM9Y2kodCksbD0tMSxjPXRoaXMubGVuZ3RoLWNpKHRoaXMpLHU9dGhpc1tjLTFdOysrbDxjOyl7Zm9yKGU9dC5zbGljZSgpLHQubGVuZ3RoPTAsaT10aGlzW2xdLGE9ZVsobj1lLmxlbmd0aC1zKS0xXSxyPS0xOysrcjxuOylzaShvPWVbcl0sdSxpKT8oc2koYSx1LGkpfHx0LnB1c2gobGkoYSxvLHUsaSkpLHQucHVzaChvKSk6c2koYSx1LGkpJiZ0LnB1c2gobGkoYSxvLHUsaSkpLGE9bztzJiZ0LnB1c2godFswXSksdT1pfXJldHVybiB0fTt2YXIgdWksaGksZmkscGksZGksZ2k9W10sbWk9W107ZnVuY3Rpb24gdmkoKXtSaSh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24geWkodCl7dmFyIGU9Z2kucG9wKCl8fG5ldyB2aTtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiB4aSh0KXtFaSh0KSxmaS5yZW1vdmUodCksZ2kucHVzaCh0KSxSaSh0KX1mdW5jdGlvbiBiaSh0KXt2YXIgZT10LmNpcmNsZSxyPWUueCxuPWUuY3ksaT17eDpyLHk6bn0sYT10LlAsbz10Lk4scz1bdF07eGkodCk7Zm9yKHZhciBsPWE7bC5jaXJjbGUmJnkoci1sLmNpcmNsZS54KTxrdCYmeShuLWwuY2lyY2xlLmN5KTxrdDspYT1sLlAscy51bnNoaWZ0KGwpLHhpKGwpLGw9YTtzLnVuc2hpZnQobCksRWkobCk7Zm9yKHZhciBjPW87Yy5jaXJjbGUmJnkoci1jLmNpcmNsZS54KTxrdCYmeShuLWMuY2lyY2xlLmN5KTxrdDspbz1jLk4scy5wdXNoKGMpLHhpKGMpLGM9bztzLnB1c2goYyksRWkoYyk7dmFyIHUsaD1zLmxlbmd0aDtmb3IodT0xO3U8aDsrK3UpYz1zW3VdLGw9c1t1LTFdLHppKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSwoYz1zW2gtMV0pLmVkZ2U9UGkobC5zaXRlLGMuc2l0ZSxudWxsLGkpLFNpKGwpLFNpKGMpfWZ1bmN0aW9uIF9pKHQpe2Zvcih2YXIgZSxyLG4saSxhPXQueCxvPXQueSxzPWZpLl87czspaWYoKG49d2kocyxvKS1hKT5rdClzPXMuTDtlbHNle2lmKCEoKGk9YS1UaShzLG8pKT5rdCkpe24+LWt0PyhlPXMuUCxyPXMpOmk+LWt0PyhlPXMscj1zLk4pOmU9cj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn12YXIgbD15aSh0KTtpZihmaS5pbnNlcnQoZSxsKSxlfHxyKXtpZihlPT09cilyZXR1cm4gRWkoZSkscj15aShlLnNpdGUpLGZpLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9UGkoZS5zaXRlLGwuc2l0ZSksU2koZSksdm9pZCBTaShyKTtpZihyKXtFaShlKSxFaShyKTt2YXIgYz1lLnNpdGUsdT1jLngsaD1jLnksZj10LngtdSxwPXQueS1oLGQ9ci5zaXRlLGc9ZC54LXUsbT1kLnktaCx2PTIqKGYqbS1wKmcpLHk9ZipmK3AqcCx4PWcqZyttKm0sYj17eDoobSp5LXAqeCkvdit1LHk6KGYqeC1nKnkpL3YraH07emkoci5lZGdlLGMsZCxiKSxsLmVkZ2U9UGkoYyx0LG51bGwsYiksci5lZGdlPVBpKHQsZCxudWxsLGIpLFNpKGUpLFNpKHIpfWVsc2UgbC5lZGdlPVBpKGUuc2l0ZSxsLnNpdGUpfX1mdW5jdGlvbiB3aSh0LGUpe3ZhciByPXQuc2l0ZSxuPXIueCxpPXIueSxhPWktZTtpZighYSlyZXR1cm4gbjt2YXIgbz10LlA7aWYoIW8pcmV0dXJuLTEvMDt2YXIgcz0ocj1vLnNpdGUpLngsbD1yLnksYz1sLWU7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9hLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1hLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gVGkodCxlKXt2YXIgcj10Lk47aWYocilyZXR1cm4gd2kocixlKTt2YXIgbj10LnNpdGU7cmV0dXJuIG4ueT09PWU/bi54OjEvMH1mdW5jdGlvbiBraSh0KXt0aGlzLnNpdGU9dCx0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIE1pKHQsZSl7cmV0dXJuIGUuYW5nbGUtdC5hbmdsZX1mdW5jdGlvbiBBaSgpe1JpKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBTaSh0KXt2YXIgZT10LlAscj10Lk47aWYoZSYmcil7dmFyIG49ZS5zaXRlLGk9dC5zaXRlLGE9ci5zaXRlO2lmKG4hPT1hKXt2YXIgbz1pLngscz1pLnksbD1uLngtbyxjPW4ueS1zLHU9YS54LW8saD0yKihsKihtPWEueS1zKS1jKnUpO2lmKCEoaD49LU10KSl7dmFyIGY9bCpsK2MqYyxwPXUqdSttKm0sZD0obSpmLWMqcCkvaCxnPShsKnAtdSpmKS9oLG09ZytzLHY9bWkucG9wKCl8fG5ldyBBaTt2LmFyYz10LHYuc2l0ZT1pLHYueD1kK28sdi55PW0rTWF0aC5zcXJ0KGQqZCtnKmcpLHYuY3k9bSx0LmNpcmNsZT12O2Zvcih2YXIgeT1udWxsLHg9ZGkuXzt4OylpZih2Lnk8eC55fHx2Lnk9PT14LnkmJnYueDw9eC54KXtpZigheC5MKXt5PXguUDticmVha314PXguTH1lbHNle2lmKCF4LlIpe3k9eDticmVha314PXguUn1kaS5pbnNlcnQoeSx2KSx5fHwocGk9dil9fX19ZnVuY3Rpb24gRWkodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KHBpPWUuTiksZGkucmVtb3ZlKGUpLG1pLnB1c2goZSksUmkoZSksdC5jaXJjbGU9bnVsbCl9ZnVuY3Rpb24gQ2kodCxlKXt2YXIgcj10LmI7aWYocilyZXR1cm4hMDt2YXIgbixpLGE9dC5hLG89ZVswXVswXSxzPWVbMV1bMF0sbD1lWzBdWzFdLGM9ZVsxXVsxXSx1PXQubCxoPXQucixmPXUueCxwPXUueSxkPWgueCxnPWgueSxtPShmK2QpLzIsdj0ocCtnKS8yO2lmKGc9PT1wKXtpZihtPG98fG0+PXMpcmV0dXJuO2lmKGY+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6bSx5Omx9O3I9e3g6bSx5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDptLHk6Y307cj17eDptLHk6bH19fWVsc2UgaWYoaT12LShuPShmLWQpLyhnLXApKSptLG48LTF8fG4+MSlpZihmPmQpe2lmKGEpe2lmKGEueT49YylyZXR1cm59ZWxzZSBhPXt4OihsLWkpL24seTpsfTtyPXt4OihjLWkpL24seTpjfX1lbHNle2lmKGEpe2lmKGEueTxsKXJldHVybn1lbHNlIGE9e3g6KGMtaSkvbix5OmN9O3I9e3g6KGwtaSkvbix5Omx9fWVsc2UgaWYocDxnKXtpZihhKXtpZihhLng+PXMpcmV0dXJufWVsc2UgYT17eDpvLHk6bipvK2l9O3I9e3g6cyx5Om4qcytpfX1lbHNle2lmKGEpe2lmKGEueDxvKXJldHVybn1lbHNlIGE9e3g6cyx5Om4qcytpfTtyPXt4Om8seTpuKm8raX19cmV0dXJuIHQuYT1hLHQuYj1yLCEwfWZ1bmN0aW9uIExpKHQsZSl7dGhpcy5sPXQsdGhpcy5yPWUsdGhpcy5hPXRoaXMuYj1udWxsfWZ1bmN0aW9uIFBpKHQsZSxyLG4pe3ZhciBpPW5ldyBMaSh0LGUpO3JldHVybiB1aS5wdXNoKGkpLHImJnppKGksdCxlLHIpLG4mJnppKGksZSx0LG4pLGhpW3QuaV0uZWRnZXMucHVzaChuZXcgT2koaSx0LGUpKSxoaVtlLmldLmVkZ2VzLnB1c2gobmV3IE9pKGksZSx0KSksaX1mdW5jdGlvbiBJaSh0LGUscil7dmFyIG49bmV3IExpKHQsbnVsbCk7cmV0dXJuIG4uYT1lLG4uYj1yLHVpLnB1c2gobiksbn1mdW5jdGlvbiB6aSh0LGUscixuKXt0LmF8fHQuYj90Lmw9PT1yP3QuYj1uOnQuYT1uOih0LmE9bix0Lmw9ZSx0LnI9cil9ZnVuY3Rpb24gT2kodCxlLHIpe3ZhciBuPXQuYSxpPXQuYjt0aGlzLmVkZ2U9dCx0aGlzLnNpdGU9ZSx0aGlzLmFuZ2xlPXI/TWF0aC5hdGFuMihyLnktZS55LHIueC1lLngpOnQubD09PWU/TWF0aC5hdGFuMihpLngtbi54LG4ueS1pLnkpOk1hdGguYXRhbjIobi54LWkueCxpLnktbi55KX1mdW5jdGlvbiBEaSgpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIFJpKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gRmkodCxlKXt2YXIgcj1lLG49ZS5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIEJpKHQsZSl7dmFyIHI9ZSxuPWUuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46dC5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBOaSh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gamkodCxlKXt2YXIgcixuLGksYT10LnNvcnQoVWkpLnBvcCgpO2Zvcih1aT1bXSxoaT1uZXcgQXJyYXkodC5sZW5ndGgpLGZpPW5ldyBEaSxkaT1uZXcgRGk7OylpZihpPXBpLGEmJighaXx8YS55PGkueXx8YS55PT09aS55JiZhLng8aS54KSlhLng9PT1yJiZhLnk9PT1ufHwoaGlbYS5pXT1uZXcga2koYSksX2koYSkscj1hLngsbj1hLnkpLGE9dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO2JpKGkuYXJjKX1lJiYoZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dWksbj1ybih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKSxpPXIubGVuZ3RoO2ktLTspKCFDaShlPXJbaV0sdCl8fCFuKGUpfHx5KGUuYS54LWUuYi54KTxrdCYmeShlLmEueS1lLmIueSk8a3QpJiYoZS5hPWUuYj1udWxsLHIuc3BsaWNlKGksMSkpfShlKSxmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHMsbCxjLHUsaD10WzBdWzBdLGY9dFsxXVswXSxwPXRbMF1bMV0sZD10WzFdWzFdLGc9aGksbT1nLmxlbmd0aDttLS07KWlmKChhPWdbbV0pJiZhLnByZXBhcmUoKSlmb3IobD0ocz1hLmVkZ2VzKS5sZW5ndGgsbz0wO288bDspbj0odT1zW29dLmVuZCgpKS54LGk9dS55LGU9KGM9c1srK28lbF0uc3RhcnQoKSkueCxyPWMueSwoeShuLWUpPmt0fHx5KGktcik+a3QpJiYocy5zcGxpY2UobywwLG5ldyBPaShJaShhLnNpdGUsdSx5KG4taCk8a3QmJmQtaT5rdD97eDpoLHk6eShlLWgpPGt0P3I6ZH06eShpLWQpPGt0JiZmLW4+a3Q/e3g6eShyLWQpPGt0P2U6Zix5OmR9Onkobi1mKTxrdCYmaS1wPmt0P3t4OmYseTp5KGUtZik8a3Q/cjpwfTp5KGktcCk8a3QmJm4taD5rdD97eDp5KHItcCk8a3Q/ZTpoLHk6cH06bnVsbCksYS5zaXRlLG51bGwpKSwrK2wpfShlKSk7dmFyIG89e2NlbGxzOmhpLGVkZ2VzOnVpfTtyZXR1cm4gZmk9ZGk9dWk9aGk9bnVsbCxvfWZ1bmN0aW9uIFVpKHQsZSl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9a2kucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLmVkZ2VzLHI9ZS5sZW5ndGg7ci0tOykodD1lW3JdLmVkZ2UpLmImJnQuYXx8ZS5zcGxpY2UociwxKTtyZXR1cm4gZS5zb3J0KE1pKSxlLmxlbmd0aH0sT2kucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYTp0aGlzLmVkZ2UuYn0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5iOnRoaXMuZWRnZS5hfX0sRGkucHJvdG90eXBlPXtpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7cj10fWVsc2UgdGhpcy5fPyh0PU5pKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLHI9dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxyPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPXIsZS5DPSEwLHQ9ZTtyJiZyLkM7KXI9PT0obj1yLlUpLkw/KGk9bi5SKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5SJiYoRmkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsQmkodGhpcyxuKSk6KGk9bi5MKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5MJiYoQmkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsRmkodGhpcyxuKSkscj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLHIsbixpPXQuVSxhPXQuTCxvPXQuUjtpZihyPWE/bz9OaShvKTphOm8saT9pLkw9PT10P2kuTD1yOmkuUj1yOnRoaXMuXz1yLGEmJm8/KG49ci5DLHIuQz10LkMsci5MPWEsYS5VPXIsciE9PW8/KGk9ci5VLHIuVT10LlUsdD1yLlIsaS5MPXQsci5SPW8sby5VPXIpOihyLlU9aSxpPXIsdD1yLlIpKToobj10LkMsdD1yKSx0JiYodC5VPWkpLCFuKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAsRmkodGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxCaSh0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxGaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsQmkodGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxGaSh0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxCaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX0sdC5nZW9tLnZvcm9ub2k9ZnVuY3Rpb24odCl7dmFyIGU9cmkscj1uaSxuPWUsaT1yLGE9Vmk7aWYodClyZXR1cm4gbyh0KTtmdW5jdGlvbiBvKHQpe3ZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj1hWzBdWzBdLG49YVswXVsxXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBqaShzKHQpLGEpLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKGEscyl7dmFyIGw9YS5lZGdlcyxjPWEuc2l0ZTsoZVtzXT1sLmxlbmd0aD9sLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dC5zdGFydCgpO3JldHVybltlLngsZS55XX0pKTpjLng+PXImJmMueDw9aSYmYy55Pj1uJiZjLnk8PW8/W1tyLG9dLFtpLG9dLFtpLG5dLFtyLG5dXTpbXSkucG9pbnQ9dFtzXX0pKSxlfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybnt4Ok1hdGgucm91bmQobih0LGUpL2t0KSprdCx5Ok1hdGgucm91bmQoaSh0LGUpL2t0KSprdCxpOmV9fSkpfXJldHVybiBvLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBqaShzKHQpKS5lZGdlcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmwmJnQucn0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dFtlLmwuaV0sdGFyZ2V0OnRbZS5yLmldfX0pKX0sby50cmlhbmdsZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGppKHModCkpLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpLGEsbyxzLGw9ci5zaXRlLGM9ci5lZGdlcy5zb3J0KE1pKSx1PS0xLGg9Yy5sZW5ndGgsZj1jW2gtMV0uZWRnZSxwPWYubD09PWw/Zi5yOmYubDsrK3U8aDspZixpPXAscD0oZj1jW3VdLmVkZ2UpLmw9PT1sP2YucjpmLmwsbjxpLmkmJm48cC5pJiYobz1pLHM9cCwoKGE9bCkueC1zLngpKihvLnktYS55KS0oYS54LW8ueCkqKHMueS1hLnkpPDApJiZlLnB1c2goW3Rbbl0sdFtpLmldLHRbcC5pXV0pfSkpLGV9LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1kZShlPXQpLG8pOmV9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1kZShyPXQpLG8pOnJ9LG8uY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P1ZpOnQsbyk6YT09PVZpP251bGw6YX0sby5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28uY2xpcEV4dGVudCh0JiZbWzAsMF0sdF0pOmE9PT1WaT9udWxsOmEmJmFbMV19LG99O3ZhciBWaT1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTtmdW5jdGlvbiBxaSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIEhpKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gR2kodCxlLHIsbixpLGEpe2lmKCF0KGUscixuLGksYSkpe3ZhciBvPS41KihyK2kpLHM9LjUqKG4rYSksbD1lLm5vZGVzO2xbMF0mJkdpKHQsbFswXSxyLG4sbyxzKSxsWzFdJiZHaSh0LGxbMV0sbyxuLGkscyksbFsyXSYmR2kodCxsWzJdLHIscyxvLGEpLGxbM10mJkdpKHQsbFszXSxvLHMsaSxhKX19ZnVuY3Rpb24gWWkodCxlLHIsbixpLGEsbyl7dmFyIHMsbD0xLzA7cmV0dXJuIGZ1bmN0aW9uIHQoYyx1LGgsZixwKXtpZighKHU+YXx8aD5vfHxmPG58fHA8aSkpe2lmKGQ9Yy5wb2ludCl7dmFyIGQsZz1lLWMueCxtPXItYy55LHY9ZypnK20qbTtpZih2PGwpe3ZhciB5PU1hdGguc3FydChsPXYpO249ZS15LGk9ci15LGE9ZSt5LG89cit5LHM9ZH19Zm9yKHZhciB4PWMubm9kZXMsYj0uNSoodStmKSxfPS41KihoK3ApLHc9KHI+PV8pPDwxfGU+PWIsVD13KzQ7dzxUOysrdylpZihjPXhbMyZ3XSlzd2l0Y2goMyZ3KXtjYXNlIDA6dChjLHUsaCxiLF8pO2JyZWFrO2Nhc2UgMTp0KGMsYixoLGYsXyk7YnJlYWs7Y2FzZSAyOnQoYyx1LF8sYixwKTticmVhaztjYXNlIDM6dChjLGIsXyxmLHApfX19KHQsbixpLGEsbyksc31mdW5jdGlvbiBXaShlLHIpe2U9dC5yZ2IoZSkscj10LnJnYihyKTt2YXIgbj1lLnIsaT1lLmcsYT1lLmIsbz1yLnItbixzPXIuZy1pLGw9ci5iLWE7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiIjIitzZShNYXRoLnJvdW5kKG4rbyp0KSkrc2UoTWF0aC5yb3VuZChpK3MqdCkpK3NlKE1hdGgucm91bmQoYStsKnQpKX19ZnVuY3Rpb24gWmkodCxlKXt2YXIgcixuPXt9LGk9e307Zm9yKHIgaW4gdClyIGluIGU/bltyXT0kaSh0W3JdLGVbcl0pOmlbcl09dFtyXTtmb3IociBpbiBlKXIgaW4gdHx8KGlbcl09ZVtyXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyIGluIG4paVtyXT1uW3JdKHQpO3JldHVybiBpfX1mdW5jdGlvbiBYaSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIHQqKDEtcikrZSpyfX1mdW5jdGlvbiBKaSh0LGUpe3ZhciByLG4saSxhPUtpLmxhc3RJbmRleD1RaS5sYXN0SW5kZXg9MCxvPS0xLHM9W10sbD1bXTtmb3IodCs9IiIsZSs9IiI7KHI9S2kuZXhlYyh0KSkmJihuPVFpLmV4ZWMoZSkpOykoaT1uLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDpYaShyLG4pfSkpLGE9UWkubGFzdEluZGV4O3JldHVybiBhPGUubGVuZ3RoJiYoaT1lLnNsaWNlKGEpLHNbb10/c1tvXSs9aTpzWysrb109aSkscy5sZW5ndGg8Mj9sWzBdPyhlPWxbMF0ueCxmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn0pOmZ1bmN0aW9uKCl7cmV0dXJuIGV9OihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTA7bjxlOysrbilzWyhyPWxbbl0pLmldPXIueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfXQuZ2VvbS5kZWxhdW5heT1mdW5jdGlvbihlKXtyZXR1cm4gdC5nZW9tLnZvcm9ub2koKS50cmlhbmdsZXMoZSl9LHQuZ2VvbS5xdWFkdHJlZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG89cmkscz1uaTtpZihhPWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG89cWkscz1IaSwzPT09YSYmKGk9cixuPWUscj1lPTApLGwodCk7ZnVuY3Rpb24gbCh0KXt2YXIgbCxjLHUsaCxmLHAsZCxnLG0sdj1kZShvKSx4PWRlKHMpO2lmKG51bGwhPWUpcD1lLGQ9cixnPW4sbT1pO2Vsc2UgaWYoZz1tPS0ocD1kPTEvMCksYz1bXSx1PVtdLGY9dC5sZW5ndGgsYSlmb3IoaD0wO2g8ZjsrK2gpKGw9dFtoXSkueDxwJiYocD1sLngpLGwueTxkJiYoZD1sLnkpLGwueD5nJiYoZz1sLngpLGwueT5tJiYobT1sLnkpLGMucHVzaChsLngpLHUucHVzaChsLnkpO2Vsc2UgZm9yKGg9MDtoPGY7KytoKXt2YXIgYj0rdihsPXRbaF0saCksXz0reChsLGgpO2I8cCYmKHA9YiksXzxkJiYoZD1fKSxiPmcmJihnPWIpLF8+bSYmKG09XyksYy5wdXNoKGIpLHUucHVzaChfKX12YXIgdz1nLXAsVD1tLWQ7ZnVuY3Rpb24gayh0LGUscixuLGksYSxvLHMpe2lmKCFpc05hTihyKSYmIWlzTmFOKG4pKWlmKHQubGVhZil7dmFyIGw9dC54LGM9dC55O2lmKG51bGwhPWwpaWYoeShsLXIpK3koYy1uKTwuMDEpTSh0LGUscixuLGksYSxvLHMpO2Vsc2V7dmFyIHU9dC5wb2ludDt0Lng9dC55PXQucG9pbnQ9bnVsbCxNKHQsdSxsLGMsaSxhLG8scyksTSh0LGUscixuLGksYSxvLHMpfWVsc2UgdC54PXIsdC55PW4sdC5wb2ludD1lfWVsc2UgTSh0LGUscixuLGksYSxvLHMpfWZ1bmN0aW9uIE0odCxlLHIsbixpLGEsbyxzKXt2YXIgbD0uNSooaStvKSxjPS41KihhK3MpLHU9cj49bCxoPW4+PWMsZj1oPDwxfHU7dC5sZWFmPSExLHU/aT1sOm89bCxoP2E9YzpzPWMsayh0PXQubm9kZXNbZl18fCh0Lm5vZGVzW2ZdPXtsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbH0pLGUscixuLGksYSxvLHMpfXc+VD9tPWQrdzpnPXArVDt2YXIgQT17bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGwsYWRkOmZ1bmN0aW9uKHQpe2soQSx0LCt2KHQsKytoKSwreCh0LGgpLHAsZCxnLG0pfSx2aXNpdDpmdW5jdGlvbih0KXtHaSh0LEEscCxkLGcsbSl9LGZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIFlpKEEsdFswXSx0WzFdLHAsZCxnLG0pfX07aWYoaD0tMSxudWxsPT1lKXtmb3IoOysraDxmOylrKEEsdFtoXSxjW2hdLHVbaF0scCxkLGcsbSk7LS1ofWVsc2UgdC5mb3JFYWNoKEEuYWRkKTtyZXR1cm4gYz11PXQ9bD1udWxsLEF9cmV0dXJuIGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGwpOm99LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGwpOnN9LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT0rdFswXVswXSxyPSt0WzBdWzFdLG49K3RbMV1bMF0saT0rdFsxXVsxXSksbCk6bnVsbD09ZT9udWxsOltbZSxyXSxbbixpXV19LGwuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9lPXI9bj1pPW51bGw6KGU9cj0wLG49K3RbMF0saT0rdFsxXSksbCk6bnVsbD09ZT9udWxsOltuLWUsaS1yXX0sbH0sdC5pbnRlcnBvbGF0ZVJnYj1XaSx0LmludGVycG9sYXRlT2JqZWN0PVppLHQuaW50ZXJwb2xhdGVOdW1iZXI9WGksdC5pbnRlcnBvbGF0ZVN0cmluZz1KaTt2YXIgS2k9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFFpPW5ldyBSZWdFeHAoS2kuc291cmNlLCJnIik7ZnVuY3Rpb24gJGkoZSxyKXtmb3IodmFyIG4saT10LmludGVycG9sYXRvcnMubGVuZ3RoOy0taT49MCYmIShuPXQuaW50ZXJwb2xhdG9yc1tpXShlLHIpKTspO3JldHVybiBufWZ1bmN0aW9uIHRhKHQsZSl7dmFyIHIsbj1bXSxpPVtdLGE9dC5sZW5ndGgsbz1lLmxlbmd0aCxzPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3Iocj0wO3I8czsrK3Ipbi5wdXNoKCRpKHRbcl0sZVtyXSkpO2Zvcig7cjxhOysrcilpW3JdPXRbcl07Zm9yKDtyPG87KytyKWlbcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHI9MDtyPHM7KytyKWlbcl09bltyXSh0KTtyZXR1cm4gaX19dC5pbnRlcnBvbGF0ZT0kaSx0LmludGVycG9sYXRvcnM9W2Z1bmN0aW9uKHQsZSl7dmFyIHI9dHlwZW9mIGU7cmV0dXJuKCJzdHJpbmciPT09cj9wZS5oYXMoZS50b0xvd2VyQ2FzZSgpKXx8L14oI3xyZ2JcKHxoc2xcKCkvaS50ZXN0KGUpP1dpOkppOmUgaW5zdGFuY2VvZiBWdD9XaTpBcnJheS5pc0FycmF5KGUpP3RhOiJvYmplY3QiPT09ciYmaXNOYU4oZSk/Wmk6WGkpKHQsZSl9XSx0LmludGVycG9sYXRlQXJyYXk9dGE7dmFyIGVhPWZ1bmN0aW9uKCl7cmV0dXJuIEx9LHJhPXQubWFwKHtsaW5lYXI6ZWEscG9seTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucG93KGUsdCl9fSxxdWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHNhfSxjdWJpYzpmdW5jdGlvbigpe3JldHVybiBsYX0sc2luOmZ1bmN0aW9uKCl7cmV0dXJuIHVhfSxleHA6ZnVuY3Rpb24oKXtyZXR1cm4gaGF9LGNpcmNsZTpmdW5jdGlvbigpe3JldHVybiBmYX0sZWxhc3RpYzpmdW5jdGlvbih0LGUpe3ZhciByO2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9LjQ1KTthcmd1bWVudHMubGVuZ3RoP3I9ZS9TdCpNYXRoLmFzaW4oMS90KToodD0xLHI9ZS80KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIDErdCpNYXRoLnBvdygyLC0xMCpuKSpNYXRoLnNpbigobi1yKSpTdC9lKX19LGJhY2s6ZnVuY3Rpb24odCl7dHx8KHQ9MS43MDE1OCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlKmUqKCh0KzEpKmUtdCl9fSxib3VuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gcGF9fSksbmE9dC5tYXAoe2luOkwsb3V0OmFhLCJpbi1vdXQiOm9hLCJvdXQtaW4iOmZ1bmN0aW9uKHQpe3JldHVybiBvYShhYSh0KSl9fSk7ZnVuY3Rpb24gaWEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPD0wPzA6ZT49MT8xOnQoZSl9fWZ1bmN0aW9uIGFhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMS10KDEtZSl9fWZ1bmN0aW9uIG9hKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4uNSooZTwuNT90KDIqZSk6Mi10KDItMiplKSl9fWZ1bmN0aW9uIHNhKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gbGEodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIGNhKHQpe2lmKHQ8PTApcmV0dXJuIDA7aWYodD49MSlyZXR1cm4gMTt2YXIgZT10KnQscj1lKnQ7cmV0dXJuIDQqKHQ8LjU/cjozKih0LWUpK3ItLjc1KX1mdW5jdGlvbiB1YSh0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KkN0KX1mdW5jdGlvbiBoYSh0KXtyZXR1cm4gTWF0aC5wb3coMiwxMCoodC0xKSl9ZnVuY3Rpb24gZmEodCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX1mdW5jdGlvbiBwYSh0KXtyZXR1cm4gdDwxLzIuNzU/Ny41NjI1KnQqdDp0PDIvMi43NT83LjU2MjUqKHQtPTEuNS8yLjc1KSp0Ky43NTp0PDIuNS8yLjc1PzcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1OjcuNTYyNSoodC09Mi42MjUvMi43NSkqdCsuOTg0Mzc1fWZ1bmN0aW9uIGRhKHQsZSl7cmV0dXJuIGUtPXQsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCtlKnIpfX1mdW5jdGlvbiBnYSh0KXt2YXIgZSxyLG4saT1bdC5hLHQuYl0sYT1bdC5jLHQuZF0sbz12YShpKSxzPW1hKGksYSksbD12YSgoKGU9YSlbMF0rPShuPS1zKSoocj1pKVswXSxlWzFdKz1uKnJbMV0sZSkpfHwwO2lbMF0qYVsxXTxhWzBdKmlbMV0mJihpWzBdKj0tMSxpWzFdKj0tMSxvKj0tMSxzKj0tMSksdGhpcy5yb3RhdGU9KG8/TWF0aC5hdGFuMihpWzFdLGlbMF0pOk1hdGguYXRhbjIoLWFbMF0sYVsxXSkpKlB0LHRoaXMudHJhbnNsYXRlPVt0LmUsdC5mXSx0aGlzLnNjYWxlPVtvLGxdLHRoaXMuc2tldz1sP01hdGguYXRhbjIocyxsKSpQdDowfWZ1bmN0aW9uIG1hKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV19ZnVuY3Rpb24gdmEodCl7dmFyIGU9TWF0aC5zcXJ0KG1hKHQsdCkpO3JldHVybiBlJiYodFswXS89ZSx0WzFdLz1lKSxlfXQuZWFzZT1mdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi0iKSxuPWU+PTA/dC5zbGljZSgwLGUpOnQsaT1lPj0wP3Quc2xpY2UoZSsxKToiaW4iO3JldHVybiBuPXJhLmdldChuKXx8ZWEsaWEoKGk9bmEuZ2V0KGkpfHxMKShuLmFwcGx5KG51bGwsci5jYWxsKGFyZ3VtZW50cywxKSkpKX0sdC5pbnRlcnBvbGF0ZUhjbD1mdW5jdGlvbihlLHIpe2U9dC5oY2woZSkscj10LmhjbChyKTt2YXIgbj1lLmgsaT1lLmMsYT1lLmwsbz1yLmgtbixzPXIuYy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLmM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFp0KG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVIc2w9ZnVuY3Rpb24oZSxyKXtlPXQuaHNsKGUpLHI9dC5oc2wocik7dmFyIG49ZS5oLGk9ZS5zLGE9ZS5sLG89ci5oLW4scz1yLnMtaSxsPXIubC1hO2lzTmFOKHMpJiYocz0wLGk9aXNOYU4oaSk/ci5zOmkpO2lzTmFOKG8pPyhvPTAsbj1pc05hTihuKT9yLmg6bik6bz4xODA/by09MzYwOm88LTE4MCYmKG8rPTM2MCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBHdChuK28qdCxpK3MqdCxhK2wqdCkrIiJ9fSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKGUscil7ZT10LmxhYihlKSxyPXQubGFiKHIpO3ZhciBuPWUubCxpPWUuYSxhPWUuYixvPXIubC1uLHM9ci5hLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFF0KG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVSb3VuZD1kYSx0LnRyYW5zZm9ybT1mdW5jdGlvbihlKXt2YXIgcj1pLmNyZWF0ZUVsZW1lbnROUyh0Lm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4odC50cmFuc2Zvcm09ZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7ci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCk7dmFyIGU9ci50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpfXJldHVybiBuZXcgZ2EoZT9lLm1hdHJpeDp5YSl9KShlKX0sZ2EucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3RoaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciB5YT17YToxLGI6MCxjOjAsZDoxLGU6MCxmOjB9O2Z1bmN0aW9uIHhhKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIsIjoiIn1mdW5jdGlvbiBiYShlLHIpe3ZhciBuPVtdLGk9W107cmV0dXJuIGU9dC50cmFuc2Zvcm0oZSkscj10LnRyYW5zZm9ybShyKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaCgidHJhbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO24ucHVzaCh7aTppLTQseDpYaSh0WzBdLGVbMF0pfSx7aTppLTIseDpYaSh0WzFdLGVbMV0pfSl9ZWxzZShlWzBdfHxlWzFdKSYmci5wdXNoKCJ0cmFuc2xhdGUoIitlKyIpIil9KGUudHJhbnNsYXRlLHIudHJhbnNsYXRlLG4saSksZnVuY3Rpb24odCxlLHIsbil7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG4ucHVzaCh7aTpyLnB1c2goeGEocikrInJvdGF0ZSgiLG51bGwsIikiKS0yLHg6WGkodCxlKX0pKTplJiZyLnB1c2goeGEocikrInJvdGF0ZSgiK2UrIikiKX0oZS5yb3RhdGUsci5yb3RhdGUsbixpKSxmdW5jdGlvbih0LGUscixuKXt0IT09ZT9uLnB1c2goe2k6ci5wdXNoKHhhKHIpKyJza2V3WCgiLG51bGwsIikiKS0yLHg6WGkodCxlKX0pOmUmJnIucHVzaCh4YShyKSsic2tld1goIitlKyIpIil9KGUuc2tldyxyLnNrZXcsbixpKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaCh4YShyKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OlhpKHRbMF0sZVswXSl9LHtpOmktMix4OlhpKHRbMV0sZVsxXSl9KX1lbHNlIDE9PT1lWzBdJiYxPT09ZVsxXXx8ci5wdXNoKHhhKHIpKyJzY2FsZSgiK2UrIikiKX0oZS5zY2FsZSxyLnNjYWxlLG4saSksZT1yPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsYT1pLmxlbmd0aDsrK3I8YTspblsoZT1pW3JdKS5pXT1lLngodCk7cmV0dXJuIG4uam9pbigiIil9fWZ1bmN0aW9uIF9hKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuKHItdCkvZX19ZnVuY3Rpb24gd2EodCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChyLXQpL2UpKX19ZnVuY3Rpb24gVGEodCl7Zm9yKHZhciBlPXQuc291cmNlLHI9dC50YXJnZXQsbj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPWthKHQpLG49a2EoZSksaT1yLnBvcCgpLGE9bi5wb3AoKSxvPW51bGw7Zm9yKDtpPT09YTspbz1pLGk9ci5wb3AoKSxhPW4ucG9wKCk7cmV0dXJuIG99KGUsciksaT1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsaS5wdXNoKGUpO2Zvcih2YXIgYT1pLmxlbmd0aDtyIT09bjspaS5zcGxpY2UoYSwwLHIpLHI9ci5wYXJlbnQ7cmV0dXJuIGl9ZnVuY3Rpb24ga2EodCl7Zm9yKHZhciBlPVtdLHI9dC5wYXJlbnQ7bnVsbCE9cjspZS5wdXNoKHQpLHQ9cixyPXIucGFyZW50O3JldHVybiBlLnB1c2godCksZX1mdW5jdGlvbiBNYSh0KXt0LmZpeGVkfD0yfWZ1bmN0aW9uIEFhKHQpe3QuZml4ZWQmPS03fWZ1bmN0aW9uIFNhKHQpe3QuZml4ZWR8PTQsdC5weD10LngsdC5weT10Lnl9ZnVuY3Rpb24gRWEodCl7dC5maXhlZCY9LTV9dC5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1iYSx0LmxheW91dD17fSx0LmxheW91dC5idW5kbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9LTEsbj10Lmxlbmd0aDsrK3I8bjspZS5wdXNoKFRhKHRbcl0pKTtyZXR1cm4gZX19LHQubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbD17fSxjPTA7ZnVuY3Rpb24gdSgpe3ZhciBsLHUsZixwLGQsZz17fSxtPVtdLHY9dC5yYW5nZShpKSx5PVtdO2ZvcihlPVtdLHI9W10sbD0wLHA9LTE7KytwPGk7KXtmb3IodT0wLGQ9LTE7KytkPGk7KXUrPW5bcF1bZF07bS5wdXNoKHUpLHkucHVzaCh0LnJhbmdlKGkpKSxsKz11fWZvcihhJiZ2LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEobVt0XSxtW2VdKX0pKSxvJiZ5LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5zb3J0KChmdW5jdGlvbih0LHIpe3JldHVybiBvKG5bZV1bdF0sbltlXVtyXSl9KSl9KSksbD0oU3QtYyppKS9sLHU9MCxwPS0xOysrcDxpOyl7Zm9yKGY9dSxkPS0xOysrZDxpOyl7dmFyIHg9dltwXSxiPXlbeF1bZF0sXz1uW3hdW2JdLHc9dSxUPXUrPV8qbDtnW3grIi0iK2JdPXtpbmRleDp4LHN1YmluZGV4OmIsc3RhcnRBbmdsZTp3LGVuZEFuZ2xlOlQsdmFsdWU6X319clt4XT17aW5kZXg6eCxzdGFydEFuZ2xlOmYsZW5kQW5nbGU6dSx2YWx1ZTptW3hdfSx1Kz1jfWZvcihwPS0xOysrcDxpOylmb3IoZD1wLTE7KytkPGk7KXt2YXIgaz1nW3ArIi0iK2RdLE09Z1tkKyItIitwXTsoay52YWx1ZXx8TS52YWx1ZSkmJmUucHVzaChrLnZhbHVlPE0udmFsdWU/e3NvdXJjZTpNLHRhcmdldDprfTp7c291cmNlOmssdGFyZ2V0Ok19KX1zJiZoKCl9ZnVuY3Rpb24gaCgpe2Uuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gcygodC5zb3VyY2UudmFsdWUrdC50YXJnZXQudmFsdWUpLzIsKGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKS8yKX0pKX1yZXR1cm4gbC5tYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KG49dCkmJm4ubGVuZ3RoLGU9cj1udWxsLGwpOm59LGwucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGU9cj1udWxsLGwpOmN9LGwuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGU9cj1udWxsLGwpOmF9LGwuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGU9bnVsbCxsKTpvfSxsLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxlJiZoKCksbCk6c30sbC5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gZXx8dSgpLGV9LGwuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIHJ8fHUoKSxyfSxsfSx0LmxheW91dC5mb3JjZT1mdW5jdGlvbigpe3ZhciBlLHIsbixpLGEsbyxzPXt9LGw9dC5kaXNwYXRjaCgic3RhcnQiLCJ0aWNrIiwiZW5kIiksYz1bMSwxXSx1PS45LGg9Q2EsZj1MYSxwPS0zMCxkPVBhLGc9LjEsbT0uNjQsdj1bXSx5PVtdO2Z1bmN0aW9uIHgodCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe2lmKGUucG9pbnQhPT10KXt2YXIgYT1lLmN4LXQueCxvPWUuY3ktdC55LHM9aS1yLGw9YSphK28qbztpZihzKnMvbTxsKXtpZihsPGQpe3ZhciBjPWUuY2hhcmdlL2w7dC5weC09YSpjLHQucHktPW8qY31yZXR1cm4hMH1pZihlLnBvaW50JiZsJiZsPGQpe2M9ZS5wb2ludENoYXJnZS9sO3QucHgtPWEqYyx0LnB5LT1vKmN9fXJldHVybiFlLmNoYXJnZX19ZnVuY3Rpb24gYihlKXtlLnB4PXQuZXZlbnQueCxlLnB5PXQuZXZlbnQueSxzLnJlc3VtZSgpfXJldHVybiBzLnRpY2s9ZnVuY3Rpb24oKXtpZigobio9Ljk5KTwuMDA1KXJldHVybiBlPW51bGwsbC5lbmQoe3R5cGU6ImVuZCIsYWxwaGE6bj0wfSksITA7dmFyIHIscyxoLGYsZCxtLGIsXyx3LFQ9di5sZW5ndGgsaz15Lmxlbmd0aDtmb3Iocz0wO3M8azsrK3MpZj0oaD15W3NdKS5zb3VyY2UsKG09KF89KGQ9aC50YXJnZXQpLngtZi54KSpfKyh3PWQueS1mLnkpKncpJiYoXyo9bT1uKmFbc10qKChtPU1hdGguc3FydChtKSktaVtzXSkvbSx3Kj1tLGQueC09XyooYj1mLndlaWdodCtkLndlaWdodD9mLndlaWdodC8oZi53ZWlnaHQrZC53ZWlnaHQpOi41KSxkLnktPXcqYixmLngrPV8qKGI9MS1iKSxmLnkrPXcqYik7aWYoKGI9bipnKSYmKF89Y1swXS8yLHc9Y1sxXS8yLHM9LTEsYikpZm9yKDsrK3M8VDspKGg9dltzXSkueCs9KF8taC54KSpiLGgueSs9KHctaC55KSpiO2lmKHApZm9yKCFmdW5jdGlvbiB0KGUscixuKXt2YXIgaT0wLGE9MDtpZihlLmNoYXJnZT0wLCFlLmxlYWYpZm9yKHZhciBvLHM9ZS5ub2RlcyxsPXMubGVuZ3RoLGM9LTE7KytjPGw7KW51bGwhPShvPXNbY10pJiYodChvLHIsbiksZS5jaGFyZ2UrPW8uY2hhcmdlLGkrPW8uY2hhcmdlKm8uY3gsYSs9by5jaGFyZ2Uqby5jeSk7aWYoZS5wb2ludCl7ZS5sZWFmfHwoZS5wb2ludC54Kz1NYXRoLnJhbmRvbSgpLS41LGUucG9pbnQueSs9TWF0aC5yYW5kb20oKS0uNSk7dmFyIHU9cipuW2UucG9pbnQuaW5kZXhdO2UuY2hhcmdlKz1lLnBvaW50Q2hhcmdlPXUsaSs9dSplLnBvaW50LngsYSs9dSplLnBvaW50Lnl9ZS5jeD1pL2UuY2hhcmdlLGUuY3k9YS9lLmNoYXJnZX0ocj10Lmdlb20ucXVhZHRyZWUodiksbixvKSxzPS0xOysrczxUOykoaD12W3NdKS5maXhlZHx8ci52aXNpdCh4KGgpKTtmb3Iocz0tMTsrK3M8VDspKGg9dltzXSkuZml4ZWQ/KGgueD1oLnB4LGgueT1oLnB5KTooaC54LT0oaC5weC0oaC5weD1oLngpKSp1LGgueS09KGgucHktKGgucHk9aC55KSkqdSk7bC50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTpufSl9LHMubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dCxzKTp2fSxzLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PXQscyk6eX0scy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQscyk6Y30scy5saW5rRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxzKTpofSxzLmRpc3RhbmNlPXMubGlua0Rpc3RhbmNlLHMubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3Qscyk6Zn0scy5mcmljdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxzKTp1fSxzLmNoYXJnZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LHMpOnB9LHMuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dCp0LHMpOk1hdGguc3FydChkKX0scy5ncmF2aXR5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0LHMpOmd9LHMudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dCp0LHMpOk1hdGguc3FydChtKX0scy5hbHBoYT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rdCxuP3Q+MD9uPXQ6KGUuYz1udWxsLGUudD1OYU4sZT1udWxsLGwuZW5kKHt0eXBlOiJlbmQiLGFscGhhOm49MH0pKTp0PjAmJihsLnN0YXJ0KHt0eXBlOiJzdGFydCIsYWxwaGE6bj10fSksZT13ZShzLnRpY2spKSxzKTpufSxzLnN0YXJ0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49di5sZW5ndGgsbD15Lmxlbmd0aCx1PWNbMF0sZD1jWzFdO2Zvcih0PTA7dDxuOysrdCkocj12W3RdKS5pbmRleD10LHIud2VpZ2h0PTA7Zm9yKHQ9MDt0PGw7Kyt0KSJudW1iZXIiPT10eXBlb2Yocj15W3RdKS5zb3VyY2UmJihyLnNvdXJjZT12W3Iuc291cmNlXSksIm51bWJlciI9PXR5cGVvZiByLnRhcmdldCYmKHIudGFyZ2V0PXZbci50YXJnZXRdKSwrK3Iuc291cmNlLndlaWdodCwrK3IudGFyZ2V0LndlaWdodDtmb3IodD0wO3Q8bjsrK3Qpcj12W3RdLGlzTmFOKHIueCkmJihyLng9ZygieCIsdSkpLGlzTmFOKHIueSkmJihyLnk9ZygieSIsZCkpLGlzTmFOKHIucHgpJiYoci5weD1yLngpLGlzTmFOKHIucHkpJiYoci5weT1yLnkpO2lmKGk9W10sImZ1bmN0aW9uIj09dHlwZW9mIGgpZm9yKHQ9MDt0PGw7Kyt0KWlbdF09K2guY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bDsrK3QpaVt0XT1oO2lmKGE9W10sImZ1bmN0aW9uIj09dHlwZW9mIGYpZm9yKHQ9MDt0PGw7Kyt0KWFbdF09K2YuY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bDsrK3QpYVt0XT1mO2lmKG89W10sImZ1bmN0aW9uIj09dHlwZW9mIHApZm9yKHQ9MDt0PG47Kyt0KW9bdF09K3AuY2FsbCh0aGlzLHZbdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bjsrK3Qpb1t0XT1wO2Z1bmN0aW9uIGcocixpKXtpZighZSl7Zm9yKGU9bmV3IEFycmF5KG4pLGM9MDtjPG47KytjKWVbY109W107Zm9yKGM9MDtjPGw7KytjKXt2YXIgYT15W2NdO2VbYS5zb3VyY2UuaW5kZXhdLnB1c2goYS50YXJnZXQpLGVbYS50YXJnZXQuaW5kZXhdLnB1c2goYS5zb3VyY2UpfX1mb3IodmFyIG8scz1lW3RdLGM9LTEsdT1zLmxlbmd0aDsrK2M8dTspaWYoIWlzTmFOKG89c1tjXVtyXSkpcmV0dXJuIG87cmV0dXJuIE1hdGgucmFuZG9tKCkqaX1yZXR1cm4gcy5yZXN1bWUoKX0scy5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbHBoYSguMSl9LHMuc3RvcD1mdW5jdGlvbigpe3JldHVybiBzLmFscGhhKDApfSxzLmRyYWc9ZnVuY3Rpb24oKXtpZihyfHwocj10LmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oTCkub24oImRyYWdzdGFydC5mb3JjZSIsTWEpLm9uKCJkcmFnLmZvcmNlIixiKS5vbigiZHJhZ2VuZC5mb3JjZSIsQWEpKSwhYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjt0aGlzLm9uKCJtb3VzZW92ZXIuZm9yY2UiLFNhKS5vbigibW91c2VvdXQuZm9yY2UiLEVhKS5jYWxsKHIpfSx0LnJlYmluZChzLGwsIm9uIil9O3ZhciBDYT0yMCxMYT0xLFBhPTEvMDtmdW5jdGlvbiBJYShlLHIpe3JldHVybiB0LnJlYmluZChlLHIsInNvcnQiLCJjaGlsZHJlbiIsInZhbHVlIiksZS5ub2Rlcz1lLGUubGlua3M9QmEsZX1mdW5jdGlvbiB6YSh0LGUpe2Zvcih2YXIgcj1bdF07bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKGUodCksKGk9dC5jaGlsZHJlbikmJihuPWkubGVuZ3RoKSlmb3IodmFyIG4saTstLW4+PTA7KXIucHVzaChpW25dKX1mdW5jdGlvbiBPYSh0LGUpe2Zvcih2YXIgcj1bdF0sbj1bXTtudWxsIT0odD1yLnBvcCgpKTspaWYobi5wdXNoKHQpLChhPXQuY2hpbGRyZW4pJiYoaT1hLmxlbmd0aCkpZm9yKHZhciBpLGEsbz0tMTsrK288aTspci5wdXNoKGFbb10pO2Zvcig7bnVsbCE9KHQ9bi5wb3AoKSk7KWUodCl9ZnVuY3Rpb24gRGEodCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gUmEodCl7cmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gRmEodCxlKXtyZXR1cm4gZS52YWx1ZS10LnZhbHVlfWZ1bmN0aW9uIEJhKGUpe3JldHVybiB0Lm1lcmdlKGUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC5jaGlsZHJlbnx8W10pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue3NvdXJjZTp0LHRhcmdldDplfX0pKX0pKSl9dC5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7dmFyIHQ9RmEsZT1EYSxyPVJhO2Z1bmN0aW9uIG4oaSl7dmFyIGEsbz1baV0scz1bXTtmb3IoaS5kZXB0aD0wO251bGwhPShhPW8ucG9wKCkpOylpZihzLnB1c2goYSksKGM9ZS5jYWxsKG4sYSxhLmRlcHRoKSkmJihsPWMubGVuZ3RoKSl7Zm9yKHZhciBsLGMsdTstLWw+PTA7KW8ucHVzaCh1PWNbbF0pLHUucGFyZW50PWEsdS5kZXB0aD1hLmRlcHRoKzE7ciYmKGEudmFsdWU9MCksYS5jaGlsZHJlbj1jfWVsc2UgciYmKGEudmFsdWU9K3IuY2FsbChuLGEsYS5kZXB0aCl8fDApLGRlbGV0ZSBhLmNoaWxkcmVuO3JldHVybiBPYShpLChmdW5jdGlvbihlKXt2YXIgbixpO3QmJihuPWUuY2hpbGRyZW4pJiZuLnNvcnQodCksciYmKGk9ZS5wYXJlbnQpJiYoaS52YWx1ZSs9ZS52YWx1ZSl9KSksc31yZXR1cm4gbi5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5jaGlsZHJlbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLnJldmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHImJih6YSh0LChmdW5jdGlvbih0KXt0LmNoaWxkcmVuJiYodC52YWx1ZT0wKX0pKSxPYSh0LChmdW5jdGlvbih0KXt2YXIgZTt0LmNoaWxkcmVufHwodC52YWx1ZT0rci5jYWxsKG4sdCx0LmRlcHRoKXx8MCksKGU9dC5wYXJlbnQpJiYoZS52YWx1ZSs9dC52YWx1ZSl9KSkpLHR9LG59LHQubGF5b3V0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLHI9WzEsMV07ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWUuY2FsbCh0aGlzLHQsbik7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtpZihlLng9cixlLnk9ZS5kZXB0aCppLGUuZHg9bixlLmR5PWksYSYmKG89YS5sZW5ndGgpKXt2YXIgbyxzLGwsYz0tMTtmb3Iobj1lLnZhbHVlP24vZS52YWx1ZTowOysrYzxvOyl0KHM9YVtjXSxyLGw9cy52YWx1ZSpuLGkpLHIrPWx9fShpWzBdLDAsclswXSxyWzFdL2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbixuPTA7aWYociYmKGk9ci5sZW5ndGgpKWZvcih2YXIgaSxhPS0xOysrYTxpOyluPU1hdGgubWF4KG4sdChyW2FdKSk7cmV0dXJuIDErbn0oaVswXSkpLGl9cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LElhKG4sZSl9LHQubGF5b3V0LnBpZT1mdW5jdGlvbigpe3ZhciBlPU51bWJlcixyPU5hLG49MCxpPVN0LGE9MDtmdW5jdGlvbiBvKHMpe3ZhciBsLGM9cy5sZW5ndGgsdT1zLm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4rZS5jYWxsKG8sdCxyKX0pKSxoPSsoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksZj0oImZ1bmN0aW9uIj09dHlwZW9mIGk/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aSktaCxwPU1hdGgubWluKE1hdGguYWJzKGYpL2MsKygiZnVuY3Rpb24iPT10eXBlb2YgYT9hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphKSksZD1wKihmPDA/LTE6MSksZz10LnN1bSh1KSxtPWc/KGYtYypkKS9nOjAsdj10LnJhbmdlKGMpLHk9W107cmV0dXJuIG51bGwhPXImJnYuc29ydChyPT09TmE/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdVtlXS11W3RdfTpmdW5jdGlvbih0LGUpe3JldHVybiByKHNbdF0sc1tlXSl9KSx2LmZvckVhY2goKGZ1bmN0aW9uKHQpe3lbdF09e2RhdGE6c1t0XSx2YWx1ZTpsPXVbdF0sc3RhcnRBbmdsZTpoLGVuZEFuZ2xlOmgrPWwqbStkLHBhZEFuZ2xlOnB9fSkpLHl9cmV0dXJuIG8udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxvKTpyfSxvLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxvKTpufSxvLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbyk6aX0sby5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG8pOmF9LG99O3ZhciBOYT17fTtmdW5jdGlvbiBqYSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIFVhKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gVmEodCxlLHIpe3QueTA9ZSx0Lnk9cn10LmxheW91dC5zdGFjaz1mdW5jdGlvbigpe3ZhciBlPUwscj1HYSxuPVlhLGk9VmEsYT1qYSxvPVVhO2Z1bmN0aW9uIHMobCxjKXtpZighKHA9bC5sZW5ndGgpKXJldHVybiBsO3ZhciB1PWwubWFwKChmdW5jdGlvbih0LHIpe3JldHVybiBlLmNhbGwocyx0LHIpfSkpLGg9dS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm5bYS5jYWxsKHMsdCxlKSxvLmNhbGwocyx0LGUpXX0pKX0pKSxmPXIuY2FsbChzLGgsYyk7dT10LnBlcm11dGUodSxmKSxoPXQucGVybXV0ZShoLGYpO3ZhciBwLGQsZyxtLHY9bi5jYWxsKHMsaCxjKSx5PXVbMF0ubGVuZ3RoO2ZvcihnPTA7Zzx5OysrZylmb3IoaS5jYWxsKHMsdVswXVtnXSxtPXZbZ10saFswXVtnXVsxXSksZD0xO2Q8cDsrK2QpaS5jYWxsKHMsdVtkXVtnXSxtKz1oW2QtMV1bZ11bMV0saFtkXVtnXVsxXSk7cmV0dXJuIGx9cmV0dXJuIHMudmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscyk6ZX0scy5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnFhLmdldCh0KXx8R2Escyk6cn0scy5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIYS5nZXQodCl8fFlhLHMpOm59LHMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LHMpOmF9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHMpOm99LHMub3V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscyk6aX0sc307dmFyIHFhPXQubWFwKHsiaW5zaWRlLW91dCI6ZnVuY3Rpb24oZSl7dmFyIHIsbixpPWUubGVuZ3RoLGE9ZS5tYXAoV2EpLG89ZS5tYXAoWmEpLHM9dC5yYW5nZShpKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBhW3RdLWFbZV19KSksbD0wLGM9MCx1PVtdLGg9W107Zm9yKHI9MDtyPGk7KytyKW49c1tyXSxsPGM/KGwrPW9bbl0sdS5wdXNoKG4pKTooYys9b1tuXSxoLnB1c2gobikpO3JldHVybiBoLnJldmVyc2UoKS5jb25jYXQodSl9LHJldmVyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpLnJldmVyc2UoKX0sZGVmYXVsdDpHYX0pLEhhPXQubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz1bXSxzPTAsbD1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtuPnMmJihzPW4pLG8ucHVzaChuKX1mb3Iocj0wO3I8YTsrK3IpbFtyXT0ocy1vW3JdKS8yO3JldHVybiBsfSx3aWdnbGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHU9dC5sZW5ndGgsaD10WzBdLGY9aC5sZW5ndGgscD1bXTtmb3IocFswXT1sPWM9MCxyPTE7cjxmOysrcil7Zm9yKGU9MCxpPTA7ZTx1OysrZSlpKz10W2VdW3JdWzFdO2ZvcihlPTAsYT0wLHM9aFtyXVswXS1oW3ItMV1bMF07ZTx1OysrZSl7Zm9yKG49MCxvPSh0W2VdW3JdWzFdLXRbZV1bci0xXVsxXSkvKDIqcyk7bjxlOysrbilvKz0odFtuXVtyXVsxXS10W25dW3ItMV1bMV0pL3M7YSs9byp0W2VdW3JdWzFdfXBbcl09bC09aT9hL2kqczowLGw8YyYmKGM9bCl9Zm9yKHI9MDtyPGY7KytyKXBbcl0tPWM7cmV0dXJuIHB9LGV4cGFuZDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPXRbMF0ubGVuZ3RoLG89MS9pLHM9W107Zm9yKHI9MDtyPGE7KytyKXtmb3IoZT0wLG49MDtlPGk7ZSsrKW4rPXRbZV1bcl1bMV07aWYobilmb3IoZT0wO2U8aTtlKyspdFtlXVtyXVsxXS89bjtlbHNlIGZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdPW99Zm9yKHI9MDtyPGE7KytyKXNbcl09MDtyZXR1cm4gc30semVybzpZYX0pO2Z1bmN0aW9uIEdhKGUpe3JldHVybiB0LnJhbmdlKGUubGVuZ3RoKX1mdW5jdGlvbiBZYSh0KXtmb3IodmFyIGU9LTEscj10WzBdLmxlbmd0aCxuPVtdOysrZTxyOyluW2VdPTA7cmV0dXJuIG59ZnVuY3Rpb24gV2EodCl7Zm9yKHZhciBlLHI9MSxuPTAsaT10WzBdWzFdLGE9dC5sZW5ndGg7cjxhOysrcikoZT10W3JdWzFdKT5pJiYobj1yLGk9ZSk7cmV0dXJuIG59ZnVuY3Rpb24gWmEodCl7cmV0dXJuIHQucmVkdWNlKFhhLDApfWZ1bmN0aW9uIFhhKHQsZSl7cmV0dXJuIHQrZVsxXX1mdW5jdGlvbiBKYSh0LGUpe3JldHVybiBLYSh0LE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIrMSkpfWZ1bmN0aW9uIEthKHQsZSl7Zm9yKHZhciByPS0xLG49K3RbMF0saT0odFsxXS1uKS9lLGE9W107KytyPD1lOylhW3JdPWkqcituO3JldHVybiBhfWZ1bmN0aW9uIFFhKGUpe3JldHVyblt0Lm1pbihlKSx0Lm1heChlKV19ZnVuY3Rpb24gJGEodCxlKXtyZXR1cm4gdC52YWx1ZS1lLnZhbHVlfWZ1bmN0aW9uIHRvKHQsZSl7dmFyIHI9dC5fcGFja19uZXh0O3QuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10LGUuX3BhY2tfbmV4dD1yLHIuX3BhY2tfcHJldj1lfWZ1bmN0aW9uIGVvKHQsZSl7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXR9ZnVuY3Rpb24gcm8odCxlKXt2YXIgcj1lLngtdC54LG49ZS55LXQueSxpPXQucitlLnI7cmV0dXJuLjk5OSppKmk+cipyK24qbn1mdW5jdGlvbiBubyh0KXtpZigoZT10LmNoaWxkcmVuKSYmKGw9ZS5sZW5ndGgpKXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MS8wLHU9LTEvMCxoPTEvMCxmPS0xLzA7aWYoZS5mb3JFYWNoKGlvKSwocj1lWzBdKS54PS1yLnIsci55PTAseChyKSxsPjEmJigobj1lWzFdKS54PW4ucixuLnk9MCx4KG4pLGw+MikpZm9yKG9vKHIsbixpPWVbMl0pLHgoaSksdG8ocixpKSxyLl9wYWNrX3ByZXY9aSx0byhpLG4pLG49ci5fcGFja19uZXh0LGE9MzthPGw7YSsrKXtvbyhyLG4saT1lW2FdKTt2YXIgcD0wLGQ9MSxnPTE7Zm9yKG89bi5fcGFja19uZXh0O28hPT1uO289by5fcGFja19uZXh0LGQrKylpZihybyhvLGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3Iocz1yLl9wYWNrX3ByZXY7cyE9PW8uX3BhY2tfcHJldiYmIXJvKHMsaSk7cz1zLl9wYWNrX3ByZXYsZysrKTtwPyhkPGd8fGQ9PWcmJm4ucjxyLnI/ZW8ocixuPW8pOmVvKHI9cyxuKSxhLS0pOih0byhyLGkpLG49aSx4KGkpKX12YXIgbT0oYyt1KS8yLHY9KGgrZikvMix5PTA7Zm9yKGE9MDthPGw7YSsrKShpPWVbYV0pLngtPW0saS55LT12LHk9TWF0aC5tYXgoeSxpLnIrTWF0aC5zcXJ0KGkueCppLngraS55KmkueSkpO3Qucj15LGUuZm9yRWFjaChhbyl9ZnVuY3Rpb24geCh0KXtjPU1hdGgubWluKHQueC10LnIsYyksdT1NYXRoLm1heCh0LngrdC5yLHUpLGg9TWF0aC5taW4odC55LXQucixoKSxmPU1hdGgubWF4KHQueSt0LnIsZil9fWZ1bmN0aW9uIGlvKHQpe3QuX3BhY2tfbmV4dD10Ll9wYWNrX3ByZXY9dH1mdW5jdGlvbiBhbyh0KXtkZWxldGUgdC5fcGFja19uZXh0LGRlbGV0ZSB0Ll9wYWNrX3ByZXZ9ZnVuY3Rpb24gb28odCxlLHIpe3ZhciBuPXQucityLnIsaT1lLngtdC54LGE9ZS55LXQueTtpZihuJiYoaXx8YSkpe3ZhciBvPWUucityLnIscz1pKmkrYSphLGw9LjUrKChuKj1uKS0obyo9bykpLygyKnMpLGM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihuK3MpLShuLT1zKSpuLW8qbykpLygyKnMpO3IueD10LngrbCppK2MqYSxyLnk9dC55K2wqYS1jKml9ZWxzZSByLng9dC54K24sci55PXQueX1mdW5jdGlvbiBzbyh0LGUpe3JldHVybiB0LnBhcmVudD09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIGxvKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGUubGVuZ3RoP2VbMF06dC50fWZ1bmN0aW9uIGNvKHQpe3ZhciBlLHI9dC5jaGlsZHJlbjtyZXR1cm4oZT1yLmxlbmd0aCk/cltlLTFdOnQudH1mdW5jdGlvbiB1byh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBobyh0LGUscil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6cn1mdW5jdGlvbiBmbyh0KXtyZXR1cm57eDp0LngseTp0LnksZHg6dC5keCxkeTp0LmR5fX1mdW5jdGlvbiBwbyh0LGUpe3ZhciByPXQueCtlWzNdLG49dC55K2VbMF0saT10LmR4LWVbMV0tZVszXSxhPXQuZHktZVswXS1lWzJdO3JldHVybiBpPDAmJihyKz1pLzIsaT0wKSxhPDAmJihuKz1hLzIsYT0wKSx7eDpyLHk6bixkeDppLGR5OmF9fWZ1bmN0aW9uIGdvKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBlPHI/W2Uscl06W3IsZV19ZnVuY3Rpb24gbW8odCl7cmV0dXJuIHQucmFuZ2VFeHRlbnQ/dC5yYW5nZUV4dGVudCgpOmdvKHQucmFuZ2UoKSl9ZnVuY3Rpb24gdm8odCxlLHIsbil7dmFyIGk9cih0WzBdLHRbMV0pLGE9bihlWzBdLGVbMV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24geW8odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aC0xLGE9dFtuXSxvPXRbaV07cmV0dXJuIG88YSYmKHI9bixuPWksaT1yLHI9YSxhPW8sbz1yKSx0W25dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiB4byh0KXtyZXR1cm4gdD97Zmxvb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90KSp0fSxjZWlsOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmNlaWwoZS90KSp0fX06Ym99dC5sYXlvdXQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIGU9ITAscj1OdW1iZXIsbj1RYSxpPUphO2Z1bmN0aW9uIGEoYSxvKXtmb3IodmFyIHMsbCxjPVtdLHU9YS5tYXAocix0aGlzKSxoPW4uY2FsbCh0aGlzLHUsbyksZj1pLmNhbGwodGhpcyxoLHUsbykscD0obz0tMSx1Lmxlbmd0aCksZD1mLmxlbmd0aC0xLGc9ZT8xOjEvcDsrK288ZDspKHM9Y1tvXT1bXSkuZHg9ZltvKzFdLShzLng9ZltvXSkscy55PTA7aWYoZD4wKWZvcihvPS0xOysrbzxwOykobD11W29dKT49aFswXSYmbDw9aFsxXSYmKChzPWNbdC5iaXNlY3QoZixsLDEsZCktMV0pLnkrPWcscy5wdXNoKGFbb10pKTtyZXR1cm4gY31yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LGEucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZGUodCksYSk6bn0sYS5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJudW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbihlKXtyZXR1cm4gS2EoZSx0KX06ZGUodCksYSk6aX0sYS5mcmVxdWVuY3k9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LGEpOmV9LGF9LHQubGF5b3V0LnBhY2s9ZnVuY3Rpb24oKXt2YXIgZSxyPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQoJGEpLG49MCxpPVsxLDFdO2Z1bmN0aW9uIGEodCxhKXt2YXIgbz1yLmNhbGwodGhpcyx0LGEpLHM9b1swXSxsPWlbMF0sYz1pWzFdLHU9bnVsbD09ZT9NYXRoLnNxcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfTtpZihzLng9cy55PTAsT2EocywoZnVuY3Rpb24odCl7dC5yPSt1KHQudmFsdWUpfSkpLE9hKHMsbm8pLG4pe3ZhciBoPW4qKGU/MTpNYXRoLm1heCgyKnMuci9sLDIqcy5yL2MpKS8yO09hKHMsKGZ1bmN0aW9uKHQpe3Qucis9aH0pKSxPYShzLG5vKSxPYShzLChmdW5jdGlvbih0KXt0LnItPWh9KSl9cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtpZihlLng9cis9aSplLngsZS55PW4rPWkqZS55LGUucio9aSxhKWZvcih2YXIgbz0tMSxzPWEubGVuZ3RoOysrbzxzOyl0KGFbb10scixuLGkpfShzLGwvMixjLzIsZT8xOjEvTWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSksb31yZXR1cm4gYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsYSk6aX0sYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxhKTplfSxhLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsYSk6bn0sSWEoYSxyKX0sdC5sYXlvdXQudHJlZT1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1zbyxuPVsxLDFdLGk9bnVsbDtmdW5jdGlvbiBhKHQsYSl7dmFyIGM9ZS5jYWxsKHRoaXMsdCxhKSx1PWNbMF0saD1mdW5jdGlvbih0KXt2YXIgZSxyPXtBOm51bGwsY2hpbGRyZW46W3RdfSxuPVtyXTtmb3IoO251bGwhPShlPW4ucG9wKCkpOylmb3IodmFyIGksYT1lLmNoaWxkcmVuLG89MCxzPWEubGVuZ3RoO288czsrK28pbi5wdXNoKChhW29dPWk9e186YVtvXSxwYXJlbnQ6ZSxjaGlsZHJlbjooaT1hW29dLmNoaWxkcmVuKSYmaS5zbGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT1pKTtyZXR1cm4gci5jaGlsZHJlblswXX0odSk7aWYoT2EoaCxvKSxoLnBhcmVudC5tPS1oLnosemEoaCxzKSxpKXphKHUsbCk7ZWxzZXt2YXIgZj11LHA9dSxkPXU7emEodSwoZnVuY3Rpb24odCl7dC54PGYueCYmKGY9dCksdC54PnAueCYmKHA9dCksdC5kZXB0aD5kLmRlcHRoJiYoZD10KX0pKTt2YXIgZz1yKGYscCkvMi1mLngsbT1uWzBdLyhwLngrcihwLGYpLzIrZyksdj1uWzFdLyhkLmRlcHRofHwxKTt6YSh1LChmdW5jdGlvbih0KXt0Lng9KHQueCtnKSptLHQueT10LmRlcHRoKnZ9KSl9cmV0dXJuIGN9ZnVuY3Rpb24gbyh0KXt2YXIgZT10LmNoaWxkcmVuLG49dC5wYXJlbnQuY2hpbGRyZW4saT10Lmk/blt0LmktMV06bnVsbDtpZihlLmxlbmd0aCl7IWZ1bmN0aW9uKHQpe3ZhciBlLHI9MCxuPTAsaT10LmNoaWxkcmVuLGE9aS5sZW5ndGg7Zm9yKDstLWE+PTA7KShlPWlbYV0pLnorPXIsZS5tKz1yLHIrPWUucysobis9ZS5jKX0odCk7dmFyIGE9KGVbMF0ueitlW2UubGVuZ3RoLTFdLnopLzI7aT8odC56PWkueityKHQuXyxpLl8pLHQubT10LnotYSk6dC56PWF9ZWxzZSBpJiYodC56PWkueityKHQuXyxpLl8pKTt0LnBhcmVudC5BPWZ1bmN0aW9uKHQsZSxuKXtpZihlKXtmb3IodmFyIGksYT10LG89dCxzPWUsbD1hLnBhcmVudC5jaGlsZHJlblswXSxjPWEubSx1PW8ubSxoPXMubSxmPWwubTtzPWNvKHMpLGE9bG8oYSkscyYmYTspbD1sbyhsKSwobz1jbyhvKSkuYT10LChpPXMueitoLWEuei1jK3Iocy5fLGEuXykpPjAmJih1byhobyhzLHQsbiksdCxpKSxjKz1pLHUrPWkpLGgrPXMubSxjKz1hLm0sZis9bC5tLHUrPW8ubTtzJiYhY28obykmJihvLnQ9cyxvLm0rPWgtdSksYSYmIWxvKGwpJiYobC50PWEsbC5tKz1jLWYsbj10KX1yZXR1cm4gbn0odCxpLHQucGFyZW50LkF8fG5bMF0pfWZ1bmN0aW9uIHModCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIGwodCl7dC54Kj1uWzBdLHQueT10LmRlcHRoKm5bMV19cmV0dXJuIGEuc2VwYXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KT9sOm51bGwsYSk6aT9udWxsOm59LGEubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KG49dCk/bnVsbDpsLGEpOmk/bjpudWxsfSxJYShhLGUpfSx0LmxheW91dC5jbHVzdGVyPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxyPXNvLG49WzEsMV0saT0hMTtmdW5jdGlvbiBhKGEsbyl7dmFyIHMsbD1lLmNhbGwodGhpcyxhLG8pLGM9bFswXSx1PTA7T2EoYywoZnVuY3Rpb24oZSl7dmFyIG49ZS5jaGlsZHJlbjtuJiZuLmxlbmd0aD8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLnh9KSwwKS90Lmxlbmd0aH0obiksZS55PWZ1bmN0aW9uKGUpe3JldHVybiAxK3QubWF4KGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSl9KG4pKTooZS54PXM/dSs9cihlLHMpOjAsZS55PTAscz1lKX0pKTt2YXIgaD1mdW5jdGlvbiB0KGUpe3ZhciByPWUuY2hpbGRyZW47cmV0dXJuIHImJnIubGVuZ3RoP3QoclswXSk6ZX0oYyksZj1mdW5jdGlvbiB0KGUpe3ZhciByLG49ZS5jaGlsZHJlbjtyZXR1cm4gbiYmKHI9bi5sZW5ndGgpP3QobltyLTFdKTplfShjKSxwPWgueC1yKGgsZikvMixkPWYueCtyKGYsaCkvMjtyZXR1cm4gT2EoYyxpP2Z1bmN0aW9uKHQpe3QueD0odC54LWMueCkqblswXSx0Lnk9KGMueS10LnkpKm5bMV19OmZ1bmN0aW9uKHQpe3QueD0odC54LXApLyhkLXApKm5bMF0sdC55PSgxLShjLnk/dC55L2MueToxKSkqblsxXX0pLGx9cmV0dXJuIGEuc2VwYXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KSxhKTppP251bGw6bn0sYS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsIT0obj10KSxhKTppP246bnVsbH0sSWEoYSxlKX0sdC5sYXlvdXQudHJlZW1hcD1mdW5jdGlvbigpe3ZhciBlLHI9dC5sYXlvdXQuaGllcmFyY2h5KCksbj1NYXRoLnJvdW5kLGk9WzEsMV0sYT1udWxsLG89Zm8scz0hMSxsPSJzcXVhcmlmeSIsYz0uNSooMStNYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIHUodCxlKXtmb3IodmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KW49KHI9dFtpXSkudmFsdWUqKGU8MD8wOmUpLHIuYXJlYT1pc05hTihuKXx8bjw9MD8wOm59ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmNoaWxkcmVuO2lmKGUmJmUubGVuZ3RoKXt2YXIgcixuLGksYT1vKHQpLHM9W10sYz1lLnNsaWNlKCksZj0xLzAsZz0ic2xpY2UiPT09bD9hLmR4OiJkaWNlIj09PWw/YS5keToic2xpY2UtZGljZSI9PT1sPzEmdC5kZXB0aD9hLmR5OmEuZHg6TWF0aC5taW4oYS5keCxhLmR5KTtmb3IodShjLGEuZHgqYS5keS90LnZhbHVlKSxzLmFyZWE9MDsoaT1jLmxlbmd0aCk+MDspcy5wdXNoKHI9Y1tpLTFdKSxzLmFyZWErPXIuYXJlYSwic3F1YXJpZnkiIT09bHx8KG49cChzLGcpKTw9Zj8oYy5wb3AoKSxmPW4pOihzLmFyZWEtPXMucG9wKCkuYXJlYSxkKHMsZyxhLCExKSxnPU1hdGgubWluKGEuZHgsYS5keSkscy5sZW5ndGg9cy5hcmVhPTAsZj0xLzApO3MubGVuZ3RoJiYoZChzLGcsYSwhMCkscy5sZW5ndGg9cy5hcmVhPTApLGUuZm9yRWFjaChoKX19ZnVuY3Rpb24gZih0KXt2YXIgZT10LmNoaWxkcmVuO2lmKGUmJmUubGVuZ3RoKXt2YXIgcixuPW8odCksaT1lLnNsaWNlKCksYT1bXTtmb3IodShpLG4uZHgqbi5keS90LnZhbHVlKSxhLmFyZWE9MDtyPWkucG9wKCk7KWEucHVzaChyKSxhLmFyZWErPXIuYXJlYSxudWxsIT1yLnomJihkKGEsci56P24uZHg6bi5keSxuLCFpLmxlbmd0aCksYS5sZW5ndGg9YS5hcmVhPTApO2UuZm9yRWFjaChmKX19ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcixuPXQuYXJlYSxpPTAsYT0xLzAsbz0tMSxzPXQubGVuZ3RoOysrbzxzOykocj10W29dLmFyZWEpJiYocjxhJiYoYT1yKSxyPmkmJihpPXIpKTtyZXR1cm4gZSo9ZSwobio9bik/TWF0aC5tYXgoZSppKmMvbixuLyhlKmEqYykpOjEvMH1mdW5jdGlvbiBkKHQsZSxyLGkpe3ZhciBhLG89LTEscz10Lmxlbmd0aCxsPXIueCxjPXIueSx1PWU/bih0LmFyZWEvZSk6MDtpZihlPT1yLmR4KXtmb3IoKGl8fHU+ci5keSkmJih1PXIuZHkpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keT11LGwrPWEuZHg9TWF0aC5taW4oci54K3IuZHgtbCx1P24oYS5hcmVhL3UpOjApO2Euej0hMCxhLmR4Kz1yLngrci5keC1sLHIueSs9dSxyLmR5LT11fWVsc2V7Zm9yKChpfHx1PnIuZHgpJiYodT1yLmR4KTsrK288czspKGE9dFtvXSkueD1sLGEueT1jLGEuZHg9dSxjKz1hLmR5PU1hdGgubWluKHIueStyLmR5LWMsdT9uKGEuYXJlYS91KTowKTthLno9ITEsYS5keSs9ci55K3IuZHktYyxyLngrPXUsci5keC09dX19ZnVuY3Rpb24gZyh0KXt2YXIgbj1lfHxyKHQpLGE9blswXTtyZXR1cm4gYS54PWEueT0wLGEudmFsdWU/KGEuZHg9aVswXSxhLmR5PWlbMV0pOmEuZHg9YS5keT0wLGUmJnIucmV2YWx1ZShhKSx1KFthXSxhLmR4KmEuZHkvYS52YWx1ZSksKGU/ZjpoKShhKSxzJiYoZT1uKSxufXJldHVybiBnLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxnKTppfSxnLnBhZGRpbmc9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGE7ZnVuY3Rpb24gZShlKXt2YXIgcj10LmNhbGwoZyxlLGUuZGVwdGgpO3JldHVybiBudWxsPT1yP2ZvKGUpOnBvKGUsIm51bWJlciI9PXR5cGVvZiByP1tyLHIscixyXTpyKX1mdW5jdGlvbiByKGUpe3JldHVybiBwbyhlLHQpfXZhciBuO3JldHVybiBvPW51bGw9PShhPXQpP2ZvOiJmdW5jdGlvbiI9PShuPXR5cGVvZiB0KT9lOiJudW1iZXIiPT09bj8odD1bdCx0LHQsdF0scik6cixnfSxnLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQ/TWF0aC5yb3VuZDpOdW1iZXIsZyk6biE9TnVtYmVyfSxnLnN0aWNreT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGU9bnVsbCxnKTpzfSxnLnJhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsZyk6Y30sZy5tb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQrIiIsZyk6bH0sSWEoZyxyKX0sdC5yYW5kb209e25vcm1hbDpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIHI8MiYmKGU9MSkscjwxJiYodD0wKSxmdW5jdGlvbigpe3ZhciByLG4saTtkb3tpPShyPTIqTWF0aC5yYW5kb20oKS0xKSpyKyhuPTIqTWF0aC5yYW5kb20oKS0xKSpufXdoaWxlKCFpfHxpPjEpO3JldHVybiB0K2UqcipNYXRoLnNxcnQoLTIqTWF0aC5sb2coaSkvaSl9fSxsb2dOb3JtYWw6ZnVuY3Rpb24oKXt2YXIgZT10LnJhbmRvbS5ub3JtYWwuYXBwbHkodCxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChlKCkpfX0sYmF0ZXM6ZnVuY3Rpb24oZSl7dmFyIHI9dC5yYW5kb20uaXJ3aW5IYWxsKGUpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByKCkvZX19LGlyd2luSGFsbDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxyPTA7cjx0O3IrKyllKz1NYXRoLnJhbmRvbSgpO3JldHVybiBlfX19LHQuc2NhbGU9e307dmFyIGJvPXtmbG9vcjpMLGNlaWw6TH07ZnVuY3Rpb24gX28oZSxyLG4saSl7dmFyIGE9W10sbz1bXSxzPTAsbD1NYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCktMTtmb3IoZVtsXTxlWzBdJiYoZT1lLnNsaWNlKCkucmV2ZXJzZSgpLHI9ci5zbGljZSgpLnJldmVyc2UoKSk7KytzPD1sOylhLnB1c2gobihlW3MtMV0sZVtzXSkpLG8ucHVzaChpKHJbcy0xXSxyW3NdKSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXQuYmlzZWN0KGUsciwxLGwpLTE7cmV0dXJuIG9bbl0oYVtuXShyKSl9fWZ1bmN0aW9uIHdvKGUscil7cmV0dXJuIHQucmViaW5kKGUsciwicmFuZ2UiLCJyYW5nZVJvdW5kIiwiaW50ZXJwb2xhdGUiLCJjbGFtcCIpfWZ1bmN0aW9uIFRvKHQsZSl7cmV0dXJuIHlvKHQseG8oa28odCxlKVsyXSkpLHlvKHQseG8oa28odCxlKVsyXSkpLHR9ZnVuY3Rpb24ga28odCxlKXtudWxsPT1lJiYoZT0xMCk7dmFyIHI9Z28odCksbj1yWzFdLXJbMF0saT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4vZSkvTWF0aC5MTjEwKSksYT1lL24qaTtyZXR1cm4gYTw9LjE1P2kqPTEwOmE8PS4zNT9pKj01OmE8PS43NSYmKGkqPTIpLHJbMF09TWF0aC5jZWlsKHJbMF0vaSkqaSxyWzFdPU1hdGguZmxvb3IoclsxXS9pKSppKy41KmksclsyXT1pLHJ9ZnVuY3Rpb24gTW8oZSxyKXtyZXR1cm4gdC5yYW5nZS5hcHBseSh0LGtvKGUscikpfWZ1bmN0aW9uIEFvKGUscixuKXt2YXIgaT1rbyhlLHIpO2lmKG4pe3ZhciBhPUNlLmV4ZWMobik7aWYoYS5zaGlmdCgpLCJzIj09PWFbOF0pe3ZhciBvPXQuZm9ybWF0UHJlZml4KE1hdGgubWF4KHkoaVswXSkseShpWzFdKSkpO3JldHVybiBhWzddfHwoYVs3XT0iLiIrRW8oby5zY2FsZShpWzJdKSkpLGFbOF09ImYiLG49dC5mb3JtYXQoYS5qb2luKCIiKSksZnVuY3Rpb24odCl7cmV0dXJuIG4oby5zY2FsZSh0KSkrby5zeW1ib2x9fWFbN118fChhWzddPSIuIitmdW5jdGlvbih0LGUpe3ZhciByPUVvKGVbMl0pO3JldHVybiB0IGluIFNvP01hdGguYWJzKHItRW8oTWF0aC5tYXgoeShlWzBdKSx5KGVbMV0pKSkpKyArKCJlIiE9PXQpOnItMiooIiUiPT09dCl9KGFbOF0saSkpLG49YS5qb2luKCIiKX1lbHNlIG49IiwuIitFbyhpWzJdKSsiZiI7cmV0dXJuIHQuZm9ybWF0KG4pfXQuc2NhbGUubGluZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGEsbztmdW5jdGlvbiBzKCl7dmFyIHQ9TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpPjI/X286dm8scz1pP3dhOl9hO3JldHVybiBhPXQoZSxyLHMsbiksbz10KHIsZSxzLCRpKSxsfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGEodCl9cmV0dXJuIGwuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBvKHQpfSxsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10Lm1hcChOdW1iZXIpLHMoKSk6ZX0sbC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHMoKSk6cn0sbC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBsLnJhbmdlKHQpLmludGVycG9sYXRlKGRhKX0sbC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHMoKSk6aX0sbC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMoKSk6bn0sbC50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gTW8oZSx0KX0sbC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIEFvKGUsdCxyKX0sbC5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBUbyhlLHQpLHMoKX0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSxyLG4saSl9LHMoKX0oWzAsMV0sWzAsMV0sJGksITEpfTt2YXIgU289e3M6MSxnOjEscDoxLHI6MSxlOjF9O2Z1bmN0aW9uIEVvKHQpe3JldHVybi1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4xMCsuMDEpfXQuc2NhbGUubG9nPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuLGksYSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4oaT9NYXRoLmxvZyh0PDA/MDp0KTotTWF0aC5sb2codD4wPzA6LXQpKS9NYXRoLmxvZyhuKX1mdW5jdGlvbiBzKHQpe3JldHVybiBpP01hdGgucG93KG4sdCk6LU1hdGgucG93KG4sLXQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHIobyh0KSl9cmV0dXJuIGwuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBzKHIuaW52ZXJ0KHQpKX0sbC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dFswXT49MCxyLmRvbWFpbigoYT10Lm1hcChOdW1iZXIpKS5tYXAobykpLGwpOmF9LGwuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyLmRvbWFpbihhLm1hcChvKSksbCk6bn0sbC5uaWNlPWZ1bmN0aW9uKCl7dmFyIHQ9eW8oYS5tYXAobyksaT9NYXRoOkxvKTtyZXR1cm4gci5kb21haW4odCksYT10Lm1hcChzKSxsfSxsLnRpY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9Z28oYSksZT1bXSxyPXRbMF0sbD10WzFdLGM9TWF0aC5mbG9vcihvKHIpKSx1PU1hdGguY2VpbChvKGwpKSxoPW4lMT8yOm47aWYoaXNGaW5pdGUodS1jKSl7aWYoaSl7Zm9yKDtjPHU7YysrKWZvcih2YXIgZj0xO2Y8aDtmKyspZS5wdXNoKHMoYykqZik7ZS5wdXNoKHMoYykpfWVsc2UgZm9yKGUucHVzaChzKGMpKTtjKys8dTspZm9yKGY9aC0xO2Y+MDtmLS0pZS5wdXNoKHMoYykqZik7Zm9yKGM9MDtlW2NdPHI7YysrKTtmb3IodT1lLmxlbmd0aDtlW3UtMV0+bDt1LS0pO2U9ZS5zbGljZShjLHUpfXJldHVybiBlfSxsLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSxyKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQ287YXJndW1lbnRzLmxlbmd0aDwyP3I9Q286ImZ1bmN0aW9uIiE9dHlwZW9mIHImJihyPXQuZm9ybWF0KHIpKTt2YXIgaT1NYXRoLm1heCgxLG4qZS9sLnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC9zKE1hdGgucm91bmQobyh0KSkpO3JldHVybiBlKm48bi0uNSYmKGUqPW4pLGU8PWk/cih0KToiIn19LGwuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIuY29weSgpLG4saSxhKX0sd28obCxyKX0odC5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBDbz10LmZvcm1hdCgiLjBlIiksTG89e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmNlaWwoLXQpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmZsb29yKC10KX19O2Z1bmN0aW9uIFBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfX10LnNjYWxlLnBvdz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT1QbyhyKSxhPVBvKDEvcik7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZShpKHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEoZS5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZS5kb21haW4oKG49dC5tYXAoTnVtYmVyKSkubWFwKGkpKSxvKTpufSxvLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBNbyhuLHQpfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQW8obix0LGUpfSxvLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZG9tYWluKFRvKG4sdCkpfSxvLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVBvKHI9dCksYT1QbygxL3IpLGUuZG9tYWluKG4ubWFwKGkpKSxvKTpyfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLmNvcHkoKSxyLG4pfSx3byhvLGUpfSh0LnNjYWxlLmxpbmVhcigpLDEsWzAsMV0pfSx0LnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5wb3coKS5leHBvbmVudCguNSl9LHQuc2NhbGUub3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbil7dmFyIGksYSxvO2Z1bmN0aW9uIHModCl7cmV0dXJuIGFbKChpLmdldCh0KXx8KCJyYW5nZSI9PT1uLnQ/aS5zZXQodCxyLnB1c2godCkpOk5hTikpLTEpJWEubGVuZ3RoXX1mdW5jdGlvbiBsKGUsbil7cmV0dXJuIHQucmFuZ2Uoci5sZW5ndGgpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUrbip0fSkpfXJldHVybiBzLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjtyPVtdLGk9bmV3IF87Zm9yKHZhciBlLGE9LTEsbz10Lmxlbmd0aDsrK2E8bzspaS5oYXMoZT10W2FdKXx8aS5zZXQoZSxyLnB1c2goZSkpO3JldHVybiBzW24udF0uYXBwbHkocyxuLmEpfSxzLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbz0wLG49e3Q6InJhbmdlIixhOmFyZ3VtZW50c30scyk6YX0scy5yYW5nZVBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPShpK2MpLzIsMCk6KGMtaSkvKHIubGVuZ3RoLTErZSk7cmV0dXJuIGE9bChpK3UqZS8yLHUpLG89MCxuPXt0OiJyYW5nZVBvaW50cyIsYTphcmd1bWVudHN9LHN9LHMucmFuZ2VSb3VuZFBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPWM9TWF0aC5yb3VuZCgoaStjKS8yKSwwKTooYy1pKS8oci5sZW5ndGgtMStlKXwwO3JldHVybiBhPWwoaStNYXRoLnJvdW5kKHUqZS8yKyhjLWktKHIubGVuZ3RoLTErZSkqdSkvMiksdSksbz0wLG49e3Q6InJhbmdlUm91bmRQb2ludHMiLGE6YXJndW1lbnRzfSxzfSxzLnJhbmdlQmFuZHM9ZnVuY3Rpb24odCxlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lKTt2YXIgYz10WzFdPHRbMF0sdT10W2MtMF0saD10WzEtY10sZj0oaC11KS8oci5sZW5ndGgtZSsyKmkpO3JldHVybiBhPWwodStmKmksZiksYyYmYS5yZXZlcnNlKCksbz1mKigxLWUpLG49e3Q6InJhbmdlQmFuZHMiLGE6YXJndW1lbnRzfSxzfSxzLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbih0LGUsaSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihpPWUpO3ZhciBjPXRbMV08dFswXSx1PXRbYy0wXSxoPXRbMS1jXSxmPU1hdGguZmxvb3IoKGgtdSkvKHIubGVuZ3RoLWUrMippKSk7cmV0dXJuIGE9bCh1K01hdGgucm91bmQoKGgtdS0oci5sZW5ndGgtZSkqZikvMiksZiksYyYmYS5yZXZlcnNlKCksbz1NYXRoLnJvdW5kKGYqKDEtZSkpLG49e3Q6InJhbmdlUm91bmRCYW5kcyIsYTphcmd1bWVudHN9LHN9LHMucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIG99LHMucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ28obi5hWzBdKX0scy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX0scy5kb21haW4ocil9KFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LHQuc2NhbGUuY2F0ZWdvcnkxMD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShJbyl9LHQuc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZSh6byl9LHQuc2NhbGUuY2F0ZWdvcnkyMGI9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoT28pfSx0LnNjYWxlLmNhdGVnb3J5MjBjPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKERvKX07dmFyIElvPVsyMDYyMjYwLDE2NzQ0MjA2LDI5MjQ1ODgsMTQwMzQ3MjgsOTcyNTg4NSw5MTk3MTMxLDE0OTA3MzMwLDgzNTU3MTEsMTIzNjkxODYsMTU1NjE3NV0ubWFwKGFlKSx6bz1bMjA2MjI2MCwxMTQ1NDQ0MCwxNjc0NDIwNiwxNjc1OTY3MiwyOTI0NTg4LDEwMDE4Njk4LDE0MDM0NzI4LDE2NzUwNzQyLDk3MjU4ODUsMTI5NTU4NjEsOTE5NzEzMSwxMjg4NTE0MCwxNDkwNzMzMCwxNjIzNDE5NCw4MzU1NzExLDEzMDkyODA3LDEyMzY5MTg2LDE0NDA4NTg5LDE1NTYxNzUsMTA0MTA3MjVdLm1hcChhZSksT289WzM3NTA3NzcsNTM5NTYxOSw3MDQwNzE5LDEwMjY0Mjg2LDY1MTkwOTcsOTIxNjU5NCwxMTkxNTExNSwxMzU1NjYzNiw5MjAyOTkzLDEyNDI2ODA5LDE1MTg2NTE0LDE1MTkwOTMyLDg2NjYxNjksMTEzNTY0OTAsMTQwNDk2NDMsMTUxNzczNzIsODA3NzY4MywxMDgzNDMyNCwxMzUyODUwOSwxNDU4OTY1NF0ubWFwKGFlKSxEbz1bMzI0NDczMyw3MDU3MTEwLDEwNDA2NjI1LDEzMDMyNDMxLDE1MDk1MDUzLDE2NjE2NzY0LDE2NjI1MjU5LDE2NjM0MDE4LDMyNTMwNzYsNzY1MjQ3MCwxMDYwNzAwMywxMzEwMTUwNCw3Njk1MjgxLDEwMzk0MzEyLDEyMzY5MzcyLDE0MzQyODkxLDY1MTM1MDcsOTg2ODk1MCwxMjQzNDg3NywxNDI3NzA4MV0ubWFwKGFlKTtmdW5jdGlvbiBSbygpe3JldHVybiAwfXQuc2NhbGUucXVhbnRpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe3ZhciBpO2Z1bmN0aW9uIGEoKXt2YXIgZT0wLGE9bi5sZW5ndGg7Zm9yKGk9W107KytlPGE7KWlbZS0xXT10LnF1YW50aWxlKHIsZS9hKTtyZXR1cm4gb31mdW5jdGlvbiBvKGUpe2lmKCFpc05hTihlPStlKSlyZXR1cm4gblt0LmJpc2VjdChpLGUpXX1yZXR1cm4gby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dC5tYXAocCkuZmlsdGVyKGQpLnNvcnQoZiksYSgpKTpyfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSgpKTpufSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpfSxvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4odD1uLmluZGV4T2YodCkpPDA/W05hTixOYU5dOlt0PjA/aVt0LTFdOnJbMF0sdDxpLmxlbmd0aD9pW3RdOnJbci5sZW5ndGgtMV1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfSxhKCl9KFtdLFtdKX0sdC5zY2FsZS5xdWFudGl6ZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaSxhO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG5bTWF0aC5tYXgoMCxNYXRoLm1pbihhLE1hdGguZmxvb3IoaSoodC1lKSkpKV19ZnVuY3Rpb24gcygpe3JldHVybiBpPW4ubGVuZ3RoLyhyLWUpLGE9bi5sZW5ndGgtMSxvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0W3QubGVuZ3RoLTFdLHMoKSk6W2Uscl19LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVyblt0PSh0PW4uaW5kZXhPZih0KSk8MD9OYU46dC9pK2UsdCsxL2ldfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIsbil9LHMoKX0oMCwxLFswLDFdKX0sdC5zY2FsZS50aHJlc2hvbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe2Z1bmN0aW9uIGkoZSl7aWYoZTw9ZSlyZXR1cm4gblt0LmJpc2VjdChyLGUpXX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bi5pbmRleE9mKHQpLFtyW3QtMV0sclt0XV19LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9LGl9KFsuNV0sWzAsMV0pfSx0LnNjYWxlLmlkZW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4rdH1yZXR1cm4gci5pbnZlcnQ9cixyLmRvbWFpbj1yLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKHIpLHIpOmV9LHIudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIE1vKGUsdCl9LHIudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBBbyhlLHQscil9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUpfSxyfShbMCwxXSl9LHQuc3ZnPXt9LHQuc3ZnLmFyYz1mdW5jdGlvbigpe3ZhciB0PUJvLGU9Tm8scj1SbyxuPUZvLGk9am8sYT1VbyxvPVZvO2Z1bmN0aW9uIHMoKXt2YXIgcz1NYXRoLm1heCgwLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYz1NYXRoLm1heCgwLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1DdCxoPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLUN0LGY9TWF0aC5hYnMoaC11KSxwPXU+aD8wOjE7aWYoYzxzJiYoZD1jLGM9cyxzPWQpLGY+PUV0KXJldHVybiBsKGMscCkrKHM/bChzLDEtcCk6IiIpKyJaIjt2YXIgZCxnLG0sdix5LHgsYixfLHcsVCxrLE0sQT0wLFM9MCxFPVtdO2lmKCh2PSgrby5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDApLzIpJiYobT1uPT09Rm8/TWF0aC5zcXJ0KHMqcytjKmMpOituLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxwfHwoUyo9LTEpLGMmJihTPUR0KG0vYypNYXRoLnNpbih2KSkpLHMmJihBPUR0KG0vcypNYXRoLnNpbih2KSkpKSxjKXt5PWMqTWF0aC5jb3ModStTKSx4PWMqTWF0aC5zaW4odStTKSxiPWMqTWF0aC5jb3MoaC1TKSxfPWMqTWF0aC5zaW4oaC1TKTt2YXIgQz1NYXRoLmFicyhoLXUtMipTKTw9QXQ/MDoxO2lmKFMmJnFvKHkseCxiLF8pPT09cF5DKXt2YXIgTD0odStoKS8yO3k9YypNYXRoLmNvcyhMKSx4PWMqTWF0aC5zaW4oTCksYj1fPW51bGx9fWVsc2UgeT14PTA7aWYocyl7dz1zKk1hdGguY29zKGgtQSksVD1zKk1hdGguc2luKGgtQSksaz1zKk1hdGguY29zKHUrQSksTT1zKk1hdGguc2luKHUrQSk7dmFyIFA9TWF0aC5hYnModS1oKzIqQSk8PUF0PzA6MTtpZihBJiZxbyh3LFQsayxNKT09PTEtcF5QKXt2YXIgST0odStoKS8yO3c9cypNYXRoLmNvcyhJKSxUPXMqTWF0aC5zaW4oSSksaz1NPW51bGx9fWVsc2Ugdz1UPTA7aWYoZj5rdCYmKGQ9TWF0aC5taW4oTWF0aC5hYnMoYy1zKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpPi4wMDEpe2c9czxjXnA/MDoxO3ZhciB6PWQsTz1kO2lmKGY8QXQpe3ZhciBEPW51bGw9PWs/W3csVF06bnVsbD09Yj9beSx4XTpsaShbeSx4XSxbayxNXSxbYixfXSxbdyxUXSksUj15LURbMF0sRj14LURbMV0sQj1iLURbMF0sTj1fLURbMV0saj0xL01hdGguc2luKE1hdGguYWNvcygoUipCK0YqTikvKE1hdGguc3FydChSKlIrRipGKSpNYXRoLnNxcnQoQipCK04qTikpKS8yKSxVPU1hdGguc3FydChEWzBdKkRbMF0rRFsxXSpEWzFdKTtPPU1hdGgubWluKGQsKHMtVSkvKGotMSkpLHo9TWF0aC5taW4oZCwoYy1VKS8oaisxKSl9aWYobnVsbCE9Yil7dmFyIFY9SG8obnVsbD09az9bdyxUXTpbayxNXSxbeSx4XSxjLHoscCkscT1IbyhbYixfXSxbdyxUXSxjLHoscCk7ZD09PXo/RS5wdXNoKCJNIixWWzBdLCJBIix6LCIsIix6LCIgMCAwLCIsZywiICIsVlsxXSwiQSIsYywiLCIsYywiIDAgIiwxLXBecW8oVlsxXVswXSxWWzFdWzFdLHFbMV1bMF0scVsxXVsxXSksIiwiLHAsIiAiLHFbMV0sIkEiLHosIiwiLHosIiAwIDAsIixnLCIgIixxWzBdKTpFLnB1c2goIk0iLFZbMF0sIkEiLHosIiwiLHosIiAwIDEsIixnLCIgIixxWzBdKX1lbHNlIEUucHVzaCgiTSIseSwiLCIseCk7aWYobnVsbCE9ayl7dmFyIEg9SG8oW3kseF0sW2ssTV0scywtTyxwKSxHPUhvKFt3LFRdLG51bGw9PWI/W3kseF06W2IsX10scywtTyxwKTtkPT09Tz9FLnB1c2goIkwiLEdbMF0sIkEiLE8sIiwiLE8sIiAwIDAsIixnLCIgIixHWzFdLCJBIixzLCIsIixzLCIgMCAiLHBecW8oR1sxXVswXSxHWzFdWzFdLEhbMV1bMF0sSFsxXVsxXSksIiwiLDEtcCwiICIsSFsxXSwiQSIsTywiLCIsTywiIDAgMCwiLGcsIiAiLEhbMF0pOkUucHVzaCgiTCIsR1swXSwiQSIsTywiLCIsTywiIDAgMCwiLGcsIiAiLEhbMF0pfWVsc2UgRS5wdXNoKCJMIix3LCIsIixUKX1lbHNlIEUucHVzaCgiTSIseSwiLCIseCksbnVsbCE9YiYmRS5wdXNoKCJBIixjLCIsIixjLCIgMCAiLEMsIiwiLHAsIiAiLGIsIiwiLF8pLEUucHVzaCgiTCIsdywiLCIsVCksbnVsbCE9ayYmRS5wdXNoKCJBIixzLCIsIixzLCIgMCAiLFAsIiwiLDEtcCwiICIsaywiLCIsTSk7cmV0dXJuIEUucHVzaCgiWiIpLEUuam9pbigiIil9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiJNMCwiK3QrIkEiK3QrIiwiK3QrIiAwIDEsIitlKyIgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLCIrZSsiIDAsIit0fXJldHVybiBzLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWRlKGUpLHMpOnR9LHMub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZGUodCkscyk6ZX0scy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZGUodCkscyk6cn0scy5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD09Rm8/Rm86ZGUodCkscyk6bn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWRlKHQpLHMpOml9LHMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZGUodCkscyk6YX0scy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1kZSh0KSxzKTpvfSxzLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIHI9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLG49KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLUN0O3JldHVybltNYXRoLmNvcyhuKSpyLE1hdGguc2luKG4pKnJdfSxzfTt2YXIgRm89ImF1dG8iO2Z1bmN0aW9uIEJvKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIE5vKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIGpvKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gVW8odCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gVm8odCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gcW8odCxlLHIsbil7cmV0dXJuKHQtcikqZS0oZS1uKSp0PjA/MDoxfWZ1bmN0aW9uIEhvKHQsZSxyLG4saSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9KGk/bjotbikvTWF0aC5zcXJ0KGEqYStvKm8pLGw9cypvLGM9LXMqYSx1PXRbMF0rbCxoPXRbMV0rYyxmPWVbMF0rbCxwPWVbMV0rYyxkPSh1K2YpLzIsZz0oaCtwKS8yLG09Zi11LHY9cC1oLHk9bSptK3Yqdix4PXItbixiPXUqcC1mKmgsXz0odjwwPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLHgqeCp5LWIqYikpLHc9KGIqdi1tKl8pL3ksVD0oLWIqbS12Kl8pL3ksaz0oYip2K20qXykveSxNPSgtYiptK3YqXykveSxBPXctZCxTPVQtZyxFPWstZCxDPU0tZztyZXR1cm4gQSpBK1MqUz5FKkUrQypDJiYodz1rLFQ9TSksW1t3LWwsVC1jXSxbdypyL3gsVCpyL3hdXX1mdW5jdGlvbiBHbyh0KXt2YXIgZT1yaSxyPW5pLG49WXIsaT1XbyxhPWkua2V5LG89Ljc7ZnVuY3Rpb24gcyhhKXt2YXIgcyxsPVtdLGM9W10sdT0tMSxoPWEubGVuZ3RoLGY9ZGUoZSkscD1kZShyKTtmdW5jdGlvbiBkKCl7bC5wdXNoKCJNIixpKHQoYyksbykpfWZvcig7Kyt1PGg7KW4uY2FsbCh0aGlzLHM9YVt1XSx1KT9jLnB1c2goWytmLmNhbGwodGhpcyxzLHUpLCtwLmNhbGwodGhpcyxzLHUpXSk6Yy5sZW5ndGgmJihkKCksYz1bXSk7cmV0dXJuIGMubGVuZ3RoJiZkKCksbC5sZW5ndGg/bC5qb2luKCIiKTpudWxsfXJldHVybiBzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxzKTplfSxzLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxzKTpyfSxzLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKTpufSxzLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P2k9dDooaT1Zby5nZXQodCl8fFdvKS5rZXkscyk6YX0scy50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30sc310LnN2Zy5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIEdvKEwpfTt2YXIgWW89dC5tYXAoe2xpbmVhcjpXbywibGluZWFyLWNsb3NlZCI6Wm8sc3RlcDpmdW5jdGlvbih0KXt2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sIiwiLG5bMV1dO2Zvcig7KytlPHI7KWkucHVzaCgiSCIsKG5bMF0rKG49dFtlXSlbMF0pLzIsIlYiLG5bMV0pO3I+MSYmaS5wdXNoKCJIIixuWzBdKTtyZXR1cm4gaS5qb2luKCIiKX0sInN0ZXAtYmVmb3JlIjpYbywic3RlcC1hZnRlciI6Sm8sYmFzaXM6JG8sImJhc2lzLW9wZW4iOmZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIFdvKHQpO3ZhciBlLHI9W10sbj0tMSxpPXQubGVuZ3RoLGE9WzBdLG89WzBdO2Zvcig7KytuPDM7KWU9dFtuXSxhLnB1c2goZVswXSksby5wdXNoKGVbMV0pO3IucHVzaCh0cyhucyxhKSsiLCIrdHMobnMsbykpLC0tbjtmb3IoOysrbjxpOyllPXRbbl0sYS5zaGlmdCgpLGEucHVzaChlWzBdKSxvLnNoaWZ0KCksby5wdXNoKGVbMV0pLGlzKHIsYSxvKTtyZXR1cm4gci5qb2luKCIiKX0sImJhc2lzLWNsb3NlZCI6ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dC5sZW5ndGgsYT1pKzQsbz1bXSxzPVtdO2Zvcig7KytuPDQ7KXI9dFtuJWldLG8ucHVzaChyWzBdKSxzLnB1c2goclsxXSk7ZT1bdHMobnMsbyksIiwiLHRzKG5zLHMpXSwtLW47Zm9yKDsrK248YTspcj10W24laV0sby5zaGlmdCgpLG8ucHVzaChyWzBdKSxzLnNoaWZ0KCkscy5wdXNoKHJbMV0pLGlzKGUsbyxzKTtyZXR1cm4gZS5qb2luKCIiKX0sYnVuZGxlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgtMTtpZihyKWZvcih2YXIgbixpLGE9dFswXVswXSxvPXRbMF1bMV0scz10W3JdWzBdLWEsbD10W3JdWzFdLW8sYz0tMTsrK2M8PXI7KW49dFtjXSxpPWMvcixuWzBdPWUqblswXSsoMS1lKSooYStpKnMpLG5bMV09ZSpuWzFdKygxLWUpKihvK2kqbCk7cmV0dXJuICRvKHQpfSxjYXJkaW5hbDpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDwzP1dvKHQpOnRbMF0rS28odCxRbyh0LGUpKX0sImNhcmRpbmFsLW9wZW4iOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDQ/V28odCk6dFsxXStLbyh0LnNsaWNlKDEsLTEpLFFvKHQsZSkpfSwiY2FyZGluYWwtY2xvc2VkIjpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDwzP1pvKHQpOnRbMF0rS28oKHQucHVzaCh0WzBdKSx0KSxRbyhbdFt0Lmxlbmd0aC0yXV0uY29uY2F0KHQsW3RbMV1dKSxlKSl9LG1vbm90b25lOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aDwzP1dvKHQpOnRbMF0rS28odCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPVtdLG89ZnVuY3Rpb24odCl7dmFyIGU9MCxyPXQubGVuZ3RoLTEsbj1bXSxpPXRbMF0sYT10WzFdLG89blswXT1hcyhpLGEpO2Zvcig7KytlPHI7KW5bZV09KG8rKG89YXMoaT1hLGE9dFtlKzFdKSkpLzI7cmV0dXJuIG5bZV09byxufSh0KSxzPS0xLGw9dC5sZW5ndGgtMTtmb3IoOysrczxsOyllPWFzKHRbc10sdFtzKzFdKSx5KGUpPGt0P29bc109b1tzKzFdPTA6KHI9b1tzXS9lLG49b1tzKzFdL2UsKGk9cipyK24qbik+OSYmKGk9MyplL01hdGguc3FydChpKSxvW3NdPWkqcixvW3MrMV09aSpuKSk7cz0tMTtmb3IoOysrczw9bDspaT0odFtNYXRoLm1pbihsLHMrMSldWzBdLXRbTWF0aC5tYXgoMCxzLTEpXVswXSkvKDYqKDErb1tzXSpvW3NdKSksYS5wdXNoKFtpfHwwLG9bc10qaXx8MF0pO3JldHVybiBhfSh0KSl9fSk7ZnVuY3Rpb24gV28odCl7cmV0dXJuIHQubGVuZ3RoPjE/dC5qb2luKCJMIik6dCsiWiJ9ZnVuY3Rpb24gWm8odCl7cmV0dXJuIHQuam9pbigiTCIpKyJaIn1mdW5jdGlvbiBYbyh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspaS5wdXNoKCJWIiwobj10W2VdKVsxXSwiSCIsblswXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gSm8odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07KytlPHI7KWkucHVzaCgiSCIsKG49dFtlXSlbMF0sIlYiLG5bMV0pO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIEtvKHQsZSl7aWYoZS5sZW5ndGg8MXx8dC5sZW5ndGghPWUubGVuZ3RoJiZ0Lmxlbmd0aCE9ZS5sZW5ndGgrMilyZXR1cm4gV28odCk7dmFyIHI9dC5sZW5ndGghPWUubGVuZ3RoLG49IiIsaT10WzBdLGE9dFsxXSxvPWVbMF0scz1vLGw9MTtpZihyJiYobis9IlEiKyhhWzBdLTIqb1swXS8zKSsiLCIrKGFbMV0tMipvWzFdLzMpKyIsIithWzBdKyIsIithWzFdLGk9dFsxXSxsPTIpLGUubGVuZ3RoPjEpe3M9ZVsxXSxhPXRbbF0sbCsrLG4rPSJDIisoaVswXStvWzBdKSsiLCIrKGlbMV0rb1sxXSkrIiwiKyhhWzBdLXNbMF0pKyIsIisoYVsxXS1zWzFdKSsiLCIrYVswXSsiLCIrYVsxXTtmb3IodmFyIGM9MjtjPGUubGVuZ3RoO2MrKyxsKyspYT10W2xdLHM9ZVtjXSxuKz0iUyIrKGFbMF0tc1swXSkrIiwiKyhhWzFdLXNbMV0pKyIsIithWzBdKyIsIithWzFdfWlmKHIpe3ZhciB1PXRbbF07bis9IlEiKyhhWzBdKzIqc1swXS8zKSsiLCIrKGFbMV0rMipzWzFdLzMpKyIsIit1WzBdKyIsIit1WzFdfXJldHVybiBufWZ1bmN0aW9uIFFvKHQsZSl7Zm9yKHZhciByLG49W10saT0oMS1lKS8yLGE9dFswXSxvPXRbMV0scz0xLGw9dC5sZW5ndGg7KytzPGw7KXI9YSxhPW8sbz10W3NdLG4ucHVzaChbaSoob1swXS1yWzBdKSxpKihvWzFdLXJbMV0pXSk7cmV0dXJuIG59ZnVuY3Rpb24gJG8odCl7aWYodC5sZW5ndGg8MylyZXR1cm4gV28odCk7dmFyIGU9MSxyPXQubGVuZ3RoLG49dFswXSxpPW5bMF0sYT1uWzFdLG89W2ksaSxpLChuPXRbMV0pWzBdXSxzPVthLGEsYSxuWzFdXSxsPVtpLCIsIixhLCJMIix0cyhucyxvKSwiLCIsdHMobnMscyldO2Zvcih0LnB1c2godFtyLTFdKTsrK2U8PXI7KW49dFtlXSxvLnNoaWZ0KCksby5wdXNoKG5bMF0pLHMuc2hpZnQoKSxzLnB1c2goblsxXSksaXMobCxvLHMpO3JldHVybiB0LnBvcCgpLGwucHVzaCgiTCIsbiksbC5qb2luKCIiKX1mdW5jdGlvbiB0cyh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119WW8uZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtlLmtleT10LGUuY2xvc2VkPS8tY2xvc2VkJC8udGVzdCh0KX0pKTt2YXIgZXM9WzAsMi8zLDEvMywwXSxycz1bMCwxLzMsMi8zLDBdLG5zPVswLDEvNiwyLzMsMS82XTtmdW5jdGlvbiBpcyh0LGUscil7dC5wdXNoKCJDIix0cyhlcyxlKSwiLCIsdHMoZXMsciksIiwiLHRzKHJzLGUpLCIsIix0cyhycyxyKSwiLCIsdHMobnMsZSksIiwiLHRzKG5zLHIpKX1mdW5jdGlvbiBhcyh0LGUpe3JldHVybihlWzFdLXRbMV0pLyhlWzBdLXRbMF0pfWZ1bmN0aW9uIG9zKHQpe2Zvcih2YXIgZSxyLG4saT0tMSxhPXQubGVuZ3RoOysraTxhOylyPShlPXRbaV0pWzBdLG49ZVsxXS1DdCxlWzBdPXIqTWF0aC5jb3MobiksZVsxXT1yKk1hdGguc2luKG4pO3JldHVybiB0fWZ1bmN0aW9uIHNzKHQpe3ZhciBlPXJpLHI9cmksbj0wLGk9bmksYT1ZcixvPVdvLHM9by5rZXksbD1vLGM9IkwiLHU9Ljc7ZnVuY3Rpb24gaChzKXt2YXIgaCxmLHAsZD1bXSxnPVtdLG09W10sdj0tMSx5PXMubGVuZ3RoLHg9ZGUoZSksYj1kZShuKSxfPWU9PT1yP2Z1bmN0aW9uKCl7cmV0dXJuIGZ9OmRlKHIpLHc9bj09PWk/ZnVuY3Rpb24oKXtyZXR1cm4gcH06ZGUoaSk7ZnVuY3Rpb24gVCgpe2QucHVzaCgiTSIsbyh0KG0pLHUpLGMsbCh0KGcucmV2ZXJzZSgpKSx1KSwiWiIpfWZvcig7Kyt2PHk7KWEuY2FsbCh0aGlzLGg9c1t2XSx2KT8oZy5wdXNoKFtmPSt4LmNhbGwodGhpcyxoLHYpLHA9K2IuY2FsbCh0aGlzLGgsdildKSxtLnB1c2goWytfLmNhbGwodGhpcyxoLHYpLCt3LmNhbGwodGhpcyxoLHYpXSkpOmcubGVuZ3RoJiYoVCgpLGc9W10sbT1bXSk7cmV0dXJuIGcubGVuZ3RoJiZUKCksZC5sZW5ndGg/ZC5qb2luKCIiKTpudWxsfXJldHVybiBoLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cj10LGgpOnJ9LGgueDA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxoKTplfSxoLngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaCk6cn0saC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWk9dCxoKTppfSxoLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0saC55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGgpOml9LGguZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGgpOmF9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/bz10OihvPVlvLmdldCh0KXx8V28pLmtleSxsPW8ucmV2ZXJzZXx8byxjPW8uY2xvc2VkPyJNIjoiTCIsaCk6c30saC50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsaCk6dX0saH1mdW5jdGlvbiBscyh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gY3ModCl7cmV0dXJuW3QueCx0LnldfWZ1bmN0aW9uIHVzKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZVswXSxuPWVbMV0tQ3Q7cmV0dXJuW3IqTWF0aC5jb3MobikscipNYXRoLnNpbihuKV19fWZ1bmN0aW9uIGhzKCl7cmV0dXJuIDY0fWZ1bmN0aW9uIGZzKCl7cmV0dXJuImNpcmNsZSJ9ZnVuY3Rpb24gcHModCl7dmFyIGU9TWF0aC5zcXJ0KHQvQXQpO3JldHVybiJNMCwiK2UrIkEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrLWUrIkEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrZSsiWiJ9dC5zdmcubGluZS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1Hbyhvcyk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuYW5nbGU9dC55LGRlbGV0ZSB0LnksdH0sWG8ucmV2ZXJzZT1KbyxKby5yZXZlcnNlPVhvLHQuc3ZnLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gc3MoTCl9LHQuc3ZnLmFyZWEucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9c3Mob3MpO3JldHVybiB0LnJhZGl1cz10LngsZGVsZXRlIHQueCx0LmlubmVyUmFkaXVzPXQueDAsZGVsZXRlIHQueDAsdC5vdXRlclJhZGl1cz10LngxLGRlbGV0ZSB0LngxLHQuYW5nbGU9dC55LGRlbGV0ZSB0LnksdC5zdGFydEFuZ2xlPXQueTAsZGVsZXRlIHQueTAsdC5lbmRBbmdsZT10LnkxLGRlbGV0ZSB0LnkxLHR9LHQuc3ZnLmNob3JkPWZ1bmN0aW9uKCl7dmFyIHQ9Vm4sZT1xbixyPWxzLG49am8saT1VbztmdW5jdGlvbiBhKHIsbil7dmFyIGksYSxjPW8odGhpcyx0LHIsbiksdT1vKHRoaXMsZSxyLG4pO3JldHVybiJNIitjLnAwK3MoYy5yLGMucDEsYy5hMS1jLmEwKSsoYT11LCgoaT1jKS5hMD09YS5hMCYmaS5hMT09YS5hMT9sKGMucixjLnAxLGMucixjLnAwKTpsKGMucixjLnAxLHUucix1LnAwKStzKHUucix1LnAxLHUuYTEtdS5hMCkrbCh1LnIsdS5wMSxjLnIsYy5wMCkpKyJaIil9ZnVuY3Rpb24gbyh0LGUsYSxvKXt2YXIgcz1lLmNhbGwodCxhLG8pLGw9ci5jYWxsKHQscyxvKSxjPW4uY2FsbCh0LHMsbyktQ3QsdT1pLmNhbGwodCxzLG8pLUN0O3JldHVybntyOmwsYTA6YyxhMTp1LHAwOltsKk1hdGguY29zKGMpLGwqTWF0aC5zaW4oYyldLHAxOltsKk1hdGguY29zKHUpLGwqTWF0aC5zaW4odSldfX1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4iQSIrdCsiLCIrdCsiIDAgIisgKyhyPkF0KSsiLDEgIitlfWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuIlEgMCwwICIrbn1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZGUodCksYSk6cn0sYS5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZGUoZSksYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZGUodCksYSk6ZX0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWRlKHQpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZGUodCksYSk6aX0sYX0sdC5zdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPXFuLHI9Y3M7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPXQuY2FsbCh0aGlzLG4saSksbz1lLmNhbGwodGhpcyxuLGkpLHM9KGEueStvLnkpLzIsbD1bYSx7eDphLngseTpzfSx7eDpvLngseTpzfSxvXTtyZXR1cm4iTSIrKGw9bC5tYXAocikpWzBdKyJDIitsWzFdKyIgIitsWzJdKyIgIitsWzNdfXJldHVybiBuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1kZShlKSxuKTp0fSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kZSh0KSxuKTplfSxuLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0LnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgZT10LnN2Zy5kaWFnb25hbCgpLHI9Y3Msbj1lLnByb2plY3Rpb247cmV0dXJuIGUucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHVzKHI9dCkpOnJ9LGV9LHQuc3ZnLnN5bWJvbD1mdW5jdGlvbigpe3ZhciB0PWZzLGU9aHM7ZnVuY3Rpb24gcihyLG4pe3JldHVybihkcy5nZXQodC5jYWxsKHRoaXMscixuKSl8fHBzKShlLmNhbGwodGhpcyxyLG4pKX1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWRlKGUpLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kZSh0KSxyKTplfSxyfTt2YXIgZHM9dC5tYXAoe2NpcmNsZTpwcyxjcm9zczpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC81KS8yO3JldHVybiJNIistMyplKyIsIistZSsiSCIrLWUrIlYiKy0zKmUrIkgiK2UrIlYiKy1lKyJIIiszKmUrIlYiK2UrIkgiK2UrIlYiKzMqZSsiSCIrLWUrIlYiK2UrIkgiKy0zKmUrIloifSxkaWFtb25kOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LygyKm1zKSkscj1lKm1zO3JldHVybiJNMCwiKy1lKyJMIityKyIsMCAwLCIrZSsiICIrLXIrIiwwWiJ9LHNxdWFyZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodCkvMjtyZXR1cm4iTSIrLWUrIiwiKy1lKyJMIitlKyIsIistZSsiICIrZSsiLCIrZSsiICIrLWUrIiwiK2UrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvZ3MpLHI9ZSpncy8yO3JldHVybiJNMCwiK3IrIkwiK2UrIiwiKy1yKyIgIistZSsiLCIrLXIrIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L2dzKSxyPWUqZ3MvMjtyZXR1cm4iTTAsIistcisiTCIrZSsiLCIrcisiICIrLWUrIiwiK3IrIloifX0pO3Quc3ZnLnN5bWJvbFR5cGVzPWRzLmtleXMoKTt2YXIgZ3M9TWF0aC5zcXJ0KDMpLG1zPU1hdGgudGFuKDMwKkx0KTtZLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj1ic3x8KytUcyxpPUFzKHQpLGE9W10sbz1fc3x8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOmNhLGRlbGF5OjAsZHVyYXRpb246MjUwfSxzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXthLnB1c2goZT1bXSk7Zm9yKHZhciBjPXRoaXNbc10sdT0tMSxoPWMubGVuZ3RoOysrdTxoOykocj1jW3VdKSYmU3Mocix1LGksbixvKSxlLnB1c2gocil9cmV0dXJuIHhzKGEsaSxuKX0sWS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChudWxsPT10P3ZzOnlzKEFzKHQpKSl9O3ZhciB2cz15cyhBcygpKTtmdW5jdGlvbiB5cyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZSxyLG47KGU9dGhpc1t0XSkmJihuPWVbcj1lLmFjdGl2ZV0pJiYobi50aW1lci5jPW51bGwsbi50aW1lci50PU5hTiwtLWUuY291bnQ/ZGVsZXRlIGVbcl06ZGVsZXRlIHRoaXNbdF0sZS5hY3RpdmUrPS41LG4uZXZlbnQmJm4uZXZlbnQuaW50ZXJydXB0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLG4uaW5kZXgpKX19ZnVuY3Rpb24geHModCxlLHIpe3JldHVybiBVKHQsd3MpLHQubmFtZXNwYWNlPWUsdC5pZD1yLHR9dmFyIGJzLF9zLHdzPVtdLFRzPTA7ZnVuY3Rpb24ga3ModCxlLHIsbil7dmFyIGk9dC5pZCxhPXQubmFtZXNwYWNlO3JldHVybiB1dCh0LCJmdW5jdGlvbiI9PXR5cGVvZiByP2Z1bmN0aW9uKHQsbyxzKXt0W2FdW2ldLnR3ZWVuLnNldChlLG4oci5jYWxsKHQsdC5fX2RhdGFfXyxvLHMpKSl9OihyPW4ociksZnVuY3Rpb24odCl7dFthXVtpXS50d2Vlbi5zZXQoZSxyKX0pKX1mdW5jdGlvbiBNcyh0KXtyZXR1cm4gbnVsbD09dCYmKHQ9IiIpLGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBBcyh0KXtyZXR1cm4gbnVsbD09dD8iX190cmFuc2l0aW9uX18iOiJfX3RyYW5zaXRpb25fIit0KyJfXyJ9ZnVuY3Rpb24gU3ModCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjLHU9dFtyXXx8KHRbcl09e2FjdGl2ZTowLGNvdW50OjB9KSxoPXVbbl07ZnVuY3Rpb24gZihyKXt2YXIgaT11LmFjdGl2ZSxmPXVbaV07Zm9yKHZhciBkIGluIGYmJihmLnRpbWVyLmM9bnVsbCxmLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtpXSxmLmV2ZW50JiZmLmV2ZW50LmludGVycnVwdC5jYWxsKHQsdC5fX2RhdGFfXyxmLmluZGV4KSksdSlpZigrZDxuKXt2YXIgZz11W2RdO2cudGltZXIuYz1udWxsLGcudGltZXIudD1OYU4sLS11LmNvdW50LGRlbGV0ZSB1W2RdfW8uYz1wLHdlKChmdW5jdGlvbigpe3JldHVybiBvLmMmJnAocnx8MSkmJihvLmM9bnVsbCxvLnQ9TmFOKSwxfSksMCxhKSx1LmFjdGl2ZT1uLGguZXZlbnQmJmguZXZlbnQuc3RhcnQuY2FsbCh0LHQuX19kYXRhX18sZSksYz1bXSxoLnR3ZWVuLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7KG49bi5jYWxsKHQsdC5fX2RhdGFfXyxlKSkmJmMucHVzaChuKX0pKSxsPWguZWFzZSxzPWguZHVyYXRpb259ZnVuY3Rpb24gcChpKXtmb3IodmFyIGE9aS9zLG89bChhKSxmPWMubGVuZ3RoO2Y+MDspY1stLWZdLmNhbGwodCxvKTtpZihhPj0xKXJldHVybiBoLmV2ZW50JiZoLmV2ZW50LmVuZC5jYWxsKHQsdC5fX2RhdGFfXyxlKSwtLXUuY291bnQ/ZGVsZXRlIHVbbl06ZGVsZXRlIHRbcl0sMX1ofHwoYT1pLnRpbWUsbz13ZSgoZnVuY3Rpb24odCl7dmFyIGU9aC5kZWxheTtpZihvLnQ9ZSthLGU8PXQpcmV0dXJuIGYodC1lKTtvLmM9Zn0pLDAsYSksaD11W25dPXt0d2VlbjpuZXcgXyx0aW1lOmEsdGltZXI6byxkZWxheTppLmRlbGF5LGR1cmF0aW9uOmkuZHVyYXRpb24sZWFzZTppLmVhc2UsaW5kZXg6ZX0saT1udWxsLCsrdS5jb3VudCl9d3MuY2FsbD1ZLmNhbGwsd3MuZW1wdHk9WS5lbXB0eSx3cy5ub2RlPVkubm9kZSx3cy5zaXplPVkuc2l6ZSx0LnRyYW5zaXRpb249ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmZS50cmFuc2l0aW9uP2JzP2UudHJhbnNpdGlvbihyKTplOnQuc2VsZWN0aW9uKCkudHJhbnNpdGlvbihlKX0sdC50cmFuc2l0aW9uLnByb3RvdHlwZT13cyx3cy5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dGhpcy5pZCxhPXRoaXMubmFtZXNwYWNlLG89W107dD1XKHQpO2Zvcih2YXIgcz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7by5wdXNoKGU9W10pO2Zvcih2YXIgYz10aGlzW3NdLHU9LTEsaD1jLmxlbmd0aDsrK3U8aDspKG49Y1t1XSkmJihyPXQuY2FsbChuLG4uX19kYXRhX18sdSxzKSk/KCJfX2RhdGFfXyJpbiBuJiYoci5fX2RhdGFfXz1uLl9fZGF0YV9fKSxTcyhyLHUsYSxpLG5bYV1baV0pLGUucHVzaChyKSk6ZS5wdXNoKG51bGwpfXJldHVybiB4cyhvLGEsaSl9LHdzLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dGhpcy5pZCxzPXRoaXMubmFtZXNwYWNlLGw9W107dD1aKHQpO2Zvcih2YXIgYz0tMSx1PXRoaXMubGVuZ3RoOysrYzx1Oylmb3IodmFyIGg9dGhpc1tjXSxmPS0xLHA9aC5sZW5ndGg7KytmPHA7KWlmKG49aFtmXSl7YT1uW3NdW29dLHI9dC5jYWxsKG4sbi5fX2RhdGFfXyxmLGMpLGwucHVzaChlPVtdKTtmb3IodmFyIGQ9LTEsZz1yLmxlbmd0aDsrK2Q8ZzspKGk9cltkXSkmJlNzKGksZCxzLG8sYSksZS5wdXNoKGkpfXJldHVybiB4cyhsLHMsbyl9LHdzLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG49W107ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWx0KHQpKTtmb3IodmFyIGk9MCxhPXRoaXMubGVuZ3RoO2k8YTtpKyspe24ucHVzaChlPVtdKTtmb3IodmFyIG8scz0wLGw9KG89dGhpc1tpXSkubGVuZ3RoO3M8bDtzKyspKHI9b1tzXSkmJnQuY2FsbChyLHIuX19kYXRhX18scyxpKSYmZS5wdXNoKHIpfXJldHVybiB4cyhuLHRoaXMubmFtZXNwYWNlLHRoaXMuaWQpfSx3cy50d2Vlbj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXMubm9kZSgpW25dW3JdLnR3ZWVuLmdldCh0KTp1dCh0aGlzLG51bGw9PWU/ZnVuY3Rpb24oZSl7ZVtuXVtyXS50d2Vlbi5yZW1vdmUodCl9OmZ1bmN0aW9uKGkpe2lbbl1bcl0udHdlZW4uc2V0KHQsZSl9KX0sd3MuYXR0cj1mdW5jdGlvbihlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHIgaW4gZSl0aGlzLmF0dHIocixlW3JdKTtyZXR1cm4gdGhpc312YXIgbj0idHJhbnNmb3JtIj09ZT9iYTokaSxpPXQubnMucXVhbGlmeShlKTtmdW5jdGlvbiBhKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSl9ZnVuY3Rpb24gbygpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKX1mdW5jdGlvbiBzKHQpe3JldHVybiBudWxsPT10P2E6KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmdldEF0dHJpYnV0ZShpKTtyZXR1cm4gciE9PXQmJihlPW4ocix0KSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShpLGUodCkpfSl9KX1mdW5jdGlvbiBsKHQpe3JldHVybiBudWxsPT10P286KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmdldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCk7cmV0dXJuIHIhPT10JiYoZT1uKHIsdCksZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwsZSh0KSl9KX0pfXJldHVybiBrcyh0aGlzLCJhdHRyLiIrZSxyLGkubG9jYWw/bDpzKX0sd3MuYXR0clR3ZWVuPWZ1bmN0aW9uKGUscil7dmFyIG49dC5ucy5xdWFsaWZ5KGUpO3JldHVybiB0aGlzLnR3ZWVuKCJhdHRyLiIrZSxuLmxvY2FsP2Z1bmN0aW9uKHQsZSl7dmFyIGk9ci5jYWxsKHRoaXMsdCxlLHRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk7cmV0dXJuIGkmJmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGkodCkpfX06ZnVuY3Rpb24odCxlKXt2YXIgaT1yLmNhbGwodGhpcyx0LGUsdGhpcy5nZXRBdHRyaWJ1dGUobikpO3JldHVybiBpJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShuLGkodCkpfX0pfSx3cy5zdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0iIiksdCl0aGlzLnN0eWxlKHIsdFtyXSxlKTtyZXR1cm4gdGhpc31yPSIifWZ1bmN0aW9uIGkoKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIG51bGw9PWU/aTooZSs9IiIsZnVuY3Rpb24oKXt2YXIgbixpPW8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIGkhPT1lJiYobj0kaShpLGUpLGZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuKGUpLHIpfSl9KX1yZXR1cm4ga3ModGhpcywic3R5bGUuIit0LGUsYSl9LHdzLnN0eWxlVHdlZW49ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4obixpKXt2YXIgYT1lLmNhbGwodGhpcyxuLGksbyh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KSk7cmV0dXJuIGEmJmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxhKGUpLHIpfX1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj0iIiksdGhpcy50d2Vlbigic3R5bGUuIit0LG4pfSx3cy50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBrcyh0aGlzLCJ0ZXh0Iix0LE1zKX0sd3MucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRpb24iLChmdW5jdGlvbigpe3ZhciBlO3RoaXNbdF0uY291bnQ8MiYmKGU9dGhpcy5wYXJlbnROb2RlKSYmZS5yZW1vdmVDaGlsZCh0aGlzKX0pKX0sd3MuZWFzZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtuXVtyXS5lYXNlOigiZnVuY3Rpb24iIT10eXBlb2YgZSYmKGU9dC5lYXNlLmFwcGx5KHQsYXJndW1lbnRzKSksdXQodGhpcywoZnVuY3Rpb24odCl7dFtuXVtyXS5lYXNlPWV9KSkpfSx3cy5kZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kZWxheTp1dCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4saSxhKXtuW3JdW2VdLmRlbGF5PSt0LmNhbGwobixuLl9fZGF0YV9fLGksYSl9Oih0PSt0LGZ1bmN0aW9uKG4pe25bcl1bZV0uZGVsYXk9dH0pKX0sd3MuZHVyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZHVyYXRpb246dXQodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbihuLGksYSl7bltyXVtlXS5kdXJhdGlvbj1NYXRoLm1heCgxLHQuY2FsbChuLG4uX19kYXRhX18saSxhKSl9Oih0PU1hdGgubWF4KDEsdCksZnVuY3Rpb24obil7bltyXVtlXS5kdXJhdGlvbj10fSkpfSx3cy5lYWNoPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5pZCxpPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9X3Msbz1iczt0cnl7YnM9bix1dCh0aGlzLChmdW5jdGlvbih0LHIsYSl7X3M9dFtpXVtuXSxlLmNhbGwodCx0Ll9fZGF0YV9fLHIsYSl9KSl9ZmluYWxseXtfcz1hLGJzPW99fWVsc2UgdXQodGhpcywoZnVuY3Rpb24oYSl7dmFyIG89YVtpXVtuXTsoby5ldmVudHx8KG8uZXZlbnQ9dC5kaXNwYXRjaCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSkpLm9uKGUscil9KSk7cmV0dXJuIHRoaXN9LHdzLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyLG49dGhpcy5pZCxpPSsrVHMsYT10aGlzLm5hbWVzcGFjZSxvPVtdLHM9MCxsPXRoaXMubGVuZ3RoO3M8bDtzKyspe28ucHVzaCh0PVtdKTtmb3IodmFyIGMsdT0wLGg9KGM9dGhpc1tzXSkubGVuZ3RoO3U8aDt1KyspKGU9Y1t1XSkmJlNzKGUsdSxhLGkse3RpbWU6KHI9ZVthXVtuXSkudGltZSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5K3IuZHVyYXRpb24sZHVyYXRpb246ci5kdXJhdGlvbn0pLHQucHVzaChlKX1yZXR1cm4geHMobyxhLGkpfSx0LnN2Zy5heGlzPWZ1bmN0aW9uKCl7dmFyIGUscj10LnNjYWxlLmxpbmVhcigpLGk9RXMsYT02LG89NixzPTMsbD1bMTBdLGM9bnVsbDtmdW5jdGlvbiB1KG4pe24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbix1PXQuc2VsZWN0KHRoaXMpLGg9dGhpcy5fX2NoYXJ0X198fHIsZj10aGlzLl9fY2hhcnRfXz1yLmNvcHkoKSxwPW51bGw9PWM/Zi50aWNrcz9mLnRpY2tzLmFwcGx5KGYsbCk6Zi5kb21haW4oKTpjLGQ9bnVsbD09ZT9mLnRpY2tGb3JtYXQ/Zi50aWNrRm9ybWF0LmFwcGx5KGYsbCk6TDplLGc9dS5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLGYpLG09Zy5lbnRlcigpLmluc2VydCgiZyIsIi5kb21haW4iKS5hdHRyKCJjbGFzcyIsInRpY2siKS5zdHlsZSgib3BhY2l0eSIsa3QpLHY9dC50cmFuc2l0aW9uKGcuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsa3QpLnJlbW92ZSgpLHk9dC50cmFuc2l0aW9uKGcub3JkZXIoKSkuc3R5bGUoIm9wYWNpdHkiLDEpLHg9TWF0aC5tYXgoYSwwKStzLGI9bW8oZiksXz11LnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoWzBdKSx3PShfLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJkb21haW4iKSx0LnRyYW5zaXRpb24oXykpO20uYXBwZW5kKCJsaW5lIiksbS5hcHBlbmQoInRleHQiKTt2YXIgVCxrLE0sQSxTPW0uc2VsZWN0KCJsaW5lIiksRT15LnNlbGVjdCgibGluZSIpLEM9Zy5zZWxlY3QoInRleHQiKS50ZXh0KGQpLFA9bS5zZWxlY3QoInRleHQiKSxJPXkuc2VsZWN0KCJ0ZXh0Iiksej0idG9wIj09PWl8fCJsZWZ0Ij09PWk/LTE6MTtpZigiYm90dG9tIj09PWl8fCJ0b3AiPT09aT8obj1McyxUPSJ4IixNPSJ5IixrPSJ4MiIsQT0ieTIiLEMuYXR0cigiZHkiLHo8MD8iMGVtIjoiLjcxZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSx3LmF0dHIoImQiLCJNIitiWzBdKyIsIit6Km8rIlYwSCIrYlsxXSsiViIreipvKSk6KG49UHMsVD0ieSIsTT0ieCIsaz0ieTIiLEE9IngyIixDLmF0dHIoImR5IiwiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLHo8MD8iZW5kIjoic3RhcnQiKSx3LmF0dHIoImQiLCJNIit6Km8rIiwiK2JbMF0rIkgwViIrYlsxXSsiSCIreipvKSksUy5hdHRyKEEseiphKSxQLmF0dHIoTSx6KngpLEUuYXR0cihrLDApLmF0dHIoQSx6KmEpLEkuYXR0cihULDApLmF0dHIoTSx6KngpLGYucmFuZ2VCYW5kKXt2YXIgTz1mLEQ9Ty5yYW5nZUJhbmQoKS8yO2g9Zj1mdW5jdGlvbih0KXtyZXR1cm4gTyh0KStEfX1lbHNlIGgucmFuZ2VCYW5kP2g9Zjp2LmNhbGwobixmLGgpO20uY2FsbChuLGgsZikseS5jYWxsKG4sZixmKX0pKX1yZXR1cm4gdS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHUpOnJ9LHUub3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQgaW4gQ3M/dCsiIjpFcyx1KTppfSx1LnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bihhcmd1bWVudHMpLHUpOmx9LHUudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHUpOmN9LHUudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHUpOmV9LHUudGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gZT8oYT0rdCxvPSthcmd1bWVudHNbZS0xXSx1KTphfSx1LmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsdSk6YX0sdS5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LHUpOm99LHUudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdSk6c30sdS50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnV9LHV9O3ZhciBFcz0iYm90dG9tIixDcz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2Z1bmN0aW9uIExzKHQsZSxyKXt0LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuInRyYW5zbGF0ZSgiKyhpc0Zpbml0ZShuKT9uOnIodCkpKyIsMCkifSkpfWZ1bmN0aW9uIFBzKHQsZSxyKXt0LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGlzRmluaXRlKG4pP246cih0KSkrIikifSkpfXQuc3ZnLmJydXNoPWZ1bmN0aW9uKCl7dmFyIGUscixuPU4oZiwiYnJ1c2hzdGFydCIsImJydXNoIiwiYnJ1c2hlbmQiKSxpPW51bGwsYT1udWxsLHM9WzAsMF0sbD1bMCwwXSxjPSEwLHU9ITAsaD16c1swXTtmdW5jdGlvbiBmKGUpe2UuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT10LnNlbGVjdCh0aGlzKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2giLG0pLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixtKSxyPWUuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5zdHlsZSgiY3Vyc29yIiwiY3Jvc3NoYWlyIiksZS5zZWxlY3RBbGwoIi5leHRlbnQiKS5kYXRhKFswXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImV4dGVudCIpLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIik7dmFyIG49ZS5zZWxlY3RBbGwoIi5yZXNpemUiKS5kYXRhKGgsTCk7bi5leGl0KCkucmVtb3ZlKCksbi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInJlc2l6ZSAiK3R9KSkuc3R5bGUoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBJc1t0XX0pKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuL1tld10kLy50ZXN0KHQpPy0zOm51bGx9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybi9eW25zXS8udGVzdCh0KT8tMzpudWxsfSkpLmF0dHIoIndpZHRoIiw2KS5hdHRyKCJoZWlnaHQiLDYpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIiksbi5zdHlsZSgiZGlzcGxheSIsZi5lbXB0eSgpPyJub25lIjpudWxsKTt2YXIgbyxzPXQudHJhbnNpdGlvbihlKSxsPXQudHJhbnNpdGlvbihyKTtpJiYobz1tbyhpKSxsLmF0dHIoIngiLG9bMF0pLmF0dHIoIndpZHRoIixvWzFdLW9bMF0pLGQocykpLGEmJihvPW1vKGEpLGwuYXR0cigieSIsb1swXSkuYXR0cigiaGVpZ2h0IixvWzFdLW9bMF0pLGcocykpLHAocyl9KSl9ZnVuY3Rpb24gcCh0KXt0LnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitzWysvZSQvLnRlc3QodCldKyIsIitsWysvXnMvLnRlc3QodCldKyIpIn0pKX1mdW5jdGlvbiBkKHQpe3Quc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieCIsc1swXSksdC5zZWxlY3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0IikuYXR0cigid2lkdGgiLHNbMV0tc1swXSl9ZnVuY3Rpb24gZyh0KXt0LnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoInkiLGxbMF0pLHQuc2VsZWN0QWxsKCIuZXh0ZW50LC5lPnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsbFsxXS1sWzBdKX1mdW5jdGlvbiBtKCl7dmFyIGgsbSx2PXRoaXMseT10LnNlbGVjdCh0LmV2ZW50LnRhcmdldCkseD1uLm9mKHYsYXJndW1lbnRzKSxiPXQuc2VsZWN0KHYpLF89eS5kYXR1bSgpLHc9IS9eKG58cykkLy50ZXN0KF8pJiZpLFQ9IS9eKGV8dykkLy50ZXN0KF8pJiZhLGs9eS5jbGFzc2VkKCJleHRlbnQiKSxNPWJ0KHYpLEE9dC5tb3VzZSh2KSxTPXQuc2VsZWN0KG8odikpLm9uKCJrZXlkb3duLmJydXNoIixMKS5vbigia2V5dXAuYnJ1c2giLFApO2lmKHQuZXZlbnQuY2hhbmdlZFRvdWNoZXM/Uy5vbigidG91Y2htb3ZlLmJydXNoIixJKS5vbigidG91Y2hlbmQuYnJ1c2giLE8pOlMub24oIm1vdXNlbW92ZS5icnVzaCIsSSkub24oIm1vdXNldXAuYnJ1c2giLE8pLGIuaW50ZXJydXB0KCkuc2VsZWN0QWxsKCIqIikuaW50ZXJydXB0KCksaylBWzBdPXNbMF0tQVswXSxBWzFdPWxbMF0tQVsxXTtlbHNlIGlmKF8pe3ZhciBFPSsvdyQvLnRlc3QoXyksQz0rL15uLy50ZXN0KF8pO209W3NbMS1FXS1BWzBdLGxbMS1DXS1BWzFdXSxBWzBdPXNbRV0sQVsxXT1sW0NdfWVsc2UgdC5ldmVudC5hbHRLZXkmJihoPUEuc2xpY2UoKSk7ZnVuY3Rpb24gTCgpezMyPT10LmV2ZW50LmtleUNvZGUmJihrfHwoaD1udWxsLEFbMF0tPXNbMV0sQVsxXS09bFsxXSxrPTIpLEYoKSl9ZnVuY3Rpb24gUCgpezMyPT10LmV2ZW50LmtleUNvZGUmJjI9PWsmJihBWzBdKz1zWzFdLEFbMV0rPWxbMV0saz0wLEYoKSl9ZnVuY3Rpb24gSSgpe3ZhciBlPXQubW91c2Uodikscj0hMTttJiYoZVswXSs9bVswXSxlWzFdKz1tWzFdKSxrfHwodC5ldmVudC5hbHRLZXk/KGh8fChoPVsoc1swXStzWzFdKS8yLChsWzBdK2xbMV0pLzJdKSxBWzBdPXNbKyhlWzBdPGhbMF0pXSxBWzFdPWxbKyhlWzFdPGhbMV0pXSk6aD1udWxsKSx3JiZ6KGUsaSwwKSYmKGQoYikscj0hMCksVCYmeihlLGEsMSkmJihnKGIpLHI9ITApLHImJihwKGIpLHgoe3R5cGU6ImJydXNoIixtb2RlOms/Im1vdmUiOiJyZXNpemUifSkpfWZ1bmN0aW9uIHoodCxuLGkpe3ZhciBhLG8sZj1tbyhuKSxwPWZbMF0sZD1mWzFdLGc9QVtpXSxtPWk/bDpzLHY9bVsxXS1tWzBdO2lmKGsmJihwLT1nLGQtPXYrZyksYT0oaT91OmMpP01hdGgubWF4KHAsTWF0aC5taW4oZCx0W2ldKSk6dFtpXSxrP289KGErPWcpK3Y6KGgmJihnPU1hdGgubWF4KHAsTWF0aC5taW4oZCwyKmhbaV0tYSkpKSxnPGE/KG89YSxhPWcpOm89ZyksbVswXSE9YXx8bVsxXSE9bylyZXR1cm4gaT9yPW51bGw6ZT1udWxsLG1bMF09YSxtWzFdPW8sITB9ZnVuY3Rpb24gTygpe0koKSxiLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixmLmVtcHR5KCk/Im5vbmUiOm51bGwpLHQuc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsbnVsbCksUy5vbigibW91c2Vtb3ZlLmJydXNoIixudWxsKS5vbigibW91c2V1cC5icnVzaCIsbnVsbCkub24oInRvdWNobW92ZS5icnVzaCIsbnVsbCkub24oInRvdWNoZW5kLmJydXNoIixudWxsKS5vbigia2V5ZG93bi5icnVzaCIsbnVsbCkub24oImtleXVwLmJydXNoIixudWxsKSxNKCkseCh7dHlwZToiYnJ1c2hlbmQifSl9Yi5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLHQuc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIseS5zdHlsZSgiY3Vyc29yIikpLHgoe3R5cGU6ImJydXNoc3RhcnQifSksSSgpfXJldHVybiBmLmV2ZW50PWZ1bmN0aW9uKGkpe2kuZWFjaCgoZnVuY3Rpb24oKXt2YXIgaT1uLm9mKHRoaXMsYXJndW1lbnRzKSxhPXt4OnMseTpsLGk6ZSxqOnJ9LG89dGhpcy5fX2NoYXJ0X198fGE7dGhpcy5fX2NoYXJ0X189YSxicz90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuYnJ1c2giLChmdW5jdGlvbigpe2U9by5pLHI9by5qLHM9by54LGw9by55LGkoe3R5cGU6ImJydXNoc3RhcnQifSl9KSkudHdlZW4oImJydXNoOmJydXNoIiwoZnVuY3Rpb24oKXt2YXIgdD10YShzLGEueCksbj10YShsLGEueSk7cmV0dXJuIGU9cj1udWxsLGZ1bmN0aW9uKGUpe3M9YS54PXQoZSksbD1hLnk9bihlKSxpKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pfX0pKS5lYWNoKCJlbmQuYnJ1c2giLChmdW5jdGlvbigpe2U9YS5pLHI9YS5qLGkoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksaSh7dHlwZToiYnJ1c2hlbmQifSl9KSk6KGkoe3R5cGU6ImJydXNoc3RhcnQifSksaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxpKHt0eXBlOiJicnVzaGVuZCJ9KSl9KSl9LGYueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD16c1shKGk9dCk8PDF8IWFdLGYpOml9LGYueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD16c1shaTw8MXwhKGE9dCldLGYpOmF9LGYuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkmJmE/KGM9ISF0WzBdLHU9ISF0WzFdKTppP2M9ISF0OmEmJih1PSEhdCksZik6aSYmYT9bYyx1XTppP2M6YT91Om51bGx9LGYuZXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuLG8sYyx1LGg7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkmJihuPXRbMF0sbz10WzFdLGEmJihuPW5bMF0sbz1vWzBdKSxlPVtuLG9dLGkuaW52ZXJ0JiYobj1pKG4pLG89aShvKSksbzxuJiYoaD1uLG49byxvPWgpLG49PXNbMF0mJm89PXNbMV18fChzPVtuLG9dKSksYSYmKGM9dFswXSx1PXRbMV0saSYmKGM9Y1sxXSx1PXVbMV0pLHI9W2MsdV0sYS5pbnZlcnQmJihjPWEoYyksdT1hKHUpKSx1PGMmJihoPWMsYz11LHU9aCksYz09bFswXSYmdT09bFsxXXx8KGw9W2MsdV0pKSxmKTooaSYmKGU/KG49ZVswXSxvPWVbMV0pOihuPXNbMF0sbz1zWzFdLGkuaW52ZXJ0JiYobj1pLmludmVydChuKSxvPWkuaW52ZXJ0KG8pKSxvPG4mJihoPW4sbj1vLG89aCkpKSxhJiYocj8oYz1yWzBdLHU9clsxXSk6KGM9bFswXSx1PWxbMV0sYS5pbnZlcnQmJihjPWEuaW52ZXJ0KGMpLHU9YS5pbnZlcnQodSkpLHU8YyYmKGg9YyxjPXUsdT1oKSkpLGkmJmE/W1tuLGNdLFtvLHVdXTppP1tuLG9dOmEmJltjLHVdKX0sZi5jbGVhcj1mdW5jdGlvbigpe3JldHVybiBmLmVtcHR5KCl8fChzPVswLDBdLGw9WzAsMF0sZT1yPW51bGwpLGZ9LGYuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIWkmJnNbMF09PXNbMV18fCEhYSYmbFswXT09bFsxXX0sdC5yZWJpbmQoZixuLCJvbiIpfTt2YXIgSXM9e246Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0senM9W1sibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV0sT3M9SWUuZm9ybWF0PXNyLnRpbWVGb3JtYXQsRHM9T3MudXRjLFJzPURzKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTtmdW5jdGlvbiBGcyh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfWZ1bmN0aW9uIEJzKGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiBlKHQpfWZ1bmN0aW9uIGEoZSxuKXt2YXIgaT0oZVsxXS1lWzBdKS9uLGE9dC5iaXNlY3QoanMsaSk7cmV0dXJuIGE9PWpzLmxlbmd0aD9bci55ZWFyLGtvKGUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC8zMTUzNmU2fSkpLG4pWzJdXTphP3JbaS9qc1thLTFdPGpzW2FdL2k/YS0xOmFdOltxcyxrbyhlLG4pWzJdXX1yZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIE5zKGUuaW52ZXJ0KHQpKX0saS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZG9tYWluKHQpLGkpOmUuZG9tYWluKCkubWFwKE5zKX0saS5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aS5kb21haW4oKSxuPWdvKHIpLG89bnVsbD09dD9hKG4sMTApOiJudW1iZXIiPT10eXBlb2YgdCYmYShuLHQpO2Z1bmN0aW9uIHMocil7cmV0dXJuIWlzTmFOKHIpJiYhdC5yYW5nZShyLE5zKCtyKzEpLGUpLmxlbmd0aH1yZXR1cm4gbyYmKHQ9b1swXSxlPW9bMV0pLGkuZG9tYWluKHlvKHIsZT4xP3tmbG9vcjpmdW5jdGlvbihlKXtmb3IoO3MoZT10LmZsb29yKGUpKTspZT1OcyhlLTEpO3JldHVybiBlfSxjZWlsOmZ1bmN0aW9uKGUpe2Zvcig7cyhlPXQuY2VpbChlKSk7KWU9TnMoK2UrMSk7cmV0dXJuIGV9fTp0KSl9LGkudGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1nbyhpLmRvbWFpbigpKSxuPW51bGw9PXQ/YShyLDEwKToibnVtYmVyIj09dHlwZW9mIHQ/YShyLHQpOiF0LnJhbmdlJiZbe3JhbmdlOnR9LGVdO3JldHVybiBuJiYodD1uWzBdLGU9blsxXSksdC5yYW5nZShyWzBdLE5zKCtyWzFdKzEpLGU8MT8xOmUpfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJzKGUuY29weSgpLHIsbil9LHdvKGksZSl9ZnVuY3Rpb24gTnModCl7cmV0dXJuIG5ldyBEYXRlKHQpfU9zLmlzbz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyYmK25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9GczpScyxGcy5wYXJzZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRGF0ZSh0KTtyZXR1cm4gaXNOYU4oZSk/bnVsbDplfSxGcy50b1N0cmluZz1Scy50b1N0cmluZyxJZS5zZWNvbmQ9UmUoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgemUoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSh0LmdldFRpbWUoKSsxZTMqTWF0aC5mbG9vcihlKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfSkpLEllLnNlY29uZHM9SWUuc2Vjb25kLnJhbmdlLEllLnNlY29uZHMudXRjPUllLnNlY29uZC51dGMucmFuZ2UsSWUubWludXRlPVJlKChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHplKDZlNCpNYXRoLmZsb29yKHQvNmU0KSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrNmU0Kk1hdGguZmxvb3IoZSkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxJZS5taW51dGVzPUllLm1pbnV0ZS5yYW5nZSxJZS5taW51dGVzLnV0Yz1JZS5taW51dGUudXRjLnJhbmdlLEllLmhvdXI9UmUoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1cm4gbmV3IHplKDM2ZTUqKE1hdGguZmxvb3IodC8zNmU1LWUpK2UpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSh0LmdldFRpbWUoKSszNmU1Kk1hdGguZmxvb3IoZSkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSksSWUuaG91cnM9SWUuaG91ci5yYW5nZSxJZS5ob3Vycy51dGM9SWUuaG91ci51dGMucmFuZ2UsSWUubW9udGg9UmUoKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0RGF0ZSgxKSx0fSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pKSxJZS5tb250aHM9SWUubW9udGgucmFuZ2UsSWUubW9udGhzLnV0Yz1JZS5tb250aC51dGMucmFuZ2U7dmFyIGpzPVsxZTMsNWUzLDE1ZTMsM2U0LDZlNCwzZTUsOWU1LDE4ZTUsMzZlNSwxMDhlNSwyMTZlNSw0MzJlNSw4NjRlNSwxNzI4ZTUsNjA0OGU1LDI1OTJlNiw3Nzc2ZTYsMzE1MzZlNl0sVXM9W1tJZS5zZWNvbmQsMV0sW0llLnNlY29uZCw1XSxbSWUuc2Vjb25kLDE1XSxbSWUuc2Vjb25kLDMwXSxbSWUubWludXRlLDFdLFtJZS5taW51dGUsNV0sW0llLm1pbnV0ZSwxNV0sW0llLm1pbnV0ZSwzMF0sW0llLmhvdXIsMV0sW0llLmhvdXIsM10sW0llLmhvdXIsNl0sW0llLmhvdXIsMTJdLFtJZS5kYXksMV0sW0llLmRheSwyXSxbSWUud2VlaywxXSxbSWUubW9udGgsMV0sW0llLm1vbnRoLDNdLFtJZS55ZWFyLDFdXSxWcz1Pcy5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSYmMSE9dC5nZXREYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXREYXRlKCl9XSxbIiVCIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfV0sWyIlWSIsWXJdXSkscXM9e3JhbmdlOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5yYW5nZShNYXRoLmNlaWwoZS9uKSpuLCtyLG4pLm1hcChOcyl9LGZsb29yOkwsY2VpbDpMfTtVcy55ZWFyPUllLnllYXIsSWUuc2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gQnModC5zY2FsZS5saW5lYXIoKSxVcyxWcyl9O3ZhciBIcz1Vcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdLnV0Yyx0WzFdXX0pKSxHcz1Ecy5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKSYmMSE9dC5nZXRVVENEYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXRVVENEYXRlKCl9XSxbIiVCIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfV0sWyIlWSIsWXJdXSk7ZnVuY3Rpb24gWXModCl7cmV0dXJuIEpTT04ucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIFdzKHQpe3ZhciBlPWkuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gZS5zZWxlY3ROb2RlKGkuYm9keSksZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodC5yZXNwb25zZVRleHQpfUhzLnllYXI9SWUueWVhci51dGMsSWUuc2NhbGUudXRjPWZ1bmN0aW9uKCl7cmV0dXJuIEJzKHQuc2NhbGUubGluZWFyKCksSHMsR3MpfSx0LnRleHQ9Z2UoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pKSx0Lmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbWUodCwiYXBwbGljYXRpb24vanNvbiIsWXMsZSl9LHQuaHRtbD1mdW5jdGlvbih0LGUpe3JldHVybiBtZSh0LCJ0ZXh0L2h0bWwiLFdzLGUpfSx0LnhtbD1nZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzcG9uc2VYTUx9KSksIm9iamVjdCI9PXR5cGVvZiBlJiZlLmV4cG9ydHM/ZS5leHBvcnRzPXQ6dGhpcy5kMz10fSgpfSx7fV0sMTcwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylpZih2b2lkIDAhPT1hcmd1bWVudHNbdF0pcmV0dXJuIGFyZ3VtZW50c1t0XX19LHt9XSwxNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiKSxpPXQoInVuaXEiKTtmdW5jdGlvbiBhKHQsZSl7dGhpcy5wb2ludD10LHRoaXMuaW5kZXg9ZX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPXQucG9pbnQsbj1lLnBvaW50LGk9ci5sZW5ndGgsYT0wO2E8aTsrK2Epe3ZhciBvPW5bYV0tclthXTtpZihvKXJldHVybiBvfXJldHVybiAwfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybltdO3ZhciBzPXRbMF0ubGVuZ3RoO2lmKHM8MSlyZXR1cm5bXTtpZigxPT09cylyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKDE9PT10KXJldHVybiByP1tbLTEsMF1dOltdO3ZhciBuPWUubWFwKChmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdLGVdfSkpO24uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSkpO2Zvcih2YXIgaT1uZXcgQXJyYXkodC0xKSxhPTE7YTx0OysrYSl7dmFyIG89blthLTFdLHM9blthXTtpW2EtMV09W29bMV0sc1sxXV19ciYmaS5wdXNoKFstMSxpWzBdWzFdXSxbaVt0LTFdWzFdLC0xXSk7cmV0dXJuIGl9KHIsdCxlKTtmb3IodmFyIGw9bmV3IEFycmF5KHIpLGM9MSx1PTA7dTxyOysrdSl7Zm9yKHZhciBoPXRbdV0sZj1uZXcgQXJyYXkocysxKSxwPTAsZD0wO2Q8czsrK2Qpe3ZhciBnPWhbZF07ZltkXT1nLHArPWcqZ31mW3NdPXAsbFt1XT1uZXcgYShmLHUpLGM9TWF0aC5tYXgocCxjKX1pKGwsbykscj1sLmxlbmd0aDt2YXIgbT1uZXcgQXJyYXkocitzKzEpLHY9bmV3IEFycmF5KHIrcysxKSx5PShzKzEpKihzKzEpKmMseD1uZXcgQXJyYXkocysxKTtmb3IodT0wO3U8PXM7Kyt1KXhbdV09MDt4W3NdPXksbVswXT14LnNsaWNlKCksdlswXT0tMTtmb3IodT0wO3U8PXM7Kyt1KXsoZj14LnNsaWNlKCkpW3VdPTEsbVt1KzFdPWYsdlt1KzFdPS0xfWZvcih1PTA7dTxyOysrdSl7dmFyIGI9bFt1XTttW3UrcysxXT1iLnBvaW50LHZbdStzKzFdPWIuaW5kZXh9dmFyIF89bihtLCExKTtfPWU/Xy5maWx0ZXIoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPD1zOysrcil7dmFyIG49dlt0W3JdXTtpZihuPDAmJisrZT49MilyZXR1cm4hMTt0W3JdPW59cmV0dXJuITB9KSk6Xy5maWx0ZXIoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8PXM7KytlKXt2YXIgcj12W3RbZV1dO2lmKHI8MClyZXR1cm4hMTt0W2VdPXJ9cmV0dXJuITB9KSk7aWYoMSZzKWZvcih1PTA7dTxfLmxlbmd0aDsrK3Upe2Y9KGI9X1t1XSlbMF07YlswXT1iWzFdLGJbMV09Zn1yZXR1cm4gX319LHsiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiOjQzMyx1bmlxOjU2OX1dLDE3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9YTt2YXIgbj0oYS5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLmdldENvbnRleHQoIjJkIiksaT1vKFszMiwxMjZdKTtmdW5jdGlvbiBhKHQsZSl7QXJyYXkuaXNBcnJheSh0KSYmKHQ9dC5qb2luKCIsICIpKTt2YXIgcixhPXt9LHM9MTYsbD0uMDU7ZSYmKDI9PT1lLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiBlWzBdP3I9byhlKTpBcnJheS5pc0FycmF5KGUpP3I9ZTooZS5vP3I9byhlLm8pOmUucGFpcnMmJihyPWUucGFpcnMpLGUuZm9udFNpemUmJihzPWUuZm9udFNpemUpLG51bGwhPWUudGhyZXNob2xkJiYobD1lLnRocmVzaG9sZCkpKSxyfHwocj1pKSxuLmZvbnQ9cysicHggIit0O2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgdT1yW2NdLGg9bi5tZWFzdXJlVGV4dCh1WzBdKS53aWR0aCtuLm1lYXN1cmVUZXh0KHVbMV0pLndpZHRoLGY9bi5tZWFzdXJlVGV4dCh1KS53aWR0aDtpZihNYXRoLmFicyhoLWYpPnMqbCl7dmFyIHA9KGYtaCkvczthW3VdPTFlMypwfX1yZXR1cm4gYX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1bXSxyPXRbMF07cjw9dFsxXTtyKyspZm9yKHZhciBuPVN0cmluZy5mcm9tQ2hhckNvZGUociksaT10WzBdO2k8dFsxXTtpKyspe3ZhciBhPW4rU3RyaW5nLmZyb21DaGFyQ29kZShpKTtlLnB1c2goYSl9cmV0dXJuIGV9YS5jcmVhdGVQYWlycz1vLGEuYXNjaWk9aX0se31dLDE3MzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXt2YXIgcj0hMTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0NjRBcnJheSl7dmFyIG49bmV3IEZsb2F0NjRBcnJheSgxKSxpPW5ldyBVaW50MzJBcnJheShuLmJ1ZmZlcik7aWYoblswXT0xLHI9ITAsMTA3MjY5MzI0OD09PWlbMV0pe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LFtpWzBdLGlbMV1dfSxlLmV4cG9ydHMucGFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBpWzBdPXQsaVsxXT1lLG5bMF19LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGlbMF19LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGlbMV19fWVsc2UgaWYoMTA3MjY5MzI0OD09PWlbMF0pe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LFtpWzFdLGlbMF1dfSxlLmV4cG9ydHMucGFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBpWzFdPXQsaVswXT1lLG5bMF19LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGlbMV19LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGlbMF19fWVsc2Ugcj0hMX1pZighcil7dmFyIGE9bmV3IHQoOCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhLndyaXRlRG91YmxlTEUodCwwLCEwKSxbYS5yZWFkVUludDMyTEUoMCwhMCksYS5yZWFkVUludDMyTEUoNCwhMCldfSxlLmV4cG9ydHMucGFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBhLndyaXRlVUludDMyTEUodCwwLCEwKSxhLndyaXRlVUludDMyTEUoZSw0LCEwKSxhLnJlYWREb3VibGVMRSgwLCEwKX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBhLndyaXRlRG91YmxlTEUodCwwLCEwKSxhLnJlYWRVSW50MzJMRSgwLCEwKX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBhLndyaXRlRG91YmxlTEUodCwwLCEwKSxhLnJlYWRVSW50MzJMRSg0LCEwKX19ZS5leHBvcnRzLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGUuZXhwb3J0cy5oaSh0KT4+PjMxfSxlLmV4cG9ydHMuZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuKGUuZXhwb3J0cy5oaSh0KTw8MT4+PjIxKS0xMDIzfSxlLmV4cG9ydHMuZnJhY3Rpb249ZnVuY3Rpb24odCl7dmFyIHI9ZS5leHBvcnRzLmxvKHQpLG49ZS5leHBvcnRzLmhpKHQpLGk9MTA0ODU3NSZuO3JldHVybiAyMTQ2NDM1MDcyJm4mJihpKz0xPDwyMCksW3IsaV19LGUuZXhwb3J0cy5kZW5vcm1hbGl6ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuISgyMTQ2NDM1MDcyJmUuZXhwb3J0cy5oaSh0KSl9fSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHtidWZmZXI6MTExfV0sMTc0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiYWJzLXN2Zy1wYXRoIiksaT10KCJub3JtYWxpemUtc3ZnLXBhdGgiKSxhPXtNOiJtb3ZlVG8iLEM6ImJlemllckN1cnZlVG8ifTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmJlZ2luUGF0aCgpLGkobihlKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXSxuPWUuc2xpY2UoMSk7dFthW3JdXS5hcHBseSh0LG4pfSkpLHQuY2xvc2VQYXRoKCl9fSx7ImFicy1zdmctcGF0aCI6NjUsIm5vcm1hbGl6ZS1zdmctcGF0aCI6NDcxfV0sMTc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImludDgiOnJldHVybiBJbnQ4QXJyYXk7Y2FzZSJpbnQxNiI6cmV0dXJuIEludDE2QXJyYXk7Y2FzZSJpbnQzMiI6cmV0dXJuIEludDMyQXJyYXk7Y2FzZSJ1aW50OCI6cmV0dXJuIFVpbnQ4QXJyYXk7Y2FzZSJ1aW50MTYiOnJldHVybiBVaW50MTZBcnJheTtjYXNlInVpbnQzMiI6cmV0dXJuIFVpbnQzMkFycmF5O2Nhc2UiZmxvYXQzMiI6cmV0dXJuIEZsb2F0MzJBcnJheTtjYXNlImZsb2F0NjQiOnJldHVybiBGbG9hdDY0QXJyYXk7Y2FzZSJhcnJheSI6cmV0dXJuIEFycmF5O2Nhc2UidWludDhfY2xhbXBlZCI6cmV0dXJuIFVpbnQ4Q2xhbXBlZEFycmF5fX19LHt9XSwxNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKCJ1bmRlZmluZWQiPT10eXBlb2YgZSYmKGU9MCksdHlwZW9mIHQpe2Nhc2UibnVtYmVyIjppZih0PjApcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtmb3Iocj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfSgwfHQsZSk7YnJlYWs7Y2FzZSJvYmplY3QiOmlmKCJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpcmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTB8ZVtuXTtpZihpPD0wKXJldHVybltdO3ZhciBhLG89bmV3IEFycmF5KGkpO2lmKG49PT1lLmxlbmd0aC0xKWZvcihhPTA7YTxpOysrYSlvW2FdPXI7ZWxzZSBmb3IoYT0wO2E8aTsrK2Epb1thXT10KGUscixuKzEpO3JldHVybiBvfSh0LGUsMCl9cmV0dXJuW119fSx7fV0sMTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3I9cnx8Mjt2YXIgbixzLGwsYyx1LHAsZCxtPWUmJmUubGVuZ3RoLHY9bT9lWzBdKnI6dC5sZW5ndGgseT1pKHQsMCx2LHIsITApLHg9W107aWYoIXl8fHkubmV4dD09PXkucHJldilyZXR1cm4geDtpZihtJiYoeT1mdW5jdGlvbih0LGUscixuKXt2YXIgbyxzLGwsYyx1LHA9W107Zm9yKG89MCxzPWUubGVuZ3RoO288cztvKyspbD1lW29dKm4sYz1vPHMtMT9lW28rMV0qbjp0Lmxlbmd0aCwodT1pKHQsbCxjLG4sITEpKT09PXUubmV4dCYmKHUuc3RlaW5lcj0hMCkscC5wdXNoKGcodSkpO2ZvcihwLnNvcnQoaCksbz0wO288cC5sZW5ndGg7bysrKWYocFtvXSxyKSxyPWEocixyLm5leHQpO3JldHVybiByfSh0LGUseSxyKSksdC5sZW5ndGg+ODAqcil7bj1sPXRbMF0scz1jPXRbMV07Zm9yKHZhciBiPXI7Yjx2O2IrPXIpKHU9dFtiXSk8biYmKG49dSksKHA9dFtiKzFdKTxzJiYocz1wKSx1PmwmJihsPXUpLHA+YyYmKGM9cCk7ZD0wIT09KGQ9TWF0aC5tYXgobC1uLGMtcykpPzEvZDowfXJldHVybiBvKHkseCxyLG4scyxkKSx4fWZ1bmN0aW9uIGkodCxlLHIsbixpKXt2YXIgYSxvO2lmKGk9PT1FKHQsZSxyLG4pPjApZm9yKGE9ZTthPHI7YSs9bilvPU0oYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz1NKGEsdFthXSx0W2ErMV0sbyk7cmV0dXJuIG8mJngobyxvLm5leHQpJiYoQShvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBhKHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7dmFyIHIsbj10O2Rve2lmKHI9ITEsbi5zdGVpbmVyfHwheChuLG4ubmV4dCkmJjAhPT15KG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihBKG4pLChuPWU9bi5wcmV2KT09PW4ubmV4dClicmVhaztyPSEwfX13aGlsZShyfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0LGUscixuLGksaCxmKXtpZih0KXshZiYmaCYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dDtkb3tudWxsPT09aS56JiYoaS56PWQoaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwIT09cyYmKDA9PT1sfHwhbnx8ci56PD1uLnopPyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKX0oaSl9KHQsbixpLGgpO2Zvcih2YXIgcCxnLG09dDt0LnByZXYhPT10Lm5leHQ7KWlmKHA9dC5wcmV2LGc9dC5uZXh0LGg/bCh0LG4saSxoKTpzKHQpKWUucHVzaChwLmkvciksZS5wdXNoKHQuaS9yKSxlLnB1c2goZy5pL3IpLEEodCksdD1nLm5leHQsbT1nLm5leHQ7ZWxzZSBpZigodD1nKT09PW0pe2Y/MT09PWY/byh0PWMoYSh0KSxlLHIpLGUscixuLGksaCwyKToyPT09ZiYmdSh0LGUscixuLGksaCk6byhhKHQpLGUscixuLGksaCwxKTticmVha319fWZ1bmN0aW9uIHModCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZih5KGUscixuKT49MClyZXR1cm4hMTtmb3IodmFyIGk9dC5uZXh0Lm5leHQ7aSE9PXQucHJldjspe2lmKG0oZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJnkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBpPXQucHJldixhPXQsbz10Lm5leHQ7aWYoeShpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxsPWkueTxhLnk/aS55PG8ueT9pLnk6by55OmEueTxvLnk/YS55Om8ueSxjPWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCx1PWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxoPWQocyxsLGUscixuKSxmPWQoYyx1LGUscixuKSxwPXQucHJldlosZz10Lm5leHRaO3AmJnAuej49aCYmZyYmZy56PD1mOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmbShpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmeShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO2lmKHA9cC5wcmV2WixnIT09dC5wcmV2JiZnIT09dC5uZXh0JiZtKGkueCxpLnksYS54LGEueSxvLngsby55LGcueCxnLnkpJiZ5KGcucHJldixnLGcubmV4dCk+PTApcmV0dXJuITE7Zz1nLm5leHRafWZvcig7cCYmcC56Pj1oOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmbShpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmeShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO3A9cC5wcmV2Wn1mb3IoO2cmJmcuejw9Zjspe2lmKGchPT10LnByZXYmJmchPT10Lm5leHQmJm0oaS54LGkueSxhLngsYS55LG8ueCxvLnksZy54LGcueSkmJnkoZy5wcmV2LGcsZy5uZXh0KT49MClyZXR1cm4hMTtnPWcubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsbz1uLm5leHQubmV4dDsheChpLG8pJiZiKGksbixuLm5leHQsbykmJlQoaSxvKSYmVChvLGkpJiYoZS5wdXNoKGkuaS9yKSxlLnB1c2gobi5pL3IpLGUucHVzaChvLmkvciksQShuKSxBKG4ubmV4dCksbj10PW8pLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gYShuKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxzKXt2YXIgbD10O2Rve2Zvcih2YXIgYz1sLm5leHQubmV4dDtjIT09bC5wcmV2Oyl7aWYobC5pIT09Yy5pJiZ2KGwsYykpe3ZhciB1PWsobCxjKTtyZXR1cm4gbD1hKGwsbC5uZXh0KSx1PWEodSx1Lm5leHQpLG8obCxlLHIsbixpLHMpLHZvaWQgbyh1LGUscixuLGkscyl9Yz1jLm5leHR9bD1sLm5leHR9d2hpbGUobCE9PXQpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBmKHQsZSl7aWYoZT1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPXQueCxhPXQueSxvPS0xLzA7ZG97aWYoYTw9bi55JiZhPj1uLm5leHQueSYmbi5uZXh0LnkhPT1uLnkpe3ZhciBzPW4ueCsoYS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHM8PWkmJnM+byl7aWYobz1zLHM9PT1pKXtpZihhPT09bi55KXJldHVybiBuO2lmKGE9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fXI9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXIpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHI7dmFyIGwsYz1yLHU9ci54LGg9ci55LGY9MS8wO249cjtkb3tpPj1uLngmJm4ueD49dSYmaSE9PW4ueCYmbShhPGg/aTpvLGEsdSxoLGE8aD9vOmksYSxuLngsbi55KSYmKGw9TWF0aC5hYnMoYS1uLnkpLyhpLW4ueCksVChuLHQpJiYobDxmfHxsPT09ZiYmKG4ueD5yLnh8fG4ueD09PXIueCYmcChyLG4pKSkmJihyPW4sZj1sKSksbj1uLm5leHR9d2hpbGUobiE9PWMpO3JldHVybiByfSh0LGUpKXt2YXIgcj1rKGUsdCk7YShlLGUubmV4dCksYShyLHIubmV4dCl9fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4geSh0LnByZXYsdCxlLnByZXYpPDAmJnkoZS5uZXh0LHQsdC5uZXh0KTwwfWZ1bmN0aW9uIGQodCxlLHIsbixpKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LXIpKmkpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLW4pKmkpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQscj10O2RveyhlLng8ci54fHxlLng9PT1yLngmJmUueTxyLnkpJiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gbSh0LGUscixuLGksYSxvLHMpe3JldHVybihpLW8pKihlLXMpLSh0LW8pKihhLXMpPj0wJiYodC1vKSoobi1zKS0oci1vKSooZS1zKT49MCYmKHItbykqKGEtcyktKGktbykqKG4tcyk+PTB9ZnVuY3Rpb24gdih0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiFmdW5jdGlvbih0LGUpe3ZhciByPXQ7ZG97aWYoci5pIT09dC5pJiZyLm5leHQuaSE9PXQuaSYmci5pIT09ZS5pJiZyLm5leHQuaSE9PWUuaSYmYihyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmKFQodCxlKSYmVChlLHQpJiZmdW5jdGlvbih0LGUpe3ZhciByPXQsbj0hMSxpPSh0LngrZS54KS8yLGE9KHQueStlLnkpLzI7ZG97ci55PmEhPXIubmV4dC55PmEmJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihhLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiBufSh0LGUpJiYoeSh0LnByZXYsdCxlLnByZXYpfHx5KHQsZS5wcmV2LGUpKXx8eCh0LGUpJiZ5KHQucHJldix0LHQubmV4dCk+MCYmeShlLnByZXYsZSxlLm5leHQpPjApfWZ1bmN0aW9uIHkodCxlLHIpe3JldHVybihlLnktdC55KSooci54LWUueCktKGUueC10LngpKihyLnktZS55KX1mdW5jdGlvbiB4KHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGk9dyh5KHQsZSxyKSksYT13KHkodCxlLG4pKSxvPXcoeShyLG4sdCkpLHM9dyh5KHIsbixlKSk7cmV0dXJuIGkhPT1hJiZvIT09c3x8KCEoMCE9PWl8fCFfKHQscixlKSl8fCghKDAhPT1hfHwhXyh0LG4sZSkpfHwoISgwIT09b3x8IV8ocix0LG4pKXx8ISgwIT09c3x8IV8ocixlLG4pKSkpKX1mdW5jdGlvbiBfKHQsZSxyKXtyZXR1cm4gZS54PD1NYXRoLm1heCh0Lngsci54KSYmZS54Pj1NYXRoLm1pbih0Lngsci54KSYmZS55PD1NYXRoLm1heCh0Lnksci55KSYmZS55Pj1NYXRoLm1pbih0Lnksci55KX1mdW5jdGlvbiB3KHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuIHkodC5wcmV2LHQsdC5uZXh0KTwwP3kodCxlLHQubmV4dCk+PTAmJnkodCx0LnByZXYsZSk+PTA6eSh0LGUsdC5wcmV2KTwwfHx5KHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gayh0LGUpe3ZhciByPW5ldyBTKHQuaSx0LngsdC55KSxuPW5ldyBTKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiBNKHQsZSxyLG4pe3ZhciBpPW5ldyBTKHQsZSxyKTtyZXR1cm4gbj8oaS5uZXh0PW4ubmV4dCxpLnByZXY9bixuLm5leHQucHJldj1pLG4ubmV4dD1pKTooaS5wcmV2PWksaS5uZXh0PWkpLGl9ZnVuY3Rpb24gQSh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIFModCxlLHIpe3RoaXMuaT10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIEUodCxlLHIsbil7Zm9yKHZhciBpPTAsYT1lLG89ci1uO2E8cjthKz1uKWkrPSh0W29dLXRbYV0pKih0W2ErMV0rdFtvKzFdKSxvPWE7cmV0dXJuIGl9ZS5leHBvcnRzPW4sZS5leHBvcnRzLmRlZmF1bHQ9bixuLmRldmlhdGlvbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lJiZlLmxlbmd0aCxhPWk/ZVswXSpyOnQubGVuZ3RoLG89TWF0aC5hYnMoRSh0LDAsYSxyKSk7aWYoaSlmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDtzKyspe3ZhciBjPWVbc10qcix1PXM8bC0xP2VbcysxXSpyOnQubGVuZ3RoO28tPU1hdGguYWJzKEUodCxjLHUscikpfXZhciBoPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBmPW5bc10qcixwPW5bcysxXSpyLGQ9bltzKzJdKnI7aCs9TWF0aC5hYnMoKHRbZl0tdFtkXSkqKHRbcCsxXS10W2YrMV0pLSh0W2ZdLXRbcF0pKih0W2QrMV0tdFtmKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09aD8wOk1hdGguYWJzKChoLW8pL28pfSxuLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiYobis9dFtpLTFdLmxlbmd0aCxyLmhvbGVzLnB1c2gobikpfXJldHVybiByfX0se31dLDE3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigibnVtYmVyIiE9dHlwZW9mIGUpe2U9MDtmb3IodmFyIGk9MDtpPHI7KytpKXt2YXIgYT10W2ldO2U9TWF0aC5tYXgoZSxhWzBdLGFbMV0pfWU9MSsoMHxlKX1lfD0wO3ZhciBvPW5ldyBBcnJheShlKTtmb3IoaT0wO2k8ZTsrK2kpb1tpXT1bXTtmb3IoaT0wO2k8cjsrK2kpe2E9dFtpXTtvW2FbMF1dLnB1c2goYVsxXSksb1thWzFdXS5wdXNoKGFbMF0pfWZvcih2YXIgcz0wO3M8ZTsrK3MpbihvW3NdLChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7cmV0dXJuIG99O3ZhciBuPXQoInVuaXEiKX0se3VuaXE6NTY5fV0sMTc5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpPVtdLGE9W10sbz1bXSxzPXt9LGw9W107ZnVuY3Rpb24gYyh0KXt2YXIgZSxuLGk9ITE7Zm9yKGEucHVzaCh0KSxvW3RdPSEwLGU9MDtlPGxbdF0ubGVuZ3RoO2UrKykobj1sW3RdW2VdKT09PXI/KHUocixhKSxpPSEwKTpvW25dfHwoaT1jKG4pKTtpZihpKSFmdW5jdGlvbiB0KGUpe29bZV09ITEscy5oYXNPd25Qcm9wZXJ0eShlKSYmT2JqZWN0LmtleXMoc1tlXSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7ZGVsZXRlIHNbZV1bcl0sb1tyXSYmdChyKX0pKX0odCk7ZWxzZSBmb3IoZT0wO2U8bFt0XS5sZW5ndGg7ZSsrKXtuPWxbdF1bZV07dmFyIGg9c1tuXTtofHwoaD17fSxzW25dPWgpLGhbbl09ITB9cmV0dXJuIGEucG9wKCksaX1mdW5jdGlvbiB1KHQscil7dmFyIG49W10uY29uY2F0KHIpLmNvbmNhdCh0KTtlP2UoYyk6aS5wdXNoKG4pfWZ1bmN0aW9uIGgoZSl7IWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXI8ZSYmKHRbcl09W10pLHRbcl09dFtyXS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj1lfSkpfShlKTtmb3IodmFyIHIsaT1uKHQpLmNvbXBvbmVudHMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MX0pKSxhPTEvMCxvPTA7bzxpLmxlbmd0aDtvKyspZm9yKHZhciBzPTA7czxpW29dLmxlbmd0aDtzKyspaVtvXVtzXTxhJiYoYT1pW29dW3NdLHI9byk7dmFyIGw9aVtyXTtyZXR1cm4hIWwmJntsZWFzdFZlcnRleDphLGFkakxpc3Q6dC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuLTE9PT1sLmluZGV4T2YoZSk/W106dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybi0xIT09bC5pbmRleE9mKHQpfSkpfSkpfX1yPTA7Zm9yKHZhciBmPXQubGVuZ3RoO3I8Zjspe3ZhciBwPWgocik7aWYocj1wLmxlYXN0VmVydGV4LGw9cC5hZGpMaXN0KXtmb3IodmFyIGQ9MDtkPGwubGVuZ3RoO2QrKylmb3IodmFyIGc9MDtnPGxbZF0ubGVuZ3RoO2crKyl7dmFyIG09bFtkXVtnXTtvWyttXT0hMSxzW21dPXt9fWMocikscis9MX1lbHNlIHI9Zn1yZXR1cm4gZT92b2lkIDA6aX19LHsic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiOjU0MX1dLDE4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzKS5sZW5ndGg9MCx0aGlzfX0seyIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjIxMX1dLDE4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/QXJyYXkuZnJvbTp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxODIsIi4vc2hpbSI6MTgzfV0sMTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUscj1BcnJheS5mcm9tO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZT1yKHQ9WyJyYXoiLCJkd2EiXSksQm9vbGVhbihlJiZlIT09dCYmImR3YSI9PT1lWzFdKSl9fSx7fV0sMTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNi1zeW1ib2wiKS5pdGVyYXRvcixpPXQoIi4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGE9dCgiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb24iKSxvPXQoIi4uLy4uL251bWJlci90by1wb3MtaW50ZWdlciIpLHM9dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIiksbD10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKSxjPXQoIi4uLy4uL29iamVjdC9pcy12YWx1ZSIpLHU9dCgiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyIpLGg9QXJyYXkuaXNBcnJheSxmPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLHA9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9LGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGcsbSx2LHkseCxiLF8sdyxUPWFyZ3VtZW50c1sxXSxrPWFyZ3VtZW50c1syXTtpZih0PU9iamVjdChsKHQpKSxjKFQpJiZzKFQpLHRoaXMmJnRoaXMhPT1BcnJheSYmYSh0aGlzKSllPXRoaXM7ZWxzZXtpZighVCl7aWYoaSh0KSlyZXR1cm4gMSE9PSh2PXQubGVuZ3RoKT9BcnJheS5hcHBseShudWxsLHQpOigobT1uZXcgQXJyYXkoMSkpWzBdPXRbMF0sbSk7aWYoaCh0KSl7Zm9yKG09bmV3IEFycmF5KHY9dC5sZW5ndGgpLHI9MDtyPHY7KytyKW1bcl09dFtyXTtyZXR1cm4gbX19bT1bXX1pZighaCh0KSlpZih2b2lkIDAhPT0oXz10W25dKSl7Zm9yKHg9cyhfKS5jYWxsKHQpLGUmJihtPW5ldyBlKSxiPXgubmV4dCgpLHI9MDshYi5kb25lOyl3PVQ/Zi5jYWxsKFQsayxiLnZhbHVlLHIpOmIudmFsdWUsZT8ocC52YWx1ZT13LGQobSxyLHApKTptW3JdPXcsYj14Lm5leHQoKSwrK3I7dj1yfWVsc2UgaWYodSh0KSl7Zm9yKHY9dC5sZW5ndGgsZSYmKG09bmV3IGUpLHI9MCxnPTA7cjx2Oysrcil3PXRbcl0scisxPHYmJih5PXcuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZ5PD01NjMxOSYmKHcrPXRbKytyXSksdz1UP2YuY2FsbChULGssdyxnKTp3LGU/KHAudmFsdWU9dyxkKG0sZyxwKSk6bVtnXT13LCsrZzt2PWd9aWYodm9pZCAwPT09dilmb3Iodj1vKHQubGVuZ3RoKSxlJiYobT1uZXcgZSh2KSkscj0wO3I8djsrK3Ipdz1UP2YuY2FsbChULGssdFtyXSxyKTp0W3JdLGU/KHAudmFsdWU9dyxkKG0scixwKSk6bVtyXT13O3JldHVybiBlJiYocC52YWx1ZT1udWxsLG0ubGVuZ3RoPXYpLG19fSx7Ii4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTg0LCIuLi8uLi9mdW5jdGlvbi9pcy1mdW5jdGlvbiI6MTg1LCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXIiOjE5MSwiLi4vLi4vb2JqZWN0L2lzLXZhbHVlIjoyMDAsIi4uLy4uL29iamVjdC92YWxpZC1jYWxsYWJsZSI6MjA5LCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjIxMSwiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyI6MjE1LCJlczYtc3ltYm9sIjoyMjV9XSwxODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHQpPT09aX19LHt9XSwxODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPVJlZ0V4cC5wcm90b3R5cGUudGVzdC5iaW5kKC9eW29iamVjdCBbQS1aYS16MC05XSpGdW5jdGlvbl0kLyk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZpKG4uY2FsbCh0KSl9fSx7fV0sMTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP01hdGguc2lnbjp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxODgsIi4vc2hpbSI6MTg5fV0sMTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PU1hdGguc2lnbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmKDE9PT10KDEwKSYmLTE9PT10KC0yMCkpfX0se31dLDE4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TnVtYmVyKHQpLGlzTmFOKHQpfHwwPT09dD90OnQ+MD8xOi0xfX0se31dLDE5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9tYXRoL3NpZ24iKSxpPU1hdGguYWJzLGE9TWF0aC5mbG9vcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQpPzA6MCE9PSh0PU51bWJlcih0KSkmJmlzRmluaXRlKHQpP24odCkqYShpKHQpKTp0fX0seyIuLi9tYXRoL3NpZ24iOjE4N31dLDE5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3RvLWludGVnZXIiKSxpPU1hdGgubWF4O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSgwLG4odCkpfX0seyIuL3RvLWludGVnZXIiOjE5MH1dLDE5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3ZhbGlkLWNhbGxhYmxlIiksaT10KCIuL3ZhbGlkLXZhbHVlIiksYT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZCxvPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLHM9T2JqZWN0LmtleXMsbD1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLGMpe3ZhciB1LGg9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdO3JldHVybiByPU9iamVjdChpKHIpKSxuKGMpLHU9cyhyKSxmJiZ1LnNvcnQoImZ1bmN0aW9uIj09dHlwZW9mIGY/YS5jYWxsKGYscik6dm9pZCAwKSwiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9dVt0XSksby5jYWxsKHQsdSwoZnVuY3Rpb24odCxuKXtyZXR1cm4gbC5jYWxsKHIsdCk/by5jYWxsKGMsaCxyW3RdLHQscixuKTplfSkpfX19LHsiLi92YWxpZC1jYWxsYWJsZSI6MjA5LCIuL3ZhbGlkLXZhbHVlIjoyMTF9XSwxOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP09iamVjdC5hc3NpZ246dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTk0LCIuL3NoaW0iOjE5NX1dLDE5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPU9iamVjdC5hc3NpZ247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJihlKHQ9e2ZvbzoicmF6In0se2JhcjoiZHdhIn0se3Ryenk6InRyenkifSksdC5mb28rdC5iYXIrdC50cnp5PT09InJhemR3YXRyenkiKX19LHt9XSwxOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4va2V5cyIpLGk9dCgiLi4vdmFsaWQtdmFsdWUiKSxhPU1hdGgubWF4O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG8scyxsPWEoYXJndW1lbnRzLmxlbmd0aCwyKTtmb3IodD1PYmplY3QoaSh0KSkscz1mdW5jdGlvbihuKXt0cnl7dFtuXT1lW25dfWNhdGNoKHQpe3J8fChyPXQpfX0sbz0xO288bDsrK28pbihlPWFyZ3VtZW50c1tvXSkuZm9yRWFjaChzKTtpZih2b2lkIDAhPT1yKXRocm93IHI7cmV0dXJuIHR9fSx7Ii4uL2tleXMiOjIwMSwiLi4vdmFsaWQtdmFsdWUiOjIxMX1dLDE5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hcnJheS9mcm9tIiksaT10KCIuL2Fzc2lnbiIpLGE9dCgiLi92YWxpZC12YWx1ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QoYSh0KSkscj1hcmd1bWVudHNbMV0sbz1PYmplY3QoYXJndW1lbnRzWzJdKTtpZihlIT09dCYmIXIpcmV0dXJuIGU7dmFyIHM9e307cmV0dXJuIHI/bihyLChmdW5jdGlvbihlKXsoby5lbnN1cmV8fGUgaW4gdCkmJihzW2VdPXRbZV0pfSkpOmkocyx0KSxzfX0seyIuLi9hcnJheS9mcm9tIjoxODEsIi4vYXNzaWduIjoxOTMsIi4vdmFsaWQtdmFsdWUiOjIxMX1dLDE5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbyxzPU9iamVjdC5jcmVhdGU7dCgiLi9zZXQtcHJvdG90eXBlLW9mL2lzLWltcGxlbWVudGVkIikoKXx8KG49dCgiLi9zZXQtcHJvdG90eXBlLW9mL3NoaW0iKSksZS5leHBvcnRzPW4/MSE9PW4ubGV2ZWw/czooaT17fSxhPXt9LG89e2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0sT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7YVt0XT0iX19wcm90b19fIiE9PXQ/bzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJudWxsUG9seWZpbGwiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSx2YWx1ZTppfSksZnVuY3Rpb24odCxlKXtyZXR1cm4gcyhudWxsPT09dD9pOnQsZSl9KTpzfSx7Ii4vc2V0LXByb3RvdHlwZS1vZi9pcy1pbXBsZW1lbnRlZCI6MjA3LCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbSI6MjA4fV0sMTk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL19pdGVyYXRlIikoImZvckVhY2giKX0seyIuL19pdGVyYXRlIjoxOTJ9XSwxOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy12YWx1ZSIpLGk9e2Z1bmN0aW9uOiEwLG9iamVjdDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQpJiZpW3R5cGVvZiB0XXx8ITF9fSx7Ii4vaXMtdmFsdWUiOjIwMH1dLDIwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9mdW5jdGlvbi9ub29wIikoKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1uJiZudWxsIT09dH19LHsiLi4vZnVuY3Rpb24vbm9vcCI6MTg2fV0sMjAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9PYmplY3Qua2V5czp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoyMDIsIi4vc2hpbSI6MjAzfV0sMjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gT2JqZWN0LmtleXMoInByaW1pdGl2ZSIpLCEwfWNhdGNoKHQpe3JldHVybiExfX19LHt9XSwyMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaXMtdmFsdWUiKSxpPU9iamVjdC5rZXlzO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaShuKHQpP09iamVjdCh0KTp0KX19LHsiLi4vaXMtdmFsdWUiOjIwMH1dLDIwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3ZhbGlkLWNhbGxhYmxlIiksaT10KCIuL2Zvci1lYWNoIiksYT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxvPWFyZ3VtZW50c1syXTtyZXR1cm4gbihlKSxpKHQsKGZ1bmN0aW9uKHQsbixpLHMpe3Jbbl09YS5jYWxsKGUsbyx0LG4saSxzKX0pKSxyfX0seyIuL2Zvci1lYWNoIjoxOTgsIi4vdmFsaWQtY2FsbGFibGUiOjIwOX1dLDIwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIiksaT1BcnJheS5wcm90b3R5cGUuZm9yRWFjaCxhPU9iamVjdC5jcmVhdGUsbz1mdW5jdGlvbih0LGUpe3ZhciByO2ZvcihyIGluIHQpZVtyXT10W3JdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9YShudWxsKTtyZXR1cm4gaS5jYWxsKGFyZ3VtZW50cywoZnVuY3Rpb24odCl7bih0KSYmbyhPYmplY3QodCksZSl9KSksZX19LHsiLi9pcy12YWx1ZSI6MjAwfV0sMjA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9PYmplY3Quc2V0UHJvdG90eXBlT2Y6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MjA3LCIuL3NoaW0iOjIwOH1dLDIwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuY3JlYXRlLGk9T2JqZWN0LmdldFByb3RvdHlwZU9mLGE9e307ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mLGU9YXJndW1lbnRzWzBdfHxuO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZpKHQoZShudWxsKSxhKSk9PT1hfX0se31dLDIwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoIi4uL2lzLW9iamVjdCIpLGE9dCgiLi4vdmFsaWQtdmFsdWUiKSxvPU9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZixzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxsPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9O249ZnVuY3Rpb24odCxlKXtpZihhKHQpLG51bGw9PT1lfHxpKGUpKXJldHVybiB0O3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3RvdHlwZSBtdXN0IGJlIG51bGwgb3IgYW4gb2JqZWN0Iil9LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiB0PygyPT09dC5sZXZlbD90LnNldD8ocj10LnNldCxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuY2FsbChuKHQsZSksZSksdH0pOmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpLl9fcHJvdG9fXz1lLHR9OmU9ZnVuY3Rpb24gdChlLHIpe3ZhciBpO3JldHVybiBuKGUsciksKGk9by5jYWxsKHQubnVsbFBvbHlmaWxsLGUpKSYmZGVsZXRlIHQubnVsbFBvbHlmaWxsLl9fcHJvdG9fXyxudWxsPT09ciYmKHI9dC5udWxsUG9seWZpbGwpLGUuX19wcm90b19fPXIsaSYmcyh0Lm51bGxQb2x5ZmlsbCwiX19wcm90b19fIixsKSxlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibGV2ZWwiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSx2YWx1ZTp0LmxldmVsfSkpOm51bGx9KGZ1bmN0aW9uKCl7dmFyIHQsZT1PYmplY3QuY3JlYXRlKG51bGwpLHI9e30sbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpO2lmKG4pe3RyeXsodD1uLnNldCkuY2FsbChlLHIpfWNhdGNoKHQpe31pZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yKXJldHVybntzZXQ6dCxsZXZlbDoyfX1yZXR1cm4gZS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yP3tsZXZlbDoyfTooKGU9e30pLl9fcHJvdG9fXz1yLE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PXImJntsZXZlbDoxfSl9KCkpLHQoIi4uL2NyZWF0ZSIpfSx7Ii4uL2NyZWF0ZSI6MTk3LCIuLi9pcy1vYmplY3QiOjE5OSwiLi4vdmFsaWQtdmFsdWUiOjIxMX1dLDIwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gdH19LHt9XSwyMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1vYmplY3QiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGFuIE9iamVjdCIpO3JldHVybiB0fX0seyIuL2lzLW9iamVjdCI6MTk5fV0sMjExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiB0fX0seyIuL2lzLXZhbHVlIjoyMDB9XSwyMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP1N0cmluZy5wcm90b3R5cGUuY29udGFpbnM6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MjEzLCIuL3NoaW0iOjIxNH1dLDIxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0icmF6ZHdhdHJ6eSI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4uY29udGFpbnMmJighMD09PW4uY29udGFpbnMoImR3YSIpJiYhMT09PW4uY29udGFpbnMoImZvbyIpKX19LHt9XSwyMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHRoaXMsdCxhcmd1bWVudHNbMV0pPi0xfX0se31dLDIxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGk9bi5jYWxsKCIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHx0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0IGluc3RhbmNlb2YgU3RyaW5nfHxuLmNhbGwodCk9PT1pKXx8ITF9fSx7fV0sMjE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksaT1NYXRoLnJhbmRvbTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdDtkb3t0PWkoKS50b1N0cmluZygzNikuc2xpY2UoMil9d2hpbGUoblt0XSk7cmV0dXJuIHR9fSx7fV0sMjE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyIpLG89dCgiZCIpLHM9dCgiZXM2LXN5bWJvbCIpLGw9dCgiLi8iKSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7bC5jYWxsKHRoaXMsdCksZT1lP2EuY2FsbChlLCJrZXkrdmFsdWUiKT8ia2V5K3ZhbHVlIjphLmNhbGwoZSwia2V5Iik/ImtleSI6InZhbHVlIjoidmFsdWUiLGModGhpcywiX19raW5kX18iLG8oIiIsZSkpfSxpJiZpKG4sbCksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobC5wcm90b3R5cGUse19yZXNvbHZlOm8oKGZ1bmN0aW9uKHQpe3JldHVybiJ2YWx1ZSI9PT10aGlzLl9fa2luZF9fP3RoaXMuX19saXN0X19bdF06ImtleSt2YWx1ZSI9PT10aGlzLl9fa2luZF9fP1t0LHRoaXMuX19saXN0X19bdF1dOnR9KSl9KSxjKG4ucHJvdG90eXBlLHMudG9TdHJpbmdUYWcsbygiYyIsIkFycmF5IEl0ZXJhdG9yIikpfSx7Ii4vIjoyMjAsZDoxNTUsImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiOjIwNiwiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyI6MjEyLCJlczYtc3ltYm9sIjoyMjV9XSwyMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiKSxpPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIiksYT10KCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciKSxvPXQoIi4vZ2V0Iikscz1BcnJheS5pc0FycmF5LGw9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsYz1BcnJheS5wcm90b3R5cGUuc29tZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGgsZixwLGQsZyxtLHY9YXJndW1lbnRzWzJdO2lmKHModCl8fG4odCk/cj0iYXJyYXkiOmEodCk/cj0ic3RyaW5nIjp0PW8odCksaShlKSxoPWZ1bmN0aW9uKCl7Zj0hMH0sImFycmF5IiE9PXIpaWYoInN0cmluZyIhPT1yKWZvcih1PXQubmV4dCgpOyF1LmRvbmU7KXtpZihsLmNhbGwoZSx2LHUudmFsdWUsaCksZilyZXR1cm47dT10Lm5leHQoKX1lbHNlIGZvcihkPXQubGVuZ3RoLHA9MDtwPGQmJihnPXRbcF0scCsxPGQmJihtPWcuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZtPD01NjMxOSYmKGcrPXRbKytwXSksbC5jYWxsKGUsdixnLGgpLCFmKTsrK3ApO2Vsc2UgYy5jYWxsKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwoZSx2LHQsaCksZn0pKX19LHsiLi9nZXQiOjIxOSwiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjE4NCwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUiOjIwOSwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIjoyMTV9XSwyMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiKSxpPXQoImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyIpLGE9dCgiLi9hcnJheSIpLG89dCgiLi9zdHJpbmciKSxzPXQoIi4vdmFsaWQtaXRlcmFibGUiKSxsPXQoImVzNi1zeW1ib2wiKS5pdGVyYXRvcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHModClbbF0/dFtsXSgpOm4odCk/bmV3IGEodCk6aSh0KT9uZXcgbyh0KTpuZXcgYSh0KX19LHsiLi9hcnJheSI6MjE3LCIuL3N0cmluZyI6MjIyLCIuL3ZhbGlkLWl0ZXJhYmxlIjoyMjMsImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIjoxODQsImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyI6MjE1LCJlczYtc3ltYm9sIjoyMjV9XSwyMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJlczUtZXh0L2FycmF5LyMvY2xlYXIiKSxhPXQoImVzNS1leHQvb2JqZWN0L2Fzc2lnbiIpLG89dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUiKSxzPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIiksbD10KCJkIiksYz10KCJkL2F1dG8tYmluZCIpLHU9dCgiZXM2LXN5bWJvbCIpLGg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGY9T2JqZWN0LmRlZmluZVByb3BlcnRpZXM7ZS5leHBvcnRzPW49ZnVuY3Rpb24odCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO2YodGhpcyx7X19saXN0X186bCgidyIscyh0KSksX19jb250ZXh0X186bCgidyIsZSksX19uZXh0SW5kZXhfXzpsKCJ3IiwwKX0pLGUmJihvKGUub24pLGUub24oIl9hZGQiLHRoaXMuX29uQWRkKSxlLm9uKCJfZGVsZXRlIix0aGlzLl9vbkRlbGV0ZSksZS5vbigiX2NsZWFyIix0aGlzLl9vbkNsZWFyKSl9LGRlbGV0ZSBuLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixmKG4ucHJvdG90eXBlLGEoe19uZXh0OmwoKGZ1bmN0aW9uKCl7dmFyIHQ7aWYodGhpcy5fX2xpc3RfXylyZXR1cm4gdGhpcy5fX3JlZG9fXyYmdm9pZCAwIT09KHQ9dGhpcy5fX3JlZG9fXy5zaGlmdCgpKT90OnRoaXMuX19uZXh0SW5kZXhfXzx0aGlzLl9fbGlzdF9fLmxlbmd0aD90aGlzLl9fbmV4dEluZGV4X18rKzp2b2lkIHRoaXMuX3VuQmluZCgpfSkpLG5leHQ6bCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlUmVzdWx0KHRoaXMuX25leHQoKSl9KSksX2NyZWF0ZVJlc3VsdDpsKChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD97ZG9uZTohMCx2YWx1ZTp2b2lkIDB9Ontkb25lOiExLHZhbHVlOnRoaXMuX3Jlc29sdmUodCl9fSkpLF9yZXNvbHZlOmwoKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fbGlzdF9fW3RdfSkpLF91bkJpbmQ6bCgoZnVuY3Rpb24oKXt0aGlzLl9fbGlzdF9fPW51bGwsZGVsZXRlIHRoaXMuX19yZWRvX18sdGhpcy5fX2NvbnRleHRfXyYmKHRoaXMuX19jb250ZXh0X18ub2ZmKCJfYWRkIix0aGlzLl9vbkFkZCksdGhpcy5fX2NvbnRleHRfXy5vZmYoIl9kZWxldGUiLHRoaXMuX29uRGVsZXRlKSx0aGlzLl9fY29udGV4dF9fLm9mZigiX2NsZWFyIix0aGlzLl9vbkNsZWFyKSx0aGlzLl9fY29udGV4dF9fPW51bGwpfSkpLHRvU3RyaW5nOmwoKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIisodGhpc1t1LnRvU3RyaW5nVGFnXXx8Ik9iamVjdCIpKyJdIn0pKX0sYyh7X29uQWRkOmwoKGZ1bmN0aW9uKHQpe3Q+PXRoaXMuX19uZXh0SW5kZXhfX3x8KCsrdGhpcy5fX25leHRJbmRleF9fLHRoaXMuX19yZWRvX18/KHRoaXMuX19yZWRvX18uZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtlPj10JiYodGhpcy5fX3JlZG9fX1tyXT0rK2UpfSksdGhpcyksdGhpcy5fX3JlZG9fXy5wdXNoKHQpKTpoKHRoaXMsIl9fcmVkb19fIixsKCJjIixbdF0pKSl9KSksX29uRGVsZXRlOmwoKGZ1bmN0aW9uKHQpe3ZhciBlO3Q+PXRoaXMuX19uZXh0SW5kZXhfX3x8KC0tdGhpcy5fX25leHRJbmRleF9fLHRoaXMuX19yZWRvX18mJigtMSE9PShlPXRoaXMuX19yZWRvX18uaW5kZXhPZih0KSkmJnRoaXMuX19yZWRvX18uc3BsaWNlKGUsMSksdGhpcy5fX3JlZG9fXy5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2U+dCYmKHRoaXMuX19yZWRvX19bcl09LS1lKX0pLHRoaXMpKSl9KSksX29uQ2xlYXI6bCgoZnVuY3Rpb24oKXt0aGlzLl9fcmVkb19fJiZpLmNhbGwodGhpcy5fX3JlZG9fXyksdGhpcy5fX25leHRJbmRleF9fPTB9KSl9KSkpLGgobi5wcm90b3R5cGUsdS5pdGVyYXRvcixsKChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpKX0se2Q6MTU1LCJkL2F1dG8tYmluZCI6MTU0LCJlczUtZXh0L2FycmF5LyMvY2xlYXIiOjE4MCwiZXM1LWV4dC9vYmplY3QvYXNzaWduIjoxOTMsImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIjoyMDksImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIjoyMTEsImVzNi1zeW1ib2wiOjIyNX1dLDIyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGk9dCgiZXM1LWV4dC9vYmplY3QvaXMtdmFsdWUiKSxhPXQoImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyIpLG89dCgiZXM2LXN5bWJvbCIpLml0ZXJhdG9yLHM9QXJyYXkuaXNBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISFpKHQpJiYoISFzKHQpfHwoISFhKHQpfHwoISFuKHQpfHwiZnVuY3Rpb24iPT10eXBlb2YgdFtvXSkpKX19LHsiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjE4NCwiZXM1LWV4dC9vYmplY3QvaXMtdmFsdWUiOjIwMCwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIjoyMTUsImVzNi1zeW1ib2wiOjIyNX1dLDIyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiKSxhPXQoImQiKSxvPXQoImVzNi1zeW1ib2wiKSxzPXQoIi4vIiksbD1PYmplY3QuZGVmaW5lUHJvcGVydHk7bj1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldyciKTt0PVN0cmluZyh0KSxzLmNhbGwodGhpcyx0KSxsKHRoaXMsIl9fbGVuZ3RoX18iLGEoIiIsdC5sZW5ndGgpKX0saSYmaShuLHMpLGRlbGV0ZSBuLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHMucHJvdG90eXBlLHtfbmV4dDphKChmdW5jdGlvbigpe2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXzx0aGlzLl9fbGVuZ3RoX18/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pKSxfcmVzb2x2ZTphKChmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX19saXN0X19bdF07cmV0dXJuIHRoaXMuX19uZXh0SW5kZXhfXz09PXRoaXMuX19sZW5ndGhfXz9yOihlPXIuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZlPD01NjMxOT9yK3RoaXMuX19saXN0X19bdGhpcy5fX25leHRJbmRleF9fKytdOnJ9KSl9KSxsKG4ucHJvdG90eXBlLG8udG9TdHJpbmdUYWcsYSgiYyIsIlN0cmluZyBJdGVyYXRvciIpKX0seyIuLyI6MjIwLGQ6MTU1LCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoyMDYsImVzNi1zeW1ib2wiOjIyNX1dLDIyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLWl0ZXJhYmxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBpdGVyYWJsZSIpO3JldHVybiB0fX0seyIuL2lzLWl0ZXJhYmxlIjoyMjF9XSwyMjQ6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24obixpKXsKLyohCiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZCkKICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZQogKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFCiAqIEB2ZXJzaW9uICAgdjQuMi44KzFlNjhkY2U2CiAqLwohZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOnQuRVM2UHJvbWlzZT1uKCl9KHRoaXMsKGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9dmFyIHI9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LGE9MCxvPXZvaWQgMCxzPXZvaWQgMCxsPWZ1bmN0aW9uKHQsZSl7Z1thXT10LGdbYSsxXT1lLDI9PT0oYSs9MikmJihzP3MobSk6XygpKX07dmFyIGM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCx1PWN8fHt9LGg9dS5NdXRhdGlvbk9ic2VydmVyfHx1LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsZj0idW5kZWZpbmVkIj09dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgbiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChuKSxwPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbDtmdW5jdGlvbiBkKCl7dmFyIHQ9c2V0VGltZW91dDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdChtLDEpfX12YXIgZz1uZXcgQXJyYXkoMWUzKTtmdW5jdGlvbiBtKCl7Zm9yKHZhciB0PTA7dDxhO3QrPTIpeygwLGdbdF0pKGdbdCsxXSksZ1t0XT12b2lkIDAsZ1t0KzFdPXZvaWQgMH1hPTB9dmFyIHYseSx4LGIsXz12b2lkIDA7ZnVuY3Rpb24gdyh0LGUpe3ZhciByPXRoaXMsbj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihNKTt2b2lkIDA9PT1uW2tdJiZEKG4pO3ZhciBpPXIuX3N0YXRlO2lmKGkpe3ZhciBhPWFyZ3VtZW50c1tpLTFdO2woKGZ1bmN0aW9uKCl7cmV0dXJuIHooaSxuLGEsci5fcmVzdWx0KX0pKX1lbHNlIFAocixuLHQsZSk7cmV0dXJuIG59ZnVuY3Rpb24gVCh0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I9PT10aGlzKXJldHVybiB0O3ZhciBlPW5ldyB0aGlzKE0pO3JldHVybiBTKGUsdCksZX1mP189ZnVuY3Rpb24oKXtyZXR1cm4gbi5uZXh0VGljayhtKX06aD8oeT0wLHg9bmV3IGgobSksYj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikseC5vYnNlcnZlKGIse2NoYXJhY3RlckRhdGE6ITB9KSxfPWZ1bmN0aW9uKCl7Yi5kYXRhPXk9Kyt5JTJ9KTpwPygodj1uZXcgTWVzc2FnZUNoYW5uZWwpLnBvcnQxLm9ubWVzc2FnZT1tLF89ZnVuY3Rpb24oKXtyZXR1cm4gdi5wb3J0Mi5wb3N0TWVzc2FnZSgwKX0pOl89dm9pZCAwPT09YyYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9RnVuY3Rpb24oInJldHVybiB0aGlzIikoKS5yZXF1aXJlKCJ2ZXJ0eCIpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Yobz10LnJ1bk9uTG9vcHx8dC5ydW5PbkNvbnRleHQpP2Z1bmN0aW9uKCl7byhtKX06ZCgpfWNhdGNoKHQpe3JldHVybiBkKCl9fSgpOmQoKTt2YXIgaz1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7ZnVuY3Rpb24gTSgpe31mdW5jdGlvbiBBKHQscixuKXtyLmNvbnN0cnVjdG9yPT09dC5jb25zdHJ1Y3RvciYmbj09PXcmJnIuY29uc3RydWN0b3IucmVzb2x2ZT09PVQ/ZnVuY3Rpb24odCxlKXsxPT09ZS5fc3RhdGU/Qyh0LGUuX3Jlc3VsdCk6Mj09PWUuX3N0YXRlP0wodCxlLl9yZXN1bHQpOlAoZSx2b2lkIDAsKGZ1bmN0aW9uKGUpe3JldHVybiBTKHQsZSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIEwodCxlKX0pKX0odCxyKTp2b2lkIDA9PT1uP0ModCxyKTplKG4pP2Z1bmN0aW9uKHQsZSxyKXtsKChmdW5jdGlvbih0KXt2YXIgbj0hMSxpPWZ1bmN0aW9uKHQsZSxyLG4pe3RyeXt0LmNhbGwoZSxyLG4pfWNhdGNoKHQpe3JldHVybiB0fX0ocixlLChmdW5jdGlvbihyKXtufHwobj0hMCxlIT09cj9TKHQscik6Qyh0LHIpKX0pLChmdW5jdGlvbihlKXtufHwobj0hMCxMKHQsZSkpfSksdC5fbGFiZWwpOyFuJiZpJiYobj0hMCxMKHQsaSkpfSksdCl9KHQscixuKTpDKHQscil9ZnVuY3Rpb24gUyh0LGUpe2lmKHQ9PT1lKUwodCxuZXcgVHlwZUVycm9yKCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmIikpO2Vsc2UgaWYoaT10eXBlb2Yobj1lKSxudWxsPT09bnx8Im9iamVjdCIhPT1pJiYiZnVuY3Rpb24iIT09aSlDKHQsZSk7ZWxzZXt2YXIgcj12b2lkIDA7dHJ5e3I9ZS50aGVufWNhdGNoKGUpe3JldHVybiB2b2lkIEwodCxlKX1BKHQsZSxyKX12YXIgbixpfWZ1bmN0aW9uIEUodCl7dC5fb25lcnJvciYmdC5fb25lcnJvcih0Ll9yZXN1bHQpLEkodCl9ZnVuY3Rpb24gQyh0LGUpe3ZvaWQgMD09PXQuX3N0YXRlJiYodC5fcmVzdWx0PWUsdC5fc3RhdGU9MSwwIT09dC5fc3Vic2NyaWJlcnMubGVuZ3RoJiZsKEksdCkpfWZ1bmN0aW9uIEwodCxlKXt2b2lkIDA9PT10Ll9zdGF0ZSYmKHQuX3N0YXRlPTIsdC5fcmVzdWx0PWUsbChFLHQpKX1mdW5jdGlvbiBQKHQsZSxyLG4pe3ZhciBpPXQuX3N1YnNjcmliZXJzLGE9aS5sZW5ndGg7dC5fb25lcnJvcj1udWxsLGlbYV09ZSxpW2ErMV09cixpW2ErMl09biwwPT09YSYmdC5fc3RhdGUmJmwoSSx0KX1mdW5jdGlvbiBJKHQpe3ZhciBlPXQuX3N1YnNjcmliZXJzLHI9dC5fc3RhdGU7aWYoMCE9PWUubGVuZ3RoKXtmb3IodmFyIG49dm9pZCAwLGk9dm9pZCAwLGE9dC5fcmVzdWx0LG89MDtvPGUubGVuZ3RoO28rPTMpbj1lW29dLGk9ZVtvK3JdLG4/eihyLG4saSxhKTppKGEpO3QuX3N1YnNjcmliZXJzLmxlbmd0aD0wfX1mdW5jdGlvbiB6KHQscixuLGkpe3ZhciBhPWUobiksbz12b2lkIDAscz12b2lkIDAsbD0hMDtpZihhKXt0cnl7bz1uKGkpfWNhdGNoKHQpe2w9ITEscz10fWlmKHI9PT1vKXJldHVybiB2b2lkIEwocixuZXcgVHlwZUVycm9yKCJBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuIikpfWVsc2Ugbz1pO3ZvaWQgMCE9PXIuX3N0YXRlfHwoYSYmbD9TKHIsbyk6ITE9PT1sP0wocixzKToxPT09dD9DKHIsbyk6Mj09PXQmJkwocixvKSl9dmFyIE89MDtmdW5jdGlvbiBEKHQpe3Rba109TysrLHQuX3N0YXRlPXZvaWQgMCx0Ll9yZXN1bHQ9dm9pZCAwLHQuX3N1YnNjcmliZXJzPVtdfXZhciBSPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I9dCx0aGlzLnByb21pc2U9bmV3IHQoTSksdGhpcy5wcm9taXNlW2tdfHxEKHRoaXMucHJvbWlzZSkscihlKT8odGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWUubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9DKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoZSksMD09PXRoaXMuX3JlbWFpbmluZyYmQyh0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KSkpOkwodGhpcy5wcm9taXNlLG5ldyBFcnJvcigiQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5IikpfXJldHVybiB0LnByb3RvdHlwZS5fZW51bWVyYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO3ZvaWQgMD09PXRoaXMuX3N0YXRlJiZlPHQubGVuZ3RoO2UrKyl0aGlzLl9lYWNoRW50cnkodFtlXSxlKX0sdC5wcm90b3R5cGUuX2VhY2hFbnRyeT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3Isbj1yLnJlc29sdmU7aWYobj09PVQpe3ZhciBpPXZvaWQgMCxhPXZvaWQgMCxvPSExO3RyeXtpPXQudGhlbn1jYXRjaCh0KXtvPSEwLGE9dH1pZihpPT09dyYmdm9pZCAwIT09dC5fc3RhdGUpdGhpcy5fc2V0dGxlZEF0KHQuX3N0YXRlLGUsdC5fcmVzdWx0KTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBpKXRoaXMuX3JlbWFpbmluZy0tLHRoaXMuX3Jlc3VsdFtlXT10O2Vsc2UgaWYocj09PUYpe3ZhciBzPW5ldyByKE0pO28/TChzLGEpOkEocyx0LGkpLHRoaXMuX3dpbGxTZXR0bGVBdChzLGUpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG5ldyByKChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pKSxlKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuKHQpLGUpfSx0LnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnByb21pc2U7dm9pZCAwPT09bi5fc3RhdGUmJih0aGlzLl9yZW1haW5pbmctLSwyPT09dD9MKG4scik6dGhpcy5fcmVzdWx0W2VdPXIpLDA9PT10aGlzLl9yZW1haW5pbmcmJkMobix0aGlzLl9yZXN1bHQpfSx0LnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztQKHQsdm9pZCAwLChmdW5jdGlvbih0KXtyZXR1cm4gci5fc2V0dGxlZEF0KDEsZSx0KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gci5fc2V0dGxlZEF0KDIsZSx0KX0pKX0sdH0oKTt2YXIgRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dGhpc1trXT1PKyssdGhpcy5fcmVzdWx0PXRoaXMuX3N0YXRlPXZvaWQgMCx0aGlzLl9zdWJzY3JpYmVycz1bXSxNIT09ZSYmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3IiKX0oKSx0aGlzIGluc3RhbmNlb2YgdD9mdW5jdGlvbih0LGUpe3RyeXtlKChmdW5jdGlvbihlKXtTKHQsZSl9KSwoZnVuY3Rpb24oZSl7TCh0LGUpfSkpfWNhdGNoKGUpe0wodCxlKX19KHRoaXMsZSk6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKX0oKSl9cmV0dXJuIHQucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4obnVsbCx0KX0sdC5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLmNvbnN0cnVjdG9yO3JldHVybiBlKHQpP3RoaXMudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgZX0pKX0pKTp0aGlzLnRoZW4odCx0KX0sdH0oKTtyZXR1cm4gRi5wcm90b3R5cGUudGhlbj13LEYuYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUih0aGlzLHQpLnByb21pc2V9LEYucmFjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiByKHQpP25ldyBlKChmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPTA7YTxpO2ErKyllLnJlc29sdmUodFthXSkudGhlbihyLG4pfSkpOm5ldyBlKChmdW5jdGlvbih0LGUpe3JldHVybiBlKG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4iKSl9KSl9LEYucmVzb2x2ZT1ULEYucmVqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzKE0pO3JldHVybiBMKGUsdCksZX0sRi5fc2V0U2NoZWR1bGVyPWZ1bmN0aW9uKHQpe3M9dH0sRi5fc2V0QXNhcD1mdW5jdGlvbih0KXtsPXR9LEYuX2FzYXA9bCxGLnBvbHlmaWxsPWZ1bmN0aW9uKCl7dmFyIHQ9dm9pZCAwO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgaSl0PWk7ZWxzZSBpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpdD1zZWxmO2Vsc2UgdHJ5e3Q9RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoInBvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCIpfXZhciBlPXQuUHJvbWlzZTtpZihlKXt2YXIgcj1udWxsO3RyeXtyPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLnJlc29sdmUoKSl9Y2F0Y2godCl7fWlmKCJbb2JqZWN0IFByb21pc2VdIj09PXImJiFlLmNhc3QpcmV0dXJufXQuUHJvbWlzZT1GfSxGLlByb21pc2U9RixGfSkpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtfcHJvY2Vzczo1MDB9XSwyMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP3QoImV4dC9nbG9iYWwtdGhpcyIpLlN5bWJvbDp0KCIuL3BvbHlmaWxsIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MjI2LCIuL3BvbHlmaWxsIjoyMzEsImV4dC9nbG9iYWwtdGhpcyI6MjM4fV0sMjI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImV4dC9nbG9iYWwtdGhpcyIpLGk9e29iamVjdDohMCxzeW1ib2w6ITB9O2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9bi5TeW1ib2w7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJuITE7dD1lKCJ0ZXN0IHN5bWJvbCIpO3RyeXtTdHJpbmcodCl9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuISFpW3R5cGVvZiBlLml0ZXJhdG9yXSYmKCEhaVt0eXBlb2YgZS50b1ByaW1pdGl2ZV0mJiEhaVt0eXBlb2YgZS50b1N0cmluZ1RhZ10pfX0seyJleHQvZ2xvYmFsLXRoaXMiOjIzOH1dLDIyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISF0JiYoInN5bWJvbCI9PXR5cGVvZiB0fHwhIXQuY29uc3RydWN0b3ImJigiU3ltYm9sIj09PXQuY29uc3RydWN0b3IubmFtZSYmIlN5bWJvbCI9PT10W3QuY29uc3RydWN0b3IudG9TdHJpbmdUYWddKSl9fSx7fV0sMjI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQiKSxpPU9iamVjdC5jcmVhdGUsYT1PYmplY3QuZGVmaW5lUHJvcGVydHksbz1PYmplY3QucHJvdG90eXBlLHM9aShudWxsKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsaT0wO3NbdCsoaXx8IiIpXTspKytpO3JldHVybiBzW3QrPWl8fCIiXT0hMCxhKG8sZT0iQEAiK3Qsbi5ncyhudWxsLChmdW5jdGlvbih0KXtyfHwocj0hMCxhKHRoaXMsZSxuKHQpKSxyPSExKX0pKSksZX19LHtkOjE1NX1dLDIyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkIiksaT10KCJleHQvZ2xvYmFsLXRoaXMiKS5TeW1ib2w7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LHtoYXNJbnN0YW5jZTpuKCIiLGkmJmkuaGFzSW5zdGFuY2V8fHQoImhhc0luc3RhbmNlIikpLGlzQ29uY2F0U3ByZWFkYWJsZTpuKCIiLGkmJmkuaXNDb25jYXRTcHJlYWRhYmxlfHx0KCJpc0NvbmNhdFNwcmVhZGFibGUiKSksaXRlcmF0b3I6bigiIixpJiZpLml0ZXJhdG9yfHx0KCJpdGVyYXRvciIpKSxtYXRjaDpuKCIiLGkmJmkubWF0Y2h8fHQoIm1hdGNoIikpLHJlcGxhY2U6bigiIixpJiZpLnJlcGxhY2V8fHQoInJlcGxhY2UiKSksc2VhcmNoOm4oIiIsaSYmaS5zZWFyY2h8fHQoInNlYXJjaCIpKSxzcGVjaWVzOm4oIiIsaSYmaS5zcGVjaWVzfHx0KCJzcGVjaWVzIikpLHNwbGl0Om4oIiIsaSYmaS5zcGxpdHx8dCgic3BsaXQiKSksdG9QcmltaXRpdmU6bigiIixpJiZpLnRvUHJpbWl0aXZlfHx0KCJ0b1ByaW1pdGl2ZSIpKSx0b1N0cmluZ1RhZzpuKCIiLGkmJmkudG9TdHJpbmdUYWd8fHQoInRvU3RyaW5nVGFnIikpLHVuc2NvcGFibGVzOm4oIiIsaSYmaS51bnNjb3BhYmxlc3x8dCgidW5zY29wYWJsZXMiKSl9KX19LHtkOjE1NSwiZXh0L2dsb2JhbC10aGlzIjoyMzh9XSwyMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZCIpLGk9dCgiLi4vLi4vLi4vdmFsaWRhdGUtc3ltYm9sIiksYT1PYmplY3QuY3JlYXRlKG51bGwpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModCx7Zm9yOm4oKGZ1bmN0aW9uKGUpe3JldHVybiBhW2VdP2FbZV06YVtlXT10KFN0cmluZyhlKSl9KSksa2V5Rm9yOm4oKGZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlIGluIGkodCksYSlpZihhW2VdPT09dClyZXR1cm4gZX0pKX0pfX0seyIuLi8uLi8uLi92YWxpZGF0ZS1zeW1ib2wiOjIzMixkOjE1NX1dLDIzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbz10KCJkIikscz10KCIuL3ZhbGlkYXRlLXN5bWJvbCIpLGw9dCgiZXh0L2dsb2JhbC10aGlzIikuU3ltYm9sLGM9dCgiLi9saWIvcHJpdmF0ZS9nZW5lcmF0ZS1uYW1lIiksdT10KCIuL2xpYi9wcml2YXRlL3NldHVwL3N0YW5kYXJkLXN5bWJvbHMiKSxoPXQoIi4vbGliL3ByaXZhdGUvc2V0dXAvc3ltYm9sLXJlZ2lzdHJ5IiksZj1PYmplY3QuY3JlYXRlLHA9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsZD1PYmplY3QuZGVmaW5lUHJvcGVydHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwpdHJ5e1N0cmluZyhsKCkpLGE9ITB9Y2F0Y2godCl7fWVsc2UgbD1udWxsO2k9ZnVuY3Rpb24odCl7aWYodGhpcyBpbnN0YW5jZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7cmV0dXJuIG4odCl9LGUuZXhwb3J0cz1uPWZ1bmN0aW9uIHQoZSl7dmFyIHI7aWYodGhpcyBpbnN0YW5jZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7cmV0dXJuIGE/bChlKToocj1mKGkucHJvdG90eXBlKSxlPXZvaWQgMD09PWU/IiI6U3RyaW5nKGUpLHAocix7X19kZXNjcmlwdGlvbl9fOm8oIiIsZSksX19uYW1lX186bygiIixjKGUpKX0pKX0sdShuKSxoKG4pLHAoaS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOm8obiksdG9TdHJpbmc6bygiIiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX25hbWVfX30pKX0pLHAobi5wcm90b3R5cGUse3RvU3RyaW5nOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIlN5bWJvbCAoIitzKHRoaXMpLl9fZGVzY3JpcHRpb25fXysiKSJ9KSksdmFsdWVPZjpvKChmdW5jdGlvbigpe3JldHVybiBzKHRoaXMpfSkpfSksZChuLnByb3RvdHlwZSxuLnRvUHJpbWl0aXZlLG8oIiIsKGZ1bmN0aW9uKCl7dmFyIHQ9cyh0aGlzKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0LnRvU3RyaW5nKCl9KSkpLGQobi5wcm90b3R5cGUsbi50b1N0cmluZ1RhZyxvKCJjIiwiU3ltYm9sIikpLGQoaS5wcm90b3R5cGUsbi50b1N0cmluZ1RhZyxvKCJjIixuLnByb3RvdHlwZVtuLnRvU3RyaW5nVGFnXSkpLGQoaS5wcm90b3R5cGUsbi50b1ByaW1pdGl2ZSxvKCJjIixuLnByb3RvdHlwZVtuLnRvUHJpbWl0aXZlXSkpfSx7Ii4vbGliL3ByaXZhdGUvZ2VuZXJhdGUtbmFtZSI6MjI4LCIuL2xpYi9wcml2YXRlL3NldHVwL3N0YW5kYXJkLXN5bWJvbHMiOjIyOSwiLi9saWIvcHJpdmF0ZS9zZXR1cC9zeW1ib2wtcmVnaXN0cnkiOjIzMCwiLi92YWxpZGF0ZS1zeW1ib2wiOjIzMixkOjE1NSwiZXh0L2dsb2JhbC10aGlzIjoyMzh9XSwyMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1zeW1ib2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgc3ltYm9sIik7cmV0dXJuIHR9fSx7Ii4vaXMtc3ltYm9sIjoyMjd9XSwyMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP1dlYWtNYXA6dCgiLi9wb2x5ZmlsbCIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjIzNCwiLi9wb2x5ZmlsbCI6MjM2fV0sMjM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFdlYWtNYXApcmV0dXJuITE7dHJ5e3Q9bmV3IFdlYWtNYXAoW1tlPXt9LCJvbmUiXSxbe30sInR3byJdLFt7fSwidGhyZWUiXV0pfWNhdGNoKHQpe3JldHVybiExfXJldHVybiJbb2JqZWN0IFdlYWtNYXBdIj09PVN0cmluZyh0KSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNldCYmKHQuc2V0KHt9LDEpPT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlbGV0ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmhhcyYmIm9uZSI9PT10LmdldChlKSkpKSl9fSx7fV0sMjM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCYmIltvYmplY3QgV2Vha01hcF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBXZWFrTWFwKX0se31dLDIzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIiksYT10KCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIiksbz10KCJlczUtZXh0L29iamVjdC92YWxpZC1vYmplY3QiKSxzPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIiksbD10KCJlczUtZXh0L3N0cmluZy9yYW5kb20tdW5pcSIpLGM9dCgiZCIpLHU9dCgiZXM2LWl0ZXJhdG9yL2dldCIpLGg9dCgiZXM2LWl0ZXJhdG9yL2Zvci1vZiIpLGY9dCgiZXM2LXN5bWJvbCIpLnRvU3RyaW5nVGFnLHA9dCgiLi9pcy1uYXRpdmUtaW1wbGVtZW50ZWQiKSxkPUFycmF5LmlzQXJyYXksZz1PYmplY3QuZGVmaW5lUHJvcGVydHksbT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHY9T2JqZWN0LmdldFByb3RvdHlwZU9mO2UuZXhwb3J0cz1uPWZ1bmN0aW9uKCl7dmFyIHQsZT1hcmd1bWVudHNbMF07aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldyciKTtyZXR1cm4gdD1wJiZhJiZXZWFrTWFwIT09bj9hKG5ldyBXZWFrTWFwLHYodGhpcykpOnRoaXMsaShlKSYmKGQoZSl8fChlPXUoZSkpKSxnKHQsIl9fd2Vha01hcERhdGFfXyIsYygiYyIsIiR3ZWFrTWFwJCIrbCgpKSksZT8oaChlLChmdW5jdGlvbihlKXtzKGUpLHQuc2V0KGVbMF0sZVsxXSl9KSksdCk6dH0scCYmKGEmJmEobixXZWFrTWFwKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFdlYWtNYXAucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpjKG4pfSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLHtkZWxldGU6YygoZnVuY3Rpb24odCl7cmV0dXJuISFtLmNhbGwobyh0KSx0aGlzLl9fd2Vha01hcERhdGFfXykmJihkZWxldGUgdFt0aGlzLl9fd2Vha01hcERhdGFfX10sITApfSkpLGdldDpjKChmdW5jdGlvbih0KXtpZihtLmNhbGwobyh0KSx0aGlzLl9fd2Vha01hcERhdGFfXykpcmV0dXJuIHRbdGhpcy5fX3dlYWtNYXBEYXRhX19dfSkpLGhhczpjKChmdW5jdGlvbih0KXtyZXR1cm4gbS5jYWxsKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18pfSkpLHNldDpjKChmdW5jdGlvbih0LGUpe3JldHVybiBnKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18sYygiYyIsZSkpLHRoaXN9KSksdG9TdHJpbmc6YygoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBXZWFrTWFwXSJ9KSl9KSxnKG4ucHJvdG90eXBlLGYsYygiYyIsIldlYWtNYXAiKSl9LHsiLi9pcy1uYXRpdmUtaW1wbGVtZW50ZWQiOjIzNSxkOjE1NSwiZXM1LWV4dC9vYmplY3QvaXMtdmFsdWUiOjIwMCwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiI6MjA2LCJlczUtZXh0L29iamVjdC92YWxpZC1vYmplY3QiOjIxMCwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiOjIxMSwiZXM1LWV4dC9zdHJpbmcvcmFuZG9tLXVuaXEiOjIxNiwiZXM2LWl0ZXJhdG9yL2Zvci1vZiI6MjE4LCJlczYtaXRlcmF0b3IvZ2V0IjoyMTksImVzNi1zeW1ib2wiOjIyNX1dLDIzNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmKXJldHVybiBzZWxmO2lmKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpcmV0dXJuIHdpbmRvdzt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIGdsb2JhbCBgdGhpc2AiKX07ZS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYodGhpcylyZXR1cm4gdGhpczt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsIl9fZ2xvYmFsX18iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sY29uZmlndXJhYmxlOiEwfSl9Y2F0Y2godCl7cmV0dXJuIG4oKX10cnl7cmV0dXJuIF9fZ2xvYmFsX198fG4oKX1maW5hbGx5e2RlbGV0ZSBPYmplY3QucHJvdG90eXBlLl9fZ2xvYmFsX199fSgpfSx7fV0sMjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9nbG9iYWxUaGlzOnQoIi4vaW1wbGVtZW50YXRpb24iKX0seyIuL2ltcGxlbWVudGF0aW9uIjoyMzcsIi4vaXMtaW1wbGVtZW50ZWQiOjIzOX1dLDIzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJighIWdsb2JhbFRoaXMmJmdsb2JhbFRoaXMuQXJyYXk9PT1BcnJheSl9fSx7fV0sMjQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZXx8MCxpPXJ8fDE7cmV0dXJuW1t0WzEyXSt0WzBdLHRbMTNdK3RbMV0sdFsxNF0rdFsyXSx0WzE1XSt0WzNdXSxbdFsxMl0tdFswXSx0WzEzXS10WzFdLHRbMTRdLXRbMl0sdFsxNV0tdFszXV0sW3RbMTJdK3RbNF0sdFsxM10rdFs1XSx0WzE0XSt0WzZdLHRbMTVdK3RbN11dLFt0WzEyXS10WzRdLHRbMTNdLXRbNV0sdFsxNF0tdFs2XSx0WzE1XS10WzddXSxbbip0WzEyXSt0WzhdLG4qdFsxM10rdFs5XSxuKnRbMTRdK3RbMTBdLG4qdFsxNV0rdFsxMV1dLFtpKnRbMTJdLXRbOF0saSp0WzEzXS10WzldLGkqdFsxNF0tdFsxMF0saSp0WzE1XS10WzExXV1dfX0se31dLDI0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpcy1zdHJpbmctYmxhbmsiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7aWYoInN0cmluZyI9PT1lKXt2YXIgcj10O2lmKDA9PT0odD0rdCkmJm4ocikpcmV0dXJuITF9ZWxzZSBpZigibnVtYmVyIiE9PWUpcmV0dXJuITE7cmV0dXJuIHQtdDwxfX0seyJpcy1zdHJpbmctYmxhbmsiOjQ0NH1dLDI0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBvKFswXSxbMF0sMCk7Y2FzZSAxOnJldHVybiJudW1iZXIiPT10eXBlb2YgdD9uZXcgbyhuPWwodCksbiwwKTpuZXcgbyh0LGwodC5sZW5ndGgpLDApO2Nhc2UgMjppZigibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBuPWwodC5sZW5ndGgpO3JldHVybiBuZXcgbyh0LG4sK2UpfXI9MDtjYXNlIDM6aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoInN0YXRlIGFuZCB2ZWxvY2l0eSBsZW5ndGhzIG11c3QgbWF0Y2giKTtyZXR1cm4gbmV3IG8odCxlLHIpfX07dmFyIG49dCgiY3ViaWMtaGVybWl0ZSIpLGk9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4oZSxNYXRoLm1heCh0LHIpKX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10Lmxlbmd0aCx0aGlzLmJvdW5kcz1bbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKSxuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pXTtmb3IodmFyIG49MDtuPHRoaXMuZGltZW5zaW9uOysrbil0aGlzLmJvdW5kc1swXVtuXT0tMS8wLHRoaXMuYm91bmRzWzFdW25dPTEvMDt0aGlzLl9zdGF0ZT10LnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3ZlbG9jaXR5PWUuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdGltZT1bcl0sdGhpcy5fc2NyYXRjaD1bdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKV19dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09MDtyZXR1cm4gZX1zLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPWkuZ3QodGhpcy5fdGltZSx0KS0xO2U8PTB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX3N0YXRlLnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pLHRoaXMuX3ZlbG9jaXR5LnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pKX0scy5jdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsbz1pLmxlKGUsdCkscz10aGlzLl9zY3JhdGNoWzBdLGw9dGhpcy5fc3RhdGUsYz10aGlzLl92ZWxvY2l0eSx1PXRoaXMuZGltZW5zaW9uLGg9dGhpcy5ib3VuZHM7aWYobzwwKWZvcih2YXIgZj11LTEscD0wO3A8dTsrK3AsLS1mKXNbcF09bFtmXTtlbHNlIGlmKG8+PXItMSl7Zj1sLmxlbmd0aC0xO3ZhciBkPXQtZVtyLTFdO2ZvcihwPTA7cDx1OysrcCwtLWYpc1twXT1sW2ZdK2QqY1tmXX1lbHNle2Y9dSoobysxKS0xO3ZhciBnPWVbb10sbT1lW28rMV0tZ3x8MSx2PXRoaXMuX3NjcmF0Y2hbMV0seT10aGlzLl9zY3JhdGNoWzJdLHg9dGhpcy5fc2NyYXRjaFszXSxiPXRoaXMuX3NjcmF0Y2hbNF0sXz0hMDtmb3IocD0wO3A8dTsrK3AsLS1mKXZbcF09bFtmXSx4W3BdPWNbZl0qbSx5W3BdPWxbZit1XSxiW3BdPWNbZit1XSptLF89XyYmdltwXT09PXlbcF0mJnhbcF09PT1iW3BdJiYwPT09eFtwXTtpZihfKWZvcihwPTA7cDx1OysrcClzW3BdPXZbcF07ZWxzZSBuKHYseCx5LGIsKHQtZykvbSxzKX12YXIgdz1oWzBdLFQ9aFsxXTtmb3IocD0wO3A8dTsrK3Apc1twXT1hKHdbcF0sVFtwXSxzW3BdKTtyZXR1cm4gc30scy5kY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLGE9aS5sZShlLHQpLG89dGhpcy5fc2NyYXRjaFswXSxzPXRoaXMuX3N0YXRlLGw9dGhpcy5fdmVsb2NpdHksYz10aGlzLmRpbWVuc2lvbjtpZihhPj1yLTEpZm9yKHZhciB1PXMubGVuZ3RoLTEsaD0oZVtyLTFdLDApO2g8YzsrK2gsLS11KW9baF09bFt1XTtlbHNle3U9YyooYSsxKS0xO3ZhciBmPWVbYV0scD1lW2ErMV0tZnx8MSxkPXRoaXMuX3NjcmF0Y2hbMV0sZz10aGlzLl9zY3JhdGNoWzJdLG09dGhpcy5fc2NyYXRjaFszXSx2PXRoaXMuX3NjcmF0Y2hbNF0seT0hMDtmb3IoaD0wO2g8YzsrK2gsLS11KWRbaF09c1t1XSxtW2hdPWxbdV0qcCxnW2hdPXNbdStjXSx2W2hdPWxbdStjXSpwLHk9eSYmZFtoXT09PWdbaF0mJm1baF09PT12W2hdJiYwPT09bVtoXTtpZih5KWZvcihoPTA7aDxjOysraClvW2hdPTA7ZWxzZXtuLmRlcml2YXRpdmUoZCxtLGcsdiwodC1mKS9wLG8pO2ZvcihoPTA7aDxjOysraClvW2hdLz1wfX1yZXR1cm4gb30scy5sYXN0VD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbWU7cmV0dXJuIHRbdC5sZW5ndGgtMV19LHMuc3RhYmxlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZlbG9jaXR5LGU9dC5sZW5ndGgscj10aGlzLmRpbWVuc2lvbi0xO3I+PTA7LS1yKWlmKHRbLS1lXSlyZXR1cm4hMTtyZXR1cm4hMH0scy5qdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXTt0aGlzLl90aW1lLnB1c2goZSx0KTtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgaD0wO2g8cjsrK2gpbi5wdXNoKG5bbysrXSksaS5wdXNoKDApO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IoaD1yO2g+MDstLWgpbi5wdXNoKGEobFtoLTFdLGNbaC0xXSxhcmd1bWVudHNbaF0pKSxpLnB1c2goMCl9fSxzLnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10LWUsbD10aGlzLmJvdW5kcyxjPWxbMF0sdT1sWzFdLGg9cz4xZS02PzEvczowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9cjtmPjA7LS1mKXt2YXIgcD1hKGNbZi0xXSx1W2YtMV0sYXJndW1lbnRzW2ZdKTtuLnB1c2gocCksaS5wdXNoKChwLW5bbysrXSkqaCl9fX0scy5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaW1lbnNpb247aWYoISh0PHRoaXMubGFzdFQoKXx8YXJndW1lbnRzLmxlbmd0aCE9PWUrMSkpe3ZhciByPXRoaXMuX3N0YXRlLG49dGhpcy5fdmVsb2NpdHksaT10aGlzLmJvdW5kcyxvPWlbMF0scz1pWzFdO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGw9ZTtsPjA7LS1sKXIucHVzaChhKG9bbC0xXSxzW2wtMV0sYXJndW1lbnRzW2xdKSksbi5wdXNoKDApfX0scy5tb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDw9ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV0sdT10LWUsaD11PjFlLTY/MS91OjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgZj1yO2Y+MDstLWYpe3ZhciBwPWFyZ3VtZW50c1tmXTtuLnB1c2goYShsW2YtMV0sY1tmLTFdLG5bbysrXStwKSksaS5wdXNoKHAqaCl9fX0scy5pZGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKTtpZighKHQ8ZSkpe3ZhciByPXRoaXMuZGltZW5zaW9uLG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXIscz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9ci0xO2g+PTA7LS1oKW4ucHVzaChhKGxbaF0sY1toXSxuW29dK3UqaVtvXSkpLGkucHVzaCgwKSxvKz0xfX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjI0MywiY3ViaWMtaGVybWl0ZSI6MTUwfV0sMjQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEpe3ZhciBvPVsiZnVuY3Rpb24gIix0LCIoYSxsLGgsIixuLmpvaW4oIiwiKSwiKXsiLGE/IiI6InZhciBpPSIscj8ibC0xIjoiaCsxIiwiO3doaWxlKGw8PWgpe3ZhciBtPShsK2gpPj4+MSx4PWEiLGk/Ii5nZXQobSkiOiJbbV0iXTtyZXR1cm4gYT9lLmluZGV4T2YoImMiKTwwP28ucHVzaCgiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpeyIpOm8ucHVzaCgiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXsiKTpvLnB1c2goIjtpZigiLGUsIil7aT1tOyIpLHI/by5wdXNoKCJsPW0rMX1lbHNle2g9bS0xfSIpOm8ucHVzaCgiaD1tLTF9ZWxzZXtsPW0rMX0iKSxvLnB1c2goIn0iKSxhP28ucHVzaCgicmV0dXJuIC0xfTsiKTpvLnB1c2goInJldHVybiBpfTsiKSxvLmpvaW4oIiIpfWZ1bmN0aW9uIGkodCxlLHIsaSl7cmV0dXJuIG5ldyBGdW5jdGlvbihbbigiQSIsIngiK3QrInkiLGUsWyJ5Il0sITEsaSksbigiQiIsIngiK3QrInkiLGUsWyJ5Il0sITAsaSksbigiUCIsImMoeCx5KSIrdCsiMCIsZSxbInkiLCJjIl0sITEsaSksbigiUSIsImMoeCx5KSIrdCsiMCIsZSxbInkiLCJjIl0sITAsaSksImZ1bmN0aW9uIGRpc3BhdGNoQnNlYXJjaCIsciwiKGEseSxjLGwsaCl7aWYoYS5zaGFwZSl7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFEoYSwobD09PXVuZGVmaW5lZCk/MDpsfDAsKGg9PT11bmRlZmluZWQpP2Euc2hhcGVbMF0tMTpofDAseSxjKX1lbHNle3JldHVybiBCKGEsKGM9PT11bmRlZmluZWQpPzA6Y3wwLChsPT09dW5kZWZpbmVkKT9hLnNoYXBlWzBdLTE6bHwwLHkpfX1lbHNle2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBQKGEsKGw9PT11bmRlZmluZWQpPzA6bHwwLChoPT09dW5kZWZpbmVkKT9hLmxlbmd0aC0xOmh8MCx5LGMpfWVsc2V7cmV0dXJuIEEoYSwoYz09PXVuZGVmaW5lZCk/MDpjfDAsKGw9PT11bmRlZmluZWQpP2EubGVuZ3RoLTE6bHwwLHkpfX19cmV0dXJuIGRpc3BhdGNoQnNlYXJjaCIscl0uam9pbigiIikpKCl9ZS5leHBvcnRzPXtnZTppKCI+PSIsITEsIkdFIiksZ3Q6aSgiPiIsITEsIkdUIiksbHQ6aSgiPCIsITAsIkxUIiksbGU6aSgiPD0iLCEwLCJMRSIpLGVxOmkoIi0iLCEwLCJFUSIsITApfX0se31dLDI0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImR0eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHNwZWNpZnkgZGF0YSBhcyBmaXJzdCBwYXJhbWV0ZXIiKTtpZihyPTB8KyhyfHwwKSxBcnJheS5pc0FycmF5KHQpJiZ0WzBdJiYibnVtYmVyIj09dHlwZW9mIHRbMF1bMF0pe3ZhciBpLGEsbyxzLGw9dFswXS5sZW5ndGgsYz10Lmxlbmd0aCpsO2UmJiJzdHJpbmciIT10eXBlb2YgZXx8KGU9bmV3KG4oZXx8ImZsb2F0MzIiKSkoYytyKSk7dmFyIHU9ZS5sZW5ndGgtcjtpZihjIT09dSl0aHJvdyBuZXcgRXJyb3IoInNvdXJjZSBsZW5ndGggIitjKyIgKCIrbCsieCIrdC5sZW5ndGgrIikgZG9lcyBub3QgbWF0Y2ggZGVzdGluYXRpb24gbGVuZ3RoICIrdSk7Zm9yKGk9MCxvPXI7aTx0Lmxlbmd0aDtpKyspZm9yKGE9MDthPGw7YSsrKWVbbysrXT1udWxsPT09dFtpXVthXT9OYU46dFtpXVthXX1lbHNlIGlmKGUmJiJzdHJpbmciIT10eXBlb2YgZSllLnNldCh0LHIpO2Vsc2V7dmFyIGg9bihlfHwiZmxvYXQzMiIpO2lmKEFycmF5LmlzQXJyYXkodCl8fCJhcnJheSI9PT1lKWZvcihlPW5ldyBoKHQubGVuZ3RoK3IpLGk9MCxvPXIscz1lLmxlbmd0aDtvPHM7bysrLGkrKyllW29dPW51bGw9PT10W2ldP05hTjp0W2ldO2Vsc2UgMD09PXI/ZT1uZXcgaCh0KTooZT1uZXcgaCh0Lmxlbmd0aCtyKSkuc2V0KHQscil9cmV0dXJuIGV9fSx7ZHR5cGU6MTc1fV0sMjQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNzcy1mb250L3N0cmluZ2lmeSIpLGk9WzMyLDEyNl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZT90LnNoYXBlOnQuY2FudmFzP1t0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHRdOls1MTIsNTEyXSxyPXQuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxhPXQuZm9udCxvPSJudW1iZXIiPT10eXBlb2YgdC5zdGVwP1t0LnN0ZXAsdC5zdGVwXTp0LnN0ZXB8fFszMiwzMl0scz10LmNoYXJzfHxpO2EmJiJzdHJpbmciIT10eXBlb2YgYSYmKGE9bihhKSk7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYoMj09PXMubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHNbMF0mJiJudW1iZXIiPT10eXBlb2Ygc1sxXSl7Zm9yKHZhciBsPVtdLGM9c1swXSx1PTA7Yzw9c1sxXTtjKyspbFt1KytdPVN0cmluZy5mcm9tQ2hhckNvZGUoYyk7cz1sfX1lbHNlIHM9U3RyaW5nKHMpLnNwbGl0KCIiKTtlPWUuc2xpY2UoKSxyLndpZHRoPWVbMF0sci5oZWlnaHQ9ZVsxXTt2YXIgaD1yLmdldENvbnRleHQoIjJkIik7aC5maWxsU3R5bGU9IiMwMDAiLGguZmlsbFJlY3QoMCwwLHIud2lkdGgsci5oZWlnaHQpLGguZm9udD1hLGgudGV4dEFsaWduPSJjZW50ZXIiLGgudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGguZmlsbFN0eWxlPSIjZmZmIjt2YXIgZj1vWzBdLzIscD1vWzFdLzI7Zm9yKGM9MDtjPHMubGVuZ3RoO2MrKyloLmZpbGxUZXh0KHNbY10sZixwKSwoZis9b1swXSk+ZVswXS1vWzBdLzImJihmPW9bMF0vMixwKz1vWzFdKTtyZXR1cm4gcn19LHsiY3NzLWZvbnQvc3RyaW5naWZ5IjoxNDd9XSwyNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2V8fChlPXt9KSwoInN0cmluZyI9PXR5cGVvZiB0fHxBcnJheS5pc0FycmF5KHQpKSYmKGUuZmFtaWx5PXQpO3ZhciByPUFycmF5LmlzQXJyYXkoZS5mYW1pbHkpP2UuZmFtaWx5LmpvaW4oIiwgIik6ZS5mYW1pbHk7aWYoIXIpdGhyb3cgRXJyb3IoImBmYW1pbHlgIG11c3QgYmUgZGVmaW5lZCIpO3ZhciBzPWUuc2l6ZXx8ZS5mb250U2l6ZXx8ZS5lbXx8NDgsbD1lLndlaWdodHx8ZS5mb250V2VpZ2h0fHwiIixjPSh0PVtlLnN0eWxlfHxlLmZvbnRTdHlsZXx8IiIsbCxzXS5qb2luKCIgIikrInB4ICIrcixlLm9yaWdpbnx8InRvcCIpO2lmKG4uY2FjaGVbcl0mJnM8PW4uY2FjaGVbcl0uZW0pcmV0dXJuIGkobi5jYWNoZVtyXSxjKTt2YXIgdT1lLmNhbnZhc3x8bi5jYW52YXMsaD11LmdldENvbnRleHQoIjJkIiksZj17dXBwZXI6dm9pZCAwIT09ZS51cHBlcj9lLnVwcGVyOiJIIixsb3dlcjp2b2lkIDAhPT1lLmxvd2VyP2UubG93ZXI6IngiLGRlc2NlbnQ6dm9pZCAwIT09ZS5kZXNjZW50P2UuZGVzY2VudDoicCIsYXNjZW50OnZvaWQgMCE9PWUuYXNjZW50P2UuYXNjZW50OiJoIix0aXR0bGU6dm9pZCAwIT09ZS50aXR0bGU/ZS50aXR0bGU6ImkiLG92ZXJzaG9vdDp2b2lkIDAhPT1lLm92ZXJzaG9vdD9lLm92ZXJzaG9vdDoiTyJ9LHA9TWF0aC5jZWlsKDEuNSpzKTt1LmhlaWdodD1wLHUud2lkdGg9LjUqcCxoLmZvbnQ9dDt2YXIgZD17dG9wOjB9O2guY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJ0b3AiLGguZmlsbFN0eWxlPSJibGFjayIsaC5maWxsVGV4dCgiSCIsMCwwKTt2YXIgZz1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0iYm90dG9tIixoLmZpbGxUZXh0KCJIIiwwLHApO3ZhciBtPWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QubGluZUhlaWdodD1kLmJvdHRvbT1wLW0rZyxoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsaC5maWxsVGV4dCgiSCIsMCxwKTt2YXIgdj1wLWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpLTErZztkLmJhc2VsaW5lPWQuYWxwaGFiZXRpYz12LGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGguZmlsbFRleHQoIkgiLDAsLjUqcCk7dmFyIHk9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5tZWRpYW49ZC5taWRkbGU9cC15LTErZy0uNSpwLGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJoYW5naW5nIixoLmZpbGxUZXh0KCJIIiwwLC41KnApO3ZhciB4PWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QuaGFuZ2luZz1wLXgtMStnLS41KnAsaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9ImlkZW9ncmFwaGljIixoLmZpbGxUZXh0KCJIIiwwLHApO3ZhciBiPWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2lmKGQuaWRlb2dyYXBoaWM9cC1iLTErZyxmLnVwcGVyJiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9InRvcCIsaC5maWxsVGV4dChmLnVwcGVyLDAsMCksZC51cHBlcj1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSxkLmNhcEhlaWdodD1kLmJhc2VsaW5lLWQudXBwZXIpLGYubG93ZXImJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0idG9wIixoLmZpbGxUZXh0KGYubG93ZXIsMCwwKSxkLmxvd2VyPWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpLGQueEhlaWdodD1kLmJhc2VsaW5lLWQubG93ZXIpLGYudGl0dGxlJiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9InRvcCIsaC5maWxsVGV4dChmLnRpdHRsZSwwLDApLGQudGl0dGxlPWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpKSxmLmFzY2VudCYmKGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJ0b3AiLGguZmlsbFRleHQoZi5hc2NlbnQsMCwwKSxkLmFzY2VudD1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksZi5kZXNjZW50JiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9InRvcCIsaC5maWxsVGV4dChmLmRlc2NlbnQsMCwwKSxkLmRlc2NlbnQ9byhoLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGYub3ZlcnNob290KXtoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0idG9wIixoLmZpbGxUZXh0KGYub3ZlcnNob290LDAsMCk7dmFyIF89byhoLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5vdmVyc2hvb3Q9Xy12fWZvcih2YXIgdyBpbiBkKWRbd10vPXM7cmV0dXJuIGQuZW09cyxuLmNhY2hlW3JdPWQsaShkLGMpfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj17fTtmb3IodmFyIG4gaW4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXRbZV0pLHQpImVtIiE9PW4mJihyW25dPXRbbl0tZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj0zO248ci5sZW5ndGg7bis9NClpZigwIT09cltuXSlyZXR1cm4gTWF0aC5mbG9vciguMjUqKG4tMykvZSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj1yLmxlbmd0aC0xO24+MDtuLT00KWlmKDAhPT1yW25dKXJldHVybiBNYXRoLmZsb29yKC4yNSoobi0zKS9lKX1lLmV4cG9ydHM9bixuLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuLmNhY2hlPXt9fSx7fV0sMjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHModHx8ZyxudWxsKX07ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dGhpcy5fY29sb3I9dCx0aGlzLmtleT1lLHRoaXMudmFsdWU9cix0aGlzLmxlZnQ9bix0aGlzLnJpZ2h0PWksdGhpcy5fY291bnQ9YX1mdW5jdGlvbiBpKHQpe3JldHVybiBuZXcgbih0Ll9jb2xvcix0LmtleSx0LnZhbHVlLHQubGVmdCx0LnJpZ2h0LHQuX2NvdW50KX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG5ldyBuKHQsZS5rZXksZS52YWx1ZSxlLmxlZnQsZS5yaWdodCxlLl9jb3VudCl9ZnVuY3Rpb24gbyh0KXt0Ll9jb3VudD0xKyh0LmxlZnQ/dC5sZWZ0Ll9jb3VudDowKSsodC5yaWdodD90LnJpZ2h0Ll9jb3VudDowKX1mdW5jdGlvbiBzKHQsZSl7dGhpcy5fY29tcGFyZT10LHRoaXMucm9vdD1lfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXt2YXIgcjtpZihlLmxlZnQmJihyPWModCxlLmxlZnQpKSlyZXR1cm4gcjtyZXR1cm4ocj10KGUua2V5LGUudmFsdWUpKXx8KGUucmlnaHQ/Yyh0LGUucmlnaHQpOnZvaWQgMCl9ZnVuY3Rpb24gdSh0LGUscixuKXtpZihlKHQsbi5rZXkpPD0wKXt2YXIgaTtpZihuLmxlZnQpaWYoaT11KHQsZSxyLG4ubGVmdCkpcmV0dXJuIGk7aWYoaT1yKG4ua2V5LG4udmFsdWUpKXJldHVybiBpfWlmKG4ucmlnaHQpcmV0dXJuIHUodCxlLHIsbi5yaWdodCl9ZnVuY3Rpb24gaCh0LGUscixuLGkpe3ZhciBhLG89cih0LGkua2V5KSxzPXIoZSxpLmtleSk7aWYobzw9MCl7aWYoaS5sZWZ0JiYoYT1oKHQsZSxyLG4saS5sZWZ0KSkpcmV0dXJuIGE7aWYocz4wJiYoYT1uKGkua2V5LGkudmFsdWUpKSlyZXR1cm4gYX1pZihzPjAmJmkucmlnaHQpcmV0dXJuIGgodCxlLHIsbixpLnJpZ2h0KX1mdW5jdGlvbiBmKHQsZSl7dGhpcy50cmVlPXQsdGhpcy5fc3RhY2s9ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkobCwia2V5cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dC5wdXNoKGUpfSkpLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInZhbHVlcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dC5wdXNoKHIpfSkpLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290Ll9jb3VudDowfX0pLGwuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbXBhcmUsaT10aGlzLnJvb3QsbD1bXSxjPVtdO2k7KXt2YXIgdT1yKHQsaS5rZXkpO2wucHVzaChpKSxjLnB1c2godSksaT11PD0wP2kubGVmdDppLnJpZ2h0fWwucHVzaChuZXcgbigwLHQsZSxudWxsLG51bGwsMSkpO2Zvcih2YXIgaD1sLmxlbmd0aC0yO2g+PTA7LS1oKXtpPWxbaF07Y1toXTw9MD9sW2hdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsbFtoKzFdLGkucmlnaHQsaS5fY291bnQrMSk6bFtoXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLGkubGVmdCxsW2grMV0saS5fY291bnQrMSl9Zm9yKGg9bC5sZW5ndGgtMTtoPjE7LS1oKXt2YXIgZj1sW2gtMV07aT1sW2hdO2lmKDE9PT1mLl9jb2xvcnx8MT09PWkuX2NvbG9yKWJyZWFrO3ZhciBwPWxbaC0yXTtpZihwLmxlZnQ9PT1mKWlmKGYubGVmdD09PWkpe2lmKCEoZD1wLnJpZ2h0KXx8MCE9PWQuX2NvbG9yKXtpZihwLl9jb2xvcj0wLHAubGVmdD1mLnJpZ2h0LGYuX2NvbG9yPTEsZi5yaWdodD1wLGxbaC0yXT1mLGxbaC0xXT1pLG8ocCksbyhmKSxoPj0zKShnPWxbaC0zXSkubGVmdD09PXA/Zy5sZWZ0PWY6Zy5yaWdodD1mO2JyZWFrfWYuX2NvbG9yPTEscC5yaWdodD1hKDEsZCkscC5fY29sb3I9MCxoLT0xfWVsc2V7aWYoIShkPXAucmlnaHQpfHwwIT09ZC5fY29sb3Ipe2lmKGYucmlnaHQ9aS5sZWZ0LHAuX2NvbG9yPTAscC5sZWZ0PWkucmlnaHQsaS5fY29sb3I9MSxpLmxlZnQ9ZixpLnJpZ2h0PXAsbFtoLTJdPWksbFtoLTFdPWYsbyhwKSxvKGYpLG8oaSksaD49MykoZz1sW2gtM10pLmxlZnQ9PT1wP2cubGVmdD1pOmcucmlnaHQ9aTticmVha31mLl9jb2xvcj0xLHAucmlnaHQ9YSgxLGQpLHAuX2NvbG9yPTAsaC09MX1lbHNlIGlmKGYucmlnaHQ9PT1pKXtpZighKGQ9cC5sZWZ0KXx8MCE9PWQuX2NvbG9yKXtpZihwLl9jb2xvcj0wLHAucmlnaHQ9Zi5sZWZ0LGYuX2NvbG9yPTEsZi5sZWZ0PXAsbFtoLTJdPWYsbFtoLTFdPWksbyhwKSxvKGYpLGg+PTMpKGc9bFtoLTNdKS5yaWdodD09PXA/Zy5yaWdodD1mOmcubGVmdD1mO2JyZWFrfWYuX2NvbG9yPTEscC5sZWZ0PWEoMSxkKSxwLl9jb2xvcj0wLGgtPTF9ZWxzZXt2YXIgZDtpZighKGQ9cC5sZWZ0KXx8MCE9PWQuX2NvbG9yKXt2YXIgZztpZihmLmxlZnQ9aS5yaWdodCxwLl9jb2xvcj0wLHAucmlnaHQ9aS5sZWZ0LGkuX2NvbG9yPTEsaS5yaWdodD1mLGkubGVmdD1wLGxbaC0yXT1pLGxbaC0xXT1mLG8ocCksbyhmKSxvKGkpLGg+PTMpKGc9bFtoLTNdKS5yaWdodD09PXA/Zy5yaWdodD1pOmcubGVmdD1pO2JyZWFrfWYuX2NvbG9yPTEscC5sZWZ0PWEoMSxkKSxwLl9jb2xvcj0wLGgtPTF9fXJldHVybiBsWzBdLl9jb2xvcj0xLG5ldyBzKHIsbFswXSl9LGwuZm9yRWFjaD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5yb290KXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGModCx0aGlzLnJvb3QpO2Nhc2UgMjpyZXR1cm4gdShlLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpO2Nhc2UgMzppZih0aGlzLl9jb21wYXJlKGUscik+PTApcmV0dXJuO3JldHVybiBoKGUscix0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJiZWdpbiIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7cmV0dXJuIG5ldyBmKHRoaXMsdCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImVuZCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O3JldHVybiBuZXcgZih0aGlzLHQpfX0pLGwuYXQ9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybiBuZXcgZih0aGlzLFtdKTtmb3IodmFyIGU9dGhpcy5yb290LHI9W107Oyl7aWYoci5wdXNoKGUpLGUubGVmdCl7aWYodDxlLmxlZnQuX2NvdW50KXtlPWUubGVmdDtjb250aW51ZX10LT1lLmxlZnQuX2NvdW50fWlmKCF0KXJldHVybiBuZXcgZih0aGlzLHIpO2lmKHQtPTEsIWUucmlnaHQpYnJlYWs7aWYodD49ZS5yaWdodC5fY291bnQpYnJlYWs7ZT1lLnJpZ2h0fXJldHVybiBuZXcgZih0aGlzLFtdKX0sbC5nZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTw9MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgZih0aGlzLG4pfSxsLmd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPDAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgZih0aGlzLG4pfSxsLmx0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPjAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGYodGhpcyxuKX0sbC5sZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT49MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBmKHRoaXMsbil9LGwuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdO3I7KXt2YXIgaT1lKHQsci5rZXkpO2lmKG4ucHVzaChyKSwwPT09aSlyZXR1cm4gbmV3IGYodGhpcyxuKTtyPWk8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG5ldyBmKHRoaXMsW10pfSxsLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmQodCk7cmV0dXJuIGU/ZS5yZW1vdmUoKTp0aGlzfSxsLmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdDtyOyl7dmFyIG49ZSh0LHIua2V5KTtpZigwPT09bilyZXR1cm4gci52YWx1ZTtyPW48PTA/ci5sZWZ0OnIucmlnaHR9fTt2YXIgcD1mLnByb3RvdHlwZTtmdW5jdGlvbiBkKHQsZSl7dC5rZXk9ZS5rZXksdC52YWx1ZT1lLnZhbHVlLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQuX2NvbG9yPWUuX2NvbG9yLHQuX2NvdW50PWUuX2NvdW50fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsInZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJub2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wP3RoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXTpudWxsfSxlbnVtZXJhYmxlOiEwfSkscC5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZih0aGlzLnRyZWUsdGhpcy5fc3RhY2suc2xpY2UoKSl9LHAucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLnRyZWU7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPXRbdC5sZW5ndGgtMV07ZVtlLmxlbmd0aC0xXT1uZXcgbihyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxyLnJpZ2h0LHIuX2NvdW50KTtmb3IodmFyIGw9dC5sZW5ndGgtMjtsPj0wOy0tbCl7KHI9dFtsXSkubGVmdD09PXRbbCsxXT9lW2xdPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsZVtsKzFdLHIucmlnaHQsci5fY291bnQpOmVbbF09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVtsKzFdLHIuX2NvdW50KX1pZigocj1lW2UubGVuZ3RoLTFdKS5sZWZ0JiZyLnJpZ2h0KXt2YXIgYz1lLmxlbmd0aDtmb3Iocj1yLmxlZnQ7ci5yaWdodDspZS5wdXNoKHIpLHI9ci5yaWdodDt2YXIgdT1lW2MtMV07ZS5wdXNoKG5ldyBuKHIuX2NvbG9yLHUua2V5LHUudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpKSxlW2MtMV0ua2V5PXIua2V5LGVbYy0xXS52YWx1ZT1yLnZhbHVlO2ZvcihsPWUubGVuZ3RoLTI7bD49YzstLWwpcj1lW2xdLGVbbF09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVtsKzFdLHIuX2NvdW50KTtlW2MtMV0ubGVmdD1lW2NdfWlmKDA9PT0ocj1lW2UubGVuZ3RoLTFdKS5fY29sb3Ipe3ZhciBoPWVbZS5sZW5ndGgtMl07aC5sZWZ0PT09cj9oLmxlZnQ9bnVsbDpoLnJpZ2h0PT09ciYmKGgucmlnaHQ9bnVsbCksZS5wb3AoKTtmb3IobD0wO2w8ZS5sZW5ndGg7KytsKWVbbF0uX2NvdW50LS07cmV0dXJuIG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX1pZihyLmxlZnR8fHIucmlnaHQpe3IubGVmdD9kKHIsci5sZWZ0KTpyLnJpZ2h0JiZkKHIsci5yaWdodCksci5fY29sb3I9MTtmb3IobD0wO2w8ZS5sZW5ndGgtMTsrK2wpZVtsXS5fY291bnQtLTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKDE9PT1lLmxlbmd0aClyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLG51bGwpO2ZvcihsPTA7bDxlLmxlbmd0aDsrK2wpZVtsXS5fY291bnQtLTt2YXIgZj1lW2UubGVuZ3RoLTJdO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLHMsbD10Lmxlbmd0aC0xO2w+PTA7LS1sKXtpZihlPXRbbF0sMD09PWwpcmV0dXJuIHZvaWQoZS5fY29sb3I9MSk7aWYoKHI9dFtsLTFdKS5sZWZ0PT09ZSl7aWYoKG49ci5yaWdodCkucmlnaHQmJjA9PT1uLnJpZ2h0Ll9jb2xvcil7aWYocz0obj1yLnJpZ2h0PWkobikpLnJpZ2h0PWkobi5yaWdodCksci5yaWdodD1uLmxlZnQsbi5sZWZ0PXIsbi5yaWdodD1zLG4uX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPTEsci5fY29sb3I9MSxzLl9jb2xvcj0xLG8ociksbyhuKSxsPjEpKGM9dFtsLTJdKS5sZWZ0PT09cj9jLmxlZnQ9bjpjLnJpZ2h0PW47cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ubGVmdCYmMD09PW4ubGVmdC5fY29sb3Ipe2lmKHM9KG49ci5yaWdodD1pKG4pKS5sZWZ0PWkobi5sZWZ0KSxyLnJpZ2h0PXMubGVmdCxuLmxlZnQ9cy5yaWdodCxzLmxlZnQ9cixzLnJpZ2h0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MSxuLl9jb2xvcj0xLGUuX2NvbG9yPTEsbyhyKSxvKG4pLG8ocyksbD4xKShjPXRbbC0yXSkubGVmdD09PXI/Yy5sZWZ0PXM6Yy5yaWdodD1zO3JldHVybiB2b2lkKHRbbC0xXT1zKX1pZigxPT09bi5fY29sb3Ipe2lmKDA9PT1yLl9jb2xvcilyZXR1cm4gci5fY29sb3I9MSx2b2lkKHIucmlnaHQ9YSgwLG4pKTtyLnJpZ2h0PWEoMCxuKTtjb250aW51ZX1uPWkobiksci5yaWdodD1uLmxlZnQsbi5sZWZ0PXIsbi5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MCxvKHIpLG8obiksbD4xJiYoKGM9dFtsLTJdKS5sZWZ0PT09cj9jLmxlZnQ9bjpjLnJpZ2h0PW4pLHRbbC0xXT1uLHRbbF09cixsKzE8dC5sZW5ndGg/dFtsKzFdPWU6dC5wdXNoKGUpLGwrPTJ9ZWxzZXtpZigobj1yLmxlZnQpLmxlZnQmJjA9PT1uLmxlZnQuX2NvbG9yKXtpZihzPShuPXIubGVmdD1pKG4pKS5sZWZ0PWkobi5sZWZ0KSxyLmxlZnQ9bi5yaWdodCxuLnJpZ2h0PXIsbi5sZWZ0PXMsbi5fY29sb3I9ci5fY29sb3IsZS5fY29sb3I9MSxyLl9jb2xvcj0xLHMuX2NvbG9yPTEsbyhyKSxvKG4pLGw+MSkoYz10W2wtMl0pLnJpZ2h0PT09cj9jLnJpZ2h0PW46Yy5sZWZ0PW47cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ucmlnaHQmJjA9PT1uLnJpZ2h0Ll9jb2xvcil7aWYocz0obj1yLmxlZnQ9aShuKSkucmlnaHQ9aShuLnJpZ2h0KSxyLmxlZnQ9cy5yaWdodCxuLnJpZ2h0PXMubGVmdCxzLnJpZ2h0PXIscy5sZWZ0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MSxuLl9jb2xvcj0xLGUuX2NvbG9yPTEsbyhyKSxvKG4pLG8ocyksbD4xKShjPXRbbC0yXSkucmlnaHQ9PT1yP2MucmlnaHQ9czpjLmxlZnQ9cztyZXR1cm4gdm9pZCh0W2wtMV09cyl9aWYoMT09PW4uX2NvbG9yKXtpZigwPT09ci5fY29sb3IpcmV0dXJuIHIuX2NvbG9yPTEsdm9pZChyLmxlZnQ9YSgwLG4pKTtyLmxlZnQ9YSgwLG4pO2NvbnRpbnVlfXZhciBjO249aShuKSxyLmxlZnQ9bi5yaWdodCxuLnJpZ2h0PXIsbi5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MCxvKHIpLG8obiksbD4xJiYoKGM9dFtsLTJdKS5yaWdodD09PXI/Yy5yaWdodD1uOmMubGVmdD1uKSx0W2wtMV09bix0W2xdPXIsbCsxPHQubGVuZ3RoP3RbbCsxXT1lOnQucHVzaChlKSxsKz0yfX19KGUpLGYubGVmdD09PXI/Zi5sZWZ0PW51bGw6Zi5yaWdodD1udWxsLG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImtleSIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0ua2V5fSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhY2subGVuZ3RoPjApcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS52YWx1ZX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJpbmRleCIse2dldDpmdW5jdGlvbigpe3ZhciB0PTAsZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpe3ZhciByPXRoaXMudHJlZS5yb290O3JldHVybiByP3IuX2NvdW50OjB9ZVtlLmxlbmd0aC0xXS5sZWZ0JiYodD1lW2UubGVuZ3RoLTFdLmxlZnQuX2NvdW50KTtmb3IodmFyIG49ZS5sZW5ndGgtMjtuPj0wOy0tbillW24rMV09PT1lW25dLnJpZ2h0JiYoKyt0LGVbbl0ubGVmdCYmKHQrPWVbbl0ubGVmdC5fY291bnQpKTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMH0pLHAubmV4dD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLnJpZ2h0KWZvcihlPWUucmlnaHQ7ZTspdC5wdXNoKGUpLGU9ZS5sZWZ0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5yaWdodD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImhhc05leHQiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5yaWdodClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5sZWZ0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KSxwLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW4ndCB1cGRhdGUgZW1wdHkgbm9kZSEiKTt2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLGk9ZVtlLmxlbmd0aC0xXTtyW3IubGVuZ3RoLTFdPW5ldyBuKGkuX2NvbG9yLGkua2V5LHQsaS5sZWZ0LGkucmlnaHQsaS5fY291bnQpO2Zvcih2YXIgYT1lLmxlbmd0aC0yO2E+PTA7LS1hKShpPWVbYV0pLmxlZnQ9PT1lW2ErMV0/clthXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLHJbYSsxXSxpLnJpZ2h0LGkuX2NvdW50KTpyW2FdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsaS5sZWZ0LHJbYSsxXSxpLl9jb3VudCk7cmV0dXJuIG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxyWzBdKX0scC5wcmV2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMCE9PXQubGVuZ3RoKXt2YXIgZT10W3QubGVuZ3RoLTFdO2lmKGUubGVmdClmb3IoZT1lLmxlZnQ7ZTspdC5wdXNoKGUpLGU9ZS5yaWdodDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ubGVmdD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImhhc1ByZXYiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5sZWZ0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLnJpZ2h0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KX0se31dLDI0ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPVsuOTk5OTk5OTk5OTk5ODA5OSw2NzYuNTIwMzY4MTIxODg1MSwtMTI1OS4xMzkyMTY3MjI0MDI4LDc3MS4zMjM0Mjg3Nzc2NTMxLC0xNzYuNjE1MDI5MTYyMTQwNiwxMi41MDczNDMyNzg2ODY5MDUsLS4xMzg1NzEwOTUyNjU3MjAxMiw5OTg0MzY5NTc4MDE5NTcyZS0yMSwxLjUwNTYzMjczNTE0OTMxMTZlLTddLGk9Wy45OTk5OTk5OTk5OTk5OTcxLDU3LjE1NjIzNTY2NTg2MjkyLC01OS41OTc5NjAzNTU0NzU0OSwxNC4xMzYwOTc5NzQ3NDE3NDYsLS40OTE5MTM4MTYwOTc2MjAyLDMzOTk0NjQ5OTg0ODExODllLTIwLDQ2NTIzNjI4OTI3MDQ4NThlLTIwLC05ODM3NDQ3NTMwNDg3OTU2ZS0yMCwuMDAwMTU4MDg4NzAzMjI0OTEyNSwtLjAwMDIxMDI2NDQ0MTcyNDEwNDg4LC4wMDAyMTc0Mzk2MTgxMTUyMTI2NSwtLjAwMDE2NDMxODEwNjUzNjc2MzksODQ0MTgyMjM5ODM4NTI3NWUtMjAsLTI2MTkwODM4NDAxNTgxNDA4ZS0yMSwzNjg5OTE4MjY1OTUzMTYyNWUtMjJdO2Z1bmN0aW9uIGEodCl7aWYodDwwKXJldHVybiBOdW1iZXIoIjAvMCIpO2Zvcih2YXIgZT1pWzBdLHI9aS5sZW5ndGgtMTtyPjA7LS1yKWUrPWlbcl0vKHQrcik7dmFyIG49dCs2MDcvMTI4Ky41O3JldHVybi41Kk1hdGgubG9nKDIqTWF0aC5QSSkrKHQrLjUpKk1hdGgubG9nKG4pLW4rTWF0aC5sb2coZSktTWF0aC5sb2codCl9ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSl7aWYoZTwuNSlyZXR1cm4gTWF0aC5QSS8oTWF0aC5zaW4oTWF0aC5QSSplKSp0KDEtZSkpO2lmKGU+MTAwKXJldHVybiBNYXRoLmV4cChhKGUpKTtlLT0xO2Zvcih2YXIgcj1uWzBdLGk9MTtpPDk7aSsrKXIrPW5baV0vKGUraSk7dmFyIG89ZSs3Ky41O3JldHVybiBNYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLnBvdyhvLGUrLjUpKk1hdGguZXhwKC1vKSpyfSxlLmV4cG9ydHMubG9nPWF9LHt9XSwyNDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBzcGVjaWZ5IHR5cGUgc3RyaW5nIik7aWYoZT1lfHx7fSwidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50JiYhZS5jYW52YXMpcmV0dXJuIG51bGw7dmFyIHI9ZS5jYW52YXN8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOyJudW1iZXIiPT10eXBlb2YgZS53aWR0aCYmKHIud2lkdGg9ZS53aWR0aCk7Im51bWJlciI9PXR5cGVvZiBlLmhlaWdodCYmKHIuaGVpZ2h0PWUuaGVpZ2h0KTt2YXIgbixpPWU7dHJ5e3ZhciBhPVt0XTswPT09dC5pbmRleE9mKCJ3ZWJnbCIpJiZhLnB1c2goImV4cGVyaW1lbnRhbC0iK3QpO2Zvcih2YXIgbz0wO288YS5sZW5ndGg7bysrKWlmKG49ci5nZXRDb250ZXh0KGFbb10saSkpcmV0dXJuIG59Y2F0Y2godCl7bj1udWxsfXJldHVybiBufHxudWxsfX0se31dLDI1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgdSh0KTtyZXR1cm4gci51cGRhdGUoZSkscn07dmFyIG49dCgiLi9saWIvdGV4dC5qcyIpLGk9dCgiLi9saWIvbGluZXMuanMiKSxhPXQoIi4vbGliL2JhY2tncm91bmQuanMiKSxvPXQoIi4vbGliL2N1YmUuanMiKSxzPXQoIi4vbGliL3RpY2tzLmpzIiksbD1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSk7ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0fWZ1bmN0aW9uIHUodCl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHRoaXMudGlja3M9W1tdLFtdLFtdXSx0aGlzLmF1dG9UaWNrcz0hMCx0aGlzLnRpY2tTcGFjaW5nPVsxLDEsMV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy50aWNrRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMudGlja1NpemU9WzEyLDEyLDEyXSx0aGlzLnRpY2tBbmdsZT1bMCwwLDBdLHRoaXMudGlja0FsaWduPVsiYXV0byIsImF1dG8iLCJhdXRvIl0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzEwLDEwLDEwXSx0aGlzLmxhc3RDdWJlUHJvcHM9e2N1YmVFZGdlczpbMCwwLDBdLGF4aXM6WzAsMCwwXX0sdGhpcy5sYWJlbHM9WyJ4IiwieSIsInoiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5sYWJlbEZvbnQ9InNhbnMtc2VyaWYiLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbEFuZ2xlPVswLDAsMF0sdGhpcy5sYWJlbEFsaWduPVsiYXV0byIsImF1dG8iLCJhdXRvIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMTAsMTAsMTBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzAsMCwwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMSwhMSwhMV0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9maXJzdEluaXQ9ITAsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fYmFja2dyb3VuZD1hKHQpfXZhciBoPXUucHJvdG90eXBlO2Z1bmN0aW9uIGYoKXt0aGlzLnByaW1hbE9mZnNldD1bMCwwLDBdLHRoaXMucHJpbWFsTWlub3I9WzAsMCwwXSx0aGlzLm1pcnJvck9mZnNldD1bMCwwLDBdLHRoaXMubWlycm9yTWlub3I9WzAsMCwwXX1oLnVwZGF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXtpZihuIGluIHQpe3ZhciBpLGE9dFtuXSxvPXRoaXNbbl07KGU/QXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShhWzBdKTpBcnJheS5pc0FycmF5KGEpKT90aGlzW25dPWk9W3IoYVswXSkscihhWzFdKSxyKGFbMl0pXTp0aGlzW25dPWk9W3IoYSkscihhKSxyKGEpXTtmb3IodmFyIHM9MDtzPDM7KytzKWlmKGlbc10hPT1vW3NdKXJldHVybiEwfXJldHVybiExfXQ9dHx8e307dmFyIHIsYT1lLmJpbmQodGhpcywhMSxOdW1iZXIpLG89ZS5iaW5kKHRoaXMsITEsQm9vbGVhbiksbD1lLmJpbmQodGhpcywhMSxTdHJpbmcpLGM9ZS5iaW5kKHRoaXMsITAsKGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDM9PT10Lmxlbmd0aClyZXR1cm5bK3RbMF0sK3RbMV0sK3RbMl0sMV07aWYoND09PXQubGVuZ3RoKXJldHVyblsrdFswXSwrdFsxXSwrdFsyXSwrdFszXV19cmV0dXJuWzAsMCwwLDFdfSkpLHU9ITEsaD0hMTtpZigiYm91bmRzImluIHQpZm9yKHZhciBmPXQuYm91bmRzLHA9MDtwPDI7KytwKWZvcih2YXIgZD0wO2Q8MzsrK2QpZltwXVtkXSE9PXRoaXMuYm91bmRzW3BdW2RdJiYoaD0hMCksdGhpcy5ib3VuZHNbcF1bZF09ZltwXVtkXTtpZigidGlja3MiaW4gdCl7cj10LnRpY2tzLHU9ITAsdGhpcy5hdXRvVGlja3M9ITE7Zm9yKHA9MDtwPDM7KytwKXRoaXMudGlja1NwYWNpbmdbcF09MH1lbHNlIGEoInRpY2tTcGFjaW5nIikmJih0aGlzLmF1dG9UaWNrcz0hMCxoPSEwKTtpZih0aGlzLl9maXJzdEluaXQmJigidGlja3MiaW4gdHx8InRpY2tTcGFjaW5nImluIHR8fCh0aGlzLmF1dG9UaWNrcz0hMCksaD0hMCx1PSEwLHRoaXMuX2ZpcnN0SW5pdD0hMSksaCYmdGhpcy5hdXRvVGlja3MmJihyPXMuY3JlYXRlKHRoaXMuYm91bmRzLHRoaXMudGlja1NwYWNpbmcpLHU9ITApLHUpe2ZvcihwPTA7cDwzOysrcClyW3BdLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KSk7cy5lcXVhbChyLHRoaXMudGlja3MpP3U9ITE6dGhpcy50aWNrcz1yfW8oInRpY2tFbmFibGUiKSxsKCJ0aWNrRm9udCIpJiYodT0hMCksYSgidGlja1NpemUiKSxhKCJ0aWNrQW5nbGUiKSxhKCJ0aWNrUGFkIiksYygidGlja0NvbG9yIik7dmFyIGc9bCgibGFiZWxzIik7bCgibGFiZWxGb250IikmJihnPSEwKSxvKCJsYWJlbEVuYWJsZSIpLGEoImxhYmVsU2l6ZSIpLGEoImxhYmVsUGFkIiksYygibGFiZWxDb2xvciIpLG8oImxpbmVFbmFibGUiKSxvKCJsaW5lTWlycm9yIiksYSgibGluZVdpZHRoIiksYygibGluZUNvbG9yIiksbygibGluZVRpY2tFbmFibGUiKSxvKCJsaW5lVGlja01pcnJvciIpLGEoImxpbmVUaWNrTGVuZ3RoIiksYSgibGluZVRpY2tXaWR0aCIpLGMoImxpbmVUaWNrQ29sb3IiKSxvKCJncmlkRW5hYmxlIiksYSgiZ3JpZFdpZHRoIiksYygiZ3JpZENvbG9yIiksbygiemVyb0VuYWJsZSIpLGMoInplcm9MaW5lQ29sb3IiKSxhKCJ6ZXJvTGluZVdpZHRoIiksbygiYmFja2dyb3VuZEVuYWJsZSIpLGMoImJhY2tncm91bmRDb2xvciIpLHRoaXMuX3RleHQ/dGhpcy5fdGV4dCYmKGd8fHUpJiZ0aGlzLl90ZXh0LnVwZGF0ZSh0aGlzLmJvdW5kcyx0aGlzLmxhYmVscyx0aGlzLmxhYmVsRm9udCx0aGlzLnRpY2tzLHRoaXMudGlja0ZvbnQpOnRoaXMuX3RleHQ9bih0aGlzLmdsLHRoaXMuYm91bmRzLHRoaXMubGFiZWxzLHRoaXMubGFiZWxGb250LHRoaXMudGlja3MsdGhpcy50aWNrRm9udCksdGhpcy5fbGluZXMmJnUmJih0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCksdGhpcy5fbGluZXN8fCh0aGlzLl9saW5lcz1pKHRoaXMuZ2wsdGhpcy5ib3VuZHMsdGhpcy50aWNrcykpfTt2YXIgcD1bbmV3IGYsbmV3IGYsbmV3IGZdO2Z1bmN0aW9uIGQodCxlLHIsbixpKXtmb3IodmFyIGE9dC5wcmltYWxPZmZzZXQsbz10LnByaW1hbE1pbm9yLHM9dC5taXJyb3JPZmZzZXQsbD10Lm1pcnJvck1pbm9yLGM9bltlXSx1PTA7dTwzOysrdSlpZihlIT09dSl7dmFyIGg9YSxmPXMscD1vLGQ9bDtjJjE8PHUmJihoPXMsZj1hLHA9bCxkPW8pLGhbdV09clswXVt1XSxmW3VdPXJbMV1bdV0saVt1XT4wPyhwW3VdPS0xLGRbdV09MCk6KHBbdV09MCxkW3VdPTEpfX12YXIgZz1bMCwwLDBdLG09e21vZGVsOmwsdmlldzpsLHByb2plY3Rpb246bCxfb3J0aG86ITF9O2guaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe307dmFyIHY9WzAsMCwwXSx5PVswLDAsMF0seD1bMCwwLDBdO2guZHJhdz1mdW5jdGlvbih0KXt0PXR8fG07Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxsLG49dC52aWV3fHxsLGk9dC5wcm9qZWN0aW9ufHxsLGE9dGhpcy5ib3VuZHMscz10Ll9vcnRob3x8ITEsdT1vKHIsbixpLGEscyksaD11LmN1YmVFZGdlcyxmPXUuYXhpcyxiPW5bMTJdLF89blsxM10sdz1uWzE0XSxUPW5bMTVdLGs9KHM/MjoxKSp0aGlzLnBpeGVsUmF0aW8qKGlbM10qYitpWzddKl8raVsxMV0qdytpWzE1XSpUKS9lLmRyYXdpbmdCdWZmZXJIZWlnaHQsTT0wO008MzsrK00pdGhpcy5sYXN0Q3ViZVByb3BzLmN1YmVFZGdlc1tNXT1oW01dLHRoaXMubGFzdEN1YmVQcm9wcy5heGlzW01dPWZbTV07dmFyIEE9cDtmb3IoTT0wO008MzsrK00pZChwW01dLE0sdGhpcy5ib3VuZHMsaCxmKTtlPXRoaXMuZ2w7dmFyIFMsRT1nO2ZvcihNPTA7TTwzOysrTSl0aGlzLmJhY2tncm91bmRFbmFibGVbTV0/RVtNXT1mW01dOkVbTV09MDt0aGlzLl9iYWNrZ3JvdW5kLmRyYXcocixuLGksYSxFLHRoaXMuYmFja2dyb3VuZENvbG9yKSx0aGlzLl9saW5lcy5iaW5kKHIsbixpLHRoaXMpO2ZvcihNPTA7TTwzOysrTSl7dmFyIEM9WzAsMCwwXTtmW01dPjA/Q1tNXT1hWzFdW01dOkNbTV09YVswXVtNXTtmb3IodmFyIEw9MDtMPDI7KytMKXt2YXIgUD0oTSsxK0wpJTMsST0oTSsxKygxXkwpKSUzO3RoaXMuZ3JpZEVuYWJsZVtQXSYmdGhpcy5fbGluZXMuZHJhd0dyaWQoUCxJLHRoaXMuYm91bmRzLEMsdGhpcy5ncmlkQ29sb3JbUF0sdGhpcy5ncmlkV2lkdGhbUF0qdGhpcy5waXhlbFJhdGlvKX1mb3IoTD0wO0w8MjsrK0wpe1A9KE0rMStMKSUzLEk9KE0rMSsoMV5MKSklMzt0aGlzLnplcm9FbmFibGVbSV0mJk1hdGgubWluKGFbMF1bSV0sYVsxXVtJXSk8PTAmJk1hdGgubWF4KGFbMF1bSV0sYVsxXVtJXSk+PTAmJnRoaXMuX2xpbmVzLmRyYXdaZXJvKFAsSSx0aGlzLmJvdW5kcyxDLHRoaXMuemVyb0xpbmVDb2xvcltJXSx0aGlzLnplcm9MaW5lV2lkdGhbSV0qdGhpcy5waXhlbFJhdGlvKX19Zm9yKE09MDtNPDM7KytNKXt0aGlzLmxpbmVFbmFibGVbTV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzTGluZShNLHRoaXMuYm91bmRzLEFbTV0ucHJpbWFsT2Zmc2V0LHRoaXMubGluZUNvbG9yW01dLHRoaXMubGluZVdpZHRoW01dKnRoaXMucGl4ZWxSYXRpbyksdGhpcy5saW5lTWlycm9yW01dJiZ0aGlzLl9saW5lcy5kcmF3QXhpc0xpbmUoTSx0aGlzLmJvdW5kcyxBW01dLm1pcnJvck9mZnNldCx0aGlzLmxpbmVDb2xvcltNXSx0aGlzLmxpbmVXaWR0aFtNXSp0aGlzLnBpeGVsUmF0aW8pO3ZhciB6PWModixBW01dLnByaW1hbE1pbm9yKSxPPWMoeSxBW01dLm1pcnJvck1pbm9yKSxEPXRoaXMubGluZVRpY2tMZW5ndGg7Zm9yKEw9MDtMPDM7KytMKXt2YXIgUj1rL3JbNSpMXTt6W0xdKj1EW0xdKlIsT1tMXSo9RFtMXSpSfXRoaXMubGluZVRpY2tFbmFibGVbTV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzVGlja3MoTSxBW01dLnByaW1hbE9mZnNldCx6LHRoaXMubGluZVRpY2tDb2xvcltNXSx0aGlzLmxpbmVUaWNrV2lkdGhbTV0qdGhpcy5waXhlbFJhdGlvKSx0aGlzLmxpbmVUaWNrTWlycm9yW01dJiZ0aGlzLl9saW5lcy5kcmF3QXhpc1RpY2tzKE0sQVtNXS5taXJyb3JPZmZzZXQsTyx0aGlzLmxpbmVUaWNrQ29sb3JbTV0sdGhpcy5saW5lVGlja1dpZHRoW01dKnRoaXMucGl4ZWxSYXRpbyl9dGhpcy5fbGluZXMudW5iaW5kKCksdGhpcy5fdGV4dC5iaW5kKHIsbixpLHRoaXMucGl4ZWxSYXRpbyk7dmFyIEYsQjtmdW5jdGlvbiBOKHQpeyhCPVswLDAsMF0pW3RdPTF9ZnVuY3Rpb24gaih0LGUscil7dmFyIG49KHQrMSklMyxpPSh0KzIpJTMsYT1lW25dLG89ZVtpXSxzPXJbbl0sbD1yW2ldO2E+MCYmbD4wfHxhPjAmJmw8MHx8YTwwJiZsPjB8fGE8MCYmbDwwP04obik6KG8+MCYmcz4wfHxvPjAmJnM8MHx8bzwwJiZzPjB8fG88MCYmczwwKSYmTihpKX1mb3IoTT0wO008MzsrK00pe3ZhciBVPUFbTV0ucHJpbWFsTWlub3IsVj1BW01dLm1pcnJvck1pbm9yLHE9Yyh4LEFbTV0ucHJpbWFsT2Zmc2V0KTtmb3IoTD0wO0w8MzsrK0wpdGhpcy5saW5lVGlja0VuYWJsZVtNXSYmKHFbTF0rPWsqVVtMXSpNYXRoLm1heCh0aGlzLmxpbmVUaWNrTGVuZ3RoW0xdLDApL3JbNSpMXSk7dmFyIEg9WzAsMCwwXTtpZihIW01dPTEsdGhpcy50aWNrRW5hYmxlW01dKXstMzYwMD09PXRoaXMudGlja0FuZ2xlW01dPyh0aGlzLnRpY2tBbmdsZVtNXT0wLHRoaXMudGlja0FsaWduW01dPSJhdXRvIik6dGhpcy50aWNrQWxpZ25bTV09LTEsRj0xLCJhdXRvIj09PShTPVt0aGlzLnRpY2tBbGlnbltNXSwuNSxGXSlbMF0/U1swXT0wOlNbMF09cGFyc2VJbnQoIiIrU1swXSksQj1bMCwwLDBdLGooTSxVLFYpO2ZvcihMPTA7TDwzOysrTClxW0xdKz1rKlVbTF0qdGhpcy50aWNrUGFkW0xdL3JbNSpMXTt0aGlzLl90ZXh0LmRyYXdUaWNrcyhNLHRoaXMudGlja1NpemVbTV0sdGhpcy50aWNrQW5nbGVbTV0scSx0aGlzLnRpY2tDb2xvcltNXSxILEIsUyl9aWYodGhpcy5sYWJlbEVuYWJsZVtNXSl7Rj0wLEI9WzAsMCwwXSx0aGlzLmxhYmVsc1tNXS5sZW5ndGg+NCYmKE4oTSksRj0xKSwiYXV0byI9PT0oUz1bdGhpcy5sYWJlbEFsaWduW01dLC41LEZdKVswXT9TWzBdPTA6U1swXT1wYXJzZUludCgiIitTWzBdKTtmb3IoTD0wO0w8MzsrK0wpcVtMXSs9aypVW0xdKnRoaXMubGFiZWxQYWRbTF0vcls1KkxdO3FbTV0rPS41KihhWzBdW01dK2FbMV1bTV0pLHRoaXMuX3RleHQuZHJhd0xhYmVsKE0sdGhpcy5sYWJlbFNpemVbTV0sdGhpcy5sYWJlbEFuZ2xlW01dLHEsdGhpcy5sYWJlbENvbG9yW01dLFswLDAsMF0sQixTKX19dGhpcy5fdGV4dC51bmJpbmQoKX0saC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fdGV4dC5kaXNwb3NlKCksdGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2JhY2tncm91bmQuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2JhY2tncm91bmQ9bnVsbCx0aGlzLmdsPW51bGx9fSx7Ii4vbGliL2JhY2tncm91bmQuanMiOjI1MSwiLi9saWIvY3ViZS5qcyI6MjUyLCIuL2xpYi9saW5lcy5qcyI6MjUzLCIuL2xpYi90ZXh0LmpzIjoyNTUsIi4vbGliL3RpY2tzLmpzIjoyNTZ9XSwyNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPVtdLHM9MCxsPTA7bDwzOysrbClmb3IodmFyIGM9KGwrMSklMyx1PShsKzIpJTMsaD1bMCwwLDBdLGY9WzAsMCwwXSxwPS0xO3A8PTE7cCs9Mil7ci5wdXNoKHMscysyLHMrMSxzKzEscysyLHMrMyksaFtsXT1wLGZbbF09cDtmb3IodmFyIGQ9LTE7ZDw9MTtkKz0yKXtoW2NdPWQ7Zm9yKHZhciBnPS0xO2c8PTE7Zys9MiloW3VdPWcsZS5wdXNoKGhbMF0saFsxXSxoWzJdLGZbMF0sZlsxXSxmWzJdKSxzKz0xfXZhciBtPWM7Yz11LHU9bX12YXIgdj1uKHQsbmV3IEZsb2F0MzJBcnJheShlKSkseT1uKHQsbmV3IFVpbnQxNkFycmF5KHIpLHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLHg9aSh0LFt7YnVmZmVyOnYsdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6MjR9LHtidWZmZXI6dix0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6MjR9XSx5KSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGIuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MSxuZXcgbyh0LHYseCxiKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycyIpLmJnO2Z1bmN0aW9uIG8odCxlLHIsbil7dGhpcy5nbD10LHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1ufXZhciBzPW8ucHJvdG90eXBlO3MuZHJhdz1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPSExLHM9MDtzPDM7KytzKW89b3x8aVtzXTtpZihvKXt2YXIgbD10aGlzLmdsO2wuZW5hYmxlKGwuUE9MWUdPTl9PRkZTRVRfRklMTCksbC5wb2x5Z29uT2Zmc2V0KDEsMiksdGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zPXttb2RlbDp0LHZpZXc6ZSxwcm9qZWN0aW9uOnIsYm91bmRzOm4sZW5hYmxlOmksY29sb3JzOmF9LHRoaXMudmFvLmJpbmQoKSx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDM2KSx0aGlzLnZhby51bmJpbmQoKSxsLmRpc2FibGUobC5QT0xZR09OX09GRlNFVF9GSUxMKX19LHMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI1NCwiZ2wtYnVmZmVyIjoyNTgsImdsLXZhbyI6MzMyfV0sMjUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHApe2kocyxlLHQpLGkocyxyLHMpO2Zvcih2YXIgeT0wLHg9MDt4PDI7Kyt4KXt1WzJdPWFbeF1bMl07Zm9yKHZhciBiPTA7YjwyOysrYil7dVsxXT1hW2JdWzFdO2Zvcih2YXIgXz0wO188MjsrK18pdVswXT1hW19dWzBdLGYobFt5XSx1LHMpLHkrPTF9fXZhciB3PS0xO2Zvcih4PTA7eDw4OysreCl7Zm9yKHZhciBUPWxbeF1bM10saz0wO2s8MzsrK2spY1t4XVtrXT1sW3hdW2tdL1Q7cCYmKGNbeF1bMl0qPS0xKSxUPDAmJih3PDB8fGNbeF1bMl08Y1t3XVsyXSkmJih3PXgpfWlmKHc8MCl7dz0wO2Zvcih2YXIgTT0wO008MzsrK00pe2Zvcih2YXIgQT0oTSsyKSUzLFM9KE0rMSklMyxFPS0xLEM9LTEsTD0wO0w8MjsrK0wpe3ZhciBQPSh6PUw8PE0pKyhMPDxBKSsoMS1MPDxTKSxJPXorKDEtTDw8QSkrKEw8PFMpO28oY1t6XSxjW1BdLGNbSV0saCk8MHx8KEw/RT0xOkM9MSl9aWYoRTwwfHxDPDApQz5FJiYod3w9MTw8TSk7ZWxzZXtmb3IoTD0wO0w8MjsrK0wpe1A9KHo9TDw8TSkrKEw8PEEpKygxLUw8PFMpLEk9eisoMS1MPDxBKSsoTDw8Uyk7dmFyIHosTz1kKFtsW3pdLGxbUF0sbFtJXSxsW3orKDE8PEEpKygxPDxTKV1dKTtMP0U9TzpDPU99Qz5FJiYod3w9MTw8TSl9fX12YXIgRD03XncsUj0tMTtmb3IoeD0wO3g8ODsrK3gpeCE9PXcmJnghPT1EJiYoUjwwfHxjW1JdWzFdPmNbeF1bMV0pJiYoUj14KTt2YXIgRj0tMTtmb3IoeD0wO3g8MzsrK3gpe2lmKChOPVJeMTw8eCkhPT13JiZOIT09RClGPDAmJihGPU4pLChTPWNbTl0pWzBdPGNbRl1bMF0mJihGPU4pfXZhciBCPS0xO2Zvcih4PTA7eDwzOysreCl7dmFyIE47aWYoKE49Ul4xPDx4KSE9PXcmJk4hPT1EJiZOIT09RilCPDAmJihCPU4pLChTPWNbTl0pWzBdPmNbQl1bMF0mJihCPU4pfXZhciBqPWc7alswXT1qWzFdPWpbMl09MCxqW24ubG9nMihGXlIpXT1SJkYsaltuLmxvZzIoUl5CKV09UiZCO3ZhciBVPTdeQjtVPT09d3x8VT09PUQ/KFU9N15GLGpbbi5sb2cyKEJeVSldPVUmQik6altuLmxvZzIoRl5VKV09VSZGO3ZhciBWPW0scT13O2ZvcihNPTA7TTwzOysrTSlWW01dPXEmMTw8TT8tMToxO3JldHVybiB2fTt2YXIgbj10KCJiaXQtdHdpZGRsZSIpLGk9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGE9dCgic3BsaXQtcG9seWdvbiIpLG89dCgicm9idXN0LW9yaWVudGF0aW9uIikscz1uZXcgQXJyYXkoMTYpLGw9bmV3IEFycmF5KDgpLGM9bmV3IEFycmF5KDgpLHU9bmV3IEFycmF5KDMpLGg9WzAsMCwwXTtmdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49MDtuPDQ7KytuKXt0W25dPXJbMTIrbl07Zm9yKHZhciBpPTA7aTwzOysraSl0W25dKz1lW2ldKnJbNCppK25dfX0hZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDg7Kyt0KWxbdF09WzEsMSwxLDFdLGNbdF09WzEsMSwxXX0oKTt2YXIgcD1bWzAsMCwxLDAsMF0sWzAsMCwtMSwxLDBdLFswLC0xLDAsMSwwXSxbMCwxLDAsMSwwXSxbLTEsMCwwLDEsMF0sWzEsMCwwLDEsMF1dO2Z1bmN0aW9uIGQodCl7Zm9yKHZhciBlPTA7ZTxwLmxlbmd0aDsrK2UpaWYoKHQ9YS5wb3NpdGl2ZSh0LHBbZV0pKS5sZW5ndGg8MylyZXR1cm4gMDt2YXIgcj10WzBdLG49clswXS9yWzNdLGk9clsxXS9yWzNdLG89MDtmb3IoZT0xO2UrMTx0Lmxlbmd0aDsrK2Upe3ZhciBzPXRbZV0sbD10W2UrMV0sYz1zWzBdL3NbM10tbix1PXNbMV0vc1szXS1pLGg9bFswXS9sWzNdLW4sZj1sWzFdL2xbM10taTtvKz1NYXRoLmFicyhjKmYtdSpoKX1yZXR1cm4gb312YXIgZz1bMSwxLDFdLG09WzAsMCwwXSx2PXtjdWJlRWRnZXM6ZyxheGlzOm19fSx7ImJpdC10d2lkZGxlIjo5NywiZ2wtbWF0NC9tdWx0aXBseSI6MjgwLCJyb2J1c3Qtb3JpZW50YXRpb24iOjUyMCwic3BsaXQtcG9seWdvbiI6NTM4fV0sMjUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89W10scz1bMCwwLDBdLGw9WzAsMCwwXSxjPVswLDAsMF0sdT1bMCwwLDBdO28ucHVzaCgwLDAsMSwwLDEsMSwwLDAsLTEsMCwwLC0xLDAsMSwxLDAsMSwtMSk7Zm9yKHZhciBoPTA7aDwzOysraCl7Zm9yKHZhciBmPW8ubGVuZ3RoLzN8MCxkPTA7ZDxyW2hdLmxlbmd0aDsrK2Qpe3ZhciBnPStyW2hdW2RdLng7by5wdXNoKGcsMCwxLGcsMSwxLGcsMCwtMSxnLDAsLTEsZywxLDEsZywxLC0xKX12YXIgbT1vLmxlbmd0aC8zfDA7c1toXT1mLGxbaF09bS1mO2Y9by5sZW5ndGgvM3wwO2Zvcih2YXIgdj0wO3Y8cltoXS5sZW5ndGg7Kyt2KXtnPStyW2hdW3ZdLng7by5wdXNoKGcsMCwxLGcsMSwxLGcsMCwtMSxnLDAsLTEsZywxLDEsZywxLC0xKX1tPW8ubGVuZ3RoLzN8MDtjW2hdPWYsdVtoXT1tLWZ9dmFyIHk9bih0LG5ldyBGbG9hdDMyQXJyYXkobykpLHg9aSh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBwKHQseSx4LGIsbCxzLHUsYyl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMiKS5saW5lLG89WzAsMCwwXSxzPVswLDAsMF0sbD1bMCwwLDBdLGM9WzAsMCwwXSx1PVsxLDFdO2Z1bmN0aW9uIGgodCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gcCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9YSx0aGlzLmdyaWRDb3VudD1vLHRoaXMuZ3JpZE9mZnNldD1zfXZhciBkPXAucHJvdG90eXBlO2QuYmluZD1mdW5jdGlvbih0LGUscil7dGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXQsdGhpcy5zaGFkZXIudW5pZm9ybXMudmlldz1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb249cix1WzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHVbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlblNoYXBlPXUsdGhpcy52YW8uYmluZCgpfSxkLnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSxkLmRyYXdBeGlzTGluZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWgocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPXMsYVt0XT1lWzFdW3RdLWVbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPWE7dmFyIG8sdT1mKGMscik7dVt0XSs9ZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1uLChvPWgobCkpWyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNiksKG89aChsKSlbKHQrMSklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kcmF3QXhpc1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodGhpcy50aWNrQ291bnRbdF0pe3ZhciBhPWgobyk7YVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWk7dmFyIHM9aChsKTtzW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKX19LGQuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZ3JpZENvdW50W3RdKXt2YXIgdT1oKHMpO3VbZV09clsxXVtlXS1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz11O3ZhciBwPWYoYyxuKTtwW2VdKz1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1wO3ZhciBkPWgobyk7ZFt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1kO3ZhciBnPWgobCk7Z1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9Zyx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5ncmlkQ291bnRbdF0sdGhpcy5ncmlkT2Zmc2V0W3RdKX19LGQuZHJhd1plcm89ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWgocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPW8sb1t0XT1yWzFdW3RdLXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPW87dmFyIHU9ZihjLG4pO3VbdF0rPXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXU7dmFyIHA9aChsKTtwW2VdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1wLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMudmVydEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI1NCwiZ2wtYnVmZmVyIjoyNTgsImdsLXZhbyI6MzMyfV0sMjU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPXQoImdsLXNoYWRlciIpLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBtYWpvckF4aXMsIG1pbm9yQXhpcywgc2NyZWVuQXhpcztcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xuXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBtYWpvciA9IHBvc2l0aW9uLnggKiBtYWpvckF4aXM7XG4gIHZlYzMgbWlub3IgPSBwb3NpdGlvbi55ICogbWlub3JBeGlzO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gbWFqb3IgKyBtaW5vciArIG9mZnNldDtcbiAgdmVjMyBwUG9zaXRpb24gPSBwcm9qZWN0KHZQb3NpdGlvbik7XG4gIHZlYzMgb2Zmc2V0ID0gcHJvamVjdCh2UG9zaXRpb24gKyBzY3JlZW5BeGlzICogcG9zaXRpb24ueik7XG5cbiAgdmVjMiBzY3JlZW4gPSBub3JtYWxpemUoKG9mZnNldCAtIHBQb3NpdGlvbikueHkgKiBzY3JlZW5TaGFwZSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocFBvc2l0aW9uICsgdmVjMygwLjUgKiBzY3JlZW4gKiBsaW5lV2lkdGgsIDApLCAxLjApO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59Il0pO3IubGluZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTt2YXIgcz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIGF4aXMsIGFsaWduRGlyLCBhbGlnbk9wdDtcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIGFuZ2xlLCBwaXhlbFNjYWxlO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG5cbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcbiAgdmVjNCBwcCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG4gIHJldHVybiBwcC54eXogLyBtYXgocHAudywgMC4wMDAxKTtcbn1cblxuZmxvYXQgY29tcHV0ZVZpZXdBbmdsZSh2ZWMzIGEsIHZlYzMgYikge1xuICB2ZWMzIEEgPSBwcm9qZWN0KGEpO1xuICB2ZWMzIEIgPSBwcm9qZWN0KGIpO1xuXG4gIHJldHVybiBhdGFuKFxuICAgIChCLnkgLSBBLnkpICogcmVzb2x1dGlvbi55LFxuICAgIChCLnggLSBBLngpICogcmVzb2x1dGlvbi54XG4gICk7XG59XG5cbmNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI7XG5jb25zdCBmbG9hdCBUV09fUEkgPSAyLjAgKiBQSTtcbmNvbnN0IGZsb2F0IEhBTEZfUEkgPSAwLjUgKiBQSTtcbmNvbnN0IGZsb2F0IE9ORV9BTkRfSEFMRl9QSSA9IDEuNSAqIFBJO1xuXG5pbnQgb3B0aW9uID0gaW50KGZsb29yKGFsaWduT3B0LnggKyAwLjAwMSkpO1xuZmxvYXQgaHZfcmF0aW8gPSAgICAgICBhbGlnbk9wdC55O1xuYm9vbCBlbmFibGVBbGlnbiA9ICAgIChhbGlnbk9wdC56ICE9IDAuMCk7XG5cbmZsb2F0IG1vZF9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2QoYSwgUEkpO1xufVxuXG5mbG9hdCBwb3NpdGl2ZV9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2RfYW5nbGUoKGEgPCAwLjApID9cbiAgICBhICsgVFdPX1BJIDpcbiAgICBhXG4gICk7XG59XG5cbmZsb2F0IGxvb2tfdXB3YXJkcyhmbG9hdCBhKSB7XG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcbiAgcmV0dXJuICgoYiA+IEhBTEZfUEkpICYmIChiIDw9IE9ORV9BTkRfSEFMRl9QSSkpID9cbiAgICBiIC0gUEkgOlxuICAgIGI7XG59XG5cbmZsb2F0IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChmbG9hdCBhLCBmbG9hdCByYXRpbykge1xuICAvLyByYXRpbyBjb250cm9scyB0aGUgcmF0aW8gYmV0d2VlbiBiZWluZyBob3Jpem9udGFsIHRvICh2ZXJ0aWNhbCArIGhvcml6b250YWwpXG4gIC8vIGlmIHJhdGlvIGlzIHNldCB0byAwLjUgdGhlbiBpdCBpcyA1MCUsIDUwJS5cbiAgLy8gd2hlbiB1c2luZyBhIGhpZ2hlciByYXRpbyBlLmcuIDAuNzUgdGhlIHJlc3VsdCB3b3VsZFxuICAvLyBsaWtlbHkgYmUgbW9yZSBob3Jpem9udGFsIHRoYW4gdmVydGljYWwuXG5cbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuXG4gIHJldHVyblxuICAgIChiIDwgKCAgICAgIHJhdGlvKSAqIEhBTEZfUEkpID8gMC4wIDpcbiAgICAoYiA8ICgyLjAgLSByYXRpbykgKiBIQUxGX1BJKSA/IC1IQUxGX1BJIDpcbiAgICAoYiA8ICgyLjAgKyByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XG4gICAgKGIgPCAoNC4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDtcbn1cblxuZmxvYXQgcm91bmRUbyhmbG9hdCBhLCBmbG9hdCBiKSB7XG4gIHJldHVybiBmbG9hdChiICogZmxvb3IoKGEgKyAwLjUgKiBiKSAvIGIpKTtcbn1cblxuZmxvYXQgbG9va19yb3VuZF9uX2RpcmVjdGlvbnMoZmxvYXQgYSwgaW50IG4pIHtcbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuICBmbG9hdCBkaXYgPSBUV09fUEkgLyBmbG9hdChuKTtcbiAgZmxvYXQgYyA9IHJvdW5kVG8oYiwgZGl2KTtcbiAgcmV0dXJuIGxvb2tfdXB3YXJkcyhjKTtcbn1cblxuZmxvYXQgYXBwbHlBbGlnbk9wdGlvbihmbG9hdCByYXdBbmdsZSwgZmxvYXQgZGVsdGEpIHtcbiAgcmV0dXJuXG4gICAgKG9wdGlvbiA+ICAyKSA/IGxvb2tfcm91bmRfbl9kaXJlY3Rpb25zKHJhd0FuZ2xlICsgZGVsdGEsIG9wdGlvbikgOiAgICAgICAvLyBvcHRpb24gMy1uOiByb3VuZCB0byBuIGRpcmVjdGlvbnNcbiAgICAob3B0aW9uID09IDIpID8gbG9va19ob3Jpem9udGFsX29yX3ZlcnRpY2FsKHJhd0FuZ2xlICsgZGVsdGEsIGh2X3JhdGlvKSA6IC8vIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAgICAob3B0aW9uID09IDEpID8gcmF3QW5nbGUgKyBkZWx0YSA6ICAgICAgIC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgZmxpcCB0byBhbGlnbiB3aXRoIG9uZSBkaXJlY3Rpb24gb2YgdGhlIGF4aXNcbiAgICAob3B0aW9uID09IDApID8gbG9va191cHdhcmRzKHJhd0FuZ2xlKSA6IC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgc3RheSB1cHdhcmRzXG4gICAgKG9wdGlvbiA9PS0xKSA/IDAuMCA6ICAgICAgICAgICAgICAgICAgICAvLyB1c2VmdWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGFsbCB0ZXh0cyByZW1haW5zIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgcmF3QW5nbGU7ICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSByZXR1cm4gYmFjayByYXcgaW5wdXQgYW5nbGVcbn1cblxuYm9vbCBpc0F4aXNUaXRsZSA9IChheGlzLnggPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnkgPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnogPT0gMC4wKTtcblxudm9pZCBtYWluKCkge1xuICAvL0NvbXB1dGUgd29ybGQgb2Zmc2V0XG4gIGZsb2F0IGF4aXNEaXN0YW5jZSA9IHBvc2l0aW9uLno7XG4gIHZlYzMgZGF0YVBvc2l0aW9uID0gYXhpc0Rpc3RhbmNlICogYXhpcyArIG9mZnNldDtcblxuICBmbG9hdCBiZXRhID0gYW5nbGU7IC8vIGkuZS4gdXNlciBkZWZpbmVkIGF0dHJpYnV0ZXMgZm9yIGVhY2ggdGlja1xuXG4gIGZsb2F0IGF4aXNBbmdsZTtcbiAgZmxvYXQgY2xpcEFuZ2xlO1xuICBmbG9hdCBmbGlwO1xuXG4gIGlmIChlbmFibGVBbGlnbikge1xuICAgIGF4aXNBbmdsZSA9IChpc0F4aXNUaXRsZSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmlld0FuZ2xlKGRhdGFQb3NpdGlvbiwgZGF0YVBvc2l0aW9uICsgYXhpcyk7XG4gICAgY2xpcEFuZ2xlID0gY29tcHV0ZVZpZXdBbmdsZShkYXRhUG9zaXRpb24sIGRhdGFQb3NpdGlvbiArIGFsaWduRGlyKTtcblxuICAgIGF4aXNBbmdsZSArPSAoc2luKGF4aXNBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XG4gICAgY2xpcEFuZ2xlICs9IChzaW4oY2xpcEFuZ2xlKSA8IDAuMCkgPyBQSSA6IDAuMDtcblxuICAgIGZsaXAgPSAoZG90KHZlYzIoY29zKGF4aXNBbmdsZSksIHNpbihheGlzQW5nbGUpKSxcbiAgICAgICAgICAgICAgICB2ZWMyKHNpbihjbGlwQW5nbGUpLC1jb3MoY2xpcEFuZ2xlKSkpID4gMC4wKSA/IDEuMCA6IDAuMDtcblxuICAgIGJldGEgKz0gYXBwbHlBbGlnbk9wdGlvbihjbGlwQW5nbGUsIGZsaXAgKiBQSSk7XG4gIH1cblxuICAvL0NvbXB1dGUgcGxhbmUgb2Zmc2V0XG4gIHZlYzIgcGxhbmVDb29yZCA9IHBvc2l0aW9uLnh5ICogcGl4ZWxTY2FsZTtcblxuICBtYXQyIHBsYW5lWGZvcm0gPSBzY2FsZSAqIG1hdDIoXG4gICAgIGNvcyhiZXRhKSwgc2luKGJldGEpLFxuICAgIC1zaW4oYmV0YSksIGNvcyhiZXRhKVxuICApO1xuXG4gIHZlYzIgdmlld09mZnNldCA9IDIuMCAqIHBsYW5lWGZvcm0gKiBwbGFuZUNvb3JkIC8gcmVzb2x1dGlvbjtcblxuICAvL0NvbXB1dGUgY2xpcCBwb3NpdGlvblxuICB2ZWMzIGNsaXBQb3NpdGlvbiA9IHByb2plY3QoZGF0YVBvc2l0aW9uKTtcblxuICAvL0FwcGx5IHRleHQgb2Zmc2V0IGluIGNsaXAgY29vcmRpbmF0ZXNcbiAgY2xpcFBvc2l0aW9uICs9IHZlYzModmlld09mZnNldCwgMC4wKTtcblxuICAvL0RvbmVcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBQb3NpdGlvbiwgMS4wKTtcbn0iXSksbD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn0iXSk7ci50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBpKHQscyxsLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XSl9O3ZhciBjPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGVuYWJsZTtcbnVuaWZvcm0gdmVjMyBib3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcblxuICB2ZWMzIHNpZ25BeGlzID0gc2lnbihib3VuZHNbMV0gLSBib3VuZHNbMF0pO1xuXG4gIHZlYzMgcmVhbE5vcm1hbCA9IHNpZ25BeGlzICogbm9ybWFsO1xuXG4gIGlmKGRvdChyZWFsTm9ybWFsLCBlbmFibGUpID4gMC4wKSB7XG4gICAgdmVjMyBtaW5SYW5nZSA9IG1pbihib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBtYXhSYW5nZSA9IG1heChib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBuUG9zaXRpb24gPSBtaXgobWluUmFuZ2UsIG1heFJhbmdlLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KG5Qb3NpdGlvbiwgMS4wKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH1cblxuICBjb2xvckNoYW5uZWwgPSBhYnMocmVhbE5vcm1hbCk7XG59Il0pLHU9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3JDaGFubmVsLnggKiBjb2xvcnNbMF0gK1xuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueSAqIGNvbG9yc1sxXSArXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC56ICogY29sb3JzWzJdO1xufSJdKTtyLmJnPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYyx1LG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pfX0seyJnbC1zaGFkZXIiOjMxMixnbHNsaWZ5OjQxM31dLDI1NTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyxsKXt2YXIgdT1uKHQpLGg9aSh0LFt7YnVmZmVyOnUsc2l6ZTozfV0pLGY9byh0KTtmLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MDt2YXIgcD1uZXcgYyh0LGYsdSxoKTtyZXR1cm4gcC51cGRhdGUoZSxyLGEscyxsKSxwfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgidmVjdG9yaXplLXRleHQiKSxvPXQoIi4vc2hhZGVycyIpLnRleHQscz13aW5kb3d8fHIuZ2xvYmFsfHx7fSxsPXMuX19URVhUX0NBQ0hFfHx7fTtzLl9fVEVYVF9DQUNIRT17fTtmdW5jdGlvbiBjKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMuYnVmZmVyPXIsdGhpcy52YW89bix0aGlzLnRpY2tPZmZzZXQ9dGhpcy50aWNrQ291bnQ9dGhpcy5sYWJlbE9mZnNldD10aGlzLmxhYmVsQ291bnQ9bnVsbH12YXIgdT1jLnByb3RvdHlwZSxoPVswLDBdO3UuYmluZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnZhby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpO3ZhciBpPXRoaXMuc2hhZGVyLnVuaWZvcm1zO2kubW9kZWw9dCxpLnZpZXc9ZSxpLnByb2plY3Rpb249cixpLnBpeGVsU2NhbGU9bixoWzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLGhbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnJlc29sdXRpb249aH0sdS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLnZhby51bmJpbmQoKX0sdS51cGRhdGU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1bXTtmdW5jdGlvbiBzKHQsZSxyLG4saSxzKXt2YXIgYz1sW3JdO2N8fChjPWxbcl09e30pO3ZhciB1PWNbZV07dXx8KHU9Y1tlXT1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gYSh0LGUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLndhcm4oJ2Vycm9yIHZlY3Rvcml6aW5nIHRleHQ6IicrdCsnIiBlcnJvcjonLGUpLHtjZWxsczpbXSxwb3NpdGlvbnM6W119fX0oZSx7dHJpYW5nbGVzOiEwLGZvbnQ6cix0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEJhc2VsaW5lOiJtaWRkbGUiLGxpbmVTcGFjaW5nOmksc3R5bGV0YWdzOnN9KSk7Zm9yKHZhciBoPShufHwxMikvMTIsZj11LnBvc2l0aW9ucyxwPXUuY2VsbHMsZD0wLGc9cC5sZW5ndGg7ZDxnOysrZClmb3IodmFyIG09cFtkXSx2PTI7dj49MDstLXYpe3ZhciB5PWZbbVt2XV07by5wdXNoKGgqeVswXSwtaCp5WzFdLHQpfX1mb3IodmFyIGM9WzAsMCwwXSx1PVswLDAsMF0saD1bMCwwLDBdLGY9WzAsMCwwXSxwPXticmVha2xpbmVzOiEwLGJvbGRzOiEwLGl0YWxpY3M6ITAsc3Vic2NyaXB0czohMCxzdXBlcnNjcmlwdHM6ITB9LGQ9MDtkPDM7KytkKXtoW2RdPW8ubGVuZ3RoLzN8MCxzKC41Kih0WzBdW2RdK3RbMV1bZF0pLGVbZF0scltkXSwxMiwxLjI1LHApLGZbZF09KG8ubGVuZ3RoLzN8MCktaFtkXSxjW2RdPW8ubGVuZ3RoLzN8MDtmb3IodmFyIGc9MDtnPG5bZF0ubGVuZ3RoOysrZyluW2RdW2ddLnRleHQmJnMobltkXVtnXS54LG5bZF1bZ10udGV4dCxuW2RdW2ddLmZvbnR8fGksbltkXVtnXS5mb250U2l6ZXx8MTIsMS4yNSxwKTt1W2RdPShvLmxlbmd0aC8zfDApLWNbZF19dGhpcy5idWZmZXIudXBkYXRlKG8pLHRoaXMudGlja09mZnNldD1jLHRoaXMudGlja0NvdW50PXUsdGhpcy5sYWJlbE9mZnNldD1oLHRoaXMubGFiZWxDb3VudD1mfSx1LmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMudGlja0NvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduRGlyPW8sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25PcHQ9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSkpfSx1LmRyYXdMYWJlbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMubGFiZWxDb3VudFt0XSYmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbkRpcj1vLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduT3B0PXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLmxhYmVsQ291bnRbdF0sdGhpcy5sYWJlbE9mZnNldFt0XSkpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX19KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHsiLi9zaGFkZXJzIjoyNTQsX3Byb2Nlc3M6NTAwLCJnbC1idWZmZXIiOjI1OCwiZ2wtdmFvIjozMzIsInZlY3Rvcml6ZS10ZXh0Ijo1NzJ9XSwyNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXQrIiIsbj1yLmluZGV4T2YoIi4iKSxpPTA7bj49MCYmKGk9ci5sZW5ndGgtbi0xKTt2YXIgYT1NYXRoLnBvdygxMCxpKSxvPU1hdGgucm91bmQodCplKmEpLHM9bysiIjtpZihzLmluZGV4T2YoImUiKT49MClyZXR1cm4gczt2YXIgbD1vL2EsYz1vJWE7bzwwPyhsPTB8LU1hdGguY2VpbChsKSxjPTB8LWMpOihsPTB8TWF0aC5mbG9vcihsKSxjfD0wKTt2YXIgdT0iIitsO2lmKG88MCYmKHU9Ii0iK3UpLGkpe2Zvcih2YXIgaD0iIitjO2gubGVuZ3RoPGk7KWg9IjAiK2g7cmV0dXJuIHUrIi4iK2h9cmV0dXJuIHV9ci5jcmVhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10saT0wO2k8MzsrK2kpe2Zvcih2YXIgYT1bXSxvPSh0WzBdW2ldLHRbMV1baV0sMCk7byplW2ldPD10WzFdW2ldOysrbylhLnB1c2goe3g6byplW2ldLHRleHQ6bihlW2ldLG8pfSk7Zm9yKG89LTE7byplW2ldPj10WzBdW2ldOy0tbylhLnB1c2goe3g6byplW2ldLHRleHQ6bihlW2ldLG8pfSk7ci5wdXNoKGEpfXJldHVybiByfSxyLmVxdWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoOysrbil7dmFyIGk9dFtyXVtuXSxhPWVbcl1bbl07aWYoaS54IT09YS54fHxpLnRleHQhPT1hLnRleHR8fGkuZm9udCE9PWEuZm9udHx8aS5mb250Q29sb3IhPT1hLmZvbnRDb2xvcnx8aS5mb250U2l6ZSE9PWEuZm9udFNpemV8fGkuZHghPT1hLmR4fHxpLmR5IT09YS5keSlyZXR1cm4hMX19cmV0dXJuITB9fSx7fV0sMjU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsLGgpe3ZhciBmPWUubW9kZWx8fGMscD1lLnZpZXd8fGMsdj1lLnByb2plY3Rpb258fGMseT1lLl9vcnRob3x8ITEseD10LmJvdW5kcyxiPShoPWh8fGEoZixwLHYseCx5KSkuYXhpcztvKHUscCxmKSxvKHUsdix1KTtmb3IodmFyIF89Zyx3PTA7dzwzOysrdylfW3ddLmxvPTEvMCxfW3ddLmhpPS0xLzAsX1t3XS5waXhlbHNQZXJEYXRhVW5pdD0xLzA7dmFyIFQ9bihzKHUsdSkpO3ModSx1KTtmb3IodmFyIGs9MDtrPDM7KytrKXt2YXIgTT0oaysxKSUzLEE9KGsrMiklMyxTPW07dDpmb3Iodz0wO3c8MjsrK3cpe3ZhciBFPVtdO2lmKGJba108MCE9ISF3KXtTW2tdPXhbd11ba107Zm9yKHZhciBDPTA7QzwyOysrQyl7U1tNXT14W0Ned11bTV07Zm9yKHZhciBMPTA7TDwyOysrTClTW0FdPXhbTF5DXnddW0FdLEUucHVzaChTLnNsaWNlKCkpfXZhciBQPXk/NTo0O2ZvcihDPVA7Qz09PVA7KytDKXtpZigwPT09RS5sZW5ndGgpY29udGludWUgdDtFPWkucG9zaXRpdmUoRSxUW0NdKX1mb3IoQz0wO0M8RS5sZW5ndGg7KytDKXtBPUVbQ107dmFyIEk9ZChtLHUsQSxyLGwpO2ZvcihMPTA7TDwzOysrTClfW0xdLmxvPU1hdGgubWluKF9bTF0ubG8sQVtMXSksX1tMXS5oaT1NYXRoLm1heChfW0xdLmhpLEFbTF0pLEwhPT1rJiYoX1tMXS5waXhlbHNQZXJEYXRhVW5pdD1NYXRoLm1pbihfW0xdLnBpeGVsc1BlckRhdGFVbml0LE1hdGguYWJzKElbTF0pKSl9fX19cmV0dXJuIF99O3ZhciBuPXQoImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXMiKSxpPXQoInNwbGl0LXBvbHlnb24iKSxhPXQoIi4vbGliL2N1YmUuanMiKSxvPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxzPXQoImdsLW1hdDQvdHJhbnNwb3NlIiksbD10KCJnbC12ZWM0L3RyYW5zZm9ybU1hdDQiKSxjPW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKSx1PW5ldyBGbG9hdDMyQXJyYXkoMTYpO2Z1bmN0aW9uIGgodCxlLHIpe3RoaXMubG89dCx0aGlzLmhpPWUsdGhpcy5waXhlbHNQZXJEYXRhVW5pdD1yfXZhciBmPVswLDAsMCwxXSxwPVswLDAsMCwxXTtmdW5jdGlvbiBkKHQsZSxyLG4saSl7Zm9yKHZhciBhPTA7YTwzOysrYSl7Zm9yKHZhciBvPWYscz1wLGM9MDtjPDM7KytjKXNbY109b1tjXT1yW2NdO3NbM109b1szXT0xLHNbYV0rPTEsbChzLHMsZSksc1szXTwwJiYodFthXT0xLzApLG9bYV0tPTEsbChvLG8sZSksb1szXTwwJiYodFthXT0xLzApO3ZhciB1PShvWzBdL29bM10tc1swXS9zWzNdKSpuLGg9KG9bMV0vb1szXS1zWzFdL3NbM10pKmk7dFthXT0uMjUqTWF0aC5zcXJ0KHUqdStoKmgpfXJldHVybiB0fXZhciBnPVtuZXcgaCgxLzAsLTEvMCwxLzApLG5ldyBoKDEvMCwtMS8wLDEvMCksbmV3IGgoMS8wLC0xLzAsMS8wKV0sbT1bMCwwLDBdfSx7Ii4vbGliL2N1YmUuanMiOjI1MiwiZXh0cmFjdC1mcnVzdHVtLXBsYW5lcyI6MjQwLCJnbC1tYXQ0L211bHRpcGx5IjoyODAsImdsLW1hdDQvdHJhbnNwb3NlIjoyODksImdsLXZlYzQvdHJhbnNmb3JtTWF0NCI6NDAzLCJzcGxpdC1wb2x5Z29uIjo1Mzh9XSwyNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHlwZWRhcnJheS1wb29sIiksaT10KCJuZGFycmF5LW9wcyIpLGE9dCgibmRhcnJheSIpLG89WyJ1aW50OCIsInVpbnQ4X2NsYW1wZWQiLCJ1aW50MTYiLCJ1aW50MzIiLCJpbnQ4IiwiaW50MTYiLCJpbnQzMiIsImZsb2F0MzIiXTtmdW5jdGlvbiBzKHQsZSxyLG4saSl7dGhpcy5nbD10LHRoaXMudHlwZT1lLHRoaXMuaGFuZGxlPXIsdGhpcy5sZW5ndGg9bix0aGlzLnVzYWdlPWl9dmFyIGw9cy5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7dmFyIG89aS5sZW5ndGgqaS5CWVRFU19QRVJfRUxFTUVOVDtpZihhPDApcmV0dXJuIHQuYnVmZmVyRGF0YShlLGksbiksbztpZihvK2E+cil0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSWYgcmVzaXppbmcgYnVmZmVyLCBtdXN0IG5vdCBzcGVjaWZ5IG9mZnNldCIpO3JldHVybiB0LmJ1ZmZlclN1YkRhdGEoZSxhLGkpLHJ9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uLm1hbGxvYyh0Lmxlbmd0aCxlKSxpPXQubGVuZ3RoLGE9MDthPGk7KythKXJbYV09dFthXTtyZXR1cm4gcn1sLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuaGFuZGxlKX0sbC51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLG51bGwpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmhhbmRsZSl9LGwudXBkYXRlPWZ1bmN0aW9uKHQsZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYoZT0tMSksdGhpcy5iaW5kKCksIm9iamVjdCI9PXR5cGVvZiB0JiYidW5kZWZpbmVkIiE9dHlwZW9mIHQuc2hhcGUpe3ZhciByPXQuZHR5cGU7aWYoby5pbmRleE9mKHIpPDAmJihyPSJmbG9hdDMyIiksdGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUilyPWdsLmdldEV4dGVuc2lvbigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpJiYidWludDE2IiE9PXI/InVpbnQzMiI6InVpbnQxNiI7aWYocj09PXQuZHR5cGUmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEsbj1lLmxlbmd0aC0xO24+PTA7LS1uKXtpZihlW25dIT09cilyZXR1cm4hMTtyKj10W25dfXJldHVybiEwfSh0LnNoYXBlLHQuc3RyaWRlKSkwPT09dC5vZmZzZXQmJnQuZGF0YS5sZW5ndGg9PT10LnNoYXBlWzBdP3RoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEsZSk6dGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YS5zdWJhcnJheSh0Lm9mZnNldCx0LnNoYXBlWzBdKSxlKTtlbHNle3ZhciBzPW4ubWFsbG9jKHQuc2l6ZSxyKSxsPWEocyx0LnNoYXBlKTtpLmFzc2lnbihsLHQpLHRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSxlPDA/czpzLnN1YmFycmF5KDAsdC5zaXplKSxlKSxuLmZyZWUocyl9fWVsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGg7aD10aGlzLnR5cGU9PT10aGlzLmdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSP3UodCwidWludDE2Iik6dSh0LCJmbG9hdDMyIiksdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGU8MD9oOmguc3ViYXJyYXkoMCx0Lmxlbmd0aCksZSksbi5mcmVlKGgpfWVsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LGUpO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiB0JiZ2b2lkIDAhPT10KXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIGRhdGEgdHlwZSIpO2lmKGU+PTApdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IENhbm5vdCBzcGVjaWZ5IG9mZnNldCB3aGVuIHJlc2l6aW5nIGJ1ZmZlciIpOyh0fD0wKTw9MCYmKHQ9MSksdGhpcy5nbC5idWZmZXJEYXRhKHRoaXMudHlwZSwwfHQsdGhpcy51c2FnZSksdGhpcy5sZW5ndGg9dH19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZihyPXJ8fHQuQVJSQVlfQlVGRkVSLG49bnx8dC5EWU5BTUlDX0RSQVcsciE9PXQuQVJSQVlfQlVGRkVSJiZyIT09dC5FTEVNRU5UX0FSUkFZX0JVRkZFUil0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSW52YWxpZCB0eXBlIGZvciB3ZWJnbCBidWZmZXIsIG11c3QgYmUgZWl0aGVyIGdsLkFSUkFZX0JVRkZFUiBvciBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiIpO2lmKG4hPT10LkRZTkFNSUNfRFJBVyYmbiE9PXQuU1RBVElDX0RSQVcmJm4hPT10LlNUUkVBTV9EUkFXKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIHVzYWdlIGZvciBidWZmZXIsIG11c3QgYmUgZWl0aGVyIGdsLkRZTkFNSUNfRFJBVywgZ2wuU1RBVElDX0RSQVcgb3IgZ2wuU1RSRUFNX0RSQVciKTt2YXIgaT10LmNyZWF0ZUJ1ZmZlcigpLGE9bmV3IHModCxyLGksMCxuKTtyZXR1cm4gYS51cGRhdGUoZSksYX19LHtuZGFycmF5OjQ2OSwibmRhcnJheS1vcHMiOjQ2NCwidHlwZWRhcnJheS1wb29sIjo1Njd9XSwyNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdmVjMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucG9zaXRpb25zLGk9dC52ZWN0b3JzLGE9e3Bvc2l0aW9uczpbXSx2ZXJ0ZXhJbnRlbnNpdHk6W10sdmVydGV4SW50ZW5zaXR5Qm91bmRzOnQudmVydGV4SW50ZW5zaXR5Qm91bmRzLHZlY3RvcnM6W10sY2VsbHM6W10sY29uZU9mZnNldDp0LmNvbmVPZmZzZXQsY29sb3JtYXA6dC5jb2xvcm1hcH07aWYoMD09PXQucG9zaXRpb25zLmxlbmd0aClyZXR1cm4gZSYmKGVbMF09WzAsMCwwXSxlWzFdPVswLDAsMF0pLGE7Zm9yKHZhciBvPTAscz0xLzAsbD0tMS8wLGM9MS8wLHU9LTEvMCxoPTEvMCxmPS0xLzAscD1udWxsLGQ9bnVsbCxnPVtdLG09MS8wLHY9ITEseT0wO3k8ci5sZW5ndGg7eSsrKXt2YXIgeD1yW3ldO3M9TWF0aC5taW4oeFswXSxzKSxsPU1hdGgubWF4KHhbMF0sbCksYz1NYXRoLm1pbih4WzFdLGMpLHU9TWF0aC5tYXgoeFsxXSx1KSxoPU1hdGgubWluKHhbMl0saCksZj1NYXRoLm1heCh4WzJdLGYpO3ZhciBiPWlbeV07aWYobi5sZW5ndGgoYik+byYmKG89bi5sZW5ndGgoYikpLHkpe3ZhciBfPTIqbi5kaXN0YW5jZShwLHgpLyhuLmxlbmd0aChkKStuLmxlbmd0aChiKSk7Xz8obT1NYXRoLm1pbihtLF8pLHY9ITEpOnY9ITB9dnx8KHA9eCxkPWIpLGcucHVzaChiKX12YXIgdz1bcyxjLGhdLFQ9W2wsdSxmXTtlJiYoZVswXT13LGVbMV09VCksMD09PW8mJihvPTEpO3ZhciBrPTEvbztpc0Zpbml0ZShtKXx8KG09MSksYS52ZWN0b3JTY2FsZT1tO3ZhciBNPXQuY29uZVNpemV8fC41O3QuYWJzb2x1dGVDb25lU2l6ZSYmKE09dC5hYnNvbHV0ZUNvbmVTaXplKmspLGEuY29uZVNjYWxlPU07eT0wO2Zvcih2YXIgQT0wO3k8ci5sZW5ndGg7eSsrKWZvcih2YXIgUz0oeD1yW3ldKVswXSxFPXhbMV0sQz14WzJdLEw9Z1t5XSxQPW4ubGVuZ3RoKEwpKmssST0wO0k8ODtJKyspe2EucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEucG9zaXRpb25zLnB1c2goW1MsRSxDLEErK10pLGEudmVjdG9ycy5wdXNoKEwpLGEudmVjdG9ycy5wdXNoKEwpLGEudmVjdG9ycy5wdXNoKEwpLGEudmVjdG9ycy5wdXNoKEwpLGEudmVjdG9ycy5wdXNoKEwpLGEudmVjdG9ycy5wdXNoKEwpLGEudmVydGV4SW50ZW5zaXR5LnB1c2goUCxQLFApLGEudmVydGV4SW50ZW5zaXR5LnB1c2goUCxQLFApO3ZhciB6PWEucG9zaXRpb25zLmxlbmd0aDthLmNlbGxzLnB1c2goW3otNix6LTUsei00XSxbei0zLHotMix6LTFdKX1yZXR1cm4gYX07dmFyIGk9dCgiLi9saWIvc2hhZGVycyIpO2UuZXhwb3J0cy5jcmVhdGVNZXNoPXQoIi4vY3JlYXRlX21lc2giKSxlLmV4cG9ydHMuY3JlYXRlQ29uZU1lc2g9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5leHBvcnRzLmNyZWF0ZU1lc2godCxyLHtzaGFkZXJzOmksdHJhY2VUeXBlOiJjb25lIn0pfX0seyIuL2NyZWF0ZV9tZXNoIjoyNjAsIi4vbGliL3NoYWRlcnMiOjI2MSwiZ2wtdmVjMyI6MzUxfV0sMjYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoImdsLXRleHR1cmUyZCIpLHM9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGw9dCgiZ2wtbWF0NC9pbnZlcnQiKSxjPXQoIm5kYXJyYXkiKSx1PXQoImNvbG9ybWFwIiksaD1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gZih0LGUscixuLGksYSxvLHMsbCxjLHUpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLnBpY2tTaGFkZXI9bix0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWksdGhpcy50cmlhbmdsZVZlY3RvcnM9YSx0aGlzLnRyaWFuZ2xlQ29sb3JzPXMsdGhpcy50cmlhbmdsZVVWcz1sLHRoaXMudHJpYW5nbGVJZHM9byx0aGlzLnRyaWFuZ2xlVkFPPWMsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFjZVR5cGU9dSx0aGlzLnR1YmVTY2FsZT0xLHRoaXMuY29uZVNjYWxlPTIsdGhpcy52ZWN0b3JTY2FsZT0xLHRoaXMuY29uZU9mZnNldD0uMjUsdGhpcy5fbW9kZWw9aCx0aGlzLl92aWV3PWgsdGhpcy5fcHJvamVjdGlvbj1oLHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIHA9Zi5wcm90b3R5cGU7ZnVuY3Rpb24gZCh0LGUpe3ZhciByPW4odCxlLm1lc2hTaGFkZXIudmVydGV4LGUubWVzaFNoYWRlci5mcmFnbWVudCxudWxsLGUubWVzaFNoYWRlci5hdHRyaWJ1dGVzKTtyZXR1cm4gci5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsci5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsci5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsci5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj00LHJ9ZnVuY3Rpb24gZyh0LGUpe3ZhciByPW4odCxlLnBpY2tTaGFkZXIudmVydGV4LGUucGlja1NoYWRlci5mcmFnbWVudCxudWxsLGUucGlja1NoYWRlci5hdHRyaWJ1dGVzKTtyZXR1cm4gci5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsci5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsci5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj00LHJ9cC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LHAuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0scC5waWNrU2xvdHM9MSxwLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LHAudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLCJsaWdodFBvc2l0aW9uImluIHQmJih0aGlzLmxpZ2h0UG9zaXRpb249dC5saWdodFBvc2l0aW9uKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksImFtYmllbnQiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksImRpZmZ1c2UiaW4gdCYmKHRoaXMuZGlmZnVzZUxpZ2h0PXQuZGlmZnVzZSksInNwZWN1bGFyImluIHQmJih0aGlzLnNwZWN1bGFyTGlnaHQ9dC5zcGVjdWxhciksInJvdWdobmVzcyJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLCJmcmVzbmVsImluIHQmJih0aGlzLmZyZXNuZWw9dC5mcmVzbmVsKSx2b2lkIDAhPT10LnR1YmVTY2FsZSYmKHRoaXMudHViZVNjYWxlPXQudHViZVNjYWxlKSx2b2lkIDAhPT10LnZlY3RvclNjYWxlJiYodGhpcy52ZWN0b3JTY2FsZT10LnZlY3RvclNjYWxlKSx2b2lkIDAhPT10LmNvbmVTY2FsZSYmKHRoaXMuY29uZVNjYWxlPXQuY29uZVNjYWxlKSx2b2lkIDAhPT10LmNvbmVPZmZzZXQmJih0aGlzLmNvbmVPZmZzZXQ9dC5jb25lT2Zmc2V0KSx0LmNvbG9ybWFwJiYodGhpcy50ZXh0dXJlLnNoYXBlPVsyNTYsMjU2XSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUuTElORUFSX01JUE1BUF9MSU5FQVIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLkxJTkVBUix0aGlzLnRleHR1cmUuc2V0UGl4ZWxzKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT11KHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDoicmdiYSJ9KSxyPW5ldyBVaW50OEFycmF5KDEwMjQpLG49MDtuPDI1NjsrK24pe2Zvcih2YXIgaT1lW25dLGE9MDthPDM7KythKXJbNCpuK2FdPWlbYV07cls0Km4rM109MjU1KmlbM119cmV0dXJuIGMocixbMjU2LDI1Niw0XSxbNCwwLDFdKX0odC5jb2xvcm1hcCkpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcCgpKTt2YXIgcj10LmNlbGxzLG49dC5wb3NpdGlvbnMsaT10LnZlY3RvcnM7aWYobiYmciYmaSl7dmFyIGE9W10sbz1bXSxzPVtdLGw9W10saD1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bix0aGlzLnZlY3RvcnM9aTt2YXIgZj10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLHA9dC52ZXJ0ZXhJbnRlbnNpdHksZD0xLzAsZz0tMS8wO2lmKHApaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpZD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sZz0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIG09MDttPHAubGVuZ3RoOysrbSl7dmFyIHY9cFttXTtkPU1hdGgubWluKGQsdiksZz1NYXRoLm1heChnLHYpfWVsc2UgZm9yKG09MDttPG4ubGVuZ3RoOysrbSl7dj1uW21dWzJdO2Q9TWF0aC5taW4oZCx2KSxnPU1hdGgubWF4KGcsdil9dGhpcy5pbnRlbnNpdHk9cHx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obiksdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKG09MDttPG4ubGVuZ3RoOysrbSlmb3IodmFyIHk9blttXSx4PTA7eDwzOysreCkhaXNOYU4oeVt4XSkmJmlzRmluaXRlKHlbeF0pJiYodGhpcy5ib3VuZHNbMF1beF09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1beF0seVt4XSksdGhpcy5ib3VuZHNbMV1beF09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1beF0seVt4XSkpO3ZhciBiPTA7dDpmb3IobT0wO208ci5sZW5ndGg7KyttKXt2YXIgXz1yW21dO3N3aXRjaChfLmxlbmd0aCl7Y2FzZSAzOmZvcih4PTA7eDwzOysreCl7eT1uW1Q9X1t4XV07Zm9yKHZhciB3PTA7dzwzOysrdylpZihpc05hTih5W3ddKXx8IWlzRmluaXRlKHlbd10pKWNvbnRpbnVlIHR9Zm9yKHg9MDt4PDM7Kyt4KXt2YXIgVDt5PW5bVD1fWzIteF1dO2EucHVzaCh5WzBdLHlbMV0seVsyXSx5WzNdKTt2YXIgaz1pW1RdO28ucHVzaChrWzBdLGtbMV0sa1syXSxrWzNdfHwwKTt2YXIgTSxBPWY7Mz09PUEubGVuZ3RoP3MucHVzaChBWzBdLEFbMV0sQVsyXSwxKTpzLnB1c2goQVswXSxBWzFdLEFbMl0sQVszXSksTT1wP1socFtUXS1kKS8oZy1kKSwwXTpbKHlbMl0tZCkvKGctZCksMF0sbC5wdXNoKE1bMF0sTVsxXSksaC5wdXNoKG0pfWIrPTF9fXRoaXMudHJpYW5nbGVDb3VudD1iLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGEpLHRoaXMudHJpYW5nbGVWZWN0b3JzLnVwZGF0ZShvKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLnVwZGF0ZShzKSx0aGlzLnRyaWFuZ2xlVVZzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaCkpfX0scC5kcmF3VHJhbnNwYXJlbnQ9cC5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxoLG49dC52aWV3fHxoLGk9dC5wcm9qZWN0aW9ufHxoLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIGM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6aC5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxvcGFjaXR5OnRoaXMub3BhY2l0eSx0dWJlU2NhbGU6dGhpcy50dWJlU2NhbGUsdmVjdG9yU2NhbGU6dGhpcy52ZWN0b3JTY2FsZSxjb25lU2NhbGU6dGhpcy5jb25lU2NhbGUsY29uZU9mZnNldDp0aGlzLmNvbmVPZmZzZXQsdGV4dHVyZTowfTtjLmludmVyc2VNb2RlbD1sKGMuaW52ZXJzZU1vZGVsLGMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtzKHUsYy52aWV3LGMubW9kZWwpLHModSxjLnByb2plY3Rpb24sdSksbCh1LHUpO2ZvcihvPTA7bzwzOysrbyljLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGY9dVsxNV07Zm9yKG89MDtvPDM7KytvKWYrPXRoaXMubGlnaHRQb3NpdGlvbltvXSp1WzQqbyszXTtmb3Iobz0wO288MzsrK28pe2Zvcih2YXIgcD11WzEyK29dLGQ9MDtkPDM7KytkKXArPXVbNCpkK29dKnRoaXMubGlnaHRQb3NpdGlvbltkXTtjLmxpZ2h0UG9zaXRpb25bb109cC9mfWlmKHRoaXMudHJpYW5nbGVDb3VudD4wKXt2YXIgZz10aGlzLnRyaVNoYWRlcjtnLmJpbmQoKSxnLnVuaWZvcm1zPWMsdGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCl9fSxwLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxoLG49dC52aWV3fHxoLGk9dC5wcm9qZWN0aW9ufHxoLGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxjbGlwQm91bmRzOmEsdHViZVNjYWxlOnRoaXMudHViZVNjYWxlLHZlY3RvclNjYWxlOnRoaXMudmVjdG9yU2NhbGUsY29uZVNjYWxlOnRoaXMuY29uZVNjYWxlLGNvbmVPZmZzZXQ6dGhpcy5jb25lT2Zmc2V0LHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9LGw9dGhpcy5waWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKX0scC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlWzBdKzI1Nip0LnZhbHVlWzFdKzY1NTM2KnQudmFsdWVbMl0scj10aGlzLmNlbGxzW2VdLG49dGhpcy5wb3NpdGlvbnNbclsxXV0uc2xpY2UoMCwzKSxpPXtwb3NpdGlvbjpuLGRhdGFDb29yZGluYXRlOm4saW5kZXg6TWF0aC5mbG9vcihyWzFdLzQ4KX07cmV0dXJuImNvbmUiPT09dGhpcy50cmFjZVR5cGU/aS5pbmRleD1NYXRoLmZsb29yKHJbMV0vNDgpOiJzdHJlYW10dWJlIj09PXRoaXMudHJhY2VUeXBlJiYoaS5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHlbclsxXV0saS52ZWxvY2l0eT10aGlzLnZlY3RvcnNbclsxXV0uc2xpY2UoMCwzKSxpLmRpdmVyZ2VuY2U9dGhpcy52ZWN0b3JzW3JbMV1dWzNdLGkuaW5kZXg9ZSksaX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ci5zaGFkZXJzOzE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHM9ZCh0LG4pLGw9Zyh0LG4pLHU9byh0LGMobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTt1LmdlbmVyYXRlTWlwbWFwKCksdS5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUix1Lm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgaD1pKHQpLHA9aSh0KSxtPWkodCksdj1pKHQpLHk9aSh0KSx4PWEodCxbe2J1ZmZlcjpoLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6eSx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjptLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dix0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOnAsdHlwZTp0LkZMT0FULHNpemU6NH1dKSxiPW5ldyBmKHQsdSxzLGwsaCxwLHksbSx2LHgsci50cmFjZVR5cGV8fCJjb25lIik7cmV0dXJuIGIudXBkYXRlKGUpLGJ9fSx7Y29sb3JtYXA6MTMxLCJnbC1idWZmZXIiOjI1OCwiZ2wtbWF0NC9pbnZlcnQiOjI3OCwiZ2wtbWF0NC9tdWx0aXBseSI6MjgwLCJnbC1zaGFkZXIiOjMxMiwiZ2wtdGV4dHVyZTJkIjozMjcsImdsLXZhbyI6MzMyLG5kYXJyYXk6NDY5fV0sMjYxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XG4gIH1cbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSBjb25lIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cbi8vXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIGNvbmUgd2l0aCBpdHMgdG9wIGF0IG9yaWdpbiBhbmQgaGVpZ2h0IG9mIDEuMCxcbi8vIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhdHRyaWJ1dGUuXG4vL1xuLy8gRWFjaCBjb25lIGlzIG1hZGUgdXAgb2YgYSB0b3AgdmVydGV4LCBhIGNlbnRlciBiYXNlIHZlcnRleCBhbmQgYmFzZSBwZXJpbWV0ZXIgdmVydGljZXMuXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIGNvbmUgYnkgdGhlIGZvbGxvd2luZzpcbi8vICAgc2VnbWVudCArIDAgdG9wIHZlcnRleFxuLy8gICBzZWdtZW50ICsgMSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gICBzZWdtZW50ICsgMiBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDMgY2VudGVyIGJhc2UgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyA0IHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgNSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gV2hlcmUgc2VnbWVudCBpcyB0aGUgbnVtYmVyIG9mIHRoZSByYWRpYWwgc2VnbWVudCAqIDYgYW5kIGEgaXMgdGhlIGFuZ2xlIGF0IHRoYXQgcmFkaWFsIHNlZ21lbnQuXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQsIGZsb29yKGluZGV4IC8gNilcbi8vIFRvIGdvIGZyb20gc2VnbWVudCB0byBhbmdsZSwgMipwaSAqIChzZWdtZW50L3NlZ21lbnRDb3VudClcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCBpbmRleCwgaW5kZXggLSAoc2VnbWVudCo2KVxuLy9cbnZlYzMgZ2V0Q29uZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgcmF3SW5kZXgsIGZsb2F0IGNvbmVPZmZzZXQsIG91dCB2ZWMzIG5vcm1hbCkge1xuXG4gIGNvbnN0IGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBmbG9hdCBpbmRleCA9IHJhd0luZGV4IC0gZmxvb3IocmF3SW5kZXggL1xuICAgIChzZWdtZW50Q291bnQgKiA2LjApKSAqXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCk7XG5cbiAgZmxvYXQgc2VnbWVudCA9IGZsb29yKDAuMDAxICsgaW5kZXgvNi4wKTtcbiAgZmxvYXQgc2VnbWVudEluZGV4ID0gaW5kZXggLSAoc2VnbWVudCo2LjApO1xuXG4gIG5vcm1hbCA9IC1ub3JtYWxpemUoZCk7XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA+IDIuOTkgJiYgc2VnbWVudEluZGV4IDwgMy4wMSkge1xuICAgIHJldHVybiBtaXgodmVjMygwLjApLCAtZCwgY29uZU9mZnNldCk7XG4gIH1cblxuICBmbG9hdCBuZXh0QW5nbGUgPSAoXG4gICAgKHNlZ21lbnRJbmRleCA+IDAuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDEuMDEpIHx8XG4gICAgKHNlZ21lbnRJbmRleCA+IDQuOTkgJiYgIHNlZ21lbnRJbmRleCA8IDUuMDEpXG4gICkgPyAxLjAgOiAwLjA7XG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqICgoc2VnbWVudCArIG5leHRBbmdsZSkgLyBzZWdtZW50Q291bnQpO1xuXG4gIHZlYzMgdjEgPSBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgdmVjMyB2MiA9IHYxIC0gZDtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpKjAuMjU7XG4gIHZlYzMgdjMgPSB2MiArIHggKyB5O1xuICBpZiAoc2VnbWVudEluZGV4IDwgMy4wKSB7XG4gICAgdmVjMyB0eCA9IHUgKiBzaW4oYW5nbGUpO1xuICAgIHZlYzMgdHkgPSB2ICogLWNvcyhhbmdsZSk7XG4gICAgdmVjMyB0YW5nZW50ID0gdHggKyB0eTtcbiAgICBub3JtYWwgPSBub3JtYWxpemUoY3Jvc3ModjMgLSB2MSwgdGFuZ2VudCkpO1xuICB9XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA9PSAwLjApIHtcbiAgICByZXR1cm4gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIH1cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZSwgY29uZVNjYWxlLCBjb25lT2Zmc2V0O1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb24sIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gU2NhbGUgdGhlIHZlY3RvciBtYWduaXR1ZGUgdG8gc3RheSBjb25zdGFudCB3aXRoXG4gIC8vIG1vZGVsICYgdmlldyBjaGFuZ2VzLlxuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRDb25lUG9zaXRpb24obWF0Myhtb2RlbCkgKiAoKHZlY3RvclNjYWxlICogY29uZVNjYWxlKSAqIHZlY3RvciksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCk7XG4gIHZlYzQgY29uZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoWFlaLCAwLjApO1xuXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX25vcm1hbCA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsIDAuMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG5cbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNChjb25lUG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdF9wb3NpdGlvbiAgPSB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG5cbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX2RhdGEgICAgICAgICAgID0gY29uZVBvc2l0aW9uLnh5ejtcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xufVxuIl0pLGE9bihbIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MsXG4gIGZsb2F0IGZyZXNuZWwpIHtcblxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG5cbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcblxuICAvL0dlb21ldHJpYyB0ZXJtXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcbiAgXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xuXG4gIC8vRnJlc25lbCB0ZXJtXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xuXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIGNvbmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxuLy8gcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdmVjdG9yIGF0dHJpYnV0ZS5cbi8vXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgY29uZSBieSB0aGUgZm9sbG93aW5nOlxuLy8gICBzZWdtZW50ICsgMCB0b3AgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyAgIHNlZ21lbnQgKyAyIHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgMyBjZW50ZXIgYmFzZSB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyA1IHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyBXaGVyZSBzZWdtZW50IGlzIHRoZSBudW1iZXIgb2YgdGhlIHJhZGlhbCBzZWdtZW50ICogNiBhbmQgYSBpcyB0aGUgYW5nbGUgYXQgdGhhdCByYWRpYWwgc2VnbWVudC5cbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxuLy8gVG8gZ28gZnJvbSBzZWdtZW50IHRvIGFuZ2xlLCAyKnBpICogKHNlZ21lbnQvc2VnbWVudENvdW50KVxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50IGluZGV4LCBpbmRleCAtIChzZWdtZW50KjYpXG4vL1xudmVjMyBnZXRDb25lUG9zaXRpb24odmVjMyBkLCBmbG9hdCByYXdJbmRleCwgZmxvYXQgY29uZU9mZnNldCwgb3V0IHZlYzMgbm9ybWFsKSB7XG5cbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGluZGV4ID0gcmF3SW5kZXggLSBmbG9vcihyYXdJbmRleCAvXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCkpICpcbiAgICAoc2VnbWVudENvdW50ICogNi4wKTtcblxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoMC4wMDEgKyBpbmRleC82LjApO1xuICBmbG9hdCBzZWdtZW50SW5kZXggPSBpbmRleCAtIChzZWdtZW50KjYuMCk7XG5cbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcblxuICBpZiAoc2VnbWVudEluZGV4ID4gMi45OSAmJiBzZWdtZW50SW5kZXggPCAzLjAxKSB7XG4gICAgcmV0dXJuIG1peCh2ZWMzKDAuMCksIC1kLCBjb25lT2Zmc2V0KTtcbiAgfVxuXG4gIGZsb2F0IG5leHRBbmdsZSA9IChcbiAgICAoc2VnbWVudEluZGV4ID4gMC45OSAmJiAgc2VnbWVudEluZGV4IDwgMS4wMSkgfHxcbiAgICAoc2VnbWVudEluZGV4ID4gNC45OSAmJiAgc2VnbWVudEluZGV4IDwgNS4wMSlcbiAgKSA/IDEuMCA6IDAuMDtcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKChzZWdtZW50ICsgbmV4dEFuZ2xlKSAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB2ZWMzIHYyID0gdjEgLSBkO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB2MyA9IHYyICsgeCArIHk7XG4gIGlmIChzZWdtZW50SW5kZXggPCAzLjApIHtcbiAgICB2ZWMzIHR4ID0gdSAqIHNpbihhbmdsZSk7XG4gICAgdmVjMyB0eSA9IHYgKiAtY29zKGFuZ2xlKTtcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyh2MyAtIHYxLCB0YW5nZW50KSk7XG4gIH1cblxuICBpZiAoc2VnbWVudEluZGV4ID09IDAuMCkge1xuICAgIHJldHVybiBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgfVxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGUsIGNvbmVTY2FsZSwgY29uZU9mZnNldDtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRDb25lUG9zaXRpb24obWF0Myhtb2RlbCkgKiAoKHZlY3RvclNjYWxlICogY29uZVNjYWxlKSAqIHZlY3Rvci54eXopLCBwb3NpdGlvbi53LCBjb25lT2Zmc2V0LCBub3JtYWwpO1xuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIGNvbmVQb3NpdGlvbjtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWMzIn1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWM0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In0se25hbWU6InZlY3RvciIsdHlwZToidmVjMyJ9XX19LHtnbHNsaWZ5OjQxM31dLDI2MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17MDoiTk9ORSIsMToiT05FIiwyOiJMSU5FX0xPT1AiLDM6IkxJTkVfU1RSSVAiLDQ6IlRSSUFOR0xFUyIsNToiVFJJQU5HTEVfU1RSSVAiLDY6IlRSSUFOR0xFX0ZBTiIsMjU2OiJERVBUSF9CVUZGRVJfQklUIiw1MTI6Ik5FVkVSIiw1MTM6IkxFU1MiLDUxNDoiRVFVQUwiLDUxNToiTEVRVUFMIiw1MTY6IkdSRUFURVIiLDUxNzoiTk9URVFVQUwiLDUxODoiR0VRVUFMIiw1MTk6IkFMV0FZUyIsNzY4OiJTUkNfQ09MT1IiLDc2OToiT05FX01JTlVTX1NSQ19DT0xPUiIsNzcwOiJTUkNfQUxQSEEiLDc3MToiT05FX01JTlVTX1NSQ19BTFBIQSIsNzcyOiJEU1RfQUxQSEEiLDc3MzoiT05FX01JTlVTX0RTVF9BTFBIQSIsNzc0OiJEU1RfQ09MT1IiLDc3NToiT05FX01JTlVTX0RTVF9DT0xPUiIsNzc2OiJTUkNfQUxQSEFfU0FUVVJBVEUiLDEwMjQ6IlNURU5DSUxfQlVGRkVSX0JJVCIsMTAyODoiRlJPTlQiLDEwMjk6IkJBQ0siLDEwMzI6IkZST05UX0FORF9CQUNLIiwxMjgwOiJJTlZBTElEX0VOVU0iLDEyODE6IklOVkFMSURfVkFMVUUiLDEyODI6IklOVkFMSURfT1BFUkFUSU9OIiwxMjg1OiJPVVRfT0ZfTUVNT1JZIiwxMjg2OiJJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiIsMjMwNDoiQ1ciLDIzMDU6IkNDVyIsMjg0OToiTElORV9XSURUSCIsMjg4NDoiQ1VMTF9GQUNFIiwyODg1OiJDVUxMX0ZBQ0VfTU9ERSIsMjg4NjoiRlJPTlRfRkFDRSIsMjkyODoiREVQVEhfUkFOR0UiLDI5Mjk6IkRFUFRIX1RFU1QiLDI5MzA6IkRFUFRIX1dSSVRFTUFTSyIsMjkzMToiREVQVEhfQ0xFQVJfVkFMVUUiLDI5MzI6IkRFUFRIX0ZVTkMiLDI5NjA6IlNURU5DSUxfVEVTVCIsMjk2MToiU1RFTkNJTF9DTEVBUl9WQUxVRSIsMjk2MjoiU1RFTkNJTF9GVU5DIiwyOTYzOiJTVEVOQ0lMX1ZBTFVFX01BU0siLDI5NjQ6IlNURU5DSUxfRkFJTCIsMjk2NToiU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwiLDI5NjY6IlNURU5DSUxfUEFTU19ERVBUSF9QQVNTIiwyOTY3OiJTVEVOQ0lMX1JFRiIsMjk2ODoiU1RFTkNJTF9XUklURU1BU0siLDI5Nzg6IlZJRVdQT1JUIiwzMDI0OiJESVRIRVIiLDMwNDI6IkJMRU5EIiwzMDg4OiJTQ0lTU09SX0JPWCIsMzA4OToiU0NJU1NPUl9URVNUIiwzMTA2OiJDT0xPUl9DTEVBUl9WQUxVRSIsMzEwNzoiQ09MT1JfV1JJVEVNQVNLIiwzMzE3OiJVTlBBQ0tfQUxJR05NRU5UIiwzMzMzOiJQQUNLX0FMSUdOTUVOVCIsMzM3OToiTUFYX1RFWFRVUkVfU0laRSIsMzM4NjoiTUFYX1ZJRVdQT1JUX0RJTVMiLDM0MDg6IlNVQlBJWEVMX0JJVFMiLDM0MTA6IlJFRF9CSVRTIiwzNDExOiJHUkVFTl9CSVRTIiwzNDEyOiJCTFVFX0JJVFMiLDM0MTM6IkFMUEhBX0JJVFMiLDM0MTQ6IkRFUFRIX0JJVFMiLDM0MTU6IlNURU5DSUxfQklUUyIsMzU1MzoiVEVYVFVSRV8yRCIsNDM1MjoiRE9OVF9DQVJFIiw0MzUzOiJGQVNURVNUIiw0MzU0OiJOSUNFU1QiLDUxMjA6IkJZVEUiLDUxMjE6IlVOU0lHTkVEX0JZVEUiLDUxMjI6IlNIT1JUIiw1MTIzOiJVTlNJR05FRF9TSE9SVCIsNTEyNDoiSU5UIiw1MTI1OiJVTlNJR05FRF9JTlQiLDUxMjY6IkZMT0FUIiw1Mzg2OiJJTlZFUlQiLDU4OTA6IlRFWFRVUkUiLDY0MDE6IlNURU5DSUxfSU5ERVgiLDY0MDI6IkRFUFRIX0NPTVBPTkVOVCIsNjQwNjoiQUxQSEEiLDY0MDc6IlJHQiIsNjQwODoiUkdCQSIsNjQwOToiTFVNSU5BTkNFIiw2NDEwOiJMVU1JTkFOQ0VfQUxQSEEiLDc2ODA6IktFRVAiLDc2ODE6IlJFUExBQ0UiLDc2ODI6IklOQ1IiLDc2ODM6IkRFQ1IiLDc5MzY6IlZFTkRPUiIsNzkzNzoiUkVOREVSRVIiLDc5Mzg6IlZFUlNJT04iLDk3Mjg6Ik5FQVJFU1QiLDk3Mjk6IkxJTkVBUiIsOTk4NDoiTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCIsOTk4NToiTElORUFSX01JUE1BUF9ORUFSRVNUIiw5OTg2OiJORUFSRVNUX01JUE1BUF9MSU5FQVIiLDk5ODc6IkxJTkVBUl9NSVBNQVBfTElORUFSIiwxMDI0MDoiVEVYVFVSRV9NQUdfRklMVEVSIiwxMDI0MToiVEVYVFVSRV9NSU5fRklMVEVSIiwxMDI0MjoiVEVYVFVSRV9XUkFQX1MiLDEwMjQzOiJURVhUVVJFX1dSQVBfVCIsMTA0OTc6IlJFUEVBVCIsMTA3NTI6IlBPTFlHT05fT0ZGU0VUX1VOSVRTIiwxNjM4NDoiQ09MT1JfQlVGRkVSX0JJVCIsMzI3Njk6IkNPTlNUQU5UX0NPTE9SIiwzMjc3MDoiT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SIiwzMjc3MToiQ09OU1RBTlRfQUxQSEEiLDMyNzcyOiJPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEiLDMyNzczOiJCTEVORF9DT0xPUiIsMzI3NzQ6IkZVTkNfQUREIiwzMjc3NzoiQkxFTkRfRVFVQVRJT05fUkdCIiwzMjc3ODoiRlVOQ19TVUJUUkFDVCIsMzI3Nzk6IkZVTkNfUkVWRVJTRV9TVUJUUkFDVCIsMzI4MTk6IlVOU0lHTkVEX1NIT1JUXzRfNF80XzQiLDMyODIwOiJVTlNJR05FRF9TSE9SVF81XzVfNV8xIiwzMjgyMzoiUE9MWUdPTl9PRkZTRVRfRklMTCIsMzI4MjQ6IlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiIsMzI4NTQ6IlJHQkE0IiwzMjg1NToiUkdCNV9BMSIsMzI4NzM6IlRFWFRVUkVfQklORElOR18yRCIsMzI5MjY6IlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSIsMzI5Mjg6IlNBTVBMRV9DT1ZFUkFHRSIsMzI5MzY6IlNBTVBMRV9CVUZGRVJTIiwzMjkzNzoiU0FNUExFUyIsMzI5Mzg6IlNBTVBMRV9DT1ZFUkFHRV9WQUxVRSIsMzI5Mzk6IlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQiLDMyOTY4OiJCTEVORF9EU1RfUkdCIiwzMjk2OToiQkxFTkRfU1JDX1JHQiIsMzI5NzA6IkJMRU5EX0RTVF9BTFBIQSIsMzI5NzE6IkJMRU5EX1NSQ19BTFBIQSIsMzMwNzE6IkNMQU1QX1RPX0VER0UiLDMzMTcwOiJHRU5FUkFURV9NSVBNQVBfSElOVCIsMzMxODk6IkRFUFRIX0NPTVBPTkVOVDE2IiwzMzMwNjoiREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UIiwzMzYzNToiVU5TSUdORURfU0hPUlRfNV82XzUiLDMzNjQ4OiJNSVJST1JFRF9SRVBFQVQiLDMzOTAxOiJBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UiLDMzOTAyOiJBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UiLDMzOTg0OiJURVhUVVJFMCIsMzM5ODU6IlRFWFRVUkUxIiwzMzk4NjoiVEVYVFVSRTIiLDMzOTg3OiJURVhUVVJFMyIsMzM5ODg6IlRFWFRVUkU0IiwzMzk4OToiVEVYVFVSRTUiLDMzOTkwOiJURVhUVVJFNiIsMzM5OTE6IlRFWFRVUkU3IiwzMzk5MjoiVEVYVFVSRTgiLDMzOTkzOiJURVhUVVJFOSIsMzM5OTQ6IlRFWFRVUkUxMCIsMzM5OTU6IlRFWFRVUkUxMSIsMzM5OTY6IlRFWFRVUkUxMiIsMzM5OTc6IlRFWFRVUkUxMyIsMzM5OTg6IlRFWFRVUkUxNCIsMzM5OTk6IlRFWFRVUkUxNSIsMzRlMzoiVEVYVFVSRTE2IiwzNDAwMToiVEVYVFVSRTE3IiwzNDAwMjoiVEVYVFVSRTE4IiwzNDAwMzoiVEVYVFVSRTE5IiwzNDAwNDoiVEVYVFVSRTIwIiwzNDAwNToiVEVYVFVSRTIxIiwzNDAwNjoiVEVYVFVSRTIyIiwzNDAwNzoiVEVYVFVSRTIzIiwzNDAwODoiVEVYVFVSRTI0IiwzNDAwOToiVEVYVFVSRTI1IiwzNDAxMDoiVEVYVFVSRTI2IiwzNDAxMToiVEVYVFVSRTI3IiwzNDAxMjoiVEVYVFVSRTI4IiwzNDAxMzoiVEVYVFVSRTI5IiwzNDAxNDoiVEVYVFVSRTMwIiwzNDAxNToiVEVYVFVSRTMxIiwzNDAxNjoiQUNUSVZFX1RFWFRVUkUiLDM0MDI0OiJNQVhfUkVOREVSQlVGRkVSX1NJWkUiLDM0MDQxOiJERVBUSF9TVEVOQ0lMIiwzNDA1NToiSU5DUl9XUkFQIiwzNDA1NjoiREVDUl9XUkFQIiwzNDA2NzoiVEVYVFVSRV9DVUJFX01BUCIsMzQwNjg6IlRFWFRVUkVfQklORElOR19DVUJFX01BUCIsMzQwNjk6IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCIsMzQwNzA6IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCIsMzQwNzE6IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSIsMzQwNzI6IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSIsMzQwNzM6IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiIsMzQwNzQ6IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiIsMzQwNzY6Ik1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUiLDM0MzM4OiJWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQiLDM0MzM5OiJWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUiLDM0MzQwOiJWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSIsMzQzNDE6IlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSIsMzQzNDI6IkNVUlJFTlRfVkVSVEVYX0FUVFJJQiIsMzQzNzM6IlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiIsMzQ0NjY6Ik5VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIsMzQ0Njc6IkNPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIiwzNDY2MDoiQlVGRkVSX1NJWkUiLDM0NjYxOiJCVUZGRVJfVVNBR0UiLDM0ODE2OiJTVEVOQ0lMX0JBQ0tfRlVOQyIsMzQ4MTc6IlNURU5DSUxfQkFDS19GQUlMIiwzNDgxODoiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCIsMzQ4MTk6IlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MiLDM0ODc3OiJCTEVORF9FUVVBVElPTl9BTFBIQSIsMzQ5MjE6Ik1BWF9WRVJURVhfQVRUUklCUyIsMzQ5MjI6IlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCIsMzQ5MzA6Ik1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNDk2MjoiQVJSQVlfQlVGRkVSIiwzNDk2MzoiRUxFTUVOVF9BUlJBWV9CVUZGRVIiLDM0OTY0OiJBUlJBWV9CVUZGRVJfQklORElORyIsMzQ5NjU6IkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM0OTc1OiJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNTA0MDoiU1RSRUFNX0RSQVciLDM1MDQ0OiJTVEFUSUNfRFJBVyIsMzUwNDg6IkRZTkFNSUNfRFJBVyIsMzU2MzI6IkZSQUdNRU5UX1NIQURFUiIsMzU2MzM6IlZFUlRFWF9TSEFERVIiLDM1NjYwOiJNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM1NjYxOiJNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzU2NjM6IlNIQURFUl9UWVBFIiwzNTY2NDoiRkxPQVRfVkVDMiIsMzU2NjU6IkZMT0FUX1ZFQzMiLDM1NjY2OiJGTE9BVF9WRUM0IiwzNTY2NzoiSU5UX1ZFQzIiLDM1NjY4OiJJTlRfVkVDMyIsMzU2Njk6IklOVF9WRUM0IiwzNTY3MDoiQk9PTCIsMzU2NzE6IkJPT0xfVkVDMiIsMzU2NzI6IkJPT0xfVkVDMyIsMzU2NzM6IkJPT0xfVkVDNCIsMzU2NzQ6IkZMT0FUX01BVDIiLDM1Njc1OiJGTE9BVF9NQVQzIiwzNTY3NjoiRkxPQVRfTUFUNCIsMzU2Nzg6IlNBTVBMRVJfMkQiLDM1NjgwOiJTQU1QTEVSX0NVQkUiLDM1NzEyOiJERUxFVEVfU1RBVFVTIiwzNTcxMzoiQ09NUElMRV9TVEFUVVMiLDM1NzE0OiJMSU5LX1NUQVRVUyIsMzU3MTU6IlZBTElEQVRFX1NUQVRVUyIsMzU3MTY6IklORk9fTE9HX0xFTkdUSCIsMzU3MTc6IkFUVEFDSEVEX1NIQURFUlMiLDM1NzE4OiJBQ1RJVkVfVU5JRk9STVMiLDM1NzE5OiJBQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIiwzNTcyMDoiU0hBREVSX1NPVVJDRV9MRU5HVEgiLDM1NzIxOiJBQ1RJVkVfQVRUUklCVVRFUyIsMzU3MjI6IkFDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCIsMzU3MjQ6IlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiIsMzU3MjU6IkNVUlJFTlRfUFJPR1JBTSIsMzYwMDM6IlNURU5DSUxfQkFDS19SRUYiLDM2MDA0OiJTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyIsMzYwMDU6IlNURU5DSUxfQkFDS19XUklURU1BU0siLDM2MDA2OiJGUkFNRUJVRkZFUl9CSU5ESU5HIiwzNjAwNzoiUkVOREVSQlVGRkVSX0JJTkRJTkciLDM2MDQ4OiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFIiwzNjA0OToiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSIsMzYwNTA6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCIsMzYwNTE6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFIiwzNjA1MzoiRlJBTUVCVUZGRVJfQ09NUExFVEUiLDM2MDU0OiJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQiLDM2MDU1OiJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCIsMzYwNTc6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyIsMzYwNjE6IkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEIiwzNjA2NDoiQ09MT1JfQVRUQUNITUVOVDAiLDM2MDk2OiJERVBUSF9BVFRBQ0hNRU5UIiwzNjEyODoiU1RFTkNJTF9BVFRBQ0hNRU5UIiwzNjE2MDoiRlJBTUVCVUZGRVIiLDM2MTYxOiJSRU5ERVJCVUZGRVIiLDM2MTYyOiJSRU5ERVJCVUZGRVJfV0lEVEgiLDM2MTYzOiJSRU5ERVJCVUZGRVJfSEVJR0hUIiwzNjE2NDoiUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCIsMzYxNjg6IlNURU5DSUxfSU5ERVg4IiwzNjE3NjoiUkVOREVSQlVGRkVSX1JFRF9TSVpFIiwzNjE3NzoiUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUiLDM2MTc4OiJSRU5ERVJCVUZGRVJfQkxVRV9TSVpFIiwzNjE3OToiUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUiLDM2MTgwOiJSRU5ERVJCVUZGRVJfREVQVEhfU0laRSIsMzYxODE6IlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUiLDM2MTk0OiJSR0I1NjUiLDM2MzM2OiJMT1dfRkxPQVQiLDM2MzM3OiJNRURJVU1fRkxPQVQiLDM2MzM4OiJISUdIX0ZMT0FUIiwzNjMzOToiTE9XX0lOVCIsMzYzNDA6Ik1FRElVTV9JTlQiLDM2MzQxOiJISUdIX0lOVCIsMzYzNDY6IlNIQURFUl9DT01QSUxFUiIsMzYzNDc6Ik1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTIiwzNjM0ODoiTUFYX1ZBUllJTkdfVkVDVE9SUyIsMzYzNDk6Ik1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMiLDM3NDQwOiJVTlBBQ0tfRkxJUF9ZX1dFQkdMIiwzNzQ0MToiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIiwzNzQ0MjoiQ09OVEVYVF9MT1NUX1dFQkdMIiwzNzQ0MzoiVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIsMzc0NDQ6IkJST1dTRVJfREVGQVVMVF9XRUJHTCJ9fSx7fV0sMjYzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi8xLjAvbnVtYmVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XX19LHsiLi8xLjAvbnVtYmVycyI6MjYyfV0sMjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxvPWkoZSxbe2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjQwfSx7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6NCxvZmZzZXQ6MTIsc3RyaWRlOjQwfSx7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6Mjgsc3RyaWRlOjQwfV0pLGw9YShlKTtsLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxsLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MSxsLmF0dHJpYnV0ZXMub2Zmc2V0LmxvY2F0aW9uPTI7dmFyIGM9bmV3IHMoZSxyLG8sbCk7cmV0dXJuIGMudXBkYXRlKHQpLGN9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMvaW5kZXgiKSxvPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1uLHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmNhcFNpemU9WzEwLDEwLDEwXSx0aGlzLmxpbmVDb3VudD1bMCwwLDBdLHRoaXMubGluZU9mZnNldD1bMCwwLDBdLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITF9dmFyIGw9cy5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3IpdFswXVtyXT1NYXRoLm1pbih0WzBdW3JdLGVbcl0pLHRbMV1bcl09TWF0aC5tYXgodFsxXVtyXSxlW3JdKX1sLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaGFzQWxwaGF9LGwuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0FscGhhfSxsLmRyYXdUcmFuc3BhcmVudD1sLmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMuc2hhZGVyLnVuaWZvcm1zO3RoaXMuc2hhZGVyLmJpbmQoKTt2YXIgbj1yLnZpZXc9dC52aWV3fHxvLGk9ci5wcm9qZWN0aW9uPXQucHJvamVjdGlvbnx8bztyLm1vZGVsPXQubW9kZWx8fG8sci5jbGlwQm91bmRzPXRoaXMuY2xpcEJvdW5kcyxyLm9wYWNpdHk9dGhpcy5vcGFjaXR5O3ZhciBhPW5bMTJdLHM9blsxM10sbD1uWzE0XSxjPW5bMTVdLHU9KHQuX29ydGhvfHwhMT8yOjEpKnRoaXMucGl4ZWxSYXRpbyooaVszXSphK2lbN10qcytpWzExXSpsK2lbMTVdKmMpL2UuZHJhd2luZ0J1ZmZlckhlaWdodDt0aGlzLnZhby5iaW5kKCk7Zm9yKHZhciBoPTA7aDwzOysraCllLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aFtoXSp0aGlzLnBpeGVsUmF0aW8pLHIuY2FwU2l6ZT10aGlzLmNhcFNpemVbaF0qdSx0aGlzLmxpbmVDb3VudFtoXSYmZS5kcmF3QXJyYXlzKGUuTElORVMsdGhpcy5saW5lT2Zmc2V0W2hdLHRoaXMubGluZUNvdW50W2hdKTt0aGlzLnZhby51bmJpbmQoKX07dmFyIHU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IEFycmF5KDMpLGU9MDtlPDM7KytlKXtmb3IodmFyIHI9W10sbj0xO248PTI7KytuKWZvcih2YXIgaT0tMTtpPD0xO2krPTIpe3ZhciBhPVswLDAsMF07YVsobitlKSUzXT1pLHIucHVzaChhKX10W2VdPXJ9cmV0dXJuIHR9KCk7ZnVuY3Rpb24gaCh0LGUscixuKXtmb3IodmFyIGk9dVtuXSxhPTA7YTxpLmxlbmd0aDsrK2Epe3ZhciBvPWlbYV07dC5wdXNoKGVbMF0sZVsxXSxlWzJdLHJbMF0sclsxXSxyWzJdLHJbM10sb1swXSxvWzFdLG9bMl0pfXJldHVybiBpLmxlbmd0aH1sLnVwZGF0ZT1mdW5jdGlvbih0KXsibGluZVdpZHRoImluKHQ9dHx8e30pJiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgsQXJyYXkuaXNBcnJheSh0aGlzLmxpbmVXaWR0aCl8fCh0aGlzLmxpbmVXaWR0aD1bdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGhdKSksImNhcFNpemUiaW4gdCYmKHRoaXMuY2FwU2l6ZT10LmNhcFNpemUsQXJyYXkuaXNBcnJheSh0aGlzLmNhcFNpemUpfHwodGhpcy5jYXBTaXplPVt0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplLHRoaXMuY2FwU2l6ZV0pKSx0aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9K3Qub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKTt2YXIgZT10LmNvbG9yfHxbWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLHI9dC5wb3NpdGlvbixuPXQuZXJyb3I7aWYoQXJyYXkuaXNBcnJheShlWzBdKXx8KGU9W2UsZSxlXSksciYmbil7dmFyIGk9W10sYT1yLmxlbmd0aCxvPTA7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5saW5lQ291bnQ9WzAsMCwwXTtmb3IodmFyIHM9MDtzPDM7KytzKXt0aGlzLmxpbmVPZmZzZXRbc109bzt0OmZvcih2YXIgbD0wO2w8YTsrK2wpe2Zvcih2YXIgdT1yW2xdLGY9MDtmPDM7KytmKWlmKGlzTmFOKHVbZl0pfHwhaXNGaW5pdGUodVtmXSkpY29udGludWUgdDt2YXIgcD1uW2xdLGQ9ZVtzXTtpZihBcnJheS5pc0FycmF5KGRbMF0pJiYoZD1lW2xdKSwzPT09ZC5sZW5ndGg/ZD1bZFswXSxkWzFdLGRbMl0sMV06ND09PWQubGVuZ3RoJiYoZD1bZFswXSxkWzFdLGRbMl0sZFszXV0sIXRoaXMuaGFzQWxwaGEmJmRbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApKSwhaXNOYU4ocFswXVtzXSkmJiFpc05hTihwWzFdW3NdKSl7dmFyIGc7aWYocFswXVtzXTwwKShnPXUuc2xpY2UoKSlbc10rPXBbMF1bc10saS5wdXNoKHVbMF0sdVsxXSx1WzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDAsZ1swXSxnWzFdLGdbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCksYyh0aGlzLmJvdW5kcyxnKSxvKz0yK2goaSxnLGQscyk7aWYocFsxXVtzXT4wKShnPXUuc2xpY2UoKSlbc10rPXBbMV1bc10saS5wdXNoKHVbMF0sdVsxXSx1WzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDAsZ1swXSxnWzFdLGdbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCksYyh0aGlzLmJvdW5kcyxnKSxvKz0yK2goaSxnLGQscyl9fXRoaXMubGluZUNvdW50W3NdPW8tdGhpcy5saW5lT2Zmc2V0W3NdfXRoaXMuYnVmZmVyLnVwZGF0ZShpKX19LGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMvaW5kZXgiOjI2NSwiZ2wtYnVmZmVyIjoyNTgsImdsLXZhbyI6MzMyfV0sMjY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPXQoImdsLXNoYWRlciIpLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBvZmZzZXQ7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgY2FwU2l6ZTtcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIHdvcmxkUG9zaXRpb24gICAgICAgPSAod29ybGRQb3NpdGlvbiAvIHdvcmxkUG9zaXRpb24udykgKyB2ZWM0KGNhcFNpemUgKiBvZmZzZXQsIDAuMCk7XG4gIGdsX1Bvc2l0aW9uICAgICAgICAgPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGZyYWdDb2xvciAgICAgICAgICAgPSBjb2xvcjtcbiAgZnJhZ1Bvc2l0aW9uICAgICAgICA9IHBvc2l0aW9uO1xufSJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAoXG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmcmFnUG9zaXRpb24pIHx8XG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXG4gICkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSBvcGFjaXR5ICogZnJhZ0NvbG9yO1xufSJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6Im9mZnNldCIsdHlwZToidmVjMyJ9XSl9fSx7ImdsLXNoYWRlciI6MzEyLGdsc2xpZnk6NDEzfV0sMjY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXRleHR1cmUyZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpfHwoaT10LkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVELGE9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQsbz10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyxzPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQpO3ZhciBjPXQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTshbCYmYyYmZnVuY3Rpb24odCxlKXt2YXIgcj10LmdldFBhcmFtZXRlcihlLk1BWF9DT0xPUl9BVFRBQ0hNRU5UU19XRUJHTCk7bD1uZXcgQXJyYXkocisxKTtmb3IodmFyIG49MDtuPD1yOysrbil7Zm9yKHZhciBpPW5ldyBBcnJheShyKSxhPTA7YTxuOysrYSlpW2FdPXQuQ09MT1JfQVRUQUNITUVOVDArYTtmb3IoYT1uO2E8cjsrK2EpaVthXT10Lk5PTkU7bFtuXT1pfX0odCxjKTtBcnJheS5pc0FycmF5KGUpJiYobj1yLHI9MHxlWzFdLGU9MHxlWzBdKTtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE1pc3Npbmcgc2hhcGUgcGFyYW1ldGVyIik7dmFyIHU9dC5nZXRQYXJhbWV0ZXIodC5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT51fHxyPDB8fHI+dSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogUGFyYW1ldGVycyBhcmUgdG9vIGxhcmdlIGZvciBGQk8iKTt2YXIgaD0xO2lmKCJjb2xvciJpbihuPW58fHt9KSl7aWYoKGg9TWF0aC5tYXgoMHxuLmNvbG9yLDApKTwwKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBNdXN0IHNwZWNpZnkgYSBub25uZWdhdGl2ZSBudW1iZXIgb2YgY29sb3JzIik7aWYoaD4xKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTXVsdGlwbGUgZHJhdyBidWZmZXIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQiKTtpZihoPnQuZ2V0UGFyYW1ldGVyKGMuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0ICIraCsiIGRyYXcgYnVmZmVycyIpfX12YXIgZj10LlVOU0lHTkVEX0JZVEUscD10LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKTtpZihuLmZsb2F0JiZoPjApe2lmKCFwKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMiKTtmPXQuRkxPQVR9ZWxzZSBuLnByZWZlckZsb2F0JiZoPjAmJnAmJihmPXQuRkxPQVQpO3ZhciBnPSEwOyJkZXB0aCJpbiBuJiYoZz0hIW4uZGVwdGgpO3ZhciBtPSExOyJzdGVuY2lsImluIG4mJihtPSEhbi5zdGVuY2lsKTtyZXR1cm4gbmV3IGQodCxlLHIsZixoLGcsbSxjKX07dmFyIGksYSxvLHMsbD1udWxsO2Z1bmN0aW9uIGModCl7cmV0dXJuW3QuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5SRU5ERVJCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5URVhUVVJFX0JJTkRJTkdfMkQpXX1mdW5jdGlvbiB1KHQsZSl7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlWzBdKSx0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsZVsxXSksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZVsyXSl9ZnVuY3Rpb24gaCh0KXtzd2l0Y2godCl7Y2FzZSBpOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciB1bnN1cHBvcnRlZCIpO2Nhc2UgYTp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBhdHRhY2htZW50Iik7Y2FzZSBvOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGRpbWVuc2lvbnMiKTtjYXNlIHM6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgbWlzc2luZyBhdHRhY2htZW50Iik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgZmFpbGVkIGZvciB1bnNwZWNpZmllZCByZWFzb24iKX19ZnVuY3Rpb24gZih0LGUscixpLGEsbyl7aWYoIWkpcmV0dXJuIG51bGw7dmFyIHM9bih0LGUscixhLGkpO3JldHVybiBzLm1hZ0ZpbHRlcj10Lk5FQVJFU1Qscy5taW5GaWx0ZXI9dC5ORUFSRVNULHMubWlwU2FtcGxlcz0xLHMuYmluZCgpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQodC5GUkFNRUJVRkZFUixvLHQuVEVYVFVSRV8yRCxzLmhhbmRsZSwwKSxzfWZ1bmN0aW9uIHAodCxlLHIsbixpKXt2YXIgYT10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsYSksdC5yZW5kZXJidWZmZXJTdG9yYWdlKHQuUkVOREVSQlVGRkVSLG4sZSxyKSx0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHQuRlJBTUVCVUZGRVIsaSx0LlJFTkRFUkJVRkZFUixhKSxhfWZ1bmN0aW9uIGQodCxlLHIsbixpLGEsbyxzKXt0aGlzLmdsPXQsdGhpcy5fc2hhcGU9WzB8ZSwwfHJdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9leHQ9cyx0aGlzLmNvbG9yPW5ldyBBcnJheShpKTtmb3IodmFyIGQ9MDtkPGk7KytkKXRoaXMuY29sb3JbZF09bnVsbDt0aGlzLl9jb2xvcl9yYj1udWxsLHRoaXMuZGVwdGg9bnVsbCx0aGlzLl9kZXB0aF9yYj1udWxsLHRoaXMuX2NvbG9yVHlwZT1uLHRoaXMuX3VzZURlcHRoPWEsdGhpcy5fdXNlU3RlbmNpbD1vO3ZhciBnPXRoaXMsbT1bMHxlLDB8cl07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobSx7MDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcud2lkdGg9dH19LDE6e2dldDpmdW5jdGlvbigpe3JldHVybiBnLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBnLmhlaWdodD10fX19KSx0aGlzLl9zaGFwZVZlY3Rvcj1tLGZ1bmN0aW9uKHQpe3ZhciBlPWModC5nbCkscj10LmdsLG49dC5oYW5kbGU9ci5jcmVhdGVGcmFtZWJ1ZmZlcigpLGk9dC5fc2hhcGVbMF0sYT10Ll9zaGFwZVsxXSxvPXQuY29sb3IubGVuZ3RoLHM9dC5fZXh0LGQ9dC5fdXNlU3RlbmNpbCxnPXQuX3VzZURlcHRoLG09dC5fY29sb3JUeXBlO3IuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbik7Zm9yKHZhciB2PTA7djxvOysrdil0LmNvbG9yW3ZdPWYocixpLGEsbSxyLlJHQkEsci5DT0xPUl9BVFRBQ0hNRU5UMCt2KTswPT09bz8odC5fY29sb3JfcmI9cChyLGksYSxyLlJHQkE0LHIuQ09MT1JfQVRUQUNITUVOVDApLHMmJnMuZHJhd0J1ZmZlcnNXRUJHTChsWzBdKSk6bz4xJiZzLmRyYXdCdWZmZXJzV0VCR0wobFtvXSk7dmFyIHk9ci5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKTt5P2Q/dC5kZXB0aD1mKHIsaSxhLHkuVU5TSUdORURfSU5UXzI0XzhfV0VCR0wsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTpnJiYodC5kZXB0aD1mKHIsaSxhLHIuVU5TSUdORURfU0hPUlQsci5ERVBUSF9DT01QT05FTlQsci5ERVBUSF9BVFRBQ0hNRU5UKSk6ZyYmZD90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6Zz90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfQ09NUE9ORU5UMTYsci5ERVBUSF9BVFRBQ0hNRU5UKTpkJiYodC5fZGVwdGhfcmI9cChyLGksYSxyLlNURU5DSUxfSU5ERVgsci5TVEVOQ0lMX0FUVEFDSE1FTlQpKTt2YXIgeD1yLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoci5GUkFNRUJVRkZFUik7aWYoeCE9PXIuRlJBTUVCVUZGRVJfQ09NUExFVEUpe3QuX2Rlc3Ryb3llZD0hMCxyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG51bGwpLHIuZGVsZXRlRnJhbWVidWZmZXIodC5oYW5kbGUpLHQuaGFuZGxlPW51bGwsdC5kZXB0aCYmKHQuZGVwdGguZGlzcG9zZSgpLHQuZGVwdGg9bnVsbCksdC5fZGVwdGhfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9kZXB0aF9yYiksdC5fZGVwdGhfcmI9bnVsbCk7Zm9yKHY9MDt2PHQuY29sb3IubGVuZ3RoOysrdil0LmNvbG9yW3ZdLmRpc3Bvc2UoKSx0LmNvbG9yW3ZdPW51bGw7dC5fY29sb3JfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9jb2xvcl9yYiksdC5fY29sb3JfcmI9bnVsbCksdShyLGUpLGgoeCl9dShyLGUpfSh0aGlzKX12YXIgZz1kLnByb3RvdHlwZTtmdW5jdGlvbiBtKHQsZSxyKXtpZih0Ll9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBkZXN0cm95ZWQgRkJPIik7aWYodC5fc2hhcGVbMF0hPT1lfHx0Ll9zaGFwZVsxXSE9PXIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoZTwwfHxlPml8fHI8MHx8cj5pKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDYW4ndCByZXNpemUgRkJPLCBpbnZhbGlkIGRpbWVuc2lvbnMiKTt0Ll9zaGFwZVswXT1lLHQuX3NoYXBlWzFdPXI7Zm9yKHZhciBhPWMobiksbz0wO288dC5jb2xvci5sZW5ndGg7KytvKXQuY29sb3Jbb10uc2hhcGU9dC5fc2hhcGU7dC5fY29sb3JfcmImJihuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsdC5fY29sb3JfcmIpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlJHQkE0LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksdC5kZXB0aCYmKHQuZGVwdGguc2hhcGU9dC5fc2hhcGUpLHQuX2RlcHRoX3JiJiYobi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHQuX2RlcHRoX3JiKSx0Ll91c2VEZXB0aCYmdC5fdXNlU3RlbmNpbD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9TVEVOQ0lMLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VEZXB0aD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9DT01QT05FTlQxNix0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlU3RlbmNpbCYmbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uU1RFTkNJTF9JTkRFWCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsdC5oYW5kbGUpO3ZhciBzPW4uY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhuLkZSQU1FQlVGRkVSKTtzIT09bi5GUkFNRUJVRkZFUl9DT01QTEVURSYmKHQuZGlzcG9zZSgpLHUobixhKSxoKHMpKSx1KG4sYSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGcse3NoYXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkP1swLDBdOnRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9WzB8dCwwfHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IFNoYXBlIHZlY3RvciBtdXN0IGJlIGxlbmd0aCAyIik7dmFyIGU9MHx0WzBdLHI9MHx0WzFdO3JldHVybiBtKHRoaXMsZSxyKSxbZSxyXX0sZW51bWVyYWJsZTohMX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBtKHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH0sZW51bWVyYWJsZTohMX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxtKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH0sZW51bWVyYWJsZTohMX19KSxnLmJpbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsdGhpcy5oYW5kbGUpLHQudmlld3BvcnQoMCwwLHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKX19LGcuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3RoaXMuX2Rlc3Ryb3llZD0hMDt2YXIgdD10aGlzLmdsO3QuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwsdGhpcy5kZXB0aCYmKHRoaXMuZGVwdGguZGlzcG9zZSgpLHRoaXMuZGVwdGg9bnVsbCksdGhpcy5fZGVwdGhfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9kZXB0aF9yYiksdGhpcy5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvbG9yLmxlbmd0aDsrK2UpdGhpcy5jb2xvcltlXS5kaXNwb3NlKCksdGhpcy5jb2xvcltlXT1udWxsO3RoaXMuX2NvbG9yX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fY29sb3JfcmIpLHRoaXMuX2NvbG9yX3JiPW51bGwpfX19LHsiZ2wtdGV4dHVyZTJkIjozMjd9XSwyNjc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJzcHJpbnRmLWpzIikuc3ByaW50ZixpPXQoImdsLWNvbnN0YW50cy9sb29rdXAiKSxhPXQoImdsc2wtc2hhZGVyLW5hbWUiKSxvPXQoImFkZC1saW5lLW51bWJlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgcz1hKGUpfHwib2YgdW5rbm93biBuYW1lIChzZWUgbnBtIGdsc2wtc2hhZGVyLW5hbWUpIixsPSJ1bmtub3duIHR5cGUiO3ZvaWQgMCE9PXImJihsPXI9PT1pLkZSQUdNRU5UX1NIQURFUj8iZnJhZ21lbnQiOiJ2ZXJ0ZXgiKTtmb3IodmFyIGM9bigiRXJyb3IgY29tcGlsaW5nICVzIHNoYWRlciAlczpcbiIsbCxzKSx1PW4oIiVzJXMiLGMsdCksaD10LnNwbGl0KCJcbiIpLGY9e30scD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgZD1oW3BdO2lmKCIiIT09ZCYmIlwwIiE9PWQpe3ZhciBnPXBhcnNlSW50KGQuc3BsaXQoIjoiKVsyXSk7aWYoaXNOYU4oZykpdGhyb3cgbmV3IEVycm9yKG4oIkNvdWxkIG5vdCBwYXJzZSBlcnJvcjogJXMiLGQpKTtmW2ddPWR9fXZhciBtPW8oZSkuc3BsaXQoIlxuIik7Zm9yKHA9MDtwPG0ubGVuZ3RoO3ArKylpZihmW3ArM118fGZbcCsyXXx8ZltwKzFdKXt2YXIgdj1tW3BdO2lmKGMrPXYrIlxuIixmW3ArMV0pe3ZhciB5PWZbcCsxXTt5PXkuc3Vic3RyKHkuc3BsaXQoIjoiLDMpLmpvaW4oIjoiKS5sZW5ndGgrMSkudHJpbSgpLGMrPW4oIl5eXiAlc1xuXG4iLHkpfX1yZXR1cm57bG9uZzpjLnRyaW0oKSxzaG9ydDp1LnRyaW0oKX19fSx7ImFkZC1saW5lLW51bWJlcnMiOjY2LCJnbC1jb25zdGFudHMvbG9va3VwIjoyNjMsImdsc2wtc2hhZGVyLW5hbWUiOjQwNSwic3ByaW50Zi1qcyI6NTM5fV0sMjY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsbj1vKHIsbC52ZXJ0ZXgsbC5mcmFnbWVudCksaT1vKHIsbC5waWNrVmVydGV4LGwucGlja0ZyYWdtZW50KSxhPXMociksdT1zKHIpLGg9cyhyKSxmPXMocikscD1uZXcgYyh0LG4saSxhLHUsaCxmKTtyZXR1cm4gcC51cGRhdGUoZSksdC5hZGRPYmplY3QocCkscH07dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoImlvdGEtYXJyYXkiKSxhPXQoInR5cGVkYXJyYXktcG9vbCIpLG89dCgiZ2wtc2hhZGVyIikscz10KCJnbC1idWZmZXIiKSxsPXQoIi4vbGliL3NoYWRlcnMiKTtmdW5jdGlvbiBjKHQsZSxyLG4saSxhLG8pe3RoaXMucGxvdD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5wb3NpdGlvbkJ1ZmZlcj1uLHRoaXMud2VpZ2h0QnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1hLHRoaXMuaWRCdWZmZXI9byx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy5zaGFwZT1bMCwwXSx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMucGlja09mZnNldD0wfXZhciB1LGg9Yy5wcm90b3R5cGUsZj1bMCwwLDEsMCwwLDEsMSwwLDEsMSwwLDFdO2guZHJhdz0odT1bMSwwLDAsMCwxLDAsMCwwLDFdLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zaGFkZXIscj10aGlzLmJvdW5kcyxuPXRoaXMubnVtVmVydGljZXM7aWYoIShuPD0wKSl7dmFyIGk9dC5nbCxhPXQuZGF0YUJveCxvPXJbMl0tclswXSxzPXJbM10tclsxXSxsPWFbMl0tYVswXSxjPWFbM10tYVsxXTt1WzBdPTIqby9sLHVbNF09MipzL2MsdVs2XT0yKihyWzBdLWFbMF0pL2wtMSx1WzddPTIqKHJbMV0tYVsxXSkvYy0xLGUuYmluZCgpO3ZhciBoPWUudW5pZm9ybXM7aC52aWV3VHJhbnNmb3JtPXUsaC5zaGFwZT10aGlzLnNoYXBlO3ZhciBmPWUuYXR0cmlidXRlczt0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxmLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksZi53ZWlnaHQucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuY29sb3JCdWZmZXIuYmluZCgpLGYuY29sb3IucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITApLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUywwLG4pfX0pLGguZHJhd1BpY2s9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwLDAsMCwxLDAsMCwwLDFdLGU9WzAsMCwwLDBdO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10aGlzLnBsb3QsaT10aGlzLnBpY2tTaGFkZXIsYT10aGlzLmJvdW5kcyxvPXRoaXMubnVtVmVydGljZXM7aWYoIShvPD0wKSl7dmFyIHM9bi5nbCxsPW4uZGF0YUJveCxjPWFbMl0tYVswXSx1PWFbM10tYVsxXSxoPWxbMl0tbFswXSxmPWxbM10tbFsxXTt0WzBdPTIqYy9oLHRbNF09Mip1L2YsdFs2XT0yKihhWzBdLWxbMF0pL2gtMSx0WzddPTIqKGFbMV0tbFsxXSkvZi0xO2Zvcih2YXIgcD0wO3A8NDsrK3ApZVtwXT1yPj44KnAmMjU1O3RoaXMucGlja09mZnNldD1yLGkuYmluZCgpO3ZhciBkPWkudW5pZm9ybXM7ZC52aWV3VHJhbnNmb3JtPXQsZC5waWNrT2Zmc2V0PWUsZC5zaGFwZT10aGlzLnNoYXBlO3ZhciBnPWkuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5wb3NpdGlvbkJ1ZmZlci5iaW5kKCksZy5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLGcud2VpZ2h0LnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSx0aGlzLmlkQnVmZmVyLmJpbmQoKSxnLnBpY2tJZC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVTLDAsbykscit0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV19fX0oKSxoLnBpY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucGlja09mZnNldCxpPXRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXTtpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLnhEYXRhLHM9dGhpcy55RGF0YTtyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDphLGRhdGFDb29yZDpbb1thJXRoaXMuc2hhcGVbMF1dLHNbYS90aGlzLnNoYXBlWzBdfDBdXX19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZXx8WzAsMF0scj10Lnh8fGkoZVswXSksbz10Lnl8fGkoZVsxXSkscz10Lnp8fG5ldyBGbG9hdDMyQXJyYXkoZVswXSplWzFdKSxsPSExIT09dC56c21vb3RoO3RoaXMueERhdGE9cix0aGlzLnlEYXRhPW87dmFyIGMsdSxoLHAsZD10LmNvbG9yTGV2ZWxzfHxbMF0sZz10LmNvbG9yVmFsdWVzfHxbMCwwLDAsMV0sbT1kLmxlbmd0aCx2PXRoaXMuYm91bmRzO2w/KGM9dlswXT1yWzBdLHU9dlsxXT1vWzBdLGg9dlsyXT1yW3IubGVuZ3RoLTFdLHA9dlszXT1vW28ubGVuZ3RoLTFdKTooYz12WzBdPXJbMF0rKHJbMV0tclswXSkvMix1PXZbMV09b1swXSsob1sxXS1vWzBdKS8yLGg9dlsyXT1yW3IubGVuZ3RoLTFdKyhyW3IubGVuZ3RoLTFdLXJbci5sZW5ndGgtMl0pLzIscD12WzNdPW9bby5sZW5ndGgtMV0rKG9bby5sZW5ndGgtMV0tb1tvLmxlbmd0aC0yXSkvMik7dmFyIHk9MS8oaC1jKSx4PTEvKHAtdSksYj1lWzBdLF89ZVsxXTt0aGlzLnNoYXBlPVtiLF9dO3ZhciB3PShsPyhiLTEpKihfLTEpOmIqXykqKGYubGVuZ3RoPj4+MSk7dGhpcy5udW1WZXJ0aWNlcz13O2Zvcih2YXIgVD1hLm1hbGxvY1VpbnQ4KDQqdyksaz1hLm1hbGxvY0Zsb2F0MzIoMip3KSxNPWEubWFsbG9jVWludDgoMip3KSxBPWEubWFsbG9jVWludDMyKHcpLFM9MCxFPWw/Yi0xOmIsQz1sP18tMTpfLEw9MDtMPEM7KytMKXt2YXIgUCxJO2w/KFA9eCoob1tMXS11KSxJPXgqKG9bTCsxXS11KSk6KFA9TDxfLTE/eCoob1tMXS0ob1tMKzFdLW9bTF0pLzItdSk6eCoob1tMXS0ob1tMXS1vW0wtMV0pLzItdSksST1MPF8tMT94KihvW0xdKyhvW0wrMV0tb1tMXSkvMi11KTp4KihvW0xdKyhvW0xdLW9bTC0xXSkvMi11KSk7Zm9yKHZhciB6PTA7ejxFOysreil7dmFyIE8sRDtsPyhPPXkqKHJbel0tYyksRD15KihyW3orMV0tYykpOihPPXo8Yi0xP3kqKHJbel0tKHJbeisxXS1yW3pdKS8yLWMpOnkqKHJbel0tKHJbel0tclt6LTFdKS8yLWMpLEQ9ejxiLTE/eSooclt6XSsoclt6KzFdLXJbel0pLzItYyk6eSooclt6XSsoclt6XS1yW3otMV0pLzItYykpO2Zvcih2YXIgUj0wO1I8Zi5sZW5ndGg7Uis9Mil7dmFyIEYsQixOLGosVT1mW1JdLFY9ZltSKzFdLHE9c1tsPyhMK1YpKmIrKHorVSk6TCpiK3pdLEg9bi5sZShkLHEpO2lmKEg8MClGPWdbMF0sQj1nWzFdLE49Z1syXSxqPWdbM107ZWxzZSBpZihIPT09bS0xKUY9Z1s0Km0tNF0sQj1nWzQqbS0zXSxOPWdbNCptLTJdLGo9Z1s0Km0tMV07ZWxzZXt2YXIgRz0ocS1kW0hdKS8oZFtIKzFdLWRbSF0pLFk9MS1HLFc9NCpILFo9NCooSCsxKTtGPVkqZ1tXXStHKmdbWl0sQj1ZKmdbVysxXStHKmdbWisxXSxOPVkqZ1tXKzJdK0cqZ1taKzJdLGo9WSpnW1crM10rRypnW1orM119VFs0KlNdPTI1NSpGLFRbNCpTKzFdPTI1NSpCLFRbNCpTKzJdPTI1NSpOLFRbNCpTKzNdPTI1NSpqLGtbMipTXT0uNSpPKy41KkQsa1syKlMrMV09LjUqUCsuNSpJLE1bMipTXT1VLE1bMipTKzFdPVYsQVtTXT1MKmIreixTKz0xfX19dGhpcy5wb3NpdGlvbkJ1ZmZlci51cGRhdGUoayksdGhpcy53ZWlnaHRCdWZmZXIudXBkYXRlKE0pLHRoaXMuY29sb3JCdWZmZXIudXBkYXRlKFQpLHRoaXMuaWRCdWZmZXIudXBkYXRlKEEpLGEuZnJlZShrKSxhLmZyZWUoVCksYS5mcmVlKE0pLGEuZnJlZShBKX0saC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb3NpdGlvbkJ1ZmZlci5kaXNwb3NlKCksdGhpcy53ZWlnaHRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuY29sb3JCdWZmZXIuZGlzcG9zZSgpLHRoaXMuaWRCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPYmplY3QodGhpcyl9fSx7Ii4vbGliL3NoYWRlcnMiOjI2OSwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjk2LCJnbC1idWZmZXIiOjI1OCwiZ2wtc2hhZGVyIjozMTIsImlvdGEtYXJyYXkiOjQzNywidHlwZWRhcnJheS1wb29sIjo1Njd9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpO2UuZXhwb3J0cz17ZnJhZ21lbnQ6bihbInByZWNpc2lvbiBsb3dwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiAqIGZyYWdDb2xvci5hLCBmcmFnQ29sb3IuYSk7XG59XG4iXSksdmVydGV4Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB3ZWlnaHQ7XG5cbnVuaWZvcm0gdmVjMiBzaGFwZTtcbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XG4gIGZyYWdDb2xvciA9IGNvbG9yO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XG59XG4iXSkscGlja0ZyYWdtZW50Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBkID0gc3RlcCguNSwgdldlaWdodCk7XG4gIHZlYzQgaWQgPSBmcmFnSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC54ICs9IGQueCArIGQueSpzaGFwZS54O1xuXG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGlkLzI1NS47XG59XG4iXSkscGlja1ZlcnRleDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudm9pZCBtYWluKCkge1xuICB2V2VpZ2h0ID0gd2VpZ2h0O1xuXG4gIGZyYWdJZCA9IHBpY2tJZDtcblxuICB2ZWMzIHZQb3NpdGlvbiA9IHZpZXdUcmFuc2Zvcm0gKiB2ZWMzKCBwb3NpdGlvbiArICh3ZWlnaHQtLjUpLyhzaGFwZS0xLikgLCAxLjApO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XG59XG4iXSl9fSx7Z2xzbGlmeTo0MTN9XSwyNzA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbmV4dFBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IGFyY0xlbmd0aCwgbGluZVdpZHRoO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5cbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcblxudmVjNCBwcm9qZWN0KHZlYzMgcCkge1xuICByZXR1cm4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWM0IHN0YXJ0UG9pbnQgPSBwcm9qZWN0KHBvc2l0aW9uKTtcbiAgdmVjNCBlbmRQb2ludCAgID0gcHJvamVjdChuZXh0UG9zaXRpb24pO1xuXG4gIHZlYzIgQSA9IHN0YXJ0UG9pbnQueHkgLyBzdGFydFBvaW50Lnc7XG4gIHZlYzIgQiA9ICAgZW5kUG9pbnQueHkgLyAgIGVuZFBvaW50Lnc7XG5cbiAgZmxvYXQgY2xpcEFuZ2xlID0gYXRhbihcbiAgICAoQi55IC0gQS55KSAqIHNjcmVlblNoYXBlLnksXG4gICAgKEIueCAtIEEueCkgKiBzY3JlZW5TaGFwZS54XG4gICk7XG5cbiAgdmVjMiBvZmZzZXQgPSAwLjUgKiBwaXhlbFJhdGlvICogbGluZVdpZHRoICogdmVjMihcbiAgICBzaW4oY2xpcEFuZ2xlKSxcbiAgICAtY29zKGNsaXBBbmdsZSlcbiAgKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzdGFydFBvaW50Lnh5ICsgc3RhcnRQb2ludC53ICogb2Zmc2V0LCBzdGFydFBvaW50Lnp3KTtcblxuICB3b3JsZFBvc2l0aW9uID0gcG9zaXRpb247XG4gIHBpeGVsQXJjTGVuZ3RoID0gYXJjTGVuZ3RoO1xuICBmcmFnQ29sb3IgPSBjb2xvcjtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICAgICAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hUZXh0dXJlO1xudW5pZm9ybSBmbG9hdCAgICAgZGFzaFNjYWxlO1xudW5pZm9ybSBmbG9hdCAgICAgb3BhY2l0eTtcblxudmFyeWluZyB2ZWMzICAgIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0ICAgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgICAgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pIHx8XG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXG4gICkgZGlzY2FyZDtcblxuICBmbG9hdCBkYXNoV2VpZ2h0ID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKGRhc2hTY2FsZSAqIHBpeGVsQXJjTGVuZ3RoLCAwKSkucjtcbiAgaWYoZGFzaFdlaWdodCA8IDAuNSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG4jZGVmaW5lIEZMT0FUX01BWCAgMS43MDE0MTE4NGUzOFxuI2RlZmluZSBGTE9BVF9NSU4gIDEuMTc1NDk0MzVlLTM4XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWtvbGFseXNlbmtvL2dsc2wtcmVhZC1mbG9hdC9ibG9iL21hc3Rlci9pbmRleC5nbHNsXG52ZWM0IHBhY2tGbG9hdChmbG9hdCB2KSB7XG4gIGZsb2F0IGF2ID0gYWJzKHYpO1xuXG4gIC8vSGFuZGxlIHNwZWNpYWwgY2FzZXNcbiAgaWYoYXYgPCBGTE9BVF9NSU4pIHtcbiAgICByZXR1cm4gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2UgaWYodiA+IEZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDEyNy4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH0gZWxzZSBpZih2IDwgLUZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDI1NS4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH1cblxuICB2ZWM0IGMgPSB2ZWM0KDAsMCwwLDApO1xuXG4gIC8vQ29tcHV0ZSBleHBvbmVudCBhbmQgbWFudGlzc2FcbiAgZmxvYXQgZSA9IGZsb29yKGxvZzIoYXYpKTtcbiAgZmxvYXQgbSA9IGF2ICogcG93KDIuMCwgLWUpIC0gMS4wO1xuXG4gIC8vVW5wYWNrIG1hbnRpc3NhXG4gIGNbMV0gPSBmbG9vcigxMjguMCAqIG0pO1xuICBtIC09IGNbMV0gLyAxMjguMDtcbiAgY1syXSA9IGZsb29yKDMyNzY4LjAgKiBtKTtcbiAgbSAtPSBjWzJdIC8gMzI3NjguMDtcbiAgY1szXSA9IGZsb29yKDgzODg2MDguMCAqIG0pO1xuXG4gIC8vVW5wYWNrIGV4cG9uZW50XG4gIGZsb2F0IGViaWFzID0gZSArIDEyNy4wO1xuICBjWzBdID0gZmxvb3IoZWJpYXMgLyAyLjApO1xuICBlYmlhcyAtPSBjWzBdICogMi4wO1xuICBjWzFdICs9IGZsb29yKGViaWFzKSAqIDEyOC4wO1xuXG4gIC8vVW5wYWNrIHNpZ24gYml0XG4gIGNbMF0gKz0gMTI4LjAgKiBzdGVwKDAuMCwgLXYpO1xuXG4gIC8vU2NhbGUgYmFjayB0byByYW5nZVxuICByZXR1cm4gYyAvIDI1NS4wO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZFBvc2l0aW9uKSkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZC8yNTUuMCwgcGFja0Zsb2F0KHBpeGVsQXJjTGVuZ3RoKS54eXopO1xufSJdKSxsPVt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToibmV4dFBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImFyY0xlbmd0aCIsdHlwZToiZmxvYXQifSx7bmFtZToibGluZVdpZHRoIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9XTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLGwpfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLHMsbnVsbCxsKX19LHsiZ2wtc2hhZGVyIjozMTIsZ2xzbGlmeTo0MTN9XSwyNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2x8fHQuc2NlbmUmJnQuc2NlbmUuZ2wscj1oKGUpO3IuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHIuYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxyLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsci5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLHIuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O3ZhciBvPWYoZSk7by5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsby5hdHRyaWJ1dGVzLm5leHRQb3NpdGlvbi5sb2NhdGlvbj0xLG8uYXR0cmlidXRlcy5hcmNMZW5ndGgubG9jYXRpb249MixvLmF0dHJpYnV0ZXMubGluZVdpZHRoLmxvY2F0aW9uPTMsby5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7Zm9yKHZhciBzPW4oZSksbD1pKGUsW3tidWZmZXI6cyxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MSxvZmZzZXQ6Mjgsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZTo0LG9mZnNldDozMixzdHJpZGU6NDh9XSksdT1jKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pLHA9MDtwPDEwMjQ7KytwKXUuZGF0YVtwXT0yNTU7dmFyIGQ9YShlLHUpO2Qud3JhcD1lLlJFUEVBVDt2YXIgZz1uZXcgdihlLHIsbyxzLGwsZCk7cmV0dXJuIGcudXBkYXRlKHQpLGd9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCJnbC10ZXh0dXJlMmQiKSxvPW5ldyBVaW50OEFycmF5KDQpLHM9bmV3IEZsb2F0MzJBcnJheShvLmJ1ZmZlcik7dmFyIGw9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxjPXQoIm5kYXJyYXkiKSx1PXQoIi4vbGliL3NoYWRlcnMiKSxoPXUuY3JlYXRlU2hhZGVyLGY9dS5jcmVhdGVQaWNrU2hhZGVyLHA9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9MCxuPTA7bjwzOysrbil7dmFyIGk9dFtuXS1lW25dO3IrPWkqaX1yZXR1cm4gTWF0aC5zcXJ0KHIpfWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLHI9MDtyPDM7KytyKWVbMF1bcl09TWF0aC5tYXgodFswXVtyXSxlWzBdW3JdKSxlWzFdW3JdPU1hdGgubWluKHRbMV1bcl0sZVsxXVtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbSh0LGUscixuKXt0aGlzLmFyY0xlbmd0aD10LHRoaXMucG9zaXRpb249ZSx0aGlzLmluZGV4PXIsdGhpcy5kYXRhQ29vcmRpbmF0ZT1ufWZ1bmN0aW9uIHYodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMuYnVmZmVyPW4sdGhpcy52YW89aSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5wb2ludHM9W10sdGhpcy5hcmNMZW5ndGg9W10sdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMuYm91bmRzPVtbMCwwLDBdLFswLDAsMF1dLHRoaXMucGlja0lkPTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLnRleHR1cmU9YSx0aGlzLmRhc2hTY2FsZT0xLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5kaXJ0eT0hMCx0aGlzLnBpeGVsUmF0aW89MX12YXIgeT12LnByb3RvdHlwZTt5LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0seS5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSx5LnBpY2tTbG90cz0xLHkuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seS5kcmF3VHJhbnNwYXJlbnQ9eS5kcmF3PWZ1bmN0aW9uKHQpe2lmKHRoaXMudmVydGV4Q291bnQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fHAsdmlldzp0LnZpZXd8fHAscHJvamVjdGlvbjp0LnByb2plY3Rpb258fHAsY2xpcEJvdW5kczpnKHRoaXMuY2xpcEJvdW5kcyksZGFzaFRleHR1cmU6dGhpcy50ZXh0dXJlLmJpbmQoKSxkYXNoU2NhbGU6dGhpcy5kYXNoU2NhbGUvdGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0seS5kcmF3UGljaz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5waWNrU2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8cCx2aWV3OnQudmlld3x8cCxwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8cCxwaWNrSWQ6dGhpcy5waWNrSWQsY2xpcEJvdW5kczpnKHRoaXMuY2xpcEJvdW5kcyksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpLG4udW5iaW5kKCl9fSx5LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMuZGlydHk9ITA7dmFyIG49ISF0LmNvbm5lY3RHYXBzOyJkYXNoU2NhbGUiaW4gdCYmKHRoaXMuZGFzaFNjYWxlPXQuZGFzaFNjYWxlKSx0aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9K3Qub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKTt2YXIgaT1bXSxhPVtdLG89W10scz0wLHU9MCxoPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLGY9dC5wb3NpdGlvbnx8dC5wb3NpdGlvbnM7aWYoZil7dmFyIHA9dC5jb2xvcnx8dC5jb2xvcnN8fFswLDAsMCwxXSxnPXQubGluZVdpZHRofHwxLG09ITE7dDpmb3IoZT0xO2U8Zi5sZW5ndGg7KytlKXt2YXIgdix5LHgsYj1mW2UtMV0sXz1mW2VdO2ZvcihhLnB1c2gocyksby5wdXNoKGIuc2xpY2UoKSkscj0wO3I8MzsrK3Ipe2lmKGlzTmFOKGJbcl0pfHxpc05hTihfW3JdKXx8IWlzRmluaXRlKGJbcl0pfHwhaXNGaW5pdGUoX1tyXSkpe2lmKCFuJiZpLmxlbmd0aD4wKXtmb3IodmFyIHc9MDt3PDI0OysrdylpLnB1c2goaVtpLmxlbmd0aC0xMl0pO3UrPTIsbT0hMH1jb250aW51ZSB0fWhbMF1bcl09TWF0aC5taW4oaFswXVtyXSxiW3JdLF9bcl0pLGhbMV1bcl09TWF0aC5tYXgoaFsxXVtyXSxiW3JdLF9bcl0pfUFycmF5LmlzQXJyYXkocFswXSk/KHY9cC5sZW5ndGg+ZS0xP3BbZS0xXTpwLmxlbmd0aD4wP3BbcC5sZW5ndGgtMV06WzAsMCwwLDFdLHk9cC5sZW5ndGg+ZT9wW2VdOnAubGVuZ3RoPjA/cFtwLmxlbmd0aC0xXTpbMCwwLDAsMV0pOnY9eT1wLDM9PT12Lmxlbmd0aCYmKHY9W3ZbMF0sdlsxXSx2WzJdLDFdKSwzPT09eS5sZW5ndGgmJih5PVt5WzBdLHlbMV0seVsyXSwxXSksIXRoaXMuaGFzQWxwaGEmJnZbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApLHg9QXJyYXkuaXNBcnJheShnKT9nLmxlbmd0aD5lLTE/Z1tlLTFdOmcubGVuZ3RoPjA/Z1tnLmxlbmd0aC0xXTpbMCwwLDAsMV06Zzt2YXIgVD1zO2lmKHMrPWQoYixfKSxtKXtmb3Iocj0wO3I8MjsrK3IpaS5wdXNoKGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQseCx2WzBdLHZbMV0sdlsyXSx2WzNdKTt1Kz0yLG09ITF9aS5wdXNoKGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQseCx2WzBdLHZbMV0sdlsyXSx2WzNdLGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQsLXgsdlswXSx2WzFdLHZbMl0sdlszXSxfWzBdLF9bMV0sX1syXSxiWzBdLGJbMV0sYlsyXSxzLC14LHlbMF0seVsxXSx5WzJdLHlbM10sX1swXSxfWzFdLF9bMl0sYlswXSxiWzFdLGJbMl0scyx4LHlbMF0seVsxXSx5WzJdLHlbM10pLHUrPTR9fWlmKHRoaXMuYnVmZmVyLnVwZGF0ZShpKSxhLnB1c2gocyksby5wdXNoKGZbZi5sZW5ndGgtMV0uc2xpY2UoKSksdGhpcy5ib3VuZHM9aCx0aGlzLnZlcnRleENvdW50PXUsdGhpcy5wb2ludHM9byx0aGlzLmFyY0xlbmd0aD1hLCJkYXNoZXMiaW4gdCl7dmFyIGs9dC5kYXNoZXMuc2xpY2UoKTtmb3Ioay51bnNoaWZ0KDApLGU9MTtlPGsubGVuZ3RoOysrZSlrW2VdPWtbZS0xXStrW2VdO3ZhciBNPWMobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSk7Zm9yKGU9MDtlPDI1NjsrK2Upe2ZvcihyPTA7cjw0OysrcilNLnNldChlLDAsciwwKTsxJmwubGUoayxrW2subGVuZ3RoLTFdKmUvMjU1KT9NLnNldChlLDAsMCwwKTpNLnNldChlLDAsMCwyNTUpfXRoaXMudGV4dHVyZS5zZXRQaXhlbHMoTSl9fSx5LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX0seS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gb1swXT1uLG9bMV09cixvWzJdPWUsb1szXT10LHNbMF19KHQudmFsdWVbMF0sdC52YWx1ZVsxXSx0LnZhbHVlWzJdLDApLHI9bC5sZSh0aGlzLmFyY0xlbmd0aCxlKTtpZihyPDApcmV0dXJuIG51bGw7aWYocj09PXRoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xKXJldHVybiBuZXcgbSh0aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sdGhpcy5wb2ludHNbdGhpcy5wb2ludHMubGVuZ3RoLTFdLnNsaWNlKCkscik7Zm9yKHZhciBuPXRoaXMucG9pbnRzW3JdLGk9dGhpcy5wb2ludHNbTWF0aC5taW4ocisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKV0sYT0oZS10aGlzLmFyY0xlbmd0aFtyXSkvKHRoaXMuYXJjTGVuZ3RoW3IrMV0tdGhpcy5hcmNMZW5ndGhbcl0pLGM9MS1hLHU9WzAsMCwwXSxoPTA7aDwzOysraCl1W2hdPWMqbltoXSthKmlbaF07dmFyIGY9TWF0aC5taW4oYTwuNT9yOnIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG5ldyBtKGUsdSxmLHRoaXMucG9pbnRzW2ZdKX19LHsiLi9saWIvc2hhZGVycyI6MjcwLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6OTYsImdsLWJ1ZmZlciI6MjU4LCJnbC10ZXh0dXJlMmQiOjMyNywiZ2wtdmFvIjozMzIsbmRhcnJheTo0Njl9XSwyNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlfX0se31dLDI3MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNzQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXSxhPXRbNF0sbz10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLHU9dFs5XSxoPXRbMTBdLGY9dFsxMV0scD10WzEyXSxkPXRbMTNdLGc9dFsxNF0sbT10WzE1XTtyZXR1cm4oZSpvLXIqYSkqKGgqbS1mKmcpLShlKnMtbiphKSoodSptLWYqZCkrKGUqbC1pKmEpKih1KmctaCpkKSsocipzLW4qbykqKGMqbS1mKnApLShyKmwtaSpvKSooYypnLWgqcCkrKG4qbC1pKnMpKihjKmQtdSpwKX19LHt9XSwyNzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cityLHM9bituLGw9aStpLGM9cipvLHU9bipvLGg9bipzLGY9aSpvLHA9aSpzLGQ9aSpsLGc9YSpvLG09YSpzLHY9YSpsO3JldHVybiB0WzBdPTEtaC1kLHRbMV09dSt2LHRbMl09Zi1tLHRbM109MCx0WzRdPXUtdix0WzVdPTEtYy1kLHRbNl09cCtnLHRbN109MCx0WzhdPWYrbSx0WzldPXAtZyx0WzEwXT0xLWMtaCx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1uK24sbD1pK2ksYz1hK2EsdT1uKnMsaD1uKmwsZj1uKmMscD1pKmwsZD1pKmMsZz1hKmMsbT1vKnMsdj1vKmwseT1vKmM7cmV0dXJuIHRbMF09MS0ocCtnKSx0WzFdPWgreSx0WzJdPWYtdix0WzNdPTAsdFs0XT1oLXksdFs1XT0xLSh1K2cpLHRbNl09ZCttLHRbN109MCx0WzhdPWYrdix0WzldPWQtbSx0WzEwXT0xLSh1K3ApLHRbMTFdPTAsdFsxMl09clswXSx0WzEzXT1yWzFdLHRbMTRdPXJbMl0sdFsxNV09MSx0fX0se31dLDI3NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjc4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGg9ZVs5XSxmPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxnPWVbMTNdLG09ZVsxNF0sdj1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLFQ9aSpjLWEqbCxrPXUqZy1oKmQsTT11Km0tZipkLEE9dSp2LXAqZCxTPWgqbS1mKmcsRT1oKnYtcCpnLEM9Zip2LXAqbSxMPXkqQy14KkUrYipTK18qQS13Kk0rVCprO2lmKCFMKXJldHVybiBudWxsO3JldHVybiBMPTEvTCx0WzBdPShzKkMtbCpFK2MqUykqTCx0WzFdPShpKkUtbipDLWEqUykqTCx0WzJdPShnKlQtbSp3K3YqXykqTCx0WzNdPShmKnctaCpULXAqXykqTCx0WzRdPShsKkEtbypDLWMqTSkqTCx0WzVdPShyKkMtaSpBK2EqTSkqTCx0WzZdPShtKmItZCpULXYqeCkqTCx0WzddPSh1KlQtZipiK3AqeCkqTCx0WzhdPShvKkUtcypBK2MqaykqTCx0WzldPShuKkEtcipFLWEqaykqTCx0WzEwXT0oZCp3LWcqYit2KnkpKkwsdFsxMV09KGgqYi11KnctcCp5KSpMLHRbMTJdPShzKk0tbypTLWwqaykqTCx0WzEzXT0ocipTLW4qTStpKmspKkwsdFsxNF09KGcqeC1kKl8tbSp5KSpMLHRbMTVdPSh1Kl8taCp4K2YqeSkqTCx0fX0se31dLDI3OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsYyx1LGgsZixwLGQsZz1lWzBdLG09ZVsxXSx2PWVbMl0seT1pWzBdLHg9aVsxXSxiPWlbMl0sXz1yWzBdLHc9clsxXSxUPXJbMl07aWYoTWF0aC5hYnMoZy1fKTwxZS02JiZNYXRoLmFicyhtLXcpPDFlLTYmJk1hdGguYWJzKHYtVCk8MWUtNilyZXR1cm4gbih0KTtoPWctXyxmPW0tdyxwPXYtVCxkPTEvTWF0aC5zcXJ0KGgqaCtmKmYrcCpwKSxhPXgqKHAqPWQpLWIqKGYqPWQpLG89YiooaCo9ZCkteSpwLHM9eSpmLXgqaCwoZD1NYXRoLnNxcnQoYSphK28qbytzKnMpKT8oYSo9ZD0xL2Qsbyo9ZCxzKj1kKTooYT0wLG89MCxzPTApO2w9ZipzLXAqbyxjPXAqYS1oKnMsdT1oKm8tZiphLChkPU1hdGguc3FydChsKmwrYypjK3UqdSkpPyhsKj1kPTEvZCxjKj1kLHUqPWQpOihsPTAsYz0wLHU9MCk7cmV0dXJuIHRbMF09YSx0WzFdPWwsdFsyXT1oLHRbM109MCx0WzRdPW8sdFs1XT1jLHRbNl09Zix0WzddPTAsdFs4XT1zLHRbOV09dSx0WzEwXT1wLHRbMTFdPTAsdFsxMl09LShhKmcrbyptK3MqdiksdFsxM109LShsKmcrYyptK3UqdiksdFsxNF09LShoKmcrZiptK3AqdiksdFsxNV09MSx0fX0seyIuL2lkZW50aXR5IjoyNzd9XSwyODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGg9ZVs4XSxmPWVbOV0scD1lWzEwXSxkPWVbMTFdLGc9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypoK3cqZyx0WzFdPXgqaStiKmwrXypmK3cqbSx0WzJdPXgqYStiKmMrXypwK3cqdix0WzNdPXgqbytiKnUrXypkK3cqeSx4PXJbNF0sYj1yWzVdLF89cls2XSx3PXJbN10sdFs0XT14Km4rYipzK18qaCt3KmcsdFs1XT14KmkrYipsK18qZit3Km0sdFs2XT14KmErYipjK18qcCt3KnYsdFs3XT14Km8rYip1K18qZCt3KnkseD1yWzhdLGI9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT14Km4rYipzK18qaCt3KmcsdFs5XT14KmkrYipsK18qZit3Km0sdFsxMF09eCphK2IqYytfKnArdyp2LHRbMTFdPXgqbytiKnUrXypkK3cqeSx4PXJbMTJdLGI9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPXgqbitiKnMrXypoK3cqZyx0WzEzXT14KmkrYipsK18qZit3Km0sdFsxNF09eCphK2IqYytfKnArdyp2LHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fX0se31dLDI4MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0xLyhlLXIpLGw9MS8obi1pKSxjPTEvKGEtbyk7cmV0dXJuIHRbMF09LTIqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0tMipsLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0yKmMsdFsxMV09MCx0WzEyXT0oZStyKSpzLHRbMTNdPShpK24pKmwsdFsxNF09KG8rYSkqYyx0WzE1XT0xLHR9fSx7fV0sMjgyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9MS9NYXRoLnRhbihlLzIpLG89MS8obi1pKTtyZXR1cm4gdFswXT1hL3IsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09YSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09KGkrbikqbyx0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MippKm4qbyx0WzE1XT0wLHR9fSx7fV0sMjgzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHYseSx4LGIsXyx3LFQsayxNLEEsUyxFPW5bMF0sQz1uWzFdLEw9blsyXSxQPU1hdGguc3FydChFKkUrQypDK0wqTCk7aWYoTWF0aC5hYnMoUCk8MWUtNilyZXR1cm4gbnVsbDtFKj1QPTEvUCxDKj1QLEwqPVAsaT1NYXRoLnNpbihyKSxhPU1hdGguY29zKHIpLG89MS1hLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9ZVszXSxoPWVbNF0sZj1lWzVdLHA9ZVs2XSxkPWVbN10sZz1lWzhdLG09ZVs5XSx2PWVbMTBdLHk9ZVsxMV0seD1FKkUqbythLGI9QypFKm8rTCppLF89TCpFKm8tQyppLHc9RSpDKm8tTCppLFQ9QypDKm8rYSxrPUwqQypvK0UqaSxNPUUqTCpvK0MqaSxBPUMqTCpvLUUqaSxTPUwqTCpvK2EsdFswXT1zKngraCpiK2cqXyx0WzFdPWwqeCtmKmIrbSpfLHRbMl09Yyp4K3AqYit2Kl8sdFszXT11KngrZCpiK3kqXyx0WzRdPXMqdytoKlQrZyprLHRbNV09bCp3K2YqVCttKmssdFs2XT1jKncrcCpUK3Yqayx0WzddPXUqdytkKlQreSprLHRbOF09cypNK2gqQStnKlMsdFs5XT1sKk0rZipBK20qUyx0WzEwXT1jKk0rcCpBK3YqUyx0WzExXT11Kk0rZCpBK3kqUyxlIT09dCYmKHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdH19LHt9XSwyODQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzRdLG89ZVs1XSxzPWVbNl0sbD1lWzddLGM9ZVs4XSx1PWVbOV0saD1lWzEwXSxmPWVbMTFdO2UhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFs0XT1hKmkrYypuLHRbNV09byppK3Uqbix0WzZdPXMqaStoKm4sdFs3XT1sKmkrZipuLHRbOF09YyppLWEqbix0WzldPXUqaS1vKm4sdFsxMF09aCppLXMqbix0WzExXT1mKmktbCpuLHR9fSx7fV0sMjg1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbOF0sdT1lWzldLGg9ZVsxMF0sZj1lWzExXTtlIT09dCYmKHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbMF09YSppLWMqbix0WzFdPW8qaS11Km4sdFsyXT1zKmktaCpuLHRbM109bCppLWYqbix0WzhdPWEqbitjKmksdFs5XT1vKm4rdSppLHRbMTBdPXMqbitoKmksdFsxMV09bCpuK2YqaSx0fX0se31dLDI4NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxoPWVbNl0sZj1lWzddO2UhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbMF09YSppK2Mqbix0WzFdPW8qaSt1Km4sdFsyXT1zKmkraCpuLHRbM109bCppK2Yqbix0WzRdPWMqaS1hKm4sdFs1XT11KmktbypuLHRbNl09aCppLXMqbix0WzddPWYqaS1sKm4sdH19LHt9XSwyODc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9fSx7fV0sMjg4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZz1yWzBdLG09clsxXSx2PXJbMl07ZT09PXQ/KHRbMTJdPWVbMF0qZytlWzRdKm0rZVs4XSp2K2VbMTJdLHRbMTNdPWVbMV0qZytlWzVdKm0rZVs5XSp2K2VbMTNdLHRbMTRdPWVbMl0qZytlWzZdKm0rZVsxMF0qditlWzE0XSx0WzE1XT1lWzNdKmcrZVs3XSptK2VbMTFdKnYrZVsxNV0pOihuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGg9ZVs4XSxmPWVbOV0scD1lWzEwXSxkPWVbMTFdLHRbMF09bix0WzFdPWksdFsyXT1hLHRbM109byx0WzRdPXMsdFs1XT1sLHRbNl09Yyx0WzddPXUsdFs4XT1oLHRbOV09Zix0WzEwXT1wLHRbMTFdPWQsdFsxMl09bipnK3MqbStoKnYrZVsxMl0sdFsxM109aSpnK2wqbStmKnYrZVsxM10sdFsxNF09YSpnK2MqbStwKnYrZVsxNF0sdFsxNV09bypnK3UqbStkKnYrZVsxNV0pO3JldHVybiB0fX0se31dLDI4OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXt2YXIgcj1lWzFdLG49ZVsyXSxpPWVbM10sYT1lWzZdLG89ZVs3XSxzPWVbMTFdO3RbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPXIsdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1uLHRbOV09YSx0WzExXT1lWzE0XSx0WzEyXT1pLHRbMTNdPW8sdFsxNF09c31lbHNlIHRbMF09ZVswXSx0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1lWzFdLHRbNV09ZVs1XSx0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPWVbMl0sdFs5XT1lWzZdLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTRdLHRbMTJdPWVbM10sdFsxM109ZVs3XSx0WzE0XT1lWzExXSx0WzE1XT1lWzE1XTtyZXR1cm4gdH19LHt9XSwyOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmFyeWNlbnRyaWMiKSxpPXQoInBvbHl0b3BlLWNsb3Nlc3QtcG9pbnQvbGliL2Nsb3Nlc3RfcG9pbnRfMmQuanMiKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVswLDAsMCwwXSxuPTA7bjw0Oysrbilmb3IodmFyIGk9MDtpPDQ7KytpKXJbaV0rPXRbNCpuK2ldKmVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0LGUscixuLGkpe2Zvcih2YXIgbz1hKG4sYShyLGEoZSxbdFswXSx0WzFdLHRbMl0sMV0pKSkscz0wO3M8MzsrK3Mpb1tzXS89b1szXTtyZXR1cm5bLjUqaVswXSooMStvWzBdKSwuNSppWzFdKigxLW9bMV0pXX1mdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByPVswLDAsMF0sbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLGE9ZVtuXSxvPTA7bzwzOysrbylyW29dKz1hKmlbb107cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbCxjKXtpZigxPT09dC5sZW5ndGgpcmV0dXJuWzAsdFswXS5zbGljZSgpXTtmb3IodmFyIHU9bmV3IEFycmF5KHQubGVuZ3RoKSxoPTA7aDx0Lmxlbmd0aDsrK2gpdVtoXT1vKHRbaF0scixhLGwsYyk7dmFyIGY9MCxwPTEvMDtmb3IoaD0wO2g8dS5sZW5ndGg7KytoKXtmb3IodmFyIGQ9MCxnPTA7ZzwyOysrZylkKz1NYXRoLnBvdyh1W2hdW2ddLWVbZ10sMik7ZDxwJiYocD1kLGY9aCl9dmFyIG09ZnVuY3Rpb24odCxlKXtpZigyPT09dC5sZW5ndGgpe2Zvcih2YXIgcj0wLGE9MCxvPTA7bzwyOysrbylyKz1NYXRoLnBvdyhlW29dLXRbMF1bb10sMiksYSs9TWF0aC5wb3coZVtvXS10WzFdW29dLDIpO3JldHVybiByPU1hdGguc3FydChyKSxhPU1hdGguc3FydChhKSxyK2E8MWUtNj9bMSwwXTpbYS8ocithKSxyLyhhK3IpXX1pZigzPT09dC5sZW5ndGgpe3ZhciBzPVswLDBdO3JldHVybiBpKHRbMF0sdFsxXSx0WzJdLGUscyksbih0LHMpfXJldHVybltdfSh1LGUpLHY9MDtmb3IoaD0wO2g8MzsrK2gpe2lmKG1baF08LS4wMDF8fG1baF0+MS4wMDAxKXJldHVybiBudWxsO3YrPW1baF19aWYoTWF0aC5hYnModi0xKT4uMDAxKXJldHVybiBudWxsO3JldHVybltmLHModCxtKSxtXX19LHtiYXJ5Y2VudHJpYzo3OCwicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qcyI6NDk5fV0sMjkxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBub3JtYWw7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWxcbiAgICAgICAgICAgLCB2aWV3XG4gICAgICAgICAgICwgcHJvamVjdGlvblxuICAgICAgICAgICAsIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZlYzQgcHJvamVjdCh2ZWMzIHApIHtcbiAgcmV0dXJuIHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3QocG9zaXRpb24pO1xuXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogdmVjNChwb3NpdGlvbiAsIDEuMCk7XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgZl9saWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfbm9ybWFsICA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsIDAuMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG5cbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX2RhdGEgICAgICAgICAgID0gcG9zaXRpb247XG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcbn1cbiJdKSxhPW4oWyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbihOZG90SCwgcm91Z2huZXNzKTtcblxuICAvL0ZyZXNuZWwgdGVybVxuICBmbG9hdCBGID0gcG93KDEuMCAtIFZkb3ROLCBmcmVzbmVsKTtcblxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXG4gIHJldHVybiAgRyAqIEYgKiBEIC8gbWF4KDMuMTQxNTkyNjUgKiBWZG90TiwgMC4wMDAwMDEpO1xufVxuXG4vLyNwcmFnbWEgZ2xzbGlmeTogYmVja21hbm4gPSByZXF1aXJlKGdsc2wtc3BlY3VsYXItYmVja21hbm4pIC8vIHVzZWQgaW4gZ2wtc3VyZmFjZTNkXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzXG4gICAgICAgICAgICAsIGZyZXNuZWxcbiAgICAgICAgICAgICwga2FtYmllbnRcbiAgICAgICAgICAgICwga2RpZmZ1c2VcbiAgICAgICAgICAgICwga3NwZWN1bGFyO1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXG4gICAgICAgICAgICwgZl9saWdodERpcmVjdGlvblxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9kYXRhO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAoZl9jb2xvci5hID09IDAuMCB8fFxuICAgIG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9kYXRhKVxuICApIGRpc2NhcmQ7XG5cbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtaW4oMS4wLCBtYXgoMC4wLCBjb29rVG9ycmFuY2VTcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MsIGZyZXNuZWwpKSk7XG4gIC8vZmxvYXQgc3BlY3VsYXIgPSBtYXgoMC4wLCBiZWNrbWFubihMLCBWLCBOLCByb3VnaG5lc3MpKTsgLy8gdXNlZCBpbiBnbC1zdXJmYWNlM2RcblxuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IHZlYzQoZl9jb2xvci5yZ2IsIDEuMCkgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIGZfY29sb3IuYTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzMgZl9kYXRhO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgZl9jb2xvciA9IGNvbG9yO1xuICBmX2RhdGEgID0gcG9zaXRpb247XG4gIGZfdXYgICAgPSB1djtcbn0iXSkscz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzMgZl9kYXRhO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9kYXRhKSkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpICogb3BhY2l0eTtcbn0iXSksbD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB1djtcbmF0dHJpYnV0ZSBmbG9hdCBwb2ludFNpemU7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAuMCwgMC4wICwwLjAgLDAuMCk7XG4gIH0gZWxzZSB7XG4gICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgfVxuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XG4gIGZfY29sb3IgPSBjb2xvcjtcbiAgZl91diA9IHV2O1xufSJdKSxjPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcG9pbnRSID0gZ2xfUG9pbnRDb29yZC54eSAtIHZlYzIoMC41LCAwLjUpO1xuICBpZihkb3QocG9pbnRSLCBwb2ludFIpID4gMC4yNSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XG59Il0pLHU9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uO1xufSJdKSxoPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iXSksZj1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzICBwb3NpdGlvbjtcbmF0dHJpYnV0ZSBmbG9hdCBwb2ludFNpemU7XG5hdHRyaWJ1dGUgdmVjNCAgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gIH0gZWxzZSB7XG4gICAgZ2xfUG9zaXRpb24gID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICB9XG4gIGZfaWQgICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICAgPSBwb3NpdGlvbjtcbn0iXSkscD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xufSJdKSxkPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgY29udG91ckNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29udG91ckNvbG9yLCAxLjApO1xufVxuIl0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn1dfSxyLndpcmVTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn1dfSxyLnBvaW50U2hhZGVyPXt2ZXJ0ZXg6bCxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9LHtuYW1lOiJwb2ludFNpemUiLHR5cGU6ImZsb2F0In1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDp1LGZyYWdtZW50OmgsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dfSxyLnBvaW50UGlja1NoYWRlcj17dmVydGV4OmYsZnJhZ21lbnQ6aCxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToicG9pbnRTaXplIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XX0sci5jb250b3VyU2hhZGVyPXt2ZXJ0ZXg6cCxmcmFnbWVudDpkLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XX19LHtnbHNsaWZ5OjQxM31dLDI5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJnbC10ZXh0dXJlMmQiKSxzPXQoIm5vcm1hbHMiKSxsPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxjPXQoImdsLW1hdDQvaW52ZXJ0IiksdT10KCJuZGFycmF5IiksaD10KCJjb2xvcm1hcCIpLGY9dCgic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXIiKSxwPXQoInR5cGVkYXJyYXktcG9vbCIpLGQ9dCgiLi9saWIvc2hhZGVycyIpLGc9dCgiLi9saWIvY2xvc2VzdC1wb2ludCIpLG09ZC5tZXNoU2hhZGVyLHY9ZC53aXJlU2hhZGVyLHk9ZC5wb2ludFNoYWRlcix4PWQucGlja1NoYWRlcixiPWQucG9pbnRQaWNrU2hhZGVyLF89ZC5jb250b3VyU2hhZGVyLHc9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIFQodCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHYseSx4LGIsXyxULGssTSxBLFMpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLmxpbmVTaGFkZXI9bix0aGlzLnBvaW50U2hhZGVyPWksdGhpcy5waWNrU2hhZGVyPWEsdGhpcy5wb2ludFBpY2tTaGFkZXI9byx0aGlzLmNvbnRvdXJTaGFkZXI9cyx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWwsdGhpcy50cmlhbmdsZUNvbG9ycz11LHRoaXMudHJpYW5nbGVOb3JtYWxzPWYsdGhpcy50cmlhbmdsZVVWcz1oLHRoaXMudHJpYW5nbGVJZHM9Yyx0aGlzLnRyaWFuZ2xlVkFPPXAsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmVkZ2VQb3NpdGlvbnM9ZCx0aGlzLmVkZ2VDb2xvcnM9bSx0aGlzLmVkZ2VVVnM9dix0aGlzLmVkZ2VJZHM9Zyx0aGlzLmVkZ2VWQU89eSx0aGlzLmVkZ2VDb3VudD0wLHRoaXMucG9pbnRQb3NpdGlvbnM9eCx0aGlzLnBvaW50Q29sb3JzPV8sdGhpcy5wb2ludFVWcz1ULHRoaXMucG9pbnRTaXplcz1rLHRoaXMucG9pbnRJZHM9Yix0aGlzLnBvaW50VkFPPU0sdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb250b3VyTGluZVdpZHRoPTEsdGhpcy5jb250b3VyUG9zaXRpb25zPUEsdGhpcy5jb250b3VyVkFPPVMsdGhpcy5jb250b3VyQ291bnQ9MCx0aGlzLmNvbnRvdXJDb2xvcj1bMCwwLDBdLHRoaXMuY29udG91ckVuYWJsZT0hMCx0aGlzLnBpY2tWZXJ0ZXg9ITAsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMSx0aGlzLm9wYWNpdHlzY2FsZT0hMSx0aGlzLl9tb2RlbD13LHRoaXMuX3ZpZXc9dyx0aGlzLl9wcm9qZWN0aW9uPXcsdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX12YXIgaz1ULnByb3RvdHlwZTtmdW5jdGlvbiBNKHQsZSl7aWYoIWUpcmV0dXJuIDE7aWYoIWUubGVuZ3RoKXJldHVybiAxO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKXtpZihlLmxlbmd0aDwyKXJldHVybiAxO2lmKGVbcl1bMF09PT10KXJldHVybiBlW3JdWzFdO2lmKGVbcl1bMF0+dCYmcj4wKXt2YXIgbj0oZVtyXVswXS10KS8oZVtyXVswXS1lW3ItMV1bMF0pO3JldHVybiBlW3JdWzFdKigxLW4pK24qZVtyLTFdWzFdfX1yZXR1cm4gMX1mdW5jdGlvbiBBKHQpe3ZhciBlPW4odCxtLnZlcnRleCxtLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gUyh0KXt2YXIgZT1uKHQsdi52ZXJ0ZXgsdi5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGV9ZnVuY3Rpb24gRSh0KXt2YXIgZT1uKHQseS52ZXJ0ZXgseS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5wb2ludFNpemUubG9jYXRpb249NCxlfWZ1bmN0aW9uIEModCl7dmFyIGU9bih0LHgudmVydGV4LHguZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlfWZ1bmN0aW9uIEwodCl7dmFyIGU9bih0LGIudmVydGV4LGIuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBQKHQpe3ZhciBlPW4odCxfLnZlcnRleCxfLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZX1rLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaGFzQWxwaGF9LGsuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0FscGhhfSxrLnBpY2tTbG90cz0xLGsuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0say5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCYmdGhpcy5jb250b3VyRW5hYmxlKXtmb3IodmFyIGU9Zih0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxhPXIubGVuZ3RoLG89cC5tYWxsb2NGbG9hdDMyKDYqYSkscz0wLGw9MDtsPGE7KytsKWZvcih2YXIgYz1yW2xdLHU9MDt1PDI7Kyt1KXt2YXIgaD1jWzBdOzI9PT1jLmxlbmd0aCYmKGg9Y1t1XSk7Zm9yKHZhciBkPW5baF1bMF0sZz1uW2hdWzFdLG09aVtoXSx2PTEtbSx5PXRoaXMucG9zaXRpb25zW2RdLHg9dGhpcy5wb3NpdGlvbnNbZ10sYj0wO2I8MzsrK2Ipb1tzKytdPW0qeVtiXSt2KnhbYl19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLHAuZnJlZShvKX1lbHNlIHRoaXMuY29udG91ckNvdW50PTB9LGsudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLCJjb250b3VyRW5hYmxlImluIHQmJih0aGlzLmNvbnRvdXJFbmFibGU9dC5jb250b3VyRW5hYmxlKSwiY29udG91ckNvbG9yImluIHQmJih0aGlzLmNvbnRvdXJDb2xvcj10LmNvbnRvdXJDb2xvciksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJsaWdodFBvc2l0aW9uImluIHQmJih0aGlzLmxpZ2h0UG9zaXRpb249dC5saWdodFBvc2l0aW9uKSx0aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLCJvcGFjaXR5c2NhbGUiaW4gdCYmKHRoaXMub3BhY2l0eXNjYWxlPXQub3BhY2l0eXNjYWxlLHRoaXMuaGFzQWxwaGE9ITApLCJhbWJpZW50ImluIHQmJih0aGlzLmFtYmllbnRMaWdodD10LmFtYmllbnQpLCJkaWZmdXNlImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLCJzcGVjdWxhciJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLCJyb3VnaG5lc3MiaW4gdCYmKHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzKSwiZnJlc25lbCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdC50ZXh0dXJlPyh0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudGV4dHVyZT1vKGUsdC50ZXh0dXJlKSk6dC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1oKHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDoicmdiYSJ9KSxuPW5ldyBVaW50OEFycmF5KDEwMjQpLGk9MDtpPDI1NjsrK2kpe2Zvcih2YXIgYT1yW2ldLG89MDtvPDM7KytvKW5bNCppK29dPWFbb107bls0KmkrM109ZT8yNTUqTShpLzI1NSxlKToyNTUqYVszXX1yZXR1cm4gdShuLFsyNTYsMjU2LDRdLFs0LDAsMV0pfSh0LmNvbG9ybWFwLHRoaXMub3BhY2l0eXNjYWxlKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucztpZihuJiZyKXt2YXIgaT1bXSxhPVtdLGw9W10sYz1bXSxmPVtdLHA9W10sZD1bXSxnPVtdLG09W10sdj1bXSx5PVtdLHg9W10sYj1bXSxfPVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uO3ZhciB3PXQudmVydGV4Tm9ybWFscyxUPXQuY2VsbE5vcm1hbHMsaz12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uPzFlLTY6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixBPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uPzFlLTY6dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFUJiYoVD1zLmZhY2VOb3JtYWxzKHIsbixBKSksVHx8d3x8KHc9cy52ZXJ0ZXhOb3JtYWxzKHIsbixrKSk7dmFyIFM9dC52ZXJ0ZXhDb2xvcnMsRT10LmNlbGxDb2xvcnMsQz10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLEw9dC52ZXJ0ZXhVVnMsUD10LnZlcnRleEludGVuc2l0eSxJPXQuY2VsbFVWcyx6PXQuY2VsbEludGVuc2l0eSxPPTEvMCxEPS0xLzA7aWYoIUwmJiFJKWlmKFApaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpTz0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sRD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIFI9MDtSPFAubGVuZ3RoOysrUil7dmFyIEY9UFtSXTtPPU1hdGgubWluKE8sRiksRD1NYXRoLm1heChELEYpfWVsc2UgaWYoeilpZih0LmNlbGxJbnRlbnNpdHlCb3VuZHMpTz0rdC5jZWxsSW50ZW5zaXR5Qm91bmRzWzBdLEQ9K3QuY2VsbEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcihSPTA7Ujx6Lmxlbmd0aDsrK1Ipe0Y9eltSXTtPPU1hdGgubWluKE8sRiksRD1NYXRoLm1heChELEYpfWVsc2UgZm9yKFI9MDtSPG4ubGVuZ3RoOysrUil7Rj1uW1JdWzJdO089TWF0aC5taW4oTyxGKSxEPU1hdGgubWF4KEQsRil9dGhpcy5pbnRlbnNpdHk9UHx8KHp8fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9KG4pKSx0aGlzLnBpY2tWZXJ0ZXg9ISh6fHxFKTt2YXIgQj10LnBvaW50U2l6ZXMsTj10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoUj0wO1I8bi5sZW5ndGg7KytSKWZvcih2YXIgaj1uW1JdLFU9MDtVPDM7KytVKSFpc05hTihqW1VdKSYmaXNGaW5pdGUoaltVXSkmJih0aGlzLmJvdW5kc1swXVtVXT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVtVXSxqW1VdKSx0aGlzLmJvdW5kc1sxXVtVXT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVtVXSxqW1VdKSk7dmFyIFY9MCxxPTAsSD0wO3Q6Zm9yKFI9MDtSPHIubGVuZ3RoOysrUil7dmFyIEc9cltSXTtzd2l0Y2goRy5sZW5ndGgpe2Nhc2UgMTpmb3Ioaj1uW1c9R1swXV0sVT0wO1U8MzsrK1UpaWYoaXNOYU4oaltVXSl8fCFpc0Zpbml0ZShqW1VdKSljb250aW51ZSB0O3YucHVzaChqWzBdLGpbMV0salsyXSksWj1TP1NbV106RT9FW1JdOkMsdGhpcy5vcGFjaXR5c2NhbGUmJlA/YS5wdXNoKFpbMF0sWlsxXSxaWzJdLHRoaXMub3BhY2l0eSpNKChQW1ddLU8pLyhELU8pLHRoaXMub3BhY2l0eXNjYWxlKSk6Mz09PVoubGVuZ3RoP3kucHVzaChaWzBdLFpbMV0sWlsyXSx0aGlzLm9wYWNpdHkpOih5LnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSp0aGlzLm9wYWNpdHkpLFpbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApKSxYPUw/TFtXXTpQP1soUFtXXS1PKS8oRC1PKSwwXTpJP0lbUl06ej9bKHpbUl0tTykvKEQtTyksMF06WyhqWzJdLU8pLyhELU8pLDBdLHgucHVzaChYWzBdLFhbMV0pLEI/Yi5wdXNoKEJbV10pOmIucHVzaChOKSxfLnB1c2goUiksSCs9MTticmVhaztjYXNlIDI6Zm9yKFU9MDtVPDI7KytVKXtqPW5bVz1HW1VdXTtmb3IodmFyIFk9MDtZPDM7KytZKWlmKGlzTmFOKGpbWV0pfHwhaXNGaW5pdGUoaltZXSkpY29udGludWUgdH1mb3IoVT0wO1U8MjsrK1Upe2o9bltXPUdbVV1dO3AucHVzaChqWzBdLGpbMV0salsyXSksWj1TP1NbV106RT9FW1JdOkMsdGhpcy5vcGFjaXR5c2NhbGUmJlA/YS5wdXNoKFpbMF0sWlsxXSxaWzJdLHRoaXMub3BhY2l0eSpNKChQW1ddLU8pLyhELU8pLHRoaXMub3BhY2l0eXNjYWxlKSk6Mz09PVoubGVuZ3RoP2QucHVzaChaWzBdLFpbMV0sWlsyXSx0aGlzLm9wYWNpdHkpOihkLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSp0aGlzLm9wYWNpdHkpLFpbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApKSxYPUw/TFtXXTpQP1soUFtXXS1PKS8oRC1PKSwwXTpJP0lbUl06ej9bKHpbUl0tTykvKEQtTyksMF06WyhqWzJdLU8pLyhELU8pLDBdLGcucHVzaChYWzBdLFhbMV0pLG0ucHVzaChSKX1xKz0xO2JyZWFrO2Nhc2UgMzpmb3IoVT0wO1U8MzsrK1UpZm9yKGo9bltXPUdbVV1dLFk9MDtZPDM7KytZKWlmKGlzTmFOKGpbWV0pfHwhaXNGaW5pdGUoaltZXSkpY29udGludWUgdDtmb3IoVT0wO1U8MzsrK1Upe3ZhciBXLFosWCxKO2o9bltXPUdbMi1VXV07aS5wdXNoKGpbMF0salsxXSxqWzJdKSwoWj1TP1NbV106RT9FW1JdOkMpP3RoaXMub3BhY2l0eXNjYWxlJiZQP2EucHVzaChaWzBdLFpbMV0sWlsyXSx0aGlzLm9wYWNpdHkqTSgoUFtXXS1PKS8oRC1PKSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1aLmxlbmd0aD9hLnB1c2goWlswXSxaWzFdLFpbMl0sdGhpcy5vcGFjaXR5KTooYS5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10qdGhpcy5vcGFjaXR5KSxaWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSk6YS5wdXNoKC41LC41LC41LDEpLFg9TD9MW1ddOlA/WyhQW1ddLU8pLyhELU8pLDBdOkk/SVtSXTp6P1soeltSXS1PKS8oRC1PKSwwXTpbKGpbMl0tTykvKEQtTyksMF0sYy5wdXNoKFhbMF0sWFsxXSksSj13P3dbV106VFtSXSxsLnB1c2goSlswXSxKWzFdLEpbMl0pLGYucHVzaChSKX1WKz0xfX10aGlzLnBvaW50Q291bnQ9SCx0aGlzLmVkZ2VDb3VudD1xLHRoaXMudHJpYW5nbGVDb3VudD1WLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKHYpLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKHkpLHRoaXMucG9pbnRVVnMudXBkYXRlKHgpLHRoaXMucG9pbnRTaXplcy51cGRhdGUoYiksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KF8pKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKHApLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUoZCksdGhpcy5lZGdlVVZzLnVwZGF0ZShnKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShtKSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoaSksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUoYyksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShmKSl9fSxrLmRyYXdUcmFuc3BhcmVudD1rLmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsaT10LnByb2plY3Rpb258fHcsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDp3LnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3MuaW52ZXJzZU1vZGVsPWMocy5pbnZlcnNlTW9kZWwscy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO2wodSxzLnZpZXcscy5tb2RlbCksbCh1LHMucHJvamVjdGlvbix1KSxjKHUsdSk7Zm9yKG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgaCxmPXVbMTVdO2ZvcihvPTA7bzwzOysrbylmKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIHA9dVsxMitvXSxkPTA7ZDwzOysrZClwKz11WzQqZCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bZF07cy5saWdodFBvc2l0aW9uW29dPXAvZn10aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKChoPXRoaXMudHJpU2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKTt0aGlzLmVkZ2VDb3VudD4wJiZ0aGlzLmxpbmVXaWR0aD4wJiYoKGg9dGhpcy5saW5lU2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSk7dGhpcy5wb2ludENvdW50PjAmJigoaD10aGlzLnBvaW50U2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSk7dGhpcy5jb250b3VyRW5hYmxlJiZ0aGlzLmNvbnRvdXJDb3VudD4wJiZ0aGlzLmNvbnRvdXJMaW5lV2lkdGg+MCYmKChoPXRoaXMuY29udG91clNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLmNvbnRvdXJWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsdGhpcy5jb250b3VyQ291bnQpLHRoaXMuY29udG91clZBTy51bmJpbmQoKSl9LGsuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsaT10LnByb2plY3Rpb258fHcsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoaSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcyxsPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9Oygocz10aGlzLnBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSksdGhpcy5wb2ludENvdW50PjApJiYoKHM9dGhpcy5wb2ludFBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpKX0say5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zLGk9bmV3IEFycmF5KHIubGVuZ3RoKSxhPTA7YTxyLmxlbmd0aDsrK2EpaVthXT1uW3JbYV1dO3ZhciBvPXQuY29vcmRbMF0scz10LmNvb3JkWzFdO2lmKCF0aGlzLnBpY2tWZXJ0ZXgpe3ZhciBsPXRoaXMucG9zaXRpb25zW3JbMF1dLGM9dGhpcy5wb3NpdGlvbnNbclsxXV0sdT10aGlzLnBvc2l0aW9uc1tyWzJdXSxoPVsobFswXStjWzBdK3VbMF0pLzMsKGxbMV0rY1sxXSt1WzFdKS8zLChsWzJdK2NbMl0rdVsyXSkvM107cmV0dXJue19jZWxsQ2VudGVyOiEwLHBvc2l0aW9uOltvLHNdLGluZGV4OmUsY2VsbDpyLGNlbGxJZDplLGludGVuc2l0eTp0aGlzLmludGVuc2l0eVtlXSxkYXRhQ29vcmRpbmF0ZTpofX12YXIgZj1nKGksW28qdGhpcy5waXhlbFJhdGlvLHRoaXMuX3Jlc29sdXRpb25bMV0tcyp0aGlzLnBpeGVsUmF0aW9dLHRoaXMuX21vZGVsLHRoaXMuX3ZpZXcsdGhpcy5fcHJvamVjdGlvbix0aGlzLl9yZXNvbHV0aW9uKTtpZighZilyZXR1cm4gbnVsbDt2YXIgcD1mWzJdLGQ9MDtmb3IoYT0wO2E8ci5sZW5ndGg7KythKWQrPXBbYV0qdGhpcy5pbnRlbnNpdHlbclthXV07cmV0dXJue3Bvc2l0aW9uOmZbMV0saW5kZXg6cltmWzBdXSxjZWxsOnIsY2VsbElkOmUsaW50ZW5zaXR5OmQsZGF0YUNvb3JkaW5hdGU6dGhpcy5wb3NpdGlvbnNbcltmWzBdXV19fSxrLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmxpbmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5jb250b3VyU2hhZGVyLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKTt2YXIgcj10LmdldEV4dGVuc2lvbigiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil8fHQuZ2V0RXh0ZW5zaW9uKCJNT1pfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJkZXJpdmF0aXZlcyBub3Qgc3VwcG9ydGVkIik7dmFyIG49QSh0KSxzPVModCksbD1FKHQpLGM9Qyh0KSxoPUwodCksZj1QKHQpLHA9byh0LHUobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTtwLmdlbmVyYXRlTWlwbWFwKCkscC5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUixwLm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgZD1pKHQpLGc9aSh0KSxtPWkodCksdj1pKHQpLHk9aSh0KSx4PWEodCxbe2J1ZmZlcjpkLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6eSx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpnLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6bSx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOnYsdHlwZTp0LkZMT0FULHNpemU6M31dKSxiPWkodCksXz1pKHQpLHc9aSh0KSxrPWkodCksTT1hKHQsW3tidWZmZXI6Yix0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmssdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Xyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6Mn1dKSxJPWkodCksej1pKHQpLE89aSh0KSxEPWkodCksUj1pKHQpLEY9YSh0LFt7YnVmZmVyOkksdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpSLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOnosdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpPLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6RCx0eXBlOnQuRkxPQVQsc2l6ZToxfV0pLEI9aSh0KSxOPWEodCxbe2J1ZmZlcjpCLHR5cGU6dC5GTE9BVCxzaXplOjN9XSksaj1uZXcgVCh0LHAsbixzLGwsYyxoLGYsZCx5LGcsbSx2LHgsYixrLF8sdyxNLEksUix6LE8sRCxGLEIsTik7cmV0dXJuIGoudXBkYXRlKGUpLGp9fSx7Ii4vbGliL2Nsb3Nlc3QtcG9pbnQiOjI5MCwiLi9saWIvc2hhZGVycyI6MjkxLGNvbG9ybWFwOjEzMSwiZ2wtYnVmZmVyIjoyNTgsImdsLW1hdDQvaW52ZXJ0IjoyNzgsImdsLW1hdDQvbXVsdGlwbHkiOjI4MCwiZ2wtc2hhZGVyIjozMTIsImdsLXRleHR1cmUyZCI6MzI3LCJnbC12YW8iOjMzMixuZGFycmF5OjQ2OSxub3JtYWxzOjQ3Miwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXIiOjUyOCwidHlwZWRhcnJheS1wb29sIjo1Njd9XSwyOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsWzAsMCwwLDEsMSwwLDEsMV0pLHM9aShlLGEuYm94VmVydCxhLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3Qm94PShzPVswLDBdLGw9WzAsMF0sZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLnBsb3Qsbz10aGlzLnNoYWRlcixjPWEuZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLG8udW5pZm9ybXMubG89cyxvLnVuaWZvcm1zLmhpPWwsby51bmlmb3Jtcy5jb2xvcj1pLGMuZHJhd0FycmF5cyhjLlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI5NiwiZ2wtYnVmZmVyIjoyNTgsImdsLXNoYWRlciI6MzEyfV0sMjk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxvLmdyaWRWZXJ0LG8uZ3JpZEZyYWcpLGw9aShlLG8udGlja1ZlcnQsby5ncmlkRnJhZyk7cmV0dXJuIG5ldyBzKHQscixhLGwpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxvPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja1NoYWRlcj1uLHRoaXMudGlja3M9W1tdLFtdXX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQtZX12YXIgYyx1LGgsZixwLGQ9cy5wcm90b3R5cGU7ZC5kcmF3PShjPVswLDBdLHU9WzAsMF0saD1bMCwwXSxmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBsb3QsZT10aGlzLnZibyxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrcyxpPXQuZ2wsYT10Ll90aWNrQm91bmRzLG89dC5kYXRhQm94LHM9dC52aWV3Qm94LGw9dC5ncmlkTGluZVdpZHRoLGY9dC5ncmlkTGluZUNvbG9yLHA9dC5ncmlkTGluZUVuYWJsZSxkPXQucGl4ZWxSYXRpbyxnPTA7ZzwyOysrZyl7dmFyIG09YVtnXSx2PWFbZysyXS1tLHk9LjUqKG9bZysyXStvW2ddKSx4PW9bZysyXS1vW2ddO3VbZ109Mip2L3gsY1tnXT0yKihtLXkpL3h9ci5iaW5kKCksZS5iaW5kKCksci5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCksci51bmlmb3Jtcy5kYXRhU2hpZnQ9YyxyLnVuaWZvcm1zLmRhdGFTY2FsZT11O3ZhciBiPTA7Zm9yKGc9MDtnPDI7KytnKXtoWzBdPWhbMV09MCxoW2ddPTEsci51bmlmb3Jtcy5kYXRhQXhpcz1oLHIudW5pZm9ybXMubGluZVdpZHRoPWxbZ10vKHNbZysyXS1zW2ddKSpkLHIudW5pZm9ybXMuY29sb3I9ZltnXTt2YXIgXz02Km5bZ10ubGVuZ3RoO3BbZ10mJl8mJmkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUyxiLF8pLGIrPV99fSksZC5kcmF3VGlja01hcmtzPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVsxLDBdLG49WzAsMV0saT1bMCwwXSxvPVswLDBdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcz10aGlzLnBsb3QsYz10aGlzLnZibyx1PXRoaXMudGlja1NoYWRlcixoPXRoaXMudGlja3MsZj1zLmdsLHA9cy5fdGlja0JvdW5kcyxkPXMuZGF0YUJveCxnPXMudmlld0JveCxtPXMucGl4ZWxSYXRpbyx2PXMuc2NyZWVuQm94LHk9dlsyXS12WzBdLHg9dlszXS12WzFdLGI9Z1syXS1nWzBdLF89Z1szXS1nWzFdLHc9MDt3PDI7Kyt3KXt2YXIgVD1wW3ddLGs9cFt3KzJdLVQsTT0uNSooZFt3KzJdK2Rbd10pLEE9ZFt3KzJdLWRbd107ZVt3XT0yKmsvQSx0W3ddPTIqKFQtTSkvQX1lWzBdKj1iL3ksdFswXSo9Yi95LGVbMV0qPV8veCx0WzFdKj1fL3gsdS5iaW5kKCksYy5iaW5kKCksdS5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCk7dmFyIFM9dS51bmlmb3JtcztTLmRhdGFTaGlmdD10LFMuZGF0YVNjYWxlPWU7dmFyIEU9cy50aWNrTWFya0xlbmd0aCxDPXMudGlja01hcmtXaWR0aCxMPXMudGlja01hcmtDb2xvcixQPTYqaFswXS5sZW5ndGgsST1NYXRoLm1pbihhLmdlKGhbMF0sKGRbMF0tcFswXSkvKHBbMl0tcFswXSksbCksaFswXS5sZW5ndGgpLHo9TWF0aC5taW4oYS5ndChoWzBdLChkWzJdLXBbMF0pLyhwWzJdLXBbMF0pLGwpLGhbMF0ubGVuZ3RoKSxPPTArNipJLEQ9NipNYXRoLm1heCgwLHotSSksUj1NYXRoLm1pbihhLmdlKGhbMV0sKGRbMV0tcFsxXSkvKHBbM10tcFsxXSksbCksaFsxXS5sZW5ndGgpLEY9TWF0aC5taW4oYS5ndChoWzFdLChkWzNdLXBbMV0pLyhwWzNdLXBbMV0pLGwpLGhbMV0ubGVuZ3RoKSxCPVArNipSLE49NipNYXRoLm1heCgwLEYtUik7aVswXT0yKihnWzBdLUVbMV0pL3ktMSxpWzFdPShnWzNdK2dbMV0pL3gtMSxvWzBdPUVbMV0qbS95LG9bMV09Q1sxXSptL3gsTiYmKFMuY29sb3I9TFsxXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9bixTLnNjcmVlbk9mZnNldD1pLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxCLE4pKSxpWzBdPShnWzJdK2dbMF0pL3ktMSxpWzFdPTIqKGdbMV0tRVswXSkveC0xLG9bMF09Q1swXSptL3ksb1sxXT1FWzBdKm0veCxEJiYoUy5jb2xvcj1MWzBdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1yLFMuc2NyZWVuT2Zmc2V0PWksZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLE8sRCkpLGlbMF09MiooZ1syXStFWzNdKS95LTEsaVsxXT0oZ1szXStnWzFdKS94LTEsb1swXT1FWzNdKm0veSxvWzFdPUNbM10qbS94LE4mJihTLmNvbG9yPUxbM10sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9aSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsQixOKSksaVswXT0oZ1syXStnWzBdKS95LTEsaVsxXT0yKihnWzNdK0VbMl0pL3gtMSxvWzBdPUNbMl0qbS95LG9bMV09RVsyXSptL3gsRCYmKFMuY29sb3I9TFsyXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1pLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxPLEQpKX19KCksZC51cGRhdGU9KGY9WzEsMSwtMSwtMSwxLC0xXSxwPVsxLC0xLDEsMSwtMSwtMV0sZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQudGlja3Mscj10LmJvdW5kcyxuPW5ldyBGbG9hdDMyQXJyYXkoMTgqKGVbMF0ubGVuZ3RoK2VbMV0ubGVuZ3RoKSksaT0odGhpcy5wbG90Lnplcm9MaW5lRW5hYmxlLDApLGE9W1tdLFtdXSxvPTA7bzwyOysrbylmb3IodmFyIHM9YVtvXSxsPWVbb10sYz1yW29dLHU9cltvKzJdLGg9MDtoPGwubGVuZ3RoOysraCl7dmFyIGQ9KGxbaF0ueC1jKS8odS1jKTtzLnB1c2goZCk7Zm9yKHZhciBnPTA7Zzw2OysrZyluW2krK109ZCxuW2krK109ZltnXSxuW2krK109cFtnXX10aGlzLnRpY2tzPWEsdGhpcy52Ym8udXBkYXRlKG4pfSksZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRpY2tTaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI5NiwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjk2LCJnbC1idWZmZXIiOjI1OCwiZ2wtc2hhZGVyIjozMTJ9XSwyOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsWy0xLC0xLC0xLDEsMSwtMSwxLDFdKSxzPWkoZSxhLmxpbmVWZXJ0LGEubGluZUZyYWcpO3JldHVybiBuZXcgbyh0LHIscyl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtc2hhZGVyIiksYT10KCIuL3NoYWRlcnMiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXJ9dmFyIHMsbCxjPW8ucHJvdG90eXBlO2MuYmluZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2hhZGVyO3RoaXMudmJvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCksdC5hdHRyaWJ1dGVzLmNvb3JkLnBvaW50ZXIoKSx0LnVuaWZvcm1zLnNjcmVlbkJveD10aGlzLnBsb3Quc2NyZWVuQm94fSxjLmRyYXdMaW5lPShzPVswLDBdLGw9WzAsMF0sZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMucGxvdCxjPXRoaXMuc2hhZGVyLHU9by5nbDtzWzBdPXQsc1sxXT1lLGxbMF09cixsWzFdPW4sYy51bmlmb3Jtcy5zdGFydD1zLGMudW5pZm9ybXMuZW5kPWwsYy51bmlmb3Jtcy53aWR0aD1pKm8ucGl4ZWxSYXRpbyxjLnVuaWZvcm1zLmNvbG9yPWEsdS5kcmF3QXJyYXlzKHUuVFJJQU5HTEVfU1RSSVAsMCw0KX0pLGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6Mjk2LCJnbC1idWZmZXIiOjI1OCwiZ2wtc2hhZGVyIjozMTJ9XSwyOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBsb3dwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci54eXogKiBjb2xvci53LCBjb2xvci53KTtcbn1cbiJdKTtlLmV4cG9ydHM9e2xpbmVWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGNvb3JkO1xuXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xudW5pZm9ybSB2ZWMyIHN0YXJ0LCBlbmQ7XG51bmlmb3JtIGZsb2F0IHdpZHRoO1xuXG52ZWMyIHBlcnAodmVjMiB2KSB7XG4gIHJldHVybiB2ZWMyKHYueSwgLXYueCk7XG59XG5cbnZlYzIgc2NyZWVuKHZlYzIgdikge1xuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBkZWx0YSA9IG5vcm1hbGl6ZShwZXJwKHN0YXJ0IC0gZW5kKSk7XG4gIHZlYzIgb2Zmc2V0ID0gbWl4KHN0YXJ0LCBlbmQsIDAuNSAqIChjb29yZC55KzEuMCkpO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuKG9mZnNldCArIDAuNSAqIHdpZHRoICogZGVsdGEgKiBjb29yZC54KSwgMCwgMSk7XG59XG4iXSksbGluZUZyYWc6aSx0ZXh0VmVydDpuKFsiI2RlZmluZSBHTFNMSUZZIDFcbmF0dHJpYnV0ZSB2ZWMzIHRleHRDb29yZGluYXRlO1xuXG51bmlmb3JtIHZlYzIgZGF0YVNjYWxlLCBkYXRhU2hpZnQsIGRhdGFBeGlzLCBzY3JlZW5PZmZzZXQsIHRleHRTY2FsZTtcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgZGF0YU9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS56O1xuICB2ZWMyIGdseXBoT2Zmc2V0ICA9IHRleHRDb29yZGluYXRlLnh5O1xuICBtYXQyIGdseXBoTWF0cml4ID0gbWF0Mihjb3MoYW5nbGUpLCBzaW4oYW5nbGUpLCAtc2luKGFuZ2xlKSwgY29zKGFuZ2xlKSk7XG4gIHZlYzIgc2NyZWVuQ29vcmRpbmF0ZSA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFPZmZzZXQgKyBkYXRhU2hpZnQpICtcbiAgICBnbHlwaE1hdHJpeCAqIGdseXBoT2Zmc2V0ICogdGV4dFNjYWxlICsgc2NyZWVuT2Zmc2V0O1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuQ29vcmRpbmF0ZSwgMCwgMSk7XG59XG4iXSksdGV4dEZyYWc6aSxncmlkVmVydDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBkYXRhQ29vcmQ7XG5cbnVuaWZvcm0gdmVjMiBkYXRhQXhpcywgZGF0YVNoaWZ0LCBkYXRhU2NhbGU7XG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcbiAgcG9zICs9IDEwLjAgKiBkYXRhQ29vcmQueSAqIHZlYzIoZGF0YUF4aXMueSwgLWRhdGFBeGlzLngpICsgZGF0YUNvb3JkLnogKiBsaW5lV2lkdGg7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MsIDAsIDEpO1xufVxuIl0pLGdyaWRGcmFnOmksYm94VmVydDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcblxudW5pZm9ybSB2ZWM0IHNjcmVlbkJveDtcbnVuaWZvcm0gdmVjMiBsbywgaGk7XG5cbnZlYzIgc2NyZWVuKHZlYzIgdikge1xuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihtaXgobG8sIGhpLCBjb29yZCkpLCAwLCAxKTtcbn1cbiJdKSx0aWNrVmVydDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBkYXRhQ29vcmQ7XG5cbnVuaWZvcm0gdmVjMiBkYXRhQXhpcywgZGF0YVNoaWZ0LCBkYXRhU2NhbGUsIHNjcmVlbk9mZnNldCwgdGlja1NjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICsgdGlja1NjYWxlKmRhdGFDb29yZC55eiArIHNjcmVlbk9mZnNldCwgMCwgMSk7XG59XG4iXSl9fSx7Z2xzbGlmeTo0MTN9XSwyOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLGE9aShlLHMudGV4dFZlcnQscy50ZXh0RnJhZyk7cmV0dXJuIG5ldyBsKHQscixhKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC1zaGFkZXIiKSxhPXQoInRleHQtY2FjaGUiKSxvPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIikscz10KCIuL3NoYWRlcnMiKTtmdW5jdGlvbiBsKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXIsdGhpcy50aWNrT2Zmc2V0PVtbXSxbXV0sdGhpcy50aWNrWD1bW10sW11dLHRoaXMubGFiZWxPZmZzZXQ9WzAsMF0sdGhpcy5sYWJlbENvdW50PVswLDBdfXZhciBjLHUsaCxmLHAsZCxnPWwucHJvdG90eXBlO2cuZHJhd1RpY2tzPShjPVswLDBdLHU9WzAsMF0saD1bMCwwXSxmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBsb3Qscj10aGlzLnNoYWRlcixuPXRoaXMudGlja1hbdF0saT10aGlzLnRpY2tPZmZzZXRbdF0sYT1lLmdsLHM9ZS52aWV3Qm94LGw9ZS5kYXRhQm94LGY9ZS5zY3JlZW5Cb3gscD1lLnBpeGVsUmF0aW8sZD1lLnRpY2tFbmFibGUsZz1lLnRpY2tQYWQsbT1lLnRpY2tDb2xvcix2PWUudGlja0FuZ2xlLHk9ZS5sYWJlbEVuYWJsZSx4PWUubGFiZWxQYWQsYj1lLmxhYmVsQ29sb3IsXz1lLmxhYmVsQW5nbGUsdz10aGlzLmxhYmVsT2Zmc2V0W3RdLFQ9dGhpcy5sYWJlbENvdW50W3RdLGs9by5sdChuLGxbdF0pLE09by5sZShuLGxbdCsyXSk7Y1swXT1jWzFdPTAsY1t0XT0xLHVbdF09KHNbMit0XStzW3RdKS8oZlsyK3RdLWZbdF0pLTE7dmFyIEE9Mi9mWzIrKDFedCldLWZbMV50XTt1WzFedF09QSpzWzFedF0tMSxkW3RdJiYodVsxXnRdLT1BKnAqZ1t0XSxrPE0mJmlbTV0+aVtrXSYmKHIudW5pZm9ybXMuZGF0YUF4aXM9YyxyLnVuaWZvcm1zLnNjcmVlbk9mZnNldD11LHIudW5pZm9ybXMuY29sb3I9bVt0XSxyLnVuaWZvcm1zLmFuZ2xlPXZbdF0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLGlba10saVtNXS1pW2tdKSkpLHlbdF0mJlQmJih1WzFedF0tPUEqcCp4W3RdLHIudW5pZm9ybXMuZGF0YUF4aXM9aCxyLnVuaWZvcm1zLnNjcmVlbk9mZnNldD11LHIudW5pZm9ybXMuY29sb3I9Ylt0XSxyLnVuaWZvcm1zLmFuZ2xlPV9bdF0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLHcsVCkpLHVbMV50XT1BKnNbMisoMV50KV0tMSxkW3QrMl0mJih1WzFedF0rPUEqcCpnW3QrMl0sazxNJiZpW01dPmlba10mJihyLnVuaWZvcm1zLmRhdGFBeGlzPWMsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPW1bdCsyXSxyLnVuaWZvcm1zLmFuZ2xlPXZbdCsyXSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsaVtrXSxpW01dLWlba10pKSkseVt0KzJdJiZUJiYodVsxXnRdKz1BKnAqeFt0KzJdLHIudW5pZm9ybXMuZGF0YUF4aXM9aCxyLnVuaWZvcm1zLnNjcmVlbk9mZnNldD11LHIudW5pZm9ybXMuY29sb3I9Ylt0KzJdLHIudW5pZm9ybXMuYW5nbGU9X1t0KzJdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyx3LFQpKX0pLGcuZHJhd1RpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10aGlzLnBsb3Qsbj10aGlzLnNoYWRlcixpPXIuZ2wsYT1yLnNjcmVlbkJveCxvPXIudGl0bGVDZW50ZXIscz1yLnRpdGxlQW5nbGUsbD1yLnRpdGxlQ29sb3IsYz1yLnBpeGVsUmF0aW87aWYodGhpcy50aXRsZUNvdW50KXtmb3IodmFyIHU9MDt1PDI7Kyt1KWVbdV09Mioob1t1XSpjLWFbdV0pLyhhWzIrdV0tYVt1XSktMTtuLmJpbmQoKSxuLnVuaWZvcm1zLmRhdGFBeGlzPXQsbi51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9ZSxuLnVuaWZvcm1zLmFuZ2xlPXMsbi51bmlmb3Jtcy5jb2xvcj1sLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUyx0aGlzLnRpdGxlT2Zmc2V0LHRoaXMudGl0bGVDb3VudCl9fX0oKSxnLmJpbmQ9KGY9WzAsMF0scD1bMCwwXSxkPVswLDBdLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zaGFkZXIscj10Ll90aWNrQm91bmRzLG49dC5kYXRhQm94LGk9dC5zY3JlZW5Cb3gsYT10LnZpZXdCb3g7ZS5iaW5kKCk7Zm9yKHZhciBvPTA7bzwyOysrbyl7dmFyIHM9cltvXSxsPXJbbysyXS1zLGM9LjUqKG5bbysyXStuW29dKSx1PW5bbysyXS1uW29dLGg9YVtvXSxnPWFbbysyXS1oLG09aVtvXSx2PWlbbysyXS1tO3Bbb109MipsL3UqZy92LGZbb109Mioocy1jKS91Kmcvdn1kWzFdPTIqdC5waXhlbFJhdGlvLyhpWzNdLWlbMV0pLGRbMF09ZFsxXSooaVszXS1pWzFdKS8oaVsyXS1pWzBdKSxlLnVuaWZvcm1zLmRhdGFTY2FsZT1wLGUudW5pZm9ybXMuZGF0YVNoaWZ0PWYsZS51bmlmb3Jtcy50ZXh0U2NhbGU9ZCx0aGlzLnZiby5iaW5kKCksZS5hdHRyaWJ1dGVzLnRleHRDb29yZGluYXRlLnBvaW50ZXIoKX0pLGcudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLG8scz1bXSxsPXQudGlja3MsYz10LmJvdW5kcztmb3Iobz0wO288MjsrK28pe3ZhciB1PVtNYXRoLmZsb29yKHMubGVuZ3RoLzMpXSxoPVstMS8wXSxmPWxbb107Zm9yKGU9MDtlPGYubGVuZ3RoOysrZSl7dmFyIHA9ZltlXSxkPXAueCxnPXAudGV4dCxtPXAuZm9udHx8InNhbnMtc2VyaWYiO2k9cC5mb250U2l6ZXx8MTI7Zm9yKHZhciB2PTEvKGNbbysyXS1jW29dKSx5PWNbb10seD1nLnNwbGl0KCJcbiIpLGI9MDtiPHgubGVuZ3RoO2IrKylmb3Iobj1hKG0seFtiXSkuZGF0YSxyPTA7cjxuLmxlbmd0aDtyKz0yKXMucHVzaChuW3JdKmksLW5bcisxXSppLWIqaSoxLjIsKGQteSkqdik7dS5wdXNoKE1hdGguZmxvb3Iocy5sZW5ndGgvMykpLGgucHVzaChkKX10aGlzLnRpY2tPZmZzZXRbb109dSx0aGlzLnRpY2tYW29dPWh9Zm9yKG89MDtvPDI7KytvKXtmb3IodGhpcy5sYWJlbE9mZnNldFtvXT1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLG49YSh0LmxhYmVsRm9udFtvXSx0LmxhYmVsc1tvXSx7dGV4dEFsaWduOiJjZW50ZXIifSkuZGF0YSxpPXQubGFiZWxTaXplW29dLGU9MDtlPG4ubGVuZ3RoO2UrPTIpcy5wdXNoKG5bZV0qaSwtbltlKzFdKmksMCk7dGhpcy5sYWJlbENvdW50W29dPU1hdGguZmxvb3Iocy5sZW5ndGgvMyktdGhpcy5sYWJlbE9mZnNldFtvXX1mb3IodGhpcy50aXRsZU9mZnNldD1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLG49YSh0LnRpdGxlRm9udCx0LnRpdGxlKS5kYXRhLGk9dC50aXRsZVNpemUsZT0wO2U8bi5sZW5ndGg7ZSs9MilzLnB1c2gobltlXSppLC1uW2UrMV0qaSwwKTt0aGlzLnRpdGxlQ291bnQ9TWF0aC5mbG9vcihzLmxlbmd0aC8zKS10aGlzLnRpdGxlT2Zmc2V0LHRoaXMudmJvLnVwZGF0ZShzKX0sZy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoyOTYsImJpbmFyeS1zZWFyY2gtYm91bmRzIjo5NiwiZ2wtYnVmZmVyIjoyNTgsImdsLXNoYWRlciI6MzEyLCJ0ZXh0LWNhY2hlIjo1NDd9XSwyOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsW2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0pLGM9bmV3IGwoZSxyKTtyZXR1cm4gYy5ncmlkPWkoYyksYy50ZXh0PWEoYyksYy5saW5lPW8oYyksYy5ib3g9cyhjKSxjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KCJnbC1zZWxlY3Qtc3RhdGljIiksaT10KCIuL2xpYi9ncmlkIiksYT10KCIuL2xpYi90ZXh0Iiksbz10KCIuL2xpYi9saW5lIikscz10KCIuL2xpYi9ib3giKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5nbD10LHRoaXMucGlja0J1ZmZlcj1lLHRoaXMuc2NyZWVuQm94PVswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx0aGlzLnZpZXdCb3g9WzAsMCwwLDBdLHRoaXMuZGF0YUJveD1bLTEwLC0xMCwxMCwxMF0sdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGVDZW50ZXI9WzAsMF0sdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVs0LDRdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzIsMiwyLDJdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZD1udWxsLHRoaXMudGV4dD1udWxsLHRoaXMubGluZT1udWxsLHRoaXMuYm94PW51bGwsdGhpcy5vYmplY3RzPVtdLHRoaXMub3ZlcmxheXM9W10sdGhpcy5fdGlja0JvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuc3RhdGljPSExLHRoaXMuZGlydHk9ITEsdGhpcy5waWNrRGlydHk9ITEsdGhpcy5waWNrRGVsYXk9MTIwLHRoaXMucGlja1JhZGl1cz0xMCx0aGlzLl9waWNrVGltZW91dD1udWxsLHRoaXMuX2RyYXdQaWNrPXRoaXMuZHJhd1BpY2suYmluZCh0aGlzKSx0aGlzLl9kZXB0aENvdW50ZXI9MH12YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT10LnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09ZVtyXS5zbGljZSgpO3JldHVybiBlfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC54LWUueH1jLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sYy5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxjLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7aWYodGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHRoaXMuYm9yZGVyQ29sb3Ipe3Quc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIGM9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IoY1swXSpjWzNdLGNbMV0qY1szXSxjWzJdKmNbM10sY1szXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKX10LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciB1PXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcih1WzBdKnVbM10sdVsxXSp1WzNdLHVbMl0qdVszXSx1WzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksYS5kcmF3KCk7dmFyIGg9dGhpcy56ZXJvTGluZUVuYWJsZSxmPXRoaXMuemVyb0xpbmVDb2xvcixwPXRoaXMuemVyb0xpbmVXaWR0aDtpZihoWzBdfHxoWzFdKXtvLmJpbmQoKTtmb3IodmFyIGQ9MDtkPDI7KytkKWlmKGhbZF0mJm5bZF08PTAmJm5bZCsyXT49MCl7dmFyIGc9ZVtkXS1uW2RdKihlW2QrMl0tZVtkXSkvKG5bZCsyXS1uW2RdKTswPT09ZD9vLmRyYXdMaW5lKGcsZVsxXSxnLGVbM10scFtkXSxmW2RdKTpvLmRyYXdMaW5lKGVbMF0sZyxlWzJdLGcscFtkXSxmW2RdKX19Zm9yKGQ9MDtkPGwubGVuZ3RoOysrZClsW2RdLmRyYXcoKTt0LnZpZXdwb3J0KGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHRoaXMuZ3JpZC5kcmF3VGlja01hcmtzKCksby5iaW5kKCk7dmFyIG09dGhpcy5ib3JkZXJMaW5lRW5hYmxlLHY9dGhpcy5ib3JkZXJMaW5lV2lkdGgseT10aGlzLmJvcmRlckxpbmVDb2xvcjtmb3IobVsxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqdlsxXSppLHJbMF0sclszXSsuNSp2WzNdKmksdlsxXSx5WzFdKSxtWzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqdlswXSppLHJbMV0sclsyXSsuNSp2WzJdKmksclsxXSx2WzBdLHlbMF0pLG1bM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41KnZbMV0qaSxyWzJdLHJbM10rLjUqdlszXSppLHZbM10seVszXSksbVsyXSYmby5kcmF3TGluZShyWzBdLS41KnZbMF0qaSxyWzNdLHJbMl0rLjUqdlsyXSppLHJbM10sdlsyXSx5WzJdKSxzLmJpbmQoKSxkPTA7ZDwyOysrZClzLmRyYXdUaWNrcyhkKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO3ZhciB4PXRoaXMub3ZlcmxheXM7Zm9yKGQ9MDtkPHgubGVuZ3RoOysrZCl4W2RdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fSxjLmRyYXdQaWNrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhdGljKXt2YXIgdD10aGlzLnBpY2tCdWZmZXI7dGhpcy5nbCx0aGlzLl9waWNrVGltZW91dD1udWxsLHQuYmVnaW4oKTtmb3IodmFyIGU9MSxyPXRoaXMub2JqZWN0cyxuPTA7bjxyLmxlbmd0aDsrK24pZT1yW25dLmRyYXdQaWNrKGUpO3QuZW5kKCl9fSxjLnBpY2s9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5zdGF0aWMpe3ZhciByPXRoaXMucGl4ZWxSYXRpbyxuPXRoaXMucGlja1BpeGVsUmF0aW8saT10aGlzLnZpZXdCb3gsYT0wfE1hdGgucm91bmQoKHQtaVswXS9yKSpuKSxvPTB8TWF0aC5yb3VuZCgoZS1pWzFdL3IpKm4pLHM9dGhpcy5waWNrQnVmZmVyLnF1ZXJ5KGEsbyx0aGlzLnBpY2tSYWRpdXMpO2lmKCFzKXJldHVybiBudWxsO2Zvcih2YXIgbD1zLmlkKyhzLnZhbHVlWzBdPDw4KSsocy52YWx1ZVsxXTw8MTYpKyhzLnZhbHVlWzJdPDwyNCksYz10aGlzLm9iamVjdHMsdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgaD1jW3VdLnBpY2soYSxvLGwpO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9fSxjLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0sYy5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveDsoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdfHxlWzJdIT09dFsyXXx8ZVszXSE9PXRbM10pJiYoZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLHRoaXMuc2V0RGlydHkoKSl9LGMuc2V0Vmlld0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLnZpZXdCb3g7clswXT0wfE1hdGgucm91bmQodFswXSplKSxyWzFdPTB8TWF0aC5yb3VuZCh0WzFdKmUpLHJbMl09MHxNYXRoLnJvdW5kKHRbMl0qZSksclszXT0wfE1hdGgucm91bmQodFszXSplKTt2YXIgbj10aGlzLnBpY2tQaXhlbFJhdGlvO3RoaXMucGlja0J1ZmZlci5zaGFwZT1bMHxNYXRoLnJvdW5kKCh0WzJdLXRbMF0pKm4pLDB8TWF0aC5yb3VuZCgodFszXS10WzFdKSpuKV0sdGhpcy5zZXREaXJ0eSgpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpb3x8MTt2YXIgcj10aGlzLnBpeGVsUmF0aW87dGhpcy5waWNrUGl4ZWxSYXRpbz1NYXRoLm1heChyLDEpLHRoaXMuc2V0U2NyZWVuQm94KHQuc2NyZWVuQm94fHxbMCwwLGUuZHJhd2luZ0J1ZmZlcldpZHRoL3IsZS5kcmF3aW5nQnVmZmVySGVpZ2h0L3JdKTt0aGlzLnNjcmVlbkJveDt0aGlzLnNldFZpZXdCb3godC52aWV3Qm94fHxbLjEyNSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjEyNSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3JdKTt2YXIgbj10aGlzLnZpZXdCb3gsaT0oblsyXS1uWzBdKS8oblszXS1uWzFdKTt0aGlzLnNldERhdGFCb3godC5kYXRhQm94fHxbLTEwLC0xMC9pLDEwLDEwL2ldKSx0aGlzLmJvcmRlckNvbG9yPSExIT09dC5ib3JkZXJDb2xvciYmKHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9dSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPXUodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj11KHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKCJ0aXRsZUVuYWJsZSJpbiB0KXx8ISF0LnRpdGxlRW5hYmxlLHRoaXMudGl0bGVBbmdsZT10LnRpdGxlQW5nbGV8fDAsdGhpcy50aXRsZUNvbG9yPSh0LnRpdGxlQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmxhYmVsUGFkPSh0LmxhYmVsUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMubGFiZWxBbmdsZT0odC5sYWJlbEFuZ2xlfHxbMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0pLnNsaWNlKCksdGhpcy5sYWJlbEVuYWJsZT0odC5sYWJlbEVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmxhYmVsQ29sb3I9dSh0LmxhYmVsQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tQYWQ9KHQudGlja1BhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLnRpY2tBbmdsZT0odC50aWNrQW5nbGV8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tFbmFibGU9KHQudGlja0VuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLnRpY2tDb2xvcj11KHQudGlja0NvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy5ib3JkZXJMaW5lRW5hYmxlPSh0LmJvcmRlckxpbmVFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lV2lkdGg9KHQuYm9yZGVyTGluZVdpZHRofHxbMiwyLDIsMl0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lQ29sb3I9dSh0LmJvcmRlckxpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pO3ZhciBhPXQudGlja3N8fFtbXSxbXV0sbz10aGlzLl90aWNrQm91bmRzO29bMF09b1sxXT0xLzAsb1syXT1vWzNdPS0xLzA7Zm9yKHZhciBzPTA7czwyOysrcyl7dmFyIGw9YVtzXS5zbGljZSgwKTswIT09bC5sZW5ndGgmJihsLnNvcnQoaCksb1tzXT1NYXRoLm1pbihvW3NdLGxbMF0ueCksb1tzKzJdPU1hdGgubWF4KG9bcysyXSxsW2wubGVuZ3RoLTFdLngpKX10aGlzLmdyaWQudXBkYXRlKHtib3VuZHM6byx0aWNrczphfSksdGhpcy50ZXh0LnVwZGF0ZSh7Ym91bmRzOm8sdGlja3M6YSxsYWJlbHM6dC5sYWJlbHN8fFsieCIsInkiXSxsYWJlbFNpemU6dC5sYWJlbFNpemV8fFsxMiwxMl0sbGFiZWxGb250OnQubGFiZWxGb250fHxbInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGl0bGU6dC50aXRsZXx8IiIsdGl0bGVTaXplOnQudGl0bGVTaXplfHwxOCx0aXRsZUZvbnQ6dC50aXRsZUZvbnR8fCJzYW5zLXNlcmlmIn0pLHRoaXMuc3RhdGljPSEhdC5zdGF0aWMsdGhpcy5zZXREaXJ0eSgpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveC5kaXNwb3NlKCksdGhpcy5ncmlkLmRpc3Bvc2UoKSx0aGlzLnRleHQuZGlzcG9zZSgpLHRoaXMubGluZS5kaXNwb3NlKCk7Zm9yKHZhciB0PXRoaXMub2JqZWN0cy5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLm9iamVjdHNbdF0uZGlzcG9zZSgpO3RoaXMub2JqZWN0cy5sZW5ndGg9MDtmb3IodD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxjLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0sYy5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0sYy5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxjLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0seyIuL2xpYi9ib3giOjI5MywiLi9saWIvZ3JpZCI6Mjk0LCIuL2xpYi9saW5lIjoyOTUsIi4vbGliL3RleHQiOjI5NywiZ2wtc2VsZWN0LXN0YXRpYyI6MzExfV0sMjk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8ZG9jdW1lbnQuYm9keSxlPWV8fHt9O3ZhciByPVsuMDEsMS8wXTsiZGlzdGFuY2VMaW1pdHMiaW4gZSYmKHJbMF09ZS5kaXN0YW5jZUxpbWl0c1swXSxyWzFdPWUuZGlzdGFuY2VMaW1pdHNbMV0pOyJ6b29tTWluImluIGUmJihyWzBdPWUuem9vbU1pbik7Inpvb21NYXgiaW4gZSYmKHJbMV09ZS56b29tTWF4KTt2YXIgYz1pKHtjZW50ZXI6ZS5jZW50ZXJ8fFswLDAsMF0sdXA6ZS51cHx8WzAsMSwwXSxleWU6ZS5leWV8fFswLDAsMTBdLG1vZGU6ZS5tb2RlfHwib3JiaXQiLGRpc3RhbmNlTGltaXRzOnJ9KSx1PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxoPTAsZj10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsZD17a2V5QmluZGluZ01vZGU6InJvdGF0ZSIsZW5hYmxlV2hlZWw6ITAsdmlldzpjLGVsZW1lbnQ6dCxkZWxheTplLmRlbGF5fHwxNixyb3RhdGVTcGVlZDplLnJvdGF0ZVNwZWVkfHwxLHpvb21TcGVlZDplLnpvb21TcGVlZHx8MSx0cmFuc2xhdGVTcGVlZDplLnRyYW5zbGF0ZVNwZWVkfHwxLGZsaXBYOiEhZS5mbGlwWCxmbGlwWTohIWUuZmxpcFksbW9kZXM6Yy5tb2Rlcyxfb3J0aG86ZS5fb3J0aG98fGUucHJvamVjdGlvbiYmIm9ydGhvZ3JhcGhpYyI9PT1lLnByb2plY3Rpb24udHlwZXx8ITEsdGljazpmdW5jdGlvbigpe3ZhciBlPW4oKSxyPXRoaXMuZGVsYXksaT1lLTIqcjtjLmlkbGUoZS1yKSxjLnJlY2FsY01hdHJpeChpKSxjLmZsdXNoKGUtKDEwMCsyKnIpKTtmb3IodmFyIGE9ITAsbz1jLmNvbXB1dGVkTWF0cml4LHM9MDtzPDE2OysrcylhPWEmJnVbc109PT1vW3NdLHVbc109b1tzXTt2YXIgbD10LmNsaWVudFdpZHRoPT09ZiYmdC5jbGllbnRIZWlnaHQ9PT1wO3JldHVybiBmPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxhPyFsOihoPU1hdGguZXhwKGMuY29tcHV0ZWRSYWRpdXNbMF0pLCEwKX0sbG9va0F0OmZ1bmN0aW9uKHQsZSxyKXtjLmxvb2tBdChjLmxhc3RUKCksdCxlLHIpfSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe2Mucm90YXRlKGMubGFzdFQoKSx0LGUscil9LHBhbjpmdW5jdGlvbih0LGUscil7Yy5wYW4oYy5sYXN0VCgpLHQsZSxyKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnRyYW5zbGF0ZShjLmxhc3RUKCksdCxlLHIpfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGQse21hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRNYXRyaXh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXRNYXRyaXgoYy5sYXN0VCgpLHQpLGMuY29tcHV0ZWRNYXRyaXh9LGVudW1lcmFibGU6ITB9LG1vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmdldE1vZGUoKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWMuY29tcHV0ZWRVcC5zbGljZSgpLHI9Yy5jb21wdXRlZEV5ZS5zbGljZSgpLGk9Yy5jb21wdXRlZENlbnRlci5zbGljZSgpO2lmKGMuc2V0TW9kZSh0KSwidHVybnRhYmxlIj09PXQpe3ZhciBhPW4oKTtjLl9hY3RpdmUubG9va0F0KGEscixpLGUpLGMuX2FjdGl2ZS5sb29rQXQoYSs1MDAscixpLFswLDAsMV0pLGMuX2FjdGl2ZS5mbHVzaChhKX1yZXR1cm4gYy5nZXRNb2RlKCl9LGVudW1lcmFibGU6ITB9LGNlbnRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRDZW50ZXJ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsdCksYy5jb21wdXRlZENlbnRlcn0sZW51bWVyYWJsZTohMH0sZXllOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZEV5ZX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksdCksYy5jb21wdXRlZEV5ZX0sZW51bWVyYWJsZTohMH0sdXA6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkVXB9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsbnVsbCx0KSxjLmNvbXB1dGVkVXB9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlKGMubGFzdFQoKSx0KSx0fSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZUxpbWl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0RGlzdGFuY2VMaW1pdHMocil9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXREaXN0YW5jZUxpbWl0cyh0KSx0fSxlbnVtZXJhYmxlOiEwfX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCExfSkpLGQuX2xhc3RYPS0xLGQuX2xhc3RZPS0xLGQuX2xhc3RNb2RzPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfSxkLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsaSxhKXt2YXIgbz1kLmtleUJpbmRpbmdNb2RlO2lmKCExIT09byl7dmFyIHM9InJvdGF0ZSI9PT1vLGw9InBhbiI9PT1vLHU9Inpvb20iPT09byxmPSEhYS5jb250cm9sLHA9ISFhLmFsdCxnPSEhYS5zaGlmdCxtPSEhKDEmZSksdj0hISgyJmUpLHk9ISEoNCZlKSx4PTEvdC5jbGllbnRIZWlnaHQsYj14KihyLWQuX2xhc3RYKSxfPXgqKGktZC5fbGFzdFkpLHc9ZC5mbGlwWD8xOi0xLFQ9ZC5mbGlwWT8xOi0xLGs9TWF0aC5QSSpkLnJvdGF0ZVNwZWVkLE09bigpO2lmKC0xIT09ZC5fbGFzdFgmJi0xIT09ZC5fbGFzdFkmJigocyYmbSYmIWYmJiFwJiYhZ3x8bSYmIWYmJiFwJiZnKSYmYy5yb3RhdGUoTSx3KmsqYiwtVCprKl8sMCksKGwmJm0mJiFmJiYhcCYmIWd8fHZ8fG0mJmYmJiFwJiYhZykmJmMucGFuKE0sLWQudHJhbnNsYXRlU3BlZWQqYipoLGQudHJhbnNsYXRlU3BlZWQqXypoLDApLHUmJm0mJiFmJiYhcCYmIWd8fHl8fG0mJiFmJiZwJiYhZykpe3ZhciBBPS1kLnpvb21TcGVlZCpfL3dpbmRvdy5pbm5lckhlaWdodCooTS1jLmxhc3RUKCkpKjEwMDtjLnBhbihNLDAsMCxoKihNYXRoLmV4cChBKS0xKSl9cmV0dXJuIGQuX2xhc3RYPXIsZC5fbGFzdFk9aSxkLl9sYXN0TW9kcz1hLCEwfX1kLm1vdXNlTGlzdGVuZXI9YSh0LGUpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsKGZ1bmN0aW9uKHIpe3ZhciBuPXMoci5jaGFuZ2VkVG91Y2hlc1swXSx0KTtlKDAsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxlKDEsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxyLnByZXZlbnREZWZhdWx0KCl9KSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLChmdW5jdGlvbihyKXt2YXIgbj1zKHIuY2hhbmdlZFRvdWNoZXNbMF0sdCk7ZSgxLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksci5wcmV2ZW50RGVmYXVsdCgpfSksISFsJiZ7cGFzc2l2ZTohMX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLChmdW5jdGlvbih0KXtlKDAsZC5fbGFzdFgsZC5fbGFzdFksZC5fbGFzdE1vZHMpLHQucHJldmVudERlZmF1bHQoKX0pLCEhbCYme3Bhc3NpdmU6ITF9KSxkLndoZWVsTGlzdGVuZXI9byh0LChmdW5jdGlvbih0LGUpe2lmKCExIT09ZC5rZXlCaW5kaW5nTW9kZSYmZC5lbmFibGVXaGVlbCl7dmFyIHI9ZC5mbGlwWD8xOi0xLGk9ZC5mbGlwWT8xOi0xLGE9bigpO2lmKE1hdGguYWJzKHQpPk1hdGguYWJzKGUpKWMucm90YXRlKGEsMCwwLC10KnIqTWF0aC5QSSpkLnJvdGF0ZVNwZWVkL3dpbmRvdy5pbm5lcldpZHRoKTtlbHNlIGlmKCFkLl9vcnRobyl7dmFyIG89LWQuem9vbVNwZWVkKmkqZS93aW5kb3cuaW5uZXJIZWlnaHQqKGEtYy5sYXN0VCgpKS8yMDtjLnBhbihhLDAsMCxoKihNYXRoLmV4cChvKS0xKSl9fX0pLCEwKX0sZC5lbmFibGVNb3VzZUxpc3RlbmVycygpLGR9O3ZhciBuPXQoInJpZ2h0LW5vdyIpLGk9dCgiM2QtdmlldyIpLGE9dCgibW91c2UtY2hhbmdlIiksbz10KCJtb3VzZS13aGVlbCIpLHM9dCgibW91c2UtZXZlbnQtb2Zmc2V0IiksbD10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKX0seyIzZC12aWV3Ijo1NCwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MTUsIm1vdXNlLWNoYW5nZSI6NDU3LCJtb3VzZS1ldmVudC1vZmZzZXQiOjQ1OCwibW91c2Utd2hlZWwiOjQ2MCwicmlnaHQtbm93Ijo1MTR9XSwzMDA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbnZhcnlpbmcgdmVjMiB1djtcbnZvaWQgbWFpbigpIHtcbiAgdXYgPSBwb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLCAxKTtcbn0iXSksbz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHNhbXBsZXIyRCBhY2N1bUJ1ZmZlcjtcbnZhcnlpbmcgdmVjMiB1djtcblxudm9pZCBtYWluKCkge1xuICB2ZWM0IGFjY3VtID0gdGV4dHVyZTJEKGFjY3VtQnVmZmVyLCAwLjUgKiAodXYgKyAxLjApKTtcbiAgZ2xfRnJhZ0NvbG9yID0gbWluKHZlYzQoMSwxLDEsMSksIGFjY3VtKTtcbn0iXSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxvLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMiJ9XSl9fSx7ImdsLXNoYWRlciI6MzEyLGdsc2xpZnk6NDEzfV0sMzAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2FtZXJhLmpzIiksaT10KCJnbC1heGVzM2QiKSxhPXQoImdsLWF4ZXMzZC9wcm9wZXJ0aWVzIiksbz10KCJnbC1zcGlrZXMzZCIpLHM9dCgiZ2wtc2VsZWN0LXN0YXRpYyIpLGw9dCgiZ2wtZmJvIiksYz10KCJhLWJpZy10cmlhbmdsZSIpLHU9dCgibW91c2UtY2hhbmdlIiksaD10KCJnbC1tYXQ0L3BlcnNwZWN0aXZlIiksZj10KCJnbC1tYXQ0L29ydGhvIikscD10KCIuL2xpYi9zaGFkZXIiKSxkPXQoImlzLW1vYmlsZSIpKHt0YWJsZXQ6ITAsZmVhdHVyZURldGVjdDohMH0pO2Z1bmN0aW9uIGcoKXt0aGlzLm1vdXNlPVstMSwtMV0sdGhpcy5zY3JlZW49bnVsbCx0aGlzLmRpc3RhbmNlPTEvMCx0aGlzLmluZGV4PW51bGwsdGhpcy5kYXRhQ29vcmRpbmF0ZT1udWxsLHRoaXMuZGF0YVBvc2l0aW9uPW51bGwsdGhpcy5vYmplY3Q9bnVsbCx0aGlzLmRhdGE9bnVsbH1mdW5jdGlvbiBtKHQpe3ZhciBlPU1hdGgucm91bmQoTWF0aC5sb2coTWF0aC5hYnModCkpL01hdGgubG9nKDEwKSk7aWYoZTwwKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLC1lKSk7cmV0dXJuIE1hdGguY2VpbCh0KnIpL3J9aWYoZT4wKXtyPU1hdGgucm91bmQoTWF0aC5wb3coMTAsZSkpO3JldHVybiBNYXRoLmNlaWwodC9yKSpyfXJldHVybiBNYXRoLmNlaWwodCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4iYm9vbGVhbiIhPXR5cGVvZiB0fHx0fWUuZXhwb3J0cz17Y3JlYXRlU2NlbmU6ZnVuY3Rpb24odCl7KHQ9dHx8e30pLmNhbWVyYT10LmNhbWVyYXx8e307dmFyIGU9dC5jYW52YXM7aWYoIWUpe2lmKGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdC5jb250YWluZXIpdC5jb250YWluZXIuYXBwZW5kQ2hpbGQoZSk7ZWxzZSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpfXZhciByPXQuZ2w7cnx8KHQuZ2xPcHRpb25zJiYoZD0hIXQuZ2xPcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcikscj1mdW5jdGlvbih0LGUpe3ZhciByPW51bGw7dHJ5eyhyPXQuZ2V0Q29udGV4dCgid2ViZ2wiLGUpKXx8KHI9dC5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLGUpKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH1yZXR1cm4gcn0oZSx0LmdsT3B0aW9uc3x8e3ByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITAscHJlc2VydmVEcmF3aW5nQnVmZmVyOmR9KSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJ3ZWJnbCBub3Qgc3VwcG9ydGVkIik7dmFyIHk9dC5ib3VuZHN8fFtbLTEwLC0xMCwtMTBdLFsxMCwxMCwxMF1dLHg9bmV3IGcsYj1sKHIsci5kcmF3aW5nQnVmZmVyV2lkdGgsci5kcmF3aW5nQnVmZmVySGVpZ2h0LHtwcmVmZXJGbG9hdDohZH0pLF89cChyKSx3PXQuY2FtZXJhT2JqZWN0JiYhMD09PXQuY2FtZXJhT2JqZWN0Ll9vcnRob3x8dC5jYW1lcmEucHJvamVjdGlvbiYmIm9ydGhvZ3JhcGhpYyI9PT10LmNhbWVyYS5wcm9qZWN0aW9uLnR5cGV8fCExLFQ9e2V5ZTp0LmNhbWVyYS5leWV8fFsyLDAsMF0sY2VudGVyOnQuY2FtZXJhLmNlbnRlcnx8WzAsMCwwXSx1cDp0LmNhbWVyYS51cHx8WzAsMSwwXSx6b29tTWluOnQuY2FtZXJhLnpvb21NYXh8fC4xLHpvb21NYXg6dC5jYW1lcmEuem9vbU1pbnx8MTAwLG1vZGU6dC5jYW1lcmEubW9kZXx8InR1cm50YWJsZSIsX29ydGhvOnd9LGs9dC5heGVzfHx7fSxNPWkocixrKTtNLmVuYWJsZT0hay5kaXNhYmxlO3ZhciBBPXQuc3Bpa2VzfHx7fSxTPW8ocixBKSxFPVtdLEM9W10sTD1bXSxQPVtdLEk9ITAsej0hMCxPPW5ldyBBcnJheSgxNiksRD1uZXcgQXJyYXkoMTYpLFI9e3ZpZXc6bnVsbCxwcm9qZWN0aW9uOk8sbW9kZWw6RCxfb3J0aG86ITF9LEY9KHo9ITAsW3IuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodF0pLEI9dC5jYW1lcmFPYmplY3R8fG4oZSxUKSxOPXtnbDpyLGNvbnRleHRMb3N0OiExLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfHwxLGNhbnZhczplLHNlbGVjdGlvbjp4LGNhbWVyYTpCLGF4ZXM6TSxheGVzUGl4ZWxzOm51bGwsc3Bpa2VzOlMsYm91bmRzOnksb2JqZWN0czpFLHNoYXBlOkYsYXNwZWN0OnQuYXNwZWN0UmF0aW98fFsxLDEsMV0scGlja1JhZGl1czp0LnBpY2tSYWRpdXN8fDEwLHpOZWFyOnQuek5lYXJ8fC4wMSx6RmFyOnQuekZhcnx8MWUzLGZvdnk6dC5mb3Z5fHxNYXRoLlBJLzQsY2xlYXJDb2xvcjp0LmNsZWFyQ29sb3J8fFswLDAsMCwwXSxhdXRvUmVzaXplOnYodC5hdXRvUmVzaXplKSxhdXRvQm91bmRzOnYodC5hdXRvQm91bmRzKSxhdXRvU2NhbGU6ISF0LmF1dG9TY2FsZSxhdXRvQ2VudGVyOnYodC5hdXRvQ2VudGVyKSxjbGlwVG9Cb3VuZHM6dih0LmNsaXBUb0JvdW5kcyksc25hcFRvRGF0YTohIXQuc25hcFRvRGF0YSxvbnNlbGVjdDp0Lm9uc2VsZWN0fHxudWxsLG9ucmVuZGVyOnQub25yZW5kZXJ8fG51bGwsb25jbGljazp0Lm9uY2xpY2t8fG51bGwsY2FtZXJhUGFyYW1zOlIsb25jb250ZXh0bG9zczpudWxsLG1vdXNlTGlzdGVuZXI6bnVsbCxfc3RvcHBlZDohMSxnZXRBc3BlY3RyYXRpbzpmdW5jdGlvbigpe3JldHVybnt4OnRoaXMuYXNwZWN0WzBdLHk6dGhpcy5hc3BlY3RbMV0sejp0aGlzLmFzcGVjdFsyXX19LHNldEFzcGVjdHJhdGlvOmZ1bmN0aW9uKHQpe3RoaXMuYXNwZWN0WzBdPXQueCx0aGlzLmFzcGVjdFsxXT10LnksdGhpcy5hc3BlY3RbMl09dC56LHo9ITB9LHNldEJvdW5kczpmdW5jdGlvbih0LGUpe3RoaXMuYm91bmRzWzBdW3RdPWUubWluLHRoaXMuYm91bmRzWzFdW3RdPWUubWF4fSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKHQpe3RoaXMuY2xlYXJDb2xvcj10fSxjbGVhclJHQkE6ZnVuY3Rpb24oKXt0aGlzLmdsLmNsZWFyQ29sb3IodGhpcy5jbGVhckNvbG9yWzBdLHRoaXMuY2xlYXJDb2xvclsxXSx0aGlzLmNsZWFyQ29sb3JbMl0sdGhpcy5jbGVhckNvbG9yWzNdKSx0aGlzLmdsLmNsZWFyKHRoaXMuZ2wuQ09MT1JfQlVGRkVSX0JJVHx0aGlzLmdsLkRFUFRIX0JVRkZFUl9CSVQpfX0saj1bci5kcmF3aW5nQnVmZmVyV2lkdGgvTi5waXhlbFJhdGlvfDAsci5kcmF3aW5nQnVmZmVySGVpZ2h0L04ucGl4ZWxSYXRpb3wwXTtmdW5jdGlvbiBVKCl7aWYoIU4uX3N0b3BwZWQmJk4uYXV0b1Jlc2l6ZSl7dmFyIHQ9ZS5wYXJlbnROb2RlLHI9MSxuPTE7dCYmdCE9PWRvY3VtZW50LmJvZHk/KHI9dC5jbGllbnRXaWR0aCxuPXQuY2xpZW50SGVpZ2h0KToocj13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodCk7dmFyIGk9MHxNYXRoLmNlaWwocipOLnBpeGVsUmF0aW8pLGE9MHxNYXRoLmNlaWwobipOLnBpeGVsUmF0aW8pO2lmKGkhPT1lLndpZHRofHxhIT09ZS5oZWlnaHQpe2Uud2lkdGg9aSxlLmhlaWdodD1hO3ZhciBvPWUuc3R5bGU7by5wb3NpdGlvbj1vLnBvc2l0aW9ufHwiYWJzb2x1dGUiLG8ubGVmdD0iMHB4IixvLnRvcD0iMHB4IixvLndpZHRoPXIrInB4IixvLmhlaWdodD1uKyJweCIsST0hMH19fU4uYXV0b1Jlc2l6ZSYmVSgpO2Z1bmN0aW9uIFYoKXtmb3IodmFyIHQ9RS5sZW5ndGgsZT1QLmxlbmd0aCxuPTA7bjxlOysrbilMW25dPTA7dDpmb3Iobj0wO248dDsrK24pe3ZhciBpPUVbbl0sYT1pLnBpY2tTbG90cztpZihhKXtmb3IodmFyIG89MDtvPGU7KytvKWlmKExbb10rYTwyNTUpe0Nbbl09byxpLnNldFBpY2tCYXNlKExbb10rMSksTFtvXSs9YTtjb250aW51ZSB0fXZhciBsPXMocixGKTtDW25dPWUsUC5wdXNoKGwpLEwucHVzaChhKSxpLnNldFBpY2tCYXNlKDEpLGUrPTF9ZWxzZSBDW25dPS0xfWZvcig7ZT4wJiYwPT09TFtlLTFdOylMLnBvcCgpLFAucG9wKCkuZGlzcG9zZSgpfWZ1bmN0aW9uIHEoKXtpZihOLmNvbnRleHRMb3N0KXJldHVybiEwO3IuaXNDb250ZXh0TG9zdCgpJiYoTi5jb250ZXh0TG9zdD0hMCxOLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSxOLnNlbGVjdGlvbi5vYmplY3Q9bnVsbCxOLm9uY29udGV4dGxvc3MmJk4ub25jb250ZXh0bG9zcygpKX13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixVKSxOLnVwZGF0ZT1mdW5jdGlvbih0KXtOLl9zdG9wcGVkfHwodD10fHx7fSxJPSEwLHo9ITApfSxOLmFkZD1mdW5jdGlvbih0KXtOLl9zdG9wcGVkfHwodC5heGVzPU0sRS5wdXNoKHQpLEMucHVzaCgtMSksST0hMCx6PSEwLFYoKSl9LE4ucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKCFOLl9zdG9wcGVkKXt2YXIgZT1FLmluZGV4T2YodCk7ZTwwfHwoRS5zcGxpY2UoZSwxKSxDLnBvcCgpLEk9ITAsej0hMCxWKCkpfX0sTi5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoIU4uX3N0b3BwZWQmJihOLl9zdG9wcGVkPSEwLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLFUpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIscSksTi5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsIU4uY29udGV4dExvc3QpKXtNLmRpc3Bvc2UoKSxTLmRpc3Bvc2UoKTtmb3IodmFyIHQ9MDt0PEUubGVuZ3RoOysrdClFW3RdLmRpc3Bvc2UoKTtiLmRpc3Bvc2UoKTtmb3IodD0wO3Q8UC5sZW5ndGg7Kyt0KVBbdF0uZGlzcG9zZSgpO18uZGlzcG9zZSgpLHI9bnVsbCxNPW51bGwsUz1udWxsLEU9W119fSxOLl9tb3VzZVJvdGF0aW5nPSExLE4uX3ByZXZCdXR0b25zPTAsTi5lbmFibGVNb3VzZUxpc3RlbmVycz1mdW5jdGlvbigpe04ubW91c2VMaXN0ZW5lcj11KGUsKGZ1bmN0aW9uKHQsZSxyKXtpZighTi5fc3RvcHBlZCl7dmFyIG49UC5sZW5ndGgsaT1FLmxlbmd0aCxhPXgub2JqZWN0O3guZGlzdGFuY2U9MS8wLHgubW91c2VbMF09ZSx4Lm1vdXNlWzFdPXIseC5vYmplY3Q9bnVsbCx4LnNjcmVlbj1udWxsLHguZGF0YUNvb3JkaW5hdGU9eC5kYXRhUG9zaXRpb249bnVsbDt2YXIgbz0hMTtpZih0JiZOLl9wcmV2QnV0dG9ucylOLl9tb3VzZVJvdGF0aW5nPSEwO2Vsc2V7Ti5fbW91c2VSb3RhdGluZyYmKHo9ITApLE4uX21vdXNlUm90YXRpbmc9ITE7Zm9yKHZhciBzPTA7czxuOysrcyl7dmFyIGw9UFtzXS5xdWVyeShlLGpbMV0tci0xLE4ucGlja1JhZGl1cyk7aWYobCl7aWYobC5kaXN0YW5jZT54LmRpc3RhbmNlKWNvbnRpbnVlO2Zvcih2YXIgYz0wO2M8aTsrK2Mpe3ZhciB1PUVbY107aWYoQ1tjXT09PXMpe3ZhciBoPXUucGljayhsKTtoJiYoeC5idXR0b25zPXQseC5zY3JlZW49bC5jb29yZCx4LmRpc3RhbmNlPWwuZGlzdGFuY2UseC5vYmplY3Q9dSx4LmluZGV4PWguZGlzdGFuY2UseC5kYXRhUG9zaXRpb249aC5wb3NpdGlvbix4LmRhdGFDb29yZGluYXRlPWguZGF0YUNvb3JkaW5hdGUseC5kYXRhPWgsbz0hMCl9fX19fWEmJmEhPT14Lm9iamVjdCYmKGEuaGlnaGxpZ2h0JiZhLmhpZ2hsaWdodChudWxsKSxJPSEwKSx4Lm9iamVjdCYmKHgub2JqZWN0LmhpZ2hsaWdodCYmeC5vYmplY3QuaGlnaGxpZ2h0KHguZGF0YSksST0hMCksKG89b3x8eC5vYmplY3QhPT1hKSYmTi5vbnNlbGVjdCYmTi5vbnNlbGVjdCh4KSwxJnQmJiEoMSZOLl9wcmV2QnV0dG9ucykmJk4ub25jbGljayYmTi5vbmNsaWNrKHgpLE4uX3ByZXZCdXR0b25zPXR9fSkpfSxlLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHEpO3ZhciBIPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLEc9W0hbMF0uc2xpY2UoKSxIWzFdLnNsaWNlKCldO2Z1bmN0aW9uIFkoKXtpZighcSgpKXtVKCk7dmFyIHQ9Ti5jYW1lcmEudGljaygpO1Iudmlldz1OLmNhbWVyYS5tYXRyaXgsST1JfHx0LHo9enx8dCxNLnBpeGVsUmF0aW89Ti5waXhlbFJhdGlvLFMucGl4ZWxSYXRpbz1OLnBpeGVsUmF0aW87dmFyIGU9RS5sZW5ndGgsbj1IWzBdLGk9SFsxXTtuWzBdPW5bMV09blsyXT0xLzAsaVswXT1pWzFdPWlbMl09LTEvMDtmb3IodmFyIG89MDtvPGU7KytvKXsoTD1FW29dKS5waXhlbFJhdGlvPU4ucGl4ZWxSYXRpbyxMLmF4ZXM9Ti5heGVzLEk9SXx8ISFMLmRpcnR5LHo9enx8ISFMLmRpcnR5O3ZhciBzPUwuYm91bmRzO2lmKHMpZm9yKHZhciBsPXNbMF0sdT1zWzFdLHA9MDtwPDM7KytwKW5bcF09TWF0aC5taW4obltwXSxsW3BdKSxpW3BdPU1hdGgubWF4KGlbcF0sdVtwXSl9dmFyIGQ9Ti5ib3VuZHM7aWYoTi5hdXRvQm91bmRzKWZvcihwPTA7cDwzOysrcCl7aWYoaVtwXTxuW3BdKW5bcF09LTEsaVtwXT0xO2Vsc2V7bltwXT09PWlbcF0mJihuW3BdLT0xLGlbcF0rPTEpO3ZhciBnPS4wNSooaVtwXS1uW3BdKTtuW3BdPW5bcF0tZyxpW3BdPWlbcF0rZ31kWzBdW3BdPW5bcF0sZFsxXVtwXT1pW3BdfXZhciB2PSExO2ZvcihwPTA7cDwzOysrcCl2PXZ8fEdbMF1bcF0hPT1kWzBdW3BdfHxHWzFdW3BdIT09ZFsxXVtwXSxHWzBdW3BdPWRbMF1bcF0sR1sxXVtwXT1kWzFdW3BdO2lmKHo9enx8dixJPUl8fHYpe2lmKHYpe3ZhciB5PVswLDAsMF07Zm9yKG89MDtvPDM7KytvKXlbb109bSgoZFsxXVtvXS1kWzBdW29dKS8xMCk7TS5hdXRvVGlja3M/TS51cGRhdGUoe2JvdW5kczpkLHRpY2tTcGFjaW5nOnl9KTpNLnVwZGF0ZSh7Ym91bmRzOmR9KX12YXIgVD1yLmRyYXdpbmdCdWZmZXJXaWR0aCxrPXIuZHJhd2luZ0J1ZmZlckhlaWdodDtGWzBdPVQsRlsxXT1rLGpbMF09MHxNYXRoLm1heChUL04ucGl4ZWxSYXRpbywxKSxqWzFdPTB8TWF0aC5tYXgoay9OLnBpeGVsUmF0aW8sMSksZnVuY3Rpb24odCxlKXt2YXIgcj10LmJvdW5kcyxuPXQuY2FtZXJhUGFyYW1zLGk9bi5wcm9qZWN0aW9uLGE9bi5tb2RlbCxvPXQuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHM9dC5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LGw9dC56TmVhcixjPXQuekZhcix1PXQuZm92eSxwPW8vcztlPyhmKGksLXAscCwtMSwxLGwsYyksbi5fb3J0aG89ITApOihoKGksdSxwLGwsYyksbi5fb3J0aG89ITEpO2Zvcih2YXIgZD0wO2Q8MTY7KytkKWFbZF09MDthWzE1XT0xO3ZhciBnPTA7Zm9yKGQ9MDtkPDM7KytkKWc9TWF0aC5tYXgoZyxyWzFdW2RdLXJbMF1bZF0pO2ZvcihkPTA7ZDwzOysrZCl0LmF1dG9TY2FsZT9hWzUqZF09dC5hc3BlY3RbZF0vKHJbMV1bZF0tclswXVtkXSk6YVs1KmRdPTEvZyx0LmF1dG9DZW50ZXImJihhWzEyK2RdPS41Ki1hWzUqZF0qKHJbMF1bZF0rclsxXVtkXSkpfShOLHcpO2ZvcihvPTA7bzxlOysrbyl7KEw9RVtvXSkuYXhlc0JvdW5kcz1kLE4uY2xpcFRvQm91bmRzJiYoTC5jbGlwQm91bmRzPWQpfXgub2JqZWN0JiYoTi5zbmFwVG9EYXRhP1MucG9zaXRpb249eC5kYXRhQ29vcmRpbmF0ZTpTLnBvc2l0aW9uPXguZGF0YVBvc2l0aW9uLFMuYm91bmRzPWQpLHomJih6PSExLGZ1bmN0aW9uKCl7aWYoIXEoKSl7ci5jb2xvck1hc2soITAsITAsITAsITApLHIuZGVwdGhNYXNrKCEwKSxyLmRpc2FibGUoci5CTEVORCksci5lbmFibGUoci5ERVBUSF9URVNUKSxyLmRlcHRoRnVuYyhyLkxFUVVBTCk7Zm9yKHZhciB0PUUubGVuZ3RoLGU9UC5sZW5ndGgsbj0wO248ZTsrK24pe3ZhciBpPVBbbl07aS5zaGFwZT1qLGkuYmVnaW4oKTtmb3IodmFyIGE9MDthPHQ7KythKWlmKENbYV09PT1uKXt2YXIgbz1FW2FdO28uZHJhd1BpY2smJihvLnBpeGVsUmF0aW89MSxvLmRyYXdQaWNrKFIpKX1pLmVuZCgpfX19KCkpLE4uYXhlc1BpeGVscz1hKE4uYXhlcyxSLFQsayksTi5vbnJlbmRlciYmTi5vbnJlbmRlcigpLHIuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbnVsbCksci52aWV3cG9ydCgwLDAsVCxrKSxOLmNsZWFyUkdCQSgpLHIuZGVwdGhNYXNrKCEwKSxyLmNvbG9yTWFzayghMCwhMCwhMCwhMCksci5lbmFibGUoci5ERVBUSF9URVNUKSxyLmRlcHRoRnVuYyhyLkxFUVVBTCksci5kaXNhYmxlKHIuQkxFTkQpLHIuZGlzYWJsZShyLkNVTExfRkFDRSk7dmFyIEE9ITE7TS5lbmFibGUmJihBPUF8fE0uaXNUcmFuc3BhcmVudCgpLE0uZHJhdyhSKSksUy5heGVzPU0seC5vYmplY3QmJlMuZHJhdyhSKSxyLmRpc2FibGUoci5DVUxMX0ZBQ0UpO2ZvcihvPTA7bzxlOysrbyl7KEw9RVtvXSkuYXhlcz1NLEwucGl4ZWxSYXRpbz1OLnBpeGVsUmF0aW8sTC5pc09wYXF1ZSYmTC5pc09wYXF1ZSgpJiZMLmRyYXcoUiksTC5pc1RyYW5zcGFyZW50JiZMLmlzVHJhbnNwYXJlbnQoKSYmKEE9ITApfWlmKEEpe2Iuc2hhcGU9RixiLmJpbmQoKSxyLmNsZWFyKHIuREVQVEhfQlVGRkVSX0JJVCksci5jb2xvck1hc2soITEsITEsITEsITEpLHIuZGVwdGhNYXNrKCEwKSxyLmRlcHRoRnVuYyhyLkxFU1MpLE0uZW5hYmxlJiZNLmlzVHJhbnNwYXJlbnQoKSYmTS5kcmF3VHJhbnNwYXJlbnQoUik7Zm9yKG89MDtvPGU7KytvKXsoTD1FW29dKS5pc09wYXF1ZSYmTC5pc09wYXF1ZSgpJiZMLmRyYXcoUil9ci5lbmFibGUoci5CTEVORCksci5ibGVuZEVxdWF0aW9uKHIuRlVOQ19BREQpLHIuYmxlbmRGdW5jKHIuT05FLHIuT05FX01JTlVTX1NSQ19BTFBIQSksci5jb2xvck1hc2soITAsITAsITAsITApLHIuZGVwdGhNYXNrKCExKSxyLmNsZWFyQ29sb3IoMCwwLDAsMCksci5jbGVhcihyLkNPTE9SX0JVRkZFUl9CSVQpLE0uaXNUcmFuc3BhcmVudCgpJiZNLmRyYXdUcmFuc3BhcmVudChSKTtmb3Iobz0wO288ZTsrK28pe3ZhciBMOyhMPUVbb10pLmlzVHJhbnNwYXJlbnQmJkwuaXNUcmFuc3BhcmVudCgpJiZMLmRyYXdUcmFuc3BhcmVudChSKX1yLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG51bGwpLHIuYmxlbmRGdW5jKHIuT05FLHIuT05FX01JTlVTX1NSQ19BTFBIQSksci5kaXNhYmxlKHIuREVQVEhfVEVTVCksXy5iaW5kKCksYi5jb2xvclswXS5iaW5kKDApLF8udW5pZm9ybXMuYWNjdW1CdWZmZXI9MCxjKHIpLHIuZGlzYWJsZShyLkJMRU5EKX1JPSExO2ZvcihvPTA7bzxlOysrbylFW29dLmRpcnR5PSExfX19cmV0dXJuIE4uZW5hYmxlTW91c2VMaXN0ZW5lcnMoKSxmdW5jdGlvbiB0KCl7aWYoTi5fc3RvcHBlZHx8Ti5jb250ZXh0TG9zdClyZXR1cm47WSgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX0oKSxOLnJlZHJhdz1mdW5jdGlvbigpe04uX3N0b3BwZWR8fChJPSEwLFkoKSl9LE59LGNyZWF0ZUNhbWVyYTpufX0seyIuL2NhbWVyYS5qcyI6Mjk5LCIuL2xpYi9zaGFkZXIiOjMwMCwiYS1iaWctdHJpYW5nbGUiOjY0LCJnbC1heGVzM2QiOjI1MCwiZ2wtYXhlczNkL3Byb3BlcnRpZXMiOjI1NywiZ2wtZmJvIjoyNjYsImdsLW1hdDQvb3J0aG8iOjI4MSwiZ2wtbWF0NC9wZXJzcGVjdGl2ZSI6MjgyLCJnbC1zZWxlY3Qtc3RhdGljIjozMTEsImdsLXNwaWtlczNkIjozMjEsImlzLW1vYmlsZSI6NDQxLCJtb3VzZS1jaGFuZ2UiOjQ1N31dLDMwMjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKTtyLnBvaW50VmVydGV4PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDMgbWF0cml4O1xudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XG51bmlmb3JtIGZsb2F0IHBvaW50Q2xvdWQ7XG5cbmhpZ2hwIGZsb2F0IHJhbmQodmVjMiBjbykge1xuICBoaWdocCBmbG9hdCBhID0gMTIuOTg5ODtcbiAgaGlnaHAgZmxvYXQgYiA9IDc4LjIzMztcbiAgaGlnaHAgZmxvYXQgYyA9IDQzNzU4LjU0NTM7XG4gIGhpZ2hwIGZsb2F0IGQgPSBkb3QoY28ueHksIHZlYzIoYSwgYikpO1xuICBoaWdocCBmbG9hdCBlID0gbW9kKGQsIDMuMTQpO1xuICByZXR1cm4gZnJhY3Qoc2luKGUpICogYyk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcbiAgICAvLyBpZiB3ZSBkb24ndCBqaXR0ZXIgdGhlIHBvaW50IHNpemUgYSBiaXQsIG92ZXJhbGwgcG9pbnQgY2xvdWRcbiAgICAvLyBzYXR1cmF0aW9uICdqdW1wcycgb24gem9vbWluZywgd2hpY2ggaXMgZGlzdHVyYmluZyBhbmQgY29uZnVzaW5nXG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZSAqICgoMTkuNSArIHJhbmQocG9zaXRpb24pKSAvIDIwLjApO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIC8vIGdldCB0aGUgc2FtZSBzcXVhcmUgc3VyZmFjZSBhcyBjaXJjbGUgd291bGQgYmVcbiAgICBnbF9Qb2ludFNpemUgKj0gMC44ODY7XG4gIH1cbn0iXSksci5wb2ludEZyYWdtZW50PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvciwgYm9yZGVyQ29sb3I7XG51bmlmb3JtIGZsb2F0IGNlbnRlckZyYWN0aW9uO1xudW5pZm9ybSBmbG9hdCBwb2ludENsb3VkO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IHJhZGl1cztcbiAgdmVjNCBiYXNlQ29sb3I7XG4gIGlmKHBvaW50Q2xvdWQgIT0gMC4wKSB7IC8vIHBvaW50Q2xvdWQgaXMgdHJ1dGh5XG4gICAgaWYoY2VudGVyRnJhY3Rpb24gPT0gMS4wKSB7XG4gICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGJvcmRlckNvbG9yLCBjb2xvciwgY2VudGVyRnJhY3Rpb24pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG4gICAgaWYocmFkaXVzID4gMS4wKSB7XG4gICAgICBkaXNjYXJkO1xuICAgIH1cbiAgICBiYXNlQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBzdGVwKHJhZGl1cywgY2VudGVyRnJhY3Rpb24pKTtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2VDb2xvci5yZ2IgKiBiYXNlQ29sb3IuYSwgYmFzZUNvbG9yLmEpO1xuICB9XG59XG4iXSksci5waWNrVmVydGV4PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xuXG51bmlmb3JtIG1hdDMgbWF0cml4O1xudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGhnUG9zaXRpb24gPSBtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxKTtcbiAgZ2xfUG9zaXRpb24gID0gdmVjNChoZ1Bvc2l0aW9uLnh5LCAwLCBoZ1Bvc2l0aW9uLnopO1xuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XG5cbiAgdmVjNCBpZCA9IHBpY2tJZCArIHBpY2tPZmZzZXQ7XG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdJZCA9IGlkO1xufVxuIl0pLHIucGlja0ZyYWdtZW50PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICBpZihyYWRpdXMgPiAxLjApIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdJZCAvIDI1NS4wO1xufVxuIl0pfSx7Z2xzbGlmeTo0MTN9XSwzMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoInR5cGVkYXJyYXktcG9vbCIpLG89dCgiLi9saWIvc2hhZGVyIik7ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMucGxvdD10LHRoaXMub2Zmc2V0QnVmZmVyPWUsdGhpcy5waWNrQnVmZmVyPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpY2tTaGFkZXI9aSx0aGlzLnNpemVNaW49LjUsdGhpcy5zaXplTWluQ2FwPTIsdGhpcy5zaXplTWF4PTIwLHRoaXMuYXJlYVJhdGlvPTEsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb2xvcj1bMSwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5ibGVuZD0hMSx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLnBvaW50cz1udWxsfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsYT1pKHIpLGw9aShyKSxjPW4ocixvLnBvaW50VmVydGV4LG8ucG9pbnRGcmFnbWVudCksdT1uKHIsby5waWNrVmVydGV4LG8ucGlja0ZyYWdtZW50KSxoPW5ldyBzKHQsYSxsLGMsdSk7cmV0dXJuIGgudXBkYXRlKGUpLHQuYWRkT2JqZWN0KGgpLGh9O3ZhciBsLGMsdT1zLnByb3RvdHlwZTt1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9mZnNldEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5waWNrQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZTtmdW5jdGlvbiByKGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9dD10fHx7fSx0aGlzLnNpemVNaW49cigic2l6ZU1pbiIsLjUpLHRoaXMuc2l6ZU1heD1yKCJzaXplTWF4IiwyMCksdGhpcy5jb2xvcj1yKCJjb2xvciIsWzEsMCwwLDFdKS5zbGljZSgpLHRoaXMuYXJlYVJhdGlvPXIoImFyZWFSYXRpbyIsMSksdGhpcy5ib3JkZXJDb2xvcj1yKCJib3JkZXJDb2xvciIsWzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYmxlbmQ9cigiYmxlbmQiLCExKTt2YXIgbj10LnBvc2l0aW9ucy5sZW5ndGg+Pj4xLGk9dC5wb3NpdGlvbnMgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXksbz10LmlkVG9JbmRleCBpbnN0YW5jZW9mIEludDMyQXJyYXkmJnQuaWRUb0luZGV4Lmxlbmd0aD49bixzPXQucG9zaXRpb25zLGw9aT9zOmEubWFsbG9jRmxvYXQzMihzLmxlbmd0aCksYz1vP3QuaWRUb0luZGV4OmEubWFsbG9jSW50MzIobik7aWYoaXx8bC5zZXQocyksIW8pZm9yKGwuc2V0KHMpLGU9MDtlPG47ZSsrKWNbZV09ZTt0aGlzLnBvaW50cz1zLHRoaXMub2Zmc2V0QnVmZmVyLnVwZGF0ZShsKSx0aGlzLnBpY2tCdWZmZXIudXBkYXRlKGMpLGl8fGEuZnJlZShsKSxvfHxhLmZyZWUoYyksdGhpcy5wb2ludENvdW50PW4sdGhpcy5waWNrT2Zmc2V0PTB9LHUudW5pZmllZERyYXc9KGw9WzEsMCwwLDAsMSwwLDAsMCwxXSxjPVswLDAsMCwwXSxmdW5jdGlvbih0KXt2YXIgZT12b2lkIDAhPT10LHI9ZT90aGlzLnBpY2tTaGFkZXI6dGhpcy5zaGFkZXIsbj10aGlzLnBsb3QuZ2wsaT10aGlzLnBsb3QuZGF0YUJveDtpZigwPT09dGhpcy5wb2ludENvdW50KXJldHVybiB0O3ZhciBhPWlbMl0taVswXSxvPWlbM10taVsxXSxzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGg+Pj4xO2ZvcihyPTA7cjxpO3IrKyl7dmFyIGE9dFsyKnJdLG89dFsyKnIrMV07YT49ZVswXSYmYTw9ZVsyXSYmbz49ZVsxXSYmbzw9ZVszXSYmbisrfXJldHVybiBufSh0aGlzLnBvaW50cyxpKSx1PXRoaXMucGxvdC5waWNrUGl4ZWxSYXRpbypNYXRoLm1heChNYXRoLm1pbih0aGlzLnNpemVNaW5DYXAsdGhpcy5zaXplTWluKSxNYXRoLm1pbih0aGlzLnNpemVNYXgsdGhpcy5zaXplTWF4L01hdGgucG93KHMsLjMzMzMzKSkpO2xbMF09Mi9hLGxbNF09Mi9vLGxbNl09LTIqaVswXS9hLTEsbFs3XT0tMippWzFdL28tMSx0aGlzLm9mZnNldEJ1ZmZlci5iaW5kKCksci5iaW5kKCksci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnBvaW50ZXIoKSxyLnVuaWZvcm1zLm1hdHJpeD1sLHIudW5pZm9ybXMuY29sb3I9dGhpcy5jb2xvcixyLnVuaWZvcm1zLmJvcmRlckNvbG9yPXRoaXMuYm9yZGVyQ29sb3Isci51bmlmb3Jtcy5wb2ludENsb3VkPXU8NSxyLnVuaWZvcm1zLnBvaW50U2l6ZT11LHIudW5pZm9ybXMuY2VudGVyRnJhY3Rpb249TWF0aC5taW4oMSxNYXRoLm1heCgwLE1hdGguc3FydCgxLXRoaXMuYXJlYVJhdGlvKSkpLGUmJihjWzBdPTI1NSZ0LGNbMV09dD4+OCYyNTUsY1syXT10Pj4xNiYyNTUsY1szXT10Pj4yNCYyNTUsdGhpcy5waWNrQnVmZmVyLmJpbmQoKSxyLmF0dHJpYnV0ZXMucGlja0lkLnBvaW50ZXIobi5VTlNJR05FRF9CWVRFKSxyLnVuaWZvcm1zLnBpY2tPZmZzZXQ9Yyx0aGlzLnBpY2tPZmZzZXQ9dCk7dmFyIGg9bi5nZXRQYXJhbWV0ZXIobi5CTEVORCksZj1uLmdldFBhcmFtZXRlcihuLkRJVEhFUik7cmV0dXJuIGgmJiF0aGlzLmJsZW5kJiZuLmRpc2FibGUobi5CTEVORCksZiYmbi5kaXNhYmxlKG4uRElUSEVSKSxuLmRyYXdBcnJheXMobi5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLGgmJiF0aGlzLmJsZW5kJiZuLmVuYWJsZShuLkJMRU5EKSxmJiZuLmVuYWJsZShuLkRJVEhFUiksdCt0aGlzLnBvaW50Q291bnR9KSx1LmRyYXc9dS51bmlmaWVkRHJhdyx1LmRyYXdQaWNrPXUudW5pZmllZERyYXcsdS5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnBvaW50Q291bnQ7aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy5wb2ludHM7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bMiphXSxvWzIqYSsxXV19fX0seyIuL2xpYi9zaGFkZXIiOjMwMiwiZ2wtYnVmZmVyIjoyNTgsImdsLXNoYWRlciI6MzEyLCJ0eXBlZGFycmF5LXBvb2wiOjU2N31dLDMwNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGM9ZVswXSx1PWVbMV0saD1lWzJdLGY9ZVszXSxwPXJbMF0sZD1yWzFdLGc9clsyXSxtPXJbM107KGE9YypwK3UqZCtoKmcrZiptKTwwJiYoYT0tYSxwPS1wLGQ9LWQsZz0tZyxtPS1tKTsxLWE+MWUtNj8oaT1NYXRoLmFjb3MoYSksbz1NYXRoLnNpbihpKSxzPU1hdGguc2luKCgxLW4pKmkpL28sbD1NYXRoLnNpbihuKmkpL28pOihzPTEtbixsPW4pO3JldHVybiB0WzBdPXMqYytsKnAsdFsxXT1zKnUrbCpkLHRbMl09cypoK2wqZyx0WzNdPXMqZitsKm0sdH19LHt9XSwzMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dD90LnRvU3RyaW5nKCk6IiJ9fSx7fV0sMzA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInZlY3Rvcml6ZS10ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1pW2VdO2F8fChhPWlbZV09e30pO2lmKHQgaW4gYSlyZXR1cm4gYVt0XTt2YXIgbz17dGV4dEFsaWduOiJjZW50ZXIiLHRleHRCYXNlbGluZToibWlkZGxlIixsaW5lSGVpZ2h0OjEsZm9udDplLGxpbmVTcGFjaW5nOjEuMjUsc3R5bGV0YWdzOnticmVha2xpbmVzOiEwLGJvbGRzOiEwLGl0YWxpY3M6ITAsc3Vic2NyaXB0czohMCxzdXBlcnNjcmlwdHM6ITB9LHRyaWFuZ2xlczohMH0scz1uKHQsbyk7by50cmlhbmdsZXM9ITE7dmFyIGwsYyx1PW4odCxvKTtpZihyJiYxIT09cil7Zm9yKGw9MDtsPHMucG9zaXRpb25zLmxlbmd0aDsrK2wpZm9yKGM9MDtjPHMucG9zaXRpb25zW2xdLmxlbmd0aDsrK2Mpcy5wb3NpdGlvbnNbbF1bY10vPXI7Zm9yKGw9MDtsPHUucG9zaXRpb25zLmxlbmd0aDsrK2wpZm9yKGM9MDtjPHUucG9zaXRpb25zW2xdLmxlbmd0aDsrK2MpdS5wb3NpdGlvbnNbbF1bY10vPXJ9dmFyIGg9W1sxLzAsMS8wXSxbLTEvMCwtMS8wXV0sZj11LnBvc2l0aW9ucy5sZW5ndGg7Zm9yKGw9MDtsPGY7KytsKXt2YXIgcD11LnBvc2l0aW9uc1tsXTtmb3IoYz0wO2M8MjsrK2MpaFswXVtjXT1NYXRoLm1pbihoWzBdW2NdLHBbY10pLGhbMV1bY109TWF0aC5tYXgoaFsxXVtjXSxwW2NdKX1yZXR1cm4gYVt0XT1bcyx1LGhdfTt2YXIgaT17fX0seyJ2ZWN0b3JpemUtdGV4dCI6NTcyfV0sMzA3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbHNsaWZ5IiksYT1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgc2NhbGUgPSAxLjA7XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xuICAgICAgc2NhbGUgPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEpO1xuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gICAgdmlld1Bvc2l0aW9uID0gdmlld1Bvc2l0aW9uIC8gdmlld1Bvc2l0aW9uLnc7XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogKHZpZXdQb3NpdGlvbiArIHNjYWxlICogdmVjNChnbHlwaC54LCAtZ2x5cGgueSwgMCwgMCkpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59Il0pLG89aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGUsIHBpeGVsUmF0aW87XG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgc2NhbGUgPSBwaXhlbFJhdGlvO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLmJnciwgaWQuYmdyKSA8IDAuMDAxKSB7XG4gICAgICBzY2FsZSAqPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3UG9zaXRpb247XG4gICAgY2xpcFBvc2l0aW9uIC89IGNsaXBQb3NpdGlvbi53O1xuXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb24gKyB2ZWM0KHNjcmVlblNpemUgKiBzY2FsZSAqIHZlYzIoZ2x5cGgueCwgLWdseXBoLnkpLCAwLjAsIDAuMCk7XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59Il0pLHM9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcbnVuaWZvcm0gdmVjMyBheGVzWzJdO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIHBpeGVsUmF0aW87XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgbHNjYWxlID0gcGl4ZWxSYXRpbyAqIHNjYWxlO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcbiAgICAgIGxzY2FsZSAqPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IGNsaXBDZW50ZXIgICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcbiAgICB2ZWMzIGRhdGFQb3NpdGlvbiA9IHBvc2l0aW9uICsgMC41KmxzY2FsZSooYXhlc1swXSAqIGdseXBoLnggKyBheGVzWzFdICogZ2x5cGgueSkgKiBjbGlwQ2VudGVyLncgKiBzY3JlZW5TaXplLnk7XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChkYXRhUG9zaXRpb24sIDEpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IGRhdGFQb3NpdGlvbjtcbiAgfVxufVxuIl0pLGw9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgZnJhZ0NsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZiAoXG4gICAgb3V0T2ZSYW5nZShmcmFnQ2xpcEJvdW5kc1swXSwgZnJhZ0NsaXBCb3VuZHNbMV0sIGRhdGFDb29yZGluYXRlKSB8fFxuICAgIGludGVycENvbG9yLmEgKiBvcGFjaXR5ID09IDAuXG4gICkgZGlzY2FyZDtcbiAgZ2xfRnJhZ0NvbG9yID0gaW50ZXJwQ29sb3IgKiBvcGFjaXR5O1xufVxuIl0pLGM9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgZnJhZ0NsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tHcm91cDtcblxudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShmcmFnQ2xpcEJvdW5kc1swXSwgZnJhZ0NsaXBCb3VuZHNbMV0sIGRhdGFDb29yZGluYXRlKSkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tHcm91cCwgcGlja0lkLmJncik7XG59Il0pLHU9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJnbHlwaCIsdHlwZToidmVjMiJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XSxoPXt2ZXJ0ZXg6YSxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0sZj17dmVydGV4Om8sZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LHA9e3ZlcnRleDpzLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxkPXt2ZXJ0ZXg6YSxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX0sZz17dmVydGV4Om8sZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9LG09e3ZlcnRleDpzLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fTtmdW5jdGlvbiB2KHQsZSl7dmFyIHI9bih0LGUpLGk9ci5hdHRyaWJ1dGVzO3JldHVybiBpLnBvc2l0aW9uLmxvY2F0aW9uPTAsaS5jb2xvci5sb2NhdGlvbj0xLGkuZ2x5cGgubG9jYXRpb249MixpLmlkLmxvY2F0aW9uPTMscn1yLmNyZWF0ZVBlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsaCl9LHIuY3JlYXRlT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxmKX0sci5jcmVhdGVQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB2KHQscCl9LHIuY3JlYXRlUGlja1BlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsZCl9LHIuY3JlYXRlUGlja09ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsZyl9LHIuY3JlYXRlUGlja1Byb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxtKX19LHsiZ2wtc2hhZGVyIjozMTIsZ2xzbGlmeTo0MTN9XSwzMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtc3RyaW5nLWJsYW5rIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgidHlwZWRhcnJheS1wb29sIikscz10KCJnbC1tYXQ0L211bHRpcGx5IiksbD10KCIuL2xpYi9zaGFkZXJzIiksYz10KCIuL2xpYi9nbHlwaHMiKSx1PXQoIi4vbGliL2dldC1zaW1wbGUtc3RyaW5nIiksaD1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gZih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPXRbM107cmV0dXJuIHRbMF09ZVswXSpyK2VbNF0qbitlWzhdKmkrZVsxMl0qYSx0WzFdPWVbMV0qcitlWzVdKm4rZVs5XSppK2VbMTNdKmEsdFsyXT1lWzJdKnIrZVs2XSpuK2VbMTBdKmkrZVsxNF0qYSx0WzNdPWVbM10qcitlWzddKm4rZVsxMV0qaStlWzE1XSphLHR9ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm4gZihuLG4pLGYobixuKSxmKG4sbil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMuaW5kZXg9dCx0aGlzLmRhdGFDb29yZGluYXRlPXRoaXMucG9zaXRpb249ZX1mdW5jdGlvbiBnKHQpe3JldHVybiEwPT09dHx8dD4xPzE6dH1mdW5jdGlvbiBtKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5zaGFkZXI9ZSx0aGlzLm9ydGhvU2hhZGVyPXIsdGhpcy5wcm9qZWN0U2hhZGVyPW4sdGhpcy5wb2ludEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9YSx0aGlzLmdseXBoQnVmZmVyPW8sdGhpcy5pZEJ1ZmZlcj1zLHRoaXMudmFvPWwsdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMubGluZVZlcnRleENvdW50PTAsdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMSx0aGlzLmxpbmVXaWR0aD0wLHRoaXMucHJvamVjdFNjYWxlPVsyLzMsMi8zLDIvM10sdGhpcy5wcm9qZWN0T3BhY2l0eT1bMSwxLDFdLHRoaXMucHJvamVjdEhhc0FscGhhPSExLHRoaXMucGlja0lkPTAsdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXI9Yyx0aGlzLnBpY2tPcnRob1NoYWRlcj11LHRoaXMucGlja1Byb2plY3RTaGFkZXI9aCx0aGlzLnBvaW50cz1bXSx0aGlzLl9zZWxlY3RSZXN1bHQ9bmV3IGQoMCxbMCwwLDBdKSx0aGlzLnVzZU9ydGhvPSEwLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuYXhlc1Byb2plY3Q9WyEwLCEwLCEwXSx0aGlzLmF4ZXNCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV0sdGhpcy5oaWdobGlnaHRTY2FsZT0yLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmRpcnR5PSEwfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bC5jcmVhdGVQZXJzcGVjdGl2ZShlKSxuPWwuY3JlYXRlT3J0aG8oZSksbz1sLmNyZWF0ZVByb2plY3QoZSkscz1sLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZShlKSxjPWwuY3JlYXRlUGlja09ydGhvKGUpLHU9bC5jcmVhdGVQaWNrUHJvamVjdChlKSxoPWkoZSksZj1pKGUpLHA9aShlKSxkPWkoZSksZz1hKGUsW3tidWZmZXI6aCxzaXplOjMsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmYsc2l6ZTo0LHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpwLHNpemU6Mix0eXBlOmUuRkxPQVR9LHtidWZmZXI6ZCxzaXplOjQsdHlwZTplLlVOU0lHTkVEX0JZVEUsbm9ybWFsaXplZDohMH1dKSx2PW5ldyBtKGUscixuLG8saCxmLHAsZCxnLHMsYyx1KTtyZXR1cm4gdi51cGRhdGUodCksdn07dmFyIHY9bS5wcm90b3R5cGU7di5waWNrU2xvdHM9MSx2LnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LHYuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe2lmKHRoaXMuaGFzQWxwaGEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLmF4ZXNQcm9qZWN0W3RdJiZ0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX0sdi5pc09wYXF1ZT1mdW5jdGlvbigpe2lmKCF0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmIXRoaXMucHJvamVjdEhhc0FscGhhKXJldHVybiEwO3JldHVybiExfTt2YXIgeT1bMCwwXSx4PVswLDAsMF0sYj1bMCwwLDBdLF89WzAsMCwwLDFdLHc9WzAsMCwwLDFdLFQ9aC5zbGljZSgpLGs9WzAsMCwwXSxNPVtbMCwwLDBdLFswLDAsMF1dO2Z1bmN0aW9uIEEodCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBTKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109MSx0fWZ1bmN0aW9uIEUodCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbcl09bix0fWZ1bmN0aW9uIEModCxlLHIsbil7dmFyIGksYT1lLmF4ZXNQcm9qZWN0LG89ZS5nbCxsPXQudW5pZm9ybXMsYz1yLm1vZGVsfHxoLHU9ci52aWV3fHxoLGY9ci5wcm9qZWN0aW9ufHxoLGQ9ZS5heGVzQm91bmRzLGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU0scj0wO3I8MjsrK3IpZm9yKHZhciBuPTA7bjwzOysrbillW3JdW25dPU1hdGgubWF4KE1hdGgubWluKHRbcl1bbl0sMWU4KSwtMWU4KTtyZXR1cm4gZX0oZS5jbGlwQm91bmRzKTtpPWUuYXhlcyYmZS5heGVzLmxhc3RDdWJlUHJvcHM/ZS5heGVzLmxhc3RDdWJlUHJvcHMuYXhpczpbMSwxLDFdLHlbMF09Mi9vLmRyYXdpbmdCdWZmZXJXaWR0aCx5WzFdPTIvby5kcmF3aW5nQnVmZmVySGVpZ2h0LHQuYmluZCgpLGwudmlldz11LGwucHJvamVjdGlvbj1mLGwuc2NyZWVuU2l6ZT15LGwuaGlnaGxpZ2h0SWQ9ZS5oaWdobGlnaHRJZCxsLmhpZ2hsaWdodFNjYWxlPWUuaGlnaGxpZ2h0U2NhbGUsbC5jbGlwQm91bmRzPWcsbC5waWNrR3JvdXA9ZS5waWNrSWQvMjU1LGwucGl4ZWxSYXRpbz1uO2Zvcih2YXIgbT0wO208MzsrK20paWYoYVttXSl7bC5zY2FsZT1lLnByb2plY3RTY2FsZVttXSxsLm9wYWNpdHk9ZS5wcm9qZWN0T3BhY2l0eVttXTtmb3IodmFyIHY9VCxDPTA7QzwxNjsrK0MpdltDXT0wO2ZvcihDPTA7Qzw0OysrQyl2WzUqQ109MTt2WzUqbV09MCxpW21dPDA/dlsxMittXT1kWzBdW21dOnZbMTIrbV09ZFsxXVttXSxzKHYsYyx2KSxsLm1vZGVsPXY7dmFyIEw9KG0rMSklMyxQPShtKzIpJTMsST1BKHgpLHo9QShiKTtJW0xdPTEseltQXT0xO3ZhciBPPXAoMCwwLDAsUyhfLEkpKSxEPXAoMCwwLDAsUyh3LHopKTtpZihNYXRoLmFicyhPWzFdKT5NYXRoLmFicyhEWzFdKSl7dmFyIFI9TztPPUQsRD1SLFI9SSxJPXosej1SO3ZhciBGPUw7TD1QLFA9Rn1PWzBdPDAmJihJW0xdPS0xKSxEWzFdPjAmJih6W1BdPS0xKTt2YXIgQj0wLE49MDtmb3IoQz0wO0M8NDsrK0MpQis9TWF0aC5wb3coY1s0KkwrQ10sMiksTis9TWF0aC5wb3coY1s0KlArQ10sMik7SVtMXS89TWF0aC5zcXJ0KEIpLHpbUF0vPU1hdGguc3FydChOKSxsLmF4ZXNbMF09SSxsLmF4ZXNbMV09eixsLmZyYWdDbGlwQm91bmRzWzBdPUUoayxnWzBdLG0sLTFlOCksbC5mcmFnQ2xpcEJvdW5kc1sxXT1FKGssZ1sxXSxtLDFlOCksZS52YW8uYmluZCgpLGUudmFvLmRyYXcoby5UUklBTkdMRVMsZS52ZXJ0ZXhDb3VudCksZS5saW5lV2lkdGg+MCYmKG8ubGluZVdpZHRoKGUubGluZVdpZHRoKm4pLGUudmFvLmRyYXcoby5MSU5FUyxlLmxpbmVWZXJ0ZXhDb3VudCxlLnZlcnRleENvdW50KSksZS52YW8udW5iaW5kKCl9fXZhciBMPVtbLTFlOCwtMWU4LC0xZThdLFsxZTgsMWU4LDFlOF1dO2Z1bmN0aW9uIFAodCxlLHIsbixpLGEsbyl7dmFyIHM9ci5nbDtpZigoYT09PXIucHJvamVjdEhhc0FscGhhfHxvKSYmQyhlLHIsbixpKSxhPT09ci5oYXNBbHBoYXx8byl7dC5iaW5kKCk7dmFyIGw9dC51bmlmb3JtcztsLm1vZGVsPW4ubW9kZWx8fGgsbC52aWV3PW4udmlld3x8aCxsLnByb2plY3Rpb249bi5wcm9qZWN0aW9ufHxoLHlbMF09Mi9zLmRyYXdpbmdCdWZmZXJXaWR0aCx5WzFdPTIvcy5kcmF3aW5nQnVmZmVySGVpZ2h0LGwuc2NyZWVuU2l6ZT15LGwuaGlnaGxpZ2h0SWQ9ci5oaWdobGlnaHRJZCxsLmhpZ2hsaWdodFNjYWxlPXIuaGlnaGxpZ2h0U2NhbGUsbC5mcmFnQ2xpcEJvdW5kcz1MLGwuY2xpcEJvdW5kcz1yLmF4ZXMuYm91bmRzLGwub3BhY2l0eT1yLm9wYWNpdHksbC5waWNrR3JvdXA9ci5waWNrSWQvMjU1LGwucGl4ZWxSYXRpbz1pLHIudmFvLmJpbmQoKSxyLnZhby5kcmF3KHMuVFJJQU5HTEVTLHIudmVydGV4Q291bnQpLHIubGluZVdpZHRoPjAmJihzLmxpbmVXaWR0aChyLmxpbmVXaWR0aCppKSxyLnZhby5kcmF3KHMuTElORVMsci5saW5lVmVydGV4Q291bnQsci52ZXJ0ZXhDb3VudCkpLHIudmFvLnVuYmluZCgpfX1mdW5jdGlvbiBJKHQsZSxyLGkpe3ZhciBhO2E9QXJyYXkuaXNBcnJheSh0KT9lPHQubGVuZ3RoP3RbZV06dm9pZCAwOnQsYT11KGEpO3ZhciBvPSEwO24oYSkmJihhPSJcdTI1YmMiLG89ITEpO3ZhciBzPWMoYSxyLGkpO3JldHVybnttZXNoOnNbMF0sbGluZXM6c1sxXSxib3VuZHM6c1syXSx2aXNpYmxlOm99fXYuZHJhdz1mdW5jdGlvbih0KXtQKHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMSwhMSl9LHYuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe1AodGhpcy51c2VPcnRobz90aGlzLm9ydGhvU2hhZGVyOnRoaXMuc2hhZGVyLHRoaXMucHJvamVjdFNoYWRlcix0aGlzLHQsdGhpcy5waXhlbFJhdGlvLCEwLCExKX0sdi5kcmF3UGljaz1mdW5jdGlvbih0KXtQKHRoaXMudXNlT3J0aG8/dGhpcy5waWNrT3J0aG9TaGFkZXI6dGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIsdGhpcy5waWNrUHJvamVjdFNoYWRlcix0aGlzLHQsMSwhMCwhMCl9LHYucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVsyXSsodC52YWx1ZVsxXTw8OCkrKHQudmFsdWVbMF08PDE2KTtpZihlPj10aGlzLnBvaW50Q291bnR8fGU8MClyZXR1cm4gbnVsbDt2YXIgcj10aGlzLnBvaW50c1tlXSxuPXRoaXMuX3NlbGVjdFJlc3VsdDtuLmluZGV4PWU7Zm9yKHZhciBpPTA7aTwzOysraSluLnBvc2l0aW9uW2ldPW4uZGF0YUNvb3JkaW5hdGVbaV09cltpXTtyZXR1cm4gbn0sdi5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9dC5pbmRleCxyPTI1NSZlLG49ZT4+OCYyNTUsaT1lPj4xNiYyNTU7dGhpcy5oaWdobGlnaHRJZD1bci8yNTUsbi8yNTUsaS8yNTUsMF19ZWxzZSB0aGlzLmhpZ2hsaWdodElkPVsxLDEsMSwxXX0sdi51cGRhdGU9ZnVuY3Rpb24odCl7aWYoInBlcnNwZWN0aXZlImluKHQ9dHx8e30pJiYodGhpcy51c2VPcnRobz0hdC5wZXJzcGVjdGl2ZSksIm9ydGhvZ3JhcGhpYyJpbiB0JiYodGhpcy51c2VPcnRobz0hIXQub3J0aG9ncmFwaGljKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksInByb2plY3QiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdCkpdGhpcy5heGVzUHJvamVjdD10LnByb2plY3Q7ZWxzZXt2YXIgZT0hIXQucHJvamVjdDt0aGlzLmF4ZXNQcm9qZWN0PVtlLGUsZV19aWYoInByb2plY3RTY2FsZSJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0U2NhbGUpKXRoaXMucHJvamVjdFNjYWxlPXQucHJvamVjdFNjYWxlLnNsaWNlKCk7ZWxzZXt2YXIgcj0rdC5wcm9qZWN0U2NhbGU7dGhpcy5wcm9qZWN0U2NhbGU9W3IscixyXX1pZih0aGlzLnByb2plY3RIYXNBbHBoYT0hMSwicHJvamVjdE9wYWNpdHkiaW4gdCl7aWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RPcGFjaXR5KSl0aGlzLnByb2plY3RPcGFjaXR5PXQucHJvamVjdE9wYWNpdHkuc2xpY2UoKTtlbHNle3I9K3QucHJvamVjdE9wYWNpdHk7dGhpcy5wcm9qZWN0T3BhY2l0eT1bcixyLHJdfWZvcih2YXIgbj0wO248MzsrK24pdGhpcy5wcm9qZWN0T3BhY2l0eVtuXT1nKHRoaXMucHJvamVjdE9wYWNpdHlbbl0pLHRoaXMucHJvamVjdE9wYWNpdHlbbl08MSYmKHRoaXMucHJvamVjdEhhc0FscGhhPSEwKX10aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9Zyh0Lm9wYWNpdHkpLHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLHRoaXMuZGlydHk9ITA7dmFyIGksYSxzPXQucG9zaXRpb24sbD10LmZvbnR8fCJub3JtYWwiLGM9dC5hbGlnbm1lbnR8fFswLDBdO2lmKDI9PT1jLmxlbmd0aClpPWNbMF0sYT1jWzFdO2Vsc2V7aT1bXSxhPVtdO2ZvcihuPTA7bjxjLmxlbmd0aDsrK24paVtuXT1jW25dWzBdLGFbbl09Y1tuXVsxXX12YXIgdT1bMS8wLDEvMCwxLzBdLGg9Wy0xLzAsLTEvMCwtMS8wXSxmPXQuZ2x5cGgscD10LmNvbG9yLGQ9dC5zaXplLG09dC5hbmdsZSx2PXQubGluZUNvbG9yLHk9LTEseD0wLGI9MCxfPTA7aWYocy5sZW5ndGgpe189cy5sZW5ndGg7dDpmb3Iobj0wO248XzsrK24pe2Zvcih2YXIgdz1zW25dLFQ9MDtUPDM7KytUKWlmKGlzTmFOKHdbVF0pfHwhaXNGaW5pdGUod1tUXSkpY29udGludWUgdDt2YXIgaz0oTj1JKGYsbixsLHRoaXMucGl4ZWxSYXRpbykpLm1lc2gsTT1OLmxpbmVzLEE9Ti5ib3VuZHM7eCs9MyprLmNlbGxzLmxlbmd0aCxiKz0yKk0uZWRnZXMubGVuZ3RofX12YXIgUz14K2IsRT1vLm1hbGxvY0Zsb2F0KDMqUyksQz1vLm1hbGxvY0Zsb2F0KDQqUyksTD1vLm1hbGxvY0Zsb2F0KDIqUyksUD1vLm1hbGxvY1VpbnQzMihTKTtpZihTPjApe3ZhciB6PTAsTz14LEQ9WzAsMCwwLDFdLFI9WzAsMCwwLDFdLEY9QXJyYXkuaXNBcnJheShwKSYmQXJyYXkuaXNBcnJheShwWzBdKSxCPUFycmF5LmlzQXJyYXkodikmJkFycmF5LmlzQXJyYXkodlswXSk7dDpmb3Iobj0wO248XzsrK24pe3krPTE7Zm9yKHc9c1tuXSxUPTA7VDwzOysrVCl7aWYoaXNOYU4od1tUXSl8fCFpc0Zpbml0ZSh3W1RdKSljb250aW51ZSB0O2hbVF09TWF0aC5tYXgoaFtUXSx3W1RdKSx1W1RdPU1hdGgubWluKHVbVF0sd1tUXSl9az0oTj1JKGYsbixsLHRoaXMucGl4ZWxSYXRpbykpLm1lc2gsTT1OLmxpbmVzLEE9Ti5ib3VuZHM7dmFyIE4saj1OLnZpc2libGU7aWYoailpZihBcnJheS5pc0FycmF5KHApKXtpZigzPT09KFU9Rj9uPHAubGVuZ3RoP3Bbbl06WzAsMCwwLDBdOnApLmxlbmd0aCl7Zm9yKFQ9MDtUPDM7KytUKURbVF09VVtUXTtEWzNdPTF9ZWxzZSBpZig0PT09VS5sZW5ndGgpe2ZvcihUPTA7VDw0OysrVClEW1RdPVVbVF07IXRoaXMuaGFzQWxwaGEmJlVbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApfX1lbHNlIERbMF09RFsxXT1EWzJdPTAsRFszXT0xO2Vsc2UgRD1bMSwxLDEsMF07aWYoailpZihBcnJheS5pc0FycmF5KHYpKXt2YXIgVTtpZigzPT09KFU9Qj9uPHYubGVuZ3RoP3Zbbl06WzAsMCwwLDBdOnYpLmxlbmd0aCl7Zm9yKFQ9MDtUPDM7KytUKVJbVF09VVtUXTtSW1RdPTF9ZWxzZSBpZig0PT09VS5sZW5ndGgpe2ZvcihUPTA7VDw0OysrVClSW1RdPVVbVF07IXRoaXMuaGFzQWxwaGEmJlVbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApfX1lbHNlIFJbMF09UlsxXT1SWzJdPTAsUlszXT0xO2Vsc2UgUj1bMSwxLDEsMF07dmFyIFY9LjU7aj9BcnJheS5pc0FycmF5KGQpP1Y9bjxkLmxlbmd0aD8rZFtuXToxMjpkP1Y9K2Q6dGhpcy51c2VPcnRobyYmKFY9MTIpOlY9MDt2YXIgcT0wO0FycmF5LmlzQXJyYXkobSk/cT1uPG0ubGVuZ3RoPyttW25dOjA6bSYmKHE9K20pO3ZhciBIPU1hdGguY29zKHEpLEc9TWF0aC5zaW4ocSk7Zm9yKHc9c1tuXSxUPTA7VDwzOysrVCloW1RdPU1hdGgubWF4KGhbVF0sd1tUXSksdVtUXT1NYXRoLm1pbih1W1RdLHdbVF0pO3ZhciBZPWksVz1hO1k9MDtBcnJheS5pc0FycmF5KGkpP1k9bjxpLmxlbmd0aD9pW25dOjA6aSYmKFk9aSk7Vz0wO0FycmF5LmlzQXJyYXkoYSk/Vz1uPGEubGVuZ3RoP2Fbbl06MDphJiYoVz1hKTt2YXIgWj1bWSo9WT4wPzEtQVswXVswXTpZPDA/MStBWzFdWzBdOjEsVyo9Vz4wPzEtQVswXVsxXTpXPDA/MStBWzFdWzFdOjFdLFg9ay5jZWxsc3x8W10sSj1rLnBvc2l0aW9uc3x8W107Zm9yKFQ9MDtUPFgubGVuZ3RoOysrVClmb3IodmFyIEs9WFtUXSxRPTA7UTwzOysrUSl7Zm9yKHZhciAkPTA7JDwzOysrJClFWzMqeiskXT13WyRdO2ZvcigkPTA7JDw0OysrJClDWzQqeiskXT1EWyRdO1Bbel09eTt2YXIgdHQ9SltLW1FdXTtMWzIqel09ViooSCp0dFswXS1HKnR0WzFdK1pbMF0pLExbMip6KzFdPVYqKEcqdHRbMF0rSCp0dFsxXStaWzFdKSx6Kz0xfWZvcihYPU0uZWRnZXMsSj1NLnBvc2l0aW9ucyxUPTA7VDxYLmxlbmd0aDsrK1QpZm9yKEs9WFtUXSxRPTA7UTwyOysrUSl7Zm9yKCQ9MDskPDM7KyskKUVbMypPKyRdPXdbJF07Zm9yKCQ9MDskPDQ7KyskKUNbNCpPKyRdPVJbJF07UFtPXT15O3R0PUpbS1tRXV07TFsyKk9dPVYqKEgqdHRbMF0tRyp0dFsxXStaWzBdKSxMWzIqTysxXT1WKihHKnR0WzBdK0gqdHRbMV0rWlsxXSksTys9MX19fXRoaXMuYm91bmRzPVt1LGhdLHRoaXMucG9pbnRzPXMsdGhpcy5wb2ludENvdW50PXMubGVuZ3RoLHRoaXMudmVydGV4Q291bnQ9eCx0aGlzLmxpbmVWZXJ0ZXhDb3VudD1iLHRoaXMucG9pbnRCdWZmZXIudXBkYXRlKEUpLHRoaXMuY29sb3JCdWZmZXIudXBkYXRlKEMpLHRoaXMuZ2x5cGhCdWZmZXIudXBkYXRlKEwpLHRoaXMuaWRCdWZmZXIudXBkYXRlKFApLG8uZnJlZShFKSxvLmZyZWUoQyksby5mcmVlKEwpLG8uZnJlZShQKX0sdi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMub3J0aG9TaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tPcnRob1NoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMucG9pbnRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuY29sb3JCdWZmZXIuZGlzcG9zZSgpLHRoaXMuZ2x5cGhCdWZmZXIuZGlzcG9zZSgpLHRoaXMuaWRCdWZmZXIuZGlzcG9zZSgpfX0seyIuL2xpYi9nZXQtc2ltcGxlLXN0cmluZyI6MzA1LCIuL2xpYi9nbHlwaHMiOjMwNiwiLi9saWIvc2hhZGVycyI6MzA3LCJnbC1idWZmZXIiOjI1OCwiZ2wtbWF0NC9tdWx0aXBseSI6MjgwLCJnbC12YW8iOjMzMiwiaXMtc3RyaW5nLWJsYW5rIjo0NDQsInR5cGVkYXJyYXktcG9vbCI6NTY3fV0sMzA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKTtyLmJveFZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiB2ZXJ0ZXg7XG5cbnVuaWZvcm0gdmVjMiBjb3JuZXJBLCBjb3JuZXJCO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChtaXgoY29ybmVyQSwgY29ybmVyQiwgdmVydGV4KSwgMCwgMSk7XG59XG4iXSksci5ib3hGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59XG4iXSl9LHtnbHNsaWZ5OjQxM31dLDMxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiLi9saWIvc2hhZGVycyIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMuYm94QnVmZmVyPWUsdGhpcy5ib3hTaGFkZXI9cix0aGlzLmVuYWJsZWQ9ITAsdGhpcy5zZWxlY3RCb3g9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmlubmVyRmlsbD0hMSx0aGlzLmlubmVyQ29sb3I9WzAsMCwwLC4yNV0sdGhpcy5vdXRlckZpbGw9ITAsdGhpcy5vdXRlckNvbG9yPVswLDAsMCwuNV0sdGhpcy5ib3JkZXJXaWR0aD0xMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLHM9aShyLFswLDAsMCwxLDEsMCwxLDFdKSxsPW4ocixhLmJveFZlcnRleCxhLmJveEZyYWdtZW50KSxjPW5ldyBvKHQscyxsKTtyZXR1cm4gYy51cGRhdGUoZSksdC5hZGRPdmVybGF5KGMpLGN9O3ZhciBzPW8ucHJvdG90eXBlO3MuZHJhdz1mdW5jdGlvbigpe2lmKHRoaXMuZW5hYmxlZCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zZWxlY3RCb3gscj10aGlzLmJvcmRlcldpZHRoLG49KHRoaXMuaW5uZXJGaWxsLHRoaXMuaW5uZXJDb2xvciksaT0odGhpcy5vdXRlckZpbGwsdGhpcy5vdXRlckNvbG9yKSxhPXRoaXMuYm9yZGVyQ29sb3Isbz10LmJveCxzPXQuc2NyZWVuQm94LGw9dC5kYXRhQm94LGM9dC52aWV3Qm94LHU9dC5waXhlbFJhdGlvLGg9KGVbMF0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxmPShlWzFdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV0scD0oZVsyXS1sWzBdKSooY1syXS1jWzBdKS8obFsyXS1sWzBdKStjWzBdLGQ9KGVbM10tbFsxXSkqKGNbM10tY1sxXSkvKGxbM10tbFsxXSkrY1sxXTtpZihoPU1hdGgubWF4KGgsY1swXSksZj1NYXRoLm1heChmLGNbMV0pLHA9TWF0aC5taW4ocCxjWzJdKSxkPU1hdGgubWluKGQsY1szXSksIShwPGh8fGQ8Zikpe28uYmluZCgpO3ZhciBnPXNbMl0tc1swXSxtPXNbM10tc1sxXTtpZih0aGlzLm91dGVyRmlsbCYmKG8uZHJhd0JveCgwLDAsZyxmLGkpLG8uZHJhd0JveCgwLGYsaCxkLGkpLG8uZHJhd0JveCgwLGQsZyxtLGkpLG8uZHJhd0JveChwLGYsZyxkLGkpKSx0aGlzLmlubmVyRmlsbCYmby5kcmF3Qm94KGgsZixwLGQsbikscj4wKXt2YXIgdj1yKnU7by5kcmF3Qm94KGgtdixmLXYscCt2LGYrdixhKSxvLmRyYXdCb3goaC12LGQtdixwK3YsZCt2LGEpLG8uZHJhd0JveChoLXYsZi12LGgrdixkK3YsYSksby5kcmF3Qm94KHAtdixmLXYscCt2LGQrdixhKX19fX0scy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmlubmVyRmlsbD0hIXQuaW5uZXJGaWxsLHRoaXMub3V0ZXJGaWxsPSEhdC5vdXRlckZpbGwsdGhpcy5pbm5lckNvbG9yPSh0LmlubmVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5vdXRlckNvbG9yPSh0Lm91dGVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5ib3JkZXJDb2xvcj0odC5ib3JkZXJDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYm9yZGVyV2lkdGg9dC5ib3JkZXJXaWR0aHx8MCx0aGlzLnNlbGVjdEJveD0odC5zZWxlY3RCb3h8fHRoaXMuc2VsZWN0Qm94KS5zbGljZSgpfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5ib3hTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0seyIuL2xpYi9zaGFkZXJzIjozMDksImdsLWJ1ZmZlciI6MjU4LCJnbC1zaGFkZXIiOjMxMn1dLDMxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLGE9ZVsxXSxvPW4odCxyLGEse30pLHM9aS5tYWxsb2NVaW50OChyKmEqNCk7cmV0dXJuIG5ldyBsKHQsbyxzKX07dmFyIG49dCgiZ2wtZmJvIiksaT10KCJ0eXBlZGFycmF5LXBvb2wiKSxhPXQoIm5kYXJyYXkiKSxvPXQoImJpdC10d2lkZGxlIikubmV4dFBvdzI7ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMuY29vcmQ9W3QsZV0sdGhpcy5pZD1yLHRoaXMudmFsdWU9bix0aGlzLmRpc3RhbmNlPWl9ZnVuY3Rpb24gbCh0LGUscil7dGhpcy5nbD10LHRoaXMuZmJvPWUsdGhpcy5idWZmZXI9cix0aGlzLl9yZWFkVGltZW91dD1udWxsO3ZhciBuPXRoaXM7dGhpcy5fcmVhZENhbGxiYWNrPWZ1bmN0aW9uKCl7bi5nbCYmKGUuYmluZCgpLHQucmVhZFBpeGVscygwLDAsZS5zaGFwZVswXSxlLnNoYXBlWzFdLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsbi5idWZmZXIpLG4uX3JlYWRUaW1lb3V0PW51bGwpfX12YXIgYz1sLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYywic2hhcGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbD90aGlzLmZiby5zaGFwZS5zbGljZSgpOlswLDBdfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5nbCl7dGhpcy5mYm8uc2hhcGU9dDt2YXIgZT10aGlzLmZiby5zaGFwZVswXSxyPXRoaXMuZmJvLnNoYXBlWzFdO2lmKHIqZSo0PnRoaXMuYnVmZmVyLmxlbmd0aCl7aS5mcmVlKHRoaXMuYnVmZmVyKTtmb3IodmFyIG49dGhpcy5idWZmZXI9aS5tYWxsb2NVaW50OChvKHIqZSo0KSksYT0wO2E8ciplKjQ7KythKW5bYV09MjU1fXJldHVybiB0fX19KSxjLmJlZ2luPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0aGlzLnNoYXBlO3QmJih0aGlzLmZiby5iaW5kKCksdC5jbGVhckNvbG9yKDEsMSwxLDEpLHQuY2xlYXIodC5DT0xPUl9CVUZGRVJfQklUfHQuREVQVEhfQlVGRkVSX0JJVCkpfSxjLmVuZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dCYmKHQuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsbnVsbCksdGhpcy5fcmVhZFRpbWVvdXR8fGNsZWFyVGltZW91dCh0aGlzLl9yZWFkVGltZW91dCksdGhpcy5fcmVhZFRpbWVvdXQ9c2V0VGltZW91dCh0aGlzLl9yZWFkQ2FsbGJhY2ssMSkpfSxjLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5nbClyZXR1cm4gbnVsbDt2YXIgbj10aGlzLmZiby5zaGFwZS5zbGljZSgpO3R8PTAsZXw9MCwibnVtYmVyIiE9dHlwZW9mIHImJihyPTEpO3ZhciBpPTB8TWF0aC5taW4oTWF0aC5tYXgodC1yLDApLG5bMF0pLG89MHxNYXRoLm1pbihNYXRoLm1heCh0K3IsMCksblswXSksbD0wfE1hdGgubWluKE1hdGgubWF4KGUtciwwKSxuWzFdKSxjPTB8TWF0aC5taW4oTWF0aC5tYXgoZStyLDApLG5bMV0pO2lmKG88PWl8fGM8PWwpcmV0dXJuIG51bGw7dmFyIHU9W28taSxjLWxdLGg9YSh0aGlzLmJ1ZmZlcixbdVswXSx1WzFdLDRdLFs0LDQqblswXSwxXSw0KihpK25bMF0qbCkpLGY9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0xZTgsaT0tMSxhPS0xLG89dC5zaGFwZVswXSxzPXQuc2hhcGVbMV0sbD0wO2w8bztsKyspZm9yKHZhciBjPTA7YzxzO2MrKyl7dmFyIHU9dC5nZXQobCxjLDApLGg9dC5nZXQobCxjLDEpLGY9dC5nZXQobCxjLDIpLHA9dC5nZXQobCxjLDMpO2lmKHU8MjU1fHxoPDI1NXx8ZjwyNTV8fHA8MjU1KXt2YXIgZD1lLWwsZz1yLWMsbT1kKmQrZypnO208biYmKG49bSxpPWwsYT1jKX19cmV0dXJuW2ksYSxuXX0oaC5oaSh1WzBdLHVbMV0sMSkscixyKSxwPWZbMF0sZD1mWzFdO3JldHVybiBwPDB8fE1hdGgucG93KHRoaXMucmFkaXVzLDIpPGZbMl0/bnVsbDpuZXcgcyhwK2l8MCxkK2x8MCxoLmdldChwLGQsMCksW2guZ2V0KHAsZCwxKSxoLmdldChwLGQsMiksaC5nZXQocCxkLDMpXSxNYXRoLnNxcnQoZlsyXSkpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsJiYodGhpcy5mYm8uZGlzcG9zZSgpLGkuZnJlZSh0aGlzLmJ1ZmZlciksdGhpcy5nbD1udWxsLHRoaXMuX3JlYWRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpKX19LHsiYml0LXR3aWRkbGUiOjk3LCJnbC1mYm8iOjI2NixuZGFycmF5OjQ2OSwidHlwZWRhcnJheS1wb29sIjo1Njd9XSwzMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvY3JlYXRlLXVuaWZvcm1zIiksaT10KCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlcyIpLGE9dCgiLi9saWIvcmVmbGVjdCIpLG89dCgiLi9saWIvc2hhZGVyLWNhY2hlIikscz10KCIuL2xpYi9ydW50aW1lLXJlZmxlY3QiKSxsPXQoIi4vbGliL0dMRXJyb3IiKTtmdW5jdGlvbiBjKHQpe3RoaXMuZ2w9dCx0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX3ZyZWY9dGhpcy5fZnJlZj10aGlzLl9yZWxpbms9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5hdHRyaWJ1dGVzPXRoaXMudW5pZm9ybXM9dGhpcy50eXBlcz1udWxsfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5uYW1lPGUubmFtZT8tMToxfXUuYmluZD1mdW5jdGlvbigpe3ZhciB0O3RoaXMucHJvZ3JhbXx8dGhpcy5fcmVsaW5rKCk7dmFyIGU9dGhpcy5nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSx0aGlzLmdsLkFDVElWRV9BVFRSSUJVVEVTKSxyPXRoaXMuZ2wubGFzdEF0dHJpYkNvdW50O2lmKGU+cilmb3IodD1yO3Q8ZTt0KyspdGhpcy5nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh0KTtlbHNlIGlmKHI+ZSlmb3IodD1lO3Q8cjt0KyspdGhpcy5nbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodCk7dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9ZSx0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZ2wubGFzdEF0dHJpYkNvdW50LGU9MDtlPHQ7ZSsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PTAsdGhpcy5fZnJlZiYmdGhpcy5fZnJlZi5kaXNwb3NlKCksdGhpcy5fdnJlZiYmdGhpcy5fdnJlZi5kaXNwb3NlKCksdGhpcy5hdHRyaWJ1dGVzPXRoaXMudHlwZXM9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5fcmVsaW5rPXRoaXMuX2ZyZWY9dGhpcy5fdnJlZj1udWxsfSx1LnVwZGF0ZT1mdW5jdGlvbih0LGUscixjKXtpZighZXx8MT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciB1PXQ7dD11LnZlcnRleCxlPXUuZnJhZ21lbnQscj11LnVuaWZvcm1zLGM9dS5hdHRyaWJ1dGVzfXZhciBmPXRoaXMscD1mLmdsLGQ9Zi5fdnJlZjtmLl92cmVmPW8uc2hhZGVyKHAscC5WRVJURVhfU0hBREVSLHQpLGQmJmQuZGlzcG9zZSgpLGYudmVydFNoYWRlcj1mLl92cmVmLnNoYWRlcjt2YXIgZz10aGlzLl9mcmVmO2lmKGYuX2ZyZWY9by5zaGFkZXIocCxwLkZSQUdNRU5UX1NIQURFUixlKSxnJiZnLmRpc3Bvc2UoKSxmLmZyYWdTaGFkZXI9Zi5fZnJlZi5zaGFkZXIsIXJ8fCFjKXt2YXIgbT1wLmNyZWF0ZVByb2dyYW0oKTtpZihwLmF0dGFjaFNoYWRlcihtLGYuZnJhZ1NoYWRlcikscC5hdHRhY2hTaGFkZXIobSxmLnZlcnRTaGFkZXIpLHAubGlua1Byb2dyYW0obSksIXAuZ2V0UHJvZ3JhbVBhcmFtZXRlcihtLHAuTElOS19TVEFUVVMpKXt2YXIgdj1wLmdldFByb2dyYW1JbmZvTG9nKG0pO3Rocm93IG5ldyBsKHYsIkVycm9yIGxpbmtpbmcgcHJvZ3JhbToiK3YpfXI9cnx8cy51bmlmb3JtcyhwLG0pLGM9Y3x8cy5hdHRyaWJ1dGVzKHAsbSkscC5kZWxldGVQcm9ncmFtKG0pfShjPWMuc2xpY2UoKSkuc29ydChoKTt2YXIgeSx4PVtdLGI9W10sXz1bXTtmb3IoeT0wO3k8Yy5sZW5ndGg7Kyt5KXt2YXIgdz1jW3ldO2lmKHcudHlwZS5pbmRleE9mKCJtYXQiKT49MCl7Zm9yKHZhciBUPTB8dy50eXBlLmNoYXJBdCh3LnR5cGUubGVuZ3RoLTEpLGs9bmV3IEFycmF5KFQpLE09MDtNPFQ7KytNKWtbTV09Xy5sZW5ndGgsYi5wdXNoKHcubmFtZSsiWyIrTSsiXSIpLCJudW1iZXIiPT10eXBlb2Ygdy5sb2NhdGlvbj9fLnB1c2gody5sb2NhdGlvbitNKTpBcnJheS5pc0FycmF5KHcubG9jYXRpb24pJiZ3LmxvY2F0aW9uLmxlbmd0aD09PVQmJiJudW1iZXIiPT10eXBlb2Ygdy5sb2NhdGlvbltNXT9fLnB1c2goMHx3LmxvY2F0aW9uW01dKTpfLnB1c2goLTEpO3gucHVzaCh7bmFtZTp3Lm5hbWUsdHlwZTp3LnR5cGUsbG9jYXRpb25zOmt9KX1lbHNlIHgucHVzaCh7bmFtZTp3Lm5hbWUsdHlwZTp3LnR5cGUsbG9jYXRpb25zOltfLmxlbmd0aF19KSxiLnB1c2gody5uYW1lKSwibnVtYmVyIj09dHlwZW9mIHcubG9jYXRpb24/Xy5wdXNoKDB8dy5sb2NhdGlvbik6Xy5wdXNoKC0xKX12YXIgQT0wO2Zvcih5PTA7eTxfLmxlbmd0aDsrK3kpaWYoX1t5XTwwKXtmb3IoO18uaW5kZXhPZihBKT49MDspQSs9MTtfW3ldPUF9dmFyIFM9bmV3IEFycmF5KHIubGVuZ3RoKTtmdW5jdGlvbiBFKCl7Zi5wcm9ncmFtPW8ucHJvZ3JhbShwLGYuX3ZyZWYsZi5fZnJlZixiLF8pO2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KVNbdF09cC5nZXRVbmlmb3JtTG9jYXRpb24oZi5wcm9ncmFtLHJbdF0ubmFtZSl9RSgpLGYuX3JlbGluaz1FLGYudHlwZXM9e3VuaWZvcm1zOmEociksYXR0cmlidXRlczphKGMpfSxmLmF0dHJpYnV0ZXM9aShwLGYseCxfKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwidW5pZm9ybXMiLG4ocCxmLHIsUykpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uZXcgYyh0KTtyZXR1cm4gYS51cGRhdGUoZSxyLG4saSksYX19LHsiLi9saWIvR0xFcnJvciI6MzEzLCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlcyI6MzE0LCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiOjMxNSwiLi9saWIvcmVmbGVjdCI6MzE2LCIuL2xpYi9ydW50aW1lLXJlZmxlY3QiOjMxNywiLi9saWIvc2hhZGVyLWNhY2hlIjozMTh9XSwzMTM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnNob3J0TWVzc2FnZT1lfHwiIix0aGlzLmxvbmdNZXNzYWdlPXJ8fCIiLHRoaXMucmF3RXJyb3I9dHx8IiIsdGhpcy5tZXNzYWdlPSJnbC1zaGFkZXI6ICIrKGV8fHR8fCIiKSsocj8iXG4iK3I6IiIpLHRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t9bi5wcm90b3R5cGU9bmV3IEVycm9yLG4ucHJvdG90eXBlLm5hbWU9IkdMRXJyb3IiLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sZS5leHBvcnRzPW59LHt9XSwzMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgYT17fSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKXt2YXIgdT1yW2xdLGg9dS5uYW1lLGY9dS50eXBlLHA9dS5sb2NhdGlvbnM7c3dpdGNoKGYpe2Nhc2UiYm9vbCI6Y2FzZSJpbnQiOmNhc2UiZmxvYXQiOm8odCxlLHBbMF0saSwxLGEsaCk7YnJlYWs7ZGVmYXVsdDppZihmLmluZGV4T2YoInZlYyIpPj0wKXtpZigoZD1mLmNoYXJDb2RlQXQoZi5sZW5ndGgtMSktNDgpPDJ8fGQ+NCl0aHJvdyBuZXcgbigiIiwiSW52YWxpZCBkYXRhIHR5cGUgZm9yIGF0dHJpYnV0ZSAiK2grIjogIitmKTtvKHQsZSxwWzBdLGksZCxhLGgpfWVsc2V7aWYoIShmLmluZGV4T2YoIm1hdCIpPj0wKSl0aHJvdyBuZXcgbigiIiwiVW5rbm93biBkYXRhIHR5cGUgZm9yIGF0dHJpYnV0ZSAiK2grIjogIitmKTt2YXIgZDtpZigoZD1mLmNoYXJDb2RlQXQoZi5sZW5ndGgtMSktNDgpPDJ8fGQ+NCl0aHJvdyBuZXcgbigiIiwiSW52YWxpZCBkYXRhIHR5cGUgZm9yIGF0dHJpYnV0ZSAiK2grIjogIitmKTtzKHQsZSxwLGksZCxhLGgpfX19cmV0dXJuIGF9O3ZhciBuPXQoIi4vR0xFcnJvciIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEpe3RoaXMuX2dsPXQsdGhpcy5fd3JhcHBlcj1lLHRoaXMuX2luZGV4PXIsdGhpcy5fbG9jYXRpb25zPW4sdGhpcy5fZGltZW5zaW9uPWksdGhpcy5fY29uc3RGdW5jPWF9dmFyIGE9aS5wcm90b3R5cGU7ZnVuY3Rpb24gbyh0LGUscixuLGEsbyxzKXtmb3IodmFyIGw9WyJnbCIsInYiXSxjPVtdLHU9MDt1PGE7Kyt1KWwucHVzaCgieCIrdSksYy5wdXNoKCJ4Iit1KTtsLnB1c2goImlmKHgwLmxlbmd0aD09PXZvaWQgMCl7cmV0dXJuIGdsLnZlcnRleEF0dHJpYiIrYSsiZih2LCIrYy5qb2luKCkrIil9ZWxzZXtyZXR1cm4gZ2wudmVydGV4QXR0cmliIithKyJmdih2LHgwKX0iKTt2YXIgaD1GdW5jdGlvbi5hcHBseShudWxsLGwpLGY9bmV3IGkodCxlLHIsbixhLGgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHMse3NldDpmdW5jdGlvbihlKXtyZXR1cm4gdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobltyXSksaCh0LG5bcl0sZSksZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhLHMpe2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1uZXcgQXJyYXkoaSksdT0wO3U8aTsrK3Upbyh0LGUsclt1XSxuLGksbCx1KSxjW3VdPWxbdV07T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxvY2F0aW9uIix7c2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBlPTA7ZTxpOysrZSljW2VdLmxvY2F0aW9uPXRbZV07ZWxzZSBmb3IoZT0wO2U8aTsrK2UpY1tlXS5sb2NhdGlvbj10K2U7cmV0dXJuIHR9LGdldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoaSksZT0wO2U8aTsrK2UpdFtlXT1uW3JbZV1dO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksbC5wb2ludGVyPWZ1bmN0aW9uKGUsYSxvLHMpe2U9ZXx8dC5GTE9BVCxhPSEhYSxvPW98fGkqaSxzPXN8fDA7Zm9yKHZhciBsPTA7bDxpOysrbCl7dmFyIGM9bltyW2xdXTt0LnZlcnRleEF0dHJpYlBvaW50ZXIoYyxpLGUsYSxvLHMrbCppKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpfX07dmFyIGg9bmV3IEFycmF5KGkpLGY9dFsidmVydGV4QXR0cmliIitpKyJmdiJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHMse3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGE9MDthPGk7KythKXt2YXIgbz1uW3JbYV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLEFycmF5LmlzQXJyYXkoZVswXSkpZi5jYWxsKHQsbyxlW2FdKTtlbHNle2Zvcih2YXIgcz0wO3M8aTsrK3MpaFtzXT1lW2kqYStzXTtmLmNhbGwodCxvLGgpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX1hLnBvaW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZ2wsYT10aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdO2kudmVydGV4QXR0cmliUG9pbnRlcihhLHRoaXMuX2RpbWVuc2lvbix0fHxpLkZMT0FULCEhZSxyfHwwLG58fDApLGkuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSl9LGEuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF0mJih0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdPTB8dCx0aGlzLl93cmFwcGVyLnByb2dyYW09bnVsbCksMHx0fX0pfSx7Ii4vR0xFcnJvciI6MzEzfV0sMzE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcmVmbGVjdCIpLGk9dCgiLi9HTEVycm9yIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJ5IiwicmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHl9IikodCl9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHQsZSxyKXtzd2l0Y2gocil7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJzYW1wbGVyMkQiOmNhc2Uic2FtcGxlckN1YmUiOnJldHVybiJnbC51bmlmb3JtMWkobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2Nhc2UiZmxvYXQiOnJldHVybiJnbC51bmlmb3JtMWYobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2RlZmF1bHQ6dmFyIG49ci5pbmRleE9mKCJ2ZWMiKTtpZighKDA8PW4mJm48PTEmJnIubGVuZ3RoPT09NCtuKSl7aWYoMD09PXIuaW5kZXhPZigibWF0IikmJjQ9PT1yLmxlbmd0aCl7dmFyIGE7aWYoKGE9ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpLTQ4KTwyfHxhPjQpdGhyb3cgbmV3IGkoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3IpO3JldHVybiJnbC51bmlmb3JtTWF0cml4IithKyJmdihsb2NhdGlvbnNbIitlKyJdLGZhbHNlLG9iaiIrdCsiKSJ9dGhyb3cgbmV3IGkoIiIsIlVua25vd24gdW5pZm9ybSBkYXRhIHR5cGUgZm9yICIrbmFtZSsiOiAiK3IpfWlmKChhPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKS00OCk8Mnx8YT40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSIpO3N3aXRjaChyLmNoYXJBdCgwKSl7Y2FzZSJiIjpjYXNlImkiOnJldHVybiJnbC51bmlmb3JtIithKyJpdihsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7Y2FzZSJ2IjpyZXR1cm4iZ2wudW5pZm9ybSIrYSsiZnYobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2RlZmF1bHQ6dGhyb3cgbmV3IGkoIiIsIlVucmVjb2duaXplZCBkYXRhIHR5cGUgZm9yIHZlY3RvciAiK25hbWUrIjogIityKX19fWZ1bmN0aW9uIGMoZSl7Zm9yKHZhciBuPVsicmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iail7Il0saT1mdW5jdGlvbiB0KGUscil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybltbZSxyXV07dmFyIG49W107Zm9yKHZhciBpIGluIHIpe3ZhciBhPXJbaV0sbz1lO3BhcnNlSW50KGkpKyIiPT09aT9vKz0iWyIraSsiXSI6bys9Ii4iK2ksIm9iamVjdCI9PXR5cGVvZiBhP24ucHVzaC5hcHBseShuLHQobyxhKSk6bi5wdXNoKFtvLGFdKX1yZXR1cm4gbn0oIiIsZSksYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgbz1pW2FdLGM9b1swXSx1PW9bMV07c1t1XSYmbi5wdXNoKGwoYyx1LHJbdV0udHlwZSkpfXJldHVybiBuLnB1c2goInJldHVybiBvYmp9IiksbmV3IEZ1bmN0aW9uKCJnbCIsImxvY2F0aW9ucyIsbi5qb2luKCJcbiIpKSh0LHMpfWZ1bmN0aW9uIHUobixsLHUpe2lmKCJvYmplY3QiPT10eXBlb2YgdSl7dmFyIGY9aCh1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixsLHtnZXQ6YShmKSxzZXQ6Yyh1KSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pfWVsc2Ugc1t1XT9PYmplY3QuZGVmaW5lUHJvcGVydHkobixsLHtnZXQ6KHA9dSxuZXcgRnVuY3Rpb24oImdsIiwid3JhcHBlciIsImxvY2F0aW9ucyIsInJldHVybiBmdW5jdGlvbigpe3JldHVybiBnbC5nZXRVbmlmb3JtKHdyYXBwZXIucHJvZ3JhbSxsb2NhdGlvbnNbIitwKyJdKX0iKSh0LGUscykpLHNldDpjKHUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk6bltsXT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJib29sIjpyZXR1cm4hMTtjYXNlImludCI6Y2FzZSJzYW1wbGVyMkQiOmNhc2Uic2FtcGxlckN1YmUiOmNhc2UiZmxvYXQiOnJldHVybiAwO2RlZmF1bHQ6dmFyIGU9dC5pbmRleE9mKCJ2ZWMiKTtpZigwPD1lJiZlPD0xJiZ0Lmxlbmd0aD09PTQrZSl7aWYoKHI9dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpLTQ4KTwyfHxyPjQpdGhyb3cgbmV3IGkoIiIsIkludmFsaWQgZGF0YSB0eXBlIik7cmV0dXJuImIiPT09dC5jaGFyQXQoMCk/byhyLCExKTpvKHIsMCl9aWYoMD09PXQuaW5kZXhPZigibWF0IikmJjQ9PT10Lmxlbmd0aCl7dmFyIHI7aWYoKHI9dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpLTQ4KTwyfHxyPjQpdGhyb3cgbmV3IGkoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3QpO3JldHVybiBvKHIqciwwKX10aHJvdyBuZXcgaSgiIiwiVW5rbm93biB1bmlmb3JtIGRhdGEgdHlwZSBmb3IgIituYW1lKyI6ICIrdCl9fShyW3VdLnR5cGUpO3ZhciBwfWZ1bmN0aW9uIGgodCl7dmFyIGU7aWYoQXJyYXkuaXNBcnJheSh0KSl7ZT1uZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXUoZSxyLHRbcl0pfWVsc2UgZm9yKHZhciBuIGluIGU9e30sdCl1KGUsbix0W25dKTtyZXR1cm4gZX12YXIgZj1uKHIsITApO3JldHVybntnZXQ6YShoKGYpKSxzZXQ6YyhmKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19fSx7Ii4vR0xFcnJvciI6MzEzLCIuL3JlZmxlY3QiOjMxNn1dLDMxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLm5hbWUuc3BsaXQoIi4iKSxhPXIsbz0wO288aS5sZW5ndGg7KytvKXt2YXIgcz1pW29dLnNwbGl0KCJbIik7aWYocy5sZW5ndGg+MSl7c1swXWluIGF8fChhW3NbMF1dPVtdKSxhPWFbc1swXV07Zm9yKHZhciBsPTE7bDxzLmxlbmd0aDsrK2wpe3ZhciBjPXBhcnNlSW50KHNbbF0pO2w8cy5sZW5ndGgtMXx8bzxpLmxlbmd0aC0xPyhjIGluIGF8fChsPHMubGVuZ3RoLTE/YVtjXT1bXTphW2NdPXt9KSxhPWFbY10pOmFbY109ZT9uOnRbbl0udHlwZX19ZWxzZSBvPGkubGVuZ3RoLTE/KHNbMF1pbiBhfHwoYVtzWzBdXT17fSksYT1hW3NbMF1dKTphW3NbMF1dPWU/bjp0W25dLnR5cGV9cmV0dXJuIHJ9fSx7fV0sMzE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IudW5pZm9ybXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfVU5JRk9STVMpLG49W10saT0wO2k8cjsrK2kpe3ZhciBvPXQuZ2V0QWN0aXZlVW5pZm9ybShlLGkpO2lmKG8pe3ZhciBzPWEodCxvLnR5cGUpO2lmKG8uc2l6ZT4xKWZvcih2YXIgbD0wO2w8by5zaXplOysrbCluLnB1c2goe25hbWU6by5uYW1lLnJlcGxhY2UoIlswXSIsIlsiK2wrIl0iKSx0eXBlOnN9KTtlbHNlIG4ucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTpzfSl9fXJldHVybiBufSxyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfQVRUUklCVVRFUyksbj1bXSxpPTA7aTxyOysraSl7dmFyIG89dC5nZXRBY3RpdmVBdHRyaWIoZSxpKTtvJiZuLnB1c2goe25hbWU6by5uYW1lLHR5cGU6YSh0LG8udHlwZSl9KX1yZXR1cm4gbn07dmFyIG49e0ZMT0FUOiJmbG9hdCIsRkxPQVRfVkVDMjoidmVjMiIsRkxPQVRfVkVDMzoidmVjMyIsRkxPQVRfVkVDNDoidmVjNCIsSU5UOiJpbnQiLElOVF9WRUMyOiJpdmVjMiIsSU5UX1ZFQzM6Iml2ZWMzIixJTlRfVkVDNDoiaXZlYzQiLEJPT0w6ImJvb2wiLEJPT0xfVkVDMjoiYnZlYzIiLEJPT0xfVkVDMzoiYnZlYzMiLEJPT0xfVkVDNDoiYnZlYzQiLEZMT0FUX01BVDI6Im1hdDIiLEZMT0FUX01BVDM6Im1hdDMiLEZMT0FUX01BVDQ6Im1hdDQiLFNBTVBMRVJfMkQ6InNhbXBsZXIyRCIsU0FNUExFUl9DVUJFOiJzYW1wbGVyQ3ViZSJ9LGk9bnVsbDtmdW5jdGlvbiBhKHQsZSl7aWYoIWkpe3ZhciByPU9iamVjdC5rZXlzKG4pO2k9e307Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBvPXJbYV07aVt0W29dXT1uW29dfX1yZXR1cm4gaVtlXX19LHt9XSwzMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5zaGFkZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB1KHQpLmdldFNoYWRlclJlZmVyZW5jZShlLHIpfSxyLnByb2dyYW09ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdSh0KS5nZXRQcm9ncmFtKGUscixuLGkpfTt2YXIgbj10KCIuL0dMRXJyb3IiKSxpPXQoImdsLWZvcm1hdC1jb21waWxlci1lcnJvciIpLGE9bmV3KCJ1bmRlZmluZWQiPT10eXBlb2YgV2Vha01hcD90KCJ3ZWFrbWFwLXNoaW0iKTpXZWFrTWFwKSxvPTA7ZnVuY3Rpb24gcyh0LGUscixuLGksYSxvKXt0aGlzLmlkPXQsdGhpcy5zcmM9ZSx0aGlzLnR5cGU9cix0aGlzLnNoYWRlcj1uLHRoaXMuY291bnQ9YSx0aGlzLnByb2dyYW1zPVtdLHRoaXMuY2FjaGU9b31mdW5jdGlvbiBsKHQpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcnM9W3t9LHt9XSx0aGlzLnByb2dyYW1zPXt9fXMucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtpZigwPT0tLXRoaXMuY291bnQpe2Zvcih2YXIgdD10aGlzLmNhY2hlLGU9dC5nbCxyPXRoaXMucHJvZ3JhbXMsbj0wLGk9ci5sZW5ndGg7bjxpOysrbil7dmFyIGE9dC5wcm9ncmFtc1tyW25dXTthJiYoZGVsZXRlIHQucHJvZ3JhbXNbbl0sZS5kZWxldGVQcm9ncmFtKGEpKX1lLmRlbGV0ZVNoYWRlcih0aGlzLnNoYWRlciksZGVsZXRlIHQuc2hhZGVyc1t0aGlzLnR5cGU9PT1lLkZSQUdNRU5UX1NIQURFUnwwXVt0aGlzLnNyY119fTt2YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe3ZhciBlPWEuZ2V0KHQpO3JldHVybiBlfHwoZT1uZXcgbCh0KSxhLnNldCh0LGUpKSxlfWMuZ2V0U2hhZGVyUmVmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nbCxhPXRoaXMuc2hhZGVyc1t0PT09ci5GUkFHTUVOVF9TSEFERVJ8MF0sbD1hW2VdO2lmKGwmJnIuaXNTaGFkZXIobC5zaGFkZXIpKWwuY291bnQrPTE7ZWxzZXt2YXIgYz1mdW5jdGlvbih0LGUscil7dmFyIGE9dC5jcmVhdGVTaGFkZXIoZSk7aWYodC5zaGFkZXJTb3VyY2UoYSxyKSx0LmNvbXBpbGVTaGFkZXIoYSksIXQuZ2V0U2hhZGVyUGFyYW1ldGVyKGEsdC5DT01QSUxFX1NUQVRVUykpe3ZhciBvPXQuZ2V0U2hhZGVySW5mb0xvZyhhKTt0cnl7dmFyIHM9aShvLHIsZSl9Y2F0Y2godCl7dGhyb3cgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gZm9ybWF0IGNvbXBpbGVyIGVycm9yOiAiK3QpLG5ldyBuKG8sIkVycm9yIGNvbXBpbGluZyBzaGFkZXI6XG4iK28pfXRocm93IG5ldyBuKG8scy5zaG9ydCxzLmxvbmcpfXJldHVybiBhfShyLHQsZSk7bD1hW2VdPW5ldyBzKG8rKyxlLHQsYyxbXSwxLHRoaXMpfXJldHVybiBsfSxjLmdldFByb2dyYW09ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9W3QuaWQsZS5pZCxyLmpvaW4oIjoiKSxpLmpvaW4oIjoiKV0uam9pbigiQCIpLG89dGhpcy5wcm9ncmFtc1thXTtyZXR1cm4gbyYmdGhpcy5nbC5pc1Byb2dyYW0obyl8fCh0aGlzLnByb2dyYW1zW2FdPW89ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcihvLGUpLHQuYXR0YWNoU2hhZGVyKG8scik7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDsrK3MpdC5iaW5kQXR0cmliTG9jYXRpb24obyxhW3NdLGlbc10pO2lmKHQubGlua1Byb2dyYW0obyksIXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihvLHQuTElOS19TVEFUVVMpKXt2YXIgbD10LmdldFByb2dyYW1JbmZvTG9nKG8pO3Rocm93IG5ldyBuKGwsIkVycm9yIGxpbmtpbmcgcHJvZ3JhbTogIitsKX1yZXR1cm4gb30odGhpcy5nbCx0LnNoYWRlcixlLnNoYWRlcixyLGkpLHQucHJvZ3JhbXMucHVzaChhKSxlLnByb2dyYW1zLnB1c2goYSkpLG99fSx7Ii4vR0xFcnJvciI6MzEzLCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiOjI2Nywid2Vha21hcC1zaGltIjo1Nzd9XSwzMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnBsb3Q9dCx0aGlzLmVuYWJsZT1bITAsITAsITEsITFdLHRoaXMud2lkdGg9WzEsMSwxLDFdLHRoaXMuY29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5jZW50ZXI9WzEvMCwxLzBdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuKHQpO3JldHVybiByLnVwZGF0ZShlKSx0LmFkZE92ZXJsYXkocikscn07dmFyIGk9bi5wcm90b3R5cGU7aS51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmVuYWJsZT0odC5lbmFibGV8fFshMCwhMCwhMSwhMV0pLnNsaWNlKCksdGhpcy53aWR0aD0odC53aWR0aHx8WzEsMSwxLDFdKS5zbGljZSgpLHRoaXMuY29sb3I9KHQuY29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KSksdGhpcy5jZW50ZXI9KHQuY2VudGVyfHxbMS8wLDEvMF0pLnNsaWNlKCksdGhpcy5wbG90LnNldE92ZXJsYXlEaXJ0eSgpfSxpLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVuYWJsZSxlPXRoaXMud2lkdGgscj10aGlzLmNvbG9yLG49dGhpcy5jZW50ZXIsaT10aGlzLnBsb3QsYT1pLmxpbmUsbz1pLmRhdGFCb3gscz1pLnZpZXdCb3g7aWYoYS5iaW5kKCksb1swXTw9blswXSYmblswXTw9b1syXSYmb1sxXTw9blsxXSYmblsxXTw9b1szXSl7dmFyIGw9c1swXSsoblswXS1vWzBdKS8ob1syXS1vWzBdKSooc1syXS1zWzBdKSxjPXNbMV0rKG5bMV0tb1sxXSkvKG9bM10tb1sxXSkqKHNbM10tc1sxXSk7dFswXSYmYS5kcmF3TGluZShsLGMsc1swXSxjLGVbMF0sclswXSksdFsxXSYmYS5kcmF3TGluZShsLGMsbCxzWzFdLGVbMV0sclsxXSksdFsyXSYmYS5kcmF3TGluZShsLGMsc1syXSxjLGVbMl0sclsyXSksdFszXSYmYS5kcmF3TGluZShsLGMsbCxzWzNdLGVbM10sclszXSl9fSxpLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHt9XSwzMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgY29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgd2VpZ2h0O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY29vcmRpbmF0ZXNbM107XG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyB2ZXJ0ZXhQb3NpdGlvbiA9IG1peChjb29yZGluYXRlc1swXSxcbiAgICBtaXgoY29vcmRpbmF0ZXNbMl0sIGNvb3JkaW5hdGVzWzFdLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKSwgYWJzKHBvc2l0aW9uKSk7XG5cbiAgdmVjNCBjbGlwUG9zID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQodmVydGV4UG9zaXRpb24sIDEuMCk7XG4gIHZlYzIgY2xpcE9mZnNldCA9IChwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChjb2xvciwgMC4wKSkueHk7XG4gIHZlYzIgZGVsdGEgPSB3ZWlnaHQgKiBjbGlwT2Zmc2V0ICogc2NyZWVuU2hhcGU7XG4gIHZlYzIgbGluZU9mZnNldCA9IG5vcm1hbGl6ZSh2ZWMyKGRlbHRhLnksIC1kZWx0YS54KSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiAgID0gdmVjNChjbGlwUG9zLnh5ICsgY2xpcFBvcy53ICogMC41ICogbGluZVdpZHRoICogbGluZU9mZnNldCwgY2xpcFBvcy56LCBjbGlwUG9zLncpO1xuICBmcmFnQ29sb3IgICAgID0gY29sb3IueCAqIGNvbG9yc1swXSArIGNvbG9yLnkgKiBjb2xvcnNbMV0gKyBjb2xvci56ICogY29sb3JzWzJdO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzMifSx7bmFtZToid2VpZ2h0Iix0eXBlOiJmbG9hdCJ9XSl9fSx7ImdsLXNoYWRlciI6MzEyLGdsc2xpZnk6NDEzfV0sMzIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMvaW5kZXgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmdW5jdGlvbiBvKHQsZSxuLGksYSxvKXt2YXIgcz1bdCxlLG4sMCwwLDAsMV07c1tpKzNdPTEsc1tpXT1hLHIucHVzaC5hcHBseShyLHMpLHNbNl09LTEsci5wdXNoLmFwcGx5KHIscyksc1tpXT1vLHIucHVzaC5hcHBseShyLHMpLHIucHVzaC5hcHBseShyLHMpLHNbNl09MSxyLnB1c2guYXBwbHkocixzKSxzW2ldPWEsci5wdXNoLmFwcGx5KHIscyl9bygwLDAsMCwwLDAsMSksbygwLDAsMCwxLDAsMSksbygwLDAsMCwyLDAsMSksbygxLDAsMCwxLC0xLDEpLG8oMSwwLDAsMiwtMSwxKSxvKDAsMSwwLDAsLTEsMSksbygwLDEsMCwyLC0xLDEpLG8oMCwwLDEsMCwtMSwxKSxvKDAsMCwxLDEsLTEsMSk7dmFyIGw9bih0LHIpLGM9aSh0LFt7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6Mjh9LHt0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6Mjh9LHt0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZToxLG9mZnNldDoyNCxzdHJpZGU6Mjh9XSksdT1hKHQpO3UuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLHUuYXR0cmlidXRlcy53ZWlnaHQubG9jYXRpb249Mjt2YXIgaD1uZXcgcyh0LGwsYyx1KTtyZXR1cm4gaC51cGRhdGUoZSksaH07dmFyIG89WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1uLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbLTFlMywtMWUzLC0xZTNdLFsxZTMsMWUzLDFlM11dLHRoaXMucG9zaXRpb249WzAsMCwwXSx0aGlzLmxpbmVXaWR0aD1bMiwyLDJdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5lbmFibGVkPVshMCwhMCwhMF0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmF4ZXM9bnVsbH12YXIgbD1zLnByb3RvdHlwZSxjPVswLDAsMF0sdT1bMCwwLDBdLGg9WzAsMF07bC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe30sbC5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnZhbyxuPXRoaXMuc2hhZGVyO3IuYmluZCgpLG4uYmluZCgpO3ZhciBpLGE9dC5tb2RlbHx8byxzPXQudmlld3x8byxsPXQucHJvamVjdGlvbnx8bzt0aGlzLmF4ZXMmJihpPXRoaXMuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXMpO2Zvcih2YXIgZj1jLHA9dSxkPTA7ZDwzOysrZClpJiZpW2RdPDA/KGZbZF09dGhpcy5ib3VuZHNbMF1bZF0scFtkXT10aGlzLmJvdW5kc1sxXVtkXSk6KGZbZF09dGhpcy5ib3VuZHNbMV1bZF0scFtkXT10aGlzLmJvdW5kc1swXVtkXSk7aFswXT1lLmRyYXdpbmdCdWZmZXJXaWR0aCxoWzFdPWUuZHJhd2luZ0J1ZmZlckhlaWdodCxuLnVuaWZvcm1zLm1vZGVsPWEsbi51bmlmb3Jtcy52aWV3PXMsbi51bmlmb3Jtcy5wcm9qZWN0aW9uPWwsbi51bmlmb3Jtcy5jb29yZGluYXRlcz1bdGhpcy5wb3NpdGlvbixmLHBdLG4udW5pZm9ybXMuY29sb3JzPXRoaXMuY29sb3JzLG4udW5pZm9ybXMuc2NyZWVuU2hhcGU9aDtmb3IoZD0wO2Q8MzsrK2Qpbi51bmlmb3Jtcy5saW5lV2lkdGg9dGhpcy5saW5lV2lkdGhbZF0qdGhpcy5waXhlbFJhdGlvLHRoaXMuZW5hYmxlZFtkXSYmKHIuZHJhdyhlLlRSSUFOR0xFUyw2LDYqZCksdGhpcy5kcmF3U2lkZXNbZF0mJnIuZHJhdyhlLlRSSUFOR0xFUywxMiwxOCsxMipkKSk7ci51bmJpbmQoKX0sbC51cGRhdGU9ZnVuY3Rpb24odCl7dCYmKCJib3VuZHMiaW4gdCYmKHRoaXMuYm91bmRzPXQuYm91bmRzKSwicG9zaXRpb24iaW4gdCYmKHRoaXMucG9zaXRpb249dC5wb3NpdGlvbiksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJjb2xvcnMiaW4gdCYmKHRoaXMuY29sb3JzPXQuY29sb3JzKSwiZW5hYmxlZCJpbiB0JiYodGhpcy5lbmFibGVkPXQuZW5hYmxlZCksImRyYXdTaWRlcyJpbiB0JiYodGhpcy5kcmF3U2lkZXM9dC5kcmF3U2lkZXMpKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycy9pbmRleCI6MzIwLCJnbC1idWZmZXIiOjI1OCwiZ2wtdmFvIjozMzJ9XSwzMjI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHR1YmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cbi8vXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cbi8vIFRoZSBpbmRleGVzIG9mIHR1YmUgc2VnbWVudHMgcnVuIGZyb20gMCB0byA4LlxuLy9cbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xuICBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB2MyA9IHggKyB5O1xuXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XG5cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZSwgdHViZVNjYWxlO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb24sIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gU2NhbGUgdGhlIHZlY3RvciBtYWduaXR1ZGUgdG8gc3RheSBjb25zdGFudCB3aXRoXG4gIC8vIG1vZGVsICYgdmlldyBjaGFuZ2VzLlxuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgY2FtZXJhQ29vcmRpbmF0ZS54eXogLz0gY2FtZXJhQ29vcmRpbmF0ZS53O1xuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9ub3JtYWwgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLCAwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xuXG4gIC8vIHZlYzQgbV9wb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQodHViZVBvc2l0aW9uLCAxLjApO1xuICB2ZWM0IHRfcG9zaXRpb24gID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3Rpb24gKiB0X3Bvc2l0aW9uO1xuXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9kYXRhICAgICAgICAgICA9IHR1YmVQb3NpdGlvbi54eXo7XG4gIGZfcG9zaXRpb24gICAgICAgPSBwb3NpdGlvbi54eXo7XG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcbn1cbiJdKSxhPW4oWyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbihOZG90SCwgcm91Z2huZXNzKTtcblxuICAvL0ZyZXNuZWwgdGVybVxuICBmbG9hdCBGID0gcG93KDEuMCAtIFZkb3ROLCBmcmVzbmVsKTtcblxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXG4gIHJldHVybiAgRyAqIEYgKiBEIC8gbWF4KDMuMTQxNTkyNjUgKiBWZG90TiwgMC4wMDAwMDEpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcywgZnJlc25lbCwga2FtYmllbnQsIGtkaWZmdXNlLCBrc3BlY3VsYXIsIG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWwsIGZfbGlnaHREaXJlY3Rpb24sIGZfZXllRGlyZWN0aW9uLCBmX2RhdGEsIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xuICB2ZWMzIEwgPSBub3JtYWxpemUoZl9saWdodERpcmVjdGlvbik7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XG5cbiAgaWYoZ2xfRnJvbnRGYWNpbmcpIHtcbiAgICBOID0gLU47XG4gIH1cblxuICBmbG9hdCBzcGVjdWxhciA9IG1pbigxLjAsIG1heCgwLjAsIGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCkpKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBvcGFjaXR5O1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XG4gIH1cbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSB0dWJlIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cbi8vXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIHR1YmUgcmluZyB3aXRoIGl0cyBjZW50ZXIgYXQgb3JpZ2luLCByYWRpdXMgb2YgbGVuZ3RoKGQpLCBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIGQuXG4vL1xuLy8gRWFjaCB0dWJlIHNlZ21lbnQgaXMgbWFkZSB1cCBvZiBhIHJpbmcgb2YgdmVydGljZXMuXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIHR1YmUgYnkgY29ubmVjdGluZyB0aGVtIHRvZ2V0aGVyIGluIHRoZSB2ZXJ0ZXggYXJyYXkuXG4vLyBUaGUgaW5kZXhlcyBvZiB0dWJlIHNlZ21lbnRzIHJ1biBmcm9tIDAgdG8gOC5cbi8vXG52ZWMzIGdldFR1YmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IGluZGV4LCBvdXQgdmVjMyBub3JtYWwpIHtcbiAgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqIChpbmRleCAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCk7XG4gIHZlYzMgdjMgPSB4ICsgeTtcblxuICBub3JtYWwgPSBub3JtYWxpemUodjMpO1xuXG4gIHJldHVybiB2Mztcbn1cblxuYXR0cmlidXRlIHZlYzQgdmVjdG9yO1xuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCB0dWJlU2NhbGU7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBub3JtYWw7XG4gIHZlYzMgWFlaID0gZ2V0VHViZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKHR1YmVTY2FsZSAqIHZlY3Rvci53ICogbm9ybWFsaXplKHZlY3Rvci54eXopKSwgcG9zaXRpb24udywgbm9ybWFsKTtcbiAgdmVjNCB0dWJlUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XG5cbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWM0In1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWM0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In0se25hbWU6InZlY3RvciIsdHlwZToidmVjNCJ9XX19LHtnbHNsaWZ5OjQxM31dLDMyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC12ZWMzIiksaT10KCJnbC12ZWM0IiksYT1bInh5eiIsInh6eSIsInl4eiIsInl6eCIsInp4eSIsInp5eCJdLG89ZnVuY3Rpb24odCxlLHIsYSl7Zm9yKHZhciBvPTAscz0wO3M8dC5sZW5ndGg7cysrKWZvcih2YXIgbD10W3NdLnZlbG9jaXRpZXMsYz0wO2M8bC5sZW5ndGg7YysrKW89TWF0aC5tYXgobyxuLmxlbmd0aChsW2NdKSk7dmFyIHU9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89dC5wb2ludHMscz10LnZlbG9jaXRpZXMsbD10LmRpdmVyZ2VuY2VzLGM9W10sdT1bXSxoPVtdLGY9W10scD1bXSxkPVtdLGc9MCxtPTAsdj1pLmNyZWF0ZSgpLHk9aS5jcmVhdGUoKSx4PTA7eDxvLmxlbmd0aDt4Kyspe3ZhciBiPW9beF0sXz1zW3hdLHc9bFt4XTswPT09ZSYmKHc9LjA1KnIpLG09bi5sZW5ndGgoXykvYSx2PWkuY3JlYXRlKCksbi5jb3B5KHYsXyksdlszXT13O2Zvcih2YXIgVD0wO1Q8ODtUKyspcFtUXT1bYlswXSxiWzFdLGJbMl0sVF07aWYoZi5sZW5ndGg+MClmb3IoVD0wO1Q8ODtUKyspe3ZhciBrPShUKzEpJTg7Yy5wdXNoKGZbVF0scFtUXSxwW2tdLHBba10sZltrXSxmW1RdKSxoLnB1c2goeSx2LHYsdix5LHkpLGQucHVzaChnLG0sbSxtLGcsZyk7dmFyIE09Yy5sZW5ndGg7dS5wdXNoKFtNLTYsTS01LE0tNF0sW00tMyxNLTIsTS0xXSl9dmFyIEE9ZjtmPXAscD1BO3ZhciBTPXk7eT12LHY9Uzt2YXIgRT1nO2c9bSxtPUV9cmV0dXJue3Bvc2l0aW9uczpjLGNlbGxzOnUsdmVjdG9yczpoLHZlcnRleEludGVuc2l0eTpkfX0odCxyLGEsbyl9KSksaD1bXSxmPVtdLHA9W10sZD1bXTtmb3Iocz0wO3M8dS5sZW5ndGg7cysrKXt2YXIgZz11W3NdLG09aC5sZW5ndGg7aD1oLmNvbmNhdChnLnBvc2l0aW9ucykscD1wLmNvbmNhdChnLnZlY3RvcnMpLGQ9ZC5jb25jYXQoZy52ZXJ0ZXhJbnRlbnNpdHkpO2ZvcihjPTA7YzxnLmNlbGxzLmxlbmd0aDtjKyspe3ZhciB2PWcuY2VsbHNbY10seT1bXTtmLnB1c2goeSk7Zm9yKHZhciB4PTA7eDx2Lmxlbmd0aDt4KyspeS5wdXNoKHZbeF0rbSl9fXJldHVybntwb3NpdGlvbnM6aCxjZWxsczpmLHZlY3RvcnM6cCx2ZXJ0ZXhJbnRlbnNpdHk6ZCxjb2xvcm1hcDplfX0scz1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGg7Zm9yKHI9MDtyPG47cisrKXt2YXIgaT10W3JdO2lmKGk9PT1lKXJldHVybiByO2lmKGk+ZSlyZXR1cm4gci0xfXJldHVybiByfSxsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdDxlP2U6dD5yP3I6dH0sYz1mdW5jdGlvbih0KXt2YXIgZT0xLzA7dC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7Zm9yKHZhciByPXQubGVuZ3RoLG49MTtuPHI7bisrKXt2YXIgaT1NYXRoLmFicyh0W25dLXRbbi0xXSk7aTxlJiYoZT1pKX1yZXR1cm4gZX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGluZ1Bvc2l0aW9ucyxpPXQubWF4TGVuZ3RofHwxZTMsdT10LnR1YmVTaXplfHwxLGg9dC5hYnNvbHV0ZVR1YmVTaXplLGY9dC5ncmlkRmlsbHx8Iit4K3kreiIscD17fTstMSE9PWYuaW5kZXhPZigiLXgiKSYmKHAucmV2ZXJzZWRYPSEwKSwtMSE9PWYuaW5kZXhPZigiLXkiKSYmKHAucmV2ZXJzZWRZPSEwKSwtMSE9PWYuaW5kZXhPZigiLXoiKSYmKHAucmV2ZXJzZWRaPSEwKSxwLmZpbGxlZD1hLmluZGV4T2YoZi5yZXBsYWNlKC8tL2csIiIpLnJlcGxhY2UoL1wrL2csIiIpKTt2YXIgZD10LmdldFZlbG9jaXR5fHxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUudmVjdG9ycyxhPWUubWVzaGdyaWQsbz10WzBdLGM9dFsxXSx1PXRbMl0saD1hWzBdLmxlbmd0aCxmPWFbMV0ubGVuZ3RoLHA9YVsyXS5sZW5ndGgsZD1zKGFbMF0sbyksZz1zKGFbMV0sYyksbT1zKGFbMl0sdSksdj1kKzEseT1nKzEseD1tKzE7aWYoZD1sKGQsMCxoLTEpLHY9bCh2LDAsaC0xKSxnPWwoZywwLGYtMSkseT1sKHksMCxmLTEpLG09bChtLDAscC0xKSx4PWwoeCwwLHAtMSksZDwwfHxnPDB8fG08MHx8dj5oLTF8fHk+Zi0xfHx4PnAtMSlyZXR1cm4gbi5jcmVhdGUoKTt2YXIgYixfLHcsVCxrLE0sQT1hWzBdW2RdLFM9YVswXVt2XSxFPWFbMV1bZ10sQz1hWzFdW3ldLEw9YVsyXVttXSxQPShvLUEpLyhTLUEpLEk9KGMtRSkvKEMtRSksej0odS1MKS8oYVsyXVt4XS1MKTtzd2l0Y2goaXNGaW5pdGUoUCl8fChQPS41KSxpc0Zpbml0ZShJKXx8KEk9LjUpLGlzRmluaXRlKHopfHwoej0uNSksci5yZXZlcnNlZFgmJihkPWgtMS1kLHY9aC0xLXYpLHIucmV2ZXJzZWRZJiYoZz1mLTEtZyx5PWYtMS15KSxyLnJldmVyc2VkWiYmKG09cC0xLW0seD1wLTEteCksci5maWxsZWQpe2Nhc2UgNTprPW0sTT14LHc9ZypwLFQ9eSpwLGI9ZCpwKmYsXz12KnAqZjticmVhaztjYXNlIDQ6az1tLE09eCxiPWQqcCxfPXYqcCx3PWcqcCpoLFQ9eSpwKmg7YnJlYWs7Y2FzZSAzOnc9ZyxUPXksaz1tKmYsTT14KmYsYj1kKmYqcCxfPXYqZipwO2JyZWFrO2Nhc2UgMjp3PWcsVD15LGI9ZCpmLF89dipmLGs9bSpmKmgsTT14KmYqaDticmVhaztjYXNlIDE6Yj1kLF89dixrPW0qaCxNPXgqaCx3PWcqaCpwLFQ9eSpoKnA7YnJlYWs7ZGVmYXVsdDpiPWQsXz12LHc9ZypoLFQ9eSpoLGs9bSpoKmYsTT14KmgqZn12YXIgTz1pW2IrdytrXSxEPWlbYit3K01dLFI9aVtiK1Qra10sRj1pW2IrVCtNXSxCPWlbXyt3K2tdLE49aVtfK3crTV0saj1pW18rVCtrXSxVPWlbXytUK01dLFY9bi5jcmVhdGUoKSxxPW4uY3JlYXRlKCksSD1uLmNyZWF0ZSgpLEc9bi5jcmVhdGUoKTtuLmxlcnAoVixPLEIsUCksbi5sZXJwKHEsRCxOLFApLG4ubGVycChILFIsaixQKSxuLmxlcnAoRyxGLFUsUCk7dmFyIFk9bi5jcmVhdGUoKSxXPW4uY3JlYXRlKCk7bi5sZXJwKFksVixILEkpLG4ubGVycChXLHEsRyxJKTt2YXIgWj1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoWixZLFcseiksWn0oZSx0LHApfSxnPXQuZ2V0RGl2ZXJnZW5jZXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmNyZWF0ZSgpLGk9MWUtNDtuLmFkZChyLHQsW2ksMCwwXSk7dmFyIGE9ZChyKTtuLnN1YnRyYWN0KGEsYSxlKSxuLnNjYWxlKGEsYSwxL2kpLG4uYWRkKHIsdCxbMCxpLDBdKTt2YXIgbz1kKHIpO24uc3VidHJhY3QobyxvLGUpLG4uc2NhbGUobyxvLDEvaSksbi5hZGQocix0LFswLDAsaV0pO3ZhciBzPWQocik7cmV0dXJuIG4uc3VidHJhY3QocyxzLGUpLG4uc2NhbGUocyxzLDEvaSksbi5hZGQocixhLG8pLG4uYWRkKHIscixzKSxyfSxtPVtdLHY9ZVswXVswXSx5PWVbMF1bMV0seD1lWzBdWzJdLGI9ZVsxXVswXSxfPWVbMV1bMV0sdz1lWzFdWzJdLFQ9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiEoZTx2fHxlPmJ8fHI8eXx8cj5ffHxuPHh8fG4+dyl9LGs9MTAqbi5kaXN0YW5jZShlWzBdLGVbMV0pL2ksTT1rKmssQT0xLFM9MCxFPXIubGVuZ3RoO0U+MSYmKEE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10sbj1bXSxpPXt9LGE9e30sbz17fSxzPXQubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgdT10W2xdLGg9dVswXSxmPXVbMV0scD11WzJdO2lbaF18fChlLnB1c2goaCksaVtoXT0hMCksYVtmXXx8KHIucHVzaChmKSxhW2ZdPSEwKSxvW3BdfHwobi5wdXNoKHApLG9bcF09ITApfXZhciBkPWMoZSksZz1jKHIpLG09YyhuKSx2PU1hdGgubWluKGQsZyxtKTtyZXR1cm4gaXNGaW5pdGUodik/djoxfShyKSk7Zm9yKHZhciBDPTA7QzxFO0MrKyl7dmFyIEw9bi5jcmVhdGUoKTtuLmNvcHkoTCxyW0NdKTt2YXIgUD1bTF0sST1bXSx6PWQoTCksTz1MO0kucHVzaCh6KTt2YXIgRD1bXSxSPWcoTCx6KSxGPW4ubGVuZ3RoKFIpO2lzRmluaXRlKEYpJiZGPlMmJihTPUYpLEQucHVzaChGKSxtLnB1c2goe3BvaW50czpQLHZlbG9jaXRpZXM6SSxkaXZlcmdlbmNlczpEfSk7Zm9yKHZhciBCPTA7QjwxMDAqaSYmUC5sZW5ndGg8aSYmVChMKTspe0IrKzt2YXIgTj1uLmNsb25lKHopLGo9bi5zcXVhcmVkTGVuZ3RoKE4pO2lmKDA9PT1qKWJyZWFrO2lmKGo+TSYmbi5zY2FsZShOLE4say9NYXRoLnNxcnQoaikpLG4uYWRkKE4sTixMKSx6PWQoTiksbi5zcXVhcmVkRGlzdGFuY2UoTyxOKS1NPi0xZS00Kk0pe1AucHVzaChOKSxPPU4sSS5wdXNoKHopO1I9ZyhOLHopLEY9bi5sZW5ndGgoUik7aXNGaW5pdGUoRikmJkY+UyYmKFM9RiksRC5wdXNoKEYpfUw9Tn19dmFyIFU9byhtLHQuY29sb3JtYXAsUyxBKTtyZXR1cm4gaD9VLnR1YmVTY2FsZT1oOigwPT09UyYmKFM9MSksVS50dWJlU2NhbGU9LjUqdSpBL1MpLFV9O3ZhciB1PXQoIi4vbGliL3NoYWRlcnMiKSxoPXQoImdsLWNvbmUzZCIpLmNyZWF0ZU1lc2g7ZS5leHBvcnRzLmNyZWF0ZVR1YmVNZXNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLHtzaGFkZXJzOnUsdHJhY2VUeXBlOiJzdHJlYW10dWJlIn0pfX0seyIuL2xpYi9zaGFkZXJzIjozMjIsImdsLWNvbmUzZCI6MjU5LCJnbC12ZWMzIjozNTEsImdsLXZlYzQiOjM4N31dLDMyNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2xzbGlmeSIpLGE9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHV2O1xuYXR0cmlidXRlIHZlYzMgZjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSB2ZWMzIG9iamVjdE9mZnNldDtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbiwgaW52ZXJzZU1vZGVsO1xudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb24sIGV5ZVBvc2l0aW9uO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGxvY2FsQ29vcmRpbmF0ZSA9IHZlYzModXYuencsIGYueCk7XG4gIHdvcmxkQ29vcmRpbmF0ZSA9IG9iamVjdE9mZnNldCArIGxvY2FsQ29vcmRpbmF0ZTtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHdvcmxkQ29vcmRpbmF0ZSwgMS4wKTtcbiAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICBraWxsID0gZi55O1xuICB2YWx1ZSA9IGYuejtcbiAgcGxhbmVDb29yZGluYXRlID0gdXYueHk7XG5cbiAgdkNvbG9yID0gdGV4dHVyZTJEKGNvbG9ybWFwLCB2ZWMyKHZhbHVlLCB2YWx1ZSkpO1xuXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgY2FtZXJhQ29vcmRpbmF0ZS54eXogLz0gY2FtZXJhQ29vcmRpbmF0ZS53O1xuICBsaWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBzdXJmYWNlTm9ybWFsICA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG59XG4iXSksbz1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBiZWNrbWFublNwZWN1bGFyKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzKSB7XG4gIHJldHVybiBiZWNrbWFubkRpc3RyaWJ1dGlvbihkb3Qoc3VyZmFjZU5vcm1hbCwgbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbikpLCByb3VnaG5lc3MpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGxvd2VyQm91bmQsIHVwcGVyQm91bmQ7XG51bmlmb3JtIGZsb2F0IGNvbnRvdXJUaW50O1xudW5pZm9ybSB2ZWM0IGNvbnRvdXJDb2xvcjtcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcywgZnJlc25lbCwga2FtYmllbnQsIGtkaWZmdXNlLCBrc3BlY3VsYXIsIG9wYWNpdHk7XG51bmlmb3JtIGZsb2F0IHZlcnRleENvbG9yO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAoXG4gICAga2lsbCA+IDAuMCB8fFxuICAgIHZDb2xvci5hID09IDAuMCB8fFxuICAgIG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRDb29yZGluYXRlKVxuICApIGRpc2NhcmQ7XG5cbiAgdmVjMyBOID0gbm9ybWFsaXplKHN1cmZhY2VOb3JtYWwpO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZXllRGlyZWN0aW9uKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWF4KGJlY2ttYW5uU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzKSwgMC4pO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICAvL2RlY2lkZSBob3cgdG8gaW50ZXJwb2xhdGUgY29sb3IgXHUyMDE0IGluIHZlcnRleCBvciBpbiBmcmFnbWVudFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9XG4gICAgc3RlcCh2ZXJ0ZXhDb2xvciwgLjUpICogdGV4dHVyZTJEKGNvbG9ybWFwLCB2ZWMyKHZhbHVlLCB2YWx1ZSkpICtcbiAgICBzdGVwKC41LCB2ZXJ0ZXhDb2xvcikgKiB2Q29sb3I7XG5cbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IG1peChsaXRDb2xvciwgY29udG91ckNvbG9yLCBjb250b3VyVGludCkgKiBvcGFjaXR5O1xufVxuIl0pLHM9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHV2O1xuYXR0cmlidXRlIGZsb2F0IGY7XG5cbnVuaWZvcm0gdmVjMyBvYmplY3RPZmZzZXQ7XG51bmlmb3JtIG1hdDMgcGVybXV0YXRpb247XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IGhlaWdodCwgek9mZnNldDtcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBkYXRhQ29vcmRpbmF0ZSA9IHBlcm11dGF0aW9uICogdmVjMyh1di54eSwgaGVpZ2h0KTtcbiAgd29ybGRDb29yZGluYXRlID0gb2JqZWN0T2Zmc2V0ICsgZGF0YUNvb3JkaW5hdGU7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNCh3b3JsZENvb3JkaW5hdGUsIDEuMCk7XG5cbiAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGNsaXBQb3NpdGlvbi56ICs9IHpPZmZzZXQ7XG5cbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gIHZhbHVlID0gZiArIG9iamVjdE9mZnNldC56O1xuICBraWxsID0gLTEuMDtcbiAgcGxhbmVDb29yZGluYXRlID0gdXYuenc7XG5cbiAgdkNvbG9yID0gdGV4dHVyZTJEKGNvbG9ybWFwLCB2ZWMyKHZhbHVlLCB2YWx1ZSkpO1xuXG4gIC8vRG9uJ3QgZG8gbGlnaHRpbmcgZm9yIGNvbnRvdXJzXG4gIHN1cmZhY2VOb3JtYWwgICA9IHZlYzMoMSwwLDApO1xuICBleWVEaXJlY3Rpb24gICAgPSB2ZWMzKDAsMSwwKTtcbiAgbGlnaHREaXJlY3Rpb24gID0gdmVjMygwLDAsMSk7XG59XG4iXSksbD1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMiBzaGFwZTtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBzdXJmYWNlTm9ybWFsO1xuXG52ZWMyIHNwbGl0RmxvYXQoZmxvYXQgdikge1xuICBmbG9hdCB2aCA9IDI1NS4wICogdjtcbiAgZmxvYXQgdXBwZXIgPSBmbG9vcih2aCk7XG4gIGZsb2F0IGxvd2VyID0gZnJhY3QodmgpO1xuICByZXR1cm4gdmVjMih1cHBlciAvIDI1NS4wLCBmbG9vcihsb3dlciAqIDE2LjApIC8gMTYuMCk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKChraWxsID4gMC4wKSB8fFxuICAgICAgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgd29ybGRDb29yZGluYXRlKSkpIGRpc2NhcmQ7XG5cbiAgdmVjMiB1eCA9IHNwbGl0RmxvYXQocGxhbmVDb29yZGluYXRlLnggLyBzaGFwZS54KTtcbiAgdmVjMiB1eSA9IHNwbGl0RmxvYXQocGxhbmVDb29yZGluYXRlLnkgLyBzaGFwZS55KTtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIHV4LngsIHV5LngsIHV4LnkgKyAodXkueS8xNi4wKSk7XG59XG4iXSk7ci5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGEsbyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MixlfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGEsbCxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MixlfSxyLmNyZWF0ZUNvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LHMsbyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToiZmxvYXQifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9LHIuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LHMsbCxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToiZmxvYXQifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9fSx7ImdsLXNoYWRlciI6MzEyLGdsc2xpZnk6NDEzfV0sMzI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9eShlKSxuPWIoZSkscz14KGUpLGw9XyhlKSxjPWkoZSksdT1hKGUsW3tidWZmZXI6YyxzaXplOjQsc3RyaWRlOjQwLG9mZnNldDowfSx7YnVmZmVyOmMsc2l6ZTozLHN0cmlkZTo0MCxvZmZzZXQ6MTZ9LHtidWZmZXI6YyxzaXplOjMsc3RyaWRlOjQwLG9mZnNldDoyOH1dKSxoPWkoZSksZj1hKGUsW3tidWZmZXI6aCxzaXplOjQsc3RyaWRlOjIwLG9mZnNldDowfSx7YnVmZmVyOmgsc2l6ZToxLHN0cmlkZToyMCxvZmZzZXQ6MTZ9XSkscD1pKGUpLGQ9YShlLFt7YnVmZmVyOnAsc2l6ZToyLHR5cGU6ZS5GTE9BVH1dKSxnPW8oZSwxLDI1NixlLlJHQkEsZS5VTlNJR05FRF9CWVRFKTtnLm1pbkZpbHRlcj1lLkxJTkVBUixnLm1hZ0ZpbHRlcj1lLkxJTkVBUjt2YXIgbT1uZXcgQShlLFswLDBdLFtbMCwwLDBdLFswLDAsMF1dLHIsbixjLHUsZyxzLGwsaCxmLHAsZCxbMCwwLDBdKSx2PXtsZXZlbHM6W1tdLFtdLFtdXX07Zm9yKHZhciB3IGluIHQpdlt3XT10W3ddO3JldHVybiB2LmNvbG9ybWFwPXYuY29sb3JtYXB8fCJqZXQiLG0udXBkYXRlKHYpLG19O3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJ0eXBlZGFycmF5LXBvb2wiKSxsPXQoImNvbG9ybWFwIiksYz10KCJuZGFycmF5LW9wcyIpLHU9dCgibmRhcnJheS1wYWNrIiksaD10KCJuZGFycmF5IiksZj10KCJzdXJmYWNlLW5ldHMiKSxwPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxkPXQoImdsLW1hdDQvaW52ZXJ0IiksZz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLG09dCgibmRhcnJheS1ncmFkaWVudCIpLHY9dCgiLi9saWIvc2hhZGVycyIpLHk9di5jcmVhdGVTaGFkZXIseD12LmNyZWF0ZUNvbnRvdXJTaGFkZXIsYj12LmNyZWF0ZVBpY2tTaGFkZXIsXz12LmNyZWF0ZVBpY2tDb250b3VyU2hhZGVyLHc9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLFQ9W1swLDBdLFswLDFdLFsxLDBdLFsxLDFdLFsxLDBdLFswLDFdXSxrPVtbMCwwLDAsMCwwLDAsMCwwLDBdLFswLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXV07ZnVuY3Rpb24gTSh0LGUscixuLGkpe3RoaXMucG9zaXRpb249dCx0aGlzLmluZGV4PWUsdGhpcy51dj1yLHRoaXMubGV2ZWw9bix0aGlzLmRhdGFDb29yZGluYXRlPWl9IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzOysrdCl7dmFyIGU9a1t0XSxyPSh0KzIpJTM7ZVsodCsxKSUzKzBdPTEsZVtyKzNdPTEsZVt0KzZdPTF9fSgpO2Z1bmN0aW9uIEEodCxlLHIsbixpLGEsbyxsLGMsdSxmLHAsZCxnLG0pe3RoaXMuZ2w9dCx0aGlzLnNoYXBlPWUsdGhpcy5ib3VuZHM9cix0aGlzLm9iamVjdE9mZnNldD1tLHRoaXMuaW50ZW5zaXR5Qm91bmRzPVtdLHRoaXMuX3NoYWRlcj1uLHRoaXMuX3BpY2tTaGFkZXI9aSx0aGlzLl9jb29yZGluYXRlQnVmZmVyPWEsdGhpcy5fdmFvPW8sdGhpcy5fY29sb3JNYXA9bCx0aGlzLl9jb250b3VyU2hhZGVyPWMsdGhpcy5fY29udG91clBpY2tTaGFkZXI9dSx0aGlzLl9jb250b3VyQnVmZmVyPWYsdGhpcy5fY29udG91clZBTz1wLHRoaXMuX2NvbnRvdXJPZmZzZXRzPVtbXSxbXSxbXV0sdGhpcy5fY29udG91ckNvdW50cz1bW10sW10sW11dLHRoaXMuX3ZlcnRleENvdW50PTAsdGhpcy5fcGlja1Jlc3VsdD1uZXcgTShbMCwwLDBdLFswLDBdLFswLDBdLFswLDAsMF0sWzAsMCwwXSksdGhpcy5fZHluYW1pY0J1ZmZlcj1kLHRoaXMuX2R5bmFtaWNWQU89Zyx0aGlzLl9keW5hbWljT2Zmc2V0cz1bMCwwLDBdLHRoaXMuX2R5bmFtaWNDb3VudHM9WzAsMCwwXSx0aGlzLmNvbnRvdXJXaWR0aD1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bWzFdLFsxXSxbMV1dLHRoaXMuY29udG91clRpbnQ9WzAsMCwwXSx0aGlzLmNvbnRvdXJDb2xvcj1bWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV1dLHRoaXMuc2hvd0NvbnRvdXI9ITAsdGhpcy5zaG93U3VyZmFjZT0hMCx0aGlzLmVuYWJsZUhpZ2hsaWdodD1bITAsITAsITBdLHRoaXMuaGlnaGxpZ2h0Q29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmhpZ2hsaWdodFRpbnQ9WzEsMSwxXSx0aGlzLmhpZ2hsaWdodExldmVsPVstMSwtMSwtMV0sdGhpcy5lbmFibGVEeW5hbWljPVshMCwhMCwhMF0sdGhpcy5keW5hbWljTGV2ZWw9W05hTixOYU4sTmFOXSx0aGlzLmR5bmFtaWNDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZHluYW1pY1RpbnQ9WzEsMSwxXSx0aGlzLmR5bmFtaWNXaWR0aD1bMSwxLDFdLHRoaXMuYXhlc0JvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLnN1cmZhY2VQcm9qZWN0PVshMSwhMSwhMV0sdGhpcy5jb250b3VyUHJvamVjdD1bWyExLCExLCExXSxbITEsITEsITFdLFshMSwhMSwhMV1dLHRoaXMuY29sb3JCb3VuZHM9WyExLCExXSx0aGlzLl9maWVsZD1baChzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKSxoKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pLGgocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSldLHRoaXMucGlja0lkPTEsdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuc25hcFRvRGF0YT0hMSx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLm9wYWNpdHk9MSx0aGlzLmxpZ2h0UG9zaXRpb249WzEwLDFlNCwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMudmVydGV4Q29sb3I9MCx0aGlzLmRpcnR5PSEwfXZhciBTPUEucHJvdG90eXBlO1MuZ2VuQ29sb3JtYXA9ZnVuY3Rpb24odCxlKXt2YXIgcj0hMSxuPXUoW2woe2NvbG9ybWFwOnQsbnNoYWRlczoyNTYsZm9ybWF0OiJyZ2JhIn0pLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgaT1lP2Z1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIDE7aWYoIWUubGVuZ3RoKXJldHVybiAxO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKXtpZihlLmxlbmd0aDwyKXJldHVybiAxO2lmKGVbcl1bMF09PT10KXJldHVybiBlW3JdWzFdO2lmKGVbcl1bMF0+dCYmcj4wKXt2YXIgbj0oZVtyXVswXS10KS8oZVtyXVswXS1lW3ItMV1bMF0pO3JldHVybiBlW3JdWzFdKigxLW4pK24qZVtyLTFdWzFdfX1yZXR1cm4gMX0obi8yNTUsZSk6dFszXTtyZXR1cm4gaTwxJiYocj0hMCksW3RbMF0sdFsxXSx0WzJdLDI1NSppXX0pKV0pO3JldHVybiBjLmRpdnNlcShuLDI1NSksdGhpcy5oYXNBbHBoYVNjYWxlPXIsbn0sUy5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfHx0aGlzLmhhc0FscGhhU2NhbGV9LFMuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc1RyYW5zcGFyZW50KCl9LFMucGlja1Nsb3RzPTEsUy5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fTt2YXIgRT1bMCwwLDBdLEM9e3Nob3dTdXJmYWNlOiExLHNob3dDb250b3VyOiExLHByb2plY3Rpb25zOlt3LnNsaWNlKCksdy5zbGljZSgpLHcuc2xpY2UoKV0sY2xpcEJvdW5kczpbW1swLDAsMF0sWzAsMCwwXV0sW1swLDAsMF0sWzAsMCwwXV0sW1swLDAsMF0sWzAsMCwwXV1dfTtmdW5jdGlvbiBMKHQsZSl7dmFyIHIsbixpLGE9ZS5heGVzJiZlLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzfHxFLG89ZS5zaG93U3VyZmFjZSxzPWUuc2hvd0NvbnRvdXI7Zm9yKHI9MDtyPDM7KytyKWZvcihvPW98fGUuc3VyZmFjZVByb2plY3Rbcl0sbj0wO248MzsrK24pcz1zfHxlLmNvbnRvdXJQcm9qZWN0W3JdW25dO2ZvcihyPTA7cjwzOysrcil7dmFyIGw9Qy5wcm9qZWN0aW9uc1tyXTtmb3Iobj0wO248MTY7KytuKWxbbl09MDtmb3Iobj0wO248NDsrK24pbFs1Km5dPTE7bFs1KnJdPTAsbFsxMityXT1lLmF4ZXNCb3VuZHNbKyhhW3JdPjApXVtyXSxwKGwsdC5tb2RlbCxsKTt2YXIgYz1DLmNsaXBCb3VuZHNbcl07Zm9yKGk9MDtpPDI7KytpKWZvcihuPTA7bjwzOysrbiljW2ldW25dPXQuY2xpcEJvdW5kc1tpXVtuXTtjWzBdW3JdPS0xZTgsY1sxXVtyXT0xZTh9cmV0dXJuIEMuc2hvd1N1cmZhY2U9byxDLnNob3dDb250b3VyPXMsQ312YXIgUD17bW9kZWw6dyx2aWV3OncscHJvamVjdGlvbjp3LGludmVyc2VNb2RlbDp3LnNsaWNlKCksbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSxjb2xvck1hcDowLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsY29udG91clRpbnQ6MCxjb250b3VyQ29sb3I6WzAsMCwwLDFdLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sek9mZnNldDotMWUtNCxvYmplY3RPZmZzZXQ6WzAsMCwwXSxrYW1iaWVudDoxLGtkaWZmdXNlOjEsa3NwZWN1bGFyOjEsbGlnaHRQb3NpdGlvbjpbMWUzLDFlMywxZTNdLGV5ZVBvc2l0aW9uOlswLDAsMF0scm91Z2huZXNzOjEsZnJlc25lbDoxLG9wYWNpdHk6MSx2ZXJ0ZXhDb2xvcjowfSxJPXcuc2xpY2UoKSx6PVsxLDAsMCwwLDEsMCwwLDAsMV07ZnVuY3Rpb24gTyh0LGUpe3Q9dHx8e307dmFyIHI9dGhpcy5nbDtyLmRpc2FibGUoci5DVUxMX0ZBQ0UpLHRoaXMuX2NvbG9yTWFwLmJpbmQoMCk7dmFyIG49UDtuLm1vZGVsPXQubW9kZWx8fHcsbi52aWV3PXQudmlld3x8dyxuLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHx3LG4ubG93ZXJCb3VuZD1bdGhpcy5ib3VuZHNbMF1bMF0sdGhpcy5ib3VuZHNbMF1bMV0sdGhpcy5jb2xvckJvdW5kc1swXXx8dGhpcy5ib3VuZHNbMF1bMl1dLG4udXBwZXJCb3VuZD1bdGhpcy5ib3VuZHNbMV1bMF0sdGhpcy5ib3VuZHNbMV1bMV0sdGhpcy5jb2xvckJvdW5kc1sxXXx8dGhpcy5ib3VuZHNbMV1bMl1dLG4ub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LG4uY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yWzBdLG4uaW52ZXJzZU1vZGVsPWQobi5pbnZlcnNlTW9kZWwsbi5tb2RlbCk7Zm9yKHZhciBpPTA7aTwyOysraSlmb3IodmFyIGE9bi5jbGlwQm91bmRzW2ldLG89MDtvPDM7KytvKWFbb109TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW2ldW29dLC0xZTgpLDFlOCk7bi5rYW1iaWVudD10aGlzLmFtYmllbnRMaWdodCxuLmtkaWZmdXNlPXRoaXMuZGlmZnVzZUxpZ2h0LG4ua3NwZWN1bGFyPXRoaXMuc3BlY3VsYXJMaWdodCxuLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyxuLmZyZXNuZWw9dGhpcy5mcmVzbmVsLG4ub3BhY2l0eT10aGlzLm9wYWNpdHksbi5oZWlnaHQ9MCxuLnBlcm11dGF0aW9uPXosbi52ZXJ0ZXhDb2xvcj10aGlzLnZlcnRleENvbG9yO3ZhciBzPUk7Zm9yKHAocyxuLnZpZXcsbi5tb2RlbCkscChzLG4ucHJvamVjdGlvbixzKSxkKHMscyksaT0wO2k8MzsrK2kpbi5leWVQb3NpdGlvbltpXT1zWzEyK2ldL3NbMTVdO3ZhciBsPXNbMTVdO2ZvcihpPTA7aTwzOysraSlsKz10aGlzLmxpZ2h0UG9zaXRpb25baV0qc1s0KmkrM107Zm9yKGk9MDtpPDM7KytpKXt2YXIgYz1zWzEyK2ldO2ZvcihvPTA7bzwzOysrbyljKz1zWzQqbytpXSp0aGlzLmxpZ2h0UG9zaXRpb25bb107bi5saWdodFBvc2l0aW9uW2ldPWMvbH12YXIgdT1MKG4sdGhpcyk7aWYodS5zaG93U3VyZmFjZSl7Zm9yKHRoaXMuX3NoYWRlci5iaW5kKCksdGhpcy5fc2hhZGVyLnVuaWZvcm1zPW4sdGhpcy5fdmFvLmJpbmQoKSx0aGlzLnNob3dTdXJmYWNlJiZ0aGlzLl92ZXJ0ZXhDb3VudCYmdGhpcy5fdmFvLmRyYXcoci5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpLGk9MDtpPDM7KytpKXRoaXMuc3VyZmFjZVByb2plY3RbaV0mJnRoaXMudmVydGV4Q291bnQmJih0aGlzLl9zaGFkZXIudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tpXSx0aGlzLl9zaGFkZXIudW5pZm9ybXMuY2xpcEJvdW5kcz11LmNsaXBCb3VuZHNbaV0sdGhpcy5fdmFvLmRyYXcoci5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpKTt0aGlzLl92YW8udW5iaW5kKCl9aWYodS5zaG93Q29udG91cil7dmFyIGg9dGhpcy5fY29udG91clNoYWRlcjtuLmthbWJpZW50PTEsbi5rZGlmZnVzZT0wLG4ua3NwZWN1bGFyPTAsbi5vcGFjaXR5PTEsaC5iaW5kKCksaC51bmlmb3Jtcz1uO3ZhciBmPXRoaXMuX2NvbnRvdXJWQU87Zm9yKGYuYmluZCgpLGk9MDtpPDM7KytpKWZvcihoLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbaV0sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbaV0qdGhpcy5waXhlbFJhdGlvKSxvPTA7bzx0aGlzLmNvbnRvdXJMZXZlbHNbaV0ubGVuZ3RoOysrbylvPT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXT8oaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5oaWdobGlnaHRDb2xvcltpXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuaGlnaGxpZ2h0VGludFtpXSk6MCE9PW8mJm8tMSE9PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbaV18fChoLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvcltpXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuY29udG91clRpbnRbaV0pLHRoaXMuX2NvbnRvdXJDb3VudHNbaV1bb10mJihoLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbaV1bb10sZi5kcmF3KHIuTElORVMsdGhpcy5fY29udG91ckNvdW50c1tpXVtvXSx0aGlzLl9jb250b3VyT2Zmc2V0c1tpXVtvXSkpO2ZvcihpPTA7aTwzOysraSlmb3IoaC51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2ldLGgudW5pZm9ybXMuY2xpcEJvdW5kcz11LmNsaXBCb3VuZHNbaV0sbz0wO288MzsrK28paWYodGhpcy5jb250b3VyUHJvamVjdFtpXVtvXSl7aC51bmlmb3Jtcy5wZXJtdXRhdGlvbj1rW29dLHIubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW29dKnRoaXMucGl4ZWxSYXRpbyk7Zm9yKHZhciBnPTA7Zzx0aGlzLmNvbnRvdXJMZXZlbHNbb10ubGVuZ3RoOysrZylnPT09dGhpcy5oaWdobGlnaHRMZXZlbFtvXT8oaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5oaWdobGlnaHRDb2xvcltvXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuaGlnaGxpZ2h0VGludFtvXSk6MCE9PWcmJmctMSE9PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbb118fChoLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvcltvXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuY29udG91clRpbnRbb10pLHRoaXMuX2NvbnRvdXJDb3VudHNbb11bZ10mJihoLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbb11bZ10sZi5kcmF3KHIuTElORVMsdGhpcy5fY29udG91ckNvdW50c1tvXVtnXSx0aGlzLl9jb250b3VyT2Zmc2V0c1tvXVtnXSkpfWZvcihmLnVuYmluZCgpLChmPXRoaXMuX2R5bmFtaWNWQU8pLmJpbmQoKSxpPTA7aTwzOysraSlpZigwIT09dGhpcy5fZHluYW1pY0NvdW50c1tpXSlmb3IoaC51bmlmb3Jtcy5tb2RlbD1uLm1vZGVsLGgudW5pZm9ybXMuY2xpcEJvdW5kcz1uLmNsaXBCb3VuZHMsaC51bmlmb3Jtcy5wZXJtdXRhdGlvbj1rW2ldLHIubGluZVdpZHRoKHRoaXMuZHluYW1pY1dpZHRoW2ldKnRoaXMucGl4ZWxSYXRpbyksaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5keW5hbWljQ29sb3JbaV0saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmR5bmFtaWNUaW50W2ldLGgudW5pZm9ybXMuaGVpZ2h0PXRoaXMuZHluYW1pY0xldmVsW2ldLGYuZHJhdyhyLkxJTkVTLHRoaXMuX2R5bmFtaWNDb3VudHNbaV0sdGhpcy5fZHluYW1pY09mZnNldHNbaV0pLG89MDtvPDM7KytvKXRoaXMuY29udG91clByb2plY3Rbb11baV0mJihoLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbb10saC51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tvXSxmLmRyYXcoci5MSU5FUyx0aGlzLl9keW5hbWljQ291bnRzW2ldLHRoaXMuX2R5bmFtaWNPZmZzZXRzW2ldKSk7Zi51bmJpbmQoKX19Uy5kcmF3PWZ1bmN0aW9uKHQpe3JldHVybiBPLmNhbGwodGhpcyx0LCExKX0sUy5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIE8uY2FsbCh0aGlzLHQsITApfTt2YXIgRD17bW9kZWw6dyx2aWV3OncscHJvamVjdGlvbjp3LGludmVyc2VNb2RlbDp3LGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsc2hhcGU6WzAsMF0scGlja0lkOjAsbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSx6T2Zmc2V0OjAsb2JqZWN0T2Zmc2V0OlswLDAsMF0scGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sZXllUG9zaXRpb246WzAsMCwwXX07ZnVuY3Rpb24gUih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP1tlKHRbMF0pLGUodFsxXSksZSh0WzJdKV06W2UodCksZSh0KSxlKHQpXX1mdW5jdGlvbiBGKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPzM9PT10Lmxlbmd0aD9bdFswXSx0WzFdLHRbMl0sMV06W3RbMF0sdFsxXSx0WzJdLHRbM11dOlswLDAsMCwxXX1mdW5jdGlvbiBCKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuW0YodFswXSksRih0WzFdKSxGKHRbMl0pXTt2YXIgZT1GKHQpO3JldHVybltlLnNsaWNlKCksZS5zbGljZSgpLGUuc2xpY2UoKV19fVMuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO2UuZGlzYWJsZShlLkNVTExfRkFDRSk7dmFyIHI9RDtyLm1vZGVsPXQubW9kZWx8fHcsci52aWV3PXQudmlld3x8dyxyLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHx3LHIuc2hhcGU9dGhpcy5fZmllbGRbMl0uc2hhcGUsci5waWNrSWQ9dGhpcy5waWNrSWQvMjU1LHIubG93ZXJCb3VuZD10aGlzLmJvdW5kc1swXSxyLnVwcGVyQm91bmQ9dGhpcy5ib3VuZHNbMV0sci5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsci5wZXJtdXRhdGlvbj16O2Zvcih2YXIgbj0wO248MjsrK24pZm9yKHZhciBpPXIuY2xpcEJvdW5kc1tuXSxhPTA7YTwzOysrYSlpW2FdPU1hdGgubWluKE1hdGgubWF4KHRoaXMuY2xpcEJvdW5kc1tuXVthXSwtMWU4KSwxZTgpO3ZhciBvPUwocix0aGlzKTtpZihvLnNob3dTdXJmYWNlKXtmb3IodGhpcy5fcGlja1NoYWRlci5iaW5kKCksdGhpcy5fcGlja1NoYWRlci51bmlmb3Jtcz1yLHRoaXMuX3Zhby5iaW5kKCksdGhpcy5fdmFvLmRyYXcoZS5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpLG49MDtuPDM7KytuKXRoaXMuc3VyZmFjZVByb2plY3Rbbl0mJih0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLm1vZGVsPW8ucHJvamVjdGlvbnNbbl0sdGhpcy5fcGlja1NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPW8uY2xpcEJvdW5kc1tuXSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZihvLnNob3dDb250b3VyKXt2YXIgcz10aGlzLl9jb250b3VyUGlja1NoYWRlcjtzLmJpbmQoKSxzLnVuaWZvcm1zPXI7dmFyIGw9dGhpcy5fY29udG91clZBTztmb3IobC5iaW5kKCksYT0wO2E8MzsrK2EpZm9yKGUubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW2FdKnRoaXMucGl4ZWxSYXRpbykscy51bmlmb3Jtcy5wZXJtdXRhdGlvbj1rW2FdLG49MDtuPHRoaXMuY29udG91ckxldmVsc1thXS5sZW5ndGg7KytuKXRoaXMuX2NvbnRvdXJDb3VudHNbYV1bbl0mJihzLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbYV1bbl0sbC5kcmF3KGUuTElORVMsdGhpcy5fY29udG91ckNvdW50c1thXVtuXSx0aGlzLl9jb250b3VyT2Zmc2V0c1thXVtuXSkpO2ZvcihuPTA7bjwzOysrbilmb3Iocy51bmlmb3Jtcy5tb2RlbD1vLnByb2plY3Rpb25zW25dLHMudW5pZm9ybXMuY2xpcEJvdW5kcz1vLmNsaXBCb3VuZHNbbl0sYT0wO2E8MzsrK2EpaWYodGhpcy5jb250b3VyUHJvamVjdFtuXVthXSl7cy51bmlmb3Jtcy5wZXJtdXRhdGlvbj1rW2FdLGUubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW2FdKnRoaXMucGl4ZWxSYXRpbyk7Zm9yKHZhciBjPTA7Yzx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrYyl0aGlzLl9jb250b3VyQ291bnRzW2FdW2NdJiYocy51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW2NdLGwuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10sdGhpcy5fY29udG91ck9mZnNldHNbYV1bY10pKX1sLnVuYmluZCgpfX0sUy5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyPXRoaXMuX3BpY2tSZXN1bHQsbj1lWzBdKih0LnZhbHVlWzBdKyh0LnZhbHVlWzJdPj40KS8xNikvMjU1LGk9TWF0aC5mbG9vcihuKSxhPW4taSxvPWVbMV0qKHQudmFsdWVbMV0rKDE1JnQudmFsdWVbMl0pLzE2KS8yNTUscz1NYXRoLmZsb29yKG8pLGw9by1zO2krPTEscys9MTt2YXIgYz1yLnBvc2l0aW9uO2NbMF09Y1sxXT1jWzJdPTA7Zm9yKHZhciB1PTA7dTwyOysrdSlmb3IodmFyIGg9dT9hOjEtYSxmPTA7ZjwyOysrZilmb3IodmFyIHA9aSt1LGQ9cytmLG09aCooZj9sOjEtbCksdj0wO3Y8MzsrK3YpY1t2XSs9dGhpcy5fZmllbGRbdl0uZ2V0KHAsZCkqbTtmb3IodmFyIHk9dGhpcy5fcGlja1Jlc3VsdC5sZXZlbCx4PTA7eDwzOysreClpZih5W3hdPWcubGUodGhpcy5jb250b3VyTGV2ZWxzW3hdLGNbeF0pLHlbeF08MCl0aGlzLmNvbnRvdXJMZXZlbHNbeF0ubGVuZ3RoPjAmJih5W3hdPTApO2Vsc2UgaWYoeVt4XTx0aGlzLmNvbnRvdXJMZXZlbHNbeF0ubGVuZ3RoLTEpe3ZhciBiPXRoaXMuY29udG91ckxldmVsc1t4XVt5W3hdXSxfPXRoaXMuY29udG91ckxldmVsc1t4XVt5W3hdKzFdO01hdGguYWJzKGItY1t4XSk+TWF0aC5hYnMoXy1jW3hdKSYmKHlbeF0rPTEpfWZvcihyLmluZGV4WzBdPWE8LjU/aTppKzEsci5pbmRleFsxXT1sPC41P3M6cysxLHIudXZbMF09bi9lWzBdLHIudXZbMV09by9lWzFdLHY9MDt2PDM7Kyt2KXIuZGF0YUNvb3JkaW5hdGVbdl09dGhpcy5fZmllbGRbdl0uZ2V0KHIuaW5kZXhbMF0sci5pbmRleFsxXSk7cmV0dXJuIHJ9LFMucGFkRmllbGQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNoYXBlLnNsaWNlKCksbj10LnNoYXBlLnNsaWNlKCk7Yy5hc3NpZ24odC5sbygxLDEpLmhpKHJbMF0sclsxXSksZSksYy5hc3NpZ24odC5sbygxKS5oaShyWzBdLDEpLGUuaGkoclswXSwxKSksYy5hc3NpZ24odC5sbygxLG5bMV0tMSkuaGkoclswXSwxKSxlLmxvKDAsclsxXS0xKS5oaShyWzBdLDEpKSxjLmFzc2lnbih0LmxvKDAsMSkuaGkoMSxyWzFdKSxlLmhpKDEpKSxjLmFzc2lnbih0LmxvKG5bMF0tMSwxKS5oaSgxLHJbMV0pLGUubG8oclswXS0xKSksdC5zZXQoMCwwLGUuZ2V0KDAsMCkpLHQuc2V0KDAsblsxXS0xLGUuZ2V0KDAsclsxXS0xKSksdC5zZXQoblswXS0xLDAsZS5nZXQoclswXS0xLDApKSx0LnNldChuWzBdLTEsblsxXS0xLGUuZ2V0KHJbMF0tMSxyWzFdLTEpKX0sUy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLm9iamVjdE9mZnNldD10Lm9iamVjdE9mZnNldHx8dGhpcy5vYmplY3RPZmZzZXQsdGhpcy5kaXJ0eT0hMCwiY29udG91cldpZHRoImluIHQmJih0aGlzLmNvbnRvdXJXaWR0aD1SKHQuY29udG91cldpZHRoLE51bWJlcikpLCJzaG93Q29udG91ciJpbiB0JiYodGhpcy5zaG93Q29udG91cj1SKHQuc2hvd0NvbnRvdXIsQm9vbGVhbikpLCJzaG93U3VyZmFjZSJpbiB0JiYodGhpcy5zaG93U3VyZmFjZT0hIXQuc2hvd1N1cmZhY2UpLCJjb250b3VyVGludCJpbiB0JiYodGhpcy5jb250b3VyVGludD1SKHQuY29udG91clRpbnQsQm9vbGVhbikpLCJjb250b3VyQ29sb3IiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPUIodC5jb250b3VyQ29sb3IpKSwiY29udG91clByb2plY3QiaW4gdCYmKHRoaXMuY29udG91clByb2plY3Q9Uih0LmNvbnRvdXJQcm9qZWN0LChmdW5jdGlvbih0KXtyZXR1cm4gUih0LEJvb2xlYW4pfSkpKSwic3VyZmFjZVByb2plY3QiaW4gdCYmKHRoaXMuc3VyZmFjZVByb2plY3Q9dC5zdXJmYWNlUHJvamVjdCksImR5bmFtaWNDb2xvciJpbiB0JiYodGhpcy5keW5hbWljQ29sb3I9Qih0LmR5bmFtaWNDb2xvcikpLCJkeW5hbWljVGludCJpbiB0JiYodGhpcy5keW5hbWljVGludD1SKHQuZHluYW1pY1RpbnQsTnVtYmVyKSksImR5bmFtaWNXaWR0aCJpbiB0JiYodGhpcy5keW5hbWljV2lkdGg9Uih0LmR5bmFtaWNXaWR0aCxOdW1iZXIpKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksIm9wYWNpdHlzY2FsZSJpbiB0JiYodGhpcy5vcGFjaXR5c2NhbGU9dC5vcGFjaXR5c2NhbGUpLCJjb2xvckJvdW5kcyJpbiB0JiYodGhpcy5jb2xvckJvdW5kcz10LmNvbG9yQm91bmRzKSwidmVydGV4Q29sb3IiaW4gdCYmKHRoaXMudmVydGV4Q29sb3I9dC52ZXJ0ZXhDb2xvcj8xOjApLCJjb2xvcm1hcCJpbiB0JiZ0aGlzLl9jb2xvck1hcC5zZXRQaXhlbHModGhpcy5nZW5Db2xvcm1hcCh0LmNvbG9ybWFwLHRoaXMub3BhY2l0eXNjYWxlKSk7dmFyIGU9dC5maWVsZHx8dC5jb29yZHMmJnQuY29vcmRzWzJdfHxudWxsLHI9ITE7aWYoZXx8KGU9dGhpcy5fZmllbGRbMl0uc2hhcGVbMF18fHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzJdP3RoaXMuX2ZpZWxkWzJdLmxvKDEsMSkuaGkodGhpcy5fZmllbGRbMl0uc2hhcGVbMF0tMix0aGlzLl9maWVsZFsyXS5zaGFwZVsxXS0yKTp0aGlzLl9maWVsZFsyXS5oaSgwLDApKSwiZmllbGQiaW4gdHx8ImNvb3JkcyJpbiB0KXt2YXIgaT0oZS5zaGFwZVswXSsyKSooZS5zaGFwZVsxXSsyKTtpPnRoaXMuX2ZpZWxkWzJdLmRhdGEubGVuZ3RoJiYocy5mcmVlRmxvYXQodGhpcy5fZmllbGRbMl0uZGF0YSksdGhpcy5fZmllbGRbMl0uZGF0YT1zLm1hbGxvY0Zsb2F0KG4ubmV4dFBvdzIoaSkpKSx0aGlzLl9maWVsZFsyXT1oKHRoaXMuX2ZpZWxkWzJdLmRhdGEsW2Uuc2hhcGVbMF0rMixlLnNoYXBlWzFdKzJdKSx0aGlzLnBhZEZpZWxkKHRoaXMuX2ZpZWxkWzJdLGUpLHRoaXMuc2hhcGU9ZS5zaGFwZS5zbGljZSgpO2Zvcih2YXIgYT10aGlzLnNoYXBlLG89MDtvPDI7KytvKXRoaXMuX2ZpZWxkWzJdLnNpemU+dGhpcy5fZmllbGRbb10uZGF0YS5sZW5ndGgmJihzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFtvXS5kYXRhKSx0aGlzLl9maWVsZFtvXS5kYXRhPXMubWFsbG9jRmxvYXQodGhpcy5fZmllbGRbMl0uc2l6ZSkpLHRoaXMuX2ZpZWxkW29dPWgodGhpcy5fZmllbGRbb10uZGF0YSxbYVswXSsyLGFbMV0rMl0pO2lmKHQuY29vcmRzKXt2YXIgbD10LmNvb3JkcztpZighQXJyYXkuaXNBcnJheShsKXx8MyE9PWwubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCBjb29yZGluYXRlcyBmb3IgeC95Iik7Zm9yKG89MDtvPDI7KytvKXt2YXIgYz1sW29dO2Zvcih2PTA7djwyOysrdilpZihjLnNoYXBlW3ZdIT09YVt2XSl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGNvb3JkcyBoYXZlIGluY29ycmVjdCBzaGFwZSIpO3RoaXMucGFkRmllbGQodGhpcy5fZmllbGRbb10sYyl9fWVsc2UgaWYodC50aWNrcyl7dmFyIHU9dC50aWNrcztpZighQXJyYXkuaXNBcnJheSh1KXx8MiE9PXUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrcyIpO2ZvcihvPTA7bzwyOysrbyl7dmFyIHA9dVtvXTtpZigoQXJyYXkuaXNBcnJheShwKXx8cC5sZW5ndGgpJiYocD1oKHApKSxwLnNoYXBlWzBdIT09YVtvXSl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgdGljayBsZW5ndGgiKTt2YXIgZD1oKHAuZGF0YSxhKTtkLnN0cmlkZVtvXT1wLnN0cmlkZVswXSxkLnN0cmlkZVsxXm9dPTAsdGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFtvXSxkKX19ZWxzZXtmb3Iobz0wO288MjsrK28pe3ZhciBnPVswLDBdO2dbb109MSx0aGlzLl9maWVsZFtvXT1oKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdLGcsMCl9dGhpcy5fZmllbGRbMF0uc2V0KDAsMCwwKTtmb3IodmFyIHY9MDt2PGFbMF07Kyt2KXRoaXMuX2ZpZWxkWzBdLnNldCh2KzEsMCx2KTtmb3IodGhpcy5fZmllbGRbMF0uc2V0KGFbMF0rMSwwLGFbMF0tMSksdGhpcy5fZmllbGRbMV0uc2V0KDAsMCwwKSx2PTA7djxhWzFdOysrdil0aGlzLl9maWVsZFsxXS5zZXQoMCx2KzEsdik7dGhpcy5fZmllbGRbMV0uc2V0KDAsYVsxXSsxLGFbMV0tMSl9dmFyIHk9dGhpcy5fZmllbGQseD1oKHMubWFsbG9jRmxvYXQoMyp5WzJdLnNpemUqMiksWzMsYVswXSsyLGFbMV0rMiwyXSk7Zm9yKG89MDtvPDM7KytvKW0oeC5waWNrKG8pLHlbb10sIm1pcnJvciIpO3ZhciBiPWgocy5tYWxsb2NGbG9hdCgzKnlbMl0uc2l6ZSksW2FbMF0rMixhWzFdKzIsM10pO2ZvcihvPTA7bzxhWzBdKzI7KytvKWZvcih2PTA7djxhWzFdKzI7Kyt2KXt2YXIgXz14LmdldCgwLG8sdiwwKSx3PXguZ2V0KDAsbyx2LDEpLGs9eC5nZXQoMSxvLHYsMCksTT14LmdldCgxLG8sdiwxKSxBPXguZ2V0KDIsbyx2LDApLFM9eC5nZXQoMixvLHYsMSksRT1rKlMtTSpBLEM9QSp3LVMqXyxMPV8qTS13KmssUD1NYXRoLnNxcnQoRSpFK0MqQytMKkwpO1A8MWUtOD8oUD1NYXRoLm1heChNYXRoLmFicyhFKSxNYXRoLmFicyhDKSxNYXRoLmFicyhMKSkpPDFlLTg/KEw9MSxDPUU9MCxQPTEpOlA9MS9QOlA9MS9NYXRoLnNxcnQoUCksYi5zZXQobyx2LDAsRSpQKSxiLnNldChvLHYsMSxDKlApLGIuc2V0KG8sdiwyLEwqUCl9cy5mcmVlKHguZGF0YSk7dmFyIEk9WzEvMCwxLzAsMS8wXSx6PVstMS8wLC0xLzAsLTEvMF0sTz0xLzAsRD0tMS8wLEY9KGFbMF0tMSkqKGFbMV0tMSkqNixOPXMubWFsbG9jRmxvYXQobi5uZXh0UG93MigxMCpGKSksaj0wLFU9MDtmb3Iobz0wO288YVswXS0xOysrbyl0OmZvcih2PTA7djxhWzFdLTE7Kyt2KXtmb3IodmFyIFY9MDtWPDI7KytWKWZvcih2YXIgcT0wO3E8MjsrK3EpZm9yKHZhciBIPTA7SDwzOysrSCl7dmFyIEc9dGhpcy5fZmllbGRbSF0uZ2V0KDErbytWLDErditxKTtpZihpc05hTihHKXx8IWlzRmluaXRlKEcpKWNvbnRpbnVlIHR9Zm9yKEg9MDtIPDY7KytIKXt2YXIgWT1vK1RbSF1bMF0sVz12K1RbSF1bMV0sWj10aGlzLl9maWVsZFswXS5nZXQoWSsxLFcrMSksWD10aGlzLl9maWVsZFsxXS5nZXQoWSsxLFcrMSk7Rz10aGlzLl9maWVsZFsyXS5nZXQoWSsxLFcrMSksRT1iLmdldChZKzEsVysxLDApLEM9Yi5nZXQoWSsxLFcrMSwxKSxMPWIuZ2V0KFkrMSxXKzEsMiksdC5pbnRlbnNpdHkmJihKPXQuaW50ZW5zaXR5LmdldChZLFcpKTt2YXIgSj10LmludGVuc2l0eT90LmludGVuc2l0eS5nZXQoWSxXKTpHK3RoaXMub2JqZWN0T2Zmc2V0WzJdO05baisrXT1ZLE5baisrXT1XLE5baisrXT1aLE5baisrXT1YLE5baisrXT1HLE5baisrXT0wLE5baisrXT1KLE5baisrXT1FLE5baisrXT1DLE5baisrXT1MLElbMF09TWF0aC5taW4oSVswXSxaK3RoaXMub2JqZWN0T2Zmc2V0WzBdKSxJWzFdPU1hdGgubWluKElbMV0sWCt0aGlzLm9iamVjdE9mZnNldFsxXSksSVsyXT1NYXRoLm1pbihJWzJdLEcrdGhpcy5vYmplY3RPZmZzZXRbMl0pLE89TWF0aC5taW4oTyxKKSx6WzBdPU1hdGgubWF4KHpbMF0sWit0aGlzLm9iamVjdE9mZnNldFswXSkselsxXT1NYXRoLm1heCh6WzFdLFgrdGhpcy5vYmplY3RPZmZzZXRbMV0pLHpbMl09TWF0aC5tYXgoelsyXSxHK3RoaXMub2JqZWN0T2Zmc2V0WzJdKSxEPU1hdGgubWF4KEQsSiksVSs9MX19Zm9yKHQuaW50ZW5zaXR5Qm91bmRzJiYoTz0rdC5pbnRlbnNpdHlCb3VuZHNbMF0sRD0rdC5pbnRlbnNpdHlCb3VuZHNbMV0pLG89NjtvPGo7bys9MTApTltvXT0oTltvXS1PKS8oRC1PKTt0aGlzLl92ZXJ0ZXhDb3VudD1VLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXIudXBkYXRlKE4uc3ViYXJyYXkoMCxqKSkscy5mcmVlRmxvYXQoTikscy5mcmVlKGIuZGF0YSksdGhpcy5ib3VuZHM9W0ksel0sdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHl8fHRoaXMuX2ZpZWxkWzJdLHRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdPT09TyYmdGhpcy5pbnRlbnNpdHlCb3VuZHNbMV09PT1EfHwocj0hMCksdGhpcy5pbnRlbnNpdHlCb3VuZHM9W08sRF19aWYoImxldmVscyJpbiB0KXt2YXIgSz10LmxldmVscztmb3IoSz1BcnJheS5pc0FycmF5KEtbMF0pP0suc2xpY2UoKTpbW10sW10sS10sbz0wO288MzsrK28pS1tvXT1LW29dLnNsaWNlKCksS1tvXS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7Zm9yKG89MDtvPDM7KytvKWZvcih2PTA7djxLW29dLmxlbmd0aDsrK3YpS1tvXVt2XS09dGhpcy5vYmplY3RPZmZzZXRbb107dDpmb3Iobz0wO288MzsrK28pe2lmKEtbb10ubGVuZ3RoIT09dGhpcy5jb250b3VyTGV2ZWxzW29dLmxlbmd0aCl7cj0hMDticmVha31mb3Iodj0wO3Y8S1tvXS5sZW5ndGg7Kyt2KWlmKEtbb11bdl0hPT10aGlzLmNvbnRvdXJMZXZlbHNbb11bdl0pe3I9ITA7YnJlYWsgdH19dGhpcy5jb250b3VyTGV2ZWxzPUt9aWYocil7eT10aGlzLl9maWVsZCxhPXRoaXMuc2hhcGU7Zm9yKHZhciBRPVtdLCQ9MDskPDM7KyskKXt2YXIgdHQ9dGhpcy5jb250b3VyTGV2ZWxzWyRdLGV0PVtdLHJ0PVtdLG50PVswLDAsMF07Zm9yKG89MDtvPHR0Lmxlbmd0aDsrK28pe3ZhciBpdD1mKHRoaXMuX2ZpZWxkWyRdLHR0W29dKTtldC5wdXNoKFEubGVuZ3RoLzV8MCksVT0wO3Q6Zm9yKHY9MDt2PGl0LmNlbGxzLmxlbmd0aDsrK3Ype3ZhciBhdD1pdC5jZWxsc1t2XTtmb3IoSD0wO0g8MjsrK0gpe3ZhciBvdD1pdC5wb3NpdGlvbnNbYXRbSF1dLHN0PW90WzBdLGx0PTB8TWF0aC5mbG9vcihzdCksY3Q9c3QtbHQsdXQ9b3RbMV0saHQ9MHxNYXRoLmZsb29yKHV0KSxmdD11dC1odCxwdD0hMTtlOmZvcih2YXIgZHQ9MDtkdDwzOysrZHQpe250W2R0XT0wO3ZhciBndD0oJCtkdCsxKSUzO2ZvcihWPTA7VjwyOysrVil7dmFyIG10PVY/Y3Q6MS1jdDtmb3IoWT0wfE1hdGgubWluKE1hdGgubWF4KGx0K1YsMCksYVswXSkscT0wO3E8MjsrK3Epe3ZhciB2dD1xP2Z0OjEtZnQ7aWYoVz0wfE1hdGgubWluKE1hdGgubWF4KGh0K3EsMCksYVsxXSksRz1kdDwyP3RoaXMuX2ZpZWxkW2d0XS5nZXQoWSxXKToodGhpcy5pbnRlbnNpdHkuZ2V0KFksVyktdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF0pLyh0aGlzLmludGVuc2l0eUJvdW5kc1sxXS10aGlzLmludGVuc2l0eUJvdW5kc1swXSksIWlzRmluaXRlKEcpfHxpc05hTihHKSl7cHQ9ITA7YnJlYWsgZX12YXIgeXQ9bXQqdnQ7bnRbZHRdKz15dCpHfX19aWYocHQpe2lmKEg+MCl7Zm9yKHZhciB4dD0wO3h0PDU7Kyt4dClRLnBvcCgpO1UtPTF9Y29udGludWUgdH1RLnB1c2gobnRbMF0sbnRbMV0sb3RbMF0sb3RbMV0sbnRbMl0pLFUrPTF9fXJ0LnB1c2goVSl9dGhpcy5fY29udG91ck9mZnNldHNbJF09ZXQsdGhpcy5fY29udG91ckNvdW50c1skXT1ydH12YXIgYnQ9cy5tYWxsb2NGbG9hdChRLmxlbmd0aCk7Zm9yKG89MDtvPFEubGVuZ3RoOysrbylidFtvXT1RW29dO3RoaXMuX2NvbnRvdXJCdWZmZXIudXBkYXRlKGJ0KSxzLmZyZWVGbG9hdChidCl9fSxTLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9zaGFkZXIuZGlzcG9zZSgpLHRoaXMuX3Zhby5kaXNwb3NlKCksdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci5kaXNwb3NlKCksdGhpcy5fY29sb3JNYXAuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl9keW5hbWljQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9keW5hbWljVkFPLmRpc3Bvc2UoKTtmb3IodmFyIHQ9MDt0PDM7Kyt0KXMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkW3RdLmRhdGEpfSxTLmhpZ2hsaWdodD1mdW5jdGlvbih0KXt2YXIgZSxyO2lmKCF0KXJldHVybiB0aGlzLl9keW5hbWljQ291bnRzPVswLDAsMF0sdGhpcy5keWFuYW1pY0xldmVsPVtOYU4sTmFOLE5hTl0sdm9pZCh0aGlzLmhpZ2hsaWdodExldmVsPVstMSwtMSwtMV0pO2ZvcihlPTA7ZTwzOysrZSl0aGlzLmVuYWJsZUhpZ2hsaWdodFtlXT90aGlzLmhpZ2hsaWdodExldmVsW2VdPXQubGV2ZWxbZV06dGhpcy5oaWdobGlnaHRMZXZlbFtlXT0tMTtmb3Iocj10aGlzLnNuYXBUb0RhdGE/dC5kYXRhQ29vcmRpbmF0ZTp0LnBvc2l0aW9uLGU9MDtlPDM7KytlKXJbZV0tPXRoaXMub2JqZWN0T2Zmc2V0W2VdO2lmKHRoaXMuZW5hYmxlRHluYW1pY1swXSYmclswXSE9PXRoaXMuZHluYW1pY0xldmVsWzBdfHx0aGlzLmVuYWJsZUR5bmFtaWNbMV0mJnJbMV0hPT10aGlzLmR5bmFtaWNMZXZlbFsxXXx8dGhpcy5lbmFibGVEeW5hbWljWzJdJiZyWzJdIT09dGhpcy5keW5hbWljTGV2ZWxbMl0pe2Zvcih2YXIgbj0wLGk9dGhpcy5zaGFwZSxhPXMubWFsbG9jRmxvYXQoMTIqaVswXSppWzFdKSxvPTA7bzwzOysrbylpZih0aGlzLmVuYWJsZUR5bmFtaWNbb10pe3RoaXMuZHluYW1pY0xldmVsW29dPXJbb107dmFyIGw9KG8rMSklMyxjPShvKzIpJTMsdT10aGlzLl9maWVsZFtvXSxoPXRoaXMuX2ZpZWxkW2xdLHA9dGhpcy5fZmllbGRbY10sZD1mKHUscltvXSksZz1kLmNlbGxzLG09ZC5wb3NpdGlvbnM7Zm9yKHRoaXMuX2R5bmFtaWNPZmZzZXRzW29dPW4sZT0wO2U8Zy5sZW5ndGg7KytlKWZvcih2YXIgdj1nW2VdLHk9MDt5PDI7Kyt5KXt2YXIgeD1tW3ZbeV1dLGI9K3hbMF0sXz0wfGIsdz0wfE1hdGgubWluKF8rMSxpWzBdKSxUPWItXyxrPTEtVCxNPSt4WzFdLEE9MHxNLFM9MHxNYXRoLm1pbihBKzEsaVsxXSksRT1NLUEsQz0xLUUsTD1rKkMsUD1rKkUsST1UKkMsej1UKkUsTz1MKmguZ2V0KF8sQSkrUCpoLmdldChfLFMpK0kqaC5nZXQodyxBKSt6KmguZ2V0KHcsUyksRD1MKnAuZ2V0KF8sQSkrUCpwLmdldChfLFMpK0kqcC5nZXQodyxBKSt6KnAuZ2V0KHcsUyk7aWYoaXNOYU4oTyl8fGlzTmFOKEQpKXt5JiYobi09MSk7YnJlYWt9YVsyKm4rMF09TyxhWzIqbisxXT1ELG4rPTF9dGhpcy5fZHluYW1pY0NvdW50c1tvXT1uLXRoaXMuX2R5bmFtaWNPZmZzZXRzW29dfWVsc2UgdGhpcy5keW5hbWljTGV2ZWxbb109TmFOLHRoaXMuX2R5bmFtaWNDb3VudHNbb109MDt0aGlzLl9keW5hbWljQnVmZmVyLnVwZGF0ZShhLnN1YmFycmF5KDAsMipuKSkscy5mcmVlRmxvYXQoYSl9fX0seyIuL2xpYi9zaGFkZXJzIjozMjQsImJpbmFyeS1zZWFyY2gtYm91bmRzIjo5NiwiYml0LXR3aWRkbGUiOjk3LGNvbG9ybWFwOjEzMSwiZ2wtYnVmZmVyIjoyNTgsImdsLW1hdDQvaW52ZXJ0IjoyNzgsImdsLW1hdDQvbXVsdGlwbHkiOjI4MCwiZ2wtdGV4dHVyZTJkIjozMjcsImdsLXZhbyI6MzMyLG5kYXJyYXk6NDY5LCJuZGFycmF5LWdyYWRpZW50Ijo0NjIsIm5kYXJyYXktb3BzIjo0NjQsIm5kYXJyYXktcGFjayI6NDY1LCJzdXJmYWNlLW5ldHMiOjU0MiwidHlwZWRhcnJheS1wb29sIjo1Njd9XSwzMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY3NzLWZvbnQiKSxpPXQoInBpY2stYnktYWxpYXMiKSxhPXQoInJlZ2wiKSxvPXQoImdsLXV0aWwvY29udGV4dCIpLHM9dCgiZXM2LXdlYWstbWFwIiksbD10KCJjb2xvci1ub3JtYWxpemUiKSxjPXQoImZvbnQtYXRsYXMiKSx1PXQoInR5cGVkYXJyYXktcG9vbCIpLGg9dCgicGFyc2UtcmVjdCIpLGY9dCgiaXMtcGxhaW4tb2JqIikscD10KCJwYXJzZS11bml0IiksZD10KCJ0by1weCIpLGc9dCgiZGV0ZWN0LWtlcm5pbmciKSxtPXQoIm9iamVjdC1hc3NpZ24iKSx2PXQoImZvbnQtbWVhc3VyZSIpLHk9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLHg9dCgiYml0LXR3aWRkbGUiKS5uZXh0UG93MixiPW5ldyBzLF89ITE7aWYoZG9jdW1lbnQuYm9keSl7dmFyIHc9ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7dy5zdHlsZS5mb250PSJpdGFsaWMgc21hbGwtY2FwcyBib2xkIGNvbmRlbnNlZCAxNnB4LzIgY3Vyc2l2ZSIsZ2V0Q29tcHV0ZWRTdHlsZSh3KS5mb250U3RyZXRjaCYmKF89ITApLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodyl9dmFyIFQ9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Ll9nbCYmdC5wcm9wJiZ0LnRleHR1cmUmJnQuYnVmZmVyfSh0KT90aGlzLmdsPW8odCk6KHQ9e3JlZ2w6dH0sdGhpcy5nbD10LnJlZ2wuX2dsKSx0aGlzLnNoYWRlcj1iLmdldCh0aGlzLmdsKSx0aGlzLnNoYWRlcj90aGlzLnJlZ2w9dGhpcy5zaGFkZXIucmVnbDp0aGlzLnJlZ2w9dC5yZWdsfHxhKHtnbDp0aGlzLmdsfSksdGhpcy5jaGFyQnVmZmVyPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2l6ZUJ1ZmZlcj10aGlzLnJlZ2wuYnVmZmVyKHt0eXBlOiJmbG9hdCIsdXNhZ2U6InN0cmVhbSJ9KSx0aGlzLnNoYWRlcnx8KHRoaXMuc2hhZGVyPXRoaXMuY3JlYXRlU2hhZGVyKCksYi5zZXQodGhpcy5nbCx0aGlzLnNoYWRlcikpLHRoaXMuYmF0Y2g9W10sdGhpcy5mb250U2l6ZT1bXSx0aGlzLmZvbnQ9W10sdGhpcy5mb250QXRsYXM9W10sdGhpcy5kcmF3PXRoaXMuc2hhZGVyLmRyYXcuYmluZCh0aGlzKSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVnbC5fcmVmcmVzaCgpLHRoaXMuZHJhdyh0aGlzLmJhdGNoKX0sdGhpcy5jYW52YXM9dGhpcy5nbC5jYW52YXMsdGhpcy51cGRhdGUoZih0KT90Ont9KX07VC5wcm90b3R5cGUuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWdsLGU9dCh7YmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sc3RlbmNpbDp7ZW5hYmxlOiExfSxkZXB0aDp7ZW5hYmxlOiExfSxjb3VudDp0LnByb3AoImNvdW50Iiksb2Zmc2V0OnQucHJvcCgib2Zmc2V0IiksYXR0cmlidXRlczp7Y2hhck9mZnNldDp7b2Zmc2V0OjQsc3RyaWRlOjgsYnVmZmVyOnQudGhpcygic2l6ZUJ1ZmZlciIpfSx3aWR0aDp7b2Zmc2V0OjAsc3RyaWRlOjgsYnVmZmVyOnQudGhpcygic2l6ZUJ1ZmZlciIpfSxjaGFyOnQudGhpcygiY2hhckJ1ZmZlciIpLHBvc2l0aW9uOnQudGhpcygicG9zaXRpb24iKX0sdW5pZm9ybXM6e2F0bGFzU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLndpZHRoLGUuYXRsYXMuaGVpZ2h0XX0sYXRsYXNEaW06ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS5hdGxhcy5jb2xzLGUuYXRsYXMucm93c119LGF0bGFzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMudGV4dHVyZX0sY2hhclN0ZXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy5zdGVwfSxlbTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLmVtfSxjb2xvcjp0LnByb3AoImNvbG9yIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSx2aWV3cG9ydDp0LnRoaXMoInZpZXdwb3J0QXJyYXkiKSxzY2FsZTp0LnRoaXMoInNjYWxlIiksYWxpZ246dC5wcm9wKCJhbGlnbiIpLGJhc2VsaW5lOnQucHJvcCgiYmFzZWxpbmUiKSx0cmFuc2xhdGU6dC50aGlzKCJ0cmFuc2xhdGUiKSxwb3NpdGlvbk9mZnNldDp0LnByb3AoInBvc2l0aW9uT2Zmc2V0Iil9LHByaW1pdGl2ZToicG9pbnRzIix2aWV3cG9ydDp0LnRoaXMoInZpZXdwb3J0IiksdmVydDoiXG5cdFx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cdFx0XHRhdHRyaWJ1dGUgZmxvYXQgd2lkdGgsIGNoYXJPZmZzZXQsIGNoYXI7XG5cdFx0XHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZm9udFNpemUsIGNoYXJTdGVwLCBlbSwgYWxpZ24sIGJhc2VsaW5lO1xuXHRcdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdFx0dW5pZm9ybSB2ZWM0IGNvbG9yO1xuXHRcdFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZSwgYXRsYXNEaW0sIHNjYWxlLCB0cmFuc2xhdGUsIHBvc2l0aW9uT2Zmc2V0O1xuXHRcdFx0dmFyeWluZyB2ZWMyIGNoYXJDb29yZCwgY2hhcklkO1xuXHRcdFx0dmFyeWluZyBmbG9hdCBjaGFyV2lkdGg7XG5cdFx0XHR2YXJ5aW5nIHZlYzQgZm9udENvbG9yO1xuXHRcdFx0dm9pZCBtYWluICgpIHtcblx0XHRcdFx0IisoVC5ub3JtYWxWaWV3cG9ydD8iIjoidmVjMiBwb3NpdGlvbk9mZnNldCA9IHZlYzIocG9zaXRpb25PZmZzZXQueCwtIHBvc2l0aW9uT2Zmc2V0LnkpOyIpKyJcblxuXHRcdFx0XHR2ZWMyIG9mZnNldCA9IGZsb29yKGVtICogKHZlYzIoYWxpZ24gKyBjaGFyT2Zmc2V0LCBiYXNlbGluZSlcblx0XHRcdFx0XHQrIHBvc2l0aW9uT2Zmc2V0KSlcblx0XHRcdFx0XHQvICh2aWV3cG9ydC56dyAqIHNjYWxlLnh5KTtcblxuXHRcdFx0XHR2ZWMyIHBvc2l0aW9uID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlO1xuXHRcdFx0XHRwb3NpdGlvbiArPSBvZmZzZXQgKiBzY2FsZTtcblxuXHRcdFx0XHQiKyhULm5vcm1hbFZpZXdwb3J0PyJwb3NpdGlvbi55ID0gMS4gLSBwb3NpdGlvbi55OyI6IiIpKyJcblxuXHRcdFx0XHRjaGFyQ29vcmQgPSBwb3NpdGlvbiAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cblx0XHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4gLSAxLiwgMCwgMSk7XG5cblx0XHRcdFx0Z2xfUG9pbnRTaXplID0gY2hhclN0ZXA7XG5cblx0XHRcdFx0Y2hhcklkLnggPSBtb2QoY2hhciwgYXRsYXNEaW0ueCk7XG5cdFx0XHRcdGNoYXJJZC55ID0gZmxvb3IoY2hhciAvIGF0bGFzRGltLngpO1xuXG5cdFx0XHRcdGNoYXJXaWR0aCA9IHdpZHRoICogZW07XG5cblx0XHRcdFx0Zm9udENvbG9yID0gY29sb3IgLyAyNTUuO1xuXHRcdFx0fSIsZnJhZzoiXG5cdFx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBhdGxhcztcblx0XHRcdHVuaWZvcm0gZmxvYXQgZm9udFNpemUsIGNoYXJTdGVwLCBvcGFjaXR5O1xuXHRcdFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZTtcblx0XHRcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblx0XHRcdHZhcnlpbmcgdmVjNCBmb250Q29sb3I7XG5cdFx0XHR2YXJ5aW5nIHZlYzIgY2hhckNvb3JkLCBjaGFySWQ7XG5cdFx0XHR2YXJ5aW5nIGZsb2F0IGNoYXJXaWR0aDtcblxuXHRcdFx0ZmxvYXQgbGlnaHRuZXNzKHZlYzQgY29sb3IpIHtcblx0XHRcdFx0cmV0dXJuIGNvbG9yLnIgKiAwLjI5OSArIGNvbG9yLmcgKiAwLjU4NyArIGNvbG9yLmIgKiAwLjExNDtcblx0XHRcdH1cblxuXHRcdFx0dm9pZCBtYWluICgpIHtcblx0XHRcdFx0dmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAtIGNoYXJDb29yZCArIGNoYXJTdGVwICogLjU7XG5cdFx0XHRcdGZsb2F0IGhhbGZDaGFyU3RlcCA9IGZsb29yKGNoYXJTdGVwICogLjUgKyAuNSk7XG5cblx0XHRcdFx0Ly8gaW52ZXJ0IHkgYW5kIHNoaWZ0IGJ5IDFweCAoRkYgZXhwZWNpYWxseSBuZWVkcyB0aGF0KVxuXHRcdFx0XHR1di55ID0gY2hhclN0ZXAgLSB1di55O1xuXG5cdFx0XHRcdC8vIGlnbm9yZSBwb2ludHMgb3V0c2lkZSBvZiBjaGFyYWN0ZXIgYm91bmRpbmcgYm94XG5cdFx0XHRcdGZsb2F0IGhhbGZDaGFyV2lkdGggPSBjZWlsKGNoYXJXaWR0aCAqIC41KTtcblx0XHRcdFx0aWYgKGZsb29yKHV2LngpID4gaGFsZkNoYXJTdGVwICsgaGFsZkNoYXJXaWR0aCB8fFxuXHRcdFx0XHRcdGZsb29yKHV2LngpIDwgaGFsZkNoYXJTdGVwIC0gaGFsZkNoYXJXaWR0aCkgcmV0dXJuO1xuXG5cdFx0XHRcdHV2ICs9IGNoYXJJZCAqIGNoYXJTdGVwO1xuXHRcdFx0XHR1diA9IHV2IC8gYXRsYXNTaXplO1xuXG5cdFx0XHRcdHZlYzQgY29sb3IgPSBmb250Q29sb3I7XG5cdFx0XHRcdHZlYzQgbWFzayA9IHRleHR1cmUyRChhdGxhcywgdXYpO1xuXG5cdFx0XHRcdGZsb2F0IG1hc2tZID0gbGlnaHRuZXNzKG1hc2spO1xuXHRcdFx0XHQvLyBmbG9hdCBjb2xvclkgPSBsaWdodG5lc3MoY29sb3IpO1xuXHRcdFx0XHRjb2xvci5hICo9IG1hc2tZO1xuXHRcdFx0XHRjb2xvci5hICo9IG9wYWNpdHk7XG5cblx0XHRcdFx0Ly8gY29sb3IuYSArPSAuMTtcblxuXHRcdFx0XHQvLyBhbnRpYWxpYXNpbmcsIHNlZSB5aXEgY29sb3Igc3BhY2UgeS1jaGFubmVsIGZvcm11bGFcblx0XHRcdFx0Ly8gY29sb3IucmdiICs9ICgxLiAtIGNvbG9yLnJnYikgKiAoMS4gLSBtYXNrLnJnYik7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gY29sb3I7XG5cdFx0XHR9In0pO3JldHVybntyZWdsOnQsZHJhdzplLGF0bGFzOnt9fX0sVC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiB0KXQ9e3RleHQ6dH07ZWxzZSBpZighdClyZXR1cm47bnVsbCE9KHQ9aSh0LHtwb3NpdGlvbjoicG9zaXRpb24gcG9zaXRpb25zIGNvb3JkIGNvb3JkcyBjb29yZGluYXRlcyIsZm9udDoiZm9udCBmb250RmFjZSBmb250ZmFjZSB0eXBlZmFjZSBjc3NGb250IGNzcy1mb250IGZhbWlseSBmb250RmFtaWx5Iixmb250U2l6ZToiZm9udFNpemUgZm9udHNpemUgc2l6ZSBmb250LXNpemUiLHRleHQ6InRleHQgdGV4dHMgY2hhcnMgY2hhcmFjdGVycyB2YWx1ZSB2YWx1ZXMgc3ltYm9scyIsYWxpZ246ImFsaWduIGFsaWdubWVudCB0ZXh0QWxpZ24gdGV4dGJhc2VsaW5lIixiYXNlbGluZToiYmFzZWxpbmUgdGV4dEJhc2VsaW5lIHRleHRiYXNlbGluZSIsZGlyZWN0aW9uOiJkaXIgZGlyZWN0aW9uIHRleHREaXJlY3Rpb24iLGNvbG9yOiJjb2xvciBjb2xvdXIgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciB0ZXh0Q29sb3IgdGV4dGNvbG9yIixrZXJuaW5nOiJrZXJuaW5nIGtlcm4iLHJhbmdlOiJyYW5nZSBkYXRhQm94Iix2aWV3cG9ydDoidnAgdmlld3BvcnQgdmlld0JveCB2aWV3Ym94IHZpZXdQb3J0IixvcGFjaXR5OiJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSB2aXNpYmxlIHZpc2liaWxpdHkgb3BhcXVlIixvZmZzZXQ6Im9mZnNldCBwb3NpdGlvbk9mZnNldCBwYWRkaW5nIHNoaWZ0IGluZGVudCBpbmRlbnRhdGlvbiJ9LCEwKSkub3BhY2l0eSYmKEFycmF5LmlzQXJyYXkodC5vcGFjaXR5KT90aGlzLm9wYWNpdHk9dC5vcGFjaXR5Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCl9KSk6dGhpcy5vcGFjaXR5PXBhcnNlRmxvYXQodC5vcGFjaXR5KSksbnVsbCE9dC52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9aCh0LnZpZXdwb3J0KSxULm5vcm1hbFZpZXdwb3J0JiYodGhpcy52aWV3cG9ydC55PXRoaXMuY2FudmFzLmhlaWdodC10aGlzLnZpZXdwb3J0LnktdGhpcy52aWV3cG9ydC5oZWlnaHQpLHRoaXMudmlld3BvcnRBcnJheT1bdGhpcy52aWV3cG9ydC54LHRoaXMudmlld3BvcnQueSx0aGlzLnZpZXdwb3J0LndpZHRoLHRoaXMudmlld3BvcnQuaGVpZ2h0XSksbnVsbD09dGhpcy52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9e3g6MCx5OjAsd2lkdGg6dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodH0sdGhpcy52aWV3cG9ydEFycmF5PVt0aGlzLnZpZXdwb3J0LngsdGhpcy52aWV3cG9ydC55LHRoaXMudmlld3BvcnQud2lkdGgsdGhpcy52aWV3cG9ydC5oZWlnaHRdKSxudWxsIT10Lmtlcm5pbmcmJih0aGlzLmtlcm5pbmc9dC5rZXJuaW5nKSxudWxsIT10Lm9mZnNldCYmKCJudW1iZXIiPT10eXBlb2YgdC5vZmZzZXQmJih0Lm9mZnNldD1bdC5vZmZzZXQsMF0pLHRoaXMucG9zaXRpb25PZmZzZXQ9eSh0Lm9mZnNldCkpLHQuZGlyZWN0aW9uJiYodGhpcy5kaXJlY3Rpb249dC5kaXJlY3Rpb24pLHQucmFuZ2UmJih0aGlzLnJhbmdlPXQucmFuZ2UsdGhpcy5zY2FsZT1bMS8odC5yYW5nZVsyXS10LnJhbmdlWzBdKSwxLyh0LnJhbmdlWzNdLXQucmFuZ2VbMV0pXSx0aGlzLnRyYW5zbGF0ZT1bLXQucmFuZ2VbMF0sLXQucmFuZ2VbMV1dKSx0LnNjYWxlJiYodGhpcy5zY2FsZT10LnNjYWxlKSx0LnRyYW5zbGF0ZSYmKHRoaXMudHJhbnNsYXRlPXQudHJhbnNsYXRlKSx0aGlzLnNjYWxlfHwodGhpcy5zY2FsZT1bMS90aGlzLnZpZXdwb3J0LndpZHRoLDEvdGhpcy52aWV3cG9ydC5oZWlnaHRdKSx0aGlzLnRyYW5zbGF0ZXx8KHRoaXMudHJhbnNsYXRlPVswLDBdKSx0aGlzLmZvbnQubGVuZ3RofHx0LmZvbnR8fCh0LmZvbnQ9VC5iYXNlRm9udFNpemUrInB4IHNhbnMtc2VyaWYiKTt2YXIgcixhPSExLG89ITE7aWYodC5mb250JiYoQXJyYXkuaXNBcnJheSh0LmZvbnQpP3QuZm9udDpbdC5mb250XSkuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdHJ5e3Q9bi5wYXJzZSh0KX1jYXRjaChlKXt0PW4ucGFyc2UoVC5iYXNlRm9udFNpemUrInB4ICIrdCl9ZWxzZSB0PW4ucGFyc2Uobi5zdHJpbmdpZnkodCkpO3ZhciBpPW4uc3RyaW5naWZ5KHtzaXplOlQuYmFzZUZvbnRTaXplLGZhbWlseTp0LmZhbWlseSxzdHJldGNoOl8/dC5zdHJldGNoOnZvaWQgMCx2YXJpYW50OnQudmFyaWFudCx3ZWlnaHQ6dC53ZWlnaHQsc3R5bGU6dC5zdHlsZX0pLHM9cCh0LnNpemUpLGw9TWF0aC5yb3VuZChzWzBdKmQoc1sxXSkpO2lmKGwhPT1lLmZvbnRTaXplW3JdJiYobz0hMCxlLmZvbnRTaXplW3JdPWwpLCEoZS5mb250W3JdJiZpPT1lLmZvbnRbcl0uYmFzZVN0cmluZ3x8KGE9ITAsZS5mb250W3JdPVQuZm9udHNbaV0sZS5mb250W3JdKSkpe3ZhciBjPXQuZmFtaWx5LmpvaW4oIiwgIiksdT1bdC5zdHlsZV07dC5zdHlsZSE9dC52YXJpYW50JiZ1LnB1c2godC52YXJpYW50KSx0LnZhcmlhbnQhPXQud2VpZ2h0JiZ1LnB1c2godC53ZWlnaHQpLF8mJnQud2VpZ2h0IT10LnN0cmV0Y2gmJnUucHVzaCh0LnN0cmV0Y2gpLGUuZm9udFtyXT17YmFzZVN0cmluZzppLGZhbWlseTpjLHdlaWdodDp0LndlaWdodCxzdHJldGNoOnQuc3RyZXRjaCxzdHlsZTp0LnN0eWxlLHZhcmlhbnQ6dC52YXJpYW50LHdpZHRoOnt9LGtlcm5pbmc6e30sbWV0cmljczp2KGMse29yaWdpbjoidG9wIixmb250U2l6ZTpULmJhc2VGb250U2l6ZSxmb250U3R5bGU6dS5qb2luKCIgIil9KX0sVC5mb250c1tpXT1lLmZvbnRbcl19fSkpLChhfHxvKSYmdGhpcy5mb250LmZvckVhY2goKGZ1bmN0aW9uKHIsaSl7dmFyIGE9bi5zdHJpbmdpZnkoe3NpemU6ZS5mb250U2l6ZVtpXSxmYW1pbHk6ci5mYW1pbHksc3RyZXRjaDpfP3Iuc3RyZXRjaDp2b2lkIDAsdmFyaWFudDpyLnZhcmlhbnQsd2VpZ2h0OnIud2VpZ2h0LHN0eWxlOnIuc3R5bGV9KTtpZihlLmZvbnRBdGxhc1tpXT1lLnNoYWRlci5hdGxhc1thXSwhZS5mb250QXRsYXNbaV0pe3ZhciBvPXIubWV0cmljcztlLnNoYWRlci5hdGxhc1thXT1lLmZvbnRBdGxhc1tpXT17Zm9udFN0cmluZzphLHN0ZXA6MipNYXRoLmNlaWwoZS5mb250U2l6ZVtpXSpvLmJvdHRvbSouNSksZW06ZS5mb250U2l6ZVtpXSxjb2xzOjAscm93czowLGhlaWdodDowLHdpZHRoOjAsY2hhcnM6W10saWRzOnt9LHRleHR1cmU6ZS5yZWdsLnRleHR1cmUoKX19bnVsbD09dC50ZXh0JiYodC50ZXh0PWUudGV4dCl9KSksInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnQucG9zaXRpb24mJnQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgcz1BcnJheSguNSp0LnBvc2l0aW9uLmxlbmd0aCksZj0wO2Y8cy5sZW5ndGg7ZisrKXNbZl09dC50ZXh0O3QudGV4dD1zfWlmKG51bGwhPXQudGV4dHx8YSl7aWYodGhpcy50ZXh0T2Zmc2V0cz1bMF0sQXJyYXkuaXNBcnJheSh0LnRleHQpKXt0aGlzLmNvdW50PXQudGV4dFswXS5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO2Zvcih2YXIgYj0xO2I8dC50ZXh0Lmxlbmd0aDtiKyspdGhpcy50ZXh0T2Zmc2V0c1tiXT10aGlzLnRleHRPZmZzZXRzW2ItMV0rdC50ZXh0W2ItMV0ubGVuZ3RoLHRoaXMuY291bnQrPXQudGV4dFtiXS5sZW5ndGgsdGhpcy5jb3VudHMucHVzaCh0LnRleHRbYl0ubGVuZ3RoKTt0aGlzLnRleHQ9dC50ZXh0LmpvaW4oIiIpfWVsc2UgdGhpcy50ZXh0PXQudGV4dCx0aGlzLmNvdW50PXRoaXMudGV4dC5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO3I9W10sdGhpcy5mb250LmZvckVhY2goKGZ1bmN0aW9uKHQsbil7VC5hdGxhc0NvbnRleHQuZm9udD10LmJhc2VTdHJpbmc7Zm9yKHZhciBpPWUuZm9udEF0bGFzW25dLGE9MDthPGUudGV4dC5sZW5ndGg7YSsrKXt2YXIgbz1lLnRleHQuY2hhckF0KGEpO2lmKG51bGw9PWkuaWRzW29dJiYoaS5pZHNbb109aS5jaGFycy5sZW5ndGgsaS5jaGFycy5wdXNoKG8pLHIucHVzaChvKSksbnVsbD09dC53aWR0aFtvXSYmKHQud2lkdGhbb109VC5hdGxhc0NvbnRleHQubWVhc3VyZVRleHQobykud2lkdGgvVC5iYXNlRm9udFNpemUsZS5rZXJuaW5nKSl7dmFyIHM9W107Zm9yKHZhciBsIGluIHQud2lkdGgpcy5wdXNoKGwrbyxvK2wpO20odC5rZXJuaW5nLGcodC5mYW1pbHkse3BhaXJzOnN9KSl9fX0pKX1pZih0LnBvc2l0aW9uKWlmKHQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgdz0hdC5wb3NpdGlvblswXS5sZW5ndGgsaz11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCksTT0wLEE9MDtNPHRoaXMuY291bnRzLmxlbmd0aDtNKyspe3ZhciBTPXRoaXMuY291bnRzW01dO2lmKHcpZm9yKHZhciBFPTA7RTxTO0UrKylrW0ErK109dC5wb3NpdGlvblsyKk1dLGtbQSsrXT10LnBvc2l0aW9uWzIqTSsxXTtlbHNlIGZvcih2YXIgQz0wO0M8UztDKyspa1tBKytdPXQucG9zaXRpb25bTV1bMF0sa1tBKytdPXQucG9zaXRpb25bTV1bMV19dGhpcy5wb3NpdGlvbi5jYWxsP3RoaXMucG9zaXRpb24oe3R5cGU6ImZsb2F0IixkYXRhOmt9KTp0aGlzLnBvc2l0aW9uPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6ImZsb2F0IixkYXRhOmt9KSx1LmZyZWVGbG9hdChrKX1lbHNlIHRoaXMucG9zaXRpb24uZGVzdHJveSYmdGhpcy5wb3NpdGlvbi5kZXN0cm95KCksdGhpcy5wb3NpdGlvbj17Y29uc3RhbnQ6dC5wb3NpdGlvbn07aWYodC50ZXh0fHxhKXt2YXIgTD11Lm1hbGxvY1VpbnQ4KHRoaXMuY291bnQpLFA9dS5tYWxsb2NGbG9hdCgyKnRoaXMuY291bnQpO3RoaXMudGV4dFdpZHRoPVtdO2Zvcih2YXIgST0wLHo9MDtJPHRoaXMuY291bnRzLmxlbmd0aDtJKyspe2Zvcih2YXIgTz10aGlzLmNvdW50c1tJXSxEPXRoaXMuZm9udFtJXXx8dGhpcy5mb250WzBdLFI9dGhpcy5mb250QXRsYXNbSV18fHRoaXMuZm9udEF0bGFzWzBdLEY9MDtGPE87RisrKXt2YXIgQj10aGlzLnRleHQuY2hhckF0KHopLE49dGhpcy50ZXh0LmNoYXJBdCh6LTEpO2lmKExbel09Ui5pZHNbQl0sUFsyKnpdPUQud2lkdGhbQl0sRil7dmFyIGo9UFsyKnotMl0sVT1QWzIqel0sVj1QWzIqei0xXSsuNSpqKy41KlU7aWYodGhpcy5rZXJuaW5nKXt2YXIgcT1ELmtlcm5pbmdbTitCXTtxJiYoVis9LjAwMSpxKX1QWzIqeisxXT1WfWVsc2UgUFsyKnorMV09LjUqUFsyKnpdO3orK310aGlzLnRleHRXaWR0aC5wdXNoKFAubGVuZ3RoPy41KlBbMip6LTJdK1BbMip6LTFdOjApfXQuYWxpZ258fCh0LmFsaWduPXRoaXMuYWxpZ24pLHRoaXMuY2hhckJ1ZmZlcih7ZGF0YTpMLHR5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2l6ZUJ1ZmZlcih7ZGF0YTpQLHR5cGU6ImZsb2F0Iix1c2FnZToic3RyZWFtIn0pLHUuZnJlZVVpbnQ4KEwpLHUuZnJlZUZsb2F0KFApLHIubGVuZ3RoJiZ0aGlzLmZvbnQuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj1lLmZvbnRBdGxhc1tyXSxpPW4uc3RlcCxhPU1hdGguZmxvb3IoVC5tYXhBdGxhc1NpemUvaSksbz1NYXRoLm1pbihhLG4uY2hhcnMubGVuZ3RoKSxzPU1hdGguY2VpbChuLmNoYXJzLmxlbmd0aC9vKSxsPXgobyppKSx1PXgocyppKTtuLndpZHRoPWwsbi5oZWlnaHQ9dSxuLnJvd3M9cyxuLmNvbHM9byxuLmVtJiZuLnRleHR1cmUoe2RhdGE6Yyh7Y2FudmFzOlQuYXRsYXNDYW52YXMsZm9udDpuLmZvbnRTdHJpbmcsY2hhcnM6bi5jaGFycyxzaGFwZTpbbCx1XSxzdGVwOltpLGldfSl9KX0pKX1pZih0LmFsaWduJiYodGhpcy5hbGlnbj10LmFsaWduLHRoaXMuYWxpZ25PZmZzZXQ9dGhpcy50ZXh0V2lkdGgubWFwKChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5hbGlnbik/ZS5hbGlnbi5sZW5ndGg+MT9lLmFsaWduW3JdOmUuYWxpZ25bMF06ZS5hbGlnbjtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG47c3dpdGNoKG4pe2Nhc2UicmlnaHQiOmNhc2UiZW5kIjpyZXR1cm4tdDtjYXNlImNlbnRlciI6Y2FzZSJjZW50cmUiOmNhc2UibWlkZGxlIjpyZXR1cm4uNSotdH1yZXR1cm4gMH0pKSksbnVsbD09dGhpcy5iYXNlbGluZSYmbnVsbD09dC5iYXNlbGluZSYmKHQuYmFzZWxpbmU9MCksbnVsbCE9dC5iYXNlbGluZSYmKHRoaXMuYmFzZWxpbmU9dC5iYXNlbGluZSxBcnJheS5pc0FycmF5KHRoaXMuYmFzZWxpbmUpfHwodGhpcy5iYXNlbGluZT1bdGhpcy5iYXNlbGluZV0pLHRoaXMuYmFzZWxpbmVPZmZzZXQ9dGhpcy5iYXNlbGluZS5tYXAoKGZ1bmN0aW9uKHQscil7dmFyIG49KGUuZm9udFtyXXx8ZS5mb250WzBdKS5tZXRyaWNzLGk9MDtyZXR1cm4gaSs9LjUqbi5ib3R0b20saSs9Im51bWJlciI9PXR5cGVvZiB0P3Qtbi5iYXNlbGluZTotblt0XSxULm5vcm1hbFZpZXdwb3J0fHwoaSo9LTEpLGl9KSkpLG51bGwhPXQuY29sb3IpaWYodC5jb2xvcnx8KHQuY29sb3I9InRyYW5zcGFyZW50IiksInN0cmluZyIhPXR5cGVvZiB0LmNvbG9yJiZpc05hTih0LmNvbG9yKSl7dmFyIEg7aWYoIm51bWJlciI9PXR5cGVvZiB0LmNvbG9yWzBdJiZ0LmNvbG9yLmxlbmd0aD50aGlzLmNvdW50cy5sZW5ndGgpe3ZhciBHPXQuY29sb3IubGVuZ3RoO0g9dS5tYWxsb2NVaW50OChHKTtmb3IodmFyIFk9KHQuY29sb3Iuc3ViYXJyYXl8fHQuY29sb3Iuc2xpY2UpLmJpbmQodC5jb2xvciksVz0wO1c8RztXKz00KUguc2V0KGwoWShXLFcrNCksInVpbnQ4IiksVyl9ZWxzZXt2YXIgWj10LmNvbG9yLmxlbmd0aDtIPXUubWFsbG9jVWludDgoNCpaKTtmb3IodmFyIFg9MDtYPFo7WCsrKUguc2V0KGwodC5jb2xvcltYXXx8MCwidWludDgiKSw0KlgpfXRoaXMuY29sb3I9SH1lbHNlIHRoaXMuY29sb3I9bCh0LmNvbG9yLCJ1aW50OCIpO2lmKHQucG9zaXRpb258fHQudGV4dHx8dC5jb2xvcnx8dC5iYXNlbGluZXx8dC5hbGlnbnx8dC5mb250fHx0Lm9mZnNldHx8dC5vcGFjaXR5KWlmKHRoaXMuY29sb3IubGVuZ3RoPjR8fHRoaXMuYmFzZWxpbmVPZmZzZXQubGVuZ3RoPjF8fHRoaXMuYWxpZ24mJnRoaXMuYWxpZ24ubGVuZ3RoPjF8fHRoaXMuZm9udEF0bGFzLmxlbmd0aD4xfHx0aGlzLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yKXt2YXIgSj1NYXRoLm1heCguNSp0aGlzLnBvc2l0aW9uLmxlbmd0aHx8MCwuMjUqdGhpcy5jb2xvci5sZW5ndGh8fDAsdGhpcy5iYXNlbGluZU9mZnNldC5sZW5ndGh8fDAsdGhpcy5hbGlnbk9mZnNldC5sZW5ndGh8fDAsdGhpcy5mb250Lmxlbmd0aHx8MCx0aGlzLm9wYWNpdHkubGVuZ3RofHwwLC41KnRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RofHwwKTt0aGlzLmJhdGNoPUFycmF5KEopO2Zvcih2YXIgSz0wO0s8dGhpcy5iYXRjaC5sZW5ndGg7SysrKXRoaXMuYmF0Y2hbS109e2NvdW50OnRoaXMuY291bnRzLmxlbmd0aD4xP3RoaXMuY291bnRzW0tdOnRoaXMuY291bnRzWzBdLG9mZnNldDp0aGlzLnRleHRPZmZzZXRzLmxlbmd0aD4xP3RoaXMudGV4dE9mZnNldHNbS106dGhpcy50ZXh0T2Zmc2V0c1swXSxjb2xvcjp0aGlzLmNvbG9yP3RoaXMuY29sb3IubGVuZ3RoPD00P3RoaXMuY29sb3I6dGhpcy5jb2xvci5zdWJhcnJheSg0KkssNCpLKzQpOlswLDAsMCwyNTVdLG9wYWNpdHk6QXJyYXkuaXNBcnJheSh0aGlzLm9wYWNpdHkpP3RoaXMub3BhY2l0eVtLXTp0aGlzLm9wYWNpdHksYmFzZWxpbmU6bnVsbCE9dGhpcy5iYXNlbGluZU9mZnNldFtLXT90aGlzLmJhc2VsaW5lT2Zmc2V0W0tdOnRoaXMuYmFzZWxpbmVPZmZzZXRbMF0sYWxpZ246dGhpcy5hbGlnbj9udWxsIT10aGlzLmFsaWduT2Zmc2V0W0tdP3RoaXMuYWxpZ25PZmZzZXRbS106dGhpcy5hbGlnbk9mZnNldFswXTowLGF0bGFzOnRoaXMuZm9udEF0bGFzW0tdfHx0aGlzLmZvbnRBdGxhc1swXSxwb3NpdGlvbk9mZnNldDp0aGlzLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yP3RoaXMucG9zaXRpb25PZmZzZXQuc3ViYXJyYXkoMipLLDIqSysyKTp0aGlzLnBvc2l0aW9uT2Zmc2V0fX1lbHNlIHRoaXMuY291bnQ/dGhpcy5iYXRjaD1be2NvdW50OnRoaXMuY291bnQsb2Zmc2V0OjAsY29sb3I6dGhpcy5jb2xvcnx8WzAsMCwwLDI1NV0sb3BhY2l0eTpBcnJheS5pc0FycmF5KHRoaXMub3BhY2l0eSk/dGhpcy5vcGFjaXR5WzBdOnRoaXMub3BhY2l0eSxiYXNlbGluZTp0aGlzLmJhc2VsaW5lT2Zmc2V0WzBdLGFsaWduOnRoaXMuYWxpZ25PZmZzZXQ/dGhpcy5hbGlnbk9mZnNldFswXTowLGF0bGFzOnRoaXMuZm9udEF0bGFzWzBdLHBvc2l0aW9uT2Zmc2V0OnRoaXMucG9zaXRpb25PZmZzZXR9XTp0aGlzLmJhdGNoPVtdfSxULnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSxULnByb3RvdHlwZS5rZXJuaW5nPSEwLFQucHJvdG90eXBlLnBvc2l0aW9uPXtjb25zdGFudDpuZXcgRmxvYXQzMkFycmF5KDIpfSxULnByb3RvdHlwZS50cmFuc2xhdGU9bnVsbCxULnByb3RvdHlwZS5zY2FsZT1udWxsLFQucHJvdG90eXBlLmZvbnQ9bnVsbCxULnByb3RvdHlwZS50ZXh0PSIiLFQucHJvdG90eXBlLnBvc2l0aW9uT2Zmc2V0PVswLDBdLFQucHJvdG90eXBlLm9wYWNpdHk9MSxULnByb3RvdHlwZS5jb2xvcj1uZXcgVWludDhBcnJheShbMCwwLDAsMjU1XSksVC5wcm90b3R5cGUuYWxpZ25PZmZzZXQ9WzAsMF0sVC5ub3JtYWxWaWV3cG9ydD0hMSxULm1heEF0bGFzU2l6ZT0xMDI0LFQuYXRsYXNDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksVC5hdGxhc0NvbnRleHQ9VC5hdGxhc0NhbnZhcy5nZXRDb250ZXh0KCIyZCIse2FscGhhOiExfSksVC5iYXNlRm9udFNpemU9NjQsVC5mb250cz17fSxlLmV4cG9ydHM9VH0seyJiaXQtdHdpZGRsZSI6OTcsImNvbG9yLW5vcm1hbGl6ZSI6MTI1LCJjc3MtZm9udCI6MTQ0LCJkZXRlY3Qta2VybmluZyI6MTcyLCJlczYtd2Vhay1tYXAiOjIzMywiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjQ0LCJmb250LWF0bGFzIjoyNDUsImZvbnQtbWVhc3VyZSI6MjQ2LCJnbC11dGlsL2NvbnRleHQiOjMyOCwiaXMtcGxhaW4tb2JqIjo0NDMsIm9iamVjdC1hc3NpZ24iOjQ3MywicGFyc2UtcmVjdCI6NDc4LCJwYXJzZS11bml0Ijo0ODAsInBpY2stYnktYWxpYXMiOjQ4NSxyZWdsOjUxMiwidG8tcHgiOjU1MCwidHlwZWRhcnJheS1wb29sIjo1Njd9XSwzMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgibmRhcnJheS1vcHMiKSxhPXQoInR5cGVkYXJyYXktcG9vbCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoPD0xKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBNaXNzaW5nIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIik7b3x8Yyh0KTtpZigibnVtYmVyIj09dHlwZW9mIGFyZ3VtZW50c1sxXSlyZXR1cm4gdih0LGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdfHx0LlJHQkEsYXJndW1lbnRzWzRdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzFdKSlyZXR1cm4gdih0LDB8YXJndW1lbnRzWzFdWzBdLDB8YXJndW1lbnRzWzFdWzFdLGFyZ3VtZW50c1syXXx8dC5SR0JBLGFyZ3VtZW50c1szXXx8dC5VTlNJR05FRF9CWVRFKTtpZigib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1sxXSl7dmFyIGU9YXJndW1lbnRzWzFdLHI9dShlKT9lOmUucmF3O2lmKHIpcmV0dXJuIHkodCxyLDB8ZS53aWR0aCwwfGUuaGVpZ2h0LGFyZ3VtZW50c1syXXx8dC5SR0JBLGFyZ3VtZW50c1szXXx8dC5VTlNJR05FRF9CWVRFKTtpZihlLnNoYXBlJiZlLmRhdGEmJmUuc3RyaWRlKXJldHVybiB4KHQsZSl9dGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgYXJndW1lbnRzIGZvciB0ZXh0dXJlMmQgY29uc3RydWN0b3IiKX07dmFyIG89bnVsbCxzPW51bGwsbD1udWxsO2Z1bmN0aW9uIGModCl7bz1bdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1RdLHM9W3QuTkVBUkVTVCx0LkxJTkVBUix0Lk5FQVJFU1RfTUlQTUFQX05FQVJFU1QsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX0xJTkVBUl0sbD1bdC5SRVBFQVQsdC5DTEFNUF9UT19FREdFLHQuTUlSUk9SRURfUkVQRUFUXX1mdW5jdGlvbiB1KHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MVmlkZW9FbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBJbWFnZURhdGEmJnQgaW5zdGFuY2VvZiBJbWFnZURhdGF9dmFyIGg9ZnVuY3Rpb24odCxlKXtpLm11bHModCxlLDI1NSl9O2Z1bmN0aW9uIGYodCxlLHIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5pfHxyPDB8fHI+aSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTtyZXR1cm4gdC5fc2hhcGU9W2Uscl0sdC5iaW5kKCksbi50ZXhJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLHQuZm9ybWF0LGUsciwwLHQuZm9ybWF0LHQudHlwZSxudWxsKSx0Ll9taXBMZXZlbHM9WzBdLHR9ZnVuY3Rpb24gcCh0LGUscixuLGksYSl7dGhpcy5nbD10LHRoaXMuaGFuZGxlPWUsdGhpcy5mb3JtYXQ9aSx0aGlzLnR5cGU9YSx0aGlzLl9zaGFwZT1bcixuXSx0aGlzLl9taXBMZXZlbHM9WzBdLHRoaXMuX21hZ0ZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fbWluRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl93cmFwUz10LkNMQU1QX1RPX0VER0UsdGhpcy5fd3JhcFQ9dC5DTEFNUF9UT19FREdFLHRoaXMuX2FuaXNvU2FtcGxlcz0xO3ZhciBvPXRoaXMscz1bdGhpcy5fd3JhcFMsdGhpcy5fd3JhcFRdO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHMsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFN9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwUz10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBUPXR9fV0pLHRoaXMuX3dyYXBWZWN0b3I9czt2YXIgbD1bdGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV1dO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53aWR0aD10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLmhlaWdodD10fX1dKSx0aGlzLl9zaGFwZVZlY3Rvcj1sfXZhciBkPXAucHJvdG90eXBlO2Z1bmN0aW9uIGcodCxlKXtyZXR1cm4gMz09PXQubGVuZ3RoPzE9PT1lWzJdJiZlWzFdPT09dFswXSp0WzJdJiZlWzBdPT09dFsyXToxPT09ZVswXSYmZVsxXT09PXRbMF19ZnVuY3Rpb24gbSh0KXt2YXIgZT10LmNyZWF0ZVRleHR1cmUoKTtyZXR1cm4gdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUlOX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01BR19GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSxlfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgYT10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5hfHxyPDB8fHI+YSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlIik7aWYoaT09PXQuRkxPQVQmJiF0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogRmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7dmFyIG89bSh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLG4sZSxyLDAsbixpLG51bGwpLG5ldyBwKHQsbyxlLHIsbixpKX1mdW5jdGlvbiB5KHQsZSxyLG4saSxhKXt2YXIgbz1tKHQpO3JldHVybiB0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsaSxpLGEsZSksbmV3IHAodCxvLHIsbixpLGEpfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj1lLmR0eXBlLG89ZS5zaGFwZS5zbGljZSgpLHM9dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihvWzBdPDB8fG9bMF0+c3x8b1sxXTwwfHxvWzFdPnMpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaXplIik7dmFyIGw9ZyhvLGUuc3RyaWRlLnNsaWNlKCkpLGM9MDsiZmxvYXQzMiI9PT1yP2M9dC5GTE9BVDoiZmxvYXQ2NCI9PT1yPyhjPXQuRkxPQVQsbD0hMSxyPSJmbG9hdDMyIik6InVpbnQ4Ij09PXI/Yz10LlVOU0lHTkVEX0JZVEU6KGM9dC5VTlNJR05FRF9CWVRFLGw9ITEscj0idWludDgiKTt2YXIgdSxmLGQ9MDtpZigyPT09by5sZW5ndGgpZD10LkxVTUlOQU5DRSxvPVtvWzBdLG9bMV0sMV0sZT1uKGUuZGF0YSxvLFtlLnN0cmlkZVswXSxlLnN0cmlkZVsxXSwxXSxlLm9mZnNldCk7ZWxzZXtpZigzIT09by5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHRleHR1cmUiKTtpZigxPT09b1syXSlkPXQuQUxQSEE7ZWxzZSBpZigyPT09b1syXSlkPXQuTFVNSU5BTkNFX0FMUEhBO2Vsc2UgaWYoMz09PW9bMl0pZD10LlJHQjtlbHNle2lmKDQhPT1vWzJdKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciBwaXhlbCBjb29yZHMiKTtkPXQuUkdCQX19YyE9PXQuRkxPQVR8fHQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdCIpfHwoYz10LlVOU0lHTkVEX0JZVEUsbD0hMSk7dmFyIHY9ZS5zaXplO2lmKGwpdT0wPT09ZS5vZmZzZXQmJmUuZGF0YS5sZW5ndGg9PT12P2UuZGF0YTplLmRhdGEuc3ViYXJyYXkoZS5vZmZzZXQsZS5vZmZzZXQrdik7ZWxzZXt2YXIgeT1bb1syXSxvWzJdKm9bMF0sMV07Zj1hLm1hbGxvYyh2LHIpO3ZhciB4PW4oZixvLHksMCk7ImZsb2F0MzIiIT09ciYmImZsb2F0NjQiIT09cnx8YyE9PXQuVU5TSUdORURfQllURT9pLmFzc2lnbih4LGUpOmgoeCxlKSx1PWYuc3ViYXJyYXkoMCx2KX12YXIgYj1tKHQpO3JldHVybiB0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsZCxvWzBdLG9bMV0sMCxkLGMsdSksbHx8YS5mcmVlKGYpLG5ldyBwKHQsYixvWzBdLG9bMV0sZCxjKX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhkLHttaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5GaWx0ZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLmJpbmQoKTt2YXIgZT10aGlzLmdsO2lmKHRoaXMudHlwZT09PWUuRkxPQVQmJm8uaW5kZXhPZih0KT49MCYmKGUuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gZmlsdGVyIG1vZGUgIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUix0KSx0aGlzLl9taW5GaWx0ZXI9dH19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmby5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwodD1lLk5FQVJFU1QpKSxzLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSAiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLHQpLHRoaXMuX21hZ0ZpbHRlcj10fX0sbWlwU2FtcGxlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc30sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FuaXNvU2FtcGxlcztpZih0aGlzLl9hbmlzb1NhbXBsZXM9MHxNYXRoLm1heCh0LDEpLGUhPT10aGlzLl9hbmlzb1NhbXBsZXMpe3ZhciByPXRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtyJiZ0aGlzLmdsLnRleFBhcmFtZXRlcmYodGhpcy5nbC5URVhUVVJFXzJELHIuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsdGhpcy5fYW5pc29TYW1wbGVzKX1yZXR1cm4gdGhpcy5fYW5pc29TYW1wbGVzfX0sd3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGwuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3JldHVybiB0aGlzLmdsLnRleFBhcmFtZXRlcmkodGhpcy5nbC5URVhUVVJFXzJELHRoaXMuZ2wuVEVYVFVSRV9XUkFQX1MsdCksdGhpcy5fd3JhcFM9dH19LHdyYXBUOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFR9LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmJpbmQoKSxsLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9ULHQpLHRoaXMuX3dyYXBUPXR9fSx3cmFwOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVt0LHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IE11c3Qgc3BlY2lmeSB3cmFwIG1vZGUgZm9yIHJvd3MgYW5kIGNvbHVtbnMiKTtmb3IodmFyIGU9MDtlPDI7KytlKWlmKGwuaW5kZXhPZih0W2VdKTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3RoaXMuX3dyYXBTPXRbMF0sdGhpcy5fd3JhcFQ9dFsxXTt2YXIgcj10aGlzLmdsO3JldHVybiB0aGlzLmJpbmQoKSxyLnRleFBhcmFtZXRlcmkoci5URVhUVVJFXzJELHIuVEVYVFVSRV9XUkFQX1MsdGhpcy5fd3JhcFMpLHIudGV4UGFyYW1ldGVyaShyLlRFWFRVUkVfMkQsci5URVhUVVJFX1dSQVBfVCx0aGlzLl93cmFwVCksdH19LHNoYXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZigyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZSIpfWVsc2UgdD1bMHx0LDB8dF07cmV0dXJuIGYodGhpcywwfHRbMF0sMHx0WzFdKSxbMHx0WzBdLDB8dFsxXV19fSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGYodGhpcyx0fD0wLHRoaXMuX3NoYXBlWzFdKSx0fX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxmKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH19fSksZC5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2w7cmV0dXJuIHZvaWQgMCE9PXQmJmUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwKygwfHQpKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLmhhbmRsZSksdm9pZCAwIT09dD8wfHQ6ZS5nZXRQYXJhbWV0ZXIoZS5BQ1RJVkVfVEVYVFVSRSktZS5URVhUVVJFMH0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVUZXh0dXJlKHRoaXMuaGFuZGxlKX0sZC5nZW5lcmF0ZU1pcG1hcD1mdW5jdGlvbigpe3RoaXMuYmluZCgpLHRoaXMuZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5nbC5URVhUVVJFXzJEKTtmb3IodmFyIHQ9TWF0aC5taW4odGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pLGU9MDt0PjA7KytlLHQ+Pj49MSl0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihlKTwwJiZ0aGlzLl9taXBMZXZlbHMucHVzaChlKX0sZC5zZXRQaXhlbHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9dGhpcy5nbDt0aGlzLmJpbmQoKSxBcnJheS5pc0FycmF5KGUpPyhvPXIscj0wfGVbMV0sZT0wfGVbMF0pOihlPWV8fDAscj1yfHwwKSxvPW98fDA7dmFyIGw9dSh0KT90OnQucmF3O2lmKGwpe3RoaXMuX21pcExldmVscy5pbmRleE9mKG8pPDA/KHMudGV4SW1hZ2UyRChzLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCx0aGlzLnR5cGUsbCksdGhpcy5fbWlwTGV2ZWxzLnB1c2gobykpOnMudGV4U3ViSW1hZ2UyRChzLlRFWFRVUkVfMkQsbyxlLHIsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpfWVsc2V7aWYoISh0LnNoYXBlJiZ0LnN0cmlkZSYmdC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7aWYodC5zaGFwZS5sZW5ndGg8Mnx8ZSt0LnNoYXBlWzFdPnRoaXMuX3NoYXBlWzFdPj4+b3x8cit0LnNoYXBlWzBdPnRoaXMuX3NoYXBlWzBdPj4+b3x8ZTwwfHxyPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFRleHR1cmUgZGltZW5zaW9ucyBhcmUgb3V0IG9mIGJvdW5kcyIpOyFmdW5jdGlvbih0LGUscixvLHMsbCxjLHUpe3ZhciBmPXUuZHR5cGUscD11LnNoYXBlLnNsaWNlKCk7aWYocC5sZW5ndGg8Mnx8cC5sZW5ndGg+Myl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBuZGFycmF5LCBtdXN0IGJlIDJkIG9yIDNkIik7dmFyIGQ9MCxtPTAsdj1nKHAsdS5zdHJpZGUuc2xpY2UoKSk7ImZsb2F0MzIiPT09Zj9kPXQuRkxPQVQ6ImZsb2F0NjQiPT09Zj8oZD10LkZMT0FULHY9ITEsZj0iZmxvYXQzMiIpOiJ1aW50OCI9PT1mP2Q9dC5VTlNJR05FRF9CWVRFOihkPXQuVU5TSUdORURfQllURSx2PSExLGY9InVpbnQ4Iik7aWYoMj09PXAubGVuZ3RoKW09dC5MVU1JTkFOQ0UscD1bcFswXSxwWzFdLDFdLHU9bih1LmRhdGEscCxbdS5zdHJpZGVbMF0sdS5zdHJpZGVbMV0sMV0sdS5vZmZzZXQpO2Vsc2V7aWYoMyE9PXAubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PXBbMl0pbT10LkFMUEhBO2Vsc2UgaWYoMj09PXBbMl0pbT10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1wWzJdKW09dC5SR0I7ZWxzZXtpZig0IT09cFsyXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7bT10LlJHQkF9cFsyXX1tIT09dC5MVU1JTkFOQ0UmJm0hPT10LkFMUEhBfHxzIT09dC5MVU1JTkFOQ0UmJnMhPT10LkFMUEhBfHwobT1zKTtpZihtIT09cyl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW5jb21wYXRpYmxlIHRleHR1cmUgZm9ybWF0IGZvciBzZXRQaXhlbHMiKTt2YXIgeT11LnNpemUseD1jLmluZGV4T2Yobyk8MDt4JiZjLnB1c2gobyk7aWYoZD09PWwmJnYpMD09PXUub2Zmc2V0JiZ1LmRhdGEubGVuZ3RoPT09eT94P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCx1LmRhdGEpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCx1LmRhdGEpOng/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLHUuZGF0YS5zdWJhcnJheSh1Lm9mZnNldCx1Lm9mZnNldCt5KSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLHUuZGF0YS5zdWJhcnJheSh1Lm9mZnNldCx1Lm9mZnNldCt5KSk7ZWxzZXt2YXIgYjtiPWw9PT10LkZMT0FUP2EubWFsbG9jRmxvYXQzMih5KTphLm1hbGxvY1VpbnQ4KHkpO3ZhciBfPW4oYixwLFtwWzJdLHBbMl0qcFswXSwxXSk7ZD09PXQuRkxPQVQmJmw9PT10LlVOU0lHTkVEX0JZVEU/aChfLHUpOmkuYXNzaWduKF8sdSkseD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsYi5zdWJhcnJheSgwLHkpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsYi5zdWJhcnJheSgwLHkpKSxsPT09dC5GTE9BVD9hLmZyZWVGbG9hdDMyKGIpOmEuZnJlZVVpbnQ4KGIpfX0ocyxlLHIsbyx0aGlzLmZvcm1hdCx0aGlzLnR5cGUsdGhpcy5fbWlwTGV2ZWxzLHQpfX19LHtuZGFycmF5OjQ2OSwibmRhcnJheS1vcHMiOjQ2NCwidHlwZWRhcnJheS1wb29sIjo1Njd9XSwzMjg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBpY2stYnktYWxpYXMiKTtmdW5jdGlvbiBpKHQpe2lmKHQuY29udGFpbmVyKWlmKHQuY29udGFpbmVyPT1kb2N1bWVudC5ib2R5KWRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGh8fCh0LmNhbnZhcy53aWR0aD10LndpZHRofHx0LnBpeGVsUmF0aW8qci5pbm5lcldpZHRoKSxkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodHx8KHQuY2FudmFzLmhlaWdodD10LmhlaWdodHx8dC5waXhlbFJhdGlvKnIuaW5uZXJIZWlnaHQpO2Vsc2V7dmFyIGU9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5jYW52YXMud2lkdGg9dC53aWR0aHx8ZS5yaWdodC1lLmxlZnQsdC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHxlLmJvdHRvbS1lLnRvcH19ZnVuY3Rpb24gYSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDb250ZXh0JiYid2lkdGgiaW4gdCYmImhlaWdodCJpbiB0fWZ1bmN0aW9uIG8oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPTAsdC5zdHlsZS5sZWZ0PTAsdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYodD8ic3RyaW5nIj09dHlwZW9mIHQmJih0PXtjb250YWluZXI6dH0pOnQ9e30sYSh0KT90PXtjb250YWluZXI6dH06dD0ic3RyaW5nIj09dHlwZW9mKGU9dCkubm9kZU5hbWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmFwcGVuZENoaWxkJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/e2NvbnRhaW5lcjp0fTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5kcmF3QXJyYXlzfHwiZnVuY3Rpb24iPT10eXBlb2YgdC5kcmF3RWxlbWVudHN9KHQpP3tnbDp0fTpuKHQse2NvbnRhaW5lcjoiY29udGFpbmVyIHRhcmdldCBlbGVtZW50IGVsIGNhbnZhcyBob2xkZXIgcGFyZW50IHBhcmVudE5vZGUgd3JhcHBlciB1c2UgcmVmIHJvb3Qgbm9kZSIsZ2w6ImdsIGNvbnRleHQgd2ViZ2wgZ2xDb250ZXh0IixhdHRyczoiYXR0cmlidXRlcyBhdHRycyBjb250ZXh0QXR0cmlidXRlcyIscGl4ZWxSYXRpbzoicGl4ZWxSYXRpbyBweFJhdGlvIHB4IHJhdGlvIHB4cmF0aW8gcGl4ZWxyYXRpbyIsd2lkdGg6Incgd2lkdGgiLGhlaWdodDoiaCBoZWlnaHQifSwhMCksdC5waXhlbFJhdGlvfHwodC5waXhlbFJhdGlvPXIucGl4ZWxSYXRpb3x8MSksdC5nbClyZXR1cm4gdC5nbDtpZih0LmNhbnZhcyYmKHQuY29udGFpbmVyPXQuY2FudmFzLnBhcmVudE5vZGUpLHQuY29udGFpbmVyKXtpZigic3RyaW5nIj09dHlwZW9mIHQuY29udGFpbmVyKXt2YXIgcz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQuY29udGFpbmVyKTtpZighcyl0aHJvdyBFcnJvcigiRWxlbWVudCAiK3QuY29udGFpbmVyKyIgaXMgbm90IGZvdW5kIik7dC5jb250YWluZXI9c31hKHQuY29udGFpbmVyKT8odC5jYW52YXM9dC5jb250YWluZXIsdC5jb250YWluZXI9dC5jYW52YXMucGFyZW50Tm9kZSk6dC5jYW52YXN8fCh0LmNhbnZhcz1vKCksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodC5jYW52YXMpLGkodCkpfWVsc2UgaWYoIXQuY2FudmFzKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50KXRocm93IEVycm9yKCJOb3QgRE9NIGVudmlyb25tZW50LiBVc2UgaGVhZGxlc3MtZ2wuIik7dC5jb250YWluZXI9ZG9jdW1lbnQuYm9keXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQuY2FudmFzPW8oKSx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNhbnZhcyksaSh0KX1pZighdC5nbCl0cnl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbCIsdC5hdHRycyl9Y2F0Y2goZSl7dHJ5e3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIix0LmF0dHJzKX1jYXRjaChlKXt0LmdsPXQuY2FudmFzLmdldENvbnRleHQoIndlYmdsLWV4cGVyaW1lbnRhbCIsdC5hdHRycyl9fXJldHVybiB0LmdsfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJwaWNrLWJ5LWFsaWFzIjo0ODV9XSwzMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlP2UuYmluZCgpOnQuYmluZEJ1ZmZlcih0LkVMRU1FTlRfQVJSQVlfQlVGRkVSLG51bGwpO3ZhciBuPTB8dC5nZXRQYXJhbWV0ZXIodC5NQVhfVkVSVEVYX0FUVFJJQlMpO2lmKHIpe2lmKHIubGVuZ3RoPm4pdGhyb3cgbmV3IEVycm9yKCJnbC12YW86IFRvbyBtYW55IHZlcnRleCBhdHRyaWJ1dGVzIik7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBhPXJbaV07aWYoYS5idWZmZXIpe3ZhciBvPWEuYnVmZmVyLHM9YS5zaXplfHw0LGw9YS50eXBlfHx0LkZMT0FULGM9ISFhLm5vcm1hbGl6ZWQsdT1hLnN0cmlkZXx8MCxoPWEub2Zmc2V0fHwwO28uYmluZCgpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkscyxsLGMsdSxoKX1lbHNle2lmKCJudW1iZXIiPT10eXBlb2YgYSl0LnZlcnRleEF0dHJpYjFmKGksYSk7ZWxzZSBpZigxPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIxZihpLGFbMF0pO2Vsc2UgaWYoMj09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliMmYoaSxhWzBdLGFbMV0pO2Vsc2UgaWYoMz09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliM2YoaSxhWzBdLGFbMV0sYVsyXSk7ZWxzZXtpZig0IT09YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC12YW86IEludmFsaWQgdmVydGV4IGF0dHJpYnV0ZSIpO3QudmVydGV4QXR0cmliNGYoaSxhWzBdLGFbMV0sYVsyXSxhWzNdKX10LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19Zm9yKDtpPG47KytpKXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfWVsc2V7dC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLG51bGwpO2ZvcihpPTA7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19fSx7fV0sMzMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZG8tYmluZC5qcyIpO2Z1bmN0aW9uIGkodCl7dGhpcy5nbD10LHRoaXMuX2VsZW1lbnRzPW51bGwsdGhpcy5fYXR0cmlidXRlcz1udWxsLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXtuKHRoaXMuZ2wsdGhpcy5fZWxlbWVudHMsdGhpcy5fYXR0cmlidXRlcyl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5fZWxlbWVudHM9ZSx0aGlzLl9hdHRyaWJ1dGVzPXQsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGkucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbigpe30saS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fZWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHQpfX0seyIuL2RvLWJpbmQuanMiOjMyOX1dLDMzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RvLWJpbmQuanMiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhKXt0aGlzLmxvY2F0aW9uPXQsdGhpcy5kaW1lbnNpb249ZSx0aGlzLmE9cix0aGlzLmI9bix0aGlzLmM9aSx0aGlzLmQ9YX1mdW5jdGlvbiBhKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5fZXh0PWUsdGhpcy5oYW5kbGU9cix0aGlzLl9hdHRyaWJzPVtdLHRoaXMuX3VzZUVsZW1lbnRzPSExLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuZGltZW5zaW9uKXtjYXNlIDE6dC52ZXJ0ZXhBdHRyaWIxZih0aGlzLmxvY2F0aW9uLHRoaXMuYSk7YnJlYWs7Y2FzZSAyOnQudmVydGV4QXR0cmliMmYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iKTticmVhaztjYXNlIDM6dC52ZXJ0ZXhBdHRyaWIzZih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jKTticmVhaztjYXNlIDQ6dC52ZXJ0ZXhBdHRyaWI0Zih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jLHRoaXMuZCl9fSxhLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSk7Zm9yKHZhciB0PTA7dDx0aGlzLl9hdHRyaWJzLmxlbmd0aDsrK3QpdGhpcy5fYXR0cmlic1t0XS5iaW5kKHRoaXMuZ2wpfSxhLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLl9leHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpfSxhLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMuaGFuZGxlKX0sYS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmJpbmQoKSxuKHRoaXMuZ2wsZSx0KSx0aGlzLnVuYmluZCgpLHRoaXMuX2F0dHJpYnMubGVuZ3RoPTAsdClmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG89dFthXTsibnVtYmVyIj09dHlwZW9mIG8/dGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsMSxvKSk6QXJyYXkuaXNBcnJheShvKSYmdGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsby5sZW5ndGgsb1swXSxvWzFdLG9bMl0sb1szXSkpfXRoaXMuX3VzZUVsZW1lbnRzPSEhZSx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fdXNlRWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGEodCxlLGUuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSl9fSx7Ii4vZG8tYmluZC5qcyI6MzI5fV0sMzMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3Zhby1uYXRpdmUuanMiKSxpPXQoIi4vbGliL3Zhby1lbXVsYXRlZC5qcyIpO2Z1bmN0aW9uIGEodCl7dGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dC5iaW5kVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmNyZWF0ZVZlcnRleEFycmF5T0VTPXQuY3JlYXRlVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmRlbGV0ZVZlcnRleEFycmF5T0VTPXQuZGVsZXRlVmVydGV4QXJyYXkuYmluZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbD10LmNyZWF0ZVZlcnRleEFycmF5P25ldyBhKHQpOnQuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpO3JldHVybihzPWw/bih0LGwpOmkodCkpLnVwZGF0ZShlLHIsbyksc319LHsiLi9saWIvdmFvLWVtdWxhdGVkLmpzIjozMzAsIi4vbGliL3Zhby1uYXRpdmUuanMiOjMzMX1dLDMzMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHR9fSx7fV0sMzM0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0WzBdLHRbMV0sdFsyXSksbz1uKGVbMF0sZVsxXSxlWzJdKTtpKHIsciksaShvLG8pO3ZhciBzPWEocixvKTtyZXR1cm4gcz4xPzA6TWF0aC5hY29zKHMpfTt2YXIgbj10KCIuL2Zyb21WYWx1ZXMiKSxpPXQoIi4vbm9ybWFsaXplIiksYT10KCIuL2RvdCIpfSx7Ii4vZG90IjozNDQsIi4vZnJvbVZhbHVlcyI6MzUwLCIuL25vcm1hbGl6ZSI6MzYxfV0sMzM1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5jZWlsKGVbMF0pLHRbMV09TWF0aC5jZWlsKGVbMV0pLHRbMl09TWF0aC5jZWlsKGVbMl0pLHR9fSx7fV0sMzM2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGV9fSx7fV0sMzM3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9fSx7fV0sMzM4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdH19LHt9XSwzMzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH19LHt9XSwzNDA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXN0YW5jZSIpfSx7Ii4vZGlzdGFuY2UiOjM0MX1dLDM0MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppKX19LHt9XSwzNDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXZpZGUiKX0seyIuL2RpdmlkZSI6MzQzfV0sMzQzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdL3JbMF0sdFsxXT1lWzFdL3JbMV0sdFsyXT1lWzJdL3JbMl0sdH19LHt9XSwzNDQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19fSx7fV0sMzQ1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPTFlLTZ9LHt9XSwzNDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz1lWzBdLHM9ZVsxXSxsPWVbMl07cmV0dXJuIE1hdGguYWJzKHItbyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhvKSkmJk1hdGguYWJzKGktcyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhpKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGEtbCk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhhKSxNYXRoLmFicyhsKSl9O3ZhciBuPXQoIi4vZXBzaWxvbiIpfSx7Ii4vZXBzaWxvbiI6MzQ1fV0sMzQ3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl19fSx7fV0sMzQ4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdFsyXT1NYXRoLmZsb29yKGVbMl0pLHR9fSx7fV0sMzQ5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSxvKXt2YXIgcyxsO2V8fChlPTMpO3J8fChyPTApO2w9aT9NYXRoLm1pbihpKmUrcix0Lmxlbmd0aCk6dC5sZW5ndGg7Zm9yKHM9cjtzPGw7cys9ZSluWzBdPXRbc10sblsxXT10W3MrMV0sblsyXT10W3MrMl0sYShuLG4sbyksdFtzXT1uWzBdLHRbcysxXT1uWzFdLHRbcysyXT1uWzJdO3JldHVybiB0fTt2YXIgbj10KCIuL2NyZWF0ZSIpKCl9LHsiLi9jcmVhdGUiOjMzOH1dLDM1MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gblswXT10LG5bMV09ZSxuWzJdPXIsbn19LHt9XSwzNTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0VQU0lMT046dCgiLi9lcHNpbG9uIiksY3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGFuZ2xlOnQoIi4vYW5nbGUiKSxmcm9tVmFsdWVzOnQoIi4vZnJvbVZhbHVlcyIpLGNvcHk6dCgiLi9jb3B5Iiksc2V0OnQoIi4vc2V0IiksZXF1YWxzOnQoIi4vZXF1YWxzIiksZXhhY3RFcXVhbHM6dCgiLi9leGFjdEVxdWFscyIpLGFkZDp0KCIuL2FkZCIpLHN1YnRyYWN0OnQoIi4vc3VidHJhY3QiKSxzdWI6dCgiLi9zdWIiKSxtdWx0aXBseTp0KCIuL211bHRpcGx5IiksbXVsOnQoIi4vbXVsIiksZGl2aWRlOnQoIi4vZGl2aWRlIiksZGl2OnQoIi4vZGl2IiksbWluOnQoIi4vbWluIiksbWF4OnQoIi4vbWF4IiksZmxvb3I6dCgiLi9mbG9vciIpLGNlaWw6dCgiLi9jZWlsIikscm91bmQ6dCgiLi9yb3VuZCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLGRpc3Q6dCgiLi9kaXN0Iiksc3F1YXJlZERpc3RhbmNlOnQoIi4vc3F1YXJlZERpc3RhbmNlIiksc3FyRGlzdDp0KCIuL3NxckRpc3QiKSxsZW5ndGg6dCgiLi9sZW5ndGgiKSxsZW46dCgiLi9sZW4iKSxzcXVhcmVkTGVuZ3RoOnQoIi4vc3F1YXJlZExlbmd0aCIpLHNxckxlbjp0KCIuL3NxckxlbiIpLG5lZ2F0ZTp0KCIuL25lZ2F0ZSIpLGludmVyc2U6dCgiLi9pbnZlcnNlIiksbm9ybWFsaXplOnQoIi4vbm9ybWFsaXplIiksZG90OnQoIi4vZG90IiksY3Jvc3M6dCgiLi9jcm9zcyIpLGxlcnA6dCgiLi9sZXJwIikscmFuZG9tOnQoIi4vcmFuZG9tIiksdHJhbnNmb3JtTWF0NDp0KCIuL3RyYW5zZm9ybU1hdDQiKSx0cmFuc2Zvcm1NYXQzOnQoIi4vdHJhbnNmb3JtTWF0MyIpLHRyYW5zZm9ybVF1YXQ6dCgiLi90cmFuc2Zvcm1RdWF0Iikscm90YXRlWDp0KCIuL3JvdGF0ZVgiKSxyb3RhdGVZOnQoIi4vcm90YXRlWSIpLHJvdGF0ZVo6dCgiLi9yb3RhdGVaIiksZm9yRWFjaDp0KCIuL2ZvckVhY2giKX19LHsiLi9hZGQiOjMzMywiLi9hbmdsZSI6MzM0LCIuL2NlaWwiOjMzNSwiLi9jbG9uZSI6MzM2LCIuL2NvcHkiOjMzNywiLi9jcmVhdGUiOjMzOCwiLi9jcm9zcyI6MzM5LCIuL2Rpc3QiOjM0MCwiLi9kaXN0YW5jZSI6MzQxLCIuL2RpdiI6MzQyLCIuL2RpdmlkZSI6MzQzLCIuL2RvdCI6MzQ0LCIuL2Vwc2lsb24iOjM0NSwiLi9lcXVhbHMiOjM0NiwiLi9leGFjdEVxdWFscyI6MzQ3LCIuL2Zsb29yIjozNDgsIi4vZm9yRWFjaCI6MzQ5LCIuL2Zyb21WYWx1ZXMiOjM1MCwiLi9pbnZlcnNlIjozNTIsIi4vbGVuIjozNTMsIi4vbGVuZ3RoIjozNTQsIi4vbGVycCI6MzU1LCIuL21heCI6MzU2LCIuL21pbiI6MzU3LCIuL211bCI6MzU4LCIuL211bHRpcGx5IjozNTksIi4vbmVnYXRlIjozNjAsIi4vbm9ybWFsaXplIjozNjEsIi4vcmFuZG9tIjozNjIsIi4vcm90YXRlWCI6MzYzLCIuL3JvdGF0ZVkiOjM2NCwiLi9yb3RhdGVaIjozNjUsIi4vcm91bmQiOjM2NiwiLi9zY2FsZSI6MzY3LCIuL3NjYWxlQW5kQWRkIjozNjgsIi4vc2V0IjozNjksIi4vc3FyRGlzdCI6MzcwLCIuL3NxckxlbiI6MzcxLCIuL3NxdWFyZWREaXN0YW5jZSI6MzcyLCIuL3NxdWFyZWRMZW5ndGgiOjM3MywiLi9zdWIiOjM3NCwiLi9zdWJ0cmFjdCI6Mzc1LCIuL3RyYW5zZm9ybU1hdDMiOjM3NiwiLi90cmFuc2Zvcm1NYXQ0IjozNzcsIi4vdHJhbnNmb3JtUXVhdCI6Mzc4fV0sMzUyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHR9fSx7fV0sMzUzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbGVuZ3RoIil9LHsiLi9sZW5ndGgiOjM1NH1dLDM1NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbil9fSx7fV0sMzU1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdFsyXT1vK24qKHJbMl0tbyksdH19LHt9XSwzNTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0fX0se31dLDM1NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHR9fSx7fV0sMzU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbXVsdGlwbHkiKX0seyIuL211bHRpcGx5IjozNTl9XSwzNTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qclswXSx0WzFdPWVbMV0qclsxXSx0WzJdPWVbMl0qclsyXSx0fX0se31dLDM2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0fX0se31dLDM2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO2E+MCYmKGE9MS9NYXRoLnNxcnQoYSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEpO3JldHVybiB0fX0se31dLDM2MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8MTt2YXIgcj0yKk1hdGgucmFuZG9tKCkqTWF0aC5QSSxuPTIqTWF0aC5yYW5kb20oKS0xLGk9TWF0aC5zcXJ0KDEtbipuKSplO3JldHVybiB0WzBdPU1hdGguY29zKHIpKmksdFsxXT1NYXRoLnNpbihyKSppLHRbMl09biplLHR9fSx7fV0sMzYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMV0sYT1yWzJdLG89ZVsxXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1lWzBdLHRbMV09aStvKmMtcypsLHRbMl09YStvKmwrcypjLHR9fSx7fV0sMzY0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzJdLG89ZVswXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK3MqbCtvKmMsdFsxXT1lWzFdLHRbMl09YStzKmMtbypsLHR9fSx7fV0sMzY1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89ZVswXS1pLHM9ZVsxXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK28qYy1zKmwsdFsxXT1hK28qbCtzKmMsdFsyXT1lWzJdLHR9fSx7fV0sMzY2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdFsyXT1NYXRoLnJvdW5kKGVbMl0pLHR9fSx7fV0sMzY3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH19LHt9XSwzNjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHR9fSx7fV0sMzY5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0fX0se31dLDM3MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3NxdWFyZWREaXN0YW5jZSIpfSx7Ii4vc3F1YXJlZERpc3RhbmNlIjozNzJ9XSwzNzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9zcXVhcmVkTGVuZ3RoIil9LHsiLi9zcXVhcmVkTGVuZ3RoIjozNzN9XSwzNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl07cmV0dXJuIHIqcituKm4raSppfX0se31dLDM3MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIGUqZStyKnIrbipufX0se31dLDM3NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3N1YnRyYWN0Iil9LHsiLi9zdWJ0cmFjdCI6Mzc1fV0sMzc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH19LHt9XSwzNzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHt9XSwzNzc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XTtyZXR1cm4gbz1vfHwxLHRbMF09KHJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKS9vLHRbMV09KHJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKS9vLHRbMl09KHJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSkvbyx0fX0se31dLDM3ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGg9YyppK2wqbi1vKmEsZj1jKmErbyppLXMqbixwPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrcCotbytoKi1sLWYqLXMsdFsxXT1oKmMrcCotcytmKi1vLXUqLWwsdFsyXT1mKmMrcCotbCt1Ki1zLWgqLW8sdH19LHt9XSwzNzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0fX0se31dLDM4MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZX19LHt9XSwzODE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHR9fSx7fV0sMzgyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0wLHR9fSx7fV0sMzgzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkrYSphKX19LHt9XSwzODQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0WzNdPWVbM10vclszXSx0fX0se31dLDM4NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119fSx7fV0sMzg2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGlbMF09dCxpWzFdPWUsaVsyXT1yLGlbM109bixpfX0se31dLDM4NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGZyb21WYWx1ZXM6dCgiLi9mcm9tVmFsdWVzIiksY29weTp0KCIuL2NvcHkiKSxzZXQ6dCgiLi9zZXQiKSxhZGQ6dCgiLi9hZGQiKSxzdWJ0cmFjdDp0KCIuL3N1YnRyYWN0IiksbXVsdGlwbHk6dCgiLi9tdWx0aXBseSIpLGRpdmlkZTp0KCIuL2RpdmlkZSIpLG1pbjp0KCIuL21pbiIpLG1heDp0KCIuL21heCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLHNxdWFyZWREaXN0YW5jZTp0KCIuL3NxdWFyZWREaXN0YW5jZSIpLGxlbmd0aDp0KCIuL2xlbmd0aCIpLHNxdWFyZWRMZW5ndGg6dCgiLi9zcXVhcmVkTGVuZ3RoIiksbmVnYXRlOnQoIi4vbmVnYXRlIiksaW52ZXJzZTp0KCIuL2ludmVyc2UiKSxub3JtYWxpemU6dCgiLi9ub3JtYWxpemUiKSxkb3Q6dCgiLi9kb3QiKSxsZXJwOnQoIi4vbGVycCIpLHJhbmRvbTp0KCIuL3JhbmRvbSIpLHRyYW5zZm9ybU1hdDQ6dCgiLi90cmFuc2Zvcm1NYXQ0IiksdHJhbnNmb3JtUXVhdDp0KCIuL3RyYW5zZm9ybVF1YXQiKX19LHsiLi9hZGQiOjM3OSwiLi9jbG9uZSI6MzgwLCIuL2NvcHkiOjM4MSwiLi9jcmVhdGUiOjM4MiwiLi9kaXN0YW5jZSI6MzgzLCIuL2RpdmlkZSI6Mzg0LCIuL2RvdCI6Mzg1LCIuL2Zyb21WYWx1ZXMiOjM4NiwiLi9pbnZlcnNlIjozODgsIi4vbGVuZ3RoIjozODksIi4vbGVycCI6MzkwLCIuL21heCI6MzkxLCIuL21pbiI6MzkyLCIuL211bHRpcGx5IjozOTMsIi4vbmVnYXRlIjozOTQsIi4vbm9ybWFsaXplIjozOTUsIi4vcmFuZG9tIjozOTYsIi4vc2NhbGUiOjM5NywiLi9zY2FsZUFuZEFkZCI6Mzk4LCIuL3NldCI6Mzk5LCIuL3NxdWFyZWREaXN0YW5jZSI6NDAwLCIuL3NxdWFyZWRMZW5ndGgiOjQwMSwiLi9zdWJ0cmFjdCI6NDAyLCIuL3RyYW5zZm9ybU1hdDQiOjQwMywiLi90cmFuc2Zvcm1RdWF0Ijo0MDR9XSwzODg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xL2VbMF0sdFsxXT0xL2VbMV0sdFsyXT0xL2VbMl0sdFszXT0xL2VbM10sdH19LHt9XSwzODk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuK2kqaSl9fSx7fV0sMzkwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXSxzPWVbM107cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHRbM109cytuKihyWzNdLXMpLHR9fSx7fV0sMzkxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdFszXT1NYXRoLm1heChlWzNdLHJbM10pLHR9fSx7fV0sMzkyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdFszXT1NYXRoLm1pbihlWzNdLHJbM10pLHR9fSx7fV0sMzkzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdFszXT1lWzNdKnJbM10sdH19LHt9XSwzOTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdFszXT0tZVszXSx0fX0se31dLDM5NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKnIrbipuK2kqaSthKmE7bz4wJiYobz0xL01hdGguc3FydChvKSx0WzBdPXIqbyx0WzFdPW4qbyx0WzJdPWkqbyx0WzNdPWEqbyk7cmV0dXJuIHR9fSx7fV0sMzk2OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxpPXQoIi4vc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwxLHRbMF09TWF0aC5yYW5kb20oKSx0WzFdPU1hdGgucmFuZG9tKCksdFsyXT1NYXRoLnJhbmRvbSgpLHRbM109TWF0aC5yYW5kb20oKSxuKHQsdCksaSh0LHQsZSksdH19LHsiLi9ub3JtYWxpemUiOjM5NSwiLi9zY2FsZSI6Mzk3fV0sMzk3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdH19LHt9XSwzOTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdH19LHt9XSwzOTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHR9fSx7fV0sNDAwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiByKnIrbipuK2kqaSthKmF9fSx7fV0sNDAxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIGUqZStyKnIrbipuK2kqaX19LHt9XSw0MDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0fX0se31dLDQwMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH19LHt9XSw0MDQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPXJbM10sdT1jKm4rcyphLWwqaSxoPWMqaStsKm4tbyphLGY9YyphK28qaS1zKm4scD0tbypuLXMqaS1sKmE7cmV0dXJuIHRbMF09dSpjK3AqLW8raCotbC1mKi1zLHRbMV09aCpjK3AqLXMrZiotby11Ki1sLHRbMl09ZipjK3AqLWwrdSotcy1oKi1vLHRbM109ZVszXSx0fX0se31dLDQwNTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2wtdG9rZW5pemVyIiksaT10KCJhdG9iLWxpdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUFycmF5LmlzQXJyYXkodCk/dDpuKHQpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGE9ZVtyXTtpZigicHJlcHJvY2Vzc29yIj09PWEudHlwZSl7dmFyIG89YS5kYXRhLm1hdGNoKC9cI2RlZmluZVxzK1NIQURFUl9OQU1FKF9CNjQpP1xzKyguKykkLyk7aWYobyYmb1syXSl7dmFyIHM9b1sxXSxsPW9bMl07cmV0dXJuKHM/aShsKTpsKS50cmltKCl9fX19fSx7ImF0b2ItbGl0ZSI6NzcsImdsc2wtdG9rZW5pemVyIjo0MTJ9XSw0MDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixjLHU9MCxoPTAsZj05OTkscD1bXSxkPVtdLGc9MSxtPTAsdj0wLHk9ITEseD0hMSxiPSIiLF89YSx3PW47IjMwMCBlcyI9PT0odD10fHx7fSkudmVyc2lvbiYmKF89cyx3PW8pO3ZhciBUPXt9LGs9e307Zm9yKHU9MDt1PF8ubGVuZ3RoO3UrKylUW19bdV1dPSEwO2Zvcih1PTA7dTx3Lmxlbmd0aDt1Kyspa1t3W3VdXT0hMDtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGQ9W10sbnVsbCE9PXQ/ZnVuY3Rpb24odCl7dT0wLHQudG9TdHJpbmcmJih0PXQudG9TdHJpbmcoKSk7dmFyIHI7Yis9dC5yZXBsYWNlKC9cclxuL2csIlxuIiksYz1iLmxlbmd0aDtmb3IoO2U9Ylt1XSx1PGM7KXtzd2l0Y2gocj11LGYpe2Nhc2UgMDp1PUMoKTticmVhaztjYXNlIDE6Y2FzZSAyOnU9RSgpO2JyZWFrO2Nhc2UgMzp1PUwoKTticmVhaztjYXNlIDQ6dT16KCk7YnJlYWs7Y2FzZSAxMTp1PUkoKTticmVhaztjYXNlIDU6dT1PKCk7YnJlYWs7Y2FzZSA5OTk5OnU9RCgpO2JyZWFrO2Nhc2UgOTp1PVMoKTticmVhaztjYXNlIDk5OTp1PUEoKX1pZihyIT09dSlzd2l0Y2goYltyXSl7Y2FzZSJcbiI6bT0wLCsrZzticmVhaztkZWZhdWx0OisrbX19cmV0dXJuIGgrPXUsYj1iLnNsaWNlKHUpLGR9KHQpOmZ1bmN0aW9uKHQpe3AubGVuZ3RoJiZNKHAuam9pbigiIikpO3JldHVybiBmPTEwLE0oIihlb2YpIiksZH0oKX07ZnVuY3Rpb24gTSh0KXt0Lmxlbmd0aCYmZC5wdXNoKHt0eXBlOmxbZl0sZGF0YTp0LHBvc2l0aW9uOnYsbGluZTpnLGNvbHVtbjptfSl9ZnVuY3Rpb24gQSgpe3JldHVybiBwPXAubGVuZ3RoP1tdOnAsIi8iPT09ciYmIioiPT09ZT8odj1oK3UtMSxmPTAscj1lLHUrMSk6Ii8iPT09ciYmIi8iPT09ZT8odj1oK3UtMSxmPTEscj1lLHUrMSk6IiMiPT09ZT8oZj0yLHY9aCt1LHUpOi9ccy8udGVzdChlKT8oZj05LHY9aCt1LHUpOih5PS9cZC8udGVzdChlKSx4PS9bXlx3X10vLnRlc3QoZSksdj1oK3UsZj15PzQ6eD8zOjk5OTksdSl9ZnVuY3Rpb24gUygpe3JldHVybi9bXlxzXS9nLnRlc3QoZSk/KE0ocC5qb2luKCIiKSksZj05OTksdSk6KHAucHVzaChlKSxyPWUsdSsxKX1mdW5jdGlvbiBFKCl7cmV0dXJuIlxyIiE9PWUmJiJcbiIhPT1lfHwiXFwiPT09cj8ocC5wdXNoKGUpLHI9ZSx1KzEpOihNKHAuam9pbigiIikpLGY9OTk5LHUpfWZ1bmN0aW9uIEMoKXtyZXR1cm4iLyI9PT1lJiYiKiI9PT1yPyhwLnB1c2goZSksTShwLmpvaW4oIiIpKSxmPTk5OSx1KzEpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24gTCgpe2lmKCIuIj09PXImJi9cZC8udGVzdChlKSlyZXR1cm4gZj01LHU7aWYoIi8iPT09ciYmIioiPT09ZSlyZXR1cm4gZj0wLHU7aWYoIi8iPT09ciYmIi8iPT09ZSlyZXR1cm4gZj0xLHU7aWYoIi4iPT09ZSYmcC5sZW5ndGgpe2Zvcig7UChwKTspO3JldHVybiBmPTUsdX1pZigiOyI9PT1lfHwiKSI9PT1lfHwiKCI9PT1lKXtpZihwLmxlbmd0aClmb3IoO1AocCk7KTtyZXR1cm4gTShlKSxmPTk5OSx1KzF9dmFyIHQ9Mj09PXAubGVuZ3RoJiYiPSIhPT1lO2lmKC9bXHdfXGRcc10vLnRlc3QoZSl8fHQpe2Zvcig7UChwKTspO3JldHVybiBmPTk5OSx1fXJldHVybiBwLnB1c2goZSkscj1lLHUrMX1mdW5jdGlvbiBQKHQpe2Zvcih2YXIgZSxyLG49MDs7KXtpZihlPWkuaW5kZXhPZih0LnNsaWNlKDAsdC5sZW5ndGgrbikuam9pbigiIikpLHI9aVtlXSwtMT09PWUpe2lmKG4tLSt0Lmxlbmd0aD4wKWNvbnRpbnVlO3I9dC5zbGljZSgwLDEpLmpvaW4oIiIpfXJldHVybiBNKHIpLHYrPXIubGVuZ3RoLChwPXAuc2xpY2Uoci5sZW5ndGgpKS5sZW5ndGh9fWZ1bmN0aW9uIEkoKXtyZXR1cm4vW15hLWZBLUYwLTldLy50ZXN0KGUpPyhNKHAuam9pbigiIikpLGY9OTk5LHUpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24geigpe3JldHVybiIuIj09PWV8fC9bZUVdLy50ZXN0KGUpPyhwLnB1c2goZSksZj01LHI9ZSx1KzEpOiJ4Ij09PWUmJjE9PT1wLmxlbmd0aCYmIjAiPT09cFswXT8oZj0xMSxwLnB1c2goZSkscj1lLHUrMSk6L1teXGRdLy50ZXN0KGUpPyhNKHAuam9pbigiIikpLGY9OTk5LHUpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24gTygpe3JldHVybiJmIj09PWUmJihwLnB1c2goZSkscj1lLHUrPTEpLC9bZUVdLy50ZXN0KGUpPyhwLnB1c2goZSkscj1lLHUrMSk6KCItIiE9PWUmJiIrIiE9PWV8fCEvW2VFXS8udGVzdChyKSkmJi9bXlxkXS8udGVzdChlKT8oTShwLmpvaW4oIiIpKSxmPTk5OSx1KToocC5wdXNoKGUpLHI9ZSx1KzEpfWZ1bmN0aW9uIEQoKXtpZigvW15cZFx3X10vLnRlc3QoZSkpe3ZhciB0PXAuam9pbigiIik7cmV0dXJuIGY9a1t0XT84OlRbdF0/Nzo2LE0ocC5qb2luKCIiKSksZj05OTksdX1yZXR1cm4gcC5wdXNoKGUpLHI9ZSx1KzF9fTt2YXIgbj10KCIuL2xpYi9saXRlcmFscyIpLGk9dCgiLi9saWIvb3BlcmF0b3JzIiksYT10KCIuL2xpYi9idWlsdGlucyIpLG89dCgiLi9saWIvbGl0ZXJhbHMtMzAwZXMiKSxzPXQoIi4vbGliL2J1aWx0aW5zLTMwMGVzIiksbD1bImJsb2NrLWNvbW1lbnQiLCJsaW5lLWNvbW1lbnQiLCJwcmVwcm9jZXNzb3IiLCJvcGVyYXRvciIsImludGVnZXIiLCJmbG9hdCIsImlkZW50IiwiYnVpbHRpbiIsImtleXdvcmQiLCJ3aGl0ZXNwYWNlIiwiZW9mIiwiaW50ZWdlciJdfSx7Ii4vbGliL2J1aWx0aW5zIjo0MDgsIi4vbGliL2J1aWx0aW5zLTMwMGVzIjo0MDcsIi4vbGliL2xpdGVyYWxzIjo0MTAsIi4vbGliL2xpdGVyYWxzLTMwMGVzIjo0MDksIi4vbGliL29wZXJhdG9ycyI6NDExfV0sNDA3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9idWlsdGlucyIpO249bi5zbGljZSgpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIS9eKGdsXF98dGV4dHVyZSkvLnRlc3QodCl9KSksZS5leHBvcnRzPW4uY29uY2F0KFsiZ2xfVmVydGV4SUQiLCJnbF9JbnN0YW5jZUlEIiwiZ2xfUG9zaXRpb24iLCJnbF9Qb2ludFNpemUiLCJnbF9GcmFnQ29vcmQiLCJnbF9Gcm9udEZhY2luZyIsImdsX0ZyYWdEZXB0aCIsImdsX1BvaW50Q29vcmQiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzIiwiZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhEcmF3QnVmZmVycyIsImdsX01pblByb2dyYW1UZXhlbE9mZnNldCIsImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiwiZ2xfRGVwdGhSYW5nZSIsInRydW5jIiwicm91bmQiLCJyb3VuZEV2ZW4iLCJpc25hbiIsImlzaW5mIiwiZmxvYXRCaXRzVG9JbnQiLCJmbG9hdEJpdHNUb1VpbnQiLCJpbnRCaXRzVG9GbG9hdCIsInVpbnRCaXRzVG9GbG9hdCIsInBhY2tTbm9ybTJ4MTYiLCJ1bnBhY2tTbm9ybTJ4MTYiLCJwYWNrVW5vcm0yeDE2IiwidW5wYWNrVW5vcm0yeDE2IiwicGFja0hhbGYyeDE2IiwidW5wYWNrSGFsZjJ4MTYiLCJvdXRlclByb2R1Y3QiLCJ0cmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsImludmVyc2UiLCJ0ZXh0dXJlIiwidGV4dHVyZVNpemUiLCJ0ZXh0dXJlUHJvaiIsInRleHR1cmVMb2QiLCJ0ZXh0dXJlT2Zmc2V0IiwidGV4ZWxGZXRjaCIsInRleGVsRmV0Y2hPZmZzZXQiLCJ0ZXh0dXJlUHJvak9mZnNldCIsInRleHR1cmVMb2RPZmZzZXQiLCJ0ZXh0dXJlUHJvakxvZCIsInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwidGV4dHVyZUdyYWQiLCJ0ZXh0dXJlR3JhZE9mZnNldCIsInRleHR1cmVQcm9qR3JhZCIsInRleHR1cmVQcm9qR3JhZE9mZnNldCJdKX0seyIuL2J1aWx0aW5zIjo0MDh9XSw0MDg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJhYnMiLCJhY29zIiwiYWxsIiwiYW55IiwiYXNpbiIsImF0YW4iLCJjZWlsIiwiY2xhbXAiLCJjb3MiLCJjcm9zcyIsImRGZHgiLCJkRmR5IiwiZGVncmVlcyIsImRpc3RhbmNlIiwiZG90IiwiZXF1YWwiLCJleHAiLCJleHAyIiwiZmFjZWZvcndhcmQiLCJmbG9vciIsImZyYWN0IiwiZ2xfQmFja0NvbG9yIiwiZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IiwiZ2xfQmFja0xpZ2h0UHJvZHVjdCIsImdsX0JhY2tNYXRlcmlhbCIsImdsX0JhY2tTZWNvbmRhcnlDb2xvciIsImdsX0NsaXBQbGFuZSIsImdsX0NsaXBWZXJ0ZXgiLCJnbF9Db2xvciIsImdsX0RlcHRoUmFuZ2UiLCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIsImdsX0V5ZVBsYW5lUSIsImdsX0V5ZVBsYW5lUiIsImdsX0V5ZVBsYW5lUyIsImdsX0V5ZVBsYW5lVCIsImdsX0ZvZyIsImdsX0ZvZ0Nvb3JkIiwiZ2xfRm9nRnJhZ0Nvb3JkIiwiZ2xfRm9nUGFyYW1ldGVycyIsImdsX0ZyYWdDb2xvciIsImdsX0ZyYWdDb29yZCIsImdsX0ZyYWdEYXRhIiwiZ2xfRnJhZ0RlcHRoIiwiZ2xfRnJhZ0RlcHRoRVhUIiwiZ2xfRnJvbnRDb2xvciIsImdsX0Zyb250RmFjaW5nIiwiZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdCIsImdsX0Zyb250TGlnaHRQcm9kdWN0IiwiZ2xfRnJvbnRNYXRlcmlhbCIsImdsX0Zyb250U2Vjb25kYXJ5Q29sb3IiLCJnbF9MaWdodE1vZGVsIiwiZ2xfTGlnaHRNb2RlbFBhcmFtZXRlcnMiLCJnbF9MaWdodE1vZGVsUHJvZHVjdHMiLCJnbF9MaWdodFByb2R1Y3RzIiwiZ2xfTGlnaHRTb3VyY2UiLCJnbF9MaWdodFNvdXJjZVBhcmFtZXRlcnMiLCJnbF9NYXRlcmlhbFBhcmFtZXRlcnMiLCJnbF9NYXhDbGlwUGxhbmVzIiwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heERyYXdCdWZmZXJzIiwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtQ29tcG9uZW50cyIsImdsX01heExpZ2h0cyIsImdsX01heFRleHR1cmVDb29yZHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFRleHR1cmVVbml0cyIsImdsX01heFZhcnlpbmdGbG9hdHMiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhWZXJ0ZXhVbmlmb3JtQ29tcG9uZW50cyIsImdsX01vZGVsVmlld01hdHJpeCIsImdsX01vZGVsVmlld01hdHJpeEludmVyc2UiLCJnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3TWF0cml4VHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIiwiZ2xfTXVsdGlUZXhDb29yZDAiLCJnbF9NdWx0aVRleENvb3JkMSIsImdsX011bHRpVGV4Q29vcmQyIiwiZ2xfTXVsdGlUZXhDb29yZDMiLCJnbF9NdWx0aVRleENvb3JkNCIsImdsX011bHRpVGV4Q29vcmQ1IiwiZ2xfTXVsdGlUZXhDb29yZDYiLCJnbF9NdWx0aVRleENvb3JkNyIsImdsX05vcm1hbCIsImdsX05vcm1hbE1hdHJpeCIsImdsX05vcm1hbFNjYWxlIiwiZ2xfT2JqZWN0UGxhbmVRIiwiZ2xfT2JqZWN0UGxhbmVSIiwiZ2xfT2JqZWN0UGxhbmVTIiwiZ2xfT2JqZWN0UGxhbmVUIiwiZ2xfUG9pbnQiLCJnbF9Qb2ludENvb3JkIiwiZ2xfUG9pbnRQYXJhbWV0ZXJzIiwiZ2xfUG9pbnRTaXplIiwiZ2xfUG9zaXRpb24iLCJnbF9Qcm9qZWN0aW9uTWF0cml4IiwiZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2UiLCJnbF9TZWNvbmRhcnlDb2xvciIsImdsX1RleENvb3JkIiwiZ2xfVGV4dHVyZUVudkNvbG9yIiwiZ2xfVGV4dHVyZU1hdHJpeCIsImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlIiwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9UZXh0dXJlTWF0cml4VHJhbnNwb3NlIiwiZ2xfVmVydGV4IiwiZ3JlYXRlclRoYW4iLCJncmVhdGVyVGhhbkVxdWFsIiwiaW52ZXJzZXNxcnQiLCJsZW5ndGgiLCJsZXNzVGhhbiIsImxlc3NUaGFuRXF1YWwiLCJsb2ciLCJsb2cyIiwibWF0cml4Q29tcE11bHQiLCJtYXgiLCJtaW4iLCJtaXgiLCJtb2QiLCJub3JtYWxpemUiLCJub3QiLCJub3RFcXVhbCIsInBvdyIsInJhZGlhbnMiLCJyZWZsZWN0IiwicmVmcmFjdCIsInNpZ24iLCJzaW4iLCJzbW9vdGhzdGVwIiwic3FydCIsInN0ZXAiLCJ0YW4iLCJ0ZXh0dXJlMkQiLCJ0ZXh0dXJlMkRMb2QiLCJ0ZXh0dXJlMkRQcm9qIiwidGV4dHVyZTJEUHJvakxvZCIsInRleHR1cmVDdWJlIiwidGV4dHVyZUN1YmVMb2QiLCJ0ZXh0dXJlMkRMb2RFWFQiLCJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwidGV4dHVyZUN1YmVMb2RFWFQiLCJ0ZXh0dXJlMkRHcmFkRVhUIiwidGV4dHVyZTJEUHJvakdyYWRFWFQiLCJ0ZXh0dXJlQ3ViZUdyYWRFWFQiXX0se31dLDQwOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vbGl0ZXJhbHMiKTtlLmV4cG9ydHM9bi5zbGljZSgpLmNvbmNhdChbImxheW91dCIsImNlbnRyb2lkIiwic21vb3RoIiwiY2FzZSIsIm1hdDJ4MiIsIm1hdDJ4MyIsIm1hdDJ4NCIsIm1hdDN4MiIsIm1hdDN4MyIsIm1hdDN4NCIsIm1hdDR4MiIsIm1hdDR4MyIsIm1hdDR4NCIsInV2ZWMyIiwidXZlYzMiLCJ1dmVjNCIsInNhbXBsZXJDdWJlU2hhZG93Iiwic2FtcGxlcjJEQXJyYXkiLCJzYW1wbGVyMkRBcnJheVNoYWRvdyIsImlzYW1wbGVyMkQiLCJpc2FtcGxlcjNEIiwiaXNhbXBsZXJDdWJlIiwiaXNhbXBsZXIyREFycmF5IiwidXNhbXBsZXIyRCIsInVzYW1wbGVyM0QiLCJ1c2FtcGxlckN1YmUiLCJ1c2FtcGxlcjJEQXJyYXkiLCJjb2hlcmVudCIsInJlc3RyaWN0IiwicmVhZG9ubHkiLCJ3cml0ZW9ubHkiLCJyZXNvdXJjZSIsImF0b21pY191aW50Iiwibm9wZXJzcGVjdGl2ZSIsInBhdGNoIiwic2FtcGxlIiwic3Vicm91dGluZSIsImNvbW1vbiIsInBhcnRpdGlvbiIsImFjdGl2ZSIsImZpbHRlciIsImltYWdlMUQiLCJpbWFnZTJEIiwiaW1hZ2UzRCIsImltYWdlQ3ViZSIsImlpbWFnZTFEIiwiaWltYWdlMkQiLCJpaW1hZ2UzRCIsImlpbWFnZUN1YmUiLCJ1aW1hZ2UxRCIsInVpbWFnZTJEIiwidWltYWdlM0QiLCJ1aW1hZ2VDdWJlIiwiaW1hZ2UxREFycmF5IiwiaW1hZ2UyREFycmF5IiwiaWltYWdlMURBcnJheSIsImlpbWFnZTJEQXJyYXkiLCJ1aW1hZ2UxREFycmF5IiwidWltYWdlMkRBcnJheSIsImltYWdlMURTaGFkb3ciLCJpbWFnZTJEU2hhZG93IiwiaW1hZ2UxREFycmF5U2hhZG93IiwiaW1hZ2UyREFycmF5U2hhZG93IiwiaW1hZ2VCdWZmZXIiLCJpaW1hZ2VCdWZmZXIiLCJ1aW1hZ2VCdWZmZXIiLCJzYW1wbGVyMURBcnJheSIsInNhbXBsZXIxREFycmF5U2hhZG93IiwiaXNhbXBsZXIxRCIsImlzYW1wbGVyMURBcnJheSIsInVzYW1wbGVyMUQiLCJ1c2FtcGxlcjFEQXJyYXkiLCJpc2FtcGxlcjJEUmVjdCIsInVzYW1wbGVyMkRSZWN0Iiwic2FtcGxlckJ1ZmZlciIsImlzYW1wbGVyQnVmZmVyIiwidXNhbXBsZXJCdWZmZXIiLCJzYW1wbGVyMkRNUyIsImlzYW1wbGVyMkRNUyIsInVzYW1wbGVyMkRNUyIsInNhbXBsZXIyRE1TQXJyYXkiLCJpc2FtcGxlcjJETVNBcnJheSIsInVzYW1wbGVyMkRNU0FycmF5Il0pfSx7Ii4vbGl0ZXJhbHMiOjQxMH1dLDQxMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bInByZWNpc2lvbiIsImhpZ2hwIiwibWVkaXVtcCIsImxvd3AiLCJhdHRyaWJ1dGUiLCJjb25zdCIsInVuaWZvcm0iLCJ2YXJ5aW5nIiwiYnJlYWsiLCJjb250aW51ZSIsImRvIiwiZm9yIiwid2hpbGUiLCJpZiIsImVsc2UiLCJpbiIsIm91dCIsImlub3V0IiwiZmxvYXQiLCJpbnQiLCJ1aW50Iiwidm9pZCIsImJvb2wiLCJ0cnVlIiwiZmFsc2UiLCJkaXNjYXJkIiwicmV0dXJuIiwibWF0MiIsIm1hdDMiLCJtYXQ0IiwidmVjMiIsInZlYzMiLCJ2ZWM0IiwiaXZlYzIiLCJpdmVjMyIsIml2ZWM0IiwiYnZlYzIiLCJidmVjMyIsImJ2ZWM0Iiwic2FtcGxlcjFEIiwic2FtcGxlcjJEIiwic2FtcGxlcjNEIiwic2FtcGxlckN1YmUiLCJzYW1wbGVyMURTaGFkb3ciLCJzYW1wbGVyMkRTaGFkb3ciLCJzdHJ1Y3QiLCJhc20iLCJjbGFzcyIsInVuaW9uIiwiZW51bSIsInR5cGVkZWYiLCJ0ZW1wbGF0ZSIsInRoaXMiLCJwYWNrZWQiLCJnb3RvIiwic3dpdGNoIiwiZGVmYXVsdCIsImlubGluZSIsIm5vaW5saW5lIiwidm9sYXRpbGUiLCJwdWJsaWMiLCJzdGF0aWMiLCJleHRlcm4iLCJleHRlcm5hbCIsImludGVyZmFjZSIsImxvbmciLCJzaG9ydCIsImRvdWJsZSIsImhhbGYiLCJmaXhlZCIsInVuc2lnbmVkIiwiaW5wdXQiLCJvdXRwdXQiLCJodmVjMiIsImh2ZWMzIiwiaHZlYzQiLCJkdmVjMiIsImR2ZWMzIiwiZHZlYzQiLCJmdmVjMiIsImZ2ZWMzIiwiZnZlYzQiLCJzYW1wbGVyMkRSZWN0Iiwic2FtcGxlcjNEUmVjdCIsInNhbXBsZXIyRFJlY3RTaGFkb3ciLCJzaXplb2YiLCJjYXN0IiwibmFtZXNwYWNlIiwidXNpbmciXX0se31dLDQxMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIjw8PSIsIj4+PSIsIisrIiwiLS0iLCI8PCIsIj4+IiwiPD0iLCI+PSIsIj09IiwiIT0iLCImJiIsInx8IiwiKz0iLCItPSIsIio9IiwiLz0iLCIlPSIsIiY9IiwiXl4iLCJePSIsInw9IiwiKCIsIikiLCJbIiwiXSIsIi4iLCIhIiwifiIsIioiLCIvIiwiJSIsIisiLCItIiwiPCIsIj4iLCImIiwiXiIsInwiLCI/IiwiOiIsIj0iLCIsIiwiOyIsInsiLCJ9Il19LHt9XSw0MTI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2luZGV4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKSxpPVtdO3JldHVybiBpPShpPWkuY29uY2F0KHIodCkpKS5jb25jYXQocihudWxsKSl9fSx7Ii4vaW5kZXgiOjQwNn1dLDQxMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHI9W10sbj0wO248dC5sZW5ndGgtMTtuKyspci5wdXNoKHRbbl0sZVtuXXx8IiIpO3JldHVybiByLnB1c2godFtuXSksci5qb2luKCIiKX19LHt9XSw0MTQ6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiaXMtYnJvd3NlciIpO249ImZ1bmN0aW9uIj09dHlwZW9mIHIubWF0Y2hNZWRpYT8hci5tYXRjaE1lZGlhKCIoaG92ZXI6IG5vbmUpIikubWF0Y2hlczppLGUuZXhwb3J0cz1ufSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7ImlzLWJyb3dzZXIiOjQzOH1dLDQxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpcy1icm93c2VyIik7ZS5leHBvcnRzPW4mJmZ1bmN0aW9uKCl7dmFyIHQ9ITE7dHJ5e3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3Q9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsZSl9Y2F0Y2goZSl7dD0hMX1yZXR1cm4gdH0oKX0seyJpcy1icm93c2VyIjo0Mzh9XSw0MTY6W2Z1bmN0aW9uKHQsZSxyKXtyLnJlYWQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9OCppLW4tMSxsPSgxPDxzKS0xLGM9bD4+MSx1PS03LGg9cj9pLTE6MCxmPXI/LTE6MSxwPXRbZStoXTtmb3IoaCs9ZixhPXAmKDE8PC11KS0xLHA+Pj0tdSx1Kz1zO3U+MDthPTI1NiphK3RbZStoXSxoKz1mLHUtPTgpO2ZvcihvPWEmKDE8PC11KS0xLGE+Pj0tdSx1Kz1uO3U+MDtvPTI1NipvK3RbZStoXSxoKz1mLHUtPTgpO2lmKDA9PT1hKWE9MS1jO2Vsc2V7aWYoYT09PWwpcmV0dXJuIG8/TmFOOjEvMCoocD8tMToxKTtvKz1NYXRoLnBvdygyLG4pLGEtPWN9cmV0dXJuKHA/LTE6MSkqbypNYXRoLnBvdygyLGEtbil9LHIud3JpdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPTgqYS1pLTEsdT0oMTw8YyktMSxoPXU+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOmEtMSxkPW4/MTotMSxnPWU8MHx8MD09PWUmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8ocz1pc05hTihlKT8xOjAsbz11KToobz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLW8pKTwxJiYoby0tLGwqPTIpLChlKz1vK2g+PTE/Zi9sOmYqTWF0aC5wb3coMiwxLWgpKSpsPj0yJiYobysrLGwvPTIpLG8raD49dT8ocz0wLG89dSk6bytoPj0xPyhzPShlKmwtMSkqTWF0aC5wb3coMixpKSxvKz1oKToocz1lKk1hdGgucG93KDIsaC0xKSpNYXRoLnBvdygyLGkpLG89MCkpO2k+PTg7dFtyK3BdPTI1NSZzLHArPWQscy89MjU2LGktPTgpO2ZvcihvPW88PGl8cyxjKz1pO2M+MDt0W3IrcF09MjU1Jm8scCs9ZCxvLz0yNTYsYy09OCk7dFtyK3AtZF18PTEyOCpnfX0se31dLDQxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3R5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7Zm9yKHIgaW4gbilpZihuW3JdLmRldGVjdCh0LGUpKXJldHVybiByfX0seyIuL3R5cGVzIjo0MjB9XSw0MTg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZzIiksaT10KCJwYXRoIiksYT10KCIuL3R5cGVzIiksbz10KCIuL2RldGVjdG9yIik7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPW8odCxlKTtpZihyIGluIGEpe3ZhciBuPWFbcl0uY2FsY3VsYXRlKHQsZSk7aWYoITEhPT1uKXJldHVybiBuLnR5cGU9cixufXRocm93IG5ldyBUeXBlRXJyb3IoInVuc3VwcG9ydGVkIGZpbGUgdHlwZTogIityKyIgKGZpbGU6ICIrZSsiKSIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIuaXNCdWZmZXIodCkpcmV0dXJuIHModCk7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaW52b2NhdGlvbiIpO3ZhciBhPWkucmVzb2x2ZSh0KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gcyhmdW5jdGlvbih0KXt2YXIgZT1uLm9wZW5TeW5jKHQsInIiKSxpPW4uZnN0YXRTeW5jKGUpLnNpemUsYT1NYXRoLm1pbihpLDUyNDI4OCksbz1yLmFsbG9jKGEpO3JldHVybiBuLnJlYWRTeW5jKGUsbywwLGEsMCksbi5jbG9zZVN5bmMoZSksb30oYSksYSk7IWZ1bmN0aW9uKHQsZSl7bi5vcGVuKHQsInIiLChmdW5jdGlvbihpLGEpe2lmKGkpcmV0dXJuIGUoaSk7bi5mc3RhdChhLChmdW5jdGlvbihpLG8pe2lmKGkpcmV0dXJuIGUoaSk7dmFyIHM9by5zaXplO2lmKHM8PTApcmV0dXJuIGUobmV3IEVycm9yKCJGaWxlIHNpemUgaXMgbm90IGdyZWF0ZXIgdGhhbiAwIFx1MjAxNFx1MjAxNCAiK3QpKTt2YXIgbD1NYXRoLm1pbihzLDUyNDI4OCksYz1yLmFsbG9jKGwpO24ucmVhZChhLGMsMCxsLDAsKGZ1bmN0aW9uKHQpe2lmKHQpcmV0dXJuIGUodCk7bi5jbG9zZShhLChmdW5jdGlvbih0KXtlKHQsYyl9KSl9KSl9KSl9KSl9KGEsKGZ1bmN0aW9uKHQscil7aWYodClyZXR1cm4gZSh0KTt2YXIgbjt0cnl7bj1zKHIsYSl9Y2F0Y2goZSl7dD1lfWUodCxuKX0pKX0sZS5leHBvcnRzLnR5cGVzPU9iamVjdC5rZXlzKGEpfSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiLi9kZXRlY3RvciI6NDE3LCIuL3R5cGVzIjo0MjAsYnVmZmVyOjExMSxmczoxMDkscGF0aDo0ODF9XSw0MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiByPXJ8fDAsdFsicmVhZFVJbnQiK2UrKG4/IkJFIjoiTEUiKV0uY2FsbCh0LHIpfX0se31dLDQyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17Ym1wOnQoIi4vdHlwZXMvYm1wIiksY3VyOnQoIi4vdHlwZXMvY3VyIiksZGRzOnQoIi4vdHlwZXMvZGRzIiksZ2lmOnQoIi4vdHlwZXMvZ2lmIiksaWNuczp0KCIuL3R5cGVzL2ljbnMiKSxpY286dCgiLi90eXBlcy9pY28iKSxqcGc6dCgiLi90eXBlcy9qcGciKSxwbmc6dCgiLi90eXBlcy9wbmciKSxwc2Q6dCgiLi90eXBlcy9wc2QiKSxzdmc6dCgiLi90eXBlcy9zdmciKSx0aWZmOnQoIi4vdHlwZXMvdGlmZiIpLHdlYnA6dCgiLi90eXBlcy93ZWJwIil9O2UuZXhwb3J0cz1ufSx7Ii4vdHlwZXMvYm1wIjo0MjEsIi4vdHlwZXMvY3VyIjo0MjIsIi4vdHlwZXMvZGRzIjo0MjMsIi4vdHlwZXMvZ2lmIjo0MjQsIi4vdHlwZXMvaWNucyI6NDI1LCIuL3R5cGVzL2ljbyI6NDI2LCIuL3R5cGVzL2pwZyI6NDI3LCIuL3R5cGVzL3BuZyI6NDI4LCIuL3R5cGVzL3BzZCI6NDI5LCIuL3R5cGVzL3N2ZyI6NDMwLCIuL3R5cGVzL3RpZmYiOjQzMSwiLi90eXBlcy93ZWJwIjo0MzJ9XSw0MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtkZXRlY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIkJNIj09PXQudG9TdHJpbmcoImFzY2lpIiwwLDIpfSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJue3dpZHRoOnQucmVhZFVJbnQzMkxFKDE4KSxoZWlnaHQ6TWF0aC5hYnModC5yZWFkSW50MzJMRSgyMikpfX19fSx7fV0sNDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZGV0ZWN0OmZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5yZWFkVUludDE2TEUoMCkmJjI9PT10LnJlYWRVSW50MTZMRSgyKX0sY2FsY3VsYXRlOnQoIi4vaWNvIikuY2FsY3VsYXRlfX0seyIuL2ljbyI6NDI2fV0sNDIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZGV0ZWN0OmZ1bmN0aW9uKHQpe3JldHVybiA1NDIzMjc4NzY9PT10LnJlYWRVSW50MzJMRSgwKX0sY2FsY3VsYXRlOmZ1bmN0aW9uKHQpe3JldHVybntoZWlnaHQ6dC5yZWFkVUludDMyTEUoMTIpLHdpZHRoOnQucmVhZFVJbnQzMkxFKDE2KX19fX0se31dLDQyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0vXkdJRjhbNzldYS87ZS5leHBvcnRzPXtkZXRlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC50b1N0cmluZygiYXNjaWkiLDAsNik7cmV0dXJuIG4udGVzdChlKX0sY2FsY3VsYXRlOmZ1bmN0aW9uKHQpe3JldHVybnt3aWR0aDp0LnJlYWRVSW50MTZMRSg2KSxoZWlnaHQ6dC5yZWFkVUludDE2TEUoOCl9fX19LHt9XSw0MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e0lDT046MzIsIklDTiMiOjMyLCJpY20jIjoxNixpY200OjE2LGljbTg6MTYsImljcyMiOjE2LGljczQ6MTYsaWNzODoxNixpczMyOjE2LHM4bWs6MTYsaWNwNDoxNixpY2w0OjMyLGljbDg6MzIsaWwzMjozMixsOG1rOjMyLGljcDU6MzIsaWMxMTozMixpY2g0OjQ4LGljaDg6NDgsaWgzMjo0OCxoOG1rOjQ4LGljcDY6NjQsaWMxMjozMixpdDMyOjEyOCx0OG1rOjEyOCxpYzA3OjEyOCxpYzA4OjI1NixpYzEzOjI1NixpYzA5OjUxMixpYzE0OjUxMixpYzEwOjEwMjR9O2Z1bmN0aW9uIGkodCxlKXt2YXIgcj1lKzQ7cmV0dXJuW3QudG9TdHJpbmcoImFzY2lpIixlLHIpLHQucmVhZFVJbnQzMkJFKHIpXX1mdW5jdGlvbiBhKHQpe3ZhciBlPW5bdF07cmV0dXJue3dpZHRoOmUsaGVpZ2h0OmUsdHlwZTp0fX1lLmV4cG9ydHM9e2RldGVjdDpmdW5jdGlvbih0KXtyZXR1cm4iaWNucyI9PT10LnRvU3RyaW5nKCJhc2NpaSIsMCw0KX0sY2FsY3VsYXRlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixvPXQubGVuZ3RoLHM9OCxsPXQucmVhZFVJbnQzMkJFKDQpO2lmKHI9YSgoZT1pKHQscykpWzBdKSwocys9ZVsxXSk9PT1sKXJldHVybiByO2ZvcihuPXt3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodCxpbWFnZXM6W3JdfTtzPGwmJnM8bzspcj1hKChlPWkodCxzKSlbMF0pLHMrPWVbMV0sbi5pbWFnZXMucHVzaChyKTtyZXR1cm4gbn19fSx7fV0sNDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10LnJlYWRVSW50OChlKTtyZXR1cm4gMD09PXI/MjU2OnJ9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPTYrMTYqZTtyZXR1cm57d2lkdGg6bih0LHIpLGhlaWdodDpuKHQscisxKX19ZS5leHBvcnRzPXtkZXRlY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10LnJlYWRVSW50MTZMRSgwKSYmMT09PXQucmVhZFVJbnQxNkxFKDIpfSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7dmFyIGUscj10LnJlYWRVSW50MTZMRSg0KSxuPWkodCwwKTtpZigxPT09cilyZXR1cm4gbjtmb3Iobi5pbWFnZXM9W3t3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodH1dLGU9MTtlPHI7ZSs9MSluLmltYWdlcy5wdXNoKGkodCxlKSk7cmV0dXJuIG59fX0se31dLDQyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWFkVUludCIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIjQ1Nzg2OTY2Ij09PXQudG9TdHJpbmcoImhleCIsMiw2KX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJue2hlaWdodDp0LnJlYWRVSW50MTZCRShlKSx3aWR0aDp0LnJlYWRVSW50MTZCRShlKzIpfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5zbGljZSgyLGUpLGk9ci50b1N0cmluZygiaGV4Iiw2LDgpLGE9IjRkNGQiPT09aTtpZihhfHwiNDk0OSI9PT1pKXJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixpLGE9bih0LDE2LDE0LGUpLG89MDtvPGE7bysrKXtpZihpPShyPTE2KzEyKm8pKzEyLHI+dC5sZW5ndGgpcmV0dXJuO3ZhciBzPXQuc2xpY2UocixpKTtpZigyNzQ9PT1uKHMsMTYsMCxlKSl7aWYoMyE9PW4ocywxNiwyLGUpKXJldHVybjtpZigxIT09bihzLDMyLDQsZSkpcmV0dXJuO3JldHVybiBuKHMsMTYsOCxlKX19fShyLGEpfWZ1bmN0aW9uIHModCxlKXtpZihlPnQubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvcnJ1cHQgSlBHLCBleGNlZWRlZCBidWZmZXIgbGltaXRzIik7aWYoMjU1IT09dFtlXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIEpQRywgbWFya2VyIHRhYmxlIGNvcnJ1cHRlZCIpfWUuZXhwb3J0cz17ZGV0ZWN0OmZ1bmN0aW9uKHQpe3JldHVybiJmZmQ4Ij09PXQudG9TdHJpbmcoImhleCIsMCwyKX0sY2FsY3VsYXRlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtmb3IodD10LnNsaWNlKDQpO3QubGVuZ3RoOyl7aWYocj10LnJlYWRVSW50MTZCRSgwKSxpKHQpJiYoZT1vKHQscikpLHModCxyKSwxOTI9PT0obj10W3IrMV0pfHwxOTM9PT1ufHwxOTQ9PT1uKXt2YXIgbD1hKHQscis1KTtyZXR1cm4gZT97d2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHQsb3JpZW50YXRpb246ZX06bH10PXQuc2xpY2UocisyKX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIEpQRywgbm8gc2l6ZSBmb3VuZCIpfX19LHsiLi4vcmVhZFVJbnQiOjQxOX1dLDQyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2RldGVjdDpmdW5jdGlvbih0KXtpZigiUE5HXHJcblx4MWFcbiI9PT10LnRvU3RyaW5nKCJhc2NpaSIsMSw4KSl7dmFyIGU9dC50b1N0cmluZygiYXNjaWkiLDEyLDE2KTtpZigiQ2dCSSI9PT1lJiYoZT10LnRvU3RyaW5nKCJhc2NpaSIsMjgsMzIpKSwiSUhEUiIhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgcG5nIik7cmV0dXJuITB9fSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIkNnQkkiPT09dC50b1N0cmluZygiYXNjaWkiLDEyLDE2KT97d2lkdGg6dC5yZWFkVUludDMyQkUoMzIpLGhlaWdodDp0LnJlYWRVSW50MzJCRSgzNil9Ont3aWR0aDp0LnJlYWRVSW50MzJCRSgxNiksaGVpZ2h0OnQucmVhZFVJbnQzMkJFKDIwKX19fX0se31dLDQyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2RldGVjdDpmdW5jdGlvbih0KXtyZXR1cm4iOEJQUyI9PT10LnRvU3RyaW5nKCJhc2NpaSIsMCw0KX0sY2FsY3VsYXRlOmZ1bmN0aW9uKHQpe3JldHVybnt3aWR0aDp0LnJlYWRVSW50MzJCRSgxOCksaGVpZ2h0OnQucmVhZFVJbnQzMkJFKDE0KX19fX0se31dLDQzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0vPHN2Z1xzKFtePiInXXwiW14iXSoifCdbXiddKicpKj4vO3ZhciBpPXtyb290Om4sd2lkdGg6L1xzd2lkdGg9KFsnIl0pKFteJV0rPylcMS8saGVpZ2h0Oi9cc2hlaWdodD0oWyciXSkoW14lXSs/KVwxLyx2aWV3Ym94Oi9cc3ZpZXdCb3g9KFsnIl0pKC4rPylcMS99LGE9e2NtOjk2LzIuNTQsbW06OTYvMi41NC8xMCxtOjk2LzIuNTQqMTAwLHB0Ojk2LzcyLHBjOjk2LzcyLzEyLGVtOjE2LGV4Ojh9O2Z1bmN0aW9uIG8odCl7dmFyIGU9LyhbMC05Ll0rKShbYS16XSopLy5leGVjKHQpO2lmKGUpcmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlWzFdKSooYVtlWzJdXXx8MSkpfWZ1bmN0aW9uIHModCl7dmFyIGU9dC5zcGxpdCgiICIpO3JldHVybnt3aWR0aDpvKGVbMl0pLGhlaWdodDpvKGVbM10pfX1lLmV4cG9ydHM9e2RldGVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbi50ZXN0KHQpfSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7dmFyIGU9dC50b1N0cmluZygidXRmOCIpLm1hdGNoKGkucm9vdCk7aWYoZSl7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChpLndpZHRoKSxyPXQubWF0Y2goaS5oZWlnaHQpLG49dC5tYXRjaChpLnZpZXdib3gpO3JldHVybnt3aWR0aDplJiZvKGVbMl0pLGhlaWdodDpyJiZvKHJbMl0pLHZpZXdib3g6biYmcyhuWzJdKX19KGVbMF0pO2lmKHIud2lkdGgmJnIuaGVpZ2h0KXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm57d2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fShyKTtpZihyLnZpZXdib3gpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudmlld2JveC53aWR0aC90LnZpZXdib3guaGVpZ2h0O3JldHVybiB0LndpZHRoP3t3aWR0aDp0LndpZHRoLGhlaWdodDpNYXRoLmZsb29yKHQud2lkdGgvZSl9OnQuaGVpZ2h0P3t3aWR0aDpNYXRoLmZsb29yKHQuaGVpZ2h0KmUpLGhlaWdodDp0LmhlaWdodH06e3dpZHRoOnQudmlld2JveC53aWR0aCxoZWlnaHQ6dC52aWV3Ym94LmhlaWdodH19KHIpfXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3ZnIil9fX0se31dLDQzMTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZnMiKSxpPXQoIi4uL3JlYWRVSW50Iik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWkodCwxNiw4LGUpO3JldHVybihpKHQsMTYsMTAsZSk8PDE2KStyfWZ1bmN0aW9uIG8odCl7aWYodC5sZW5ndGg+MjQpcmV0dXJuIHQuc2xpY2UoMTIpfWUuZXhwb3J0cz17ZGV0ZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXQudG9TdHJpbmcoImhleCIsMCw0KTtyZXR1cm4iNDk0OTJhMDAiPT09ZXx8IjRkNGQwMDJhIj09PWV9LGNhbGN1bGF0ZTpmdW5jdGlvbih0LGUpe2lmKCFlKXRocm93IG5ldyBUeXBlRXJyb3IoIlRpZmYgZG9lc24ndCBzdXBwb3J0IGJ1ZmZlciIpO3ZhciBzPSJCRSI9PT1mdW5jdGlvbih0KXt2YXIgZT10LnRvU3RyaW5nKCJhc2NpaSIsMCwyKTtyZXR1cm4iSUkiPT09ZT8iTEUiOiJNTSI9PT1lPyJCRSI6dm9pZCAwfSh0KSxsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4scyxsPXt9O3QmJnQubGVuZ3RoJiYocj1pKHQsMTYsMCxlKSxuPWkodCwxNiwyLGUpLHM9aSh0LDMyLDQsZSksMCE9PXIpOykxIT09c3x8MyE9PW4mJjQhPT1ufHwobFtyXT1hKHQsZSkpLHQ9byh0KTtyZXR1cm4gbH0oZnVuY3Rpb24odCxlLGEpe3ZhciBvPWkodCwzMiw0LGEpLHM9MTAyNCxsPW4uc3RhdFN5bmMoZSkuc2l6ZTtvK3M+bCYmKHM9bC1vLTEwKTt2YXIgYz1yLmFsbG9jKHMpLHU9bi5vcGVuU3luYyhlLCJyIik7cmV0dXJuIG4ucmVhZFN5bmModSxjLDAscyxvKSxjLnNsaWNlKDIpfSh0LGUscykscyksYz1sWzI1Nl0sdT1sWzI1N107aWYoIWN8fCF1KXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgVGlmZiwgbWlzc2luZyB0YWdzIik7cmV0dXJue3dpZHRoOmMsaGVpZ2h0OnV9fX19KS5jYWxsKHRoaXMsdCgiYnVmZmVyIikuQnVmZmVyKX0seyIuLi9yZWFkVUludCI6NDE5LGJ1ZmZlcjoxMTEsZnM6MTA5fV0sNDMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZGV0ZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPSJSSUZGIj09PXQudG9TdHJpbmcoImFzY2lpIiwwLDQpLHI9IldFQlAiPT09dC50b1N0cmluZygiYXNjaWkiLDgsMTIpLG49IlZQOCI9PT10LnRvU3RyaW5nKCJhc2NpaSIsMTIsMTUpO3JldHVybiBlJiZyJiZufSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7dmFyIGU9dC50b1N0cmluZygiYXNjaWkiLDEyLDE2KTtpZih0PXQuc2xpY2UoMjAsMzApLCJWUDhYIj09PWUpe3ZhciByPXRbMF07cmV0dXJuISghKDA9PSgxOTImcikpfHwhKDA9PSgxJnIpKSkmJmZ1bmN0aW9uKHQpe3JldHVybnt3aWR0aDoxK3QucmVhZFVJbnRMRSg0LDMpLGhlaWdodDoxK3QucmVhZFVJbnRMRSg3LDMpfX0odCl9aWYoIlZQOCAiPT09ZSYmNDchPT10WzBdKXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm57d2lkdGg6MTYzODMmdC5yZWFkSW50MTZMRSg2KSxoZWlnaHQ6MTYzODMmdC5yZWFkSW50MTZMRSg4KX19KHQpO3ZhciBuPXQudG9TdHJpbmcoImhleCIsMyw2KTtyZXR1cm4iVlA4TCI9PT1lJiYiOWQwMTJhIiE9PW4mJmZ1bmN0aW9uKHQpe3JldHVybnt3aWR0aDoxKygoNjMmdFsyXSk8PDh8dFsxXSksaGVpZ2h0OjErKCgxNSZ0WzRdKTw8MTB8dFszXTw8MnwoMTkyJnRbMl0pPj42KX19KHQpfX19LHt9XSw0MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3QgZCsxIHBvaW50cyIpO3ZhciBpPXRbMF0ubGVuZ3RoO2lmKHI8PWkpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGlucHV0IGF0IGxlYXN0IGQrMSBwb2ludHMiKTt2YXIgbz10LnNsaWNlKDAsaSsxKSxzPW4uYXBwbHkodm9pZCAwLG8pO2lmKDA9PT1zKXRocm93IG5ldyBFcnJvcigiSW5wdXQgbm90IGluIGdlbmVyYWwgcG9zaXRpb24iKTtmb3IodmFyIGw9bmV3IEFycmF5KGkrMSksdT0wO3U8PWk7Kyt1KWxbdV09dTtzPDAmJihsWzBdPTEsbFsxXT0wKTt2YXIgaD1uZXcgYShsLG5ldyBBcnJheShpKzEpLCExKSxmPWguYWRqYWNlbnQscD1uZXcgQXJyYXkoaSsyKTtmb3IodT0wO3U8PWk7Kyt1KXtmb3IodmFyIGQ9bC5zbGljZSgpLGc9MDtnPD1pOysrZylnPT09dSYmKGRbZ109LTEpO3ZhciBtPWRbMF07ZFswXT1kWzFdLGRbMV09bTt2YXIgdj1uZXcgYShkLG5ldyBBcnJheShpKzEpLCEwKTtmW3VdPXYscFt1XT12fXBbaSsxXT1oO2Zvcih1PTA7dTw9aTsrK3Upe2Q9Zlt1XS52ZXJ0aWNlczt2YXIgeT1mW3VdLmFkamFjZW50O2ZvcihnPTA7Zzw9aTsrK2cpe3ZhciB4PWRbZ107aWYoeDwwKXlbZ109aDtlbHNlIGZvcih2YXIgYj0wO2I8PWk7KytiKWZbYl0udmVydGljZXMuaW5kZXhPZih4KTwwJiYoeVtnXT1mW2JdKX19dmFyIF89bmV3IGMoaSxvLHApLHc9ISFlO2Zvcih1PWkrMTt1PHI7Kyt1KV8uaW5zZXJ0KHRbdV0sdyk7cmV0dXJuIF8uYm91bmRhcnkoKX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgiKS5jb21wYXJlQ2VsbHM7ZnVuY3Rpb24gYSh0LGUscil7dGhpcy52ZXJ0aWNlcz10LHRoaXMuYWRqYWNlbnQ9ZSx0aGlzLmJvdW5kYXJ5PXIsdGhpcy5sYXN0VmlzaXRlZD0tMX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5jZWxsPWUsdGhpcy5pbmRleD1yfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gaSh0LnZlcnRpY2VzLGUudmVydGljZXMpfWEucHJvdG90eXBlLmZsaXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZlcnRpY2VzWzBdO3RoaXMudmVydGljZXNbMF09dGhpcy52ZXJ0aWNlc1sxXSx0aGlzLnZlcnRpY2VzWzFdPXQ7dmFyIGU9dGhpcy5hZGphY2VudFswXTt0aGlzLmFkamFjZW50WzBdPXRoaXMuYWRqYWNlbnRbMV0sdGhpcy5hZGphY2VudFsxXT1lfTt2YXIgbD1bXTtmdW5jdGlvbiBjKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10LHRoaXMudmVydGljZXM9ZSx0aGlzLnNpbXBsaWNlcz1yLHRoaXMuaW50ZXJpb3I9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LmJvdW5kYXJ5fSkpLHRoaXMudHVwbGU9bmV3IEFycmF5KHQrMSk7Zm9yKHZhciBpPTA7aTw9dDsrK2kpdGhpcy50dXBsZVtpXT10aGlzLnZlcnRpY2VzW2ldO3ZhciBhPWxbdF07YXx8KGE9bFt0XT1mdW5jdGlvbih0KXtmb3IodmFyIGU9WyJmdW5jdGlvbiBvcmllbnQoKXt2YXIgdHVwbGU9dGhpcy50dXBsZTtyZXR1cm4gdGVzdCgiXSxyPTA7cjw9dDsrK3Ipcj4wJiZlLnB1c2goIiwiKSxlLnB1c2goInR1cGxlWyIsciwiXSIpO2UucHVzaCgiKX1yZXR1cm4gb3JpZW50Iik7dmFyIGk9bmV3IEZ1bmN0aW9uKCJ0ZXN0IixlLmpvaW4oIiIpKSxhPW5bdCsxXTtyZXR1cm4gYXx8KGE9biksaShhKX0odCkpLHRoaXMub3JpZW50PWF9dmFyIHU9Yy5wcm90b3R5cGU7dS5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3k9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMudmVydGljZXMubGVuZ3RoLTEsaT10aGlzLnR1cGxlLGE9dGhpcy52ZXJ0aWNlcyxvPVt0XTtmb3IodC5sYXN0VmlzaXRlZD0tbjtvLmxlbmd0aD4wOyl7KHQ9by5wb3AoKSkudmVydGljZXM7Zm9yKHZhciBzPXQuYWRqYWNlbnQsbD0wO2w8PXI7KytsKXt2YXIgYz1zW2xdO2lmKGMuYm91bmRhcnkmJiEoYy5sYXN0VmlzaXRlZDw9LW4pKXtmb3IodmFyIHU9Yy52ZXJ0aWNlcyxoPTA7aDw9cjsrK2gpe3ZhciBmPXVbaF07aVtoXT1mPDA/ZTphW2ZdfXZhciBwPXRoaXMub3JpZW50KCk7aWYocD4wKXJldHVybiBjO2MubGFzdFZpc2l0ZWQ9LW4sMD09PXAmJm8ucHVzaChjKX19fXJldHVybiBudWxsfSx1LndhbGs9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGE9dGhpcy50dXBsZSxvPWU/dGhpcy5pbnRlcmlvci5sZW5ndGgqTWF0aC5yYW5kb20oKXwwOnRoaXMuaW50ZXJpb3IubGVuZ3RoLTEscz10aGlzLmludGVyaW9yW29dO3Q6Zm9yKDshcy5ib3VuZGFyeTspe2Zvcih2YXIgbD1zLnZlcnRpY2VzLGM9cy5hZGphY2VudCx1PTA7dTw9bjsrK3UpYVt1XT1pW2xbdV1dO3MubGFzdFZpc2l0ZWQ9cjtmb3IodT0wO3U8PW47Kyt1KXt2YXIgaD1jW3VdO2lmKCEoaC5sYXN0VmlzaXRlZD49cikpe3ZhciBmPWFbdV07YVt1XT10O3ZhciBwPXRoaXMub3JpZW50KCk7aWYoYVt1XT1mLHA8MCl7cz1oO2NvbnRpbnVlIHR9aC5ib3VuZGFyeT9oLmxhc3RWaXNpdGVkPS1yOmgubGFzdFZpc2l0ZWQ9cn19cmV0dXJufXJldHVybiBzfSx1LmFkZFBlYWtzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxuPXRoaXMuZGltZW5zaW9uLGk9dGhpcy52ZXJ0aWNlcyxsPXRoaXMudHVwbGUsYz10aGlzLmludGVyaW9yLHU9dGhpcy5zaW1wbGljZXMsaD1bZV07ZS5sYXN0VmlzaXRlZD1yLGUudmVydGljZXNbZS52ZXJ0aWNlcy5pbmRleE9mKC0xKV09cixlLmJvdW5kYXJ5PSExLGMucHVzaChlKTtmb3IodmFyIGY9W107aC5sZW5ndGg+MDspe3ZhciBwPShlPWgucG9wKCkpLnZlcnRpY2VzLGQ9ZS5hZGphY2VudCxnPXAuaW5kZXhPZihyKTtpZighKGc8MCkpZm9yKHZhciBtPTA7bTw9bjsrK20paWYobSE9PWcpe3ZhciB2PWRbbV07aWYodi5ib3VuZGFyeSYmISh2Lmxhc3RWaXNpdGVkPj1yKSl7dmFyIHk9di52ZXJ0aWNlcztpZih2Lmxhc3RWaXNpdGVkIT09LXIpe2Zvcih2YXIgeD0wLGI9MDtiPD1uOysrYil5W2JdPDA/KHg9YixsW2JdPXQpOmxbYl09aVt5W2JdXTtpZih0aGlzLm9yaWVudCgpPjApe3lbeF09cix2LmJvdW5kYXJ5PSExLGMucHVzaCh2KSxoLnB1c2godiksdi5sYXN0VmlzaXRlZD1yO2NvbnRpbnVlfXYubGFzdFZpc2l0ZWQ9LXJ9dmFyIF89di5hZGphY2VudCx3PXAuc2xpY2UoKSxUPWQuc2xpY2UoKSxrPW5ldyBhKHcsVCwhMCk7dS5wdXNoKGspO3ZhciBNPV8uaW5kZXhPZihlKTtpZighKE08MCkpe19bTV09ayxUW2ddPXYsd1ttXT0tMSxUW21dPWUsZFttXT1rLGsuZmxpcCgpO2ZvcihiPTA7Yjw9bjsrK2Ipe3ZhciBBPXdbYl07aWYoIShBPDB8fEE9PT1yKSl7Zm9yKHZhciBTPW5ldyBBcnJheShuLTEpLEU9MCxDPTA7Qzw9bjsrK0Mpe3ZhciBMPXdbQ107TDwwfHxDPT09Ynx8KFNbRSsrXT1MKX1mLnB1c2gobmV3IG8oUyxrLGIpKX19fX19fWYuc29ydChzKTtmb3IobT0wO20rMTxmLmxlbmd0aDttKz0yKXt2YXIgUD1mW21dLEk9ZlttKzFdLHo9UC5pbmRleCxPPUkuaW5kZXg7ejwwfHxPPDB8fChQLmNlbGwuYWRqYWNlbnRbUC5pbmRleF09SS5jZWxsLEkuY2VsbC5hZGphY2VudFtJLmluZGV4XT1QLmNlbGwpfX0sdS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzO3IucHVzaCh0KTt2YXIgbj10aGlzLndhbGsodCxlKTtpZihuKXtmb3IodmFyIGk9dGhpcy5kaW1lbnNpb24sYT10aGlzLnR1cGxlLG89MDtvPD1pOysrbyl7dmFyIHM9bi52ZXJ0aWNlc1tvXTthW29dPXM8MD90OnJbc119dmFyIGw9dGhpcy5vcmllbnQoYSk7bDwwfHwoMCE9PWx8fChuPXRoaXMuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5KG4sdCkpKSYmdGhpcy5hZGRQZWFrcyh0LG4pfX0sdS5ib3VuZGFyeT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRpbWVuc2lvbixlPVtdLHI9dGhpcy5zaW1wbGljZXMsbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIGE9cltpXTtpZihhLmJvdW5kYXJ5KXtmb3IodmFyIG89bmV3IEFycmF5KHQpLHM9YS52ZXJ0aWNlcyxsPTAsYz0wLHU9MDt1PD10OysrdSlzW3VdPj0wP29bbCsrXT1zW3VdOmM9MSZ1O2lmKGM9PT0oMSZ0KSl7dmFyIGg9b1swXTtvWzBdPW9bMV0sb1sxXT1ofWUucHVzaChvKX19cmV0dXJuIGV9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTIwLCJzaW1wbGljaWFsLWNvbXBsZXgiOjUzMH1dLDQzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGkodCxlLHIsbixpKXt0aGlzLm1pZD10LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9cix0aGlzLmxlZnRQb2ludHM9bix0aGlzLnJpZ2h0UG9pbnRzPWksdGhpcy5jb3VudD0oZT9lLmNvdW50OjApKyhyP3IuY291bnQ6MCkrbi5sZW5ndGh9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCF0fHwwPT09dC5sZW5ndGgpcmV0dXJuIG5ldyB2KG51bGwpO3JldHVybiBuZXcgdihtKHQpKX07dmFyIGE9aS5wcm90b3R5cGU7ZnVuY3Rpb24gbyh0LGUpe3QubWlkPWUubWlkLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQubGVmdFBvaW50cz1lLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1lLnJpZ2h0UG9pbnRzLHQuY291bnQ9ZS5jb3VudH1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9bShlKTt0Lm1pZD1yLm1pZCx0LmxlZnQ9ci5sZWZ0LHQucmlnaHQ9ci5yaWdodCx0LmxlZnRQb2ludHM9ci5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ci5yaWdodFBvaW50cyx0LmNvdW50PXIuY291bnR9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKTtyLnB1c2goZSkscyh0LHIpfWZ1bmN0aW9uIGModCxlKXt2YXIgcj10LmludGVydmFscyhbXSksbj1yLmluZGV4T2YoZSk7cmV0dXJuIG48MD8wOihyLnNwbGljZShuLDEpLHModCxyKSwxKX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZ0W25dWzBdPD1lOysrbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgtMTtuPj0wJiZ0W25dWzFdPj1lOy0tbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPWUodFtyXSk7aWYobilyZXR1cm4gbn19ZnVuY3Rpb24gcCh0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXRbMF0tZVswXTtyZXR1cm4gcnx8dFsxXS1lWzFdfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj10WzFdLWVbMV07cmV0dXJuIHJ8fHRbMF0tZVswXX1mdW5jdGlvbiBtKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCh0W3JdWzBdLHRbcl1bMV0pO2Uuc29ydChwKTt2YXIgbj1lW2UubGVuZ3RoPj4xXSxhPVtdLG89W10scz1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbD10W3JdO2xbMV08bj9hLnB1c2gobCk6bjxsWzBdP28ucHVzaChsKTpzLnB1c2gobCl9dmFyIGM9cyx1PXMuc2xpY2UoKTtyZXR1cm4gYy5zb3J0KGQpLHUuc29ydChnKSxuZXcgaShuLG0oYSksbShvKSxjLHUpfWZ1bmN0aW9uIHYodCl7dGhpcy5yb290PXR9YS5pbnRlcnZhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucHVzaC5hcHBseSh0LHRoaXMubGVmdFBvaW50cyksdGhpcy5sZWZ0JiZ0aGlzLmxlZnQuaW50ZXJ2YWxzKHQpLHRoaXMucmlnaHQmJnRoaXMucmlnaHQuaW50ZXJ2YWxzKHQpLHR9LGEuaW5zZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY291bnQtdGhpcy5sZWZ0UG9pbnRzLmxlbmd0aDtpZih0aGlzLmNvdW50Kz0xLHRbMV08dGhpcy5taWQpdGhpcy5sZWZ0PzQqKHRoaXMubGVmdC5jb3VudCsxKT4zKihlKzEpP2wodGhpcyx0KTp0aGlzLmxlZnQuaW5zZXJ0KHQpOnRoaXMubGVmdD1tKFt0XSk7ZWxzZSBpZih0WzBdPnRoaXMubWlkKXRoaXMucmlnaHQ/NCoodGhpcy5yaWdodC5jb3VudCsxKT4zKihlKzEpP2wodGhpcyx0KTp0aGlzLnJpZ2h0Lmluc2VydCh0KTp0aGlzLnJpZ2h0PW0oW3RdKTtlbHNle3ZhciByPW4uZ2UodGhpcy5sZWZ0UG9pbnRzLHQsZCksaT1uLmdlKHRoaXMucmlnaHRQb2ludHMsdCxnKTt0aGlzLmxlZnRQb2ludHMuc3BsaWNlKHIsMCx0KSx0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShpLDAsdCl9fSxhLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cztpZih0WzFdPHRoaXMubWlkKXJldHVybiB0aGlzLmxlZnQ/NCoodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApPjMqKGUtMSk/Yyh0aGlzLHQpOjI9PT0ocz10aGlzLmxlZnQucmVtb3ZlKHQpKT8odGhpcy5sZWZ0PW51bGwsdGhpcy5jb3VudC09MSwxKTooMT09PXMmJih0aGlzLmNvdW50LT0xKSxzKTowO2lmKHRbMF0+dGhpcy5taWQpcmV0dXJuIHRoaXMucmlnaHQ/NCoodGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKT4zKihlLTEpP2ModGhpcyx0KToyPT09KHM9dGhpcy5yaWdodC5yZW1vdmUodCkpPyh0aGlzLnJpZ2h0PW51bGwsdGhpcy5jb3VudC09MSwxKTooMT09PXMmJih0aGlzLmNvdW50LT0xKSxzKTowO2lmKDE9PT10aGlzLmNvdW50KXJldHVybiB0aGlzLmxlZnRQb2ludHNbMF09PT10PzI6MDtpZigxPT09dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzWzBdPT09dCl7aWYodGhpcy5sZWZ0JiZ0aGlzLnJpZ2h0KXtmb3IodmFyIHI9dGhpcyxpPXRoaXMubGVmdDtpLnJpZ2h0OylyPWksaT1pLnJpZ2h0O2lmKHI9PT10aGlzKWkucmlnaHQ9dGhpcy5yaWdodDtlbHNle3ZhciBhPXRoaXMubGVmdCxzPXRoaXMucmlnaHQ7ci5jb3VudC09aS5jb3VudCxyLnJpZ2h0PWkubGVmdCxpLmxlZnQ9YSxpLnJpZ2h0PXN9byh0aGlzLGkpLHRoaXMuY291bnQ9KHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCkrKHRoaXMucmlnaHQ/dGhpcy5yaWdodC5jb3VudDowKSt0aGlzLmxlZnRQb2ludHMubGVuZ3RofWVsc2UgdGhpcy5sZWZ0P28odGhpcyx0aGlzLmxlZnQpOm8odGhpcyx0aGlzLnJpZ2h0KTtyZXR1cm4gMX1mb3IoYT1uLmdlKHRoaXMubGVmdFBvaW50cyx0LGQpO2E8dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzW2FdWzBdPT09dFswXTsrK2EpaWYodGhpcy5sZWZ0UG9pbnRzW2FdPT09dCl7dGhpcy5jb3VudC09MSx0aGlzLmxlZnRQb2ludHMuc3BsaWNlKGEsMSk7Zm9yKHM9bi5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsZyk7czx0aGlzLnJpZ2h0UG9pbnRzLmxlbmd0aCYmdGhpcy5yaWdodFBvaW50c1tzXVsxXT09PXRbMV07KytzKWlmKHRoaXMucmlnaHRQb2ludHNbc109PT10KXJldHVybiB0aGlzLnJpZ2h0UG9pbnRzLnNwbGljZShzLDEpLDF9cmV0dXJuIDB9LGEucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHQ8dGhpcy5taWQpe2lmKHRoaXMubGVmdClpZihyPXRoaXMubGVmdC5xdWVyeVBvaW50KHQsZSkpcmV0dXJuIHI7cmV0dXJuIHUodGhpcy5sZWZ0UG9pbnRzLHQsZSl9aWYodD50aGlzLm1pZCl7dmFyIHI7aWYodGhpcy5yaWdodClpZihyPXRoaXMucmlnaHQucXVlcnlQb2ludCh0LGUpKXJldHVybiByO3JldHVybiBoKHRoaXMucmlnaHRQb2ludHMsdCxlKX1yZXR1cm4gZih0aGlzLmxlZnRQb2ludHMsZSl9LGEucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG47aWYodDx0aGlzLm1pZCYmdGhpcy5sZWZ0JiYobj10aGlzLmxlZnQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO2lmKGU+dGhpcy5taWQmJnRoaXMucmlnaHQmJihuPXRoaXMucmlnaHQucXVlcnlJbnRlcnZhbCh0LGUscikpKXJldHVybiBuO3JldHVybiBlPHRoaXMubWlkP3UodGhpcy5sZWZ0UG9pbnRzLGUscik6dD50aGlzLm1pZD9oKHRoaXMucmlnaHRQb2ludHMsdCxyKTpmKHRoaXMubGVmdFBvaW50cyxyKX07dmFyIHk9di5wcm90b3R5cGU7eS5pbnNlcnQ9ZnVuY3Rpb24odCl7dGhpcy5yb290P3RoaXMucm9vdC5pbnNlcnQodCk6dGhpcy5yb290PW5ldyBpKHRbMF0sbnVsbCxudWxsLFt0XSxbdF0pfSx5LnJlbW92ZT1mdW5jdGlvbih0KXtpZih0aGlzLnJvb3Qpe3ZhciBlPXRoaXMucm9vdC5yZW1vdmUodCk7cmV0dXJuIDI9PT1lJiYodGhpcy5yb290PW51bGwpLDAhPT1lfXJldHVybiExfSx5LnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeVBvaW50KHQsZSl9LHkucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7aWYodDw9ZSYmdGhpcy5yb290KXJldHVybiB0aGlzLnJvb3QucXVlcnlJbnRlcnZhbCh0LGUscil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJjb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290LmNvdW50OjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImludGVydmFscyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290LmludGVydmFscyhbXSk6W119fSl9LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjQzNX1dLDQzNTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNDNdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNDN9XSw0MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxuZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWVbdFtyXV09cjtyZXR1cm4gZX19LHt9XSw0Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT1yO3JldHVybiBlfX0se31dLDQzODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0hMH0se31dLDQzOTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuISF0LmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih0KX0KLyohCiAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBCdWZmZXIKICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYobih0KXx8ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnNsaWNlJiZuKHQuc2xpY2UoMCwwKSl9KHQpfHwhIXQuX2lzQnVmZmVyKX19LHt9XSw0NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pKX0se31dLDQ0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9YSxlLmV4cG9ydHMuaXNNb2JpbGU9YSxlLmV4cG9ydHMuZGVmYXVsdD1hO3ZhciBuPS8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllc1s0Nl0wfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm8vaSxpPS8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllc1s0Nl0wfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgKGNlfHBob25lKXx4ZGF8eGlpbm98YW5kcm9pZHxpcGFkfHBsYXlib29rfHNpbGsvaTtmdW5jdGlvbiBhKHQpe3R8fCh0PXt9KTt2YXIgZT10LnVhO2lmKGV8fCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwoZT1uYXZpZ2F0b3IudXNlckFnZW50KSxlJiZlLmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgZS5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJihlPWUuaGVhZGVyc1sidXNlci1hZ2VudCJdKSwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuITE7dmFyIHI9dC50YWJsZXQ/aS50ZXN0KGUpOm4udGVzdChlKTtyZXR1cm4hciYmdC50YWJsZXQmJnQuZmVhdHVyZURldGVjdCYmbmF2aWdhdG9yJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MSYmLTEhPT1lLmluZGV4T2YoIk1hY2ludG9zaCIpJiYtMSE9PWUuaW5kZXhPZigiU2FmYXJpIikmJihyPSEwKSxyfX0se31dLDQ0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPT10JiYoIm9iamVjdCI9PT1lfHwiZnVuY3Rpb24iPT09ZSl9fSx7fV0sNDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09bi5jYWxsKHQpJiYobnVsbD09PShlPU9iamVjdC5nZXRQcm90b3R5cGVPZih0KSl8fGU9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoe30pKX19LHt9XSw0NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWlmKCgoZT10LmNoYXJDb2RlQXQobikpPDl8fGU+MTMpJiYzMiE9PWUmJjEzMyE9PWUmJjE2MCE9PWUmJjU3NjAhPT1lJiY2MTU4IT09ZSYmKGU8ODE5Mnx8ZT44MjA1KSYmODIzMiE9PWUmJjgyMzMhPT1lJiY4MjM5IT09ZSYmODI4NyE9PWUmJjgyODghPT1lJiYxMjI4OCE9PWUmJjY1Mjc5IT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19LHt9XSw0NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC50cmltKCksISEoL15bbXpsaHZjc3F0YV1ccypbLSsuMC05XVtebWxodnpjc3F0YV0rL2kudGVzdCh0KSYmL1tcZHpdJC9pLnRlc3QodCkmJnQubGVuZ3RoPjQpKX19LHt9XSw0NDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KigxLXIpK2Uqcn19LHt9XSw0NDc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOih0PXR8fHNlbGYpLm1hcGJveGdsPW4oKX0odGhpcywoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQsZSxyO2Z1bmN0aW9uIG4obixpKXtpZih0KWlmKGUpe3ZhciBhPSJ2YXIgc2hhcmVkQ2h1bmsgPSB7fTsgKCIrdCsiKShzaGFyZWRDaHVuayk7ICgiK2UrIikoc2hhcmVkQ2h1bmspOyIsbz17fTt0KG8pLChyPWkobykpLndvcmtlclVybD13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYV0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSl9ZWxzZSBlPWk7ZWxzZSB0PWl9cmV0dXJuIG4oMCwoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0KGU9e2V4cG9ydHM6e319LGUuZXhwb3J0cyksZS5leHBvcnRzfXZhciByPW47ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLmN4PTMqdCx0aGlzLmJ4PTMqKHItdCktdGhpcy5jeCx0aGlzLmF4PTEtdGhpcy5jeC10aGlzLmJ4LHRoaXMuY3k9MyplLHRoaXMuYnk9Myoobi1lKS10aGlzLmN5LHRoaXMuYXk9MS10aGlzLmN5LXRoaXMuYnksdGhpcy5wMXg9dCx0aGlzLnAxeT1uLHRoaXMucDJ4PXIsdGhpcy5wMnk9bn1uLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKCh0aGlzLmF4KnQrdGhpcy5ieCkqdCt0aGlzLmN4KSp0fSxuLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVk9ZnVuY3Rpb24odCl7cmV0dXJuKCh0aGlzLmF5KnQrdGhpcy5ieSkqdCt0aGlzLmN5KSp0fSxuLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYPWZ1bmN0aW9uKHQpe3JldHVybigzKnRoaXMuYXgqdCsyKnRoaXMuYngpKnQrdGhpcy5jeH0sbi5wcm90b3R5cGUuc29sdmVDdXJ2ZVg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvO2Zvcih2b2lkIDA9PT1lJiYoZT0xZS02KSxpPXQsbz0wO288ODtvKyspe2lmKGE9dGhpcy5zYW1wbGVDdXJ2ZVgoaSktdCxNYXRoLmFicyhhKTxlKXJldHVybiBpO3ZhciBzPXRoaXMuc2FtcGxlQ3VydmVEZXJpdmF0aXZlWChpKTtpZihNYXRoLmFicyhzKTwxZS02KWJyZWFrO2ktPWEvc31pZigoaT10KTwocj0wKSlyZXR1cm4gcjtpZihpPihuPTEpKXJldHVybiBuO2Zvcig7cjxuOyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKSxNYXRoLmFicyhhLXQpPGUpcmV0dXJuIGk7dD5hP3I9aTpuPWksaT0uNSoobi1yKStyfXJldHVybiBpfSxuLnByb3RvdHlwZS5zb2x2ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNhbXBsZUN1cnZlWSh0aGlzLnNvbHZlQ3VydmVYKHQsZSkpfTt2YXIgaT1hO2Z1bmN0aW9uIGEodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiBvKHQsZSxuLGkpe3ZhciBhPW5ldyByKHQsZSxuLGkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYS5zb2x2ZSh0KX19YS5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhKHRoaXMueCx0aGlzLnkpfSxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHQpfSxzdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHQpfSxtdWx0QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0QnlQb2ludCh0KX0sZGl2QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXZCeVBvaW50KHQpfSxtdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHQodCl9LGRpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYodCl9LHJvdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGUodCl9LHJvdGF0ZUFyb3VuZDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZCh0LGUpfSxtYXRNdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX21hdE11bHQodCl9LHVuaXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl91bml0KCl9LHBlcnA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9wZXJwKCl9LHJvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sbWFnOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfSxlcXVhbHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueD09PXQueCYmdGhpcy55PT09dC55fSxkaXN0OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0U3FyKHQpKX0sZGlzdFNxcjpmdW5jdGlvbih0KXt2YXIgZT10LngtdGhpcy54LHI9dC55LXRoaXMueTtyZXR1cm4gZSplK3Iqcn0sYW5nbGU6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLnksdGhpcy54KX0sYW5nbGVUbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLnktdC55LHRoaXMueC10LngpfSxhbmdsZVdpdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYW5nbGVXaXRoU2VwKHQueCx0LnkpfSxhbmdsZVdpdGhTZXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLngqZS10aGlzLnkqdCx0aGlzLngqdCt0aGlzLnkqZSl9LF9tYXRNdWx0OmZ1bmN0aW9uKHQpe3ZhciBlPXRbMl0qdGhpcy54K3RbM10qdGhpcy55O3JldHVybiB0aGlzLng9dFswXSp0aGlzLngrdFsxXSp0aGlzLnksdGhpcy55PWUsdGhpc30sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sX3N1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sX211bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc30sX2RpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxfbXVsdEJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9LF9kaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfSxfdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXYodGhpcy5tYWcoKSksdGhpc30sX3BlcnA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnk7cmV0dXJuIHRoaXMueT10aGlzLngsdGhpcy54PS10LHRoaXN9LF9yb3RhdGU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KSxuPXIqdGhpcy54K2UqdGhpcy55O3JldHVybiB0aGlzLng9ZSp0aGlzLngtcip0aGlzLnksdGhpcy55PW4sdGhpc30sX3JvdGF0ZUFyb3VuZDpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT1lLnkrbioodGhpcy54LWUueCkrcioodGhpcy55LWUueSk7cmV0dXJuIHRoaXMueD1lLngrcioodGhpcy54LWUueCktbioodGhpcy55LWUueSksdGhpcy55PWksdGhpc30sX3JvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfX0sYS5jb252ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYT90OkFycmF5LmlzQXJyYXkodCk/bmV3IGEodFswXSx0WzFdKTp0fTt2YXIgcz1vKC4yNSwuMSwuMjUsMSk7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgoZSx0KSl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49ci1lLGk9KCh0LWUpJW4rbiklbitlO3JldHVybiBpPT09ZT9yOml9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO2Zvcih2YXIgbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07Zm9yKHZhciBvIGluIGEpdFtvXT1hW29dfXJldHVybiB0fXZhciBoPTE7ZnVuY3Rpb24gZigpe3JldHVybiBoKyt9ZnVuY3Rpb24gcCgpe3JldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlPyhlXjE2Kk1hdGgucmFuZG9tKCk+PmUvNCkudG9TdHJpbmcoMTYpOihbMWU3XSstWzFlM10rLTRlMystOGUzKy0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLHQpfSgpfWZ1bmN0aW9uIGQodCl7cmV0dXJuISF0JiYvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVs0XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfSQvaS50ZXN0KHQpfWZ1bmN0aW9uIGcodCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF0mJihlW3RdPWVbdF0uYmluZChlKSl9KSl9ZnVuY3Rpb24gbSh0LGUpe3JldHVybi0xIT09dC5pbmRleE9mKGUsdC5sZW5ndGgtZS5sZW5ndGgpfWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KW5baV09ZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpO3JldHVybiBufWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiB0KWUuY2FsbChyfHx0aGlzLHRbaV0saSx0KSYmKG5baV09dFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcCh4KToib2JqZWN0Ij09dHlwZW9mIHQmJnQ/dih0LHgpOnR9dmFyIGI9e307ZnVuY3Rpb24gXyh0KXtiW3RdfHwoInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4odCksYlt0XT0hMCl9ZnVuY3Rpb24gdyh0LGUscil7cmV0dXJuKHIueS10LnkpKihlLngtdC54KT4oZS55LXQueSkqKHIueC10LngpfWZ1bmN0aW9uIFQodCl7Zm9yKHZhciBlPTAscj0wLG49dC5sZW5ndGgsaT1uLTEsYT12b2lkIDAsbz12b2lkIDA7cjxuO2k9cisrKWUrPSgobz10W2ldKS54LShhPXRbcl0pLngpKihhLnkrby55KTtyZXR1cm4gZX1mdW5jdGlvbiBrKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGV9ZnVuY3Rpb24gTSh0KXt2YXIgZT17fTtpZih0LnJlcGxhY2UoLyg/Ol58KD86XHMqXCxccyopKShbXlx4MDAtXHgyMFwoXCk8PkBcLDtcOlxcIlwvXFtcXVw/XD1ce1x9XHg3Rl0rKSg/Olw9KD86KFteXHgwMC1ceDIwXChcKTw+QFwsO1w6XFwiXC9cW1xdXD9cPVx7XH1ceDdGXSspfCg/OlwiKCg/OlteIlxcXXxcXC4pKilcIikpKT8vZywoZnVuY3Rpb24odCxyLG4saSl7dmFyIGE9bnx8aTtyZXR1cm4gZVtyXT0hYXx8YS50b0xvd2VyQ2FzZSgpLCIifSkpLGVbIm1heC1hZ2UiXSl7dmFyIHI9cGFyc2VJbnQoZVsibWF4LWFnZSJdLDEwKTtpc05hTihyKT9kZWxldGUgZVsibWF4LWFnZSJdOmVbIm1heC1hZ2UiXT1yfXJldHVybiBlfXZhciBBPW51bGw7ZnVuY3Rpb24gUyh0KXtpZihudWxsPT1BKXt2YXIgZT10Lm5hdmlnYXRvcj90Lm5hdmlnYXRvci51c2VyQWdlbnQ6bnVsbDtBPSEhdC5zYWZhcml8fCEoIWV8fCEoL1xiKGlQYWR8aVBob25lfGlQb2QpXGIvLnRlc3QoZSl8fGUubWF0Y2goIlNhZmFyaSIpJiYhZS5tYXRjaCgiQ2hyb21lIikpKX1yZXR1cm4gQX1mdW5jdGlvbiBFKHQpe3RyeXt2YXIgZT1zZWxmW3RdO3JldHVybiBlLnNldEl0ZW0oIl9tYXBib3hfdGVzdF8iLDEpLGUucmVtb3ZlSXRlbSgiX21hcGJveF90ZXN0XyIpLCEwfWNhdGNoKHQpe3JldHVybiExfX12YXIgQyxMLFAsSSx6PXNlbGYucGVyZm9ybWFuY2UmJnNlbGYucGVyZm9ybWFuY2Uubm93P3NlbGYucGVyZm9ybWFuY2Uubm93LmJpbmQoc2VsZi5wZXJmb3JtYW5jZSk6RGF0ZS5ub3cuYmluZChEYXRlKSxPPXNlbGYucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxzZWxmLm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8c2VsZi53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHNlbGYubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsRD1zZWxmLmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxzZWxmLm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lfHxzZWxmLndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lfHxzZWxmLm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWUsUj17bm93OnosZnJhbWU6ZnVuY3Rpb24odCl7dmFyIGU9Tyh0KTtyZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIEQoZSl9fX0sZ2V0SW1hZ2VEYXRhOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dmFyIHI9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuPXIuZ2V0Q29udGV4dCgiMmQiKTtpZighbil0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBjcmVhdGUgY2FudmFzIDJkIGNvbnRleHQiKTtyZXR1cm4gci53aWR0aD10LndpZHRoLHIuaGVpZ2h0PXQuaGVpZ2h0LG4uZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLG4uZ2V0SW1hZ2VEYXRhKC1lLC1lLHQud2lkdGgrMiplLHQuaGVpZ2h0KzIqZSl9LHJlc29sdmVVUkw6ZnVuY3Rpb24odCl7cmV0dXJuIEN8fChDPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSxDLmhyZWY9dCxDLmhyZWZ9LGhhcmR3YXJlQ29uY3VycmVuY3k6c2VsZi5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeXx8NCxnZXQgZGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiBzZWxmLmRldmljZVBpeGVsUmF0aW99LGdldCBwcmVmZXJzUmVkdWNlZE1vdGlvbigpe3JldHVybiEhc2VsZi5tYXRjaE1lZGlhJiYobnVsbD09TCYmKEw9c2VsZi5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpKSxMLm1hdGNoZXMpfX0sRj17QVBJX1VSTDoiaHR0cHM6Ly9hcGkubWFwYm94LmNvbSIsZ2V0IEVWRU5UU19VUkwoKXtyZXR1cm4gdGhpcy5BUElfVVJMPzA9PT10aGlzLkFQSV9VUkwuaW5kZXhPZigiaHR0cHM6Ly9hcGkubWFwYm94LmNuIik/Imh0dHBzOi8vZXZlbnRzLm1hcGJveC5jbi9ldmVudHMvdjIiOjA9PT10aGlzLkFQSV9VUkwuaW5kZXhPZigiaHR0cHM6Ly9hcGkubWFwYm94LmNvbSIpPyJodHRwczovL2V2ZW50cy5tYXBib3guY29tL2V2ZW50cy92MiI6bnVsbDpudWxsfSxGRUVEQkFDS19VUkw6Imh0dHBzOi8vYXBwcy5tYXBib3guY29tL2ZlZWRiYWNrIixSRVFVSVJFX0FDQ0VTU19UT0tFTjohMCxBQ0NFU1NfVE9LRU46bnVsbCxNQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFM6MTZ9LEI9e3N1cHBvcnRlZDohMSx0ZXN0U3VwcG9ydDpmdW5jdGlvbih0KXshTiYmSSYmKGo/VSh0KTpQPXQpfX0sTj0hMSxqPSExO2Z1bmN0aW9uIFUodCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7dC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZSk7dHJ5e2lmKHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LlJHQkEsdC5SR0JBLHQuVU5TSUdORURfQllURSxJKSx0LmlzQ29udGV4dExvc3QoKSlyZXR1cm47Qi5zdXBwb3J0ZWQ9ITB9Y2F0Y2godCl7fXQuZGVsZXRlVGV4dHVyZShlKSxOPSEwfXNlbGYuZG9jdW1lbnQmJigoST1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpKS5vbmxvYWQ9ZnVuY3Rpb24oKXtQJiZVKFApLFA9bnVsbCxqPSEwfSxJLm9uZXJyb3I9ZnVuY3Rpb24oKXtOPSEwLFA9bnVsbH0sSS5zcmM9ImRhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1JoNEFBQUJYUlVKUVZsQTRUQkVBQUFBdkFRQUFBQWZRLy83M3YvK0JpT2gvQUFBPSIpO3ZhciBWPSIwMSIscT1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zZm9ybVJlcXVlc3RGbj10LHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuPWUsdGhpcy5fY3JlYXRlU2t1VG9rZW4oKX07ZnVuY3Rpb24gSCh0KXtyZXR1cm4gMD09PXQuaW5kZXhPZigibWFwYm94OiIpfXEucHJvdG90eXBlLl9jcmVhdGVTa3VUb2tlbj1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSIiLGU9MDtlPDEwO2UrKyl0Kz0iMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiW01hdGguZmxvb3IoNjIqTWF0aC5yYW5kb20oKSldO3JldHVybnt0b2tlbjpbIjEiLFYsdF0uam9pbigiIiksdG9rZW5FeHBpcmVzQXQ6RGF0ZS5ub3coKSs0MzJlNX19KCk7dGhpcy5fc2t1VG9rZW49dC50b2tlbix0aGlzLl9za3VUb2tlbkV4cGlyZXNBdD10LnRva2VuRXhwaXJlc0F0fSxxLnByb3RvdHlwZS5faXNTa3VUb2tlbkV4cGlyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKT50aGlzLl9za3VUb2tlbkV4cGlyZXNBdH0scS5wcm90b3R5cGUudHJhbnNmb3JtUmVxdWVzdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4mJnRoaXMuX3RyYW5zZm9ybVJlcXVlc3RGbih0LGUpfHx7dXJsOnR9fSxxLnByb3RvdHlwZS5ub3JtYWxpemVTdHlsZVVSTD1mdW5jdGlvbih0LGUpe2lmKCFIKHQpKXJldHVybiB0O3ZhciByPVoodCk7cmV0dXJuIHIucGF0aD0iL3N0eWxlcy92MSIrci5wYXRoLHRoaXMuX21ha2VBUElVUkwocix0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8ZSl9LHEucHJvdG90eXBlLm5vcm1hbGl6ZUdseXBoc1VSTD1mdW5jdGlvbih0LGUpe2lmKCFIKHQpKXJldHVybiB0O3ZhciByPVoodCk7cmV0dXJuIHIucGF0aD0iL2ZvbnRzL3YxIityLnBhdGgsdGhpcy5fbWFrZUFQSVVSTChyLHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VufHxlKX0scS5wcm90b3R5cGUubm9ybWFsaXplU291cmNlVVJMPWZ1bmN0aW9uKHQsZSl7aWYoIUgodCkpcmV0dXJuIHQ7dmFyIHI9Wih0KTtyZXR1cm4gci5wYXRoPSIvdjQvIityLmF1dGhvcml0eSsiLmpzb24iLHIucGFyYW1zLnB1c2goInNlY3VyZSIpLHRoaXMuX21ha2VBUElVUkwocix0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8ZSl9LHEucHJvdG90eXBlLm5vcm1hbGl6ZVNwcml0ZVVSTD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1aKHQpO3JldHVybiBIKHQpPyhpLnBhdGg9Ii9zdHlsZXMvdjEiK2kucGF0aCsiL3Nwcml0ZSIrZStyLHRoaXMuX21ha2VBUElVUkwoaSx0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8bikpOihpLnBhdGgrPSIiK2UrcixYKGkpKX0scS5wcm90b3R5cGUubm9ybWFsaXplVGlsZVVSTD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX2lzU2t1VG9rZW5FeHBpcmVkKCkmJnRoaXMuX2NyZWF0ZVNrdVRva2VuKCksdCYmIUgodCkpcmV0dXJuIHQ7dmFyIHI9Wih0KTtyLnBhdGg9ci5wYXRoLnJlcGxhY2UoLyhcLihwbmd8anBnKVxkKikoPz0kKS8sKFIuZGV2aWNlUGl4ZWxSYXRpbz49Mnx8NTEyPT09ZT8iQDJ4IjoiIikrKEIuc3VwcG9ydGVkPyIud2VicCI6IiQxIikpLHIucGF0aD1yLnBhdGgucmVwbGFjZSgvXi4rXC92NFwvLywiLyIpLHIucGF0aD0iL3Y0IityLnBhdGg7dmFyIG49dGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0ubWF0Y2goL15hY2Nlc3NfdG9rZW49KC4qKSQvKTtpZihuKXJldHVybiBuWzFdfXJldHVybiBudWxsfShyLnBhcmFtcyl8fEYuQUNDRVNTX1RPS0VOO3JldHVybiBGLlJFUVVJUkVfQUNDRVNTX1RPS0VOJiZuJiZ0aGlzLl9za3VUb2tlbiYmci5wYXJhbXMucHVzaCgic2t1PSIrdGhpcy5fc2t1VG9rZW4pLHRoaXMuX21ha2VBUElVUkwocixuKX0scS5wcm90b3R5cGUuY2Fub25pY2FsaXplVGlsZVVSTD1mdW5jdGlvbih0LGUpe3ZhciByPVoodCk7aWYoIXIucGF0aC5tYXRjaCgvKF5cL3Y0XC8pLyl8fCFyLnBhdGgubWF0Y2goL1wuW1x3XSskLykpcmV0dXJuIHQ7dmFyIG49Im1hcGJveDovL3RpbGVzLyI7bis9ci5wYXRoLnJlcGxhY2UoIi92NC8iLCIiKTt2YXIgaT1yLnBhcmFtcztyZXR1cm4gZSYmKGk9aS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0Lm1hdGNoKC9eYWNjZXNzX3Rva2VuPS8pfSkpKSxpLmxlbmd0aCYmKG4rPSI/IitpLmpvaW4oIiYiKSksbn0scS5wcm90b3R5cGUuY2Fub25pY2FsaXplVGlsZXNldD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0hIWUmJkgoZSksbj1bXSxpPTAsYT10LnRpbGVzfHxbXTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07WShvKT9uLnB1c2godGhpcy5jYW5vbmljYWxpemVUaWxlVVJMKG8scikpOm4ucHVzaChvKX1yZXR1cm4gbn0scS5wcm90b3R5cGUuX21ha2VBUElVUkw9ZnVuY3Rpb24odCxlKXt2YXIgcj0iU2VlIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vI2FjY2Vzcy10b2tlbnMtYW5kLXRva2VuLXNjb3BlcyIsbj1aKEYuQVBJX1VSTCk7aWYodC5wcm90b2NvbD1uLnByb3RvY29sLHQuYXV0aG9yaXR5PW4uYXV0aG9yaXR5LCIvIiE9PW4ucGF0aCYmKHQucGF0aD0iIituLnBhdGgrdC5wYXRoKSwhRi5SRVFVSVJFX0FDQ0VTU19UT0tFTilyZXR1cm4gWCh0KTtpZighKGU9ZXx8Ri5BQ0NFU1NfVE9LRU4pKXRocm93IG5ldyBFcnJvcigiQW4gQVBJIGFjY2VzcyB0b2tlbiBpcyByZXF1aXJlZCB0byB1c2UgTWFwYm94IEdMLiAiK3IpO2lmKCJzIj09PWVbMF0pdGhyb3cgbmV3IEVycm9yKCJVc2UgYSBwdWJsaWMgYWNjZXNzIHRva2VuIChway4qKSB3aXRoIE1hcGJveCBHTCwgbm90IGEgc2VjcmV0IGFjY2VzcyB0b2tlbiAoc2suKikuICIrcik7cmV0dXJuIHQucGFyYW1zPXQucGFyYW1zLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10LmluZGV4T2YoImFjY2Vzc190b2tlbiIpfSkpLHQucGFyYW1zLnB1c2goImFjY2Vzc190b2tlbj0iK2UpLFgodCl9O3ZhciBHPS9eKChodHRwcz86KT9cL1wvKT8oW15cL10rXC4pP21hcGJveFwuYyhufG9tKShcL3xcP3wkKS9pO2Z1bmN0aW9uIFkodCl7cmV0dXJuIEcudGVzdCh0KX12YXIgVz0vXihcdyspOlwvXC8oW14vP10qKShcL1teP10rKT9cPz8oLispPy87ZnVuY3Rpb24gWih0KXt2YXIgZT10Lm1hdGNoKFcpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHBhcnNlIFVSTCBvYmplY3QiKTtyZXR1cm57cHJvdG9jb2w6ZVsxXSxhdXRob3JpdHk6ZVsyXSxwYXRoOmVbM118fCIvIixwYXJhbXM6ZVs0XT9lWzRdLnNwbGl0KCImIik6W119fWZ1bmN0aW9uIFgodCl7dmFyIGU9dC5wYXJhbXMubGVuZ3RoPyI/Iit0LnBhcmFtcy5qb2luKCImIik6IiI7cmV0dXJuIHQucHJvdG9jb2wrIjovLyIrdC5hdXRob3JpdHkrdC5wYXRoK2V9ZnVuY3Rpb24gSih0KXtpZighdClyZXR1cm4gbnVsbDt2YXIgZT10LnNwbGl0KCIuIik7aWYoIWV8fDMhPT1lLmxlbmd0aClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHNlbGYuYXRvYihlWzFdKS5zcGxpdCgiIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iJSIrKCIwMCIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfSkpLmpvaW4oIiIpKSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fXZhciBLPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT10LHRoaXMuYW5vbklkPW51bGwsdGhpcy5ldmVudERhdGE9e30sdGhpcy5xdWV1ZT1bXSx0aGlzLnBlbmRpbmdSZXF1ZXN0PW51bGx9O0sucHJvdG90eXBlLmdldFN0b3JhZ2VLZXk9ZnVuY3Rpb24odCl7dmFyIGUscj1KKEYuQUNDRVNTX1RPS0VOKTtyZXR1cm4gZT1yJiZyLnU/c2VsZi5idG9hKGVuY29kZVVSSUNvbXBvbmVudChyLnUpLnJlcGxhY2UoLyUoWzAtOUEtRl17Mn0pL2csKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyKCIweCIrZSkpfSkpKTpGLkFDQ0VTU19UT0tFTnx8IiIsdD8ibWFwYm94LmV2ZW50RGF0YS4iK3QrIjoiK2U6Im1hcGJveC5ldmVudERhdGE6IitlfSxLLnByb3RvdHlwZS5mZXRjaEV2ZW50RGF0YT1mdW5jdGlvbigpe3ZhciB0PUUoImxvY2FsU3RvcmFnZSIpLGU9dGhpcy5nZXRTdG9yYWdlS2V5KCkscj10aGlzLmdldFN0b3JhZ2VLZXkoInV1aWQiKTtpZih0KXRyeXt2YXIgbj1zZWxmLmxvY2FsU3RvcmFnZS5nZXRJdGVtKGUpO24mJih0aGlzLmV2ZW50RGF0YT1KU09OLnBhcnNlKG4pKTt2YXIgaT1zZWxmLmxvY2FsU3RvcmFnZS5nZXRJdGVtKHIpO2kmJih0aGlzLmFub25JZD1pKX1jYXRjaCh0KXtfKCJVbmFibGUgdG8gcmVhZCBmcm9tIExvY2FsU3RvcmFnZSIpfX0sSy5wcm90b3R5cGUuc2F2ZUV2ZW50RGF0YT1mdW5jdGlvbigpe3ZhciB0PUUoImxvY2FsU3RvcmFnZSIpLGU9dGhpcy5nZXRTdG9yYWdlS2V5KCkscj10aGlzLmdldFN0b3JhZ2VLZXkoInV1aWQiKTtpZih0KXRyeXtzZWxmLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHIsdGhpcy5hbm9uSWQpLE9iamVjdC5rZXlzKHRoaXMuZXZlbnREYXRhKS5sZW5ndGg+PTEmJnNlbGYubG9jYWxTdG9yYWdlLnNldEl0ZW0oZSxKU09OLnN0cmluZ2lmeSh0aGlzLmV2ZW50RGF0YSkpfWNhdGNoKHQpe18oIlVuYWJsZSB0byB3cml0ZSB0byBMb2NhbFN0b3JhZ2UiKX19LEsucHJvdG90eXBlLnByb2Nlc3NSZXF1ZXN0cz1mdW5jdGlvbih0KXt9LEsucHJvdG90eXBlLnBvc3RFdmVudD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO2lmKEYuRVZFTlRTX1VSTCl7dmFyIGE9WihGLkVWRU5UU19VUkwpO2EucGFyYW1zLnB1c2goImFjY2Vzc190b2tlbj0iKyhufHxGLkFDQ0VTU19UT0tFTnx8IiIpKTt2YXIgbz17ZXZlbnQ6dGhpcy50eXBlLGNyZWF0ZWQ6bmV3IERhdGUodCkudG9JU09TdHJpbmcoKSxzZGtJZGVudGlmaWVyOiJtYXBib3gtZ2wtanMiLHNka1ZlcnNpb246IjEuMTAuMSIsc2t1SWQ6Vix1c2VySWQ6dGhpcy5hbm9uSWR9LHM9ZT91KG8sZSk6byxsPXt1cmw6WChhKSxoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoW3NdKX07dGhpcy5wZW5kaW5nUmVxdWVzdD14dChsLChmdW5jdGlvbih0KXtpLnBlbmRpbmdSZXF1ZXN0PW51bGwscih0KSxpLnNhdmVFdmVudERhdGEoKSxpLnByb2Nlc3NSZXF1ZXN0cyhuKX0pKX19LEsucHJvdG90eXBlLnF1ZXVlUmVxdWVzdD1mdW5jdGlvbih0LGUpe3RoaXMucXVldWUucHVzaCh0KSx0aGlzLnByb2Nlc3NSZXF1ZXN0cyhlKX07dmFyIFEsJCx0dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5jYWxsKHRoaXMsIm1hcC5sb2FkIiksdGhpcy5zdWNjZXNzPXt9LHRoaXMuc2t1VG9rZW49IiJ9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zdE1hcExvYWRFdmVudD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnNrdVRva2VuPXIsKEYuRVZFTlRTX1VSTCYmbnx8Ri5BQ0NFU1NfVE9LRU4mJkFycmF5LmlzQXJyYXkodCkmJnQuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIEgodCl8fFkodCl9KSkpJiZ0aGlzLnF1ZXVlUmVxdWVzdCh7aWQ6ZSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0sbil9LGUucHJvdG90eXBlLnByb2Nlc3NSZXF1ZXN0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0aGlzLnBlbmRpbmdSZXF1ZXN0JiYwIT09dGhpcy5xdWV1ZS5sZW5ndGgpe3ZhciByPXRoaXMucXVldWUuc2hpZnQoKSxuPXIuaWQsaT1yLnRpbWVzdGFtcDtuJiZ0aGlzLnN1Y2Nlc3Nbbl18fCh0aGlzLmFub25JZHx8dGhpcy5mZXRjaEV2ZW50RGF0YSgpLGQodGhpcy5hbm9uSWQpfHwodGhpcy5hbm9uSWQ9cCgpKSx0aGlzLnBvc3RFdmVudChpLHtza3VUb2tlbjp0aGlzLnNrdVRva2VufSwoZnVuY3Rpb24odCl7dHx8biYmKGUuc3VjY2Vzc1tuXT0hMCl9KSx0KSl9fSxlfShLKSxldD1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcywiYXBwVXNlclR1cm5zdGlsZSIpLHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zdFR1cm5zdGlsZUV2ZW50PWZ1bmN0aW9uKHQsZSl7Ri5FVkVOVFNfVVJMJiZGLkFDQ0VTU19UT0tFTiYmQXJyYXkuaXNBcnJheSh0KSYmdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gSCh0KXx8WSh0KX0pKSYmdGhpcy5xdWV1ZVJlcXVlc3QoRGF0ZS5ub3coKSxlKX0sZS5wcm90b3R5cGUucHJvY2Vzc1JlcXVlc3RzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMucGVuZGluZ1JlcXVlc3QmJjAhPT10aGlzLnF1ZXVlLmxlbmd0aCl7dGhpcy5hbm9uSWQmJnRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzJiZ0aGlzLmV2ZW50RGF0YS50b2tlblV8fHRoaXMuZmV0Y2hFdmVudERhdGEoKTt2YXIgcj1KKEYuQUNDRVNTX1RPS0VOKSxuPXI/ci51OkYuQUNDRVNTX1RPS0VOLGk9biE9PXRoaXMuZXZlbnREYXRhLnRva2VuVTtkKHRoaXMuYW5vbklkKXx8KHRoaXMuYW5vbklkPXAoKSxpPSEwKTt2YXIgYT10aGlzLnF1ZXVlLnNoaWZ0KCk7aWYodGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3Mpe3ZhciBvPW5ldyBEYXRlKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKSxzPW5ldyBEYXRlKGEpLGw9KGEtdGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MpLzg2NGU1O2k9aXx8bD49MXx8bDwtMXx8by5nZXREYXRlKCkhPT1zLmdldERhdGUoKX1lbHNlIGk9ITA7aWYoIWkpcmV0dXJuIHRoaXMucHJvY2Vzc1JlcXVlc3RzKCk7dGhpcy5wb3N0RXZlbnQoYSx7ImVuYWJsZWQudGVsZW1ldHJ5IjohMX0sKGZ1bmN0aW9uKHQpe3R8fChlLmV2ZW50RGF0YS5sYXN0U3VjY2Vzcz1hLGUuZXZlbnREYXRhLnRva2VuVT1uKX0pLHQpfX0sZX0oSykpLHJ0PWV0LnBvc3RUdXJuc3RpbGVFdmVudC5iaW5kKGV0KSxudD1uZXcgdHQsaXQ9bnQucG9zdE1hcExvYWRFdmVudC5iaW5kKG50KSxhdD01MDAsb3Q9NTA7ZnVuY3Rpb24gc3QoKXtzZWxmLmNhY2hlcyYmIVEmJihRPXNlbGYuY2FjaGVzLm9wZW4oIm1hcGJveC10aWxlcyIpKX1mdW5jdGlvbiBsdCh0KXt2YXIgZT10LmluZGV4T2YoIj8iKTtyZXR1cm4gZTwwP3Q6dC5zbGljZSgwLGUpfXZhciBjdCx1dD0xLzA7ZnVuY3Rpb24gaHQoKXtyZXR1cm4gbnVsbD09Y3QmJihjdD1zZWxmLk9mZnNjcmVlbkNhbnZhcyYmbmV3IHNlbGYuT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKSYmImZ1bmN0aW9uIj09dHlwZW9mIHNlbGYuY3JlYXRlSW1hZ2VCaXRtYXApLGN0fXZhciBmdD17VW5rbm93bjoiVW5rbm93biIsU3R5bGU6IlN0eWxlIixTb3VyY2U6IlNvdXJjZSIsVGlsZToiVGlsZSIsR2x5cGhzOiJHbHlwaHMiLFNwcml0ZUltYWdlOiJTcHJpdGVJbWFnZSIsU3ByaXRlSlNPTjoiU3ByaXRlSlNPTiIsSW1hZ2U6IkltYWdlIn07ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5mcmVlemUmJk9iamVjdC5mcmVlemUoZnQpO3ZhciBwdCxkdCxndD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXs0MDE9PT1yJiZZKG4pJiYoZSs9IjogeW91IG1heSBoYXZlIHByb3ZpZGVkIGFuIGludmFsaWQgTWFwYm94IGFjY2VzcyB0b2tlbi4gU2VlIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vI2FjY2Vzcy10b2tlbnMtYW5kLXRva2VuLXNjb3BlcyIpLHQuY2FsbCh0aGlzLGUpLHRoaXMuc3RhdHVzPXIsdGhpcy51cmw9bix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMubWVzc2FnZT1lfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSsiOiAiK3RoaXMubWVzc2FnZSsiICgiK3RoaXMuc3RhdHVzKyIpOiAiK3RoaXMudXJsfSxlfShFcnJvciksbXQ9aygpP2Z1bmN0aW9uKCl7cmV0dXJuIHNlbGYud29ya2VyJiZzZWxmLndvcmtlci5yZWZlcnJlcn06ZnVuY3Rpb24oKXtyZXR1cm4oImJsb2I6Ij09PXNlbGYubG9jYXRpb24ucHJvdG9jb2w/c2VsZi5wYXJlbnQ6c2VsZikubG9jYXRpb24uaHJlZn0sdnQ9ZnVuY3Rpb24odCxlKXtpZighKC9eZmlsZTovLnRlc3Qocj10LnVybCl8fC9eZmlsZTovLnRlc3QobXQoKSkmJiEvXlx3KzovLnRlc3QocikpKXtpZihzZWxmLmZldGNoJiZzZWxmLlJlcXVlc3QmJnNlbGYuQWJvcnRDb250cm9sbGVyJiZzZWxmLlJlcXVlc3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJzaWduYWwiKSlyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcixuPW5ldyBzZWxmLkFib3J0Q29udHJvbGxlcixpPW5ldyBzZWxmLlJlcXVlc3QodC51cmwse21ldGhvZDp0Lm1ldGhvZHx8IkdFVCIsYm9keTp0LmJvZHksY3JlZGVudGlhbHM6dC5jcmVkZW50aWFscyxoZWFkZXJzOnQuaGVhZGVycyxyZWZlcnJlcjptdCgpLHNpZ25hbDpuLnNpZ25hbH0pLGE9ITEsbz0hMSxzPShyPWkudXJsKS5pbmRleE9mKCJza3U9Iik+MCYmWShyKTsianNvbiI9PT10LnR5cGUmJmkuaGVhZGVycy5zZXQoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24iKTt2YXIgbD1mdW5jdGlvbihyLG4sYSl7aWYoIW8pe2lmKHImJiJTZWN1cml0eUVycm9yIiE9PXIubWVzc2FnZSYmXyhyKSxuJiZhKXJldHVybiBjKG4pO3ZhciBsPURhdGUubm93KCk7c2VsZi5mZXRjaChpKS50aGVuKChmdW5jdGlvbihyKXtpZihyLm9rKXt2YXIgbj1zP3IuY2xvbmUoKTpudWxsO3JldHVybiBjKHIsbixsKX1yZXR1cm4gZShuZXcgZ3Qoci5zdGF0dXNUZXh0LHIuc3RhdHVzLHQudXJsKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpezIwIT09dC5jb2RlJiZlKG5ldyBFcnJvcih0Lm1lc3NhZ2UpKX0pKX19LGM9ZnVuY3Rpb24ocixuLHMpeygiYXJyYXlCdWZmZXIiPT09dC50eXBlP3IuYXJyYXlCdWZmZXIoKToianNvbiI9PT10LnR5cGU/ci5qc29uKCk6ci50ZXh0KCkpLnRoZW4oKGZ1bmN0aW9uKHQpe298fChuJiZzJiZmdW5jdGlvbih0LGUscil7aWYoc3QoKSxRKXt2YXIgbj17c3RhdHVzOmUuc3RhdHVzLHN0YXR1c1RleHQ6ZS5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IHNlbGYuSGVhZGVyc307ZS5oZWFkZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uaGVhZGVycy5zZXQoZSx0KX0pKTt2YXIgaT1NKGUuaGVhZGVycy5nZXQoIkNhY2hlLUNvbnRyb2wiKXx8IiIpO2lbIm5vLXN0b3JlIl18fChpWyJtYXgtYWdlIl0mJm4uaGVhZGVycy5zZXQoIkV4cGlyZXMiLG5ldyBEYXRlKHIrMWUzKmlbIm1heC1hZ2UiXSkudG9VVENTdHJpbmcoKSksbmV3IERhdGUobi5oZWFkZXJzLmdldCgiRXhwaXJlcyIpKS5nZXRUaW1lKCktcjw0MmU0fHxmdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PSQpdHJ5e25ldyBSZXNwb25zZShuZXcgUmVhZGFibGVTdHJlYW0pLCQ9ITB9Y2F0Y2godCl7JD0hMX0kP2UodC5ib2R5KTp0LmJsb2IoKS50aGVuKGUpfShlLChmdW5jdGlvbihlKXt2YXIgcj1uZXcgc2VsZi5SZXNwb25zZShlLG4pO3N0KCksUSYmUS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXQobHQodC51cmwpLHIpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4gXyh0Lm1lc3NhZ2UpfSkpfSkpKX19KGksbixzKSxhPSEwLGUobnVsbCx0LHIuaGVhZGVycy5nZXQoIkNhY2hlLUNvbnRyb2wiKSxyLmhlYWRlcnMuZ2V0KCJFeHBpcmVzIikpKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7b3x8ZShuZXcgRXJyb3IodC5tZXNzYWdlKSl9KSl9O3JldHVybiBzP2Z1bmN0aW9uKHQsZSl7aWYoc3QoKSwhUSlyZXR1cm4gZShudWxsKTt2YXIgcj1sdCh0LnVybCk7US50aGVuKChmdW5jdGlvbih0KXt0Lm1hdGNoKHIpLnRoZW4oKGZ1bmN0aW9uKG4pe3ZhciBpPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO3ZhciBlPW5ldyBEYXRlKHQuaGVhZGVycy5nZXQoIkV4cGlyZXMiKXx8MCkscj1NKHQuaGVhZGVycy5nZXQoIkNhY2hlLUNvbnRyb2wiKXx8IiIpO3JldHVybiBlPkRhdGUubm93KCkmJiFyWyJuby1jYWNoZSJdfShuKTt0LmRlbGV0ZShyKSxpJiZ0LnB1dChyLG4uY2xvbmUoKSksZShudWxsLG4saSl9KSkuY2F0Y2goZSl9KSkuY2F0Y2goZSl9KGksbCk6bChudWxsLG51bGwpLHtjYW5jZWw6ZnVuY3Rpb24oKXtvPSEwLGF8fG4uYWJvcnQoKX19fSh0LGUpO2lmKGsoKSYmc2VsZi53b3JrZXImJnNlbGYud29ya2VyLmFjdG9yKXJldHVybiBzZWxmLndvcmtlci5hY3Rvci5zZW5kKCJnZXRSZXNvdXJjZSIsdCxlLHZvaWQgMCwhMCl9dmFyIHI7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHNlbGYuWE1MSHR0cFJlcXVlc3Q7Zm9yKHZhciBuIGluIHIub3Blbih0Lm1ldGhvZHx8IkdFVCIsdC51cmwsITApLCJhcnJheUJ1ZmZlciI9PT10LnR5cGUmJihyLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiKSx0LmhlYWRlcnMpci5zZXRSZXF1ZXN0SGVhZGVyKG4sdC5oZWFkZXJzW25dKTtyZXR1cm4ianNvbiI9PT10LnR5cGUmJihyLnJlc3BvbnNlVHlwZT0idGV4dCIsci5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uIikpLHIud2l0aENyZWRlbnRpYWxzPSJpbmNsdWRlIj09PXQuY3JlZGVudGlhbHMsci5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgRXJyb3Ioci5zdGF0dXNUZXh0KSl9LHIub25sb2FkPWZ1bmN0aW9uKCl7aWYoKHIuc3RhdHVzPj0yMDAmJnIuc3RhdHVzPDMwMHx8MD09PXIuc3RhdHVzKSYmbnVsbCE9PXIucmVzcG9uc2Upe3ZhciBuPXIucmVzcG9uc2U7aWYoImpzb24iPT09dC50eXBlKXRyeXtuPUpTT04ucGFyc2Uoci5yZXNwb25zZSl9Y2F0Y2godCl7cmV0dXJuIGUodCl9ZShudWxsLG4sci5nZXRSZXNwb25zZUhlYWRlcigiQ2FjaGUtQ29udHJvbCIpLHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkV4cGlyZXMiKSl9ZWxzZSBlKG5ldyBndChyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0sci5zZW5kKHQuYm9keSkse2NhbmNlbDpmdW5jdGlvbigpe3JldHVybiByLmFib3J0KCl9fX0odCxlKX0seXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdnQodSh0LHt0eXBlOiJhcnJheUJ1ZmZlciJ9KSxlKX0seHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdnQodSh0LHttZXRob2Q6IlBPU1QifSksZSl9O3B0PVtdLGR0PTA7dmFyIGJ0PWZ1bmN0aW9uKHQsZSl7aWYoQi5zdXBwb3J0ZWQmJih0LmhlYWRlcnN8fCh0LmhlYWRlcnM9e30pLHQuaGVhZGVycy5hY2NlcHQ9ImltYWdlL3dlYnAsKi8qIiksZHQ+PUYuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTKXt2YXIgcj17cmVxdWVzdFBhcmFtZXRlcnM6dCxjYWxsYmFjazplLGNhbmNlbGxlZDohMSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGxlZD0hMH19O3JldHVybiBwdC5wdXNoKHIpLHJ9ZHQrKzt2YXIgbj0hMSxpPWZ1bmN0aW9uKCl7aWYoIW4pZm9yKG49ITAsZHQtLTtwdC5sZW5ndGgmJmR0PEYuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOyl7dmFyIHQ9cHQuc2hpZnQoKTt0LmNhbmNlbGxlZHx8KHQuY2FuY2VsPWJ0KHQucmVxdWVzdFBhcmFtZXRlcnMsdC5jYWxsYmFjaykuY2FuY2VsKX19LGE9eXQodCwoZnVuY3Rpb24odCxyLG4sYSl7aSgpLHQ/ZSh0KTpyJiYoaHQoKT9mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBzZWxmLkJsb2IoW25ldyBVaW50OEFycmF5KHQpXSx7dHlwZToiaW1hZ2UvcG5nIn0pO3NlbGYuY3JlYXRlSW1hZ2VCaXRtYXAocikudGhlbigoZnVuY3Rpb24odCl7ZShudWxsLHQpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtlKG5ldyBFcnJvcigiQ291bGQgbm90IGxvYWQgaW1hZ2UgYmVjYXVzZSBvZiAiK3QubWVzc2FnZSsiLiBQbGVhc2UgbWFrZSBzdXJlIHRvIHVzZSBhIHN1cHBvcnRlZCBpbWFnZSB0eXBlIHN1Y2ggYXMgUE5HIG9yIEpQRUcuIE5vdGUgdGhhdCBTVkdzIGFyZSBub3Qgc3VwcG9ydGVkLiIpKX0pKX0ocixlKTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT1uZXcgc2VsZi5JbWFnZSxhPXNlbGYuVVJMO2kub25sb2FkPWZ1bmN0aW9uKCl7ZShudWxsLGkpLGEucmV2b2tlT2JqZWN0VVJMKGkuc3JjKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIGUobmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCBpbWFnZS4gUGxlYXNlIG1ha2Ugc3VyZSB0byB1c2UgYSBzdXBwb3J0ZWQgaW1hZ2UgdHlwZSBzdWNoIGFzIFBORyBvciBKUEVHLiBOb3RlIHRoYXQgU1ZHcyBhcmUgbm90IHN1cHBvcnRlZC4iKSl9O3ZhciBvPW5ldyBzZWxmLkJsb2IoW25ldyBVaW50OEFycmF5KHQpXSx7dHlwZToiaW1hZ2UvcG5nIn0pO2kuY2FjaGVDb250cm9sPXIsaS5leHBpcmVzPW4saS5zcmM9dC5ieXRlTGVuZ3RoP2EuY3JlYXRlT2JqZWN0VVJMKG8pOiJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVlBQUFBZkZjU0pBQUFBQzBsRVFWUVlWMk5nQUFJQUFBVUFBYXJWeUZFQUFBQUFTVVZPUks1Q1lJST0ifShyLGUsbixhKSl9KSk7cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe2EuY2FuY2VsKCksaSgpfX19O2Z1bmN0aW9uIF90KHQsZSxyKXtyW3RdJiYtMSE9PXJbdF0uaW5kZXhPZihlKXx8KHJbdF09clt0XXx8W10sclt0XS5wdXNoKGUpKX1mdW5jdGlvbiB3dCh0LGUscil7aWYociYmclt0XSl7dmFyIG49clt0XS5pbmRleE9mKGUpOy0xIT09biYmclt0XS5zcGxpY2UobiwxKX19dmFyIFR0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pLHUodGhpcyxlKSx0aGlzLnR5cGU9dH0sa3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3ZvaWQgMD09PXImJihyPXt9KSx0LmNhbGwodGhpcywiZXJyb3IiLHUoe2Vycm9yOmV9LHIpKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlfShUdCksTXQ9ZnVuY3Rpb24oKXt9O010LnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9saXN0ZW5lcnM9dGhpcy5fbGlzdGVuZXJzfHx7fSxfdCh0LGUsdGhpcy5fbGlzdGVuZXJzKSx0aGlzfSxNdC5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHd0KHQsZSx0aGlzLl9saXN0ZW5lcnMpLHd0KHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxNdC5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnN8fHt9LF90KHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxNdC5wcm90b3R5cGUuZmlyZT1mdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bmV3IFR0KHQsZXx8e30pKTt2YXIgcj10LnR5cGU7aWYodGhpcy5saXN0ZW5zKHIpKXt0LnRhcmdldD10aGlzO2Zvcih2YXIgbj0wLGk9dGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbcl0/dGhpcy5fbGlzdGVuZXJzW3JdLnNsaWNlKCk6W107bjxpLmxlbmd0aDtuKz0xKWlbbl0uY2FsbCh0aGlzLHQpO2Zvcih2YXIgYT0wLG89dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1tyXT90aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3JdLnNsaWNlKCk6W107YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO3d0KHIscyx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSxzLmNhbGwodGhpcyx0KX12YXIgbD10aGlzLl9ldmVudGVkUGFyZW50O2wmJih1KHQsImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhP3RoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKCk6dGhpcy5fZXZlbnRlZFBhcmVudERhdGEpLGwuZmlyZSh0KSl9ZWxzZSB0IGluc3RhbmNlb2Yga3QmJmNvbnNvbGUuZXJyb3IodC5lcnJvcik7cmV0dXJuIHRoaXN9LE10LnByb3RvdHlwZS5saXN0ZW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVyc1t0XSYmdGhpcy5fbGlzdGVuZXJzW3RdLmxlbmd0aD4wfHx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzJiZ0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3RdJiZ0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3RdLmxlbmd0aD4wfHx0aGlzLl9ldmVudGVkUGFyZW50JiZ0aGlzLl9ldmVudGVkUGFyZW50Lmxpc3RlbnModCl9LE10LnByb3RvdHlwZS5zZXRFdmVudGVkUGFyZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2V2ZW50ZWRQYXJlbnQ9dCx0aGlzLl9ldmVudGVkUGFyZW50RGF0YT1lLHRoaXN9O3ZhciBBdD17JHZlcnNpb246OCwkcm9vdDp7dmVyc2lvbjp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOls4XX0sbmFtZTp7dHlwZToic3RyaW5nIn0sbWV0YWRhdGE6e3R5cGU6IioifSxjZW50ZXI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIn0sem9vbTp7dHlwZToibnVtYmVyIn0sYmVhcmluZzp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyJ9LHBpdGNoOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx1bml0czoiZGVncmVlcyJ9LGxpZ2h0Ont0eXBlOiJsaWdodCJ9LHNvdXJjZXM6e3JlcXVpcmVkOiEwLHR5cGU6InNvdXJjZXMifSxzcHJpdGU6e3R5cGU6InN0cmluZyJ9LGdseXBoczp7dHlwZToic3RyaW5nIn0sdHJhbnNpdGlvbjp7dHlwZToidHJhbnNpdGlvbiJ9LGxheWVyczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJsYXllciJ9fSxzb3VyY2VzOnsiKiI6e3R5cGU6InNvdXJjZSJ9fSxzb3VyY2U6WyJzb3VyY2VfdmVjdG9yIiwic291cmNlX3Jhc3RlciIsInNvdXJjZV9yYXN0ZXJfZGVtIiwic291cmNlX2dlb2pzb24iLCJzb3VyY2VfdmlkZW8iLCJzb3VyY2VfaW1hZ2UiXSxzb3VyY2VfdmVjdG9yOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3ZlY3Rvcjp7fX19LHVybDp7dHlwZToic3RyaW5nIn0sdGlsZXM6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sYm91bmRzOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMTI5LDE4MCw4NS4wNTExMjldfSxzY2hlbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7eHl6Ont9LHRtczp7fX0sZGVmYXVsdDoieHl6In0sbWluem9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyMn0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LHByb21vdGVJZDp7dHlwZToicHJvbW90ZUlkIn0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9yYXN0ZXI6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7cmFzdGVyOnt9fX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxib3VuZHM6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExMjksMTgwLDg1LjA1MTEyOV19LG1pbnpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjJ9LHRpbGVTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTEyLHVuaXRzOiJwaXhlbHMifSxzY2hlbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7eHl6Ont9LHRtczp7fX0sZGVmYXVsdDoieHl6In0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfcmFzdGVyX2RlbTp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOnsicmFzdGVyLWRlbSI6e319fSx1cmw6e3R5cGU6InN0cmluZyJ9LHRpbGVzOnt0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGJvdW5kczp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEyOSwxODAsODUuMDUxMTI5XX0sbWluem9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyMn0sdGlsZVNpemU6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1MTIsdW5pdHM6InBpeGVscyJ9LGF0dHJpYnV0aW9uOnt0eXBlOiJzdHJpbmcifSxlbmNvZGluZzp7dHlwZToiZW51bSIsdmFsdWVzOnt0ZXJyYXJpdW06e30sbWFwYm94Ont9fSxkZWZhdWx0OiJtYXBib3gifSwiKiI6e3R5cGU6IioifX0sc291cmNlX2dlb2pzb246e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7Z2VvanNvbjp7fX19LGRhdGE6e3R5cGU6IioifSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTh9LGF0dHJpYnV0aW9uOnt0eXBlOiJzdHJpbmcifSxidWZmZXI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxMjgsbWF4aW11bTo1MTIsbWluaW11bTowfSx0b2xlcmFuY2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDouMzc1fSxjbHVzdGVyOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxjbHVzdGVyUmFkaXVzOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTAsbWluaW11bTowfSxjbHVzdGVyTWF4Wm9vbTp7dHlwZToibnVtYmVyIn0sY2x1c3RlclByb3BlcnRpZXM6e3R5cGU6IioifSxsaW5lTWV0cmljczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZ2VuZXJhdGVJZDp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0scHJvbW90ZUlkOnt0eXBlOiJwcm9tb3RlSWQifX0sc291cmNlX3ZpZGVvOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3ZpZGVvOnt9fX0sdXJsczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sc291cmNlX2ltYWdlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e2ltYWdlOnt9fX0sdXJsOntyZXF1aXJlZDohMCx0eXBlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sbGF5ZXI6e2lkOnt0eXBlOiJzdHJpbmciLHJlcXVpcmVkOiEwfSx0eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2ZpbGw6e30sbGluZTp7fSxzeW1ib2w6e30sY2lyY2xlOnt9LGhlYXRtYXA6e30sImZpbGwtZXh0cnVzaW9uIjp7fSxyYXN0ZXI6e30saGlsbHNoYWRlOnt9LGJhY2tncm91bmQ6e319LHJlcXVpcmVkOiEwfSxtZXRhZGF0YTp7dHlwZToiKiJ9LHNvdXJjZTp7dHlwZToic3RyaW5nIn0sInNvdXJjZS1sYXllciI6e3R5cGU6InN0cmluZyJ9LG1pbnpvb206e3R5cGU6Im51bWJlciIsbWluaW11bTowLG1heGltdW06MjR9LG1heHpvb206e3R5cGU6Im51bWJlciIsbWluaW11bTowLG1heGltdW06MjR9LGZpbHRlcjp7dHlwZToiZmlsdGVyIn0sbGF5b3V0Ont0eXBlOiJsYXlvdXQifSxwYWludDp7dHlwZToicGFpbnQifX0sbGF5b3V0OlsibGF5b3V0X2ZpbGwiLCJsYXlvdXRfbGluZSIsImxheW91dF9jaXJjbGUiLCJsYXlvdXRfaGVhdG1hcCIsImxheW91dF9maWxsLWV4dHJ1c2lvbiIsImxheW91dF9zeW1ib2wiLCJsYXlvdXRfcmFzdGVyIiwibGF5b3V0X2hpbGxzaGFkZSIsImxheW91dF9iYWNrZ3JvdW5kIl0sbGF5b3V0X2JhY2tncm91bmQ6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9maWxsOnsiZmlsbC1zb3J0LWtleSI6e3R5cGU6Im51bWJlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sdmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2NpcmNsZTp7ImNpcmNsZS1zb3J0LWtleSI6e3R5cGU6Im51bWJlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sdmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2hlYXRtYXA6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LCJsYXlvdXRfZmlsbC1leHRydXNpb24iOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfbGluZTp7ImxpbmUtY2FwIjp7dHlwZToiZW51bSIsdmFsdWVzOntidXR0Ont9LHJvdW5kOnt9LHNxdWFyZTp7fX0sZGVmYXVsdDoiYnV0dCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJsaW5lLWpvaW4iOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2JldmVsOnt9LHJvdW5kOnt9LG1pdGVyOnt9fSxkZWZhdWx0OiJtaXRlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtbWl0ZXItbGltaXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixyZXF1aXJlczpbeyJsaW5lLWpvaW4iOiJtaXRlciJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtcm91bmQtbGltaXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4wNSxyZXF1aXJlczpbeyJsaW5lLWpvaW4iOiJyb3VuZCJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtc29ydC1rZXkiOnt0eXBlOiJudW1iZXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LHZpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9zeW1ib2w6eyJzeW1ib2wtcGxhY2VtZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOntwb2ludDp7fSxsaW5lOnt9LCJsaW5lLWNlbnRlciI6e319LGRlZmF1bHQ6InBvaW50IixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInN5bWJvbC1zcGFjaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjI1MCxtaW5pbXVtOjEsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6W3sic3ltYm9sLXBsYWNlbWVudCI6ImxpbmUifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJzeW1ib2wtYXZvaWQtZWRnZXMiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwic3ltYm9sLXNvcnQta2V5Ijp7dHlwZToibnVtYmVyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwic3ltYm9sLXotb3JkZXIiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2F1dG86e30sInZpZXdwb3J0LXkiOnt9LHNvdXJjZTp7fX0sZGVmYXVsdDoiYXV0byIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLWFsbG93LW92ZXJsYXAiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1pZ25vcmUtcGxhY2VtZW50Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tb3B0aW9uYWwiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLXNpemUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdW5pdHM6ImZhY3RvciBvZiB0aGUgb3JpZ2luYWwgaWNvbiBzaXplIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi10ZXh0LWZpdCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bm9uZTp7fSx3aWR0aDp7fSxoZWlnaHQ6e30sYm90aDp7fX0sZGVmYXVsdDoibm9uZSIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6WzAsMCwwLDBdLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiLHsiaWNvbi10ZXh0LWZpdCI6WyJib3RoIiwid2lkdGgiLCJoZWlnaHQiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1pbWFnZSI6e3R5cGU6InJlc29sdmVkSW1hZ2UiLHRva2VuczohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1wYWRkaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIsbWluaW11bTowLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1rZWVwLXVwcmlnaHQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIseyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6Im1hcCJ9LHsic3ltYm9sLXBsYWNlbWVudCI6WyJsaW5lIiwibGluZS1jZW50ZXIiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2NlbnRlcjp7fSxsZWZ0Ont9LHJpZ2h0Ont9LHRvcDp7fSxib3R0b206e30sInRvcC1sZWZ0Ijp7fSwidG9wLXJpZ2h0Ijp7fSwiYm90dG9tLWxlZnQiOnt9LCJib3R0b20tcmlnaHQiOnt9fSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLXBpdGNoLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1waXRjaC1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LWZpZWxkIjp7dHlwZToiZm9ybWF0dGVkIixkZWZhdWx0OiIiLHRva2VuczohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1mb250Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmciLGRlZmF1bHQ6WyJPcGVuIFNhbnMgUmVndWxhciIsIkFyaWFsIFVuaWNvZGUgTVMgUmVndWxhciJdLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LXNpemUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTYsbWluaW11bTowLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LW1heC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxMCxtaW5pbXVtOjAsdW5pdHM6ImVtcyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtbGluZS1oZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4yLHVuaXRzOiJlbXMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1sZXR0ZXItc3BhY2luZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHVuaXRzOiJlbXMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWp1c3RpZnkiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2F1dG86e30sbGVmdDp7fSxjZW50ZXI6e30scmlnaHQ6e319LGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtcmFkaWFsLW9mZnNldCI6e3R5cGU6Im51bWJlciIsdW5pdHM6ImVtcyIsZGVmYXVsdDowLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4iLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX19LCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciI6e3R5cGU6ImFycmF5Iix2YWx1ZToiZW51bSIsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InN5bWJvbC1wbGFjZW1lbnQiOlsicG9pbnQiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2NlbnRlcjp7fSxsZWZ0Ont9LHJpZ2h0Ont9LHRvcDp7fSxib3R0b206e30sInRvcC1sZWZ0Ijp7fSwidG9wLXJpZ2h0Ijp7fSwiYm90dG9tLWxlZnQiOnt9LCJib3R0b20tcmlnaHQiOnt9fSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyIhIjoidGV4dC12YXJpYWJsZS1hbmNob3IifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtbWF4LWFuZ2xlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjQ1LHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbInRleHQtZmllbGQiLHsic3ltYm9sLXBsYWNlbWVudCI6WyJsaW5lIiwibGluZS1jZW50ZXIiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC13cml0aW5nLW1vZGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6ImVudW0iLHZhbHVlczp7aG9yaXpvbnRhbDp7fSx2ZXJ0aWNhbDp7fX0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InN5bWJvbC1wbGFjZW1lbnQiOlsicG9pbnQiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1wYWRkaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIsbWluaW11bTowLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1rZWVwLXVwcmlnaHQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6Im1hcCJ9LHsic3ltYm9sLXBsYWNlbWVudCI6WyJsaW5lIiwibGluZS1jZW50ZXIiXX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC10cmFuc2Zvcm0iOnt0eXBlOiJlbnVtIix2YWx1ZXM6e25vbmU6e30sdXBwZXJjYXNlOnt9LGxvd2VyY2FzZTp7fX0sZGVmYXVsdDoibm9uZSIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtb2Zmc2V0Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLHVuaXRzOiJlbXMiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7IiEiOiJ0ZXh0LXJhZGlhbC1vZmZzZXQifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtYWxsb3ctb3ZlcmxhcCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfcmFzdGVyOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfaGlsbHNoYWRlOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxmaWx0ZXI6e3R5cGU6ImFycmF5Iix2YWx1ZToiKiJ9LGZpbHRlcl9vcGVyYXRvcjp7dHlwZToiZW51bSIsdmFsdWVzOnsiPT0iOnt9LCIhPSI6e30sIj4iOnt9LCI+PSI6e30sIjwiOnt9LCI8PSI6e30saW46e30sIiFpbiI6e30sYWxsOnt9LGFueTp7fSxub25lOnt9LGhhczp7fSwiIWhhcyI6e30sd2l0aGluOnt9fX0sZ2VvbWV0cnlfdHlwZTp7dHlwZToiZW51bSIsdmFsdWVzOntQb2ludDp7fSxMaW5lU3RyaW5nOnt9LFBvbHlnb246e319fSxmdW5jdGlvbjp7ZXhwcmVzc2lvbjp7dHlwZToiZXhwcmVzc2lvbiJ9LHN0b3BzOnt0eXBlOiJhcnJheSIsdmFsdWU6ImZ1bmN0aW9uX3N0b3AifSxiYXNlOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjB9LHByb3BlcnR5Ont0eXBlOiJzdHJpbmciLGRlZmF1bHQ6IiR6b29tIn0sdHlwZTp7dHlwZToiZW51bSIsdmFsdWVzOntpZGVudGl0eTp7fSxleHBvbmVudGlhbDp7fSxpbnRlcnZhbDp7fSxjYXRlZ29yaWNhbDp7fX0sZGVmYXVsdDoiZXhwb25lbnRpYWwifSxjb2xvclNwYWNlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3JnYjp7fSxsYWI6e30saGNsOnt9fSxkZWZhdWx0OiJyZ2IifSxkZWZhdWx0Ont0eXBlOiIqIixyZXF1aXJlZDohMX19LGZ1bmN0aW9uX3N0b3A6e3R5cGU6ImFycmF5IixtaW5pbXVtOjAsbWF4aW11bToyNCx2YWx1ZTpbIm51bWJlciIsImNvbG9yIl0sbGVuZ3RoOjJ9LGV4cHJlc3Npb246e3R5cGU6ImFycmF5Iix2YWx1ZToiKiIsbWluaW11bToxfSxleHByZXNzaW9uX25hbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7bGV0Ontncm91cDoiVmFyaWFibGUgYmluZGluZyJ9LHZhcjp7Z3JvdXA6IlZhcmlhYmxlIGJpbmRpbmcifSxsaXRlcmFsOntncm91cDoiVHlwZXMifSxhcnJheTp7Z3JvdXA6IlR5cGVzIn0sYXQ6e2dyb3VwOiJMb29rdXAifSxpbjp7Z3JvdXA6Ikxvb2t1cCJ9LCJpbmRleC1vZiI6e2dyb3VwOiJMb29rdXAifSxzbGljZTp7Z3JvdXA6Ikxvb2t1cCJ9LGNhc2U6e2dyb3VwOiJEZWNpc2lvbiJ9LG1hdGNoOntncm91cDoiRGVjaXNpb24ifSxjb2FsZXNjZTp7Z3JvdXA6IkRlY2lzaW9uIn0sc3RlcDp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LGludGVycG9sYXRlOntncm91cDoiUmFtcHMsIHNjYWxlcywgY3VydmVzIn0sImludGVycG9sYXRlLWhjbCI6e2dyb3VwOiJSYW1wcywgc2NhbGVzLCBjdXJ2ZXMifSwiaW50ZXJwb2xhdGUtbGFiIjp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LGxuMjp7Z3JvdXA6Ik1hdGgifSxwaTp7Z3JvdXA6Ik1hdGgifSxlOntncm91cDoiTWF0aCJ9LHR5cGVvZjp7Z3JvdXA6IlR5cGVzIn0sc3RyaW5nOntncm91cDoiVHlwZXMifSxudW1iZXI6e2dyb3VwOiJUeXBlcyJ9LGJvb2xlYW46e2dyb3VwOiJUeXBlcyJ9LG9iamVjdDp7Z3JvdXA6IlR5cGVzIn0sY29sbGF0b3I6e2dyb3VwOiJUeXBlcyJ9LGZvcm1hdDp7Z3JvdXA6IlR5cGVzIn0saW1hZ2U6e2dyb3VwOiJUeXBlcyJ9LCJudW1iZXItZm9ybWF0Ijp7Z3JvdXA6IlR5cGVzIn0sInRvLXN0cmluZyI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1udW1iZXIiOntncm91cDoiVHlwZXMifSwidG8tYm9vbGVhbiI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1yZ2JhIjp7Z3JvdXA6IkNvbG9yIn0sInRvLWNvbG9yIjp7Z3JvdXA6IlR5cGVzIn0scmdiOntncm91cDoiQ29sb3IifSxyZ2JhOntncm91cDoiQ29sb3IifSxnZXQ6e2dyb3VwOiJMb29rdXAifSxoYXM6e2dyb3VwOiJMb29rdXAifSxsZW5ndGg6e2dyb3VwOiJMb29rdXAifSxwcm9wZXJ0aWVzOntncm91cDoiRmVhdHVyZSBkYXRhIn0sImZlYXR1cmUtc3RhdGUiOntncm91cDoiRmVhdHVyZSBkYXRhIn0sImdlb21ldHJ5LXR5cGUiOntncm91cDoiRmVhdHVyZSBkYXRhIn0saWQ6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSx6b29tOntncm91cDoiWm9vbSJ9LCJoZWF0bWFwLWRlbnNpdHkiOntncm91cDoiSGVhdG1hcCJ9LCJsaW5lLXByb2dyZXNzIjp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LGFjY3VtdWxhdGVkOntncm91cDoiRmVhdHVyZSBkYXRhIn0sIisiOntncm91cDoiTWF0aCJ9LCIqIjp7Z3JvdXA6Ik1hdGgifSwiLSI6e2dyb3VwOiJNYXRoIn0sIi8iOntncm91cDoiTWF0aCJ9LCIlIjp7Z3JvdXA6Ik1hdGgifSwiXiI6e2dyb3VwOiJNYXRoIn0sc3FydDp7Z3JvdXA6Ik1hdGgifSxsb2cxMDp7Z3JvdXA6Ik1hdGgifSxsbjp7Z3JvdXA6Ik1hdGgifSxsb2cyOntncm91cDoiTWF0aCJ9LHNpbjp7Z3JvdXA6Ik1hdGgifSxjb3M6e2dyb3VwOiJNYXRoIn0sdGFuOntncm91cDoiTWF0aCJ9LGFzaW46e2dyb3VwOiJNYXRoIn0sYWNvczp7Z3JvdXA6Ik1hdGgifSxhdGFuOntncm91cDoiTWF0aCJ9LG1pbjp7Z3JvdXA6Ik1hdGgifSxtYXg6e2dyb3VwOiJNYXRoIn0scm91bmQ6e2dyb3VwOiJNYXRoIn0sYWJzOntncm91cDoiTWF0aCJ9LGNlaWw6e2dyb3VwOiJNYXRoIn0sZmxvb3I6e2dyb3VwOiJNYXRoIn0sZGlzdGFuY2U6e2dyb3VwOiJNYXRoIn0sIj09Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIiE9Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIj4iOntncm91cDoiRGVjaXNpb24ifSwiPCI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI+PSI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI8PSI6e2dyb3VwOiJEZWNpc2lvbiJ9LGFsbDp7Z3JvdXA6IkRlY2lzaW9uIn0sYW55Ontncm91cDoiRGVjaXNpb24ifSwiISI6e2dyb3VwOiJEZWNpc2lvbiJ9LHdpdGhpbjp7Z3JvdXA6IkRlY2lzaW9uIn0sImlzLXN1cHBvcnRlZC1zY3JpcHQiOntncm91cDoiU3RyaW5nIn0sdXBjYXNlOntncm91cDoiU3RyaW5nIn0sZG93bmNhc2U6e2dyb3VwOiJTdHJpbmcifSxjb25jYXQ6e2dyb3VwOiJTdHJpbmcifSwicmVzb2x2ZWQtbG9jYWxlIjp7Z3JvdXA6IlN0cmluZyJ9fX0sbGlnaHQ6e2FuY2hvcjp7dHlwZToiZW51bSIsZGVmYXVsdDoidmlld3BvcnQiLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19fSxwb3NpdGlvbjp7dHlwZToiYXJyYXkiLGRlZmF1bHQ6WzEuMTUsMjEwLDMwXSxsZW5ndGg6Myx2YWx1ZToibnVtYmVyIiwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19fSxjb2xvcjp7dHlwZToiY29sb3IiLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCIsZGVmYXVsdDoiI2ZmZmZmZiIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LHRyYW5zaXRpb246ITB9LGludGVuc2l0eTp7dHlwZToibnVtYmVyIiwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sdHJhbnNpdGlvbjohMH19LHBhaW50OlsicGFpbnRfZmlsbCIsInBhaW50X2xpbmUiLCJwYWludF9jaXJjbGUiLCJwYWludF9oZWF0bWFwIiwicGFpbnRfZmlsbC1leHRydXNpb24iLCJwYWludF9zeW1ib2wiLCJwYWludF9yYXN0ZXIiLCJwYWludF9oaWxsc2hhZGUiLCJwYWludF9iYWNrZ3JvdW5kIl0scGFpbnRfZmlsbDp7ImZpbGwtYW50aWFsaWFzIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiZmlsbC1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC1vdXRsaW5lLWNvbG9yIjp7dHlwZToiY29sb3IiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9LHsiZmlsbC1hbnRpYWxpYXMiOiEwfV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImZpbGwtdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLXBhdHRlcm4iOnt0eXBlOiJyZXNvbHZlZEltYWdlIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiJ9fSwicGFpbnRfZmlsbC1leHRydXNpb24iOnsiZmlsbC1leHRydXNpb24tb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtZXh0cnVzaW9uLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4ifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIjp7dHlwZToicmVzb2x2ZWRJbWFnZSIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4ifSwiZmlsbC1leHRydXNpb24taGVpZ2h0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOiJtZXRlcnMiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLWV4dHJ1c2lvbi1iYXNlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOiJtZXRlcnMiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCx0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0scGFpbnRfbGluZTp7ImxpbmUtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoibGluZS1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJsaW5lLXRyYW5zbGF0ZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS1nYXAtd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtb2Zmc2V0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS1kYXNoYXJyYXkiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6ImxpbmUgd2lkdGhzIixyZXF1aXJlczpbeyIhIjoibGluZS1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkIn0sImxpbmUtcGF0dGVybiI6e3R5cGU6InJlc29sdmVkSW1hZ2UiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIn0sImxpbmUtZ3JhZGllbnQiOnt0eXBlOiJjb2xvciIsdHJhbnNpdGlvbjohMSxyZXF1aXJlczpbeyIhIjoibGluZS1kYXNoYXJyYXkifSx7IiEiOiJsaW5lLXBhdHRlcm4ifSx7c291cmNlOiJnZW9qc29uIixoYXM6e2xpbmVNZXRyaWNzOiEwfX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsibGluZS1wcm9ncmVzcyJdfSwicHJvcGVydHktdHlwZSI6ImNvbG9yLXJhbXAifX0scGFpbnRfY2lyY2xlOnsiY2lyY2xlLXJhZGl1cyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1LG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImNpcmNsZS10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImNpcmNsZS10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImNpcmNsZS1waXRjaC1zY2FsZSI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJ2aWV3cG9ydCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJjaXJjbGUtc3Ryb2tlLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtc3Ryb2tlLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9fSxwYWludF9oZWF0bWFwOnsiaGVhdG1hcC1yYWRpdXMiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAsbWluaW11bToxLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJoZWF0bWFwLXdlaWdodCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCx0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaGVhdG1hcC1pbnRlbnNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhlYXRtYXAtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDpbImludGVycG9sYXRlIixbImxpbmVhciJdLFsiaGVhdG1hcC1kZW5zaXR5Il0sMCwicmdiYSgwLCAwLCAyNTUsIDApIiwuMSwicm95YWxibHVlIiwuMywiY3lhbiIsLjUsImxpbWUiLC43LCJ5ZWxsb3ciLDEsInJlZCJdLHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJoZWF0bWFwLWRlbnNpdHkiXX0sInByb3BlcnR5LXR5cGUiOiJjb2xvci1yYW1wIn0sImhlYXRtYXAtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X3N5bWJvbDp7Imljb24tb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24taGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwiaWNvbi10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxvdmVycmlkYWJsZTohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtaGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwidGV4dC10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X3Jhc3Rlcjp7InJhc3Rlci1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWh1ZS1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHRyYW5zaXRpb246ITAsdW5pdHM6ImRlZ3JlZXMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWJyaWdodG5lc3MtbWluIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWJyaWdodG5lc3MtbWF4Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLXNhdHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWNvbnRyYXN0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTotMSxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1yZXNhbXBsaW5nIjp7dHlwZToiZW51bSIsdmFsdWVzOntsaW5lYXI6e30sbmVhcmVzdDp7fX0sZGVmYXVsdDoibGluZWFyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1mYWRlLWR1cmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwMCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMSx1bml0czoibWlsbGlzZWNvbmRzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X2hpbGxzaGFkZTp7ImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMzNSxtaW5pbXVtOjAsbWF4aW11bTozNTksdHJhbnNpdGlvbjohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6InZpZXdwb3J0IixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjRkZGRkZGIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLWFjY2VudC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0scGFpbnRfYmFja2dyb3VuZDp7ImJhY2tncm91bmQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiYmFja2dyb3VuZC1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiYmFja2dyb3VuZC1wYXR0ZXJuIjp7dHlwZToicmVzb2x2ZWRJbWFnZSIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZCJ9LCJiYWNrZ3JvdW5kLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9fSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwMCxtaW5pbXVtOjAsdW5pdHM6Im1pbGxpc2Vjb25kcyJ9LGRlbGF5Ont0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdW5pdHM6Im1pbGxpc2Vjb25kcyJ9fSwicHJvcGVydHktdHlwZSI6eyJkYXRhLWRyaXZlbiI6e3R5cGU6InByb3BlcnR5LXR5cGUifSwiY3Jvc3MtZmFkZWQiOnt0eXBlOiJwcm9wZXJ0eS10eXBlIn0sImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIjp7dHlwZToicHJvcGVydHktdHlwZSJ9LCJjb2xvci1yYW1wIjp7dHlwZToicHJvcGVydHktdHlwZSJ9LCJkYXRhLWNvbnN0YW50Ijp7dHlwZToicHJvcGVydHktdHlwZSJ9LGNvbnN0YW50Ont0eXBlOiJwcm9wZXJ0eS10eXBlIn19LHByb21vdGVJZDp7IioiOnt0eXBlOiJzdHJpbmcifX19LFN0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubWVzc2FnZT0odD90KyI6ICI6IiIpK3IsbiYmKHRoaXMuaWRlbnRpZmllcj1uKSxudWxsIT1lJiZlLl9fbGluZV9fJiYodGhpcy5saW5lPWUuX19saW5lX18pfTtmdW5jdGlvbiBFdCh0KXt2YXIgZT10LnZhbHVlO3JldHVybiBlP1tuZXcgU3QodC5rZXksZSwiY29uc3RhbnRzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFzIG9mIHY4IildOltdfWZ1bmN0aW9uIEN0KHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9ZnVuY3Rpb24gTHQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBCb29sZWFuP3QudmFsdWVPZigpOnR9ZnVuY3Rpb24gUHQodCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5tYXAoUHQpO2lmKHQgaW5zdGFuY2VvZiBPYmplY3QmJiEodCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIEJvb2xlYW4pKXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCllW3JdPVB0KHRbcl0pO3JldHVybiBlfXJldHVybiBMdCh0KX12YXIgSXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLHIpLHRoaXMubWVzc2FnZT1yLHRoaXMua2V5PWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZX0oRXJyb3IpLHp0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pLHRoaXMucGFyZW50PXQsdGhpcy5iaW5kaW5ncz17fTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO3RoaXMuYmluZGluZ3NbaVswXV09aVsxXX19O3p0LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB6dCh0aGlzLHQpfSx6dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZGluZ3NbdF0pcmV0dXJuIHRoaXMuYmluZGluZ3NbdF07aWYodGhpcy5wYXJlbnQpcmV0dXJuIHRoaXMucGFyZW50LmdldCh0KTt0aHJvdyBuZXcgRXJyb3IodCsiIG5vdCBmb3VuZCBpbiBzY29wZS4iKX0senQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuYmluZGluZ3NbdF18fCEhdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Lmhhcyh0KX07dmFyIE90PXtraW5kOiJudWxsIn0sRHQ9e2tpbmQ6Im51bWJlciJ9LFJ0PXtraW5kOiJzdHJpbmcifSxGdD17a2luZDoiYm9vbGVhbiJ9LEJ0PXtraW5kOiJjb2xvciJ9LE50PXtraW5kOiJvYmplY3QifSxqdD17a2luZDoidmFsdWUifSxVdD17a2luZDoiY29sbGF0b3IifSxWdD17a2luZDoiZm9ybWF0dGVkIn0scXQ9e2tpbmQ6InJlc29sdmVkSW1hZ2UifTtmdW5jdGlvbiBIdCh0LGUpe3JldHVybntraW5kOiJhcnJheSIsaXRlbVR5cGU6dCxOOmV9fWZ1bmN0aW9uIEd0KHQpe2lmKCJhcnJheSI9PT10LmtpbmQpe3ZhciBlPUd0KHQuaXRlbVR5cGUpO3JldHVybiJudW1iZXIiPT10eXBlb2YgdC5OPyJhcnJheTwiK2UrIiwgIit0Lk4rIj4iOiJ2YWx1ZSI9PT10Lml0ZW1UeXBlLmtpbmQ/ImFycmF5IjoiYXJyYXk8IitlKyI+In1yZXR1cm4gdC5raW5kfXZhciBZdD1bT3QsRHQsUnQsRnQsQnQsVnQsTnQsSHQoanQpLHF0XTtmdW5jdGlvbiBXdCh0LGUpe2lmKCJlcnJvciI9PT1lLmtpbmQpcmV0dXJuIG51bGw7aWYoImFycmF5Ij09PXQua2luZCl7aWYoImFycmF5Ij09PWUua2luZCYmKDA9PT1lLk4mJiJ2YWx1ZSI9PT1lLml0ZW1UeXBlLmtpbmR8fCFXdCh0Lml0ZW1UeXBlLGUuaXRlbVR5cGUpKSYmKCJudW1iZXIiIT10eXBlb2YgdC5OfHx0Lk49PT1lLk4pKXJldHVybiBudWxsfWVsc2V7aWYodC5raW5kPT09ZS5raW5kKXJldHVybiBudWxsO2lmKCJ2YWx1ZSI9PT10LmtpbmQpZm9yKHZhciByPTAsbj1ZdDtyPG4ubGVuZ3RoO3IrPTEpaWYoIVd0KG5bcl0sZSkpcmV0dXJuIG51bGx9cmV0dXJuIkV4cGVjdGVkICIrR3QodCkrIiBidXQgZm91bmQgIitHdChlKSsiIGluc3RlYWQuIn1mdW5jdGlvbiBadCh0LGUpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtpbmQ9PT10LmtpbmR9KSl9ZnVuY3Rpb24gWHQodCxlKXtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4ibnVsbCI9PT1lP251bGw9PT10OiJhcnJheSI9PT1lP0FycmF5LmlzQXJyYXkodCk6Im9iamVjdCI9PT1lP3QmJiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHQ6ZT09PXR5cGVvZiB0fSkpfXZhciBKdD1lKChmdW5jdGlvbih0LGUpe3ZhciByPXt0cmFuc3BhcmVudDpbMCwwLDAsMF0sYWxpY2VibHVlOlsyNDAsMjQ4LDI1NSwxXSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1LDFdLGFxdWE6WzAsMjU1LDI1NSwxXSxhcXVhbWFyaW5lOlsxMjcsMjU1LDIxMiwxXSxhenVyZTpbMjQwLDI1NSwyNTUsMV0sYmVpZ2U6WzI0NSwyNDUsMjIwLDFdLGJpc3F1ZTpbMjU1LDIyOCwxOTYsMV0sYmxhY2s6WzAsMCwwLDFdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNSwxXSxibHVlOlswLDAsMjU1LDFdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjYsMV0sYnJvd246WzE2NSw0Miw0MiwxXSxidXJseXdvb2Q6WzIyMiwxODQsMTM1LDFdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MCwxXSxjaGFydHJldXNlOlsxMjcsMjU1LDAsMV0sY2hvY29sYXRlOlsyMTAsMTA1LDMwLDFdLGNvcmFsOlsyNTUsMTI3LDgwLDFdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzNywxXSxjb3Juc2lsazpbMjU1LDI0OCwyMjAsMV0sY3JpbXNvbjpbMjIwLDIwLDYwLDFdLGN5YW46WzAsMjU1LDI1NSwxXSxkYXJrYmx1ZTpbMCwwLDEzOSwxXSxkYXJrY3lhbjpbMCwxMzksMTM5LDFdLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTEsMV0sZGFya2dyYXk6WzE2OSwxNjksMTY5LDFdLGRhcmtncmVlbjpbMCwxMDAsMCwxXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjksMV0sZGFya2toYWtpOlsxODksMTgzLDEwNywxXSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5LDFdLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDcsMV0sZGFya29yYW5nZTpbMjU1LDE0MCwwLDFdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDQsMV0sZGFya3JlZDpbMTM5LDAsMCwxXSxkYXJrc2FsbW9uOlsyMzMsMTUwLDEyMiwxXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzLDFdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOSwxXSxkYXJrc2xhdGVncmF5Ols0Nyw3OSw3OSwxXSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OSwxXSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDksMV0sZGFya3Zpb2xldDpbMTQ4LDAsMjExLDFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3LDFdLGRlZXBza3libHVlOlswLDE5MSwyNTUsMV0sZGltZ3JheTpbMTA1LDEwNSwxMDUsMV0sZGltZ3JleTpbMTA1LDEwNSwxMDUsMV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NSwxXSxmaXJlYnJpY2s6WzE3OCwzNCwzNCwxXSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDAsMV0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNCwxXSxmdWNoc2lhOlsyNTUsMCwyNTUsMV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMCwxXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NSwxXSxnb2xkOlsyNTUsMjE1LDAsMV0sZ29sZGVucm9kOlsyMTgsMTY1LDMyLDFdLGdyYXk6WzEyOCwxMjgsMTI4LDFdLGdyZWVuOlswLDEyOCwwLDFdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3LDFdLGdyZXk6WzEyOCwxMjgsMTI4LDFdLGhvbmV5ZGV3OlsyNDAsMjU1LDI0MCwxXSxob3RwaW5rOlsyNTUsMTA1LDE4MCwxXSxpbmRpYW5yZWQ6WzIwNSw5Miw5MiwxXSxpbmRpZ286Wzc1LDAsMTMwLDFdLGl2b3J5OlsyNTUsMjU1LDI0MCwxXSxraGFraTpbMjQwLDIzMCwxNDAsMV0sbGF2ZW5kZXI6WzIzMCwyMzAsMjUwLDFdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1LDFdLGxhd25ncmVlbjpbMTI0LDI1MiwwLDFdLGxlbW9uY2hpZmZvbjpbMjU1LDI1MCwyMDUsMV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMCwxXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOCwxXSxsaWdodGN5YW46WzIyNCwyNTUsMjU1LDFdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMCwxXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0LDFdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTEsMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5MywxXSxsaWdodHNhbG1vbjpbMjU1LDE2MCwxMjIsMV0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MCwxXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwLDFdLGxpZ2h0c2xhdGVncmF5OlsxMTksMTM2LDE1MywxXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyLDFdLGxpZ2h0eWVsbG93OlsyNTUsMjU1LDIyNCwxXSxsaW1lOlswLDI1NSwwLDFdLGxpbWVncmVlbjpbNTAsMjA1LDUwLDFdLGxpbmVuOlsyNTAsMjQwLDIzMCwxXSxtYWdlbnRhOlsyNTUsMCwyNTUsMV0sbWFyb29uOlsxMjgsMCwwLDFdLG1lZGl1bWFxdWFtYXJpbmU6WzEwMiwyMDUsMTcwLDFdLG1lZGl1bWJsdWU6WzAsMCwyMDUsMV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExLDFdLG1lZGl1bXB1cnBsZTpbMTQ3LDExMiwyMTksMV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTMsMV0sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOCwxXSxtZWRpdW1zcHJpbmdncmVlbjpbMCwyNTAsMTU0LDFdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNCwxXSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzMsMV0sbWlkbmlnaHRibHVlOlsyNSwyNSwxMTIsMV0sbWludGNyZWFtOlsyNDUsMjU1LDI1MCwxXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1LDFdLG1vY2Nhc2luOlsyNTUsMjI4LDE4MSwxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzMsMV0sbmF2eTpbMCwwLDEyOCwxXSxvbGRsYWNlOlsyNTMsMjQ1LDIzMCwxXSxvbGl2ZTpbMTI4LDEyOCwwLDFdLG9saXZlZHJhYjpbMTA3LDE0MiwzNSwxXSxvcmFuZ2U6WzI1NSwxNjUsMCwxXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwLDFdLG9yY2hpZDpbMjE4LDExMiwyMTQsMV0scGFsZWdvbGRlbnJvZDpbMjM4LDIzMiwxNzAsMV0scGFsZWdyZWVuOlsxNTIsMjUxLDE1MiwxXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOCwxXSxwYWxldmlvbGV0cmVkOlsyMTksMTEyLDE0NywxXSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxMywxXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1LDFdLHBlcnU6WzIwNSwxMzMsNjMsMV0scGluazpbMjU1LDE5MiwyMDMsMV0scGx1bTpbMjIxLDE2MCwyMjEsMV0scG93ZGVyYmx1ZTpbMTc2LDIyNCwyMzAsMV0scHVycGxlOlsxMjgsMCwxMjgsMV0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1MywxXSxyZWQ6WzI1NSwwLDAsMV0scm9zeWJyb3duOlsxODgsMTQzLDE0MywxXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjUsMV0sc2FkZGxlYnJvd246WzEzOSw2OSwxOSwxXSxzYWxtb246WzI1MCwxMjgsMTE0LDFdLHNhbmR5YnJvd246WzI0NCwxNjQsOTYsMV0sc2VhZ3JlZW46WzQ2LDEzOSw4NywxXSxzZWFzaGVsbDpbMjU1LDI0NSwyMzgsMV0sc2llbm5hOlsxNjAsODIsNDUsMV0sc2lsdmVyOlsxOTIsMTkyLDE5MiwxXSxza3libHVlOlsxMzUsMjA2LDIzNSwxXSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDUsMV0sc2xhdGVncmF5OlsxMTIsMTI4LDE0NCwxXSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0LDFdLHNub3c6WzI1NSwyNTAsMjUwLDFdLHNwcmluZ2dyZWVuOlswLDI1NSwxMjcsMV0sc3RlZWxibHVlOls3MCwxMzAsMTgwLDFdLHRhbjpbMjEwLDE4MCwxNDAsMV0sdGVhbDpbMCwxMjgsMTI4LDFdLHRoaXN0bGU6WzIxNiwxOTEsMjE2LDFdLHRvbWF0bzpbMjU1LDk5LDcxLDFdLHR1cnF1b2lzZTpbNjQsMjI0LDIwOCwxXSx2aW9sZXQ6WzIzOCwxMzAsMjM4LDFdLHdoZWF0OlsyNDUsMjIyLDE3OSwxXSx3aGl0ZTpbMjU1LDI1NSwyNTUsMV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDUsMV0seWVsbG93OlsyNTUsMjU1LDAsMV0seWVsbG93Z3JlZW46WzE1NCwyMDUsNTAsMV19O2Z1bmN0aW9uIG4odCl7cmV0dXJuKHQ9TWF0aC5yb3VuZCh0KSk8MD8wOnQ+MjU1PzI1NTp0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIG4oIiUiPT09dFt0Lmxlbmd0aC0xXT9wYXJzZUZsb2F0KHQpLzEwMCoyNTU6cGFyc2VJbnQodCkpfWZ1bmN0aW9uIGEodCl7cmV0dXJuKGU9IiUiPT09dFt0Lmxlbmd0aC0xXT9wYXJzZUZsb2F0KHQpLzEwMDpwYXJzZUZsb2F0KHQpKTwwPzA6ZT4xPzE6ZTt2YXIgZX1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gcjwwP3IrPTE6cj4xJiYoci09MSksNipyPDE/dCsoZS10KSpyKjY6MipyPDE/ZTozKnI8Mj90KyhlLXQpKigyLzMtcikqNjp0fXRyeXtlLnBhcnNlQ1NTQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGUscz10LnJlcGxhY2UoLyAvZywiIikudG9Mb3dlckNhc2UoKTtpZihzIGluIHIpcmV0dXJuIHJbc10uc2xpY2UoKTtpZigiIyI9PT1zWzBdKXJldHVybiA0PT09cy5sZW5ndGg/KGU9cGFyc2VJbnQocy5zdWJzdHIoMSksMTYpKT49MCYmZTw9NDA5NT9bKDM4NDAmZSk+PjR8KDM4NDAmZSk+PjgsMjQwJmV8KDI0MCZlKT4+NCwxNSZlfCgxNSZlKTw8NCwxXTpudWxsOjc9PT1zLmxlbmd0aCYmKGU9cGFyc2VJbnQocy5zdWJzdHIoMSksMTYpKT49MCYmZTw9MTY3NzcyMTU/WygxNjcxMTY4MCZlKT4+MTYsKDY1MjgwJmUpPj44LDI1NSZlLDFdOm51bGw7dmFyIGw9cy5pbmRleE9mKCIoIiksYz1zLmluZGV4T2YoIikiKTtpZigtMSE9PWwmJmMrMT09PXMubGVuZ3RoKXt2YXIgdT1zLnN1YnN0cigwLGwpLGg9cy5zdWJzdHIobCsxLGMtKGwrMSkpLnNwbGl0KCIsIiksZj0xO3N3aXRjaCh1KXtjYXNlInJnYmEiOmlmKDQhPT1oLmxlbmd0aClyZXR1cm4gbnVsbDtmPWEoaC5wb3AoKSk7Y2FzZSJyZ2IiOnJldHVybiAzIT09aC5sZW5ndGg/bnVsbDpbaShoWzBdKSxpKGhbMV0pLGkoaFsyXSksZl07Y2FzZSJoc2xhIjppZig0IT09aC5sZW5ndGgpcmV0dXJuIG51bGw7Zj1hKGgucG9wKCkpO2Nhc2UiaHNsIjppZigzIT09aC5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHA9KHBhcnNlRmxvYXQoaFswXSklMzYwKzM2MCklMzYwLzM2MCxkPWEoaFsxXSksZz1hKGhbMl0pLG09Zzw9LjU/ZyooZCsxKTpnK2QtZypkLHY9MipnLW07cmV0dXJuW24oMjU1Km8odixtLHArMS8zKSksbigyNTUqbyh2LG0scCkpLG4oMjU1Km8odixtLHAtMS8zKSksZl07ZGVmYXVsdDpyZXR1cm4gbnVsbH19cmV0dXJuIG51bGx9fWNhdGNoKHQpe319KSkucGFyc2VDU1NDb2xvcixLdD1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj0xKSx0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9cix0aGlzLmE9bn07S3QucGFyc2U9ZnVuY3Rpb24odCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIEt0KXJldHVybiB0O2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9SnQodCk7aWYoZSlyZXR1cm4gbmV3IEt0KGVbMF0vMjU1KmVbM10sZVsxXS8yNTUqZVszXSxlWzJdLzI1NSplWzNdLGVbM10pfX19LEt0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudG9BcnJheSgpLGU9dFsxXSxyPXRbMl0sbj10WzNdO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZCh0WzBdKSsiLCIrTWF0aC5yb3VuZChlKSsiLCIrTWF0aC5yb3VuZChyKSsiLCIrbisiKSJ9LEt0LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hO3JldHVybiAwPT09dD9bMCwwLDAsMF06WzI1NSp0aGlzLnIvdCwyNTUqdGhpcy5nL3QsMjU1KnRoaXMuYi90LHRdfSxLdC5ibGFjaz1uZXcgS3QoMCwwLDAsMSksS3Qud2hpdGU9bmV3IEt0KDEsMSwxLDEpLEt0LnRyYW5zcGFyZW50PW5ldyBLdCgwLDAsMCwwKSxLdC5yZWQ9bmV3IEt0KDEsMCwwLDEpO3ZhciBRdD1mdW5jdGlvbih0LGUscil7dGhpcy5zZW5zaXRpdml0eT10P2U/InZhcmlhbnQiOiJjYXNlIjplPyJhY2NlbnQiOiJiYXNlIix0aGlzLmxvY2FsZT1yLHRoaXMuY29sbGF0b3I9bmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGU/dGhpcy5sb2NhbGU6W10se3NlbnNpdGl2aXR5OnRoaXMuc2Vuc2l0aXZpdHksdXNhZ2U6InNlYXJjaCJ9KX07UXQucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb2xsYXRvci5jb21wYXJlKHQsZSl9LFF0LnByb3RvdHlwZS5yZXNvbHZlZExvY2FsZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZT90aGlzLmxvY2FsZTpbXSkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlfTt2YXIgJHQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnRleHQ9dCx0aGlzLmltYWdlPWUsdGhpcy5zY2FsZT1yLHRoaXMuZm9udFN0YWNrPW4sdGhpcy50ZXh0Q29sb3I9aX0sdGU9ZnVuY3Rpb24odCl7dGhpcy5zZWN0aW9ucz10fTt0ZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdGUoW25ldyAkdCh0LG51bGwsbnVsbCxudWxsLG51bGwpXSl9LHRlLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnNlY3Rpb25zLmxlbmd0aHx8IXRoaXMuc2VjdGlvbnMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LnRleHQubGVuZ3RofHx0LmltYWdlJiYwIT09dC5pbWFnZS5uYW1lLmxlbmd0aH0pKX0sdGUuZmFjdG9yeT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRlP3Q6dGUuZnJvbVN0cmluZyh0KX0sdGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnNlY3Rpb25zLmxlbmd0aD8iIjp0aGlzLnNlY3Rpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dH0pKS5qb2luKCIiKX0sdGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bImZvcm1hdCJdLGU9MCxyPXRoaXMuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKG4uaW1hZ2UpdC5wdXNoKFsiaW1hZ2UiLG4uaW1hZ2UubmFtZV0pO2Vsc2V7dC5wdXNoKG4udGV4dCk7dmFyIGk9e307bi5mb250U3RhY2smJihpWyJ0ZXh0LWZvbnQiXT1bImxpdGVyYWwiLG4uZm9udFN0YWNrLnNwbGl0KCIsIildKSxuLnNjYWxlJiYoaVsiZm9udC1zY2FsZSJdPW4uc2NhbGUpLG4udGV4dENvbG9yJiYoaVsidGV4dC1jb2xvciJdPVsicmdiYSJdLmNvbmNhdChuLnRleHRDb2xvci50b0FycmF5KCkpKSx0LnB1c2goaSl9fXJldHVybiB0fTt2YXIgZWU9ZnVuY3Rpb24odCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmF2YWlsYWJsZT10LmF2YWlsYWJsZX07ZnVuY3Rpb24gcmUodCxlLHIsbil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wJiZ0PD0yNTUmJiJudW1iZXIiPT10eXBlb2YgZSYmZT49MCYmZTw9MjU1JiYibnVtYmVyIj09dHlwZW9mIHImJnI+PTAmJnI8PTI1NT92b2lkIDA9PT1ufHwibnVtYmVyIj09dHlwZW9mIG4mJm4+PTAmJm48PTE/bnVsbDoiSW52YWxpZCByZ2JhIHZhbHVlIFsiK1t0LGUscixuXS5qb2luKCIsICIpKyJdOiAnYScgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEuIjoiSW52YWxpZCByZ2JhIHZhbHVlIFsiKygibnVtYmVyIj09dHlwZW9mIG4/W3QsZSxyLG5dOlt0LGUscl0pLmpvaW4oIiwgIikrIl06ICdyJywgJ2cnLCBhbmQgJ2InIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUuIn1mdW5jdGlvbiBuZSh0KXtpZihudWxsPT09dClyZXR1cm4hMDtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuITA7aWYoImJvb2xlYW4iPT10eXBlb2YgdClyZXR1cm4hMDtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIEt0KXJldHVybiEwO2lmKHQgaW5zdGFuY2VvZiBRdClyZXR1cm4hMDtpZih0IGluc3RhbmNlb2YgdGUpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIGVlKXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpaWYoIW5lKHJbZV0pKXJldHVybiExO3JldHVybiEwfWlmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHZhciBuIGluIHQpaWYoIW5lKHRbbl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGllKHQpe2lmKG51bGw9PT10KXJldHVybiBPdDtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIFJ0O2lmKCJib29sZWFuIj09dHlwZW9mIHQpcmV0dXJuIEZ0O2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gRHQ7aWYodCBpbnN0YW5jZW9mIEt0KXJldHVybiBCdDtpZih0IGluc3RhbmNlb2YgUXQpcmV0dXJuIFV0O2lmKHQgaW5zdGFuY2VvZiB0ZSlyZXR1cm4gVnQ7aWYodCBpbnN0YW5jZW9mIGVlKXJldHVybiBxdDtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aWUoaVtuXSk7aWYoZSl7aWYoZT09PWEpY29udGludWU7ZT1qdDticmVha31lPWF9cmV0dXJuIEh0KGV8fGp0LHIpfXJldHVybiBOdH1mdW5jdGlvbiBhZSh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbD09PXQ/IiI6InN0cmluZyI9PT1lfHwibnVtYmVyIj09PWV8fCJib29sZWFuIj09PWU/U3RyaW5nKHQpOnQgaW5zdGFuY2VvZiBLdHx8dCBpbnN0YW5jZW9mIHRlfHx0IGluc3RhbmNlb2YgZWU/dC50b1N0cmluZygpOkpTT04uc3RyaW5naWZ5KHQpfWVlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGVlLmZyb21TdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/bmV3IGVlKHtuYW1lOnQsYXZhaWxhYmxlOiExfSk6bnVsbH0sZWUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiaW1hZ2UiLHRoaXMubmFtZV19O3ZhciBvZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMudmFsdWU9ZX07b2UucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIidsaXRlcmFsJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2lmKCFuZSh0WzFdKSlyZXR1cm4gZS5lcnJvcigiaW52YWxpZCB2YWx1ZSIpO3ZhciByPXRbMV0sbj1pZShyKSxpPWUuZXhwZWN0ZWRUeXBlO3JldHVybiJhcnJheSIhPT1uLmtpbmR8fDAhPT1uLk58fCFpfHwiYXJyYXkiIT09aS5raW5kfHwibnVtYmVyIj09dHlwZW9mIGkuTiYmMCE9PWkuTnx8KG49aSksbmV3IG9lKG4scil9LG9lLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxvZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKCl7fSxvZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiEwfSxvZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuImFycmF5Ij09PXRoaXMudHlwZS5raW5kfHwib2JqZWN0Ij09PXRoaXMudHlwZS5raW5kP1sibGl0ZXJhbCIsdGhpcy52YWx1ZV06dGhpcy52YWx1ZSBpbnN0YW5jZW9mIEt0P1sicmdiYSJdLmNvbmNhdCh0aGlzLnZhbHVlLnRvQXJyYXkoKSk6dGhpcy52YWx1ZSBpbnN0YW5jZW9mIHRlP3RoaXMudmFsdWUuc2VyaWFsaXplKCk6dGhpcy52YWx1ZX07dmFyIHNlPWZ1bmN0aW9uKHQpe3RoaXMubmFtZT0iRXhwcmVzc2lvbkV2YWx1YXRpb25FcnJvciIsdGhpcy5tZXNzYWdlPXR9O3NlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlfTt2YXIgbGU9e3N0cmluZzpSdCxudW1iZXI6RHQsYm9vbGVhbjpGdCxvYmplY3Q6TnR9LGNlPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O2NlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByLG49MSxpPXRbMF07aWYoImFycmF5Ij09PWkpe3ZhciBhLG87aWYodC5sZW5ndGg+Mil7dmFyIHM9dFsxXTtpZigic3RyaW5nIiE9dHlwZW9mIHN8fCEocyBpbiBsZSl8fCJvYmplY3QiPT09cylyZXR1cm4gZS5lcnJvcignVGhlIGl0ZW0gdHlwZSBhcmd1bWVudCBvZiAiYXJyYXkiIG11c3QgYmUgb25lIG9mIHN0cmluZywgbnVtYmVyLCBib29sZWFuJywxKTthPWxlW3NdLG4rK31lbHNlIGE9anQ7aWYodC5sZW5ndGg+Myl7aWYobnVsbCE9PXRbMl0mJigibnVtYmVyIiE9dHlwZW9mIHRbMl18fHRbMl08MHx8dFsyXSE9PU1hdGguZmxvb3IodFsyXSkpKXJldHVybiBlLmVycm9yKCdUaGUgbGVuZ3RoIGFyZ3VtZW50IHRvICJhcnJheSIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgbGl0ZXJhbCcsMik7bz10WzJdLG4rK31yPUh0KGEsbyl9ZWxzZSByPWxlW2ldO2Zvcih2YXIgbD1bXTtuPHQubGVuZ3RoO24rKyl7dmFyIGM9ZS5wYXJzZSh0W25dLG4sanQpO2lmKCFjKXJldHVybiBudWxsO2wucHVzaChjKX1yZXR1cm4gbmV3IGNlKHIsbCl9LGNlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuYXJncy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLmFyZ3NbZV0uZXZhbHVhdGUodCk7aWYoIVd0KHRoaXMudHlwZSxpZShyKSkpcmV0dXJuIHI7aWYoZT09PXRoaXMuYXJncy5sZW5ndGgtMSl0aHJvdyBuZXcgc2UoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgIitHdCh0aGlzLnR5cGUpKyIsIGJ1dCBmb3VuZCAiK0d0KGllKHIpKSsiIGluc3RlYWQuIil9cmV0dXJuIG51bGx9LGNlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGNlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXJncy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpfSxjZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50eXBlLGU9W3Qua2luZF07aWYoImFycmF5Ij09PXQua2luZCl7dmFyIHI9dC5pdGVtVHlwZTtpZigic3RyaW5nIj09PXIua2luZHx8Im51bWJlciI9PT1yLmtpbmR8fCJib29sZWFuIj09PXIua2luZCl7ZS5wdXNoKHIua2luZCk7dmFyIG49dC5OOygibnVtYmVyIj09dHlwZW9mIG58fHRoaXMuYXJncy5sZW5ndGg+MSkmJmUucHVzaChuKX19cmV0dXJuIGUuY29uY2F0KHRoaXMuYXJncy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpKX07dmFyIHVlPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1WdCx0aGlzLnNlY3Rpb25zPXR9O3VlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByPXRbMV07aWYoIUFycmF5LmlzQXJyYXkocikmJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm4gZS5lcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBpbWFnZSBvciB0ZXh0IHNlY3Rpb24uIik7Zm9yKHZhciBuPVtdLGk9ITEsYT0xO2E8PXQubGVuZ3RoLTE7KythKXt2YXIgbz10W2FdO2lmKGkmJiJvYmplY3QiPT10eXBlb2YgbyYmIUFycmF5LmlzQXJyYXkobykpe2k9ITE7dmFyIHM9bnVsbDtpZihvWyJmb250LXNjYWxlIl0mJiEocz1lLnBhcnNlKG9bImZvbnQtc2NhbGUiXSwxLER0KSkpcmV0dXJuIG51bGw7dmFyIGw9bnVsbDtpZihvWyJ0ZXh0LWZvbnQiXSYmIShsPWUucGFyc2Uob1sidGV4dC1mb250Il0sMSxIdChSdCkpKSlyZXR1cm4gbnVsbDt2YXIgYz1udWxsO2lmKG9bInRleHQtY29sb3IiXSYmIShjPWUucGFyc2Uob1sidGV4dC1jb2xvciJdLDEsQnQpKSlyZXR1cm4gbnVsbDt2YXIgdT1uW24ubGVuZ3RoLTFdO3Uuc2NhbGU9cyx1LmZvbnQ9bCx1LnRleHRDb2xvcj1jfWVsc2V7dmFyIGg9ZS5wYXJzZSh0W2FdLDEsanQpO2lmKCFoKXJldHVybiBudWxsO3ZhciBmPWgudHlwZS5raW5kO2lmKCJzdHJpbmciIT09ZiYmInZhbHVlIiE9PWYmJiJudWxsIiE9PWYmJiJyZXNvbHZlZEltYWdlIiE9PWYpcmV0dXJuIGUuZXJyb3IoIkZvcm1hdHRlZCB0ZXh0IHR5cGUgbXVzdCBiZSAnc3RyaW5nJywgJ3ZhbHVlJywgJ2ltYWdlJyBvciAnbnVsbCcuIik7aT0hMCxuLnB1c2goe2NvbnRlbnQ6aCxzY2FsZTpudWxsLGZvbnQ6bnVsbCx0ZXh0Q29sb3I6bnVsbH0pfX1yZXR1cm4gbmV3IHVlKG4pfSx1ZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB0ZSh0aGlzLnNlY3Rpb25zLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5jb250ZW50LmV2YWx1YXRlKHQpO3JldHVybiBpZShyKT09PXF0P25ldyAkdCgiIixyLG51bGwsbnVsbCxudWxsKTpuZXcgJHQoYWUociksbnVsbCxlLnNjYWxlP2Uuc2NhbGUuZXZhbHVhdGUodCk6bnVsbCxlLmZvbnQ/ZS5mb250LmV2YWx1YXRlKHQpLmpvaW4oIiwiKTpudWxsLGUudGV4dENvbG9yP2UudGV4dENvbG9yLmV2YWx1YXRlKHQpOm51bGwpfSkpKX0sdWUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO3Qobi5jb250ZW50KSxuLnNjYWxlJiZ0KG4uc2NhbGUpLG4uZm9udCYmdChuLmZvbnQpLG4udGV4dENvbG9yJiZ0KG4udGV4dENvbG9yKX19LHVlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHVlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJmb3JtYXQiXSxlPTAscj10aGlzLnNlY3Rpb25zO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0LnB1c2gobi5jb250ZW50LnNlcmlhbGl6ZSgpKTt2YXIgaT17fTtuLnNjYWxlJiYoaVsiZm9udC1zY2FsZSJdPW4uc2NhbGUuc2VyaWFsaXplKCkpLG4uZm9udCYmKGlbInRleHQtZm9udCJdPW4uZm9udC5zZXJpYWxpemUoKSksbi50ZXh0Q29sb3ImJihpWyJ0ZXh0LWNvbG9yIl09bi50ZXh0Q29sb3Iuc2VyaWFsaXplKCkpLHQucHVzaChpKX1yZXR1cm4gdH07dmFyIGhlPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1xdCx0aGlzLmlucHV0PXR9O2hlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCB0d28gYXJndW1lbnRzLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLFJ0KTtyZXR1cm4gcj9uZXcgaGUocik6ZS5lcnJvcigiTm8gaW1hZ2UgbmFtZSBwcm92aWRlZC4iKX0saGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCkscj1lZS5mcm9tU3RyaW5nKGUpO3JldHVybiByJiZ0LmF2YWlsYWJsZUltYWdlcyYmKHIuYXZhaWxhYmxlPXQuYXZhaWxhYmxlSW1hZ2VzLmluZGV4T2YoZSk+LTEpLHJ9LGhlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KX0saGUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiaW1hZ2UiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldfTt2YXIgZmU9eyJ0by1ib29sZWFuIjpGdCwidG8tY29sb3IiOkJ0LCJ0by1udW1iZXIiOkR0LCJ0by1zdHJpbmciOlJ0fSxwZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtwZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTt2YXIgcj10WzBdO2lmKCgidG8tYm9vbGVhbiI9PT1yfHwidG8tc3RyaW5nIj09PXIpJiYyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIG9uZSBhcmd1bWVudC4iKTtmb3IodmFyIG49ZmVbcl0saT1bXSxhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUucGFyc2UodFthXSxhLGp0KTtpZighbylyZXR1cm4gbnVsbDtpLnB1c2gobyl9cmV0dXJuIG5ldyBwZShuLGkpfSxwZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iPT09dGhpcy50eXBlLmtpbmQpcmV0dXJuIEJvb2xlYW4odGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKTtpZigiY29sb3IiPT09dGhpcy50eXBlLmtpbmQpe2Zvcih2YXIgZSxyLG49MCxpPXRoaXMuYXJncztuPGkubGVuZ3RoO24rPTEpe2lmKHI9bnVsbCwoZT1pW25dLmV2YWx1YXRlKHQpKWluc3RhbmNlb2YgS3QpcmV0dXJuIGU7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgYT10LnBhcnNlQ29sb3IoZSk7aWYoYSlyZXR1cm4gYX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkmJiEocj1lLmxlbmd0aDwzfHxlLmxlbmd0aD40PyJJbnZhbGlkIHJiZ2EgdmFsdWUgIitKU09OLnN0cmluZ2lmeShlKSsiOiBleHBlY3RlZCBhbiBhcnJheSBjb250YWluaW5nIGVpdGhlciB0aHJlZSBvciBmb3VyIG51bWVyaWMgdmFsdWVzLiI6cmUoZVswXSxlWzFdLGVbMl0sZVszXSkpKXJldHVybiBuZXcgS3QoZVswXS8yNTUsZVsxXS8yNTUsZVsyXS8yNTUsZVszXSl9dGhyb3cgbmV3IHNlKHJ8fCJDb3VsZCBub3QgcGFyc2UgY29sb3IgZnJvbSB2YWx1ZSAnIisoInN0cmluZyI9PXR5cGVvZiBlP2U6U3RyaW5nKEpTT04uc3RyaW5naWZ5KGUpKSkrIiciKX1pZigibnVtYmVyIj09PXRoaXMudHlwZS5raW5kKXtmb3IodmFyIG89bnVsbCxzPTAsbD10aGlzLmFyZ3M7czxsLmxlbmd0aDtzKz0xKXtpZihudWxsPT09KG89bFtzXS5ldmFsdWF0ZSh0KSkpcmV0dXJuIDA7dmFyIGM9TnVtYmVyKG8pO2lmKCFpc05hTihjKSlyZXR1cm4gY310aHJvdyBuZXcgc2UoIkNvdWxkIG5vdCBjb252ZXJ0ICIrSlNPTi5zdHJpbmdpZnkobykrIiB0byBudW1iZXIuIil9cmV0dXJuImZvcm1hdHRlZCI9PT10aGlzLnR5cGUua2luZD90ZS5mcm9tU3RyaW5nKGFlKHRoaXMuYXJnc1swXS5ldmFsdWF0ZSh0KSkpOiJyZXNvbHZlZEltYWdlIj09PXRoaXMudHlwZS5raW5kP2VlLmZyb21TdHJpbmcoYWUodGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKSk6YWUodGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKX0scGUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0scGUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcmdzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRwdXREZWZpbmVkKCl9KSl9LHBlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtpZigiZm9ybWF0dGVkIj09PXRoaXMudHlwZS5raW5kKXJldHVybiBuZXcgdWUoW3tjb250ZW50OnRoaXMuYXJnc1swXSxzY2FsZTpudWxsLGZvbnQ6bnVsbCx0ZXh0Q29sb3I6bnVsbH1dKS5zZXJpYWxpemUoKTtpZigicmVzb2x2ZWRJbWFnZSI9PT10aGlzLnR5cGUua2luZClyZXR1cm4gbmV3IGhlKHRoaXMuYXJnc1swXSkuc2VyaWFsaXplKCk7dmFyIHQ9WyJ0by0iK3RoaXMudHlwZS5raW5kXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pKSx0fTt2YXIgZGU9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdLGdlPWZ1bmN0aW9uKCl7dGhpcy5nbG9iYWxzPW51bGwsdGhpcy5mZWF0dXJlPW51bGwsdGhpcy5mZWF0dXJlU3RhdGU9bnVsbCx0aGlzLmZvcm1hdHRlZFNlY3Rpb249bnVsbCx0aGlzLl9wYXJzZUNvbG9yQ2FjaGU9e30sdGhpcy5hdmFpbGFibGVJbWFnZXM9bnVsbCx0aGlzLmNhbm9uaWNhbD1udWxsfTtnZS5wcm90b3R5cGUuaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlJiYiaWQiaW4gdGhpcy5mZWF0dXJlP3RoaXMuZmVhdHVyZS5pZDpudWxsfSxnZS5wcm90b3R5cGUuZ2VvbWV0cnlUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZT8ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmVhdHVyZS50eXBlP2RlW3RoaXMuZmVhdHVyZS50eXBlXTp0aGlzLmZlYXR1cmUudHlwZTpudWxsfSxnZS5wcm90b3R5cGUuZ2VvbWV0cnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlJiYiZ2VvbWV0cnkiaW4gdGhpcy5mZWF0dXJlP3RoaXMuZmVhdHVyZS5nZW9tZXRyeTpudWxsfSxnZS5wcm90b3R5cGUuY2Fub25pY2FsSUQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWx9LGdlLnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLnByb3BlcnRpZXN8fHt9fSxnZS5wcm90b3R5cGUucGFyc2VDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF07cmV0dXJuIGV8fChlPXRoaXMuX3BhcnNlQ29sb3JDYWNoZVt0XT1LdC5wYXJzZSh0KSksZX07dmFyIG1lPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuX2V2YWx1YXRlPXIsdGhpcy5hcmdzPW59O21lLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZhbHVhdGUodCx0aGlzLmFyZ3MpfSxtZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxtZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxtZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubmFtZV0uY29uY2F0KHRoaXMuYXJncy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpKX0sbWUucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRbMF0saT1tZS5kZWZpbml0aW9uc1tuXTtpZighaSlyZXR1cm4gZS5lcnJvcignVW5rbm93biBleHByZXNzaW9uICInK24rJyIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCk7Zm9yKHZhciBhPUFycmF5LmlzQXJyYXkoaSk/aVswXTppLnR5cGUsbz1BcnJheS5pc0FycmF5KGkpP1tbaVsxXSxpWzJdXV06aS5vdmVybG9hZHMscz1vLmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXTtyZXR1cm4hQXJyYXkuaXNBcnJheShyKXx8ci5sZW5ndGg9PT10Lmxlbmd0aC0xfSkpLGw9bnVsbCxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXSxmPWhbMF0scD1oWzFdO2w9bmV3IEJlKGUucmVnaXN0cnksZS5wYXRoLG51bGwsZS5zY29wZSk7Zm9yKHZhciBkPVtdLGc9ITEsbT0xO208dC5sZW5ndGg7bSsrKXt2YXIgdj10W21dLHk9QXJyYXkuaXNBcnJheShmKT9mW20tMV06Zi50eXBlLHg9bC5wYXJzZSh2LDErZC5sZW5ndGgseSk7aWYoIXgpe2c9ITA7YnJlYWt9ZC5wdXNoKHgpfWlmKCFnKWlmKEFycmF5LmlzQXJyYXkoZikmJmYubGVuZ3RoIT09ZC5sZW5ndGgpbC5lcnJvcigiRXhwZWN0ZWQgIitmLmxlbmd0aCsiIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrZC5sZW5ndGgrIiBpbnN0ZWFkLiIpO2Vsc2V7Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciBfPUFycmF5LmlzQXJyYXkoZik/ZltiXTpmLnR5cGUsdz1kW2JdO2wuY29uY2F0KGIrMSkuY2hlY2tTdWJ0eXBlKF8sdy50eXBlKX1pZigwPT09bC5lcnJvcnMubGVuZ3RoKXJldHVybiBuZXcgbWUobixhLHAsZCl9fWlmKDE9PT1zLmxlbmd0aCkocj1lLmVycm9ycykucHVzaC5hcHBseShyLGwuZXJyb3JzKTtlbHNle2Zvcih2YXIgVD0ocy5sZW5ndGg/czpvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBlPXRbMF0sQXJyYXkuaXNBcnJheShlKT8iKCIrZS5tYXAoR3QpLmpvaW4oIiwgIikrIikiOiIoIitHdChlLnR5cGUpKyIuLi4pIn0pKS5qb2luKCIgfCAiKSxrPVtdLE09MTtNPHQubGVuZ3RoO00rKyl7dmFyIEE9ZS5wYXJzZSh0W01dLDEray5sZW5ndGgpO2lmKCFBKXJldHVybiBudWxsO2sucHVzaChHdChBLnR5cGUpKX1lLmVycm9yKCJFeHBlY3RlZCBhcmd1bWVudHMgb2YgdHlwZSAiK1QrIiwgYnV0IGZvdW5kICgiK2suam9pbigiLCAiKSsiKSBpbnN0ZWFkLiIpfXJldHVybiBudWxsfSxtZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBtZS5kZWZpbml0aW9ucz1lLGUpdFtyXT1tZX07dmFyIHZlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9VXQsdGhpcy5sb2NhbGU9cix0aGlzLmNhc2VTZW5zaXRpdmU9dCx0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZT1lfTtmdW5jdGlvbiB5ZSh0LGUpe3RbMF09TWF0aC5taW4odFswXSxlWzBdKSx0WzFdPU1hdGgubWluKHRbMV0sZVsxXSksdFsyXT1NYXRoLm1heCh0WzJdLGVbMF0pLHRbM109TWF0aC5tYXgodFszXSxlWzFdKX1mdW5jdGlvbiB4ZSh0LGUpe3JldHVybiEodFswXTw9ZVswXXx8dFsyXT49ZVsyXXx8dFsxXTw9ZVsxXXx8dFszXT49ZVszXSl9ZnVuY3Rpb24gYmUodCxlKXt2YXIgcj0oMTgwK3RbMF0pLzM2MCxuPSgxODAtMTgwL01hdGguUEkqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K3RbMV0qTWF0aC5QSS8zNjApKSkvMzYwLGk9TWF0aC5wb3coMixlLnopO3JldHVybltNYXRoLnJvdW5kKHIqaSo4MTkyKSxNYXRoLnJvdW5kKG4qaSo4MTkyKV19ZnVuY3Rpb24gX2UodCxlLHIpe3JldHVybiBlWzFdPnRbMV0hPXJbMV0+dFsxXSYmdFswXTwoclswXS1lWzBdKSoodFsxXS1lWzFdKS8oclsxXS1lWzFdKStlWzBdfWZ1bmN0aW9uIHdlKHQsZSl7Zm9yKHZhciByLG4saSxhLG8scyxsLGM9ITEsdT0wLGg9ZS5sZW5ndGg7dTxoO3UrKylmb3IodmFyIGY9ZVt1XSxwPTAsZD1mLmxlbmd0aDtwPGQtMTtwKyspe2lmKChhPShyPXQpWzBdLShuPWZbcF0pWzBdKSoobD1yWzFdLShpPWZbcCsxXSlbMV0pLShzPXJbMF0taVswXSkqKG89clsxXS1uWzFdKT09MCYmYSpzPD0wJiZvKmw8PTApcmV0dXJuITE7X2UodCxmW3BdLGZbcCsxXSkmJihjPSFjKX1yZXR1cm4gY31mdW5jdGlvbiBUZSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKHdlKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24ga2UodCxlLHIsbil7dmFyIGk9blswXS1yWzBdLGE9blsxXS1yWzFdLG89KHRbMF0tclswXSkqYS1pKih0WzFdLXJbMV0pLHM9KGVbMF0tclswXSkqYS1pKihlWzFdLXJbMV0pO3JldHVybiBvPjAmJnM8MHx8bzwwJiZzPjB9ZnVuY3Rpb24gTWUodCxlLHIpe2Zvcih2YXIgbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpZm9yKHZhciBhPWlbbl0sbz0wO288YS5sZW5ndGgtMTsrK28paWYoMCE9KGg9Wyh1PWFbbysxXSlbMF0tKGM9YVtvXSlbMF0sdVsxXS1jWzFdXSlbMF0qKGY9WyhsPWUpWzBdLShzPXQpWzBdLGxbMV0tc1sxXV0pWzFdLWhbMV0qZlswXSYma2UocyxsLGMsdSkmJmtlKGMsdSxzLGwpKXJldHVybiEwO3ZhciBzLGwsYyx1LGgsZjtyZXR1cm4hMX1mdW5jdGlvbiBBZSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKCF3ZSh0W3JdLGUpKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGgtMTsrK24paWYoTWUodFtuXSx0W24rMV0sZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gU2UodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihBZSh0LGVbcl0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEVlKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9W10sbz0wO288dFtpXS5sZW5ndGg7bysrKXt2YXIgcz1iZSh0W2ldW29dLHIpO3llKGUscyksYS5wdXNoKHMpfW4ucHVzaChhKX1yZXR1cm4gbn1mdW5jdGlvbiBDZSh0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9RWUodFtpXSxlLHIpO24ucHVzaChhKX1yZXR1cm4gbn1mdW5jdGlvbiBMZSh0LGUscixuKXtpZih0WzBdPHJbMF18fHRbMF0+clsyXSl7dmFyIGk9LjUqbixhPXRbMF0tclswXT5pPy1uOnJbMF0tdFswXT5pP246MDswPT09YSYmKGE9dFswXS1yWzJdPmk/LW46clsyXS10WzBdPmk/bjowKSx0WzBdKz1hfXllKGUsdCl9ZnVuY3Rpb24gUGUodCxlLHIsbil7Zm9yKHZhciBpPTgxOTIqTWF0aC5wb3coMixuLnopLGE9WzgxOTIqbi54LDgxOTIqbi55XSxvPVtdLHM9MCxsPXQ7czxsLmxlbmd0aDtzKz0xKWZvcih2YXIgYz0wLHU9bFtzXTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBoPXVbY10sZj1baC54K2FbMF0saC55K2FbMV1dO0xlKGYsZSxyLGkpLG8ucHVzaChmKX1yZXR1cm4gb31mdW5jdGlvbiBJZSh0LGUscixuKXtmb3IodmFyIGksYT04MTkyKk1hdGgucG93KDIsbi56KSxvPVs4MTkyKm4ueCw4MTkyKm4ueV0scz1bXSxsPTAsYz10O2w8Yy5sZW5ndGg7bCs9MSl7Zm9yKHZhciB1PVtdLGg9MCxmPWNbbF07aDxmLmxlbmd0aDtoKz0xKXt2YXIgcD1mW2hdLGQ9W3AueCtvWzBdLHAueStvWzFdXTt5ZShlLGQpLHUucHVzaChkKX1zLnB1c2godSl9aWYoZVsyXS1lWzBdPD1hLzIpeyhpPWUpWzBdPWlbMV09MS8wLGlbMl09aVszXT0tMS8wO2Zvcih2YXIgZz0wLG09cztnPG0ubGVuZ3RoO2crPTEpZm9yKHZhciB2PTAseT1tW2ddO3Y8eS5sZW5ndGg7dis9MSlMZSh5W3ZdLGUscixhKX1yZXR1cm4gc312ZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgb25lIGFyZ3VtZW50LiIpO3ZhciByPXRbMV07aWYoIm9iamVjdCIhPXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpKXJldHVybiBlLmVycm9yKCJDb2xsYXRvciBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LiIpO3ZhciBuPWUucGFyc2Uodm9pZCAwIT09clsiY2FzZS1zZW5zaXRpdmUiXSYmclsiY2FzZS1zZW5zaXRpdmUiXSwxLEZ0KTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1lLnBhcnNlKHZvaWQgMCE9PXJbImRpYWNyaXRpYy1zZW5zaXRpdmUiXSYmclsiZGlhY3JpdGljLXNlbnNpdGl2ZSJdLDEsRnQpO2lmKCFpKXJldHVybiBudWxsO3ZhciBhPW51bGw7cmV0dXJuIHIubG9jYWxlJiYhKGE9ZS5wYXJzZShyLmxvY2FsZSwxLFJ0KSk/bnVsbDpuZXcgdmUobixpLGEpfSx2ZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBRdCh0aGlzLmNhc2VTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5sb2NhbGU/dGhpcy5sb2NhbGUuZXZhbHVhdGUodCk6bnVsbCl9LHZlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmNhc2VTZW5zaXRpdmUpLHQodGhpcy5kaWFjcml0aWNTZW5zaXRpdmUpLHRoaXMubG9jYWxlJiZ0KHRoaXMubG9jYWxlKX0sdmUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdmUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0WyJjYXNlLXNlbnNpdGl2ZSJdPXRoaXMuY2FzZVNlbnNpdGl2ZS5zZXJpYWxpemUoKSx0WyJkaWFjcml0aWMtc2Vuc2l0aXZlIl09dGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuc2VyaWFsaXplKCksdGhpcy5sb2NhbGUmJih0LmxvY2FsZT10aGlzLmxvY2FsZS5zZXJpYWxpemUoKSksWyJjb2xsYXRvciIsdF19O3ZhciB6ZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1GdCx0aGlzLmdlb2pzb249dCx0aGlzLmdlb21ldHJpZXM9ZX07ZnVuY3Rpb24gT2UodCl7aWYodCBpbnN0YW5jZW9mIG1lKXtpZigiZ2V0Ij09PXQubmFtZSYmMT09PXQuYXJncy5sZW5ndGgpcmV0dXJuITE7aWYoImZlYXR1cmUtc3RhdGUiPT09dC5uYW1lKXJldHVybiExO2lmKCJoYXMiPT09dC5uYW1lJiYxPT09dC5hcmdzLmxlbmd0aClyZXR1cm4hMTtpZigicHJvcGVydGllcyI9PT10Lm5hbWV8fCJnZW9tZXRyeS10eXBlIj09PXQubmFtZXx8ImlkIj09PXQubmFtZSlyZXR1cm4hMTtpZigvXmZpbHRlci0vLnRlc3QodC5uYW1lKSlyZXR1cm4hMX1pZih0IGluc3RhbmNlb2YgemUpcmV0dXJuITE7dmFyIGU9ITA7cmV0dXJuIHQuZWFjaENoaWxkKChmdW5jdGlvbih0KXtlJiYhT2UodCkmJihlPSExKX0pKSxlfWZ1bmN0aW9uIERlKHQpe2lmKHQgaW5zdGFuY2VvZiBtZSYmImZlYXR1cmUtc3RhdGUiPT09dC5uYW1lKXJldHVybiExO3ZhciBlPSEwO3JldHVybiB0LmVhY2hDaGlsZCgoZnVuY3Rpb24odCl7ZSYmIURlKHQpJiYoZT0hMSl9KSksZX1mdW5jdGlvbiBSZSh0LGUpe2lmKHQgaW5zdGFuY2VvZiBtZSYmZS5pbmRleE9mKHQubmFtZSk+PTApcmV0dXJuITE7dmFyIHI9ITA7cmV0dXJuIHQuZWFjaENoaWxkKChmdW5jdGlvbih0KXtyJiYhUmUodCxlKSYmKHI9ITEpfSkpLHJ9emUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIid3aXRoaW4nIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7aWYobmUodFsxXSkpe3ZhciByPXRbMV07aWYoIkZlYXR1cmVDb2xsZWN0aW9uIj09PXIudHlwZSlmb3IodmFyIG49MDtuPHIuZmVhdHVyZXMubGVuZ3RoOysrbil7dmFyIGk9ci5mZWF0dXJlc1tuXS5nZW9tZXRyeS50eXBlO2lmKCJQb2x5Z29uIj09PWl8fCJNdWx0aVBvbHlnb24iPT09aSlyZXR1cm4gbmV3IHplKHIsci5mZWF0dXJlc1tuXS5nZW9tZXRyeSl9ZWxzZSBpZigiRmVhdHVyZSI9PT1yLnR5cGUpe3ZhciBhPXIuZ2VvbWV0cnkudHlwZTtpZigiUG9seWdvbiI9PT1hfHwiTXVsdGlQb2x5Z29uIj09PWEpcmV0dXJuIG5ldyB6ZShyLHIuZ2VvbWV0cnkpfWVsc2UgaWYoIlBvbHlnb24iPT09ci50eXBlfHwiTXVsdGlQb2x5Z29uIj09PXIudHlwZSlyZXR1cm4gbmV3IHplKHIscil9cmV0dXJuIGUuZXJyb3IoIid3aXRoaW4nIGV4cHJlc3Npb24gcmVxdWlyZXMgdmFsaWQgZ2VvanNvbiBvYmplY3QgdGhhdCBjb250YWlucyBwb2x5Z29uIGdlb21ldHJ5IHR5cGUuIil9LHplLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtpZihudWxsIT10Lmdlb21ldHJ5KCkmJm51bGwhPXQuY2Fub25pY2FsSUQoKSl7aWYoIlBvaW50Ij09PXQuZ2VvbWV0cnlUeXBlKCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9WzEvMCwxLzAsLTEvMCwtMS8wXSxuPVsxLzAsMS8wLC0xLzAsLTEvMF0saT10LmNhbm9uaWNhbElEKCk7aWYoIlBvbHlnb24iPT09ZS50eXBlKXt2YXIgYT1FZShlLmNvb3JkaW5hdGVzLG4saSksbz1QZSh0Lmdlb21ldHJ5KCkscixuLGkpO2lmKCF4ZShyLG4pKXJldHVybiExO2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpaWYoIXdlKGxbc10sYSkpcmV0dXJuITF9aWYoIk11bHRpUG9seWdvbiI9PT1lLnR5cGUpe3ZhciBjPUNlKGUuY29vcmRpbmF0ZXMsbixpKSx1PVBlKHQuZ2VvbWV0cnkoKSxyLG4saSk7aWYoIXhlKHIsbikpcmV0dXJuITE7Zm9yKHZhciBoPTAsZj11O2g8Zi5sZW5ndGg7aCs9MSlpZighVGUoZltoXSxjKSlyZXR1cm4hMX1yZXR1cm4hMH0odCx0aGlzLmdlb21ldHJpZXMpO2lmKCJMaW5lU3RyaW5nIj09PXQuZ2VvbWV0cnlUeXBlKCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9WzEvMCwxLzAsLTEvMCwtMS8wXSxuPVsxLzAsMS8wLC0xLzAsLTEvMF0saT10LmNhbm9uaWNhbElEKCk7aWYoIlBvbHlnb24iPT09ZS50eXBlKXt2YXIgYT1FZShlLmNvb3JkaW5hdGVzLG4saSksbz1JZSh0Lmdlb21ldHJ5KCkscixuLGkpO2lmKCF4ZShyLG4pKXJldHVybiExO2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpaWYoIUFlKGxbc10sYSkpcmV0dXJuITF9aWYoIk11bHRpUG9seWdvbiI9PT1lLnR5cGUpe3ZhciBjPUNlKGUuY29vcmRpbmF0ZXMsbixpKSx1PUllKHQuZ2VvbWV0cnkoKSxyLG4saSk7aWYoIXhlKHIsbikpcmV0dXJuITE7Zm9yKHZhciBoPTAsZj11O2g8Zi5sZW5ndGg7aCs9MSlpZighU2UoZltoXSxjKSlyZXR1cm4hMX1yZXR1cm4hMH0odCx0aGlzLmdlb21ldHJpZXMpfXJldHVybiExfSx6ZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKCl7fSx6ZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiEwfSx6ZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuWyJ3aXRoaW4iLHRoaXMuZ2VvanNvbl19O3ZhciBGZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1lLnR5cGUsdGhpcy5uYW1lPXQsdGhpcy5ib3VuZEV4cHJlc3Npb249ZX07RmUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGh8fCJzdHJpbmciIT10eXBlb2YgdFsxXSlyZXR1cm4gZS5lcnJvcigiJ3ZhcicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBzdHJpbmcgbGl0ZXJhbCBhcmd1bWVudC4iKTt2YXIgcj10WzFdO3JldHVybiBlLnNjb3BlLmhhcyhyKT9uZXcgRmUocixlLnNjb3BlLmdldChyKSk6ZS5lcnJvcignVW5rbm93biB2YXJpYWJsZSAiJytyKyciLiBNYWtlIHN1cmUgIicrcisnIiBoYXMgYmVlbiBib3VuZCBpbiBhbiBlbmNsb3NpbmcgImxldCIgZXhwcmVzc2lvbiBiZWZvcmUgdXNpbmcgaXQuJywxKX0sRmUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJvdW5kRXhwcmVzc2lvbi5ldmFsdWF0ZSh0KX0sRmUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30sRmUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRmUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsidmFyIix0aGlzLm5hbWVdfTt2YXIgQmU9ZnVuY3Rpb24odCxlLHIsbixpKXt2b2lkIDA9PT1lJiYoZT1bXSksdm9pZCAwPT09biYmKG49bmV3IHp0KSx2b2lkIDA9PT1pJiYoaT1bXSksdGhpcy5yZWdpc3RyeT10LHRoaXMucGF0aD1lLHRoaXMua2V5PWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iWyIrdCsiXSJ9KSkuam9pbigiIiksdGhpcy5zY29wZT1uLHRoaXMuZXJyb3JzPWksdGhpcy5leHBlY3RlZFR5cGU9cn07ZnVuY3Rpb24gTmUodCxlKXtmb3IodmFyIHIsbj10Lmxlbmd0aC0xLGk9MCxhPW4sbz0wO2k8PWE7KWlmKChyPXRbbz1NYXRoLmZsb29yKChpK2EpLzIpXSk8PWUpe2lmKG89PT1ufHxlPHRbbysxXSlyZXR1cm4gbztpPW8rMX1lbHNle2lmKCEocj5lKSl0aHJvdyBuZXcgc2UoIklucHV0IGlzIG5vdCBhIG51bWJlci4iKTthPW8tMX1yZXR1cm4gMH1CZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30pLGU/dGhpcy5jb25jYXQoZSxyLG4pLl9wYXJzZSh0LGkpOnRoaXMuX3BhcnNlKHQsaSl9LEJlLnByb3RvdHlwZS5fcGFyc2U9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4iYXNzZXJ0Ij09PXI/bmV3IGNlKGUsW3RdKToiY29lcmNlIj09PXI/bmV3IHBlKGUsW3RdKTp0fWlmKG51bGwhPT10JiYic3RyaW5nIiE9dHlwZW9mIHQmJiJib29sZWFuIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdHx8KHQ9WyJsaXRlcmFsIix0XSksQXJyYXkuaXNBcnJheSh0KSl7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVycm9yKCdFeHBlY3RlZCBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFsibGl0ZXJhbCIsIFtdXS4nKTt2YXIgbj10WzBdO2lmKCJzdHJpbmciIT10eXBlb2YgbilyZXR1cm4gdGhpcy5lcnJvcigiRXhwcmVzc2lvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCBmb3VuZCAiK3R5cGVvZiBuKycgaW5zdGVhZC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbLi4uXV0uJywwKSxudWxsO3ZhciBpPXRoaXMucmVnaXN0cnlbbl07aWYoaSl7dmFyIGE9aS5wYXJzZSh0LHRoaXMpO2lmKCFhKXJldHVybiBudWxsO2lmKHRoaXMuZXhwZWN0ZWRUeXBlKXt2YXIgbz10aGlzLmV4cGVjdGVkVHlwZSxzPWEudHlwZTtpZigic3RyaW5nIiE9PW8ua2luZCYmIm51bWJlciIhPT1vLmtpbmQmJiJib29sZWFuIiE9PW8ua2luZCYmIm9iamVjdCIhPT1vLmtpbmQmJiJhcnJheSIhPT1vLmtpbmR8fCJ2YWx1ZSIhPT1zLmtpbmQpaWYoImNvbG9yIiE9PW8ua2luZCYmImZvcm1hdHRlZCIhPT1vLmtpbmQmJiJyZXNvbHZlZEltYWdlIiE9PW8ua2luZHx8InZhbHVlIiE9PXMua2luZCYmInN0cmluZyIhPT1zLmtpbmQpe2lmKHRoaXMuY2hlY2tTdWJ0eXBlKG8scykpcmV0dXJuIG51bGx9ZWxzZSBhPXIoYSxvLGUudHlwZUFubm90YXRpb258fCJjb2VyY2UiKTtlbHNlIGE9cihhLG8sZS50eXBlQW5ub3RhdGlvbnx8ImFzc2VydCIpfWlmKCEoYSBpbnN0YW5jZW9mIG9lKSYmInJlc29sdmVkSW1hZ2UiIT09YS50eXBlLmtpbmQmJmZ1bmN0aW9uIHQoZSl7aWYoZSBpbnN0YW5jZW9mIEZlKXJldHVybiB0KGUuYm91bmRFeHByZXNzaW9uKTtpZihlIGluc3RhbmNlb2YgbWUmJiJlcnJvciI9PT1lLm5hbWUpcmV0dXJuITE7aWYoZSBpbnN0YW5jZW9mIHZlKXJldHVybiExO2lmKGUgaW5zdGFuY2VvZiB6ZSlyZXR1cm4hMTt2YXIgcj1lIGluc3RhbmNlb2YgcGV8fGUgaW5zdGFuY2VvZiBjZSxuPSEwO3JldHVybiBlLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7bj1yP24mJnQoZSk6biYmZSBpbnN0YW5jZW9mIG9lfSkpLCEhbiYmT2UoZSkmJlJlKGUsWyJ6b29tIiwiaGVhdG1hcC1kZW5zaXR5IiwibGluZS1wcm9ncmVzcyIsImFjY3VtdWxhdGVkIiwiaXMtc3VwcG9ydGVkLXNjcmlwdCJdKX0oYSkpe3ZhciBsPW5ldyBnZTt0cnl7YT1uZXcgb2UoYS50eXBlLGEuZXZhbHVhdGUobCkpfWNhdGNoKHQpe3JldHVybiB0aGlzLmVycm9yKHQubWVzc2FnZSksbnVsbH19cmV0dXJuIGF9cmV0dXJuIHRoaXMuZXJyb3IoJ1Vua25vd24gZXhwcmVzc2lvbiAiJytuKyciLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFsibGl0ZXJhbCIsIFsuLi5dXS4nLDApfXJldHVybiB0aGlzLmVycm9yKHZvaWQgMD09PXQ/Iid1bmRlZmluZWQnIHZhbHVlIGludmFsaWQuIFVzZSBudWxsIGluc3RlYWQuIjoib2JqZWN0Ij09dHlwZW9mIHQ/J0JhcmUgb2JqZWN0cyBpbnZhbGlkLiBVc2UgWyJsaXRlcmFsIiwgey4uLn1dIGluc3RlYWQuJzoiRXhwZWN0ZWQgYW4gYXJyYXksIGJ1dCBmb3VuZCAiK3R5cGVvZiB0KyIgaW5zdGVhZC4iKX0sQmUucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbih0LGUscil7dmFyIG49Im51bWJlciI9PXR5cGVvZiB0P3RoaXMucGF0aC5jb25jYXQodCk6dGhpcy5wYXRoLGk9cj90aGlzLnNjb3BlLmNvbmNhdChyKTp0aGlzLnNjb3BlO3JldHVybiBuZXcgQmUodGhpcy5yZWdpc3RyeSxuLGV8fG51bGwsaSx0aGlzLmVycm9ycyl9LEJlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO3ZhciBuPSIiK3RoaXMua2V5K2UubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iWyIrdCsiXSJ9KSkuam9pbigiIik7dGhpcy5lcnJvcnMucHVzaChuZXcgSXQobix0KSl9LEJlLnByb3RvdHlwZS5jaGVja1N1YnR5cGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1XdCh0LGUpO3JldHVybiByJiZ0aGlzLmVycm9yKHIpLHJ9O3ZhciBqZT1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5pbnB1dD1lLHRoaXMubGFiZWxzPVtdLHRoaXMub3V0cHV0cz1bXTtmb3IodmFyIG49MCxpPXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YVsxXTt0aGlzLmxhYmVscy5wdXNoKGFbMF0pLHRoaXMub3V0cHV0cy5wdXNoKG8pfX07ZnVuY3Rpb24gVWUodCxlLHIpe3JldHVybiB0KigxLXIpK2Uqcn1qZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoLTE8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYoKHQubGVuZ3RoLTEpJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxEdCk7aWYoIXIpcmV0dXJuIG51bGw7dmFyIG49W10saT1udWxsO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGk9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgYT0xO2E8dC5sZW5ndGg7YSs9Mil7dmFyIG89MT09PWE/LTEvMDp0W2FdLHM9dFthKzFdLGw9YSxjPWErMTtpZigibnVtYmVyIiE9dHlwZW9mIG8pcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsbCk7aWYobi5sZW5ndGgmJm5bbi5sZW5ndGgtMV1bMF0+PW8pcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsbCk7dmFyIHU9ZS5wYXJzZShzLGMsaSk7aWYoIXUpcmV0dXJuIG51bGw7aT1pfHx1LnR5cGUsbi5wdXNoKFtvLHVdKX1yZXR1cm4gbmV3IGplKGkscixuKX0samUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFiZWxzLHI9dGhpcy5vdXRwdXRzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgbj10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKG48PWVbMF0pcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIGk9ZS5sZW5ndGg7cmV0dXJuIG4+PWVbaS0xXT9yW2ktMV0uZXZhbHVhdGUodCk6cltOZShlLG4pXS5ldmFsdWF0ZSh0KX0samUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV0pfSxqZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm91dHB1dHMuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKX0samUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bInN0ZXAiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLGU9MDtlPHRoaXMubGFiZWxzLmxlbmd0aDtlKyspZT4wJiZ0LnB1c2godGhpcy5sYWJlbHNbZV0pLHQucHVzaCh0aGlzLm91dHB1dHNbZV0uc2VyaWFsaXplKCkpO3JldHVybiB0fTt2YXIgVmU9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsbnVtYmVyOlVlLGNvbG9yOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IEt0KFVlKHQucixlLnIsciksVWUodC5nLGUuZyxyKSxVZSh0LmIsZS5iLHIpLFVlKHQuYSxlLmEscikpfSxhcnJheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0LG4pe3JldHVybiBVZSh0LGVbbl0scil9KSl9fSkscWU9Ni8yOSozKig2LzI5KSxIZT1NYXRoLlBJLzE4MCxHZT0xODAvTWF0aC5QSTtmdW5jdGlvbiBZZSh0KXtyZXR1cm4gdD4uMDA4ODU2NDUxNjc5MDM1NjMxP01hdGgucG93KHQsMS8zKTp0L3FlKzQvMjl9ZnVuY3Rpb24gV2UodCl7cmV0dXJuIHQ+Ni8yOT90KnQqdDpxZSoodC00LzI5KX1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFhlKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIEplKHQpe3ZhciBlPVhlKHQucikscj1YZSh0LmcpLG49WGUodC5iKSxpPVllKCguNDEyNDU2NCplKy4zNTc1NzYxKnIrLjE4MDQzNzUqbikvLjk1MDQ3KSxhPVllKCguMjEyNjcyOSplKy43MTUxNTIyKnIrLjA3MjE3NSpuKS8xKTtyZXR1cm57bDoxMTYqYS0xNixhOjUwMCooaS1hKSxiOjIwMCooYS1ZZSgoLjAxOTMzMzkqZSsuMTE5MTkyKnIrLjk1MDMwNDEqbikvMS4wODg4MykpLGFscGhhOnQuYX19ZnVuY3Rpb24gS2UodCl7dmFyIGU9KHQubCsxNikvMTE2LHI9aXNOYU4odC5hKT9lOmUrdC5hLzUwMCxuPWlzTmFOKHQuYik/ZTplLXQuYi8yMDA7cmV0dXJuIGU9MSpXZShlKSxyPS45NTA0NypXZShyKSxuPTEuMDg4ODMqV2UobiksbmV3IEt0KFplKDMuMjQwNDU0MipyLTEuNTM3MTM4NSplLS40OTg1MzE0Km4pLFplKC0uOTY5MjY2KnIrMS44NzYwMTA4KmUrLjA0MTU1NipuKSxaZSguMDU1NjQzNCpyLS4yMDQwMjU5KmUrMS4wNTcyMjUyKm4pLHQuYWxwaGEpfWZ1bmN0aW9uIFFlKHQsZSxyKXt2YXIgbj1lLXQ7cmV0dXJuIHQrcioobj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKX12YXIgJGU9e2ZvcndhcmQ6SmUscmV2ZXJzZTpLZSxpbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJue2w6VWUodC5sLGUubCxyKSxhOlVlKHQuYSxlLmEsciksYjpVZSh0LmIsZS5iLHIpLGFscGhhOlVlKHQuYWxwaGEsZS5hbHBoYSxyKX19fSx0cj17Zm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgZT1KZSh0KSxyPWUubCxuPWUuYSxpPWUuYixhPU1hdGguYXRhbjIoaSxuKSpHZTtyZXR1cm57aDphPDA/YSszNjA6YSxjOk1hdGguc3FydChuKm4raSppKSxsOnIsYWxwaGE6dC5hfX0scmV2ZXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmgqSGUscj10LmM7cmV0dXJuIEtlKHtsOnQubCxhOk1hdGguY29zKGUpKnIsYjpNYXRoLnNpbihlKSpyLGFscGhhOnQuYWxwaGF9KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybntoOlFlKHQuaCxlLmgsciksYzpVZSh0LmMsZS5jLHIpLGw6VWUodC5sLGUubCxyKSxhbHBoYTpVZSh0LmFscGhhLGUuYWxwaGEscil9fX0sZXI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsbGFiOiRlLGhjbDp0cn0pLHJyPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50eXBlPXQsdGhpcy5vcGVyYXRvcj1lLHRoaXMuaW50ZXJwb2xhdGlvbj1yLHRoaXMuaW5wdXQ9bix0aGlzLmxhYmVscz1bXSx0aGlzLm91dHB1dHM9W107Zm9yKHZhciBhPTAsbz1pO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXNbMV07dGhpcy5sYWJlbHMucHVzaChzWzBdKSx0aGlzLm91dHB1dHMucHVzaChsKX19O2Z1bmN0aW9uIG5yKHQsZSxyLG4pe3ZhciBpPW4tcixhPXQtcjtyZXR1cm4gMD09PWk/MDoxPT09ZT9hL2k6KE1hdGgucG93KGUsYSktMSkvKE1hdGgucG93KGUsaSktMSl9cnIuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0LGUsbixpKXt2YXIgYT0wO2lmKCJleHBvbmVudGlhbCI9PT10Lm5hbWUpYT1ucihlLHQuYmFzZSxuLGkpO2Vsc2UgaWYoImxpbmVhciI9PT10Lm5hbWUpYT1ucihlLDEsbixpKTtlbHNlIGlmKCJjdWJpYy1iZXppZXIiPT09dC5uYW1lKXt2YXIgbz10LmNvbnRyb2xQb2ludHM7YT1uZXcgcihvWzBdLG9bMV0sb1syXSxvWzNdKS5zb2x2ZShucihlLDEsbixpKSl9cmV0dXJuIGF9LHJyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dC5zbGljZSgzKTtpZighQXJyYXkuaXNBcnJheShuKXx8MD09PW4ubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBpbnRlcnBvbGF0aW9uIHR5cGUgZXhwcmVzc2lvbi4iLDEpO2lmKCJsaW5lYXIiPT09blswXSluPXtuYW1lOiJsaW5lYXIifTtlbHNlIGlmKCJleHBvbmVudGlhbCI9PT1uWzBdKXt2YXIgbz1uWzFdO2lmKCJudW1iZXIiIT10eXBlb2YgbylyZXR1cm4gZS5lcnJvcigiRXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBhIG51bWVyaWMgYmFzZS4iLDEsMSk7bj17bmFtZToiZXhwb25lbnRpYWwiLGJhc2U6b319ZWxzZXtpZigiY3ViaWMtYmV6aWVyIiE9PW5bMF0pcmV0dXJuIGUuZXJyb3IoIlVua25vd24gaW50ZXJwb2xhdGlvbiB0eXBlICIrU3RyaW5nKG5bMF0pLDEsMCk7dmFyIHM9bi5zbGljZSgxKTtpZig0IT09cy5sZW5ndGh8fHMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQ+MX0pKSlyZXR1cm4gZS5lcnJvcigiQ3ViaWMgYmV6aWVyIGludGVycG9sYXRpb24gcmVxdWlyZXMgZm91ciBudW1lcmljIGFyZ3VtZW50cyB3aXRoIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEuIiwxKTtuPXtuYW1lOiJjdWJpYy1iZXppZXIiLGNvbnRyb2xQb2ludHM6c319aWYodC5sZW5ndGgtMTw0KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgIisodC5sZW5ndGgtMSkrIi4iKTtpZigodC5sZW5ndGgtMSklMiE9MClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO2lmKCEoaT1lLnBhcnNlKGksMixEdCkpKXJldHVybiBudWxsO3ZhciBsPVtdLGM9bnVsbDsiaW50ZXJwb2xhdGUtaGNsIj09PXJ8fCJpbnRlcnBvbGF0ZS1sYWIiPT09cj9jPUJ0OmUuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGM9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSs9Mil7dmFyIGg9YVt1XSxmPWFbdSsxXSxwPXUrMyxkPXUrNDtpZigibnVtYmVyIiE9dHlwZW9mIGgpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgImludGVycG9sYXRlIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLHApO2lmKGwubGVuZ3RoJiZsW2wubGVuZ3RoLTFdWzBdPj1oKXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJyxwKTt2YXIgZz1lLnBhcnNlKGYsZCxjKTtpZighZylyZXR1cm4gbnVsbDtjPWN8fGcudHlwZSxsLnB1c2goW2gsZ10pfXJldHVybiJudW1iZXIiPT09Yy5raW5kfHwiY29sb3IiPT09Yy5raW5kfHwiYXJyYXkiPT09Yy5raW5kJiYibnVtYmVyIj09PWMuaXRlbVR5cGUua2luZCYmIm51bWJlciI9PXR5cGVvZiBjLk4/bmV3IHJyKGMscixuLGksbCk6ZS5lcnJvcigiVHlwZSAiK0d0KGMpKyIgaXMgbm90IGludGVycG9sYXRhYmxlLiIpfSxyci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYWJlbHMscj10aGlzLm91dHB1dHM7aWYoMT09PWUubGVuZ3RoKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBuPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYobjw9ZVswXSlyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgaT1lLmxlbmd0aDtpZihuPj1lW2ktMV0pcmV0dXJuIHJbaS0xXS5ldmFsdWF0ZSh0KTt2YXIgYT1OZShlLG4pLG89cnIuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb24sbixlW2FdLGVbYSsxXSkscz1yW2FdLmV2YWx1YXRlKHQpLGw9clthKzFdLmV2YWx1YXRlKHQpO3JldHVybiJpbnRlcnBvbGF0ZSI9PT10aGlzLm9wZXJhdG9yP1ZlW3RoaXMudHlwZS5raW5kLnRvTG93ZXJDYXNlKCldKHMsbCxvKToiaW50ZXJwb2xhdGUtaGNsIj09PXRoaXMub3BlcmF0b3I/dHIucmV2ZXJzZSh0ci5pbnRlcnBvbGF0ZSh0ci5mb3J3YXJkKHMpLHRyLmZvcndhcmQobCksbykpOiRlLnJldmVyc2UoJGUuaW50ZXJwb2xhdGUoJGUuZm9yd2FyZChzKSwkZS5mb3J3YXJkKGwpLG8pKX0scnIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV0pfSxyci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm91dHB1dHMuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKX0scnIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0O3Q9ImxpbmVhciI9PT10aGlzLmludGVycG9sYXRpb24ubmFtZT9bImxpbmVhciJdOiJleHBvbmVudGlhbCI9PT10aGlzLmludGVycG9sYXRpb24ubmFtZT8xPT09dGhpcy5pbnRlcnBvbGF0aW9uLmJhc2U/WyJsaW5lYXIiXTpbImV4cG9uZW50aWFsIix0aGlzLmludGVycG9sYXRpb24uYmFzZV06WyJjdWJpYy1iZXppZXIiXS5jb25jYXQodGhpcy5pbnRlcnBvbGF0aW9uLmNvbnRyb2xQb2ludHMpO2Zvcih2YXIgZT1bdGhpcy5vcGVyYXRvcix0LHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLHI9MDtyPHRoaXMubGFiZWxzLmxlbmd0aDtyKyspZS5wdXNoKHRoaXMubGFiZWxzW3JdLHRoaXMub3V0cHV0c1tyXS5zZXJpYWxpemUoKSk7cmV0dXJuIGV9O3ZhciBpcj1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtpci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTt2YXIgcj1udWxsLG49ZS5leHBlY3RlZFR5cGU7biYmInZhbHVlIiE9PW4ua2luZCYmKHI9bik7Zm9yKHZhciBpPVtdLGE9MCxvPXQuc2xpY2UoMSk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1lLnBhcnNlKG9bYV0sMStpLmxlbmd0aCxyLHZvaWQgMCx7dHlwZUFubm90YXRpb246Im9taXQifSk7aWYoIXMpcmV0dXJuIG51bGw7cj1yfHxzLnR5cGUsaS5wdXNoKHMpfXZhciBsPW4mJmkuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIFd0KG4sdC50eXBlKX0pKTtyZXR1cm4gbmV3IGlyKGw/anQ6cixpKX0saXIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPW51bGwsbj0wLGk9MCxhPXRoaXMuYXJncztpPGEubGVuZ3RoJiYobisrLChyPWFbaV0uZXZhbHVhdGUodCkpJiZyIGluc3RhbmNlb2YgZWUmJiFyLmF2YWlsYWJsZSYmKGV8fChlPXIubmFtZSkscj1udWxsLG49PT10aGlzLmFyZ3MubGVuZ3RoJiYocj1lKSksbnVsbD09PXIpO2krPTEpO3JldHVybiByfSxpci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxpci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZ3MuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKX0saXIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiY29hbGVzY2UiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pKSx0fTt2YXIgYXI9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9ZS50eXBlLHRoaXMuYmluZGluZ3M9W10uY29uY2F0KHQpLHRoaXMucmVzdWx0PWV9O2FyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXN1bHQuZXZhbHVhdGUodCl9LGFyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJpbmRpbmdzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV1bMV0pO3QodGhpcy5yZXN1bHQpfSxhci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2Zvcih2YXIgcj1bXSxuPTE7bjx0Lmxlbmd0aC0xO24rPTIpe3ZhciBpPXRbbl07aWYoInN0cmluZyIhPXR5cGVvZiBpKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBzdHJpbmcsIGJ1dCBmb3VuZCAiK3R5cGVvZiBpKyIgaW5zdGVhZC4iLG4pO2lmKC9bXmEtekEtWjAtOV9dLy50ZXN0KGkpKXJldHVybiBlLmVycm9yKCJWYXJpYWJsZSBuYW1lcyBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciAnXycuIixuKTt2YXIgYT1lLnBhcnNlKHRbbisxXSxuKzEpO2lmKCFhKXJldHVybiBudWxsO3IucHVzaChbaSxhXSl9dmFyIG89ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEsZS5leHBlY3RlZFR5cGUscik7cmV0dXJuIG8/bmV3IGFyKHIsbyk6bnVsbH0sYXIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXN1bHQub3V0cHV0RGVmaW5lZCgpfSxhci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsibGV0Il0sZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07dC5wdXNoKG5bMF0sblsxXS5zZXJpYWxpemUoKSl9cmV0dXJuIHQucHVzaCh0aGlzLnJlc3VsdC5zZXJpYWxpemUoKSksdH07dmFyIG9yPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9dCx0aGlzLmluZGV4PWUsdGhpcy5pbnB1dD1yfTtvci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMiBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsRHQpLG49ZS5wYXJzZSh0WzJdLDIsSHQoZS5leHBlY3RlZFR5cGV8fGp0KSk7cmV0dXJuIHImJm4/bmV3IG9yKG4udHlwZS5pdGVtVHlwZSxyLG4pOm51bGx9LG9yLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluZGV4LmV2YWx1YXRlKHQpLHI9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihlPDApdGhyb3cgbmV3IHNlKCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAiK2UrIiA8IDAuIik7aWYoZT49ci5sZW5ndGgpdGhyb3cgbmV3IHNlKCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAiK2UrIiA+ICIrKHIubGVuZ3RoLTEpKyIuIik7aWYoZSE9PU1hdGguZmxvb3IoZSkpdGhyb3cgbmV3IHNlKCJBcnJheSBpbmRleCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBmb3VuZCAiK2UrIiBpbnN0ZWFkLiIpO3JldHVybiByW2VdfSxvci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbmRleCksdCh0aGlzLmlucHV0KX0sb3IucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sb3IucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiYXQiLHRoaXMuaW5kZXguc2VyaWFsaXplKCksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV19O3ZhciBzcj1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1GdCx0aGlzLm5lZWRsZT10LHRoaXMuaGF5c3RhY2s9ZX07c3IucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLGp0KSxuPWUucGFyc2UodFsyXSwyLGp0KTtyZXR1cm4gciYmbj9adChyLnR5cGUsW0Z0LFJ0LER0LE90LGp0XSk/bmV3IHNyKHIsbik6ZS5lcnJvcigiRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBib29sZWFuLCBzdHJpbmcsIG51bWJlciBvciBudWxsLCBidXQgZm91bmQgIitHdChyLnR5cGUpKyIgaW5zdGVhZCIpOm51bGx9LHNyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm5lZWRsZS5ldmFsdWF0ZSh0KSxyPXRoaXMuaGF5c3RhY2suZXZhbHVhdGUodCk7aWYoIXIpcmV0dXJuITE7aWYoIVh0KGUsWyJib29sZWFuIiwic3RyaW5nIiwibnVtYmVyIiwibnVsbCJdKSl0aHJvdyBuZXcgc2UoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICIrR3QoaWUoZSkpKyIgaW5zdGVhZC4iKTtpZighWHQocixbInN0cmluZyIsImFycmF5Il0pKXRocm93IG5ldyBzZSgiRXhwZWN0ZWQgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgIitHdChpZShyKSkrIiBpbnN0ZWFkLiIpO3JldHVybiByLmluZGV4T2YoZSk+PTB9LHNyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLm5lZWRsZSksdCh0aGlzLmhheXN0YWNrKX0sc3IucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sc3IucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiaW4iLHRoaXMubmVlZGxlLnNlcmlhbGl6ZSgpLHRoaXMuaGF5c3RhY2suc2VyaWFsaXplKCldfTt2YXIgbHI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT1EdCx0aGlzLm5lZWRsZT10LHRoaXMuaGF5c3RhY2s9ZSx0aGlzLmZyb21JbmRleD1yfTtsci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPD0yfHx0Lmxlbmd0aD49NSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMyBvciA0IGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxqdCksbj1lLnBhcnNlKHRbMl0sMixqdCk7aWYoIXJ8fCFuKXJldHVybiBudWxsO2lmKCFadChyLnR5cGUsW0Z0LFJ0LER0LE90LGp0XSkpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICIrR3Qoci50eXBlKSsiIGluc3RlYWQiKTtpZig0PT09dC5sZW5ndGgpe3ZhciBpPWUucGFyc2UodFszXSwzLER0KTtyZXR1cm4gaT9uZXcgbHIocixuLGkpOm51bGx9cmV0dXJuIG5ldyBscihyLG4pfSxsci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5uZWVkbGUuZXZhbHVhdGUodCkscj10aGlzLmhheXN0YWNrLmV2YWx1YXRlKHQpO2lmKCFYdChlLFsiYm9vbGVhbiIsInN0cmluZyIsIm51bWJlciIsIm51bGwiXSkpdGhyb3cgbmV3IHNlKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyIG9yIG51bGwsIGJ1dCBmb3VuZCAiK0d0KGllKGUpKSsiIGluc3RlYWQuIik7aWYoIVh0KHIsWyJzdHJpbmciLCJhcnJheSJdKSl0aHJvdyBuZXcgc2UoIkV4cGVjdGVkIHNlY29uZCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICIrR3QoaWUocikpKyIgaW5zdGVhZC4iKTtpZih0aGlzLmZyb21JbmRleCl7dmFyIG49dGhpcy5mcm9tSW5kZXguZXZhbHVhdGUodCk7cmV0dXJuIHIuaW5kZXhPZihlLG4pfXJldHVybiByLmluZGV4T2YoZSl9LGxyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLm5lZWRsZSksdCh0aGlzLmhheXN0YWNrKSx0aGlzLmZyb21JbmRleCYmdCh0aGlzLmZyb21JbmRleCl9LGxyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLmZyb21JbmRleCYmdm9pZCAwIT09dGhpcy5mcm9tSW5kZXgpe3ZhciB0PXRoaXMuZnJvbUluZGV4LnNlcmlhbGl6ZSgpO3JldHVyblsiaW5kZXgtb2YiLHRoaXMubmVlZGxlLnNlcmlhbGl6ZSgpLHRoaXMuaGF5c3RhY2suc2VyaWFsaXplKCksdF19cmV0dXJuWyJpbmRleC1vZiIsdGhpcy5uZWVkbGUuc2VyaWFsaXplKCksdGhpcy5oYXlzdGFjay5zZXJpYWxpemUoKV19O3ZhciBjcj1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5pbnB1dFR5cGU9dCx0aGlzLnR5cGU9ZSx0aGlzLmlucHV0PXIsdGhpcy5jYXNlcz1uLHRoaXMub3V0cHV0cz1pLHRoaXMub3RoZXJ3aXNlPWF9O2NyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYodC5sZW5ndGglMiE9MSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByLG47ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYobj1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBpPXt9LGE9W10sbz0yO288dC5sZW5ndGgtMTtvKz0yKXt2YXIgcz10W29dLGw9dFtvKzFdO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7dmFyIGM9ZS5jb25jYXQobyk7aWYoMD09PXMubGVuZ3RoKXJldHVybiBjLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYnJhbmNoIGxhYmVsLiIpO2Zvcih2YXIgdT0wLGg9czt1PGgubGVuZ3RoO3UrPTEpe3ZhciBmPWhbdV07aWYoIm51bWJlciIhPXR5cGVvZiBmJiYic3RyaW5nIiE9dHlwZW9mIGYpcmV0dXJuIGMuZXJyb3IoIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBudW1iZXJzIG9yIHN0cmluZ3MuIik7aWYoIm51bWJlciI9PXR5cGVvZiBmJiZNYXRoLmFicyhmKT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUilyZXR1cm4gYy5lcnJvcigiQnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXJzIG5vIGxhcmdlciB0aGFuICIrTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIrIi4iKTtpZigibnVtYmVyIj09dHlwZW9mIGYmJk1hdGguZmxvb3IoZikhPT1mKXJldHVybiBjLmVycm9yKCJOdW1lcmljIGJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VyIHZhbHVlcy4iKTtpZihyKXtpZihjLmNoZWNrU3VidHlwZShyLGllKGYpKSlyZXR1cm4gbnVsbH1lbHNlIHI9aWUoZik7aWYodm9pZCAwIT09aVtTdHJpbmcoZildKXJldHVybiBjLmVycm9yKCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgdW5pcXVlLiIpO2lbU3RyaW5nKGYpXT1hLmxlbmd0aH12YXIgcD1lLnBhcnNlKGwsbyxuKTtpZighcClyZXR1cm4gbnVsbDtuPW58fHAudHlwZSxhLnB1c2gocCl9dmFyIGQ9ZS5wYXJzZSh0WzFdLDEsanQpO2lmKCFkKXJldHVybiBudWxsO3ZhciBnPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLG4pO3JldHVybiBnPyJ2YWx1ZSIhPT1kLnR5cGUua2luZCYmZS5jb25jYXQoMSkuY2hlY2tTdWJ0eXBlKHIsZC50eXBlKT9udWxsOm5ldyBjcihyLG4sZCxpLGEsZyk6bnVsbH0sY3IucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7cmV0dXJuKGllKGUpPT09dGhpcy5pbnB1dFR5cGUmJnRoaXMub3V0cHV0c1t0aGlzLmNhc2VzW2VdXXx8dGhpcy5vdGhlcndpc2UpLmV2YWx1YXRlKHQpfSxjci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCksdGhpcy5vdXRwdXRzLmZvckVhY2godCksdCh0aGlzLm90aGVyd2lzZSl9LGNyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0cHV0cy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpJiZ0aGlzLm90aGVyd2lzZS5vdXRwdXREZWZpbmVkKCl9LGNyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVsibWF0Y2giLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLHI9W10sbj17fSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLmNhc2VzKS5zb3J0KCk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3ZvaWQgMD09PShoPW5bdGhpcy5jYXNlc1tvXV0pPyhuW3RoaXMuY2FzZXNbb11dPXIubGVuZ3RoLHIucHVzaChbdGhpcy5jYXNlc1tvXSxbb11dKSk6cltoXVsxXS5wdXNoKG8pfWZvcih2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09PXQuaW5wdXRUeXBlLmtpbmQ/TnVtYmVyKGUpOmV9LGw9MCxjPXI7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGg9dVswXSxmPXVbMV07ZS5wdXNoKDE9PT1mLmxlbmd0aD9zKGZbMF0pOmYubWFwKHMpKSxlLnB1c2godGhpcy5vdXRwdXRzW291dHB1dEluZGV4JDFdLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZS5wdXNoKHRoaXMub3RoZXJ3aXNlLnNlcmlhbGl6ZSgpKSxlfTt2YXIgdXI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuYnJhbmNoZXM9ZSx0aGlzLm90aGVyd2lzZT1yfTt1ci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKHQubGVuZ3RoJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKHI9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgbj1bXSxpPTE7aTx0Lmxlbmd0aC0xO2krPTIpe3ZhciBhPWUucGFyc2UodFtpXSxpLEZ0KTtpZighYSlyZXR1cm4gbnVsbDt2YXIgbz1lLnBhcnNlKHRbaSsxXSxpKzEscik7aWYoIW8pcmV0dXJuIG51bGw7bi5wdXNoKFthLG9dKSxyPXJ8fG8udHlwZX12YXIgcz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxyKTtyZXR1cm4gcz9uZXcgdXIocixuLHMpOm51bGx9LHVyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blsxXTtpZihuWzBdLmV2YWx1YXRlKHQpKXJldHVybiBpLmV2YWx1YXRlKHQpfXJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZSh0KX0sdXIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blsxXTt0KG5bMF0pLHQoaSl9dCh0aGlzLm90aGVyd2lzZSl9LHVyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnJhbmNoZXMuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzFdLm91dHB1dERlZmluZWQoKX0pKSYmdGhpcy5vdGhlcndpc2Uub3V0cHV0RGVmaW5lZCgpfSx1ci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9WyJjYXNlIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSksdH07dmFyIGhyPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHlwZT10LHRoaXMuaW5wdXQ9ZSx0aGlzLmJlZ2luSW5kZXg9cix0aGlzLmVuZEluZGV4PW59O2Z1bmN0aW9uIGZyKHQsZSl7cmV0dXJuIj09Ij09PXR8fCIhPSI9PT10PyJib29sZWFuIj09PWUua2luZHx8InN0cmluZyI9PT1lLmtpbmR8fCJudW1iZXIiPT09ZS5raW5kfHwibnVsbCI9PT1lLmtpbmR8fCJ2YWx1ZSI9PT1lLmtpbmQ6InN0cmluZyI9PT1lLmtpbmR8fCJudW1iZXIiPT09ZS5raW5kfHwidmFsdWUiPT09ZS5raW5kfWZ1bmN0aW9uIHByKHQsZSxyLG4pe3JldHVybiAwPT09bi5jb21wYXJlKGUscil9ZnVuY3Rpb24gZHIodCxlLHIpe3ZhciBuPSI9PSIhPT10JiYiIT0iIT09dDtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQsZSxyKXt0aGlzLnR5cGU9RnQsdGhpcy5saHM9dCx0aGlzLnJocz1lLHRoaXMuY29sbGF0b3I9cix0aGlzLmhhc1VudHlwZWRBcmd1bWVudD0idmFsdWUiPT09dC50eXBlLmtpbmR8fCJ2YWx1ZSI9PT1lLnR5cGUua2luZH1yZXR1cm4gaS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aCYmNCE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCB0d28gb3IgdGhyZWUgYXJndW1lbnRzLiIpO3ZhciByPXRbMF0sYT1lLnBhcnNlKHRbMV0sMSxqdCk7aWYoIWEpcmV0dXJuIG51bGw7aWYoIWZyKHIsYS50eXBlKSlyZXR1cm4gZS5jb25jYXQoMSkuZXJyb3IoJyInK3IrIlwiIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0eXBlICciK0d0KGEudHlwZSkrIicuIik7dmFyIG89ZS5wYXJzZSh0WzJdLDIsanQpO2lmKCFvKXJldHVybiBudWxsO2lmKCFmcihyLG8udHlwZSkpcmV0dXJuIGUuY29uY2F0KDIpLmVycm9yKCciJytyKyJcIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnIitHdChvLnR5cGUpKyInLiIpO2lmKGEudHlwZS5raW5kIT09by50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1hLnR5cGUua2luZCYmInZhbHVlIiE9PW8udHlwZS5raW5kKXJldHVybiBlLmVycm9yKCJDYW5ub3QgY29tcGFyZSB0eXBlcyAnIitHdChhLnR5cGUpKyInIGFuZCAnIitHdChvLnR5cGUpKyInLiIpO24mJigidmFsdWUiPT09YS50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1vLnR5cGUua2luZD9hPW5ldyBjZShvLnR5cGUsW2FdKToidmFsdWUiIT09YS50eXBlLmtpbmQmJiJ2YWx1ZSI9PT1vLnR5cGUua2luZCYmKG89bmV3IGNlKGEudHlwZSxbb10pKSk7dmFyIHM9bnVsbDtpZig0PT09dC5sZW5ndGgpe2lmKCJzdHJpbmciIT09YS50eXBlLmtpbmQmJiJzdHJpbmciIT09by50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1hLnR5cGUua2luZCYmInZhbHVlIiE9PW8udHlwZS5raW5kKXJldHVybiBlLmVycm9yKCJDYW5ub3QgdXNlIGNvbGxhdG9yIHRvIGNvbXBhcmUgbm9uLXN0cmluZyB0eXBlcy4iKTtpZighKHM9ZS5wYXJzZSh0WzNdLDMsVXQpKSlyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IGkoYSxvLHMpfSxpLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihpKXt2YXIgYT10aGlzLmxocy5ldmFsdWF0ZShpKSxvPXRoaXMucmhzLmV2YWx1YXRlKGkpO2lmKG4mJnRoaXMuaGFzVW50eXBlZEFyZ3VtZW50KXt2YXIgcz1pZShhKSxsPWllKG8pO2lmKHMua2luZCE9PWwua2luZHx8InN0cmluZyIhPT1zLmtpbmQmJiJudW1iZXIiIT09cy5raW5kKXRocm93IG5ldyBzZSgnRXhwZWN0ZWQgYXJndW1lbnRzIGZvciAiJyt0KyciIHRvIGJlIChzdHJpbmcsIHN0cmluZykgb3IgKG51bWJlciwgbnVtYmVyKSwgYnV0IGZvdW5kICgnK3Mua2luZCsiLCAiK2wua2luZCsiKSBpbnN0ZWFkLiIpfWlmKHRoaXMuY29sbGF0b3ImJiFuJiZ0aGlzLmhhc1VudHlwZWRBcmd1bWVudCl7dmFyIGM9aWUoYSksdT1pZShvKTtpZigic3RyaW5nIiE9PWMua2luZHx8InN0cmluZyIhPT11LmtpbmQpcmV0dXJuIGUoaSxhLG8pfXJldHVybiB0aGlzLmNvbGxhdG9yP3IoaSxhLG8sdGhpcy5jb2xsYXRvci5ldmFsdWF0ZShpKSk6ZShpLGEsbyl9LGkucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMubGhzKSx0KHRoaXMucmhzKSx0aGlzLmNvbGxhdG9yJiZ0KHRoaXMuY29sbGF0b3IpfSxpLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGkucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciBlPVt0XTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKHQpe2UucHVzaCh0LnNlcmlhbGl6ZSgpKX0pKSxlfSxpfSgpfWhyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8PTJ8fHQubGVuZ3RoPj01KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAzIG9yIDQgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLGp0KSxuPWUucGFyc2UodFsyXSwyLER0KTtpZighcnx8IW4pcmV0dXJuIG51bGw7aWYoIVp0KHIudHlwZSxbSHQoanQpLFJ0LGp0XSkpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgIitHdChyLnR5cGUpKyIgaW5zdGVhZCIpO2lmKDQ9PT10Lmxlbmd0aCl7dmFyIGk9ZS5wYXJzZSh0WzNdLDMsRHQpO3JldHVybiBpP25ldyBocihyLnR5cGUscixuLGkpOm51bGx9cmV0dXJuIG5ldyBocihyLnR5cGUscixuKX0saHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCkscj10aGlzLmJlZ2luSW5kZXguZXZhbHVhdGUodCk7aWYoIVh0KGUsWyJzdHJpbmciLCJhcnJheSJdKSl0aHJvdyBuZXcgc2UoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgIitHdChpZShlKSkrIiBpbnN0ZWFkLiIpO2lmKHRoaXMuZW5kSW5kZXgpe3ZhciBuPXRoaXMuZW5kSW5kZXguZXZhbHVhdGUodCk7cmV0dXJuIGUuc2xpY2UocixuKX1yZXR1cm4gZS5zbGljZShyKX0saHIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpLHQodGhpcy5iZWdpbkluZGV4KSx0aGlzLmVuZEluZGV4JiZ0KHRoaXMuZW5kSW5kZXgpfSxoci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxoci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5lbmRJbmRleCYmdm9pZCAwIT09dGhpcy5lbmRJbmRleCl7dmFyIHQ9dGhpcy5lbmRJbmRleC5zZXJpYWxpemUoKTtyZXR1cm5bInNsaWNlIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpLHRoaXMuYmVnaW5JbmRleC5zZXJpYWxpemUoKSx0XX1yZXR1cm5bInNsaWNlIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpLHRoaXMuYmVnaW5JbmRleC5zZXJpYWxpemUoKV19O3ZhciBncj1kcigiPT0iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU9PT1yfSkscHIpLG1yPWRyKCIhPSIsKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSE9PXJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIXByKDAsZSxyLG4pfSkpLHZyPWRyKCI8IiwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPHJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uY29tcGFyZShlLHIpPDB9KSkseXI9ZHIoIj4iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cn0pLChmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5jb21wYXJlKGUscik+MH0pKSx4cj1kcigiPD0iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU8PXJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uY29tcGFyZShlLHIpPD0wfSkpLGJyPWRyKCI+PSIsKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT49cn0pLChmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5jb21wYXJlKGUscik+PTB9KSksX3I9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnR5cGU9UnQsdGhpcy5udW1iZXI9dCx0aGlzLmxvY2FsZT1lLHRoaXMuY3VycmVuY3k9cix0aGlzLm1pbkZyYWN0aW9uRGlnaXRzPW4sdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cz1pfTtfci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cy4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxEdCk7aWYoIXIpcmV0dXJuIG51bGw7dmFyIG49dFsyXTtpZigib2JqZWN0IiE9dHlwZW9mIG58fEFycmF5LmlzQXJyYXkobikpcmV0dXJuIGUuZXJyb3IoIk51bWJlckZvcm1hdCBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LiIpO3ZhciBpPW51bGw7aWYobi5sb2NhbGUmJiEoaT1lLnBhcnNlKG4ubG9jYWxlLDEsUnQpKSlyZXR1cm4gbnVsbDt2YXIgYT1udWxsO2lmKG4uY3VycmVuY3kmJiEoYT1lLnBhcnNlKG4uY3VycmVuY3ksMSxSdCkpKXJldHVybiBudWxsO3ZhciBvPW51bGw7aWYoblsibWluLWZyYWN0aW9uLWRpZ2l0cyJdJiYhKG89ZS5wYXJzZShuWyJtaW4tZnJhY3Rpb24tZGlnaXRzIl0sMSxEdCkpKXJldHVybiBudWxsO3ZhciBzPW51bGw7cmV0dXJuIG5bIm1heC1mcmFjdGlvbi1kaWdpdHMiXSYmIShzPWUucGFyc2UoblsibWF4LWZyYWN0aW9uLWRpZ2l0cyJdLDEsRHQpKT9udWxsOm5ldyBfcihyLGksYSxvLHMpfSxfci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmxvY2FsZT90aGlzLmxvY2FsZS5ldmFsdWF0ZSh0KTpbXSx7c3R5bGU6dGhpcy5jdXJyZW5jeT8iY3VycmVuY3kiOiJkZWNpbWFsIixjdXJyZW5jeTp0aGlzLmN1cnJlbmN5P3RoaXMuY3VycmVuY3kuZXZhbHVhdGUodCk6dm9pZCAwLG1pbmltdW1GcmFjdGlvbkRpZ2l0czp0aGlzLm1pbkZyYWN0aW9uRGlnaXRzP3RoaXMubWluRnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUodCk6dm9pZCAwLG1heGltdW1GcmFjdGlvbkRpZ2l0czp0aGlzLm1heEZyYWN0aW9uRGlnaXRzP3RoaXMubWF4RnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUodCk6dm9pZCAwfSkuZm9ybWF0KHRoaXMubnVtYmVyLmV2YWx1YXRlKHQpKX0sX3IucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMubnVtYmVyKSx0aGlzLmxvY2FsZSYmdCh0aGlzLmxvY2FsZSksdGhpcy5jdXJyZW5jeSYmdCh0aGlzLmN1cnJlbmN5KSx0aGlzLm1pbkZyYWN0aW9uRGlnaXRzJiZ0KHRoaXMubWluRnJhY3Rpb25EaWdpdHMpLHRoaXMubWF4RnJhY3Rpb25EaWdpdHMmJnQodGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyl9LF9yLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LF9yLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5sb2NhbGUmJih0LmxvY2FsZT10aGlzLmxvY2FsZS5zZXJpYWxpemUoKSksdGhpcy5jdXJyZW5jeSYmKHQuY3VycmVuY3k9dGhpcy5jdXJyZW5jeS5zZXJpYWxpemUoKSksdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyYmKHRbIm1pbi1mcmFjdGlvbi1kaWdpdHMiXT10aGlzLm1pbkZyYWN0aW9uRGlnaXRzLnNlcmlhbGl6ZSgpKSx0aGlzLm1heEZyYWN0aW9uRGlnaXRzJiYodFsibWF4LWZyYWN0aW9uLWRpZ2l0cyJdPXRoaXMubWF4RnJhY3Rpb25EaWdpdHMuc2VyaWFsaXplKCkpLFsibnVtYmVyLWZvcm1hdCIsdGhpcy5udW1iZXIuc2VyaWFsaXplKCksdF19O3ZhciB3cj1mdW5jdGlvbih0KXt0aGlzLnR5cGU9RHQsdGhpcy5pbnB1dD10fTt3ci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMSBhcmd1bWVudCwgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSk7cmV0dXJuIHI/ImFycmF5IiE9PXIudHlwZS5raW5kJiYic3RyaW5nIiE9PXIudHlwZS5raW5kJiYidmFsdWUiIT09ci50eXBlLmtpbmQ/ZS5lcnJvcigiRXhwZWN0ZWQgYXJndW1lbnQgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCAiK0d0KHIudHlwZSkrIiBpbnN0ZWFkLiIpOm5ldyB3cihyKTpudWxsfSx3ci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGUubGVuZ3RoO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubGVuZ3RoO3Rocm93IG5ldyBzZSgiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb2YgdHlwZSBzdHJpbmcgb3IgYXJyYXksIGJ1dCBmb3VuZCAiK0d0KGllKGUpKSsiIGluc3RlYWQuIil9LHdyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KX0sd3IucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sd3IucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsibGVuZ3RoIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSksdH07dmFyIFRyPXsiPT0iOmdyLCIhPSI6bXIsIj4iOnlyLCI8Ijp2ciwiPj0iOmJyLCI8PSI6eHIsYXJyYXk6Y2UsYXQ6b3IsYm9vbGVhbjpjZSxjYXNlOnVyLGNvYWxlc2NlOmlyLGNvbGxhdG9yOnZlLGZvcm1hdDp1ZSxpbWFnZTpoZSxpbjpzciwiaW5kZXgtb2YiOmxyLGludGVycG9sYXRlOnJyLCJpbnRlcnBvbGF0ZS1oY2wiOnJyLCJpbnRlcnBvbGF0ZS1sYWIiOnJyLGxlbmd0aDp3cixsZXQ6YXIsbGl0ZXJhbDpvZSxtYXRjaDpjcixudW1iZXI6Y2UsIm51bWJlci1mb3JtYXQiOl9yLG9iamVjdDpjZSxzbGljZTpocixzdGVwOmplLHN0cmluZzpjZSwidG8tYm9vbGVhbiI6cGUsInRvLWNvbG9yIjpwZSwidG8tbnVtYmVyIjpwZSwidG8tc3RyaW5nIjpwZSx2YXI6RmUsd2l0aGluOnplfTtmdW5jdGlvbiBrcih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM107cj1yLmV2YWx1YXRlKHQpLG49bi5ldmFsdWF0ZSh0KSxpPWkuZXZhbHVhdGUodCk7dmFyIG89YT9hLmV2YWx1YXRlKHQpOjEscz1yZShyLG4saSxvKTtpZihzKXRocm93IG5ldyBzZShzKTtyZXR1cm4gbmV3IEt0KHIvMjU1Km8sbi8yNTUqbyxpLzI1NSpvLG8pfWZ1bmN0aW9uIE1yKHQsZSl7cmV0dXJuIHQgaW4gZX1mdW5jdGlvbiBBcih0LGUpe3ZhciByPWVbdF07cmV0dXJuIHZvaWQgMD09PXI/bnVsbDpyfWZ1bmN0aW9uIFNyKHQpe3JldHVybnt0eXBlOnR9fWZ1bmN0aW9uIEVyKHQpe3JldHVybntyZXN1bHQ6InN1Y2Nlc3MiLHZhbHVlOnR9fWZ1bmN0aW9uIENyKHQpe3JldHVybntyZXN1bHQ6ImVycm9yIix2YWx1ZTp0fX1mdW5jdGlvbiBMcih0KXtyZXR1cm4iZGF0YS1kcml2ZW4iPT09dFsicHJvcGVydHktdHlwZSJdfHwiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4iPT09dFsicHJvcGVydHktdHlwZSJdfWZ1bmN0aW9uIFByKHQpe3JldHVybiEhdC5leHByZXNzaW9uJiZ0LmV4cHJlc3Npb24ucGFyYW1ldGVycy5pbmRleE9mKCJ6b29tIik+LTF9ZnVuY3Rpb24gSXIodCl7cmV0dXJuISF0LmV4cHJlc3Npb24mJnQuZXhwcmVzc2lvbi5pbnRlcnBvbGF0ZWR9ZnVuY3Rpb24genIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOdW1iZXI/Im51bWJlciI6dCBpbnN0YW5jZW9mIFN0cmluZz8ic3RyaW5nIjp0IGluc3RhbmNlb2YgQm9vbGVhbj8iYm9vbGVhbiI6QXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOm51bGw9PT10PyJudWxsIjp0eXBlb2YgdH1mdW5jdGlvbiBPcih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiYhQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBEcih0KXtyZXR1cm4gdH1mdW5jdGlvbiBScih0LGUscil7cmV0dXJuIHZvaWQgMCE9PXQ/dDp2b2lkIDAhPT1lP2U6dm9pZCAwIT09cj9yOnZvaWQgMH1mdW5jdGlvbiBGcih0LGUscixuLGkpe3JldHVybiBScih0eXBlb2Ygcj09PWk/bltyXTp2b2lkIDAsdC5kZWZhdWx0LGUuZGVmYXVsdCl9ZnVuY3Rpb24gQnIodCxlLHIpe2lmKCJudW1iZXIiIT09enIocikpcmV0dXJuIFJyKHQuZGVmYXVsdCxlLmRlZmF1bHQpO3ZhciBuPXQuc3RvcHMubGVuZ3RoO2lmKDE9PT1uKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI8PXQuc3RvcHNbMF1bMF0pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocj49dC5zdG9wc1tuLTFdWzBdKXJldHVybiB0LnN0b3BzW24tMV1bMV07dmFyIGk9TmUodC5zdG9wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLHIpO3JldHVybiB0LnN0b3BzW2ldWzFdfWZ1bmN0aW9uIE5yKHQsZSxyKXt2YXIgbj12b2lkIDAhPT10LmJhc2U/dC5iYXNlOjE7aWYoIm51bWJlciIhPT16cihyKSlyZXR1cm4gUnIodC5kZWZhdWx0LGUuZGVmYXVsdCk7dmFyIGk9dC5zdG9wcy5sZW5ndGg7aWYoMT09PWkpcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocjw9dC5zdG9wc1swXVswXSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPj10LnN0b3BzW2ktMV1bMF0pcmV0dXJuIHQuc3RvcHNbaS0xXVsxXTt2YXIgYT1OZSh0LnN0b3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksciksbz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLXIsYT10LXI7cmV0dXJuIDA9PT1pPzA6MT09PWU/YS9pOihNYXRoLnBvdyhlLGEpLTEpLyhNYXRoLnBvdyhlLGkpLTEpfShyLG4sdC5zdG9wc1thXVswXSx0LnN0b3BzW2ErMV1bMF0pLHM9dC5zdG9wc1thXVsxXSxsPXQuc3RvcHNbYSsxXVsxXSxjPVZlW2UudHlwZV18fERyO2lmKHQuY29sb3JTcGFjZSYmInJnYiIhPT10LmNvbG9yU3BhY2Upe3ZhciB1PWVyW3QuY29sb3JTcGFjZV07Yz1mdW5jdGlvbih0LGUpe3JldHVybiB1LnJldmVyc2UodS5pbnRlcnBvbGF0ZSh1LmZvcndhcmQodCksdS5mb3J3YXJkKGUpLG8pKX19cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHMuZXZhbHVhdGU/e2V2YWx1YXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9YXJndW1lbnRzLmxlbmd0aDtlLS07KXRbZV09YXJndW1lbnRzW2VdO3ZhciByPXMuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpLG49bC5ldmFsdWF0ZS5hcHBseSh2b2lkIDAsdCk7aWYodm9pZCAwIT09ciYmdm9pZCAwIT09bilyZXR1cm4gYyhyLG4sbyl9fTpjKHMsbCxvKX1mdW5jdGlvbiBqcih0LGUscil7cmV0dXJuImNvbG9yIj09PWUudHlwZT9yPUt0LnBhcnNlKHIpOiJmb3JtYXR0ZWQiPT09ZS50eXBlP3I9dGUuZnJvbVN0cmluZyhyLnRvU3RyaW5nKCkpOiJyZXNvbHZlZEltYWdlIj09PWUudHlwZT9yPWVlLmZyb21TdHJpbmcoci50b1N0cmluZygpKTp6cihyKT09PWUudHlwZXx8ImVudW0iPT09ZS50eXBlJiZlLnZhbHVlc1tyXXx8KHI9dm9pZCAwKSxScihyLHQuZGVmYXVsdCxlLmRlZmF1bHQpfW1lLnJlZ2lzdGVyKFRyLHtlcnJvcjpbe2tpbmQ6ImVycm9yIn0sW1J0XSxmdW5jdGlvbih0LGUpe3Rocm93IG5ldyBzZShlWzBdLmV2YWx1YXRlKHQpKX1dLHR5cGVvZjpbUnQsW2p0XSxmdW5jdGlvbih0LGUpe3JldHVybiBHdChpZShlWzBdLmV2YWx1YXRlKHQpKSl9XSwidG8tcmdiYSI6W0h0KER0LDQpLFtCdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0FycmF5KCl9XSxyZ2I6W0J0LFtEdCxEdCxEdF0sa3JdLHJnYmE6W0J0LFtEdCxEdCxEdCxEdF0sa3JdLGhhczp7dHlwZTpGdCxvdmVybG9hZHM6W1tbUnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1yKGVbMF0uZXZhbHVhdGUodCksdC5wcm9wZXJ0aWVzKCkpfV0sW1tSdCxOdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBNcihlWzBdLmV2YWx1YXRlKHQpLHIuZXZhbHVhdGUodCkpfV1dfSxnZXQ6e3R5cGU6anQsb3ZlcmxvYWRzOltbW1J0XSxmdW5jdGlvbih0LGUpe3JldHVybiBBcihlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbUnQsTnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVsxXTtyZXR1cm4gQXIoZVswXS5ldmFsdWF0ZSh0KSxyLmV2YWx1YXRlKHQpKX1dXX0sImZlYXR1cmUtc3RhdGUiOltqdCxbUnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFyKGVbMF0uZXZhbHVhdGUodCksdC5mZWF0dXJlU3RhdGV8fHt9KX1dLHByb3BlcnRpZXM6W050LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByb3BlcnRpZXMoKX1dLCJnZW9tZXRyeS10eXBlIjpbUnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2VvbWV0cnlUeXBlKCl9XSxpZDpbanQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQoKX1dLHpvb206W0R0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMuem9vbX1dLCJoZWF0bWFwLWRlbnNpdHkiOltEdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLmhlYXRtYXBEZW5zaXR5fHwwfV0sImxpbmUtcHJvZ3Jlc3MiOltEdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLmxpbmVQcm9ncmVzc3x8MH1dLGFjY3VtdWxhdGVkOltqdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dC5nbG9iYWxzLmFjY3VtdWxhdGVkP251bGw6dC5nbG9iYWxzLmFjY3VtdWxhdGVkfV0sIisiOltEdCxTcihEdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lO248aS5sZW5ndGg7bis9MSlyKz1pW25dLmV2YWx1YXRlKHQpO3JldHVybiByfV0sIioiOltEdCxTcihEdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSlyKj1pW25dLmV2YWx1YXRlKHQpO3JldHVybiByfV0sIi0iOnt0eXBlOkR0LG92ZXJsb2FkczpbW1tEdCxEdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLXIuZXZhbHVhdGUodCl9XSxbW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybi1lWzBdLmV2YWx1YXRlKHQpfV1dfSwiLyI6W0R0LFtEdCxEdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBlWzBdLmV2YWx1YXRlKHQpL3IuZXZhbHVhdGUodCl9XSwiJSI6W0R0LFtEdCxEdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBlWzBdLmV2YWx1YXRlKHQpJXIuZXZhbHVhdGUodCl9XSxsbjI6W0R0LFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguTE4yfV0scGk6W0R0LFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguUEl9XSxlOltEdCxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLkV9XSwiXiI6W0R0LFtEdCxEdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBNYXRoLnBvdyhlWzBdLmV2YWx1YXRlKHQpLHIuZXZhbHVhdGUodCkpfV0sc3FydDpbRHQsW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLnNxcnQoZVswXS5ldmFsdWF0ZSh0KSl9XSxsb2cxMDpbRHQsW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmxvZyhlWzBdLmV2YWx1YXRlKHQpKS9NYXRoLkxOMTB9XSxsbjpbRHQsW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmxvZyhlWzBdLmV2YWx1YXRlKHQpKX1dLGxvZzI6W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5sb2coZVswXS5ldmFsdWF0ZSh0KSkvTWF0aC5MTjJ9XSxzaW46W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5zaW4oZVswXS5ldmFsdWF0ZSh0KSl9XSxjb3M6W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5jb3MoZVswXS5ldmFsdWF0ZSh0KSl9XSx0YW46W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC50YW4oZVswXS5ldmFsdWF0ZSh0KSl9XSxhc2luOltEdCxbRHRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYXNpbihlWzBdLmV2YWx1YXRlKHQpKX1dLGFjb3M6W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hY29zKGVbMF0uZXZhbHVhdGUodCkpfV0sYXRhbjpbRHQsW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmF0YW4oZVswXS5ldmFsdWF0ZSh0KSl9XSxtaW46W0R0LFNyKER0KSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbi5hcHBseShNYXRoLGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKSl9XSxtYXg6W0R0LFNyKER0KSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heC5hcHBseShNYXRoLGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKSl9XSxhYnM6W0R0LFtEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnMoZVswXS5ldmFsdWF0ZSh0KSl9XSxyb3VuZDpbRHQsW0R0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0uZXZhbHVhdGUodCk7cmV0dXJuIHI8MD8tTWF0aC5yb3VuZCgtcik6TWF0aC5yb3VuZChyKX1dLGZsb29yOltEdCxbRHRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguZmxvb3IoZVswXS5ldmFsdWF0ZSh0KSl9XSxjZWlsOltEdCxbRHRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguY2VpbChlWzBdLmV2YWx1YXRlKHQpKX1dLCJmaWx0ZXItPT0iOltGdCxbUnQsanRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHQucHJvcGVydGllcygpW3IudmFsdWVdPT09bi52YWx1ZX1dLCJmaWx0ZXItaWQtPT0iOltGdCxbanRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdC5pZCgpPT09ci52YWx1ZX1dLCJmaWx0ZXItdHlwZS09PSI6W0Z0LFtSdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiB0Lmdlb21ldHJ5VHlwZSgpPT09ci52YWx1ZX1dLCJmaWx0ZXItPCI6W0Z0LFtSdCxqdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPGF9XSwiZmlsdGVyLWlkLTwiOltGdCxbanRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbjxpfV0sImZpbHRlci0+IjpbRnQsW1J0LGp0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+YX1dLCJmaWx0ZXItaWQtPiI6W0Z0LFtqdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPml9XSwiZmlsdGVyLTw9IjpbRnQsW1J0LGp0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk8PWF9XSwiZmlsdGVyLWlkLTw9IjpbRnQsW2p0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm48PWl9XSwiZmlsdGVyLT49IjpbRnQsW1J0LGp0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk+PWF9XSwiZmlsdGVyLWlkLT49IjpbRnQsW2p0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm4+PWl9XSwiZmlsdGVyLWhhcyI6W0Z0LFtqdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZSBpbiB0LnByb3BlcnRpZXMoKX1dLCJmaWx0ZXItaGFzLWlkIjpbRnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10LmlkKCkmJnZvaWQgMCE9PXQuaWQoKX1dLCJmaWx0ZXItdHlwZS1pbiI6W0Z0LFtIdChSdCldLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0udmFsdWUuaW5kZXhPZih0Lmdlb21ldHJ5VHlwZSgpKT49MH1dLCJmaWx0ZXItaWQtaW4iOltGdCxbSHQoanQpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5pZCgpKT49MH1dLCJmaWx0ZXItaW4tc21hbGwiOltGdCxbUnQsSHQoanQpXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIGVbMV0udmFsdWUuaW5kZXhPZih0LnByb3BlcnRpZXMoKVtyLnZhbHVlXSk+PTB9XSwiZmlsdGVyLWluLWxhcmdlIjpbRnQsW1J0LEh0KGp0KV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKDtyPD1uOyl7dmFyIGk9cituPj4xO2lmKGVbaV09PT10KXJldHVybiEwO2VbaV0+dD9uPWktMTpyPWkrMX1yZXR1cm4hMX0odC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sbi52YWx1ZSwwLG4udmFsdWUubGVuZ3RoLTEpfV0sYWxsOnt0eXBlOkZ0LG92ZXJsb2FkczpbW1tGdCxGdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzFdO3JldHVybiBlWzBdLmV2YWx1YXRlKHQpJiZyLmV2YWx1YXRlKHQpfV0sW1NyKEZ0KSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYoIW5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITE7cmV0dXJuITB9XV19LGFueTp7dHlwZTpGdCxvdmVybG9hZHM6W1tbRnQsRnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVsxXTtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KXx8ci5ldmFsdWF0ZSh0KX1dLFtTcihGdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKWlmKG5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITA7cmV0dXJuITF9XV19LCIhIjpbRnQsW0Z0XSxmdW5jdGlvbih0LGUpe3JldHVybiFlWzBdLmV2YWx1YXRlKHQpfV0sImlzLXN1cHBvcnRlZC1zY3JpcHQiOltGdCxbUnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbG9iYWxzJiZ0Lmdsb2JhbHMuaXNTdXBwb3J0ZWRTY3JpcHQ7cmV0dXJuIXJ8fHIoZVswXS5ldmFsdWF0ZSh0KSl9XSx1cGNhc2U6W1J0LFtSdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b1VwcGVyQ2FzZSgpfV0sZG93bmNhc2U6W1J0LFtSdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0xvd2VyQ2FzZSgpfV0sY29uY2F0OltSdCxTcihqdCksZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBhZShlLmV2YWx1YXRlKHQpKX0pKS5qb2luKCIiKX1dLCJyZXNvbHZlZC1sb2NhbGUiOltSdCxbVXRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkucmVzb2x2ZWRMb2NhbGUoKX1dfSk7dmFyIFVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5leHByZXNzaW9uPXQsdGhpcy5fd2FybmluZ0hpc3Rvcnk9e30sdGhpcy5fZXZhbHVhdG9yPW5ldyBnZSx0aGlzLl9kZWZhdWx0VmFsdWU9ZT9mdW5jdGlvbih0KXtyZXR1cm4iY29sb3IiPT09dC50eXBlJiZPcih0LmRlZmF1bHQpP25ldyBLdCgwLDAsMCwwKToiY29sb3IiPT09dC50eXBlP0t0LnBhcnNlKHQuZGVmYXVsdCl8fG51bGw6dm9pZCAwPT09dC5kZWZhdWx0P251bGw6dC5kZWZhdWx0fShlKTpudWxsLHRoaXMuX2VudW1WYWx1ZXM9ZSYmImVudW0iPT09ZS50eXBlP2UudmFsdWVzOm51bGx9O2Z1bmN0aW9uIFZyKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD4wJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJnRbMF1pbiBUcn1mdW5jdGlvbiBxcih0LGUpe3ZhciByPW5ldyBCZShUcixbXSxlP2Z1bmN0aW9uKHQpe3ZhciBlPXtjb2xvcjpCdCxzdHJpbmc6UnQsbnVtYmVyOkR0LGVudW06UnQsYm9vbGVhbjpGdCxmb3JtYXR0ZWQ6VnQscmVzb2x2ZWRJbWFnZTpxdH07cmV0dXJuImFycmF5Ij09PXQudHlwZT9IdChlW3QudmFsdWVdfHxqdCx0Lmxlbmd0aCk6ZVt0LnR5cGVdfShlKTp2b2lkIDApLG49ci5wYXJzZSh0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUmJiJzdHJpbmciPT09ZS50eXBlP3t0eXBlQW5ub3RhdGlvbjoiY29lcmNlIn06dm9pZCAwKTtyZXR1cm4gbj9FcihuZXcgVXIobixlKSk6Q3Ioci5lcnJvcnMpfVVyLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fZXZhbHVhdG9yLmdsb2JhbHM9dCx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZT1lLHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlU3RhdGU9cix0aGlzLl9ldmFsdWF0b3IuY2Fub25pY2FsPW4sdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcz1pfHxudWxsLHRoaXMuX2V2YWx1YXRvci5mb3JtYXR0ZWRTZWN0aW9uPWEsdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcil9LFVyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fZXZhbHVhdG9yLmdsb2JhbHM9dCx0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZT1lfHxudWxsLHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlU3RhdGU9cnx8bnVsbCx0aGlzLl9ldmFsdWF0b3IuY2Fub25pY2FsPW4sdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcz1pfHxudWxsLHRoaXMuX2V2YWx1YXRvci5mb3JtYXR0ZWRTZWN0aW9uPWF8fG51bGw7dHJ5e3ZhciBvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO2lmKG51bGw9PW98fCJudW1iZXIiPT10eXBlb2YgbyYmbyE9bylyZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO2lmKHRoaXMuX2VudW1WYWx1ZXMmJiEobyBpbiB0aGlzLl9lbnVtVmFsdWVzKSl0aHJvdyBuZXcgc2UoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9uZSBvZiAiK09iamVjdC5rZXlzKHRoaXMuX2VudW1WYWx1ZXMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfSkpLmpvaW4oIiwgIikrIiwgYnV0IGZvdW5kICIrSlNPTi5zdHJpbmdpZnkobykrIiBpbnN0ZWFkLiIpO3JldHVybiBvfWNhdGNoKHQpe3JldHVybiB0aGlzLl93YXJuaW5nSGlzdG9yeVt0Lm1lc3NhZ2VdfHwodGhpcy5fd2FybmluZ0hpc3RvcnlbdC5tZXNzYWdlXT0hMCwidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2Fybih0Lm1lc3NhZ2UpKSx0aGlzLl9kZWZhdWx0VmFsdWV9fTt2YXIgSHI9ZnVuY3Rpb24odCxlKXt0aGlzLmtpbmQ9dCx0aGlzLl9zdHlsZUV4cHJlc3Npb249ZSx0aGlzLmlzU3RhdGVEZXBlbmRlbnQ9ImNvbnN0YW50IiE9PXQmJiFEZShlLmV4cHJlc3Npb24pfTtIci5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKHQsZSxyLG4saSxhKX0sSHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSxyLG4saSxhKX07dmFyIEdyPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMua2luZD10LHRoaXMuem9vbVN0b3BzPXIsdGhpcy5fc3R5bGVFeHByZXNzaW9uPWUsdGhpcy5pc1N0YXRlRGVwZW5kZW50PSJjYW1lcmEiIT09dCYmIURlKGUuZXhwcmVzc2lvbiksdGhpcy5pbnRlcnBvbGF0aW9uVHlwZT1ufTtmdW5jdGlvbiBZcih0LGUpe2lmKCJlcnJvciI9PT0odD1xcih0LGUpKS5yZXN1bHQpcmV0dXJuIHQ7dmFyIHI9dC52YWx1ZS5leHByZXNzaW9uLG49T2Uocik7aWYoIW4mJiFMcihlKSlyZXR1cm4gQ3IoW25ldyBJdCgiIiwiZGF0YSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkIildKTt2YXIgaT1SZShyLFsiem9vbSJdKTtpZighaSYmIVByKGUpKXJldHVybiBDcihbbmV3IEl0KCIiLCJ6b29tIGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQiKV0pO3ZhciBhPWZ1bmN0aW9uIHQoZSl7dmFyIHI9bnVsbDtpZihlIGluc3RhbmNlb2YgYXIpcj10KGUucmVzdWx0KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBpcilmb3IodmFyIG49MCxpPWUuYXJncztuPGkubGVuZ3RoJiYhKHI9dChpW25dKSk7bis9MSk7ZWxzZShlIGluc3RhbmNlb2YgamV8fGUgaW5zdGFuY2VvZiBycikmJmUuaW5wdXQgaW5zdGFuY2VvZiBtZSYmInpvb20iPT09ZS5pbnB1dC5uYW1lJiYocj1lKTtyZXR1cm4gciBpbnN0YW5jZW9mIEl0fHxlLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7dmFyIG49dChlKTtuIGluc3RhbmNlb2YgSXQ/cj1uOiFyJiZuP3I9bmV3IEl0KCIiLCciem9vbSIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb24uJyk6ciYmbiYmciE9PW4mJihyPW5ldyBJdCgiIiwnT25seSBvbmUgem9vbS1iYXNlZCAic3RlcCIgb3IgImludGVycG9sYXRlIiBzdWJleHByZXNzaW9uIG1heSBiZSB1c2VkIGluIGFuIGV4cHJlc3Npb24uJykpfSkpLHJ9KHIpO3JldHVybiBhfHxpP2EgaW5zdGFuY2VvZiBJdD9DcihbYV0pOmEgaW5zdGFuY2VvZiByciYmIUlyKGUpP0NyKFtuZXcgSXQoIiIsJyJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHByb3BlcnR5JyldKTpFcihhP25ldyBHcihuPyJjYW1lcmEiOiJjb21wb3NpdGUiLHQudmFsdWUsYS5sYWJlbHMsYSBpbnN0YW5jZW9mIHJyP2EuaW50ZXJwb2xhdGlvbjp2b2lkIDApOm5ldyBIcihuPyJjb25zdGFudCI6InNvdXJjZSIsdC52YWx1ZSkpOkNyKFtuZXcgSXQoIiIsJyJ6b29tIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgInN0ZXAiIG9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbi4nKV0pfUdyLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcodCxlLHIsbixpLGEpfSxHci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUodCxlLHIsbixpLGEpfSxHci5wcm90b3R5cGUuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGlvblR5cGU/cnIuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb25UeXBlLHQsZSxyKTowfTt2YXIgV3I9ZnVuY3Rpb24odCxlKXt0aGlzLl9wYXJhbWV0ZXJzPXQsdGhpcy5fc3BlY2lmaWNhdGlvbj1lLEN0KHRoaXMsZnVuY3Rpb24gdChlLHIpe3ZhciBuLGksYSxvPSJjb2xvciI9PT1yLnR5cGUscz1lLnN0b3BzJiYib2JqZWN0Ij09dHlwZW9mIGUuc3RvcHNbMF1bMF0sbD1zfHwhKHN8fHZvaWQgMCE9PWUucHJvcGVydHkpLGM9ZS50eXBlfHwoSXIocik/ImV4cG9uZW50aWFsIjoiaW50ZXJ2YWwiKTtpZihvJiYoKGU9Q3Qoe30sZSkpLnN0b3BzJiYoZS5zdG9wcz1lLnN0b3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0sS3QucGFyc2UodFsxXSldfSkpKSxlLmRlZmF1bHQ9S3QucGFyc2UoZS5kZWZhdWx0P2UuZGVmYXVsdDpyLmRlZmF1bHQpKSxlLmNvbG9yU3BhY2UmJiJyZ2IiIT09ZS5jb2xvclNwYWNlJiYhZXJbZS5jb2xvclNwYWNlXSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29sb3Igc3BhY2U6ICIrZS5jb2xvclNwYWNlKTtpZigiZXhwb25lbnRpYWwiPT09YyluPU5yO2Vsc2UgaWYoImludGVydmFsIj09PWMpbj1CcjtlbHNlIGlmKCJjYXRlZ29yaWNhbCI9PT1jKXtuPUZyLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIHU9MCxoPWUuc3RvcHM7dTxoLmxlbmd0aDt1Kz0xKXt2YXIgZj1oW3VdO2lbZlswXV09ZlsxXX1hPXR5cGVvZiBlLnN0b3BzWzBdWzBdfWVsc2V7aWYoImlkZW50aXR5IiE9PWMpdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZ1bmN0aW9uIHR5cGUgIicrYysnIicpO249anJ9aWYocyl7Zm9yKHZhciBwPXt9LGQ9W10sZz0wO2c8ZS5zdG9wcy5sZW5ndGg7ZysrKXt2YXIgbT1lLnN0b3BzW2ddLHY9bVswXS56b29tO3ZvaWQgMD09PXBbdl0mJihwW3ZdPXt6b29tOnYsdHlwZTplLnR5cGUscHJvcGVydHk6ZS5wcm9wZXJ0eSxkZWZhdWx0OmUuZGVmYXVsdCxzdG9wczpbXX0sZC5wdXNoKHYpKSxwW3ZdLnN0b3BzLnB1c2goW21bMF0udmFsdWUsbVsxXV0pfWZvcih2YXIgeT1bXSx4PTAsYj1kO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XTt5LnB1c2goW3BbX10uem9vbSx0KHBbX10scildKX12YXIgdz17bmFtZToibGluZWFyIn07cmV0dXJue2tpbmQ6ImNvbXBvc2l0ZSIsaW50ZXJwb2xhdGlvblR5cGU6dyxpbnRlcnBvbGF0aW9uRmFjdG9yOnJyLmludGVycG9sYXRpb25GYWN0b3IuYmluZCh2b2lkIDAsdyksem9vbVN0b3BzOnkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSxldmFsdWF0ZTpmdW5jdGlvbih0LG4pe3ZhciBpPXQuem9vbTtyZXR1cm4gTnIoe3N0b3BzOnksYmFzZTplLmJhc2V9LHIsaSkuZXZhbHVhdGUoaSxuKX19fWlmKGwpe3ZhciBUPSJleHBvbmVudGlhbCI9PT1jP3tuYW1lOiJleHBvbmVudGlhbCIsYmFzZTp2b2lkIDAhPT1lLmJhc2U/ZS5iYXNlOjF9Om51bGw7cmV0dXJue2tpbmQ6ImNhbWVyYSIsaW50ZXJwb2xhdGlvblR5cGU6VCxpbnRlcnBvbGF0aW9uRmFjdG9yOnJyLmludGVycG9sYXRpb25GYWN0b3IuYmluZCh2b2lkIDAsVCksem9vbVN0b3BzOmUuc3RvcHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSxldmFsdWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbihlLHIsdC56b29tLGksYSl9fX1yZXR1cm57a2luZDoic291cmNlIixldmFsdWF0ZTpmdW5jdGlvbih0LG8pe3ZhciBzPW8mJm8ucHJvcGVydGllcz9vLnByb3BlcnRpZXNbZS5wcm9wZXJ0eV06dm9pZCAwO3JldHVybiB2b2lkIDA9PT1zP1JyKGUuZGVmYXVsdCxyLmRlZmF1bHQpOm4oZSxyLHMsaSxhKX19fSh0aGlzLl9wYXJhbWV0ZXJzLHRoaXMuX3NwZWNpZmljYXRpb24pKX07ZnVuY3Rpb24gWnIodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWN8fHt9LGk9dC5vYmplY3RFbGVtZW50VmFsaWRhdG9yc3x8e30sYT10LnN0eWxlLG89dC5zdHlsZVNwZWMscz1bXSxsPXpyKHIpO2lmKCJvYmplY3QiIT09bClyZXR1cm5bbmV3IFN0KGUsciwib2JqZWN0IGV4cGVjdGVkLCAiK2wrIiBmb3VuZCIpXTtmb3IodmFyIGMgaW4gcil7dmFyIHU9Yy5zcGxpdCgiLiIpWzBdLGg9blt1XXx8blsiKiJdLGY9dm9pZCAwO2lmKGlbdV0pZj1pW3VdO2Vsc2UgaWYoblt1XSlmPWJuO2Vsc2UgaWYoaVsiKiJdKWY9aVsiKiJdO2Vsc2V7aWYoIW5bIioiXSl7cy5wdXNoKG5ldyBTdChlLHJbY10sJ3Vua25vd24gcHJvcGVydHkgIicrYysnIicpKTtjb250aW51ZX1mPWJufXM9cy5jb25jYXQoZih7a2V5OihlP2UrIi4iOmUpK2MsdmFsdWU6cltjXSx2YWx1ZVNwZWM6aCxzdHlsZTphLHN0eWxlU3BlYzpvLG9iamVjdDpyLG9iamVjdEtleTpjfSxyKSl9Zm9yKHZhciBwIGluIG4paVtwXXx8bltwXS5yZXF1aXJlZCYmdm9pZCAwPT09bltwXS5kZWZhdWx0JiZ2b2lkIDA9PT1yW3BdJiZzLnB1c2gobmV3IFN0KGUsciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiJytwKyciJykpO3JldHVybiBzfWZ1bmN0aW9uIFhyKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGUsaT10LnN0eWxlU3BlYyxhPXQua2V5LG89dC5hcnJheUVsZW1lbnRWYWxpZGF0b3J8fGJuO2lmKCJhcnJheSIhPT16cihlKSlyZXR1cm5bbmV3IFN0KGEsZSwiYXJyYXkgZXhwZWN0ZWQsICIrenIoZSkrIiBmb3VuZCIpXTtpZihyLmxlbmd0aCYmZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm5bbmV3IFN0KGEsZSwiYXJyYXkgbGVuZ3RoICIrci5sZW5ndGgrIiBleHBlY3RlZCwgbGVuZ3RoICIrZS5sZW5ndGgrIiBmb3VuZCIpXTtpZihyWyJtaW4tbGVuZ3RoIl0mJmUubGVuZ3RoPHJbIm1pbi1sZW5ndGgiXSlyZXR1cm5bbmV3IFN0KGEsZSwiYXJyYXkgbGVuZ3RoIGF0IGxlYXN0ICIrclsibWluLWxlbmd0aCJdKyIgZXhwZWN0ZWQsIGxlbmd0aCAiK2UubGVuZ3RoKyIgZm91bmQiKV07dmFyIHM9e3R5cGU6ci52YWx1ZSx2YWx1ZXM6ci52YWx1ZXN9O2kuJHZlcnNpb248NyYmKHMuZnVuY3Rpb249ci5mdW5jdGlvbiksIm9iamVjdCI9PT16cihyLnZhbHVlKSYmKHM9ci52YWx1ZSk7Zm9yKHZhciBsPVtdLGM9MDtjPGUubGVuZ3RoO2MrKylsPWwuY29uY2F0KG8oe2FycmF5OmUsYXJyYXlJbmRleDpjLHZhbHVlOmVbY10sdmFsdWVTcGVjOnMsc3R5bGU6bixzdHlsZVNwZWM6aSxrZXk6YSsiWyIrYysiXSJ9KSk7cmV0dXJuIGx9ZnVuY3Rpb24gSnIodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT16cihyKTtyZXR1cm4ibnVtYmVyIj09PWkmJnIhPXImJihpPSJOYU4iKSwibnVtYmVyIiE9PWk/W25ldyBTdChlLHIsIm51bWJlciBleHBlY3RlZCwgIitpKyIgZm91bmQiKV06Im1pbmltdW0iaW4gbiYmcjxuLm1pbmltdW0/W25ldyBTdChlLHIscisiIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAiK24ubWluaW11bSldOiJtYXhpbXVtImluIG4mJnI+bi5tYXhpbXVtP1tuZXcgU3QoZSxyLHIrIiBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgIituLm1heGltdW0pXTpbXX1mdW5jdGlvbiBLcih0KXt2YXIgZSxyLG4saT10LnZhbHVlU3BlYyxhPUx0KHQudmFsdWUudHlwZSksbz17fSxzPSJjYXRlZ29yaWNhbCIhPT1hJiZ2b2lkIDA9PT10LnZhbHVlLnByb3BlcnR5LGw9IXMsYz0iYXJyYXkiPT09enIodC52YWx1ZS5zdG9wcykmJiJhcnJheSI9PT16cih0LnZhbHVlLnN0b3BzWzBdKSYmIm9iamVjdCI9PT16cih0LnZhbHVlLnN0b3BzWzBdWzBdKSx1PVpyKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6dC5zdHlsZVNwZWMuZnVuY3Rpb24sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3N0b3BzOmZ1bmN0aW9uKHQpe2lmKCJpZGVudGl0eSI9PT1hKXJldHVybltuZXcgU3QodC5rZXksdC52YWx1ZSwnaWRlbnRpdHkgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGEgInN0b3BzIiBwcm9wZXJ0eScpXTt2YXIgZT1bXSxyPXQudmFsdWU7cmV0dXJuIGU9ZS5jb25jYXQoWHIoe2tleTp0LmtleSx2YWx1ZTpyLHZhbHVlU3BlYzp0LnZhbHVlU3BlYyxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxhcnJheUVsZW1lbnRWYWxpZGF0b3I6aH0pKSwiYXJyYXkiPT09enIocikmJjA9PT1yLmxlbmd0aCYmZS5wdXNoKG5ldyBTdCh0LmtleSxyLCJhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHN0b3AiKSksZX0sZGVmYXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gYm4oe2tleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHZhbHVlU3BlYzppLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSl9fX0pO3JldHVybiJpZGVudGl0eSI9PT1hJiZzJiZ1LnB1c2gobmV3IFN0KHQua2V5LHQudmFsdWUsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInByb3BlcnR5IicpKSwiaWRlbnRpdHkiPT09YXx8dC52YWx1ZS5zdG9wc3x8dS5wdXNoKG5ldyBTdCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJzdG9wcyInKSksImV4cG9uZW50aWFsIj09PWEmJnQudmFsdWVTcGVjLmV4cHJlc3Npb24mJiFJcih0LnZhbHVlU3BlYykmJnUucHVzaChuZXcgU3QodC5rZXksdC52YWx1ZSwiZXhwb25lbnRpYWwgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSksdC5zdHlsZVNwZWMuJHZlcnNpb24+PTgmJihsJiYhTHIodC52YWx1ZVNwZWMpP3UucHVzaChuZXcgU3QodC5rZXksdC52YWx1ZSwicHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSk6cyYmIVByKHQudmFsdWVTcGVjKSYmdS5wdXNoKG5ldyBTdCh0LmtleSx0LnZhbHVlLCJ6b29tIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkIikpKSwiY2F0ZWdvcmljYWwiIT09YSYmIWN8fHZvaWQgMCE9PXQudmFsdWUucHJvcGVydHl8fHUucHVzaChuZXcgU3QodC5rZXksdC52YWx1ZSwnInByb3BlcnR5IiBwcm9wZXJ0eSBpcyByZXF1aXJlZCcpKSx1O2Z1bmN0aW9uIGgodCl7dmFyIGU9W10sYT10LnZhbHVlLHM9dC5rZXk7aWYoImFycmF5IiE9PXpyKGEpKXJldHVybltuZXcgU3QocyxhLCJhcnJheSBleHBlY3RlZCwgIit6cihhKSsiIGZvdW5kIildO2lmKDIhPT1hLmxlbmd0aClyZXR1cm5bbmV3IFN0KHMsYSwiYXJyYXkgbGVuZ3RoIDIgZXhwZWN0ZWQsIGxlbmd0aCAiK2EubGVuZ3RoKyIgZm91bmQiKV07aWYoYyl7aWYoIm9iamVjdCIhPT16cihhWzBdKSlyZXR1cm5bbmV3IFN0KHMsYSwib2JqZWN0IGV4cGVjdGVkLCAiK3pyKGFbMF0pKyIgZm91bmQiKV07aWYodm9pZCAwPT09YVswXS56b29tKXJldHVybltuZXcgU3QocyxhLCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHpvb20iKV07aWYodm9pZCAwPT09YVswXS52YWx1ZSlyZXR1cm5bbmV3IFN0KHMsYSwib2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB2YWx1ZSIpXTtpZihuJiZuPkx0KGFbMF0uem9vbSkpcmV0dXJuW25ldyBTdChzLGFbMF0uem9vbSwic3RvcCB6b29tIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIiKV07THQoYVswXS56b29tKSE9PW4mJihuPUx0KGFbMF0uem9vbSkscj12b2lkIDAsbz17fSksZT1lLmNvbmNhdChacih7a2V5OnMrIlswXSIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e3pvb206e319LHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnt6b29tOkpyLHZhbHVlOmZ9fSkpfWVsc2UgZT1lLmNvbmNhdChmKHtrZXk6cysiWzBdIix2YWx1ZTphWzBdLHZhbHVlU3BlYzp7fSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30sYSkpO3JldHVybiBWcihQdChhWzFdKSk/ZS5jb25jYXQoW25ldyBTdChzKyJbMV0iLGFbMV0sImV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiBzdG9wcy4iKV0pOmUuY29uY2F0KGJuKHtrZXk6cysiWzFdIix2YWx1ZTphWzFdLHZhbHVlU3BlYzppLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSkpfWZ1bmN0aW9uIGYodCxuKXt2YXIgcz16cih0LnZhbHVlKSxsPUx0KHQudmFsdWUpLGM9bnVsbCE9PXQudmFsdWU/dC52YWx1ZTpuO2lmKGUpe2lmKHMhPT1lKXJldHVybltuZXcgU3QodC5rZXksYyxzKyIgc3RvcCBkb21haW4gdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3AgZG9tYWluIHR5cGUgIitlKV19ZWxzZSBlPXM7aWYoIm51bWJlciIhPT1zJiYic3RyaW5nIiE9PXMmJiJib29sZWFuIiE9PXMpcmV0dXJuW25ldyBTdCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKV07aWYoIm51bWJlciIhPT1zJiYiY2F0ZWdvcmljYWwiIT09YSl7dmFyIHU9Im51bWJlciBleHBlY3RlZCwgIitzKyIgZm91bmQiO3JldHVybiBMcihpKSYmdm9pZCAwPT09YSYmKHUrPSdcbklmIHlvdSBpbnRlbmRlZCB0byB1c2UgYSBjYXRlZ29yaWNhbCBmdW5jdGlvbiwgc3BlY2lmeSBgInR5cGUiOiAiY2F0ZWdvcmljYWwiYC4nKSxbbmV3IFN0KHQua2V5LGMsdSldfXJldHVybiJjYXRlZ29yaWNhbCIhPT1hfHwibnVtYmVyIiE9PXN8fGlzRmluaXRlKGwpJiZNYXRoLmZsb29yKGwpPT09bD8iY2F0ZWdvcmljYWwiIT09YSYmIm51bWJlciI9PT1zJiZ2b2lkIDAhPT1yJiZsPHI/W25ldyBTdCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIildOihyPWwsImNhdGVnb3JpY2FsIj09PWEmJmwgaW4gbz9bbmV3IFN0KHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSIpXToob1tsXT0hMCxbXSkpOltuZXcgU3QodC5rZXksYywiaW50ZWdlciBleHBlY3RlZCwgZm91bmQgIitsKV19fWZ1bmN0aW9uIFFyKHQpe3ZhciBlPSgicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dD9ZcjpxcikoUHQodC52YWx1ZSksdC52YWx1ZVNwZWMpO2lmKCJlcnJvciI9PT1lLnJlc3VsdClyZXR1cm4gZS52YWx1ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgU3QoIiIrdC5rZXkrZS5rZXksdC52YWx1ZSxlLm1lc3NhZ2UpfSkpO3ZhciByPWUudmFsdWUuZXhwcmVzc2lvbnx8ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb247aWYoInByb3BlcnR5Ij09PXQuZXhwcmVzc2lvbkNvbnRleHQmJiJ0ZXh0LWZvbnQiPT09dC5wcm9wZXJ0eUtleSYmIXIub3V0cHV0RGVmaW5lZCgpKXJldHVybltuZXcgU3QodC5rZXksdC52YWx1ZSwnSW52YWxpZCBkYXRhIGV4cHJlc3Npb24gZm9yICInK3QucHJvcGVydHlLZXkrJyIuIE91dHB1dCB2YWx1ZXMgbXVzdCBiZSBjb250YWluZWQgYXMgbGl0ZXJhbHMgd2l0aGluIHRoZSBleHByZXNzaW9uLicpXTtpZigicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dCYmImxheW91dCI9PT10LnByb3BlcnR5VHlwZSYmIURlKHIpKXJldHVybltuZXcgU3QodC5rZXksdC52YWx1ZSwnImZlYXR1cmUtc3RhdGUiIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBsYXlvdXQgcHJvcGVydGllcy4nKV07aWYoImZpbHRlciI9PT10LmV4cHJlc3Npb25Db250ZXh0JiYhRGUocikpcmV0dXJuW25ldyBTdCh0LmtleSx0LnZhbHVlLCciZmVhdHVyZS1zdGF0ZSIgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGZpbHRlcnMuJyldO2lmKHQuZXhwcmVzc2lvbkNvbnRleHQmJjA9PT10LmV4cHJlc3Npb25Db250ZXh0LmluZGV4T2YoImNsdXN0ZXIiKSl7aWYoIVJlKHIsWyJ6b29tIiwiZmVhdHVyZS1zdGF0ZSJdKSlyZXR1cm5bbmV3IFN0KHQua2V5LHQudmFsdWUsJyJ6b29tIiBhbmQgImZlYXR1cmUtc3RhdGUiIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggY2x1c3RlciBwcm9wZXJ0aWVzLicpXTtpZigiY2x1c3Rlci1pbml0aWFsIj09PXQuZXhwcmVzc2lvbkNvbnRleHQmJiFPZShyKSlyZXR1cm5bbmV3IFN0KHQua2V5LHQudmFsdWUsIkZlYXR1cmUgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGluaXRpYWwgZXhwcmVzc2lvbiBwYXJ0IG9mIGNsdXN0ZXIgcHJvcGVydGllcy4iKV19cmV0dXJuW119ZnVuY3Rpb24gJHIodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT1bXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuLnZhbHVlcyk/LTE9PT1uLnZhbHVlcy5pbmRleE9mKEx0KHIpKSYmaS5wdXNoKG5ldyBTdChlLHIsImV4cGVjdGVkIG9uZSBvZiBbIituLnZhbHVlcy5qb2luKCIsICIpKyJdLCAiK0pTT04uc3RyaW5naWZ5KHIpKyIgZm91bmQiKSk6LTE9PT1PYmplY3Qua2V5cyhuLnZhbHVlcykuaW5kZXhPZihMdChyKSkmJmkucHVzaChuZXcgU3QoZSxyLCJleHBlY3RlZCBvbmUgb2YgWyIrT2JqZWN0LmtleXMobi52YWx1ZXMpLmpvaW4oIiwgIikrIl0sICIrSlNPTi5zdHJpbmdpZnkocikrIiBmb3VuZCIpKSxpfWZ1bmN0aW9uIHRuKHQpe2lmKCEwPT09dHx8ITE9PT10KXJldHVybiEwO2lmKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGgpcmV0dXJuITE7c3dpdGNoKHRbMF0pe2Nhc2UiaGFzIjpyZXR1cm4gdC5sZW5ndGg+PTImJiIkaWQiIT09dFsxXSYmIiR0eXBlIiE9PXRbMV07Y2FzZSJpbiI6cmV0dXJuIHQubGVuZ3RoPj0zJiYoInN0cmluZyIhPXR5cGVvZiB0WzFdfHxBcnJheS5pc0FycmF5KHRbMl0pKTtjYXNlIiFpbiI6Y2FzZSIhaGFzIjpjYXNlIm5vbmUiOnJldHVybiExO2Nhc2UiPT0iOmNhc2UiIT0iOmNhc2UiPiI6Y2FzZSI+PSI6Y2FzZSI8IjpjYXNlIjw9IjpyZXR1cm4gMyE9PXQubGVuZ3RofHxBcnJheS5pc0FycmF5KHRbMV0pfHxBcnJheS5pc0FycmF5KHRbMl0pO2Nhc2UiYW55IjpjYXNlImFsbCI6Zm9yKHZhciBlPTAscj10LnNsaWNlKDEpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtpZighdG4obikmJiJib29sZWFuIiE9dHlwZW9mIG4pcmV0dXJuITF9cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMH19V3IuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBXcih0Ll9wYXJhbWV0ZXJzLHQuX3NwZWNpZmljYXRpb24pfSxXci5zZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJue19wYXJhbWV0ZXJzOnQuX3BhcmFtZXRlcnMsX3NwZWNpZmljYXRpb246dC5fc3BlY2lmaWNhdGlvbn19O3ZhciBlbj17dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSx0cmFuc2l0aW9uOiExLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4iLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX19O2Z1bmN0aW9uIHJuKHQpe2lmKG51bGw9PXQpcmV0dXJue2ZpbHRlcjpmdW5jdGlvbigpe3JldHVybiEwfSxuZWVkR2VvbWV0cnk6ITF9O3RuKHQpfHwodD1hbih0KSk7dmFyIGU9cXIodCxlbik7aWYoImVycm9yIj09PWUucmVzdWx0KXRocm93IG5ldyBFcnJvcihlLnZhbHVlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5KyI6ICIrdC5tZXNzYWdlfSkpLmpvaW4oIiwgIikpO3JldHVybntmaWx0ZXI6ZnVuY3Rpb24odCxyLG4pe3JldHVybiBlLnZhbHVlLmV2YWx1YXRlKHQscix7fSxuKX0sbmVlZEdlb21ldHJ5OmZ1bmN0aW9uIHQoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuITE7aWYoIndpdGhpbiI9PT1lWzBdKXJldHVybiEwO2Zvcih2YXIgcj0xO3I8ZS5sZW5ndGg7cisrKWlmKHQoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9KHQpfX1mdW5jdGlvbiBubih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBhbih0KXtpZighdClyZXR1cm4hMDt2YXIgZSxyPXRbMF07cmV0dXJuIHQubGVuZ3RoPD0xPyJhbnkiIT09cjoiPT0iPT09cj9vbih0WzFdLHRbMl0sIj09Iik6IiE9Ij09PXI/Y24ob24odFsxXSx0WzJdLCI9PSIpKToiPCI9PT1yfHwiPiI9PT1yfHwiPD0iPT09cnx8Ij49Ij09PXI/b24odFsxXSx0WzJdLHIpOiJhbnkiPT09cj8oZT10LnNsaWNlKDEpLFsiYW55Il0uY29uY2F0KGUubWFwKGFuKSkpOiJhbGwiPT09cj9bImFsbCJdLmNvbmNhdCh0LnNsaWNlKDEpLm1hcChhbikpOiJub25lIj09PXI/WyJhbGwiXS5jb25jYXQodC5zbGljZSgxKS5tYXAoYW4pLm1hcChjbikpOiJpbiI9PT1yP3NuKHRbMV0sdC5zbGljZSgyKSk6IiFpbiI9PT1yP2NuKHNuKHRbMV0sdC5zbGljZSgyKSkpOiJoYXMiPT09cj9sbih0WzFdKToiIWhhcyI9PT1yP2NuKGxuKHRbMV0pKToid2l0aGluIiE9PXJ8fHR9ZnVuY3Rpb24gb24odCxlLHIpe3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm5bImZpbHRlci10eXBlLSIrcixlXTtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaWQtIityLGVdO2RlZmF1bHQ6cmV0dXJuWyJmaWx0ZXItIityLHQsZV19fWZ1bmN0aW9uIHNuKHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiExO3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm5bImZpbHRlci10eXBlLWluIixbImxpdGVyYWwiLGVdXTtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaWQtaW4iLFsibGl0ZXJhbCIsZV1dO2RlZmF1bHQ6cmV0dXJuIGUubGVuZ3RoPjIwMCYmIWUuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0IT10eXBlb2YgZVswXX0pKT9bImZpbHRlci1pbi1sYXJnZSIsdCxbImxpdGVyYWwiLGUuc29ydChubildXTpbImZpbHRlci1pbi1zbWFsbCIsdCxbImxpdGVyYWwiLGVdXX19ZnVuY3Rpb24gbG4odCl7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVybiEwO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1oYXMtaWQiXTtkZWZhdWx0OnJldHVyblsiZmlsdGVyLWhhcyIsdF19fWZ1bmN0aW9uIGNuKHQpe3JldHVyblsiISIsdF19ZnVuY3Rpb24gdW4odCl7cmV0dXJuIHRuKFB0KHQudmFsdWUpKT9RcihDdCh7fSx0LHtleHByZXNzaW9uQ29udGV4dDoiZmlsdGVyIix2YWx1ZVNwZWM6e3ZhbHVlOiJib29sZWFuIn19KSk6ZnVuY3Rpb24gdChlKXt2YXIgcj1lLnZhbHVlLG49ZS5rZXk7aWYoImFycmF5IiE9PXpyKHIpKXJldHVybltuZXcgU3QobixyLCJhcnJheSBleHBlY3RlZCwgIit6cihyKSsiIGZvdW5kIildO3ZhciBpLGE9ZS5zdHlsZVNwZWMsbz1bXTtpZihyLmxlbmd0aDwxKXJldHVybltuZXcgU3QobixyLCJmaWx0ZXIgYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IDEgZWxlbWVudCIpXTtzd2l0Y2gobz1vLmNvbmNhdCgkcih7a2V5Om4rIlswXSIsdmFsdWU6clswXSx2YWx1ZVNwZWM6YS5maWx0ZXJfb3BlcmF0b3Isc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSksTHQoclswXSkpe2Nhc2UiPCI6Y2FzZSI8PSI6Y2FzZSI+IjpjYXNlIj49IjpyLmxlbmd0aD49MiYmIiR0eXBlIj09PUx0KHJbMV0pJiZvLnB1c2gobmV3IFN0KG4sciwnIiR0eXBlIiBjYW5ub3QgYmUgdXNlIHdpdGggb3BlcmF0b3IgIicrclswXSsnIicpKTtjYXNlIj09IjpjYXNlIiE9IjozIT09ci5sZW5ndGgmJm8ucHVzaChuZXcgU3QobixyLCdmaWx0ZXIgYXJyYXkgZm9yIG9wZXJhdG9yICInK3JbMF0rJyIgbXVzdCBoYXZlIDMgZWxlbWVudHMnKSk7Y2FzZSJpbiI6Y2FzZSIhaW4iOnIubGVuZ3RoPj0yJiYic3RyaW5nIiE9PShpPXpyKHJbMV0pKSYmby5wdXNoKG5ldyBTdChuKyJbMV0iLHJbMV0sInN0cmluZyBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7Zm9yKHZhciBzPTI7czxyLmxlbmd0aDtzKyspaT16cihyW3NdKSwiJHR5cGUiPT09THQoclsxXSk/bz1vLmNvbmNhdCgkcih7a2V5Om4rIlsiK3MrIl0iLHZhbHVlOnJbc10sdmFsdWVTcGVjOmEuZ2VvbWV0cnlfdHlwZSxzdHlsZTplLnN0eWxlLHN0eWxlU3BlYzplLnN0eWxlU3BlY30pKToic3RyaW5nIiE9PWkmJiJudW1iZXIiIT09aSYmImJvb2xlYW4iIT09aSYmby5wdXNoKG5ldyBTdChuKyJbIitzKyJdIixyW3NdLCJzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7YnJlYWs7Y2FzZSJhbnkiOmNhc2UiYWxsIjpjYXNlIm5vbmUiOmZvcih2YXIgbD0xO2w8ci5sZW5ndGg7bCsrKW89by5jb25jYXQodCh7a2V5Om4rIlsiK2wrIl0iLHZhbHVlOnJbbF0sc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk7YnJlYWs7Y2FzZSJoYXMiOmNhc2UiIWhhcyI6aT16cihyWzFdKSwyIT09ci5sZW5ndGg/by5wdXNoKG5ldyBTdChuLHIsJ2ZpbHRlciBhcnJheSBmb3IgIicrclswXSsnIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50cycpKToic3RyaW5nIiE9PWkmJm8ucHVzaChuZXcgU3QobisiWzFdIixyWzFdLCJzdHJpbmcgZXhwZWN0ZWQsICIraSsiIGZvdW5kIikpO2JyZWFrO2Nhc2Uid2l0aGluIjppPXpyKHJbMV0pLDIhPT1yLmxlbmd0aD9vLnB1c2gobmV3IFN0KG4sciwnZmlsdGVyIGFycmF5IGZvciAiJytyWzBdKyciIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzJykpOiJvYmplY3QiIT09aSYmby5wdXNoKG5ldyBTdChuKyJbMV0iLHJbMV0sIm9iamVjdCBleHBlY3RlZCwgIitpKyIgZm91bmQiKSl9cmV0dXJuIG99KHQpfWZ1bmN0aW9uIGhuKHQsZSl7dmFyIHI9dC5rZXksbj10LnN0eWxlLGk9dC5zdHlsZVNwZWMsYT10LnZhbHVlLG89dC5vYmplY3RLZXkscz1pW2UrIl8iK3QubGF5ZXJUeXBlXTtpZighcylyZXR1cm5bXTt2YXIgbD1vLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2lmKCJwYWludCI9PT1lJiZsJiZzW2xbMV1dJiZzW2xbMV1dLnRyYW5zaXRpb24pcmV0dXJuIGJuKHtrZXk6cix2YWx1ZTphLHZhbHVlU3BlYzppLnRyYW5zaXRpb24sc3R5bGU6bixzdHlsZVNwZWM6aX0pO3ZhciBjLHU9dC52YWx1ZVNwZWN8fHNbb107aWYoIXUpcmV0dXJuW25ldyBTdChyLGEsJ3Vua25vd24gcHJvcGVydHkgIicrbysnIicpXTtpZigic3RyaW5nIj09PXpyKGEpJiZMcih1KSYmIXUudG9rZW5zJiYoYz0vXnsoW159XSspfSQvLmV4ZWMoYSkpKXJldHVybltuZXcgU3QocixhLCciJytvKyciIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJwb2xhdGlvbiBzeW50YXhcblVzZSBhbiBpZGVudGl0eSBwcm9wZXJ0eSBmdW5jdGlvbiBpbnN0ZWFkOiBgeyAidHlwZSI6ICJpZGVudGl0eSIsICJwcm9wZXJ0eSI6ICcrSlNPTi5zdHJpbmdpZnkoY1sxXSkrIiB9YC4iKV07dmFyIGg9W107cmV0dXJuInN5bWJvbCI9PT10LmxheWVyVHlwZSYmKCJ0ZXh0LWZpZWxkIj09PW8mJm4mJiFuLmdseXBocyYmaC5wdXNoKG5ldyBTdChyLGEsJ3VzZSBvZiAidGV4dC1maWVsZCIgcmVxdWlyZXMgYSBzdHlsZSAiZ2x5cGhzIiBwcm9wZXJ0eScpKSwidGV4dC1mb250Ij09PW8mJk9yKFB0KGEpKSYmImlkZW50aXR5Ij09PUx0KGEudHlwZSkmJmgucHVzaChuZXcgU3QocixhLCcidGV4dC1mb250IiBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aXR5IGZ1bmN0aW9ucycpKSksaC5jb25jYXQoYm4oe2tleTp0LmtleSx2YWx1ZTphLHZhbHVlU3BlYzp1LHN0eWxlOm4sc3R5bGVTcGVjOmksZXhwcmVzc2lvbkNvbnRleHQ6InByb3BlcnR5Iixwcm9wZXJ0eVR5cGU6ZSxwcm9wZXJ0eUtleTpvfSkpfWZ1bmN0aW9uIGZuKHQpe3JldHVybiBobih0LCJwYWludCIpfWZ1bmN0aW9uIHBuKHQpe3JldHVybiBobih0LCJsYXlvdXQiKX1mdW5jdGlvbiBkbih0KXt2YXIgZT1bXSxyPXQudmFsdWUsbj10LmtleSxpPXQuc3R5bGUsYT10LnN0eWxlU3BlYztyLnR5cGV8fHIucmVmfHxlLnB1c2gobmV3IFN0KG4sciwnZWl0aGVyICJ0eXBlIiBvciAicmVmIiBpcyByZXF1aXJlZCcpKTt2YXIgbyxzPUx0KHIudHlwZSksbD1MdChyLnJlZik7aWYoci5pZClmb3IodmFyIGM9THQoci5pZCksdT0wO3U8dC5hcnJheUluZGV4O3UrKyl7dmFyIGg9aS5sYXllcnNbdV07THQoaC5pZCk9PT1jJiZlLnB1c2gobmV3IFN0KG4sci5pZCwnZHVwbGljYXRlIGxheWVyIGlkICInK3IuaWQrJyIsIHByZXZpb3VzbHkgdXNlZCBhdCBsaW5lICcraC5pZC5fX2xpbmVfXykpfWlmKCJyZWYiaW4gcilbInR5cGUiLCJzb3VyY2UiLCJzb3VyY2UtbGF5ZXIiLCJmaWx0ZXIiLCJsYXlvdXQiXS5mb3JFYWNoKChmdW5jdGlvbih0KXt0IGluIHImJmUucHVzaChuZXcgU3QobixyW3RdLCciJyt0KyciIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnMnKSl9KSksaS5sYXllcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7THQodC5pZCk9PT1sJiYobz10KX0pKSxvP28ucmVmP2UucHVzaChuZXcgU3QobixyLnJlZiwicmVmIGNhbm5vdCByZWZlcmVuY2UgYW5vdGhlciByZWYgbGF5ZXIiKSk6cz1MdChvLnR5cGUpOmUucHVzaChuZXcgU3QobixyLnJlZiwncmVmIGxheWVyICInK2wrJyIgbm90IGZvdW5kJykpO2Vsc2UgaWYoImJhY2tncm91bmQiIT09cylpZihyLnNvdXJjZSl7dmFyIGY9aS5zb3VyY2VzJiZpLnNvdXJjZXNbci5zb3VyY2VdLHA9ZiYmTHQoZi50eXBlKTtmPyJ2ZWN0b3IiPT09cCYmInJhc3RlciI9PT1zP2UucHVzaChuZXcgU3QobixyLnNvdXJjZSwnbGF5ZXIgIicrci5pZCsnIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2UnKSk6InJhc3RlciI9PT1wJiYicmFzdGVyIiE9PXM/ZS5wdXNoKG5ldyBTdChuLHIuc291cmNlLCdsYXllciAiJytyLmlkKyciIHJlcXVpcmVzIGEgdmVjdG9yIHNvdXJjZScpKToidmVjdG9yIiE9PXB8fHJbInNvdXJjZS1sYXllciJdPyJyYXN0ZXItZGVtIj09PXAmJiJoaWxsc2hhZGUiIT09cz9lLnB1c2gobmV3IFN0KG4sci5zb3VyY2UsInJhc3Rlci1kZW0gc291cmNlIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBsYXllciB0eXBlICdoaWxsc2hhZGUnLiIpKToibGluZSIhPT1zfHwhci5wYWludHx8IXIucGFpbnRbImxpbmUtZ3JhZGllbnQiXXx8Imdlb2pzb24iPT09cCYmZi5saW5lTWV0cmljc3x8ZS5wdXNoKG5ldyBTdChuLHIsJ2xheWVyICInK3IuaWQrJyIgc3BlY2lmaWVzIGEgbGluZS1ncmFkaWVudCwgd2hpY2ggcmVxdWlyZXMgYSBHZW9KU09OIHNvdXJjZSB3aXRoIGBsaW5lTWV0cmljc2AgZW5hYmxlZC4nKSk6ZS5wdXNoKG5ldyBTdChuLHIsJ2xheWVyICInK3IuaWQrJyIgbXVzdCBzcGVjaWZ5IGEgInNvdXJjZS1sYXllciInKSk6ZS5wdXNoKG5ldyBTdChuLHIuc291cmNlLCdzb3VyY2UgIicrci5zb3VyY2UrJyIgbm90IGZvdW5kJykpfWVsc2UgZS5wdXNoKG5ldyBTdChuLHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInNvdXJjZSInKSk7cmV0dXJuIGU9ZS5jb25jYXQoWnIoe2tleTpuLHZhbHVlOnIsdmFsdWVTcGVjOmEubGF5ZXIsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbigpe3JldHVybltdfSx0eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIGJuKHtrZXk6bisiLnR5cGUiLHZhbHVlOnIudHlwZSx2YWx1ZVNwZWM6YS5sYXllci50eXBlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdDpyLG9iamVjdEtleToidHlwZSJ9KX0sZmlsdGVyOnVuLGxheW91dDpmdW5jdGlvbih0KXtyZXR1cm4gWnIoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbih0KXtyZXR1cm4gcG4oQ3Qoe2xheWVyVHlwZTpzfSx0KSl9fX0pfSxwYWludDpmdW5jdGlvbih0KXtyZXR1cm4gWnIoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbih0KXtyZXR1cm4gZm4oQ3Qoe2xheWVyVHlwZTpzfSx0KSl9fX0pfX19KSl9ZnVuY3Rpb24gZ24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49enIoZSk7cmV0dXJuInN0cmluZyIhPT1uP1tuZXcgU3QocixlLCJzdHJpbmcgZXhwZWN0ZWQsICIrbisiIGZvdW5kIildOltdfXZhciBtbj17cHJvbW90ZUlkOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZTtpZigic3RyaW5nIj09PXpyKHIpKXJldHVybiBnbih7a2V5OmUsdmFsdWU6cn0pO3ZhciBuPVtdO2Zvcih2YXIgaSBpbiByKW4ucHVzaC5hcHBseShuLGduKHtrZXk6ZSsiLiIraSx2YWx1ZTpyW2ldfSkpO3JldHVybiBufX07ZnVuY3Rpb24gdm4odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49dC5zdHlsZVNwZWMsaT10LnN0eWxlO2lmKCFlLnR5cGUpcmV0dXJuW25ldyBTdChyLGUsJyJ0eXBlIiBpcyByZXF1aXJlZCcpXTt2YXIgYSxvPUx0KGUudHlwZSk7c3dpdGNoKG8pe2Nhc2UidmVjdG9yIjpjYXNlInJhc3RlciI6Y2FzZSJyYXN0ZXItZGVtIjpyZXR1cm4gWnIoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm5bInNvdXJjZV8iK28ucmVwbGFjZSgiLSIsIl8iKV0sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6bixvYmplY3RFbGVtZW50VmFsaWRhdG9yczptbn0pO2Nhc2UiZ2VvanNvbiI6aWYoYT1acih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfZ2VvanNvbixzdHlsZTppLHN0eWxlU3BlYzpuLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOm1ufSksZS5jbHVzdGVyKWZvcih2YXIgcyBpbiBlLmNsdXN0ZXJQcm9wZXJ0aWVzKXt2YXIgbD1lLmNsdXN0ZXJQcm9wZXJ0aWVzW3NdLGM9bFswXSx1PSJzdHJpbmciPT10eXBlb2YgYz9bYyxbImFjY3VtdWxhdGVkIl0sWyJnZXQiLHNdXTpjO2EucHVzaC5hcHBseShhLFFyKHtrZXk6cisiLiIrcysiLm1hcCIsdmFsdWU6bFsxXSxleHByZXNzaW9uQ29udGV4dDoiY2x1c3Rlci1tYXAifSkpLGEucHVzaC5hcHBseShhLFFyKHtrZXk6cisiLiIrcysiLnJlZHVjZSIsdmFsdWU6dSxleHByZXNzaW9uQ29udGV4dDoiY2x1c3Rlci1yZWR1Y2UifSkpfXJldHVybiBhO2Nhc2UidmlkZW8iOnJldHVybiBacih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfdmlkZW8sc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2UiaW1hZ2UiOnJldHVybiBacih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfaW1hZ2Usc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2UiY2FudmFzIjpyZXR1cm5bbmV3IFN0KHIsbnVsbCwiUGxlYXNlIHVzZSBydW50aW1lIEFQSXMgdG8gYWRkIGNhbnZhcyBzb3VyY2VzLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgdGhlbSBpbiBzdHlsZXNoZWV0cy4iLCJzb3VyY2UuY2FudmFzIildO2RlZmF1bHQ6cmV0dXJuICRyKHtrZXk6cisiLnR5cGUiLHZhbHVlOmUudHlwZSx2YWx1ZVNwZWM6e3ZhbHVlczpbInZlY3RvciIsInJhc3RlciIsInJhc3Rlci1kZW0iLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSJdfSxzdHlsZTppLHN0eWxlU3BlYzpufSl9fWZ1bmN0aW9uIHluKHQpe3ZhciBlPXQudmFsdWUscj10LnN0eWxlU3BlYyxuPXIubGlnaHQsaT10LnN0eWxlLGE9W10sbz16cihlKTtpZih2b2lkIDA9PT1lKXJldHVybiBhO2lmKCJvYmplY3QiIT09bylyZXR1cm4gYS5jb25jYXQoW25ldyBTdCgibGlnaHQiLGUsIm9iamVjdCBleHBlY3RlZCwgIitvKyIgZm91bmQiKV0pO2Zvcih2YXIgcyBpbiBlKXt2YXIgbD1zLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2E9YS5jb25jYXQobCYmbltsWzFdXSYmbltsWzFdXS50cmFuc2l0aW9uP2JuKHtrZXk6cyx2YWx1ZTplW3NdLHZhbHVlU3BlYzpyLnRyYW5zaXRpb24sc3R5bGU6aSxzdHlsZVNwZWM6cn0pOm5bc10/Ym4oe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOm5bc10sc3R5bGU6aSxzdHlsZVNwZWM6cn0pOltuZXcgU3QocyxlW3NdLCd1bmtub3duIHByb3BlcnR5ICInK3MrJyInKV0pfXJldHVybiBhfXZhciB4bj17IioiOmZ1bmN0aW9uKCl7cmV0dXJuW119LGFycmF5OlhyLGJvb2xlYW46ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49enIoZSk7cmV0dXJuImJvb2xlYW4iIT09bj9bbmV3IFN0KHIsZSwiYm9vbGVhbiBleHBlY3RlZCwgIituKyIgZm91bmQiKV06W119LG51bWJlcjpKcixjb2xvcjpmdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj16cihyKTtyZXR1cm4ic3RyaW5nIiE9PW4/W25ldyBTdChlLHIsImNvbG9yIGV4cGVjdGVkLCAiK24rIiBmb3VuZCIpXTpudWxsPT09SnQocik/W25ldyBTdChlLHIsJ2NvbG9yIGV4cGVjdGVkLCAiJytyKyciIGZvdW5kJyldOltdfSxjb25zdGFudHM6RXQsZW51bTokcixmaWx0ZXI6dW4sZnVuY3Rpb246S3IsbGF5ZXI6ZG4sb2JqZWN0OlpyLHNvdXJjZTp2bixsaWdodDp5bixzdHJpbmc6Z24sZm9ybWF0dGVkOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09Z24odCkubGVuZ3RoP1tdOlFyKHQpfSxyZXNvbHZlZEltYWdlOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09Z24odCkubGVuZ3RoP1tdOlFyKHQpfX07ZnVuY3Rpb24gYm4odCl7dmFyIGU9dC52YWx1ZSxyPXQudmFsdWVTcGVjLG49dC5zdHlsZVNwZWM7cmV0dXJuIHIuZXhwcmVzc2lvbiYmT3IoTHQoZSkpP0tyKHQpOnIuZXhwcmVzc2lvbiYmVnIoUHQoZSkpP1FyKHQpOnIudHlwZSYmeG5bci50eXBlXT94bltyLnR5cGVdKHQpOlpyKEN0KHt9LHQse3ZhbHVlU3BlYzpyLnR5cGU/bltyLnR5cGVdOnJ9KSl9ZnVuY3Rpb24gX24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49Z24odCk7cmV0dXJuIG4ubGVuZ3RofHwoLTE9PT1lLmluZGV4T2YoIntmb250c3RhY2t9IikmJm4ucHVzaChuZXcgU3QocixlLCciZ2x5cGhzIiB1cmwgbXVzdCBpbmNsdWRlIGEgIntmb250c3RhY2t9IiB0b2tlbicpKSwtMT09PWUuaW5kZXhPZigie3JhbmdlfSIpJiZuLnB1c2gobmV3IFN0KHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7cmFuZ2V9IiB0b2tlbicpKSksbn1mdW5jdGlvbiB3bih0LGUpe3ZvaWQgMD09PWUmJihlPUF0KTt2YXIgcj1bXTtyZXR1cm4gcj1yLmNvbmNhdChibih7a2V5OiIiLHZhbHVlOnQsdmFsdWVTcGVjOmUuJHJvb3Qsc3R5bGVTcGVjOmUsc3R5bGU6dCxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7Z2x5cGhzOl9uLCIqIjpmdW5jdGlvbigpe3JldHVybltdfX19KSksdC5jb25zdGFudHMmJihyPXIuY29uY2F0KEV0KHtrZXk6ImNvbnN0YW50cyIsdmFsdWU6dC5jb25zdGFudHMsc3R5bGU6dCxzdHlsZVNwZWM6ZX0pKSksVG4ocil9ZnVuY3Rpb24gVG4odCl7cmV0dXJuW10uY29uY2F0KHQpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluZS1lLmxpbmV9KSl9ZnVuY3Rpb24ga24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO3JldHVybiBUbih0LmFwcGx5KHRoaXMsZSkpfX13bi5zb3VyY2U9a24odm4pLHduLmxpZ2h0PWtuKHluKSx3bi5sYXllcj1rbihkbiksd24uZmlsdGVyPWtuKHVuKSx3bi5wYWludFByb3BlcnR5PWtuKGZuKSx3bi5sYXlvdXRQcm9wZXJ0eT1rbihwbik7dmFyIE1uPXduLEFuPU1uLmxpZ2h0LFNuPU1uLnBhaW50UHJvcGVydHksRW49TW4ubGF5b3V0UHJvcGVydHk7ZnVuY3Rpb24gQ24odCxlKXt2YXIgcj0hMTtpZihlJiZlLmxlbmd0aClmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXQuZmlyZShuZXcga3QobmV3IEVycm9yKGlbbl0ubWVzc2FnZSkpKSxyPSEwO3JldHVybiByfXZhciBMbj1QbjtmdW5jdGlvbiBQbih0LGUscil7dmFyIG49dGhpcy5jZWxscz1bXTtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe3RoaXMuYXJyYXlCdWZmZXI9dDt2YXIgaT1uZXcgSW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTt0PWlbMF0sdGhpcy5kPShlPWlbMV0pKzIqKHI9aVsyXSk7Zm9yKHZhciBhPTA7YTx0aGlzLmQqdGhpcy5kO2ErKyl7dmFyIG89aVszK2FdLHM9aVszK2ErMV07bi5wdXNoKG89PT1zP251bGw6aS5zdWJhcnJheShvLHMpKX12YXIgbD1pWzMrbi5sZW5ndGgrMV07dGhpcy5rZXlzPWkuc3ViYXJyYXkoaVszK24ubGVuZ3RoXSxsKSx0aGlzLmJib3hlcz1pLnN1YmFycmF5KGwpLHRoaXMuaW5zZXJ0PXRoaXMuX2luc2VydFJlYWRvbmx5fWVsc2V7dGhpcy5kPWUrMipyO2Zvcih2YXIgYz0wO2M8dGhpcy5kKnRoaXMuZDtjKyspbi5wdXNoKFtdKTt0aGlzLmtleXM9W10sdGhpcy5iYm94ZXM9W119dGhpcy5uPWUsdGhpcy5leHRlbnQ9dCx0aGlzLnBhZGRpbmc9cix0aGlzLnNjYWxlPWUvdCx0aGlzLnVpZD0wO3ZhciB1PXIvZSp0O3RoaXMubWluPS11LHRoaXMubWF4PXQrdX1Qbi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRDZWxsLHRoaXMudWlkKyspLHRoaXMua2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LFBuLnByb3RvdHlwZS5faW5zZXJ0UmVhZG9ubHk9ZnVuY3Rpb24oKXt0aHJvdyJDYW5ub3QgaW5zZXJ0IGludG8gYSBHcmlkSW5kZXggY3JlYXRlZCBmcm9tIGFuIEFycmF5QnVmZmVyLiJ9LFBuLnByb3RvdHlwZS5faW5zZXJ0Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jZWxsc1tpXS5wdXNoKGEpfSxQbi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLm1pbixvPXRoaXMubWF4O2lmKHQ8PWEmJmU8PWEmJm88PXImJm88PW4mJiFpKXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmtleXMpO3ZhciBzPVtdO3JldHVybiB0aGlzLl9mb3JFYWNoQ2VsbCh0LGUscixuLHRoaXMuX3F1ZXJ5Q2VsbCxzLHt9LGkpLHN9LFBuLnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9dGhpcy5jZWxsc1tpXTtpZihudWxsIT09bClmb3IodmFyIGM9dGhpcy5rZXlzLHU9dGhpcy5iYm94ZXMsaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1sW2hdO2lmKHZvaWQgMD09PW9bZl0pe3ZhciBwPTQqZjsocz9zKHVbcCswXSx1W3ArMV0sdVtwKzJdLHVbcCszXSk6dDw9dVtwKzJdJiZlPD11W3ArM10mJnI+PXVbcCswXSYmbj49dVtwKzFdKT8ob1tmXT0hMCxhLnB1c2goY1tmXSkpOm9bZl09ITF9fX0sUG4ucHJvdG90eXBlLl9mb3JFYWNoQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQodCksYz10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoZSksdT10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQociksaD10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQobiksZj1sO2Y8PXU7ZisrKWZvcih2YXIgcD1jO3A8PWg7cCsrKXt2YXIgZD10aGlzLmQqcCtmO2lmKCghc3x8cyh0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChmKSx0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChwKSx0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChmKzEpLHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHArMSkpKSYmaS5jYWxsKHRoaXMsdCxlLHIsbixkLGEsbyxzKSlyZXR1cm59fSxQbi5wcm90b3R5cGUuX2NvbnZlcnRGcm9tQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMucGFkZGluZykvdGhpcy5zY2FsZX0sUG4ucHJvdG90eXBlLl9jb252ZXJ0VG9DZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5kLTEsTWF0aC5mbG9vcih0KnRoaXMuc2NhbGUpK3RoaXMucGFkZGluZykpfSxQbi5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKHRoaXMuYXJyYXlCdWZmZXIpcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXI7Zm9yKHZhciB0PXRoaXMuY2VsbHMsZT0zK3RoaXMuY2VsbHMubGVuZ3RoKzErMSxyPTAsbj0wO248dGhpcy5jZWxscy5sZW5ndGg7bisrKXIrPXRoaXMuY2VsbHNbbl0ubGVuZ3RoO3ZhciBpPW5ldyBJbnQzMkFycmF5KGUrcit0aGlzLmtleXMubGVuZ3RoK3RoaXMuYmJveGVzLmxlbmd0aCk7aVswXT10aGlzLmV4dGVudCxpWzFdPXRoaXMubixpWzJdPXRoaXMucGFkZGluZztmb3IodmFyIGE9ZSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aVszK29dPWEsaS5zZXQocyxhKSxhKz1zLmxlbmd0aH1yZXR1cm4gaVszK3QubGVuZ3RoXT1hLGkuc2V0KHRoaXMua2V5cyxhKSxpWzMrdC5sZW5ndGgrMV09YSs9dGhpcy5rZXlzLmxlbmd0aCxpLnNldCh0aGlzLmJib3hlcyxhKSxhKz10aGlzLmJib3hlcy5sZW5ndGgsaS5idWZmZXJ9O3ZhciBJbj1zZWxmLkltYWdlRGF0YSx6bj1zZWxmLkltYWdlQml0bWFwLE9uPXt9O2Z1bmN0aW9uIERuKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9jbGFzc1JlZ2lzdHJ5S2V5Iix7dmFsdWU6dCx3cml0ZWFibGU6ITF9KSxPblt0XT17a2xhc3M6ZSxvbWl0OnIub21pdHx8W10sc2hhbGxvdzpyLnNoYWxsb3d8fFtdfX1mb3IodmFyIFJuIGluIERuKCJPYmplY3QiLE9iamVjdCksTG4uc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50b0FycmF5QnVmZmVyKCk7cmV0dXJuIGUmJmUucHVzaChyKSx7YnVmZmVyOnJ9fSxMbi5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IExuKHQuYnVmZmVyKX0sRG4oIkdyaWQiLExuKSxEbigiQ29sb3IiLEt0KSxEbigiRXJyb3IiLEVycm9yKSxEbigiUmVzb2x2ZWRJbWFnZSIsZWUpLERuKCJTdHlsZVByb3BlcnR5RnVuY3Rpb24iLFdyKSxEbigiU3R5bGVFeHByZXNzaW9uIixVcix7b21pdDpbIl9ldmFsdWF0b3IiXX0pLERuKCJab29tRGVwZW5kZW50RXhwcmVzc2lvbiIsR3IpLERuKCJab29tQ29uc3RhbnRFeHByZXNzaW9uIixIciksRG4oIkNvbXBvdW5kRXhwcmVzc2lvbiIsbWUse29taXQ6WyJfZXZhbHVhdGUiXX0pLFRyKVRyW1JuXS5fY2xhc3NSZWdpc3RyeUtleXx8RG4oIkV4cHJlc3Npb25fIitSbixUcltSbl0pO2Z1bmN0aW9uIEZuKHQpe3JldHVybiB0JiYidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHx0LmNvbnN0cnVjdG9yJiYiQXJyYXlCdWZmZXIiPT09dC5jb25zdHJ1Y3Rvci5uYW1lKX1mdW5jdGlvbiBCbih0KXtyZXR1cm4gem4mJnQgaW5zdGFuY2VvZiB6bn1mdW5jdGlvbiBObih0LGUpe2lmKG51bGw9PXR8fCJib29sZWFuIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdHx8InN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQm9vbGVhbnx8dCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIERhdGV8fHQgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIHQ7aWYoRm4odCl8fEJuKHQpKXJldHVybiBlJiZlLnB1c2godCksdDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpe3ZhciByPXQ7cmV0dXJuIGUmJmUucHVzaChyLmJ1ZmZlcikscn1pZih0IGluc3RhbmNlb2YgSW4pcmV0dXJuIGUmJmUucHVzaCh0LmRhdGEuYnVmZmVyKSx0O2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgbj1bXSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSluLnB1c2goTm4oYVtpXSxlKSk7cmV0dXJuIG59aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgbz10LmNvbnN0cnVjdG9yLHM9by5fY2xhc3NSZWdpc3RyeUtleTtpZighcyl0aHJvdyBuZXcgRXJyb3IoImNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdW5yZWdpc3RlcmVkIGNsYXNzIik7dmFyIGw9by5zZXJpYWxpemU/by5zZXJpYWxpemUodCxlKTp7fTtpZighby5zZXJpYWxpemUpe2Zvcih2YXIgYyBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoYykmJiEoT25bc10ub21pdC5pbmRleE9mKGMpPj0wKSl7dmFyIHU9dFtjXTtsW2NdPU9uW3NdLnNoYWxsb3cuaW5kZXhPZihjKT49MD91Ok5uKHUsZSl9dCBpbnN0YW5jZW9mIEVycm9yJiYobC5tZXNzYWdlPXQubWVzc2FnZSl9aWYobC4kbmFtZSl0aHJvdyBuZXcgRXJyb3IoIiRuYW1lIHByb3BlcnR5IGlzIHJlc2VydmVkIGZvciB3b3JrZXIgc2VyaWFsaXphdGlvbiBsb2dpYy4iKTtyZXR1cm4iT2JqZWN0IiE9PXMmJihsLiRuYW1lPXMpLGx9dGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgIit0eXBlb2YgdCl9ZnVuY3Rpb24gam4odCl7aWYobnVsbD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0fHwic3RyaW5nIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBCb29sZWFufHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgRGF0ZXx8dCBpbnN0YW5jZW9mIFJlZ0V4cHx8Rm4odCl8fEJuKHQpfHxBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fHQgaW5zdGFuY2VvZiBJbilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcChqbik7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgZT10LiRuYW1lfHwiT2JqZWN0IixyPU9uW2VdLmtsYXNzO2lmKCFyKXRocm93IG5ldyBFcnJvcigiY2FuJ3QgZGVzZXJpYWxpemUgdW5yZWdpc3RlcmVkIGNsYXNzICIrZSk7aWYoci5kZXNlcmlhbGl6ZSlyZXR1cm4gci5kZXNlcmlhbGl6ZSh0KTtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksaT0wLGE9T2JqZWN0LmtleXModCk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO2lmKCIkbmFtZSIhPT1vKXt2YXIgcz10W29dO25bb109T25bZV0uc2hhbGxvdy5pbmRleE9mKG8pPj0wP3M6am4ocyl9fXJldHVybiBufXRocm93IG5ldyBFcnJvcigiY2FuJ3QgZGVzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgIit0eXBlb2YgdCl9dmFyIFVuPWZ1bmN0aW9uKCl7dGhpcy5maXJzdD0hMH07VW4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguZmxvb3IodCk7cmV0dXJuIHRoaXMuZmlyc3Q/KHRoaXMuZmlyc3Q9ITEsdGhpcy5sYXN0SW50ZWdlclpvb209cix0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9MCx0aGlzLmxhc3Rab29tPXQsdGhpcy5sYXN0Rmxvb3Jab29tPXIsITApOih0aGlzLmxhc3RGbG9vclpvb20+cj8odGhpcy5sYXN0SW50ZWdlclpvb209cisxLHRoaXMubGFzdEludGVnZXJab29tVGltZT1lKTp0aGlzLmxhc3RGbG9vclpvb208ciYmKHRoaXMubGFzdEludGVnZXJab29tPXIsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPWUpLHQhPT10aGlzLmxhc3Rab29tJiYodGhpcy5sYXN0Wm9vbT10LHRoaXMubGFzdEZsb29yWm9vbT1yLCEwKSl9O3ZhciBWbj17IkxhdGluLTEgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyOCYmdDw9MjU1fSxBcmFiaWM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE1MzYmJnQ8PTE3OTF9LCJBcmFiaWMgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE4NzImJnQ8PTE5MTl9LCJBcmFiaWMgRXh0ZW5kZWQtQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIyMDgmJnQ8PTIzMDN9LCJIYW5ndWwgSmFtbyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQzNTImJnQ8PTQ2MDd9LCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NTEyMCYmdDw9NTc1OX0sS2htZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYwMTYmJnQ8PTYxNDN9LCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjMyMCYmdDw9NjM5OX0sIkdlbmVyYWwgUHVuY3R1YXRpb24iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04MTkyJiZ0PD04MzAzfSwiTGV0dGVybGlrZSBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODQ0OCYmdDw9ODUyN30sIk51bWJlciBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg1MjgmJnQ8PTg1OTF9LCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg5NjAmJnQ8PTkyMTV9LCJDb250cm9sIFBpY3R1cmVzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTIxNiYmdDw9OTI3OX0sIk9wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTI4MCYmdDw9OTMxMX0sIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05MzEyJiZ0PD05NDcxfSwiR2VvbWV0cmljIFNoYXBlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTk2MzImJnQ8PTk3Mjd9LCJNaXNjZWxsYW5lb3VzIFN5bWJvbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NzI4JiZ0PD05OTgzfSwiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMTAwOCYmdDw9MTEyNjN9LCJDSksgUmFkaWNhbHMgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTExOTA0JiZ0PD0xMjAzMX0sIkthbmd4aSBSYWRpY2FscyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyMDMyJiZ0PD0xMjI1NX0sIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjI3MiYmdDw9MTIyODd9LCJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjI4OCYmdDw9MTIzNTF9LEhpcmFnYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjM1MiYmdDw9MTI0NDd9LEthdGFrYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjQ0OCYmdDw9MTI1NDN9LEJvcG9tb2ZvOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjU0NCYmdDw9MTI1OTF9LCJIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1OTImJnQ8PTEyNjg3fSxLYW5idW46ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNjg4JiZ0PD0xMjcwM30sIkJvcG9tb2ZvIEV4dGVuZGVkIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3MDQmJnQ8PTEyNzM1fSwiQ0pLIFN0cm9rZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjczNiYmdDw9MTI3ODN9LCJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3ODQmJnQ8PTEyNzk5fSwiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyODAwJiZ0PD0xMzA1NX0sIkNKSyBDb21wYXRpYmlsaXR5IjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTMwNTYmJnQ8PTEzMzExfSwiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMzEyJiZ0PD0xOTkwM30sIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTk5MDQmJnQ8PTE5OTY3fSwiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTY4JiZ0PD00MDk1OX0sIllpIFN5bGxhYmxlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQwOTYwJiZ0PD00MjEyN30sIllpIFJhZGljYWxzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDIxMjgmJnQ8PTQyMTkxfSwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQzMzYwJiZ0PD00MzM5MX0sIkhhbmd1bCBTeWxsYWJsZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00NDAzMiYmdDw9NTUyMTV9LCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NTUyMTYmJnQ8PTU1Mjk1fSwiUHJpdmF0ZSBVc2UgQXJlYSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU3MzQ0JiZ0PD02Mzc0M30sIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02Mzc0NCYmdDw9NjQyNTV9LCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NDMzNiYmdDw9NjUwMjN9LCJWZXJ0aWNhbCBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MDQwJiZ0PD02NTA1NX0sIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUwNzImJnQ8PTY1MTAzfSwiU21hbGwgRm9ybSBWYXJpYW50cyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MTA0JiZ0PD02NTEzNX0sIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MTM2JiZ0PD02NTI3OX0sIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUyODAmJnQ8PTY1NTE5fX07ZnVuY3Rpb24gcW4odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZihIbihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEhuKHQpe3JldHVybiEoNzQ2IT09dCYmNzQ3IT09dCYmKHQ8NDM1Mnx8IShWblsiQm9wb21vZm8gRXh0ZW5kZWQiXSh0KXx8Vm4uQm9wb21vZm8odCl8fFZuWyJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyJdKHQpJiYhKHQ+PTY1MDk3JiZ0PD02NTEwMyl8fFZuWyJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIl0odCl8fFZuWyJDSksgQ29tcGF0aWJpbGl0eSJdKHQpfHxWblsiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiXSh0KXx8Vm5bIkNKSyBTdHJva2VzIl0odCl8fCEoIVZuWyJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iXSh0KXx8dD49MTIyOTYmJnQ8PTEyMzA1fHx0Pj0xMjMwOCYmdDw9MTIzMTl8fDEyMzM2PT09dCl8fFZuWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBIl0odCl8fFZuWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0odCl8fFZuWyJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIl0odCl8fFZuWyJIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vIl0odCl8fFZuWyJIYW5ndWwgSmFtbyBFeHRlbmRlZC1BIl0odCl8fFZuWyJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CIl0odCl8fFZuWyJIYW5ndWwgSmFtbyJdKHQpfHxWblsiSGFuZ3VsIFN5bGxhYmxlcyJdKHQpfHxWbi5IaXJhZ2FuYSh0KXx8Vm5bIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiXSh0KXx8Vm4uS2FuYnVuKHQpfHxWblsiS2FuZ3hpIFJhZGljYWxzIl0odCl8fFZuWyJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zIl0odCl8fFZuLkthdGFrYW5hKHQpJiYxMjU0MCE9PXR8fCEoIVZuWyJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyJdKHQpfHw2NTI4OD09PXR8fDY1Mjg5PT09dHx8NjUyOTM9PT10fHx0Pj02NTMwNiYmdDw9NjUzMTB8fDY1MzM5PT09dHx8NjUzNDE9PT10fHw2NTM0Mz09PXR8fHQ+PTY1MzcxJiZ0PD02NTUwM3x8NjU1MDc9PT10fHx0Pj02NTUxMiYmdDw9NjU1MTkpfHwhKCFWblsiU21hbGwgRm9ybSBWYXJpYW50cyJdKHQpfHx0Pj02NTExMiYmdDw9NjUxMTh8fHQ+PTY1MTIzJiZ0PD02NTEyNil8fFZuWyJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIl0odCl8fFZuWyJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkIl0odCl8fFZuWyJWZXJ0aWNhbCBGb3JtcyJdKHQpfHxWblsiWWlqaW5nIEhleGFncmFtIFN5bWJvbHMiXSh0KXx8Vm5bIllpIFN5bGxhYmxlcyJdKHQpfHxWblsiWWkgUmFkaWNhbHMiXSh0KSkpKX1mdW5jdGlvbiBHbih0KXtyZXR1cm4hKEhuKHQpfHxmdW5jdGlvbih0KXtyZXR1cm4hIShWblsiTGF0aW4tMSBTdXBwbGVtZW50Il0odCkmJigxNjc9PT10fHwxNjk9PT10fHwxNzQ9PT10fHwxNzc9PT10fHwxODg9PT10fHwxODk9PT10fHwxOTA9PT10fHwyMTU9PT10fHwyNDc9PT10KXx8Vm5bIkdlbmVyYWwgUHVuY3R1YXRpb24iXSh0KSYmKDgyMTQ9PT10fHw4MjI0PT09dHx8ODIyNT09PXR8fDgyNDA9PT10fHw4MjQxPT09dHx8ODI1MT09PXR8fDgyNTI9PT10fHw4MjU4PT09dHx8ODI2Mz09PXR8fDgyNjQ9PT10fHw4MjY1PT09dHx8ODI3Mz09PXQpfHxWblsiTGV0dGVybGlrZSBTeW1ib2xzIl0odCl8fFZuWyJOdW1iZXIgRm9ybXMiXSh0KXx8Vm5bIk1pc2NlbGxhbmVvdXMgVGVjaG5pY2FsIl0odCkmJih0Pj04OTYwJiZ0PD04OTY3fHx0Pj04OTcyJiZ0PD04OTkxfHx0Pj04OTk2JiZ0PD05ZTN8fDkwMDM9PT10fHx0Pj05MDg1JiZ0PD05MTE0fHx0Pj05MTUwJiZ0PD05MTY1fHw5MTY3PT09dHx8dD49OTE2OSYmdDw9OTE3OXx8dD49OTE4NiYmdDw9OTIxNSl8fFZuWyJDb250cm9sIFBpY3R1cmVzIl0odCkmJjkyNTEhPT10fHxWblsiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24iXSh0KXx8Vm5bIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiXSh0KXx8Vm5bIkdlb21ldHJpYyBTaGFwZXMiXSh0KXx8Vm5bIk1pc2NlbGxhbmVvdXMgU3ltYm9scyJdKHQpJiYhKHQ+PTk3NTQmJnQ8PTk3NTkpfHxWblsiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MiXSh0KSYmKHQ+PTExMDI2JiZ0PD0xMTA1NXx8dD49MTEwODgmJnQ8PTExMDk3fHx0Pj0xMTE5MiYmdDw9MTEyNDMpfHxWblsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fFZuLkthdGFrYW5hKHQpfHxWblsiUHJpdmF0ZSBVc2UgQXJlYSJdKHQpfHxWblsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXSh0KXx8Vm5bIlNtYWxsIEZvcm0gVmFyaWFudHMiXSh0KXx8Vm5bIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIl0odCl8fDg3MzQ9PT10fHw4NzU2PT09dHx8ODc1Nz09PXR8fHQ+PTk5ODQmJnQ8PTEwMDg3fHx0Pj0xMDEwMiYmdDw9MTAxMzF8fDY1NTMyPT09dHx8NjU1MzM9PT10KX0odCkpfWZ1bmN0aW9uIFluKHQpe3JldHVybiB0Pj0xNDI0JiZ0PD0yMzAzfHxWblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIl0odCl8fFZuWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiXSh0KX1mdW5jdGlvbiBXbih0LGUpe3JldHVybiEoIWUmJlluKHQpfHx0Pj0yMzA0JiZ0PD0zNTgzfHx0Pj0zODQwJiZ0PD00MjU1fHxWbi5LaG1lcih0KSl9ZnVuY3Rpb24gWm4odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZihZbihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiEwO3JldHVybiExfXZhciBYbj1udWxsLEpuPSJ1bmF2YWlsYWJsZSIsS249bnVsbCxRbj1mdW5jdGlvbih0KXt0JiYic3RyaW5nIj09dHlwZW9mIHQmJnQuaW5kZXhPZigiTmV0d29ya0Vycm9yIik+LTEmJihKbj0iZXJyb3IiKSxYbiYmWG4odCl9O2Z1bmN0aW9uICRuKCl7dGkuZmlyZShuZXcgVHQoInBsdWdpblN0YXRlQ2hhbmdlIix7cGx1Z2luU3RhdHVzOkpuLHBsdWdpblVSTDpLbn0pKX12YXIgdGk9bmV3IE10LGVpPWZ1bmN0aW9uKCl7cmV0dXJuIEpufSxyaT1mdW5jdGlvbigpe2lmKCJkZWZlcnJlZCIhPT1Kbnx8IUtuKXRocm93IG5ldyBFcnJvcigicnRsLXRleHQtcGx1Z2luIGNhbm5vdCBiZSBkb3dubG9hZGVkIHVubGVzcyBhIHBsdWdpblVSTCBpcyBzcGVjaWZpZWQiKTtKbj0ibG9hZGluZyIsJG4oKSxLbiYmeXQoe3VybDpLbn0sKGZ1bmN0aW9uKHQpe3Q/UW4odCk6KEpuPSJsb2FkZWQiLCRuKCkpfSkpfSxuaT17YXBwbHlBcmFiaWNTaGFwaW5nOm51bGwscHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0Om51bGwscHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0Om51bGwsaXNMb2FkZWQ6ZnVuY3Rpb24oKXtyZXR1cm4ibG9hZGVkIj09PUpufHxudWxsIT1uaS5hcHBseUFyYWJpY1NoYXBpbmd9LGlzTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiJsb2FkaW5nIj09PUpufSxzZXRTdGF0ZTpmdW5jdGlvbih0KXtKbj10LnBsdWdpblN0YXR1cyxLbj10LnBsdWdpblVSTH0saXNQYXJzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9bmkuYXBwbHlBcmFiaWNTaGFwaW5nJiZudWxsIT1uaS5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQmJm51bGwhPW5pLnByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dH0sZ2V0UGx1Z2luVVJMOmZ1bmN0aW9uKCl7cmV0dXJuIEtufX0saWk9ZnVuY3Rpb24odCxlKXt0aGlzLnpvb209dCxlPyh0aGlzLm5vdz1lLm5vdyx0aGlzLmZhZGVEdXJhdGlvbj1lLmZhZGVEdXJhdGlvbix0aGlzLnpvb21IaXN0b3J5PWUuem9vbUhpc3RvcnksdGhpcy50cmFuc2l0aW9uPWUudHJhbnNpdGlvbik6KHRoaXMubm93PTAsdGhpcy5mYWRlRHVyYXRpb249MCx0aGlzLnpvb21IaXN0b3J5PW5ldyBVbix0aGlzLnRyYW5zaXRpb249e30pfTtpaS5wcm90b3R5cGUuaXNTdXBwb3J0ZWRTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSlpZighV24obltyXS5jaGFyQ29kZUF0KDApLGUpKXJldHVybiExO3JldHVybiEwfSh0LG5pLmlzTG9hZGVkKCkpfSxpaS5wcm90b3R5cGUuY3Jvc3NGYWRpbmdGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZmFkZUR1cmF0aW9uPzE6TWF0aC5taW4oKHRoaXMubm93LXRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tVGltZSkvdGhpcy5mYWRlRHVyYXRpb24sMSl9LGlpLnByb3RvdHlwZS5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy56b29tLGU9dC1NYXRoLmZsb29yKHQpLHI9dGhpcy5jcm9zc0ZhZGluZ0ZhY3RvcigpO3JldHVybiB0PnRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tU2NhbGU6Mix0b1NjYWxlOjEsdDplKygxLWUpKnJ9Ontmcm9tU2NhbGU6LjUsdG9TY2FsZToxLHQ6MS0oMS1yKSplfX07dmFyIGFpPWZ1bmN0aW9uKHQsZSl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLmV4cHJlc3Npb249ZnVuY3Rpb24odCxlKXtpZihPcih0KSlyZXR1cm4gbmV3IFdyKHQsZSk7aWYoVnIodCkpe3ZhciByPVlyKHQsZSk7aWYoImVycm9yIj09PXIucmVzdWx0KXRocm93IG5ldyBFcnJvcihyLnZhbHVlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5KyI6ICIrdC5tZXNzYWdlfSkpLmpvaW4oIiwgIikpO3JldHVybiByLnZhbHVlfXZhciBuPXQ7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYiY29sb3IiPT09ZS50eXBlJiYobj1LdC5wYXJzZSh0KSkse2tpbmQ6ImNvbnN0YW50IixldmFsdWF0ZTpmdW5jdGlvbigpe3JldHVybiBufX19KHZvaWQgMD09PWU/dC5zcGVjaWZpY2F0aW9uLmRlZmF1bHQ6ZSx0LnNwZWNpZmljYXRpb24pfTthaS5wcm90b3R5cGUuaXNEYXRhRHJpdmVuPWZ1bmN0aW9uKCl7cmV0dXJuInNvdXJjZSI9PT10aGlzLmV4cHJlc3Npb24ua2luZHx8ImNvbXBvc2l0ZSI9PT10aGlzLmV4cHJlc3Npb24ua2luZH0sYWkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnByb3BlcnR5LnBvc3NpYmx5RXZhbHVhdGUodGhpcyx0LGUscil9O3ZhciBvaT1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1uZXcgYWkodCx2b2lkIDApfTtvaS5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBsaSh0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsZSx1KHt9LHQudHJhbnNpdGlvbix0aGlzLnRyYW5zaXRpb24pLHQubm93KX0sb2kucHJvdG90eXBlLnVudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsaSh0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsbnVsbCx7fSwwKX07dmFyIHNpPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzKX07c2kucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS52YWx1ZS52YWx1ZSl9LHNpLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgb2kodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnZhbHVlPW5ldyBhaSh0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHksbnVsbD09PWU/dm9pZCAwOngoZSkpfSxzaS5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbil9LHNpLnByb3RvdHlwZS5zZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fdmFsdWVzW3RdPW5ldyBvaSh0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHkpKSx0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbj14KGUpfHx2b2lkIDB9LHNpLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWkmJih0W25dPWkpO3ZhciBhPXRoaXMuZ2V0VHJhbnNpdGlvbihuKTt2b2lkIDAhPT1hJiYodFtuKyItdHJhbnNpdGlvbiJdPWEpfXJldHVybiB0fSxzaS5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBjaSh0aGlzLl9wcm9wZXJ0aWVzKSxuPTAsaT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtyLl92YWx1ZXNbYV09dGhpcy5fdmFsdWVzW2FdLnRyYW5zaXRpb25lZCh0LGUuX3ZhbHVlc1thXSl9cmV0dXJuIHJ9LHNpLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgY2kodGhpcy5fcHJvcGVydGllcyksZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07dC5fdmFsdWVzW25dPXRoaXMuX3ZhbHVlc1tuXS51bnRyYW5zaXRpb25lZCgpfXJldHVybiB0fTt2YXIgbGk9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuYmVnaW49aStuLmRlbGF5fHwwLHRoaXMuZW5kPXRoaXMuYmVnaW4rbi5kdXJhdGlvbnx8MCx0LnNwZWNpZmljYXRpb24udHJhbnNpdGlvbiYmKG4uZGVsYXl8fG4uZHVyYXRpb24pJiYodGhpcy5wcmlvcj1yKX07bGkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubm93fHwwLGk9dGhpcy52YWx1ZS5wb3NzaWJseUV2YWx1YXRlKHQsZSxyKSxhPXRoaXMucHJpb3I7aWYoYSl7aWYobj50aGlzLmVuZClyZXR1cm4gdGhpcy5wcmlvcj1udWxsLGk7aWYodGhpcy52YWx1ZS5pc0RhdGFEcml2ZW4oKSlyZXR1cm4gdGhpcy5wcmlvcj1udWxsLGk7aWYobjx0aGlzLmJlZ2luKXJldHVybiBhLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpO3ZhciBvPShuLXRoaXMuYmVnaW4pLyh0aGlzLmVuZC10aGlzLmJlZ2luKTtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5pbnRlcnBvbGF0ZShhLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpLGksZnVuY3Rpb24odCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfShvKSl9cmV0dXJuIGl9O3ZhciBjaT1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzKX07Y2kucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1uZXcgZmkodGhpcy5fcHJvcGVydGllcyksaT0wLGE9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07bi5fdmFsdWVzW29dPXRoaXMuX3ZhbHVlc1tvXS5wb3NzaWJseUV2YWx1YXRlKHQsZSxyKX1yZXR1cm4gbn0sY2kucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7dDxlLmxlbmd0aDt0Kz0xKWlmKHRoaXMuX3ZhbHVlc1tlW3RdXS5wcmlvcilyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHVpPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRQcm9wZXJ0eVZhbHVlcyl9O3VpLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udmFsdWUpfSx1aS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXNbdF09bmV3IGFpKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSxudWxsPT09ZT92b2lkIDA6eChlKSl9LHVpLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWkmJih0W25dPWkpfXJldHVybiB0fSx1aS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBmaSh0aGlzLl9wcm9wZXJ0aWVzKSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtuLl92YWx1ZXNbb109dGhpcy5fdmFsdWVzW29dLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpfXJldHVybiBufTt2YXIgaGk9ZnVuY3Rpb24odCxlLHIpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5wYXJhbWV0ZXJzPXJ9O2hpLnByb3RvdHlwZS5pc0NvbnN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuImNvbnN0YW50Ij09PXRoaXMudmFsdWUua2luZH0saGkucHJvdG90eXBlLmNvbnN0YW50T3I9ZnVuY3Rpb24odCl7cmV0dXJuImNvbnN0YW50Ij09PXRoaXMudmFsdWUua2luZD90aGlzLnZhbHVlLnZhbHVlOnR9LGhpLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5ldmFsdWF0ZSh0aGlzLnZhbHVlLHRoaXMucGFyYW1ldGVycyx0LGUscixuKX07dmFyIGZpPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcyl9O2ZpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlc1t0XX07dmFyIHBpPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTtwaS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LHBpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49VmVbdGhpcy5zcGVjaWZpY2F0aW9uLnR5cGVdO3JldHVybiBuP24odCxlLHIpOnR9O3ZhciBkaT1mdW5jdGlvbih0LGUpe3RoaXMuc3BlY2lmaWNhdGlvbj10LHRoaXMub3ZlcnJpZGVzPWV9O2RpLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuZXcgaGkodGhpcywiY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmR8fCJjYW1lcmEiPT09dC5leHByZXNzaW9uLmtpbmQ/e2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTp0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSxudWxsLHt9LHIsbil9OnQuZXhwcmVzc2lvbixlKX0sZGkucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZigiY29uc3RhbnQiIT09dC52YWx1ZS5raW5kfHwiY29uc3RhbnQiIT09ZS52YWx1ZS5raW5kKXJldHVybiB0O2lmKHZvaWQgMD09PXQudmFsdWUudmFsdWV8fHZvaWQgMD09PWUudmFsdWUudmFsdWUpcmV0dXJuIG5ldyBoaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dm9pZCAwfSx0LnBhcmFtZXRlcnMpO3ZhciBuPVZlW3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uZXcgaGkodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOm4odC52YWx1ZS52YWx1ZSxlLnZhbHVlLnZhbHVlLHIpfSx0LnBhcmFtZXRlcnMpOnR9LGRpLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuImNvbnN0YW50Ij09PXQua2luZD90LnZhbHVlOnQuZXZhbHVhdGUoZSxyLG4saSxhKX07dmFyIGdpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PXQudmFsdWUpcmV0dXJuIG5ldyBoaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dm9pZCAwfSxlKTtpZigiY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciBpPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlLG51bGwse30scixuKSxhPSJyZXNvbHZlZEltYWdlIj09PXQucHJvcGVydHkuc3BlY2lmaWNhdGlvbi50eXBlJiYic3RyaW5nIiE9dHlwZW9mIGk/aS5uYW1lOmksbz10aGlzLl9jYWxjdWxhdGUoYSxhLGEsZSk7cmV0dXJuIG5ldyBoaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6b30sZSl9aWYoImNhbWVyYSI9PT10LmV4cHJlc3Npb24ua2luZCl7dmFyIHM9dGhpcy5fY2FsY3VsYXRlKHQuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTplLnpvb20tMX0pLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTplLnpvb219KSx0LmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206ZS56b29tKzF9KSxlKTtyZXR1cm4gbmV3IGhpKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTpzfSxlKX1yZXR1cm4gbmV3IGhpKHRoaXMsdC5leHByZXNzaW9uLGUpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoInNvdXJjZSI9PT10LmtpbmQpe3ZhciBvPXQuZXZhbHVhdGUoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlKG8sbyxvLGUpfXJldHVybiJjb21wb3NpdGUiPT09dC5raW5kP3RoaXMuX2NhbGN1bGF0ZSh0LmV2YWx1YXRlKHt6b29tOk1hdGguZmxvb3IoZS56b29tKS0xfSxyLG4pLHQuZXZhbHVhdGUoe3pvb206TWF0aC5mbG9vcihlLnpvb20pfSxyLG4pLHQuZXZhbHVhdGUoe3pvb206TWF0aC5mbG9vcihlLnpvb20pKzF9LHIsbiksZSk6dC52YWx1ZX0sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi56b29tPm4uem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tOnQsdG86ZX06e2Zyb206cix0bzplfX0sZS5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGV9KGRpKSxtaT1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07bWkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwIT09dC52YWx1ZSl7aWYoImNvbnN0YW50Ij09PXQuZXhwcmVzc2lvbi5raW5kKXt2YXIgaT10LmV4cHJlc3Npb24uZXZhbHVhdGUoZSxudWxsLHt9LHIsbik7cmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShpLGksaSxlKX1yZXR1cm4gdGhpcy5fY2FsY3VsYXRlKHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgaWkoTWF0aC5mbG9vcihlLnpvb20tMSksZSkpLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgaWkoTWF0aC5mbG9vcihlLnpvb20pLGUpKSx0LmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IGlpKE1hdGguZmxvb3IoZS56b29tKzEpLGUpKSxlKX19LG1pLnByb3RvdHlwZS5fY2FsY3VsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLnpvb20+bi56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20/e2Zyb206dCx0bzplfTp7ZnJvbTpyLHRvOmV9fSxtaS5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3ZhciB2aT1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07dmkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuISF0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSxudWxsLHt9LHIsbil9LHZpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbigpe3JldHVybiExfTt2YXIgeWk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMucHJvcGVydGllcz10LHRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzPXt9LHRoaXMub3ZlcnJpZGFibGVQcm9wZXJ0aWVzPVtdLHQpe3ZhciByPXRbZV07ci5zcGVjaWZpY2F0aW9uLm92ZXJyaWRhYmxlJiZ0aGlzLm92ZXJyaWRhYmxlUHJvcGVydGllcy5wdXNoKGUpO3ZhciBuPXRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzW2VdPW5ldyBhaShyLHZvaWQgMCksaT10aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzW2VdPW5ldyBvaShyKTt0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXNbZV09aS51bnRyYW5zaXRpb25lZCgpLHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzW2VdPW4ucG9zc2libHlFdmFsdWF0ZSh7fSl9fTtEbigiRGF0YURyaXZlblByb3BlcnR5IixkaSksRG4oIkRhdGFDb25zdGFudFByb3BlcnR5IixwaSksRG4oIkNyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkiLGdpKSxEbigiQ3Jvc3NGYWRlZFByb3BlcnR5IixtaSksRG4oIkNvbG9yUmFtcFByb3BlcnR5Iix2aSk7dmFyIHhpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXtpZih0LmNhbGwodGhpcyksdGhpcy5pZD1lLmlkLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5fZmVhdHVyZUZpbHRlcj17ZmlsdGVyOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5lZWRHZW9tZXRyeTohMX0sImN1c3RvbSIhPT1lLnR5cGUmJih0aGlzLm1ldGFkYXRhPShlPWUpLm1ldGFkYXRhLHRoaXMubWluem9vbT1lLm1pbnpvb20sdGhpcy5tYXh6b29tPWUubWF4em9vbSwiYmFja2dyb3VuZCIhPT1lLnR5cGUmJih0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLnNvdXJjZUxheWVyPWVbInNvdXJjZS1sYXllciJdLHRoaXMuZmlsdGVyPWUuZmlsdGVyKSxyLmxheW91dCYmKHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0PW5ldyB1aShyLmxheW91dCkpLHIucGFpbnQpKXtmb3IodmFyIG4gaW4gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludD1uZXcgc2koci5wYWludCksZS5wYWludCl0aGlzLnNldFBhaW50UHJvcGVydHkobixlLnBhaW50W25dLHt2YWxpZGF0ZTohMX0pO2Zvcih2YXIgaSBpbiBlLmxheW91dCl0aGlzLnNldExheW91dFByb3BlcnR5KGksZS5sYXlvdXRbaV0se3ZhbGlkYXRlOiExfSk7dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQudW50cmFuc2l0aW9uZWQoKSx0aGlzLnBhaW50PW5ldyBmaShyLnBhaW50KX19cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcm9zc2ZhZGVQYXJhbWV0ZXJzfSxlLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4idmlzaWJpbGl0eSI9PT10P3RoaXMudmlzaWJpbGl0eTp0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPXt9KSxudWxsIT1lJiZ0aGlzLl92YWxpZGF0ZShFbiwibGF5ZXJzLiIrdGhpcy5pZCsiLmxheW91dC4iK3QsdCxlLHIpfHwoInZpc2liaWxpdHkiIT09dD90aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXRWYWx1ZSh0LGUpOnRoaXMudmlzaWJpbGl0eT1lKX0sZS5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LCItdHJhbnNpdGlvbiIpP3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSk6dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09ciYmKHI9e30pLG51bGwhPWUmJnRoaXMuX3ZhbGlkYXRlKFNuLCJsYXllcnMuIit0aGlzLmlkKyIucGFpbnQuIit0LHQsZSxyKSlyZXR1cm4hMTtpZihtKHQsIi10cmFuc2l0aW9uIikpcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSxlfHx2b2lkIDApLCExO3ZhciBuPXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1t0XSxpPSJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiI9PT1uLnByb3BlcnR5LnNwZWNpZmljYXRpb25bInByb3BlcnR5LXR5cGUiXSxhPW4udmFsdWUuaXNEYXRhRHJpdmVuKCksbz1uLnZhbHVlO3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VmFsdWUodCxlKSx0aGlzLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZSh0KTt2YXIgcz10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbdF0udmFsdWU7cmV0dXJuIHMuaXNEYXRhRHJpdmVuKCl8fGF8fGl8fHRoaXMuX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZSh0LG8scyl9LGUucHJvdG90eXBlLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLl9oYW5kbGVPdmVycmlkYWJsZVBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiExfSxlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbih0KXtyZXR1cm4hISh0aGlzLm1pbnpvb20mJnQ8dGhpcy5taW56b29tKXx8ISEodGhpcy5tYXh6b29tJiZ0Pj10aGlzLm1heHpvb20pfHwibm9uZSI9PT10aGlzLnZpc2liaWxpdHl9LGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3RoaXMuX3RyYW5zaXRpb25pbmdQYWludD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnRyYW5zaXRpb25lZCh0LHRoaXMuX3RyYW5zaXRpb25pbmdQYWludCl9LGUucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Lmhhc1RyYW5zaXRpb24oKX0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24odCxlKXt0LmdldENyb3NzZmFkZVBhcmFtZXRlcnMmJih0aGlzLl9jcm9zc2ZhZGVQYXJhbWV0ZXJzPXQuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpKSx0aGlzLl91bmV2YWx1YXRlZExheW91dCYmKHRoaXMubGF5b3V0PXRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnBvc3NpYmx5RXZhbHVhdGUodCx2b2lkIDAsZSkpLHRoaXMucGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50LnBvc3NpYmx5RXZhbHVhdGUodCx2b2lkIDAsZSl9LGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXtpZDp0aGlzLmlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLnNvdXJjZSwic291cmNlLWxheWVyIjp0aGlzLnNvdXJjZUxheWVyLG1ldGFkYXRhOnRoaXMubWV0YWRhdGEsbWluem9vbTp0aGlzLm1pbnpvb20sbWF4em9vbTp0aGlzLm1heHpvb20sZmlsdGVyOnRoaXMuZmlsdGVyLGxheW91dDp0aGlzLl91bmV2YWx1YXRlZExheW91dCYmdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuc2VyaWFsaXplKCkscGFpbnQ6dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludCYmdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXJpYWxpemUoKX07cmV0dXJuIHRoaXMudmlzaWJpbGl0eSYmKHQubGF5b3V0PXQubGF5b3V0fHx7fSx0LmxheW91dC52aXNpYmlsaXR5PXRoaXMudmlzaWJpbGl0eSkseSh0LChmdW5jdGlvbih0LGUpe3JldHVybiEodm9pZCAwPT09dHx8ImxheW91dCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RofHwicGFpbnQiPT09ZSYmIU9iamVjdC5rZXlzKHQpLmxlbmd0aCl9KSl9LGUucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT17fSksKCFpfHwhMSE9PWkudmFsaWRhdGUpJiZDbih0aGlzLHQuY2FsbChNbix7a2V5OmUsbGF5ZXJUeXBlOnRoaXMudHlwZSxvYmplY3RLZXk6cix2YWx1ZTpuLHN0eWxlU3BlYzpBdCxzdHlsZTp7Z2x5cGhzOiEwLHNwcml0ZTohMH19KSl9LGUucHJvdG90eXBlLmlzM0Q9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaXNUaWxlQ2xpcHBlZD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuaXNTdGF0ZURlcGVuZGVudD1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnBhaW50Ll92YWx1ZXMpe3ZhciBlPXRoaXMucGFpbnQuZ2V0KHQpO2lmKGUgaW5zdGFuY2VvZiBoaSYmTHIoZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSYmKCJzb3VyY2UiPT09ZS52YWx1ZS5raW5kfHwiY29tcG9zaXRlIj09PWUudmFsdWUua2luZCkmJmUudmFsdWUuaXNTdGF0ZURlcGVuZGVudClyZXR1cm4hMH1yZXR1cm4hMX0sZX0oTXQpLGJpPXtJbnQ4OkludDhBcnJheSxVaW50ODpVaW50OEFycmF5LEludDE2OkludDE2QXJyYXksVWludDE2OlVpbnQxNkFycmF5LEludDMyOkludDMyQXJyYXksVWludDMyOlVpbnQzMkFycmF5LEZsb2F0MzI6RmxvYXQzMkFycmF5fSxfaT1mdW5jdGlvbih0LGUpe3RoaXMuX3N0cnVjdEFycmF5PXQsdGhpcy5fcG9zMT1lKnRoaXMuc2l6ZSx0aGlzLl9wb3MyPXRoaXMuX3BvczEvMix0aGlzLl9wb3M0PXRoaXMuX3BvczEvNCx0aGlzLl9wb3M4PXRoaXMuX3BvczEvOH0sd2k9ZnVuY3Rpb24oKXt0aGlzLmlzVHJhbnNmZXJyZWQ9ITEsdGhpcy5jYXBhY2l0eT0tMSx0aGlzLnJlc2l6ZSgwKX07ZnVuY3Rpb24gVGkodCxlKXt2b2lkIDA9PT1lJiYoZT0xKTt2YXIgcj0wLG49MDtyZXR1cm57bWVtYmVyczp0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGk9YmlbdC50eXBlXS5CWVRFU19QRVJfRUxFTUVOVCxhPXI9a2kocixNYXRoLm1heChlLGkpKSxvPXQuY29tcG9uZW50c3x8MTtyZXR1cm4gbj1NYXRoLm1heChuLGkpLHIrPWkqbyx7bmFtZTp0Lm5hbWUsdHlwZTp0LnR5cGUsY29tcG9uZW50czpvLG9mZnNldDphfX0pKSxzaXplOmtpKHIsTWF0aC5tYXgobixlKSksYWxpZ25tZW50OmV9fWZ1bmN0aW9uIGtpKHQsZSl7cmV0dXJuIE1hdGguY2VpbCh0L2UpKmV9d2kuc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyaW0oKSxlJiYodC5pc1RyYW5zZmVycmVkPSEwLGUucHVzaCh0LmFycmF5QnVmZmVyKSkse2xlbmd0aDp0Lmxlbmd0aCxhcnJheUJ1ZmZlcjp0LmFycmF5QnVmZmVyfX0sd2kuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmNyZWF0ZSh0aGlzLnByb3RvdHlwZSk7cmV0dXJuIGUuYXJyYXlCdWZmZXI9dC5hcnJheUJ1ZmZlcixlLmxlbmd0aD10Lmxlbmd0aCxlLmNhcGFjaXR5PXQuYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aC9lLmJ5dGVzUGVyRWxlbWVudCxlLl9yZWZyZXNoVmlld3MoKSxlfSx3aS5wcm90b3R5cGUuX3RyaW09ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aCE9PXRoaXMuY2FwYWNpdHkmJih0aGlzLmNhcGFjaXR5PXRoaXMubGVuZ3RoLHRoaXMuYXJyYXlCdWZmZXI9dGhpcy5hcnJheUJ1ZmZlci5zbGljZSgwLHRoaXMubGVuZ3RoKnRoaXMuYnl0ZXNQZXJFbGVtZW50KSx0aGlzLl9yZWZyZXNoVmlld3MoKSl9LHdpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubGVuZ3RoPTB9LHdpLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7dGhpcy5yZXNlcnZlKHQpLHRoaXMubGVuZ3RoPXR9LHdpLnByb3RvdHlwZS5yZXNlcnZlPWZ1bmN0aW9uKHQpe2lmKHQ+dGhpcy5jYXBhY2l0eSl7dGhpcy5jYXBhY2l0eT1NYXRoLm1heCh0LE1hdGguZmxvb3IoNSp0aGlzLmNhcGFjaXR5KSwxMjgpLHRoaXMuYXJyYXlCdWZmZXI9bmV3IEFycmF5QnVmZmVyKHRoaXMuY2FwYWNpdHkqdGhpcy5ieXRlc1BlckVsZW1lbnQpO3ZhciBlPXRoaXMudWludDg7dGhpcy5fcmVmcmVzaFZpZXdzKCksZSYmdGhpcy51aW50OC5zZXQoZSl9fSx3aS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3JlZnJlc2hWaWV3cygpIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBjb25jcmV0ZSBTdHJ1Y3RBcnJheSBsYXlvdXQiKX07dmFyIE1pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShyKzEpLHRoaXMuZW1wbGFjZShyLHQsZSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdDtyZXR1cm4gdGhpcy5pbnQxNltuKzBdPWUsdGhpcy5pbnQxNltuKzFdPXIsdH0sZX0od2kpO01pLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxEbigiU3RydWN0QXJyYXlMYXlvdXQyaTQiLE1pKTt2YXIgQWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShpKzEpLHRoaXMuZW1wbGFjZShpLHQsZSxyLG4pfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9NCp0O3JldHVybiB0aGlzLmludDE2W2ErMF09ZSx0aGlzLmludDE2W2ErMV09cix0aGlzLmludDE2W2ErMl09bix0aGlzLmludDE2W2ErM109aSx0fSxlfSh3aSk7QWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LERuKCJTdHJ1Y3RBcnJheUxheW91dDRpOCIsQWkpO3ZhciBTaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShvKzEpLHRoaXMuZW1wbGFjZShvLHQsZSxyLG4saSxhKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz02KnQ7cmV0dXJuIHRoaXMuaW50MTZbcyswXT1lLHRoaXMuaW50MTZbcysxXT1yLHRoaXMuaW50MTZbcysyXT1uLHRoaXMuaW50MTZbcyszXT1pLHRoaXMuaW50MTZbcys0XT1hLHRoaXMuaW50MTZbcys1XT1vLHR9LGV9KHdpKTtTaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLERuKCJTdHJ1Y3RBcnJheUxheW91dDJpNGkxMiIsU2kpO3ZhciBFaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShvKzEpLHRoaXMuZW1wbGFjZShvLHQsZSxyLG4saSxhKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz00KnQsbD04KnQ7cmV0dXJuIHRoaXMuaW50MTZbcyswXT1lLHRoaXMuaW50MTZbcysxXT1yLHRoaXMudWludDhbbCs0XT1uLHRoaXMudWludDhbbCs1XT1pLHRoaXMudWludDhbbCs2XT1hLHRoaXMudWludDhbbCs3XT1vLHR9LGV9KHdpKTtFaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgsRG4oIlN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4IixFaSk7dmFyIENpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZSh1KzEpLHRoaXMuZW1wbGFjZSh1LHQsZSxyLG4saSxhLG8scyxsLGMpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGg9OSp0LGY9MTgqdDtyZXR1cm4gdGhpcy51aW50MTZbaCswXT1lLHRoaXMudWludDE2W2grMV09cix0aGlzLnVpbnQxNltoKzJdPW4sdGhpcy51aW50MTZbaCszXT1pLHRoaXMudWludDE2W2grNF09YSx0aGlzLnVpbnQxNltoKzVdPW8sdGhpcy51aW50MTZbaCs2XT1zLHRoaXMudWludDE2W2grN109bCx0aGlzLnVpbnQ4W2YrMTZdPWMsdGhpcy51aW50OFtmKzE3XT11LHR9LGV9KHdpKTtDaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE4LERuKCJTdHJ1Y3RBcnJheUxheW91dDh1aTJ1YjE4IixDaSk7dmFyIExpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGgpe3ZhciBmPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShmKzEpLHRoaXMuZW1wbGFjZShmLHQsZSxyLG4saSxhLG8scyxsLGMsdSxoKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsaCxmKXt2YXIgcD0xMip0O3JldHVybiB0aGlzLmludDE2W3ArMF09ZSx0aGlzLmludDE2W3ArMV09cix0aGlzLmludDE2W3ArMl09bix0aGlzLmludDE2W3ArM109aSx0aGlzLnVpbnQxNltwKzRdPWEsdGhpcy51aW50MTZbcCs1XT1vLHRoaXMudWludDE2W3ArNl09cyx0aGlzLnVpbnQxNltwKzddPWwsdGhpcy5pbnQxNltwKzhdPWMsdGhpcy5pbnQxNltwKzldPXUsdGhpcy5pbnQxNltwKzEwXT1oLHRoaXMuaW50MTZbcCsxMV09Zix0fSxlfSh3aSk7TGkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0yNCxEbigiU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTRpMjQiLExpKTt2YXIgUGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTMqdDtyZXR1cm4gdGhpcy5mbG9hdDMyW2krMF09ZSx0aGlzLmZsb2F0MzJbaSsxXT1yLHRoaXMuZmxvYXQzMltpKzJdPW4sdH0sZX0od2kpO1BpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIsRG4oIlN0cnVjdEFycmF5TGF5b3V0M2YxMiIsUGkpO3ZhciBJaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoZSsxKSx0aGlzLmVtcGxhY2UoZSx0KX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnVpbnQzMlsxKnQrMF09ZSx0fSxlfSh3aSk7SWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LERuKCJTdHJ1Y3RBcnJheUxheW91dDF1bDQiLElpKTt2YXIgemk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShjKzEpLHRoaXMuZW1wbGFjZShjLHQsZSxyLG4saSxhLG8scyxsKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT0xMCp0LGg9NSp0O3JldHVybiB0aGlzLmludDE2W3UrMF09ZSx0aGlzLmludDE2W3UrMV09cix0aGlzLmludDE2W3UrMl09bix0aGlzLmludDE2W3UrM109aSx0aGlzLmludDE2W3UrNF09YSx0aGlzLmludDE2W3UrNV09byx0aGlzLnVpbnQzMltoKzNdPXMsdGhpcy51aW50MTZbdSs4XT1sLHRoaXMudWludDE2W3UrOV09Yyx0fSxlfSh3aSk7emkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0yMCxEbigiU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTIwIix6aSk7dmFyIE9pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG8rMSksdGhpcy5lbXBsYWNlKG8sdCxlLHIsbixpLGEpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTYqdDtyZXR1cm4gdGhpcy5pbnQxNltzKzBdPWUsdGhpcy5pbnQxNltzKzFdPXIsdGhpcy5pbnQxNltzKzJdPW4sdGhpcy5pbnQxNltzKzNdPWksdGhpcy5pbnQxNltzKzRdPWEsdGhpcy5pbnQxNltzKzVdPW8sdH0sZX0od2kpO09pLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIsRG4oIlN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIiLE9pKTt2YXIgRGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGErMSksdGhpcy5lbXBsYWNlKGEsdCxlLHIsbixpKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89NCp0LHM9OCp0O3JldHVybiB0aGlzLmZsb2F0MzJbbyswXT1lLHRoaXMuZmxvYXQzMltvKzFdPXIsdGhpcy5mbG9hdDMyW28rMl09bix0aGlzLmludDE2W3MrNl09aSx0aGlzLmludDE2W3MrN109YSx0fSxlfSh3aSk7RGkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xNixEbigiU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNiIsRGkpO3ZhciBSaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShpKzEpLHRoaXMuZW1wbGFjZShpLHQsZSxyLG4pfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9MTIqdCxvPTMqdDtyZXR1cm4gdGhpcy51aW50OFthKzBdPWUsdGhpcy51aW50OFthKzFdPXIsdGhpcy5mbG9hdDMyW28rMV09bix0aGlzLmZsb2F0MzJbbysyXT1pLHR9LGV9KHdpKTtSaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLERuKCJTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTIiLFJpKTt2YXIgRmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShuKzEpLHRoaXMuZW1wbGFjZShuLHQsZSxyKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0zKnQ7cmV0dXJuIHRoaXMudWludDE2W2krMF09ZSx0aGlzLnVpbnQxNltpKzFdPXIsdGhpcy51aW50MTZbaSsyXT1uLHR9LGV9KHdpKTtGaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTYsRG4oIlN0cnVjdEFycmF5TGF5b3V0M3VpNiIsRmkpO3ZhciBCaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHAsZCxnLG0pe3ZhciB2PXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZSh2KzEpLHRoaXMuZW1wbGFjZSh2LHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcsbSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHYpe3ZhciB5PTI0KnQseD0xMip0LGI9NDgqdDtyZXR1cm4gdGhpcy5pbnQxNlt5KzBdPWUsdGhpcy5pbnQxNlt5KzFdPXIsdGhpcy51aW50MTZbeSsyXT1uLHRoaXMudWludDE2W3krM109aSx0aGlzLnVpbnQzMlt4KzJdPWEsdGhpcy51aW50MzJbeCszXT1vLHRoaXMudWludDMyW3grNF09cyx0aGlzLnVpbnQxNlt5KzEwXT1sLHRoaXMudWludDE2W3krMTFdPWMsdGhpcy51aW50MTZbeSsxMl09dSx0aGlzLmZsb2F0MzJbeCs3XT1oLHRoaXMuZmxvYXQzMlt4KzhdPWYsdGhpcy51aW50OFtiKzM2XT1wLHRoaXMudWludDhbYiszN109ZCx0aGlzLnVpbnQ4W2IrMzhdPWcsdGhpcy51aW50MzJbeCsxMF09bSx0aGlzLmludDE2W3krMjJdPXYsdH0sZX0od2kpO0JpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NDgsRG4oIlN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgiLEJpKTt2YXIgTmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHYseSx4LGIsXyx3LFQsayxNLEEsUyl7dmFyIEU9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKEUrMSksdGhpcy5lbXBsYWNlKEUsdCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHYseSx4LGIsXyx3LFQsayxNLEEsUyl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHYseSx4LGIsXyx3LFQsayxNLEEsUyxFKXt2YXIgQz0zNCp0LEw9MTcqdDtyZXR1cm4gdGhpcy5pbnQxNltDKzBdPWUsdGhpcy5pbnQxNltDKzFdPXIsdGhpcy5pbnQxNltDKzJdPW4sdGhpcy5pbnQxNltDKzNdPWksdGhpcy5pbnQxNltDKzRdPWEsdGhpcy5pbnQxNltDKzVdPW8sdGhpcy5pbnQxNltDKzZdPXMsdGhpcy5pbnQxNltDKzddPWwsdGhpcy51aW50MTZbQys4XT1jLHRoaXMudWludDE2W0MrOV09dSx0aGlzLnVpbnQxNltDKzEwXT1oLHRoaXMudWludDE2W0MrMTFdPWYsdGhpcy51aW50MTZbQysxMl09cCx0aGlzLnVpbnQxNltDKzEzXT1kLHRoaXMudWludDE2W0MrMTRdPWcsdGhpcy51aW50MTZbQysxNV09bSx0aGlzLnVpbnQxNltDKzE2XT12LHRoaXMudWludDE2W0MrMTddPXksdGhpcy51aW50MTZbQysxOF09eCx0aGlzLnVpbnQxNltDKzE5XT1iLHRoaXMudWludDE2W0MrMjBdPV8sdGhpcy51aW50MTZbQysyMV09dyx0aGlzLnVpbnQxNltDKzIyXT1ULHRoaXMudWludDMyW0wrMTJdPWssdGhpcy5mbG9hdDMyW0wrMTNdPU0sdGhpcy5mbG9hdDMyW0wrMTRdPUEsdGhpcy5mbG9hdDMyW0wrMTVdPVMsdGhpcy5mbG9hdDMyW0wrMTZdPUUsdH0sZX0od2kpO05pLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NjgsRG4oIlN0cnVjdEFycmF5TGF5b3V0OGkxNXVpMXVsNGY2OCIsTmkpO3ZhciBqaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShlKzEpLHRoaXMuZW1wbGFjZShlLHQpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZmxvYXQzMlsxKnQrMF09ZSx0fSxlfSh3aSk7amkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LERuKCJTdHJ1Y3RBcnJheUxheW91dDFmNCIsamkpO3ZhciBVaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShuKzEpLHRoaXMuZW1wbGFjZShuLHQsZSxyKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0zKnQ7cmV0dXJuIHRoaXMuaW50MTZbaSswXT1lLHRoaXMuaW50MTZbaSsxXT1yLHRoaXMuaW50MTZbaSsyXT1uLHR9LGV9KHdpKTtVaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTYsRG4oIlN0cnVjdEFycmF5TGF5b3V0M2k2IixVaSk7dmFyIFZpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTQqdDtyZXR1cm4gdGhpcy51aW50MzJbMip0KzBdPWUsdGhpcy51aW50MTZbaSsyXT1yLHRoaXMudWludDE2W2krM109bix0fSxlfSh3aSk7VmkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LERuKCJTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgiLFZpKTt2YXIgcWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUocisxKSx0aGlzLmVtcGxhY2Uocix0LGUpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnQ7cmV0dXJuIHRoaXMudWludDE2W24rMF09ZSx0aGlzLnVpbnQxNltuKzFdPXIsdH0sZX0od2kpO3FpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxEbigiU3RydWN0QXJyYXlMYXlvdXQydWk0IixxaSk7dmFyIEhpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShlKzEpLHRoaXMuZW1wbGFjZShlLHQpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudWludDE2WzEqdCswXT1lLHR9LGV9KHdpKTtIaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTIsRG4oIlN0cnVjdEFycmF5TGF5b3V0MXVpMiIsSGkpO3ZhciBHaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKHIrMSksdGhpcy5lbXBsYWNlKHIsdCxlKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0O3JldHVybiB0aGlzLmZsb2F0MzJbbiswXT1lLHRoaXMuZmxvYXQzMltuKzFdPXIsdH0sZX0od2kpO0dpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxEbigiU3RydWN0QXJyYXlMYXlvdXQyZjgiLEdpKTt2YXIgWWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoaSsxKSx0aGlzLmVtcGxhY2UoaSx0LGUscixuKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTQqdDtyZXR1cm4gdGhpcy5mbG9hdDMyW2ErMF09ZSx0aGlzLmZsb2F0MzJbYSsxXT1yLHRoaXMuZmxvYXQzMlthKzJdPW4sdGhpcy5mbG9hdDMyW2ErM109aSx0fSxlfSh3aSk7WWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xNixEbigiU3RydWN0QXJyYXlMYXlvdXQ0ZjE2IixZaSk7dmFyIFdpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXthbmNob3JQb2ludFg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnRZOntjb25maWd1cmFibGU6ITB9LHgxOntjb25maWd1cmFibGU6ITB9LHkxOntjb25maWd1cmFibGU6ITB9LHgyOntjb25maWd1cmFibGU6ITB9LHkyOntjb25maWd1cmFibGU6ITB9LGZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxzb3VyY2VMYXllckluZGV4Ontjb25maWd1cmFibGU6ITB9LGJ1Y2tldEluZGV4Ontjb25maWd1cmFibGU6ITB9LGFuY2hvclBvaW50Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JQb2ludFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yUG9pbnRZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLngxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzJdfSxyLnkxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzNdfSxyLngyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdfSxyLnkyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzVdfSxyLmZlYXR1cmVJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM119LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF19LHIuYnVja2V0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzldfSxyLmFuY2hvclBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgaSh0aGlzLmFuY2hvclBvaW50WCx0aGlzLmFuY2hvclBvaW50WSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KF9pKTtXaS5wcm90b3R5cGUuc2l6ZT0yMDt2YXIgWmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFdpKHRoaXMsdCl9LGV9KHppKTtEbigiQ29sbGlzaW9uQm94QXJyYXkiLFppKTt2YXIgWGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yWTp7Y29uZmlndXJhYmxlOiEwfSxnbHlwaFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbnVtR2x5cGhzOntjb25maWd1cmFibGU6ITB9LHZlcnRleFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZVN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZUxlbmd0aDp7Y29uZmlndXJhYmxlOiEwfSxzZWdtZW50Ontjb25maWd1cmFibGU6ITB9LGxvd2VyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSx1cHBlclNpemU6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFg6e2NvbmZpZ3VyYWJsZTohMH0sbGluZU9mZnNldFk6e2NvbmZpZ3VyYWJsZTohMH0sd3JpdGluZ01vZGU6e2NvbmZpZ3VyYWJsZTohMH0scGxhY2VkT3JpZW50YXRpb246e2NvbmZpZ3VyYWJsZTohMH0saGlkZGVuOntjb25maWd1cmFibGU6ITB9LGNyb3NzVGlsZUlEOntjb25maWd1cmFibGU6ITB9LGFzc29jaWF0ZWRJY29uSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yWS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXX0sci5nbHlwaFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzJdfSxyLm51bUdseXBocy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIudmVydGV4U3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMl19LHIubGluZVN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLmxpbmVMZW5ndGguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzRdfSxyLnNlZ21lbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXX0sci5sb3dlclNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXX0sci51cHBlclNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEyXX0sci5saW5lT2Zmc2V0WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzddfSxyLmxpbmVPZmZzZXRZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrOF19LHIud3JpdGluZ01vZGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzZdfSxyLnBsYWNlZE9yaWVudGF0aW9uLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XX0sci5wbGFjZWRPcmllbnRhdGlvbi5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszN109dH0sci5oaWRkZW4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzhdfSxyLmhpZGRlbi5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszOF09dH0sci5jcm9zc1RpbGVJRC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMTBdfSxyLmNyb3NzVGlsZUlELnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsxMF09dH0sci5hc3NvY2lhdGVkSWNvbkluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzIyXX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oX2kpO1hpLnByb3RvdHlwZS5zaXplPTQ4O3ZhciBKaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWGkodGhpcyx0KX0sZX0oQmkpO0RuKCJQbGFjZWRTeW1ib2xBcnJheSIsSmkpO3ZhciBLaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yWDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JZOntjb25maWd1cmFibGU6ITB9LHJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LGNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LHBsYWNlZEljb25TeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxrZXk6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxUZXh0Qm94RW5kSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0saWNvbkJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0saWNvbkJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxJY29uQm94RW5kSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sZmVhdHVyZUluZGV4Ontjb25maWd1cmFibGU6ITB9LG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9LG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfSxudW1JY29uVmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sbnVtVmVydGljYWxJY29uVmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sdXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXM6e2NvbmZpZ3VyYWJsZTohMH0sY3Jvc3NUaWxlSUQ6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveFNjYWxlOntjb25maWd1cmFibGU6ITB9LHRleHRPZmZzZXQwOntjb25maWd1cmFibGU6ITB9LHRleHRPZmZzZXQxOntjb25maWd1cmFibGU6ITB9LGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzNdfSxyLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNF19LHIudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV19LHIucGxhY2VkSWNvblN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzZdfSxyLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzddfSxyLmtleS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF19LHIudGV4dEJveFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzldfSxyLnRleHRCb3hFbmRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTBdfSxyLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXX0sci52ZXJ0aWNhbFRleHRCb3hFbmRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdfSxyLmljb25Cb3hTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxM119LHIuaWNvbkJveEVuZEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxNF19LHIudmVydGljYWxJY29uQm94U3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTVdfSxyLnZlcnRpY2FsSWNvbkJveEVuZEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxNl19LHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxN119LHIubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE4XX0sci5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE5XX0sci5udW1JY29uVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzIwXX0sci5udW1WZXJ0aWNhbEljb25WZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMjFdfSxyLnVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyMl19LHIuY3Jvc3NUaWxlSUQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzEyXX0sci5jcm9zc1RpbGVJRC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMTJdPXR9LHIudGV4dEJveFNjYWxlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTNdfSxyLnRleHRPZmZzZXQwLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTRdfSxyLnRleHRPZmZzZXQxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTVdfSxyLmNvbGxpc2lvbkNpcmNsZURpYW1ldGVyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTZdfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShfaSk7S2kucHJvdG90eXBlLnNpemU9Njg7dmFyIFFpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBLaSh0aGlzLHQpfSxlfShOaSk7RG4oIlN5bWJvbEluc3RhbmNlQXJyYXkiLFFpKTt2YXIgJGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldG9mZnNldFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZmxvYXQzMlsxKnQrMF19LGV9KGppKTtEbigiR2x5cGhPZmZzZXRBcnJheSIsJGkpO3ZhciB0YT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0eD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMF19LGUucHJvdG90eXBlLmdldHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50MTZbMyp0KzFdfSxlLnByb3RvdHlwZS5nZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMl19LGV9KFVpKTtEbigiU3ltYm9sTGluZVZlcnRleEFycmF5Iix0YSk7dmFyIGVhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sc291cmNlTGF5ZXJJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxidWNrZXRJbmRleDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCswXX0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXX0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KF9pKTtlYS5wcm90b3R5cGUuc2l6ZT04O3ZhciByYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZWEodGhpcyx0KX0sZX0oVmkpO0RuKCJGZWF0dXJlSW5kZXhBcnJheSIscmEpO3ZhciBuYT1UaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxpYT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zZWdtZW50cz10fTtmdW5jdGlvbiBhYSh0LGUpe3JldHVybiAyNTYqKHQ9bChNYXRoLmZsb29yKHQpLDAsMjU1KSkrbChNYXRoLmZsb29yKGUpLDAsMjU1KX1pYS5wcm90b3R5cGUucHJlcGFyZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5zZWdtZW50c1t0aGlzLnNlZ21lbnRzLmxlbmd0aC0xXTtyZXR1cm4gdD5pYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmXygiTWF4IHZlcnRpY2VzIHBlciBzZWdtZW50IGlzICIraWEuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgrIjogYnVja2V0IHJlcXVlc3RlZCAiK3QpLCghaXx8aS52ZXJ0ZXhMZW5ndGgrdD5pYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSHx8aS5zb3J0S2V5IT09bikmJihpPXt2ZXJ0ZXhPZmZzZXQ6ZS5sZW5ndGgscHJpbWl0aXZlT2Zmc2V0OnIubGVuZ3RoLHZlcnRleExlbmd0aDowLHByaW1pdGl2ZUxlbmd0aDowfSx2b2lkIDAhPT1uJiYoaS5zb3J0S2V5PW4pLHRoaXMuc2VnbWVudHMucHVzaChpKSksaX0saWEucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlZ21lbnRzfSxpYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5zZWdtZW50czt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07Zm9yKHZhciBuIGluIHIudmFvcylyLnZhb3Nbbl0uZGVzdHJveSgpfX0saWEuc2ltcGxlU2VnbWVudD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbmV3IGlhKFt7dmVydGV4T2Zmc2V0OnQscHJpbWl0aXZlT2Zmc2V0OmUsdmVydGV4TGVuZ3RoOnIscHJpbWl0aXZlTGVuZ3RoOm4sdmFvczp7fSxzb3J0S2V5OjB9XSl9LGlhLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIPU1hdGgucG93KDIsMTYpLTEsRG4oIlNlZ21lbnRWZWN0b3IiLGlhKTt2YXIgb2E9VGkoW3tuYW1lOiJhX3BhdHRlcm5fZnJvbSIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQxNiJ9LHtuYW1lOiJhX3BhdHRlcm5fdG8iLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50MTYifSx7bmFtZToiYV9waXhlbF9yYXRpb19mcm9tIixjb21wb25lbnRzOjEsdHlwZToiVWludDgifSx7bmFtZToiYV9waXhlbF9yYXRpb190byIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQ4In1dKSxzYT1lKChmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCxjO2ZvcihuPXQubGVuZ3RoLShyPTMmdC5sZW5ndGgpLGk9ZSxvPTM0MzI5MTgzNTMscz00NjE4NDU5MDcsYz0wO2M8bjspbD0yNTUmdC5jaGFyQ29kZUF0KGMpfCgyNTUmdC5jaGFyQ29kZUF0KCsrYykpPDw4fCgyNTUmdC5jaGFyQ29kZUF0KCsrYykpPDwxNnwoMjU1JnQuY2hhckNvZGVBdCgrK2MpKTw8MjQsKytjLGk9Mjc0OTIrKDY1NTM1JihhPTUqKDY1NTM1JihpPShpXj1sPSg2NTUzNSYobD0obD0oNjU1MzUmbCkqbysoKChsPj4+MTYpKm8mNjU1MzUpPDwxNikmNDI5NDk2NzI5NSk8PDE1fGw+Pj4xNykpKnMrKCgobD4+PjE2KSpzJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUpPDwxM3xpPj4+MTkpKSsoKDUqKGk+Pj4xNikmNjU1MzUpPDwxNikmNDI5NDk2NzI5NSkpKygoNTg5NjQrKGE+Pj4xNikmNjU1MzUpPDwxNik7c3dpdGNoKGw9MCxyKXtjYXNlIDM6bF49KDI1NSZ0LmNoYXJDb2RlQXQoYysyKSk8PDE2O2Nhc2UgMjpsXj0oMjU1JnQuY2hhckNvZGVBdChjKzEpKTw8ODtjYXNlIDE6aV49bD0oNjU1MzUmKGw9KGw9KDY1NTM1JihsXj0yNTUmdC5jaGFyQ29kZUF0KGMpKSkqbysoKChsPj4+MTYpKm8mNjU1MzUpPDwxNikmNDI5NDk2NzI5NSk8PDE1fGw+Pj4xNykpKnMrKCgobD4+PjE2KSpzJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTV9cmV0dXJuIGlePXQubGVuZ3RoLGk9MjI0NjgyMjUwNyooNjU1MzUmKGlePWk+Pj4xNikpKygoMjI0NjgyMjUwNyooaT4+PjE2KSY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1LGk9MzI2NjQ4OTkwOSooNjU1MzUmKGlePWk+Pj4xMykpKygoMzI2NjQ4OTkwOSooaT4+PjE2KSY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1LChpXj1pPj4+MTYpPj4+MH19KSksbGE9ZSgoZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1lXm4sYT0wO24+PTQ7KXI9MTU0MDQ4MzQ3NyooNjU1MzUmKHI9MjU1JnQuY2hhckNvZGVBdChhKXwoMjU1JnQuY2hhckNvZGVBdCgrK2EpKTw8OHwoMjU1JnQuY2hhckNvZGVBdCgrK2EpKTw8MTZ8KDI1NSZ0LmNoYXJDb2RlQXQoKythKSk8PDI0KSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpLGk9MTU0MDQ4MzQ3NyooNjU1MzUmaSkrKCgxNTQwNDgzNDc3KihpPj4+MTYpJjY1NTM1KTw8MTYpXihyPTE1NDA0ODM0NzcqKDY1NTM1JihyXj1yPj4+MjQpKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNikpLG4tPTQsKythO3N3aXRjaChuKXtjYXNlIDM6aV49KDI1NSZ0LmNoYXJDb2RlQXQoYSsyKSk8PDE2O2Nhc2UgMjppXj0oMjU1JnQuY2hhckNvZGVBdChhKzEpKTw8ODtjYXNlIDE6aT0xNTQwNDgzNDc3Kig2NTUzNSYoaV49MjU1JnQuY2hhckNvZGVBdChhKSkpKygoMTU0MDQ4MzQ3NyooaT4+PjE2KSY2NTUzNSk8PDE2KX1yZXR1cm4gaT0xNTQwNDgzNDc3Kig2NTUzNSYoaV49aT4+PjEzKSkrKCgxNTQwNDgzNDc3KihpPj4+MTYpJjY1NTM1KTw8MTYpLChpXj1pPj4+MTUpPj4+MH19KSksY2E9c2EsdWE9bGE7Y2EubXVybXVyMz1zYSxjYS5tdXJtdXIyPXVhO3ZhciBoYT1mdW5jdGlvbigpe3RoaXMuaWRzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW5kZXhlZD0hMX07aGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmlkcy5wdXNoKHBhKHQpKSx0aGlzLnBvc2l0aW9ucy5wdXNoKGUscixuKX0saGEucHJvdG90eXBlLmdldFBvc2l0aW9ucz1mdW5jdGlvbih0KXtmb3IodmFyIGU9cGEodCkscj0wLG49dGhpcy5pZHMubGVuZ3RoLTE7cjxuOyl7dmFyIGk9cituPj4xO3RoaXMuaWRzW2ldPj1lP249aTpyPWkrMX1mb3IodmFyIGE9W107dGhpcy5pZHNbcl09PT1lOylhLnB1c2goe2luZGV4OnRoaXMucG9zaXRpb25zWzMqcl0sc3RhcnQ6dGhpcy5wb3NpdGlvbnNbMypyKzFdLGVuZDp0aGlzLnBvc2l0aW9uc1szKnIrMl19KSxyKys7cmV0dXJuIGF9LGhhLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBGbG9hdDY0QXJyYXkodC5pZHMpLG49bmV3IFVpbnQzMkFycmF5KHQucG9zaXRpb25zKTtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXtmb3IoO248aTspe2Zvcih2YXIgYT1lW24raT4+MV0sbz1uLTEscz1pKzE7Oyl7ZG97bysrfXdoaWxlKGVbb108YSk7ZG97cy0tfXdoaWxlKGVbc10+YSk7aWYobz49cylicmVhaztkYShlLG8scyksZGEociwzKm8sMypzKSxkYShyLDMqbysxLDMqcysxKSxkYShyLDMqbysyLDMqcysyKX1zLW48aS1zPyh0KGUscixuLHMpLG49cysxKToodChlLHIscysxLGkpLGk9cyl9fShyLG4sMCxyLmxlbmd0aC0xKSxlJiZlLnB1c2goci5idWZmZXIsbi5idWZmZXIpLHtpZHM6cixwb3NpdGlvbnM6bn19LGhhLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBoYTtyZXR1cm4gZS5pZHM9dC5pZHMsZS5wb3NpdGlvbnM9dC5wb3NpdGlvbnMsZS5pbmRleGVkPSEwLGV9O3ZhciBmYT1NYXRoLnBvdygyLDUzKS0xO2Z1bmN0aW9uIHBhKHQpe3ZhciBlPSt0O3JldHVybiFpc05hTihlKSYmZTw9ZmE/ZTpjYShTdHJpbmcodCkpfWZ1bmN0aW9uIGRhKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59RG4oIkZlYXR1cmVQb3NpdGlvbk1hcCIsaGEpO3ZhciBnYT1mdW5jdGlvbih0LGUpe3RoaXMuZ2w9dC5nbCx0aGlzLmxvY2F0aW9uPWV9LG1hPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD0wfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtMWkodGhpcy5sb2NhdGlvbix0KSl9LGV9KGdhKSx2YT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9MH1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTFmKHRoaXMubG9jYXRpb24sdCkpfSxlfShnYSkseWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PVswLDBdfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0WzBdPT09dGhpcy5jdXJyZW50WzBdJiZ0WzFdPT09dGhpcy5jdXJyZW50WzFdfHwodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtMmYodGhpcy5sb2NhdGlvbix0WzBdLHRbMV0pKX0sZX0oZ2EpLHhhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD1bMCwwLDBdfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0WzBdPT09dGhpcy5jdXJyZW50WzBdJiZ0WzFdPT09dGhpcy5jdXJyZW50WzFdJiZ0WzJdPT09dGhpcy5jdXJyZW50WzJdfHwodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtM2YodGhpcy5sb2NhdGlvbix0WzBdLHRbMV0sdFsyXSkpfSxlfShnYSksYmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PVswLDAsMCwwXX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dFswXT09PXRoaXMuY3VycmVudFswXSYmdFsxXT09PXRoaXMuY3VycmVudFsxXSYmdFsyXT09PXRoaXMuY3VycmVudFsyXSYmdFszXT09PXRoaXMuY3VycmVudFszXXx8KHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTRmKHRoaXMubG9jYXRpb24sdFswXSx0WzFdLHRbMl0sdFszXSkpfSxlfShnYSksX2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PUt0LnRyYW5zcGFyZW50fXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0LnI9PT10aGlzLmN1cnJlbnQuciYmdC5nPT09dGhpcy5jdXJyZW50LmcmJnQuYj09PXRoaXMuY3VycmVudC5iJiZ0LmE9PT10aGlzLmN1cnJlbnQuYXx8KHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTRmKHRoaXMubG9jYXRpb24sdC5yLHQuZyx0LmIsdC5hKSl9LGV9KGdhKSx3YT1uZXcgRmxvYXQzMkFycmF5KDE2KSxUYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9d2F9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRbMTJdIT09dGhpcy5jdXJyZW50WzEyXXx8dFswXSE9PXRoaXMuY3VycmVudFswXSlyZXR1cm4gdGhpcy5jdXJyZW50PXQsdm9pZCB0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwhMSx0KTtmb3IodmFyIGU9MTtlPDE2O2UrKylpZih0W2VdIT09dGhpcy5jdXJyZW50W2VdKXt0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwhMSx0KTticmVha319LGV9KGdhKTtmdW5jdGlvbiBrYSh0KXtyZXR1cm5bYWEoMjU1KnQuciwyNTUqdC5nKSxhYSgyNTUqdC5iLDI1NSp0LmEpXX12YXIgTWE9ZnVuY3Rpb24odCxlLHIpe3RoaXMudmFsdWU9dCx0aGlzLnVuaWZvcm1OYW1lcz1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInVfIit0fSkpLHRoaXMudHlwZT1yfTtNYS5wcm90b3R5cGUuc2V0VW5pZm9ybT1mdW5jdGlvbih0LGUscil7dC5zZXQoci5jb25zdGFudE9yKHRoaXMudmFsdWUpKX0sTWEucHJvdG90eXBlLmdldEJpbmRpbmc9ZnVuY3Rpb24odCxlLHIpe3JldHVybiJjb2xvciI9PT10aGlzLnR5cGU/bmV3IF9hKHQsZSk6bmV3IHZhKHQsZSl9O3ZhciBBYT1mdW5jdGlvbih0LGUpe3RoaXMudW5pZm9ybU5hbWVzPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4idV8iK3R9KSksdGhpcy5wYXR0ZXJuRnJvbT1udWxsLHRoaXMucGF0dGVyblRvPW51bGwsdGhpcy5waXhlbFJhdGlvRnJvbT0xLHRoaXMucGl4ZWxSYXRpb1RvPTF9O0FhLnByb3RvdHlwZS5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlKXt0aGlzLnBpeGVsUmF0aW9Gcm9tPWUucGl4ZWxSYXRpbyx0aGlzLnBpeGVsUmF0aW9Ubz10LnBpeGVsUmF0aW8sdGhpcy5wYXR0ZXJuRnJvbT1lLnRsYnIsdGhpcy5wYXR0ZXJuVG89dC50bGJyfSxBYS5wcm90b3R5cGUuc2V0VW5pZm9ybT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0idV9wYXR0ZXJuX3RvIj09PW4/dGhpcy5wYXR0ZXJuVG86InVfcGF0dGVybl9mcm9tIj09PW4/dGhpcy5wYXR0ZXJuRnJvbToidV9waXhlbF9yYXRpb190byI9PT1uP3RoaXMucGl4ZWxSYXRpb1RvOiJ1X3BpeGVsX3JhdGlvX2Zyb20iPT09bj90aGlzLnBpeGVsUmF0aW9Gcm9tOm51bGw7aSYmdC5zZXQoaSl9LEFhLnByb3RvdHlwZS5nZXRCaW5kaW5nPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4idV9wYXR0ZXJuIj09PXIuc3Vic3RyKDAsOSk/bmV3IGJhKHQsZSk6bmV3IHZhKHQsZSl9O3ZhciBTYT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLnR5cGU9cix0aGlzLm1heFZhbHVlPTAsdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOiJhXyIrdCx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzI6MSxvZmZzZXQ6MH19KSksdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBufTtTYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5wYWludFZlcnRleEFycmF5Lmxlbmd0aCxvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgaWkoMCksZSx7fSxuLFtdLGkpO3RoaXMucGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUodCksdGhpcy5fc2V0UGFpbnRWYWx1ZShhLHQsbyl9LFNhLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTowfSxyLG4pO3RoaXMuX3NldFBhaW50VmFsdWUodCxlLGkpfSxTYS5wcm90b3R5cGUuX3NldFBhaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe2lmKCJjb2xvciI9PT10aGlzLnR5cGUpZm9yKHZhciBuPWthKHIpLGk9dDtpPGU7aSsrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGksblswXSxuWzFdKTtlbHNle2Zvcih2YXIgYT10O2E8ZTthKyspdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoYSxyKTt0aGlzLm1heFZhbHVlPU1hdGgubWF4KHRoaXMubWF4VmFsdWUsTWF0aC5hYnMocikpfX0sU2EucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJnRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyP3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpOnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LFNhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9O3ZhciBFYT1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5leHByZXNzaW9uPXQsdGhpcy51bmlmb3JtTmFtZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJ1XyIrdCsiX3QifSkpLHRoaXMudHlwZT1yLHRoaXMudXNlSW50ZWdlclpvb209bix0aGlzLnpvb209aSx0aGlzLm1heFZhbHVlPTAsdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOiJhXyIrdCx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzQ6MixvZmZzZXQ6MH19KSksdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBhfTtFYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBpaSh0aGlzLnpvb20pLGUse30sbixbXSxpKSxvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgaWkodGhpcy56b29tKzEpLGUse30sbixbXSxpKSxzPXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7dGhpcy5wYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLl9zZXRQYWludFZhbHVlKHMsdCxhLG8pfSxFYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206dGhpcy56b29tfSxyLG4pLGE9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOnRoaXMuem9vbSsxfSxyLG4pO3RoaXMuX3NldFBhaW50VmFsdWUodCxlLGksYSl9LEVhLnByb3RvdHlwZS5fc2V0UGFpbnRWYWx1ZT1mdW5jdGlvbih0LGUscixuKXtpZigiY29sb3IiPT09dGhpcy50eXBlKWZvcih2YXIgaT1rYShyKSxhPWthKG4pLG89dDtvPGU7bysrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKG8saVswXSxpWzFdLGFbMF0sYVsxXSk7ZWxzZXtmb3IodmFyIHM9dDtzPGU7cysrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKHMscixuKTt0aGlzLm1heFZhbHVlPU1hdGgubWF4KHRoaXMubWF4VmFsdWUsTWF0aC5hYnMociksTWF0aC5hYnMobikpfX0sRWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJnRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyP3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpOnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LEVhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9LEVhLnByb3RvdHlwZS5zZXRVbmlmb3JtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy51c2VJbnRlZ2VyWm9vbT9NYXRoLmZsb29yKGUuem9vbSk6ZS56b29tLG49bCh0aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3RvcihyLHRoaXMuem9vbSx0aGlzLnpvb20rMSksMCwxKTt0LnNldChuKX0sRWEucHJvdG90eXBlLmdldEJpbmRpbmc9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgdmEodCxlKX07dmFyIENhPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLnR5cGU9ZSx0aGlzLnVzZUludGVnZXJab29tPXIsdGhpcy56b29tPW4sdGhpcy5sYXllcklkPWEsdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5PW5ldyBpLHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXk9bmV3IGl9O0NhLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7dGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLl9zZXRQYWludFZhbHVlcyhuLHQsZS5wYXR0ZXJucyYmZS5wYXR0ZXJuc1t0aGlzLmxheWVySWRdLHIpfSxDYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuX3NldFBhaW50VmFsdWVzKHQsZSxyLnBhdHRlcm5zJiZyLnBhdHRlcm5zW3RoaXMubGF5ZXJJZF0saSl9LENhLnByb3RvdHlwZS5fc2V0UGFpbnRWYWx1ZXM9ZnVuY3Rpb24odCxlLHIsbil7aWYobiYmcil7dmFyIGk9bltyLm1pbl0sYT1uW3IubWlkXSxvPW5bci5tYXhdO2lmKGkmJmEmJm8pZm9yKHZhciBzPXQ7czxlO3MrKyl0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShzLGEudGxbMF0sYS50bFsxXSxhLmJyWzBdLGEuYnJbMV0saS50bFswXSxpLnRsWzFdLGkuYnJbMF0saS5iclsxXSxhLnBpeGVsUmF0aW8saS5waXhlbFJhdGlvKSx0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LmVtcGxhY2UocyxhLnRsWzBdLGEudGxbMV0sYS5iclswXSxhLmJyWzFdLG8udGxbMF0sby50bFsxXSxvLmJyWzBdLG8uYnJbMV0sYS5waXhlbFJhdGlvLG8ucGl4ZWxSYXRpbyl9fSxDYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheSYmdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyJiZ0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5JiZ0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyJiYodGhpcy56b29tSW5QYWludFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXksb2EubWVtYmVycyx0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCksdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSxvYS5tZW1iZXJzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LENhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKX07dmFyIExhPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuYmluZGVycz17fSx0aGlzLmxheW91dEF0dHJpYnV0ZXM9bix0aGlzLl9idWZmZXJzPVtdO3ZhciBpPVtdO2Zvcih2YXIgYSBpbiB0LnBhaW50Ll92YWx1ZXMpaWYocihhKSl7dmFyIG89dC5wYWludC5nZXQoYSk7aWYobyBpbnN0YW5jZW9mIGhpJiZMcihvLnByb3BlcnR5LnNwZWNpZmljYXRpb24pKXt2YXIgcz1JYShhLHQudHlwZSksbD1vLnZhbHVlLGM9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUsdT1vLnByb3BlcnR5LnVzZUludGVnZXJab29tLGg9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uWyJwcm9wZXJ0eS10eXBlIl0sZj0iY3Jvc3MtZmFkZWQiPT09aHx8ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIj09PWg7aWYoImNvbnN0YW50Ij09PWwua2luZCl0aGlzLmJpbmRlcnNbYV09Zj9uZXcgQWEobC52YWx1ZSxzKTpuZXcgTWEobC52YWx1ZSxzLGMpLGkucHVzaCgiL3VfIithKTtlbHNlIGlmKCJzb3VyY2UiPT09bC5raW5kfHxmKXt2YXIgcD16YShhLGMsInNvdXJjZSIpO3RoaXMuYmluZGVyc1thXT1mP25ldyBDYShsLGMsdSxlLHAsdC5pZCk6bmV3IFNhKGwscyxjLHApLGkucHVzaCgiL2FfIithKX1lbHNle3ZhciBkPXphKGEsYywiY29tcG9zaXRlIik7dGhpcy5iaW5kZXJzW2FdPW5ldyBFYShsLHMsYyx1LGUsZCksaS5wdXNoKCIvel8iK2EpfX19dGhpcy5jYWNoZUtleT1pLnNvcnQoKS5qb2luKCIiKX07TGEucHJvdG90eXBlLmdldE1heFZhbHVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYmluZGVyc1t0XTtyZXR1cm4gZSBpbnN0YW5jZW9mIFNhfHxlIGluc3RhbmNlb2YgRWE/ZS5tYXhWYWx1ZTowfSxMYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYSBpbiB0aGlzLmJpbmRlcnMpe3ZhciBvPXRoaXMuYmluZGVyc1thXTsobyBpbnN0YW5jZW9mIFNhfHxvIGluc3RhbmNlb2YgRWF8fG8gaW5zdGFuY2VvZiBDYSkmJm8ucG9wdWxhdGVQYWludEFycmF5KHQsZSxyLG4saSl9fSxMYS5wcm90b3R5cGUuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHRoaXMuYmluZGVycyl7dmFyIG49dGhpcy5iaW5kZXJzW3JdO24gaW5zdGFuY2VvZiBBYSYmbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnModCxlKX19LExhLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSExO2Zvcih2YXIgbyBpbiB0KWZvcih2YXIgcz0wLGw9ZS5nZXRQb3NpdGlvbnMobyk7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdLHU9ci5mZWF0dXJlKGMuaW5kZXgpO2Zvcih2YXIgaCBpbiB0aGlzLmJpbmRlcnMpe3ZhciBmPXRoaXMuYmluZGVyc1toXTtpZigoZiBpbnN0YW5jZW9mIFNhfHxmIGluc3RhbmNlb2YgRWF8fGYgaW5zdGFuY2VvZiBDYSkmJiEwPT09Zi5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpe3ZhciBwPW4ucGFpbnQuZ2V0KGgpO2YuZXhwcmVzc2lvbj1wLnZhbHVlLGYudXBkYXRlUGFpbnRBcnJheShjLnN0YXJ0LGMuZW5kLHUsdFtvXSxpKSxhPSEwfX19cmV0dXJuIGF9LExhLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuYmluZGVycyl7dmFyIHI9dGhpcy5iaW5kZXJzW2VdOyhyIGluc3RhbmNlb2YgTWF8fHIgaW5zdGFuY2VvZiBBYSkmJnQucHVzaC5hcHBseSh0LHIudW5pZm9ybU5hbWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIiNkZWZpbmUgSEFTX1VOSUZPUk1fIit0fSkpKX1yZXR1cm4gdH0sTGEucHJvdG90eXBlLmdldFBhaW50VmVydGV4QnVmZmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9idWZmZXJzfSxMYS5wcm90b3R5cGUuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gdGhpcy5iaW5kZXJzKXt2YXIgaT10aGlzLmJpbmRlcnNbbl07aWYoaSBpbnN0YW5jZW9mIE1hfHxpIGluc3RhbmNlb2YgQWF8fGkgaW5zdGFuY2VvZiBFYSlmb3IodmFyIGE9MCxvPWkudW5pZm9ybU5hbWVzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtpZihlW3NdKXt2YXIgbD1pLmdldEJpbmRpbmcodCxlW3NdLHMpO3IucHVzaCh7bmFtZTpzLHByb3BlcnR5Om4sYmluZGluZzpsfSl9fX1yZXR1cm4gcn0sTGEucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLm5hbWUsbD1vLnByb3BlcnR5O3RoaXMuYmluZGVyc1tsXS5zZXRVbmlmb3JtKG8uYmluZGluZyxuLHIuZ2V0KGwpLHMpfX0sTGEucHJvdG90eXBlLnVwZGF0ZVBhaW50QnVmZmVycz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fYnVmZmVycz1bXSx0aGlzLmJpbmRlcnMpe3ZhciByPXRoaXMuYmluZGVyc1tlXTtpZih0JiZyIGluc3RhbmNlb2YgQ2Epe3ZhciBuPTI9PT10LmZyb21TY2FsZT9yLnpvb21JblBhaW50VmVydGV4QnVmZmVyOnIuem9vbU91dFBhaW50VmVydGV4QnVmZmVyO24mJnRoaXMuX2J1ZmZlcnMucHVzaChuKX1lbHNlKHIgaW5zdGFuY2VvZiBTYXx8ciBpbnN0YW5jZW9mIEVhKSYmci5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5fYnVmZmVycy5wdXNoKHIucGFpbnRWZXJ0ZXhCdWZmZXIpfX0sTGEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5iaW5kZXJzKXt2YXIgcj10aGlzLmJpbmRlcnNbZV07KHIgaW5zdGFuY2VvZiBTYXx8ciBpbnN0YW5jZW9mIEVhfHxyIGluc3RhbmNlb2YgQ2EpJiZyLnVwbG9hZCh0KX10aGlzLnVwZGF0ZVBhaW50QnVmZmVycygpfSxMYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmJpbmRlcnMpe3ZhciBlPXRoaXMuYmluZGVyc1t0XTsoZSBpbnN0YW5jZW9mIFNhfHxlIGluc3RhbmNlb2YgRWF8fGUgaW5zdGFuY2VvZiBDYSkmJmUuZGVzdHJveSgpfX07dmFyIFBhPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPWZ1bmN0aW9uKCl7cmV0dXJuITB9KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz17fTtmb3IodmFyIGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3RoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW28uaWRdPW5ldyBMYShvLHIsbix0KX10aGlzLm5lZWRzVXBsb2FkPSExLHRoaXMuX2ZlYXR1cmVNYXA9bmV3IGhhLHRoaXMuX2J1ZmZlck9mZnNldD0wfTtmdW5jdGlvbiBJYSh0LGUpe3JldHVybnsidGV4dC1vcGFjaXR5IjpbIm9wYWNpdHkiXSwiaWNvbi1vcGFjaXR5IjpbIm9wYWNpdHkiXSwidGV4dC1jb2xvciI6WyJmaWxsX2NvbG9yIl0sImljb24tY29sb3IiOlsiZmlsbF9jb2xvciJdLCJ0ZXh0LWhhbG8tY29sb3IiOlsiaGFsb19jb2xvciJdLCJpY29uLWhhbG8tY29sb3IiOlsiaGFsb19jb2xvciJdLCJ0ZXh0LWhhbG8tYmx1ciI6WyJoYWxvX2JsdXIiXSwiaWNvbi1oYWxvLWJsdXIiOlsiaGFsb19ibHVyIl0sInRleHQtaGFsby13aWR0aCI6WyJoYWxvX3dpZHRoIl0sImljb24taGFsby13aWR0aCI6WyJoYWxvX3dpZHRoIl0sImxpbmUtZ2FwLXdpZHRoIjpbImdhcHdpZHRoIl0sImxpbmUtcGF0dGVybiI6WyJwYXR0ZXJuX3RvIiwicGF0dGVybl9mcm9tIiwicGl4ZWxfcmF0aW9fdG8iLCJwaXhlbF9yYXRpb19mcm9tIl0sImZpbGwtcGF0dGVybiI6WyJwYXR0ZXJuX3RvIiwicGF0dGVybl9mcm9tIiwicGl4ZWxfcmF0aW9fdG8iLCJwaXhlbF9yYXRpb19mcm9tIl0sImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOlsicGF0dGVybl90byIsInBhdHRlcm5fZnJvbSIsInBpeGVsX3JhdGlvX3RvIiwicGl4ZWxfcmF0aW9fZnJvbSJdfVt0XXx8W3QucmVwbGFjZShlKyItIiwiIikucmVwbGFjZSgvLS9nLCJfIildfWZ1bmN0aW9uIHphKHQsZSxyKXt2YXIgbj17Y29sb3I6e3NvdXJjZTpHaSxjb21wb3NpdGU6WWl9LG51bWJlcjp7c291cmNlOmppLGNvbXBvc2l0ZTpHaX19LGk9ZnVuY3Rpb24odCl7cmV0dXJueyJsaW5lLXBhdHRlcm4iOntzb3VyY2U6Q2ksY29tcG9zaXRlOkNpfSwiZmlsbC1wYXR0ZXJuIjp7c291cmNlOkNpLGNvbXBvc2l0ZTpDaX0sImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOntzb3VyY2U6Q2ksY29tcG9zaXRlOkNpfX1bdF19KHQpO3JldHVybiBpJiZpW3JdfHxuW2VdW3JdfVBhLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG8gaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbb10ucG9wdWxhdGVQYWludEFycmF5cyh0LGUsbixpLGEpO3ZvaWQgMCE9PWUuaWQmJnRoaXMuX2ZlYXR1cmVNYXAuYWRkKGUuaWQscix0aGlzLl9idWZmZXJPZmZzZXQsdCksdGhpcy5fYnVmZmVyT2Zmc2V0PXQsdGhpcy5uZWVkc1VwbG9hZD0hMH0sUGEucHJvdG90eXBlLnVwZGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9cjtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07dGhpcy5uZWVkc1VwbG9hZD10aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tvLmlkXS51cGRhdGVQYWludEFycmF5cyh0LHRoaXMuX2ZlYXR1cmVNYXAsZSxvLG4pfHx0aGlzLm5lZWRzVXBsb2FkfX0sUGEucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF19LFBhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5uZWVkc1VwbG9hZCl7Zm9yKHZhciBlIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2VdLnVwbG9hZCh0KTt0aGlzLm5lZWRzVXBsb2FkPSExfX0sUGEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbdF0uZGVzdHJveSgpfSxEbigiQ29uc3RhbnRCaW5kZXIiLE1hKSxEbigiQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyIixBYSksRG4oIlNvdXJjZUV4cHJlc3Npb25CaW5kZXIiLFNhKSxEbigiQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlciIsQ2EpLERuKCJDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyIixFYSksRG4oIlByb2dyYW1Db25maWd1cmF0aW9uIixMYSx7b21pdDpbIl9idWZmZXJzIl19KSxEbigiUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQiLFBhKTt2YXIgT2E9e21pbjotMSpNYXRoLnBvdygyLDE0KSxtYXg6TWF0aC5wb3coMiwxNCktMX07ZnVuY3Rpb24gRGEodCl7Zm9yKHZhciBlPTgxOTIvdC5leHRlbnQscj10LmxvYWRHZW9tZXRyeSgpLG49MDtuPHIubGVuZ3RoO24rKylmb3IodmFyIGk9cltuXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07by54PU1hdGgucm91bmQoby54KmUpLG8ueT1NYXRoLnJvdW5kKG8ueSplKSwoby54PE9hLm1pbnx8by54Pk9hLm1heHx8by55PE9hLm1pbnx8by55Pk9hLm1heCkmJihfKCJHZW9tZXRyeSBleGNlZWRzIGFsbG93ZWQgZXh0ZW50LCByZWR1Y2UgeW91ciB2ZWN0b3IgdGlsZSBidWZmZXIgc2l6ZSIpLG8ueD1sKG8ueCxPYS5taW4sT2EubWF4KSxvLnk9bChvLnksT2EubWluLE9hLm1heCkpfXJldHVybiByfWZ1bmN0aW9uIFJhKHQsZSxyLG4saSl7dC5lbXBsYWNlQmFjaygyKmUrKG4rMSkvMiwyKnIrKGkrMSkvMil9dmFyIEZhPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IE1pLHRoaXMuaW5kZXhBcnJheT1uZXcgRmksdGhpcy5zZWdtZW50cz1uZXcgaWEsdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IFBhKG5hLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSl9O2Z1bmN0aW9uIEJhKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoV2EoZSx0W3JdKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihXYSh0LGVbbl0pKXJldHVybiEwO3JldHVybiEhVmEodCxlKX1mdW5jdGlvbiBOYSh0LGUscil7cmV0dXJuISFXYSh0LGUpfHwhIUhhKGUsdCxyKX1mdW5jdGlvbiBqYSh0LGUpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gWWEoZSx0WzBdKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylmb3IodmFyIG49ZVtyXSxpPTA7aTxuLmxlbmd0aDtpKyspaWYoV2EodCxuW2ldKSlyZXR1cm4hMDtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihZYShlLHRbYV0pKXJldHVybiEwO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKWlmKFZhKHQsZVtvXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVWEodCxlLHIpe2lmKHQubGVuZ3RoPjEpe2lmKFZhKHQsZSkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoSGEoZVtuXSx0LHIpKXJldHVybiEwfWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKEhhKHRbaV0sZSxyKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBWYSh0LGUpe2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGgtMTtyKyspZm9yKHZhciBuPXRbcl0saT10W3IrMV0sYT0wO2E8ZS5sZW5ndGgtMTthKyspaWYocWEobixpLGVbYV0sZVthKzFdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBxYSh0LGUscixuKXtyZXR1cm4gdyh0LHIsbikhPT13KGUscixuKSYmdyh0LGUscikhPT13KHQsZSxuKX1mdW5jdGlvbiBIYSh0LGUscil7dmFyIG49cipyO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gdC5kaXN0U3FyKGVbMF0pPG47Zm9yKHZhciBpPTE7aTxlLmxlbmd0aDtpKyspaWYoR2EodCxlW2ktMV0sZVtpXSk8bilyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBHYSh0LGUscil7dmFyIG49ZS5kaXN0U3FyKHIpO2lmKDA9PT1uKXJldHVybiB0LmRpc3RTcXIoZSk7dmFyIGk9KCh0LngtZS54KSooci54LWUueCkrKHQueS1lLnkpKihyLnktZS55KSkvbjtyZXR1cm4gdC5kaXN0U3FyKGk8MD9lOmk+MT9yOnIuc3ViKGUpLl9tdWx0KGkpLl9hZGQoZSkpfWZ1bmN0aW9uIFlhKHQsZSl7Zm9yKHZhciByLG4saSxhPSExLG89MDtvPHQubGVuZ3RoO28rKylmb3IodmFyIHM9MCxsPShyPXRbb10pLmxlbmd0aC0xO3M8ci5sZW5ndGg7bD1zKyspKG49cltzXSkueT5lLnkhPShpPXJbbF0pLnk+ZS55JiZlLng8KGkueC1uLngpKihlLnktbi55KS8oaS55LW4ueSkrbi54JiYoYT0hYSk7cmV0dXJuIGF9ZnVuY3Rpb24gV2EodCxlKXtmb3IodmFyIHI9ITEsbj0wLGk9dC5sZW5ndGgtMTtuPHQubGVuZ3RoO2k9bisrKXt2YXIgYT10W25dLG89dFtpXTthLnk+ZS55IT1vLnk+ZS55JiZlLng8KG8ueC1hLngpKihlLnktYS55KS8oby55LWEueSkrYS54JiYocj0hcil9cmV0dXJuIHJ9ZnVuY3Rpb24gWmEodCxlLHIpe3ZhciBuPXJbMF0saT1yWzJdO2lmKHQueDxuLngmJmUueDxuLnh8fHQueD5pLngmJmUueD5pLnh8fHQueTxuLnkmJmUueTxuLnl8fHQueT5pLnkmJmUueT5pLnkpcmV0dXJuITE7dmFyIGE9dyh0LGUsclswXSk7cmV0dXJuIGEhPT13KHQsZSxyWzFdKXx8YSE9PXcodCxlLHJbMl0pfHxhIT09dyh0LGUsclszXSl9ZnVuY3Rpb24gWGEodCxlLHIpe3ZhciBuPWUucGFpbnQuZ2V0KHQpLnZhbHVlO3JldHVybiJjb25zdGFudCI9PT1uLmtpbmQ/bi52YWx1ZTpyLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoZS5pZCkuZ2V0TWF4VmFsdWUodCl9ZnVuY3Rpb24gSmEodCl7cmV0dXJuIE1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKX1mdW5jdGlvbiBLYSh0LGUscixuLGEpe2lmKCFlWzBdJiYhZVsxXSlyZXR1cm4gdDt2YXIgbz1pLmNvbnZlcnQoZSkuX211bHQoYSk7InZpZXdwb3J0Ij09PXImJm8uX3JvdGF0ZSgtbik7Zm9yKHZhciBzPVtdLGw9MDtsPHQubGVuZ3RoO2wrKylzLnB1c2godFtsXS5zdWIobykpO3JldHVybiBzfUZhLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sYXllcnNbMF0saT1bXSxhPW51bGw7ImNpcmNsZSI9PT1uLnR5cGUmJihhPW4ubGF5b3V0LmdldCgiY2lyY2xlLXNvcnQta2V5IikpO2Zvcih2YXIgbz0wLHM9dDtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLmZlYXR1cmUsdT1sLmlkLGg9bC5pbmRleCxmPWwuc291cmNlTGF5ZXJJbmRleCxwPXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxkPXt0eXBlOmMudHlwZSxpZDp1LHByb3BlcnRpZXM6Yy5wcm9wZXJ0aWVzLGdlb21ldHJ5OnA/RGEoYyk6W119O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihuZXcgaWkodGhpcy56b29tKSxkLHIpKXtwfHwoZC5nZW9tZXRyeT1EYShjKSk7dmFyIGc9YT9hLmV2YWx1YXRlKGQse30scik6dm9pZCAwO2kucHVzaCh7aWQ6dSxwcm9wZXJ0aWVzOmMucHJvcGVydGllcyx0eXBlOmMudHlwZSxzb3VyY2VMYXllckluZGV4OmYsaW5kZXg6aCxnZW9tZXRyeTpkLmdlb21ldHJ5LHBhdHRlcm5zOnt9LHNvcnRLZXk6Z30pfX1hJiZpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciBtPTAsdj1pO208di5sZW5ndGg7bSs9MSl7dmFyIHk9dlttXSx4PXkuZ2VvbWV0cnksYj15LmluZGV4LF89eS5zb3VyY2VMYXllckluZGV4LHc9dFtiXS5mZWF0dXJlO3RoaXMuYWRkRmVhdHVyZSh5LHgsYixyKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQodyx4LGIsXyx0aGlzLmluZGV4KX19LEZhLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5zdGF0ZURlcGVuZGVudExheWVycyxyKX0sRmEucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxGYS5wcm90b3R5cGUudXBsb2FkUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVwbG9hZGVkfHx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZH0sRmEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnVwbG9hZGVkfHwodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxuYSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSx0aGlzLnVwbG9hZGVkPSEwfSxGYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LEZhLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpZm9yKHZhciBvPTAscz1hW2ldO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWwueCx1PWwueTtpZighKGM8MHx8Yz49ODE5Mnx8dTwwfHx1Pj04MTkyKSl7dmFyIGg9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5LHQuc29ydEtleSksZj1oLnZlcnRleExlbmd0aDtSYSh0aGlzLmxheW91dFZlcnRleEFycmF5LGMsdSwtMSwtMSksUmEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxjLHUsMSwtMSksUmEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxjLHUsMSwxKSxSYSh0aGlzLmxheW91dFZlcnRleEFycmF5LGMsdSwtMSwxKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soZixmKzEsZisyKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soZixmKzMsZisyKSxoLnZlcnRleExlbmd0aCs9NCxoLnByaW1pdGl2ZUxlbmd0aCs9Mn19dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0LHIse30sbil9LERuKCJDaXJjbGVCdWNrZXQiLEZhLHtvbWl0OlsibGF5ZXJzIl19KTt2YXIgUWE9bmV3IHlpKHsiY2lyY2xlLXNvcnQta2V5IjpuZXcgZGkoQXQubGF5b3V0X2NpcmNsZVsiY2lyY2xlLXNvcnQta2V5Il0pfSksJGE9e3BhaW50Om5ldyB5aSh7ImNpcmNsZS1yYWRpdXMiOm5ldyBkaShBdC5wYWludF9jaXJjbGVbImNpcmNsZS1yYWRpdXMiXSksImNpcmNsZS1jb2xvciI6bmV3IGRpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLWNvbG9yIl0pLCJjaXJjbGUtYmx1ciI6bmV3IGRpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLWJsdXIiXSksImNpcmNsZS1vcGFjaXR5IjpuZXcgZGkoQXQucGFpbnRfY2lyY2xlWyJjaXJjbGUtb3BhY2l0eSJdKSwiY2lyY2xlLXRyYW5zbGF0ZSI6bmV3IHBpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXRyYW5zbGF0ZSJdKSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyBwaShBdC5wYWludF9jaXJjbGVbImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIl0pLCJjaXJjbGUtcGl0Y2gtc2NhbGUiOm5ldyBwaShBdC5wYWludF9jaXJjbGVbImNpcmNsZS1waXRjaC1zY2FsZSJdKSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6bmV3IHBpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXBpdGNoLWFsaWdubWVudCJdKSwiY2lyY2xlLXN0cm9rZS13aWR0aCI6bmV3IGRpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS13aWR0aCJdKSwiY2lyY2xlLXN0cm9rZS1jb2xvciI6bmV3IGRpKEF0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS1jb2xvciJdKSwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5IjpuZXcgZGkoQXQucGFpbnRfY2lyY2xlWyJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiXSl9KSxsYXlvdXQ6UWF9LHRvPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQzMkFycmF5P0Zsb2F0MzJBcnJheTpBcnJheTtmdW5jdGlvbiBlbyh0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9ZnVuY3Rpb24gcm8odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGg9ZVs4XSxmPWVbOV0scD1lWzEwXSxkPWVbMTFdLGc9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypoK3cqZyx0WzFdPXgqaStiKmwrXypmK3cqbSx0WzJdPXgqYStiKmMrXypwK3cqdix0WzNdPXgqbytiKnUrXypkK3cqeSx0WzRdPSh4PXJbNF0pKm4rKGI9cls1XSkqcysoXz1yWzZdKSpoKyh3PXJbN10pKmcsdFs1XT14KmkrYipsK18qZit3Km0sdFs2XT14KmErYipjK18qcCt3KnYsdFs3XT14Km8rYip1K18qZCt3KnksdFs4XT0oeD1yWzhdKSpuKyhiPXJbOV0pKnMrKF89clsxMF0pKmgrKHc9clsxMV0pKmcsdFs5XT14KmkrYipsK18qZit3Km0sdFsxMF09eCphK2IqYytfKnArdyp2LHRbMTFdPXgqbytiKnUrXypkK3cqeSx0WzEyXT0oeD1yWzEyXSkqbisoYj1yWzEzXSkqcysoXz1yWzE0XSkqaCsodz1yWzE1XSkqZyx0WzEzXT14KmkrYipsK18qZit3Km0sdFsxNF09eCphK2IqYytfKnArdyp2LHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fU1hdGguaHlwb3R8fChNYXRoLmh5cG90PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cyxlPTAscj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZSs9dFtyXSp0W3JdO3JldHVybiBNYXRoLnNxcnQoZSl9KTt2YXIgbm8saW89cm87ZnVuY3Rpb24gYW8odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzhdKmErclsxMl0qbyx0WzFdPXJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKm8sdFsyXT1yWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0qbyx0WzNdPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XSpvLHR9bm89bmV3IHRvKDMpLHRvIT1GbG9hdDMyQXJyYXkmJihub1swXT0wLG5vWzFdPTAsbm9bMl09MCksZnVuY3Rpb24oKXt2YXIgdD1uZXcgdG8oNCk7dG8hPUZsb2F0MzJBcnJheSYmKHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MCl9KCk7dmFyIG9vPShmdW5jdGlvbigpe3ZhciB0PW5ldyB0bygyKTt0byE9RmxvYXQzMkFycmF5JiYodFswXT0wLHRbMV09MCl9KCksZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLCRhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGYSh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24odCl7dmFyIGU9dDtyZXR1cm4gWGEoImNpcmNsZS1yYWRpdXMiLHRoaXMsZSkrWGEoImNpcmNsZS1zdHJva2Utd2lkdGgiLHRoaXMsZSkrSmEodGhpcy5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9S2EodCx0aGlzLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciIpLGEuYW5nbGUsbyksYz10aGlzLnBhaW50LmdldCgiY2lyY2xlLXJhZGl1cyIpLmV2YWx1YXRlKGUscikrdGhpcy5wYWludC5nZXQoImNpcmNsZS1zdHJva2Utd2lkdGgiKS5ldmFsdWF0ZShlLHIpLHU9Im1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpLGg9dT9sOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gc28odCxlKX0pKX0obCxzKSxmPXU/YypvOmMscD0wLGQ9bjtwPGQubGVuZ3RoO3ArPTEpZm9yKHZhciBnPTAsbT1kW3BdO2c8bS5sZW5ndGg7Zys9MSl7dmFyIHY9bVtnXSx5PXU/djpzbyh2LHMpLHg9ZixiPWFvKFtdLFt2Lngsdi55LDAsMV0scyk7aWYoInZpZXdwb3J0Ij09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtc2NhbGUiKSYmIm1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpP3gqPWJbM10vYS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlOiJtYXAiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1zY2FsZSIpJiYidmlld3BvcnQiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKSYmKHgqPWEuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9iWzNdKSxOYShoLHkseCkpcmV0dXJuITB9cmV0dXJuITF9LGV9KHhpKSk7ZnVuY3Rpb24gc28odCxlKXt2YXIgcj1hbyhbXSxbdC54LHQueSwwLDFdLGUpO3JldHVybiBuZXcgaShyWzBdL3JbM10sclsxXS9yWzNdKX12YXIgbG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGV9KEZhKTtmdW5jdGlvbiBjbyh0LGUscixuKXt2YXIgaT1lLndpZHRoLGE9ZS5oZWlnaHQ7aWYobil7aWYobiBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KW49bmV3IFVpbnQ4QXJyYXkobi5idWZmZXIpO2Vsc2UgaWYobi5sZW5ndGghPT1pKmEqcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigibWlzbWF0Y2hlZCBpbWFnZSBzaXplIil9ZWxzZSBuPW5ldyBVaW50OEFycmF5KGkqYSpyKTtyZXR1cm4gdC53aWR0aD1pLHQuaGVpZ2h0PWEsdC5kYXRhPW4sdH1mdW5jdGlvbiB1byh0LGUscil7dmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0O2lmKG4hPT10LndpZHRofHxpIT09dC5oZWlnaHQpe3ZhciBhPWNvKHt9LHt3aWR0aDpuLGhlaWdodDppfSxyKTtobyh0LGEse3g6MCx5OjB9LHt4OjAseTowfSx7d2lkdGg6TWF0aC5taW4odC53aWR0aCxuKSxoZWlnaHQ6TWF0aC5taW4odC5oZWlnaHQsaSl9LHIpLHQud2lkdGg9bix0LmhlaWdodD1pLHQuZGF0YT1hLmRhdGF9fWZ1bmN0aW9uIGhvKHQsZSxyLG4saSxhKXtpZigwPT09aS53aWR0aHx8MD09PWkuaGVpZ2h0KXJldHVybiBlO2lmKGkud2lkdGg+dC53aWR0aHx8aS5oZWlnaHQ+dC5oZWlnaHR8fHIueD50LndpZHRoLWkud2lkdGh8fHIueT50LmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weSIpO2lmKGkud2lkdGg+ZS53aWR0aHx8aS5oZWlnaHQ+ZS5oZWlnaHR8fG4ueD5lLndpZHRoLWkud2lkdGh8fG4ueT5lLmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Iik7Zm9yKHZhciBvPXQuZGF0YSxzPWUuZGF0YSxsPTA7bDxpLmhlaWdodDtsKyspZm9yKHZhciBjPSgoci55K2wpKnQud2lkdGgrci54KSphLHU9KChuLnkrbCkqZS53aWR0aCtuLngpKmEsaD0wO2g8aS53aWR0aCphO2grKylzW3UraF09b1tjK2hdO3JldHVybiBlfURuKCJIZWF0bWFwQnVja2V0Iixsbyx7b21pdDpbImxheWVycyJdfSk7dmFyIGZvPWZ1bmN0aW9uKHQsZSl7Y28odGhpcyx0LDEsZSl9O2ZvLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7dW8odGhpcyx0LDEpfSxmby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZvKHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSl9LGZvLmNvcHk9ZnVuY3Rpb24odCxlLHIsbixpKXtobyh0LGUscixuLGksMSl9O3ZhciBwbz1mdW5jdGlvbih0LGUpe2NvKHRoaXMsdCw0LGUpfTtwby5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3VvKHRoaXMsdCw0KX0scG8ucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24odCxlKXtlP3RoaXMuZGF0YS5zZXQodCk6dGhpcy5kYXRhPXQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheT9uZXcgVWludDhBcnJheSh0LmJ1ZmZlcik6dH0scG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwbyh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9LG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpfSxwby5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4saSl7aG8odCxlLHIsbixpLDQpfSxEbigiQWxwaGFJbWFnZSIsZm8pLERuKCJSR0JBSW1hZ2UiLHBvKTt2YXIgZ289e3BhaW50Om5ldyB5aSh7ImhlYXRtYXAtcmFkaXVzIjpuZXcgZGkoQXQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1yYWRpdXMiXSksImhlYXRtYXAtd2VpZ2h0IjpuZXcgZGkoQXQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC13ZWlnaHQiXSksImhlYXRtYXAtaW50ZW5zaXR5IjpuZXcgcGkoQXQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1pbnRlbnNpdHkiXSksImhlYXRtYXAtY29sb3IiOm5ldyB2aShBdC5wYWludF9oZWF0bWFwWyJoZWF0bWFwLWNvbG9yIl0pLCJoZWF0bWFwLW9wYWNpdHkiOm5ldyBwaShBdC5wYWludF9oZWF0bWFwWyJoZWF0bWFwLW9wYWNpdHkiXSl9KX07ZnVuY3Rpb24gbW8odCxlKXtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj17fSxpPTAsYT0wO2k8MjU2O2krKyxhKz00KXtuW2VdPWkvMjU1O3ZhciBvPXQuZXZhbHVhdGUobik7clthKzBdPU1hdGguZmxvb3IoMjU1Km8uci9vLmEpLHJbYSsxXT1NYXRoLmZsb29yKDI1NSpvLmcvby5hKSxyW2ErMl09TWF0aC5mbG9vcigyNTUqby5iL28uYSksclthKzNdPU1hdGguZmxvb3IoMjU1Km8uYSl9cmV0dXJuIG5ldyBwbyh7d2lkdGg6MjU2LGhlaWdodDoxfSxyKX12YXIgdm89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLGdvKSx0aGlzLl91cGRhdGVDb2xvclJhbXAoKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBsbyh0KX0sZS5wcm90b3R5cGUuX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlPWZ1bmN0aW9uKHQpeyJoZWF0bWFwLWNvbG9yIj09PXQmJnRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlQ29sb3JSYW1wPWZ1bmN0aW9uKCl7dGhpcy5jb2xvclJhbXA9bW8odGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWyJoZWF0bWFwLWNvbG9yIl0udmFsdWUuZXhwcmVzc2lvbiwiaGVhdG1hcERlbnNpdHkiKSx0aGlzLmNvbG9yUmFtcFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwRmJvJiYodGhpcy5oZWF0bWFwRmJvLmRlc3Ryb3koKSx0aGlzLmhlYXRtYXBGYm89bnVsbCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpJiYibm9uZSIhPT10aGlzLnZpc2liaWxpdHl9LGV9KHhpKSx5bz17cGFpbnQ6bmV3IHlpKHsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb24iOm5ldyBwaShBdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIl0pLCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciI6bmV3IHBpKEF0LnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiXSksImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOm5ldyBwaShBdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iXSksImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiOm5ldyBwaShBdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiXSksImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiOm5ldyBwaShBdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiXSksImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiOm5ldyBwaShBdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiXSl9KX0seG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHlvKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldCgiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiIpJiYibm9uZSIhPT10aGlzLnZpc2liaWxpdHl9LGV9KHhpKSxibz1UaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxfbz1Ubyx3bz1UbztmdW5jdGlvbiBUbyh0LGUscil7cj1yfHwyO3ZhciBuLGksYSxvLHMsbCxjLHU9ZSYmZS5sZW5ndGgsaD11P2VbMF0qcjp0Lmxlbmd0aCxmPWtvKHQsMCxoLHIsITApLHA9W107aWYoIWZ8fGYubmV4dD09PWYucHJldilyZXR1cm4gcDtpZih1JiYoZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1bXTtmb3IoaT0wLGE9ZS5sZW5ndGg7aTxhO2krKykobz1rbyh0LGVbaV0qbixpPGEtMT9lW2krMV0qbjp0Lmxlbmd0aCxuLCExKSk9PT1vLm5leHQmJihvLnN0ZWluZXI9ITApLHMucHVzaChEbyhvKSk7Zm9yKHMuc29ydChQbyksaT0wO2k8cy5sZW5ndGg7aSsrKUlvKHNbaV0scikscj1NbyhyLHIubmV4dCk7cmV0dXJuIHJ9KHQsZSxmLHIpKSx0Lmxlbmd0aD44MCpyKXtuPWE9dFswXSxpPW89dFsxXTtmb3IodmFyIGQ9cjtkPGg7ZCs9cikocz10W2RdKTxuJiYobj1zKSwobD10W2QrMV0pPGkmJihpPWwpLHM+YSYmKGE9cyksbD5vJiYobz1sKTtjPTAhPT0oYz1NYXRoLm1heChhLW4sby1pKSk/MS9jOjB9cmV0dXJuIEFvKGYscCxyLG4saSxjKSxwfWZ1bmN0aW9uIGtvKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09Wm8odCxlLHIsbik+MClmb3IoYT1lO2E8cjthKz1uKW89R28oYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz1HbyhhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZObyhvLG8ubmV4dCkmJihZbyhvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBNbyh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IU5vKG4sbi5uZXh0KSYmMCE9PUJvKG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihZbyhuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIEFvKHQsZSxyLG4saSxhLG8pe2lmKHQpeyFvJiZhJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10O2Rve251bGw9PT1pLnomJihpLno9T28oaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwIT09cyYmKDA9PT1sfHwhbnx8ci56PD1uLnopPyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKX0oaSl9KHQsbixpLGEpO2Zvcih2YXIgcyxsLGM9dDt0LnByZXYhPT10Lm5leHQ7KWlmKHM9dC5wcmV2LGw9dC5uZXh0LGE/RW8odCxuLGksYSk6U28odCkpZS5wdXNoKHMuaS9yKSxlLnB1c2godC5pL3IpLGUucHVzaChsLmkvciksWW8odCksdD1sLm5leHQsYz1sLm5leHQ7ZWxzZSBpZigodD1sKT09PWMpe28/MT09PW8/QW8odD1DbyhNbyh0KSxlLHIpLGUscixuLGksYSwyKToyPT09byYmTG8odCxlLHIsbixpLGEpOkFvKE1vKHQpLGUscixuLGksYSwxKTticmVha319fWZ1bmN0aW9uIFNvKHQpe3ZhciBlPXQucHJldixyPXQsbj10Lm5leHQ7aWYoQm8oZSxyLG4pPj0wKXJldHVybiExO2Zvcih2YXIgaT10Lm5leHQubmV4dDtpIT09dC5wcmV2Oyl7aWYoUm8oZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJkJvKGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gRW8odCxlLHIsbil7dmFyIGk9dC5wcmV2LGE9dCxvPXQubmV4dDtpZihCbyhpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCxsPWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxjPU9vKGkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxpLnk8YS55P2kueTxvLnk/aS55Om8ueTphLnk8by55P2EueTpvLnksZSxyLG4pLHU9T28ocyxsLGUscixuKSxoPXQucHJldlosZj10Lm5leHRaO2gmJmguej49YyYmZiYmZi56PD11Oyl7aWYoaCE9PXQucHJldiYmaCE9PXQubmV4dCYmUm8oaS54LGkueSxhLngsYS55LG8ueCxvLnksaC54LGgueSkmJkJvKGgucHJldixoLGgubmV4dCk+PTApcmV0dXJuITE7aWYoaD1oLnByZXZaLGYhPT10LnByZXYmJmYhPT10Lm5leHQmJlJvKGkueCxpLnksYS54LGEueSxvLngsby55LGYueCxmLnkpJiZCbyhmLnByZXYsZixmLm5leHQpPj0wKXJldHVybiExO2Y9Zi5uZXh0Wn1mb3IoO2gmJmguej49Yzspe2lmKGghPT10LnByZXYmJmghPT10Lm5leHQmJlJvKGkueCxpLnksYS54LGEueSxvLngsby55LGgueCxoLnkpJiZCbyhoLnByZXYsaCxoLm5leHQpPj0wKXJldHVybiExO2g9aC5wcmV2Wn1mb3IoO2YmJmYuejw9dTspe2lmKGYhPT10LnByZXYmJmYhPT10Lm5leHQmJlJvKGkueCxpLnksYS54LGEueSxvLngsby55LGYueCxmLnkpJiZCbyhmLnByZXYsZixmLm5leHQpPj0wKXJldHVybiExO2Y9Zi5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBDbyh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsYT1uLm5leHQubmV4dDshTm8oaSxhKSYmam8oaSxuLG4ubmV4dCxhKSYmcW8oaSxhKSYmcW8oYSxpKSYmKGUucHVzaChpLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goYS5pL3IpLFlvKG4pLFlvKG4ubmV4dCksbj10PWEpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gTW8obil9ZnVuY3Rpb24gTG8odCxlLHIsbixpLGEpe3ZhciBvPXQ7ZG97Zm9yKHZhciBzPW8ubmV4dC5uZXh0O3MhPT1vLnByZXY7KXtpZihvLmkhPT1zLmkmJkZvKG8scykpe3ZhciBsPUhvKG8scyk7cmV0dXJuIG89TW8obyxvLm5leHQpLGw9TW8obCxsLm5leHQpLEFvKG8sZSxyLG4saSxhKSx2b2lkIEFvKGwsZSxyLG4saSxhKX1zPXMubmV4dH1vPW8ubmV4dH13aGlsZShvIT09dCl9ZnVuY3Rpb24gUG8odCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBJbyh0LGUpe2lmKGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tMS8wO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXt2YXIgcz1uLngrKGEtbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihzPD1pJiZzPm8pe2lmKG89cyxzPT09aSl7aWYoYT09PW4ueSlyZXR1cm4gbjtpZihhPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1yPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFyKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiByO3ZhciBsLGM9cix1PXIueCxoPXIueSxmPTEvMDtuPXI7ZG97aT49bi54JiZuLng+PXUmJmkhPT1uLngmJlJvKGE8aD9pOm8sYSx1LGgsYTxoP286aSxhLG4ueCxuLnkpJiYobD1NYXRoLmFicyhhLW4ueSkvKGktbi54KSxxbyhuLHQpJiYobDxmfHxsPT09ZiYmKG4ueD5yLnh8fG4ueD09PXIueCYmem8ocixuKSkpJiYocj1uLGY9bCkpLG49bi5uZXh0fXdoaWxlKG4hPT1jKTtyZXR1cm4gcn0odCxlKSl7dmFyIHI9SG8oZSx0KTtNbyhlLGUubmV4dCksTW8ocixyLm5leHQpfX1mdW5jdGlvbiB6byh0LGUpe3JldHVybiBCbyh0LnByZXYsdCxlLnByZXYpPDAmJkJvKGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiBPbyh0LGUscixuLGkpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtcikqaSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbikqaSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uIERvKHQpe3ZhciBlPXQscj10O2RveyhlLng8ci54fHxlLng9PT1yLngmJmUueTxyLnkpJiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gUm8odCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIEZvKHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIWZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZqbyhyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmKHFvKHQsZSkmJnFvKGUsdCkmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPSExLGk9KHQueCtlLngpLzIsYT0odC55K2UueSkvMjtkb3tyLnk+YSE9ci5uZXh0Lnk+YSYmci5uZXh0LnkhPT1yLnkmJmk8KHIubmV4dC54LXIueCkqKGEtci55KS8oci5uZXh0Lnktci55KStyLngmJihuPSFuKSxyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuIG59KHQsZSkmJihCbyh0LnByZXYsdCxlLnByZXYpfHxCbyh0LGUucHJldixlKSl8fE5vKHQsZSkmJkJvKHQucHJldix0LHQubmV4dCk+MCYmQm8oZS5wcmV2LGUsZS5uZXh0KT4wKX1mdW5jdGlvbiBCbyh0LGUscil7cmV0dXJuKGUueS10LnkpKihyLngtZS54KS0oZS54LXQueCkqKHIueS1lLnkpfWZ1bmN0aW9uIE5vKHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIGpvKHQsZSxyLG4pe3ZhciBpPVZvKEJvKHQsZSxyKSksYT1WbyhCbyh0LGUsbikpLG89Vm8oQm8ocixuLHQpKSxzPVZvKEJvKHIsbixlKSk7cmV0dXJuIGkhPT1hJiZvIT09c3x8ISgwIT09aXx8IVVvKHQscixlKSl8fCEoMCE9PWF8fCFVbyh0LG4sZSkpfHwhKDAhPT1vfHwhVW8ocix0LG4pKXx8ISgwIT09c3x8IVVvKHIsZSxuKSl9ZnVuY3Rpb24gVW8odCxlLHIpe3JldHVybiBlLng8PU1hdGgubWF4KHQueCxyLngpJiZlLng+PU1hdGgubWluKHQueCxyLngpJiZlLnk8PU1hdGgubWF4KHQueSxyLnkpJiZlLnk+PU1hdGgubWluKHQueSxyLnkpfWZ1bmN0aW9uIFZvKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBxbyh0LGUpe3JldHVybiBCbyh0LnByZXYsdCx0Lm5leHQpPDA/Qm8odCxlLHQubmV4dCk+PTAmJkJvKHQsdC5wcmV2LGUpPj0wOkJvKHQsZSx0LnByZXYpPDB8fEJvKHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gSG8odCxlKXt2YXIgcj1uZXcgV28odC5pLHQueCx0LnkpLG49bmV3IFdvKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiBHbyh0LGUscixuKXt2YXIgaT1uZXcgV28odCxlLHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBZbyh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIFdvKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBabyh0LGUscixuKXtmb3IodmFyIGk9MCxhPWUsbz1yLW47YTxyO2ErPW4paSs9KHRbb10tdFthXSkqKHRbYSsxXSt0W28rMV0pLG89YTtyZXR1cm4gaX1mdW5jdGlvbiBYbyh0LGUscixuLGkpeyFmdW5jdGlvbiB0KGUscixuLGksYSl7Zm9yKDtpPm47KXtpZihpLW4+NjAwKXt2YXIgbz1pLW4rMSxzPXItbisxLGw9TWF0aC5sb2cobyksYz0uNSpNYXRoLmV4cCgyKmwvMyksdT0uNSpNYXRoLnNxcnQobCpjKihvLWMpL28pKihzLW8vMjwwPy0xOjEpO3QoZSxyLE1hdGgubWF4KG4sTWF0aC5mbG9vcihyLXMqYy9vK3UpKSxNYXRoLm1pbihpLE1hdGguZmxvb3Iocisoby1zKSpjL28rdSkpLGEpfXZhciBoPWVbcl0sZj1uLHA9aTtmb3IoSm8oZSxuLHIpLGEoZVtpXSxoKT4wJiZKbyhlLG4saSk7ZjxwOyl7Zm9yKEpvKGUsZixwKSxmKysscC0tO2EoZVtmXSxoKTwwOylmKys7Zm9yKDthKGVbcF0saCk+MDspcC0tfTA9PT1hKGVbbl0saCk/Sm8oZSxuLHApOkpvKGUsKytwLGkpLHA8PXImJihuPXArMSkscjw9cCYmKGk9cC0xKX19KHQsZSxyfHwwLG58fHQubGVuZ3RoLTEsaXx8S28pfWZ1bmN0aW9uIEpvKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gS28odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gUW8odCxlKXt2YXIgcj10Lmxlbmd0aDtpZihyPD0xKXJldHVyblt0XTtmb3IodmFyIG4saSxhPVtdLG89MDtvPHI7bysrKXt2YXIgcz1UKHRbb10pOzAhPT1zJiYodFtvXS5hcmVhPU1hdGguYWJzKHMpLHZvaWQgMD09PWkmJihpPXM8MCksaT09PXM8MD8obiYmYS5wdXNoKG4pLG49W3Rbb11dKTpuLnB1c2godFtvXSkpfWlmKG4mJmEucHVzaChuKSxlPjEpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspYVtsXS5sZW5ndGg8PWV8fChYbyhhW2xdLGUsMSxhW2xdLmxlbmd0aC0xLCRvKSxhW2xdPWFbbF0uc2xpY2UoMCxlKSk7cmV0dXJuIGF9ZnVuY3Rpb24gJG8odCxlKXtyZXR1cm4gZS5hcmVhLXQuYXJlYX1mdW5jdGlvbiB0cyh0LGUscil7Zm9yKHZhciBuPXIucGF0dGVybkRlcGVuZGVuY2llcyxpPSExLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLnBhaW50LmdldCh0KyItcGF0dGVybiIpO3MuaXNDb25zdGFudCgpfHwoaT0hMCk7dmFyIGw9cy5jb25zdGFudE9yKG51bGwpO2wmJihpPSEwLG5bbC50b109ITAsbltsLmZyb21dPSEwKX1yZXR1cm4gaX1mdW5jdGlvbiBlcyh0LGUscixuLGkpe2Zvcih2YXIgYT1pLnBhdHRlcm5EZXBlbmRlbmNpZXMsbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLnBhaW50LmdldCh0KyItcGF0dGVybiIpLnZhbHVlO2lmKCJjb25zdGFudCIhPT1jLmtpbmQpe3ZhciB1PWMuZXZhbHVhdGUoe3pvb206bi0xfSxyLHt9LGkuYXZhaWxhYmxlSW1hZ2VzKSxoPWMuZXZhbHVhdGUoe3pvb206bn0scix7fSxpLmF2YWlsYWJsZUltYWdlcyksZj1jLmV2YWx1YXRlKHt6b29tOm4rMX0scix7fSxpLmF2YWlsYWJsZUltYWdlcyk7aD1oJiZoLm5hbWU/aC5uYW1lOmgsZj1mJiZmLm5hbWU/Zi5uYW1lOmYsYVt1PXUmJnUubmFtZT91Lm5hbWU6dV09ITAsYVtoXT0hMCxhW2ZdPSEwLHIucGF0dGVybnNbbC5pZF09e21pbjp1LG1pZDpoLG1heDpmfX19cmV0dXJuIHJ9VG8uZGV2aWF0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUmJmUubGVuZ3RoLGE9TWF0aC5hYnMoWm8odCwwLGk/ZVswXSpyOnQubGVuZ3RoLHIpKTtpZihpKWZvcih2YXIgbz0wLHM9ZS5sZW5ndGg7bzxzO28rKylhLT1NYXRoLmFicyhabyh0LGVbb10qcixvPHMtMT9lW28rMV0qcjp0Lmxlbmd0aCxyKSk7dmFyIGw9MDtmb3Iobz0wO288bi5sZW5ndGg7bys9Myl7dmFyIGM9bltvXSpyLHU9bltvKzFdKnIsaD1uW28rMl0qcjtsKz1NYXRoLmFicygodFtjXS10W2hdKSoodFt1KzFdLXRbYysxXSktKHRbY10tdFt1XSkqKHRbaCsxXS10W2MrMV0pKX1yZXR1cm4gMD09PWEmJjA9PT1sPzA6TWF0aC5hYnMoKGwtYSkvYSl9LFRvLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiZyLmhvbGVzLnB1c2gobis9dFtpLTFdLmxlbmd0aCl9cmV0dXJuIHJ9LF9vLmRlZmF1bHQ9d287dmFyIHJzPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMucGF0dGVybkZlYXR1cmVzPVtdLHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IE1pLHRoaXMuaW5kZXhBcnJheT1uZXcgRmksdGhpcy5pbmRleEFycmF5Mj1uZXcgcWksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IFBhKGJvLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgaWEsdGhpcy5zZWdtZW50czI9bmV3IGlhLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpfTtycy5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGFzUGF0dGVybj10cygiZmlsbCIsdGhpcy5sYXllcnMsZSk7Zm9yKHZhciBuPXRoaXMubGF5ZXJzWzBdLmxheW91dC5nZXQoImZpbGwtc29ydC1rZXkiKSxpPVtdLGE9MCxvPXQ7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9cy5mZWF0dXJlLGM9cy5pZCx1PXMuaW5kZXgsaD1zLnNvdXJjZUxheWVySW5kZXgsZj10aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnkscD17dHlwZTpsLnR5cGUsaWQ6Yyxwcm9wZXJ0aWVzOmwucHJvcGVydGllcyxnZW9tZXRyeTpmP0RhKGwpOltdfTtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IGlpKHRoaXMuem9vbSkscCxyKSl7Znx8KHAuZ2VvbWV0cnk9RGEobCkpO3ZhciBkPW4/bi5ldmFsdWF0ZShwLHt9LHIsZS5hdmFpbGFibGVJbWFnZXMpOnZvaWQgMDtpLnB1c2goe2lkOmMscHJvcGVydGllczpsLnByb3BlcnRpZXMsdHlwZTpsLnR5cGUsc291cmNlTGF5ZXJJbmRleDpoLGluZGV4OnUsZ2VvbWV0cnk6cC5nZW9tZXRyeSxwYXR0ZXJuczp7fSxzb3J0S2V5OmR9KX19biYmaS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpO2Zvcih2YXIgZz0wLG09aTtnPG0ubGVuZ3RoO2crPTEpe3ZhciB2PW1bZ10seT12Lmdlb21ldHJ5LHg9di5pbmRleCxiPXYuc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmhhc1BhdHRlcm4pe3ZhciBfPWVzKCJmaWxsIix0aGlzLmxheWVycyx2LHRoaXMuem9vbSxlKTt0aGlzLnBhdHRlcm5GZWF0dXJlcy5wdXNoKF8pfWVsc2UgdGhpcy5hZGRGZWF0dXJlKHYseSx4LHIse30pO2UuZmVhdHVyZUluZGV4Lmluc2VydCh0W3hdLmZlYXR1cmUseSx4LGIsdGhpcy5pbmRleCl9fSxycy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCYmdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXModCxlLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMscil9LHJzLnByb3RvdHlwZS5hZGRGZWF0dXJlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLnBhdHRlcm5GZWF0dXJlcztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dGhpcy5hZGRGZWF0dXJlKGEsYS5nZW9tZXRyeSxhLmluZGV4LGUscil9fSxycy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LHJzLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxycy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LGJvKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLmluZGV4QnVmZmVyMj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheTIpKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy51cGxvYWRlZD0hMH0scnMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyMi5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMyLmRlc3Ryb3koKSl9LHJzLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPTAsbz1RbyhlLDUwMCk7YTxvLmxlbmd0aDthKz0xKXtmb3IodmFyIHM9b1thXSxsPTAsYz0wLHU9cztjPHUubGVuZ3RoO2MrPTEpbCs9dVtjXS5sZW5ndGg7Zm9yKHZhciBoPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQobCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksZj1oLnZlcnRleExlbmd0aCxwPVtdLGQ9W10sZz0wLG09cztnPG0ubGVuZ3RoO2crPTEpe3ZhciB2PW1bZ107aWYoMCE9PXYubGVuZ3RoKXt2IT09c1swXSYmZC5wdXNoKHAubGVuZ3RoLzIpO3ZhciB5PXRoaXMuc2VnbWVudHMyLnByZXBhcmVTZWdtZW50KHYubGVuZ3RoLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5MikseD15LnZlcnRleExlbmd0aDt0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHZbMF0ueCx2WzBdLnkpLHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2soeCt2Lmxlbmd0aC0xLHgpLHAucHVzaCh2WzBdLngpLHAucHVzaCh2WzBdLnkpO2Zvcih2YXIgYj0xO2I8di5sZW5ndGg7YisrKXRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2sodltiXS54LHZbYl0ueSksdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayh4K2ItMSx4K2IpLHAucHVzaCh2W2JdLngpLHAucHVzaCh2W2JdLnkpO3kudmVydGV4TGVuZ3RoKz12Lmxlbmd0aCx5LnByaW1pdGl2ZUxlbmd0aCs9di5sZW5ndGh9fWZvcih2YXIgXz1fbyhwLGQpLHc9MDt3PF8ubGVuZ3RoO3crPTMpdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGYrX1t3XSxmK19bdysxXSxmK19bdysyXSk7aC52ZXJ0ZXhMZW5ndGgrPWwsaC5wcmltaXRpdmVMZW5ndGgrPV8ubGVuZ3RoLzN9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0LHIsaSxuKX0sRG4oIkZpbGxCdWNrZXQiLHJzLHtvbWl0OlsibGF5ZXJzIiwicGF0dGVybkZlYXR1cmVzIl19KTt2YXIgbnM9bmV3IHlpKHsiZmlsbC1zb3J0LWtleSI6bmV3IGRpKEF0LmxheW91dF9maWxsWyJmaWxsLXNvcnQta2V5Il0pfSksaXM9e3BhaW50Om5ldyB5aSh7ImZpbGwtYW50aWFsaWFzIjpuZXcgcGkoQXQucGFpbnRfZmlsbFsiZmlsbC1hbnRpYWxpYXMiXSksImZpbGwtb3BhY2l0eSI6bmV3IGRpKEF0LnBhaW50X2ZpbGxbImZpbGwtb3BhY2l0eSJdKSwiZmlsbC1jb2xvciI6bmV3IGRpKEF0LnBhaW50X2ZpbGxbImZpbGwtY29sb3IiXSksImZpbGwtb3V0bGluZS1jb2xvciI6bmV3IGRpKEF0LnBhaW50X2ZpbGxbImZpbGwtb3V0bGluZS1jb2xvciJdKSwiZmlsbC10cmFuc2xhdGUiOm5ldyBwaShBdC5wYWludF9maWxsWyJmaWxsLXRyYW5zbGF0ZSJdKSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjpuZXcgcGkoQXQucGFpbnRfZmlsbFsiZmlsbC10cmFuc2xhdGUtYW5jaG9yIl0pLCJmaWxsLXBhdHRlcm4iOm5ldyBnaShBdC5wYWludF9maWxsWyJmaWxsLXBhdHRlcm4iXSl9KSxsYXlvdXQ6bnN9LGFzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxpcyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSxyKXt0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSxyKTt2YXIgbj10aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtb3V0bGluZS1jb2xvciJdOyJjb25zdGFudCI9PT1uLnZhbHVlLmtpbmQmJnZvaWQgMD09PW4udmFsdWUudmFsdWUmJih0aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtb3V0bGluZS1jb2xvciJdPXRoaXMucGFpbnQuX3ZhbHVlc1siZmlsbC1jb2xvciJdKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcnModCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIEphKHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXtyZXR1cm4gamEoS2EodCx0aGlzLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUtYW5jaG9yIiksYS5hbmdsZSxvKSxuKX0sZS5wcm90b3R5cGUuaXNUaWxlQ2xpcHBlZD1mdW5jdGlvbigpe3JldHVybiEwfSxlfSh4aSksb3M9VGkoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfbm9ybWFsX2VkIixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxzcz1scztmdW5jdGlvbiBscyh0LGUscixuLGkpe3RoaXMucHJvcGVydGllcz17fSx0aGlzLmV4dGVudD1yLHRoaXMudHlwZT0wLHRoaXMuX3BiZj10LHRoaXMuX2dlb21ldHJ5PS0xLHRoaXMuX2tleXM9bix0aGlzLl92YWx1ZXM9aSx0LnJlYWRGaWVsZHMoY3MsdGhpcyxlKX1mdW5jdGlvbiBjcyh0LGUscil7MT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PXQ/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPWUuX2tleXNbdC5yZWFkVmFyaW50KCldLGk9ZS5fdmFsdWVzW3QucmVhZFZhcmludCgpXTtlLnByb3BlcnRpZXNbbl09aX19KHIsZSk6Mz09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09dCYmKGUuX2dlb21ldHJ5PXIucG9zKX1mdW5jdGlvbiB1cyh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKW4rPSgocj10W29dKS54LShlPXRbaV0pLngpKihlLnkrci55KTtyZXR1cm4gbn1scy50eXBlcz1bIlVua25vd24iLCJQb2ludCIsIkxpbmVTdHJpbmciLCJQb2x5Z29uIl0sbHMucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGUscj10LnJlYWRWYXJpbnQoKSt0LnBvcyxuPTEsYT0wLG89MCxzPTAsbD1bXTt0LnBvczxyOyl7aWYoYTw9MCl7dmFyIGM9dC5yZWFkVmFyaW50KCk7bj03JmMsYT1jPj4zfWlmKGEtLSwxPT09bnx8Mj09PW4pbys9dC5yZWFkU1ZhcmludCgpLHMrPXQucmVhZFNWYXJpbnQoKSwxPT09biYmKGUmJmwucHVzaChlKSxlPVtdKSxlLnB1c2gobmV3IGkobyxzKSk7ZWxzZXtpZig3IT09bil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY29tbWFuZCAiK24pO2UmJmUucHVzaChlWzBdLmNsb25lKCkpfX1yZXR1cm4gZSYmbC5wdXNoKGUpLGx9LGxzLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZT10LnJlYWRWYXJpbnQoKSt0LnBvcyxyPTEsbj0wLGk9MCxhPTAsbz0xLzAscz0tMS8wLGw9MS8wLGM9LTEvMDt0LnBvczxlOyl7aWYobjw9MCl7dmFyIHU9dC5yZWFkVmFyaW50KCk7cj03JnUsbj11Pj4zfWlmKG4tLSwxPT09cnx8Mj09PXIpKGkrPXQucmVhZFNWYXJpbnQoKSk8byYmKG89aSksaT5zJiYocz1pKSwoYSs9dC5yZWFkU1ZhcmludCgpKTxsJiYobD1hKSxhPmMmJihjPWEpO2Vsc2UgaWYoNyE9PXIpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGNvbW1hbmQgIityKX1yZXR1cm5bbyxsLHMsY119LGxzLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT10aGlzLmV4dGVudCpNYXRoLnBvdygyLHIpLG89dGhpcy5leHRlbnQqdCxzPXRoaXMuZXh0ZW50KmUsbD10aGlzLmxvYWRHZW9tZXRyeSgpLGM9bHMudHlwZXNbdGhpcy50eXBlXTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3RbZV09WzM2MCooci54K28pL2EtMTgwLDM2MC9NYXRoLlBJKk1hdGguYXRhbihNYXRoLmV4cCgoMTgwLTM2MCooci55K3MpL2EpKk1hdGguUEkvMTgwKSktOTBdfX1zd2l0Y2godGhpcy50eXBlKXtjYXNlIDE6dmFyIGg9W107Zm9yKG49MDtuPGwubGVuZ3RoO24rKyloW25dPWxbbl1bMF07dShsPWgpO2JyZWFrO2Nhc2UgMjpmb3Iobj0wO248bC5sZW5ndGg7bisrKXUobFtuXSk7YnJlYWs7Y2FzZSAzOmZvcihsPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PTEpcmV0dXJuW3RdO2Zvcih2YXIgcixuLGk9W10sYT0wO2E8ZTthKyspe3ZhciBvPXVzKHRbYV0pOzAhPT1vJiYodm9pZCAwPT09biYmKG49bzwwKSxuPT09bzwwPyhyJiZpLnB1c2gocikscj1bdFthXV0pOnIucHVzaCh0W2FdKSl9cmV0dXJuIHImJmkucHVzaChyKSxpfShsKSxuPTA7bjxsLmxlbmd0aDtuKyspZm9yKGk9MDtpPGxbbl0ubGVuZ3RoO2krKyl1KGxbbl1baV0pfTE9PT1sLmxlbmd0aD9sPWxbMF06Yz0iTXVsdGkiK2M7dmFyIGY9e3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOmMsY29vcmRpbmF0ZXM6bH0scHJvcGVydGllczp0aGlzLnByb3BlcnRpZXN9O3JldHVybiJpZCJpbiB0aGlzJiYoZi5pZD10aGlzLmlkKSxmfTt2YXIgaHM9ZnM7ZnVuY3Rpb24gZnModCxlKXt0aGlzLnZlcnNpb249MSx0aGlzLm5hbWU9bnVsbCx0aGlzLmV4dGVudD00MDk2LHRoaXMubGVuZ3RoPTAsdGhpcy5fcGJmPXQsdGhpcy5fa2V5cz1bXSx0aGlzLl92YWx1ZXM9W10sdGhpcy5fZmVhdHVyZXM9W10sdC5yZWFkRmllbGRzKHBzLHRoaXMsZSksdGhpcy5sZW5ndGg9dGhpcy5fZmVhdHVyZXMubGVuZ3RofWZ1bmN0aW9uIHBzKHQsZSxyKXsxNT09PXQ/ZS52ZXJzaW9uPXIucmVhZFZhcmludCgpOjE9PT10P2UubmFtZT1yLnJlYWRTdHJpbmcoKTo1PT09dD9lLmV4dGVudD1yLnJlYWRWYXJpbnQoKToyPT09dD9lLl9mZWF0dXJlcy5wdXNoKHIucG9zKTozPT09dD9lLl9rZXlzLnB1c2goci5yZWFkU3RyaW5nKCkpOjQ9PT10JiZlLl92YWx1ZXMucHVzaChmdW5jdGlvbih0KXtmb3IodmFyIGU9bnVsbCxyPXQucmVhZFZhcmludCgpK3QucG9zO3QucG9zPHI7KXt2YXIgbj10LnJlYWRWYXJpbnQoKT4+MztlPTE9PT1uP3QucmVhZFN0cmluZygpOjI9PT1uP3QucmVhZEZsb2F0KCk6Mz09PW4/dC5yZWFkRG91YmxlKCk6ND09PW4/dC5yZWFkVmFyaW50NjQoKTo1PT09bj90LnJlYWRWYXJpbnQoKTo2PT09bj90LnJlYWRTVmFyaW50KCk6Nz09PW4/dC5yZWFkQm9vbGVhbigpOm51bGx9cmV0dXJuIGV9KHIpKX1mdW5jdGlvbiBkcyh0LGUscil7aWYoMz09PXQpe3ZhciBuPW5ldyBocyhyLHIucmVhZFZhcmludCgpK3IucG9zKTtuLmxlbmd0aCYmKGVbbi5uYW1lXT1uKX19ZnMucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7aWYodDwwfHx0Pj10aGlzLl9mZWF0dXJlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJmZWF0dXJlIGluZGV4IG91dCBvZiBib3VuZHMiKTt0aGlzLl9wYmYucG9zPXRoaXMuX2ZlYXR1cmVzW3RdO3ZhciBlPXRoaXMuX3BiZi5yZWFkVmFyaW50KCkrdGhpcy5fcGJmLnBvcztyZXR1cm4gbmV3IHNzKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX07dmFyIGdzPXtWZWN0b3JUaWxlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXllcnM9dC5yZWFkRmllbGRzKGRzLHt9LGUpfSxWZWN0b3JUaWxlRmVhdHVyZTpzcyxWZWN0b3JUaWxlTGF5ZXI6aHN9LG1zPWdzLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLHZzPU1hdGgucG93KDIsMTMpO2Z1bmN0aW9uIHlzKHQsZSxyLG4saSxhLG8scyl7dC5lbXBsYWNlQmFjayhlLHIsMipNYXRoLmZsb29yKG4qdnMpK28saSp2cyoyLGEqdnMqMixNYXRoLnJvdW5kKHMpKX12YXIgeHM9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgU2ksdGhpcy5pbmRleEFycmF5PW5ldyBGaSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgUGEob3MsdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBpYSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHM9dGhpcy5sYXllcnMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc1N0YXRlRGVwZW5kZW50KCl9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKX07ZnVuY3Rpb24gYnModCxlKXtyZXR1cm4gdC54PT09ZS54JiYodC54PDB8fHQueD44MTkyKXx8dC55PT09ZS55JiYodC55PDB8fHQueT44MTkyKX14cy5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZmVhdHVyZXM9W10sdGhpcy5oYXNQYXR0ZXJuPXRzKCJmaWxsLWV4dHJ1c2lvbiIsdGhpcy5sYXllcnMsZSk7Zm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEuZmVhdHVyZSxzPWEuaWQsbD1hLmluZGV4LGM9YS5zb3VyY2VMYXllckluZGV4LHU9dGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIubmVlZEdlb21ldHJ5LGg9e3R5cGU6by50eXBlLGlkOnMscHJvcGVydGllczpvLnByb3BlcnRpZXMsZ2VvbWV0cnk6dT9EYShvKTpbXX07aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKG5ldyBpaSh0aGlzLnpvb20pLGgscikpe3ZhciBmPXtpZDpzLHNvdXJjZUxheWVySW5kZXg6YyxpbmRleDpsLGdlb21ldHJ5OnU/aC5nZW9tZXRyeTpEYShvKSxwcm9wZXJ0aWVzOm8ucHJvcGVydGllcyx0eXBlOm8udHlwZSxwYXR0ZXJuczp7fX07dm9pZCAwIT09by5pZCYmKGYuaWQ9by5pZCksdGhpcy5oYXNQYXR0ZXJuP3RoaXMuZmVhdHVyZXMucHVzaChlcygiZmlsbC1leHRydXNpb24iLHRoaXMubGF5ZXJzLGYsdGhpcy56b29tLGUpKTp0aGlzLmFkZEZlYXR1cmUoZixmLmdlb21ldHJ5LGwscix7fSksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KG8sZi5nZW9tZXRyeSxsLGMsdGhpcy5pbmRleCwhMCl9fX0seHMucHJvdG90eXBlLmFkZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPXRoaXMuZmVhdHVyZXM7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMuYWRkRmVhdHVyZShhLGEuZ2VvbWV0cnksYS5pbmRleCxlLHIpfX0seHMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJnRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLHIpfSx4cy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LHhzLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSx4cy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LG9zKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpLHRoaXMudXBsb2FkZWQ9ITB9LHhzLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0seHMucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9MCxvPVFvKGUsNTAwKTthPG8ubGVuZ3RoO2ErPTEpe2Zvcih2YXIgcz1vW2FdLGw9MCxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSlsKz11W2NdLmxlbmd0aDtmb3IodmFyIGg9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxmPTAscD1zO2Y8cC5sZW5ndGg7Zis9MSl7dmFyIGQ9cFtmXTtpZigwIT09ZC5sZW5ndGgmJiEoKEk9ZCkuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng8MH0pKXx8SS5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueD44MTkyfSkpfHxJLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC55PDB9KSl8fEkuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnk+ODE5Mn0pKSkpZm9yKHZhciBnPTAsbT0wO208ZC5sZW5ndGg7bSsrKXt2YXIgdj1kW21dO2lmKG0+PTEpe3ZhciB5PWRbbS0xXTtpZighYnModix5KSl7aC52ZXJ0ZXhMZW5ndGgrND5pYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKGg9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSk7dmFyIHg9di5zdWIoeSkuX3BlcnAoKS5fdW5pdCgpLGI9eS5kaXN0KHYpO2crYj4zMjc2OCYmKGc9MCkseXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx2Lngsdi55LHgueCx4LnksMCwwLGcpLHlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdi54LHYueSx4LngseC55LDAsMSxnKSx5cyh0aGlzLmxheW91dFZlcnRleEFycmF5LHkueCx5LnkseC54LHgueSwwLDAsZys9YikseXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx5LngseS55LHgueCx4LnksMCwxLGcpO3ZhciBfPWgudmVydGV4TGVuZ3RoO3RoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhfLF8rMixfKzEpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhfKzEsXysyLF8rMyksaC52ZXJ0ZXhMZW5ndGgrPTQsaC5wcmltaXRpdmVMZW5ndGgrPTJ9fX19aWYoaC52ZXJ0ZXhMZW5ndGgrbD5pYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKGg9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChsLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSksIlBvbHlnb24iPT09bXNbdC50eXBlXSl7Zm9yKHZhciB3PVtdLFQ9W10saz1oLnZlcnRleExlbmd0aCxNPTAsQT1zO008QS5sZW5ndGg7TSs9MSl7dmFyIFM9QVtNXTtpZigwIT09Uy5sZW5ndGgpe1MhPT1zWzBdJiZULnB1c2gody5sZW5ndGgvMik7Zm9yKHZhciBFPTA7RTxTLmxlbmd0aDtFKyspe3ZhciBDPVNbRV07eXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxDLngsQy55LDAsMCwxLDEsMCksdy5wdXNoKEMueCksdy5wdXNoKEMueSl9fX1mb3IodmFyIEw9X28odyxUKSxQPTA7UDxMLmxlbmd0aDtQKz0zKXRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhrK0xbUF0saytMW1ArMl0saytMW1ArMV0pO2gucHJpbWl0aXZlTGVuZ3RoKz1MLmxlbmd0aC8zLGgudmVydGV4TGVuZ3RoKz1sfX12YXIgSTt0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQscixpLG4pfSxEbigiRmlsbEV4dHJ1c2lvbkJ1Y2tldCIseHMse29taXQ6WyJsYXllcnMiLCJmZWF0dXJlcyJdfSk7dmFyIF9zPXtwYWludDpuZXcgeWkoeyJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5IjpuZXcgcGkoQXRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiXSksImZpbGwtZXh0cnVzaW9uLWNvbG9yIjpuZXcgZGkoQXRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWNvbG9yIl0pLCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiOm5ldyBwaShBdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIl0pLCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIjpuZXcgcGkoQXRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiXSksImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOm5ldyBnaShBdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tcGF0dGVybiJdKSwiZmlsbC1leHRydXNpb24taGVpZ2h0IjpuZXcgZGkoQXRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWhlaWdodCJdKSwiZmlsbC1leHRydXNpb24tYmFzZSI6bmV3IGRpKEF0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1iYXNlIl0pLCJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCI6bmV3IHBpKEF0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCJdKX0pfSx3cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsX3MpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHhzKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBKYSh0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5pczNEPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixhLG8scyxsKXt2YXIgYz1LYSh0LHRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciIpLG8uYW5nbGUscyksdT10aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24taGVpZ2h0IikuZXZhbHVhdGUoZSxyKSxoPXRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1iYXNlIikuZXZhbHVhdGUoZSxyKSxmPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1bXSxvPTAscz10O288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPVtsLngsbC55LDAsMV07YW8oYyxjLGUpLGEucHVzaChuZXcgaShjWzBdL2NbM10sY1sxXS9jWzNdKSl9cmV0dXJuIGF9KGMsbCkscD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9W10sbz1bXSxzPW5bOF0qZSxsPW5bOV0qZSxjPW5bMTBdKmUsdT1uWzExXSplLGg9bls4XSpyLGY9bls5XSpyLHA9blsxMF0qcixkPW5bMTFdKnIsZz0wLG09dDtnPG0ubGVuZ3RoO2crPTEpe2Zvcih2YXIgdj1bXSx5PVtdLHg9MCxiPW1bZ107eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9Xy54LFQ9Xy55LGs9blswXSp3K25bNF0qVCtuWzEyXSxNPW5bMV0qdytuWzVdKlQrblsxM10sQT1uWzJdKncrbls2XSpUK25bMTRdLFM9blszXSp3K25bN10qVCtuWzE1XSxFPUErYyxDPVMrdSxMPWsraCxQPU0rZixJPUErcCx6PVMrZCxPPW5ldyBpKChrK3MpL0MsKE0rbCkvQyk7Ty56PUUvQyx2LnB1c2goTyk7dmFyIEQ9bmV3IGkoTC96LFAveik7RC56PUkveix5LnB1c2goRCl9YS5wdXNoKHYpLG8ucHVzaCh5KX1yZXR1cm5bYSxvXX0obixoLHUsbCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0xLzA7amEocixlKSYmKG49a3MocixlWzBdKSk7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspZm9yKHZhciBhPWVbaV0sbz10W2ldLHM9MDtzPGEubGVuZ3RoLTE7cysrKXt2YXIgbD1hW3NdLGM9W2wsYVtzKzFdLG9bcysxXSxvW3NdLGxdO0JhKHIsYykmJihuPU1hdGgubWluKG4sa3MocixjKSkpfXJldHVybiBuIT09MS8wJiZufShwWzBdLHBbMV0sZil9LGV9KHhpKTtmdW5jdGlvbiBUcyh0LGUpe3JldHVybiB0LngqZS54K3QueSplLnl9ZnVuY3Rpb24ga3ModCxlKXtpZigxPT09dC5sZW5ndGgpe2Zvcih2YXIgcixuPTAsaT1lW24rK107IXJ8fGkuZXF1YWxzKHIpOylpZighKHI9ZVtuKytdKSlyZXR1cm4gMS8wO2Zvcig7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl0sbz10WzBdLHM9ci5zdWIoaSksbD1hLnN1YihpKSxjPW8uc3ViKGkpLHU9VHMocyxzKSxoPVRzKHMsbCksZj1UcyhsLGwpLHA9VHMoYyxzKSxkPVRzKGMsbCksZz11KmYtaCpoLG09KGYqcC1oKmQpL2csdj0odSpkLWgqcCkvZyx5PWkueiooMS1tLXYpK3IueiptK2Eueip2O2lmKGlzRmluaXRlKHkpKXJldHVybiB5fXJldHVybiAxLzB9Zm9yKHZhciB4PTEvMCxiPTAsXz1lO2I8Xy5sZW5ndGg7Yis9MSl4PU1hdGgubWluKHgsX1tiXS56KTtyZXR1cm4geH12YXIgTXM9VGkoW3tuYW1lOiJhX3Bvc19ub3JtYWwiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50OCJ9XSw0KS5tZW1iZXJzLEFzPWdzLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLFNzPU1hdGguY29zKE1hdGguUEkvMTgwKjM3LjUpLEVzPU1hdGgucG93KDIsMTQpLy41LENzPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMucGF0dGVybkZlYXR1cmVzPVtdLHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IEVpLHRoaXMuaW5kZXhBcnJheT1uZXcgRmksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IFBhKE1zLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgaWEsdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSl9O0NzLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5oYXNQYXR0ZXJuPXRzKCJsaW5lIix0aGlzLmxheWVycyxlKTtmb3IodmFyIG49dGhpcy5sYXllcnNbMF0ubGF5b3V0LmdldCgibGluZS1zb3J0LWtleSIpLGk9W10sYT0wLG89dDthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1zLmZlYXR1cmUsYz1zLmlkLHU9cy5pbmRleCxoPXMuc291cmNlTGF5ZXJJbmRleCxmPXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxwPXt0eXBlOmwudHlwZSxpZDpjLHByb3BlcnRpZXM6bC5wcm9wZXJ0aWVzLGdlb21ldHJ5OmY/RGEobCk6W119O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihuZXcgaWkodGhpcy56b29tKSxwLHIpKXtmfHwocC5nZW9tZXRyeT1EYShsKSk7dmFyIGQ9bj9uLmV2YWx1YXRlKHAse30scik6dm9pZCAwO2kucHVzaCh7aWQ6Yyxwcm9wZXJ0aWVzOmwucHJvcGVydGllcyx0eXBlOmwudHlwZSxzb3VyY2VMYXllckluZGV4OmgsaW5kZXg6dSxnZW9tZXRyeTpwLmdlb21ldHJ5LHBhdHRlcm5zOnt9LHNvcnRLZXk6ZH0pfX1uJiZpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciBnPTAsbT1pO2c8bS5sZW5ndGg7Zys9MSl7dmFyIHY9bVtnXSx5PXYuZ2VvbWV0cnkseD12LmluZGV4LGI9di5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMuaGFzUGF0dGVybil7dmFyIF89ZXMoImxpbmUiLHRoaXMubGF5ZXJzLHYsdGhpcy56b29tLGUpO3RoaXMucGF0dGVybkZlYXR1cmVzLnB1c2goXyl9ZWxzZSB0aGlzLmFkZEZlYXR1cmUodix5LHgscix7fSk7ZS5mZWF0dXJlSW5kZXguaW5zZXJ0KHRbeF0uZmVhdHVyZSx5LHgsYix0aGlzLmluZGV4KX19LENzLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5zdGF0ZURlcGVuZGVudExheWVycyxyKX0sQ3MucHJvdG90eXBlLmFkZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPXRoaXMucGF0dGVybkZlYXR1cmVzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0aGlzLmFkZEZlYXR1cmUoYSxhLmdlb21ldHJ5LGEuaW5kZXgsZSxyKX19LENzLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sQ3MucHJvdG90eXBlLnVwbG9hZFBlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy51cGxvYWRlZHx8dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR9LENzLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy51cGxvYWRlZHx8KHRoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksTXMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy51cGxvYWRlZD0hMH0sQ3MucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCkpfSxDcy5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT10aGlzLmxheWVyc1swXS5sYXlvdXQsbz1hLmdldCgibGluZS1qb2luIikuZXZhbHVhdGUodCx7fSkscz1hLmdldCgibGluZS1jYXAiKSxsPWEuZ2V0KCJsaW5lLW1pdGVyLWxpbWl0IiksYz1hLmdldCgibGluZS1yb3VuZC1saW1pdCIpLHU9MCxoPWU7dTxoLmxlbmd0aDt1Kz0xKXRoaXMuYWRkTGluZShoW3VdLHQsbyxzLGwsYyk7dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0LHIsaSxuKX0sQ3MucHJvdG90eXBlLmFkZExpbmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZGlzdGFuY2U9MCx0aGlzLnNjYWxlZERpc3RhbmNlPTAsdGhpcy50b3RhbERpc3RhbmNlPTAsZS5wcm9wZXJ0aWVzJiZlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoIm1hcGJveF9jbGlwX3N0YXJ0IikmJmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgibWFwYm94X2NsaXBfZW5kIikpe3RoaXMuY2xpcFN0YXJ0PStlLnByb3BlcnRpZXMubWFwYm94X2NsaXBfc3RhcnQsdGhpcy5jbGlwRW5kPStlLnByb3BlcnRpZXMubWFwYm94X2NsaXBfZW5kO2Zvcih2YXIgbz0wO288dC5sZW5ndGgtMTtvKyspdGhpcy50b3RhbERpc3RhbmNlKz10W29dLmRpc3QodFtvKzFdKTt0aGlzLnVwZGF0ZVNjYWxlZERpc3RhbmNlKCl9Zm9yKHZhciBzPSJQb2x5Z29uIj09PUFzW2UudHlwZV0sbD10Lmxlbmd0aDtsPj0yJiZ0W2wtMV0uZXF1YWxzKHRbbC0yXSk7KWwtLTtmb3IodmFyIGM9MDtjPGwtMSYmdFtjXS5lcXVhbHModFtjKzFdKTspYysrO2lmKCEobDwocz8zOjIpKSl7ImJldmVsIj09PXImJihpPTEuMDUpO3ZhciB1LGg9dGhpcy5vdmVyc2NhbGluZzw9MTY/MTIyODgwLyg1MTIqdGhpcy5vdmVyc2NhbGluZyk6MCxmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoMTAqbCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSkscD12b2lkIDAsZD12b2lkIDAsZz12b2lkIDAsbT12b2lkIDA7dGhpcy5lMT10aGlzLmUyPS0xLHMmJihtPXRbY10uc3ViKHU9dFtsLTJdKS5fdW5pdCgpLl9wZXJwKCkpO2Zvcih2YXIgdj1jO3Y8bDt2KyspaWYoIShkPXY9PT1sLTE/cz90W2MrMV06dm9pZCAwOnRbdisxXSl8fCF0W3ZdLmVxdWFscyhkKSl7bSYmKGc9bSksdSYmKHA9dSksdT10W3ZdLG09ZD9kLnN1Yih1KS5fdW5pdCgpLl9wZXJwKCk6Zzt2YXIgeT0oZz1nfHxtKS5hZGQobSk7MD09PXkueCYmMD09PXkueXx8eS5fdW5pdCgpO3ZhciB4PWcueCptLngrZy55Km0ueSxiPXkueCptLngreS55Km0ueSxfPTAhPT1iPzEvYjoxLzAsdz0yKk1hdGguc3FydCgyLTIqYiksVD1iPFNzJiZwJiZkLGs9Zy54Km0ueS1nLnkqbS54PjA7aWYoVCYmdj5jKXt2YXIgTT11LmRpc3QocCk7aWYoTT4yKmgpe3ZhciBBPXUuc3ViKHUuc3ViKHApLl9tdWx0KGgvTSkuX3JvdW5kKCkpO3RoaXMudXBkYXRlRGlzdGFuY2UocCxBKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoQSxnLDAsMCxmKSxwPUF9fXZhciBTPXAmJmQsRT1TP3I6cz8iYnV0dCI6bjtpZihTJiYicm91bmQiPT09RSYmKF88YT9FPSJtaXRlciI6Xzw9MiYmKEU9ImZha2Vyb3VuZCIpKSwibWl0ZXIiPT09RSYmXz5pJiYoRT0iYmV2ZWwiKSwiYmV2ZWwiPT09RSYmKF8+MiYmKEU9ImZsaXBiZXZlbCIpLF88aSYmKEU9Im1pdGVyIikpLHAmJnRoaXMudXBkYXRlRGlzdGFuY2UocCx1KSwibWl0ZXIiPT09RSl5Ll9tdWx0KF8pLHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LHksMCwwLGYpO2Vsc2UgaWYoImZsaXBiZXZlbCI9PT1FKXtpZihfPjEwMCl5PW0ubXVsdCgtMSk7ZWxzZXt2YXIgQz1fKmcuYWRkKG0pLm1hZygpL2cuc3ViKG0pLm1hZygpO3kuX3BlcnAoKS5fbXVsdChDKihrPy0xOjEpKX10aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5LDAsMCxmKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5Lm11bHQoLTEpLDAsMCxmKX1lbHNlIGlmKCJiZXZlbCI9PT1FfHwiZmFrZXJvdW5kIj09PUUpe3ZhciBMPS1NYXRoLnNxcnQoXypfLTEpLFA9az9MOjAsST1rPzA6TDtpZihwJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSxnLFAsSSxmKSwiZmFrZXJvdW5kIj09PUUpZm9yKHZhciB6PU1hdGgucm91bmQoMTgwKncvTWF0aC5QSS8yMCksTz0xO088ejtPKyspe3ZhciBEPU8vejtpZiguNSE9PUQpe3ZhciBSPUQtLjU7RCs9RCpSKihELTEpKigoMS4wOTA0K3gqKHgqKDMuNTU2NDUtMS40MzUxOSp4KS0zLjI0NTIpKSpSKlIrKC44NDgwMTMreCooLjIxNTYzOCp4LTEuMDYwMjEpKSl9dmFyIEY9bS5zdWIoZykuX211bHQoRCkuX2FkZChnKS5fdW5pdCgpLl9tdWx0KGs/LTE6MSk7dGhpcy5hZGRIYWxmVmVydGV4KHUsRi54LEYueSwhMSxrLDAsZil9ZCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHUsbSwtUCwtSSxmKX1lbHNlIGlmKCJidXR0Ij09PUUpdGhpcy5hZGRDdXJyZW50VmVydGV4KHUseSwwLDAsZik7ZWxzZSBpZigic3F1YXJlIj09PUUpe3ZhciBCPXA/MTotMTt0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5LEIsQixmKX1lbHNlInJvdW5kIj09PUUmJihwJiYodGhpcy5hZGRDdXJyZW50VmVydGV4KHUsZywwLDAsZiksdGhpcy5hZGRDdXJyZW50VmVydGV4KHUsZywxLDEsZiwhMCkpLGQmJih0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSxtLC0xLC0xLGYsITApLHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LG0sMCwwLGYpKSk7aWYoVCYmdjxsLTEpe3ZhciBOPXUuZGlzdChkKTtpZihOPjIqaCl7dmFyIGo9dS5hZGQoZC5zdWIodSkuX211bHQoaC9OKS5fcm91bmQoKSk7dGhpcy51cGRhdGVEaXN0YW5jZSh1LGopLHRoaXMuYWRkQ3VycmVudFZlcnRleChqLG0sMCwwLGYpLHU9an19fX19LENzLnByb3RvdHlwZS5hZGRDdXJyZW50VmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT0hMSk7dmFyIG89ZS55Km4tZS54LHM9LWUueS1lLngqbjt0aGlzLmFkZEhhbGZWZXJ0ZXgodCxlLngrZS55KnIsZS55LWUueCpyLGEsITEscixpKSx0aGlzLmFkZEhhbGZWZXJ0ZXgodCxvLHMsYSwhMCwtbixpKSx0aGlzLmRpc3RhbmNlPkVzLzImJjA9PT10aGlzLnRvdGFsRGlzdGFuY2UmJih0aGlzLmRpc3RhbmNlPTAsdGhpcy5hZGRDdXJyZW50VmVydGV4KHQsZSxyLG4saSxhKSl9LENzLnByb3RvdHlwZS5hZGRIYWxmVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPS41KnRoaXMuc2NhbGVkRGlzdGFuY2U7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjaygodC54PDwxKSsobj8xOjApLCh0Lnk8PDEpKyhpPzE6MCksTWF0aC5yb3VuZCg2MyplKSsxMjgsTWF0aC5yb3VuZCg2MypyKSsxMjgsMSsoMD09PWE/MDphPDA/LTE6MSl8KDYzJnMpPDwyLHM+PjYpO3ZhciBsPW8udmVydGV4TGVuZ3RoKys7dGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsbCksby5wcmltaXRpdmVMZW5ndGgrKyksaT90aGlzLmUyPWw6dGhpcy5lMT1sfSxDcy5wcm90b3R5cGUudXBkYXRlU2NhbGVkRGlzdGFuY2U9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlZERpc3RhbmNlPXRoaXMudG90YWxEaXN0YW5jZT4wPyh0aGlzLmNsaXBTdGFydCsodGhpcy5jbGlwRW5kLXRoaXMuY2xpcFN0YXJ0KSp0aGlzLmRpc3RhbmNlL3RoaXMudG90YWxEaXN0YW5jZSkqKEVzLTEpOnRoaXMuZGlzdGFuY2V9LENzLnByb3RvdHlwZS51cGRhdGVEaXN0YW5jZT1mdW5jdGlvbih0LGUpe3RoaXMuZGlzdGFuY2UrPXQuZGlzdChlKSx0aGlzLnVwZGF0ZVNjYWxlZERpc3RhbmNlKCl9LERuKCJMaW5lQnVja2V0IixDcyx7b21pdDpbImxheWVycyIsInBhdHRlcm5GZWF0dXJlcyJdfSk7dmFyIExzPW5ldyB5aSh7ImxpbmUtY2FwIjpuZXcgcGkoQXQubGF5b3V0X2xpbmVbImxpbmUtY2FwIl0pLCJsaW5lLWpvaW4iOm5ldyBkaShBdC5sYXlvdXRfbGluZVsibGluZS1qb2luIl0pLCJsaW5lLW1pdGVyLWxpbWl0IjpuZXcgcGkoQXQubGF5b3V0X2xpbmVbImxpbmUtbWl0ZXItbGltaXQiXSksImxpbmUtcm91bmQtbGltaXQiOm5ldyBwaShBdC5sYXlvdXRfbGluZVsibGluZS1yb3VuZC1saW1pdCJdKSwibGluZS1zb3J0LWtleSI6bmV3IGRpKEF0LmxheW91dF9saW5lWyJsaW5lLXNvcnQta2V5Il0pfSksUHM9e3BhaW50Om5ldyB5aSh7ImxpbmUtb3BhY2l0eSI6bmV3IGRpKEF0LnBhaW50X2xpbmVbImxpbmUtb3BhY2l0eSJdKSwibGluZS1jb2xvciI6bmV3IGRpKEF0LnBhaW50X2xpbmVbImxpbmUtY29sb3IiXSksImxpbmUtdHJhbnNsYXRlIjpuZXcgcGkoQXQucGFpbnRfbGluZVsibGluZS10cmFuc2xhdGUiXSksImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6bmV3IHBpKEF0LnBhaW50X2xpbmVbImxpbmUtdHJhbnNsYXRlLWFuY2hvciJdKSwibGluZS13aWR0aCI6bmV3IGRpKEF0LnBhaW50X2xpbmVbImxpbmUtd2lkdGgiXSksImxpbmUtZ2FwLXdpZHRoIjpuZXcgZGkoQXQucGFpbnRfbGluZVsibGluZS1nYXAtd2lkdGgiXSksImxpbmUtb2Zmc2V0IjpuZXcgZGkoQXQucGFpbnRfbGluZVsibGluZS1vZmZzZXQiXSksImxpbmUtYmx1ciI6bmV3IGRpKEF0LnBhaW50X2xpbmVbImxpbmUtYmx1ciJdKSwibGluZS1kYXNoYXJyYXkiOm5ldyBtaShBdC5wYWludF9saW5lWyJsaW5lLWRhc2hhcnJheSJdKSwibGluZS1wYXR0ZXJuIjpuZXcgZ2koQXQucGFpbnRfbGluZVsibGluZS1wYXR0ZXJuIl0pLCJsaW5lLWdyYWRpZW50IjpuZXcgdmkoQXQucGFpbnRfbGluZVsibGluZS1ncmFkaWVudCJdKX0pLGxheW91dDpMc30sSXM9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHI9bmV3IGlpKE1hdGguZmxvb3Ioci56b29tKSx7bm93OnIubm93LGZhZGVEdXJhdGlvbjpyLmZhZGVEdXJhdGlvbix6b29tSGlzdG9yeTpyLnpvb21IaXN0b3J5LHRyYW5zaXRpb246ci50cmFuc2l0aW9ufSksdC5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZS5jYWxsKHRoaXMsZSxyKX0sZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuIHI9dSh7fSxyLHt6b29tOk1hdGguZmxvb3Ioci56b29tKX0pLHQucHJvdG90eXBlLmV2YWx1YXRlLmNhbGwodGhpcyxlLHIsbixpKX0sZX0oZGkpKShQcy5wYWludC5wcm9wZXJ0aWVzWyJsaW5lLXdpZHRoIl0uc3BlY2lmaWNhdGlvbik7SXMudXNlSW50ZWdlclpvb209ITA7dmFyIHpzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxQcyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlPWZ1bmN0aW9uKHQpeyJsaW5lLWdyYWRpZW50Ij09PXQmJnRoaXMuX3VwZGF0ZUdyYWRpZW50KCl9LGUucHJvdG90eXBlLl91cGRhdGVHcmFkaWVudD1mdW5jdGlvbigpe3RoaXMuZ3JhZGllbnQ9bW8odGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWyJsaW5lLWdyYWRpZW50Il0udmFsdWUuZXhwcmVzc2lvbiwibGluZVByb2dyZXNzIiksdGhpcy5ncmFkaWVudFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSxyKXt0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSxyKSx0aGlzLnBhaW50Ll92YWx1ZXNbImxpbmUtZmxvb3J3aWR0aCJdPUlzLnBvc3NpYmx5RXZhbHVhdGUodGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Ll92YWx1ZXNbImxpbmUtd2lkdGgiXS52YWx1ZSxlKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ3ModCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj1PcyhYYSgibGluZS13aWR0aCIsdGhpcyxlKSxYYSgibGluZS1nYXAtd2lkdGgiLHRoaXMsZSkpLG49WGEoImxpbmUtb2Zmc2V0Iix0aGlzLGUpO3JldHVybiByLzIrTWF0aC5hYnMobikrSmEodGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLHMpe3ZhciBsPUthKHQsdGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlLWFuY2hvciIpLG8uYW5nbGUscyksYz1zLzIqT3ModGhpcy5wYWludC5nZXQoImxpbmUtd2lkdGgiKS5ldmFsdWF0ZShlLHIpLHRoaXMucGFpbnQuZ2V0KCJsaW5lLWdhcC13aWR0aCIpLmV2YWx1YXRlKGUscikpLHU9dGhpcy5wYWludC5nZXQoImxpbmUtb2Zmc2V0IikuZXZhbHVhdGUoZSxyKTtyZXR1cm4gdSYmKG49ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1uZXcgaSgwLDApLGE9MDthPHQubGVuZ3RoO2ErKyl7Zm9yKHZhciBvPXRbYV0scz1bXSxsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciBjPW9bbF0sdT1vW2wrMV0saD0wPT09bD9uOmMuc3ViKG9bbC0xXSkuX3VuaXQoKS5fcGVycCgpLGY9bD09PW8ubGVuZ3RoLTE/bjp1LnN1YihjKS5fdW5pdCgpLl9wZXJwKCkscD1oLl9hZGQoZikuX3VuaXQoKTtwLl9tdWx0KDEvKHAueCpmLngrcC55KmYueSkpLHMucHVzaChwLl9tdWx0KGUpLl9hZGQoYykpfXIucHVzaChzKX1yZXR1cm4gcn0obix1KnMpKSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aWYodC5sZW5ndGg+PTMpZm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspaWYoV2EodCxpW2FdKSlyZXR1cm4hMDtpZihVYSh0LGkscikpcmV0dXJuITB9cmV0dXJuITF9KGwsbixjKX0sZS5wcm90b3R5cGUuaXNUaWxlQ2xpcHBlZD1mdW5jdGlvbigpe3JldHVybiEwfSxlfSh4aSk7ZnVuY3Rpb24gT3ModCxlKXtyZXR1cm4gZT4wP2UrMip0OnR9dmFyIERzPVRpKFt7bmFtZToiYV9wb3Nfb2Zmc2V0Iixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifSx7bmFtZToiYV9kYXRhIixjb21wb25lbnRzOjQsdHlwZToiVWludDE2In0se25hbWU6ImFfcGl4ZWxvZmZzZXQiLGNvbXBvbmVudHM6NCx0eXBlOiJJbnQxNiJ9XSw0KSxScz1UaShbe25hbWU6ImFfcHJvamVjdGVkX3BvcyIsY29tcG9uZW50czozLHR5cGU6IkZsb2F0MzIifV0sNCksRnM9KFRpKFt7bmFtZToiYV9mYWRlX29wYWNpdHkiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50MzIifV0sNCksVGkoW3tuYW1lOiJhX3BsYWNlZCIsY29tcG9uZW50czoyLHR5cGU6IlVpbnQ4In0se25hbWU6ImFfc2hpZnQiLGNvbXBvbmVudHM6Mix0eXBlOiJGbG9hdDMyIn1dKSksQnM9KFRpKFt7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yUG9pbnRZIn0se3R5cGU6IkludDE2IixuYW1lOiJ4MSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieTEifSx7dHlwZToiSW50MTYiLG5hbWU6IngyIn0se3R5cGU6IkludDE2IixuYW1lOiJ5MiJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImZlYXR1cmVJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InNvdXJjZUxheWVySW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJidWNrZXRJbmRleCJ9XSksVGkoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfYW5jaG9yX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfZXh0cnVkZSIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpKSxOcz1UaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiRmxvYXQzMiJ9LHtuYW1lOiJhX3JhZGl1cyIsY29tcG9uZW50czoxLHR5cGU6IkZsb2F0MzIifSx7bmFtZToiYV9mbGFncyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpO2Z1bmN0aW9uIGpzKHQsZSxyKXtyZXR1cm4gdC5zZWN0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnRleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUubGF5b3V0LmdldCgidGV4dC10cmFuc2Zvcm0iKS5ldmFsdWF0ZShyLHt9KTtyZXR1cm4idXBwZXJjYXNlIj09PW4/dD10LnRvTG9jYWxlVXBwZXJDYXNlKCk6Imxvd2VyY2FzZSI9PT1uJiYodD10LnRvTG9jYWxlTG93ZXJDYXNlKCkpLG5pLmFwcGx5QXJhYmljU2hhcGluZyYmKHQ9bmkuYXBwbHlBcmFiaWNTaGFwaW5nKHQpKSx0fSh0LnRleHQsZSxyKX0pKSx0fVRpKFt7bmFtZToidHJpYW5nbGUiLGNvbXBvbmVudHM6Myx0eXBlOiJVaW50MTYifV0pLFRpKFt7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclkifSx7dHlwZToiVWludDE2IixuYW1lOiJnbHlwaFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1HbHlwaHMifSx7dHlwZToiVWludDMyIixuYW1lOiJ2ZXJ0ZXhTdGFydEluZGV4In0se3R5cGU6IlVpbnQzMiIsbmFtZToibGluZVN0YXJ0SW5kZXgifSx7dHlwZToiVWludDMyIixuYW1lOiJsaW5lTGVuZ3RoIn0se3R5cGU6IlVpbnQxNiIsbmFtZToic2VnbWVudCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Imxvd2VyU2l6ZSJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InVwcGVyU2l6ZSJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJsaW5lT2Zmc2V0WCJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJsaW5lT2Zmc2V0WSJ9LHt0eXBlOiJVaW50OCIsbmFtZToid3JpdGluZ01vZGUifSx7dHlwZToiVWludDgiLG5hbWU6InBsYWNlZE9yaWVudGF0aW9uIn0se3R5cGU6IlVpbnQ4IixuYW1lOiJoaWRkZW4ifSx7dHlwZToiVWludDMyIixuYW1lOiJjcm9zc1RpbGVJRCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYXNzb2NpYXRlZEljb25JbmRleCJ9XSksVGkoW3t0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToicmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6ImNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToibGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6InBsYWNlZEljb25TeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJrZXkifSx7dHlwZToiVWludDE2IixuYW1lOiJ0ZXh0Qm94U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InRleHRCb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJ2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Imljb25Cb3hTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiaWNvbkJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToidmVydGljYWxJY29uQm94U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2FsSWNvbkJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiZmVhdHVyZUluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1WZXJ0aWNhbEdseXBoVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1JY29uVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1WZXJ0aWNhbEljb25WZXJ0aWNlcyJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzIn0se3R5cGU6IlVpbnQzMiIsbmFtZToiY3Jvc3NUaWxlSUQifSx7dHlwZToiRmxvYXQzMiIsbmFtZToidGV4dEJveFNjYWxlIn0se3R5cGU6IkZsb2F0MzIiLGNvbXBvbmVudHM6MixuYW1lOiJ0ZXh0T2Zmc2V0In0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImNvbGxpc2lvbkNpcmNsZURpYW1ldGVyIn1dKSxUaShbe3R5cGU6IkZsb2F0MzIiLG5hbWU6Im9mZnNldFgifV0pLFRpKFt7dHlwZToiSW50MTYiLG5hbWU6IngifSx7dHlwZToiSW50MTYiLG5hbWU6InkifSx7dHlwZToiSW50MTYiLG5hbWU6InRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yIn1dKTt2YXIgVXM9eyIhIjoiXHVmZTE1IiwiIyI6Ilx1ZmYwMyIsJDoiXHVmZjA0IiwiJSI6Ilx1ZmYwNSIsIiYiOiJcdWZmMDYiLCIoIjoiXHVmZTM1IiwiKSI6Ilx1ZmUzNiIsIioiOiJcdWZmMGEiLCIrIjoiXHVmZjBiIiwiLCI6Ilx1ZmUxMCIsIi0iOiJcdWZlMzIiLCIuIjoiXHUzMGZiIiwiLyI6Ilx1ZmYwZiIsIjoiOiJcdWZlMTMiLCI7IjoiXHVmZTE0IiwiPCI6Ilx1ZmUzZiIsIj0iOiJcdWZmMWQiLCI+IjoiXHVmZTQwIiwiPyI6Ilx1ZmUxNiIsIkAiOiJcdWZmMjAiLCJbIjoiXHVmZTQ3IiwiXFwiOiJcdWZmM2MiLCJdIjoiXHVmZTQ4IiwiXiI6Ilx1ZmYzZSIsXzoiXHVmZTMzIiwiYCI6Ilx1ZmY0MCIsInsiOiJcdWZlMzciLCJ8IjoiXHUyMDE1IiwifSI6Ilx1ZmUzOCIsIn4iOiJcdWZmNWUiLCJceGEyIjoiXHVmZmUwIiwiXHhhMyI6Ilx1ZmZlMSIsIlx4YTUiOiJcdWZmZTUiLCJceGE2IjoiXHVmZmU0IiwiXHhhYyI6Ilx1ZmZlMiIsIlx4YWYiOiJcdWZmZTMiLCJcdTIwMTMiOiJcdWZlMzIiLCJcdTIwMTQiOiJcdWZlMzEiLCJcdTIwMTgiOiJcdWZlNDMiLCJcdTIwMTkiOiJcdWZlNDQiLCJcdTIwMWMiOiJcdWZlNDEiLCJcdTIwMWQiOiJcdWZlNDIiLCJcdTIwMjYiOiJcdWZlMTkiLCJcdTIwMjciOiJcdTMwZmIiLCJcdTIwYTkiOiJcdWZmZTYiLCJcdTMwMDEiOiJcdWZlMTEiLCJcdTMwMDIiOiJcdWZlMTIiLCJcdTMwMDgiOiJcdWZlM2YiLCJcdTMwMDkiOiJcdWZlNDAiLCJcdTMwMGEiOiJcdWZlM2QiLCJcdTMwMGIiOiJcdWZlM2UiLCJcdTMwMGMiOiJcdWZlNDEiLCJcdTMwMGQiOiJcdWZlNDIiLCJcdTMwMGUiOiJcdWZlNDMiLCJcdTMwMGYiOiJcdWZlNDQiLCJcdTMwMTAiOiJcdWZlM2IiLCJcdTMwMTEiOiJcdWZlM2MiLCJcdTMwMTQiOiJcdWZlMzkiLCJcdTMwMTUiOiJcdWZlM2EiLCJcdTMwMTYiOiJcdWZlMTciLCJcdTMwMTciOiJcdWZlMTgiLCJcdWZmMDEiOiJcdWZlMTUiLCJcdWZmMDgiOiJcdWZlMzUiLCJcdWZmMDkiOiJcdWZlMzYiLCJcdWZmMGMiOiJcdWZlMTAiLCJcdWZmMGQiOiJcdWZlMzIiLCJcdWZmMGUiOiJcdTMwZmIiLCJcdWZmMWEiOiJcdWZlMTMiLCJcdWZmMWIiOiJcdWZlMTQiLCJcdWZmMWMiOiJcdWZlM2YiLCJcdWZmMWUiOiJcdWZlNDAiLCJcdWZmMWYiOiJcdWZlMTYiLCJcdWZmM2IiOiJcdWZlNDciLCJcdWZmM2QiOiJcdWZlNDgiLCJcdWZmM2YiOiJcdWZlMzMiLCJcdWZmNWIiOiJcdWZlMzciLCJcdWZmNWMiOiJcdTIwMTUiLCJcdWZmNWQiOiJcdWZlMzgiLCJcdWZmNWYiOiJcdWZlMzUiLCJcdWZmNjAiOiJcdWZlMzYiLCJcdWZmNjEiOiJcdWZlMTIiLCJcdWZmNjIiOiJcdWZlNDEiLCJcdWZmNjMiOiJcdWZlNDIifSxWcz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsaD1yP2ktMTowLGY9cj8tMToxLHA9dFtlK2hdO2ZvcihoKz1mLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2hdLGgrPWYsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2hdLGgrPWYsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0scXM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPTgqYS1pLTEsdT0oMTw8YyktMSxoPXU+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOmEtMSxkPW4/MTotMSxnPWU8MHx8MD09PWUmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8ocz1pc05hTihlKT8xOjAsbz11KToobz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLW8pKTwxJiYoby0tLGwqPTIpLChlKz1vK2g+PTE/Zi9sOmYqTWF0aC5wb3coMiwxLWgpKSpsPj0yJiYobysrLGwvPTIpLG8raD49dT8ocz0wLG89dSk6bytoPj0xPyhzPShlKmwtMSkqTWF0aC5wb3coMixpKSxvKz1oKToocz1lKk1hdGgucG93KDIsaC0xKSpNYXRoLnBvdygyLGkpLG89MCkpO2k+PTg7dFtyK3BdPTI1NSZzLHArPWQscy89MjU2LGktPTgpO2ZvcihvPW88PGl8cyxjKz1pO2M+MDt0W3IrcF09MjU1Jm8scCs9ZCxvLz0yNTYsYy09OCk7dFtyK3AtZF18PTEyOCpnfSxIcz1HcztmdW5jdGlvbiBHcyh0KXt0aGlzLmJ1Zj1BcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyh0KT90Om5ldyBVaW50OEFycmF5KHR8fDApLHRoaXMucG9zPTAsdGhpcy50eXBlPTAsdGhpcy5sZW5ndGg9dGhpcy5idWYubGVuZ3RofUdzLlZhcmludD0wLEdzLkZpeGVkNjQ9MSxHcy5CeXRlcz0yLEdzLkZpeGVkMzI9NTt2YXIgWXM9InVuZGVmaW5lZCI9PXR5cGVvZiBUZXh0RGVjb2Rlcj9udWxsOm5ldyBUZXh0RGVjb2RlcigidXRmOCIpO2Z1bmN0aW9uIFdzKHQpe3JldHVybiB0LnR5cGU9PT1Hcy5CeXRlcz90LnJlYWRWYXJpbnQoKSt0LnBvczp0LnBvcysxfWZ1bmN0aW9uIFpzKHQsZSxyKXtyZXR1cm4gcj80Mjk0OTY3Mjk2KmUrKHQ+Pj4wKTo0Mjk0OTY3Mjk2KihlPj4+MCkrKHQ+Pj4wKX1mdW5jdGlvbiBYcyh0LGUscil7dmFyIG49ZTw9MTYzODM/MTplPD0yMDk3MTUxPzI6ZTw9MjY4NDM1NDU1PzM6TWF0aC5mbG9vcihNYXRoLmxvZyhlKS8oNypNYXRoLkxOMikpO3IucmVhbGxvYyhuKTtmb3IodmFyIGk9ci5wb3MtMTtpPj10O2ktLSlyLmJ1ZltpK25dPXIuYnVmW2ldfWZ1bmN0aW9uIEpzKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVZhcmludCh0W3JdKX1mdW5jdGlvbiBLcyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTVmFyaW50KHRbcl0pfWZ1bmN0aW9uIFFzKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZsb2F0KHRbcl0pfWZ1bmN0aW9uICRzKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZURvdWJsZSh0W3JdKX1mdW5jdGlvbiB0bCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVCb29sZWFuKHRbcl0pfWZ1bmN0aW9uIGVsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gcmwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU0ZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gbmwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRml4ZWQ2NCh0W3JdKX1mdW5jdGlvbiBpbCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQ2NCh0W3JdKX1mdW5jdGlvbiBhbCh0LGUpe3JldHVybih0W2VdfHRbZSsxXTw8OHx0W2UrMl08PDE2KSsxNjc3NzIxNip0W2UrM119ZnVuY3Rpb24gb2wodCxlLHIpe3Rbcl09ZSx0W3IrMV09ZT4+PjgsdFtyKzJdPWU+Pj4xNix0W3IrM109ZT4+PjI0fWZ1bmN0aW9uIHNsKHQsZSl7cmV0dXJuKHRbZV18dFtlKzFdPDw4fHRbZSsyXTw8MTYpKyh0W2UrM108PDI0KX1mdW5jdGlvbiBsbCh0LGUscil7MT09PXQmJnIucmVhZE1lc3NhZ2UoY2wsZSl9ZnVuY3Rpb24gY2wodCxlLHIpe2lmKDM9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKHVsLHt9KSxpPW4ud2lkdGgsYT1uLmhlaWdodCxvPW4ubGVmdCxzPW4udG9wLGw9bi5hZHZhbmNlO2UucHVzaCh7aWQ6bi5pZCxiaXRtYXA6bmV3IGZvKHt3aWR0aDppKzYsaGVpZ2h0OmErNn0sbi5iaXRtYXApLG1ldHJpY3M6e3dpZHRoOmksaGVpZ2h0OmEsbGVmdDpvLHRvcDpzLGFkdmFuY2U6bH19KX19ZnVuY3Rpb24gdWwodCxlLHIpezE9PT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5iaXRtYXA9ci5yZWFkQnl0ZXMoKTozPT09dD9lLndpZHRoPXIucmVhZFZhcmludCgpOjQ9PT10P2UuaGVpZ2h0PXIucmVhZFZhcmludCgpOjU9PT10P2UubGVmdD1yLnJlYWRTVmFyaW50KCk6Nj09PXQ/ZS50b3A9ci5yZWFkU1ZhcmludCgpOjc9PT10JiYoZS5hZHZhbmNlPXIucmVhZFZhcmludCgpKX1mdW5jdGlvbiBobCh0KXtmb3IodmFyIGU9MCxyPTAsbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07ZSs9YS53KmEuaCxyPU1hdGgubWF4KHIsYS53KX10LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaC10Lmh9KSk7Zm9yKHZhciBvPVt7eDowLHk6MCx3Ok1hdGgubWF4KE1hdGguY2VpbChNYXRoLnNxcnQoZS8uOTUpKSxyKSxoOjEvMH1dLHM9MCxsPTAsYz0wLHU9dDtjPHUubGVuZ3RoO2MrPTEpZm9yKHZhciBoPXVbY10sZj1vLmxlbmd0aC0xO2Y+PTA7Zi0tKXt2YXIgcD1vW2ZdO2lmKCEoaC53PnAud3x8aC5oPnAuaCkpe2lmKGgueD1wLngsaC55PXAueSxsPU1hdGgubWF4KGwsaC55K2guaCkscz1NYXRoLm1heChzLGgueCtoLncpLGgudz09PXAudyYmaC5oPT09cC5oKXt2YXIgZD1vLnBvcCgpO2Y8by5sZW5ndGgmJihvW2ZdPWQpfWVsc2UgaC5oPT09cC5oPyhwLngrPWgudyxwLnctPWgudyk6aC53PT09cC53PyhwLnkrPWguaCxwLmgtPWguaCk6KG8ucHVzaCh7eDpwLngraC53LHk6cC55LHc6cC53LWgudyxoOmguaH0pLHAueSs9aC5oLHAuaC09aC5oKTticmVha319cmV0dXJue3c6cyxoOmwsZmlsbDplLyhzKmwpfHwwfX1Hcy5wcm90b3R5cGU9e2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmJ1Zj1udWxsfSxyZWFkRmllbGRzOmZ1bmN0aW9uKHQsZSxyKXtmb3Iocj1yfHx0aGlzLmxlbmd0aDt0aGlzLnBvczxyOyl7dmFyIG49dGhpcy5yZWFkVmFyaW50KCksaT1uPj4zLGE9dGhpcy5wb3M7dGhpcy50eXBlPTcmbix0KGksZSx0aGlzKSx0aGlzLnBvcz09PWEmJnRoaXMuc2tpcChuKX1yZXR1cm4gZX0scmVhZE1lc3NhZ2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZWFkRmllbGRzKHQsZSx0aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyl9LHJlYWRGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9YWwodGhpcy5idWYsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkU0ZpeGVkMzI6ZnVuY3Rpb24oKXt2YXIgdD1zbCh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRGaXhlZDY0OmZ1bmN0aW9uKCl7dmFyIHQ9YWwodGhpcy5idWYsdGhpcy5wb3MpKzQyOTQ5NjcyOTYqYWwodGhpcy5idWYsdGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRTRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PWFsKHRoaXMuYnVmLHRoaXMucG9zKSs0Mjk0OTY3Mjk2KnNsKHRoaXMuYnVmLHRoaXMucG9zKzQpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkRmxvYXQ6ZnVuY3Rpb24oKXt2YXIgdD1Wcyh0aGlzLmJ1Zix0aGlzLnBvcywhMCwyMyw0KTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZERvdWJsZTpmdW5jdGlvbigpe3ZhciB0PVZzKHRoaXMuYnVmLHRoaXMucG9zLCEwLDUyLDgpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkVmFyaW50OmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10aGlzLmJ1ZjtyZXR1cm4gZT0xMjcmKHI9blt0aGlzLnBvcysrXSkscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDcscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDE0LHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDwyMSxyPDEyOD9lOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ci5idWY7aWYobj0oMTEyJihpPWFbci5wb3MrK10pKT4+NCxpPDEyOClyZXR1cm4gWnModCxuLGUpO2lmKG58PSgxMjcmKGk9YVtyLnBvcysrXSkpPDwzLGk8MTI4KXJldHVybiBacyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDEwLGk8MTI4KXJldHVybiBacyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDE3LGk8MTI4KXJldHVybiBacyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDI0LGk8MTI4KXJldHVybiBacyh0LG4sZSk7aWYobnw9KDEmKGk9YVtyLnBvcysrXSkpPDwzMSxpPDEyOClyZXR1cm4gWnModCxuLGUpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXMiKX0oZXw9KDE1JihyPW5bdGhpcy5wb3NdKSk8PDI4LHQsdGhpcykpKSl9LHJlYWRWYXJpbnQ2NDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfSxyZWFkU1ZhcmludDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpO3JldHVybiB0JTI9PTE/KHQrMSkvLTI6dC8yfSxyZWFkQm9vbGVhbjpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMucmVhZFZhcmludCgpKX0scmVhZFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5wb3M7cmV0dXJuIHRoaXMucG9zPXQsdC1lPj0xMiYmWXM/ZnVuY3Rpb24odCxlLHIpe3JldHVybiBZcy5kZWNvZGUodC5zdWJhcnJheShlLHIpKX0odGhpcy5idWYsZSx0KTpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPSIiLGk9ZTtpPHI7KXt2YXIgYSxvLHMsbD10W2ldLGM9bnVsbCx1PWw+MjM5PzQ6bD4yMjM/MzpsPjE5MT8yOjE7aWYoaSt1PnIpYnJlYWs7MT09PXU/bDwxMjgmJihjPWwpOjI9PT11PzEyOD09KDE5MiYoYT10W2krMV0pKSYmKGM9KDMxJmwpPDw2fDYzJmEpPD0xMjcmJihjPW51bGwpOjM9PT11PyhvPXRbaSsyXSwxMjg9PSgxOTImKGE9dFtpKzFdKSkmJjEyOD09KDE5MiZvKSYmKChjPSgxNSZsKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPD0yMDQ3fHxjPj01NTI5NiYmYzw9NTczNDMpJiYoYz1udWxsKSk6ND09PXUmJihvPXRbaSsyXSxzPXRbaSszXSwxMjg9PSgxOTImKGE9dFtpKzFdKSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoKGM9KDE1JmwpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKTw9NjU1MzV8fGM+PTExMTQxMTIpJiYoYz1udWxsKSksbnVsbD09PWM/KGM9NjU1MzMsdT0xKTpjPjY1NTM1JiYoYy09NjU1MzYsbis9U3RyaW5nLmZyb21DaGFyQ29kZShjPj4+MTAmMTAyM3w1NTI5NiksYz01NjMyMHwxMDIzJmMpLG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYyksaSs9dX1yZXR1cm4gbn0odGhpcy5idWYsZSx0KX0scmVhZEJ5dGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT10aGlzLmJ1Zi5zdWJhcnJheSh0aGlzLnBvcyx0KTtyZXR1cm4gdGhpcy5wb3M9dCxlfSxyZWFkUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7aWYodGhpcy50eXBlIT09R3MuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3ZhciByPVdzKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fSxyZWFkUGFja2VkU1ZhcmludDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1Hcy5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7dmFyIGU9V3ModGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PUdzLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTt2YXIgZT1Xcyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PUdzLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7dmFyIGU9V3ModGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZsb2F0KCkpO3JldHVybiB0fSxyZWFkUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PUdzLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRG91YmxlKCkpO3ZhciBlPVdzKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWREb3VibGUoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PUdzLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTt2YXIgZT1Xcyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PUdzLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7dmFyIGU9V3ModGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDMyKCkpO3JldHVybiB0fSxyZWFkUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1Hcy5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7dmFyIGU9V3ModGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1Hcy5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3ZhciBlPVdzKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTRml4ZWQ2NCgpKTtyZXR1cm4gdH0sc2tpcDpmdW5jdGlvbih0KXt2YXIgZT03JnQ7aWYoZT09PUdzLlZhcmludClmb3IoO3RoaXMuYnVmW3RoaXMucG9zKytdPjEyNzspO2Vsc2UgaWYoZT09PUdzLkJ5dGVzKXRoaXMucG9zPXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zO2Vsc2UgaWYoZT09PUdzLkZpeGVkMzIpdGhpcy5wb3MrPTQ7ZWxzZXtpZihlIT09R3MuRml4ZWQ2NCl0aHJvdyBuZXcgRXJyb3IoIlVuaW1wbGVtZW50ZWQgdHlwZTogIitlKTt0aGlzLnBvcys9OH19LHdyaXRlVGFnOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVZhcmludCh0PDwzfGUpfSxyZWFsbG9jOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmxlbmd0aHx8MTY7ZTx0aGlzLnBvcyt0OyllKj0yO2lmKGUhPT10aGlzLmxlbmd0aCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoZSk7ci5zZXQodGhpcy5idWYpLHRoaXMuYnVmPXIsdGhpcy5sZW5ndGg9ZX19LGZpbmlzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD10aGlzLnBvcyx0aGlzLnBvcz0wLHRoaXMuYnVmLnN1YmFycmF5KDAsdGhpcy5sZW5ndGgpfSx3cml0ZUZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLG9sKHRoaXMuYnVmLHQsdGhpcy5wb3MpLHRoaXMucG9zKz00fSx3cml0ZVNGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxvbCh0aGlzLmJ1Zix0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxvbCh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxvbCh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVNGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxvbCh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxvbCh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVZhcmludDpmdW5jdGlvbih0KXsodD0rdHx8MCk+MjY4NDM1NDU1fHx0PDA/ZnVuY3Rpb24odCxlKXt2YXIgcixuO2lmKHQ+PTA/KHI9dCU0Mjk0OTY3Mjk2fDAsbj10LzQyOTQ5NjcyOTZ8MCk6KG49figtdC80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1XihyPX4oLXQlNDI5NDk2NzI5NikpP3I9cisxfDA6KHI9MCxuPW4rMXwwKSksdD49MHgxMDAwMDAwMDAwMDAwMDAwMHx8dDwtMHgxMDAwMDAwMDAwMDAwMDAwMCl0aHJvdyBuZXcgRXJyb3IoIkdpdmVuIHZhcmludCBkb2Vzbid0IGZpdCBpbnRvIDEwIGJ5dGVzIik7ZS5yZWFsbG9jKDEwKSxmdW5jdGlvbih0LGUscil7ci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHIuYnVmW3IucG9zXT0xMjcmKHQ+Pj49Nyl9KHIsMCxlKSxmdW5jdGlvbih0LGUpe3ZhciByPSg3JnQpPDw0O2UuYnVmW2UucG9zKytdfD1yfCgodD4+Pj0zKT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksdCYmKGUuYnVmW2UucG9zKytdPTEyNyZ0KSkpKSl9KG4sZSl9KHQsdGhpcyk6KHRoaXMucmVhbGxvYyg0KSx0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmdHwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPXQ+Pj43JjEyNykpKSl9LHdyaXRlU1ZhcmludDpmdW5jdGlvbih0KXt0aGlzLndyaXRlVmFyaW50KHQ8MD8yKi10LTE6Mip0KX0sd3JpdGVCb29sZWFuOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQoQm9vbGVhbih0KSl9LHdyaXRlU3RyaW5nOmZ1bmN0aW9uKHQpe3Q9U3RyaW5nKHQpLHRoaXMucmVhbGxvYyg0KnQubGVuZ3RoKSx0aGlzLnBvcysrO3ZhciBlPXRoaXMucG9zO3RoaXMucG9zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhPTA7YTxlLmxlbmd0aDthKyspe2lmKChuPWUuY2hhckNvZGVBdChhKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtuPjU2MzE5fHxhKzE9PT1lLmxlbmd0aD8odFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODkpOmk9bjtjb250aW51ZX1pZihuPDU2MzIwKXt0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSxpPW47Y29udGludWV9bj1pLTU1Mjk2PDwxMHxuLTU2MzIwfDY1NTM2LGk9bnVsbH1lbHNlIGkmJih0W3IrK109MjM5LHRbcisrXT0xOTEsdFtyKytdPTE4OSxpPW51bGwpO248MTI4P3RbcisrXT1uOihuPDIwNDg/dFtyKytdPW4+PjZ8MTkyOihuPDY1NTM2P3RbcisrXT1uPj4xMnwyMjQ6KHRbcisrXT1uPj4xOHwyNDAsdFtyKytdPW4+PjEyJjYzfDEyOCksdFtyKytdPW4+PjYmNjN8MTI4KSx0W3IrK109NjMmbnwxMjgpfXJldHVybiByfSh0aGlzLmJ1Zix0LHRoaXMucG9zKTt2YXIgcj10aGlzLnBvcy1lO3I+PTEyOCYmWHMoZSxyLHRoaXMpLHRoaXMucG9zPWUtMSx0aGlzLndyaXRlVmFyaW50KHIpLHRoaXMucG9zKz1yfSx3cml0ZUZsb2F0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxxcyh0aGlzLmJ1Zix0LHRoaXMucG9zLCEwLDIzLDQpLHRoaXMucG9zKz00fSx3cml0ZURvdWJsZTpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCkscXModGhpcy5idWYsdCx0aGlzLnBvcywhMCw1Miw4KSx0aGlzLnBvcys9OH0sd3JpdGVCeXRlczpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDt0aGlzLndyaXRlVmFyaW50KGUpLHRoaXMucmVhbGxvYyhlKTtmb3IodmFyIHI9MDtyPGU7cisrKXRoaXMuYnVmW3RoaXMucG9zKytdPXRbcl19LHdyaXRlUmF3TWVzc2FnZTpmdW5jdGlvbih0LGUpe3RoaXMucG9zKys7dmFyIHI9dGhpcy5wb3M7dChlLHRoaXMpO3ZhciBuPXRoaXMucG9zLXI7bj49MTI4JiZYcyhyLG4sdGhpcyksdGhpcy5wb3M9ci0xLHRoaXMud3JpdGVWYXJpbnQobiksdGhpcy5wb3MrPW59LHdyaXRlTWVzc2FnZTpmdW5jdGlvbih0LGUscil7dGhpcy53cml0ZVRhZyh0LEdzLkJ5dGVzKSx0aGlzLndyaXRlUmF3TWVzc2FnZShlLHIpfSx3cml0ZVBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LEpzLGUpfSx3cml0ZVBhY2tlZFNWYXJpbnQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxLcyxlKX0sd3JpdGVQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsdGwsZSl9LHdyaXRlUGFja2VkRmxvYXQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxRcyxlKX0sd3JpdGVQYWNrZWREb3VibGU6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCwkcyxlKX0sd3JpdGVQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsZWwsZSl9LHdyaXRlUGFja2VkU0ZpeGVkMzI6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxybCxlKX0sd3JpdGVQYWNrZWRGaXhlZDY0OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsbmwsZSl9LHdyaXRlUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxpbCxlKX0sd3JpdGVCeXRlc0ZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LEdzLkJ5dGVzKSx0aGlzLndyaXRlQnl0ZXMoZSl9LHdyaXRlRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LEdzLkZpeGVkMzIpLHRoaXMud3JpdGVGaXhlZDMyKGUpfSx3cml0ZVNGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsR3MuRml4ZWQzMiksdGhpcy53cml0ZVNGaXhlZDMyKGUpfSx3cml0ZUZpeGVkNjRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxHcy5GaXhlZDY0KSx0aGlzLndyaXRlRml4ZWQ2NChlKX0sd3JpdGVTRml4ZWQ2NEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LEdzLkZpeGVkNjQpLHRoaXMud3JpdGVTRml4ZWQ2NChlKX0sd3JpdGVWYXJpbnRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxHcy5WYXJpbnQpLHRoaXMud3JpdGVWYXJpbnQoZSl9LHdyaXRlU1ZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LEdzLlZhcmludCksdGhpcy53cml0ZVNWYXJpbnQoZSl9LHdyaXRlU3RyaW5nRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsR3MuQnl0ZXMpLHRoaXMud3JpdGVTdHJpbmcoZSl9LHdyaXRlRmxvYXRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxHcy5GaXhlZDMyKSx0aGlzLndyaXRlRmxvYXQoZSl9LHdyaXRlRG91YmxlRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsR3MuRml4ZWQ2NCksdGhpcy53cml0ZURvdWJsZShlKX0sd3JpdGVCb29sZWFuRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVmFyaW50RmllbGQodCxCb29sZWFuKGUpKX19O3ZhciBmbD1mdW5jdGlvbih0LGUpe3ZhciByPWUucGl4ZWxSYXRpbyxuPWUudmVyc2lvbixpPWUuc3RyZXRjaFgsYT1lLnN0cmV0Y2hZLG89ZS5jb250ZW50O3RoaXMucGFkZGVkUmVjdD10LHRoaXMucGl4ZWxSYXRpbz1yLHRoaXMuc3RyZXRjaFg9aSx0aGlzLnN0cmV0Y2hZPWEsdGhpcy5jb250ZW50PW8sdGhpcy52ZXJzaW9uPW59LHBsPXt0bDp7Y29uZmlndXJhYmxlOiEwfSxicjp7Y29uZmlndXJhYmxlOiEwfSx0bGJyOntjb25maWd1cmFibGU6ITB9LGRpc3BsYXlTaXplOntjb25maWd1cmFibGU6ITB9fTtwbC50bC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5wYWRkZWRSZWN0LngrMSx0aGlzLnBhZGRlZFJlY3QueSsxXX0scGwuYnIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucGFkZGVkUmVjdC54K3RoaXMucGFkZGVkUmVjdC53LTEsdGhpcy5wYWRkZWRSZWN0LnkrdGhpcy5wYWRkZWRSZWN0LmgtMV19LHBsLnRsYnIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGwuY29uY2F0KHRoaXMuYnIpfSxwbC5kaXNwbGF5U2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bKHRoaXMucGFkZGVkUmVjdC53LTIpL3RoaXMucGl4ZWxSYXRpbywodGhpcy5wYWRkZWRSZWN0LmgtMikvdGhpcy5waXhlbFJhdGlvXX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmwucHJvdG90eXBlLHBsKTt2YXIgZGw9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxuPXt9O3RoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcz1bXTt2YXIgaT1bXTt0aGlzLmFkZEltYWdlcyh0LHIsaSksdGhpcy5hZGRJbWFnZXMoZSxuLGkpO3ZhciBhPWhsKGkpLG89bmV3IHBvKHt3aWR0aDphLnd8fDEsaGVpZ2h0OmEuaHx8MX0pO2Zvcih2YXIgcyBpbiB0KXt2YXIgbD10W3NdLGM9cltzXS5wYWRkZWRSZWN0O3BvLmNvcHkobC5kYXRhLG8se3g6MCx5OjB9LHt4OmMueCsxLHk6Yy55KzF9LGwuZGF0YSl9Zm9yKHZhciB1IGluIGUpe3ZhciBoPWVbdV0sZj1uW3VdLnBhZGRlZFJlY3QscD1mLngrMSxkPWYueSsxLGc9aC5kYXRhLndpZHRoLG09aC5kYXRhLmhlaWdodDtwby5jb3B5KGguZGF0YSxvLHt4OjAseTowfSx7eDpwLHk6ZH0saC5kYXRhKSxwby5jb3B5KGguZGF0YSxvLHt4OjAseTptLTF9LHt4OnAseTpkLTF9LHt3aWR0aDpnLGhlaWdodDoxfSkscG8uY29weShoLmRhdGEsbyx7eDowLHk6MH0se3g6cCx5OmQrbX0se3dpZHRoOmcsaGVpZ2h0OjF9KSxwby5jb3B5KGguZGF0YSxvLHt4OmctMSx5OjB9LHt4OnAtMSx5OmR9LHt3aWR0aDoxLGhlaWdodDptfSkscG8uY29weShoLmRhdGEsbyx7eDowLHk6MH0se3g6cCtnLHk6ZH0se3dpZHRoOjEsaGVpZ2h0Om19KX10aGlzLmltYWdlPW8sdGhpcy5pY29uUG9zaXRpb25zPXIsdGhpcy5wYXR0ZXJuUG9zaXRpb25zPW59O2RsLnByb3RvdHlwZS5hZGRJbWFnZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiB0KXt2YXIgaT10W25dLGE9e3g6MCx5OjAsdzppLmRhdGEud2lkdGgrMixoOmkuZGF0YS5oZWlnaHQrMn07ci5wdXNoKGEpLGVbbl09bmV3IGZsKGEsaSksaS5oYXNSZW5kZXJDYWxsYmFjayYmdGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzLnB1c2gobil9fSxkbC5wcm90b3R5cGUucGF0Y2hVcGRhdGVkSW1hZ2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQuZGlzcGF0Y2hSZW5kZXJDYWxsYmFja3ModGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzKSx0LnVwZGF0ZWRJbWFnZXMpdGhpcy5wYXRjaFVwZGF0ZWRJbWFnZSh0aGlzLmljb25Qb3NpdGlvbnNbcl0sdC5nZXRJbWFnZShyKSxlKSx0aGlzLnBhdGNoVXBkYXRlZEltYWdlKHRoaXMucGF0dGVyblBvc2l0aW9uc1tyXSx0LmdldEltYWdlKHIpLGUpfSxkbC5wcm90b3R5cGUucGF0Y2hVcGRhdGVkSW1hZ2U9ZnVuY3Rpb24odCxlLHIpe2lmKHQmJmUmJnQudmVyc2lvbiE9PWUudmVyc2lvbil7dC52ZXJzaW9uPWUudmVyc2lvbjt2YXIgbj10LnRsO3IudXBkYXRlKGUuZGF0YSx2b2lkIDAse3g6blswXSx5Om5bMV19KX19LERuKCJJbWFnZVBvc2l0aW9uIixmbCksRG4oIkltYWdlQXRsYXMiLGRsKTt2YXIgZ2w9e2hvcml6b250YWw6MSx2ZXJ0aWNhbDoyLGhvcml6b250YWxPbmx5OjN9LG1sPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZT0xLHRoaXMuZm9udFN0YWNrPSIiLHRoaXMuaW1hZ2VOYW1lPW51bGx9O21sLmZvclRleHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbWw7cmV0dXJuIHIuc2NhbGU9dHx8MSxyLmZvbnRTdGFjaz1lLHJ9LG1sLmZvckltYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBtbDtyZXR1cm4gZS5pbWFnZU5hbWU9dCxlfTt2YXIgdmw9ZnVuY3Rpb24oKXt0aGlzLnRleHQ9IiIsdGhpcy5zZWN0aW9uSW5kZXg9W10sdGhpcy5zZWN0aW9ucz1bXSx0aGlzLmltYWdlU2VjdGlvbklEPW51bGx9O2Z1bmN0aW9uIHlsKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcpe3ZhciBtLHY9dmwuZnJvbUZlYXR1cmUodCxpKTtoPT09Z2wudmVydGljYWwmJnYudmVydGljYWxpemVQdW5jdHVhdGlvbigpO3ZhciB5PW5pLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCx4PW5pLnByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dDtpZih5JiYxPT09di5zZWN0aW9ucy5sZW5ndGgpe209W107Zm9yKHZhciBiPTAsXz15KHYudG9TdHJpbmcoKSxNbCh2LGMsYSxlLG4scCxkKSk7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdLFQ9bmV3IHZsO1QudGV4dD13LFQuc2VjdGlvbnM9di5zZWN0aW9ucztmb3IodmFyIGs9MDtrPHcubGVuZ3RoO2srKylULnNlY3Rpb25JbmRleC5wdXNoKDApO20ucHVzaChUKX19ZWxzZSBpZih4KXttPVtdO2Zvcih2YXIgTT0wLEE9eCh2LnRleHQsdi5zZWN0aW9uSW5kZXgsTWwodixjLGEsZSxuLHAsZCkpO008QS5sZW5ndGg7TSs9MSl7dmFyIFM9QVtNXSxFPW5ldyB2bDtFLnRleHQ9U1swXSxFLnNlY3Rpb25JbmRleD1TWzFdLEUuc2VjdGlvbnM9di5zZWN0aW9ucyxtLnB1c2goRSl9fWVsc2UgbT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQudGV4dCxpPTAsYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07ci5wdXNoKHQuc3Vic3RyaW5nKGkscykpLGk9c31yZXR1cm4gaTxuLmxlbmd0aCYmci5wdXNoKHQuc3Vic3RyaW5nKGksbi5sZW5ndGgpKSxyfSh2LE1sKHYsYyxhLGUsbixwLGQpKTt2YXIgQz1bXSxMPXtwb3NpdGlvbmVkTGluZXM6Qyx0ZXh0OnYudG9TdHJpbmcoKSx0b3A6dVsxXSxib3R0b206dVsxXSxsZWZ0OnVbMF0scmlnaHQ6dVswXSx3cml0aW5nTW9kZTpoLGljb25zSW5UZXh0OiExLHZlcnRpY2FsaXphYmxlOiExfTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGgpe2Zvcih2YXIgZj0wLHA9LTE3LGQ9MCxnPTAsbT0icmlnaHQiPT09cz8xOiJsZWZ0Ij09PXM/MDouNSx2PTAseT0wLHg9aTt5PHgubGVuZ3RoO3krPTEpe3ZhciBiPXhbeV07Yi50cmltKCk7dmFyIF89Yi5nZXRNYXhTY2FsZSgpLHc9MjQqKF8tMSksVD17cG9zaXRpb25lZEdseXBoczpbXSxsaW5lT2Zmc2V0OjB9O3QucG9zaXRpb25lZExpbmVzW3ZdPVQ7dmFyIGs9VC5wb3NpdGlvbmVkR2x5cGhzLE09MDtpZihiLmxlbmd0aCgpKXtmb3IodmFyIEE9MDtBPGIubGVuZ3RoKCk7QSsrKXt2YXIgUz1iLmdldFNlY3Rpb24oQSksRT1iLmdldFNlY3Rpb25JbmRleChBKSxDPWIuZ2V0Q2hhckNvZGUoQSksTD0wLFA9bnVsbCxJPW51bGwsej1udWxsLE89MjQsRD0hKGw9PT1nbC5ob3Jpem9udGFsfHwhdSYmIUhuKEMpfHx1JiYoeGxbQ118fChIPUMsVm4uQXJhYmljKEgpfHxWblsiQXJhYmljIFN1cHBsZW1lbnQiXShIKXx8Vm5bIkFyYWJpYyBFeHRlbmRlZC1BIl0oSCl8fFZuWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiXShIKXx8Vm5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiJdKEgpKSkpO2lmKFMuaW1hZ2VOYW1lKXt2YXIgUj1uW1MuaW1hZ2VOYW1lXTtpZighUiljb250aW51ZTt6PVMuaW1hZ2VOYW1lLHQuaWNvbnNJblRleHQ9dC5pY29uc0luVGV4dHx8ITAsST1SLnBhZGRlZFJlY3Q7dmFyIEY9Ui5kaXNwbGF5U2l6ZTtTLnNjYWxlPTI0KlMuc2NhbGUvaCxMPXcrKDI0LUZbMV0qUy5zY2FsZSksTz0oUD17d2lkdGg6RlswXSxoZWlnaHQ6RlsxXSxsZWZ0OjEsdG9wOi0zLGFkdmFuY2U6RD9GWzFdOkZbMF19KS5hZHZhbmNlO3ZhciBCPUQ/RlswXSpTLnNjYWxlLTI0Kl86RlsxXSpTLnNjYWxlLTI0Kl87Qj4wJiZCPk0mJihNPUIpfWVsc2V7dmFyIE49cltTLmZvbnRTdGFja10saj1OJiZOW0NdO2lmKGomJmoucmVjdClJPWoucmVjdCxQPWoubWV0cmljcztlbHNle3ZhciBVPWVbUy5mb250U3RhY2tdLFY9VSYmVVtDXTtpZighViljb250aW51ZTtQPVYubWV0cmljc31MPTI0KihfLVMuc2NhbGUpfUQ/KHQudmVydGljYWxpemFibGU9ITAsay5wdXNoKHtnbHlwaDpDLGltYWdlTmFtZTp6LHg6Zix5OnArTCx2ZXJ0aWNhbDpELHNjYWxlOlMuc2NhbGUsZm9udFN0YWNrOlMuZm9udFN0YWNrLHNlY3Rpb25JbmRleDpFLG1ldHJpY3M6UCxyZWN0Okl9KSxmKz1PKlMuc2NhbGUrYyk6KGsucHVzaCh7Z2x5cGg6QyxpbWFnZU5hbWU6eix4OmYseTpwK0wsdmVydGljYWw6RCxzY2FsZTpTLnNjYWxlLGZvbnRTdGFjazpTLmZvbnRTdGFjayxzZWN0aW9uSW5kZXg6RSxtZXRyaWNzOlAscmVjdDpJfSksZis9UC5hZHZhbmNlKlMuc2NhbGUrYyl9MCE9PWsubGVuZ3RoJiYoZD1NYXRoLm1heChmLWMsZCksU2woaywwLGsubGVuZ3RoLTEsbSxNKSksZj0wO3ZhciBxPWEqXytNO1QubGluZU9mZnNldD1NYXRoLm1heChNLHcpLHArPXEsZz1NYXRoLm1heChxLGcpLCsrdn1lbHNlIHArPWEsKyt2fXZhciBILEc9cC0gLTE3LFk9QWwobyksVz1ZLmhvcml6b250YWxBbGlnbixaPVkudmVydGljYWxBbGlnbjsoZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjLHU9KGUtcikqaTtjPWEhPT1vPy1zKm4tIC0xNzooLW4qbCsuNSkqbztmb3IodmFyIGg9MCxmPXQ7aDxmLmxlbmd0aDtoKz0xKWZvcih2YXIgcD0wLGQ9ZltoXS5wb3NpdGlvbmVkR2x5cGhzO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXTtnLngrPXUsZy55Kz1jfX0pKHQucG9zaXRpb25lZExpbmVzLG0sVyxaLGQsZyxhLEcsaS5sZW5ndGgpLHQudG9wKz0tWipHLHQuYm90dG9tPXQudG9wK0csdC5sZWZ0Kz0tVypkLHQucmlnaHQ9dC5sZWZ0K2R9KEwsZSxyLG4sbSxvLHMsbCxoLGMsZixnKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZigwIT09cltlXS5wb3NpdGlvbmVkR2x5cGhzLmxlbmd0aClyZXR1cm4hMTtyZXR1cm4hMH0oQykmJkx9dmwuZnJvbUZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IHZsLG49MDtuPHQuc2VjdGlvbnMubGVuZ3RoO24rKyl7dmFyIGk9dC5zZWN0aW9uc1tuXTtpLmltYWdlP3IuYWRkSW1hZ2VTZWN0aW9uKGkpOnIuYWRkVGV4dFNlY3Rpb24oaSxlKX1yZXR1cm4gcn0sdmwucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQubGVuZ3RofSx2bC5wcm90b3R5cGUuZ2V0U2VjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWN0aW9uc1t0aGlzLnNlY3Rpb25JbmRleFt0XV19LHZsLnByb3RvdHlwZS5nZXRTZWN0aW9uSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VjdGlvbkluZGV4W3RdfSx2bC5wcm90b3R5cGUuZ2V0Q2hhckNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGV4dC5jaGFyQ29kZUF0KHQpfSx2bC5wcm90b3R5cGUudmVydGljYWxpemVQdW5jdHVhdGlvbj1mdW5jdGlvbigpe3RoaXMudGV4dD1mdW5jdGlvbih0KXtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10LmNoYXJDb2RlQXQocisxKXx8bnVsbCxpPXQuY2hhckNvZGVBdChyLTEpfHxudWxsO2UrPW4mJkduKG4pJiYhVXNbdFtyKzFdXXx8aSYmR24oaSkmJiFVc1t0W3ItMV1dfHwhVXNbdFtyXV0/dFtyXTpVc1t0W3JdXX1yZXR1cm4gZX0odGhpcy50ZXh0KX0sdmwucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLnRleHQubGVuZ3RoJiZ4bFt0aGlzLnRleHQuY2hhckNvZGVBdChlKV07ZSsrKXQrKztmb3IodmFyIHI9dGhpcy50ZXh0Lmxlbmd0aCxuPXRoaXMudGV4dC5sZW5ndGgtMTtuPj0wJiZuPj10JiZ4bFt0aGlzLnRleHQuY2hhckNvZGVBdChuKV07bi0tKXItLTt0aGlzLnRleHQ9dGhpcy50ZXh0LnN1YnN0cmluZyh0LHIpLHRoaXMuc2VjdGlvbkluZGV4PXRoaXMuc2VjdGlvbkluZGV4LnNsaWNlKHQscil9LHZsLnByb3RvdHlwZS5zdWJzdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgdmw7cmV0dXJuIHIudGV4dD10aGlzLnRleHQuc3Vic3RyaW5nKHQsZSksci5zZWN0aW9uSW5kZXg9dGhpcy5zZWN0aW9uSW5kZXguc2xpY2UodCxlKSxyLnNlY3Rpb25zPXRoaXMuc2VjdGlvbnMscn0sdmwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dH0sdmwucHJvdG90eXBlLmdldE1heFNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5zZWN0aW9uSW5kZXgucmVkdWNlKChmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLm1heChlLHQuc2VjdGlvbnNbcl0uc2NhbGUpfSksMCl9LHZsLnByb3RvdHlwZS5hZGRUZXh0U2VjdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMudGV4dCs9dC50ZXh0LHRoaXMuc2VjdGlvbnMucHVzaChtbC5mb3JUZXh0KHQuc2NhbGUsdC5mb250U3RhY2t8fGUpKTtmb3IodmFyIHI9dGhpcy5zZWN0aW9ucy5sZW5ndGgtMSxuPTA7bjx0LnRleHQubGVuZ3RoOysrbil0aGlzLnNlY3Rpb25JbmRleC5wdXNoKHIpfSx2bC5wcm90b3R5cGUuYWRkSW1hZ2VTZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW1hZ2U/dC5pbWFnZS5uYW1lOiIiO2lmKDAhPT1lLmxlbmd0aCl7dmFyIHI9dGhpcy5nZXROZXh0SW1hZ2VTZWN0aW9uQ2hhckNvZGUoKTtyPyh0aGlzLnRleHQrPVN0cmluZy5mcm9tQ2hhckNvZGUociksdGhpcy5zZWN0aW9ucy5wdXNoKG1sLmZvckltYWdlKGUpKSx0aGlzLnNlY3Rpb25JbmRleC5wdXNoKHRoaXMuc2VjdGlvbnMubGVuZ3RoLTEpKTpfKCJSZWFjaGVkIG1heGltdW0gbnVtYmVyIG9mIGltYWdlcyA2NDAxIil9ZWxzZSBfKCJDYW4ndCBhZGQgRm9ybWF0dGVkU2VjdGlvbiB3aXRoIGFuIGVtcHR5IGltYWdlLiIpfSx2bC5wcm90b3R5cGUuZ2V0TmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2VTZWN0aW9uSUQ/dGhpcy5pbWFnZVNlY3Rpb25JRD49NjM3NDM/bnVsbDorK3RoaXMuaW1hZ2VTZWN0aW9uSUQ6KHRoaXMuaW1hZ2VTZWN0aW9uSUQ9NTczNDQsdGhpcy5pbWFnZVNlY3Rpb25JRCl9O3ZhciB4bD17OTohMCwxMDohMCwxMTohMCwxMjohMCwxMzohMCwzMjohMH0sYmw9e307ZnVuY3Rpb24gX2wodCxlLHIsbixpLGEpe2lmKGUuaW1hZ2VOYW1lKXt2YXIgbz1uW2UuaW1hZ2VOYW1lXTtyZXR1cm4gbz9vLmRpc3BsYXlTaXplWzBdKmUuc2NhbGUqMjQvYStpOjB9dmFyIHM9cltlLmZvbnRTdGFja10sbD1zJiZzW3RdO3JldHVybiBsP2wubWV0cmljcy5hZHZhbmNlKmUuc2NhbGUraTowfWZ1bmN0aW9uIHdsKHQsZSxyLG4pe3ZhciBpPU1hdGgucG93KHQtZSwyKTtyZXR1cm4gbj90PGU/aS8yOjIqaTppK01hdGguYWJzKHIpKnJ9ZnVuY3Rpb24gVGwodCxlLHIpe3ZhciBuPTA7cmV0dXJuIDEwPT09dCYmKG4tPTFlNCksciYmKG4rPTE1MCksNDAhPT10JiY2NTI4OCE9PXR8fChuKz01MCksNDEhPT1lJiY2NTI4OSE9PWV8fChuKz01MCksbn1mdW5jdGlvbiBrbCh0LGUscixuLGksYSl7Zm9yKHZhciBvPW51bGwscz13bChlLHIsaSxhKSxsPTAsYz1uO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxoPXdsKGUtdS54LHIsaSxhKSt1LmJhZG5lc3M7aDw9cyYmKG89dSxzPWgpfXJldHVybntpbmRleDp0LHg6ZSxwcmlvckJyZWFrOm8sYmFkbmVzczpzfX1mdW5jdGlvbiBNbCh0LGUscixuLGksYSxvKXtpZigicG9pbnQiIT09YSlyZXR1cm5bXTtpZighdClyZXR1cm5bXTtmb3IodmFyIHMsbD1bXSxjPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aCgpO3MrKyl7dmFyIGw9dC5nZXRTZWN0aW9uKHMpO28rPV9sKHQuZ2V0Q2hhckNvZGUocyksbCxuLGksZSxhKX1yZXR1cm4gby9NYXRoLm1heCgxLE1hdGguY2VpbChvL3IpKX0odCxlLHIsbixpLG8pLHU9dC50ZXh0LmluZGV4T2YoIlx1MjAwYiIpPj0wLGg9MCxmPTA7Zjx0Lmxlbmd0aCgpO2YrKyl7dmFyIHA9dC5nZXRTZWN0aW9uKGYpLGQ9dC5nZXRDaGFyQ29kZShmKTtpZih4bFtkXXx8KGgrPV9sKGQscCxuLGksZSxvKSksZjx0Lmxlbmd0aCgpLTEpe3ZhciBnPSEoKHM9ZCk8MTE5MDR8fCEoVm5bIkJvcG9tb2ZvIEV4dGVuZGVkIl0ocyl8fFZuLkJvcG9tb2ZvKHMpfHxWblsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXShzKXx8Vm5bIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiXShzKXx8Vm5bIkNKSyBDb21wYXRpYmlsaXR5Il0ocyl8fFZuWyJDSksgUmFkaWNhbHMgU3VwcGxlbWVudCJdKHMpfHxWblsiQ0pLIFN0cm9rZXMiXShzKXx8Vm5bIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiJdKHMpfHxWblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSJdKHMpfHxWblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKHMpfHxWblsiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyJdKHMpfHxWblsiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiXShzKXx8Vm4uSGlyYWdhbmEocyl8fFZuWyJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIl0ocyl8fFZuWyJLYW5neGkgUmFkaWNhbHMiXShzKXx8Vm5bIkthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMiXShzKXx8Vm4uS2F0YWthbmEocyl8fFZuWyJWZXJ0aWNhbCBGb3JtcyJdKHMpfHxWblsiWWkgUmFkaWNhbHMiXShzKXx8Vm5bIllpIFN5bGxhYmxlcyJdKHMpKSk7KGJsW2RdfHxnfHxwLmltYWdlTmFtZSkmJmwucHVzaChrbChmKzEsaCxjLGwsVGwoZCx0LmdldENoYXJDb2RlKGYrMSksZyYmdSksITEpKX19cmV0dXJuIGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGU/dChlLnByaW9yQnJlYWspLmNvbmNhdChlLmluZGV4KTpbXX0oa2wodC5sZW5ndGgoKSxoLGMsbCwwLCEwKSl9ZnVuY3Rpb24gQWwodCl7dmFyIGU9LjUscj0uNTtzd2l0Y2godCl7Y2FzZSJyaWdodCI6Y2FzZSJ0b3AtcmlnaHQiOmNhc2UiYm90dG9tLXJpZ2h0IjplPTE7YnJlYWs7Y2FzZSJsZWZ0IjpjYXNlInRvcC1sZWZ0IjpjYXNlImJvdHRvbS1sZWZ0IjplPTB9c3dpdGNoKHQpe2Nhc2UiYm90dG9tIjpjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJib3R0b20tbGVmdCI6cj0xO2JyZWFrO2Nhc2UidG9wIjpjYXNlInRvcC1yaWdodCI6Y2FzZSJ0b3AtbGVmdCI6cj0wfXJldHVybntob3Jpem9udGFsQWxpZ246ZSx2ZXJ0aWNhbEFsaWduOnJ9fWZ1bmN0aW9uIFNsKHQsZSxyLG4saSl7aWYobnx8aSlmb3IodmFyIGE9dFtyXSxvPSh0W3JdLngrYS5tZXRyaWNzLmFkdmFuY2UqYS5zY2FsZSkqbixzPWU7czw9cjtzKyspdFtzXS54LT1vLHRbc10ueSs9aX1mdW5jdGlvbiBFbCh0LGUscixuLGksYSl7dmFyIG8scz10LmltYWdlO2lmKHMuY29udGVudCl7dmFyIGw9cy5jb250ZW50LGM9cy5waXhlbFJhdGlvfHwxO289W2xbMF0vYyxsWzFdL2Mscy5kaXNwbGF5U2l6ZVswXS1sWzJdL2Mscy5kaXNwbGF5U2l6ZVsxXS1sWzNdL2NdfXZhciB1LGgsZixwLGQ9ZS5sZWZ0KmEsZz1lLnJpZ2h0KmE7IndpZHRoIj09PXJ8fCJib3RoIj09PXI/KHA9aVswXStkLW5bM10saD1pWzBdK2crblsxXSk6aD0ocD1pWzBdKyhkK2ctcy5kaXNwbGF5U2l6ZVswXSkvMikrcy5kaXNwbGF5U2l6ZVswXTt2YXIgbT1lLnRvcCphLHY9ZS5ib3R0b20qYTtyZXR1cm4iaGVpZ2h0Ij09PXJ8fCJib3RoIj09PXI/KHU9aVsxXSttLW5bMF0sZj1pWzFdK3YrblsyXSk6Zj0odT1pWzFdKyhtK3Ytcy5kaXNwbGF5U2l6ZVsxXSkvMikrcy5kaXNwbGF5U2l6ZVsxXSx7aW1hZ2U6cyx0b3A6dSxyaWdodDpoLGJvdHRvbTpmLGxlZnQ6cCxjb2xsaXNpb25QYWRkaW5nOm99fWJsWzEwXT0hMCxibFszMl09ITAsYmxbMzhdPSEwLGJsWzQwXT0hMCxibFs0MV09ITAsYmxbNDNdPSEwLGJsWzQ1XT0hMCxibFs0N109ITAsYmxbMTczXT0hMCxibFsxODNdPSEwLGJsWzgyMDNdPSEwLGJsWzgyMDhdPSEwLGJsWzgyMTFdPSEwLGJsWzgyMzFdPSEwO3ZhciBDbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuLGkpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5hbmdsZT1uLHZvaWQgMCE9PWkmJih0aGlzLnNlZ21lbnQ9aSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcy54LHRoaXMueSx0aGlzLmFuZ2xlLHRoaXMuc2VnbWVudCl9LGV9KGkpO2Z1bmN0aW9uIExsKHQsZSl7dmFyIHI9ZS5leHByZXNzaW9uO2lmKCJjb25zdGFudCI9PT1yLmtpbmQpcmV0dXJue2tpbmQ6ImNvbnN0YW50IixsYXlvdXRTaXplOnIuZXZhbHVhdGUobmV3IGlpKHQrMSkpfTtpZigic291cmNlIj09PXIua2luZClyZXR1cm57a2luZDoic291cmNlIn07Zm9yKHZhciBuPXIuem9vbVN0b3BzLGk9ci5pbnRlcnBvbGF0aW9uVHlwZSxhPTA7YTxuLmxlbmd0aCYmblthXTw9dDspYSsrO2Zvcih2YXIgbz1hPU1hdGgubWF4KDAsYS0xKTtvPG4ubGVuZ3RoJiZuW29dPHQrMTspbysrO289TWF0aC5taW4obi5sZW5ndGgtMSxvKTt2YXIgcz1uW2FdLGw9bltvXTtyZXR1cm4iY29tcG9zaXRlIj09PXIua2luZD97a2luZDoiY29tcG9zaXRlIixtaW5ab29tOnMsbWF4Wm9vbTpsLGludGVycG9sYXRpb25UeXBlOml9OntraW5kOiJjYW1lcmEiLG1pblpvb206cyxtYXhab29tOmwsbWluU2l6ZTpyLmV2YWx1YXRlKG5ldyBpaShzKSksbWF4U2l6ZTpyLmV2YWx1YXRlKG5ldyBpaShsKSksaW50ZXJwb2xhdGlvblR5cGU6aX19ZnVuY3Rpb24gUGwodCxlLHIpe3ZhciBuPWUudVNpemUsaT1yLmxvd2VyU2l6ZTtyZXR1cm4ic291cmNlIj09PXQua2luZD9pLzEyODoiY29tcG9zaXRlIj09PXQua2luZD9VZShpLzEyOCxyLnVwcGVyU2l6ZS8xMjgsZS51U2l6ZVQpOm59ZnVuY3Rpb24gSWwodCxlKXt2YXIgcj0wLG49MDtpZigiY29uc3RhbnQiPT09dC5raW5kKW49dC5sYXlvdXRTaXplO2Vsc2UgaWYoInNvdXJjZSIhPT10LmtpbmQpe3ZhciBpPXQuaW50ZXJwb2xhdGlvblR5cGUsYT1pP2wocnIuaW50ZXJwb2xhdGlvbkZhY3RvcihpLGUsdC5taW5ab29tLHQubWF4Wm9vbSksMCwxKTowOyJjYW1lcmEiPT09dC5raW5kP249VWUodC5taW5TaXplLHQubWF4U2l6ZSxhKTpyPWF9cmV0dXJue3VTaXplVDpyLHVTaXplOm59fURuKCJBbmNob3IiLENsKTt2YXIgemw9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZ2V0U2l6ZURhdGE6TGwsZXZhbHVhdGVTaXplRm9yRmVhdHVyZTpQbCxldmFsdWF0ZVNpemVGb3Jab29tOklsLFNJWkVfUEFDS19GQUNUT1I6MTI4fSk7ZnVuY3Rpb24gT2wodCxlLHIsbixpKXtpZih2b2lkIDA9PT1lLnNlZ21lbnQpcmV0dXJuITA7Zm9yKHZhciBhPWUsbz1lLnNlZ21lbnQrMSxzPTA7cz4tci8yOyl7aWYoLS1vPDApcmV0dXJuITE7cy09dFtvXS5kaXN0KGEpLGE9dFtvXX1zKz10W29dLmRpc3QodFtvKzFdKSxvKys7Zm9yKHZhciBsPVtdLGM9MDtzPHIvMjspe3ZhciB1PXRbb10saD10W28rMV07aWYoIWgpcmV0dXJuITE7dmFyIGY9dFtvLTFdLmFuZ2xlVG8odSktdS5hbmdsZVRvKGgpO2ZvcihmPU1hdGguYWJzKChmKzMqTWF0aC5QSSklKDIqTWF0aC5QSSktTWF0aC5QSSksbC5wdXNoKHtkaXN0YW5jZTpzLGFuZ2xlRGVsdGE6Zn0pLGMrPWY7cy1sWzBdLmRpc3RhbmNlPm47KWMtPWwuc2hpZnQoKS5hbmdsZURlbHRhO2lmKGM+aSlyZXR1cm4hMTtvKysscys9dS5kaXN0KGgpfXJldHVybiEwfWZ1bmN0aW9uIERsKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoLTE7cisrKWUrPXRbcl0uZGlzdCh0W3IrMV0pO3JldHVybiBlfWZ1bmN0aW9uIFJsKHQsZSxyKXtyZXR1cm4gdD8uNiplKnI6MH1mdW5jdGlvbiBGbCh0LGUpe3JldHVybiBNYXRoLm1heCh0P3QucmlnaHQtdC5sZWZ0OjAsZT9lLnJpZ2h0LWUubGVmdDowKX1mdW5jdGlvbiBCbCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVJsKHIsaSxhKSxzPUZsKHIsbikqYSxsPTAsYz1EbCh0KS8yLHU9MDt1PHQubGVuZ3RoLTE7dSsrKXt2YXIgaD10W3VdLGY9dFt1KzFdLHA9aC5kaXN0KGYpO2lmKGwrcD5jKXt2YXIgZD0oYy1sKS9wLGc9VWUoaC54LGYueCxkKSxtPVVlKGgueSxmLnksZCksdj1uZXcgQ2woZyxtLGYuYW5nbGVUbyhoKSx1KTtyZXR1cm4gdi5fcm91bmQoKSwhb3x8T2wodCx2LHMsbyxlKT92OnZvaWQgMH1sKz1wfX1mdW5jdGlvbiBObCh0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9UmwobixhLG8pLHU9RmwobixpKSxoPXUqbyxmPTA9PT10WzBdLnh8fHRbMF0ueD09PWx8fDA9PT10WzBdLnl8fHRbMF0ueT09PWw7cmV0dXJuIGUtaDxlLzQmJihlPWgrZS80KSxmdW5jdGlvbiB0KGUscixuLGksYSxvLHMsbCxjKXtmb3IodmFyIHU9by8yLGg9RGwoZSksZj0wLHA9ci1uLGQ9W10sZz0wO2c8ZS5sZW5ndGgtMTtnKyspe2Zvcih2YXIgbT1lW2ddLHY9ZVtnKzFdLHk9bS5kaXN0KHYpLHg9di5hbmdsZVRvKG0pO3ArbjxmK3k7KXt2YXIgYj0oKHArPW4pLWYpL3ksXz1VZShtLngsdi54LGIpLHc9VWUobS55LHYueSxiKTtpZihfPj0wJiZfPGMmJnc+PTAmJnc8YyYmcC11Pj0wJiZwK3U8PWgpe3ZhciBUPW5ldyBDbChfLHcseCxnKTtULl9yb3VuZCgpLGkmJiFPbChlLFQsbyxpLGEpfHxkLnB1c2goVCl9fWYrPXl9cmV0dXJuIGx8fGQubGVuZ3RofHxzfHwoZD10KGUsZi8yLG4saSxhLG8scywhMCxjKSksZH0odCxmP2UvMipzJWU6KHUvMisyKmEpKm8qcyVlLGUsYyxyLGgsZiwhMSxsKX1mdW5jdGlvbiBqbCh0LGUscixuLGEpe2Zvcih2YXIgbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspZm9yKHZhciBsPXRbc10sYz12b2lkIDAsdT0wO3U8bC5sZW5ndGgtMTt1Kyspe3ZhciBoPWxbdV0sZj1sW3UrMV07aC54PGUmJmYueDxlfHwoaC54PGU/aD1uZXcgaShlLGgueSsoZS1oLngpLyhmLngtaC54KSooZi55LWgueSkpLl9yb3VuZCgpOmYueDxlJiYoZj1uZXcgaShlLGgueSsoZS1oLngpLyhmLngtaC54KSooZi55LWgueSkpLl9yb3VuZCgpKSxoLnk8ciYmZi55PHJ8fChoLnk8cj9oPW5ldyBpKGgueCsoci1oLnkpLyhmLnktaC55KSooZi54LWgueCkscikuX3JvdW5kKCk6Zi55PHImJihmPW5ldyBpKGgueCsoci1oLnkpLyhmLnktaC55KSooZi54LWgueCkscikuX3JvdW5kKCkpLGgueD49biYmZi54Pj1ufHwoaC54Pj1uP2g9bmV3IGkobixoLnkrKG4taC54KS8oZi54LWgueCkqKGYueS1oLnkpKS5fcm91bmQoKTpmLng+PW4mJihmPW5ldyBpKG4saC55KyhuLWgueCkvKGYueC1oLngpKihmLnktaC55KSkuX3JvdW5kKCkpLGgueT49YSYmZi55Pj1hfHwoaC55Pj1hP2g9bmV3IGkoaC54KyhhLWgueSkvKGYueS1oLnkpKihmLngtaC54KSxhKS5fcm91bmQoKTpmLnk+PWEmJihmPW5ldyBpKGgueCsoYS1oLnkpLyhmLnktaC55KSooZi54LWgueCksYSkuX3JvdW5kKCkpLGMmJmguZXF1YWxzKGNbYy5sZW5ndGgtMV0pfHxvLnB1c2goYz1baF0pLGMucHVzaChmKSkpKSl9cmV0dXJuIG99ZnVuY3Rpb24gVWwodCxlLHIsbil7dmFyIGE9W10sbz10LmltYWdlLHM9by5waXhlbFJhdGlvLGw9by5wYWRkZWRSZWN0LnctMixjPW8ucGFkZGVkUmVjdC5oLTIsdT10LnJpZ2h0LXQubGVmdCxoPXQuYm90dG9tLXQudG9wLGY9by5zdHJldGNoWHx8W1swLGxdXSxwPW8uc3RyZXRjaFl8fFtbMCxjXV0sZD1mdW5jdGlvbih0LGUpe3JldHVybiB0K2VbMV0tZVswXX0sZz1mLnJlZHVjZShkLDApLG09cC5yZWR1Y2UoZCwwKSx2PWwtZyx5PWMtbSx4PTAsYj1nLF89MCx3PW0sVD0wLGs9dixNPTAsQT15O2lmKG8uY29udGVudCYmbil7dmFyIFM9by5jb250ZW50O3g9VmwoZiwwLFNbMF0pLF89VmwocCwwLFNbMV0pLGI9VmwoZixTWzBdLFNbMl0pLHc9VmwocCxTWzFdLFNbM10pLFQ9U1swXS14LE09U1sxXS1fLGs9U1syXS1TWzBdLWIsQT1TWzNdLVNbMV0td312YXIgRT1mdW5jdGlvbihuLGEsbCxjKXt2YXIgZj1IbChuLnN0cmV0Y2gteCxiLHUsdC5sZWZ0KSxwPUdsKG4uZml4ZWQtVCxrLG4uc3RyZXRjaCxnKSxkPUhsKGEuc3RyZXRjaC1fLHcsaCx0LnRvcCksdj1HbChhLmZpeGVkLU0sQSxhLnN0cmV0Y2gsbSkseT1IbChsLnN0cmV0Y2gteCxiLHUsdC5sZWZ0KSxTPUdsKGwuZml4ZWQtVCxrLGwuc3RyZXRjaCxnKSxFPUhsKGMuc3RyZXRjaC1fLHcsaCx0LnRvcCksQz1HbChjLmZpeGVkLU0sQSxjLnN0cmV0Y2gsbSksTD1uZXcgaShmLGQpLFA9bmV3IGkoeSxkKSxJPW5ldyBpKHksRSksej1uZXcgaShmLEUpLE89bmV3IGkocC9zLHYvcyksRD1uZXcgaShTL3MsQy9zKSxSPWUqTWF0aC5QSS8xODA7aWYoUil7dmFyIEY9TWF0aC5zaW4oUiksQj1NYXRoLmNvcyhSKSxOPVtCLC1GLEYsQl07TC5fbWF0TXVsdChOKSxQLl9tYXRNdWx0KE4pLHouX21hdE11bHQoTiksSS5fbWF0TXVsdChOKX12YXIgaj1uLnN0cmV0Y2grbi5maXhlZCxVPWEuc3RyZXRjaCthLmZpeGVkO3JldHVybnt0bDpMLHRyOlAsYmw6eixicjpJLHRleDp7eDpvLnBhZGRlZFJlY3QueCsxK2oseTpvLnBhZGRlZFJlY3QueSsxK1UsdzpsLnN0cmV0Y2grbC5maXhlZC1qLGg6Yy5zdHJldGNoK2MuZml4ZWQtVX0sd3JpdGluZ01vZGU6dm9pZCAwLGdseXBoT2Zmc2V0OlswLDBdLHNlY3Rpb25JbmRleDowLHBpeGVsT2Zmc2V0VEw6TyxwaXhlbE9mZnNldEJSOkQsbWluRm9udFNjYWxlWDprL3MvdSxtaW5Gb250U2NhbGVZOkEvcy9oLGlzU0RGOnJ9fTtpZihuJiYoby5zdHJldGNoWHx8by5zdHJldGNoWSkpZm9yKHZhciBDPXFsKGYsdixnKSxMPXFsKHAseSxtKSxQPTA7UDxDLmxlbmd0aC0xO1ArKylmb3IodmFyIEk9Q1tQXSx6PUNbUCsxXSxPPTA7TzxMLmxlbmd0aC0xO08rKylhLnB1c2goRShJLExbT10seixMW08rMV0pKTtlbHNlIGEucHVzaChFKHtmaXhlZDowLHN0cmV0Y2g6LTF9LHtmaXhlZDowLHN0cmV0Y2g6LTF9LHtmaXhlZDowLHN0cmV0Y2g6bCsxfSx7Zml4ZWQ6MCxzdHJldGNoOmMrMX0pKTtyZXR1cm4gYX1mdW5jdGlvbiBWbCh0LGUscil7Zm9yKHZhciBuPTAsaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07bis9TWF0aC5tYXgoZSxNYXRoLm1pbihyLG9bMV0pKS1NYXRoLm1heChlLE1hdGgubWluKHIsb1swXSkpfXJldHVybiBufWZ1bmN0aW9uIHFsKHQsZSxyKXtmb3IodmFyIG49W3tmaXhlZDotMSxzdHJldGNoOjB9XSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW9bMF0sbD1vWzFdLGM9bltuLmxlbmd0aC0xXTtuLnB1c2goe2ZpeGVkOnMtYy5zdHJldGNoLHN0cmV0Y2g6Yy5zdHJldGNofSksbi5wdXNoKHtmaXhlZDpzLWMuc3RyZXRjaCxzdHJldGNoOmMuc3RyZXRjaCsobC1zKX0pfXJldHVybiBuLnB1c2goe2ZpeGVkOmUrMSxzdHJldGNoOnJ9KSxufWZ1bmN0aW9uIEhsKHQsZSxyLG4pe3JldHVybiB0L2UqcitufWZ1bmN0aW9uIEdsKHQsZSxyLG4pe3JldHVybiB0LWUqci9ufXZhciBZbD1mdW5jdGlvbih0LGUscixuLGEsbyxzLGwsYyx1KXtpZih0aGlzLmJveFN0YXJ0SW5kZXg9dC5sZW5ndGgsYyl7dmFyIGg9by50b3AsZj1vLmJvdHRvbSxwPW8uY29sbGlzaW9uUGFkZGluZztwJiYoaC09cFsxXSxmKz1wWzNdKTt2YXIgZD1mLWg7ZD4wJiYoZD1NYXRoLm1heCgxMCxkKSx0aGlzLmNpcmNsZURpYW1ldGVyPWQpfWVsc2V7dmFyIGc9by50b3Aqcy1sLG09by5ib3R0b20qcytsLHY9by5sZWZ0KnMtbCx5PW8ucmlnaHQqcytsLHg9by5jb2xsaXNpb25QYWRkaW5nO2lmKHgmJih2LT14WzBdKnMsZy09eFsxXSpzLHkrPXhbMl0qcyxtKz14WzNdKnMpLHUpe3ZhciBiPW5ldyBpKHYsZyksXz1uZXcgaSh5LGcpLHc9bmV3IGkodixtKSxUPW5ldyBpKHksbSksaz11Kk1hdGguUEkvMTgwO2IuX3JvdGF0ZShrKSxfLl9yb3RhdGUoayksdy5fcm90YXRlKGspLFQuX3JvdGF0ZShrKSx2PU1hdGgubWluKGIueCxfLngsdy54LFQueCkseT1NYXRoLm1heChiLngsXy54LHcueCxULngpLGc9TWF0aC5taW4oYi55LF8ueSx3LnksVC55KSxtPU1hdGgubWF4KGIueSxfLnksdy55LFQueSl9dC5lbXBsYWNlQmFjayhlLngsZS55LHYsZyx5LG0scixuLGEpfXRoaXMuYm94RW5kSW5kZXg9dC5sZW5ndGh9LFdsPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPVpsKSx0aGlzLmRhdGE9dCx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuY29tcGFyZT1lLHRoaXMubGVuZ3RoPjApZm9yKHZhciByPSh0aGlzLmxlbmd0aD4+MSktMTtyPj0wO3ItLSl0aGlzLl9kb3duKHIpfTtmdW5jdGlvbiBabCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBYbCh0LGUscil7dm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09ciYmKHI9ITEpO2Zvcih2YXIgbj0xLzAsYT0xLzAsbz0tMS8wLHM9LTEvMCxsPXRbMF0sYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdOyghY3x8dS54PG4pJiYobj11LngpLCghY3x8dS55PGEpJiYoYT11LnkpLCghY3x8dS54Pm8pJiYobz11LngpLCghY3x8dS55PnMpJiYocz11LnkpfXZhciBoPU1hdGgubWluKG8tbixzLWEpLGY9aC8yLHA9bmV3IFdsKFtdLEpsKTtpZigwPT09aClyZXR1cm4gbmV3IGkobixhKTtmb3IodmFyIGQ9bjtkPG87ZCs9aClmb3IodmFyIGc9YTtnPHM7Zys9aClwLnB1c2gobmV3IEtsKGQrZixnK2YsZix0KSk7Zm9yKHZhciBtPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10WzBdLGE9MCxvPWkubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9aVthXSxjPWlbc10sdT1sLngqYy55LWMueCpsLnk7cis9KGwueCtjLngpKnUsbis9KGwueStjLnkpKnUsZSs9Myp1fXJldHVybiBuZXcgS2woci9lLG4vZSwwLHQpfSh0KSx2PXAubGVuZ3RoO3AubGVuZ3RoOyl7dmFyIHk9cC5wb3AoKTsoeS5kPm0uZHx8IW0uZCkmJihtPXksciYmY29uc29sZS5sb2coImZvdW5kIGJlc3QgJWQgYWZ0ZXIgJWQgcHJvYmVzIixNYXRoLnJvdW5kKDFlNCp5LmQpLzFlNCx2KSkseS5tYXgtbS5kPD1lfHwocC5wdXNoKG5ldyBLbCh5LnAueC0oZj15LmgvMikseS5wLnktZixmLHQpKSxwLnB1c2gobmV3IEtsKHkucC54K2YseS5wLnktZixmLHQpKSxwLnB1c2gobmV3IEtsKHkucC54LWYseS5wLnkrZixmLHQpKSxwLnB1c2gobmV3IEtsKHkucC54K2YseS5wLnkrZixmLHQpKSx2Kz00KX1yZXR1cm4gciYmKGNvbnNvbGUubG9nKCJudW0gcHJvYmVzOiAiK3YpLGNvbnNvbGUubG9nKCJiZXN0IGRpc3RhbmNlOiAiK20uZCkpLG0ucH1mdW5jdGlvbiBKbCh0LGUpe3JldHVybiBlLm1heC10Lm1heH1mdW5jdGlvbiBLbCh0LGUscixuKXt0aGlzLnA9bmV3IGkodCxlKSx0aGlzLmg9cix0aGlzLmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ITEsbj0xLzAsaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgYT1lW2ldLG89MCxzPWEubGVuZ3RoLGw9cy0xO288cztsPW8rKyl7dmFyIGM9YVtvXSx1PWFbbF07Yy55PnQueSE9dS55PnQueSYmdC54PCh1LngtYy54KSoodC55LWMueSkvKHUueS1jLnkpK2MueCYmKHI9IXIpLG49TWF0aC5taW4obixHYSh0LGMsdSkpfXJldHVybihyPzE6LTEpKk1hdGguc3FydChuKX0odGhpcy5wLG4pLHRoaXMubWF4PXRoaXMuZCt0aGlzLmgqTWF0aC5TUVJUMn1XbC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0KXt0aGlzLmRhdGEucHVzaCh0KSx0aGlzLmxlbmd0aCsrLHRoaXMuX3VwKHRoaXMubGVuZ3RoLTEpfSxXbC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgdD10aGlzLmRhdGFbMF0sZT10aGlzLmRhdGEucG9wKCk7cmV0dXJuIHRoaXMubGVuZ3RoLS0sdGhpcy5sZW5ndGg+MCYmKHRoaXMuZGF0YVswXT1lLHRoaXMuX2Rvd24oMCkpLHR9fSxXbC5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGFbMF19LFdsLnByb3RvdHlwZS5fdXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YSxyPXRoaXMuY29tcGFyZSxuPWVbdF07dD4wOyl7dmFyIGk9dC0xPj4xLGE9ZVtpXTtpZihyKG4sYSk+PTApYnJlYWs7ZVt0XT1hLHQ9aX1lW3RdPW59LFdsLnByb3RvdHlwZS5fZG93bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5kYXRhLHI9dGhpcy5jb21wYXJlLG49dGhpcy5sZW5ndGg+PjEsaT1lW3RdO3Q8bjspe3ZhciBhPTErKHQ8PDEpLG89ZVthXSxzPWErMTtpZihzPHRoaXMubGVuZ3RoJiZyKGVbc10sbyk8MCYmKGE9cyxvPWVbc10pLHIobyxpKT49MClicmVhaztlW3RdPW8sdD1hfWVbdF09aX07dmFyIFFsPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtmdW5jdGlvbiAkbCh0LGUpe3JldHVybiBlWzFdIT09UWw/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTAsaT0wO3N3aXRjaChlPU1hdGguYWJzKGUpLHI9TWF0aC5hYnMociksdCl7Y2FzZSJ0b3AtcmlnaHQiOmNhc2UidG9wLWxlZnQiOmNhc2UidG9wIjppPXItNzticmVhaztjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJib3R0b20tbGVmdCI6Y2FzZSJib3R0b20iOmk9Ny1yfXN3aXRjaCh0KXtjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UicmlnaHQiOm49LWU7YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6Y2FzZSJsZWZ0IjpuPWV9cmV0dXJuW24saV19KHQsZVswXSxlWzFdKTpmdW5jdGlvbih0LGUpe3ZhciByPTAsbj0wO2U8MCYmKGU9MCk7dmFyIGk9ZS9NYXRoLnNxcnQoMik7c3dpdGNoKHQpe2Nhc2UidG9wLXJpZ2h0IjpjYXNlInRvcC1sZWZ0IjpuPWktNzticmVhaztjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJib3R0b20tbGVmdCI6bj03LWk7YnJlYWs7Y2FzZSJib3R0b20iOm49Ny1lO2JyZWFrO2Nhc2UidG9wIjpuPWUtN31zd2l0Y2godCl7Y2FzZSJ0b3AtcmlnaHQiOmNhc2UiYm90dG9tLXJpZ2h0IjpyPS1pO2JyZWFrO2Nhc2UidG9wLWxlZnQiOmNhc2UiYm90dG9tLWxlZnQiOnI9aTticmVhaztjYXNlImxlZnQiOnI9ZTticmVhaztjYXNlInJpZ2h0IjpyPS1lfXJldHVybltyLG5dfSh0LGVbMF0pfWZ1bmN0aW9uIHRjKHQpe3N3aXRjaCh0KXtjYXNlInJpZ2h0IjpjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOnJldHVybiJyaWdodCI7Y2FzZSJsZWZ0IjpjYXNlInRvcC1sZWZ0IjpjYXNlImJvdHRvbS1sZWZ0IjpyZXR1cm4ibGVmdCJ9cmV0dXJuImNlbnRlciJ9ZnVuY3Rpb24gZWModCxlLHIsbixhLG8scyxsLGMsdSxoLGYscCxkLGcpe3ZhciBtPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLHMsbCl7Zm9yKHZhciBjPW4ubGF5b3V0LmdldCgidGV4dC1yb3RhdGUiKS5ldmFsdWF0ZShvLHt9KSpNYXRoLlBJLzE4MCx1PVtdLGg9MCxmPWUucG9zaXRpb25lZExpbmVzO2g8Zi5sZW5ndGg7aCs9MSlmb3IodmFyIHA9ZltoXSxkPTAsZz1wLnBvc2l0aW9uZWRHbHlwaHM7ZDxnLmxlbmd0aDtkKz0xKXt2YXIgbT1nW2RdO2lmKG0ucmVjdCl7dmFyIHY9bS5yZWN0fHx7fSx5PTQseD0hMCxiPTEsXz0wLHc9KGF8fGwpJiZtLnZlcnRpY2FsLFQ9bS5tZXRyaWNzLmFkdmFuY2UqbS5zY2FsZS8yO2lmKGwmJmUudmVydGljYWxpemFibGUmJihfPXAubGluZU9mZnNldC8yLShtLmltYWdlTmFtZT8tKDI0LW0ubWV0cmljcy53aWR0aCptLnNjYWxlKS8yOjI0KihtLnNjYWxlLTEpKSksbS5pbWFnZU5hbWUpe3ZhciBrPXNbbS5pbWFnZU5hbWVdO3g9ay5zZGYseT0xLyhiPWsucGl4ZWxSYXRpbyl9dmFyIE09YT9bbS54K1QsbS55XTpbMCwwXSxBPWE/WzAsMF06W20ueCtUK3JbMF0sbS55K3JbMV0tX10sUz1bMCwwXTt3JiYoUz1BLEE9WzAsMF0pO3ZhciBFPShtLm1ldHJpY3MubGVmdC15KSptLnNjYWxlLVQrQVswXSxDPSgtbS5tZXRyaWNzLnRvcC15KSptLnNjYWxlK0FbMV0sTD1FK3YudyptLnNjYWxlL2IsUD1DK3YuaCptLnNjYWxlL2IsST1uZXcgaShFLEMpLHo9bmV3IGkoTCxDKSxPPW5ldyBpKEUsUCksRD1uZXcgaShMLFApO2lmKHcpe3ZhciBSPW5ldyBpKC1ULFQtIC0xNyksRj0tTWF0aC5QSS8yLEI9MTItVCxOPW5ldyBpKDIyLUIsLShtLmltYWdlTmFtZT9COjApKSxqPW5ldyhGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShpLFtudWxsXS5jb25jYXQoUykpKTtJLl9yb3RhdGVBcm91bmQoRixSKS5fYWRkKE4pLl9hZGQoaiksei5fcm90YXRlQXJvdW5kKEYsUikuX2FkZChOKS5fYWRkKGopLE8uX3JvdGF0ZUFyb3VuZChGLFIpLl9hZGQoTikuX2FkZChqKSxELl9yb3RhdGVBcm91bmQoRixSKS5fYWRkKE4pLl9hZGQoail9aWYoYyl7dmFyIFU9TWF0aC5zaW4oYyksVj1NYXRoLmNvcyhjKSxxPVtWLC1VLFUsVl07SS5fbWF0TXVsdChxKSx6Ll9tYXRNdWx0KHEpLE8uX21hdE11bHQocSksRC5fbWF0TXVsdChxKX12YXIgSD1uZXcgaSgwLDApLEc9bmV3IGkoMCwwKTt1LnB1c2goe3RsOkksdHI6eixibDpPLGJyOkQsdGV4OnYsd3JpdGluZ01vZGU6ZS53cml0aW5nTW9kZSxnbHlwaE9mZnNldDpNLHNlY3Rpb25JbmRleDptLnNlY3Rpb25JbmRleCxpc1NERjp4LHBpeGVsT2Zmc2V0VEw6SCxwaXhlbE9mZnNldEJSOkcsbWluRm9udFNjYWxlWDowLG1pbkZvbnRTY2FsZVk6MH0pfX1yZXR1cm4gdX0oMCxyLGwsYSxvLHMsbix0LmFsbG93VmVydGljYWxQbGFjZW1lbnQpLHY9dC50ZXh0U2l6ZURhdGEseT1udWxsOyJzb3VyY2UiPT09di5raW5kPyh5PVsxMjgqYS5sYXlvdXQuZ2V0KCJ0ZXh0LXNpemUiKS5ldmFsdWF0ZShzLHt9KV0pWzBdPjMyNjQwJiZfKHQubGF5ZXJJZHNbMF0rJzogVmFsdWUgZm9yICJ0ZXh0LXNpemUiIGlzID49IDI1NS4gUmVkdWNlIHlvdXIgInRleHQtc2l6ZSIuJyk6ImNvbXBvc2l0ZSI9PT12LmtpbmQmJigoeT1bMTI4KmQuY29tcG9zaXRlVGV4dFNpemVzWzBdLmV2YWx1YXRlKHMse30sZyksMTI4KmQuY29tcG9zaXRlVGV4dFNpemVzWzFdLmV2YWx1YXRlKHMse30sZyldKVswXT4zMjY0MHx8eVsxXT4zMjY0MCkmJl8odC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgInRleHQtc2l6ZSIgaXMgPj0gMjU1LiBSZWR1Y2UgeW91ciAidGV4dC1zaXplIi4nKSx0LmFkZFN5bWJvbHModC50ZXh0LG0seSxsLG8scyx1LGUsYy5saW5lU3RhcnRJbmRleCxjLmxpbmVMZW5ndGgscCxnKTtmb3IodmFyIHg9MCxiPWg7eDxiLmxlbmd0aDt4Kz0xKWZbYlt4XV09dC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aC0xO3JldHVybiA0Km0ubGVuZ3RofWZ1bmN0aW9uIHJjKHQpe2Zvcih2YXIgZSBpbiB0KXJldHVybiB0W2VdO3JldHVybiBudWxsfWZ1bmN0aW9uIG5jKHQsZSxyLG4pe3ZhciBpPXQuY29tcGFyZVRleHQ7aWYoZSBpbiBpKXtmb3IodmFyIGE9aVtlXSxvPWEubGVuZ3RoLTE7bz49MDtvLS0paWYobi5kaXN0KGFbb10pPHIpcmV0dXJuITB9ZWxzZSBpW2VdPVtdO3JldHVybiBpW2VdLnB1c2gobiksITF9dmFyIGljPWdzLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLGFjPVt7bmFtZToiYV9mYWRlX29wYWNpdHkiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50OCIsb2Zmc2V0OjB9XTtmdW5jdGlvbiBvYyh0LGUscixuLGksYSxvLHMsbCxjLHUsaCxmKXt2YXIgcD1zP01hdGgubWluKDMyNjQwLE1hdGgucm91bmQoc1swXSkpOjAsZD1zP01hdGgubWluKDMyNjQwLE1hdGgucm91bmQoc1sxXSkpOjA7dC5lbXBsYWNlQmFjayhlLHIsTWF0aC5yb3VuZCgzMipuKSxNYXRoLnJvdW5kKDMyKmkpLGEsbywocDw8MSkrKGw/MTowKSxkLDE2KmMsMTYqdSwyNTYqaCwyNTYqZil9ZnVuY3Rpb24gc2ModCxlLHIpe3QuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKX1mdW5jdGlvbiBsYyh0KXtmb3IodmFyIGU9MCxyPXQuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKWlmKFpuKHJbZV0udGV4dCkpcmV0dXJuITA7cmV0dXJuITF9dmFyIGNjPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IExpLHRoaXMuaW5kZXhBcnJheT1uZXcgRmksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9dCx0aGlzLnNlZ21lbnRzPW5ldyBpYSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheT1uZXcgUGksdGhpcy5vcGFjaXR5VmVydGV4QXJyYXk9bmV3IElpLHRoaXMucGxhY2VkU3ltYm9sQXJyYXk9bmV3IEppfTtjYy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgmJjA9PT10aGlzLmluZGV4QXJyYXkubGVuZ3RoJiYwPT09dGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoJiYwPT09dGhpcy5vcGFjaXR5VmVydGV4QXJyYXkubGVuZ3RofSxjYy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuaXNFbXB0eSgpfHwociYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksRHMubWVtYmVycyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSxlKSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksUnMubWVtYmVycywhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMub3BhY2l0eVZlcnRleEFycmF5LGFjLCEwKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuaXRlbVNpemU9MSksKHJ8fG4pJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCkpfSxjYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlci5kZXN0cm95KCkpfSxEbigiU3ltYm9sQnVmZmVycyIsY2MpO3ZhciB1Yz1mdW5jdGlvbih0LGUscil7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgdCx0aGlzLmxheW91dEF0dHJpYnV0ZXM9ZSx0aGlzLmluZGV4QXJyYXk9bmV3IHIsdGhpcy5zZWdtZW50cz1uZXcgaWEsdGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheT1uZXcgUml9O3VjLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmxheW91dEF0dHJpYnV0ZXMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXksRnMubWVtYmVycywhMCl9LHVjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIuZGVzdHJveSgpKX0sRG4oIkNvbGxpc2lvbkJ1ZmZlcnMiLHVjKTt2YXIgaGM9ZnVuY3Rpb24odCl7dGhpcy5jb2xsaXNpb25Cb3hBcnJheT10LmNvbGxpc2lvbkJveEFycmF5LHRoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyx0aGlzLnNvdXJjZUxheWVySW5kZXg9dC5zb3VyY2VMYXllckluZGV4LHRoaXMuaGFzUGF0dGVybj0hMSx0aGlzLmhhc1JUTFRleHQ9ITEsdGhpcy5zb3J0S2V5UmFuZ2VzPVtdLHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXk9W10sdGhpcy5wbGFjZW1lbnRJbnZQcm9qTWF0cml4PWVvKFtdKSx0aGlzLnBsYWNlbWVudFZpZXdwb3J0TWF0cml4PWVvKFtdKTt2YXIgZT10aGlzLmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlczt0aGlzLnRleHRTaXplRGF0YT1MbCh0aGlzLnpvb20sZVsidGV4dC1zaXplIl0pLHRoaXMuaWNvblNpemVEYXRhPUxsKHRoaXMuem9vbSxlWyJpY29uLXNpemUiXSk7dmFyIHI9dGhpcy5sYXllcnNbMF0ubGF5b3V0LG49ci5nZXQoInN5bWJvbC1zb3J0LWtleSIpLGk9ci5nZXQoInN5bWJvbC16LW9yZGVyIik7dGhpcy5zb3J0RmVhdHVyZXNCeUtleT0idmlld3BvcnQteSIhPT1pJiZ2b2lkIDAhPT1uLmNvbnN0YW50T3IoMSksdGhpcy5zb3J0RmVhdHVyZXNCeVk9KCJ2aWV3cG9ydC15Ij09PWl8fCJhdXRvIj09PWkmJiF0aGlzLnNvcnRGZWF0dXJlc0J5S2V5KSYmKHIuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKXx8ci5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpfHxyLmdldCgidGV4dC1pZ25vcmUtcGxhY2VtZW50Iil8fHIuZ2V0KCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiKSksInBvaW50Ij09PXIuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikmJih0aGlzLndyaXRpbmdNb2Rlcz1yLmdldCgidGV4dC13cml0aW5nLW1vZGUiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBnbFt0XX0pKSksdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5zb3VyY2VJRD10LnNvdXJjZUlEfTtoYy5wcm90b3R5cGUuY3JlYXRlQXJyYXlzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PW5ldyBjYyhuZXcgUGEoRHMubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sKGZ1bmN0aW9uKHQpe3JldHVybi9edGV4dC8udGVzdCh0KX0pKSksdGhpcy5pY29uPW5ldyBjYyhuZXcgUGEoRHMubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sKGZ1bmN0aW9uKHQpe3JldHVybi9eaWNvbi8udGVzdCh0KX0pKSksdGhpcy5nbHlwaE9mZnNldEFycmF5PW5ldyAkaSx0aGlzLmxpbmVWZXJ0ZXhBcnJheT1uZXcgdGEsdGhpcy5zeW1ib2xJbnN0YW5jZXM9bmV3IFFpfSxoYy5wcm90b3R5cGUuY2FsY3VsYXRlR2x5cGhEZXBlbmRlbmNpZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihlW3QuY2hhckNvZGVBdChhKV09ITAsKHJ8fG4pJiZpKXt2YXIgbz1Vc1t0LmNoYXJBdChhKV07byYmKGVbby5jaGFyQ29kZUF0KDApXT0hMCl9fSxoYy5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGF5ZXJzWzBdLGk9bi5sYXlvdXQsYT1pLmdldCgidGV4dC1mb250Iiksbz1pLmdldCgidGV4dC1maWVsZCIpLHM9aS5nZXQoImljb24taW1hZ2UiKSxsPSgiY29uc3RhbnQiIT09by52YWx1ZS5raW5kfHxvLnZhbHVlLnZhbHVlIGluc3RhbmNlb2YgdGUmJiFvLnZhbHVlLnZhbHVlLmlzRW1wdHkoKXx8by52YWx1ZS52YWx1ZS50b1N0cmluZygpLmxlbmd0aD4wKSYmKCJjb25zdGFudCIhPT1hLnZhbHVlLmtpbmR8fGEudmFsdWUudmFsdWUubGVuZ3RoPjApLGM9ImNvbnN0YW50IiE9PXMudmFsdWUua2luZHx8ISFzLnZhbHVlLnZhbHVlfHxPYmplY3Qua2V5cyhzLnBhcmFtZXRlcnMpLmxlbmd0aD4wLHU9aS5nZXQoInN5bWJvbC1zb3J0LWtleSIpO2lmKHRoaXMuZmVhdHVyZXM9W10sbHx8Yyl7Zm9yKHZhciBoPWUuaWNvbkRlcGVuZGVuY2llcyxmPWUuZ2x5cGhEZXBlbmRlbmNpZXMscD1lLmF2YWlsYWJsZUltYWdlcyxkPW5ldyBpaSh0aGlzLnpvb20pLGc9MCxtPXQ7ZzxtLmxlbmd0aDtnKz0xKXt2YXIgdj1tW2ddLHk9di5mZWF0dXJlLHg9di5pZCxiPXYuaW5kZXgsXz12LnNvdXJjZUxheWVySW5kZXgsdz1uLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxUPXt0eXBlOnkudHlwZSxpZDp4LHByb3BlcnRpZXM6eS5wcm9wZXJ0aWVzLGdlb21ldHJ5Onc/RGEoeSk6W119O2lmKG4uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKGQsVCxyKSl7d3x8KFQuZ2VvbWV0cnk9RGEoeSkpO3ZhciBrPXZvaWQgMDtpZihsKXt2YXIgTT1uLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygidGV4dC1maWVsZCIsVCxyLHApLEE9dGUuZmFjdG9yeShNKTtsYyhBKSYmKHRoaXMuaGFzUlRMVGV4dD0hMCksKCF0aGlzLmhhc1JUTFRleHR8fCJ1bmF2YWlsYWJsZSI9PT1laSgpfHx0aGlzLmhhc1JUTFRleHQmJm5pLmlzUGFyc2VkKCkpJiYoaz1qcyhBLG4sVCkpfXZhciBTPXZvaWQgMDtpZihjKXt2YXIgRT1uLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygiaWNvbi1pbWFnZSIsVCxyLHApO1M9RSBpbnN0YW5jZW9mIGVlP0U6ZWUuZnJvbVN0cmluZyhFKX1pZihrfHxTKXt2YXIgQz10aGlzLnNvcnRGZWF0dXJlc0J5S2V5P3UuZXZhbHVhdGUoVCx7fSxyKTp2b2lkIDAsTD17aWQ6eCx0ZXh0OmssaWNvbjpTLGluZGV4OmIsc291cmNlTGF5ZXJJbmRleDpfLGdlb21ldHJ5OkRhKHkpLHByb3BlcnRpZXM6eS5wcm9wZXJ0aWVzLHR5cGU6aWNbeS50eXBlXSxzb3J0S2V5OkN9O2lmKHRoaXMuZmVhdHVyZXMucHVzaChMKSxTJiYoaFtTLm5hbWVdPSEwKSxrKXt2YXIgUD1hLmV2YWx1YXRlKFQse30scikuam9pbigiLCIpLEk9Im1hcCI9PT1pLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmInBvaW50IiE9PWkuZ2V0KCJzeW1ib2wtcGxhY2VtZW50Iik7dGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50PXRoaXMud3JpdGluZ01vZGVzJiZ0aGlzLndyaXRpbmdNb2Rlcy5pbmRleE9mKGdsLnZlcnRpY2FsKT49MDtmb3IodmFyIHo9MCxPPWsuc2VjdGlvbnM7ejxPLmxlbmd0aDt6Kz0xKXt2YXIgRD1PW3pdO2lmKEQuaW1hZ2UpaFtELmltYWdlLm5hbWVdPSEwO2Vsc2V7dmFyIFI9cW4oay50b1N0cmluZygpKSxGPUQuZm9udFN0YWNrfHxQLEI9ZltGXT1mW0ZdfHx7fTt0aGlzLmNhbGN1bGF0ZUdseXBoRGVwZW5kZW5jaWVzKEQudGV4dCxCLEksdGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50LFIpfX19fX19ImxpbmUiPT09aS5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSYmKHRoaXMuZmVhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj17fSxuPVtdLGk9MDtmdW5jdGlvbiBhKGUpe24ucHVzaCh0W2VdKSxpKyt9ZnVuY3Rpb24gbyh0LGUsaSl7dmFyIGE9clt0XTtyZXR1cm4gZGVsZXRlIHJbdF0scltlXT1hLG5bYV0uZ2VvbWV0cnlbMF0ucG9wKCksblthXS5nZW9tZXRyeVswXT1uW2FdLmdlb21ldHJ5WzBdLmNvbmNhdChpWzBdKSxhfWZ1bmN0aW9uIHModCxyLGkpe3ZhciBhPWVbcl07cmV0dXJuIGRlbGV0ZSBlW3JdLGVbdF09YSxuW2FdLmdlb21ldHJ5WzBdLnNoaWZ0KCksblthXS5nZW9tZXRyeVswXT1pWzBdLmNvbmNhdChuW2FdLmdlb21ldHJ5WzBdKSxhfWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuPXI/ZVswXVtlWzBdLmxlbmd0aC0xXTplWzBdWzBdO3JldHVybiB0KyI6IituLngrIjoiK24ueX1mb3IodmFyIGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIHU9dFtjXSxoPXUuZ2VvbWV0cnksZj11LnRleHQ/dS50ZXh0LnRvU3RyaW5nKCk6bnVsbDtpZihmKXt2YXIgcD1sKGYsaCksZD1sKGYsaCwhMCk7aWYocCBpbiByJiZkIGluIGUmJnJbcF0hPT1lW2RdKXt2YXIgZz1zKHAsZCxoKSxtPW8ocCxkLG5bZ10uZ2VvbWV0cnkpO2RlbGV0ZSBlW3BdLGRlbGV0ZSByW2RdLHJbbChmLG5bbV0uZ2VvbWV0cnksITApXT1tLG5bZ10uZ2VvbWV0cnk9bnVsbH1lbHNlIHAgaW4gcj9vKHAsZCxoKTpkIGluIGU/cyhwLGQsaCk6KGEoYyksZVtwXT1pLTEscltkXT1pLTEpfWVsc2UgYShjKX1yZXR1cm4gbi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdlb21ldHJ5fSkpfSh0aGlzLmZlYXR1cmVzKSksdGhpcy5zb3J0RmVhdHVyZXNCeUtleSYmdGhpcy5mZWF0dXJlcy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpfX0saGMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJih0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLmxheWVycyxyKSx0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLmxheWVycyxyKSl9LGhjLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGgmJiF0aGlzLmhhc1JUTFRleHR9LGhjLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMudGV4dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR8fHRoaXMuaWNvbi5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR9LGhjLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7IXRoaXMudXBsb2FkZWQmJnRoaXMuaGFzRGVidWdEYXRhKCkmJih0aGlzLnRleHRDb2xsaXNpb25Cb3gudXBsb2FkKHQpLHRoaXMuaWNvbkNvbGxpc2lvbkJveC51cGxvYWQodCkpLHRoaXMudGV4dC51cGxvYWQodCx0aGlzLnNvcnRGZWF0dXJlc0J5WSwhdGhpcy51cGxvYWRlZCx0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkKSx0aGlzLmljb24udXBsb2FkKHQsdGhpcy5zb3J0RmVhdHVyZXNCeVksIXRoaXMudXBsb2FkZWQsdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCksdGhpcy51cGxvYWRlZD0hMH0saGMucHJvdG90eXBlLmRlc3Ryb3lEZWJ1Z0RhdGE9ZnVuY3Rpb24oKXt0aGlzLnRleHRDb2xsaXNpb25Cb3guZGVzdHJveSgpLHRoaXMuaWNvbkNvbGxpc2lvbkJveC5kZXN0cm95KCl9LGhjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy50ZXh0LmRlc3Ryb3koKSx0aGlzLmljb24uZGVzdHJveSgpLHRoaXMuaGFzRGVidWdEYXRhKCkmJnRoaXMuZGVzdHJveURlYnVnRGF0YSgpfSxoYy5wcm90b3R5cGUuYWRkVG9MaW5lVmVydGV4QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGg7aWYodm9pZCAwIT09dC5zZWdtZW50KXtmb3IodmFyIG49dC5kaXN0KGVbdC5zZWdtZW50KzFdKSxpPXQuZGlzdChlW3Quc2VnbWVudF0pLGE9e30sbz10LnNlZ21lbnQrMTtvPGUubGVuZ3RoO28rKylhW29dPXt4OmVbb10ueCx5OmVbb10ueSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjpufSxvPGUubGVuZ3RoLTEmJihuKz1lW28rMV0uZGlzdChlW29dKSk7Zm9yKHZhciBzPXQuc2VnbWVudHx8MDtzPj0wO3MtLSlhW3NdPXt4OmVbc10ueCx5OmVbc10ueSx0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcjppfSxzPjAmJihpKz1lW3MtMV0uZGlzdChlW3NdKSk7Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBjPWFbbF07dGhpcy5saW5lVmVydGV4QXJyYXkuZW1wbGFjZUJhY2soYy54LGMueSxjLnRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKX19cmV0dXJue2xpbmVTdGFydEluZGV4OnIsbGluZUxlbmd0aDp0aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGgtcn19LGhjLnByb3RvdHlwZS5hZGRTeW1ib2xzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoKXtmb3IodmFyIGY9dC5pbmRleEFycmF5LHA9dC5sYXlvdXRWZXJ0ZXhBcnJheSxkPXQuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCplLmxlbmd0aCxwLGYsYS5zb3J0S2V5KSxnPXRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGgsbT1kLnZlcnRleExlbmd0aCx2PXRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmbz09PWdsLnZlcnRpY2FsP01hdGguUEkvMjowLHk9YS50ZXh0JiZhLnRleHQuc2VjdGlvbnMseD0wO3g8ZS5sZW5ndGg7eCsrKXt2YXIgYj1lW3hdLF89Yi50bCx3PWIudHIsVD1iLmJsLGs9Yi5icixNPWIudGV4LEE9Yi5waXhlbE9mZnNldFRMLFM9Yi5waXhlbE9mZnNldEJSLEU9Yi5taW5Gb250U2NhbGVYLEM9Yi5taW5Gb250U2NhbGVZLEw9Yi5nbHlwaE9mZnNldCxQPWIuaXNTREYsST1iLnNlY3Rpb25JbmRleCx6PWQudmVydGV4TGVuZ3RoLE89TFsxXTtvYyhwLHMueCxzLnksXy54LE8rXy55LE0ueCxNLnkscixQLEEueCxBLnksRSxDKSxvYyhwLHMueCxzLnksdy54LE8rdy55LE0ueCtNLncsTS55LHIsUCxTLngsQS55LEUsQyksb2MocCxzLngscy55LFQueCxPK1QueSxNLngsTS55K00uaCxyLFAsQS54LFMueSxFLEMpLG9jKHAscy54LHMueSxrLngsTytrLnksTS54K00udyxNLnkrTS5oLHIsUCxTLngsUy55LEUsQyksc2ModC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXkscyx2KSxmLmVtcGxhY2VCYWNrKHoseisxLHorMiksZi5lbXBsYWNlQmFjayh6KzEseisyLHorMyksZC52ZXJ0ZXhMZW5ndGgrPTQsZC5wcmltaXRpdmVMZW5ndGgrPTIsdGhpcy5nbHlwaE9mZnNldEFycmF5LmVtcGxhY2VCYWNrKExbMF0pLHghPT1lLmxlbmd0aC0xJiZJPT09ZVt4KzFdLnNlY3Rpb25JbmRleHx8dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyhwLmxlbmd0aCxhLGEuaW5kZXgse30saCx5JiZ5W0ldKX10LnBsYWNlZFN5bWJvbEFycmF5LmVtcGxhY2VCYWNrKHMueCxzLnksZyx0aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLWcsbSxsLGMscy5zZWdtZW50LHI/clswXTowLHI/clsxXTowLG5bMF0sblsxXSxvLDAsITEsMCx1KX0saGMucHJvdG90eXBlLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIGUuZW1wbGFjZUJhY2soMCwwKSx0LmVtcGxhY2VCYWNrKHIueCxyLnksbixpLE1hdGgucm91bmQoYS54KSxNYXRoLnJvdW5kKGEueSkpfSxoYy5wcm90b3R5cGUuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcz1mdW5jdGlvbih0LGUscixuLGEsbyxzKXt2YXIgbD1hLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsYS5sYXlvdXRWZXJ0ZXhBcnJheSxhLmluZGV4QXJyYXkpLGM9bC52ZXJ0ZXhMZW5ndGgsdT1hLmxheW91dFZlcnRleEFycmF5LGg9YS5jb2xsaXNpb25WZXJ0ZXhBcnJheSxmPXMuYW5jaG9yWCxwPXMuYW5jaG9yWTt0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleCh1LGgsbyxmLHAsbmV3IGkodCxlKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgodSxoLG8sZixwLG5ldyBpKHIsZSkpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KHUsaCxvLGYscCxuZXcgaShyLG4pKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleCh1LGgsbyxmLHAsbmV3IGkodCxuKSksbC52ZXJ0ZXhMZW5ndGgrPTQ7dmFyIGQ9YS5pbmRleEFycmF5O2QuZW1wbGFjZUJhY2soYyxjKzEpLGQuZW1wbGFjZUJhY2soYysxLGMrMiksZC5lbXBsYWNlQmFjayhjKzIsYyszKSxkLmVtcGxhY2VCYWNrKGMrMyxjKSxsLnByaW1pdGl2ZUxlbmd0aCs9NH0saGMucHJvdG90eXBlLmFkZERlYnVnQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPXQ7aTxlO2krKyl7dmFyIGE9dGhpcy5jb2xsaXNpb25Cb3hBcnJheS5nZXQoaSk7dGhpcy5hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRpY2VzKGEueDEsYS55MSxhLngyLGEueTIsbj90aGlzLnRleHRDb2xsaXNpb25Cb3g6dGhpcy5pY29uQ29sbGlzaW9uQm94LGEuYW5jaG9yUG9pbnQscil9fSxoYy5wcm90b3R5cGUuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnM9ZnVuY3Rpb24oKXt0aGlzLmhhc0RlYnVnRGF0YSgpJiZ0aGlzLmRlc3Ryb3lEZWJ1Z0RhdGEoKSx0aGlzLnRleHRDb2xsaXNpb25Cb3g9bmV3IHVjKE9pLEJzLm1lbWJlcnMscWkpLHRoaXMuaWNvbkNvbGxpc2lvbkJveD1uZXcgdWMoT2ksQnMubWVtYmVycyxxaSk7Zm9yKHZhciB0PTA7dDx0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7dCsrKXt2YXIgZT10aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQodCk7dGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKGUudGV4dEJveFN0YXJ0SW5kZXgsZS50ZXh0Qm94RW5kSW5kZXgsZSwhMCksdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKGUudmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCxlLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LGUsITApLHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhlLmljb25Cb3hTdGFydEluZGV4LGUuaWNvbkJveEVuZEluZGV4LGUsITEpLHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhlLnZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgsZS52ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCxlLCExKX19LGhjLnByb3RvdHlwZS5fZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlc0ZvclN5bWJvbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7Zm9yKHZhciBjPXt9LHU9ZTt1PHI7dSsrKXt2YXIgaD10LmdldCh1KTtjLnRleHRCb3g9e3gxOmgueDEseTE6aC55MSx4MjpoLngyLHkyOmgueTIsYW5jaG9yUG9pbnRYOmguYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTpoLmFuY2hvclBvaW50WX0sYy50ZXh0RmVhdHVyZUluZGV4PWguZmVhdHVyZUluZGV4O2JyZWFrfWZvcih2YXIgZj1uO2Y8aTtmKyspe3ZhciBwPXQuZ2V0KGYpO2MudmVydGljYWxUZXh0Qm94PXt4MTpwLngxLHkxOnAueTEseDI6cC54Mix5MjpwLnkyLGFuY2hvclBvaW50WDpwLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6cC5hbmNob3JQb2ludFl9LGMudmVydGljYWxUZXh0RmVhdHVyZUluZGV4PXAuZmVhdHVyZUluZGV4O2JyZWFrfWZvcih2YXIgZD1hO2Q8bztkKyspe3ZhciBnPXQuZ2V0KGQpO2MuaWNvbkJveD17eDE6Zy54MSx5MTpnLnkxLHgyOmcueDIseTI6Zy55MixhbmNob3JQb2ludFg6Zy5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOmcuYW5jaG9yUG9pbnRZfSxjLmljb25GZWF0dXJlSW5kZXg9Zy5mZWF0dXJlSW5kZXg7YnJlYWt9Zm9yKHZhciBtPXM7bTxsO20rKyl7dmFyIHY9dC5nZXQobSk7Yy52ZXJ0aWNhbEljb25Cb3g9e3gxOnYueDEseTE6di55MSx4Mjp2LngyLHkyOnYueTIsYW5jaG9yUG9pbnRYOnYuYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTp2LmFuY2hvclBvaW50WX0sYy52ZXJ0aWNhbEljb25GZWF0dXJlSW5kZXg9di5mZWF0dXJlSW5kZXg7YnJlYWt9cmV0dXJuIGN9LGhjLnByb3RvdHlwZS5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzPWZ1bmN0aW9uKHQpe3RoaXMuY29sbGlzaW9uQXJyYXlzPVtdO2Zvcih2YXIgZT0wO2U8dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KGUpO3RoaXMuY29sbGlzaW9uQXJyYXlzLnB1c2godGhpcy5fZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlc0ZvclN5bWJvbCh0LHIudGV4dEJveFN0YXJ0SW5kZXgsci50ZXh0Qm94RW5kSW5kZXgsci52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LHIudmVydGljYWxUZXh0Qm94RW5kSW5kZXgsci5pY29uQm94U3RhcnRJbmRleCxyLmljb25Cb3hFbmRJbmRleCxyLnZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgsci52ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCkpfX0saGMucHJvdG90eXBlLmhhc1RleHREYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0saGMucHJvdG90eXBlLmhhc0ljb25EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0saGMucHJvdG90eXBlLmhhc0RlYnVnRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHRDb2xsaXNpb25Cb3gmJnRoaXMuaWNvbkNvbGxpc2lvbkJveH0saGMucHJvdG90eXBlLmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzRGVidWdEYXRhKCkmJnRoaXMudGV4dENvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0saGMucHJvdG90eXBlLmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzRGVidWdEYXRhKCkmJnRoaXMuaWNvbkNvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0saGMucHJvdG90eXBlLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2w9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoZSksbj1yLnZlcnRleFN0YXJ0SW5kZXgrNCpyLm51bUdseXBocyxpPXIudmVydGV4U3RhcnRJbmRleDtpPG47aSs9NCl0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaSxpKzEsaSsyKSx0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaSsxLGkrMixpKzMpfSxoYy5wcm90b3R5cGUuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcz1mdW5jdGlvbih0KXtpZih0aGlzLnNvcnRlZEFuZ2xlPT09dCYmdm9pZCAwIT09dGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXMpcmV0dXJuIHRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzO2Zvcih2YXIgZT1NYXRoLnNpbih0KSxyPU1hdGguY29zKHQpLG49W10saT1bXSxhPVtdLG89MDtvPHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsrK28pe2EucHVzaChvKTt2YXIgcz10aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQobyk7bi5wdXNoKDB8TWF0aC5yb3VuZChlKnMuYW5jaG9yWCtyKnMuYW5jaG9yWSkpLGkucHVzaChzLmZlYXR1cmVJbmRleCl9cmV0dXJuIGEuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gblt0XS1uW2VdfHxpW2VdLWlbdF19KSksYX0saGMucHJvdG90eXBlLmFkZFRvU29ydEtleVJhbmdlcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc29ydEtleVJhbmdlc1t0aGlzLnNvcnRLZXlSYW5nZXMubGVuZ3RoLTFdO3ImJnIuc29ydEtleT09PWU/ci5zeW1ib2xJbnN0YW5jZUVuZD10KzE6dGhpcy5zb3J0S2V5UmFuZ2VzLnB1c2goe3NvcnRLZXk6ZSxzeW1ib2xJbnN0YW5jZVN0YXJ0OnQsc3ltYm9sSW5zdGFuY2VFbmQ6dCsxfSl9LGhjLnByb3RvdHlwZS5zb3J0RmVhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLnNvcnRGZWF0dXJlc0J5WSYmdGhpcy5zb3J0ZWRBbmdsZSE9PXQmJiEodGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4xfHx0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjEpKXt0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcz10aGlzLmdldFNvcnRlZFN5bWJvbEluZGV4ZXModCksdGhpcy5zb3J0ZWRBbmdsZT10LHRoaXMudGV4dC5pbmRleEFycmF5LmNsZWFyKCksdGhpcy5pY29uLmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmZlYXR1cmVTb3J0T3JkZXI9W107Zm9yKHZhciByPTAsbj10aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcztyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChuW3JdKTt0aGlzLmZlYXR1cmVTb3J0T3JkZXIucHVzaChpLmZlYXR1cmVJbmRleCksW2kucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsaS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsaS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XS5mb3JFYWNoKChmdW5jdGlvbih0LHIsbil7dD49MCYmbi5pbmRleE9mKHQpPT09ciYmZS5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKGUudGV4dCx0KX0pKSxpLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy50ZXh0LGkudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLGkucGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy5pY29uLGkucGxhY2VkSWNvblN5bWJvbEluZGV4KSxpLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy5pY29uLGkudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgpfXRoaXMudGV4dC5pbmRleEJ1ZmZlciYmdGhpcy50ZXh0LmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy50ZXh0LmluZGV4QXJyYXkpLHRoaXMuaWNvbi5pbmRleEJ1ZmZlciYmdGhpcy5pY29uLmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5pY29uLmluZGV4QXJyYXkpfX0sRG4oIlN5bWJvbEJ1Y2tldCIsaGMse29taXQ6WyJsYXllcnMiLCJjb2xsaXNpb25Cb3hBcnJheSIsImZlYXR1cmVzIiwiY29tcGFyZVRleHQiXX0pLGhjLk1BWF9HTFlQSFM9NjU1MzUsaGMuYWRkRHluYW1pY0F0dHJpYnV0ZXM9c2M7dmFyIGZjPW5ldyB5aSh7InN5bWJvbC1wbGFjZW1lbnQiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtcGxhY2VtZW50Il0pLCJzeW1ib2wtc3BhY2luZyI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbInN5bWJvbC1zcGFjaW5nIl0pLCJzeW1ib2wtYXZvaWQtZWRnZXMiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtYXZvaWQtZWRnZXMiXSksInN5bWJvbC1zb3J0LWtleSI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbInN5bWJvbC1zb3J0LWtleSJdKSwic3ltYm9sLXotb3JkZXIiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtei1vcmRlciJdKSwiaWNvbi1hbGxvdy1vdmVybGFwIjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsiaWNvbi1hbGxvdy1vdmVybGFwIl0pLCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLWlnbm9yZS1wbGFjZW1lbnQiXSksImljb24tb3B0aW9uYWwiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLW9wdGlvbmFsIl0pLCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbImljb24tcm90YXRpb24tYWxpZ25tZW50Il0pLCJpY29uLXNpemUiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLXNpemUiXSksImljb24tdGV4dC1maXQiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0Il0pLCJpY29uLXRleHQtZml0LXBhZGRpbmciOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0LXBhZGRpbmciXSksImljb24taW1hZ2UiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLWltYWdlIl0pLCJpY29uLXJvdGF0ZSI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbImljb24tcm90YXRlIl0pLCJpY29uLXBhZGRpbmciOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJpY29uLXBhZGRpbmciXSksImljb24ta2VlcC11cHJpZ2h0IjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsiaWNvbi1rZWVwLXVwcmlnaHQiXSksImljb24tb2Zmc2V0IjpuZXcgZGkoQXQubGF5b3V0X3N5bWJvbFsiaWNvbi1vZmZzZXQiXSksImljb24tYW5jaG9yIjpuZXcgZGkoQXQubGF5b3V0X3N5bWJvbFsiaWNvbi1hbmNob3IiXSksImljb24tcGl0Y2gtYWxpZ25tZW50IjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsiaWNvbi1waXRjaC1hbGlnbm1lbnQiXSksInRleHQtcGl0Y2gtYWxpZ25tZW50IjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsidGV4dC1waXRjaC1hbGlnbm1lbnQiXSksInRleHQtcm90YXRpb24tYWxpZ25tZW50IjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXSksInRleHQtZmllbGQiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWZpZWxkIl0pLCJ0ZXh0LWZvbnQiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWZvbnQiXSksInRleHQtc2l6ZSI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbInRleHQtc2l6ZSJdKSwidGV4dC1tYXgtd2lkdGgiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW1heC13aWR0aCJdKSwidGV4dC1saW5lLWhlaWdodCI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbInRleHQtbGluZS1oZWlnaHQiXSksInRleHQtbGV0dGVyLXNwYWNpbmciOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWxldHRlci1zcGFjaW5nIl0pLCJ0ZXh0LWp1c3RpZnkiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWp1c3RpZnkiXSksInRleHQtcmFkaWFsLW9mZnNldCI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbInRleHQtcmFkaWFsLW9mZnNldCJdKSwidGV4dC12YXJpYWJsZS1hbmNob3IiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXZhcmlhYmxlLWFuY2hvciJdKSwidGV4dC1hbmNob3IiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWFuY2hvciJdKSwidGV4dC1tYXgtYW5nbGUiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW1heC1hbmdsZSJdKSwidGV4dC13cml0aW5nLW1vZGUiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXdyaXRpbmctbW9kZSJdKSwidGV4dC1yb3RhdGUiOm5ldyBkaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXJvdGF0ZSJdKSwidGV4dC1wYWRkaW5nIjpuZXcgcGkoQXQubGF5b3V0X3N5bWJvbFsidGV4dC1wYWRkaW5nIl0pLCJ0ZXh0LWtlZXAtdXByaWdodCI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbInRleHQta2VlcC11cHJpZ2h0Il0pLCJ0ZXh0LXRyYW5zZm9ybSI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbInRleHQtdHJhbnNmb3JtIl0pLCJ0ZXh0LW9mZnNldCI6bmV3IGRpKEF0LmxheW91dF9zeW1ib2xbInRleHQtb2Zmc2V0Il0pLCJ0ZXh0LWFsbG93LW92ZXJsYXAiOm5ldyBwaShBdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWFsbG93LW92ZXJsYXAiXSksInRleHQtaWdub3JlLXBsYWNlbWVudCI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbInRleHQtaWdub3JlLXBsYWNlbWVudCJdKSwidGV4dC1vcHRpb25hbCI6bmV3IHBpKEF0LmxheW91dF9zeW1ib2xbInRleHQtb3B0aW9uYWwiXSl9KSxwYz17cGFpbnQ6bmV3IHlpKHsiaWNvbi1vcGFjaXR5IjpuZXcgZGkoQXQucGFpbnRfc3ltYm9sWyJpY29uLW9wYWNpdHkiXSksImljb24tY29sb3IiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbImljb24tY29sb3IiXSksImljb24taGFsby1jb2xvciI6bmV3IGRpKEF0LnBhaW50X3N5bWJvbFsiaWNvbi1oYWxvLWNvbG9yIl0pLCJpY29uLWhhbG8td2lkdGgiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbImljb24taGFsby13aWR0aCJdKSwiaWNvbi1oYWxvLWJsdXIiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbImljb24taGFsby1ibHVyIl0pLCJpY29uLXRyYW5zbGF0ZSI6bmV3IHBpKEF0LnBhaW50X3N5bWJvbFsiaWNvbi10cmFuc2xhdGUiXSksImljb24tdHJhbnNsYXRlLWFuY2hvciI6bmV3IHBpKEF0LnBhaW50X3N5bWJvbFsiaWNvbi10cmFuc2xhdGUtYW5jaG9yIl0pLCJ0ZXh0LW9wYWNpdHkiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbInRleHQtb3BhY2l0eSJdKSwidGV4dC1jb2xvciI6bmV3IGRpKEF0LnBhaW50X3N5bWJvbFsidGV4dC1jb2xvciJdLHtydW50aW1lVHlwZTpCdCxnZXRPdmVycmlkZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0Q29sb3J9LGhhc092ZXJyaWRlOmZ1bmN0aW9uKHQpe3JldHVybiEhdC50ZXh0Q29sb3J9fSksInRleHQtaGFsby1jb2xvciI6bmV3IGRpKEF0LnBhaW50X3N5bWJvbFsidGV4dC1oYWxvLWNvbG9yIl0pLCJ0ZXh0LWhhbG8td2lkdGgiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbInRleHQtaGFsby13aWR0aCJdKSwidGV4dC1oYWxvLWJsdXIiOm5ldyBkaShBdC5wYWludF9zeW1ib2xbInRleHQtaGFsby1ibHVyIl0pLCJ0ZXh0LXRyYW5zbGF0ZSI6bmV3IHBpKEF0LnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUiXSksInRleHQtdHJhbnNsYXRlLWFuY2hvciI6bmV3IHBpKEF0LnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUtYW5jaG9yIl0pfSksbGF5b3V0OmZjfSxkYz1mdW5jdGlvbih0KXt0aGlzLnR5cGU9dC5wcm9wZXJ0eS5vdmVycmlkZXM/dC5wcm9wZXJ0eS5vdmVycmlkZXMucnVudGltZVR5cGU6T3QsdGhpcy5kZWZhdWx0VmFsdWU9dH07ZGMucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2lmKHQuZm9ybWF0dGVkU2VjdGlvbil7dmFyIGU9dGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkub3ZlcnJpZGVzO2lmKGUmJmUuaGFzT3ZlcnJpZGUodC5mb3JtYXR0ZWRTZWN0aW9uKSlyZXR1cm4gZS5nZXRPdmVycmlkZSh0LmZvcm1hdHRlZFNlY3Rpb24pfXJldHVybiB0LmZlYXR1cmUmJnQuZmVhdHVyZVN0YXRlP3RoaXMuZGVmYXVsdFZhbHVlLmV2YWx1YXRlKHQuZmVhdHVyZSx0LmZlYXR1cmVTdGF0ZSk6dGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi5kZWZhdWx0fSxkYy5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuZGVmYXVsdFZhbHVlLmlzQ29uc3RhbnQoKXx8dCh0aGlzLmRlZmF1bHRWYWx1ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pfSxkYy5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxkYy5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LERuKCJGb3JtYXRTZWN0aW9uT3ZlcnJpZGUiLGRjLHtvbWl0OlsiZGVmYXVsdFZhbHVlIl19KTt2YXIgZ2M9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHBjKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbihlLHIpe2lmKHQucHJvdG90eXBlLnJlY2FsY3VsYXRlLmNhbGwodGhpcyxlLHIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbImljb24tcm90YXRpb24tYWxpZ25tZW50Il09InBvaW50IiE9PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpPyJtYXAiOiJ2aWV3cG9ydCIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcm90YXRpb24tYWxpZ25tZW50Il09InBvaW50IiE9PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpPyJtYXAiOiJ2aWV3cG9ydCIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcGl0Y2gtYWxpZ25tZW50Il09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50IikmJih0aGlzLmxheW91dC5fdmFsdWVzWyJpY29uLXBpdGNoLWFsaWdubWVudCJdPXRoaXMubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSksInBvaW50Ij09PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpKXt2YXIgbj10aGlzLmxheW91dC5nZXQoInRleHQtd3JpdGluZy1tb2RlIik7aWYobil7Zm9yKHZhciBpPVtdLGE9MCxvPW47YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO2kuaW5kZXhPZihzKTwwJiZpLnB1c2gocyl9dGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC13cml0aW5nLW1vZGUiXT1pfWVsc2UgdGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC13cml0aW5nLW1vZGUiXT1bImhvcml6b250YWwiXX10aGlzLl9zZXRQYWludE92ZXJyaWRlcygpfSxlLnByb3RvdHlwZS5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sYXlvdXQuZ2V0KHQpLmV2YWx1YXRlKGUse30scixuKSxhPXRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXNbdF07cmV0dXJuIGEuaXNEYXRhRHJpdmVuKCl8fFZyKGEudmFsdWUpfHwhaT9pOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucmVwbGFjZSgveyhbXnt9XSspfS9nLChmdW5jdGlvbihlLHIpe3JldHVybiByIGluIHQ/U3RyaW5nKHRbcl0pOiIifSkpfShlLnByb3BlcnRpZXMsaSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGhjKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLl9zZXRQYWludE92ZXJyaWRlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9cGMucGFpbnQub3ZlcnJpZGFibGVQcm9wZXJ0aWVzO3Q8ci5sZW5ndGg7dCs9MSl7dmFyIG49clt0XTtpZihlLmhhc1BhaW50T3ZlcnJpZGUodGhpcy5sYXlvdXQsbikpe3ZhciBpLGE9dGhpcy5wYWludC5nZXQobiksbz1uZXcgZGMoYSkscz1uZXcgVXIobyxhLnByb3BlcnR5LnNwZWNpZmljYXRpb24pO2k9ImNvbnN0YW50Ij09PWEudmFsdWUua2luZHx8InNvdXJjZSI9PT1hLnZhbHVlLmtpbmQ/bmV3IEhyKCJzb3VyY2UiLHMpOm5ldyBHcigiY29tcG9zaXRlIixzLGEudmFsdWUuem9vbVN0b3BzLGEudmFsdWUuX2ludGVycG9sYXRpb25UeXBlKSx0aGlzLnBhaW50Ll92YWx1ZXNbbl09bmV3IGhpKGEucHJvcGVydHksaSxhLnBhcmFtZXRlcnMpfX19LGUucHJvdG90eXBlLl9oYW5kbGVPdmVycmlkYWJsZVBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCxyLG4pe3JldHVybiEoIXRoaXMubGF5b3V0fHxyLmlzRGF0YURyaXZlbigpfHxuLmlzRGF0YURyaXZlbigpKSYmZS5oYXNQYWludE92ZXJyaWRlKHRoaXMubGF5b3V0LHQpfSxlLmhhc1BhaW50T3ZlcnJpZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdldCgidGV4dC1maWVsZCIpLG49cGMucGFpbnQucHJvcGVydGllc1tlXSxpPSExLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZihuLm92ZXJyaWRlcyYmbi5vdmVycmlkZXMuaGFzT3ZlcnJpZGUocltlXSkpcmV0dXJuIHZvaWQoaT0hMCl9O2lmKCJjb25zdGFudCI9PT1yLnZhbHVlLmtpbmQmJnIudmFsdWUudmFsdWUgaW5zdGFuY2VvZiB0ZSlhKHIudmFsdWUudmFsdWUuc2VjdGlvbnMpO2Vsc2UgaWYoInNvdXJjZSI9PT1yLnZhbHVlLmtpbmQpe3ZhciBvPWZ1bmN0aW9uKHQpe2l8fCh0IGluc3RhbmNlb2Ygb2UmJmllKHQudmFsdWUpPT09VnQ/YSh0LnZhbHVlLnNlY3Rpb25zKTp0IGluc3RhbmNlb2YgdWU/YSh0LnNlY3Rpb25zKTp0LmVhY2hDaGlsZChvKSl9LHM9ci52YWx1ZTtzLl9zdHlsZUV4cHJlc3Npb24mJm8ocy5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pfXJldHVybiBpfSxlfSh4aSksbWM9e3BhaW50Om5ldyB5aSh7ImJhY2tncm91bmQtY29sb3IiOm5ldyBwaShBdC5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLWNvbG9yIl0pLCJiYWNrZ3JvdW5kLXBhdHRlcm4iOm5ldyBtaShBdC5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLXBhdHRlcm4iXSksImJhY2tncm91bmQtb3BhY2l0eSI6bmV3IHBpKEF0LnBhaW50X2JhY2tncm91bmRbImJhY2tncm91bmQtb3BhY2l0eSJdKX0pfSx2Yz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsbWMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGV9KHhpKSx5Yz17cGFpbnQ6bmV3IHlpKHsicmFzdGVyLW9wYWNpdHkiOm5ldyBwaShBdC5wYWludF9yYXN0ZXJbInJhc3Rlci1vcGFjaXR5Il0pLCJyYXN0ZXItaHVlLXJvdGF0ZSI6bmV3IHBpKEF0LnBhaW50X3Jhc3RlclsicmFzdGVyLWh1ZS1yb3RhdGUiXSksInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6bmV3IHBpKEF0LnBhaW50X3Jhc3RlclsicmFzdGVyLWJyaWdodG5lc3MtbWluIl0pLCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiOm5ldyBwaShBdC5wYWludF9yYXN0ZXJbInJhc3Rlci1icmlnaHRuZXNzLW1heCJdKSwicmFzdGVyLXNhdHVyYXRpb24iOm5ldyBwaShBdC5wYWludF9yYXN0ZXJbInJhc3Rlci1zYXR1cmF0aW9uIl0pLCJyYXN0ZXItY29udHJhc3QiOm5ldyBwaShBdC5wYWludF9yYXN0ZXJbInJhc3Rlci1jb250cmFzdCJdKSwicmFzdGVyLXJlc2FtcGxpbmciOm5ldyBwaShBdC5wYWludF9yYXN0ZXJbInJhc3Rlci1yZXNhbXBsaW5nIl0pLCJyYXN0ZXItZmFkZS1kdXJhdGlvbiI6bmV3IHBpKEF0LnBhaW50X3Jhc3RlclsicmFzdGVyLWZhZGUtZHVyYXRpb24iXSl9KX0seGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHljKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlfSh4aSksYmM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHt9KSx0aGlzLmltcGxlbWVudGF0aW9uPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuaXMzRD1mdW5jdGlvbigpe3JldHVybiIzZCI9PT10aGlzLmltcGxlbWVudGF0aW9uLnJlbmRlcmluZ01vZGV9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5pbXBsZW1lbnRhdGlvbi5wcmVyZW5kZXJ9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkJiZ0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKHQsdC5wYWludGVyLmNvbnRleHQuZ2wpfSxlLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbih0KXt0aGlzLmltcGxlbWVudGF0aW9uLm9uUmVtb3ZlJiZ0aGlzLmltcGxlbWVudGF0aW9uLm9uUmVtb3ZlKHQsdC5wYWludGVyLmNvbnRleHQuZ2wpfSxlfSh4aSksX2M9e2NpcmNsZTpvbyxoZWF0bWFwOnZvLGhpbGxzaGFkZTp4byxmaWxsOmFzLCJmaWxsLWV4dHJ1c2lvbiI6d3MsbGluZTp6cyxzeW1ib2w6Z2MsYmFja2dyb3VuZDp2YyxyYXN0ZXI6eGN9LHdjPXNlbGYuSFRNTEltYWdlRWxlbWVudCxUYz1zZWxmLkhUTUxDYW52YXNFbGVtZW50LGtjPXNlbGYuSFRNTFZpZGVvRWxlbWVudCxNYz1zZWxmLkltYWdlRGF0YSxBYz1zZWxmLkltYWdlQml0bWFwLFNjPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY29udGV4dD10LHRoaXMuZm9ybWF0PXIsdGhpcy50ZXh0dXJlPXQuZ2wuY3JlYXRlVGV4dHVyZSgpLHRoaXMudXBkYXRlKGUsbil9O1NjLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQud2lkdGgsaT10LmhlaWdodCxhPSEodGhpcy5zaXplJiZ0aGlzLnNpemVbMF09PT1uJiZ0aGlzLnNpemVbMV09PT1pfHxyKSxvPXRoaXMuY29udGV4dCxzPW8uZ2w7aWYodGhpcy51c2VNaXBtYXA9Qm9vbGVhbihlJiZlLnVzZU1pcG1hcCkscy5iaW5kVGV4dHVyZShzLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxvLnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXQoITEpLG8ucGl4ZWxTdG9yZVVucGFjay5zZXQoMSksby5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQodGhpcy5mb3JtYXQ9PT1zLlJHQkEmJighZXx8ITEhPT1lLnByZW11bHRpcGx5KSksYSl0aGlzLnNpemU9W24saV0sdCBpbnN0YW5jZW9mIHdjfHx0IGluc3RhbmNlb2YgVGN8fHQgaW5zdGFuY2VvZiBrY3x8dCBpbnN0YW5jZW9mIE1jfHxBYyYmdCBpbnN0YW5jZW9mIEFjP3MudGV4SW1hZ2UyRChzLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCxzLlVOU0lHTkVEX0JZVEUsdCk6cy50ZXhJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLHRoaXMuZm9ybWF0LG4saSwwLHRoaXMuZm9ybWF0LHMuVU5TSUdORURfQllURSx0LmRhdGEpO2Vsc2V7dmFyIGw9cnx8e3g6MCx5OjB9LGM9bC54LHU9bC55O3QgaW5zdGFuY2VvZiB3Y3x8dCBpbnN0YW5jZW9mIFRjfHx0IGluc3RhbmNlb2Yga2N8fHQgaW5zdGFuY2VvZiBNY3x8QWMmJnQgaW5zdGFuY2VvZiBBYz9zLnRleFN1YkltYWdlMkQocy5URVhUVVJFXzJELDAsYyx1LHMuUkdCQSxzLlVOU0lHTkVEX0JZVEUsdCk6cy50ZXhTdWJJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLGMsdSxuLGkscy5SR0JBLHMuVU5TSUdORURfQllURSx0LmRhdGEpfXRoaXMudXNlTWlwbWFwJiZ0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSYmcy5nZW5lcmF0ZU1pcG1hcChzLlRFWFRVUkVfMkQpfSxTYy5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5jb250ZXh0LmdsO24uYmluZFRleHR1cmUobi5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksciE9PW4uTElORUFSX01JUE1BUF9ORUFSRVNUfHx0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKXx8KHI9bi5MSU5FQVIpLHQhPT10aGlzLmZpbHRlciYmKG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsdCksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixyfHx0KSx0aGlzLmZpbHRlcj10KSxlIT09dGhpcy53cmFwJiYobi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLGUpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxlKSx0aGlzLndyYXA9ZSl9LFNjLnByb3RvdHlwZS5pc1NpemVQb3dlck9mVHdvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZVswXT09PXRoaXMuc2l6ZVsxXSYmTWF0aC5sb2codGhpcy5zaXplWzBdKS9NYXRoLkxOMiUxPT0wfSxTYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5nbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSksdGhpcy50ZXh0dXJlPW51bGx9O3ZhciBFYz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2NhbGxiYWNrPXQsdGhpcy5fdHJpZ2dlcmVkPSExLCJ1bmRlZmluZWQiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwmJih0aGlzLl9jaGFubmVsPW5ldyBNZXNzYWdlQ2hhbm5lbCx0aGlzLl9jaGFubmVsLnBvcnQyLm9ubWVzc2FnZT1mdW5jdGlvbigpe2UuX3RyaWdnZXJlZD0hMSxlLl9jYWxsYmFjaygpfSl9O0VjLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl90cmlnZ2VyZWR8fCh0aGlzLl90cmlnZ2VyZWQ9ITAsdGhpcy5fY2hhbm5lbD90aGlzLl9jaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKCEwKTpzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuX3RyaWdnZXJlZD0hMSx0Ll9jYWxsYmFjaygpfSksMCkpfSxFYy5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX2NoYW5uZWwsdGhpcy5fY2FsbGJhY2s9ZnVuY3Rpb24oKXt9fTt2YXIgQ2M9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy5wYXJlbnQ9ZSx0aGlzLm1hcElkPXIsdGhpcy5jYWxsYmFja3M9e30sdGhpcy50YXNrcz17fSx0aGlzLnRhc2tRdWV1ZT1bXSx0aGlzLmNhbmNlbENhbGxiYWNrcz17fSxnKFsicmVjZWl2ZSIsInByb2Nlc3MiXSx0aGlzKSx0aGlzLmludm9rZXI9bmV3IEVjKHRoaXMucHJvY2VzcyksdGhpcy50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5yZWNlaXZlLCExKSx0aGlzLmdsb2JhbFNjb3BlPWsoKT90OnNlbGZ9O2Z1bmN0aW9uIExjKHQsZSxyKXt2YXIgbj0yKk1hdGguUEkqNjM3ODEzNy8yNTYvTWF0aC5wb3coMixyKTtyZXR1cm5bdCpuLTIqTWF0aC5QSSo2Mzc4MTM3LzIsZSpuLTIqTWF0aC5QSSo2Mzc4MTM3LzJdfUNjLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpczt2b2lkIDA9PT1pJiYoaT0hMSk7dmFyIG89TWF0aC5yb3VuZCgxZTE4Kk1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMCwxMCk7ciYmKHRoaXMuY2FsbGJhY2tzW29dPXIpO3ZhciBzPVModGhpcy5nbG9iYWxTY29wZSk/dm9pZCAwOltdO3JldHVybiB0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh7aWQ6byx0eXBlOnQsaGFzQ2FsbGJhY2s6ISFyLHRhcmdldE1hcElkOm4sbXVzdFF1ZXVlOmksc291cmNlTWFwSWQ6dGhpcy5tYXBJZCxkYXRhOk5uKGUscyl9LHMpLHtjYW5jZWw6ZnVuY3Rpb24oKXtyJiZkZWxldGUgYS5jYWxsYmFja3Nbb10sYS50YXJnZXQucG9zdE1lc3NhZ2Uoe2lkOm8sdHlwZToiPGNhbmNlbD4iLHRhcmdldE1hcElkOm4sc291cmNlTWFwSWQ6YS5tYXBJZH0pfX19LENjLnByb3RvdHlwZS5yZWNlaXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0YSxyPWUuaWQ7aWYociYmKCFlLnRhcmdldE1hcElkfHx0aGlzLm1hcElkPT09ZS50YXJnZXRNYXBJZCkpaWYoIjxjYW5jZWw+Ij09PWUudHlwZSl7ZGVsZXRlIHRoaXMudGFza3Nbcl07dmFyIG49dGhpcy5jYW5jZWxDYWxsYmFja3Nbcl07ZGVsZXRlIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW3JdLG4mJm4oKX1lbHNlIGsoKXx8ZS5tdXN0UXVldWU/KHRoaXMudGFza3Nbcl09ZSx0aGlzLnRhc2tRdWV1ZS5wdXNoKHIpLHRoaXMuaW52b2tlci50cmlnZ2VyKCkpOnRoaXMucHJvY2Vzc1Rhc2socixlKX0sQ2MucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oKXtpZih0aGlzLnRhc2tRdWV1ZS5sZW5ndGgpe3ZhciB0PXRoaXMudGFza1F1ZXVlLnNoaWZ0KCksZT10aGlzLnRhc2tzW3RdO2RlbGV0ZSB0aGlzLnRhc2tzW3RdLHRoaXMudGFza1F1ZXVlLmxlbmd0aCYmdGhpcy5pbnZva2VyLnRyaWdnZXIoKSxlJiZ0aGlzLnByb2Nlc3NUYXNrKHQsZSl9fSxDYy5wcm90b3R5cGUucHJvY2Vzc1Rhc2s9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO2lmKCI8cmVzcG9uc2U+Ij09PWUudHlwZSl7dmFyIG49dGhpcy5jYWxsYmFja3NbdF07ZGVsZXRlIHRoaXMuY2FsbGJhY2tzW3RdLG4mJihlLmVycm9yP24oam4oZS5lcnJvcikpOm4obnVsbCxqbihlLmRhdGEpKSl9ZWxzZXt2YXIgaT0hMSxhPVModGhpcy5nbG9iYWxTY29wZSk/dm9pZCAwOltdLG89ZS5oYXNDYWxsYmFjaz9mdW5jdGlvbihlLG4pe2k9ITAsZGVsZXRlIHIuY2FuY2VsQ2FsbGJhY2tzW3RdLHIudGFyZ2V0LnBvc3RNZXNzYWdlKHtpZDp0LHR5cGU6IjxyZXNwb25zZT4iLHNvdXJjZU1hcElkOnIubWFwSWQsZXJyb3I6ZT9ObihlKTpudWxsLGRhdGE6Tm4obixhKX0sYSl9OmZ1bmN0aW9uKHQpe2k9ITB9LHM9bnVsbCxsPWpuKGUuZGF0YSk7aWYodGhpcy5wYXJlbnRbZS50eXBlXSlzPXRoaXMucGFyZW50W2UudHlwZV0oZS5zb3VyY2VNYXBJZCxsLG8pO2Vsc2UgaWYodGhpcy5wYXJlbnQuZ2V0V29ya2VyU291cmNlKXt2YXIgYz1lLnR5cGUuc3BsaXQoIi4iKTtzPXRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZShlLnNvdXJjZU1hcElkLGNbMF0sbC5zb3VyY2UpW2NbMV1dKGwsbyl9ZWxzZSBvKG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgZnVuY3Rpb24gIitlLnR5cGUpKTshaSYmcyYmcy5jYW5jZWwmJih0aGlzLmNhbmNlbENhbGxiYWNrc1t0XT1zLmNhbmNlbCl9fSxDYy5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5pbnZva2VyLnJlbW92ZSgpLHRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMucmVjZWl2ZSwhMSl9O3ZhciBQYz1mdW5jdGlvbih0LGUpe3QmJihlP3RoaXMuc2V0U291dGhXZXN0KHQpLnNldE5vcnRoRWFzdChlKTo0PT09dC5sZW5ndGg/dGhpcy5zZXRTb3V0aFdlc3QoW3RbMF0sdFsxXV0pLnNldE5vcnRoRWFzdChbdFsyXSx0WzNdXSk6dGhpcy5zZXRTb3V0aFdlc3QodFswXSkuc2V0Tm9ydGhFYXN0KHRbMV0pKX07UGMucHJvdG90eXBlLnNldE5vcnRoRWFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmU9dCBpbnN0YW5jZW9mIEljP25ldyBJYyh0LmxuZyx0LmxhdCk6SWMuY29udmVydCh0KSx0aGlzfSxQYy5wcm90b3R5cGUuc2V0U291dGhXZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdz10IGluc3RhbmNlb2YgSWM/bmV3IEljKHQubG5nLHQubGF0KTpJYy5jb252ZXJ0KHQpLHRoaXN9LFBjLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuX3N3LGk9dGhpcy5fbmU7aWYodCBpbnN0YW5jZW9mIEljKWU9dCxyPXQ7ZWxzZXtpZighKHQgaW5zdGFuY2VvZiBQYykpcmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ND09PXQubGVuZ3RofHx0LmV2ZXJ5KEFycmF5LmlzQXJyYXkpP3RoaXMuZXh0ZW5kKFBjLmNvbnZlcnQodCkpOnRoaXMuZXh0ZW5kKEljLmNvbnZlcnQodCkpOnRoaXM7aWYocj10Ll9uZSwhKGU9dC5fc3cpfHwhcilyZXR1cm4gdGhpc31yZXR1cm4gbnx8aT8obi5sbmc9TWF0aC5taW4oZS5sbmcsbi5sbmcpLG4ubGF0PU1hdGgubWluKGUubGF0LG4ubGF0KSxpLmxuZz1NYXRoLm1heChyLmxuZyxpLmxuZyksaS5sYXQ9TWF0aC5tYXgoci5sYXQsaS5sYXQpKToodGhpcy5fc3c9bmV3IEljKGUubG5nLGUubGF0KSx0aGlzLl9uZT1uZXcgSWMoci5sbmcsci5sYXQpKSx0aGlzfSxQYy5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJYygodGhpcy5fc3cubG5nK3RoaXMuX25lLmxuZykvMiwodGhpcy5fc3cubGF0K3RoaXMuX25lLmxhdCkvMil9LFBjLnByb3RvdHlwZS5nZXRTb3V0aFdlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3d9LFBjLnByb3RvdHlwZS5nZXROb3J0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV9LFBjLnByb3RvdHlwZS5nZXROb3J0aFdlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEljKHRoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0Tm9ydGgoKSl9LFBjLnByb3RvdHlwZS5nZXRTb3V0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEljKHRoaXMuZ2V0RWFzdCgpLHRoaXMuZ2V0U291dGgoKSl9LFBjLnByb3RvdHlwZS5nZXRXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxuZ30sUGMucHJvdG90eXBlLmdldFNvdXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxhdH0sUGMucHJvdG90eXBlLmdldEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmUubG5nfSxQYy5wcm90b3R5cGUuZ2V0Tm9ydGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmUubGF0fSxQYy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLl9zdy50b0FycmF5KCksdGhpcy5fbmUudG9BcnJheSgpXX0sUGMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkxuZ0xhdEJvdW5kcygiK3RoaXMuX3N3LnRvU3RyaW5nKCkrIiwgIit0aGlzLl9uZS50b1N0cmluZygpKyIpIn0sUGMucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuX3N3JiZ0aGlzLl9uZSl9LFBjLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXt2YXIgZT1JYy5jb252ZXJ0KHQpLHI9ZS5sbmcsbj1lLmxhdCxpPXRoaXMuX3N3LmxuZzw9ciYmcjw9dGhpcy5fbmUubG5nO3JldHVybiB0aGlzLl9zdy5sbmc+dGhpcy5fbmUubG5nJiYoaT10aGlzLl9zdy5sbmc+PXImJnI+PXRoaXMuX25lLmxuZyksdGhpcy5fc3cubGF0PD1uJiZuPD10aGlzLl9uZS5sYXQmJml9LFBjLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIXR8fHQgaW5zdGFuY2VvZiBQYz90Om5ldyBQYyh0KX07dmFyIEljPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBMbmdMYXQgb2JqZWN0OiAoIit0KyIsICIrZSsiKSIpO2lmKHRoaXMubG5nPSt0LHRoaXMubGF0PStlLHRoaXMubGF0PjkwfHx0aGlzLmxhdDwtOTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExuZ0xhdCBsYXRpdHVkZSB2YWx1ZTogbXVzdCBiZSBiZXR3ZWVuIC05MCBhbmQgOTAiKX07SWMucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEljKGModGhpcy5sbmcsLTE4MCwxODApLHRoaXMubGF0KX0sSWMucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5sbmcsdGhpcy5sYXRdfSxJYy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTG5nTGF0KCIrdGhpcy5sbmcrIiwgIit0aGlzLmxhdCsiKSJ9LEljLnByb3RvdHlwZS5kaXN0YW5jZVRvPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguUEkvMTgwLHI9dGhpcy5sYXQqZSxuPXQubGF0KmUsaT1NYXRoLnNpbihyKSpNYXRoLnNpbihuKStNYXRoLmNvcyhyKSpNYXRoLmNvcyhuKSpNYXRoLmNvcygodC5sbmctdGhpcy5sbmcpKmUpO3JldHVybiA2MzcxMDA4LjgqTWF0aC5hY29zKE1hdGgubWluKGksMSkpfSxJYy5wcm90b3R5cGUudG9Cb3VuZHM9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIGU9MzYwKnQvNDAwNzUwMTcscj1lL01hdGguY29zKE1hdGguUEkvMTgwKnRoaXMubGF0KTtyZXR1cm4gbmV3IFBjKG5ldyBJYyh0aGlzLmxuZy1yLHRoaXMubGF0LWUpLG5ldyBJYyh0aGlzLmxuZytyLHRoaXMubGF0K2UpKX0sSWMuY29udmVydD1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgSWMpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT10Lmxlbmd0aHx8Mz09PXQubGVuZ3RoKSlyZXR1cm4gbmV3IEljKE51bWJlcih0WzBdKSxOdW1iZXIodFsxXSkpO2lmKCFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10KXJldHVybiBuZXcgSWMoTnVtYmVyKCJsbmciaW4gdD90LmxuZzp0LmxvbiksTnVtYmVyKHQubGF0KSk7dGhyb3cgbmV3IEVycm9yKCJgTG5nTGF0TGlrZWAgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBMbmdMYXQgaW5zdGFuY2UsIGFuIG9iamVjdCB7bG5nOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIGFuIG9iamVjdCB7bG9uOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIG9yIGFuIGFycmF5IG9mIFs8bG5nPiwgPGxhdD5dIil9O3ZhciB6Yz0yKk1hdGguUEkqNjM3MTAwOC44O2Z1bmN0aW9uIE9jKHQpe3JldHVybiB6YypNYXRoLmNvcyh0Kk1hdGguUEkvMTgwKX1mdW5jdGlvbiBEYyh0KXtyZXR1cm4oMTgwK3QpLzM2MH1mdW5jdGlvbiBSYyh0KXtyZXR1cm4oMTgwLTE4MC9NYXRoLlBJKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0Kk1hdGguUEkvMzYwKSkpLzM2MH1mdW5jdGlvbiBGYyh0LGUpe3JldHVybiB0L09jKGUpfWZ1bmN0aW9uIEJjKHQpe3JldHVybiAzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoKDE4MC0zNjAqdCkqTWF0aC5QSS8xODApKS05MH12YXIgTmM9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPTApLHRoaXMueD0rdCx0aGlzLnk9K2UsdGhpcy56PStyfTtOYy5mcm9tTG5nTGF0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dmFyIHI9SWMuY29udmVydCh0KTtyZXR1cm4gbmV3IE5jKERjKHIubG5nKSxSYyhyLmxhdCksRmMoZSxyLmxhdCkpfSxOYy5wcm90b3R5cGUudG9MbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEljKDM2MCp0aGlzLngtMTgwLEJjKHRoaXMueSkpfSxOYy5wcm90b3R5cGUudG9BbHRpdHVkZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnoqT2MoQmModGhpcy55KSl9LE5jLnByb3RvdHlwZS5tZXRlckluTWVyY2F0b3JDb29yZGluYXRlVW5pdHM9ZnVuY3Rpb24oKXtyZXR1cm4gMS96YyoodD1CYyh0aGlzLnkpLDEvTWF0aC5jb3ModCpNYXRoLlBJLzE4MCkpO3ZhciB0fTt2YXIgamM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuej10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMua2V5PXFjKDAsdCx0LGUscil9O2pjLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuej09PXQueiYmdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGpjLnByb3RvdHlwZS51cmw9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHM9KG49dGhpcy55LGk9dGhpcy56LGE9TGMoMjU2KihyPXRoaXMueCksMjU2KihuPU1hdGgucG93KDIsaSktbi0xKSxpKSxvPUxjKDI1NioocisxKSwyNTYqKG4rMSksaSksYVswXSsiLCIrYVsxXSsiLCIrb1swXSsiLCIrb1sxXSksbD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9IiIsYT10O2E+MDthLS0paSs9KGUmKG49MTw8YS0xKT8xOjApKyhyJm4/MjowKTtyZXR1cm4gaX0odGhpcy56LHRoaXMueCx0aGlzLnkpO3JldHVybiB0Wyh0aGlzLngrdGhpcy55KSV0Lmxlbmd0aF0ucmVwbGFjZSgie3ByZWZpeH0iLCh0aGlzLnglMTYpLnRvU3RyaW5nKDE2KSsodGhpcy55JTE2KS50b1N0cmluZygxNikpLnJlcGxhY2UoInt6fSIsU3RyaW5nKHRoaXMueikpLnJlcGxhY2UoInt4fSIsU3RyaW5nKHRoaXMueCkpLnJlcGxhY2UoInt5fSIsU3RyaW5nKCJ0bXMiPT09ZT9NYXRoLnBvdygyLHRoaXMueiktdGhpcy55LTE6dGhpcy55KSkucmVwbGFjZSgie3F1YWRrZXl9IixsKS5yZXBsYWNlKCJ7YmJveC1lcHNnLTM4NTd9IixzKX0samMucHJvdG90eXBlLmdldFRpbGVQb2ludD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnBvdygyLHRoaXMueik7cmV0dXJuIG5ldyBpKDgxOTIqKHQueCplLXRoaXMueCksODE5MioodC55KmUtdGhpcy55KSl9LGpjLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnorIi8iK3RoaXMueCsiLyIrdGhpcy55fTt2YXIgVWM9ZnVuY3Rpb24odCxlKXt0aGlzLndyYXA9dCx0aGlzLmNhbm9uaWNhbD1lLHRoaXMua2V5PXFjKHQsZS56LGUueixlLngsZS55KX0sVmM9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLm92ZXJzY2FsZWRaPXQsdGhpcy53cmFwPWUsdGhpcy5jYW5vbmljYWw9bmV3IGpjKHIsK24sK2kpLHRoaXMua2V5PXFjKGUsdCxyLG4saSl9O2Z1bmN0aW9uIHFjKHQsZSxyLG4saSl7KHQqPTIpPDAmJih0PS0xKnQtMSk7dmFyIGE9MTw8cjtyZXR1cm4oYSphKnQrYSppK24pLnRvU3RyaW5nKDM2KStyLnRvU3RyaW5nKDM2KStlLnRvU3RyaW5nKDM2KX1WYy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaPT09dC5vdmVyc2NhbGVkWiYmdGhpcy53cmFwPT09dC53cmFwJiZ0aGlzLmNhbm9uaWNhbC5lcXVhbHModC5jYW5vbmljYWwpfSxWYy5wcm90b3R5cGUuc2NhbGVkVG89ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10O3JldHVybiB0PnRoaXMuY2Fub25pY2FsLno/bmV3IFZjKHQsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KTpuZXcgVmModCx0aGlzLndyYXAsdCx0aGlzLmNhbm9uaWNhbC54Pj5lLHRoaXMuY2Fub25pY2FsLnk+PmUpfSxWYy5wcm90b3R5cGUuY2FsY3VsYXRlU2NhbGVkS2V5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jYW5vbmljYWwuei10O3JldHVybiB0PnRoaXMuY2Fub25pY2FsLno/cWModGhpcy53cmFwKitlLHQsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpOnFjKHRoaXMud3JhcCorZSx0LHQsdGhpcy5jYW5vbmljYWwueD4+cix0aGlzLmNhbm9uaWNhbC55Pj5yKX0sVmMucHJvdG90eXBlLmlzQ2hpbGRPZj1mdW5jdGlvbih0KXtpZih0LndyYXAhPT10aGlzLndyYXApcmV0dXJuITE7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10LmNhbm9uaWNhbC56O3JldHVybiAwPT09dC5vdmVyc2NhbGVkWnx8dC5vdmVyc2NhbGVkWjx0aGlzLm92ZXJzY2FsZWRaJiZ0LmNhbm9uaWNhbC54PT09dGhpcy5jYW5vbmljYWwueD4+ZSYmdC5jYW5vbmljYWwueT09PXRoaXMuY2Fub25pY2FsLnk+PmV9LFZjLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZih0aGlzLm92ZXJzY2FsZWRaPj10KXJldHVybltuZXcgVmModGhpcy5vdmVyc2NhbGVkWisxLHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSldO3ZhciBlPXRoaXMuY2Fub25pY2FsLnorMSxyPTIqdGhpcy5jYW5vbmljYWwueCxuPTIqdGhpcy5jYW5vbmljYWwueTtyZXR1cm5bbmV3IFZjKGUsdGhpcy53cmFwLGUscixuKSxuZXcgVmMoZSx0aGlzLndyYXAsZSxyKzEsbiksbmV3IFZjKGUsdGhpcy53cmFwLGUscixuKzEpLG5ldyBWYyhlLHRoaXMud3JhcCxlLHIrMSxuKzEpXX0sVmMucHJvdG90eXBlLmlzTGVzc1RoYW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud3JhcDx0LndyYXB8fCEodGhpcy53cmFwPnQud3JhcCkmJih0aGlzLm92ZXJzY2FsZWRaPHQub3ZlcnNjYWxlZFp8fCEodGhpcy5vdmVyc2NhbGVkWj50Lm92ZXJzY2FsZWRaKSYmKHRoaXMuY2Fub25pY2FsLng8dC5jYW5vbmljYWwueHx8ISh0aGlzLmNhbm9uaWNhbC54PnQuY2Fub25pY2FsLngpJiZ0aGlzLmNhbm9uaWNhbC55PHQuY2Fub25pY2FsLnkpKX0sVmMucHJvdG90eXBlLndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZjKHRoaXMub3ZlcnNjYWxlZFosMCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LFZjLnByb3RvdHlwZS51bndyYXBUbz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFZjKHRoaXMub3ZlcnNjYWxlZFosdCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LFZjLnByb3RvdHlwZS5vdmVyc2NhbGVGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5wb3coMix0aGlzLm92ZXJzY2FsZWRaLXRoaXMuY2Fub25pY2FsLnopfSxWYy5wcm90b3R5cGUudG9VbndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVjKHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbCl9LFZjLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaKyIvIit0aGlzLmNhbm9uaWNhbC54KyIvIit0aGlzLmNhbm9uaWNhbC55fSxWYy5wcm90b3R5cGUuZ2V0VGlsZVBvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNhbm9uaWNhbC5nZXRUaWxlUG9pbnQobmV3IE5jKHQueC10aGlzLndyYXAsdC55KSl9LERuKCJDYW5vbmljYWxUaWxlSUQiLGpjKSxEbigiT3ZlcnNjYWxlZFRpbGVJRCIsVmMse29taXQ6WyJwb3NNYXRyaXgiXX0pO3ZhciBIYz1mdW5jdGlvbih0LGUscil7aWYodGhpcy51aWQ9dCxlLmhlaWdodCE9PWUud2lkdGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRFTSB0aWxlcyBtdXN0IGJlIHNxdWFyZSIpO2lmKHImJiJtYXBib3giIT09ciYmInRlcnJhcml1bSIhPT1yKXJldHVybiBfKCciJytyKyciIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuIFZhbGlkIHR5cGVzIGluY2x1ZGUgIm1hcGJveCIgYW5kICJ0ZXJyYXJpdW0iLicpO3RoaXMuc3RyaWRlPWUuaGVpZ2h0O3ZhciBuPXRoaXMuZGltPWUuaGVpZ2h0LTI7dGhpcy5kYXRhPW5ldyBVaW50MzJBcnJheShlLmRhdGEuYnVmZmVyKSx0aGlzLmVuY29kaW5nPXJ8fCJtYXBib3giO2Zvcih2YXIgaT0wO2k8bjtpKyspdGhpcy5kYXRhW3RoaXMuX2lkeCgtMSxpKV09dGhpcy5kYXRhW3RoaXMuX2lkeCgwLGkpXSx0aGlzLmRhdGFbdGhpcy5faWR4KG4saSldPXRoaXMuZGF0YVt0aGlzLl9pZHgobi0xLGkpXSx0aGlzLmRhdGFbdGhpcy5faWR4KGksLTEpXT10aGlzLmRhdGFbdGhpcy5faWR4KGksMCldLHRoaXMuZGF0YVt0aGlzLl9pZHgoaSxuKV09dGhpcy5kYXRhW3RoaXMuX2lkeChpLG4tMSldO3RoaXMuZGF0YVt0aGlzLl9pZHgoLTEsLTEpXT10aGlzLmRhdGFbdGhpcy5faWR4KDAsMCldLHRoaXMuZGF0YVt0aGlzLl9pZHgobiwtMSldPXRoaXMuZGF0YVt0aGlzLl9pZHgobi0xLDApXSx0aGlzLmRhdGFbdGhpcy5faWR4KC0xLG4pXT10aGlzLmRhdGFbdGhpcy5faWR4KDAsbi0xKV0sdGhpcy5kYXRhW3RoaXMuX2lkeChuLG4pXT10aGlzLmRhdGFbdGhpcy5faWR4KG4tMSxuLTEpXX07SGMucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIpLG49NCp0aGlzLl9pZHgodCxlKTtyZXR1cm4oInRlcnJhcml1bSI9PT10aGlzLmVuY29kaW5nP3RoaXMuX3VucGFja1RlcnJhcml1bTp0aGlzLl91bnBhY2tNYXBib3gpKHJbbl0scltuKzFdLHJbbisyXSl9LEhjLnByb3RvdHlwZS5nZXRVbnBhY2tWZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4idGVycmFyaXVtIj09PXRoaXMuZW5jb2Rpbmc/WzI1NiwxLDEvMjU2LDMyNzY4XTpbNjU1My42LDI1LjYsLjEsMWU0XX0sSGMucHJvdG90eXBlLl9pZHg9ZnVuY3Rpb24odCxlKXtpZih0PC0xfHx0Pj10aGlzLmRpbSsxfHxlPC0xfHxlPj10aGlzLmRpbSsxKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBERU0gZGF0YSIpO3JldHVybihlKzEpKnRoaXMuc3RyaWRlKyh0KzEpfSxIYy5wcm90b3R5cGUuX3VucGFja01hcGJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuKDI1Nip0KjI1NisyNTYqZStyKS8xMC0xZTR9LEhjLnByb3RvdHlwZS5fdW5wYWNrVGVycmFyaXVtPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMjU2KnQrZStyLzI1Ni0zMjc2OH0sSGMucHJvdG90eXBlLmdldFBpeGVscz1mdW5jdGlvbigpe3JldHVybiBuZXcgcG8oe3dpZHRoOnRoaXMuc3RyaWRlLGhlaWdodDp0aGlzLnN0cmlkZX0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcikpfSxIYy5wcm90b3R5cGUuYmFja2ZpbGxCb3JkZXI9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuZGltIT09dC5kaW0pdGhyb3cgbmV3IEVycm9yKCJkZW0gZGltZW5zaW9uIG1pc21hdGNoIik7dmFyIG49ZSp0aGlzLmRpbSxpPWUqdGhpcy5kaW0rdGhpcy5kaW0sYT1yKnRoaXMuZGltLG89cip0aGlzLmRpbSt0aGlzLmRpbTtzd2l0Y2goZSl7Y2FzZS0xOm49aS0xO2JyZWFrO2Nhc2UgMTppPW4rMX1zd2l0Y2gocil7Y2FzZS0xOmE9by0xO2JyZWFrO2Nhc2UgMTpvPWErMX1mb3IodmFyIHM9LWUqdGhpcy5kaW0sbD0tcip0aGlzLmRpbSxjPWE7YzxvO2MrKylmb3IodmFyIHU9bjt1PGk7dSsrKXRoaXMuZGF0YVt0aGlzLl9pZHgodSxjKV09dC5kYXRhW3RoaXMuX2lkeCh1K3MsYytsKV19LERuKCJERU1EYXRhIixIYyk7dmFyIEdjPWZ1bmN0aW9uKHQpe3RoaXMuX3N0cmluZ1RvTnVtYmVyPXt9LHRoaXMuX251bWJlclRvU3RyaW5nPVtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3RoaXMuX3N0cmluZ1RvTnVtYmVyW3JdPWUsdGhpcy5fbnVtYmVyVG9TdHJpbmdbZV09cn19O0djLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3RdfSxHYy5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1t0XX07dmFyIFljPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50eXBlPSJGZWF0dXJlIix0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZT10LHQuX3o9ZSx0Ll94PXIsdC5feT1uLHRoaXMucHJvcGVydGllcz10LnByb3BlcnRpZXMsdGhpcy5pZD1pfSxXYz17Z2VvbWV0cnk6e2NvbmZpZ3VyYWJsZTohMH19O1djLmdlb21ldHJ5LmdldD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLl9nZW9tZXRyeSYmKHRoaXMuX2dlb21ldHJ5PXRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLnRvR2VvSlNPTih0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feCx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feSx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feikuZ2VvbWV0cnkpLHRoaXMuX2dlb21ldHJ5fSxXYy5nZW9tZXRyeS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fZ2VvbWV0cnk9dH0sWWMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciB0PXtnZW9tZXRyeTp0aGlzLmdlb21ldHJ5fTtmb3IodmFyIGUgaW4gdGhpcykiX2dlb21ldHJ5IiE9PWUmJiJfdmVjdG9yVGlsZUZlYXR1cmUiIT09ZSYmKHRbZV09dGhpc1tlXSk7cmV0dXJuIHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFljLnByb3RvdHlwZSxXYyk7dmFyIFpjPWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT17fSx0aGlzLnN0YXRlQ2hhbmdlcz17fSx0aGlzLmRlbGV0ZWRTdGF0ZXM9e319O1pjLnByb3RvdHlwZS51cGRhdGVTdGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49U3RyaW5nKGUpO2lmKHRoaXMuc3RhdGVDaGFuZ2VzW3RdPXRoaXMuc3RhdGVDaGFuZ2VzW3RdfHx7fSx0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXT10aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXXx8e30sdSh0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXSxyKSxudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdKWZvcih2YXIgaSBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09e30sdGhpcy5zdGF0ZVt0XSlpIT09biYmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtpXT1udWxsKTtlbHNlIGlmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XSYmbnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXSlmb3IodmFyIGEgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXt9LHRoaXMuc3RhdGVbdF1bbl0pclthXXx8KHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVthXT1udWxsKTtlbHNlIGZvcih2YXIgbyBpbiByKXRoaXMuZGVsZXRlZFN0YXRlc1t0XSYmdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dJiZudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW29dJiZkZWxldGUgdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW29dfSxaYy5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsIT09dGhpcy5kZWxldGVkU3RhdGVzW3RdKXt2YXIgbj1TdHJpbmcoZSk7aWYodGhpcy5kZWxldGVkU3RhdGVzW3RdPXRoaXMuZGVsZXRlZFN0YXRlc1t0XXx8e30sciYmdm9pZCAwIT09ZSludWxsIT09dGhpcy5kZWxldGVkU3RhdGVzW3RdW25dJiYodGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXXx8e30sdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW3JdPW51bGwpO2Vsc2UgaWYodm9pZCAwIT09ZSlpZih0aGlzLnN0YXRlQ2hhbmdlc1t0XSYmdGhpcy5zdGF0ZUNoYW5nZXNbdF1bbl0pZm9yKHIgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXt9LHRoaXMuc3RhdGVDaGFuZ2VzW3RdW25dKXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVtyXT1udWxsO2Vsc2UgdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPW51bGw7ZWxzZSB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09bnVsbH19LFpjLnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPVN0cmluZyhlKSxuPXUoe30sKHRoaXMuc3RhdGVbdF18fHt9KVtyXSwodGhpcy5zdGF0ZUNoYW5nZXNbdF18fHt9KVtyXSk7aWYobnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XSlyZXR1cm57fTtpZih0aGlzLmRlbGV0ZWRTdGF0ZXNbdF0pe3ZhciBpPXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtlXTtpZihudWxsPT09aSlyZXR1cm57fTtmb3IodmFyIGEgaW4gaSlkZWxldGUgblthXX1yZXR1cm4gbn0sWmMucHJvdG90eXBlLmluaXRpYWxpemVUaWxlU3RhdGU9ZnVuY3Rpb24odCxlKXt0LnNldEZlYXR1cmVTdGF0ZSh0aGlzLnN0YXRlLGUpfSxaYy5wcm90b3R5cGUuY29hbGVzY2VDaGFuZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307Zm9yKHZhciBuIGluIHRoaXMuc3RhdGVDaGFuZ2VzKXt0aGlzLnN0YXRlW25dPXRoaXMuc3RhdGVbbl18fHt9O3ZhciBpPXt9O2Zvcih2YXIgYSBpbiB0aGlzLnN0YXRlQ2hhbmdlc1tuXSl0aGlzLnN0YXRlW25dW2FdfHwodGhpcy5zdGF0ZVtuXVthXT17fSksdSh0aGlzLnN0YXRlW25dW2FdLHRoaXMuc3RhdGVDaGFuZ2VzW25dW2FdKSxpW2FdPXRoaXMuc3RhdGVbbl1bYV07cltuXT1pfWZvcih2YXIgbyBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXMpe3RoaXMuc3RhdGVbb109dGhpcy5zdGF0ZVtvXXx8e307dmFyIHM9e307aWYobnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1tvXSlmb3IodmFyIGwgaW4gdGhpcy5zdGF0ZVtvXSlzW2xdPXt9LHRoaXMuc3RhdGVbb11bbF09e307ZWxzZSBmb3IodmFyIGMgaW4gdGhpcy5kZWxldGVkU3RhdGVzW29dKXtpZihudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW29dW2NdKXRoaXMuc3RhdGVbb11bY109e307ZWxzZSBmb3IodmFyIGg9MCxmPU9iamVjdC5rZXlzKHRoaXMuZGVsZXRlZFN0YXRlc1tvXVtjXSk7aDxmLmxlbmd0aDtoKz0xKWRlbGV0ZSB0aGlzLnN0YXRlW29dW2NdW2ZbaF1dO3NbY109dGhpcy5zdGF0ZVtvXVtjXX1yW29dPXJbb118fHt9LHUocltvXSxzKX1pZih0aGlzLnN0YXRlQ2hhbmdlcz17fSx0aGlzLmRlbGV0ZWRTdGF0ZXM9e30sMCE9PU9iamVjdC5rZXlzKHIpLmxlbmd0aClmb3IodmFyIHAgaW4gdCl0W3BdLnNldEZlYXR1cmVTdGF0ZShyLGUpfTt2YXIgWGM9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbGVJRD10LHRoaXMueD10LmNhbm9uaWNhbC54LHRoaXMueT10LmNhbm9uaWNhbC55LHRoaXMuej10LmNhbm9uaWNhbC56LHRoaXMuZ3JpZD1uZXcgTG4oODE5MiwxNiwwKSx0aGlzLmdyaWQzRD1uZXcgTG4oODE5MiwxNiwwKSx0aGlzLmZlYXR1cmVJbmRleEFycmF5PW5ldyByYSx0aGlzLnByb21vdGVJZD1lfTtmdW5jdGlvbiBKYyh0LGUscixuLGkpe3JldHVybiB2KHQsKGZ1bmN0aW9uKHQsYSl7dmFyIG89ZSBpbnN0YW5jZW9mIGZpP2UuZ2V0KGEpOm51bGw7cmV0dXJuIG8mJm8uZXZhbHVhdGU/by5ldmFsdWF0ZShyLG4saSk6b30pKX1mdW5jdGlvbiBLYyh0KXtmb3IodmFyIGU9MS8wLHI9MS8wLG49LTEvMCxpPS0xLzAsYT0wLG89dDthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07ZT1NYXRoLm1pbihlLHMueCkscj1NYXRoLm1pbihyLHMueSksbj1NYXRoLm1heChuLHMueCksaT1NYXRoLm1heChpLHMueSl9cmV0dXJue21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX19ZnVuY3Rpb24gUWModCxlKXtyZXR1cm4gZS10fVhjLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMuZmVhdHVyZUluZGV4QXJyYXkubGVuZ3RoO3RoaXMuZmVhdHVyZUluZGV4QXJyYXkuZW1wbGFjZUJhY2socixuLGkpO2Zvcih2YXIgcz1hP3RoaXMuZ3JpZDNEOnRoaXMuZ3JpZCxsPTA7bDxlLmxlbmd0aDtsKyspe2Zvcih2YXIgYz1lW2xdLHU9WzEvMCwxLzAsLTEvMCwtMS8wXSxoPTA7aDxjLmxlbmd0aDtoKyspe3ZhciBmPWNbaF07dVswXT1NYXRoLm1pbih1WzBdLGYueCksdVsxXT1NYXRoLm1pbih1WzFdLGYueSksdVsyXT1NYXRoLm1heCh1WzJdLGYueCksdVszXT1NYXRoLm1heCh1WzNdLGYueSl9dVswXTw4MTkyJiZ1WzFdPDgxOTImJnVbMl0+PTAmJnVbM10+PTAmJnMuaW5zZXJ0KG8sdVswXSx1WzFdLHVbMl0sdVszXSl9fSxYYy5wcm90b3R5cGUubG9hZFZUTGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudnRMYXllcnN8fCh0aGlzLnZ0TGF5ZXJzPW5ldyBncy5WZWN0b3JUaWxlKG5ldyBIcyh0aGlzLnJhd1RpbGVEYXRhKSkubGF5ZXJzLHRoaXMuc291cmNlTGF5ZXJDb2Rlcj1uZXcgR2ModGhpcy52dExheWVycz9PYmplY3Qua2V5cyh0aGlzLnZ0TGF5ZXJzKS5zb3J0KCk6WyJfZ2VvanNvblRpbGVMYXllciJdKSksdGhpcy52dExheWVyc30sWGMucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXM7dGhpcy5sb2FkVlRMYXllcnMoKTtmb3IodmFyIG89dC5wYXJhbXN8fHt9LHM9ODE5Mi90LnRpbGVTaXplL3Quc2NhbGUsbD1ybihvLmZpbHRlciksYz10LnF1ZXJ5R2VvbWV0cnksdT10LnF1ZXJ5UGFkZGluZypzLGg9S2MoYyksZj10aGlzLmdyaWQucXVlcnkoaC5taW5YLXUsaC5taW5ZLXUsaC5tYXhYK3UsaC5tYXhZK3UpLHA9S2ModC5jYW1lcmFRdWVyeUdlb21ldHJ5KSxkPTAsZz10aGlzLmdyaWQzRC5xdWVyeShwLm1pblgtdSxwLm1pblktdSxwLm1heFgrdSxwLm1heFkrdSwoZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4sYSl7Zm9yKHZhciBvPTAscz10O288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtpZihlPD1sLngmJnI8PWwueSYmbj49bC54JiZhPj1sLnkpcmV0dXJuITB9dmFyIGM9W25ldyBpKGUsciksbmV3IGkoZSxhKSxuZXcgaShuLGEpLG5ldyBpKG4scildO2lmKHQubGVuZ3RoPjIpZm9yKHZhciB1PTAsaD1jO3U8aC5sZW5ndGg7dSs9MSlpZihXYSh0LGhbdV0pKXJldHVybiEwO2Zvcih2YXIgZj0wO2Y8dC5sZW5ndGgtMTtmKyspaWYoWmEodFtmXSx0W2YrMV0sYykpcmV0dXJuITA7cmV0dXJuITF9KHQuY2FtZXJhUXVlcnlHZW9tZXRyeSxlLXUsci11LG4rdSxhK3UpfSkpO2Q8Zy5sZW5ndGg7ZCs9MSlmLnB1c2goZ1tkXSk7Zi5zb3J0KFFjKTtmb3IodmFyIG0sdj17fSx5PWZ1bmN0aW9uKGkpe3ZhciB1PWZbaV07aWYodSE9PW0pe209dTt2YXIgaD1hLmZlYXR1cmVJbmRleEFycmF5LmdldCh1KSxwPW51bGw7YS5sb2FkTWF0Y2hpbmdGZWF0dXJlKHYsaC5idWNrZXRJbmRleCxoLnNvdXJjZUxheWVySW5kZXgsaC5mZWF0dXJlSW5kZXgsbCxvLmxheWVycyxvLmF2YWlsYWJsZUltYWdlcyxlLHIsbiwoZnVuY3Rpb24oZSxyLG4pe3JldHVybiBwfHwocD1EYShlKSksci5xdWVyeUludGVyc2VjdHNGZWF0dXJlKGMsZSxuLHAsYS56LHQudHJhbnNmb3JtLHMsdC5waXhlbFBvc01hdHJpeCl9KSl9fSx4PTA7eDxmLmxlbmd0aDt4KyspeSh4KTtyZXR1cm4gdn0sWGMucHJvdG90eXBlLmxvYWRNYXRjaGluZ0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgaD10aGlzLmJ1Y2tldExheWVySURzW2VdO2lmKCFhfHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGUuaW5kZXhPZih0W3JdKT49MClyZXR1cm4hMDtyZXR1cm4hMX0oYSxoKSl7dmFyIGY9dGhpcy5zb3VyY2VMYXllckNvZGVyLmRlY29kZShyKSxwPXRoaXMudnRMYXllcnNbZl0uZmVhdHVyZShuKTtpZihpLmZpbHRlcihuZXcgaWkodGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLHApKWZvcih2YXIgZD10aGlzLmdldElkKHAsZiksZz0wO2c8aC5sZW5ndGg7ZysrKXt2YXIgbT1oW2ddO2lmKCEoYSYmYS5pbmRleE9mKG0pPDApKXt2YXIgdj1zW21dO2lmKHYpe3ZhciB5PXt9O3ZvaWQgMCE9PWQmJmMmJih5PWMuZ2V0U3RhdGUodi5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIixkKSk7dmFyIHg9bFttXTt4LnBhaW50PUpjKHgucGFpbnQsdi5wYWludCxwLHksbykseC5sYXlvdXQ9SmMoeC5sYXlvdXQsdi5sYXlvdXQscCx5LG8pO3ZhciBiPSF1fHx1KHAsdix5KTtpZihiKXt2YXIgXz1uZXcgWWMocCx0aGlzLnosdGhpcy54LHRoaXMueSxkKTtfLmxheWVyPXg7dmFyIHc9dFttXTt2b2lkIDA9PT13JiYodz10W21dPVtdKSx3LnB1c2goe2ZlYXR1cmVJbmRleDpuLGZlYXR1cmU6XyxpbnRlcnNlY3Rpb25aOmJ9KX19fX19fSxYYy5wcm90b3R5cGUubG9va3VwU3ltYm9sRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD17fTt0aGlzLmxvYWRWVExheWVycygpO2Zvcih2YXIgYz1ybihpKSx1PTAsaD10O3U8aC5sZW5ndGg7dSs9MSl0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUobCxyLG4saFt1XSxjLGEsbyxzLGUpO3JldHVybiBsfSxYYy5wcm90b3R5cGUuaGFzTGF5ZXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJ1Y2tldExheWVySURzO2U8ci5sZW5ndGg7ZSs9MSlmb3IodmFyIG49MCxpPXJbZV07bjxpLmxlbmd0aDtuKz0xKWlmKHQ9PT1pW25dKXJldHVybiEwO3JldHVybiExfSxYYy5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmlkO3JldHVybiB0aGlzLnByb21vdGVJZCYmImJvb2xlYW4iPT10eXBlb2Yocj10LnByb3BlcnRpZXNbInN0cmluZyI9PXR5cGVvZiB0aGlzLnByb21vdGVJZD90aGlzLnByb21vdGVJZDp0aGlzLnByb21vdGVJZFtlXV0pJiYocj1OdW1iZXIocikpLHJ9LERuKCJGZWF0dXJlSW5kZXgiLFhjLHtvbWl0OlsicmF3VGlsZURhdGEiLCJzb3VyY2VMYXllckNvZGVyIl19KTt2YXIgJGM9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbGVJRD10LHRoaXMudWlkPWYoKSx0aGlzLnVzZXM9MCx0aGlzLnRpbGVTaXplPWUsdGhpcy5idWNrZXRzPXt9LHRoaXMuZXhwaXJhdGlvblRpbWU9bnVsbCx0aGlzLnF1ZXJ5UGFkZGluZz0wLHRoaXMuaGFzU3ltYm9sQnVja2V0cz0hMSx0aGlzLmhhc1JUTFRleHQ9ITEsdGhpcy5kZXBlbmRlbmNpZXM9e30sdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTAsdGhpcy5zdGF0ZT0ibG9hZGluZyJ9OyRjLnByb3RvdHlwZS5yZWdpc3RlckZhZGVEdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10K3RoaXMudGltZUFkZGVkO2U8Ui5ub3coKXx8dGhpcy5mYWRlRW5kVGltZSYmZTx0aGlzLmZhZGVFbmRUaW1lfHwodGhpcy5mYWRlRW5kVGltZT1lKX0sJGMucHJvdG90eXBlLndhc1JlcXVlc3RlZD1mdW5jdGlvbigpe3JldHVybiJlcnJvcmVkIj09PXRoaXMuc3RhdGV8fCJsb2FkZWQiPT09dGhpcy5zdGF0ZXx8InJlbG9hZGluZyI9PT10aGlzLnN0YXRlfSwkYy5wcm90b3R5cGUubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuaGFzRGF0YSgpJiZ0aGlzLnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLnN0YXRlPSJsb2FkZWQiLHQpe2Zvcih2YXIgbiBpbiB0LmZlYXR1cmVJbmRleCYmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PXQuZmVhdHVyZUluZGV4LHQucmF3VGlsZURhdGE/KHRoaXMubGF0ZXN0UmF3VGlsZURhdGE9dC5yYXdUaWxlRGF0YSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT10LnJhd1RpbGVEYXRhKTp0aGlzLmxhdGVzdFJhd1RpbGVEYXRhJiYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE9dGhpcy5sYXRlc3RSYXdUaWxlRGF0YSkpLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9dC5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLmJ1Y2tldHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtpZighZSlyZXR1cm4gcjtmb3IodmFyIG49ZnVuY3Rpb24oKXt2YXIgdD1hW2ldLG49dC5sYXllcklkcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmdldExheWVyKHQpfSkpLmZpbHRlcihCb29sZWFuKTtpZigwIT09bi5sZW5ndGgpe3QubGF5ZXJzPW4sdC5zdGF0ZURlcGVuZGVudExheWVySWRzJiYodC5zdGF0ZURlcGVuZGVudExheWVycz10LnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pKVswXX0pKSk7Zm9yKHZhciBvPTAscz1uO288cy5sZW5ndGg7bys9MSlyW3Nbb10uaWRdPXR9fSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSluKCk7cmV0dXJuIHJ9KHQuYnVja2V0cyxlLnN0eWxlKSx0aGlzLmhhc1N5bWJvbEJ1Y2tldHM9ITEsdGhpcy5idWNrZXRzKXt2YXIgaT10aGlzLmJ1Y2tldHNbbl07aWYoaSBpbnN0YW5jZW9mIGhjKXtpZih0aGlzLmhhc1N5bWJvbEJ1Y2tldHM9ITAsIXIpYnJlYWs7aS5qdXN0UmVsb2FkZWQ9ITB9fWlmKHRoaXMuaGFzUlRMVGV4dD0hMSx0aGlzLmhhc1N5bWJvbEJ1Y2tldHMpZm9yKHZhciBhIGluIHRoaXMuYnVja2V0cyl7dmFyIG89dGhpcy5idWNrZXRzW2FdO2lmKG8gaW5zdGFuY2VvZiBoYyYmby5oYXNSVExUZXh0KXt0aGlzLmhhc1JUTFRleHQ9ITAsbmkuaXNMb2FkaW5nKCl8fG5pLmlzTG9hZGVkKCl8fCJkZWZlcnJlZCIhPT1laSgpfHxyaSgpO2JyZWFrfX1mb3IodmFyIHMgaW4gdGhpcy5xdWVyeVBhZGRpbmc9MCx0aGlzLmJ1Y2tldHMpe3ZhciBsPXRoaXMuYnVja2V0c1tzXTt0aGlzLnF1ZXJ5UGFkZGluZz1NYXRoLm1heCh0aGlzLnF1ZXJ5UGFkZGluZyxlLnN0eWxlLmdldExheWVyKHMpLnF1ZXJ5UmFkaXVzKGwpKX10LmltYWdlQXRsYXMmJih0aGlzLmltYWdlQXRsYXM9dC5pbWFnZUF0bGFzKSx0LmdseXBoQXRsYXNJbWFnZSYmKHRoaXMuZ2x5cGhBdGxhc0ltYWdlPXQuZ2x5cGhBdGxhc0ltYWdlKX1lbHNlIHRoaXMuY29sbGlzaW9uQm94QXJyYXk9bmV3IFppfSwkYy5wcm90b3R5cGUudW5sb2FkVmVjdG9yRGF0YT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmJ1Y2tldHMpdGhpcy5idWNrZXRzW3RdLmRlc3Ryb3koKTt0aGlzLmJ1Y2tldHM9e30sdGhpcy5pbWFnZUF0bGFzVGV4dHVyZSYmdGhpcy5pbWFnZUF0bGFzVGV4dHVyZS5kZXN0cm95KCksdGhpcy5pbWFnZUF0bGFzJiYodGhpcy5pbWFnZUF0bGFzPW51bGwpLHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUmJnRoaXMuZ2x5cGhBdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PW51bGwsdGhpcy5zdGF0ZT0idW5sb2FkZWQifSwkYy5wcm90b3R5cGUuZ2V0QnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJ1Y2tldHNbdC5pZF19LCRjLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYnVja2V0cyl7dmFyIHI9dGhpcy5idWNrZXRzW2VdO3IudXBsb2FkUGVuZGluZygpJiZyLnVwbG9hZCh0KX12YXIgbj10LmdsO3RoaXMuaW1hZ2VBdGxhcyYmIXRoaXMuaW1hZ2VBdGxhcy51cGxvYWRlZCYmKHRoaXMuaW1hZ2VBdGxhc1RleHR1cmU9bmV3IFNjKHQsdGhpcy5pbWFnZUF0bGFzLmltYWdlLG4uUkdCQSksdGhpcy5pbWFnZUF0bGFzLnVwbG9hZGVkPSEwKSx0aGlzLmdseXBoQXRsYXNJbWFnZSYmKHRoaXMuZ2x5cGhBdGxhc1RleHR1cmU9bmV3IFNjKHQsdGhpcy5nbHlwaEF0bGFzSW1hZ2Usbi5BTFBIQSksdGhpcy5nbHlwaEF0bGFzSW1hZ2U9bnVsbCl9LCRjLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKHQpe3RoaXMuaW1hZ2VBdGxhcyYmdGhpcy5pbWFnZUF0bGFzLnBhdGNoVXBkYXRlZEltYWdlcyh0LHRoaXMuaW1hZ2VBdGxhc1RleHR1cmUpfSwkYy5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3JldHVybiB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCYmdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE/dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucXVlcnkoe3F1ZXJ5R2VvbWV0cnk6bixjYW1lcmFRdWVyeUdlb21ldHJ5Omksc2NhbGU6YSx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHBpeGVsUG9zTWF0cml4OmMsdHJhbnNmb3JtOnMscGFyYW1zOm8scXVlcnlQYWRkaW5nOnRoaXMucXVlcnlQYWRkaW5nKmx9LHQsZSxyKTp7fX0sJGMucHJvdG90eXBlLnF1ZXJ5U291cmNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxhdGVzdEZlYXR1cmVJbmRleDtpZihyJiZyLnJhd1RpbGVEYXRhKXt2YXIgbj1yLmxvYWRWVExheWVycygpLGk9ZT9lLnNvdXJjZUxheWVyOiIiLGE9bi5fZ2VvanNvblRpbGVMYXllcnx8bltpXTtpZihhKWZvcih2YXIgbz1ybihlJiZlLmZpbHRlcikscz10aGlzLnRpbGVJRC5jYW5vbmljYWwsbD1zLnosYz1zLngsdT1zLnksaD17ejpsLHg6Yyx5OnV9LGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIHA9YS5mZWF0dXJlKGYpO2lmKG8uZmlsdGVyKG5ldyBpaSh0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWikscCkpe3ZhciBkPXIuZ2V0SWQocCxpKSxnPW5ldyBZYyhwLGwsYyx1LGQpO2cudGlsZT1oLHQucHVzaChnKX19fX0sJGMucHJvdG90eXBlLmhhc0RhdGE9ZnVuY3Rpb24oKXtyZXR1cm4ibG9hZGVkIj09PXRoaXMuc3RhdGV8fCJyZWxvYWRpbmciPT09dGhpcy5zdGF0ZXx8ImV4cGlyZWQiPT09dGhpcy5zdGF0ZX0sJGMucHJvdG90eXBlLnBhdHRlcm5zTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2VBdGxhcyYmISFPYmplY3Qua2V5cyh0aGlzLmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9ucykubGVuZ3RofSwkYy5wcm90b3R5cGUuc2V0RXhwaXJ5RGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmV4cGlyYXRpb25UaW1lO2lmKHQuY2FjaGVDb250cm9sKXt2YXIgcj1NKHQuY2FjaGVDb250cm9sKTtyWyJtYXgtYWdlIl0mJih0aGlzLmV4cGlyYXRpb25UaW1lPURhdGUubm93KCkrMWUzKnJbIm1heC1hZ2UiXSl9ZWxzZSB0LmV4cGlyZXMmJih0aGlzLmV4cGlyYXRpb25UaW1lPW5ldyBEYXRlKHQuZXhwaXJlcykuZ2V0VGltZSgpKTtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXt2YXIgbj1EYXRlLm5vdygpLGk9ITE7aWYodGhpcy5leHBpcmF0aW9uVGltZT5uKWk9ITE7ZWxzZSBpZihlKWlmKHRoaXMuZXhwaXJhdGlvblRpbWU8ZSlpPSEwO2Vsc2V7dmFyIGE9dGhpcy5leHBpcmF0aW9uVGltZS1lO2E/dGhpcy5leHBpcmF0aW9uVGltZT1uK01hdGgubWF4KGEsM2U0KTppPSEwfWVsc2UgaT0hMDtpPyh0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQrKyx0aGlzLnN0YXRlPSJleHBpcmVkIik6dGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTB9fSwkYy5wcm90b3R5cGUuZ2V0RXhwaXJ5VGltZW91dD1mdW5jdGlvbigpe2lmKHRoaXMuZXhwaXJhdGlvblRpbWUpcmV0dXJuIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD8xZTMqKDE8PE1hdGgubWluKHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudC0xLDMxKSk6TWF0aC5taW4odGhpcy5leHBpcmF0aW9uVGltZS0obmV3IERhdGUpLmdldFRpbWUoKSxNYXRoLnBvdygyLDMxKS0xKX0sJGMucHJvdG90eXBlLnNldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUpe2lmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4JiZ0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSYmMCE9PU9iamVjdC5rZXlzKHQpLmxlbmd0aCl7dmFyIHI9dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgubG9hZFZUTGF5ZXJzKCk7Zm9yKHZhciBuIGluIHRoaXMuYnVja2V0cylpZihlLnN0eWxlLmhhc0xheWVyKG4pKXt2YXIgaT10aGlzLmJ1Y2tldHNbbl0sYT1pLmxheWVyc1swXS5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIixvPXJbYV0scz10W2FdO2lmKG8mJnMmJjAhPT1PYmplY3Qua2V5cyhzKS5sZW5ndGgpe2kudXBkYXRlKHMsbyx0aGlzLmltYWdlQXRsYXMmJnRoaXMuaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zfHx7fSk7dmFyIGw9ZSYmZS5zdHlsZSYmZS5zdHlsZS5nZXRMYXllcihuKTtsJiYodGhpcy5xdWVyeVBhZGRpbmc9TWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsbC5xdWVyeVJhZGl1cyhpKSkpfX19fSwkYy5wcm90b3R5cGUuaG9sZGluZ0ZvckZhZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsfSwkYy5wcm90b3R5cGUuc3ltYm9sRmFkZUZpbmlzaGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbHx8dGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsPFIubm93KCl9LCRjLnByb3RvdHlwZS5jbGVhckZhZGVIb2xkPWZ1bmN0aW9uKCl7dGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsPXZvaWQgMH0sJGMucHJvdG90eXBlLnNldEhvbGREdXJhdGlvbj1mdW5jdGlvbih0KXt0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWw9Ui5ub3coKSt0fSwkYy5wcm90b3R5cGUuc2V0RGVwZW5kZW5jaWVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXJbaVtuXV09ITA7dGhpcy5kZXBlbmRlbmNpZXNbdF09cn0sJGMucHJvdG90eXBlLmhhc0RlcGVuZGVuY3k9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT10aGlzLmRlcGVuZGVuY2llc1tuW3JdXTtpZihpKWZvcih2YXIgYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpaWYoaVtvW2FdXSlyZXR1cm4hMH1yZXR1cm4hMX07dmFyIHR1PXNlbGYucGVyZm9ybWFuY2UsZXU9ZnVuY3Rpb24odCl7dGhpcy5fbWFya3M9e3N0YXJ0Olt0LnVybCwic3RhcnQiXS5qb2luKCIjIiksZW5kOlt0LnVybCwiZW5kIl0uam9pbigiIyIpLG1lYXN1cmU6dC51cmwudG9TdHJpbmcoKX0sdHUubWFyayh0aGlzLl9tYXJrcy5zdGFydCl9O2V1LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0dS5tYXJrKHRoaXMuX21hcmtzLmVuZCk7dmFyIHQ9dHUuZ2V0RW50cmllc0J5TmFtZSh0aGlzLl9tYXJrcy5tZWFzdXJlKTtyZXR1cm4gMD09PXQubGVuZ3RoJiYodHUubWVhc3VyZSh0aGlzLl9tYXJrcy5tZWFzdXJlLHRoaXMuX21hcmtzLnN0YXJ0LHRoaXMuX21hcmtzLmVuZCksdD10dS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuX21hcmtzLm1lYXN1cmUpLHR1LmNsZWFyTWFya3ModGhpcy5fbWFya3Muc3RhcnQpLHR1LmNsZWFyTWFya3ModGhpcy5fbWFya3MuZW5kKSx0dS5jbGVhck1lYXN1cmVzKHRoaXMuX21hcmtzLm1lYXN1cmUpKSx0fSx0LkFjdG9yPUNjLHQuQWxwaGFJbWFnZT1mbyx0LkNhbm9uaWNhbFRpbGVJRD1qYyx0LkNvbGxpc2lvbkJveEFycmF5PVppLHQuQ29sb3I9S3QsdC5ERU1EYXRhPUhjLHQuRGF0YUNvbnN0YW50UHJvcGVydHk9cGksdC5EaWN0aW9uYXJ5Q29kZXI9R2MsdC5FWFRFTlQ9ODE5Mix0LkVycm9yRXZlbnQ9a3QsdC5FdmFsdWF0aW9uUGFyYW1ldGVycz1paSx0LkV2ZW50PVR0LHQuRXZlbnRlZD1NdCx0LkZlYXR1cmVJbmRleD1YYyx0LkZpbGxCdWNrZXQ9cnMsdC5GaWxsRXh0cnVzaW9uQnVja2V0PXhzLHQuSW1hZ2VBdGxhcz1kbCx0LkltYWdlUG9zaXRpb249ZmwsdC5MaW5lQnVja2V0PUNzLHQuTG5nTGF0PUljLHQuTG5nTGF0Qm91bmRzPVBjLHQuTWVyY2F0b3JDb29yZGluYXRlPU5jLHQuT05FX0VNPTI0LHQuT3ZlcnNjYWxlZFRpbGVJRD1WYyx0LlBvaW50PWksdC5Qb2ludCQxPWksdC5Qcm9wZXJ0aWVzPXlpLHQuUHJvdG9idWY9SHMsdC5SR0JBSW1hZ2U9cG8sdC5SZXF1ZXN0TWFuYWdlcj1xLHQuUmVxdWVzdFBlcmZvcm1hbmNlPWV1LHQuUmVzb3VyY2VUeXBlPWZ0LHQuU2VnbWVudFZlY3Rvcj1pYSx0LlNvdXJjZUZlYXR1cmVTdGF0ZT1aYyx0LlN0cnVjdEFycmF5TGF5b3V0MXVpMj1IaSx0LlN0cnVjdEFycmF5TGF5b3V0MmYxZjJpMTY9RGksdC5TdHJ1Y3RBcnJheUxheW91dDJpND1NaSx0LlN0cnVjdEFycmF5TGF5b3V0M3VpNj1GaSx0LlN0cnVjdEFycmF5TGF5b3V0NGk4PUFpLHQuU3ltYm9sQnVja2V0PWhjLHQuVGV4dHVyZT1TYyx0LlRpbGU9JGMsdC5UcmFuc2l0aW9uYWJsZT1zaSx0LlVuaWZvcm0xZj12YSx0LlVuaWZvcm0xaT1tYSx0LlVuaWZvcm0yZj15YSx0LlVuaWZvcm0zZj14YSx0LlVuaWZvcm00Zj1iYSx0LlVuaWZvcm1Db2xvcj1fYSx0LlVuaWZvcm1NYXRyaXg0Zj1UYSx0LlVud3JhcHBlZFRpbGVJRD1VYyx0LlZhbGlkYXRpb25FcnJvcj1TdCx0LldyaXRpbmdNb2RlPWdsLHQuWm9vbUhpc3Rvcnk9VW4sdC5hZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0fSx0LmFkZER5bmFtaWNBdHRyaWJ1dGVzPXNjLHQuYXN5bmNBbGw9ZnVuY3Rpb24odCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm4gcihudWxsLFtdKTt2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheSh0Lmxlbmd0aCksYT1udWxsO3QuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXtlKHQsKGZ1bmN0aW9uKHQsZSl7dCYmKGE9dCksaVtvXT1lLDA9PS0tbiYmcihhLGkpfSkpfSkpfSx0LmJlemllcj1vLHQuYmluZEFsbD1nLHQuYnJvd3Nlcj1SLHQuY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQ9ZnVuY3Rpb24odCl7Kyt1dD5vdCYmKHQuZ2V0QWN0b3IoKS5zZW5kKCJlbmZvcmNlQ2FjaGVTaXplTGltaXQiLGF0KSx1dD0wKX0sdC5jbGFtcD1sLHQuY2xlYXJUaWxlQ2FjaGU9ZnVuY3Rpb24odCl7dmFyIGU9c2VsZi5jYWNoZXMuZGVsZXRlKCJtYXBib3gtdGlsZXMiKTt0JiZlLmNhdGNoKHQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0pKX0sdC5jbGlwTGluZT1qbCx0LmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0bygxNik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlfSx0LmNsb25lJDE9eCx0LmNsb25lJDI9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHRvKDMpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlfSx0LmNvbGxpc2lvbkNpcmNsZUxheW91dD1Ocyx0LmNvbmZpZz1GLHQuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHRvKDE2KTtyZXR1cm4gdG8hPUZsb2F0MzJBcnJheSYmKHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCksdFswXT0xLHRbNV09MSx0WzEwXT0xLHRbMTVdPTEsdH0sdC5jcmVhdGUkMT1mdW5jdGlvbigpe3ZhciB0PW5ldyB0byg5KTtyZXR1cm4gdG8hPUZsb2F0MzJBcnJheSYmKHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNV09MCx0WzZdPTAsdFs3XT0wKSx0WzBdPTEsdFs0XT0xLHRbOF09MSx0fSx0LmNyZWF0ZSQyPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHRvKDQpO3JldHVybiB0byE9RmxvYXQzMkFycmF5JiYodFsxXT0wLHRbMl09MCksdFswXT0xLHRbM109MSx0fSx0LmNyZWF0ZUNvbW1vbmpzTW9kdWxlPWUsdC5jcmVhdGVFeHByZXNzaW9uPXFyLHQuY3JlYXRlTGF5b3V0PVRpLHQuY3JlYXRlU3R5bGVMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4iY3VzdG9tIj09PXQudHlwZT9uZXcgYmModCk6bmV3IF9jW3QudHlwZV0odCl9LHQuY3Jvc3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH0sdC5kZWVwRXF1YWw9ZnVuY3Rpb24gdChlLHIpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKCFBcnJheS5pc0FycmF5KHIpfHxlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCF0KGVbbl0scltuXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9PXIpe2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4hMTtpZihPYmplY3Qua2V5cyhlKS5sZW5ndGghPT1PYmplY3Qua2V5cyhyKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoIXQoZVtpXSxyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gZT09PXJ9LHQuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfSx0LmRvdCQxPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX0sdC5lYXNlPXMsdC5lbWl0VmFsaWRhdGlvbkVycm9ycz1Dbix0LmVuZHNXaXRoPW0sdC5lbmZvcmNlQ2FjaGVTaXplTGltaXQ9ZnVuY3Rpb24odCl7c3QoKSxRJiZRLnRoZW4oKGZ1bmN0aW9uKGUpe2Uua2V5cygpLnRoZW4oKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGgtdDtuKyspZS5kZWxldGUocltuXSl9KSl9KSl9LHQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZT1QbCx0LmV2YWx1YXRlU2l6ZUZvclpvb209SWwsdC5ldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0PSRsLHQuZXZlbnRlZD10aSx0LmV4dGVuZD11LHQuZmVhdHVyZUZpbHRlcj1ybix0LmZpbHRlck9iamVjdD15LHQuZnJvbVJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09cix0WzJdPTAsdFszXT0tcix0WzRdPW4sdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LHQuZ2V0QW5jaG9yQWxpZ25tZW50PUFsLHQuZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbj10Yyx0LmdldEFycmF5QnVmZmVyPXl0LHQuZ2V0SW1hZ2U9YnQsdC5nZXRKU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZ0KHUodCx7dHlwZToianNvbiJ9KSxlKX0sdC5nZXRSVExUZXh0UGx1Z2luU3RhdHVzPWVpLHQuZ2V0UmVmZXJyZXI9bXQsdC5nZXRWaWRlbz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7aS5tdXRlZD0hMCxpLm9ubG9hZHN0YXJ0PWZ1bmN0aW9uKCl7ZShudWxsLGkpfTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzb3VyY2UiKTtyPXRbYV0sbj12b2lkIDAsKG49c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLmhyZWY9ciwobi5wcm90b2NvbCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x8fG4uaG9zdCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24uaG9zdCkmJihpLmNyb3NzT3JpZ2luPSJBbm9ueW1vdXMiKSxvLnNyYz10W2FdLGkuYXBwZW5kQ2hpbGQobyl9cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe319fSx0LmlkZW50aXR5PWVvLHQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGg9ZVs5XSxmPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxnPWVbMTNdLG09ZVsxNF0sdj1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLFQ9aSpjLWEqbCxrPXUqZy1oKmQsTT11Km0tZipkLEE9dSp2LXAqZCxTPWgqbS1mKmcsRT1oKnYtcCpnLEM9Zip2LXAqbSxMPXkqQy14KkUrYipTK18qQS13Kk0rVCprO3JldHVybiBMPyh0WzBdPShzKkMtbCpFK2MqUykqKEw9MS9MKSx0WzFdPShpKkUtbipDLWEqUykqTCx0WzJdPShnKlQtbSp3K3YqXykqTCx0WzNdPShmKnctaCpULXAqXykqTCx0WzRdPShsKkEtbypDLWMqTSkqTCx0WzVdPShyKkMtaSpBK2EqTSkqTCx0WzZdPShtKmItZCpULXYqeCkqTCx0WzddPSh1KlQtZipiK3AqeCkqTCx0WzhdPShvKkUtcypBK2MqaykqTCx0WzldPShuKkEtcipFLWEqaykqTCx0WzEwXT0oZCp3LWcqYit2KnkpKkwsdFsxMV09KGgqYi11KnctcCp5KSpMLHRbMTJdPShzKk0tbypTLWwqaykqTCx0WzEzXT0ocipTLW4qTStpKmspKkwsdFsxNF09KGcqeC1kKl8tbSp5KSpMLHRbMTVdPSh1Kl8taCp4K2YqeSkqTCx0KTpudWxsfSx0LmlzQ2hhcj1Wbix0LmlzTWFwYm94VVJMPUgsdC5rZXlzRGlmZmVyZW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2Zvcih2YXIgbiBpbiB0KW4gaW4gZXx8ci5wdXNoKG4pO3JldHVybiByfSx0Lm1ha2VSZXF1ZXN0PXZ0LHQubWFwT2JqZWN0PXYsdC5tZXJjYXRvclhmcm9tTG5nPURjLHQubWVyY2F0b3JZZnJvbUxhdD1SYyx0Lm1lcmNhdG9yWmZyb21BbHRpdHVkZT1GYyx0Lm11bD1pbyx0Lm11bHRpcGx5PXJvLHQubXZ0PWdzLHQubm9ybWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9cipyK24qbitpKmk7cmV0dXJuIGE+MCYmKGE9MS9NYXRoLnNxcnQoYSkpLHRbMF09ZVswXSphLHRbMV09ZVsxXSphLHRbMl09ZVsyXSphLHR9LHQubnVtYmVyPVVlLHQub2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPWh0LHQub3J0aG89ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oZS1yKSxsPTEvKG4taSksYz0xLyhhLW8pO3JldHVybiB0WzBdPS0yKnMsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09LTIqbCx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MipjLHRbMTFdPTAsdFsxMl09KGUrcikqcyx0WzEzXT0oaStuKSpsLHRbMTRdPShvK2EpKmMsdFsxNV09MSx0fSx0LnBhcnNlR2x5cGhQQkY9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBIcyh0KS5yZWFkRmllbGRzKGxsLFtdKX0sdC5wYmY9SHMsdC5wZXJmb3JtU3ltYm9sTGF5b3V0PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3QuY3JlYXRlQXJyYXlzKCksdC50aWxlUGl4ZWxSYXRpbz04MTkyLyg1MTIqdC5vdmVyc2NhbGluZyksdC5jb21wYXJlVGV4dD17fSx0Lmljb25zTmVlZExpbmVhcj0hMTt2YXIgcz10LmxheWVyc1swXS5sYXlvdXQsbD10LmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlcyxjPXt9O2lmKCJjb21wb3NpdGUiPT09dC50ZXh0U2l6ZURhdGEua2luZCl7dmFyIHU9dC50ZXh0U2l6ZURhdGEsaD11Lm1heFpvb207Yy5jb21wb3NpdGVUZXh0U2l6ZXM9W2xbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IGlpKHUubWluWm9vbSksbyksbFsidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgaWkoaCksbyldfWlmKCJjb21wb3NpdGUiPT09dC5pY29uU2l6ZURhdGEua2luZCl7dmFyIGY9dC5pY29uU2l6ZURhdGEscD1mLm1heFpvb207Yy5jb21wb3NpdGVJY29uU2l6ZXM9W2xbImljb24tc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IGlpKGYubWluWm9vbSksbyksbFsiaWNvbi1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgaWkocCksbyldfWMubGF5b3V0VGV4dFNpemU9bFsidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgaWkodC56b29tKzEpLG8pLGMubGF5b3V0SWNvblNpemU9bFsiaWNvbi1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgaWkodC56b29tKzEpLG8pLGMudGV4dE1heFNpemU9bFsidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgaWkoMTgpKTtmb3IodmFyIGQ9MjQqcy5nZXQoInRleHQtbGluZS1oZWlnaHQiKSxnPSJtYXAiPT09cy5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJiJwb2ludCIhPT1zLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLG09cy5nZXQoInRleHQta2VlcC11cHJpZ2h0Iiksdj1zLmdldCgidGV4dC1zaXplIikseT1mdW5jdGlvbigpe3ZhciBhPWJbeF0sbD1zLmdldCgidGV4dC1mb250IikuZXZhbHVhdGUoYSx7fSxvKS5qb2luKCIsIiksdT12LmV2YWx1YXRlKGEse30sbyksaD1jLmxheW91dFRleHRTaXplLmV2YWx1YXRlKGEse30sbyksZj1jLmxheW91dEljb25TaXplLmV2YWx1YXRlKGEse30sbykscD17aG9yaXpvbnRhbDp7fSx2ZXJ0aWNhbDp2b2lkIDB9LHk9YS50ZXh0LHc9WzAsMF07aWYoeSl7dmFyIFQ9eS50b1N0cmluZygpLGs9MjQqcy5nZXQoInRleHQtbGV0dGVyLXNwYWNpbmciKS5ldmFsdWF0ZShhLHt9LG8pLE09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZihuPXJbZV0uY2hhckNvZGVBdCgwKSxWbi5BcmFiaWMobil8fFZuWyJBcmFiaWMgU3VwcGxlbWVudCJdKG4pfHxWblsiQXJhYmljIEV4dGVuZGVkLUEiXShuKXx8Vm5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSJdKG4pfHxWblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIl0obikpcmV0dXJuITE7dmFyIG47cmV0dXJuITB9KFQpP2s6MCxBPXMuZ2V0KCJ0ZXh0LWFuY2hvciIpLmV2YWx1YXRlKGEse30sbyksUz1zLmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKTtpZighUyl7dmFyIEU9cy5nZXQoInRleHQtcmFkaWFsLW9mZnNldCIpLmV2YWx1YXRlKGEse30sbyk7dz1FPyRsKEEsWzI0KkUsUWxdKTpzLmdldCgidGV4dC1vZmZzZXQiKS5ldmFsdWF0ZShhLHt9LG8pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDI0KnR9KSl9dmFyIEM9Zz8iY2VudGVyIjpzLmdldCgidGV4dC1qdXN0aWZ5IikuZXZhbHVhdGUoYSx7fSxvKSxMPXMuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksUD0icG9pbnQiPT09TD8yNCpzLmdldCgidGV4dC1tYXgtd2lkdGgiKS5ldmFsdWF0ZShhLHt9LG8pOjAsST1mdW5jdGlvbigpe3QuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmcW4oVCkmJihwLnZlcnRpY2FsPXlsKHksZSxyLGksbCxQLGQsQSwibGVmdCIsTSx3LGdsLnZlcnRpY2FsLCEwLEwsaCx1KSl9O2lmKCFnJiZTKXtmb3IodmFyIHo9ImF1dG8iPT09Qz9TLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRjKHQpfSkpOltDXSxPPSExLEQ9MDtEPHoubGVuZ3RoO0QrKyl7dmFyIFI9eltEXTtpZighcC5ob3Jpem9udGFsW1JdKWlmKE8pcC5ob3Jpem9udGFsW1JdPXAuaG9yaXpvbnRhbFswXTtlbHNle3ZhciBGPXlsKHksZSxyLGksbCxQLGQsImNlbnRlciIsUixNLHcsZ2wuaG9yaXpvbnRhbCwhMSxMLGgsdSk7RiYmKHAuaG9yaXpvbnRhbFtSXT1GLE89MT09PUYucG9zaXRpb25lZExpbmVzLmxlbmd0aCl9fUkoKX1lbHNleyJhdXRvIj09PUMmJihDPXRjKEEpKTt2YXIgQj15bCh5LGUscixpLGwsUCxkLEEsQyxNLHcsZ2wuaG9yaXpvbnRhbCwhMSxMLGgsdSk7QiYmKHAuaG9yaXpvbnRhbFtDXT1CKSxJKCkscW4oVCkmJmcmJm0mJihwLnZlcnRpY2FsPXlsKHksZSxyLGksbCxQLGQsQSxDLE0sdyxnbC52ZXJ0aWNhbCwhMSxMLGgsdSkpfX12YXIgTj12b2lkIDAsaj0hMTtpZihhLmljb24mJmEuaWNvbi5uYW1lKXt2YXIgVT1uW2EuaWNvbi5uYW1lXTtVJiYoTj1mdW5jdGlvbih0LGUscil7dmFyIG49QWwociksaT1lWzBdLXQuZGlzcGxheVNpemVbMF0qbi5ob3Jpem9udGFsQWxpZ24sYT1lWzFdLXQuZGlzcGxheVNpemVbMV0qbi52ZXJ0aWNhbEFsaWduO3JldHVybntpbWFnZTp0LHRvcDphLGJvdHRvbTphK3QuZGlzcGxheVNpemVbMV0sbGVmdDppLHJpZ2h0OmkrdC5kaXNwbGF5U2l6ZVswXX19KGlbYS5pY29uLm5hbWVdLHMuZ2V0KCJpY29uLW9mZnNldCIpLmV2YWx1YXRlKGEse30sbykscy5nZXQoImljb24tYW5jaG9yIikuZXZhbHVhdGUoYSx7fSxvKSksaj1VLnNkZix2b2lkIDA9PT10LnNkZkljb25zP3Quc2RmSWNvbnM9VS5zZGY6dC5zZGZJY29ucyE9PVUuc2RmJiZfKCJTdHlsZSBzaGVldCB3YXJuaW5nOiBDYW5ub3QgbWl4IFNERiBhbmQgbm9uLVNERiBpY29ucyBpbiBvbmUgYnVmZmVyIiksKFUucGl4ZWxSYXRpbyE9PXQucGl4ZWxSYXRpb3x8MCE9PXMuZ2V0KCJpY29uLXJvdGF0ZSIpLmNvbnN0YW50T3IoMSkpJiYodC5pY29uc05lZWRMaW5lYXI9ITApKX12YXIgVj1yYyhwLmhvcml6b250YWwpfHxwLnZlcnRpY2FsO3QuaWNvbnNJblRleHQ9ISFWJiZWLmljb25zSW5UZXh0LChWfHxOKSYmZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgaD1hLnRleHRNYXhTaXplLmV2YWx1YXRlKGUse30pO3ZvaWQgMD09PWgmJihoPW8pO3ZhciBmLHA9dC5sYXllcnNbMF0ubGF5b3V0LGQ9cC5nZXQoImljb24tb2Zmc2V0IikuZXZhbHVhdGUoZSx7fSx1KSxnPXJjKHIuaG9yaXpvbnRhbCksbT1vLzI0LHY9dC50aWxlUGl4ZWxSYXRpbyptLHk9dC50aWxlUGl4ZWxSYXRpbypoLzI0LHg9dC50aWxlUGl4ZWxSYXRpbypzLGI9dC50aWxlUGl4ZWxSYXRpbypwLmdldCgic3ltYm9sLXNwYWNpbmciKSx3PXAuZ2V0KCJ0ZXh0LXBhZGRpbmciKSp0LnRpbGVQaXhlbFJhdGlvLFQ9cC5nZXQoImljb24tcGFkZGluZyIpKnQudGlsZVBpeGVsUmF0aW8saz1wLmdldCgidGV4dC1tYXgtYW5nbGUiKS8xODAqTWF0aC5QSSxNPSJtYXAiPT09cC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJiJwb2ludCIhPT1wLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLEE9Im1hcCI9PT1wLmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmInBvaW50IiE9PXAuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksUz1wLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLEU9Yi8yLEM9cC5nZXQoImljb24tdGV4dC1maXQiKTtuJiYibm9uZSIhPT1DJiYodC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZyLnZlcnRpY2FsJiYoZj1FbChuLHIudmVydGljYWwsQyxwLmdldCgiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIiksZCxtKSksZyYmKG49RWwobixnLEMscC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpLGQsbSkpKTt2YXIgTD1mdW5jdGlvbihzLGgpe2gueDwwfHxoLng+PTgxOTJ8fGgueTwwfHxoLnk+PTgxOTJ8fGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcsbSx2LHkseCxiLHcsVCxrLE0pe3ZhciBBLFMsRSxDLEwsUD10LmFkZFRvTGluZVZlcnRleEFycmF5KGUsciksST0wLHo9MCxPPTAsRD0wLFI9LTEsRj0tMSxCPXt9LE49Y2EoIiIpLGo9MCxVPTA7aWYodm9pZCAwPT09cy5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUoInRleHQtcmFkaWFsLW9mZnNldCIpPyhqPShBPXMubGF5b3V0LmdldCgidGV4dC1vZmZzZXQiKS5ldmFsdWF0ZShiLHt9LGspLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDI0KnR9KSkpWzBdLFU9QVsxXSk6KGo9MjQqcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJhZGlhbC1vZmZzZXQiKS5ldmFsdWF0ZShiLHt9LGspLFU9UWwpLHQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmbi52ZXJ0aWNhbCl7dmFyIFY9cy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0ZSIpLmV2YWx1YXRlKGIse30saykrOTA7Qz1uZXcgWWwobCxlLGMsdSxoLG4udmVydGljYWwsZixwLGQsViksbyYmKEw9bmV3IFlsKGwsZSxjLHUsaCxvLG0sdixkLFYpKX1pZihpKXt2YXIgcT1zLmxheW91dC5nZXQoImljb24tcm90YXRlIikuZXZhbHVhdGUoYix7fSksSD0ibm9uZSIhPT1zLmxheW91dC5nZXQoImljb24tdGV4dC1maXQiKSxHPVVsKGkscSxULEgpLFk9bz9VbChvLHEsVCxIKTp2b2lkIDA7RT1uZXcgWWwobCxlLGMsdSxoLGksbSx2LCExLHEpLEk9NCpHLmxlbmd0aDt2YXIgVz10Lmljb25TaXplRGF0YSxaPW51bGw7InNvdXJjZSI9PT1XLmtpbmQ/KFo9WzEyOCpzLmxheW91dC5nZXQoImljb24tc2l6ZSIpLmV2YWx1YXRlKGIse30pXSlbMF0+MzI2NDAmJl8odC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgImljb24tc2l6ZSIgaXMgPj0gMjU1LiBSZWR1Y2UgeW91ciAiaWNvbi1zaXplIi4nKToiY29tcG9zaXRlIj09PVcua2luZCYmKChaPVsxMjgqdy5jb21wb3NpdGVJY29uU2l6ZXNbMF0uZXZhbHVhdGUoYix7fSxrKSwxMjgqdy5jb21wb3NpdGVJY29uU2l6ZXNbMV0uZXZhbHVhdGUoYix7fSxrKV0pWzBdPjMyNjQwfHxaWzFdPjMyNjQwKSYmXyh0LmxheWVySWRzWzBdKyc6IFZhbHVlIGZvciAiaWNvbi1zaXplIiBpcyA+PSAyNTUuIFJlZHVjZSB5b3VyICJpY29uLXNpemUiLicpLHQuYWRkU3ltYm9scyh0Lmljb24sRyxaLHgseSxiLCExLGUsUC5saW5lU3RhcnRJbmRleCxQLmxpbmVMZW5ndGgsLTEsayksUj10Lmljb24ucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoLTEsWSYmKHo9NCpZLmxlbmd0aCx0LmFkZFN5bWJvbHModC5pY29uLFksWix4LHksYixnbC52ZXJ0aWNhbCxlLFAubGluZVN0YXJ0SW5kZXgsUC5saW5lTGVuZ3RoLC0xLGspLEY9dC5pY29uLnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aC0xKX1mb3IodmFyIFggaW4gbi5ob3Jpem9udGFsKXt2YXIgSj1uLmhvcml6b250YWxbWF07aWYoIVMpe049Y2EoSi50ZXh0KTt2YXIgSz1zLmxheW91dC5nZXQoInRleHQtcm90YXRlIikuZXZhbHVhdGUoYix7fSxrKTtTPW5ldyBZbChsLGUsYyx1LGgsSixmLHAsZCxLKX12YXIgUT0xPT09Si5wb3NpdGlvbmVkTGluZXMubGVuZ3RoO2lmKE8rPWVjKHQsZSxKLGEscyxkLGIsZyxQLG4udmVydGljYWw/Z2wuaG9yaXpvbnRhbDpnbC5ob3Jpem9udGFsT25seSxRP09iamVjdC5rZXlzKG4uaG9yaXpvbnRhbCk6W1hdLEIsUix3LGspLFEpYnJlYWt9bi52ZXJ0aWNhbCYmKEQrPWVjKHQsZSxuLnZlcnRpY2FsLGEscyxkLGIsZyxQLGdsLnZlcnRpY2FsLFsidmVydGljYWwiXSxCLEYsdyxrKSk7dmFyICQ9Uz9TLmJveFN0YXJ0SW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsdHQ9Uz9TLmJveEVuZEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLGV0PUM/Qy5ib3hTdGFydEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLHJ0PUM/Qy5ib3hFbmRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxudD1FP0UuYm94U3RhcnRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxpdD1FP0UuYm94RW5kSW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsYXQ9TD9MLmJveFN0YXJ0SW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsb3Q9TD9MLmJveEVuZEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLHN0PS0xLGx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnQuY2lyY2xlRGlhbWV0ZXI/TWF0aC5tYXgodC5jaXJjbGVEaWFtZXRlcixlKTplfTtzdD1sdChTLHN0KSxzdD1sdChDLHN0KSxzdD1sdChFLHN0KTt2YXIgY3Q9KHN0PWx0KEwsc3QpKT4tMT8xOjA7Y3QmJihzdCo9TS8yNCksdC5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aD49aGMuTUFYX0dMWVBIUyYmXygiVG9vIG1hbnkgZ2x5cGhzIGJlaW5nIHJlbmRlcmVkIGluIGEgdGlsZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yOTA3Iiksdm9pZCAwIT09Yi5zb3J0S2V5JiZ0LmFkZFRvU29ydEtleVJhbmdlcyh0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGgsYi5zb3J0S2V5KSx0LnN5bWJvbEluc3RhbmNlcy5lbXBsYWNlQmFjayhlLngsZS55LEIucmlnaHQ+PTA/Qi5yaWdodDotMSxCLmNlbnRlcj49MD9CLmNlbnRlcjotMSxCLmxlZnQ+PTA/Qi5sZWZ0Oi0xLEIudmVydGljYWx8fC0xLFIsRixOLCQsdHQsZXQscnQsbnQsaXQsYXQsb3QsYyxPLEQsSSx6LGN0LDAsZixqLFUsc3QpfSh0LGgscyxyLG4saSxmLHQubGF5ZXJzWzBdLHQuY29sbGlzaW9uQm94QXJyYXksZS5pbmRleCxlLnNvdXJjZUxheWVySW5kZXgsdC5pbmRleCx2LHcsTSxsLHgsVCxBLGQsZSxhLGMsdSxvKX07aWYoImxpbmUiPT09Uylmb3IodmFyIFA9MCxJPWpsKGUuZ2VvbWV0cnksMCwwLDgxOTIsODE5Mik7UDxJLmxlbmd0aDtQKz0xKWZvcih2YXIgej1JW1BdLE89MCxEPU5sKHosYixrLHIudmVydGljYWx8fGcsbiwyNCx5LHQub3ZlcnNjYWxpbmcsODE5Mik7TzxELmxlbmd0aDtPKz0xKXt2YXIgUj1EW09dO2cmJm5jKHQsZy50ZXh0LEUsUil8fEwoeixSKX1lbHNlIGlmKCJsaW5lLWNlbnRlciI9PT1TKWZvcih2YXIgRj0wLEI9ZS5nZW9tZXRyeTtGPEIubGVuZ3RoO0YrPTEpe3ZhciBOPUJbRl07aWYoTi5sZW5ndGg+MSl7dmFyIGo9QmwoTixrLHIudmVydGljYWx8fGcsbiwyNCx5KTtqJiZMKE4sail9fWVsc2UgaWYoIlBvbHlnb24iPT09ZS50eXBlKWZvcih2YXIgVT0wLFY9UW8oZS5nZW9tZXRyeSwwKTtVPFYubGVuZ3RoO1UrPTEpe3ZhciBxPVZbVV0sSD1YbChxLDE2KTtMKHFbMF0sbmV3IENsKEgueCxILnksMCkpfWVsc2UgaWYoIkxpbmVTdHJpbmciPT09ZS50eXBlKWZvcih2YXIgRz0wLFk9ZS5nZW9tZXRyeTtHPFkubGVuZ3RoO0crPTEpe3ZhciBXPVlbR107TChXLG5ldyBDbChXWzBdLngsV1swXS55LDApKX1lbHNlIGlmKCJQb2ludCI9PT1lLnR5cGUpZm9yKHZhciBaPTAsWD1lLmdlb21ldHJ5O1o8WC5sZW5ndGg7Wis9MSlmb3IodmFyIEo9MCxLPVhbWl07SjxLLmxlbmd0aDtKKz0xKXt2YXIgUT1LW0pdO0woW1FdLG5ldyBDbChRLngsUS55LDApKX19KHQsYSxwLE4sbixjLGgsZix3LGosbyl9LHg9MCxiPXQuZmVhdHVyZXM7eDxiLmxlbmd0aDt4Kz0xKXkoKTthJiZ0LmdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzKCl9LHQucGVyc3BlY3RpdmU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvPTEvTWF0aC50YW4oZS8yKTtyZXR1cm4gdFswXT1vL3IsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09byx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTVdPTAsbnVsbCE9aSYmaSE9PTEvMD8odFsxMF09KGkrbikqKGE9MS8obi1pKSksdFsxNF09MippKm4qYSk6KHRbMTBdPS0xLHRbMTRdPS0yKm4pLHR9LHQucGljaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aSBpbiB0JiYocltpXT10W2ldKX1yZXR1cm4gcn0sdC5wbHVnaW49bmksdC5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb249QmEsdC5wb3N0TWFwTG9hZEV2ZW50PWl0LHQucG9zdFR1cm5zdGlsZUV2ZW50PXJ0LHQucG90cGFjaz1obCx0LnJlZlByb3BlcnRpZXM9WyJ0eXBlIiwic291cmNlIiwic291cmNlLWxheWVyIiwibWluem9vbSIsIm1heHpvb20iLCJmaWx0ZXIiLCJsYXlvdXQiXSx0LnJlZ2lzdGVyPURuLHQucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdCh7cGx1Z2luU3RhdHVzOkpuLHBsdWdpblVSTDpLbn0pLHRpLm9uKCJwbHVnaW5TdGF0ZUNoYW5nZSIsdCksdH0sdC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpO3JldHVybiB0WzBdPW4qbCthKnMsdFsxXT1pKmwrbypzLHRbMl09biotcythKmwsdFszXT1pKi1zK28qbCx0fSx0LnJvdGF0ZVg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzRdLG89ZVs1XSxzPWVbNl0sbD1lWzddLGM9ZVs4XSx1PWVbOV0saD1lWzEwXSxmPWVbMTFdO3JldHVybiBlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFs0XT1hKmkrYypuLHRbNV09byppK3Uqbix0WzZdPXMqaStoKm4sdFs3XT1sKmkrZipuLHRbOF09YyppLWEqbix0WzldPXUqaS1vKm4sdFsxMF09aCppLXMqbix0WzExXT1mKmktbCpuLHR9LHQucm90YXRlWj1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxoPWVbNl0sZj1lWzddO3JldHVybiBlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbMF09YSppK2Mqbix0WzFdPW8qaSt1Km4sdFsyXT1zKmkraCpuLHRbM109bCppK2Yqbix0WzRdPWMqaS1hKm4sdFs1XT11KmktbypuLHRbNl09aCppLXMqbix0WzddPWYqaS1sKm4sdH0sdC5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49clswXSxpPXJbMV0sYT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qaSx0WzVdPWVbNV0qaSx0WzZdPWVbNl0qaSx0WzddPWVbN10qaSx0WzhdPWVbOF0qYSx0WzldPWVbOV0qYSx0WzEwXT1lWzEwXSphLHRbMTFdPWVbMTFdKmEsdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH0sdC5zY2FsZSQxPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdH0sdC5zY2FsZSQyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH0sdC5zZXRDYWNoZUxpbWl0cz1mdW5jdGlvbih0LGUpe2F0PXQsb3Q9ZX0sdC5zZXRSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1yJiYocj0hMSksImRlZmVycmVkIj09PUpufHwibG9hZGluZyI9PT1Kbnx8ImxvYWRlZCI9PT1Kbil0aHJvdyBuZXcgRXJyb3IoInNldFJUTFRleHRQbHVnaW4gY2Fubm90IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4iKTtLbj1SLnJlc29sdmVVUkwodCksSm49ImRlZmVycmVkIixYbj1lLCRuKCkscnx8cmkoKX0sdC5zcGhlcmljYWxUb0NhcnRlc2lhbj1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIHIrPTkwLHIqPU1hdGguUEkvMTgwLG4qPU1hdGguUEkvMTgwLHt4OmUqTWF0aC5jb3MocikqTWF0aC5zaW4obikseTplKk1hdGguc2luKHIpKk1hdGguc2luKG4pLHo6ZSpNYXRoLmNvcyhuKX19LHQuc3FyTGVuPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdO3JldHVybiBlKmUrcipyfSx0LnN0eWxlU3BlYz1BdCx0LnN1Yj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHR9LHQuc3ltYm9sU2l6ZT16bCx0LnRyYW5zZm9ybU1hdDM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH0sdC50cmFuc2Zvcm1NYXQ0PWFvLHQudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZz1yWzBdLG09clsxXSx2PXJbMl07cmV0dXJuIGU9PT10Pyh0WzEyXT1lWzBdKmcrZVs0XSptK2VbOF0qditlWzEyXSx0WzEzXT1lWzFdKmcrZVs1XSptK2VbOV0qditlWzEzXSx0WzE0XT1lWzJdKmcrZVs2XSptK2VbMTBdKnYrZVsxNF0sdFsxNV09ZVszXSpnK2VbN10qbStlWzExXSp2K2VbMTVdKTooaT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGg9ZVs4XSxmPWVbOV0scD1lWzEwXSxkPWVbMTFdLHRbMF09bj1lWzBdLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT1jLHRbN109dSx0WzhdPWgsdFs5XT1mLHRbMTBdPXAsdFsxMV09ZCx0WzEyXT1uKmcrcyptK2gqditlWzEyXSx0WzEzXT1pKmcrbCptK2YqditlWzEzXSx0WzE0XT1hKmcrYyptK3AqditlWzE0XSx0WzE1XT1vKmcrdSptK2QqditlWzE1XSksdH0sdC50cmlnZ2VyUGx1Z2luQ29tcGxldGlvbkV2ZW50PVFuLHQudW5pcXVlSWQ9Zix0LnZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcj1mdW5jdGlvbih0KXt2YXIgZT1bXSxyPXQuaWQ7cmV0dXJuIHZvaWQgMD09PXImJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJpZCInfSksdm9pZCAwPT09dC5yZW5kZXImJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBtaXNzaW5nIHJlcXVpcmVkIG1ldGhvZCAicmVuZGVyIid9KSx0LnJlbmRlcmluZ01vZGUmJiIyZCIhPT10LnJlbmRlcmluZ01vZGUmJiIzZCIhPT10LnJlbmRlcmluZ01vZGUmJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBwcm9wZXJ0eSAicmVuZGVyaW5nTW9kZSIgbXVzdCBiZSBlaXRoZXIgIjJkIiBvciAiM2QiJ30pLGV9LHQudmFsaWRhdGVMaWdodD1Bbix0LnZhbGlkYXRlU3R5bGU9TW4sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LnZlY3RvclRpbGU9Z3MsdC52ZXJzaW9uPSIxLjEwLjEiLHQud2Fybk9uY2U9Xyx0LndlYnBTdXBwb3J0ZWQ9Qix0LndpbmRvdz1zZWxmLHQud3JhcD1jfSkpLG4oMCwoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10eXBlb2YgdDtpZigibnVtYmVyIj09PXJ8fCJib29sZWFuIj09PXJ8fCJzdHJpbmciPT09cnx8bnVsbD09dClyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBuPSJbIixpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSluKz1lKGFbaV0pKyIsIjtyZXR1cm4gbisiXSJ9Zm9yKHZhciBvPU9iamVjdC5rZXlzKHQpLnNvcnQoKSxzPSJ7IixsPTA7bDxvLmxlbmd0aDtsKyspcys9SlNPTi5zdHJpbmdpZnkob1tsXSkrIjoiK2UodFtvW2xdXSkrIiwiO3JldHVybiBzKyJ9In1mdW5jdGlvbiByKHIpe2Zvcih2YXIgbj0iIixpPTAsYT10LnJlZlByb3BlcnRpZXM7aTxhLmxlbmd0aDtpKz0xKW4rPSIvIitlKHJbYVtpXV0pO3JldHVybiBufXZhciBuPWZ1bmN0aW9uKHQpe3RoaXMua2V5Q2FjaGU9e30sdCYmdGhpcy5yZXBsYWNlKHQpfTtuLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheWVyQ29uZmlncz17fSx0aGlzLl9sYXllcnM9e30sdGhpcy51cGRhdGUodCxbXSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT10aGlzLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO3RoaXMuX2xheWVyQ29uZmlnc1tzLmlkXT1zO3ZhciBsPXRoaXMuX2xheWVyc1tzLmlkXT10LmNyZWF0ZVN0eWxlTGF5ZXIocyk7bC5fZmVhdHVyZUZpbHRlcj10LmZlYXR1cmVGaWx0ZXIobC5maWx0ZXIpLHRoaXMua2V5Q2FjaGVbcy5pZF0mJmRlbGV0ZSB0aGlzLmtleUNhY2hlW3MuaWRdfWZvcih2YXIgYz0wLHU9bjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBoPXVbY107ZGVsZXRlIHRoaXMua2V5Q2FjaGVbaF0sZGVsZXRlIHRoaXMuX2xheWVyQ29uZmlnc1toXSxkZWxldGUgdGhpcy5fbGF5ZXJzW2hdfXRoaXMuZmFtaWxpZXNCeVNvdXJjZT17fTtmb3IodmFyIGY9MCxwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXt9LGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9ZSYmZVt0W2ldLmlkXXx8cih0W2ldKTtlJiYoZVt0W2ldLmlkXT1hKTt2YXIgbz1uW2FdO298fChvPW5bYV09W10pLG8ucHVzaCh0W2ldKX12YXIgcz1bXTtmb3IodmFyIGwgaW4gbilzLnB1c2gobltsXSk7cmV0dXJuIHN9KHQudmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncyksdGhpcy5rZXlDYWNoZSk7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGkuX2xheWVyc1t0LmlkXX0pKSxnPWRbMF07aWYoIm5vbmUiIT09Zy52aXNpYmlsaXR5KXt2YXIgbT1nLnNvdXJjZXx8IiIsdj10aGlzLmZhbWlsaWVzQnlTb3VyY2VbbV07dnx8KHY9dGhpcy5mYW1pbGllc0J5U291cmNlW21dPXt9KTt2YXIgeT1nLnNvdXJjZUxheWVyfHwiX2dlb2pzb25UaWxlTGF5ZXIiLHg9dlt5XTt4fHwoeD12W3ldPVtdKSx4LnB1c2goZCl9fX07dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHI9e30sbj1bXTtmb3IodmFyIGkgaW4gZSl7dmFyIGE9ZVtpXSxvPXJbaV09e307Zm9yKHZhciBzIGluIGEpe3ZhciBsPWFbK3NdO2lmKGwmJjAhPT1sLmJpdG1hcC53aWR0aCYmMCE9PWwuYml0bWFwLmhlaWdodCl7dmFyIGM9e3g6MCx5OjAsdzpsLmJpdG1hcC53aWR0aCsyLGg6bC5iaXRtYXAuaGVpZ2h0KzJ9O24ucHVzaChjKSxvW3NdPXtyZWN0OmMsbWV0cmljczpsLm1ldHJpY3N9fX19dmFyIHU9dC5wb3RwYWNrKG4pLGg9bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6dS53fHwxLGhlaWdodDp1Lmh8fDF9KTtmb3IodmFyIGYgaW4gZSl7dmFyIHA9ZVtmXTtmb3IodmFyIGQgaW4gcCl7dmFyIGc9cFsrZF07aWYoZyYmMCE9PWcuYml0bWFwLndpZHRoJiYwIT09Zy5iaXRtYXAuaGVpZ2h0KXt2YXIgbT1yW2ZdW2RdLnJlY3Q7dC5BbHBoYUltYWdlLmNvcHkoZy5iaXRtYXAsaCx7eDowLHk6MH0se3g6bS54KzEseTptLnkrMX0sZy5iaXRtYXApfX19dGhpcy5pbWFnZT1oLHRoaXMucG9zaXRpb25zPXJ9O3QucmVnaXN0ZXIoIkdseXBoQXRsYXMiLGkpO3ZhciBhPWZ1bmN0aW9uKGUpe3RoaXMudGlsZUlEPW5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS50aWxlSUQub3ZlcnNjYWxlZFosZS50aWxlSUQud3JhcCxlLnRpbGVJRC5jYW5vbmljYWwueixlLnRpbGVJRC5jYW5vbmljYWwueCxlLnRpbGVJRC5jYW5vbmljYWwueSksdGhpcy51aWQ9ZS51aWQsdGhpcy56b29tPWUuem9vbSx0aGlzLnBpeGVsUmF0aW89ZS5waXhlbFJhdGlvLHRoaXMudGlsZVNpemU9ZS50aWxlU2l6ZSx0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLm92ZXJzY2FsaW5nPXRoaXMudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzPWUuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuY29sbGVjdFJlc291cmNlVGltaW5nPSEhZS5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM9ISFlLnJldHVybkRlcGVuZGVuY2llcyx0aGlzLnByb21vdGVJZD1lLnByb21vdGVJZH07ZnVuY3Rpb24gbyhlLHIsbil7Zm9yKHZhciBpPW5ldyB0LkV2YWx1YXRpb25QYXJhbWV0ZXJzKHIpLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKW9bYV0ucmVjYWxjdWxhdGUoaSxuKX1mdW5jdGlvbiBzKGUscil7dmFyIG49dC5nZXRBcnJheUJ1ZmZlcihlLnJlcXVlc3QsKGZ1bmN0aW9uKGUsbixpLGEpe2U/cihlKTpuJiZyKG51bGwse3ZlY3RvclRpbGU6bmV3IHQudmVjdG9yVGlsZS5WZWN0b3JUaWxlKG5ldyB0LnBiZihuKSkscmF3RGF0YTpuLGNhY2hlQ29udHJvbDppLGV4cGlyZXM6YX0pfSkpO3JldHVybiBmdW5jdGlvbigpe24uY2FuY2VsKCkscigpfX1hLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHIsbixhLHMpe3ZhciBsPXRoaXM7dGhpcy5zdGF0dXM9InBhcnNpbmciLHRoaXMuZGF0YT1lLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9bmV3IHQuQ29sbGlzaW9uQm94QXJyYXk7dmFyIGM9bmV3IHQuRGljdGlvbmFyeUNvZGVyKE9iamVjdC5rZXlzKGUubGF5ZXJzKS5zb3J0KCkpLHU9bmV3IHQuRmVhdHVyZUluZGV4KHRoaXMudGlsZUlELHRoaXMucHJvbW90ZUlkKTt1LmJ1Y2tldExheWVySURzPVtdO3ZhciBoLGYscCxkLGc9e30sbT17ZmVhdHVyZUluZGV4OnUsaWNvbkRlcGVuZGVuY2llczp7fSxwYXR0ZXJuRGVwZW5kZW5jaWVzOnt9LGdseXBoRGVwZW5kZW5jaWVzOnt9LGF2YWlsYWJsZUltYWdlczpufSx2PXIuZmFtaWxpZXNCeVNvdXJjZVt0aGlzLnNvdXJjZV07Zm9yKHZhciB5IGluIHYpe3ZhciB4PWUubGF5ZXJzW3ldO2lmKHgpezE9PT14LnZlcnNpb24mJnQud2Fybk9uY2UoJ1ZlY3RvciB0aWxlIHNvdXJjZSAiJyt0aGlzLnNvdXJjZSsnIiBsYXllciAiJyt5KyciIGRvZXMgbm90IHVzZSB2ZWN0b3IgdGlsZSBzcGVjIHYyIGFuZCB0aGVyZWZvcmUgbWF5IGhhdmUgc29tZSByZW5kZXJpbmcgZXJyb3JzLicpO2Zvcih2YXIgYj1jLmVuY29kZSh5KSxfPVtdLHc9MDt3PHgubGVuZ3RoO3crKyl7dmFyIFQ9eC5mZWF0dXJlKHcpLGs9dS5nZXRJZChULHkpO18ucHVzaCh7ZmVhdHVyZTpULGlkOmssaW5kZXg6dyxzb3VyY2VMYXllckluZGV4OmJ9KX1mb3IodmFyIE09MCxBPXZbeV07TTxBLmxlbmd0aDtNKz0xKXt2YXIgUz1BW01dLEU9U1swXTtFLm1pbnpvb20mJnRoaXMuem9vbTxNYXRoLmZsb29yKEUubWluem9vbSl8fEUubWF4em9vbSYmdGhpcy56b29tPj1FLm1heHpvb218fCJub25lIiE9PUUudmlzaWJpbGl0eSYmKG8oUyx0aGlzLnpvb20sbiksKGdbRS5pZF09RS5jcmVhdGVCdWNrZXQoe2luZGV4OnUuYnVja2V0TGF5ZXJJRHMubGVuZ3RoLGxheWVyczpTLHpvb206dGhpcy56b29tLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvLG92ZXJzY2FsaW5nOnRoaXMub3ZlcnNjYWxpbmcsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxzb3VyY2VMYXllckluZGV4OmIsc291cmNlSUQ6dGhpcy5zb3VyY2V9KSkucG9wdWxhdGUoXyxtLHRoaXMudGlsZUlELmNhbm9uaWNhbCksdS5idWNrZXRMYXllcklEcy5wdXNoKFMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSkpfX19dmFyIEM9dC5tYXBPYmplY3QobS5nbHlwaERlcGVuZGVuY2llcywoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChOdW1iZXIpfSkpO09iamVjdC5rZXlzKEMpLmxlbmd0aD9hLnNlbmQoImdldEdseXBocyIse3VpZDp0aGlzLnVpZCxzdGFja3M6Q30sKGZ1bmN0aW9uKHQsZSl7aHx8KGg9dCxmPWUsSS5jYWxsKGwpKX0pKTpmPXt9O3ZhciBMPU9iamVjdC5rZXlzKG0uaWNvbkRlcGVuZGVuY2llcyk7TC5sZW5ndGg/YS5zZW5kKCJnZXRJbWFnZXMiLHtpY29uczpMLHNvdXJjZTp0aGlzLnNvdXJjZSx0aWxlSUQ6dGhpcy50aWxlSUQsdHlwZToiaWNvbnMifSwoZnVuY3Rpb24odCxlKXtofHwoaD10LHA9ZSxJLmNhbGwobCkpfSkpOnA9e307dmFyIFA9T2JqZWN0LmtleXMobS5wYXR0ZXJuRGVwZW5kZW5jaWVzKTtmdW5jdGlvbiBJKCl7aWYoaClyZXR1cm4gcyhoKTtpZihmJiZwJiZkKXt2YXIgZT1uZXcgaShmKSxyPW5ldyB0LkltYWdlQXRsYXMocCxkKTtmb3IodmFyIGEgaW4gZyl7dmFyIGw9Z1thXTtsIGluc3RhbmNlb2YgdC5TeW1ib2xCdWNrZXQ/KG8obC5sYXllcnMsdGhpcy56b29tLG4pLHQucGVyZm9ybVN5bWJvbExheW91dChsLGYsZS5wb3NpdGlvbnMscCxyLmljb25Qb3NpdGlvbnMsdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy50aWxlSUQuY2Fub25pY2FsKSk6bC5oYXNQYXR0ZXJuJiYobCBpbnN0YW5jZW9mIHQuTGluZUJ1Y2tldHx8bCBpbnN0YW5jZW9mIHQuRmlsbEJ1Y2tldHx8bCBpbnN0YW5jZW9mIHQuRmlsbEV4dHJ1c2lvbkJ1Y2tldCkmJihvKGwubGF5ZXJzLHRoaXMuem9vbSxuKSxsLmFkZEZlYXR1cmVzKG0sdGhpcy50aWxlSUQuY2Fub25pY2FsLHIucGF0dGVyblBvc2l0aW9ucykpfXRoaXMuc3RhdHVzPSJkb25lIixzKG51bGwse2J1Y2tldHM6dC52YWx1ZXMoZykuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5pc0VtcHR5KCl9KSksZmVhdHVyZUluZGV4OnUsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxnbHlwaEF0bGFzSW1hZ2U6ZS5pbWFnZSxpbWFnZUF0bGFzOnIsZ2x5cGhNYXA6dGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM/ZjpudWxsLGljb25NYXA6dGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM/cDpudWxsLGdseXBoUG9zaXRpb25zOnRoaXMucmV0dXJuRGVwZW5kZW5jaWVzP2UucG9zaXRpb25zOm51bGx9KX19UC5sZW5ndGg/YS5zZW5kKCJnZXRJbWFnZXMiLHtpY29uczpQLHNvdXJjZTp0aGlzLnNvdXJjZSx0aWxlSUQ6dGhpcy50aWxlSUQsdHlwZToicGF0dGVybnMifSwoZnVuY3Rpb24odCxlKXtofHwoaD10LGQ9ZSxJLmNhbGwobCkpfSkpOmQ9e30sSS5jYWxsKHRoaXMpfTt2YXIgbD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmFjdG9yPXQsdGhpcy5sYXllckluZGV4PWUsdGhpcy5hdmFpbGFibGVJbWFnZXM9cix0aGlzLmxvYWRWZWN0b3JEYXRhPW58fHMsdGhpcy5sb2FkaW5nPXt9LHRoaXMubG9hZGVkPXt9fTtsLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1lLnVpZDt0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9e30pO3ZhciBvPSEhKGUmJmUucmVxdWVzdCYmZS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZykmJm5ldyB0LlJlcXVlc3RQZXJmb3JtYW5jZShlLnJlcXVlc3QpLHM9dGhpcy5sb2FkaW5nW2ldPW5ldyBhKGUpO3MuYWJvcnQ9dGhpcy5sb2FkVmVjdG9yRGF0YShlLChmdW5jdGlvbihlLGEpe2lmKGRlbGV0ZSBuLmxvYWRpbmdbaV0sZXx8IWEpcmV0dXJuIHMuc3RhdHVzPSJkb25lIixuLmxvYWRlZFtpXT1zLHIoZSk7dmFyIGw9YS5yYXdEYXRhLGM9e307YS5leHBpcmVzJiYoYy5leHBpcmVzPWEuZXhwaXJlcyksYS5jYWNoZUNvbnRyb2wmJihjLmNhY2hlQ29udHJvbD1hLmNhY2hlQ29udHJvbCk7dmFyIHU9e307aWYobyl7dmFyIGg9by5maW5pc2goKTtoJiYodS5yZXNvdXJjZVRpbWluZz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSl9cy52ZWN0b3JUaWxlPWEudmVjdG9yVGlsZSxzLnBhcnNlKGEudmVjdG9yVGlsZSxuLmxheWVySW5kZXgsbi5hdmFpbGFibGVJbWFnZXMsbi5hY3RvciwoZnVuY3Rpb24oZSxuKXtpZihlfHwhbilyZXR1cm4gcihlKTtyKG51bGwsdC5leHRlbmQoe3Jhd1RpbGVEYXRhOmwuc2xpY2UoMCl9LG4sYyx1KSl9KSksbi5sb2FkZWQ9bi5sb2FkZWR8fHt9LG4ubG9hZGVkW2ldPXN9KSl9LGwucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49dGhpcy5sb2FkZWQsaT10LnVpZCxhPXRoaXM7aWYobiYmbltpXSl7dmFyIG89bltpXTtvLnNob3dDb2xsaXNpb25Cb3hlcz10LnNob3dDb2xsaXNpb25Cb3hlczt2YXIgcz1mdW5jdGlvbih0LG4pe3ZhciBpPW8ucmVsb2FkQ2FsbGJhY2s7aSYmKGRlbGV0ZSBvLnJlbG9hZENhbGxiYWNrLG8ucGFyc2Uoby52ZWN0b3JUaWxlLGEubGF5ZXJJbmRleCxyLmF2YWlsYWJsZUltYWdlcyxhLmFjdG9yLGkpKSxlKHQsbil9OyJwYXJzaW5nIj09PW8uc3RhdHVzP28ucmVsb2FkQ2FsbGJhY2s9czoiZG9uZSI9PT1vLnN0YXR1cyYmKG8udmVjdG9yVGlsZT9vLnBhcnNlKG8udmVjdG9yVGlsZSx0aGlzLmxheWVySW5kZXgsdGhpcy5hdmFpbGFibGVJbWFnZXMsdGhpcy5hY3RvcixzKTpzKCkpfX0sbC5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2FkaW5nLG49dC51aWQ7ciYmcltuXSYmcltuXS5hYm9ydCYmKHJbbl0uYWJvcnQoKSxkZWxldGUgcltuXSksZSgpfSxsLnByb3RvdHlwZS5yZW1vdmVUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2FkZWQsbj10LnVpZDtyJiZyW25dJiZkZWxldGUgcltuXSxlKCl9O3ZhciBjPXQud2luZG93LkltYWdlQml0bWFwLHU9ZnVuY3Rpb24oKXt0aGlzLmxvYWRlZD17fX07ZnVuY3Rpb24gaCh0LGUpe2lmKDAhPT10Lmxlbmd0aCl7Zih0WzBdLGUpO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKWYodFtyXSwhZSl9fWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIHI9MCxuPTAsaT10Lmxlbmd0aCxhPWktMTtuPGk7YT1uKyspcis9KHRbbl1bMF0tdFthXVswXSkqKHRbYV1bMV0rdFtuXVsxXSk7cj49MCE9ISFlJiZ0LnJldmVyc2UoKX11LnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPWUudWlkLGk9ZS5lbmNvZGluZyxhPWUucmF3SW1hZ2VEYXRhLG89YyYmYSBpbnN0YW5jZW9mIGM/dGhpcy5nZXRJbWFnZURhdGEoYSk6YSxzPW5ldyB0LkRFTURhdGEobixvLGkpO3RoaXMubG9hZGVkPXRoaXMubG9hZGVkfHx7fSx0aGlzLmxvYWRlZFtuXT1zLHIobnVsbCxzKX0sdS5wcm90b3R5cGUuZ2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKGUpe3RoaXMub2Zmc2NyZWVuQ2FudmFzJiZ0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHR8fCh0aGlzLm9mZnNjcmVlbkNhbnZhcz1uZXcgT2Zmc2NyZWVuQ2FudmFzKGUud2lkdGgsZS5oZWlnaHQpLHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dD10aGlzLm9mZnNjcmVlbkNhbnZhcy5nZXRDb250ZXh0KCIyZCIpKSx0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aD1lLndpZHRoLHRoaXMub2Zmc2NyZWVuQ2FudmFzLmhlaWdodD1lLmhlaWdodCx0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpO3ZhciByPXRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoLTEsLTEsZS53aWR0aCsyLGUuaGVpZ2h0KzIpO3JldHVybiB0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KDAsMCx0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aCx0aGlzLm9mZnNjcmVlbkNhbnZhcy5oZWlnaHQpLG5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6ci53aWR0aCxoZWlnaHQ6ci5oZWlnaHR9LHIuZGF0YSl9LHUucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2FkZWQscj10LnVpZDtlJiZlW3JdJiZkZWxldGUgZVtyXX07dmFyIHA9dC52ZWN0b3JUaWxlLlZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04sZD1mdW5jdGlvbihlKXt0aGlzLl9mZWF0dXJlPWUsdGhpcy5leHRlbnQ9dC5FWFRFTlQsdGhpcy50eXBlPWUudHlwZSx0aGlzLnByb3BlcnRpZXM9ZS50YWdzLCJpZCJpbiBlJiYhaXNOYU4oZS5pZCkmJih0aGlzLmlkPXBhcnNlSW50KGUuaWQsMTApKX07ZC5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7aWYoMT09PXRoaXMuX2ZlYXR1cmUudHlwZSl7Zm9yKHZhciBlPVtdLHI9MCxuPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2UucHVzaChbbmV3IHQuUG9pbnQkMShpWzBdLGlbMV0pXSl9cmV0dXJuIGV9Zm9yKHZhciBhPVtdLG89MCxzPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7bzxzLmxlbmd0aDtvKz0xKXtmb3IodmFyIGw9W10sYz0wLHU9c1tvXTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBoPXVbY107bC5wdXNoKG5ldyB0LlBvaW50JDEoaFswXSxoWzFdKSl9YS5wdXNoKGwpfXJldHVybiBhfSxkLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3JldHVybiBwLmNhbGwodGhpcyx0LGUscil9O3ZhciBnPWZ1bmN0aW9uKGUpe3RoaXMubGF5ZXJzPXtfZ2VvanNvblRpbGVMYXllcjp0aGlzfSx0aGlzLm5hbWU9Il9nZW9qc29uVGlsZUxheWVyIix0aGlzLmV4dGVudD10LkVYVEVOVCx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLl9mZWF0dXJlcz1lfTtnLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZCh0aGlzLl9mZWF0dXJlc1t0XSl9O3ZhciBtPXQudmVjdG9yVGlsZS5WZWN0b3JUaWxlRmVhdHVyZSx2PXk7ZnVuY3Rpb24geSh0LGUpe3RoaXMub3B0aW9ucz1lfHx7fSx0aGlzLmZlYXR1cmVzPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9ZnVuY3Rpb24geCh0LGUpe3RoaXMuaWQ9Im51bWJlciI9PXR5cGVvZiB0LmlkP3QuaWQ6dm9pZCAwLHRoaXMudHlwZT10LnR5cGUsdGhpcy5yYXdHZW9tZXRyeT0xPT09dC50eXBlP1t0Lmdlb21ldHJ5XTp0Lmdlb21ldHJ5LHRoaXMucHJvcGVydGllcz10LnRhZ3MsdGhpcy5leHRlbnQ9ZXx8NDA5Nn15LnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeCh0aGlzLmZlYXR1cmVzW3RdLHRoaXMub3B0aW9ucy5leHRlbnQpfSx4LnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJhd0dlb21ldHJ5O3RoaXMuZ2VvbWV0cnk9W107Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe2Zvcih2YXIgbj1lW3JdLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWkucHVzaChuZXcgdC5Qb2ludCQxKG5bYV1bMF0sblthXVsxXSkpO3RoaXMuZ2VvbWV0cnkucHVzaChpKX1yZXR1cm4gdGhpcy5nZW9tZXRyeX0seC5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnl8fHRoaXMubG9hZEdlb21ldHJ5KCk7Zm9yKHZhciB0PXRoaXMuZ2VvbWV0cnksZT0xLzAscj0tMS8wLG49MS8wLGk9LTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspZm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2U9TWF0aC5taW4oZSxsLngpLHI9TWF0aC5tYXgocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLnkpfXJldHVybltlLG4scixpXX0seC5wcm90b3R5cGUudG9HZW9KU09OPW0ucHJvdG90eXBlLnRvR2VvSlNPTjt2YXIgYj13LF89djtmdW5jdGlvbiB3KGUpe3ZhciByPW5ldyB0LnBiZjtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdC5sYXllcnMpZS53cml0ZU1lc3NhZ2UoMyxULHQubGF5ZXJzW3JdKX0oZSxyKSxyLmZpbmlzaCgpfWZ1bmN0aW9uIFQodCxlKXt2YXIgcjtlLndyaXRlVmFyaW50RmllbGQoMTUsdC52ZXJzaW9ufHwxKSxlLndyaXRlU3RyaW5nRmllbGQoMSx0Lm5hbWV8fCIiKSxlLndyaXRlVmFyaW50RmllbGQoNSx0LmV4dGVudHx8NDA5Nik7dmFyIG49e2tleXM6W10sdmFsdWVzOltdLGtleWNhY2hlOnt9LHZhbHVlY2FjaGU6e319O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspbi5mZWF0dXJlPXQuZmVhdHVyZShyKSxlLndyaXRlTWVzc2FnZSgyLGssbik7dmFyIGk9bi5rZXlzO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspZS53cml0ZVN0cmluZ0ZpZWxkKDMsaVtyXSk7dmFyIGE9bi52YWx1ZXM7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyllLndyaXRlTWVzc2FnZSg0LEMsYVtyXSl9ZnVuY3Rpb24gayh0LGUpe3ZhciByPXQuZmVhdHVyZTt2b2lkIDAhPT1yLmlkJiZlLndyaXRlVmFyaW50RmllbGQoMSxyLmlkKSxlLndyaXRlTWVzc2FnZSgyLE0sdCksZS53cml0ZVZhcmludEZpZWxkKDMsci50eXBlKSxlLndyaXRlTWVzc2FnZSg0LEUscil9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPXQuZmVhdHVyZSxuPXQua2V5cyxpPXQudmFsdWVzLGE9dC5rZXljYWNoZSxvPXQudmFsdWVjYWNoZTtmb3IodmFyIHMgaW4gci5wcm9wZXJ0aWVzKXt2YXIgbD1hW3NdO3ZvaWQgMD09PWwmJihuLnB1c2gocyksYVtzXT1sPW4ubGVuZ3RoLTEpLGUud3JpdGVWYXJpbnQobCk7dmFyIGM9ci5wcm9wZXJ0aWVzW3NdLHU9dHlwZW9mIGM7InN0cmluZyIhPT11JiYiYm9vbGVhbiIhPT11JiYibnVtYmVyIiE9PXUmJihjPUpTT04uc3RyaW5naWZ5KGMpKTt2YXIgaD11KyI6IitjLGY9b1toXTt2b2lkIDA9PT1mJiYoaS5wdXNoKGMpLG9baF09Zj1pLmxlbmd0aC0xKSxlLndyaXRlVmFyaW50KGYpfX1mdW5jdGlvbiBBKHQsZSl7cmV0dXJuKGU8PDMpKyg3JnQpfWZ1bmN0aW9uIFModCl7cmV0dXJuIHQ8PDFedD4+MzF9ZnVuY3Rpb24gRSh0LGUpe2Zvcih2YXIgcj10LmxvYWRHZW9tZXRyeSgpLG49dC50eXBlLGk9MCxhPTAsbz1yLmxlbmd0aCxzPTA7czxvO3MrKyl7dmFyIGw9cltzXSxjPTE7MT09PW4mJihjPWwubGVuZ3RoKSxlLndyaXRlVmFyaW50KEEoMSxjKSk7Zm9yKHZhciB1PTM9PT1uP2wubGVuZ3RoLTE6bC5sZW5ndGgsaD0wO2g8dTtoKyspezE9PT1oJiYxIT09biYmZS53cml0ZVZhcmludChBKDIsdS0xKSk7dmFyIGY9bFtoXS54LWkscD1sW2hdLnktYTtlLndyaXRlVmFyaW50KFMoZikpLGUud3JpdGVWYXJpbnQoUyhwKSksaSs9ZixhKz1wfTM9PT1uJiZlLndyaXRlVmFyaW50KEEoNywxKSl9fWZ1bmN0aW9uIEModCxlKXt2YXIgcj10eXBlb2YgdDsic3RyaW5nIj09PXI/ZS53cml0ZVN0cmluZ0ZpZWxkKDEsdCk6ImJvb2xlYW4iPT09cj9lLndyaXRlQm9vbGVhbkZpZWxkKDcsdCk6Im51bWJlciI9PT1yJiYodCUxIT0wP2Uud3JpdGVEb3VibGVGaWVsZCgzLHQpOnQ8MD9lLndyaXRlU1ZhcmludEZpZWxkKDYsdCk6ZS53cml0ZVZhcmludEZpZWxkKDUsdCkpfWZ1bmN0aW9uIEwodCxlLHIsbil7UCh0LHIsbiksUChlLDIqciwyKm4pLFAoZSwyKnIrMSwyKm4rMSl9ZnVuY3Rpb24gUCh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIEkodCxlLHIsbil7dmFyIGk9dC1yLGE9ZS1uO3JldHVybiBpKmkrYSphfWIuZnJvbVZlY3RvclRpbGVKcz13LGIuZnJvbUdlb2pzb25WdD1mdW5jdGlvbih0LGUpe2U9ZXx8e307dmFyIHI9e307Zm9yKHZhciBuIGluIHQpcltuXT1uZXcgdih0W25dLmZlYXR1cmVzLGUpLHJbbl0ubmFtZT1uLHJbbl0udmVyc2lvbj1lLnZlcnNpb24scltuXS5leHRlbnQ9ZS5leHRlbnQ7cmV0dXJuIHcoe2xheWVyczpyfSl9LGIuR2VvSlNPTldyYXBwZXI9Xzt2YXIgej1mdW5jdGlvbih0KXtyZXR1cm4gdFswXX0sTz1mdW5jdGlvbih0KXtyZXR1cm4gdFsxXX0sRD1mdW5jdGlvbih0LGUscixuLGkpe3ZvaWQgMD09PWUmJihlPXopLHZvaWQgMD09PXImJihyPU8pLHZvaWQgMD09PW4mJihuPTY0KSx2b2lkIDA9PT1pJiYoaT1GbG9hdDY0QXJyYXkpLHRoaXMubm9kZVNpemU9bix0aGlzLnBvaW50cz10O2Zvcih2YXIgYT10Lmxlbmd0aDw2NTUzNj9VaW50MTZBcnJheTpVaW50MzJBcnJheSxvPXRoaXMuaWRzPW5ldyBhKHQubGVuZ3RoKSxzPXRoaXMuY29vcmRzPW5ldyBpKDIqdC5sZW5ndGgpLGw9MDtsPHQubGVuZ3RoO2wrKylvW2xdPWwsc1syKmxdPWUodFtsXSksc1syKmwrMV09cih0W2xdKTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7aWYoIShhLWk8PW4pKXt2YXIgcz1pK2E+PjE7IWZ1bmN0aW9uIHQoZSxyLG4saSxhLG8pe2Zvcig7YT5pOyl7aWYoYS1pPjYwMCl7dmFyIHM9YS1pKzEsbD1uLWkrMSxjPU1hdGgubG9nKHMpLHU9LjUqTWF0aC5leHAoMipjLzMpLGg9LjUqTWF0aC5zcXJ0KGMqdSoocy11KS9zKSoobC1zLzI8MD8tMToxKTt0KGUscixuLE1hdGgubWF4KGksTWF0aC5mbG9vcihuLWwqdS9zK2gpKSxNYXRoLm1pbihhLE1hdGguZmxvb3Iobisocy1sKSp1L3MraCkpLG8pfXZhciBmPXJbMipuK29dLHA9aSxkPWE7Zm9yKEwoZSxyLGksbiksclsyKmErb10+ZiYmTChlLHIsaSxhKTtwPGQ7KXtmb3IoTChlLHIscCxkKSxwKyssZC0tO3JbMipwK29dPGY7KXArKztmb3IoO3JbMipkK29dPmY7KWQtLX1yWzIqaStvXT09PWY/TChlLHIsaSxkKTpMKGUsciwrK2QsYSksZDw9biYmKGk9ZCsxKSxuPD1kJiYoYT1kLTEpfX0oZSxyLHMsaSxhLG8lMiksdChlLHIsbixpLHMtMSxvKzEpLHQoZSxyLG4scysxLGEsbysxKX19KG8scyxuLDAsby5sZW5ndGgtMSwwKX07RC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcyxsLGM9WzAsdC5sZW5ndGgtMSwwXSx1PVtdO2MubGVuZ3RoOyl7dmFyIGg9Yy5wb3AoKSxmPWMucG9wKCkscD1jLnBvcCgpO2lmKGYtcDw9bylmb3IodmFyIGQ9cDtkPD1mO2QrKylsPWVbMipkKzFdLChzPWVbMipkXSk+PXImJnM8PWkmJmw+PW4mJmw8PWEmJnUucHVzaCh0W2RdKTtlbHNle3ZhciBnPU1hdGguZmxvb3IoKHArZikvMik7bD1lWzIqZysxXSwocz1lWzIqZ10pPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFtnXSk7dmFyIG09KGgrMSklMjsoMD09PWg/cjw9czpuPD1sKSYmKGMucHVzaChwKSxjLnB1c2goZy0xKSxjLnB1c2gobSkpLCgwPT09aD9pPj1zOmE+PWwpJiYoYy5wdXNoKGcrMSksYy5wdXNoKGYpLGMucHVzaChtKSl9fXJldHVybiB1fSh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscixuLHRoaXMubm9kZVNpemUpfSxELnByb3RvdHlwZS53aXRoaW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPVswLHQubGVuZ3RoLTEsMF0scz1bXSxsPWkqaTtvLmxlbmd0aDspe3ZhciBjPW8ucG9wKCksdT1vLnBvcCgpLGg9by5wb3AoKTtpZih1LWg8PWEpZm9yKHZhciBmPWg7Zjw9dTtmKyspSShlWzIqZl0sZVsyKmYrMV0scixuKTw9bCYmcy5wdXNoKHRbZl0pO2Vsc2V7dmFyIHA9TWF0aC5mbG9vcigoaCt1KS8yKSxkPWVbMipwXSxnPWVbMipwKzFdO0koZCxnLHIsbik8PWwmJnMucHVzaCh0W3BdKTt2YXIgbT0oYysxKSUyOygwPT09Yz9yLWk8PWQ6bi1pPD1nKSYmKG8ucHVzaChoKSxvLnB1c2gocC0xKSxvLnB1c2gobSkpLCgwPT09Yz9yK2k+PWQ6bitpPj1nKSYmKG8ucHVzaChwKzEpLG8ucHVzaCh1KSxvLnB1c2gobSkpfX1yZXR1cm4gc30odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsdGhpcy5ub2RlU2l6ZSl9O3ZhciBSPXttaW5ab29tOjAsbWF4Wm9vbToxNixyYWRpdXM6NDAsZXh0ZW50OjUxMixub2RlU2l6ZTo2NCxsb2c6ITEsZ2VuZXJhdGVJZDohMSxyZWR1Y2U6bnVsbCxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxGPWZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz1IKE9iamVjdC5jcmVhdGUoUiksdCksdGhpcy50cmVlcz1uZXcgQXJyYXkodGhpcy5vcHRpb25zLm1heFpvb20rMSl9O2Z1bmN0aW9uIEIodCxlLHIsbixpKXtyZXR1cm57eDp0LHk6ZSx6b29tOjEvMCxpZDpyLHBhcmVudElkOi0xLG51bVBvaW50czpuLHByb3BlcnRpZXM6aX19ZnVuY3Rpb24gTih0LGUpe3ZhciByPXQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsbj1yWzFdO3JldHVybnt4OlYoclswXSkseTpxKG4pLHpvb206MS8wLGluZGV4OmUscGFyZW50SWQ6LTF9fWZ1bmN0aW9uIGoodCl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLGlkOnQuaWQscHJvcGVydGllczpVKHQpLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6WyhuPXQueCwzNjAqKG4tLjUpKSwoZT10Lnkscj0oMTgwLTM2MCplKSpNYXRoLlBJLzE4MCwzNjAqTWF0aC5hdGFuKE1hdGguZXhwKHIpKS9NYXRoLlBJLTkwKV19fTt2YXIgZSxyLG59ZnVuY3Rpb24gVSh0KXt2YXIgZT10Lm51bVBvaW50cyxyPWU+PTFlND9NYXRoLnJvdW5kKGUvMWUzKSsiayI6ZT49MWUzP01hdGgucm91bmQoZS8xMDApLzEwKyJrIjplO3JldHVybiBIKEgoe30sdC5wcm9wZXJ0aWVzKSx7Y2x1c3RlcjohMCxjbHVzdGVyX2lkOnQuaWQscG9pbnRfY291bnQ6ZSxwb2ludF9jb3VudF9hYmJyZXZpYXRlZDpyfSl9ZnVuY3Rpb24gVih0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gcSh0KXt2YXIgZT1NYXRoLnNpbih0Kk1hdGguUEkvMTgwKSxyPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gcjwwPzA6cj4xPzE6cn1mdW5jdGlvbiBIKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fWZ1bmN0aW9uIEcodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBZKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gVyh0LGUscixuLGksYSl7dmFyIG89aS1yLHM9YS1uO2lmKDAhPT1vfHwwIT09cyl7dmFyIGw9KCh0LXIpKm8rKGUtbikqcykvKG8qbytzKnMpO2w+MT8ocj1pLG49YSk6bD4wJiYocis9bypsLG4rPXMqbCl9cmV0dXJuKG89dC1yKSpvKyhzPWUtbikqc31mdW5jdGlvbiBaKHQsZSxyLG4pe3ZhciBpPXtpZDp2b2lkIDA9PT10P251bGw6dCx0eXBlOmUsZ2VvbWV0cnk6cix0YWdzOm4sbWluWDoxLzAsbWluWToxLzAsbWF4WDotMS8wLG1heFk6LTEvMH07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2VvbWV0cnkscj10LnR5cGU7aWYoIlBvaW50Ij09PXJ8fCJNdWx0aVBvaW50Ij09PXJ8fCJMaW5lU3RyaW5nIj09PXIpWCh0LGUpO2Vsc2UgaWYoIlBvbHlnb24iPT09cnx8Ik11bHRpTGluZVN0cmluZyI9PT1yKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKVgodCxlW25dKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09cilmb3Iobj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT0wO2k8ZVtuXS5sZW5ndGg7aSsrKVgodCxlW25dW2ldKX0oaSksaX1mdW5jdGlvbiBYKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKz0zKXQubWluWD1NYXRoLm1pbih0Lm1pblgsZVtyXSksdC5taW5ZPU1hdGgubWluKHQubWluWSxlW3IrMV0pLHQubWF4WD1NYXRoLm1heCh0Lm1heFgsZVtyXSksdC5tYXhZPU1hdGgubWF4KHQubWF4WSxlW3IrMV0pfWZ1bmN0aW9uIEoodCxlLHIsbil7aWYoZS5nZW9tZXRyeSl7dmFyIGk9ZS5nZW9tZXRyeS5jb29yZGluYXRlcyxhPWUuZ2VvbWV0cnkudHlwZSxvPU1hdGgucG93KHIudG9sZXJhbmNlLygoMTw8ci5tYXhab29tKSpyLmV4dGVudCksMikscz1bXSxsPWUuaWQ7aWYoci5wcm9tb3RlSWQ/bD1lLnByb3BlcnRpZXNbci5wcm9tb3RlSWRdOnIuZ2VuZXJhdGVJZCYmKGw9bnx8MCksIlBvaW50Ij09PWEpSyhpLHMpO2Vsc2UgaWYoIk11bHRpUG9pbnQiPT09YSlmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKylLKGlbY10scyk7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1hKVEoaSxzLG8sITEpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1hKXtpZihyLmxpbmVNZXRyaWNzKXtmb3IoYz0wO2M8aS5sZW5ndGg7YysrKVEoaVtjXSxzPVtdLG8sITEpLHQucHVzaChaKGwsIkxpbmVTdHJpbmciLHMsZS5wcm9wZXJ0aWVzKSk7cmV0dXJufSQoaSxzLG8sITEpfWVsc2UgaWYoIlBvbHlnb24iPT09YSkkKGkscyxvLCEwKTtlbHNle2lmKCJNdWx0aVBvbHlnb24iIT09YSl7aWYoIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1hKXtmb3IoYz0wO2M8ZS5nZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDtjKyspSih0LHtpZDpsLGdlb21ldHJ5OmUuZ2VvbWV0cnkuZ2VvbWV0cmllc1tjXSxwcm9wZXJ0aWVzOmUucHJvcGVydGllc30scixuKTtyZXR1cm59dGhyb3cgbmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpfWZvcihjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciB1PVtdOyQoaVtjXSx1LG8sITApLHMucHVzaCh1KX19dC5wdXNoKFoobCxhLHMsZS5wcm9wZXJ0aWVzKSl9fWZ1bmN0aW9uIEsodCxlKXtlLnB1c2godHQodFswXSkpLGUucHVzaChldCh0WzFdKSksZS5wdXNoKDApfWZ1bmN0aW9uIFEodCxlLHIsbil7Zm9yKHZhciBpLGEsbz0wLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dHQodFtzXVswXSksYz1ldCh0W3NdWzFdKTtlLnB1c2gobCksZS5wdXNoKGMpLGUucHVzaCgwKSxzPjAmJihvKz1uPyhpKmMtbCphKS8yOk1hdGguc3FydChNYXRoLnBvdyhsLWksMikrTWF0aC5wb3coYy1hLDIpKSksaT1sLGE9Y312YXIgdT1lLmxlbmd0aC0zO2VbMl09MSxmdW5jdGlvbiB0KGUscixuLGkpe2Zvcih2YXIgYSxvPWkscz1uLXI+PjEsbD1uLXIsYz1lW3JdLHU9ZVtyKzFdLGg9ZVtuXSxmPWVbbisxXSxwPXIrMztwPG47cCs9Myl7dmFyIGQ9VyhlW3BdLGVbcCsxXSxjLHUsaCxmKTtpZihkPm8pYT1wLG89ZDtlbHNlIGlmKGQ9PT1vKXt2YXIgZz1NYXRoLmFicyhwLXMpO2c8bCYmKGE9cCxsPWcpfX1vPmkmJihhLXI+MyYmdChlLHIsYSxpKSxlW2ErMl09byxuLWE+MyYmdChlLGEsbixpKSl9KGUsMCx1LHIpLGVbdSsyXT0xLGUuc2l6ZT1NYXRoLmFicyhvKSxlLnN0YXJ0PTAsZS5lbmQ9ZS5zaXplfWZ1bmN0aW9uICQodCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPVtdO1EodFtpXSxhLHIsbiksZS5wdXNoKGEpfX1mdW5jdGlvbiB0dCh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gZXQodCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gcnQodCxlLHIsbixpLGEsbyxzKXtpZihuLz1lLGE+PShyLz1lKSYmbzxuKXJldHVybiB0O2lmKG88cnx8YT49bilyZXR1cm4gbnVsbDtmb3IodmFyIGw9W10sYz0wO2M8dC5sZW5ndGg7YysrKXt2YXIgdT10W2NdLGg9dS5nZW9tZXRyeSxmPXUudHlwZSxwPTA9PT1pP3UubWluWDp1Lm1pblksZD0wPT09aT91Lm1heFg6dS5tYXhZO2lmKHA+PXImJmQ8bilsLnB1c2godSk7ZWxzZSBpZighKGQ8cnx8cD49bikpe3ZhciBnPVtdO2lmKCJQb2ludCI9PT1mfHwiTXVsdGlQb2ludCI9PT1mKW50KGgsZyxyLG4saSk7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1mKWl0KGgsZyxyLG4saSwhMSxzLmxpbmVNZXRyaWNzKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09ZilvdChoLGcscixuLGksITEpO2Vsc2UgaWYoIlBvbHlnb24iPT09ZilvdChoLGcscixuLGksITApO2Vsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1mKWZvcih2YXIgbT0wO208aC5sZW5ndGg7bSsrKXt2YXIgdj1bXTtvdChoW21dLHYscixuLGksITApLHYubGVuZ3RoJiZnLnB1c2godil9aWYoZy5sZW5ndGgpe2lmKHMubGluZU1ldHJpY3MmJiJMaW5lU3RyaW5nIj09PWYpe2ZvcihtPTA7bTxnLmxlbmd0aDttKyspbC5wdXNoKFoodS5pZCxmLGdbbV0sdS50YWdzKSk7Y29udGludWV9IkxpbmVTdHJpbmciIT09ZiYmIk11bHRpTGluZVN0cmluZyIhPT1mfHwoMT09PWcubGVuZ3RoPyhmPSJMaW5lU3RyaW5nIixnPWdbMF0pOmY9Ik11bHRpTGluZVN0cmluZyIpLCJQb2ludCIhPT1mJiYiTXVsdGlQb2ludCIhPT1mfHwoZj0zPT09Zy5sZW5ndGg/IlBvaW50IjoiTXVsdGlQb2ludCIpLGwucHVzaChaKHUuaWQsZixnLHUudGFncykpfX19cmV0dXJuIGwubGVuZ3RoP2w6bnVsbH1mdW5jdGlvbiBudCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSs9Myl7dmFyIG89dFthK2ldO28+PXImJm88PW4mJihlLnB1c2godFthXSksZS5wdXNoKHRbYSsxXSksZS5wdXNoKHRbYSsyXSkpfX1mdW5jdGlvbiBpdCh0LGUscixuLGksYSxvKXtmb3IodmFyIHMsbCxjPWF0KHQpLHU9MD09PWk/bHQ6Y3QsaD10LnN0YXJ0LGY9MDtmPHQubGVuZ3RoLTM7Zis9Myl7dmFyIHA9dFtmXSxkPXRbZisxXSxnPXRbZisyXSxtPXRbZiszXSx2PXRbZis0XSx5PTA9PT1pP3A6ZCx4PTA9PT1pP206dixiPSExO28mJihzPU1hdGguc3FydChNYXRoLnBvdyhwLW0sMikrTWF0aC5wb3coZC12LDIpKSkseTxyP3g+ciYmKGw9dShjLHAsZCxtLHYsciksbyYmKGMuc3RhcnQ9aCtzKmwpKTp5Pm4/eDxuJiYobD11KGMscCxkLG0sdixuKSxvJiYoYy5zdGFydD1oK3MqbCkpOnN0KGMscCxkLGcpLHg8ciYmeT49ciYmKGw9dShjLHAsZCxtLHYsciksYj0hMCkseD5uJiZ5PD1uJiYobD11KGMscCxkLG0sdixuKSxiPSEwKSwhYSYmYiYmKG8mJihjLmVuZD1oK3MqbCksZS5wdXNoKGMpLGM9YXQodCkpLG8mJihoKz1zKX12YXIgXz10Lmxlbmd0aC0zO3A9dFtfXSxkPXRbXysxXSxnPXRbXysyXSwoeT0wPT09aT9wOmQpPj1yJiZ5PD1uJiZzdChjLHAsZCxnKSxfPWMubGVuZ3RoLTMsYSYmXz49MyYmKGNbX10hPT1jWzBdfHxjW18rMV0hPT1jWzFdKSYmc3QoYyxjWzBdLGNbMV0sY1syXSksYy5sZW5ndGgmJmUucHVzaChjKX1mdW5jdGlvbiBhdCh0KXt2YXIgZT1bXTtyZXR1cm4gZS5zaXplPXQuc2l6ZSxlLnN0YXJ0PXQuc3RhcnQsZS5lbmQ9dC5lbmQsZX1mdW5jdGlvbiBvdCh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspaXQodFtvXSxlLHIsbixpLGEsITEpfWZ1bmN0aW9uIHN0KHQsZSxyLG4pe3QucHVzaChlKSx0LnB1c2gociksdC5wdXNoKG4pfWZ1bmN0aW9uIGx0KHQsZSxyLG4saSxhKXt2YXIgbz0oYS1lKS8obi1lKTtyZXR1cm4gdC5wdXNoKGEpLHQucHVzaChyKyhpLXIpKm8pLHQucHVzaCgxKSxvfWZ1bmN0aW9uIGN0KHQsZSxyLG4saSxhKXt2YXIgbz0oYS1yKS8oaS1yKTtyZXR1cm4gdC5wdXNoKGUrKG4tZSkqbyksdC5wdXNoKGEpLHQucHVzaCgxKSxvfWZ1bmN0aW9uIHV0KHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGksYT10W25dLG89YS50eXBlO2lmKCJQb2ludCI9PT1vfHwiTXVsdGlQb2ludCI9PT1vfHwiTGluZVN0cmluZyI9PT1vKWk9aHQoYS5nZW9tZXRyeSxlKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09b3x8IlBvbHlnb24iPT09byl7aT1bXTtmb3IodmFyIHM9MDtzPGEuZ2VvbWV0cnkubGVuZ3RoO3MrKylpLnB1c2goaHQoYS5nZW9tZXRyeVtzXSxlKSl9ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PW8pZm9yKGk9W10scz0wO3M8YS5nZW9tZXRyeS5sZW5ndGg7cysrKXtmb3IodmFyIGw9W10sYz0wO2M8YS5nZW9tZXRyeVtzXS5sZW5ndGg7YysrKWwucHVzaChodChhLmdlb21ldHJ5W3NdW2NdLGUpKTtpLnB1c2gobCl9ci5wdXNoKFooYS5pZCxvLGksYS50YWdzKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaHQodCxlKXt2YXIgcj1bXTtyLnNpemU9dC5zaXplLHZvaWQgMCE9PXQuc3RhcnQmJihyLnN0YXJ0PXQuc3RhcnQsci5lbmQ9dC5lbmQpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MylyLnB1c2godFtuXStlLHRbbisxXSx0W24rMl0pO3JldHVybiByfWZ1bmN0aW9uIGZ0KHQsZSl7aWYodC50cmFuc2Zvcm1lZClyZXR1cm4gdDt2YXIgcixuLGksYT0xPDx0Lnosbz10Lngscz10Lnk7Zm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoO3IrKyl7dmFyIGw9dC5mZWF0dXJlc1tyXSxjPWwuZ2VvbWV0cnksdT1sLnR5cGU7aWYobC5nZW9tZXRyeT1bXSwxPT09dSlmb3Iobj0wO248Yy5sZW5ndGg7bis9MilsLmdlb21ldHJ5LnB1c2gocHQoY1tuXSxjW24rMV0sZSxhLG8scykpO2Vsc2UgZm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIGg9W107Zm9yKGk9MDtpPGNbbl0ubGVuZ3RoO2krPTIpaC5wdXNoKHB0KGNbbl1baV0sY1tuXVtpKzFdLGUsYSxvLHMpKTtsLmdlb21ldHJ5LnB1c2goaCl9fXJldHVybiB0LnRyYW5zZm9ybWVkPSEwLHR9ZnVuY3Rpb24gcHQodCxlLHIsbixpLGEpe3JldHVybltNYXRoLnJvdW5kKHIqKHQqbi1pKSksTWF0aC5yb3VuZChyKihlKm4tYSkpXX1mdW5jdGlvbiBkdCh0LGUscixuLGkpe2Zvcih2YXIgYT1lPT09aS5tYXhab29tPzA6aS50b2xlcmFuY2UvKCgxPDxlKSppLmV4dGVudCksbz17ZmVhdHVyZXM6W10sbnVtUG9pbnRzOjAsbnVtU2ltcGxpZmllZDowLG51bUZlYXR1cmVzOjAsc291cmNlOm51bGwseDpyLHk6bix6OmUsdHJhbnNmb3JtZWQ6ITEsbWluWDoyLG1pblk6MSxtYXhYOi0xLG1heFk6MH0scz0wO3M8dC5sZW5ndGg7cysrKXtvLm51bUZlYXR1cmVzKyssZ3Qobyx0W3NdLGEsaSk7dmFyIGw9dFtzXS5taW5YLGM9dFtzXS5taW5ZLHU9dFtzXS5tYXhYLGg9dFtzXS5tYXhZO2w8by5taW5YJiYoby5taW5YPWwpLGM8by5taW5ZJiYoby5taW5ZPWMpLHU+by5tYXhYJiYoby5tYXhYPXUpLGg+by5tYXhZJiYoby5tYXhZPWgpfXJldHVybiBvfWZ1bmN0aW9uIGd0KHQsZSxyLG4pe3ZhciBpPWUuZ2VvbWV0cnksYT1lLnR5cGUsbz1bXTtpZigiUG9pbnQiPT09YXx8Ik11bHRpUG9pbnQiPT09YSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrPTMpby5wdXNoKGlbc10pLG8ucHVzaChpW3MrMV0pLHQubnVtUG9pbnRzKyssdC5udW1TaW1wbGlmaWVkKys7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1hKW10KG8saSx0LHIsITEsITEpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1hfHwiUG9seWdvbiI9PT1hKWZvcihzPTA7czxpLmxlbmd0aDtzKyspbXQobyxpW3NdLHQsciwiUG9seWdvbiI9PT1hLDA9PT1zKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09YSlmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIGM9aVtsXTtmb3Iocz0wO3M8Yy5sZW5ndGg7cysrKW10KG8sY1tzXSx0LHIsITAsMD09PXMpfWlmKG8ubGVuZ3RoKXt2YXIgdT1lLnRhZ3N8fG51bGw7aWYoIkxpbmVTdHJpbmciPT09YSYmbi5saW5lTWV0cmljcyl7Zm9yKHZhciBoIGluIHU9e30sZS50YWdzKXVbaF09ZS50YWdzW2hdO3UubWFwYm94X2NsaXBfc3RhcnQ9aS5zdGFydC9pLnNpemUsdS5tYXBib3hfY2xpcF9lbmQ9aS5lbmQvaS5zaXplfXZhciBmPXtnZW9tZXRyeTpvLHR5cGU6IlBvbHlnb24iPT09YXx8Ik11bHRpUG9seWdvbiI9PT1hPzM6IkxpbmVTdHJpbmciPT09YXx8Ik11bHRpTGluZVN0cmluZyI9PT1hPzI6MSx0YWdzOnV9O251bGwhPT1lLmlkJiYoZi5pZD1lLmlkKSx0LmZlYXR1cmVzLnB1c2goZil9fWZ1bmN0aW9uIG10KHQsZSxyLG4saSxhKXt2YXIgbz1uKm47aWYobj4wJiZlLnNpemU8KGk/bzpuKSlyLm51bVBvaW50cys9ZS5sZW5ndGgvMztlbHNle2Zvcih2YXIgcz1bXSxsPTA7bDxlLmxlbmd0aDtsKz0zKSgwPT09bnx8ZVtsKzJdPm8pJiYoci5udW1TaW1wbGlmaWVkKysscy5wdXNoKGVbbF0pLHMucHVzaChlW2wrMV0pKSxyLm51bVBvaW50cysrO2kmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGgsYT1pLTI7bjxpO2E9bixuKz0yKXIrPSh0W25dLXRbYV0pKih0W24rMV0rdFthKzFdKTtpZihyPjA9PT1lKWZvcihuPTAsaT10Lmxlbmd0aDtuPGkvMjtuKz0yKXt2YXIgbz10W25dLHM9dFtuKzFdO3Rbbl09dFtpLTItbl0sdFtuKzFdPXRbaS0xLW5dLHRbaS0yLW5dPW8sdFtpLTEtbl09c319KHMsYSksdC5wdXNoKHMpfX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPShlPXRoaXMub3B0aW9ucz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXTtyZXR1cm4gdH0oT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLGUpKS5kZWJ1ZztpZihyJiZjb25zb2xlLnRpbWUoInByZXByb2Nlc3MgZGF0YSIpLGUubWF4Wm9vbTwwfHxlLm1heFpvb20+MjQpdGhyb3cgbmV3IEVycm9yKCJtYXhab29tIHNob3VsZCBiZSBpbiB0aGUgMC0yNCByYW5nZSIpO2lmKGUucHJvbW90ZUlkJiZlLmdlbmVyYXRlSWQpdGhyb3cgbmV3IEVycm9yKCJwcm9tb3RlSWQgYW5kIGdlbmVyYXRlSWQgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIik7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlKWZvcih2YXIgbj0wO248dC5mZWF0dXJlcy5sZW5ndGg7bisrKUoocix0LmZlYXR1cmVzW25dLGUsbik7ZWxzZSBKKHIsIkZlYXR1cmUiPT09dC50eXBlP3Q6e2dlb21ldHJ5OnR9LGUpO3JldHVybiByfSh0LGUpO3RoaXMudGlsZXM9e30sdGhpcy50aWxlQ29vcmRzPVtdLHImJihjb25zb2xlLnRpbWVFbmQoInByZXByb2Nlc3MgZGF0YSIpLGNvbnNvbGUubG9nKCJpbmRleDogbWF4Wm9vbTogJWQsIG1heFBvaW50czogJWQiLGUuaW5kZXhNYXhab29tLGUuaW5kZXhNYXhQb2ludHMpLGNvbnNvbGUudGltZSgiZ2VuZXJhdGUgdGlsZXMiKSx0aGlzLnN0YXRzPXt9LHRoaXMudG90YWw9MCksKG49ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmJ1ZmZlci9lLmV4dGVudCxuPXQsaT1ydCh0LDEsLTEtcixyLDAsLTEsMixlKSxhPXJ0KHQsMSwxLXIsMityLDAsLTEsMixlKTtyZXR1cm4oaXx8YSkmJihuPXJ0KHQsMSwtciwxK3IsMCwtMSwyLGUpfHxbXSxpJiYobj11dChpLDEpLmNvbmNhdChuKSksYSYmKG49bi5jb25jYXQodXQoYSwtMSkpKSksbn0obixlKSkubGVuZ3RoJiZ0aGlzLnNwbGl0VGlsZShuLDAsMCwwKSxyJiYobi5sZW5ndGgmJmNvbnNvbGUubG9nKCJmZWF0dXJlczogJWQsIHBvaW50czogJWQiLHRoaXMudGlsZXNbMF0ubnVtRmVhdHVyZXMsdGhpcy50aWxlc1swXS5udW1Qb2ludHMpLGNvbnNvbGUudGltZUVuZCgiZ2VuZXJhdGUgdGlsZXMiKSxjb25zb2xlLmxvZygidGlsZXMgZ2VuZXJhdGVkOiIsdGhpcy50b3RhbCxKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRzKSkpfWZ1bmN0aW9uIHl0KHQsZSxyKXtyZXR1cm4gMzIqKCgxPDx0KSpyK2UpK3R9ZnVuY3Rpb24geHQodCxlKXt2YXIgcj10LnRpbGVJRC5jYW5vbmljYWw7aWYoIXRoaXMuX2dlb0pTT05JbmRleClyZXR1cm4gZShudWxsLG51bGwpO3ZhciBuPXRoaXMuX2dlb0pTT05JbmRleC5nZXRUaWxlKHIueixyLngsci55KTtpZighbilyZXR1cm4gZShudWxsLG51bGwpO3ZhciBpPW5ldyBnKG4uZmVhdHVyZXMpLGE9YihpKTswPT09YS5ieXRlT2Zmc2V0JiZhLmJ5dGVMZW5ndGg9PT1hLmJ1ZmZlci5ieXRlTGVuZ3RofHwoYT1uZXcgVWludDhBcnJheShhKSksZShudWxsLHt2ZWN0b3JUaWxlOmkscmF3RGF0YTphLmJ1ZmZlcn0pfUYucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLHI9ZS5sb2csbj1lLm1pblpvb20saT1lLm1heFpvb20sYT1lLm5vZGVTaXplO3ImJmNvbnNvbGUudGltZSgidG90YWwgdGltZSIpO3ZhciBvPSJwcmVwYXJlICIrdC5sZW5ndGgrIiBwb2ludHMiO3ImJmNvbnNvbGUudGltZShvKSx0aGlzLnBvaW50cz10O2Zvcih2YXIgcz1bXSxsPTA7bDx0Lmxlbmd0aDtsKyspdFtsXS5nZW9tZXRyeSYmcy5wdXNoKE4odFtsXSxsKSk7dGhpcy50cmVlc1tpKzFdPW5ldyBEKHMsRyxZLGEsRmxvYXQzMkFycmF5KSxyJiZjb25zb2xlLnRpbWVFbmQobyk7Zm9yKHZhciBjPWk7Yz49bjtjLS0pe3ZhciB1PStEYXRlLm5vdygpO3M9dGhpcy5fY2x1c3RlcihzLGMpLHRoaXMudHJlZXNbY109bmV3IEQocyxHLFksYSxGbG9hdDMyQXJyYXkpLHImJmNvbnNvbGUubG9nKCJ6JWQ6ICVkIGNsdXN0ZXJzIGluICVkbXMiLGMscy5sZW5ndGgsK0RhdGUubm93KCktdSl9cmV0dXJuIHImJmNvbnNvbGUudGltZUVuZCgidG90YWwgdGltZSIpLHRoaXN9LEYucHJvdG90eXBlLmdldENsdXN0ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KCh0WzBdKzE4MCklMzYwKzM2MCklMzYwLTE4MCxuPU1hdGgubWF4KC05MCxNYXRoLm1pbig5MCx0WzFdKSksaT0xODA9PT10WzJdPzE4MDooKHRbMl0rMTgwKSUzNjArMzYwKSUzNjAtMTgwLGE9TWF0aC5tYXgoLTkwLE1hdGgubWluKDkwLHRbM10pKTtpZih0WzJdLXRbMF0+PTM2MClyPS0xODAsaT0xODA7ZWxzZSBpZihyPmkpe3ZhciBvPXRoaXMuZ2V0Q2x1c3RlcnMoW3IsbiwxODAsYV0sZSkscz10aGlzLmdldENsdXN0ZXJzKFstMTgwLG4saSxhXSxlKTtyZXR1cm4gby5jb25jYXQocyl9Zm9yKHZhciBsPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKGUpXSxjPVtdLHU9MCxoPWwucmFuZ2UoVihyKSxxKGEpLFYoaSkscShuKSk7dTxoLmxlbmd0aDt1Kz0xKXt2YXIgZj1sLnBvaW50c1toW3VdXTtjLnB1c2goZi5udW1Qb2ludHM/aihmKTp0aGlzLnBvaW50c1tmLmluZGV4XSl9cmV0dXJuIGN9LEYucHJvdG90eXBlLmdldENoaWxkcmVuPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldE9yaWdpbklkKHQpLHI9dGhpcy5fZ2V0T3JpZ2luWm9vbSh0KSxuPSJObyBjbHVzdGVyIHdpdGggdGhlIHNwZWNpZmllZCBpZC4iLGk9dGhpcy50cmVlc1tyXTtpZighaSl0aHJvdyBuZXcgRXJyb3Iobik7dmFyIGE9aS5wb2ludHNbZV07aWYoIWEpdGhyb3cgbmV3IEVycm9yKG4pO2Zvcih2YXIgbz10aGlzLm9wdGlvbnMucmFkaXVzLyh0aGlzLm9wdGlvbnMuZXh0ZW50Kk1hdGgucG93KDIsci0xKSkscz1bXSxsPTAsYz1pLndpdGhpbihhLngsYS55LG8pO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9aS5wb2ludHNbY1tsXV07dS5wYXJlbnRJZD09PXQmJnMucHVzaCh1Lm51bVBvaW50cz9qKHUpOnRoaXMucG9pbnRzW3UuaW5kZXhdKX1pZigwPT09cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKG4pO3JldHVybiBzfSxGLnByb3RvdHlwZS5nZXRMZWF2ZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdO3JldHVybiB0aGlzLl9hcHBlbmRMZWF2ZXMobix0LGU9ZXx8MTAscj1yfHwwLDApLG59LEYucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKHQpXSxpPU1hdGgucG93KDIsdCksYT10aGlzLm9wdGlvbnMsbz1hLnJhZGl1cy9hLmV4dGVudCxzPShyLW8pL2ksbD0ocisxK28pL2ksYz17ZmVhdHVyZXM6W119O3JldHVybiB0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgoZS1vKS9pLHMsKGUrMStvKS9pLGwpLG4ucG9pbnRzLGUscixpLGMpLDA9PT1lJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgxLW8vaSxzLDEsbCksbi5wb2ludHMsaSxyLGksYyksZT09PWktMSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMCxzLG8vaSxsKSxuLnBvaW50cywtMSxyLGksYyksYy5mZWF0dXJlcy5sZW5ndGg/YzpudWxsfSxGLnByb3RvdHlwZS5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ2V0T3JpZ2luWm9vbSh0KS0xO2U8PXRoaXMub3B0aW9ucy5tYXhab29tOyl7dmFyIHI9dGhpcy5nZXRDaGlsZHJlbih0KTtpZihlKyssMSE9PXIubGVuZ3RoKWJyZWFrO3Q9clswXS5wcm9wZXJ0aWVzLmNsdXN0ZXJfaWR9cmV0dXJuIGV9LEYucHJvdG90eXBlLl9hcHBlbmRMZWF2ZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9MCxvPXRoaXMuZ2V0Q2hpbGRyZW4oZSk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9cy5wcm9wZXJ0aWVzO2lmKGwmJmwuY2x1c3Rlcj9pK2wucG9pbnRfY291bnQ8PW4/aSs9bC5wb2ludF9jb3VudDppPXRoaXMuX2FwcGVuZExlYXZlcyh0LGwuY2x1c3Rlcl9pZCxyLG4saSk6aTxuP2krKzp0LnB1c2gocyksdC5sZW5ndGg9PT1yKWJyZWFrfXJldHVybiBpfSxGLnByb3RvdHlwZS5fYWRkVGlsZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MCxzPXQ7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1lW3Nbb11dLGM9bC5udW1Qb2ludHMsdT17dHlwZToxLGdlb21ldHJ5OltbTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihsLngqaS1yKSksTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50KihsLnkqaS1uKSldXSx0YWdzOmM/VShsKTp0aGlzLnBvaW50c1tsLmluZGV4XS5wcm9wZXJ0aWVzfSxoPXZvaWQgMDtjP2g9bC5pZDp0aGlzLm9wdGlvbnMuZ2VuZXJhdGVJZD9oPWwuaW5kZXg6dGhpcy5wb2ludHNbbC5pbmRleF0uaWQmJihoPXRoaXMucG9pbnRzW2wuaW5kZXhdLmlkKSx2b2lkIDAhPT1oJiYodS5pZD1oKSxhLmZlYXR1cmVzLnB1c2godSl9fSxGLnByb3RvdHlwZS5fbGltaXRab29tPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0aGlzLm9wdGlvbnMubWluWm9vbSxNYXRoLm1pbih0LHRoaXMub3B0aW9ucy5tYXhab29tKzEpKX0sRi5wcm90b3R5cGUuX2NsdXN0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj10aGlzLm9wdGlvbnMsaT1uLnJlZHVjZSxhPW4ucmFkaXVzLyhuLmV4dGVudCpNYXRoLnBvdygyLGUpKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aWYoIShzLnpvb208PWUpKXtzLnpvb209ZTtmb3IodmFyIGw9dGhpcy50cmVlc1tlKzFdLGM9bC53aXRoaW4ocy54LHMueSxhKSx1PXMubnVtUG9pbnRzfHwxLGg9cy54KnUsZj1zLnkqdSxwPWkmJnU+MT90aGlzLl9tYXAocywhMCk6bnVsbCxkPShvPDw1KSsoZSsxKSt0aGlzLnBvaW50cy5sZW5ndGgsZz0wLG09YztnPG0ubGVuZ3RoO2crPTEpe3ZhciB2PWwucG9pbnRzW21bZ11dO2lmKCEodi56b29tPD1lKSl7di56b29tPWU7dmFyIHk9di5udW1Qb2ludHN8fDE7aCs9di54KnksZis9di55KnksdSs9eSx2LnBhcmVudElkPWQsaSYmKHB8fChwPXRoaXMuX21hcChzLCEwKSksaShwLHRoaXMuX21hcCh2KSkpfX0xPT09dT9yLnB1c2gocyk6KHMucGFyZW50SWQ9ZCxyLnB1c2goQihoL3UsZi91LGQsdSxwKSkpfX1yZXR1cm4gcn0sRi5wcm90b3R5cGUuX2dldE9yaWdpbklkPWZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMucG9pbnRzLmxlbmd0aD4+NX0sRi5wcm90b3R5cGUuX2dldE9yaWdpblpvb209ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy5wb2ludHMubGVuZ3RoKSUzMn0sRi5wcm90b3R5cGUuX21hcD1mdW5jdGlvbih0LGUpe2lmKHQubnVtUG9pbnRzKXJldHVybiBlP0goe30sdC5wcm9wZXJ0aWVzKTp0LnByb3BlcnRpZXM7dmFyIHI9dGhpcy5wb2ludHNbdC5pbmRleF0ucHJvcGVydGllcyxuPXRoaXMub3B0aW9ucy5tYXAocik7cmV0dXJuIGUmJm49PT1yP0goe30sbik6bn0sdnQucHJvdG90eXBlLm9wdGlvbnM9e21heFpvb206MTQsaW5kZXhNYXhab29tOjUsaW5kZXhNYXhQb2ludHM6MWU1LHRvbGVyYW5jZTozLGV4dGVudDo0MDk2LGJ1ZmZlcjo2NCxsaW5lTWV0cmljczohMSxwcm9tb3RlSWQ6bnVsbCxnZW5lcmF0ZUlkOiExLGRlYnVnOjB9LHZ0LnByb3RvdHlwZS5zcGxpdFRpbGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPVt0LGUscixuXSxsPXRoaXMub3B0aW9ucyxjPWwuZGVidWc7cy5sZW5ndGg7KXtuPXMucG9wKCkscj1zLnBvcCgpLGU9cy5wb3AoKSx0PXMucG9wKCk7dmFyIHU9MTw8ZSxoPXl0KGUscixuKSxmPXRoaXMudGlsZXNbaF07aWYoIWYmJihjPjEmJmNvbnNvbGUudGltZSgiY3JlYXRpb24iKSxmPXRoaXMudGlsZXNbaF09ZHQodCxlLHIsbixsKSx0aGlzLnRpbGVDb29yZHMucHVzaCh7ejplLHg6cix5Om59KSxjKSl7Yz4xJiYoY29uc29sZS5sb2coInRpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKSIsZSxyLG4sZi5udW1GZWF0dXJlcyxmLm51bVBvaW50cyxmLm51bVNpbXBsaWZpZWQpLGNvbnNvbGUudGltZUVuZCgiY3JlYXRpb24iKSk7dmFyIHA9InoiK2U7dGhpcy5zdGF0c1twXT0odGhpcy5zdGF0c1twXXx8MCkrMSx0aGlzLnRvdGFsKyt9aWYoZi5zb3VyY2U9dCxpKXtpZihlPT09bC5tYXhab29tfHxlPT09aSljb250aW51ZTt2YXIgZD0xPDxpLWU7aWYociE9PU1hdGguZmxvb3IoYS9kKXx8biE9PU1hdGguZmxvb3Ioby9kKSljb250aW51ZX1lbHNlIGlmKGU9PT1sLmluZGV4TWF4Wm9vbXx8Zi5udW1Qb2ludHM8PWwuaW5kZXhNYXhQb2ludHMpY29udGludWU7aWYoZi5zb3VyY2U9bnVsbCwwIT09dC5sZW5ndGgpe2M+MSYmY29uc29sZS50aW1lKCJjbGlwcGluZyIpO3ZhciBnLG0sdix5LHgsYixfPS41KmwuYnVmZmVyL2wuZXh0ZW50LHc9LjUtXyxUPS41K18saz0xK187Zz1tPXY9eT1udWxsLHg9cnQodCx1LHItXyxyK1QsMCxmLm1pblgsZi5tYXhYLGwpLGI9cnQodCx1LHIrdyxyK2ssMCxmLm1pblgsZi5tYXhYLGwpLHQ9bnVsbCx4JiYoZz1ydCh4LHUsbi1fLG4rVCwxLGYubWluWSxmLm1heFksbCksbT1ydCh4LHUsbit3LG4raywxLGYubWluWSxmLm1heFksbCkseD1udWxsKSxiJiYodj1ydChiLHUsbi1fLG4rVCwxLGYubWluWSxmLm1heFksbCkseT1ydChiLHUsbit3LG4raywxLGYubWluWSxmLm1heFksbCksYj1udWxsKSxjPjEmJmNvbnNvbGUudGltZUVuZCgiY2xpcHBpbmciKSxzLnB1c2goZ3x8W10sZSsxLDIqciwyKm4pLHMucHVzaChtfHxbXSxlKzEsMipyLDIqbisxKSxzLnB1c2godnx8W10sZSsxLDIqcisxLDIqbikscy5wdXNoKHl8fFtdLGUrMSwyKnIrMSwyKm4rMSl9fX0sdnQucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMub3B0aW9ucyxpPW4uZXh0ZW50LGE9bi5kZWJ1ZztpZih0PDB8fHQ+MjQpcmV0dXJuIG51bGw7dmFyIG89MTw8dCxzPXl0KHQsZT0oZSVvK28pJW8scik7aWYodGhpcy50aWxlc1tzXSlyZXR1cm4gZnQodGhpcy50aWxlc1tzXSxpKTthPjEmJmNvbnNvbGUubG9nKCJkcmlsbGluZyBkb3duIHRvIHolZC0lZC0lZCIsdCxlLHIpO2Zvcih2YXIgbCxjPXQsdT1lLGg9cjshbCYmYz4wOyljLS0sdT1NYXRoLmZsb29yKHUvMiksaD1NYXRoLmZsb29yKGgvMiksbD10aGlzLnRpbGVzW3l0KGMsdSxoKV07cmV0dXJuIGwmJmwuc291cmNlPyhhPjEmJmNvbnNvbGUubG9nKCJmb3VuZCBwYXJlbnQgdGlsZSB6JWQtJWQtJWQiLGMsdSxoKSxhPjEmJmNvbnNvbGUudGltZSgiZHJpbGxpbmcgZG93biIpLHRoaXMuc3BsaXRUaWxlKGwuc291cmNlLGMsdSxoLHQsZSxyKSxhPjEmJmNvbnNvbGUudGltZUVuZCgiZHJpbGxpbmcgZG93biIpLHRoaXMudGlsZXNbc10/ZnQodGhpcy50aWxlc1tzXSxpKTpudWxsKTpudWxsfTt2YXIgYnQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyx0LHIsbix4dCksaSYmKHRoaXMubG9hZEdlb0pTT049aSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZERhdGE9ZnVuY3Rpb24odCxlKXt0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLHthYmFuZG9uZWQ6ITB9KSx0aGlzLl9wZW5kaW5nQ2FsbGJhY2s9ZSx0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM9dCx0aGlzLl9zdGF0ZSYmIklkbGUiIT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9Ik5lZWRzTG9hZERhdGEiOih0aGlzLl9zdGF0ZT0iQ29hbGVzY2luZyIsdGhpcy5fbG9hZERhdGEoKSl9LHIucHJvdG90eXBlLl9sb2FkRGF0YT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXMpe3ZhciByPXRoaXMuX3BlbmRpbmdDYWxsYmFjayxuPXRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztkZWxldGUgdGhpcy5fcGVuZGluZ0NhbGxiYWNrLGRlbGV0ZSB0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM7dmFyIGk9ISEobiYmbi5yZXF1ZXN0JiZuLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKSYmbmV3IHQuUmVxdWVzdFBlcmZvcm1hbmNlKG4ucmVxdWVzdCk7dGhpcy5sb2FkR2VvSlNPTihuLChmdW5jdGlvbihhLG8pe2lmKGF8fCFvKXJldHVybiByKGEpO2lmKCJvYmplY3QiIT10eXBlb2YgbylyZXR1cm4gcihuZXcgRXJyb3IoIklucHV0IGRhdGEgZ2l2ZW4gdG8gJyIrbi5zb3VyY2UrIicgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpOyFmdW5jdGlvbiB0KGUscil7dmFyIG4saT1lJiZlLnR5cGU7aWYoIkZlYXR1cmVDb2xsZWN0aW9uIj09PWkpZm9yKG49MDtuPGUuZmVhdHVyZXMubGVuZ3RoO24rKyl0KGUuZmVhdHVyZXNbbl0scik7ZWxzZSBpZigiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWkpZm9yKG49MDtuPGUuZ2VvbWV0cmllcy5sZW5ndGg7bisrKXQoZS5nZW9tZXRyaWVzW25dLHIpO2Vsc2UgaWYoIkZlYXR1cmUiPT09aSl0KGUuZ2VvbWV0cnkscik7ZWxzZSBpZigiUG9seWdvbiI9PT1pKWgoZS5jb29yZGluYXRlcyxyKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09aSlmb3Iobj0wO248ZS5jb29yZGluYXRlcy5sZW5ndGg7bisrKWgoZS5jb29yZGluYXRlc1tuXSxyKTtyZXR1cm4gZX0obywhMCk7dHJ5e2UuX2dlb0pTT05JbmRleD1uLmNsdXN0ZXI/bmV3IEYoZnVuY3Rpb24oZSl7dmFyIHI9ZS5zdXBlcmNsdXN0ZXJPcHRpb25zLG49ZS5jbHVzdGVyUHJvcGVydGllcztpZighbnx8IXIpcmV0dXJuIHI7Zm9yKHZhciBpPXt9LGE9e30sbz17YWNjdW11bGF0ZWQ6bnVsbCx6b29tOjB9LHM9e3Byb3BlcnRpZXM6bnVsbH0sbD1PYmplY3Qua2V5cyhuKSxjPTAsdT1sO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXSxmPW5baF0scD1mWzBdLGQ9dC5jcmVhdGVFeHByZXNzaW9uKGZbMV0pLGc9dC5jcmVhdGVFeHByZXNzaW9uKCJzdHJpbmciPT10eXBlb2YgcD9bcCxbImFjY3VtdWxhdGVkIl0sWyJnZXQiLGhdXTpwKTtpW2hdPWQudmFsdWUsYVtoXT1nLnZhbHVlfXJldHVybiByLm1hcD1mdW5jdGlvbih0KXtzLnByb3BlcnRpZXM9dDtmb3IodmFyIGU9e30scj0wLG49bDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBhPW5bcl07ZVthXT1pW2FdLmV2YWx1YXRlKG8scyl9cmV0dXJuIGV9LHIucmVkdWNlPWZ1bmN0aW9uKHQsZSl7cy5wcm9wZXJ0aWVzPWU7Zm9yKHZhciByPTAsbj1sO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTtvLmFjY3VtdWxhdGVkPXRbaV0sdFtpXT1hW2ldLmV2YWx1YXRlKG8scyl9fSxyfShuKSkubG9hZChvLmZlYXR1cmVzKTpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgdnQodCxlKX0obyxuLmdlb2pzb25WdE9wdGlvbnMpfWNhdGNoKGEpe3JldHVybiByKGEpfWUubG9hZGVkPXt9O3ZhciBzPXt9O2lmKGkpe3ZhciBsPWkuZmluaXNoKCk7bCYmKHMucmVzb3VyY2VUaW1pbmc9e30scy5yZXNvdXJjZVRpbWluZ1tuLnNvdXJjZV09SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsKSkpfXIobnVsbCxzKX0pKX19LHIucHJvdG90eXBlLmNvYWxlc2NlPWZ1bmN0aW9uKCl7IkNvYWxlc2NpbmciPT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9IklkbGUiOiJOZWVkc0xvYWREYXRhIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9IkNvYWxlc2NpbmciLHRoaXMuX2xvYWREYXRhKCkpfSxyLnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5sb2FkZWQ7cmV0dXJuIG4mJm5bdC51aWRdP2UucHJvdG90eXBlLnJlbG9hZFRpbGUuY2FsbCh0aGlzLHQscik6dGhpcy5sb2FkVGlsZSh0LHIpfSxyLnByb3RvdHlwZS5sb2FkR2VvSlNPTj1mdW5jdGlvbihlLHIpe2lmKGUucmVxdWVzdCl0LmdldEpTT04oZS5yZXF1ZXN0LHIpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlLmRhdGEpcmV0dXJuIHIobmV3IEVycm9yKCJJbnB1dCBkYXRhIGdpdmVuIHRvICciK2Uuc291cmNlKyInIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKTt0cnl7cmV0dXJuIHIobnVsbCxKU09OLnBhcnNlKGUuZGF0YSkpfWNhdGNoKHQpe3JldHVybiByKG5ldyBFcnJvcigiSW5wdXQgZGF0YSBnaXZlbiB0byAnIitlLnNvdXJjZSsiJyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKSl9fX0sci5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksZSgpfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbT1mdW5jdGlvbih0LGUpe3RyeXtlKG51bGwsdGhpcy5fZ2VvSlNPTkluZGV4LmdldENsdXN0ZXJFeHBhbnNpb25ab29tKHQuY2x1c3RlcklkKSl9Y2F0Y2godCl7ZSh0KX19LHIucHJvdG90eXBlLmdldENsdXN0ZXJDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3RyeXtlKG51bGwsdGhpcy5fZ2VvSlNPTkluZGV4LmdldENoaWxkcmVuKHQuY2x1c3RlcklkKSl9Y2F0Y2godCl7ZSh0KX19LHIucHJvdG90eXBlLmdldENsdXN0ZXJMZWF2ZXM9ZnVuY3Rpb24odCxlKXt0cnl7ZShudWxsLHRoaXMuX2dlb0pTT05JbmRleC5nZXRMZWF2ZXModC5jbHVzdGVySWQsdC5saW1pdCx0Lm9mZnNldCkpfWNhdGNoKHQpe2UodCl9fSxyfShsKSxfdD1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuc2VsZj1lLHRoaXMuYWN0b3I9bmV3IHQuQWN0b3IoZSx0aGlzKSx0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLmF2YWlsYWJsZUltYWdlcz17fSx0aGlzLndvcmtlclNvdXJjZVR5cGVzPXt2ZWN0b3I6bCxnZW9qc29uOmJ0fSx0aGlzLndvcmtlclNvdXJjZXM9e30sdGhpcy5kZW1Xb3JrZXJTb3VyY2VzPXt9LHRoaXMuc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUpe2lmKHIud29ya2VyU291cmNlVHlwZXNbdF0pdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgc291cmNlIHdpdGggbmFtZSAiJyt0KyciIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtyLndvcmtlclNvdXJjZVR5cGVzW3RdPWV9LHRoaXMuc2VsZi5yZWdpc3RlclJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSl7aWYodC5wbHVnaW4uaXNQYXJzZWQoKSl0aHJvdyBuZXcgRXJyb3IoIlJUTCB0ZXh0IHBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQuIik7dC5wbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nPWUuYXBwbHlBcmFiaWNTaGFwaW5nLHQucGx1Z2luLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dD1lLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCx0LnBsdWdpbi5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ9ZS5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHR9fTtyZXR1cm4gX3QucHJvdG90eXBlLnNldFJlZmVycmVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWZlcnJlcj1lfSxfdC5wcm90b3R5cGUuc2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gdGhpcy5hdmFpbGFibGVJbWFnZXNbdF09ZSx0aGlzLndvcmtlclNvdXJjZXNbdF0pe3ZhciBpPXRoaXMud29ya2VyU291cmNlc1t0XVtuXTtmb3IodmFyIGEgaW4gaSlpW2FdLmF2YWlsYWJsZUltYWdlcz1lfXIoKX0sX3QucHJvdG90eXBlLnNldExheWVycz1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRMYXllckluZGV4KHQpLnJlcGxhY2UoZSkscigpfSxfdC5wcm90b3R5cGUudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldExheWVySW5kZXgodCkudXBkYXRlKGUubGF5ZXJzLGUucmVtb3ZlZElkcykscigpfSxfdC5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5sb2FkVGlsZShlLHIpfSxfdC5wcm90b3R5cGUubG9hZERFTVRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLmxvYWRUaWxlKGUscil9LF90LnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVsb2FkVGlsZShlLHIpfSxfdC5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkuYWJvcnRUaWxlKGUscil9LF90LnByb3RvdHlwZS5yZW1vdmVUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVtb3ZlVGlsZShlLHIpfSxfdC5wcm90b3R5cGUucmVtb3ZlREVNVGlsZT1mdW5jdGlvbih0LGUpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLnJlbW92ZVRpbGUoZSl9LF90LnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMud29ya2VyU291cmNlc1t0XSYmdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV0mJnRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXSl7dmFyIG49dGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdO2RlbGV0ZSB0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV0sdm9pZCAwIT09bi5yZW1vdmVTb3VyY2U/bi5yZW1vdmVTb3VyY2UoZSxyKTpyKCl9fSxfdC5wcm90b3R5cGUubG9hZFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dHJ5e3RoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKGUudXJsKSxyKCl9Y2F0Y2godCl7cih0LnRvU3RyaW5nKCkpfX0sX3QucHJvdG90eXBlLnN5bmNSVExQbHVnaW5TdGF0ZT1mdW5jdGlvbihlLHIsbil7dHJ5e3QucGx1Z2luLnNldFN0YXRlKHIpO3ZhciBpPXQucGx1Z2luLmdldFBsdWdpblVSTCgpO2lmKHQucGx1Z2luLmlzTG9hZGVkKCkmJiF0LnBsdWdpbi5pc1BhcnNlZCgpJiZudWxsIT1pKXt0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyhpKTt2YXIgYT10LnBsdWdpbi5pc1BhcnNlZCgpO24oYT92b2lkIDA6bmV3IEVycm9yKCJSVEwgVGV4dCBQbHVnaW4gZmFpbGVkIHRvIGltcG9ydCBzY3JpcHRzIGZyb20gIitpKSxhKX19Y2F0Y2godCl7bih0LnRvU3RyaW5nKCkpfX0sX3QucHJvdG90eXBlLmdldEF2YWlsYWJsZUltYWdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmF2YWlsYWJsZUltYWdlc1t0XTtyZXR1cm4gZXx8KGU9W10pLGV9LF90LnByb3RvdHlwZS5nZXRMYXllckluZGV4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJJbmRleGVzW3RdO3JldHVybiBlfHwoZT10aGlzLmxheWVySW5kZXhlc1t0XT1uZXcgbiksZX0sX3QucHJvdG90eXBlLmdldFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcztyZXR1cm4gdGhpcy53b3JrZXJTb3VyY2VzW3RdfHwodGhpcy53b3JrZXJTb3VyY2VzW3RdPXt9KSx0aGlzLndvcmtlclNvdXJjZXNbdF1bZV18fCh0aGlzLndvcmtlclNvdXJjZXNbdF1bZV09e30pLHRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXXx8KHRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXT1uZXcgdGhpcy53b3JrZXJTb3VyY2VUeXBlc1tlXSh7c2VuZDpmdW5jdGlvbihlLHIsaSl7bi5hY3Rvci5zZW5kKGUscixpLHQpfX0sdGhpcy5nZXRMYXllckluZGV4KHQpLHRoaXMuZ2V0QXZhaWxhYmxlSW1hZ2VzKHQpKSksdGhpcy53b3JrZXJTb3VyY2VzW3RdW2VdW3JdfSxfdC5wcm90b3R5cGUuZ2V0REVNV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVtV29ya2VyU291cmNlc1t0XXx8KHRoaXMuZGVtV29ya2VyU291cmNlc1t0XT17fSksdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdfHwodGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdPW5ldyB1KSx0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF1bZV19LF90LnByb3RvdHlwZS5lbmZvcmNlQ2FjaGVTaXplTGltaXQ9ZnVuY3Rpb24oZSxyKXt0LmVuZm9yY2VDYWNoZVNpemVMaW1pdChyKX0sInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmdm9pZCAwIT09dC53aW5kb3cmJnQud2luZG93IGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJih0LndpbmRvdy53b3JrZXI9bmV3IF90KHQud2luZG93KSksX3R9KSksbigwLChmdW5jdGlvbih0KXt2YXIgZT10LmNyZWF0ZUNvbW1vbmpzTW9kdWxlKChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiFyKHQpfWZ1bmN0aW9uIHIodCl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQ/Im5vdCBhIGJyb3dzZXIiOkFycmF5LnByb3RvdHlwZSYmQXJyYXkucHJvdG90eXBlLmV2ZXJ5JiZBcnJheS5wcm90b3R5cGUuZmlsdGVyJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaCYmQXJyYXkucHJvdG90eXBlLmluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLm1hcCYmQXJyYXkucHJvdG90eXBlLnNvbWUmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2UmJkFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCYmQXJyYXkuaXNBcnJheT9GdW5jdGlvbi5wcm90b3R5cGUmJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kP09iamVjdC5rZXlzJiZPYmplY3QuY3JlYXRlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiZPYmplY3QuaXNTZWFsZWQmJk9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRXh0ZW5zaWJsZSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciYmT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydGllcyYmT2JqZWN0LnNlYWwmJk9iamVjdC5mcmVlemUmJk9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucz8iSlNPTiJpbiB3aW5kb3cmJiJwYXJzZSJpbiBKU09OJiYic3RyaW5naWZ5ImluIEpTT04/ZnVuY3Rpb24oKXtpZighKCJXb3JrZXIiaW4gd2luZG93JiYiQmxvYiJpbiB3aW5kb3cmJiJVUkwiaW4gd2luZG93KSlyZXR1cm4hMTt2YXIgdCxlLHI9bmV3IEJsb2IoWyIiXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pLG49VVJMLmNyZWF0ZU9iamVjdFVSTChyKTt0cnl7ZT1uZXcgV29ya2VyKG4pLHQ9ITB9Y2F0Y2goZSl7dD0hMX1yZXR1cm4gZSYmZS50ZXJtaW5hdGUoKSxVUkwucmV2b2tlT2JqZWN0VVJMKG4pLHR9KCk/IlVpbnQ4Q2xhbXBlZEFycmF5ImluIHdpbmRvdz9BcnJheUJ1ZmZlci5pc1ZpZXc/ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTt0LndpZHRoPXQuaGVpZ2h0PTE7dmFyIGU9dC5nZXRDb250ZXh0KCIyZCIpO2lmKCFlKXJldHVybiExO3ZhciByPWUuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpO3JldHVybiByJiZyLndpZHRoPT09dC53aWR0aH0oKT8odm9pZCAwPT09bltyPXQmJnQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF0mJihuW3JdPWZ1bmN0aW9uKHQpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG49T2JqZWN0LmNyZWF0ZShlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMpO3JldHVybiBuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9dCxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0P3IucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoIndlYmdsIixuKXx8ci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixuKTpyLnN1cHBvcnRzQ29udGV4dD9yLnN1cHBvcnRzQ29udGV4dCgid2ViZ2wiLG4pfHxyLnN1cHBvcnRzQ29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixuKTpyLmdldENvbnRleHQoIndlYmdsIixuKXx8ci5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pfSh0KTtpZighcilyZXR1cm4hMTt2YXIgbj1yLmNyZWF0ZVNoYWRlcihyLlZFUlRFWF9TSEFERVIpO3JldHVybiEoIW58fHIuaXNDb250ZXh0TG9zdCgpKSYmKHIuc2hhZGVyU291cmNlKG4sInZvaWQgbWFpbigpIHt9Iiksci5jb21waWxlU2hhZGVyKG4pLCEwPT09ci5nZXRTaGFkZXJQYXJhbWV0ZXIobixyLkNPTVBJTEVfU1RBVFVTKSl9KHIpKSxuW3JdP3ZvaWQgMDoiaW5zdWZmaWNpZW50IFdlYkdMIHN1cHBvcnQiKToiaW5zdWZmaWNpZW50IENhbnZhcy9nZXRJbWFnZURhdGEgc3VwcG9ydCI6Imluc3VmZmljaWVudCBBcnJheUJ1ZmZlciBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IFVpbnQ4Q2xhbXBlZEFycmF5IHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgd29ya2VyIHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgSlNPTiBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IE9iamVjdCBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IEZ1bmN0aW9uIHN1cHBvcnQiOiJpbnN1ZmZpY2VudCBBcnJheSBzdXBwb3J0Ijt2YXIgcn10LmV4cG9ydHM/dC5leHBvcnRzPWU6d2luZG93JiYod2luZG93Lm1hcGJveGdsPXdpbmRvdy5tYXBib3hnbHx8e30sd2luZG93Lm1hcGJveGdsLnN1cHBvcnRlZD1lLHdpbmRvdy5tYXBib3hnbC5ub3RTdXBwb3J0ZWRSZWFzb249cik7dmFyIG49e307ZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzPXthbnRpYWxpYXM6ITEsYWxwaGE6ITAsc3RlbmNpbDohMCxkZXB0aDohMH19KSkscj17Y3JlYXRlOmZ1bmN0aW9uKGUscixuKXt2YXIgaT10LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiB2b2lkIDAhPT1yJiYoaS5jbGFzc05hbWU9ciksbiYmbi5hcHBlbmRDaGlsZChpKSxpfSxjcmVhdGVOUzpmdW5jdGlvbihlLHIpe3JldHVybiB0LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSxyKX19LG49dC53aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO2Z1bmN0aW9uIGkodCl7aWYoIW4pcmV0dXJuIHRbMF07Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXWluIG4pcmV0dXJuIHRbZV07cmV0dXJuIHRbMF19dmFyIGEsbz1pKFsidXNlclNlbGVjdCIsIk1velVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO3IuZGlzYWJsZURyYWc9ZnVuY3Rpb24oKXtuJiZvJiYoYT1uW29dLG5bb109Im5vbmUiKX0sci5lbmFibGVEcmFnPWZ1bmN0aW9uKCl7biYmbyYmKG5bb109YSl9O3ZhciBzPWkoWyJ0cmFuc2Zvcm0iLCJXZWJraXRUcmFuc2Zvcm0iXSk7ci5zZXRUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt0LnN0eWxlW3NdPWV9O3ZhciBsPSExO3RyeXt2YXIgYz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtsPSEwfX0pO3Qud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGMsYyksdC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsYyxjKX1jYXRjaCh0KXtsPSExfXIuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksdC5hZGRFdmVudExpc3RlbmVyKGUsciwicGFzc2l2ZSJpbiBuJiZsP246bi5jYXB0dXJlKX0sci5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCJwYXNzaXZlImluIG4mJmw/bjpuLmNhcHR1cmUpfTt2YXIgdT1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCl9O2Z1bmN0aW9uIGgodCl7dmFyIGU9dC51c2VySW1hZ2U7cmV0dXJuISEoZSYmZS5yZW5kZXImJmUucmVuZGVyKCkpJiYodC5kYXRhLnJlcGxhY2UobmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmJ1ZmZlcikpLCEwKX1yLnN1cHByZXNzQ2xpY2s9ZnVuY3Rpb24oKXt0LndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCksdC53aW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCl9KSwwKX0sci5tb3VzZVBvcz1mdW5jdGlvbihlLHIpe3ZhciBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG5ldyB0LlBvaW50KHIuY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCl9LHIudG91Y2hQb3M9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPVtdLGE9MDthPHIubGVuZ3RoO2ErKylpLnB1c2gobmV3IHQuUG9pbnQoclthXS5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsclthXS5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKSk7cmV0dXJuIGl9LHIubW91c2VCdXR0b249ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXQud2luZG93Lkluc3RhbGxUcmlnZ2VyJiYyPT09ZS5idXR0b24mJmUuY3RybEtleSYmdC53aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiTUFDIik+PTA/MDplLmJ1dHRvbn0sci5yZW1vdmU9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9O3ZhciBmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmNhbGwodGhpcyksdGhpcy5pbWFnZXM9e30sdGhpcy51cGRhdGVkSW1hZ2VzPXt9LHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lPXt9LHRoaXMubG9hZGVkPSExLHRoaXMucmVxdWVzdG9ycz1bXSx0aGlzLnBhdHRlcm5zPXt9LHRoaXMuYXRsYXNJbWFnZT1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLmRpcnR5PSEwfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksKHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmlzTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGVkfSxyLnByb3RvdHlwZS5zZXRMb2FkZWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5sb2FkZWQhPT10JiYodGhpcy5sb2FkZWQ9dCx0KSl7Zm9yKHZhciBlPTAscj10aGlzLnJlcXVlc3RvcnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO3RoaXMuX25vdGlmeShuLmlkcyxuLmNhbGxiYWNrKX10aGlzLnJlcXVlc3RvcnM9W119fSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZXNbdF19LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsaWRhdGUodCxlKSYmKHRoaXMuaW1hZ2VzW3RdPWUpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0hMDtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHJldGNoKHIuc3RyZXRjaFgsci5kYXRhJiZyLmRhdGEud2lkdGgpfHwodGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdJbWFnZSAiJytlKyciIGhhcyBpbnZhbGlkICJzdHJldGNoWCIgdmFsdWUnKSkpLG49ITEpLHRoaXMuX3ZhbGlkYXRlU3RyZXRjaChyLnN0cmV0Y2hZLHIuZGF0YSYmci5kYXRhLmhlaWdodCl8fCh0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0ltYWdlICInK2UrJyIgaGFzIGludmFsaWQgInN0cmV0Y2hZIiB2YWx1ZScpKSksbj0hMSksdGhpcy5fdmFsaWRhdGVDb250ZW50KHIuY29udGVudCxyKXx8KHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignSW1hZ2UgIicrZSsnIiBoYXMgaW52YWxpZCAiY29udGVudCIgdmFsdWUnKSkpLG49ITEpLG59LHIucHJvdG90eXBlLl92YWxpZGF0ZVN0cmV0Y2g9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4hMDtmb3IodmFyIHI9MCxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtpZihhWzBdPHJ8fGFbMV08YVswXXx8ZTxhWzFdKXJldHVybiExO3I9YVsxXX1yZXR1cm4hMH0sci5wcm90b3R5cGUuX3ZhbGlkYXRlQ29udGVudD1mdW5jdGlvbih0LGUpe3JldHVybiEodCYmKDQhPT10Lmxlbmd0aHx8dFswXTwwfHxlLmRhdGEud2lkdGg8dFswXXx8dFsxXTwwfHxlLmRhdGEuaGVpZ2h0PHRbMV18fHRbMl08MHx8ZS5kYXRhLndpZHRoPHRbMl18fHRbM108MHx8ZS5kYXRhLmhlaWdodDx0WzNdfHx0WzJdPHRbMF18fHRbM108dFsxXSkpfSxyLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbih0LGUpe2UudmVyc2lvbj10aGlzLmltYWdlc1t0XS52ZXJzaW9uKzEsdGhpcy5pbWFnZXNbdF09ZSx0aGlzLnVwZGF0ZWRJbWFnZXNbdF09ITB9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1hZ2VzW3RdO2RlbGV0ZSB0aGlzLmltYWdlc1t0XSxkZWxldGUgdGhpcy5wYXR0ZXJuc1t0XSxlLnVzZXJJbWFnZSYmZS51c2VySW1hZ2Uub25SZW1vdmUmJmUudXNlckltYWdlLm9uUmVtb3ZlKCl9LHIucHJvdG90eXBlLmxpc3RJbWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5pbWFnZXMpfSxyLnByb3RvdHlwZS5nZXRJbWFnZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj0hMDtpZighdGhpcy5pc0xvYWRlZCgpKWZvcih2YXIgbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpdGhpcy5pbWFnZXNbaVtuXV18fChyPSExKTt0aGlzLmlzTG9hZGVkKCl8fHI/dGhpcy5fbm90aWZ5KHQsZSk6dGhpcy5yZXF1ZXN0b3JzLnB1c2goe2lkczp0LGNhbGxiYWNrOmV9KX0sci5wcm90b3R5cGUuX25vdGlmeT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj17fSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTt0aGlzLmltYWdlc1tvXXx8dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJzdHlsZWltYWdlbWlzc2luZyIse2lkOm99KSk7dmFyIHM9dGhpcy5pbWFnZXNbb107cz9uW29dPXtkYXRhOnMuZGF0YS5jbG9uZSgpLHBpeGVsUmF0aW86cy5waXhlbFJhdGlvLHNkZjpzLnNkZix2ZXJzaW9uOnMudmVyc2lvbixzdHJldGNoWDpzLnN0cmV0Y2hYLHN0cmV0Y2hZOnMuc3RyZXRjaFksY29udGVudDpzLmNvbnRlbnQsaGFzUmVuZGVyQ2FsbGJhY2s6Qm9vbGVhbihzLnVzZXJJbWFnZSYmcy51c2VySW1hZ2UucmVuZGVyKX06dC53YXJuT25jZSgnSW1hZ2UgIicrbysnIiBjb3VsZCBub3QgYmUgbG9hZGVkLiBQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIGFkZGVkIHRoZSBpbWFnZSB3aXRoIG1hcC5hZGRJbWFnZSgpIG9yIGEgInNwcml0ZSIgcHJvcGVydHkgaW4geW91ciBzdHlsZS4gWW91IGNhbiBwcm92aWRlIG1pc3NpbmcgaW1hZ2VzIGJ5IGxpc3RlbmluZyBmb3IgdGhlICJzdHlsZWltYWdlbWlzc2luZyIgbWFwIGV2ZW50LicpfXIobnVsbCxuKX0sci5wcm90b3R5cGUuZ2V0UGl4ZWxTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdGxhc0ltYWdlO3JldHVybnt3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19LHIucHJvdG90eXBlLmdldFBhdHRlcm49ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5wYXR0ZXJuc1tlXSxuPXRoaXMuZ2V0SW1hZ2UoZSk7aWYoIW4pcmV0dXJuIG51bGw7aWYociYmci5wb3NpdGlvbi52ZXJzaW9uPT09bi52ZXJzaW9uKXJldHVybiByLnBvc2l0aW9uO2lmKHIpci5wb3NpdGlvbi52ZXJzaW9uPW4udmVyc2lvbjtlbHNle3ZhciBpPXt3Om4uZGF0YS53aWR0aCsyLGg6bi5kYXRhLmhlaWdodCsyLHg6MCx5OjB9LGE9bmV3IHQuSW1hZ2VQb3NpdGlvbihpLG4pO3RoaXMucGF0dGVybnNbZV09e2JpbjppLHBvc2l0aW9uOmF9fXJldHVybiB0aGlzLl91cGRhdGVQYXR0ZXJuQXRsYXMoKSx0aGlzLnBhdHRlcm5zW2VdLnBvc2l0aW9ufSxyLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUpe3ZhciByPWUuZ2w7dGhpcy5hdGxhc1RleHR1cmU/dGhpcy5kaXJ0eSYmKHRoaXMuYXRsYXNUZXh0dXJlLnVwZGF0ZSh0aGlzLmF0bGFzSW1hZ2UpLHRoaXMuZGlydHk9ITEpOnRoaXMuYXRsYXNUZXh0dXJlPW5ldyB0LlRleHR1cmUoZSx0aGlzLmF0bGFzSW1hZ2Usci5SR0JBKSx0aGlzLmF0bGFzVGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSl9LHIucHJvdG90eXBlLl91cGRhdGVQYXR0ZXJuQXRsYXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdGhpcy5wYXR0ZXJucyllLnB1c2godGhpcy5wYXR0ZXJuc1tyXS5iaW4pO3ZhciBuPXQucG90cGFjayhlKSxpPW4udyxhPW4uaCxvPXRoaXMuYXRsYXNJbWFnZTtmb3IodmFyIHMgaW4gby5yZXNpemUoe3dpZHRoOml8fDEsaGVpZ2h0OmF8fDF9KSx0aGlzLnBhdHRlcm5zKXt2YXIgbD10aGlzLnBhdHRlcm5zW3NdLmJpbixjPWwueCsxLHU9bC55KzEsaD10aGlzLmltYWdlc1tzXS5kYXRhLGY9aC53aWR0aCxwPWguaGVpZ2h0O3QuUkdCQUltYWdlLmNvcHkoaCxvLHt4OjAseTowfSx7eDpjLHk6dX0se3dpZHRoOmYsaGVpZ2h0OnB9KSx0LlJHQkFJbWFnZS5jb3B5KGgsbyx7eDowLHk6cC0xfSx7eDpjLHk6dS0xfSx7d2lkdGg6ZixoZWlnaHQ6MX0pLHQuUkdCQUltYWdlLmNvcHkoaCxvLHt4OjAseTowfSx7eDpjLHk6dStwfSx7d2lkdGg6ZixoZWlnaHQ6MX0pLHQuUkdCQUltYWdlLmNvcHkoaCxvLHt4OmYtMSx5OjB9LHt4OmMtMSx5OnV9LHt3aWR0aDoxLGhlaWdodDpwfSksdC5SR0JBSW1hZ2UuY29weShoLG8se3g6MCx5OjB9LHt4OmMrZix5OnV9LHt3aWR0aDoxLGhlaWdodDpwfSl9dGhpcy5kaXJ0eT0hMH0sci5wcm90b3R5cGUuYmVnaW5GcmFtZT1mdW5jdGlvbigpe3RoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lPXt9fSxyLnByb3RvdHlwZS5kaXNwYXRjaFJlbmRlckNhbGxiYWNrcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO2lmKCF0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZVtuXSl7dGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWVbbl09ITA7dmFyIGk9dGhpcy5pbWFnZXNbbl07aChpKSYmdGhpcy51cGRhdGVJbWFnZShuLGkpfX19LHJ9KHQuRXZlbnRlZCkscD1tLGQ9bSxnPTFlMjA7ZnVuY3Rpb24gbSh0LGUscixuLGksYSl7dGhpcy5mb250U2l6ZT10fHwyNCx0aGlzLmJ1ZmZlcj12b2lkIDA9PT1lPzM6ZSx0aGlzLmN1dG9mZj1ufHwuMjUsdGhpcy5mb250RmFtaWx5PWl8fCJzYW5zLXNlcmlmIix0aGlzLmZvbnRXZWlnaHQ9YXx8Im5vcm1hbCIsdGhpcy5yYWRpdXM9cnx8ODt2YXIgbz10aGlzLnNpemU9dGhpcy5mb250U2l6ZSsyKnRoaXMuYnVmZmVyO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD1vLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5jdHguZm9udD10aGlzLmZvbnRXZWlnaHQrIiAiK3RoaXMuZm9udFNpemUrInB4ICIrdGhpcy5mb250RmFtaWx5LHRoaXMuY3R4LnRleHRCYXNlbGluZT0ibWlkZGxlIix0aGlzLmN0eC5maWxsU3R5bGU9ImJsYWNrIix0aGlzLmdyaWRPdXRlcj1uZXcgRmxvYXQ2NEFycmF5KG8qbyksdGhpcy5ncmlkSW5uZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZj1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuZD1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuej1uZXcgRmxvYXQ2NEFycmF5KG8rMSksdGhpcy52PW5ldyBJbnQxNkFycmF5KG8pLHRoaXMubWlkZGxlPU1hdGgucm91bmQoby8yKihuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkdlY2tvLyIpPj0wPzEuMjoxKSl9ZnVuY3Rpb24gdih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MDtzPGU7cysrKXtmb3IodmFyIGw9MDtsPHI7bCsrKW5bbF09dFtsKmUrc107Zm9yKHkobixpLGEsbyxyKSxsPTA7bDxyO2wrKyl0W2wqZStzXT1pW2xdfWZvcihsPTA7bDxyO2wrKyl7Zm9yKHM9MDtzPGU7cysrKW5bc109dFtsKmUrc107Zm9yKHkobixpLGEsbyxlKSxzPTA7czxlO3MrKyl0W2wqZStzXT1NYXRoLnNxcnQoaVtzXSl9fWZ1bmN0aW9uIHkodCxlLHIsbixpKXtyWzBdPTAsblswXT0tZyxuWzFdPStnO2Zvcih2YXIgYT0xLG89MDthPGk7YSsrKXtmb3IodmFyIHM9KHRbYV0rYSphLSh0W3Jbb11dK3Jbb10qcltvXSkpLygyKmEtMipyW29dKTtzPD1uW29dOylvLS0scz0odFthXSthKmEtKHRbcltvXV0rcltvXSpyW29dKSkvKDIqYS0yKnJbb10pO3JbKytvXT1hLG5bb109cyxuW28rMV09K2d9Zm9yKGE9MCxvPTA7YTxpO2ErKyl7Zm9yKDtuW28rMV08YTspbysrO2VbYV09KGEtcltvXSkqKGEtcltvXSkrdFtyW29dXX19bS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0KXt0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHRoaXMuY3R4LmZpbGxUZXh0KHQsdGhpcy5idWZmZXIsdGhpcy5taWRkbGUpO2Zvcih2YXIgZT10aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRoaXMuc2l6ZSp0aGlzLnNpemUpLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgaT1lLmRhdGFbNCpuKzNdLzI1NTt0aGlzLmdyaWRPdXRlcltuXT0xPT09aT8wOjA9PT1pP2c6TWF0aC5wb3coTWF0aC5tYXgoMCwuNS1pKSwyKSx0aGlzLmdyaWRJbm5lcltuXT0xPT09aT9nOjA9PT1pPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxpLS41KSwyKX1mb3Iodih0aGlzLmdyaWRPdXRlcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksdih0aGlzLmdyaWRJbm5lcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspcltuXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI1NS0yNTUqKCh0aGlzLmdyaWRPdXRlcltuXS10aGlzLmdyaWRJbm5lcltuXSkvdGhpcy5yYWRpdXMrdGhpcy5jdXRvZmYpKSkpO3JldHVybiByfSxwLmRlZmF1bHQ9ZDt2YXIgeD1mdW5jdGlvbih0LGUpe3RoaXMucmVxdWVzdE1hbmFnZXI9dCx0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLHRoaXMuZW50cmllcz17fX07eC5wcm90b3R5cGUuc2V0VVJMPWZ1bmN0aW9uKHQpe3RoaXMudXJsPXR9LHgucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsaT1bXTtmb3IodmFyIGEgaW4gZSlmb3IodmFyIG89MCxzPWVbYV07bzxzLmxlbmd0aDtvKz0xKWkucHVzaCh7c3RhY2s6YSxpZDpzW29dfSk7dC5hc3luY0FsbChpLChmdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhY2ssaT10LmlkLGE9bi5lbnRyaWVzW3JdO2F8fChhPW4uZW50cmllc1tyXT17Z2x5cGhzOnt9LHJlcXVlc3RzOnt9LHJhbmdlczp7fX0pO3ZhciBvPWEuZ2x5cGhzW2ldO2lmKHZvaWQgMD09PW8pe2lmKG89bi5fdGlueVNERihhLHIsaSkpcmV0dXJuIGEuZ2x5cGhzW2ldPW8sdm9pZCBlKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSk7dmFyIHM9TWF0aC5mbG9vcihpLzI1Nik7aWYoMjU2KnM+NjU1MzUpZShuZXcgRXJyb3IoImdseXBocyA+IDY1NTM1IG5vdCBzdXBwb3J0ZWQiKSk7ZWxzZSBpZihhLnJhbmdlc1tzXSllKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSk7ZWxzZXt2YXIgbD1hLnJlcXVlc3RzW3NdO2x8fChsPWEucmVxdWVzdHNbc109W10seC5sb2FkR2x5cGhSYW5nZShyLHMsbi51cmwsbi5yZXF1ZXN0TWFuYWdlciwoZnVuY3Rpb24odCxlKXtpZihlKXtmb3IodmFyIHIgaW4gZSluLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKCtyKXx8KGEuZ2x5cGhzWytyXT1lWytyXSk7YS5yYW5nZXNbc109ITB9Zm9yKHZhciBpPTAsbz1sO2k8by5sZW5ndGg7aSs9MSkoMCxvW2ldKSh0LGUpO2RlbGV0ZSBhLnJlcXVlc3RzW3NdfSkpKSxsLnB1c2goKGZ1bmN0aW9uKHQsbil7dD9lKHQpOm4mJmUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm5baV18fG51bGx9KX0pKX19ZWxzZSBlKG51bGwse3N0YWNrOnIsaWQ6aSxnbHlwaDpvfSl9KSwoZnVuY3Rpb24odCxlKXtpZih0KXIodCk7ZWxzZSBpZihlKXtmb3IodmFyIG49e30saT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLnN0YWNrLGw9by5pZCxjPW8uZ2x5cGg7KG5bc118fChuW3NdPXt9KSlbbF09YyYme2lkOmMuaWQsYml0bWFwOmMuYml0bWFwLmNsb25lKCksbWV0cmljczpjLm1ldHJpY3N9fXIobnVsbCxuKX19KSl9LHgucHJvdG90eXBlLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoPWZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkmJih0LmlzQ2hhclsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKGUpfHx0LmlzQ2hhclsiSGFuZ3VsIFN5bGxhYmxlcyJdKGUpfHx0LmlzQ2hhci5IaXJhZ2FuYShlKXx8dC5pc0NoYXIuS2F0YWthbmEoZSkpfSx4LnByb3RvdHlwZS5fdGlueVNERj1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7aWYoaSYmdGhpcy5fZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaChuKSl7dmFyIGE9ZS50aW55U0RGO2lmKCFhKXt2YXIgbz0iNDAwIjsvYm9sZC9pLnRlc3Qocik/bz0iOTAwIjovbWVkaXVtL2kudGVzdChyKT9vPSI1MDAiOi9saWdodC9pLnRlc3QocikmJihvPSIyMDAiKSxhPWUudGlueVNERj1uZXcgeC5UaW55U0RGKDI0LDMsOCwuMjUsaSxvKX1yZXR1cm57aWQ6bixiaXRtYXA6bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6MzAsaGVpZ2h0OjMwfSxhLmRyYXcoU3RyaW5nLmZyb21DaGFyQ29kZShuKSkpLG1ldHJpY3M6e3dpZHRoOjI0LGhlaWdodDoyNCxsZWZ0OjAsdG9wOi04LGFkdmFuY2U6MjR9fX19LHgubG9hZEdseXBoUmFuZ2U9ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbz0yNTYqcixzPW8rMjU1LGw9aS50cmFuc2Zvcm1SZXF1ZXN0KGkubm9ybWFsaXplR2x5cGhzVVJMKG4pLnJlcGxhY2UoIntmb250c3RhY2t9IixlKS5yZXBsYWNlKCJ7cmFuZ2V9IixvKyItIitzKSx0LlJlc291cmNlVHlwZS5HbHlwaHMpO3QuZ2V0QXJyYXlCdWZmZXIobCwoZnVuY3Rpb24oZSxyKXtpZihlKWEoZSk7ZWxzZSBpZihyKXtmb3IodmFyIG49e30saT0wLG89dC5wYXJzZUdseXBoUEJGKHIpO2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXTtuW3MuaWRdPXN9YShudWxsLG4pfX0pKX0seC5UaW55U0RGPXA7dmFyIGI9ZnVuY3Rpb24oKXt0aGlzLnNwZWNpZmljYXRpb249dC5zdHlsZVNwZWMubGlnaHQucG9zaXRpb259O2IucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5zcGhlcmljYWxUb0NhcnRlc2lhbihlLmV4cHJlc3Npb24uZXZhbHVhdGUocikpfSxiLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlLHIsbil7cmV0dXJue3g6dC5udW1iZXIoZS54LHIueCxuKSx5OnQubnVtYmVyKGUueSxyLnksbiksejp0Lm51bWJlcihlLnosci56LG4pfX07dmFyIF89bmV3IHQuUHJvcGVydGllcyh7YW5jaG9yOm5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuc3R5bGVTcGVjLmxpZ2h0LmFuY2hvcikscG9zaXRpb246bmV3IGIsY29sb3I6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5zdHlsZVNwZWMubGlnaHQuY29sb3IpLGludGVuc2l0eTpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LnN0eWxlU3BlYy5saWdodC5pbnRlbnNpdHkpfSksdz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIpe2UuY2FsbCh0aGlzKSx0aGlzLl90cmFuc2l0aW9uYWJsZT1uZXcgdC5UcmFuc2l0aW9uYWJsZShfKSx0aGlzLnNldExpZ2h0KHIpLHRoaXMuX3RyYW5zaXRpb25pbmc9dGhpcy5fdHJhbnNpdGlvbmFibGUudW50cmFuc2l0aW9uZWQoKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSxyKXtpZih2b2lkIDA9PT1yJiYocj17fSksIXRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVMaWdodCxlLHIpKWZvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dO3QuZW5kc1dpdGgobiwiLXRyYW5zaXRpb24iKT90aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRUcmFuc2l0aW9uKG4uc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpLGkpOnRoaXMuX3RyYW5zaXRpb25hYmxlLnNldFZhbHVlKG4saSl9fSxyLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nPXRoaXMuX3RyYW5zaXRpb25hYmxlLnRyYW5zaXRpb25lZCh0LHRoaXMuX3RyYW5zaXRpb25pbmcpfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmcuaGFzVHJhbnNpdGlvbigpfSxyLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnRpZXM9dGhpcy5fdHJhbnNpdGlvbmluZy5wb3NzaWJseUV2YWx1YXRlKHQpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybighbnx8ITEhPT1uLnZhbGlkYXRlKSYmdC5lbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe3ZhbHVlOnIsc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9LHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pKSl9LHJ9KHQuRXZlbnRlZCksVD1mdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMubmV4dFJvdz0wLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0KSx0aGlzLmRhc2hFbnRyeT17fX07VC5wcm90b3R5cGUuZ2V0RGFzaD1mdW5jdGlvbih0LGUpe3ZhciByPXQuam9pbigiLCIpK1N0cmluZyhlKTtyZXR1cm4gdGhpcy5kYXNoRW50cnlbcl18fCh0aGlzLmRhc2hFbnRyeVtyXT10aGlzLmFkZERhc2godCxlKSksdGhpcy5kYXNoRW50cnlbcl19LFQucHJvdG90eXBlLmdldERhc2hSYW5nZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdLGk9dC5sZW5ndGglMj09MT8tdFt0Lmxlbmd0aC0xXSpyOjAsYT10WzBdKnIsbz0hMDtuLnB1c2goe2xlZnQ6aSxyaWdodDphLGlzRGFzaDpvLHplcm9MZW5ndGg6MD09PXRbMF19KTtmb3IodmFyIHM9dFswXSxsPTE7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPXRbbF07bi5wdXNoKHtsZWZ0Omk9cypyLHJpZ2h0OmE9KHMrPWMpKnIsaXNEYXNoOm89IW8semVyb0xlbmd0aDowPT09Y30pfXJldHVybiBufSxULnByb3RvdHlwZS5hZGRSb3VuZERhc2g9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLzIsaT0tcjtpPD1yO2krKylmb3IodmFyIGE9dGhpcy53aWR0aCoodGhpcy5uZXh0Um93K3IraSksbz0wLHM9dFtvXSxsPTA7bDx0aGlzLndpZHRoO2wrKyl7bC9zLnJpZ2h0PjEmJihzPXRbKytvXSk7dmFyIGM9TWF0aC5hYnMobC1zLmxlZnQpLHU9TWF0aC5hYnMobC1zLnJpZ2h0KSxoPU1hdGgubWluKGMsdSksZj12b2lkIDAscD1pL3IqKG4rMSk7aWYocy5pc0Rhc2gpe3ZhciBkPW4tTWF0aC5hYnMocCk7Zj1NYXRoLnNxcnQoaCpoK2QqZCl9ZWxzZSBmPW4tTWF0aC5zcXJ0KGgqaCtwKnApO3RoaXMuZGF0YVthK2xdPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LGYrMTI4KSl9fSxULnByb3RvdHlwZS5hZGRSZWd1bGFyRGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dFtlXSxuPXRbZSsxXTtyLnplcm9MZW5ndGg/dC5zcGxpY2UoZSwxKTpuJiZuLmlzRGFzaD09PXIuaXNEYXNoJiYobi5sZWZ0PXIubGVmdCx0LnNwbGljZShlLDEpKX12YXIgaT10WzBdLGE9dFt0Lmxlbmd0aC0xXTtpLmlzRGFzaD09PWEuaXNEYXNoJiYoaS5sZWZ0PWEubGVmdC10aGlzLndpZHRoLGEucmlnaHQ9aS5yaWdodCt0aGlzLndpZHRoKTtmb3IodmFyIG89dGhpcy53aWR0aCp0aGlzLm5leHRSb3cscz0wLGw9dFtzXSxjPTA7Yzx0aGlzLndpZHRoO2MrKyl7Yy9sLnJpZ2h0PjEmJihsPXRbKytzXSk7dmFyIHU9TWF0aC5hYnMoYy1sLmxlZnQpLGg9TWF0aC5hYnMoYy1sLnJpZ2h0KSxmPU1hdGgubWluKHUsaCk7dGhpcy5kYXRhW28rY109TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsKGwuaXNEYXNoP2Y6LWYpKzEyOCkpfX0sVC5wcm90b3R5cGUuYWRkRGFzaD1mdW5jdGlvbihlLHIpe3ZhciBuPXI/NzowLGk9MipuKzE7aWYodGhpcy5uZXh0Um93K2k+dGhpcy5oZWlnaHQpcmV0dXJuIHQud2Fybk9uY2UoIkxpbmVBdGxhcyBvdXQgb2Ygc3BhY2UiKSxudWxsO2Zvcih2YXIgYT0wLG89MDtvPGUubGVuZ3RoO28rKylhKz1lW29dO2lmKDAhPT1hKXt2YXIgcz10aGlzLndpZHRoL2EsbD10aGlzLmdldERhc2hSYW5nZXMoZSx0aGlzLndpZHRoLHMpO3I/dGhpcy5hZGRSb3VuZERhc2gobCxzLG4pOnRoaXMuYWRkUmVndWxhckRhc2gobCl9dmFyIGM9e3k6KHRoaXMubmV4dFJvdytuKy41KS90aGlzLmhlaWdodCxoZWlnaHQ6MipuL3RoaXMuaGVpZ2h0LHdpZHRoOmF9O3JldHVybiB0aGlzLm5leHRSb3crPWksdGhpcy5kaXJ0eT0hMCxjfSxULnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2w7dGhpcy50ZXh0dXJlPyhlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHRoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLGUudGV4U3ViSW1hZ2UyRChlLlRFWFRVUkVfMkQsMCwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxlLkFMUEhBLGUuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKSk6KHRoaXMudGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfUyxlLlJFUEVBVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9ULGUuUkVQRUFUKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTElORUFSKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLGUuTElORUFSKSxlLnRleEltYWdlMkQoZS5URVhUVVJFXzJELDAsZS5BTFBIQSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsZS5BTFBIQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSl9O3ZhciBrPWZ1bmN0aW9uIGUocixuKXt0aGlzLndvcmtlclBvb2w9cix0aGlzLmFjdG9ycz1bXSx0aGlzLmN1cnJlbnRBY3Rvcj0wLHRoaXMuaWQ9dC51bmlxdWVJZCgpO2Zvcih2YXIgaT10aGlzLndvcmtlclBvb2wuYWNxdWlyZSh0aGlzLmlkKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPW5ldyBlLkFjdG9yKGlbYV0sbix0aGlzLmlkKTtvLm5hbWU9IldvcmtlciAiK2EsdGhpcy5hY3RvcnMucHVzaChvKX19O2Z1bmN0aW9uIE0oZSxyLG4pe3ZhciBpPWZ1bmN0aW9uKGksYSl7aWYoaSlyZXR1cm4gbihpKTtpZihhKXt2YXIgbz10LnBpY2sodC5leHRlbmQoYSxlKSxbInRpbGVzIiwibWluem9vbSIsIm1heHpvb20iLCJhdHRyaWJ1dGlvbiIsIm1hcGJveF9sb2dvIiwiYm91bmRzIiwic2NoZW1lIiwidGlsZVNpemUiLCJlbmNvZGluZyJdKTthLnZlY3Rvcl9sYXllcnMmJihvLnZlY3RvckxheWVycz1hLnZlY3Rvcl9sYXllcnMsby52ZWN0b3JMYXllcklkcz1vLnZlY3RvckxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpKSxvLnRpbGVzPXIuY2Fub25pY2FsaXplVGlsZXNldChvLGUudXJsKSxuKG51bGwsbyl9fTtyZXR1cm4gZS51cmw/dC5nZXRKU09OKHIudHJhbnNmb3JtUmVxdWVzdChyLm5vcm1hbGl6ZVNvdXJjZVVSTChlLnVybCksdC5SZXNvdXJjZVR5cGUuU291cmNlKSxpKTp0LmJyb3dzZXIuZnJhbWUoKGZ1bmN0aW9uKCl7cmV0dXJuIGkobnVsbCxlKX0pKX1rLnByb3RvdHlwZS5icm9hZGNhc3Q9ZnVuY3Rpb24oZSxyLG4pe3QuYXN5bmNBbGwodGhpcy5hY3RvcnMsKGZ1bmN0aW9uKHQsbil7dC5zZW5kKGUscixuKX0pLG49bnx8ZnVuY3Rpb24oKXt9KX0say5wcm90b3R5cGUuZ2V0QWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50QWN0b3I9KHRoaXMuY3VycmVudEFjdG9yKzEpJXRoaXMuYWN0b3JzLmxlbmd0aCx0aGlzLmFjdG9yc1t0aGlzLmN1cnJlbnRBY3Rvcl19LGsucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuYWN0b3JzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucmVtb3ZlKCl9KSksdGhpcy5hY3RvcnM9W10sdGhpcy53b3JrZXJQb29sLnJlbGVhc2UodGhpcy5pZCl9LGsuQWN0b3I9dC5BY3Rvcjt2YXIgQT1mdW5jdGlvbihlLHIsbil7dGhpcy5ib3VuZHM9dC5MbmdMYXRCb3VuZHMuY29udmVydCh0aGlzLnZhbGlkYXRlQm91bmRzKGUpKSx0aGlzLm1pbnpvb209cnx8MCx0aGlzLm1heHpvb209bnx8MjR9O0EucHJvdG90eXBlLnZhbGlkYXRlQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiY0PT09dC5sZW5ndGg/W01hdGgubWF4KC0xODAsdFswXSksTWF0aC5tYXgoLTkwLHRbMV0pLE1hdGgubWluKDE4MCx0WzJdKSxNYXRoLm1pbig5MCx0WzNdKV06Wy0xODAsLTkwLDE4MCw5MF19LEEucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGUpe3ZhciByPU1hdGgucG93KDIsZS56KSxuPU1hdGguZmxvb3IodC5tZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldFdlc3QoKSkqciksaT1NYXRoLmZsb29yKHQubWVyY2F0b3JZZnJvbUxhdCh0aGlzLmJvdW5kcy5nZXROb3J0aCgpKSpyKSxhPU1hdGguY2VpbCh0Lm1lcmNhdG9yWGZyb21MbmcodGhpcy5ib3VuZHMuZ2V0RWFzdCgpKSpyKSxvPU1hdGguY2VpbCh0Lm1lcmNhdG9yWWZyb21MYXQodGhpcy5ib3VuZHMuZ2V0U291dGgoKSkqcik7cmV0dXJuIGUueD49biYmZS54PGEmJmUueT49aSYmZS55PG99O3ZhciBTPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7aWYoZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLnR5cGU9InZlY3RvciIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMuc2NoZW1lPSJ4eXoiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHRoaXMuX2xvYWRlZD0hMSx0LmV4dGVuZCh0aGlzLHQucGljayhuLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiLCJwcm9tb3RlSWQiXSkpLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe3R5cGU6InZlY3RvciJ9LG4pLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1uLmNvbGxlY3RSZXNvdXJjZVRpbWluZyw1MTIhPT10aGlzLnRpbGVTaXplKXRocm93IG5ldyBFcnJvcigidmVjdG9yIHRpbGUgc291cmNlcyBtdXN0IGhhdmUgYSB0aWxlU2l6ZSBvZiA1MTIiKTt0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fbG9hZGVkPSExLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLl90aWxlSlNPTlJlcXVlc3Q9TSh0aGlzLl9vcHRpb25zLHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwoZnVuY3Rpb24ocixuKXtlLl90aWxlSlNPTlJlcXVlc3Q9bnVsbCxlLl9sb2FkZWQ9ITAscj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKHQuZXh0ZW5kKGUsbiksbi5ib3VuZHMmJihlLnRpbGVCb3VuZHM9bmV3IEEobi5ib3VuZHMsZS5taW56b29tLGUubWF4em9vbSkpLHQucG9zdFR1cm5zdGlsZUV2ZW50KG4udGlsZXMsZS5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9jdXN0b21BY2Nlc3NUb2tlbiksdC5wb3N0TWFwTG9hZEV2ZW50KG4udGlsZXMsZS5tYXAuX2dldE1hcElkKCksZS5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9za3VUb2tlbixlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VuKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl90aWxlSlNPTlJlcXVlc3QmJih0aGlzLl90aWxlSlNPTlJlcXVlc3QuY2FuY2VsKCksdGhpcy5fdGlsZUpTT05SZXF1ZXN0PW51bGwpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSksaT17cmVxdWVzdDp0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChuLHQuUmVzb3VyY2VUeXBlLlRpbGUpLHVpZDplLnVpZCx0aWxlSUQ6ZS50aWxlSUQsem9vbTplLnRpbGVJRC5vdmVyc2NhbGVkWix0aWxlU2l6ZTp0aGlzLnRpbGVTaXplKmUudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlcyxwcm9tb3RlSWQ6dGhpcy5wcm9tb3RlSWR9O2Z1bmN0aW9uIGEobixpKXtyZXR1cm4gZGVsZXRlIGUucmVxdWVzdCxlLmFib3J0ZWQ/cihudWxsKTpuJiY0MDQhPT1uLnN0YXR1cz9yKG4pOihpJiZpLnJlc291cmNlVGltaW5nJiYoZS5yZXNvdXJjZVRpbWluZz1pLnJlc291cmNlVGltaW5nKSx0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmaSYmZS5zZXRFeHBpcnlEYXRhKGkpLGUubG9hZFZlY3RvckRhdGEoaSx0aGlzLm1hcC5wYWludGVyKSx0LmNhY2hlRW50cnlQb3NzaWJseUFkZGVkKHRoaXMuZGlzcGF0Y2hlcikscihudWxsKSx2b2lkKGUucmVsb2FkQ2FsbGJhY2smJih0aGlzLmxvYWRUaWxlKGUsZS5yZWxvYWRDYWxsYmFjayksZS5yZWxvYWRDYWxsYmFjaz1udWxsKSkpfWkucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9dGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nLGUuYWN0b3ImJiJleHBpcmVkIiE9PWUuc3RhdGU/ImxvYWRpbmciPT09ZS5zdGF0ZT9lLnJlbG9hZENhbGxiYWNrPXI6ZS5yZXF1ZXN0PWUuYWN0b3Iuc2VuZCgicmVsb2FkVGlsZSIsaSxhLmJpbmQodGhpcykpOihlLmFjdG9yPXRoaXMuZGlzcGF0Y2hlci5nZXRBY3RvcigpLGUucmVxdWVzdD1lLmFjdG9yLnNlbmQoImxvYWRUaWxlIixpLGEuYmluZCh0aGlzKSkpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCl7dC5yZXF1ZXN0JiYodC5yZXF1ZXN0LmNhbmNlbCgpLGRlbGV0ZSB0LnJlcXVlc3QpLHQuYWN0b3ImJnQuYWN0b3Iuc2VuZCgiYWJvcnRUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDApfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSgpLHQuYWN0b3ImJnQuYWN0b3Iuc2VuZCgicmVtb3ZlVGlsZSIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sdm9pZCAwKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMuZGlzcGF0Y2hlcj1pLHRoaXMuc2V0RXZlbnRlZFBhcmVudChhKSx0aGlzLnR5cGU9InJhc3RlciIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMucm91bmRab29tPSEwLHRoaXMuc2NoZW1lPSJ4eXoiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMuX2xvYWRlZD0hMSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOiJyYXN0ZXIifSxuKSx0LmV4dGVuZCh0aGlzLHQucGljayhuLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiXSkpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksKHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2xvYWRlZD0hMSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdGlsZUpTT05SZXF1ZXN0PU0odGhpcy5fb3B0aW9ucyx0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsKGZ1bmN0aW9uKHIsbil7ZS5fdGlsZUpTT05SZXF1ZXN0PW51bGwsZS5fbG9hZGVkPSEwLHI/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJih0LmV4dGVuZChlLG4pLG4uYm91bmRzJiYoZS50aWxlQm91bmRzPW5ldyBBKG4uYm91bmRzLGUubWluem9vbSxlLm1heHpvb20pKSx0LnBvc3RUdXJuc3RpbGVFdmVudChuLnRpbGVzKSx0LnBvc3RNYXBMb2FkRXZlbnQobi50aWxlcyxlLm1hcC5fZ2V0TWFwSWQoKSxlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX3NrdVRva2VuKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fdGlsZUpTT05SZXF1ZXN0JiYodGhpcy5fdGlsZUpTT05SZXF1ZXN0LmNhbmNlbCgpLHRoaXMuX3RpbGVKU09OUmVxdWVzdD1udWxsKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMpfSxyLnByb3RvdHlwZS5oYXNUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLnRpbGVCb3VuZHN8fHRoaXMudGlsZUJvdW5kcy5jb250YWlucyh0LmNhbm9uaWNhbCl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVUaWxlVVJMKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSksdGhpcy50aWxlU2l6ZSk7ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoaSx0LlJlc291cmNlVHlwZS5UaWxlKSwoZnVuY3Rpb24oaSxhKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPSJ1bmxvYWRlZCIscihudWxsKTtlbHNlIGlmKGkpZS5zdGF0ZT0iZXJyb3JlZCIscihpKTtlbHNlIGlmKGEpe24ubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEoYSksZGVsZXRlIGEuY2FjaGVDb250cm9sLGRlbGV0ZSBhLmV4cGlyZXM7dmFyIG89bi5tYXAucGFpbnRlci5jb250ZXh0LHM9by5nbDtlLnRleHR1cmU9bi5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShhLndpZHRoKSxlLnRleHR1cmU/ZS50ZXh0dXJlLnVwZGF0ZShhLHt1c2VNaXBtYXA6ITB9KTooZS50ZXh0dXJlPW5ldyB0LlRleHR1cmUobyxhLHMuUkdCQSx7dXNlTWlwbWFwOiEwfSksZS50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyYmcy50ZXhQYXJhbWV0ZXJmKHMuVEVYVFVSRV8yRCxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heCkpLGUuc3RhdGU9ImxvYWRlZCIsdC5jYWNoZUVudHJ5UG9zc2libHlBZGRlZChuLmRpc3BhdGNoZXIpLHIobnVsbCl9fSkpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt0LnJlcXVlc3QmJih0LnJlcXVlc3QuY2FuY2VsKCksZGVsZXRlIHQucmVxdWVzdCksZSgpfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dC50ZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LnRleHR1cmUpLGUoKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyxyLG4saSxhKSx0aGlzLnR5cGU9InJhc3Rlci1kZW0iLHRoaXMubWF4em9vbT0yMix0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOiJyYXN0ZXItZGVtIn0sbiksdGhpcy5lbmNvZGluZz1uLmVuY29kaW5nfHwibWFwYm94In1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToicmFzdGVyLWRlbSIsdXJsOnRoaXMudXJsLHRpbGVTaXplOnRoaXMudGlsZVNpemUsdGlsZXM6dGhpcy50aWxlcyxib3VuZHM6dGhpcy5ib3VuZHMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ319LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSx0aGlzLnRpbGVTaXplKTtmdW5jdGlvbiBpKHQsbil7dCYmKGUuc3RhdGU9ImVycm9yZWQiLHIodCkpLG4mJihlLmRlbT1uLGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwLGUuc3RhdGU9ImxvYWRlZCIscihudWxsKSl9ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3Qobix0LlJlc291cmNlVHlwZS5UaWxlKSxmdW5jdGlvbihuLGEpe2lmKGRlbGV0ZSBlLnJlcXVlc3QsZS5hYm9ydGVkKWUuc3RhdGU9InVubG9hZGVkIixyKG51bGwpO2Vsc2UgaWYobillLnN0YXRlPSJlcnJvcmVkIixyKG4pO2Vsc2UgaWYoYSl7dGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMmJmUuc2V0RXhwaXJ5RGF0YShhKSxkZWxldGUgYS5jYWNoZUNvbnRyb2wsZGVsZXRlIGEuZXhwaXJlczt2YXIgbz10LndpbmRvdy5JbWFnZUJpdG1hcCYmYSBpbnN0YW5jZW9mIHQud2luZG93LkltYWdlQml0bWFwJiZ0Lm9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpP2E6dC5icm93c2VyLmdldEltYWdlRGF0YShhLDEpLHM9e3VpZDplLnVpZCxjb29yZDplLnRpbGVJRCxzb3VyY2U6dGhpcy5pZCxyYXdJbWFnZURhdGE6byxlbmNvZGluZzp0aGlzLmVuY29kaW5nfTtlLmFjdG9yJiYiZXhwaXJlZCIhPT1lLnN0YXRlfHwoZS5hY3Rvcj10aGlzLmRpc3BhdGNoZXIuZ2V0QWN0b3IoKSxlLmFjdG9yLnNlbmQoImxvYWRERU1UaWxlIixzLGkuYmluZCh0aGlzKSkpfX0uYmluZCh0aGlzKSksZS5uZWlnaGJvcmluZ1RpbGVzPXRoaXMuX2dldE5laWdoYm9yaW5nVGlsZXMoZS50aWxlSUQpfSxyLnByb3RvdHlwZS5fZ2V0TmVpZ2hib3JpbmdUaWxlcz1mdW5jdGlvbihlKXt2YXIgcj1lLmNhbm9uaWNhbCxuPU1hdGgucG93KDIsci56KSxpPShyLngtMStuKSVuLGE9MD09PXIueD9lLndyYXAtMTplLndyYXAsbz0oci54KzErbiklbixzPXIueCsxPT09bj9lLndyYXArMTplLndyYXAsbD17fTtyZXR1cm4gbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnkpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55KS5rZXldPXtiYWNrZmlsbGVkOiExfSxyLnk+MCYmKGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGUud3JhcCxyLnosci54LHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSksci55KzE8biYmKGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGUud3JhcCxyLnosci54LHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSksbH0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LmRlbVRleHR1cmUmJnRoaXMubWFwLnBhaW50ZXIuc2F2ZVRpbGVUZXh0dXJlKHQuZGVtVGV4dHVyZSksdC5mYm8mJih0LmZiby5kZXN0cm95KCksZGVsZXRlIHQuZmJvKSx0LmRlbSYmZGVsZXRlIHQuZGVtLGRlbGV0ZSB0Lm5laWdoYm9yaW5nVGlsZXMsdC5zdGF0ZT0idW5sb2FkZWQiLHQuYWN0b3ImJnQuYWN0b3Iuc2VuZCgicmVtb3ZlREVNVGlsZSIse3VpZDp0LnVpZCxzb3VyY2U6dGhpcy5pZH0pfSxyfShFKSxMPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLnR5cGU9Imdlb2pzb24iLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0xOCx0aGlzLnRpbGVTaXplPTUxMix0aGlzLmlzVGlsZUNsaXBwZWQ9ITAsdGhpcy5yZXBhcnNlT3ZlcnNjYWxlZD0hMCx0aGlzLl9yZW1vdmVkPSExLHRoaXMuX2xvYWRlZD0hMSx0aGlzLmFjdG9yPWkuZ2V0QWN0b3IoKSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSksdGhpcy5fZGF0YT1uLmRhdGEsdGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSxuKSx0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc9bi5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5fcmVzb3VyY2VUaW1pbmc9W10sdm9pZCAwIT09bi5tYXh6b29tJiYodGhpcy5tYXh6b29tPW4ubWF4em9vbSksbi50eXBlJiYodGhpcy50eXBlPW4udHlwZSksbi5hdHRyaWJ1dGlvbiYmKHRoaXMuYXR0cmlidXRpb249bi5hdHRyaWJ1dGlvbiksdGhpcy5wcm9tb3RlSWQ9bi5wcm9tb3RlSWQ7dmFyIG89dC5FWFRFTlQvdGhpcy50aWxlU2l6ZTt0aGlzLndvcmtlck9wdGlvbnM9dC5leHRlbmQoe3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXI6bi5jbHVzdGVyfHwhMSxnZW9qc29uVnRPcHRpb25zOntidWZmZXI6KHZvaWQgMCE9PW4uYnVmZmVyP24uYnVmZmVyOjEyOCkqbyx0b2xlcmFuY2U6KHZvaWQgMCE9PW4udG9sZXJhbmNlP24udG9sZXJhbmNlOi4zNzUpKm8sZXh0ZW50OnQuRVhURU5ULG1heFpvb206dGhpcy5tYXh6b29tLGxpbmVNZXRyaWNzOm4ubGluZU1ldHJpY3N8fCExLGdlbmVyYXRlSWQ6bi5nZW5lcmF0ZUlkfHwhMX0sc3VwZXJjbHVzdGVyT3B0aW9uczp7bWF4Wm9vbTp2b2lkIDAhPT1uLmNsdXN0ZXJNYXhab29tP01hdGgubWluKG4uY2x1c3Rlck1heFpvb20sdGhpcy5tYXh6b29tLTEpOnRoaXMubWF4em9vbS0xLGV4dGVudDp0LkVYVEVOVCxyYWRpdXM6KG4uY2x1c3RlclJhZGl1c3x8NTApKm8sbG9nOiExLGdlbmVyYXRlSWQ6bi5nZW5lcmF0ZUlkfHwhMX0sY2x1c3RlclByb3BlcnRpZXM6bi5jbHVzdGVyUHJvcGVydGllc30sbi53b3JrZXJPcHRpb25zKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdXBkYXRlV29ya2VyRGF0YSgoZnVuY3Rpb24ocil7aWYocillLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk7ZWxzZXt2YXIgbj17ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIn07ZS5fY29sbGVjdFJlc291cmNlVGltaW5nJiZlLl9yZXNvdXJjZVRpbWluZyYmZS5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPWUuX3Jlc291cmNlVGltaW5nLGUuX3Jlc291cmNlVGltaW5nPVtdKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLG4pKX19KSl9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fZGF0YT1lLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLl91cGRhdGVXb3JrZXJEYXRhKChmdW5jdGlvbihlKXtpZihlKXIuZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTtlbHNle3ZhciBuPXtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToiY29udGVudCJ9O3IuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyYmci5fcmVzb3VyY2VUaW1pbmcmJnIuX3Jlc291cmNlVGltaW5nLmxlbmd0aD4wJiYobi5yZXNvdXJjZVRpbWluZz1yLl9yZXNvdXJjZVRpbWluZyxyLl9yZXNvdXJjZVRpbWluZz1bXSksci5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIixuKSl9fSkpLHRoaXN9LHIucHJvdG90eXBlLmdldENsdXN0ZXJFeHBhbnNpb25ab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWN0b3Iuc2VuZCgiZ2VvanNvbi5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbSIse2NsdXN0ZXJJZDp0LHNvdXJjZTp0aGlzLmlkfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hY3Rvci5zZW5kKCJnZW9qc29uLmdldENsdXN0ZXJDaGlsZHJlbiIse2NsdXN0ZXJJZDp0LHNvdXJjZTp0aGlzLmlkfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyTGVhdmVzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLmFjdG9yLnNlbmQoImdlb2pzb24uZ2V0Q2x1c3RlckxlYXZlcyIse3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXJJZDp0LGxpbWl0OmUsb2Zmc2V0OnJ9LG4pLHRoaXN9LHIucHJvdG90eXBlLl91cGRhdGVXb3JrZXJEYXRhPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5fbG9hZGVkPSExO3ZhciBuPXQuZXh0ZW5kKHt9LHRoaXMud29ya2VyT3B0aW9ucyksaT10aGlzLl9kYXRhOyJzdHJpbmciPT10eXBlb2YgaT8obi5yZXF1ZXN0PXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHQuYnJvd3Nlci5yZXNvbHZlVVJMKGkpLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSksbi5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZz10aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcpOm4uZGF0YT1KU09OLnN0cmluZ2lmeShpKSx0aGlzLmFjdG9yLnNlbmQodGhpcy50eXBlKyIubG9hZERhdGEiLG4sKGZ1bmN0aW9uKHQsaSl7ci5fcmVtb3ZlZHx8aSYmaS5hYmFuZG9uZWR8fChyLl9sb2FkZWQ9ITAsaSYmaS5yZXNvdXJjZVRpbWluZyYmaS5yZXNvdXJjZVRpbWluZ1tyLmlkXSYmKHIuX3Jlc291cmNlVGltaW5nPWkucmVzb3VyY2VUaW1pbmdbci5pZF0uc2xpY2UoMCkpLHIuYWN0b3Iuc2VuZChyLnR5cGUrIi5jb2FsZXNjZSIse3NvdXJjZTpuLnNvdXJjZX0sbnVsbCksZSh0KSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPWUuYWN0b3I/InJlbG9hZFRpbGUiOiJsb2FkVGlsZSI7ZS5hY3Rvcj10aGlzLmFjdG9yLGUucmVxdWVzdD10aGlzLmFjdG9yLnNlbmQoaSx7dHlwZTp0aGlzLnR5cGUsdWlkOmUudWlkLHRpbGVJRDplLnRpbGVJRCx6b29tOmUudGlsZUlELm92ZXJzY2FsZWRaLG1heFpvb206dGhpcy5tYXh6b29tLHRpbGVTaXplOnRoaXMudGlsZVNpemUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxzaG93Q29sbGlzaW9uQm94ZXM6dGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzLHByb21vdGVJZDp0aGlzLnByb21vdGVJZH0sKGZ1bmN0aW9uKHQsYSl7cmV0dXJuIGRlbGV0ZSBlLnJlcXVlc3QsZS51bmxvYWRWZWN0b3JEYXRhKCksZS5hYm9ydGVkP3IobnVsbCk6dD9yKHQpOihlLmxvYWRWZWN0b3JEYXRhKGEsbi5tYXAucGFpbnRlciwicmVsb2FkVGlsZSI9PT1pKSxyKG51bGwpKX0pKX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5jYW5jZWwoKSxkZWxldGUgdC5yZXF1ZXN0KSx0LmFib3J0ZWQ9ITB9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC51bmxvYWRWZWN0b3JEYXRhKCksdGhpcy5hY3Rvci5zZW5kKCJyZW1vdmVUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlZD0hMCx0aGlzLmFjdG9yLnNlbmQoInJlbW92ZVNvdXJjZSIse3R5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zLHt0eXBlOnRoaXMudHlwZSxkYXRhOnRoaXMuX2RhdGF9KX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLFA9dC5jcmVhdGVMYXlvdXQoW3tuYW1lOiJhX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn0se25hbWU6ImFfdGV4dHVyZV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9XSksST1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGkpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPW4sdGhpcy5jb29yZGluYXRlcz1yLmNvb3JkaW5hdGVzLHRoaXMudHlwZT0iaW1hZ2UiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnRpbGVzPXt9LHRoaXMuX2xvYWRlZD0hMSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoaSksdGhpcy5vcHRpb25zPXJ9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5fbG9hZGVkPSExLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLnVybD10aGlzLm9wdGlvbnMudXJsLHQuZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodGhpcy51cmwsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLChmdW5jdGlvbihpLGEpe24uX2xvYWRlZD0hMCxpP24uZmlyZShuZXcgdC5FcnJvckV2ZW50KGkpKTphJiYobi5pbWFnZT1hLGUmJihuLmNvb3JkaW5hdGVzPWUpLHImJnIoKSxuLl9maW5pc2hMb2FkaW5nKCkpfSkpfSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkfSxyLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmltYWdlJiZ0LnVybD8odGhpcy5vcHRpb25zLnVybD10LnVybCx0aGlzLmxvYWQodC5jb29yZGluYXRlcywoZnVuY3Rpb24oKXtlLnRleHR1cmU9bnVsbH0pKSx0aGlzKTp0aGlzfSxyLnByb3RvdHlwZS5fZmluaXNoTG9hZGluZz1mdW5jdGlvbigpe3RoaXMubWFwJiYodGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0Q29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLmNvb3JkaW5hdGVzPWU7dmFyIG49ZS5tYXAodC5NZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdCk7dGhpcy50aWxlSUQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPTEvMCxuPTEvMCxpPS0xLzAsYT0tMS8wLG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO3I9TWF0aC5taW4ocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLngpLGE9TWF0aC5tYXgoYSxsLnkpfXZhciBjPU1hdGgubWF4KGktcixhLW4pLHU9TWF0aC5tYXgoMCxNYXRoLmZsb29yKC1NYXRoLmxvZyhjKS9NYXRoLkxOMikpLGg9TWF0aC5wb3coMix1KTtyZXR1cm4gbmV3IHQuQ2Fub25pY2FsVGlsZUlEKHUsTWF0aC5mbG9vcigocitpKS8yKmgpLE1hdGguZmxvb3IoKG4rYSkvMipoKSl9KG4pLHRoaXMubWluem9vbT10aGlzLm1heHpvb209dGhpcy50aWxlSUQuejt2YXIgaT1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHIudGlsZUlELmdldFRpbGVQb2ludCh0KS5fcm91bmQoKX0pKTtyZXR1cm4gdGhpcy5fYm91bmRzQXJyYXk9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQ0aTgsdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soaVswXS54LGlbMF0ueSwwLDApLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGlbMV0ueCxpWzFdLnksdC5FWFRFTlQsMCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soaVszXS54LGlbM10ueSwwLHQuRVhURU5UKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhpWzJdLngsaVsyXS55LHQuRVhURU5ULHQuRVhURU5UKSx0aGlzLmJvdW5kc0J1ZmZlciYmKHRoaXMuYm91bmRzQnVmZmVyLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ib3VuZHNCdWZmZXIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSx0aGlzfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7aWYoMCE9PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aCYmdGhpcy5pbWFnZSl7dmFyIGU9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LHI9ZS5nbDtmb3IodmFyIG4gaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSxQLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1NlZ21lbnRzfHwodGhpcy5ib3VuZHNTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKSksdGhpcy50ZXh0dXJlfHwodGhpcy50ZXh0dXJlPW5ldyB0LlRleHR1cmUoZSx0aGlzLmltYWdlLHIuUkdCQSksdGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSksdGhpcy50aWxlcyl7dmFyIGk9dGhpcy50aWxlc1tuXTsibG9hZGVkIiE9PWkuc3RhdGUmJihpLnN0YXRlPSJsb2FkZWQiLGkudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy50aWxlSUQmJnRoaXMudGlsZUlELmVxdWFscyh0LnRpbGVJRC5jYW5vbmljYWwpPyh0aGlzLnRpbGVzW1N0cmluZyh0LnRpbGVJRC53cmFwKV09dCx0LmJ1Y2tldHM9e30sZShudWxsKSk6KHQuc3RhdGU9ImVycm9yZWQiLGUobnVsbCkpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiaW1hZ2UiLHVybDp0aGlzLm9wdGlvbnMudXJsLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksej1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGkpe2UuY2FsbCh0aGlzLHQscixuLGkpLHRoaXMucm91bmRab29tPSEwLHRoaXMudHlwZT0idmlkZW8iLHRoaXMub3B0aW9ucz1yfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksKHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2xvYWRlZD0hMTt2YXIgcj10aGlzLm9wdGlvbnM7dGhpcy51cmxzPVtdO2Zvcih2YXIgbj0wLGk9ci51cmxzO248aS5sZW5ndGg7bis9MSl0aGlzLnVybHMucHVzaCh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChpW25dLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSkudXJsKTt0LmdldFZpZGVvKHRoaXMudXJscywoZnVuY3Rpb24ocixuKXtlLl9sb2FkZWQ9ITAscj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKGUudmlkZW89bixlLnZpZGVvLmxvb3A9ITAsZS52aWRlby5hZGRFdmVudExpc3RlbmVyKCJwbGF5aW5nIiwoZnVuY3Rpb24oKXtlLm1hcC50cmlnZ2VyUmVwYWludCgpfSkpLGUubWFwJiZlLnZpZGVvLnBsYXkoKSxlLl9maW5pc2hMb2FkaW5nKCkpfSkpfSxyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMudmlkZW8mJnRoaXMudmlkZW8ucGF1c2UoKX0sci5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMudmlkZW8mJnRoaXMudmlkZW8ucGxheSgpfSxyLnByb3RvdHlwZS5zZWVrPWZ1bmN0aW9uKGUpe2lmKHRoaXMudmlkZW8pe3ZhciByPXRoaXMudmlkZW8uc2Vla2FibGU7ZTxyLnN0YXJ0KDApfHxlPnIuZW5kKDApP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3RoaXMuaWQsbnVsbCwiUGxheWJhY2sgZm9yIHRoaXMgdmlkZW8gY2FuIGJlIHNldCBvbmx5IGJldHdlZW4gdGhlICIrci5zdGFydCgwKSsiIGFuZCAiK3IuZW5kKDApKyItc2Vjb25kIG1hcmsuIikpKTp0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWV9fSxyLnByb3RvdHlwZS5nZXRWaWRlbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZGVvfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcHx8KHRoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy52aWRlbyYmKHRoaXMudmlkZW8ucGxheSgpLHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcykpKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKCEoMD09PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aHx8dGhpcy52aWRlby5yZWFkeVN0YXRlPDIpKXt2YXIgZT10aGlzLm1hcC5wYWludGVyLmNvbnRleHQscj1lLmdsO2Zvcih2YXIgbiBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LFAubWVtYmVycykpLHRoaXMuYm91bmRzU2VnbWVudHN8fCh0aGlzLmJvdW5kc1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpKSx0aGlzLnRleHR1cmU/dGhpcy52aWRlby5wYXVzZWR8fCh0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpLHIudGV4U3ViSW1hZ2UyRChyLlRFWFRVUkVfMkQsMCwwLDAsci5SR0JBLHIuVU5TSUdORURfQllURSx0aGlzLnZpZGVvKSk6KHRoaXMudGV4dHVyZT1uZXcgdC5UZXh0dXJlKGUsdGhpcy52aWRlbyxyLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBpPXRoaXMudGlsZXNbbl07ImxvYWRlZCIhPT1pLnN0YXRlJiYoaS5zdGF0ZT0ibG9hZGVkIixpLnRleHR1cmU9dGhpcy50ZXh0dXJlKX19fSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToidmlkZW8iLHVybHM6dGhpcy51cmxzLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW8mJiF0aGlzLnZpZGVvLnBhdXNlZH0scn0oSSksTz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzLHIsbixpLGEpLG4uY29vcmRpbmF0ZXM/QXJyYXkuaXNBcnJheShuLmNvb3JkaW5hdGVzKSYmND09PW4uY29vcmRpbmF0ZXMubGVuZ3RoJiYhbi5jb29yZGluYXRlcy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4hQXJyYXkuaXNBcnJheSh0KXx8MiE9PXQubGVuZ3RofHx0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdH0pKX0pKXx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCciY29vcmRpbmF0ZXMiIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkgb2YgNCBsb25naXR1ZGUvbGF0aXR1ZGUgYXJyYXkgcGFpcnMnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiY29vcmRpbmF0ZXMiJykpKSxuLmFuaW1hdGUmJiJib29sZWFuIiE9dHlwZW9mIG4uYW5pbWF0ZSYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCdvcHRpb25hbCAiYW5pbWF0ZSIgcHJvcGVydHkgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnKSkpLG4uY2FudmFzPyJzdHJpbmciPT10eXBlb2Ygbi5jYW52YXN8fG4uY2FudmFzIGluc3RhbmNlb2YgdC53aW5kb3cuSFRNTENhbnZhc0VsZW1lbnR8fHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnImNhbnZhcyIgbXVzdCBiZSBlaXRoZXIgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGUgY2FudmFzIGVsZW1lbnQgZnJvbSB3aGljaCB0byByZWFkLCBvciBhbiBIVE1MQ2FudmFzRWxlbWVudCBpbnN0YW5jZScpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJjYW52YXMiJykpKSx0aGlzLm9wdGlvbnM9bix0aGlzLmFuaW1hdGU9dm9pZCAwPT09bi5hbmltYXRlfHxuLmFuaW1hdGV9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3RoaXMuX2xvYWRlZD0hMCx0aGlzLmNhbnZhc3x8KHRoaXMuY2FudmFzPXRoaXMub3B0aW9ucy5jYW52YXMgaW5zdGFuY2VvZiB0LndpbmRvdy5IVE1MQ2FudmFzRWxlbWVudD90aGlzLm9wdGlvbnMuY2FudmFzOnQud2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5jYW52YXMpKSx0aGlzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCx0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiQ2FudmFzIGRpbWVuc2lvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLiIpKSk6KHRoaXMucGxheT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmc9ITAsdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKX0sdGhpcy5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3BsYXlpbmcmJih0aGlzLnByZXBhcmUoKSx0aGlzLl9wbGF5aW5nPSExKX0sdGhpcy5fZmluaXNoTG9hZGluZygpKX0sci5wcm90b3R5cGUuZ2V0Q2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FudmFzfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpLHRoaXMuY2FudmFzJiZ0aGlzLmFuaW1hdGUmJnRoaXMucGxheSgpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMucGF1c2UoKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe3ZhciBlPSExO2lmKHRoaXMuY2FudmFzLndpZHRoIT09dGhpcy53aWR0aCYmKHRoaXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsZT0hMCksdGhpcy5jYW52YXMuaGVpZ2h0IT09dGhpcy5oZWlnaHQmJih0aGlzLmhlaWdodD10aGlzLmNhbnZhcy5oZWlnaHQsZT0hMCksIXRoaXMuX2hhc0ludmFsaWREaW1lbnNpb25zKCkmJjAhPT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGgpe3ZhciByPXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxuPXIuZ2w7Zm9yKHZhciBpIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9ci5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksUC5tZW1iZXJzKSksdGhpcy5ib3VuZHNTZWdtZW50c3x8KHRoaXMuYm91bmRzU2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMikpLHRoaXMudGV4dHVyZT8oZXx8dGhpcy5fcGxheWluZykmJnRoaXMudGV4dHVyZS51cGRhdGUodGhpcy5jYW52YXMse3ByZW11bHRpcGx5OiEwfSk6dGhpcy50ZXh0dXJlPW5ldyB0LlRleHR1cmUocix0aGlzLmNhbnZhcyxuLlJHQkEse3ByZW11bHRpcGx5OiEwfSksdGhpcy50aWxlcyl7dmFyIGE9dGhpcy50aWxlc1tpXTsibG9hZGVkIiE9PWEuc3RhdGUmJihhLnN0YXRlPSJsb2FkZWQiLGEudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJjYW52YXMiLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYXlpbmd9LHIucHJvdG90eXBlLl9oYXNJbnZhbGlkRGltZW5zaW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9W3RoaXMuY2FudmFzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodF07dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO2lmKGlzTmFOKHIpfHxyPD0wKXJldHVybiEwfXJldHVybiExfSxyfShJKSxEPXt2ZWN0b3I6UyxyYXN0ZXI6RSwicmFzdGVyLWRlbSI6QyxnZW9qc29uOkwsdmlkZW86eixpbWFnZTpJLGNhbnZhczpPfTtmdW5jdGlvbiBSKGUscil7dmFyIG49dC5pZGVudGl0eShbXSk7cmV0dXJuIHQudHJhbnNsYXRlKG4sbixbMSwxLDBdKSx0LnNjYWxlKG4sbixbLjUqZS53aWR0aCwuNSplLmhlaWdodCwxXSksdC5tdWx0aXBseShuLG4sZS5jYWxjdWxhdGVQb3NNYXRyaXgoci50b1Vud3JhcHBlZCgpKSl9ZnVuY3Rpb24gRih0LGUscixuLGksYSl7dmFyIG89ZnVuY3Rpb24odCxlLHIpe2lmKHQpZm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9ZVtpW25dXTtpZihhJiZhLnNvdXJjZT09PXImJiJmaWxsLWV4dHJ1c2lvbiI9PT1hLnR5cGUpcmV0dXJuITB9ZWxzZSBmb3IodmFyIG8gaW4gZSl7dmFyIHM9ZVtvXTtpZihzLnNvdXJjZT09PXImJiJmaWxsLWV4dHJ1c2lvbiI9PT1zLnR5cGUpcmV0dXJuITB9cmV0dXJuITF9KGkmJmkubGF5ZXJzLGUsdC5pZCkscz1hLm1heFBpdGNoU2NhbGVGYWN0b3IoKSxsPXQudGlsZXNJbihuLHMsbyk7bC5zb3J0KEIpO2Zvcih2YXIgYz1bXSx1PTAsaD1sO3U8aC5sZW5ndGg7dSs9MSl7dmFyIGY9aFt1XTtjLnB1c2goe3dyYXBwZWRUaWxlSUQ6Zi50aWxlSUQud3JhcHBlZCgpLmtleSxxdWVyeVJlc3VsdHM6Zi50aWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLHIsdC5fc3RhdGUsZi5xdWVyeUdlb21ldHJ5LGYuY2FtZXJhUXVlcnlHZW9tZXRyeSxmLnNjYWxlLGksYSxzLFIodC50cmFuc2Zvcm0sZi50aWxlSUQpKX0pfXZhciBwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxyPXt9LG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5xdWVyeVJlc3VsdHMscz1hLndyYXBwZWRUaWxlSUQsbD1yW3NdPXJbc118fHt9O2Zvcih2YXIgYyBpbiBvKWZvcih2YXIgdT1vW2NdLGg9bFtjXT1sW2NdfHx7fSxmPWVbY109ZVtjXXx8W10scD0wLGQ9dTtwPGQubGVuZ3RoO3ArPTEpe3ZhciBnPWRbcF07aFtnLmZlYXR1cmVJbmRleF18fChoW2cuZmVhdHVyZUluZGV4XT0hMCxmLnB1c2goZykpfX1yZXR1cm4gZX0oYyk7Zm9yKHZhciBkIGluIHApcFtkXS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lLmZlYXR1cmUsbj10LmdldEZlYXR1cmVTdGF0ZShyLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSxyLmlkKTtyLnNvdXJjZT1yLmxheWVyLnNvdXJjZSxyLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSYmKHIuc291cmNlTGF5ZXI9ci5sYXllclsic291cmNlLWxheWVyIl0pLHIuc3RhdGU9bn0pKTtyZXR1cm4gcH1mdW5jdGlvbiBCKHQsZSl7dmFyIHI9dC50aWxlSUQsbj1lLnRpbGVJRDtyZXR1cm4gci5vdmVyc2NhbGVkWi1uLm92ZXJzY2FsZWRafHxyLmNhbm9uaWNhbC55LW4uY2Fub25pY2FsLnl8fHIud3JhcC1uLndyYXB8fHIuY2Fub25pY2FsLngtbi5jYW5vbmljYWwueH12YXIgTj1mdW5jdGlvbih0LGUpe3RoaXMubWF4PXQsdGhpcy5vblJlbW92ZT1lLHRoaXMucmVzZXQoKX07Ti5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5kYXRhKWZvcih2YXIgZT0wLHI9dGhpcy5kYXRhW3RdO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtuLnRpbWVvdXQmJmNsZWFyVGltZW91dChuLnRpbWVvdXQpLHRoaXMub25SZW1vdmUobi52YWx1ZSl9cmV0dXJuIHRoaXMuZGF0YT17fSx0aGlzLm9yZGVyPVtdLHRoaXN9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPXQud3JhcHBlZCgpLmtleTt2b2lkIDA9PT10aGlzLmRhdGFbaV0mJih0aGlzLmRhdGFbaV09W10pO3ZhciBhPXt2YWx1ZTplLHRpbWVvdXQ6dm9pZCAwfTtpZih2b2lkIDAhPT1yJiYoYS50aW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bi5yZW1vdmUodCxhKX0pLHIpKSx0aGlzLmRhdGFbaV0ucHVzaChhKSx0aGlzLm9yZGVyLnB1c2goaSksdGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXgpe3ZhciBvPXRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO28mJnRoaXMub25SZW1vdmUobyl9cmV0dXJuIHRoaXN9LE4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdC53cmFwcGVkKCkua2V5IGluIHRoaXMuZGF0YX0sTi5wcm90b3R5cGUuZ2V0QW5kUmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0LndyYXBwZWQoKS5rZXkpOm51bGx9LE4ucHJvdG90eXBlLl9nZXRBbmRSZW1vdmVCeUtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRhdGFbdF0uc2hpZnQoKTtyZXR1cm4gZS50aW1lb3V0JiZjbGVhclRpbWVvdXQoZS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3RdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVt0XSx0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YodCksMSksZS52YWx1ZX0sTi5wcm90b3R5cGUuZ2V0QnlLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhW3RdO3JldHVybiBlP2VbMF0udmFsdWU6bnVsbH0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLmRhdGFbdC53cmFwcGVkKCkua2V5XVswXS52YWx1ZTpudWxsfSxOLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXModCkpcmV0dXJuIHRoaXM7dmFyIHI9dC53cmFwcGVkKCkua2V5LG49dm9pZCAwPT09ZT8wOnRoaXMuZGF0YVtyXS5pbmRleE9mKGUpLGk9dGhpcy5kYXRhW3JdW25dO3JldHVybiB0aGlzLmRhdGFbcl0uc3BsaWNlKG4sMSksaS50aW1lb3V0JiZjbGVhclRpbWVvdXQoaS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3JdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVtyXSx0aGlzLm9uUmVtb3ZlKGkudmFsdWUpLHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihyKSwxKSx0aGlzfSxOLnByb3RvdHlwZS5zZXRNYXhTaXplPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLm1heD10O3RoaXMub3JkZXIubGVuZ3RoPnRoaXMubWF4Oyl7dmFyIGU9dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7ZSYmdGhpcy5vblJlbW92ZShlKX1yZXR1cm4gdGhpc30sTi5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0aGlzLmRhdGEpZm9yKHZhciBuPTAsaT10aGlzLmRhdGFbcl07bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3QoYS52YWx1ZSl8fGUucHVzaChhKX1mb3IodmFyIG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO3RoaXMucmVtb3ZlKGwudmFsdWUudGlsZUlELGwpfX07dmFyIGo9ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29udGV4dD10O3ZhciBuPXQuZ2w7dGhpcy5idWZmZXI9bi5jcmVhdGVCdWZmZXIoKSx0aGlzLmR5bmFtaWNEcmF3PUJvb2xlYW4ociksdGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKSxuLmJ1ZmZlckRhdGEobi5FTEVNRU5UX0FSUkFZX0JVRkZFUixlLmFycmF5QnVmZmVyLHRoaXMuZHluYW1pY0RyYXc/bi5EWU5BTUlDX0RSQVc6bi5TVEFUSUNfRFJBVyksdGhpcy5keW5hbWljRHJhd3x8ZGVsZXRlIGUuYXJyYXlCdWZmZXJ9O2oucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0sai5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHRoaXMuYmluZCgpLGUuYnVmZmVyU3ViRGF0YShlLkVMRU1FTlRfQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LGoucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlciYmKHRoaXMuY29udGV4dC5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpLGRlbGV0ZSB0aGlzLmJ1ZmZlcil9O3ZhciBVPXtJbnQ4OiJCWVRFIixVaW50ODoiVU5TSUdORURfQllURSIsSW50MTY6IlNIT1JUIixVaW50MTY6IlVOU0lHTkVEX1NIT1JUIixJbnQzMjoiSU5UIixVaW50MzI6IlVOU0lHTkVEX0lOVCIsRmxvYXQzMjoiRkxPQVQifSxWPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuYXR0cmlidXRlcz1yLHRoaXMuaXRlbVNpemU9ZS5ieXRlc1BlckVsZW1lbnQsdGhpcy5keW5hbWljRHJhdz1uLHRoaXMuY29udGV4dD10O3ZhciBpPXQuZ2w7dGhpcy5idWZmZXI9aS5jcmVhdGVCdWZmZXIoKSx0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKSxpLmJ1ZmZlckRhdGEoaS5BUlJBWV9CVUZGRVIsZS5hcnJheUJ1ZmZlcix0aGlzLmR5bmFtaWNEcmF3P2kuRFlOQU1JQ19EUkFXOmkuU1RBVElDX0RSQVcpLHRoaXMuZHluYW1pY0RyYXd8fGRlbGV0ZSBlLmFycmF5QnVmZmVyfTtWLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0sVi5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5iaW5kKCksZS5idWZmZXJTdWJEYXRhKGUuQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LFYucHJvdG90eXBlLmVuYWJsZUF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7cisrKXt2YXIgbj1lLmF0dHJpYnV0ZXNbdGhpcy5hdHRyaWJ1dGVzW3JdLm5hbWVdO3ZvaWQgMCE9PW4mJnQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobil9fSxWLnByb3RvdHlwZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5hdHRyaWJ1dGVzW25dLGE9ZS5hdHRyaWJ1dGVzW2kubmFtZV07dm9pZCAwIT09YSYmdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsaS5jb21wb25lbnRzLHRbVVtpLnR5cGVdXSwhMSx0aGlzLml0ZW1TaXplLGkub2Zmc2V0K3RoaXMuaXRlbVNpemUqKHJ8fDApKX19LFYucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlciYmKHRoaXMuY29udGV4dC5nbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpLGRlbGV0ZSB0aGlzLmJ1ZmZlcil9O3ZhciBxPWZ1bmN0aW9uKHQpe3RoaXMuZ2w9dC5nbCx0aGlzLmRlZmF1bHQ9dGhpcy5nZXREZWZhdWx0KCksdGhpcy5jdXJyZW50PXRoaXMuZGVmYXVsdCx0aGlzLmRpcnR5PSExfTtxLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxxLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7fSxxLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdH0scS5wcm90b3R5cGUuc2V0RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuc2V0KHRoaXMuZGVmYXVsdCl9O3ZhciBIPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuQ29sb3IudHJhbnNwYXJlbnR9LHIucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHQuciE9PWUucnx8dC5nIT09ZS5nfHx0LmIhPT1lLmJ8fHQuYSE9PWUuYXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNsZWFyQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0scn0ocSksRz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiAxfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5jbGVhckRlcHRoKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxZPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNsZWFyU3RlbmNpbCh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksVz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVyblshMCwhMCwhMCwhMF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dFsyXSE9PWVbMl18fHRbM10hPT1lWzNdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuY29sb3JNYXNrKHRbMF0sdFsxXSx0WzJdLHRbM10pLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxaPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmRlcHRoTWFzayh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksWD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiAyNTV9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnN0ZW5jaWxNYXNrKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxKPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJue2Z1bmM6dGhpcy5nbC5BTFdBWVMscmVmOjAsbWFzazoyNTV9fSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0LmZ1bmMhPT1lLmZ1bmN8fHQucmVmIT09ZS5yZWZ8fHQubWFzayE9PWUubWFza3x8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnN0ZW5jaWxGdW5jKHQuZnVuYyx0LnJlZix0Lm1hc2spLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxLPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDtyZXR1cm5bdC5LRUVQLHQuS0VFUCx0LktFRVBdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV18fHRbMl0hPT1lWzJdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuc3RlbmNpbE9wKHRbMF0sdFsxXSx0WzJdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksUT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDt0P2UuZW5hYmxlKGUuU1RFTkNJTF9URVNUKTplLmRpc2FibGUoZS5TVEVOQ0lMX1RFU1QpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSwkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuWzAsMV19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmRlcHRoUmFuZ2UodFswXSx0WzFdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksdHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7dD9lLmVuYWJsZShlLkRFUFRIX1RFU1QpOmUuZGlzYWJsZShlLkRFUFRIX1RFU1QpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSxldD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdsLkxFU1N9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmRlcHRoRnVuYyh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSkscnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7dD9lLmVuYWJsZShlLkJMRU5EKTplLmRpc2FibGUoZS5CTEVORCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KHEpLG50PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDtyZXR1cm5bdC5PTkUsdC5aRVJPXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYmxlbmRGdW5jKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KHEpLGl0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuQ29sb3IudHJhbnNwYXJlbnR9LHIucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHQuciE9PWUucnx8dC5nIT09ZS5nfHx0LmIhPT1lLmJ8fHQuYSE9PWUuYXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmJsZW5kQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0scn0ocSksYXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5GVU5DX0FERH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYmxlbmRFcXVhdGlvbih0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksb3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7dD9lLmVuYWJsZShlLkNVTExfRkFDRSk6ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0ocSksc3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5CQUNLfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5jdWxsRmFjZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksbHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5DQ1d9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmZyb250RmFjZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksY3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wudXNlUHJvZ3JhbSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksdXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5URVhUVVJFMH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYWN0aXZlVGV4dHVyZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksaHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3JldHVyblswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdfHx0WzJdIT09ZVsyXXx8dFszXSE9PWVbM118fHRoaXMuZGlydHkpJiYodGhpcy5nbC52aWV3cG9ydCh0WzBdLHRbMV0sdFsyXSx0WzNdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksZnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0ocSkscHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kUmVuZGVyYnVmZmVyKGUuUkVOREVSQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSxkdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0ocSksZ3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kQnVmZmVyKGUuQVJSQVlfQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbDtlLmJpbmRCdWZmZXIoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfSxlfShxKSx2dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUpLHRoaXMudmFvPWUuZXh0VmVydGV4QXJyYXlPYmplY3R9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy52YW8mJih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMudmFvLmJpbmRWZXJ0ZXhBcnJheU9FUyh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSkseXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gNH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19BTElHTk1FTlQsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KHEpLHh0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KHEpLGJ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfRkxJUF9ZX1dFQkdMLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSxfdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSksdGhpcy5jb250ZXh0PWUsdGhpcy5wYXJlbnQ9cn1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGV9KHEpLHd0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCk7dmFyIGU9dGhpcy5nbDtlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGUuRlJBTUVCVUZGRVIsZS5DT0xPUl9BVFRBQ0hNRU5UMCxlLlRFWFRVUkVfMkQsdCwwKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oX3QpLFR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpO3ZhciBlPXRoaXMuZ2w7ZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihlLkZSQU1FQlVGRkVSLGUuREVQVEhfQVRUQUNITUVOVCxlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oX3QpLGt0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY29udGV4dD10LHRoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD1yO3ZhciBpPXRoaXMuZnJhbWVidWZmZXI9dC5nbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO3RoaXMuY29sb3JBdHRhY2htZW50PW5ldyB3dCh0LGkpLG4mJih0aGlzLmRlcHRoQXR0YWNobWVudD1uZXcgVHQodCxpKSl9O2t0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsLGU9dGhpcy5jb2xvckF0dGFjaG1lbnQuZ2V0KCk7aWYoZSYmdC5kZWxldGVUZXh0dXJlKGUpLHRoaXMuZGVwdGhBdHRhY2htZW50KXt2YXIgcj10aGlzLmRlcHRoQXR0YWNobWVudC5nZXQoKTtyJiZ0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKX10LmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpfTt2YXIgTXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZnVuYz10LHRoaXMubWFzaz1lLHRoaXMucmFuZ2U9cn07TXQuUmVhZE9ubHk9ITEsTXQuUmVhZFdyaXRlPSEwLE10LmRpc2FibGVkPW5ldyBNdCg1MTksTXQuUmVhZE9ubHksWzAsMV0pO3ZhciBBdD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy50ZXN0PXQsdGhpcy5yZWY9ZSx0aGlzLm1hc2s9cix0aGlzLmZhaWw9bix0aGlzLmRlcHRoRmFpbD1pLHRoaXMucGFzcz1hfTtBdC5kaXNhYmxlZD1uZXcgQXQoe2Z1bmM6NTE5LG1hc2s6MH0sMCwwLDc2ODAsNzY4MCw3NjgwKTt2YXIgU3Q9ZnVuY3Rpb24odCxlLHIpe3RoaXMuYmxlbmRGdW5jdGlvbj10LHRoaXMuYmxlbmRDb2xvcj1lLHRoaXMubWFzaz1yfTtTdC5kaXNhYmxlZD1uZXcgU3QoU3QuUmVwbGFjZT1bMSwwXSx0LkNvbG9yLnRyYW5zcGFyZW50LFshMSwhMSwhMSwhMV0pLFN0LnVuYmxlbmRlZD1uZXcgU3QoU3QuUmVwbGFjZSx0LkNvbG9yLnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pLFN0LmFscGhhQmxlbmRlZD1uZXcgU3QoWzEsNzcxXSx0LkNvbG9yLnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pO3ZhciBFdD1mdW5jdGlvbih0LGUscil7dGhpcy5lbmFibGU9dCx0aGlzLm1vZGU9ZSx0aGlzLmZyb250RmFjZT1yfTtFdC5kaXNhYmxlZD1uZXcgRXQoITEsMTAyOSwyMzA1KSxFdC5iYWNrQ0NXPW5ldyBFdCghMCwxMDI5LDIzMDUpO3ZhciBDdD1mdW5jdGlvbih0KXt0aGlzLmdsPXQsdGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdD10aGlzLmdsLmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSx0aGlzLmNsZWFyQ29sb3I9bmV3IEgodGhpcyksdGhpcy5jbGVhckRlcHRoPW5ldyBHKHRoaXMpLHRoaXMuY2xlYXJTdGVuY2lsPW5ldyBZKHRoaXMpLHRoaXMuY29sb3JNYXNrPW5ldyBXKHRoaXMpLHRoaXMuZGVwdGhNYXNrPW5ldyBaKHRoaXMpLHRoaXMuc3RlbmNpbE1hc2s9bmV3IFgodGhpcyksdGhpcy5zdGVuY2lsRnVuYz1uZXcgSih0aGlzKSx0aGlzLnN0ZW5jaWxPcD1uZXcgSyh0aGlzKSx0aGlzLnN0ZW5jaWxUZXN0PW5ldyBRKHRoaXMpLHRoaXMuZGVwdGhSYW5nZT1uZXcgJCh0aGlzKSx0aGlzLmRlcHRoVGVzdD1uZXcgdHQodGhpcyksdGhpcy5kZXB0aEZ1bmM9bmV3IGV0KHRoaXMpLHRoaXMuYmxlbmQ9bmV3IHJ0KHRoaXMpLHRoaXMuYmxlbmRGdW5jPW5ldyBudCh0aGlzKSx0aGlzLmJsZW5kQ29sb3I9bmV3IGl0KHRoaXMpLHRoaXMuYmxlbmRFcXVhdGlvbj1uZXcgYXQodGhpcyksdGhpcy5jdWxsRmFjZT1uZXcgb3QodGhpcyksdGhpcy5jdWxsRmFjZVNpZGU9bmV3IHN0KHRoaXMpLHRoaXMuZnJvbnRGYWNlPW5ldyBsdCh0aGlzKSx0aGlzLnByb2dyYW09bmV3IGN0KHRoaXMpLHRoaXMuYWN0aXZlVGV4dHVyZT1uZXcgdXQodGhpcyksdGhpcy52aWV3cG9ydD1uZXcgaHQodGhpcyksdGhpcy5iaW5kRnJhbWVidWZmZXI9bmV3IGZ0KHRoaXMpLHRoaXMuYmluZFJlbmRlcmJ1ZmZlcj1uZXcgcHQodGhpcyksdGhpcy5iaW5kVGV4dHVyZT1uZXcgZHQodGhpcyksdGhpcy5iaW5kVmVydGV4QnVmZmVyPW5ldyBndCh0aGlzKSx0aGlzLmJpbmRFbGVtZW50QnVmZmVyPW5ldyBtdCh0aGlzKSx0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0JiZuZXcgdnQodGhpcyksdGhpcy5waXhlbFN0b3JlVW5wYWNrPW5ldyB5dCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhPW5ldyB4dCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWT1uZXcgYnQodGhpcyksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM9dC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpLHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljJiYodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXg9dC5nZXRQYXJhbWV0ZXIodGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKSksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0PXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0JiYodC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIiksdGhpcy5leHRSZW5kZXJUb1RleHR1cmVIYWxmRmxvYXQ9dC5nZXRFeHRlbnNpb24oIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpKSx0aGlzLmV4dFRpbWVyUXVlcnk9dC5nZXRFeHRlbnNpb24oIkVYVF9kaXNqb2ludF90aW1lcl9xdWVyeSIpfTtDdC5wcm90b3R5cGUuc2V0RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMudW5iaW5kVkFPKCksdGhpcy5jbGVhckNvbG9yLnNldERlZmF1bHQoKSx0aGlzLmNsZWFyRGVwdGguc2V0RGVmYXVsdCgpLHRoaXMuY2xlYXJTdGVuY2lsLnNldERlZmF1bHQoKSx0aGlzLmNvbG9yTWFzay5zZXREZWZhdWx0KCksdGhpcy5kZXB0aE1hc2suc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbE1hc2suc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbEZ1bmMuc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbE9wLnNldERlZmF1bHQoKSx0aGlzLnN0ZW5jaWxUZXN0LnNldERlZmF1bHQoKSx0aGlzLmRlcHRoUmFuZ2Uuc2V0RGVmYXVsdCgpLHRoaXMuZGVwdGhUZXN0LnNldERlZmF1bHQoKSx0aGlzLmRlcHRoRnVuYy5zZXREZWZhdWx0KCksdGhpcy5ibGVuZC5zZXREZWZhdWx0KCksdGhpcy5ibGVuZEZ1bmMuc2V0RGVmYXVsdCgpLHRoaXMuYmxlbmRDb2xvci5zZXREZWZhdWx0KCksdGhpcy5ibGVuZEVxdWF0aW9uLnNldERlZmF1bHQoKSx0aGlzLmN1bGxGYWNlLnNldERlZmF1bHQoKSx0aGlzLmN1bGxGYWNlU2lkZS5zZXREZWZhdWx0KCksdGhpcy5mcm9udEZhY2Uuc2V0RGVmYXVsdCgpLHRoaXMucHJvZ3JhbS5zZXREZWZhdWx0KCksdGhpcy5hY3RpdmVUZXh0dXJlLnNldERlZmF1bHQoKSx0aGlzLmJpbmRGcmFtZWJ1ZmZlci5zZXREZWZhdWx0KCksdGhpcy5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldERlZmF1bHQoKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXREZWZhdWx0KCl9LEN0LnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuY2xlYXJDb2xvci5kaXJ0eT0hMCx0aGlzLmNsZWFyRGVwdGguZGlydHk9ITAsdGhpcy5jbGVhclN0ZW5jaWwuZGlydHk9ITAsdGhpcy5jb2xvck1hc2suZGlydHk9ITAsdGhpcy5kZXB0aE1hc2suZGlydHk9ITAsdGhpcy5zdGVuY2lsTWFzay5kaXJ0eT0hMCx0aGlzLnN0ZW5jaWxGdW5jLmRpcnR5PSEwLHRoaXMuc3RlbmNpbE9wLmRpcnR5PSEwLHRoaXMuc3RlbmNpbFRlc3QuZGlydHk9ITAsdGhpcy5kZXB0aFJhbmdlLmRpcnR5PSEwLHRoaXMuZGVwdGhUZXN0LmRpcnR5PSEwLHRoaXMuZGVwdGhGdW5jLmRpcnR5PSEwLHRoaXMuYmxlbmQuZGlydHk9ITAsdGhpcy5ibGVuZEZ1bmMuZGlydHk9ITAsdGhpcy5ibGVuZENvbG9yLmRpcnR5PSEwLHRoaXMuYmxlbmRFcXVhdGlvbi5kaXJ0eT0hMCx0aGlzLmN1bGxGYWNlLmRpcnR5PSEwLHRoaXMuY3VsbEZhY2VTaWRlLmRpcnR5PSEwLHRoaXMuZnJvbnRGYWNlLmRpcnR5PSEwLHRoaXMucHJvZ3JhbS5kaXJ0eT0hMCx0aGlzLmFjdGl2ZVRleHR1cmUuZGlydHk9ITAsdGhpcy52aWV3cG9ydC5kaXJ0eT0hMCx0aGlzLmJpbmRGcmFtZWJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmJpbmRSZW5kZXJidWZmZXIuZGlydHk9ITAsdGhpcy5iaW5kVGV4dHVyZS5kaXJ0eT0hMCx0aGlzLmJpbmRWZXJ0ZXhCdWZmZXIuZGlydHk9ITAsdGhpcy5iaW5kRWxlbWVudEJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0JiYodGhpcy5iaW5kVmVydGV4QXJyYXlPRVMuZGlydHk9ITApLHRoaXMucGl4ZWxTdG9yZVVucGFjay5kaXJ0eT0hMCx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLmRpcnR5PSEwLHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLmRpcnR5PSEwfSxDdC5wcm90b3R5cGUuY3JlYXRlSW5kZXhCdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGoodGhpcyx0LGUpfSxDdC5wcm90b3R5cGUuY3JlYXRlVmVydGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IFYodGhpcyx0LGUscil9LEN0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJidWZmZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2wsaT1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KGkpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUix0LGUsciksdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKSxpfSxDdC5wcm90b3R5cGUuY3JlYXRlRnJhbWVidWZmZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcga3QodGhpcyx0LGUscil9LEN0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgZT10LmNvbG9yLHI9dC5kZXB0aCxuPXRoaXMuZ2wsaT0wO2UmJihpfD1uLkNPTE9SX0JVRkZFUl9CSVQsdGhpcy5jbGVhckNvbG9yLnNldChlKSx0aGlzLmNvbG9yTWFzay5zZXQoWyEwLCEwLCEwLCEwXSkpLHZvaWQgMCE9PXImJihpfD1uLkRFUFRIX0JVRkZFUl9CSVQsdGhpcy5kZXB0aFJhbmdlLnNldChbMCwxXSksdGhpcy5jbGVhckRlcHRoLnNldChyKSx0aGlzLmRlcHRoTWFzay5zZXQoITApKSxuLmNsZWFyKGkpfSxDdC5wcm90b3R5cGUuc2V0Q3VsbEZhY2U9ZnVuY3Rpb24odCl7ITE9PT10LmVuYWJsZT90aGlzLmN1bGxGYWNlLnNldCghMSk6KHRoaXMuY3VsbEZhY2Uuc2V0KCEwKSx0aGlzLmN1bGxGYWNlU2lkZS5zZXQodC5tb2RlKSx0aGlzLmZyb250RmFjZS5zZXQodC5mcm9udEZhY2UpKX0sQ3QucHJvdG90eXBlLnNldERlcHRoTW9kZT1mdW5jdGlvbih0KXt0LmZ1bmMhPT10aGlzLmdsLkFMV0FZU3x8dC5tYXNrPyh0aGlzLmRlcHRoVGVzdC5zZXQoITApLHRoaXMuZGVwdGhGdW5jLnNldCh0LmZ1bmMpLHRoaXMuZGVwdGhNYXNrLnNldCh0Lm1hc2spLHRoaXMuZGVwdGhSYW5nZS5zZXQodC5yYW5nZSkpOnRoaXMuZGVwdGhUZXN0LnNldCghMSl9LEN0LnByb3RvdHlwZS5zZXRTdGVuY2lsTW9kZT1mdW5jdGlvbih0KXt0LnRlc3QuZnVuYyE9PXRoaXMuZ2wuQUxXQVlTfHx0Lm1hc2s/KHRoaXMuc3RlbmNpbFRlc3Quc2V0KCEwKSx0aGlzLnN0ZW5jaWxNYXNrLnNldCh0Lm1hc2spLHRoaXMuc3RlbmNpbE9wLnNldChbdC5mYWlsLHQuZGVwdGhGYWlsLHQucGFzc10pLHRoaXMuc3RlbmNpbEZ1bmMuc2V0KHtmdW5jOnQudGVzdC5mdW5jLHJlZjp0LnJlZixtYXNrOnQudGVzdC5tYXNrfSkpOnRoaXMuc3RlbmNpbFRlc3Quc2V0KCExKX0sQ3QucHJvdG90eXBlLnNldENvbG9yTW9kZT1mdW5jdGlvbihlKXt0LmRlZXBFcXVhbChlLmJsZW5kRnVuY3Rpb24sU3QuUmVwbGFjZSk/dGhpcy5ibGVuZC5zZXQoITEpOih0aGlzLmJsZW5kLnNldCghMCksdGhpcy5ibGVuZEZ1bmMuc2V0KGUuYmxlbmRGdW5jdGlvbiksdGhpcy5ibGVuZENvbG9yLnNldChlLmJsZW5kQ29sb3IpKSx0aGlzLmNvbG9yTWFzay5zZXQoZS5tYXNrKX0sQ3QucHJvdG90eXBlLnVuYmluZFZBTz1mdW5jdGlvbigpe3RoaXMuZXh0VmVydGV4QXJyYXlPYmplY3QmJnRoaXMuYmluZFZlcnRleEFycmF5T0VTLnNldChudWxsKX07dmFyIEx0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGkpe3ZhciBhPXRoaXM7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9aSx0aGlzLm9uKCJkYXRhIiwoZnVuY3Rpb24odCl7InNvdXJjZSI9PT10LmRhdGFUeXBlJiYibWV0YWRhdGEiPT09dC5zb3VyY2VEYXRhVHlwZSYmKGEuX3NvdXJjZUxvYWRlZD0hMCksYS5fc291cmNlTG9hZGVkJiYhYS5fcGF1c2VkJiYic291cmNlIj09PXQuZGF0YVR5cGUmJiJjb250ZW50Ij09PXQuc291cmNlRGF0YVR5cGUmJihhLnJlbG9hZCgpLGEudHJhbnNmb3JtJiZhLnVwZGF0ZShhLnRyYW5zZm9ybSkpfSkpLHRoaXMub24oImVycm9yIiwoZnVuY3Rpb24oKXthLl9zb3VyY2VFcnJvcmVkPSEwfSkpLHRoaXMuX3NvdXJjZT1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uZXcgRFtyLnR5cGVdKGUscixuLGkpO2lmKGEuaWQhPT1lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICIrZSsiIGluc3RlYWQgb2YgIithLmlkKTtyZXR1cm4gdC5iaW5kQWxsKFsibG9hZCIsImFib3J0IiwidW5sb2FkIiwic2VyaWFsaXplIiwicHJlcGFyZSJdLGEpLGF9KHIsbixpLHRoaXMpLHRoaXMuX3RpbGVzPXt9LHRoaXMuX2NhY2hlPW5ldyBOKDAsdGhpcy5fdW5sb2FkVGlsZS5iaW5kKHRoaXMpKSx0aGlzLl90aW1lcnM9e30sdGhpcy5fY2FjaGVUaW1lcnM9e30sdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT1udWxsLHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzPXt9LHRoaXMuX2NvdmVyZWRUaWxlcz17fSx0aGlzLl9zdGF0ZT1uZXcgdC5Tb3VyY2VGZWF0dXJlU3RhdGV9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPXQ/dC5fbWF4VGlsZUNhY2hlU2l6ZTpudWxsLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uQWRkJiZ0aGlzLl9zb3VyY2Uub25BZGQodCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uUmVtb3ZlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUodCl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZUVycm9yZWQpcmV0dXJuITA7aWYoIXRoaXMuX3NvdXJjZUxvYWRlZClyZXR1cm4hMTtpZighdGhpcy5fc291cmNlLmxvYWRlZCgpKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYoImxvYWRlZCIhPT1lLnN0YXRlJiYiZXJyb3JlZCIhPT1lLnN0YXRlKXJldHVybiExfXJldHVybiEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlfSxyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3BhdXNlZD0hMH0sci5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7aWYodGhpcy5fcGF1c2VkKXt2YXIgdD10aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZTt0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdCYmdGhpcy5yZWxvYWQoKSx0aGlzLnRyYW5zZm9ybSYmdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pfX0sci5wcm90b3R5cGUuX2xvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0LGUpfSxyLnByb3RvdHlwZS5fdW5sb2FkVGlsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLnVubG9hZFRpbGUodCwoZnVuY3Rpb24oKXt9KSl9LHIucHJvdG90eXBlLl9hYm9ydFRpbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc291cmNlLmFib3J0VGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLmFib3J0VGlsZSh0LChmdW5jdGlvbigpe30pKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fc291cmNlLnByZXBhcmUmJnRoaXMuX3NvdXJjZS5wcmVwYXJlKCksdGhpcy5fc3RhdGUuY29hbGVzY2VDaGFuZ2VzKHRoaXMuX3RpbGVzLHRoaXMubWFwP3RoaXMubWFwLnBhaW50ZXI6bnVsbCksdGhpcy5fdGlsZXMpe3ZhciByPXRoaXMuX3RpbGVzW2VdO3IudXBsb2FkKHQpLHIucHJlcGFyZSh0aGlzLm1hcC5zdHlsZS5pbWFnZU1hbmFnZXIpfX0sci5wcm90b3R5cGUuZ2V0SWRzPWZ1bmN0aW9uKCl7cmV0dXJuIHQudmFsdWVzKHRoaXMuX3RpbGVzKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbGVJRH0pKS5zb3J0KFB0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKX0sci5wcm90b3R5cGUuZ2V0UmVuZGVyYWJsZUlkcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLG49W107Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXRoaXMuX2lzSWRSZW5kZXJhYmxlKGksZSkmJm4ucHVzaCh0aGlzLl90aWxlc1tpXSk7cmV0dXJuIGU/bi5zb3J0KChmdW5jdGlvbihlLG4pe3ZhciBpPWUudGlsZUlELGE9bi50aWxlSUQsbz1uZXcgdC5Qb2ludChpLmNhbm9uaWNhbC54LGkuY2Fub25pY2FsLnkpLl9yb3RhdGUoci50cmFuc2Zvcm0uYW5nbGUpLHM9bmV3IHQuUG9pbnQoYS5jYW5vbmljYWwueCxhLmNhbm9uaWNhbC55KS5fcm90YXRlKHIudHJhbnNmb3JtLmFuZ2xlKTtyZXR1cm4gaS5vdmVyc2NhbGVkWi1hLm92ZXJzY2FsZWRafHxzLnktby55fHxzLngtby54fSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlsZUlELmtleX0pKTpuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlsZUlEfSkpLnNvcnQoUHQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpfSxyLnByb3RvdHlwZS5oYXNSZW5kZXJhYmxlUGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZmluZExvYWRlZFBhcmVudCh0LDApO3JldHVybiEhZSYmdGhpcy5faXNJZFJlbmRlcmFibGUoZS50aWxlSUQua2V5KX0sci5wcm90b3R5cGUuX2lzSWRSZW5kZXJhYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdJiZ0aGlzLl90aWxlc1t0XS5oYXNEYXRhKCkmJiF0aGlzLl9jb3ZlcmVkVGlsZXNbdF0mJihlfHwhdGhpcy5fdGlsZXNbdF0uaG9sZGluZ0ZvckZhZGUoKSl9LHIucHJvdG90eXBlLnJlbG9hZD1mdW5jdGlvbigpe2lmKHRoaXMuX3BhdXNlZCl0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMDtlbHNlIGZvcih2YXIgdCBpbiB0aGlzLl9jYWNoZS5yZXNldCgpLHRoaXMuX3RpbGVzKSJlcnJvcmVkIiE9PXRoaXMuX3RpbGVzW3RdLnN0YXRlJiZ0aGlzLl9yZWxvYWRUaWxlKHQsInJlbG9hZGluZyIpfSxyLnByb3RvdHlwZS5fcmVsb2FkVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3RpbGVzW3RdO3ImJigibG9hZGluZyIhPT1yLnN0YXRlJiYoci5zdGF0ZT1lKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsdCxlKSkpfSxyLnByb3RvdHlwZS5fdGlsZUxvYWRlZD1mdW5jdGlvbihlLHIsbixpKXtpZihpKXJldHVybiBlLnN0YXRlPSJlcnJvcmVkIix2b2lkKDQwNCE9PWkuc3RhdHVzP3RoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkVycm9yRXZlbnQoaSx7dGlsZTplfSkpOnRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKSk7ZS50aW1lQWRkZWQ9dC5icm93c2VyLm5vdygpLCJleHBpcmVkIj09PW4mJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSEwKSx0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIocixlKSwicmFzdGVyLWRlbSI9PT10aGlzLmdldFNvdXJjZSgpLnR5cGUmJmUuZGVtJiZ0aGlzLl9iYWNrZmlsbERFTShlKSx0aGlzLl9zdGF0ZS5pbml0aWFsaXplVGlsZVN0YXRlKGUsdGhpcy5tYXA/dGhpcy5tYXAucGFpbnRlcjpudWxsKSx0aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHRpbGU6ZSxjb29yZDplLnRpbGVJRH0pKX0sci5wcm90b3R5cGUuX2JhY2tmaWxsREVNPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmdldFJlbmRlcmFibGVJZHMoKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYodC5uZWlnaGJvcmluZ1RpbGVzJiZ0Lm5laWdoYm9yaW5nVGlsZXNbbl0pe3ZhciBpPXRoaXMuZ2V0VGlsZUJ5SUQobik7YSh0LGkpLGEoaSx0KX19ZnVuY3Rpb24gYSh0LGUpe3QubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwO3ZhciByPWUudGlsZUlELmNhbm9uaWNhbC54LXQudGlsZUlELmNhbm9uaWNhbC54LG49ZS50aWxlSUQuY2Fub25pY2FsLnktdC50aWxlSUQuY2Fub25pY2FsLnksaT1NYXRoLnBvdygyLHQudGlsZUlELmNhbm9uaWNhbC56KSxhPWUudGlsZUlELmtleTswPT09ciYmMD09PW58fE1hdGguYWJzKG4pPjF8fChNYXRoLmFicyhyKT4xJiYoMT09PU1hdGguYWJzKHIraSk/cis9aToxPT09TWF0aC5hYnMoci1pKSYmKHItPWkpKSxlLmRlbSYmdC5kZW0mJih0LmRlbS5iYWNrZmlsbEJvcmRlcihlLmRlbSxyLG4pLHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW2FdJiYodC5uZWlnaGJvcmluZ1RpbGVzW2FdLmJhY2tmaWxsZWQ9ITApKSl9fSxyLnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFRpbGVCeUlEKHQua2V5KX0sci5wcm90b3R5cGUuZ2V0VGlsZUJ5SUQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdfSxyLnByb3RvdHlwZS5fcmV0YWluTG9hZGVkQ2hpbGRyZW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXt2YXIgYT10aGlzLl90aWxlc1tpXTtpZighKG5baV18fCFhLmhhc0RhdGEoKXx8YS50aWxlSUQub3ZlcnNjYWxlZFo8PWV8fGEudGlsZUlELm92ZXJzY2FsZWRaPnIpKXtmb3IodmFyIG89YS50aWxlSUQ7YSYmYS50aWxlSUQub3ZlcnNjYWxlZFo+ZSsxOyl7dmFyIHM9YS50aWxlSUQuc2NhbGVkVG8oYS50aWxlSUQub3ZlcnNjYWxlZFotMSk7KGE9dGhpcy5fdGlsZXNbcy5rZXldKSYmYS5oYXNEYXRhKCkmJihvPXMpfWZvcih2YXIgbD1vO2wub3ZlcnNjYWxlZFo+ZTspaWYodFsobD1sLnNjYWxlZFRvKGwub3ZlcnNjYWxlZFotMSkpLmtleV0pe25bby5rZXldPW87YnJlYWt9fX19LHIucHJvdG90eXBlLmZpbmRMb2FkZWRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtpZih0LmtleSBpbiB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcyl7dmFyIHI9dGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbdC5rZXldO3JldHVybiByJiZyLnRpbGVJRC5vdmVyc2NhbGVkWj49ZT9yOm51bGx9Zm9yKHZhciBuPXQub3ZlcnNjYWxlZFotMTtuPj1lO24tLSl7dmFyIGk9dC5zY2FsZWRUbyhuKSxhPXRoaXMuX2dldExvYWRlZFRpbGUoaSk7aWYoYSlyZXR1cm4gYX19LHIucHJvdG90eXBlLl9nZXRMb2FkZWRUaWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3Qua2V5XTtyZXR1cm4gZSYmZS5oYXNEYXRhKCk/ZTp0aGlzLl9jYWNoZS5nZXRCeUtleSh0LndyYXBwZWQoKS5rZXkpfSxyLnByb3RvdHlwZS51cGRhdGVDYWNoZVNpemU9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jZWlsKHQud2lkdGgvdGhpcy5fc291cmNlLnRpbGVTaXplKSsxLHI9TWF0aC5jZWlsKHQuaGVpZ2h0L3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSxuPU1hdGguZmxvb3IoZSpyKjUpLGk9Im51bWJlciI9PXR5cGVvZiB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplP01hdGgubWluKHRoaXMuX21heFRpbGVDYWNoZVNpemUsbik6bjt0aGlzLl9jYWNoZS5zZXRNYXhTaXplKGkpfSxyLnByb3RvdHlwZS5oYW5kbGVXcmFwSnVtcD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0LSh2b2lkIDA9PT10aGlzLl9wcmV2TG5nP3Q6dGhpcy5fcHJldkxuZykpLzM2MCk7aWYodGhpcy5fcHJldkxuZz10LGUpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0aGlzLl90aWxlcyl7dmFyIGk9dGhpcy5fdGlsZXNbbl07aS50aWxlSUQ9aS50aWxlSUQudW53cmFwVG8oaS50aWxlSUQud3JhcCtlKSxyW2kudGlsZUlELmtleV09aX1mb3IodmFyIGEgaW4gdGhpcy5fdGlsZXM9cix0aGlzLl90aW1lcnMpY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1thXSksZGVsZXRlIHRoaXMuX3RpbWVyc1thXTtmb3IodmFyIG8gaW4gdGhpcy5fdGlsZXMpdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKG8sdGhpcy5fdGlsZXNbb10pfX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYodGhpcy50cmFuc2Zvcm09ZSx0aGlzLl9zb3VyY2VMb2FkZWQmJiF0aGlzLl9wYXVzZWQpe3ZhciBpO3RoaXMudXBkYXRlQ2FjaGVTaXplKGUpLHRoaXMuaGFuZGxlV3JhcEp1bXAodGhpcy50cmFuc2Zvcm0uY2VudGVyLmxuZyksdGhpcy5fY292ZXJlZFRpbGVzPXt9LHRoaXMudXNlZD90aGlzLl9zb3VyY2UudGlsZUlEP2k9ZS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGhpcy5fc291cmNlLnRpbGVJRCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLmNhbm9uaWNhbC56LGUud3JhcCxlLmNhbm9uaWNhbC56LGUuY2Fub25pY2FsLngsZS5jYW5vbmljYWwueSl9KSk6KGk9ZS5jb3ZlcmluZ1RpbGVzKHt0aWxlU2l6ZTp0aGlzLl9zb3VyY2UudGlsZVNpemUsbWluem9vbTp0aGlzLl9zb3VyY2UubWluem9vbSxtYXh6b29tOnRoaXMuX3NvdXJjZS5tYXh6b29tLHJvdW5kWm9vbTp0aGlzLl9zb3VyY2Uucm91bmRab29tLHJlcGFyc2VPdmVyc2NhbGVkOnRoaXMuX3NvdXJjZS5yZXBhcnNlT3ZlcnNjYWxlZH0pLHRoaXMuX3NvdXJjZS5oYXNUaWxlJiYoaT1pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIG4uX3NvdXJjZS5oYXNUaWxlKHQpfSkpKSk6aT1bXTt2YXIgYT1lLmNvdmVyaW5nWm9vbUxldmVsKHRoaXMuX3NvdXJjZSksbz1NYXRoLm1heChhLXIubWF4T3Zlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLHM9TWF0aC5tYXgoYStyLm1heFVuZGVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSksbD10aGlzLl91cGRhdGVSZXRhaW5lZFRpbGVzKGksYSk7aWYoSXQodGhpcy5fc291cmNlLnR5cGUpKXtmb3IodmFyIGM9e30sdT17fSxoPTAsZj1PYmplY3Qua2V5cyhsKTtoPGYubGVuZ3RoO2grPTEpe3ZhciBwPWZbaF0sZD1sW3BdLGc9dGhpcy5fdGlsZXNbcF07aWYoZyYmIShnLmZhZGVFbmRUaW1lJiZnLmZhZGVFbmRUaW1lPD10LmJyb3dzZXIubm93KCkpKXt2YXIgbT10aGlzLmZpbmRMb2FkZWRQYXJlbnQoZCxvKTttJiYodGhpcy5fYWRkVGlsZShtLnRpbGVJRCksY1ttLnRpbGVJRC5rZXldPW0udGlsZUlEKSx1W3BdPWR9fWZvcih2YXIgdiBpbiB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbih1LGEscyxsKSxjKWxbdl18fCh0aGlzLl9jb3ZlcmVkVGlsZXNbdl09ITAsbFt2XT1jW3ZdKX1mb3IodmFyIHkgaW4gbCl0aGlzLl90aWxlc1t5XS5jbGVhckZhZGVIb2xkKCk7Zm9yKHZhciB4PTAsYj10LmtleXNEaWZmZXJlbmNlKHRoaXMuX3RpbGVzLGwpO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XSx3PXRoaXMuX3RpbGVzW19dO3cuaGFzU3ltYm9sQnVja2V0cyYmIXcuaG9sZGluZ0ZvckZhZGUoKT93LnNldEhvbGREdXJhdGlvbih0aGlzLm1hcC5fZmFkZUR1cmF0aW9uKTp3Lmhhc1N5bWJvbEJ1Y2tldHMmJiF3LnN5bWJvbEZhZGVGaW5pc2hlZCgpfHx0aGlzLl9yZW1vdmVUaWxlKF8pfXRoaXMuX3VwZGF0ZUxvYWRlZFBhcmVudFRpbGVDYWNoZSgpfX0sci5wcm90b3R5cGUucmVsZWFzZVN5bWJvbEZhZGVUaWxlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1t0XS5ob2xkaW5nRm9yRmFkZSgpJiZ0aGlzLl9yZW1vdmVUaWxlKHQpfSxyLnByb3RvdHlwZS5fdXBkYXRlUmV0YWluZWRUaWxlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj17fSxpPXt9LGE9TWF0aC5tYXgoZS1yLm1heE92ZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxvPU1hdGgubWF4KGUrci5tYXhVbmRlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLHM9e30sbD0wLGM9dDtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0saD10aGlzLl9hZGRUaWxlKHUpO25bdS5rZXldPXUsaC5oYXNEYXRhKCl8fGU8dGhpcy5fc291cmNlLm1heHpvb20mJihzW3Uua2V5XT11KX10aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihzLGUsbyxuKTtmb3IodmFyIGY9MCxwPXQ7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdLGc9dGhpcy5fdGlsZXNbZC5rZXldO2lmKCFnLmhhc0RhdGEoKSl7aWYoZSsxPnRoaXMuX3NvdXJjZS5tYXh6b29tKXt2YXIgbT1kLmNoaWxkcmVuKHRoaXMuX3NvdXJjZS5tYXh6b29tKVswXSx2PXRoaXMuZ2V0VGlsZShtKTtpZih2JiZ2Lmhhc0RhdGEoKSl7blttLmtleV09bTtjb250aW51ZX19ZWxzZXt2YXIgeT1kLmNoaWxkcmVuKHRoaXMuX3NvdXJjZS5tYXh6b29tKTtpZihuW3lbMF0ua2V5XSYmblt5WzFdLmtleV0mJm5beVsyXS5rZXldJiZuW3lbM10ua2V5XSljb250aW51ZX1mb3IodmFyIHg9Zy53YXNSZXF1ZXN0ZWQoKSxiPWQub3ZlcnNjYWxlZFotMTtiPj1hOy0tYil7dmFyIF89ZC5zY2FsZWRUbyhiKTtpZihpW18ua2V5XSlicmVhaztpZihpW18ua2V5XT0hMCwhKGc9dGhpcy5nZXRUaWxlKF8pKSYmeCYmKGc9dGhpcy5fYWRkVGlsZShfKSksZyYmKG5bXy5rZXldPV8seD1nLndhc1JlcXVlc3RlZCgpLGcuaGFzRGF0YSgpKSlicmVha319fXJldHVybiBufSxyLnByb3RvdHlwZS5fdXBkYXRlTG9hZGVkUGFyZW50VGlsZUNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzPXt9LHRoaXMuX3RpbGVzKXtmb3IodmFyIGU9W10scj12b2lkIDAsbj10aGlzLl90aWxlc1t0XS50aWxlSUQ7bi5vdmVyc2NhbGVkWj4wOyl7aWYobi5rZXkgaW4gdGhpcy5fbG9hZGVkUGFyZW50VGlsZXMpe3I9dGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbbi5rZXldO2JyZWFrfWUucHVzaChuLmtleSk7dmFyIGk9bi5zY2FsZWRUbyhuLm92ZXJzY2FsZWRaLTEpO2lmKHI9dGhpcy5fZ2V0TG9hZGVkVGlsZShpKSlicmVhaztuPWl9Zm9yKHZhciBhPTAsbz1lO2E8by5sZW5ndGg7YSs9MSl0aGlzLl9sb2FkZWRQYXJlbnRUaWxlc1tvW2FdXT1yfX0sci5wcm90b3R5cGUuX2FkZFRpbGU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fdGlsZXNbZS5rZXldO2lmKHIpcmV0dXJuIHI7KHI9dGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKGUpKSYmKHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihlLmtleSxyKSxyLnRpbGVJRD1lLHRoaXMuX3N0YXRlLmluaXRpYWxpemVUaWxlU3RhdGUocix0aGlzLm1hcD90aGlzLm1hcC5wYWludGVyOm51bGwpLHRoaXMuX2NhY2hlVGltZXJzW2Uua2V5XSYmKGNsZWFyVGltZW91dCh0aGlzLl9jYWNoZVRpbWVyc1tlLmtleV0pLGRlbGV0ZSB0aGlzLl9jYWNoZVRpbWVyc1tlLmtleV0sdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKGUua2V5LHIpKSk7dmFyIG49Qm9vbGVhbihyKTtyZXR1cm4gbnx8KHI9bmV3IHQuVGlsZShlLHRoaXMuX3NvdXJjZS50aWxlU2l6ZSplLm92ZXJzY2FsZUZhY3RvcigpKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsZS5rZXksci5zdGF0ZSkpKSxyPyhyLnVzZXMrKyx0aGlzLl90aWxlc1tlLmtleV09cixufHx0aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHt0aWxlOnIsY29vcmQ6ci50aWxlSUQsZGF0YVR5cGU6InNvdXJjZSJ9KSkscik6bnVsbH0sci5wcm90b3R5cGUuX3NldFRpbGVSZWxvYWRUaW1lcj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dCBpbiB0aGlzLl90aW1lcnMmJihjbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW3RdKSxkZWxldGUgdGhpcy5fdGltZXJzW3RdKTt2YXIgbj1lLmdldEV4cGlyeVRpbWVvdXQoKTtuJiYodGhpcy5fdGltZXJzW3RdPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5fcmVsb2FkVGlsZSh0LCJleHBpcmVkIiksZGVsZXRlIHIuX3RpbWVyc1t0XX0pLG4pKX0sci5wcm90b3R5cGUuX3JlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZXNbdF07ZSYmKGUudXNlcy0tLGRlbGV0ZSB0aGlzLl90aWxlc1t0XSx0aGlzLl90aW1lcnNbdF0mJihjbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW3RdKSxkZWxldGUgdGhpcy5fdGltZXJzW3RdKSxlLnVzZXM+MHx8KGUuaGFzRGF0YSgpJiYicmVsb2FkaW5nIiE9PWUuc3RhdGU/dGhpcy5fY2FjaGUuYWRkKGUudGlsZUlELGUsZS5nZXRFeHBpcnlUaW1lb3V0KCkpOihlLmFib3J0ZWQ9ITAsdGhpcy5fYWJvcnRUaWxlKGUpLHRoaXMuX3VubG9hZFRpbGUoZSkpKSl9LHIucHJvdG90eXBlLmNsZWFyVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCk7dGhpcy5fY2FjaGUucmVzZXQoKX0sci5wcm90b3R5cGUudGlsZXNJbj1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcyxhPVtdLG89dGhpcy50cmFuc2Zvcm07aWYoIW8pcmV0dXJuIGE7Zm9yKHZhciBzPW4/by5nZXRDYW1lcmFRdWVyeUdlb21ldHJ5KGUpOmUsbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8ucG9pbnRDb29yZGluYXRlKHQpfSkpLGM9cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50Q29vcmRpbmF0ZSh0KX0pKSx1PXRoaXMuZ2V0SWRzKCksaD0xLzAsZj0xLzAscD0tMS8wLGQ9LTEvMCxnPTAsbT1jO2c8bS5sZW5ndGg7Zys9MSl7dmFyIHY9bVtnXTtoPU1hdGgubWluKGgsdi54KSxmPU1hdGgubWluKGYsdi55KSxwPU1hdGgubWF4KHAsdi54KSxkPU1hdGgubWF4KGQsdi55KX1mb3IodmFyIHk9ZnVuY3Rpb24oZSl7dmFyIG49aS5fdGlsZXNbdVtlXV07aWYoIW4uaG9sZGluZ0ZvckZhZGUoKSl7dmFyIHM9bi50aWxlSUQsZz1NYXRoLnBvdygyLG8uem9vbS1uLnRpbGVJRC5vdmVyc2NhbGVkWiksbT1yKm4ucXVlcnlQYWRkaW5nKnQuRVhURU5UL24udGlsZVNpemUvZyx2PVtzLmdldFRpbGVQb2ludChuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoaCxmKSkscy5nZXRUaWxlUG9pbnQobmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKHAsZCkpXTtpZih2WzBdLngtbTx0LkVYVEVOVCYmdlswXS55LW08dC5FWFRFTlQmJnZbMV0ueCttPj0wJiZ2WzFdLnkrbT49MCl7dmFyIHk9bC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBzLmdldFRpbGVQb2ludCh0KX0pKSx4PWMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcy5nZXRUaWxlUG9pbnQodCl9KSk7YS5wdXNoKHt0aWxlOm4sdGlsZUlEOnMscXVlcnlHZW9tZXRyeTp5LGNhbWVyYVF1ZXJ5R2VvbWV0cnk6eCxzY2FsZTpnfSl9fX0seD0wO3g8dS5sZW5ndGg7eCsrKXkoeCk7cmV0dXJuIGF9LHIucHJvdG90eXBlLmdldFZpc2libGVDb29yZGluYXRlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPXRoaXMuZ2V0UmVuZGVyYWJsZUlkcyh0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90aWxlc1t0XS50aWxlSUR9KSksbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07YS5wb3NNYXRyaXg9dGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGEudG9VbndyYXBwZWQoKSl9cmV0dXJuIHJ9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2UuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2lmKEl0KHRoaXMuX3NvdXJjZS50eXBlKSlmb3IodmFyIGUgaW4gdGhpcy5fdGlsZXMpe3ZhciByPXRoaXMuX3RpbGVzW2VdO2lmKHZvaWQgMCE9PXIuZmFkZUVuZFRpbWUmJnIuZmFkZUVuZFRpbWU+PXQuYnJvd3Nlci5ub3coKSlyZXR1cm4hMH1yZXR1cm4hMX0sci5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9zdGF0ZS51cGRhdGVTdGF0ZSh0PXR8fCJfZ2VvanNvblRpbGVMYXllciIsZSxyKX0sci5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9zdGF0ZS5yZW1vdmVGZWF0dXJlU3RhdGUodD10fHwiX2dlb2pzb25UaWxlTGF5ZXIiLGUscil9LHIucHJvdG90eXBlLmdldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdGF0ZS5nZXRTdGF0ZSh0PXR8fCJfZ2VvanNvblRpbGVMYXllciIsZSl9LHIucHJvdG90eXBlLnNldERlcGVuZGVuY2llcz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdGlsZXNbdF07biYmbi5zZXREZXBlbmRlbmNpZXMoZSxyKX0sci5wcm90b3R5cGUucmVsb2FkVGlsZXNGb3JEZXBlbmRlbmNpZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdGhpcy5fdGlsZXMpdGhpcy5fdGlsZXNbcl0uaGFzRGVwZW5kZW5jeSh0LGUpJiZ0aGlzLl9yZWxvYWRUaWxlKHIsInJlbG9hZGluZyIpO3RoaXMuX2NhY2hlLmZpbHRlcigoZnVuY3Rpb24ocil7cmV0dXJuIXIuaGFzRGVwZW5kZW5jeSh0LGUpfSkpfSxyfSh0LkV2ZW50ZWQpO2Z1bmN0aW9uIFB0KHQsZSl7dmFyIHI9TWF0aC5hYnMoMip0LndyYXApLSsodC53cmFwPDApLG49TWF0aC5hYnMoMiplLndyYXApLSsoZS53cmFwPDApO3JldHVybiB0Lm92ZXJzY2FsZWRaLWUub3ZlcnNjYWxlZFp8fG4tcnx8ZS5jYW5vbmljYWwueS10LmNhbm9uaWNhbC55fHxlLmNhbm9uaWNhbC54LXQuY2Fub25pY2FsLnh9ZnVuY3Rpb24gSXQodCl7cmV0dXJuInJhc3RlciI9PT10fHwiaW1hZ2UiPT09dHx8InZpZGVvIj09PXR9ZnVuY3Rpb24genQoKXtyZXR1cm4gbmV3IHQud2luZG93LldvcmtlcihZaS53b3JrZXJVcmwpfUx0Lm1heE92ZXJ6b29taW5nPTEwLEx0Lm1heFVuZGVyem9vbWluZz0zO3ZhciBPdD0ibWFwYm94Z2xfcHJlbG9hZGVkX3dvcmtlcl9wb29sIixEdD1mdW5jdGlvbigpe3RoaXMuYWN0aXZlPXt9fTtEdC5wcm90b3R5cGUuYWNxdWlyZT1mdW5jdGlvbih0KXtpZighdGhpcy53b3JrZXJzKWZvcih0aGlzLndvcmtlcnM9W107dGhpcy53b3JrZXJzLmxlbmd0aDxEdC53b3JrZXJDb3VudDspdGhpcy53b3JrZXJzLnB1c2gobmV3IHp0KTtyZXR1cm4gdGhpcy5hY3RpdmVbdF09ITAsdGhpcy53b3JrZXJzLnNsaWNlKCl9LER0LnByb3RvdHlwZS5yZWxlYXNlPWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLmFjdGl2ZVt0XSwwPT09dGhpcy5udW1BY3RpdmUoKSYmKHRoaXMud29ya2Vycy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnRlcm1pbmF0ZSgpfSkpLHRoaXMud29ya2Vycz1udWxsKX0sRHQucHJvdG90eXBlLmlzUHJlbG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmFjdGl2ZVtPdF19LER0LnByb3RvdHlwZS5udW1BY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hY3RpdmUpLmxlbmd0aH07dmFyIFJ0LEZ0PU1hdGguZmxvb3IodC5icm93c2VyLmhhcmR3YXJlQ29uY3VycmVuY3kvMik7ZnVuY3Rpb24gQnQoKXtyZXR1cm4gUnR8fChSdD1uZXcgRHQpLFJ0fWZ1bmN0aW9uIE50KGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIGUpInJlZiIhPT1pJiYobltpXT1lW2ldKTtyZXR1cm4gdC5yZWZQcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QgaW4gciYmKG5bdF09clt0XSl9KSksbn1mdW5jdGlvbiBqdCh0KXt0PXQuc2xpY2UoKTtmb3IodmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdLmlkXT10W3JdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKSJyZWYiaW4gdFtuXSYmKHRbbl09TnQodFtuXSxlW3Rbbl0ucmVmXSkpO3JldHVybiB0fUR0LndvcmtlckNvdW50PU1hdGgubWF4KE1hdGgubWluKEZ0LDYpLDEpO3ZhciBVdD17c2V0U3R5bGU6InNldFN0eWxlIixhZGRMYXllcjoiYWRkTGF5ZXIiLHJlbW92ZUxheWVyOiJyZW1vdmVMYXllciIsc2V0UGFpbnRQcm9wZXJ0eToic2V0UGFpbnRQcm9wZXJ0eSIsc2V0TGF5b3V0UHJvcGVydHk6InNldExheW91dFByb3BlcnR5IixzZXRGaWx0ZXI6InNldEZpbHRlciIsYWRkU291cmNlOiJhZGRTb3VyY2UiLHJlbW92ZVNvdXJjZToicmVtb3ZlU291cmNlIixzZXRHZW9KU09OU291cmNlRGF0YToic2V0R2VvSlNPTlNvdXJjZURhdGEiLHNldExheWVyWm9vbVJhbmdlOiJzZXRMYXllclpvb21SYW5nZSIsc2V0TGF5ZXJQcm9wZXJ0eToic2V0TGF5ZXJQcm9wZXJ0eSIsc2V0Q2VudGVyOiJzZXRDZW50ZXIiLHNldFpvb206InNldFpvb20iLHNldEJlYXJpbmc6InNldEJlYXJpbmciLHNldFBpdGNoOiJzZXRQaXRjaCIsc2V0U3ByaXRlOiJzZXRTcHJpdGUiLHNldEdseXBoczoic2V0R2x5cGhzIixzZXRUcmFuc2l0aW9uOiJzZXRUcmFuc2l0aW9uIixzZXRMaWdodDoic2V0TGlnaHQifTtmdW5jdGlvbiBWdCh0LGUscil7ci5wdXNoKHtjb21tYW5kOlV0LmFkZFNvdXJjZSxhcmdzOlt0LGVbdF1dfSl9ZnVuY3Rpb24gcXQodCxlLHIpe2UucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVTb3VyY2UsYXJnczpbdF19KSxyW3RdPSEwfWZ1bmN0aW9uIEh0KHQsZSxyLG4pe3F0KHQscixuKSxWdCh0LGUscil9ZnVuY3Rpb24gR3QoZSxyLG4pe3ZhciBpO2ZvcihpIGluIGVbbl0paWYoZVtuXS5oYXNPd25Qcm9wZXJ0eShpKSYmImRhdGEiIT09aSYmIXQuZGVlcEVxdWFsKGVbbl1baV0scltuXVtpXSkpcmV0dXJuITE7Zm9yKGkgaW4gcltuXSlpZihyW25dLmhhc093blByb3BlcnR5KGkpJiYiZGF0YSIhPT1pJiYhdC5kZWVwRXF1YWwoZVtuXVtpXSxyW25dW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBZdChlLHIsbixpLGEsbyl7dmFyIHM7Zm9yKHMgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZXBFcXVhbChlW3NdLHJbc10pfHxuLnB1c2goe2NvbW1hbmQ6byxhcmdzOltpLHMscltzXSxhXX0pKTtmb3IocyBpbiByKXIuaGFzT3duUHJvcGVydHkocykmJiFlLmhhc093blByb3BlcnR5KHMpJiYodC5kZWVwRXF1YWwoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSl9ZnVuY3Rpb24gV3QodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gWnQodCxlKXtyZXR1cm4gdFtlLmlkXT1lLHR9dmFyIFh0PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZXNldCh0LGUpfTtYdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCxlKXt0aGlzLnBvaW50cz10fHxbXSx0aGlzLl9kaXN0YW5jZXM9WzBdO2Zvcih2YXIgcj0xO3I8dGhpcy5wb2ludHMubGVuZ3RoO3IrKyl0aGlzLl9kaXN0YW5jZXNbcl09dGhpcy5fZGlzdGFuY2VzW3ItMV0rdGhpcy5wb2ludHNbcl0uZGlzdCh0aGlzLnBvaW50c1tyLTFdKTt0aGlzLmxlbmd0aD10aGlzLl9kaXN0YW5jZXNbdGhpcy5fZGlzdGFuY2VzLmxlbmd0aC0xXSx0aGlzLnBhZGRpbmc9TWF0aC5taW4oZXx8MCwuNSp0aGlzLmxlbmd0aCksdGhpcy5wYWRkZWRMZW5ndGg9dGhpcy5sZW5ndGgtMip0aGlzLnBhZGRpbmd9LFh0LnByb3RvdHlwZS5sZXJwPWZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLnBvaW50cy5sZW5ndGgpcmV0dXJuIHRoaXMucG9pbnRzWzBdO2U9dC5jbGFtcChlLDAsMSk7Zm9yKHZhciByPTEsbj10aGlzLl9kaXN0YW5jZXNbcl0saT1lKnRoaXMucGFkZGVkTGVuZ3RoK3RoaXMucGFkZGluZztuPGkmJnI8dGhpcy5fZGlzdGFuY2VzLmxlbmd0aDspbj10aGlzLl9kaXN0YW5jZXNbKytyXTt2YXIgYT1yLTEsbz10aGlzLl9kaXN0YW5jZXNbYV0scz1uLW8sbD1zPjA/KGktbykvczowO3JldHVybiB0aGlzLnBvaW50c1thXS5tdWx0KDEtbCkuYWRkKHRoaXMucG9pbnRzW3JdLm11bHQobCkpfTt2YXIgSnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuYm94Q2VsbHM9W10saT10aGlzLmNpcmNsZUNlbGxzPVtdO3RoaXMueENlbGxDb3VudD1NYXRoLmNlaWwodC9yKSx0aGlzLnlDZWxsQ291bnQ9TWF0aC5jZWlsKGUvcik7Zm9yKHZhciBhPTA7YTx0aGlzLnhDZWxsQ291bnQqdGhpcy55Q2VsbENvdW50O2ErKyluLnB1c2goW10pLGkucHVzaChbXSk7dGhpcy5jaXJjbGVLZXlzPVtdLHRoaXMuYm94S2V5cz1bXSx0aGlzLmJib3hlcz1bXSx0aGlzLmNpcmNsZXM9W10sdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy54U2NhbGU9dGhpcy54Q2VsbENvdW50L3QsdGhpcy55U2NhbGU9dGhpcy55Q2VsbENvdW50L2UsdGhpcy5ib3hVaWQ9MCx0aGlzLmNpcmNsZVVpZD0wfTtmdW5jdGlvbiBLdChlLHIsbixpLGEpe3ZhciBvPXQuY3JlYXRlKCk7cmV0dXJuIHI/KHQuc2NhbGUobyxvLFsxL2EsMS9hLDFdKSxufHx0LnJvdGF0ZVoobyxvLGkuYW5nbGUpKTp0Lm11bHRpcGx5KG8saS5sYWJlbFBsYW5lTWF0cml4LGUpLG99ZnVuY3Rpb24gUXQoZSxyLG4saSxhKXtpZihyKXt2YXIgbz10LmNsb25lKGUpO3JldHVybiB0LnNjYWxlKG8sbyxbYSxhLDFdKSxufHx0LnJvdGF0ZVoobyxvLC1pLmFuZ2xlKSxvfXJldHVybiBpLmdsQ29vcmRNYXRyaXh9ZnVuY3Rpb24gJHQoZSxyKXt2YXIgbj1bZS54LGUueSwwLDFdO3VlKG4sbixyKTt2YXIgaT1uWzNdO3JldHVybntwb2ludDpuZXcgdC5Qb2ludChuWzBdL2ksblsxXS9pKSxzaWduZWREaXN0YW5jZUZyb21DYW1lcmE6aX19ZnVuY3Rpb24gdGUodCxlKXtyZXR1cm4uNSt0L2UqLjV9ZnVuY3Rpb24gZWUodCxlKXt2YXIgcj10WzBdL3RbM10sbj10WzFdL3RbM107cmV0dXJuIHI+PS1lWzBdJiZyPD1lWzBdJiZuPj0tZVsxXSYmbjw9ZVsxXX1mdW5jdGlvbiByZShlLHIsbixpLGEsbyxzLGwpe3ZhciBjPWk/ZS50ZXh0U2l6ZURhdGE6ZS5pY29uU2l6ZURhdGEsdT10LmV2YWx1YXRlU2l6ZUZvclpvb20oYyxuLnRyYW5zZm9ybS56b29tKSxoPVsyNTYvbi53aWR0aCoyKzEsMjU2L24uaGVpZ2h0KjIrMV0sZj1pP2UudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk6ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtmLmNsZWFyKCk7Zm9yKHZhciBwPWUubGluZVZlcnRleEFycmF5LGQ9aT9lLnRleHQucGxhY2VkU3ltYm9sQXJyYXk6ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LGc9bi50cmFuc2Zvcm0ud2lkdGgvbi50cmFuc2Zvcm0uaGVpZ2h0LG09ITEsdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgeT1kLmdldCh2KTtpZih5LmhpZGRlbnx8eS53cml0aW5nTW9kZT09PXQuV3JpdGluZ01vZGUudmVydGljYWwmJiFtKWNlKHkubnVtR2x5cGhzLGYpO2Vsc2V7bT0hMTt2YXIgeD1beS5hbmNob3JYLHkuYW5jaG9yWSwwLDFdO2lmKHQudHJhbnNmb3JtTWF0NCh4LHgsciksZWUoeCxoKSl7dmFyIGI9dGUobi50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx4WzNdKSxfPXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShjLHUseSksdz1zP18vYjpfKmIsVD1uZXcgdC5Qb2ludCh5LmFuY2hvclgseS5hbmNob3JZKSxrPSR0KFQsYSkucG9pbnQsTT17fSxBPWFlKHksdywhMSxsLHIsYSxvLGUuZ2x5cGhPZmZzZXRBcnJheSxwLGYsayxULE0sZyk7bT1BLnVzZVZlcnRpY2FsLChBLm5vdEVub3VnaFJvb218fG18fEEubmVlZHNGbGlwcGluZyYmYWUoeSx3LCEwLGwscixhLG8sZS5nbHlwaE9mZnNldEFycmF5LHAsZixrLFQsTSxnKS5ub3RFbm91Z2hSb29tKSYmY2UoeS5udW1HbHlwaHMsZil9ZWxzZSBjZSh5Lm51bUdseXBocyxmKX19aT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGYpOmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZil9ZnVuY3Rpb24gbmUodCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgaD1zLmdseXBoU3RhcnRJbmRleCtzLm51bUdseXBocyxmPXMubGluZVN0YXJ0SW5kZXgscD1zLmxpbmVTdGFydEluZGV4K3MubGluZUxlbmd0aCxkPWUuZ2V0b2Zmc2V0WChzLmdseXBoU3RhcnRJbmRleCksZz1lLmdldG9mZnNldFgoaC0xKSxtPXNlKHQqZCxyLG4saSxhLG8scy5zZWdtZW50LGYscCxsLGMsdSk7aWYoIW0pcmV0dXJuIG51bGw7dmFyIHY9c2UodCpnLHIsbixpLGEsbyxzLnNlZ21lbnQsZixwLGwsYyx1KTtyZXR1cm4gdj97Zmlyc3Q6bSxsYXN0OnZ9Om51bGx9ZnVuY3Rpb24gaWUoZSxyLG4saSl7cmV0dXJuIGU9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWwmJk1hdGguYWJzKG4ueS1yLnkpPk1hdGguYWJzKG4ueC1yLngpKmk/e3VzZVZlcnRpY2FsOiEwfTooZT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/ci55PG4ueTpyLng+bi54KT97bmVlZHNGbGlwcGluZzohMH06bnVsbH1mdW5jdGlvbiBhZShlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQpe3ZhciBnLG09ci8yNCx2PWUubGluZU9mZnNldFgqbSx5PWUubGluZU9mZnNldFkqbTtpZihlLm51bUdseXBocz4xKXt2YXIgeD1lLmdseXBoU3RhcnRJbmRleCtlLm51bUdseXBocyxiPWUubGluZVN0YXJ0SW5kZXgsXz1lLmxpbmVTdGFydEluZGV4K2UubGluZUxlbmd0aCx3PW5lKG0sbCx2LHksbixoLGYsZSxjLG8scCk7aWYoIXcpcmV0dXJue25vdEVub3VnaFJvb206ITB9O3ZhciBUPSR0KHcuZmlyc3QucG9pbnQscykucG9pbnQsaz0kdCh3Lmxhc3QucG9pbnQscykucG9pbnQ7aWYoaSYmIW4pe3ZhciBNPWllKGUud3JpdGluZ01vZGUsVCxrLGQpO2lmKE0pcmV0dXJuIE19Zz1bdy5maXJzdF07Zm9yKHZhciBBPWUuZ2x5cGhTdGFydEluZGV4KzE7QTx4LTE7QSsrKWcucHVzaChzZShtKmwuZ2V0b2Zmc2V0WChBKSx2LHksbixoLGYsZS5zZWdtZW50LGIsXyxjLG8scCkpO2cucHVzaCh3Lmxhc3QpfWVsc2V7aWYoaSYmIW4pe3ZhciBTPSR0KGYsYSkucG9pbnQsRT1lLmxpbmVTdGFydEluZGV4K2Uuc2VnbWVudCsxLEM9bmV3IHQuUG9pbnQoYy5nZXR4KEUpLGMuZ2V0eShFKSksTD0kdChDLGEpLFA9TC5zaWduZWREaXN0YW5jZUZyb21DYW1lcmE+MD9MLnBvaW50Om9lKGYsQyxTLDEsYSksST1pZShlLndyaXRpbmdNb2RlLFMsUCxkKTtpZihJKXJldHVybiBJfXZhciB6PXNlKG0qbC5nZXRvZmZzZXRYKGUuZ2x5cGhTdGFydEluZGV4KSx2LHksbixoLGYsZS5zZWdtZW50LGUubGluZVN0YXJ0SW5kZXgsZS5saW5lU3RhcnRJbmRleCtlLmxpbmVMZW5ndGgsYyxvLHApO2lmKCF6KXJldHVybntub3RFbm91Z2hSb29tOiEwfTtnPVt6XX1mb3IodmFyIE89MCxEPWc7TzxELmxlbmd0aDtPKz0xKXt2YXIgUj1EW09dO3QuYWRkRHluYW1pY0F0dHJpYnV0ZXModSxSLnBvaW50LFIuYW5nbGUpfXJldHVybnt9fWZ1bmN0aW9uIG9lKHQsZSxyLG4saSl7dmFyIGE9JHQodC5hZGQodC5zdWIoZSkuX3VuaXQoKSksaSkucG9pbnQsbz1yLnN1YihhKTtyZXR1cm4gci5hZGQoby5fbXVsdChuL28ubWFnKCkpKX1mdW5jdGlvbiBzZShlLHIsbixpLGEsbyxzLGwsYyx1LGgsZil7dmFyIHA9aT9lLXI6ZStyLGQ9cD4wPzE6LTEsZz0wO2kmJihkKj0tMSxnPU1hdGguUEkpLGQ8MCYmKGcrPU1hdGguUEkpO2Zvcih2YXIgbT1kPjA/bCtzOmwrcysxLHY9YSx5PWEseD0wLGI9MCxfPU1hdGguYWJzKHApLHc9W107eCtiPD1fOyl7aWYoKG0rPWQpPGx8fG0+PWMpcmV0dXJuIG51bGw7aWYoeT12LHcucHVzaCh2KSx2b2lkIDA9PT0odj1mW21dKSl7dmFyIFQ9bmV3IHQuUG9pbnQodS5nZXR4KG0pLHUuZ2V0eShtKSksaz0kdChULGgpO2lmKGsuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPjApdj1mW21dPWsucG9pbnQ7ZWxzZXt2YXIgTT1tLWQ7dj1vZSgwPT09eD9vOm5ldyB0LlBvaW50KHUuZ2V0eChNKSx1LmdldHkoTSkpLFQseSxfLXgrMSxoKX19eCs9YixiPXkuZGlzdCh2KX12YXIgQT0oXy14KS9iLFM9di5zdWIoeSksRT1TLm11bHQoQSkuX2FkZCh5KTtFLl9hZGQoUy5fdW5pdCgpLl9wZXJwKCkuX211bHQobipkKSk7dmFyIEM9ZytNYXRoLmF0YW4yKHYueS15Lnksdi54LXkueCk7cmV0dXJuIHcucHVzaChFKSx7cG9pbnQ6RSxhbmdsZTpDLHBhdGg6d319SnQucHJvdG90eXBlLmtleXNMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCt0aGlzLmNpcmNsZUtleXMubGVuZ3RofSxKdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRCb3hDZWxsLHRoaXMuYm94VWlkKyspLHRoaXMuYm94S2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LEp0LnByb3RvdHlwZS5pbnNlcnRDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fZm9yRWFjaENlbGwoZS1uLHItbixlK24scituLHRoaXMuX2luc2VydENpcmNsZUNlbGwsdGhpcy5jaXJjbGVVaWQrKyksdGhpcy5jaXJjbGVLZXlzLnB1c2godCksdGhpcy5jaXJjbGVzLnB1c2goZSksdGhpcy5jaXJjbGVzLnB1c2gociksdGhpcy5jaXJjbGVzLnB1c2gobil9LEp0LnByb3RvdHlwZS5faW5zZXJ0Qm94Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5ib3hDZWxsc1tpXS5wdXNoKGEpfSxKdC5wcm90b3R5cGUuX2luc2VydENpcmNsZUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2lyY2xlQ2VsbHNbaV0ucHVzaChhKX0sSnQucHJvdG90eXBlLl9xdWVyeT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYocjwwfHx0PnRoaXMud2lkdGh8fG48MHx8ZT50aGlzLmhlaWdodClyZXR1cm4haSYmW107dmFyIG89W107aWYodDw9MCYmZTw9MCYmdGhpcy53aWR0aDw9ciYmdGhpcy5oZWlnaHQ8PW4pe2lmKGkpcmV0dXJuITA7Zm9yKHZhciBzPTA7czx0aGlzLmJveEtleXMubGVuZ3RoO3MrKylvLnB1c2goe2tleTp0aGlzLmJveEtleXNbc10seDE6dGhpcy5iYm94ZXNbNCpzXSx5MTp0aGlzLmJib3hlc1s0KnMrMV0seDI6dGhpcy5iYm94ZXNbNCpzKzJdLHkyOnRoaXMuYmJveGVzWzQqcyszXX0pO2Zvcih2YXIgbD0wO2w8dGhpcy5jaXJjbGVLZXlzLmxlbmd0aDtsKyspe3ZhciBjPXRoaXMuY2lyY2xlc1szKmxdLHU9dGhpcy5jaXJjbGVzWzMqbCsxXSxoPXRoaXMuY2lyY2xlc1szKmwrMl07by5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW2xdLHgxOmMtaCx5MTp1LWgseDI6YytoLHkyOnUraH0pfXJldHVybiBhP28uZmlsdGVyKGEpOm99cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKHQsZSxyLG4sdGhpcy5fcXVlcnlDZWxsLG8se2hpdFRlc3Q6aSxzZWVuVWlkczp7Ym94Ont9LGNpcmNsZTp7fX19LGEpLGk/by5sZW5ndGg+MDpvfSxKdC5wcm90b3R5cGUuX3F1ZXJ5Q2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dC1yLG89dCtyLHM9ZS1yLGw9ZStyO2lmKG88MHx8YT50aGlzLndpZHRofHxsPDB8fHM+dGhpcy5oZWlnaHQpcmV0dXJuIW4mJltdO3ZhciBjPVtdO3JldHVybiB0aGlzLl9mb3JFYWNoQ2VsbChhLHMsbyxsLHRoaXMuX3F1ZXJ5Q2VsbENpcmNsZSxjLHtoaXRUZXN0Om4sY2lyY2xlOnt4OnQseTplLHJhZGl1czpyfSxzZWVuVWlkczp7Ym94Ont9LGNpcmNsZTp7fX19LGkpLG4/Yy5sZW5ndGg+MDpjfSxKdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdGhpcy5fcXVlcnkodCxlLHIsbiwhMSxpKX0sSnQucHJvdG90eXBlLmhpdFRlc3Q9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdGhpcy5fcXVlcnkodCxlLHIsbiwhMCxpKX0sSnQucHJvdG90eXBlLmhpdFRlc3RDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX3F1ZXJ5Q2lyY2xlKHQsZSxyLCEwLG4pfSxKdC5wcm90b3R5cGUuX3F1ZXJ5Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPW8uc2VlblVpZHMsYz10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT1jKWZvcih2YXIgdT10aGlzLmJib3hlcyxoPTAsZj1jO2g8Zi5sZW5ndGg7aCs9MSl7dmFyIHA9ZltoXTtpZighbC5ib3hbcF0pe2wuYm94W3BdPSEwO3ZhciBkPTQqcDtpZih0PD11W2QrMl0mJmU8PXVbZCszXSYmcj49dVtkKzBdJiZuPj11W2QrMV0mJighc3x8cyh0aGlzLmJveEtleXNbcF0pKSl7aWYoby5oaXRUZXN0KXJldHVybiBhLnB1c2goITApLCEwO2EucHVzaCh7a2V5OnRoaXMuYm94S2V5c1twXSx4MTp1W2RdLHkxOnVbZCsxXSx4Mjp1W2QrMl0seTI6dVtkKzNdfSl9fX12YXIgZz10aGlzLmNpcmNsZUNlbGxzW2ldO2lmKG51bGwhPT1nKWZvcih2YXIgbT10aGlzLmNpcmNsZXMsdj0wLHk9Zzt2PHkubGVuZ3RoO3YrPTEpe3ZhciB4PXlbdl07aWYoIWwuY2lyY2xlW3hdKXtsLmNpcmNsZVt4XT0hMDt2YXIgYj0zKng7aWYodGhpcy5fY2lyY2xlQW5kUmVjdENvbGxpZGUobVtiXSxtW2IrMV0sbVtiKzJdLHQsZSxyLG4pJiYoIXN8fHModGhpcy5jaXJjbGVLZXlzW3hdKSkpe2lmKG8uaGl0VGVzdClyZXR1cm4gYS5wdXNoKCEwKSwhMDt2YXIgXz1tW2JdLHc9bVtiKzFdLFQ9bVtiKzJdO2EucHVzaCh7a2V5OnRoaXMuY2lyY2xlS2V5c1t4XSx4MTpfLVQseTE6dy1ULHgyOl8rVCx5Mjp3K1R9KX19fX0sSnQucHJvdG90eXBlLl9xdWVyeUNlbGxDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD1vLmNpcmNsZSxjPW8uc2VlblVpZHMsdT10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT11KWZvcih2YXIgaD10aGlzLmJib3hlcyxmPTAscD11O2Y8cC5sZW5ndGg7Zis9MSl7dmFyIGQ9cFtmXTtpZighYy5ib3hbZF0pe2MuYm94W2RdPSEwO3ZhciBnPTQqZDtpZih0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShsLngsbC55LGwucmFkaXVzLGhbZyswXSxoW2crMV0saFtnKzJdLGhbZyszXSkmJighc3x8cyh0aGlzLmJveEtleXNbZF0pKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19dmFyIG09dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09bSlmb3IodmFyIHY9dGhpcy5jaXJjbGVzLHk9MCx4PW07eTx4Lmxlbmd0aDt5Kz0xKXt2YXIgYj14W3ldO2lmKCFjLmNpcmNsZVtiXSl7Yy5jaXJjbGVbYl09ITA7dmFyIF89MypiO2lmKHRoaXMuX2NpcmNsZXNDb2xsaWRlKHZbX10sdltfKzFdLHZbXysyXSxsLngsbC55LGwucmFkaXVzKSYmKCFzfHxzKHRoaXMuY2lyY2xlS2V5c1tiXSkpKXJldHVybiBhLnB1c2goITApLCEwfX19LEp0LnByb3RvdHlwZS5fZm9yRWFjaENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9dGhpcy5fY29udmVydFRvWENlbGxDb29yZCh0KSxjPXRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoZSksdT10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHIpLGg9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChuKSxmPWw7Zjw9dTtmKyspZm9yKHZhciBwPWM7cDw9aDtwKyspaWYoaS5jYWxsKHRoaXMsdCxlLHIsbix0aGlzLnhDZWxsQ291bnQqcCtmLGEsbyxzKSlyZXR1cm59LEp0LnByb3RvdHlwZS5fY29udmVydFRvWENlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLnhDZWxsQ291bnQtMSxNYXRoLmZsb29yKHQqdGhpcy54U2NhbGUpKSl9LEp0LnByb3RvdHlwZS5fY29udmVydFRvWUNlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLnlDZWxsQ291bnQtMSxNYXRoLmZsb29yKHQqdGhpcy55U2NhbGUpKSl9LEp0LnByb3RvdHlwZS5fY2lyY2xlc0NvbGxpZGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPW4tdCxzPWktZSxsPXIrYTtyZXR1cm4gbCpsPm8qbytzKnN9LEp0LnByb3RvdHlwZS5fY2lyY2xlQW5kUmVjdENvbGxpZGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9KGEtbikvMixsPU1hdGguYWJzKHQtKG4rcykpO2lmKGw+cytyKXJldHVybiExO3ZhciBjPShvLWkpLzIsdT1NYXRoLmFicyhlLShpK2MpKTtpZih1PmMrcilyZXR1cm4hMTtpZihsPD1zfHx1PD1jKXJldHVybiEwO3ZhciBoPWwtcyxmPXUtYztyZXR1cm4gaCpoK2YqZjw9cipyfTt2YXIgbGU9bmV3IEZsb2F0MzJBcnJheShbLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDAsLTEvMCwtMS8wLDBdKTtmdW5jdGlvbiBjZSh0LGUpe2Zvcih2YXIgcj0wO3I8dDtyKyspe3ZhciBuPWUubGVuZ3RoO2UucmVzaXplKG4rNCksZS5mbG9hdDMyLnNldChsZSwzKm4pfX1mdW5jdGlvbiB1ZSh0LGUscil7dmFyIG49ZVswXSxpPWVbMV07cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzEyXSx0WzFdPXJbMV0qbityWzVdKmkrclsxM10sdFszXT1yWzNdKm4rcls3XSppK3JbMTVdLHR9dmFyIGhlPWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1lJiYoZT1uZXcgSnQodC53aWR0aCsyMDAsdC5oZWlnaHQrMjAwLDI1KSksdm9pZCAwPT09ciYmKHI9bmV3IEp0KHQud2lkdGgrMjAwLHQuaGVpZ2h0KzIwMCwyNSkpLHRoaXMudHJhbnNmb3JtPXQsdGhpcy5ncmlkPWUsdGhpcy5pZ25vcmVkR3JpZD1yLHRoaXMucGl0Y2hmYWN0b3I9TWF0aC5jb3ModC5fcGl0Y2gpKnQuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx0aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnk9dC53aWR0aCsxMDAsdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeT10LmhlaWdodCsxMDAsdGhpcy5ncmlkUmlnaHRCb3VuZGFyeT10LndpZHRoKzIwMCx0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeT10LmhlaWdodCsyMDB9O2Z1bmN0aW9uIGZlKGUscixuKXtyZXR1cm4gcioodC5FWFRFTlQvKGUudGlsZVNpemUqTWF0aC5wb3coMixuLWUudGlsZUlELm92ZXJzY2FsZWRaKSkpfWhlLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkJveD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW8obix0LmFuY2hvclBvaW50WCx0LmFuY2hvclBvaW50WSksbz1yKmEucGVyc3BlY3RpdmVSYXRpbyxzPXQueDEqbythLnBvaW50LngsbD10LnkxKm8rYS5wb2ludC55LGM9dC54MipvK2EucG9pbnQueCx1PXQueTIqbythLnBvaW50Lnk7cmV0dXJuIXRoaXMuaXNJbnNpZGVHcmlkKHMsbCxjLHUpfHwhZSYmdGhpcy5ncmlkLmhpdFRlc3QocyxsLGMsdSxpKT97Ym94OltdLG9mZnNjcmVlbjohMX06e2JveDpbcyxsLGMsdV0sb2Zmc2NyZWVuOnRoaXMuaXNPZmZzY3JlZW4ocyxsLGMsdSl9fSxoZS5wcm90b3R5cGUucGxhY2VDb2xsaXNpb25DaXJjbGVzPWZ1bmN0aW9uKGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHApe3ZhciBkPVtdLGc9bmV3IHQuUG9pbnQoci5hbmNob3JYLHIuYW5jaG9yWSksbT0kdChnLG8pLHY9dGUodGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxtLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSkseT0odT9hL3Y6YSp2KS90Lk9ORV9FTSx4PSR0KGcscykucG9pbnQsYj1uZSh5LGksci5saW5lT2Zmc2V0WCp5LHIubGluZU9mZnNldFkqeSwhMSx4LGcscixuLHMse30pLF89ITEsdz0hMSxUPSEwO2lmKGIpe2Zvcih2YXIgaz0uNSpmKnYrcCxNPW5ldyB0LlBvaW50KC0xMDAsLTEwMCksQT1uZXcgdC5Qb2ludCh0aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnksdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeSksUz1uZXcgWHQsRT1iLmZpcnN0LEM9Yi5sYXN0LEw9W10sUD1FLnBhdGgubGVuZ3RoLTE7UD49MTtQLS0pTC5wdXNoKEUucGF0aFtQXSk7Zm9yKHZhciBJPTE7STxDLnBhdGgubGVuZ3RoO0krKylMLnB1c2goQy5wYXRoW0ldKTt2YXIgej0yLjUqaztpZihsKXt2YXIgTz1MLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuICR0KHQsbCl9KSk7TD1PLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYTw9MH0pKT9bXTpPLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9pbnR9KSl9dmFyIEQ9W107aWYoTC5sZW5ndGg+MCl7Zm9yKHZhciBSPUxbMF0uY2xvbmUoKSxGPUxbMF0uY2xvbmUoKSxCPTE7QjxMLmxlbmd0aDtCKyspUi54PU1hdGgubWluKFIueCxMW0JdLngpLFIueT1NYXRoLm1pbihSLnksTFtCXS55KSxGLng9TWF0aC5tYXgoRi54LExbQl0ueCksRi55PU1hdGgubWF4KEYueSxMW0JdLnkpO0Q9Ui54Pj1NLngmJkYueDw9QS54JiZSLnk+PU0ueSYmRi55PD1BLnk/W0xdOkYueDxNLnh8fFIueD5BLnh8fEYueTxNLnl8fFIueT5BLnk/W106dC5jbGlwTGluZShbTF0sTS54LE0ueSxBLngsQS55KX1mb3IodmFyIE49MCxqPUQ7TjxqLmxlbmd0aDtOKz0xKXt2YXIgVTtTLnJlc2V0KGpbTl0sLjI1KmspLFU9Uy5sZW5ndGg8PS41Kms/MTpNYXRoLmNlaWwoUy5wYWRkZWRMZW5ndGgveikrMTtmb3IodmFyIFY9MDtWPFU7VisrKXt2YXIgcT1WL01hdGgubWF4KFUtMSwxKSxIPVMubGVycChxKSxHPUgueCsxMDAsWT1ILnkrMTAwO2QucHVzaChHLFksaywwKTt2YXIgVz1HLWssWj1ZLWssWD1HK2ssSj1ZK2s7aWYoVD1UJiZ0aGlzLmlzT2Zmc2NyZWVuKFcsWixYLEopLHc9d3x8dGhpcy5pc0luc2lkZUdyaWQoVyxaLFgsSiksIWUmJnRoaXMuZ3JpZC5oaXRUZXN0Q2lyY2xlKEcsWSxrLGgpJiYoXz0hMCwhYykpcmV0dXJue2NpcmNsZXM6W10sb2Zmc2NyZWVuOiExLGNvbGxpc2lvbkRldGVjdGVkOl99fX19cmV0dXJue2NpcmNsZXM6IWMmJl98fCF3P1tdOmQsb2Zmc2NyZWVuOlQsY29sbGlzaW9uRGV0ZWN0ZWQ6X319LGhlLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkU3ltYm9scz1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmdyaWQua2V5c0xlbmd0aCgpJiYwPT09dGhpcy5pZ25vcmVkR3JpZC5rZXlzTGVuZ3RoKCkpcmV0dXJue307Zm9yKHZhciByPVtdLG49MS8wLGk9MS8wLGE9LTEvMCxvPS0xLzAscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT1uZXcgdC5Qb2ludChjLngrMTAwLGMueSsxMDApO249TWF0aC5taW4obix1LngpLGk9TWF0aC5taW4oaSx1LnkpLGE9TWF0aC5tYXgoYSx1LngpLG89TWF0aC5tYXgobyx1LnkpLHIucHVzaCh1KX1mb3IodmFyIGg9e30sZj17fSxwPTAsZD10aGlzLmdyaWQucXVlcnkobixpLGEsbykuY29uY2F0KHRoaXMuaWdub3JlZEdyaWQucXVlcnkobixpLGEsbykpO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXSxtPWcua2V5O2lmKHZvaWQgMD09PWhbbS5idWNrZXRJbnN0YW5jZUlkXSYmKGhbbS5idWNrZXRJbnN0YW5jZUlkXT17fSksIWhbbS5idWNrZXRJbnN0YW5jZUlkXVttLmZlYXR1cmVJbmRleF0pe3ZhciB2PVtuZXcgdC5Qb2ludChnLngxLGcueTEpLG5ldyB0LlBvaW50KGcueDIsZy55MSksbmV3IHQuUG9pbnQoZy54MixnLnkyKSxuZXcgdC5Qb2ludChnLngxLGcueTIpXTt0LnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihyLHYpJiYoaFttLmJ1Y2tldEluc3RhbmNlSWRdW20uZmVhdHVyZUluZGV4XT0hMCx2b2lkIDA9PT1mW20uYnVja2V0SW5zdGFuY2VJZF0mJihmW20uYnVja2V0SW5zdGFuY2VJZF09W10pLGZbbS5idWNrZXRJbnN0YW5jZUlkXS5wdXNoKG0uZmVhdHVyZUluZGV4KSl9fXJldHVybiBmfSxoZS5wcm90b3R5cGUuaW5zZXJ0Q29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4saSl7KGU/dGhpcy5pZ25vcmVkR3JpZDp0aGlzLmdyaWQpLmluc2VydCh7YnVja2V0SW5zdGFuY2VJZDpyLGZlYXR1cmVJbmRleDpuLGNvbGxpc2lvbkdyb3VwSUQ6aX0sdFswXSx0WzFdLHRbMl0sdFszXSl9LGhlLnByb3RvdHlwZS5pbnNlcnRDb2xsaXNpb25DaXJjbGVzPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPWU/dGhpcy5pZ25vcmVkR3JpZDp0aGlzLmdyaWQsbz17YnVja2V0SW5zdGFuY2VJZDpyLGZlYXR1cmVJbmRleDpuLGNvbGxpc2lvbkdyb3VwSUQ6aX0scz0wO3M8dC5sZW5ndGg7cys9NClhLmluc2VydENpcmNsZShvLHRbc10sdFtzKzFdLHRbcysyXSl9LGhlLnByb3RvdHlwZS5wcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbz1mdW5jdGlvbihlLHIsbil7dmFyIGk9W3IsbiwwLDFdO3JldHVybiB1ZShpLGksZSkse3BvaW50Om5ldyB0LlBvaW50KChpWzBdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS53aWR0aCsxMDAsKC1pWzFdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS5oZWlnaHQrMTAwKSxwZXJzcGVjdGl2ZVJhdGlvOi41K3RoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvaVszXSouNX19LGhlLnByb3RvdHlwZS5pc09mZnNjcmVlbj1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gcjwxMDB8fHQ+PXRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeXx8bjwxMDB8fGU+dGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeX0saGUucHJvdG90eXBlLmlzSW5zaWRlR3JpZD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gcj49MCYmdDx0aGlzLmdyaWRSaWdodEJvdW5kYXJ5JiZuPj0wJiZlPHRoaXMuZ3JpZEJvdHRvbUJvdW5kYXJ5fSxoZS5wcm90b3R5cGUuZ2V0Vmlld3BvcnRNYXRyaXg9ZnVuY3Rpb24oKXt2YXIgZT10LmlkZW50aXR5KFtdKTtyZXR1cm4gdC50cmFuc2xhdGUoZSxlLFstMTAwLC0xMDAsMF0pLGV9O3ZhciBwZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLm9wYWNpdHk9dD9NYXRoLm1heCgwLE1hdGgubWluKDEsdC5vcGFjaXR5Kyh0LnBsYWNlZD9lOi1lKSkpOm4mJnI/MTowLHRoaXMucGxhY2VkPXJ9O3BlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5vcGFjaXR5JiYhdGhpcy5wbGFjZWR9O3ZhciBkZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMudGV4dD1uZXcgcGUodD90LnRleHQ6bnVsbCxlLHIsaSksdGhpcy5pY29uPW5ldyBwZSh0P3QuaWNvbjpudWxsLGUsbixpKX07ZGUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dC5pc0hpZGRlbigpJiZ0aGlzLmljb24uaXNIaWRkZW4oKX07dmFyIGdlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCx0aGlzLmljb249ZSx0aGlzLnNraXBGYWRlPXJ9LG1lPWZ1bmN0aW9uKCl7dGhpcy5pbnZQcm9qTWF0cml4PXQuY3JlYXRlKCksdGhpcy52aWV3cG9ydE1hdHJpeD10LmNyZWF0ZSgpLHRoaXMuY2lyY2xlcz1bXX0sdmU9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLmJ1Y2tldEluc3RhbmNlSWQ9dCx0aGlzLmZlYXR1cmVJbmRleD1lLHRoaXMuc291cmNlTGF5ZXJJbmRleD1yLHRoaXMuYnVja2V0SW5kZXg9bix0aGlzLnRpbGVJRD1pfSx5ZT1mdW5jdGlvbih0KXt0aGlzLmNyb3NzU291cmNlQ29sbGlzaW9ucz10LHRoaXMubWF4R3JvdXBJRD0wLHRoaXMuY29sbGlzaW9uR3JvdXBzPXt9fTtmdW5jdGlvbiB4ZShlLHIsbixpLGEpe3ZhciBvPXQuZ2V0QW5jaG9yQWxpZ25tZW50KGUpLHM9LShvLmhvcml6b250YWxBbGlnbi0uNSkqcixsPS0oby52ZXJ0aWNhbEFsaWduLS41KSpuLGM9dC5ldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGUsaSk7cmV0dXJuIG5ldyB0LlBvaW50KHMrY1swXSphLGwrY1sxXSphKX1mdW5jdGlvbiBiZShlLHIsbixpLGEsbyl7dmFyIHM9ZS54MSxsPWUueDIsYz1lLnkxLHU9ZS55MixoPWUuYW5jaG9yUG9pbnRYLGY9ZS5hbmNob3JQb2ludFkscD1uZXcgdC5Qb2ludChyLG4pO3JldHVybiBpJiZwLl9yb3RhdGUoYT9vOi1vKSx7eDE6cytwLngseTE6YytwLnkseDI6bCtwLngseTI6dStwLnksYW5jaG9yUG9pbnRYOmgsYW5jaG9yUG9pbnRZOmZ9fXllLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jcm9zc1NvdXJjZUNvbGxpc2lvbnMpcmV0dXJue0lEOjAscHJlZGljYXRlOm51bGx9O2lmKCF0aGlzLmNvbGxpc2lvbkdyb3Vwc1t0XSl7dmFyIGU9Kyt0aGlzLm1heEdyb3VwSUQ7dGhpcy5jb2xsaXNpb25Hcm91cHNbdF09e0lEOmUscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbGxpc2lvbkdyb3VwSUQ9PT1lfX19cmV0dXJuIHRoaXMuY29sbGlzaW9uR3JvdXBzW3RdfTt2YXIgX2U9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy50cmFuc2Zvcm09dC5jbG9uZSgpLHRoaXMuY29sbGlzaW9uSW5kZXg9bmV3IGhlKHRoaXMudHJhbnNmb3JtKSx0aGlzLnBsYWNlbWVudHM9e30sdGhpcy5vcGFjaXRpZXM9e30sdGhpcy52YXJpYWJsZU9mZnNldHM9e30sdGhpcy5zdGFsZT0hMSx0aGlzLmNvbW1pdFRpbWU9MCx0aGlzLmZhZGVEdXJhdGlvbj1lLHRoaXMucmV0YWluZWRRdWVyeURhdGE9e30sdGhpcy5jb2xsaXNpb25Hcm91cHM9bmV3IHllKHIpLHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzPXt9LHRoaXMucHJldlBsYWNlbWVudD1uLG4mJihuLnByZXZQbGFjZW1lbnQ9dm9pZCAwKSx0aGlzLnBsYWNlZE9yaWVudGF0aW9ucz17fX07ZnVuY3Rpb24gd2UodCxlLHIsbixpKXt0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowLG58fDAsaXx8MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCxufHwwLGl8fDApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjAsbnx8MCxpfHwwKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowLG58fDAsaXx8MCl9X2UucHJvdG90eXBlLmdldEJ1Y2tldFBhcnRzPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW4uZ2V0QnVja2V0KHIpLG89bi5sYXRlc3RGZWF0dXJlSW5kZXg7aWYoYSYmbyYmci5pZD09PWEubGF5ZXJJZHNbMF0pe3ZhciBzPW4uY29sbGlzaW9uQm94QXJyYXksbD1hLmxheWVyc1swXS5sYXlvdXQsYz1NYXRoLnBvdygyLHRoaXMudHJhbnNmb3JtLnpvb20tbi50aWxlSUQub3ZlcnNjYWxlZFopLHU9bi50aWxlU2l6ZS90LkVYVEVOVCxoPXRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChuLnRpbGVJRC50b1Vud3JhcHBlZCgpKSxmPSJtYXAiPT09bC5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50IikscD0ibWFwIj09PWwuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLGQ9ZmUobiwxLHRoaXMudHJhbnNmb3JtLnpvb20pLGc9S3QoaCxmLHAsdGhpcy50cmFuc2Zvcm0sZCksbT1udWxsO2lmKGYpe3ZhciB2PVF0KGgsZixwLHRoaXMudHJhbnNmb3JtLGQpO209dC5tdWx0aXBseShbXSx0aGlzLnRyYW5zZm9ybS5sYWJlbFBsYW5lTWF0cml4LHYpfXRoaXMucmV0YWluZWRRdWVyeURhdGFbYS5idWNrZXRJbnN0YW5jZUlkXT1uZXcgdmUoYS5idWNrZXRJbnN0YW5jZUlkLG8sYS5zb3VyY2VMYXllckluZGV4LGEuaW5kZXgsbi50aWxlSUQpO3ZhciB5PXtidWNrZXQ6YSxsYXlvdXQ6bCxwb3NNYXRyaXg6aCx0ZXh0TGFiZWxQbGFuZU1hdHJpeDpnLGxhYmVsVG9TY3JlZW5NYXRyaXg6bSxzY2FsZTpjLHRleHRQaXhlbFJhdGlvOnUsaG9sZGluZ0ZvckZhZGU6bi5ob2xkaW5nRm9yRmFkZSgpLGNvbGxpc2lvbkJveEFycmF5OnMscGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemU6dC5ldmFsdWF0ZVNpemVGb3Jab29tKGEudGV4dFNpemVEYXRhLHRoaXMudHJhbnNmb3JtLnpvb20pLGNvbGxpc2lvbkdyb3VwOnRoaXMuY29sbGlzaW9uR3JvdXBzLmdldChhLnNvdXJjZUlEKX07aWYoaSlmb3IodmFyIHg9MCxiPWEuc29ydEtleVJhbmdlczt4PGIubGVuZ3RoO3grPTEpe3ZhciBfPWJbeF07ZS5wdXNoKHtzb3J0S2V5Ol8uc29ydEtleSxzeW1ib2xJbnN0YW5jZVN0YXJ0Ol8uc3ltYm9sSW5zdGFuY2VTdGFydCxzeW1ib2xJbnN0YW5jZUVuZDpfLnN5bWJvbEluc3RhbmNlRW5kLHBhcmFtZXRlcnM6eX0pfWVsc2UgZS5wdXNoKHtzeW1ib2xJbnN0YW5jZVN0YXJ0OjAsc3ltYm9sSW5zdGFuY2VFbmQ6YS5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoLHBhcmFtZXRlcnM6eX0pfX0sX2UucHJvdG90eXBlLmF0dGVtcHRBbmNob3JQbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQpe3ZhciBnLG09W2gudGV4dE9mZnNldDAsaC50ZXh0T2Zmc2V0MV0sdj14ZSh0LHIsbixtLGkpLHk9dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChiZShlLHYueCx2LnksYSxvLHRoaXMudHJhbnNmb3JtLmFuZ2xlKSx1LHMsbCxjLnByZWRpY2F0ZSk7aWYoIWR8fDAhPT10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KGJlKGQsdi54LHYueSxhLG8sdGhpcy50cmFuc2Zvcm0uYW5nbGUpLHUscyxsLGMucHJlZGljYXRlKS5ib3gubGVuZ3RoKXJldHVybiB5LmJveC5sZW5ndGg+MD8odGhpcy5wcmV2UGxhY2VtZW50JiZ0aGlzLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW2guY3Jvc3NUaWxlSURdJiZ0aGlzLnByZXZQbGFjZW1lbnQucGxhY2VtZW50c1toLmNyb3NzVGlsZUlEXSYmdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlbWVudHNbaC5jcm9zc1RpbGVJRF0udGV4dCYmKGc9dGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1toLmNyb3NzVGlsZUlEXS5hbmNob3IpLHRoaXMudmFyaWFibGVPZmZzZXRzW2guY3Jvc3NUaWxlSURdPXt0ZXh0T2Zmc2V0Om0sd2lkdGg6cixoZWlnaHQ6bixhbmNob3I6dCx0ZXh0Qm94U2NhbGU6aSxwcmV2QW5jaG9yOmd9LHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGYsdCxoLHApLGYuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmKHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihmLHAsaCksdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbaC5jcm9zc1RpbGVJRF09cCkse3NoaWZ0OnYscGxhY2VkR2x5cGhCb3hlczp5fSk6dm9pZCAwfSxfZS5wcm90b3R5cGUucGxhY2VMYXllckJ1Y2tldFBhcnQ9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXMsYT1lLnBhcmFtZXRlcnMsbz1hLmJ1Y2tldCxzPWEubGF5b3V0LGw9YS5wb3NNYXRyaXgsYz1hLnRleHRMYWJlbFBsYW5lTWF0cml4LHU9YS5sYWJlbFRvU2NyZWVuTWF0cml4LGg9YS50ZXh0UGl4ZWxSYXRpbyxmPWEuaG9sZGluZ0ZvckZhZGUscD1hLmNvbGxpc2lvbkJveEFycmF5LGQ9YS5wYXJ0aWFsbHlFdmFsdWF0ZWRUZXh0U2l6ZSxnPWEuY29sbGlzaW9uR3JvdXAsbT1zLmdldCgidGV4dC1vcHRpb25hbCIpLHY9cy5nZXQoImljb24tb3B0aW9uYWwiKSx5PXMuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKSx4PXMuZ2V0KCJpY29uLWFsbG93LW92ZXJsYXAiKSxiPSJtYXAiPT09cy5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IiksXz0ibWFwIj09PXMuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLHc9Im5vbmUiIT09cy5nZXQoImljb24tdGV4dC1maXQiKSxUPSJ2aWV3cG9ydC15Ij09PXMuZ2V0KCJzeW1ib2wtei1vcmRlciIpLGs9eSYmKHh8fCFvLmhhc0ljb25EYXRhKCl8fHYpLE09eCYmKHl8fCFvLmhhc1RleHREYXRhKCl8fG0pOyFvLmNvbGxpc2lvbkFycmF5cyYmcCYmby5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKHApO3ZhciBBPWZ1bmN0aW9uKGUsYSl7aWYoIXJbZS5jcm9zc1RpbGVJRF0paWYoZilpLnBsYWNlbWVudHNbZS5jcm9zc1RpbGVJRF09bmV3IGdlKCExLCExLCExKTtlbHNle3ZhciBwLFQ9ITEsQT0hMSxTPSEwLEU9bnVsbCxDPXtib3g6bnVsbCxvZmZzY3JlZW46bnVsbH0sTD17Ym94Om51bGwsb2Zmc2NyZWVuOm51bGx9LFA9bnVsbCxJPW51bGwsej0wLE89MCxEPTA7YS50ZXh0RmVhdHVyZUluZGV4P3o9YS50ZXh0RmVhdHVyZUluZGV4OmUudXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXMmJih6PWUuZmVhdHVyZUluZGV4KSxhLnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCYmKE89YS52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXgpO3ZhciBSPWEudGV4dEJveDtpZihSKXt2YXIgRj1mdW5jdGlvbihyKXt2YXIgbj10LldyaXRpbmdNb2RlLmhvcml6b250YWw7aWYoby5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiYhciYmaS5wcmV2UGxhY2VtZW50KXt2YXIgYT1pLnByZXZQbGFjZW1lbnQucGxhY2VkT3JpZW50YXRpb25zW2UuY3Jvc3NUaWxlSURdO2EmJihpLnBsYWNlZE9yaWVudGF0aW9uc1tlLmNyb3NzVGlsZUlEXT1hLGkubWFya1VzZWRPcmllbnRhdGlvbihvLG49YSxlKSl9cmV0dXJuIG59LEI9ZnVuY3Rpb24ocixuKXtpZihvLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJmUubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzPjAmJmEudmVydGljYWxUZXh0Qm94KWZvcih2YXIgaT0wLHM9by53cml0aW5nTW9kZXM7aTxzLmxlbmd0aCYmKHNbaV09PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsPyhDPW4oKSxMPUMpOkM9cigpLCEoQyYmQy5ib3gmJkMuYm94Lmxlbmd0aCkpO2krPTEpO2Vsc2UgQz1yKCl9O2lmKHMuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpKXt2YXIgTj1zLmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKTtpZihpLnByZXZQbGFjZW1lbnQmJmkucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZS5jcm9zc1RpbGVJRF0pe3ZhciBqPWkucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZS5jcm9zc1RpbGVJRF07Ti5pbmRleE9mKGouYW5jaG9yKT4wJiYoTj1OLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1qLmFuY2hvcn0pKSkudW5zaGlmdChqLmFuY2hvcil9dmFyIFU9ZnVuY3Rpb24odCxyLG4pe2Zvcih2YXIgYT10LngyLXQueDEscz10LnkyLXQueTEsYz1lLnRleHRCb3hTY2FsZSx1PXcmJiF4P3I6bnVsbCxmPXtib3g6W10sb2Zmc2NyZWVuOiExfSxwPXk/MipOLmxlbmd0aDpOLmxlbmd0aCxkPTA7ZDxwOysrZCl7dmFyIG09aS5hdHRlbXB0QW5jaG9yUGxhY2VtZW50KE5bZCVOLmxlbmd0aF0sdCxhLHMsYyxiLF8saCxsLGcsZD49Ti5sZW5ndGgsZSxvLG4sdSk7aWYobSYmKGY9bS5wbGFjZWRHbHlwaEJveGVzKSYmZi5ib3gmJmYuYm94Lmxlbmd0aCl7VD0hMCxFPW0uc2hpZnQ7YnJlYWt9fXJldHVybiBmfTtCKChmdW5jdGlvbigpe3JldHVybiBVKFIsYS5pY29uQm94LHQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbCl9KSwoZnVuY3Rpb24oKXt2YXIgcj1hLnZlcnRpY2FsVGV4dEJveDtyZXR1cm4gby5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiYhKEMmJkMuYm94JiZDLmJveC5sZW5ndGgpJiZlLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcz4wJiZyP1UocixhLnZlcnRpY2FsSWNvbkJveCx0LldyaXRpbmdNb2RlLnZlcnRpY2FsKTp7Ym94Om51bGwsb2Zmc2NyZWVuOm51bGx9fSkpLEMmJihUPUMuYm94LFM9Qy5vZmZzY3JlZW4pO3ZhciBWPUYoQyYmQy5ib3gpO2lmKCFUJiZpLnByZXZQbGFjZW1lbnQpe3ZhciBxPWkucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZS5jcm9zc1RpbGVJRF07cSYmKGkudmFyaWFibGVPZmZzZXRzW2UuY3Jvc3NUaWxlSURdPXEsaS5tYXJrVXNlZEp1c3RpZmljYXRpb24obyxxLmFuY2hvcixlLFYpKX19ZWxzZXt2YXIgSD1mdW5jdGlvbih0LHIpe3ZhciBuPWkuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3godCx5LGgsbCxnLnByZWRpY2F0ZSk7cmV0dXJuIG4mJm4uYm94JiZuLmJveC5sZW5ndGgmJihpLm1hcmtVc2VkT3JpZW50YXRpb24obyxyLGUpLGkucGxhY2VkT3JpZW50YXRpb25zW2UuY3Jvc3NUaWxlSURdPXIpLG59O0IoKGZ1bmN0aW9uKCl7cmV0dXJuIEgoUix0LldyaXRpbmdNb2RlLmhvcml6b250YWwpfSksKGZ1bmN0aW9uKCl7dmFyIHI9YS52ZXJ0aWNhbFRleHRCb3g7cmV0dXJuIG8uYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXM+MCYmcj9IKHIsdC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCk6e2JveDpudWxsLG9mZnNjcmVlbjpudWxsfX0pKSxGKEMmJkMuYm94JiZDLmJveC5sZW5ndGgpfX1pZihUPShwPUMpJiZwLmJveCYmcC5ib3gubGVuZ3RoPjAsUz1wJiZwLm9mZnNjcmVlbixlLnVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzKXt2YXIgRz1vLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGUuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KSxZPXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShvLnRleHRTaXplRGF0YSxkLEcpLFc9cy5nZXQoInRleHQtcGFkZGluZyIpO1A9aS5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkNpcmNsZXMoeSxHLG8ubGluZVZlcnRleEFycmF5LG8uZ2x5cGhPZmZzZXRBcnJheSxZLGwsYyx1LG4sXyxnLnByZWRpY2F0ZSxlLmNvbGxpc2lvbkNpcmNsZURpYW1ldGVyLFcpLFQ9eXx8UC5jaXJjbGVzLmxlbmd0aD4wJiYhUC5jb2xsaXNpb25EZXRlY3RlZCxTPVMmJlAub2Zmc2NyZWVufWlmKGEuaWNvbkZlYXR1cmVJbmRleCYmKEQ9YS5pY29uRmVhdHVyZUluZGV4KSxhLmljb25Cb3gpe3ZhciBaPWZ1bmN0aW9uKHQpe3ZhciBlPXcmJkU/YmUodCxFLngsRS55LGIsXyxpLnRyYW5zZm9ybS5hbmdsZSk6dDtyZXR1cm4gaS5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChlLHgsaCxsLGcucHJlZGljYXRlKX07QT1MJiZMLmJveCYmTC5ib3gubGVuZ3RoJiZhLnZlcnRpY2FsSWNvbkJveD8oST1aKGEudmVydGljYWxJY29uQm94KSkuYm94Lmxlbmd0aD4wOihJPVooYS5pY29uQm94KSkuYm94Lmxlbmd0aD4wLFM9UyYmSS5vZmZzY3JlZW59dmFyIFg9bXx8MD09PWUubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMmJjA9PT1lLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyxKPXZ8fDA9PT1lLm51bUljb25WZXJ0aWNlcztpZihYfHxKP0o/WHx8KEE9QSYmVCk6VD1BJiZUOkE9VD1BJiZULFQmJnAmJnAuYm94JiZpLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChwLmJveCxzLmdldCgidGV4dC1pZ25vcmUtcGxhY2VtZW50Iiksby5idWNrZXRJbnN0YW5jZUlkLEwmJkwuYm94JiZPP086eixnLklEKSxBJiZJJiZpLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkJveChJLmJveCxzLmdldCgiaWNvbi1pZ25vcmUtcGxhY2VtZW50Iiksby5idWNrZXRJbnN0YW5jZUlkLEQsZy5JRCksUCYmKFQmJmkuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhQLmNpcmNsZXMscy5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLG8uYnVja2V0SW5zdGFuY2VJZCx6LGcuSUQpLG4pKXt2YXIgSz1vLmJ1Y2tldEluc3RhbmNlSWQsUT1pLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tLXTt2b2lkIDA9PT1RJiYoUT1pLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tLXT1uZXcgbWUpO2Zvcih2YXIgJD0wOyQ8UC5jaXJjbGVzLmxlbmd0aDskKz00KVEuY2lyY2xlcy5wdXNoKFAuY2lyY2xlc1skKzBdKSxRLmNpcmNsZXMucHVzaChQLmNpcmNsZXNbJCsxXSksUS5jaXJjbGVzLnB1c2goUC5jaXJjbGVzWyQrMl0pLFEuY2lyY2xlcy5wdXNoKFAuY29sbGlzaW9uRGV0ZWN0ZWQ/MTowKX1pLnBsYWNlbWVudHNbZS5jcm9zc1RpbGVJRF09bmV3IGdlKFR8fGssQXx8TSxTfHxvLmp1c3RSZWxvYWRlZCkscltlLmNyb3NzVGlsZUlEXT0hMH19O2lmKFQpZm9yKHZhciBTPW8uZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSksRT1TLmxlbmd0aC0xO0U+PTA7LS1FKXt2YXIgQz1TW0VdO0Eoby5zeW1ib2xJbnN0YW5jZXMuZ2V0KEMpLG8uY29sbGlzaW9uQXJyYXlzW0NdKX1lbHNlIGZvcih2YXIgTD1lLnN5bWJvbEluc3RhbmNlU3RhcnQ7TDxlLnN5bWJvbEluc3RhbmNlRW5kO0wrKylBKG8uc3ltYm9sSW5zdGFuY2VzLmdldChMKSxvLmNvbGxpc2lvbkFycmF5c1tMXSk7aWYobiYmby5idWNrZXRJbnN0YW5jZUlkIGluIHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzKXt2YXIgUD10aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tvLmJ1Y2tldEluc3RhbmNlSWRdO3QuaW52ZXJ0KFAuaW52UHJvak1hdHJpeCxsKSxQLnZpZXdwb3J0TWF0cml4PXRoaXMuY29sbGlzaW9uSW5kZXguZ2V0Vmlld3BvcnRNYXRyaXgoKX1vLmp1c3RSZWxvYWRlZD0hMX0sX2UucHJvdG90eXBlLm1hcmtVc2VkSnVzdGlmaWNhdGlvbj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYTthPWk9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsP24udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg6e2xlZnQ6bi5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LGNlbnRlcjpuLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxyaWdodDpuLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4fVt0LmdldEFuY2hvckp1c3RpZmljYXRpb24ocildO2Zvcih2YXIgbz0wLHM9W24ubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LG4udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXhdO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtsPj0wJiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChsKS5jcm9zc1RpbGVJRD1hPj0wJiZsIT09YT8wOm4uY3Jvc3NUaWxlSUQpfX0sX2UucHJvdG90eXBlLm1hcmtVc2VkT3JpZW50YXRpb249ZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1yPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsfHxyPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsT25seT9yOjAsYT1yPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD9yOjAsbz0wLHM9W24ubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XTtvPHMubGVuZ3RoO28rPTEpZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChzW29dKS5wbGFjZWRPcmllbnRhdGlvbj1pO24udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgmJihlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KG4udmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLnBsYWNlZE9yaWVudGF0aW9uPWEpfSxfZS5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uKHQpe3RoaXMuY29tbWl0VGltZT10LHRoaXMuem9vbUF0TGFzdFJlY2VuY3lDaGVjaz10aGlzLnRyYW5zZm9ybS56b29tO3ZhciBlPXRoaXMucHJldlBsYWNlbWVudCxyPSExO3RoaXMucHJldlpvb21BZGp1c3RtZW50PWU/ZS56b29tQWRqdXN0bWVudCh0aGlzLnRyYW5zZm9ybS56b29tKTowO3ZhciBuPWU/ZS5zeW1ib2xGYWRlQ2hhbmdlKHQpOjEsaT1lP2Uub3BhY2l0aWVzOnt9LGE9ZT9lLnZhcmlhYmxlT2Zmc2V0czp7fSxvPWU/ZS5wbGFjZWRPcmllbnRhdGlvbnM6e307Zm9yKHZhciBzIGluIHRoaXMucGxhY2VtZW50cyl7dmFyIGw9dGhpcy5wbGFjZW1lbnRzW3NdLGM9aVtzXTtjPyh0aGlzLm9wYWNpdGllc1tzXT1uZXcgZGUoYyxuLGwudGV4dCxsLmljb24pLHI9cnx8bC50ZXh0IT09Yy50ZXh0LnBsYWNlZHx8bC5pY29uIT09Yy5pY29uLnBsYWNlZCk6KHRoaXMub3BhY2l0aWVzW3NdPW5ldyBkZShudWxsLG4sbC50ZXh0LGwuaWNvbixsLnNraXBGYWRlKSxyPXJ8fGwudGV4dHx8bC5pY29uKX1mb3IodmFyIHUgaW4gaSl7dmFyIGg9aVt1XTtpZighdGhpcy5vcGFjaXRpZXNbdV0pe3ZhciBmPW5ldyBkZShoLG4sITEsITEpO2YuaXNIaWRkZW4oKXx8KHRoaXMub3BhY2l0aWVzW3VdPWYscj1yfHxoLnRleHQucGxhY2VkfHxoLmljb24ucGxhY2VkKX19Zm9yKHZhciBwIGluIGEpdGhpcy52YXJpYWJsZU9mZnNldHNbcF18fCF0aGlzLm9wYWNpdGllc1twXXx8dGhpcy5vcGFjaXRpZXNbcF0uaXNIaWRkZW4oKXx8KHRoaXMudmFyaWFibGVPZmZzZXRzW3BdPWFbcF0pO2Zvcih2YXIgZCBpbiBvKXRoaXMucGxhY2VkT3JpZW50YXRpb25zW2RdfHwhdGhpcy5vcGFjaXRpZXNbZF18fHRoaXMub3BhY2l0aWVzW2RdLmlzSGlkZGVuKCl8fCh0aGlzLnBsYWNlZE9yaWVudGF0aW9uc1tkXT1vW2RdKTtyP3RoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU9dDoibnVtYmVyIiE9dHlwZW9mIHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWUmJih0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPWU/ZS5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZTp0KX0sX2UucHJvdG90eXBlLnVwZGF0ZUxheWVyT3BhY2l0aWVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5nZXRCdWNrZXQodCk7byYmYS5sYXRlc3RGZWF0dXJlSW5kZXgmJnQuaWQ9PT1vLmxheWVySWRzWzBdJiZ0aGlzLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcyhvLHIsYS5jb2xsaXNpb25Cb3hBcnJheSl9fSxfZS5wcm90b3R5cGUudXBkYXRlQnVja2V0T3BhY2l0aWVzPWZ1bmN0aW9uKGUscixuKXt2YXIgaT10aGlzO2UuaGFzVGV4dERhdGEoKSYmZS50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLGUuaGFzSWNvbkRhdGEoKSYmZS5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKSYmZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCksZS5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpJiZlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKTt2YXIgYT1lLmxheWVyc1swXS5sYXlvdXQsbz1uZXcgZGUobnVsbCwwLCExLCExLCEwKSxzPWEuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKSxsPWEuZ2V0KCJpY29uLWFsbG93LW92ZXJsYXAiKSxjPWEuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpLHU9Im1hcCI9PT1hLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSxoPSJtYXAiPT09YS5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50IiksZj0ibm9uZSIhPT1hLmdldCgiaWNvbi10ZXh0LWZpdCIpLHA9bmV3IGRlKG51bGwsMCxzJiYobHx8IWUuaGFzSWNvbkRhdGEoKXx8YS5nZXQoImljb24tb3B0aW9uYWwiKSksbCYmKHN8fCFlLmhhc1RleHREYXRhKCl8fGEuZ2V0KCJ0ZXh0LW9wdGlvbmFsIikpLCEwKTshZS5jb2xsaXNpb25BcnJheXMmJm4mJihlLmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCl8fGUuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSkmJmUuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhuKTtmb3IodmFyIGQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ZS80O24rKyl0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhyKX0sZz1mdW5jdGlvbihuKXt2YXIgYT1lLnN5bWJvbEluc3RhbmNlcy5nZXQobikscz1hLm51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzLGw9YS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMsZz1hLmNyb3NzVGlsZUlELG09aS5vcGFjaXRpZXNbZ107cltnXT9tPW86bXx8KGkub3BhY2l0aWVzW2ddPW09cCkscltnXT0hMDt2YXIgdj1hLm51bUljb25WZXJ0aWNlcz4wLHk9aS5wbGFjZWRPcmllbnRhdGlvbnNbYS5jcm9zc1RpbGVJRF0seD15PT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCxiPXk9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWx8fHk9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5O2lmKHM+MHx8bD4wKXt2YXIgXz1MZShtLnRleHQpO2QoZS50ZXh0LHMseD9QZTpfKSxkKGUudGV4dCxsLGI/UGU6Xyk7dmFyIHc9bS50ZXh0LmlzSGlkZGVuKCk7W2EucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XS5mb3JFYWNoKChmdW5jdGlvbih0KXt0Pj0wJiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldCh0KS5oaWRkZW49d3x8eD8xOjApfSkpLGEudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg+PTAmJihlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGEudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLmhpZGRlbj13fHxiPzE6MCk7dmFyIFQ9aS52YXJpYWJsZU9mZnNldHNbYS5jcm9zc1RpbGVJRF07VCYmaS5tYXJrVXNlZEp1c3RpZmljYXRpb24oZSxULmFuY2hvcixhLHkpO3ZhciBrPWkucGxhY2VkT3JpZW50YXRpb25zW2EuY3Jvc3NUaWxlSURdO2smJihpLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihlLCJsZWZ0IixhLGspLGkubWFya1VzZWRPcmllbnRhdGlvbihlLGssYSkpfWlmKHYpe3ZhciBNPUxlKG0uaWNvbiksQT0hKGYmJmEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgmJngpO2EucGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wJiYoZChlLmljb24sYS5udW1JY29uVmVydGljZXMsQT9NOlBlKSxlLmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGEucGxhY2VkSWNvblN5bWJvbEluZGV4KS5oaWRkZW49bS5pY29uLmlzSGlkZGVuKCkpLGEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXg+PTAmJihkKGUuaWNvbixhLm51bVZlcnRpY2FsSWNvblZlcnRpY2VzLEE/UGU6TSksZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChhLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4KS5oaWRkZW49bS5pY29uLmlzSGlkZGVuKCkpfWlmKGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKXx8ZS5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpKXt2YXIgUz1lLmNvbGxpc2lvbkFycmF5c1tuXTtpZihTKXt2YXIgRT1uZXcgdC5Qb2ludCgwLDApO2lmKFMudGV4dEJveHx8Uy52ZXJ0aWNhbFRleHRCb3gpe3ZhciBDPSEwO2lmKGMpe3ZhciBMPWkudmFyaWFibGVPZmZzZXRzW2ddO0w/KEU9eGUoTC5hbmNob3IsTC53aWR0aCxMLmhlaWdodCxMLnRleHRPZmZzZXQsTC50ZXh0Qm94U2NhbGUpLHUmJkUuX3JvdGF0ZShoP2kudHJhbnNmb3JtLmFuZ2xlOi1pLnRyYW5zZm9ybS5hbmdsZSkpOkM9ITF9Uy50ZXh0Qm94JiZ3ZShlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksbS50ZXh0LnBsYWNlZCwhQ3x8eCxFLngsRS55KSxTLnZlcnRpY2FsVGV4dEJveCYmd2UoZS50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LG0udGV4dC5wbGFjZWQsIUN8fGIsRS54LEUueSl9dmFyIFA9Qm9vbGVhbighYiYmUy52ZXJ0aWNhbEljb25Cb3gpO1MuaWNvbkJveCYmd2UoZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LG0uaWNvbi5wbGFjZWQsUCxmP0UueDowLGY/RS55OjApLFMudmVydGljYWxJY29uQm94JiZ3ZShlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksbS5pY29uLnBsYWNlZCwhUCxmP0UueDowLGY/RS55OjApfX19LG09MDttPGUuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDttKyspZyhtKTtpZihlLnNvcnRGZWF0dXJlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSksdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtlLmJ1Y2tldEluc3RhbmNlSWRdJiYodGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtlLmJ1Y2tldEluc3RhbmNlSWRdLmZlYXR1cmVTb3J0T3JkZXI9ZS5mZWF0dXJlU29ydE9yZGVyKSxlLmhhc1RleHREYXRhKCkmJmUudGV4dC5vcGFjaXR5VmVydGV4QnVmZmVyJiZlLnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGUudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkpLGUuaGFzSWNvbkRhdGEoKSYmZS5pY29uLm9wYWNpdHlWZXJ0ZXhCdWZmZXImJmUuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZS5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheSksZS5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpJiZlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyJiZlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KSxlLmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkmJmUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXImJmUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkpLGUuYnVja2V0SW5zdGFuY2VJZCBpbiB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5cyl7dmFyIHY9dGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXNbZS5idWNrZXRJbnN0YW5jZUlkXTtlLnBsYWNlbWVudEludlByb2pNYXRyaXg9di5pbnZQcm9qTWF0cml4LGUucGxhY2VtZW50Vmlld3BvcnRNYXRyaXg9di52aWV3cG9ydE1hdHJpeCxlLmNvbGxpc2lvbkNpcmNsZUFycmF5PXYuY2lyY2xlcyxkZWxldGUgdGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXNbZS5idWNrZXRJbnN0YW5jZUlkXX19LF9lLnByb3RvdHlwZS5zeW1ib2xGYWRlQ2hhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MToodC10aGlzLmNvbW1pdFRpbWUpL3RoaXMuZmFkZUR1cmF0aW9uK3RoaXMucHJldlpvb21BZGp1c3RtZW50fSxfZS5wcm90b3R5cGUuem9vbUFkanVzdG1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsKHRoaXMudHJhbnNmb3JtLnpvb20tdCkvMS41KX0sX2UucHJvdG90eXBlLmhhc1RyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0YWxlfHx0LXRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU8dGhpcy5mYWRlRHVyYXRpb259LF9lLnByb3RvdHlwZS5zdGlsbFJlY2VudD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuem9vbUF0TGFzdFJlY2VuY3lDaGVjaz09PWU/MS10aGlzLnpvb21BZGp1c3RtZW50KGUpOjE7cmV0dXJuIHRoaXMuem9vbUF0TGFzdFJlY2VuY3lDaGVjaz1lLHRoaXMuY29tbWl0VGltZSt0aGlzLmZhZGVEdXJhdGlvbipyPnR9LF9lLnByb3RvdHlwZS5zZXRTdGFsZT1mdW5jdGlvbigpe3RoaXMuc3RhbGU9ITB9O3ZhciBUZT1NYXRoLnBvdygyLDI1KSxrZT1NYXRoLnBvdygyLDI0KSxNZT1NYXRoLnBvdygyLDE3KSxBZT1NYXRoLnBvdygyLDE2KSxTZT1NYXRoLnBvdygyLDkpLEVlPU1hdGgucG93KDIsOCksQ2U9TWF0aC5wb3coMiwxKTtmdW5jdGlvbiBMZSh0KXtpZigwPT09dC5vcGFjaXR5JiYhdC5wbGFjZWQpcmV0dXJuIDA7aWYoMT09PXQub3BhY2l0eSYmdC5wbGFjZWQpcmV0dXJuIDQyOTQ5NjcyOTU7dmFyIGU9dC5wbGFjZWQ/MTowLHI9TWF0aC5mbG9vcigxMjcqdC5vcGFjaXR5KTtyZXR1cm4gcipUZStlKmtlK3IqTWUrZSpBZStyKlNlK2UqRWUrcipDZStlfXZhciBQZT0wLEllPWZ1bmN0aW9uKHQpe3RoaXMuX3NvcnRBY3Jvc3NUaWxlcz0idmlld3BvcnQteSIhPT10LmxheW91dC5nZXQoInN5bWJvbC16LW9yZGVyIikmJnZvaWQgMCE9PXQubGF5b3V0LmdldCgic3ltYm9sLXNvcnQta2V5IikuY29uc3RhbnRPcigxKSx0aGlzLl9jdXJyZW50VGlsZUluZGV4PTAsdGhpcy5fY3VycmVudFBhcnRJbmRleD0wLHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHM9e30sdGhpcy5fYnVja2V0UGFydHM9W119O0llLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT10aGlzLl9idWNrZXRQYXJ0czt0aGlzLl9jdXJyZW50VGlsZUluZGV4PHQubGVuZ3RoOylpZihlLmdldEJ1Y2tldFBhcnRzKGEsbix0W3RoaXMuX2N1cnJlbnRUaWxlSW5kZXhdLHRoaXMuX3NvcnRBY3Jvc3NUaWxlcyksdGhpcy5fY3VycmVudFRpbGVJbmRleCsrLGkoKSlyZXR1cm4hMDtmb3IodGhpcy5fc29ydEFjcm9zc1RpbGVzJiYodGhpcy5fc29ydEFjcm9zc1RpbGVzPSExLGEuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKSk7dGhpcy5fY3VycmVudFBhcnRJbmRleDxhLmxlbmd0aDspaWYoZS5wbGFjZUxheWVyQnVja2V0UGFydChhW3RoaXMuX2N1cnJlbnRQYXJ0SW5kZXhdLHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHMsciksdGhpcy5fY3VycmVudFBhcnRJbmRleCsrLGkoKSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHplPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3RoaXMucGxhY2VtZW50PW5ldyBfZSh0LGksYSxvKSx0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXg9ZS5sZW5ndGgtMSx0aGlzLl9mb3JjZUZ1bGxQbGFjZW1lbnQ9cix0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9bix0aGlzLl9kb25lPSExfTt6ZS5wcm90b3R5cGUuaXNEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvbmV9LHplLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPXRoaXMsYT10LmJyb3dzZXIubm93KCksbz1mdW5jdGlvbigpe3ZhciBlPXQuYnJvd3Nlci5ub3coKS1hO3JldHVybiFpLl9mb3JjZUZ1bGxQbGFjZW1lbnQmJmU+Mn07dGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4Pj0wOyl7dmFyIHM9cltlW3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleF1dLGw9dGhpcy5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgudHJhbnNmb3JtLnpvb207aWYoInN5bWJvbCI9PT1zLnR5cGUmJighcy5taW56b29tfHxzLm1pbnpvb208PWwpJiYoIXMubWF4em9vbXx8cy5tYXh6b29tPmwpKXtpZih0aGlzLl9pblByb2dyZXNzTGF5ZXJ8fCh0aGlzLl9pblByb2dyZXNzTGF5ZXI9bmV3IEllKHMpKSx0aGlzLl9pblByb2dyZXNzTGF5ZXIuY29udGludWVQbGFjZW1lbnQobltzLnNvdXJjZV0sdGhpcy5wbGFjZW1lbnQsdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzLHMsbykpcmV0dXJuO2RlbGV0ZSB0aGlzLl9pblByb2dyZXNzTGF5ZXJ9dGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4LS19dGhpcy5fZG9uZT0hMH0semUucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wbGFjZW1lbnQuY29tbWl0KHQpLHRoaXMucGxhY2VtZW50fTt2YXIgT2U9NTEyL3QuRVhURU5ULzIsRGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGlsZUlEPXQsdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzPXt9LHRoaXMuYnVja2V0SW5zdGFuY2VJZD1yO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lLmdldChuKSxhPWkua2V5O3RoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1thXXx8KHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1thXT1bXSksdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2FdLnB1c2goe2Nyb3NzVGlsZUlEOmkuY3Jvc3NUaWxlSUQsY29vcmQ6dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhpLHQpfSl9fTtEZS5wcm90b3R5cGUuZ2V0U2NhbGVkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj1PZS9NYXRoLnBvdygyLHIuY2Fub25pY2FsLnotdGhpcy50aWxlSUQuY2Fub25pY2FsLnopO3JldHVybnt4Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLngqdC5FWFRFTlQrZS5hbmNob3JYKSpuKSx5Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLnkqdC5FWFRFTlQrZS5hbmNob3JZKSpuKX19LERlLnByb3RvdHlwZS5maW5kTWF0Y2hlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMudGlsZUlELmNhbm9uaWNhbC56PGUuY2Fub25pY2FsLno/MTpNYXRoLnBvdygyLHRoaXMudGlsZUlELmNhbm9uaWNhbC56LWUuY2Fub25pY2FsLnopLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dC5nZXQoaSk7aWYoIWEuY3Jvc3NUaWxlSUQpe3ZhciBvPXRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1thLmtleV07aWYobylmb3IodmFyIHM9dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhhLGUpLGw9MCxjPW87bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO2lmKE1hdGguYWJzKHUuY29vcmQueC1zLngpPD1uJiZNYXRoLmFicyh1LmNvb3JkLnktcy55KTw9biYmIXJbdS5jcm9zc1RpbGVJRF0pe3JbdS5jcm9zc1RpbGVJRF09ITAsYS5jcm9zc1RpbGVJRD11LmNyb3NzVGlsZUlEO2JyZWFrfX19fX07dmFyIFJlPWZ1bmN0aW9uKCl7dGhpcy5tYXhDcm9zc1RpbGVJRD0wfTtSZS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMubWF4Q3Jvc3NUaWxlSUR9O3ZhciBGZT1mdW5jdGlvbigpe3RoaXMuaW5kZXhlcz17fSx0aGlzLnVzZWRDcm9zc1RpbGVJRHM9e30sdGhpcy5sbmc9MH07RmUucHJvdG90eXBlLmhhbmRsZVdyYXBKdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucm91bmQoKHQtdGhpcy5sbmcpLzM2MCk7aWYoMCE9PWUpZm9yKHZhciByIGluIHRoaXMuaW5kZXhlcyl7dmFyIG49dGhpcy5pbmRleGVzW3JdLGk9e307Zm9yKHZhciBhIGluIG4pe3ZhciBvPW5bYV07by50aWxlSUQ9by50aWxlSUQudW53cmFwVG8oby50aWxlSUQud3JhcCtlKSxpW28udGlsZUlELmtleV09b310aGlzLmluZGV4ZXNbcl09aX10aGlzLmxuZz10fSxGZS5wcm90b3R5cGUuYWRkQnVja2V0PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJnRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pe2lmKHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0uYnVja2V0SW5zdGFuY2VJZD09PWUuYnVja2V0SW5zdGFuY2VJZClyZXR1cm4hMTt0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyh0Lm92ZXJzY2FsZWRaLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV0pfWZvcih2YXIgbj0wO248ZS5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO24rKyllLnN5bWJvbEluc3RhbmNlcy5nZXQobikuY3Jvc3NUaWxlSUQ9MDt0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl18fCh0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl09e30pO3ZhciBpPXRoaXMudXNlZENyb3NzVGlsZUlEc1t0Lm92ZXJzY2FsZWRaXTtmb3IodmFyIGEgaW4gdGhpcy5pbmRleGVzKXt2YXIgbz10aGlzLmluZGV4ZXNbYV07aWYoTnVtYmVyKGEpPnQub3ZlcnNjYWxlZFopZm9yKHZhciBzIGluIG8pe3ZhciBsPW9bc107bC50aWxlSUQuaXNDaGlsZE9mKHQpJiZsLmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsaSl9ZWxzZXt2YXIgYz1vW3Quc2NhbGVkVG8oTnVtYmVyKGEpKS5rZXldO2MmJmMuZmluZE1hdGNoZXMoZS5zeW1ib2xJbnN0YW5jZXMsdCxpKX19Zm9yKHZhciB1PTA7dTxlLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7dSsrKXt2YXIgaD1lLnN5bWJvbEluc3RhbmNlcy5nZXQodSk7aC5jcm9zc1RpbGVJRHx8KGguY3Jvc3NUaWxlSUQ9ci5nZW5lcmF0ZSgpLGlbaC5jcm9zc1RpbGVJRF09ITApfXJldHVybiB2b2lkIDA9PT10aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl09e30pLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV09bmV3IERlKHQsZS5zeW1ib2xJbnN0YW5jZXMsZS5idWNrZXRJbnN0YW5jZUlkKSwhMH0sRmUucHJvdG90eXBlLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXMpZm9yKHZhciBuPTAsaT1lLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbcl07bjxpLmxlbmd0aDtuKz0xKWRlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdF1baVtuXS5jcm9zc1RpbGVJRF19LEZlLnByb3RvdHlwZS5yZW1vdmVTdGFsZUJ1Y2tldHM9ZnVuY3Rpb24odCl7dmFyIGU9ITE7Zm9yKHZhciByIGluIHRoaXMuaW5kZXhlcyl7dmFyIG49dGhpcy5pbmRleGVzW3JdO2Zvcih2YXIgaSBpbiBuKXRbbltpXS5idWNrZXRJbnN0YW5jZUlkXXx8KHRoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHIsbltpXSksZGVsZXRlIG5baV0sZT0hMCl9cmV0dXJuIGV9O3ZhciBCZT1mdW5jdGlvbigpe3RoaXMubGF5ZXJJbmRleGVzPXt9LHRoaXMuY3Jvc3NUaWxlSURzPW5ldyBSZSx0aGlzLm1heEJ1Y2tldEluc3RhbmNlSWQ9MCx0aGlzLmJ1Y2tldHNJbkN1cnJlbnRQbGFjZW1lbnQ9e319O0JlLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sYXllckluZGV4ZXNbdC5pZF07dm9pZCAwPT09biYmKG49dGhpcy5sYXllckluZGV4ZXNbdC5pZF09bmV3IEZlKTt2YXIgaT0hMSxhPXt9O24uaGFuZGxlV3JhcEp1bXAocik7Zm9yKHZhciBvPTAscz1lO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWwuZ2V0QnVja2V0KHQpO2MmJnQuaWQ9PT1jLmxheWVySWRzWzBdJiYoYy5idWNrZXRJbnN0YW5jZUlkfHwoYy5idWNrZXRJbnN0YW5jZUlkPSsrdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkKSxuLmFkZEJ1Y2tldChsLnRpbGVJRCxjLHRoaXMuY3Jvc3NUaWxlSURzKSYmKGk9ITApLGFbYy5idWNrZXRJbnN0YW5jZUlkXT0hMCl9cmV0dXJuIG4ucmVtb3ZlU3RhbGVCdWNrZXRzKGEpJiYoaT0hMCksaX0sQmUucHJvdG90eXBlLnBydW5lVW51c2VkTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09ITB9KSksdGhpcy5sYXllckluZGV4ZXMpZVtyXXx8ZGVsZXRlIHRoaXMubGF5ZXJJbmRleGVzW3JdfTt2YXIgTmU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5lbWl0VmFsaWRhdGlvbkVycm9ycyhlLHImJnIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4ic291cmNlLmNhbnZhcyIhPT10LmlkZW50aWZpZXJ9KSkpfSxqZT10LnBpY2soVXQsWyJhZGRMYXllciIsInJlbW92ZUxheWVyIiwic2V0UGFpbnRQcm9wZXJ0eSIsInNldExheW91dFByb3BlcnR5Iiwic2V0RmlsdGVyIiwiYWRkU291cmNlIiwicmVtb3ZlU291cmNlIiwic2V0TGF5ZXJab29tUmFuZ2UiLCJzZXRMaWdodCIsInNldFRyYW5zaXRpb24iLCJzZXRHZW9KU09OU291cmNlRGF0YSJdKSxVZT10LnBpY2soVXQsWyJzZXRDZW50ZXIiLCJzZXRab29tIiwic2V0QmVhcmluZyIsInNldFBpdGNoIl0pLFZlPWZ1bmN0aW9uKCl7dmFyIGU9e30scj10LnN0eWxlU3BlYy4kdmVyc2lvbjtmb3IodmFyIG4gaW4gdC5zdHlsZVNwZWMuJHJvb3Qpe3ZhciBpLGE9dC5zdHlsZVNwZWMuJHJvb3Rbbl07YS5yZXF1aXJlZCYmbnVsbCE9KGk9InZlcnNpb24iPT09bj9yOiJhcnJheSI9PT1hLnR5cGU/W106e30pJiYoZVtuXT1pKX1yZXR1cm4gZX0oKSxxZT1mdW5jdGlvbihlKXtmdW5jdGlvbiByKG4saSl7dmFyIGE9dGhpczt2b2lkIDA9PT1pJiYoaT17fSksZS5jYWxsKHRoaXMpLHRoaXMubWFwPW4sdGhpcy5kaXNwYXRjaGVyPW5ldyBrKEJ0KCksdGhpcyksdGhpcy5pbWFnZU1hbmFnZXI9bmV3IGYsdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudCh0aGlzKSx0aGlzLmdseXBoTWFuYWdlcj1uZXcgeChuLl9yZXF1ZXN0TWFuYWdlcixpLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSksdGhpcy5saW5lQXRsYXM9bmV3IFQoMjU2LDUxMiksdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgQmUsdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX3NlcmlhbGl6ZWRMYXllcnM9e30sdGhpcy5fb3JkZXI9W10sdGhpcy5zb3VyY2VDYWNoZXM9e30sdGhpcy56b29tSGlzdG9yeT1uZXcgdC5ab29tSGlzdG9yeSx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5fYXZhaWxhYmxlSW1hZ2VzPVtdLHRoaXMuX3Jlc2V0VXBkYXRlcygpLHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoInNldFJlZmVycmVyIix0LmdldFJlZmVycmVyKCkpO3ZhciBvPXRoaXM7dGhpcy5fcnRsVGV4dFBsdWdpbkNhbGxiYWNrPXIucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZSgoZnVuY3Rpb24oZSl7by5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic3luY1JUTFBsdWdpblN0YXRlIix7cGx1Z2luU3RhdHVzOmUucGx1Z2luU3RhdHVzLHBsdWdpblVSTDplLnBsdWdpblVSTH0sKGZ1bmN0aW9uKGUscil7aWYodC50cmlnZ2VyUGx1Z2luQ29tcGxldGlvbkV2ZW50KGUpLHImJnIuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpKWZvcih2YXIgbiBpbiBvLnNvdXJjZUNhY2hlcylvLnNvdXJjZUNhY2hlc1tuXS5yZWxvYWQoKX0pKX0pKSx0aGlzLm9uKCJkYXRhIiwoZnVuY3Rpb24odCl7aWYoInNvdXJjZSI9PT10LmRhdGFUeXBlJiYibWV0YWRhdGEiPT09dC5zb3VyY2VEYXRhVHlwZSl7dmFyIGU9YS5zb3VyY2VDYWNoZXNbdC5zb3VyY2VJZF07aWYoZSl7dmFyIHI9ZS5nZXRTb3VyY2UoKTtpZihyJiZyLnZlY3RvckxheWVySWRzKWZvcih2YXIgbiBpbiBhLl9sYXllcnMpe3ZhciBpPWEuX2xheWVyc1tuXTtpLnNvdXJjZT09PXIuaWQmJmEuX3ZhbGlkYXRlTGF5ZXIoaSl9fX19KSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZFVSTD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic3R5bGUifSkpO3ZhciBpPSJib29sZWFuIj09dHlwZW9mIHIudmFsaWRhdGU/ci52YWxpZGF0ZTohdC5pc01hcGJveFVSTChlKTtlPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTChlLHIuYWNjZXNzVG9rZW4pO3ZhciBhPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGUsdC5SZXNvdXJjZVR5cGUuU3R5bGUpO3RoaXMuX3JlcXVlc3Q9dC5nZXRKU09OKGEsKGZ1bmN0aW9uKGUscil7bi5fcmVxdWVzdD1udWxsLGU/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpOnImJm4uX2xvYWQocixpKX0pKX0sci5wcm90b3R5cGUubG9hZEpTT049ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InN0eWxlIn0pKSx0aGlzLl9yZXF1ZXN0PXQuYnJvd3Nlci5mcmFtZSgoZnVuY3Rpb24oKXtuLl9yZXF1ZXN0PW51bGwsbi5fbG9hZChlLCExIT09ci52YWxpZGF0ZSl9KSl9LHIucHJvdG90eXBlLmxvYWRFbXB0eT1mdW5jdGlvbigpe3RoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic3R5bGUifSkpLHRoaXMuX2xvYWQoVmUsITEpfSxyLnByb3RvdHlwZS5fbG9hZD1mdW5jdGlvbihlLHIpe2lmKCFyfHwhTmUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXtmb3IodmFyIG4gaW4gdGhpcy5fbG9hZGVkPSEwLHRoaXMuc3R5bGVzaGVldD1lLGUuc291cmNlcyl0aGlzLmFkZFNvdXJjZShuLGUuc291cmNlc1tuXSx7dmFsaWRhdGU6ITF9KTtlLnNwcml0ZT90aGlzLl9sb2FkU3ByaXRlKGUuc3ByaXRlKTp0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLHRoaXMuZ2x5cGhNYW5hZ2VyLnNldFVSTChlLmdseXBocyk7dmFyIGk9anQodGhpcy5zdHlsZXNoZWV0LmxheWVycyk7dGhpcy5fb3JkZXI9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuX2xheWVycz17fSx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzPXt9O2Zvcih2YXIgYT0wLG89aTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07KHM9dC5jcmVhdGVTdHlsZUxheWVyKHMpKS5zZXRFdmVudGVkUGFyZW50KHRoaXMse2xheWVyOntpZDpzLmlkfX0pLHRoaXMuX2xheWVyc1tzLmlkXT1zLHRoaXMuX3NlcmlhbGl6ZWRMYXllcnNbcy5pZF09cy5zZXJpYWxpemUoKX10aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJzZXRMYXllcnMiLHRoaXMuX3NlcmlhbGl6ZUxheWVycyh0aGlzLl9vcmRlcikpLHRoaXMubGlnaHQ9bmV3IHcodGhpcy5zdHlsZXNoZWV0LmxpZ2h0KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgic3R5bGUubG9hZCIpKX19LHIucHJvdG90eXBlLl9sb2FkU3ByaXRlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5fc3ByaXRlUmVxdWVzdD1mdW5jdGlvbihlLHIsbil7dmFyIGksYSxvLHM9dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8+MT8iQDJ4IjoiIixsPXQuZ2V0SlNPTihyLnRyYW5zZm9ybVJlcXVlc3Qoci5ub3JtYWxpemVTcHJpdGVVUkwoZSxzLCIuanNvbiIpLHQuUmVzb3VyY2VUeXBlLlNwcml0ZUpTT04pLChmdW5jdGlvbih0LGUpe2w9bnVsbCxvfHwobz10LGk9ZSx1KCkpfSkpLGM9dC5nZXRJbWFnZShyLnRyYW5zZm9ybVJlcXVlc3Qoci5ub3JtYWxpemVTcHJpdGVVUkwoZSxzLCIucG5nIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLChmdW5jdGlvbih0LGUpe2M9bnVsbCxvfHwobz10LGE9ZSx1KCkpfSkpO2Z1bmN0aW9uIHUoKXtpZihvKW4obyk7ZWxzZSBpZihpJiZhKXt2YXIgZT10LmJyb3dzZXIuZ2V0SW1hZ2VEYXRhKGEpLHI9e307Zm9yKHZhciBzIGluIGkpe3ZhciBsPWlbc10sYz1sLndpZHRoLHU9bC5oZWlnaHQsaD1sLngsZj1sLnkscD1sLnNkZixkPWwucGl4ZWxSYXRpbyxnPWwuc3RyZXRjaFgsbT1sLnN0cmV0Y2hZLHY9bC5jb250ZW50LHk9bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpjLGhlaWdodDp1fSk7dC5SR0JBSW1hZ2UuY29weShlLHkse3g6aCx5OmZ9LHt4OjAseTowfSx7d2lkdGg6YyxoZWlnaHQ6dX0pLHJbc109e2RhdGE6eSxwaXhlbFJhdGlvOmQsc2RmOnAsc3RyZXRjaFg6ZyxzdHJldGNoWTptLGNvbnRlbnQ6dn19bihudWxsLHIpfX1yZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7bCYmKGwuY2FuY2VsKCksbD1udWxsKSxjJiYoYy5jYW5jZWwoKSxjPW51bGwpfX19KGUsdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLChmdW5jdGlvbihlLG4pe2lmKHIuX3Nwcml0ZVJlcXVlc3Q9bnVsbCxlKXIuZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTtlbHNlIGlmKG4pZm9yKHZhciBpIGluIG4pci5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoaSxuW2ldKTtyLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLHIuX2F2YWlsYWJsZUltYWdlcz1yLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCksci5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic2V0SW1hZ2VzIixyLl9hdmFpbGFibGVJbWFnZXMpLHIuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9KSl9LHIucHJvdG90eXBlLl92YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc291cmNlQ2FjaGVzW2Uuc291cmNlXTtpZihyKXt2YXIgbj1lLnNvdXJjZUxheWVyO2lmKG4pe3ZhciBpPXIuZ2V0U291cmNlKCk7KCJnZW9qc29uIj09PWkudHlwZXx8aS52ZWN0b3JMYXllcklkcyYmLTE9PT1pLnZlY3RvckxheWVySWRzLmluZGV4T2YobikpJiZ0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSBsYXllciAiJytuKyciIGRvZXMgbm90IGV4aXN0IG9uIHNvdXJjZSAiJytpLmlkKyciIGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciAiJytlLmlkKyciJykpKX19fSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXJldHVybiExO2lmKE9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRTb3VyY2VzKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKWlmKCF0aGlzLnNvdXJjZUNhY2hlc1t0XS5sb2FkZWQoKSlyZXR1cm4hMTtyZXR1cm4hIXRoaXMuaW1hZ2VNYW5hZ2VyLmlzTG9hZGVkKCl9LHIucHJvdG90eXBlLl9zZXJpYWxpemVMYXllcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT10aGlzLl9sYXllcnNbbltyXV07ImN1c3RvbSIhPT1pLnR5cGUmJmUucHVzaChpLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbnM9ZnVuY3Rpb24oKXtpZih0aGlzLmxpZ2h0JiZ0aGlzLmxpZ2h0Lmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpaWYodGhpcy5zb3VyY2VDYWNoZXNbdF0uaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpaWYodGhpcy5fbGF5ZXJzW2VdLmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtyZXR1cm4hMX0sci5wcm90b3R5cGUuX2NoZWNrTG9hZGVkPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZCl0aHJvdyBuZXcgRXJyb3IoIlN0eWxlIGlzIG5vdCBkb25lIGxvYWRpbmciKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xvYWRlZCl7dmFyIHI9dGhpcy5fY2hhbmdlZDtpZih0aGlzLl9jaGFuZ2VkKXt2YXIgbj1PYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkTGF5ZXJzKSxpPU9iamVjdC5rZXlzKHRoaXMuX3JlbW92ZWRMYXllcnMpO2Zvcih2YXIgYSBpbihuLmxlbmd0aHx8aS5sZW5ndGgpJiZ0aGlzLl91cGRhdGVXb3JrZXJMYXllcnMobixpKSx0aGlzLl91cGRhdGVkU291cmNlcyl7dmFyIG89dGhpcy5fdXBkYXRlZFNvdXJjZXNbYV07InJlbG9hZCI9PT1vP3RoaXMuX3JlbG9hZFNvdXJjZShhKToiY2xlYXIiPT09byYmdGhpcy5fY2xlYXJTb3VyY2UoYSl9Zm9yKHZhciBzIGluIHRoaXMuX3VwZGF0ZVRpbGVzRm9yQ2hhbmdlZEltYWdlcygpLHRoaXMuX3VwZGF0ZWRQYWludFByb3BzKXRoaXMuX2xheWVyc1tzXS51cGRhdGVUcmFuc2l0aW9ucyhlKTt0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKGUpLHRoaXMuX3Jlc2V0VXBkYXRlcygpfWZvcih2YXIgbCBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tsXS51c2VkPSExO2Zvcih2YXIgYz0wLHU9dGhpcy5fb3JkZXI7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD10aGlzLl9sYXllcnNbdVtjXV07aC5yZWNhbGN1bGF0ZShlLHRoaXMuX2F2YWlsYWJsZUltYWdlcyksIWguaXNIaWRkZW4oZS56b29tKSYmaC5zb3VyY2UmJih0aGlzLnNvdXJjZUNhY2hlc1toLnNvdXJjZV0udXNlZD0hMCl9dGhpcy5saWdodC5yZWNhbGN1bGF0ZShlKSx0aGlzLno9ZS56b29tLHImJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9fSxyLnByb3RvdHlwZS5fdXBkYXRlVGlsZXNGb3JDaGFuZ2VkSW1hZ2VzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXModGhpcy5fY2hhbmdlZEltYWdlcyk7aWYodC5sZW5ndGgpe2Zvcih2YXIgZSBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tlXS5yZWxvYWRUaWxlc0ZvckRlcGVuZGVuY2llcyhbImljb25zIiwicGF0dGVybnMiXSx0KTt0aGlzLl9jaGFuZ2VkSW1hZ2VzPXt9fX0sci5wcm90b3R5cGUuX3VwZGF0ZVdvcmtlckxheWVycz1mdW5jdGlvbih0LGUpe3RoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoInVwZGF0ZUxheWVycyIse2xheWVyczp0aGlzLl9zZXJpYWxpemVMYXllcnModCkscmVtb3ZlZElkczplfSl9LHIucHJvdG90eXBlLl9yZXNldFVwZGF0ZXM9ZnVuY3Rpb24oKXt0aGlzLl9jaGFuZ2VkPSExLHRoaXMuX3VwZGF0ZWRMYXllcnM9e30sdGhpcy5fcmVtb3ZlZExheWVycz17fSx0aGlzLl91cGRhdGVkU291cmNlcz17fSx0aGlzLl91cGRhdGVkUGFpbnRQcm9wcz17fSx0aGlzLl9jaGFuZ2VkSW1hZ2VzPXt9fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksTmUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXJldHVybiExOyhlPXQuY2xvbmUkMShlKSkubGF5ZXJzPWp0KGUubGF5ZXJzKTt2YXIgbj1mdW5jdGlvbihlLHIpe2lmKCFlKXJldHVyblt7Y29tbWFuZDpVdC5zZXRTdHlsZSxhcmdzOltyXX1dO3ZhciBuPVtdO3RyeXtpZighdC5kZWVwRXF1YWwoZS52ZXJzaW9uLHIudmVyc2lvbikpcmV0dXJuW3tjb21tYW5kOlV0LnNldFN0eWxlLGFyZ3M6W3JdfV07dC5kZWVwRXF1YWwoZS5jZW50ZXIsci5jZW50ZXIpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0Q2VudGVyLGFyZ3M6W3IuY2VudGVyXX0pLHQuZGVlcEVxdWFsKGUuem9vbSxyLnpvb20pfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0Wm9vbSxhcmdzOltyLnpvb21dfSksdC5kZWVwRXF1YWwoZS5iZWFyaW5nLHIuYmVhcmluZyl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRCZWFyaW5nLGFyZ3M6W3IuYmVhcmluZ119KSx0LmRlZXBFcXVhbChlLnBpdGNoLHIucGl0Y2gpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0UGl0Y2gsYXJnczpbci5waXRjaF19KSx0LmRlZXBFcXVhbChlLnNwcml0ZSxyLnNwcml0ZSl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRTcHJpdGUsYXJnczpbci5zcHJpdGVdfSksdC5kZWVwRXF1YWwoZS5nbHlwaHMsci5nbHlwaHMpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0R2x5cGhzLGFyZ3M6W3IuZ2x5cGhzXX0pLHQuZGVlcEVxdWFsKGUudHJhbnNpdGlvbixyLnRyYW5zaXRpb24pfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0VHJhbnNpdGlvbixhcmdzOltyLnRyYW5zaXRpb25dfSksdC5kZWVwRXF1YWwoZS5saWdodCxyLmxpZ2h0KXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExpZ2h0LGFyZ3M6W3IubGlnaHRdfSk7dmFyIGk9e30sYT1bXTshZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE7Zm9yKGEgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkoYSkmJihyLmhhc093blByb3BlcnR5KGEpfHxxdChhLG4saSkpO2ZvcihhIGluIHIpci5oYXNPd25Qcm9wZXJ0eShhKSYmKGUuaGFzT3duUHJvcGVydHkoYSk/dC5kZWVwRXF1YWwoZVthXSxyW2FdKXx8KCJnZW9qc29uIj09PWVbYV0udHlwZSYmImdlb2pzb24iPT09clthXS50eXBlJiZHdChlLHIsYSk/bi5wdXNoKHtjb21tYW5kOlV0LnNldEdlb0pTT05Tb3VyY2VEYXRhLGFyZ3M6W2EsclthXS5kYXRhXX0pOkh0KGEscixuLGkpKTpWdChhLHIsbikpfShlLnNvdXJjZXMsci5zb3VyY2VzLGEsaSk7dmFyIG89W107ZS5sYXllcnMmJmUubGF5ZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lbdC5zb3VyY2VdP24ucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVMYXllcixhcmdzOlt0LmlkXX0pOm8ucHVzaCh0KX0pKSxuPW4uY29uY2F0KGEpLGZ1bmN0aW9uKGUscixuKXtyPXJ8fFtdO3ZhciBpLGEsbyxzLGwsYyx1LGg9KGU9ZXx8W10pLm1hcChXdCksZj1yLm1hcChXdCkscD1lLnJlZHVjZShadCx7fSksZD1yLnJlZHVjZShadCx7fSksZz1oLnNsaWNlKCksbT1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihpPTAsYT0wO2k8aC5sZW5ndGg7aSsrKWQuaGFzT3duUHJvcGVydHkobz1oW2ldKT9hKys6KG4ucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVMYXllcixhcmdzOltvXX0pLGcuc3BsaWNlKGcuaW5kZXhPZihvLGEpLDEpKTtmb3IoaT0wLGE9MDtpPGYubGVuZ3RoO2krKylnW2cubGVuZ3RoLTEtaV0hPT0obz1mW2YubGVuZ3RoLTEtaV0pJiYocC5oYXNPd25Qcm9wZXJ0eShvKT8obi5wdXNoKHtjb21tYW5kOlV0LnJlbW92ZUxheWVyLGFyZ3M6W29dfSksZy5zcGxpY2UoZy5sYXN0SW5kZXhPZihvLGcubGVuZ3RoLWEpLDEpKTphKyssbi5wdXNoKHtjb21tYW5kOlV0LmFkZExheWVyLGFyZ3M6W2Rbb10sYz1nW2cubGVuZ3RoLWldXX0pLGcuc3BsaWNlKGcubGVuZ3RoLWksMCxvKSxtW29dPSEwKTtmb3IoaT0wO2k8Zi5sZW5ndGg7aSsrKWlmKHM9cFtvPWZbaV1dLGw9ZFtvXSwhbVtvXSYmIXQuZGVlcEVxdWFsKHMsbCkpaWYodC5kZWVwRXF1YWwocy5zb3VyY2UsbC5zb3VyY2UpJiZ0LmRlZXBFcXVhbChzWyJzb3VyY2UtbGF5ZXIiXSxsWyJzb3VyY2UtbGF5ZXIiXSkmJnQuZGVlcEVxdWFsKHMudHlwZSxsLnR5cGUpKXtmb3IodSBpbiBZdChzLmxheW91dCxsLmxheW91dCxuLG8sbnVsbCxVdC5zZXRMYXlvdXRQcm9wZXJ0eSksWXQocy5wYWludCxsLnBhaW50LG4sbyxudWxsLFV0LnNldFBhaW50UHJvcGVydHkpLHQuZGVlcEVxdWFsKHMuZmlsdGVyLGwuZmlsdGVyKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldEZpbHRlcixhcmdzOltvLGwuZmlsdGVyXX0pLHQuZGVlcEVxdWFsKHMubWluem9vbSxsLm1pbnpvb20pJiZ0LmRlZXBFcXVhbChzLm1heHpvb20sbC5tYXh6b29tKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyWm9vbVJhbmdlLGFyZ3M6W28sbC5taW56b29tLGwubWF4em9vbV19KSxzKXMuaGFzT3duUHJvcGVydHkodSkmJiJsYXlvdXQiIT09dSYmInBhaW50IiE9PXUmJiJmaWx0ZXIiIT09dSYmIm1ldGFkYXRhIiE9PXUmJiJtaW56b29tIiE9PXUmJiJtYXh6b29tIiE9PXUmJigwPT09dS5pbmRleE9mKCJwYWludC4iKT9ZdChzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksVXQuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWVwRXF1YWwoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpO2Zvcih1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmIXMuaGFzT3duUHJvcGVydHkodSkmJiJsYXlvdXQiIT09dSYmInBhaW50IiE9PXUmJiJmaWx0ZXIiIT09dSYmIm1ldGFkYXRhIiE9PXUmJiJtaW56b29tIiE9PXUmJiJtYXh6b29tIiE9PXUmJigwPT09dS5pbmRleE9mKCJwYWludC4iKT9ZdChzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksVXQuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWVwRXF1YWwoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpfWVsc2Ugbi5wdXNoKHtjb21tYW5kOlV0LnJlbW92ZUxheWVyLGFyZ3M6W29dfSksYz1nW2cubGFzdEluZGV4T2YobykrMV0sbi5wdXNoKHtjb21tYW5kOlV0LmFkZExheWVyLGFyZ3M6W2wsY119KX0obyxyLmxheWVycyxuKX1jYXRjaCh0KXtjb25zb2xlLndhcm4oIlVuYWJsZSB0byBjb21wdXRlIHN0eWxlIGRpZmY6Iix0KSxuPVt7Y29tbWFuZDpVdC5zZXRTdHlsZSxhcmdzOltyXX1dfXJldHVybiBufSh0aGlzLnNlcmlhbGl6ZSgpLGUpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gVWUpfSkpO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4hMTt2YXIgaT1uLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gamUpfSkpO2lmKGkubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCJVbmltcGxlbWVudGVkOiAiK2kubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21tYW5kfSkpLmpvaW4oIiwgIikrIi4iKTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbih0KXsic2V0VHJhbnNpdGlvbiIhPT10LmNvbW1hbmQmJnJbdC5jb21tYW5kXS5hcHBseShyLHQuYXJncyl9KSksdGhpcy5zdHlsZXNoZWV0PWUsITB9LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKGUscil7aWYodGhpcy5nZXRJbWFnZShlKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJBbiBpbWFnZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLmFkZEltYWdlKGUsciksdGhpcy5fYXZhaWxhYmxlSW1hZ2VzPXRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKSx0aGlzLl9jaGFuZ2VkSW1hZ2VzW2VdPSEwLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX0sci5wcm90b3R5cGUudXBkYXRlSW1hZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLmltYWdlTWFuYWdlci51cGRhdGVJbWFnZSh0LGUpfSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UodCl9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIk5vIGltYWdlIHdpdGggdGhpcyBuYW1lIGV4aXN0cy4iKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGUpLHRoaXMuX2F2YWlsYWJsZUltYWdlcz10aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCksdGhpcy5fY2hhbmdlZEltYWdlc1tlXT0hMCx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9LHIucHJvdG90eXBlLmxpc3RJbWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tMb2FkZWQoKSx0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCl9LHIucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcztpZih2b2lkIDA9PT1uJiYobj17fSksdGhpcy5fY2hlY2tMb2FkZWQoKSx2b2lkIDAhPT10aGlzLnNvdXJjZUNhY2hlc1tlXSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIGFscmVhZHkgYSBzb3VyY2Ugd2l0aCB0aGlzIElEIik7aWYoIXIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlIHByb3BlcnR5IG11c3QgYmUgZGVmaW5lZCwgYnV0IHRoZSBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB3ZXJlIGdpdmVuOiAiK09iamVjdC5rZXlzKHIpLmpvaW4oIiwgIikrIi4iKTtpZighKFsidmVjdG9yIiwicmFzdGVyIiwiZ2VvanNvbiIsInZpZGVvIiwiaW1hZ2UiXS5pbmRleE9mKHIudHlwZSk+PTAmJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5zb3VyY2UsInNvdXJjZXMuIitlLHIsbnVsbCxuKSkpe3RoaXMubWFwJiZ0aGlzLm1hcC5fY29sbGVjdFJlc291cmNlVGltaW5nJiYoci5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9ITApO3ZhciBhPXRoaXMuc291cmNlQ2FjaGVzW2VdPW5ldyBMdChlLHIsdGhpcy5kaXNwYXRjaGVyKTthLnN0eWxlPXRoaXMsYS5zZXRFdmVudGVkUGFyZW50KHRoaXMsKGZ1bmN0aW9uKCl7cmV0dXJue2lzU291cmNlTG9hZGVkOmkubG9hZGVkKCksc291cmNlOmEuc2VyaWFsaXplKCksc291cmNlSWQ6ZX19KSksYS5vbkFkZCh0aGlzLm1hcCksdGhpcy5fY2hhbmdlZD0hMH19LHIucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbihlKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMD09PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRCIpO2Zvcih2YXIgciBpbiB0aGlzLl9sYXllcnMpaWYodGhpcy5fbGF5ZXJzW3JdLnNvdXJjZT09PWUpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignU291cmNlICInK2UrJyIgY2Fubm90IGJlIHJlbW92ZWQgd2hpbGUgbGF5ZXIgIicrcisnIiBpcyB1c2luZyBpdC4nKSkpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2VdO2RlbGV0ZSB0aGlzLnNvdXJjZUNhY2hlc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFNvdXJjZXNbZV0sbi5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7c291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIixkYXRhVHlwZToic291cmNlIixzb3VyY2VJZDplfSkpLG4uc2V0RXZlbnRlZFBhcmVudChudWxsKSxuLmNsZWFyVGlsZXMoKSxuLm9uUmVtb3ZlJiZuLm9uUmVtb3ZlKHRoaXMubWFwKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5zZXRHZW9KU09OU291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0uZ2V0U291cmNlKCkuc2V0RGF0YShlKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlQ2FjaGVzW3RdJiZ0aGlzLnNvdXJjZUNhY2hlc1t0XS5nZXRTb3VyY2UoKX0sci5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPWUuaWQ7aWYodGhpcy5nZXRMYXllcihpKSl0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgIicraSsnIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG1hcCcpKSk7ZWxzZXt2YXIgYTtpZigiY3VzdG9tIj09PWUudHlwZSl7aWYoTmUodGhpcyx0LnZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcihlKSkpcmV0dXJuO2E9dC5jcmVhdGVTdHlsZUxheWVyKGUpfWVsc2V7aWYoIm9iamVjdCI9PXR5cGVvZiBlLnNvdXJjZSYmKHRoaXMuYWRkU291cmNlKGksZS5zb3VyY2UpLGU9dC5jbG9uZSQxKGUpLGU9dC5leHRlbmQoZSx7c291cmNlOml9KSksdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmxheWVyLCJsYXllcnMuIitpLGUse2FycmF5SW5kZXg6LTF9LG4pKXJldHVybjthPXQuY3JlYXRlU3R5bGVMYXllcihlKSx0aGlzLl92YWxpZGF0ZUxheWVyKGEpLGEuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtsYXllcjp7aWQ6aX19KSx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzW2EuaWRdPWEuc2VyaWFsaXplKCl9dmFyIG89cj90aGlzLl9vcmRlci5pbmRleE9mKHIpOnRoaXMuX29yZGVyLmxlbmd0aDtpZihyJiYtMT09PW8pdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkICInK3IrJyIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuJykpKTtlbHNle2lmKHRoaXMuX29yZGVyLnNwbGljZShvLDAsaSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITAsdGhpcy5fbGF5ZXJzW2ldPWEsdGhpcy5fcmVtb3ZlZExheWVyc1tpXSYmYS5zb3VyY2UmJiJjdXN0b20iIT09YS50eXBlKXt2YXIgcz10aGlzLl9yZW1vdmVkTGF5ZXJzW2ldO2RlbGV0ZSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2ldLHMudHlwZSE9PWEudHlwZT90aGlzLl91cGRhdGVkU291cmNlc1thLnNvdXJjZV09ImNsZWFyIjoodGhpcy5fdXBkYXRlZFNvdXJjZXNbYS5zb3VyY2VdPSJyZWxvYWQiLHRoaXMuc291cmNlQ2FjaGVzW2Euc291cmNlXS5wYXVzZSgpKX10aGlzLl91cGRhdGVMYXllcihhKSxhLm9uQWRkJiZhLm9uQWRkKHRoaXMubWFwKX19fSxyLnByb3RvdHlwZS5tb3ZlTGF5ZXI9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5fbGF5ZXJzW2VdKXtpZihlIT09cil7dmFyIG49dGhpcy5fb3JkZXIuaW5kZXhPZihlKTt0aGlzLl9vcmRlci5zcGxpY2UobiwxKTt2YXIgaT1yP3RoaXMuX29yZGVyLmluZGV4T2Yocik6dGhpcy5fb3JkZXIubGVuZ3RoO3ImJi0xPT09aT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgIicrcisnIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC4nKSkpOih0aGlzLl9vcmRlci5zcGxpY2UoaSwwLGUpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwKX19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIG1vdmVkLiIpKSl9LHIucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIHI9dGhpcy5fbGF5ZXJzW2VdO2lmKHIpe3Iuc2V0RXZlbnRlZFBhcmVudChudWxsKTt2YXIgbj10aGlzLl9vcmRlci5pbmRleE9mKGUpO3RoaXMuX29yZGVyLnNwbGljZShuLDEpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5fcmVtb3ZlZExheWVyc1tlXT1yLGRlbGV0ZSB0aGlzLl9sYXllcnNbZV0sZGVsZXRlIHRoaXMuX3NlcmlhbGl6ZWRMYXllcnNbZV0sZGVsZXRlIHRoaXMuX3VwZGF0ZWRMYXllcnNbZV0sZGVsZXRlIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2VdLHIub25SZW1vdmUmJnIub25SZW1vdmUodGhpcy5tYXApfWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSByZW1vdmVkLiIpKSl9LHIucHJvdG90eXBlLmdldExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXllcnNbdF19LHIucHJvdG90eXBlLmhhc0xheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluIHRoaXMuX2xheWVyc30sci5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcihlKTtpP2kubWluem9vbT09PXImJmkubWF4em9vbT09PW58fChudWxsIT1yJiYoaS5taW56b29tPXIpLG51bGwhPW4mJihpLm1heHpvb209biksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC4iKSkpfSxyLnByb3RvdHlwZS5zZXRGaWx0ZXI9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aWYoaSl7aWYoIXQuZGVlcEVxdWFsKGkuZmlsdGVyLHIpKXJldHVybiBudWxsPT1yPyhpLmZpbHRlcj12b2lkIDAsdm9pZCB0aGlzLl91cGRhdGVMYXllcihpKSk6dm9pZCh0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJsYXllcnMuIitpLmlkKyIuZmlsdGVyIixyLG51bGwsbil8fChpLmZpbHRlcj10LmNsb25lJDEociksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgZmlsdGVyZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0RmlsdGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0LmNsb25lJDEodGhpcy5nZXRMYXllcihlKS5maWx0ZXIpfSxyLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbixpKXt2b2lkIDA9PT1pJiYoaT17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgYT10aGlzLmdldExheWVyKGUpO2E/dC5kZWVwRXF1YWwoYS5nZXRMYXlvdXRQcm9wZXJ0eShyKSxuKXx8KGEuc2V0TGF5b3V0UHJvcGVydHkocixuLGkpLHRoaXMuX3VwZGF0ZUxheWVyKGEpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuZ2V0TGF5ZXIoZSk7aWYobilyZXR1cm4gbi5nZXRMYXlvdXRQcm9wZXJ0eShyKTt0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKGUscixuLGkpe3ZvaWQgMD09PWkmJihpPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBhPXRoaXMuZ2V0TGF5ZXIoZSk7YT90LmRlZXBFcXVhbChhLmdldFBhaW50UHJvcGVydHkociksbil8fChhLnNldFBhaW50UHJvcGVydHkocixuLGkpJiZ0aGlzLl91cGRhdGVMYXllcihhKSx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2VdPSEwKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0TGF5ZXIodCkuZ2V0UGFpbnRQcm9wZXJ0eShlKX0sci5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKGUscil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj1lLnNvdXJjZSxpPWUuc291cmNlTGF5ZXIsYT10aGlzLnNvdXJjZUNhY2hlc1tuXTtpZih2b2lkIDAhPT1hKXt2YXIgbz1hLmdldFNvdXJjZSgpLnR5cGU7Imdlb2pzb24iPT09byYmaT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkdlb0pTT04gc291cmNlcyBjYW5ub3QgaGF2ZSBhIHNvdXJjZUxheWVyIHBhcmFtZXRlci4iKSkpOiJ2ZWN0b3IiIT09b3x8aT8odm9pZCAwPT09ZS5pZCYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgZmVhdHVyZSBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZC4iKSkpLGEuc2V0RmVhdHVyZVN0YXRlKGksZS5pZCxyKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuIikpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZSAnIituKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5yZW1vdmVGZWF0dXJlU3RhdGU9ZnVuY3Rpb24oZSxyKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBuPWUuc291cmNlLGk9dGhpcy5zb3VyY2VDYWNoZXNbbl07aWYodm9pZCAwIT09aSl7dmFyIGE9aS5nZXRTb3VyY2UoKS50eXBlLG89InZlY3RvciI9PT1hP2Uuc291cmNlTGF5ZXI6dm9pZCAwOyJ2ZWN0b3IiIT09YXx8bz9yJiYic3RyaW5nIiE9dHlwZW9mIGUuaWQmJiJudW1iZXIiIT10eXBlb2YgZS5pZD90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkEgZmVhdHVyZSBpZCBpcyByZXF1cmVkIHRvIHJlbW92ZSBpdHMgc3BlY2lmaWMgc3RhdGUgcHJvcGVydHkuIikpKTppLnJlbW92ZUZlYXR1cmVTdGF0ZShvLGUuaWQscik6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuIikpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZSAnIituKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5nZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj1lLnNvdXJjZSxuPWUuc291cmNlTGF5ZXIsaT10aGlzLnNvdXJjZUNhY2hlc1tyXTtpZih2b2lkIDAhPT1pKXtpZigidmVjdG9yIiE9PWkuZ2V0U291cmNlKCkudHlwZXx8bilyZXR1cm4gdm9pZCAwPT09ZS5pZCYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgZmVhdHVyZSBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZC4iKSkpLGkuZ2V0RmVhdHVyZVN0YXRlKG4sZS5pZCk7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuIikpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZSAnIityKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHtkdXJhdGlvbjozMDAsZGVsYXk6MH0sdGhpcy5zdHlsZXNoZWV0JiZ0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbil9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmZpbHRlck9iamVjdCh7dmVyc2lvbjp0aGlzLnN0eWxlc2hlZXQudmVyc2lvbixuYW1lOnRoaXMuc3R5bGVzaGVldC5uYW1lLG1ldGFkYXRhOnRoaXMuc3R5bGVzaGVldC5tZXRhZGF0YSxsaWdodDp0aGlzLnN0eWxlc2hlZXQubGlnaHQsY2VudGVyOnRoaXMuc3R5bGVzaGVldC5jZW50ZXIsem9vbTp0aGlzLnN0eWxlc2hlZXQuem9vbSxiZWFyaW5nOnRoaXMuc3R5bGVzaGVldC5iZWFyaW5nLHBpdGNoOnRoaXMuc3R5bGVzaGVldC5waXRjaCxzcHJpdGU6dGhpcy5zdHlsZXNoZWV0LnNwcml0ZSxnbHlwaHM6dGhpcy5zdHlsZXNoZWV0LmdseXBocyx0cmFuc2l0aW9uOnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uLHNvdXJjZXM6dC5tYXBPYmplY3QodGhpcy5zb3VyY2VDYWNoZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpLGxheWVyczp0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpfSwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXR9KSl9LHIucHJvdG90eXBlLl91cGRhdGVMYXllcj1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGVkTGF5ZXJzW3QuaWRdPSEwLHQuc291cmNlJiYhdGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdJiYicmFzdGVyIiE9PXRoaXMuc291cmNlQ2FjaGVzW3Quc291cmNlXS5nZXRTb3VyY2UoKS50eXBlJiYodGhpcy5fdXBkYXRlZFNvdXJjZXNbdC5zb3VyY2VdPSJyZWxvYWQiLHRoaXMuc291cmNlQ2FjaGVzW3Quc291cmNlXS5wYXVzZSgpKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5fZmxhdHRlbkFuZFNvcnRSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9ZnVuY3Rpb24odCl7cmV0dXJuImZpbGwtZXh0cnVzaW9uIj09PWUuX2xheWVyc1t0XS50eXBlfSxuPXt9LGk9W10sYT10aGlzLl9vcmRlci5sZW5ndGgtMTthPj0wO2EtLSl7dmFyIG89dGhpcy5fb3JkZXJbYV07aWYocihvKSl7bltvXT1hO2Zvcih2YXIgcz0wLGw9dDtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc11bb107aWYoYylmb3IodmFyIHU9MCxoPWM7dTxoLmxlbmd0aDt1Kz0xKWkucHVzaChoW3VdKX19fWkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5pbnRlcnNlY3Rpb25aLXQuaW50ZXJzZWN0aW9uWn0pKTtmb3IodmFyIGY9W10scD10aGlzLl9vcmRlci5sZW5ndGgtMTtwPj0wO3AtLSl7dmFyIGQ9dGhpcy5fb3JkZXJbcF07aWYocihkKSlmb3IodmFyIGc9aS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIG09aVtnXS5mZWF0dXJlO2lmKG5bbS5sYXllci5pZF08cClicmVhaztmLnB1c2gobSksaS5wb3AoKX1lbHNlIGZvcih2YXIgdj0wLHk9dDt2PHkubGVuZ3RoO3YrPTEpe3ZhciB4PXlbdl1bZF07aWYoeClmb3IodmFyIGI9MCxfPXg7YjxfLmxlbmd0aDtiKz0xKWYucHVzaChfW2JdLmZlYXR1cmUpfX1yZXR1cm4gZn0sci5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKGUscixuKXtyJiZyLmZpbHRlciYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlciwicXVlcnlSZW5kZXJlZEZlYXR1cmVzLmZpbHRlciIsci5maWx0ZXIsbnVsbCxyKTt2YXIgaT17fTtpZihyJiZyLmxheWVycyl7aWYoIUFycmF5LmlzQXJyYXkoci5sYXllcnMpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoInBhcmFtZXRlcnMubGF5ZXJzIG11c3QgYmUgYW4gQXJyYXkuIikpKSxbXTtmb3IodmFyIGE9MCxvPXIubGF5ZXJzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXRoaXMuX2xheWVyc1tzXTtpZighbClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrcysiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGZvciBmZWF0dXJlcy4iKSkpLFtdO2lbbC5zb3VyY2VdPSEwfX12YXIgYz1bXTtmb3IodmFyIHUgaW4gci5hdmFpbGFibGVJbWFnZXM9dGhpcy5fYXZhaWxhYmxlSW1hZ2VzLHRoaXMuc291cmNlQ2FjaGVzKXIubGF5ZXJzJiYhaVt1XXx8Yy5wdXNoKEYodGhpcy5zb3VyY2VDYWNoZXNbdV0sdGhpcy5fbGF5ZXJzLHRoaXMuX3NlcmlhbGl6ZWRMYXllcnMsZSxyLG4pKTtyZXR1cm4gdGhpcy5wbGFjZW1lbnQmJmMucHVzaChmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9e30sbD1hLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKG4pLGM9W10sdT0wLGg9T2JqZWN0LmtleXMobCkubWFwKE51bWJlcik7dTxoLmxlbmd0aDt1Kz0xKWMucHVzaChvW2hbdV1dKTtjLnNvcnQoQik7Zm9yKHZhciBmPWZ1bmN0aW9uKCl7dmFyIHI9ZFtwXSxuPXIuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKGxbci5idWNrZXRJbnN0YW5jZUlkXSxlLHIuYnVja2V0SW5kZXgsci5zb3VyY2VMYXllckluZGV4LGkuZmlsdGVyLGkubGF5ZXJzLGkuYXZhaWxhYmxlSW1hZ2VzLHQpO2Zvcih2YXIgYSBpbiBuKXt2YXIgbz1zW2FdPXNbYV18fFtdLGM9blthXTtjLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ci5mZWF0dXJlU29ydE9yZGVyO2lmKG4pe3ZhciBpPW4uaW5kZXhPZih0LmZlYXR1cmVJbmRleCk7cmV0dXJuIG4uaW5kZXhPZihlLmZlYXR1cmVJbmRleCktaX1yZXR1cm4gZS5mZWF0dXJlSW5kZXgtdC5mZWF0dXJlSW5kZXh9KSk7Zm9yKHZhciB1PTAsaD1jO3U8aC5sZW5ndGg7dSs9MSlvLnB1c2goaFt1XSl9fSxwPTAsZD1jO3A8ZC5sZW5ndGg7cCs9MSlmKCk7dmFyIGc9ZnVuY3Rpb24oZSl7c1tlXS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1uLmZlYXR1cmUsYT1yW3RbZV0uc291cmNlXS5nZXRGZWF0dXJlU3RhdGUoaS5sYXllclsic291cmNlLWxheWVyIl0saS5pZCk7aS5zb3VyY2U9aS5sYXllci5zb3VyY2UsaS5sYXllclsic291cmNlLWxheWVyIl0mJihpLnNvdXJjZUxheWVyPWkubGF5ZXJbInNvdXJjZS1sYXllciJdKSxpLnN0YXRlPWF9KSl9O2Zvcih2YXIgbSBpbiBzKWcobSk7cmV0dXJuIHN9KHRoaXMuX2xheWVycyx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzLHRoaXMuc291cmNlQ2FjaGVzLGUscix0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCx0aGlzLnBsYWNlbWVudC5yZXRhaW5lZFF1ZXJ5RGF0YSkpLHRoaXMuX2ZsYXR0ZW5BbmRTb3J0UmVuZGVyZWRGZWF0dXJlcyhjKX0sci5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbihlLHIpe3ImJnIuZmlsdGVyJiZ0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJxdWVyeVNvdXJjZUZlYXR1cmVzLmZpbHRlciIsci5maWx0ZXIsbnVsbCxyKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlXTtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFJlbmRlcmFibGVJZHMoKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldFRpbGVCeUlEKGUpfSkpLG49W10saT17fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz1vLnRpbGVJRC5jYW5vbmljYWwua2V5O2lbc118fChpW3NdPSEwLG8ucXVlcnlTb3VyY2VGZWF0dXJlcyhuLGUpKX1yZXR1cm4gbn0obixyKTpbXX0sci5wcm90b3R5cGUuYWRkU291cmNlVHlwZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuZ2V0U291cmNlVHlwZSh0KT9uKG5ldyBFcnJvcignQSBzb3VyY2UgdHlwZSBjYWxsZWQgIicrdCsnIiBhbHJlYWR5IGV4aXN0cy4nKSk6KHIuc2V0U291cmNlVHlwZSh0LGUpLGUud29ya2VyU291cmNlVVJMP3ZvaWQgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgibG9hZFdvcmtlclNvdXJjZSIse25hbWU6dCx1cmw6ZS53b3JrZXJTb3VyY2VVUkx9LG4pOm4obnVsbCxudWxsKSl9LHIucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGlnaHQuZ2V0TGlnaHQoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSxyKXt2b2lkIDA9PT1yJiYocj17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj10aGlzLmxpZ2h0LmdldExpZ2h0KCksaT0hMTtmb3IodmFyIGEgaW4gZSlpZighdC5kZWVwRXF1YWwoZVthXSxuW2FdKSl7aT0hMDticmVha31pZihpKXt2YXIgbz17bm93OnQuYnJvd3Nlci5ub3coKSx0cmFuc2l0aW9uOnQuZXh0ZW5kKHtkdXJhdGlvbjozMDAsZGVsYXk6MH0sdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24pfTt0aGlzLmxpZ2h0LnNldExpZ2h0KGUsciksdGhpcy5saWdodC51cGRhdGVUcmFuc2l0aW9ucyhvKX19LHIucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiB2b2lkIDA9PT1hJiYoYT17fSksKCFhfHwhMSE9PWEudmFsaWRhdGUpJiZOZSh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe2tleTpyLHN0eWxlOnRoaXMuc2VyaWFsaXplKCksdmFsdWU6bixzdHlsZVNwZWM6dC5zdHlsZVNwZWN9LGkpKSl9LHIucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5fcmVxdWVzdCYmKHRoaXMuX3JlcXVlc3QuY2FuY2VsKCksdGhpcy5fcmVxdWVzdD1udWxsKSx0aGlzLl9zcHJpdGVSZXF1ZXN0JiYodGhpcy5fc3ByaXRlUmVxdWVzdC5jYW5jZWwoKSx0aGlzLl9zcHJpdGVSZXF1ZXN0PW51bGwpLHQuZXZlbnRlZC5vZmYoInBsdWdpblN0YXRlQ2hhbmdlIix0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2spLHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbZV0uc2V0RXZlbnRlZFBhcmVudChudWxsKTtmb3IodmFyIHIgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbcl0uY2xlYXJUaWxlcygpLHRoaXMuc291cmNlQ2FjaGVzW3JdLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7dGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksdGhpcy5kaXNwYXRjaGVyLnJlbW92ZSgpfSxyLnByb3RvdHlwZS5fY2xlYXJTb3VyY2U9ZnVuY3Rpb24odCl7dGhpcy5zb3VyY2VDYWNoZXNbdF0uY2xlYXJUaWxlcygpfSxyLnByb3RvdHlwZS5fcmVsb2FkU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuc291cmNlQ2FjaGVzW3RdLnJlc3VtZSgpLHRoaXMuc291cmNlQ2FjaGVzW3RdLnJlbG9hZCgpfSxyLnByb3RvdHlwZS5fdXBkYXRlU291cmNlcz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbZV0udXBkYXRlKHQpfSxyLnByb3RvdHlwZS5fZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLl9yZWxvYWRTb3VyY2UodCl9LHIucHJvdG90eXBlLl91cGRhdGVQbGFjZW1lbnQ9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT0hMSk7Zm9yKHZhciBvPSExLHM9ITEsbD17fSxjPTAsdT10aGlzLl9vcmRlcjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBoPXRoaXMuX2xheWVyc1t1W2NdXTtpZigic3ltYm9sIj09PWgudHlwZSl7aWYoIWxbaC5zb3VyY2VdKXt2YXIgZj10aGlzLnNvdXJjZUNhY2hlc1toLnNvdXJjZV07bFtoLnNvdXJjZV09Zi5nZXRSZW5kZXJhYmxlSWRzKCEwKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBmLmdldFRpbGVCeUlEKHQpfSkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudGlsZUlELm92ZXJzY2FsZWRaLXQudGlsZUlELm92ZXJzY2FsZWRafHwodC50aWxlSUQuaXNMZXNzVGhhbihlLnRpbGVJRCk/LTE6MSl9KSl9dmFyIHA9dGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5hZGRMYXllcihoLGxbaC5zb3VyY2VdLGUuY2VudGVyLmxuZyk7bz1vfHxwfX1pZih0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4LnBydW5lVW51c2VkTGF5ZXJzKHRoaXMuX29yZGVyKSwoKGE9YXx8dGhpcy5fbGF5ZXJPcmRlckNoYW5nZWR8fDA9PT1uKXx8IXRoaXMucGF1c2VhYmxlUGxhY2VtZW50fHx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSYmIXRoaXMucGxhY2VtZW50LnN0aWxsUmVjZW50KHQuYnJvd3Nlci5ub3coKSxlLnpvb20pKSYmKHRoaXMucGF1c2VhYmxlUGxhY2VtZW50PW5ldyB6ZShlLHRoaXMuX29yZGVyLGEscixuLGksdGhpcy5wbGFjZW1lbnQpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSExKSx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKT90aGlzLnBsYWNlbWVudC5zZXRTdGFsZSgpOih0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb250aW51ZVBsYWNlbWVudCh0aGlzLl9vcmRlcix0aGlzLl9sYXllcnMsbCksdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkmJih0aGlzLnBsYWNlbWVudD10aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb21taXQodC5icm93c2VyLm5vdygpKSxzPSEwKSxvJiZ0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5wbGFjZW1lbnQuc2V0U3RhbGUoKSksc3x8bylmb3IodmFyIGQ9MCxnPXRoaXMuX29yZGVyO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIG09dGhpcy5fbGF5ZXJzW2dbZF1dOyJzeW1ib2wiPT09bS50eXBlJiZ0aGlzLnBsYWNlbWVudC51cGRhdGVMYXllck9wYWNpdGllcyhtLGxbbS5zb3VyY2VdKX1yZXR1cm4hdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCl8fHRoaXMucGxhY2VtZW50Lmhhc1RyYW5zaXRpb25zKHQuYnJvd3Nlci5ub3coKSl9LHIucHJvdG90eXBlLl9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW3RdLnJlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmltYWdlTWFuYWdlci5nZXRJbWFnZXMoZS5pY29ucyxyKSx0aGlzLl91cGRhdGVUaWxlc0ZvckNoYW5nZWRJbWFnZXMoKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlLnNvdXJjZV07biYmbi5zZXREZXBlbmRlbmNpZXMoZS50aWxlSUQua2V5LGUudHlwZSxlLmljb25zKX0sci5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdseXBoTWFuYWdlci5nZXRHbHlwaHMoZS5zdGFja3Mscil9LHIucHJvdG90eXBlLmdldFJlc291cmNlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5tYWtlUmVxdWVzdChyLG4pfSxyfSh0LkV2ZW50ZWQpO3FlLmdldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIERbdF19LHFlLnNldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlKXtEW3RdPWV9LHFlLnJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2U9dC5yZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlO3ZhciBIZT10LmNyZWF0ZUxheW91dChbe25hbWU6ImFfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfV0pLEdlPXZyKCIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNpZiAhZGVmaW5lZChsb3dwKVxuI2RlZmluZSBsb3dwXG4jZW5kaWZcbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxuI2RlZmluZSBtZWRpdW1wXG4jZW5kaWZcbiNpZiAhZGVmaW5lZChoaWdocClcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuI2VuZGlmIiwiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2lmICFkZWZpbmVkKGxvd3ApXG4jZGVmaW5lIGxvd3BcbiNlbmRpZlxuI2lmICFkZWZpbmVkKG1lZGl1bXApXG4jZGVmaW5lIG1lZGl1bXBcbiNlbmRpZlxuI2lmICFkZWZpbmVkKGhpZ2hwKVxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG4jZW5kaWZcbnZlYzIgdW5wYWNrX2Zsb2F0KGNvbnN0IGZsb2F0IHBhY2tlZFZhbHVlKSB7aW50IHBhY2tlZEludFZhbHVlPWludChwYWNrZWRWYWx1ZSk7aW50IHYwPXBhY2tlZEludFZhbHVlLzI1NjtyZXR1cm4gdmVjMih2MCxwYWNrZWRJbnRWYWx1ZS12MCoyNTYpO312ZWMyIHVucGFja19vcGFjaXR5KGNvbnN0IGZsb2F0IHBhY2tlZE9wYWNpdHkpIHtpbnQgaW50T3BhY2l0eT1pbnQocGFja2VkT3BhY2l0eSkvMjtyZXR1cm4gdmVjMihmbG9hdChpbnRPcGFjaXR5KS8xMjcuMCxtb2QocGFja2VkT3BhY2l0eSwyLjApKTt9dmVjNCBkZWNvZGVfY29sb3IoY29uc3QgdmVjMiBlbmNvZGVkQ29sb3IpIHtyZXR1cm4gdmVjNCh1bnBhY2tfZmxvYXQoZW5jb2RlZENvbG9yWzBdKS8yNTUuMCx1bnBhY2tfZmxvYXQoZW5jb2RlZENvbG9yWzFdKS8yNTUuMFxuKTt9ZmxvYXQgdW5wYWNrX21peF92ZWMyKGNvbnN0IHZlYzIgcGFja2VkVmFsdWUsY29uc3QgZmxvYXQgdCkge3JldHVybiBtaXgocGFja2VkVmFsdWVbMF0scGFja2VkVmFsdWVbMV0sdCk7fXZlYzQgdW5wYWNrX21peF9jb2xvcihjb25zdCB2ZWM0IHBhY2tlZENvbG9ycyxjb25zdCBmbG9hdCB0KSB7dmVjNCBtaW5Db2xvcj1kZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMF0scGFja2VkQ29sb3JzWzFdKSk7dmVjNCBtYXhDb2xvcj1kZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMl0scGFja2VkQ29sb3JzWzNdKSk7cmV0dXJuIG1peChtaW5Db2xvcixtYXhDb2xvcix0KTt9dmVjMiBnZXRfcGF0dGVybl9wb3MoY29uc3QgdmVjMiBwaXhlbF9jb29yZF91cHBlcixjb25zdCB2ZWMyIHBpeGVsX2Nvb3JkX2xvd2VyLGNvbnN0IHZlYzIgcGF0dGVybl9zaXplLGNvbnN0IGZsb2F0IHRpbGVfdW5pdHNfdG9fcGl4ZWxzLGNvbnN0IHZlYzIgcG9zKSB7dmVjMiBvZmZzZXQ9bW9kKG1vZChtb2QocGl4ZWxfY29vcmRfdXBwZXIscGF0dGVybl9zaXplKSoyNTYuMCxwYXR0ZXJuX3NpemUpKjI1Ni4wK3BpeGVsX2Nvb3JkX2xvd2VyLHBhdHRlcm5fc2l6ZSk7cmV0dXJuICh0aWxlX3VuaXRzX3RvX3BpeGVscypwb3Mrb2Zmc2V0KS9wYXR0ZXJuX3NpemU7fSIpLFllPXZyKCJ1bmlmb3JtIHZlYzQgdV9jb2xvcjt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt2b2lkIG1haW4oKSB7Z2xfRnJhZ0NvbG9yPXVfY29sb3IqdV9vcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO30iKSxXZT12cigidW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9hO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9iO3VuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBmbG9hdCB1X21peDt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZvaWQgbWFpbigpIHt2ZWMyIGltYWdlY29vcmQ9bW9kKHZfcG9zX2EsMS4wKTt2ZWMyIHBvcz1taXgodV9wYXR0ZXJuX3RsX2EvdV90ZXhzaXplLHVfcGF0dGVybl9icl9hL3VfdGV4c2l6ZSxpbWFnZWNvb3JkKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZSxwb3MpO3ZlYzIgaW1hZ2Vjb29yZF9iPW1vZCh2X3Bvc19iLDEuMCk7dmVjMiBwb3MyPW1peCh1X3BhdHRlcm5fdGxfYi91X3RleHNpemUsdV9wYXR0ZXJuX2JyX2IvdV90ZXhzaXplLGltYWdlY29vcmRfYik7dmVjNCBjb2xvcjI9dGV4dHVyZTJEKHVfaW1hZ2UscG9zMik7Z2xfRnJhZ0NvbG9yPW1peChjb2xvcjEsY29sb3IyLHVfbWl4KSp1X29wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO3VuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO3VuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO3VuaWZvcm0gZmxvYXQgdV90aWxlX3VuaXRzX3RvX3BpeGVsczthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zX2E9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix1X3NjYWxlX2EqdV9wYXR0ZXJuX3NpemVfYSx1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLGFfcG9zKTt2X3Bvc19iPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdV9zY2FsZV9iKnVfcGF0dGVybl9zaXplX2IsdV90aWxlX3VuaXRzX3RvX3BpeGVscyxhX3Bvcyk7fSIpLFplPXZyKCJ2YXJ5aW5nIHZlYzMgdl9kYXRhO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcbnZlYzIgZXh0cnVkZT12X2RhdGEueHk7ZmxvYXQgZXh0cnVkZV9sZW5ndGg9bGVuZ3RoKGV4dHJ1ZGUpO2xvd3AgZmxvYXQgYW50aWFsaWFzYmx1cj12X2RhdGEuejtmbG9hdCBhbnRpYWxpYXNlZF9ibHVyPS1tYXgoYmx1cixhbnRpYWxpYXNibHVyKTtmbG9hdCBvcGFjaXR5X3Q9c21vb3Roc3RlcCgwLjAsYW50aWFsaWFzZWRfYmx1cixleHRydWRlX2xlbmd0aC0xLjApO2Zsb2F0IGNvbG9yX3Q9c3Ryb2tlX3dpZHRoIDwgMC4wMSA/IDAuMCA6IHNtb290aHN0ZXAoYW50aWFsaWFzZWRfYmx1ciwwLjAsZXh0cnVkZV9sZW5ndGgtcmFkaXVzLyhyYWRpdXMrc3Ryb2tlX3dpZHRoKSk7Z2xfRnJhZ0NvbG9yPW9wYWNpdHlfdCptaXgoY29sb3Iqb3BhY2l0eSxzdHJva2VfY29sb3Iqc3Ryb2tlX29wYWNpdHksY29sb3JfdCk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gYm9vbCB1X3NjYWxlX3dpdGhfbWFwO3VuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO3VuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMyB2X2RhdGE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG52b2lkIG1haW4odm9pZCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcbnZlYzIgZXh0cnVkZT12ZWMyKG1vZChhX3BvcywyLjApKjIuMC0xLjApO3ZlYzIgY2lyY2xlX2NlbnRlcj1mbG9vcihhX3BvcyowLjUpO2lmICh1X3BpdGNoX3dpdGhfbWFwKSB7dmVjMiBjb3JuZXJfcG9zaXRpb249Y2lyY2xlX2NlbnRlcjtpZiAodV9zY2FsZV93aXRoX21hcCkge2Nvcm5lcl9wb3NpdGlvbis9ZXh0cnVkZSoocmFkaXVzK3N0cm9rZV93aWR0aCkqdV9leHRydWRlX3NjYWxlO30gZWxzZSB7dmVjNCBwcm9qZWN0ZWRfY2VudGVyPXVfbWF0cml4KnZlYzQoY2lyY2xlX2NlbnRlciwwLDEpO2Nvcm5lcl9wb3NpdGlvbis9ZXh0cnVkZSoocmFkaXVzK3N0cm9rZV93aWR0aCkqdV9leHRydWRlX3NjYWxlKihwcm9qZWN0ZWRfY2VudGVyLncvdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKTt9Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChjb3JuZXJfcG9zaXRpb24sMCwxKTt9IGVsc2Uge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoY2lyY2xlX2NlbnRlciwwLDEpO2lmICh1X3NjYWxlX3dpdGhfbWFwKSB7Z2xfUG9zaXRpb24ueHkrPWV4dHJ1ZGUqKHJhZGl1cytzdHJva2Vfd2lkdGgpKnVfZXh0cnVkZV9zY2FsZSp1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7fSBlbHNlIHtnbF9Qb3NpdGlvbi54eSs9ZXh0cnVkZSoocmFkaXVzK3N0cm9rZV93aWR0aCkqdV9leHRydWRlX3NjYWxlKmdsX1Bvc2l0aW9uLnc7fX1sb3dwIGZsb2F0IGFudGlhbGlhc2JsdXI9MS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvLyhyYWRpdXMrc3Ryb2tlX3dpZHRoKTt2X2RhdGE9dmVjMyhleHRydWRlLngsZXh0cnVkZS55LGFudGlhbGlhc2JsdXIpO30iKSxYZT12cigidm9pZCBtYWluKCkge2dsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7fSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO30iKSxKZT12cigidW5pZm9ybSBoaWdocCBmbG9hdCB1X2ludGVuc2l0eTt2YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcbiNkZWZpbmUgR0FVU1NfQ09FRiAwLjM5ODk0MjI4MDQwMTQzMjdcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IHdlaWdodFxuZmxvYXQgZD0tMC41KjMuMCozLjAqZG90KHZfZXh0cnVkZSx2X2V4dHJ1ZGUpO2Zsb2F0IHZhbD13ZWlnaHQqdV9pbnRlbnNpdHkqR0FVU1NfQ09FRipleHAoZCk7Z2xfRnJhZ0NvbG9yPXZlYzQodmFsLDEuMCwxLjAsMS4wKTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBmbG9hdCB1X2V4dHJ1ZGVfc2NhbGU7dW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7dW5pZm9ybSBmbG9hdCB1X2ludGVuc2l0eTthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbmNvbnN0IGhpZ2hwIGZsb2F0IFpFUk89MS4wLzI1NS4wLzE2LjA7XG4jZGVmaW5lIEdBVVNTX0NPRUYgMC4zOTg5NDIyODA0MDE0MzI3XG52b2lkIG1haW4odm9pZCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgd2VpZ2h0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xudmVjMiB1bnNjYWxlZF9leHRydWRlPXZlYzIobW9kKGFfcG9zLDIuMCkqMi4wLTEuMCk7ZmxvYXQgUz1zcXJ0KC0yLjAqbG9nKFpFUk8vd2VpZ2h0L3VfaW50ZW5zaXR5L0dBVVNTX0NPRUYpKS8zLjA7dl9leHRydWRlPVMqdW5zY2FsZWRfZXh0cnVkZTt2ZWMyIGV4dHJ1ZGU9dl9leHRydWRlKnJhZGl1cyp1X2V4dHJ1ZGVfc2NhbGU7dmVjNCBwb3M9dmVjNChmbG9vcihhX3BvcyowLjUpK2V4dHJ1ZGUsMCwxKTtnbF9Qb3NpdGlvbj11X21hdHJpeCpwb3M7fSIpLEtlPXZyKCJ1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3VuaWZvcm0gc2FtcGxlcjJEIHVfY29sb3JfcmFtcDt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt2YXJ5aW5nIHZlYzIgdl9wb3M7dm9pZCBtYWluKCkge2Zsb2F0IHQ9dGV4dHVyZTJEKHVfaW1hZ2Usdl9wb3MpLnI7dmVjNCBjb2xvcj10ZXh0dXJlMkQodV9jb2xvcl9yYW1wLHZlYzIodCwwLjUpKTtnbF9GcmFnQ29sb3I9Y29sb3IqdV9vcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMC4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV93b3JsZDthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3M7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MqdV93b3JsZCwwLDEpO3ZfcG9zLng9YV9wb3MueDt2X3Bvcy55PTEuMC1hX3Bvcy55O30iKSxRZT12cigidmFyeWluZyBmbG9hdCB2X3BsYWNlZDt2YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDt2b2lkIG1haW4oKSB7ZmxvYXQgYWxwaGE9MC41O2dsX0ZyYWdDb2xvcj12ZWM0KDEuMCwwLjAsMC4wLDEuMCkqYWxwaGE7aWYgKHZfcGxhY2VkID4gMC41KSB7Z2xfRnJhZ0NvbG9yPXZlYzQoMC4wLDAuMCwxLjAsMC41KSphbHBoYTt9aWYgKHZfbm90VXNlZCA+IDAuNSkge2dsX0ZyYWdDb2xvcio9LjE7fX0iLCJhdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX2FuY2hvcl9wb3M7YXR0cmlidXRlIHZlYzIgYV9leHRydWRlO2F0dHJpYnV0ZSB2ZWMyIGFfcGxhY2VkO2F0dHJpYnV0ZSB2ZWMyIGFfc2hpZnQ7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7dW5pZm9ybSBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7dmFyeWluZyBmbG9hdCB2X3BsYWNlZDt2YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDt2b2lkIG1haW4oKSB7dmVjNCBwcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfYW5jaG9yX3BvcywwLDEpO2hpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U9cHJvamVjdGVkUG9pbnQudztoaWdocCBmbG9hdCBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW89Y2xhbXAoMC41KzAuNSoodV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlL2NhbWVyYV90b19hbmNob3JfZGlzdGFuY2UpLDAuMCw0LjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMC4wLDEuMCk7Z2xfUG9zaXRpb24ueHkrPShhX2V4dHJ1ZGUrYV9zaGlmdCkqdV9leHRydWRlX3NjYWxlKmdsX1Bvc2l0aW9uLncqY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO3ZfcGxhY2VkPWFfcGxhY2VkLng7dl9ub3RVc2VkPWFfcGxhY2VkLnk7fSIpLCRlPXZyKCJ2YXJ5aW5nIGZsb2F0IHZfcmFkaXVzO3ZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7dmFyeWluZyBmbG9hdCB2X3BlcnNwZWN0aXZlX3JhdGlvO3ZhcnlpbmcgZmxvYXQgdl9jb2xsaXNpb247dm9pZCBtYWluKCkge2Zsb2F0IGFscGhhPTAuNSptaW4odl9wZXJzcGVjdGl2ZV9yYXRpbywxLjApO2Zsb2F0IHN0cm9rZV9yYWRpdXM9MC45Km1heCh2X3BlcnNwZWN0aXZlX3JhdGlvLDEuMCk7ZmxvYXQgZGlzdGFuY2VfdG9fY2VudGVyPWxlbmd0aCh2X2V4dHJ1ZGUpO2Zsb2F0IGRpc3RhbmNlX3RvX2VkZ2U9YWJzKGRpc3RhbmNlX3RvX2NlbnRlci12X3JhZGl1cyk7ZmxvYXQgb3BhY2l0eV90PXNtb290aHN0ZXAoLXN0cm9rZV9yYWRpdXMsMC4wLC1kaXN0YW5jZV90b19lZGdlKTt2ZWM0IGNvbG9yPW1peCh2ZWM0KDAuMCwwLjAsMS4wLDAuNSksdmVjNCgxLjAsMC4wLDAuMCwxLjApLHZfY29sbGlzaW9uKTtnbF9GcmFnQ29sb3I9Y29sb3IqYWxwaGEqb3BhY2l0eV90O30iLCJhdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgZmxvYXQgYV9yYWRpdXM7YXR0cmlidXRlIHZlYzIgYV9mbGFnczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfaW52X21hdHJpeDt1bmlmb3JtIHZlYzIgdV92aWV3cG9ydF9zaXplO3VuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3ZhcnlpbmcgZmxvYXQgdl9yYWRpdXM7dmFyeWluZyB2ZWMyIHZfZXh0cnVkZTt2YXJ5aW5nIGZsb2F0IHZfcGVyc3BlY3RpdmVfcmF0aW87dmFyeWluZyBmbG9hdCB2X2NvbGxpc2lvbjt2ZWMzIHRvVGlsZVBvc2l0aW9uKHZlYzIgc2NyZWVuUG9zKSB7dmVjNCByYXlTdGFydD11X2ludl9tYXRyaXgqdmVjNChzY3JlZW5Qb3MsLTEuMCwxLjApO3ZlYzQgcmF5RW5kICA9dV9pbnZfbWF0cml4KnZlYzQoc2NyZWVuUG9zLCAxLjAsMS4wKTtyYXlTdGFydC54eXovPXJheVN0YXJ0Lnc7cmF5RW5kLnh5eiAgLz1yYXlFbmQudztoaWdocCBmbG9hdCB0PSgwLjAtcmF5U3RhcnQueikvKHJheUVuZC56LXJheVN0YXJ0LnopO3JldHVybiBtaXgocmF5U3RhcnQueHl6LHJheUVuZC54eXosdCk7fXZvaWQgbWFpbigpIHt2ZWMyIHF1YWRDZW50ZXJQb3M9YV9wb3M7ZmxvYXQgcmFkaXVzPWFfcmFkaXVzO2Zsb2F0IGNvbGxpc2lvbj1hX2ZsYWdzLng7ZmxvYXQgdmVydGV4SWR4PWFfZmxhZ3MueTt2ZWMyIHF1YWRWZXJ0ZXhPZmZzZXQ9dmVjMihtaXgoLTEuMCwxLjAsZmxvYXQodmVydGV4SWR4ID49Mi4wKSksbWl4KC0xLjAsMS4wLGZsb2F0KHZlcnRleElkeCA+PTEuMCAmJiB2ZXJ0ZXhJZHggPD0yLjApKSk7dmVjMiBxdWFkVmVydGV4RXh0ZW50PXF1YWRWZXJ0ZXhPZmZzZXQqcmFkaXVzO3ZlYzMgdGlsZVBvcz10b1RpbGVQb3NpdGlvbihxdWFkQ2VudGVyUG9zKTt2ZWM0IGNsaXBQb3M9dV9tYXRyaXgqdmVjNCh0aWxlUG9zLDEuMCk7aGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZT1jbGlwUG9zLnc7aGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqKHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSwwLjAsNC4wKTtmbG9hdCBwYWRkaW5nX2ZhY3Rvcj0xLjI7dl9yYWRpdXM9cmFkaXVzO3ZfZXh0cnVkZT1xdWFkVmVydGV4RXh0ZW50KnBhZGRpbmdfZmFjdG9yO3ZfcGVyc3BlY3RpdmVfcmF0aW89Y29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvO3ZfY29sbGlzaW9uPWNvbGxpc2lvbjtnbF9Qb3NpdGlvbj12ZWM0KGNsaXBQb3MueHl6L2NsaXBQb3MudywxLjApK3ZlYzQocXVhZFZlcnRleEV4dGVudCpwYWRkaW5nX2ZhY3Rvci91X3ZpZXdwb3J0X3NpemUqMi4wLDAuMCwwLjApO30iKSx0cj12cigidW5pZm9ybSBoaWdocCB2ZWM0IHVfY29sb3I7dW5pZm9ybSBzYW1wbGVyMkQgdV9vdmVybGF5O3ZhcnlpbmcgdmVjMiB2X3V2O3ZvaWQgbWFpbigpIHt2ZWM0IG92ZXJsYXlfY29sb3I9dGV4dHVyZTJEKHVfb3ZlcmxheSx2X3V2KTtnbF9GcmFnQ29sb3I9bWl4KHVfY29sb3Isb3ZlcmxheV9jb2xvcixvdmVybGF5X2NvbG9yLmEpO30iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl91djt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBmbG9hdCB1X292ZXJsYXlfc2NhbGU7dm9pZCBtYWluKCkge3ZfdXY9YV9wb3MvODE5Mi4wO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MqdV9vdmVybGF5X3NjYWxlLDAsMSk7fSIpLGVyPXZyKCIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmdsX0ZyYWdDb2xvcj1jb2xvcipvcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZ2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO30iKSxycj12cigidmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZmxvYXQgZGlzdD1sZW5ndGgodl9wb3MtZ2xfRnJhZ0Nvb3JkLnh5KTtmbG9hdCBhbHBoYT0xLjAtc21vb3Roc3RlcCgwLjAsMS4wLGRpc3QpO2dsX0ZyYWdDb2xvcj1vdXRsaW5lX2NvbG9yKihhbHBoYSpvcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfd29ybGQ7dmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZ2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zPShnbF9Qb3NpdGlvbi54eS9nbF9Qb3NpdGlvbi53KzEuMCkvMi4wKnVfd29ybGQ7fSIpLG5yPXZyKCJ1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dW5pZm9ybSBmbG9hdCB1X2ZhZGU7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7dmVjMiBpbWFnZWNvb3JkPW1vZCh2X3Bvc19hLDEuMCk7dmVjMiBwb3M9bWl4KHBhdHRlcm5fdGxfYS91X3RleHNpemUscGF0dGVybl9icl9hL3VfdGV4c2l6ZSxpbWFnZWNvb3JkKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZSxwb3MpO3ZlYzIgaW1hZ2Vjb29yZF9iPW1vZCh2X3Bvc19iLDEuMCk7dmVjMiBwb3MyPW1peChwYXR0ZXJuX3RsX2IvdV90ZXhzaXplLHBhdHRlcm5fYnJfYi91X3RleHNpemUsaW1hZ2Vjb29yZF9iKTt2ZWM0IGNvbG9yMj10ZXh0dXJlMkQodV9pbWFnZSxwb3MyKTtmbG9hdCBkaXN0PWxlbmd0aCh2X3Bvcy1nbF9GcmFnQ29vcmQueHkpO2Zsb2F0IGFscGhhPTEuMC1zbW9vdGhzdGVwKDAuMCwxLjAsZGlzdCk7Z2xfRnJhZ0NvbG9yPW1peChjb2xvcjEsY29sb3IyLHVfZmFkZSkqYWxwaGEqb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfd29ybGQ7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7dW5pZm9ybSB2ZWMzIHVfc2NhbGU7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWMyIHZfcG9zO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dztmbG9hdCB0aWxlUmF0aW89dV9zY2FsZS54O2Zsb2F0IGZyb21TY2FsZT11X3NjYWxlLnk7ZmxvYXQgdG9TY2FsZT11X3NjYWxlLno7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZlYzIgZGlzcGxheV9zaXplX2E9KHBhdHRlcm5fYnJfYS1wYXR0ZXJuX3RsX2EpL3BpeGVsX3JhdGlvX2Zyb207dmVjMiBkaXNwbGF5X3NpemVfYj0ocGF0dGVybl9icl9iLXBhdHRlcm5fdGxfYikvcGl4ZWxfcmF0aW9fdG87dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLGZyb21TY2FsZSpkaXNwbGF5X3NpemVfYSx0aWxlUmF0aW8sYV9wb3MpO3ZfcG9zX2I9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix0b1NjYWxlKmRpc3BsYXlfc2l6ZV9iLHRpbGVSYXRpbyxhX3Bvcyk7dl9wb3M9KGdsX1Bvc2l0aW9uLnh5L2dsX1Bvc2l0aW9uLncrMS4wKS8yLjAqdV93b3JsZDt9IiksaXI9dnIoInVuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBmbG9hdCB1X2ZhZGU7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O3ZlYzIgaW1hZ2Vjb29yZD1tb2Qodl9wb3NfYSwxLjApO3ZlYzIgcG9zPW1peChwYXR0ZXJuX3RsX2EvdV90ZXhzaXplLHBhdHRlcm5fYnJfYS91X3RleHNpemUsaW1hZ2Vjb29yZCk7dmVjNCBjb2xvcjE9dGV4dHVyZTJEKHVfaW1hZ2UscG9zKTt2ZWMyIGltYWdlY29vcmRfYj1tb2Qodl9wb3NfYiwxLjApO3ZlYzIgcG9zMj1taXgocGF0dGVybl90bF9iL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2IvdV90ZXhzaXplLGltYWdlY29vcmRfYik7dmVjNCBjb2xvcjI9dGV4dHVyZTJEKHVfaW1hZ2UscG9zMik7Z2xfRnJhZ0NvbG9yPW1peChjb2xvcjEsY29sb3IyLHVfZmFkZSkqb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7dW5pZm9ybSB2ZWMzIHVfc2NhbGU7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHRpbGVab29tUmF0aW89dV9zY2FsZS54O2Zsb2F0IGZyb21TY2FsZT11X3NjYWxlLnk7ZmxvYXQgdG9TY2FsZT11X3NjYWxlLno7dmVjMiBkaXNwbGF5X3NpemVfYT0ocGF0dGVybl9icl9hLXBhdHRlcm5fdGxfYSkvcGl4ZWxfcmF0aW9fZnJvbTt2ZWMyIGRpc3BsYXlfc2l6ZV9iPShwYXR0ZXJuX2JyX2ItcGF0dGVybl90bF9iKS9waXhlbF9yYXRpb190bztnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLGZyb21TY2FsZSpkaXNwbGF5X3NpemVfYSx0aWxlWm9vbVJhdGlvLGFfcG9zKTt2X3Bvc19iPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdG9TY2FsZSpkaXNwbGF5X3NpemVfYix0aWxlWm9vbVJhdGlvLGFfcG9zKTt9IiksYXI9dnIoInZhcnlpbmcgdmVjNCB2X2NvbG9yO3ZvaWQgbWFpbigpIHtnbF9GcmFnQ29sb3I9dl9jb2xvcjtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMzIHVfbGlnaHRjb2xvcjt1bmlmb3JtIGxvd3AgdmVjMyB1X2xpZ2h0cG9zO3VuaWZvcm0gbG93cCBmbG9hdCB1X2xpZ2h0aW50ZW5zaXR5O3VuaWZvcm0gZmxvYXQgdV92ZXJ0aWNhbF9ncmFkaWVudDt1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5O2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWM0IGFfbm9ybWFsX2VkO3ZhcnlpbmcgdmVjNCB2X2NvbG9yO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbnZlYzMgbm9ybWFsPWFfbm9ybWFsX2VkLnh5ejtiYXNlPW1heCgwLjAsYmFzZSk7aGVpZ2h0PW1heCgwLjAsaGVpZ2h0KTtmbG9hdCB0PW1vZChub3JtYWwueCwyLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsdCA+IDAuMCA/IGhlaWdodCA6IGJhc2UsMSk7ZmxvYXQgY29sb3J2YWx1ZT1jb2xvci5yKjAuMjEyNitjb2xvci5nKjAuNzE1Mitjb2xvci5iKjAuMDcyMjt2X2NvbG9yPXZlYzQoMC4wLDAuMCwwLjAsMS4wKTt2ZWM0IGFtYmllbnRsaWdodD12ZWM0KDAuMDMsMC4wMywwLjAzLDEuMCk7Y29sb3IrPWFtYmllbnRsaWdodDtmbG9hdCBkaXJlY3Rpb25hbD1jbGFtcChkb3Qobm9ybWFsLzE2Mzg0LjAsdV9saWdodHBvcyksMC4wLDEuMCk7ZGlyZWN0aW9uYWw9bWl4KCgxLjAtdV9saWdodGludGVuc2l0eSksbWF4KCgxLjAtY29sb3J2YWx1ZSt1X2xpZ2h0aW50ZW5zaXR5KSwxLjApLGRpcmVjdGlvbmFsKTtpZiAobm9ybWFsLnkgIT0wLjApIHtkaXJlY3Rpb25hbCo9KCgxLjAtdV92ZXJ0aWNhbF9ncmFkaWVudCkrKHVfdmVydGljYWxfZ3JhZGllbnQqY2xhbXAoKHQrYmFzZSkqcG93KGhlaWdodC8xNTAuMCwwLjUpLG1peCgwLjcsMC45OCwxLjAtdV9saWdodGludGVuc2l0eSksMS4wKSkpO312X2NvbG9yLnIrPWNsYW1wKGNvbG9yLnIqZGlyZWN0aW9uYWwqdV9saWdodGNvbG9yLnIsbWl4KDAuMCwwLjMsMS4wLXVfbGlnaHRjb2xvci5yKSwxLjApO3ZfY29sb3IuZys9Y2xhbXAoY29sb3IuZypkaXJlY3Rpb25hbCp1X2xpZ2h0Y29sb3IuZyxtaXgoMC4wLDAuMywxLjAtdV9saWdodGNvbG9yLmcpLDEuMCk7dl9jb2xvci5iKz1jbGFtcChjb2xvci5iKmRpcmVjdGlvbmFsKnVfbGlnaHRjb2xvci5iLG1peCgwLjAsMC4zLDEuMC11X2xpZ2h0Y29sb3IuYiksMS4wKTt2X2NvbG9yKj11X29wYWNpdHk7fSIpLG9yPXZyKCJ1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gZmxvYXQgdV9mYWRlO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dzt2ZWMyIGltYWdlY29vcmQ9bW9kKHZfcG9zX2EsMS4wKTt2ZWMyIHBvcz1taXgocGF0dGVybl90bF9hL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2EvdV90ZXhzaXplLGltYWdlY29vcmQpO3ZlYzQgY29sb3IxPXRleHR1cmUyRCh1X2ltYWdlLHBvcyk7dmVjMiBpbWFnZWNvb3JkX2I9bW9kKHZfcG9zX2IsMS4wKTt2ZWMyIHBvczI9bWl4KHBhdHRlcm5fdGxfYi91X3RleHNpemUscGF0dGVybl9icl9iL3VfdGV4c2l6ZSxpbWFnZWNvb3JkX2IpO3ZlYzQgY29sb3IyPXRleHR1cmUyRCh1X2ltYWdlLHBvczIpO3ZlYzQgbWl4ZWRDb2xvcj1taXgoY29sb3IxLGNvbG9yMix1X2ZhZGUpO2dsX0ZyYWdDb2xvcj1taXhlZENvbG9yKnZfbGlnaHRpbmc7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO3VuaWZvcm0gZmxvYXQgdV9oZWlnaHRfZmFjdG9yO3VuaWZvcm0gdmVjMyB1X3NjYWxlO3VuaWZvcm0gZmxvYXQgdV92ZXJ0aWNhbF9ncmFkaWVudDt1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5O3VuaWZvcm0gdmVjMyB1X2xpZ2h0Y29sb3I7dW5pZm9ybSBsb3dwIHZlYzMgdV9saWdodHBvczt1bmlmb3JtIGxvd3AgZmxvYXQgdV9saWdodGludGVuc2l0eTthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjNCBhX25vcm1hbF9lZDt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2YXJ5aW5nIHZlYzQgdl9saWdodGluZztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHRpbGVSYXRpbz11X3NjYWxlLng7ZmxvYXQgZnJvbVNjYWxlPXVfc2NhbGUueTtmbG9hdCB0b1NjYWxlPXVfc2NhbGUuejt2ZWMzIG5vcm1hbD1hX25vcm1hbF9lZC54eXo7ZmxvYXQgZWRnZWRpc3RhbmNlPWFfbm9ybWFsX2VkLnc7dmVjMiBkaXNwbGF5X3NpemVfYT0ocGF0dGVybl9icl9hLXBhdHRlcm5fdGxfYSkvcGl4ZWxfcmF0aW9fZnJvbTt2ZWMyIGRpc3BsYXlfc2l6ZV9iPShwYXR0ZXJuX2JyX2ItcGF0dGVybl90bF9iKS9waXhlbF9yYXRpb190bztiYXNlPW1heCgwLjAsYmFzZSk7aGVpZ2h0PW1heCgwLjAsaGVpZ2h0KTtmbG9hdCB0PW1vZChub3JtYWwueCwyLjApO2Zsb2F0IHo9dCA+IDAuMCA/IGhlaWdodCA6IGJhc2U7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3Bvcyx6LDEpO3ZlYzIgcG9zPW5vcm1hbC54PT0xLjAgJiYgbm9ybWFsLnk9PTAuMCAmJiBub3JtYWwuej09MTYzODQuMFxuPyBhX3Bvc1xuOiB2ZWMyKGVkZ2VkaXN0YW5jZSx6KnVfaGVpZ2h0X2ZhY3Rvcik7dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLGZyb21TY2FsZSpkaXNwbGF5X3NpemVfYSx0aWxlUmF0aW8scG9zKTt2X3Bvc19iPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdG9TY2FsZSpkaXNwbGF5X3NpemVfYix0aWxlUmF0aW8scG9zKTt2X2xpZ2h0aW5nPXZlYzQoMC4wLDAuMCwwLjAsMS4wKTtmbG9hdCBkaXJlY3Rpb25hbD1jbGFtcChkb3Qobm9ybWFsLzE2MzgzLjAsdV9saWdodHBvcyksMC4wLDEuMCk7ZGlyZWN0aW9uYWw9bWl4KCgxLjAtdV9saWdodGludGVuc2l0eSksbWF4KCgwLjUrdV9saWdodGludGVuc2l0eSksMS4wKSxkaXJlY3Rpb25hbCk7aWYgKG5vcm1hbC55ICE9MC4wKSB7ZGlyZWN0aW9uYWwqPSgoMS4wLXVfdmVydGljYWxfZ3JhZGllbnQpKyh1X3ZlcnRpY2FsX2dyYWRpZW50KmNsYW1wKCh0K2Jhc2UpKnBvdyhoZWlnaHQvMTUwLjAsMC41KSxtaXgoMC43LDAuOTgsMS4wLXVfbGlnaHRpbnRlbnNpdHkpLDEuMCkpKTt9dl9saWdodGluZy5yZ2IrPWNsYW1wKGRpcmVjdGlvbmFsKnVfbGlnaHRjb2xvcixtaXgodmVjMygwLjApLHZlYzMoMC4zKSwxLjAtdV9saWdodGNvbG9yKSx2ZWMzKDEuMCkpO3ZfbGlnaHRpbmcqPXVfb3BhY2l0eTt9Iiksc3I9dnIoIiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2VuZGlmXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3Bvczt1bmlmb3JtIHZlYzIgdV9kaW1lbnNpb247dW5pZm9ybSBmbG9hdCB1X3pvb207dW5pZm9ybSBmbG9hdCB1X21heHpvb207dW5pZm9ybSB2ZWM0IHVfdW5wYWNrO2Zsb2F0IGdldEVsZXZhdGlvbih2ZWMyIGNvb3JkLGZsb2F0IGJpYXMpIHt2ZWM0IGRhdGE9dGV4dHVyZTJEKHVfaW1hZ2UsY29vcmQpKjI1NS4wO2RhdGEuYT0tMS4wO3JldHVybiBkb3QoZGF0YSx1X3VucGFjaykvNC4wO312b2lkIG1haW4oKSB7dmVjMiBlcHNpbG9uPTEuMC91X2RpbWVuc2lvbjtmbG9hdCBhPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKC1lcHNpbG9uLngsLWVwc2lsb24ueSksMC4wKTtmbG9hdCBiPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKDAsLWVwc2lsb24ueSksMC4wKTtmbG9hdCBjPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKGVwc2lsb24ueCwtZXBzaWxvbi55KSwwLjApO2Zsb2F0IGQ9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoLWVwc2lsb24ueCwwKSwwLjApO2Zsb2F0IGU9Z2V0RWxldmF0aW9uKHZfcG9zLDAuMCk7ZmxvYXQgZj1nZXRFbGV2YXRpb24odl9wb3MrdmVjMihlcHNpbG9uLngsMCksMC4wKTtmbG9hdCBnPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKC1lcHNpbG9uLngsZXBzaWxvbi55KSwwLjApO2Zsb2F0IGg9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoMCxlcHNpbG9uLnkpLDAuMCk7ZmxvYXQgaT1nZXRFbGV2YXRpb24odl9wb3MrdmVjMihlcHNpbG9uLngsZXBzaWxvbi55KSwwLjApO2Zsb2F0IGV4YWdnZXJhdGlvbj11X3pvb20gPCAyLjAgPyAwLjQgOiB1X3pvb20gPCA0LjUgPyAwLjM1IDogMC4zO3ZlYzIgZGVyaXY9dmVjMigoYytmK2YraSktKGErZCtkK2cpLChnK2graCtpKS0oYStiK2IrYykpLyBwb3coMi4wLCh1X3pvb20tdV9tYXh6b29tKSpleGFnZ2VyYXRpb24rMTkuMjU2Mi11X3pvb20pO2dsX0ZyYWdDb2xvcj1jbGFtcCh2ZWM0KGRlcml2LngvMi4wKzAuNSxkZXJpdi55LzIuMCswLjUsMS4wLDEuMCksMC4wLDEuMCk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X2RpbWVuc2lvbjthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvczt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO2hpZ2hwIHZlYzIgZXBzaWxvbj0xLjAvdV9kaW1lbnNpb247ZmxvYXQgc2NhbGU9KHVfZGltZW5zaW9uLngtMi4wKS91X2RpbWVuc2lvbi54O3ZfcG9zPShhX3RleHR1cmVfcG9zLzgxOTIuMCkqc2NhbGUrZXBzaWxvbjt9IiksbHI9dnIoInVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zO3VuaWZvcm0gdmVjMiB1X2xhdHJhbmdlO3VuaWZvcm0gdmVjMiB1X2xpZ2h0O3VuaWZvcm0gdmVjNCB1X3NoYWRvdzt1bmlmb3JtIHZlYzQgdV9oaWdobGlnaHQ7dW5pZm9ybSB2ZWM0IHVfYWNjZW50O1xuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xudm9pZCBtYWluKCkge3ZlYzQgcGl4ZWw9dGV4dHVyZTJEKHVfaW1hZ2Usdl9wb3MpO3ZlYzIgZGVyaXY9KChwaXhlbC5yZyoyLjApLTEuMCk7ZmxvYXQgc2NhbGVGYWN0b3I9Y29zKHJhZGlhbnMoKHVfbGF0cmFuZ2VbMF0tdV9sYXRyYW5nZVsxXSkqKDEuMC12X3Bvcy55KSt1X2xhdHJhbmdlWzFdKSk7ZmxvYXQgc2xvcGU9YXRhbigxLjI1Kmxlbmd0aChkZXJpdikvc2NhbGVGYWN0b3IpO2Zsb2F0IGFzcGVjdD1kZXJpdi54ICE9MC4wID8gYXRhbihkZXJpdi55LC1kZXJpdi54KSA6IFBJLzIuMCooZGVyaXYueSA+IDAuMCA/IDEuMCA6LTEuMCk7ZmxvYXQgaW50ZW5zaXR5PXVfbGlnaHQueDtmbG9hdCBhemltdXRoPXVfbGlnaHQueStQSTtmbG9hdCBiYXNlPTEuODc1LWludGVuc2l0eSoxLjc1O2Zsb2F0IG1heFZhbHVlPTAuNSpQSTtmbG9hdCBzY2FsZWRTbG9wZT1pbnRlbnNpdHkgIT0wLjUgPyAoKHBvdyhiYXNlLHNsb3BlKS0xLjApLyhwb3coYmFzZSxtYXhWYWx1ZSktMS4wKSkqbWF4VmFsdWUgOiBzbG9wZTtmbG9hdCBhY2NlbnQ9Y29zKHNjYWxlZFNsb3BlKTt2ZWM0IGFjY2VudF9jb2xvcj0oMS4wLWFjY2VudCkqdV9hY2NlbnQqY2xhbXAoaW50ZW5zaXR5KjIuMCwwLjAsMS4wKTtmbG9hdCBzaGFkZT1hYnMobW9kKChhc3BlY3QrYXppbXV0aCkvUEkrMC41LDIuMCktMS4wKTt2ZWM0IHNoYWRlX2NvbG9yPW1peCh1X3NoYWRvdyx1X2hpZ2hsaWdodCxzaGFkZSkqc2luKHNjYWxlZFNsb3BlKSpjbGFtcChpbnRlbnNpdHkqMi4wLDAuMCwxLjApO2dsX0ZyYWdDb2xvcj1hY2NlbnRfY29sb3IqKDEuMC1zaGFkZV9jb2xvci5hKStzaGFkZV9jb2xvcjtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7YXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIHZlYzIgYV90ZXh0dXJlX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3M7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt2X3Bvcz1hX3RleHR1cmVfcG9zLzgxOTIuMDt9IiksY3I9dnIoInVuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZmxvYXQgZGlzdD1sZW5ndGgodl9ub3JtYWwpKnZfd2lkdGgyLnM7ZmxvYXQgYmx1cjI9KGJsdXIrMS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvKSp2X2dhbW1hX3NjYWxlO2Zsb2F0IGFscGhhPWNsYW1wKG1pbihkaXN0LSh2X3dpZHRoMi50LWJsdXIyKSx2X3dpZHRoMi5zLWRpc3QpL2JsdXIyLDAuMCwxLjApO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIHZlYzIgdV91bml0c190b19waXhlbHM7dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO3ZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lc29mYXI7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuZmxvYXQgQU5USUFMSUFTSU5HPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8yLjA7dmVjMiBhX2V4dHJ1ZGU9YV9kYXRhLnh5LTEyOC4wO2Zsb2F0IGFfZGlyZWN0aW9uPW1vZChhX2RhdGEueiw0LjApLTEuMDt2X2xpbmVzb2Zhcj0oZmxvb3IoYV9kYXRhLnovNC4wKSthX2RhdGEudyo2NC4wKSoyLjA7dmVjMiBwb3M9Zmxvb3IoYV9wb3Nfbm9ybWFsKjAuNSk7bWVkaXVtcCB2ZWMyIG5vcm1hbD1hX3Bvc19ub3JtYWwtMi4wKnBvcztub3JtYWwueT1ub3JtYWwueSoyLjAtMS4wO3Zfbm9ybWFsPW5vcm1hbDtnYXB3aWR0aD1nYXB3aWR0aC8yLjA7ZmxvYXQgaGFsZndpZHRoPXdpZHRoLzIuMDtvZmZzZXQ9LTEuMCpvZmZzZXQ7ZmxvYXQgaW5zZXQ9Z2Fwd2lkdGgrKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtmbG9hdCBvdXRzZXQ9Z2Fwd2lkdGgraGFsZndpZHRoKihnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkrKGhhbGZ3aWR0aD09MC4wID8gMC4wIDogQU5USUFMSUFTSU5HKTttZWRpdW1wIHZlYzIgZGlzdD1vdXRzZXQqYV9leHRydWRlKnNjYWxlO21lZGl1bXAgZmxvYXQgdT0wLjUqYV9kaXJlY3Rpb247bWVkaXVtcCBmbG9hdCB0PTEuMC1hYnModSk7bWVkaXVtcCB2ZWMyIG9mZnNldDI9b2Zmc2V0KmFfZXh0cnVkZSpzY2FsZSpub3JtYWwueSptYXQyKHQsLXUsdSx0KTt2ZWM0IHByb2plY3RlZF9leHRydWRlPXVfbWF0cml4KnZlYzQoZGlzdC91X3JhdGlvLDAuMCwwLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQocG9zK29mZnNldDIvdV9yYXRpbywwLjAsMS4wKStwcm9qZWN0ZWRfZXh0cnVkZTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlPWxlbmd0aChkaXN0KTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlPWxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eS9nbF9Qb3NpdGlvbi53KnVfdW5pdHNfdG9fcGl4ZWxzKTt2X2dhbW1hX3NjYWxlPWV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUvZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTt2X3dpZHRoMj12ZWMyKG91dHNldCxpbnNldCk7fSIpLHVyPXZyKCJ1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTt2YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXByb2dyZXNzO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZmxvYXQgZGlzdD1sZW5ndGgodl9ub3JtYWwpKnZfd2lkdGgyLnM7ZmxvYXQgYmx1cjI9KGJsdXIrMS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvKSp2X2dhbW1hX3NjYWxlO2Zsb2F0IGFscGhhPWNsYW1wKG1pbihkaXN0LSh2X3dpZHRoMi50LWJsdXIyKSx2X3dpZHRoMi5zLWRpc3QpL2JsdXIyLDAuMCwxLjApO3ZlYzQgY29sb3I9dGV4dHVyZTJEKHVfaW1hZ2UsdmVjMih2X2xpbmVwcm9ncmVzcywwLjUpKTtnbF9GcmFnQ29sb3I9Y29sb3IqKGFscGhhKm9wYWNpdHkpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsIlxuI2RlZmluZSBNQVhfTElORV9ESVNUQU5DRSAzMjc2Ny4wXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSB2ZWMyIHVfdW5pdHNfdG9fcGl4ZWxzO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO3ZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lcHJvZ3Jlc3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbmZsb2F0IEFOVElBTElBU0lORz0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vMi4wO3ZlYzIgYV9leHRydWRlPWFfZGF0YS54eS0xMjguMDtmbG9hdCBhX2RpcmVjdGlvbj1tb2QoYV9kYXRhLnosNC4wKS0xLjA7dl9saW5lcHJvZ3Jlc3M9KGZsb29yKGFfZGF0YS56LzQuMCkrYV9kYXRhLncqNjQuMCkqMi4wL01BWF9MSU5FX0RJU1RBTkNFO3ZlYzIgcG9zPWZsb29yKGFfcG9zX25vcm1hbCowLjUpO21lZGl1bXAgdmVjMiBub3JtYWw9YV9wb3Nfbm9ybWFsLTIuMCpwb3M7bm9ybWFsLnk9bm9ybWFsLnkqMi4wLTEuMDt2X25vcm1hbD1ub3JtYWw7Z2Fwd2lkdGg9Z2Fwd2lkdGgvMi4wO2Zsb2F0IGhhbGZ3aWR0aD13aWR0aC8yLjA7b2Zmc2V0PS0xLjAqb2Zmc2V0O2Zsb2F0IGluc2V0PWdhcHdpZHRoKyhnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7ZmxvYXQgb3V0c2V0PWdhcHdpZHRoK2hhbGZ3aWR0aCooZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApKyhoYWxmd2lkdGg9PTAuMCA/IDAuMCA6IEFOVElBTElBU0lORyk7bWVkaXVtcCB2ZWMyIGRpc3Q9b3V0c2V0KmFfZXh0cnVkZSpzY2FsZTttZWRpdW1wIGZsb2F0IHU9MC41KmFfZGlyZWN0aW9uO21lZGl1bXAgZmxvYXQgdD0xLjAtYWJzKHUpO21lZGl1bXAgdmVjMiBvZmZzZXQyPW9mZnNldCphX2V4dHJ1ZGUqc2NhbGUqbm9ybWFsLnkqbWF0Mih0LC11LHUsdCk7dmVjNCBwcm9qZWN0ZWRfZXh0cnVkZT11X21hdHJpeCp2ZWM0KGRpc3QvdV9yYXRpbywwLjAsMC4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KHBvcytvZmZzZXQyL3VfcmF0aW8sMC4wLDEuMCkrcHJvamVjdGVkX2V4dHJ1ZGU7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZT1sZW5ndGgoZGlzdCk7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZT1sZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkvZ2xfUG9zaXRpb24udyp1X3VuaXRzX3RvX3BpeGVscyk7dl9nYW1tYV9zY2FsZT1leHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlL2V4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7dl93aWR0aDI9dmVjMihvdXRzZXQsaW5zZXQpO30iKSxocj12cigidW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBmbG9hdCB1X2ZhZGU7dW5pZm9ybSBtZWRpdW1wIHZlYzMgdV9zY2FsZTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2xpbmVzb2Zhcjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBmbG9hdCB2X3dpZHRoO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dztmbG9hdCB0aWxlWm9vbVJhdGlvPXVfc2NhbGUueDtmbG9hdCBmcm9tU2NhbGU9dV9zY2FsZS55O2Zsb2F0IHRvU2NhbGU9dV9zY2FsZS56O3ZlYzIgZGlzcGxheV9zaXplX2E9KHBhdHRlcm5fYnJfYS1wYXR0ZXJuX3RsX2EpL3BpeGVsX3JhdGlvX2Zyb207dmVjMiBkaXNwbGF5X3NpemVfYj0ocGF0dGVybl9icl9iLXBhdHRlcm5fdGxfYikvcGl4ZWxfcmF0aW9fdG87dmVjMiBwYXR0ZXJuX3NpemVfYT12ZWMyKGRpc3BsYXlfc2l6ZV9hLngqZnJvbVNjYWxlL3RpbGVab29tUmF0aW8sZGlzcGxheV9zaXplX2EueSk7dmVjMiBwYXR0ZXJuX3NpemVfYj12ZWMyKGRpc3BsYXlfc2l6ZV9iLngqdG9TY2FsZS90aWxlWm9vbVJhdGlvLGRpc3BsYXlfc2l6ZV9iLnkpO2Zsb2F0IGFzcGVjdF9hPWRpc3BsYXlfc2l6ZV9hLnkvdl93aWR0aDtmbG9hdCBhc3BlY3RfYj1kaXNwbGF5X3NpemVfYi55L3Zfd2lkdGg7ZmxvYXQgZGlzdD1sZW5ndGgodl9ub3JtYWwpKnZfd2lkdGgyLnM7ZmxvYXQgYmx1cjI9KGJsdXIrMS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvKSp2X2dhbW1hX3NjYWxlO2Zsb2F0IGFscGhhPWNsYW1wKG1pbihkaXN0LSh2X3dpZHRoMi50LWJsdXIyKSx2X3dpZHRoMi5zLWRpc3QpL2JsdXIyLDAuMCwxLjApO2Zsb2F0IHhfYT1tb2Qodl9saW5lc29mYXIvcGF0dGVybl9zaXplX2EueCphc3BlY3RfYSwxLjApO2Zsb2F0IHhfYj1tb2Qodl9saW5lc29mYXIvcGF0dGVybl9zaXplX2IueCphc3BlY3RfYiwxLjApO2Zsb2F0IHk9MC41KnZfbm9ybWFsLnkrMC41O3ZlYzIgdGV4ZWxfc2l6ZT0xLjAvdV90ZXhzaXplO3ZlYzIgcG9zX2E9bWl4KHBhdHRlcm5fdGxfYSp0ZXhlbF9zaXplLXRleGVsX3NpemUscGF0dGVybl9icl9hKnRleGVsX3NpemUrdGV4ZWxfc2l6ZSx2ZWMyKHhfYSx5KSk7dmVjMiBwb3NfYj1taXgocGF0dGVybl90bF9iKnRleGVsX3NpemUtdGV4ZWxfc2l6ZSxwYXR0ZXJuX2JyX2IqdGV4ZWxfc2l6ZSt0ZXhlbF9zaXplLHZlYzIoeF9iLHkpKTt2ZWM0IGNvbG9yPW1peCh0ZXh0dXJlMkQodV9pbWFnZSxwb3NfYSksdGV4dHVyZTJEKHVfaW1hZ2UscG9zX2IpLHVfZmFkZSk7Z2xfRnJhZ0NvbG9yPWNvbG9yKmFscGhhKm9wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV91bml0c190b19waXhlbHM7dW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyBmbG9hdCB2X2xpbmVzb2Zhcjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBmbG9hdCB2X3dpZHRoO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbmZsb2F0IEFOVElBTElBU0lORz0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vMi4wO3ZlYzIgYV9leHRydWRlPWFfZGF0YS54eS0xMjguMDtmbG9hdCBhX2RpcmVjdGlvbj1tb2QoYV9kYXRhLnosNC4wKS0xLjA7ZmxvYXQgYV9saW5lc29mYXI9KGZsb29yKGFfZGF0YS56LzQuMCkrYV9kYXRhLncqNjQuMCkqTElORV9ESVNUQU5DRV9TQ0FMRTt2ZWMyIHBvcz1mbG9vcihhX3Bvc19ub3JtYWwqMC41KTttZWRpdW1wIHZlYzIgbm9ybWFsPWFfcG9zX25vcm1hbC0yLjAqcG9zO25vcm1hbC55PW5vcm1hbC55KjIuMC0xLjA7dl9ub3JtYWw9bm9ybWFsO2dhcHdpZHRoPWdhcHdpZHRoLzIuMDtmbG9hdCBoYWxmd2lkdGg9d2lkdGgvMi4wO29mZnNldD0tMS4wKm9mZnNldDtmbG9hdCBpbnNldD1nYXB3aWR0aCsoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO2Zsb2F0IG91dHNldD1nYXB3aWR0aCtoYWxmd2lkdGgqKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSsoaGFsZndpZHRoPT0wLjAgPyAwLjAgOiBBTlRJQUxJQVNJTkcpO21lZGl1bXAgdmVjMiBkaXN0PW91dHNldCphX2V4dHJ1ZGUqc2NhbGU7bWVkaXVtcCBmbG9hdCB1PTAuNSphX2RpcmVjdGlvbjttZWRpdW1wIGZsb2F0IHQ9MS4wLWFicyh1KTttZWRpdW1wIHZlYzIgb2Zmc2V0Mj1vZmZzZXQqYV9leHRydWRlKnNjYWxlKm5vcm1hbC55Km1hdDIodCwtdSx1LHQpO3ZlYzQgcHJvamVjdGVkX2V4dHJ1ZGU9dV9tYXRyaXgqdmVjNChkaXN0L3VfcmF0aW8sMC4wLDAuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChwb3Mrb2Zmc2V0Mi91X3JhdGlvLDAuMCwxLjApK3Byb2plY3RlZF9leHRydWRlO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmU9bGVuZ3RoKGRpc3QpO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU9bGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5L2dsX1Bvc2l0aW9uLncqdV91bml0c190b19waXhlbHMpO3ZfZ2FtbWFfc2NhbGU9ZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZS9leHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO3ZfbGluZXNvZmFyPWFfbGluZXNvZmFyO3Zfd2lkdGgyPXZlYzIob3V0c2V0LGluc2V0KTt2X3dpZHRoPWZsb29yd2lkdGg7fSIpLGZyPXZyKCJ1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt1bmlmb3JtIGZsb2F0IHVfc2RmZ2FtbWE7dW5pZm9ybSBmbG9hdCB1X21peDt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgdmVjMiB2X3RleF9hO3ZhcnlpbmcgdmVjMiB2X3RleF9iO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG5mbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7ZmxvYXQgc2RmZGlzdF9hPXRleHR1cmUyRCh1X2ltYWdlLHZfdGV4X2EpLmE7ZmxvYXQgc2RmZGlzdF9iPXRleHR1cmUyRCh1X2ltYWdlLHZfdGV4X2IpLmE7ZmxvYXQgc2RmZGlzdD1taXgoc2RmZGlzdF9hLHNkZmRpc3RfYix1X21peCk7YWxwaGEqPXNtb290aHN0ZXAoMC41LXVfc2RmZ2FtbWEvZmxvb3J3aWR0aCwwLjUrdV9zZGZnYW1tYS9mbG9vcndpZHRoLHNkZmRpc3QpO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2E7dW5pZm9ybSBmbG9hdCB1X3RleF95X2E7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2I7dW5pZm9ybSBmbG9hdCB1X3RleF95X2I7dW5pZm9ybSB2ZWMyIHVfdW5pdHNfdG9fcGl4ZWxzO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfdGV4X2E7dmFyeWluZyB2ZWMyIHZfdGV4X2I7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbmZsb2F0IEFOVElBTElBU0lORz0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vMi4wO3ZlYzIgYV9leHRydWRlPWFfZGF0YS54eS0xMjguMDtmbG9hdCBhX2RpcmVjdGlvbj1tb2QoYV9kYXRhLnosNC4wKS0xLjA7ZmxvYXQgYV9saW5lc29mYXI9KGZsb29yKGFfZGF0YS56LzQuMCkrYV9kYXRhLncqNjQuMCkqTElORV9ESVNUQU5DRV9TQ0FMRTt2ZWMyIHBvcz1mbG9vcihhX3Bvc19ub3JtYWwqMC41KTttZWRpdW1wIHZlYzIgbm9ybWFsPWFfcG9zX25vcm1hbC0yLjAqcG9zO25vcm1hbC55PW5vcm1hbC55KjIuMC0xLjA7dl9ub3JtYWw9bm9ybWFsO2dhcHdpZHRoPWdhcHdpZHRoLzIuMDtmbG9hdCBoYWxmd2lkdGg9d2lkdGgvMi4wO29mZnNldD0tMS4wKm9mZnNldDtmbG9hdCBpbnNldD1nYXB3aWR0aCsoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO2Zsb2F0IG91dHNldD1nYXB3aWR0aCtoYWxmd2lkdGgqKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSsoaGFsZndpZHRoPT0wLjAgPyAwLjAgOiBBTlRJQUxJQVNJTkcpO21lZGl1bXAgdmVjMiBkaXN0PW91dHNldCphX2V4dHJ1ZGUqc2NhbGU7bWVkaXVtcCBmbG9hdCB1PTAuNSphX2RpcmVjdGlvbjttZWRpdW1wIGZsb2F0IHQ9MS4wLWFicyh1KTttZWRpdW1wIHZlYzIgb2Zmc2V0Mj1vZmZzZXQqYV9leHRydWRlKnNjYWxlKm5vcm1hbC55Km1hdDIodCwtdSx1LHQpO3ZlYzQgcHJvamVjdGVkX2V4dHJ1ZGU9dV9tYXRyaXgqdmVjNChkaXN0L3VfcmF0aW8sMC4wLDAuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChwb3Mrb2Zmc2V0Mi91X3JhdGlvLDAuMCwxLjApK3Byb2plY3RlZF9leHRydWRlO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmU9bGVuZ3RoKGRpc3QpO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU9bGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5L2dsX1Bvc2l0aW9uLncqdV91bml0c190b19waXhlbHMpO3ZfZ2FtbWFfc2NhbGU9ZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZS9leHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO3ZfdGV4X2E9dmVjMihhX2xpbmVzb2Zhcip1X3BhdHRlcm5zY2FsZV9hLngvZmxvb3J3aWR0aCxub3JtYWwueSp1X3BhdHRlcm5zY2FsZV9hLnkrdV90ZXhfeV9hKTt2X3RleF9iPXZlYzIoYV9saW5lc29mYXIqdV9wYXR0ZXJuc2NhbGVfYi54L2Zsb29yd2lkdGgsbm9ybWFsLnkqdV9wYXR0ZXJuc2NhbGVfYi55K3VfdGV4X3lfYik7dl93aWR0aDI9dmVjMihvdXRzZXQsaW5zZXQpO30iKSxwcj12cigidW5pZm9ybSBmbG9hdCB1X2ZhZGVfdDt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMDt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMTt2YXJ5aW5nIHZlYzIgdl9wb3MwO3ZhcnlpbmcgdmVjMiB2X3BvczE7dW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfbG93O3VuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2hpZ2g7dW5pZm9ybSBmbG9hdCB1X3NhdHVyYXRpb25fZmFjdG9yO3VuaWZvcm0gZmxvYXQgdV9jb250cmFzdF9mYWN0b3I7dW5pZm9ybSB2ZWMzIHVfc3Bpbl93ZWlnaHRzO3ZvaWQgbWFpbigpIHt2ZWM0IGNvbG9yMD10ZXh0dXJlMkQodV9pbWFnZTAsdl9wb3MwKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZTEsdl9wb3MxKTtpZiAoY29sb3IwLmEgPiAwLjApIHtjb2xvcjAucmdiPWNvbG9yMC5yZ2IvY29sb3IwLmE7fWlmIChjb2xvcjEuYSA+IDAuMCkge2NvbG9yMS5yZ2I9Y29sb3IxLnJnYi9jb2xvcjEuYTt9dmVjNCBjb2xvcj1taXgoY29sb3IwLGNvbG9yMSx1X2ZhZGVfdCk7Y29sb3IuYSo9dV9vcGFjaXR5O3ZlYzMgcmdiPWNvbG9yLnJnYjtyZ2I9dmVjMyhkb3QocmdiLHVfc3Bpbl93ZWlnaHRzLnh5eiksZG90KHJnYix1X3NwaW5fd2VpZ2h0cy56eHkpLGRvdChyZ2IsdV9zcGluX3dlaWdodHMueXp4KSk7ZmxvYXQgYXZlcmFnZT0oY29sb3Iucitjb2xvci5nK2NvbG9yLmIpLzMuMDtyZ2IrPShhdmVyYWdlLXJnYikqdV9zYXR1cmF0aW9uX2ZhY3RvcjtyZ2I9KHJnYi0wLjUpKnVfY29udHJhc3RfZmFjdG9yKzAuNTt2ZWMzIHVfaGlnaF92ZWM9dmVjMyh1X2JyaWdodG5lc3NfbG93LHVfYnJpZ2h0bmVzc19sb3csdV9icmlnaHRuZXNzX2xvdyk7dmVjMyB1X2xvd192ZWM9dmVjMyh1X2JyaWdodG5lc3NfaGlnaCx1X2JyaWdodG5lc3NfaGlnaCx1X2JyaWdodG5lc3NfaGlnaCk7Z2xfRnJhZ0NvbG9yPXZlYzQobWl4KHVfaGlnaF92ZWMsdV9sb3dfdmVjLHJnYikqY29sb3IuYSxjb2xvci5hKTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfdGxfcGFyZW50O3VuaWZvcm0gZmxvYXQgdV9zY2FsZV9wYXJlbnQ7dW5pZm9ybSBmbG9hdCB1X2J1ZmZlcl9zY2FsZTthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO3ZhcnlpbmcgdmVjMiB2X3BvczA7dmFyeWluZyB2ZWMyIHZfcG9zMTt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zMD0oKChhX3RleHR1cmVfcG9zLzgxOTIuMCktMC41KS91X2J1ZmZlcl9zY2FsZSApKzAuNTt2X3BvczE9KHZfcG9zMCp1X3NjYWxlX3BhcmVudCkrdV90bF9wYXJlbnQ7fSIpLGRyPXZyKCJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7dmFyeWluZyB2ZWMyIHZfdGV4O3ZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5sb3dwIGZsb2F0IGFscGhhPW9wYWNpdHkqdl9mYWRlX29wYWNpdHk7Z2xfRnJhZ0NvbG9yPXRleHR1cmUyRCh1X3RleHR1cmUsdl90ZXgpKmFscGhhO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImNvbnN0IGZsb2F0IFBJPTMuMTQxNTkyNjUzNTg5NzkzO2F0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7YXR0cmlidXRlIHZlYzQgYV9waXhlbG9mZnNldDthdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7YXR0cmlidXRlIGZsb2F0IGFfZmFkZV9vcGFjaXR5O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfem9vbV9jb25zdGFudDt1bmlmb3JtIGJvb2wgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemVfdDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZTt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7dW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO3VuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfbGFiZWxfcGxhbmVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2Nvb3JkX21hdHJpeDt1bmlmb3JtIGJvb2wgdV9pc190ZXh0O3VuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO3VuaWZvcm0gdmVjMiB1X3RleHNpemU7dmFyeWluZyB2ZWMyIHZfdGV4O3ZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG52ZWMyIGFfcG9zPWFfcG9zX29mZnNldC54eTt2ZWMyIGFfb2Zmc2V0PWFfcG9zX29mZnNldC56dzt2ZWMyIGFfdGV4PWFfZGF0YS54eTt2ZWMyIGFfc2l6ZT1hX2RhdGEuenc7ZmxvYXQgYV9zaXplX21pbj1mbG9vcihhX3NpemVbMF0qMC41KTt2ZWMyIGFfcHhvZmZzZXQ9YV9waXhlbG9mZnNldC54eTt2ZWMyIGFfbWluRm9udFNjYWxlPWFfcGl4ZWxvZmZzZXQuencvMjU2LjA7aGlnaHAgZmxvYXQgc2VnbWVudF9hbmdsZT0tYV9wcm9qZWN0ZWRfcG9zWzJdO2Zsb2F0IHNpemU7aWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPW1peChhX3NpemVfbWluLGFfc2l6ZVsxXSx1X3NpemVfdCkvMTI4LjA7fSBlbHNlIGlmICh1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPWFfc2l6ZV9taW4vMTI4LjA7fSBlbHNlIHtzaXplPXVfc2l6ZTt9dmVjNCBwcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7aGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZT1wcm9qZWN0ZWRQb2ludC53O2hpZ2hwIGZsb2F0IGRpc3RhbmNlX3JhdGlvPXVfcGl0Y2hfd2l0aF9tYXAgP1xuY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZS91X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgOlxudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlL2NhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7aGlnaHAgZmxvYXQgcGVyc3BlY3RpdmVfcmF0aW89Y2xhbXAoMC41KzAuNSpkaXN0YW5jZV9yYXRpbywwLjAsNC4wKTtzaXplKj1wZXJzcGVjdGl2ZV9yYXRpbztmbG9hdCBmb250U2NhbGU9dV9pc190ZXh0ID8gc2l6ZS8yNC4wIDogc2l6ZTtoaWdocCBmbG9hdCBzeW1ib2xfcm90YXRpb249MC4wO2lmICh1X3JvdGF0ZV9zeW1ib2wpIHt2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MrdmVjMigxLDApLDAsMSk7dmVjMiBhPXByb2plY3RlZFBvaW50Lnh5L3Byb2plY3RlZFBvaW50Lnc7dmVjMiBiPW9mZnNldFByb2plY3RlZFBvaW50Lnh5L29mZnNldFByb2plY3RlZFBvaW50Lnc7c3ltYm9sX3JvdGF0aW9uPWF0YW4oKGIueS1hLnkpL3VfYXNwZWN0X3JhdGlvLGIueC1hLngpO31oaWdocCBmbG9hdCBhbmdsZV9zaW49c2luKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTtoaWdocCBmbG9hdCBhbmdsZV9jb3M9Y29zKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTttYXQyIHJvdGF0aW9uX21hdHJpeD1tYXQyKGFuZ2xlX2NvcywtMS4wKmFuZ2xlX3NpbixhbmdsZV9zaW4sYW5nbGVfY29zKTt2ZWM0IHByb2plY3RlZF9wb3M9dV9sYWJlbF9wbGFuZV9tYXRyaXgqdmVjNChhX3Byb2plY3RlZF9wb3MueHksMC4wLDEuMCk7Z2xfUG9zaXRpb249dV9jb29yZF9tYXRyaXgqdmVjNChwcm9qZWN0ZWRfcG9zLnh5L3Byb2plY3RlZF9wb3Mudytyb3RhdGlvbl9tYXRyaXgqKGFfb2Zmc2V0LzMyLjAqbWF4KGFfbWluRm9udFNjYWxlLGZvbnRTY2FsZSkrYV9weG9mZnNldC8xNi4wKSwwLjAsMS4wKTt2X3RleD1hX3RleC91X3RleHNpemU7dmVjMiBmYWRlX29wYWNpdHk9dW5wYWNrX29wYWNpdHkoYV9mYWRlX29wYWNpdHkpO2Zsb2F0IGZhZGVfY2hhbmdlPWZhZGVfb3BhY2l0eVsxXSA+IDAuNSA/IHVfZmFkZV9jaGFuZ2UgOi11X2ZhZGVfY2hhbmdlO3ZfZmFkZV9vcGFjaXR5PW1heCgwLjAsbWluKDEuMCxmYWRlX29wYWNpdHlbMF0rZmFkZV9jaGFuZ2UpKTt9IiksZ3I9dnIoIiNkZWZpbmUgU0RGX1BYIDguMFxudW5pZm9ybSBib29sIHVfaXNfaGFsbzt1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2dhbW1hX3NjYWxlO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIGJvb2wgdV9pc190ZXh0O3ZhcnlpbmcgdmVjMiB2X2RhdGEwO3ZhcnlpbmcgdmVjMyB2X2RhdGExO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbmZsb2F0IEVER0VfR0FNTUE9MC4xMDUvdV9kZXZpY2VfcGl4ZWxfcmF0aW87dmVjMiB0ZXg9dl9kYXRhMC54eTtmbG9hdCBnYW1tYV9zY2FsZT12X2RhdGExLng7ZmxvYXQgc2l6ZT12X2RhdGExLnk7ZmxvYXQgZmFkZV9vcGFjaXR5PXZfZGF0YTFbMl07ZmxvYXQgZm9udFNjYWxlPXVfaXNfdGV4dCA/IHNpemUvMjQuMCA6IHNpemU7bG93cCB2ZWM0IGNvbG9yPWZpbGxfY29sb3I7aGlnaHAgZmxvYXQgZ2FtbWE9RURHRV9HQU1NQS8oZm9udFNjYWxlKnVfZ2FtbWFfc2NhbGUpO2xvd3AgZmxvYXQgYnVmZj0oMjU2LjAtNjQuMCkvMjU2LjA7aWYgKHVfaXNfaGFsbykge2NvbG9yPWhhbG9fY29sb3I7Z2FtbWE9KGhhbG9fYmx1cioxLjE5L1NERl9QWCtFREdFX0dBTU1BKS8oZm9udFNjYWxlKnVfZ2FtbWFfc2NhbGUpO2J1ZmY9KDYuMC1oYWxvX3dpZHRoL2ZvbnRTY2FsZSkvU0RGX1BYO31sb3dwIGZsb2F0IGRpc3Q9dGV4dHVyZTJEKHVfdGV4dHVyZSx0ZXgpLmE7aGlnaHAgZmxvYXQgZ2FtbWFfc2NhbGVkPWdhbW1hKmdhbW1hX3NjYWxlO2hpZ2hwIGZsb2F0IGFscGhhPXNtb290aHN0ZXAoYnVmZi1nYW1tYV9zY2FsZWQsYnVmZitnYW1tYV9zY2FsZWQsZGlzdCk7Z2xfRnJhZ0NvbG9yPWNvbG9yKihhbHBoYSpvcGFjaXR5KmZhZGVfb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiY29uc3QgZmxvYXQgUEk9My4xNDE1OTI2NTM1ODk3OTM7YXR0cmlidXRlIHZlYzQgYV9wb3Nfb2Zmc2V0O2F0dHJpYnV0ZSB2ZWM0IGFfZGF0YTthdHRyaWJ1dGUgdmVjNCBhX3BpeGVsb2Zmc2V0O2F0dHJpYnV0ZSB2ZWMzIGFfcHJvamVjdGVkX3BvczthdHRyaWJ1dGUgZmxvYXQgYV9mYWRlX29wYWNpdHk7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZV90O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1hdDQgdV9sYWJlbF9wbGFuZV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfY29vcmRfbWF0cml4O3VuaWZvcm0gYm9vbCB1X2lzX3RleHQ7dW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3BpdGNoO3VuaWZvcm0gYm9vbCB1X3JvdGF0ZV9zeW1ib2w7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2FzcGVjdF9yYXRpbzt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt1bmlmb3JtIGZsb2F0IHVfZmFkZV9jaGFuZ2U7dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt2YXJ5aW5nIHZlYzIgdl9kYXRhMDt2YXJ5aW5nIHZlYzMgdl9kYXRhMTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52ZWMyIGFfcG9zPWFfcG9zX29mZnNldC54eTt2ZWMyIGFfb2Zmc2V0PWFfcG9zX29mZnNldC56dzt2ZWMyIGFfdGV4PWFfZGF0YS54eTt2ZWMyIGFfc2l6ZT1hX2RhdGEuenc7ZmxvYXQgYV9zaXplX21pbj1mbG9vcihhX3NpemVbMF0qMC41KTt2ZWMyIGFfcHhvZmZzZXQ9YV9waXhlbG9mZnNldC54eTtoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlPS1hX3Byb2plY3RlZF9wb3NbMl07ZmxvYXQgc2l6ZTtpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9bWl4KGFfc2l6ZV9taW4sYV9zaXplWzFdLHVfc2l6ZV90KS8xMjguMDt9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9YV9zaXplX21pbi8xMjguMDt9IGVsc2Uge3NpemU9dV9zaXplO312ZWM0IHByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW89dV9waXRjaF93aXRoX21hcCA/XG5jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlL3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41KmRpc3RhbmNlX3JhdGlvLDAuMCw0LjApO3NpemUqPXBlcnNwZWN0aXZlX3JhdGlvO2Zsb2F0IGZvbnRTY2FsZT11X2lzX3RleHQgPyBzaXplLzI0LjAgOiBzaXplO2hpZ2hwIGZsb2F0IHN5bWJvbF9yb3RhdGlvbj0wLjA7aWYgKHVfcm90YXRlX3N5bWJvbCkge3ZlYzQgb2Zmc2V0UHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3Bvcyt2ZWMyKDEsMCksMCwxKTt2ZWMyIGE9cHJvamVjdGVkUG9pbnQueHkvcHJvamVjdGVkUG9pbnQudzt2ZWMyIGI9b2Zmc2V0UHJvamVjdGVkUG9pbnQueHkvb2Zmc2V0UHJvamVjdGVkUG9pbnQudztzeW1ib2xfcm90YXRpb249YXRhbigoYi55LWEueSkvdV9hc3BlY3RfcmF0aW8sYi54LWEueCk7fWhpZ2hwIGZsb2F0IGFuZ2xlX3Npbj1zaW4oc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO2hpZ2hwIGZsb2F0IGFuZ2xlX2Nvcz1jb3Moc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO21hdDIgcm90YXRpb25fbWF0cml4PW1hdDIoYW5nbGVfY29zLC0xLjAqYW5nbGVfc2luLGFuZ2xlX3NpbixhbmdsZV9jb3MpO3ZlYzQgcHJvamVjdGVkX3Bvcz11X2xhYmVsX3BsYW5lX21hdHJpeCp2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwwLjAsMS4wKTtnbF9Qb3NpdGlvbj11X2Nvb3JkX21hdHJpeCp2ZWM0KHByb2plY3RlZF9wb3MueHkvcHJvamVjdGVkX3Bvcy53K3JvdGF0aW9uX21hdHJpeCooYV9vZmZzZXQvMzIuMCpmb250U2NhbGUrYV9weG9mZnNldCksMC4wLDEuMCk7ZmxvYXQgZ2FtbWFfc2NhbGU9Z2xfUG9zaXRpb24udzt2ZWMyIGZhZGVfb3BhY2l0eT11bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7ZmxvYXQgZmFkZV9jaGFuZ2U9ZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6LXVfZmFkZV9jaGFuZ2U7ZmxvYXQgaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eT1tYXgoMC4wLG1pbigxLjAsZmFkZV9vcGFjaXR5WzBdK2ZhZGVfY2hhbmdlKSk7dl9kYXRhMD1hX3RleC91X3RleHNpemU7dl9kYXRhMT12ZWMzKGdhbW1hX3NjYWxlLHNpemUsaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eSk7fSIpLG1yPXZyKCIjZGVmaW5lIFNERl9QWCA4LjBcbiNkZWZpbmUgU0RGIDEuMFxuI2RlZmluZSBJQ09OIDAuMFxudW5pZm9ybSBib29sIHVfaXNfaGFsbzt1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7dW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlX2ljb247dW5pZm9ybSBoaWdocCBmbG9hdCB1X2dhbW1hX3NjYWxlO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt2YXJ5aW5nIHZlYzQgdl9kYXRhMDt2YXJ5aW5nIHZlYzQgdl9kYXRhMTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG5mbG9hdCBmYWRlX29wYWNpdHk9dl9kYXRhMVsyXTtpZiAodl9kYXRhMS53PT1JQ09OKSB7dmVjMiB0ZXhfaWNvbj12X2RhdGEwLnp3O2xvd3AgZmxvYXQgYWxwaGE9b3BhY2l0eSpmYWRlX29wYWNpdHk7Z2xfRnJhZ0NvbG9yPXRleHR1cmUyRCh1X3RleHR1cmVfaWNvbix0ZXhfaWNvbikqYWxwaGE7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG5yZXR1cm47fXZlYzIgdGV4PXZfZGF0YTAueHk7ZmxvYXQgRURHRV9HQU1NQT0wLjEwNS91X2RldmljZV9waXhlbF9yYXRpbztmbG9hdCBnYW1tYV9zY2FsZT12X2RhdGExLng7ZmxvYXQgc2l6ZT12X2RhdGExLnk7ZmxvYXQgZm9udFNjYWxlPXNpemUvMjQuMDtsb3dwIHZlYzQgY29sb3I9ZmlsbF9jb2xvcjtoaWdocCBmbG9hdCBnYW1tYT1FREdFX0dBTU1BLyhmb250U2NhbGUqdV9nYW1tYV9zY2FsZSk7bG93cCBmbG9hdCBidWZmPSgyNTYuMC02NC4wKS8yNTYuMDtpZiAodV9pc19oYWxvKSB7Y29sb3I9aGFsb19jb2xvcjtnYW1tYT0oaGFsb19ibHVyKjEuMTkvU0RGX1BYK0VER0VfR0FNTUEpLyhmb250U2NhbGUqdV9nYW1tYV9zY2FsZSk7YnVmZj0oNi4wLWhhbG9fd2lkdGgvZm9udFNjYWxlKS9TREZfUFg7fWxvd3AgZmxvYXQgZGlzdD10ZXh0dXJlMkQodV90ZXh0dXJlLHRleCkuYTtoaWdocCBmbG9hdCBnYW1tYV9zY2FsZWQ9Z2FtbWEqZ2FtbWFfc2NhbGU7aGlnaHAgZmxvYXQgYWxwaGE9c21vb3Roc3RlcChidWZmLWdhbW1hX3NjYWxlZCxidWZmK2dhbW1hX3NjYWxlZCxkaXN0KTtnbF9GcmFnQ29sb3I9Y29sb3IqKGFscGhhKm9wYWNpdHkqZmFkZV9vcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJjb25zdCBmbG9hdCBQST0zLjE0MTU5MjY1MzU4OTc5MzthdHRyaWJ1dGUgdmVjNCBhX3Bvc19vZmZzZXQ7YXR0cmlidXRlIHZlYzQgYV9kYXRhO2F0dHJpYnV0ZSB2ZWMzIGFfcHJvamVjdGVkX3BvczthdHRyaWJ1dGUgZmxvYXQgYV9mYWRlX29wYWNpdHk7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZV90O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1hdDQgdV9sYWJlbF9wbGFuZV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfY29vcmRfbWF0cml4O3VuaWZvcm0gYm9vbCB1X2lzX3RleHQ7dW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3BpdGNoO3VuaWZvcm0gYm9vbCB1X3JvdGF0ZV9zeW1ib2w7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2FzcGVjdF9yYXRpbzt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt1bmlmb3JtIGZsb2F0IHVfZmFkZV9jaGFuZ2U7dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIHZlYzIgdV90ZXhzaXplX2ljb247dmFyeWluZyB2ZWM0IHZfZGF0YTA7dmFyeWluZyB2ZWM0IHZfZGF0YTE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxudmVjMiBhX3Bvcz1hX3Bvc19vZmZzZXQueHk7dmVjMiBhX29mZnNldD1hX3Bvc19vZmZzZXQuenc7dmVjMiBhX3RleD1hX2RhdGEueHk7dmVjMiBhX3NpemU9YV9kYXRhLnp3O2Zsb2F0IGFfc2l6ZV9taW49Zmxvb3IoYV9zaXplWzBdKjAuNSk7ZmxvYXQgaXNfc2RmPWFfc2l6ZVswXS0yLjAqYV9zaXplX21pbjtoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlPS1hX3Byb2plY3RlZF9wb3NbMl07ZmxvYXQgc2l6ZTtpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9bWl4KGFfc2l6ZV9taW4sYV9zaXplWzFdLHVfc2l6ZV90KS8xMjguMDt9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9YV9zaXplX21pbi8xMjguMDt9IGVsc2Uge3NpemU9dV9zaXplO312ZWM0IHByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW89dV9waXRjaF93aXRoX21hcCA/XG5jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlL3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41KmRpc3RhbmNlX3JhdGlvLDAuMCw0LjApO3NpemUqPXBlcnNwZWN0aXZlX3JhdGlvO2Zsb2F0IGZvbnRTY2FsZT1zaXplLzI0LjA7aGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uPTAuMDtpZiAodV9yb3RhdGVfc3ltYm9sKSB7dmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zK3ZlYzIoMSwwKSwwLDEpO3ZlYzIgYT1wcm9qZWN0ZWRQb2ludC54eS9wcm9qZWN0ZWRQb2ludC53O3ZlYzIgYj1vZmZzZXRQcm9qZWN0ZWRQb2ludC54eS9vZmZzZXRQcm9qZWN0ZWRQb2ludC53O3N5bWJvbF9yb3RhdGlvbj1hdGFuKChiLnktYS55KS91X2FzcGVjdF9yYXRpbyxiLngtYS54KTt9aGlnaHAgZmxvYXQgYW5nbGVfc2luPXNpbihzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7aGlnaHAgZmxvYXQgYW5nbGVfY29zPWNvcyhzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7bWF0MiByb3RhdGlvbl9tYXRyaXg9bWF0MihhbmdsZV9jb3MsLTEuMCphbmdsZV9zaW4sYW5nbGVfc2luLGFuZ2xlX2Nvcyk7dmVjNCBwcm9qZWN0ZWRfcG9zPXVfbGFiZWxfcGxhbmVfbWF0cml4KnZlYzQoYV9wcm9qZWN0ZWRfcG9zLnh5LDAuMCwxLjApO2dsX1Bvc2l0aW9uPXVfY29vcmRfbWF0cml4KnZlYzQocHJvamVjdGVkX3Bvcy54eS9wcm9qZWN0ZWRfcG9zLncrcm90YXRpb25fbWF0cml4KihhX29mZnNldC8zMi4wKmZvbnRTY2FsZSksMC4wLDEuMCk7ZmxvYXQgZ2FtbWFfc2NhbGU9Z2xfUG9zaXRpb24udzt2ZWMyIGZhZGVfb3BhY2l0eT11bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7ZmxvYXQgZmFkZV9jaGFuZ2U9ZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6LXVfZmFkZV9jaGFuZ2U7ZmxvYXQgaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eT1tYXgoMC4wLG1pbigxLjAsZmFkZV9vcGFjaXR5WzBdK2ZhZGVfY2hhbmdlKSk7dl9kYXRhMC54eT1hX3RleC91X3RleHNpemU7dl9kYXRhMC56dz1hX3RleC91X3RleHNpemVfaWNvbjt2X2RhdGExPXZlYzQoZ2FtbWFfc2NhbGUsc2l6ZSxpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5LGlzX3NkZik7fSIpO2Z1bmN0aW9uIHZyKHQsZSl7dmFyIHI9LyNwcmFnbWEgbWFwYm94OiAoW1x3XSspIChbXHddKykgKFtcd10rKSAoW1x3XSspL2csbj17fTtyZXR1cm57ZnJhZ21lbnRTb3VyY2U6dD10LnJlcGxhY2UociwoZnVuY3Rpb24odCxlLHIsaSxhKXtyZXR1cm4gblthXT0hMCwiZGVmaW5lIj09PWU/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG52YXJ5aW5nICIrcisiICIraSsiICIrYSsiO1xuI2Vsc2VcbnVuaWZvcm0gIityKyIgIitpKyIgdV8iK2ErIjtcbiNlbmRpZlxuIjoiXG4jaWZkZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrcisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIn0pKSx2ZXJ0ZXhTb3VyY2U6ZT1lLnJlcGxhY2UociwoZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz0iZmxvYXQiPT09aT8idmVjMiI6InZlYzQiLHM9YS5tYXRjaCgvY29sb3IvKT8iY29sb3IiOm87cmV0dXJuIG5bYV0/ImRlZmluZSI9PT1lPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxudW5pZm9ybSBsb3dwIGZsb2F0IHVfIithKyJfdDtcbmF0dHJpYnV0ZSAiK3IrIiAiK28rIiBhXyIrYSsiO1xudmFyeWluZyAiK3IrIiAiK2krIiAiK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrcisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6InZlYzQiPT09cz8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK2ErIiA9IGFfIithKyI7XG4jZWxzZVxuICAgICIrcisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIjoiXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK2ErIiA9IHVucGFja19taXhfIitzKyIoYV8iK2ErIiwgdV8iK2ErIl90KTtcbiNlbHNlXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4iOiJkZWZpbmUiPT09ZT8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbnVuaWZvcm0gbG93cCBmbG9hdCB1XyIrYSsiX3Q7XG5hdHRyaWJ1dGUgIityKyIgIitvKyIgYV8iK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrcisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6InZlYzQiPT09cz8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IGFfIithKyI7XG4jZWxzZVxuICAgICIrcisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIjoiXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IHVucGFja19taXhfIitzKyIoYV8iK2ErIiwgdV8iK2ErIl90KTtcbiNlbHNlXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4ifSkpfX12YXIgeXI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwscHJlbHVkZTpHZSxiYWNrZ3JvdW5kOlllLGJhY2tncm91bmRQYXR0ZXJuOldlLGNpcmNsZTpaZSxjbGlwcGluZ01hc2s6WGUsaGVhdG1hcDpKZSxoZWF0bWFwVGV4dHVyZTpLZSxjb2xsaXNpb25Cb3g6UWUsY29sbGlzaW9uQ2lyY2xlOiRlLGRlYnVnOnRyLGZpbGw6ZXIsZmlsbE91dGxpbmU6cnIsZmlsbE91dGxpbmVQYXR0ZXJuOm5yLGZpbGxQYXR0ZXJuOmlyLGZpbGxFeHRydXNpb246YXIsZmlsbEV4dHJ1c2lvblBhdHRlcm46b3IsaGlsbHNoYWRlUHJlcGFyZTpzcixoaWxsc2hhZGU6bHIsbGluZTpjcixsaW5lR3JhZGllbnQ6dXIsbGluZVBhdHRlcm46aHIsbGluZVNERjpmcixyYXN0ZXI6cHIsc3ltYm9sSWNvbjpkcixzeW1ib2xTREY6Z3Isc3ltYm9sVGV4dEFuZEljb246bXJ9KSx4cj1mdW5jdGlvbigpe3RoaXMuYm91bmRQcm9ncmFtPW51bGwsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1udWxsLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9W10sdGhpcy5ib3VuZEluZGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFZlcnRleE9mZnNldD1udWxsLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyPW51bGwsdGhpcy52YW89bnVsbH07eHIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt0aGlzLmNvbnRleHQ9dDtmb3IodmFyIGw9dGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycy5sZW5ndGghPT1uLmxlbmd0aCxjPTA7IWwmJmM8bi5sZW5ndGg7YysrKXRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnNbY10hPT1uW2NdJiYobD0hMCk7dC5leHRWZXJ0ZXhBcnJheU9iamVjdCYmdGhpcy52YW8mJnRoaXMuYm91bmRQcm9ncmFtPT09ZSYmdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj09PXImJiFsJiZ0aGlzLmJvdW5kSW5kZXhCdWZmZXI9PT1pJiZ0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PT09YSYmdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9PT1vJiZ0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjI9PT1zPyh0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pLG8mJm8uYmluZCgpLGkmJmkuZHluYW1pY0RyYXcmJmkuYmluZCgpLHMmJnMuYmluZCgpKTp0aGlzLmZyZXNoQmluZChlLHIsbixpLGEsbyxzKX0seHIucHJvdG90eXBlLmZyZXNoQmluZD1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsPXQubnVtQXR0cmlidXRlcyxjPXRoaXMuY29udGV4dCx1PWMuZ2w7aWYoYy5leHRWZXJ0ZXhBcnJheU9iamVjdCl0aGlzLnZhbyYmdGhpcy5kZXN0cm95KCksdGhpcy52YW89Yy5leHRWZXJ0ZXhBcnJheU9iamVjdC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpLGMuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbykscz0wLHRoaXMuYm91bmRQcm9ncmFtPXQsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1lLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9cix0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bix0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PWksdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9YSx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjI9bztlbHNle3M9Yy5jdXJyZW50TnVtQXR0cmlidXRlc3x8MDtmb3IodmFyIGg9bDtoPHM7aCsrKXUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGgpfWUuZW5hYmxlQXR0cmlidXRlcyh1LHQpO2Zvcih2YXIgZj0wLHA9cjtmPHAubGVuZ3RoO2YrPTEpcFtmXS5lbmFibGVBdHRyaWJ1dGVzKHUsdCk7YSYmYS5lbmFibGVBdHRyaWJ1dGVzKHUsdCksbyYmby5lbmFibGVBdHRyaWJ1dGVzKHUsdCksZS5iaW5kKCksZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSk7Zm9yKHZhciBkPTAsZz1yO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIG09Z1tkXTttLmJpbmQoKSxtLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKX1hJiYoYS5iaW5kKCksYS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSkpLG4mJm4uYmluZCgpLG8mJihvLmJpbmQoKSxvLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKSksYy5jdXJyZW50TnVtQXR0cmlidXRlcz1sfSx4ci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudmFvJiYodGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKSx0aGlzLnZhbz1udWxsKX07dmFyIGJyPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dC5nbDt0aGlzLnByb2dyYW09YS5jcmVhdGVQcm9ncmFtKCk7dmFyIG89cj9yLmRlZmluZXMoKTpbXTtpJiZvLnB1c2goIiNkZWZpbmUgT1ZFUkRSQVdfSU5TUEVDVE9SOyIpO3ZhciBzPW8uY29uY2F0KEdlLmZyYWdtZW50U291cmNlLGUuZnJhZ21lbnRTb3VyY2UpLmpvaW4oIlxuIiksbD1vLmNvbmNhdChHZS52ZXJ0ZXhTb3VyY2UsZS52ZXJ0ZXhTb3VyY2UpLmpvaW4oIlxuIiksYz1hLmNyZWF0ZVNoYWRlcihhLkZSQUdNRU5UX1NIQURFUik7aWYoYS5pc0NvbnRleHRMb3N0KCkpdGhpcy5mYWlsZWRUb0NyZWF0ZT0hMDtlbHNle2Euc2hhZGVyU291cmNlKGMscyksYS5jb21waWxlU2hhZGVyKGMpLGEuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSxjKTt2YXIgdT1hLmNyZWF0ZVNoYWRlcihhLlZFUlRFWF9TSEFERVIpO2lmKGEuaXNDb250ZXh0TG9zdCgpKXRoaXMuZmFpbGVkVG9DcmVhdGU9ITA7ZWxzZXthLnNoYWRlclNvdXJjZSh1LGwpLGEuY29tcGlsZVNoYWRlcih1KSxhLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sdSk7Zm9yKHZhciBoPXI/ci5sYXlvdXRBdHRyaWJ1dGVzOltdLGY9MDtmPGgubGVuZ3RoO2YrKylhLmJpbmRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sZixoW2ZdLm5hbWUpO2EubGlua1Byb2dyYW0odGhpcy5wcm9ncmFtKSxhLmRlbGV0ZVNoYWRlcih1KSxhLmRlbGV0ZVNoYWRlcihjKSx0aGlzLm51bUF0dHJpYnV0ZXM9YS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSxhLkFDVElWRV9BVFRSSUJVVEVTKSx0aGlzLmF0dHJpYnV0ZXM9e307Zm9yKHZhciBwPXt9LGQ9MDtkPHRoaXMubnVtQXR0cmlidXRlcztkKyspe3ZhciBnPWEuZ2V0QWN0aXZlQXR0cmliKHRoaXMucHJvZ3JhbSxkKTtnJiYodGhpcy5hdHRyaWJ1dGVzW2cubmFtZV09YS5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sZy5uYW1lKSl9Zm9yKHZhciBtPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sYS5BQ1RJVkVfVU5JRk9STVMpLHY9MDt2PG07disrKXt2YXIgeT1hLmdldEFjdGl2ZVVuaWZvcm0odGhpcy5wcm9ncmFtLHYpO3kmJihwW3kubmFtZV09YS5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLHkubmFtZSkpfXRoaXMuZml4ZWRVbmlmb3Jtcz1uKHQscCksdGhpcy5iaW5kZXJVbmlmb3Jtcz1yP3IuZ2V0VW5pZm9ybXModCxwKTpbXX19fTtmdW5jdGlvbiBfcih0LGUscil7dmFyIG49MS9mZShyLDEsZS50cmFuc2Zvcm0udGlsZVpvb20pLGk9TWF0aC5wb3coMixyLnRpbGVJRC5vdmVyc2NhbGVkWiksYT1yLnRpbGVTaXplKk1hdGgucG93KDIsZS50cmFuc2Zvcm0udGlsZVpvb20pL2ksbz1hKihyLnRpbGVJRC5jYW5vbmljYWwueCtyLnRpbGVJRC53cmFwKmkpLHM9YSpyLnRpbGVJRC5jYW5vbmljYWwueTtyZXR1cm57dV9pbWFnZTowLHVfdGV4c2l6ZTpyLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsdV9zY2FsZTpbbix0LmZyb21TY2FsZSx0LnRvU2NhbGVdLHVfZmFkZTp0LnQsdV9waXhlbF9jb29yZF91cHBlcjpbbz4+MTYscz4+MTZdLHVfcGl4ZWxfY29vcmRfbG93ZXI6WzY1NTM1Jm8sNjU1MzUmc119fWJyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCxkLGcpe3ZhciBtLHY9dC5nbDtpZighdGhpcy5mYWlsZWRUb0NyZWF0ZSl7Zm9yKHZhciB5IGluIHQucHJvZ3JhbS5zZXQodGhpcy5wcm9ncmFtKSx0LnNldERlcHRoTW9kZShyKSx0LnNldFN0ZW5jaWxNb2RlKG4pLHQuc2V0Q29sb3JNb2RlKGkpLHQuc2V0Q3VsbEZhY2UoYSksdGhpcy5maXhlZFVuaWZvcm1zKXRoaXMuZml4ZWRVbmlmb3Jtc1t5XS5zZXQob1t5XSk7cCYmcC5zZXRVbmlmb3Jtcyh0LHRoaXMuYmluZGVyVW5pZm9ybXMsaCx7em9vbTpmfSk7Zm9yKHZhciB4PShtPXt9LG1bdi5MSU5FU109MixtW3YuVFJJQU5HTEVTXT0zLG1bdi5MSU5FX1NUUklQXT0xLG0pW2VdLGI9MCxfPXUuZ2V0KCk7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdLFQ9dy52YW9zfHwody52YW9zPXt9KTsoVFtzXXx8KFRbc109bmV3IHhyKSkuYmluZCh0LHRoaXMsbCxwP3AuZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCk6W10sYyx3LnZlcnRleE9mZnNldCxkLGcpLHYuZHJhd0VsZW1lbnRzKGUsdy5wcmltaXRpdmVMZW5ndGgqeCx2LlVOU0lHTkVEX1NIT1JULHcucHJpbWl0aXZlT2Zmc2V0KngqMil9fX07dmFyIHdyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXIuc3R5bGUubGlnaHQsbz1hLnByb3BlcnRpZXMuZ2V0KCJwb3NpdGlvbiIpLHM9W28ueCxvLnksby56XSxsPXQuY3JlYXRlJDEoKTsidmlld3BvcnQiPT09YS5wcm9wZXJ0aWVzLmdldCgiYW5jaG9yIikmJnQuZnJvbVJvdGF0aW9uKGwsLXIudHJhbnNmb3JtLmFuZ2xlKSx0LnRyYW5zZm9ybU1hdDMocyxzLGwpO3ZhciBjPWEucHJvcGVydGllcy5nZXQoImNvbG9yIik7cmV0dXJue3VfbWF0cml4OmUsdV9saWdodHBvczpzLHVfbGlnaHRpbnRlbnNpdHk6YS5wcm9wZXJ0aWVzLmdldCgiaW50ZW5zaXR5IiksdV9saWdodGNvbG9yOltjLnIsYy5nLGMuYl0sdV92ZXJ0aWNhbF9ncmFkaWVudDorbix1X29wYWNpdHk6aX19LFRyPWZ1bmN0aW9uKGUscixuLGksYSxvLHMpe3JldHVybiB0LmV4dGVuZCh3cihlLHIsbixpKSxfcihvLHIscykse3VfaGVpZ2h0X2ZhY3RvcjotTWF0aC5wb3coMixhLm92ZXJzY2FsZWRaKS9zLnRpbGVTaXplLzh9KX0sa3I9ZnVuY3Rpb24odCl7cmV0dXJue3VfbWF0cml4OnR9fSxNcj1mdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gdC5leHRlbmQoa3IoZSksX3IobixyLGkpKX0sQXI9ZnVuY3Rpb24odCxlKXtyZXR1cm57dV9tYXRyaXg6dCx1X3dvcmxkOmV9fSxTcj1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiB0LmV4dGVuZChNcihlLHIsbixpKSx7dV93b3JsZDphfSl9LEVyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhLG8scz1lLnRyYW5zZm9ybTtpZigibWFwIj09PWkucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Iikpe3ZhciBsPWZlKG4sMSxzLnpvb20pO2E9ITAsbz1bbCxsXX1lbHNlIGE9ITEsbz1zLnBpeGVsc1RvR0xVbml0cztyZXR1cm57dV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOnMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx1X3NjYWxlX3dpdGhfbWFwOisoIm1hcCI9PT1pLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLXNjYWxlIikpLHVfbWF0cml4OmUudHJhbnNsYXRlUG9zTWF0cml4KHIucG9zTWF0cml4LG4saS5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSxpLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiKSksdV9waXRjaF93aXRoX21hcDorYSx1X2RldmljZV9waXhlbF9yYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx1X2V4dHJ1ZGVfc2NhbGU6b319LENyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mZShyLDEsZS56b29tKSxpPU1hdGgucG93KDIsZS56b29tLXIudGlsZUlELm92ZXJzY2FsZWRaKSxhPXIudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpO3JldHVybnt1X21hdHJpeDp0LHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTplLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV9waXhlbHNfdG9fdGlsZV91bml0czpuLHVfZXh0cnVkZV9zY2FsZTpbZS5waXhlbHNUb0dMVW5pdHNbMF0vKG4qaSksZS5waXhlbHNUb0dMVW5pdHNbMV0vKG4qaSldLHVfb3ZlcnNjYWxlX2ZhY3RvcjphfX0sTHI9ZnVuY3Rpb24odCxlLHIpe3JldHVybnt1X21hdHJpeDp0LHVfaW52X21hdHJpeDplLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpyLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV92aWV3cG9ydF9zaXplOltyLndpZHRoLHIuaGVpZ2h0XX19LFByPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9MSkse3VfbWF0cml4OnQsdV9jb2xvcjplLHVfb3ZlcmxheTowLHVfb3ZlcmxheV9zY2FsZTpyfX0sSXI9ZnVuY3Rpb24odCl7cmV0dXJue3VfbWF0cml4OnR9fSx6cj1mdW5jdGlvbih0LGUscixuKXtyZXR1cm57dV9tYXRyaXg6dCx1X2V4dHJ1ZGVfc2NhbGU6ZmUoZSwxLHIpLHVfaW50ZW5zaXR5Om59fSxPcj1mdW5jdGlvbihlLHIsbil7dmFyIGk9ZS50cmFuc2Zvcm07cmV0dXJue3VfbWF0cml4Ok5yKGUscixuKSx1X3JhdGlvOjEvZmUociwxLGkuem9vbSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdV91bml0c190b19waXhlbHM6WzEvaS5waXhlbHNUb0dMVW5pdHNbMF0sMS9pLnBpeGVsc1RvR0xVbml0c1sxXV19fSxEcj1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuZXh0ZW5kKE9yKGUscixuKSx7dV9pbWFnZTowfSl9LFJyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPWUudHJhbnNmb3JtLG89QnIocixhKTtyZXR1cm57dV9tYXRyaXg6TnIoZSxyLG4pLHVfdGV4c2l6ZTpyLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsdV9yYXRpbzoxL2ZlKHIsMSxhLnpvb20pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHVfaW1hZ2U6MCx1X3NjYWxlOltvLGkuZnJvbVNjYWxlLGkudG9TY2FsZV0sdV9mYWRlOmkudCx1X3VuaXRzX3RvX3BpeGVsczpbMS9hLnBpeGVsc1RvR0xVbml0c1swXSwxL2EucGl4ZWxzVG9HTFVuaXRzWzFdXX19LEZyPWZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG89ZS5saW5lQXRsYXMscz1CcihyLGUudHJhbnNmb3JtKSxsPSJyb3VuZCI9PT1uLmxheW91dC5nZXQoImxpbmUtY2FwIiksYz1vLmdldERhc2goaS5mcm9tLGwpLHU9by5nZXREYXNoKGkudG8sbCksaD1jLndpZHRoKmEuZnJvbVNjYWxlLGY9dS53aWR0aCphLnRvU2NhbGU7cmV0dXJuIHQuZXh0ZW5kKE9yKGUscixuKSx7dV9wYXR0ZXJuc2NhbGVfYTpbcy9oLC1jLmhlaWdodC8yXSx1X3BhdHRlcm5zY2FsZV9iOltzL2YsLXUuaGVpZ2h0LzJdLHVfc2RmZ2FtbWE6by53aWR0aC8oMjU2Kk1hdGgubWluKGgsZikqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8pLzIsdV9pbWFnZTowLHVfdGV4X3lfYTpjLnksdV90ZXhfeV9iOnUueSx1X21peDphLnR9KX07ZnVuY3Rpb24gQnIodCxlKXtyZXR1cm4gMS9mZSh0LDEsZS50aWxlWm9vbSl9ZnVuY3Rpb24gTnIodCxlLHIpe3JldHVybiB0LnRyYW5zbGF0ZVBvc01hdHJpeChlLnRpbGVJRC5wb3NNYXRyaXgsZSxyLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUiKSxyLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUtYW5jaG9yIikpfXZhciBqcj1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybnt1X21hdHJpeDp0LHVfdGxfcGFyZW50OmUsdV9zY2FsZV9wYXJlbnQ6cix1X2J1ZmZlcl9zY2FsZToxLHVfZmFkZV90Om4ubWl4LHVfb3BhY2l0eTpuLm9wYWNpdHkqaS5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5IiksdV9pbWFnZTA6MCx1X2ltYWdlMToxLHVfYnJpZ2h0bmVzc19sb3c6aS5wYWludC5nZXQoInJhc3Rlci1icmlnaHRuZXNzLW1pbiIpLHVfYnJpZ2h0bmVzc19oaWdoOmkucGFpbnQuZ2V0KCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiKSx1X3NhdHVyYXRpb25fZmFjdG9yOihvPWkucGFpbnQuZ2V0KCJyYXN0ZXItc2F0dXJhdGlvbiIpLG8+MD8xLTEvKDEuMDAxLW8pOi1vKSx1X2NvbnRyYXN0X2ZhY3RvcjooYT1pLnBhaW50LmdldCgicmFzdGVyLWNvbnRyYXN0IiksYT4wPzEvKDEtYSk6MSthKSx1X3NwaW5fd2VpZ2h0czpVcihpLnBhaW50LmdldCgicmFzdGVyLWh1ZS1yb3RhdGUiKSl9O3ZhciBhLG99O2Z1bmN0aW9uIFVyKHQpe3QqPU1hdGguUEkvMTgwO3ZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCk7cmV0dXJuWygyKnIrMSkvMywoLU1hdGguc3FydCgzKSplLXIrMSkvMywoTWF0aC5zcXJ0KDMpKmUtcisxKS8zXX12YXIgVnIscXI9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9aS50cmFuc2Zvcm07cmV0dXJue3VfaXNfc2l6ZV96b29tX2NvbnN0YW50OisoImNvbnN0YW50Ij09PXR8fCJzb3VyY2UiPT09dCksdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ6KygiY29uc3RhbnQiPT09dHx8ImNhbWVyYSI9PT10KSx1X3NpemVfdDplP2UudVNpemVUOjAsdV9zaXplOmU/ZS51U2l6ZTowLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTp1LmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV9waXRjaDp1LnBpdGNoLzM2MCoyKk1hdGguUEksdV9yb3RhdGVfc3ltYm9sOityLHVfYXNwZWN0X3JhdGlvOnUud2lkdGgvdS5oZWlnaHQsdV9mYWRlX2NoYW5nZTppLm9wdGlvbnMuZmFkZUR1cmF0aW9uP2kuc3ltYm9sRmFkZUNoYW5nZToxLHVfbWF0cml4OmEsdV9sYWJlbF9wbGFuZV9tYXRyaXg6byx1X2Nvb3JkX21hdHJpeDpzLHVfaXNfdGV4dDorbCx1X3BpdGNoX3dpdGhfbWFwOituLHVfdGV4c2l6ZTpjLHVfdGV4dHVyZTowfX0sSHI9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMsdSxoKXt2YXIgZj1hLnRyYW5zZm9ybTtyZXR1cm4gdC5leHRlbmQocXIoZSxyLG4saSxhLG8scyxsLGMsdSkse3VfZ2FtbWFfc2NhbGU6aT9NYXRoLmNvcyhmLl9waXRjaCkqZi5jYW1lcmFUb0NlbnRlckRpc3RhbmNlOjEsdV9kZXZpY2VfcGl4ZWxfcmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdV9pc19oYWxvOitofSl9LEdyPWZ1bmN0aW9uKGUscixuLGksYSxvLHMsbCxjLHUpe3JldHVybiB0LmV4dGVuZChIcihlLHIsbixpLGEsbyxzLGwsITAsYywhMCkse3VfdGV4c2l6ZV9pY29uOnUsdV90ZXh0dXJlX2ljb246MX0pfSxZcj1mdW5jdGlvbih0LGUscil7cmV0dXJue3VfbWF0cml4OnQsdV9vcGFjaXR5OmUsdV9jb2xvcjpyfX0sV3I9ZnVuY3Rpb24oZSxyLG4saSxhLG8pe3JldHVybiB0LmV4dGVuZChmdW5jdGlvbih0LGUscixuKXt2YXIgaT1yLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQuZnJvbS50b1N0cmluZygpKSxhPXIuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odC50by50b1N0cmluZygpKSxvPXIuaW1hZ2VNYW5hZ2VyLmdldFBpeGVsU2l6ZSgpLHM9by53aWR0aCxsPW8uaGVpZ2h0LGM9TWF0aC5wb3coMixuLnRpbGVJRC5vdmVyc2NhbGVkWiksdT1uLnRpbGVTaXplKk1hdGgucG93KDIsci50cmFuc2Zvcm0udGlsZVpvb20pL2MsaD11KihuLnRpbGVJRC5jYW5vbmljYWwueCtuLnRpbGVJRC53cmFwKmMpLGY9dSpuLnRpbGVJRC5jYW5vbmljYWwueTtyZXR1cm57dV9pbWFnZTowLHVfcGF0dGVybl90bF9hOmkudGwsdV9wYXR0ZXJuX2JyX2E6aS5icix1X3BhdHRlcm5fdGxfYjphLnRsLHVfcGF0dGVybl9icl9iOmEuYnIsdV90ZXhzaXplOltzLGxdLHVfbWl4OmUudCx1X3BhdHRlcm5fc2l6ZV9hOmkuZGlzcGxheVNpemUsdV9wYXR0ZXJuX3NpemVfYjphLmRpc3BsYXlTaXplLHVfc2NhbGVfYTplLmZyb21TY2FsZSx1X3NjYWxlX2I6ZS50b1NjYWxlLHVfdGlsZV91bml0c190b19waXhlbHM6MS9mZShuLDEsci50cmFuc2Zvcm0udGlsZVpvb20pLHVfcGl4ZWxfY29vcmRfdXBwZXI6W2g+PjE2LGY+PjE2XSx1X3BpeGVsX2Nvb3JkX2xvd2VyOls2NTUzNSZoLDY1NTM1JmZdfX0oaSxvLG4sYSkse3VfbWF0cml4OmUsdV9vcGFjaXR5OnJ9KX0sWnI9e2ZpbGxFeHRydXNpb246ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9saWdodHBvczpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRwb3MpLHVfbGlnaHRpbnRlbnNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X2xpZ2h0aW50ZW5zaXR5KSx1X2xpZ2h0Y29sb3I6bmV3IHQuVW5pZm9ybTNmKGUsci51X2xpZ2h0Y29sb3IpLHVfdmVydGljYWxfZ3JhZGllbnQ6bmV3IHQuVW5pZm9ybTFmKGUsci51X3ZlcnRpY2FsX2dyYWRpZW50KSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpfX0sZmlsbEV4dHJ1c2lvblBhdHRlcm46ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9saWdodHBvczpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRwb3MpLHVfbGlnaHRpbnRlbnNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X2xpZ2h0aW50ZW5zaXR5KSx1X2xpZ2h0Y29sb3I6bmV3IHQuVW5pZm9ybTNmKGUsci51X2xpZ2h0Y29sb3IpLHVfdmVydGljYWxfZ3JhZGllbnQ6bmV3IHQuVW5pZm9ybTFmKGUsci51X3ZlcnRpY2FsX2dyYWRpZW50KSx1X2hlaWdodF9mYWN0b3I6bmV3IHQuVW5pZm9ybTFmKGUsci51X2hlaWdodF9mYWN0b3IpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KX19LGZpbGw6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxmaWxsUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3BpeGVsX2Nvb3JkX3VwcGVyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF91cHBlciksdV9waXhlbF9jb29yZF9sb3dlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfbG93ZXIpLHVfc2NhbGU6bmV3IHQuVW5pZm9ybTNmKGUsci51X3NjYWxlKSx1X2ZhZGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGUpfX0sZmlsbE91dGxpbmU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV93b3JsZDpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfd29ybGQpfX0sZmlsbE91dGxpbmVQYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfd29ybGQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X3dvcmxkKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3BpeGVsX2Nvb3JkX3VwcGVyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF91cHBlciksdV9waXhlbF9jb29yZF9sb3dlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfbG93ZXIpLHVfc2NhbGU6bmV3IHQuVW5pZm9ybTNmKGUsci51X3NjYWxlKSx1X2ZhZGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGUpfX0sY2lyY2xlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9zY2FsZV93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfc2NhbGVfd2l0aF9tYXApLHVfcGl0Y2hfd2l0aF9tYXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X3BpdGNoX3dpdGhfbWFwKSx1X2V4dHJ1ZGVfc2NhbGU6bmV3IHQuVW5pZm9ybTJmKGUsci51X2V4dHJ1ZGVfc2NhbGUpLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpfX0sY29sbGlzaW9uQm94OmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXhlbHNfdG9fdGlsZV91bml0czpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl4ZWxzX3RvX3RpbGVfdW5pdHMpLHVfZXh0cnVkZV9zY2FsZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfZXh0cnVkZV9zY2FsZSksdV9vdmVyc2NhbGVfZmFjdG9yOm5ldyB0LlVuaWZvcm0xZihlLHIudV9vdmVyc2NhbGVfZmFjdG9yKX19LGNvbGxpc2lvbkNpcmNsZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ludl9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X2ludl9tYXRyaXgpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV92aWV3cG9ydF9zaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV92aWV3cG9ydF9zaXplKX19LGRlYnVnOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfY29sb3I6bmV3IHQuVW5pZm9ybUNvbG9yKGUsci51X2NvbG9yKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X292ZXJsYXk6bmV3IHQuVW5pZm9ybTFpKGUsci51X292ZXJsYXkpLHVfb3ZlcmxheV9zY2FsZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3ZlcmxheV9zY2FsZSl9fSxjbGlwcGluZ01hc2s6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxoZWF0bWFwOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfZXh0cnVkZV9zY2FsZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZXh0cnVkZV9zY2FsZSksdV9pbnRlbnNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ludGVuc2l0eSksdV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxoZWF0bWFwVGV4dHVyZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3dvcmxkOm5ldyB0LlVuaWZvcm0yZihlLHIudV93b3JsZCksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfY29sb3JfcmFtcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfY29sb3JfcmFtcCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KX19LGhpbGxzaGFkZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV9sYXRyYW5nZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfbGF0cmFuZ2UpLHVfbGlnaHQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X2xpZ2h0KSx1X3NoYWRvdzpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfc2hhZG93KSx1X2hpZ2hsaWdodDpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfaGlnaGxpZ2h0KSx1X2FjY2VudDpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfYWNjZW50KX19LGhpbGxzaGFkZVByZXBhcmU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfZGltZW5zaW9uOm5ldyB0LlVuaWZvcm0yZihlLHIudV9kaW1lbnNpb24pLHVfem9vbTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfem9vbSksdV9tYXh6b29tOm5ldyB0LlVuaWZvcm0xZihlLHIudV9tYXh6b29tKSx1X3VucGFjazpuZXcgdC5Vbmlmb3JtNGYoZSxyLnVfdW5wYWNrKX19LGxpbmU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0yZihlLHIudV91bml0c190b19waXhlbHMpfX0sbGluZUdyYWRpZW50OmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X3JhdGlvKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdW5pdHNfdG9fcGl4ZWxzKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSl9fSxsaW5lUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X3JhdGlvKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV91bml0c190b19waXhlbHM6bmV3IHQuVW5pZm9ybTJmKGUsci51X3VuaXRzX3RvX3BpeGVscyksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSl9fSxsaW5lU0RGOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X3JhdGlvKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdW5pdHNfdG9fcGl4ZWxzKSx1X3BhdHRlcm5zY2FsZV9hOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuc2NhbGVfYSksdV9wYXR0ZXJuc2NhbGVfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybnNjYWxlX2IpLHVfc2RmZ2FtbWE6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NkZmdhbW1hKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV90ZXhfeV9hOm5ldyB0LlVuaWZvcm0xZihlLHIudV90ZXhfeV9hKSx1X3RleF95X2I6bmV3IHQuVW5pZm9ybTFmKGUsci51X3RleF95X2IpLHVfbWl4Om5ldyB0LlVuaWZvcm0xZihlLHIudV9taXgpfX0scmFzdGVyOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfdGxfcGFyZW50Om5ldyB0LlVuaWZvcm0yZihlLHIudV90bF9wYXJlbnQpLHVfc2NhbGVfcGFyZW50Om5ldyB0LlVuaWZvcm0xZihlLHIudV9zY2FsZV9wYXJlbnQpLHVfYnVmZmVyX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9idWZmZXJfc2NhbGUpLHVfZmFkZV90Om5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlX3QpLHVfb3BhY2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3BhY2l0eSksdV9pbWFnZTA6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlMCksdV9pbWFnZTE6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlMSksdV9icmlnaHRuZXNzX2xvdzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfYnJpZ2h0bmVzc19sb3cpLHVfYnJpZ2h0bmVzc19oaWdoOm5ldyB0LlVuaWZvcm0xZihlLHIudV9icmlnaHRuZXNzX2hpZ2gpLHVfc2F0dXJhdGlvbl9mYWN0b3I6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NhdHVyYXRpb25fZmFjdG9yKSx1X2NvbnRyYXN0X2ZhY3RvcjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY29udHJhc3RfZmFjdG9yKSx1X3NwaW5fd2VpZ2h0czpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc3Bpbl93ZWlnaHRzKX19LHN5bWJvbEljb246ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9pc19zaXplX3pvb21fY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfem9vbV9jb25zdGFudCksdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksdV9zaXplX3Q6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemVfdCksdV9zaXplOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zaXplKSx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLHVfcGl0Y2g6bmV3IHQuVW5pZm9ybTFmKGUsci51X3BpdGNoKSx1X3JvdGF0ZV9zeW1ib2w6bmV3IHQuVW5pZm9ybTFpKGUsci51X3JvdGF0ZV9zeW1ib2wpLHVfYXNwZWN0X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9hc3BlY3RfcmF0aW8pLHVfZmFkZV9jaGFuZ2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGVfY2hhbmdlKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xhYmVsX3BsYW5lX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbGFiZWxfcGxhbmVfbWF0cml4KSx1X2Nvb3JkX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfY29vcmRfbWF0cml4KSx1X2lzX3RleHQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3RleHQpLHVfcGl0Y2hfd2l0aF9tYXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X3BpdGNoX3dpdGhfbWFwKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfdGV4dHVyZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfdGV4dHVyZSl9fSxzeW1ib2xTREY6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9pc19zaXplX3pvb21fY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfem9vbV9jb25zdGFudCksdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksdV9zaXplX3Q6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemVfdCksdV9zaXplOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zaXplKSx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLHVfcGl0Y2g6bmV3IHQuVW5pZm9ybTFmKGUsci51X3BpdGNoKSx1X3JvdGF0ZV9zeW1ib2w6bmV3IHQuVW5pZm9ybTFpKGUsci51X3JvdGF0ZV9zeW1ib2wpLHVfYXNwZWN0X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9hc3BlY3RfcmF0aW8pLHVfZmFkZV9jaGFuZ2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGVfY2hhbmdlKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xhYmVsX3BsYW5lX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbGFiZWxfcGxhbmVfbWF0cml4KSx1X2Nvb3JkX21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfY29vcmRfbWF0cml4KSx1X2lzX3RleHQ6bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX3RleHQpLHVfcGl0Y2hfd2l0aF9tYXA6bmV3IHQuVW5pZm9ybTFpKGUsci51X3BpdGNoX3dpdGhfbWFwKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfdGV4dHVyZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfdGV4dHVyZSksdV9nYW1tYV9zY2FsZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZ2FtbWFfc2NhbGUpLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfaXNfaGFsbzpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfaGFsbyl9fSxzeW1ib2xUZXh0QW5kSWNvbjpmdW5jdGlvbihlLHIpe3JldHVybnt1X2lzX3NpemVfem9vbV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSx1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSx1X3NpemVfdDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZV90KSx1X3NpemU6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemUpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXRjaDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl0Y2gpLHVfcm90YXRlX3N5bWJvbDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcm90YXRlX3N5bWJvbCksdV9hc3BlY3RfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2FzcGVjdF9yYXRpbyksdV9mYWRlX2NoYW5nZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZV9jaGFuZ2UpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfbGFiZWxfcGxhbmVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9sYWJlbF9wbGFuZV9tYXRyaXgpLHVfY29vcmRfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9jb29yZF9tYXRyaXgpLHVfaXNfdGV4dDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfdGV4dCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV90ZXhzaXplX2ljb246bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemVfaWNvbiksdV90ZXh0dXJlOm5ldyB0LlVuaWZvcm0xaShlLHIudV90ZXh0dXJlKSx1X3RleHR1cmVfaWNvbjpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfdGV4dHVyZV9pY29uKSx1X2dhbW1hX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9nYW1tYV9zY2FsZSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV9pc19oYWxvOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19oYWxvKX19LGJhY2tncm91bmQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KSx1X2NvbG9yOm5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9jb2xvcil9fSxiYWNrZ3JvdW5kUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3BhdHRlcm5fdGxfYTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl90bF9hKSx1X3BhdHRlcm5fYnJfYTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl9icl9hKSx1X3BhdHRlcm5fdGxfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl90bF9iKSx1X3BhdHRlcm5fYnJfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl9icl9iKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfbWl4Om5ldyB0LlVuaWZvcm0xZihlLHIudV9taXgpLHVfcGF0dGVybl9zaXplX2E6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5fc2l6ZV9hKSx1X3BhdHRlcm5fc2l6ZV9iOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX3NpemVfYiksdV9zY2FsZV9hOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zY2FsZV9hKSx1X3NjYWxlX2I6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NjYWxlX2IpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV90aWxlX3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdGlsZV91bml0c190b19waXhlbHMpfX19O2Z1bmN0aW9uIFhyKGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD1lLmNvbnRleHQsYz1sLmdsLHU9ZS51c2VQcm9ncmFtKCJjb2xsaXNpb25Cb3giKSxoPVtdLGY9MCxwPTAsZD0wO2Q8aS5sZW5ndGg7ZCsrKXt2YXIgZz1pW2RdLG09ci5nZXRUaWxlKGcpLHY9bS5nZXRCdWNrZXQobik7aWYodil7dmFyIHk9Zy5wb3NNYXRyaXg7MD09PWFbMF0mJjA9PT1hWzFdfHwoeT1lLnRyYW5zbGF0ZVBvc01hdHJpeChnLnBvc01hdHJpeCxtLGEsbykpO3ZhciB4PXM/di50ZXh0Q29sbGlzaW9uQm94OnYuaWNvbkNvbGxpc2lvbkJveCxiPXYuY29sbGlzaW9uQ2lyY2xlQXJyYXk7aWYoYi5sZW5ndGg+MCl7dmFyIF89dC5jcmVhdGUoKSx3PXk7dC5tdWwoXyx2LnBsYWNlbWVudEludlByb2pNYXRyaXgsZS50cmFuc2Zvcm0uZ2xDb29yZE1hdHJpeCksdC5tdWwoXyxfLHYucGxhY2VtZW50Vmlld3BvcnRNYXRyaXgpLGgucHVzaCh7Y2lyY2xlQXJyYXk6YixjaXJjbGVPZmZzZXQ6cCx0cmFuc2Zvcm06dyxpbnZUcmFuc2Zvcm06X30pLHA9Zis9Yi5sZW5ndGgvNH14JiZ1LmRyYXcobCxjLkxJTkVTLE10LmRpc2FibGVkLEF0LmRpc2FibGVkLGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLEV0LmRpc2FibGVkLENyKHksZS50cmFuc2Zvcm0sbSksbi5pZCx4LmxheW91dFZlcnRleEJ1ZmZlcix4LmluZGV4QnVmZmVyLHguc2VnbWVudHMsbnVsbCxlLnRyYW5zZm9ybS56b29tLG51bGwsbnVsbCx4LmNvbGxpc2lvblZlcnRleEJ1ZmZlcil9fWlmKHMmJmgubGVuZ3RoKXt2YXIgVD1lLnVzZVByb2dyYW0oImNvbGxpc2lvbkNpcmNsZSIpLGs9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNjtrLnJlc2l6ZSg0KmYpLGsuX3RyaW0oKTtmb3IodmFyIE09MCxBPTAsUz1oO0E8Uy5sZW5ndGg7QSs9MSlmb3IodmFyIEU9U1tBXSxDPTA7QzxFLmNpcmNsZUFycmF5Lmxlbmd0aC80O0MrKyl7dmFyIEw9NCpDLFA9RS5jaXJjbGVBcnJheVtMKzBdLEk9RS5jaXJjbGVBcnJheVtMKzFdLHo9RS5jaXJjbGVBcnJheVtMKzJdLE89RS5jaXJjbGVBcnJheVtMKzNdO2suZW1wbGFjZShNKyssUCxJLHosTywwKSxrLmVtcGxhY2UoTSsrLFAsSSx6LE8sMSksay5lbXBsYWNlKE0rKyxQLEkseixPLDIpLGsuZW1wbGFjZShNKyssUCxJLHosTywzKX0oIVZyfHxWci5sZW5ndGg8MipmKSYmKFZyPWZ1bmN0aW9uKGUpe3ZhciByPTIqZSxuPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0M3VpNjtuLnJlc2l6ZShyKSxuLl90cmltKCk7Zm9yKHZhciBpPTA7aTxyO2krKyl7dmFyIGE9NippO24udWludDE2W2ErMF09NCppKzAsbi51aW50MTZbYSsxXT00KmkrMSxuLnVpbnQxNlthKzJdPTQqaSsyLG4udWludDE2W2ErM109NCppKzIsbi51aW50MTZbYSs0XT00KmkrMyxuLnVpbnQxNlthKzVdPTQqaSswfXJldHVybiBufShmKSk7Zm9yKHZhciBEPWwuY3JlYXRlSW5kZXhCdWZmZXIoVnIsITApLFI9bC5jcmVhdGVWZXJ0ZXhCdWZmZXIoayx0LmNvbGxpc2lvbkNpcmNsZUxheW91dC5tZW1iZXJzLCEwKSxGPTAsQj1oO0Y8Qi5sZW5ndGg7Ris9MSl7dmFyIE49QltGXSxqPUxyKE4udHJhbnNmb3JtLE4uaW52VHJhbnNmb3JtLGUudHJhbnNmb3JtKTtULmRyYXcobCxjLlRSSUFOR0xFUyxNdC5kaXNhYmxlZCxBdC5kaXNhYmxlZCxlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxFdC5kaXNhYmxlZCxqLG4uaWQsUixELHQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMipOLmNpcmNsZU9mZnNldCxOLmNpcmNsZUFycmF5Lmxlbmd0aCxOLmNpcmNsZUFycmF5Lmxlbmd0aC8yKSxudWxsLGUudHJhbnNmb3JtLnpvb20sbnVsbCxudWxsLG51bGwpfVIuZGVzdHJveSgpLEQuZGVzdHJveSgpfX12YXIgSnI9dC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSk7ZnVuY3Rpb24gS3IoZSxyLG4saSxhLG8pe3ZhciBzPXQuZ2V0QW5jaG9yQWxpZ25tZW50KGUpLGw9LShzLmhvcml6b250YWxBbGlnbi0uNSkqcixjPS0ocy52ZXJ0aWNhbEFsaWduLS41KSpuLHU9dC5ldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGUsaSk7cmV0dXJuIG5ldyB0LlBvaW50KChsL2ErdVswXSkqbywoYy9hK3VbMV0pKm8pfWZ1bmN0aW9uIFFyKGUscixuLGksYSxvLHMsbCxjLHUsaCl7dmFyIGY9ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LHA9ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSxkPWUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksZz17fTtwLmNsZWFyKCk7Zm9yKHZhciBtPTA7bTxmLmxlbmd0aDttKyspe3ZhciB2PWYuZ2V0KG0pLHk9di5oaWRkZW58fCF2LmNyb3NzVGlsZUlEfHxlLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJiF2LnBsYWNlZE9yaWVudGF0aW9uP251bGw6aVt2LmNyb3NzVGlsZUlEXTtpZih5KXt2YXIgeD1uZXcgdC5Qb2ludCh2LmFuY2hvclgsdi5hbmNob3JZKSxiPSR0KHgsbj9sOnMpLF89dGUoby5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLGIuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhKSx3PWEuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShlLnRleHRTaXplRGF0YSx1LHYpKl8vdC5PTkVfRU07biYmKHcqPWUudGlsZVBpeGVsUmF0aW8vYyk7Zm9yKHZhciBUPUtyKHkuYW5jaG9yLHkud2lkdGgseS5oZWlnaHQseS50ZXh0T2Zmc2V0LHkudGV4dEJveFNjYWxlLHcpLGs9bj8kdCh4LmFkZChUKSxzKS5wb2ludDpiLnBvaW50LmFkZChyP1Qucm90YXRlKC1vLmFuZ2xlKTpUKSxNPWUuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmdi5wbGFjZWRPcmllbnRhdGlvbj09PXQuV3JpdGluZ01vZGUudmVydGljYWw/TWF0aC5QSS8yOjAsQT0wO0E8di5udW1HbHlwaHM7QSsrKXQuYWRkRHluYW1pY0F0dHJpYnV0ZXMocCxrLE0pO2gmJnYuYXNzb2NpYXRlZEljb25JbmRleD49MCYmKGdbdi5hc3NvY2lhdGVkSWNvbkluZGV4XT17c2hpZnRlZEFuY2hvcjprLGFuZ2xlOk19KX1lbHNlIGNlKHYubnVtR2x5cGhzLHApfWlmKGgpe2QuY2xlYXIoKTtmb3IodmFyIFM9ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LEU9MDtFPFMubGVuZ3RoO0UrKyl7dmFyIEM9Uy5nZXQoRSk7aWYoQy5oaWRkZW4pY2UoQy5udW1HbHlwaHMsZCk7ZWxzZXt2YXIgTD1nW0VdO2lmKEwpZm9yKHZhciBQPTA7UDxDLm51bUdseXBocztQKyspdC5hZGREeW5hbWljQXR0cmlidXRlcyhkLEwuc2hpZnRlZEFuY2hvcixMLmFuZ2xlKTtlbHNlIGNlKEMubnVtR2x5cGhzLGQpfX1lLmljb24uZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGQpfWUudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEocCl9ZnVuY3Rpb24gJHIodCxlLHIpe3JldHVybiByLmljb25zSW5UZXh0JiZlPyJzeW1ib2xUZXh0QW5kSWNvbiI6dD8ic3ltYm9sU0RGIjoic3ltYm9sSWNvbiJ9ZnVuY3Rpb24gdG4oZSxyLG4saSxhLG8scyxsLGMsdSxoLGYpe2Zvcih2YXIgcD1lLmNvbnRleHQsZD1wLmdsLGc9ZS50cmFuc2Zvcm0sbT0ibWFwIj09PWwsdj0ibWFwIj09PWMseT1tJiYicG9pbnQiIT09bi5sYXlvdXQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikseD1tJiYhdiYmIXksYj12b2lkIDAhPT1uLmxheW91dC5nZXQoInN5bWJvbC1zb3J0LWtleSIpLmNvbnN0YW50T3IoMSksXz1lLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsTXQuUmVhZE9ubHkpLHc9bi5sYXlvdXQuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpLFQ9W10saz0wLE09aTtrPE0ubGVuZ3RoO2srPTEpe3ZhciBBPU1ba10sUz1yLmdldFRpbGUoQSksRT1TLmdldEJ1Y2tldChuKTtpZihFKXt2YXIgQz1hP0UudGV4dDpFLmljb247aWYoQyYmQy5zZWdtZW50cy5nZXQoKS5sZW5ndGgpe3ZhciBMPUMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxQPWF8fEUuc2RmSWNvbnMsST1hP0UudGV4dFNpemVEYXRhOkUuaWNvblNpemVEYXRhLHo9dnx8MCE9PWcucGl0Y2gsTz1lLnVzZVByb2dyYW0oJHIoUCxhLEUpLEwpLEQ9dC5ldmFsdWF0ZVNpemVGb3Jab29tKEksZy56b29tKSxSPXZvaWQgMCxGPVswLDBdLEI9dm9pZCAwLE49dm9pZCAwLGo9bnVsbCxVPXZvaWQgMDtpZihhKUI9Uy5nbHlwaEF0bGFzVGV4dHVyZSxOPWQuTElORUFSLFI9Uy5nbHlwaEF0bGFzVGV4dHVyZS5zaXplLEUuaWNvbnNJblRleHQmJihGPVMuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZSxqPVMuaW1hZ2VBdGxhc1RleHR1cmUsVT16fHxlLm9wdGlvbnMucm90YXRpbmd8fGUub3B0aW9ucy56b29taW5nfHwiY29tcG9zaXRlIj09PUkua2luZHx8ImNhbWVyYSI9PT1JLmtpbmQ/ZC5MSU5FQVI6ZC5ORUFSRVNUKTtlbHNle3ZhciBWPTEhPT1uLmxheW91dC5nZXQoImljb24tc2l6ZSIpLmNvbnN0YW50T3IoMCl8fEUuaWNvbnNOZWVkTGluZWFyO0I9Uy5pbWFnZUF0bGFzVGV4dHVyZSxOPVB8fGUub3B0aW9ucy5yb3RhdGluZ3x8ZS5vcHRpb25zLnpvb21pbmd8fFZ8fHo/ZC5MSU5FQVI6ZC5ORUFSRVNULFI9Uy5pbWFnZUF0bGFzVGV4dHVyZS5zaXplfXZhciBxPWZlKFMsMSxlLnRyYW5zZm9ybS56b29tKSxIPUt0KEEucG9zTWF0cml4LHYsbSxlLnRyYW5zZm9ybSxxKSxHPVF0KEEucG9zTWF0cml4LHYsbSxlLnRyYW5zZm9ybSxxKSxZPXcmJkUuaGFzVGV4dERhdGEoKSxXPSJub25lIiE9PW4ubGF5b3V0LmdldCgiaWNvbi10ZXh0LWZpdCIpJiZZJiZFLmhhc0ljb25EYXRhKCk7eSYmcmUoRSxBLnBvc01hdHJpeCxlLGEsSCxHLHYsdSk7dmFyIFo9ZS50cmFuc2xhdGVQb3NNYXRyaXgoQS5wb3NNYXRyaXgsUyxvLHMpLFg9eXx8YSYmd3x8Vz9KcjpILEo9ZS50cmFuc2xhdGVQb3NNYXRyaXgoRyxTLG8scywhMCksSz1QJiYwIT09bi5wYWludC5nZXQoYT8idGV4dC1oYWxvLXdpZHRoIjoiaWNvbi1oYWxvLXdpZHRoIikuY29uc3RhbnRPcigxKSxRPXtwcm9ncmFtOk8sYnVmZmVyczpDLHVuaWZvcm1WYWx1ZXM6UD9FLmljb25zSW5UZXh0P0dyKEkua2luZCxELHgsdixlLFosWCxKLFIsRik6SHIoSS5raW5kLEQseCx2LGUsWixYLEosYSxSLCEwKTpxcihJLmtpbmQsRCx4LHYsZSxaLFgsSixhLFIpLGF0bGFzVGV4dHVyZTpCLGF0bGFzVGV4dHVyZUljb246aixhdGxhc0ludGVycG9sYXRpb246TixhdGxhc0ludGVycG9sYXRpb25JY29uOlUsaXNTREY6UCxoYXNIYWxvOkt9O2lmKGIpZm9yKHZhciAkPTAsdHQ9Qy5zZWdtZW50cy5nZXQoKTskPHR0Lmxlbmd0aDskKz0xKXt2YXIgZXQ9dHRbJF07VC5wdXNoKHtzZWdtZW50czpuZXcgdC5TZWdtZW50VmVjdG9yKFtldF0pLHNvcnRLZXk6ZXQuc29ydEtleSxzdGF0ZTpRfSl9ZWxzZSBULnB1c2goe3NlZ21lbnRzOkMuc2VnbWVudHMsc29ydEtleTowLHN0YXRlOlF9KX19fWImJlQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKTtmb3IodmFyIHJ0PTAsbnQ9VDtydDxudC5sZW5ndGg7cnQrPTEpe3ZhciBpdD1udFtydF0sYXQ9aXQuc3RhdGU7aWYocC5hY3RpdmVUZXh0dXJlLnNldChkLlRFWFRVUkUwKSxhdC5hdGxhc1RleHR1cmUuYmluZChhdC5hdGxhc0ludGVycG9sYXRpb24sZC5DTEFNUF9UT19FREdFKSxhdC5hdGxhc1RleHR1cmVJY29uJiYocC5hY3RpdmVUZXh0dXJlLnNldChkLlRFWFRVUkUxKSxhdC5hdGxhc1RleHR1cmVJY29uJiZhdC5hdGxhc1RleHR1cmVJY29uLmJpbmQoYXQuYXRsYXNJbnRlcnBvbGF0aW9uSWNvbixkLkNMQU1QX1RPX0VER0UpKSxhdC5pc1NERil7dmFyIG90PWF0LnVuaWZvcm1WYWx1ZXM7YXQuaGFzSGFsbyYmKG90LnVfaXNfaGFsbz0xLGVuKGF0LmJ1ZmZlcnMsaXQuc2VnbWVudHMsbixlLGF0LnByb2dyYW0sXyxoLGYsb3QpKSxvdC51X2lzX2hhbG89MH1lbihhdC5idWZmZXJzLGl0LnNlZ21lbnRzLG4sZSxhdC5wcm9ncmFtLF8saCxmLGF0LnVuaWZvcm1WYWx1ZXMpfX1mdW5jdGlvbiBlbih0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9bi5jb250ZXh0O2kuZHJhdyhjLGMuZ2wuVFJJQU5HTEVTLGEsbyxzLEV0LmRpc2FibGVkLGwsci5pZCx0LmxheW91dFZlcnRleEJ1ZmZlcix0LmluZGV4QnVmZmVyLGUsci5wYWludCxuLnRyYW5zZm9ybS56b29tLHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIsdC5vcGFjaXR5VmVydGV4QnVmZmVyKX1mdW5jdGlvbiBybih0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxoLGY9dC5jb250ZXh0LmdsLHA9ci5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLGQ9cCYmcC5jb25zdGFudE9yKDEpLGc9ci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7bz8obD1kJiYhci5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT8iZmlsbE91dGxpbmVQYXR0ZXJuIjoiZmlsbE91dGxpbmUiLHM9Zi5MSU5FUyk6KGw9ZD8iZmlsbFBhdHRlcm4iOiJmaWxsIixzPWYuVFJJQU5HTEVTKTtmb3IodmFyIG09MCx2PW47bTx2Lmxlbmd0aDttKz0xKXt2YXIgeT12W21dLHg9ZS5nZXRUaWxlKHkpO2lmKCFkfHx4LnBhdHRlcm5zTG9hZGVkKCkpe3ZhciBiPXguZ2V0QnVja2V0KHIpO2lmKGIpe3ZhciBfPWIucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx3PXQudXNlUHJvZ3JhbShsLF8pO2QmJih0LmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZi5URVhUVVJFMCkseC5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGYuTElORUFSLGYuQ0xBTVBfVE9fRURHRSksXy51cGRhdGVQYWludEJ1ZmZlcnMoZykpO3ZhciBUPXAuY29uc3RhbnRPcihudWxsKTtpZihUJiZ4LmltYWdlQXRsYXMpe3ZhciBrPXguaW1hZ2VBdGxhcyxNPWsucGF0dGVyblBvc2l0aW9uc1tULnRvLnRvU3RyaW5nKCldLEE9ay5wYXR0ZXJuUG9zaXRpb25zW1QuZnJvbS50b1N0cmluZygpXTtNJiZBJiZfLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhNLEEpfXZhciBTPXQudHJhbnNsYXRlUG9zTWF0cml4KHkucG9zTWF0cml4LHgsci5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlIiksci5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlLWFuY2hvciIpKTtpZihvKXt1PWIuaW5kZXhCdWZmZXIyLGg9Yi5zZWdtZW50czI7dmFyIEU9W2YuZHJhd2luZ0J1ZmZlcldpZHRoLGYuZHJhd2luZ0J1ZmZlckhlaWdodF07Yz0iZmlsbE91dGxpbmVQYXR0ZXJuIj09PWwmJmQ/U3IoUyx0LGcseCxFKTpBcihTLEUpfWVsc2UgdT1iLmluZGV4QnVmZmVyLGg9Yi5zZWdtZW50cyxjPWQ/TXIoUyx0LGcseCk6a3IoUyk7dy5kcmF3KHQuY29udGV4dCxzLGksdC5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKHkpLGEsRXQuZGlzYWJsZWQsYyxyLmlkLGIubGF5b3V0VmVydGV4QnVmZmVyLHUsaCxyLnBhaW50LHQudHJhbnNmb3JtLnpvb20sXyl9fX19ZnVuY3Rpb24gbm4odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXQuY29udGV4dCxsPXMuZ2wsYz1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tcGF0dGVybiIpLHU9Yy5jb25zdGFudE9yKDEpLGg9ci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCksZj1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tb3BhY2l0eSIpLHA9MCxkPW47cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdLG09ZS5nZXRUaWxlKGcpLHY9bS5nZXRCdWNrZXQocik7aWYodil7dmFyIHk9di5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLHg9dC51c2VQcm9ncmFtKHU/ImZpbGxFeHRydXNpb25QYXR0ZXJuIjoiZmlsbEV4dHJ1c2lvbiIseSk7dSYmKHQuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChsLlRFWFRVUkUwKSxtLmltYWdlQXRsYXNUZXh0dXJlLmJpbmQobC5MSU5FQVIsbC5DTEFNUF9UT19FREdFKSx5LnVwZGF0ZVBhaW50QnVmZmVycyhoKSk7dmFyIGI9Yy5jb25zdGFudE9yKG51bGwpO2lmKGImJm0uaW1hZ2VBdGxhcyl7dmFyIF89bS5pbWFnZUF0bGFzLHc9Xy5wYXR0ZXJuUG9zaXRpb25zW2IudG8udG9TdHJpbmcoKV0sVD1fLnBhdHRlcm5Qb3NpdGlvbnNbYi5mcm9tLnRvU3RyaW5nKCldO3cmJlQmJnkuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHcsVCl9dmFyIGs9dC50cmFuc2xhdGVQb3NNYXRyaXgoZy5wb3NNYXRyaXgsbSxyLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIiksci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiKSksTT1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnQiKSxBPXU/VHIoayx0LE0sZixnLGgsbSk6d3Ioayx0LE0sZik7eC5kcmF3KHMscy5nbC5UUklBTkdMRVMsaSxhLG8sRXQuYmFja0NDVyxBLHIuaWQsdi5sYXlvdXRWZXJ0ZXhCdWZmZXIsdi5pbmRleEJ1ZmZlcix2LnNlZ21lbnRzLHIucGFpbnQsdC50cmFuc2Zvcm0uem9vbSx5KX19fWZ1bmN0aW9uIGFuKGUscixuLGksYSxvKXt2YXIgcz1lLmNvbnRleHQsbD1zLmdsLGM9ci5mYm87aWYoYyl7dmFyIHU9ZS51c2VQcm9ncmFtKCJoaWxsc2hhZGUiKTtzLmFjdGl2ZVRleHR1cmUuc2V0KGwuVEVYVFVSRTApLGwuYmluZFRleHR1cmUobC5URVhUVVJFXzJELGMuY29sb3JBdHRhY2htZW50LmdldCgpKTt2YXIgaD1mdW5jdGlvbihlLHIsbil7dmFyIGk9bi5wYWludC5nZXQoImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiKSxhPW4ucGFpbnQuZ2V0KCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIiksbz1uLnBhaW50LmdldCgiaGlsbHNoYWRlLWFjY2VudC1jb2xvciIpLHM9bi5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIikqKE1hdGguUEkvMTgwKTsidmlld3BvcnQiPT09bi5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIikmJihzLT1lLnRyYW5zZm9ybS5hbmdsZSk7dmFyIGwsYyx1LGg9IWUub3B0aW9ucy5tb3Zpbmc7cmV0dXJue3VfbWF0cml4OmUudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChyLnRpbGVJRC50b1Vud3JhcHBlZCgpLGgpLHVfaW1hZ2U6MCx1X2xhdHJhbmdlOihsPXIudGlsZUlELGM9TWF0aC5wb3coMixsLmNhbm9uaWNhbC56KSx1PWwuY2Fub25pY2FsLnksW25ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZSgwLHUvYykudG9MbmdMYXQoKS5sYXQsbmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKDAsKHUrMSkvYykudG9MbmdMYXQoKS5sYXRdKSx1X2xpZ2h0OltuLnBhaW50LmdldCgiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiIpLHNdLHVfc2hhZG93OmksdV9oaWdobGlnaHQ6YSx1X2FjY2VudDpvfX0oZSxyLG4pO3UuZHJhdyhzLGwuVFJJQU5HTEVTLGksYSxvLEV0LmRpc2FibGVkLGgsbi5pZCxlLnJhc3RlckJvdW5kc0J1ZmZlcixlLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLGUucmFzdGVyQm91bmRzU2VnbWVudHMpfX1mdW5jdGlvbiBvbihlLHIsbixpLGEsbyxzKXt2YXIgbD1lLmNvbnRleHQsYz1sLmdsLHU9ci5kZW07aWYodSYmdS5kYXRhKXt2YXIgaD11LmRpbSxmPXUuc3RyaWRlLHA9dS5nZXRQaXhlbHMoKTtpZihsLmFjdGl2ZVRleHR1cmUuc2V0KGMuVEVYVFVSRTEpLGwucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KCExKSxyLmRlbVRleHR1cmU9ci5kZW1UZXh0dXJlfHxlLmdldFRpbGVUZXh0dXJlKGYpLHIuZGVtVGV4dHVyZSl7dmFyIGQ9ci5kZW1UZXh0dXJlO2QudXBkYXRlKHAse3ByZW11bHRpcGx5OiExfSksZC5iaW5kKGMuTkVBUkVTVCxjLkNMQU1QX1RPX0VER0UpfWVsc2Ugci5kZW1UZXh0dXJlPW5ldyB0LlRleHR1cmUobCxwLGMuUkdCQSx7cHJlbXVsdGlwbHk6ITF9KSxyLmRlbVRleHR1cmUuYmluZChjLk5FQVJFU1QsYy5DTEFNUF9UT19FREdFKTtsLmFjdGl2ZVRleHR1cmUuc2V0KGMuVEVYVFVSRTApO3ZhciBnPXIuZmJvO2lmKCFnKXt2YXIgbT1uZXcgdC5UZXh0dXJlKGwse3dpZHRoOmgsaGVpZ2h0OmgsZGF0YTpudWxsfSxjLlJHQkEpO20uYmluZChjLkxJTkVBUixjLkNMQU1QX1RPX0VER0UpLChnPXIuZmJvPWwuY3JlYXRlRnJhbWVidWZmZXIoaCxoLCEwKSkuY29sb3JBdHRhY2htZW50LnNldChtLnRleHR1cmUpfWwuYmluZEZyYW1lYnVmZmVyLnNldChnLmZyYW1lYnVmZmVyKSxsLnZpZXdwb3J0LnNldChbMCwwLGgsaF0pLGUudXNlUHJvZ3JhbSgiaGlsbHNoYWRlUHJlcGFyZSIpLmRyYXcobCxjLlRSSUFOR0xFUyxhLG8scyxFdC5kaXNhYmxlZCxmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5zdHJpZGUsYT10LmNyZWF0ZSgpO3JldHVybiB0Lm9ydGhvKGEsMCx0LkVYVEVOVCwtdC5FWFRFTlQsMCwwLDEpLHQudHJhbnNsYXRlKGEsYSxbMCwtdC5FWFRFTlQsMF0pLHt1X21hdHJpeDphLHVfaW1hZ2U6MSx1X2RpbWVuc2lvbjpbaSxpXSx1X3pvb206ZS5vdmVyc2NhbGVkWix1X21heHpvb206bix1X3VucGFjazpyLmdldFVucGFja1ZlY3RvcigpfX0oci50aWxlSUQsdSxpKSxuLmlkLGUucmFzdGVyQm91bmRzQnVmZmVyLGUucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsZS5yYXN0ZXJCb3VuZHNTZWdtZW50cyksci5uZWVkc0hpbGxzaGFkZVByZXBhcmU9ITF9fWZ1bmN0aW9uIHNuKGUscixuLGksYSl7dmFyIG89aS5wYWludC5nZXQoInJhc3Rlci1mYWRlLWR1cmF0aW9uIik7aWYobz4wKXt2YXIgcz10LmJyb3dzZXIubm93KCksbD0ocy1lLnRpbWVBZGRlZCkvbyxjPXI/KHMtci50aW1lQWRkZWQpL286LTEsdT1uLmdldFNvdXJjZSgpLGg9YS5jb3ZlcmluZ1pvb21MZXZlbCh7dGlsZVNpemU6dS50aWxlU2l6ZSxyb3VuZFpvb206dS5yb3VuZFpvb219KSxmPSFyfHxNYXRoLmFicyhyLnRpbGVJRC5vdmVyc2NhbGVkWi1oKT5NYXRoLmFicyhlLnRpbGVJRC5vdmVyc2NhbGVkWi1oKSxwPWYmJmUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24/MTp0LmNsYW1wKGY/bDoxLWMsMCwxKTtyZXR1cm4gZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbiYmbD49MSYmKGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb249ITEpLHI/e29wYWNpdHk6MSxtaXg6MS1wfTp7b3BhY2l0eTpwLG1peDowfX1yZXR1cm57b3BhY2l0eToxLG1peDowfX12YXIgbG49bmV3IHQuQ29sb3IoMSwwLDAsMSksY249bmV3IHQuQ29sb3IoMCwxLDAsMSksdW49bmV3IHQuQ29sb3IoMCwwLDEsMSksaG49bmV3IHQuQ29sb3IoMSwwLDEsMSksZm49bmV3IHQuQ29sb3IoMCwxLDEsMSk7ZnVuY3Rpb24gcG4odCxlLHIsbil7Z24odCwwLGUrci8yLHQudHJhbnNmb3JtLndpZHRoLHIsbil9ZnVuY3Rpb24gZG4odCxlLHIsbil7Z24odCxlLXIvMiwwLHIsdC50cmFuc2Zvcm0uaGVpZ2h0LG4pfWZ1bmN0aW9uIGduKGUscixuLGksYSxvKXt2YXIgcz1lLmNvbnRleHQsbD1zLmdsO2wuZW5hYmxlKGwuU0NJU1NPUl9URVNUKSxsLnNjaXNzb3Iocip0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxuKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLGkqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sYSp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbykscy5jbGVhcih7Y29sb3I6b30pLGwuZGlzYWJsZShsLlNDSVNTT1JfVEVTVCl9ZnVuY3Rpb24gbW4oZSxyLG4pe3ZhciBpPWUuY29udGV4dCxhPWkuZ2wsbz1uLnBvc01hdHJpeCxzPWUudXNlUHJvZ3JhbSgiZGVidWciKSxsPU10LmRpc2FibGVkLGM9QXQuZGlzYWJsZWQsdT1lLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLGUuZW1wdHlUZXh0dXJlLmJpbmQoYS5MSU5FQVIsYS5DTEFNUF9UT19FREdFKSxzLmRyYXcoaSxhLkxJTkVfU1RSSVAsbCxjLHUsRXQuZGlzYWJsZWQsUHIobyx0LkNvbG9yLnJlZCksIiRkZWJ1ZyIsZS5kZWJ1Z0J1ZmZlcixlLnRpbGVCb3JkZXJJbmRleEJ1ZmZlcixlLmRlYnVnU2VnbWVudHMpO3ZhciBoPXIuZ2V0VGlsZUJ5SUQobi5rZXkpLmxhdGVzdFJhd1RpbGVEYXRhLGY9TWF0aC5mbG9vcigoaCYmaC5ieXRlTGVuZ3RofHwwKS8xMDI0KSxwPXIuZ2V0VGlsZShuKS50aWxlU2l6ZSxkPTUxMi9NYXRoLm1pbihwLDUxMikqKG4ub3ZlcnNjYWxlZFovZS50cmFuc2Zvcm0uem9vbSkqLjUsZz1uLmNhbm9uaWNhbC50b1N0cmluZygpO24ub3ZlcnNjYWxlZFohPT1uLmNhbm9uaWNhbC56JiYoZys9IiA9PiAiK24ub3ZlcnNjYWxlZFopLGZ1bmN0aW9uKHQsZSl7dC5pbml0RGVidWdPdmVybGF5Q2FudmFzKCk7dmFyIHI9dC5kZWJ1Z092ZXJsYXlDYW52YXMsbj10LmNvbnRleHQuZ2wsaT10LmRlYnVnT3ZlcmxheUNhbnZhcy5nZXRDb250ZXh0KCIyZCIpO2kuY2xlYXJSZWN0KDAsMCxyLndpZHRoLHIuaGVpZ2h0KSxpLnNoYWRvd0NvbG9yPSJ3aGl0ZSIsaS5zaGFkb3dCbHVyPTIsaS5saW5lV2lkdGg9MS41LGkuc3Ryb2tlU3R5bGU9IndoaXRlIixpLnRleHRCYXNlbGluZT0idG9wIixpLmZvbnQ9ImJvbGQgMzZweCBPcGVuIFNhbnMsIHNhbnMtc2VyaWYiLGkuZmlsbFRleHQoZSw1LDUpLGkuc3Ryb2tlVGV4dChlLDUsNSksdC5kZWJ1Z092ZXJsYXlUZXh0dXJlLnVwZGF0ZShyKSx0LmRlYnVnT3ZlcmxheVRleHR1cmUuYmluZChuLkxJTkVBUixuLkNMQU1QX1RPX0VER0UpfShlLGcrIiAiK2YrImtiIikscy5kcmF3KGksYS5UUklBTkdMRVMsbCxjLFN0LmFscGhhQmxlbmRlZCxFdC5kaXNhYmxlZCxQcihvLHQuQ29sb3IudHJhbnNwYXJlbnQsZCksIiRkZWJ1ZyIsZS5kZWJ1Z0J1ZmZlcixlLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLGUuZGVidWdTZWdtZW50cyl9dmFyIHZuPXtzeW1ib2w6ZnVuY3Rpb24oZSxyLG4saSxhKXtpZigidHJhbnNsdWNlbnQiPT09ZS5yZW5kZXJQYXNzKXt2YXIgbz1BdC5kaXNhYmxlZCxzPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO24ubGF5b3V0LmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKSYmZnVuY3Rpb24oZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPXIudHJhbnNmb3JtLGM9Im1hcCI9PT1hLHU9Im1hcCI9PT1vLGg9MCxmPWU7aDxmLmxlbmd0aDtoKz0xKXt2YXIgcD1mW2hdLGQ9aS5nZXRUaWxlKHApLGc9ZC5nZXRCdWNrZXQobik7aWYoZyYmZy50ZXh0JiZnLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoKXt2YXIgbT10LmV2YWx1YXRlU2l6ZUZvclpvb20oZy50ZXh0U2l6ZURhdGEsbC56b29tKSx2PWZlKGQsMSxyLnRyYW5zZm9ybS56b29tKSx5PUt0KHAucG9zTWF0cml4LHUsYyxyLnRyYW5zZm9ybSx2KSx4PSJub25lIiE9PW4ubGF5b3V0LmdldCgiaWNvbi10ZXh0LWZpdCIpJiZnLmhhc0ljb25EYXRhKCk7aWYobSl7dmFyIGI9TWF0aC5wb3coMixsLnpvb20tZC50aWxlSUQub3ZlcnNjYWxlZFopO1FyKGcsYyx1LHMsdC5zeW1ib2xTaXplLGwseSxwLnBvc01hdHJpeCxiLG0seCl9fX19KGksZSxuLHIsbi5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLG4ubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSxhKSwwIT09bi5wYWludC5nZXQoImljb24tb3BhY2l0eSIpLmNvbnN0YW50T3IoMSkmJnRuKGUscixuLGksITEsbi5wYWludC5nZXQoImljb24tdHJhbnNsYXRlIiksbi5wYWludC5nZXQoImljb24tdHJhbnNsYXRlLWFuY2hvciIpLG4ubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSxuLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50Iiksbi5sYXlvdXQuZ2V0KCJpY29uLWtlZXAtdXByaWdodCIpLG8scyksMCE9PW4ucGFpbnQuZ2V0KCJ0ZXh0LW9wYWNpdHkiKS5jb25zdGFudE9yKDEpJiZ0bihlLHIsbixpLCEwLG4ucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZSIpLG4ucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiKSxuLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50Iiksbi5sYXlvdXQuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLG4ubGF5b3V0LmdldCgidGV4dC1rZWVwLXVwcmlnaHQiKSxvLHMpLHIubWFwLnNob3dDb2xsaXNpb25Cb3hlcyYmKFhyKGUscixuLGksbi5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlIiksbi5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlLWFuY2hvciIpLCEwKSxYcihlLHIsbixpLG4ucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZSIpLG4ucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZS1hbmNob3IiKSwhMSkpfX0sY2lyY2xlOmZ1bmN0aW9uKGUscixuLGkpe2lmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3Mpe3ZhciBhPW4ucGFpbnQuZ2V0KCJjaXJjbGUtb3BhY2l0eSIpLG89bi5wYWludC5nZXQoImNpcmNsZS1zdHJva2Utd2lkdGgiKSxzPW4ucGFpbnQuZ2V0KCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiKSxsPXZvaWQgMCE9PW4ubGF5b3V0LmdldCgiY2lyY2xlLXNvcnQta2V5IikuY29uc3RhbnRPcigxKTtpZigwIT09YS5jb25zdGFudE9yKDEpfHwwIT09by5jb25zdGFudE9yKDEpJiYwIT09cy5jb25zdGFudE9yKDEpKXtmb3IodmFyIGM9ZS5jb250ZXh0LHU9Yy5nbCxoPWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxNdC5SZWFkT25seSksZj1BdC5kaXNhYmxlZCxwPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGQ9W10sZz0wO2c8aS5sZW5ndGg7ZysrKXt2YXIgbT1pW2ddLHY9ci5nZXRUaWxlKG0pLHk9di5nZXRCdWNrZXQobik7aWYoeSl7dmFyIHg9eS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLGI9e3Byb2dyYW1Db25maWd1cmF0aW9uOngscHJvZ3JhbTplLnVzZVByb2dyYW0oImNpcmNsZSIseCksbGF5b3V0VmVydGV4QnVmZmVyOnkubGF5b3V0VmVydGV4QnVmZmVyLGluZGV4QnVmZmVyOnkuaW5kZXhCdWZmZXIsdW5pZm9ybVZhbHVlczpFcihlLG0sdixuKX07aWYobClmb3IodmFyIF89MCx3PXkuc2VnbWVudHMuZ2V0KCk7Xzx3Lmxlbmd0aDtfKz0xKXt2YXIgVD13W19dO2QucHVzaCh7c2VnbWVudHM6bmV3IHQuU2VnbWVudFZlY3RvcihbVF0pLHNvcnRLZXk6VC5zb3J0S2V5LHN0YXRlOmJ9KX1lbHNlIGQucHVzaCh7c2VnbWVudHM6eS5zZWdtZW50cyxzb3J0S2V5OjAsc3RhdGU6Yn0pfX1sJiZkLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciBrPTAsTT1kO2s8TS5sZW5ndGg7ays9MSl7dmFyIEE9TVtrXSxTPUEuc3RhdGU7Uy5wcm9ncmFtLmRyYXcoYyx1LlRSSUFOR0xFUyxoLGYscCxFdC5kaXNhYmxlZCxTLnVuaWZvcm1WYWx1ZXMsbi5pZCxTLmxheW91dFZlcnRleEJ1ZmZlcixTLmluZGV4QnVmZmVyLEEuc2VnbWVudHMsbi5wYWludCxlLnRyYW5zZm9ybS56b29tLFMucHJvZ3JhbUNvbmZpZ3VyYXRpb24pfX19fSxoZWF0bWFwOmZ1bmN0aW9uKGUscixuLGkpe2lmKDAhPT1uLnBhaW50LmdldCgiaGVhdG1hcC1vcGFjaXR5IikpaWYoIm9mZnNjcmVlbiI9PT1lLnJlbmRlclBhc3Mpe3ZhciBhPWUuY29udGV4dCxvPWEuZ2wscz1BdC5kaXNhYmxlZCxsPW5ldyBTdChbby5PTkUsby5PTkVdLHQuQ29sb3IudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSk7IWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmdsO3QuYWN0aXZlVGV4dHVyZS5zZXQobi5URVhUVVJFMSksdC52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLzQsZS5oZWlnaHQvNF0pO3ZhciBpPXIuaGVhdG1hcEZibztpZihpKW4uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGkuY29sb3JBdHRhY2htZW50LmdldCgpKSx0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoaS5mcmFtZWJ1ZmZlcik7ZWxzZXt2YXIgYT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxhKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTElORUFSKSxpPXIuaGVhdG1hcEZibz10LmNyZWF0ZUZyYW1lYnVmZmVyKGUud2lkdGgvNCxlLmhlaWdodC80LCExKSxmdW5jdGlvbih0LGUscixuKXt2YXIgaT10LmdsO2kudGV4SW1hZ2UyRChpLlRFWFRVUkVfMkQsMCxpLlJHQkEsZS53aWR0aC80LGUuaGVpZ2h0LzQsMCxpLlJHQkEsdC5leHRSZW5kZXJUb1RleHR1cmVIYWxmRmxvYXQ/dC5leHRUZXh0dXJlSGFsZkZsb2F0LkhBTEZfRkxPQVRfT0VTOmkuVU5TSUdORURfQllURSxudWxsKSxuLmNvbG9yQXR0YWNobWVudC5zZXQocil9KHQsZSxhLGkpfX0oYSxlLG4pLGEuY2xlYXIoe2NvbG9yOnQuQ29sb3IudHJhbnNwYXJlbnR9KTtmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXTtpZighci5oYXNSZW5kZXJhYmxlUGFyZW50KHUpKXt2YXIgaD1yLmdldFRpbGUodSksZj1oLmdldEJ1Y2tldChuKTtpZihmKXt2YXIgcD1mLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobi5pZCk7ZS51c2VQcm9ncmFtKCJoZWF0bWFwIixwKS5kcmF3KGEsby5UUklBTkdMRVMsTXQuZGlzYWJsZWQscyxsLEV0LmRpc2FibGVkLHpyKHUucG9zTWF0cml4LGgsZS50cmFuc2Zvcm0uem9vbSxuLnBhaW50LmdldCgiaGVhdG1hcC1pbnRlbnNpdHkiKSksbi5pZCxmLmxheW91dFZlcnRleEJ1ZmZlcixmLmluZGV4QnVmZmVyLGYuc2VnbWVudHMsbi5wYWludCxlLnRyYW5zZm9ybS56b29tLHApfX19YS52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLGUuaGVpZ2h0XSl9ZWxzZSJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3MmJihlLmNvbnRleHQuc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxmdW5jdGlvbihlLHIpe3ZhciBuPWUuY29udGV4dCxpPW4uZ2wsYT1yLmhlYXRtYXBGYm87aWYoYSl7bi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxhLmNvbG9yQXR0YWNobWVudC5nZXQoKSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUxKTt2YXIgbz1yLmNvbG9yUmFtcFRleHR1cmU7b3x8KG89ci5jb2xvclJhbXBUZXh0dXJlPW5ldyB0LlRleHR1cmUobixyLmNvbG9yUmFtcCxpLlJHQkEpKSxvLmJpbmQoaS5MSU5FQVIsaS5DTEFNUF9UT19FREdFKSxlLnVzZVByb2dyYW0oImhlYXRtYXBUZXh0dXJlIikuZHJhdyhuLGkuVFJJQU5HTEVTLE10LmRpc2FibGVkLEF0LmRpc2FibGVkLGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLEV0LmRpc2FibGVkLGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuY3JlYXRlKCk7dC5vcnRobyhhLDAsZS53aWR0aCxlLmhlaWdodCwwLDAsMSk7dmFyIG89ZS5jb250ZXh0LmdsO3JldHVybnt1X21hdHJpeDphLHVfd29ybGQ6W28uZHJhd2luZ0J1ZmZlcldpZHRoLG8uZHJhd2luZ0J1ZmZlckhlaWdodF0sdV9pbWFnZTowLHVfY29sb3JfcmFtcDoxLHVfb3BhY2l0eTpyLnBhaW50LmdldCgiaGVhdG1hcC1vcGFjaXR5Iil9fShlLHIpLHIuaWQsZS52aWV3cG9ydEJ1ZmZlcixlLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLGUudmlld3BvcnRTZWdtZW50cyxyLnBhaW50LGUudHJhbnNmb3JtLnpvb20pfX0oZSxuKSl9LGxpbmU6ZnVuY3Rpb24oZSxyLG4saSl7aWYoInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyl7dmFyIGE9bi5wYWludC5nZXQoImxpbmUtb3BhY2l0eSIpLG89bi5wYWludC5nZXQoImxpbmUtd2lkdGgiKTtpZigwIT09YS5jb25zdGFudE9yKDEpJiYwIT09by5jb25zdGFudE9yKDEpKXt2YXIgcz1lLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsTXQuUmVhZE9ubHkpLGw9ZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksYz1uLnBhaW50LmdldCgibGluZS1kYXNoYXJyYXkiKSx1PW4ucGFpbnQuZ2V0KCJsaW5lLXBhdHRlcm4iKSxoPXUuY29uc3RhbnRPcigxKSxmPW4ucGFpbnQuZ2V0KCJsaW5lLWdyYWRpZW50IikscD1uLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKSxkPWg/ImxpbmVQYXR0ZXJuIjpjPyJsaW5lU0RGIjpmPyJsaW5lR3JhZGllbnQiOiJsaW5lIixnPWUuY29udGV4dCxtPWcuZ2wsdj0hMDtpZihmKXtnLmFjdGl2ZVRleHR1cmUuc2V0KG0uVEVYVFVSRTApO3ZhciB5PW4uZ3JhZGllbnRUZXh0dXJlO2lmKCFuLmdyYWRpZW50KXJldHVybjt5fHwoeT1uLmdyYWRpZW50VGV4dHVyZT1uZXcgdC5UZXh0dXJlKGcsbi5ncmFkaWVudCxtLlJHQkEpKSx5LmJpbmQobS5MSU5FQVIsbS5DTEFNUF9UT19FREdFKX1mb3IodmFyIHg9MCxiPWk7eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9ci5nZXRUaWxlKF8pO2lmKCFofHx3LnBhdHRlcm5zTG9hZGVkKCkpe3ZhciBUPXcuZ2V0QnVja2V0KG4pO2lmKFQpe3ZhciBrPVQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxNPWUuY29udGV4dC5wcm9ncmFtLmdldCgpLEE9ZS51c2VQcm9ncmFtKGQsayksUz12fHxBLnByb2dyYW0hPT1NLEU9dS5jb25zdGFudE9yKG51bGwpO2lmKEUmJncuaW1hZ2VBdGxhcyl7dmFyIEM9dy5pbWFnZUF0bGFzLEw9Qy5wYXR0ZXJuUG9zaXRpb25zW0UudG8udG9TdHJpbmcoKV0sUD1DLnBhdHRlcm5Qb3NpdGlvbnNbRS5mcm9tLnRvU3RyaW5nKCldO0wmJlAmJmsuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKEwsUCl9dmFyIEk9aD9ScihlLHcsbixwKTpjP0ZyKGUsdyxuLGMscCk6Zj9EcihlLHcsbik6T3IoZSx3LG4pO2g/KGcuYWN0aXZlVGV4dHVyZS5zZXQobS5URVhUVVJFMCksdy5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKG0uTElORUFSLG0uQ0xBTVBfVE9fRURHRSksay51cGRhdGVQYWludEJ1ZmZlcnMocCkpOmMmJihTfHxlLmxpbmVBdGxhcy5kaXJ0eSkmJihnLmFjdGl2ZVRleHR1cmUuc2V0KG0uVEVYVFVSRTApLGUubGluZUF0bGFzLmJpbmQoZykpLEEuZHJhdyhnLG0uVFJJQU5HTEVTLHMsZS5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKF8pLGwsRXQuZGlzYWJsZWQsSSxuLmlkLFQubGF5b3V0VmVydGV4QnVmZmVyLFQuaW5kZXhCdWZmZXIsVC5zZWdtZW50cyxuLnBhaW50LGUudHJhbnNmb3JtLnpvb20sayksdj0hMX19fX19fSxmaWxsOmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW4ucGFpbnQuZ2V0KCJmaWxsLWNvbG9yIiksbz1uLnBhaW50LmdldCgiZmlsbC1vcGFjaXR5Iik7aWYoMCE9PW8uY29uc3RhbnRPcigxKSl7dmFyIHM9ZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksbD1uLnBhaW50LmdldCgiZmlsbC1wYXR0ZXJuIiksYz1lLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSYmIWwuY29uc3RhbnRPcigxKSYmMT09PWEuY29uc3RhbnRPcih0LkNvbG9yLnRyYW5zcGFyZW50KS5hJiYxPT09by5jb25zdGFudE9yKDApPyJvcGFxdWUiOiJ0cmFuc2x1Y2VudCI7aWYoZS5yZW5kZXJQYXNzPT09Yyl7dmFyIHU9ZS5kZXB0aE1vZGVGb3JTdWJsYXllcigxLCJvcGFxdWUiPT09ZS5yZW5kZXJQYXNzP010LlJlYWRXcml0ZTpNdC5SZWFkT25seSk7cm4oZSxyLG4saSx1LHMsITEpfWlmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3MmJm4ucGFpbnQuZ2V0KCJmaWxsLWFudGlhbGlhcyIpKXt2YXIgaD1lLmRlcHRoTW9kZUZvclN1YmxheWVyKG4uZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik/MjowLE10LlJlYWRPbmx5KTtybihlLHIsbixpLGgscywhMCl9fX0sImZpbGwtZXh0cnVzaW9uIjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tb3BhY2l0eSIpO2lmKDAhPT1pJiYidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzKXt2YXIgYT1uZXcgTXQodC5jb250ZXh0LmdsLkxFUVVBTCxNdC5SZWFkV3JpdGUsdC5kZXB0aFJhbmdlRm9yM0QpO2lmKDEhPT1pfHxyLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tcGF0dGVybiIpLmNvbnN0YW50T3IoMSkpbm4odCxlLHIsbixhLEF0LmRpc2FibGVkLFN0LmRpc2FibGVkKSxubih0LGUscixuLGEsdC5zdGVuY2lsTW9kZUZvcjNEKCksdC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO2Vsc2V7dmFyIG89dC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7bm4odCxlLHIsbixhLEF0LmRpc2FibGVkLG8pfX19LGhpbGxzaGFkZTpmdW5jdGlvbih0LGUscixuKXtpZigib2Zmc2NyZWVuIj09PXQucmVuZGVyUGFzc3x8InRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7Zm9yKHZhciBpPXQuY29udGV4dCxhPWUuZ2V0U291cmNlKCkubWF4em9vbSxvPXQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxNdC5SZWFkT25seSkscz10LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxsPSJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3M/dC5zdGVuY2lsQ29uZmlnRm9yT3ZlcmxhcChuKTpbe30sbl0sYz1sWzBdLHU9MCxoPWxbMV07dTxoLmxlbmd0aDt1Kz0xKXt2YXIgZj1oW3VdLHA9ZS5nZXRUaWxlKGYpO3AubmVlZHNIaWxsc2hhZGVQcmVwYXJlJiYib2Zmc2NyZWVuIj09PXQucmVuZGVyUGFzcz9vbih0LHAscixhLG8sQXQuZGlzYWJsZWQscyk6InRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyYmYW4odCxwLHIsbyxjW2Yub3ZlcnNjYWxlZFpdLHMpfWkudmlld3BvcnQuc2V0KFswLDAsdC53aWR0aCx0LmhlaWdodF0pfX0scmFzdGVyOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3MmJjAhPT1yLnBhaW50LmdldCgicmFzdGVyLW9wYWNpdHkiKSYmbi5sZW5ndGgpZm9yKHZhciBpPXQuY29udGV4dCxhPWkuZ2wsbz1lLmdldFNvdXJjZSgpLHM9dC51c2VQcm9ncmFtKCJyYXN0ZXIiKSxsPXQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGM9byBpbnN0YW5jZW9mIEk/W3t9LG5dOnQuc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXAobiksdT1jWzBdLGg9Y1sxXSxmPWhbaC5sZW5ndGgtMV0ub3ZlcnNjYWxlZFoscD0hdC5vcHRpb25zLm1vdmluZyxkPTAsZz1oO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIG09Z1tkXSx2PXQuZGVwdGhNb2RlRm9yU3VibGF5ZXIobS5vdmVyc2NhbGVkWi1mLDE9PT1yLnBhaW50LmdldCgicmFzdGVyLW9wYWNpdHkiKT9NdC5SZWFkV3JpdGU6TXQuUmVhZE9ubHksYS5MRVNTKSx5PWUuZ2V0VGlsZShtKSx4PXQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChtLnRvVW53cmFwcGVkKCkscCk7eS5yZWdpc3RlckZhZGVEdXJhdGlvbihyLnBhaW50LmdldCgicmFzdGVyLWZhZGUtZHVyYXRpb24iKSk7dmFyIGI9ZS5maW5kTG9hZGVkUGFyZW50KG0sMCksXz1zbih5LGIsZSxyLHQudHJhbnNmb3JtKSx3PXZvaWQgMCxUPXZvaWQgMCxrPSJuZWFyZXN0Ij09PXIucGFpbnQuZ2V0KCJyYXN0ZXItcmVzYW1wbGluZyIpP2EuTkVBUkVTVDphLkxJTkVBUjtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLHkudGV4dHVyZS5iaW5kKGssYS5DTEFNUF9UT19FREdFLGEuTElORUFSX01JUE1BUF9ORUFSRVNUKSxpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTEpLGI/KGIudGV4dHVyZS5iaW5kKGssYS5DTEFNUF9UT19FREdFLGEuTElORUFSX01JUE1BUF9ORUFSRVNUKSx3PU1hdGgucG93KDIsYi50aWxlSUQub3ZlcnNjYWxlZFoteS50aWxlSUQub3ZlcnNjYWxlZFopLFQ9W3kudGlsZUlELmNhbm9uaWNhbC54KnclMSx5LnRpbGVJRC5jYW5vbmljYWwueSp3JTFdKTp5LnRleHR1cmUuYmluZChrLGEuQ0xBTVBfVE9fRURHRSxhLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7dmFyIE09anIoeCxUfHxbMCwwXSx3fHwxLF8scik7byBpbnN0YW5jZW9mIEk/cy5kcmF3KGksYS5UUklBTkdMRVMsdixBdC5kaXNhYmxlZCxsLEV0LmRpc2FibGVkLE0sci5pZCxvLmJvdW5kc0J1ZmZlcix0LnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLG8uYm91bmRzU2VnbWVudHMpOnMuZHJhdyhpLGEuVFJJQU5HTEVTLHYsdVttLm92ZXJzY2FsZWRaXSxsLEV0LmRpc2FibGVkLE0sci5pZCx0LnJhc3RlckJvdW5kc0J1ZmZlcix0LnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLHQucmFzdGVyQm91bmRzU2VnbWVudHMpfX0sYmFja2dyb3VuZDpmdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoImJhY2tncm91bmQtY29sb3IiKSxpPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLW9wYWNpdHkiKTtpZigwIT09aSl7dmFyIGE9dC5jb250ZXh0LG89YS5nbCxzPXQudHJhbnNmb3JtLGw9cy50aWxlU2l6ZSxjPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLXBhdHRlcm4iKTtpZighdC5pc1BhdHRlcm5NaXNzaW5nKGMpKXt2YXIgdT0hYyYmMT09PW4uYSYmMT09PWkmJnQub3BhcXVlUGFzc0VuYWJsZWRGb3JMYXllcigpPyJvcGFxdWUiOiJ0cmFuc2x1Y2VudCI7aWYodC5yZW5kZXJQYXNzPT09dSl7dmFyIGg9QXQuZGlzYWJsZWQsZj10LmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIm9wYXF1ZSI9PT11P010LlJlYWRXcml0ZTpNdC5SZWFkT25seSkscD10LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxkPXQudXNlUHJvZ3JhbShjPyJiYWNrZ3JvdW5kUGF0dGVybiI6ImJhY2tncm91bmQiKSxnPXMuY292ZXJpbmdUaWxlcyh7dGlsZVNpemU6bH0pO2MmJihhLmFjdGl2ZVRleHR1cmUuc2V0KG8uVEVYVFVSRTApLHQuaW1hZ2VNYW5hZ2VyLmJpbmQodC5jb250ZXh0KSk7Zm9yKHZhciBtPXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpLHY9MCx5PWc7djx5Lmxlbmd0aDt2Kz0xKXt2YXIgeD15W3ZdLGI9dC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHgudG9VbndyYXBwZWQoKSksXz1jP1dyKGIsaSx0LGMse3RpbGVJRDp4LHRpbGVTaXplOmx9LG0pOllyKGIsaSxuKTtkLmRyYXcoYSxvLlRSSUFOR0xFUyxmLGgscCxFdC5kaXNhYmxlZCxfLHIuaWQsdC50aWxlRXh0ZW50QnVmZmVyLHQucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsdC50aWxlRXh0ZW50U2VnbWVudHMpfX19fX0sZGVidWc6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKW1uKHQsZSxyW25dKX0sY3VzdG9tOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNvbnRleHQsaT1yLmltcGxlbWVudGF0aW9uO2lmKCJvZmZzY3JlZW4iPT09dC5yZW5kZXJQYXNzKXt2YXIgYT1pLnByZXJlbmRlcjthJiYodC5zZXRDdXN0b21MYXllckRlZmF1bHRzKCksbi5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGEuY2FsbChpLG4uZ2wsdC50cmFuc2Zvcm0uY3VzdG9tTGF5ZXJNYXRyaXgoKSksbi5zZXREaXJ0eSgpLHQuc2V0QmFzZVN0YXRlKCkpfWVsc2UgaWYoInRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7dC5zZXRDdXN0b21MYXllckRlZmF1bHRzKCksbi5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLG4uc2V0U3RlbmNpbE1vZGUoQXQuZGlzYWJsZWQpO3ZhciBvPSIzZCI9PT1pLnJlbmRlcmluZ01vZGU/bmV3IE10KHQuY29udGV4dC5nbC5MRVFVQUwsTXQuUmVhZFdyaXRlLHQuZGVwdGhSYW5nZUZvcjNEKTp0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAsTXQuUmVhZE9ubHkpO24uc2V0RGVwdGhNb2RlKG8pLGkucmVuZGVyKG4uZ2wsdC50cmFuc2Zvcm0uY3VzdG9tTGF5ZXJNYXRyaXgoKSksbi5zZXREaXJ0eSgpLHQuc2V0QmFzZVN0YXRlKCksbi5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpfX19LHluPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb250ZXh0PW5ldyBDdCh0KSx0aGlzLnRyYW5zZm9ybT1lLHRoaXMuX3RpbGVUZXh0dXJlcz17fSx0aGlzLnNldHVwKCksdGhpcy5udW1TdWJsYXllcnM9THQubWF4VW5kZXJ6b29taW5nK0x0Lm1heE92ZXJ6b29taW5nKzEsdGhpcy5kZXB0aEVwc2lsb249MS9NYXRoLnBvdygyLDE2KSx0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4PW5ldyBCZSx0aGlzLmdwdVRpbWVycz17fX07eW4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlLHIpe2lmKHRoaXMud2lkdGg9ZSp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmhlaWdodD1yKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuY29udGV4dC52aWV3cG9ydC5zZXQoWzAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XSksdGhpcy5zdHlsZSlmb3IodmFyIG49MCxpPXRoaXMuc3R5bGUuX29yZGVyO248aS5sZW5ndGg7bis9MSl0aGlzLnN0eWxlLl9sYXllcnNbaVtuXV0ucmVzaXplKCl9LHluLnByb3RvdHlwZS5zZXR1cD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dCxyPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0Mmk0O3IuZW1wbGFjZUJhY2soMCwwKSxyLmVtcGxhY2VCYWNrKHQuRVhURU5ULDApLHIuZW1wbGFjZUJhY2soMCx0LkVYVEVOVCksci5lbXBsYWNlQmFjayh0LkVYVEVOVCx0LkVYVEVOVCksdGhpcy50aWxlRXh0ZW50QnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHIsSGUubWVtYmVycyksdGhpcy50aWxlRXh0ZW50U2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMik7dmFyIG49bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQyaTQ7bi5lbXBsYWNlQmFjaygwLDApLG4uZW1wbGFjZUJhY2sodC5FWFRFTlQsMCksbi5lbXBsYWNlQmFjaygwLHQuRVhURU5UKSxuLmVtcGxhY2VCYWNrKHQuRVhURU5ULHQuRVhURU5UKSx0aGlzLmRlYnVnQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKG4sSGUubWVtYmVycyksdGhpcy5kZWJ1Z1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDUpO3ZhciBpPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0NGk4O2kuZW1wbGFjZUJhY2soMCwwLDAsMCksaS5lbXBsYWNlQmFjayh0LkVYVEVOVCwwLHQuRVhURU5ULDApLGkuZW1wbGFjZUJhY2soMCx0LkVYVEVOVCwwLHQuRVhURU5UKSxpLmVtcGxhY2VCYWNrKHQuRVhURU5ULHQuRVhURU5ULHQuRVhURU5ULHQuRVhURU5UKSx0aGlzLnJhc3RlckJvdW5kc0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihpLFAubWVtYmVycyksdGhpcy5yYXN0ZXJCb3VuZHNTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKTt2YXIgYT1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDJpNDthLmVtcGxhY2VCYWNrKDAsMCksYS5lbXBsYWNlQmFjaygxLDApLGEuZW1wbGFjZUJhY2soMCwxKSxhLmVtcGxhY2VCYWNrKDEsMSksdGhpcy52aWV3cG9ydEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihhLEhlLm1lbWJlcnMpLHRoaXMudmlld3BvcnRTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKTt2YXIgbz1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDF1aTI7by5lbXBsYWNlQmFjaygwKSxvLmVtcGxhY2VCYWNrKDEpLG8uZW1wbGFjZUJhY2soMyksby5lbXBsYWNlQmFjaygyKSxvLmVtcGxhY2VCYWNrKDApLHRoaXMudGlsZUJvcmRlckluZGV4QnVmZmVyPWUuY3JlYXRlSW5kZXhCdWZmZXIobyk7dmFyIHM9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQzdWk2O3MuZW1wbGFjZUJhY2soMCwxLDIpLHMuZW1wbGFjZUJhY2soMiwxLDMpLHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXI9ZS5jcmVhdGVJbmRleEJ1ZmZlcihzKSx0aGlzLmVtcHR5VGV4dHVyZT1uZXcgdC5UZXh0dXJlKGUse3dpZHRoOjEsaGVpZ2h0OjEsZGF0YTpuZXcgVWludDhBcnJheShbMCwwLDAsMF0pfSxlLmdsLlJHQkEpO3ZhciBsPXRoaXMuY29udGV4dC5nbDt0aGlzLnN0ZW5jaWxDbGVhck1vZGU9bmV3IEF0KHtmdW5jOmwuQUxXQVlTLG1hc2s6MH0sMCwyNTUsbC5aRVJPLGwuWkVSTyxsLlpFUk8pfSx5bi5wcm90b3R5cGUuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9ZS5nbDt0aGlzLm5leHRTdGVuY2lsSUQ9MSx0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlPXZvaWQgMDt2YXIgbj10LmNyZWF0ZSgpO3Qub3J0aG8obiwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCwwLDEpLHQuc2NhbGUobixuLFtyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHQsMF0pLHRoaXMudXNlUHJvZ3JhbSgiY2xpcHBpbmdNYXNrIikuZHJhdyhlLHIuVFJJQU5HTEVTLE10LmRpc2FibGVkLHRoaXMuc3RlbmNpbENsZWFyTW9kZSxTdC5kaXNhYmxlZCxFdC5kaXNhYmxlZCxJcihuKSwiJGNsaXBwaW5nIix0aGlzLnZpZXdwb3J0QnVmZmVyLHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsdGhpcy52aWV3cG9ydFNlZ21lbnRzKX0seW4ucHJvdG90eXBlLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcz1mdW5jdGlvbih0LGUpe2lmKHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UhPT10LnNvdXJjZSYmdC5pc1RpbGVDbGlwcGVkKCkmJmUmJmUubGVuZ3RoKXt0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlPXQuc291cmNlO3ZhciByPXRoaXMuY29udGV4dCxuPXIuZ2w7dGhpcy5uZXh0U3RlbmNpbElEK2UubGVuZ3RoPjI1NiYmdGhpcy5jbGVhclN0ZW5jaWwoKSxyLnNldENvbG9yTW9kZShTdC5kaXNhYmxlZCksci5zZXREZXB0aE1vZGUoTXQuZGlzYWJsZWQpO3ZhciBpPXRoaXMudXNlUHJvZ3JhbSgiY2xpcHBpbmdNYXNrIik7dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEcz17fTtmb3IodmFyIGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1tzLmtleV09dGhpcy5uZXh0U3RlbmNpbElEKys7aS5kcmF3KHIsbi5UUklBTkdMRVMsTXQuZGlzYWJsZWQsbmV3IEF0KHtmdW5jOm4uQUxXQVlTLG1hc2s6MH0sbCwyNTUsbi5LRUVQLG4uS0VFUCxuLlJFUExBQ0UpLFN0LmRpc2FibGVkLEV0LmRpc2FibGVkLElyKHMucG9zTWF0cml4KSwiJGNsaXBwaW5nIix0aGlzLnRpbGVFeHRlbnRCdWZmZXIsdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcix0aGlzLnRpbGVFeHRlbnRTZWdtZW50cyl9fX0seW4ucHJvdG90eXBlLnN0ZW5jaWxNb2RlRm9yM0Q9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlPXZvaWQgMCx0aGlzLm5leHRTdGVuY2lsSUQrMT4yNTYmJnRoaXMuY2xlYXJTdGVuY2lsKCk7dmFyIHQ9dGhpcy5uZXh0U3RlbmNpbElEKyssZT10aGlzLmNvbnRleHQuZ2w7cmV0dXJuIG5ldyBBdCh7ZnVuYzplLk5PVEVRVUFMLG1hc2s6MjU1fSx0LDI1NSxlLktFRVAsZS5LRUVQLGUuUkVQTEFDRSl9LHluLnByb3RvdHlwZS5zdGVuY2lsTW9kZUZvckNsaXBwaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gbmV3IEF0KHtmdW5jOmUuRVFVQUwsbWFzazoyNTV9LHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdC5rZXldLDAsZS5LRUVQLGUuS0VFUCxlLlJFUExBQ0UpfSx5bi5wcm90b3R5cGUuc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXA9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmNvbnRleHQuZ2wsbj10LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUub3ZlcnNjYWxlZFotdC5vdmVyc2NhbGVkWn0pKSxpPW5bbi5sZW5ndGgtMV0ub3ZlcnNjYWxlZFosYT1uWzBdLm92ZXJzY2FsZWRaLWkrMTtpZihhPjEpe3RoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2U9dm9pZCAwLHRoaXMubmV4dFN0ZW5jaWxJRCthPjI1NiYmdGhpcy5jbGVhclN0ZW5jaWwoKTtmb3IodmFyIG89e30scz0wO3M8YTtzKyspb1tzK2ldPW5ldyBBdCh7ZnVuYzpyLkdFUVVBTCxtYXNrOjI1NX0scyt0aGlzLm5leHRTdGVuY2lsSUQsMjU1LHIuS0VFUCxyLktFRVAsci5SRVBMQUNFKTtyZXR1cm4gdGhpcy5uZXh0U3RlbmNpbElEKz1hLFtvLG5dfXJldHVyblsoZT17fSxlW2ldPUF0LmRpc2FibGVkLGUpLG5dfSx5bi5wcm90b3R5cGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yP25ldyBTdChbZS5DT05TVEFOVF9DT0xPUixlLk9ORV0sbmV3IHQuQ29sb3IoMS84LDEvOCwxLzgsMCksWyEwLCEwLCEwLCEwXSk6Im9wYXF1ZSI9PT10aGlzLnJlbmRlclBhc3M/U3QudW5ibGVuZGVkOlN0LmFscGhhQmxlbmRlZH0seW4ucHJvdG90eXBlLmRlcHRoTW9kZUZvclN1YmxheWVyPWZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkpcmV0dXJuIE10LmRpc2FibGVkO3ZhciBuPTEtKCgxK3RoaXMuY3VycmVudExheWVyKSp0aGlzLm51bVN1YmxheWVycyt0KSp0aGlzLmRlcHRoRXBzaWxvbjtyZXR1cm4gbmV3IE10KHJ8fHRoaXMuY29udGV4dC5nbC5MRVFVQUwsZSxbbixuXSl9LHluLnByb3RvdHlwZS5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudExheWVyPHRoaXMub3BhcXVlUGFzc0N1dG9mZn0seW4ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5zdHlsZT1lLHRoaXMub3B0aW9ucz1yLHRoaXMubGluZUF0bGFzPWUubGluZUF0bGFzLHRoaXMuaW1hZ2VNYW5hZ2VyPWUuaW1hZ2VNYW5hZ2VyLHRoaXMuZ2x5cGhNYW5hZ2VyPWUuZ2x5cGhNYW5hZ2VyLHRoaXMuc3ltYm9sRmFkZUNoYW5nZT1lLnBsYWNlbWVudC5zeW1ib2xGYWRlQ2hhbmdlKHQuYnJvd3Nlci5ub3coKSksdGhpcy5pbWFnZU1hbmFnZXIuYmVnaW5GcmFtZSgpO3ZhciBpPXRoaXMuc3R5bGUuX29yZGVyLGE9dGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBvIGluIGEpe3ZhciBzPWFbb107cy51c2VkJiZzLnByZXBhcmUodGhpcy5jb250ZXh0KX12YXIgbCxjLHU9e30saD17fSxmPXt9O2Zvcih2YXIgcCBpbiBhKXt2YXIgZD1hW3BdO3VbcF09ZC5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSxoW3BdPXVbcF0uc2xpY2UoKS5yZXZlcnNlKCksZltwXT1kLmdldFZpc2libGVDb29yZGluYXRlcyghMCkucmV2ZXJzZSgpfXRoaXMub3BhcXVlUGFzc0N1dG9mZj0xLzA7Zm9yKHZhciBnPTA7ZzxpLmxlbmd0aDtnKyspaWYodGhpcy5zdHlsZS5fbGF5ZXJzW2lbZ11dLmlzM0QoKSl7dGhpcy5vcGFxdWVQYXNzQ3V0b2ZmPWc7YnJlYWt9dGhpcy5yZW5kZXJQYXNzPSJvZmZzY3JlZW4iO2Zvcih2YXIgbT0wLHY9aTttPHYubGVuZ3RoO20rPTEpe3ZhciB5PXRoaXMuc3R5bGUuX2xheWVyc1t2W21dXTtpZih5Lmhhc09mZnNjcmVlblBhc3MoKSYmIXkuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSkpe3ZhciB4PWhbeS5zb3VyY2VdOygiY3VzdG9tIj09PXkudHlwZXx8eC5sZW5ndGgpJiZ0aGlzLnJlbmRlckxheWVyKHRoaXMsYVt5LnNvdXJjZV0seSx4KX19Zm9yKHRoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KG51bGwpLHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6ci5zaG93T3ZlcmRyYXdJbnNwZWN0b3I/dC5Db2xvci5ibGFjazp0LkNvbG9yLnRyYW5zcGFyZW50LGRlcHRoOjF9KSx0aGlzLmNsZWFyU3RlbmNpbCgpLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj1yLnNob3dPdmVyZHJhd0luc3BlY3Rvcix0aGlzLmRlcHRoUmFuZ2VGb3IzRD1bMCwxLShlLl9vcmRlci5sZW5ndGgrMikqdGhpcy5udW1TdWJsYXllcnMqdGhpcy5kZXB0aEVwc2lsb25dLHRoaXMucmVuZGVyUGFzcz0ib3BhcXVlIix0aGlzLmN1cnJlbnRMYXllcj1pLmxlbmd0aC0xO3RoaXMuY3VycmVudExheWVyPj0wO3RoaXMuY3VycmVudExheWVyLS0pe3ZhciBiPXRoaXMuc3R5bGUuX2xheWVyc1tpW3RoaXMuY3VycmVudExheWVyXV0sXz1hW2Iuc291cmNlXSx3PXVbYi5zb3VyY2VdO3RoaXMuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKGIsdyksdGhpcy5yZW5kZXJMYXllcih0aGlzLF8sYix3KX1mb3IodGhpcy5yZW5kZXJQYXNzPSJ0cmFuc2x1Y2VudCIsdGhpcy5jdXJyZW50TGF5ZXI9MDt0aGlzLmN1cnJlbnRMYXllcjxpLmxlbmd0aDt0aGlzLmN1cnJlbnRMYXllcisrKXt2YXIgVD10aGlzLnN0eWxlLl9sYXllcnNbaVt0aGlzLmN1cnJlbnRMYXllcl1dLGs9YVtULnNvdXJjZV0sTT0oInN5bWJvbCI9PT1ULnR5cGU/ZjpoKVtULnNvdXJjZV07dGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MoVCx1W1Quc291cmNlXSksdGhpcy5yZW5kZXJMYXllcih0aGlzLGssVCxNKX10aGlzLm9wdGlvbnMuc2hvd1RpbGVCb3VuZGFyaWVzJiYodC52YWx1ZXModGhpcy5zdHlsZS5fbGF5ZXJzKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNvdXJjZSYmIXQuaXNIaWRkZW4obi50cmFuc2Zvcm0uem9vbSkmJih0LnNvdXJjZSE9PShjJiZjLmlkKSYmKGM9bi5zdHlsZS5zb3VyY2VDYWNoZXNbdC5zb3VyY2VdKSwoIWx8fGwuZ2V0U291cmNlKCkubWF4em9vbTxjLmdldFNvdXJjZSgpLm1heHpvb20pJiYobD1jKSl9KSksbCYmdm4uZGVidWcodGhpcyxsLGwuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpKSx0aGlzLm9wdGlvbnMuc2hvd1BhZGRpbmcmJmZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhbnNmb3JtLnBhZGRpbmc7cG4odCx0LnRyYW5zZm9ybS5oZWlnaHQtKGUudG9wfHwwKSwzLGxuKSxwbih0LGUuYm90dG9tfHwwLDMsY24pLGRuKHQsZS5sZWZ0fHwwLDMsdW4pLGRuKHQsdC50cmFuc2Zvcm0ud2lkdGgtKGUucmlnaHR8fDApLDMsaG4pO3ZhciByPXQudHJhbnNmb3JtLmNlbnRlclBvaW50OyFmdW5jdGlvbih0LGUscixuKXtnbih0LGUtMSxyLTEwLDIsMjAsbiksZ24odCxlLTEwLHItMSwyMCwyLG4pfSh0LHIueCx0LnRyYW5zZm9ybS5oZWlnaHQtci55LGZuKX0odGhpcyksdGhpcy5jb250ZXh0LnNldERlZmF1bHQoKX0seW4ucHJvdG90eXBlLnJlbmRlckxheWVyPWZ1bmN0aW9uKHQsZSxyLG4pe3IuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSl8fCgiYmFja2dyb3VuZCI9PT1yLnR5cGV8fCJjdXN0b20iPT09ci50eXBlfHxuLmxlbmd0aCkmJih0aGlzLmlkPXIuaWQsdGhpcy5ncHVUaW1pbmdTdGFydChyKSx2bltyLnR5cGVdKHQsZSxyLG4sdGhpcy5zdHlsZS5wbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzKSx0aGlzLmdwdVRpbWluZ0VuZCgpKX0seW4ucHJvdG90eXBlLmdwdVRpbWluZ1N0YXJ0PWZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy5ncHVUaW1pbmcpe3ZhciBlPXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5LHI9dGhpcy5ncHVUaW1lcnNbdC5pZF07cnx8KHI9dGhpcy5ncHVUaW1lcnNbdC5pZF09e2NhbGxzOjAsY3B1VGltZTowLHF1ZXJ5OmUuY3JlYXRlUXVlcnlFWFQoKX0pLHIuY2FsbHMrKyxlLmJlZ2luUXVlcnlFWFQoZS5USU1FX0VMQVBTRURfRVhULHIucXVlcnkpfX0seW4ucHJvdG90eXBlLmdwdVRpbWluZ0VuZD1mdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5ncHVUaW1pbmcpe3ZhciB0PXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5O3QuZW5kUXVlcnlFWFQodC5USU1FX0VMQVBTRURfRVhUKX19LHluLnByb3RvdHlwZS5jb2xsZWN0R3B1VGltZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncHVUaW1lcnM7cmV0dXJuIHRoaXMuZ3B1VGltZXJzPXt9LHR9LHluLnByb3RvdHlwZS5xdWVyeUdwdVRpbWVycz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCl7dmFyIG49dFtyXSxpPXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5LGE9aS5nZXRRdWVyeU9iamVjdEVYVChuLnF1ZXJ5LGkuUVVFUllfUkVTVUxUX0VYVCkvMWU2O2kuZGVsZXRlUXVlcnlFWFQobi5xdWVyeSksZVtyXT1hfXJldHVybiBlfSx5bi5wcm90b3R5cGUudHJhbnNsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscixuLGksYSl7aWYoIW5bMF0mJiFuWzFdKXJldHVybiBlO3ZhciBvPWE/Im1hcCI9PT1pP3RoaXMudHJhbnNmb3JtLmFuZ2xlOjA6InZpZXdwb3J0Ij09PWk/LXRoaXMudHJhbnNmb3JtLmFuZ2xlOjA7aWYobyl7dmFyIHM9TWF0aC5zaW4obyksbD1NYXRoLmNvcyhvKTtuPVtuWzBdKmwtblsxXSpzLG5bMF0qcytuWzFdKmxdfXZhciBjPVthP25bMF06ZmUocixuWzBdLHRoaXMudHJhbnNmb3JtLnpvb20pLGE/blsxXTpmZShyLG5bMV0sdGhpcy50cmFuc2Zvcm0uem9vbSksMF0sdT1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdC50cmFuc2xhdGUodSxlLGMpLHV9LHluLnByb3RvdHlwZS5zYXZlVGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV07ZT9lLnB1c2godCk6dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV09W3RdfSx5bi5wcm90b3R5cGUuZ2V0VGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3RdO3JldHVybiBlJiZlLmxlbmd0aD4wP2UucG9wKCk6bnVsbH0seW4ucHJvdG90eXBlLmlzUGF0dGVybk1pc3Npbmc9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7aWYoIXQuZnJvbXx8IXQudG8pcmV0dXJuITA7dmFyIGU9dGhpcy5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20udG9TdHJpbmcoKSkscj10aGlzLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQudG8udG9TdHJpbmcoKSk7cmV0dXJuIWV8fCFyfSx5bi5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbih0LGUpe3RoaXMuY2FjaGU9dGhpcy5jYWNoZXx8e307dmFyIHI9IiIrdCsoZT9lLmNhY2hlS2V5OiIiKSsodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yPyIvb3ZlcmRyYXciOiIiKTtyZXR1cm4gdGhpcy5jYWNoZVtyXXx8KHRoaXMuY2FjaGVbcl09bmV3IGJyKHRoaXMuY29udGV4dCx5clt0XSxlLFpyW3RdLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvcikpLHRoaXMuY2FjaGVbcl19LHluLnByb3RvdHlwZS5zZXRDdXN0b21MYXllckRlZmF1bHRzPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHRoaXMuY29udGV4dC5jdWxsRmFjZS5zZXREZWZhdWx0KCksdGhpcy5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0RGVmYXVsdCgpLHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKSx0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0RGVmYXVsdCgpLHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0RGVmYXVsdCgpfSx5bi5wcm90b3R5cGUuc2V0QmFzZVN0YXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsO3RoaXMuY29udGV4dC5jdWxsRmFjZS5zZXQoITEpLHRoaXMuY29udGV4dC52aWV3cG9ydC5zZXQoWzAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XSksdGhpcy5jb250ZXh0LmJsZW5kRXF1YXRpb24uc2V0KHQuRlVOQ19BREQpfSx5bi5wcm90b3R5cGUuaW5pdERlYnVnT3ZlcmxheUNhbnZhcz1mdW5jdGlvbigpe251bGw9PXRoaXMuZGVidWdPdmVybGF5Q2FudmFzJiYodGhpcy5kZWJ1Z092ZXJsYXlDYW52YXM9dC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5kZWJ1Z092ZXJsYXlDYW52YXMud2lkdGg9NTEyLHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLmhlaWdodD01MTIsdGhpcy5kZWJ1Z092ZXJsYXlUZXh0dXJlPW5ldyB0LlRleHR1cmUodGhpcy5jb250ZXh0LHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLHRoaXMuY29udGV4dC5nbC5SR0JBKSl9LHluLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5lbXB0eVRleHR1cmUuZGVzdHJveSgpLHRoaXMuZGVidWdPdmVybGF5VGV4dHVyZSYmdGhpcy5kZWJ1Z092ZXJsYXlUZXh0dXJlLmRlc3Ryb3koKX07dmFyIHhuPWZ1bmN0aW9uKHQsZSl7dGhpcy5wb2ludHM9dCx0aGlzLnBsYW5lcz1lfTt4bi5mcm9tSW52UHJvamVjdGlvbk1hdHJpeD1mdW5jdGlvbihlLHIsbil7dmFyIGk9TWF0aC5wb3coMixuKSxhPVtbLTEsMSwtMSwxXSxbMSwxLC0xLDFdLFsxLC0xLC0xLDFdLFstMSwtMSwtMSwxXSxbLTEsMSwxLDFdLFsxLDEsMSwxXSxbMSwtMSwxLDFdLFstMSwtMSwxLDFdXS5tYXAoKGZ1bmN0aW9uKHIpe3JldHVybiB0LnRyYW5zZm9ybU1hdDQoW10scixlKX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjYWxlJDEoW10sZSwxL2VbM10vcippKX0pKSxvPVtbMCwxLDJdLFs2LDUsNF0sWzAsMyw3XSxbMiwxLDVdLFszLDIsNl0sWzAsNCw1XV0ubWFwKChmdW5jdGlvbihlKXt2YXIgcj10LnN1YihbXSxhW2VbMF1dLGFbZVsxXV0pLG49dC5zdWIoW10sYVtlWzJdXSxhW2VbMV1dKSxpPXQubm9ybWFsaXplKFtdLHQuY3Jvc3MoW10scixuKSksbz0tdC5kb3QoaSxhW2VbMV1dKTtyZXR1cm4gaS5jb25jYXQobyl9KSk7cmV0dXJuIG5ldyB4bihhLG8pfTt2YXIgYm49ZnVuY3Rpb24oZSxyKXt0aGlzLm1pbj1lLHRoaXMubWF4PXIsdGhpcy5jZW50ZXI9dC5zY2FsZSQyKFtdLHQuYWRkKFtdLHRoaXMubWluLHRoaXMubWF4KSwuNSl9O2JuLnByb3RvdHlwZS5xdWFkcmFudD1mdW5jdGlvbihlKXtmb3IodmFyIHI9W2UlMj09MCxlPDJdLG49dC5jbG9uZSQyKHRoaXMubWluKSxpPXQuY2xvbmUkMih0aGlzLm1heCksYT0wO2E8ci5sZW5ndGg7YSsrKW5bYV09clthXT90aGlzLm1pblthXTp0aGlzLmNlbnRlclthXSxpW2FdPXJbYV0/dGhpcy5jZW50ZXJbYV06dGhpcy5tYXhbYV07cmV0dXJuIGlbMl09dGhpcy5tYXhbMl0sbmV3IGJuKG4saSl9LGJuLnByb3RvdHlwZS5kaXN0YW5jZVg9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHRoaXMubWF4WzBdLHRbMF0pLHRoaXMubWluWzBdKS10WzBdfSxibi5wcm90b3R5cGUuZGlzdGFuY2VZPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heFsxXSx0WzFdKSx0aGlzLm1pblsxXSktdFsxXX0sYm4ucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPVtbdGhpcy5taW5bMF0sdGhpcy5taW5bMV0sMCwxXSxbdGhpcy5tYXhbMF0sdGhpcy5taW5bMV0sMCwxXSxbdGhpcy5tYXhbMF0sdGhpcy5tYXhbMV0sMCwxXSxbdGhpcy5taW5bMF0sdGhpcy5tYXhbMV0sMCwxXV0sbj0hMCxpPTA7aTxlLnBsYW5lcy5sZW5ndGg7aSsrKXtmb3IodmFyIGE9ZS5wbGFuZXNbaV0sbz0wLHM9MDtzPHIubGVuZ3RoO3MrKylvKz10LmRvdCQxKGEscltzXSk+PTA7aWYoMD09PW8pcmV0dXJuIDA7byE9PXIubGVuZ3RoJiYobj0hMSl9aWYobilyZXR1cm4gMjtmb3IodmFyIGw9MDtsPDM7bCsrKXtmb3IodmFyIGM9TnVtYmVyLk1BWF9WQUxVRSx1PS1OdW1iZXIuTUFYX1ZBTFVFLGg9MDtoPGUucG9pbnRzLmxlbmd0aDtoKyspe3ZhciBmPWUucG9pbnRzW2hdW2xdLXRoaXMubWluW2xdO2M9TWF0aC5taW4oYyxmKSx1PU1hdGgubWF4KHUsZil9aWYodTwwfHxjPnRoaXMubWF4W2xdLXRoaXMubWluW2xdKXJldHVybiAwfXJldHVybiAxfTt2YXIgX249ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9MCksdm9pZCAwPT09biYmKG49MCksaXNOYU4odCl8fHQ8MHx8aXNOYU4oZSl8fGU8MHx8aXNOYU4ocil8fHI8MHx8aXNOYU4obil8fG48MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWUgZm9yIGVkZ2UtaW5zZXRzLCB0b3AsIGJvdHRvbSwgbGVmdCBhbmQgcmlnaHQgbXVzdCBhbGwgYmUgbnVtYmVycyIpO3RoaXMudG9wPXQsdGhpcy5ib3R0b209ZSx0aGlzLmxlZnQ9cix0aGlzLnJpZ2h0PW59O19uLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIG51bGwhPXIudG9wJiZudWxsIT1lLnRvcCYmKHRoaXMudG9wPXQubnVtYmVyKGUudG9wLHIudG9wLG4pKSxudWxsIT1yLmJvdHRvbSYmbnVsbCE9ZS5ib3R0b20mJih0aGlzLmJvdHRvbT10Lm51bWJlcihlLmJvdHRvbSxyLmJvdHRvbSxuKSksbnVsbCE9ci5sZWZ0JiZudWxsIT1lLmxlZnQmJih0aGlzLmxlZnQ9dC5udW1iZXIoZS5sZWZ0LHIubGVmdCxuKSksbnVsbCE9ci5yaWdodCYmbnVsbCE9ZS5yaWdodCYmKHRoaXMucmlnaHQ9dC5udW1iZXIoZS5yaWdodCxyLnJpZ2h0LG4pKSx0aGlzfSxfbi5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKGUscil7dmFyIG49dC5jbGFtcCgodGhpcy5sZWZ0K2UtdGhpcy5yaWdodCkvMiwwLGUpLGk9dC5jbGFtcCgodGhpcy50b3Arci10aGlzLmJvdHRvbSkvMiwwLHIpO3JldHVybiBuZXcgdC5Qb2ludChuLGkpfSxfbi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRvcD09PXQudG9wJiZ0aGlzLmJvdHRvbT09PXQuYm90dG9tJiZ0aGlzLmxlZnQ9PT10LmxlZnQmJnRoaXMucmlnaHQ9PT10LnJpZ2h0fSxfbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMudG9wLHRoaXMuYm90dG9tLHRoaXMubGVmdCx0aGlzLnJpZ2h0KX0sX24ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0b3A6dGhpcy50b3AsYm90dG9tOnRoaXMuYm90dG9tLGxlZnQ6dGhpcy5sZWZ0LHJpZ2h0OnRoaXMucmlnaHR9fTt2YXIgd249ZnVuY3Rpb24oZSxyLG4saSxhKXt0aGlzLnRpbGVTaXplPTUxMix0aGlzLm1heFZhbGlkTGF0aXR1ZGU9ODUuMDUxMTI5LHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXZvaWQgMD09PWF8fGEsdGhpcy5fbWluWm9vbT1lfHwwLHRoaXMuX21heFpvb209cnx8MjIsdGhpcy5fbWluUGl0Y2g9bnVsbD09bj8wOm4sdGhpcy5fbWF4UGl0Y2g9bnVsbD09aT82MDppLHRoaXMuc2V0TWF4Qm91bmRzKCksdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy5fY2VudGVyPW5ldyB0LkxuZ0xhdCgwLDApLHRoaXMuem9vbT0wLHRoaXMuYW5nbGU9MCx0aGlzLl9mb3Y9LjY0MzUwMTEwODc5MzI4NDQsdGhpcy5fcGl0Y2g9MCx0aGlzLl91bm1vZGlmaWVkPSEwLHRoaXMuX2VkZ2VJbnNldHM9bmV3IF9uLHRoaXMuX3Bvc01hdHJpeENhY2hlPXt9LHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZT17fX0sVG49e21pblpvb206e2NvbmZpZ3VyYWJsZTohMH0sbWF4Wm9vbTp7Y29uZmlndXJhYmxlOiEwfSxtaW5QaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxtYXhQaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxyZW5kZXJXb3JsZENvcGllczp7Y29uZmlndXJhYmxlOiEwfSx3b3JsZFNpemU6e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVyT2Zmc2V0Ontjb25maWd1cmFibGU6ITB9LHNpemU6e2NvbmZpZ3VyYWJsZTohMH0sYmVhcmluZzp7Y29uZmlndXJhYmxlOiEwfSxwaXRjaDp7Y29uZmlndXJhYmxlOiEwfSxmb3Y6e2NvbmZpZ3VyYWJsZTohMH0sem9vbTp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXI6e2NvbmZpZ3VyYWJsZTohMH0scGFkZGluZzp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXJQb2ludDp7Y29uZmlndXJhYmxlOiEwfSx1bm1vZGlmaWVkOntjb25maWd1cmFibGU6ITB9LHBvaW50Ontjb25maWd1cmFibGU6ITB9fTt3bi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgd24odGhpcy5fbWluWm9vbSx0aGlzLl9tYXhab29tLHRoaXMuX21pblBpdGNoLHRoaXMubWF4UGl0Y2gsdGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpO3JldHVybiB0LnRpbGVTaXplPXRoaXMudGlsZVNpemUsdC5sYXRSYW5nZT10aGlzLmxhdFJhbmdlLHQud2lkdGg9dGhpcy53aWR0aCx0LmhlaWdodD10aGlzLmhlaWdodCx0Ll9jZW50ZXI9dGhpcy5fY2VudGVyLHQuem9vbT10aGlzLnpvb20sdC5hbmdsZT10aGlzLmFuZ2xlLHQuX2Zvdj10aGlzLl9mb3YsdC5fcGl0Y2g9dGhpcy5fcGl0Y2gsdC5fdW5tb2RpZmllZD10aGlzLl91bm1vZGlmaWVkLHQuX2VkZ2VJbnNldHM9dGhpcy5fZWRnZUluc2V0cy5jbG9uZSgpLHQuX2NhbGNNYXRyaWNlcygpLHR9LFRuLm1pblpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pblpvb219LFRuLm1pblpvb20uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21pblpvb20hPT10JiYodGhpcy5fbWluWm9vbT10LHRoaXMuem9vbT1NYXRoLm1heCh0aGlzLnpvb20sdCkpfSxUbi5tYXhab29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhab29tfSxUbi5tYXhab29tLnNldD1mdW5jdGlvbih0KXt0aGlzLl9tYXhab29tIT09dCYmKHRoaXMuX21heFpvb209dCx0aGlzLnpvb209TWF0aC5taW4odGhpcy56b29tLHQpKX0sVG4ubWluUGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pblBpdGNofSxUbi5taW5QaXRjaC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWluUGl0Y2ghPT10JiYodGhpcy5fbWluUGl0Y2g9dCx0aGlzLnBpdGNoPU1hdGgubWF4KHRoaXMucGl0Y2gsdCkpfSxUbi5tYXhQaXRjaC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4UGl0Y2h9LFRuLm1heFBpdGNoLnNldD1mdW5jdGlvbih0KXt0aGlzLl9tYXhQaXRjaCE9PXQmJih0aGlzLl9tYXhQaXRjaD10LHRoaXMucGl0Y2g9TWF0aC5taW4odGhpcy5waXRjaCx0KSl9LFRuLnJlbmRlcldvcmxkQ29waWVzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJXb3JsZENvcGllc30sVG4ucmVuZGVyV29ybGRDb3BpZXMuc2V0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQ/dD0hMDpudWxsPT09dCYmKHQ9ITEpLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXR9LFRuLndvcmxkU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aWxlU2l6ZSp0aGlzLnNjYWxlfSxUbi5jZW50ZXJPZmZzZXQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2VudGVyUG9pbnQuX3N1Yih0aGlzLnNpemUuX2RpdigyKSl9LFRuLnNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0LlBvaW50KHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxUbi5iZWFyaW5nLmdldD1mdW5jdGlvbigpe3JldHVybi10aGlzLmFuZ2xlL01hdGguUEkqMTgwfSxUbi5iZWFyaW5nLnNldD1mdW5jdGlvbihlKXt2YXIgcj0tdC53cmFwKGUsLTE4MCwxODApKk1hdGguUEkvMTgwO3RoaXMuYW5nbGUhPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLmFuZ2xlPXIsdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5yb3RhdGlvbk1hdHJpeD10LmNyZWF0ZSQyKCksdC5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMuYW5nbGUpKX0sVG4ucGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoL01hdGguUEkqMTgwfSxUbi5waXRjaC5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dC5jbGFtcChlLHRoaXMubWluUGl0Y2gsdGhpcy5tYXhQaXRjaCkvMTgwKk1hdGguUEk7dGhpcy5fcGl0Y2ghPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9waXRjaD1yLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sVG4uZm92LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3YvTWF0aC5QSSoxODB9LFRuLmZvdi5zZXQ9ZnVuY3Rpb24odCl7dD1NYXRoLm1heCguMDEsTWF0aC5taW4oNjAsdCkpLHRoaXMuX2ZvdiE9PXQmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2Zvdj10LzE4MCpNYXRoLlBJLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sVG4uem9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9vbX0sVG4uem9vbS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5taW4oTWF0aC5tYXgodCx0aGlzLm1pblpvb20pLHRoaXMubWF4Wm9vbSk7dGhpcy5fem9vbSE9PWUmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX3pvb209ZSx0aGlzLnNjYWxlPXRoaXMuem9vbVNjYWxlKGUpLHRoaXMudGlsZVpvb209TWF0aC5mbG9vcihlKSx0aGlzLnpvb21GcmFjdGlvbj1lLXRoaXMudGlsZVpvb20sdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxUbi5jZW50ZXIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NlbnRlcn0sVG4uY2VudGVyLnNldD1mdW5jdGlvbih0KXt0LmxhdD09PXRoaXMuX2NlbnRlci5sYXQmJnQubG5nPT09dGhpcy5fY2VudGVyLmxuZ3x8KHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fY2VudGVyPXQsdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxUbi5wYWRkaW5nLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lZGdlSW5zZXRzLnRvSlNPTigpfSxUbi5wYWRkaW5nLnNldD1mdW5jdGlvbih0KXt0aGlzLl9lZGdlSW5zZXRzLmVxdWFscyh0KXx8KHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fZWRnZUluc2V0cy5pbnRlcnBvbGF0ZSh0aGlzLl9lZGdlSW5zZXRzLHQsMSksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxUbi5jZW50ZXJQb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUluc2V0cy5nZXRDZW50ZXIodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9LHduLnByb3RvdHlwZS5pc1BhZGRpbmdFcXVhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZWRnZUluc2V0cy5lcXVhbHModCl9LHduLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVBhZGRpbmc9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fZWRnZUluc2V0cy5pbnRlcnBvbGF0ZSh0LGUsciksdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCl9LHduLnByb3RvdHlwZS5jb3ZlcmluZ1pvb21MZXZlbD1mdW5jdGlvbih0KXt2YXIgZT0odC5yb3VuZFpvb20/TWF0aC5yb3VuZDpNYXRoLmZsb29yKSh0aGlzLnpvb20rdGhpcy5zY2FsZVpvb20odGhpcy50aWxlU2l6ZS90LnRpbGVTaXplKSk7cmV0dXJuIE1hdGgubWF4KDAsZSl9LHduLnByb3RvdHlwZS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7dmFyIHI9W25ldyB0LlVud3JhcHBlZFRpbGVJRCgwLGUpXTtpZih0aGlzLl9yZW5kZXJXb3JsZENvcGllcylmb3IodmFyIG49dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuUG9pbnQoMCwwKSksaT10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCh0aGlzLndpZHRoLDApKSxhPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSxvPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KDAsdGhpcy5oZWlnaHQpKSxzPU1hdGguZmxvb3IoTWF0aC5taW4obi54LGkueCxhLngsby54KSksbD1NYXRoLmZsb29yKE1hdGgubWF4KG4ueCxpLngsYS54LG8ueCkpLGM9cy0xO2M8PWwrMTtjKyspMCE9PWMmJnIucHVzaChuZXcgdC5VbndyYXBwZWRUaWxlSUQoYyxlKSk7cmV0dXJuIHJ9LHduLnByb3RvdHlwZS5jb3ZlcmluZ1RpbGVzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY292ZXJpbmdab29tTGV2ZWwoZSksbj1yO2lmKHZvaWQgMCE9PWUubWluem9vbSYmcjxlLm1pbnpvb20pcmV0dXJuW107dm9pZCAwIT09ZS5tYXh6b29tJiZyPmUubWF4em9vbSYmKHI9ZS5tYXh6b29tKTt2YXIgaT10Lk1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KHRoaXMuY2VudGVyKSxhPU1hdGgucG93KDIsciksbz1bYSppLngsYSppLnksMF0scz14bi5mcm9tSW52UHJvamVjdGlvbk1hdHJpeCh0aGlzLmludlByb2pNYXRyaXgsdGhpcy53b3JsZFNpemUsciksbD1lLm1pbnpvb218fDA7dGhpcy5waXRjaDw9NjAmJnRoaXMuX2VkZ2VJbnNldHMudG9wPC4xJiYobD1yKTt2YXIgYz1mdW5jdGlvbih0KXtyZXR1cm57YWFiYjpuZXcgYm4oW3QqYSwwLDBdLFsodCsxKSphLGEsMF0pLHpvb206MCx4OjAseTowLHdyYXA6dCxmdWxseVZpc2libGU6ITF9fSx1PVtdLGg9W10sZj1yLHA9ZS5yZXBhcnNlT3ZlcnNjYWxlZD9uOnI7aWYodGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpZm9yKHZhciBkPTE7ZDw9MztkKyspdS5wdXNoKGMoLWQpKSx1LnB1c2goYyhkKSk7Zm9yKHUucHVzaChjKDApKTt1Lmxlbmd0aD4wOyl7dmFyIGc9dS5wb3AoKSxtPWcueCx2PWcueSx5PWcuZnVsbHlWaXNpYmxlO2lmKCF5KXt2YXIgeD1nLmFhYmIuaW50ZXJzZWN0cyhzKTtpZigwPT09eCljb250aW51ZTt5PTI9PT14fXZhciBiPWcuYWFiYi5kaXN0YW5jZVgobyksXz1nLmFhYmIuZGlzdGFuY2VZKG8pLHc9TWF0aC5tYXgoTWF0aC5hYnMoYiksTWF0aC5hYnMoXykpO2lmKGcuem9vbT09PWZ8fHc+MysoMTw8Zi1nLnpvb20pLTImJmcuem9vbT49bCloLnB1c2goe3RpbGVJRDpuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGcuem9vbT09PWY/cDpnLnpvb20sZy53cmFwLGcuem9vbSxtLHYpLGRpc3RhbmNlU3E6dC5zcXJMZW4oW29bMF0tLjUtbSxvWzFdLS41LXZdKX0pO2Vsc2UgZm9yKHZhciBUPTA7VDw0O1QrKyl7dmFyIGs9KG08PDEpK1QlMixNPSh2PDwxKSsoVD4+MSk7dS5wdXNoKHthYWJiOmcuYWFiYi5xdWFkcmFudChUKSx6b29tOmcuem9vbSsxLHg6ayx5Ok0sd3JhcDpnLndyYXAsZnVsbHlWaXNpYmxlOnl9KX19cmV0dXJuIGguc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXN0YW5jZVNxLWUuZGlzdGFuY2VTcX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbGVJRH0pKX0sd24ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMucGl4ZWxzVG9HTFVuaXRzPVsyL3QsLTIvZV0sdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCl9LFRuLnVubW9kaWZpZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VubW9kaWZpZWR9LHduLnByb3RvdHlwZS56b29tU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9LHduLnByb3RvdHlwZS5zY2FsZVpvb209ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4yfSx3bi5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbihlKXt2YXIgcj10LmNsYW1wKGUubGF0LC10aGlzLm1heFZhbGlkTGF0aXR1ZGUsdGhpcy5tYXhWYWxpZExhdGl0dWRlKTtyZXR1cm4gbmV3IHQuUG9pbnQodC5tZXJjYXRvclhmcm9tTG5nKGUubG5nKSp0aGlzLndvcmxkU2l6ZSx0Lm1lcmNhdG9yWWZyb21MYXQocikqdGhpcy53b3JsZFNpemUpfSx3bi5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoZS54L3RoaXMud29ybGRTaXplLGUueS90aGlzLndvcmxkU2l6ZSkudG9MbmdMYXQoKX0sVG4ucG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvamVjdCh0aGlzLmNlbnRlcil9LHduLnByb3RvdHlwZS5zZXRMb2NhdGlvbkF0UG9pbnQ9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLnBvaW50Q29vcmRpbmF0ZShyKSxpPXRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQpLGE9dGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUoZSksbz1uZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoYS54LShuLngtaS54KSxhLnktKG4ueS1pLnkpKTt0aGlzLmNlbnRlcj10aGlzLmNvb3JkaW5hdGVMb2NhdGlvbihvKSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuY2VudGVyPXRoaXMuY2VudGVyLndyYXAoKSl9LHduLnByb3RvdHlwZS5sb2NhdGlvblBvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVQb2ludCh0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZSh0KSl9LHduLnByb3RvdHlwZS5wb2ludExvY2F0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLnBvaW50Q29vcmRpbmF0ZSh0KSl9LHduLnByb3RvdHlwZS5sb2NhdGlvbkNvb3JkaW5hdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQoZSl9LHduLnByb3RvdHlwZS5jb29yZGluYXRlTG9jYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9MbmdMYXQoKX0sd24ucHJvdG90eXBlLnBvaW50Q29vcmRpbmF0ZT1mdW5jdGlvbihlKXt2YXIgcj1bZS54LGUueSwwLDFdLG49W2UueCxlLnksMSwxXTt0LnRyYW5zZm9ybU1hdDQocixyLHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKSx0LnRyYW5zZm9ybU1hdDQobixuLHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKTt2YXIgaT1yWzNdLGE9blszXSxvPXJbMV0vaSxzPW5bMV0vYSxsPXJbMl0vaSxjPW5bMl0vYSx1PWw9PT1jPzA6KDAtbCkvKGMtbCk7cmV0dXJuIG5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZSh0Lm51bWJlcihyWzBdL2ksblswXS9hLHUpL3RoaXMud29ybGRTaXplLHQubnVtYmVyKG8scyx1KS90aGlzLndvcmxkU2l6ZSl9LHduLnByb3RvdHlwZS5jb29yZGluYXRlUG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHI9W2UueCp0aGlzLndvcmxkU2l6ZSxlLnkqdGhpcy53b3JsZFNpemUsMCwxXTtyZXR1cm4gdC50cmFuc2Zvcm1NYXQ0KHIscix0aGlzLnBpeGVsTWF0cml4KSxuZXcgdC5Qb2ludChyWzBdL3JbM10sclsxXS9yWzNdKX0sd24ucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbigpe3JldHVybihuZXcgdC5MbmdMYXRCb3VuZHMpLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IHQuUG9pbnQoMCwwKSkpLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IHQuUG9pbnQodGhpcy53aWR0aCwwKSkpLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IHQuUG9pbnQodGhpcy53aWR0aCx0aGlzLmhlaWdodCkpKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KDAsdGhpcy5oZWlnaHQpKSl9LHduLnByb3RvdHlwZS5nZXRNYXhCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXRSYW5nZSYmMj09PXRoaXMubGF0UmFuZ2UubGVuZ3RoJiZ0aGlzLmxuZ1JhbmdlJiYyPT09dGhpcy5sbmdSYW5nZS5sZW5ndGg/bmV3IHQuTG5nTGF0Qm91bmRzKFt0aGlzLmxuZ1JhbmdlWzBdLHRoaXMubGF0UmFuZ2VbMF1dLFt0aGlzLmxuZ1JhbmdlWzFdLHRoaXMubGF0UmFuZ2VbMV1dKTpudWxsfSx3bi5wcm90b3R5cGUuc2V0TWF4Qm91bmRzPWZ1bmN0aW9uKHQpe3Q/KHRoaXMubG5nUmFuZ2U9W3QuZ2V0V2VzdCgpLHQuZ2V0RWFzdCgpXSx0aGlzLmxhdFJhbmdlPVt0LmdldFNvdXRoKCksdC5nZXROb3J0aCgpXSx0aGlzLl9jb25zdHJhaW4oKSk6KHRoaXMubG5nUmFuZ2U9bnVsbCx0aGlzLmxhdFJhbmdlPVstdGhpcy5tYXhWYWxpZExhdGl0dWRlLHRoaXMubWF4VmFsaWRMYXRpdHVkZV0pfSx3bi5wcm90b3R5cGUuY2FsY3VsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscil7dm9pZCAwPT09ciYmKHI9ITEpO3ZhciBuPWUua2V5LGk9cj90aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU6dGhpcy5fcG9zTWF0cml4Q2FjaGU7aWYoaVtuXSlyZXR1cm4gaVtuXTt2YXIgYT1lLmNhbm9uaWNhbCxvPXRoaXMud29ybGRTaXplL3RoaXMuem9vbVNjYWxlKGEueikscz1hLngrTWF0aC5wb3coMixhLnopKmUud3JhcCxsPXQuaWRlbnRpdHkobmV3IEZsb2F0NjRBcnJheSgxNikpO3JldHVybiB0LnRyYW5zbGF0ZShsLGwsW3MqbyxhLnkqbywwXSksdC5zY2FsZShsLGwsW28vdC5FWFRFTlQsby90LkVYVEVOVCwxXSksdC5tdWx0aXBseShsLHI/dGhpcy5hbGlnbmVkUHJvak1hdHJpeDp0aGlzLnByb2pNYXRyaXgsbCksaVtuXT1uZXcgRmxvYXQzMkFycmF5KGwpLGlbbl19LHduLnByb3RvdHlwZS5jdXN0b21MYXllck1hdHJpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lcmNhdG9yTWF0cml4LnNsaWNlKCl9LHduLnByb3RvdHlwZS5fY29uc3RyYWluPWZ1bmN0aW9uKCl7aWYodGhpcy5jZW50ZXImJnRoaXMud2lkdGgmJnRoaXMuaGVpZ2h0JiYhdGhpcy5fY29uc3RyYWluaW5nKXt0aGlzLl9jb25zdHJhaW5pbmc9ITA7dmFyIGUscixuLGksYT0tOTAsbz05MCxzPS0xODAsbD0xODAsYz10aGlzLnNpemUsdT10aGlzLl91bm1vZGlmaWVkO2lmKHRoaXMubGF0UmFuZ2Upe3ZhciBoPXRoaXMubGF0UmFuZ2U7YT10Lm1lcmNhdG9yWWZyb21MYXQoaFsxXSkqdGhpcy53b3JsZFNpemUsZT0obz10Lm1lcmNhdG9yWWZyb21MYXQoaFswXSkqdGhpcy53b3JsZFNpemUpLWE8Yy55P2MueS8oby1hKTowfWlmKHRoaXMubG5nUmFuZ2Upe3ZhciBmPXRoaXMubG5nUmFuZ2U7cz10Lm1lcmNhdG9yWGZyb21MbmcoZlswXSkqdGhpcy53b3JsZFNpemUscj0obD10Lm1lcmNhdG9yWGZyb21MbmcoZlsxXSkqdGhpcy53b3JsZFNpemUpLXM8Yy54P2MueC8obC1zKTowfXZhciBwPXRoaXMucG9pbnQsZD1NYXRoLm1heChyfHwwLGV8fDApO2lmKGQpcmV0dXJuIHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LlBvaW50KHI/KGwrcykvMjpwLngsZT8obythKS8yOnAueSkpLHRoaXMuem9vbSs9dGhpcy5zY2FsZVpvb20oZCksdGhpcy5fdW5tb2RpZmllZD11LHZvaWQodGhpcy5fY29uc3RyYWluaW5nPSExKTtpZih0aGlzLmxhdFJhbmdlKXt2YXIgZz1wLnksbT1jLnkvMjtnLW08YSYmKGk9YSttKSxnK20+byYmKGk9by1tKX1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgdj1wLngseT1jLngvMjt2LXk8cyYmKG49cyt5KSx2K3k+bCYmKG49bC15KX12b2lkIDA9PT1uJiZ2b2lkIDA9PT1pfHwodGhpcy5jZW50ZXI9dGhpcy51bnByb2plY3QobmV3IHQuUG9pbnQodm9pZCAwIT09bj9uOnAueCx2b2lkIDAhPT1pP2k6cC55KSkpLHRoaXMuX3VubW9kaWZpZWQ9dSx0aGlzLl9jb25zdHJhaW5pbmc9ITF9fSx3bi5wcm90b3R5cGUuX2NhbGNNYXRyaWNlcz1mdW5jdGlvbigpe2lmKHRoaXMuaGVpZ2h0KXt2YXIgZT10aGlzLmNlbnRlck9mZnNldDt0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U9LjUvTWF0aC50YW4odGhpcy5fZm92LzIpKnRoaXMuaGVpZ2h0O3ZhciByPU1hdGguUEkvMit0aGlzLl9waXRjaCxuPXRoaXMuX2ZvdiooLjUrZS55L3RoaXMuaGVpZ2h0KSxpPU1hdGguc2luKG4pKnRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9NYXRoLnNpbih0LmNsYW1wKE1hdGguUEktci1uLC4wMSxNYXRoLlBJLS4wMSkpLGE9dGhpcy5wb2ludCxvPWEueCxzPWEueSxsPTEuMDEqKE1hdGguY29zKE1hdGguUEkvMi10aGlzLl9waXRjaCkqaSt0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpLGM9dGhpcy5oZWlnaHQvNTAsdT1uZXcgRmxvYXQ2NEFycmF5KDE2KTt0LnBlcnNwZWN0aXZlKHUsdGhpcy5fZm92LHRoaXMud2lkdGgvdGhpcy5oZWlnaHQsYyxsKSx1WzhdPTIqLWUueC90aGlzLndpZHRoLHVbOV09MiplLnkvdGhpcy5oZWlnaHQsdC5zY2FsZSh1LHUsWzEsLTEsMV0pLHQudHJhbnNsYXRlKHUsdSxbMCwwLC10aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2VdKSx0LnJvdGF0ZVgodSx1LHRoaXMuX3BpdGNoKSx0LnJvdGF0ZVoodSx1LHRoaXMuYW5nbGUpLHQudHJhbnNsYXRlKHUsdSxbLW8sLXMsMF0pLHRoaXMubWVyY2F0b3JNYXRyaXg9dC5zY2FsZShbXSx1LFt0aGlzLndvcmxkU2l6ZSx0aGlzLndvcmxkU2l6ZSx0aGlzLndvcmxkU2l6ZV0pLHQuc2NhbGUodSx1LFsxLDEsdC5tZXJjYXRvclpmcm9tQWx0aXR1ZGUoMSx0aGlzLmNlbnRlci5sYXQpKnRoaXMud29ybGRTaXplLDFdKSx0aGlzLnByb2pNYXRyaXg9dSx0aGlzLmludlByb2pNYXRyaXg9dC5pbnZlcnQoW10sdGhpcy5wcm9qTWF0cml4KTt2YXIgaD10aGlzLndpZHRoJTIvMixmPXRoaXMuaGVpZ2h0JTIvMixwPU1hdGguY29zKHRoaXMuYW5nbGUpLGQ9TWF0aC5zaW4odGhpcy5hbmdsZSksZz1vLU1hdGgucm91bmQobykrcCpoK2QqZixtPXMtTWF0aC5yb3VuZChzKStwKmYrZCpoLHY9bmV3IEZsb2F0NjRBcnJheSh1KTtpZih0LnRyYW5zbGF0ZSh2LHYsW2c+LjU/Zy0xOmcsbT4uNT9tLTE6bSwwXSksdGhpcy5hbGlnbmVkUHJvak1hdHJpeD12LHU9dC5jcmVhdGUoKSx0LnNjYWxlKHUsdSxbdGhpcy53aWR0aC8yLC10aGlzLmhlaWdodC8yLDFdKSx0LnRyYW5zbGF0ZSh1LHUsWzEsLTEsMF0pLHRoaXMubGFiZWxQbGFuZU1hdHJpeD11LHU9dC5jcmVhdGUoKSx0LnNjYWxlKHUsdSxbMSwtMSwxXSksdC50cmFuc2xhdGUodSx1LFstMSwtMSwwXSksdC5zY2FsZSh1LHUsWzIvdGhpcy53aWR0aCwyL3RoaXMuaGVpZ2h0LDFdKSx0aGlzLmdsQ29vcmRNYXRyaXg9dSx0aGlzLnBpeGVsTWF0cml4PXQubXVsdGlwbHkobmV3IEZsb2F0NjRBcnJheSgxNiksdGhpcy5sYWJlbFBsYW5lTWF0cml4LHRoaXMucHJvak1hdHJpeCksISh1PXQuaW52ZXJ0KG5ldyBGbG9hdDY0QXJyYXkoMTYpLHRoaXMucGl4ZWxNYXRyaXgpKSl0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBpbnZlcnQgbWF0cml4Iik7dGhpcy5waXhlbE1hdHJpeEludmVyc2U9dSx0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319fSx3bi5wcm90b3R5cGUubWF4UGl0Y2hTY2FsZUZhY3Rvcj1mdW5jdGlvbigpe2lmKCF0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSlyZXR1cm4gMTt2YXIgZT10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCgwLDApKSxyPVtlLngqdGhpcy53b3JsZFNpemUsZS55KnRoaXMud29ybGRTaXplLDAsMV07cmV0dXJuIHQudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeClbM10vdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlfSx3bi5wcm90b3R5cGUuZ2V0Q2FtZXJhUG9pbnQ9ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLnRhbih0aGlzLl9waXRjaCkqKHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZXx8MSk7cmV0dXJuIHRoaXMuY2VudGVyUG9pbnQuYWRkKG5ldyB0LlBvaW50KDAsZSkpfSx3bi5wcm90b3R5cGUuZ2V0Q2FtZXJhUXVlcnlHZW9tZXRyeT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmdldENhbWVyYVBvaW50KCk7aWYoMT09PWUubGVuZ3RoKXJldHVybltlWzBdLHJdO2Zvcih2YXIgbj1yLngsaT1yLnksYT1yLngsbz1yLnkscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107bj1NYXRoLm1pbihuLGMueCksaT1NYXRoLm1pbihpLGMueSksYT1NYXRoLm1heChhLGMueCksbz1NYXRoLm1heChvLGMueSl9cmV0dXJuW25ldyB0LlBvaW50KG4saSksbmV3IHQuUG9pbnQoYSxpKSxuZXcgdC5Qb2ludChhLG8pLG5ldyB0LlBvaW50KG4sbyksbmV3IHQuUG9pbnQobixpKV19LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHduLnByb3RvdHlwZSxUbik7dmFyIGtuPWZ1bmN0aW9uKGUpe3ZhciByLG4saSxhO3RoaXMuX2hhc2hOYW1lPWUmJmVuY29kZVVSSUNvbXBvbmVudChlKSx0LmJpbmRBbGwoWyJfZ2V0Q3VycmVudEhhc2giLCJfb25IYXNoQ2hhbmdlIiwiX3VwZGF0ZUhhc2giXSx0aGlzKSx0aGlzLl91cGRhdGVIYXNoPShyPXRoaXMuX3VwZGF0ZUhhc2hVbnRocm90dGxlZC5iaW5kKHRoaXMpLG49ITEsaT1udWxsLGE9ZnVuY3Rpb24oKXtpPW51bGwsbiYmKHIoKSxpPXNldFRpbWVvdXQoYSwzMDApLG49ITEpfSxmdW5jdGlvbigpe3JldHVybiBuPSEwLGl8fGEoKSxpfSl9O2tuLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5fb25IYXNoQ2hhbmdlLCExKSx0aGlzLl9tYXAub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUhhc2gpLHRoaXN9LGtuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5fb25IYXNoQ2hhbmdlLCExKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVIYXNoKSxjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlSGFzaCgpKSxkZWxldGUgdGhpcy5fbWFwLHRoaXN9LGtuLnByb3RvdHlwZS5nZXRIYXNoU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX21hcC5nZXRDZW50ZXIoKSxuPU1hdGgucm91bmQoMTAwKnRoaXMuX21hcC5nZXRab29tKCkpLzEwMCxpPU1hdGguY2VpbCgobipNYXRoLkxOMitNYXRoLmxvZyg1MTIvMzYwLy41KSkvTWF0aC5MTjEwKSxhPU1hdGgucG93KDEwLGkpLG89TWF0aC5yb3VuZChyLmxuZyphKS9hLHM9TWF0aC5yb3VuZChyLmxhdCphKS9hLGw9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxjPXRoaXMuX21hcC5nZXRQaXRjaCgpLHU9IiI7aWYodSs9ZT8iLyIrbysiLyIrcysiLyIrbjpuKyIvIitzKyIvIitvLChsfHxjKSYmKHUrPSIvIitNYXRoLnJvdW5kKDEwKmwpLzEwKSxjJiYodSs9Ii8iK01hdGgucm91bmQoYykpLHRoaXMuX2hhc2hOYW1lKXt2YXIgaD10aGlzLl9oYXNoTmFtZSxmPSExLHA9dC53aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKS5zcGxpdCgiJiIpLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dC5zcGxpdCgiPSIpWzBdO3JldHVybiBlPT09aD8oZj0hMCxlKyI9Iit1KTp0fSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSk7cmV0dXJuIGZ8fHAucHVzaChoKyI9Iit1KSwiIyIrcC5qb2luKCImIil9cmV0dXJuIiMiK3V9LGtuLnByb3RvdHlwZS5fZ2V0Q3VycmVudEhhc2g9ZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMsbj10LndpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoIiMiLCIiKTtyZXR1cm4gdGhpcy5faGFzaE5hbWU/KG4uc3BsaXQoIiYiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KCI9Iil9KSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dFswXT09PXIuX2hhc2hOYW1lJiYoZT10KX0pKSwoZSYmZVsxXXx8IiIpLnNwbGl0KCIvIikpOm4uc3BsaXQoIi8iKX0sa24ucHJvdG90eXBlLl9vbkhhc2hDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRDdXJyZW50SGFzaCgpO2lmKHQubGVuZ3RoPj0zJiYhdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odCl9KSkpe3ZhciBlPXRoaXMuX21hcC5kcmFnUm90YXRlLmlzRW5hYmxlZCgpJiZ0aGlzLl9tYXAudG91Y2hab29tUm90YXRlLmlzRW5hYmxlZCgpPysodFszXXx8MCk6dGhpcy5fbWFwLmdldEJlYXJpbmcoKTtyZXR1cm4gdGhpcy5fbWFwLmp1bXBUbyh7Y2VudGVyOlsrdFsyXSwrdFsxXV0sem9vbTordFswXSxiZWFyaW5nOmUscGl0Y2g6Kyh0WzRdfHwwKX0pLCEwfXJldHVybiExfSxrbi5wcm90b3R5cGUuX3VwZGF0ZUhhc2hVbnRocm90dGxlZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0SGFzaFN0cmluZygpO3RyeXt0LndpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh0LndpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLGUpfWNhdGNoKHQpe319O3ZhciBNbj17bGluZWFyaXR5Oi4zLGVhc2luZzp0LmJlemllcigwLDAsLjMsMSl9LEFuPXQuZXh0ZW5kKHtkZWNlbGVyYXRpb246MjUwMCxtYXhTcGVlZDoxNDAwfSxNbiksU249dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoyMCxtYXhTcGVlZDoxNDAwfSxNbiksRW49dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoxZTMsbWF4U3BlZWQ6MzYwfSxNbiksQ249dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoxZTMsbWF4U3BlZWQ6OTB9LE1uKSxMbj1mdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLmNsZWFyKCl9O2Z1bmN0aW9uIFBuKHQsZSl7KCF0LmR1cmF0aW9ufHx0LmR1cmF0aW9uPGUuZHVyYXRpb24pJiYodC5kdXJhdGlvbj1lLmR1cmF0aW9uLHQuZWFzaW5nPWUuZWFzaW5nKX1mdW5jdGlvbiBJbihlLHIsbil7dmFyIGk9bi5tYXhTcGVlZCxhPW4ubGluZWFyaXR5LG89bi5kZWNlbGVyYXRpb24scz10LmNsYW1wKGUqYS8oci8xZTMpLC1pLGkpLGw9TWF0aC5hYnMocykvKG8qYSk7cmV0dXJue2Vhc2luZzpuLmVhc2luZyxkdXJhdGlvbjoxZTMqbCxhbW91bnQ6cyoobC8yKX19TG4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5faW5lcnRpYUJ1ZmZlcj1bXX0sTG4ucHJvdG90eXBlLnJlY29yZD1mdW5jdGlvbihlKXt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSx0aGlzLl9pbmVydGlhQnVmZmVyLnB1c2goe3RpbWU6dC5icm93c2VyLm5vdygpLHNldHRpbmdzOmV9KX0sTG4ucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5faW5lcnRpYUJ1ZmZlcixyPXQuYnJvd3Nlci5ub3coKTtlLmxlbmd0aD4wJiZyLWVbMF0udGltZT4xNjA7KWUuc2hpZnQoKX0sTG4ucHJvdG90eXBlLl9vbk1vdmVFbmQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCksISh0aGlzLl9pbmVydGlhQnVmZmVyLmxlbmd0aDwyKSl7Zm9yKHZhciByPXt6b29tOjAsYmVhcmluZzowLHBpdGNoOjAscGFuOm5ldyB0LlBvaW50KDAsMCkscGluY2hBcm91bmQ6dm9pZCAwLGFyb3VuZDp2b2lkIDB9LG49MCxpPXRoaXMuX2luZXJ0aWFCdWZmZXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLnNldHRpbmdzO3Iuem9vbSs9YS56b29tRGVsdGF8fDAsci5iZWFyaW5nKz1hLmJlYXJpbmdEZWx0YXx8MCxyLnBpdGNoKz1hLnBpdGNoRGVsdGF8fDAsYS5wYW5EZWx0YSYmci5wYW4uX2FkZChhLnBhbkRlbHRhKSxhLmFyb3VuZCYmKHIuYXJvdW5kPWEuYXJvdW5kKSxhLnBpbmNoQXJvdW5kJiYoci5waW5jaEFyb3VuZD1hLnBpbmNoQXJvdW5kKX12YXIgbz10aGlzLl9pbmVydGlhQnVmZmVyW3RoaXMuX2luZXJ0aWFCdWZmZXIubGVuZ3RoLTFdLnRpbWUtdGhpcy5faW5lcnRpYUJ1ZmZlclswXS50aW1lLHM9e307aWYoci5wYW4ubWFnKCkpe3ZhciBsPUluKHIucGFuLm1hZygpLG8sdC5leHRlbmQoe30sQW4sZXx8e30pKTtzLm9mZnNldD1yLnBhbi5tdWx0KGwuYW1vdW50L3IucGFuLm1hZygpKSxzLmNlbnRlcj10aGlzLl9tYXAudHJhbnNmb3JtLmNlbnRlcixQbihzLGwpfWlmKHIuem9vbSl7dmFyIGM9SW4oci56b29tLG8sU24pO3Muem9vbT10aGlzLl9tYXAudHJhbnNmb3JtLnpvb20rYy5hbW91bnQsUG4ocyxjKX1pZihyLmJlYXJpbmcpe3ZhciB1PUluKHIuYmVhcmluZyxvLEVuKTtzLmJlYXJpbmc9dGhpcy5fbWFwLnRyYW5zZm9ybS5iZWFyaW5nK3QuY2xhbXAodS5hbW91bnQsLTE3OSwxNzkpLFBuKHMsdSl9aWYoci5waXRjaCl7dmFyIGg9SW4oci5waXRjaCxvLENuKTtzLnBpdGNoPXRoaXMuX21hcC50cmFuc2Zvcm0ucGl0Y2graC5hbW91bnQsUG4ocyxoKX1pZihzLnpvb218fHMuYmVhcmluZyl7dmFyIGY9dm9pZCAwPT09ci5waW5jaEFyb3VuZD9yLmFyb3VuZDpyLnBpbmNoQXJvdW5kO3MuYXJvdW5kPWY/dGhpcy5fbWFwLnVucHJvamVjdChmKTp0aGlzLl9tYXAuZ2V0Q2VudGVyKCl9cmV0dXJuIHRoaXMuY2xlYXIoKSx0LmV4dGVuZChzLHtub01vdmVTdGFydDohMH0pfX07dmFyIHpuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpLGEsbyl7dm9pZCAwPT09byYmKG89e30pO3ZhciBzPXIubW91c2VQb3MoaS5nZXRDYW52YXNDb250YWluZXIoKSxhKSxsPWkudW5wcm9qZWN0KHMpO2UuY2FsbCh0aGlzLG4sdC5leHRlbmQoe3BvaW50OnMsbG5nTGF0Omwsb3JpZ2luYWxFdmVudDphfSxvKSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLnRhcmdldD1pfWUmJihuLl9fcHJvdG9fXz1lKSwobi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW47dmFyIGk9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBuLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LGkuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobi5wcm90b3R5cGUsaSksbn0odC5FdmVudCksT249ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLGksYSl7dmFyIG89InRvdWNoZW5kIj09PW4/YS5jaGFuZ2VkVG91Y2hlczphLnRvdWNoZXMscz1yLnRvdWNoUG9zKGkuZ2V0Q2FudmFzQ29udGFpbmVyKCksbyksbD1zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGkudW5wcm9qZWN0KHQpfSkpLGM9cy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmFkZChlLmRpdihuLmxlbmd0aCkpfSksbmV3IHQuUG9pbnQoMCwwKSksdT1pLnVucHJvamVjdChjKTtlLmNhbGwodGhpcyxuLHtwb2ludHM6cyxwb2ludDpjLGxuZ0xhdHM6bCxsbmdMYXQ6dSxvcmlnaW5hbEV2ZW50OmF9KSx0aGlzLl9kZWZhdWx0UHJldmVudGVkPSExfWUmJihuLl9fcHJvdG9fXz1lKSwobi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW47dmFyIGk9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBuLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LGkuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobi5wcm90b3R5cGUsaSksbn0odC5FdmVudCksRG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7dC5jYWxsKHRoaXMsZSx7b3JpZ2luYWxFdmVudDpufSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMX10JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gZS5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxyLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KHQuRXZlbnQpLFJuPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbWFwPXQsdGhpcy5fY2xpY2tUb2xlcmFuY2U9ZS5jbGlja1RvbGVyYW5jZX07Um4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX21vdXNlZG93blBvc30sUm4ucHJvdG90eXBlLndoZWVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9maXJlUHJldmVudGFibGUobmV3IERuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxSbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX21vdXNlZG93blBvcz1lLHRoaXMuX2ZpcmVQcmV2ZW50YWJsZShuZXcgem4odC50eXBlLHRoaXMuX21hcCx0KSl9LFJuLnByb3RvdHlwZS5tb3VzZXVwPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyB6bih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sUm4ucHJvdG90eXBlLmNsaWNrPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbW91c2Vkb3duUG9zJiZ0aGlzLl9tb3VzZWRvd25Qb3MuZGlzdChlKT49dGhpcy5fY2xpY2tUb2xlcmFuY2V8fHRoaXMuX21hcC5maXJlKG5ldyB6bih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sUm4ucHJvdG90eXBlLmRibGNsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9maXJlUHJldmVudGFibGUobmV3IHpuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxSbi5wcm90b3R5cGUubW91c2VvdmVyPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyB6bih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sUm4ucHJvdG90eXBlLm1vdXNlb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyB6bih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sUm4ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZpcmVQcmV2ZW50YWJsZShuZXcgT24odC50eXBlLHRoaXMuX21hcCx0KSl9LFJuLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IE9uKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxSbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IE9uKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxSbi5wcm90b3R5cGUudG91Y2hjYW5jZWw9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IE9uKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxSbi5wcm90b3R5cGUuX2ZpcmVQcmV2ZW50YWJsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9tYXAuZmlyZSh0KSx0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJue319LFJuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUm4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFJuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt9LFJuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7fTt2YXIgRm49ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXR9O0ZuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2RlbGF5Q29udGV4dE1lbnU9ITEsZGVsZXRlIHRoaXMuX2NvbnRleHRNZW51RXZlbnR9LEZuLnByb3RvdHlwZS5tb3VzZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IHpuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxGbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKCl7dGhpcy5fZGVsYXlDb250ZXh0TWVudT0hMH0sRm4ucHJvdG90eXBlLm1vdXNldXA9ZnVuY3Rpb24oKXt0aGlzLl9kZWxheUNvbnRleHRNZW51PSExLHRoaXMuX2NvbnRleHRNZW51RXZlbnQmJih0aGlzLl9tYXAuZmlyZShuZXcgem4oImNvbnRleHRtZW51Iix0aGlzLl9tYXAsdGhpcy5fY29udGV4dE1lbnVFdmVudCkpLGRlbGV0ZSB0aGlzLl9jb250ZXh0TWVudUV2ZW50KX0sRm4ucHJvdG90eXBlLmNvbnRleHRtZW51PWZ1bmN0aW9uKHQpe3RoaXMuX2RlbGF5Q29udGV4dE1lbnU/dGhpcy5fY29udGV4dE1lbnVFdmVudD10OnRoaXMuX21hcC5maXJlKG5ldyB6bih0LnR5cGUsdGhpcy5fbWFwLHQpKSx0aGlzLl9tYXAubGlzdGVucygiY29udGV4dG1lbnUiKSYmdC5wcmV2ZW50RGVmYXVsdCgpfSxGbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEZuLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiExfSxGbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7fSxGbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe307dmFyIEJuPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbWFwPXQsdGhpcy5fZWw9dC5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9jb250YWluZXI9dC5nZXRDb250YWluZXIoKSx0aGlzLl9jbGlja1RvbGVyYW5jZT1lLmNsaWNrVG9sZXJhbmNlfHwxfTtmdW5jdGlvbiBObih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDtuKyspclt0W25dLmlkZW50aWZpZXJdPWVbbl07cmV0dXJuIHJ9Qm4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sQm4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV9LEJuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCl9LEJuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxCbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKHQsZSl7dGhpcy5pc0VuYWJsZWQoKSYmdC5zaGlmdEtleSYmMD09PXQuYnV0dG9uJiYoci5kaXNhYmxlRHJhZygpLHRoaXMuX3N0YXJ0UG9zPXRoaXMuX2xhc3RQb3M9ZSx0aGlzLl9hY3RpdmU9ITApfSxCbi5wcm90b3R5cGUubW91c2Vtb3ZlV2luZG93PWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fYWN0aXZlKXt2YXIgbj1lO2lmKCEodGhpcy5fbGFzdFBvcy5lcXVhbHMobil8fCF0aGlzLl9ib3gmJm4uZGlzdCh0aGlzLl9zdGFydFBvcyk8dGhpcy5fY2xpY2tUb2xlcmFuY2UpKXt2YXIgaT10aGlzLl9zdGFydFBvczt0aGlzLl9sYXN0UG9zPW4sdGhpcy5fYm94fHwodGhpcy5fYm94PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1ib3h6b29tIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jcm9zc2hhaXIiKSx0aGlzLl9maXJlRXZlbnQoImJveHpvb21zdGFydCIsdCkpO3ZhciBhPU1hdGgubWluKGkueCxuLngpLG89TWF0aC5tYXgoaS54LG4ueCkscz1NYXRoLm1pbihpLnksbi55KSxsPU1hdGgubWF4KGkueSxuLnkpO3Iuc2V0VHJhbnNmb3JtKHRoaXMuX2JveCwidHJhbnNsYXRlKCIrYSsicHgsIitzKyJweCkiKSx0aGlzLl9ib3guc3R5bGUud2lkdGg9by1hKyJweCIsdGhpcy5fYm94LnN0eWxlLmhlaWdodD1sLXMrInB4In19fSxCbi5wcm90b3R5cGUubW91c2V1cFdpbmRvdz1mdW5jdGlvbihlLG4pe3ZhciBpPXRoaXM7aWYodGhpcy5fYWN0aXZlJiYwPT09ZS5idXR0b24pe3ZhciBhPXRoaXMuX3N0YXJ0UG9zLG89bjtpZih0aGlzLnJlc2V0KCksci5zdXBwcmVzc0NsaWNrKCksYS54IT09by54fHxhLnkhPT1vLnkpcmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJib3h6b29tZW5kIix7b3JpZ2luYWxFdmVudDplfSkpLHtjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQuZml0U2NyZWVuQ29vcmRpbmF0ZXMoYSxvLGkuX21hcC5nZXRCZWFyaW5nKCkse2xpbmVhcjohMH0pfX07dGhpcy5fZmlyZUV2ZW50KCJib3h6b29tY2FuY2VsIixlKX19LEJuLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZSYmMjc9PT10LmtleUNvZGUmJih0aGlzLnJlc2V0KCksdGhpcy5fZmlyZUV2ZW50KCJib3h6b29tY2FuY2VsIix0KSl9LEJuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fYm94JiYoci5yZW1vdmUodGhpcy5fYm94KSx0aGlzLl9ib3g9bnVsbCksci5lbmFibGVEcmFnKCksZGVsZXRlIHRoaXMuX3N0YXJ0UG9zLGRlbGV0ZSB0aGlzLl9sYXN0UG9zfSxCbi5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHtvcmlnaW5hbEV2ZW50OnJ9KSl9O3ZhciBqbj1mdW5jdGlvbih0KXt0aGlzLnJlc2V0KCksdGhpcy5udW1Ub3VjaGVzPXQubnVtVG91Y2hlc307am4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2VudHJvaWQsZGVsZXRlIHRoaXMuc3RhcnRUaW1lLGRlbGV0ZSB0aGlzLnRvdWNoZXMsdGhpcy5hYm9ydGVkPSExfSxqbi5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbihlLHIsbil7KHRoaXMuY2VudHJvaWR8fG4ubGVuZ3RoPnRoaXMubnVtVG91Y2hlcykmJih0aGlzLmFib3J0ZWQ9ITApLHRoaXMuYWJvcnRlZHx8KHZvaWQgMD09PXRoaXMuc3RhcnRUaW1lJiYodGhpcy5zdGFydFRpbWU9ZS50aW1lU3RhbXApLG4ubGVuZ3RoPT09dGhpcy5udW1Ub3VjaGVzJiYodGhpcy5jZW50cm9pZD1mdW5jdGlvbihlKXtmb3IodmFyIHI9bmV3IHQuUG9pbnQoMCwwKSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSlyLl9hZGQoaVtuXSk7cmV0dXJuIHIuZGl2KGUubGVuZ3RoKX0ociksdGhpcy50b3VjaGVzPU5uKG4scikpKX0sam4ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuYWJvcnRlZCYmdGhpcy5jZW50cm9pZCl7dmFyIG49Tm4ocixlKTtmb3IodmFyIGkgaW4gdGhpcy50b3VjaGVzKXt2YXIgYT1uW2ldOyghYXx8YS5kaXN0KHRoaXMudG91Y2hlc1tpXSk+MzApJiYodGhpcy5hYm9ydGVkPSEwKX19fSxqbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKCghdGhpcy5jZW50cm9pZHx8dC50aW1lU3RhbXAtdGhpcy5zdGFydFRpbWU+NTAwKSYmKHRoaXMuYWJvcnRlZD0hMCksMD09PXIubGVuZ3RoKXt2YXIgbj0hdGhpcy5hYm9ydGVkJiZ0aGlzLmNlbnRyb2lkO2lmKHRoaXMucmVzZXQoKSxuKXJldHVybiBufX07dmFyIFVuPWZ1bmN0aW9uKHQpe3RoaXMuc2luZ2xlVGFwPW5ldyBqbih0KSx0aGlzLm51bVRhcHM9dC5udW1UYXBzLHRoaXMucmVzZXQoKX07VW4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5sYXN0VGltZT0xLzAsZGVsZXRlIHRoaXMubGFzdFRhcCx0aGlzLmNvdW50PTAsdGhpcy5zaW5nbGVUYXAucmVzZXQoKX0sVW4ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2luZ2xlVGFwLnRvdWNoc3RhcnQodCxlLHIpfSxVbi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpbmdsZVRhcC50b3VjaG1vdmUodCxlLHIpfSxVbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuc2luZ2xlVGFwLnRvdWNoZW5kKHQsZSxyKTtpZihuKXt2YXIgaT10LnRpbWVTdGFtcC10aGlzLmxhc3RUaW1lPDUwMCxhPSF0aGlzLmxhc3RUYXB8fHRoaXMubGFzdFRhcC5kaXN0KG4pPDMwO2lmKGkmJmF8fHRoaXMucmVzZXQoKSx0aGlzLmNvdW50KyssdGhpcy5sYXN0VGltZT10LnRpbWVTdGFtcCx0aGlzLmxhc3RUYXA9bix0aGlzLmNvdW50PT09dGhpcy5udW1UYXBzKXJldHVybiB0aGlzLnJlc2V0KCksbn19O3ZhciBWbj1mdW5jdGlvbigpe3RoaXMuX3pvb21Jbj1uZXcgVW4oe251bVRvdWNoZXM6MSxudW1UYXBzOjJ9KSx0aGlzLl96b29tT3V0PW5ldyBVbih7bnVtVG91Y2hlczoyLG51bVRhcHM6MX0pLHRoaXMucmVzZXQoKX07Vm4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLHRoaXMuX3pvb21Jbi5yZXNldCgpLHRoaXMuX3pvb21PdXQucmVzZXQoKX0sVm4ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3pvb21Jbi50b3VjaHN0YXJ0KHQsZSxyKSx0aGlzLl96b29tT3V0LnRvdWNoc3RhcnQodCxlLHIpfSxWbi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl96b29tSW4udG91Y2htb3ZlKHQsZSxyKSx0aGlzLl96b29tT3V0LnRvdWNobW92ZSh0LGUscil9LFZuLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPXRoaXMuX3pvb21Jbi50b3VjaGVuZCh0LGUsciksYT10aGlzLl96b29tT3V0LnRvdWNoZW5kKHQsZSxyKTtyZXR1cm4gaT8odGhpcy5fYWN0aXZlPSEwLHQucHJldmVudERlZmF1bHQoKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBuLnJlc2V0KCl9KSwwKSx7Y2FtZXJhQW5pbWF0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLmVhc2VUbyh7ZHVyYXRpb246MzAwLHpvb206ZS5nZXRab29tKCkrMSxhcm91bmQ6ZS51bnByb2plY3QoaSl9LHtvcmlnaW5hbEV2ZW50OnR9KX19KTphPyh0aGlzLl9hY3RpdmU9ITAsdC5wcmV2ZW50RGVmYXVsdCgpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVzZXQoKX0pLDApLHtjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWFzZVRvKHtkdXJhdGlvbjozMDAsem9vbTplLmdldFpvb20oKS0xLGFyb3VuZDplLnVucHJvamVjdChhKX0se29yaWdpbmFsRXZlbnQ6dH0pfX0pOnZvaWQgMH0sVm4ucHJvdG90eXBlLnRvdWNoY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfSxWbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMH0sVm4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSExLHRoaXMucmVzZXQoKX0sVm4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxWbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfTt2YXIgcW49ZnVuY3Rpb24odCl7dGhpcy5yZXNldCgpLHRoaXMuX2NsaWNrVG9sZXJhbmNlPXQuY2xpY2tUb2xlcmFuY2V8fDF9O3FuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9tb3ZlZD0hMSxkZWxldGUgdGhpcy5fbGFzdFBvaW50LGRlbGV0ZSB0aGlzLl9ldmVudEJ1dHRvbn0scW4ucHJvdG90eXBlLl9jb3JyZWN0QnV0dG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LHFuLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUpe3JldHVybnt9fSxxbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2xhc3RQb2ludCl7dmFyIG49ci5tb3VzZUJ1dHRvbih0KTt0aGlzLl9jb3JyZWN0QnV0dG9uKHQsbikmJih0aGlzLl9sYXN0UG9pbnQ9ZSx0aGlzLl9ldmVudEJ1dHRvbj1uKX19LHFuLnByb3RvdHlwZS5tb3VzZW1vdmVXaW5kb3c9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9sYXN0UG9pbnQ7aWYociYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9tb3ZlZHx8IShlLmRpc3Qocik8dGhpcy5fY2xpY2tUb2xlcmFuY2UpKSlyZXR1cm4gdGhpcy5fbW92ZWQ9ITAsdGhpcy5fbGFzdFBvaW50PWUsdGhpcy5fbW92ZShyLGUpfSxxbi5wcm90b3R5cGUubW91c2V1cFdpbmRvdz1mdW5jdGlvbih0KXtyLm1vdXNlQnV0dG9uKHQpPT09dGhpcy5fZXZlbnRCdXR0b24mJih0aGlzLl9tb3ZlZCYmci5zdXBwcmVzc0NsaWNrKCksdGhpcy5yZXNldCgpKX0scW4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LHFuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LHFuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0scW4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIEhuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5tb3VzZWRvd249ZnVuY3Rpb24oZSxyKXt0LnByb3RvdHlwZS5tb3VzZWRvd24uY2FsbCh0aGlzLGUsciksdGhpcy5fbGFzdFBvaW50JiYodGhpcy5fYWN0aXZlPSEwKX0sZS5wcm90b3R5cGUuX2NvcnJlY3RCdXR0b249ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PWUmJiF0LmN0cmxLZXl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2Fyb3VuZDplLHBhbkRlbHRhOmUuc3ViKHQpfX0sZX0ocW4pLEduPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fY29ycmVjdEJ1dHRvbj1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZSYmdC5jdHJsS2V5fHwyPT09ZX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj0uOCooZS54LXQueCk7aWYocilyZXR1cm4gdGhpcy5fYWN0aXZlPSEwLHtiZWFyaW5nRGVsdGE6cn19LGUucHJvdG90eXBlLmNvbnRleHRtZW51PWZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sZX0ocW4pLFluPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fY29ycmVjdEJ1dHRvbj1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZSYmdC5jdHJsS2V5fHwyPT09ZX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj0tLjUqKGUueS10LnkpO2lmKHIpcmV0dXJuIHRoaXMuX2FjdGl2ZT0hMCx7cGl0Y2hEZWx0YTpyfX0sZS5wcm90b3R5cGUuY29udGV4dG1lbnU9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSxlfShxbiksV249ZnVuY3Rpb24odCl7dGhpcy5fbWluVG91Y2hlcz0xLHRoaXMuX2NsaWNrVG9sZXJhbmNlPXQuY2xpY2tUb2xlcmFuY2V8fDEsdGhpcy5yZXNldCgpfTtXbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fdG91Y2hlcz17fSx0aGlzLl9zdW09bmV3IHQuUG9pbnQoMCwwKX0sV24ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxjdWxhdGVUcmFuc2Zvcm0odCxlLHIpfSxXbi5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9hY3RpdmUpcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9jYWxjdWxhdGVUcmFuc2Zvcm0odCxlLHIpfSxXbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2NhbGN1bGF0ZVRyYW5zZm9ybSh0LGUsciksdGhpcy5fYWN0aXZlJiZyLmxlbmd0aDx0aGlzLl9taW5Ub3VjaGVzJiZ0aGlzLnJlc2V0KCl9LFduLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sV24ucHJvdG90eXBlLl9jYWxjdWxhdGVUcmFuc2Zvcm09ZnVuY3Rpb24oZSxyLG4pe24ubGVuZ3RoPjAmJih0aGlzLl9hY3RpdmU9ITApO3ZhciBpPU5uKG4sciksYT1uZXcgdC5Qb2ludCgwLDApLG89bmV3IHQuUG9pbnQoMCwwKSxzPTA7Zm9yKHZhciBsIGluIGkpe3ZhciBjPWlbbF0sdT10aGlzLl90b3VjaGVzW2xdO3UmJihhLl9hZGQoYyksby5fYWRkKGMuc3ViKHUpKSxzKyssaVtsXT1jKX1pZih0aGlzLl90b3VjaGVzPWksIShzPHRoaXMuX21pblRvdWNoZXMpJiZvLm1hZygpKXt2YXIgaD1vLmRpdihzKTtpZih0aGlzLl9zdW0uX2FkZChoKSwhKHRoaXMuX3N1bS5tYWcoKTx0aGlzLl9jbGlja1RvbGVyYW5jZSkpcmV0dXJue2Fyb3VuZDphLmRpdihzKSxwYW5EZWx0YTpofX19LFduLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxXbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxXbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LFduLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBabj1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX07ZnVuY3Rpb24gWG4odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaWRlbnRpZmllcj09PXIpcmV0dXJuIGVbbl19ZnVuY3Rpb24gSm4odCxlKXtyZXR1cm4gTWF0aC5sb2codC9lKS9NYXRoLkxOMn1abi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsZGVsZXRlIHRoaXMuX2ZpcnN0VHdvVG91Y2hlc30sWm4ucHJvdG90eXBlLl9zdGFydD1mdW5jdGlvbih0KXt9LFpuLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUscil7cmV0dXJue319LFpuLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9maXJzdFR3b1RvdWNoZXN8fHIubGVuZ3RoPDJ8fCh0aGlzLl9maXJzdFR3b1RvdWNoZXM9W3JbMF0uaWRlbnRpZmllcixyWzFdLmlkZW50aWZpZXJdLHRoaXMuX3N0YXJ0KFtlWzBdLGVbMV1dKSl9LFpuLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX2ZpcnN0VHdvVG91Y2hlcyl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPXRoaXMuX2ZpcnN0VHdvVG91Y2hlcyxpPW5bMV0sYT1YbihyLGUsblswXSksbz1YbihyLGUsaSk7aWYoYSYmbyl7dmFyIHM9dGhpcy5fYXJvdW5kQ2VudGVyP251bGw6YS5hZGQobykuZGl2KDIpO3JldHVybiB0aGlzLl9tb3ZlKFthLG9dLHMsdCl9fX0sWm4ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxuKXtpZih0aGlzLl9maXJzdFR3b1RvdWNoZXMpe3ZhciBpPXRoaXMuX2ZpcnN0VHdvVG91Y2hlcyxhPWlbMV0sbz1YbihuLGUsaVswXSkscz1YbihuLGUsYSk7byYmc3x8KHRoaXMuX2FjdGl2ZSYmci5zdXBwcmVzc0NsaWNrKCksdGhpcy5yZXNldCgpKX19LFpuLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sWm4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj0hIXQmJiJjZW50ZXIiPT09dC5hcm91bmR9LFpuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LFpuLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sWm4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIEtuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLChlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3QucHJvdG90eXBlLnJlc2V0LmNhbGwodGhpcyksZGVsZXRlIHRoaXMuX2Rpc3RhbmNlLGRlbGV0ZSB0aGlzLl9zdGFydERpc3RhbmNlfSxlLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnREaXN0YW5jZT10aGlzLl9kaXN0YW5jZT10WzBdLmRpc3QodFsxXSl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fZGlzdGFuY2U7aWYodGhpcy5fZGlzdGFuY2U9dFswXS5kaXN0KHRbMV0pLHRoaXMuX2FjdGl2ZXx8IShNYXRoLmFicyhKbih0aGlzLl9kaXN0YW5jZSx0aGlzLl9zdGFydERpc3RhbmNlKSk8LjEpKXJldHVybiB0aGlzLl9hY3RpdmU9ITAse3pvb21EZWx0YTpKbih0aGlzLl9kaXN0YW5jZSxyKSxwaW5jaEFyb3VuZDplfX0sZX0oWm4pO2Z1bmN0aW9uIFFuKHQsZSl7cmV0dXJuIDE4MCp0LmFuZ2xlV2l0aChlKS9NYXRoLlBJfXZhciAkbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpLGRlbGV0ZSB0aGlzLl9taW5EaWFtZXRlcixkZWxldGUgdGhpcy5fc3RhcnRWZWN0b3IsZGVsZXRlIHRoaXMuX3ZlY3Rvcn0sZS5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0YXJ0VmVjdG9yPXRoaXMuX3ZlY3Rvcj10WzBdLnN1Yih0WzFdKSx0aGlzLl9taW5EaWFtZXRlcj10WzBdLmRpc3QodFsxXSl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmVjdG9yO2lmKHRoaXMuX3ZlY3Rvcj10WzBdLnN1Yih0WzFdKSx0aGlzLl9hY3RpdmV8fCF0aGlzLl9pc0JlbG93VGhyZXNob2xkKHRoaXMuX3ZlY3RvcikpcmV0dXJuIHRoaXMuX2FjdGl2ZT0hMCx7YmVhcmluZ0RlbHRhOlFuKHRoaXMuX3ZlY3RvcixyKSxwaW5jaEFyb3VuZDplfX0sZS5wcm90b3R5cGUuX2lzQmVsb3dUaHJlc2hvbGQ9ZnVuY3Rpb24odCl7dGhpcy5fbWluRGlhbWV0ZXI9TWF0aC5taW4odGhpcy5fbWluRGlhbWV0ZXIsdC5tYWcoKSk7dmFyIGU9MjUvKE1hdGguUEkqdGhpcy5fbWluRGlhbWV0ZXIpKjM2MCxyPVFuKHQsdGhpcy5fc3RhcnRWZWN0b3IpO3JldHVybiBNYXRoLmFicyhyKTxlfSxlfShabik7ZnVuY3Rpb24gdGkodCl7cmV0dXJuIE1hdGguYWJzKHQueSk+TWF0aC5hYnModC54KX12YXIgZWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksKGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKSx0aGlzLl92YWxpZD12b2lkIDAsZGVsZXRlIHRoaXMuX2ZpcnN0TW92ZSxkZWxldGUgdGhpcy5fbGFzdFBvaW50c30sZS5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2xhc3RQb2ludHM9dCx0aSh0WzBdLnN1Yih0WzFdKSkmJih0aGlzLl92YWxpZD0hMSl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10WzBdLnN1Yih0aGlzLl9sYXN0UG9pbnRzWzBdKSxpPXRbMV0uc3ViKHRoaXMuX2xhc3RQb2ludHNbMV0pO2lmKHRoaXMuX3ZhbGlkPXRoaXMuZ2VzdHVyZUJlZ2luc1ZlcnRpY2FsbHkobixpLHIudGltZVN0YW1wKSx0aGlzLl92YWxpZClyZXR1cm4gdGhpcy5fbGFzdFBvaW50cz10LHRoaXMuX2FjdGl2ZT0hMCx7cGl0Y2hEZWx0YToobi55K2kueSkvMiotLjV9fSxlLnByb3RvdHlwZS5nZXN0dXJlQmVnaW5zVmVydGljYWxseT1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwIT09dGhpcy5fdmFsaWQpcmV0dXJuIHRoaXMuX3ZhbGlkO3ZhciBuPXQubWFnKCk+PTIsaT1lLm1hZygpPj0yO2lmKG58fGkpe2lmKCFufHwhaSlyZXR1cm4gdm9pZCAwPT09dGhpcy5fZmlyc3RNb3ZlJiYodGhpcy5fZmlyc3RNb3ZlPXIpLHItdGhpcy5fZmlyc3RNb3ZlPDEwMCYmdm9pZCAwO3ZhciBhPXQueT4wPT1lLnk+MDtyZXR1cm4gdGkodCkmJnRpKGUpJiZhfX0sZX0oWm4pLHJpPXtwYW5TdGVwOjEwMCxiZWFyaW5nU3RlcDoxNSxwaXRjaFN0ZXA6MTB9LG5pPWZ1bmN0aW9uKCl7dmFyIHQ9cmk7dGhpcy5fcGFuU3RlcD10LnBhblN0ZXAsdGhpcy5fYmVhcmluZ1N0ZXA9dC5iZWFyaW5nU3RlcCx0aGlzLl9waXRjaFN0ZXA9dC5waXRjaFN0ZXB9O2Z1bmN0aW9uIGlpKHQpe3JldHVybiB0KigyLXQpfW5pLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMX0sbmkucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighKHQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleSkpe3ZhciByPTAsbj0wLGk9MCxhPTAsbz0wO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgNjE6Y2FzZSAxMDc6Y2FzZSAxNzE6Y2FzZSAxODc6cj0xO2JyZWFrO2Nhc2UgMTg5OmNhc2UgMTA5OmNhc2UgMTczOnI9LTE7YnJlYWs7Y2FzZSAzNzp0LnNoaWZ0S2V5P249LTE6KHQucHJldmVudERlZmF1bHQoKSxhPS0xKTticmVhaztjYXNlIDM5OnQuc2hpZnRLZXk/bj0xOih0LnByZXZlbnREZWZhdWx0KCksYT0xKTticmVhaztjYXNlIDM4OnQuc2hpZnRLZXk/aT0xOih0LnByZXZlbnREZWZhdWx0KCksbz0tMSk7YnJlYWs7Y2FzZSA0MDp0LnNoaWZ0S2V5P2k9LTE6KHQucHJldmVudERlZmF1bHQoKSxvPTEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXJldHVybntjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24ocyl7dmFyIGw9cy5nZXRab29tKCk7cy5lYXNlVG8oe2R1cmF0aW9uOjMwMCxlYXNlSWQ6ImtleWJvYXJkSGFuZGxlciIsZWFzaW5nOmlpLHpvb206cj9NYXRoLnJvdW5kKGwpK3IqKHQuc2hpZnRLZXk/MjoxKTpsLGJlYXJpbmc6cy5nZXRCZWFyaW5nKCkrbiplLl9iZWFyaW5nU3RlcCxwaXRjaDpzLmdldFBpdGNoKCkraSplLl9waXRjaFN0ZXAsb2Zmc2V0OlstYSplLl9wYW5TdGVwLC1vKmUuX3BhblN0ZXBdLGNlbnRlcjpzLmdldENlbnRlcigpfSx7b3JpZ2luYWxFdmVudDp0fSl9fX19LG5pLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxuaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxuaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LG5pLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBhaT1mdW5jdGlvbihlLHIpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5faGFuZGxlcj1yLHRoaXMuX2RlbHRhPTAsdGhpcy5fZGVmYXVsdFpvb21SYXRlPS4wMSx0aGlzLl93aGVlbFpvb21SYXRlPTEvNDUwLHQuYmluZEFsbChbIl9vbldoZWVsIiwiX29uVGltZW91dCIsIl9vblNjcm9sbEZyYW1lIiwiX29uU2Nyb2xsRmluaXNoZWQiXSx0aGlzKX07YWkucHJvdG90eXBlLnNldFpvb21SYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX2RlZmF1bHRab29tUmF0ZT10fSxhaS5wcm90b3R5cGUuc2V0V2hlZWxab29tUmF0ZT1mdW5jdGlvbih0KXt0aGlzLl93aGVlbFpvb21SYXRlPXR9LGFpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LGFpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYWN0aXZlfHx2b2lkIDAhPT10aGlzLl9maW5pc2hUaW1lb3V0fSxhaS5wcm90b3R5cGUuaXNab29taW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl96b29taW5nfSxhaS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj10JiYiY2VudGVyIj09PXQuYXJvdW5kKX0sYWkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LGFpLnByb3RvdHlwZS53aGVlbD1mdW5jdGlvbihlKXtpZih0aGlzLmlzRW5hYmxlZCgpKXt2YXIgcj1lLmRlbHRhTW9kZT09PXQud2luZG93LldoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/NDAqZS5kZWx0YVk6ZS5kZWx0YVksbj10LmJyb3dzZXIubm93KCksaT1uLSh0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWV8fDApO3RoaXMuX2xhc3RXaGVlbEV2ZW50VGltZT1uLDAhPT1yJiZyJTQuMDAwMjQ0MTQwNjI1PT0wP3RoaXMuX3R5cGU9IndoZWVsIjowIT09ciYmTWF0aC5hYnMocik8ND90aGlzLl90eXBlPSJ0cmFja3BhZCI6aT40MDA/KHRoaXMuX3R5cGU9bnVsbCx0aGlzLl9sYXN0VmFsdWU9cix0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQodGhpcy5fb25UaW1lb3V0LDQwLGUpKTp0aGlzLl90eXBlfHwodGhpcy5fdHlwZT1NYXRoLmFicyhpKnIpPDIwMD8idHJhY2twYWQiOiJ3aGVlbCIsdGhpcy5fdGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLl90aW1lb3V0PW51bGwscis9dGhpcy5fbGFzdFZhbHVlKSksZS5zaGlmdEtleSYmciYmKHIvPTQpLHRoaXMuX3R5cGUmJih0aGlzLl9sYXN0V2hlZWxFdmVudD1lLHRoaXMuX2RlbHRhLT1yLHRoaXMuX2FjdGl2ZXx8dGhpcy5fc3RhcnQoZSkpLGUucHJldmVudERlZmF1bHQoKX19LGFpLnByb3RvdHlwZS5fb25UaW1lb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX3R5cGU9IndoZWVsIix0aGlzLl9kZWx0YS09dGhpcy5fbGFzdFZhbHVlLHRoaXMuX2FjdGl2ZXx8dGhpcy5fc3RhcnQodCl9LGFpLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZGVsdGEpe3RoaXMuX2ZyYW1lSWQmJih0aGlzLl9mcmFtZUlkPW51bGwpLHRoaXMuX2FjdGl2ZT0hMCx0aGlzLmlzWm9vbWluZygpfHwodGhpcy5fem9vbWluZz0hMCksdGhpcy5fZmluaXNoVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl9maW5pc2hUaW1lb3V0KSxkZWxldGUgdGhpcy5fZmluaXNoVGltZW91dCk7dmFyIG49ci5tb3VzZVBvcyh0aGlzLl9lbCxlKTt0aGlzLl9hcm91bmQ9dC5MbmdMYXQuY29udmVydCh0aGlzLl9hcm91bmRDZW50ZXI/dGhpcy5fbWFwLmdldENlbnRlcigpOnRoaXMuX21hcC51bnByb2plY3QobikpLHRoaXMuX2Fyb3VuZFBvaW50PXRoaXMuX21hcC50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludCh0aGlzLl9hcm91bmQpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPSEwLHRoaXMuX2hhbmRsZXIuX3RyaWdnZXJSZW5kZXJGcmFtZSgpKX19LGFpLnByb3RvdHlwZS5yZW5kZXJGcmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblNjcm9sbEZyYW1lKCl9LGFpLnByb3RvdHlwZS5fb25TY3JvbGxGcmFtZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmlzQWN0aXZlKCkpKXt2YXIgcj10aGlzLl9tYXAudHJhbnNmb3JtO2lmKDAhPT10aGlzLl9kZWx0YSl7dmFyIG49IndoZWVsIj09PXRoaXMuX3R5cGUmJk1hdGguYWJzKHRoaXMuX2RlbHRhKT40LjAwMDI0NDE0MDYyNT90aGlzLl93aGVlbFpvb21SYXRlOnRoaXMuX2RlZmF1bHRab29tUmF0ZSxpPTIvKDErTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhKm4pKSk7dGhpcy5fZGVsdGE8MCYmMCE9PWkmJihpPTEvaSk7dmFyIGE9Im51bWJlciI9PXR5cGVvZiB0aGlzLl90YXJnZXRab29tP3Iuem9vbVNjYWxlKHRoaXMuX3RhcmdldFpvb20pOnIuc2NhbGU7dGhpcy5fdGFyZ2V0Wm9vbT1NYXRoLm1pbihyLm1heFpvb20sTWF0aC5tYXgoci5taW5ab29tLHIuc2NhbGVab29tKGEqaSkpKSwid2hlZWwiPT09dGhpcy5fdHlwZSYmKHRoaXMuX3N0YXJ0Wm9vbT1yLnpvb20sdGhpcy5fZWFzaW5nPXRoaXMuX3Ntb290aE91dEVhc2luZygyMDApKSx0aGlzLl9kZWx0YT0wfXZhciBvLHM9Im51bWJlciI9PXR5cGVvZiB0aGlzLl90YXJnZXRab29tP3RoaXMuX3RhcmdldFpvb206ci56b29tLGw9dGhpcy5fc3RhcnRab29tLGM9dGhpcy5fZWFzaW5nLHU9ITE7aWYoIndoZWVsIj09PXRoaXMuX3R5cGUmJmwmJmMpe3ZhciBoPU1hdGgubWluKCh0LmJyb3dzZXIubm93KCktdGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lKS8yMDAsMSksZj1jKGgpO289dC5udW1iZXIobCxzLGYpLGg8MT90aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD0hMCk6dT0hMH1lbHNlIG89cyx1PSEwO3JldHVybiB0aGlzLl9hY3RpdmU9ITAsdSYmKHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maW5pc2hUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5fem9vbWluZz0hMSxlLl9oYW5kbGVyLl90cmlnZ2VyUmVuZGVyRnJhbWUoKSxkZWxldGUgZS5fdGFyZ2V0Wm9vbSxkZWxldGUgZS5fZmluaXNoVGltZW91dH0pLDIwMCkpLHtub0luZXJ0aWE6ITAsbmVlZHNSZW5kZXJGcmFtZTohdSx6b29tRGVsdGE6by1yLnpvb20sYXJvdW5kOnRoaXMuX2Fyb3VuZFBvaW50LG9yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9fX0sYWkucHJvdG90eXBlLl9zbW9vdGhPdXRFYXNpbmc9ZnVuY3Rpb24oZSl7dmFyIHI9dC5lYXNlO2lmKHRoaXMuX3ByZXZFYXNlKXt2YXIgbj10aGlzLl9wcmV2RWFzZSxpPSh0LmJyb3dzZXIubm93KCktbi5zdGFydCkvbi5kdXJhdGlvbixhPW4uZWFzaW5nKGkrLjAxKS1uLmVhc2luZyhpKSxvPS4yNy9NYXRoLnNxcnQoYSphKzFlLTQpKi4wMSxzPU1hdGguc3FydCguMDcyOS1vKm8pO3I9dC5iZXppZXIobyxzLC4yNSwxKX1yZXR1cm4gdGhpcy5fcHJldkVhc2U9e3N0YXJ0OnQuYnJvd3Nlci5ub3coKSxkdXJhdGlvbjplLGVhc2luZzpyfSxyfSxhaS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITF9O3ZhciBvaT1mdW5jdGlvbih0LGUpe3RoaXMuX2NsaWNrWm9vbT10LHRoaXMuX3RhcFpvb209ZX07b2kucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2NsaWNrWm9vbS5lbmFibGUoKSx0aGlzLl90YXBab29tLmVuYWJsZSgpfSxvaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2NsaWNrWm9vbS5kaXNhYmxlKCksdGhpcy5fdGFwWm9vbS5kaXNhYmxlKCl9LG9pLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2xpY2tab29tLmlzRW5hYmxlZCgpJiZ0aGlzLl90YXBab29tLmlzRW5hYmxlZCgpfSxvaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2xpY2tab29tLmlzQWN0aXZlKCl8fHRoaXMuX3RhcFpvb20uaXNBY3RpdmUoKX07dmFyIHNpPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfTtzaS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITF9LHNpLnByb3RvdHlwZS5kYmxjbGljaz1mdW5jdGlvbih0LGUpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCkse2NhbWVyYUFuaW1hdGlvbjpmdW5jdGlvbihyKXtyLmVhc2VUbyh7ZHVyYXRpb246MzAwLHpvb206ci5nZXRab29tKCkrKHQuc2hpZnRLZXk/LTE6MSksYXJvdW5kOnIudW5wcm9qZWN0KGUpfSx7b3JpZ2luYWxFdmVudDp0fSl9fX0sc2kucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LHNpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LHNpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sc2kucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIGxpPWZ1bmN0aW9uKCl7dGhpcy5fdGFwPW5ldyBVbih7bnVtVG91Y2hlczoxLG51bVRhcHM6MX0pLHRoaXMucmVzZXQoKX07bGkucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLGRlbGV0ZSB0aGlzLl9zd2lwZVBvaW50LGRlbGV0ZSB0aGlzLl9zd2lwZVRvdWNoLGRlbGV0ZSB0aGlzLl90YXBUaW1lLHRoaXMuX3RhcC5yZXNldCgpfSxsaS5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbih0LGUscil7dGhpcy5fc3dpcGVQb2ludHx8KHRoaXMuX3RhcFRpbWUmJnQudGltZVN0YW1wLXRoaXMuX3RhcFRpbWU+NTAwJiZ0aGlzLnJlc2V0KCksdGhpcy5fdGFwVGltZT9yLmxlbmd0aD4wJiYodGhpcy5fc3dpcGVQb2ludD1lWzBdLHRoaXMuX3N3aXBlVG91Y2g9clswXS5pZGVudGlmaWVyKTp0aGlzLl90YXAudG91Y2hzdGFydCh0LGUscikpfSxsaS5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl90YXBUaW1lKXtpZih0aGlzLl9zd2lwZVBvaW50KXtpZihyWzBdLmlkZW50aWZpZXIhPT10aGlzLl9zd2lwZVRvdWNoKXJldHVybjt2YXIgbj1lWzBdLGk9bi55LXRoaXMuX3N3aXBlUG9pbnQueTtyZXR1cm4gdGhpcy5fc3dpcGVQb2ludD1uLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9hY3RpdmU9ITAse3pvb21EZWx0YTppLzEyOH19fWVsc2UgdGhpcy5fdGFwLnRvdWNobW92ZSh0LGUscil9LGxpLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0LGUscil7dGhpcy5fdGFwVGltZT90aGlzLl9zd2lwZVBvaW50JiYwPT09ci5sZW5ndGgmJnRoaXMucmVzZXQoKTp0aGlzLl90YXAudG91Y2hlbmQodCxlLHIpJiYodGhpcy5fdGFwVGltZT10LnRpbWVTdGFtcCl9LGxpLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sbGkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LGxpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LGxpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sbGkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIGNpPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9lbD10LHRoaXMuX21vdXNlUGFuPWUsdGhpcy5fdG91Y2hQYW49cn07Y2kucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLl9pbmVydGlhT3B0aW9ucz10fHx7fSx0aGlzLl9tb3VzZVBhbi5lbmFibGUoKSx0aGlzLl90b3VjaFBhbi5lbmFibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10b3VjaC1kcmFnLXBhbiIpfSxjaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX21vdXNlUGFuLmRpc2FibGUoKSx0aGlzLl90b3VjaFBhbi5kaXNhYmxlKCksdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdG91Y2gtZHJhZy1wYW4iKX0sY2kucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3VzZVBhbi5pc0VuYWJsZWQoKSYmdGhpcy5fdG91Y2hQYW4uaXNFbmFibGVkKCl9LGNpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3VzZVBhbi5pc0FjdGl2ZSgpfHx0aGlzLl90b3VjaFBhbi5pc0FjdGl2ZSgpfTt2YXIgdWk9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3BpdGNoV2l0aFJvdGF0ZT10LnBpdGNoV2l0aFJvdGF0ZSx0aGlzLl9tb3VzZVJvdGF0ZT1lLHRoaXMuX21vdXNlUGl0Y2g9cn07dWkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX21vdXNlUm90YXRlLmVuYWJsZSgpLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmdGhpcy5fbW91c2VQaXRjaC5lbmFibGUoKX0sdWkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZVJvdGF0ZS5kaXNhYmxlKCksdGhpcy5fbW91c2VQaXRjaC5kaXNhYmxlKCl9LHVpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW91c2VSb3RhdGUuaXNFbmFibGVkKCkmJighdGhpcy5fcGl0Y2hXaXRoUm90YXRlfHx0aGlzLl9tb3VzZVBpdGNoLmlzRW5hYmxlZCgpKX0sdWkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdXNlUm90YXRlLmlzQWN0aXZlKCl8fHRoaXMuX21vdXNlUGl0Y2guaXNBY3RpdmUoKX07dmFyIGhpPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuX2VsPXQsdGhpcy5fdG91Y2hab29tPWUsdGhpcy5fdG91Y2hSb3RhdGU9cix0aGlzLl90YXBEcmFnWm9vbT1uLHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITEsdGhpcy5fZW5hYmxlZD0hMH07aGkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLl90b3VjaFpvb20uZW5hYmxlKHQpLHRoaXMuX3JvdGF0aW9uRGlzYWJsZWR8fHRoaXMuX3RvdWNoUm90YXRlLmVuYWJsZSh0KSx0aGlzLl90YXBEcmFnWm9vbS5lbmFibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZSIpfSxoaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX3RvdWNoWm9vbS5kaXNhYmxlKCksdGhpcy5fdG91Y2hSb3RhdGUuZGlzYWJsZSgpLHRoaXMuX3RhcERyYWdab29tLmRpc2FibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZSIpfSxoaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RvdWNoWm9vbS5pc0VuYWJsZWQoKSYmKHRoaXMuX3JvdGF0aW9uRGlzYWJsZWR8fHRoaXMuX3RvdWNoUm90YXRlLmlzRW5hYmxlZCgpKSYmdGhpcy5fdGFwRHJhZ1pvb20uaXNFbmFibGVkKCl9LGhpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90b3VjaFpvb20uaXNBY3RpdmUoKXx8dGhpcy5fdG91Y2hSb3RhdGUuaXNBY3RpdmUoKXx8dGhpcy5fdGFwRHJhZ1pvb20uaXNBY3RpdmUoKX0saGkucHJvdG90eXBlLmRpc2FibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITAsdGhpcy5fdG91Y2hSb3RhdGUuZGlzYWJsZSgpfSxoaS5wcm90b3R5cGUuZW5hYmxlUm90YXRpb249ZnVuY3Rpb24oKXt0aGlzLl9yb3RhdGlvbkRpc2FibGVkPSExLHRoaXMuX3RvdWNoWm9vbS5pc0VuYWJsZWQoKSYmdGhpcy5fdG91Y2hSb3RhdGUuZW5hYmxlKCl9O3ZhciBmaT1mdW5jdGlvbih0KXtyZXR1cm4gdC56b29tfHx0LmRyYWd8fHQucGl0Y2h8fHQucm90YXRlfSxwaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSwoZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWUsZX0odC5FdmVudCk7ZnVuY3Rpb24gZGkodCl7cmV0dXJuIHQucGFuRGVsdGEmJnQucGFuRGVsdGEubWFnKCl8fHQuem9vbURlbHRhfHx0LmJlYXJpbmdEZWx0YXx8dC5waXRjaERlbHRhfXZhciBnaT1mdW5jdGlvbihlLG4pe3RoaXMuX21hcD1lLHRoaXMuX2VsPXRoaXMuX21hcC5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9oYW5kbGVycz1bXSx0aGlzLl9oYW5kbGVyc0J5SWQ9e30sdGhpcy5fY2hhbmdlcz1bXSx0aGlzLl9pbmVydGlhPW5ldyBMbihlKSx0aGlzLl9iZWFyaW5nU25hcD1uLmJlYXJpbmdTbmFwLHRoaXMuX3ByZXZpb3VzQWN0aXZlSGFuZGxlcnM9e30sdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcz17fSx0aGlzLl9hZGREZWZhdWx0SGFuZGxlcnMobiksdC5iaW5kQWxsKFsiaGFuZGxlRXZlbnQiLCJoYW5kbGVXaW5kb3dFdmVudCJdLHRoaXMpO3ZhciBpPXRoaXMuX2VsO3RoaXMuX2xpc3RlbmVycz1bW2ksInRvdWNoc3RhcnQiLHtwYXNzaXZlOiExfV0sW2ksInRvdWNobW92ZSIse3Bhc3NpdmU6ITF9XSxbaSwidG91Y2hlbmQiLHZvaWQgMF0sW2ksInRvdWNoY2FuY2VsIix2b2lkIDBdLFtpLCJtb3VzZWRvd24iLHZvaWQgMF0sW2ksIm1vdXNlbW92ZSIsdm9pZCAwXSxbaSwibW91c2V1cCIsdm9pZCAwXSxbdC53aW5kb3cuZG9jdW1lbnQsIm1vdXNlbW92ZSIse2NhcHR1cmU6ITB9XSxbdC53aW5kb3cuZG9jdW1lbnQsIm1vdXNldXAiLHZvaWQgMF0sW2ksIm1vdXNlb3ZlciIsdm9pZCAwXSxbaSwibW91c2VvdXQiLHZvaWQgMF0sW2ksImRibGNsaWNrIix2b2lkIDBdLFtpLCJjbGljayIsdm9pZCAwXSxbaSwia2V5ZG93biIse2NhcHR1cmU6ITF9XSxbaSwia2V5dXAiLHZvaWQgMF0sW2ksIndoZWVsIix7cGFzc2l2ZTohMX1dLFtpLCJjb250ZXh0bWVudSIsdm9pZCAwXSxbdC53aW5kb3csImJsdXIiLHZvaWQgMF1dO2Zvcih2YXIgYT0wLG89dGhpcy5fbGlzdGVuZXJzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXNbMF07ci5hZGRFdmVudExpc3RlbmVyKGwsc1sxXSxsPT09dC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5oYW5kbGVXaW5kb3dFdmVudDp0aGlzLmhhbmRsZUV2ZW50LHNbMl0pfX07Z2kucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxuPXRoaXMuX2xpc3RlbmVycztlPG4ubGVuZ3RoO2UrPTEpe3ZhciBpPW5bZV0sYT1pWzBdO3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGlbMV0sYT09PXQud2luZG93LmRvY3VtZW50P3RoaXMuaGFuZGxlV2luZG93RXZlbnQ6dGhpcy5oYW5kbGVFdmVudCxpWzJdKX19LGdpLnByb3RvdHlwZS5fYWRkRGVmYXVsdEhhbmRsZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxyPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCk7dGhpcy5fYWRkKCJtYXBFdmVudCIsbmV3IFJuKGUsdCkpO3ZhciBuPWUuYm94Wm9vbT1uZXcgQm4oZSx0KTt0aGlzLl9hZGQoImJveFpvb20iLG4pO3ZhciBpPW5ldyBWbixhPW5ldyBzaTtlLmRvdWJsZUNsaWNrWm9vbT1uZXcgb2koYSxpKSx0aGlzLl9hZGQoInRhcFpvb20iLGkpLHRoaXMuX2FkZCgiY2xpY2tab29tIixhKTt2YXIgbz1uZXcgbGk7dGhpcy5fYWRkKCJ0YXBEcmFnWm9vbSIsbyk7dmFyIHM9ZS50b3VjaFBpdGNoPW5ldyBlaTt0aGlzLl9hZGQoInRvdWNoUGl0Y2giLHMpO3ZhciBsPW5ldyBHbih0KSxjPW5ldyBZbih0KTtlLmRyYWdSb3RhdGU9bmV3IHVpKHQsbCxjKSx0aGlzLl9hZGQoIm1vdXNlUm90YXRlIixsLFsibW91c2VQaXRjaCJdKSx0aGlzLl9hZGQoIm1vdXNlUGl0Y2giLGMsWyJtb3VzZVJvdGF0ZSJdKTt2YXIgdT1uZXcgSG4odCksaD1uZXcgV24odCk7ZS5kcmFnUGFuPW5ldyBjaShyLHUsaCksdGhpcy5fYWRkKCJtb3VzZVBhbiIsdSksdGhpcy5fYWRkKCJ0b3VjaFBhbiIsaCxbInRvdWNoWm9vbSIsInRvdWNoUm90YXRlIl0pO3ZhciBmPW5ldyAkbixwPW5ldyBLbjtlLnRvdWNoWm9vbVJvdGF0ZT1uZXcgaGkocixwLGYsbyksdGhpcy5fYWRkKCJ0b3VjaFJvdGF0ZSIsZixbInRvdWNoUGFuIiwidG91Y2hab29tIl0pLHRoaXMuX2FkZCgidG91Y2hab29tIixwLFsidG91Y2hQYW4iLCJ0b3VjaFJvdGF0ZSJdKTt2YXIgZD1lLnNjcm9sbFpvb209bmV3IGFpKGUsdGhpcyk7dGhpcy5fYWRkKCJzY3JvbGxab29tIixkLFsibW91c2VQYW4iXSk7dmFyIGc9ZS5rZXlib2FyZD1uZXcgbmk7dGhpcy5fYWRkKCJrZXlib2FyZCIsZyksdGhpcy5fYWRkKCJibG9ja2FibGVNYXBFdmVudCIsbmV3IEZuKGUpKTtmb3IodmFyIG09MCx2PVsiYm94Wm9vbSIsImRvdWJsZUNsaWNrWm9vbSIsInRhcERyYWdab29tIiwidG91Y2hQaXRjaCIsImRyYWdSb3RhdGUiLCJkcmFnUGFuIiwidG91Y2hab29tUm90YXRlIiwic2Nyb2xsWm9vbSIsImtleWJvYXJkIl07bTx2Lmxlbmd0aDttKz0xKXt2YXIgeT12W21dO3QuaW50ZXJhY3RpdmUmJnRbeV0mJmVbeV0uZW5hYmxlKHRbeV0pfX0sZ2kucHJvdG90eXBlLl9hZGQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2hhbmRsZXJzLnB1c2goe2hhbmRsZXJOYW1lOnQsaGFuZGxlcjplLGFsbG93ZWQ6cn0pLHRoaXMuX2hhbmRsZXJzQnlJZFt0XT1lfSxnaS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe2lmKCF0aGlzLl91cGRhdGluZ0NhbWVyYSl7Zm9yKHZhciB0PTAsZT10aGlzLl9oYW5kbGVyczt0PGUubGVuZ3RoO3QrPTEpZVt0XS5oYW5kbGVyLnJlc2V0KCk7dGhpcy5faW5lcnRpYS5jbGVhcigpLHRoaXMuX2ZpcmVFdmVudHMoe30se30pLHRoaXMuX2NoYW5nZXM9W119fSxnaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuX2hhbmRsZXJzO3Q8ZS5sZW5ndGg7dCs9MSlpZihlW3RdLmhhbmRsZXIuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX0sZ2kucHJvdG90eXBlLmlzWm9vbWluZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcy56b29tfHx0aGlzLl9tYXAuc2Nyb2xsWm9vbS5pc1pvb21pbmcoKX0sZ2kucHJvdG90eXBlLmlzUm90YXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2V2ZW50c0luUHJvZ3Jlc3Mucm90YXRlfSxnaS5wcm90b3R5cGUuaXNNb3Zpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihmaSh0aGlzLl9ldmVudHNJblByb2dyZXNzKSl8fHRoaXMuaXNab29taW5nKCl9LGdpLnByb3RvdHlwZS5fYmxvY2tlZEJ5QWN0aXZlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gdClpZihuIT09ciYmKCFlfHxlLmluZGV4T2Yobik8MCkpcmV0dXJuITA7cmV0dXJuITF9LGdpLnByb3RvdHlwZS5oYW5kbGVXaW5kb3dFdmVudD1mdW5jdGlvbih0KXt0aGlzLmhhbmRsZUV2ZW50KHQsdC50eXBlKyJXaW5kb3ciKX0sZ2kucHJvdG90eXBlLl9nZXRNYXBUb3VjaGVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXTt0aGlzLl9lbC5jb250YWlucyhpLnRhcmdldCkmJmUucHVzaChpKX1yZXR1cm4gZX0sZ2kucHJvdG90eXBlLmhhbmRsZUV2ZW50PWZ1bmN0aW9uKHQsZSl7aWYoImJsdXIiIT09dC50eXBlKXt0aGlzLl91cGRhdGluZ0NhbWVyYT0hMDtmb3IodmFyIG49InJlbmRlckZyYW1lIj09PXQudHlwZT92b2lkIDA6dCxpPXtuZWVkc1JlbmRlckZyYW1lOiExfSxhPXt9LG89e30scz10LnRvdWNoZXM/dGhpcy5fZ2V0TWFwVG91Y2hlcyh0LnRvdWNoZXMpOnZvaWQgMCxsPXM/ci50b3VjaFBvcyh0aGlzLl9lbCxzKTpyLm1vdXNlUG9zKHRoaXMuX2VsLHQpLGM9MCx1PXRoaXMuX2hhbmRsZXJzO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXSxmPWguaGFuZGxlck5hbWUscD1oLmhhbmRsZXIsZD1oLmFsbG93ZWQ7aWYocC5pc0VuYWJsZWQoKSl7dmFyIGc9dm9pZCAwO3RoaXMuX2Jsb2NrZWRCeUFjdGl2ZShvLGQsZik/cC5yZXNldCgpOnBbZXx8dC50eXBlXSYmKGc9cFtlfHx0LnR5cGVdKHQsbCxzKSx0aGlzLm1lcmdlSGFuZGxlclJlc3VsdChpLGEsZyxmLG4pLGcmJmcubmVlZHNSZW5kZXJGcmFtZSYmdGhpcy5fdHJpZ2dlclJlbmRlckZyYW1lKCkpLChnfHxwLmlzQWN0aXZlKCkpJiYob1tmXT1wKX19dmFyIG09e307Zm9yKHZhciB2IGluIHRoaXMuX3ByZXZpb3VzQWN0aXZlSGFuZGxlcnMpb1t2XXx8KG1bdl09bik7dGhpcy5fcHJldmlvdXNBY3RpdmVIYW5kbGVycz1vLChPYmplY3Qua2V5cyhtKS5sZW5ndGh8fGRpKGkpKSYmKHRoaXMuX2NoYW5nZXMucHVzaChbaSxhLG1dKSx0aGlzLl90cmlnZ2VyUmVuZGVyRnJhbWUoKSksKE9iamVjdC5rZXlzKG8pLmxlbmd0aHx8ZGkoaSkpJiZ0aGlzLl9tYXAuX3N0b3AoITApLHRoaXMuX3VwZGF0aW5nQ2FtZXJhPSExO3ZhciB5PWkuY2FtZXJhQW5pbWF0aW9uO3kmJih0aGlzLl9pbmVydGlhLmNsZWFyKCksdGhpcy5fZmlyZUV2ZW50cyh7fSx7fSksdGhpcy5fY2hhbmdlcz1bXSx5KHRoaXMuX21hcCkpfWVsc2UgdGhpcy5zdG9wKCl9LGdpLnByb3RvdHlwZS5tZXJnZUhhbmRsZXJSZXN1bHQ9ZnVuY3Rpb24oZSxyLG4saSxhKXtpZihuKXt0LmV4dGVuZChlLG4pO3ZhciBvPXtoYW5kbGVyTmFtZTppLG9yaWdpbmFsRXZlbnQ6bi5vcmlnaW5hbEV2ZW50fHxhfTt2b2lkIDAhPT1uLnpvb21EZWx0YSYmKHIuem9vbT1vKSx2b2lkIDAhPT1uLnBhbkRlbHRhJiYoci5kcmFnPW8pLHZvaWQgMCE9PW4ucGl0Y2hEZWx0YSYmKHIucGl0Y2g9byksdm9pZCAwIT09bi5iZWFyaW5nRGVsdGEmJihyLnJvdGF0ZT1vKX19LGdpLnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXt9LHI9e30sbj17fSxpPTAsYT10aGlzLl9jaGFuZ2VzO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW9bMF0sbD1vWzFdLGM9b1syXTtzLnBhbkRlbHRhJiYoZS5wYW5EZWx0YT0oZS5wYW5EZWx0YXx8bmV3IHQuUG9pbnQoMCwwKSkuX2FkZChzLnBhbkRlbHRhKSkscy56b29tRGVsdGEmJihlLnpvb21EZWx0YT0oZS56b29tRGVsdGF8fDApK3Muem9vbURlbHRhKSxzLmJlYXJpbmdEZWx0YSYmKGUuYmVhcmluZ0RlbHRhPShlLmJlYXJpbmdEZWx0YXx8MCkrcy5iZWFyaW5nRGVsdGEpLHMucGl0Y2hEZWx0YSYmKGUucGl0Y2hEZWx0YT0oZS5waXRjaERlbHRhfHwwKStzLnBpdGNoRGVsdGEpLHZvaWQgMCE9PXMuYXJvdW5kJiYoZS5hcm91bmQ9cy5hcm91bmQpLHZvaWQgMCE9PXMucGluY2hBcm91bmQmJihlLnBpbmNoQXJvdW5kPXMucGluY2hBcm91bmQpLHMubm9JbmVydGlhJiYoZS5ub0luZXJ0aWE9cy5ub0luZXJ0aWEpLHQuZXh0ZW5kKHIsbCksdC5leHRlbmQobixjKX10aGlzLl91cGRhdGVNYXBUcmFuc2Zvcm0oZSxyLG4pLHRoaXMuX2NoYW5nZXM9W119LGdpLnByb3RvdHlwZS5fdXBkYXRlTWFwVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9tYXAsaT1uLnRyYW5zZm9ybTtpZighZGkodCkpcmV0dXJuIHRoaXMuX2ZpcmVFdmVudHMoZSxyKTt2YXIgYT10LnBhbkRlbHRhLG89dC56b29tRGVsdGEscz10LmJlYXJpbmdEZWx0YSxsPXQucGl0Y2hEZWx0YSxjPXQuYXJvdW5kLHU9dC5waW5jaEFyb3VuZDt2b2lkIDAhPT11JiYoYz11KSxuLl9zdG9wKCEwKSxjPWN8fG4udHJhbnNmb3JtLmNlbnRlclBvaW50O3ZhciBoPWkucG9pbnRMb2NhdGlvbihhP2Muc3ViKGEpOmMpO3MmJihpLmJlYXJpbmcrPXMpLGwmJihpLnBpdGNoKz1sKSxvJiYoaS56b29tKz1vKSxpLnNldExvY2F0aW9uQXRQb2ludChoLGMpLHRoaXMuX21hcC5fdXBkYXRlKCksdC5ub0luZXJ0aWF8fHRoaXMuX2luZXJ0aWEucmVjb3JkKHQpLHRoaXMuX2ZpcmVFdmVudHMoZSxyKX0sZ2kucHJvdG90eXBlLl9maXJlRXZlbnRzPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPWZpKHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3MpLGE9ZmkoZSksbz17fTtmb3IodmFyIHMgaW4gZSl0aGlzLl9ldmVudHNJblByb2dyZXNzW3NdfHwob1tzKyJzdGFydCJdPWVbc10ub3JpZ2luYWxFdmVudCksdGhpcy5fZXZlbnRzSW5Qcm9ncmVzc1tzXT1lW3NdO2Zvcih2YXIgbCBpbiFpJiZhJiZ0aGlzLl9maXJlRXZlbnQoIm1vdmVzdGFydCIsYS5vcmlnaW5hbEV2ZW50KSxvKXRoaXMuX2ZpcmVFdmVudChsLG9bbF0pO2Zvcih2YXIgYyBpbiBlLnJvdGF0ZSYmKHRoaXMuX2JlYXJpbmdDaGFuZ2VkPSEwKSxhJiZ0aGlzLl9maXJlRXZlbnQoIm1vdmUiLGEub3JpZ2luYWxFdmVudCksZSl0aGlzLl9maXJlRXZlbnQoYyxlW2NdLm9yaWdpbmFsRXZlbnQpO3ZhciB1LGg9e307Zm9yKHZhciBmIGluIHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3Mpe3ZhciBwPXRoaXMuX2V2ZW50c0luUHJvZ3Jlc3NbZl0sZD1wLmhhbmRsZXJOYW1lLGc9cC5vcmlnaW5hbEV2ZW50O3RoaXMuX2hhbmRsZXJzQnlJZFtkXS5pc0FjdGl2ZSgpfHwoZGVsZXRlIHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3NbZl0saFtmKyJlbmQiXT11PXJbZF18fGcpfWZvcih2YXIgbSBpbiBoKXRoaXMuX2ZpcmVFdmVudChtLGhbbV0pO3ZhciB2PWZpKHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3MpO2lmKChpfHxhKSYmIXYpe3RoaXMuX3VwZGF0aW5nQ2FtZXJhPSEwO3ZhciB5PXRoaXMuX2luZXJ0aWEuX29uTW92ZUVuZCh0aGlzLl9tYXAuZHJhZ1Bhbi5faW5lcnRpYU9wdGlvbnMpLHg9ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10JiYtbi5fYmVhcmluZ1NuYXA8dCYmdDxuLl9iZWFyaW5nU25hcH07eT8oeCh5LmJlYXJpbmd8fHRoaXMuX21hcC5nZXRCZWFyaW5nKCkpJiYoeS5iZWFyaW5nPTApLHRoaXMuX21hcC5lYXNlVG8oeSx7b3JpZ2luYWxFdmVudDp1fSkpOih0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIse29yaWdpbmFsRXZlbnQ6dX0pKSx4KHRoaXMuX21hcC5nZXRCZWFyaW5nKCkpJiZ0aGlzLl9tYXAucmVzZXROb3J0aCgpKSx0aGlzLl9iZWFyaW5nQ2hhbmdlZD0hMSx0aGlzLl91cGRhdGluZ0NhbWVyYT0hMX19LGdpLnByb3RvdHlwZS5fZmlyZUV2ZW50PWZ1bmN0aW9uKGUscil7dGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSxyP3tvcmlnaW5hbEV2ZW50OnJ9Ont9KSl9LGdpLnByb3RvdHlwZS5fdHJpZ2dlclJlbmRlckZyYW1lPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt2b2lkIDA9PT10aGlzLl9mcmFtZUlkJiYodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSgoZnVuY3Rpb24oZSl7ZGVsZXRlIHQuX2ZyYW1lSWQsdC5oYW5kbGVFdmVudChuZXcgcGkoInJlbmRlckZyYW1lIix7dGltZVN0YW1wOmV9KSksdC5fYXBwbHlDaGFuZ2VzKCl9KSkpfTt2YXIgbWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4pe2UuY2FsbCh0aGlzKSx0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLnRyYW5zZm9ybT1yLHRoaXMuX2JlYXJpbmdTbmFwPW4uYmVhcmluZ1NuYXAsdC5iaW5kQWxsKFsiX3JlbmRlckZyYW1lQ2FsbGJhY2siXSx0aGlzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLChyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuTG5nTGF0KHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcsdGhpcy50cmFuc2Zvcm0uY2VudGVyLmxhdCl9LHIucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7Y2VudGVyOnR9LGUpfSxyLnByb3RvdHlwZS5wYW5CeT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9dC5Qb2ludC5jb252ZXJ0KGUpLm11bHQoLTEpLHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLHQuZXh0ZW5kKHtvZmZzZXQ6ZX0sciksbil9LHIucHJvdG90eXBlLnBhblRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2NlbnRlcjplfSxyKSxuKX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS56b29tfSxyLnByb3RvdHlwZS5zZXRab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHt6b29tOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHt6b29tOmV9LHIpLG4pfSxyLnByb3RvdHlwZS56b29tSW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkrMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21PdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCktMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldEJlYXJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZ30sci5wcm90b3R5cGUuc2V0QmVhcmluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7YmVhcmluZzp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRQYWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBhZGRpbmd9LHIucHJvdG90eXBlLnNldFBhZGRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3BhZGRpbmc6dH0sZSksdGhpc30sci5wcm90b3R5cGUucm90YXRlVG89ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVhc2VUbyh0LmV4dGVuZCh7YmVhcmluZzplfSxyKSxuKX0sci5wcm90b3R5cGUucmVzZXROb3J0aD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLnJvdGF0ZVRvKDAsdC5leHRlbmQoe2R1cmF0aW9uOjFlM30sZSksciksdGhpc30sci5wcm90b3R5cGUucmVzZXROb3J0aFBpdGNoPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtiZWFyaW5nOjAscGl0Y2g6MCxkdXJhdGlvbjoxZTN9LGUpLHIpLHRoaXN9LHIucHJvdG90eXBlLnNuYXBUb05vcnRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKHRoaXMuZ2V0QmVhcmluZygpKTx0aGlzLl9iZWFyaW5nU25hcD90aGlzLnJlc2V0Tm9ydGgodCxlKTp0aGlzfSxyLnByb3RvdHlwZS5nZXRQaXRjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5waXRjaH0sci5wcm90b3R5cGUuc2V0UGl0Y2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3BpdGNoOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLmNhbWVyYUZvckJvdW5kcz1mdW5jdGlvbihlLHIpe3JldHVybiBlPXQuTG5nTGF0Qm91bmRzLmNvbnZlcnQoZSksdGhpcy5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyhlLmdldE5vcnRoV2VzdCgpLGUuZ2V0U291dGhFYXN0KCksMCxyKX0sci5wcm90b3R5cGUuX2NhbWVyYUZvckJveEFuZEJlYXJpbmc9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9e3RvcDowLGJvdHRvbTowLHJpZ2h0OjAsbGVmdDowfTtpZigibnVtYmVyIj09dHlwZW9mKGk9dC5leHRlbmQoe3BhZGRpbmc6YSxvZmZzZXQ6WzAsMF0sbWF4Wm9vbTp0aGlzLnRyYW5zZm9ybS5tYXhab29tfSxpKSkucGFkZGluZyl7dmFyIG89aS5wYWRkaW5nO2kucGFkZGluZz17dG9wOm8sYm90dG9tOm8scmlnaHQ6byxsZWZ0Om99fWkucGFkZGluZz10LmV4dGVuZChhLGkucGFkZGluZyk7dmFyIHM9dGhpcy50cmFuc2Zvcm0sbD1zLnBhZGRpbmcsYz1zLnByb2plY3QodC5MbmdMYXQuY29udmVydChlKSksdT1zLnByb2plY3QodC5MbmdMYXQuY29udmVydChyKSksaD1jLnJvdGF0ZSgtbipNYXRoLlBJLzE4MCksZj11LnJvdGF0ZSgtbipNYXRoLlBJLzE4MCkscD1uZXcgdC5Qb2ludChNYXRoLm1heChoLngsZi54KSxNYXRoLm1heChoLnksZi55KSksZD1uZXcgdC5Qb2ludChNYXRoLm1pbihoLngsZi54KSxNYXRoLm1pbihoLnksZi55KSksZz1wLnN1YihkKSxtPShzLndpZHRoLShsLmxlZnQrbC5yaWdodCtpLnBhZGRpbmcubGVmdCtpLnBhZGRpbmcucmlnaHQpKS9nLngsdj0ocy5oZWlnaHQtKGwudG9wK2wuYm90dG9tK2kucGFkZGluZy50b3AraS5wYWRkaW5nLmJvdHRvbSkpL2cueTtpZighKHY8MHx8bTwwKSl7dmFyIHk9TWF0aC5taW4ocy5zY2FsZVpvb20ocy5zY2FsZSpNYXRoLm1pbihtLHYpKSxpLm1heFpvb20pLHg9dC5Qb2ludC5jb252ZXJ0KGkub2Zmc2V0KSxiPW5ldyB0LlBvaW50KHgueCsoaS5wYWRkaW5nLmxlZnQtaS5wYWRkaW5nLnJpZ2h0KS8yLHgueSsoaS5wYWRkaW5nLnRvcC1pLnBhZGRpbmcuYm90dG9tKS8yKS5tdWx0KHMuc2NhbGUvcy56b29tU2NhbGUoeSkpO3JldHVybntjZW50ZXI6cy51bnByb2plY3QoYy5hZGQodSkuZGl2KDIpLnN1YihiKSksem9vbTp5LGJlYXJpbmc6bn19dC53YXJuT25jZSgiTWFwIGNhbm5vdCBmaXQgd2l0aGluIGNhbnZhcyB3aXRoIHRoZSBnaXZlbiBib3VuZHMsIHBhZGRpbmcsIGFuZC9vciBvZmZzZXQuIil9LHIucHJvdG90eXBlLmZpdEJvdW5kcz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2ZpdEludGVybmFsKHRoaXMuY2FtZXJhRm9yQm91bmRzKHQsZSksZSxyKX0sci5wcm90b3R5cGUuZml0U2NyZWVuQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fZml0SW50ZXJuYWwodGhpcy5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyh0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHQuUG9pbnQuY29udmVydChlKSksdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbih0LlBvaW50LmNvbnZlcnQocikpLG4saSksaSxhKX0sci5wcm90b3R5cGUuX2ZpdEludGVybmFsPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT8oZGVsZXRlKHI9dC5leHRlbmQoZSxyKSkucGFkZGluZyxyLmxpbmVhcj90aGlzLmVhc2VUbyhyLG4pOnRoaXMuZmx5VG8ocixuKSk6dGhpc30sci5wcm90b3R5cGUuanVtcFRvPWZ1bmN0aW9uKGUscil7dGhpcy5zdG9wKCk7dmFyIG49dGhpcy50cmFuc2Zvcm0saT0hMSxhPSExLG89ITE7cmV0dXJuInpvb20iaW4gZSYmbi56b29tIT09K2Uuem9vbSYmKGk9ITAsbi56b29tPStlLnpvb20pLHZvaWQgMCE9PWUuY2VudGVyJiYobi5jZW50ZXI9dC5MbmdMYXQuY29udmVydChlLmNlbnRlcikpLCJiZWFyaW5nImluIGUmJm4uYmVhcmluZyE9PStlLmJlYXJpbmcmJihhPSEwLG4uYmVhcmluZz0rZS5iZWFyaW5nKSwicGl0Y2giaW4gZSYmbi5waXRjaCE9PStlLnBpdGNoJiYobz0hMCxuLnBpdGNoPStlLnBpdGNoKSxudWxsPT1lLnBhZGRpbmd8fG4uaXNQYWRkaW5nRXF1YWwoZS5wYWRkaW5nKXx8KG4ucGFkZGluZz1lLnBhZGRpbmcpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgibW92ZSIscikpLGkmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgiem9vbSIscikpLmZpcmUobmV3IHQuRXZlbnQoInpvb21lbmQiLHIpKSxhJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgicm90YXRlIixyKSkuZmlyZShuZXcgdC5FdmVudCgicm90YXRlZW5kIixyKSksbyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaHN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgicGl0Y2giLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaGVuZCIscikpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIscikpfSxyLnByb3RvdHlwZS5lYXNlVG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3RoaXMuX3N0b3AoITEsZS5lYXNlSWQpLCghMT09PShlPXQuZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sZHVyYXRpb246NTAwLGVhc2luZzp0LmVhc2V9LGUpKS5hbmltYXRlfHwhZS5lc3NlbnRpYWwmJnQuYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbikmJihlLmR1cmF0aW9uPTApO3ZhciBpPXRoaXMudHJhbnNmb3JtLGE9dGhpcy5nZXRab29tKCksbz10aGlzLmdldEJlYXJpbmcoKSxzPXRoaXMuZ2V0UGl0Y2goKSxsPXRoaXMuZ2V0UGFkZGluZygpLGM9Inpvb20iaW4gZT8rZS56b29tOmEsdT0iYmVhcmluZyJpbiBlP3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcoZS5iZWFyaW5nLG8pOm8saD0icGl0Y2giaW4gZT8rZS5waXRjaDpzLGY9InBhZGRpbmciaW4gZT9lLnBhZGRpbmc6aS5wYWRkaW5nLHA9dC5Qb2ludC5jb252ZXJ0KGUub2Zmc2V0KSxkPWkuY2VudGVyUG9pbnQuYWRkKHApLGc9aS5wb2ludExvY2F0aW9uKGQpLG09dC5MbmdMYXQuY29udmVydChlLmNlbnRlcnx8Zyk7dGhpcy5fbm9ybWFsaXplQ2VudGVyKG0pO3ZhciB2LHkseD1pLnByb2plY3QoZyksYj1pLnByb2plY3QobSkuc3ViKHgpLF89aS56b29tU2NhbGUoYy1hKTtlLmFyb3VuZCYmKHY9dC5MbmdMYXQuY29udmVydChlLmFyb3VuZCkseT1pLmxvY2F0aW9uUG9pbnQodikpO3ZhciB3PXttb3Zpbmc6dGhpcy5fbW92aW5nLHpvb21pbmc6dGhpcy5fem9vbWluZyxyb3RhdGluZzp0aGlzLl9yb3RhdGluZyxwaXRjaGluZzp0aGlzLl9waXRjaGluZ307cmV0dXJuIHRoaXMuX3pvb21pbmc9dGhpcy5fem9vbWluZ3x8YyE9PWEsdGhpcy5fcm90YXRpbmc9dGhpcy5fcm90YXRpbmd8fG8hPT11LHRoaXMuX3BpdGNoaW5nPXRoaXMuX3BpdGNoaW5nfHxoIT09cyx0aGlzLl9wYWRkaW5nPSFpLmlzUGFkZGluZ0VxdWFsKGYpLHRoaXMuX2Vhc2VJZD1lLmVhc2VJZCx0aGlzLl9wcmVwYXJlRWFzZShyLGUubm9Nb3ZlU3RhcnQsdyksY2xlYXJUaW1lb3V0KHRoaXMuX2Vhc2VFbmRUaW1lb3V0SUQpLHRoaXMuX2Vhc2UoKGZ1bmN0aW9uKGUpe2lmKG4uX3pvb21pbmcmJihpLnpvb209dC5udW1iZXIoYSxjLGUpKSxuLl9yb3RhdGluZyYmKGkuYmVhcmluZz10Lm51bWJlcihvLHUsZSkpLG4uX3BpdGNoaW5nJiYoaS5waXRjaD10Lm51bWJlcihzLGgsZSkpLG4uX3BhZGRpbmcmJihpLmludGVycG9sYXRlUGFkZGluZyhsLGYsZSksZD1pLmNlbnRlclBvaW50LmFkZChwKSksdilpLnNldExvY2F0aW9uQXRQb2ludCh2LHkpO2Vsc2V7dmFyIGc9aS56b29tU2NhbGUoaS56b29tLWEpLG09Yz5hP01hdGgubWluKDIsXyk6TWF0aC5tYXgoLjUsXyksdz1NYXRoLnBvdyhtLDEtZSksVD1pLnVucHJvamVjdCh4LmFkZChiLm11bHQoZSp3KSkubXVsdChnKSk7aS5zZXRMb2NhdGlvbkF0UG9pbnQoaS5yZW5kZXJXb3JsZENvcGllcz9ULndyYXAoKTpULGQpfW4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSksKGZ1bmN0aW9uKHQpe24uX2FmdGVyRWFzZShyLHQpfSksZSksdGhpc30sci5wcm90b3R5cGUuX3ByZXBhcmVFYXNlPWZ1bmN0aW9uKGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksdGhpcy5fbW92aW5nPSEwLHJ8fG4ubW92aW5nfHx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIsZSkpLHRoaXMuX3pvb21pbmcmJiFuLnpvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbXN0YXJ0IixlKSksdGhpcy5fcm90YXRpbmcmJiFuLnJvdGF0aW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZXN0YXJ0IixlKSksdGhpcy5fcGl0Y2hpbmcmJiFuLnBpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoc3RhcnQiLGUpKX0sci5wcm90b3R5cGUuX2ZpcmVNb3ZlRXZlbnRzPWZ1bmN0aW9uKGUpe3RoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZSIsZSkpLHRoaXMuX3pvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbSIsZSkpLHRoaXMuX3JvdGF0aW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZSIsZSkpLHRoaXMuX3BpdGNoaW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoIixlKSl9LHIucHJvdG90eXBlLl9hZnRlckVhc2U9ZnVuY3Rpb24oZSxyKXtpZighdGhpcy5fZWFzZUlkfHwhcnx8dGhpcy5fZWFzZUlkIT09cil7ZGVsZXRlIHRoaXMuX2Vhc2VJZDt2YXIgbj10aGlzLl96b29taW5nLGk9dGhpcy5fcm90YXRpbmcsYT10aGlzLl9waXRjaGluZzt0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLl9yb3RhdGluZz0hMSx0aGlzLl9waXRjaGluZz0hMSx0aGlzLl9wYWRkaW5nPSExLG4mJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbWVuZCIsZSkpLGkmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlZW5kIixlKSksYSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaGVuZCIsZSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIsZSkpfX0sci5wcm90b3R5cGUuZmx5VG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKCFlLmVzc2VudGlhbCYmdC5icm93c2VyLnByZWZlcnNSZWR1Y2VkTW90aW9uKXt2YXIgaT10LnBpY2soZSxbImNlbnRlciIsInpvb20iLCJiZWFyaW5nIiwicGl0Y2giLCJhcm91bmQiXSk7cmV0dXJuIHRoaXMuanVtcFRvKGkscil9dGhpcy5zdG9wKCksZT10LmV4dGVuZCh7b2Zmc2V0OlswLDBdLHNwZWVkOjEuMixjdXJ2ZToxLjQyLGVhc2luZzp0LmVhc2V9LGUpO3ZhciBhPXRoaXMudHJhbnNmb3JtLG89dGhpcy5nZXRab29tKCkscz10aGlzLmdldEJlYXJpbmcoKSxsPXRoaXMuZ2V0UGl0Y2goKSxjPXRoaXMuZ2V0UGFkZGluZygpLHU9Inpvb20iaW4gZT90LmNsYW1wKCtlLnpvb20sYS5taW5ab29tLGEubWF4Wm9vbSk6byxoPSJiZWFyaW5nImluIGU/dGhpcy5fbm9ybWFsaXplQmVhcmluZyhlLmJlYXJpbmcscyk6cyxmPSJwaXRjaCJpbiBlPytlLnBpdGNoOmwscD0icGFkZGluZyJpbiBlP2UucGFkZGluZzphLnBhZGRpbmcsZD1hLnpvb21TY2FsZSh1LW8pLGc9dC5Qb2ludC5jb252ZXJ0KGUub2Zmc2V0KSxtPWEuY2VudGVyUG9pbnQuYWRkKGcpLHY9YS5wb2ludExvY2F0aW9uKG0pLHk9dC5MbmdMYXQuY29udmVydChlLmNlbnRlcnx8dik7dGhpcy5fbm9ybWFsaXplQ2VudGVyKHkpO3ZhciB4PWEucHJvamVjdCh2KSxiPWEucHJvamVjdCh5KS5zdWIoeCksXz1lLmN1cnZlLHc9TWF0aC5tYXgoYS53aWR0aCxhLmhlaWdodCksVD13L2Qsaz1iLm1hZygpO2lmKCJtaW5ab29tImluIGUpe3ZhciBNPXQuY2xhbXAoTWF0aC5taW4oZS5taW5ab29tLG8sdSksYS5taW5ab29tLGEubWF4Wm9vbSksQT13L2Euem9vbVNjYWxlKE0tbyk7Xz1NYXRoLnNxcnQoQS9rKjIpfXZhciBTPV8qXztmdW5jdGlvbiBFKHQpe3ZhciBlPShUKlQtdyp3Kyh0Py0xOjEpKlMqUyprKmspLygyKih0P1Q6dykqUyprKTtyZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KGUqZSsxKS1lKX1mdW5jdGlvbiBDKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gTCh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfXZhciBQPUUoMCksST1mdW5jdGlvbih0KXtyZXR1cm4gTChQKS9MKFArXyp0KX0sej1mdW5jdGlvbih0KXtyZXR1cm4gdyooKEwoUCkqKEMoZT1QK18qdCkvTChlKSktQyhQKSkvUykvazt2YXIgZX0sTz0oRSgxKS1QKS9fO2lmKE1hdGguYWJzKGspPDFlLTZ8fCFpc0Zpbml0ZShPKSl7aWYoTWF0aC5hYnMody1UKTwxZS02KXJldHVybiB0aGlzLmVhc2VUbyhlLHIpO3ZhciBEPVQ8dz8tMToxO089TWF0aC5hYnMoTWF0aC5sb2coVC93KSkvXyx6PWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEk9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZXhwKEQqXyp0KX19cmV0dXJuIGUuZHVyYXRpb249ImR1cmF0aW9uImluIGU/K2UuZHVyYXRpb246MWUzKk8vKCJzY3JlZW5TcGVlZCJpbiBlPytlLnNjcmVlblNwZWVkL186K2Uuc3BlZWQpLGUubWF4RHVyYXRpb24mJmUuZHVyYXRpb24+ZS5tYXhEdXJhdGlvbiYmKGUuZHVyYXRpb249MCksdGhpcy5fem9vbWluZz0hMCx0aGlzLl9yb3RhdGluZz1zIT09aCx0aGlzLl9waXRjaGluZz1mIT09bCx0aGlzLl9wYWRkaW5nPSFhLmlzUGFkZGluZ0VxdWFsKHApLHRoaXMuX3ByZXBhcmVFYXNlKHIsITEpLHRoaXMuX2Vhc2UoKGZ1bmN0aW9uKGUpe3ZhciBpPWUqTyxkPTEvSShpKTthLnpvb209MT09PWU/dTpvK2Euc2NhbGVab29tKGQpLG4uX3JvdGF0aW5nJiYoYS5iZWFyaW5nPXQubnVtYmVyKHMsaCxlKSksbi5fcGl0Y2hpbmcmJihhLnBpdGNoPXQubnVtYmVyKGwsZixlKSksbi5fcGFkZGluZyYmKGEuaW50ZXJwb2xhdGVQYWRkaW5nKGMscCxlKSxtPWEuY2VudGVyUG9pbnQuYWRkKGcpKTt2YXIgdj0xPT09ZT95OmEudW5wcm9qZWN0KHguYWRkKGIubXVsdCh6KGkpKSkubXVsdChkKSk7YS5zZXRMb2NhdGlvbkF0UG9pbnQoYS5yZW5kZXJXb3JsZENvcGllcz92LndyYXAoKTp2LG0pLG4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSksKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2FmdGVyRWFzZShyKX0pLGUpLHRoaXN9LHIucHJvdG90eXBlLmlzRWFzaW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lYXNlRnJhbWVJZH0sci5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdG9wKCl9LHIucHJvdG90eXBlLl9zdG9wPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fZWFzZUZyYW1lSWQmJih0aGlzLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9lYXNlRnJhbWVJZCksZGVsZXRlIHRoaXMuX2Vhc2VGcmFtZUlkLGRlbGV0ZSB0aGlzLl9vbkVhc2VGcmFtZSksdGhpcy5fb25FYXNlRW5kKXt2YXIgcj10aGlzLl9vbkVhc2VFbmQ7ZGVsZXRlIHRoaXMuX29uRWFzZUVuZCxyLmNhbGwodGhpcyxlKX1pZighdCl7dmFyIG49dGhpcy5oYW5kbGVycztuJiZuLnN0b3AoKX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUuX2Vhc2U9ZnVuY3Rpb24oZSxyLG4peyExPT09bi5hbmltYXRlfHwwPT09bi5kdXJhdGlvbj8oZSgxKSxyKCkpOih0aGlzLl9lYXNlU3RhcnQ9dC5icm93c2VyLm5vdygpLHRoaXMuX2Vhc2VPcHRpb25zPW4sdGhpcy5fb25FYXNlRnJhbWU9ZSx0aGlzLl9vbkVhc2VFbmQ9cix0aGlzLl9lYXNlRnJhbWVJZD10aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjaykpfSxyLnByb3RvdHlwZS5fcmVuZGVyRnJhbWVDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciBlPU1hdGgubWluKCh0LmJyb3dzZXIubm93KCktdGhpcy5fZWFzZVN0YXJ0KS90aGlzLl9lYXNlT3B0aW9ucy5kdXJhdGlvbiwxKTt0aGlzLl9vbkVhc2VGcmFtZSh0aGlzLl9lYXNlT3B0aW9ucy5lYXNpbmcoZSkpLGU8MT90aGlzLl9lYXNlRnJhbWVJZD10aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjayk6dGhpcy5zdG9wKCl9LHIucHJvdG90eXBlLl9ub3JtYWxpemVCZWFyaW5nPWZ1bmN0aW9uKGUscil7ZT10LndyYXAoZSwtMTgwLDE4MCk7dmFyIG49TWF0aC5hYnMoZS1yKTtyZXR1cm4gTWF0aC5hYnMoZS0zNjAtcik8biYmKGUtPTM2MCksTWF0aC5hYnMoZSszNjAtcik8biYmKGUrPTM2MCksZX0sci5wcm90b3R5cGUuX25vcm1hbGl6ZUNlbnRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnRyYW5zZm9ybTtpZihlLnJlbmRlcldvcmxkQ29waWVzJiYhZS5sbmdSYW5nZSl7dmFyIHI9dC5sbmctZS5jZW50ZXIubG5nO3QubG5nKz1yPjE4MD8tMzYwOnI8LTE4MD8zNjA6MH19LHJ9KHQuRXZlbnRlZCksdmk9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMub3B0aW9ucz1lLHQuYmluZEFsbChbIl91cGRhdGVFZGl0TGluayIsIl91cGRhdGVEYXRhIiwiX3VwZGF0ZUNvbXBhY3QiXSx0aGlzKX07dmkucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tcmlnaHQifSx2aS5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuY29tcGFjdDtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtYXR0cmliIiksdGhpcy5faW5uZXJDb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyIix0aGlzLl9jb250YWluZXIpLGUmJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jb21wYWN0IiksdGhpcy5fdXBkYXRlQXR0cmlidXRpb25zKCksdGhpcy5fdXBkYXRlRWRpdExpbmsoKSx0aGlzLl9tYXAub24oInN0eWxlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9uKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKSx2b2lkIDA9PT1lJiYodGhpcy5fbWFwLm9uKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX3VwZGF0ZUNvbXBhY3QoKSksdGhpcy5fY29udGFpbmVyfSx2aS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoInN0eWxlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9mZigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlRGF0YSksdGhpcy5fbWFwLm9mZigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmspLHRoaXMuX21hcC5vZmYoInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fbWFwPXZvaWQgMCx0aGlzLl9hdHRyaWJIVE1MPXZvaWQgMH0sdmkucHJvdG90eXBlLl91cGRhdGVFZGl0TGluaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2VkaXRMaW5rO2V8fChlPXRoaXMuX2VkaXRMaW5rPXRoaXMuX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubWFwYm94LWltcHJvdmUtbWFwIikpO3ZhciByPVt7a2V5OiJvd25lciIsdmFsdWU6dGhpcy5zdHlsZU93bmVyfSx7a2V5OiJpZCIsdmFsdWU6dGhpcy5zdHlsZUlkfSx7a2V5OiJhY2Nlc3NfdG9rZW4iLHZhbHVlOnRoaXMuX21hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VufHx0LmNvbmZpZy5BQ0NFU1NfVE9LRU59XTtpZihlKXt2YXIgbj1yLnJlZHVjZSgoZnVuY3Rpb24odCxlLG4pe3JldHVybiBlLnZhbHVlJiYodCs9ZS5rZXkrIj0iK2UudmFsdWUrKG48ci5sZW5ndGgtMT8iJiI6IiIpKSx0fSksIj8iKTtlLmhyZWY9dC5jb25maWcuRkVFREJBQ0tfVVJMKyIvIituKyh0aGlzLl9tYXAuX2hhc2g/dGhpcy5fbWFwLl9oYXNoLmdldEhhc2hTdHJpbmcoITApOiIiKSxlLnJlbD0ibm9vcGVuZXIgbm9mb2xsb3cifX0sdmkucHJvdG90eXBlLl91cGRhdGVEYXRhPWZ1bmN0aW9uKHQpeyF0fHwibWV0YWRhdGEiIT09dC5zb3VyY2VEYXRhVHlwZSYmInN0eWxlIiE9PXQuZGF0YVR5cGV8fCh0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKSx0aGlzLl91cGRhdGVFZGl0TGluaygpKX0sdmkucHJvdG90eXBlLl91cGRhdGVBdHRyaWJ1dGlvbnM9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PVtdO2lmKHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbiYmKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKT90PXQuY29uY2F0KHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdD8iIjp0fSkpKToic3RyaW5nIj09dHlwZW9mIHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbiYmdC5wdXNoKHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbikpLHRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0KXt2YXIgZT10aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldDt0aGlzLnN0eWxlT3duZXI9ZS5vd25lcix0aGlzLnN0eWxlSWQ9ZS5pZH12YXIgcj10aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgbiBpbiByKXt2YXIgaT1yW25dO2lmKGkudXNlZCl7dmFyIGE9aS5nZXRTb3VyY2UoKTthLmF0dHJpYnV0aW9uJiZ0LmluZGV4T2YoYS5hdHRyaWJ1dGlvbik8MCYmdC5wdXNoKGEuYXR0cmlidXRpb24pfX10LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofSkpO3ZhciBvPSh0PXQuZmlsdGVyKChmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1yKzE7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS5pbmRleE9mKGUpPj0wKXJldHVybiExO3JldHVybiEwfSkpKS5qb2luKCIgfCAiKTtvIT09dGhpcy5fYXR0cmliSFRNTCYmKHRoaXMuX2F0dHJpYkhUTUw9byx0Lmxlbmd0aD8odGhpcy5faW5uZXJDb250YWluZXIuaW5uZXJIVE1MPW8sdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWF0dHJpYi1lbXB0eSIpKTp0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtYXR0cmliLWVtcHR5IiksdGhpcy5fZWRpdExpbms9bnVsbCl9fSx2aS5wcm90b3R5cGUuX3VwZGF0ZUNvbXBhY3Q9ZnVuY3Rpb24oKXt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8PTY0MD90aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpOnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jb21wYWN0Iil9O3ZhciB5aT1mdW5jdGlvbigpe3QuYmluZEFsbChbIl91cGRhdGVMb2dvIl0sdGhpcyksdC5iaW5kQWxsKFsiX3VwZGF0ZUNvbXBhY3QiXSx0aGlzKX07eWkucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCIpO3ZhciBlPXIuY3JlYXRlKCJhIiwibWFwYm94Z2wtY3RybC1sb2dvIik7cmV0dXJuIGUudGFyZ2V0PSJfYmxhbmsiLGUucmVsPSJub29wZW5lciBub2ZvbGxvdyIsZS5ocmVmPSJodHRwczovL3d3dy5tYXBib3guY29tLyIsZS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoIkxvZ29Db250cm9sLlRpdGxlIikpLGUuc2V0QXR0cmlidXRlKCJyZWwiLCJub29wZW5lciBub2ZvbGxvdyIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChlKSx0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fbWFwLm9uKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVMb2dvKSx0aGlzLl91cGRhdGVMb2dvKCksdGhpcy5fbWFwLm9uKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX3VwZGF0ZUNvbXBhY3QoKSx0aGlzLl9jb250YWluZXJ9LHlpLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlTG9nbyksdGhpcy5fbWFwLm9mZigicmVzaXplIix0aGlzLl91cGRhdGVDb21wYWN0KX0seWkucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tbGVmdCJ9LHlpLnByb3RvdHlwZS5fdXBkYXRlTG9nbz1mdW5jdGlvbih0KXt0JiYibWV0YWRhdGEiIT09dC5zb3VyY2VEYXRhVHlwZXx8KHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PXRoaXMuX2xvZ29SZXF1aXJlZCgpPyJibG9jayI6Im5vbmUiKX0seWkucHJvdG90eXBlLl9sb2dvUmVxdWlyZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PXRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBlIGluIHQpaWYodFtlXS5nZXRTb3VyY2UoKS5tYXBib3hfbG9nbylyZXR1cm4hMDtyZXR1cm4hMX19LHlpLnByb3RvdHlwZS5fdXBkYXRlQ29tcGFjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lci5jaGlsZHJlbjtpZih0Lmxlbmd0aCl7dmFyIGU9dFswXTt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8MjUwP2UuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpOmUuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY29tcGFjdCIpfX07dmFyIHhpPWZ1bmN0aW9uKCl7dGhpcy5fcXVldWU9W10sdGhpcy5faWQ9MCx0aGlzLl9jbGVhcmVkPSExLHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9ITF9O3hpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9Kyt0aGlzLl9pZDtyZXR1cm4gdGhpcy5fcXVldWUucHVzaCh7Y2FsbGJhY2s6dCxpZDplLGNhbmNlbGxlZDohMX0pLGV9LHhpLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2N1cnJlbnRseVJ1bm5pbmcscj0wLG49ZT90aGlzLl9xdWV1ZS5jb25jYXQoZSk6dGhpcy5fcXVldWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2lmKGkuaWQ9PT10KXJldHVybiB2b2lkKGkuY2FuY2VsbGVkPSEwKX19LHhpLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIGU9dGhpcy5fY3VycmVudGx5UnVubmluZz10aGlzLl9xdWV1ZTt0aGlzLl9xdWV1ZT1bXTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2lmKCFpLmNhbmNlbGxlZCYmKGkuY2FsbGJhY2sodCksdGhpcy5fY2xlYXJlZCkpYnJlYWt9dGhpcy5fY2xlYXJlZD0hMSx0aGlzLl9jdXJyZW50bHlSdW5uaW5nPSExfSx4aS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50bHlSdW5uaW5nJiYodGhpcy5fY2xlYXJlZD0hMCksdGhpcy5fcXVldWU9W119O3ZhciBiaT17IkZ1bGxzY3JlZW5Db250cm9sLkVudGVyIjoiRW50ZXIgZnVsbHNjcmVlbiIsIkZ1bGxzY3JlZW5Db250cm9sLkV4aXQiOiJFeGl0IGZ1bGxzY3JlZW4iLCJHZW9sb2NhdGVDb250cm9sLkZpbmRNeUxvY2F0aW9uIjoiRmluZCBteSBsb2NhdGlvbiIsIkdlb2xvY2F0ZUNvbnRyb2wuTG9jYXRpb25Ob3RBdmFpbGFibGUiOiJMb2NhdGlvbiBub3QgYXZhaWxhYmxlIiwiTG9nb0NvbnRyb2wuVGl0bGUiOiJNYXBib3ggbG9nbyIsIk5hdmlnYXRpb25Db250cm9sLlJlc2V0QmVhcmluZyI6IlJlc2V0IGJlYXJpbmcgdG8gbm9ydGgiLCJOYXZpZ2F0aW9uQ29udHJvbC5ab29tSW4iOiJab29tIGluIiwiTmF2aWdhdGlvbkNvbnRyb2wuWm9vbU91dCI6Ilpvb20gb3V0IiwiU2NhbGVDb250cm9sLkZlZXQiOiJmdCIsIlNjYWxlQ29udHJvbC5NZXRlcnMiOiJtIiwiU2NhbGVDb250cm9sLktpbG9tZXRlcnMiOiJrbSIsIlNjYWxlQ29udHJvbC5NaWxlcyI6Im1pIiwiU2NhbGVDb250cm9sLk5hdXRpY2FsTWlsZXMiOiJubSJ9LF9pPXQud2luZG93LkhUTUxJbWFnZUVsZW1lbnQsd2k9dC53aW5kb3cuSFRNTEVsZW1lbnQsVGk9dC53aW5kb3cuSW1hZ2VCaXRtYXAsa2k9e2NlbnRlcjpbMCwwXSx6b29tOjAsYmVhcmluZzowLHBpdGNoOjAsbWluWm9vbTotMixtYXhab29tOjIyLG1pblBpdGNoOjAsbWF4UGl0Y2g6NjAsaW50ZXJhY3RpdmU6ITAsc2Nyb2xsWm9vbTohMCxib3hab29tOiEwLGRyYWdSb3RhdGU6ITAsZHJhZ1BhbjohMCxrZXlib2FyZDohMCxkb3VibGVDbGlja1pvb206ITAsdG91Y2hab29tUm90YXRlOiEwLHRvdWNoUGl0Y2g6ITAsYmVhcmluZ1NuYXA6NyxjbGlja1RvbGVyYW5jZTozLHBpdGNoV2l0aFJvdGF0ZTohMCxoYXNoOiExLGF0dHJpYnV0aW9uQ29udHJvbDohMCxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSx0cmFja1Jlc2l6ZTohMCxyZW5kZXJXb3JsZENvcGllczohMCxyZWZyZXNoRXhwaXJlZFRpbGVzOiEwLG1heFRpbGVDYWNoZVNpemU6bnVsbCxsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6InNhbnMtc2VyaWYiLHRyYW5zZm9ybVJlcXVlc3Q6bnVsbCxhY2Nlc3NUb2tlbjpudWxsLGZhZGVEdXJhdGlvbjozMDAsY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiEwfSxNaT1mdW5jdGlvbihuKXtmdW5jdGlvbiBpKGUpe3ZhciByPXRoaXM7aWYobnVsbCE9KGU9dC5leHRlbmQoe30sa2ksZSkpLm1pblpvb20mJm51bGwhPWUubWF4Wm9vbSYmZS5taW5ab29tPmUubWF4Wm9vbSl0aHJvdyBuZXcgRXJyb3IoIm1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWluWm9vbSIpO2lmKG51bGwhPWUubWluUGl0Y2gmJm51bGwhPWUubWF4UGl0Y2gmJmUubWluUGl0Y2g+ZS5tYXhQaXRjaCl0aHJvdyBuZXcgRXJyb3IoIm1heFBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pblBpdGNoIik7aWYobnVsbCE9ZS5taW5QaXRjaCYmZS5taW5QaXRjaDwwKXRocm93IG5ldyBFcnJvcigibWluUGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCIpO2lmKG51bGwhPWUubWF4UGl0Y2gmJmUubWF4UGl0Y2g+NjApdGhyb3cgbmV3IEVycm9yKCJtYXhQaXRjaCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2MCIpO3ZhciBpPW5ldyB3bihlLm1pblpvb20sZS5tYXhab29tLGUubWluUGl0Y2gsZS5tYXhQaXRjaCxlLnJlbmRlcldvcmxkQ29waWVzKTtpZihuLmNhbGwodGhpcyxpLGUpLHRoaXMuX2ludGVyYWN0aXZlPWUuaW50ZXJhY3RpdmUsdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT1lLm1heFRpbGVDYWNoZVNpemUsdGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD1lLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsdGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyPWUucHJlc2VydmVEcmF3aW5nQnVmZmVyLHRoaXMuX2FudGlhbGlhcz1lLmFudGlhbGlhcyx0aGlzLl90cmFja1Jlc2l6ZT1lLnRyYWNrUmVzaXplLHRoaXMuX2JlYXJpbmdTbmFwPWUuYmVhcmluZ1NuYXAsdGhpcy5fcmVmcmVzaEV4cGlyZWRUaWxlcz1lLnJlZnJlc2hFeHBpcmVkVGlsZXMsdGhpcy5fZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucz1lLmNyb3NzU291cmNlQ29sbGlzaW9ucyx0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcj0xLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1lLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLl9yZW5kZXJUYXNrUXVldWU9bmV3IHhpLHRoaXMuX2NvbnRyb2xzPVtdLHRoaXMuX21hcElkPXQudW5pcXVlSWQoKSx0aGlzLl9sb2NhbGU9dC5leHRlbmQoe30sYmksZS5sb2NhbGUpLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyB0LlJlcXVlc3RNYW5hZ2VyKGUudHJhbnNmb3JtUmVxdWVzdCxlLmFjY2Vzc1Rva2VuKSwic3RyaW5nIj09dHlwZW9mIGUuY29udGFpbmVyKXtpZih0aGlzLl9jb250YWluZXI9dC53aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5jb250YWluZXIpLCF0aGlzLl9jb250YWluZXIpdGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgJyIrZS5jb250YWluZXIrIicgbm90IGZvdW5kLiIpfWVsc2V7aWYoIShlLmNvbnRhaW5lciBpbnN0YW5jZW9mIHdpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHlwZTogJ2NvbnRhaW5lcicgbXVzdCBiZSBhIFN0cmluZyBvciBIVE1MRWxlbWVudC4iKTt0aGlzLl9jb250YWluZXI9ZS5jb250YWluZXJ9aWYoZS5tYXhCb3VuZHMmJnRoaXMuc2V0TWF4Qm91bmRzKGUubWF4Qm91bmRzKSx0LmJpbmRBbGwoWyJfb25XaW5kb3dPbmxpbmUiLCJfb25XaW5kb3dSZXNpemUiLCJfY29udGV4dExvc3QiLCJfY29udGV4dFJlc3RvcmVkIl0sdGhpcyksdGhpcy5fc2V0dXBDb250YWluZXIoKSx0aGlzLl9zZXR1cFBhaW50ZXIoKSx2b2lkIDA9PT10aGlzLnBhaW50ZXIpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTC4iKTt0aGlzLm9uKCJtb3ZlIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCExKX0pKSx0aGlzLm9uKCJtb3ZlZW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCExKX0pKSx0aGlzLm9uKCJ6b29tIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCEwKX0pKSx2b2lkIDAhPT10LndpbmRvdyYmKHQud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm9ubGluZSIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpLHQud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpKSx0aGlzLmhhbmRsZXJzPW5ldyBnaSh0aGlzLGUpLHRoaXMuX2hhc2g9ZS5oYXNoJiZuZXcga24oInN0cmluZyI9PXR5cGVvZiBlLmhhc2gmJmUuaGFzaHx8dm9pZCAwKS5hZGRUbyh0aGlzKSx0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKXx8KHRoaXMuanVtcFRvKHtjZW50ZXI6ZS5jZW50ZXIsem9vbTplLnpvb20sYmVhcmluZzplLmJlYXJpbmcscGl0Y2g6ZS5waXRjaH0pLGUuYm91bmRzJiYodGhpcy5yZXNpemUoKSx0aGlzLmZpdEJvdW5kcyhlLmJvdW5kcyx0LmV4dGVuZCh7fSxlLmZpdEJvdW5kc09wdGlvbnMse2R1cmF0aW9uOjB9KSkpKSx0aGlzLnJlc2l6ZSgpLHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSxlLnN0eWxlJiZ0aGlzLnNldFN0eWxlKGUuc3R5bGUse2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTplLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0pLGUuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmFkZENvbnRyb2wobmV3IHZpKHtjdXN0b21BdHRyaWJ1dGlvbjplLmN1c3RvbUF0dHJpYnV0aW9ufSkpLHRoaXMuYWRkQ29udHJvbChuZXcgeWksZS5sb2dvUG9zaXRpb24pLHRoaXMub24oInN0eWxlLmxvYWQiLChmdW5jdGlvbigpe3IudHJhbnNmb3JtLnVubW9kaWZpZWQmJnIuanVtcFRvKHIuc3R5bGUuc3R5bGVzaGVldCl9KSksdGhpcy5vbigiZGF0YSIsKGZ1bmN0aW9uKGUpe3IuX3VwZGF0ZSgic3R5bGUiPT09ZS5kYXRhVHlwZSksci5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrImRhdGEiLGUpKX0pKSx0aGlzLm9uKCJkYXRhbG9hZGluZyIsKGZ1bmN0aW9uKGUpe3IuZmlyZShuZXcgdC5FdmVudChlLmRhdGFUeXBlKyJkYXRhbG9hZGluZyIsZSkpfSkpfW4mJihpLl9fcHJvdG9fXz1uKSwoaS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuJiZuLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWk7dmFyIGE9e3Nob3dUaWxlQm91bmRhcmllczp7Y29uZmlndXJhYmxlOiEwfSxzaG93UGFkZGluZzp7Y29uZmlndXJhYmxlOiEwfSxzaG93Q29sbGlzaW9uQm94ZXM6e2NvbmZpZ3VyYWJsZTohMH0sc2hvd092ZXJkcmF3SW5zcGVjdG9yOntjb25maWd1cmFibGU6ITB9LHJlcGFpbnQ6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sdmVyc2lvbjp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIGkucHJvdG90eXBlLl9nZXRNYXBJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXBJZH0saS5wcm90b3R5cGUuYWRkQ29udHJvbD1mdW5jdGlvbihlLHIpe2lmKHZvaWQgMD09PXImJmUuZ2V0RGVmYXVsdFBvc2l0aW9uJiYocj1lLmdldERlZmF1bHRQb3NpdGlvbigpKSx2b2lkIDA9PT1yJiYocj0idG9wLXJpZ2h0IiksIWV8fCFlLm9uQWRkKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnQgdG8gbWFwLmFkZENvbnRyb2woKS4gQXJndW1lbnQgbXVzdCBiZSBhIGNvbnRyb2wgd2l0aCBvbkFkZCBhbmQgb25SZW1vdmUgbWV0aG9kcy4iKSkpO3ZhciBuPWUub25BZGQodGhpcyk7dGhpcy5fY29udHJvbHMucHVzaChlKTt2YXIgaT10aGlzLl9jb250cm9sUG9zaXRpb25zW3JdO3JldHVybi0xIT09ci5pbmRleE9mKCJib3R0b20iKT9pLmluc2VydEJlZm9yZShuLGkuZmlyc3RDaGlsZCk6aS5hcHBlbmRDaGlsZChuKSx0aGlzfSxpLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKGUpe2lmKCFlfHwhZS5vblJlbW92ZSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50IHRvIG1hcC5yZW1vdmVDb250cm9sKCkuIEFyZ3VtZW50IG11c3QgYmUgYSBjb250cm9sIHdpdGggb25BZGQgYW5kIG9uUmVtb3ZlIG1ldGhvZHMuIikpKTt2YXIgcj10aGlzLl9jb250cm9scy5pbmRleE9mKGUpO3JldHVybiByPi0xJiZ0aGlzLl9jb250cm9scy5zcGxpY2UociwxKSxlLm9uUmVtb3ZlKHRoaXMpLHRoaXN9LGkucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCksbj1yWzBdLGk9clsxXTt0aGlzLl9yZXNpemVDYW52YXMobixpKSx0aGlzLnRyYW5zZm9ybS5yZXNpemUobixpKSx0aGlzLnBhaW50ZXIucmVzaXplKG4saSk7dmFyIGE9IXRoaXMuX21vdmluZztyZXR1cm4gYSYmKHRoaXMuc3RvcCgpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixlKSkuZmlyZShuZXcgdC5FdmVudCgibW92ZSIsZSkpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJlc2l6ZSIsZSkpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIsZSkpLHRoaXN9LGkucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5nZXRCb3VuZHMoKX0saS5wcm90b3R5cGUuZ2V0TWF4Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmdldE1heEJvdW5kcygpfSxpLnByb3RvdHlwZS5zZXRNYXhCb3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnNldE1heEJvdW5kcyh0LkxuZ0xhdEJvdW5kcy5jb252ZXJ0KGUpKSx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUuc2V0TWluWm9vbT1mdW5jdGlvbih0KXtpZigodD1udWxsPT10Py0yOnQpPj0tMiYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPHQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWluWm9vbSBtdXN0IGJlIGJldHdlZW4gLTIgYW5kIHRoZSBjdXJyZW50IG1heFpvb20sIGluY2x1c2l2ZSIpfSxpLnByb3RvdHlwZS5nZXRNaW5ab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb219LGkucHJvdG90eXBlLnNldE1heFpvb209ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8yMjp0KT49dGhpcy50cmFuc2Zvcm0ubWluWm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPnQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBtaW5ab29tIil9LGkucHJvdG90eXBlLmdldE1heFpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbX0saS5wcm90b3R5cGUuc2V0TWluUGl0Y2g9ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8wOnQpPDApdGhyb3cgbmV3IEVycm9yKCJtaW5QaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwIik7aWYodD49MCYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2gpcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblBpdGNoPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRQaXRjaCgpPHQmJnRoaXMuc2V0UGl0Y2godCksdGhpczt0aHJvdyBuZXcgRXJyb3IoIm1pblBpdGNoIG11c3QgYmUgYmV0d2VlbiAwIGFuZCB0aGUgY3VycmVudCBtYXhQaXRjaCwgaW5jbHVzaXZlIil9LGkucHJvdG90eXBlLmdldE1pblBpdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblBpdGNofSxpLnByb3RvdHlwZS5zZXRNYXhQaXRjaD1mdW5jdGlvbih0KXtpZigodD1udWxsPT10PzYwOnQpPjYwKXRocm93IG5ldyBFcnJvcigibWF4UGl0Y2ggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNjAiKTtpZih0Pj10aGlzLnRyYW5zZm9ybS5taW5QaXRjaClyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2g9dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFBpdGNoKCk+dCYmdGhpcy5zZXRQaXRjaCh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWF4UGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbWluUGl0Y2giKX0saS5wcm90b3R5cGUuZ2V0TWF4UGl0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2h9LGkucHJvdG90eXBlLmdldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzfSxpLnByb3RvdHlwZS5zZXRSZW5kZXJXb3JsZENvcGllcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXM9dCx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludCh0LkxuZ0xhdC5jb252ZXJ0KGUpKX0saS5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHQuUG9pbnQuY29udmVydChlKSl9LGkucHJvdG90eXBlLmlzTW92aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdmluZ3x8dGhpcy5oYW5kbGVycy5pc01vdmluZygpfSxpLnByb3RvdHlwZS5pc1pvb21pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9vbWluZ3x8dGhpcy5oYW5kbGVycy5pc1pvb21pbmcoKX0saS5wcm90b3R5cGUuaXNSb3RhdGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3RhdGluZ3x8dGhpcy5oYW5kbGVycy5pc1JvdGF0aW5nKCl9LGkucHJvdG90eXBlLl9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscil7dmFyIG4saT10aGlzO2lmKCJtb3VzZWVudGVyIj09PXR8fCJtb3VzZW92ZXIiPT09dCl7dmFyIGE9ITE7cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6cixkZWxlZ2F0ZXM6e21vdXNlbW92ZTpmdW5jdGlvbihuKXt2YXIgbz1pLmdldExheWVyKGUpP2kucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4ucG9pbnQse2xheWVyczpbZV19KTpbXTtvLmxlbmd0aD9hfHwoYT0hMCxyLmNhbGwoaSxuZXcgem4odCxpLG4ub3JpZ2luYWxFdmVudCx7ZmVhdHVyZXM6b30pKSk6YT0hMX0sbW91c2VvdXQ6ZnVuY3Rpb24oKXthPSExfX19fWlmKCJtb3VzZWxlYXZlIj09PXR8fCJtb3VzZW91dCI9PT10KXt2YXIgbz0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpyLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKG4peyhpLmdldExheWVyKGUpP2kucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4ucG9pbnQse2xheWVyczpbZV19KTpbXSkubGVuZ3RoP289ITA6byYmKG89ITEsci5jYWxsKGksbmV3IHpuKHQsaSxuLm9yaWdpbmFsRXZlbnQpKSl9LG1vdXNlb3V0OmZ1bmN0aW9uKGUpe28mJihvPSExLHIuY2FsbChpLG5ldyB6bih0LGksZS5vcmlnaW5hbEV2ZW50KSkpfX19fXJldHVybntsYXllcjplLGxpc3RlbmVyOnIsZGVsZWdhdGVzOihuPXt9LG5bdF09ZnVuY3Rpb24odCl7dmFyIG49aS5nZXRMYXllcihlKT9pLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0LnBvaW50LHtsYXllcnM6W2VdfSk6W107bi5sZW5ndGgmJih0LmZlYXR1cmVzPW4sci5jYWxsKGksdCksZGVsZXRlIHQuZmVhdHVyZXMpfSxuKX19LGkucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1yKXJldHVybiBuLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKTt2YXIgaT10aGlzLl9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcih0LGUscik7Zm9yKHZhciBhIGluIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycz10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnN8fHt9LHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF18fFtdLHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XS5wdXNoKGkpLGkuZGVsZWdhdGVzKXRoaXMub24oYSxpLmRlbGVnYXRlc1thXSk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlLHIpe2lmKHZvaWQgMD09PXIpcmV0dXJuIG4ucHJvdG90eXBlLm9uY2UuY2FsbCh0aGlzLHQsZSk7dmFyIGk9dGhpcy5fY3JlYXRlRGVsZWdhdGVkTGlzdGVuZXIodCxlLHIpO2Zvcih2YXIgYSBpbiBpLmRlbGVnYXRlcyl0aGlzLm9uY2UoYSxpLmRlbGVnYXRlc1thXSk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcztyZXR1cm4gdm9pZCAwPT09cj9uLnByb3RvdHlwZS5vZmYuY2FsbCh0aGlzLHQsZSk6KHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyYmdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdJiZmdW5jdGlvbihuKXtmb3IodmFyIGE9blt0XSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYocy5sYXllcj09PWUmJnMubGlzdGVuZXI9PT1yKXtmb3IodmFyIGwgaW4gcy5kZWxlZ2F0ZXMpaS5vZmYobCxzLmRlbGVnYXRlc1tsXSk7cmV0dXJuIGEuc3BsaWNlKG8sMSksaX19fSh0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMpLHRoaXMpfSxpLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyKXtpZighdGhpcy5zdHlsZSlyZXR1cm5bXTt2YXIgbjtpZih2b2lkIDAhPT1yfHx2b2lkIDA9PT1lfHxlIGluc3RhbmNlb2YgdC5Qb2ludHx8QXJyYXkuaXNBcnJheShlKXx8KHI9ZSxlPXZvaWQgMCkscj1yfHx7fSwoZT1lfHxbWzAsMF0sW3RoaXMudHJhbnNmb3JtLndpZHRoLHRoaXMudHJhbnNmb3JtLmhlaWdodF1dKWluc3RhbmNlb2YgdC5Qb2ludHx8Im51bWJlciI9PXR5cGVvZiBlWzBdKW49W3QuUG9pbnQuY29udmVydChlKV07ZWxzZXt2YXIgaT10LlBvaW50LmNvbnZlcnQoZVswXSksYT10LlBvaW50LmNvbnZlcnQoZVsxXSk7bj1baSxuZXcgdC5Qb2ludChhLngsaS55KSxhLG5ldyB0LlBvaW50KGkueCxhLnkpLGldfXJldHVybiB0aGlzLnN0eWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhuLHIsdGhpcy50cmFuc2Zvcm0pfSxpLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUucXVlcnlTb3VyY2VGZWF0dXJlcyh0LGUpfSxpLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbihlLHIpe3JldHVybiExIT09KHI9dC5leHRlbmQoe30se2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTp0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHl9LHIpKS5kaWZmJiZyLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT09PXRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseSYmdGhpcy5zdHlsZSYmZT8odGhpcy5fZGlmZlN0eWxlKGUsciksdGhpcyk6KHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1yLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSx0aGlzLl91cGRhdGVTdHlsZShlLHIpKX0saS5wcm90b3R5cGUuX2dldFVJU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xvY2FsZVt0XTtpZihudWxsPT1lKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBVSSBzdHJpbmcgJyIrdCsiJyIpO3JldHVybiBlfSxpLnByb3RvdHlwZS5fdXBkYXRlU3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudChudWxsKSx0aGlzLnN0eWxlLl9yZW1vdmUoKSksdD8odGhpcy5zdHlsZT1uZXcgcWUodGhpcyxlfHx7fSksdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMse3N0eWxlOnRoaXMuc3R5bGV9KSwic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5zdHlsZS5sb2FkVVJMKHQpOnRoaXMuc3R5bGUubG9hZEpTT04odCksdGhpcyk6KGRlbGV0ZSB0aGlzLnN0eWxlLHRoaXMpfSxpLnByb3RvdHlwZS5fbGF6eUluaXRFbXB0eVN0eWxlPWZ1bmN0aW9uKCl7dGhpcy5zdHlsZXx8KHRoaXMuc3R5bGU9bmV3IHFlKHRoaXMse30pLHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtzdHlsZTp0aGlzLnN0eWxlfSksdGhpcy5zdHlsZS5sb2FkRW1wdHkoKSl9LGkucHJvdG90eXBlLl9kaWZmU3R5bGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIGk9dGhpcy5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU3R5bGVVUkwoZSksYT10aGlzLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGksdC5SZXNvdXJjZVR5cGUuU3R5bGUpO3QuZ2V0SlNPTihhLChmdW5jdGlvbihlLGkpe2U/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpOmkmJm4uX3VwZGF0ZURpZmYoaSxyKX0pKX1lbHNlIm9iamVjdCI9PXR5cGVvZiBlJiZ0aGlzLl91cGRhdGVEaWZmKGUscil9LGkucHJvdG90eXBlLl91cGRhdGVEaWZmPWZ1bmN0aW9uKGUscil7dHJ5e3RoaXMuc3R5bGUuc2V0U3RhdGUoZSkmJnRoaXMuX3VwZGF0ZSghMCl9Y2F0Y2gobil7dC53YXJuT25jZSgiVW5hYmxlIHRvIHBlcmZvcm0gc3R5bGUgZGlmZjogIisobi5tZXNzYWdlfHxuLmVycm9yfHxuKSsiLiAgUmVidWlsZGluZyB0aGUgc3R5bGUgZnJvbSBzY3JhdGNoLiIpLHRoaXMuX3VwZGF0ZVN0eWxlKGUscil9fSxpLnByb3RvdHlwZS5nZXRTdHlsZT1mdW5jdGlvbigpe2lmKHRoaXMuc3R5bGUpcmV0dXJuIHRoaXMuc3R5bGUuc2VyaWFsaXplKCl9LGkucHJvdG90eXBlLmlzU3R5bGVMb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZT90aGlzLnN0eWxlLmxvYWRlZCgpOnQud2Fybk9uY2UoIlRoZXJlIGlzIG5vIHN0eWxlIGFkZGVkIHRvIHRoZSBtYXAuIil9LGkucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKSx0aGlzLnN0eWxlLmFkZFNvdXJjZSh0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmlzU291cmNlTG9hZGVkPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIubG9hZGVkKCk7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCBJRCAnIitlKyInIikpKX0saS5wcm90b3R5cGUuYXJlVGlsZXNMb2FkZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdCl7dmFyIHI9dFtlXS5fdGlsZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl07aWYoImxvYWRlZCIhPT1pLnN0YXRlJiYiZXJyb3JlZCIhPT1pLnN0YXRlKXJldHVybiExfX1yZXR1cm4hMH0saS5wcm90b3R5cGUuYWRkU291cmNlVHlwZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpLHRoaXMuc3R5bGUuYWRkU291cmNlVHlwZSh0LGUscil9LGkucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVTb3VyY2UodCksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldFNvdXJjZSh0KX0saS5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgaT1uLnBpeGVsUmF0aW87dm9pZCAwPT09aSYmKGk9MSk7dmFyIGE9bi5zZGY7dm9pZCAwPT09YSYmKGE9ITEpO3ZhciBvPW4uc3RyZXRjaFgscz1uLnN0cmV0Y2hZLGw9bi5jb250ZW50O2lmKHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpLHIgaW5zdGFuY2VvZiBfaXx8VGkmJnIgaW5zdGFuY2VvZiBUaSl7dmFyIGM9dC5icm93c2VyLmdldEltYWdlRGF0YShyKTt0aGlzLnN0eWxlLmFkZEltYWdlKGUse2RhdGE6bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpjLndpZHRoLGhlaWdodDpjLmhlaWdodH0sYy5kYXRhKSxwaXhlbFJhdGlvOmksc3RyZXRjaFg6byxzdHJldGNoWTpzLGNvbnRlbnQ6bCxzZGY6YSx2ZXJzaW9uOjB9KX1lbHNle2lmKHZvaWQgMD09PXIud2lkdGh8fHZvaWQgMD09PXIuaGVpZ2h0KXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIG1hcC5hZGRJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgYEltYWdlQml0bWFwYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCIpKSk7dmFyIHU9cjt0aGlzLnN0eWxlLmFkZEltYWdlKGUse2RhdGE6bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkscGl4ZWxSYXRpbzppLHN0cmV0Y2hYOm8sc3RyZXRjaFk6cyxjb250ZW50Omwsc2RmOmEsdmVyc2lvbjowLHVzZXJJbWFnZTp1fSksdS5vbkFkZCYmdS5vbkFkZCh0aGlzLGUpfX0saS5wcm90b3R5cGUudXBkYXRlSW1hZ2U9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLnN0eWxlLmdldEltYWdlKGUpO2lmKCFuKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBtYXAgaGFzIG5vIGltYWdlIHdpdGggdGhhdCBpZC4gSWYgeW91IGFyZSBhZGRpbmcgYSBuZXcgaW1hZ2UgdXNlIGBtYXAuYWRkSW1hZ2UoLi4uKWAgaW5zdGVhZC4iKSkpO3ZhciBpPXIgaW5zdGFuY2VvZiBfaXx8VGkmJnIgaW5zdGFuY2VvZiBUaT90LmJyb3dzZXIuZ2V0SW1hZ2VEYXRhKHIpOnIsYT1pLndpZHRoLG89aS5oZWlnaHQscz1pLmRhdGE7cmV0dXJuIHZvaWQgMD09PWF8fHZvaWQgMD09PW8/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byBtYXAudXBkYXRlSW1hZ2UoKS4gVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsIGBJbWFnZUJpdG1hcGAsIG9yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYEltYWdlRGF0YWAiKSkpOmEhPT1uLmRhdGEud2lkdGh8fG8hPT1uLmRhdGEuaGVpZ2h0P3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHVwZGF0ZWQgaW1hZ2UgbXVzdCBiZSB0aGF0IHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGltYWdlIikpKToobi5kYXRhLnJlcGxhY2UocywhKHIgaW5zdGFuY2VvZiBfaXx8VGkmJnIgaW5zdGFuY2VvZiBUaSkpLHZvaWQgdGhpcy5zdHlsZS51cGRhdGVJbWFnZShlLG4pKX0saS5wcm90b3R5cGUuaGFzSW1hZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ISF0aGlzLnN0eWxlLmdldEltYWdlKGUpOih0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgaW1hZ2UgaWQiKSkpLCExKX0saS5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5yZW1vdmVJbWFnZSh0KX0saS5wcm90b3R5cGUubG9hZEltYWdlPWZ1bmN0aW9uKGUscil7dC5nZXRJbWFnZSh0aGlzLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGUsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLHIpfSxpLnByb3RvdHlwZS5saXN0SW1hZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUubGlzdEltYWdlcygpfSxpLnByb3RvdHlwZS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKSx0aGlzLnN0eWxlLmFkZExheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUubW92ZUxheWVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUubW92ZUxheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlTGF5ZXIodCksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5ZXIodCl9LGkucHJvdG90eXBlLnNldExheWVyWm9vbVJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRMYXllclpvb21SYW5nZSh0LGUsciksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuc2V0RmlsdGVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLHRoaXMuc3R5bGUuc2V0RmlsdGVyKHQsZSxyKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRGaWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmlsdGVyKHQpfSxpLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5zdHlsZS5zZXRQYWludFByb3BlcnR5KHQsZSxyLG4pLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmdldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRQYWludFByb3BlcnR5KHQsZSl9LGkucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5zdHlsZS5zZXRMYXlvdXRQcm9wZXJ0eSh0LGUscixuKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmdldExheW91dFByb3BlcnR5KHQsZSl9LGkucHJvdG90eXBlLnNldExpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKSx0aGlzLnN0eWxlLnNldExpZ2h0KHQsZSksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0TGlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMaWdodCgpfSxpLnByb3RvdHlwZS5zZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRGZWF0dXJlU3RhdGUodCxlKSx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlRmVhdHVyZVN0YXRlKHQsZSksdGhpcy5fdXBkYXRlKCl9LGkucHJvdG90eXBlLmdldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRGZWF0dXJlU3RhdGUodCl9LGkucHJvdG90eXBlLmdldENvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LGkucHJvdG90eXBlLmdldENhbnZhc0NvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXNDb250YWluZXJ9LGkucHJvdG90eXBlLmdldENhbnZhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW52YXN9LGkucHJvdG90eXBlLl9jb250YWluZXJEaW1lbnNpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPTA7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQ9dGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRofHw0MDAsZT10aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0fHwzMDApLFt0LGVdfSxpLnByb3RvdHlwZS5fZGV0ZWN0TWlzc2luZ0NTUz1mdW5jdGlvbigpeyJyZ2IoMjUwLCAxMjgsIDExNCkiIT09dC53aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5KS5nZXRQcm9wZXJ0eVZhbHVlKCJiYWNrZ3JvdW5kLWNvbG9yIikmJnQud2Fybk9uY2UoIlRoaXMgcGFnZSBhcHBlYXJzIHRvIGJlIG1pc3NpbmcgQ1NTIGRlY2xhcmF0aW9ucyBmb3IgTWFwYm94IEdMIEpTLCB3aGljaCBtYXkgY2F1c2UgdGhlIG1hcCB0byBkaXNwbGF5IGluY29ycmVjdGx5LiBQbGVhc2UgZW5zdXJlIHlvdXIgcGFnZSBpbmNsdWRlcyBtYXBib3gtZ2wuY3NzLCBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvYXBpLy4iKX0saS5wcm90b3R5cGUuX3NldHVwQ29udGFpbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29udGFpbmVyO3QuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtbWFwIiksKHRoaXMuX21pc3NpbmdDU1NDYW5hcnk9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWNhbmFyeSIsdCkpLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fZGV0ZWN0TWlzc2luZ0NTUygpO3ZhciBlPXRoaXMuX2NhbnZhc0NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY2FudmFzLWNvbnRhaW5lciIsdCk7dGhpcy5faW50ZXJhY3RpdmUmJmUuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtaW50ZXJhY3RpdmUiKSx0aGlzLl9jYW52YXM9ci5jcmVhdGUoImNhbnZhcyIsIm1hcGJveGdsLWNhbnZhcyIsZSksdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHRoaXMuX2NvbnRleHRMb3N0LCExKSx0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHRoaXMuX2NvbnRleHRSZXN0b3JlZCwhMSksdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIk1hcCIpO3ZhciBuPXRoaXMuX2NvbnRhaW5lckRpbWVuc2lvbnMoKTt0aGlzLl9yZXNpemVDYW52YXMoblswXSxuWzFdKTt2YXIgaT10aGlzLl9jb250cm9sQ29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lciIsdCksYT10aGlzLl9jb250cm9sUG9zaXRpb25zPXt9O1sidG9wLWxlZnQiLCJ0b3AtcmlnaHQiLCJib3R0b20tbGVmdCIsImJvdHRvbS1yaWdodCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FbdF09ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwtIit0LGkpfSkpfSxpLnByb3RvdHlwZS5fcmVzaXplQ2FudmFzPWZ1bmN0aW9uKGUscil7dmFyIG49dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW98fDE7dGhpcy5fY2FudmFzLndpZHRoPW4qZSx0aGlzLl9jYW52YXMuaGVpZ2h0PW4qcix0aGlzLl9jYW52YXMuc3R5bGUud2lkdGg9ZSsicHgiLHRoaXMuX2NhbnZhcy5zdHlsZS5oZWlnaHQ9cisicHgifSxpLnByb3RvdHlwZS5fc2V0dXBQYWludGVyPWZ1bmN0aW9uKCl7dmFyIHI9dC5leHRlbmQoe30sZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzLHtmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQscHJlc2VydmVEcmF3aW5nQnVmZmVyOnRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcixhbnRpYWxpYXM6dGhpcy5fYW50aWFsaWFzfHwhMX0pLG49dGhpcy5fY2FudmFzLmdldENvbnRleHQoIndlYmdsIixyKXx8dGhpcy5fY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIscik7bj8odGhpcy5wYWludGVyPW5ldyB5bihuLHRoaXMudHJhbnNmb3JtKSx0LndlYnBTdXBwb3J0ZWQudGVzdFN1cHBvcnQobikpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgV2ViR0wiKSkpfSxpLnByb3RvdHlwZS5fY29udGV4dExvc3Q9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZyYW1lJiYodGhpcy5fZnJhbWUuY2FuY2VsKCksdGhpcy5fZnJhbWU9bnVsbCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ3ZWJnbGNvbnRleHRsb3N0Iix7b3JpZ2luYWxFdmVudDplfSkpfSxpLnByb3RvdHlwZS5fY29udGV4dFJlc3RvcmVkPWZ1bmN0aW9uKGUpe3RoaXMuX3NldHVwUGFpbnRlcigpLHRoaXMucmVzaXplKCksdGhpcy5fdXBkYXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIse29yaWdpbmFsRXZlbnQ6ZX0pKX0saS5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3N0eWxlRGlydHkmJiF0aGlzLl9zb3VyY2VzRGlydHkmJiEhdGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5sb2FkZWQoKX0saS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZT8odGhpcy5fc3R5bGVEaXJ0eT10aGlzLl9zdHlsZURpcnR5fHx0LHRoaXMuX3NvdXJjZXNEaXJ0eT0hMCx0aGlzLnRyaWdnZXJSZXBhaW50KCksdGhpcyk6dGhpc30saS5wcm90b3R5cGUuX3JlcXVlc3RSZW5kZXJGcmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdXBkYXRlKCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmFkZCh0KX0saS5wcm90b3R5cGUuX2NhbmNlbFJlbmRlckZyYW1lPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlclRhc2tRdWV1ZS5yZW1vdmUodCl9LGkucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oZSl7dmFyIHIsbj10aGlzLGk9MCxhPXRoaXMucGFpbnRlci5jb250ZXh0LmV4dFRpbWVyUXVlcnk7aWYodGhpcy5saXN0ZW5zKCJncHUtdGltaW5nLWZyYW1lIikmJihyPWEuY3JlYXRlUXVlcnlFWFQoKSxhLmJlZ2luUXVlcnlFWFQoYS5USU1FX0VMQVBTRURfRVhULHIpLGk9dC5icm93c2VyLm5vdygpKSx0aGlzLnBhaW50ZXIuY29udGV4dC5zZXREaXJ0eSgpLHRoaXMucGFpbnRlci5zZXRCYXNlU3RhdGUoKSx0aGlzLl9yZW5kZXJUYXNrUXVldWUucnVuKGUpLCF0aGlzLl9yZW1vdmVkKXt2YXIgbz0hMTtpZih0aGlzLnN0eWxlJiZ0aGlzLl9zdHlsZURpcnR5KXt0aGlzLl9zdHlsZURpcnR5PSExO3ZhciBzPXRoaXMudHJhbnNmb3JtLnpvb20sbD10LmJyb3dzZXIubm93KCk7dGhpcy5zdHlsZS56b29tSGlzdG9yeS51cGRhdGUocyxsKTt2YXIgYz1uZXcgdC5FdmFsdWF0aW9uUGFyYW1ldGVycyhzLHtub3c6bCxmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9uLHpvb21IaXN0b3J5OnRoaXMuc3R5bGUuem9vbUhpc3RvcnksdHJhbnNpdGlvbjp0aGlzLnN0eWxlLmdldFRyYW5zaXRpb24oKX0pLHU9Yy5jcm9zc0ZhZGluZ0ZhY3RvcigpOzE9PT11JiZ1PT09dGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3J8fChvPSEwLHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yPXUpLHRoaXMuc3R5bGUudXBkYXRlKGMpfWlmKHRoaXMuc3R5bGUmJnRoaXMuX3NvdXJjZXNEaXJ0eSYmKHRoaXMuX3NvdXJjZXNEaXJ0eT0hMSx0aGlzLnN0eWxlLl91cGRhdGVTb3VyY2VzKHRoaXMudHJhbnNmb3JtKSksdGhpcy5fcGxhY2VtZW50RGlydHk9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5fdXBkYXRlUGxhY2VtZW50KHRoaXMucGFpbnRlci50cmFuc2Zvcm0sdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5fZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucyksdGhpcy5wYWludGVyLnJlbmRlcih0aGlzLnN0eWxlLHtzaG93VGlsZUJvdW5kYXJpZXM6dGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsc2hvd092ZXJkcmF3SW5zcGVjdG9yOnRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcixyb3RhdGluZzp0aGlzLmlzUm90YXRpbmcoKSx6b29taW5nOnRoaXMuaXNab29taW5nKCksbW92aW5nOnRoaXMuaXNNb3ZpbmcoKSxmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9uLHNob3dQYWRkaW5nOnRoaXMuc2hvd1BhZGRpbmcsZ3B1VGltaW5nOiEhdGhpcy5saXN0ZW5zKCJncHUtdGltaW5nLWxheWVyIil9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJlbmRlciIpKSx0aGlzLmxvYWRlZCgpJiYhdGhpcy5fbG9hZGVkJiYodGhpcy5fbG9hZGVkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibG9hZCIpKSksdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuaGFzVHJhbnNpdGlvbnMoKXx8bykmJih0aGlzLl9zdHlsZURpcnR5PSEwKSx0aGlzLnN0eWxlJiYhdGhpcy5fcGxhY2VtZW50RGlydHkmJnRoaXMuc3R5bGUuX3JlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKSx0aGlzLmxpc3RlbnMoImdwdS10aW1pbmctZnJhbWUiKSl7dmFyIGg9dC5icm93c2VyLm5vdygpLWk7YS5lbmRRdWVyeUVYVChhLlRJTUVfRUxBUFNFRF9FWFQsciksc2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgZT1hLmdldFF1ZXJ5T2JqZWN0RVhUKHIsYS5RVUVSWV9SRVNVTFRfRVhUKS8xZTY7YS5kZWxldGVRdWVyeUVYVChyKSxuLmZpcmUobmV3IHQuRXZlbnQoImdwdS10aW1pbmctZnJhbWUiLHtjcHVUaW1lOmgsZ3B1VGltZTplfSkpfSksNTApfWlmKHRoaXMubGlzdGVucygiZ3B1LXRpbWluZy1sYXllciIpKXt2YXIgZj10aGlzLnBhaW50ZXIuY29sbGVjdEdwdVRpbWVycygpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGU9bi5wYWludGVyLnF1ZXJ5R3B1VGltZXJzKGYpO24uZmlyZShuZXcgdC5FdmVudCgiZ3B1LXRpbWluZy1sYXllciIse2xheWVyVGltZXM6ZX0pKX0pLDUwKX1yZXR1cm4gdGhpcy5fc291cmNlc0RpcnR5fHx0aGlzLl9zdHlsZURpcnR5fHx0aGlzLl9wbGFjZW1lbnREaXJ0eXx8dGhpcy5fcmVwYWludD90aGlzLnRyaWdnZXJSZXBhaW50KCk6IXRoaXMuaXNNb3ZpbmcoKSYmdGhpcy5sb2FkZWQoKSYmKHRoaXMuX2Z1bGx5TG9hZGVkfHwodGhpcy5fZnVsbHlMb2FkZWQ9ITApLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiaWRsZSIpKSksdGhpc319LGkucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX2hhc2gmJnRoaXMuX2hhc2gucmVtb3ZlKCk7Zm9yKHZhciBlPTAscj10aGlzLl9jb250cm9scztlPHIubGVuZ3RoO2UrPTEpcltlXS5vblJlbW92ZSh0aGlzKTt0aGlzLl9jb250cm9scz1bXSx0aGlzLl9mcmFtZSYmKHRoaXMuX2ZyYW1lLmNhbmNlbCgpLHRoaXMuX2ZyYW1lPW51bGwpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5jbGVhcigpLHRoaXMucGFpbnRlci5kZXN0cm95KCksdGhpcy5oYW5kbGVycy5kZXN0cm95KCksZGVsZXRlIHRoaXMuaGFuZGxlcnMsdGhpcy5zZXRTdHlsZShudWxsKSx2b2lkIDAhPT10LndpbmRvdyYmKHQud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpLHQud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9ubGluZSIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpKTt2YXIgbj10aGlzLnBhaW50ZXIuY29udGV4dC5nbC5nZXRFeHRlbnNpb24oIldFQkdMX2xvc2VfY29udGV4dCIpO24mJm4ubG9zZUNvbnRleHQoKSxBaSh0aGlzLl9jYW52YXNDb250YWluZXIpLEFpKHRoaXMuX2NvbnRyb2xDb250YWluZXIpLEFpKHRoaXMuX21pc3NpbmdDU1NDYW5hcnkpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1tYXAiKSx0aGlzLl9yZW1vdmVkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgicmVtb3ZlIikpfSxpLnByb3RvdHlwZS50cmlnZ2VyUmVwYWludD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5zdHlsZSYmIXRoaXMuX2ZyYW1lJiYodGhpcy5fZnJhbWU9dC5icm93c2VyLmZyYW1lKChmdW5jdGlvbih0KXtlLl9mcmFtZT1udWxsLGUuX3JlbmRlcih0KX0pKSl9LGkucHJvdG90eXBlLl9vbldpbmRvd09ubGluZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZSgpfSxpLnByb3RvdHlwZS5fb25XaW5kb3dSZXNpemU9ZnVuY3Rpb24odCl7dGhpcy5fdHJhY2tSZXNpemUmJnRoaXMucmVzaXplKHtvcmlnaW5hbEV2ZW50OnR9KS5fdXBkYXRlKCl9LGEuc2hvd1RpbGVCb3VuZGFyaWVzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzfSxhLnNob3dUaWxlQm91bmRhcmllcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzIT09dCYmKHRoaXMuX3Nob3dUaWxlQm91bmRhcmllcz10LHRoaXMuX3VwZGF0ZSgpKX0sYS5zaG93UGFkZGluZy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dQYWRkaW5nfSxhLnNob3dQYWRkaW5nLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93UGFkZGluZyE9PXQmJih0aGlzLl9zaG93UGFkZGluZz10LHRoaXMuX3VwZGF0ZSgpKX0sYS5zaG93Q29sbGlzaW9uQm94ZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXN9LGEuc2hvd0NvbGxpc2lvbkJveGVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMhPT10JiYodGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzPXQsdD90aGlzLnN0eWxlLl9nZW5lcmF0ZUNvbGxpc2lvbkJveGVzKCk6dGhpcy5fdXBkYXRlKCkpfSxhLnNob3dPdmVyZHJhd0luc3BlY3Rvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcn0sYS5zaG93T3ZlcmRyYXdJbnNwZWN0b3Iuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvciE9PXQmJih0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I9dCx0aGlzLl91cGRhdGUoKSl9LGEucmVwYWludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3JlcGFpbnR9LGEucmVwYWludC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fcmVwYWludCE9PXQmJih0aGlzLl9yZXBhaW50PXQsdGhpcy50cmlnZ2VyUmVwYWludCgpKX0sYS52ZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3ZlcnRpY2VzfSxhLnZlcnRpY2VzLnNldD1mdW5jdGlvbih0KXt0aGlzLl92ZXJ0aWNlcz10LHRoaXMuX3VwZGF0ZSgpfSxpLnByb3RvdHlwZS5fc2V0Q2FjaGVMaW1pdHM9ZnVuY3Rpb24oZSxyKXt0LnNldENhY2hlTGltaXRzKGUscil9LGEudmVyc2lvbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC52ZXJzaW9ufSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLnByb3RvdHlwZSxhKSxpfShtaSk7ZnVuY3Rpb24gQWkodCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9dmFyIFNpPXtzaG93Q29tcGFzczohMCxzaG93Wm9vbTohMCx2aXN1YWxpemVQaXRjaDohMX0sRWk9ZnVuY3Rpb24oZSl7dmFyIG49dGhpczt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sU2ksZSksdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSx0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSkpLHRoaXMub3B0aW9ucy5zaG93Wm9vbSYmKHQuYmluZEFsbChbIl9zZXRCdXR0b25UaXRsZSIsIl91cGRhdGVab29tQnV0dG9ucyJdLHRoaXMpLHRoaXMuX3pvb21JbkJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24oIm1hcGJveGdsLWN0cmwtem9vbS1pbiIsKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9tYXAuem9vbUluKHt9LHtvcmlnaW5hbEV2ZW50OnR9KX0pKSxyLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsdGhpcy5fem9vbUluQnV0dG9uKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCksdGhpcy5fem9vbU91dEJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24oIm1hcGJveGdsLWN0cmwtem9vbS1vdXQiLChmdW5jdGlvbih0KXtyZXR1cm4gbi5fbWFwLnpvb21PdXQoe30se29yaWdpbmFsRXZlbnQ6dH0pfSkpLHIuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1pY29uIix0aGlzLl96b29tT3V0QnV0dG9uKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCkpLHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcyYmKHQuYmluZEFsbChbIl9yb3RhdGVDb21wYXNzQXJyb3ciXSx0aGlzKSx0aGlzLl9jb21wYXNzPXRoaXMuX2NyZWF0ZUJ1dHRvbigibWFwYm94Z2wtY3RybC1jb21wYXNzIiwoZnVuY3Rpb24odCl7bi5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoP24uX21hcC5yZXNldE5vcnRoUGl0Y2goe30se29yaWdpbmFsRXZlbnQ6dH0pOm4uX21hcC5yZXNldE5vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OnR9KX0pKSx0aGlzLl9jb21wYXNzSWNvbj1yLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsdGhpcy5fY29tcGFzcyksdGhpcy5fY29tcGFzc0ljb24uc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApKX07RWkucHJvdG90eXBlLl91cGRhdGVab29tQnV0dG9ucz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRab29tKCk7dGhpcy5fem9vbUluQnV0dG9uLmRpc2FibGVkPXQ9PT10aGlzLl9tYXAuZ2V0TWF4Wm9vbSgpLHRoaXMuX3pvb21PdXRCdXR0b24uZGlzYWJsZWQ9dD09PXRoaXMuX21hcC5nZXRNaW5ab29tKCl9LEVpLnByb3RvdHlwZS5fcm90YXRlQ29tcGFzc0Fycm93PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoPyJzY2FsZSgiKzEvTWF0aC5wb3coTWF0aC5jb3ModGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaCooTWF0aC5QSS8xODApKSwuNSkrIikgcm90YXRlWCgiK3RoaXMuX21hcC50cmFuc2Zvcm0ucGl0Y2grImRlZykgcm90YXRlWigiK3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUqKDE4MC9NYXRoLlBJKSsiZGVnKSI6InJvdGF0ZSgiK3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUqKDE4MC9NYXRoLlBJKSsiZGVnKSI7dGhpcy5fY29tcGFzc0ljb24uc3R5bGUudHJhbnNmb3JtPXR9LEVpLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5vcHRpb25zLnNob3dab29tJiYodGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fem9vbUluQnV0dG9uLCJab29tSW4iKSx0aGlzLl9zZXRCdXR0b25UaXRsZSh0aGlzLl96b29tT3V0QnV0dG9uLCJab29tT3V0IiksdGhpcy5fbWFwLm9uKCJ6b29tIix0aGlzLl91cGRhdGVab29tQnV0dG9ucyksdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMoKSksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fY29tcGFzcywiUmVzZXRCZWFyaW5nIiksdGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoJiZ0aGlzLl9tYXAub24oInBpdGNoIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX21hcC5vbigicm90YXRlIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdygpLHRoaXMuX2hhbmRsZXI9bmV3IENpKHRoaXMuX21hcCx0aGlzLl9jb21wYXNzLHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCkpLHRoaXMuX2NvbnRhaW5lcn0sRWkucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7ci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJnRoaXMuX21hcC5vZmYoInpvb20iLHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gmJnRoaXMuX21hcC5vZmYoInBpdGNoIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX21hcC5vZmYoInJvdGF0ZSIsdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KSx0aGlzLl9oYW5kbGVyLm9mZigpLGRlbGV0ZSB0aGlzLl9oYW5kbGVyKSxkZWxldGUgdGhpcy5fbWFwfSxFaS5wcm90b3R5cGUuX2NyZWF0ZUJ1dHRvbj1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY3JlYXRlKCJidXR0b24iLHQsdGhpcy5fY29udGFpbmVyKTtyZXR1cm4gbi50eXBlPSJidXR0b24iLG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGUpLG59LEVpLnByb3RvdHlwZS5fc2V0QnV0dG9uVGl0bGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9tYXAuX2dldFVJU3RyaW5nKCJOYXZpZ2F0aW9uQ29udHJvbC4iK2UpO3QudGl0bGU9cix0LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIscil9O3ZhciBDaT1mdW5jdGlvbihlLG4saSl7dm9pZCAwPT09aSYmKGk9ITEpLHRoaXMuX2NsaWNrVG9sZXJhbmNlPTEwLHRoaXMuZWxlbWVudD1uLHRoaXMubW91c2VSb3RhdGU9bmV3IEduKHtjbGlja1RvbGVyYW5jZTplLmRyYWdSb3RhdGUuX21vdXNlUm90YXRlLl9jbGlja1RvbGVyYW5jZX0pLHRoaXMubWFwPWUsaSYmKHRoaXMubW91c2VQaXRjaD1uZXcgWW4oe2NsaWNrVG9sZXJhbmNlOmUuZHJhZ1JvdGF0ZS5fbW91c2VQaXRjaC5fY2xpY2tUb2xlcmFuY2V9KSksdC5iaW5kQWxsKFsibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsInJlc2V0Il0sdGhpcyksci5hZGRFdmVudExpc3RlbmVyKG4sIm1vdXNlZG93biIsdGhpcy5tb3VzZWRvd24pLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJ0b3VjaHN0YXJ0Iix0aGlzLnRvdWNoc3RhcnQse3Bhc3NpdmU6ITF9KSxyLmFkZEV2ZW50TGlzdGVuZXIobiwidG91Y2htb3ZlIix0aGlzLnRvdWNobW92ZSksci5hZGRFdmVudExpc3RlbmVyKG4sInRvdWNoZW5kIix0aGlzLnRvdWNoZW5kKSxyLmFkZEV2ZW50TGlzdGVuZXIobiwidG91Y2hjYW5jZWwiLHRoaXMucmVzZXQpfTtmdW5jdGlvbiBMaShlLHIsbil7aWYoZT1uZXcgdC5MbmdMYXQoZS5sbmcsZS5sYXQpLHIpe3ZhciBpPW5ldyB0LkxuZ0xhdChlLmxuZy0zNjAsZS5sYXQpLGE9bmV3IHQuTG5nTGF0KGUubG5nKzM2MCxlLmxhdCksbz1uLmxvY2F0aW9uUG9pbnQoZSkuZGlzdFNxcihyKTtuLmxvY2F0aW9uUG9pbnQoaSkuZGlzdFNxcihyKTxvP2U9aTpuLmxvY2F0aW9uUG9pbnQoYSkuZGlzdFNxcihyKTxvJiYoZT1hKX1mb3IoO01hdGguYWJzKGUubG5nLW4uY2VudGVyLmxuZyk+MTgwOyl7dmFyIHM9bi5sb2NhdGlvblBvaW50KGUpO2lmKHMueD49MCYmcy55Pj0wJiZzLng8PW4ud2lkdGgmJnMueTw9bi5oZWlnaHQpYnJlYWs7ZS5sbmc+bi5jZW50ZXIubG5nP2UubG5nLT0zNjA6ZS5sbmcrPTM2MH1yZXR1cm4gZX1DaS5wcm90b3R5cGUuZG93bj1mdW5jdGlvbih0LGUpe3RoaXMubW91c2VSb3RhdGUubW91c2Vkb3duKHQsZSksdGhpcy5tb3VzZVBpdGNoJiZ0aGlzLm1vdXNlUGl0Y2gubW91c2Vkb3duKHQsZSksci5kaXNhYmxlRHJhZygpfSxDaS5wcm90b3R5cGUubW92ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubWFwLG49dGhpcy5tb3VzZVJvdGF0ZS5tb3VzZW1vdmVXaW5kb3codCxlKTtpZihuJiZuLmJlYXJpbmdEZWx0YSYmci5zZXRCZWFyaW5nKHIuZ2V0QmVhcmluZygpK24uYmVhcmluZ0RlbHRhKSx0aGlzLm1vdXNlUGl0Y2gpe3ZhciBpPXRoaXMubW91c2VQaXRjaC5tb3VzZW1vdmVXaW5kb3codCxlKTtpJiZpLnBpdGNoRGVsdGEmJnIuc2V0UGl0Y2goci5nZXRQaXRjaCgpK2kucGl0Y2hEZWx0YSl9fSxDaS5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50O3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCJtb3VzZWRvd24iLHRoaXMubW91c2Vkb3duKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodCwidG91Y2hzdGFydCIsdGhpcy50b3VjaHN0YXJ0LHtwYXNzaXZlOiExfSksci5yZW1vdmVFdmVudExpc3RlbmVyKHQsInRvdWNobW92ZSIsdGhpcy50b3VjaG1vdmUpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCJ0b3VjaGVuZCIsdGhpcy50b3VjaGVuZCksci5yZW1vdmVFdmVudExpc3RlbmVyKHQsInRvdWNoY2FuY2VsIix0aGlzLnJlc2V0KSx0aGlzLm9mZlRlbXAoKX0sQ2kucHJvdG90eXBlLm9mZlRlbXA9ZnVuY3Rpb24oKXtyLmVuYWJsZURyYWcoKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodC53aW5kb3csIm1vdXNlbW92ZSIsdGhpcy5tb3VzZW1vdmUpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LndpbmRvdywibW91c2V1cCIsdGhpcy5tb3VzZXVwKX0sQ2kucHJvdG90eXBlLm1vdXNlZG93bj1mdW5jdGlvbihlKXt0aGlzLmRvd24odC5leHRlbmQoe30sZSx7Y3RybEtleTohMCxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiBlLnByZXZlbnREZWZhdWx0KCl9fSksci5tb3VzZVBvcyh0aGlzLmVsZW1lbnQsZSkpLHIuYWRkRXZlbnRMaXN0ZW5lcih0LndpbmRvdywibW91c2Vtb3ZlIix0aGlzLm1vdXNlbW92ZSksci5hZGRFdmVudExpc3RlbmVyKHQud2luZG93LCJtb3VzZXVwIix0aGlzLm1vdXNldXApfSxDaS5wcm90b3R5cGUubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMubW92ZSh0LHIubW91c2VQb3ModGhpcy5lbGVtZW50LHQpKX0sQ2kucHJvdG90eXBlLm1vdXNldXA9ZnVuY3Rpb24odCl7dGhpcy5tb3VzZVJvdGF0ZS5tb3VzZXVwV2luZG93KHQpLHRoaXMubW91c2VQaXRjaCYmdGhpcy5tb3VzZVBpdGNoLm1vdXNldXBXaW5kb3codCksdGhpcy5vZmZUZW1wKCl9LENpLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQpezEhPT10LnRhcmdldFRvdWNoZXMubGVuZ3RoP3RoaXMucmVzZXQoKToodGhpcy5fc3RhcnRQb3M9dGhpcy5fbGFzdFBvcz1yLnRvdWNoUG9zKHRoaXMuZWxlbWVudCx0LnRhcmdldFRvdWNoZXMpWzBdLHRoaXMuZG93bih7dHlwZToibW91c2Vkb3duIixidXR0b246MCxjdHJsS2V5OiEwLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX19LHRoaXMuX3N0YXJ0UG9zKSl9LENpLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCl7MSE9PXQudGFyZ2V0VG91Y2hlcy5sZW5ndGg/dGhpcy5yZXNldCgpOih0aGlzLl9sYXN0UG9zPXIudG91Y2hQb3ModGhpcy5lbGVtZW50LHQudGFyZ2V0VG91Y2hlcylbMF0sdGhpcy5tb3ZlKHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9fSx0aGlzLl9sYXN0UG9zKSl9LENpLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0KXswPT09dC50YXJnZXRUb3VjaGVzLmxlbmd0aCYmdGhpcy5fc3RhcnRQb3MmJnRoaXMuX2xhc3RQb3MmJnRoaXMuX3N0YXJ0UG9zLmRpc3QodGhpcy5fbGFzdFBvcyk8dGhpcy5fY2xpY2tUb2xlcmFuY2UmJnRoaXMuZWxlbWVudC5jbGljaygpLHRoaXMucmVzZXQoKX0sQ2kucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5tb3VzZVJvdGF0ZS5yZXNldCgpLHRoaXMubW91c2VQaXRjaCYmdGhpcy5tb3VzZVBpdGNoLnJlc2V0KCksZGVsZXRlIHRoaXMuX3N0YXJ0UG9zLGRlbGV0ZSB0aGlzLl9sYXN0UG9zLHRoaXMub2ZmVGVtcCgpfTt2YXIgUGk9e2NlbnRlcjoidHJhbnNsYXRlKC01MCUsLTUwJSkiLHRvcDoidHJhbnNsYXRlKC01MCUsMCkiLCJ0b3AtbGVmdCI6InRyYW5zbGF0ZSgwLDApIiwidG9wLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLDApIixib3R0b206InRyYW5zbGF0ZSgtNTAlLC0xMDAlKSIsImJvdHRvbS1sZWZ0IjoidHJhbnNsYXRlKDAsLTEwMCUpIiwiYm90dG9tLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLC0xMDAlKSIsbGVmdDoidHJhbnNsYXRlKDAsLTUwJSkiLHJpZ2h0OiJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkifTtmdW5jdGlvbiBJaSh0LGUscil7dmFyIG49dC5jbGFzc0xpc3Q7Zm9yKHZhciBpIGluIFBpKW4ucmVtb3ZlKCJtYXBib3hnbC0iK3IrIi1hbmNob3ItIitpKTtuLmFkZCgibWFwYm94Z2wtIityKyItYW5jaG9yLSIrZSl9dmFyIHppLE9pPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpKXt2YXIgYT10aGlzO2lmKGUuY2FsbCh0aGlzKSwobiBpbnN0YW5jZW9mIHQud2luZG93LkhUTUxFbGVtZW50fHxpKSYmKG49dC5leHRlbmQoe2VsZW1lbnQ6bn0saSkpLHQuYmluZEFsbChbIl91cGRhdGUiLCJfb25Nb3ZlIiwiX29uVXAiLCJfYWRkRHJhZ0hhbmRsZXIiLCJfb25NYXBDbGljayIsIl9vbktleVByZXNzIl0sdGhpcyksdGhpcy5fYW5jaG9yPW4mJm4uYW5jaG9yfHwiY2VudGVyIix0aGlzLl9jb2xvcj1uJiZuLmNvbG9yfHwiIzNGQjFDRSIsdGhpcy5fZHJhZ2dhYmxlPW4mJm4uZHJhZ2dhYmxlfHwhMSx0aGlzLl9zdGF0ZT0iaW5hY3RpdmUiLHRoaXMuX3JvdGF0aW9uPW4mJm4ucm90YXRpb258fDAsdGhpcy5fcm90YXRpb25BbGlnbm1lbnQ9biYmbi5yb3RhdGlvbkFsaWdubWVudHx8ImF1dG8iLHRoaXMuX3BpdGNoQWxpZ25tZW50PW4mJm4ucGl0Y2hBbGlnbm1lbnQmJiJhdXRvIiE9PW4ucGl0Y2hBbGlnbm1lbnQ/bi5waXRjaEFsaWdubWVudDp0aGlzLl9yb3RhdGlvbkFsaWdubWVudCxuJiZuLmVsZW1lbnQpdGhpcy5fZWxlbWVudD1uLmVsZW1lbnQsdGhpcy5fb2Zmc2V0PXQuUG9pbnQuY29udmVydChuJiZuLm9mZnNldHx8WzAsMF0pO2Vsc2V7dGhpcy5fZGVmYXVsdE1hcmtlcj0hMCx0aGlzLl9lbGVtZW50PXIuY3JlYXRlKCJkaXYiKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIk1hcCBtYXJrZXIiKTt2YXIgbz1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO28uc2V0QXR0cmlidXRlTlMobnVsbCwiZGlzcGxheSIsImJsb2NrIiksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLCI0MXB4Iiksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIsIjI3cHgiKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsInZpZXdCb3giLCIwIDAgMjcgNDEiKTt2YXIgcz1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtzLnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZSIsIm5vbmUiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS13aWR0aCIsIjEiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCJub25lIikscy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIik7dmFyIGw9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7bC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJub256ZXJvIik7dmFyIGM9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7Yy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMy4wLCAyOS4wKSIpLGMuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiMwMDAwMDAiKTtmb3IodmFyIHU9MCxoPVt7cng6IjEwLjUiLHJ5OiI1LjI1MDAyMjczIn0se3J4OiIxMC41IixyeToiNS4yNTAwMjI3MyJ9LHtyeDoiOS41IixyeToiNC43NzI3NTAwNyJ9LHtyeDoiOC41IixyeToiNC4yOTU0OTkzNiJ9LHtyeDoiNy41IixyeToiMy44MTgyMjMwOCJ9LHtyeDoiNi41IixyeToiMy4zNDA5NDY3OSJ9LHtyeDoiNS41IixyeToiMi44NjM2NzA1MSJ9LHtyeDoiNC41IixyeToiMi4zODYzNjg2NCJ9XTt1PGgubGVuZ3RoO3UrPTEpe3ZhciBmPWhbdV0scD1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImVsbGlwc2UiKTtwLnNldEF0dHJpYnV0ZU5TKG51bGwsIm9wYWNpdHkiLCIwLjA0IikscC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeCIsIjEwLjUiKSxwLnNldEF0dHJpYnV0ZU5TKG51bGwsImN5IiwiNS44MDAyOTAwOCIpLHAuc2V0QXR0cmlidXRlTlMobnVsbCwicngiLGYucngpLHAuc2V0QXR0cmlidXRlTlMobnVsbCwicnkiLGYucnkpLGMuYXBwZW5kQ2hpbGQocCl9dmFyIGQ9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7ZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIix0aGlzLl9jb2xvcik7dmFyIGc9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiwiTTI3LDEzLjUgQzI3LDE5LjA3NDY0NCAyMC4yNTAwMDEsMjcuMDAwMDAyIDE0Ljc1LDM0LjUwMDAwMiBDMTQuMDE2NjY1LDM1LjUwMDAwNCAxMi45ODMzMzUsMzUuNTAwMDA0IDEyLjI1LDM0LjUwMDAwMiBDNi43NDk5OTkzLDI3LjAwMDAwMiAwLDE5LjIyMjU2MiAwLDEzLjUgQzAsNi4wNDQxNTU5IDYuMDQ0MTU1OSwwIDEzLjUsMCBDMjAuOTU1ODQ0LDAgMjcsNi4wNDQxNTU5IDI3LDEzLjUgWiIpLGQuYXBwZW5kQ2hpbGQoZyk7dmFyIG09ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7bS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJvcGFjaXR5IiwiMC4yNSIpLG0uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiMwMDAwMDAiKTt2YXIgdj1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt2LnNldEF0dHJpYnV0ZU5TKG51bGwsImQiLCJNMTMuNSwwIEM2LjA0NDE1NTksMCAwLDYuMDQ0MTU1OSAwLDEzLjUgQzAsMTkuMjIyNTYyIDYuNzQ5OTk5MywyNyAxMi4yNSwzNC41IEMxMywzNS41MjI3MjcgMTQuMDE2NjY0LDM1LjUwMDAwNCAxNC43NSwzNC41IEMyMC4yNTAwMDEsMjcgMjcsMTkuMDc0NjQ0IDI3LDEzLjUgQzI3LDYuMDQ0MTU1OSAyMC45NTU4NDQsMCAxMy41LDAgWiBNMTMuNSwxIEMyMC40MTU0MDQsMSAyNiw2LjU4NDU5NiAyNiwxMy41IEMyNiwxNS44OTg2NTcgMjQuNDk1NTg0LDE5LjE4MTQzMSAyMi4yMjA3MDMsMjIuNzM4MjgxIEMxOS45NDU4MjMsMjYuMjk1MTMyIDE2LjcwNTExOSwzMC4xNDIxNjcgMTMuOTQzMzU5LDMzLjkwODIwMyBDMTMuNzQzNDQ1LDM0LjE4MDgxNCAxMy42MTI3MTUsMzQuMzIyNzM4IDEzLjUsMzQuNDQxNDA2IEMxMy4zODcyODUsMzQuMzIyNzM4IDEzLjI1NjU1NSwzNC4xODA4MTQgMTMuMDU2NjQxLDMzLjkwODIwMyBDMTAuMjg0NDgxLDMwLjEyNzk4NSA3LjQxNDg2ODQsMjYuMzE0MTU5IDUuMDE1NjI1LDIyLjc3MzQzOCBDMi42MTYzODE2LDE5LjIzMjcxNSAxLDE1Ljk1MzUzOCAxLDEzLjUgQzEsNi41ODQ1OTYgNi41ODQ1OTYsMSAxMy41LDEgWiIpLG0uYXBwZW5kQ2hpbGQodik7dmFyIHk9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7eS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNi4wLCA3LjApIikseS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiI0ZGRkZGRiIpO3ZhciB4PXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO3guc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlKDguMCwgOC4wKSIpO3ZhciBiPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7Yi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiIzAwMDAwMCIpLGIuc2V0QXR0cmlidXRlTlMobnVsbCwib3BhY2l0eSIsIjAuMjUiKSxiLnNldEF0dHJpYnV0ZU5TKG51bGwsImN4IiwiNS41IiksYi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeSIsIjUuNSIpLGIuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsIjUuNDk5OTk2MiIpO3ZhciBfPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7Xy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiI0ZGRkZGRiIpLF8uc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLCI1LjUiKSxfLnNldEF0dHJpYnV0ZU5TKG51bGwsImN5IiwiNS41IiksXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyIiwiNS40OTk5OTYyIikseC5hcHBlbmRDaGlsZChiKSx4LmFwcGVuZENoaWxkKF8pLGwuYXBwZW5kQ2hpbGQoYyksbC5hcHBlbmRDaGlsZChkKSxsLmFwcGVuZENoaWxkKG0pLGwuYXBwZW5kQ2hpbGQoeSksbC5hcHBlbmRDaGlsZCh4KSxvLmFwcGVuZENoaWxkKGwpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobyksdGhpcy5fb2Zmc2V0PXQuUG9pbnQuY29udmVydChuJiZuLm9mZnNldHx8WzAsLTE0XSl9dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1tYXJrZXIiKSx0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0pKSx0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0pKSx0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoZnVuY3Rpb24oKXt2YXIgdD1hLl9tYXAuZ2V0Q29udGFpbmVyKCk7dC5zY3JvbGxUb3A9MCx0LnNjcm9sbExlZnQ9MH0pKSxJaSh0aGlzLl9lbGVtZW50LHRoaXMuX2FuY2hvciwibWFya2VyIiksdGhpcy5fcG9wdXA9bnVsbH1yZXR1cm4gZSYmKG4uX19wcm90b19fPWUpLChuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dCx0LmdldENhbnZhc0NvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHQub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlKSx0aGlzLnNldERyYWdnYWJsZSh0aGlzLl9kcmFnZ2FibGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uTWFwQ2xpY2spLHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJjbGljayIsdGhpcy5fb25NYXBDbGljayksdGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdXNlZG93biIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpLHRoaXMuX21hcC5vZmYoInRvdWNoc3RhcnQiLHRoaXMuX2FkZERyYWdIYW5kbGVyKSx0aGlzLl9tYXAub2ZmKCJtb3VzZXVwIix0aGlzLl9vblVwKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaGVuZCIsdGhpcy5fb25VcCksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vZmYoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSxkZWxldGUgdGhpcy5fbWFwKSxyLnJlbW92ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAucmVtb3ZlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sbi5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9sbmdMYXQ9dC5MbmdMYXQuY29udmVydChlKSx0aGlzLl9wb3M9bnVsbCx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCksdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxuLnByb3RvdHlwZS5zZXRQb3B1cD1mdW5jdGlvbih0KXtpZih0aGlzLl9wb3B1cCYmKHRoaXMuX3BvcHVwLnJlbW92ZSgpLHRoaXMuX3BvcHVwPW51bGwsdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsdGhpcy5fb25LZXlQcmVzcyksdGhpcy5fb3JpZ2luYWxUYWJJbmRleHx8dGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpLHQpe2lmKCEoIm9mZnNldCJpbiB0Lm9wdGlvbnMpKXt2YXIgZT1NYXRoLnNxcnQoTWF0aC5wb3coMTMuNSwyKS8yKTt0Lm9wdGlvbnMub2Zmc2V0PXRoaXMuX2RlZmF1bHRNYXJrZXI/e3RvcDpbMCwwXSwidG9wLWxlZnQiOlswLDBdLCJ0b3AtcmlnaHQiOlswLDBdLGJvdHRvbTpbMCwtMzguMV0sImJvdHRvbS1sZWZ0IjpbZSwtMSooMjQuNitlKV0sImJvdHRvbS1yaWdodCI6Wy1lLC0xKigyNC42K2UpXSxsZWZ0OlsxMy41LC0yNC42XSxyaWdodDpbLTEzLjUsLTI0LjZdfTp0aGlzLl9vZmZzZXR9dGhpcy5fcG9wdXA9dCx0aGlzLl9sbmdMYXQmJnRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpLHRoaXMuX29yaWdpbmFsVGFiSW5kZXg9dGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fb3JpZ2luYWxUYWJJbmRleHx8dGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHRoaXMuX29uS2V5UHJlc3MpfXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5fb25LZXlQcmVzcz1mdW5jdGlvbih0KXt2YXIgZT10LmNvZGUscj10LmNoYXJDb2RlfHx0LmtleUNvZGU7IlNwYWNlIiE9PWUmJiJFbnRlciIhPT1lJiYzMiE9PXImJjEzIT09cnx8dGhpcy50b2dnbGVQb3B1cCgpfSxuLnByb3RvdHlwZS5fb25NYXBDbGljaz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yaWdpbmFsRXZlbnQudGFyZ2V0LHI9dGhpcy5fZWxlbWVudDt0aGlzLl9wb3B1cCYmKGU9PT1yfHxyLmNvbnRhaW5zKGUpKSYmdGhpcy50b2dnbGVQb3B1cCgpfSxuLnByb3RvdHlwZS5nZXRQb3B1cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sbi5wcm90b3R5cGUudG9nZ2xlUG9wdXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb3B1cDtyZXR1cm4gdD8odC5pc09wZW4oKT90LnJlbW92ZSgpOnQuYWRkVG8odGhpcy5fbWFwKSx0aGlzKTp0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX21hcCl7dGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuX2xuZ0xhdD1MaSh0aGlzLl9sbmdMYXQsdGhpcy5fcG9zLHRoaXMuX21hcC50cmFuc2Zvcm0pKSx0aGlzLl9wb3M9dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KS5fYWRkKHRoaXMuX29mZnNldCk7dmFyIGU9IiI7InZpZXdwb3J0Ij09PXRoaXMuX3JvdGF0aW9uQWxpZ25tZW50fHwiYXV0byI9PT10aGlzLl9yb3RhdGlvbkFsaWdubWVudD9lPSJyb3RhdGVaKCIrdGhpcy5fcm90YXRpb24rImRlZykiOiJtYXAiPT09dGhpcy5fcm90YXRpb25BbGlnbm1lbnQmJihlPSJyb3RhdGVaKCIrKHRoaXMuX3JvdGF0aW9uLXRoaXMuX21hcC5nZXRCZWFyaW5nKCkpKyJkZWcpIik7dmFyIG49IiI7InZpZXdwb3J0Ij09PXRoaXMuX3BpdGNoQWxpZ25tZW50fHwiYXV0byI9PT10aGlzLl9waXRjaEFsaWdubWVudD9uPSJyb3RhdGVYKDBkZWcpIjoibWFwIj09PXRoaXMuX3BpdGNoQWxpZ25tZW50JiYobj0icm90YXRlWCgiK3RoaXMuX21hcC5nZXRQaXRjaCgpKyJkZWcpIiksdCYmIm1vdmVlbmQiIT09dC50eXBlfHwodGhpcy5fcG9zPXRoaXMuX3Bvcy5yb3VuZCgpKSxyLnNldFRyYW5zZm9ybSh0aGlzLl9lbGVtZW50LFBpW3RoaXMuX2FuY2hvcl0rIiB0cmFuc2xhdGUoIit0aGlzLl9wb3MueCsicHgsICIrdGhpcy5fcG9zLnkrInB4KSAiK24rIiAiK2UpfX0sbi5wcm90b3R5cGUuZ2V0T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29mZnNldH0sbi5wcm90b3R5cGUuc2V0T2Zmc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vZmZzZXQ9dC5Qb2ludC5jb252ZXJ0KGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24oZSl7dGhpcy5fcG9zPWUucG9pbnQuc3ViKHRoaXMuX3Bvc2l0aW9uRGVsdGEpLHRoaXMuX2xuZ0xhdD10aGlzLl9tYXAudW5wcm9qZWN0KHRoaXMuX3BvcyksdGhpcy5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KSx0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLCJwZW5kaW5nIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9ImFjdGl2ZSIsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkcmFnc3RhcnQiKSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZHJhZyIpKX0sbi5wcm90b3R5cGUuX29uVXA9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHM9ImF1dG8iLHRoaXMuX3Bvc2l0aW9uRGVsdGE9bnVsbCx0aGlzLl9tYXAub2ZmKCJtb3VzZW1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwLm9mZigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLCJhY3RpdmUiPT09dGhpcy5fc3RhdGUmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiZHJhZ2VuZCIpKSx0aGlzLl9zdGF0ZT0iaW5hY3RpdmUifSxuLnByb3RvdHlwZS5fYWRkRHJhZ0hhbmRsZXI9ZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudC5jb250YWlucyh0Lm9yaWdpbmFsRXZlbnQudGFyZ2V0KSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9wb3NpdGlvbkRlbHRhPXQucG9pbnQuc3ViKHRoaXMuX3BvcykuYWRkKHRoaXMuX29mZnNldCksdGhpcy5fc3RhdGU9InBlbmRpbmciLHRoaXMuX21hcC5vbigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vbigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vbmNlKCJtb3VzZXVwIix0aGlzLl9vblVwKSx0aGlzLl9tYXAub25jZSgidG91Y2hlbmQiLHRoaXMuX29uVXApKX0sbi5wcm90b3R5cGUuc2V0RHJhZ2dhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnZ2FibGU9ISF0LHRoaXMuX21hcCYmKHQ/KHRoaXMuX21hcC5vbigibW91c2Vkb3duIix0aGlzLl9hZGREcmFnSGFuZGxlciksdGhpcy5fbWFwLm9uKCJ0b3VjaHN0YXJ0Iix0aGlzLl9hZGREcmFnSGFuZGxlcikpOih0aGlzLl9tYXAub2ZmKCJtb3VzZWRvd24iLHRoaXMuX2FkZERyYWdIYW5kbGVyKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaHN0YXJ0Iix0aGlzLl9hZGREcmFnSGFuZGxlcikpKSx0aGlzfSxuLnByb3RvdHlwZS5pc0RyYWdnYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGV9LG4ucHJvdG90eXBlLnNldFJvdGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yb3RhdGlvbj10fHwwLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFJvdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW9ufSxuLnByb3RvdHlwZS5zZXRSb3RhdGlvbkFsaWdubWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcm90YXRpb25BbGlnbm1lbnQ9dHx8ImF1dG8iLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFJvdGF0aW9uQWxpZ25tZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50fSxuLnByb3RvdHlwZS5zZXRQaXRjaEFsaWdubWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGl0Y2hBbGlnbm1lbnQ9dCYmImF1dG8iIT09dD90OnRoaXMuX3JvdGF0aW9uQWxpZ25tZW50LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFBpdGNoQWxpZ25tZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoQWxpZ25tZW50fSxufSh0LkV2ZW50ZWQpLERpPXtwb3NpdGlvbk9wdGlvbnM6e2VuYWJsZUhpZ2hBY2N1cmFjeTohMSxtYXhpbXVtQWdlOjAsdGltZW91dDo2ZTN9LGZpdEJvdW5kc09wdGlvbnM6e21heFpvb206MTV9LHRyYWNrVXNlckxvY2F0aW9uOiExLHNob3dBY2N1cmFjeUNpcmNsZTohMCxzaG93VXNlckxvY2F0aW9uOiEwfSxSaT0wLEZpPSExLEJpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4ocil7ZS5jYWxsKHRoaXMpLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxEaSxyKSx0LmJpbmRBbGwoWyJfb25TdWNjZXNzIiwiX29uRXJyb3IiLCJfb25ab29tIiwiX2ZpbmlzaCIsIl9zZXR1cFVJIiwiX3VwZGF0ZUNhbWVyYSIsIl91cGRhdGVNYXJrZXIiXSx0aGlzKX1yZXR1cm4gZSYmKG4uX19wcm90b19fPWUpLChuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSkuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSxuPXRoaXMuX3NldHVwVUksdm9pZCAwIT09emk/bih6aSk6dm9pZCAwIT09dC53aW5kb3cubmF2aWdhdG9yLnBlcm1pc3Npb25zP3Qud2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZToiZ2VvbG9jYXRpb24ifSkudGhlbigoZnVuY3Rpb24odCl7bih6aT0iZGVuaWVkIiE9PXQuc3RhdGUpfSkpOm4oemk9ISF0LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24pLHRoaXMuX2NvbnRhaW5lcn0sbi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDApLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXImJnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKSx0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlJiZ0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlciYmdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIucmVtb3ZlKCksci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKCJ6b29tIix0aGlzLl9vblpvb20pLHRoaXMuX21hcD12b2lkIDAsUmk9MCxGaT0hMX0sbi5wcm90b3R5cGUuX2lzT3V0T2ZNYXBNYXhCb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLmdldE1heEJvdW5kcygpLHI9dC5jb29yZHM7cmV0dXJuIGUmJihyLmxvbmdpdHVkZTxlLmdldFdlc3QoKXx8ci5sb25naXR1ZGU+ZS5nZXRFYXN0KCl8fHIubGF0aXR1ZGU8ZS5nZXRTb3V0aCgpfHxyLmxhdGl0dWRlPmUuZ2V0Tm9ydGgoKSl9LG4ucHJvdG90eXBlLl9zZXRFcnJvclN0YXRlPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9FUlJPUiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKTticmVhaztjYXNlIkFDVElWRV9MT0NLIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKTticmVhaztjYXNlIkJBQ0tHUk9VTkQiOnRoaXMuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkRfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpfX0sbi5wcm90b3R5cGUuX29uU3VjY2Vzcz1mdW5jdGlvbihlKXtpZih0aGlzLl9tYXApe2lmKHRoaXMuX2lzT3V0T2ZNYXBNYXhCb3VuZHMoZSkpcmV0dXJuIHRoaXMuX3NldEVycm9yU3RhdGUoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm91dG9mbWF4Ym91bmRzIixlKSksdGhpcy5fdXBkYXRlTWFya2VyKCksdm9pZCB0aGlzLl9maW5pc2goKTtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pc3dpdGNoKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uPWUsdGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZSJXQUlUSU5HX0FDVElWRSI6Y2FzZSJBQ1RJVkVfTE9DSyI6Y2FzZSJBQ1RJVkVfRVJST1IiOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9MT0NLIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjpjYXNlIkJBQ0tHUk9VTkRfRVJST1IiOnRoaXMuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkQiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpfXRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiYiT0ZGIiE9PXRoaXMuX3dhdGNoU3RhdGUmJnRoaXMuX3VwZGF0ZU1hcmtlcihlKSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJiJBQ1RJVkVfTE9DSyIhPT10aGlzLl93YXRjaFN0YXRlfHx0aGlzLl91cGRhdGVDYW1lcmEoZSksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImdlb2xvY2F0ZSIsZSkpLHRoaXMuX2ZpbmlzaCgpfX0sbi5wcm90b3R5cGUuX3VwZGF0ZUNhbWVyYT1mdW5jdGlvbihlKXt2YXIgcj1uZXcgdC5MbmdMYXQoZS5jb29yZHMubG9uZ2l0dWRlLGUuY29vcmRzLmxhdGl0dWRlKSxuPWUuY29vcmRzLmFjY3VyYWN5LGk9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxhPXQuZXh0ZW5kKHtiZWFyaW5nOml9LHRoaXMub3B0aW9ucy5maXRCb3VuZHNPcHRpb25zKTt0aGlzLl9tYXAuZml0Qm91bmRzKHIudG9Cb3VuZHMobiksYSx7Z2VvbG9jYXRlU291cmNlOiEwfSl9LG4ucHJvdG90eXBlLl91cGRhdGVNYXJrZXI9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHI9bmV3IHQuTG5nTGF0KGUuY29vcmRzLmxvbmdpdHVkZSxlLmNvb3Jkcy5sYXRpdHVkZSk7dGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIuc2V0TG5nTGF0KHIpLmFkZFRvKHRoaXMuX21hcCksdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnNldExuZ0xhdChyKS5hZGRUbyh0aGlzLl9tYXApLHRoaXMuX2FjY3VyYWN5PWUuY29vcmRzLmFjY3VyYWN5LHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlJiZ0aGlzLl91cGRhdGVDaXJjbGVSYWRpdXMoKX1lbHNlIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKSx0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlci5yZW1vdmUoKX0sbi5wcm90b3R5cGUuX3VwZGF0ZUNpcmNsZVJhZGl1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fY29udGFpbmVyLmNsaWVudEhlaWdodC8yLGU9dGhpcy5fbWFwLnVucHJvamVjdChbMCx0XSkscj10aGlzLl9tYXAudW5wcm9qZWN0KFsxLHRdKSxuPWUuZGlzdGFuY2VUbyhyKSxpPU1hdGguY2VpbCgyKnRoaXMuX2FjY3VyYWN5L24pO3RoaXMuX2NpcmNsZUVsZW1lbnQuc3R5bGUud2lkdGg9aSsicHgiLHRoaXMuX2NpcmNsZUVsZW1lbnQuc3R5bGUuaGVpZ2h0PWkrInB4In0sbi5wcm90b3R5cGUuX29uWm9vbT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlJiZ0aGlzLl91cGRhdGVDaXJjbGVSYWRpdXMoKX0sbi5wcm90b3R5cGUuX29uRXJyb3I9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbWFwKXtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24paWYoMT09PWUuY29kZSl7dGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5kaXNhYmxlZD0hMDt2YXIgcj10aGlzLl9tYXAuX2dldFVJU3RyaW5nKCJHZW9sb2NhdGVDb250cm9sLkxvY2F0aW9uTm90QXZhaWxhYmxlIik7dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnRpdGxlPXIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsciksdm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEJiZ0aGlzLl9jbGVhcldhdGNoKCl9ZWxzZXtpZigzPT09ZS5jb2RlJiZGaSlyZXR1cm47dGhpcy5fc2V0RXJyb3JTdGF0ZSgpfSJPRkYiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImVycm9yIixlKSksdGhpcy5fZmluaXNoKCl9fSxuLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fdGltZW91dElkJiZjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkKSx0aGlzLl90aW1lb3V0SWQ9dm9pZCAwfSxuLnByb3RvdHlwZS5fc2V0dXBVST1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2lmKHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uPXIuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZSIsdGhpcy5fY29udGFpbmVyKSxyLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsITE9PT1lKXt0Lndhcm5PbmNlKCJHZW9sb2NhdGlvbiBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUgc28gdGhlIEdlb2xvY2F0ZUNvbnRyb2wgd2lsbCBiZSBkaXNhYmxlZC4iKTt2YXIgaT10aGlzLl9tYXAuX2dldFVJU3RyaW5nKCJHZW9sb2NhdGVDb250cm9sLkxvY2F0aW9uTm90QXZhaWxhYmxlIik7dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmRpc2FibGVkPSEwLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZT1pLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGkpfWVsc2V7dmFyIGE9dGhpcy5fbWFwLl9nZXRVSVN0cmluZygiR2VvbG9jYXRlQ29udHJvbC5GaW5kTXlMb2NhdGlvbiIpO3RoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZT1hLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGEpfXRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIiksdGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIiksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJih0aGlzLl9kb3RFbGVtZW50PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdCIpLHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlcj1uZXcgT2kodGhpcy5fZG90RWxlbWVudCksdGhpcy5fY2lyY2xlRWxlbWVudD1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1hY2N1cmFjeS1jaXJjbGUiKSx0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlcj1uZXcgT2koe2VsZW1lbnQ6dGhpcy5fY2lyY2xlRWxlbWVudCxwaXRjaEFsaWdubWVudDoibWFwIn0pLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIpLHRoaXMuX21hcC5vbigiem9vbSIsdGhpcy5fb25ab29tKSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLnRyaWdnZXIuYmluZCh0aGlzKSksdGhpcy5fc2V0dXA9ITAsdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiZ0aGlzLl9tYXAub24oIm1vdmVzdGFydCIsKGZ1bmN0aW9uKGUpe2UuZ2VvbG9jYXRlU291cmNlfHwiQUNUSVZFX0xPQ0siIT09bi5fd2F0Y2hTdGF0ZXx8ZS5vcmlnaW5hbEV2ZW50JiYicmVzaXplIj09PWUub3JpZ2luYWxFdmVudC50eXBlfHwobi5fd2F0Y2hTdGF0ZT0iQkFDS0dST1VORCIsbi5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSxuLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksbi5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbmVuZCIpKSl9KSl9LG4ucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24oKXtpZighdGhpcy5fc2V0dXApcmV0dXJuIHQud2Fybk9uY2UoIkdlb2xvY2F0ZSBjb250cm9sIHRyaWdnZXJlZCBiZWZvcmUgYWRkZWQgdG8gYSBtYXAiKSwhMTtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pe3N3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIk9GRiI6dGhpcy5fd2F0Y2hTdGF0ZT0iV0FJVElOR19BQ1RJVkUiLHRoaXMuZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25zdGFydCIpKTticmVhaztjYXNlIldBSVRJTkdfQUNUSVZFIjpjYXNlIkFDVElWRV9MT0NLIjpjYXNlIkFDVElWRV9FUlJPUiI6Y2FzZSJCQUNLR1JPVU5EX0VSUk9SIjpSaS0tLEZpPSExLHRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uZW5kIikpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0xPQ0siLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fbGFzdEtub3duUG9zaXRpb24mJnRoaXMuX3VwZGF0ZUNhbWVyYSh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbnN0YXJ0IikpfXN3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIldBSVRJTkdfQUNUSVZFIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkFDVElWRV9MT0NLIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIik7YnJlYWs7Y2FzZSJBQ1RJVkVfRVJST1IiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKTticmVhaztjYXNlIkJBQ0tHUk9VTkRfRVJST1IiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKX1pZigiT0ZGIj09PXRoaXMuX3dhdGNoU3RhdGUmJnZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCl0aGlzLl9jbGVhcldhdGNoKCk7ZWxzZSBpZih2b2lkIDA9PT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpe3ZhciBlO3RoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpLCsrUmk+MT8oZT17bWF4aW11bUFnZTo2ZTUsdGltZW91dDowfSxGaT0hMCk6KGU9dGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyxGaT0hMSksdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEPXQud2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLGUpfX1lbHNlIHQud2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24odGhpcy5fb25TdWNjZXNzLHRoaXMuX29uRXJyb3IsdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyksdGhpcy5fdGltZW91dElkPXNldFRpbWVvdXQodGhpcy5fZmluaXNoLDFlNCk7cmV0dXJuITB9LG4ucHJvdG90eXBlLl9jbGVhcldhdGNoPWZ1bmN0aW9uKCl7dC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dm9pZCAwLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fdXBkYXRlTWFya2VyKG51bGwpfSxufSh0LkV2ZW50ZWQpLE5pPXttYXhXaWR0aDoxMDAsdW5pdDoibWV0cmljIn0samk9ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LE5pLGUpLHQuYmluZEFsbChbIl9vbk1vdmUiLCJzZXRVbml0Il0sdGhpcyl9O2Z1bmN0aW9uIFVpKHQsZSxyKXt2YXIgbj1yJiZyLm1heFdpZHRofHwxMDAsaT10Ll9jb250YWluZXIuY2xpZW50SGVpZ2h0LzIsYT10LnVucHJvamVjdChbMCxpXSksbz10LnVucHJvamVjdChbbixpXSkscz1hLmRpc3RhbmNlVG8obyk7aWYociYmImltcGVyaWFsIj09PXIudW5pdCl7dmFyIGw9My4yODA4KnM7bD41MjgwP1ZpKGUsbixsLzUyODAsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5NaWxlcyIpKTpWaShlLG4sbCx0Ll9nZXRVSVN0cmluZygiU2NhbGVDb250cm9sLkZlZXQiKSl9ZWxzZSByJiYibmF1dGljYWwiPT09ci51bml0P1ZpKGUsbixzLzE4NTIsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5OYXV0aWNhbE1pbGVzIikpOnM+PTFlMz9WaShlLG4scy8xZTMsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5LaWxvbWV0ZXJzIikpOlZpKGUsbixzLHQuX2dldFVJU3RyaW5nKCJTY2FsZUNvbnRyb2wuTWV0ZXJzIikpfWZ1bmN0aW9uIFZpKHQsZSxyLG4pe3ZhciBpLGEsbyxzPShpPXIsKGE9TWF0aC5wb3coMTAsKCIiK01hdGguZmxvb3IoaSkpLmxlbmd0aC0xKSkqKG89KG89aS9hKT49MTA/MTA6bz49NT81Om8+PTM/MzpvPj0yPzI6bz49MT8xOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucG93KDEwLE1hdGguY2VpbCgtTWF0aC5sb2codCkvTWF0aC5MTjEwKSk7cmV0dXJuIE1hdGgucm91bmQodCplKS9lfShvKSkpO3Quc3R5bGUud2lkdGg9ZSoocy9yKSsicHgiLHQuaW5uZXJIVE1MPXMrIiZuYnNwOyIrbn1qaS5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImJvdHRvbS1sZWZ0In0samkucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24oKXtVaSh0aGlzLl9tYXAsdGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucyl9LGppLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtc2NhbGUiLHQuZ2V0Q29udGFpbmVyKCkpLHRoaXMuX21hcC5vbigibW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9vbk1vdmUoKSx0aGlzLl9jb250YWluZXJ9LGppLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9tYXA9dm9pZCAwfSxqaS5wcm90b3R5cGUuc2V0VW5pdD1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMudW5pdD10LFVpKHRoaXMuX21hcCx0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zKX07dmFyIHFpPWZ1bmN0aW9uKGUpe3RoaXMuX2Z1bGxzY3JlZW49ITEsZSYmZS5jb250YWluZXImJihlLmNvbnRhaW5lciBpbnN0YW5jZW9mIHQud2luZG93LkhUTUxFbGVtZW50P3RoaXMuX2NvbnRhaW5lcj1lLmNvbnRhaW5lcjp0Lndhcm5PbmNlKCJGdWxsIHNjcmVlbiBjb250cm9sICdjb250YWluZXInIG11c3QgYmUgYSBET00gZWxlbWVudC4iKSksdC5iaW5kQWxsKFsiX29uQ2xpY2tGdWxsc2NyZWVuIiwiX2NoYW5nZUljb24iXSx0aGlzKSwib25mdWxsc2NyZWVuY2hhbmdlImluIHQud2luZG93LmRvY3VtZW50P3RoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9ImZ1bGxzY3JlZW5jaGFuZ2UiOiJvbm1vemZ1bGxzY3JlZW5jaGFuZ2UiaW4gdC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0ibW96ZnVsbHNjcmVlbmNoYW5nZSI6Im9ud2Via2l0ZnVsbHNjcmVlbmNoYW5nZSJpbiB0LndpbmRvdy5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIjoib25tc2Z1bGxzY3JlZW5jaGFuZ2UiaW4gdC53aW5kb3cuZG9jdW1lbnQmJih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJNU0Z1bGxzY3JlZW5DaGFuZ2UiKX07cWkucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9dGhpcy5fbWFwLmdldENvbnRhaW5lcigpKSx0aGlzLl9jb250cm9sQ29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSx0aGlzLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0KCk/dGhpcy5fc2V0dXBVSSgpOih0aGlzLl9jb250cm9sQ29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQud2Fybk9uY2UoIlRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZnVsbHNjcmVlbiBtb2RlLiIpKSx0aGlzLl9jb250cm9sQ29udGFpbmVyfSxxaS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250cm9sQ29udGFpbmVyKSx0aGlzLl9tYXA9bnVsbCx0LndpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsdGhpcy5fY2hhbmdlSWNvbil9LHFpLnByb3RvdHlwZS5fY2hlY2tGdWxsc2NyZWVuU3VwcG9ydD1mdW5jdGlvbigpe3JldHVybiEhKHQud2luZG93LmRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkfHx0LndpbmRvdy5kb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8dC53aW5kb3cuZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZHx8dC53aW5kb3cuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWQpfSxxaS5wcm90b3R5cGUuX3NldHVwVUk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mdWxsc2NyZWVuQnV0dG9uPXIuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1jdHJsLWZ1bGxzY3JlZW4iLHRoaXMuX2NvbnRyb2xDb250YWluZXIpO3IuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1pY29uIixlKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCksZS50eXBlPSJidXR0b24iLHRoaXMuX3VwZGF0ZVRpdGxlKCksdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fb25DbGlja0Z1bGxzY3JlZW4pLHQud2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSx0aGlzLl9jaGFuZ2VJY29uKX0scWkucHJvdG90eXBlLl91cGRhdGVUaXRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFRpdGxlKCk7dGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHQpLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24udGl0bGU9dH0scWkucHJvdG90eXBlLl9nZXRUaXRsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAuX2dldFVJU3RyaW5nKHRoaXMuX2lzRnVsbHNjcmVlbigpPyJGdWxsc2NyZWVuQ29udHJvbC5FeGl0IjoiRnVsbHNjcmVlbkNvbnRyb2wuRW50ZXIiKX0scWkucHJvdG90eXBlLl9pc0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnVsbHNjcmVlbn0scWkucHJvdG90eXBlLl9jaGFuZ2VJY29uPWZ1bmN0aW9uKCl7KHQud2luZG93LmRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50fHx0LndpbmRvdy5kb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8dC53aW5kb3cuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fHQud2luZG93LmRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQpPT09dGhpcy5fY29udGFpbmVyIT09dGhpcy5fZnVsbHNjcmVlbiYmKHRoaXMuX2Z1bGxzY3JlZW49IXRoaXMuX2Z1bGxzY3JlZW4sdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCJtYXBib3hnbC1jdHJsLXNocmluayIpLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgibWFwYm94Z2wtY3RybC1mdWxsc2NyZWVuIiksdGhpcy5fdXBkYXRlVGl0bGUoKSl9LHFpLnByb3RvdHlwZS5fb25DbGlja0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXt0aGlzLl9pc0Z1bGxzY3JlZW4oKT90LndpbmRvdy5kb2N1bWVudC5leGl0RnVsbHNjcmVlbj90LndpbmRvdy5kb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOnQud2luZG93LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/dC53aW5kb3cuZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpOnQud2luZG93LmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4/dC53aW5kb3cuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpOnQud2luZG93LmRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4mJnQud2luZG93LmRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTp0aGlzLl9jb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4/dGhpcy5fY29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuKCk6dGhpcy5fY29udGFpbmVyLm1velJlcXVlc3RGdWxsU2NyZWVuP3RoaXMuX2NvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpOnRoaXMuX2NvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuP3RoaXMuX2NvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuKCk6dGhpcy5fY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuJiZ0aGlzLl9jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKX07dmFyIEhpPXtjbG9zZUJ1dHRvbjohMCxjbG9zZU9uQ2xpY2s6ITAsY2xhc3NOYW1lOiIiLG1heFdpZHRoOiIyNDBweCJ9LEdpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4ocil7ZS5jYWxsKHRoaXMpLHRoaXMub3B0aW9ucz10LmV4dGVuZChPYmplY3QuY3JlYXRlKEhpKSxyKSx0LmJpbmRBbGwoWyJfdXBkYXRlIiwiX29uQ2xvc2UiLCJyZW1vdmUiLCJfb25Nb3VzZU1vdmUiLCJfb25Nb3VzZVVwIiwiX29uRHJhZyJdLHRoaXMpfXJldHVybiBlJiYobi5fX3Byb3RvX189ZSksKG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLmFkZFRvPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXAmJnRoaXMucmVtb3ZlKCksdGhpcy5fbWFwPWUsdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayYmdGhpcy5fbWFwLm9uKCJjbGljayIsdGhpcy5fb25DbG9zZSksdGhpcy5vcHRpb25zLmNsb3NlT25Nb3ZlJiZ0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX29uQ2xvc2UpLHRoaXMuX21hcC5vbigicmVtb3ZlIix0aGlzLnJlbW92ZSksdGhpcy5fdXBkYXRlKCksdGhpcy5fdHJhY2tQb2ludGVyPyh0aGlzLl9tYXAub24oIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUpLHRoaXMuX21hcC5vbigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKSx0aGlzLl9jb250YWluZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyIiksdGhpcy5fbWFwLl9jYW52YXNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdHJhY2stcG9pbnRlciIpKTp0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJvcGVuIikpLHRoaXN9LG4ucHJvdG90eXBlLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbWFwfSxuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudCYmci5yZW1vdmUodGhpcy5fY29udGVudCksdGhpcy5fY29udGFpbmVyJiYoci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX29uQ2xvc2UpLHRoaXMuX21hcC5vZmYoImNsaWNrIix0aGlzLl9vbkNsb3NlKSx0aGlzLl9tYXAub2ZmKCJyZW1vdmUiLHRoaXMucmVtb3ZlKSx0aGlzLl9tYXAub2ZmKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlKSx0aGlzLl9tYXAub2ZmKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHRoaXMuX21hcC5vZmYoImRyYWciLHRoaXMuX29uRHJhZyksZGVsZXRlIHRoaXMuX21hcCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJjbG9zZSIpKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxuLnByb3RvdHlwZS5zZXRMbmdMYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xuZ0xhdD10LkxuZ0xhdC5jb252ZXJ0KGUpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3RyYWNrUG9pbnRlcj0hMSx0aGlzLl91cGRhdGUoKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSksdGhpcy5fY29udGFpbmVyJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlciIpLHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLXRyYWNrLXBvaW50ZXIiKSksdGhpc30sbi5wcm90b3R5cGUudHJhY2tQb2ludGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYWNrUG9pbnRlcj0hMCx0aGlzLl9wb3M9bnVsbCx0aGlzLl91cGRhdGUoKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vbigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSksdGhpcy5fbWFwLm9uKCJkcmFnIix0aGlzLl9vbkRyYWcpLHRoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXIiKSx0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10cmFjay1wb2ludGVyIikpLHRoaXN9LG4ucHJvdG90eXBlLmdldEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxuLnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNldERPTUNvbnRlbnQodC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpfSxuLnByb3RvdHlwZS5zZXRIVE1MPWZ1bmN0aW9uKGUpe3ZhciByLG49dC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9dC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9keSIpO2ZvcihpLmlubmVySFRNTD1lO3I9aS5maXJzdENoaWxkOyluLmFwcGVuZENoaWxkKHIpO3JldHVybiB0aGlzLnNldERPTUNvbnRlbnQobil9LG4ucHJvdG90eXBlLmdldE1heFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRofSxuLnByb3RvdHlwZS5zZXRNYXhXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm1heFdpZHRoPXQsdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuc2V0RE9NQ29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlQ29udGVudCgpLHRoaXMuX2NvbnRlbnQuYXBwZW5kQ2hpbGQodCksdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuYWRkQ2xhc3NOYW1lPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQodCl9LG4ucHJvdG90eXBlLnJlbW92ZUNsYXNzTmFtZT1mdW5jdGlvbih0KXt0aGlzLl9jb250YWluZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKHQpfSxuLnByb3RvdHlwZS50b2dnbGVDbGFzc05hbWU9ZnVuY3Rpb24odCl7aWYodGhpcy5fY29udGFpbmVyKXJldHVybiB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZSh0KX0sbi5wcm90b3R5cGUuX2NyZWF0ZUNvbnRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9jb250ZW50JiZyLnJlbW92ZSh0aGlzLl9jb250ZW50KSx0aGlzLl9jb250ZW50PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cC1jb250ZW50Iix0aGlzLl9jb250YWluZXIpLHRoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbiYmKHRoaXMuX2Nsb3NlQnV0dG9uPXIuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1wb3B1cC1jbG9zZS1idXR0b24iLHRoaXMuX2NvbnRlbnQpLHRoaXMuX2Nsb3NlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsdGhpcy5fY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiQ2xvc2UgcG9wdXAiKSx0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUw9IiYjMjE1OyIsdGhpcy5fY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xvc2UpKX0sbi5wcm90b3R5cGUuX29uTW91c2VVcD1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUodC5wb2ludCl9LG4ucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUodC5wb2ludCl9LG4ucHJvdG90eXBlLl9vbkRyYWc9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKHQucG9pbnQpfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYodGhpcy5fbWFwJiYodGhpcy5fbG5nTGF0fHx0aGlzLl90cmFja1BvaW50ZXIpJiZ0aGlzLl9jb250ZW50JiYodGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cCIsdGhpcy5fbWFwLmdldENvbnRhaW5lcigpKSx0aGlzLl90aXA9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLXRpcCIsdGhpcy5fY29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fY29udGVudCksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmdGhpcy5vcHRpb25zLmNsYXNzTmFtZS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCh0KX0pKSx0aGlzLl90cmFja1BvaW50ZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyIikpLHRoaXMub3B0aW9ucy5tYXhXaWR0aCYmdGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRoIT09dGhpcy5vcHRpb25zLm1heFdpZHRoJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRoPXRoaXMub3B0aW9ucy5tYXhXaWR0aCksdGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyYmIXRoaXMuX3RyYWNrUG9pbnRlciYmKHRoaXMuX2xuZ0xhdD1MaSh0aGlzLl9sbmdMYXQsdGhpcy5fcG9zLHRoaXMuX21hcC50cmFuc2Zvcm0pKSwhdGhpcy5fdHJhY2tQb2ludGVyfHxlKSl7dmFyIGk9dGhpcy5fcG9zPXRoaXMuX3RyYWNrUG9pbnRlciYmZT9lOnRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCksYT10aGlzLm9wdGlvbnMuYW5jaG9yLG89ZnVuY3Rpb24gZShyKXtpZihyKXtpZigibnVtYmVyIj09dHlwZW9mIHIpe3ZhciBuPU1hdGgucm91bmQoTWF0aC5zcXJ0KC41Kk1hdGgucG93KHIsMikpKTtyZXR1cm57Y2VudGVyOm5ldyB0LlBvaW50KDAsMCksdG9wOm5ldyB0LlBvaW50KDAsciksInRvcC1sZWZ0IjpuZXcgdC5Qb2ludChuLG4pLCJ0b3AtcmlnaHQiOm5ldyB0LlBvaW50KC1uLG4pLGJvdHRvbTpuZXcgdC5Qb2ludCgwLC1yKSwiYm90dG9tLWxlZnQiOm5ldyB0LlBvaW50KG4sLW4pLCJib3R0b20tcmlnaHQiOm5ldyB0LlBvaW50KC1uLC1uKSxsZWZ0Om5ldyB0LlBvaW50KHIsMCkscmlnaHQ6bmV3IHQuUG9pbnQoLXIsMCl9fWlmKHIgaW5zdGFuY2VvZiB0LlBvaW50fHxBcnJheS5pc0FycmF5KHIpKXt2YXIgaT10LlBvaW50LmNvbnZlcnQocik7cmV0dXJue2NlbnRlcjppLHRvcDppLCJ0b3AtbGVmdCI6aSwidG9wLXJpZ2h0IjppLGJvdHRvbTppLCJib3R0b20tbGVmdCI6aSwiYm90dG9tLXJpZ2h0IjppLGxlZnQ6aSxyaWdodDppfX1yZXR1cm57Y2VudGVyOnQuUG9pbnQuY29udmVydChyLmNlbnRlcnx8WzAsMF0pLHRvcDp0LlBvaW50LmNvbnZlcnQoci50b3B8fFswLDBdKSwidG9wLWxlZnQiOnQuUG9pbnQuY29udmVydChyWyJ0b3AtbGVmdCJdfHxbMCwwXSksInRvcC1yaWdodCI6dC5Qb2ludC5jb252ZXJ0KHJbInRvcC1yaWdodCJdfHxbMCwwXSksYm90dG9tOnQuUG9pbnQuY29udmVydChyLmJvdHRvbXx8WzAsMF0pLCJib3R0b20tbGVmdCI6dC5Qb2ludC5jb252ZXJ0KHJbImJvdHRvbS1sZWZ0Il18fFswLDBdKSwiYm90dG9tLXJpZ2h0Ijp0LlBvaW50LmNvbnZlcnQoclsiYm90dG9tLXJpZ2h0Il18fFswLDBdKSxsZWZ0OnQuUG9pbnQuY29udmVydChyLmxlZnR8fFswLDBdKSxyaWdodDp0LlBvaW50LmNvbnZlcnQoci5yaWdodHx8WzAsMF0pfX1yZXR1cm4gZShuZXcgdC5Qb2ludCgwLDApKX0odGhpcy5vcHRpb25zLm9mZnNldCk7aWYoIWEpe3ZhciBzLGw9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoLGM9dGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodDtzPWkueStvLmJvdHRvbS55PGM/WyJ0b3AiXTppLnk+dGhpcy5fbWFwLnRyYW5zZm9ybS5oZWlnaHQtYz9bImJvdHRvbSJdOltdLGkueDxsLzI/cy5wdXNoKCJsZWZ0Iik6aS54PnRoaXMuX21hcC50cmFuc2Zvcm0ud2lkdGgtbC8yJiZzLnB1c2goInJpZ2h0IiksYT0wPT09cy5sZW5ndGg/ImJvdHRvbSI6cy5qb2luKCItIil9dmFyIHU9aS5hZGQob1thXSkucm91bmQoKTtyLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsUGlbYV0rIiB0cmFuc2xhdGUoIit1LngrInB4LCIrdS55KyJweCkiKSxJaSh0aGlzLl9jb250YWluZXIsYSwicG9wdXAiKX19LG4ucHJvdG90eXBlLl9vbkNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmUoKX0sbn0odC5FdmVudGVkKSxZaT17dmVyc2lvbjp0LnZlcnNpb24sc3VwcG9ydGVkOmUsc2V0UlRMVGV4dFBsdWdpbjp0LnNldFJUTFRleHRQbHVnaW4sZ2V0UlRMVGV4dFBsdWdpblN0YXR1czp0LmdldFJUTFRleHRQbHVnaW5TdGF0dXMsTWFwOk1pLE5hdmlnYXRpb25Db250cm9sOkVpLEdlb2xvY2F0ZUNvbnRyb2w6QmksQXR0cmlidXRpb25Db250cm9sOnZpLFNjYWxlQ29udHJvbDpqaSxGdWxsc2NyZWVuQ29udHJvbDpxaSxQb3B1cDpHaSxNYXJrZXI6T2ksU3R5bGU6cWUsTG5nTGF0OnQuTG5nTGF0LExuZ0xhdEJvdW5kczp0LkxuZ0xhdEJvdW5kcyxQb2ludDp0LlBvaW50LE1lcmNhdG9yQ29vcmRpbmF0ZTp0Lk1lcmNhdG9yQ29vcmRpbmF0ZSxFdmVudGVkOnQuRXZlbnRlZCxjb25maWc6dC5jb25maWcscHJld2FybTpmdW5jdGlvbigpe0J0KCkuYWNxdWlyZShPdCl9LGNsZWFyUHJld2FybWVkUmVzb3VyY2VzOmZ1bmN0aW9uKCl7dmFyIHQ9UnQ7dCYmKHQuaXNQcmVsb2FkZWQoKSYmMT09PXQubnVtQWN0aXZlKCk/KHQucmVsZWFzZShPdCksUnQ9bnVsbCk6Y29uc29sZS53YXJuKCJDb3VsZCBub3QgY2xlYXIgV2ViV29ya2VycyBzaW5jZSB0aGVyZSBhcmUgYWN0aXZlIE1hcCBpbnN0YW5jZXMgdGhhdCBzdGlsbCByZWZlcmVuY2UgaXQuIFRoZSBwcmUtd2FybWVkIFdlYldvcmtlciBwb29sIGNhbiBvbmx5IGJlIGNsZWFyZWQgd2hlbiBhbGwgbWFwIGluc3RhbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZCB3aXRoIG1hcC5yZW1vdmUoKSIpKX0sZ2V0IGFjY2Vzc1Rva2VuKCl7cmV0dXJuIHQuY29uZmlnLkFDQ0VTU19UT0tFTn0sc2V0IGFjY2Vzc1Rva2VuKGUpe3QuY29uZmlnLkFDQ0VTU19UT0tFTj1lfSxnZXQgYmFzZUFwaVVybCgpe3JldHVybiB0LmNvbmZpZy5BUElfVVJMfSxzZXQgYmFzZUFwaVVybChlKXt0LmNvbmZpZy5BUElfVVJMPWV9LGdldCB3b3JrZXJDb3VudCgpe3JldHVybiBEdC53b3JrZXJDb3VudH0sc2V0IHdvcmtlckNvdW50KHQpe0R0LndvcmtlckNvdW50PXR9LGdldCBtYXhQYXJhbGxlbEltYWdlUmVxdWVzdHMoKXtyZXR1cm4gdC5jb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTfSxzZXQgbWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzKGUpe3QuY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUz1lfSxjbGVhclN0b3JhZ2U6ZnVuY3Rpb24oZSl7dC5jbGVhclRpbGVDYWNoZShlKX0sd29ya2VyVXJsOiIifTtyZXR1cm4gWWl9KSkscn0pKX0se31dLDQ0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE8PHQrMSxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPWEodCxuKTtyZXR1cm4gcn07dmFyIG49dCgiY29udmV4LWh1bGwiKTtmdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGk9MDtpPHQ7KytpKW5baV09MCxpPT09ZSYmKG5baV0rPS41KSxpPT09ciYmKG5baV0rPS41KTtyZXR1cm4gbn1mdW5jdGlvbiBhKHQsZSl7aWYoMD09PWV8fGU9PT0oMTw8dCsxKS0xKXJldHVybltdO2Zvcih2YXIgcj1bXSxhPVtdLG89MDtvPD10OysrbylpZihlJjE8PG8pe3IucHVzaChpKHQsby0xLG8tMSkpLGEucHVzaChudWxsKTtmb3IodmFyIHM9MDtzPD10Oysrcyl+ZSYxPDxzJiYoci5wdXNoKGkodCxvLTEscy0xKSksYS5wdXNoKFtvLHNdKSl9dmFyIGw9bihyKSxjPVtdO3Q6Zm9yKG89MDtvPGwubGVuZ3RoOysrbyl7dmFyIHU9bFtvXSxoPVtdO2ZvcihzPTA7czx1Lmxlbmd0aDsrK3Mpe2lmKCFhW3Vbc11dKWNvbnRpbnVlIHQ7aC5wdXNoKGFbdVtzXV0uc2xpY2UoKSl9Yy5wdXNoKGgpfXJldHVybiBjfX0seyJjb252ZXgtaHVsbCI6MTM1fV0sNDQ5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxpPXQoImdsLW1hdDQvY3JlYXRlIiksYT10KCJnbC1tYXQ0L2Nsb25lIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJnbC1tYXQ0L2ludmVydCIpLGw9dCgiZ2wtbWF0NC90cmFuc3Bvc2UiKSxjPXtsZW5ndGg6dCgiZ2wtdmVjMy9sZW5ndGgiKSxub3JtYWxpemU6dCgiZ2wtdmVjMy9ub3JtYWxpemUiKSxkb3Q6dCgiZ2wtdmVjMy9kb3QiKSxjcm9zczp0KCJnbC12ZWMzL2Nyb3NzIil9LHU9aSgpLGg9aSgpLGY9WzAsMCwwLDBdLHA9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxkPVswLDAsMF07ZnVuY3Rpb24gZyh0LGUscixuLGkpe3RbMF09ZVswXSpuK3JbMF0qaSx0WzFdPWVbMV0qbityWzFdKmksdFsyXT1lWzJdKm4rclsyXSppfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLG0sdil7aWYoZXx8KGU9WzAsMCwwXSkscnx8KHI9WzAsMCwwXSksaXx8KGk9WzAsMCwwXSksbXx8KG09WzAsMCwwLDFdKSx2fHwodj1bMCwwLDAsMV0pLCFuKHUsdCkpcmV0dXJuITE7aWYoYShoLHUpLGhbM109MCxoWzddPTAsaFsxMV09MCxoWzE1XT0xLE1hdGguYWJzKG8oaCk8MWUtOCkpcmV0dXJuITE7dmFyIHkseCxiLF8sdyxULGssTT11WzNdLEE9dVs3XSxTPXVbMTFdLEU9dVsxMl0sQz11WzEzXSxMPXVbMTRdLFA9dVsxNV07aWYoMCE9PU18fDAhPT1BfHwwIT09Uyl7aWYoZlswXT1NLGZbMV09QSxmWzJdPVMsZlszXT1QLCFzKGgsaCkpcmV0dXJuITE7bChoLGgpLHk9bSxiPWgsXz0oeD1mKVswXSx3PXhbMV0sVD14WzJdLGs9eFszXSx5WzBdPWJbMF0qXytiWzRdKncrYls4XSpUK2JbMTJdKmsseVsxXT1iWzFdKl8rYls1XSp3K2JbOV0qVCtiWzEzXSprLHlbMl09YlsyXSpfK2JbNl0qdytiWzEwXSpUK2JbMTRdKmsseVszXT1iWzNdKl8rYls3XSp3K2JbMTFdKlQrYlsxNV0qa31lbHNlIG1bMF09bVsxXT1tWzJdPTAsbVszXT0xO2lmKGVbMF09RSxlWzFdPUMsZVsyXT1MLGZ1bmN0aW9uKHQsZSl7dFswXVswXT1lWzBdLHRbMF1bMV09ZVsxXSx0WzBdWzJdPWVbMl0sdFsxXVswXT1lWzRdLHRbMV1bMV09ZVs1XSx0WzFdWzJdPWVbNl0sdFsyXVswXT1lWzhdLHRbMl1bMV09ZVs5XSx0WzJdWzJdPWVbMTBdfShwLHUpLHJbMF09Yy5sZW5ndGgocFswXSksYy5ub3JtYWxpemUocFswXSxwWzBdKSxpWzBdPWMuZG90KHBbMF0scFsxXSksZyhwWzFdLHBbMV0scFswXSwxLC1pWzBdKSxyWzFdPWMubGVuZ3RoKHBbMV0pLGMubm9ybWFsaXplKHBbMV0scFsxXSksaVswXS89clsxXSxpWzFdPWMuZG90KHBbMF0scFsyXSksZyhwWzJdLHBbMl0scFswXSwxLC1pWzFdKSxpWzJdPWMuZG90KHBbMV0scFsyXSksZyhwWzJdLHBbMl0scFsxXSwxLC1pWzJdKSxyWzJdPWMubGVuZ3RoKHBbMl0pLGMubm9ybWFsaXplKHBbMl0scFsyXSksaVsxXS89clsyXSxpWzJdLz1yWzJdLGMuY3Jvc3MoZCxwWzFdLHBbMl0pLGMuZG90KHBbMF0sZCk8MClmb3IodmFyIEk9MDtJPDM7SSsrKXJbSV0qPS0xLHBbSV1bMF0qPS0xLHBbSV1bMV0qPS0xLHBbSV1bMl0qPS0xO3JldHVybiB2WzBdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0tcFsxXVsxXS1wWzJdWzJdLDApKSx2WzFdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0rcFsxXVsxXS1wWzJdWzJdLDApKSx2WzJdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0tcFsxXVsxXStwWzJdWzJdLDApKSx2WzNdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0rcFsxXVsxXStwWzJdWzJdLDApKSxwWzJdWzFdPnBbMV1bMl0mJih2WzBdPS12WzBdKSxwWzBdWzJdPnBbMl1bMF0mJih2WzFdPS12WzFdKSxwWzFdWzBdPnBbMF1bMV0mJih2WzJdPS12WzJdKSwhMH19LHsiLi9ub3JtYWxpemUiOjQ1MCwiZ2wtbWF0NC9jbG9uZSI6MjcyLCJnbC1tYXQ0L2NyZWF0ZSI6MjczLCJnbC1tYXQ0L2RldGVybWluYW50IjoyNzQsImdsLW1hdDQvaW52ZXJ0IjoyNzgsImdsLW1hdDQvdHJhbnNwb3NlIjoyODksImdsLXZlYzMvY3Jvc3MiOjMzOSwiZ2wtdmVjMy9kb3QiOjM0NCwiZ2wtdmVjMy9sZW5ndGgiOjM1NCwiZ2wtdmVjMy9ub3JtYWxpemUiOjM2MX1dLDQ1MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMTVdO2lmKDA9PT1yKXJldHVybiExO2Zvcih2YXIgbj0xL3IsaT0wO2k8MTY7aSsrKXRbaV09ZVtpXSpuO3JldHVybiEwfX0se31dLDQ1MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXZlYzMvbGVycCIpLGk9dCgibWF0NC1yZWNvbXBvc2UiKSxhPXQoIm1hdDQtZGVjb21wb3NlIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJxdWF0LXNsZXJwIiksbD1oKCksYz1oKCksdT1oKCk7ZnVuY3Rpb24gaCgpe3JldHVybnt0cmFuc2xhdGU6ZigpLHNjYWxlOmYoMSksc2tldzpmKCkscGVyc3BlY3RpdmU6WzAsMCwwLDFdLHF1YXRlcm5pb246WzAsMCwwLDFdfX1mdW5jdGlvbiBmKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2lmKDA9PT1vKGUpfHwwPT09byhyKSlyZXR1cm4hMTt2YXIgZj1hKGUsbC50cmFuc2xhdGUsbC5zY2FsZSxsLnNrZXcsbC5wZXJzcGVjdGl2ZSxsLnF1YXRlcm5pb24pLHA9YShyLGMudHJhbnNsYXRlLGMuc2NhbGUsYy5za2V3LGMucGVyc3BlY3RpdmUsYy5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFmfHwhcCkmJihuKHUudHJhbnNsYXRlLGwudHJhbnNsYXRlLGMudHJhbnNsYXRlLGgpLG4odS5za2V3LGwuc2tldyxjLnNrZXcsaCksbih1LnNjYWxlLGwuc2NhbGUsYy5zY2FsZSxoKSxuKHUucGVyc3BlY3RpdmUsbC5wZXJzcGVjdGl2ZSxjLnBlcnNwZWN0aXZlLGgpLHModS5xdWF0ZXJuaW9uLGwucXVhdGVybmlvbixjLnF1YXRlcm5pb24saCksaSh0LHUudHJhbnNsYXRlLHUuc2NhbGUsdS5za2V3LHUucGVyc3BlY3RpdmUsdS5xdWF0ZXJuaW9uKSwhMCl9fSx7ImdsLW1hdDQvZGV0ZXJtaW5hbnQiOjI3NCwiZ2wtdmVjMy9sZXJwIjozNTUsIm1hdDQtZGVjb21wb3NlIjo0NDksIm1hdDQtcmVjb21wb3NlIjo0NTIsInF1YXQtc2xlcnAiOjUwMX1dLDQ1MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtpZGVudGl0eTp0KCJnbC1tYXQ0L2lkZW50aXR5IiksdHJhbnNsYXRlOnQoImdsLW1hdDQvdHJhbnNsYXRlIiksbXVsdGlwbHk6dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGNyZWF0ZTp0KCJnbC1tYXQ0L2NyZWF0ZSIpLHNjYWxlOnQoImdsLW1hdDQvc2NhbGUiKSxmcm9tUm90YXRpb25UcmFuc2xhdGlvbjp0KCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIil9LGk9KG4uY3JlYXRlKCksbi5jcmVhdGUoKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtyZXR1cm4gbi5pZGVudGl0eSh0KSxuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHQscyxlKSx0WzNdPW9bMF0sdFs3XT1vWzFdLHRbMTFdPW9bMl0sdFsxNV09b1szXSxuLmlkZW50aXR5KGkpLDAhPT1hWzJdJiYoaVs5XT1hWzJdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVsxXSYmKGlbOV09MCxpWzhdPWFbMV0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzBdJiYoaVs4XT0wLGlbNF09YVswXSxuLm11bHRpcGx5KHQsdCxpKSksbi5zY2FsZSh0LHQsciksdH19LHsiZ2wtbWF0NC9jcmVhdGUiOjI3MywiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiI6Mjc2LCJnbC1tYXQ0L2lkZW50aXR5IjoyNzcsImdsLW1hdDQvbXVsdGlwbHkiOjI4MCwiZ2wtbWF0NC9zY2FsZSI6Mjg3LCJnbC1tYXQ0L3RyYW5zbGF0ZSI6Mjg4fV0sNDUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KSpNYXRoLkxPRzJFfX0se31dLDQ1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgibWF0NC1pbnRlcnBvbGF0ZSIpLGE9dCgiZ2wtbWF0NC9pbnZlcnQiKSxvPXQoImdsLW1hdDQvcm90YXRlWCIpLHM9dCgiZ2wtbWF0NC9yb3RhdGVZIiksbD10KCJnbC1tYXQ0L3JvdGF0ZVoiKSxjPXQoImdsLW1hdDQvbG9va0F0IiksdT10KCJnbC1tYXQ0L3RyYW5zbGF0ZSIpLGg9KHQoImdsLW1hdDQvc2NhbGUiKSx0KCJnbC12ZWMzL25vcm1hbGl6ZSIpKSxmPVswLDAsMF07ZnVuY3Rpb24gcCh0KXt0aGlzLl9jb21wb25lbnRzPXQuc2xpY2UoKSx0aGlzLl90aW1lPVswXSx0aGlzLnByZXZNYXRyaXg9dC5zbGljZSgpLHRoaXMubmV4dE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZEludmVyc2U9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRFeWU9WzAsMCwwXSx0aGlzLmNvbXB1dGVkVXA9WzAsMCwwXSx0aGlzLmNvbXB1dGVkQ2VudGVyPVswLDAsMF0sdGhpcy5jb21wdXRlZFJhZGl1cz1bMF0sdGhpcy5fbGltaXRzPVstMS8wLDEvMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcCgodD10fHx7fSkubWF0cml4fHxbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pfTt2YXIgZD1wLnByb3RvdHlwZTtkLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9bi5sZShlLHQpLG89dGhpcy5jb21wdXRlZE1hdHJpeDtpZighKHI8MCkpe3ZhciBzPXRoaXMuX2NvbXBvbmVudHM7aWYocj09PWUubGVuZ3RoLTEpZm9yKHZhciBsPTE2KnIsYz0wO2M8MTY7KytjKW9bY109c1tsKytdO2Vsc2V7dmFyIHU9ZVtyKzFdLWVbcl0sZj0obD0xNipyLHRoaXMucHJldk1hdHJpeCkscD0hMDtmb3IoYz0wO2M8MTY7KytjKWZbY109c1tsKytdO3ZhciBkPXRoaXMubmV4dE1hdHJpeDtmb3IoYz0wO2M8MTY7KytjKWRbY109c1tsKytdLHA9cCYmZltjXT09PWRbY107aWYodTwxZS02fHxwKWZvcihjPTA7YzwxNjsrK2Mpb1tjXT1mW2NdO2Vsc2UgaShvLGYsZCwodC1lW3JdKS91KX12YXIgZz10aGlzLmNvbXB1dGVkVXA7Z1swXT1vWzFdLGdbMV09b1s1XSxnWzJdPW9bOV0saChnLGcpO3ZhciBtPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2EobSxvKTt2YXIgdj10aGlzLmNvbXB1dGVkRXllLHk9bVsxNV07dlswXT1tWzEyXS95LHZbMV09bVsxM10veSx2WzJdPW1bMTRdL3k7dmFyIHg9dGhpcy5jb21wdXRlZENlbnRlcixiPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2ZvcihjPTA7YzwzOysrYyl4W2NdPXZbY10tb1syKzQqY10qYn19LGQuaWRsZT1mdW5jdGlvbih0KXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7Zm9yKHZhciBlPXRoaXMuX2NvbXBvbmVudHMscj1lLmxlbmd0aC0xNixuPTA7bjwxNjsrK24pZS5wdXNoKGVbcisrXSk7dGhpcy5fdGltZS5wdXNoKHQpfX0sZC5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1uLmd0KHRoaXMuX3RpbWUsdCktMjtlPDB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX2NvbXBvbmVudHMuc3BsaWNlKDAsMTYqZSkpfSxkLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbWVbdGhpcy5fdGltZS5sZW5ndGgtMV19LGQubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fGYsbj1ufHx0aGlzLmNvbXB1dGVkVXAsdGhpcy5zZXRNYXRyaXgodCxjKHRoaXMuY29tcHV0ZWRNYXRyaXgsZSxyLG4pKTtmb3IodmFyIGk9MCxhPTA7YTwzOysrYSlpKz1NYXRoLnBvdyhyW2FdLWVbYV0sMik7aT1NYXRoLmxvZyhNYXRoLnNxcnQoaSkpLHRoaXMuY29tcHV0ZWRSYWRpdXNbMF09aX0sZC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZEludmVyc2U7ZSYmcyhpLGksZSksciYmbyhpLGksciksbiYmbChpLGksbiksdGhpcy5zZXRNYXRyaXgodCxhKHRoaXMuY29tcHV0ZWRNYXRyaXgsaSkpfTt2YXIgZz1bMCwwLDBdO2QucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2dbMF09LShlfHwwKSxnWzFdPS0ocnx8MCksZ1syXT0tKG58fDApLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO3UoaSxpLGcpLHRoaXMuc2V0TWF0cml4KHQsYShpLGkpKX0sZC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7Z1swXT1lfHwwLGdbMV09cnx8MCxnWzJdPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDt1KGksaSxnKSx0aGlzLnNldE1hdHJpeCh0LGkpfSxkLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCEodDx0aGlzLmxhc3RUKCkpKXt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciByPTA7cjwxNjsrK3IpdGhpcy5fY29tcG9uZW50cy5wdXNoKGVbcl0pfX0sZC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcHV0ZWRSYWRpdXNbMF09ZX0sZC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2xpbWl0cztyWzBdPXQsclsxXT1lfSxkLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xpbWl0cztyZXR1cm4gdD8odFswXT1lWzBdLHRbMV09ZVsxXSx0KTplfX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NDU1LCJnbC1tYXQ0L2ludmVydCI6Mjc4LCJnbC1tYXQ0L2xvb2tBdCI6Mjc5LCJnbC1tYXQ0L3JvdGF0ZVgiOjI4NCwiZ2wtbWF0NC9yb3RhdGVZIjoyODUsImdsLW1hdDQvcm90YXRlWiI6Mjg2LCJnbC1tYXQ0L3NjYWxlIjoyODcsImdsLW1hdDQvdHJhbnNsYXRlIjoyODgsImdsLXZlYzMvbm9ybWFsaXplIjozNjEsIm1hdDQtaW50ZXJwb2xhdGUiOjQ1MX1dLDQ1NTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNDNdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNDN9XSw0NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8Myl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlyW2ldPWk7cmV0dXJuIDI9PT1lJiZ0WzBdWzBdPT09dFsxXVswXSYmdFswXVsxXT09PXRbMV1bMV0/WzBdOnJ9dmFyIGE9bmV3IEFycmF5KGUpO2ZvcihpPTA7aTxlOysraSlhW2ldPWk7YS5zb3J0KChmdW5jdGlvbihlLHIpe3ZhciBuPXRbZV1bMF0tdFtyXVswXTtyZXR1cm4gbnx8dFtlXVsxXS10W3JdWzFdfSkpO3ZhciBvPVthWzBdLGFbMV1dLHM9W2FbMF0sYVsxXV07Zm9yKGk9MjtpPGU7KytpKXtmb3IodmFyIGw9YVtpXSxjPXRbbF0sdT1vLmxlbmd0aDt1PjEmJm4odFtvW3UtMl1dLHRbb1t1LTFdXSxjKTw9MDspdS09MSxvLnBvcCgpO2ZvcihvLnB1c2gobCksdT1zLmxlbmd0aDt1PjEmJm4odFtzW3UtMl1dLHRbc1t1LTFdXSxjKT49MDspdS09MSxzLnBvcCgpO3MucHVzaChsKX1yPW5ldyBBcnJheShzLmxlbmd0aCtvLmxlbmd0aC0yKTtmb3IodmFyIGg9MCxmPShpPTAsby5sZW5ndGgpO2k8ZjsrK2kpcltoKytdPW9baV07Zm9yKHZhciBwPXMubGVuZ3RoLTI7cD4wOy0tcClyW2grK109c1twXTtyZXR1cm4gcn07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIilbM119LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MjB9XSw0NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9dCx0PXdpbmRvdyk7dmFyIHI9MCxpPTAsYT0wLG89e3NoaWZ0OiExLGFsdDohMSxjb250cm9sOiExLG1ldGE6ITF9LHM9ITE7ZnVuY3Rpb24gbCh0KXt2YXIgZT0hMTtyZXR1cm4iYWx0S2V5ImluIHQmJihlPWV8fHQuYWx0S2V5IT09by5hbHQsby5hbHQ9ISF0LmFsdEtleSksInNoaWZ0S2V5ImluIHQmJihlPWV8fHQuc2hpZnRLZXkhPT1vLnNoaWZ0LG8uc2hpZnQ9ISF0LnNoaWZ0S2V5KSwiY3RybEtleSJpbiB0JiYoZT1lfHx0LmN0cmxLZXkhPT1vLmNvbnRyb2wsby5jb250cm9sPSEhdC5jdHJsS2V5KSwibWV0YUtleSJpbiB0JiYoZT1lfHx0Lm1ldGFLZXkhPT1vLm1ldGEsby5tZXRhPSEhdC5tZXRhS2V5KSxlfWZ1bmN0aW9uIGModCxzKXt2YXIgYz1uLngocyksdT1uLnkocyk7ImJ1dHRvbnMiaW4gcyYmKHQ9MHxzLmJ1dHRvbnMpLCh0IT09cnx8YyE9PWl8fHUhPT1hfHxsKHMpKSYmKHI9MHx0LGk9Y3x8MCxhPXV8fDAsZSYmZShyLGksYSxvKSl9ZnVuY3Rpb24gdSh0KXtjKDAsdCl9ZnVuY3Rpb24gaCgpeyhyfHxpfHxhfHxvLnNoaWZ0fHxvLmFsdHx8by5tZXRhfHxvLmNvbnRyb2wpJiYoaT1hPTAscj0wLG8uc2hpZnQ9by5hbHQ9by5jb250cm9sPW8ubWV0YT0hMSxlJiZlKDAsMCwwLG8pKX1mdW5jdGlvbiBmKHQpe2wodCkmJmUmJmUocixpLGEsbyl9ZnVuY3Rpb24gcCh0KXswPT09bi5idXR0b25zKHQpP2MoMCx0KTpjKHIsdCl9ZnVuY3Rpb24gZCh0KXtjKHJ8bi5idXR0b25zKHQpLHQpfWZ1bmN0aW9uIGcodCl7YyhyJn5uLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gbSgpe3N8fChzPSEwLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixwKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsZCksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixnKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsaCksdC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsZiksdC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixmKSx0IT09d2luZG93JiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsZiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsZikpKX1tKCk7dmFyIHY9e2VsZW1lbnQ6dH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHYse2VuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSl7ZT9tKCk6ZnVuY3Rpb24oKXtpZighcylyZXR1cm47cz0hMSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGQpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGgpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGYpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZiksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsZiksdCE9PXdpbmRvdyYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixoKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixmKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGYpKX0oKX0sZW51bWVyYWJsZTohMH0sYnV0dG9uczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGVudW1lcmFibGU6ITB9LHg6e2dldDpmdW5jdGlvbigpe3JldHVybiBpfSxlbnVtZXJhYmxlOiEwfSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZW51bWVyYWJsZTohMH0sbW9kczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LGVudW1lcmFibGU6ITB9fSksdn07dmFyIG49dCgibW91c2UtZXZlbnQiKX0seyJtb3VzZS1ldmVudCI6NDU5fV0sNDU4OltmdW5jdGlvbih0LGUscil7dmFyIG49e2xlZnQ6MCx0b3A6MH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPWV8fHQuY3VycmVudFRhcmdldHx8dC5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgaT10LmNsaWVudFh8fDAsYT10LmNsaWVudFl8fDAsbz0ocz1lLHM9PT13aW5kb3d8fHM9PT1kb2N1bWVudHx8cz09PWRvY3VtZW50LmJvZHk/bjpzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTt2YXIgcztyZXR1cm4gclswXT1pLW8ubGVmdCxyWzFdPWEtby50b3Ascn19LHt9XSw0NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudHx8d2luZG93fXIuYnV0dG9ucz1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJidXR0b25zImluIHQpcmV0dXJuIHQuYnV0dG9ucztpZigid2hpY2giaW4gdCl7aWYoMj09PShlPXQud2hpY2gpKXJldHVybiA0O2lmKDM9PT1lKXJldHVybiAyO2lmKGU+MClyZXR1cm4gMTw8ZS0xfWVsc2UgaWYoImJ1dHRvbiJpbiB0KXt2YXIgZTtpZigxPT09KGU9dC5idXR0b24pKXJldHVybiA0O2lmKDI9PT1lKXJldHVybiAyO2lmKGU+PTApcmV0dXJuIDE8PGV9fXJldHVybiAwfSxyLmVsZW1lbnQ9bixyLng9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigib2Zmc2V0WCJpbiB0KXJldHVybiB0Lm9mZnNldFg7dmFyIGU9bih0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdC5jbGllbnRYLWUubGVmdH1yZXR1cm4gMH0sci55PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFkiaW4gdClyZXR1cm4gdC5vZmZzZXRZO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WS1lLnRvcH1yZXR1cm4gMH19LHt9XSw0NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidG8tcHgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYocj0hIWUsZT10LHQ9d2luZG93KTt2YXIgaT1uKCJleCIsdCksYT1mdW5jdGlvbih0KXtyJiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dC5kZWx0YVh8fDAsYT10LmRlbHRhWXx8MCxvPXQuZGVsdGFafHwwLHM9MTtzd2l0Y2godC5kZWx0YU1vZGUpe2Nhc2UgMTpzPWk7YnJlYWs7Y2FzZSAyOnM9d2luZG93LmlubmVySGVpZ2h0fWlmKGEqPXMsbyo9cywobio9cyl8fGF8fG8pcmV0dXJuIGUobixhLG8sdCl9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixhKSxhfX0seyJ0by1weCI6NTUwfV0sNDYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuImEiK3R9ZnVuY3Rpb24gYSh0KXtyZXR1cm4iZCIrdH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuImMiK3QrIl8iK2V9ZnVuY3Rpb24gcyh0KXtyZXR1cm4icyIrdH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuInQiK3QrIl8iK2V9ZnVuY3Rpb24gYyh0KXtyZXR1cm4ibyIrdH1mdW5jdGlvbiB1KHQpe3JldHVybiJ4Iit0fWZ1bmN0aW9uIGgodCl7cmV0dXJuInAiK3R9ZnVuY3Rpb24gZih0LGUpe3JldHVybiJkIit0KyJfIitlfWZ1bmN0aW9uIHAodCl7cmV0dXJuImkiK3R9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiJ1Iit0KyJfIitlfWZ1bmN0aW9uIGcodCl7cmV0dXJuImIiK3R9ZnVuY3Rpb24gbSh0KXtyZXR1cm4ieSIrdH1mdW5jdGlvbiB2KHQpe3JldHVybiJlIit0fWZ1bmN0aW9uIHkodCl7cmV0dXJuInYiK3R9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWV4dHJhY3QtY29udG91cjogIit0KX0ib2JqZWN0IiE9dHlwZW9mIHQmJmUoIk11c3Qgc3BlY2lmeSBhcmd1bWVudHMiKTt2YXIgcj10Lm9yZGVyO0FycmF5LmlzQXJyYXkocil8fGUoIk11c3Qgc3BlY2lmeSBvcmRlciIpO3ZhciBiPXQuYXJyYXlBcmd1bWVudHN8fDE7YjwxJiZlKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGFycmF5IGFyZ3VtZW50Iik7dmFyIF89dC5zY2FsYXJBcmd1bWVudHN8fDA7XzwwJiZlKCJTY2FsYXIgYXJnIGNvdW50IG11c3QgYmUgPiAwIik7ImZ1bmN0aW9uIiE9dHlwZW9mIHQudmVydGV4JiZlKCJNdXN0IHNwZWNpZnkgdmVydGV4IGNyZWF0aW9uIGZ1bmN0aW9uIik7ImZ1bmN0aW9uIiE9dHlwZW9mIHQuY2VsbCYmZSgiTXVzdCBzcGVjaWZ5IGNlbGwgY3JlYXRpb24gZnVuY3Rpb24iKTsiZnVuY3Rpb24iIT10eXBlb2YgdC5waGFzZSYmZSgiTXVzdCBzcGVjaWZ5IHBoYXNlIGZ1bmN0aW9uIik7Zm9yKHZhciB3PXQuZ2V0dGVyc3x8W10sVD1uZXcgQXJyYXkoYiksaz0wO2s8YjsrK2spdy5pbmRleE9mKGspPj0wP1Rba109ITA6VFtrXT0hMTtyZXR1cm4gZnVuY3Rpb24odCxlLHIsYixfLHcpe3ZhciBUPXcubGVuZ3RoLGs9Xy5sZW5ndGg7aWYoazwyKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1leHRyYWN0LWNvbnRvdXI6IERpbWVuc2lvbiBtdXN0IGJlIGF0IGxlYXN0IDIiKTtmb3IodmFyIE09ImV4dHJhY3RDb250b3VyIitfLmpvaW4oIl8iKSxBPVtdLFM9W10sRT1bXSxDPTA7QzxUOysrQylFLnB1c2goaShDKSk7Zm9yKEM9MDtDPGI7KytDKUUucHVzaCh1KEMpKTtmb3IoQz0wO0M8azsrK0MpUy5wdXNoKHMoQykrIj0iK2koMCkrIi5zaGFwZVsiK0MrIl18MCIpO2ZvcihDPTA7QzxUOysrQyl7Uy5wdXNoKGEoQykrIj0iK2koQykrIi5kYXRhIixjKEMpKyI9IitpKEMpKyIub2Zmc2V0fDAiKTtmb3IodmFyIEw9MDtMPGs7KytMKVMucHVzaChsKEMsTCkrIj0iK2koQykrIi5zdHJpZGVbIitMKyJdfDAiKX1mb3IoQz0wO0M8VDsrK0Mpe1MucHVzaChoKEMpKyI9IitjKEMpKSxTLnB1c2gobyhDLDApKTtmb3IoTD0xO0w8MTw8azsrK0wpe2Zvcih2YXIgUD1bXSxJPTA7STxrOysrSSlMJjE8PEkmJlAucHVzaCgiLSIrbChDLEkpKTtTLnB1c2goZihDLEwpKyI9KCIrUC5qb2luKCIiKSsiKXwwIiksUy5wdXNoKG8oQyxMKSsiPTAiKX19Zm9yKEM9MDtDPFQ7KytDKWZvcihMPTA7TDxrOysrTCl7dmFyIHo9W2woQyxfW0xdKV07TD4wJiZ6LnB1c2gobChDLF9bTC0xXSkrIioiK3MoX1tMLTFdKSksUy5wdXNoKGQoQyxfW0xdKSsiPSgiK3ouam9pbigiLSIpKyIpfDAiKX1mb3IoQz0wO0M8azsrK0MpUy5wdXNoKHAoQykrIj0wIik7Uy5wdXNoKCJOPTAiKTt2YXIgTz1bIjIiXTtmb3IoQz1rLTI7Qz49MDstLUMpTy5wdXNoKHMoX1tDXSkpO1MucHVzaCgiUT0oIitPLmpvaW4oIioiKSsiKXwwIiwiUD1tYWxsb2NVaW50MzIoUSkiLCJWPW1hbGxvY1VpbnQzMihRKSIsIlg9MCIpLFMucHVzaChnKDApKyI9MCIpO2ZvcihMPTE7TDwxPDxrOysrTCl7dmFyIEQ9W10sUj1bXTtmb3IoST0wO0k8azsrK0kpTCYxPDxJJiYoMD09PVIubGVuZ3RoP0QucHVzaCgiMSIpOkQudW5zaGlmdChSLmpvaW4oIioiKSkpLFIucHVzaChzKF9bSV0pKTt2YXIgRj0iIjtEWzBdLmluZGV4T2YocyhfW2stMl0pKTwwJiYoRj0iLSIpO3ZhciBCPXgoayxMLF8pO1MucHVzaCh2KEIpKyI9KC0iK0Quam9pbigiLSIpKyIpfDAiLG0oQikrIj0oIitGK0Quam9pbigiLSIpKyIpfDAiLGcoQikrIj0wIil9ZnVuY3Rpb24gTih0LGUpe0EucHVzaCgiZm9yKCIscChfW3RdKSwiPSIsZSwiOyIscChfW3RdKSwiPCIscyhfW3RdKSwiOyIsIisrIixwKF9bdF0pLCIpeyIpfWZ1bmN0aW9uIGoodCl7Zm9yKHZhciBlPTA7ZTxUOysrZSlBLnB1c2goaChlKSwiKz0iLGQoZSxfW3RdKSwiOyIpO0EucHVzaCgifSIpfWZ1bmN0aW9uIFUoKXtmb3IodmFyIHQ9MTt0PDE8PGs7Kyt0KUEucHVzaCgiVCIsIj0iLHYodCksIjsiLHYodCksIj0iLG0odCksIjsiLG0odCksIj0iLCJUIiwiOyIpfVMucHVzaCh5KDApKyI9MCIsIlQ9MCIpLGZ1bmN0aW9uIHQoZSxyKXtpZihlPDApIWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8VDsrK2Upd1tlXT9BLnB1c2gobyhlLDApLCI9IixhKGUpLCIuZ2V0KCIsaChlKSwiKTsiKTpBLnB1c2gobyhlLDApLCI9IixhKGUpLCJbIixoKGUpLCJdOyIpO3ZhciByPVtdO2ZvcihlPTA7ZTxUOysrZSlyLnB1c2gobyhlLDApKTtmb3IoZT0wO2U8YjsrK2Upci5wdXNoKHUoZSkpO0EucHVzaChnKDApLCI9IiwiUCIsIlsiLCJYIiwiXT1waGFzZSgiLHIuam9pbigpLCIpOyIpO2Zvcih2YXIgbj0xO248MTw8azsrK24pQS5wdXNoKGcobiksIj0iLCJQIiwiWyIsIlgiLCIrIix2KG4pLCJdOyIpO3ZhciBpPVtdO2ZvcihuPTE7bjwxPDxrOysrbilpLnB1c2goIigiK2coMCkrIiE9PSIrZyhuKSsiKSIpO0EucHVzaCgiaWYoIixpLmpvaW4oInx8IiksIil7Iik7dmFyIHM9W107Zm9yKGU9MDtlPGs7KytlKXMucHVzaChwKGUpKTtmb3IoZT0wO2U8VDsrK2Upe3MucHVzaChvKGUsMCkpO2ZvcihuPTE7bjwxPDxrOysrbil3W2VdP0EucHVzaChvKGUsbiksIj0iLGEoZSksIi5nZXQoIixoKGUpLCIrIixmKGUsbiksIik7Iik6QS5wdXNoKG8oZSxuKSwiPSIsYShlKSwiWyIsaChlKSwiKyIsZihlLG4pLCJdOyIpLHMucHVzaChvKGUsbikpfWZvcihlPTA7ZTwxPDxrOysrZSlzLnB1c2goZyhlKSk7Zm9yKGU9MDtlPGI7KytlKXMucHVzaCh1KGUpKTtBLnB1c2goInZlcnRleCgiLHMuam9pbigpLCIpOyIseSgwKSwiPSIsIlYiLCJbIiwiWCIsIl09IiwiTiIsIisrOyIpO3ZhciBsPSgxPDxrKS0xLGM9ZyhsKTtmb3Iobj0wO248azsrK24paWYoMD09KHQmfigxPDxuKSkpe2Zvcih2YXIgZD1sXjE8PG4sbT1nKGQpLHg9W10sXz1kO18+MDtfPV8tMSZkKXgucHVzaCgiVltYKyIrdihfKSsiXSIpO3gucHVzaCh5KDApKTtmb3IoXz0wO188VDsrK18pMSZuP3gucHVzaChvKF8sbCksbyhfLGQpKTp4LnB1c2gobyhfLGQpLG8oXyxsKSk7MSZuP3gucHVzaChjLG0pOngucHVzaChtLGMpO2ZvcihfPTA7XzxiOysrXyl4LnB1c2godShfKSk7QS5wdXNoKCJpZigiLGMsIiE9PSIsbSwiKXsiLCJmYWNlKCIseC5qb2luKCksIil9Iil9QS5wdXNoKCJ9IiwiWCIsIis9MTsiKX0ocik7ZWxzZXshZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQtMTtlPj0wOy0tZSlOKGUsMCk7dmFyIHI9W107Zm9yKGU9MDtlPFQ7KytlKXdbZV0/ci5wdXNoKGEoZSkrIi5nZXQoIitoKGUpKyIpIik6ci5wdXNoKGEoZSkrIlsiK2goZSkrIl0iKTtmb3IoZT0wO2U8YjsrK2Upci5wdXNoKHUoZSkpO2ZvcihBLnB1c2goIlAiLCJbIiwiWCIsIisrXT1waGFzZSgiLHIuam9pbigpLCIpOyIpLGU9MDtlPHQ7KytlKWooZSk7Zm9yKHZhciBuPTA7bjxUOysrbilBLnB1c2goaChuKSwiKz0iLGQobixfW3RdKSwiOyIpfShlKSxBLnB1c2goImlmKCIscyhfW2VdKSwiPjApeyIscChfW2VdKSwiPTE7IiksdChlLTEscnwxPDxfW2VdKTtmb3IodmFyIG49MDtuPFQ7KytuKUEucHVzaChoKG4pLCIrPSIsZChuLF9bZV0pLCI7Iik7ZT09PWstMSYmKEEucHVzaCgiWCIsIj0wOyIpLFUoKSksTihlLDIpLHQoZS0xLHIpLGU9PT1rLTEmJihBLnB1c2goImlmKCIscChfW2stMV0pLCImMSl7IiwiWCIsIj0wO30iKSxVKCkpLGooZSksQS5wdXNoKCJ9Iil9fShrLTEsMCksQS5wdXNoKCJmcmVlVWludDMyKCIsIlYiLCIpO2ZyZWVVaW50MzIoIiwiUCIsIik7Iik7dmFyIFY9WyIndXNlIHN0cmljdCc7IiwiZnVuY3Rpb24gIixNLCIoIixFLmpvaW4oKSwiKXsiLCJ2YXIgIixTLmpvaW4oKSwiOyIsQS5qb2luKCIiKSwifSIsInJldHVybiAiLE1dLmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24oInZlcnRleCIsImZhY2UiLCJwaGFzZSIsIm1hbGxvY1VpbnQzMiIsImZyZWVVaW50MzIiLFYpKHQsZSxyLG4ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMil9KHQudmVydGV4LHQuY2VsbCx0LnBoYXNlLF8scixUKX07ZnVuY3Rpb24geCh0LGUscil7Zm9yKHZhciBuPTAsaT0wO2k8dDsrK2kpZSYxPDxpJiYobnw9MTw8cltpXSk7cmV0dXJuIG59fSx7InR5cGVkYXJyYXktcG9vbCI6NTY3fV0sNDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoQXJyYXkuaXNBcnJheShyKSl7aWYoci5sZW5ndGghPT1lLmRpbWVuc2lvbil0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IGludmFsaWQgYm91bmRhcnkgY29uZGl0aW9ucyIpfWVsc2Ugcj1uKGUuZGltZW5zaW9uLCJzdHJpbmciPT10eXBlb2Ygcj9yOiJjbGFtcCIpO2lmKHQuZGltZW5zaW9uIT09ZS5kaW1lbnNpb24rMSl0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IG91dHB1dCBkaW1lbnNpb24gbXVzdCBiZSArMSBpbnB1dCBkaW1lbnNpb24iKTtpZih0LnNoYXBlW2UuZGltZW5zaW9uXSE9PWUuZGltZW5zaW9uKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogb3V0cHV0IHNoYXBlIG11c3QgbWF0Y2ggaW5wdXQgc2hhcGUiKTtmb3IodmFyIGk9MDtpPGUuZGltZW5zaW9uOysraSlpZih0LnNoYXBlW2ldIT09ZS5zaGFwZVtpXSl0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IHNoYXBlIG1pc21hdGNoIik7aWYoMD09PWUuc2l6ZSlyZXR1cm4gdDtpZihlLmRpbWVuc2lvbjw9MClyZXR1cm4gdC5zZXQoMCksdDtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5qb2luKCk7aWYodj1vW2VdKXJldHVybiB2O3ZhciByPXQubGVuZ3RoLG49WyJmdW5jdGlvbiBncmFkaWVudChkc3Qsc3JjKXt2YXIgcz1zcmMuc2hhcGUuc2xpY2UoKTsiXTtmdW5jdGlvbiBpKGUpe2Zvcih2YXIgaT1yLWUubGVuZ3RoLGE9W10sbz1bXSxzPVtdLGw9MDtsPHI7KytsKWUuaW5kZXhPZihsKzEpPj0wP3MucHVzaCgiMCIpOmUuaW5kZXhPZigtKGwrMSkpPj0wP3MucHVzaCgic1siK2wrIl0tMSIpOihzLnB1c2goIi0xIiksYS5wdXNoKCIxIiksby5wdXNoKCJzWyIrbCsiXS0yIikpO3ZhciBjPSIubG8oIithLmpvaW4oKSsiKS5oaSgiK28uam9pbigpKyIpIjtpZigwPT09YS5sZW5ndGgmJihjPSIiKSxpPjApe24ucHVzaCgiaWYoMSIpO2ZvcihsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MHx8ZS5pbmRleE9mKC0obCsxKSk+PTB8fG4ucHVzaCgiJiZzWyIsbCwiXT4yIik7bi5wdXNoKCIpe2dyYWQiLGksIihzcmMucGljaygiLHMuam9pbigpLCIpIixjKTtmb3IobD0wO2w8cjsrK2wpZS5pbmRleE9mKGwrMSk+PTB8fGUuaW5kZXhPZigtKGwrMSkpPj0wfHxuLnB1c2goIixkc3QucGljaygiLHMuam9pbigpLCIsIixsLCIpIixjKTtuLnB1c2goIik7Iil9Zm9yKGw9MDtsPGUubGVuZ3RoOysrbCl7dmFyIHU9TWF0aC5hYnMoZVtsXSktMSxoPSJkc3QucGljaygiK3Muam9pbigpKyIsIit1KyIpIitjO3N3aXRjaCh0W3VdKXtjYXNlImNsYW1wIjp2YXIgZj1zLnNsaWNlKCkscD1zLnNsaWNlKCk7ZVtsXTwwP2ZbdV09InNbIit1KyJdLTIiOnBbdV09IjEiLDA9PT1pP24ucHVzaCgiaWYoc1siLHUsIl0+MSl7ZHN0LnNldCgiLHMuam9pbigpLCIsIix1LCIsMC41KihzcmMuZ2V0KCIsZi5qb2luKCksIiktc3JjLmdldCgiLHAuam9pbigpLCIpKSl9ZWxzZXtkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwKX07Iik6bi5wdXNoKCJpZihzWyIsdSwiXT4xKXtkaWZmKCIsaCwiLHNyYy5waWNrKCIsZi5qb2luKCksIikiLGMsIixzcmMucGljaygiLHAuam9pbigpLCIpIixjLCIpO31lbHNle3plcm8oIixoLCIpO307Iik7YnJlYWs7Y2FzZSJtaXJyb3IiOjA9PT1pP24ucHVzaCgiZHN0LnNldCgiLHMuam9pbigpLCIsIix1LCIsMCk7Iik6bi5wdXNoKCJ6ZXJvKCIsaCwiKTsiKTticmVhaztjYXNlIndyYXAiOnZhciBkPXMuc2xpY2UoKSxnPXMuc2xpY2UoKTtlW2xdPDA/KGRbdV09InNbIit1KyJdLTIiLGdbdV09IjAiKTooZFt1XT0ic1siK3UrIl0tMSIsZ1t1XT0iMSIpLDA9PT1pP24ucHVzaCgiaWYoc1siLHUsIl0+Mil7ZHN0LnNldCgiLHMuam9pbigpLCIsIix1LCIsMC41KihzcmMuZ2V0KCIsZC5qb2luKCksIiktc3JjLmdldCgiLGcuam9pbigpLCIpKSl9ZWxzZXtkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwKX07Iik6bi5wdXNoKCJpZihzWyIsdSwiXT4yKXtkaWZmKCIsaCwiLHNyYy5waWNrKCIsZC5qb2luKCksIikiLGMsIixzcmMucGljaygiLGcuam9pbigpLCIpIixjLCIpO31lbHNle3plcm8oIixoLCIpO307Iik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZ3JhZGllbnQ6IEludmFsaWQgYm91bmRhcnkgY29uZGl0aW9uIil9fWk+MCYmbi5wdXNoKCJ9OyIpfWZvcih2YXIgcz0wO3M8MTw8cjsrK3Mpe2Zvcih2YXIgaD1bXSxmPTA7ZjxyOysrZilzJjE8PGYmJmgucHVzaChmKzEpO2Zvcih2YXIgcD0wO3A8MTw8aC5sZW5ndGg7KytwKXt2YXIgZD1oLnNsaWNlKCk7Zm9yKGY9MDtmPGgubGVuZ3RoOysrZilwJjE8PGYmJihkW2ZdPS1kW2ZdKTtpKGQpfX1uLnB1c2goInJldHVybiBkc3Q7fTtyZXR1cm4gZ3JhZGllbnQiKTt2YXIgZz1bImRpZmYiLCJ6ZXJvIl0sbT1bbCxjXTtmb3Iocz0xO3M8PXI7KytzKWcucHVzaCgiZ3JhZCIrcyksbS5wdXNoKHUocykpO2cucHVzaChuLmpvaW4oIiIpKTt2YXIgdj1GdW5jdGlvbi5hcHBseSh2b2lkIDAsZykuYXBwbHkodm9pZCAwLG0pO3JldHVybiBhW2VdPXYsdn0ocikodCxlKX07dmFyIG49dCgiZHVwIiksaT10KCJjd2lzZS1jb21waWxlciIpLGE9e30sbz17fSxzPXtib2R5OiIiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxsPWkoe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6cyxwb3N0OnMsYm9keTp7YXJnczpbe25hbWU6Im91dCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToibGVmdCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToicmlnaHQiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6Im91dD0wLjUqKGxlZnQtcmlnaHQpIix0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJjZGlmZiJ9KSxjPWkoe2FyZ3M6WyJhcnJheSJdLHByZTpzLHBvc3Q6cyxib2R5OnthcmdzOlt7bmFtZToib3V0IixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9XSxib2R5OiJvdXQ9MCIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiemVybyJ9KTtmdW5jdGlvbiB1KHQpe2lmKHQgaW4gYSlyZXR1cm4gYVt0XTtmb3IodmFyIGU9W10scj0wO3I8dDsrK3IpZS5wdXNoKCJvdXQiLHIsInM9MC41KihpbnAiLHIsImwtaW5wIixyLCJyKTsiKTt2YXIgbz1bImFycmF5Il0sbD1bImp1bmsiXTtmb3Iocj0wO3I8dDsrK3Ipe28ucHVzaCgiYXJyYXkiKSxsLnB1c2goIm91dCIrcisicyIpO3ZhciBjPW4odCk7Y1tyXT0tMSxvLnB1c2goe2FycmF5OjAsb2Zmc2V0OmMuc2xpY2UoKX0pLGNbcl09MSxvLnB1c2goe2FycmF5OjAsb2Zmc2V0OmMuc2xpY2UoKX0pLGwucHVzaCgiaW5wIityKyJsIiwiaW5wIityKyJyIil9cmV0dXJuIGFbdF09aSh7YXJnczpvLHByZTpzLHBvc3Q6cyxib2R5Ontib2R5OmUuam9pbigiIiksYXJnczpsLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6dCxsdmFsdWU6MD09PXQuaW5kZXhPZigib3V0IikscnZhbHVlOjA9PT10LmluZGV4T2YoImlucCIpLGNvdW50OiJqdW5rIiE9PXR8MH19KSksdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiZmRUZW1wbGF0ZSIrdH0pfX0seyJjd2lzZS1jb21waWxlciI6MTUxLGR1cDoxNzZ9XSw0NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPU1hdGguZmxvb3IoZSksbj1lLXIsaT0wPD1yJiZyPHQuc2hhcGVbMF0sYT0wPD1yKzEmJnIrMTx0LnNoYXBlWzBdO3JldHVybigxLW4pKihpPyt0LmdldChyKTowKStuKihhPyt0LmdldChyKzEpOjApfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPU1hdGguZmxvb3IoZSksaT1lLW4sYT0wPD1uJiZuPHQuc2hhcGVbMF0sbz0wPD1uKzEmJm4rMTx0LnNoYXBlWzBdLHM9TWF0aC5mbG9vcihyKSxsPXItcyxjPTA8PXMmJnM8dC5zaGFwZVsxXSx1PTA8PXMrMSYmcysxPHQuc2hhcGVbMV0saD1hJiZjP3QuZ2V0KG4scyk6MCxmPWEmJnU/dC5nZXQobixzKzEpOjA7cmV0dXJuKDEtbCkqKCgxLWkpKmgraSoobyYmYz90LmdldChuKzEscyk6MCkpK2wqKCgxLWkpKmYraSoobyYmdT90LmdldChuKzEscysxKTowKSl9ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaT1NYXRoLmZsb29yKGUpLGE9ZS1pLG89MDw9aSYmaTx0LnNoYXBlWzBdLHM9MDw9aSsxJiZpKzE8dC5zaGFwZVswXSxsPU1hdGguZmxvb3IociksYz1yLWwsdT0wPD1sJiZsPHQuc2hhcGVbMV0saD0wPD1sKzEmJmwrMTx0LnNoYXBlWzFdLGY9TWF0aC5mbG9vcihuKSxwPW4tZixkPTA8PWYmJmY8dC5zaGFwZVsyXSxnPTA8PWYrMSYmZisxPHQuc2hhcGVbMl0sbT1vJiZ1JiZkP3QuZ2V0KGksbCxmKTowLHY9byYmaCYmZD90LmdldChpLGwrMSxmKTowLHk9cyYmdSYmZD90LmdldChpKzEsbCxmKTowLHg9cyYmaCYmZD90LmdldChpKzEsbCsxLGYpOjAsYj1vJiZ1JiZnP3QuZ2V0KGksbCxmKzEpOjAsXz1vJiZoJiZnP3QuZ2V0KGksbCsxLGYrMSk6MDtyZXR1cm4oMS1wKSooKDEtYykqKCgxLWEpKm0rYSp5KStjKigoMS1hKSp2K2EqeCkpK3AqKCgxLWMpKigoMS1hKSpiK2EqKHMmJnUmJmc/dC5nZXQoaSsxLGwsZisxKTowKSkrYyooKDEtYSkqXythKihzJiZoJiZnP3QuZ2V0KGkrMSxsKzEsZisxKTowKSkpfWZ1bmN0aW9uIG8odCl7dmFyIGUscixuPTB8dC5zaGFwZS5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKXI9K2FyZ3VtZW50c1tlKzFdLGlbZV09TWF0aC5mbG9vcihyKSxhW2VdPXItaVtlXSxvW2VdPTA8PWlbZV0mJmlbZV08dC5zaGFwZVtlXSxzW2VdPTA8PWlbZV0rMSYmaVtlXSsxPHQuc2hhcGVbZV07dmFyIGwsYyx1LGg9MDt0OmZvcihlPTA7ZTwxPDxuOysrZSl7Zm9yKGM9MSx1PXQub2Zmc2V0LGw9MDtsPG47KytsKWlmKGUmMTw8bCl7aWYoIXNbbF0pY29udGludWUgdDtjKj1hW2xdLHUrPXQuc3RyaWRlW2xdKihpW2xdKzEpfWVsc2V7aWYoIW9bbF0pY29udGludWUgdDtjKj0xLWFbbF0sdSs9dC5zdHJpZGVbbF0qaVtsXX1oKz1jKnQuZGF0YVt1XX1yZXR1cm4gaH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7c3dpdGNoKHQuc2hhcGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiBuKHQsZSk7Y2FzZSAyOnJldHVybiBpKHQsZSxyKTtjYXNlIDM6cmV0dXJuIGEodCxlLHIscyk7ZGVmYXVsdDpyZXR1cm4gby5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19LGUuZXhwb3J0cy5kMT1uLGUuZXhwb3J0cy5kMj1pLGUuZXhwb3J0cy5kMz1hfSx7fV0sNDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImN3aXNlLWNvbXBpbGVyIiksaT17Ym9keToiIixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX07ZnVuY3Rpb24gYSh0KXtpZighdClyZXR1cm4gaTtmb3IodmFyIGU9MDtlPHQuYXJncy5sZW5ndGg7KytlKXt2YXIgcj10LmFyZ3NbZV07dC5hcmdzW2VdPTA9PT1lP3tuYW1lOnIsbHZhbHVlOiEwLHJ2YWx1ZTohIXQucnZhbHVlLGNvdW50OnQuY291bnR8fDF9OntuYW1lOnIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfX1yZXR1cm4gdC50aGlzVmFyc3x8KHQudGhpc1ZhcnM9W10pLHQubG9jYWxWYXJzfHwodC5sb2NhbFZhcnM9W10pLHR9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5hcmdzLmxlbmd0aDsrK3IpZS5wdXNoKCJhIityKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJQIixbInJldHVybiBmdW5jdGlvbiAiLHQuZnVuY05hbWUsIl9uZGFycmF5b3BzKCIsZS5qb2luKCIsIiksIikge1AoIixlLmpvaW4oIiwiKSwiKTtyZXR1cm4gYTB9Il0uam9pbigiIikpKGZ1bmN0aW9uKHQpe3JldHVybiBuKHthcmdzOnQuYXJncyxwcmU6YSh0LnByZSksYm9keTphKHQuYm9keSkscG9zdDphKHQucHJvYyksZnVuY05hbWU6dC5mdW5jTmFtZX0pfSh0KSl9dmFyIHM9e2FkZDoiKyIsc3ViOiItIixtdWw6IioiLGRpdjoiLyIsbW9kOiIlIixiYW5kOiImIixib3I6InwiLGJ4b3I6Il4iLGxzaGlmdDoiPDwiLHJzaGlmdDoiPj4iLHJyc2hpZnQ6Ij4+PiJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzKXt2YXIgZT1zW3RdO3JbdF09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPWIiK2UrImMifSxmdW5jTmFtZTp0fSksclt0KyJlcSJdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYSIrZSsiPWIifSxydmFsdWU6ITAsZnVuY05hbWU6dCsiZXEifSksclt0KyJzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsImIiLCJzIl0sYm9keToiYT1iIitlKyJzIn0sZnVuY05hbWU6dCsicyJ9KSxyW3QrInNlcSJdPW8oe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwicyJdLGJvZHk6ImEiK2UrIj1zIn0scnZhbHVlOiEwLGZ1bmNOYW1lOnQrInNlcSJ9KX19KCk7dmFyIGw9e25vdDoiISIsYm5vdDoifiIsbmVnOiItIixyZWNpcDoiMS4wLyJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBsKXt2YXIgZT1sW3RdO3JbdF09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPSIrZSsiYiJ9LGZ1bmNOYW1lOnR9KSxyW3QrImVxIl09byh7YXJnczpbImFycmF5Il0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPSIrZSsiYSJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pfX0oKTt2YXIgYz17YW5kOiImJiIsb3I6Inx8IixlcToiPT09IixuZXE6IiE9PSIsbHQ6IjwiLGd0OiI+IixsZXE6Ijw9IixnZXE6Ij49In07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIGMpe3ZhciBlPWNbdF07clt0XT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9YiIrZSsiYyJ9LGZ1bmNOYW1lOnR9KSxyW3QrInMiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsInMiXSxib2R5OiJhPWIiK2UrInMifSxmdW5jTmFtZTp0KyJzIn0pLHJbdCsiZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9YSIrZSsiYiJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pLHJbdCsic2VxIl09byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJzIl0sYm9keToiYT1hIitlKyJzIn0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6dCsic2VxIn0pfX0oKTt2YXIgdT1bImFicyIsImFjb3MiLCJhc2luIiwiYXRhbiIsImNlaWwiLCJjb3MiLCJleHAiLCJmbG9vciIsImxvZyIsInJvdW5kIiwic2luIiwic3FydCIsInRhbiJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dS5sZW5ndGg7Kyt0KXt2YXIgZT11W3RdO3JbZV09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJlcSJdPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZihhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSl9fSgpO3ZhciBoPVsibWF4IiwibWluIiwiYXRhbjIiLCJwb3ciXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGgubGVuZ3RoOysrdCl7dmFyIGU9aFt0XTtyW2VdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplKyJzIn0pLHJbZSsiZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYSxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSkscltlKyJzZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGEsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrInNlcSJ9KX19KCk7dmFyIGY9WyJhdGFuMiIsInBvdyJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8Zi5sZW5ndGg7Kyt0KXt2YXIgZT1mW3RdO3JbZSsib3AiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT10aGlzX2YoYyxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZSsib3AifSkscltlKyJvcHMiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9dGhpc19mKGMsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LGZ1bmNOYW1lOmUrIm9wcyJ9KSxyW2UrIm9wZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYixhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsib3BlcSJ9KSxyW2UrIm9wc2VxIl09byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihiLGEpIix0aGlzVmFyczpbInRoaXNfZiJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplKyJvcHNlcSJ9KX19KCksci5hbnk9bih7YXJnczpbImFycmF5Il0scHJlOmksYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6ImlmKGEpe3JldHVybiB0cnVlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gZmFsc2UifSxmdW5jTmFtZToiYW55In0pLHIuYWxsPW4oe2FyZ3M6WyJhcnJheSJdLHByZTppLGJvZHk6e2FyZ3M6W3tuYW1lOiJ4IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJpZigheCl7cmV0dXJuIGZhbHNlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gdHJ1ZSJ9LGZ1bmNOYW1lOiJhbGwifSksci5zdW09bih7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6InRoaXNfcys9YSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIHRoaXNfcyJ9LGZ1bmNOYW1lOiJzdW0ifSksci5wcm9kPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MSJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJ0aGlzX3MqPWEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToicHJvZCJ9KSxyLm5vcm0yc3F1YXJlZD1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sYm9keToidGhpc19zKz1hKmEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybTJzcXVhcmVkIn0pLHIubm9ybTI9bih7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLGJvZHk6InRoaXNfcys9YSphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gTWF0aC5zcXJ0KHRoaXNfcykifSxmdW5jTmFtZToibm9ybTIifSksci5ub3JtaW5mPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjR9XSxib2R5OiJpZigtYT50aGlzX3Mpe3RoaXNfcz0tYX1lbHNlIGlmKGE+dGhpc19zKXt0aGlzX3M9YX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybWluZiJ9KSxyLm5vcm0xPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjN9XSxib2R5OiJ0aGlzX3MrPWE8MD8tYTphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6Im5vcm0xIn0pLHIuc3VwPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7Ym9keToidGhpc19oPS1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPnRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmluZj1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2JvZHk6InRoaXNfaD1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPHRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21pbj1uKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PUluZmluaXR5O3RoaXNfaT1faW5saW5lXzBfYXJnMl8uc2xpY2UoMCl9IixhcmdzOlt7bmFtZToiX2lubGluZV8wX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMF9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntpZihfaW5saW5lXzFfYXJnMV88dGhpc192KXt0aGlzX3Y9X2lubGluZV8xX2FyZzFfO2Zvcih2YXIgX2lubGluZV8xX2s9MDtfaW5saW5lXzFfazxfaW5saW5lXzFfYXJnMF8ubGVuZ3RoOysrX2lubGluZV8xX2spe3RoaXNfaVtfaW5saW5lXzFfa109X2lubGluZV8xX2FyZzBfW19pbmxpbmVfMV9rXX19fSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaSIsInRoaXNfdiJdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9rIl19LHBvc3Q6e2JvZHk6IntyZXR1cm4gdGhpc19pfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaSJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21heD1uKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PS1JbmZpbml0eTt0aGlzX2k9X2lubGluZV8wX2FyZzJfLnNsaWNlKDApfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8wX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc19pIiwidGhpc192Il0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoX2lubGluZV8xX2FyZzFfPnRoaXNfdil7dGhpc192PV9pbmxpbmVfMV9hcmcxXztmb3IodmFyIF9pbmxpbmVfMV9rPTA7X2lubGluZV8xX2s8X2lubGluZV8xX2FyZzBfLmxlbmd0aDsrK19pbmxpbmVfMV9rKXt0aGlzX2lbX2lubGluZV8xX2tdPV9pbmxpbmVfMV9hcmcwX1tfaW5saW5lXzFfa119fX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6WyJfaW5saW5lXzFfayJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuIHRoaXNfaX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2kiXSxsb2NhbFZhcnM6W119fSksci5yYW5kb209byh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLnJhbmRvbSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZigpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZToicmFuZG9tIn0pLHIuYXNzaWduPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbiJ9KSxyLmFzc2lnbnM9byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbnMifSksci5lcXVhbHM9bih7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6aSxib2R5OnthcmdzOlt7bmFtZToieCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToieSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToiaWYoeCE9PXkpe3JldHVybiBmYWxzZX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keToicmV0dXJuIHRydWUifSxmdW5jTmFtZToiZXF1YWxzIn0pfSx7ImN3aXNlLWNvbXBpbGVyIjoxNTF9XSw0NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgiLi9kb0NvbnZlcnQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10LG89MTtBcnJheS5pc0FycmF5KGEpOylyLnB1c2goYS5sZW5ndGgpLG8qPWEubGVuZ3RoLGE9YVswXTtyZXR1cm4gMD09PXIubGVuZ3RoP24oKTooZXx8KGU9bihuZXcgRmxvYXQ2NEFycmF5KG8pLHIpKSxpKGUsdCksZSl9fSx7Ii4vZG9Db252ZXJ0LmpzIjo0NjYsbmRhcnJheTo0Njl9XSw0NjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiY3dpc2UtY29tcGlsZXIiKSh7YXJnczpbImFycmF5Iiwic2NhbGFyIiwiaW5kZXgiXSxwcmU6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie1xudmFyIF9pbmxpbmVfMV92PV9pbmxpbmVfMV9hcmcxXyxfaW5saW5lXzFfaVxuZm9yKF9pbmxpbmVfMV9pPTA7X2lubGluZV8xX2k8X2lubGluZV8xX2FyZzJfLmxlbmd0aC0xOysrX2lubGluZV8xX2kpIHtcbl9pbmxpbmVfMV92PV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfaV1dXG59XG5faW5saW5lXzFfYXJnMF89X2lubGluZV8xX3ZbX2lubGluZV8xX2FyZzJfW19pbmxpbmVfMV9hcmcyXy5sZW5ndGgtMV1dXG59IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOlsiX2lubGluZV8xX2kiLCJfaW5saW5lXzFfdiJdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJjb252ZXJ0IixibG9ja1NpemU6NjR9KX0seyJjd2lzZS1jb21waWxlciI6MTUxfV0sNDY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9MzI7ZnVuY3Rpb24gYSh0KXtzd2l0Y2godCl7Y2FzZSJ1aW50OCI6cmV0dXJuW24ubWFsbG9jVWludDgsbi5mcmVlVWludDhdO2Nhc2UidWludDE2IjpyZXR1cm5bbi5tYWxsb2NVaW50MTYsbi5mcmVlVWludDE2XTtjYXNlInVpbnQzMiI6cmV0dXJuW24ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMl07Y2FzZSJpbnQ4IjpyZXR1cm5bbi5tYWxsb2NJbnQ4LG4uZnJlZUludDhdO2Nhc2UiaW50MTYiOnJldHVybltuLm1hbGxvY0ludDE2LG4uZnJlZUludDE2XTtjYXNlImludDMyIjpyZXR1cm5bbi5tYWxsb2NJbnQzMixuLmZyZWVJbnQzMl07Y2FzZSJmbG9hdDMyIjpyZXR1cm5bbi5tYWxsb2NGbG9hdCxuLmZyZWVGbG9hdF07Y2FzZSJmbG9hdDY0IjpyZXR1cm5bbi5tYWxsb2NEb3VibGUsbi5mcmVlRG91YmxlXTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0OysrcillLnB1c2goInMiK3IpO2ZvcihyPTA7cjx0OysrcillLnB1c2goIm4iK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImQiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImUiK3IpO2ZvcihyPTE7cjx0OysrcillLnB1c2goImYiK3IpO3JldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVsiJ3VzZSBzdHJpY3QnIl0sbj1bIm5kYXJyYXlTb3J0V3JhcHBlciIsdC5qb2luKCJkIiksZV0uam9pbigiIik7ci5wdXNoKFsiZnVuY3Rpb24gIixuLCIoIixbImFycmF5Il0uam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIHM9WyJkYXRhPWFycmF5LmRhdGEsb2Zmc2V0PWFycmF5Lm9mZnNldHwwLHNoYXBlPWFycmF5LnNoYXBlLHN0cmlkZT1hcnJheS5zdHJpZGUiXSxsPTA7bDx0Lmxlbmd0aDsrK2wpcy5wdXNoKFsicyIsbCwiPXN0cmlkZVsiLGwsIl18MCxuIixsLCI9c2hhcGVbIixsLCJdfDAiXS5qb2luKCIiKSk7dmFyIGM9bmV3IEFycmF5KHQubGVuZ3RoKSx1PVtdO2ZvcihsPTA7bDx0Lmxlbmd0aDsrK2wpezAhPT0ocD10W2xdKSYmKDA9PT11Lmxlbmd0aD9jW3BdPSIxIjpjW3BdPXUuam9pbigiKiIpLHUucHVzaCgibiIrcCkpfXZhciBoPS0xLGY9LTE7Zm9yKGw9MDtsPHQubGVuZ3RoOysrbCl7dmFyIHAsZD10W2xdOzAhPT1kJiYoaD4wP3MucHVzaChbImQiLGQsIj1zIixkLCItZCIsaCwiKm4iLGhdLmpvaW4oIiIpKTpzLnB1c2goWyJkIixkLCI9cyIsZF0uam9pbigiIikpLGg9ZCksMCE9PShwPXQubGVuZ3RoLTEtbCkmJihmPjA/cy5wdXNoKFsiZSIscCwiPXMiLHAsIi1lIixmLCIqbiIsZiwiLGYiLHAsIj0iLGNbcF0sIi1mIixmLCIqbiIsZl0uam9pbigiIikpOnMucHVzaChbImUiLHAsIj1zIixwLCIsZiIscCwiPSIsY1twXV0uam9pbigiIikpLGY9cCl9ci5wdXNoKCJ2YXIgIitzLmpvaW4oIiwiKSk7dmFyIGc9WyIwIiwibjAtMSIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQobyh0Lmxlbmd0aCkpO3IucHVzaChbImlmKG4wPD0iLGksIil7IiwiaW5zZXJ0aW9uU29ydCgiLGcuam9pbigiLCIpLCIpfWVsc2V7IiwicXVpY2tTb3J0KCIsZy5qb2luKCIsIiksIil9Il0uam9pbigiIikpLHIucHVzaCgifXJldHVybiAiK24pO3ZhciBtPW5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsInF1aWNrU29ydCIsci5qb2luKCJcbiIpKSx2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9WyIndXNlIHN0cmljdCciXSxuPVsibmRhcnJheUluc2VydGlvblNvcnQiLHQuam9pbigiZCIpLGVdLmpvaW4oIiIpLGk9WyJsZWZ0IiwicmlnaHQiLCJkYXRhIiwib2Zmc2V0Il0uY29uY2F0KG8odC5sZW5ndGgpKSxzPWEoZSksbD1bImksaixjcHRyLHB0cj1sZWZ0KnMwK29mZnNldCJdO2lmKHQubGVuZ3RoPjEpe2Zvcih2YXIgYz1bXSx1PTE7dTx0Lmxlbmd0aDsrK3UpbC5wdXNoKCJpIit1KSxjLnB1c2goIm4iK3UpO3M/bC5wdXNoKCJzY3JhdGNoPW1hbGxvYygiK2Muam9pbigiKiIpKyIpIik6bC5wdXNoKCJzY3JhdGNoPW5ldyBBcnJheSgiK2Muam9pbigiKiIpKyIpIiksbC5wdXNoKCJkcHRyIiwic3B0ciIsImEiLCJiIil9ZWxzZSBsLnB1c2goInNjcmF0Y2giKTtmdW5jdGlvbiBoKHQpe3JldHVybiJnZW5lcmljIj09PWU/WyJkYXRhLmdldCgiLHQsIikiXS5qb2luKCIiKTpbImRhdGFbIix0LCJdIl0uam9pbigiIil9ZnVuY3Rpb24gZih0LHIpe3JldHVybiJnZW5lcmljIj09PWU/WyJkYXRhLnNldCgiLHQsIiwiLHIsIikiXS5qb2luKCIiKTpbImRhdGFbIix0LCJdPSIscl0uam9pbigiIil9aWYoci5wdXNoKFsiZnVuY3Rpb24gIixuLCIoIixpLmpvaW4oIiwiKSwiKXt2YXIgIixsLmpvaW4oIiwiKV0uam9pbigiIiksImZvcihpPWxlZnQrMTtpPD1yaWdodDsrK2kpeyIsImo9aTtwdHIrPXMwIiwiY3B0cj1wdHIiKSx0Lmxlbmd0aD4xKXtyLnB1c2goImRwdHI9MDtzcHRyPXB0ciIpO2Zvcih1PXQubGVuZ3RoLTE7dT49MDstLXUpezAhPT0ocD10W3VdKSYmci5wdXNoKFsiZm9yKGkiLHAsIj0wO2kiLHAsIjxuIixwLCI7KytpIixwLCIpeyJdLmpvaW4oIiIpKX1yLnB1c2goInNjcmF0Y2hbZHB0cisrXT0iLGgoInNwdHIiKSk7Zm9yKHU9MDt1PHQubGVuZ3RoOysrdSl7MCE9PShwPXRbdV0pJiZyLnB1c2goInNwdHIrPWQiK3AsIn0iKX1yLnB1c2goIl9fZzp3aGlsZShqLS1ceDNlbGVmdCl7IiwiZHB0cj0wIiwic3B0cj1jcHRyLXMwIik7Zm9yKHU9MTt1PHQubGVuZ3RoOysrdSkxPT09dSYmci5wdXNoKCJfX2w6Iiksci5wdXNoKFsiZm9yKGkiLHUsIj0wO2kiLHUsIjxuIix1LCI7KytpIix1LCIpeyJdLmpvaW4oIiIpKTtyLnB1c2goWyJhPSIsaCgic3B0ciIpLCJcbmI9c2NyYXRjaFtkcHRyXVxuaWYoYTxiKXticmVhayBfX2d9XG5pZihhPmIpe2JyZWFrIF9fbH0iXS5qb2luKCIiKSk7Zm9yKHU9dC5sZW5ndGgtMTt1Pj0xOy0tdSlyLnB1c2goInNwdHIrPWUiK3UsImRwdHIrPWYiK3UsIn0iKTtyLnB1c2goImRwdHI9Y3B0cjtzcHRyPWNwdHItczAiKTtmb3IodT10Lmxlbmd0aC0xO3U+PTA7LS11KXswIT09KHA9dFt1XSkmJnIucHVzaChbImZvcihpIixwLCI9MDtpIixwLCI8biIscCwiOysraSIscCwiKXsiXS5qb2luKCIiKSl9ci5wdXNoKGYoImRwdHIiLGgoInNwdHIiKSkpO2Zvcih1PTA7dTx0Lmxlbmd0aDsrK3UpezAhPT0ocD10W3VdKSYmci5wdXNoKFsiZHB0cis9ZCIscCwiO3NwdHIrPWQiLHBdLmpvaW4oIiIpLCJ9Iil9ci5wdXNoKCJjcHRyLT1zMFxufSIpLHIucHVzaCgiZHB0cj1jcHRyO3NwdHI9MCIpO2Zvcih1PXQubGVuZ3RoLTE7dT49MDstLXUpezAhPT0ocD10W3VdKSYmci5wdXNoKFsiZm9yKGkiLHAsIj0wO2kiLHAsIjxuIixwLCI7KytpIixwLCIpeyJdLmpvaW4oIiIpKX1yLnB1c2goZigiZHB0ciIsInNjcmF0Y2hbc3B0cisrXSIpKTtmb3IodT0wO3U8dC5sZW5ndGg7Kyt1KXt2YXIgcDswIT09KHA9dFt1XSkmJnIucHVzaCgiZHB0cis9ZCIrcCwifSIpfX1lbHNlIHIucHVzaCgic2NyYXRjaD0iK2goInB0ciIpLCJ3aGlsZSgoai0tXHgzZWxlZnQpJiYoIitoKCJjcHRyLXMwIikrIj5zY3JhdGNoKSl7IixmKCJjcHRyIixoKCJjcHRyLXMwIikpLCJjcHRyLT1zMCIsIn0iLGYoImNwdHIiLCJzY3JhdGNoIikpO3JldHVybiByLnB1c2goIn0iKSx0Lmxlbmd0aD4xJiZzJiZyLnB1c2goImZyZWUoc2NyYXRjaCkiKSxyLnB1c2goIn0gcmV0dXJuICIrbikscz9uZXcgRnVuY3Rpb24oIm1hbGxvYyIsImZyZWUiLHIuam9pbigiXG4iKSkoc1swXSxzWzFdKTpuZXcgRnVuY3Rpb24oci5qb2luKCJcbiIpKSgpfSh0LGUpLHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVsiJ3VzZSBzdHJpY3QnIl0scz1bIm5kYXJyYXlRdWlja1NvcnQiLHQuam9pbigiZCIpLGVdLmpvaW4oIiIpLGw9WyJsZWZ0IiwicmlnaHQiLCJkYXRhIiwib2Zmc2V0Il0uY29uY2F0KG8odC5sZW5ndGgpKSxjPWEoZSksdT0wO24ucHVzaChbImZ1bmN0aW9uICIscywiKCIsbC5qb2luKCIsIiksIil7Il0uam9pbigiIikpO3ZhciBoPVsic2l4dGg9KChyaWdodC1sZWZ0KzEpLzYpfDAiLCJpbmRleDE9bGVmdCtzaXh0aCIsImluZGV4NT1yaWdodC1zaXh0aCIsImluZGV4Mz0obGVmdCtyaWdodCk+PjEiLCJpbmRleDI9aW5kZXgzLXNpeHRoIiwiaW5kZXg0PWluZGV4MytzaXh0aCIsImVsMT1pbmRleDEiLCJlbDI9aW5kZXgyIiwiZWwzPWluZGV4MyIsImVsND1pbmRleDQiLCJlbDU9aW5kZXg1IiwibGVzcz1sZWZ0KzEiLCJncmVhdD1yaWdodC0xIiwicGl2b3RzX2FyZV9lcXVhbD10cnVlIiwidG1wIiwidG1wMCIsIngiLCJ5IiwieiIsImsiLCJwdHIwIiwicHRyMSIsInB0cjIiLCJjb21wX3Bpdm90MT0wIiwiY29tcF9waXZvdDI9MCIsImNvbXA9MCJdO2lmKHQubGVuZ3RoPjEpe2Zvcih2YXIgZj1bXSxwPTE7cDx0Lmxlbmd0aDsrK3ApZi5wdXNoKCJuIitwKSxoLnB1c2goImkiK3ApO2ZvcihwPTA7cDw4OysrcCloLnB1c2goImJfcHRyIitwKTtoLnB1c2goInB0cjMiLCJwdHI0IiwicHRyNSIsInB0cjYiLCJwdHI3IiwicGl2b3RfcHRyIiwicHRyX3NoaWZ0IiwiZWxlbWVudFNpemU9IitmLmpvaW4oIioiKSksYz9oLnB1c2goInBpdm90MT1tYWxsb2MoZWxlbWVudFNpemUpIiwicGl2b3QyPW1hbGxvYyhlbGVtZW50U2l6ZSkiKTpoLnB1c2goInBpdm90MT1uZXcgQXJyYXkoZWxlbWVudFNpemUpLHBpdm90Mj1uZXcgQXJyYXkoZWxlbWVudFNpemUpIil9ZWxzZSBoLnB1c2goInBpdm90MSIsInBpdm90MiIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuWyIob2Zmc2V0KyIsdCwiKnMwKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIGcodCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiBtKHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX1mdW5jdGlvbiB2KGUscixpKXtpZigxPT09ZS5sZW5ndGgpbi5wdXNoKCJwdHIwPSIrZChlWzBdKSk7ZWxzZSBmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSluLnB1c2goWyJiX3B0ciIsYSwiPXMwKiIsZVthXV0uam9pbigiIikpO3ImJm4ucHVzaCgicGl2b3RfcHRyPTAiKSxuLnB1c2goInB0cl9zaGlmdD1vZmZzZXQiKTtmb3IoYT10Lmxlbmd0aC0xO2E+PTA7LS1hKXswIT09KG89dFthXSkmJm4ucHVzaChbImZvcihpIixvLCI9MDtpIixvLCI8biIsbywiOysraSIsbywiKXsiXS5qb2luKCIiKSl9aWYoZS5sZW5ndGg+MSlmb3IoYT0wO2E8ZS5sZW5ndGg7KythKW4ucHVzaChbInB0ciIsYSwiPWJfcHRyIixhLCIrcHRyX3NoaWZ0Il0uam9pbigiIikpO24ucHVzaChpKSxyJiZuLnB1c2goIisrcGl2b3RfcHRyIik7Zm9yKGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG87MCE9PShvPXRbYV0pJiYoZS5sZW5ndGg+MT9uLnB1c2goInB0cl9zaGlmdCs9ZCIrbyk6bi5wdXNoKCJwdHIwKz1kIitvKSxuLnB1c2goIn0iKSl9fWZ1bmN0aW9uIHkoZSxyLGksYSl7aWYoMT09PXIubGVuZ3RoKW4ucHVzaCgicHRyMD0iK2QoclswXSkpO2Vsc2V7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDsrK28pbi5wdXNoKFsiYl9wdHIiLG8sIj1zMCoiLHJbb11dLmpvaW4oIiIpKTtuLnB1c2goInB0cl9zaGlmdD1vZmZzZXQiKX1pJiZuLnB1c2goInBpdm90X3B0cj0wIiksZSYmbi5wdXNoKGUrIjoiKTtmb3Iobz0xO288dC5sZW5ndGg7KytvKW4ucHVzaChbImZvcihpIixvLCI9MDtpIixvLCI8biIsbywiOysraSIsbywiKXsiXS5qb2luKCIiKSk7aWYoci5sZW5ndGg+MSlmb3Iobz0wO288ci5sZW5ndGg7KytvKW4ucHVzaChbInB0ciIsbywiPWJfcHRyIixvLCIrcHRyX3NoaWZ0Il0uam9pbigiIikpO24ucHVzaChhKTtmb3Iobz10Lmxlbmd0aC0xO28+PTE7LS1vKWkmJm4ucHVzaCgicGl2b3RfcHRyKz1mIitvKSxyLmxlbmd0aD4xP24ucHVzaCgicHRyX3NoaWZ0Kz1lIitvKTpuLnB1c2goInB0cjArPWUiK28pLG4ucHVzaCgifSIpfWZ1bmN0aW9uIHgoKXt0Lmxlbmd0aD4xJiZjJiZuLnB1c2goImZyZWUocGl2b3QxKSIsImZyZWUocGl2b3QyKSIpfWZ1bmN0aW9uIGIoZSxyKXt2YXIgaT0iZWwiK2UsYT0iZWwiK3I7aWYodC5sZW5ndGg+MSl7dmFyIG89Il9fbCIrICsrdTt5KG8sW2ksYV0sITEsWyJjb21wPSIsZygicHRyMCIpLCItIixnKCJwdHIxIiksIlxuIiwiaWYoY29tcD4wKXt0bXAwPSIsaSwiOyIsaSwiPSIsYSwiOyIsYSwiPXRtcDA7YnJlYWsgIixvLCJ9XG4iLCJpZihjb21wPDApe2JyZWFrICIsbywifSJdLmpvaW4oIiIpKX1lbHNlIG4ucHVzaChbImlmKCIsZyhkKGkpKSwiPiIsZyhkKGEpKSwiKXt0bXAwPSIsaSwiOyIsaSwiPSIsYSwiOyIsYSwiPXRtcDB9Il0uam9pbigiIikpfWZ1bmN0aW9uIF8oZSxyKXt0Lmxlbmd0aD4xP3YoW2Uscl0sITEsbSgicHRyMCIsZygicHRyMSIpKSk6bi5wdXNoKG0oZChlKSxnKGQocikpKSl9ZnVuY3Rpb24gdyhlLHIsaSl7aWYodC5sZW5ndGg+MSl7dmFyIGE9Il9fbCIrICsrdTt5KGEsW3JdLCEwLFtlLCI9IixnKCJwdHIwIiksIi1waXZvdCIsaSwiW3Bpdm90X3B0cl1cbiIsImlmKCIsZSwiIT09MCl7YnJlYWsgIixhLCJ9Il0uam9pbigiIikpfWVsc2Ugbi5wdXNoKFtlLCI9IixnKGQocikpLCItcGl2b3QiLGldLmpvaW4oIiIpKX1mdW5jdGlvbiBUKGUscil7dC5sZW5ndGg+MT92KFtlLHJdLCExLFsidG1wPSIsZygicHRyMCIpLCJcbiIsbSgicHRyMCIsZygicHRyMSIpKSwiXG4iLG0oInB0cjEiLCJ0bXAiKV0uam9pbigiIikpOm4ucHVzaChbInB0cjA9IixkKGUpLCJcbiIsInB0cjE9IixkKHIpLCJcbiIsInRtcD0iLGcoInB0cjAiKSwiXG4iLG0oInB0cjAiLGcoInB0cjEiKSksIlxuIixtKCJwdHIxIiwidG1wIildLmpvaW4oIiIpKX1mdW5jdGlvbiBrKGUscixpKXt0Lmxlbmd0aD4xPyh2KFtlLHIsaV0sITEsWyJ0bXA9IixnKCJwdHIwIiksIlxuIixtKCJwdHIwIixnKCJwdHIxIikpLCJcbiIsbSgicHRyMSIsZygicHRyMiIpKSwiXG4iLG0oInB0cjIiLCJ0bXAiKV0uam9pbigiIikpLG4ucHVzaCgiKysiK3IsIi0tIitpKSk6bi5wdXNoKFsicHRyMD0iLGQoZSksIlxuIiwicHRyMT0iLGQociksIlxuIiwicHRyMj0iLGQoaSksIlxuIiwiKysiLHIsIlxuIiwiLS0iLGksIlxuIiwidG1wPSIsZygicHRyMCIpLCJcbiIsbSgicHRyMCIsZygicHRyMSIpKSwiXG4iLG0oInB0cjEiLGcoInB0cjIiKSksIlxuIixtKCJwdHIyIiwidG1wIildLmpvaW4oIiIpKX1mdW5jdGlvbiBNKHQsZSl7VCh0LGUpLG4ucHVzaCgiLS0iK2UpfWZ1bmN0aW9uIEEoZSxyLGkpe3QubGVuZ3RoPjE/dihbZSxyXSwhMCxbbSgicHRyMCIsZygicHRyMSIpKSwiXG4iLG0oInB0cjEiLFsicGl2b3QiLGksIltwaXZvdF9wdHJdIl0uam9pbigiIikpXS5qb2luKCIiKSk6bi5wdXNoKG0oZChlKSxnKGQocikpKSxtKGQociksInBpdm90IitpKSl9ZnVuY3Rpb24gUyhlLHIpe24ucHVzaChbImlmKCgiLHIsIi0iLGUsIik8PSIsaSwiKXtcbiIsImluc2VydGlvblNvcnQoIixlLCIsIixyLCIsZGF0YSxvZmZzZXQsIixvKHQubGVuZ3RoKS5qb2luKCIsIiksIilcbiIsIn1lbHNle1xuIixzLCIoIixlLCIsIixyLCIsZGF0YSxvZmZzZXQsIixvKHQubGVuZ3RoKS5qb2luKCIsIiksIilcbiIsIn0iXS5qb2luKCIiKSl9ZnVuY3Rpb24gRShlLHIsaSl7dC5sZW5ndGg+MT8obi5wdXNoKFsiX19sIiwrK3UsIjp3aGlsZSh0cnVlKXsiXS5qb2luKCIiKSksdihbZV0sITAsWyJpZigiLGcoInB0cjAiKSwiIT09cGl2b3QiLHIsIltwaXZvdF9wdHJdKXticmVhayBfX2wiLHUsIn0iXS5qb2luKCIiKSksbi5wdXNoKGksIn0iKSk6bi5wdXNoKFsid2hpbGUoIixnKGQoZSkpLCI9PT1waXZvdCIsciwiKXsiLGksIn0iXS5qb2luKCIiKSl9cmV0dXJuIG4ucHVzaCgidmFyICIraC5qb2luKCIsIikpLGIoMSwyKSxiKDQsNSksYigxLDMpLGIoMiwzKSxiKDEsNCksYigzLDQpLGIoMiw1KSxiKDIsMyksYig0LDUpLHQubGVuZ3RoPjE/dihbImVsMSIsImVsMiIsImVsMyIsImVsNCIsImVsNSIsImluZGV4MSIsImluZGV4MyIsImluZGV4NSJdLCEwLFsicGl2b3QxW3Bpdm90X3B0cl09IixnKCJwdHIxIiksIlxuIiwicGl2b3QyW3Bpdm90X3B0cl09IixnKCJwdHIzIiksIlxuIiwicGl2b3RzX2FyZV9lcXVhbD1waXZvdHNfYXJlX2VxdWFsJiYocGl2b3QxW3Bpdm90X3B0cl09PT1waXZvdDJbcGl2b3RfcHRyXSlcbiIsIng9IixnKCJwdHIwIiksIlxuIiwieT0iLGcoInB0cjIiKSwiXG4iLCJ6PSIsZygicHRyNCIpLCJcbiIsbSgicHRyNSIsIngiKSwiXG4iLG0oInB0cjYiLCJ5IiksIlxuIixtKCJwdHI3IiwieiIpXS5qb2luKCIiKSk6bi5wdXNoKFsicGl2b3QxPSIsZyhkKCJlbDIiKSksIlxuIiwicGl2b3QyPSIsZyhkKCJlbDQiKSksIlxuIiwicGl2b3RzX2FyZV9lcXVhbD1waXZvdDE9PT1waXZvdDJcbiIsIng9IixnKGQoImVsMSIpKSwiXG4iLCJ5PSIsZyhkKCJlbDMiKSksIlxuIiwiej0iLGcoZCgiZWw1IikpLCJcbiIsbShkKCJpbmRleDEiKSwieCIpLCJcbiIsbShkKCJpbmRleDMiKSwieSIpLCJcbiIsbShkKCJpbmRleDUiKSwieiIpXS5qb2luKCIiKSksXygiaW5kZXgyIiwibGVmdCIpLF8oImluZGV4NCIsInJpZ2h0Iiksbi5wdXNoKCJpZihwaXZvdHNfYXJlX2VxdWFsKXsiKSxuLnB1c2goImZvcihrPWxlc3M7azw9Z3JlYXQ7KytrKXsiKSx3KCJjb21wIiwiayIsMSksbi5wdXNoKCJpZihjb21wPT09MCl7Y29udGludWV9Iiksbi5wdXNoKCJpZihjb21wPDApeyIpLG4ucHVzaCgiaWYoayE9PWxlc3MpeyIpLFQoImsiLCJsZXNzIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCIrK2xlc3MiKSxuLnB1c2goIn1lbHNleyIpLG4ucHVzaCgid2hpbGUodHJ1ZSl7IiksdygiY29tcCIsImdyZWF0IiwxKSxuLnB1c2goImlmKGNvbXA+MCl7Iiksbi5wdXNoKCJncmVhdC0tIiksbi5wdXNoKCJ9ZWxzZSBpZihjb21wPDApeyIpLGsoImsiLCJsZXNzIiwiZ3JlYXQiKSxuLnB1c2goImJyZWFrIiksbi5wdXNoKCJ9ZWxzZXsiKSxNKCJrIiwiZ3JlYXQiKSxuLnB1c2goImJyZWFrIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9ZWxzZXsiKSxuLnB1c2goImZvcihrPWxlc3M7azw9Z3JlYXQ7KytrKXsiKSx3KCJjb21wX3Bpdm90MSIsImsiLDEpLG4ucHVzaCgiaWYoY29tcF9waXZvdDE8MCl7Iiksbi5wdXNoKCJpZihrIT09bGVzcyl7IiksVCgiayIsImxlc3MiKSxuLnB1c2goIn0iKSxuLnB1c2goIisrbGVzcyIpLG4ucHVzaCgifWVsc2V7IiksdygiY29tcF9waXZvdDIiLCJrIiwyKSxuLnB1c2goImlmKGNvbXBfcGl2b3QyPjApeyIpLG4ucHVzaCgid2hpbGUodHJ1ZSl7IiksdygiY29tcCIsImdyZWF0IiwyKSxuLnB1c2goImlmKGNvbXA+MCl7Iiksbi5wdXNoKCJpZigtLWdyZWF0PGspe2JyZWFrfSIpLG4ucHVzaCgiY29udGludWUiKSxuLnB1c2goIn1lbHNleyIpLHcoImNvbXAiLCJncmVhdCIsMSksbi5wdXNoKCJpZihjb21wPDApeyIpLGsoImsiLCJsZXNzIiwiZ3JlYXQiKSxuLnB1c2goIn1lbHNleyIpLE0oImsiLCJncmVhdCIpLG4ucHVzaCgifSIpLG4ucHVzaCgiYnJlYWsiKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxBKCJsZWZ0IiwiKGxlc3MtMSkiLDEpLEEoInJpZ2h0IiwiKGdyZWF0KzEpIiwyKSxTKCJsZWZ0IiwiKGxlc3MtMikiKSxTKCIoZ3JlYXQrMikiLCJyaWdodCIpLG4ucHVzaCgiaWYocGl2b3RzX2FyZV9lcXVhbCl7IikseCgpLG4ucHVzaCgicmV0dXJuIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJpZihsZXNzPGluZGV4MSYmZ3JlYXQ+aW5kZXg1KXsiKSxFKCJsZXNzIiwxLCIrK2xlc3MiKSxFKCJncmVhdCIsMiwiLS1ncmVhdCIpLG4ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLHcoImNvbXBfcGl2b3QxIiwiayIsMSksbi5wdXNoKCJpZihjb21wX3Bpdm90MT09PTApeyIpLG4ucHVzaCgiaWYoayE9PWxlc3MpeyIpLFQoImsiLCJsZXNzIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCIrK2xlc3MiKSxuLnB1c2goIn1lbHNleyIpLHcoImNvbXBfcGl2b3QyIiwiayIsMiksbi5wdXNoKCJpZihjb21wX3Bpdm90Mj09PTApeyIpLG4ucHVzaCgid2hpbGUodHJ1ZSl7IiksdygiY29tcCIsImdyZWF0IiwyKSxuLnB1c2goImlmKGNvbXA9PT0wKXsiKSxuLnB1c2goImlmKC0tZ3JlYXQ8ayl7YnJlYWt9Iiksbi5wdXNoKCJjb250aW51ZSIpLG4ucHVzaCgifWVsc2V7IiksdygiY29tcCIsImdyZWF0IiwxKSxuLnB1c2goImlmKGNvbXA8MCl7IiksaygiayIsImxlc3MiLCJncmVhdCIpLG4ucHVzaCgifWVsc2V7IiksTSgiayIsImdyZWF0Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJicmVhayIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLHgoKSxTKCJsZXNzIiwiZ3JlYXQiKSxuLnB1c2goIn1yZXR1cm4gIitzKSx0Lmxlbmd0aD4xJiZjP25ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsIm1hbGxvYyIsImZyZWUiLG4uam9pbigiXG4iKSkocixjWzBdLGNbMV0pOm5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsbi5qb2luKCJcbiIpKShyKX0odCxlLHYpO3JldHVybiBtKHYseSl9fSx7InR5cGVkYXJyYXktcG9vbCI6NTY3fV0sNDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2NvbXBpbGVfc29ydC5qcyIpLGk9e307ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQub3JkZXIscj10LmR0eXBlLGE9W2Uscl0uam9pbigiOiIpLG89aVthXTtyZXR1cm4gb3x8KGlbYV09bz1uKGUscikpLG8odCksdH19LHsiLi9saWIvY29tcGlsZV9zb3J0LmpzIjo0Njd9XSw0Njk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJpb3RhLWFycmF5IiksaT10KCJpcy1idWZmZXIiKSxhPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIHMoKXt2YXIgdCxlPXRoaXMuc3RyaWRlLHI9bmV3IEFycmF5KGUubGVuZ3RoKTtmb3IodD0wO3Q8ci5sZW5ndGg7Kyt0KXJbdF09W01hdGguYWJzKGVbdF0pLHRdO3Iuc29ydChvKTt2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpO2Zvcih0PTA7dDxuLmxlbmd0aDsrK3Qpblt0XT1yW3RdWzFdO3JldHVybiBufWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1bIlZpZXciLGUsImQiLHRdLmpvaW4oIiIpO2U8MCYmKHI9IlZpZXdfTmlsIit0KTt2YXIgaT0iZ2VuZXJpYyI9PT10O2lmKC0xPT09ZSl7dmFyIGE9ImZ1bmN0aW9uICIrcisiKGEpe3RoaXMuZGF0YT1hO307dmFyIHByb3RvPSIrcisiLnByb3RvdHlwZTtwcm90by5kdHlwZT0nIit0KyInO3Byb3RvLmluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIC0xfTtwcm90by5zaXplPTA7cHJvdG8uZGltZW5zaW9uPS0xO3Byb3RvLnNoYXBlPXByb3RvLnN0cmlkZT1wcm90by5vcmRlcj1bXTtwcm90by5sbz1wcm90by5oaT1wcm90by50cmFuc3Bvc2U9cHJvdG8uc3RlcD1mdW5jdGlvbigpe3JldHVybiBuZXcgIityKyIodGhpcy5kYXRhKTt9O3Byb3RvLmdldD1wcm90by5zZXQ9ZnVuY3Rpb24oKXt9O3Byb3RvLnBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihhKXtyZXR1cm4gbmV3ICIrcisiKGEpO30iO3JldHVybiBuZXcgRnVuY3Rpb24oYSkoKX1pZigwPT09ZSl7YT0iZnVuY3Rpb24gIityKyIoYSxkKSB7dGhpcy5kYXRhID0gYTt0aGlzLm9mZnNldCA9IGR9O3ZhciBwcm90bz0iK3IrIi5wcm90b3R5cGU7cHJvdG8uZHR5cGU9JyIrdCsiJztwcm90by5pbmRleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldH07cHJvdG8uZGltZW5zaW9uPTA7cHJvdG8uc2l6ZT0xO3Byb3RvLnNoYXBlPXByb3RvLnN0cmlkZT1wcm90by5vcmRlcj1bXTtwcm90by5sbz1wcm90by5oaT1wcm90by50cmFuc3Bvc2U9cHJvdG8uc3RlcD1mdW5jdGlvbiAiK3IrIl9jb3B5KCkge3JldHVybiBuZXcgIityKyIodGhpcy5kYXRhLHRoaXMub2Zmc2V0KX07cHJvdG8ucGljaz1mdW5jdGlvbiAiK3IrIl9waWNrKCl7cmV0dXJuIFRyaXZpYWxBcnJheSh0aGlzLmRhdGEpO307cHJvdG8udmFsdWVPZj1wcm90by5nZXQ9ZnVuY3Rpb24gIityKyJfZ2V0KCl7cmV0dXJuICIrKGk/InRoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQpIjoidGhpcy5kYXRhW3RoaXMub2Zmc2V0XSIpKyJ9O3Byb3RvLnNldD1mdW5jdGlvbiAiK3IrIl9zZXQodil7cmV0dXJuICIrKGk/InRoaXMuZGF0YS5zZXQodGhpcy5vZmZzZXQsdikiOiJ0aGlzLmRhdGFbdGhpcy5vZmZzZXRdPXYiKSsifTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0XyIrcisiKGEsYixjLGQpe3JldHVybiBuZXcgIityKyIoYSxkKX0iO3JldHVybiBuZXcgRnVuY3Rpb24oIlRyaXZpYWxBcnJheSIsYSkoY1t0XVswXSl9YT1bIid1c2Ugc3RyaWN0JyJdO3ZhciBvPW4oZSksbD1vLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImkiK3R9KSksdT0idGhpcy5vZmZzZXQrIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInRoaXMuc3RyaWRlWyIrdCsiXSppIit0fSkpLmpvaW4oIisiKSxoPW8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iYiIrdH0pKS5qb2luKCIsIiksZj1vLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImMiK3R9KSkuam9pbigiLCIpO2EucHVzaCgiZnVuY3Rpb24gIityKyIoYSwiK2grIiwiK2YrIixkKXt0aGlzLmRhdGE9YSIsInRoaXMuc2hhcGU9WyIraCsiXSIsInRoaXMuc3RyaWRlPVsiK2YrIl0iLCJ0aGlzLm9mZnNldD1kfDB9IiwidmFyIHByb3RvPSIrcisiLnByb3RvdHlwZSIsInByb3RvLmR0eXBlPSciK3QrIiciLCJwcm90by5kaW1lbnNpb249IitlKSxhLnB1c2goIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnc2l6ZScse2dldDpmdW5jdGlvbiAiK3IrIl9zaXplKCl7cmV0dXJuICIrby5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJ0aGlzLnNoYXBlWyIrdCsiXSJ9KSkuam9pbigiKiIpLCJ9fSkiKSwxPT09ZT9hLnB1c2goInByb3RvLm9yZGVyPVswXSIpOihhLnB1c2goIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnb3JkZXInLHtnZXQ6IiksZTw0PyhhLnB1c2goImZ1bmN0aW9uICIrcisiX29yZGVyKCl7IiksMj09PWU/YS5wdXNoKCJyZXR1cm4gKE1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKT5NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSkpP1sxLDBdOlswLDFdfX0pIik6Mz09PWUmJmEucHVzaCgidmFyIHMwPU1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKSxzMT1NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSksczI9TWF0aC5hYnModGhpcy5zdHJpZGVbMl0pO2lmKHMwPnMxKXtpZihzMT5zMil7cmV0dXJuIFsyLDEsMF07fWVsc2UgaWYoczA+czIpe3JldHVybiBbMSwyLDBdO31lbHNle3JldHVybiBbMSwwLDJdO319ZWxzZSBpZihzMD5zMil7cmV0dXJuIFsyLDAsMV07fWVsc2UgaWYoczI+czEpe3JldHVybiBbMCwxLDJdO31lbHNle3JldHVybiBbMCwyLDFdO319fSkiKSk6YS5wdXNoKCJPUkRFUn0pIikpLGEucHVzaCgicHJvdG8uc2V0PWZ1bmN0aW9uICIrcisiX3NldCgiK2wuam9pbigiLCIpKyIsdil7IiksaT9hLnB1c2goInJldHVybiB0aGlzLmRhdGEuc2V0KCIrdSsiLHYpfSIpOmEucHVzaCgicmV0dXJuIHRoaXMuZGF0YVsiK3UrIl09dn0iKSxhLnB1c2goInByb3RvLmdldD1mdW5jdGlvbiAiK3IrIl9nZXQoIitsLmpvaW4oIiwiKSsiKXsiKSxpP2EucHVzaCgicmV0dXJuIHRoaXMuZGF0YS5nZXQoIit1KyIpfSIpOmEucHVzaCgicmV0dXJuIHRoaXMuZGF0YVsiK3UrIl19IiksYS5wdXNoKCJwcm90by5pbmRleD1mdW5jdGlvbiAiK3IrIl9pbmRleCgiLGwuam9pbigpLCIpe3JldHVybiAiK3UrIn0iKSxhLnB1c2goInByb3RvLmhpPWZ1bmN0aW9uICIrcisiX2hpKCIrbC5qb2luKCIsIikrIil7cmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuWyIodHlwZW9mIGkiLHQsIiE9PSdudW1iZXInfHxpIix0LCI8MCk/dGhpcy5zaGFwZVsiLHQsIl06aSIsdCwifDAiXS5qb2luKCIiKX0pKS5qb2luKCIsIikrIiwiK28ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4idGhpcy5zdHJpZGVbIit0KyJdIn0pKS5qb2luKCIsIikrIix0aGlzLm9mZnNldCl9Iik7dmFyIHA9by5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJhIit0KyI9dGhpcy5zaGFwZVsiK3QrIl0ifSkpLGQ9by5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJjIit0KyI9dGhpcy5zdHJpZGVbIit0KyJdIn0pKTthLnB1c2goInByb3RvLmxvPWZ1bmN0aW9uICIrcisiX2xvKCIrbC5qb2luKCIsIikrIil7dmFyIGI9dGhpcy5vZmZzZXQsZD0wLCIrcC5qb2luKCIsIikrIiwiK2Quam9pbigiLCIpKTtmb3IodmFyIGc9MDtnPGU7KytnKWEucHVzaCgiaWYodHlwZW9mIGkiK2crIj09PSdudW1iZXInJiZpIitnKyI+PTApe2Q9aSIrZysifDA7Yis9YyIrZysiKmQ7YSIrZysiLT1kfSIpO2EucHVzaCgicmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImEiK3R9KSkuam9pbigiLCIpKyIsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImMiK3R9KSkuam9pbigiLCIpKyIsYil9IiksYS5wdXNoKCJwcm90by5zdGVwPWZ1bmN0aW9uICIrcisiX3N0ZXAoIitsLmpvaW4oIiwiKSsiKXt2YXIgIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImEiK3QrIj10aGlzLnNoYXBlWyIrdCsiXSJ9KSkuam9pbigiLCIpKyIsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuImIiK3QrIj10aGlzLnN0cmlkZVsiK3QrIl0ifSkpLmpvaW4oIiwiKSsiLGM9dGhpcy5vZmZzZXQsZD0wLGNlaWw9TWF0aC5jZWlsIik7Zm9yKGc9MDtnPGU7KytnKWEucHVzaCgiaWYodHlwZW9mIGkiK2crIj09PSdudW1iZXInKXtkPWkiK2crInwwO2lmKGQ8MCl7Yys9YiIrZysiKihhIitnKyItMSk7YSIrZysiPWNlaWwoLWEiK2crIi9kKX1lbHNle2EiK2crIj1jZWlsKGEiK2crIi9kKX1iIitnKyIqPWR9Iik7YS5wdXNoKCJyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSwiK28ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdH0pKS5qb2luKCIsIikrIiwiK28ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iYiIrdH0pKS5qb2luKCIsIikrIixjKX0iKTt2YXIgbT1uZXcgQXJyYXkoZSksdj1uZXcgQXJyYXkoZSk7Zm9yKGc9MDtnPGU7KytnKW1bZ109ImFbaSIrZysiXSIsdltnXT0iYltpIitnKyJdIjthLnB1c2goInByb3RvLnRyYW5zcG9zZT1mdW5jdGlvbiAiK3IrIl90cmFuc3Bvc2UoIitsKyIpeyIrbC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIj0oIit0KyI9PT11bmRlZmluZWQ/IitlKyI6Iit0KyJ8MCkifSkpLmpvaW4oIjsiKSwidmFyIGE9dGhpcy5zaGFwZSxiPXRoaXMuc3RyaWRlO3JldHVybiBuZXcgIityKyIodGhpcy5kYXRhLCIrbS5qb2luKCIsIikrIiwiK3Yuam9pbigiLCIpKyIsdGhpcy5vZmZzZXQpfSIpLGEucHVzaCgicHJvdG8ucGljaz1mdW5jdGlvbiAiK3IrIl9waWNrKCIrbCsiKXt2YXIgYT1bXSxiPVtdLGM9dGhpcy5vZmZzZXQiKTtmb3IoZz0wO2c8ZTsrK2cpYS5wdXNoKCJpZih0eXBlb2YgaSIrZysiPT09J251bWJlcicmJmkiK2crIj49MCl7Yz0oYyt0aGlzLnN0cmlkZVsiK2crIl0qaSIrZysiKXwwfWVsc2V7YS5wdXNoKHRoaXMuc2hhcGVbIitnKyJdKTtiLnB1c2godGhpcy5zdHJpZGVbIitnKyJdKX0iKTtyZXR1cm4gYS5wdXNoKCJ2YXIgY3Rvcj1DVE9SX0xJU1RbYS5sZW5ndGgrMV07cmV0dXJuIGN0b3IodGhpcy5kYXRhLGEsYixjKX0iKSxhLnB1c2goInJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfIityKyIoZGF0YSxzaGFwZSxzdHJpZGUsb2Zmc2V0KXtyZXR1cm4gbmV3ICIrcisiKGRhdGEsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInNoYXBlWyIrdCsiXSJ9KSkuam9pbigiLCIpKyIsIitvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInN0cmlkZVsiK3QrIl0ifSkpLmpvaW4oIiwiKSsiLG9mZnNldCl9IiksbmV3IEZ1bmN0aW9uKCJDVE9SX0xJU1QiLCJPUkRFUiIsYS5qb2luKCJcbiIpKShjW3RdLHMpfXZhciBjPXtmbG9hdDMyOltdLGZsb2F0NjQ6W10saW50ODpbXSxpbnQxNjpbXSxpbnQzMjpbXSx1aW50ODpbXSx1aW50MTY6W10sdWludDMyOltdLGFycmF5OltdLHVpbnQ4X2NsYW1wZWQ6W10sYmlnaW50NjQ6W10sYmlndWludDY0OltdLGJ1ZmZlcjpbXSxnZW5lcmljOltdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09dClyZXR1cm4oMCxjLmFycmF5WzBdKShbXSk7Im51bWJlciI9PXR5cGVvZiB0JiYodD1bdF0pLHZvaWQgMD09PWUmJihlPVt0Lmxlbmd0aF0pO3ZhciBvPWUubGVuZ3RoO2lmKHZvaWQgMD09PXIpe3I9bmV3IEFycmF5KG8pO2Zvcih2YXIgcz1vLTEsdT0xO3M+PTA7LS1zKXJbc109dSx1Kj1lW3NdfWlmKHZvaWQgMD09PW4pe249MDtmb3Iocz0wO3M8bzsrK3MpcltzXTwwJiYobi09KGVbc10tMSkqcltzXSl9Zm9yKHZhciBoPWZ1bmN0aW9uKHQpe2lmKGkodCkpcmV0dXJuImJ1ZmZlciI7aWYoYSlzd2l0Y2goT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXtjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6cmV0dXJuImZsb2F0NjQiO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpyZXR1cm4iZmxvYXQzMiI7Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOnJldHVybiJpbnQ4IjtjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOnJldHVybiJpbnQxNiI7Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpyZXR1cm4iaW50MzIiO2Nhc2UiW29iamVjdCBVaW50OEFycmF5XSI6cmV0dXJuInVpbnQ4IjtjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpyZXR1cm4idWludDE2IjtjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4idWludDMyIjtjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpyZXR1cm4idWludDhfY2xhbXBlZCI7Y2FzZSJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIjpyZXR1cm4iYmlnaW50NjQiO2Nhc2UiW29iamVjdCBCaWdVaW50NjRBcnJheV0iOnJldHVybiJiaWd1aW50NjQifXJldHVybiBBcnJheS5pc0FycmF5KHQpPyJhcnJheSI6ImdlbmVyaWMifSh0KSxmPWNbaF07Zi5sZW5ndGg8PW8rMTspZi5wdXNoKGwoaCxmLmxlbmd0aC0xKSk7cmV0dXJuKDAsZltvKzFdKSh0LGUscixuKX19LHsiaW90YS1hcnJheSI6NDM3LCJpcy1idWZmZXIiOjQzOX1dLDQ3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkb3VibGUtYml0cyIpLGk9TWF0aC5wb3coMiwtMTA3NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47aWYodD09PWUpcmV0dXJuIHQ7aWYoMD09PXQpcmV0dXJuIGU8MD8taTppO3ZhciByPW4uaGkodCksYT1uLmxvKHQpO2U+dD09dD4wP2E9PT0tMT4+PjA/KHIrPTEsYT0wKTphKz0xOjA9PT1hPyhhPS0xPj4+MCxyLT0xKTphLT0xO3JldHVybiBuLnBhY2soYSxyKX19LHsiZG91YmxlLWJpdHMiOjE3M31dLDQ3MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguUEksaT1jKDEyMCk7ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm5bIkMiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXtyZXR1cm5bIkMiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfWZ1bmN0aW9uIHModCxlLHIsYSxvLGMsdSxoLGYscCl7aWYocClUPXBbMF0saz1wWzFdLF89cFsyXSx3PXBbM107ZWxzZXt2YXIgZD1sKHQsZSwtbyk7dD1kLngsZT1kLnk7dmFyIGc9KHQtKGg9KGQ9bChoLGYsLW8pKS54KSkvMixtPShlLShmPWQueSkpLzIsdj1nKmcvKHIqcikrbSptLyhhKmEpO3Y+MSYmKHIqPXY9TWF0aC5zcXJ0KHYpLGEqPXYpO3ZhciB5PXIqcix4PWEqYSxiPShjPT11Py0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp4LXkqbSptLXgqZypnKS8oeSptKm0reCpnKmcpKSk7Yj09MS8wJiYoYj0xKTt2YXIgXz1iKnIqbS9hKyh0K2gpLzIsdz1iKi1hKmcvcisoZStmKS8yLFQ9TWF0aC5hc2luKCgoZS13KS9hKS50b0ZpeGVkKDkpKSxrPU1hdGguYXNpbigoKGYtdykvYSkudG9GaXhlZCg5KSk7KFQ9dDxfP24tVDpUKTwwJiYoVD0yKm4rVCksKGs9aDxfP24tazprKTwwJiYoaz0yKm4rayksdSYmVD5rJiYoVC09MipuKSwhdSYmaz5UJiYoay09MipuKX1pZihNYXRoLmFicyhrLVQpPmkpe3ZhciBNPWssQT1oLFM9ZjtrPVQraSoodSYmaz5UPzE6LTEpO3ZhciBFPXMoaD1fK3IqTWF0aC5jb3MoayksZj13K2EqTWF0aC5zaW4oaykscixhLG8sMCx1LEEsUyxbayxNLF8sd10pfXZhciBDPU1hdGgudGFuKChrLVQpLzQpLEw9NC8zKnIqQyxQPTQvMyphKkMsST1bMip0LSh0K0wqTWF0aC5zaW4oVCkpLDIqZS0oZS1QKk1hdGguY29zKFQpKSxoK0wqTWF0aC5zaW4oayksZi1QKk1hdGguY29zKGspLGgsZl07aWYocClyZXR1cm4gSTtFJiYoST1JLmNvbmNhdChFKSk7Zm9yKHZhciB6PTA7ejxJLmxlbmd0aDspe3ZhciBPPWwoSVt6XSxJW3orMV0sbyk7SVt6KytdPU8ueCxJW3orK109Ty55fXJldHVybiBJfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybnt4OnQqTWF0aC5jb3MociktZSpNYXRoLnNpbihyKSx5OnQqTWF0aC5zaW4ocikrZSpNYXRoLmNvcyhyKX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdCoobi8xODApfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1bXSxuPTAsaT0wLGw9MCx1PTAsaD1udWxsLGY9bnVsbCxwPTAsZD0wLGc9MCxtPXQubGVuZ3RoO2c8bTtnKyspe3ZhciB2PXRbZ10seT12WzBdO3N3aXRjaCh5KXtjYXNlIk0iOmw9dlsxXSx1PXZbMl07YnJlYWs7Y2FzZSJBIjoodj1zKHAsZCx2WzFdLHZbMl0sYyh2WzNdKSx2WzRdLHZbNV0sdls2XSx2WzddKSkudW5zaGlmdCgiQyIpLHYubGVuZ3RoPjcmJihyLnB1c2godi5zcGxpY2UoMCw3KSksdi51bnNoaWZ0KCJDIikpO2JyZWFrO2Nhc2UiUyI6dmFyIHg9cCxiPWQ7IkMiIT1lJiYiUyIhPWV8fCh4Kz14LW4sYis9Yi1pKSx2PVsiQyIseCxiLHZbMV0sdlsyXSx2WzNdLHZbNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KGg9MipwLWgsZj0yKmQtZik6KGg9cCxmPWQpLHY9byhwLGQsaCxmLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJRIjpoPXZbMV0sZj12WzJdLHY9byhwLGQsdlsxXSx2WzJdLHZbM10sdls0XSk7YnJlYWs7Y2FzZSJMIjp2PWEocCxkLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJIIjp2PWEocCxkLHZbMV0sZCk7YnJlYWs7Y2FzZSJWIjp2PWEocCxkLHAsdlsxXSk7YnJlYWs7Y2FzZSJaIjp2PWEocCxkLGwsdSl9ZT15LHA9dlt2Lmxlbmd0aC0yXSxkPXZbdi5sZW5ndGgtMV0sdi5sZW5ndGg+ND8obj12W3YubGVuZ3RoLTRdLGk9dlt2Lmxlbmd0aC0zXSk6KG49cCxpPWQpLHIucHVzaCh2KX1yZXR1cm4gcn19LHt9XSw0NzI6W2Z1bmN0aW9uKHQsZSxyKXtyLnZlcnRleE5vcm1hbHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPXZvaWQgMD09PXI/MWUtNjpyLG89MDtvPG47KytvKWlbb109WzAsMCwwXTtmb3Iobz0wO288dC5sZW5ndGg7KytvKWZvcih2YXIgcz10W29dLGw9MCxjPXNbcy5sZW5ndGgtMV0sdT1zWzBdLGg9MDtoPHMubGVuZ3RoOysraCl7bD1jLGM9dSx1PXNbKGgrMSklcy5sZW5ndGhdO2Zvcih2YXIgZj1lW2xdLHA9ZVtjXSxkPWVbdV0sZz1uZXcgQXJyYXkoMyksbT0wLHY9bmV3IEFycmF5KDMpLHk9MCx4PTA7eDwzOysreClnW3hdPWZbeF0tcFt4XSxtKz1nW3hdKmdbeF0sdlt4XT1kW3hdLXBbeF0seSs9dlt4XSp2W3hdO2lmKG0qeT5hKXt2YXIgYj1pW2NdLF89MS9NYXRoLnNxcnQobSp5KTtmb3IoeD0wO3g8MzsrK3gpe3ZhciB3PSh4KzEpJTMsVD0oeCsyKSUzO2JbeF0rPV8qKHZbd10qZ1tUXS12W1RdKmdbd10pfX19Zm9yKG89MDtvPG47KytvKXtiPWlbb107dmFyIGs9MDtmb3IoeD0wO3g8MzsrK3gpays9Ylt4XSpiW3hdO2lmKGs+YSlmb3IoXz0xL01hdGguc3FydChrKSx4PTA7eDwzOysreCliW3hdKj1fO2Vsc2UgZm9yKHg9MDt4PDM7Kyt4KWJbeF09MH1yZXR1cm4gaX0sci5mYWNlTm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28pe2Zvcih2YXIgcz10W29dLGw9bmV3IEFycmF5KDMpLGM9MDtjPDM7KytjKWxbY109ZVtzW2NdXTt2YXIgdT1uZXcgQXJyYXkoMyksaD1uZXcgQXJyYXkoMyk7Zm9yKGM9MDtjPDM7KytjKXVbY109bFsxXVtjXS1sWzBdW2NdLGhbY109bFsyXVtjXS1sWzBdW2NdO3ZhciBmPW5ldyBBcnJheSgzKSxwPTA7Zm9yKGM9MDtjPDM7KytjKXt2YXIgZD0oYysxKSUzLGc9KGMrMiklMztmW2NdPXVbZF0qaFtnXS11W2ddKmhbZF0scCs9ZltjXSpmW2NdfXA9cD5hPzEvTWF0aC5zcXJ0KHApOjA7Zm9yKGM9MDtjPDM7KytjKWZbY10qPXA7aVtvXT1mfXJldHVybiBpfX0se31dLDQ3MzpbZnVuY3Rpb24odCxlLHIpewovKgpvYmplY3QtYXNzaWduCihjKSBTaW5kcmUgU29yaHVzCkBsaWNlbnNlIE1JVAoqLwoidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2Z1bmN0aW9uIG8odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciB0PW5ldyBTdHJpbmcoImFiYyIpO2lmKHRbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KVswXSlyZXR1cm4hMTtmb3IodmFyIGU9e30scj0wO3I8MTA7cisrKWVbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuW3RdPXR9KSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oIiIpfWNhdGNoKHQpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLHMsbD1vKHQpLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtmb3IodmFyIHUgaW4gcj1PYmplY3QoYXJndW1lbnRzW2NdKSlpLmNhbGwocix1KSYmKGxbdV09clt1XSk7aWYobil7cz1uKHIpO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKWEuY2FsbChyLHNbaF0pJiYobFtzW2hdXT1yW3NbaF1dKX19cmV0dXJuIGx9fSx7fV0sNDc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1lK2ErYztpZihoPjApe3ZhciBoPU1hdGguc3FydCh1KzEpO3RbMF09LjUqKG8tbCkvaCx0WzFdPS41KihzLW4pL2gsdFsyXT0uNSooci1hKS9oLHRbM109LjUqaH1lbHNle3ZhciBmPU1hdGgubWF4KGUsYSxjKTtoPU1hdGguc3FydCgyKmYtdSsxKTtlPj1mPyh0WzBdPS41KmgsdFsxXT0uNSooaStyKS9oLHRbMl09LjUqKHMrbikvaCx0WzNdPS41KihvLWwpL2gpOmE+PWY/KHRbMF09LjUqKHIraSkvaCx0WzFdPS41KmgsdFsyXT0uNSoobCtvKS9oLHRbM109LjUqKHMtbikvaCk6KHRbMF09LjUqKG4rcykvaCx0WzFdPS41KihvK2wpL2gsdFsyXT0uNSpoLHRbM109LjUqKHItaSkvaCl9cmV0dXJuIHR9fSx7fV0sNDc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSx1KHI9W10uc2xpY2UuY2FsbChyLDAsNCkscik7dmFyIGk9bmV3IGgocixlLE1hdGgubG9nKG4pKTtpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLCgiZXllImluIHR8fCJ1cCJpbiB0KSYmaS5sb29rQXQoMCx0LmV5ZSx0LmNlbnRlcix0LnVwKTtyZXR1cm4gaX07dmFyIG49dCgiZmlsdGVyZWQtdmVjdG9yIiksaT10KCJnbC1tYXQ0L2xvb2tBdCIpLGE9dCgiZ2wtbWF0NC9mcm9tUXVhdCIpLG89dCgiZ2wtbWF0NC9pbnZlcnQiKSxzPXQoIi4vbGliL3F1YXRGcm9tRnJhbWUiKTtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1jKHIsbixpLGEpO28+MWUtNj8odFswXT1yL28sdFsxXT1uL28sdFsyXT1pL28sdFszXT1hL28pOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gaCh0LGUscil7dGhpcy5yYWRpdXM9bihbcl0pLHRoaXMuY2VudGVyPW4oZSksdGhpcy5yb3RhdGlvbj1uKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIGY9aC5wcm90b3R5cGU7Zi5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy5yb3RhdGlvbi5sYXN0VCgpKX0sZi5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy5yb3RhdGlvbi5jdXJ2ZSh0KTt2YXIgZT10aGlzLmNvbXB1dGVkUm90YXRpb247dShlLGUpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7YShyLGUpO3ZhciBuPXRoaXMuY29tcHV0ZWRDZW50ZXIsaT10aGlzLmNvbXB1dGVkRXllLG89dGhpcy5jb21wdXRlZFVwLHM9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7aVswXT1uWzBdK3MqclsyXSxpWzFdPW5bMV0rcypyWzZdLGlbMl09blsyXStzKnJbMTBdLG9bMF09clsxXSxvWzFdPXJbNV0sb1syXT1yWzldO2Zvcih2YXIgbD0wO2w8MzsrK2wpe2Zvcih2YXIgYz0wLGg9MDtoPDM7KytoKWMrPXJbbCs0KmhdKmlbaF07clsxMitsXT0tY319LGYuZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9LGYuaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5yb3RhdGlvbi5pZGxlKHQpfSxmLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMucm90YXRpb24uZmx1c2godCl9LGYucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZXx8MCxyPXJ8fDAsbj1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzFdLG89aVs1XSxzPWlbOV0sYz1sKGEsbyxzKTthLz1jLG8vPWMscy89Yzt2YXIgdT1pWzBdLGg9aVs0XSxmPWlbOF0scD11KmEraCpvK2YqcyxkPWwodS09YSpwLGgtPW8qcCxmLT1zKnApO3UvPWQsaC89ZCxmLz1kO3ZhciBnPWlbMl0sbT1pWzZdLHY9aVsxMF0seT1nKmErbSpvK3Yqcyx4PWcqdSttKmgrdipmLGI9bChnLT15KmEreCp1LG0tPXkqbyt4Kmgsdi09eSpzK3gqZik7Zy89YixtLz1iLHYvPWI7dmFyIF89dSplK2Eqcix3PWgqZStvKnIsVD1mKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxfLHcsVCk7dmFyIGs9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7az1NYXRoLm1heCgxZS00LGsrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coaykpfSxmLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fDAscj1yfHwwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzBdLG89aVs0XSxzPWlbOF0sdT1pWzFdLGg9aVs1XSxmPWlbOV0scD1pWzJdLGQ9aVs2XSxnPWlbMTBdLG09ZSphK3IqdSx2PWUqbytyKmgseT1lKnMrcipmLHg9LShkKnktZyp2KSxiPS0oZyptLXAqeSksXz0tKHAqdi1kKm0pLHc9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KGIsMiktTWF0aC5wb3coXywyKSkpLFQ9Yyh4LGIsXyx3KTtUPjFlLTY/KHgvPVQsYi89VCxfLz1ULHcvPVQpOih4PWI9Xz0wLHc9MSk7dmFyIGs9dGhpcy5jb21wdXRlZFJvdGF0aW9uLE09a1swXSxBPWtbMV0sUz1rWzJdLEU9a1szXSxDPU0qdytFKngrQSpfLVMqYixMPUEqdytFKmIrUyp4LU0qXyxQPVMqdytFKl8rTSpiLUEqeCxJPUUqdy1NKngtQSpiLVMqXztpZihuKXt4PXAsYj1kLF89Zzt2YXIgej1NYXRoLnNpbihuKS9sKHgsYixfKTt4Kj16LGIqPXosXyo9eixJPUkqKHc9TWF0aC5jb3MoZSkpLShDPUMqdytJKngrTCpfLVAqYikqeC0oTD1MKncrSSpiK1AqeC1DKl8pKmItKFA9UCp3K0kqXytDKmItTCp4KSpffXZhciBPPWMoQyxMLFAsSSk7Tz4xZS02PyhDLz1PLEwvPU8sUC89TyxJLz1PKTooQz1MPVA9MCxJPTEpLHRoaXMucm90YXRpb24uc2V0KHQsQyxMLFAsSSl9LGYubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixlPWV8fHRoaXMuY29tcHV0ZWRFeWUsbj1ufHx0aGlzLmNvbXB1dGVkVXA7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeDtpKGEsZSxyLG4pO3ZhciBvPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtzKG8sYVswXSxhWzFdLGFbMl0sYVs0XSxhWzVdLGFbNl0sYVs4XSxhWzldLGFbMTBdKSx1KG8sbyksdGhpcy5yb3RhdGlvbi5zZXQodCxvWzBdLG9bMV0sb1syXSxvWzNdKTtmb3IodmFyIGw9MCxjPTA7YzwzOysrYylsKz1NYXRoLnBvdyhyW2NdLWVbY10sMik7dGhpcy5yYWRpdXMuc2V0KHQsLjUqTWF0aC5sb2coTWF0aC5tYXgobCwxZS02KSkpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKX0sZi50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0sZi5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbXB1dGVkUm90YXRpb247cyhyLGVbMF0sZVsxXSxlWzJdLGVbNF0sZVs1XSxlWzZdLGVbOF0sZVs5XSxlWzEwXSksdShyLHIpLHRoaXMucm90YXRpb24uc2V0KHQsclswXSxyWzFdLHJbMl0sclszXSk7dmFyIG49dGhpcy5jb21wdXRlZE1hdHJpeDtvKG4sZSk7dmFyIGk9blsxNV07aWYoTWF0aC5hYnMoaSk+MWUtNil7dmFyIGE9blsxMl0vaSxsPW5bMTNdL2ksYz1uWzE0XS9pO3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBoPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLnNldCh0LGEtblsyXSpoLGwtbls2XSpoLGMtblsxMF0qaCksdGhpcy5yYWRpdXMuaWRsZSh0KX1lbHNlIHRoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KX0sZi5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxmLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dD10PjA/TWF0aC5sb2codCk6LTEvMCxlPWU+MD9NYXRoLmxvZyhlKToxLzAsZT1NYXRoLm1heChlLHQpLHRoaXMucmFkaXVzLmJvdW5kc1swXVswXT10LHRoaXMucmFkaXVzLmJvdW5kc1sxXVswXT1lfSxmLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmFkaXVzLmJvdW5kcztyZXR1cm4gdD8odFswXT1NYXRoLmV4cChlWzBdWzBdKSx0WzFdPU1hdGguZXhwKGVbMV1bMF0pLHQpOltNYXRoLmV4cChlWzBdWzBdKSxNYXRoLmV4cChlWzFdWzBdKV19LGYudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjYWxjTWF0cml4KHRoaXMubGFzdFQoKSkse2NlbnRlcjp0aGlzLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCkscm90YXRpb246dGhpcy5jb21wdXRlZFJvdGF0aW9uLnNsaWNlKCksZGlzdGFuY2U6TWF0aC5sb2codGhpcy5jb21wdXRlZFJhZGl1c1swXSksem9vbU1pbjp0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF0sem9vbU1heDp0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF19fSxmLmZyb21KU09OPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXQuY2VudGVyO3ImJnRoaXMuY2VudGVyLnNldChlLHJbMF0sclsxXSxyWzJdKTt2YXIgbj10LnJvdGF0aW9uO24mJnRoaXMucm90YXRpb24uc2V0KGUsblswXSxuWzFdLG5bMl0sblszXSk7dmFyIGk9dC5kaXN0YW5jZTtpJiZpPjAmJnRoaXMucmFkaXVzLnNldChlLE1hdGgubG9nKGkpKSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpfX0seyIuL2xpYi9xdWF0RnJvbUZyYW1lIjo0NzQsImZpbHRlcmVkLXZlY3RvciI6MjQyLCJnbC1tYXQ0L2Zyb21RdWF0IjoyNzUsImdsLW1hdDQvaW52ZXJ0IjoyNzgsImdsLW1hdDQvbG9va0F0IjoyNzl9XSw0NzY6W2Z1bmN0aW9uKHQsZSxyKXsKLyohCiAqIHBhZC1sZWZ0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9wYWQtbGVmdD4KICoKICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LgogKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqLwoidXNlIHN0cmljdCI7dmFyIG49dCgicmVwZWF0LXN0cmluZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4ocj0idW5kZWZpbmVkIiE9dHlwZW9mIHI/cisiIjoiICIsZSkrdH19LHsicmVwZWF0LXN0cmluZyI6NTEzfV0sNDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuW3RdO3ZhciByPVt0XTsic3RyaW5nIj09dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSk/ZT17YnJhY2tldHM6ZX06ZXx8KGU9e30pO3ZhciBuPWUuYnJhY2tldHM/QXJyYXkuaXNBcnJheShlLmJyYWNrZXRzKT9lLmJyYWNrZXRzOltlLmJyYWNrZXRzXTpbInt9IiwiW10iLCIoKSJdLGk9ZS5lc2NhcGV8fCJfX18iLGE9ISFlLmZsYXQ7bi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKFsiXFwiLHRbMF0sIlteXFwiLHRbMF0sIlxcIix0WzFdLCJdKlxcIix0WzFdXS5qb2luKCIiKSksbj1bXTtmdW5jdGlvbiBhKGUsYSxvKXt2YXIgcz1yLnB1c2goZS5zbGljZSh0WzBdLmxlbmd0aCwtdFsxXS5sZW5ndGgpKS0xO3JldHVybiBuLnB1c2gocyksaStzK2l9ci5mb3JFYWNoKChmdW5jdGlvbih0LG4pe2Zvcih2YXIgaSxvPTA7dCE9aTspaWYoaT10LHQ9dC5yZXBsYWNlKGUsYSksbysrPjFlNCl0aHJvdyBFcnJvcigiUmVmZXJlbmNlcyBoYXZlIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFBsZWFzZSwgY2hlY2sgdGhlbS4iKTtyW25dPXR9KSksbj1uLnJldmVyc2UoKSxyPXIubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbihyKXtlPWUucmVwbGFjZShuZXcgUmVnRXhwKCIoXFwiK2krcisiXFwiK2krIikiLCJnIiksdFswXSsiJDEiK3RbMV0pfSkpLGV9KSl9KSk7dmFyIG89bmV3IFJlZ0V4cCgiXFwiK2krIihbMC05XSspXFwiK2kpO3JldHVybiBhP3I6ZnVuY3Rpb24gdChlLHIsbil7Zm9yKHZhciBpLGE9W10scz0wO2k9by5leGVjKGUpOyl7aWYocysrPjFlNCl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBwYXJlbnRoZXNpcyIpO2EucHVzaChlLnNsaWNlKDAsaS5pbmRleCkpLGEucHVzaCh0KHJbaVsxXV0scikpLGU9ZS5zbGljZShpLmluZGV4K2lbMF0ubGVuZ3RoKX1yZXR1cm4gYS5wdXNoKGUpLGF9KHJbMF0scil9ZnVuY3Rpb24gaSh0LGUpe2lmKGUmJmUuZmxhdCl7dmFyIHIsbj1lJiZlLmVzY2FwZXx8Il9fXyIsaT10WzBdO2lmKCFpKXJldHVybiIiO2Zvcih2YXIgYT1uZXcgUmVnRXhwKCJcXCIrbisiKFswLTldKylcXCIrbiksbz0wO2khPXI7KXtpZihvKys+MWU0KXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2VzIGluICIrdCk7cj1pLGk9aS5yZXBsYWNlKGEscyl9cmV0dXJuIGl9cmV0dXJuIHQucmVkdWNlKChmdW5jdGlvbiB0KGUscil7cmV0dXJuIEFycmF5LmlzQXJyYXkocikmJihyPXIucmVkdWNlKHQsIiIpKSxlK3J9KSwiIik7ZnVuY3Rpb24gcyhlLHIpe2lmKG51bGw9PXRbcl0pdGhyb3cgRXJyb3IoIlJlZmVyZW5jZSAiK3IrImlzIHVuZGVmaW5lZCIpO3JldHVybiB0W3JdfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/aSh0LGUpOm4odCxlKX1hLnBhcnNlPW4sYS5zdHJpbmdpZnk9aSxlLmV4cG9ydHM9YX0se31dLDQ3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwaWNrLWJ5LWFsaWFzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2FyZ3VtZW50cy5sZW5ndGg+MSYmKHQ9YXJndW1lbnRzKTsic3RyaW5nIj09dHlwZW9mIHQ/dD10LnNwbGl0KC9ccy8pLm1hcChwYXJzZUZsb2F0KToibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSk7dC5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgdFswXT9lPTE9PT10Lmxlbmd0aD97d2lkdGg6dFswXSxoZWlnaHQ6dFswXSx4OjAseTowfToyPT09dC5sZW5ndGg/e3dpZHRoOnRbMF0saGVpZ2h0OnRbMV0seDowLHk6MH06e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdfHwwLGhlaWdodDp0WzNdLXRbMV18fDB9OnQmJih0PW4odCx7bGVmdDoieCBsIGxlZnQgTGVmdCIsdG9wOiJ5IHQgdG9wIFRvcCIsd2lkdGg6Incgd2lkdGggVyBXaWR0aCIsaGVpZ2h0OiJoIGhlaWdodCBXIFdpZHRoIixib3R0b206ImIgYm90dG9tIEJvdHRvbSIscmlnaHQ6InIgcmlnaHQgUmlnaHQifSksZT17eDp0LmxlZnR8fDAseTp0LnRvcHx8MH0sbnVsbD09dC53aWR0aD90LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD0wOmUud2lkdGg9dC53aWR0aCxudWxsPT10LmhlaWdodD90LmJvdHRvbT9lLmhlaWdodD10LmJvdHRvbS1lLnk6ZS5oZWlnaHQ9MDplLmhlaWdodD10LmhlaWdodCk7cmV0dXJuIGV9fSx7InBpY2stYnktYWxpYXMiOjQ4NX1dLDQ3OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gdC5yZXBsYWNlKGksKGZ1bmN0aW9uKHQscixpKXt2YXIgbz1yLnRvTG93ZXJDYXNlKCk7Zm9yKGk9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChhKTtyZXR1cm4gZT9lLm1hcChOdW1iZXIpOltdfShpKSwibSI9PW8mJmkubGVuZ3RoPjImJihlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLDIpKSksbz0ibCIscj0ibSI9PXI/ImwiOiJMIik7Oyl7aWYoaS5sZW5ndGg9PW5bb10pcmV0dXJuIGkudW5zaGlmdChyKSxlLnB1c2goaSk7aWYoaS5sZW5ndGg8bltvXSl0aHJvdyBuZXcgRXJyb3IoIm1hbGZvcm1lZCBwYXRoIGRhdGEiKTtlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLG5bb10pKSl9fSkpLGV9O3ZhciBuPXthOjcsYzo2LGg6MSxsOjIsbToyLHE6NCxzOjQsdDoyLHY6MSx6OjB9LGk9LyhbYXN0dnpxbWhsY10pKFteYXN0dnpxbWhsY10qKS9naTt2YXIgYT0vLT9bMC05XSpcLj9bMC05XSsoPzplWy0rXT9cZCspPy9naX0se31dLDQ4MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPVswLCIiXSksdD1TdHJpbmcodCk7dmFyIHI9cGFyc2VGbG9hdCh0LDEwKTtyZXR1cm4gZVswXT1yLGVbMV09dC5tYXRjaCgvW1xkLlwtXCtdKlxzKiguKikvKVsxXXx8IiIsZX19LHt9XSw0ODE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9dFtuXTsiLiI9PT1pP3Quc3BsaWNlKG4sMSk6Ii4uIj09PWk/KHQuc3BsaWNlKG4sMSkscisrKTpyJiYodC5zcGxpY2UobiwxKSxyLS0pfWlmKGUpZm9yKDtyLS07cil0LnVuc2hpZnQoIi4uIik7cmV0dXJuIHR9ZnVuY3Rpb24gbih0LGUpe2lmKHQuZmlsdGVyKXJldHVybiB0LmZpbHRlcihlKTtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSxuLHQpJiZyLnB1c2godFtuXSk7cmV0dXJuIHJ9ci5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciByPSIiLGk9ITEsYT1hcmd1bWVudHMubGVuZ3RoLTE7YT49LTEmJiFpO2EtLSl7dmFyIG89YT49MD9hcmd1bWVudHNbYV06dC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtvJiYocj1vKyIvIityLGk9Ii8iPT09by5jaGFyQXQoMCkpfXJldHVybihpPyIvIjoiIikrKHI9ZShuKHIuc3BsaXQoIi8iKSwoZnVuY3Rpb24odCl7cmV0dXJuISF0fSkpLCFpKS5qb2luKCIvIikpfHwiLiJ9LHIubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBhPXIuaXNBYnNvbHV0ZSh0KSxvPSIvIj09PWkodCwtMSk7cmV0dXJuKHQ9ZShuKHQuc3BsaXQoIi8iKSwoZnVuY3Rpb24odCl7cmV0dXJuISF0fSkpLCFhKS5qb2luKCIvIikpfHxhfHwodD0iLiIpLHQmJm8mJih0Kz0iLyIpLChhPyIvIjoiIikrdH0sci5pc0Fic29sdXRlPWZ1bmN0aW9uKHQpe3JldHVybiIvIj09PXQuY2hhckF0KDApfSxyLmpvaW49ZnVuY3Rpb24oKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHIubm9ybWFsaXplKG4odCwoZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtyZXR1cm4gdH0pKS5qb2luKCIvIikpfSxyLnJlbGF0aXZlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoJiYiIj09PXRbZV07ZSsrKTtmb3IodmFyIHI9dC5sZW5ndGgtMTtyPj0wJiYiIj09PXRbcl07ci0tKTtyZXR1cm4gZT5yP1tdOnQuc2xpY2UoZSxyLWUrMSl9dD1yLnJlc29sdmUodCkuc3Vic3RyKDEpLGU9ci5yZXNvbHZlKGUpLnN1YnN0cigxKTtmb3IodmFyIGk9bih0LnNwbGl0KCIvIikpLGE9bihlLnNwbGl0KCIvIikpLG89TWF0aC5taW4oaS5sZW5ndGgsYS5sZW5ndGgpLHM9byxsPTA7bDxvO2wrKylpZihpW2xdIT09YVtsXSl7cz1sO2JyZWFrfXZhciBjPVtdO2ZvcihsPXM7bDxpLmxlbmd0aDtsKyspYy5wdXNoKCIuLiIpO3JldHVybihjPWMuY29uY2F0KGEuc2xpY2UocykpKS5qb2luKCIvIil9LHIuc2VwPSIvIixyLmRlbGltaXRlcj0iOiIsci5kaXJuYW1lPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCYmKHQrPSIiKSwwPT09dC5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgZT10LmNoYXJDb2RlQXQoMCkscj00Nz09PWUsbj0tMSxpPSEwLGE9dC5sZW5ndGgtMTthPj0xOy0tYSlpZig0Nz09PShlPXQuY2hhckNvZGVBdChhKSkpe2lmKCFpKXtuPWE7YnJlYWt9fWVsc2UgaT0hMTtyZXR1cm4tMT09PW4/cj8iLyI6Ii4iOnImJjE9PT1uPyIvIjp0LnNsaWNlKDAsbil9LHIuYmFzZW5hbWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1mdW5jdGlvbih0KXsic3RyaW5nIiE9dHlwZW9mIHQmJih0Kz0iIik7dmFyIGUscj0wLG49LTEsaT0hMDtmb3IoZT10Lmxlbmd0aC0xO2U+PTA7LS1lKWlmKDQ3PT09dC5jaGFyQ29kZUF0KGUpKXtpZighaSl7cj1lKzE7YnJlYWt9fWVsc2UtMT09PW4mJihpPSExLG49ZSsxKTtyZXR1cm4tMT09PW4/IiI6dC5zbGljZShyLG4pfSh0KTtyZXR1cm4gZSYmci5zdWJzdHIoLTEqZS5sZW5ndGgpPT09ZSYmKHI9ci5zdWJzdHIoMCxyLmxlbmd0aC1lLmxlbmd0aCkpLHJ9LHIuZXh0bmFtZT1mdW5jdGlvbih0KXsic3RyaW5nIiE9dHlwZW9mIHQmJih0Kz0iIik7Zm9yKHZhciBlPS0xLHI9MCxuPS0xLGk9ITAsYT0wLG89dC5sZW5ndGgtMTtvPj0wOy0tbyl7dmFyIHM9dC5jaGFyQ29kZUF0KG8pO2lmKDQ3IT09cyktMT09PW4mJihpPSExLG49bysxKSw0Nj09PXM/LTE9PT1lP2U9bzoxIT09YSYmKGE9MSk6LTEhPT1lJiYoYT0tMSk7ZWxzZSBpZighaSl7cj1vKzE7YnJlYWt9fXJldHVybi0xPT09ZXx8LTE9PT1ufHwwPT09YXx8MT09PWEmJmU9PT1uLTEmJmU9PT1yKzE/IiI6dC5zbGljZShlLG4pfTt2YXIgaT0iYiI9PT0iYWIiLnN1YnN0cigtMSk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LnN1YnN0cihlLHIpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIGU8MCYmKGU9dC5sZW5ndGgrZSksdC5zdWJzdHIoZSxyKX19KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo1MDB9XSw0ODI6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7dmFyIHIsbixpLGEsbyxzOyJ1bmRlZmluZWQiIT10eXBlb2YgcGVyZm9ybWFuY2UmJm51bGwhPT1wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06InVuZGVmaW5lZCIhPXR5cGVvZiB0JiZudWxsIT09dCYmdC5ocnRpbWU/KGUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybihyKCktbykvMWU2fSxuPXQuaHJ0aW1lLGE9KHI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gMWU5Kih0PW4oKSlbMF0rdFsxXX0pKCkscz0xZTkqdC51cHRpbWUoKSxvPWEtcyk6RGF0ZS5ub3c/KGUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpLWl9LGk9RGF0ZS5ub3coKSk6KGUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpLWl9LGk9KG5ldyBEYXRlKS5nZXRUaW1lKCkpfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjUwMH1dLDQ4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwzMil7Zm9yKHZhciByPTEsaT0wO2k8ZTsrK2kpZm9yKHZhciBhPTA7YTxpOysrYSlpZih0W2ldPHRbYV0pcj0tcjtlbHNlIGlmKHRbaV09PT10W2FdKXJldHVybiAwO3JldHVybiByfXZhciBvPW4ubWFsbG9jVWludDgoZSk7Zm9yKGk9MDtpPGU7KytpKW9baV09MDtmb3Iocj0xLGk9MDtpPGU7KytpKWlmKCFvW2ldKXt2YXIgcz0xO29baV09MTtmb3IoYT10W2ldO2EhPT1pO2E9dFthXSl7aWYob1thXSlyZXR1cm4gbi5mcmVlVWludDgobyksMDtzKz0xLG9bYV09MX0xJnN8fChyPS1yKX1yZXR1cm4gbi5mcmVlVWludDgobykscn07dmFyIG49dCgidHlwZWRhcnJheS1wb29sIil9LHsidHlwZWRhcnJheS1wb29sIjo1Njd9XSw0ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHlwZWRhcnJheS1wb29sIiksaT10KCJpbnZlcnQtcGVybXV0YXRpb24iKTtyLnJhbms9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7c3dpdGNoKGUpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiB0WzFdfXZhciByLGEsbyxzPW4ubWFsbG9jVWludDMyKGUpLGw9bi5tYWxsb2NVaW50MzIoZSksYz0wO2ZvcihpKHQsbCksbz0wO288ZTsrK28pc1tvXT10W29dO2ZvcihvPWUtMTtvPjA7LS1vKWE9bFtvXSxyPXNbb10sc1tvXT1zW2FdLHNbYV09cixsW29dPWxbcl0sbFtyXT1hLGM9KGMrcikqbztyZXR1cm4gbi5mcmVlVWludDMyKGwpLG4uZnJlZVVpbnQzMihzKSxjfSxyLnVucmFuaz1mdW5jdGlvbih0LGUscil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gcnx8W107Y2FzZSAxOnJldHVybiByPyhyWzBdPTAscik6WzBdO2Nhc2UgMjpyZXR1cm4gcj8oZT8oclswXT0wLHJbMV09MSk6KHJbMF09MSxyWzFdPTApLHIpOmU/WzAsMV06WzEsMF19dmFyIG4saSxhLG89MTtmb3IoKHI9cnx8bmV3IEFycmF5KHQpKVswXT0wLGE9MTthPHQ7KythKXJbYV09YSxvPW8qYXwwO2ZvcihhPXQtMTthPjA7LS1hKWU9ZS0obj1lL298MCkqb3wwLG89by9hfDAsaT0wfHJbYV0sclthXT0wfHJbbl0scltuXT0wfGk7cmV0dXJuIHJ9fSx7ImludmVydC1wZXJtdXRhdGlvbiI6NDM2LCJ0eXBlZGFycmF5LXBvb2wiOjU2N31dLDQ4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsbz17fTtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPWkoZSkpLEFycmF5LmlzQXJyYXkoZSkpe3ZhciBzPXt9O2ZvcihhPTA7YTxlLmxlbmd0aDthKyspc1tlW2FdXT0hMDtlPXN9Zm9yKG4gaW4gZSllW25dPWkoZVtuXSk7dmFyIGw9e307Zm9yKG4gaW4gZSl7dmFyIGM9ZVtuXTtpZihBcnJheS5pc0FycmF5KGMpKWZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWNbYV07aWYociYmKGxbdV09ITApLHUgaW4gdCl7aWYob1tuXT10W3VdLHIpZm9yKHZhciBoPWE7aDxjLmxlbmd0aDtoKyspbFtjW2hdXT0hMDticmVha319ZWxzZSBuIGluIHQmJihlW25dJiYob1tuXT10W25dKSxyJiYobFtuXT0hMCkpfWlmKHIpZm9yKG4gaW4gdClsW25dfHwob1tuXT10W25dKTtyZXR1cm4gb307dmFyIG49e307ZnVuY3Rpb24gaSh0KXtyZXR1cm4gblt0XT9uW3RdOigic3RyaW5nIj09dHlwZW9mIHQmJih0PW5bdF09dC5zcGxpdCgvXHMqLFxzKnxccysvKSksdCl9fSx7fV0sNDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wfGUubGVuZ3RoLGk9dC5sZW5ndGgsYT1bbmV3IEFycmF5KHIpLG5ldyBBcnJheShyKV0sbz0wO288cjsrK28pYVswXVtvXT1bXSxhWzFdW29dPVtdO2ZvcihvPTA7bzxpOysrbyl7dmFyIHM9dFtvXTthWzBdW3NbMF1dLnB1c2gocyksYVsxXVtzWzFdXS5wdXNoKHMpfXZhciBsPVtdO2ZvcihvPTA7bzxyOysrbylhWzBdW29dLmxlbmd0aCthWzFdW29dLmxlbmd0aD09PTAmJmwucHVzaChbb10pO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1hW2VdW3RbZV1dO3Iuc3BsaWNlKHIuaW5kZXhPZih0KSwxKX1mdW5jdGlvbiB1KHQscixpKXtmb3IodmFyIG8scyxsLHU9MDt1PDI7Kyt1KWlmKGFbdV1bcl0ubGVuZ3RoPjApe289YVt1XVtyXVswXSxsPXU7YnJlYWt9cz1vWzFebF07Zm9yKHZhciBoPTA7aDwyOysraClmb3IodmFyIGY9YVtoXVtyXSxwPTA7cDxmLmxlbmd0aDsrK3Ape3ZhciBkPWZbcF0sZz1kWzFeaF07bihlW3RdLGVbcl0sZVtzXSxlW2ddKT4wJiYobz1kLHM9ZyxsPWgpfXJldHVybiBpfHxvJiZjKG8sbCksc31mdW5jdGlvbiBoKHQscil7dmFyIGk9YVtyXVt0XVswXSxvPVt0XTtjKGkscik7Zm9yKHZhciBzPWlbMV5yXTs7KXtmb3IoO3MhPT10OylvLnB1c2gocykscz11KG9bby5sZW5ndGgtMl0scywhMSk7aWYoYVswXVt0XS5sZW5ndGgrYVsxXVt0XS5sZW5ndGg9PT0wKWJyZWFrO3ZhciBsPW9bby5sZW5ndGgtMV0saD10LGY9b1sxXSxwPXUobCxoLCEwKTtpZihuKGVbbF0sZVtoXSxlW2ZdLGVbcF0pPDApYnJlYWs7by5wdXNoKHQpLHM9dShsLGgpfXJldHVybiBvfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gZVsxXT09PWVbZS5sZW5ndGgtMV19Zm9yKG89MDtvPHI7KytvKWZvcih2YXIgcD0wO3A8MjsrK3Ape2Zvcih2YXIgZD1bXTthW3BdW29dLmxlbmd0aD4wOyl7YVswXVtvXS5sZW5ndGg7dmFyIGc9aChvLHApO2YoMCxnKT9kLnB1c2guYXBwbHkoZCxnKTooZC5sZW5ndGg+MCYmbC5wdXNoKGQpLGQ9Zyl9ZC5sZW5ndGg+MCYmbC5wdXNoKGQpfXJldHVybiBsfTt2YXIgbj10KCJjb21wYXJlLWFuZ2xlIil9LHsiY29tcGFyZS1hbmdsZSI6MTMyfV0sNDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uKHQsZS5sZW5ndGgpLGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPW5ldyBBcnJheShlLmxlbmd0aCksbz1bXSxzPTA7czxlLmxlbmd0aDsrK3Mpe3ZhciBsPXJbc10ubGVuZ3RoO2Fbc109bCxpW3NdPSEwLGw8PTEmJm8ucHVzaChzKX1mb3IoO28ubGVuZ3RoPjA7KXt2YXIgYz1vLnBvcCgpO2lbY109ITE7dmFyIHU9cltjXTtmb3Iocz0wO3M8dS5sZW5ndGg7KytzKXt2YXIgaD11W3NdOzA9PS0tYVtoXSYmby5wdXNoKGgpfX12YXIgZj1uZXcgQXJyYXkoZS5sZW5ndGgpLHA9W107Zm9yKHM9MDtzPGUubGVuZ3RoOysrcylpZihpW3NdKXtjPXAubGVuZ3RoO2Zbc109YyxwLnB1c2goZVtzXSl9ZWxzZSBmW3NdPS0xO3ZhciBkPVtdO2ZvcihzPTA7czx0Lmxlbmd0aDsrK3Mpe3ZhciBnPXRbc107aVtnWzBdXSYmaVtnWzFdXSYmZC5wdXNoKFtmW2dbMF1dLGZbZ1sxXV1dKX1yZXR1cm5bZCxwXX07dmFyIG49dCgiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiKX0seyJlZGdlcy10by1hZGphY2VuY3ktbGlzdCI6MTc4fV0sNDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWModCxlKTt0PXJbMF07Zm9yKHZhciBoPShlPXJbMV0pLmxlbmd0aCxmPSh0Lmxlbmd0aCxuKHQsZS5sZW5ndGgpKSxwPTA7cDxoOysrcClpZihmW3BdLmxlbmd0aCUyPT0xKXRocm93IG5ldyBFcnJvcigicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lOiBncmFwaCBtdXN0IGJlIG1hbmlmb2xkIik7dmFyIGQ9aSh0LGUpO3ZhciBnPShkPWQuZmlsdGVyKChmdW5jdGlvbih0KXtmb3IodmFyIHI9dC5sZW5ndGgsbj1bMF0saT0wO2k8cjsrK2kpe3ZhciBhPWVbdFtpXV0sbD1lW3RbKGkrMSklcl1dLGM9bygtYVswXSxhWzFdKSx1PW8oLWFbMF0sbFsxXSksaD1vKGxbMF0sYVsxXSksZj1vKGxbMF0sbFsxXSk7bj1zKG4scyhzKGMsdSkscyhoLGYpKSl9cmV0dXJuIG5bbi5sZW5ndGgtMV0+MH0pKSkubGVuZ3RoLG09bmV3IEFycmF5KGcpLHY9bmV3IEFycmF5KGcpO2ZvcihwPTA7cDxnOysrcCl7bVtwXT1wO3ZhciB5PW5ldyBBcnJheShnKSx4PWRbcF0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKSxiPWEoW3hdKSxfPTA7dDpmb3IodmFyIHc9MDt3PGc7Kyt3KWlmKHlbd109MCxwIT09dyl7Zm9yKHZhciBUPShxPWRbd10pLmxlbmd0aCxrPTA7azxUOysrayl7dmFyIE09YihlW3Fba11dKTtpZigwIT09TSl7TTwwJiYoeVt3XT0xLF8rPTEpO2NvbnRpbnVlIHR9fXlbd109MSxfKz0xfXZbcF09W18scCx5XX12LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0pKTtmb3IocD0wO3A8ZzsrK3Ape3ZhciBBPSh5PXZbcF0pWzFdLFM9eVsyXTtmb3Iodz0wO3c8ZzsrK3cpU1t3XSYmKG1bd109QSl9dmFyIEU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPVtdO3JldHVybiBlfShnKTtmb3IocD0wO3A8ZzsrK3ApRVtwXS5wdXNoKG1bcF0pLEVbbVtwXV0ucHVzaChwKTt2YXIgQz17fSxMPXUoaCwhMSk7Zm9yKHA9MDtwPGc7KytwKWZvcihUPShxPWRbcF0pLmxlbmd0aCx3PTA7dzxUOysrdyl7dmFyIFA9cVt3XSxJPXFbKHcrMSklVF0sej1NYXRoLm1pbihQLEkpKyI6IitNYXRoLm1heChQLEkpO2lmKHogaW4gQyl7dmFyIE89Q1t6XTtFW09dLnB1c2gocCksRVtwXS5wdXNoKE8pLExbUF09TFtJXT0hMH1lbHNlIENbel09cH1mdW5jdGlvbiBEKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTA7cjxlOysrcilpZighTFt0W3JdXSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgUj1bXSxGPXUoZywtMSk7Zm9yKHA9MDtwPGc7KytwKW1bcF0hPT1wfHxEKGRbcF0pP0ZbcF09LTE6KFIucHVzaChwKSxGW3BdPTApO3I9W107Zm9yKDtSLmxlbmd0aD4wOyl7dmFyIEI9Ui5wb3AoKSxOPUVbQl07bChOLChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7dmFyIGosVT1OLmxlbmd0aCxWPUZbQl07aWYoMD09PVYpe3ZhciBxPWRbQl07aj1bcV19Zm9yKHA9MDtwPFU7KytwKXt2YXIgSD1OW3BdO2lmKCEoRltIXT49MCkpaWYoRltIXT0xXlYsUi5wdXNoKEgpLDA9PT1WKUQocT1kW0hdKXx8KHEucmV2ZXJzZSgpLGoucHVzaChxKSl9MD09PVYmJnIucHVzaChqKX1yZXR1cm4gcn07dmFyIG49dCgiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiKSxpPXQoInBsYW5hci1kdWFsIiksYT10KCJwb2ludC1pbi1iaWctcG9seWdvbiIpLG89dCgidHdvLXByb2R1Y3QiKSxzPXQoInJvYnVzdC1zdW0iKSxsPXQoInVuaXEiKSxjPXQoIi4vbGliL3RyaW0tbGVhdmVzIik7ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfX0seyIuL2xpYi90cmltLWxlYXZlcyI6NDg3LCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCI6MTc4LCJwbGFuYXItZHVhbCI6NDg2LCJwb2ludC1pbi1iaWctcG9seWdvbiI6NDkwLCJyb2J1c3Qtc3VtIjo1MjUsInR3by1wcm9kdWN0Ijo1NTQsdW5pcTo1Njl9XSw0ODk6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjQzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjQzfV0sNDkwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVtdLGE9W10scz0wO3M8ZTsrK3MpZm9yKHZhciB1PXRbc10saD11Lmxlbmd0aCxmPWgtMSxwPTA7cDxoO2Y9cCsrKXt2YXIgZD11W2ZdLGc9dVtwXTtkWzBdPT09Z1swXT9hLnB1c2goW2QsZ10pOnIucHVzaChbZCxnXSl9aWYoMD09PXIubGVuZ3RoKXJldHVybiAwPT09YS5sZW5ndGg/YzoobT1sKGEpLGZ1bmN0aW9uKHQpe3JldHVybiBtKHRbMF0sdFsxXSk/MDoxfSk7dmFyIG07dmFyIHY9aShyKSx5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPW8ubGUoZSxyWzBdKTtpZihpPDApcmV0dXJuIDE7dmFyIGE9dFtpXTtpZighYSl7aWYoIShpPjAmJmVbaV09PT1yWzBdKSlyZXR1cm4gMTthPXRbaS0xXX1mb3IodmFyIHM9MTthOyl7dmFyIGw9YS5rZXksYz1uKHIsbFswXSxsWzFdKTtpZihsWzBdWzBdPGxbMV1bMF0paWYoYzwwKWE9YS5sZWZ0O2Vsc2V7aWYoIShjPjApKXJldHVybiAwO3M9LTEsYT1hLnJpZ2h0fWVsc2UgaWYoYz4wKWE9YS5sZWZ0O2Vsc2V7aWYoIShjPDApKXJldHVybiAwO3M9MSxhPWEucmlnaHR9fXJldHVybiBzfX0odi5zbGFicyx2LmNvb3JkaW5hdGVzKTtyZXR1cm4gMD09PWEubGVuZ3RoP3k6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoclswXSxyWzFdKT8wOmUocil9fShsKGEpLHkpfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXSxpPXQoInNsYWItZGVjb21wb3NpdGlvbiIpLGE9dCgiaW50ZXJ2YWwtdHJlZS0xZCIpLG89dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBzKCl7cmV0dXJuITB9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdLGk9blswXVswXSxvPW5bMF1bMV0sbD1uWzFdWzFdLGM9W01hdGgubWluKG8sbCksTWF0aC5tYXgobyxsKV07aSBpbiBlP2VbaV0ucHVzaChjKTplW2ldPVtjXX12YXIgdT17fSxoPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxoLmxlbmd0aDsrK3Ipe3ZhciBmPWVbaFtyXV07dVtoW3JdXT1hKGYpfXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdO3JldHVybiEhbiYmISFuLnF1ZXJ5UG9pbnQocixzKX19KHUpfWZ1bmN0aW9uIGModCl7cmV0dXJuIDF9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo0ODksImludGVydmFsLXRyZWUtMWQiOjQzNCwicm9idXN0LW9yaWVudGF0aW9uIjo1MjAsInNsYWItZGVjb21wb3NpdGlvbiI6NTM3fV0sNDkxOltmdW5jdGlvbih0LGUscil7Ci8qCiAqIEBjb3B5cmlnaHQgMjAxNiBTZWFuIENvbm5lbGx5IChAdm9pZHFrKSwgaHR0cDovL3N5bnRoZXRpLmNjCiAqIEBsaWNlbnNlIE1JVAogKiBAcHJlc2VydmUgUHJvamVjdCBIb21lOiBodHRwczovL2dpdGh1Yi5jb20vdm9pZHFrL3BvbHlib29sanMKICovCnZhciBuLGk9dCgiLi9saWIvYnVpbGQtbG9nIiksYT10KCIuL2xpYi9lcHNpbG9uIiksbz10KCIuL2xpYi9pbnRlcnNlY3RlciIpLHM9dCgiLi9saWIvc2VnbWVudC1jaGFpbmVyIiksbD10KCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIiksYz10KCIuL2xpYi9nZW9qc29uIiksdT0hMSxoPWEoKTtmdW5jdGlvbiBmKHQsZSxyKXt2YXIgaT1uLnNlZ21lbnRzKHQpLGE9bi5zZWdtZW50cyhlKSxvPXIobi5jb21iaW5lKGksYSkpO3JldHVybiBuLnBvbHlnb24obyl9bj17YnVpbGRMb2c6ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P3U9aSgpOiExPT09dCYmKHU9ITEpLCExIT09dSYmdS5saXN0fSxlcHNpbG9uOmZ1bmN0aW9uKHQpe3JldHVybiBoLmVwc2lsb24odCl9LHNlZ21lbnRzOmZ1bmN0aW9uKHQpe3ZhciBlPW8oITAsaCx1KTtyZXR1cm4gdC5yZWdpb25zLmZvckVhY2goZS5hZGRSZWdpb24pLHtzZWdtZW50czplLmNhbGN1bGF0ZSh0LmludmVydGVkKSxpbnZlcnRlZDp0LmludmVydGVkfX0sY29tYmluZTpmdW5jdGlvbih0LGUpe3JldHVybntjb21iaW5lZDpvKCExLGgsdSkuY2FsY3VsYXRlKHQuc2VnbWVudHMsdC5pbnZlcnRlZCxlLnNlZ21lbnRzLGUuaW52ZXJ0ZWQpLGludmVydGVkMTp0LmludmVydGVkLGludmVydGVkMjplLmludmVydGVkfX0sc2VsZWN0VW5pb246ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwudW5pb24odC5jb21iaW5lZCx1KSxpbnZlcnRlZDp0LmludmVydGVkMXx8dC5pbnZlcnRlZDJ9fSxzZWxlY3RJbnRlcnNlY3Q6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuaW50ZXJzZWN0KHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0RGlmZmVyZW5jZTpmdW5jdGlvbih0KXtyZXR1cm57c2VnbWVudHM6bC5kaWZmZXJlbmNlKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJiF0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZVJldih0LmNvbWJpbmVkLHUpLGludmVydGVkOiF0LmludmVydGVkMSYmdC5pbnZlcnRlZDJ9fSxzZWxlY3RYb3I6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwueG9yKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEhPT10LmludmVydGVkMn19LHBvbHlnb246ZnVuY3Rpb24odCl7cmV0dXJue3JlZ2lvbnM6cyh0LnNlZ21lbnRzLGgsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LHBvbHlnb25Gcm9tR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy50b1BvbHlnb24obix0KX0scG9seWdvblRvR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy5mcm9tUG9seWdvbihuLGgsdCl9LHVuaW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0VW5pb24pfSxpbnRlcnNlY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0LGUsbi5zZWxlY3RJbnRlcnNlY3QpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0RGlmZmVyZW5jZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0LGUsbi5zZWxlY3REaWZmZXJlbmNlUmV2KX0seG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0WG9yKX19LCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYod2luZG93LlBvbHlCb29sPW4pLGUuZXhwb3J0cz1ufSx7Ii4vbGliL2J1aWxkLWxvZyI6NDkyLCIuL2xpYi9lcHNpbG9uIjo0OTMsIi4vbGliL2dlb2pzb24iOjQ5NCwiLi9saWIvaW50ZXJzZWN0ZXIiOjQ5NSwiLi9saWIvc2VnbWVudC1jaGFpbmVyIjo0OTcsIi4vbGliL3NlZ21lbnQtc2VsZWN0b3IiOjQ5OH1dLDQ5MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9MCxyPSExO2Z1bmN0aW9uIG4oZSxyKXtyZXR1cm4gdC5saXN0LnB1c2goe3R5cGU6ZSxkYXRhOnI/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyKSk6dm9pZCAwfSksdH1yZXR1cm4gdD17bGlzdDpbXSxzZWdtZW50SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSsrfSxjaGVja0ludGVyc2VjdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGVjayIse3NlZzE6dCxzZWcyOmV9KX0sc2VnbWVudENob3A6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiZGl2X3NlZyIse3NlZzp0LHB0OmV9KSxuKCJjaG9wIix7c2VnOnQscHQ6ZX0pfSxzdGF0dXNSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oInBvcF9zZWciLHtzZWc6dH0pfSxzZWdtZW50VXBkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJzZWdfdXBkYXRlIix7c2VnOnR9KX0sc2VnbWVudE5ldzpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJuZXdfc2VnIix7c2VnOnQscHJpbWFyeTplfSl9LHNlZ21lbnRSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oInJlbV9zZWciLHtzZWc6dH0pfSx0ZW1wU3RhdHVzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigidGVtcF9zdGF0dXMiLHtzZWc6dCxhYm92ZTplLGJlbG93OnJ9KX0scmV3aW5kOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJyZXdpbmQiLHtzZWc6dH0pfSxzdGF0dXM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKCJzdGF0dXMiLHtzZWc6dCxhYm92ZTplLGJlbG93OnJ9KX0sdmVydDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXI/dDoocj1lLG4oInZlcnQiLHt4OmV9KSl9LGxvZzpmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJih0PUpTT04uc3RyaW5naWZ5KHQsITEsIiAgIikpLG4oImxvZyIse3R4dDp0fSl9LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4oInJlc2V0Iil9LHNlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJzZWxlY3RlZCIse3NlZ3M6dH0pfSxjaGFpblN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9zdGFydCIse3NlZzp0fSl9LGNoYWluUmVtb3ZlSGVhZDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9yZW1faGVhZCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpblJlbW92ZVRhaWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fcmVtX3RhaWwiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5OZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fbmV3Iix7cHQxOnQscHQyOmV9KX0sY2hhaW5NYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gbigiY2hhaW5fbWF0Y2giLHtpbmRleDp0fSl9LGNoYWluQ2xvc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX2Nsb3NlIix7aW5kZXg6dH0pfSxjaGFpbkFkZEhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fYWRkX2hlYWQiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5BZGRUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2FkZF90YWlsIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQ29ubmVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9jb24iLHtpbmRleDE6dCxpbmRleDI6ZX0pfSxjaGFpblJldmVyc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX3JldiIse2luZGV4OnR9KX0sY2hhaW5Kb2luOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2pvaW4iLHtpbmRleDE6dCxpbmRleDI6ZX0pfSxkb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG4oImRvbmUiKX19fX0se31dLDQ5MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsibnVtYmVyIiE9dHlwZW9mIHQmJih0PTFlLTEwKTt2YXIgZT17ZXBzaWxvbjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJih0PWUpLHR9LHBvaW50QWJvdmVPck9uTGluZTpmdW5jdGlvbihlLHIsbil7dmFyIGk9clswXSxhPXJbMV0sbz1uWzBdLHM9blsxXSxsPWVbMF07cmV0dXJuKG8taSkqKGVbMV0tYSktKHMtYSkqKGwtaSk+PS10fSxwb2ludEJldHdlZW46ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMV0tclsxXSxhPW5bMF0tclswXSxvPWVbMF0tclswXSxzPW5bMV0tclsxXSxsPW8qYStpKnM7cmV0dXJuIShsPHQpJiYhKGwtKGEqYStzKnMpPi10KX0scG9pbnRzU2FtZVg6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVswXS1yWzBdKTx0fSxwb2ludHNTYW1lWTpmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLmFicyhlWzFdLXJbMV0pPHR9LHBvaW50c1NhbWU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpJiZlLnBvaW50c1NhbWVZKHQscil9LHBvaW50c0NvbXBhcmU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpP2UucG9pbnRzU2FtZVkodCxyKT8wOnRbMV08clsxXT8tMToxOnRbMF08clswXT8tMToxfSxwb2ludHNDb2xsaW5lYXI6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMF0tclswXSxhPWVbMV0tclsxXSxvPXJbMF0tblswXSxzPXJbMV0tblsxXTtyZXR1cm4gTWF0aC5hYnMoaSpzLW8qYSk8dH0sbGluZXNJbnRlcnNlY3Q6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9clswXS1lWzBdLG89clsxXS1lWzFdLHM9aVswXS1uWzBdLGw9aVsxXS1uWzFdLGM9YSpsLW8qcztpZihNYXRoLmFicyhjKTx0KXJldHVybiExO3ZhciB1PWVbMF0tblswXSxoPWVbMV0tblsxXSxmPShzKmgtbCp1KS9jLHA9KGEqaC1vKnUpL2MsZD17YWxvbmdBOjAsYWxvbmdCOjAscHQ6W2VbMF0rZiphLGVbMV0rZipvXX07cmV0dXJuIGQuYWxvbmdBPWY8PS10Py0yOmY8dD8tMTpmLTE8PS10PzA6Zi0xPHQ/MToyLGQuYWxvbmdCPXA8PS10Py0yOnA8dD8tMTpwLTE8PS10PzA6cC0xPHQ/MToyLGR9LHBvaW50SW5zaWRlUmVnaW9uOmZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWVbMF0saT1lWzFdLGE9cltyLmxlbmd0aC0xXVswXSxvPXJbci5sZW5ndGgtMV1bMV0scz0hMSxsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF1bMF0sdT1yW2xdWzFdO3UtaT50IT1vLWk+dCYmKGEtYykqKGktdSkvKG8tdSkrYy1uPnQmJihzPSFzKSxhPWMsbz11fXJldHVybiBzfX07cmV0dXJuIGV9fSx7fV0sNDk0OltmdW5jdGlvbih0LGUscil7dmFyIG49e3RvUG9seWdvbjpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7aWYoZS5sZW5ndGg8PTApcmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KTtmdW5jdGlvbiByKGUpe3ZhciByPWUuc2xpY2UoMCxlLmxlbmd0aC0xKTtyZXR1cm4gdC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbcl19KX1mb3IodmFyIG49cihlWzBdKSxpPTE7aTxlLmxlbmd0aDtpKyspbj10LnNlbGVjdERpZmZlcmVuY2UodC5jb21iaW5lKG4scihlW2ldKSkpO3JldHVybiBufWlmKCJQb2x5Z29uIj09PWUudHlwZSlyZXR1cm4gdC5wb2x5Z29uKHIoZS5jb29yZGluYXRlcykpO2lmKCJNdWx0aVBvbHlnb24iPT09ZS50eXBlKXtmb3IodmFyIG49dC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbXX0pLGk9MDtpPGUuY29vcmRpbmF0ZXMubGVuZ3RoO2krKyluPXQuc2VsZWN0VW5pb24odC5jb21iaW5lKG4scihlLmNvb3JkaW5hdGVzW2ldKSkpO3JldHVybiB0LnBvbHlnb24obil9dGhyb3cgbmV3IEVycm9yKCJQb2x5Qm9vbDogQ2Fubm90IGNvbnZlcnQgR2VvSlNPTiBvYmplY3QgdG8gUG9seUJvb2wgcG9seWdvbiIpfSxmcm9tUG9seWdvbjpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLnBvaW50SW5zaWRlUmVnaW9uKFsuNSoodFswXVswXSt0WzFdWzBdKSwuNSoodFswXVsxXSt0WzFdWzFdKV0scil9ZnVuY3Rpb24gaSh0KXtyZXR1cm57cmVnaW9uOnQsY2hpbGRyZW46W119fXI9dC5wb2x5Z29uKHQuc2VnbWVudHMocikpO3ZhciBhPWkobnVsbCk7ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXtpZihuKGUsKHM9dC5jaGlsZHJlbltyXSkucmVnaW9uKSlyZXR1cm4gdm9pZCBvKHMsZSl9dmFyIGE9aShlKTtmb3Iocj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXt2YXIgcztuKChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbixlKSYmKGEuY2hpbGRyZW4ucHVzaChzKSx0LmNoaWxkcmVuLnNwbGljZShyLDEpLHItLSl9dC5jaGlsZHJlbi5wdXNoKGEpfWZvcih2YXIgcz0wO3M8ci5yZWdpb25zLmxlbmd0aDtzKyspe3ZhciBsPXIucmVnaW9uc1tzXTtsLmxlbmd0aDwzfHxvKGEsbCl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wLG49dFt0Lmxlbmd0aC0xXVswXSxpPXRbdC5sZW5ndGgtMV1bMV0sYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb11bMF0sbD10W29dWzFdO2EucHVzaChbcyxsXSkscis9bCpuLXMqaSxuPXMsaT1sfXJldHVybiByPDAhPT1lJiZhLnJldmVyc2UoKSxhLnB1c2goW2FbMF1bMF0sYVswXVsxXV0pLGF9dmFyIHU9W107ZnVuY3Rpb24gaCh0KXt2YXIgZT1bYyh0LnJlZ2lvbiwhMSldO3UucHVzaChlKTtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyllLnB1c2goZih0LmNoaWxkcmVuW3JdKSl9ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9MDtlPHQuY2hpbGRyZW4ubGVuZ3RoO2UrKyloKHQuY2hpbGRyZW5bZV0pO3JldHVybiBjKHQucmVnaW9uLCEwKX1mb3Iocz0wO3M8YS5jaGlsZHJlbi5sZW5ndGg7cysrKWgoYS5jaGlsZHJlbltzXSk7cmV0dXJuIHUubGVuZ3RoPD0wP3t0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbXX06MT09dS5sZW5ndGg/e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOnVbMF19Ont0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnV9fX07ZS5leHBvcnRzPW59LHt9XSw0OTU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2xpbmtlZC1saXN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBpKHQsZSxuKXtyZXR1cm57aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQsZW5kOmUsbXlGaWxsOnthYm92ZTpuLm15RmlsbC5hYm92ZSxiZWxvdzpuLm15RmlsbC5iZWxvd30sb3RoZXJGaWxsOm51bGx9fXZhciBhPW4uY3JlYXRlKCk7ZnVuY3Rpb24gbyh0LHIpe2EuaW5zZXJ0QmVmb3JlKHQsKGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LHIsbixpLGEsbyl7dmFyIHM9ZS5wb2ludHNDb21wYXJlKHIsYSk7cmV0dXJuIDAhPT1zP3M6ZS5wb2ludHNTYW1lKG4sbyk/MDp0IT09aT90PzE6LTE6ZS5wb2ludEFib3ZlT3JPbkxpbmUobixpP2E6byxpP286YSk/MTotMX0odC5pc1N0YXJ0LHQucHQscixuLmlzU3RhcnQsbi5wdCxuLm90aGVyLnB0KTwwfSkpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1mdW5jdGlvbih0LGUpe3ZhciByPW4ubm9kZSh7aXNTdGFydDohMCxwdDp0LnN0YXJ0LHNlZzp0LHByaW1hcnk6ZSxvdGhlcjpudWxsLHN0YXR1czpudWxsfSk7cmV0dXJuIG8ocix0LmVuZCkscn0odCxlKTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4ubm9kZSh7aXNTdGFydDohMSxwdDplLmVuZCxzZWc6ZSxwcmltYXJ5OnIsb3RoZXI6dCxzdGF0dXM6bnVsbH0pO3Qub3RoZXI9aSxvKGksdC5wdCl9KHIsdCxlKSxyfWZ1bmN0aW9uIGwodCxlKXt2YXIgbj1pKGUsdC5zZWcuZW5kLHQuc2VnKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyJiZyLnNlZ21lbnRDaG9wKHQuc2VnLGUpLHQub3RoZXIucmVtb3ZlKCksdC5zZWcuZW5kPWUsdC5vdGhlci5wdD1lLG8odC5vdGhlcix0LnB0KX0odCxlKSxzKG4sdC5wcmltYXJ5KX1mdW5jdGlvbiBjKGksbyl7dmFyIHM9bi5jcmVhdGUoKTtmdW5jdGlvbiBjKHQpe3JldHVybiBzLmZpbmRUcmFuc2l0aW9uKChmdW5jdGlvbihyKXt2YXIgbixpLGEsbyxzLGw7cmV0dXJuKG49dCxpPXIuZXYsYT1uLnNlZy5zdGFydCxvPW4uc2VnLmVuZCxzPWkuc2VnLnN0YXJ0LGw9aS5zZWcuZW5kLGUucG9pbnRzQ29sbGluZWFyKGEscyxsKT9lLnBvaW50c0NvbGxpbmVhcihvLHMsbCl8fGUucG9pbnRBYm92ZU9yT25MaW5lKG8scyxsKT8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKGEscyxsKT8xOi0xKT4wfSkpfWZ1bmN0aW9uIHUodCxuKXt2YXIgaT10LnNlZyxhPW4uc2VnLG89aS5zdGFydCxzPWkuZW5kLGM9YS5zdGFydCx1PWEuZW5kO3ImJnIuY2hlY2tJbnRlcnNlY3Rpb24oaSxhKTt2YXIgaD1lLmxpbmVzSW50ZXJzZWN0KG8scyxjLHUpO2lmKCExPT09aCl7aWYoIWUucG9pbnRzQ29sbGluZWFyKG8scyxjKSlyZXR1cm4hMTtpZihlLnBvaW50c1NhbWUobyx1KXx8ZS5wb2ludHNTYW1lKHMsYykpcmV0dXJuITE7dmFyIGY9ZS5wb2ludHNTYW1lKG8sYykscD1lLnBvaW50c1NhbWUocyx1KTtpZihmJiZwKXJldHVybiBuO3ZhciBkPSFmJiZlLnBvaW50QmV0d2VlbihvLGMsdSksZz0hcCYmZS5wb2ludEJldHdlZW4ocyxjLHUpO2lmKGYpcmV0dXJuIGc/bChuLHMpOmwodCx1KSxuO2QmJihwfHwoZz9sKG4scyk6bCh0LHUpKSxsKG4sbykpfWVsc2UgMD09PWguYWxvbmdBJiYoLTE9PT1oLmFsb25nQj9sKHQsYyk6MD09PWguYWxvbmdCP2wodCxoLnB0KToxPT09aC5hbG9uZ0ImJmwodCx1KSksMD09PWguYWxvbmdCJiYoLTE9PT1oLmFsb25nQT9sKG4sbyk6MD09PWguYWxvbmdBP2wobixoLnB0KToxPT09aC5hbG9uZ0EmJmwobixzKSk7cmV0dXJuITF9Zm9yKHZhciBoPVtdOyFhLmlzRW1wdHkoKTspe3ZhciBmPWEuZ2V0SGVhZCgpO2lmKHImJnIudmVydChmLnB0WzBdKSxmLmlzU3RhcnQpe3ImJnIuc2VnbWVudE5ldyhmLnNlZyxmLnByaW1hcnkpO3ZhciBwPWMoZiksZD1wLmJlZm9yZT9wLmJlZm9yZS5ldjpudWxsLGc9cC5hZnRlcj9wLmFmdGVyLmV2Om51bGw7ZnVuY3Rpb24gbSgpe2lmKGQpe3ZhciB0PXUoZixkKTtpZih0KXJldHVybiB0fXJldHVybiEhZyYmdShmLGcpfXImJnIudGVtcFN0YXR1cyhmLnNlZywhIWQmJmQuc2VnLCEhZyYmZy5zZWcpO3ZhciB2LHk9bSgpO2lmKHkpe3ZhciB4O2lmKHQpKHg9bnVsbD09PWYuc2VnLm15RmlsbC5iZWxvd3x8Zi5zZWcubXlGaWxsLmFib3ZlIT09Zi5zZWcubXlGaWxsLmJlbG93KSYmKHkuc2VnLm15RmlsbC5hYm92ZT0heS5zZWcubXlGaWxsLmFib3ZlKTtlbHNlIHkuc2VnLm90aGVyRmlsbD1mLnNlZy5teUZpbGw7ciYmci5zZWdtZW50VXBkYXRlKHkuc2VnKSxmLm90aGVyLnJlbW92ZSgpLGYucmVtb3ZlKCl9aWYoYS5nZXRIZWFkKCkhPT1mKXtyJiZyLnJld2luZChmLnNlZyk7Y29udGludWV9aWYodCl4PW51bGw9PT1mLnNlZy5teUZpbGwuYmVsb3d8fGYuc2VnLm15RmlsbC5hYm92ZSE9PWYuc2VnLm15RmlsbC5iZWxvdyxmLnNlZy5teUZpbGwuYmVsb3c9Zz9nLnNlZy5teUZpbGwuYWJvdmU6aSxmLnNlZy5teUZpbGwuYWJvdmU9eD8hZi5zZWcubXlGaWxsLmJlbG93OmYuc2VnLm15RmlsbC5iZWxvdztlbHNlIGlmKG51bGw9PT1mLnNlZy5vdGhlckZpbGwpdj1nP2YucHJpbWFyeT09PWcucHJpbWFyeT9nLnNlZy5vdGhlckZpbGwuYWJvdmU6Zy5zZWcubXlGaWxsLmFib3ZlOmYucHJpbWFyeT9vOmksZi5zZWcub3RoZXJGaWxsPXthYm92ZTp2LGJlbG93OnZ9O3ImJnIuc3RhdHVzKGYuc2VnLCEhZCYmZC5zZWcsISFnJiZnLnNlZyksZi5vdGhlci5zdGF0dXM9cC5pbnNlcnQobi5ub2RlKHtldjpmfSkpfWVsc2V7dmFyIGI9Zi5zdGF0dXM7aWYobnVsbD09PWIpdGhyb3cgbmV3IEVycm9yKCJQb2x5Qm9vbDogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2UiKTtpZihzLmV4aXN0cyhiLnByZXYpJiZzLmV4aXN0cyhiLm5leHQpJiZ1KGIucHJldi5ldixiLm5leHQuZXYpLHImJnIuc3RhdHVzUmVtb3ZlKGIuZXYuc2VnKSxiLnJlbW92ZSgpLCFmLnByaW1hcnkpe3ZhciBfPWYuc2VnLm15RmlsbDtmLnNlZy5teUZpbGw9Zi5zZWcub3RoZXJGaWxsLGYuc2VnLm90aGVyRmlsbD1ffWgucHVzaChmLnNlZyl9YS5nZXRIZWFkKCkucmVtb3ZlKCl9cmV0dXJuIHImJnIuZG9uZSgpLGh9cmV0dXJuIHQ/e2FkZFJlZ2lvbjpmdW5jdGlvbih0KXtmb3IodmFyIG4saSxhLG89dFt0Lmxlbmd0aC0xXSxsPTA7bDx0Lmxlbmd0aDtsKyspe249byxvPXRbbF07dmFyIGM9ZS5wb2ludHNDb21wYXJlKG4sbyk7MCE9PWMmJnMoKGk9YzwwP246byxhPWM8MD9vOm4se2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDppLGVuZDphLG15RmlsbDp7YWJvdmU6bnVsbCxiZWxvdzpudWxsfSxvdGhlckZpbGw6bnVsbH0pLCEwKX19LGNhbGN1bGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCExKX19OntjYWxjdWxhdGU6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITApfSkpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITEpfSkpLGMoZSxuKX19fX0seyIuL2xpbmtlZC1saXN0Ijo0OTZ9XSw0OTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXtyb290Ontyb290OiEwLG5leHQ6bnVsbH0sZXhpc3RzOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmZSE9PXQucm9vdH0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dC5yb290Lm5leHR9LGdldEhlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5yb290Lm5leHR9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj10LnJvb3QsaT10LnJvb3QubmV4dDtudWxsIT09aTspe2lmKHIoaSkpcmV0dXJuIGUucHJldj1pLnByZXYsZS5uZXh0PWksaS5wcmV2Lm5leHQ9ZSx2b2lkKGkucHJldj1lKTtuPWksaT1pLm5leHR9bi5uZXh0PWUsZS5wcmV2PW4sZS5uZXh0PW51bGx9LGZpbmRUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10LnJvb3Qsbj10LnJvb3QubmV4dDtudWxsIT09biYmIWUobik7KXI9bixuPW4ubmV4dDtyZXR1cm57YmVmb3JlOnI9PT10LnJvb3Q/bnVsbDpyLGFmdGVyOm4saW5zZXJ0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXY9cix0Lm5leHQ9bixyLm5leHQ9dCxudWxsIT09biYmKG4ucHJldj10KSx0fX19fTtyZXR1cm4gdH0sbm9kZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2PW51bGwsdC5uZXh0PW51bGwsdC5yZW1vdmU9ZnVuY3Rpb24oKXt0LnByZXYubmV4dD10Lm5leHQsdC5uZXh0JiYodC5uZXh0LnByZXY9dC5wcmV2KSx0LnByZXY9bnVsbCx0Lm5leHQ9bnVsbH0sdH19fSx7fV0sNDk3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bXSxpPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBhPXQuc3RhcnQsbz10LmVuZDtpZihlLnBvaW50c1NhbWUoYSxvKSljb25zb2xlLndhcm4oIlBvbHlCb29sOiBXYXJuaW5nOiBaZXJvLWxlbmd0aCBzZWdtZW50IGRldGVjdGVkOyB5b3VyIGVwc2lsb24gaXMgcHJvYmFibHkgdG9vIHNtYWxsIG9yIHRvbyBsYXJnZSIpO2Vsc2V7ciYmci5jaGFpblN0YXJ0KHQpO2Zvcih2YXIgcz17aW5kZXg6MCxtYXRjaGVzX2hlYWQ6ITEsbWF0Y2hlc19wdDE6ITF9LGw9e2luZGV4OjAsbWF0Y2hlc19oZWFkOiExLG1hdGNoZXNfcHQxOiExfSxjPXMsdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgaD0obT1uW3VdKVswXSxmPShtWzFdLG1bbS5sZW5ndGgtMV0pO21bbS5sZW5ndGgtMl07aWYoZS5wb2ludHNTYW1lKGgsYSkpe2lmKGsodSwhMCwhMCkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoaCxvKSl7aWYoayh1LCEwLCExKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShmLGEpKXtpZihrKHUsITEsITApKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGYsbykmJmsodSwhMSwhMSkpYnJlYWt9aWYoYz09PXMpcmV0dXJuIG4ucHVzaChbYSxvXSksdm9pZChyJiZyLmNoYWluTmV3KGEsbykpO2lmKGM9PT1sKXtyJiZyLmNoYWluTWF0Y2gocy5pbmRleCk7dmFyIHA9cy5pbmRleCxkPXMubWF0Y2hlc19wdDE/bzphLGc9cy5tYXRjaGVzX2hlYWQsbT1uW3BdLHY9Zz9tWzBdOm1bbS5sZW5ndGgtMV0seT1nP21bMV06bVttLmxlbmd0aC0yXSx4PWc/bVttLmxlbmd0aC0xXTptWzBdLGI9Zz9tW20ubGVuZ3RoLTJdOm1bMV07cmV0dXJuIGUucG9pbnRzQ29sbGluZWFyKHksdixkKSYmKGc/KHImJnIuY2hhaW5SZW1vdmVIZWFkKHMuaW5kZXgsZCksbS5zaGlmdCgpKToociYmci5jaGFpblJlbW92ZVRhaWwocy5pbmRleCxkKSxtLnBvcCgpKSx2PXkpLGUucG9pbnRzU2FtZSh4LGQpPyhuLnNwbGljZShwLDEpLGUucG9pbnRzQ29sbGluZWFyKGIseCx2KSYmKGc/KHImJnIuY2hhaW5SZW1vdmVUYWlsKHMuaW5kZXgsdiksbS5wb3AoKSk6KHImJnIuY2hhaW5SZW1vdmVIZWFkKHMuaW5kZXgsdiksbS5zaGlmdCgpKSksciYmci5jaGFpbkNsb3NlKHMuaW5kZXgpLHZvaWQgaS5wdXNoKG0pKTp2b2lkKGc/KHImJnIuY2hhaW5BZGRIZWFkKHMuaW5kZXgsZCksbS51bnNoaWZ0KGQpKToociYmci5jaGFpbkFkZFRhaWwocy5pbmRleCxkKSxtLnB1c2goZCkpKX12YXIgXz1zLmluZGV4LHc9bC5pbmRleDtyJiZyLmNoYWluQ29ubmVjdChfLHcpO3ZhciBUPW5bX10ubGVuZ3RoPG5bd10ubGVuZ3RoO3MubWF0Y2hlc19oZWFkP2wubWF0Y2hlc19oZWFkP1Q/KE0oXyksQShfLHcpKTooTSh3KSxBKHcsXykpOkEodyxfKTpsLm1hdGNoZXNfaGVhZD9BKF8sdyk6VD8oTShfKSxBKHcsXykpOihNKHcpLEEoXyx3KSl9ZnVuY3Rpb24gayh0LGUscil7cmV0dXJuIGMuaW5kZXg9dCxjLm1hdGNoZXNfaGVhZD1lLGMubWF0Y2hlc19wdDE9cixjPT09cz8oYz1sLCExKTooYz1udWxsLCEwKX1mdW5jdGlvbiBNKHQpe3ImJnIuY2hhaW5SZXZlcnNlKHQpLG5bdF0ucmV2ZXJzZSgpfWZ1bmN0aW9uIEEodCxpKXt2YXIgYT1uW3RdLG89bltpXSxzPWFbYS5sZW5ndGgtMV0sbD1hW2EubGVuZ3RoLTJdLGM9b1swXSx1PW9bMV07ZS5wb2ludHNDb2xsaW5lYXIobCxzLGMpJiYociYmci5jaGFpblJlbW92ZVRhaWwodCxzKSxhLnBvcCgpLHM9bCksZS5wb2ludHNDb2xsaW5lYXIocyxjLHUpJiYociYmci5jaGFpblJlbW92ZUhlYWQoaSxjKSxvLnNoaWZ0KCkpLHImJnIuY2hhaW5Kb2luKHQsaSksblt0XT1hLmNvbmNhdChvKSxuLnNwbGljZShpLDEpfX0pKSxpfX0se31dLDQ5ODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPSh0Lm15RmlsbC5hYm92ZT84OjApKyh0Lm15RmlsbC5iZWxvdz80OjApKyh0Lm90aGVyRmlsbCYmdC5vdGhlckZpbGwuYWJvdmU/MjowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmJlbG93PzE6MCk7MCE9PWVbaV0mJm4ucHVzaCh7aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kLG15RmlsbDp7YWJvdmU6MT09PWVbaV0sYmVsb3c6Mj09PWVbaV19LG90aGVyRmlsbDpudWxsfSl9KSksciYmci5zZWxlY3RlZChuKSxufXZhciBpPXt1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMiwyLDAsMCwxLDAsMSwwLDAsMCwwLDBdLGUpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDAsMCwwLDAsMiwwLDIsMCwwLDEsMSwwLDIsMSwwXSxlKX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMCwwLDAsMiwwLDIsMCwxLDEsMCwwLDAsMSwyLDBdLGUpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwwLDAsMSwxLDAsMiwwLDIsMCwwLDAsMF0sZSl9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMiwwLDAsMSwxLDAsMCwyLDAsMSwyLDBdLGUpfX07ZS5leHBvcnRzPWl9LHt9XSw0OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49bmV3IEZsb2F0NjRBcnJheSg0KSxpPW5ldyBGbG9hdDY0QXJyYXkoNCksYT1uZXcgRmxvYXQ2NEFycmF5KDQpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe24ubGVuZ3RoPG8ubGVuZ3RoJiYobj1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSxpPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpLGE9bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCkpO2Zvcih2YXIgbD0wO2w8by5sZW5ndGg7KytsKW5bbF09dFtsXS1vW2xdLGlbbF09ZVtsXS10W2xdLGFbbF09cltsXS10W2xdO3ZhciBjPTAsdT0wLGg9MCxmPTAscD0wLGQ9MDtmb3IobD0wO2w8by5sZW5ndGg7KytsKXt2YXIgZz1pW2xdLG09YVtsXSx2PW5bbF07Yys9ZypnLHUrPWcqbSxoKz1tKm0sZis9dipnLHArPXYqbSxkKz12KnZ9dmFyIHkseCxiLF8sdyxUPU1hdGguYWJzKGMqaC11KnUpLGs9dSpwLWgqZixNPXUqZi1jKnA7aWYoaytNPD1UKWlmKGs8MClNPDAmJmY8MD8oTT0wLC1mPj1jPyhrPTEseT1jKzIqZitkKTp5PWYqKGs9LWYvYykrZCk6KGs9MCxwPj0wPyhNPTAseT1kKTotcD49aD8oTT0xLHk9aCsyKnArZCk6eT1wKihNPS1wL2gpK2QpO2Vsc2UgaWYoTTwwKU09MCxmPj0wPyhrPTAseT1kKTotZj49Yz8oaz0xLHk9YysyKmYrZCk6eT1mKihrPS1mL2MpK2Q7ZWxzZXt2YXIgQT0xL1Q7eT0oayo9QSkqKGMqayt1KihNKj1BKSsyKmYpK00qKHUqaytoKk0rMipwKStkfWVsc2UgazwwPyhiPWgrcCk+KHg9dStmKT8oXz1iLXgpPj0odz1jLTIqdStoKT8oaz0xLE09MCx5PWMrMipmK2QpOnk9KGs9Xy93KSooYyprK3UqKE09MS1rKSsyKmYpK00qKHUqaytoKk0rMipwKStkOihrPTAsYjw9MD8oTT0xLHk9aCsyKnArZCk6cD49MD8oTT0wLHk9ZCk6eT1wKihNPS1wL2gpK2QpOk08MD8oYj1jK2YpPih4PXUrcCk/KF89Yi14KT49KHc9Yy0yKnUraCk/KE09MSxrPTAseT1oKzIqcCtkKTp5PShrPTEtKE09Xy93KSkqKGMqayt1Kk0rMipmKStNKih1KmsraCpNKzIqcCkrZDooTT0wLGI8PTA/KGs9MSx5PWMrMipmK2QpOmY+PTA/KGs9MCx5PWQpOnk9Ziooaz0tZi9jKStkKTooXz1oK3AtdS1mKTw9MD8oaz0wLE09MSx5PWgrMipwK2QpOl8+PSh3PWMtMip1K2gpPyhrPTEsTT0wLHk9YysyKmYrZCk6eT0oaz1fL3cpKihjKmsrdSooTT0xLWspKzIqZikrTSoodSprK2gqTSsyKnApK2Q7dmFyIFM9MS1rLU07Zm9yKGw9MDtsPG8ubGVuZ3RoOysrbClzW2xdPVMqdFtsXStrKmVbbF0rTSpyW2xdO3JldHVybiB5PDA/MDp5fX0se31dLDUwMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLmV4cG9ydHM9e307ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIHMoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGwodCl7aWYobj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQodCwwKTtpZigobj09PW98fCFuKSYmc2V0VGltZW91dClyZXR1cm4gbj1zZXRUaW1lb3V0LHNldFRpbWVvdXQodCwwKTt0cnl7cmV0dXJuIG4odCwwKX1jYXRjaChlKXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLHQsMCl9Y2F0Y2goZSl7cmV0dXJuIG4uY2FsbCh0aGlzLHQsMCl9fX0hZnVuY3Rpb24oKXt0cnl7bj0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Om99Y2F0Y2godCl7bj1vfXRyeXtpPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnN9Y2F0Y2godCl7aT1zfX0oKTt2YXIgYyx1PVtdLGg9ITEsZj0tMTtmdW5jdGlvbiBwKCl7aCYmYyYmKGg9ITEsYy5sZW5ndGg/dT1jLmNvbmNhdCh1KTpmPS0xLHUubGVuZ3RoJiZkKCkpfWZ1bmN0aW9uIGQoKXtpZighaCl7dmFyIHQ9bChwKTtoPSEwO2Zvcih2YXIgZT11Lmxlbmd0aDtlOyl7Zm9yKGM9dSx1PVtdOysrZjxlOyljJiZjW2ZdLnJ1bigpO2Y9LTEsZT11Lmxlbmd0aH1jPW51bGwsaD0hMSxmdW5jdGlvbih0KXtpZihpPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGk9PT1zfHwhaSkmJmNsZWFyVGltZW91dClyZXR1cm4gaT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtpKHQpfWNhdGNoKGUpe3RyeXtyZXR1cm4gaS5jYWxsKG51bGwsdCl9Y2F0Y2goZSl7cmV0dXJuIGkuY2FsbCh0aGlzLHQpfX19KHQpfX1mdW5jdGlvbiBnKHQsZSl7dGhpcy5mdW49dCx0aGlzLmFycmF5PWV9ZnVuY3Rpb24gbSgpe31hLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07dS5wdXNoKG5ldyBnKHQsZSkpLDEhPT11Lmxlbmd0aHx8aHx8bChkKX0sZy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sYS50aXRsZT0iYnJvd3NlciIsYS5icm93c2VyPSEwLGEuZW52PXt9LGEuYXJndj1bXSxhLnZlcnNpb249IiIsYS52ZXJzaW9ucz17fSxhLm9uPW0sYS5hZGRMaXN0ZW5lcj1tLGEub25jZT1tLGEub2ZmPW0sYS5yZW1vdmVMaXN0ZW5lcj1tLGEucmVtb3ZlQWxsTGlzdGVuZXJzPW0sYS5lbWl0PW0sYS5wcmVwZW5kTGlzdGVuZXI9bSxhLnByZXBlbmRPbmNlTGlzdGVuZXI9bSxhLmxpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sYS5iaW5kaW5nPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sYS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGEuY2hkaXI9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sYS51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0se31dLDUwMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJnbC1xdWF0L3NsZXJwIil9LHsiZ2wtcXVhdC9zbGVycCI6MzA0fV0sNTAyOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj10KCJwZXJmb3JtYW5jZS1ub3ciKSxpPSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P3I6d2luZG93LGE9WyJtb3oiLCJ3ZWJraXQiXSxvPSJBbmltYXRpb25GcmFtZSIscz1pWyJyZXF1ZXN0IitvXSxsPWlbImNhbmNlbCIrb118fGlbImNhbmNlbFJlcXVlc3QiK29dLGM9MDshcyYmYzxhLmxlbmd0aDtjKyspcz1pW2FbY10rIlJlcXVlc3QiK29dLGw9aVthW2NdKyJDYW5jZWwiK29dfHxpW2FbY10rIkNhbmNlbFJlcXVlc3QiK29dO2lmKCFzfHwhbCl7dmFyIHU9MCxoPTAsZj1bXTtzPWZ1bmN0aW9uKHQpe2lmKDA9PT1mLmxlbmd0aCl7dmFyIGU9bigpLHI9TWF0aC5tYXgoMCwxZTMvNjAtKGUtdSkpO3U9citlLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIHQ9Zi5zbGljZSgwKTtmLmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKCF0W2VdLmNhbmNlbGxlZCl0cnl7dFtlXS5jYWxsYmFjayh1KX1jYXRjaCh0KXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IHR9KSwwKX19KSxNYXRoLnJvdW5kKHIpKX1yZXR1cm4gZi5wdXNoKHtoYW5kbGU6KytoLGNhbGxiYWNrOnQsY2FuY2VsbGVkOiExfSksaH0sbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGYubGVuZ3RoO2UrKylmW2VdLmhhbmRsZT09PXQmJihmW2VdLmNhbmNlbGxlZD0hMCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYWxsKGksdCl9LGUuZXhwb3J0cy5jYW5jZWw9ZnVuY3Rpb24oKXtsLmFwcGx5KGksYXJndW1lbnRzKX0sZS5leHBvcnRzLnBvbHlmaWxsPWZ1bmN0aW9uKHQpe3R8fCh0PWkpLHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lPXMsdC5jYW5jZWxBbmltYXRpb25GcmFtZT1sfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJwZXJmb3JtYW5jZS1ub3ciOjQ4Mn1dLDUwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaWctcmF0L2FkZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHsiYmlnLXJhdC9hZGQiOjgwfV0sNTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpZVtyXT1uKHRbcl0pO3JldHVybiBlfTt2YXIgbj10KCJiaWctcmF0Iil9LHsiYmlnLXJhdCI6ODN9XSw1MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmlnLXJhdCIpLGk9dCgiYmlnLXJhdC9tdWwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bihlKSxhPXQubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9MDtzPGE7KytzKW9bc109aSh0W3NdLHIpO3JldHVybiBvfX0seyJiaWctcmF0Ijo4MywiYmlnLXJhdC9tdWwiOjkyfV0sNTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpZy1yYXQvc3ViIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09bih0W2FdLGVbYV0pO3JldHVybiBpfX0seyJiaWctcmF0L3N1YiI6OTR9XSw1MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29tcGFyZS1jZWxsIiksaT10KCJjb21wYXJlLW9yaWVudGVkLWNlbGwiKSxhPXQoImNlbGwtb3JpZW50YXRpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5zb3J0KGkpO2Zvcih2YXIgZT10Lmxlbmd0aCxyPTAsbz0wO288ZTsrK28pe3ZhciBzPXRbb10sbD1hKHMpO2lmKDAhPT1sKXtpZihyPjApe3ZhciBjPXRbci0xXTtpZigwPT09bihzLGMpJiZhKGMpIT09bCl7ci09MTtjb250aW51ZX19dFtyKytdPXN9fXJldHVybiB0Lmxlbmd0aD1yLHR9fSx7ImNlbGwtb3JpZW50YXRpb24iOjExNywiY29tcGFyZS1jZWxsIjoxMzMsImNvbXBhcmUtb3JpZW50ZWQtY2VsbCI6MTM0fV0sNTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImFycmF5LWJvdW5kcyIpLGk9dCgiY29sb3Itbm9ybWFsaXplIiksYT10KCJ1cGRhdGUtZGlmZiIpLG89dCgicGljay1ieS1hbGlhcyIpLHM9dCgib2JqZWN0LWFzc2lnbiIpLGw9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLGM9dCgidG8tZmxvYXQzMiIpLHU9Yy5mbG9hdDMyLGg9Yy5mcmFjdDMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOmU9dDtlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpO2lmKCEodD1lLnJlZ2wpLmhhc0V4dGVuc2lvbigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXRocm93IEVycm9yKCJyZWdsLWVycm9yMmQ6IGBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzYCBleHRlbnNpb24gc2hvdWxkIGJlIGVuYWJsZWQiKTt2YXIgcixjLHAsZCxnLG0sdj10Ll9nbCx5PXtjb2xvcjoiYmxhY2siLGNhcFNpemU6NSxsaW5lV2lkdGg6MSxvcGFjaXR5OjEsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLG9mZnNldDowLGNvdW50OjAsYm91bmRzOm51bGwscG9zaXRpb25zOltdLGVycm9yczpbXX0seD1bXTtyZXR1cm4gZD10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksYz10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSkscD10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksZz10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksbT10LmJ1ZmZlcih7dXNhZ2U6InN0YXRpYyIsdHlwZToiZmxvYXQiLGRhdGE6Zn0pLFQoZSkscj10KHt2ZXJ0OiJcblx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcblx0XHRhdHRyaWJ1dGUgdmVjNCBlcnJvcjtcblx0XHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMyIGRpcmVjdGlvbiwgbGluZU9mZnNldCwgY2FwT2Zmc2V0O1xuXG5cdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdHVuaWZvcm0gZmxvYXQgbGluZVdpZHRoLCBjYXBTaXplO1xuXHRcdHVuaWZvcm0gdmVjMiBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdDtcblxuXHRcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cdFx0XHRmcmFnQ29sb3IgPSBjb2xvciAvIDI1NS47XG5cblx0XHRcdHZlYzIgcGl4ZWxPZmZzZXQgPSBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0ICsgKGNhcFNpemUgKyBsaW5lV2lkdGgpICogY2FwT2Zmc2V0O1xuXG5cdFx0XHR2ZWMyIGR4eSA9IC1zdGVwKC41LCBkaXJlY3Rpb24ueHkpICogZXJyb3IueHogKyBzdGVwKGRpcmVjdGlvbi54eSwgdmVjMigtLjUpKSAqIGVycm9yLnl3O1xuXG5cdFx0XHR2ZWMyIHBvc2l0aW9uID0gcG9zaXRpb24gKyBkeHk7XG5cblx0XHRcdHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXG5cdFx0XHRcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuXHRcdFx0XHQrIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG5cdFx0XHRcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xuXG5cdFx0XHRwb3MgKz0gcGl4ZWxPZmZzZXQgLyB2aWV3cG9ydC56dztcblxuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAsIDEpO1xuXHRcdH1cblx0XHQiLGZyYWc6IlxuXHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxuXHRcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cblx0XHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cdFx0XHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdFx0XHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xuXHRcdH1cblx0XHQiLHVuaWZvcm1zOntyYW5nZTp0LnByb3AoInJhbmdlIiksbGluZVdpZHRoOnQucHJvcCgibGluZVdpZHRoIiksY2FwU2l6ZTp0LnByb3AoImNhcFNpemUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHNjYWxlOnQucHJvcCgic2NhbGUiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX19LGF0dHJpYnV0ZXM6e2NvbG9yOntidWZmZXI6ZCxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gNCplLm9mZnNldH0sZGl2aXNvcjoxfSxwb3NpdGlvbjp7YnVmZmVyOmMsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnAsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZXJyb3I6e2J1ZmZlcjpnLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiAxNiplLm9mZnNldH0sZGl2aXNvcjoxfSxkaXJlY3Rpb246e2J1ZmZlcjptLHN0cmlkZToyNCxvZmZzZXQ6MH0sbGluZU9mZnNldDp7YnVmZmVyOm0sc3RyaWRlOjI0LG9mZnNldDo4fSxjYXBPZmZzZXQ6e2J1ZmZlcjptLHN0cmlkZToyNCxvZmZzZXQ6MTZ9fSxwcmltaXRpdmU6InRyaWFuZ2xlcyIsYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sZGVwdGg6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKSxzdGVuY2lsOiExLGluc3RhbmNlczp0LnByb3AoImNvdW50IiksY291bnQ6Zi5sZW5ndGh9KSxzKGIse3VwZGF0ZTpULGRyYXc6XyxkZXN0cm95OmsscmVnbDp0LGdsOnYsY2FudmFzOnYuY2FudmFzLGdyb3Vwczp4fSksYjtmdW5jdGlvbiBiKHQpe3Q/VCh0KTpudWxsPT09dCYmaygpLF8oKX1mdW5jdGlvbiBfKGUpe2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gdyhlKTtlJiYhQXJyYXkuaXNBcnJheShlKSYmKGU9W2VdKSx0Ll9yZWZyZXNoKCkseC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe3QmJihlJiYoZVtyXT90LmRyYXc9ITA6dC5kcmF3PSExKSx0LmRyYXc/dyhyKTp0LmRyYXc9ITApfSkpfWZ1bmN0aW9uIHcodCl7Im51bWJlciI9PXR5cGVvZiB0JiYodD14W3RdKSxudWxsIT10JiZ0JiZ0LmNvdW50JiZ0LmNvbG9yJiZ0Lm9wYWNpdHkmJnQucG9zaXRpb25zJiZ0LnBvc2l0aW9ucy5sZW5ndGg+MSYmKHQuc2NhbGVSYXRpbz1bdC5zY2FsZVswXSp0LnZpZXdwb3J0LndpZHRoLHQuc2NhbGVbMV0qdC52aWV3cG9ydC5oZWlnaHRdLHIodCksdC5hZnRlciYmdC5hZnRlcih0KSl9ZnVuY3Rpb24gVCh0KXtpZih0KXtudWxsIT10Lmxlbmd0aD8ibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PVt7cG9zaXRpb25zOnR9XSk6QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgZT0wLHI9MDtpZihiLmdyb3Vwcz14PXQubWFwKChmdW5jdGlvbih0LGMpe3ZhciB1PXhbY107cmV0dXJuIHQ/KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q9e2FmdGVyOnR9OiJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9e3Bvc2l0aW9uczp0fSksdD1vKHQse2NvbG9yOiJjb2xvciBjb2xvcnMgZmlsbCIsY2FwU2l6ZToiY2FwU2l6ZSBjYXAgY2Fwc2l6ZSBjYXAtc2l6ZSIsbGluZVdpZHRoOiJsaW5lV2lkdGggbGluZS13aWR0aCB3aWR0aCBsaW5lIHRoaWNrbmVzcyIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2aWV3cG9ydCB2aWV3Qm94IixlcnJvcnM6ImVycm9ycyBlcnJvciIscG9zaXRpb25zOiJwb3NpdGlvbnMgcG9zaXRpb24gZGF0YSBwb2ludHMifSksdXx8KHhbY109dT17aWQ6YyxzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGRyYXc6ITB9LHQ9cyh7fSx5LHQpKSxhKHUsdCxbe2xpbmVXaWR0aDpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sY2FwU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sb3BhY2l0eTpwYXJzZUZsb2F0LGVycm9yczpmdW5jdGlvbih0KXtyZXR1cm4gdD1sKHQpLHIrPXQubGVuZ3RoLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LHIpe3JldHVybiB0PWwodCwiZmxvYXQ2NCIpLHIuY291bnQ9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKSxyLmJvdW5kcz1uKHQsMiksci5vZmZzZXQ9ZSxlKz1yLmNvdW50LHR9fSx7Y29sb3I6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNvdW50O2lmKHR8fCh0PSJ0cmFuc3BhcmVudCIpLCFBcnJheS5pc0FycmF5KHQpfHwibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBuPXQ7dD1BcnJheShyKTtmb3IodmFyIGE9MDthPHI7YSsrKXRbYV09bn1pZih0Lmxlbmd0aDxyKXRocm93IEVycm9yKCJOb3QgZW5vdWdoIGNvbG9ycyIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheSg0KnIpLHM9MDtzPHI7cysrKXt2YXIgbD1pKHRbc10sInVpbnQ4Iik7by5zZXQobCw0KnMpfXJldHVybiBvfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7cmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9aChlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWgoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U9e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19OnQ/KGU9e3g6dC54fHx0LmxlZnR8fDAseTp0Lnl8fHQudG9wfHwwfSx0LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD10Lnd8fHQud2lkdGh8fDAsdC5ib3R0b20/ZS5oZWlnaHQ9dC5ib3R0b20tZS55OmUuaGVpZ2h0PXQuaHx8dC5oZWlnaHR8fDApOmU9e3g6MCx5OjAsd2lkdGg6di5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnYuZHJhd2luZ0J1ZmZlckhlaWdodH0sZX19XSksdSk6dX0pKSxlfHxyKXt2YXIgZj14LnJlZHVjZSgoZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KyhlP2UuY291bnQ6MCl9KSwwKSxtPW5ldyBGbG9hdDY0QXJyYXkoMipmKSxfPW5ldyBVaW50OEFycmF5KDQqZiksdz1uZXcgRmxvYXQzMkFycmF5KDQqZik7eC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2lmKHQpe3ZhciByPXQucG9zaXRpb25zLG49dC5jb3VudCxpPXQub2Zmc2V0LGE9dC5jb2xvcixvPXQuZXJyb3JzO24mJihfLnNldChhLDQqaSksdy5zZXQobyw0KmkpLG0uc2V0KHIsMippKSl9fSkpLGModShtKSkscChoKG0pKSxkKF8pLGcodyl9fX1mdW5jdGlvbiBrKCl7Yy5kZXN0cm95KCkscC5kZXN0cm95KCksZC5kZXN0cm95KCksZy5kZXN0cm95KCksbS5kZXN0cm95KCl9fTt2YXIgZj1bWzEsMCwwLDEsMCwwXSxbMSwwLDAsLTEsMCwwXSxbLTEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsMSwwLDBdLFsxLDAsMCwxLDAsMF0sWzEsMCwtMSwwLDAsMV0sWzEsMCwtMSwwLDAsLTFdLFsxLDAsMSwwLDAsLTFdLFsxLDAsMSwwLDAsLTFdLFsxLDAsMSwwLDAsMV0sWzEsMCwtMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwtMV0sWy0xLDAsMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwxXSxbLTEsMCwtMSwwLDAsMV0sWzAsMSwxLDAsMCwwXSxbMCwxLC0xLDAsMCwwXSxbMCwtMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLDEsMSwwLDAsMF0sWzAsLTEsMSwwLDAsMF0sWzAsMSwwLC0xLDEsMF0sWzAsMSwwLC0xLC0xLDBdLFswLDEsMCwxLC0xLDBdLFswLDEsMCwxLDEsMF0sWzAsMSwwLC0xLDEsMF0sWzAsMSwwLDEsLTEsMF0sWzAsLTEsMCwtMSwxLDBdLFswLC0xLDAsLTEsLTEsMF0sWzAsLTEsMCwxLC0xLDBdLFswLC0xLDAsMSwxLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLDEsLTEsMF1dfSx7ImFycmF5LWJvdW5kcyI6NzAsImNvbG9yLW5vcm1hbGl6ZSI6MTI1LCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyNDQsIm9iamVjdC1hc3NpZ24iOjQ3MywicGljay1ieS1hbGlhcyI6NDg1LCJ0by1mbG9hdDMyIjo1NDksInVwZGF0ZS1kaWZmIjo1NzF9XSw1MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3Itbm9ybWFsaXplIiksaT10KCJhcnJheS1ib3VuZHMiKSxhPXQoIm9iamVjdC1hc3NpZ24iKSxvPXQoImdsc2xpZnkiKSxzPXQoInBpY2stYnktYWxpYXMiKSxsPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxjPXQoImVhcmN1dCIpLHU9dCgiYXJyYXktbm9ybWFsaXplIiksaD10KCJ0by1mbG9hdDMyIiksZj1oLmZsb2F0MzIscD1oLmZyYWN0MzIsZD10KCJlczYtd2Vhay1tYXAiKSxnPXQoInBhcnNlLXJlY3QiKTtmdW5jdGlvbiBtKHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbSkpcmV0dXJuIG5ldyBtKHQsZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGV8fChlPXt9KSxlLnJlZ2w9dCk6ZT10LGUubGVuZ3RoJiYoZS5wb3NpdGlvbnM9ZSksISh0PWUucmVnbCkuaGFzRXh0ZW5zaW9uKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpdGhyb3cgRXJyb3IoInJlZ2wtZXJyb3IyZDogYEFOR0xFX2luc3RhbmNlZF9hcnJheXNgIGV4dGVuc2lvbiBzaG91bGQgYmUgZW5hYmxlZCIpO3RoaXMuZ2w9dC5fZ2wsdGhpcy5yZWdsPXQsdGhpcy5wYXNzZXM9W10sdGhpcy5zaGFkZXJzPW0uc2hhZGVycy5oYXModCk/bS5zaGFkZXJzLmdldCh0KTptLnNoYWRlcnMuc2V0KHQsbS5jcmVhdGVTaGFkZXJzKHQpKS5nZXQodCksdGhpcy51cGRhdGUoZSl9ZS5leHBvcnRzPW0sbS5kYXNoTXVsdD0yLG0ubWF4UGF0dGVybkxlbmd0aD0yNTYsbS5wcmVjaXNpb25UaHJlc2hvbGQ9M2U2LG0ubWF4UG9pbnRzPTFlNCxtLm1heExpbmVzPTIwNDgsbS5zaGFkZXJzPW5ldyBkLG0uY3JlYXRlU2hhZGVycz1mdW5jdGlvbih0KXt2YXIgZSxyPXQuYnVmZmVyKHt1c2FnZToic3RhdGljIix0eXBlOiJmbG9hdCIsZGF0YTpbMCwxLDAsMCwxLDEsMSwwXX0pLG49e3ByaW1pdGl2ZToidHJpYW5nbGUgc3RyaXAiLGluc3RhbmNlczp0LnByb3AoImNvdW50IiksY291bnQ6NCxvZmZzZXQ6MCx1bmlmb3Jtczp7bWl0ZXJNb2RlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInJvdW5kIj09PWUuam9pbj8yOjF9LG1pdGVyTGltaXQ6dC5wcm9wKCJtaXRlckxpbWl0Iiksc2NhbGU6dC5wcm9wKCJzY2FsZSIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLHRoaWNrbmVzczp0LnByb3AoInRoaWNrbmVzcyIpLGRhc2hQYXR0ZXJuOnQucHJvcCgiZGFzaFRleHR1cmUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHBpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIiksaWQ6dC5wcm9wKCJpZCIpLGRhc2hTaXplOnQucHJvcCgiZGFzaExlbmd0aCIpLHZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2Uudmlld3BvcnQueCxlLnZpZXdwb3J0LnksdC52aWV3cG9ydFdpZHRoLHQudmlld3BvcnRIZWlnaHRdfSxkZXB0aDp0LnByb3AoImRlcHRoIil9LGJsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDBdLGVxdWF0aW9uOntyZ2I6ImFkZCIsYWxwaGE6ImFkZCJ9LGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOiJvbmUgbWludXMgZHN0IGFscGhhIixkc3RBbHBoYToib25lIn19LGRlcHRoOntlbmFibGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4hZS5vdmVybGF5fX0sc3RlbmNpbDp7ZW5hYmxlOiExfSxzY2lzc29yOntlbmFibGU6ITAsYm94OnQucHJvcCgidmlld3BvcnQiKX0sdmlld3BvcnQ6dC5wcm9wKCJ2aWV3cG9ydCIpfSxpPXQoYSh7dmVydDpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgYUNvb3JkLCBiQ29vcmQsIGFDb29yZEZyYWN0LCBiQ29vcmRGcmFjdDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIGZsb2F0IGxpbmVFbmQsIGxpbmVUb3A7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdDtcbnVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzLCBwaXhlbFJhdGlvLCBpZCwgZGVwdGg7XG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcblxudmVjMiBwcm9qZWN0KHZlYzIgcG9zaXRpb24sIHZlYzIgcG9zaXRpb25GcmFjdCwgdmVjMiBzY2FsZSwgdmVjMiBzY2FsZUZyYWN0LCB2ZWMyIHRyYW5zbGF0ZSwgdmVjMiB0cmFuc2xhdGVGcmFjdCkge1xuXHQvLyB0aGUgb3JkZXIgaXMgaW1wb3J0YW50XG5cdHJldHVybiBwb3NpdGlvbiAqIHNjYWxlICsgdHJhbnNsYXRlXG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGUgKyB0cmFuc2xhdGVGcmFjdFxuICAgICAgICsgcG9zaXRpb24gKiBzY2FsZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGVGcmFjdDtcbn1cblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCBsaW5lU3RhcnQgPSAxLiAtIGxpbmVFbmQ7XG5cdGZsb2F0IGxpbmVPZmZzZXQgPSBsaW5lVG9wICogMi4gLSAxLjtcblxuXHR2ZWMyIGRpZmYgPSAoYkNvb3JkICsgYkNvb3JkRnJhY3QgLSBhQ29vcmQgLSBhQ29vcmRGcmFjdCk7XG5cdHRhbmdlbnQgPSBub3JtYWxpemUoZGlmZiAqIHNjYWxlICogdmlld3BvcnQuencpO1xuXHR2ZWMyIG5vcm1hbCA9IHZlYzIoLXRhbmdlbnQueSwgdGFuZ2VudC54KTtcblxuXHR2ZWMyIHBvc2l0aW9uID0gcHJvamVjdChhQ29vcmQsIGFDb29yZEZyYWN0LCBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCkgKiBsaW5lU3RhcnRcblx0XHQrIHByb2plY3QoYkNvb3JkLCBiQ29vcmRGcmFjdCwgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QpICogbGluZUVuZFxuXG5cdFx0KyB0aGlja25lc3MgKiBub3JtYWwgKiAuNSAqIGxpbmVPZmZzZXQgLyB2aWV3cG9ydC56dztcblxuXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLjAgLSAxLjAsIGRlcHRoLCAxKTtcblxuXHRmcmFnQ29sb3IgPSBjb2xvciAvIDI1NS47XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFBhdHRlcm47XG5cbnVuaWZvcm0gZmxvYXQgZGFzaFNpemUsIHBpeGVsUmF0aW8sIHRoaWNrbmVzcywgb3BhY2l0eSwgaWQ7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCBhbHBoYSA9IDEuO1xuXG5cdGZsb2F0IHQgPSBmcmFjdChkb3QodGFuZ2VudCwgZ2xfRnJhZ0Nvb3JkLnh5KSAvIGRhc2hTaXplKSAqIC41ICsgLjI1O1xuXHRmbG9hdCBkYXNoID0gdGV4dHVyZTJEKGRhc2hQYXR0ZXJuLCB2ZWMyKHQsIC41KSkucjtcblxuXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IGFscGhhICogb3BhY2l0eSAqIGRhc2g7XG59XG4iXSksYXR0cmlidXRlczp7bGluZUVuZDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDowfSxsaW5lVG9wOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjR9LGFDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxhQ29vcmRGcmFjdDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25GcmFjdEJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxjb2xvcjp7YnVmZmVyOnQucHJvcCgiY29sb3JCdWZmZXIiKSxzdHJpZGU6NCxvZmZzZXQ6MCxkaXZpc29yOjF9fX0sbikpO3RyeXtlPXQoYSh7Y3VsbDp7ZW5hYmxlOiEwLGZhY2U6ImJhY2sifSx2ZXJ0Om8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhQ29vcmQsIGJDb29yZCwgbmV4dENvb3JkLCBwcmV2Q29vcmQ7XG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3IsIGJDb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRW5kLCBsaW5lVG9wO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHRyYW5zbGF0ZTtcbnVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzLCBwaXhlbFJhdGlvLCBpZCwgZGVwdGg7XG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XG51bmlmb3JtIGZsb2F0IG1pdGVyTGltaXQsIG1pdGVyTW9kZTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjNCBzdGFydEN1dG9mZiwgZW5kQ3V0b2ZmO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG52YXJ5aW5nIHZlYzIgc3RhcnRDb29yZCwgZW5kQ29vcmQ7XG52YXJ5aW5nIGZsb2F0IGVuYWJsZVN0YXJ0TWl0ZXIsIGVuYWJsZUVuZE1pdGVyO1xuXG5jb25zdCBmbG9hdCBSRVZFUlNFX1RIUkVTSE9MRCA9IC0uODc1O1xuY29uc3QgZmxvYXQgTUlOX0RJRkYgPSAxZS02O1xuXG4vLyBUT0RPOiBwb3NzaWJsZSBvcHRpbWl6YXRpb25zOiBhdm9pZCBvdmVyY2FsY3VsYXRpbmcgYWxsIGZvciB2ZXJ0aWNlcyBhbmQgY2FsYyBqdXN0IG9uZSBpbnN0ZWFkXG4vLyBUT0RPOiBwcmVjYWxjdWxhdGUgZG90IHByb2R1Y3RzLCBub3JtYWxpemUgdGhpbmdzIGJlZm9yZWhlYWQgZXRjLlxuLy8gVE9ETzogcmVmYWN0b3IgdG8gcmVjdGFuZ3VsYXIgYWxnb3JpdGhtXG5cbmZsb2F0IGRpc3RUb0xpbmUodmVjMiBwLCB2ZWMyIGEsIHZlYzIgYikge1xuXHR2ZWMyIGRpZmYgPSBiIC0gYTtcblx0dmVjMiBwZXJwID0gbm9ybWFsaXplKHZlYzIoLWRpZmYueSwgZGlmZi54KSk7XG5cdHJldHVybiBkb3QocCAtIGEsIHBlcnApO1xufVxuXG5ib29sIGlzTmFOKCBmbG9hdCB2YWwgKXtcbiAgcmV0dXJuICggdmFsIDwgMC4wIHx8IDAuMCA8IHZhbCB8fCB2YWwgPT0gMC4wICkgPyBmYWxzZSA6IHRydWU7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0dmVjMiBhQ29vcmQgPSBhQ29vcmQsIGJDb29yZCA9IGJDb29yZCwgcHJldkNvb3JkID0gcHJldkNvb3JkLCBuZXh0Q29vcmQgPSBuZXh0Q29vcmQ7XG5cbiAgdmVjMiBhZGp1c3RlZFNjYWxlO1xuICBhZGp1c3RlZFNjYWxlLnggPSAoYWJzKHNjYWxlLngpIDwgTUlOX0RJRkYpID8gTUlOX0RJRkYgOiBzY2FsZS54O1xuICBhZGp1c3RlZFNjYWxlLnkgPSAoYWJzKHNjYWxlLnkpIDwgTUlOX0RJRkYpID8gTUlOX0RJRkYgOiBzY2FsZS55O1xuXG4gIHZlYzIgc2NhbGVSYXRpbyA9IGFkanVzdGVkU2NhbGUgKiB2aWV3cG9ydC56dztcblx0dmVjMiBub3JtYWxXaWR0aCA9IHRoaWNrbmVzcyAvIHNjYWxlUmF0aW87XG5cblx0ZmxvYXQgbGluZVN0YXJ0ID0gMS4gLSBsaW5lRW5kO1xuXHRmbG9hdCBsaW5lQm90ID0gMS4gLSBsaW5lVG9wO1xuXG5cdGZyYWdDb2xvciA9IChsaW5lU3RhcnQgKiBhQ29sb3IgKyBsaW5lRW5kICogYkNvbG9yKSAvIDI1NS47XG5cblx0aWYgKGlzTmFOKGFDb29yZC54KSB8fCBpc05hTihhQ29vcmQueSkgfHwgaXNOYU4oYkNvb3JkLngpIHx8IGlzTmFOKGJDb29yZC55KSkgcmV0dXJuO1xuXG5cdGlmIChhQ29vcmQgPT0gcHJldkNvb3JkKSBwcmV2Q29vcmQgPSBhQ29vcmQgKyBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcblx0aWYgKGJDb29yZCA9PSBuZXh0Q29vcmQpIG5leHRDb29yZCA9IGJDb29yZCAtIG5vcm1hbGl6ZShiQ29vcmQgLSBhQ29vcmQpO1xuXG5cdHZlYzIgcHJldkRpZmYgPSBhQ29vcmQgLSBwcmV2Q29vcmQ7XG5cdHZlYzIgY3VyckRpZmYgPSBiQ29vcmQgLSBhQ29vcmQ7XG5cdHZlYzIgbmV4dERpZmYgPSBuZXh0Q29vcmQgLSBiQ29vcmQ7XG5cblx0dmVjMiBwcmV2VGFuZ2VudCA9IG5vcm1hbGl6ZShwcmV2RGlmZiAqIHNjYWxlUmF0aW8pO1xuXHR2ZWMyIGN1cnJUYW5nZW50ID0gbm9ybWFsaXplKGN1cnJEaWZmICogc2NhbGVSYXRpbyk7XG5cdHZlYzIgbmV4dFRhbmdlbnQgPSBub3JtYWxpemUobmV4dERpZmYgKiBzY2FsZVJhdGlvKTtcblxuXHR2ZWMyIHByZXZOb3JtYWwgPSB2ZWMyKC1wcmV2VGFuZ2VudC55LCBwcmV2VGFuZ2VudC54KTtcblx0dmVjMiBjdXJyTm9ybWFsID0gdmVjMigtY3VyclRhbmdlbnQueSwgY3VyclRhbmdlbnQueCk7XG5cdHZlYzIgbmV4dE5vcm1hbCA9IHZlYzIoLW5leHRUYW5nZW50LnksIG5leHRUYW5nZW50LngpO1xuXG5cdHZlYzIgc3RhcnRKb2luRGlyZWN0aW9uID0gbm9ybWFsaXplKHByZXZUYW5nZW50IC0gY3VyclRhbmdlbnQpO1xuXHR2ZWMyIGVuZEpvaW5EaXJlY3Rpb24gPSBub3JtYWxpemUoY3VyclRhbmdlbnQgLSBuZXh0VGFuZ2VudCk7XG5cblx0Ly8gY29sbGFwc2VkL3VuaWRpcmVjdGlvbmFsIHNlZ21lbnQgY2FzZXNcblx0Ly8gRklYTUU6IHRoZXJlIHNob3VsZCBiZSBtb3JlIGVsZWdhbnQgc29sdXRpb25cblx0dmVjMiBwcmV2VGFuRGlmZiA9IGFicyhwcmV2VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0dmVjMiBuZXh0VGFuRGlmZiA9IGFicyhuZXh0VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0aWYgKG1heChwcmV2VGFuRGlmZi54LCBwcmV2VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XG5cdFx0c3RhcnRKb2luRGlyZWN0aW9uID0gY3Vyck5vcm1hbDtcblx0fVxuXHRpZiAobWF4KG5leHRUYW5EaWZmLngsIG5leHRUYW5EaWZmLnkpIDwgTUlOX0RJRkYpIHtcblx0XHRlbmRKb2luRGlyZWN0aW9uID0gY3Vyck5vcm1hbDtcblx0fVxuXHRpZiAoYUNvb3JkID09IGJDb29yZCkge1xuXHRcdGVuZEpvaW5EaXJlY3Rpb24gPSBzdGFydEpvaW5EaXJlY3Rpb247XG5cdFx0Y3Vyck5vcm1hbCA9IHByZXZOb3JtYWw7XG5cdFx0Y3VyclRhbmdlbnQgPSBwcmV2VGFuZ2VudDtcblx0fVxuXG5cdHRhbmdlbnQgPSBjdXJyVGFuZ2VudDtcblxuXHQvL2NhbGN1bGF0ZSBqb2luIHNoaWZ0cyByZWxhdGl2ZSB0byBub3JtYWxzXG5cdGZsb2F0IHN0YXJ0Sm9pblNoaWZ0ID0gZG90KGN1cnJOb3JtYWwsIHN0YXJ0Sm9pbkRpcmVjdGlvbik7XG5cdGZsb2F0IGVuZEpvaW5TaGlmdCA9IGRvdChjdXJyTm9ybWFsLCBlbmRKb2luRGlyZWN0aW9uKTtcblxuXHRmbG9hdCBzdGFydE1pdGVyUmF0aW8gPSBhYnMoMS4gLyBzdGFydEpvaW5TaGlmdCk7XG5cdGZsb2F0IGVuZE1pdGVyUmF0aW8gPSBhYnMoMS4gLyBlbmRKb2luU2hpZnQpO1xuXG5cdHZlYzIgc3RhcnRKb2luID0gc3RhcnRKb2luRGlyZWN0aW9uICogc3RhcnRNaXRlclJhdGlvO1xuXHR2ZWMyIGVuZEpvaW4gPSBlbmRKb2luRGlyZWN0aW9uICogZW5kTWl0ZXJSYXRpbztcblxuXHR2ZWMyIHN0YXJ0VG9wSm9pbiwgc3RhcnRCb3RKb2luLCBlbmRUb3BKb2luLCBlbmRCb3RKb2luO1xuXHRzdGFydFRvcEpvaW4gPSBzaWduKHN0YXJ0Sm9pblNoaWZ0KSAqIHN0YXJ0Sm9pbiAqIC41O1xuXHRzdGFydEJvdEpvaW4gPSAtc3RhcnRUb3BKb2luO1xuXG5cdGVuZFRvcEpvaW4gPSBzaWduKGVuZEpvaW5TaGlmdCkgKiBlbmRKb2luICogLjU7XG5cdGVuZEJvdEpvaW4gPSAtZW5kVG9wSm9pbjtcblxuXHR2ZWMyIGFUb3BDb29yZCA9IGFDb29yZCArIG5vcm1hbFdpZHRoICogc3RhcnRUb3BKb2luO1xuXHR2ZWMyIGJUb3BDb29yZCA9IGJDb29yZCArIG5vcm1hbFdpZHRoICogZW5kVG9wSm9pbjtcblx0dmVjMiBhQm90Q29vcmQgPSBhQ29vcmQgKyBub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbjtcblx0dmVjMiBiQm90Q29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW47XG5cblx0Ly9taXRlciBhbnRpLWNsaXBwaW5nXG5cdGZsb2F0IGJhQ2xpcHBpbmcgPSBkaXN0VG9MaW5lKGJDb29yZCwgYUNvb3JkLCBhQm90Q29vcmQpIC8gZG90KG5vcm1hbGl6ZShub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW4pLCBub3JtYWxpemUobm9ybWFsV2lkdGgueXggKiB2ZWMyKC1zdGFydEJvdEpvaW4ueSwgc3RhcnRCb3RKb2luLngpKSk7XG5cdGZsb2F0IGFiQ2xpcHBpbmcgPSBkaXN0VG9MaW5lKGFDb29yZCwgYkNvb3JkLCBiVG9wQ29vcmQpIC8gZG90KG5vcm1hbGl6ZShub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbiksIG5vcm1hbGl6ZShub3JtYWxXaWR0aC55eCAqIHZlYzIoLWVuZEJvdEpvaW4ueSwgZW5kQm90Sm9pbi54KSkpO1xuXG5cdC8vcHJldmVudCBjbG9zZSB0byByZXZlcnNlIGRpcmVjdGlvbiBzd2l0Y2hcblx0Ym9vbCBwcmV2UmV2ZXJzZSA9IGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpIDw9IFJFVkVSU0VfVEhSRVNIT0xEICYmIGFicyhkb3QoY3VyclRhbmdlbnQsIHByZXZOb3JtYWwpKSAqIG1pbihsZW5ndGgocHJldkRpZmYpLCBsZW5ndGgoY3VyckRpZmYpKSA8ICBsZW5ndGgobm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsKTtcblx0Ym9vbCBuZXh0UmV2ZXJzZSA9IGRvdChjdXJyVGFuZ2VudCwgbmV4dFRhbmdlbnQpIDw9IFJFVkVSU0VfVEhSRVNIT0xEICYmIGFicyhkb3QoY3VyclRhbmdlbnQsIG5leHROb3JtYWwpKSAqIG1pbihsZW5ndGgobmV4dERpZmYpLCBsZW5ndGgoY3VyckRpZmYpKSA8ICBsZW5ndGgobm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsKTtcblxuXHRpZiAocHJldlJldmVyc2UpIHtcblx0XHQvL21ha2Ugam9pbiByZWN0YW5ndWxhclxuXHRcdHZlYzIgbWl0ZXJTaGlmdCA9IG5vcm1hbFdpZHRoICogc3RhcnRKb2luRGlyZWN0aW9uICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdGZsb2F0IG5vcm1hbEFkanVzdCA9IDEuIC0gbWluKG1pdGVyTGltaXQgLyBzdGFydE1pdGVyUmF0aW8sIDEuKTtcblx0XHRhQm90Q29vcmQgPSBhQ29vcmQgKyBtaXRlclNoaWZ0IC0gbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdFx0YVRvcENvb3JkID0gYUNvb3JkICsgbWl0ZXJTaGlmdCArIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHR9XG5cdGVsc2UgaWYgKCFuZXh0UmV2ZXJzZSAmJiBiYUNsaXBwaW5nID4gMC4gJiYgYmFDbGlwcGluZyA8IGxlbmd0aChub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW4pKSB7XG5cdFx0Ly9oYW5kbGUgbWl0ZXIgY2xpcHBpbmdcblx0XHRiVG9wQ29vcmQgLT0gbm9ybWFsV2lkdGggKiBlbmRUb3BKb2luO1xuXHRcdGJUb3BDb29yZCArPSBub3JtYWxpemUoZW5kVG9wSm9pbiAqIG5vcm1hbFdpZHRoKSAqIGJhQ2xpcHBpbmc7XG5cdH1cblxuXHRpZiAobmV4dFJldmVyc2UpIHtcblx0XHQvL21ha2Ugam9pbiByZWN0YW5ndWxhclxuXHRcdHZlYzIgbWl0ZXJTaGlmdCA9IG5vcm1hbFdpZHRoICogZW5kSm9pbkRpcmVjdGlvbiAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRmbG9hdCBub3JtYWxBZGp1c3QgPSAxLiAtIG1pbihtaXRlckxpbWl0IC8gZW5kTWl0ZXJSYXRpbywgMS4pO1xuXHRcdGJCb3RDb29yZCA9IGJDb29yZCArIG1pdGVyU2hpZnQgLSBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcblx0XHRiVG9wQ29vcmQgPSBiQ29vcmQgKyBtaXRlclNoaWZ0ICsgbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdH1cblx0ZWxzZSBpZiAoIXByZXZSZXZlcnNlICYmIGFiQ2xpcHBpbmcgPiAwLiAmJiBhYkNsaXBwaW5nIDwgbGVuZ3RoKG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luKSkge1xuXHRcdC8vaGFuZGxlIG1pdGVyIGNsaXBwaW5nXG5cdFx0YUJvdENvb3JkIC09IG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luO1xuXHRcdGFCb3RDb29yZCArPSBub3JtYWxpemUoc3RhcnRCb3RKb2luICogbm9ybWFsV2lkdGgpICogYWJDbGlwcGluZztcblx0fVxuXG5cdHZlYzIgYVRvcFBvc2l0aW9uID0gKGFUb3BDb29yZCkgKiBhZGp1c3RlZFNjYWxlICsgdHJhbnNsYXRlO1xuXHR2ZWMyIGFCb3RQb3NpdGlvbiA9IChhQm90Q29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcblxuXHR2ZWMyIGJUb3BQb3NpdGlvbiA9IChiVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcblx0dmVjMiBiQm90UG9zaXRpb24gPSAoYkJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cblx0Ly9wb3NpdGlvbiBpcyBub3JtYWxpemVkIDAuLjEgY29vcmQgb24gdGhlIHNjcmVlblxuXHR2ZWMyIHBvc2l0aW9uID0gKGFUb3BQb3NpdGlvbiAqIGxpbmVUb3AgKyBhQm90UG9zaXRpb24gKiBsaW5lQm90KSAqIGxpbmVTdGFydCArIChiVG9wUG9zaXRpb24gKiBsaW5lVG9wICsgYkJvdFBvc2l0aW9uICogbGluZUJvdCkgKiBsaW5lRW5kO1xuXG5cdHN0YXJ0Q29vcmQgPSBhQ29vcmQgKiBzY2FsZVJhdGlvICsgdHJhbnNsYXRlICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcblx0ZW5kQ29vcmQgPSBiQ29vcmQgKiBzY2FsZVJhdGlvICsgdHJhbnNsYXRlICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcblxuXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XG5cblx0ZW5hYmxlU3RhcnRNaXRlciA9IHN0ZXAoZG90KGN1cnJUYW5nZW50LCBwcmV2VGFuZ2VudCksIC41KTtcblx0ZW5hYmxlRW5kTWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgbmV4dFRhbmdlbnQpLCAuNSk7XG5cblx0Ly9iZXZlbCBtaXRlciBjdXRvZmZzXG5cdGlmIChtaXRlck1vZGUgPT0gMS4pIHtcblx0XHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xuXHRcdFx0dmVjMiBzdGFydE1pdGVyV2lkdGggPSB2ZWMyKHN0YXJ0Sm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0XHRzdGFydEN1dG9mZiA9IHZlYzQoYUNvb3JkLCBhQ29vcmQpO1xuXHRcdFx0c3RhcnRDdXRvZmYuencgKz0gdmVjMigtc3RhcnRKb2luRGlyZWN0aW9uLnksIHN0YXJ0Sm9pbkRpcmVjdGlvbi54KSAvIHNjYWxlUmF0aW87XG5cdFx0XHRzdGFydEN1dG9mZiA9IHN0YXJ0Q3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xuXHRcdFx0c3RhcnRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHN0YXJ0TWl0ZXJXaWR0aC54eXh5O1xuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0dmVjMiBlbmRNaXRlcldpZHRoID0gdmVjMihlbmRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRcdGVuZEN1dG9mZiA9IHZlYzQoYkNvb3JkLCBiQ29vcmQpO1xuXHRcdFx0ZW5kQ3V0b2ZmLnp3ICs9IHZlYzIoLWVuZEpvaW5EaXJlY3Rpb24ueSwgZW5kSm9pbkRpcmVjdGlvbi54KSAgLyBzY2FsZVJhdGlvO1xuXHRcdFx0ZW5kQ3V0b2ZmID0gZW5kQ3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRlbmRDdXRvZmYgKz0gZW5kTWl0ZXJXaWR0aC54eXh5O1xuXHRcdH1cblx0fVxuXG5cdC8vcm91bmQgbWl0ZXIgY3V0b2Zmc1xuXHRlbHNlIGlmIChtaXRlck1vZGUgPT0gMi4pIHtcblx0XHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xuXHRcdFx0dmVjMiBzdGFydE1pdGVyV2lkdGggPSB2ZWMyKHN0YXJ0Sm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBhYnMoZG90KHN0YXJ0Sm9pbkRpcmVjdGlvbiwgY3Vyck5vcm1hbCkpICogLjU7XG5cdFx0XHRzdGFydEN1dG9mZiA9IHZlYzQoYUNvb3JkLCBhQ29vcmQpO1xuXHRcdFx0c3RhcnRDdXRvZmYuencgKz0gdmVjMigtc3RhcnRKb2luRGlyZWN0aW9uLnksIHN0YXJ0Sm9pbkRpcmVjdGlvbi54KSAvIHNjYWxlUmF0aW87XG5cdFx0XHRzdGFydEN1dG9mZiA9IHN0YXJ0Q3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xuXHRcdFx0c3RhcnRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHN0YXJ0TWl0ZXJXaWR0aC54eXh5O1xuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0dmVjMiBlbmRNaXRlcldpZHRoID0gdmVjMihlbmRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIGFicyhkb3QoZW5kSm9pbkRpcmVjdGlvbiwgY3Vyck5vcm1hbCkpICogLjU7XG5cdFx0XHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcblx0XHRcdGVuZEN1dG9mZi56dyArPSB2ZWMyKC1lbmRKb2luRGlyZWN0aW9uLnksIGVuZEpvaW5EaXJlY3Rpb24ueCkgIC8gc2NhbGVSYXRpbztcblx0XHRcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IGVuZE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cdH1cbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoUGF0dGVybjtcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemUsIHBpeGVsUmF0aW8sIHRoaWNrbmVzcywgb3BhY2l0eSwgaWQsIG1pdGVyTW9kZTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xudmFyeWluZyB2ZWM0IHN0YXJ0Q3V0b2ZmLCBlbmRDdXRvZmY7XG52YXJ5aW5nIHZlYzIgc3RhcnRDb29yZCwgZW5kQ29vcmQ7XG52YXJ5aW5nIGZsb2F0IGVuYWJsZVN0YXJ0TWl0ZXIsIGVuYWJsZUVuZE1pdGVyO1xuXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcblx0dmVjMiBkaWZmID0gYiAtIGE7XG5cdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xuXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcbn1cblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCBhbHBoYSA9IDEuLCBkaXN0VG9TdGFydCwgZGlzdFRvRW5kO1xuXHRmbG9hdCBjdXRvZmYgPSB0aGlja25lc3MgKiAuNTtcblxuXHQvL2JldmVsIG1pdGVyXG5cdGlmIChtaXRlck1vZGUgPT0gMS4pIHtcblx0XHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvU3RhcnQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgc3RhcnRDdXRvZmYueHksIHN0YXJ0Q3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9TdGFydCA8IC0xLikge1xuXHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhbHBoYSAqPSBtaW4obWF4KGRpc3RUb1N0YXJ0ICsgMS4sIDAuKSwgMS4pO1xuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvRW5kID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIGVuZEN1dG9mZi54eSwgZW5kQ3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9FbmQgPCAtMS4pIHtcblx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9FbmQgKyAxLiwgMC4pLCAxLik7XG5cdFx0fVxuXHR9XG5cblx0Ly8gcm91bmQgbWl0ZXJcblx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb1N0YXJ0ID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIHN0YXJ0Q3V0b2ZmLnh5LCBzdGFydEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvU3RhcnQgPCAwLikge1xuXHRcdFx0XHRmbG9hdCByYWRpdXMgPSBsZW5ndGgoZ2xfRnJhZ0Nvb3JkLnh5IC0gc3RhcnRDb29yZCk7XG5cblx0XHRcdFx0aWYocmFkaXVzID4gY3V0b2ZmICsgLjUpIHtcblx0XHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFscGhhIC09IHNtb290aHN0ZXAoY3V0b2ZmIC0gLjUsIGN1dG9mZiArIC41LCByYWRpdXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvRW5kID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIGVuZEN1dG9mZi54eSwgZW5kQ3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9FbmQgPCAwLikge1xuXHRcdFx0XHRmbG9hdCByYWRpdXMgPSBsZW5ndGgoZ2xfRnJhZ0Nvb3JkLnh5IC0gZW5kQ29vcmQpO1xuXG5cdFx0XHRcdGlmKHJhZGl1cyA+IGN1dG9mZiArIC41KSB7XG5cdFx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoU2l6ZSkgKiAuNSArIC4yNTtcblx0ZmxvYXQgZGFzaCA9IHRleHR1cmUyRChkYXNoUGF0dGVybiwgdmVjMih0LCAuNSkpLnI7XG5cblx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xuXHRnbF9GcmFnQ29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHkgKiBkYXNoO1xufVxuIl0pLGF0dHJpYnV0ZXM6e2xpbmVFbmQ6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6MH0sbGluZVRvcDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDo0fSxhQ29sb3I6e2J1ZmZlcjp0LnByb3AoImNvbG9yQnVmZmVyIiksc3RyaWRlOjQsb2Zmc2V0OjAsZGl2aXNvcjoxfSxiQ29sb3I6e2J1ZmZlcjp0LnByb3AoImNvbG9yQnVmZmVyIiksc3RyaWRlOjQsb2Zmc2V0OjQsZGl2aXNvcjoxfSxwcmV2Q29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjAsZGl2aXNvcjoxfSxhQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sbmV4dENvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDoyNCxkaXZpc29yOjF9fX0sbikpfWNhdGNoKHQpe2U9aX1yZXR1cm57ZmlsbDp0KHtwcmltaXRpdmU6InRyaWFuZ2xlIixlbGVtZW50czpmdW5jdGlvbih0LGUpe3JldHVybiBlLnRyaWFuZ2xlc30sb2Zmc2V0OjAsdmVydDpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb24sIHBvc2l0aW9uRnJhY3Q7XG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnVuaWZvcm0gdmVjMiBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdDtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbywgaWQ7XG51bmlmb3JtIHZlYzQgdmlld3BvcnQ7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbmNvbnN0IGZsb2F0IE1BWF9MSU5FUyA9IDI1Ni47XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgZGVwdGggPSAoTUFYX0xJTkVTIC0gNC4gLSBpZCkgLyAoTUFYX0xJTkVTKTtcblxuXHR2ZWMyIHBvc2l0aW9uID0gcG9zaXRpb24gKiBzY2FsZSArIHRyYW5zbGF0ZVxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlICsgdHJhbnNsYXRlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uICogc2NhbGVGcmFjdFxuICAgICAgICsgcG9zaXRpb25GcmFjdCAqIHNjYWxlRnJhY3Q7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4wIC0gMS4wLCBkZXB0aCwgMSk7XG5cblx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xuXHRmcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xufVxuIl0pLGZyYWc6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xufVxuIl0pLHVuaWZvcm1zOntzY2FsZTp0LnByb3AoInNjYWxlIiksY29sb3I6dC5wcm9wKCJmaWxsIiksc2NhbGVGcmFjdDp0LnByb3AoInNjYWxlRnJhY3QiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoInRyYW5zbGF0ZUZyYWN0IiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSxwaXhlbFJhdGlvOnQuY29udGV4dCgicGl4ZWxSYXRpbyIpLGlkOnQucHJvcCgiaWQiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX19LGF0dHJpYnV0ZXM6e3Bvc2l0aW9uOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4fSxwb3NpdGlvbkZyYWN0OntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkZyYWN0QnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0Ojh9fSxibGVuZDpuLmJsZW5kLGRlcHRoOntlbmFibGU6ITF9LHNjaXNzb3I6bi5zY2lzc29yLHN0ZW5jaWw6bi5zdGVuY2lsLHZpZXdwb3J0Om4udmlld3BvcnR9KSxyZWN0OmksbWl0ZXI6ZX19LG0uZGVmYXVsdHM9e2Rhc2hlczpudWxsLGpvaW46Im1pdGVyIixtaXRlckxpbWl0OjEsdGhpY2tuZXNzOjEwLGNhcDoic3F1YXJlIixjb2xvcjoiYmxhY2siLG9wYWNpdHk6MSxvdmVybGF5OiExLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxjbG9zZTohMSxmaWxsOm51bGx9LG0ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO2UubGVuZ3RoJiYodD10aGlzKS51cGRhdGUuYXBwbHkodCxlKSx0aGlzLmRyYXcoKX0sbS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07cmV0dXJuKGUubGVuZ3RoP2U6dGhpcy5wYXNzZXMpLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dmFyIG47aWYoZSYmQXJyYXkuaXNBcnJheShlKSlyZXR1cm4obj10KS5kcmF3LmFwcGx5KG4sZSk7Im51bWJlciI9PXR5cGVvZiBlJiYoZT10LnBhc3Nlc1tlXSksZSYmZS5jb3VudD4xJiZlLm9wYWNpdHkmJih0LnJlZ2wuX3JlZnJlc2goKSxlLmZpbGwmJmUudHJpYW5nbGVzJiZlLnRyaWFuZ2xlcy5sZW5ndGg+MiYmdC5zaGFkZXJzLmZpbGwoZSksZS50aGlja25lc3MmJihlLnNjYWxlWzBdKmUudmlld3BvcnQud2lkdGg+bS5wcmVjaXNpb25UaHJlc2hvbGR8fGUuc2NhbGVbMV0qZS52aWV3cG9ydC5oZWlnaHQ+bS5wcmVjaXNpb25UaHJlc2hvbGR8fCJyZWN0Ij09PWUuam9pbnx8IWUuam9pbiYmKGUudGhpY2tuZXNzPD0yfHxlLmNvdW50Pj1tLm1heFBvaW50cyk/dC5zaGFkZXJzLnJlY3QoZSk6dC5zaGFkZXJzLm1pdGVyKGUpKSl9KSksdGhpc30sbS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodCl7bnVsbCE9dC5sZW5ndGg/Im51bWJlciI9PXR5cGVvZiB0WzBdJiYodD1be3Bvc2l0aW9uczp0fV0pOkFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIHI9dGhpcy5yZWdsLG89dGhpcy5nbDtpZih0LmZvckVhY2goKGZ1bmN0aW9uKHQsaCl7dmFyIGQ9ZS5wYXNzZXNbaF07aWYodm9pZCAwIT09dClpZihudWxsIT09dCl7aWYoIm51bWJlciI9PXR5cGVvZiB0WzBdJiYodD17cG9zaXRpb25zOnR9KSx0PXModCx7cG9zaXRpb25zOiJwb3NpdGlvbnMgcG9pbnRzIGRhdGEgY29vcmRzIix0aGlja25lc3M6InRoaWNrbmVzcyBsaW5lV2lkdGggbGluZVdpZHRocyBsaW5lLXdpZHRoIGxpbmV3aWR0aCB3aWR0aCBzdHJva2Utd2lkdGggc3Ryb2tld2lkdGggc3Ryb2tlV2lkdGgiLGpvaW46ImxpbmVKb2luIGxpbmVqb2luIGpvaW4gdHlwZSBtb2RlIixtaXRlckxpbWl0OiJtaXRlcmxpbWl0IG1pdGVyTGltaXQiLGRhc2hlczoiZGFzaCBkYXNoZXMgZGFzaGFycmF5IGRhc2gtYXJyYXkgZGFzaEFycmF5Iixjb2xvcjoiY29sb3IgY29sb3VyIHN0cm9rZSBjb2xvcnMgY29sb3VycyBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3IiLGZpbGw6ImZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IiLG9wYWNpdHk6ImFscGhhIG9wYWNpdHkiLG92ZXJsYXk6Im92ZXJsYXkgY3JlYXNlIG92ZXJsYXAgaW50ZXJzZWN0IixjbG9zZToiY2xvc2VkIGNsb3NlIGNsb3NlZC1wYXRoIGNsb3NlUGF0aCIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2aWV3cG9ydCB2aWV3Qm94Iixob2xlOiJob2xlcyBob2xlIGhvbGxvdyJ9KSxkfHwoZS5wYXNzZXNbaF09ZD17aWQ6aCxzY2FsZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGU6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGNvdW50OjAsaG9sZTpbXSxkZXB0aDowLGRhc2hMZW5ndGg6MSxkYXNoVGV4dHVyZTpyLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpuZXcgVWludDhBcnJheShbMjU1XSksd2lkdGg6MSxoZWlnaHQ6MSxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSksY29sb3JCdWZmZXI6ci5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpuZXcgVWludDhBcnJheX0pLHBvc2l0aW9uQnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KX0sdD1hKHt9LG0uZGVmYXVsdHMsdCkpLG51bGwhPXQudGhpY2tuZXNzJiYoZC50aGlja25lc3M9cGFyc2VGbG9hdCh0LnRoaWNrbmVzcykpLG51bGwhPXQub3BhY2l0eSYmKGQub3BhY2l0eT1wYXJzZUZsb2F0KHQub3BhY2l0eSkpLG51bGwhPXQubWl0ZXJMaW1pdCYmKGQubWl0ZXJMaW1pdD1wYXJzZUZsb2F0KHQubWl0ZXJMaW1pdCkpLG51bGwhPXQub3ZlcmxheSYmKGQub3ZlcmxheT0hIXQub3ZlcmxheSxoPG0ubWF4TGluZXMmJihkLmRlcHRoPTIqKG0ubWF4TGluZXMtMS1oJW0ubWF4TGluZXMpL20ubWF4TGluZXMtMSkpLG51bGwhPXQuam9pbiYmKGQuam9pbj10LmpvaW4pLG51bGwhPXQuaG9sZSYmKGQuaG9sZT10LmhvbGUpLG51bGwhPXQuZmlsbCYmKGQuZmlsbD10LmZpbGw/bih0LmZpbGwsInVpbnQ4Iik6bnVsbCksbnVsbCE9dC52aWV3cG9ydCYmKGQudmlld3BvcnQ9Zyh0LnZpZXdwb3J0KSksZC52aWV3cG9ydHx8KGQudmlld3BvcnQ9Zyhbby5kcmF3aW5nQnVmZmVyV2lkdGgsby5kcmF3aW5nQnVmZmVySGVpZ2h0XSkpLG51bGwhPXQuY2xvc2UmJihkLmNsb3NlPXQuY2xvc2UpLG51bGw9PT10LnBvc2l0aW9ucyYmKHQucG9zaXRpb25zPVtdKSx0LnBvc2l0aW9ucyl7dmFyIHYseTtpZih0LnBvc2l0aW9ucy54JiZ0LnBvc2l0aW9ucy55KXt2YXIgeD10LnBvc2l0aW9ucy54LGI9dC5wb3NpdGlvbnMueTt5PWQuY291bnQ9TWF0aC5tYXgoeC5sZW5ndGgsYi5sZW5ndGgpLHY9bmV3IEZsb2F0NjRBcnJheSgyKnkpO2Zvcih2YXIgXz0wO188eTtfKyspdlsyKl9dPXhbX10sdlsyKl8rMV09YltfXX1lbHNlIHY9bCh0LnBvc2l0aW9ucywiZmxvYXQ2NCIpLHk9ZC5jb3VudD1NYXRoLmZsb29yKHYubGVuZ3RoLzIpO3ZhciB3PWQuYm91bmRzPWkodiwyKTtpZihkLmZpbGwpe2Zvcih2YXIgVD1bXSxrPXt9LE09MCxBPTAsUz0wLEU9ZC5jb3VudDtBPEU7QSsrKXt2YXIgQz12WzIqQV0sTD12WzIqQSsxXTtpc05hTihDKXx8aXNOYU4oTCl8fG51bGw9PUN8fG51bGw9PUw/KEM9dlsyKk1dLEw9dlsyKk0rMV0sa1tBXT1NKTpNPUEsVFtTKytdPUMsVFtTKytdPUx9Zm9yKHZhciBQPWMoVCxkLmhvbGV8fFtdKSxJPTAsej1QLmxlbmd0aDtJPHo7SSsrKW51bGwhPWtbUFtJXV0mJihQW0ldPWtbUFtJXV0pO2QudHJpYW5nbGVzPVB9dmFyIE89bmV3IEZsb2F0NjRBcnJheSh2KTt1KE8sMix3KTt2YXIgRD1uZXcgRmxvYXQ2NEFycmF5KDIqeSs2KTtkLmNsb3NlP3ZbMF09PT12WzIqeS0yXSYmdlsxXT09PXZbMip5LTFdPyhEWzBdPU9bMip5LTRdLERbMV09T1syKnktM10pOihEWzBdPU9bMip5LTJdLERbMV09T1syKnktMV0pOihEWzBdPU9bMF0sRFsxXT1PWzFdKSxELnNldChPLDIpLGQuY2xvc2U/dlswXT09PXZbMip5LTJdJiZ2WzFdPT09dlsyKnktMV0/KERbMip5KzJdPU9bMl0sRFsyKnkrM109T1szXSxkLmNvdW50LT0xKTooRFsyKnkrMl09T1swXSxEWzIqeSszXT1PWzFdLERbMip5KzRdPU9bMl0sRFsyKnkrNV09T1szXSk6KERbMip5KzJdPU9bMip5LTJdLERbMip5KzNdPU9bMip5LTFdLERbMip5KzRdPU9bMip5LTJdLERbMip5KzVdPU9bMip5LTFdKSxkLnBvc2l0aW9uQnVmZmVyKGYoRCkpLGQucG9zaXRpb25GcmFjdEJ1ZmZlcihwKEQpKX1pZih0LnJhbmdlP2QucmFuZ2U9dC5yYW5nZTpkLnJhbmdlfHwoZC5yYW5nZT1kLmJvdW5kcyksKHQucmFuZ2V8fHQucG9zaXRpb25zKSYmZC5jb3VudCl7dmFyIFI9ZC5ib3VuZHMsRj1SWzJdLVJbMF0sQj1SWzNdLVJbMV0sTj1kLnJhbmdlWzJdLWQucmFuZ2VbMF0saj1kLnJhbmdlWzNdLWQucmFuZ2VbMV07ZC5zY2FsZT1bRi9OLEIval0sZC50cmFuc2xhdGU9Wy1kLnJhbmdlWzBdL04rUlswXS9OfHwwLC1kLnJhbmdlWzFdL2orUlsxXS9qfHwwXSxkLnNjYWxlRnJhY3Q9cChkLnNjYWxlKSxkLnRyYW5zbGF0ZUZyYWN0PXAoZC50cmFuc2xhdGUpfWlmKHQuZGFzaGVzKXt2YXIgVSxWPTA7aWYoIXQuZGFzaGVzfHx0LmRhc2hlcy5sZW5ndGg8MilWPTEsVT1uZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0pO2Vsc2V7Vj0wO2Zvcih2YXIgcT0wO3E8dC5kYXNoZXMubGVuZ3RoOysrcSlWKz10LmRhc2hlc1txXTtVPW5ldyBVaW50OEFycmF5KFYqbS5kYXNoTXVsdCk7Zm9yKHZhciBIPTAsRz0yNTUsWT0wO1k8MjtZKyspZm9yKHZhciBXPTA7Vzx0LmRhc2hlcy5sZW5ndGg7KytXKXtmb3IodmFyIFo9MCxYPXQuZGFzaGVzW1ddKm0uZGFzaE11bHQqLjU7WjxYOysrWilVW0grK109RztHXj0yNTV9fWQuZGFzaExlbmd0aD1WLGQuZGFzaFRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpVLHdpZHRoOlUubGVuZ3RoLGhlaWdodDoxLG1hZzoibGluZWFyIixtaW46ImxpbmVhciJ9LDAsMCl9aWYodC5jb2xvcil7dmFyIEo9ZC5jb3VudCxLPXQuY29sb3I7S3x8KEs9InRyYW5zcGFyZW50Iik7dmFyIFE9bmV3IFVpbnQ4QXJyYXkoNCpKKzQpO2lmKEFycmF5LmlzQXJyYXkoSykmJiJudW1iZXIiIT10eXBlb2YgS1swXSl7Zm9yKHZhciAkPTA7JDxKOyQrKyl7dmFyIHR0PW4oS1skXSwidWludDgiKTtRLnNldCh0dCw0KiQpfVEuc2V0KG4oS1swXSwidWludDgiKSw0KkopfWVsc2UgZm9yKHZhciBldD1uKEssInVpbnQ4IikscnQ9MDtydDxKKzE7cnQrKylRLnNldChldCw0KnJ0KTtkLmNvbG9yQnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgiLGRhdGE6UX0pfX1lbHNlIGUucGFzc2VzW2hdPW51bGx9KSksdC5sZW5ndGg8dGhpcy5wYXNzZXMubGVuZ3RoKXtmb3IodmFyIGg9dC5sZW5ndGg7aDx0aGlzLnBhc3Nlcy5sZW5ndGg7aCsrKXt2YXIgZD10aGlzLnBhc3Nlc1toXTtkJiYoZC5jb2xvckJ1ZmZlci5kZXN0cm95KCksZC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksZC5kYXNoVGV4dHVyZS5kZXN0cm95KCkpfXRoaXMucGFzc2VzLmxlbmd0aD10Lmxlbmd0aH1mb3IodmFyIHY9W10seT0wO3k8dGhpcy5wYXNzZXMubGVuZ3RoO3krKyludWxsIT09dGhpcy5wYXNzZXNbeV0mJnYucHVzaCh0aGlzLnBhc3Nlc1t5XSk7cmV0dXJuIHRoaXMucGFzc2VzPXYsdGhpc319LG0ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXNzZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5kYXNoVGV4dHVyZS5kZXN0cm95KCl9KSksdGhpcy5wYXNzZXMubGVuZ3RoPTAsdGhpc319LHsiYXJyYXktYm91bmRzIjo3MCwiYXJyYXktbm9ybWFsaXplIjo3MSwiY29sb3Itbm9ybWFsaXplIjoxMjUsZWFyY3V0OjE3NywiZXM2LXdlYWstbWFwIjoyMzMsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjI0NCxnbHNsaWZ5OjQxMywib2JqZWN0LWFzc2lnbiI6NDczLCJwYXJzZS1yZWN0Ijo0NzgsInBpY2stYnktYWxpYXMiOjQ4NSwidG8tZmxvYXQzMiI6NTQ5fV0sNTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBTeW1ib2x8fCEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSkpcmV0dXJuO3ZhciByPVtdLG49ITAsaT0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7aT0hMCxhPXR9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IGF9fXJldHVybiByfSh0LGUpfHxhKHQsZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBvKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxhKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGEodCxlKXtpZih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIG8odCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT9vKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBvKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59dmFyIHM9dCgiY29sb3Itbm9ybWFsaXplIiksbD10KCJhcnJheS1ib3VuZHMiKSxjPXQoImNvbG9yLWlkIiksdT10KCJAcGxvdGx5L3BvaW50LWNsdXN0ZXIiKSxoPXQoIm9iamVjdC1hc3NpZ24iKSxmPXQoImdsc2xpZnkiKSxwPXQoInBpY2stYnktYWxpYXMiKSxkPXQoInVwZGF0ZS1kaWZmIiksZz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksbT10KCJpcy1pZXhwbG9yZXIiKSx2PXQoInRvLWZsb2F0MzIiKSx5PXQoInBhcnNlLXJlY3QiKSx4PWI7ZnVuY3Rpb24gYih0LGUpe3ZhciByPXRoaXM7aWYoISh0aGlzIGluc3RhbmNlb2YgYikpcmV0dXJuIG5ldyBiKHQsZSk7ImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGV8fChlPXt9KSxlLnJlZ2w9dCk6KGU9dCx0PW51bGwpLGUmJmUubGVuZ3RoJiYoZS5wb3NpdGlvbnM9ZSk7dmFyIG4saT0odD1lLnJlZ2wpLl9nbCxhPVtdO3RoaXMudG9vTWFueUNvbG9ycz1tLG49dC50ZXh0dXJlKHtkYXRhOm5ldyBVaW50OEFycmF5KDEwMjApLHdpZHRoOjI1NSxoZWlnaHQ6MSx0eXBlOiJ1aW50OCIsZm9ybWF0OiJyZ2JhIix3cmFwUzoiY2xhbXAiLHdyYXBUOiJjbGFtcCIsbWFnOiJuZWFyZXN0IixtaW46Im5lYXJlc3QifSksaCh0aGlzLHtyZWdsOnQsZ2w6aSxncm91cHM6W10sbWFya2VyQ2FjaGU6W251bGxdLG1hcmtlclRleHR1cmVzOltudWxsXSxwYWxldHRlOmEscGFsZXR0ZUlkczp7fSxwYWxldHRlVGV4dHVyZTpuLG1heENvbG9yczoyNTUsbWF4U2l6ZToxMDAsY2FudmFzOmkuY2FudmFzfSksdGhpcy51cGRhdGUoZSk7dmFyIG89e3VuaWZvcm1zOntjb25zdFBvaW50U2l6ZTohIWUuY29uc3RQb2ludFNpemUscGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxwYWxldHRlOm4scGFsZXR0ZVNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm5bci50b29NYW55Q29sb3JzPzA6MjU1LG4uaGVpZ2h0XX0sc2NhbGU6dC5wcm9wKCJzY2FsZSIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IiksbWFya2VyOnQucHJvcCgibWFya2VyVGV4dHVyZSIpfSxhdHRyaWJ1dGVzOnt4OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHJ8fHtidWZmZXI6ZS5wb3NpdGlvbkJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS55QXR0cnx8e2J1ZmZlcjplLnBvc2l0aW9uQnVmZmVyLHN0cmlkZTo4LG9mZnNldDo0fX0seEZyYWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueEF0dHI/e2NvbnN0YW50OlswLDBdfTp7YnVmZmVyOmUucG9zaXRpb25GcmFjdEJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6MH19LHlGcmFjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnlBdHRyP3tjb25zdGFudDpbMCwwXX06e2J1ZmZlcjplLnBvc2l0aW9uRnJhY3RCdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjR9fSxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc2l6ZS5sZW5ndGg/e2J1ZmZlcjplLnNpemVCdWZmZXIsc3RyaWRlOjIsb2Zmc2V0OjB9Ontjb25zdGFudDpbTWF0aC5yb3VuZCgyNTUqZS5zaXplL3IubWF4U2l6ZSldfX0sYm9yZGVyU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmJvcmRlclNpemUubGVuZ3RoP3tidWZmZXI6ZS5zaXplQnVmZmVyLHN0cmlkZToyLG9mZnNldDoxfTp7Y29uc3RhbnQ6W01hdGgucm91bmQoMjU1KmUuYm9yZGVyU2l6ZS9yLm1heFNpemUpXX19LGNvbG9ySWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5jb2xvci5sZW5ndGg/e2J1ZmZlcjplLmNvbG9yQnVmZmVyLHN0cmlkZTpyLnRvb01hbnlDb2xvcnM/ODo0LG9mZnNldDowfTp7Y29uc3RhbnQ6ci50b29NYW55Q29sb3JzP2Euc2xpY2UoNCplLmNvbG9yLDQqZS5jb2xvcis0KTpbZS5jb2xvcl19fSxib3JkZXJDb2xvcklkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYm9yZGVyQ29sb3IubGVuZ3RoP3tidWZmZXI6ZS5jb2xvckJ1ZmZlcixzdHJpZGU6ci50b29NYW55Q29sb3JzPzg6NCxvZmZzZXQ6ci50b29NYW55Q29sb3JzPzQ6Mn06e2NvbnN0YW50OnIudG9vTWFueUNvbG9ycz9hLnNsaWNlKDQqZS5ib3JkZXJDb2xvciw0KmUuYm9yZGVyQ29sb3IrNCk6W2UuYm9yZGVyQ29sb3JdfX0saXNBY3RpdmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4hMD09PWUuYWN0aXZhdGlvbj97Y29uc3RhbnQ6WzFdfTplLmFjdGl2YXRpb24/ZS5hY3RpdmF0aW9uOntjb25zdGFudDpbMF19fX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGVsZW1lbnRzOnQucHJvcCgiZWxlbWVudHMiKSxjb3VudDp0LnByb3AoImNvdW50Iiksb2Zmc2V0OnQucHJvcCgib2Zmc2V0IikscHJpbWl0aXZlOiJwb2ludHMifSxzPWgoe30sbyk7cy5mcmFnPWYoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xuXG51bmlmb3JtIHNhbXBsZXIyRCBtYXJrZXI7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgeCwgZmxvYXQgeSkge1xuICByZXR1cm4gMS4wIC8gKDEuMCArIGV4cCg1MC4wKih4IC0geSkpKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkaXN0ID0gdGV4dHVyZTJEKG1hcmtlciwgZ2xfUG9pbnRDb29yZCkuciwgZGVsdGEgPSBmcmFnV2lkdGg7XG5cbiAgLy8gbWF4LWRpc3RhbmNlIGFscGhhXG4gIGlmIChkaXN0IDwgMC4wMDMpIGRpc2NhcmQ7XG5cbiAgLy8gbnVsbC1ib3JkZXIgY2FzZVxuICBpZiAoZnJhZ0JvcmRlckNvbG9yTGV2ZWwgPT0gZnJhZ0NvbG9yTGV2ZWwgfHwgZnJhZ0JvcmRlckNvbG9yLmEgPT0gMC4pIHtcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoLjUgLSBkZWx0YSwgLjUgKyBkZWx0YSwgZGlzdCk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiLCBjb2xvckFtdCAqIGZyYWdDb2xvci5hICogb3BhY2l0eSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmxvYXQgYm9yZGVyQ29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdCb3JkZXJDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdCb3JkZXJDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xuICAgIGZsb2F0IGNvbG9yQW10ID0gc21vb3Roc3RlcChmcmFnQ29sb3JMZXZlbCAtIGRlbHRhLCBmcmFnQ29sb3JMZXZlbCArIGRlbHRhLCBkaXN0KTtcblxuICAgIHZlYzQgY29sb3IgPSBmcmFnQm9yZGVyQ29sb3I7XG4gICAgY29sb3IuYSAqPSBib3JkZXJDb2xvckFtdDtcbiAgICBjb2xvciA9IG1peChjb2xvciwgZnJhZ0NvbG9yLCBjb2xvckFtdCk7XG4gICAgY29sb3IuYSAqPSBvcGFjaXR5O1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gIH1cblxufVxuIl0pLHMudmVydD1mKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QsIHBhbGV0dGVTaXplO1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSBib29sIGNvbnN0UG9pbnRTaXplO1xudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcblxuY29uc3QgZmxvYXQgbWF4U2l6ZSA9IDEwMC47XG5jb25zdCBmbG9hdCBib3JkZXJMZXZlbCA9IC41O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdQb2ludFNpemUsIGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xuXG5mbG9hdCBwb2ludFNpemVTY2FsZSA9IChjb25zdFBvaW50U2l6ZSkgPyAyLiA6IHBpeGVsUmF0aW87XG5cbmJvb2wgaXNEaXJlY3QgPSAocGFsZXR0ZVNpemUueCA8IDEuKTtcblxudmVjNCBnZXRDb2xvcih2ZWM0IGlkKSB7XG4gIHJldHVybiBpc0RpcmVjdCA/IGlkIC8gMjU1LiA6IHRleHR1cmUyRChwYWxldHRlLFxuICAgIHZlYzIoXG4gICAgICAoaWQueCArIC41KSAvIHBhbGV0dGVTaXplLngsXG4gICAgICAoaWQueSArIC41KSAvIHBhbGV0dGVTaXplLnlcbiAgICApXG4gICk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gaWdub3JlIGluYWN0aXZlIHBvaW50c1xuICBpZiAoaXNBY3RpdmUgPT0gMC4pIHJldHVybjtcblxuICB2ZWMyIHBvc2l0aW9uID0gdmVjMih4LCB5KTtcbiAgdmVjMiBwb3NpdGlvbkZyYWN0ID0gdmVjMih4RnJhY3QsIHlGcmFjdCk7XG5cbiAgdmVjNCBjb2xvciA9IGdldENvbG9yKGNvbG9ySWQpO1xuICB2ZWM0IGJvcmRlckNvbG9yID0gZ2V0Q29sb3IoYm9yZGVyQ29sb3JJZCk7XG5cbiAgZmxvYXQgc2l6ZSA9IHNpemUgKiBtYXhTaXplIC8gMjU1LjtcbiAgZmxvYXQgYm9yZGVyU2l6ZSA9IGJvcmRlclNpemUgKiBtYXhTaXplIC8gMjU1LjtcblxuICBnbF9Qb2ludFNpemUgPSAyLiAqIHNpemUgKiBwb2ludFNpemVTY2FsZTtcbiAgZnJhZ1BvaW50U2l6ZSA9IHNpemUgKiBwaXhlbFJhdGlvO1xuXG4gIHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlRnJhY3RcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLiwgMS4pO1xuXG4gIGZyYWdDb2xvciA9IGNvbG9yO1xuICBmcmFnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvcjtcbiAgZnJhZ1dpZHRoID0gMS4gLyBnbF9Qb2ludFNpemU7XG5cbiAgZnJhZ0JvcmRlckNvbG9yTGV2ZWwgPSBjbGFtcChib3JkZXJMZXZlbCAtIGJvcmRlckxldmVsICogYm9yZGVyU2l6ZSAvIHNpemUsIDAuLCAxLik7XG4gIGZyYWdDb2xvckxldmVsID0gY2xhbXAoYm9yZGVyTGV2ZWwgKyAoMS4gLSBib3JkZXJMZXZlbCkgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcbn0iXSksdGhpcy5kcmF3TWFya2VyPXQocyk7dmFyIGw9aCh7fSxvKTtsLmZyYWc9ZihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcblxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XG5cbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCBmbG9hdCB4KSB7XG5cdGZsb2F0IHQ7XG5cdHQgPSBjbGFtcCgoeCAtIGVkZ2UwKSAvIChlZGdlMSAtIGVkZ2UwKSwgMC4wLCAxLjApO1xuXHRyZXR1cm4gdCAqIHQgKiAoMy4wIC0gMi4wICogdCk7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgcmFkaXVzLCBhbHBoYSA9IDEuMCwgZGVsdGEgPSBmcmFnV2lkdGg7XG5cblx0cmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuXG5cdGlmIChyYWRpdXMgPiAxLjAgKyBkZWx0YSkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblxuXHRhbHBoYSAtPSBzbW9vdGhzdGVwKDEuMCAtIGRlbHRhLCAxLjAgKyBkZWx0YSwgcmFkaXVzKTtcblxuXHRmbG9hdCBib3JkZXJSYWRpdXMgPSBmcmFnQm9yZGVyUmFkaXVzO1xuXHRmbG9hdCByYXRpbyA9IHNtb290aHN0ZXAoYm9yZGVyUmFkaXVzIC0gZGVsdGEsIGJvcmRlclJhZGl1cyArIGRlbHRhLCByYWRpdXMpO1xuXHR2ZWM0IGNvbG9yID0gbWl4KGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yLCByYXRpbyk7XG5cdGNvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5O1xuXHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn1cbiJdKSxsLnZlcnQ9ZihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSBmbG9hdCB4LCB5LCB4RnJhY3QsIHlGcmFjdDtcbmF0dHJpYnV0ZSBmbG9hdCBzaXplLCBib3JkZXJTaXplO1xuYXR0cmlidXRlIHZlYzQgY29sb3JJZCwgYm9yZGVyQ29sb3JJZDtcbmF0dHJpYnV0ZSBmbG9hdCBpc0FjdGl2ZTtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSBib29sIGNvbnN0UG9pbnRTaXplO1xudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcbnVuaWZvcm0gdmVjMiBwYWxldHRlU2l6ZTtcblxuY29uc3QgZmxvYXQgbWF4U2l6ZSA9IDEwMC47XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcbnZhcnlpbmcgZmxvYXQgZnJhZ0JvcmRlclJhZGl1cywgZnJhZ1dpZHRoO1xuXG5mbG9hdCBwb2ludFNpemVTY2FsZSA9IChjb25zdFBvaW50U2l6ZSkgPyAyLiA6IHBpeGVsUmF0aW87XG5cbmJvb2wgaXNEaXJlY3QgPSAocGFsZXR0ZVNpemUueCA8IDEuKTtcblxudmVjNCBnZXRDb2xvcih2ZWM0IGlkKSB7XG4gIHJldHVybiBpc0RpcmVjdCA/IGlkIC8gMjU1LiA6IHRleHR1cmUyRChwYWxldHRlLFxuICAgIHZlYzIoXG4gICAgICAoaWQueCArIC41KSAvIHBhbGV0dGVTaXplLngsXG4gICAgICAoaWQueSArIC41KSAvIHBhbGV0dGVTaXplLnlcbiAgICApXG4gICk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gaWdub3JlIGluYWN0aXZlIHBvaW50c1xuICBpZiAoaXNBY3RpdmUgPT0gMC4pIHJldHVybjtcblxuICB2ZWMyIHBvc2l0aW9uID0gdmVjMih4LCB5KTtcbiAgdmVjMiBwb3NpdGlvbkZyYWN0ID0gdmVjMih4RnJhY3QsIHlGcmFjdCk7XG5cbiAgdmVjNCBjb2xvciA9IGdldENvbG9yKGNvbG9ySWQpO1xuICB2ZWM0IGJvcmRlckNvbG9yID0gZ2V0Q29sb3IoYm9yZGVyQ29sb3JJZCk7XG5cbiAgZmxvYXQgc2l6ZSA9IHNpemUgKiBtYXhTaXplIC8gMjU1LjtcbiAgZmxvYXQgYm9yZGVyU2l6ZSA9IGJvcmRlclNpemUgKiBtYXhTaXplIC8gMjU1LjtcblxuICBnbF9Qb2ludFNpemUgPSAoc2l6ZSArIGJvcmRlclNpemUpICogcG9pbnRTaXplU2NhbGU7XG5cbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAuLCAxLik7XG5cbiAgZnJhZ0JvcmRlclJhZGl1cyA9IDEuIC0gMi4gKiBib3JkZXJTaXplIC8gKHNpemUgKyBib3JkZXJTaXplKTtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yLmEgPT0gMC4gfHwgYm9yZGVyU2l6ZSA9PSAwLiA/IHZlYzQoY29sb3IucmdiLCAwLikgOiBib3JkZXJDb2xvcjtcbiAgZnJhZ1dpZHRoID0gMS4gLyBnbF9Qb2ludFNpemU7XG59XG4iXSksbSYmKGwuZnJhZz1sLmZyYWcucmVwbGFjZSgic21vb3Roc3RlcCIsInNtb290aFN0ZXAiKSxzLmZyYWc9cy5mcmFnLnJlcGxhY2UoInNtb290aHN0ZXAiLCJzbW9vdGhTdGVwIikpLHRoaXMuZHJhd0NpcmNsZT10KGwpfWIuZGVmYXVsdHM9e2NvbG9yOiJibGFjayIsYm9yZGVyQ29sb3I6InRyYW5zcGFyZW50Iixib3JkZXJTaXplOjAsc2l6ZToxMixvcGFjaXR5OjEsbWFya2VyOnZvaWQgMCx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwscGl4ZWxTaXplOm51bGwsY291bnQ6MCxvZmZzZXQ6MCxib3VuZHM6bnVsbCxwb3NpdGlvbnM6W10sc25hcDoxZTR9LGIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZ0aGlzLnVwZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5kcmF3KCksdGhpc30sYi5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPWFyZ3VtZW50c1tuXTt2YXIgaT10aGlzLmdyb3VwcztpZigxPT09ci5sZW5ndGgmJkFycmF5LmlzQXJyYXkoclswXSkmJihudWxsPT09clswXVswXXx8QXJyYXkuaXNBcnJheShyWzBdWzBdKSkmJihyPXJbMF0pLHRoaXMucmVnbC5fcmVmcmVzaCgpLHIubGVuZ3RoKWZvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXRoaXMuZHJhd0l0ZW0oYSxyW2FdKTtlbHNlIGkuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt0LmRyYXdJdGVtKHIpfSkpO3JldHVybiB0aGlzfSxiLnByb3RvdHlwZS5kcmF3SXRlbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ3JvdXBzLG49clt0XTtpZigibnVtYmVyIj09dHlwZW9mIGUmJih0PWUsbj1yW2VdLGU9bnVsbCksbiYmbi5jb3VudCYmbi5vcGFjaXR5KXtuLmFjdGl2YXRpb25bMF0mJnRoaXMuZHJhd0NpcmNsZSh0aGlzLmdldE1hcmtlckRyYXdPcHRpb25zKDAsbixlKSk7Zm9yKHZhciBhPVtdLG89MTtvPG4uYWN0aXZhdGlvbi5sZW5ndGg7bysrKW4uYWN0aXZhdGlvbltvXSYmKCEwPT09bi5hY3RpdmF0aW9uW29dfHxuLmFjdGl2YXRpb25bb10uZGF0YS5sZW5ndGgpJiZhLnB1c2guYXBwbHkoYSxpKHRoaXMuZ2V0TWFya2VyRHJhd09wdGlvbnMobyxuLGUpKSk7YS5sZW5ndGgmJnRoaXMuZHJhd01hcmtlcihhKX19LGIucHJvdG90eXBlLmdldE1hcmtlckRyYXdPcHRpb25zPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLnJhbmdlLGE9ZS50cmVlLG89ZS52aWV3cG9ydCxzPWUuYWN0aXZhdGlvbixsPWUuc2VsZWN0aW9uQnVmZmVyLGM9ZS5jb3VudDt0aGlzLnJlZ2w7aWYoIWEpcmV0dXJuIHI/W2goe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246c1t0XSxjb3VudDpyLmxlbmd0aCxlbGVtZW50czpyLG9mZnNldDowfSldOltoKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnNbdF0sb2Zmc2V0OjB9KV07dmFyIHU9W10sZj1hLnJhbmdlKGkse2xvZDohMCxweDpbKGlbMl0taVswXSkvby53aWR0aCwoaVszXS1pWzFdKS9vLmhlaWdodF19KTtpZihyKXtmb3IodmFyIHA9c1t0XS5kYXRhLGQ9bmV3IFVpbnQ4QXJyYXkoYyksZz0wO2c8ci5sZW5ndGg7ZysrKXt2YXIgbT1yW2ddO2RbbV09cD9wW21dOjF9bC5zdWJkYXRhKGQpfWZvcih2YXIgdj1mLmxlbmd0aDt2LS07KXt2YXIgeT1uKGZbdl0sMikseD15WzBdLGI9eVsxXTt1LnB1c2goaCh7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpyP2w6c1t0XSxvZmZzZXQ6eCxjb3VudDpiLXh9KSl9cmV0dXJuIHV9LGIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPWFyZ3VtZW50c1tuXTtpZihyLmxlbmd0aCl7MT09PXIubGVuZ3RoJiZBcnJheS5pc0FycmF5KHJbMF0pJiYocj1yWzBdKTt2YXIgaT10aGlzLmdyb3VwcyxhPXRoaXMuZ2wsbz10aGlzLnJlZ2wscz10aGlzLm1heFNpemUsYz10aGlzLm1heENvbG9ycyxmPXRoaXMucGFsZXR0ZTt0aGlzLmdyb3Vwcz1pPXIubWFwKChmdW5jdGlvbihlLHIpe3ZhciBuPWlbcl07aWYodm9pZCAwPT09ZSlyZXR1cm4gbjtudWxsPT09ZT9lPXtwb3NpdGlvbnM6bnVsbH06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZT17b25kcmF3OmV9OiJudW1iZXIiPT10eXBlb2YgZVswXSYmKGU9e3Bvc2l0aW9uczplfSksbnVsbD09PShlPXAoZSx7cG9zaXRpb25zOiJwb3NpdGlvbnMgZGF0YSBwb2ludHMiLHNuYXA6InNuYXAgY2x1c3RlciBsb2QgdHJlZSIsc2l6ZToic2l6ZXMgc2l6ZSByYWRpdXMiLGJvcmRlclNpemU6ImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lIixjb2xvcjoiY29sb3JzIGNvbG9yIGZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IiLGJvcmRlckNvbG9yOiJib3JkZXJDb2xvcnMgYm9yZGVyQ29sb3Igc3Ryb2tlIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvciIsbWFya2VyOiJtYXJrZXJzIG1hcmtlciBzaGFwZSIscmFuZ2U6InJhbmdlIGRhdGFCb3ggZGF0YWJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdQb3J0IHZpZXdCb3ggdmlld2JveCIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kiLGJvdW5kczoiYm91bmQgYm91bmRzIGJvdW5kYXJpZXMgbGltaXRzIix0b29NYW55Q29sb3JzOiJ0b29NYW55Q29sb3JzIHBhbGV0dGUgcGFsZXR0ZU1vZGUgb3B0aW1pemVQYWxldHRlIGVuYWJsZVBhbGV0dGUifSkpLnBvc2l0aW9ucyYmKGUucG9zaXRpb25zPVtdKSxudWxsIT1lLnRvb01hbnlDb2xvcnMmJih0LnRvb01hbnlDb2xvcnM9ZS50b29NYW55Q29sb3JzKSxufHwoaVtyXT1uPXtpZDpyLHNjYWxlOm51bGwsdHJhbnNsYXRlOm51bGwsc2NhbGVGcmFjdDpudWxsLHRyYW5zbGF0ZUZyYWN0Om51bGwsYWN0aXZhdGlvbjpbXSxzZWxlY3Rpb25CdWZmZXI6by5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6InN0cmVhbSIsdHlwZToidWludDgifSksc2l6ZUJ1ZmZlcjpvLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgifSksY29sb3JCdWZmZXI6by5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4In0pLHBvc2l0aW9uQnVmZmVyOm8uYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCJ9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOm8uYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCJ9KX0sZT1oKHt9LGIuZGVmYXVsdHMsZSkpLGUucG9zaXRpb25zJiYhKCJtYXJrZXIiaW4gZSkmJihlLm1hcmtlcj1uLm1hcmtlcixkZWxldGUgbi5tYXJrZXIpLGUubWFya2VyJiYhKCJwb3NpdGlvbnMiaW4gZSkmJihlLnBvc2l0aW9ucz1uLnBvc2l0aW9ucyxkZWxldGUgbi5wb3NpdGlvbnMpO3ZhciBtPTAseD0wO2lmKGQobixlLFt7c25hcDohMCxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PWIuZGVmYXVsdHMuc2l6ZSksbSs9dCYmdC5sZW5ndGg/MTowLHR9LGJvcmRlclNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9Yi5kZWZhdWx0cy5ib3JkZXJTaXplKSxtKz10JiZ0Lmxlbmd0aD8xOjAsdH0sb3BhY2l0eTpwYXJzZUZsb2F0LGNvbG9yOmZ1bmN0aW9uKGUscil7cmV0dXJuIG51bGw9PWUmJihlPWIuZGVmYXVsdHMuY29sb3IpLGU9dC51cGRhdGVDb2xvcihlKSx4KyssZX0sYm9yZGVyQ29sb3I6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnVsbD09ZSYmKGU9Yi5kZWZhdWx0cy5ib3JkZXJDb2xvciksZT10LnVwZGF0ZUNvbG9yKGUpLHgrKyxlfSxib3VuZHM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiJyYW5nZSJpbiByfHwoci5yYW5nZT1udWxsKSx0fSxwb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuc25hcCxpPWUucG9zaXRpb25CdWZmZXIsYT1lLnBvc2l0aW9uRnJhY3RCdWZmZXIscz1lLnNlbGVjdGlvbkJ1ZmZlcjtpZih0Lnh8fHQueSlyZXR1cm4gdC54Lmxlbmd0aD9lLnhBdHRyPXtidWZmZXI6by5idWZmZXIodC54KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LngubGVuZ3RofTplLnhBdHRyPXtidWZmZXI6dC54LmJ1ZmZlcixvZmZzZXQ6NCp0Lngub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnguc3RyaWRlfHwxKSxjb3VudDp0LnguY291bnR9LHQueS5sZW5ndGg/ZS55QXR0cj17YnVmZmVyOm8uYnVmZmVyKHQueSksb2Zmc2V0OjAsc3RyaWRlOjQsY291bnQ6dC55Lmxlbmd0aH06ZS55QXR0cj17YnVmZmVyOnQueS5idWZmZXIsb2Zmc2V0OjQqdC55Lm9mZnNldHx8MCxzdHJpZGU6NCoodC55LnN0cmlkZXx8MSksY291bnQ6dC55LmNvdW50fSxlLmNvdW50PU1hdGgubWF4KGUueEF0dHIuY291bnQsZS55QXR0ci5jb3VudCksdDt0PWcodCwiZmxvYXQ2NCIpO3ZhciBjPWUuY291bnQ9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKSxoPWUuYm91bmRzPWM/bCh0LDIpOm51bGw7aWYoci5yYW5nZXx8ZS5yYW5nZXx8KGRlbGV0ZSBlLnJhbmdlLHIucmFuZ2U9aCksci5tYXJrZXJ8fGUubWFya2VyfHwoZGVsZXRlIGUubWFya2VyLHIubWFya2VyPW51bGwpLG4mJighMD09PW58fGM+bik/ZS50cmVlPXUodCx7Ym91bmRzOmh9KTpuJiZuLmxlbmd0aCYmKGUudHJlZT1uKSxlLnRyZWUpe3ZhciBmPXtwcmltaXRpdmU6InBvaW50cyIsdXNhZ2U6InN0YXRpYyIsZGF0YTplLnRyZWUsdHlwZToidWludDMyIn07ZS5lbGVtZW50cz9lLmVsZW1lbnRzKGYpOmUuZWxlbWVudHM9by5lbGVtZW50cyhmKX1yZXR1cm4gaSh7ZGF0YTp2LmZsb2F0KHQpLHVzYWdlOiJkeW5hbWljIn0pLGEoe2RhdGE6di5mcmFjdCh0KSx1c2FnZToiZHluYW1pYyJ9KSxzKHtkYXRhOm5ldyBVaW50OEFycmF5KGMpLHR5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHR9fSx7bWFya2VyOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLmFjdGl2YXRpb247aWYoaS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pKSxpLmxlbmd0aD0wLGUmJiJudW1iZXIiIT10eXBlb2YgZVswXSl7Zm9yKHZhciBhPVtdLHM9MCxsPU1hdGgubWluKGUubGVuZ3RoLHIuY291bnQpO3M8bDtzKyspe3ZhciBjPXQuYWRkTWFya2VyKGVbc10pO2FbY118fChhW2NdPW5ldyBVaW50OEFycmF5KHIuY291bnQpKSxhW2NdW3NdPTF9Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1KyspaWYoYVt1XSl7dmFyIGg9e2RhdGE6YVt1XSx0eXBlOiJ1aW50OCIsdXNhZ2U6InN0YXRpYyJ9O2lbdV0/aVt1XShoKTppW3VdPW8uYnVmZmVyKGgpLGlbdV0uZGF0YT1hW3VdfX1lbHNle2lbdC5hZGRNYXJrZXIoZSldPSEwfXJldHVybiBlfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7aWYobilyZXR1cm4gdHx8KHQ9biksZS5zY2FsZT1bMS8odFsyXS10WzBdKSwxLyh0WzNdLXRbMV0pXSxlLnRyYW5zbGF0ZT1bLXRbMF0sLXRbMV1dLGUuc2NhbGVGcmFjdD12LmZyYWN0KGUuc2NhbGUpLGUudHJhbnNsYXRlRnJhY3Q9di5mcmFjdChlLnRyYW5zbGF0ZSksdH0sdmlld3BvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHkodHx8W2EuZHJhd2luZ0J1ZmZlcldpZHRoLGEuZHJhd2luZ0J1ZmZlckhlaWdodF0pfX1dKSxtKXt2YXIgXz1uLHc9Xy5jb3VudCxUPV8uc2l6ZSxrPV8uYm9yZGVyU2l6ZSxNPV8uc2l6ZUJ1ZmZlcixBPW5ldyBVaW50OEFycmF5KDIqdyk7aWYoVC5sZW5ndGh8fGsubGVuZ3RoKWZvcih2YXIgUz0wO1M8dztTKyspQVsyKlNdPU1hdGgucm91bmQoMjU1KihudWxsPT1UW1NdP1Q6VFtTXSkvcyksQVsyKlMrMV09TWF0aC5yb3VuZCgyNTUqKG51bGw9PWtbU10/azprW1NdKS9zKTtNKHtkYXRhOkEsdXNhZ2U6ImR5bmFtaWMifSl9aWYoeCl7dmFyIEUsQz1uLEw9Qy5jb3VudCxQPUMuY29sb3IsST1DLmJvcmRlckNvbG9yLHo9Qy5jb2xvckJ1ZmZlcjtpZih0LnRvb01hbnlDb2xvcnMpe2lmKFAubGVuZ3RofHxJLmxlbmd0aCl7RT1uZXcgVWludDhBcnJheSg4KkwpO2Zvcih2YXIgTz0wO088TDtPKyspe3ZhciBEPVBbT107RVs4Kk9dPWZbNCpEXSxFWzgqTysxXT1mWzQqRCsxXSxFWzgqTysyXT1mWzQqRCsyXSxFWzgqTyszXT1mWzQqRCszXTt2YXIgUj1JW09dO0VbOCpPKzRdPWZbNCpSXSxFWzgqTys1XT1mWzQqUisxXSxFWzgqTys2XT1mWzQqUisyXSxFWzgqTys3XT1mWzQqUiszXX19fWVsc2UgaWYoUC5sZW5ndGh8fEkubGVuZ3RoKXtFPW5ldyBVaW50OEFycmF5KDQqTCsyKTtmb3IodmFyIEY9MDtGPEw7RisrKW51bGwhPVBbRl0mJihFWzQqRl09UFtGXSVjLEVbNCpGKzFdPU1hdGguZmxvb3IoUFtGXS9jKSksbnVsbCE9SVtGXSYmKEVbNCpGKzJdPUlbRl0lYyxFWzQqRiszXT1NYXRoLmZsb29yKElbRl0vYykpfXooe2RhdGE6RXx8bmV3IFVpbnQ4QXJyYXkoMCksdHlwZToidWludDgiLHVzYWdlOiJkeW5hbWljIn0pfXJldHVybiBufSkpfX0sYi5wcm90b3R5cGUuYWRkTWFya2VyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5tYXJrZXJUZXh0dXJlcyxuPXRoaXMucmVnbCxpPXRoaXMubWFya2VyQ2FjaGUsYT1udWxsPT10PzA6aS5pbmRleE9mKHQpO2lmKGE+PTApcmV0dXJuIGE7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSllPXQ7ZWxzZXtlPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIG89MCxzPXQubGVuZ3RoO288cztvKyspZVtvXT0yNTUqdFtvXX12YXIgbD1NYXRoLmZsb29yKE1hdGguc3FydChlLmxlbmd0aCkpO3JldHVybiBhPXIubGVuZ3RoLGkucHVzaCh0KSxyLnB1c2gobi50ZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6ZSxyYWRpdXM6bCxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSkpLGF9LGIucHJvdG90eXBlLnVwZGF0ZUNvbG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFsZXR0ZUlkcyxyPXRoaXMucGFsZXR0ZSxuPXRoaXMubWF4Q29sb3JzO0FycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIGk9W107aWYoIm51bWJlciI9PXR5cGVvZiB0WzBdKXt2YXIgYT1bXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbz0wO288dC5sZW5ndGg7bys9NClhLnB1c2godC5zbGljZShvLG8rNCkpO2Vsc2UgZm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKz00KWEucHVzaCh0LnN1YmFycmF5KGwsbCs0KSk7dD1hfWZvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgaD10W3VdO2g9cyhoLCJ1aW50OCIpO3ZhciBmPWMoaCwhMSk7aWYobnVsbD09ZVtmXSl7dmFyIHA9ci5sZW5ndGg7ZVtmXT1NYXRoLmZsb29yKHAvNCkscltwXT1oWzBdLHJbcCsxXT1oWzFdLHJbcCsyXT1oWzJdLHJbcCszXT1oWzNdfWlbdV09ZVtmXX1yZXR1cm4hdGhpcy50b29NYW55Q29sb3JzJiZyLmxlbmd0aD40Km4mJih0aGlzLnRvb01hbnlDb2xvcnM9ITApLHRoaXMudXBkYXRlUGFsZXR0ZShyKSwxPT09aS5sZW5ndGg/aVswXTppfSxiLnByb3RvdHlwZS51cGRhdGVQYWxldHRlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLnRvb01hbnlDb2xvcnMpe3ZhciBlPXRoaXMubWF4Q29sb3JzLHI9dGhpcy5wYWxldHRlVGV4dHVyZSxuPU1hdGguY2VpbCguMjUqdC5sZW5ndGgvZSk7aWYobj4xKWZvcih2YXIgaT0uMjUqKHQ9dC5zbGljZSgpKS5sZW5ndGglZTtpPG4qZTtpKyspdC5wdXNoKDAsMCwwLDApO3IuaGVpZ2h0PG4mJnIucmVzaXplKGUsbiksci5zdWJpbWFnZSh7d2lkdGg6TWF0aC5taW4oLjI1KnQubGVuZ3RoLGUpLGhlaWdodDpuLGRhdGE6dH0sMCwwKX19LGIucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zaXplQnVmZmVyLmRlc3Ryb3koKSx0LnBvc2l0aW9uQnVmZmVyLmRlc3Ryb3koKSx0LnBvc2l0aW9uRnJhY3RCdWZmZXIuZGVzdHJveSgpLHQuY29sb3JCdWZmZXIuZGVzdHJveSgpLHQuYWN0aXZhdGlvbi5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pKSx0LnNlbGVjdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5lbGVtZW50cyYmdC5lbGVtZW50cy5kZXN0cm95KCl9KSksdGhpcy5ncm91cHMubGVuZ3RoPTAsdGhpcy5wYWxldHRlVGV4dHVyZS5kZXN0cm95KCksdGhpcy5tYXJrZXJUZXh0dXJlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pKSx0aGlzfTt2YXIgXz10KCJvYmplY3QtYXNzaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHgodCxlKSxuPXIucmVuZGVyLmJpbmQocik7cmV0dXJuIF8obix7cmVuZGVyOm4sdXBkYXRlOnIudXBkYXRlLmJpbmQociksZHJhdzpyLmRyYXcuYmluZChyKSxkZXN0cm95OnIuZGVzdHJveS5iaW5kKHIpLHJlZ2w6ci5yZWdsLGdsOnIuZ2wsY2FudmFzOnIuZ2wuY2FudmFzLGdyb3VwczpyLmdyb3VwcyxtYXJrZXJzOnIubWFya2VyQ2FjaGUscGFsZXR0ZTpyLnBhbGV0dGV9KSxufX0seyJAcGxvdGx5L3BvaW50LWNsdXN0ZXIiOjU3LCJhcnJheS1ib3VuZHMiOjcwLCJjb2xvci1pZCI6MTIzLCJjb2xvci1ub3JtYWxpemUiOjEyNSwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjQ0LGdsc2xpZnk6NDEzLCJpcy1pZXhwbG9yZXIiOjQ0MCwib2JqZWN0LWFzc2lnbiI6NDczLCJwYXJzZS1yZWN0Ijo0NzgsInBpY2stYnktYWxpYXMiOjQ4NSwidG8tZmxvYXQzMiI6NTQ5LCJ1cGRhdGUtZGlmZiI6NTcxfV0sNTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtc2NhdHRlcjJkIiksaT10KCJwaWNrLWJ5LWFsaWFzIiksYT10KCJhcnJheS1ib3VuZHMiKSxvPXQoInJhZiIpLHM9dCgiYXJyYXktcmFuZ2UiKSxsPXQoInBhcnNlLXJlY3QiKSxjPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKTtmdW5jdGlvbiB1KHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdSkpcmV0dXJuIG5ldyB1KHQsZSk7dGhpcy50cmFjZXM9W10sdGhpcy5wYXNzZXM9e30sdGhpcy5yZWdsPXQsdGhpcy5zY2F0dGVyPW4odCksdGhpcy5jYW52YXM9dGhpcy5zY2F0dGVyLmNhbnZhc31mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4obnVsbCE9dC5pZD90LmlkOnQpPDwxNnwoMjU1JmUpPDw4fDI1NSZyfWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuLGksYSxvLHM9dFtlXSxsPXRbcl07cmV0dXJuIHMubGVuZ3RoPjI/KHNbMF0sc1syXSxuPXNbMV0saT1zWzNdKTpzLmxlbmd0aD8obj1zWzBdLGk9c1sxXSk6KHMueCxuPXMueSxzLngrcy53aWR0aCxpPXMueStzLmhlaWdodCksbC5sZW5ndGg+Mj8oYT1sWzBdLG89bFsyXSxsWzFdLGxbM10pOmwubGVuZ3RoPyhhPWxbMF0sbz1sWzFdKTooYT1sLngsbC55LG89bC54K2wud2lkdGgsbC55K2wuaGVpZ2h0KSxbYSxuLG8saV19ZnVuY3Rpb24gcCh0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuW3QsdCx0LHRdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bdFswXSx0WzFdLHRbMF0sdFsxXV07dmFyIGU9bCh0KTtyZXR1cm5bZS54LGUueSxlLngrZS53aWR0aCxlLnkrZS5oZWlnaHRdfWUuZXhwb3J0cz11LHUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMscj1bXSxuPWFyZ3VtZW50cy5sZW5ndGg7bi0tOylyW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gci5sZW5ndGgmJih0PXRoaXMpLnVwZGF0ZS5hcHBseSh0LHIpLHRoaXMucmVnbC5hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj90aGlzLmRyYXcoKToodGhpcy5kaXJ0eT9udWxsPT10aGlzLnBsYW5uZWQmJih0aGlzLnBsYW5uZWQ9bygoZnVuY3Rpb24oKXtlLmRyYXcoKSxlLmRpcnR5PSEwLGUucGxhbm5lZD1udWxsfSkpKToodGhpcy5kcmF3KCksdGhpcy5kaXJ0eT0hMCxvKChmdW5jdGlvbigpe2UuZGlydHk9ITF9KSkpLHRoaXMpfSx1LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtpZihlLmxlbmd0aCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy51cGRhdGVJdGVtKG4sZVtuXSk7dGhpcy50cmFjZXM9dGhpcy50cmFjZXMuZmlsdGVyKEJvb2xlYW4pO2Zvcih2YXIgaT1bXSxhPTAsbz0wO288dGhpcy50cmFjZXMubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRoaXMudHJhY2VzW29dLGw9dGhpcy50cmFjZXNbb10ucGFzc2VzLGM9MDtjPGwubGVuZ3RoO2MrKylpLnB1c2godGhpcy5wYXNzZXNbbFtjXV0pO3MucGFzc09mZnNldD1hLGErPXMucGFzc2VzLmxlbmd0aH1yZXR1cm4odD10aGlzLnNjYXR0ZXIpLnVwZGF0ZS5hcHBseSh0LGkpLHRoaXN9fSx1LnByb3RvdHlwZS51cGRhdGVJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5yZWdsO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLnRyYWNlc1t0XT1udWxsLHRoaXM7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIG4sbz1pKGUse2RhdGE6ImRhdGEgaXRlbXMgY29sdW1ucyByb3dzIHZhbHVlcyBkaW1lbnNpb25zIHNhbXBsZXMgeCIsc25hcDoic25hcCBjbHVzdGVyIixzaXplOiJzaXplcyBzaXplIHJhZGl1cyIsY29sb3I6ImNvbG9ycyBjb2xvciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIixvcGFjaXR5OiJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSBvcGFxdWUiLGJvcmRlclNpemU6ImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lIixib3JkZXJDb2xvcjoiYm9yZGVyQ29sb3JzIGJvcmRlckNvbG9yIGJvcmRlcmNvbG9yIHN0cm9rZSBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3IiLG1hcmtlcjoibWFya2VycyBtYXJrZXIgc2hhcGUiLHJhbmdlOiJyYW5nZSByYW5nZXMgZGF0YWJveCBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCB2aWV3Ym94Iixkb21haW46ImRvbWFpbiBkb21haW5zIGFyZWEgYXJlYXMiLHBhZGRpbmc6InBhZCBwYWRkaW5nIHBhZGRpbmdzIHBhZHMgbWFyZ2luIG1hcmdpbnMiLHRyYW5zcG9zZToidHJhbnNwb3NlIHRyYW5zcG9zZWQiLGRpYWdvbmFsOiJkaWFnb25hbCBkaWFnIHNob3dEaWFnb25hbCIsdXBwZXI6InVwcGVyIHVwIHRvcCB1cHBlcmhhbGYgdXBwZXJIYWxmIHNob3d1cHBlcmhhbGYgc2hvd1VwcGVyIHNob3dVcHBlckhhbGYiLGxvd2VyOiJsb3dlciBsb3cgYm90dG9tIGxvd2VyaGFsZiBsb3dlckhhbGYgc2hvd2xvd2VyaGFsZiBzaG93TG93ZXJIYWxmIHNob3dMb3dlciJ9KSxzPXRoaXMudHJhY2VzW3RdfHwodGhpcy50cmFjZXNbdF09e2lkOnQsYnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxjb2xvcjoiYmxhY2siLG1hcmtlcjpudWxsLHNpemU6MTIsYm9yZGVyQ29sb3I6InRyYW5zcGFyZW50Iixib3JkZXJTaXplOjEsdmlld3BvcnQ6bChbci5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHIuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxwYWRkaW5nOlswLDAsMCwwXSxvcGFjaXR5OjEsZGlhZ29uYWw6ITAsdXBwZXI6ITAsbG93ZXI6ITB9KTtpZihudWxsIT1vLmNvbG9yJiYocy5jb2xvcj1vLmNvbG9yKSxudWxsIT1vLnNpemUmJihzLnNpemU9by5zaXplKSxudWxsIT1vLm1hcmtlciYmKHMubWFya2VyPW8ubWFya2VyKSxudWxsIT1vLmJvcmRlckNvbG9yJiYocy5ib3JkZXJDb2xvcj1vLmJvcmRlckNvbG9yKSxudWxsIT1vLmJvcmRlclNpemUmJihzLmJvcmRlclNpemU9by5ib3JkZXJTaXplKSxudWxsIT1vLm9wYWNpdHkmJihzLm9wYWNpdHk9by5vcGFjaXR5KSxvLnZpZXdwb3J0JiYocy52aWV3cG9ydD1sKG8udmlld3BvcnQpKSxudWxsIT1vLmRpYWdvbmFsJiYocy5kaWFnb25hbD1vLmRpYWdvbmFsKSxudWxsIT1vLnVwcGVyJiYocy51cHBlcj1vLnVwcGVyKSxudWxsIT1vLmxvd2VyJiYocy5sb3dlcj1vLmxvd2VyKSxvLmRhdGEpe3MuYnVmZmVyKGMoby5kYXRhKSkscy5jb2x1bW5zPW8uZGF0YS5sZW5ndGgscy5jb3VudD1vLmRhdGFbMF0ubGVuZ3RoLHMuYm91bmRzPVtdO2Zvcih2YXIgdT0wO3U8cy5jb2x1bW5zO3UrKylzLmJvdW5kc1t1XT1hKG8uZGF0YVt1XSwxKX1vLnJhbmdlJiYocy5yYW5nZT1vLnJhbmdlLG49cy5yYW5nZSYmIm51bWJlciIhPXR5cGVvZiBzLnJhbmdlWzBdKSxvLmRvbWFpbiYmKHMuZG9tYWluPW8uZG9tYWluKTt2YXIgZD0hMTtudWxsIT1vLnBhZGRpbmcmJihBcnJheS5pc0FycmF5KG8ucGFkZGluZykmJm8ucGFkZGluZy5sZW5ndGg9PT1zLmNvbHVtbnMmJiJudW1iZXIiPT10eXBlb2Ygby5wYWRkaW5nW28ucGFkZGluZy5sZW5ndGgtMV0/KHMucGFkZGluZz1vLnBhZGRpbmcubWFwKHApLGQ9ITApOnMucGFkZGluZz1wKG8ucGFkZGluZykpO3ZhciBnPXMuY29sdW1ucyxtPXMuY291bnQsdj1zLnZpZXdwb3J0LndpZHRoLHk9cy52aWV3cG9ydC5oZWlnaHQseD1zLnZpZXdwb3J0LngsYj1zLnZpZXdwb3J0LnksXz12L2csdz15L2c7cy5wYXNzZXM9W107Zm9yKHZhciBUPTA7VDxnO1QrKylmb3IodmFyIGs9MDtrPGc7aysrKWlmKChzLmRpYWdvbmFsfHxrIT09VCkmJihzLnVwcGVyfHwhKFQ+aykpJiYocy5sb3dlcnx8IShUPGspKSl7dmFyIE09aChzLmlkLFQsayksQT10aGlzLnBhc3Nlc1tNXXx8KHRoaXMucGFzc2VzW01dPXt9KTtpZihvLmRhdGEmJihvLnRyYW5zcG9zZT9BLnBvc2l0aW9ucz17eDp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDprLGNvdW50Om0sc3RyaWRlOmd9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6VCxjb3VudDptLHN0cmlkZTpnfX06QS5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayptLGNvdW50Om19LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6VCptLGNvdW50Om19fSxBLmJvdW5kcz1mKHMuYm91bmRzLFQsaykpLG8uZG9tYWlufHxvLnZpZXdwb3J0fHxvLmRhdGEpe3ZhciBTPWQ/ZihzLnBhZGRpbmcsVCxrKTpzLnBhZGRpbmc7aWYocy5kb21haW4pe3ZhciBFPWYocy5kb21haW4sVCxrKSxDPUVbMF0sTD1FWzFdLFA9RVsyXSxJPUVbM107QS52aWV3cG9ydD1beCtDKnYrU1swXSxiK0wqeStTWzFdLHgrUCp2LVNbMl0sYitJKnktU1szXV19ZWxzZSBBLnZpZXdwb3J0PVt4K2sqXytfKlNbMF0sYitUKncrdypTWzFdLHgrKGsrMSkqXy1fKlNbMl0sYisoVCsxKSp3LXcqU1szXV19by5jb2xvciYmKEEuY29sb3I9cy5jb2xvciksby5zaXplJiYoQS5zaXplPXMuc2l6ZSksby5tYXJrZXImJihBLm1hcmtlcj1zLm1hcmtlciksby5ib3JkZXJTaXplJiYoQS5ib3JkZXJTaXplPXMuYm9yZGVyU2l6ZSksby5ib3JkZXJDb2xvciYmKEEuYm9yZGVyQ29sb3I9cy5ib3JkZXJDb2xvciksby5vcGFjaXR5JiYoQS5vcGFjaXR5PXMub3BhY2l0eSksby5yYW5nZSYmKEEucmFuZ2U9bj9mKHMucmFuZ2UsVCxrKTpzLnJhbmdlfHxBLmJvdW5kcykscy5wYXNzZXMucHVzaChNKX1yZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO2lmKGUubGVuZ3RoKXtmb3IodmFyIG49W10saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKCJudW1iZXIiPT10eXBlb2YgZVtpXSl7dmFyIGE9dGhpcy50cmFjZXNbZVtpXV0sbz1hLnBhc3NlcyxsPWEucGFzc09mZnNldDtuLnB1c2guYXBwbHkobixzKGwsbCtvLmxlbmd0aCkpfWVsc2UgaWYoZVtpXS5sZW5ndGgpe3ZhciBjPWVbaV0sdT10aGlzLnRyYWNlc1tpXSxoPXUucGFzc2VzLGY9dS5wYXNzT2Zmc2V0O2g9aC5tYXAoKGZ1bmN0aW9uKHQsZSl7bltmK2VdPWN9KSl9KHQ9dGhpcy5zY2F0dGVyKS5kcmF3LmFwcGx5KHQsbil9ZWxzZSB0aGlzLnNjYXR0ZXIuZHJhdygpO3JldHVybiB0aGlzfSx1LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhY2VzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuYnVmZmVyJiZ0LmJ1ZmZlci5kZXN0cm95JiZ0LmJ1ZmZlci5kZXN0cm95KCl9KSksdGhpcy50cmFjZXM9bnVsbCx0aGlzLnBhc3Nlcz1udWxsLHRoaXMuc2NhdHRlci5kZXN0cm95KCksdGhpc319LHsiYXJyYXktYm91bmRzIjo3MCwiYXJyYXktcmFuZ2UiOjcyLCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyNDQsInBhcnNlLXJlY3QiOjQ3OCwicGljay1ieS1hbGlhcyI6NDg1LHJhZjo1MDIsInJlZ2wtc2NhdHRlcjJkIjo1MTB9XSw1MTI6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9lLmV4cG9ydHM9bigpOnQuY3JlYXRlUkVHTD1uKCl9KHRoaXMsKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuaWQ9VisrLHRoaXMudHlwZT10LHRoaXMuZGF0YT1lfWZ1bmN0aW9uIGUodCl7cmV0dXJuIlsiK2Z1bmN0aW9uIHQoZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybltdO3ZhciByPWUuY2hhckF0KDApLG49ZS5jaGFyQXQoZS5sZW5ndGgtMSk7aWYoMTxlLmxlbmd0aCYmcj09PW4mJignIic9PT1yfHwiJyI9PT1yKSlyZXR1cm5bJyInK2Uuc3Vic3RyKDEsZS5sZW5ndGgtMikucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyIvZywnXFwiJykrJyInXTtpZihyPS9cWyhmYWxzZXx0cnVlfG51bGx8XGQrfCdbXiddKid8IlteIl0qIilcXS8uZXhlYyhlKSlyZXR1cm4gdChlLnN1YnN0cigwLHIuaW5kZXgpKS5jb25jYXQodChyWzFdKSkuY29uY2F0KHQoZS5zdWJzdHIoci5pbmRleCtyWzBdLmxlbmd0aCkpKTtpZigxPT09KHI9ZS5zcGxpdCgiLiIpKS5sZW5ndGgpcmV0dXJuWyciJytlLnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC8iL2csJ1xcIicpKyciJ107Zm9yKGU9W10sbj0wO248ci5sZW5ndGg7KytuKWU9ZS5jb25jYXQodChyW25dKSk7cmV0dXJuIGV9KHQpLmpvaW4oIl1bIikrIl0ifWZ1bmN0aW9uIHIodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoKTp0fWZ1bmN0aW9uIG4odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk6dH1mdW5jdGlvbiBpKHQpe3ZhciBlLGksYSxvLHM9dHx8e307dD17fTt2YXIgbD1bXSxjPVtdLHU9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/MTp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxoPSExLGY9ZnVuY3Rpb24odCl7fSxwPWZ1bmN0aW9uKCl7fTtpZigic3RyaW5nIj09dHlwZW9mIHM/ZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpOiJvYmplY3QiPT10eXBlb2YgcyYmKCJzdHJpbmciPT10eXBlb2Ygcy5ub2RlTmFtZSYmImZ1bmN0aW9uIj09dHlwZW9mIHMuYXBwZW5kQ2hpbGQmJiJmdW5jdGlvbiI9PXR5cGVvZiBzLmdldEJvdW5kaW5nQ2xpZW50UmVjdD9lPXM6ImZ1bmN0aW9uIj09dHlwZW9mIHMuZHJhd0FycmF5c3x8ImZ1bmN0aW9uIj09dHlwZW9mIHMuZHJhd0VsZW1lbnRzP2E9KG89cykuY2FudmFzOigiZ2wiaW4gcz9vPXMuZ2w6ImNhbnZhcyJpbiBzP2E9bihzLmNhbnZhcyk6ImNvbnRhaW5lciJpbiBzJiYoaT1uKHMuY29udGFpbmVyKSksImF0dHJpYnV0ZXMiaW4gcyYmKHQ9cy5hdHRyaWJ1dGVzKSwiZXh0ZW5zaW9ucyJpbiBzJiYobD1yKHMuZXh0ZW5zaW9ucykpLCJvcHRpb25hbEV4dGVuc2lvbnMiaW4gcyYmKGM9cihzLm9wdGlvbmFsRXh0ZW5zaW9ucykpLCJvbkRvbmUiaW4gcyYmKGY9cy5vbkRvbmUpLCJwcm9maWxlImluIHMmJihoPSEhcy5wcm9maWxlKSwicGl4ZWxSYXRpbyJpbiBzJiYodT0rcy5waXhlbFJhdGlvKSkpLGUmJigiY2FudmFzIj09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9hPWU6aT1lKSwhbyl7aWYoIWEpe2lmKCEoZT1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3ZhciBlPXdpbmRvdy5pbm5lcldpZHRoLG49d2luZG93LmlubmVySGVpZ2h0O3QhPT1kb2N1bWVudC5ib2R5JiYoZT0obj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKS5yaWdodC1uLmxlZnQsbj1uLmJvdHRvbS1uLnRvcCksYS53aWR0aD1yKmUsYS5oZWlnaHQ9cipuLFUoYS5zdHlsZSx7d2lkdGg6ZSsicHgiLGhlaWdodDpuKyJweCJ9KX12YXIgaSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBVKGEuc3R5bGUse2JvcmRlcjowLG1hcmdpbjowLHBhZGRpbmc6MCx0b3A6MCxsZWZ0OjB9KSx0LmFwcGVuZENoaWxkKGEpLHQ9PT1kb2N1bWVudC5ib2R5JiYoYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLFUodC5zdHlsZSx7bWFyZ2luOjAscGFkZGluZzowfSkpLHQhPT1kb2N1bWVudC5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVzaXplT2JzZXJ2ZXI/KGk9bmV3IFJlc2l6ZU9ic2VydmVyKChmdW5jdGlvbigpe3NldFRpbWVvdXQobil9KSkpLm9ic2VydmUodCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbiwhMSksbigpLHtjYW52YXM6YSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXtpP2kuZGlzY29ubmVjdCgpOndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLG4pLHQucmVtb3ZlQ2hpbGQoYSl9fX0oaXx8ZG9jdW1lbnQuYm9keSwwLHUpKSlyZXR1cm4gbnVsbDthPWUuY2FudmFzLHA9ZS5vbkRlc3Ryb3l9dm9pZCAwPT09dC5wcmVtdWx0aXBsaWVkQWxwaGEmJih0LnByZW11bHRpcGxpZWRBbHBoYT0hMCksbz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocil7dHJ5e3JldHVybiB0LmdldENvbnRleHQocixlKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19cmV0dXJuIHIoIndlYmdsIil8fHIoImV4cGVyaW1lbnRhbC13ZWJnbCIpfHxyKCJ3ZWJnbC1leHBlcmltZW50YWwiKX0oYSx0KX1yZXR1cm4gbz97Z2w6byxjYW52YXM6YSxjb250YWluZXI6aSxleHRlbnNpb25zOmwsb3B0aW9uYWxFeHRlbnNpb25zOmMscGl4ZWxSYXRpbzp1LHByb2ZpbGU6aCxvbkRvbmU6ZixvbkRlc3Ryb3k6cH06KHAoKSxmKCJ3ZWJnbCBub3Qgc3VwcG9ydGVkLCB0cnkgdXBncmFkaW5nIHlvdXIgYnJvd3NlciBvciBncmFwaGljcyBkcml2ZXJzIGh0dHA6Ly9nZXQud2ViZ2wub3JnIiksbnVsbCl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1BcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPSg2NTUzNTx0KTw8NCxlfD1yPSgyNTU8KHQ+Pj49ZSkpPDwzLChlfD1yPSgxNTwodD4+Pj1yKSk8PDIpfChyPSgzPCh0Pj4+PXIpKTw8MSl8dD4+PnI+PjF9ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIHQodCl7dDp7Zm9yKHZhciBlPTE2OzI2ODQzNTQ1Nj49ZTtlKj0xNilpZih0PD1lKXt0PWU7YnJlYWsgdH10PTB9cmV0dXJuIDA8KGU9cltvKHQpPj4yXSkubGVuZ3RoP2UucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGUodCl7cltvKHQuYnl0ZUxlbmd0aCk+PjJdLnB1c2godCl9dmFyIHI9YSg4LChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybnthbGxvYzp0LGZyZWU6ZSxhbGxvY1R5cGU6ZnVuY3Rpb24oZSxyKXt2YXIgbj1udWxsO3N3aXRjaChlKXtjYXNlIDUxMjA6bj1uZXcgSW50OEFycmF5KHQociksMCxyKTticmVhaztjYXNlIDUxMjE6bj1uZXcgVWludDhBcnJheSh0KHIpLDAscik7YnJlYWs7Y2FzZSA1MTIyOm49bmV3IEludDE2QXJyYXkodCgyKnIpLDAscik7YnJlYWs7Y2FzZSA1MTIzOm49bmV3IFVpbnQxNkFycmF5KHQoMipyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNDpuPW5ldyBJbnQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNTpuPW5ldyBVaW50MzJBcnJheSh0KDQqciksMCxyKTticmVhaztjYXNlIDUxMjY6bj1uZXcgRmxvYXQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIG4ubGVuZ3RoIT09cj9uLnN1YmFycmF5KDAscik6bn0sZnJlZVR5cGU6ZnVuY3Rpb24odCl7ZSh0LmJ1ZmZlcil9fX1mdW5jdGlvbiBsKHQpe3JldHVybiEhdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQuc2hhcGUpJiZBcnJheS5pc0FycmF5KHQuc3RyaWRlKSYmIm51bWJlciI9PXR5cGVvZiB0Lm9mZnNldCYmdC5zaGFwZS5sZW5ndGg9PT10LnN0cmlkZS5sZW5ndGgmJihBcnJheS5pc0FycmF5KHQuZGF0YSl8fFoodC5kYXRhKSl9ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxlOysrbylmb3IodmFyIHM9dFtvXSxsPTA7bDxyOysrbClmb3IodmFyIGM9c1tsXSx1PTA7dTxuOysrdSlpW2ErK109Y1t1XX1mdW5jdGlvbiB1KHQpe3JldHVybiAwfEtbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpdFtyXT1lW3JdfWZ1bmN0aW9uIGYodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTAsbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7YzxuOysrYyl0W3MrK109ZVtpKmwrYSpjK29dfWZ1bmN0aW9uIHAodCxlLHIsbil7ZnVuY3Rpb24gaShlKXt0aGlzLmlkPWMrKyx0aGlzLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHRoaXMudHlwZT1lLHRoaXMudXNhZ2U9MzUwNDQsdGhpcy5ieXRlTGVuZ3RoPTAsdGhpcy5kaW1lbnNpb249MSx0aGlzLmR0eXBlPTUxMjEsdGhpcy5wZXJzaXN0ZW50RGF0YT1udWxsLHIucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIGEoZSxyLG4pe2UuYnl0ZUxlbmd0aD1yLmJ5dGVMZW5ndGgsdC5idWZmZXJEYXRhKGUudHlwZSxyLG4pfWZ1bmN0aW9uIG8odCxlLHIsbixpLG8pe2lmKHQudXNhZ2U9cixBcnJheS5pc0FycmF5KGUpKXtpZih0LmR0eXBlPW58fDUxMjYsMDxlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKXtpPWV0KGUpO2Zvcih2YXIgcz1uPTE7czxpLmxlbmd0aDsrK3Mpbio9aVtzXTt0LmRpbWVuc2lvbj1uLGEodCxlPXR0KGUsaSx0LmR0eXBlKSxyKSxvP3QucGVyc2lzdGVudERhdGE9ZTpZLmZyZWVUeXBlKGUpfWVsc2UibnVtYmVyIj09dHlwZW9mIGVbMF0/KHQuZGltZW5zaW9uPWksaChpPVkuYWxsb2NUeXBlKHQuZHR5cGUsZS5sZW5ndGgpLGUpLGEodCxpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1pOlkuZnJlZVR5cGUoaSkpOlooZVswXSkmJih0LmRpbWVuc2lvbj1lWzBdLmxlbmd0aCx0LmR0eXBlPW58fHUoZVswXSl8fDUxMjYsYSh0LGU9dHQoZSxbZS5sZW5ndGgsZVswXS5sZW5ndGhdLHQuZHR5cGUpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1lOlkuZnJlZVR5cGUoZSkpfWVsc2UgaWYoWihlKSl0LmR0eXBlPW58fHUoZSksdC5kaW1lbnNpb249aSxhKHQsZSxyKSxvJiYodC5wZXJzaXN0ZW50RGF0YT1uZXcgVWludDhBcnJheShuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpKTtlbHNlIGlmKGwoZSkpe2k9ZS5zaGFwZTt2YXIgYz1lLnN0cmlkZSxwPShzPWUub2Zmc2V0LDApLGQ9MCxnPTAsbT0wOzE9PT1pLmxlbmd0aD8ocD1pWzBdLGQ9MSxnPWNbMF0sbT0wKToyPT09aS5sZW5ndGgmJihwPWlbMF0sZD1pWzFdLGc9Y1swXSxtPWNbMV0pLHQuZHR5cGU9bnx8dShlLmRhdGEpfHw1MTI2LHQuZGltZW5zaW9uPWQsZihpPVkuYWxsb2NUeXBlKHQuZHR5cGUscCpkKSxlLmRhdGEscCxkLGcsbSxzKSxhKHQsaSxyKSxvP3QucGVyc2lzdGVudERhdGE9aTpZLmZyZWVUeXBlKGkpfWVsc2UgZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYodC5kdHlwZT01MTIxLHQuZGltZW5zaW9uPWksYSh0LGUsciksbyYmKHQucGVyc2lzdGVudERhdGE9bmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQ4QXJyYXkoZSkpKSl9ZnVuY3Rpb24gcyhyKXtlLmJ1ZmZlckNvdW50LS0sbihyKSx0LmRlbGV0ZUJ1ZmZlcihyLmJ1ZmZlciksci5idWZmZXI9bnVsbCxkZWxldGUgcFtyLmlkXX12YXIgYz0wLHA9e307aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3QuYmluZEJ1ZmZlcih0aGlzLnR5cGUsdGhpcy5idWZmZXIpfSxpLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cyh0aGlzKX07dmFyIGQ9W107cmV0dXJuIHIucHJvZmlsZSYmKGUuZ2V0VG90YWxCdWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXMocCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9cFtlXS5zdGF0cy5zaXplfSkpLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKG4sYSxjLGQpe2Z1bmN0aW9uIGcoZSl7dmFyIG49MzUwNDQsaT1udWxsLGE9MCxzPTAsYz0xO3JldHVybiBBcnJheS5pc0FycmF5KGUpfHxaKGUpfHxsKGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/aT1lOiJudW1iZXIiPT10eXBlb2YgZT9hPTB8ZTplJiYoImRhdGEiaW4gZSYmKGk9ZS5kYXRhKSwidXNhZ2UiaW4gZSYmKG49JFtlLnVzYWdlXSksInR5cGUiaW4gZSYmKHM9UVtlLnR5cGVdKSwiZGltZW5zaW9uImluIGUmJihjPTB8ZS5kaW1lbnNpb24pLCJsZW5ndGgiaW4gZSYmKGE9MHxlLmxlbmd0aCkpLG0uYmluZCgpLGk/byhtLGksbixzLGMsZCk6KGEmJnQuYnVmZmVyRGF0YShtLnR5cGUsYSxuKSxtLmR0eXBlPXN8fDUxMjEsbS51c2FnZT1uLG0uZGltZW5zaW9uPWMsbS5ieXRlTGVuZ3RoPWEpLHIucHJvZmlsZSYmKG0uc3RhdHMuc2l6ZT1tLmJ5dGVMZW5ndGgqcnRbbS5kdHlwZV0pLGd9ZS5idWZmZXJDb3VudCsrO3ZhciBtPW5ldyBpKGEpO3JldHVybiBwW20uaWRdPW0sY3x8ZyhuKSxnLl9yZWdsVHlwZT0iYnVmZmVyIixnLl9idWZmZXI9bSxnLnN1YmRhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpPTB8KHJ8fDApO2lmKG0uYmluZCgpLFooZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil0LmJ1ZmZlclN1YkRhdGEobS50eXBlLGksZSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtpZigwPGUubGVuZ3RoKWlmKCJudW1iZXIiPT10eXBlb2YgZVswXSl7dmFyIGE9WS5hbGxvY1R5cGUobS5kdHlwZSxlLmxlbmd0aCk7aChhLGUpLHQuYnVmZmVyU3ViRGF0YShtLnR5cGUsaSxhKSxZLmZyZWVUeXBlKGEpfWVsc2UoQXJyYXkuaXNBcnJheShlWzBdKXx8WihlWzBdKSkmJihuPWV0KGUpLGE9dHQoZSxuLG0uZHR5cGUpLHQuYnVmZmVyU3ViRGF0YShtLnR5cGUsaSxhKSxZLmZyZWVUeXBlKGEpKX1lbHNlIGlmKGwoZSkpe249ZS5zaGFwZTt2YXIgbz1lLnN0cmlkZSxzPWE9MCxjPTAscD0wOzE9PT1uLmxlbmd0aD8oYT1uWzBdLHM9MSxjPW9bMF0scD0wKToyPT09bi5sZW5ndGgmJihhPW5bMF0scz1uWzFdLGM9b1swXSxwPW9bMV0pLG49QXJyYXkuaXNBcnJheShlLmRhdGEpP20uZHR5cGU6dShlLmRhdGEpLGYobj1ZLmFsbG9jVHlwZShuLGEqcyksZS5kYXRhLGEscyxjLHAsZS5vZmZzZXQpLHQuYnVmZmVyU3ViRGF0YShtLnR5cGUsaSxuKSxZLmZyZWVUeXBlKG4pfXJldHVybiBnfSxyLnByb2ZpbGUmJihnLnN0YXRzPW0uc3RhdHMpLGcuZGVzdHJveT1mdW5jdGlvbigpe3MobSl9LGd9LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0LGUpe3ZhciByPWQucG9wKCk7cmV0dXJuIHJ8fChyPW5ldyBpKHQpKSxyLmJpbmQoKSxvKHIsZSwzNTA0MCwwLDEsITEpLHJ9LGRlc3Ryb3lTdHJlYW06ZnVuY3Rpb24odCl7ZC5wdXNoKHQpfSxjbGVhcjpmdW5jdGlvbigpe1gocCkuZm9yRWFjaChzKSxkLmZvckVhY2gocyl9LGdldEJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fYnVmZmVyIGluc3RhbmNlb2YgaT90Ll9idWZmZXI6bnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe1gocCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5idWZmZXI9dC5jcmVhdGVCdWZmZXIoKSx0LmJpbmRCdWZmZXIoZS50eXBlLGUuYnVmZmVyKSx0LmJ1ZmZlckRhdGEoZS50eXBlLGUucGVyc2lzdGVudERhdGF8fGUuYnl0ZUxlbmd0aCxlLnVzYWdlKX0pKX0sX2luaXRCdWZmZXI6b319ZnVuY3Rpb24gZCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3RoaXMuaWQ9YysrLHNbdGhpcy5pZF09dGhpcyx0aGlzLmJ1ZmZlcj10LHRoaXMucHJpbVR5cGU9NCx0aGlzLnR5cGU9dGhpcy52ZXJ0Q291bnQ9MH1mdW5jdGlvbiBhKG4saSxhLG8scyxjLHUpe3ZhciBoO2lmKG4uYnVmZmVyLmJpbmQoKSxpPygoaD11KXx8WihpKSYmKCFsKGkpfHxaKGkuZGF0YSkpfHwoaD1lLm9lc19lbGVtZW50X2luZGV4X3VpbnQ/NTEyNTo1MTIzKSxyLl9pbml0QnVmZmVyKG4uYnVmZmVyLGksYSxoLDMpKToodC5idWZmZXJEYXRhKDM0OTYzLGMsYSksbi5idWZmZXIuZHR5cGU9aHx8NTEyMSxuLmJ1ZmZlci51c2FnZT1hLG4uYnVmZmVyLmRpbWVuc2lvbj0zLG4uYnVmZmVyLmJ5dGVMZW5ndGg9YyksaD11LCF1KXtzd2l0Y2gobi5idWZmZXIuZHR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjA6aD01MTIxO2JyZWFrO2Nhc2UgNTEyMzpjYXNlIDUxMjI6aD01MTIzO2JyZWFrO2Nhc2UgNTEyNTpjYXNlIDUxMjQ6aD01MTI1fW4uYnVmZmVyLmR0eXBlPWh9bi50eXBlPWgsMD4oaT1zKSYmKGk9bi5idWZmZXIuYnl0ZUxlbmd0aCw1MTIzPT09aD9pPj49MTo1MTI1PT09aCYmKGk+Pj0yKSksbi52ZXJ0Q291bnQ9aSxpPW8sMD5vJiYoaT00LDE9PT0obz1uLmJ1ZmZlci5kaW1lbnNpb24pJiYoaT0wKSwyPT09byYmKGk9MSksMz09PW8mJihpPTQpKSxuLnByaW1UeXBlPWl9ZnVuY3Rpb24gbyh0KXtuLmVsZW1lbnRzQ291bnQtLSxkZWxldGUgc1t0LmlkXSx0LmJ1ZmZlci5kZXN0cm95KCksdC5idWZmZXI9bnVsbH12YXIgcz17fSxjPTAsdT17dWludDg6NTEyMSx1aW50MTY6NTEyM307ZS5vZXNfZWxlbWVudF9pbmRleF91aW50JiYodS51aW50MzI9NTEyNSksaS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuYnVmZmVyLmJpbmQoKX07dmFyIGg9W107cmV0dXJue2NyZWF0ZTpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHModCl7aWYodClpZigibnVtYmVyIj09dHlwZW9mIHQpYyh0KSxoLnByaW1UeXBlPTQsaC52ZXJ0Q291bnQ9MHx0LGgudHlwZT01MTIxO2Vsc2V7dmFyIGU9bnVsbCxyPTM1MDQ0LG49LTEsaT0tMSxvPTAsZj0wO0FycmF5LmlzQXJyYXkodCl8fFoodCl8fGwodCk/ZT10OigiZGF0YSJpbiB0JiYoZT10LmRhdGEpLCJ1c2FnZSJpbiB0JiYocj0kW3QudXNhZ2VdKSwicHJpbWl0aXZlImluIHQmJihuPW50W3QucHJpbWl0aXZlXSksImNvdW50ImluIHQmJihpPTB8dC5jb3VudCksInR5cGUiaW4gdCYmKGY9dVt0LnR5cGVdKSwibGVuZ3RoImluIHQ/bz0wfHQubGVuZ3RoOihvPWksNTEyMz09PWZ8fDUxMjI9PT1mP28qPTI6NTEyNSE9PWYmJjUxMjQhPT1mfHwobyo9NCkpKSxhKGgsZSxyLG4saSxvLGYpfWVsc2UgYygpLGgucHJpbVR5cGU9NCxoLnZlcnRDb3VudD0wLGgudHlwZT01MTIxO3JldHVybiBzfXZhciBjPXIuY3JlYXRlKG51bGwsMzQ5NjMsITApLGg9bmV3IGkoYy5fYnVmZmVyKTtyZXR1cm4gbi5lbGVtZW50c0NvdW50Kysscyh0KSxzLl9yZWdsVHlwZT0iZWxlbWVudHMiLHMuX2VsZW1lbnRzPWgscy5zdWJkYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMuc3ViZGF0YSh0LGUpLHN9LHMuZGVzdHJveT1mdW5jdGlvbigpe28oaCl9LHN9LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0KXt2YXIgZT1oLnBvcCgpO3JldHVybiBlfHwoZT1uZXcgaShyLmNyZWF0ZShudWxsLDM0OTYzLCEwLCExKS5fYnVmZmVyKSksYShlLHQsMzUwNDAsLTEsLTEsMCwwKSxlfSxkZXN0cm95U3RyZWFtOmZ1bmN0aW9uKHQpe2gucHVzaCh0KX0sZ2V0RWxlbWVudHM6ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX2VsZW1lbnRzIGluc3RhbmNlb2YgaT90Ll9lbGVtZW50czpudWxsfSxjbGVhcjpmdW5jdGlvbigpe1gocykuZm9yRWFjaChvKX19fWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPVkuYWxsb2NUeXBlKDUxMjMsdC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcilpZihpc05hTih0W3JdKSllW3JdPTY1NTM1O2Vsc2UgaWYoMS8wPT09dFtyXSllW3JdPTMxNzQ0O2Vsc2UgaWYoLTEvMD09PXRbcl0pZVtyXT02NDUxMjtlbHNle2l0WzBdPXRbcl07dmFyIG49KGE9YXRbMF0pPj4+MzE8PDE1LGk9KGE8PDE+Pj4yNCktMTI3LGE9YT4+MTMmMTAyMztlW3JdPS0yND5pP246LTE0Pmk/bisoYSsxMDI0Pj4tMTQtaSk6MTU8aT9uKzMxNzQ0Om4rKGkrMTU8PDEwKSthfXJldHVybiBlfWZ1bmN0aW9uIG0odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFoodCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4iW29iamVjdCAiK3QrIl0ifWZ1bmN0aW9uIHkodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJigwPT09dC5sZW5ndGh8fCJudW1iZXIiPT10eXBlb2YgdFswXSl9ZnVuY3Rpb24geCh0KXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGh8fCFtKHRbMF0pKX1mdW5jdGlvbiBiKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gXyh0KXtpZighdClyZXR1cm4hMTt2YXIgZT1iKHQpO3JldHVybiAwPD1ndC5pbmRleE9mKGUpfHwoeSh0KXx8eCh0KXx8bCh0KSl9ZnVuY3Rpb24gdyh0LGUpezM2MTkzPT09dC50eXBlPyh0LmRhdGE9ZyhlKSxZLmZyZWVUeXBlKGUpKTp0LmRhdGE9ZX1mdW5jdGlvbiBUKHQsZSxyLG4saSxhKXtpZih0PSJ1bmRlZmluZWQiIT10eXBlb2YgdnRbdF0/dnRbdF06bHRbdF0qbXRbZV0sYSYmKHQqPTYpLGkpe2ZvcihuPTA7MTw9cjspbis9dCpyKnIsci89MjtyZXR1cm4gbn1yZXR1cm4gdCpyKm59ZnVuY3Rpb24gayh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKCl7dGhpcy5mb3JtYXQ9dGhpcy5pbnRlcm5hbGZvcm1hdD02NDA4LHRoaXMudHlwZT01MTIxLHRoaXMuZmxpcFk9dGhpcy5wcmVtdWx0aXBseUFscGhhPXRoaXMuY29tcHJlc3NlZD0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xLHRoaXMuY29sb3JTcGFjZT0zNzQ0NCx0aGlzLmNoYW5uZWxzPXRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MH1mdW5jdGlvbiBjKHQsZSl7dC5pbnRlcm5hbGZvcm1hdD1lLmludGVybmFsZm9ybWF0LHQuZm9ybWF0PWUuZm9ybWF0LHQudHlwZT1lLnR5cGUsdC5jb21wcmVzc2VkPWUuY29tcHJlc3NlZCx0LnByZW11bHRpcGx5QWxwaGE9ZS5wcmVtdWx0aXBseUFscGhhLHQuZmxpcFk9ZS5mbGlwWSx0LnVucGFja0FsaWdubWVudD1lLnVucGFja0FsaWdubWVudCx0LmNvbG9yU3BhY2U9ZS5jb2xvclNwYWNlLHQud2lkdGg9ZS53aWR0aCx0LmhlaWdodD1lLmhlaWdodCx0LmNoYW5uZWxzPWUuY2hhbm5lbHN9ZnVuY3Rpb24gdSh0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZSYmZSl7InByZW11bHRpcGx5QWxwaGEiaW4gZSYmKHQucHJlbXVsdGlwbHlBbHBoYT1lLnByZW11bHRpcGx5QWxwaGEpLCJmbGlwWSJpbiBlJiYodC5mbGlwWT1lLmZsaXBZKSwiYWxpZ25tZW50ImluIGUmJih0LnVucGFja0FsaWdubWVudD1lLmFsaWdubWVudCksImNvbG9yU3BhY2UiaW4gZSYmKHQuY29sb3JTcGFjZT1xW2UuY29sb3JTcGFjZV0pLCJ0eXBlImluIGUmJih0LnR5cGU9SFtlLnR5cGVdKTt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT10LmNoYW5uZWxzLGE9ITE7InNoYXBlImluIGU/KHI9ZS5zaGFwZVswXSxuPWUuc2hhcGVbMV0sMz09PWUuc2hhcGUubGVuZ3RoJiYoaT1lLnNoYXBlWzJdLGE9ITApKTooInJhZGl1cyJpbiBlJiYocj1uPWUucmFkaXVzKSwid2lkdGgiaW4gZSYmKHI9ZS53aWR0aCksImhlaWdodCJpbiBlJiYobj1lLmhlaWdodCksImNoYW5uZWxzImluIGUmJihpPWUuY2hhbm5lbHMsYT0hMCkpLHQud2lkdGg9MHxyLHQuaGVpZ2h0PTB8bix0LmNoYW5uZWxzPTB8aSxyPSExLCJmb3JtYXQiaW4gZSYmKHI9ZS5mb3JtYXQsbj10LmludGVybmFsZm9ybWF0PUdbcl0sdC5mb3JtYXQ9YXRbbl0sciBpbiBIJiYhKCJ0eXBlImluIGUpJiYodC50eXBlPUhbcl0pLHIgaW4gVyYmKHQuY29tcHJlc3NlZD0hMCkscj0hMCksIWEmJnI/dC5jaGFubmVscz1sdFt0LmZvcm1hdF06YSYmIXImJnQuY2hhbm5lbHMhPT1zdFt0LmZvcm1hdF0mJih0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PXN0W3QuY2hhbm5lbHNdKX19ZnVuY3Rpb24gaChlKXt0LnBpeGVsU3RvcmVpKDM3NDQwLGUuZmxpcFkpLHQucGl4ZWxTdG9yZWkoMzc0NDEsZS5wcmVtdWx0aXBseUFscGhhKSx0LnBpeGVsU3RvcmVpKDM3NDQzLGUuY29sb3JTcGFjZSksdC5waXhlbFN0b3JlaSgzMzE3LGUudW5wYWNrQWxpZ25tZW50KX1mdW5jdGlvbiBmKCl7cy5jYWxsKHRoaXMpLHRoaXMueU9mZnNldD10aGlzLnhPZmZzZXQ9MCx0aGlzLmRhdGE9bnVsbCx0aGlzLm5lZWRzRnJlZT0hMSx0aGlzLmVsZW1lbnQ9bnVsbCx0aGlzLm5lZWRzQ29weT0hMX1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9bnVsbDtpZihfKGUpP3I9ZTplJiYodSh0LGUpLCJ4ImluIGUmJih0LnhPZmZzZXQ9MHxlLngpLCJ5ImluIGUmJih0LnlPZmZzZXQ9MHxlLnkpLF8oZS5kYXRhKSYmKHI9ZS5kYXRhKSksZS5jb3B5KXt2YXIgbj1pLnZpZXdwb3J0V2lkdGgsYT1pLnZpZXdwb3J0SGVpZ2h0O3Qud2lkdGg9dC53aWR0aHx8bi10LnhPZmZzZXQsdC5oZWlnaHQ9dC5oZWlnaHR8fGEtdC55T2Zmc2V0LHQubmVlZHNDb3B5PSEwfWVsc2UgaWYocil7aWYoWihyKSl0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsdC5kYXRhPXIsInR5cGUiaW4gZXx8NTEyMSE9PXQudHlwZXx8KHQudHlwZT0wfEtbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpXSk7ZWxzZSBpZih5KHIpKXtzd2l0Y2godC5jaGFubmVscz10LmNoYW5uZWxzfHw0LGE9KG49cikubGVuZ3RoLHQudHlwZSl7Y2FzZSA1MTIxOmNhc2UgNTEyMzpjYXNlIDUxMjU6Y2FzZSA1MTI2OihhPVkuYWxsb2NUeXBlKHQudHlwZSxhKSkuc2V0KG4pLHQuZGF0YT1hO2JyZWFrO2Nhc2UgMzYxOTM6dC5kYXRhPWcobil9dC5hbGlnbm1lbnQ9MSx0Lm5lZWRzRnJlZT0hMH1lbHNlIGlmKGwocikpe249ci5kYXRhLEFycmF5LmlzQXJyYXkobil8fDUxMjEhPT10LnR5cGV8fCh0LnR5cGU9MHxLW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKV0pO2E9ci5zaGFwZTt2YXIgbyxzLGMsaCxmPXIuc3RyaWRlOzM9PT1hLmxlbmd0aD8oYz1hWzJdLGg9ZlsyXSk6aD1jPTEsbz1hWzBdLHM9YVsxXSxhPWZbMF0sZj1mWzFdLHQuYWxpZ25tZW50PTEsdC53aWR0aD1vLHQuaGVpZ2h0PXMsdC5jaGFubmVscz1jLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9c3RbY10sdC5uZWVkc0ZyZWU9ITAsbz1oLHI9ci5vZmZzZXQsYz10LndpZHRoLGg9dC5oZWlnaHQscz10LmNoYW5uZWxzO2Zvcih2YXIgcD1ZLmFsbG9jVHlwZSgzNjE5Mz09PXQudHlwZT81MTI2OnQudHlwZSxjKmgqcyksZD0wLHY9MDt2PGg7Kyt2KWZvcih2YXIgVD0wO1Q8YzsrK1QpZm9yKHZhciBrPTA7azxzOysraylwW2QrK109blthKlQrZip2K28qaytyXTt3KHQscCl9ZWxzZSBpZihiKHIpPT09Y3R8fGIocik9PT11dHx8YihyKT09PWh0KWIocik9PT1jdHx8YihyKT09PXV0P3QuZWxlbWVudD1yOnQuZWxlbWVudD1yLmNhbnZhcyx0LndpZHRoPXQuZWxlbWVudC53aWR0aCx0LmhlaWdodD10LmVsZW1lbnQuaGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1mdCl0LmVsZW1lbnQ9cix0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PXB0KXQuZWxlbWVudD1yLHQud2lkdGg9ci5uYXR1cmFsV2lkdGgsdC5oZWlnaHQ9ci5uYXR1cmFsSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1kdCl0LmVsZW1lbnQ9cix0LndpZHRoPXIudmlkZW9XaWR0aCx0LmhlaWdodD1yLnZpZGVvSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKHgocikpe2ZvcihuPXQud2lkdGh8fHJbMF0ubGVuZ3RoLGE9dC5oZWlnaHR8fHIubGVuZ3RoLGY9dC5jaGFubmVscyxmPW0oclswXVswXSk/Znx8clswXVswXS5sZW5ndGg6Znx8MSxvPUouc2hhcGUociksYz0xLGg9MDtoPG8ubGVuZ3RoOysraCljKj1vW2hdO2M9WS5hbGxvY1R5cGUoMzYxOTM9PT10LnR5cGU/NTEyNjp0LnR5cGUsYyksSi5mbGF0dGVuKHIsbywiIixjKSx3KHQsYyksdC5hbGlnbm1lbnQ9MSx0LndpZHRoPW4sdC5oZWlnaHQ9YSx0LmNoYW5uZWxzPWYsdC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1zdFtmXSx0Lm5lZWRzRnJlZT0hMH19ZWxzZSB0LndpZHRoPXQud2lkdGh8fDEsdC5oZWlnaHQ9dC5oZWlnaHR8fDEsdC5jaGFubmVscz10LmNoYW5uZWxzfHw0fWZ1bmN0aW9uIGQoZSxyLGksYSxvKXt2YXIgcz1lLmVsZW1lbnQsbD1lLmRhdGEsYz1lLmludGVybmFsZm9ybWF0LHU9ZS5mb3JtYXQsZj1lLnR5cGUscD1lLndpZHRoLGQ9ZS5oZWlnaHQ7aChlKSxzP3QudGV4U3ViSW1hZ2UyRChyLG8saSxhLHUsZixzKTplLmNvbXByZXNzZWQ/dC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChyLG8saSxhLGMscCxkLGwpOmUubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4U3ViSW1hZ2UyRChyLG8saSxhLGUueE9mZnNldCxlLnlPZmZzZXQscCxkKSk6dC50ZXhTdWJJbWFnZTJEKHIsbyxpLGEscCxkLHUsZixsKX1mdW5jdGlvbiB2KCl7cmV0dXJuIGd0LnBvcCgpfHxuZXcgZn1mdW5jdGlvbiBrKHQpe3QubmVlZHNGcmVlJiZZLmZyZWVUeXBlKHQuZGF0YSksZi5jYWxsKHQpLGd0LnB1c2godCl9ZnVuY3Rpb24gTSgpe3MuY2FsbCh0aGlzKSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTIsdGhpcy5taXBtYXNrPTAsdGhpcy5pbWFnZXM9QXJyYXkoMTYpfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPXQuaW1hZ2VzWzBdPXYoKTt0Lm1pcG1hc2s9MSxuLndpZHRoPXQud2lkdGg9ZSxuLmhlaWdodD10LmhlaWdodD1yLG4uY2hhbm5lbHM9dC5jaGFubmVscz00fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1udWxsO2lmKF8oZSkpYyhyPXQuaW1hZ2VzWzBdPXYoKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7ZWxzZSBpZih1KHQsZSksQXJyYXkuaXNBcnJheShlLm1pcG1hcCkpZm9yKHZhciBuPWUubWlwbWFwLGk9MDtpPG4ubGVuZ3RoOysraSljKHI9dC5pbWFnZXNbaV09digpLHQpLHIud2lkdGg+Pj1pLHIuaGVpZ2h0Pj49aSxwKHIsbltpXSksdC5taXBtYXNrfD0xPDxpO2Vsc2UgYyhyPXQuaW1hZ2VzWzBdPXYoKSx0KSxwKHIsZSksdC5taXBtYXNrPTE7Yyh0LHQuaW1hZ2VzWzBdKX1mdW5jdGlvbiBFKGUscil7Zm9yKHZhciBpPWUuaW1hZ2VzLGE9MDthPGkubGVuZ3RoJiZpW2FdOysrYSl7dmFyIG89aVthXSxzPXIsbD1hLGM9by5lbGVtZW50LHU9by5kYXRhLGY9by5pbnRlcm5hbGZvcm1hdCxwPW8uZm9ybWF0LGQ9by50eXBlLGc9by53aWR0aCxtPW8uaGVpZ2h0O2gobyksYz90LnRleEltYWdlMkQocyxsLHAscCxkLGMpOm8uY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhJbWFnZTJEKHMsbCxmLGcsbSwwLHUpOm8ubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4SW1hZ2UyRChzLGwscCxvLnhPZmZzZXQsby55T2Zmc2V0LGcsbSwwKSk6dC50ZXhJbWFnZTJEKHMsbCxwLGcsbSwwLHAsZCx1fHxudWxsKX19ZnVuY3Rpb24gQygpe3ZhciB0PW10LnBvcCgpfHxuZXcgTTtzLmNhbGwodCk7Zm9yKHZhciBlPXQubWlwbWFzaz0wOzE2PmU7KytlKXQuaW1hZ2VzW2VdPW51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gTCh0KXtmb3IodmFyIGU9dC5pbWFnZXMscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0mJmsoZVtyXSksZVtyXT1udWxsO210LnB1c2godCl9ZnVuY3Rpb24gUCgpe3RoaXMubWFnRmlsdGVyPXRoaXMubWluRmlsdGVyPTk3MjgsdGhpcy53cmFwVD10aGlzLndyYXBTPTMzMDcxLHRoaXMuYW5pc290cm9waWM9MSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PTQzNTJ9ZnVuY3Rpb24gSSh0LGUpeyJtaW4iaW4gZSYmKHQubWluRmlsdGVyPVZbZS5taW5dLDA8PW90LmluZGV4T2YodC5taW5GaWx0ZXIpJiYhKCJmYWNlcyJpbiBlKSYmKHQuZ2VuTWlwbWFwcz0hMCkpLCJtYWciaW4gZSYmKHQubWFnRmlsdGVyPWpbZS5tYWddKTt2YXIgcj10LndyYXBTLG49dC53cmFwVDtpZigid3JhcCJpbiBlKXt2YXIgaT1lLndyYXA7InN0cmluZyI9PXR5cGVvZiBpP3I9bj1OW2ldOkFycmF5LmlzQXJyYXkoaSkmJihyPU5baVswXV0sbj1OW2lbMV1dKX1lbHNlIndyYXBTImluIGUmJihyPU5bZS53cmFwU10pLCJ3cmFwVCJpbiBlJiYobj1OW2Uud3JhcFRdKTtpZih0LndyYXBTPXIsdC53cmFwVD1uLCJhbmlzb3Ryb3BpYyJpbiBlJiYodC5hbmlzb3Ryb3BpYz1lLmFuaXNvdHJvcGljKSwibWlwbWFwImluIGUpe3N3aXRjaChyPSExLHR5cGVvZiBlLm1pcG1hcCl7Y2FzZSJzdHJpbmciOnQubWlwbWFwSGludD1CW2UubWlwbWFwXSxyPXQuZ2VuTWlwbWFwcz0hMDticmVhaztjYXNlImJvb2xlYW4iOnI9dC5nZW5NaXBtYXBzPWUubWlwbWFwO2JyZWFrO2Nhc2Uib2JqZWN0Ijp0Lmdlbk1pcG1hcHM9ITEscj0hMH0hcnx8Im1pbiJpbiBlfHwodC5taW5GaWx0ZXI9OTk4NCl9fWZ1bmN0aW9uIHoocixuKXt0LnRleFBhcmFtZXRlcmkobiwxMDI0MSxyLm1pbkZpbHRlciksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDAsci5tYWdGaWx0ZXIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQyLHIud3JhcFMpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQzLHIud3JhcFQpLGUuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJiZ0LnRleFBhcmFtZXRlcmkobiwzNDA0NixyLmFuaXNvdHJvcGljKSxyLmdlbk1pcG1hcHMmJih0LmhpbnQoMzMxNzAsci5taXBtYXBIaW50KSx0LmdlbmVyYXRlTWlwbWFwKG4pKX1mdW5jdGlvbiBPKGUpe3MuY2FsbCh0aGlzKSx0aGlzLm1pcG1hc2s9MCx0aGlzLmludGVybmFsZm9ybWF0PTY0MDgsdGhpcy5pZD12dCsrLHRoaXMucmVmQ291bnQ9MSx0aGlzLnRhcmdldD1lLHRoaXMudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0aGlzLnVuaXQ9LTEsdGhpcy5iaW5kQ291bnQ9MCx0aGlzLnRleEluZm89bmV3IFAsby5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gRChlKXt0LmFjdGl2ZVRleHR1cmUoMzM5ODQpLHQuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKX1mdW5jdGlvbiBSKCl7dmFyIGU9YnRbMF07ZT90LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSk6dC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpfWZ1bmN0aW9uIEYoZSl7dmFyIHI9ZS50ZXh0dXJlLG49ZS51bml0LGk9ZS50YXJnZXQ7MDw9biYmKHQuYWN0aXZlVGV4dHVyZSgzMzk4NCtuKSx0LmJpbmRUZXh0dXJlKGksbnVsbCksYnRbbl09bnVsbCksdC5kZWxldGVUZXh0dXJlKHIpLGUudGV4dHVyZT1udWxsLGUucGFyYW1zPW51bGwsZS5waXhlbHM9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIHl0W2UuaWRdLGEudGV4dHVyZUNvdW50LS19dmFyIEI9eyJkb24ndCBjYXJlIjo0MzUyLCJkb250IGNhcmUiOjQzNTIsbmljZTo0MzU0LGZhc3Q6NDM1M30sTj17cmVwZWF0OjEwNDk3LGNsYW1wOjMzMDcxLG1pcnJvcjozMzY0OH0saj17bmVhcmVzdDo5NzI4LGxpbmVhcjo5NzI5fSxWPVUoe21pcG1hcDo5OTg3LCJuZWFyZXN0IG1pcG1hcCBuZWFyZXN0Ijo5OTg0LCJsaW5lYXIgbWlwbWFwIG5lYXJlc3QiOjk5ODUsIm5lYXJlc3QgbWlwbWFwIGxpbmVhciI6OTk4NiwibGluZWFyIG1pcG1hcCBsaW5lYXIiOjk5ODd9LGopLHE9e25vbmU6MCxicm93c2VyOjM3NDQ0fSxIPXt1aW50ODo1MTIxLHJnYmE0OjMyODE5LHJnYjU2NTozMzYzNSwicmdiNSBhMSI6MzI4MjB9LEc9e2FscGhhOjY0MDYsbHVtaW5hbmNlOjY0MDksImx1bWluYW5jZSBhbHBoYSI6NjQxMCxyZ2I6NjQwNyxyZ2JhOjY0MDgscmdiYTQ6MzI4NTQsInJnYjUgYTEiOjMyODU1LHJnYjU2NTozNjE5NH0sVz17fTtlLmV4dF9zcmdiJiYoRy5zcmdiPTM1OTA0LEcuc3JnYmE9MzU5MDYpLGUub2VzX3RleHR1cmVfZmxvYXQmJihILmZsb2F0MzI9SC5mbG9hdD01MTI2KSxlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQmJihILmZsb2F0MTY9SFsiaGFsZiBmbG9hdCJdPTM2MTkzKSxlLndlYmdsX2RlcHRoX3RleHR1cmUmJihVKEcse2RlcHRoOjY0MDIsImRlcHRoIHN0ZW5jaWwiOjM0MDQxfSksVShILHt1aW50MTY6NTEyMyx1aW50MzI6NTEyNSwiZGVwdGggc3RlbmNpbCI6MzQwNDJ9KSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyYmVShXLHsicmdiIHMzdGMgZHh0MSI6MzM3NzYsInJnYmEgczN0YyBkeHQxIjozMzc3NywicmdiYSBzM3RjIGR4dDMiOjMzNzc4LCJyZ2JhIHMzdGMgZHh0NSI6MzM3Nzl9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMmJlUoVyx7InJnYiBhdGMiOjM1OTg2LCJyZ2JhIGF0YyBleHBsaWNpdCBhbHBoYSI6MzU5ODcsInJnYmEgYXRjIGludGVycG9sYXRlZCBhbHBoYSI6MzQ3OTh9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyYmVShXLHsicmdiIHB2cnRjIDRicHB2MSI6MzU4NDAsInJnYiBwdnJ0YyAyYnBwdjEiOjM1ODQxLCJyZ2JhIHB2cnRjIDRicHB2MSI6MzU4NDIsInJnYmEgcHZydGMgMmJwcHYxIjozNTg0M30pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEmJihXWyJyZ2IgZXRjMSJdPTM2MTk2KTt2YXIgUT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmdldFBhcmFtZXRlcigzNDQ2NykpO09iamVjdC5rZXlzKFcpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPVdbdF07MDw9US5pbmRleE9mKGUpJiYoR1t0XT1lKX0pKTt2YXIgJD1PYmplY3Qua2V5cyhHKTtyLnRleHR1cmVGb3JtYXRzPSQ7dmFyIHR0PVtdO09iamVjdC5rZXlzKEcpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3R0W0dbdF1dPXR9KSk7dmFyIGV0PVtdO09iamVjdC5rZXlzKEgpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2V0W0hbdF1dPXR9KSk7dmFyIHJ0PVtdO09iamVjdC5rZXlzKGopLmZvckVhY2goKGZ1bmN0aW9uKHQpe3J0W2pbdF1dPXR9KSk7dmFyIG50PVtdO09iamVjdC5rZXlzKFYpLmZvckVhY2goKGZ1bmN0aW9uKHQpe250W1ZbdF1dPXR9KSk7dmFyIGl0PVtdO09iamVjdC5rZXlzKE4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe2l0W05bdF1dPXR9KSk7dmFyIGF0PSQucmVkdWNlKChmdW5jdGlvbih0LHIpe3ZhciBuPUdbcl07cmV0dXJuIDY0MDk9PT1ufHw2NDA2PT09bnx8NjQwOT09PW58fDY0MTA9PT1ufHw2NDAyPT09bnx8MzQwNDE9PT1ufHxlLmV4dF9zcmdiJiYoMzU5MDQ9PT1ufHwzNTkwNj09PW4pP3Rbbl09bjozMjg1NT09PW58fDA8PXIuaW5kZXhPZigicmdiYSIpP3Rbbl09NjQwODp0W25dPTY0MDcsdH0pLHt9KSxndD1bXSxtdD1bXSx2dD0wLHl0PXt9LHh0PXIubWF4VGV4dHVyZVVuaXRzLGJ0PUFycmF5KHh0KS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KSk7cmV0dXJuIFUoTy5wcm90b3R5cGUse2JpbmQ6ZnVuY3Rpb24oKXt0aGlzLmJpbmRDb3VudCs9MTt2YXIgZT10aGlzLnVuaXQ7aWYoMD5lKXtmb3IodmFyIHI9MDtyPHh0Oysrcil7dmFyIG49YnRbcl07aWYobil7aWYoMDxuLmJpbmRDb3VudCljb250aW51ZTtuLnVuaXQ9LTF9YnRbcl09dGhpcyxlPXI7YnJlYWt9by5wcm9maWxlJiZhLm1heFRleHR1cmVVbml0czxlKzEmJihhLm1heFRleHR1cmVVbml0cz1lKzEpLHRoaXMudW5pdD1lLHQuYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSx0LmJpbmRUZXh0dXJlKHRoaXMudGFyZ2V0LHRoaXMudGV4dHVyZSl9cmV0dXJuIGV9LHVuYmluZDpmdW5jdGlvbigpey0tdGhpcy5iaW5kQ291bnR9LGRlY1JlZjpmdW5jdGlvbigpezA+PS0tdGhpcy5yZWZDb3VudCYmRih0aGlzKX19KSxvLnByb2ZpbGUmJihhLmdldFRvdGFsVGV4dHVyZVNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyh5dCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9eXRbZV0uc3RhdHMuc2l6ZX0pKSx0fSkse2NyZWF0ZTJEOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWkudGV4SW5mbztQLmNhbGwocik7dmFyIGE9QygpO3JldHVybiJudW1iZXIiPT10eXBlb2YgdD9BKGEsMHx0LCJudW1iZXIiPT10eXBlb2YgZT8wfGU6MHx0KTp0PyhJKHIsdCksUyhhLHQpKTpBKGEsMSwxKSxyLmdlbk1pcG1hcHMmJihhLm1pcG1hc2s9KGEud2lkdGg8PDEpLTEpLGkubWlwbWFzaz1hLm1pcG1hc2ssYyhpLGEpLGkuaW50ZXJuYWxmb3JtYXQ9YS5pbnRlcm5hbGZvcm1hdCxuLndpZHRoPWEud2lkdGgsbi5oZWlnaHQ9YS5oZWlnaHQsRChpKSxFKGEsMzU1MykseihyLDM1NTMpLFIoKSxMKGEpLG8ucHJvZmlsZSYmKGkuc3RhdHMuc2l6ZT1UKGkuaW50ZXJuYWxmb3JtYXQsaS50eXBlLGEud2lkdGgsYS5oZWlnaHQsci5nZW5NaXBtYXBzLCExKSksbi5mb3JtYXQ9dHRbaS5pbnRlcm5hbGZvcm1hdF0sbi50eXBlPWV0W2kudHlwZV0sbi5tYWc9cnRbci5tYWdGaWx0ZXJdLG4ubWluPW50W3IubWluRmlsdGVyXSxuLndyYXBTPWl0W3Iud3JhcFNdLG4ud3JhcFQ9aXRbci53cmFwVF0sbn12YXIgaT1uZXcgTygzNTUzKTtyZXR1cm4geXRbaS5pZF09aSxhLnRleHR1cmVDb3VudCsrLG4oZSxyKSxuLnN1YmltYWdlPWZ1bmN0aW9uKHQsZSxyLGEpe2V8PTAscnw9MCxhfD0wO3ZhciBvPXYoKTtyZXR1cm4gYyhvLGkpLG8ud2lkdGg9MCxvLmhlaWdodD0wLHAobyx0KSxvLndpZHRoPW8ud2lkdGh8fChpLndpZHRoPj5hKS1lLG8uaGVpZ2h0PW8uaGVpZ2h0fHwoaS5oZWlnaHQ+PmEpLXIsRChpKSxkKG8sMzU1MyxlLHIsYSksUigpLGsobyksbn0sbi5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgYT0wfGUscz0wfHJ8fGE7aWYoYT09PWkud2lkdGgmJnM9PT1pLmhlaWdodClyZXR1cm4gbjtuLndpZHRoPWkud2lkdGg9YSxuLmhlaWdodD1pLmhlaWdodD1zLEQoaSk7Zm9yKHZhciBsPTA7aS5taXBtYXNrPj5sOysrbCl7dmFyIGM9YT4+bCx1PXM+Pmw7aWYoIWN8fCF1KWJyZWFrO3QudGV4SW1hZ2UyRCgzNTUzLGwsaS5mb3JtYXQsYyx1LDAsaS5mb3JtYXQsaS50eXBlLG51bGwpfXJldHVybiBSKCksby5wcm9maWxlJiYoaS5zdGF0cy5zaXplPVQoaS5pbnRlcm5hbGZvcm1hdCxpLnR5cGUsYSxzLCExLCExKSksbn0sbi5fcmVnbFR5cGU9InRleHR1cmUyZCIsbi5fdGV4dHVyZT1pLG8ucHJvZmlsZSYmKG4uc3RhdHM9aS5zdGF0cyksbi5kZXN0cm95PWZ1bmN0aW9uKCl7aS5kZWNSZWYoKX0sbn0sY3JlYXRlQ3ViZTpmdW5jdGlvbihlLHIsbixpLHMsbCl7ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dmFyIHMsbD1mLnRleEluZm87Zm9yKFAuY2FsbChsKSxzPTA7Nj5zOysrcylnW3NdPUMoKTtpZigibnVtYmVyIiE9dHlwZW9mIHQmJnQpe2lmKCJvYmplY3QiPT10eXBlb2YgdClpZihlKVMoZ1swXSx0KSxTKGdbMV0sZSksUyhnWzJdLHIpLFMoZ1szXSxuKSxTKGdbNF0saSksUyhnWzVdLGEpO2Vsc2UgaWYoSShsLHQpLHUoZix0KSwiZmFjZXMiaW4gdClmb3IodD10LmZhY2VzLHM9MDs2PnM7KytzKWMoZ1tzXSxmKSxTKGdbc10sdFtzXSk7ZWxzZSBmb3Iocz0wOzY+czsrK3MpUyhnW3NdLHQpfWVsc2UgZm9yKHQ9MHx0fHwxLHM9MDs2PnM7KytzKUEoZ1tzXSx0LHQpO2ZvcihjKGYsZ1swXSksZi5taXBtYXNrPWwuZ2VuTWlwbWFwcz8oZ1swXS53aWR0aDw8MSktMTpnWzBdLm1pcG1hc2ssZi5pbnRlcm5hbGZvcm1hdD1nWzBdLmludGVybmFsZm9ybWF0LGgud2lkdGg9Z1swXS53aWR0aCxoLmhlaWdodD1nWzBdLmhlaWdodCxEKGYpLHM9MDs2PnM7KytzKUUoZ1tzXSwzNDA2OStzKTtmb3IoeihsLDM0MDY3KSxSKCksby5wcm9maWxlJiYoZi5zdGF0cy5zaXplPVQoZi5pbnRlcm5hbGZvcm1hdCxmLnR5cGUsaC53aWR0aCxoLmhlaWdodCxsLmdlbk1pcG1hcHMsITApKSxoLmZvcm1hdD10dFtmLmludGVybmFsZm9ybWF0XSxoLnR5cGU9ZXRbZi50eXBlXSxoLm1hZz1ydFtsLm1hZ0ZpbHRlcl0saC5taW49bnRbbC5taW5GaWx0ZXJdLGgud3JhcFM9aXRbbC53cmFwU10saC53cmFwVD1pdFtsLndyYXBUXSxzPTA7Nj5zOysrcylMKGdbc10pO3JldHVybiBofXZhciBmPW5ldyBPKDM0MDY3KTt5dFtmLmlkXT1mLGEuY3ViZUNvdW50Kys7dmFyIGc9QXJyYXkoNik7cmV0dXJuIGgoZSxyLG4saSxzLGwpLGguc3ViaW1hZ2U9ZnVuY3Rpb24odCxlLHIsbixpKXtyfD0wLG58PTAsaXw9MDt2YXIgYT12KCk7cmV0dXJuIGMoYSxmKSxhLndpZHRoPTAsYS5oZWlnaHQ9MCxwKGEsZSksYS53aWR0aD1hLndpZHRofHwoZi53aWR0aD4+aSktcixhLmhlaWdodD1hLmhlaWdodHx8KGYuaGVpZ2h0Pj5pKS1uLEQoZiksZChhLDM0MDY5K3QscixuLGkpLFIoKSxrKGEpLGh9LGgucmVzaXplPWZ1bmN0aW9uKGUpe2lmKChlfD0wKSE9PWYud2lkdGgpe2gud2lkdGg9Zi53aWR0aD1lLGguaGVpZ2h0PWYuaGVpZ2h0PWUsRChmKTtmb3IodmFyIHI9MDs2PnI7KytyKWZvcih2YXIgbj0wO2YubWlwbWFzaz4+bjsrK24pdC50ZXhJbWFnZTJEKDM0MDY5K3IsbixmLmZvcm1hdCxlPj5uLGU+Pm4sMCxmLmZvcm1hdCxmLnR5cGUsbnVsbCk7cmV0dXJuIFIoKSxvLnByb2ZpbGUmJihmLnN0YXRzLnNpemU9VChmLmludGVybmFsZm9ybWF0LGYudHlwZSxoLndpZHRoLGguaGVpZ2h0LCExLCEwKSksaH19LGguX3JlZ2xUeXBlPSJ0ZXh0dXJlQ3ViZSIsaC5fdGV4dHVyZT1mLG8ucHJvZmlsZSYmKGguc3RhdHM9Zi5zdGF0cyksaC5kZXN0cm95PWZ1bmN0aW9uKCl7Zi5kZWNSZWYoKX0saH0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHh0OysrZSl0LmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksdC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpLGJ0W2VdPW51bGw7WCh5dCkuZm9yRWFjaChGKSxhLmN1YmVDb3VudD0wLGEudGV4dHVyZUNvdW50PTB9LGdldFRleHR1cmU6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHJlc3RvcmU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHh0OysrZSl7dmFyIHI9YnRbZV07ciYmKHIuYmluZENvdW50PTAsci51bml0PS0xLGJ0W2VdPW51bGwpfVgoeXQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSk7Zm9yKHZhciByPTA7MzI+cjsrK3IpaWYoMCE9KGUubWlwbWFzayYxPDxyKSlpZigzNTUzPT09ZS50YXJnZXQpdC50ZXhJbWFnZTJEKDM1NTMscixlLmludGVybmFsZm9ybWF0LGUud2lkdGg+PnIsZS5oZWlnaHQ+PnIsMCxlLmludGVybmFsZm9ybWF0LGUudHlwZSxudWxsKTtlbHNlIGZvcih2YXIgbj0wOzY+bjsrK24pdC50ZXhJbWFnZTJEKDM0MDY5K24scixlLmludGVybmFsZm9ybWF0LGUud2lkdGg+PnIsZS5oZWlnaHQ+PnIsMCxlLmludGVybmFsZm9ybWF0LGUudHlwZSxudWxsKTt6KGUudGV4SW5mbyxlLnRhcmdldCl9KSl9fX1mdW5jdGlvbiBNKHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMudGV4dHVyZT1lLHRoaXMucmVuZGVyYnVmZmVyPXI7dmFyIG49dD0wO2U/KHQ9ZS53aWR0aCxuPWUuaGVpZ2h0KTpyJiYodD1yLndpZHRoLG49ci5oZWlnaHQpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1ufWZ1bmN0aW9uIHModCl7dCYmKHQudGV4dHVyZSYmdC50ZXh0dXJlLl90ZXh0dXJlLmRlY1JlZigpLHQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpKX1mdW5jdGlvbiBsKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5fdGV4dHVyZS5yZWZDb3VudCs9MTp0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLnJlZkNvdW50Kz0xKX1mdW5jdGlvbiBjKGUscil7ciYmKHIudGV4dHVyZT90LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLGUsci50YXJnZXQsci50ZXh0dXJlLl90ZXh0dXJlLnRleHR1cmUsMCk6dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCxlLDM2MTYxLHIucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVuZGVyYnVmZmVyKSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT0zNTUzLHI9bnVsbCxuPW51bGwsaT10O3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmKGk9dC5kYXRhLCJ0YXJnZXQiaW4gdCYmKGU9MHx0LnRhcmdldCkpLCJ0ZXh0dXJlMmQiPT09KHQ9aS5fcmVnbFR5cGUpfHwidGV4dHVyZUN1YmUiPT09dD9yPWk6InJlbmRlcmJ1ZmZlciI9PT10JiYobj1pLGU9MzYxNjEpLG5ldyBvKGUscixuKX1mdW5jdGlvbiBoKHQsZSxyLGEscyl7cmV0dXJuIHI/KCh0PW4uY3JlYXRlMkQoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmEsdHlwZTpzfSkpLl90ZXh0dXJlLnJlZkNvdW50PTAsbmV3IG8oMzU1Myx0LG51bGwpKTooKHQ9aS5jcmVhdGUoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmF9KSkuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudD0wLG5ldyBvKDM2MTYxLG51bGwsdCkpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQmJih0LnRleHR1cmV8fHQucmVuZGVyYnVmZmVyKX1mdW5jdGlvbiBwKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5yZXNpemUoZSxyKTp0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIucmVzaXplKGUsciksdC53aWR0aD1lLHQuaGVpZ2h0PXIpfWZ1bmN0aW9uIGQoKXt0aGlzLmlkPVQrKyxrW3RoaXMuaWRdPXRoaXMsdGhpcy5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wLHRoaXMuY29sb3JBdHRhY2htZW50cz1bXSx0aGlzLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5zdGVuY2lsQXR0YWNobWVudD10aGlzLmRlcHRoQXR0YWNobWVudD1udWxsfWZ1bmN0aW9uIGcodCl7dC5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2gocykscyh0LmRlcHRoQXR0YWNobWVudCkscyh0LnN0ZW5jaWxBdHRhY2htZW50KSxzKHQuZGVwdGhTdGVuY2lsQXR0YWNobWVudCl9ZnVuY3Rpb24gbShlKXt0LmRlbGV0ZUZyYW1lYnVmZmVyKGUuZnJhbWVidWZmZXIpLGUuZnJhbWVidWZmZXI9bnVsbCxhLmZyYW1lYnVmZmVyQ291bnQtLSxkZWxldGUga1tlLmlkXX1mdW5jdGlvbiB2KGUpe3ZhciBuO3QuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUuZnJhbWVidWZmZXIpO3ZhciBpPWUuY29sb3JBdHRhY2htZW50cztmb3Iobj0wO248aS5sZW5ndGg7KytuKWMoMzYwNjQrbixpW25dKTtmb3Iobj1pLmxlbmd0aDtuPHIubWF4Q29sb3JBdHRhY2htZW50czsrK24pdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCtuLDM1NTMsbnVsbCwwKTt0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MTI4LDM1NTMsbnVsbCwwKSxjKDM2MDk2LGUuZGVwdGhBdHRhY2htZW50KSxjKDM2MTI4LGUuc3RlbmNpbEF0dGFjaG1lbnQpLGMoMzMzMDYsZS5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KSx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApLHQuaXNDb250ZXh0TG9zdCgpLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHgubmV4dD94Lm5leHQuZnJhbWVidWZmZXI6bnVsbCkseC5jdXI9eC5uZXh0LHQuZ2V0RXJyb3IoKX1mdW5jdGlvbiB5KHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciBpLGE9MCxvPTAscz0hMCxjPSEwO2k9bnVsbDt2YXIgcD0hMCxkPSJyZ2JhIixtPSJ1aW50OCIseT0xLHg9bnVsbCx3PW51bGwsVD1udWxsLGs9ITE7Im51bWJlciI9PXR5cGVvZiB0PyhhPTB8dCxvPTB8ZXx8YSk6dD8oInNoYXBlImluIHQ/KGE9KG89dC5zaGFwZSlbMF0sbz1vWzFdKTooInJhZGl1cyJpbiB0JiYoYT1vPXQucmFkaXVzKSwid2lkdGgiaW4gdCYmKGE9dC53aWR0aCksImhlaWdodCJpbiB0JiYobz10LmhlaWdodCkpLCgiY29sb3IiaW4gdHx8ImNvbG9ycyJpbiB0KSYmKGk9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShpKSksaXx8KCJjb2xvckNvdW50ImluIHQmJih5PTB8dC5jb2xvckNvdW50KSwiY29sb3JUZXh0dXJlImluIHQmJihwPSEhdC5jb2xvclRleHR1cmUsZD0icmdiYTQiKSwiY29sb3JUeXBlImluIHQmJihtPXQuY29sb3JUeXBlLCFwKSYmKCJoYWxmIGZsb2F0Ij09PW18fCJmbG9hdDE2Ij09PW0/ZD0icmdiYTE2ZiI6ImZsb2F0IiE9PW0mJiJmbG9hdDMyIiE9PW18fChkPSJyZ2JhMzJmIikpLCJjb2xvckZvcm1hdCJpbiB0JiYoZD10LmNvbG9yRm9ybWF0LDA8PWIuaW5kZXhPZihkKT9wPSEwOjA8PV8uaW5kZXhPZihkKSYmKHA9ITEpKSksKCJkZXB0aFRleHR1cmUiaW4gdHx8ImRlcHRoU3RlbmNpbFRleHR1cmUiaW4gdCkmJihrPSEoIXQuZGVwdGhUZXh0dXJlJiYhdC5kZXB0aFN0ZW5jaWxUZXh0dXJlKSksImRlcHRoImluIHQmJigiYm9vbGVhbiI9PXR5cGVvZiB0LmRlcHRoP3M9dC5kZXB0aDooeD10LmRlcHRoLGM9ITEpKSwic3RlbmNpbCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5zdGVuY2lsP2M9dC5zdGVuY2lsOih3PXQuc3RlbmNpbCxzPSExKSksImRlcHRoU3RlbmNpbCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5kZXB0aFN0ZW5jaWw/cz1jPXQuZGVwdGhTdGVuY2lsOihUPXQuZGVwdGhTdGVuY2lsLGM9cz0hMSkpKTphPW89MTt2YXIgTT1udWxsLEE9bnVsbCxTPW51bGwsRT1udWxsO2lmKEFycmF5LmlzQXJyYXkoaSkpTT1pLm1hcCh1KTtlbHNlIGlmKGkpTT1bdShpKV07ZWxzZSBmb3IoTT1BcnJheSh5KSxpPTA7aTx5OysraSlNW2ldPWgoYSxvLHAsZCxtKTtmb3IoYT1hfHxNWzBdLndpZHRoLG89b3x8TVswXS5oZWlnaHQseD9BPXUoeCk6cyYmIWMmJihBPWgoYSxvLGssImRlcHRoIiwidWludDMyIikpLHc/Uz11KHcpOmMmJiFzJiYoUz1oKGEsbywhMSwic3RlbmNpbCIsInVpbnQ4IikpLFQ/RT11KFQpOiF4JiYhdyYmYyYmcyYmKEU9aChhLG8saywiZGVwdGggc3RlbmNpbCIsImRlcHRoIHN0ZW5jaWwiKSkscz1udWxsLGk9MDtpPE0ubGVuZ3RoOysraSlsKE1baV0pLE1baV0mJk1baV0udGV4dHVyZSYmKGM9YnRbTVtpXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdF0qX3RbTVtpXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGVdLG51bGw9PT1zJiYocz1jKSk7cmV0dXJuIGwoQSksbChTKSxsKEUpLGcobiksbi53aWR0aD1hLG4uaGVpZ2h0PW8sbi5jb2xvckF0dGFjaG1lbnRzPU0sbi5kZXB0aEF0dGFjaG1lbnQ9QSxuLnN0ZW5jaWxBdHRhY2htZW50PVMsbi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PUUsci5jb2xvcj1NLm1hcChmKSxyLmRlcHRoPWYoQSksci5zdGVuY2lsPWYoUyksci5kZXB0aFN0ZW5jaWw9ZihFKSxyLndpZHRoPW4ud2lkdGgsci5oZWlnaHQ9bi5oZWlnaHQsdihuKSxyfXZhciBuPW5ldyBkO3JldHVybiBhLmZyYW1lYnVmZmVyQ291bnQrKyxyKHQsZSksVShyLHtyZXNpemU6ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLm1heCgwfHQsMSksYT1NYXRoLm1heCgwfGV8fGksMSk7aWYoaT09PW4ud2lkdGgmJmE9PT1uLmhlaWdodClyZXR1cm4gcjtmb3IodmFyIG89bi5jb2xvckF0dGFjaG1lbnRzLHM9MDtzPG8ubGVuZ3RoOysrcylwKG9bc10saSxhKTtyZXR1cm4gcChuLmRlcHRoQXR0YWNobWVudCxpLGEpLHAobi5zdGVuY2lsQXR0YWNobWVudCxpLGEpLHAobi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LGksYSksbi53aWR0aD1yLndpZHRoPWksbi5oZWlnaHQ9ci5oZWlnaHQ9YSx2KG4pLHJ9LF9yZWdsVHlwZToiZnJhbWVidWZmZXIiLF9mcmFtZWJ1ZmZlcjpuLGRlc3Ryb3k6ZnVuY3Rpb24oKXttKG4pLGcobil9LHVzZTpmdW5jdGlvbih0KXt4LnNldEZCTyh7ZnJhbWVidWZmZXI6cn0sdCl9fSl9dmFyIHg9e2N1cjpudWxsLG5leHQ6bnVsbCxkaXJ0eTohMSxzZXRGQk86bnVsbH0sYj1bInJnYmEiXSxfPVsicmdiYTQiLCJyZ2I1NjUiLCJyZ2I1IGExIl07ZS5leHRfc3JnYiYmXy5wdXNoKCJzcmdiYSIpLGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JiZfLnB1c2goInJnYmExNmYiLCJyZ2IxNmYiKSxlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCYmXy5wdXNoKCJyZ2JhMzJmIik7dmFyIHc9WyJ1aW50OCJdO2Uub2VzX3RleHR1cmVfaGFsZl9mbG9hdCYmdy5wdXNoKCJoYWxmIGZsb2F0IiwiZmxvYXQxNiIpLGUub2VzX3RleHR1cmVfZmxvYXQmJncucHVzaCgiZmxvYXQiLCJmbG9hdDMyIik7dmFyIFQ9MCxrPXt9O3JldHVybiBVKHgse2dldEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYiZnJhbWVidWZmZXIiPT09dC5fcmVnbFR5cGUmJih0PXQuX2ZyYW1lYnVmZmVyKWluc3RhbmNlb2YgZD90Om51bGx9LGNyZWF0ZTp5LGNyZWF0ZUN1YmU6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgaSxhPXtjb2xvcjpudWxsfSxvPTAscz1udWxsO2k9InJnYmEiO3ZhciBsPSJ1aW50OCIsYz0xO2lmKCJudW1iZXIiPT10eXBlb2YgdD9vPTB8dDp0Pygic2hhcGUiaW4gdD9vPXQuc2hhcGVbMF06KCJyYWRpdXMiaW4gdCYmKG89MHx0LnJhZGl1cyksIndpZHRoImluIHQ/bz0wfHQud2lkdGg6ImhlaWdodCJpbiB0JiYobz0wfHQuaGVpZ2h0KSksKCJjb2xvciJpbiB0fHwiY29sb3JzImluIHQpJiYocz10LmNvbG9yfHx0LmNvbG9ycyxBcnJheS5pc0FycmF5KHMpKSxzfHwoImNvbG9yQ291bnQiaW4gdCYmKGM9MHx0LmNvbG9yQ291bnQpLCJjb2xvclR5cGUiaW4gdCYmKGw9dC5jb2xvclR5cGUpLCJjb2xvckZvcm1hdCJpbiB0JiYoaT10LmNvbG9yRm9ybWF0KSksImRlcHRoImluIHQmJihhLmRlcHRoPXQuZGVwdGgpLCJzdGVuY2lsImluIHQmJihhLnN0ZW5jaWw9dC5zdGVuY2lsKSwiZGVwdGhTdGVuY2lsImluIHQmJihhLmRlcHRoU3RlbmNpbD10LmRlcHRoU3RlbmNpbCkpOm89MSxzKWlmKEFycmF5LmlzQXJyYXkocykpZm9yKHQ9W10saT0wO2k8cy5sZW5ndGg7KytpKXRbaV09c1tpXTtlbHNlIHQ9W3NdO2Vsc2UgZm9yKHQ9QXJyYXkoYykscz17cmFkaXVzOm8sZm9ybWF0OmksdHlwZTpsfSxpPTA7aTxjOysraSl0W2ldPW4uY3JlYXRlQ3ViZShzKTtmb3IoYS5jb2xvcj1BcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7KytpKWM9dFtpXSxvPW98fGMud2lkdGgsYS5jb2xvcltpXT17dGFyZ2V0OjM0MDY5LGRhdGE6dFtpXX07Zm9yKGk9MDs2Pmk7KytpKXtmb3IoYz0wO2M8dC5sZW5ndGg7KytjKWEuY29sb3JbY10udGFyZ2V0PTM0MDY5K2k7MDxpJiYoYS5kZXB0aD1yWzBdLmRlcHRoLGEuc3RlbmNpbD1yWzBdLnN0ZW5jaWwsYS5kZXB0aFN0ZW5jaWw9clswXS5kZXB0aFN0ZW5jaWwpLHJbaV0/cltpXShhKTpyW2ldPXkoYSl9cmV0dXJuIFUoZSx7d2lkdGg6byxoZWlnaHQ6byxjb2xvcjp0fSl9dmFyIHI9QXJyYXkoNik7cmV0dXJuIGUodCksVShlLHtmYWNlczpyLHJlc2l6ZTpmdW5jdGlvbih0KXt2YXIgbj0wfHQ7aWYobj09PWUud2lkdGgpcmV0dXJuIGU7dmFyIGk9ZS5jb2xvcjtmb3IodD0wO3Q8aS5sZW5ndGg7Kyt0KWlbdF0ucmVzaXplKG4pO2Zvcih0PTA7Nj50OysrdClyW3RdLnJlc2l6ZShuKTtyZXR1cm4gZS53aWR0aD1lLmhlaWdodD1uLGV9LF9yZWdsVHlwZToiZnJhbWVidWZmZXJDdWJlIixkZXN0cm95OmZ1bmN0aW9uKCl7ci5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pKX19KX0sY2xlYXI6ZnVuY3Rpb24oKXtYKGspLmZvckVhY2gobSl9LHJlc3RvcmU6ZnVuY3Rpb24oKXt4LmN1cj1udWxsLHgubmV4dD1udWxsLHguZGlydHk9ITAsWChrKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmZyYW1lYnVmZmVyPXQuY3JlYXRlRnJhbWVidWZmZXIoKSx2KGUpfSkpfX0pfWZ1bmN0aW9uIEEoKXt0aGlzLnc9dGhpcy56PXRoaXMueT10aGlzLng9dGhpcy5zdGF0ZT0wLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5zaXplPTAsdGhpcy5ub3JtYWxpemVkPSExLHRoaXMudHlwZT01MTI2LHRoaXMuZGl2aXNvcj10aGlzLnN0cmlkZT10aGlzLm9mZnNldD0wfWZ1bmN0aW9uIFModCxlLHIsbixpKXtmdW5jdGlvbiBhKCl7dGhpcy5pZD0rK2MsdGhpcy5hdHRyaWJ1dGVzPVtdO3ZhciB0PWUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q7dGhpcy52YW89dD90LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk6bnVsbCx1W3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXJzPVtdfXZhciBvPXIubWF4QXR0cmlidXRlcyxzPUFycmF5KG8pO2ZvcihyPTA7cjxvOysrcilzW3JdPW5ldyBBO3ZhciBjPTAsdT17fSxoPXtSZWNvcmQ6QSxzY29wZTp7fSxzdGF0ZTpzLGN1cnJlbnRWQU86bnVsbCx0YXJnZXRWQU86bnVsbCxyZXN0b3JlOmUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q/ZnVuY3Rpb24oKXtlLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0JiZYKHUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSkpfTpmdW5jdGlvbigpe30sY3JlYXRlVkFPOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBuPTA7bjxyLmJ1ZmZlcnMubGVuZ3RoOysrbilyLmJ1ZmZlcnNbbl0uZGVzdHJveSgpO3IuYnVmZmVycy5sZW5ndGg9MCwobj1yLmF0dHJpYnV0ZXMpLmxlbmd0aD10Lmxlbmd0aDtmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG89dFthXSxzPW5bYV09bmV3IEE7QXJyYXkuaXNBcnJheShvKXx8WihvKXx8bChvKT8obz1pLmNyZWF0ZShvLDM0OTYyLCExLCEwKSxzLmJ1ZmZlcj1pLmdldEJ1ZmZlcihvKSxzLnNpemU9MHxzLmJ1ZmZlci5kaW1lbnNpb24scy5ub3JtYWxpemVkPSExLHMudHlwZT1zLmJ1ZmZlci5kdHlwZSxzLm9mZnNldD0wLHMuc3RyaWRlPTAscy5kaXZpc29yPTAscy5zdGF0ZT0xLHIuYnVmZmVycy5wdXNoKG8pKTppLmdldEJ1ZmZlcihvKT8ocy5idWZmZXI9aS5nZXRCdWZmZXIobykscy5zaXplPTB8cy5idWZmZXIuZGltZW5zaW9uLHMubm9ybWFsaXplZD0hMSxzLnR5cGU9cy5idWZmZXIuZHR5cGUscy5vZmZzZXQ9MCxzLnN0cmlkZT0wLHMuZGl2aXNvcj0wLHMuc3RhdGU9MSk6aS5nZXRCdWZmZXIoby5idWZmZXIpPyhzLmJ1ZmZlcj1pLmdldEJ1ZmZlcihvLmJ1ZmZlcikscy5zaXplPTB8KCtvLnNpemV8fHMuYnVmZmVyLmRpbWVuc2lvbikscy5ub3JtYWxpemVkPSEhby5ub3JtYWxpemVkfHwhMSxzLnR5cGU9InR5cGUiaW4gbz9RW28udHlwZV06cy5idWZmZXIuZHR5cGUscy5vZmZzZXQ9MHwoby5vZmZzZXR8fDApLHMuc3RyaWRlPTB8KG8uc3RyaWRlfHwwKSxzLmRpdmlzb3I9MHwoby5kaXZpc29yfHwwKSxzLnN0YXRlPTEpOiJ4ImluIG8mJihzLng9K28ueHx8MCxzLnk9K28ueXx8MCxzLno9K28uenx8MCxzLnc9K28ud3x8MCxzLnN0YXRlPTIpfXJldHVybiByLnJlZnJlc2goKSxlfXZhciByPW5ldyBhO3JldHVybiBuLnZhb0NvdW50Kz0xLGUuZGVzdHJveT1mdW5jdGlvbigpe3IuZGVzdHJveSgpfSxlLl92YW89cixlLl9yZWdsVHlwZT0idmFvIixlKHQpfSxnZXRWQU86ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX3Zhbz90Ll92YW86bnVsbH0sZGVzdHJveUJ1ZmZlcjpmdW5jdGlvbihlKXtmb3IodmFyIHI9MDtyPHMubGVuZ3RoOysrcil7dmFyIG49c1tyXTtuLmJ1ZmZlcj09PWUmJih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShyKSxuLmJ1ZmZlcj1udWxsKX19LHNldFZBTzplLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0P2Z1bmN0aW9uKHQpe2lmKHQhPT1oLmN1cnJlbnRWQU8pe3ZhciByPWUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q7dD9yLmJpbmRWZXJ0ZXhBcnJheU9FUyh0LnZhbyk6ci5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCksaC5jdXJyZW50VkFPPXR9fTpmdW5jdGlvbihyKXtpZihyIT09aC5jdXJyZW50VkFPKXtpZihyKXIuYmluZEF0dHJzKCk7ZWxzZSBmb3IodmFyIG49ZS5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLGk9MDtpPHMubGVuZ3RoOysraSl7dmFyIGE9c1tpXTthLmJ1ZmZlcj8odC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSxhLnNpemUsYS50eXBlLGEubm9ybWFsaXplZCxhLnN0cmlkZSxhLm9mZmZzZXQpLG4mJm4udmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGksYS5kaXZpc29yKSk6KHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpLHQudmVydGV4QXR0cmliNGYoaSxhLngsYS55LGEueixhLncpKX1oLmN1cnJlbnRWQU89cn19LGNsZWFyOmUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q/ZnVuY3Rpb24oKXtYKHUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSkpfTpmdW5jdGlvbigpe319O3JldHVybiBhLnByb3RvdHlwZS5iaW5kQXR0cnM9ZnVuY3Rpb24oKXtmb3IodmFyIHI9ZS5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLG49dGhpcy5hdHRyaWJ1dGVzLGk9MDtpPG4ubGVuZ3RoOysraSl7dmFyIGE9bltpXTthLmJ1ZmZlcj8odC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LmJpbmRCdWZmZXIoMzQ5NjIsYS5idWZmZXIuYnVmZmVyKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSxhLnNpemUsYS50eXBlLGEubm9ybWFsaXplZCxhLnN0cmlkZSxhLm9mZnNldCksciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaSxhLmRpdmlzb3IpKToodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC52ZXJ0ZXhBdHRyaWI0ZihpLGEueCxhLnksYS56LGEudykpfWZvcihyPW4ubGVuZ3RoO3I8bzsrK3IpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocil9LGEucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oKXt2YXIgdD1lLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0O3QmJih0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyksdGhpcy5iaW5kQXR0cnMoKSxoLmN1cnJlbnRWQU89dGhpcyl9LGEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLnZhbyl7dmFyIHQ9ZS5vZXNfdmVydGV4X2FycmF5X29iamVjdDt0aGlzPT09aC5jdXJyZW50VkFPJiYoaC5jdXJyZW50VkFPPW51bGwsdC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCkpLHQuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy52YW8pLHRoaXMudmFvPW51bGx9dVt0aGlzLmlkXSYmKGRlbGV0ZSB1W3RoaXMuaWRdLC0tbi52YW9Db3VudCl9LGh9ZnVuY3Rpb24gRSh0LGUscixuKXtmdW5jdGlvbiBpKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMuaWQ9ZSx0aGlzLmxvY2F0aW9uPXIsdGhpcy5pbmZvPW59ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKHRbcl0uaWQ9PT1lLmlkKXJldHVybiB2b2lkKHRbcl0ubG9jYXRpb249ZS5sb2NhdGlvbik7dC5wdXNoKGUpfWZ1bmN0aW9uIG8ocixuLGkpe2lmKCEobz0oaT0zNTYzMj09PXI/Yzp1KVtuXSkpe3ZhciBhPWUuc3RyKG4pLG89dC5jcmVhdGVTaGFkZXIocik7dC5zaGFkZXJTb3VyY2UobyxhKSx0LmNvbXBpbGVTaGFkZXIobyksaVtuXT1vfXJldHVybiBvfWZ1bmN0aW9uIHModCxlKXt0aGlzLmlkPXArKyx0aGlzLmZyYWdJZD10LHRoaXMudmVydElkPWUsdGhpcy5wcm9ncmFtPW51bGwsdGhpcy51bmlmb3Jtcz1bXSx0aGlzLmF0dHJpYnV0ZXM9W10sbi5wcm9maWxlJiYodGhpcy5zdGF0cz17dW5pZm9ybXNDb3VudDowLGF0dHJpYnV0ZXNDb3VudDowfSl9ZnVuY3Rpb24gbChyLHMsbCl7dmFyIGM7Yz1vKDM1NjMyLHIuZnJhZ0lkKTt2YXIgdT1vKDM1NjMzLHIudmVydElkKTtpZihzPXIucHJvZ3JhbT10LmNyZWF0ZVByb2dyYW0oKSx0LmF0dGFjaFNoYWRlcihzLGMpLHQuYXR0YWNoU2hhZGVyKHMsdSksbClmb3IoYz0wO2M8bC5sZW5ndGg7KytjKXU9bFtjXSx0LmJpbmRBdHRyaWJMb2NhdGlvbihzLHVbMF0sdVsxXSk7dC5saW5rUHJvZ3JhbShzKSx1PXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLDM1NzE4KSxuLnByb2ZpbGUmJihyLnN0YXRzLnVuaWZvcm1zQ291bnQ9dSk7dmFyIGg9ci51bmlmb3Jtcztmb3IoYz0wO2M8dTsrK2MpaWYobD10LmdldEFjdGl2ZVVuaWZvcm0ocyxjKSlpZigxPGwuc2l6ZSlmb3IodmFyIGY9MDtmPGwuc2l6ZTsrK2Ype3ZhciBwPWwubmFtZS5yZXBsYWNlKCJbMF0iLCJbIitmKyJdIik7YShoLG5ldyBpKHAsZS5pZChwKSx0LmdldFVuaWZvcm1Mb2NhdGlvbihzLHApLGwpKX1lbHNlIGEoaCxuZXcgaShsLm5hbWUsZS5pZChsLm5hbWUpLHQuZ2V0VW5pZm9ybUxvY2F0aW9uKHMsbC5uYW1lKSxsKSk7Zm9yKHU9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHMsMzU3MjEpLG4ucHJvZmlsZSYmKHIuc3RhdHMuYXR0cmlidXRlc0NvdW50PXUpLHI9ci5hdHRyaWJ1dGVzLGM9MDtjPHU7KytjKShsPXQuZ2V0QWN0aXZlQXR0cmliKHMsYykpJiZhKHIsbmV3IGkobC5uYW1lLGUuaWQobC5uYW1lKSx0LmdldEF0dHJpYkxvY2F0aW9uKHMsbC5uYW1lKSxsKSl9dmFyIGM9e30sdT17fSxoPXt9LGY9W10scD0wO3JldHVybiBuLnByb2ZpbGUmJihyLmdldE1heFVuaWZvcm1zQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBmLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc3RhdHMudW5pZm9ybXNDb3VudD50JiYodD1lLnN0YXRzLnVuaWZvcm1zQ291bnQpfSkpLHR9LHIuZ2V0TWF4QXR0cmlidXRlc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gZi5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnN0YXRzLmF0dHJpYnV0ZXNDb3VudD50JiYodD1lLnN0YXRzLmF0dHJpYnV0ZXNDb3VudCl9KSksdH0pLHtjbGVhcjpmdW5jdGlvbigpe3ZhciBlPXQuZGVsZXRlU2hhZGVyLmJpbmQodCk7WChjKS5mb3JFYWNoKGUpLGM9e30sWCh1KS5mb3JFYWNoKGUpLHU9e30sZi5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmRlbGV0ZVByb2dyYW0oZS5wcm9ncmFtKX0pKSxmLmxlbmd0aD0wLGg9e30sci5zaGFkZXJDb3VudD0wfSxwcm9ncmFtOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPWhbZV07YXx8KGE9aFtlXT17fSk7dmFyIG89YVt0XTtyZXR1cm4gbyYmIWk/bzooZT1uZXcgcyhlLHQpLHIuc2hhZGVyQ291bnQrKyxsKGUsbixpKSxvfHwoYVt0XT1lKSxmLnB1c2goZSksZSl9LHJlc3RvcmU6ZnVuY3Rpb24oKXtjPXt9LHU9e307Zm9yKHZhciB0PTA7dDxmLmxlbmd0aDsrK3QpbChmW3RdLG51bGwsZlt0XS5hdHRyaWJ1dGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW3QubG9jYXRpb24sdC5uYW1lXX0pKSl9LHNoYWRlcjpvLGZyYWc6LTEsdmVydDotMX19ZnVuY3Rpb24gQyh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKGkpe3ZhciBhO2E9bnVsbD09PWUubmV4dD81MTIxOmUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUuX3RleHR1cmUudHlwZTt2YXIgbz0wLHM9MCxsPW4uZnJhbWVidWZmZXJXaWR0aCxjPW4uZnJhbWVidWZmZXJIZWlnaHQsdT1udWxsO3JldHVybiBaKGkpP3U9aTppJiYobz0wfGkueCxzPTB8aS55LGw9MHwoaS53aWR0aHx8bi5mcmFtZWJ1ZmZlcldpZHRoLW8pLGM9MHwoaS5oZWlnaHR8fG4uZnJhbWVidWZmZXJIZWlnaHQtcyksdT1pLmRhdGF8fG51bGwpLHIoKSxpPWwqYyo0LHV8fCg1MTIxPT09YT91PW5ldyBVaW50OEFycmF5KGkpOjUxMjY9PT1hJiYodT11fHxuZXcgRmxvYXQzMkFycmF5KGkpKSksdC5waXhlbFN0b3JlaSgzMzMzLDQpLHQucmVhZFBpeGVscyhvLHMsbCxjLDY0MDgsYSx1KSx1fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZyYW1lYnVmZmVyImluIHQ/ZnVuY3Rpb24odCl7dmFyIHI7cmV0dXJuIGUuc2V0RkJPKHtmcmFtZWJ1ZmZlcjp0LmZyYW1lYnVmZmVyfSwoZnVuY3Rpb24oKXtyPXModCl9KSkscn0odCk6cyh0KX19ZnVuY3Rpb24gTCh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gTCh0KS5qb2luKCIiKX1mdW5jdGlvbiBJKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PVtdLGU9W107cmV0dXJuIFUoKGZ1bmN0aW9uKCl7dC5wdXNoLmFwcGx5KHQsTChhcmd1bWVudHMpKX0pLHtkZWY6ZnVuY3Rpb24oKXt2YXIgbj0idiIrcisrO3JldHVybiBlLnB1c2gobiksMDxhcmd1bWVudHMubGVuZ3RoJiYodC5wdXNoKG4sIj0iKSx0LnB1c2guYXBwbHkodCxMKGFyZ3VtZW50cykpLHQucHVzaCgiOyIpKSxufSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBQKFswPGUubGVuZ3RoPyJ2YXIgIitlLmpvaW4oIiwiKSsiOyI6IiIsUCh0KV0pfX0pfWZ1bmN0aW9uIGUoKXtmdW5jdGlvbiBlKHQsZSl7bih0LGUsIj0iLHIuZGVmKHQsZSksIjsiKX12YXIgcj10KCksbj10KCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gVSgoZnVuY3Rpb24oKXtyLmFwcGx5KHIsTChhcmd1bWVudHMpKX0pLHtkZWY6ci5kZWYsZW50cnk6cixleGl0Om4sc2F2ZTplLHNldDpmdW5jdGlvbih0LG4saSl7ZSh0LG4pLHIodCxuLCI9IixpLCI7Iil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIGkoKSthKCl9fSl9dmFyIHI9MCxuPVtdLGk9W10sYT10KCksbz17fTtyZXR1cm57Z2xvYmFsOmEsbGluazpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGkubGVuZ3RoOysrZSlpZihpW2VdPT09dClyZXR1cm4gbltlXTtyZXR1cm4gZT0iZyIrcisrLG4ucHVzaChlKSxpLnB1c2godCksZX0sYmxvY2s6dCxwcm9jOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3ZhciB0PSJhIitpLmxlbmd0aDtyZXR1cm4gaS5wdXNoKHQpLHR9dmFyIGk9W107cj1yfHwwO2Zvcih2YXIgYT0wO2E8cjsrK2EpbigpO3ZhciBzPShhPWUoKSkudG9TdHJpbmc7cmV0dXJuIG9bdF09VShhLHthcmc6bix0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBQKFsiZnVuY3Rpb24oIixpLmpvaW4oKSwiKXsiLHMoKSwifSJdKX19KX0sc2NvcGU6ZSxjb25kOmZ1bmN0aW9uKCl7dmFyIHQ9UChhcmd1bWVudHMpLHI9ZSgpLG49ZSgpLGk9ci50b1N0cmluZyxhPW4udG9TdHJpbmc7cmV0dXJuIFUocix7dGhlbjpmdW5jdGlvbigpe3JldHVybiByLmFwcGx5KHIsTChhcmd1bWVudHMpKSx0aGlzfSxlbHNlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkobixMKGFyZ3VtZW50cykpLHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9YSgpO3JldHVybiBlJiYoZT0iZWxzZXsiK2UrIn0iKSxQKFsiaWYoIix0LCIpeyIsaSgpLCJ9IixlXSl9fSl9LGNvbXBpbGU6ZnVuY3Rpb24oKXt2YXIgdD1bJyJ1c2Ugc3RyaWN0IjsnLGEsInJldHVybiB7Il07T2JqZWN0LmtleXMobykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKCciJyxlLCciOicsb1tlXS50b1N0cmluZygpLCIsIil9KSksdC5wdXNoKCJ9Iik7dmFyIGU9UCh0KS5yZXBsYWNlKC87L2csIjtcbiIpLnJlcGxhY2UoL30vZywifVxuIikucmVwbGFjZSgvey9nLCJ7XG4iKTtyZXR1cm4gRnVuY3Rpb24uYXBwbHkobnVsbCxuLmNvbmNhdChlKSkuYXBwbHkobnVsbCxpKX19fWZ1bmN0aW9uIHoodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFoodCl8fGwodCl9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gdC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiJ2aWV3cG9ydCI9PT10Py0xOiJ2aWV3cG9ydCI9PT1lPzE6dDxlPy0xOjF9KSl9ZnVuY3Rpb24gRCh0LGUscixuKXt0aGlzLnRoaXNEZXA9dCx0aGlzLmNvbnRleHREZXA9ZSx0aGlzLnByb3BEZXA9cix0aGlzLmFwcGVuZD1ufWZ1bmN0aW9uIFIodCl7cmV0dXJuIHQmJiEodC50aGlzRGVwfHx0LmNvbnRleHREZXB8fHQucHJvcERlcCl9ZnVuY3Rpb24gRih0KXtyZXR1cm4gbmV3IEQoITEsITEsITEsdCl9ZnVuY3Rpb24gQih0LGUpe3ZhciByPXQudHlwZTtyZXR1cm4gMD09PXI/bmV3IEQoITAsMTw9KHI9dC5kYXRhLmxlbmd0aCksMjw9cixlKTo0PT09cj9uZXcgRCgocj10LmRhdGEpLnRoaXNEZXAsci5jb250ZXh0RGVwLHIucHJvcERlcCxlKTpuZXcgRCgzPT09ciwyPT09ciwxPT09cixlKX1mdW5jdGlvbiBOKHQsZSxyLG4saSxvLHMsbCxjLHUsaCxmLHAsZCxnKXtmdW5jdGlvbiB2KHQpe3JldHVybiB0LnJlcGxhY2UoIi4iLCJfIil9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49dih0KTtydC5wdXNoKHQpLGV0W25dPXR0W25dPSEhcixpdFtuXT1lfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPXYodCk7cnQucHVzaCh0KSxBcnJheS5pc0FycmF5KHIpPyh0dFtuXT1yLnNsaWNlKCksZXRbbl09ci5zbGljZSgpKTp0dFtuXT1ldFtuXT1yLGF0W25dPWV9ZnVuY3Rpb24gYigpe3ZhciB0PUkoKSxyPXQubGluayxuPXQuZ2xvYmFsO3QuaWQ9bHQrKyx0LmJhdGNoSWQ9IjAiO3ZhciBpPXIob3QpLGE9dC5zaGFyZWQ9e3Byb3BzOiJhMCJ9O09iamVjdC5rZXlzKG90KS5mb3JFYWNoKChmdW5jdGlvbih0KXthW3RdPW4uZGVmKGksIi4iLHQpfSkpO3ZhciBvPXQubmV4dD17fSxzPXQuY3VycmVudD17fTtPYmplY3Qua2V5cyhhdCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0dFt0XSkmJihvW3RdPW4uZGVmKGEubmV4dCwiLiIsdCksc1t0XT1uLmRlZihhLmN1cnJlbnQsIi4iLHQpKX0pKTt2YXIgbD10LmNvbnN0YW50cz17fTtPYmplY3Qua2V5cyhzdCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7bFt0XT1uLmRlZihKU09OLnN0cmluZ2lmeShzdFt0XSkpfSkpLHQuaW52b2tlPWZ1bmN0aW9uKGUsbil7c3dpdGNoKG4udHlwZSl7Y2FzZSAwOnZhciBpPVsidGhpcyIsYS5jb250ZXh0LGEucHJvcHMsdC5iYXRjaElkXTtyZXR1cm4gZS5kZWYocihuLmRhdGEpLCIuY2FsbCgiLGkuc2xpY2UoMCxNYXRoLm1heChuLmRhdGEubGVuZ3RoKzEsNCkpLCIpIik7Y2FzZSAxOnJldHVybiBlLmRlZihhLnByb3BzLG4uZGF0YSk7Y2FzZSAyOnJldHVybiBlLmRlZihhLmNvbnRleHQsbi5kYXRhKTtjYXNlIDM6cmV0dXJuIGUuZGVmKCJ0aGlzIixuLmRhdGEpO2Nhc2UgNDpyZXR1cm4gbi5kYXRhLmFwcGVuZCh0LGUpLG4uZGF0YS5yZWZ9fSx0LmF0dHJpYkNhY2hlPXt9O3ZhciBjPXt9O3JldHVybiB0LnNjb3BlQXR0cmliPWZ1bmN0aW9uKHQpe2lmKCh0PWUuaWQodCkpaW4gYylyZXR1cm4gY1t0XTt2YXIgbj11LnNjb3BlW3RdO3JldHVybiBufHwobj11LnNjb3BlW3RdPW5ldyBYKSxjW3RdPXIobil9LHR9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljO2lmKCJmcmFtZWJ1ZmZlciJpbiByKXt2YXIgaT1yLmZyYW1lYnVmZmVyO3JldHVybiBpPyhpPWwuZ2V0RnJhbWVidWZmZXIoaSksRigoZnVuY3Rpb24odCxlKXt2YXIgcj10LmxpbmsoaSksbj10LnNoYXJlZDtyZXR1cm4gZS5zZXQobi5mcmFtZWJ1ZmZlciwiLm5leHQiLHIpLG49bi5jb250ZXh0LGUuc2V0KG4sIi5mcmFtZWJ1ZmZlcldpZHRoIixyKyIud2lkdGgiKSxlLnNldChuLCIuZnJhbWVidWZmZXJIZWlnaHQiLHIrIi5oZWlnaHQiKSxyfSkpKTpGKChmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkO3JldHVybiBlLnNldChyLmZyYW1lYnVmZmVyLCIubmV4dCIsIm51bGwiKSxyPXIuY29udGV4dCxlLnNldChyLCIuZnJhbWVidWZmZXJXaWR0aCIscisiLmRyYXdpbmdCdWZmZXJXaWR0aCIpLGUuc2V0KHIsIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiLmRyYXdpbmdCdWZmZXJIZWlnaHQiKSwibnVsbCJ9KSl9aWYoImZyYW1lYnVmZmVyImluIG4pe3ZhciBhPW4uZnJhbWVidWZmZXI7cmV0dXJuIEIoYSwoZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGEpLG49dC5zaGFyZWQsaT1uLmZyYW1lYnVmZmVyO3I9ZS5kZWYoaSwiLmdldEZyYW1lYnVmZmVyKCIsciwiKSIpO3JldHVybiBlLnNldChpLCIubmV4dCIsciksbj1uLmNvbnRleHQsZS5zZXQobiwiLmZyYW1lYnVmZmVyV2lkdGgiLHIrIj8iK3IrIi53aWR0aDoiK24rIi5kcmF3aW5nQnVmZmVyV2lkdGgiKSxlLnNldChuLCIuZnJhbWVidWZmZXJIZWlnaHQiLHIrIj8iK3IrIi5oZWlnaHQ6IituKyIuZHJhd2luZ0J1ZmZlckhlaWdodCIpLHJ9KSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdyh0LHIsbil7ZnVuY3Rpb24gaSh0KXtpZih0IGluIGEpe3ZhciByPWUuaWQoYVt0XSk7cmV0dXJuKHQ9RigoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKSkuaWQ9cix0fWlmKHQgaW4gbyl7dmFyIG49b1t0XTtyZXR1cm4gQihuLChmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsbik7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnN0cmluZ3MsIi5pZCgiLHIsIikiKX0pKX1yZXR1cm4gbnVsbH12YXIgYT10LnN0YXRpYyxvPXQuZHluYW1pYyxzPWkoImZyYWciKSxsPWkoInZlcnQiKSxjPW51bGw7cmV0dXJuIFIocykmJlIobCk/KGM9aC5wcm9ncmFtKGwuaWQscy5pZCxudWxsLG4pLHQ9RigoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saW5rKGMpfSkpKTp0PW5ldyBEKHMmJnMudGhpc0RlcHx8bCYmbC50aGlzRGVwLHMmJnMuY29udGV4dERlcHx8bCYmbC5jb250ZXh0RGVwLHMmJnMucHJvcERlcHx8bCYmbC5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciByLG4saT10LnNoYXJlZC5zaGFkZXI7cmV0dXJuIHI9cz9zLmFwcGVuZCh0LGUpOmUuZGVmKGksIi4iLCJmcmFnIiksbj1sP2wuYXBwZW5kKHQsZSk6ZS5kZWYoaSwiLiIsInZlcnQiKSxlLmRlZihpKyIucHJvZ3JhbSgiK24rIiwiK3IrIikiKX0pKSx7ZnJhZzpzLHZlcnQ6bCxwcm9nVmFyOnQscHJvZ3JhbTpjfX1mdW5jdGlvbiBUKHQsZSl7ZnVuY3Rpb24gcih0LGUpe2lmKHQgaW4gbil7dmFyIHI9MHxuW3RdO3JldHVybiBGKChmdW5jdGlvbih0LG4pe3JldHVybiBlJiYodC5PRkZTRVQ9cikscn0pKX1pZih0IGluIGkpe3ZhciBvPWlbdF07cmV0dXJuIEIobywoZnVuY3Rpb24odCxyKXt2YXIgbj10Lmludm9rZShyLG8pO3JldHVybiBlJiYodC5PRkZTRVQ9biksbn0pKX1yZXR1cm4gZSYmYT9GKChmdW5jdGlvbih0LGUpe3JldHVybiB0Lk9GRlNFVD0iMCIsMH0pKTpudWxsfXZhciBuPXQuc3RhdGljLGk9dC5keW5hbWljLGE9ZnVuY3Rpb24oKXtpZigiZWxlbWVudHMiaW4gbil7dmFyIHQ9bi5lbGVtZW50czt6KHQpP3Q9by5nZXRFbGVtZW50cyhvLmNyZWF0ZSh0LCEwKSk6dCYmKHQ9by5nZXRFbGVtZW50cyh0KSk7dmFyIGU9RigoZnVuY3Rpb24oZSxyKXtpZih0KXt2YXIgbj1lLmxpbmsodCk7cmV0dXJuIGUuRUxFTUVOVFM9bn1yZXR1cm4gZS5FTEVNRU5UUz1udWxsfSkpO3JldHVybiBlLnZhbHVlPXQsZX1pZigiZWxlbWVudHMiaW4gaSl7dmFyIHI9aS5lbGVtZW50cztyZXR1cm4gQihyLChmdW5jdGlvbih0LGUpe3ZhciBuPShpPXQuc2hhcmVkKS5pc0J1ZmZlckFyZ3MsaT1pLmVsZW1lbnRzLGE9dC5pbnZva2UoZSxyKSxvPWUuZGVmKCJudWxsIik7bj1lLmRlZihuLCIoIixhLCIpIiksYT10LmNvbmQobikudGhlbihvLCI9IixpLCIuY3JlYXRlU3RyZWFtKCIsYSwiKTsiKS5lbHNlKG8sIj0iLGksIi5nZXRFbGVtZW50cygiLGEsIik7Iik7cmV0dXJuIGUuZW50cnkoYSksZS5leGl0KHQuY29uZChuKS50aGVuKGksIi5kZXN0cm95U3RyZWFtKCIsbywiKTsiKSksdC5FTEVNRU5UUz1vfSkpfXJldHVybiBudWxsfSgpLHM9cigib2Zmc2V0IiwhMCk7cmV0dXJue2VsZW1lbnRzOmEscHJpbWl0aXZlOmZ1bmN0aW9uKCl7aWYoInByaW1pdGl2ZSJpbiBuKXt2YXIgdD1uLnByaW1pdGl2ZTtyZXR1cm4gRigoZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnRbdF19KSl9aWYoInByaW1pdGl2ZSJpbiBpKXt2YXIgZT1pLnByaW1pdGl2ZTtyZXR1cm4gQihlLChmdW5jdGlvbih0LHIpe3ZhciBuPXQuY29uc3RhbnRzLnByaW1UeXBlcyxpPXQuaW52b2tlKHIsZSk7cmV0dXJuIHIuZGVmKG4sIlsiLGksIl0iKX0pKX1yZXR1cm4gYT9SKGEpP2EudmFsdWU/RigoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnByaW1UeXBlIil9KSk6RigoZnVuY3Rpb24oKXtyZXR1cm4gNH0pKTpuZXcgRChhLnRoaXNEZXAsYS5jb250ZXh0RGVwLGEucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgcj10LkVMRU1FTlRTO3JldHVybiBlLmRlZihyLCI/IixyLCIucHJpbVR5cGU6Iiw0KX0pKTpudWxsfSgpLGNvdW50OmZ1bmN0aW9uKCl7aWYoImNvdW50ImluIG4pe3ZhciB0PTB8bi5jb3VudDtyZXR1cm4gRigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX1pZigiY291bnQiaW4gaSl7dmFyIGU9aS5jb3VudDtyZXR1cm4gQihlLChmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSkpfXJldHVybiBhP1IoYSk/YT9zP25ldyBEKHMudGhpc0RlcCxzLmNvbnRleHREZXAscy5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIudmVydENvdW50LSIsdC5PRkZTRVQpfSkpOkYoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuRUxFTUVOVFMsIi52ZXJ0Q291bnQiKX0pKTpGKChmdW5jdGlvbigpe3JldHVybi0xfSkpOm5ldyBEKGEudGhpc0RlcHx8cy50aGlzRGVwLGEuY29udGV4dERlcHx8cy5jb250ZXh0RGVwLGEucHJvcERlcHx8cy5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciByPXQuRUxFTUVOVFM7cmV0dXJuIHQuT0ZGU0VUP2UuZGVmKHIsIj8iLHIsIi52ZXJ0Q291bnQtIix0Lk9GRlNFVCwiOi0xIik6ZS5kZWYociwiPyIsciwiLnZlcnRDb3VudDotMSIpfSkpOm51bGx9KCksaW5zdGFuY2VzOnIoImluc3RhbmNlcyIsITEpLG9mZnNldDpzfX1mdW5jdGlvbiBrKHQscil7dmFyIG49dC5zdGF0aWMsYT10LmR5bmFtaWMsbz17fTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9blt0XSxhPWUuaWQodCkscz1uZXcgWDtpZih6KHIpKXMuc3RhdGU9MSxzLmJ1ZmZlcj1pLmdldEJ1ZmZlcihpLmNyZWF0ZShyLDM0OTYyLCExLCEwKSkscy50eXBlPTA7ZWxzZSBpZihjPWkuZ2V0QnVmZmVyKHIpKXMuc3RhdGU9MSxzLmJ1ZmZlcj1jLHMudHlwZT0wO2Vsc2UgaWYoImNvbnN0YW50ImluIHIpe3ZhciBsPXIuY29uc3RhbnQ7cy5idWZmZXI9Im51bGwiLHMuc3RhdGU9MiwibnVtYmVyIj09dHlwZW9mIGw/cy54PWw6d3QuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtlPGwubGVuZ3RoJiYoc1t0XT1sW2VdKX0pKX1lbHNle3ZhciBjPXooci5idWZmZXIpP2kuZ2V0QnVmZmVyKGkuY3JlYXRlKHIuYnVmZmVyLDM0OTYyLCExLCEwKSk6aS5nZXRCdWZmZXIoci5idWZmZXIpLHU9MHxyLm9mZnNldCxoPTB8ci5zdHJpZGUsZj0wfHIuc2l6ZSxwPSEhci5ub3JtYWxpemVkLGQ9MDsidHlwZSJpbiByJiYoZD1RW3IudHlwZV0pLHI9MHxyLmRpdmlzb3Iscy5idWZmZXI9YyxzLnN0YXRlPTEscy5zaXplPWYscy5ub3JtYWxpemVkPXAscy50eXBlPWR8fGMuZHR5cGUscy5vZmZzZXQ9dSxzLnN0cmlkZT1oLHMuZGl2aXNvcj1yfW9bdF09RigoZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHJpYkNhY2hlO2lmKGEgaW4gcilyZXR1cm4gclthXTt2YXIgbj17aXNTdHJlYW06ITF9O3JldHVybiBPYmplY3Qua2V5cyhzKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuW3RdPXNbdF19KSkscy5idWZmZXImJihuLmJ1ZmZlcj10Lmxpbmsocy5idWZmZXIpLG4udHlwZT1uLnR5cGV8fG4uYnVmZmVyKyIuZHR5cGUiKSxyW2FdPW59KSl9KSksT2JqZWN0LmtleXMoYSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9YVt0XTtvW3RdPUIoZSwoZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKHQpe3IobFt0XSwiPSIsaSwiLiIsdCwifDA7Iil9dmFyIGk9dC5pbnZva2UocixlKSxhPXQuc2hhcmVkLG89dC5jb25zdGFudHMscz1hLmlzQnVmZmVyQXJncyxsPShhPWEuYnVmZmVyLHtpc1N0cmVhbTpyLmRlZighMSl9KSxjPW5ldyBYO2Muc3RhdGU9MSxPYmplY3Qua2V5cyhjKS5mb3JFYWNoKChmdW5jdGlvbih0KXtsW3RdPXIuZGVmKCIiK2NbdF0pfSkpO3ZhciB1PWwuYnVmZmVyLGg9bC50eXBlO3JldHVybiByKCJpZigiLHMsIigiLGksIikpeyIsbC5pc1N0cmVhbSwiPXRydWU7Iix1LCI9IixhLCIuY3JlYXRlU3RyZWFtKCIsMzQ5NjIsIiwiLGksIik7IixoLCI9Iix1LCIuZHR5cGU7IiwifWVsc2V7Iix1LCI9IixhLCIuZ2V0QnVmZmVyKCIsaSwiKTsiLCJpZigiLHUsIil7IixoLCI9Iix1LCIuZHR5cGU7IiwnfWVsc2UgaWYoImNvbnN0YW50IiBpbiAnLGksIil7IixsLnN0YXRlLCI9IiwyLCI7IiwiaWYodHlwZW9mICIraSsnLmNvbnN0YW50ID09PSAibnVtYmVyIil7JyxsW3d0WzBdXSwiPSIsaSwiLmNvbnN0YW50OyIsd3Quc2xpY2UoMSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XX0pKS5qb2luKCI9IiksIj0wOyIsIn1lbHNleyIsd3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBsW3RdKyI9IitpKyIuY29uc3RhbnQubGVuZ3RoPiIrZSsiPyIraSsiLmNvbnN0YW50WyIrZSsiXTowOyJ9KSkuam9pbigiIiksIn19ZWxzZXsiLCJpZigiLHMsIigiLGksIi5idWZmZXIpKXsiLHUsIj0iLGEsIi5jcmVhdGVTdHJlYW0oIiwzNDk2MiwiLCIsaSwiLmJ1ZmZlcik7IiwifWVsc2V7Iix1LCI9IixhLCIuZ2V0QnVmZmVyKCIsaSwiLmJ1ZmZlcik7IiwifSIsaCwnPSJ0eXBlIiBpbiAnLGksIj8iLG8uZ2xUeXBlcywiWyIsaSwiLnR5cGVdOiIsdSwiLmR0eXBlOyIsbC5ub3JtYWxpemVkLCI9ISEiLGksIi5ub3JtYWxpemVkOyIpLG4oInNpemUiKSxuKCJvZmZzZXQiKSxuKCJzdHJpZGUiKSxuKCJkaXZpc29yIikscigifX0iKSxyLmV4aXQoImlmKCIsbC5pc1N0cmVhbSwiKXsiLGEsIi5kZXN0cm95U3RyZWFtKCIsdSwiKTsiLCJ9IiksbH0pKX0pKSxvfWZ1bmN0aW9uIE0odCxlLG4saSxvKXtmdW5jdGlvbiBzKHQpe3ZhciBlPWNbdF07ZSYmKGZbdF09ZSl9dmFyIGw9ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIj09dHlwZW9mKHI9dC5zdGF0aWMpLmZyYWcmJiJzdHJpbmciPT10eXBlb2Ygci52ZXJ0KXtpZigwPE9iamVjdC5rZXlzKGUuZHluYW1pYykubGVuZ3RoKXJldHVybiBudWxsO3ZhciByPWUuc3RhdGljLG49T2JqZWN0LmtleXMocik7aWYoMDxuLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiByW25bMF1dKXtmb3IodmFyIGk9W10sYT0wO2E8bi5sZW5ndGg7KythKWkucHVzaChbMHxyW25bYV1dLG5bYV1dKTtyZXR1cm4gaX19cmV0dXJuIG51bGx9KHQsZSksYz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtpZih0IGluIGkpe3ZhciByPWlbdF07dD0hMDt2YXIgbixvLHM9MHxyLngsbD0wfHIueTtyZXR1cm4id2lkdGgiaW4gcj9uPTB8ci53aWR0aDp0PSExLCJoZWlnaHQiaW4gcj9vPTB8ci5oZWlnaHQ6dD0hMSxuZXcgRCghdCYmZSYmZS50aGlzRGVwLCF0JiZlJiZlLmNvbnRleHREZXAsIXQmJmUmJmUucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgaT10LnNoYXJlZC5jb250ZXh0LGE9bjsid2lkdGgiaW4gcnx8KGE9ZS5kZWYoaSwiLiIsImZyYW1lYnVmZmVyV2lkdGgiLCItIixzKSk7dmFyIGM9bztyZXR1cm4iaGVpZ2h0ImluIHJ8fChjPWUuZGVmKGksIi4iLCJmcmFtZWJ1ZmZlckhlaWdodCIsIi0iLGwpKSxbcyxsLGEsY119KSl9aWYodCBpbiBhKXt2YXIgYz1hW3RdO3JldHVybiB0PUIoYywoZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGMpLG49dC5zaGFyZWQuY29udGV4dCxpPWUuZGVmKHIsIi54fDAiKSxhPWUuZGVmKHIsIi55fDAiKTtyZXR1cm5baSxhLGUuZGVmKCcid2lkdGgiIGluICcsciwiPyIsciwiLndpZHRofDA6IiwiKCIsbiwiLiIsImZyYW1lYnVmZmVyV2lkdGgiLCItIixpLCIpIikscj1lLmRlZignImhlaWdodCIgaW4gJyxyLCI/IixyLCIuaGVpZ2h0fDA6IiwiKCIsbiwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IiwiLSIsYSwiKSIpXX0pKSxlJiYodC50aGlzRGVwPXQudGhpc0RlcHx8ZS50aGlzRGVwLHQuY29udGV4dERlcD10LmNvbnRleHREZXB8fGUuY29udGV4dERlcCx0LnByb3BEZXA9dC5wcm9wRGVwfHxlLnByb3BEZXApLHR9cmV0dXJuIGU/bmV3IEQoZS50aGlzRGVwLGUuY29udGV4dERlcCxlLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQuY29udGV4dDtyZXR1cm5bMCwwLGUuZGVmKHIsIi4iLCJmcmFtZWJ1ZmZlcldpZHRoIiksZS5kZWYociwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IildfSkpOm51bGx9dmFyIGk9dC5zdGF0aWMsYT10LmR5bmFtaWM7aWYodD1uKCJ2aWV3cG9ydCIpKXt2YXIgbz10O3Q9bmV3IEQodC50aGlzRGVwLHQuY29udGV4dERlcCx0LnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9by5hcHBlbmQodCxlKSxuPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuIGUuc2V0KG4sIi52aWV3cG9ydFdpZHRoIixyWzJdKSxlLnNldChuLCIudmlld3BvcnRIZWlnaHQiLHJbM10pLHJ9KSl9cmV0dXJue3ZpZXdwb3J0OnQsc2Npc3Nvcl9ib3g6bigic2Npc3Nvci5ib3giKX19KHQsZD1fKHQpKSxoPVQodCksZj1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljLGk9e307cmV0dXJuIHJ0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxhKXtpZih0IGluIHIpe3ZhciBzPWUoclt0XSk7aVtvXT1GKChmdW5jdGlvbigpe3JldHVybiBzfSkpfWVsc2UgaWYodCBpbiBuKXt2YXIgbD1uW3RdO2lbb109QihsLChmdW5jdGlvbih0LGUpe3JldHVybiBhKHQsZSx0Lmludm9rZShlLGwpKX0pKX19dmFyIG89dih0KTtzd2l0Y2godCl7Y2FzZSJjdWxsLmVuYWJsZSI6Y2FzZSJibGVuZC5lbmFibGUiOmNhc2UiZGl0aGVyIjpjYXNlInN0ZW5jaWwuZW5hYmxlIjpjYXNlImRlcHRoLmVuYWJsZSI6Y2FzZSJzY2lzc29yLmVuYWJsZSI6Y2FzZSJwb2x5Z29uT2Zmc2V0LmVuYWJsZSI6Y2FzZSJzYW1wbGUuYWxwaGEiOmNhc2Uic2FtcGxlLmVuYWJsZSI6Y2FzZSJkZXB0aC5tYXNrIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSkpO2Nhc2UiZGVwdGguZnVuYyI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiBNdFt0XX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHQuY29uc3RhbnRzLmNvbXBhcmVGdW5jcywiWyIsciwiXSIpfSkpO2Nhc2UiZGVwdGgucmFuZ2UiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKCIrIixyLCJbMF0iKSxlPWUuZGVmKCIrIixyLCJbMV0iKV19KSk7Y2FzZSJibGVuZC5mdW5jIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuW2t0WyJzcmNSR0IiaW4gdD90LnNyY1JHQjp0LnNyY10sa3RbImRzdFJHQiJpbiB0P3QuZHN0UkdCOnQuZHN0XSxrdFsic3JjQWxwaGEiaW4gdD90LnNyY0FscGhhOnQuc3JjXSxrdFsiZHN0QWxwaGEiaW4gdD90LmRzdEFscGhhOnQuZHN0XV19KSwoZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gZS5kZWYoJyInLHQsbiwnIiBpbiAnLHIsIj8iLHIsIi4iLHQsbiwiOiIsciwiLiIsdCl9dD10LmNvbnN0YW50cy5ibGVuZEZ1bmNzO3ZhciBpPW4oInNyYyIsIlJHQiIpLGE9bigiZHN0IiwiUkdCIiksbz0oaT1lLmRlZih0LCJbIixpLCJdIiksZS5kZWYodCwiWyIsbigic3JjIiwiQWxwaGEiKSwiXSIpKTtyZXR1cm5baSxhPWUuZGVmKHQsIlsiLGEsIl0iKSxvLHQ9ZS5kZWYodCwiWyIsbigiZHN0IiwiQWxwaGEiKSwiXSIpXX0pKTtjYXNlImJsZW5kLmVxdWF0aW9uIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P1tKW3RdLEpbdF1dOiJvYmplY3QiPT10eXBlb2YgdD9bSlt0LnJnYl0sSlt0LmFscGhhXV06dm9pZCAwfSksKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNvbnN0YW50cy5ibGVuZEVxdWF0aW9ucyxpPWUuZGVmKCksYT1lLmRlZigpO3JldHVybih0PXQuY29uZCgidHlwZW9mICIsciwnPT09InN0cmluZyInKSkudGhlbihpLCI9IixhLCI9IixuLCJbIixyLCJdOyIpLHQuZWxzZShpLCI9IixuLCJbIixyLCIucmdiXTsiLGEsIj0iLG4sIlsiLHIsIi5hbHBoYV07IiksZSh0KSxbaSxhXX0pKTtjYXNlImJsZW5kLmNvbG9yIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIGEoNCwoZnVuY3Rpb24oZSl7cmV0dXJuK3RbZV19KSl9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKDQsKGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlZigiKyIsciwiWyIsdCwiXSIpfSkpfSkpO2Nhc2Uic3RlbmNpbC5tYXNrIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIDB8dH0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIsInwwIil9KSk7Y2FzZSJzdGVuY2lsLmZ1bmMiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm5bTXRbdC5jbXB8fCJrZWVwIl0sdC5yZWZ8fDAsIm1hc2siaW4gdD90Lm1hc2s6LTFdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bdD1lLmRlZignImNtcCIgaW4gJyxyLCI/Iix0LmNvbnN0YW50cy5jb21wYXJlRnVuY3MsIlsiLHIsIi5jbXBdIiwiOiIsNzY4MCksZS5kZWYociwiLnJlZnwwIiksZT1lLmRlZignIm1hc2siIGluICcsciwiPyIsciwiLm1hc2t8MDotMSIpXX0pKTtjYXNlInN0ZW5jaWwub3BGcm9udCI6Y2FzZSJzdGVuY2lsLm9wQmFjayI6cmV0dXJuIGUoKGZ1bmN0aW9uKGUpe3JldHVyblsic3RlbmNpbC5vcEJhY2siPT09dD8xMDI5OjEwMjgsQXRbZS5mYWlsfHwia2VlcCJdLEF0W2UuemZhaWx8fCJrZWVwIl0sQXRbZS56cGFzc3x8ImtlZXAiXV19KSwoZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHIuZGVmKCciJyx0LCciIGluICcsbiwiPyIsYSwiWyIsbiwiLiIsdCwiXToiLDc2ODApfXZhciBhPWUuY29uc3RhbnRzLnN0ZW5jaWxPcHM7cmV0dXJuWyJzdGVuY2lsLm9wQmFjayI9PT10PzEwMjk6MTAyOCxpKCJmYWlsIiksaSgiemZhaWwiKSxpKCJ6cGFzcyIpXX0pKTtjYXNlInBvbHlnb25PZmZzZXQub2Zmc2V0IjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuWzB8dC5mYWN0b3IsMHx0LnVuaXRzXX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKHIsIi5mYWN0b3J8MCIpLGU9ZS5kZWYociwiLnVuaXRzfDAiKV19KSk7Y2FzZSJjdWxsLmZhY2UiOnJldHVybiBlKChmdW5jdGlvbih0KXt2YXIgZT0wO3JldHVybiJmcm9udCI9PT10P2U9MTAyODoiYmFjayI9PT10JiYoZT0xMDI5KSxlfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYociwnPT09ImZyb250Ij8nLDEwMjgsIjoiLDEwMjkpfSkpO2Nhc2UibGluZVdpZHRoIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiByfSkpO2Nhc2UiZnJvbnRGYWNlIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIFN0W3RdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYocisnPT09ImN3Ij8yMzA0OjIzMDUnKX0pKTtjYXNlImNvbG9yTWFzayI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuISF0fSkpfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYSg0LChmdW5jdGlvbih0KXtyZXR1cm4iISEiK3IrIlsiK3QrIl0ifSkpfSkpO2Nhc2Uic2FtcGxlLmNvdmVyYWdlIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuWyJ2YWx1ZSJpbiB0P3QudmFsdWU6MSwhIXQuaW52ZXJ0XX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKCcidmFsdWUiIGluICcsciwiPysiLHIsIi52YWx1ZToxIiksZT1lLmRlZigiISEiLHIsIi5pbnZlcnQiKV19KSl9fSkpLGl9KHQpLHA9dyh0LDAsbCk7cygidmlld3BvcnQiKSxzKHYoInNjaXNzb3IuYm94IikpO3ZhciBkLGc9MDxPYmplY3Qua2V5cyhmKS5sZW5ndGg7aWYoKGQ9e2ZyYW1lYnVmZmVyOmQsZHJhdzpoLHNoYWRlcjpwLHN0YXRlOmYsZGlydHk6ZyxzY29wZVZBTzpudWxsLGRyYXdWQU86bnVsbCx1c2VWQU86ITEsYXR0cmlidXRlczp7fX0pLnByb2ZpbGU9ZnVuY3Rpb24odCl7dmFyIGUscj10LnN0YXRpYztpZih0PXQuZHluYW1pYywicHJvZmlsZSJpbiByKXt2YXIgbj0hIXIucHJvZmlsZTsoZT1GKChmdW5jdGlvbih0LGUpe3JldHVybiBufSkpKS5lbmFibGU9bn1lbHNlIGlmKCJwcm9maWxlImluIHQpe3ZhciBpPXQucHJvZmlsZTtlPUIoaSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnZva2UoZSxpKX0pKX1yZXR1cm4gZX0odCksZC51bmlmb3Jtcz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljLGk9e307cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLG49clt0XTtpZigibnVtYmVyIj09dHlwZW9mIG58fCJib29sZWFuIj09dHlwZW9mIG4pZT1GKChmdW5jdGlvbigpe3JldHVybiBufSkpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pe3ZhciBvPW4uX3JlZ2xUeXBlOyJ0ZXh0dXJlMmQiPT09b3x8InRleHR1cmVDdWJlIj09PW8/ZT1GKChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rKG4pfSkpOiJmcmFtZWJ1ZmZlciIhPT1vJiYiZnJhbWVidWZmZXJDdWJlIiE9PW98fChlPUYoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobi5jb2xvclswXSl9KSkpfWVsc2UgbShuKSYmKGU9RigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFsLmRlZigiWyIsYShuLmxlbmd0aCwoZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19KSksIl0iKX0pKSk7ZS52YWx1ZT1uLGlbdF09ZX0pKSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uW3RdO2lbdF09QihlLChmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSkpfSkpLGl9KG4pLGQuZHJhd1ZBTz1kLnNjb3BlVkFPPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWM7aWYoInZhbyJpbiByKXt2YXIgaT1yLnZhbztyZXR1cm4gbnVsbCE9PWkmJm51bGw9PT11LmdldFZBTyhpKSYmKGk9dS5jcmVhdGVWQU8oaSkpLEYoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsodS5nZXRWQU8oaSkpfSkpfWlmKCJ2YW8iaW4gbil7dmFyIGE9bi52YW87cmV0dXJuIEIoYSwoZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGEpO3JldHVybiBlLmRlZih0LnNoYXJlZC52YW8rIi5nZXRWQU8oIityKyIpIil9KSl9cmV0dXJuIG51bGx9KHQpLCFkLmRyYXdWQU8mJnAucHJvZ3JhbSYmIWwmJnIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyl7dmFyIHk9ITA7aWYodD1wLnByb2dyYW0uYXR0cmlidXRlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0PWUuc3RhdGljW3RdLHk9eSYmISF0LHR9KSkseSYmMDx0Lmxlbmd0aCl7dmFyIHg9dS5nZXRWQU8odS5jcmVhdGVWQU8odCkpO2QuZHJhd1ZBTz1uZXcgRChudWxsLG51bGwsbnVsbCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saW5rKHgpfSkpLGQudXNlVkFPPSEwfX1yZXR1cm4gbD9kLnVzZVZBTz0hMDpkLmF0dHJpYnV0ZXM9ayhlKSxkLmNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5zdGF0aWMscj10LmR5bmFtaWMsbj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9ZVt0XTtuW3RdPUYoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiByfHwiYm9vbGVhbiI9PXR5cGVvZiByPyIiK3I6dC5saW5rKHIpfSkpfSkpLE9iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07blt0XT1CKGUsKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KSl9KSksbn0oaSksZH1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj10LnNoYXJlZC5jb250ZXh0LGk9dC5zY29wZSgpO09iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKGEpe2Uuc2F2ZShuLCIuIithKSxpKG4sIi4iLGEsIj0iLHJbYV0uYXBwZW5kKHQsZSksIjsiKX0pKSxlKGkpfWZ1bmN0aW9uIFModCxlLHIsbil7dmFyIGksYT0ocz10LnNoYXJlZCkuZ2wsbz1zLmZyYW1lYnVmZmVyOyQmJihpPWUuZGVmKHMuZXh0ZW5zaW9ucywiLndlYmdsX2RyYXdfYnVmZmVycyIpKTt2YXIgcz0obD10LmNvbnN0YW50cykuZHJhd0J1ZmZlcixsPWwuYmFja0J1ZmZlcjt0PXI/ci5hcHBlbmQodCxlKTplLmRlZihvLCIubmV4dCIpLG58fGUoImlmKCIsdCwiIT09IixvLCIuY3VyKXsiKSxlKCJpZigiLHQsIil7IixhLCIuYmluZEZyYW1lYnVmZmVyKCIsMzYxNjAsIiwiLHQsIi5mcmFtZWJ1ZmZlcik7IiksJCYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLHMsIlsiLHQsIi5jb2xvckF0dGFjaG1lbnRzLmxlbmd0aF0pOyIpLGUoIn1lbHNleyIsYSwiLmJpbmRGcmFtZWJ1ZmZlcigiLDM2MTYwLCIsbnVsbCk7IiksJCYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLGwsIik7IiksZSgifSIsbywiLmN1cj0iLHQsIjsiKSxufHxlKCJ9Iil9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49dC5zaGFyZWQsaT1uLmdsLG89dC5jdXJyZW50LHM9dC5uZXh0LGw9bi5jdXJyZW50LGM9bi5uZXh0LHU9dC5jb25kKGwsIi5kaXJ0eSIpO3J0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuLGg7aWYoISgoZT12KGUpKWluIHIuc3RhdGUpKWlmKGUgaW4gcyl7bj1zW2VdLGg9b1tlXTt2YXIgZj1hKHR0W2VdLmxlbmd0aCwoZnVuY3Rpb24odCl7cmV0dXJuIHUuZGVmKG4sIlsiLHQsIl0iKX0pKTt1KHQuY29uZChmLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiIT09IitoKyJbIitlKyJdIn0pKS5qb2luKCJ8fCIpKS50aGVuKGksIi4iLGF0W2VdLCIoIixmLCIpOyIsZi5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgrIlsiK2UrIl09Iit0fSkpLmpvaW4oIjsiKSwiOyIpKX1lbHNlIG49dS5kZWYoYywiLiIsZSksZj10LmNvbmQobiwiIT09IixsLCIuIixlKSx1KGYpLGUgaW4gaXQ/Zih0LmNvbmQobikudGhlbihpLCIuZW5hYmxlKCIsaXRbZV0sIik7IikuZWxzZShpLCIuZGlzYWJsZSgiLGl0W2VdLCIpOyIpLGwsIi4iLGUsIj0iLG4sIjsiKTpmKGksIi4iLGF0W2VdLCIoIixuLCIpOyIsbCwiLiIsZSwiPSIsbiwiOyIpfSkpLDA9PT1PYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJnUobCwiLmRpcnR5PWZhbHNlOyIpLGUodSl9ZnVuY3Rpb24gQyh0LGUscixuKXt2YXIgaT10LnNoYXJlZCxhPXQuY3VycmVudCxvPWkuY3VycmVudCxzPWkuZ2w7TyhPYmplY3Qua2V5cyhyKSkuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIGw9cltpXTtpZighbnx8bihsKSl7dmFyIGM9bC5hcHBlbmQodCxlKTtpZihpdFtpXSl7dmFyIHU9aXRbaV07UihsKT9lKHMsYz8iLmVuYWJsZSgiOiIuZGlzYWJsZSgiLHUsIik7Iik6ZSh0LmNvbmQoYykudGhlbihzLCIuZW5hYmxlKCIsdSwiKTsiKS5lbHNlKHMsIi5kaXNhYmxlKCIsdSwiKTsiKSksZShvLCIuIixpLCI9IixjLCI7Iil9ZWxzZSBpZihtKGMpKXt2YXIgaD1hW2ldO2UocywiLiIsYXRbaV0sIigiLGMsIik7IixjLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gaCsiWyIrZSsiXT0iK3R9KSkuam9pbigiOyIpLCI7Iil9ZWxzZSBlKHMsIi4iLGF0W2ldLCIoIixjLCIpOyIsbywiLiIsaSwiPSIsYywiOyIpfX0pKX1mdW5jdGlvbiBMKHQsZSl7SyYmKHQuaW5zdGFuY2luZz1lLmRlZih0LnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKX1mdW5jdGlvbiBQKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSgpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgcGVyZm9ybWFuY2U/IkRhdGUubm93KCkiOiJwZXJmb3JtYW5jZS5ub3coKSJ9ZnVuY3Rpb24gbyh0KXt0KGM9ZS5kZWYoKSwiPSIsYSgpLCI7IiksInN0cmluZyI9PXR5cGVvZiBpP3QoZiwiLmNvdW50Kz0iLGksIjsiKTp0KGYsIi5jb3VudCsrOyIpLGQmJihuP3QodT1lLmRlZigpLCI9IixnLCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKTsiKTp0KGcsIi5iZWdpblF1ZXJ5KCIsZiwiKTsiKSl9ZnVuY3Rpb24gcyh0KXt0KGYsIi5jcHVUaW1lKz0iLGEoKSwiLSIsYywiOyIpLGQmJihuP3QoZywiLnB1c2hTY29wZVN0YXRzKCIsdSwiLCIsZywiLmdldE51bVBlbmRpbmdRdWVyaWVzKCksIixmLCIpOyIpOnQoZywiLmVuZFF1ZXJ5KCk7IikpfWZ1bmN0aW9uIGwodCl7dmFyIHI9ZS5kZWYocCwiLnByb2ZpbGUiKTtlKHAsIi5wcm9maWxlPSIsdCwiOyIpLGUuZXhpdChwLCIucHJvZmlsZT0iLHIsIjsiKX12YXIgYyx1LGg9dC5zaGFyZWQsZj10LnN0YXRzLHA9aC5jdXJyZW50LGc9aC50aW1lcjtpZihyPXIucHJvZmlsZSl7aWYoUihyKSlyZXR1cm4gdm9pZChyLmVuYWJsZT8obyhlKSxzKGUuZXhpdCksbCgidHJ1ZSIpKTpsKCJmYWxzZSIpKTtsKHI9ci5hcHBlbmQodCxlKSl9ZWxzZSByPWUuZGVmKHAsIi5wcm9maWxlIik7byhoPXQuYmxvY2soKSksZSgiaWYoIixyLCIpeyIsaCwifSIpLHModD10LmJsb2NrKCkpLGUuZXhpdCgiaWYoIixyLCIpeyIsdCwifSIpfWZ1bmN0aW9uIE4odCxlLHIsbixpKXtmdW5jdGlvbiBhKHIsbixpKXtmdW5jdGlvbiBhKCl7ZSgiaWYoISIsdSwiLmJ1ZmZlcil7IixsLCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoIixjLCIpO30iKTt2YXIgcixhPWkudHlwZTtyPWkuc2l6ZT9lLmRlZihpLnNpemUsInx8IixuKTpuLGUoImlmKCIsdSwiLnR5cGUhPT0iLGEsInx8Iix1LCIuc2l6ZSE9PSIsciwifHwiLHAubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdSsiLiIrdCsiIT09IitpW3RdfSkpLmpvaW4oInx8IiksIil7IixsLCIuYmluZEJ1ZmZlcigiLDM0OTYyLCIsIixoLCIuYnVmZmVyKTsiLGwsIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKCIsW2MscixhLGkubm9ybWFsaXplZCxpLnN0cmlkZSxpLm9mZnNldF0sIik7Iix1LCIudHlwZT0iLGEsIjsiLHUsIi5zaXplPSIsciwiOyIscC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB1KyIuIit0KyI9IitpW3RdKyI7In0pKS5qb2luKCIiKSwifSIpLEsmJihhPWkuZGl2aXNvcixlKCJpZigiLHUsIi5kaXZpc29yIT09IixhLCIpeyIsdC5pbnN0YW5jaW5nLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsW2MsYV0sIik7Iix1LCIuZGl2aXNvcj0iLGEsIjt9IikpfWZ1bmN0aW9uIHMoKXtlKCJpZigiLHUsIi5idWZmZXIpeyIsbCwiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGMsIik7Iix1LCIuYnVmZmVyPW51bGw7IiwifWlmKCIsd3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB1KyIuIit0KyIhPT0iK2ZbZV19KSkuam9pbigifHwiKSwiKXsiLGwsIi52ZXJ0ZXhBdHRyaWI0ZigiLGMsIiwiLGYsIik7Iix3dC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrIi4iK3QrIj0iK2ZbZV0rIjsifSkpLmpvaW4oIiIpLCJ9Iil9dmFyIGw9by5nbCxjPWUuZGVmKHIsIi5sb2NhdGlvbiIpLHU9ZS5kZWYoby5hdHRyaWJ1dGVzLCJbIixjLCJdIik7cj1pLnN0YXRlO3ZhciBoPWkuYnVmZmVyLGY9W2kueCxpLnksaS56LGkud10scD1bImJ1ZmZlciIsIm5vcm1hbGl6ZWQiLCJvZmZzZXQiLCJzdHJpZGUiXTsxPT09cj9hKCk6Mj09PXI/cygpOihlKCJpZigiLHIsIj09PSIsMSwiKXsiKSxhKCksZSgifWVsc2V7IikscygpLGUoIn0iKSl9dmFyIG89dC5zaGFyZWQ7bi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgbyxzPW4ubmFtZSxsPXIuYXR0cmlidXRlc1tzXTtpZihsKXtpZighaShsKSlyZXR1cm47bz1sLmFwcGVuZCh0LGUpfWVsc2V7aWYoIWkoRXQpKXJldHVybjt2YXIgYz10LnNjb3BlQXR0cmliKHMpO289e30sT2JqZWN0LmtleXMobmV3IFgpLmZvckVhY2goKGZ1bmN0aW9uKHQpe29bdF09ZS5kZWYoYywiLiIsdCl9KSl9YSh0LmxpbmsobiksZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMzU2NjQ6Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiAyO2Nhc2UgMzU2NjU6Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiAzO2Nhc2UgMzU2NjY6Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIDF9fShuLmluZm8udHlwZSksbyl9KSl9ZnVuY3Rpb24gaih0LHIsbixpLG8pe2Zvcih2YXIgcyxsPXQuc2hhcmVkLGM9bC5nbCx1PTA7dTxpLmxlbmd0aDsrK3Upe3ZhciBoLGY9KGc9aVt1XSkubmFtZSxwPWcuaW5mby50eXBlLGQ9bi51bmlmb3Jtc1tmXSxnPXQubGluayhnKSsiLmxvY2F0aW9uIjtpZihkKXtpZighbyhkKSljb250aW51ZTtpZihSKGQpKXtpZihmPWQudmFsdWUsMzU2Nzg9PT1wfHwzNTY4MD09PXApcihjLCIudW5pZm9ybTFpKCIsZywiLCIsKHA9dC5saW5rKGYuX3RleHR1cmV8fGYuY29sb3JbMF0uX3RleHR1cmUpKSsiLmJpbmQoKSk7Iiksci5leGl0KHAsIi51bmJpbmQoKTsiKTtlbHNlIGlmKDM1Njc0PT09cHx8MzU2NzU9PT1wfHwzNTY3Nj09PXApZD0yLDM1Njc1PT09cD9kPTM6MzU2NzY9PT1wJiYoZD00KSxyKGMsIi51bmlmb3JtTWF0cml4IixkLCJmdigiLGcsIixmYWxzZSwiLGY9dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KFsiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGYpKyJdKSIpLCIpOyIpO2Vsc2V7c3dpdGNoKHApe2Nhc2UgNTEyNjpzPSIxZiI7YnJlYWs7Y2FzZSAzNTY2NDpzPSIyZiI7YnJlYWs7Y2FzZSAzNTY2NTpzPSIzZiI7YnJlYWs7Y2FzZSAzNTY2NjpzPSI0ZiI7YnJlYWs7Y2FzZSAzNTY3MDpjYXNlIDUxMjQ6cz0iMWkiO2JyZWFrO2Nhc2UgMzU2NzE6Y2FzZSAzNTY2NzpzPSIyaSI7YnJlYWs7Y2FzZSAzNTY3MjpjYXNlIDM1NjY4OnM9IjNpIjticmVhaztjYXNlIDM1NjczOnM9IjRpIjticmVhaztjYXNlIDM1NjY5OnM9IjRpIn1yKGMsIi51bmlmb3JtIixzLCIoIixnLCIsIixtKGYpP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGYpOmYsIik7Iil9Y29udGludWV9aD1kLmFwcGVuZCh0LHIpfWVsc2V7aWYoIW8oRXQpKWNvbnRpbnVlO2g9ci5kZWYobC51bmlmb3JtcywiWyIsZS5pZChmKSwiXSIpfXN3aXRjaCgzNTY3OD09PXA/cigiaWYoIixoLCImJiIsaCwnLl9yZWdsVHlwZT09PSJmcmFtZWJ1ZmZlciIpeycsaCwiPSIsaCwiLmNvbG9yWzBdOyIsIn0iKTozNTY4MD09PXAmJnIoImlmKCIsaCwiJiYiLGgsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXJDdWJlIil7JyxoLCI9IixoLCIuY29sb3JbMF07IiwifSIpLGY9MSxwKXtjYXNlIDM1Njc4OmNhc2UgMzU2ODA6cD1yLmRlZihoLCIuX3RleHR1cmUiKSxyKGMsIi51bmlmb3JtMWkoIixnLCIsIixwLCIuYmluZCgpKTsiKSxyLmV4aXQocCwiLnVuYmluZCgpOyIpO2NvbnRpbnVlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnM9IjFpIjticmVhaztjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cz0iMmkiLGY9MjticmVhaztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cz0iM2kiLGY9MzticmVhaztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cz0iNGkiLGY9NDticmVhaztjYXNlIDUxMjY6cz0iMWYiO2JyZWFrO2Nhc2UgMzU2NjQ6cz0iMmYiLGY9MjticmVhaztjYXNlIDM1NjY1OnM9IjNmIixmPTM7YnJlYWs7Y2FzZSAzNTY2NjpzPSI0ZiIsZj00O2JyZWFrO2Nhc2UgMzU2NzQ6cz0iTWF0cml4MmZ2IjticmVhaztjYXNlIDM1Njc1OnM9Ik1hdHJpeDNmdiI7YnJlYWs7Y2FzZSAzNTY3NjpzPSJNYXRyaXg0ZnYifWlmKHIoYywiLnVuaWZvcm0iLHMsIigiLGcsIiwiKSwiTSI9PT1zLmNoYXJBdCgwKSl7Zz1NYXRoLnBvdyhwLTM1Njc0KzIsMik7dmFyIHY9dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KCIsZywiKSIpO3IoImZhbHNlLChBcnJheS5pc0FycmF5KCIsaCwiKXx8IixoLCIgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpPyIsaCwiOigiLGEoZywoZnVuY3Rpb24odCl7cmV0dXJuIHYrIlsiK3QrIl09IitoKyJbIit0KyJdIn0pKSwiLCIsdiwiKSIpfWVsc2UgcigxPGY/YShmLChmdW5jdGlvbih0KXtyZXR1cm4gaCsiWyIrdCsiXSJ9KSk6aCk7cigiKTsiKX19ZnVuY3Rpb24gVSh0LGUscixuKXtmdW5jdGlvbiBpKGkpe3ZhciBhPWZbaV07cmV0dXJuIGE/YS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxhLnByb3BEZXA/YS5hcHBlbmQodCxyKTphLmFwcGVuZCh0LGUpOmUuZGVmKGgsIi4iLGkpfWZ1bmN0aW9uIGEoKXtmdW5jdGlvbiB0KCl7cihsLCIuZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoIixbZCxtLHYsZysiPDwoKCIrdisiLTUxMjEpPj4xKSIsc10sIik7Iil9ZnVuY3Rpb24gZSgpe3IobCwiLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSgiLFtkLGcsbSxzXSwiKTsiKX1wP3k/dCgpOihyKCJpZigiLHAsIil7IiksdCgpLHIoIn1lbHNleyIpLGUoKSxyKCJ9IikpOmUoKX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCgpe3IodSsiLmRyYXdFbGVtZW50cygiK1tkLG0sdixnKyI8PCgoIit2KyItNTEyMSk+PjEpIl0rIik7Iil9ZnVuY3Rpb24gZSgpe3IodSsiLmRyYXdBcnJheXMoIitbZCxnLG1dKyIpOyIpfXA/eT90KCk6KHIoImlmKCIscCwiKXsiKSx0KCkscigifWVsc2V7IiksZSgpLHIoIn0iKSk6ZSgpfXZhciBzLGwsYz10LnNoYXJlZCx1PWMuZ2wsaD1jLmRyYXcsZj1uLmRyYXcscD1mdW5jdGlvbigpe3ZhciBpPWYuZWxlbWVudHMsYT1lO3JldHVybiBpPygoaS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxpLnByb3BEZXApJiYoYT1yKSxpPWkuYXBwZW5kKHQsYSkpOmk9YS5kZWYoaCwiLiIsImVsZW1lbnRzIiksaSYmYSgiaWYoIitpKyIpIit1KyIuYmluZEJ1ZmZlcigzNDk2MywiK2krIi5idWZmZXIuYnVmZmVyKTsiKSxpfSgpLGQ9aSgicHJpbWl0aXZlIiksZz1pKCJvZmZzZXQiKSxtPWZ1bmN0aW9uKCl7dmFyIGk9Zi5jb3VudCxhPWU7cmV0dXJuIGk/KChpLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGkucHJvcERlcCkmJihhPXIpLGk9aS5hcHBlbmQodCxhKSk6aT1hLmRlZihoLCIuIiwiY291bnQiKSxpfSgpO2lmKCJudW1iZXIiPT10eXBlb2YgbSl7aWYoMD09PW0pcmV0dXJufWVsc2UgcigiaWYoIixtLCIpeyIpLHIuZXhpdCgifSIpO0smJihzPWkoImluc3RhbmNlcyIpLGw9dC5pbnN0YW5jaW5nKTt2YXIgdj1wKyIudHlwZSIseT1mLmVsZW1lbnRzJiZSKGYuZWxlbWVudHMpO0smJigibnVtYmVyIiE9dHlwZW9mIHN8fDA8PXMpPyJzdHJpbmciPT10eXBlb2Ygcz8ocigiaWYoIixzLCI+MCl7IiksYSgpLHIoIn1lbHNlIGlmKCIscywiPDApeyIpLG8oKSxyKCJ9IikpOmEoKTpvKCl9ZnVuY3Rpb24gVih0LGUscixuLGkpe3JldHVybiBpPShlPWIoKSkucHJvYygiYm9keSIsaSksSyYmKGUuaW5zdGFuY2luZz1pLmRlZihlLnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKSx0KGUsaSxyLG4pLGUuY29tcGlsZSgpLmJvZHl9ZnVuY3Rpb24gSCh0LGUscixuKXtMKHQsZSksci51c2VWQU8/ci5kcmF3VkFPP2UodC5zaGFyZWQudmFvLCIuc2V0VkFPKCIsci5kcmF3VkFPLmFwcGVuZCh0LGUpLCIpOyIpOmUodC5zaGFyZWQudmFvLCIuc2V0VkFPKCIsdC5zaGFyZWQudmFvLCIudGFyZ2V0VkFPKTsiKTooZSh0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7IiksTih0LGUscixuLmF0dHJpYnV0ZXMsKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSkpLGoodCxlLHIsbi51bmlmb3JtcywoZnVuY3Rpb24oKXtyZXR1cm4hMH0pKSxVKHQsZSxlLHIpfWZ1bmN0aW9uIEcodCxlLHIsbil7ZnVuY3Rpb24gaSgpe3JldHVybiEwfXQuYmF0Y2hJZD0iYTEiLEwodCxlKSxOKHQsZSxyLG4uYXR0cmlidXRlcyxpKSxqKHQsZSxyLG4udW5pZm9ybXMsaSksVSh0LGUsZSxyKX1mdW5jdGlvbiBZKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQuY29udGV4dERlcCYmb3x8dC5wcm9wRGVwfWZ1bmN0aW9uIGEodCl7cmV0dXJuIWkodCl9TCh0LGUpO3ZhciBvPXIuY29udGV4dERlcCxzPWUuZGVmKCksbD1lLmRlZigpO3Quc2hhcmVkLnByb3BzPWwsdC5iYXRjaElkPXM7dmFyIGM9dC5zY29wZSgpLHU9dC5zY29wZSgpO2UoYy5lbnRyeSwiZm9yKCIscywiPTA7IixzLCI8IiwiYTEiLCI7KysiLHMsIil7IixsLCI9IiwiYTAiLCJbIixzLCJdOyIsdSwifSIsYy5leGl0KSxyLm5lZWRzQ29udGV4dCYmQSh0LHUsci5jb250ZXh0KSxyLm5lZWRzRnJhbWVidWZmZXImJlModCx1LHIuZnJhbWVidWZmZXIpLEModCx1LHIuc3RhdGUsaSksci5wcm9maWxlJiZpKHIucHJvZmlsZSkmJlAodCx1LHIsITEsITApLG4/KHIudXNlVkFPP3IuZHJhd1ZBTz9pKHIuZHJhd1ZBTyk/dSh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIixyLmRyYXdWQU8uYXBwZW5kKHQsdSksIik7Iik6Yyh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIixyLmRyYXdWQU8uYXBwZW5kKHQsYyksIik7Iik6Yyh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIix0LnNoYXJlZC52YW8sIi50YXJnZXRWQU8pOyIpOihjKHQuc2hhcmVkLnZhbywiLnNldFZBTyhudWxsKTsiKSxOKHQsYyxyLG4uYXR0cmlidXRlcyxhKSxOKHQsdSxyLG4uYXR0cmlidXRlcyxpKSksaih0LGMscixuLnVuaWZvcm1zLGEpLGoodCx1LHIsbi51bmlmb3JtcyxpKSxVKHQsYyx1LHIpKTooZT10Lmdsb2JhbC5kZWYoInt9Iiksbj1yLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHUpLGw9dS5kZWYobiwiLmlkIiksYz11LmRlZihlLCJbIixsLCJdIiksdSh0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixuLCIucHJvZ3JhbSk7IiwiaWYoISIsYywiKXsiLGMsIj0iLGUsIlsiLGwsIl09Iix0LmxpbmsoKGZ1bmN0aW9uKGUpe3JldHVybiBWKEcsdCxyLGUsMil9KSksIigiLG4sIik7fSIsYywiLmNhbGwodGhpcyxhMFsiLHMsIl0sIixzLCIpOyIpKX1mdW5jdGlvbiBXKHQscil7ZnVuY3Rpb24gbihlKXt2YXIgbj1yLnNoYWRlcltlXTtuJiZpLnNldChhLnNoYWRlciwiLiIrZSxuLmFwcGVuZCh0LGkpKX12YXIgaT10LnByb2MoInNjb3BlIiwzKTt0LmJhdGNoSWQ9ImEyIjt2YXIgYT10LnNoYXJlZCxvPWEuY3VycmVudDtBKHQsaSxyLmNvbnRleHQpLHIuZnJhbWVidWZmZXImJnIuZnJhbWVidWZmZXIuYXBwZW5kKHQsaSksTyhPYmplY3Qua2V5cyhyLnN0YXRlKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ci5zdGF0ZVtlXS5hcHBlbmQodCxpKTttKG4pP24uZm9yRWFjaCgoZnVuY3Rpb24ocixuKXtpLnNldCh0Lm5leHRbZV0sIlsiK24rIl0iLHIpfSkpOmkuc2V0KGEubmV4dCwiLiIrZSxuKX0pKSxQKHQsaSxyLCEwLCEwKSxbImVsZW1lbnRzIiwib2Zmc2V0IiwiY291bnQiLCJpbnN0YW5jZXMiLCJwcmltaXRpdmUiXS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1yLmRyYXdbZV07biYmaS5zZXQoYS5kcmF3LCIuIitlLCIiK24uYXBwZW5kKHQsaSkpfSkpLE9iamVjdC5rZXlzKHIudW5pZm9ybXMpLmZvckVhY2goKGZ1bmN0aW9uKG4pe2kuc2V0KGEudW5pZm9ybXMsIlsiK2UuaWQobikrIl0iLHIudW5pZm9ybXNbbl0uYXBwZW5kKHQsaSkpfSkpLE9iamVjdC5rZXlzKHIuYXR0cmlidXRlcykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49ci5hdHRyaWJ1dGVzW2VdLmFwcGVuZCh0LGkpLGE9dC5zY29wZUF0dHJpYihlKTtPYmplY3Qua2V5cyhuZXcgWCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aS5zZXQoYSwiLiIrdCxuW3RdKX0pKX0pKSxyLnNjb3BlVkFPJiZpLnNldChhLnZhbywiLnRhcmdldFZBTyIsci5zY29wZVZBTy5hcHBlbmQodCxpKSksbigidmVydCIpLG4oImZyYWciKSwwPE9iamVjdC5rZXlzKHIuc3RhdGUpLmxlbmd0aCYmKGkobywiLmRpcnR5PXRydWU7IiksaS5leGl0KG8sIi5kaXJ0eT10cnVlOyIpKSxpKCJhMSgiLHQuc2hhcmVkLmNvbnRleHQsIixhMCwiLHQuYmF0Y2hJZCwiKTsiKX1mdW5jdGlvbiBaKHQsZSxyKXt2YXIgbj1lLnN0YXRpY1tyXTtpZihuJiZmdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFtKHQpKXtmb3IodmFyIGU9T2JqZWN0LmtleXModCkscj0wO3I8ZS5sZW5ndGg7KytyKWlmKHEuaXNEeW5hbWljKHRbZVtyXV0pKXJldHVybiEwO3JldHVybiExfX0obikpe3ZhciBpPXQuZ2xvYmFsLGE9T2JqZWN0LmtleXMobiksbz0hMSxzPSExLGw9ITEsYz10Lmdsb2JhbC5kZWYoInt9Iik7YS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uW2VdO2lmKHEuaXNEeW5hbWljKHIpKSJmdW5jdGlvbiI9PXR5cGVvZiByJiYocj1uW2VdPXEudW5ib3gocikpLGU9QihyLG51bGwpLG89b3x8ZS50aGlzRGVwLGw9bHx8ZS5wcm9wRGVwLHM9c3x8ZS5jb250ZXh0RGVwO2Vsc2V7c3dpdGNoKGkoYywiLiIsZSwiPSIpLHR5cGVvZiByKXtjYXNlIm51bWJlciI6aShyKTticmVhaztjYXNlInN0cmluZyI6aSgnIicsciwnIicpO2JyZWFrO2Nhc2Uib2JqZWN0IjpBcnJheS5pc0FycmF5KHIpJiZpKCJbIixyLmpvaW4oKSwiXSIpO2JyZWFrO2RlZmF1bHQ6aSh0LmxpbmsocikpfWkoIjsiKX19KSksZS5keW5hbWljW3JdPW5ldyBxLkR5bmFtaWNWYXJpYWJsZSg0LHt0aGlzRGVwOm8sY29udGV4dERlcDpzLHByb3BEZXA6bCxyZWY6YyxhcHBlbmQ6ZnVuY3Rpb24odCxlKXthLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPW5bcl07cS5pc0R5bmFtaWMoaSkmJihpPXQuaW52b2tlKGUsaSksZShjLCIuIixyLCI9IixpLCI7IikpfSkpfX0pLGRlbGV0ZSBlLnN0YXRpY1tyXX19dmFyIFg9dS5SZWNvcmQsSj17YWRkOjMyNzc0LHN1YnRyYWN0OjMyNzc4LCJyZXZlcnNlIHN1YnRyYWN0IjozMjc3OX07ci5leHRfYmxlbmRfbWlubWF4JiYoSi5taW49MzI3NzUsSi5tYXg9MzI3NzYpO3ZhciBLPXIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cywkPXIud2ViZ2xfZHJhd19idWZmZXJzLHR0PXtkaXJ0eTohMCxwcm9maWxlOmcucHJvZmlsZX0sZXQ9e30scnQ9W10saXQ9e30sYXQ9e307eSgiZGl0aGVyIiwzMDI0KSx5KCJibGVuZC5lbmFibGUiLDMwNDIpLHgoImJsZW5kLmNvbG9yIiwiYmxlbmRDb2xvciIsWzAsMCwwLDBdKSx4KCJibGVuZC5lcXVhdGlvbiIsImJsZW5kRXF1YXRpb25TZXBhcmF0ZSIsWzMyNzc0LDMyNzc0XSkseCgiYmxlbmQuZnVuYyIsImJsZW5kRnVuY1NlcGFyYXRlIixbMSwwLDEsMF0pLHkoImRlcHRoLmVuYWJsZSIsMjkyOSwhMCkseCgiZGVwdGguZnVuYyIsImRlcHRoRnVuYyIsNTEzKSx4KCJkZXB0aC5yYW5nZSIsImRlcHRoUmFuZ2UiLFswLDFdKSx4KCJkZXB0aC5tYXNrIiwiZGVwdGhNYXNrIiwhMCkseCgiY29sb3JNYXNrIiwiY29sb3JNYXNrIixbITAsITAsITAsITBdKSx5KCJjdWxsLmVuYWJsZSIsMjg4NCkseCgiY3VsbC5mYWNlIiwiY3VsbEZhY2UiLDEwMjkpLHgoImZyb250RmFjZSIsImZyb250RmFjZSIsMjMwNSkseCgibGluZVdpZHRoIiwibGluZVdpZHRoIiwxKSx5KCJwb2x5Z29uT2Zmc2V0LmVuYWJsZSIsMzI4MjMpLHgoInBvbHlnb25PZmZzZXQub2Zmc2V0IiwicG9seWdvbk9mZnNldCIsWzAsMF0pLHkoInNhbXBsZS5hbHBoYSIsMzI5MjYpLHkoInNhbXBsZS5lbmFibGUiLDMyOTI4KSx4KCJzYW1wbGUuY292ZXJhZ2UiLCJzYW1wbGVDb3ZlcmFnZSIsWzEsITFdKSx5KCJzdGVuY2lsLmVuYWJsZSIsMjk2MCkseCgic3RlbmNpbC5tYXNrIiwic3RlbmNpbE1hc2siLC0xKSx4KCJzdGVuY2lsLmZ1bmMiLCJzdGVuY2lsRnVuYyIsWzUxOSwwLC0xXSkseCgic3RlbmNpbC5vcEZyb250Iiwic3RlbmNpbE9wU2VwYXJhdGUiLFsxMDI4LDc2ODAsNzY4MCw3NjgwXSkseCgic3RlbmNpbC5vcEJhY2siLCJzdGVuY2lsT3BTZXBhcmF0ZSIsWzEwMjksNzY4MCw3NjgwLDc2ODBdKSx5KCJzY2lzc29yLmVuYWJsZSIsMzA4OSkseCgic2Npc3Nvci5ib3giLCJzY2lzc29yIixbMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0pLHgoInZpZXdwb3J0Iiwidmlld3BvcnQiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSk7dmFyIG90PXtnbDp0LGNvbnRleHQ6cCxzdHJpbmdzOmUsbmV4dDpldCxjdXJyZW50OnR0LGRyYXc6ZixlbGVtZW50czpvLGJ1ZmZlcjppLHNoYWRlcjpoLGF0dHJpYnV0ZXM6dS5zdGF0ZSx2YW86dSx1bmlmb3JtczpjLGZyYW1lYnVmZmVyOmwsZXh0ZW5zaW9uczpyLHRpbWVyOmQsaXNCdWZmZXJBcmdzOnp9LHN0PXtwcmltVHlwZXM6bnQsY29tcGFyZUZ1bmNzOk10LGJsZW5kRnVuY3M6a3QsYmxlbmRFcXVhdGlvbnM6SixzdGVuY2lsT3BzOkF0LGdsVHlwZXM6USxvcmllbnRhdGlvblR5cGU6U3R9OyQmJihzdC5iYWNrQnVmZmVyPVsxMDI5XSxzdC5kcmF3QnVmZmVyPWEobi5tYXhEcmF3YnVmZmVycywoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10P1swXTphKHQsKGZ1bmN0aW9uKHQpe3JldHVybiAzNjA2NCt0fSkpfSkpKTt2YXIgbHQ9MDtyZXR1cm57bmV4dDpldCxjdXJyZW50OnR0LHByb2NzOmZ1bmN0aW9uKCl7dmFyIHQ9YigpLGU9dC5wcm9jKCJwb2xsIiksaT10LnByb2MoInJlZnJlc2giKSxvPXQuYmxvY2soKTtlKG8pLGkobyk7dmFyIHMsbD10LnNoYXJlZCxjPWwuZ2wsdT1sLm5leHQsaD1sLmN1cnJlbnQ7byhoLCIuZGlydHk9ZmFsc2U7IiksUyh0LGUpLFModCxpLG51bGwsITApLEsmJihzPXQubGluayhLKSksci5vZXNfdmVydGV4X2FycmF5X29iamVjdCYmaSh0Lmxpbmsoci5vZXNfdmVydGV4X2FycmF5X29iamVjdCksIi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7Iik7Zm9yKHZhciBmPTA7ZjxuLm1heEF0dHJpYnV0ZXM7KytmKXt2YXIgcD1pLmRlZihsLmF0dHJpYnV0ZXMsIlsiLGYsIl0iKSxkPXQuY29uZChwLCIuYnVmZmVyIik7ZC50aGVuKGMsIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGYsIik7IixjLCIuYmluZEJ1ZmZlcigiLDM0OTYyLCIsIixwLCIuYnVmZmVyLmJ1ZmZlcik7IixjLCIudmVydGV4QXR0cmliUG9pbnRlcigiLGYsIiwiLHAsIi5zaXplLCIscCwiLnR5cGUsIixwLCIubm9ybWFsaXplZCwiLHAsIi5zdHJpZGUsIixwLCIub2Zmc2V0KTsiKS5lbHNlKGMsIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoIixmLCIpOyIsYywiLnZlcnRleEF0dHJpYjRmKCIsZiwiLCIscCwiLngsIixwLCIueSwiLHAsIi56LCIscCwiLncpOyIscCwiLmJ1ZmZlcj1udWxsOyIpLGkoZCksSyYmaShzLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsZiwiLCIscCwiLmRpdmlzb3IpOyIpfXJldHVybiBpKHQuc2hhcmVkLnZhbywiLmN1cnJlbnRWQU89bnVsbDsiLHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHQuc2hhcmVkLnZhbywiLnRhcmdldFZBTyk7IiksT2JqZWN0LmtleXMoaXQpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuPWl0W3JdLGE9by5kZWYodSwiLiIscikscz10LmJsb2NrKCk7cygiaWYoIixhLCIpeyIsYywiLmVuYWJsZSgiLG4sIil9ZWxzZXsiLGMsIi5kaXNhYmxlKCIsbiwiKX0iLGgsIi4iLHIsIj0iLGEsIjsiKSxpKHMpLGUoImlmKCIsYSwiIT09IixoLCIuIixyLCIpeyIscywifSIpfSkpLE9iamVjdC5rZXlzKGF0KS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbixzLGw9YXRbcl0sZj10dFtyXSxwPXQuYmxvY2soKTtwKGMsIi4iLGwsIigiKSxtKGYpPyhsPWYubGVuZ3RoLG49dC5nbG9iYWwuZGVmKHUsIi4iLHIpLHM9dC5nbG9iYWwuZGVmKGgsIi4iLHIpLHAoYShsLChmdW5jdGlvbih0KXtyZXR1cm4gbisiWyIrdCsiXSJ9KSksIik7IixhKGwsKGZ1bmN0aW9uKHQpe3JldHVybiBzKyJbIit0KyJdPSIrbisiWyIrdCsiXTsifSkpLmpvaW4oIiIpKSxlKCJpZigiLGEobCwoZnVuY3Rpb24odCl7cmV0dXJuIG4rIlsiK3QrIl0hPT0iK3MrIlsiK3QrIl0ifSkpLmpvaW4oInx8IiksIil7IixwLCJ9IikpOihuPW8uZGVmKHUsIi4iLHIpLHM9by5kZWYoaCwiLiIscikscChuLCIpOyIsaCwiLiIsciwiPSIsbiwiOyIpLGUoImlmKCIsbiwiIT09IixzLCIpeyIscCwifSIpKSxpKHApfSkpLHQuY29tcGlsZSgpfSgpLGNvbXBpbGU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1iKCk7cmV0dXJuIGEuc3RhdHM9YS5saW5rKGkpLE9iamVjdC5rZXlzKGUuc3RhdGljKS5mb3JFYWNoKChmdW5jdGlvbih0KXtaKGEsZSx0KX0pKSxUdC5mb3JFYWNoKChmdW5jdGlvbihlKXtaKGEsdCxlKX0pKSxyPU0odCxlLHIsbiksZnVuY3Rpb24odCxlKXt2YXIgcj10LnByb2MoImRyYXciLDEpO0wodCxyKSxBKHQscixlLmNvbnRleHQpLFModCxyLGUuZnJhbWVidWZmZXIpLEUodCxyLGUpLEModCxyLGUuc3RhdGUpLFAodCxyLGUsITEsITApO3ZhciBuPWUuc2hhZGVyLnByb2dWYXIuYXBwZW5kKHQscik7aWYocih0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixuLCIucHJvZ3JhbSk7IiksZS5zaGFkZXIucHJvZ3JhbSlIKHQscixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7cih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iik7dmFyIGk9dC5nbG9iYWwuZGVmKCJ7fSIpLGE9ci5kZWYobiwiLmlkIiksbz1yLmRlZihpLCJbIixhLCJdIik7cih0LmNvbmQobykudGhlbihvLCIuY2FsbCh0aGlzLGEwKTsiKS5lbHNlKG8sIj0iLGksIlsiLGEsIl09Iix0LmxpbmsoKGZ1bmN0aW9uKHIpe3JldHVybiBWKEgsdCxlLHIsMSl9KSksIigiLG4sIik7IixvLCIuY2FsbCh0aGlzLGEwKTsiKSl9MDxPYmplY3Qua2V5cyhlLnN0YXRlKS5sZW5ndGgmJnIodC5zaGFyZWQuY3VycmVudCwiLmRpcnR5PXRydWU7Iil9KGEsciksVyhhLHIpLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZpfHx0LnByb3BEZXB9dmFyIG49dC5wcm9jKCJiYXRjaCIsMik7dC5iYXRjaElkPSIwIixMKHQsbik7dmFyIGk9ITEsYT0hMDtPYmplY3Qua2V5cyhlLmNvbnRleHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2k9aXx8ZS5jb250ZXh0W3RdLnByb3BEZXB9KSksaXx8KEEodCxuLGUuY29udGV4dCksYT0hMSk7dmFyIG89ITE7aWYoKHM9ZS5mcmFtZWJ1ZmZlcik/KHMucHJvcERlcD9pPW89ITA6cy5jb250ZXh0RGVwJiZpJiYobz0hMCksb3x8Uyh0LG4scykpOlModCxuLG51bGwpLGUuc3RhdGUudmlld3BvcnQmJmUuc3RhdGUudmlld3BvcnQucHJvcERlcCYmKGk9ITApLEUodCxuLGUpLEModCxuLGUuc3RhdGUsKGZ1bmN0aW9uKHQpe3JldHVybiFyKHQpfSkpLGUucHJvZmlsZSYmcihlLnByb2ZpbGUpfHxQKHQsbixlLCExLCJhMSIpLGUuY29udGV4dERlcD1pLGUubmVlZHNDb250ZXh0PWEsZS5uZWVkc0ZyYW1lYnVmZmVyPW8sKGE9ZS5zaGFkZXIucHJvZ1ZhcikuY29udGV4dERlcCYmaXx8YS5wcm9wRGVwKVkodCxuLGUsbnVsbCk7ZWxzZSBpZihhPWEuYXBwZW5kKHQsbiksbih0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixhLCIucHJvZ3JhbSk7IiksZS5zaGFkZXIucHJvZ3JhbSlZKHQsbixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7bih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iik7dmFyIHM9dC5nbG9iYWwuZGVmKCJ7fSIpLGw9KG89bi5kZWYoYSwiLmlkIiksbi5kZWYocywiWyIsbywiXSIpKTtuKHQuY29uZChsKS50aGVuKGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpLmVsc2UobCwiPSIscywiWyIsbywiXT0iLHQubGluaygoZnVuY3Rpb24ocil7cmV0dXJuIFYoWSx0LGUsciwyKX0pKSwiKCIsYSwiKTsiLGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmbih0LnNoYXJlZC5jdXJyZW50LCIuZGlydHk9dHJ1ZTsiKX0oYSxyKSxhLmNvbXBpbGUoKX19fWZ1bmN0aW9uIGoodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX12YXIgVT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPTA7bjxyLmxlbmd0aDsrK24pdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fSxWPTAscT17RHluYW1pY1ZhcmlhYmxlOnQsZGVmaW5lOmZ1bmN0aW9uKHIsbil7cmV0dXJuIG5ldyB0KHIsZShuKyIiKSl9LGlzRHluYW1pYzpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIWUuX3JlZ2xUeXBlfHxlIGluc3RhbmNlb2YgdH0sdW5ib3g6ZnVuY3Rpb24oZSxyKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9uZXcgdCgwLGUpOmV9LGFjY2Vzc29yOmV9LEg9e25leHQ6ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTpmdW5jdGlvbih0KXtyZXR1cm4gc2V0VGltZW91dCh0LDE2KX0sY2FuY2VsOiJmdW5jdGlvbiI9PXR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZT9mdW5jdGlvbih0KXtyZXR1cm4gY2FuY2VsQW5pbWF0aW9uRnJhbWUodCl9OmNsZWFyVGltZW91dH0sRz0idW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxZPXMoKTtZLnplcm89cygpO3ZhciBXPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MTtlLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyYmKHI9dC5nZXRQYXJhbWV0ZXIoMzQwNDcpKTt2YXIgbj0xLGk9MTtlLndlYmdsX2RyYXdfYnVmZmVycyYmKG49dC5nZXRQYXJhbWV0ZXIoMzQ4NTIpLGk9dC5nZXRQYXJhbWV0ZXIoMzYwNjMpKTt2YXIgYT0hIWUub2VzX3RleHR1cmVfZmxvYXQ7aWYoYSl7YT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKDM1NTMsYSksdC50ZXhJbWFnZTJEKDM1NTMsMCw2NDA4LDEsMSwwLDY0MDgsNTEyNixudWxsKTt2YXIgbz10LmNyZWF0ZUZyYW1lYnVmZmVyKCk7aWYodC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbyksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNTUzLGEsMCksdC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpLDM2MDUzIT09dC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKSlhPSExO2Vsc2V7dC52aWV3cG9ydCgwLDAsMSwxKSx0LmNsZWFyQ29sb3IoMSwwLDAsMSksdC5jbGVhcigxNjM4NCk7dmFyIHM9WS5hbGxvY1R5cGUoNTEyNiw0KTt0LnJlYWRQaXhlbHMoMCwwLDEsMSw2NDA4LDUxMjYscyksdC5nZXRFcnJvcigpP2E9ITE6KHQuZGVsZXRlRnJhbWVidWZmZXIobyksdC5kZWxldGVUZXh0dXJlKGEpLGE9MT09PXNbMF0pLFkuZnJlZVR5cGUocyl9fXJldHVybiBzPSEwLCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9UcmlkZW50XC8vLnRlc3QobmF2aWdhdG9yLmFwcFZlcnNpb24pfHwvRWRnZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl8fChzPXQuY3JlYXRlVGV4dHVyZSgpLG89WS5hbGxvY1R5cGUoNTEyMSwzNiksdC5hY3RpdmVUZXh0dXJlKDMzOTg0KSx0LmJpbmRUZXh0dXJlKDM0MDY3LHMpLHQudGV4SW1hZ2UyRCgzNDA2OSwwLDY0MDgsMywzLDAsNjQwOCw1MTIxLG8pLFkuZnJlZVR5cGUobyksdC5iaW5kVGV4dHVyZSgzNDA2NyxudWxsKSx0LmRlbGV0ZVRleHR1cmUocykscz0hdC5nZXRFcnJvcigpKSx7Y29sb3JCaXRzOlt0LmdldFBhcmFtZXRlcigzNDEwKSx0LmdldFBhcmFtZXRlcigzNDExKSx0LmdldFBhcmFtZXRlcigzNDEyKSx0LmdldFBhcmFtZXRlcigzNDEzKV0sZGVwdGhCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTQpLHN0ZW5jaWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTUpLHN1YnBpeGVsQml0czp0LmdldFBhcmFtZXRlcigzNDA4KSxleHRlbnNpb25zOk9iamVjdC5rZXlzKGUpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISFlW3RdfSkpLG1heEFuaXNvdHJvcGljOnIsbWF4RHJhd2J1ZmZlcnM6bixtYXhDb2xvckF0dGFjaG1lbnRzOmkscG9pbnRTaXplRGltczp0LmdldFBhcmFtZXRlcigzMzkwMSksbGluZVdpZHRoRGltczp0LmdldFBhcmFtZXRlcigzMzkwMiksbWF4Vmlld3BvcnREaW1zOnQuZ2V0UGFyYW1ldGVyKDMzODYpLG1heENvbWJpbmVkVGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYxKSxtYXhDdWJlTWFwU2l6ZTp0LmdldFBhcmFtZXRlcigzNDA3NiksbWF4UmVuZGVyYnVmZmVyU2l6ZTp0LmdldFBhcmFtZXRlcigzNDAyNCksbWF4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM0OTMwKSxtYXhUZXh0dXJlU2l6ZTp0LmdldFBhcmFtZXRlcigzMzc5KSxtYXhBdHRyaWJ1dGVzOnQuZ2V0UGFyYW1ldGVyKDM0OTIxKSxtYXhWZXJ0ZXhVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0NyksbWF4VmVydGV4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYwKSxtYXhWYXJ5aW5nVmVjdG9yczp0LmdldFBhcmFtZXRlcigzNjM0OCksbWF4RnJhZ21lbnRVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0OSksZ2xzbDp0LmdldFBhcmFtZXRlcigzNTcyNCkscmVuZGVyZXI6dC5nZXRQYXJhbWV0ZXIoNzkzNyksdmVuZG9yOnQuZ2V0UGFyYW1ldGVyKDc5MzYpLHZlcnNpb246dC5nZXRQYXJhbWV0ZXIoNzkzOCkscmVhZEZsb2F0OmEsbnBvdFRleHR1cmVDdWJlOnN9fSxaPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5fHx0IGluc3RhbmNlb2YgVWludDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQxNkFycmF5fHx0IGluc3RhbmNlb2YgSW50MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fSxYPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpfSxKPXtzaGFwZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9W107dC5sZW5ndGg7dD10WzBdKWUucHVzaCh0Lmxlbmd0aCk7cmV0dXJuIGV9LGZsYXR0ZW46ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MTtpZihlLmxlbmd0aClmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSlpKj1lW2FdO2Vsc2UgaT0wO3N3aXRjaChyPW58fFkuYWxsb2NUeXBlKHIsaSksZS5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6Zm9yKG49ZVswXSxlPTA7ZTxuOysrZSlyW2VdPXRbZV07YnJlYWs7Y2FzZSAyOmZvcihuPWVbMF0sZT1lWzFdLGE9aT0wO2E8bjsrK2EpZm9yKHZhciBvPXRbYV0scz0wO3M8ZTsrK3MpcltpKytdPW9bc107YnJlYWs7Y2FzZSAzOmModCxlWzBdLGVbMV0sZVsyXSxyLDApO2JyZWFrO2RlZmF1bHQ6IWZ1bmN0aW9uIHQoZSxyLG4saSxhKXtmb3IodmFyIG89MSxzPW4rMTtzPHIubGVuZ3RoOysrcylvKj1yW3NdO3ZhciBsPXJbbl07aWYoND09ci5sZW5ndGgtbil7dmFyIHU9cltuKzFdLGg9cltuKzJdO2ZvcihyPXJbbiszXSxzPTA7czxsOysrcyljKGVbc10sdSxoLHIsaSxhKSxhKz1vfWVsc2UgZm9yKHM9MDtzPGw7KytzKXQoZVtzXSxyLG4rMSxpLGEpLGErPW99KHQsZSwwLHIsMCl9cmV0dXJuIHJ9fSxLPXsiW29iamVjdCBJbnQ4QXJyYXldIjo1MTIwLCJbb2JqZWN0IEludDE2QXJyYXldIjo1MTIyLCJbb2JqZWN0IEludDMyQXJyYXldIjo1MTI0LCJbb2JqZWN0IFVpbnQ4QXJyYXldIjo1MTIxLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6NTEyMSwiW29iamVjdCBVaW50MTZBcnJheV0iOjUxMjMsIltvYmplY3QgVWludDMyQXJyYXldIjo1MTI1LCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOjUxMjYsIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6NTEyMSwiW29iamVjdCBBcnJheUJ1ZmZlcl0iOjUxMjF9LFE9e2ludDg6NTEyMCxpbnQxNjo1MTIyLGludDMyOjUxMjQsdWludDg6NTEyMSx1aW50MTY6NTEyMyx1aW50MzI6NTEyNSxmbG9hdDo1MTI2LGZsb2F0MzI6NTEyNn0sJD17ZHluYW1pYzozNTA0OCxzdHJlYW06MzUwNDAsc3RhdGljOjM1MDQ0fSx0dD1KLmZsYXR0ZW4sZXQ9Si5zaGFwZSxydD1bXTtydFs1MTIwXT0xLHJ0WzUxMjJdPTIscnRbNTEyNF09NCxydFs1MTIxXT0xLHJ0WzUxMjNdPTIscnRbNTEyNV09NCxydFs1MTI2XT00O3ZhciBudD17cG9pbnRzOjAscG9pbnQ6MCxsaW5lczoxLGxpbmU6MSx0cmlhbmdsZXM6NCx0cmlhbmdsZTo0LCJsaW5lIGxvb3AiOjIsImxpbmUgc3RyaXAiOjMsInRyaWFuZ2xlIHN0cmlwIjo1LCJ0cmlhbmdsZSBmYW4iOjZ9LGl0PW5ldyBGbG9hdDMyQXJyYXkoMSksYXQ9bmV3IFVpbnQzMkFycmF5KGl0LmJ1ZmZlciksb3Q9Wzk5ODQsOTk4Niw5OTg1LDk5ODddLHN0PVswLDY0MDksNjQxMCw2NDA3LDY0MDhdLGx0PXt9O2x0WzY0MDldPWx0WzY0MDZdPWx0WzY0MDJdPTEsbHRbMzQwNDFdPWx0WzY0MTBdPTIsbHRbNjQwN109bHRbMzU5MDRdPTMsbHRbNjQwOF09bHRbMzU5MDZdPTQ7dmFyIGN0PXYoIkhUTUxDYW52YXNFbGVtZW50IiksdXQ9digiT2Zmc2NyZWVuQ2FudmFzIiksaHQ9digiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIiksZnQ9digiSW1hZ2VCaXRtYXAiKSxwdD12KCJIVE1MSW1hZ2VFbGVtZW50IiksZHQ9digiSFRNTFZpZGVvRWxlbWVudCIpLGd0PU9iamVjdC5rZXlzKEspLmNvbmNhdChbY3QsdXQsaHQsZnQscHQsZHRdKSxtdD1bXTttdFs1MTIxXT0xLG10WzUxMjZdPTQsbXRbMzYxOTNdPTIsbXRbNTEyM109MixtdFs1MTI1XT00O3ZhciB2dD1bXTt2dFszMjg1NF09Mix2dFszMjg1NV09Mix2dFszNjE5NF09Mix2dFszNDA0MV09NCx2dFszMzc3Nl09LjUsdnRbMzM3NzddPS41LHZ0WzMzNzc4XT0xLHZ0WzMzNzc5XT0xLHZ0WzM1OTg2XT0uNSx2dFszNTk4N109MSx2dFszNDc5OF09MSx2dFszNTg0MF09LjUsdnRbMzU4NDFdPS4yNSx2dFszNTg0Ml09LjUsdnRbMzU4NDNdPS4yNSx2dFszNjE5Nl09LjU7dmFyIHl0PVtdO3l0WzMyODU0XT0yLHl0WzMyODU1XT0yLHl0WzM2MTk0XT0yLHl0WzMzMTg5XT0yLHl0WzM2MTY4XT0xLHl0WzM0MDQxXT00LHl0WzM1OTA3XT00LHl0WzM0ODM2XT0xNix5dFszNDg0Ml09OCx5dFszNDg0M109Njt2YXIgeHQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe3RoaXMuaWQ9YysrLHRoaXMucmVmQ291bnQ9MSx0aGlzLnJlbmRlcmJ1ZmZlcj10LHRoaXMuZm9ybWF0PTMyODU0LHRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MCxpLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBvKGUpe3ZhciByPWUucmVuZGVyYnVmZmVyO3QuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSx0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKSxlLnJlbmRlcmJ1ZmZlcj1udWxsLGUucmVmQ291bnQ9MCxkZWxldGUgdVtlLmlkXSxuLnJlbmRlcmJ1ZmZlckNvdW50LS19dmFyIHM9e3JnYmE0OjMyODU0LHJnYjU2NTozNjE5NCwicmdiNSBhMSI6MzI4NTUsZGVwdGg6MzMxODksc3RlbmNpbDozNjE2OCwiZGVwdGggc3RlbmNpbCI6MzQwNDF9O2UuZXh0X3NyZ2ImJihzLnNyZ2JhPTM1OTA3KSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmKHMucmdiYTE2Zj0zNDg0MixzLnJnYjE2Zj0zNDg0MyksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJihzLnJnYmEzMmY9MzQ4MzYpO3ZhciBsPVtdO09iamVjdC5rZXlzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xbc1t0XV09dH0pKTt2YXIgYz0wLHU9e307cmV0dXJuIGEucHJvdG90eXBlLmRlY1JlZj1mdW5jdGlvbigpezA+PS0tdGhpcy5yZWZDb3VudCYmbyh0aGlzKX0saS5wcm9maWxlJiYobi5nZXRUb3RhbFJlbmRlcmJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyh1KS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz11W2VdLnN0YXRzLnNpemV9KSksdH0pLHtjcmVhdGU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUscil7dmFyIG49MCxhPTAsdT0zMjg1NDtpZigib2JqZWN0Ij09dHlwZW9mIGUmJmU/KCJzaGFwZSJpbiBlPyhuPTB8KGE9ZS5zaGFwZSlbMF0sYT0wfGFbMV0pOigicmFkaXVzImluIGUmJihuPWE9MHxlLnJhZGl1cyksIndpZHRoImluIGUmJihuPTB8ZS53aWR0aCksImhlaWdodCJpbiBlJiYoYT0wfGUuaGVpZ2h0KSksImZvcm1hdCJpbiBlJiYodT1zW2UuZm9ybWF0XSkpOiJudW1iZXIiPT10eXBlb2YgZT8obj0wfGUsYT0ibnVtYmVyIj09dHlwZW9mIHI/MHxyOm4pOmV8fChuPWE9MSksbiE9PWMud2lkdGh8fGEhPT1jLmhlaWdodHx8dSE9PWMuZm9ybWF0KXJldHVybiBvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLGMuZm9ybWF0PXUsdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGMucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsdSxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT15dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksby5mb3JtYXQ9bFtjLmZvcm1hdF0sb312YXIgYz1uZXcgYSh0LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtyZXR1cm4gdVtjLmlkXT1jLG4ucmVuZGVyYnVmZmVyQ291bnQrKyxvKGUsciksby5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wfGUsYT0wfHJ8fG47cmV0dXJuIG49PT1jLndpZHRoJiZhPT09Yy5oZWlnaHR8fChvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxjLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGMuZm9ybWF0LG4sYSksaS5wcm9maWxlJiYoYy5zdGF0cy5zaXplPXl0W2MuZm9ybWF0XSpjLndpZHRoKmMuaGVpZ2h0KSksb30sby5fcmVnbFR5cGU9InJlbmRlcmJ1ZmZlciIsby5fcmVuZGVyYnVmZmVyPWMsaS5wcm9maWxlJiYoby5zdGF0cz1jLnN0YXRzKSxvLmRlc3Ryb3k9ZnVuY3Rpb24oKXtjLmRlY1JlZigpfSxvfSxjbGVhcjpmdW5jdGlvbigpe1godSkuZm9yRWFjaChvKX0scmVzdG9yZTpmdW5jdGlvbigpe1godSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsZS5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxlLmZvcm1hdCxlLndpZHRoLGUuaGVpZ2h0KX0pKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCl9fX0sYnQ9W107YnRbNjQwOF09NCxidFs2NDA3XT0zO3ZhciBfdD1bXTtfdFs1MTIxXT0xLF90WzUxMjZdPTQsX3RbMzYxOTNdPTI7dmFyIHd0PVsieCIsInkiLCJ6IiwidyJdLFR0PSJibGVuZC5mdW5jIGJsZW5kLmVxdWF0aW9uIHN0ZW5jaWwuZnVuYyBzdGVuY2lsLm9wRnJvbnQgc3RlbmNpbC5vcEJhY2sgc2FtcGxlLmNvdmVyYWdlIHZpZXdwb3J0IHNjaXNzb3IuYm94IHBvbHlnb25PZmZzZXQub2Zmc2V0Ii5zcGxpdCgiICIpLGt0PXswOjAsMToxLHplcm86MCxvbmU6MSwic3JjIGNvbG9yIjo3NjgsIm9uZSBtaW51cyBzcmMgY29sb3IiOjc2OSwic3JjIGFscGhhIjo3NzAsIm9uZSBtaW51cyBzcmMgYWxwaGEiOjc3MSwiZHN0IGNvbG9yIjo3NzQsIm9uZSBtaW51cyBkc3QgY29sb3IiOjc3NSwiZHN0IGFscGhhIjo3NzIsIm9uZSBtaW51cyBkc3QgYWxwaGEiOjc3MywiY29uc3RhbnQgY29sb3IiOjMyNzY5LCJvbmUgbWludXMgY29uc3RhbnQgY29sb3IiOjMyNzcwLCJjb25zdGFudCBhbHBoYSI6MzI3NzEsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSI6MzI3NzIsInNyYyBhbHBoYSBzYXR1cmF0ZSI6Nzc2fSxNdD17bmV2ZXI6NTEyLGxlc3M6NTEzLCI8Ijo1MTMsZXF1YWw6NTE0LCI9Ijo1MTQsIj09Ijo1MTQsIj09PSI6NTE0LGxlcXVhbDo1MTUsIjw9Ijo1MTUsZ3JlYXRlcjo1MTYsIj4iOjUxNixub3RlcXVhbDo1MTcsIiE9Ijo1MTcsIiE9PSI6NTE3LGdlcXVhbDo1MTgsIj49Ijo1MTgsYWx3YXlzOjUxOX0sQXQ9ezA6MCx6ZXJvOjAsa2VlcDo3NjgwLHJlcGxhY2U6NzY4MSxpbmNyZW1lbnQ6NzY4MixkZWNyZW1lbnQ6NzY4MywiaW5jcmVtZW50IHdyYXAiOjM0MDU1LCJkZWNyZW1lbnQgd3JhcCI6MzQwNTYsaW52ZXJ0OjUzODZ9LFN0PXtjdzoyMzA0LGNjdzoyMzA1fSxFdD1uZXcgRCghMSwhMSwhMSwoZnVuY3Rpb24oKXt9KSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtpZigwPT09Si5sZW5ndGgpdyYmdy51cGRhdGUoKSx0dD1udWxsO2Vsc2V7dHQ9SC5uZXh0KGUpLGgoKTtmb3IodmFyIHQ9Si5sZW5ndGgtMTswPD10Oy0tdCl7dmFyIHI9Slt0XTtyJiZyKFAsbnVsbCwwKX1tLmZsdXNoKCksdyYmdy51cGRhdGUoKX19ZnVuY3Rpb24gcigpeyF0dCYmMDxKLmxlbmd0aCYmKHR0PUgubmV4dChlKSl9ZnVuY3Rpb24gbigpe3R0JiYoSC5jYW5jZWwoZSksdHQ9bnVsbCl9ZnVuY3Rpb24gYSh0KXt0LnByZXZlbnREZWZhdWx0KCksbigpLEsuZm9yRWFjaCgoZnVuY3Rpb24odCl7dCgpfSkpfWZ1bmN0aW9uIG8odCl7bS5nZXRFcnJvcigpLHkucmVzdG9yZSgpLFIucmVzdG9yZSgpLHoucmVzdG9yZSgpLEYucmVzdG9yZSgpLEIucmVzdG9yZSgpLFYucmVzdG9yZSgpLE8ucmVzdG9yZSgpLHcmJncucmVzdG9yZSgpLFkucHJvY3MucmVmcmVzaCgpLHIoKSxRLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKX1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGU9e30scj17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9dFtuXTtxLmlzRHluYW1pYyhpKT9yW25dPXEudW5ib3goaSxuKTplW25dPWl9KSkse2R5bmFtaWM6cixzdGF0aWM6ZX19dmFyIHI9ZSh0LmNvbnRleHR8fHt9KSxuPWUodC51bmlmb3Jtc3x8e30pLGk9ZSh0LmF0dHJpYnV0ZXN8fHt9KSxhPWUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtpZih0IGluIHIpe3ZhciBlPXJbdF07ZGVsZXRlIHJbdF0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7clt0KyIuIituXT1lW25dfSkpfX12YXIgcj1VKHt9LHQpO3JldHVybiBkZWxldGUgci51bmlmb3JtcyxkZWxldGUgci5hdHRyaWJ1dGVzLGRlbGV0ZSByLmNvbnRleHQsZGVsZXRlIHIudmFvLCJzdGVuY2lsImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoImJsZW5kIiksZSgiZGVwdGgiKSxlKCJjdWxsIiksZSgic3RlbmNpbCIpLGUoInBvbHlnb25PZmZzZXQiKSxlKCJzY2lzc29yIiksZSgic2FtcGxlIiksInZhbyJpbiB0JiYoci52YW89dC52YW8pLHJ9KHQpKTt0PXtncHVUaW1lOjAsY3B1VGltZTowLGNvdW50OjB9O3ZhciBvPShyPVkuY29tcGlsZShhLGksbixyLHQpKS5kcmF3LHM9ci5iYXRjaCxsPXIuc2NvcGUsYz1bXTtyZXR1cm4gVSgoZnVuY3Rpb24odCxlKXt2YXIgcjtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gbC5jYWxsKHRoaXMsbnVsbCx0LDApO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKWlmKCJudW1iZXIiPT10eXBlb2YgdClmb3Iocj0wO3I8dDsrK3IpbC5jYWxsKHRoaXMsbnVsbCxlLHIpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGwuY2FsbCh0aGlzLHQsZSwwKTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKWwuY2FsbCh0aGlzLHRbcl0sZSxyKX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdCl7aWYoMDx0KXJldHVybiBzLmNhbGwodGhpcyxmdW5jdGlvbih0KXtmb3IoO2MubGVuZ3RoPHQ7KWMucHVzaChudWxsKTtyZXR1cm4gY30oMHx0KSwwfHQpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIG8uY2FsbCh0aGlzLHQpO2lmKHQubGVuZ3RoKXJldHVybiBzLmNhbGwodGhpcyx0LHQubGVuZ3RoKX19KSx7c3RhdHM6dH0pfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj0wO1kucHJvY3MucG9sbCgpO3ZhciBuPWUuY29sb3I7biYmKG0uY2xlYXJDb2xvcigrblswXXx8MCwrblsxXXx8MCwrblsyXXx8MCwrblszXXx8MCkscnw9MTYzODQpLCJkZXB0aCJpbiBlJiYobS5jbGVhckRlcHRoKCtlLmRlcHRoKSxyfD0yNTYpLCJzdGVuY2lsImluIGUmJihtLmNsZWFyU3RlbmNpbCgwfGUuc3RlbmNpbCkscnw9MTAyNCksbS5jbGVhcihyKX1mdW5jdGlvbiBjKHQpe3JldHVybiBKLnB1c2godCkscigpLHtjYW5jZWw6ZnVuY3Rpb24oKXt2YXIgZT1qKEosdCk7SltlXT1mdW5jdGlvbiB0KCl7dmFyIGU9aihKLHQpO0pbZV09SltKLmxlbmd0aC0xXSwtLUoubGVuZ3RoLDA+PUoubGVuZ3RoJiZuKCl9fX19ZnVuY3Rpb24gdSgpe3ZhciB0PVoudmlld3BvcnQsZT1aLnNjaXNzb3JfYm94O3RbMF09dFsxXT1lWzBdPWVbMV09MCxQLnZpZXdwb3J0V2lkdGg9UC5mcmFtZWJ1ZmZlcldpZHRoPVAuZHJhd2luZ0J1ZmZlcldpZHRoPXRbMl09ZVsyXT1tLmRyYXdpbmdCdWZmZXJXaWR0aCxQLnZpZXdwb3J0SGVpZ2h0PVAuZnJhbWVidWZmZXJIZWlnaHQ9UC5kcmF3aW5nQnVmZmVySGVpZ2h0PXRbM109ZVszXT1tLmRyYXdpbmdCdWZmZXJIZWlnaHR9ZnVuY3Rpb24gaCgpe1AudGljays9MSxQLnRpbWU9ZygpLHUoKSxZLnByb2NzLnBvbGwoKX1mdW5jdGlvbiBmKCl7dSgpLFkucHJvY3MucmVmcmVzaCgpLHcmJncudXBkYXRlKCl9ZnVuY3Rpb24gZygpe3JldHVybihHKCktVCkvMWUzfWlmKCEodD1pKHQpKSlyZXR1cm4gbnVsbDt2YXIgbT10LmdsLHY9bS5nZXRDb250ZXh0QXR0cmlidXRlcygpO20uaXNDb250ZXh0TG9zdCgpO3ZhciB5PWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlKXt2YXIgcjtlPWUudG9Mb3dlckNhc2UoKTt0cnl7cj1uW2VdPXQuZ2V0RXh0ZW5zaW9uKGUpfWNhdGNoKHQpe31yZXR1cm4hIXJ9Zm9yKHZhciBuPXt9LGk9MDtpPGUuZXh0ZW5zaW9ucy5sZW5ndGg7KytpKXt2YXIgYT1lLmV4dGVuc2lvbnNbaV07aWYoIXIoYSkpcmV0dXJuIGUub25EZXN0cm95KCksZS5vbkRvbmUoJyInK2ErJyIgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgV2ViR0wgY29udGV4dCwgdHJ5IHVwZ3JhZGluZyB5b3VyIHN5c3RlbSBvciBhIGRpZmZlcmVudCBicm93c2VyJyksbnVsbH1yZXR1cm4gZS5vcHRpb25hbEV4dGVuc2lvbnMuZm9yRWFjaChyKSx7ZXh0ZW5zaW9uczpuLHJlc3RvcmU6ZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihuW3RdJiYhcih0KSl0aHJvdyBFcnJvcigiKHJlZ2wpOiBlcnJvciByZXN0b3JpbmcgZXh0ZW5zaW9uICIrdCl9KSl9fX0obSx0KTtpZigheSlyZXR1cm4gbnVsbDt2YXIgeD1mdW5jdGlvbigpe3ZhciB0PXsiIjowfSxlPVsiIl07cmV0dXJue2lkOmZ1bmN0aW9uKHIpe3ZhciBuPXRbcl07cmV0dXJuIG58fChuPXRbcl09ZS5sZW5ndGgsZS5wdXNoKHIpLG4pfSxzdHI6ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19fX0oKSxiPXt2YW9Db3VudDowLGJ1ZmZlckNvdW50OjAsZWxlbWVudHNDb3VudDowLGZyYW1lYnVmZmVyQ291bnQ6MCxzaGFkZXJDb3VudDowLHRleHR1cmVDb3VudDowLGN1YmVDb3VudDowLHJlbmRlcmJ1ZmZlckNvdW50OjAsbWF4VGV4dHVyZVVuaXRzOjB9LF89eS5leHRlbnNpb25zLHc9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5lbmRRdWVyeUluZGV4PXRoaXMuc3RhcnRRdWVyeUluZGV4PS0xLHRoaXMuc3VtPTAsdGhpcy5zdGF0cz1udWxsfWZ1bmN0aW9uIG4odCxlLG4pe3ZhciBpPW8ucG9wKCl8fG5ldyByO2kuc3RhcnRRdWVyeUluZGV4PXQsaS5lbmRRdWVyeUluZGV4PWUsaS5zdW09MCxpLnN0YXRzPW4scy5wdXNoKGkpfWlmKCFlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeSlyZXR1cm4gbnVsbDt2YXIgaT1bXSxhPVtdLG89W10scz1bXSxsPVtdLGM9W107cmV0dXJue2JlZ2luUXVlcnk6ZnVuY3Rpb24odCl7dmFyIHI9aS5wb3AoKXx8ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuY3JlYXRlUXVlcnlFWFQoKTtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5iZWdpblF1ZXJ5RVhUKDM1MDA3LHIpLGEucHVzaChyKSxuKGEubGVuZ3RoLTEsYS5sZW5ndGgsdCl9LGVuZFF1ZXJ5OmZ1bmN0aW9uKCl7ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZW5kUXVlcnlFWFQoMzUwMDcpfSxwdXNoU2NvcGVTdGF0czpuLHVwZGF0ZTpmdW5jdGlvbigpe3ZhciB0LHI7aWYoMCE9PSh0PWEubGVuZ3RoKSl7Yy5sZW5ndGg9TWF0aC5tYXgoYy5sZW5ndGgsdCsxKSxsLmxlbmd0aD1NYXRoLm1heChsLmxlbmd0aCx0KzEpLGxbMF09MDt2YXIgbj1jWzBdPTA7Zm9yKHI9dD0wO3I8YS5sZW5ndGg7KytyKXt2YXIgdT1hW3JdO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTkpPyhuKz1lLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5nZXRRdWVyeU9iamVjdEVYVCh1LDM0OTE4KSxpLnB1c2godSkpOmFbdCsrXT11LGxbcisxXT1uLGNbcisxXT10fWZvcihhLmxlbmd0aD10LHI9dD0wO3I8cy5sZW5ndGg7KytyKXt2YXIgaD0obj1zW3JdKS5zdGFydFF1ZXJ5SW5kZXg7dT1uLmVuZFF1ZXJ5SW5kZXg7bi5zdW0rPWxbdV0tbFtoXSxoPWNbaF0sKHU9Y1t1XSk9PT1oPyhuLnN0YXRzLmdwdVRpbWUrPW4uc3VtLzFlNixvLnB1c2gobikpOihuLnN0YXJ0UXVlcnlJbmRleD1oLG4uZW5kUXVlcnlJbmRleD11LHNbdCsrXT1uKX1zLmxlbmd0aD10fX0sZ2V0TnVtUGVuZGluZ1F1ZXJpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sZW5ndGh9LGNsZWFyOmZ1bmN0aW9uKCl7aS5wdXNoLmFwcGx5KGksYSk7Zm9yKHZhciB0PTA7dDxpLmxlbmd0aDt0KyspZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZGVsZXRlUXVlcnlFWFQoaVt0XSk7YS5sZW5ndGg9MCxpLmxlbmd0aD0wfSxyZXN0b3JlOmZ1bmN0aW9uKCl7YS5sZW5ndGg9MCxpLmxlbmd0aD0wfX19KDAsXyksVD1HKCksQT1tLmRyYXdpbmdCdWZmZXJXaWR0aCxMPW0uZHJhd2luZ0J1ZmZlckhlaWdodCxQPXt0aWNrOjAsdGltZTowLHZpZXdwb3J0V2lkdGg6QSx2aWV3cG9ydEhlaWdodDpMLGZyYW1lYnVmZmVyV2lkdGg6QSxmcmFtZWJ1ZmZlckhlaWdodDpMLGRyYXdpbmdCdWZmZXJXaWR0aDpBLGRyYXdpbmdCdWZmZXJIZWlnaHQ6TCxwaXhlbFJhdGlvOnQucGl4ZWxSYXRpb30sST1XKG0sXyksej1wKG0sYix0LChmdW5jdGlvbih0KXtyZXR1cm4gTy5kZXN0cm95QnVmZmVyKHQpfSkpLE89UyhtLF8sSSxiLHopLEQ9ZChtLF8seixiKSxSPUUobSx4LGIsdCksRj1rKG0sXyxJLChmdW5jdGlvbigpe1kucHJvY3MucG9sbCgpfSksUCxiLHQpLEI9eHQobSxfLDAsYix0KSxWPU0obSxfLEksRixCLGIpLFk9TihtLHgsXyxJLHosRCwwLFYse30sTyxSLHtlbGVtZW50czpudWxsLHByaW1pdGl2ZTo0LGNvdW50Oi0xLG9mZnNldDowLGluc3RhbmNlczotMX0sUCx3LHQpLFo9KHg9QyhtLFYsWS5wcm9jcy5wb2xsLFApLFkubmV4dCksWD1tLmNhbnZhcyxKPVtdLEs9W10sUT1bXSwkPVt0Lm9uRGVzdHJveV0sdHQ9bnVsbDtYJiYoWC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixhLCExKSxYLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixvLCExKSk7dmFyIGV0PVYuc2V0RkJPPXMoe2ZyYW1lYnVmZmVyOnEuZGVmaW5lLmNhbGwobnVsbCwxLCJmcmFtZWJ1ZmZlciIpfSk7cmV0dXJuIGYoKSx2PVUocyx7Y2xlYXI6ZnVuY3Rpb24odCl7aWYoImZyYW1lYnVmZmVyImluIHQpaWYodC5mcmFtZWJ1ZmZlciYmImZyYW1lYnVmZmVyQ3ViZSI9PT10LmZyYW1lYnVmZmVyX3JlZ2xUeXBlKWZvcih2YXIgZT0wOzY+ZTsrK2UpZXQoVSh7ZnJhbWVidWZmZXI6dC5mcmFtZWJ1ZmZlci5mYWNlc1tlXX0sdCksbCk7ZWxzZSBldCh0LGwpO2Vsc2UgbCgwLHQpfSxwcm9wOnEuZGVmaW5lLmJpbmQobnVsbCwxKSxjb250ZXh0OnEuZGVmaW5lLmJpbmQobnVsbCwyKSx0aGlzOnEuZGVmaW5lLmJpbmQobnVsbCwzKSxkcmF3OnMoe30pLGJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gei5jcmVhdGUodCwzNDk2MiwhMSwhMSl9LGVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiBELmNyZWF0ZSh0LCExKX0sdGV4dHVyZTpGLmNyZWF0ZTJELGN1YmU6Ri5jcmVhdGVDdWJlLHJlbmRlcmJ1ZmZlcjpCLmNyZWF0ZSxmcmFtZWJ1ZmZlcjpWLmNyZWF0ZSxmcmFtZWJ1ZmZlckN1YmU6Vi5jcmVhdGVDdWJlLHZhbzpPLmNyZWF0ZVZBTyxhdHRyaWJ1dGVzOnYsZnJhbWU6YyxvbjpmdW5jdGlvbih0LGUpe3ZhciByO3N3aXRjaCh0KXtjYXNlImZyYW1lIjpyZXR1cm4gYyhlKTtjYXNlImxvc3QiOnI9SzticmVhaztjYXNlInJlc3RvcmUiOnI9UTticmVhaztjYXNlImRlc3Ryb3kiOnI9JH1yZXR1cm4gci5wdXNoKGUpLHtjYW5jZWw6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoOysrdClpZihyW3RdPT09ZSl7clt0XT1yW3IubGVuZ3RoLTFdLHIucG9wKCk7YnJlYWt9fX19LGxpbWl0czpJLGhhc0V4dGVuc2lvbjpmdW5jdGlvbih0KXtyZXR1cm4gMDw9SS5leHRlbnNpb25zLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKX0scmVhZDp4LGRlc3Ryb3k6ZnVuY3Rpb24oKXtKLmxlbmd0aD0wLG4oKSxYJiYoWC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixhKSxYLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixvKSksUi5jbGVhcigpLFYuY2xlYXIoKSxCLmNsZWFyKCksRi5jbGVhcigpLEQuY2xlYXIoKSx6LmNsZWFyKCksTy5jbGVhcigpLHcmJncuY2xlYXIoKSwkLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKX0sX2dsOm0sX3JlZnJlc2g6Zixwb2xsOmZ1bmN0aW9uKCl7aCgpLHcmJncudXBkYXRlKCl9LG5vdzpnLHN0YXRzOmJ9KSx0Lm9uRG9uZShudWxsLHYpLHZ9fSkpfSx7fV0sNTEzOltmdW5jdGlvbih0LGUscil7Ci8qIQogKiByZXBlYXQtc3RyaW5nIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9yZXBlYXQtc3RyaW5nPgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCiJ1c2Ugc3RyaWN0Ijt2YXIgbixpPSIiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJleHBlY3RlZCBhIHN0cmluZyIpO2lmKDE9PT1lKXJldHVybiB0O2lmKDI9PT1lKXJldHVybiB0K3Q7dmFyIHI9dC5sZW5ndGgqZTtpZihuIT09dHx8InVuZGVmaW5lZCI9PXR5cGVvZiBuKW49dCxpPSIiO2Vsc2UgaWYoaS5sZW5ndGg+PXIpcmV0dXJuIGkuc3Vic3RyKDAscik7Zm9yKDtyPmkubGVuZ3RoJiZlPjE7KTEmZSYmKGkrPXQpLGU+Pj0xLHQrPXQ7cmV0dXJuIGk9KGkrPXQpLnN1YnN0cigwLHIpfX0se31dLDUxNDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtlLmV4cG9ydHM9dC5wZXJmb3JtYW5jZSYmdC5wZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OkRhdGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw1MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPXRbdC5sZW5ndGgtMV0sbj1lLGk9ZS0yO2k+PTA7LS1pKXt2YXIgYT1yLG89dFtpXTsobD1vLSgocj1hK28pLWEpKSYmKHRbLS1uXT1yLHI9bCl9dmFyIHM9MDtmb3IoaT1uO2k8ZTsrK2kpe3ZhciBsO2E9dFtpXTsobD0obz1yKS0oKHI9YStvKS1hKSkmJih0W3MrK109bCl9cmV0dXJuIHRbcysrXT1yLHQubGVuZ3RoPXMsdH19LHt9XSw1MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKSxhPXQoInJvYnVzdC1zY2FsZSIpLG89dCgicm9idXN0LWNvbXByZXNzIik7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgtMSksbj0xO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT1yW24tMV09bmV3IEFycmF5KHQubGVuZ3RoLTEpLGE9MCxvPTA7YTx0Lmxlbmd0aDsrK2EpYSE9PWUmJihpW28rK109dFtuXVthXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKXtlW3JdPW5ldyBBcnJheSh0KTtmb3IodmFyIG49MDtuPHQ7KytuKWVbcl1bbl09WyJtWyIsciwiXVsiLG4sIl0iXS5qb2luKCIiKX1yZXR1cm4gZX1mdW5jdGlvbiBjKHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bShwcm9kKCIsdFswXVswXSwiLCIsdFsxXVsxXSwiKSxwcm9kKC0iLHRbMF1bMV0sIiwiLHRbMV1bMF0sIikpIl0uam9pbigiIik7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goWyJzY2FsZSgiLGMocyh0LHIpKSwiLCIsKG49ciwxJm4/Ii0iOiIiKSx0WzBdW3JdLCIpIl0uam9pbigiIikpO3JldHVybiBmdW5jdGlvbiB0KGUpe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gZVswXTtpZigyPT09ZS5sZW5ndGgpcmV0dXJuWyJzdW0oIixlWzBdLCIsIixlWzFdLCIpIl0uam9pbigiIik7dmFyIHI9ZS5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIix0KGUuc2xpY2UoMCxyKSksIiwiLHQoZS5zbGljZShyKSksIikiXS5qb2luKCIiKX0oZSk7dmFyIG59ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzdW0iLCJzY2FsZSIsInByb2QiLCJjb21wcmVzcyIsWyJmdW5jdGlvbiByb2J1c3REZXRlcm1pbmFudCIsdCwiKG0pe3JldHVybiBjb21wcmVzcygiLGMobCh0KSksIil9O3JldHVybiByb2J1c3REZXRlcm1pbmFudCIsdF0uam9pbigiIikpKGksYSxuLG8pfXZhciBoPVtmdW5jdGlvbigpe3JldHVyblswXX0sZnVuY3Rpb24odCl7cmV0dXJuW3RbMF1bMF1dfV07IWZ1bmN0aW9uKCl7Zm9yKDtoLmxlbmd0aDw2OyloLnB1c2godShoLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVsiZnVuY3Rpb24gcm9idXN0RGV0ZXJtaW5hbnQobSl7c3dpdGNoKG0ubGVuZ3RoKXsiXSxuPTA7bjw2Oysrbil0LnB1c2goImRldCIrbiksci5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBkZXQiLG4sIihtKTsiKTtyLnB1c2goIn12YXIgZGV0PUNBQ0hFW20ubGVuZ3RoXTtpZighZGV0KWRldD1DQUNIRVttLmxlbmd0aF09Z2VuKG0ubGVuZ3RoKTtyZXR1cm4gZGV0KG0pO31yZXR1cm4gcm9idXN0RGV0ZXJtaW5hbnQiKSx0LnB1c2goIkNBQ0hFIiwiZ2VuIixyLmpvaW4oIiIpKTt2YXIgaT1GdW5jdGlvbi5hcHBseSh2b2lkIDAsdCk7Zm9yKGUuZXhwb3J0cz1pLmFwcGx5KHZvaWQgMCxoLmNvbmNhdChbaCx1XSkpLG49MDtuPGgubGVuZ3RoOysrbillLmV4cG9ydHNbbl09aFtuXX0oKX0seyJyb2J1c3QtY29tcHJlc3MiOjUxNSwicm9idXN0LXNjYWxlIjo1MjIsInJvYnVzdC1zdW0iOjUyNSwidHdvLXByb2R1Y3QiOjU1NH1dLDUxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uKHRbMF0sZVswXSksYT0xO2E8dC5sZW5ndGg7KythKXI9aShyLG4odFthXSxlW2FdKSk7cmV0dXJuIHJ9fSx7InJvYnVzdC1zdW0iOjUyNSwidHdvLXByb2R1Y3QiOjU1NH1dLDUxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpLGE9dCgicm9idXN0LXN1YnRyYWN0Iiksbz10KCJyb2J1c3Qtc2NhbGUiKTtmdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBsKHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdFswXTtpZigyPT09dC5sZW5ndGgpcmV0dXJuWyJzdW0oIix0WzBdLCIsIix0WzFdLCIpIl0uam9pbigiIik7dmFyIGU9dC5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIixsKHQuc2xpY2UoMCxlKSksIiwiLGwodC5zbGljZShlKSksIikiXS5qb2luKCIiKX1mdW5jdGlvbiBjKHQsZSl7aWYoIm0iPT09dC5jaGFyQXQoMCkpe2lmKCJ3Ij09PWUuY2hhckF0KDApKXt2YXIgcj10LnNwbGl0KCJbIik7cmV0dXJuWyJ3IixlLnN1YnN0cigxKSwibSIsclswXS5zdWJzdHIoMSldLmpvaW4oIiIpfXJldHVyblsicHJvZCgiLHQsIiwiLGUsIikiXS5qb2luKCIiKX1yZXR1cm4gYyhlLHQpfWZ1bmN0aW9uIHUodCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbImRpZmYoIixjKHRbMF1bMF0sdFsxXVsxXSksIiwiLGModFsxXVswXSx0WzBdWzFdKSwiKSJdLmpvaW4oIiIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbInNjYWxlKCIsbCh1KHModCxyKSkpLCIsIiwobj1yLCEwJm4/Ii0iOiIiKSx0WzBdW3JdLCIpIl0uam9pbigiIikpO3JldHVybiBlO3ZhciBufWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9W10sbj0wO248ZS0yOysrbilyLnB1c2goWyJwcm9kKG0iLHQsIlsiLG4sIl0sbSIsdCwiWyIsbiwiXSkiXS5qb2luKCIiKSk7cmV0dXJuIGwocil9ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9W10scj1bXSxjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bIm0iLG4sIlsiLHQtci0yLCJdIl0uam9pbigiIil9cmV0dXJuIGV9KHQpLGY9MDtmPHQ7KytmKWNbMF1bZl09IjEiLGNbdC0xXVtmXT0idyIrZjtmb3IoZj0wO2Y8dDsrK2YpMD09KDEmZik/ZS5wdXNoLmFwcGx5KGUsdShzKGMsZikpKTpyLnB1c2guYXBwbHkocix1KHMoYyxmKSkpO3ZhciBwPWwoZSksZD1sKHIpLGc9ImV4YWN0SW5TcGhlcmUiK3QsbT1bXTtmb3IoZj0wO2Y8dDsrK2YpbS5wdXNoKCJtIitmKTt2YXIgdj1bImZ1bmN0aW9uICIsZywiKCIsbS5qb2luKCksIil7Il07Zm9yKGY9MDtmPHQ7KytmKXt2LnB1c2goInZhciB3IixmLCI9IixoKGYsdCksIjsiKTtmb3IodmFyIHk9MDt5PHQ7Kyt5KXkhPT1mJiZ2LnB1c2goInZhciB3IixmLCJtIix5LCI9c2NhbGUodyIsZiwiLG0iLHksIlswXSk7Iil9cmV0dXJuIHYucHVzaCgidmFyIHA9IixwLCIsbj0iLGQsIixkPWRpZmYocCxuKTtyZXR1cm4gZFtkLmxlbmd0aC0xXTt9cmV0dXJuICIsZyksbmV3IEZ1bmN0aW9uKCJzdW0iLCJkaWZmIiwicHJvZCIsInNjYWxlIix2LmpvaW4oIiIpKShpLGEsbixvKX12YXIgcD1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH1dO2Z1bmN0aW9uIGQodCl7dmFyIGU9cFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPXBbdC5sZW5ndGhdPWYodC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX0hZnVuY3Rpb24oKXtmb3IoO3AubGVuZ3RoPD02OylwLnB1c2goZihwLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVsic2xvdyJdLG49MDtuPD02Oysrbil0LnB1c2goImEiK24pLHIucHVzaCgibyIrbik7dmFyIGk9WyJmdW5jdGlvbiB0ZXN0SW5TcGhlcmUoIix0LmpvaW4oKSwiKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDsiXTtmb3Iobj0yO248PTY7KytuKWkucHVzaCgiY2FzZSAiLG4sIjpyZXR1cm4gbyIsbiwiKCIsdC5zbGljZSgwLG4pLmpvaW4oKSwiKTsiKTtpLnB1c2goIn12YXIgcz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoOysraSl7c1tpXT1hcmd1bWVudHNbaV19O3JldHVybiBzbG93KHMpO31yZXR1cm4gdGVzdEluU3BoZXJlIiksci5wdXNoKGkuam9pbigiIikpO3ZhciBhPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKTtmb3IoZS5leHBvcnRzPWEuYXBwbHkodm9pZCAwLFtkXS5jb25jYXQocCkpLG49MDtuPD02OysrbillLmV4cG9ydHNbbl09cFtuXX0oKX0seyJyb2J1c3Qtc2NhbGUiOjUyMiwicm9idXN0LXN1YnRyYWN0Ijo1MjQsInJvYnVzdC1zdW0iOjUyNSwidHdvLXByb2R1Y3QiOjU1NH1dLDUxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3QtZGV0ZXJtaW5hbnQiKTtmdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT0icm9idXN0TGluZWFyU29sdmUiK3QrImQiLHI9WyJmdW5jdGlvbiAiLGUsIihBLGIpe3JldHVybiBbIl0saT0wO2k8dDsrK2kpe3IucHVzaCgiZGV0KFsiKTtmb3IodmFyIGE9MDthPHQ7KythKXthPjAmJnIucHVzaCgiLCIpLHIucHVzaCgiWyIpO2Zvcih2YXIgbz0wO288dDsrK28pbz4wJiZyLnB1c2goIiwiKSxvPT09aT9yLnB1c2goIitiWyIsYSwiXSIpOnIucHVzaCgiK0FbIixhLCJdWyIsbywiXSIpO3IucHVzaCgiXSIpfXIucHVzaCgiXSksIil9ci5wdXNoKCJkZXQoQSldfXJldHVybiAiLGUpO3ZhciBzPW5ldyBGdW5jdGlvbigiZGV0IixyLmpvaW4oIiIpKTtyZXR1cm4gcyh0PDY/blt0XTpuKX12YXIgYT1bZnVuY3Rpb24oKXtyZXR1cm5bMF19LGZ1bmN0aW9uKHQsZSl7cmV0dXJuW1tlWzBdXSxbdFswXVswXV1dfV07IWZ1bmN0aW9uKCl7Zm9yKDthLmxlbmd0aDw2OylhLnB1c2goaShhLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVsiZnVuY3Rpb24gZGlzcGF0Y2hMaW5lYXJTb2x2ZShBLGIpe3N3aXRjaChBLmxlbmd0aCl7Il0sbj0wO248NjsrK24pdC5wdXNoKCJzIituKSxyLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIHMiLG4sIihBLGIpOyIpO3IucHVzaCgifXZhciBzPUNBQ0hFW0EubGVuZ3RoXTtpZighcylzPUNBQ0hFW0EubGVuZ3RoXT1nKEEubGVuZ3RoKTtyZXR1cm4gcyhBLGIpfXJldHVybiBkaXNwYXRjaExpbmVhclNvbHZlIiksdC5wdXNoKCJDQUNIRSIsImciLHIuam9pbigiIikpO3ZhciBvPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtmb3IoZS5leHBvcnRzPW8uYXBwbHkodm9pZCAwLGEuY29uY2F0KFthLGldKSksbj0wO248NjsrK24pZS5leHBvcnRzW25dPWFbbl19KCl9LHsicm9idXN0LWRldGVybWluYW50Ijo1MTZ9XSw1MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKSxhPXQoInJvYnVzdC1zY2FsZSIpLG89dCgicm9idXN0LXN1YnRyYWN0Iik7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgtMSksbj0xO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT1yW24tMV09bmV3IEFycmF5KHQubGVuZ3RoLTEpLGE9MCxvPTA7YTx0Lmxlbmd0aDsrK2EpYSE9PWUmJihpW28rK109dFtuXVthXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbCh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVyblsic3VtKCIsdFswXSwiLCIsdFsxXSwiKSJdLmpvaW4oIiIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVyblsic3VtKCIsbCh0LnNsaWNlKDAsZSkpLCIsIixsKHQuc2xpY2UoZSkpLCIpIl0uam9pbigiIil9ZnVuY3Rpb24gYyh0KXtpZigyPT09dC5sZW5ndGgpcmV0dXJuW1sic3VtKHByb2QoIix0WzBdWzBdLCIsIix0WzFdWzFdLCIpLHByb2QoLSIsdFswXVsxXSwiLCIsdFsxXVswXSwiKSkiXS5qb2luKCIiKV07Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goWyJzY2FsZSgiLGwoYyhzKHQscikpKSwiLCIsKG49ciwxJm4/Ii0iOiIiKSx0WzBdW3JdLCIpIl0uam9pbigiIikpO3JldHVybiBlO3ZhciBufWZ1bmN0aW9uIHUodCl7Zm9yKHZhciBlPVtdLHI9W10sdT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKXtlW3JdPW5ldyBBcnJheSh0KTtmb3IodmFyIG49MDtuPHQ7KytuKWVbcl1bbl09WyJtIixuLCJbIix0LXItMSwiXSJdLmpvaW4oIiIpfXJldHVybiBlfSh0KSxoPVtdLGY9MDtmPHQ7KytmKTA9PSgxJmYpP2UucHVzaC5hcHBseShlLGMocyh1LGYpKSk6ci5wdXNoLmFwcGx5KHIsYyhzKHUsZikpKSxoLnB1c2goIm0iK2YpO3ZhciBwPWwoZSksZD1sKHIpLGc9Im9yaWVudGF0aW9uIit0KyJFeGFjdCIsbT1bImZ1bmN0aW9uICIsZywiKCIsaC5qb2luKCksIil7dmFyIHA9IixwLCIsbj0iLGQsIixkPXN1YihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO307cmV0dXJuICIsZ10uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbigic3VtIiwicHJvZCIsInNjYWxlIiwic3ViIixtKShpLG4sYSxvKX12YXIgaD11KDMpLGY9dSg0KSxwPVtmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPSh0WzFdLXJbMV0pKihlWzBdLXJbMF0pLGE9KHRbMF0tclswXSkqKGVbMV0tclsxXSksbz1pLWE7aWYoaT4wKXtpZihhPD0wKXJldHVybiBvO249aSthfWVsc2V7aWYoIShpPDApKXJldHVybiBvO2lmKGE+PTApcmV0dXJuIG87bj0tKGkrYSl9dmFyIHM9MzMzMDY2OTA3Mzg3NTQ3MTZlLTMyKm47cmV0dXJuIG8+PXN8fG88PS1zP286aCh0LGUscil9LGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tblswXSxhPWVbMF0tblswXSxvPXJbMF0tblswXSxzPXRbMV0tblsxXSxsPWVbMV0tblsxXSxjPXJbMV0tblsxXSx1PXRbMl0tblsyXSxoPWVbMl0tblsyXSxwPXJbMl0tblsyXSxkPWEqYyxnPW8qbCxtPW8qcyx2PWkqYyx5PWkqbCx4PWEqcyxiPXUqKGQtZykraCoobS12KStwKih5LXgpLF89Nzc3MTU2MTE3MjM3NjEwM2UtMzEqKChNYXRoLmFicyhkKStNYXRoLmFicyhnKSkqTWF0aC5hYnModSkrKE1hdGguYWJzKG0pK01hdGguYWJzKHYpKSpNYXRoLmFicyhoKSsoTWF0aC5hYnMoeSkrTWF0aC5hYnMoeCkpKk1hdGguYWJzKHApKTtyZXR1cm4gYj5ffHwtYj5fP2I6Zih0LGUscixuKX1dO2Z1bmN0aW9uIGQodCl7dmFyIGU9cFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPXBbdC5sZW5ndGhdPXUodC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX0hZnVuY3Rpb24oKXtmb3IoO3AubGVuZ3RoPD01OylwLnB1c2godShwLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVsic2xvdyJdLG49MDtuPD01Oysrbil0LnB1c2goImEiK24pLHIucHVzaCgibyIrbik7dmFyIGk9WyJmdW5jdGlvbiBnZXRPcmllbnRhdGlvbigiLHQuam9pbigpLCIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwOyJdO2ZvcihuPTI7bjw9NTsrK24paS5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBvIixuLCIoIix0LnNsaWNlKDAsbikuam9pbigpLCIpOyIpO2kucHVzaCgifXZhciBzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7KytpKXtzW2ldPWFyZ3VtZW50c1tpXX07cmV0dXJuIHNsb3cocyk7fXJldHVybiBnZXRPcmllbnRhdGlvbiIpLHIucHVzaChpLmpvaW4oIiIpKTt2YXIgYT1GdW5jdGlvbi5hcHBseSh2b2lkIDAscik7Zm9yKGUuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbZF0uY29uY2F0KHApKSxuPTA7bjw9NTsrK24pZS5leHBvcnRzW25dPXBbbl19KCl9LHsicm9idXN0LXNjYWxlIjo1MjIsInJvYnVzdC1zdWJ0cmFjdCI6NTI0LCJyb2J1c3Qtc3VtIjo1MjUsInR3by1wcm9kdWN0Ijo1NTR9XSw1MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicm9idXN0LXN1bSIpLGk9dCgicm9idXN0LXNjYWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoMT09PXQubGVuZ3RoKXJldHVybiBpKGUsdFswXSk7aWYoMT09PWUubGVuZ3RoKXJldHVybiBpKHQsZVswXSk7aWYoMD09PXQubGVuZ3RofHwwPT09ZS5sZW5ndGgpcmV0dXJuWzBdO3ZhciByPVswXTtpZih0Lmxlbmd0aDxlLmxlbmd0aClmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSlyPW4ocixpKGUsdFthXSkpO2Vsc2UgZm9yKGE9MDthPGUubGVuZ3RoOysrYSlyPW4ocixpKHQsZVthXSkpO3JldHVybiByfX0seyJyb2J1c3Qtc2NhbGUiOjUyMiwicm9idXN0LXN1bSI6NTI1fV0sNTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJ0d28tc3VtIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMT09PXIpe3ZhciBhPW4odFswXSxlKTtyZXR1cm4gYVswXT9hOlthWzFdXX12YXIgbz1uZXcgQXJyYXkoMipyKSxzPVsuMSwuMV0sbD1bLjEsLjFdLGM9MDtuKHRbMF0sZSxzKSxzWzBdJiYob1tjKytdPXNbMF0pO2Zvcih2YXIgdT0xO3U8cjsrK3Upe24odFt1XSxlLGwpO3ZhciBoPXNbMV07aShoLGxbMF0scyksc1swXSYmKG9bYysrXT1zWzBdKTt2YXIgZj1sWzFdLHA9c1sxXSxkPWYrcCxnPXAtKGQtZik7c1sxXT1kLGcmJihvW2MrK109Zyl9c1sxXSYmKG9bYysrXT1zWzFdKTswPT09YyYmKG9bYysrXT0wKTtyZXR1cm4gby5sZW5ndGg9YyxvfX0seyJ0d28tcHJvZHVjdCI6NTU0LCJ0d28tc3VtIjo1NTV9XSw1MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4odCxyLGkpLG89bihlLHIsaSk7aWYoYT4wJiZvPjB8fGE8MCYmbzwwKXJldHVybiExO3ZhciBzPW4ocix0LGUpLGw9bihpLHQsZSk7aWYocz4wJiZsPjB8fHM8MCYmbDwwKXJldHVybiExO2lmKDA9PT1hJiYwPT09byYmMD09PXMmJjA9PT1sKXJldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MDtpPDI7KytpKXt2YXIgYT10W2ldLG89ZVtpXSxzPU1hdGgubWluKGEsbyksbD1NYXRoLm1heChhLG8pLGM9cltpXSx1PW5baV0saD1NYXRoLm1pbihjLHUpO2lmKE1hdGgubWF4KGMsdSk8c3x8bDxoKXJldHVybiExfXJldHVybiEwfSh0LGUscixpKTtyZXR1cm4hMH07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIilbM119LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MjB9XSw1MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxuPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1uKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPXQrZSxuPXItdCxpPXQtKHItbikrKGUtbik7aWYoaSlyZXR1cm5baSxyXTtyZXR1cm5bcl19KHRbMF0sLWVbMF0pO3ZhciBpLGEsbz1uZXcgQXJyYXkocituKSxzPTAsbD0wLGM9MCx1PU1hdGguYWJzLGg9dFtsXSxmPXUoaCkscD0tZVtjXSxkPXUocCk7ZjxkPyhhPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGE9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7bDxyJiZmPGR8fGM+PW4/KGk9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooaT1wLChjKz0xKTxuJiYocD0tZVtjXSxkPXUocCkpKTt2YXIgZyxtLHY9aSthLHk9di1pLHg9YS15LGI9eCxfPXY7Zm9yKDtsPHImJmM8bjspZjxkPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSksKHg9KGE9YiktKHk9KHY9aSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK3YpLShtPWctXykpKyh2LW0pLF89Zztmb3IoO2w8cjspKHg9KGE9YiktKHk9KHY9KGk9aCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9Xyt2KS0obT1nLV8pKSsodi1tKSxfPWcsKGwrPTEpPHImJihoPXRbbF0pO2Zvcig7YzxuOykoeD0oYT1iKS0oeT0odj0oaT1wKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK3YpLShtPWctXykpKyh2LW0pLF89ZywoYys9MSk8biYmKHA9LWVbY10pO2ImJihvW3MrK109Yik7XyYmKG9bcysrXT1fKTtzfHwob1tzKytdPTApO3JldHVybiBvLmxlbmd0aD1zLG99fSx7fV0sNTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsaT10LShyLW4pKyhlLW4pO2lmKGkpcmV0dXJuW2kscl07cmV0dXJuW3JdfSh0WzBdLGVbMF0pO3ZhciBpLGEsbz1uZXcgQXJyYXkocituKSxzPTAsbD0wLGM9MCx1PU1hdGguYWJzLGg9dFtsXSxmPXUoaCkscD1lW2NdLGQ9dShwKTtmPGQ/KGE9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooYT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpO2w8ciYmZjxkfHxjPj1uPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKTt2YXIgZyxtLHY9aSthLHk9di1pLHg9YS15LGI9eCxfPXY7Zm9yKDtsPHImJmM8bjspZjxkPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKSwoeD0oYT1iKS0oeT0odj1pK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rdiktKG09Zy1fKSkrKHYtbSksXz1nO2Zvcig7bDxyOykoeD0oYT1iKS0oeT0odj0oaT1oKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK3YpLShtPWctXykpKyh2LW0pLF89ZywobCs9MSk8ciYmKGg9dFtsXSk7Zm9yKDtjPG47KSh4PShhPWIpLSh5PSh2PShpPXApK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rdiktKG09Zy1fKSkrKHYtbSksXz1nLChjKz0xKTxuJiYocD1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDUyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD8tMTp0PjA/MTowfX0se31dLDUyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KSl9O3ZhciBuPXQoImJvdW5kYXJ5LWNlbGxzIiksaT10KCJyZWR1Y2Utc2ltcGxpY2lhbC1jb21wbGV4Iil9LHsiYm91bmRhcnktY2VsbHMiOjEwMCwicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCI6NTA3fV0sNTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtyPXJ8fDAsInVuZGVmaW5lZCI9PXR5cGVvZiBzJiYocz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG49MDtuPGU7KytuKXI9MHxNYXRoLm1heChyLHRbbl0ubGVuZ3RoKTtyZXR1cm4gci0xfSh0KSk7aWYoMD09PXQubGVuZ3RofHxzPDEpcmV0dXJue2NlbGxzOltdLHZlcnRleElkczpbXSx2ZXJ0ZXhXZWlnaHRzOltdfTt2YXIgbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWkubWFsbG9jVWludDgociksYT0wO2E8cjsrK2EpblthXT10W2FdPGV8MDtyZXR1cm4gbn0oZSwrciksYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxvPWUqKGUrMSkvMipyfDAscz1pLm1hbGxvY1VpbnQzMigyKm8pLGw9MCxjPTA7YzxyOysrYylmb3IodmFyIHU9dFtjXSxoPShlPXUubGVuZ3RoLDApO2g8ZTsrK2gpZm9yKHZhciBmPTA7ZjxoOysrZil7dmFyIHA9dVtmXSxkPXVbaF07c1tsKytdPTB8TWF0aC5taW4ocCxkKSxzW2wrK109MHxNYXRoLm1heChwLGQpfWEobihzLFtsLzJ8MCwyXSkpO3ZhciBnPTI7Zm9yKGM9MjtjPGw7Yys9MilzW2MtMl09PT1zW2NdJiZzW2MtMV09PT1zW2MrMV18fChzW2crK109c1tjXSxzW2crK109c1tjKzFdKTtyZXR1cm4gbihzLFtnLzJ8MCwyXSl9KHQscyksdT1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89dC5kYXRhLHM9dC5zaGFwZVswXSxsPWkubWFsbG9jRG91YmxlKHMpLGM9MCx1PTA7dTxzOysrdSl7dmFyIGg9b1syKnVdLGY9b1syKnUrMV07aWYocltoXSE9PXJbZl0pe3ZhciBwPWVbaF0sZD1lW2ZdO29bMipjXT1oLG9bMipjKzFdPWYsbFtjKytdPShkLWEpLyhkLXApfX1yZXR1cm4gdC5zaGFwZVswXT1jLG4obCxbY10pfShjLGUsbCwrciksaD1mdW5jdGlvbih0LGUpe3ZhciByPWkubWFsbG9jSW50MzIoMiplKSxuPXQuc2hhcGVbMF0sYT10LmRhdGE7clswXT0wO2Zvcih2YXIgbz0wLHM9MDtzPG47KytzKXt2YXIgbD1hWzIqc107aWYobCE9PW8pe2ZvcihyWzIqbysxXT1zOysrbzxsOylyWzIqb109cyxyWzIqbysxXT1zO3JbMipvXT1zfX1yWzIqbysxXT1uO2Zvcig7KytvPGU7KXJbMipvXT1yWzIqbysxXT1uO3JldHVybiByfShjLDB8ZS5sZW5ndGgpLGY9byhzKSh0LGMuZGF0YSxoLGwpLHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTB8dC5zaGFwZVswXSxyPXQuZGF0YSxuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPVtyWzIqaV0sclsyKmkrMV1dO3JldHVybiBufShjKSxkPVtdLnNsaWNlLmNhbGwodS5kYXRhLDAsdS5zaGFwZVswXSk7cmV0dXJuIGkuZnJlZShsKSxpLmZyZWUoYy5kYXRhKSxpLmZyZWUodS5kYXRhKSxpLmZyZWUoaCkse2NlbGxzOmYsdmVydGV4SWRzOnAsdmVydGV4V2VpZ2h0czpkfX07dmFyIG49dCgibmRhcnJheSIpLGk9dCgidHlwZWRhcnJheS1wb29sIiksYT10KCJuZGFycmF5LXNvcnQiKSxvPXQoIi4vbGliL2NvZGVnZW4iKX0seyIuL2xpYi9jb2RlZ2VuIjo1MjksbmRhcnJheTo0NjksIm5kYXJyYXktc29ydCI6NDY4LCJ0eXBlZGFycmF5LXBvb2wiOjU2N31dLDUyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9YVt0XTtlfHwoZT1hW3RdPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj1uZXcgQXJyYXkodCsxKTtyWzBdPVtbXV07Zm9yKHZhciBhPTE7YTw9dDsrK2EpZm9yKHZhciBvPXJbYV09aShhKSxzPTA7czxvLmxlbmd0aDsrK3MpZT1NYXRoLm1heChlLG9bYV0ubGVuZ3RoKTt2YXIgbD1bImZ1bmN0aW9uIEIoQyxFLGksail7IiwidmFyIGE9TWF0aC5taW4oaSxqKXwwLGI9TWF0aC5tYXgoaSxqKXwwLGw9Q1syKmFdLGg9Q1syKmErMV07Iiwid2hpbGUobDxoKXsiLCJ2YXIgbT0obCtoKT4+MSx2PUVbMiptKzFdOyIsImlmKHY9PT1iKXtyZXR1cm4gbX0iLCJpZihiPHYpe2g9bX1lbHNle2w9bSsxfSIsIn0iLCJyZXR1cm4gbDsiLCJ9OyIsImZ1bmN0aW9uIGdldENvbnRvdXIiLHQsImQoRixFLEMsUyl7IiwidmFyIG49Ri5sZW5ndGgsUj1bXTsiLCJmb3IodmFyIGk9MDtpPG47KytpKXt2YXIgYz1GW2ldLGw9Yy5sZW5ndGg7Il07ZnVuY3Rpb24gYyh0KXtpZighKHQubGVuZ3RoPD0wKSl7bC5wdXNoKCJSLnB1c2goIik7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2Upe3ZhciByPXRbZV07ZT4wJiZsLnB1c2goIiwiKSxsLnB1c2goIlsiKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtuPjAmJmwucHVzaCgiLCIpLGwucHVzaCgiQihDLEUsY1siLGlbMF0sIl0sY1siLGlbMV0sIl0pIil9bC5wdXNoKCJdIil9bC5wdXNoKCIpOyIpfX1mb3IoYT10KzE7YT4xOy0tYSl7YTx0KzEmJmwucHVzaCgiZWxzZSAiKSxsLnB1c2goImlmKGw9PT0iLGEsIil7Iik7dmFyIHU9W107Zm9yKHM9MDtzPGE7KytzKXUucHVzaCgiKFNbY1siK3MrIl1dPDwiK3MrIikiKTtsLnB1c2goInZhciBNPSIsdS5qb2luKCIrIiksIjtpZihNPT09MHx8TT09PSIsKDE8PGEpLTEsIil7Y29udGludWV9c3dpdGNoKE0peyIpO2ZvcihvPXJbYS0xXSxzPTA7czxvLmxlbmd0aDsrK3MpbC5wdXNoKCJjYXNlICIscywiOiIpLGMob1tzXSksbC5wdXNoKCJicmVhazsiKTtsLnB1c2goIn19Iil9cmV0dXJuIGwucHVzaCgifXJldHVybiBSO307cmV0dXJuIGdldENvbnRvdXIiLHQsImQiKSxuZXcgRnVuY3Rpb24oInBvb2wiLGwuam9pbigiIikpKG4pfSh0KSk7cmV0dXJuIGV9O3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgibWFyY2hpbmctc2ltcGxleC10YWJsZSIpLGE9e319LHsibWFyY2hpbmctc2ltcGxleC10YWJsZSI6NDQ4LCJ0eXBlZGFycmF5LXBvb2wiOjU2N31dLDUzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaXQtdHdpZGRsZSIpLGk9dCgidW5pb24tZmluZCIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj10Lmxlbmd0aCxuPXQubGVuZ3RoLWUubGVuZ3RoLGk9TWF0aC5taW47aWYobilyZXR1cm4gbjtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiAwO2Nhc2UgMTpyZXR1cm4gdFswXS1lWzBdO2Nhc2UgMjpyZXR1cm4ocz10WzBdK3RbMV0tZVswXS1lWzFdKXx8aSh0WzBdLHRbMV0pLWkoZVswXSxlWzFdKTtjYXNlIDM6dmFyIGE9dFswXSt0WzFdLG89ZVswXStlWzFdO2lmKHM9YSt0WzJdLShvK2VbMl0pKXJldHVybiBzO3ZhciBzLGw9aSh0WzBdLHRbMV0pLGM9aShlWzBdLGVbMV0pO3JldHVybihzPWkobCx0WzJdKS1pKGMsZVsyXSkpfHxpKGwrdFsyXSxhKS1pKGMrZVsyXSxvKTtkZWZhdWx0OnZhciB1PXQuc2xpY2UoMCk7dS5zb3J0KCk7dmFyIGg9ZS5zbGljZSgwKTtoLnNvcnQoKTtmb3IodmFyIGY9MDtmPHI7KytmKWlmKG49dVtmXS1oW2ZdKXJldHVybiBuO3JldHVybiAwfX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGEodFswXSxlWzBdKX1mdW5jdGlvbiBzKHQsZSl7aWYoZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKW5baV09W3RbaV0sZVtpXV07bi5zb3J0KG8pO2ZvcihpPTA7aTxyOysraSl0W2ldPW5baV1bMF0sZVtpXT1uW2ldWzFdO3JldHVybiB0fXJldHVybiB0LnNvcnQoYSksdH1mdW5jdGlvbiBsKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9MSxyPXQubGVuZ3RoLG49MTtuPHI7KytuKXt2YXIgaT10W25dO2lmKGEoaSx0W24tMV0pKXtpZihuPT09ZSl7ZSsrO2NvbnRpbnVlfXRbZSsrXT1pfX1yZXR1cm4gdC5sZW5ndGg9ZSx0fWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT0tMTtyPD1uOyl7dmFyIG89cituPj4xLHM9YSh0W29dLGUpO3M8PTA/KDA9PT1zJiYoaT1vKSxyPW8rMSk6cz4wJiYobj1vLTEpfXJldHVybiBpfWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXJbaV09W107Zm9yKHZhciBzPVtdLGw9KGk9MCxlLmxlbmd0aCk7aTxsOysraSlmb3IodmFyIHU9ZVtpXSxoPXUubGVuZ3RoLGY9MSxwPTE8PGg7ZjxwOysrZil7cy5sZW5ndGg9bi5wb3BDb3VudChmKTtmb3IodmFyIGQ9MCxnPTA7ZzxoOysrZylmJjE8PGcmJihzW2QrK109dVtnXSk7dmFyIG09Yyh0LHMpO2lmKCEobTwwKSlmb3IoO3JbbSsrXS5wdXNoKGkpLCEobT49dC5sZW5ndGh8fDAhPT1hKHRbbV0scykpOyk7fXJldHVybiByfWZ1bmN0aW9uIGgodCxlKXtpZihlPDApcmV0dXJuW107Zm9yKHZhciByPVtdLGk9KDE8PGUrMSktMSxhPTA7YTx0Lmxlbmd0aDsrK2EpZm9yKHZhciBvPXRbYV0sbD1pO2w8MTw8by5sZW5ndGg7bD1uLm5leHRDb21iaW5hdGlvbihsKSl7Zm9yKHZhciBjPW5ldyBBcnJheShlKzEpLHU9MCxoPTA7aDxvLmxlbmd0aDsrK2gpbCYxPDxoJiYoY1t1KytdPW9baF0pO3IucHVzaChjKX1yZXR1cm4gcyhyKX1yLmRpbWVuc2lvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPU1hdGgubWF4LG49MCxpPXQubGVuZ3RoO248aTsrK24pZT1yKGUsdFtuXS5sZW5ndGgpO3JldHVybiBlLTF9LHIuY291bnRWZXJ0aWNlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9LTEscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYT10W25dLG89MCxzPWEubGVuZ3RoO288czsrK28pZT1yKGUsYVtvXSk7cmV0dXJuIGUrMX0sci5jbG9uZUNlbGxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZVtyXT10W3JdLnNsaWNlKDApO3JldHVybiBlfSxyLmNvbXBhcmVDZWxscz1hLHIubm9ybWFsaXplPXMsci51bmlxdWU9bCxyLmZpbmRDZWxsPWMsci5pbmNpZGVuY2U9dSxyLmR1YWw9ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gdShsKGgodCwwKSksdCk7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPVtdO249MDtmb3IodmFyIGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKXJbYVtvXV0ucHVzaChuKTtyZXR1cm4gcn0sci5leHBsb2RlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MHxpLmxlbmd0aCxvPTEsbD0xPDxhO288bDsrK28pe2Zvcih2YXIgYz1bXSx1PTA7dTxhOysrdSlvPj4+dSYxJiZjLnB1c2goaVt1XSk7ZS5wdXNoKGMpfXJldHVybiBzKGUpfSxyLnNrZWxldG9uPWgsci5ib3VuZGFyeT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87KythKXtmb3IodmFyIGw9bmV3IEFycmF5KGkubGVuZ3RoLTEpLGM9MCx1PTA7YzxvOysrYyljIT09YSYmKGxbdSsrXT1pW2NdKTtlLnB1c2gobCl9cmV0dXJuIHMoZSl9LHIuY29ubmVjdGVkQ29tcG9uZW50cz1mdW5jdGlvbih0LGUpe3JldHVybiBlP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBpKGUpLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGE9dFtuXSxvPTA7bzxhLmxlbmd0aDsrK28pZm9yKHZhciBzPW8rMTtzPGEubGVuZ3RoOysrcylyLmxpbmsoYVtvXSxhW3NdKTt2YXIgbD1bXSxjPXIucmFua3M7Zm9yKG49MDtuPGMubGVuZ3RoOysrbiljW25dPS0xO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciB1PXIuZmluZCh0W25dWzBdKTtjW3VdPDA/KGNbdV09bC5sZW5ndGgsbC5wdXNoKFt0W25dLnNsaWNlKDApXSkpOmxbY1t1XV0ucHVzaCh0W25dLnNsaWNlKDApKX1yZXR1cm4gbH0odCxlKTpmdW5jdGlvbih0KXtmb3IodmFyIGU9bChzKGgodCwwKSkpLHI9bmV3IGkoZS5sZW5ndGgpLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGE9dFtuXSxvPTA7bzxhLmxlbmd0aDsrK28pZm9yKHZhciB1PWMoZSxbYVtvXV0pLGY9bysxO2Y8YS5sZW5ndGg7KytmKXIubGluayh1LGMoZSxbYVtmXV0pKTt2YXIgcD1bXSxkPXIucmFua3M7Zm9yKG49MDtuPGQubGVuZ3RoOysrbilkW25dPS0xO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBnPXIuZmluZChjKGUsW3Rbbl1bMF1dKSk7ZFtnXTwwPyhkW2ddPXAubGVuZ3RoLHAucHVzaChbdFtuXS5zbGljZSgwKV0pKTpwW2RbZ11dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIHB9KHQpfX0seyJiaXQtdHdpZGRsZSI6OTcsInVuaW9uLWZpbmQiOjU2OH1dLDUzMTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs5N11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjk3fV0sNTMyOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzUzMF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ImJpdC10d2lkZGxlIjo1MzEsZHVwOjUzMCwidW5pb24tZmluZCI6NTMzfV0sNTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RzLmxlbmd0aH0sbi5wcm90b3R5cGUubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LG4ucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucm9vdHM7ZVt0XSE9PXQ7KXt2YXIgcj1lW3RdO2VbdF09ZVtyXSx0PXJ9cmV0dXJuIHR9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sNTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPWUubGVuZ3RoLG89dC5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpc1toXT1sW2hdPS0xLGNbaF09MS8wLHVbaF09ITE7Zm9yKGg9MDtoPG87KytoKXt2YXIgZj10W2hdO2lmKDIhPT1mLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklucHV0IG11c3QgYmUgYSBncmFwaCIpO3ZhciBwPWZbMV0sZD1mWzBdOy0xIT09bFtkXT9sW2RdPS0yOmxbZF09cCwtMSE9PXNbcF0/c1twXT0tMjpzW3BdPWR9ZnVuY3Rpb24gZyh0KXtpZih1W3RdKXJldHVybiAxLzA7dmFyIHIsaSxhLG8sYyxoPXNbdF0sZj1sW3RdO3JldHVybiBoPDB8fGY8MD8xLzA6KHI9ZVt0XSxpPWVbaF0sYT1lW2ZdLG89TWF0aC5hYnMobihyLGksYSkpLGM9TWF0aC5zcXJ0KE1hdGgucG93KGlbMF0tYVswXSwyKStNYXRoLnBvdyhpWzFdLWFbMV0sMikpLG8vYyl9ZnVuY3Rpb24gbSh0LGUpe3ZhciByPWtbdF0sbj1rW2VdO2tbdF09bixrW2VdPXIsTVtyXT1lLE1bbl09dH1mdW5jdGlvbiB2KHQpe3JldHVybiBjW2tbdF1dfWZ1bmN0aW9uIHkodCl7cmV0dXJuIDEmdD90LTE+PjE6KHQ+PjEpLTF9ZnVuY3Rpb24geCh0KXtmb3IodmFyIGU9dih0KTs7KXt2YXIgcj1lLG49Mip0KzEsaT0yKih0KzEpLGE9dDtpZihuPEEpe3ZhciBvPXYobik7bzxyJiYoYT1uLHI9byl9aWYoaTxBKXYoaSk8ciYmKGE9aSk7aWYoYT09PXQpcmV0dXJuIHQ7bSh0LGEpLHQ9YX19ZnVuY3Rpb24gYih0KXtmb3IodmFyIGU9dih0KTt0PjA7KXt2YXIgcj15KHQpO2lmKHI+PTApaWYoZTx2KHIpKXttKHQsciksdD1yO2NvbnRpbnVlfXJldHVybiB0fX1mdW5jdGlvbiBfKCl7aWYoQT4wKXt2YXIgdD1rWzBdO3JldHVybiBtKDAsQS0xKSxBLT0xLHgoMCksdH1yZXR1cm4tMX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9a1t0XTtyZXR1cm4gY1tyXT09PWU/dDooY1tyXT0tMS8wLGIodCksXygpLGNbcl09ZSxiKChBKz0xKS0xKSl9ZnVuY3Rpb24gVCh0KXtpZighdVt0XSl7dVt0XT0hMDt2YXIgZT1zW3RdLHI9bFt0XTtzW3JdPj0wJiYoc1tyXT1lKSxsW2VdPj0wJiYobFtlXT1yKSxNW2VdPj0wJiZ3KE1bZV0sZyhlKSksTVtyXT49MCYmdyhNW3JdLGcocikpfX12YXIgaz1bXSxNPW5ldyBBcnJheShhKTtmb3IoaD0wO2g8YTsrK2gpeyhjW2hdPWcoaCkpPDEvMD8oTVtoXT1rLmxlbmd0aCxrLnB1c2goaCkpOk1baF09LTF9dmFyIEE9ay5sZW5ndGg7Zm9yKGg9QT4+MTtoPj0wOy0taCl4KGgpO2Zvcig7Oyl7dmFyIFM9XygpO2lmKFM8MHx8Y1tTXT5yKWJyZWFrO1QoUyl9dmFyIEU9W107Zm9yKGg9MDtoPGE7KytoKXVbaF18fChNW2hdPUUubGVuZ3RoLEUucHVzaChlW2hdLnNsaWNlKCkpKTtFLmxlbmd0aDtmdW5jdGlvbiBDKHQsZSl7aWYodFtlXTwwKXJldHVybiBlO3ZhciByPWUsbj1lO2Rve3ZhciBpPXRbbl07aWYoIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7aWYoaT10W249aV0sIXVbbl18fGk8MHx8aT09PW4pYnJlYWs7bj1pLHI9dFtyXX13aGlsZShyIT09bik7Zm9yKHZhciBhPWU7YSE9PW47YT10W2FdKXRbYV09bjtyZXR1cm4gbn12YXIgTD1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1DKHMsdFswXSkscj1DKGwsdFsxXSk7aWYoZT49MCYmcj49MCYmZSE9PXIpe3ZhciBuPU1bZV0saT1NW3JdO24hPT1pJiZMLnB1c2goW24saV0pfX0pKSxpLnVuaXF1ZShpLm5vcm1hbGl6ZShMKSkse3Bvc2l0aW9uczpFLGVkZ2VzOkx9fTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxpPXQoInNpbXBsaWNpYWwtY29tcGxleCIpfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTIwLCJzaW1wbGljaWFsLWNvbXBsZXgiOjUzMn1dLDUzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scztpZihlWzBdWzBdPGVbMV1bMF0pcj1lWzBdLGE9ZVsxXTtlbHNle2lmKCEoZVswXVswXT5lWzFdWzBdKSlyZXR1cm4gaShlLHQpO3I9ZVsxXSxhPWVbMF19aWYodFswXVswXTx0WzFdWzBdKW89dFswXSxzPXRbMV07ZWxzZXtpZighKHRbMF1bMF0+dFsxXVswXSkpcmV0dXJuLWkodCxlKTtvPXRbMV0scz10WzBdfXZhciBsPW4ocixhLHMpLGM9bihyLGEsbyk7aWYobDwwKXtpZihjPD0wKXJldHVybiBsfWVsc2UgaWYobD4wKXtpZihjPj0wKXJldHVybiBsfWVsc2UgaWYoYylyZXR1cm4gYztpZihsPW4ocyxvLGEpLGM9bihzLG8sciksbDwwKXtpZihjPD0wKXJldHVybiBsfWVsc2UgaWYobD4wKXtpZihjPj0wKXJldHVybiBsfWVsc2UgaWYoYylyZXR1cm4gYztyZXR1cm4gYVswXS1zWzBdfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKTtmdW5jdGlvbiBpKHQsZSl7dmFyIHIsaSxhLG87aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxpPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpe3ZhciBzPU1hdGgubWluKHRbMF1bMV0sdFsxXVsxXSksbD1NYXRoLm1heCh0WzBdWzFdLHRbMV1bMV0pLGM9TWF0aC5taW4oZVswXVsxXSxlWzFdWzFdKSx1PU1hdGgubWF4KGVbMF1bMV0sZVsxXVsxXSk7cmV0dXJuIGw8Yz9sLWM6cz51P3MtdTpsLXV9cj1lWzFdLGk9ZVswXX10WzBdWzFdPHRbMV1bMV0/KGE9dFswXSxvPXRbMV0pOihhPXRbMV0sbz10WzBdKTt2YXIgaD1uKGkscixhKTtyZXR1cm4gaHx8KChoPW4oaSxyLG8pKXx8by1pKX19LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MjB9XSw1MzY6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjQzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjQzfV0sNTM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0yKmUsbj1uZXcgQXJyYXkociksYT0wO2E8ZTsrK2Epe3ZhciBsPXRbYV0sYz1sWzBdWzBdPGxbMV1bMF07blsyKmFdPW5ldyBoKGxbMF1bMF0sbCxjLGEpLG5bMiphKzFdPW5ldyBoKGxbMV1bMF0sbCwhYyxhKX1uLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LWUueDtyZXR1cm4gcnx8KChyPXQuY3JlYXRlLWUuY3JlYXRlKXx8TWF0aC5taW4odC5zZWdtZW50WzBdWzFdLHQuc2VnbWVudFsxXVsxXSktTWF0aC5taW4oZS5zZWdtZW50WzBdWzFdLGUuc2VnbWVudFsxXVsxXSkpfSkpO3ZhciBmPWkobykscD1bXSxkPVtdLGc9W107Zm9yKGE9MDthPHI7KXtmb3IodmFyIG09blthXS54LHY9W107YTxyOyl7dmFyIHk9blthXTtpZih5LnghPT1tKWJyZWFrO2ErPTEseS5zZWdtZW50WzBdWzBdPT09eS54JiZ5LnNlZ21lbnRbMV1bMF09PT15Lng/eS5jcmVhdGUmJih5LnNlZ21lbnRbMF1bMV08eS5zZWdtZW50WzFdWzFdPyh2LnB1c2gobmV3IHUoeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITAsITApKSx2LnB1c2gobmV3IHUoeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITEsITEpKSk6KHYucHVzaChuZXcgdSh5LnNlZ21lbnRbMV1bMV0seS5pbmRleCwhMCwhMSkpLHYucHVzaChuZXcgdSh5LnNlZ21lbnRbMF1bMV0seS5pbmRleCwhMSwhMCkpKSk6Zj15LmNyZWF0ZT9mLmluc2VydCh5LnNlZ21lbnQseS5pbmRleCk6Zi5yZW1vdmUoeS5zZWdtZW50KX1wLnB1c2goZi5yb290KSxkLnB1c2gobSksZy5wdXNoKHYpfXJldHVybiBuZXcgcyhwLGQsZyl9O3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIiksYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxvPXQoIi4vbGliL29yZGVyLXNlZ21lbnRzIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5zbGFicz10LHRoaXMuY29vcmRpbmF0ZXM9ZSx0aGlzLmhvcml6b250YWw9cn1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQueS1lfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9bnVsbDt0Oyl7dmFyIG4saSxvPXQua2V5O29bMF1bMF08b1sxXVswXT8obj1vWzBdLGk9b1sxXSk6KG49b1sxXSxpPW9bMF0pO3ZhciBzPWEobixpLGUpO2lmKHM8MCl0PXQubGVmdDtlbHNlIGlmKHM+MClpZihlWzBdIT09b1sxXVswXSlyPXQsdD10LnJpZ2h0O2Vsc2V7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9ZWxzZXtpZihlWzBdIT09b1sxXVswXSlyZXR1cm4gdDt2YXIgbDtpZihsPWModC5yaWdodCxlKSlyZXR1cm4gbDt0PXQubGVmdH19cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0LGUscixuKXt0aGlzLnk9dCx0aGlzLmluZGV4PWUsdGhpcy5zdGFydD1yLHRoaXMuY2xvc2VkPW59ZnVuY3Rpb24gaCh0LGUscixuKXt0aGlzLng9dCx0aGlzLnNlZ21lbnQ9ZSx0aGlzLmNyZWF0ZT1yLHRoaXMuaW5kZXg9bn1zLnByb3RvdHlwZS5jYXN0VXA9ZnVuY3Rpb24odCl7dmFyIGU9bi5sZSh0aGlzLmNvb3JkaW5hdGVzLHRbMF0pO2lmKGU8MClyZXR1cm4tMTt0aGlzLnNsYWJzW2VdO3ZhciByPWModGhpcy5zbGFic1tlXSx0KSxpPS0xO2lmKHImJihpPXIudmFsdWUpLHRoaXMuY29vcmRpbmF0ZXNbZV09PT10WzBdKXt2YXIgcz1udWxsO2lmKHImJihzPXIua2V5KSxlPjApe3ZhciB1PWModGhpcy5zbGFic1tlLTFdLHQpO3UmJihzP28odS5rZXkscyk+MCYmKHM9dS5rZXksaT11LnZhbHVlKTooaT11LnZhbHVlLHM9dS5rZXkpKX12YXIgaD10aGlzLmhvcml6b250YWxbZV07aWYoaC5sZW5ndGg+MCl7dmFyIGY9bi5nZShoLHRbMV0sbCk7aWYoZjxoLmxlbmd0aCl7dmFyIHA9aFtmXTtpZih0WzFdPT09cC55KXtpZihwLmNsb3NlZClyZXR1cm4gcC5pbmRleDtmb3IoO2Y8aC5sZW5ndGgtMSYmaFtmKzFdLnk9PT10WzFdOylpZigocD1oW2YrPTFdKS5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7aWYocC55PT09dFsxXSYmIXAuc3RhcnQpe2lmKChmKz0xKT49aC5sZW5ndGgpcmV0dXJuIGk7cD1oW2ZdfX1pZihwLnN0YXJ0KWlmKHMpe3ZhciBkPWEoc1swXSxzWzFdLFt0WzBdLHAueV0pO3NbMF1bMF0+c1sxXVswXSYmKGQ9LWQpLGQ+MCYmKGk9cC5pbmRleCl9ZWxzZSBpPXAuaW5kZXg7ZWxzZSBwLnkhPT10WzFdJiYoaT1wLmluZGV4KX19fXJldHVybiBpfX0seyIuL2xpYi9vcmRlci1zZWdtZW50cyI6NTM1LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NTM2LCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIjoyNDcsInJvYnVzdC1vcmllbnRhdGlvbiI6NTIwfV0sNTM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1kb3QtcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1pKG4odCxlKSxbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9LWUvKG4tZSk7aTwwP2k9MDppPjEmJihpPTEpO2Zvcih2YXIgYT0xLWksbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPTA7bDxvOysrbClzW2xdPWkqdFtsXSthKnJbbF07cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT1hKHRbdC5sZW5ndGgtMV0sZSkscz10W3QubGVuZ3RoLTFdLGw9dFswXSxjPTA7Yzx0Lmxlbmd0aDsrK2Mscz1sKXt2YXIgdT1hKGw9dFtjXSxlKTtpZihpPDAmJnU+MHx8aT4wJiZ1PDApe3ZhciBoPW8ocyx1LGwsaSk7ci5wdXNoKGgpLG4ucHVzaChoLnNsaWNlKCkpfXU8MD9uLnB1c2gobC5zbGljZSgpKTp1PjA/ci5wdXNoKGwuc2xpY2UoKSk6KHIucHVzaChsLnNsaWNlKCkpLG4ucHVzaChsLnNsaWNlKCkpKSxpPXV9cmV0dXJue3Bvc2l0aXZlOnIsbmVnYXRpdmU6bn19LGUuZXhwb3J0cy5wb3NpdGl2ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPWEodFt0Lmxlbmd0aC0xXSxlKSxpPXRbdC5sZW5ndGgtMV0scz10WzBdLGw9MDtsPHQubGVuZ3RoOysrbCxpPXMpe3ZhciBjPWEocz10W2xdLGUpOyhuPDAmJmM+MHx8bj4wJiZjPDApJiZyLnB1c2gobyhpLGMscyxuKSksYz49MCYmci5wdXNoKHMuc2xpY2UoKSksbj1jfXJldHVybiByfSxlLmV4cG9ydHMubmVnYXRpdmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1hKHRbdC5sZW5ndGgtMV0sZSksaT10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsaT1zKXt2YXIgYz1hKHM9dFtsXSxlKTsobjwwJiZjPjB8fG4+MCYmYzwwKSYmci5wdXNoKG8oaSxjLHMsbikpLGM8PTAmJnIucHVzaChzLnNsaWNlKCkpLG49Y31yZXR1cm4gcn19LHsicm9idXN0LWRvdC1wcm9kdWN0Ijo1MTcsInJvYnVzdC1zdW0iOjUyNX1dLDUzOTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17bm90X3N0cmluZzovW15zXS8sbm90X2Jvb2w6L1tedF0vLG5vdF90eXBlOi9bXlRdLyxub3RfcHJpbWl0aXZlOi9bXnZdLyxudW1iZXI6L1tkaWVmZ10vLG51bWVyaWNfYXJnOi9bYmNkaWVmZ3V4WF0vLGpzb246L1tqXS8sbm90X2pzb246L1teal0vLHRleHQ6L15bXlx4MjVdKy8sbW9kdWxvOi9eXHgyNXsyfS8scGxhY2Vob2xkZXI6L15ceDI1KD86KFsxLTldXGQqKVwkfFwoKFteKV0rKVwpKT8oXCspPygwfCdbXiRdKT8oLSk/KFxkKyk/KD86XC4oXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLGtleTovXihbYS16X11bYS16X1xkXSopL2ksa2V5X2FjY2VzczovXlwuKFthLXpfXVthLXpfXGRdKikvaSxpbmRleF9hY2Nlc3M6L15cWyhcZCspXF0vLHNpZ246L15bKy1dL307ZnVuY3Rpb24gZSh0KXtyZXR1cm4gaShvKHQpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLmFwcGx5KG51bGwsW3RdLmNvbmNhdChyfHxbXSkpfWZ1bmN0aW9uIGkocixuKXt2YXIgaSxhLG8scyxsLGMsdSxoLGYscD0xLGQ9ci5sZW5ndGgsZz0iIjtmb3IoYT0wO2E8ZDthKyspaWYoInN0cmluZyI9PXR5cGVvZiByW2FdKWcrPXJbYV07ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHJbYV0pe2lmKChzPXJbYV0pLmtleXMpZm9yKGk9bltwXSxvPTA7bzxzLmtleXMubGVuZ3RoO28rKyl7aWYobnVsbD09aSl0aHJvdyBuZXcgRXJyb3IoZSgnW3NwcmludGZdIENhbm5vdCBhY2Nlc3MgcHJvcGVydHkgIiVzIiBvZiB1bmRlZmluZWQgdmFsdWUgIiVzIicscy5rZXlzW29dLHMua2V5c1tvLTFdKSk7aT1pW3Mua2V5c1tvXV19ZWxzZSBpPXMucGFyYW1fbm8/bltzLnBhcmFtX25vXTpuW3ArK107aWYodC5ub3RfdHlwZS50ZXN0KHMudHlwZSkmJnQubm90X3ByaW1pdGl2ZS50ZXN0KHMudHlwZSkmJmkgaW5zdGFuY2VvZiBGdW5jdGlvbiYmKGk9aSgpKSx0Lm51bWVyaWNfYXJnLnRlc3Qocy50eXBlKSYmIm51bWJlciIhPXR5cGVvZiBpJiZpc05hTihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKGUoIltzcHJpbnRmXSBleHBlY3RpbmcgbnVtYmVyIGJ1dCBmb3VuZCAlVCIsaSkpO3N3aXRjaCh0Lm51bWJlci50ZXN0KHMudHlwZSkmJihoPWk+PTApLHMudHlwZSl7Y2FzZSJiIjppPXBhcnNlSW50KGksMTApLnRvU3RyaW5nKDIpO2JyZWFrO2Nhc2UiYyI6aT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGksMTApKTticmVhaztjYXNlImQiOmNhc2UiaSI6aT1wYXJzZUludChpLDEwKTticmVhaztjYXNlImoiOmk9SlNPTi5zdHJpbmdpZnkoaSxudWxsLHMud2lkdGg/cGFyc2VJbnQocy53aWR0aCk6MCk7YnJlYWs7Y2FzZSJlIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9FeHBvbmVudGlhbChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKCk7YnJlYWs7Y2FzZSJmIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9GaXhlZChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKTticmVhaztjYXNlImciOmk9cy5wcmVjaXNpb24/U3RyaW5nKE51bWJlcihpLnRvUHJlY2lzaW9uKHMucHJlY2lzaW9uKSkpOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZSJvIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2UicyI6aT1TdHJpbmcoaSksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2UidCI6aT1TdHJpbmcoISFpKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJUIjppPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlInUiOmk9cGFyc2VJbnQoaSwxMCk+Pj4wO2JyZWFrO2Nhc2UidiI6aT1pLnZhbHVlT2YoKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJ4IjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlIlgiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9dC5qc29uLnRlc3Qocy50eXBlKT9nKz1pOighdC5udW1iZXIudGVzdChzLnR5cGUpfHxoJiYhcy5zaWduP2Y9IiI6KGY9aD8iKyI6Ii0iLGk9aS50b1N0cmluZygpLnJlcGxhY2UodC5zaWduLCIiKSksYz1zLnBhZF9jaGFyPyIwIj09PXMucGFkX2NoYXI/IjAiOnMucGFkX2NoYXIuY2hhckF0KDEpOiIgIix1PXMud2lkdGgtKGYraSkubGVuZ3RoLGw9cy53aWR0aCYmdT4wP2MucmVwZWF0KHUpOiIiLGcrPXMuYWxpZ24/ZitpK2w6IjAiPT09Yz9mK2wraTpsK2YraSl9cmV0dXJuIGd9dmFyIGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBvKGUpe2lmKGFbZV0pcmV0dXJuIGFbZV07Zm9yKHZhciByLG49ZSxpPVtdLG89MDtuOyl7aWYobnVsbCE9PShyPXQudGV4dC5leGVjKG4pKSlpLnB1c2goclswXSk7ZWxzZSBpZihudWxsIT09KHI9dC5tb2R1bG8uZXhlYyhuKSkpaS5wdXNoKCIlIik7ZWxzZXtpZihudWxsPT09KHI9dC5wbGFjZWhvbGRlci5leGVjKG4pKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyIik7aWYoclsyXSl7b3w9MTt2YXIgcz1bXSxsPXJbMl0sYz1bXTtpZihudWxsPT09KGM9dC5rZXkuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleSIpO2ZvcihzLnB1c2goY1sxXSk7IiIhPT0obD1sLnN1YnN0cmluZyhjWzBdLmxlbmd0aCkpOylpZihudWxsIT09KGM9dC5rZXlfYWNjZXNzLmV4ZWMobCkpKXMucHVzaChjWzFdKTtlbHNle2lmKG51bGw9PT0oYz10LmluZGV4X2FjY2Vzcy5leGVjKGwpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5Iik7cy5wdXNoKGNbMV0pfXJbMl09c31lbHNlIG98PTI7aWYoMz09PW8pdGhyb3cgbmV3IEVycm9yKCJbc3ByaW50Zl0gbWl4aW5nIHBvc2l0aW9uYWwgYW5kIG5hbWVkIHBsYWNlaG9sZGVycyBpcyBub3QgKHlldCkgc3VwcG9ydGVkIik7aS5wdXNoKHtwbGFjZWhvbGRlcjpyWzBdLHBhcmFtX25vOnJbMV0sa2V5czpyWzJdLHNpZ246clszXSxwYWRfY2hhcjpyWzRdLGFsaWduOnJbNV0sd2lkdGg6cls2XSxwcmVjaXNpb246cls3XSx0eXBlOnJbOF19KX1uPW4uc3Vic3RyaW5nKHJbMF0ubGVuZ3RoKX1yZXR1cm4gYVtlXT1pfSJ1bmRlZmluZWQiIT10eXBlb2YgciYmKHIuc3ByaW50Zj1lLHIudnNwcmludGY9biksInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuc3ByaW50Zj1lLHdpbmRvdy52c3ByaW50Zj1uKX0oKX0se31dLDU0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwYXJlbnRoZXNpcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYobnVsbD09dCl0aHJvdyBFcnJvcigiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nIik7aWYobnVsbD09ZSl0aHJvdyBFcnJvcigiU2VwYXJhdG9yIHNob3VsZCBiZSBhIHN0cmluZyBvciBhIFJlZ0V4cCIpO3I/KCJzdHJpbmciPT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKSkmJihyPXtpZ25vcmU6cn0pOnI9e30sbnVsbD09ci5lc2NhcGUmJihyLmVzY2FwZT0hMCksbnVsbD09ci5pZ25vcmU/ci5pZ25vcmU9WyJbXSIsIigpIiwie30iLCI8PiIsJyIiJywiJyciLCJgYCIsIlx1MjAxY1x1MjAxZCIsIlx4YWJceGJiIl06KCJzdHJpbmciPT10eXBlb2Ygci5pZ25vcmUmJihyLmlnbm9yZT1bci5pZ25vcmVdKSxyLmlnbm9yZT1yLmlnbm9yZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0Kz10KSx0fSkpKTt2YXIgaT1uLnBhcnNlKHQse2ZsYXQ6ITAsYnJhY2tldHM6ci5pZ25vcmV9KSxhPWlbMF0uc3BsaXQoZSk7aWYoci5lc2NhcGUpe2Zvcih2YXIgbz1bXSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sYz1hW3MrMV07IlxcIj09PWxbbC5sZW5ndGgtMV0mJiJcXCIhPT1sW2wubGVuZ3RoLTJdPyhvLnB1c2gobCtlK2MpLHMrKyk6by5wdXNoKGwpfWE9b31mb3Iocz0wO3M8YS5sZW5ndGg7cysrKWlbMF09YVtzXSxhW3NdPW4uc3RyaW5naWZ5KGkse2ZsYXQ6ITB9KTtyZXR1cm4gYX19LHtwYXJlbnRoZXNpczo0Nzd9XSw1NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPW5ldyBBcnJheShlKSxpPW5ldyBBcnJheShlKSxhPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKSxzPW5ldyBBcnJheShlKSxsPTA7bDxlOysrbClyW2xdPS0xLG5bbF09MCxpW2xdPSExLGFbbF09MCxvW2xdPS0xLHNbbF09W107dmFyIGMsdT0wLGg9W10sZj1bXTtmdW5jdGlvbiBwKGUpe3ZhciBsPVtlXSxjPVtlXTtmb3IocltlXT1uW2VdPXUsaVtlXT0hMCx1Kz0xO2MubGVuZ3RoPjA7KXtlPWNbYy5sZW5ndGgtMV07dmFyIHA9dFtlXTtpZihhW2VdPHAubGVuZ3RoKXtmb3IodmFyIGQ9YVtlXTtkPHAubGVuZ3RoOysrZCl7dmFyIGc9cFtkXTtpZihyW2ddPDApe3JbZ109bltnXT11LGlbZ109ITAsdSs9MSxsLnB1c2goZyksYy5wdXNoKGcpO2JyZWFrfWlbZ10mJihuW2VdPTB8TWF0aC5taW4obltlXSxuW2ddKSksb1tnXT49MCYmc1tlXS5wdXNoKG9bZ10pfWFbZV09ZH1lbHNle2lmKG5bZV09PT1yW2VdKXt2YXIgbT1bXSx2PVtdLHk9MDtmb3IoZD1sLmxlbmd0aC0xO2Q+PTA7LS1kKXt2YXIgeD1sW2RdO2lmKGlbeF09ITEsbS5wdXNoKHgpLHYucHVzaChzW3hdKSx5Kz1zW3hdLmxlbmd0aCxvW3hdPWgubGVuZ3RoLHg9PT1lKXtsLmxlbmd0aD1kO2JyZWFrfX1oLnB1c2gobSk7dmFyIGI9bmV3IEFycmF5KHkpO2ZvcihkPTA7ZDx2Lmxlbmd0aDtkKyspZm9yKHZhciBfPTA7Xzx2W2RdLmxlbmd0aDtfKyspYlstLXldPXZbZF1bX107Zi5wdXNoKGIpfWMucG9wKCl9fX1mb3IobD0wO2w8ZTsrK2wpcltsXTwwJiZwKGwpO2ZvcihsPTA7bDxmLmxlbmd0aDtsKyspe3ZhciBkPWZbbF07aWYoMCE9PWQubGVuZ3RoKXtkLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSxjPVtkWzBdXTtmb3IodmFyIGc9MTtnPGQubGVuZ3RoO2crKylkW2ddIT09ZFtnLTFdJiZjLnB1c2goZFtnXSk7ZltsXT1jfX1yZXR1cm57Y29tcG9uZW50czpoLGFkamFjZW5jeUxpc3Q6Zn19fSx7fV0sNTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQuZGltZW5zaW9uPD0wKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O2lmKDE9PT10LmRpbWVuc2lvbilyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9YSh0LGUpLG49ci5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz0wO3M8bjsrK3MpaVtzXT1bcltzXV0sb1tzXT1bc107cmV0dXJue3Bvc2l0aW9uczppLGNlbGxzOm99fSh0LGUpO3ZhciByPXQub3JkZXIuam9pbigpKyItIit0LmR0eXBlLHM9b1tyXTtlPStlfHwwO3N8fChzPW9bcl09ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aCxhPVsiJ3VzZSBzdHJpY3QnOyJdLG89InN1cmZhY2VOZXRzIit0LmpvaW4oIl8iKSsiZCIrZTthLnB1c2goInZhciBjb250b3VyPWdlbkNvbnRvdXIoeyIsIm9yZGVyOlsiLHQuam9pbigpLCJdLCIsInNjYWxhckFyZ3VtZW50czogMywiLCJwaGFzZTpmdW5jdGlvbiBwaGFzZUZ1bmMocCxhLGIsYykgeyByZXR1cm4gKHAgPiBjKXwwIH0sIiksImdlbmVyaWMiPT09ZSYmYS5wdXNoKCJnZXR0ZXJzOlswXSwiKTtmb3IodmFyIHM9W10sbD1bXSxjPTA7YzxyOysrYylzLnB1c2goImQiK2MpLGwucHVzaCgiZCIrYyk7Zm9yKGM9MDtjPDE8PHI7KytjKXMucHVzaCgidiIrYyksbC5wdXNoKCJ2IitjKTtmb3IoYz0wO2M8MTw8cjsrK2Mpcy5wdXNoKCJwIitjKSxsLnB1c2goInAiK2MpO3MucHVzaCgiYSIsImIiLCJjIiksbC5wdXNoKCJhIiwiYyIpLGEucHVzaCgidmVydGV4OmZ1bmN0aW9uIHZlcnRleEZ1bmMoIixzLmpvaW4oKSwiKXsiKTt2YXIgdT1bXTtmb3IoYz0wO2M8MTw8cjsrK2MpdS5wdXNoKCIocCIrYysiPDwiK2MrIikiKTthLnB1c2goInZhciBtPSgiLHUuam9pbigiKyIpLCIpfDA7aWYobT09PTB8fG09PT0iLCgxPDwoMTw8cikpLTEsIil7cmV0dXJufSIpO3ZhciBoPVtdLGY9W107MTw8KDE8PHIpPD0xMjg/KGEucHVzaCgic3dpdGNoKG0peyIpLGY9YSk6YS5wdXNoKCJzd2l0Y2gobT4+PjcpeyIpO2ZvcihjPTA7YzwxPDwoMTw8cik7KytjKXtpZigxPDwoMTw8cik+MTI4JiZjJTEyOD09MCl7aC5sZW5ndGg+MCYmZi5wdXNoKCJ9fSIpO3ZhciBwPSJ2RXh0cmEiK2gubGVuZ3RoO2EucHVzaCgiY2FzZSAiLGM+Pj43LCI6IixwLCIobSYweDdmLCIsbC5qb2luKCksIik7YnJlYWs7IiksZj1bImZ1bmN0aW9uICIscCwiKG0sIixsLmpvaW4oKSwiKXtzd2l0Y2gobSl7Il0saC5wdXNoKGYpfWYucHVzaCgiY2FzZSAiLDEyNyZjLCI6Iik7Zm9yKHZhciBkPW5ldyBBcnJheShyKSxnPW5ldyBBcnJheShyKSxtPW5ldyBBcnJheShyKSx2PW5ldyBBcnJheShyKSx5PTAseD0wO3g8cjsrK3gpZFt4XT1bXSxnW3hdPVtdLG1beF09MCx2W3hdPTA7Zm9yKHg9MDt4PDE8PHI7Kyt4KWZvcih2YXIgYj0wO2I8cjsrK2Ipe3ZhciBfPXheMTw8YjtpZighKF8+eCkmJiEoYyYxPDxfKSE9IShjJjE8PHgpKXt2YXIgdz0xO2MmMTw8Xz9nW2JdLnB1c2goInYiK18rIi12Iit4KTooZ1tiXS5wdXNoKCJ2Iit4KyItdiIrXyksdz0tdyksdzwwPyhkW2JdLnB1c2goIi12Iit4KyItdiIrXyksbVtiXSs9Mik6KGRbYl0ucHVzaCgidiIreCsiK3YiK18pLG1bYl0tPTIpLHkrPTE7Zm9yKHZhciBUPTA7VDxyOysrVClUIT09YiYmKF8mMTw8VD92W1RdKz0xOnZbVF0tPTEpfX12YXIgaz1bXTtmb3IoYj0wO2I8cjsrK2IpaWYoMD09PWRbYl0ubGVuZ3RoKWsucHVzaCgiZCIrYisiLTAuNSIpO2Vsc2V7dmFyIE09IiI7bVtiXTwwP009bVtiXSsiKmMiOm1bYl0+MCYmKE09IisiK21bYl0rIipjIik7dmFyIEE9ZFtiXS5sZW5ndGgveSouNSxTPS41K3ZbYl0veSouNTtrLnB1c2goImQiK2IrIi0iK1MrIi0iK0ErIiooIitkW2JdLmpvaW4oIisiKStNKyIpLygiK2dbYl0uam9pbigiKyIpKyIpIil9Zi5wdXNoKCJhLnB1c2goWyIsay5qb2luKCksIl0pOyIsImJyZWFrOyIpfWEucHVzaCgifX0sIiksaC5sZW5ndGg+MCYmZi5wdXNoKCJ9fSIpO3ZhciBFPVtdO2ZvcihjPTA7YzwxPDxyLTE7KytjKUUucHVzaCgidiIrYyk7RS5wdXNoKCJjMCIsImMxIiwicDAiLCJwMSIsImEiLCJiIiwiYyIpLGEucHVzaCgiY2VsbDpmdW5jdGlvbiBjZWxsRnVuYygiLEUuam9pbigpLCIpeyIpO3ZhciBDPWkoci0xKTthLnB1c2goImlmKHAwKXtiLnB1c2goIixDLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIlsiK3QubWFwKChmdW5jdGlvbih0KXtyZXR1cm4idiIrdH0pKSsiXSJ9KSkuam9pbigpLCIpfWVsc2V7Yi5wdXNoKCIsQy5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoKTtyZXR1cm4gZS5yZXZlcnNlKCksIlsiK2UubWFwKChmdW5jdGlvbih0KXtyZXR1cm4idiIrdH0pKSsiXSJ9KSkuam9pbigpLCIpfX19KTtmdW5jdGlvbiAiLG8sIihhcnJheSxsZXZlbCl7dmFyIHZlcnRzPVtdLGNlbGxzPVtdO2NvbnRvdXIoYXJyYXksdmVydHMsY2VsbHMsbGV2ZWwpO3JldHVybiB7cG9zaXRpb25zOnZlcnRzLGNlbGxzOmNlbGxzfTt9IHJldHVybiAiLG8sIjsiKTtmb3IoYz0wO2M8aC5sZW5ndGg7KytjKWEucHVzaChoW2NdLmpvaW4oIiIpKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJnZW5Db250b3VyIixhLmpvaW4oIiIpKShuKX0odC5vcmRlcix0LmR0eXBlKSk7cmV0dXJuIHModCxlKX07dmFyIG49dCgibmRhcnJheS1leHRyYWN0LWNvbnRvdXIiKSxpPXQoInRyaWFuZ3VsYXRlLWh5cGVyY3ViZSIpLGE9dCgiemVyby1jcm9zc2luZ3MiKTt2YXIgbz17fX0seyJuZGFycmF5LWV4dHJhY3QtY29udG91ciI6NDYxLCJ0cmlhbmd1bGF0ZS1oeXBlcmN1YmUiOjU1MiwiemVyby1jcm9zc2luZ3MiOjU5Nn1dLDU0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0O2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj0hMCxpPSExLGE9dm9pZCAwO3RyeXtmb3IodmFyIG8scz10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCFlfHxyLmxlbmd0aCE9PWUpO249ITApO31jYXRjaCh0KXtpPSEwLGE9dH1maW5hbGx5e3RyeXshbiYmcy5yZXR1cm4mJnMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IGF9fXJldHVybiByfSh0LGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0saT0yKk1hdGguUEksYT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10LngsbD10Lnk7cmV0dXJue3g6bioocyo9ZSktaSoobCo9cikrYSx5OmkqcytuKmwrb319LG89ZnVuY3Rpb24odCxlKXt2YXIgcj0xLjU3MDc5NjMyNjc5NDg5NjY9PT1lPy41NTE5MTUwMjQ0OTQ6LTEuNTcwNzk2MzI2Nzk0ODk2Nj09PWU/LS41NTE5MTUwMjQ0OTQ6NC8zKk1hdGgudGFuKGUvNCksbj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLGE9TWF0aC5jb3ModCtlKSxvPU1hdGguc2luKHQrZSk7cmV0dXJuW3t4Om4taSpyLHk6aStuKnJ9LHt4OmErbypyLHk6by1hKnJ9LHt4OmEseTpvfV19LHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dCpyK2UqbjtyZXR1cm4gaT4xJiYoaT0xKSxpPC0xJiYoaT0tMSksKHQqbi1lKnI8MD8tMToxKSpNYXRoLmFjb3MoaSl9O3IuZGVmYXVsdD1mdW5jdGlvbih0KXt2YXIgZT10LnB4LHI9dC5weSxsPXQuY3gsYz10LmN5LHU9dC5yeCxoPXQucnksZj10LnhBeGlzUm90YXRpb24scD12b2lkIDA9PT1mPzA6ZixkPXQubGFyZ2VBcmNGbGFnLGc9dm9pZCAwPT09ZD8wOmQsbT10LnN3ZWVwRmxhZyx2PXZvaWQgMD09PW0/MDptLHk9W107aWYoMD09PXV8fDA9PT1oKXJldHVybltdO3ZhciB4PU1hdGguc2luKHAqaS8zNjApLGI9TWF0aC5jb3MocCppLzM2MCksXz1iKihlLWwpLzIreCooci1jKS8yLHc9LXgqKGUtbCkvMitiKihyLWMpLzI7aWYoMD09PV8mJjA9PT13KXJldHVybltdO3U9TWF0aC5hYnModSksaD1NYXRoLmFicyhoKTt2YXIgVD1NYXRoLnBvdyhfLDIpL01hdGgucG93KHUsMikrTWF0aC5wb3codywyKS9NYXRoLnBvdyhoLDIpO1Q+MSYmKHUqPU1hdGguc3FydChUKSxoKj1NYXRoLnNxcnQoVCkpO3ZhciBrPWZ1bmN0aW9uKHQsZSxyLG4sYSxvLGwsYyx1LGgsZixwKXt2YXIgZD1NYXRoLnBvdyhhLDIpLGc9TWF0aC5wb3cobywyKSxtPU1hdGgucG93KGYsMiksdj1NYXRoLnBvdyhwLDIpLHk9ZCpnLWQqdi1nKm07eTwwJiYoeT0wKSx5Lz1kKnYrZyptO3ZhciB4PSh5PU1hdGguc3FydCh5KSoobD09PWM/LTE6MSkpKmEvbypwLGI9eSotby9hKmYsXz1oKngtdSpiKyh0K3IpLzIsdz11KngraCpiKyhlK24pLzIsVD0oZi14KS9hLGs9KHAtYikvbyxNPSgtZi14KS9hLEE9KC1wLWIpL28sUz1zKDEsMCxULGspLEU9cyhULGssTSxBKTtyZXR1cm4gMD09PWMmJkU+MCYmKEUtPWkpLDE9PT1jJiZFPDAmJihFKz1pKSxbXyx3LFMsRV19KGUscixsLGMsdSxoLGcsdix4LGIsXyx3KSxNPW4oayw0KSxBPU1bMF0sUz1NWzFdLEU9TVsyXSxDPU1bM10sTD1NYXRoLmFicyhDKS8oaS80KTtNYXRoLmFicygxLUwpPDFlLTcmJihMPTEpO3ZhciBQPU1hdGgubWF4KE1hdGguY2VpbChMKSwxKTtDLz1QO2Zvcih2YXIgST0wO0k8UDtJKyspeS5wdXNoKG8oRSxDKSksRSs9QztyZXR1cm4geS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPWEodFswXSx1LGgsYix4LEEsUykscj1lLngsbj1lLnksaT1hKHRbMV0sdSxoLGIseCxBLFMpLG89aS54LHM9aS55LGw9YSh0WzJdLHUsaCxiLHgsQSxTKTtyZXR1cm57eDE6cix5MTpuLHgyOm8seTI6cyx4OmwueCx5OmwueX19KSl9LGUuZXhwb3J0cz1yLmRlZmF1bHR9LHt9XSw1NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyc2Utc3ZnLXBhdGgiKSxpPXQoImFicy1zdmctcGF0aCIpLGE9dCgibm9ybWFsaXplLXN2Zy1wYXRoIiksbz10KCJpcy1zdmctcGF0aCIpLHM9dCgiYXNzZXJ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodCkmJjE9PT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdJiYodD10WzBdKTsic3RyaW5nIj09dHlwZW9mIHQmJihzKG8odCksIlN0cmluZyBpcyBub3QgYW4gU1ZHIHBhdGguIiksdD1uKHQpKTtpZihzKEFycmF5LmlzQXJyYXkodCksIkFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLiIpLHQ9aSh0KSwhKHQ9YSh0KSkubGVuZ3RoKXJldHVyblswLDAsMCwwXTtmb3IodmFyIGU9WzEvMCwxLzAsLTEvMCwtMS8wXSxyPTAsbD10Lmxlbmd0aDtyPGw7cisrKWZvcih2YXIgYz10W3JdLnNsaWNlKDEpLHU9MDt1PGMubGVuZ3RoO3UrPTIpY1t1KzBdPGVbMF0mJihlWzBdPWNbdSswXSksY1t1KzFdPGVbMV0mJihlWzFdPWNbdSsxXSksY1t1KzBdPmVbMl0mJihlWzJdPWNbdSswXSksY1t1KzFdPmVbM10mJihlWzNdPWNbdSsxXSk7cmV0dXJuIGV9fSx7ImFicy1zdmctcGF0aCI6NjUsYXNzZXJ0OjczLCJpcy1zdmctcGF0aCI6NDQ1LCJub3JtYWxpemUtc3ZnLXBhdGgiOjU0NSwicGFyc2Utc3ZnLXBhdGgiOjQ3OX1dLDU0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbz0wLHM9MCxsPTAsYz0wLHU9bnVsbCxoPW51bGwsZj0wLHA9MCxkPTAsZz10Lmxlbmd0aDtkPGc7ZCsrKXt2YXIgbT10W2RdLHY9bVswXTtzd2l0Y2godil7Y2FzZSJNIjpsPW1bMV0sYz1tWzJdO2JyZWFrO2Nhc2UiQSI6dmFyIHk9bih7cHg6ZixweTpwLGN4Om1bNl0sY3k6bVs3XSxyeDptWzFdLHJ5Om1bMl0seEF4aXNSb3RhdGlvbjptWzNdLGxhcmdlQXJjRmxhZzptWzRdLHN3ZWVwRmxhZzptWzVdfSk7aWYoIXkubGVuZ3RoKWNvbnRpbnVlO2Zvcih2YXIgeCxiPTA7Yjx5Lmxlbmd0aDtiKyspeD15W2JdLG09WyJDIix4LngxLHgueTEseC54Mix4LnkyLHgueCx4LnldLGI8eS5sZW5ndGgtMSYmci5wdXNoKG0pO2JyZWFrO2Nhc2UiUyI6dmFyIF89Zix3PXA7IkMiIT1lJiYiUyIhPWV8fChfKz1fLW8sdys9dy1zKSxtPVsiQyIsXyx3LG1bMV0sbVsyXSxtWzNdLG1bNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KHU9MipmLXUsaD0yKnAtaCk6KHU9ZixoPXApLG09YShmLHAsdSxoLG1bMV0sbVsyXSk7YnJlYWs7Y2FzZSJRIjp1PW1bMV0saD1tWzJdLG09YShmLHAsbVsxXSxtWzJdLG1bM10sbVs0XSk7YnJlYWs7Y2FzZSJMIjptPWkoZixwLG1bMV0sbVsyXSk7YnJlYWs7Y2FzZSJIIjptPWkoZixwLG1bMV0scCk7YnJlYWs7Y2FzZSJWIjptPWkoZixwLGYsbVsxXSk7YnJlYWs7Y2FzZSJaIjptPWkoZixwLGwsYyl9ZT12LGY9bVttLmxlbmd0aC0yXSxwPW1bbS5sZW5ndGgtMV0sbS5sZW5ndGg+ND8obz1tW20ubGVuZ3RoLTRdLHM9bVttLmxlbmd0aC0zXSk6KG89ZixzPXApLHIucHVzaChtKX1yZXR1cm4gcn07dmFyIG49dCgic3ZnLWFyYy10by1jdWJpYy1iZXppZXIiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVyblsiQyIsdCxlLHIsbixyLG5dfWZ1bmN0aW9uIGEodCxlLHIsbixpLGEpe3JldHVyblsiQyIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19fSx7InN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyIjo1NDN9XSw1NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJzdmctcGF0aC1ib3VuZHMiKSxhPXQoInBhcnNlLXN2Zy1wYXRoIiksbz10KCJkcmF3LXN2Zy1wYXRoIikscz10KCJpcy1zdmctcGF0aCIpLGw9dCgiYml0bWFwLXNkZiIpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdT1jLmdldENvbnRleHQoIjJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXModCkpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSB2YWxpZCBzdmcgcGF0aCBzdHJpbmciKTtlfHwoZT17fSk7dmFyIHIsaDtlLnNoYXBlPyhyPWUuc2hhcGVbMF0saD1lLnNoYXBlWzFdKToocj1jLndpZHRoPWUud3x8ZS53aWR0aHx8MjAwLGg9Yy5oZWlnaHQ9ZS5ofHxlLmhlaWdodHx8MjAwKTt2YXIgZj1NYXRoLm1pbihyLGgpLHA9ZS5zdHJva2V8fDAsZD1lLnZpZXdib3h8fGUudmlld0JveHx8aSh0KSxnPVtyLyhkWzJdLWRbMF0pLGgvKGRbM10tZFsxXSldLG09TWF0aC5taW4oZ1swXXx8MCxnWzFdfHwwKS8yO3UuZmlsbFN0eWxlPSJibGFjayIsdS5maWxsUmVjdCgwLDAscixoKSx1LmZpbGxTdHlsZT0id2hpdGUiLHAmJigibnVtYmVyIiE9dHlwZW9mIHAmJihwPTEpLHUuc3Ryb2tlU3R5bGU9cD4wPyJ3aGl0ZSI6ImJsYWNrIix1LmxpbmVXaWR0aD1NYXRoLmFicyhwKSk7aWYodS50cmFuc2xhdGUoLjUqciwuNSpoKSx1LnNjYWxlKG0sbSksZnVuY3Rpb24oKXtpZihudWxsIT1uKXJldHVybiBuO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7aWYodC5jYW52YXMud2lkdGg9dC5jYW52YXMuaGVpZ2h0PTEsIXdpbmRvdy5QYXRoMkQpcmV0dXJuIG49ITE7dmFyIGU9bmV3IFBhdGgyRCgiTTAsMGgxdjFoLTF2LTFaIik7dC5maWxsU3R5bGU9ImJsYWNrIix0LmZpbGwoZSk7dmFyIHI9dC5nZXRJbWFnZURhdGEoMCwwLDEsMSk7cmV0dXJuIG49ciYmci5kYXRhJiYyNTU9PT1yLmRhdGFbM119KCkpe3ZhciB2PW5ldyBQYXRoMkQodCk7dS5maWxsKHYpLHAmJnUuc3Ryb2tlKHYpfWVsc2V7dmFyIHk9YSh0KTtvKHUseSksdS5maWxsKCkscCYmdS5zdHJva2UoKX1yZXR1cm4gdS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGwodSx7Y3V0b2ZmOm51bGwhPWUuY3V0b2ZmP2UuY3V0b2ZmOi41LHJhZGl1czpudWxsIT1lLnJhZGl1cz9lLnJhZGl1czouNSpmfSl9fSx7ImJpdG1hcC1zZGYiOjk4LCJkcmF3LXN2Zy1wYXRoIjoxNzQsImlzLXN2Zy1wYXRoIjo0NDUsInBhcnNlLXN2Zy1wYXRoIjo0NzksInN2Zy1wYXRoLWJvdW5kcyI6NTQ0fV0sNTQ3OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsaSl7aT1pfHx7fTt2YXIgbz1hW2VdO298fChvPWFbZV09eyIgIjp7ZGF0YTpuZXcgRmxvYXQzMkFycmF5KDApLHNoYXBlOi4yfX0pO3ZhciBzPW9bcl07aWYoIXMpaWYoci5sZW5ndGg8PTF8fCEvXGQvLnRlc3Qocikpcz1vW3JdPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNlbGxzLHI9dC5wb3NpdGlvbnMsbj1uZXcgRmxvYXQzMkFycmF5KDYqZS5sZW5ndGgpLGk9MCxhPTAsbz0wO288ZS5sZW5ndGg7KytvKWZvcih2YXIgcz1lW29dLGw9MDtsPDM7KytsKXt2YXIgYz1yW3NbbF1dO25baSsrXT1jWzBdLG5baSsrXT1jWzFdKzEuNCxhPU1hdGgubWF4KGNbMF0sYSl9cmV0dXJue2RhdGE6bixzaGFwZTphfX0obihyLHt0cmlhbmdsZXM6ITAsZm9udDplLHRleHRBbGlnbjppLnRleHRBbGlnbnx8ImxlZnQiLHRleHRCYXNlbGluZToiYWxwaGFiZXRpYyIsc3R5bGV0YWdzOnticmVha2xpbmVzOiEwLGJvbGRzOiEwLGl0YWxpY3M6ITAsc3Vic2NyaXB0czohMCxzdXBlcnNjcmlwdHM6ITB9fSkpO2Vsc2V7Zm9yKHZhciBsPXIuc3BsaXQoLyhcZHxccykvKSxjPW5ldyBBcnJheShsLmxlbmd0aCksdT0wLGg9MCxmPTA7ZjxsLmxlbmd0aDsrK2YpY1tmXT10KGUsbFtmXSksdSs9Y1tmXS5kYXRhLmxlbmd0aCxoKz1jW2ZdLnNoYXBlLGY+MCYmKGgrPS4wMik7dmFyIHA9bmV3IEZsb2F0MzJBcnJheSh1KSxkPTAsZz0tLjUqaDtmb3IoZj0wO2Y8Yy5sZW5ndGg7KytmKXtmb3IodmFyIG09Y1tmXS5kYXRhLHY9MDt2PG0ubGVuZ3RoO3YrPTIpcFtkKytdPW1bdl0rZyxwW2QrK109bVt2KzFdO2crPWNbZl0uc2hhcGUrLjAyfXM9b1tyXT17ZGF0YTpwLHNoYXBlOmh9fXJldHVybiBzfTt2YXIgbj10KCJ2ZWN0b3JpemUtdGV4dCIpLGk9d2luZG93fHxyLmdsb2JhbHx8e30sYT1pLl9fVEVYVF9DQUNIRXx8e307aS5fX1RFWFRfQ0FDSEU9e319KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo1MDAsInZlY3Rvcml6ZS10ZXh0Ijo1NzJ9XSw1NDg6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCl7dmFyIHI9L15ccysvLG49L1xzKyQvLGk9MCxhPXQucm91bmQsbz10Lm1pbixzPXQubWF4LGw9dC5yYW5kb207ZnVuY3Rpb24gYyhlLGwpe2lmKGw9bHx8e30sKGU9ZXx8IiIpaW5zdGFuY2VvZiBjKXJldHVybiBlO2lmKCEodGhpcyBpbnN0YW5jZW9mIGMpKXJldHVybiBuZXcgYyhlLGwpO3ZhciB1PWZ1bmN0aW9uKGUpe3ZhciBpPXtyOjAsZzowLGI6MH0sYT0xLGw9bnVsbCxjPW51bGwsdT1udWxsLGg9ITEsZj0hMTsic3RyaW5nIj09dHlwZW9mIGUmJihlPWZ1bmN0aW9uKHQpe3Q9dC5yZXBsYWNlKHIsIiIpLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKTt2YXIgZSxpPSExO2lmKFNbdF0pdD1TW3RdLGk9ITA7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT10KXJldHVybntyOjAsZzowLGI6MCxhOjAsZm9ybWF0OiJuYW1lIn07aWYoZT1qLnJnYi5leGVjKHQpKXJldHVybntyOmVbMV0sZzplWzJdLGI6ZVszXX07aWYoZT1qLnJnYmEuZXhlYyh0KSlyZXR1cm57cjplWzFdLGc6ZVsyXSxiOmVbM10sYTplWzRdfTtpZihlPWouaHNsLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sbDplWzNdfTtpZihlPWouaHNsYS5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLGw6ZVszXSxhOmVbNF19O2lmKGU9ai5oc3YuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSx2OmVbM119O2lmKGU9ai5oc3ZhLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sdjplWzNdLGE6ZVs0XX07aWYoZT1qLmhleDguZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0pLGc6SShlWzJdKSxiOkkoZVszXSksYTpSKGVbNF0pLGZvcm1hdDppPyJuYW1lIjoiaGV4OCJ9O2lmKGU9ai5oZXg2LmV4ZWModCkpcmV0dXJue3I6SShlWzFdKSxnOkkoZVsyXSksYjpJKGVbM10pLGZvcm1hdDppPyJuYW1lIjoiaGV4In07aWYoZT1qLmhleDQuZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0rIiIrZVsxXSksZzpJKGVbMl0rIiIrZVsyXSksYjpJKGVbM10rIiIrZVszXSksYTpSKGVbNF0rIiIrZVs0XSksZm9ybWF0Omk/Im5hbWUiOiJoZXg4In07aWYoZT1qLmhleDMuZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0rIiIrZVsxXSksZzpJKGVbMl0rIiIrZVsyXSksYjpJKGVbM10rIiIrZVszXSksZm9ybWF0Omk/Im5hbWUiOiJoZXgifTtyZXR1cm4hMX0oZSkpOyJvYmplY3QiPT10eXBlb2YgZSYmKFUoZS5yKSYmVShlLmcpJiZVKGUuYik/KHA9ZS5yLGQ9ZS5nLGc9ZS5iLGk9e3I6MjU1KkwocCwyNTUpLGc6MjU1KkwoZCwyNTUpLGI6MjU1KkwoZywyNTUpfSxoPSEwLGY9IiUiPT09U3RyaW5nKGUucikuc3Vic3RyKC0xKT8icHJnYiI6InJnYiIpOlUoZS5oKSYmVShlLnMpJiZVKGUudik/KGw9TyhlLnMpLGM9TyhlLnYpLGk9ZnVuY3Rpb24oZSxyLG4pe2U9NipMKGUsMzYwKSxyPUwociwxMDApLG49TChuLDEwMCk7dmFyIGk9dC5mbG9vcihlKSxhPWUtaSxvPW4qKDEtcikscz1uKigxLWEqciksbD1uKigxLSgxLWEpKnIpLGM9aSU2O3JldHVybntyOjI1NSpbbixzLG8sbyxsLG5dW2NdLGc6MjU1KltsLG4sbixzLG8sb11bY10sYjoyNTUqW28sbyxsLG4sbixzXVtjXX19KGUuaCxsLGMpLGg9ITAsZj0iaHN2Iik6VShlLmgpJiZVKGUucykmJlUoZS5sKSYmKGw9TyhlLnMpLHU9TyhlLmwpLGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/dCs2KihlLXQpKnI6cjwuNT9lOnI8Mi8zP3QrKGUtdCkqKDIvMy1yKSo2OnR9aWYodD1MKHQsMzYwKSxlPUwoZSwxMDApLHI9TChyLDEwMCksMD09PWUpbj1pPWE9cjtlbHNle3ZhciBzPXI8LjU/ciooMStlKTpyK2UtciplLGw9MipyLXM7bj1vKGwscyx0KzEvMyksaT1vKGwscyx0KSxhPW8obCxzLHQtMS8zKX1yZXR1cm57cjoyNTUqbixnOjI1NSppLGI6MjU1KmF9fShlLmgsbCx1KSxoPSEwLGY9ImhzbCIpLGUuaGFzT3duUHJvcGVydHkoImEiKSYmKGE9ZS5hKSk7dmFyIHAsZCxnO3JldHVybiBhPUMoYSkse29rOmgsZm9ybWF0OmUuZm9ybWF0fHxmLHI6bygyNTUscyhpLnIsMCkpLGc6bygyNTUscyhpLmcsMCkpLGI6bygyNTUscyhpLmIsMCkpLGE6YX19KGUpO3RoaXMuX29yaWdpbmFsSW5wdXQ9ZSx0aGlzLl9yPXUucix0aGlzLl9nPXUuZyx0aGlzLl9iPXUuYix0aGlzLl9hPXUuYSx0aGlzLl9yb3VuZEE9YSgxMDAqdGhpcy5fYSkvMTAwLHRoaXMuX2Zvcm1hdD1sLmZvcm1hdHx8dS5mb3JtYXQsdGhpcy5fZ3JhZGllbnRUeXBlPWwuZ3JhZGllbnRUeXBlLHRoaXMuX3I8MSYmKHRoaXMuX3I9YSh0aGlzLl9yKSksdGhpcy5fZzwxJiYodGhpcy5fZz1hKHRoaXMuX2cpKSx0aGlzLl9iPDEmJih0aGlzLl9iPWEodGhpcy5fYikpLHRoaXMuX29rPXUub2ssdGhpcy5fdGNfaWQ9aSsrfWZ1bmN0aW9uIHUodCxlLHIpe3Q9TCh0LDI1NSksZT1MKGUsMjU1KSxyPUwociwyNTUpO3ZhciBuLGksYT1zKHQsZSxyKSxsPW8odCxlLHIpLGM9KGErbCkvMjtpZihhPT1sKW49aT0wO2Vsc2V7dmFyIHU9YS1sO3N3aXRjaChpPWM+LjU/dS8oMi1hLWwpOnUvKGErbCksYSl7Y2FzZSB0Om49KGUtcikvdSsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvdSsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL3UrNH1uLz02fXJldHVybntoOm4sczppLGw6Y319ZnVuY3Rpb24gaCh0LGUscil7dD1MKHQsMjU1KSxlPUwoZSwyNTUpLHI9TChyLDI1NSk7dmFyIG4saSxhPXModCxlLHIpLGw9byh0LGUsciksYz1hLHU9YS1sO2lmKGk9MD09PWE/MDp1L2EsYT09bCluPTA7ZWxzZXtzd2l0Y2goYSl7Y2FzZSB0Om49KGUtcikvdSsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvdSsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL3UrNH1uLz02fXJldHVybntoOm4sczppLHY6Y319ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT1beihhKHQpLnRvU3RyaW5nKDE2KSkseihhKGUpLnRvU3RyaW5nKDE2KSkseihhKHIpLnRvU3RyaW5nKDE2KSldO3JldHVybiBuJiZpWzBdLmNoYXJBdCgwKT09aVswXS5jaGFyQXQoMSkmJmlbMV0uY2hhckF0KDApPT1pWzFdLmNoYXJBdCgxKSYmaVsyXS5jaGFyQXQoMCk9PWlbMl0uY2hhckF0KDEpP2lbMF0uY2hhckF0KDApK2lbMV0uY2hhckF0KDApK2lbMl0uY2hhckF0KDApOmkuam9pbigiIil9ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm5beihEKG4pKSx6KGEodCkudG9TdHJpbmcoMTYpKSx6KGEoZSkudG9TdHJpbmcoMTYpKSx6KGEocikudG9TdHJpbmcoMTYpKV0uam9pbigiIil9ZnVuY3Rpb24gZCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIucy09ZS8xMDAsci5zPVAoci5zKSxjKHIpfWZ1bmN0aW9uIGcodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLnMrPWUvMTAwLHIucz1QKHIucyksYyhyKX1mdW5jdGlvbiBtKHQpe3JldHVybiBjKHQpLmRlc2F0dXJhdGUoMTAwKX1mdW5jdGlvbiB2KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5sKz1lLzEwMCxyLmw9UChyLmwpLGMocil9ZnVuY3Rpb24geSh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvUmdiKCk7cmV0dXJuIHIucj1zKDAsbygyNTUsci5yLWEoLWUvMTAwKjI1NSkpKSxyLmc9cygwLG8oMjU1LHIuZy1hKC1lLzEwMCoyNTUpKSksci5iPXMoMCxvKDI1NSxyLmItYSgtZS8xMDAqMjU1KSkpLGMocil9ZnVuY3Rpb24geCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIubC09ZS8xMDAsci5sPVAoci5sKSxjKHIpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1jKHQpLnRvSHNsKCksbj0oci5oK2UpJTM2MDtyZXR1cm4gci5oPW48MD8zNjArbjpuLGMocil9ZnVuY3Rpb24gXyh0KXt2YXIgZT1jKHQpLnRvSHNsKCk7cmV0dXJuIGUuaD0oZS5oKzE4MCklMzYwLGMoZSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocisxMjApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjQwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gVCh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis5MCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisxODApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjcwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gayh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis3MiklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyMTYpJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBNKHQsZSxyKXtlPWV8fDYscj1yfHwzMDt2YXIgbj1jKHQpLnRvSHNsKCksaT0zNjAvcixhPVtjKHQpXTtmb3Iobi5oPShuLmgtKGkqZT4+MSkrNzIwKSUzNjA7LS1lOyluLmg9KG4uaCtpKSUzNjAsYS5wdXNoKGMobikpO3JldHVybiBhfWZ1bmN0aW9uIEEodCxlKXtlPWV8fDY7Zm9yKHZhciByPWModCkudG9Ic3YoKSxuPXIuaCxpPXIucyxhPXIudixvPVtdLHM9MS9lO2UtLTspby5wdXNoKGMoe2g6bixzOmksdjphfSkpLGE9KGErcyklMTtyZXR1cm4gb31jLnByb3RvdHlwZT17aXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpPDEyOH0saXNMaWdodDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGFyaygpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29rfSxnZXRPcmlnaW5hbElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXR9LGdldEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JtYXR9LGdldEFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F9LGdldEJyaWdodG5lc3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvUmdiKCk7cmV0dXJuKDI5OSp0LnIrNTg3KnQuZysxMTQqdC5iKS8xZTN9LGdldEx1bWluYW5jZTpmdW5jdGlvbigpe3ZhciBlLHIsbixpPXRoaXMudG9SZ2IoKTtyZXR1cm4gZT1pLnIvMjU1LHI9aS5nLzI1NSxuPWkuYi8yNTUsLjIxMjYqKGU8PS4wMzkyOD9lLzEyLjkyOnQucG93KChlKy4wNTUpLzEuMDU1LDIuNCkpKy43MTUyKihyPD0uMDM5Mjg/ci8xMi45Mjp0LnBvdygocisuMDU1KS8xLjA1NSwyLjQpKSsuMDcyMioobjw9LjAzOTI4P24vMTIuOTI6dC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KSl9LHNldEFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hPUModCksdGhpcy5fcm91bmRBPWEoMTAwKnRoaXMuX2EpLzEwMCx0aGlzfSx0b0hzdjpmdW5jdGlvbigpe3ZhciB0PWgodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsdjp0LnYsYTp0aGlzLl9hfX0sdG9Ic3ZTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1oKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC52KTtyZXR1cm4gMT09dGhpcy5fYT8iaHN2KCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc3ZhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hzbDpmdW5jdGlvbigpe3ZhciB0PXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsbDp0LmwsYTp0aGlzLl9hfX0sdG9Ic2xTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD11KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC5sKTtyZXR1cm4gMT09dGhpcy5fYT8iaHNsKCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc2xhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hleDpmdW5jdGlvbih0KXtyZXR1cm4gZih0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0KX0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXgodCl9LHRvSGV4ODpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1beihhKHQpLnRvU3RyaW5nKDE2KSkseihhKGUpLnRvU3RyaW5nKDE2KSkseihhKHIpLnRvU3RyaW5nKDE2KSkseihEKG4pKV07aWYoaSYmb1swXS5jaGFyQXQoMCk9PW9bMF0uY2hhckF0KDEpJiZvWzFdLmNoYXJBdCgwKT09b1sxXS5jaGFyQXQoMSkmJm9bMl0uY2hhckF0KDApPT1vWzJdLmNoYXJBdCgxKSYmb1szXS5jaGFyQXQoMCk9PW9bM10uY2hhckF0KDEpKXJldHVybiBvWzBdLmNoYXJBdCgwKStvWzFdLmNoYXJBdCgwKStvWzJdLmNoYXJBdCgwKStvWzNdLmNoYXJBdCgwKTtyZXR1cm4gby5qb2luKCIiKX0odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSx0KX0sdG9IZXg4U3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVybiIjIit0aGlzLnRvSGV4OCh0KX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjphKHRoaXMuX3IpLGc6YSh0aGlzLl9nKSxiOmEodGhpcy5fYiksYTp0aGlzLl9hfX0sdG9SZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrYSh0aGlzLl9yKSsiLCAiK2EodGhpcy5fZykrIiwgIithKHRoaXMuX2IpKyIpIjoicmdiYSgiK2EodGhpcy5fcikrIiwgIithKHRoaXMuX2cpKyIsICIrYSh0aGlzLl9iKSsiLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvUGVyY2VudGFnZVJnYjpmdW5jdGlvbigpe3JldHVybntyOmEoMTAwKkwodGhpcy5fciwyNTUpKSsiJSIsZzphKDEwMCpMKHRoaXMuX2csMjU1KSkrIiUiLGI6YSgxMDAqTCh0aGlzLl9iLDI1NSkpKyIlIixhOnRoaXMuX2F9fSx0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrYSgxMDAqTCh0aGlzLl9yLDI1NSkpKyIlLCAiK2EoMTAwKkwodGhpcy5fZywyNTUpKSsiJSwgIithKDEwMCpMKHRoaXMuX2IsMjU1KSkrIiUpIjoicmdiYSgiK2EoMTAwKkwodGhpcy5fciwyNTUpKSsiJSwgIithKDEwMCpMKHRoaXMuX2csMjU1KSkrIiUsICIrYSgxMDAqTCh0aGlzLl9iLDI1NSkpKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvTmFtZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fYT8idHJhbnNwYXJlbnQiOiEodGhpcy5fYTwxKSYmKEVbZih0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiwhMCldfHwhMSl9LHRvRmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPSIjIitwKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EpLHI9ZSxuPXRoaXMuX2dyYWRpZW50VHlwZT8iR3JhZGllbnRUeXBlID0gMSwgIjoiIjtpZih0KXt2YXIgaT1jKHQpO3I9IiMiK3AoaS5fcixpLl9nLGkuX2IsaS5fYSl9cmV0dXJuInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCgiK24rInN0YXJ0Q29sb3JzdHI9IitlKyIsZW5kQ29sb3JzdHI9IityKyIpIn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9ISF0O3Q9dHx8dGhpcy5fZm9ybWF0O3ZhciByPSExLG49dGhpcy5fYTwxJiZ0aGlzLl9hPj0wO3JldHVybiBlfHwhbnx8ImhleCIhPT10JiYiaGV4NiIhPT10JiYiaGV4MyIhPT10JiYiaGV4NCIhPT10JiYiaGV4OCIhPT10JiYibmFtZSIhPT10PygicmdiIj09PXQmJihyPXRoaXMudG9SZ2JTdHJpbmcoKSksInByZ2IiPT09dCYmKHI9dGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKSksImhleCIhPT10JiYiaGV4NiIhPT10fHwocj10aGlzLnRvSGV4U3RyaW5nKCkpLCJoZXgzIj09PXQmJihyPXRoaXMudG9IZXhTdHJpbmcoITApKSwiaGV4NCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZyghMCkpLCJoZXg4Ij09PXQmJihyPXRoaXMudG9IZXg4U3RyaW5nKCkpLCJuYW1lIj09PXQmJihyPXRoaXMudG9OYW1lKCkpLCJoc2wiPT09dCYmKHI9dGhpcy50b0hzbFN0cmluZygpKSwiaHN2Ij09PXQmJihyPXRoaXMudG9Ic3ZTdHJpbmcoKSkscnx8dGhpcy50b0hleFN0cmluZygpKToibmFtZSI9PT10JiYwPT09dGhpcy5fYT90aGlzLnRvTmFtZSgpOnRoaXMudG9SZ2JTdHJpbmcoKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLnRvU3RyaW5nKCkpfSxfYXBwbHlNb2RpZmljYXRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSk7cmV0dXJuIHRoaXMuX3I9ci5fcix0aGlzLl9nPXIuX2csdGhpcy5fYj1yLl9iLHRoaXMuc2V0QWxwaGEoci5fYSksdGhpc30sbGlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih2LGFyZ3VtZW50cyl9LGJyaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHksYXJndW1lbnRzKX0sZGFya2VuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHgsYXJndW1lbnRzKX0sZGVzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkLGFyZ3VtZW50cyl9LHNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGcsYXJndW1lbnRzKX0sZ3JleXNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKG0sYXJndW1lbnRzKX0sc3BpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihiLGFyZ3VtZW50cyl9LF9hcHBseUNvbWJpbmF0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoZSkpKX0sYW5hbG9nb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oTSxhcmd1bWVudHMpfSxjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oXyxhcmd1bWVudHMpfSxtb25vY2hyb21hdGljOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oQSxhcmd1bWVudHMpfSxzcGxpdGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihrLGFyZ3VtZW50cyl9LHRyaWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odyxhcmd1bWVudHMpfSx0ZXRyYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihULGFyZ3VtZW50cyl9fSxjLmZyb21SYXRpbz1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09ImEiPT09bj90W25dOk8odFtuXSkpO3Q9cn1yZXR1cm4gYyh0LGUpfSxjLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiEoIXR8fCFlKSYmYyh0KS50b1JnYlN0cmluZygpPT1jKGUpLnRvUmdiU3RyaW5nKCl9LGMucmFuZG9tPWZ1bmN0aW9uKCl7cmV0dXJuIGMuZnJvbVJhdGlvKHtyOmwoKSxnOmwoKSxiOmwoKX0pfSxjLm1peD1mdW5jdGlvbih0LGUscil7cj0wPT09cj8wOnJ8fDUwO3ZhciBuPWModCkudG9SZ2IoKSxpPWMoZSkudG9SZ2IoKSxhPXIvMTAwO3JldHVybiBjKHtyOihpLnItbi5yKSphK24ucixnOihpLmctbi5nKSphK24uZyxiOihpLmItbi5iKSphK24uYixhOihpLmEtbi5hKSphK24uYX0pfSxjLnJlYWRhYmlsaXR5PWZ1bmN0aW9uKGUscil7dmFyIG49YyhlKSxpPWMocik7cmV0dXJuKHQubWF4KG4uZ2V0THVtaW5hbmNlKCksaS5nZXRMdW1pbmFuY2UoKSkrLjA1KS8odC5taW4obi5nZXRMdW1pbmFuY2UoKSxpLmdldEx1bWluYW5jZSgpKSsuMDUpfSxjLmlzUmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1jLnJlYWRhYmlsaXR5KHQsZSk7c3dpdGNoKGk9ITEsKG49ZnVuY3Rpb24odCl7dmFyIGUscjtlPSgodD10fHx7bGV2ZWw6IkFBIixzaXplOiJzbWFsbCJ9KS5sZXZlbHx8IkFBIikudG9VcHBlckNhc2UoKSxyPSh0LnNpemV8fCJzbWFsbCIpLnRvTG93ZXJDYXNlKCksIkFBIiE9PWUmJiJBQUEiIT09ZSYmKGU9IkFBIik7InNtYWxsIiE9PXImJiJsYXJnZSIhPT1yJiYocj0ic21hbGwiKTtyZXR1cm57bGV2ZWw6ZSxzaXplOnJ9fShyKSkubGV2ZWwrbi5zaXplKXtjYXNlIkFBc21hbGwiOmNhc2UiQUFBbGFyZ2UiOmk9YT49NC41O2JyZWFrO2Nhc2UiQUFsYXJnZSI6aT1hPj0zO2JyZWFrO2Nhc2UiQUFBc21hbGwiOmk9YT49N31yZXR1cm4gaX0sYy5tb3N0UmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM9bnVsbCxsPTA7aT0ocj1yfHx7fSkuaW5jbHVkZUZhbGxiYWNrQ29sb3JzLGE9ci5sZXZlbCxvPXIuc2l6ZTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKykobj1jLnJlYWRhYmlsaXR5KHQsZVt1XSkpPmwmJihsPW4scz1jKGVbdV0pKTtyZXR1cm4gYy5pc1JlYWRhYmxlKHQscyx7bGV2ZWw6YSxzaXplOm99KXx8IWk/czooci5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ITEsYy5tb3N0UmVhZGFibGUodCxbIiNmZmYiLCIjMDAwIl0scikpfTt2YXIgUz1jLm5hbWVzPXthbGljZWJsdWU6ImYwZjhmZiIsYW50aXF1ZXdoaXRlOiJmYWViZDciLGFxdWE6IjBmZiIsYXF1YW1hcmluZToiN2ZmZmQ0IixhenVyZToiZjBmZmZmIixiZWlnZToiZjVmNWRjIixiaXNxdWU6ImZmZTRjNCIsYmxhY2s6IjAwMCIsYmxhbmNoZWRhbG1vbmQ6ImZmZWJjZCIsYmx1ZToiMDBmIixibHVldmlvbGV0OiI4YTJiZTIiLGJyb3duOiJhNTJhMmEiLGJ1cmx5d29vZDoiZGViODg3IixidXJudHNpZW5uYToiZWE3ZTVkIixjYWRldGJsdWU6IjVmOWVhMCIsY2hhcnRyZXVzZToiN2ZmZjAwIixjaG9jb2xhdGU6ImQyNjkxZSIsY29yYWw6ImZmN2Y1MCIsY29ybmZsb3dlcmJsdWU6IjY0OTVlZCIsY29ybnNpbGs6ImZmZjhkYyIsY3JpbXNvbjoiZGMxNDNjIixjeWFuOiIwZmYiLGRhcmtibHVlOiIwMDAwOGIiLGRhcmtjeWFuOiIwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6ImI4ODYwYiIsZGFya2dyYXk6ImE5YTlhOSIsZGFya2dyZWVuOiIwMDY0MDAiLGRhcmtncmV5OiJhOWE5YTkiLGRhcmtraGFraToiYmRiNzZiIixkYXJrbWFnZW50YToiOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiNTU2YjJmIixkYXJrb3JhbmdlOiJmZjhjMDAiLGRhcmtvcmNoaWQ6Ijk5MzJjYyIsZGFya3JlZDoiOGIwMDAwIixkYXJrc2FsbW9uOiJlOTk2N2EiLGRhcmtzZWFncmVlbjoiOGZiYzhmIixkYXJrc2xhdGVibHVlOiI0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IjJmNGY0ZiIsZGFya3NsYXRlZ3JleToiMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIwMGNlZDEiLGRhcmt2aW9sZXQ6Ijk0MDBkMyIsZGVlcHBpbms6ImZmMTQ5MyIsZGVlcHNreWJsdWU6IjAwYmZmZiIsZGltZ3JheToiNjk2OTY5IixkaW1ncmV5OiI2OTY5NjkiLGRvZGdlcmJsdWU6IjFlOTBmZiIsZmlyZWJyaWNrOiJiMjIyMjIiLGZsb3JhbHdoaXRlOiJmZmZhZjAiLGZvcmVzdGdyZWVuOiIyMjhiMjIiLGZ1Y2hzaWE6ImYwZiIsZ2FpbnNib3JvOiJkY2RjZGMiLGdob3N0d2hpdGU6ImY4ZjhmZiIsZ29sZDoiZmZkNzAwIixnb2xkZW5yb2Q6ImRhYTUyMCIsZ3JheToiODA4MDgwIixncmVlbjoiMDA4MDAwIixncmVlbnllbGxvdzoiYWRmZjJmIixncmV5OiI4MDgwODAiLGhvbmV5ZGV3OiJmMGZmZjAiLGhvdHBpbms6ImZmNjliNCIsaW5kaWFucmVkOiJjZDVjNWMiLGluZGlnbzoiNGIwMDgyIixpdm9yeToiZmZmZmYwIixraGFraToiZjBlNjhjIixsYXZlbmRlcjoiZTZlNmZhIixsYXZlbmRlcmJsdXNoOiJmZmYwZjUiLGxhd25ncmVlbjoiN2NmYzAwIixsZW1vbmNoaWZmb246ImZmZmFjZCIsbGlnaHRibHVlOiJhZGQ4ZTYiLGxpZ2h0Y29yYWw6ImYwODA4MCIsbGlnaHRjeWFuOiJlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiJmYWZhZDIiLGxpZ2h0Z3JheToiZDNkM2QzIixsaWdodGdyZWVuOiI5MGVlOTAiLGxpZ2h0Z3JleToiZDNkM2QzIixsaWdodHBpbms6ImZmYjZjMSIsbGlnaHRzYWxtb246ImZmYTA3YSIsbGlnaHRzZWFncmVlbjoiMjBiMmFhIixsaWdodHNreWJsdWU6Ijg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6Ijc4OSIsbGlnaHRzbGF0ZWdyZXk6Ijc4OSIsbGlnaHRzdGVlbGJsdWU6ImIwYzRkZSIsbGlnaHR5ZWxsb3c6ImZmZmZlMCIsbGltZToiMGYwIixsaW1lZ3JlZW46IjMyY2QzMiIsbGluZW46ImZhZjBlNiIsbWFnZW50YToiZjBmIixtYXJvb246IjgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiNjZjZGFhIixtZWRpdW1ibHVlOiIwMDAwY2QiLG1lZGl1bW9yY2hpZDoiYmE1NWQzIixtZWRpdW1wdXJwbGU6IjkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IjNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiI3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6ImM3MTU4NSIsbWlkbmlnaHRibHVlOiIxOTE5NzAiLG1pbnRjcmVhbToiZjVmZmZhIixtaXN0eXJvc2U6ImZmZTRlMSIsbW9jY2FzaW46ImZmZTRiNSIsbmF2YWpvd2hpdGU6ImZmZGVhZCIsbmF2eToiMDAwMDgwIixvbGRsYWNlOiJmZGY1ZTYiLG9saXZlOiI4MDgwMDAiLG9saXZlZHJhYjoiNmI4ZTIzIixvcmFuZ2U6ImZmYTUwMCIsb3JhbmdlcmVkOiJmZjQ1MDAiLG9yY2hpZDoiZGE3MGQ2IixwYWxlZ29sZGVucm9kOiJlZWU4YWEiLHBhbGVncmVlbjoiOThmYjk4IixwYWxldHVycXVvaXNlOiJhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6ImRiNzA5MyIscGFwYXlhd2hpcDoiZmZlZmQ1IixwZWFjaHB1ZmY6ImZmZGFiOSIscGVydToiY2Q4NTNmIixwaW5rOiJmZmMwY2IiLHBsdW06ImRkYTBkZCIscG93ZGVyYmx1ZToiYjBlMGU2IixwdXJwbGU6IjgwMDA4MCIscmViZWNjYXB1cnBsZToiNjYzMzk5IixyZWQ6ImYwMCIscm9zeWJyb3duOiJiYzhmOGYiLHJveWFsYmx1ZToiNDE2OWUxIixzYWRkbGVicm93bjoiOGI0NTEzIixzYWxtb246ImZhODA3MiIsc2FuZHlicm93bjoiZjRhNDYwIixzZWFncmVlbjoiMmU4YjU3IixzZWFzaGVsbDoiZmZmNWVlIixzaWVubmE6ImEwNTIyZCIsc2lsdmVyOiJjMGMwYzAiLHNreWJsdWU6Ijg3Y2VlYiIsc2xhdGVibHVlOiI2YTVhY2QiLHNsYXRlZ3JheToiNzA4MDkwIixzbGF0ZWdyZXk6IjcwODA5MCIsc25vdzoiZmZmYWZhIixzcHJpbmdncmVlbjoiMDBmZjdmIixzdGVlbGJsdWU6IjQ2ODJiNCIsdGFuOiJkMmI0OGMiLHRlYWw6IjAwODA4MCIsdGhpc3RsZToiZDhiZmQ4Iix0b21hdG86ImZmNjM0NyIsdHVycXVvaXNlOiI0MGUwZDAiLHZpb2xldDoiZWU4MmVlIix3aGVhdDoiZjVkZWIzIix3aGl0ZToiZmZmIix3aGl0ZXNtb2tlOiJmNWY1ZjUiLHllbGxvdzoiZmYwIix5ZWxsb3dncmVlbjoiOWFjZDMyIn0sRT1jLmhleE5hbWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3Rbcl1dPXIpO3JldHVybiBlfShTKTtmdW5jdGlvbiBDKHQpe3JldHVybiB0PXBhcnNlRmxvYXQodCksKGlzTmFOKHQpfHx0PDB8fHQ+MSkmJih0PTEpLHR9ZnVuY3Rpb24gTChlLHIpeyhmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoIi4iKSYmMT09PXBhcnNlRmxvYXQodCl9KShlKSYmKGU9IjEwMCUiKTt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoIiUiKX0oZSk7cmV0dXJuIGU9byhyLHMoMCxwYXJzZUZsb2F0KGUpKSksbiYmKGU9cGFyc2VJbnQoZSpyLDEwKS8xMDApLHQuYWJzKGUtcik8MWUtNj8xOmUlci9wYXJzZUZsb2F0KHIpfWZ1bmN0aW9uIFAodCl7cmV0dXJuIG8oMSxzKDAsdCkpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIHBhcnNlSW50KHQsMTYpfWZ1bmN0aW9uIHoodCl7cmV0dXJuIDE9PXQubGVuZ3RoPyIwIit0OiIiK3R9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gdDw9MSYmKHQ9MTAwKnQrIiUiKSx0fWZ1bmN0aW9uIEQoZSl7cmV0dXJuIHQucm91bmQoMjU1KnBhcnNlRmxvYXQoZSkpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBSKHQpe3JldHVybiBJKHQpLzI1NX12YXIgRixCLE4saj0oQj0iW1xcc3xcXChdKygiKyhGPSIoPzpbLVxcK10/XFxkKlxcLlxcZCslPyl8KD86Wy1cXCtdP1xcZCslPykiKSsiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVxccypcXCk/IixOPSJbXFxzfFxcKF0rKCIrRisiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVxccypcXCk/Iix7Q1NTX1VOSVQ6bmV3IFJlZ0V4cChGKSxyZ2I6bmV3IFJlZ0V4cCgicmdiIitCKSxyZ2JhOm5ldyBSZWdFeHAoInJnYmEiK04pLGhzbDpuZXcgUmVnRXhwKCJoc2wiK0IpLGhzbGE6bmV3IFJlZ0V4cCgiaHNsYSIrTiksaHN2Om5ldyBSZWdFeHAoImhzdiIrQiksaHN2YTpuZXcgUmVnRXhwKCJoc3ZhIitOKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfSk7ZnVuY3Rpb24gVSh0KXtyZXR1cm4hIWouQ1NTX1VOSVQuZXhlYyh0KX0idW5kZWZpbmVkIiE9dHlwZW9mIGUmJmUuZXhwb3J0cz9lLmV4cG9ydHM9Yzp3aW5kb3cudGlueWNvbG9yPWN9KE1hdGgpfSx7fV0sNTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1pLGUuZXhwb3J0cy5mbG9hdDMyPWUuZXhwb3J0cy5mbG9hdD1pLGUuZXhwb3J0cy5mcmFjdDMyPWUuZXhwb3J0cy5mcmFjdD1mdW5jdGlvbih0KXtpZih0Lmxlbmd0aCl7Zm9yKHZhciBlPWkodCkscj0wLG49ZS5sZW5ndGg7cjxuO3IrKyllW3JdPXRbcl0tZVtyXTtyZXR1cm4gZX1yZXR1cm4gaSh0LWkodCkpfTt2YXIgbj1uZXcgRmxvYXQzMkFycmF5KDEpO2Z1bmN0aW9uIGkodCl7aWYodC5sZW5ndGgpe2lmKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpcmV0dXJuIHQ7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSh0KTtyZXR1cm4gZS5zZXQodCksZX1yZXR1cm4gblswXT10LG5bMF19fSx7fV0sNTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcnNlLXVuaXQiKTtlLmV4cG9ydHM9YTtmdW5jdGlvbiBpKHQsZSl7dmFyIHI9bihnZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoZSkpO3JldHVybiByWzBdKmEoclsxXSx0KX1mdW5jdGlvbiBhKHQsZSl7c3dpdGNoKGU9ZXx8ZG9jdW1lbnQuYm9keSx0PSh0fHwicHgiKS50cmltKCkudG9Mb3dlckNhc2UoKSxlIT09d2luZG93JiZlIT09ZG9jdW1lbnR8fChlPWRvY3VtZW50LmJvZHkpLHQpe2Nhc2UiJSI6cmV0dXJuIGUuY2xpZW50SGVpZ2h0LzEwMDtjYXNlImNoIjpjYXNlImV4IjpyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLnN0eWxlWyJmb250LXNpemUiXT0iMTI4Iit0LGUuYXBwZW5kQ2hpbGQocik7dmFyIG49aShyLCJmb250LXNpemUiKS8xMjg7cmV0dXJuIGUucmVtb3ZlQ2hpbGQociksbn0odCxlKTtjYXNlImVtIjpyZXR1cm4gaShlLCJmb250LXNpemUiKTtjYXNlInJlbSI6cmV0dXJuIGkoZG9jdW1lbnQuYm9keSwiZm9udC1zaXplIik7Y2FzZSJ2dyI6cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoLzEwMDtjYXNlInZoIjpyZXR1cm4gd2luZG93LmlubmVySGVpZ2h0LzEwMDtjYXNlInZtaW4iOnJldHVybiBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQpLzEwMDtjYXNlInZtYXgiOnJldHVybiBNYXRoLm1heCh3aW5kb3cuaW5uZXJXaWR0aCx3aW5kb3cuaW5uZXJIZWlnaHQpLzEwMDtjYXNlImluIjpyZXR1cm4gOTY7Y2FzZSJjbSI6cmV0dXJuIDk2LzIuNTQ7Y2FzZSJtbSI6cmV0dXJuIDk2LzI1LjQ7Y2FzZSJwdCI6cmV0dXJuIDk2LzcyO2Nhc2UicGMiOnJldHVybiAxNn1yZXR1cm4gMX19LHsicGFyc2UtdW5pdCI6NDgwfV0sNTUxOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/bihyKTpuKCh0PXR8fHNlbGYpLnRvcG9qc29uPXQudG9wb2pzb258fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuIHR9ZnVuY3Rpb24gcih0KXtpZihudWxsPT10KXJldHVybiBlO3ZhciByLG4saT10LnNjYWxlWzBdLGE9dC5zY2FsZVsxXSxvPXQudHJhbnNsYXRlWzBdLHM9dC50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZXx8KHI9bj0wKTt2YXIgbD0yLGM9dC5sZW5ndGgsdT1uZXcgQXJyYXkoYyk7Zm9yKHVbMF09KHIrPXRbMF0pKmkrbyx1WzFdPShuKz10WzFdKSphK3M7bDxjOyl1W2xdPXRbbF0sKytsO3JldHVybiB1fX1mdW5jdGlvbiBuKHQpe3ZhciBlLG49cih0LnRyYW5zZm9ybSksaT0xLzAsYT1pLG89LWkscz0taTtmdW5jdGlvbiBsKHQpeyh0PW4odCkpWzBdPGkmJihpPXRbMF0pLHRbMF0+byYmKG89dFswXSksdFsxXTxhJiYoYT10WzFdKSx0WzFdPnMmJihzPXRbMV0pfWZ1bmN0aW9uIGModCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKGMpO2JyZWFrO2Nhc2UiUG9pbnQiOmwodC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2gobCl9fWZvcihlIGluIHQuYXJjcy5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxsPXQubGVuZ3RoOysrcjxsOykoZT1uKHRbcl0scikpWzBdPGkmJihpPWVbMF0pLGVbMF0+byYmKG89ZVswXSksZVsxXTxhJiYoYT1lWzFdKSxlWzFdPnMmJihzPWVbMV0pfSkpLHQub2JqZWN0cyljKHQub2JqZWN0c1tlXSk7cmV0dXJuW2ksYSxvLHNdfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj1lLmlkLG49ZS5iYm94LGk9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxvPWEodCxlKTtyZXR1cm4gbnVsbD09ciYmbnVsbD09bj97dHlwZToiRmVhdHVyZSIscHJvcGVydGllczppLGdlb21ldHJ5Om99Om51bGw9PW4/e3R5cGU6IkZlYXR1cmUiLGlkOnIscHJvcGVydGllczppLGdlb21ldHJ5Om99Ont0eXBlOiJGZWF0dXJlIixpZDpyLGJib3g6bixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6b319ZnVuY3Rpb24gYSh0LGUpe3ZhciBuPXIodC50cmFuc2Zvcm0pLGk9dC5hcmNzO2Z1bmN0aW9uIGEodCxlKXtlLmxlbmd0aCYmZS5wb3AoKTtmb3IodmFyIHI9aVt0PDA/fnQ6dF0sYT0wLG89ci5sZW5ndGg7YTxvOysrYSllLnB1c2gobihyW2FdLGEpKTt0PDAmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1uLWU7aTwtLW47KXI9dFtpXSx0W2krK109dFtuXSx0W25dPXJ9KGUsbyl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih0KX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWEodFtyXSxlKTtyZXR1cm4gZS5sZW5ndGg8MiYmZS5wdXNoKGVbMF0pLGV9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9cyh0KTtlLmxlbmd0aDw0OyllLnB1c2goZVswXSk7cmV0dXJuIGV9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5tYXAobCl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLnR5cGU7c3dpdGNoKG4pe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpyZXR1cm57dHlwZTpuLGdlb21ldHJpZXM6ZS5nZW9tZXRyaWVzLm1hcCh0KX07Y2FzZSJQb2ludCI6cj1vKGUuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6cj1lLmNvb3JkaW5hdGVzLm1hcChvKTticmVhaztjYXNlIkxpbmVTdHJpbmciOnI9cyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyPWUuYXJjcy5tYXAocyk7YnJlYWs7Y2FzZSJQb2x5Z29uIjpyPWMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cj1lLmFyY3MubWFwKGMpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJue3R5cGU6bixjb29yZGluYXRlczpyfX0oZSl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXt9LG49e30saT17fSxhPVtdLG89LTE7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgbiBpbiB0KXt2YXIgaT10W25dO2RlbGV0ZSBlW2kuc3RhcnRdLGRlbGV0ZSBpLnN0YXJ0LGRlbGV0ZSBpLmVuZCxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdPTF9KSksYS5wdXNoKGkpfX1yZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihyLG4pe3ZhciBpLGE9dC5hcmNzW3I8MD9+cjpyXTthLmxlbmd0aDwzJiYhYVsxXVswXSYmIWFbMV1bMV0mJihpPWVbKytvXSxlW29dPXIsZVtuXT1pKX0pKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByLGEsbz1mdW5jdGlvbihlKXt2YXIgcixuPXQuYXJjc1tlPDA/fmU6ZV0saT1uWzBdO3QudHJhbnNmb3JtPyhyPVswLDBdLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7clswXSs9dFswXSxyWzFdKz10WzFdfSkpKTpyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU8MD9bcixpXTpbaSxyXX0oZSkscz1vWzBdLGw9b1sxXTtpZihyPWlbc10paWYoZGVsZXRlIGlbci5lbmRdLHIucHVzaChlKSxyLmVuZD1sLGE9bltsXSl7ZGVsZXRlIG5bYS5zdGFydF07dmFyIGM9YT09PXI/cjpyLmNvbmNhdChhKTtuW2Muc3RhcnQ9ci5zdGFydF09aVtjLmVuZD1hLmVuZF09Y31lbHNlIG5bci5zdGFydF09aVtyLmVuZF09cjtlbHNlIGlmKHI9bltsXSlpZihkZWxldGUgbltyLnN0YXJ0XSxyLnVuc2hpZnQoZSksci5zdGFydD1zLGE9aVtzXSl7ZGVsZXRlIGlbYS5lbmRdO3ZhciB1PWE9PT1yP3I6YS5jb25jYXQocik7blt1LnN0YXJ0PWEuc3RhcnRdPWlbdS5lbmQ9ci5lbmRdPXV9ZWxzZSBuW3Iuc3RhcnRdPWlbci5lbmRdPXI7ZWxzZSBuWyhyPVtlXSkuc3RhcnQ9c109aVtyLmVuZD1sXT1yfSkpLHMoaSxuKSxzKG4saSksZS5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XXx8YS5wdXNoKFt0XSl9KSksYX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbixpLGE7aWYoYXJndW1lbnRzLmxlbmd0aD4xKW49bCh0LGUscik7ZWxzZSBmb3IoaT0wLG49bmV3IEFycmF5KGE9dC5hcmNzLmxlbmd0aCk7aTxhOysraSluW2ldPWk7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsYXJjczpvKHQsbil9fWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuLGk9W10sYT1bXTtmdW5jdGlvbiBvKHQpe3ZhciBlPXQ8MD9+dDp0OyhhW2VdfHwoYVtlXT1bXSkpLnB1c2goe2k6dCxnOm59KX1mdW5jdGlvbiBzKHQpe3QuZm9yRWFjaChvKX1mdW5jdGlvbiBsKHQpe3QuZm9yRWFjaChzKX1yZXR1cm4gZnVuY3Rpb24gdChlKXtzd2l0Y2gobj1lLGUudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmUuZ2VvbWV0cmllcy5mb3JFYWNoKHQpO2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6cyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmwoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6IWZ1bmN0aW9uKHQpe3QuZm9yRWFjaChsKX0oZS5hcmNzKX19KGUpLGEuZm9yRWFjaChudWxsPT1yP2Z1bmN0aW9uKHQpe2kucHVzaCh0WzBdLmkpfTpmdW5jdGlvbih0KXtyKHRbMF0uZyx0W3QubGVuZ3RoLTFdLmcpJiZpLnB1c2godFswXS5pKX0pLGl9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXt9LG49W10saT1bXTtmdW5jdGlvbiBzKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXsocltlPWU8MD9+ZTplXXx8KHJbZV09W10pKS5wdXNoKHQpfSkpfSkpLG4ucHVzaCh0KX1mdW5jdGlvbiBsKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPXQubGVuZ3RoLGk9dFtuLTFdLGE9MDsrK3I8bjspZT1pLGk9dFtyXSxhKz1lWzBdKmlbMV0tZVsxXSppWzBdO3JldHVybiBNYXRoLmFicyhhKX0oYSh0LHt0eXBlOiJQb2x5Z29uIixhcmNzOltlXX0pLmNvb3JkaW5hdGVzWzBdKX1yZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbiB0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIlBvbHlnb24iOnMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6ZS5hcmNzLmZvckVhY2gocyl9fSkpLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuXyl7dmFyIGU9W10sbj1bdF07Zm9yKHQuXz0xLGkucHVzaChlKTt0PW4ucG9wKCk7KWUucHVzaCh0KSx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5ffHwodC5fPTEsbi5wdXNoKHQpKX0pKX0pKX0pKX19KSksbi5mb3JFYWNoKChmdW5jdGlvbih0KXtkZWxldGUgdC5ffSkpLHt0eXBlOiJNdWx0aVBvbHlnb24iLGFyY3M6aS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuLGk9W107aWYoZS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0ubGVuZ3RoPDImJmkucHVzaCh0KX0pKX0pKX0pKSwobj0oaT1vKHQsaSkpLmxlbmd0aCk+MSlmb3IodmFyIGEscyxjPTEsdT1sKGlbMF0pO2M8bjsrK2MpKGE9bChpW2NdKSk+dSYmKHM9aVswXSxpWzBdPWlbY10saVtjXT1zLHU9YSk7cmV0dXJuIGl9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MH0pKX19ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOyl7dmFyIGk9cituPj4+MTt0W2ldPGU/cj1pKzE6bj1pfXJldHVybiByfWZ1bmN0aW9uIGgodCl7aWYobnVsbD09dClyZXR1cm4gZTt2YXIgcixuLGk9dC5zY2FsZVswXSxhPXQuc2NhbGVbMV0sbz10LnRyYW5zbGF0ZVswXSxzPXQudHJhbnNsYXRlWzFdO3JldHVybiBmdW5jdGlvbih0LGUpe2V8fChyPW49MCk7dmFyIGw9MixjPXQubGVuZ3RoLHU9bmV3IEFycmF5KGMpLGg9TWF0aC5yb3VuZCgodFswXS1vKS9pKSxmPU1hdGgucm91bmQoKHRbMV0tcykvYSk7Zm9yKHVbMF09aC1yLHI9aCx1WzFdPWYtbixuPWY7bDxjOyl1W2xdPXRbbF0sKytsO3JldHVybiB1fX10LmJib3g9bix0LmZlYXR1cmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXQub2JqZWN0c1tlXSksIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczplLmdlb21ldHJpZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaSh0LGUpfSkpfTppKHQsZSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCxjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVyZ2VBcmNzPWMsdC5tZXNoPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQscy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lc2hBcmNzPXMsdC5uZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10Lm1hcCgoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtmdW5jdGlvbiBuKHQscil7dC5mb3JFYWNoKChmdW5jdGlvbih0KXt0PDAmJih0PX50KTt2YXIgbj1lW3RdO24/bi5wdXNoKHIpOmVbdF09W3JdfSkpfWZ1bmN0aW9uIGkodCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe24odCxlKX0pKX12YXIgYT17TGluZVN0cmluZzpuLE11bHRpTGluZVN0cmluZzppLFBvbHlnb246aSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2kodCxlKX0pKX19O2Zvcih2YXIgbyBpbiB0LmZvckVhY2goKGZ1bmN0aW9uIHQoZSxyKXsiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWUudHlwZT9lLmdlb21ldHJpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dChlLHIpfSkpOmUudHlwZSBpbiBhJiZhW2UudHlwZV0oZS5hcmNzLHIpfSkpLGUpZm9yKHZhciBzPWVbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYylmb3IodmFyIGg9YysxO2g8bDsrK2gpe3ZhciBmLHA9c1tjXSxkPXNbaF07KGY9cltwXSlbbz11KGYsZCldIT09ZCYmZi5zcGxpY2UobywwLGQpLChmPXJbZF0pW289dShmLHApXSE9PXAmJmYuc3BsaWNlKG8sMCxwKX1yZXR1cm4gcn0sdC5xdWFudGl6ZT1mdW5jdGlvbih0LGUpe2lmKHQudHJhbnNmb3JtKXRocm93IG5ldyBFcnJvcigiYWxyZWFkeSBxdWFudGl6ZWQiKTtpZihlJiZlLnNjYWxlKWw9dC5iYm94O2Vsc2V7aWYoISgocj1NYXRoLmZsb29yKGUpKT49MikpdGhyb3cgbmV3IEVycm9yKCJuIG11c3QgYmUgXHUyMjY1MiIpO3ZhciByLGk9KGw9dC5iYm94fHxuKHQpKVswXSxhPWxbMV0sbz1sWzJdLHM9bFszXTtlPXtzY2FsZTpbby1pPyhvLWkpLyhyLTEpOjEscy1hPyhzLWEpLyhyLTEpOjFdLHRyYW5zbGF0ZTpbaSxhXX19dmFyIGwsYyx1PWgoZSksZj10Lm9iamVjdHMscD17fTtmdW5jdGlvbiBkKHQpe3JldHVybiB1KHQpfWZ1bmN0aW9uIGcodCl7dmFyIGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmU9e3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczp0Lmdlb21ldHJpZXMubWFwKGcpfTticmVhaztjYXNlIlBvaW50IjplPXt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6ZCh0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aVBvaW50IjplPXt0eXBlOiJNdWx0aVBvaW50Iixjb29yZGluYXRlczp0LmNvb3JkaW5hdGVzLm1hcChkKX07YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdH1yZXR1cm4gbnVsbCE9dC5pZCYmKGUuaWQ9dC5pZCksbnVsbCE9dC5iYm94JiYoZS5iYm94PXQuYmJveCksbnVsbCE9dC5wcm9wZXJ0aWVzJiYoZS5wcm9wZXJ0aWVzPXQucHJvcGVydGllcyksZX1mb3IoYyBpbiBmKXBbY109ZyhmW2NdKTtyZXR1cm57dHlwZToiVG9wb2xvZ3kiLGJib3g6bCx0cmFuc2Zvcm06ZSxvYmplY3RzOnAsYXJjczp0LmFyY3MubWFwKChmdW5jdGlvbih0KXt2YXIgZSxyPTAsbj0xLGk9dC5sZW5ndGgsYT1uZXcgQXJyYXkoaSk7Zm9yKGFbMF09dSh0WzBdLDApOysrcjxpOykoKGU9dSh0W3JdLHIpKVswXXx8ZVsxXSkmJihhW24rK109ZSk7cmV0dXJuIDE9PT1uJiYoYVtuKytdPVswLDBdKSxhLmxlbmd0aD1uLGF9KSl9fSx0LnRyYW5zZm9ybT1yLHQudW50cmFuc2Zvcm09aCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSw1NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHQ8MClyZXR1cm5bXTtpZigwPT09dClyZXR1cm5bWzBdXTtmb3IodmFyIGU9MHxNYXRoLnJvdW5kKGEodCsxKSkscj1bXSxvPTA7bzxlOysrbyl7Zm9yKHZhciBzPW4udW5yYW5rKHQsbyksbD1bMF0sYz0wLHU9MDt1PHMubGVuZ3RoOysrdSljKz0xPDxzW3VdLGwucHVzaChjKTtpKHMpPDEmJihsWzBdPWMsbFt0XT0wKSxyLnB1c2gobCl9cmV0dXJuIHJ9O3ZhciBuPXQoInBlcm11dGF0aW9uLXJhbmsiKSxpPXQoInBlcm11dGF0aW9uLXBhcml0eSIpLGE9dCgiZ2FtbWEiKX0se2dhbW1hOjI0OCwicGVybXV0YXRpb24tcGFyaXR5Ijo0ODMsInBlcm11dGF0aW9uLXJhbmsiOjQ4NH1dLDU1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmNlbnRlcnx8WzAsMCwwXSxyPXQudXB8fFswLDEsMF0sbj10LnJpZ2h0fHxoKHIpLGk9dC5yYWRpdXN8fDEsYT10LnRoZXRhfHwwLHU9dC5waGl8fDA7aWYoZT1bXS5zbGljZS5jYWxsKGUsMCwzKSxyPVtdLnNsaWNlLmNhbGwociwwLDMpLHMocixyKSxuPVtdLnNsaWNlLmNhbGwobiwwLDMpLHMobixuKSwiZXllImluIHQpe3ZhciBwPXQuZXllLGQ9W3BbMF0tZVswXSxwWzFdLWVbMV0scFsyXS1lWzJdXTtvKG4sZCxyKSxjKG5bMF0sblsxXSxuWzJdKTwxZS02P249aChyKTpzKG4sbiksaT1jKGRbMF0sZFsxXSxkWzJdKTt2YXIgZz1sKHIsZCkvaSxtPWwobixkKS9pO3U9TWF0aC5hY29zKGcpLGE9TWF0aC5hY29zKG0pfXJldHVybiBpPU1hdGgubG9nKGkpLG5ldyBmKHQuem9vbU1pbix0Lnpvb21NYXgsZSxyLG4saSxhLHUpfTt2YXIgbj10KCJmaWx0ZXJlZC12ZWN0b3IiKSxpPXQoImdsLW1hdDQvaW52ZXJ0IiksYT10KCJnbC1tYXQ0L3JvdGF0ZSIpLG89dCgiZ2wtdmVjMy9jcm9zcyIpLHM9dCgiZ2wtdmVjMy9ub3JtYWxpemUiKSxsPXQoImdsLXZlYzMvZG90Iik7ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0LDIpK01hdGgucG93KGUsMikrTWF0aC5wb3cociwyKSl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gTWF0aC5taW4oMSxNYXRoLm1heCgtMSx0KSl9ZnVuY3Rpb24gaCh0KXt2YXIgZT1NYXRoLmFicyh0WzBdKSxyPU1hdGguYWJzKHRbMV0pLG49TWF0aC5hYnModFsyXSksaT1bMCwwLDBdO2U+TWF0aC5tYXgocixuKT9pWzJdPTE6cj5NYXRoLm1heChlLG4pP2lbMF09MTppWzFdPTE7Zm9yKHZhciBhPTAsbz0wLGw9MDtsPDM7KytsKWErPXRbbF0qdFtsXSxvKz1pW2xdKnRbbF07Zm9yKGw9MDtsPDM7KytsKWlbbF0tPW8vYSp0W2xdO3JldHVybiBzKGksaSksaX1mdW5jdGlvbiBmKHQsZSxyLGksYSxvLHMsbCl7dGhpcy5jZW50ZXI9bihyKSx0aGlzLnVwPW4oaSksdGhpcy5yaWdodD1uKGEpLHRoaXMucmFkaXVzPW4oW29dKSx0aGlzLmFuZ2xlPW4oW3MsbF0pLHRoaXMuYW5nbGUuYm91bmRzPVtbLTEvMCwtTWF0aC5QSS8yXSxbMS8wLE1hdGguUEkvMl1dLHRoaXMuc2V0RGlzdGFuY2VMaW1pdHModCxlKSx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuY2VudGVyLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRVcD10aGlzLnVwLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRSaWdodD10aGlzLnJpZ2h0LmN1cnZlKDApLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZEFuZ2xlPXRoaXMuYW5nbGUuY3VydmUoMCksdGhpcy5jb21wdXRlZFRvd2FyZD1bMCwwLDBdLHRoaXMuY29tcHV0ZWRFeWU9WzAsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PW5ldyBBcnJheSgxNik7Zm9yKHZhciBjPTA7YzwxNjsrK2MpdGhpcy5jb21wdXRlZE1hdHJpeFtjXT0uNTt0aGlzLnJlY2FsY01hdHJpeCgwKX12YXIgcD1mLnByb3RvdHlwZTtwLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dD10PjA/TWF0aC5sb2codCk6LTEvMCxlPWU+MD9NYXRoLmxvZyhlKToxLzAsZT1NYXRoLm1heChlLHQpLHRoaXMucmFkaXVzLmJvdW5kc1swXVswXT10LHRoaXMucmFkaXVzLmJvdW5kc1sxXVswXT1lfSxwLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmFkaXVzLmJvdW5kc1swXTtyZXR1cm4gdD8odFswXT1NYXRoLmV4cChlWzBdWzBdKSx0WzFdPU1hdGguZXhwKGVbMV1bMF0pLHQpOltNYXRoLmV4cChlWzBdWzBdKSxNYXRoLmV4cChlWzFdWzBdKV19LHAucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmN1cnZlKHQpLHRoaXMudXAuY3VydmUodCksdGhpcy5yaWdodC5jdXJ2ZSh0KSx0aGlzLnJhZGl1cy5jdXJ2ZSh0KSx0aGlzLmFuZ2xlLmN1cnZlKHQpO2Zvcih2YXIgZT10aGlzLmNvbXB1dGVkVXAscj10aGlzLmNvbXB1dGVkUmlnaHQsbj0wLGk9MCxhPTA7YTwzOysrYSlpKz1lW2FdKnJbYV0sbis9ZVthXSplW2FdO3ZhciBsPU1hdGguc3FydChuKSx1PTA7Zm9yKGE9MDthPDM7KythKXJbYV0tPWVbYV0qaS9uLHUrPXJbYV0qclthXSxlW2FdLz1sO3ZhciBoPU1hdGguc3FydCh1KTtmb3IoYT0wO2E8MzsrK2EpclthXS89aDt2YXIgZj10aGlzLmNvbXB1dGVkVG93YXJkO28oZixlLHIpLHMoZixmKTt2YXIgcD1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSxkPXRoaXMuY29tcHV0ZWRBbmdsZVswXSxnPXRoaXMuY29tcHV0ZWRBbmdsZVsxXSxtPU1hdGguY29zKGQpLHY9TWF0aC5zaW4oZCkseT1NYXRoLmNvcyhnKSx4PU1hdGguc2luKGcpLGI9dGhpcy5jb21wdXRlZENlbnRlcixfPW0qeSx3PXYqeSxUPXgsaz0tbSp4LE09LXYqeCxBPXksUz10aGlzLmNvbXB1dGVkRXllLEU9dGhpcy5jb21wdXRlZE1hdHJpeDtmb3IoYT0wO2E8MzsrK2Epe3ZhciBDPV8qclthXSt3KmZbYV0rVCplW2FdO0VbNCphKzFdPWsqclthXStNKmZbYV0rQSplW2FdLEVbNCphKzJdPUMsRVs0KmErM109MH12YXIgTD1FWzFdLFA9RVs1XSxJPUVbOV0sej1FWzJdLE89RVs2XSxEPUVbMTBdLFI9UCpELUkqTyxGPUkqei1MKkQsQj1MKk8tUCp6LE49YyhSLEYsQik7Ui89TixGLz1OLEIvPU4sRVswXT1SLEVbNF09RixFWzhdPUI7Zm9yKGE9MDthPDM7KythKVNbYV09YlthXStFWzIrNCphXSpwO2ZvcihhPTA7YTwzOysrYSl7dT0wO2Zvcih2YXIgaj0wO2o8MzsrK2opdSs9RVthKzQqal0qU1tqXTtFWzEyK2FdPS11fUVbMTVdPTF9LHAuZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9O3ZhciBkPVswLDAsMF07cC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodGhpcy5hbmdsZS5tb3ZlKHQsZSxyKSxuKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4O2RbMF09aVsyXSxkWzFdPWlbNl0sZFsyXT1pWzEwXTtmb3IodmFyIG89dGhpcy5jb21wdXRlZFVwLHM9dGhpcy5jb21wdXRlZFJpZ2h0LGw9dGhpcy5jb21wdXRlZFRvd2FyZCxjPTA7YzwzOysrYylpWzQqY109b1tjXSxpWzQqYysxXT1zW2NdLGlbNCpjKzJdPWxbY107YShpLGksbixkKTtmb3IoYz0wO2M8MzsrK2Mpb1tjXT1pWzQqY10sc1tjXT1pWzQqYysxXTt0aGlzLnVwLnNldCh0LG9bMF0sb1sxXSxvWzJdKSx0aGlzLnJpZ2h0LnNldCh0LHNbMF0sc1sxXSxzWzJdKX19LHAucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZXx8MCxyPXJ8fDAsbj1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT0oTWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSksaVsxXSksbz1pWzVdLHM9aVs5XSxsPWMoYSxvLHMpO2EvPWwsby89bCxzLz1sO3ZhciB1PWlbMF0saD1pWzRdLGY9aVs4XSxwPXUqYStoKm8rZipzLGQ9Yyh1LT1hKnAsaC09bypwLGYtPXMqcCksZz0odS89ZCkqZSthKnIsbT0oaC89ZCkqZStvKnIsdj0oZi89ZCkqZStzKnI7dGhpcy5jZW50ZXIubW92ZSh0LGcsbSx2KTt2YXIgeT1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt5PU1hdGgubWF4KDFlLTQseStuKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyh5KSl9LHAudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2VudGVyLm1vdmUodCxlfHwwLHJ8fDAsbnx8MCl9LHAuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPTE7Im51bWJlciI9PXR5cGVvZiByJiYoYT0wfHIpLChhPDB8fGE+MykmJihhPTEpO3ZhciBvPShhKzIpJTM7ZXx8KHRoaXMucmVjYWxjTWF0cml4KHQpLGU9dGhpcy5jb21wdXRlZE1hdHJpeCk7dmFyIHM9ZVthXSxsPWVbYSs0XSxoPWVbYSs4XTtpZihuKXt2YXIgZj1NYXRoLmFicyhzKSxwPU1hdGguYWJzKGwpLGQ9TWF0aC5hYnMoaCksZz1NYXRoLm1heChmLHAsZCk7Zj09PWc/KHM9czwwPy0xOjEsbD1oPTApOmQ9PT1nPyhoPWg8MD8tMToxLHM9bD0wKToobD1sPDA/LTE6MSxzPWg9MCl9ZWxzZXt2YXIgbT1jKHMsbCxoKTtzLz1tLGwvPW0saC89bX12YXIgdix5LHg9ZVtvXSxiPWVbbys0XSxfPWVbbys4XSx3PXgqcytiKmwrXypoLFQ9Yyh4LT1zKncsYi09bCp3LF8tPWgqdyksaz1sKihfLz1UKS1oKihiLz1UKSxNPWgqKHgvPVQpLXMqXyxBPXMqYi1sKngsUz1jKGssTSxBKTtpZihrLz1TLE0vPVMsQS89Uyx0aGlzLmNlbnRlci5qdW1wKHQsSCxHLFkpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy51cC5qdW1wKHQscyxsLGgpLHRoaXMucmlnaHQuanVtcCh0LHgsYixfKSwyPT09YSl7dmFyIEU9ZVsxXSxDPWVbNV0sTD1lWzldLFA9RSp4K0MqYitMKl8sST1FKmsrQypNK0wqQTt2PVI8MD8tTWF0aC5QSS8yOk1hdGguUEkvMix5PU1hdGguYXRhbjIoSSxQKX1lbHNle3ZhciB6PWVbMl0sTz1lWzZdLEQ9ZVsxMF0sUj16KnMrTypsK0QqaCxGPXoqeCtPKmIrRCpfLEI9eiprK08qTStEKkE7dj1NYXRoLmFzaW4odShSKSkseT1NYXRoLmF0YW4yKEIsRil9dGhpcy5hbmdsZS5qdW1wKHQseSx2KSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgTj1lWzJdLGo9ZVs2XSxVPWVbMTBdLFY9dGhpcy5jb21wdXRlZE1hdHJpeDtpKFYsZSk7dmFyIHE9VlsxNV0sSD1WWzEyXS9xLEc9VlsxM10vcSxZPVZbMTRdL3EsVz1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5qdW1wKHQsSC1OKlcsRy1qKlcsWS1VKlcpfSxwLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy51cC5sYXN0VCgpLHRoaXMucmlnaHQubGFzdFQoKSx0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuYW5nbGUubGFzdFQoKSl9LHAuaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMudXAuaWRsZSh0KSx0aGlzLnJpZ2h0LmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLmFuZ2xlLmlkbGUodCl9LHAuZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuZmx1c2godCksdGhpcy51cC5mbHVzaCh0KSx0aGlzLnJpZ2h0LmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMuYW5nbGUuZmx1c2godCl9LHAuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0scC5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHx0aGlzLmNvbXB1dGVkRXllLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcjt2YXIgaT0obj1ufHx0aGlzLmNvbXB1dGVkVXApWzBdLGE9blsxXSxvPW5bMl0scz1jKGksYSxvKTtpZighKHM8MWUtNikpe2kvPXMsYS89cyxvLz1zO3ZhciBsPWVbMF0tclswXSxoPWVbMV0tclsxXSxmPWVbMl0tclsyXSxwPWMobCxoLGYpO2lmKCEocDwxZS02KSl7bC89cCxoLz1wLGYvPXA7dmFyIGQ9dGhpcy5jb21wdXRlZFJpZ2h0LGc9ZFswXSxtPWRbMV0sdj1kWzJdLHk9aSpnK2EqbStvKnYseD1jKGctPXkqaSxtLT15KmEsdi09eSpvKTtpZighKHg8LjAxJiYoeD1jKGc9YSpmLW8qaCxtPW8qbC1pKmYsdj1pKmgtYSpsKSk8MWUtNikpe2cvPXgsbS89eCx2Lz14LHRoaXMudXAuc2V0KHQsaSxhLG8pLHRoaXMucmlnaHQuc2V0KHQsZyxtLHYpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhwKSk7dmFyIGI9YSp2LW8qbSxfPW8qZy1pKnYsdz1pKm0tYSpnLFQ9YyhiLF8sdyksaz1pKmwrYSpoK28qZixNPWcqbCttKmgrdipmLEE9KGIvPVQpKmwrKF8vPVQpKmgrKHcvPVQpKmYsUz1NYXRoLmFzaW4odShrKSksRT1NYXRoLmF0YW4yKEEsTSksQz10aGlzLmFuZ2xlLl9zdGF0ZSxMPUNbQy5sZW5ndGgtMV0sUD1DW0MubGVuZ3RoLTJdO0wlPTIqTWF0aC5QSTt2YXIgST1NYXRoLmFicyhMKzIqTWF0aC5QSS1FKSx6PU1hdGguYWJzKEwtRSksTz1NYXRoLmFicyhMLTIqTWF0aC5QSS1FKTtJPHomJihMKz0yKk1hdGguUEkpLE88eiYmKEwtPTIqTWF0aC5QSSksdGhpcy5hbmdsZS5qdW1wKHRoaXMuYW5nbGUubGFzdFQoKSxMLFApLHRoaXMuYW5nbGUuc2V0KHQsRSxTKX19fX19LHsiZmlsdGVyZWQtdmVjdG9yIjoyNDIsImdsLW1hdDQvaW52ZXJ0IjoyNzgsImdsLW1hdDQvcm90YXRlIjoyODMsImdsLXZlYzMvY3Jvc3MiOjMzOSwiZ2wtdmVjMy9kb3QiOjM0NCwiZ2wtdmVjMy9ub3JtYWxpemUiOjM2MX1dLDU1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQqZSxhPW4qdCxvPWEtKGEtdCkscz10LW8sbD1uKmUsYz1sLShsLWUpLHU9ZS1jLGg9cyp1LShpLW8qYy1zKmMtbyp1KTtpZihyKXJldHVybiByWzBdPWgsclsxXT1pLHI7cmV0dXJuW2gsaV19O3ZhciBuPSsoTWF0aC5wb3coMiwyNykrMSl9LHt9XSw1NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10K2UsaT1uLXQsYT1lLWksbz10LShuLWkpO2lmKHIpcmV0dXJuIHJbMF09bythLHJbMV09bixyO3JldHVybltvK2Esbl19fSx7fV0sNTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Byb3RvdHlwZS9pcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdClyZXR1cm4hMTtpZighaGFzT3duUHJvcGVydHkuY2FsbCh0LCJsZW5ndGgiKSlyZXR1cm4hMTt0cnl7aWYoIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aClyZXR1cm4hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdC5jYWxsKXJldHVybiExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0LmFwcGx5KXJldHVybiExfWNhdGNoKHQpe3JldHVybiExfXJldHVybiFuKHQpfX0seyIuLi9wcm90b3R5cGUvaXMiOjU2M31dLDU1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi92YWx1ZS9pcyIpLGk9dCgiLi4vb2JqZWN0L2lzIiksYT10KCIuLi9zdHJpbmcvY29lcmNlIiksbz10KCIuL3RvLXNob3J0LXN0cmluZyIpLHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZXBsYWNlKCIldiIsbyhlKSl9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIWkocikpdGhyb3cgbmV3IFR5cGVFcnJvcihzKGUsdCkpO2lmKCFuKHQpKXtpZigiZGVmYXVsdCJpbiByKXJldHVybiByLmRlZmF1bHQ7aWYoci5pc09wdGlvbmFsKXJldHVybiBudWxsfXZhciBvPWEoci5lcnJvck1lc3NhZ2UpO3Rocm93IG4obyl8fChvPWUpLG5ldyBUeXBlRXJyb3IocyhvLHQpKX19LHsiLi4vb2JqZWN0L2lzIjo1NjAsIi4uL3N0cmluZy9jb2VyY2UiOjU2NCwiLi4vdmFsdWUvaXMiOjU2NiwiLi90by1zaG9ydC1zdHJpbmciOjU1OX1dLDU1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LnRvU3RyaW5nKCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBTdHJpbmcodCl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fX19LHt9XSw1NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zYWZlLXRvLXN0cmluZyIpLGk9L1tcblxyXHUyMDI4XHUyMDI5XS9nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uKHQpO3JldHVybiBudWxsPT09ZT8iPE5vbi1jb2VyY2libGUgdG8gc3RyaW5nIHZhbHVlPiI6KGUubGVuZ3RoPjEwMCYmKGU9ZS5zbGljZSgwLDk5KSsiXHUyMDI2IiksZT1lLnJlcGxhY2UoaSwoZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiXG4iOnJldHVybiJcXG4iO2Nhc2UiXHIiOnJldHVybiJcXHIiO2Nhc2UiXHUyMDI4IjpyZXR1cm4iXFx1MjAyOCI7Y2FzZSJcdTIwMjkiOnJldHVybiJcXHUyMDI5IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBjaGFyYWN0ZXIiKX19KSkpfX0seyIuL3NhZmUtdG8tc3RyaW5nIjo1NTh9XSw1NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdmFsdWUvaXMiKSxpPXtvYmplY3Q6ITAsZnVuY3Rpb246ITAsdW5kZWZpbmVkOiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISFuKHQpJiZoYXNPd25Qcm9wZXJ0eS5jYWxsKGksdHlwZW9mIHQpfX0seyIuLi92YWx1ZS9pcyI6NTY2fV0sNTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYi9yZXNvbHZlLWV4Y2VwdGlvbiIpLGk9dCgiLi9pcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT90Om4odCwiJXYgaXMgbm90IGEgcGxhaW4gZnVuY3Rpb24iLGFyZ3VtZW50c1sxXSl9fSx7Ii4uL2xpYi9yZXNvbHZlLWV4Y2VwdGlvbiI6NTU3LCIuL2lzIjo1NjJ9XSw1NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZnVuY3Rpb24vaXMiKSxpPS9eXHMqY2xhc3NbXHN7L31dLyxhPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISFuKHQpJiYhaS50ZXN0KGEuY2FsbCh0KSl9fSx7Ii4uL2Z1bmN0aW9uL2lzIjo1NTZ9XSw1NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vb2JqZWN0L2lzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXJldHVybiExO3RyeXtyZXR1cm4hIXQuY29uc3RydWN0b3ImJnQuY29uc3RydWN0b3IucHJvdG90eXBlPT09dH1jYXRjaCh0KXtyZXR1cm4hMX19fSx7Ii4uL29iamVjdC9pcyI6NTYwfV0sNTY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3ZhbHVlL2lzIiksaT10KCIuLi9vYmplY3QvaXMiKSxhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXJldHVybiBudWxsO2lmKGkodCkpe3ZhciBlPXQudG9TdHJpbmc7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7aWYoZT09PWEpcmV0dXJuIG51bGx9dHJ5e3JldHVybiIiK3R9Y2F0Y2godCl7cmV0dXJuIG51bGx9fX0seyIuLi9vYmplY3QvaXMiOjU2MCwiLi4vdmFsdWUvaXMiOjU2Nn1dLDU2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvcmVzb2x2ZS1leGNlcHRpb24iKSxpPXQoIi4vaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/dDpuKHQsIkNhbm5vdCB1c2UgJXYiLGFyZ3VtZW50c1sxXSl9fSx7Ii4uL2xpYi9yZXNvbHZlLWV4Y2VwdGlvbiI6NTU3LCIuL2lzIjo1NjZ9XSw1NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10fX0se31dLDU2NzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoImR1cCIpLGE9dCgiYnVmZmVyIikuQnVmZmVyO2UuX19UWVBFREFSUkFZX1BPT0x8fChlLl9fVFlQRURBUlJBWV9QT09MPXtVSU5UODppKFszMiwwXSksVUlOVDE2OmkoWzMyLDBdKSxVSU5UMzI6aShbMzIsMF0pLEJJR1VJTlQ2NDppKFszMiwwXSksSU5UODppKFszMiwwXSksSU5UMTY6aShbMzIsMF0pLElOVDMyOmkoWzMyLDBdKSxCSUdJTlQ2NDppKFszMiwwXSksRkxPQVQ6aShbMzIsMF0pLERPVUJMRTppKFszMiwwXSksREFUQTppKFszMiwwXSksVUlOVDhDOmkoWzMyLDBdKSxCVUZGRVI6aShbMzIsMF0pfSk7dmFyIG89InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSxzPSJ1bmRlZmluZWQiIT10eXBlb2YgQmlnVWludDY0QXJyYXksbD0idW5kZWZpbmVkIiE9dHlwZW9mIEJpZ0ludDY0QXJyYXksYz1lLl9fVFlQRURBUlJBWV9QT09MO2MuVUlOVDhDfHwoYy5VSU5UOEM9aShbMzIsMF0pKSxjLkJJR1VJTlQ2NHx8KGMuQklHVUlOVDY0PWkoWzMyLDBdKSksYy5CSUdJTlQ2NHx8KGMuQklHSU5UNjQ9aShbMzIsMF0pKSxjLkJVRkZFUnx8KGMuQlVGRkVSPWkoWzMyLDBdKSk7dmFyIHU9Yy5EQVRBLGg9Yy5CVUZGRVI7ZnVuY3Rpb24gZih0KXtpZih0KXt2YXIgZT10Lmxlbmd0aHx8dC5ieXRlTGVuZ3RoLHI9bi5sb2cyKGUpO3Vbcl0ucHVzaCh0KX19ZnVuY3Rpb24gcCh0KXt0PW4ubmV4dFBvdzIodCk7dmFyIGU9bi5sb2cyKHQpLHI9dVtlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcih0KX1mdW5jdGlvbiBkKHQpe3JldHVybiBuZXcgVWludDhBcnJheShwKHQpLDAsdCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbmV3IFVpbnQxNkFycmF5KHAoMip0KSwwLHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBVaW50MzJBcnJheShwKDQqdCksMCx0KX1mdW5jdGlvbiB2KHQpe3JldHVybiBuZXcgSW50OEFycmF5KHAodCksMCx0KX1mdW5jdGlvbiB5KHQpe3JldHVybiBuZXcgSW50MTZBcnJheShwKDIqdCksMCx0KX1mdW5jdGlvbiB4KHQpe3JldHVybiBuZXcgSW50MzJBcnJheShwKDQqdCksMCx0KX1mdW5jdGlvbiBiKHQpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KHAoNCp0KSwwLHQpfWZ1bmN0aW9uIF8odCl7cmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkocCg4KnQpLDAsdCl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gbz9uZXcgVWludDhDbGFtcGVkQXJyYXkocCh0KSwwLHQpOmQodCl9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gcz9uZXcgQmlnVWludDY0QXJyYXkocCg4KnQpLDAsdCk6bnVsbH1mdW5jdGlvbiBrKHQpe3JldHVybiBsP25ldyBCaWdJbnQ2NEFycmF5KHAoOCp0KSwwLHQpOm51bGx9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gbmV3IERhdGFWaWV3KHAodCksMCx0KX1mdW5jdGlvbiBBKHQpe3Q9bi5uZXh0UG93Mih0KTt2YXIgZT1uLmxvZzIodCkscj1oW2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IGEodCl9ci5mcmVlPWZ1bmN0aW9uKHQpe2lmKGEuaXNCdWZmZXIodCkpaFtuLmxvZzIodC5sZW5ndGgpXS5wdXNoKHQpO2Vsc2V7aWYoIltvYmplY3QgQXJyYXlCdWZmZXJdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSYmKHQ9dC5idWZmZXIpLCF0KXJldHVybjt2YXIgZT10Lmxlbmd0aHx8dC5ieXRlTGVuZ3RoLHI9MHxuLmxvZzIoZSk7dVtyXS5wdXNoKHQpfX0sci5mcmVlVWludDg9ci5mcmVlVWludDE2PXIuZnJlZVVpbnQzMj1yLmZyZWVCaWdVaW50NjQ9ci5mcmVlSW50OD1yLmZyZWVJbnQxNj1yLmZyZWVJbnQzMj1yLmZyZWVCaWdJbnQ2ND1yLmZyZWVGbG9hdDMyPXIuZnJlZUZsb2F0PXIuZnJlZUZsb2F0NjQ9ci5mcmVlRG91YmxlPXIuZnJlZVVpbnQ4Q2xhbXBlZD1yLmZyZWVEYXRhVmlldz1mdW5jdGlvbih0KXtmKHQuYnVmZmVyKX0sci5mcmVlQXJyYXlCdWZmZXI9ZixyLmZyZWVCdWZmZXI9ZnVuY3Rpb24odCl7aFtuLmxvZzIodC5sZW5ndGgpXS5wdXNoKHQpfSxyLm1hbGxvYz1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWV8fCJhcnJheWJ1ZmZlciI9PT1lKXJldHVybiBwKHQpO3N3aXRjaChlKXtjYXNlInVpbnQ4IjpyZXR1cm4gZCh0KTtjYXNlInVpbnQxNiI6cmV0dXJuIGcodCk7Y2FzZSJ1aW50MzIiOnJldHVybiBtKHQpO2Nhc2UiaW50OCI6cmV0dXJuIHYodCk7Y2FzZSJpbnQxNiI6cmV0dXJuIHkodCk7Y2FzZSJpbnQzMiI6cmV0dXJuIHgodCk7Y2FzZSJmbG9hdCI6Y2FzZSJmbG9hdDMyIjpyZXR1cm4gYih0KTtjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdDY0IjpyZXR1cm4gXyh0KTtjYXNlInVpbnQ4X2NsYW1wZWQiOnJldHVybiB3KHQpO2Nhc2UiYmlnaW50NjQiOnJldHVybiBrKHQpO2Nhc2UiYmlndWludDY0IjpyZXR1cm4gVCh0KTtjYXNlImJ1ZmZlciI6cmV0dXJuIEEodCk7Y2FzZSJkYXRhIjpjYXNlImRhdGF2aWV3IjpyZXR1cm4gTSh0KTtkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBudWxsfSxyLm1hbGxvY0FycmF5QnVmZmVyPXAsci5tYWxsb2NVaW50OD1kLHIubWFsbG9jVWludDE2PWcsci5tYWxsb2NVaW50MzI9bSxyLm1hbGxvY0ludDg9dixyLm1hbGxvY0ludDE2PXksci5tYWxsb2NJbnQzMj14LHIubWFsbG9jRmxvYXQzMj1yLm1hbGxvY0Zsb2F0PWIsci5tYWxsb2NGbG9hdDY0PXIubWFsbG9jRG91YmxlPV8sci5tYWxsb2NVaW50OENsYW1wZWQ9dyxyLm1hbGxvY0JpZ1VpbnQ2ND1ULHIubWFsbG9jQmlnSW50NjQ9ayxyLm1hbGxvY0RhdGFWaWV3PU0sci5tYWxsb2NCdWZmZXI9QSxyLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDMyOysrdCljLlVJTlQ4W3RdLmxlbmd0aD0wLGMuVUlOVDE2W3RdLmxlbmd0aD0wLGMuVUlOVDMyW3RdLmxlbmd0aD0wLGMuSU5UOFt0XS5sZW5ndGg9MCxjLklOVDE2W3RdLmxlbmd0aD0wLGMuSU5UMzJbdF0ubGVuZ3RoPTAsYy5GTE9BVFt0XS5sZW5ndGg9MCxjLkRPVUJMRVt0XS5sZW5ndGg9MCxjLkJJR1VJTlQ2NFt0XS5sZW5ndGg9MCxjLkJJR0lOVDY0W3RdLmxlbmd0aD0wLGMuVUlOVDhDW3RdLmxlbmd0aD0wLHVbdF0ubGVuZ3RoPTAsaFt0XS5sZW5ndGg9MH19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiYml0LXR3aWRkbGUiOjk3LGJ1ZmZlcjoxMTEsZHVwOjE3Nn1dLDU2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO2U8dDsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bjt2YXIgaT1uLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofX0pLGkubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LGkuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dCxyPXRoaXMucm9vdHM7clt0XSE9PXQ7KXQ9clt0XTtmb3IoO3JbZV0hPT10Oyl7dmFyIG49cltlXTtyW2VdPXQsZT1ufXJldHVybiB0fSxpLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sNTY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIDA9PT10Lmxlbmd0aD90OmU/KHJ8fHQuc29ydChlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49dC5sZW5ndGgsaT10WzBdLGE9dFswXSxvPTE7bzxuOysrbylpZihhPWksZShpPXRbb10sYSkpe2lmKG89PT1yKXtyKys7Y29udGludWV9dFtyKytdPWl9cmV0dXJuIHQubGVuZ3RoPXIsdH0odCxlKSk6KHJ8fHQuc29ydCgpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9dFswXSxhPTE7YTxyOysrYSxpPW4paWYoaT1uLChuPXRbYV0pIT09aSl7aWYoYT09PWUpe2UrKztjb250aW51ZX10W2UrK109bn1yZXR1cm4gdC5sZW5ndGg9ZSx0fSh0KSl9fSx7fV0sNTcwOltmdW5jdGlvbih0LGUscil7dmFyIG49L1tcJ1wiXS87ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PyhuLnRlc3QodC5jaGFyQXQoMCkpJiYodD10LnN1YnN0cigxKSksbi50ZXN0KHQuY2hhckF0KHQubGVuZ3RoLTEpKSYmKHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKSksdCk6IiJ9fSx7fV0sNTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShyKXx8KHI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO2Zvcih2YXIgbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7dmFyIGE9cltuXTtmb3IodmFyIG8gaW4gYSlpZigodm9pZCAwPT09ZVtvXXx8QXJyYXkuaXNBcnJheShlW29dKXx8dFtvXSE9PWVbb10pJiZvIGluIGUpe3ZhciBzO2lmKCEwPT09YVtvXSlzPWVbb107ZWxzZXtpZighMT09PWFbb10pY29udGludWU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGFbb10mJnZvaWQgMD09PShzPWFbb10oZVtvXSx0LGUpKSljb250aW51ZX10W29dPXN9fXJldHVybiB0fX0se31dLDU3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfHwoZT17fSk7cmV0dXJuIG4odCxlLmNhbnZhc3x8aSxlLmNvbnRleHR8fGEsZSl9O3ZhciBuPXQoIi4vbGliL3Z0ZXh0IiksaT1udWxsLGE9bnVsbDsidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoKGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLndpZHRoPTgxOTIsaS5oZWlnaHQ9MTAyNCxhPWkuZ2V0Q29udGV4dCgiMmQiKSl9LHsiLi9saWIvdnRleHQiOjU3M31dLDU3MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT02NCxvPTEuMjUscz17YnJlYWtsaW5lczohMSxib2xkczohMSxpdGFsaWNzOiExLHN1YnNjcmlwdHM6ITEsc3VwZXJzY3JpcHRzOiExfTtuJiYobi5zaXplJiZuLnNpemU+MCYmKGE9bi5zaXplKSxuLmxpbmVTcGFjaW5nJiZuLmxpbmVTcGFjaW5nPjAmJihvPW4ubGluZVNwYWNpbmcpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5icmVha2xpbmVzJiYocy5icmVha2xpbmVzPSEhbi5zdHlsZXRhZ3MuYnJlYWtsaW5lcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLmJvbGRzJiYocy5ib2xkcz0hIW4uc3R5bGV0YWdzLmJvbGRzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuaXRhbGljcyYmKHMuaXRhbGljcz0hIW4uc3R5bGV0YWdzLml0YWxpY3MpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5zdWJzY3JpcHRzJiYocy5zdWJzY3JpcHRzPSEhbi5zdHlsZXRhZ3Muc3Vic2NyaXB0cyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLnN1cGVyc2NyaXB0cyYmKHMuc3VwZXJzY3JpcHRzPSEhbi5zdHlsZXRhZ3Muc3VwZXJzY3JpcHRzKSk7cmV0dXJuIHIuZm9udD1bbi5mb250U3R5bGUsbi5mb250VmFyaWFudCxuLmZvbnRXZWlnaHQsYSsicHgiLG4uZm9udF0uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5qb2luKCIgIiksci50ZXh0QWxpZ249InN0YXJ0IixyLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsci5kaXJlY3Rpb249Imx0ciIsZihmdW5jdGlvbih0LGUscixuLGEsbyl7cj1yLnJlcGxhY2UoL1xuL2csIiIpLHI9ITA9PT1vLmJyZWFrbGluZXM/ci5yZXBsYWNlKC9cPGJyXD4vZywiXG4iKTpyLnJlcGxhY2UoL1w8YnJcPi9nLCIgIik7dmFyIHM9IiIsbD1bXTtmb3IocD0wO3A8ci5sZW5ndGg7KytwKWxbcF09czshMD09PW8uYm9sZHMmJihsPWMoImIiLCJifCIscixsKSk7ITA9PT1vLml0YWxpY3MmJihsPWMoImkiLCJpfCIscixsKSk7ITA9PT1vLnN1cGVyc2NyaXB0cyYmKGw9Yygic3VwIiwiKzEiLHIsbCkpOyEwPT09by5zdWJzY3JpcHRzJiYobD1jKCJzdWIiLCItMSIscixsKSk7dmFyIHU9W10saD0iIjtmb3IocD0wO3A8ci5sZW5ndGg7KytwKW51bGwhPT1sW3BdJiYoaCs9cltwXSx1LnB1c2gobFtwXSkpO3ZhciBmLHAsZCxnLG0sdj1oLnNwbGl0KCJcbiIpLHk9di5sZW5ndGgseD1NYXRoLnJvdW5kKGEqbiksYj1uLF89MipuLHc9MCxUPXkqeCtfO3QuaGVpZ2h0PFQmJih0LmhlaWdodD1UKTtlLmZpbGxTdHlsZT0iIzAwMCIsZS5maWxsUmVjdCgwLDAsdC53aWR0aCx0LmhlaWdodCksZS5maWxsU3R5bGU9IiNmZmYiO3ZhciBrPTAsTT0iIjtmdW5jdGlvbiBBKCl7aWYoIiIhPT1NKXt2YXIgdD1lLm1lYXN1cmVUZXh0KE0pLndpZHRoO2UuZmlsbFRleHQoTSxiK2QsXytnKSxkKz10fX1mdW5jdGlvbiBTKCl7cmV0dXJuIE1hdGgucm91bmQobSkrInB4ICJ9ZnVuY3Rpb24gRSh0LHIpe3ZhciBuPSIiK2UuZm9udDtpZighMD09PW8uc3Vic2NyaXB0cyl7dmFyIGk9dC5pbmRleE9mKCItIiksYT1yLmluZGV4T2YoIi0iKSxzPWk+LTE/cGFyc2VJbnQodFsxK2ldKTowLGw9YT4tMT9wYXJzZUludChyWzErYV0pOjA7cyE9PWwmJihuPW4ucmVwbGFjZShTKCksIj9weCAiKSxtKj1NYXRoLnBvdyguNzUsbC1zKSxuPW4ucmVwbGFjZSgiP3B4ICIsUygpKSksZys9LjI1KngqKGwtcyl9aWYoITA9PT1vLnN1cGVyc2NyaXB0cyl7dmFyIGM9dC5pbmRleE9mKCIrIiksdT1yLmluZGV4T2YoIisiKSxoPWM+LTE/cGFyc2VJbnQodFsxK2NdKTowLGY9dT4tMT9wYXJzZUludChyWzErdV0pOjA7aCE9PWYmJihuPW4ucmVwbGFjZShTKCksIj9weCAiKSxtKj1NYXRoLnBvdyguNzUsZi1oKSxuPW4ucmVwbGFjZSgiP3B4ICIsUygpKSksZy09LjI1KngqKGYtaCl9aWYoITA9PT1vLmJvbGRzKXt2YXIgcD10LmluZGV4T2YoImJ8Iik+LTEsZD1yLmluZGV4T2YoImJ8Iik+LTE7IXAmJmQmJihuPXY/bi5yZXBsYWNlKCJpdGFsaWMgIiwiaXRhbGljIGJvbGQgIik6ImJvbGQgIituKSxwJiYhZCYmKG49bi5yZXBsYWNlKCJib2xkICIsIiIpKX1pZighMD09PW8uaXRhbGljcyl7dmFyIHY9dC5pbmRleE9mKCJpfCIpPi0xLHk9ci5pbmRleE9mKCJpfCIpPi0xOyF2JiZ5JiYobj0iaXRhbGljICIrbiksdiYmIXkmJihuPW4ucmVwbGFjZSgiaXRhbGljICIsIiIpKX1lLmZvbnQ9bn1mb3IoZj0wO2Y8eTsrK2Ype3ZhciBDPXZbZl0rIlxuIjtmb3IoZD0wLGc9Zip4LG09bixNPSIiLHA9MDtwPEMubGVuZ3RoOysrcCl7dmFyIEw9cCtrPHUubGVuZ3RoP3VbcCtrXTp1W3UubGVuZ3RoLTFdO3M9PT1MP00rPUNbcF06KEEoKSxNPUNbcF0sdm9pZCAwIT09TCYmKEUocyxMKSxzPUwpKX1BKCksays9Qy5sZW5ndGg7dmFyIFA9MHxNYXRoLnJvdW5kKGQrMipiKTt3PFAmJih3PVApfXZhciBJPXcsej1fK3gqeTtyZXR1cm4gaShlLmdldEltYWdlRGF0YSgwLDAsSSx6KS5kYXRhLFt6LEksNF0pLnBpY2soLTEsLTEsMCkudHJhbnNwb3NlKDEsMCl9KGUscix0LGEsbyxzKSxuLGEpfSxlLmV4cG9ydHMucHJvY2Vzc1BpeGVscz1mO3ZhciBuPXQoInN1cmZhY2UtbmV0cyIpLGk9dCgibmRhcnJheSIpLGE9dCgic2ltcGxpZnktcGxhbmFyLWdyYXBoIiksbz10KCJjbGVhbi1wc2xnIikscz10KCJjZHQyZCIpLGw9dCgicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lIik7ZnVuY3Rpb24gYyh0LGUscixuKXtmb3IodmFyIGk9IjwiK3QrIj4iLGE9IjwvIit0KyI+IixvPWkubGVuZ3RoLHM9YS5sZW5ndGgsbD0iKyI9PT1lWzBdfHwiLSI9PT1lWzBdLGM9MCx1PS1zO2M+LTEmJi0xIT09KGM9ci5pbmRleE9mKGksYykpJiYtMSE9PSh1PXIuaW5kZXhPZihhLGMrbykpJiYhKHU8PWMpOyl7Zm9yKHZhciBoPWM7aDx1K3M7KytoKWlmKGg8YytvfHxoPj11KW5baF09bnVsbCxyPXIuc3Vic3RyKDAsaCkrIiAiK3Iuc3Vic3RyKGgrMSk7ZWxzZSBpZihudWxsIT09bltoXSl7dmFyIGY9bltoXS5pbmRleE9mKGVbMF0pOy0xPT09Zj9uW2hdKz1lOmwmJihuW2hdPW5baF0uc3Vic3RyKDAsZisxKSsoMStwYXJzZUludChuW2hdW2YrMV0pKStuW2hdLnN1YnN0cihmKzIpKX12YXIgcD1jK28sZD1yLnN1YnN0cihwLHUtcCkuaW5kZXhPZihpKTtjPS0xIT09ZD9kOnUrc31yZXR1cm4gbn1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9bih0LDEyOCk7cmV0dXJuIGU/YShyLmNlbGxzLHIucG9zaXRpb25zLC4yNSk6e2VkZ2VzOnIuY2VsbHMscG9zaXRpb25zOnIucG9zaXRpb25zfX1mdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpPXUodCxuKSxhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZS50ZXh0QWxpZ258fCJzdGFydCIsaT1lLnRleHRCYXNlbGluZXx8ImFscGhhYmV0aWMiLGE9WzE8PDMwLDE8PDMwXSxvPVswLDBdLHM9dC5sZW5ndGgsbD0wO2w8czsrK2wpZm9yKHZhciBjPXRbbF0sdT0wO3U8MjsrK3UpYVt1XT0wfE1hdGgubWluKGFbdV0sY1t1XSksb1t1XT0wfE1hdGgubWF4KG9bdV0sY1t1XSk7dmFyIGg9MDtzd2l0Y2gobil7Y2FzZSJjZW50ZXIiOmg9LS41KihhWzBdK29bMF0pO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjpoPS1vWzBdO2JyZWFrO2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6aD0tYVswXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidmVjdG9yaXplLXRleHQ6IFVucmVjb2duaXplZCB0ZXh0QWxpZ246ICciK24rIiciKX12YXIgZj0wO3N3aXRjaChpKXtjYXNlImhhbmdpbmciOmNhc2UidG9wIjpmPS1hWzFdO2JyZWFrO2Nhc2UibWlkZGxlIjpmPS0uNSooYVsxXStvWzFdKTticmVhaztjYXNlImFscGhhYmV0aWMiOmNhc2UiaWRlb2dyYXBoaWMiOmY9LTMqcjticmVhaztjYXNlImJvdHRvbSI6Zj0tb1sxXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidmVjdG9yaXplLXRleHQ6IFVucmVjb2dpbml6ZWQgdGV4dEJhc2VsaW5lOiAnIitpKyInIil9dmFyIHA9MS9yO3JldHVybiJsaW5lSGVpZ2h0ImluIGU/cCo9K2UubGluZUhlaWdodDoid2lkdGgiaW4gZT9wPWUud2lkdGgvKG9bMF0tYVswXSk6ImhlaWdodCJpbiBlJiYocD1lLmhlaWdodC8ob1sxXS1hWzFdKSksdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybltwKih0WzBdK2gpLHAqKHRbMV0rZildfSkpfShpLnBvc2l0aW9ucyxlLHIpLGM9aS5lZGdlcyxoPSJjY3ciPT09ZS5vcmllbnRhdGlvbjtpZihvKGEsYyksZS5wb2x5Z29uc3x8ZS5wb2x5Z29ufHxlLnBvbHlsaW5lKXtmb3IodmFyIGY9bChjLGEpLHA9bmV3IEFycmF5KGYubGVuZ3RoKSxkPTA7ZDxmLmxlbmd0aDsrK2Qpe2Zvcih2YXIgZz1mW2RdLG09bmV3IEFycmF5KGcubGVuZ3RoKSx2PTA7djxnLmxlbmd0aDsrK3Ype2Zvcih2YXIgeT1nW3ZdLHg9bmV3IEFycmF5KHkubGVuZ3RoKSxiPTA7Yjx5Lmxlbmd0aDsrK2IpeFtiXT1hW3lbYl1dLnNsaWNlKCk7aCYmeC5yZXZlcnNlKCksbVt2XT14fXBbZF09bX1yZXR1cm4gcH1yZXR1cm4gZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOnMoYSxjLHtkZWxhdW5heTohMSxleHRlcmlvcjohMSxpbnRlcmlvcjohMH0pLHBvc2l0aW9uczphfTp7ZWRnZXM6Yyxwb3NpdGlvbnM6YX19ZnVuY3Rpb24gZih0LGUscil7dHJ5e3JldHVybiBoKHQsZSxyLCEwKX1jYXRjaCh0KXt9dHJ5e3JldHVybiBoKHQsZSxyLCExKX1jYXRjaCh0KXt9cmV0dXJuIGUucG9seWdvbnN8fGUucG9seWxpbmV8fGUucG9seWdvbj9bXTplLnRyaWFuZ2xlc3x8ZS50cmlhbmd1bGF0ZXx8ZS50cmlhbmdsZT97Y2VsbHM6W10scG9zaXRpb25zOltdfTp7ZWRnZXM6W10scG9zaXRpb25zOltdfX19LHtjZHQyZDoxMTIsImNsZWFuLXBzbGciOjEyMSxuZGFycmF5OjQ2OSwicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lIjo0ODgsInNpbXBsaWZ5LXBsYW5hci1ncmFwaCI6NTM0LCJzdXJmYWNlLW5ldHMiOjU0Mn1dLDU3NDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtpZigidW5kZWZpbmVkIj09dHlwZW9mIHNlc3x8IXNlcy5va3x8c2VzLm9rKCkpeyJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzJiYoc2VzLndlYWtNYXBQZXJtaXRIb3N0T2JqZWN0cz1nKTt2YXIgdD0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCl7dmFyIHI9V2Vha01hcDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpO2Vsc2V7dmFyIG49bmV3IHIsaT1PYmplY3QuZnJlZXplKHt9KTtpZihuLnNldChpLDEpLDE9PT1uLmdldChpKSlyZXR1cm4gdm9pZChlLmV4cG9ydHM9V2Vha01hcCk7dD0hMH19T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxzPU9iamVjdC5pc0V4dGVuc2libGUsbD0id2Vha21hcDppZGVudDoiK01hdGgucmFuZG9tKCkrIl9fXyI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5KXt2YXIgYz1uZXcgQXJyYXlCdWZmZXIoMjUpLHU9bmV3IFVpbnQ4QXJyYXkoYyk7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyh1KSxsPSJ3ZWFrbWFwOnJhbmQ6IitBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodSwoZnVuY3Rpb24odCl7cmV0dXJuKHQlMzYpLnRvU3RyaW5nKDM2KX0pKS5qb2luKCIiKSsiX19fIn1pZihvKE9iamVjdCwiZ2V0T3duUHJvcGVydHlOYW1lcyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBhKHQpLmZpbHRlcihtKX19KSwiZ2V0UHJvcGVydHlOYW1lcyJpbiBPYmplY3Qpe3ZhciBoPU9iamVjdC5nZXRQcm9wZXJ0eU5hbWVzO28oT2JqZWN0LCJnZXRQcm9wZXJ0eU5hbWVzIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGgodCkuZmlsdGVyKG0pfX0pfSFmdW5jdGlvbigpe3ZhciB0PU9iamVjdC5mcmVlemU7byhPYmplY3QsImZyZWV6ZSIse3ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2KGUpLHQoZSl9fSk7dmFyIGU9T2JqZWN0LnNlYWw7byhPYmplY3QsInNlYWwiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdih0KSxlKHQpfX0pO3ZhciByPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztvKE9iamVjdCwicHJldmVudEV4dGVuc2lvbnMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdih0KSxyKHQpfX0pfSgpO3ZhciBmPSExLHA9MCxkPWZ1bmN0aW9uKCl7dGhpcyBpbnN0YW5jZW9mIGR8fHgoKTt2YXIgdD1bXSxlPVtdLHI9cCsrO3JldHVybiBPYmplY3QuY3JlYXRlKGQucHJvdG90eXBlLHtnZXRfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKG4saSl7dmFyIGEsbz12KG4pO3JldHVybiBvP3IgaW4gbz9vW3JdOmk6KGE9dC5pbmRleE9mKG4pKT49MD9lW2FdOml9KSl9LGhhc19fXzp7dmFsdWU6eSgoZnVuY3Rpb24oZSl7dmFyIG49dihlKTtyZXR1cm4gbj9yIGluIG46dC5pbmRleE9mKGUpPj0wfSkpfSxzZXRfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKG4saSl7dmFyIGEsbz12KG4pO3JldHVybiBvP29bcl09aTooYT10LmluZGV4T2YobikpPj0wP2VbYV09aTooYT10Lmxlbmd0aCxlW2FdPWksdFthXT1uKSx0aGlzfSkpfSxkZWxldGVfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKG4pe3ZhciBpLGEsbz12KG4pO3JldHVybiBvP3IgaW4gbyYmZGVsZXRlIG9bcl06ISgoaT10LmluZGV4T2YobikpPDApJiYoYT10Lmxlbmd0aC0xLHRbaV09dm9pZCAwLGVbaV09ZVthXSx0W2ldPXRbYV0sdC5sZW5ndGg9YSxlLmxlbmd0aD1hLCEwKX0pKX19KX07ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtnZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saGFzOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGRlbGV0ZTp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZXRlX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksImZ1bmN0aW9uIj09dHlwZW9mIHI/ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dGhpcyBpbnN0YW5jZW9mIGR8fHgoKTt2YXIgZSxuPW5ldyByLGk9dm9pZCAwLGE9ITE7cmV0dXJuIGU9dD9mdW5jdGlvbih0LGUpe3JldHVybiBuLnNldCh0LGUpLG4uaGFzKHQpfHwoaXx8KGk9bmV3IGQpLGkuc2V0KHQsZSkpLHRoaXN9OmZ1bmN0aW9uKHQsZSl7aWYoYSl0cnl7bi5zZXQodCxlKX1jYXRjaChyKXtpfHwoaT1uZXcgZCksaS5zZXRfX18odCxlKX1lbHNlIG4uc2V0KHQsZSk7cmV0dXJuIHRoaXN9LE9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6eSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gaT9uLmhhcyh0KT9uLmdldCh0KTppLmdldF9fXyh0LGUpOm4uZ2V0KHQsZSl9KSl9LGhhc19fXzp7dmFsdWU6eSgoZnVuY3Rpb24odCl7cmV0dXJuIG4uaGFzKHQpfHwhIWkmJmkuaGFzX19fKHQpfSkpfSxzZXRfX186e3ZhbHVlOnkoZSl9LGRlbGV0ZV9fXzp7dmFsdWU6eSgoZnVuY3Rpb24odCl7dmFyIGU9ISFuLmRlbGV0ZSh0KTtyZXR1cm4gaSYmaS5kZWxldGVfX18odCl8fGV9KSl9LHBlcm1pdEhvc3RPYmplY3RzX19fOnt2YWx1ZTp5KChmdW5jdGlvbih0KXtpZih0IT09Zyl0aHJvdyBuZXcgRXJyb3IoImJvZ3VzIGNhbGwgdG8gcGVybWl0SG9zdE9iamVjdHNfX18iKTthPSEwfSkpfX0pfXQmJiJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLG4ucHJvdG90eXBlPWQucHJvdG90eXBlLGUuZXhwb3J0cz1uLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWFrTWFwLnByb3RvdHlwZSwiY29uc3RydWN0b3IiLHt2YWx1ZTpXZWFrTWFwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9KCk6KCJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLGUuZXhwb3J0cz1kKX1mdW5jdGlvbiBnKHQpe3QucGVybWl0SG9zdE9iamVjdHNfX18mJnQucGVybWl0SG9zdE9iamVjdHNfX18oZyl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4hKCJ3ZWFrbWFwOiI9PXQuc3Vic3RyKDAsIndlYWttYXA6Ii5sZW5ndGgpJiYiX19fIj09PXQuc3Vic3RyKHQubGVuZ3RoLTMpKX1mdW5jdGlvbiB2KHQpe2lmKHQhPT1PYmplY3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiTm90IGFuIG9iamVjdDogIit0KTt2YXIgZT10W2xdO2lmKGUmJmUua2V5PT09dClyZXR1cm4gZTtpZihzKHQpKXtlPXtrZXk6dH07dHJ5e3JldHVybiBvKHQsbCx7dmFsdWU6ZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMX0pLGV9Y2F0Y2godCl7cmV0dXJufX19ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5wcm90b3R5cGU9bnVsbCxPYmplY3QuZnJlZXplKHQpfWZ1bmN0aW9uIHgoKXtmfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fChmPSEwLGNvbnNvbGUud2FybigiV2Vha01hcCBzaG91bGQgYmUgaW52b2tlZCBhcyBuZXcgV2Vha01hcCgpLCBub3QgV2Vha01hcCgpLiBUaGlzIHdpbGwgYmUgYW4gZXJyb3IgaW4gdGhlIGZ1dHVyZS4iKSl9fSgpfSx7fV0sNTc1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9oaWRkZW4tc3RvcmUuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIldlYWttYXAtc2hpbTogS2V5IG11c3QgYmUgb2JqZWN0Iik7dmFyIHI9ZS52YWx1ZU9mKHQpO3JldHVybiByJiZyLmlkZW50aXR5PT09dD9yOm4oZSx0KX19fSx7Ii4vaGlkZGVuLXN0b3JlLmpzIjo1NzZ9XSw1NzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17aWRlbnRpdHk6ZX0sbj10LnZhbHVlT2Y7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2YWx1ZU9mIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnJ9LHdyaXRhYmxlOiEwfSkscn19LHt9XSw1Nzc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2NyZWF0ZS1zdG9yZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW4oKTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUscil7dmFyIG49dChlKTtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKT9uLnZhbHVlOnJ9LHNldDpmdW5jdGlvbihlLHIpe3JldHVybiB0KGUpLnZhbHVlPXIsdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiJ2YWx1ZSJpbiB0KGUpfSxkZWxldGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSB0KGUpLnZhbHVlfX19fSx7Ii4vY3JlYXRlLXN0b3JlLmpzIjo1NzV9XSw1Nzg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnZXQtY2FudmFzLWNvbnRleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIndlYmdsIix0KX19LHsiZ2V0LWNhbnZhcy1jb250ZXh0IjoyNDl9XSw1Nzk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJDaGluZXNlIixqZEVwb2NoOjE3MjE0MjUuNSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJDaGluZXNlIixlcG9jaHM6WyJCRUMiLCJFQyJdLG1vbnRoTnVtYmVyczpmdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dC5tYXRjaChsKTtyZXR1cm4gcj9yWzBdOiIifXZhciBuPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxpPXQubW9udGgoKSxhPSIiK3RoaXMudG9DaGluZXNlTW9udGgobixpKTtyZXR1cm4gZSYmYS5sZW5ndGg8MiYmKGE9IjAiK2EpLHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKG4saSkmJihhKz0iaSIpLGF9LG1vbnRoTmFtZXM6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKGMpO3JldHVybiBlP2VbMF06IiJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLG49dC5tb250aCgpLGk9WyJcdTRlMDBcdTY3MDgiLCJcdTRlOGNcdTY3MDgiLCJcdTRlMDlcdTY3MDgiLCJcdTU2ZGJcdTY3MDgiLCJcdTRlOTRcdTY3MDgiLCJcdTUxNmRcdTY3MDgiLCJcdTRlMDNcdTY3MDgiLCJcdTUxNmJcdTY3MDgiLCJcdTRlNWRcdTY3MDgiLCJcdTUzNDFcdTY3MDgiLCJcdTUzNDFcdTRlMDBcdTY3MDgiLCJcdTUzNDFcdTRlOGNcdTY3MDgiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihpPSJcdTk1ZjAiK2kpLGl9LG1vbnRoTmFtZXNTaG9ydDpmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2godSk7cmV0dXJuIGU/ZVswXToiIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT1bIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdW3RoaXMudG9DaGluZXNlTW9udGgocixuKS0xXTtyZXR1cm4gdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgocixuKSYmKGk9Ilx1OTVmMCIraSksaX0scGFyc2VNb250aDpmdW5jdGlvbih0LGUpe3Q9dGhpcy5fdmFsaWRhdGVZZWFyKHQpO3ZhciByLG49cGFyc2VJbnQoZSk7aWYoaXNOYU4obikpIlx1OTVmMCI9PT1lWzBdJiYocj0hMCxlPWUuc3Vic3RyaW5nKDEpKSwiXHU2NzA4Ij09PWVbZS5sZW5ndGgtMV0mJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMSkpLG49MStbIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdLmluZGV4T2YoZSk7ZWxzZXt2YXIgaT1lW2UubGVuZ3RoLTFdO3I9ImkiPT09aXx8IkkiPT09aX1yZXR1cm4gdGhpcy50b01vbnRoSW5kZXgodCxuLHIpfSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sX3ZhbGlkYXRlWWVhcjpmdW5jdGlvbih0LGUpe2lmKHQueWVhciYmKHQ9dC55ZWFyKCkpLCJudW1iZXIiIT10eXBlb2YgdHx8dDwxODg4fHx0PjIxMTEpdGhyb3cgZS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gdH0sdG9Nb250aEluZGV4OmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmludGVyY2FsYXJ5TW9udGgodCk7aWYociYmZSE9PWl8fGU8MXx8ZT4xMil0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gaT8hciYmZTw9aT9lLTE6ZTplLTF9LHRvQ2hpbmVzZU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKGU8MHx8ZT4ocj8xMjoxMSkpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHI/ZTxyP2UrMTplOmUrMX0saW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZVllYXIodCksaFt0LWhbMF1dPj4xM30saXNJbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO3JldHVybiEhciYmcj09PWV9LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXRoaXMuX3ZhbGlkYXRlWWVhcih0LG4ubG9jYWwuaW52YWxpZHllYXIpLHM9ZltvLWZbMF1dLGw9cz4+OSY0MDk1LGM9cz4+NSYxNSx1PTMxJnM7KGk9YS5uZXdEYXRlKGwsYyx1KSkuYWRkKDQtKGkuZGF5T2ZXZWVrKCl8fDcpLCJkIik7dmFyIGg9dGhpcy50b0pEKHQsZSxyKS1pLnRvSkQoKTtyZXR1cm4gMStNYXRoLmZsb29yKGgvNyl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8xMzoxMn0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcj1oW3QtaFswXV07aWYoZT4ocj4+MTM/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByJjE8PDEyLWU/MzA6Mjl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQscyxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9dGhpcy5fdmFsaWRhdGVZZWFyKGkueWVhcigpKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIG89dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgodCxlKSxzPXRoaXMudG9DaGluZXNlTW9udGgodCxlKSxsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzO2lmKCJvYmplY3QiPT10eXBlb2YgdClvPXQsYT1lfHx7fTtlbHNle3ZhciBsO2lmKCEoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTtpZighKCJudW1iZXIiPT10eXBlb2YgZSYmZT49MSYmZTw9MTIpKXRocm93IG5ldyBFcnJvcigiTHVuYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTtpZighKCJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzApKXRocm93IG5ldyBFcnJvcigiTHVuYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMwIik7Im9iamVjdCI9PXR5cGVvZiBuPyhsPSExLGE9bik6KGw9ISFuLGE9aXx8e30pLG89e3llYXI6dCxtb250aDplLGRheTpyLGlzSW50ZXJjYWxhcnk6bH19cz1vLmRheS0xO3ZhciBjLHU9aFtvLnllYXItaFswXV0scD11Pj4xMztjPXAmJihvLm1vbnRoPnB8fG8uaXNJbnRlcmNhbGFyeSk/by5tb250aDpvLm1vbnRoLTE7Zm9yKHZhciBkPTA7ZDxjO2QrKyl7cys9dSYxPDwxMi1kPzMwOjI5fXZhciBnPWZbby55ZWFyLWZbMF1dLG09bmV3IERhdGUoZz4+OSY0MDk1LChnPj41JjE1KS0xLCgzMSZnKStzKTtyZXR1cm4gYS55ZWFyPW0uZ2V0RnVsbFllYXIoKSxhLm1vbnRoPTErbS5nZXRNb250aCgpLGEuZGF5PW0uZ2V0RGF0ZSgpLGF9KHQscyxyLG8pO3JldHVybiBhLnRvSkQobC55ZWFyLGwubW9udGgsbC5kYXkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhO2lmKCJvYmplY3QiPT10eXBlb2YgdClpPXQsYT1lfHx7fTtlbHNle2lmKCEoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExKSl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTtpZighKCJudW1iZXIiPT10eXBlb2YgZSYmZT49MSYmZTw9MTIpKXRocm93IG5ldyBFcnJvcigiU29sYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTtpZighKCJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzEpKXRocm93IG5ldyBFcnJvcigiU29sYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMxIik7aT17eWVhcjp0LG1vbnRoOmUsZGF5OnJ9LGE9bnx8e319dmFyIG89ZltpLnllYXItZlswXV0scz1pLnllYXI8PDl8aS5tb250aDw8NXxpLmRheTthLnllYXI9cz49bz9pLnllYXI6aS55ZWFyLTEsbz1mW2EueWVhci1mWzBdXTt2YXIgbCxjPW5ldyBEYXRlKG8+PjkmNDA5NSwobz4+NSYxNSktMSwzMSZvKSx1PW5ldyBEYXRlKGkueWVhcixpLm1vbnRoLTEsaS5kYXkpO2w9TWF0aC5yb3VuZCgodS1jKS84NjRlNSk7dmFyIHAsZD1oW2EueWVhci1oWzBdXTtmb3IocD0wO3A8MTM7cCsrKXt2YXIgZz1kJjE8PDEyLXA/MzA6Mjk7aWYobDxnKWJyZWFrO2wtPWd9dmFyIG09ZD4+MTM7IW18fHA8bT8oYS5pc0ludGVyY2FsYXJ5PSExLGEubW9udGg9MStwKTpwPT09bT8oYS5pc0ludGVyY2FsYXJ5PSEwLGEubW9udGg9cCk6KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPXApO3JldHVybiBhLmRheT0xK2wsYX0oZS55ZWFyKCksZS5tb250aCgpLGUuZGF5KCkpLG49dGhpcy50b01vbnRoSW5kZXgoci55ZWFyLHIubW9udGgsci5pc0ludGVyY2FsYXJ5KTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIueWVhcixuLHIuZGF5KX0sZnJvbVN0cmluZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKHMpLHI9dGhpcy5fdmFsaWRhdGVZZWFyKCtlWzFdKSxuPStlWzJdLGk9ISFlWzNdLGE9dGhpcy50b01vbnRoSW5kZXgocixuLGkpLG89K2VbNF07cmV0dXJuIHRoaXMubmV3RGF0ZShyLGEsbyl9LGFkZDpmdW5jdGlvbih0LGUscil7dmFyIG49dC55ZWFyKCksaT10Lm1vbnRoKCksYT10aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGkpLHM9dGhpcy50b0NoaW5lc2VNb250aChuLGkpLGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8ucHJvdG90eXBlKS5hZGQuY2FsbCh0aGlzLHQsZSxyKTtpZigieSI9PT1yKXt2YXIgYz1sLnllYXIoKSx1PWwubW9udGgoKSxoPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKGMscyksZj1hJiZoP3RoaXMudG9Nb250aEluZGV4KGMscywhMCk6dGhpcy50b01vbnRoSW5kZXgoYyxzLCExKTtmIT09dSYmbC5tb250aChmKX1yZXR1cm4gbH19KTt2YXIgcz0vXlxzKigtP1xkXGRcZFxkfFxkXGQpWy0vXShcZD9cZCkoW2lJXT8pWy0vXShcZD9cZCkvbSxsPS9eXGQ/XGRbaUldPy9tLGM9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdP1x1NjcwOC9tLHU9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdPy9tO24uY2FsZW5kYXJzLmNoaW5lc2U9bzt2YXIgaD1bMTg4Nyw1NzgwLDU4MDIsMTkxNTcsMjc0Miw1MDM1OSwxMTk4LDI2NDYsNDYzNzgsNzQ2NiwzNDEyLDMwMTIyLDU0ODIsNjc5NDksMjM5Niw1Mjk0LDQzNTk3LDY3MzIsNjk1NCwzNjE4MSwyNzcyLDQ5NTQsMTg3ODEsMjM5Niw1NDQyNyw1Mjc0LDY3MzAsNDc3ODEsNTgwMCw2ODY4LDIxMjEwLDQ3OTAsNTk3MDMsMjM1MCw1MjcwLDQ2NjY3LDM0MDIsMzQ5NiwzODMyNSwxMzg4LDQ3ODIsMTg3MzUsMjM1MCw1MjM3NCw2ODA0LDc0OTgsNDQ0NTcsMjkwNiwxMzg4LDI5Mjk0LDQ3MDAsNjM3ODksNjQ0Miw2ODA0LDU2MTM4LDU4MDIsMjc3MiwzODIzNSwxMjEwLDQ2OTgsMjI4MjcsNTQxOCw2MzEyNSwzNDc2LDU4MDIsNDM3MDEsMjQ4NCw1MzAyLDI3MjIzLDI2NDYsNzA5NTQsNzQ2NiwzNDEyLDU0Njk4LDU0ODIsMjQxMiwzODA2Miw1Mjk0LDI2MzYsMzIwMzgsNjk1NCw2MDI0NSwyNzcyLDQ4MjYsNDMzNTcsMjM5NCw1Mjc0LDM5NTAxLDY3MzAsNzIzNTcsNTgwMCw1ODQ0LDUzOTc4LDQ3OTAsMjM1OCwzODAzOSw1MjcwLDg3NjI3LDM0MDIsMzQ5Niw1NDcwOCw1NDg0LDQ3ODIsNDMzMTEsMjM1MCwzMjIyLDI3OTc4LDc0OTgsNjg5NjUsMjkwNCw1NDg0LDQ1Njc3LDQ3MDAsNjQ0NCwzOTU3Myw2ODA0LDY5ODYsMTkyODUsMjc3Miw2MjgxMSwxMjEwLDQ2OTgsNDc0MDMsNTQxOCw1NzgwLDM4NTcwLDU1NDYsNzY0NjksMjQyMCw1MzAyLDUxNzk5LDI2NDYsNTQxNCwzNjUwMSwzNDEyLDU1NDYsMTg4NjksMjQxMiw1NDQ0Niw1Mjc2LDY3MzIsNDg0MjIsNjgyMiwyOTAwLDI4MDEwLDQ4MjYsOTI1MDksMjM5NCw1Mjc0LDU1ODgzLDY3MzAsNjgyMCw0Nzk1Niw1ODEyLDI3NzgsMTg3NzksMjM1OCw2MjYxNSw1MjcwLDU0NTAsNDY3NTcsMzQ5Miw1NTU2LDI3MzE4LDQ3MTgsNjc4ODcsMjM1MCwzMjIyLDUyNTU0LDc0OTgsMzQyOCwzODI1Miw1NDY4LDQ3MDAsMzEwMjIsNjQ0NCw2NDE0OSw2ODA0LDY5ODYsNDM4NjEsMjc3Miw1MzM4LDM1NDIxLDI2NTAsNzA5NTUsNTQxOCw1NzgwLDU0OTU0LDU1NDYsMjc0MCwzODA3NCw1MzAyLDI2NDYsMjk5OTEsMzM2Niw2MTAxMSwzNDEyLDU1NDYsNDM0NDUsMjQxMiw1Mjk0LDM1NDA2LDY3MzIsNzI5OTgsNjgyMCw2OTk2LDUyNTg2LDI3NzgsMjM5NiwzODA0NSw1Mjc0LDY2OTgsMjMzMzMsNjgyMCw2NDMzOCw1ODEyLDI3NDYsNDMzNTUsMjM1OCw1MjcwLDM5NDk5LDU0NTAsNzk1MjUsMzQ5Miw1NTQ4XSxmPVsxODg3LDk2NjczMiw5NjcyMzEsOTY3NzMzLDk2ODI2NSw5Njg3NjYsOTY5Mjk3LDk2OTc5OCw5NzAyOTgsOTcwODI5LDk3MTMzMCw5NzE4MzAsOTcyMzYyLDk3Mjg2Myw5NzMzOTUsOTczODk2LDk3NDM5Nyw5NzQ5MjgsOTc1NDI4LDk3NTkyOSw5NzY0NjEsOTc2OTYyLDk3NzQ2Miw5Nzc5OTQsOTc4NDk0LDk3OTAyNiw5Nzk1MjYsOTgwMDI2LDk4MDU1OCw5ODEwNTksOTgxNTU5LDk4MjA5MSw5ODI1OTMsOTgzMTI0LDk4MzYyNCw5ODQxMjQsOTg0NjU2LDk4NTE1Nyw5ODU2NTYsOTg2MTg5LDk4NjY5MCw5ODcxOTEsOTg3NzIyLDk4ODIyMiw5ODg3NTMsOTg5MjU0LDk4OTc1NCw5OTAyODYsOTkwNzg4LDk5MTI4OCw5OTE4MTksOTkyMzE5LDk5Mjg1MSw5OTMzNTIsOTkzODUxLDk5NDM4Myw5OTQ4ODUsOTk1Mzg1LDk5NTkxNyw5OTY0MTgsOTk2OTE4LDk5NzQ1MCw5OTc5NDksOTk4NDgxLDk5ODk4Miw5OTk0ODMsMTAwMDAxNCwxMDAwNTE1LDEwMDEwMTYsMTAwMTU0OCwxMDAyMDQ3LDEwMDI1NzgsMTAwMzA4MCwxMDAzNTgwLDEwMDQxMTEsMTAwNDYxMywxMDA1MTEzLDEwMDU2NDUsMTAwNjE0NiwxMDA2NjQ1LDEwMDcxNzcsMTAwNzY3OCwxMDA4MjA5LDEwMDg3MTAsMTAwOTIxMSwxMDA5NzQzLDEwMTAyNDMsMTAxMDc0MywxMDExMjc1LDEwMTE3NzUsMTAxMjMwNiwxMDEyODA3LDEwMTMzMDgsMTAxMzg0MCwxMDE0MzQxLDEwMTQ4NDEsMTAxNTM3MywxMDE1ODc0LDEwMTY0MDQsMTAxNjkwNSwxMDE3NDA1LDEwMTc5MzcsMTAxODQzOCwxMDE4OTM5LDEwMTk0NzEsMTAxOTk3MiwxMDIwNDcxLDEwMjEwMDIsMTAyMTUwMywxMDIyMDM1LDEwMjI1MzUsMTAyMzAzNiwxMDIzNTY4LDEwMjQwNjksMTAyNDU2OCwxMDI1MTAwLDEwMjU2MDEsMTAyNjEwMiwxMDI2NjMzLDEwMjcxMzMsMTAyNzY2NiwxMDI4MTY3LDEwMjg2NjYsMTAyOTE5OCwxMDI5Njk5LDEwMzAxOTksMTAzMDczMCwxMDMxMjMxLDEwMzE3NjMsMTAzMjI2NCwxMDMyNzY0LDEwMzMyOTYsMTAzMzc5NywxMDM0Mjk3LDEwMzQ4MjgsMTAzNTMyOSwxMDM1ODMwLDEwMzYzNjIsMTAzNjg2MSwxMDM3MzkzLDEwMzc4OTQsMTAzODM5NCwxMDM4OTI1LDEwMzk0MjcsMTAzOTkyNywxMDQwNDU5LDEwNDA5NTksMTA0MTQ5MSwxMDQxOTkyLDEwNDI0OTIsMTA0MzAyMywxMDQzNTI0LDEwNDQwMjQsMTA0NDU1NiwxMDQ1MDU3LDEwNDU1NTgsMTA0NjA5MCwxMDQ2NTkwLDEwNDcxMjEsMTA0NzYyMiwxMDQ4MTIyLDEwNDg2NTQsMTA0OTE1NCwxMDQ5NjU1LDEwNTAxODcsMTA1MDY4OSwxMDUxMjE5LDEwNTE3MjAsMTA1MjIyMCwxMDUyNzUxLDEwNTMyNTIsMTA1Mzc1MiwxMDU0Mjg0LDEwNTQ3ODYsMTA1NTI4NSwxMDU1ODE3LDEwNTYzMTcsMTA1Njg0OSwxMDU3MzQ5LDEwNTc4NTAsMTA1ODM4MiwxMDU4ODgzLDEwNTkzODMsMTA1OTkxNSwxMDYwNDE1LDEwNjA5NDcsMTA2MTQ0NywxMDYxOTQ3LDEwNjI0NzksMTA2Mjk4MSwxMDYzNDgwLDEwNjQwMTIsMTA2NDUxNCwxMDY1MDE0LDEwNjU1NDUsMTA2NjA0NSwxMDY2NTc3LDEwNjcwNzgsMTA2NzU3OCwxMDY4MTEwLDEwNjg2MTEsMTA2OTExMiwxMDY5NjQyLDEwNzAxNDIsMTA3MDY3NCwxMDcxMTc1LDEwNzE2NzUsMTA3MjIwNywxMDcyNzA5LDEwNzMyMDksMTA3Mzc0MCwxMDc0MjQxLDEwNzQ3NDEsMTA3NTI3MywxMDc1NzczLDEwNzYzMDUsMTA3NjgwNywxMDc3MzA4LDEwNzc4MzksMTA3ODM0MCwxMDc4ODQwLDEwNzkzNzIsMTA3OTg3MSwxMDgwNDAzLDEwODA5MDRdfSx7Ii4uL21haW4iOjU5Mywib2JqZWN0LWFzc2lnbiI6NDczfV0sNTgwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiQ29wdGljIixqZEVwb2NoOjE4MjUwMjkuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkNvcHRpYyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiVGhvdXQiLCJQYW9waSIsIkhhdGhvciIsIktvaWFrIiwiVG9iaSIsIk1lc2hpciIsIlBhcmVtaGF0IiwiUGFyZW1vdWRlIiwiUGFzaG9ucyIsIlBhb25pIiwiRXBpcCIsIk1lc29yaSIsIlBpIEtvZ2kgRW5hdm90Il0sbW9udGhOYW1lc1Nob3J0OlsiVGhvIiwiUGFvIiwiSGF0aCIsIktvaSIsIlRvYiIsIk1lc2giLCJQYXQiLCJQYWQiLCJQYXNoIiwiUGFvIiwiRXBpIiwiTWVzbyIsIlBpSyJdLGRheU5hbWVzOlsiVGt5cmlha2EiLCJQZXNuYXUiLCJQc2hvbWVudCIsIlBlZnRvb3UiLCJQdGlvdSIsIlBzb291IiwiUHNhYmJhdG9uIl0sZGF5TmFtZXNTaG9ydDpbIlRreSIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0aSIsIlBzbyIsIlBzYSJdLGRheU5hbWVzTWluOlsiVGsiLCJQZXMiLCJQc2giLCJQZWYiLCJQdCIsIlBzbyIsIlBzYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKSklND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcnx8bi5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9aS55ZWFyKCkpPDAmJnQrKyxpLmRheSgpKzMwKihpLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxpPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixpKX19KSxuLmNhbGVuZGFycy5jb3B0aWM9YX0seyIuLi9tYWluIjo1OTMsIm9iamVjdC1hc3NpZ24iOjQ3M31dLDU4MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkRpc2N3b3JsZCIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlsxNiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiRGlzY3dvcmxkIixlcG9jaHM6WyJCVUMiLCJVQyJdLG1vbnRoTmFtZXM6WyJJY2siLCJPZmZsZSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJHcnVuZSIsIkF1Z3VzdCIsIlNwdW5lIiwiU2VrdG9iZXIiLCJFbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSWNrIiwiT2ZmIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiR3J1IiwiQXVnIiwiU3B1IiwiU2VrIiwiRW1iIiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJPY3RlZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiT2N0IiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk9jIiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Mixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDEzfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksNDAwfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvOCkrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV19LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gOH0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCkrMSklOH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5kYXlPZldlZWsodCxlLHIpO3JldHVybiBuPj0yJiZuPD02fSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybntjZW50dXJ5Om9bTWF0aC5mbG9vcigoaS55ZWFyKCktMSkvMTAwKSsxXXx8IiJ9fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSsoaS55ZWFyKCk8MD8xOjApLGU9aS5tb250aCgpLChyPWkuZGF5KCkpKyhlPjE/MTY6MCkrKGU+Mj8zMiooZS0yKTowKSs0MDAqKHQtMSkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSktTWF0aC5mbG9vcih0aGlzLmpkRXBvY2gpLTE7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCkrMTt0LT00MDAqKGUtMSksdCs9dD4xNT8xNjowO3ZhciByPU1hdGguZmxvb3IodC8zMikrMSxuPXQtMzIqKHItMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGU8PTA/ZS0xOmUscixuKX19KTt2YXIgbz17MjA6IkZydWl0YmF0IiwyMToiQW5jaG92eSJ9O24uY2FsZW5kYXJzLmRpc2N3b3JsZD1hfSx7Ii4uL21haW4iOjU5Mywib2JqZWN0LWFzc2lnbiI6NDczfV0sNTgyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiRXRoaW9waWFuIixqZEVwb2NoOjE3MjQyMjAuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkV0aGlvcGlhbiIsZXBvY2hzOlsiQkVFIiwiRUUiXSxtb250aE5hbWVzOlsiTWVza2VyZW0iLCJUaWtlbWV0IiwiSGlkYXIiLCJUYWhlc2FzIiwiVGlyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc2UiLCJQYWd1bWUiXSxtb250aE5hbWVzU2hvcnQ6WyJNZXMiLCJUaWsiLCJIaWQiLCJUYWgiLCJUaXIiLCJZZWsiLCJNZWciLCJNaWEiLCJHZW4iLCJTZW4iLCJIYW0iLCJOZWgiLCJQYWciXSxkYXlOYW1lczpbIkVodWQiLCJTZWdubyIsIk1ha3NlZ25vIiwiSXJvYiIsIkhhbXVzIiwiQXJiIiwiS2lkYW1lIl0sZGF5TmFtZXNTaG9ydDpbIkVodSIsIlNlZyIsIk1hayIsIklybyIsIkhhbSIsIkFyYiIsIktpZCJdLGRheU5hbWVzTWluOlsiRWgiLCJTZSIsIk1hIiwiSXIiLCJIYSIsIkFyIiwiS2kiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTM9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybih0PWkueWVhcigpKTwwJiZ0KyssaS5kYXkoKSszMCooaS5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksbi5jYWxlbmRhcnMuZXRoaW9waWFuPWF9LHsiLi4vbWFpbiI6NTkzLCJvYmplY3QtYXNzaWduIjo0NzN9XSw1ODM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiSGVicmV3IixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkhlYnJldyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW1tdXoiLCJBdiIsIkVsdWwiLCJUaXNocmVpIiwiQ2hlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIiLCJBZGFyIElJIl0sbW9udGhOYW1lc1Nob3J0OlsiTmlzIiwiSXlhIiwiU2l2IiwiVGFtIiwiQXYiLCJFbHUiLCJUaXMiLCJDaGUiLCJLaXMiLCJUZXYiLCJTaGUiLCJBZGEiLCJBZDIiXSxkYXlOYW1lczpbIllvbSBSaXNob24iLCJZb20gU2hlbmkiLCJZb20gU2hsaXNoaSIsIllvbSBSZXZpJ2kiLCJZb20gQ2hhbWlzaGkiLCJZb20gU2hpc2hpIiwiWW9tIFNoYWJiYXQiXSxkYXlOYW1lc1Nob3J0OlsiUmlzIiwiU2hlIiwiU2hsIiwiUmV2IiwiQ2hhIiwiU2hpIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJSaSIsIlNoZSIsIlNobCIsIlJlIiwiQ2giLCJTaGkiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbyg3Kih0PXQ8MD90KzE6dCkrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHRoaXMudG9KRCgtMT09PXQ/MTp0KzEsNywxKS10aGlzLnRvSkQodCw3LDEpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDEyPT09ZSYmdGhpcy5sZWFwWWVhcih0KXx8OD09PWUmJjU9PT1vKHRoaXMuZGF5c0luWWVhcih0KSwxMCk/MzA6OT09PWUmJjM9PT1vKHRoaXMuZGF5c0luWWVhcih0KSwxMCk/Mjk6dGhpcy5kYXlzUGVyTW9udGhbZS0xXX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJue3llYXJUeXBlOih0aGlzLmxlYXBZZWFyKGkpPyJlbWJvbGlzbWljIjoiY29tbW9uIikrIiAiK1siZGVmaWNpZW50IiwicmVndWxhciIsImNvbXBsZXRlIl1bdGhpcy5kYXlzSW5ZZWFyKGkpJTEwLTNdfX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dDw9MD90KzE6dCxvPXRoaXMuamRFcG9jaCt0aGlzLl9kZWxheTEoYSkrdGhpcy5fZGVsYXkyKGEpK3IrMTtpZihlPDcpe2Zvcih2YXIgcz03O3M8PXRoaXMubW9udGhzSW5ZZWFyKHQpO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyk7Zm9yKHM9MTtzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKX1lbHNlIGZvcihzPTc7czxlO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyk7cmV0dXJuIG99LF9kZWxheTE6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcigoMjM1KnQtMjM0KS8xOSkscj0xMjA4NCsxMzc1MyplLG49MjkqZStNYXRoLmZsb29yKHIvMjU5MjApO3JldHVybiBvKDMqKG4rMSksNyk8MyYmbisrLG59LF9kZWxheTI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZGVsYXkxKHQtMSkscj10aGlzLl9kZWxheTEodCk7cmV0dXJuIHRoaXMuX2RlbGF5MSh0KzEpLXI9PTM1Nj8yOnItZT09MzgyPzE6MH0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTtmb3IodmFyIGU9TWF0aC5mbG9vcig5ODQ5NioodC10aGlzLmpkRXBvY2gpLzM1OTc1MzUxKS0xO3Q+PXRoaXMudG9KRCgtMT09PWU/MTplKzEsNywxKTspZSsrO2Zvcih2YXIgcj10PHRoaXMudG9KRChlLDEsMSk/NzoxO3Q+dGhpcy50b0pEKGUscix0aGlzLmRheXNJbk1vbnRoKGUscikpOylyKys7dmFyIG49dC10aGlzLnRvSkQoZSxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMuaGVicmV3PWF9LHsiLi4vbWFpbiI6NTkzLCJvYmplY3QtYXNzaWduIjo0NzN9XSw1ODQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJJc2xhbWljIixqZEVwb2NoOjE5NDg0MzkuNSxkYXlzUGVyTW9udGg6WzMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJJc2xhbWljIixlcG9jaHM6WyJCSCIsIkFIIl0sbW9udGhOYW1lczpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpJyBhbC1hd3dhbCIsIlJhYmknIGFsLXRoYW5pIiwiSnVtYWRhIGFsLWF3d2FsIiwiSnVtYWRhIGFsLXRoYW5pIiwiUmFqYWIiLCJTaGEnYWJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1IGFsLVFpJ2RhaCIsIkRodSBhbC1IaWpqYWgiXSxtb250aE5hbWVzU2hvcnQ6WyJNdWgiLCJTYWYiLCJSYWIxIiwiUmFiMiIsIkp1bTEiLCJKdW0yIiwiUmFqIiwiU2hhJyIsIlJhbSIsIlNoYXciLCJEaHVRIiwiRGh1SCJdLGRheU5hbWVzOlsiWWF3bSBhbC1haGFkIiwiWWF3bSBhbC1pdGhuYXluIiwiWWF3bSBhdGgtdGh1bGFhdGhhYSciLCJZYXdtIGFsLWFyYmknYWEnIiwiWWF3bSBhbC1raGFtXHUwMTJicyIsIllhd20gYWwtanVtJ2EiLCJZYXdtIGFzLXNhYnQiXSxkYXlOYW1lc1Nob3J0OlsiQWhhIiwiSXRoIiwiVGh1IiwiQXJiIiwiS2hhIiwiSnVtIiwiU2FiIl0sZGF5TmFtZXNNaW46WyJBaCIsIkl0IiwiVGgiLCJBciIsIktoIiwiSnUiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjYsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4oMTEqdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKSsxNCklMzA8MTF9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlYXBZZWFyKHQpPzM1NTozNTR9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpLGU9aS5tb250aCgpLHQ9dDw9MD90KzE6dCwocj1pLmRheSgpKStNYXRoLmNlaWwoMjkuNSooZS0xKSkrMzU0Kih0LTEpK01hdGguZmxvb3IoKDMrMTEqdCkvMzApK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41O3ZhciBlPU1hdGguZmxvb3IoKDMwKih0LXRoaXMuamRFcG9jaCkrMTA2NDYpLzEwNjMxKTtlPWU8PTA/ZS0xOmU7dmFyIHI9TWF0aC5taW4oMTIsTWF0aC5jZWlsKCh0LTI5LXRoaXMudG9KRChlLDEsMSkpLzI5LjUpKzEpLG49dC10aGlzLnRvSkQoZSxyLDEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMuaXNsYW1pYz1hfSx7Ii4uL21haW4iOjU5Mywib2JqZWN0LWFzc2lnbiI6NDczfV0sNTg1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiSnVsaWFuIixqZEVwb2NoOjE3MjE0MjMuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJKdWxpYW4iLGVwb2NoczpbIkJDIiwiQUQiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJtbS9kZC95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpPDA/ZS55ZWFyKCkrMTplLnllYXIoKSklND09MH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCksdDwwJiZ0KyssZTw9MiYmKHQtLSxlKz0xMiksTWF0aC5mbG9vcigzNjUuMjUqKHQrNDcxNikpK01hdGguZmxvb3IoMzAuNjAwMSooZSsxKSkrci0xNTI0LjV9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQrLjUpKzE1MjQscj1NYXRoLmZsb29yKChlLTEyMi4xKS8zNjUuMjUpLG49TWF0aC5mbG9vcigzNjUuMjUqciksaT1NYXRoLmZsb29yKChlLW4pLzMwLjYwMDEpLGE9aS1NYXRoLmZsb29yKGk8MTQ/MToxMyksbz1yLU1hdGguZmxvb3IoYT4yPzQ3MTY6NDcxNSkscz1lLW4tTWF0aC5mbG9vcigzMC42MDAxKmkpO3JldHVybiBvPD0wJiZvLS0sdGhpcy5uZXdEYXRlKG8sYSxzKX19KSxuLmNhbGVuZGFycy5qdWxpYW49YX0seyIuLi9tYWluIjo1OTMsIm9iamVjdC1hc3NpZ24iOjQ3M31dLDU4NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbyh0LTEsZSkrMX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiTWF5YW4iLGpkRXBvY2g6NTg0MjgyLjUsaGFzWWVhclplcm86ITAsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjAscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiTWF5YW4iLGVwb2NoczpbIiIsIiJdLG1vbnRoTmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyJdLG1vbnRoTmFtZXNTaG9ydDpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sZGF5TmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5Il0sZGF5TmFtZXNNaW46WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJZWVlZLm0uZCIsZmlyc3REYXk6MCxpc1JUTDohMSxoYWFiTW9udGhzOlsiUG9wIiwiVW8iLCJaaXAiLCJab3R6IiwiVHplYyIsIlh1bCIsIllheGtpbiIsIk1vbCIsIkNoZW4iLCJZYXgiLCJaYWMiLCJDZWgiLCJNYWMiLCJLYW5raW4iLCJNdWFuIiwiUGF4IiwiS2F5YWIiLCJDdW1rdSIsIlVheWViIl0sdHpvbGtpbk1vbnRoczpbIkltaXgiLCJJayIsIkFrYmFsIiwiS2FuIiwiQ2hpY2NoYW4iLCJDaW1pIiwiTWFuaWsiLCJMYW1hdCIsIk11bHVjIiwiT2MiLCJDaHVlbiIsIkViIiwiQmVuIiwiSXgiLCJNZW4iLCJDaWIiLCJDYWJhbiIsIkV0em5hYiIsIkNhdWFjIiwiQWhhdSJdfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwhMX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCk7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCk7cmV0dXJuIHQlPTQwMCx0Kz10PDA/NDAwOjAsZSsiLiIrTWF0aC5mbG9vcih0LzIwKSsiLiIrdCUyMH0sZm9yWWVhcjpmdW5jdGlvbih0KXtpZigodD10LnNwbGl0KCIuIikpLmxlbmd0aDwzKXRocm93IkludmFsaWQgTWF5YW4geWVhciI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1wYXJzZUludCh0W3JdLDEwKTtpZihNYXRoLmFicyhuKT4xOXx8cj4wJiZuPDApdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjtlPTIwKmUrbn1yZXR1cm4gZX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMTh9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSwwfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksMzYwfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDIwfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDV9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLmRheSgpfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksITB9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkudG9KRCgpLGE9dGhpcy5fdG9IYWFiKGkpLG89dGhpcy5fdG9Uem9sa2luKGkpO3JldHVybntoYWFiTW9udGhOYW1lOnRoaXMubG9jYWwuaGFhYk1vbnRoc1thWzBdLTFdLGhhYWJNb250aDphWzBdLGhhYWJEYXk6YVsxXSx0em9sa2luRGF5TmFtZTp0aGlzLmxvY2FsLnR6b2xraW5Nb250aHNbb1swXS0xXSx0em9sa2luRGF5Om9bMF0sdHpvbGtpblRyZWNlbmE6b1sxXX19LF90b0hhYWI6ZnVuY3Rpb24odCl7dmFyIGU9bygodC09dGhpcy5qZEVwb2NoKSs4KzM0MCwzNjUpO3JldHVybltNYXRoLmZsb29yKGUvMjApKzEsbyhlLDIwKV19LF90b1R6b2xraW46ZnVuY3Rpb24odCl7cmV0dXJuW3MoKHQtPXRoaXMuamRFcG9jaCkrMjAsMjApLHModCs0LDEzKV19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiBpLmRheSgpKzIwKmkubW9udGgoKSszNjAqaS55ZWFyKCkrdGhpcy5qZEVwb2NofSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaDt2YXIgZT1NYXRoLmZsb29yKHQvMzYwKTt0JT0zNjAsdCs9dDwwPzM2MDowO3ZhciByPU1hdGguZmxvb3IodC8yMCksbj10JTIwO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLm1heWFuPWF9LHsiLi4vbWFpbiI6NTkzLCJvYmplY3QtYXNzaWduIjo0NzN9XSw1ODc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcjt2YXIgbz1uLmluc3RhbmNlKCJncmVnb3JpYW4iKTtpKGEucHJvdG90eXBlLHtuYW1lOiJOYW5ha3NoYWhpIixqZEVwb2NoOjIyNTc2NzMuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDMwLDMwXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJOYW5ha3NoYWhpIixlcG9jaHM6WyJCTiIsIkFOIl0sbW9udGhOYW1lczpbIkNoZXQiLCJWYWlzYWtoIiwiSmV0aCIsIkhhcmgiLCJTYXdhbiIsIkJoYWRvbiIsIkFzc3UiLCJLYXRhayIsIk1hZ2hhciIsIlBvaCIsIk1hZ2giLCJQaGFndW4iXSxtb250aE5hbWVzU2hvcnQ6WyJDaGUiLCJWYWkiLCJKZXQiLCJIYXIiLCJTYXciLCJCaGEiLCJBc3MiLCJLYXQiLCJNZ3IiLCJQb2giLCJNZ2giLCJQaGEiXSxkYXlOYW1lczpbIlNvbXZhYXIiLCJNYW5nYWx2YXIiLCJCdWRodmFhciIsIlZlZXJ2YWFyIiwiU2h1a2FydmFhciIsIlNhbmljaGFydmFhciIsIkV0dmFhciJdLGRheU5hbWVzU2hvcnQ6WyJTb20iLCJNYW5nYWwiLCJCdWRoIiwiVmVlciIsIlNodWthciIsIlNhbmljaGFyIiwiRXQiXSxkYXlOYW1lc01pbjpbIlNvIiwiTWEiLCJCdSIsIlZlIiwiU2giLCJTYSIsIkV0Il0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQtbW0teXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybiBvLmxlYXBZZWFyKGUueWVhcigpKyhlLnllYXIoKTwxPzE6MCkrMTQ2OSl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKDEtKG4uZGF5T2ZXZWVrKCl8fDcpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZE1vbnRoKTsodD1pLnllYXIoKSk8MCYmdCsrO2Zvcih2YXIgYT1pLmRheSgpLHM9MTtzPGkubW9udGgoKTtzKyspYSs9dGhpcy5kYXlzUGVyTW9udGhbcy0xXTtyZXR1cm4gYStvLnRvSkQodCsxNDY4LDMsMTMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpO2Zvcih2YXIgZT1NYXRoLmZsb29yKCh0LSh0aGlzLmpkRXBvY2gtMSkpLzM2Nik7dD49dGhpcy50b0pEKGUrMSwxLDEpOyllKys7Zm9yKHZhciByPXQtTWF0aC5mbG9vcih0aGlzLnRvSkQoZSwxLDEpKy41KSsxLG49MTtyPnRoaXMuZGF5c0luTW9udGgoZSxuKTspci09dGhpcy5kYXlzSW5Nb250aChlLG4pLG4rKztyZXR1cm4gdGhpcy5uZXdEYXRlKGUsbixyKX19KSxuLmNhbGVuZGFycy5uYW5ha3NoYWhpPWF9LHsiLi4vbWFpbiI6NTkzLCJvYmplY3QtYXNzaWduIjo0NzN9XSw1ODg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJOZXBhbGkiLGpkRXBvY2g6MTcwMDcwOS41LGRheXNQZXJNb250aDpbMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLGRheXNQZXJZZWFyOjM2NSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJOZXBhbGkiLGVwb2NoczpbIkJCUyIsIkFCUyJdLG1vbnRoTmFtZXM6WyJCYWlzYWtoIiwiSmVzdGhhIiwiQXNoYWRoIiwiU2hyYXdhbiIsIkJoYWRyYSIsIkFzaHdpbiIsIkthcnRpayIsIk1hbmdzaXIiLCJQYXVzaCIsIk1hbmdoIiwiRmFsZ3VuIiwiQ2hhaXRyYSJdLG1vbnRoTmFtZXNTaG9ydDpbIkJhaSIsIkplIiwiQXMiLCJTaHJhIiwiQmhhIiwiQXNoIiwiS2FyIiwiTWFuZyIsIlBhdSIsIk1hIiwiRmFsIiwiQ2hhaSJdLGRheU5hbWVzOlsiQWFpdGFiYWFyIiwiU29tYmFhciIsIk1hbmdsYmFhciIsIkJ1ZGhhYmFhciIsIkJpaGliYWFyIiwiU2h1a3JhYmFhciIsIlNoYW5pYmFhciJdLGRheU5hbWVzU2hvcnQ6WyJBYWl0YSIsIlNvbSIsIk1hbmdsIiwiQnVkaGEiLCJCaWhpIiwiU2h1a3JhIiwiU2hhbmkiXSxkYXlOYW1lc01pbjpbIkFhaSIsIlNvIiwiTWFuIiwiQnUiLCJCaSIsIlNodSIsIlNoYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjEsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXlzSW5ZZWFyKHQpIT09dGhpcy5kYXlzUGVyWWVhcn0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7aWYodD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLCJ1bmRlZmluZWQiPT10eXBlb2YgdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XSlyZXR1cm4gdGhpcy5kYXlzUGVyWWVhcjtmb3IodmFyIGU9MCxyPXRoaXMubWluTW9udGg7cjw9MTI7cisrKWUrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bcl07cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCksInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdP3RoaXMuZGF5c1Blck1vbnRoW2UtMV06dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtlXX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPW4uaW5zdGFuY2UoKSxvPTAscz1lLGw9dDt0aGlzLl9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhKHQpO3ZhciBjPXQtKHM+OXx8OT09PXMmJnI+PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0/NTY6NTcpO2Zvcig5IT09ZSYmKG89cixzLS0pOzkhPT1zOylzPD0wJiYocz0xMixsLS0pLG8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bc10scy0tO3JldHVybiA5PT09ZT8obys9ci10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdKTwwJiYobys9YS5kYXlzSW5ZZWFyKGMpKTpvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzldLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0sYS5uZXdEYXRlKGMsMSwxKS5hZGQobywiZCIpLnRvSkQoKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPW4uaW5zdGFuY2UoKS5mcm9tSkQodCkscj1lLnllYXIoKSxpPWUuZGF5T2ZZZWFyKCksYT1yKzU2O3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEoYSk7Zm9yKHZhciBvPTkscz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdWzBdLGw9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS1zKzE7aT5sOykrK28+MTImJihvPTEsYSsrKSxsKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dO3ZhciBjPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb10tKGwtaSk7cmV0dXJuIHRoaXMubmV3RGF0ZShhLG8sYyl9LF9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF5c1Blck1vbnRoLnNsaWNlKDApO2UudW5zaGlmdCgxNyk7Zm9yKHZhciByPXQtMTtyPHQrMjtyKyspInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdJiYodGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtyXT1lKX0sTkVQQUxJX0NBTEVOREFSX0RBVEE6ezE5NzA6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcxOlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDE5NzM6WzE5LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTc0OlsxOSwzMSwzMSwzMiwzMCwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NTpbMTgsMzEsMzEsMzIsMzIsMzAsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTc3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMTk3ODpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5Nzk6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTgwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4MTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODI6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTgzOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODU6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwxOTg2OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4NzpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODg6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTg5OlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTE6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5MzpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTQ6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk5NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5OTc6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDJlMzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxuLmNhbGVuZGFycy5uZXBhbGk9YX0seyIuLi9tYWluIjo1OTMsIm9iamVjdC1hc3NpZ24iOjQ3M31dLDU4OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJQZXJzaWFuIixqZEVwb2NoOjE5NDgzMjAuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJQZXJzaWFuIixlcG9jaHM6WyJCUCIsIkFQIl0sbW9udGhOYW1lczpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRheSIsIkJhaG1hbiIsIkVzZmFuZCJdLG1vbnRoTmFtZXNTaG9ydDpbIkZhciIsIk9yZCIsIktobyIsIlRpciIsIk1vciIsIlNoYSIsIk1laCIsIkFiYSIsIkF6YSIsIkRheSIsIkJhaCIsIkVzZiJdLGRheU5hbWVzOlsiWWVrc2hhbWJlIiwiRG9zaGFtYmUiLCJTZXNoYW1iZSIsIkNoXHhlNmhhcnNoYW1iZSIsIlBhbmpzaGFtYmUiLCJKb20nZSIsIlNoYW1iZSJdLGRheU5hbWVzU2hvcnQ6WyJZZWsiLCJEbyIsIlNlIiwiQ2hceGU2IiwiUGFuaiIsIkpvbSIsIlNoYSJdLGRheU5hbWVzTWluOlsiWWUiLCJEbyIsIlNlIiwiQ2giLCJQYSIsIkpvIiwiU2giXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiA2ODIqKChlLnllYXIoKS0oZS55ZWFyKCk+MD80NzQ6NDczKSklMjgyMCs0NzQrMzgpJTI4MTY8NjgyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtKG4uZGF5T2ZXZWVrKCkrMSklNywiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dC0odD49MD80NzQ6NDczKSxzPTQ3NCtvKGEsMjgyMCk7cmV0dXJuIHIrKGU8PTc/MzEqKGUtMSk6MzAqKGUtMSkrNikrTWF0aC5mbG9vcigoNjgyKnMtMTEwKS8yODE2KSszNjUqKHMtMSkrMTAyOTk4MypNYXRoLmZsb29yKGEvMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT0odD1NYXRoLmZsb29yKHQpKy41KS10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKGUvMTAyOTk4Myksbj1vKGUsMTAyOTk4MyksaT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgYT1NYXRoLmZsb29yKG4vMzY2KSxzPW8obiwzNjYpO2k9TWF0aC5mbG9vcigoMjEzNCphKzI4MTYqcysyODE1KS8xMDI4NTIyKSthKzF9dmFyIGw9aSsyODIwKnIrNDc0O2w9bDw9MD9sLTE6bDt2YXIgYz10LXRoaXMudG9KRChsLDEsMSkrMSx1PWM8PTE4Nj9NYXRoLmNlaWwoYy8zMSk6TWF0aC5jZWlsKChjLTYpLzMwKSxoPXQtdGhpcy50b0pEKGwsdSwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUobCx1LGgpfX0pLG4uY2FsZW5kYXJzLnBlcnNpYW49YSxuLmNhbGVuZGFycy5qYWxhbGk9YX0seyIuLi9tYWluIjo1OTMsIm9iamVjdC1hc3NpZ24iOjQ3M31dLDU5MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6IlRhaXdhbiIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUYWl3YW4iLGVwb2NoczpbIkJST0MiLCJST0MiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksbi5jYWxlbmRhcnMudGFpd2FuPW99LHsiLi4vbWFpbiI6NTkzLCJvYmplY3QtYXNzaWduIjo0NzN9XSw1OTE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJUaGFpIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGhhaSIsZXBvY2hzOlsiQkJFIiwiQkUiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9fSksbi5jYWxlbmRhcnMudGhhaT1vfSx7Ii4uL21haW4iOjU5Mywib2JqZWN0LWFzc2lnbiI6NDczfV0sNTkyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiVW1tQWxRdXJhIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJVbW0gYWwtUXVyYSIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJBbC1NdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBBbC1UaGFuaSIsIkp1bWFkYSBBbC1Bd3dhbCIsIkp1bWFkYSBBbC1UaGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtQWhhZCIsIllhd20gYWwtSXRobmFpbiIsIllhd20gYWwtVGhhbFx1MDEwMXRoXHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1BcmJhXHUyMDE4XHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1LaGFtXHUwMTJicyIsIllhd20gYWwtSnVtXHUyMDE4YSIsIllhd20gYWwtU2FidCJdLGRheU5hbWVzTWluOlsiQWgiLCJJdGgiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKGUueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0xO3I8PTEyO3IrKyllKz10aGlzLmRheXNJbk1vbnRoKHQscik7cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCkudG9KRCgpLTI0ZTUrLjUsaT0wLGE9MDthPG8ubGVuZ3RoO2ErKyl7aWYob1thXT5yKXJldHVybiBvW2ldLW9baS0xXTtpKyt9cmV0dXJuIDMwfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksYT0xMiooaS55ZWFyKCktMSkraS5tb250aCgpLTE1MjkyO3JldHVybiBpLmRheSgpK29bYS0xXS0xKzI0ZTUtLjV9LGZyb21KRDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0yNGU1Ky41LHI9MCxuPTA7bjxvLmxlbmd0aCYmIShvW25dPmUpO24rKylyKys7dmFyIGk9cisxNTI5MixhPU1hdGguZmxvb3IoKGktMSkvMTIpLHM9YSsxLGw9aS0xMiphLGM9ZS1vW3ItMV0rMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHMsbCxjKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpJiYoaT0odD1udWxsIT10LnllYXI/dC55ZWFyOnQpPj0xMjc2JiZ0PD0xNTAwKSxpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoYS55ZWFyPDEyNzZ8fGEueWVhcj4xNTAwKXRocm93IGkucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGF9fSksbi5jYWxlbmRhcnMudW1tYWxxdXJhPWE7dmFyIG89WzIwLDUwLDc5LDEwOSwxMzgsMTY4LDE5NywyMjcsMjU2LDI4NiwzMTUsMzQ1LDM3NCw0MDQsNDMzLDQ2Myw0OTIsNTIyLDU1MSw1ODEsNjExLDY0MSw2NzAsNzAwLDcyOSw3NTksNzg4LDgxOCw4NDcsODc3LDkwNiw5MzYsOTY1LDk5NSwxMDI0LDEwNTQsMTA4MywxMTEzLDExNDIsMTE3MiwxMjAxLDEyMzEsMTI2MCwxMjkwLDEzMjAsMTM1MCwxMzc5LDE0MDksMTQzOCwxNDY4LDE0OTcsMTUyNywxNTU2LDE1ODYsMTYxNSwxNjQ1LDE2NzQsMTcwNCwxNzMzLDE3NjMsMTc5MiwxODIyLDE4NTEsMTg4MSwxOTEwLDE5NDAsMTk2OSwxOTk5LDIwMjgsMjA1OCwyMDg3LDIxMTcsMjE0NiwyMTc2LDIyMDUsMjIzNSwyMjY0LDIyOTQsMjMyMywyMzUzLDIzODMsMjQxMywyNDQyLDI0NzIsMjUwMSwyNTMxLDI1NjAsMjU5MCwyNjE5LDI2NDksMjY3OCwyNzA4LDI3MzcsMjc2NywyNzk2LDI4MjYsMjg1NSwyODg1LDI5MTQsMjk0NCwyOTczLDMwMDMsMzAzMiwzMDYyLDMwOTEsMzEyMSwzMTUwLDMxODAsMzIwOSwzMjM5LDMyNjgsMzI5OCwzMzI3LDMzNTcsMzM4NiwzNDE2LDM0NDYsMzQ3NiwzNTA1LDM1MzUsMzU2NCwzNTk0LDM2MjMsMzY1MywzNjgyLDM3MTIsMzc0MSwzNzcxLDM4MDAsMzgzMCwzODU5LDM4ODksMzkxOCwzOTQ4LDM5NzcsNDAwNyw0MDM2LDQwNjYsNDA5NSw0MTI1LDQxNTUsNDE4NSw0MjE0LDQyNDQsNDI3Myw0MzAzLDQzMzIsNDM2Miw0MzkxLDQ0MjEsNDQ1MCw0NDgwLDQ1MDksNDUzOSw0NTY4LDQ1OTgsNDYyNyw0NjU3LDQ2ODYsNDcxNiw0NzQ1LDQ3NzUsNDgwNCw0ODM0LDQ4NjMsNDg5Myw0OTIyLDQ5NTIsNDk4MSw1MDExLDUwNDAsNTA3MCw1MDk5LDUxMjksNTE1OCw1MTg4LDUyMTgsNTI0OCw1Mjc3LDUzMDcsNTMzNiw1MzY2LDUzOTUsNTQyNSw1NDU0LDU0ODQsNTUxMyw1NTQzLDU1NzIsNTYwMiw1NjMxLDU2NjEsNTY5MCw1NzIwLDU3NDksNTc3OSw1ODA4LDU4MzgsNTg2Nyw1ODk3LDU5MjYsNTk1Niw1OTg1LDYwMTUsNjA0NCw2MDc0LDYxMDMsNjEzMyw2MTYyLDYxOTIsNjIyMSw2MjUxLDYyODEsNjMxMSw2MzQwLDYzNzAsNjM5OSw2NDI5LDY0NTgsNjQ4OCw2NTE3LDY1NDcsNjU3Niw2NjA2LDY2MzUsNjY2NSw2Njk0LDY3MjQsNjc1Myw2NzgzLDY4MTIsNjg0Miw2ODcxLDY5MDEsNjkzMCw2OTYwLDY5ODksNzAxOSw3MDQ4LDcwNzgsNzEwNyw3MTM3LDcxNjYsNzE5Niw3MjI1LDcyNTUsNzI4NCw3MzE0LDczNDQsNzM3NCw3NDAzLDc0MzMsNzQ2Miw3NDkyLDc1MjEsNzU1MSw3NTgwLDc2MTAsNzYzOSw3NjY5LDc2OTgsNzcyOCw3NzU3LDc3ODcsNzgxNiw3ODQ2LDc4NzUsNzkwNSw3OTM0LDc5NjQsNzk5Myw4MDIzLDgwNTMsODA4Myw4MTEyLDgxNDIsODE3MSw4MjAxLDgyMzAsODI2MCw4Mjg5LDgzMTksODM0OCw4Mzc4LDg0MDcsODQzNyw4NDY2LDg0OTYsODUyNSw4NTU1LDg1ODQsODYxNCw4NjQzLDg2NzMsODcwMiw4NzMyLDg3NjEsODc5MSw4ODIxLDg4NTAsODg4MCw4OTA5LDg5MzgsODk2OCw4OTk3LDkwMjcsOTA1Niw5MDg2LDkxMTUsOTE0NSw5MTc1LDkyMDUsOTIzNCw5MjY0LDkyOTMsOTMyMiw5MzUyLDkzODEsOTQxMCw5NDQwLDk0NzAsOTQ5OSw5NTI5LDk1NTksOTU4OSw5NjE4LDk2NDgsOTY3Nyw5NzA2LDk3MzYsOTc2NSw5Nzk0LDk4MjQsOTg1Myw5ODgzLDk5MTMsOTk0Myw5OTcyLDEwMDAyLDEwMDMyLDEwMDYxLDEwMDkwLDEwMTIwLDEwMTQ5LDEwMTc4LDEwMjA4LDEwMjM3LDEwMjY3LDEwMjk3LDEwMzI2LDEwMzU2LDEwMzg2LDEwNDE1LDEwNDQ1LDEwNDc0LDEwNTA0LDEwNTMzLDEwNTYyLDEwNTkyLDEwNjIxLDEwNjUxLDEwNjgwLDEwNzEwLDEwNzQwLDEwNzcwLDEwNzk5LDEwODI5LDEwODU4LDEwODg4LDEwOTE3LDEwOTQ3LDEwOTc2LDExMDA1LDExMDM1LDExMDY0LDExMDk0LDExMTI0LDExMTUzLDExMTgzLDExMjEzLDExMjQyLDExMjcyLDExMzAxLDExMzMxLDExMzYwLDExMzg5LDExNDE5LDExNDQ4LDExNDc4LDExNTA3LDExNTM3LDExNTY3LDExNTk2LDExNjI2LDExNjU1LDExNjg1LDExNzE1LDExNzQ0LDExNzc0LDExODAzLDExODMyLDExODYyLDExODkxLDExOTIxLDExOTUwLDExOTgwLDEyMDEwLDEyMDM5LDEyMDY5LDEyMDk5LDEyMTI4LDEyMTU4LDEyMTg3LDEyMjE2LDEyMjQ2LDEyMjc1LDEyMzA0LDEyMzM0LDEyMzY0LDEyMzkzLDEyNDIzLDEyNDUzLDEyNDgzLDEyNTEyLDEyNTQyLDEyNTcxLDEyNjAwLDEyNjMwLDEyNjU5LDEyNjg4LDEyNzE4LDEyNzQ3LDEyNzc3LDEyODA3LDEyODM3LDEyODY2LDEyODk2LDEyOTI2LDEyOTU1LDEyOTg0LDEzMDE0LDEzMDQzLDEzMDcyLDEzMTAyLDEzMTMxLDEzMTYxLDEzMTkxLDEzMjIwLDEzMjUwLDEzMjgwLDEzMzEwLDEzMzM5LDEzMzY4LDEzMzk4LDEzNDI3LDEzNDU2LDEzNDg2LDEzNTE1LDEzNTQ1LDEzNTc0LDEzNjA0LDEzNjM0LDEzNjY0LDEzNjkzLDEzNzIzLDEzNzUyLDEzNzgyLDEzODExLDEzODQwLDEzODcwLDEzODk5LDEzOTI5LDEzOTU4LDEzOTg4LDE0MDE4LDE0MDQ3LDE0MDc3LDE0MTA3LDE0MTM2LDE0MTY2LDE0MTk1LDE0MjI0LDE0MjU0LDE0MjgzLDE0MzEzLDE0MzQyLDE0MzcyLDE0NDAxLDE0NDMxLDE0NDYxLDE0NDkwLDE0NTIwLDE0NTUwLDE0NTc5LDE0NjA5LDE0NjM4LDE0NjY3LDE0Njk3LDE0NzI2LDE0NzU2LDE0Nzg1LDE0ODE1LDE0ODQ0LDE0ODc0LDE0OTA0LDE0OTMzLDE0OTYzLDE0OTkzLDE1MDIxLDE1MDUxLDE1MDgxLDE1MTEwLDE1MTQwLDE1MTY5LDE1MTk5LDE1MjI4LDE1MjU4LDE1Mjg3LDE1MzE3LDE1MzQ3LDE1Mzc3LDE1NDA2LDE1NDM2LDE1NDY1LDE1NDk0LDE1NTI0LDE1NTUzLDE1NTgyLDE1NjEyLDE1NjQxLDE1NjcxLDE1NzAxLDE1NzMxLDE1NzYwLDE1NzkwLDE1ODIwLDE1ODQ5LDE1ODc4LDE1OTA4LDE1OTM3LDE1OTY2LDE1OTk2LDE2MDI1LDE2MDU1LDE2MDg1LDE2MTE0LDE2MTQ0LDE2MTc0LDE2MjA0LDE2MjMzLDE2MjYyLDE2MjkyLDE2MzIxLDE2MzUwLDE2MzgwLDE2NDA5LDE2NDM5LDE2NDY4LDE2NDk4LDE2NTI4LDE2NTU4LDE2NTg3LDE2NjE3LDE2NjQ2LDE2Njc2LDE2NzA1LDE2NzM0LDE2NzY0LDE2NzkzLDE2ODIzLDE2ODUyLDE2ODgyLDE2OTEyLDE2OTQxLDE2OTcxLDE3MDAxLDE3MDMwLDE3MDYwLDE3MDg5LDE3MTE4LDE3MTQ4LDE3MTc3LDE3MjA3LDE3MjM2LDE3MjY2LDE3Mjk1LDE3MzI1LDE3MzU1LDE3Mzg0LDE3NDE0LDE3NDQ0LDE3NDczLDE3NTAyLDE3NTMyLDE3NTYxLDE3NTkxLDE3NjIwLDE3NjUwLDE3Njc5LDE3NzA5LDE3NzM4LDE3NzY4LDE3Nzk4LDE3ODI3LDE3ODU3LDE3ODg2LDE3OTE2LDE3OTQ1LDE3OTc1LDE4MDA0LDE4MDM0LDE4MDYzLDE4MDkzLDE4MTIyLDE4MTUyLDE4MTgxLDE4MjExLDE4MjQxLDE4MjcwLDE4MzAwLDE4MzMwLDE4MzU5LDE4Mzg4LDE4NDE4LDE4NDQ3LDE4NDc2LDE4NTA2LDE4NTM1LDE4NTY1LDE4NTk1LDE4NjI1LDE4NjU0LDE4Njg0LDE4NzE0LDE4NzQzLDE4NzcyLDE4ODAyLDE4ODMxLDE4ODYwLDE4ODkwLDE4OTE5LDE4OTQ5LDE4OTc5LDE5MDA4LDE5MDM4LDE5MDY4LDE5MDk4LDE5MTI3LDE5MTU2LDE5MTg2LDE5MjE1LDE5MjQ0LDE5Mjc0LDE5MzAzLDE5MzMzLDE5MzYyLDE5MzkyLDE5NDIyLDE5NDUyLDE5NDgxLDE5NTExLDE5NTQwLDE5NTcwLDE5NTk5LDE5NjI4LDE5NjU4LDE5Njg3LDE5NzE3LDE5NzQ2LDE5Nzc2LDE5ODA2LDE5ODM2LDE5ODY1LDE5ODk1LDE5OTI0LDE5OTU0LDE5OTgzLDIwMDEyLDIwMDQyLDIwMDcxLDIwMTAxLDIwMTMwLDIwMTYwLDIwMTkwLDIwMjE5LDIwMjQ5LDIwMjc5LDIwMzA4LDIwMzM4LDIwMzY3LDIwMzk2LDIwNDI2LDIwNDU1LDIwNDg1LDIwNTE0LDIwNTQ0LDIwNTczLDIwNjAzLDIwNjMzLDIwNjYyLDIwNjkyLDIwNzIxLDIwNzUxLDIwNzgwLDIwODEwLDIwODM5LDIwODY5LDIwODk4LDIwOTI4LDIwOTU3LDIwOTg3LDIxMDE2LDIxMDQ2LDIxMDc2LDIxMTA1LDIxMTM1LDIxMTY0LDIxMTk0LDIxMjIzLDIxMjUzLDIxMjgyLDIxMzEyLDIxMzQxLDIxMzcxLDIxNDAwLDIxNDMwLDIxNDU5LDIxNDg5LDIxNTE5LDIxNTQ4LDIxNTc4LDIxNjA3LDIxNjM3LDIxNjY2LDIxNjk2LDIxNzI1LDIxNzU0LDIxNzg0LDIxODEzLDIxODQzLDIxODczLDIxOTAyLDIxOTMyLDIxOTYyLDIxOTkxLDIyMDIxLDIyMDUwLDIyMDgwLDIyMTA5LDIyMTM4LDIyMTY4LDIyMTk3LDIyMjI3LDIyMjU2LDIyMjg2LDIyMzE2LDIyMzQ2LDIyMzc1LDIyNDA1LDIyNDM0LDIyNDY0LDIyNDkzLDIyNTIyLDIyNTUyLDIyNTgxLDIyNjExLDIyNjQwLDIyNjcwLDIyNzAwLDIyNzMwLDIyNzU5LDIyNzg5LDIyODE4LDIyODQ4LDIyODc3LDIyOTA2LDIyOTM2LDIyOTY1LDIyOTk0LDIzMDI0LDIzMDU0LDIzMDgzLDIzMTEzLDIzMTQzLDIzMTczLDIzMjAyLDIzMjMyLDIzMjYxLDIzMjkwLDIzMzIwLDIzMzQ5LDIzMzc5LDIzNDA4LDIzNDM4LDIzNDY3LDIzNDk3LDIzNTI3LDIzNTU2LDIzNTg2LDIzNjE2LDIzNjQ1LDIzNjc0LDIzNzA0LDIzNzMzLDIzNzYzLDIzNzkyLDIzODIyLDIzODUxLDIzODgxLDIzOTEwLDIzOTQwLDIzOTcwLDIzOTk5LDI0MDI5LDI0MDU4LDI0MDg4LDI0MTE3LDI0MTQ3LDI0MTc2LDI0MjA2LDI0MjM1LDI0MjY1LDI0Mjk0LDI0MzI0LDI0MzUzLDI0MzgzLDI0NDEzLDI0NDQyLDI0NDcyLDI0NTAxLDI0NTMxLDI0NTYwLDI0NTkwLDI0NjE5LDI0NjQ4LDI0Njc4LDI0NzA3LDI0NzM3LDI0NzY3LDI0Nzk2LDI0ODI2LDI0ODU2LDI0ODg1LDI0OTE1LDI0OTQ0LDI0OTc0LDI1MDAzLDI1MDMyLDI1MDYyLDI1MDkxLDI1MTIxLDI1MTUwLDI1MTgwLDI1MjEwLDI1MjQwLDI1MjY5LDI1Mjk5LDI1MzI4LDI1MzU4LDI1Mzg3LDI1NDE2LDI1NDQ2LDI1NDc1LDI1NTA1LDI1NTM0LDI1NTY0LDI1NTk0LDI1NjI0LDI1NjUzLDI1NjgzLDI1NzEyLDI1NzQyLDI1NzcxLDI1ODAwLDI1ODMwLDI1ODU5LDI1ODg4LDI1OTE4LDI1OTQ4LDI1OTc3LDI2MDA3LDI2MDM3LDI2MDY3LDI2MDk2LDI2MTI2LDI2MTU1LDI2MTg0LDI2MjE0LDI2MjQzLDI2MjcyLDI2MzAyLDI2MzMyLDI2MzYxLDI2MzkxLDI2NDIxLDI2NDUxLDI2NDgwLDI2NTEwLDI2NTM5LDI2NTY4LDI2NTk4LDI2NjI3LDI2NjU2LDI2Njg2LDI2NzE1LDI2NzQ1LDI2Nzc1LDI2ODA1LDI2ODM0LDI2ODY0LDI2ODkzLDI2OTIzLDI2OTUyLDI2OTgyLDI3MDExLDI3MDQxLDI3MDcwLDI3MDk5LDI3MTI5LDI3MTU5LDI3MTg4LDI3MjE4LDI3MjQ4LDI3Mjc3LDI3MzA3LDI3MzM2LDI3MzY2LDI3Mzk1LDI3NDI1LDI3NDU0LDI3NDg0LDI3NTEzLDI3NTQyLDI3NTcyLDI3NjAyLDI3NjMxLDI3NjYxLDI3NjkxLDI3NzIwLDI3NzUwLDI3Nzc5LDI3ODA5LDI3ODM4LDI3ODY4LDI3ODk3LDI3OTI2LDI3OTU2LDI3OTg1LDI4MDE1LDI4MDQ1LDI4MDc0LDI4MTA0LDI4MTM0LDI4MTYzLDI4MTkzLDI4MjIyLDI4MjUyLDI4MjgxLDI4MzEwLDI4MzQwLDI4MzY5LDI4Mzk5LDI4NDI4LDI4NDU4LDI4NDg4LDI4NTE3LDI4NTQ3LDI4NTc3LDI4NjA3LDI4NjM2LDI4NjY1LDI4Njk1LDI4NzI0LDI4NzU0LDI4NzgzLDI4ODEzLDI4ODQzLDI4ODcyLDI4OTAxLDI4OTMxLDI4OTYwLDI4OTkwLDI5MDE5LDI5MDQ5LDI5MDc4LDI5MTA4LDI5MTM3LDI5MTY3LDI5MTk2LDI5MjI2LDI5MjU1LDI5Mjg1LDI5MzE1LDI5MzQ1LDI5Mzc1LDI5NDA0LDI5NDM0LDI5NDYzLDI5NDkyLDI5NTIyLDI5NTUxLDI5NTgwLDI5NjEwLDI5NjQwLDI5NjY5LDI5Njk5LDI5NzI5LDI5NzU5LDI5Nzg4LDI5ODE4LDI5ODQ3LDI5ODc2LDI5OTA2LDI5OTM1LDI5OTY0LDI5OTk0LDMwMDIzLDMwMDUzLDMwMDgyLDMwMTEyLDMwMTQxLDMwMTcxLDMwMjAwLDMwMjMwLDMwMjU5LDMwMjg5LDMwMzE4LDMwMzQ4LDMwMzc4LDMwNDA4LDMwNDM3LDMwNDY3LDMwNDk2LDMwNTI2LDMwNTU1LDMwNTg1LDMwNjE0LDMwNjQ0LDMwNjczLDMwNzAzLDMwNzMyLDMwNzYyLDMwNzkxLDMwODIxLDMwODUwLDMwODgwLDMwOTA5LDMwOTM5LDMwOTY4LDMwOTk4LDMxMDI3LDMxMDU3LDMxMDg2LDMxMTE2LDMxMTQ1LDMxMTc1LDMxMjA0LDMxMjM0LDMxMjYzLDMxMjkzLDMxMzIyLDMxMzUyLDMxMzgxLDMxNDExLDMxNDQxLDMxNDcxLDMxNTAwLDMxNTMwLDMxNTU5LDMxNTg5LDMxNjE4LDMxNjQ4LDMxNjc2LDMxNzA2LDMxNzM2LDMxNzY2LDMxNzk1LDMxODI1LDMxODU0LDMxODg0LDMxOTEzLDMxOTQzLDMxOTcyLDMyMDAyLDMyMDMxLDMyMDYxLDMyMDkwLDMyMTIwLDMyMTUwLDMyMTgwLDMyMjA5LDMyMjM5LDMyMjY4LDMyMjk4LDMyMzI3LDMyMzU3LDMyMzg2LDMyNDE2LDMyNDQ1LDMyNDc1LDMyNTA0LDMyNTM0LDMyNTYzLDMyNTkzLDMyNjIyLDMyNjUyLDMyNjgxLDMyNzExLDMyNzQwLDMyNzcwLDMyNzk5LDMyODI5LDMyODU4LDMyODg4LDMyOTE3LDMyOTQ3LDMyOTc2LDMzMDA2LDMzMDM1LDMzMDY1LDMzMDk0LDMzMTI0LDMzMTUzLDMzMTgzLDMzMjEzLDMzMjQzLDMzMjcyLDMzMzAyLDMzMzMxLDMzMzYxLDMzMzkwLDMzNDIwLDMzNDUwLDMzNDc5LDMzNTA5LDMzNTM5LDMzNTY4LDMzNTk4LDMzNjI3LDMzNjU3LDMzNjg2LDMzNzE2LDMzNzQ1LDMzNzc1LDMzODA0LDMzODM0LDMzODYzLDMzODkzLDMzOTIyLDMzOTUyLDMzOTgxLDM0MDExLDM0MDQwLDM0MDY5LDM0MDk5LDM0MTI4LDM0MTU4LDM0MTg3LDM0MjE3LDM0MjQ3LDM0Mjc3LDM0MzA2LDM0MzM2LDM0MzY1LDM0Mzk1LDM0NDI0LDM0NDU0LDM0NDgzLDM0NTEyLDM0NTQyLDM0NTcxLDM0NjAxLDM0NjMxLDM0NjYwLDM0NjkwLDM0NzE5LDM0NzQ5LDM0Nzc4LDM0ODA4LDM0ODM3LDM0ODY3LDM0ODk2LDM0OTI2LDM0OTU1LDM0OTg1LDM1MDE1LDM1MDQ0LDM1MDc0LDM1MTAzLDM1MTMzLDM1MTYyLDM1MTkyLDM1MjIyLDM1MjUxLDM1MjgwLDM1MzEwLDM1MzQwLDM1MzcwLDM1Mzk5LDM1NDI5LDM1NDU4LDM1NDg4LDM1NTE3LDM1NTQ3LDM1NTc2LDM1NjA1LDM1NjM1LDM1NjY1LDM1Njk0LDM1NzIzLDM1NzUzLDM1NzgyLDM1ODExLDM1ODQxLDM1ODcxLDM1OTAxLDM1OTMwLDM1OTYwLDM1OTg5LDM2MDE5LDM2MDQ4LDM2MDc4LDM2MTA3LDM2MTM2LDM2MTY2LDM2MTk1LDM2MjI1LDM2MjU0LDM2Mjg0LDM2MzE0LDM2MzQzLDM2MzczLDM2NDAzLDM2NDMzLDM2NDYyLDM2NDkyLDM2NTIxLDM2NTUxLDM2NTgwLDM2NjEwLDM2NjM5LDM2NjY5LDM2Njk4LDM2NzI4LDM2NzU3LDM2Nzg2LDM2ODE2LDM2ODQ1LDM2ODc1LDM2OTA0LDM2OTM0LDM2OTYzLDM2OTkzLDM3MDIyLDM3MDUyLDM3MDgxLDM3MTExLDM3MTQxLDM3MTcwLDM3MjAwLDM3MjI5LDM3MjU5LDM3Mjg4LDM3MzE4LDM3MzQ3LDM3Mzc3LDM3NDA2LDM3NDM2LDM3NDY1LDM3NDk1LDM3NTI0LDM3NTU0LDM3NTg0LDM3NjEzLDM3NjQzLDM3NjcyLDM3NzAxLDM3NzMxLDM3NzYwLDM3NzkwLDM3ODE5LDM3ODQ5LDM3ODc4LDM3OTA4LDM3OTM4LDM3OTY3LDM3OTk3LDM4MDI3LDM4MDU2LDM4MDg1LDM4MTE1LDM4MTQ0LDM4MTc0LDM4MjAzLDM4MjMzLDM4MjYyLDM4MjkyLDM4MzIyLDM4MzUxLDM4MzgxLDM4NDEwLDM4NDQwLDM4NDY5LDM4NDk5LDM4NTI4LDM4NTU4LDM4NTg3LDM4NjE3LDM4NjQ2LDM4Njc2LDM4NzA1LDM4NzM1LDM4NzY0LDM4Nzk0LDM4ODIzLDM4ODUzLDM4ODgyLDM4OTEyLDM4OTQxLDM4OTcxLDM5MDAxLDM5MDMwLDM5MDU5LDM5MDg5LDM5MTE4LDM5MTQ4LDM5MTc4LDM5MjA4LDM5MjM3LDM5MjY3LDM5Mjk3LDM5MzI2LDM5MzU1LDM5Mzg1LDM5NDE0LDM5NDQ0LDM5NDczLDM5NTAzLDM5NTMyLDM5NTYyLDM5NTkyLDM5NjIxLDM5NjUwLDM5NjgwLDM5NzA5LDM5NzM5LDM5NzY4LDM5Nzk4LDM5ODI3LDM5ODU3LDM5ODg2LDM5OTE2LDM5OTQ2LDM5OTc1LDQwMDA1LDQwMDM1LDQwMDY0LDQwMDk0LDQwMTIzLDQwMTUzLDQwMTgyLDQwMjEyLDQwMjQxLDQwMjcxLDQwMzAwLDQwMzMwLDQwMzU5LDQwMzg5LDQwNDE4LDQwNDQ4LDQwNDc3LDQwNTA3LDQwNTM2LDQwNTY2LDQwNTk1LDQwNjI1LDQwNjU1LDQwNjg1LDQwNzE0LDQwNzQ0LDQwNzczLDQwODAzLDQwODMyLDQwODYyLDQwODkyLDQwOTIxLDQwOTUxLDQwOTgwLDQxMDA5LDQxMDM5LDQxMDY4LDQxMDk4LDQxMTI3LDQxMTU3LDQxMTg2LDQxMjE2LDQxMjQ1LDQxMjc1LDQxMzA0LDQxMzM0LDQxMzY0LDQxMzkzLDQxNDIyLDQxNDUyLDQxNDgxLDQxNTExLDQxNTQwLDQxNTcwLDQxNTk5LDQxNjI5LDQxNjU4LDQxNjg4LDQxNzE4LDQxNzQ4LDQxNzc3LDQxODA3LDQxODM2LDQxODY1LDQxODk0LDQxOTI0LDQxOTUzLDQxOTgzLDQyMDEyLDQyMDQyLDQyMDcyLDQyMTAyLDQyMTMxLDQyMTYxLDQyMTkwLDQyMjIwLDQyMjQ5LDQyMjc5LDQyMzA4LDQyMzM3LDQyMzY3LDQyMzk3LDQyNDI2LDQyNDU2LDQyNDg1LDQyNTE1LDQyNTQ1LDQyNTc0LDQyNjA0LDQyNjMzLDQyNjYyLDQyNjkyLDQyNzIxLDQyNzUxLDQyNzgwLDQyODEwLDQyODM5LDQyODY5LDQyODk5LDQyOTI5LDQyOTU4LDQyOTg4LDQzMDE3LDQzMDQ2LDQzMDc2LDQzMTA1LDQzMTM1LDQzMTY0LDQzMTk0LDQzMjIzLDQzMjUzLDQzMjgzLDQzMzEyLDQzMzQyLDQzMzcxLDQzNDAxLDQzNDMwLDQzNDYwLDQzNDg5LDQzNTE5LDQzNTQ4LDQzNTc4LDQzNjA3LDQzNjM3LDQzNjY2LDQzNjk2LDQzNzI2LDQzNzU1LDQzNzg1LDQzODE0LDQzODQ0LDQzODczLDQzOTAzLDQzOTMyLDQzOTYyLDQzOTkxLDQ0MDIxLDQ0MDUwLDQ0MDgwLDQ0MTA5LDQ0MTM5LDQ0MTY5LDQ0MTk4LDQ0MjI4LDQ0MjU4LDQ0Mjg3LDQ0MzE3LDQ0MzQ2LDQ0Mzc1LDQ0NDA1LDQ0NDM0LDQ0NDY0LDQ0NDkzLDQ0NTIzLDQ0NTUzLDQ0NTgyLDQ0NjEyLDQ0NjQxLDQ0NjcxLDQ0NzAwLDQ0NzMwLDQ0NzU5LDQ0Nzg4LDQ0ODE4LDQ0ODQ3LDQ0ODc3LDQ0OTA2LDQ0OTM2LDQ0OTY2LDQ0OTk2LDQ1MDI1LDQ1MDU1LDQ1MDg0LDQ1MTE0LDQ1MTQzLDQ1MTcyLDQ1MjAyLDQ1MjMxLDQ1MjYxLDQ1MjkwLDQ1MzIwLDQ1MzUwLDQ1MzgwLDQ1NDA5LDQ1NDM5LDQ1NDY4LDQ1NDk4LDQ1NTI3LDQ1NTU2LDQ1NTg2LDQ1NjE1LDQ1NjQ0LDQ1Njc0LDQ1NzA0LDQ1NzMzLDQ1NzYzLDQ1NzkzLDQ1ODIzLDQ1ODUyLDQ1ODgyLDQ1OTExLDQ1OTQwLDQ1OTcwLDQ1OTk5LDQ2MDI4LDQ2MDU4LDQ2MDg4LDQ2MTE3LDQ2MTQ3LDQ2MTc3LDQ2MjA2LDQ2MjM2LDQ2MjY1LDQ2Mjk1LDQ2MzI0LDQ2MzU0LDQ2MzgzLDQ2NDEzLDQ2NDQyLDQ2NDcyLDQ2NTAxLDQ2NTMxLDQ2NTYwLDQ2NTkwLDQ2NjIwLDQ2NjQ5LDQ2Njc5LDQ2NzA4LDQ2NzM4LDQ2NzY3LDQ2Nzk3LDQ2ODI2LDQ2ODU2LDQ2ODg1LDQ2OTE1LDQ2OTQ0LDQ2OTc0LDQ3MDAzLDQ3MDMzLDQ3MDYzLDQ3MDkyLDQ3MTIyLDQ3MTUxLDQ3MTgxLDQ3MjEwLDQ3MjQwLDQ3MjY5LDQ3Mjk4LDQ3MzI4LDQ3MzU3LDQ3Mzg3LDQ3NDE3LDQ3NDQ2LDQ3NDc2LDQ3NTA2LDQ3NTM1LDQ3NTY1LDQ3NTk0LDQ3NjI0LDQ3NjUzLDQ3NjgyLDQ3NzEyLDQ3NzQxLDQ3NzcxLDQ3ODAwLDQ3ODMwLDQ3ODYwLDQ3ODkwLDQ3OTE5LDQ3OTQ5LDQ3OTc4LDQ4MDA4LDQ4MDM3LDQ4MDY2LDQ4MDk2LDQ4MTI1LDQ4MTU1LDQ4MTg0LDQ4MjE0LDQ4MjQ0LDQ4MjczLDQ4MzAzLDQ4MzMzLDQ4MzYyLDQ4MzkyLDQ4NDIxLDQ4NDUwLDQ4NDgwLDQ4NTA5LDQ4NTM4LDQ4NTY4LDQ4NTk4LDQ4NjI3LDQ4NjU3LDQ4Njg3LDQ4NzE3LDQ4NzQ2LDQ4Nzc2LDQ4ODA1LDQ4ODM0LDQ4ODY0LDQ4ODkzLDQ4OTIyLDQ4OTUyLDQ4OTgyLDQ5MDExLDQ5MDQxLDQ5MDcxLDQ5MTAwLDQ5MTMwLDQ5MTYwLDQ5MTg5LDQ5MjE4LDQ5MjQ4LDQ5Mjc3LDQ5MzA2LDQ5MzM2LDQ5MzY1LDQ5Mzk1LDQ5NDI1LDQ5NDU1LDQ5NDg0LDQ5NTE0LDQ5NTQzLDQ5NTczLDQ5NjAyLDQ5NjMyLDQ5NjYxLDQ5NjkwLDQ5NzIwLDQ5NzQ5LDQ5Nzc5LDQ5ODA5LDQ5ODM4LDQ5ODY4LDQ5ODk4LDQ5OTI3LDQ5OTU3LDQ5OTg2LDUwMDE2LDUwMDQ1LDUwMDc1LDUwMTA0LDUwMTMzLDUwMTYzLDUwMTkyLDUwMjIyLDUwMjUyLDUwMjgxLDUwMzExLDUwMzQwLDUwMzcwLDUwNDAwLDUwNDI5LDUwNDU5LDUwNDg4LDUwNTE4LDUwNTQ3LDUwNTc2LDUwNjA2LDUwNjM1LDUwNjY1LDUwNjk0LDUwNzI0LDUwNzU0LDUwNzg0LDUwODEzLDUwODQzLDUwODcyLDUwOTAyLDUwOTMxLDUwOTYwLDUwOTkwLDUxMDE5LDUxMDQ5LDUxMDc4LDUxMTA4LDUxMTM4LDUxMTY3LDUxMTk3LDUxMjI3LDUxMjU2LDUxMjg2LDUxMzE1LDUxMzQ1LDUxMzc0LDUxNDAzLDUxNDMzLDUxNDYyLDUxNDkyLDUxNTIyLDUxNTUyLDUxNTgyLDUxNjExLDUxNjQxLDUxNjcwLDUxNjk5LDUxNzI5LDUxNzU4LDUxNzg3LDUxODE2LDUxODQ2LDUxODc2LDUxOTA2LDUxOTM2LDUxOTY1LDUxOTk1LDUyMDI1LDUyMDU0LDUyMDgzLDUyMTEzLDUyMTQyLDUyMTcxLDUyMjAwLDUyMjMwLDUyMjYwLDUyMjkwLDUyMzE5LDUyMzQ5LDUyMzc5LDUyNDA4LDUyNDM4LDUyNDY3LDUyNDk3LDUyNTI2LDUyNTU1LDUyNTg1LDUyNjE0LDUyNjQ0LDUyNjczLDUyNzAzLDUyNzMzLDUyNzYyLDUyNzkyLDUyODIyLDUyODUxLDUyODgxLDUyOTEwLDUyOTM5LDUyOTY5LDUyOTk4LDUzMDI4LDUzMDU3LDUzMDg3LDUzMTE2LDUzMTQ2LDUzMTc2LDUzMjA1LDUzMjM1LDUzMjY0LDUzMjk0LDUzMzI0LDUzMzUzLDUzMzgzLDUzNDEyLDUzNDQxLDUzNDcxLDUzNTAwLDUzNTMwLDUzNTU5LDUzNTg5LDUzNjE5LDUzNjQ4LDUzNjc4LDUzNzA4LDUzNzM3LDUzNzY3LDUzNzk2LDUzODI1LDUzODU1LDUzODg0LDUzOTEzLDUzOTQzLDUzOTczLDU0MDAzLDU0MDMyLDU0MDYyLDU0MDkyLDU0MTIxLDU0MTUxLDU0MTgwLDU0MjA5LDU0MjM5LDU0MjY4LDU0Mjk3LDU0MzI3LDU0MzU3LDU0Mzg3LDU0NDE2LDU0NDQ2LDU0NDc2LDU0NTA1LDU0NTM1LDU0NTY0LDU0NTkzLDU0NjIzLDU0NjUyLDU0NjgxLDU0NzExLDU0NzQxLDU0NzcwLDU0ODAwLDU0ODMwLDU0ODU5LDU0ODg5LDU0OTE5LDU0OTQ4LDU0OTc3LDU1MDA3LDU1MDM2LDU1MDY2LDU1MDk1LDU1MTI1LDU1MTU0LDU1MTg0LDU1MjEzLDU1MjQzLDU1MjczLDU1MzAyLDU1MzMyLDU1MzYxLDU1MzkxLDU1NDIwLDU1NDUwLDU1NDc5LDU1NTA4LDU1NTM4LDU1NTY3LDU1NTk3LDU1NjI3LDU1NjU3LDU1Njg2LDU1NzE2LDU1NzQ1LDU1Nzc1LDU1ODA0LDU1ODM0LDU1ODYzLDU1ODkyLDU1OTIyLDU1OTUxLDU1OTgxLDU2MDExLDU2MDQwLDU2MDcwLDU2MTAwLDU2MTI5LDU2MTU5LDU2MTg4LDU2MjE4LDU2MjQ3LDU2Mjc2LDU2MzA2LDU2MzM1LDU2MzY1LDU2Mzk0LDU2NDI0LDU2NDU0LDU2NDgzLDU2NTEzLDU2NTQzLDU2NTcyLDU2NjAxLDU2NjMxLDU2NjYwLDU2NjkwLDU2NzE5LDU2NzQ5LDU2Nzc4LDU2ODA4LDU2ODM3LDU2ODY3LDU2ODk3LDU2OTI2LDU2OTU2LDU2OTg1LDU3MDE1LDU3MDQ0LDU3MDc0LDU3MTAzLDU3MTMzLDU3MTYyLDU3MTkyLDU3MjIxLDU3MjUxLDU3MjgwLDU3MzEwLDU3MzQwLDU3MzY5LDU3Mzk5LDU3NDI5LDU3NDU4LDU3NDg3LDU3NTE3LDU3NTQ2LDU3NTc2LDU3NjA1LDU3NjM0LDU3NjY0LDU3Njk0LDU3NzIzLDU3NzUzLDU3NzgzLDU3ODEzLDU3ODQyLDU3ODcxLDU3OTAxLDU3OTMwLDU3OTU5LDU3OTg5LDU4MDE4LDU4MDQ4LDU4MDc3LDU4MTA3LDU4MTM3LDU4MTY3LDU4MTk2LDU4MjI2LDU4MjU1LDU4Mjg1LDU4MzE0LDU4MzQzLDU4MzczLDU4NDAyLDU4NDMyLDU4NDYxLDU4NDkxLDU4NTIxLDU4NTUxLDU4NTgwLDU4NjEwLDU4NjM5LDU4NjY5LDU4Njk4LDU4NzI3LDU4NzU3LDU4Nzg2LDU4ODE2LDU4ODQ1LDU4ODc1LDU4OTA1LDU4OTM0LDU4OTY0LDU4OTk0LDU5MDIzLDU5MDUzLDU5MDgyLDU5MTExLDU5MTQxLDU5MTcwLDU5MjAwLDU5MjI5LDU5MjU5LDU5Mjg4LDU5MzE4LDU5MzQ4LDU5Mzc3LDU5NDA3LDU5NDM2LDU5NDY2LDU5NDk1LDU5NTI1LDU5NTU0LDU5NTg0LDU5NjEzLDU5NjQzLDU5NjcyLDU5NzAyLDU5NzMxLDU5NzYxLDU5NzkxLDU5ODIwLDU5ODUwLDU5ODc5LDU5OTA5LDU5OTM5LDU5OTY4LDU5OTk3LDYwMDI3LDYwMDU2LDYwMDg2LDYwMTE1LDYwMTQ1LDYwMTc0LDYwMjA0LDYwMjM0LDYwMjY0LDYwMjkzLDYwMzIzLDYwMzUyLDYwMzgxLDYwNDExLDYwNDQwLDYwNDY5LDYwNDk5LDYwNTI4LDYwNTU4LDYwNTg4LDYwNjE4LDYwNjQ4LDYwNjc3LDYwNzA3LDYwNzM2LDYwNzY1LDYwNzk1LDYwODI0LDYwODUzLDYwODgzLDYwOTEyLDYwOTQyLDYwOTcyLDYxMDAyLDYxMDMxLDYxMDYxLDYxMDkwLDYxMTIwLDYxMTQ5LDYxMTc5LDYxMjA4LDYxMjM3LDYxMjY3LDYxMjk2LDYxMzI2LDYxMzU2LDYxMzg1LDYxNDE1LDYxNDQ1LDYxNDc0LDYxNTA0LDYxNTMzLDYxNTYzLDYxNTkyLDYxNjIxLDYxNjUxLDYxNjgwLDYxNzEwLDYxNzM5LDYxNzY5LDYxNzk5LDYxODI4LDYxODU4LDYxODg4LDYxOTE3LDYxOTQ3LDYxOTc2LDYyMDA2LDYyMDM1LDYyMDY0LDYyMDk0LDYyMTIzLDYyMTUzLDYyMTgyLDYyMjEyLDYyMjQyLDYyMjcxLDYyMzAxLDYyMzMxLDYyMzYwLDYyMzkwLDYyNDE5LDYyNDQ4LDYyNDc4LDYyNTA3LDYyNTM3LDYyNTY2LDYyNTk2LDYyNjI1LDYyNjU1LDYyNjg1LDYyNzE1LDYyNzQ0LDYyNzc0LDYyODAzLDYyODMyLDYyODYyLDYyODkxLDYyOTIxLDYyOTUwLDYyOTgwLDYzMDA5LDYzMDM5LDYzMDY5LDYzMDk5LDYzMTI4LDYzMTU3LDYzMTg3LDYzMjE2LDYzMjQ2LDYzMjc1LDYzMzA1LDYzMzM0LDYzMzYzLDYzMzkzLDYzNDIzLDYzNDUzLDYzNDgyLDYzNTEyLDYzNTQxLDYzNTcxLDYzNjAwLDYzNjMwLDYzNjU5LDYzNjg5LDYzNzE4LDYzNzQ3LDYzNzc3LDYzODA3LDYzODM2LDYzODY2LDYzODk1LDYzOTI1LDYzOTU1LDYzOTg0LDY0MDE0LDY0MDQzLDY0MDczLDY0MTAyLDY0MTMxLDY0MTYxLDY0MTkwLDY0MjIwLDY0MjQ5LDY0Mjc5LDY0MzA5LDY0MzM5LDY0MzY4LDY0Mzk4LDY0NDI3LDY0NDU3LDY0NDg2LDY0NTE1LDY0NTQ1LDY0NTc0LDY0NjAzLDY0NjMzLDY0NjYzLDY0NjkyLDY0NzIyLDY0NzUyLDY0NzgyLDY0ODExLDY0ODQxLDY0ODcwLDY0ODk5LDY0OTI5LDY0OTU4LDY0OTg3LDY1MDE3LDY1MDQ3LDY1MDc2LDY1MTA2LDY1MTM2LDY1MTY2LDY1MTk1LDY1MjI1LDY1MjU0LDY1MjgzLDY1MzEzLDY1MzQyLDY1MzcxLDY1NDAxLDY1NDMxLDY1NDYwLDY1NDkwLDY1NTIwLDY1NTQ5LDY1NTc5LDY1NjA4LDY1NjM4LDY1NjY3LDY1Njk3LDY1NzI2LDY1NzU1LDY1Nzg1LDY1ODE1LDY1ODQ0LDY1ODc0LDY1OTAzLDY1OTMzLDY1OTYzLDY1OTkyLDY2MDIyLDY2MDUxLDY2MDgxLDY2MTEwLDY2MTQwLDY2MTY5LDY2MTk5LDY2MjI4LDY2MjU4LDY2Mjg3LDY2MzE3LDY2MzQ2LDY2Mzc2LDY2NDA1LDY2NDM1LDY2NDY1LDY2NDk0LDY2NTI0LDY2NTUzLDY2NTgzLDY2NjEyLDY2NjQxLDY2NjcxLDY2NzAwLDY2NzMwLDY2NzYwLDY2Nzg5LDY2ODE5LDY2ODQ5LDY2ODc4LDY2OTA4LDY2OTM3LDY2OTY3LDY2OTk2LDY3MDI1LDY3MDU1LDY3MDg0LDY3MTE0LDY3MTQzLDY3MTczLDY3MjAzLDY3MjMzLDY3MjYyLDY3MjkyLDY3MzIxLDY3MzUxLDY3MzgwLDY3NDA5LDY3NDM5LDY3NDY4LDY3NDk3LDY3NTI3LDY3NTU3LDY3NTg3LDY3NjE3LDY3NjQ2LDY3Njc2LDY3NzA1LDY3NzM1LDY3NzY0LDY3NzkzLDY3ODIzLDY3ODUyLDY3ODgyLDY3OTExLDY3OTQxLDY3OTcxLDY4ZTMsNjgwMzAsNjgwNjAsNjgwODksNjgxMTksNjgxNDgsNjgxNzcsNjgyMDcsNjgyMzYsNjgyNjYsNjgyOTUsNjgzMjUsNjgzNTQsNjgzODQsNjg0MTQsNjg0NDMsNjg0NzMsNjg1MDIsNjg1MzIsNjg1NjEsNjg1OTEsNjg2MjAsNjg2NTAsNjg2NzksNjg3MDgsNjg3MzgsNjg3NjgsNjg3OTcsNjg4MjcsNjg4NTcsNjg4ODYsNjg5MTYsNjg5NDYsNjg5NzUsNjkwMDQsNjkwMzQsNjkwNjMsNjkwOTIsNjkxMjIsNjkxNTIsNjkxODEsNjkyMTEsNjkyNDAsNjkyNzAsNjkzMDAsNjkzMzAsNjkzNTksNjkzODgsNjk0MTgsNjk0NDcsNjk0NzYsNjk1MDYsNjk1MzUsNjk1NjUsNjk1OTUsNjk2MjQsNjk2NTQsNjk2ODQsNjk3MTMsNjk3NDMsNjk3NzIsNjk4MDIsNjk4MzEsNjk4NjEsNjk4OTAsNjk5MTksNjk5NDksNjk5NzgsNzAwMDgsNzAwMzgsNzAwNjcsNzAwOTcsNzAxMjYsNzAxNTYsNzAxODYsNzAyMTUsNzAyNDUsNzAyNzQsNzAzMDMsNzAzMzMsNzAzNjIsNzAzOTIsNzA0MjEsNzA0NTEsNzA0ODEsNzA1MTAsNzA1NDAsNzA1NzAsNzA1OTksNzA2MjksNzA2NTgsNzA2ODcsNzA3MTcsNzA3NDYsNzA3NzYsNzA4MDUsNzA4MzUsNzA4NjQsNzA4OTQsNzA5MjQsNzA5NTQsNzA5ODMsNzEwMTMsNzEwNDIsNzEwNzEsNzExMDEsNzExMzAsNzExNTksNzExODksNzEyMTgsNzEyNDgsNzEyNzgsNzEzMDgsNzEzMzcsNzEzNjcsNzEzOTcsNzE0MjYsNzE0NTUsNzE0ODUsNzE1MTQsNzE1NDMsNzE1NzMsNzE2MDIsNzE2MzIsNzE2NjIsNzE2OTEsNzE3MjEsNzE3NTEsNzE3ODEsNzE4MTAsNzE4MzksNzE4NjksNzE4OTgsNzE5MjcsNzE5NTcsNzE5ODYsNzIwMTYsNzIwNDYsNzIwNzUsNzIxMDUsNzIxMzUsNzIxNjQsNzIxOTQsNzIyMjMsNzIyNTMsNzIyODIsNzIzMTEsNzIzNDEsNzIzNzAsNzI0MDAsNzI0MjksNzI0NTksNzI0ODksNzI1MTgsNzI1NDgsNzI1NzcsNzI2MDcsNzI2MzcsNzI2NjYsNzI2OTUsNzI3MjUsNzI3NTQsNzI3ODQsNzI4MTMsNzI4NDMsNzI4NzIsNzI5MDIsNzI5MzEsNzI5NjEsNzI5OTEsNzMwMjAsNzMwNTAsNzMwODAsNzMxMDksNzMxMzksNzMxNjgsNzMxOTcsNzMyMjcsNzMyNTYsNzMyODYsNzMzMTUsNzMzNDUsNzMzNzUsNzM0MDQsNzM0MzQsNzM0NjQsNzM0OTMsNzM1MjMsNzM1NTIsNzM1ODEsNzM2MTEsNzM2NDAsNzM2NjksNzM2OTksNzM3MjksNzM3NTgsNzM3ODgsNzM4MTgsNzM4NDgsNzM4NzcsNzM5MDcsNzM5MzYsNzM5NjUsNzM5OTUsNzQwMjQsNzQwNTMsNzQwODMsNzQxMTMsNzQxNDIsNzQxNzIsNzQyMDIsNzQyMzEsNzQyNjEsNzQyOTEsNzQzMjAsNzQzNDksNzQzNzksNzQ0MDgsNzQ0MzcsNzQ0NjcsNzQ0OTcsNzQ1MjYsNzQ1NTYsNzQ1ODYsNzQ2MTUsNzQ2NDUsNzQ2NzUsNzQ3MDQsNzQ3MzMsNzQ3NjMsNzQ3OTIsNzQ4MjIsNzQ4NTEsNzQ4ODEsNzQ5MTAsNzQ5NDAsNzQ5NjksNzQ5OTksNzUwMjksNzUwNTgsNzUwODgsNzUxMTcsNzUxNDcsNzUxNzYsNzUyMDYsNzUyMzUsNzUyNjQsNzUyOTQsNzUzMjMsNzUzNTMsNzUzODMsNzU0MTIsNzU0NDIsNzU0NzIsNzU1MDEsNzU1MzEsNzU1NjAsNzU1OTAsNzU2MTksNzU2NDgsNzU2NzgsNzU3MDcsNzU3MzcsNzU3NjYsNzU3OTYsNzU4MjYsNzU4NTYsNzU4ODUsNzU5MTUsNzU5NDQsNzU5NzQsNzYwMDMsNzYwMzIsNzYwNjIsNzYwOTEsNzYxMjEsNzYxNTAsNzYxODAsNzYyMTAsNzYyMzksNzYyNjksNzYyOTksNzYzMjgsNzYzNTgsNzYzODcsNzY0MTYsNzY0NDYsNzY0NzUsNzY1MDUsNzY1MzQsNzY1NjQsNzY1OTMsNzY2MjMsNzY2NTMsNzY2ODIsNzY3MTIsNzY3NDEsNzY3NzEsNzY4MDEsNzY4MzAsNzY4NTksNzY4ODksNzY5MTgsNzY5NDgsNzY5NzcsNzcwMDcsNzcwMzYsNzcwNjYsNzcwOTYsNzcxMjUsNzcxNTUsNzcxODUsNzcyMTQsNzcyNDMsNzcyNzMsNzczMDIsNzczMzIsNzczNjEsNzczOTAsNzc0MjAsNzc0NTAsNzc0NzksNzc1MDksNzc1MzksNzc1NjksNzc1OTgsNzc2MjcsNzc2NTcsNzc2ODYsNzc3MTUsNzc3NDUsNzc3NzQsNzc4MDQsNzc4MzMsNzc4NjMsNzc4OTMsNzc5MjMsNzc5NTIsNzc5ODIsNzgwMTEsNzgwNDEsNzgwNzAsNzgwOTksNzgxMjksNzgxNTgsNzgxODgsNzgyMTcsNzgyNDcsNzgyNzcsNzgzMDcsNzgzMzYsNzgzNjYsNzgzOTUsNzg0MjUsNzg0NTQsNzg0ODMsNzg1MTMsNzg1NDIsNzg1NzIsNzg2MDEsNzg2MzEsNzg2NjEsNzg2OTAsNzg3MjAsNzg3NTAsNzg3NzksNzg4MDgsNzg4MzgsNzg4NjcsNzg4OTcsNzg5MjYsNzg5NTYsNzg5ODUsNzkwMTUsNzkwNDQsNzkwNzQsNzkxMDQsNzkxMzMsNzkxNjMsNzkxOTIsNzkyMjIsNzkyNTEsNzkyODEsNzkzMTAsNzkzNDAsNzkzNjksNzkzOTksNzk0MjgsNzk0NTgsNzk0ODcsNzk1MTcsNzk1NDYsNzk1NzYsNzk2MDYsNzk2MzUsNzk2NjUsNzk2OTUsNzk3MjQsNzk3NTMsNzk3ODMsNzk4MTIsNzk4NDEsNzk4NzEsNzk5MDAsNzk5MzAsNzk5NjAsNzk5OTBdfSx7Ii4uL21haW4iOjU5Mywib2JqZWN0LWFzc2lnbiI6NDczfV0sNTkzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkoKXt0aGlzLnJlZ2lvbmFsT3B0aW9ucz1bXSx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl09e2ludmFsaWRDYWxlbmRhcjoiQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCIsaW52YWxpZERhdGU6IkludmFsaWQgezB9IGRhdGUiLGludmFsaWRNb250aDoiSW52YWxpZCB7MH0gbW9udGgiLGludmFsaWRZZWFyOiJJbnZhbGlkIHswfSB5ZWFyIixkaWZmZXJlbnRDYWxlbmRhcnM6IkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMifSx0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zWyIiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gYSh0LGUscixuKXtpZih0aGlzLl9jYWxlbmRhcj10LHRoaXMuX3llYXI9ZSx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4iMDAwMDAwIi5zdWJzdHJpbmcoMCxlLSh0PSIiK3QpLmxlbmd0aCkrdH1mdW5jdGlvbiBzKCl7dGhpcy5zaG9ydFllYXJDdXRvZmY9IisxMCJ9ZnVuY3Rpb24gbCh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3RdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19bihpLnByb3RvdHlwZSx7aW5zdGFuY2U6ZnVuY3Rpb24odCxlKXt0PSh0fHwiZ3JlZ29yaWFuIikudG9Mb3dlckNhc2UoKSxlPWV8fCIiO3ZhciByPXRoaXMuX2xvY2FsQ2Fsc1t0KyItIitlXTtpZighciYmdGhpcy5jYWxlbmRhcnNbdF0mJihyPW5ldyB0aGlzLmNhbGVuZGFyc1t0XShlKSx0aGlzLl9sb2NhbENhbHNbdCsiLSIrZV09ciksIXIpdGhyb3codGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXJ8fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQ2FsZW5kYXIpLnJlcGxhY2UoL1x7MFx9Lyx0KTtyZXR1cm4gcn0sbmV3RGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybihuPShudWxsIT10JiZ0LnllYXI/dC5jYWxlbmRhcigpOiJzdHJpbmciPT10eXBlb2Ygbj90aGlzLmluc3RhbmNlKG4saSk6bil8fHRoaXMuaW5zdGFuY2UoKSkubmV3RGF0ZSh0LGUscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX19LHN1YnN0aXR1dGVDaGluZXNlRGlnaXRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0iIixpPTA7cj4wOyl7dmFyIGE9ciUxMDtuPSgwPT09YT8iIjp0W2FdK2VbaV0pK24saSsrLHI9TWF0aC5mbG9vcihyLzEwKX1yZXR1cm4gMD09PW4uaW5kZXhPZih0WzFdK2VbMV0pJiYobj1uLnN1YnN0cigxKSksbnx8dFswXX19fSksbihhLnByb3RvdHlwZSx7bmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm5ld0RhdGUobnVsbD09dD90aGlzOnQsZSxyKX0seWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5feWVhcjp0aGlzLnNldCh0LCJ5Iil9LG1vbnRoOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9tb250aDp0aGlzLnNldCh0LCJtIil9LGRheTpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fZGF5OnRoaXMuc2V0KHQsImQiKX0sZGF0ZTpmdW5jdGlvbih0LGUscil7aWYoIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodCxlLHIpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO3JldHVybiB0aGlzLl95ZWFyPXQsdGhpcy5fbW9udGg9ZSx0aGlzLl9kYXk9cix0aGlzfSxsZWFwWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5sZWFwWWVhcih0aGlzKX0sZXBvY2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXBvY2godGhpcyl9LGZvcm1hdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZm9ybWF0WWVhcih0aGlzKX0sbW9udGhPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubW9udGhPZlllYXIodGhpcyl9LHdlZWtPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla09mWWVhcih0aGlzKX0sZGF5c0luWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5ZZWFyKHRoaXMpfSxkYXlPZlllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZZZWFyKHRoaXMpfSxkYXlzSW5Nb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5Nb250aCh0aGlzKX0sZGF5T2ZXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mV2Vlayh0aGlzKX0sd2Vla0RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrRGF5KHRoaXMpfSxleHRyYUluZm86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXh0cmFJbmZvKHRoaXMpfSxhZGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMsdCxlKX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnNldCh0aGlzLHQsZSl9LGNvbXBhcmVUbzpmdW5jdGlvbih0KXtpZih0aGlzLl9jYWxlbmRhci5uYW1lIT09dC5fY2FsZW5kYXIubmFtZSl0aHJvdyhjLmxvY2FsLmRpZmZlcmVudENhbGVuZGFyc3x8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1x7MVx9Lyx0Ll9jYWxlbmRhci5sb2NhbC5uYW1lKTt2YXIgZT10aGlzLl95ZWFyIT09dC5feWVhcj90aGlzLl95ZWFyLXQuX3llYXI6dGhpcy5fbW9udGghPT10Ll9tb250aD90aGlzLm1vbnRoT2ZZZWFyKCktdC5tb250aE9mWWVhcigpOnRoaXMuX2RheS10Ll9kYXk7cmV0dXJuIDA9PT1lPzA6ZTwwPy0xOjF9LGNhbGVuZGFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyfSx0b0pEOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSkQodGhpcyl9LGZyb21KRDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpEKHQpfSx0b0pTRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pTRGF0ZSh0aGlzKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpTRGF0ZSh0KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy55ZWFyKCk8MD8iLSI6IiIpK28oTWF0aC5hYnModGhpcy55ZWFyKCkpLDQpKyItIitvKHRoaXMubW9udGgoKSwyKSsiLSIrbyh0aGlzLmRheSgpLDIpfX0pLG4ocy5wcm90b3R5cGUse192YWxpZGF0ZUxldmVsOjAsbmV3RGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIG51bGw9PXQ/dGhpcy50b2RheSgpOih0LnllYXImJih0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHI9dC5kYXkoKSxlPXQubW9udGgoKSx0PXQueWVhcigpKSxuZXcgYSh0aGlzLHQsZSxyKSl9LHRvZGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbUpTRGF0ZShuZXcgRGF0ZSl9LGVwb2NoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKS55ZWFyKCk8MD90aGlzLmxvY2FsLmVwb2Noc1swXTp0aGlzLmxvY2FsLmVwb2Noc1sxXX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4oZS55ZWFyKCk8MD8iLSI6IiIpK28oTWF0aC5hYnMoZS55ZWFyKCkpLDQpfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLDEyfSxtb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCk7cmV0dXJuKHIubW9udGgoKSt0aGlzLm1vbnRoc0luWWVhcihyKS10aGlzLmZpcnN0TW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHIpK3RoaXMubWluTW9udGh9LGZyb21Nb250aE9mWWVhcjpmdW5jdGlvbih0LGUpe3ZhciByPShlK3RoaXMuZmlyc3RNb250aC0yKnRoaXMubWluTW9udGgpJXRoaXMubW9udGhzSW5ZZWFyKHQpK3RoaXMubWluTW9udGg7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQscix0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRNb250aHx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRNb250aCkscn0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4gdGhpcy5sZWFwWWVhcihlKT8zNjY6MzY1fSxkYXlPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIG4udG9KRCgpLXRoaXMubmV3RGF0ZShuLnllYXIoKSx0aGlzLmZyb21Nb250aE9mWWVhcihuLnllYXIoKSx0aGlzLm1pbk1vbnRoKSx0aGlzLm1pbkRheSkudG9KRCgpKzF9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gN30sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybihNYXRoLmZsb29yKHRoaXMudG9KRChuKSkrMikldGhpcy5kYXlzSW5XZWVrKCl9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkse319LGFkZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHRoaXMuX2NvcnJlY3RBZGQodCx0aGlzLl9hZGQodCxlLHIpLGUscil9LF9hZGQ6ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKywiZCI9PT1yfHwidyI9PT1yKXt2YXIgbj10LnRvSkQoKStlKigidyI9PT1yP3RoaXMuZGF5c0luV2VlaygpOjEpLGk9dC5jYWxlbmRhcigpLmZyb21KRChuKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLFtpLnllYXIoKSxpLm1vbnRoKCksaS5kYXkoKV19dHJ5e3ZhciBhPXQueWVhcigpKygieSI9PT1yP2U6MCksbz10Lm1vbnRoT2ZZZWFyKCkrKCJtIj09PXI/ZTowKTtpPXQuZGF5KCk7InkiPT09cj8odC5tb250aCgpIT09dGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSYmKG89dGhpcy5uZXdEYXRlKGEsdC5tb250aCgpLHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpKSxvPU1hdGgubWluKG8sdGhpcy5tb250aHNJblllYXIoYSkpLGk9TWF0aC5taW4oaSx0aGlzLmRheXNJbk1vbnRoKGEsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSkpKToibSI9PT1yJiYoIWZ1bmN0aW9uKHQpe2Zvcig7bzx0Lm1pbk1vbnRoOylhLS0sbys9dC5tb250aHNJblllYXIoYSk7Zm9yKHZhciBlPXQubW9udGhzSW5ZZWFyKGEpO28+ZS0xK3QubWluTW9udGg7KWErKyxvLT1lLGU9dC5tb250aHNJblllYXIoYSl9KHRoaXMpLGk9TWF0aC5taW4oaSx0aGlzLmRheXNJbk1vbnRoKGEsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSkpKTt2YXIgcz1bYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pLGldO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sc31jYXRjaCh0KXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sdH19LF9jb3JyZWN0QWRkOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCEodGhpcy5oYXNZZWFyWmVyb3x8InkiIT09biYmIm0iIT09bnx8MCE9PWVbMF0mJnQueWVhcigpPjA9PWVbMF0+MCkpe3ZhciBpPXt5OlsxLDEsInkiXSxtOlsxLHRoaXMubW9udGhzSW5ZZWFyKC0xKSwibSJdLHc6W3RoaXMuZGF5c0luV2VlaygpLHRoaXMuZGF5c0luWWVhcigtMSksImQiXSxkOlsxLHRoaXMuZGF5c0luWWVhcigtMSksImQiXX1bbl0sYT1yPDA/LTE6MTtlPXRoaXMuX2FkZCh0LHIqaVswXSthKmlbMV0saVsyXSl9cmV0dXJuIHQuZGF0ZShlWzBdLGVbMV0sZVsyXSl9LHNldDpmdW5jdGlvbih0LGUscil7dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7dmFyIG49InkiPT09cj9lOnQueWVhcigpLGk9Im0iPT09cj9lOnQubW9udGgoKSxhPSJkIj09PXI/ZTp0LmRheSgpO3JldHVybiJ5IiE9PXImJiJtIiE9PXJ8fChhPU1hdGgubWluKGEsdGhpcy5kYXlzSW5Nb250aChuLGkpKSksdC5kYXRlKG4saSxhKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dGhpcy5fdmFsaWRhdGVMZXZlbCsrO3ZhciBuPXRoaXMuaGFzWWVhclplcm98fDAhPT10O2lmKG4pe3ZhciBpPXRoaXMubmV3RGF0ZSh0LGUsdGhpcy5taW5EYXkpO249ZT49dGhpcy5taW5Nb250aCYmZS10aGlzLm1pbk1vbnRoPHRoaXMubW9udGhzSW5ZZWFyKGkpJiZyPj10aGlzLm1pbkRheSYmci10aGlzLm1pbkRheTx0aGlzLmRheXNJbk1vbnRoKGkpfXJldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sbn0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuIGMuaW5zdGFuY2UoKS5mcm9tSkQodGhpcy50b0pEKG4pKS50b0pTRGF0ZSgpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZyb21KRChjLmluc3RhbmNlKCkuZnJvbUpTRGF0ZSh0KS50b0pEKCkpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsbil7aWYodC55ZWFyKXtpZigwPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmdGhpcy5uYW1lIT09dC5jYWxlbmRhcigpLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpLnJlcGxhY2UoL1x7MVx9Lyx0LmNhbGVuZGFyKCkubG9jYWwubmFtZSk7cmV0dXJuIHR9dHJ5e2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKywxPT09dGhpcy5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuaXNWYWxpZCh0LGUscikpdGhyb3cgbi5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0saX1jYXRjaCh0KXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sdH19fSksbC5wcm90b3R5cGU9bmV3IHMsbihsLnByb3RvdHlwZSx7bmFtZToiR3JlZ29yaWFuIixqZEVwb2NoOjE3MjE0MjUuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJHcmVnb3JpYW4iLGVwb2NoczpbIkJDRSIsIkNFIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoibW0vZGQveXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWRZZWFyfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTAmJih0JTEwMCE9MHx8dCU0MDA9PTApfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7dD1uLnllYXIoKSxlPW4ubW9udGgoKSxyPW4uZGF5KCksdDwwJiZ0KyssZTwzJiYoZSs9MTIsdC0tKTt2YXIgaT1NYXRoLmZsb29yKHQvMTAwKSxhPTItaStNYXRoLmZsb29yKGkvNCk7cmV0dXJuIE1hdGguZmxvb3IoMzY1LjI1Kih0KzQ3MTYpKStNYXRoLmZsb29yKDMwLjYwMDEqKGUrMSkpK3IrYS0xNTI0LjV9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQrLjUpLHI9TWF0aC5mbG9vcigoZS0xODY3MjE2LjI1KS8zNjUyNC4yNSksbj0ocj1lKzErci1NYXRoLmZsb29yKHIvNCkpKzE1MjQsaT1NYXRoLmZsb29yKChuLTEyMi4xKS8zNjUuMjUpLGE9TWF0aC5mbG9vcigzNjUuMjUqaSksbz1NYXRoLmZsb29yKChuLWEpLzMwLjYwMDEpLHM9bi1hLU1hdGguZmxvb3IoMzAuNjAwMSpvKSxsPW8tKG8+MTMuNT8xMzoxKSxjPWktKGw+Mi41PzQ3MTY6NDcxNSk7cmV0dXJuIGM8PTAmJmMtLSx0aGlzLm5ld0RhdGUoYyxsLHMpfSx0b0pTRGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSxpPW5ldyBEYXRlKG4ueWVhcigpLG4ubW9udGgoKS0xLG4uZGF5KCkpO3JldHVybiBpLnNldEhvdXJzKDApLGkuc2V0TWludXRlcygwKSxpLnNldFNlY29uZHMoMCksaS5zZXRNaWxsaXNlY29uZHMoMCksaS5zZXRIb3VycyhpLmdldEhvdXJzKCk+MTI/aS5nZXRIb3VycygpKzI6MCksaX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5uZXdEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCkrMSx0LmdldERhdGUoKSl9fSk7dmFyIGM9ZS5leHBvcnRzPW5ldyBpO2MuY2RhdGU9YSxjLmJhc2VDYWxlbmRhcj1zLGMuY2FsZW5kYXJzLmdyZWdvcmlhbj1sfSx7Im9iamVjdC1hc3NpZ24iOjQ3M31dLDU5NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIm9iamVjdC1hc3NpZ24iKSxpPXQoIi4vbWFpbiIpO24oaS5yZWdpb25hbE9wdGlvbnNbIiJdLHtpbnZhbGlkQXJndW1lbnRzOiJJbnZhbGlkIGFyZ3VtZW50cyIsaW52YWxpZEZvcm1hdDoiQ2Fubm90IGZvcm1hdCBhIGRhdGUgZnJvbSBhbm90aGVyIGNhbGVuZGFyIixtaXNzaW5nTnVtYmVyQXQ6Ik1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uIHswfSIsdW5rbm93bk5hbWVBdDoiVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uIHswfSIsdW5leHBlY3RlZExpdGVyYWxBdDoiVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIHswfSIsdW5leHBlY3RlZFRleHQ6IkFkZGl0aW9uYWwgdGV4dCBmb3VuZCBhdCBlbmQifSksaS5sb2NhbD1pLnJlZ2lvbmFsT3B0aW9uc1siIl0sbihpLmNkYXRlLnByb3RvdHlwZSx7Zm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKGU9dCx0PSIiKSx0aGlzLl9jYWxlbmRhci5mb3JtYXREYXRlKHR8fCIiLHRoaXMsZSl9fSksbihpLmJhc2VDYWxlbmRhci5wcm90b3R5cGUse1VOSVhfRVBPQ0g6aS5pbnN0YW5jZSgpLm5ld0RhdGUoMTk3MCwxLDEpLnRvSkQoKSxTRUNTX1BFUl9EQVk6ODY0MDAsVElDS1NfRVBPQ0g6aS5pbnN0YW5jZSgpLmpkRXBvY2gsVElDS1NfUEVSX0RBWTo4NjRlOSxBVE9NOiJ5eXl5LW1tLWRkIixDT09LSUU6IkQsIGRkIE0geXl5eSIsRlVMTDoiREQsIE1NIGQsIHl5eXkiLElTT184NjAxOiJ5eXl5LW1tLWRkIixKVUxJQU46IkoiLFJGQ184MjI6IkQsIGQgTSB5eSIsUkZDXzg1MDoiREQsIGRkLU0teXkiLFJGQ18xMDM2OiJELCBkIE0geXkiLFJGQ18xMTIzOiJELCBkIE0geXl5eSIsUkZDXzI4MjI6IkQsIGQgTSB5eXl5IixSU1M6IkQsIGQgTSB5eSIsVElDS1M6IiEiLFRJTUVTVEFNUDoiQCIsVzNDOiJ5eXl5LW1tLWRkIixmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQmJihyPWUsZT10LHQ9IiIpLCFlKXJldHVybiIiO2lmKGUuY2FsZW5kYXIoKSE9PXRoaXMpdGhyb3cgaS5sb2NhbC5pbnZhbGlkRm9ybWF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZEZvcm1hdDt0PXR8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDtmb3IodmFyIG4sYSxvLHMsbD0ocj1yfHx7fSkuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LGM9ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyx1PXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxoPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCxmPXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLHA9KHIuY2FsY3VsYXRlV2Vla3x8dGhpcy5sb2NhbC5jYWxjdWxhdGVXZWVrLGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7dytuPHQubGVuZ3RoJiZ0LmNoYXJBdCh3K24pPT09ZTspbisrO3JldHVybiB3Kz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0pLGQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9IiIrZTtpZihwKHQsbikpZm9yKDtpLmxlbmd0aDxyOylpPSIwIitpO3JldHVybiBpfSxnPXRoaXMsbT1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdT91LmNhbGwoZyx0LHAoIm0iKSk6eChkKCJtIix0Lm1vbnRoKCksMikpfSx2PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ImZ1bmN0aW9uIj09dHlwZW9mIGY/Zi5jYWxsKGcsdCk6Zlt0Lm1vbnRoKCktZy5taW5Nb250aF06ImZ1bmN0aW9uIj09dHlwZW9mIGg/aC5jYWxsKGcsdCk6aFt0Lm1vbnRoKCktZy5taW5Nb250aF19LHk9dGhpcy5sb2NhbC5kaWdpdHMseD1mdW5jdGlvbih0KXtyZXR1cm4gci5sb2NhbE51bWJlcnMmJnk/eSh0KTp0fSxiPSIiLF89ITEsdz0wO3c8dC5sZW5ndGg7dysrKWlmKF8pIiciIT09dC5jaGFyQXQodyl8fHAoIiciKT9iKz10LmNoYXJBdCh3KTpfPSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KHcpKXtjYXNlImQiOmIrPXgoZCgiZCIsZS5kYXkoKSwyKSk7YnJlYWs7Y2FzZSJEIjpiKz0obj0iRCIsYT1lLmRheU9mV2VlaygpLG89bCxzPWMscChuKT9zW2FdOm9bYV0pO2JyZWFrO2Nhc2UibyI6Yis9ZCgibyIsZS5kYXlPZlllYXIoKSwzKTticmVhaztjYXNlInciOmIrPWQoInciLGUud2Vla09mWWVhcigpLDIpO2JyZWFrO2Nhc2UibSI6Yis9bShlKTticmVhaztjYXNlIk0iOmIrPXYoZSxwKCJNIikpO2JyZWFrO2Nhc2UieSI6Yis9cCgieSIsMik/ZS55ZWFyKCk6KGUueWVhcigpJTEwMDwxMD8iMCI6IiIpK2UueWVhcigpJTEwMDticmVhaztjYXNlIlkiOnAoIlkiLDIpLGIrPWUuZm9ybWF0WWVhcigpO2JyZWFrO2Nhc2UiSiI6Yis9ZS50b0pEKCk7YnJlYWs7Y2FzZSJAIjpiKz0oZS50b0pEKCktdGhpcy5VTklYX0VQT0NIKSp0aGlzLlNFQ1NfUEVSX0RBWTticmVhaztjYXNlIiEiOmIrPShlLnRvSkQoKS10aGlzLlRJQ0tTX0VQT0NIKSp0aGlzLlRJQ0tTX1BFUl9EQVk7YnJlYWs7Y2FzZSInIjpwKCInIik/Yis9IiciOl89ITA7YnJlYWs7ZGVmYXVsdDpiKz10LmNoYXJBdCh3KX1yZXR1cm4gYn0scGFyc2VEYXRlOmZ1bmN0aW9uKHQsZSxyKXtpZihudWxsPT1lKXRocm93IGkubG9jYWwuaW52YWxpZEFyZ3VtZW50c3x8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRBcmd1bWVudHM7aWYoIiI9PT0oZT0ib2JqZWN0Ij09dHlwZW9mIGU/ZS50b1N0cmluZygpOmUrIiIpKXJldHVybiBudWxsO3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0O3ZhciBuPShyPXJ8fHt9KS5zaG9ydFllYXJDdXRvZmZ8fHRoaXMuc2hvcnRZZWFyQ3V0b2ZmO249InN0cmluZyIhPXR5cGVvZiBuP246dGhpcy50b2RheSgpLnllYXIoKSUxMDArcGFyc2VJbnQobiwxMCk7Zm9yKHZhciBhPXIuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LG89ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyxzPXIucGFyc2VNb250aHx8dGhpcy5sb2NhbC5wYXJzZU1vbnRoLGw9ci5tb250aE51bWJlcnN8fHRoaXMubG9jYWwubW9udGhOdW1iZXJzLGM9ci5tb250aE5hbWVzU2hvcnR8fHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0LHU9ci5tb250aE5hbWVzfHx0aGlzLmxvY2FsLm1vbnRoTmFtZXMsaD0tMSxmPS0xLHA9LTEsZD0tMSxnPS0xLG09ITEsdj0hMSx5PWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7QStuPHQubGVuZ3RoJiZ0LmNoYXJBdChBK24pPT09ZTspbisrO3JldHVybiBBKz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0seD1mdW5jdGlvbih0LHIpe3ZhciBuPXkodCxyKSxhPVsyLDMsbj80OjIsbj80OjIsMTAsMTEsMjBdWyJveVlKQCEiLmluZGV4T2YodCkrMV0sbz1uZXcgUmVnRXhwKCJeLT9cXGR7MSwiK2ErIn0iKSxzPWUuc3Vic3RyaW5nKE0pLm1hdGNoKG8pO2lmKCFzKXRocm93KGkubG9jYWwubWlzc2luZ051bWJlckF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0ubWlzc2luZ051bWJlckF0KS5yZXBsYWNlKC9cezBcfS8sTSk7cmV0dXJuIE0rPXNbMF0ubGVuZ3RoLHBhcnNlSW50KHNbMF0sMTApfSxiPXRoaXMsXz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKXt5KCJtIik7dmFyIHQ9bC5jYWxsKGIsZS5zdWJzdHJpbmcoTSkpO3JldHVybiBNKz10Lmxlbmd0aCx0fXJldHVybiB4KCJtIil9LHc9ZnVuY3Rpb24odCxyLG4sYSl7Zm9yKHZhciBvPXkodCxhKT9uOnIscz0wO3M8by5sZW5ndGg7cysrKWlmKGUuc3Vic3RyKE0sb1tzXS5sZW5ndGgpLnRvTG93ZXJDYXNlKCk9PT1vW3NdLnRvTG93ZXJDYXNlKCkpcmV0dXJuIE0rPW9bc10ubGVuZ3RoLHMrYi5taW5Nb250aDt0aHJvdyhpLmxvY2FsLnVua25vd25OYW1lQXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmtub3duTmFtZUF0KS5yZXBsYWNlKC9cezBcfS8sTSl9LFQ9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdSl7dmFyIHQ9eSgiTSIpP3UuY2FsbChiLGUuc3Vic3RyaW5nKE0pKTpjLmNhbGwoYixlLnN1YnN0cmluZyhNKSk7cmV0dXJuIE0rPXQubGVuZ3RoLHR9cmV0dXJuIHcoIk0iLGMsdSl9LGs9ZnVuY3Rpb24oKXtpZihlLmNoYXJBdChNKSE9PXQuY2hhckF0KEEpKXRocm93KGkubG9jYWwudW5leHBlY3RlZExpdGVyYWxBdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLnVuZXhwZWN0ZWRMaXRlcmFsQXQpLnJlcGxhY2UoL1x7MFx9LyxNKTtNKyt9LE09MCxBPTA7QTx0Lmxlbmd0aDtBKyspaWYodikiJyIhPT10LmNoYXJBdChBKXx8eSgiJyIpP2soKTp2PSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KEEpKXtjYXNlImQiOmQ9eCgiZCIpO2JyZWFrO2Nhc2UiRCI6dygiRCIsYSxvKTticmVhaztjYXNlIm8iOmc9eCgibyIpO2JyZWFrO2Nhc2UidyI6eCgidyIpO2JyZWFrO2Nhc2UibSI6cD1fKCk7YnJlYWs7Y2FzZSJNIjpwPVQoKTticmVhaztjYXNlInkiOnZhciBTPUE7bT0heSgieSIsMiksQT1TLGY9eCgieSIsMik7YnJlYWs7Y2FzZSJZIjpmPXgoIlkiLDIpO2JyZWFrO2Nhc2UiSiI6aD14KCJKIikrLjUsIi4iPT09ZS5jaGFyQXQoTSkmJihNKysseCgiSiIpKTticmVhaztjYXNlIkAiOmg9eCgiQCIpL3RoaXMuU0VDU19QRVJfREFZK3RoaXMuVU5JWF9FUE9DSDticmVhaztjYXNlIiEiOmg9eCgiISIpL3RoaXMuVElDS1NfUEVSX0RBWSt0aGlzLlRJQ0tTX0VQT0NIO2JyZWFrO2Nhc2UiKiI6TT1lLmxlbmd0aDticmVhaztjYXNlIiciOnkoIiciKT9rKCk6dj0hMDticmVhaztkZWZhdWx0OmsoKX1pZihNPGUubGVuZ3RoKXRocm93IGkubG9jYWwudW5leHBlY3RlZFRleHR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkVGV4dDtpZigtMT09PWY/Zj10aGlzLnRvZGF5KCkueWVhcigpOmY8MTAwJiZtJiYoZis9LTE9PT1uPzE5MDA6dGhpcy50b2RheSgpLnllYXIoKS10aGlzLnRvZGF5KCkueWVhcigpJTEwMC0oZjw9bj8wOjEwMCkpLCJzdHJpbmciPT10eXBlb2YgcCYmKHA9cy5jYWxsKHRoaXMsZixwKSksZz4tMSl7cD0xLGQ9Zztmb3IodmFyIEU9dGhpcy5kYXlzSW5Nb250aChmLHApO2Q+RTtFPXRoaXMuZGF5c0luTW9udGgoZixwKSlwKyssZC09RX1yZXR1cm4gaD4tMT90aGlzLmZyb21KRChoKTp0aGlzLm5ld0RhdGUoZixwLGQpfSxkZXRlcm1pbmVEYXRlOmZ1bmN0aW9uKHQsZSxyLG4saSl7ciYmIm9iamVjdCIhPXR5cGVvZiByJiYoaT1uLG49cixyPW51bGwpLCJzdHJpbmciIT10eXBlb2YgbiYmKGk9bixuPSIiKTt2YXIgYT10aGlzO3JldHVybiBlPWU/ZS5uZXdEYXRlKCk6bnVsbCx0PW51bGw9PXQ/ZToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBhLnBhcnNlRGF0ZShuLHQsaSl9Y2F0Y2godCl7fWZvcih2YXIgZT0oKHQ9dC50b0xvd2VyQ2FzZSgpKS5tYXRjaCgvXmMvKSYmcj9yLm5ld0RhdGUoKTpudWxsKXx8YS50b2RheSgpLG89LyhbKy1dP1swLTldKylccyooZHx3fG18eSk/L2cscz1vLmV4ZWModCk7czspZS5hZGQocGFyc2VJbnQoc1sxXSwxMCksc1syXXx8ImQiKSxzPW8uZXhlYyh0KTtyZXR1cm4gZX0odCk6Im51bWJlciI9PXR5cGVvZiB0P2lzTmFOKHQpfHx0PT09MS8wfHx0PT09LTEvMD9lOmEudG9kYXkoKS5hZGQodCwiZCIpOmEubmV3RGF0ZSh0KX19KX0seyIuL21haW4iOjU5Mywib2JqZWN0LWFzc2lnbiI6NDczfV0sNTk1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImN3aXNlLWNvbXBpbGVyIikoe2FyZ3M6WyJhcnJheSIse29mZnNldDpbMV0sYXJyYXk6MH0sInNjYWxhciIsInNjYWxhciIsImluZGV4Il0scHJlOntib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie1xuICAgICAgICB2YXIgX2lubGluZV8xX2RhID0gX2lubGluZV8xX2FyZzBfIC0gX2lubGluZV8xX2FyZzNfXG4gICAgICAgIHZhciBfaW5saW5lXzFfZGIgPSBfaW5saW5lXzFfYXJnMV8gLSBfaW5saW5lXzFfYXJnM19cbiAgICAgICAgaWYoKF9pbmxpbmVfMV9kYSA+PSAwKSAhPT0gKF9pbmxpbmVfMV9kYiA+PSAwKSkge1xuICAgICAgICAgIF9pbmxpbmVfMV9hcmcyXy5wdXNoKF9pbmxpbmVfMV9hcmc0X1swXSArIDAuNSArIDAuNSAqIChfaW5saW5lXzFfZGEgKyBfaW5saW5lXzFfZGIpIC8gKF9pbmxpbmVfMV9kYSAtIF9pbmxpbmVfMV9kYikpXG4gICAgICAgIH1cbiAgICAgIH0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6Il9pbmxpbmVfMV9hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOlsiX2lubGluZV8xX2RhIiwiX2lubGluZV8xX2RiIl19LGZ1bmNOYW1lOiJ6ZXJvQ3Jvc3NpbmdzIn0pfSx7ImN3aXNlLWNvbXBpbGVyIjoxNTF9XSw1OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIGU9K2V8fDAsbih0LmhpKHQuc2hhcGVbMF0tMSkscixlKSxyfTt2YXIgbj10KCIuL2xpYi96Yy1jb3JlIil9LHsiLi9saWIvemMtY29yZSI6NTk1fV0sNTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1be3BhdGg6IiIsYmFja29mZjowfSx7cGF0aDoiTS0yLjQsLTNWM0wwLjYsMFoiLGJhY2tvZmY6LjZ9LHtwYXRoOiJNLTMuNywtMi41VjIuNUwxLjMsMFoiLGJhY2tvZmY6MS4zfSx7cGF0aDoiTS00LjQ1LC0zTC0xLjY1LC0wLjJWMC4yTC00LjQ1LDNMMS41NSwwWiIsYmFja29mZjoxLjU1fSx7cGF0aDoiTS0yLjIsLTIuMkwtMC4yLC0wLjJWMC4yTC0yLjIsMi4yTC0xLjQsM0wxLjYsMEwtMS40LC0zWiIsYmFja29mZjoxLjZ9LHtwYXRoOiJNLTQuNCwtMi4xTC0wLjYsLTAuMlYwLjJMLTQuNCwyLjFMLTQsM0wyLDBMLTQsLTNaIixiYWNrb2ZmOjJ9LHtwYXRoOiJNMiwwQTIsMiAwIDEsMSAwLC0yQTIsMiAwIDAsMSAyLDBaIixiYWNrb2ZmOjAsbm9Sb3RhdGU6ITB9LHtwYXRoOiJNMiwyVi0ySC0yVjJaIixiYWNrb2ZmOjAsbm9Sb3RhdGU6ITB9XX0se31dLDU5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2Fycm93X3BhdGhzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTt0KCIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyIpO2UuZXhwb3J0cz1vKCJhbm5vdGF0aW9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHRleHRhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxmb250Omkoe2VkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyIsY29sb3JFZGl0VHlwZToiYXJyYXlkcmF3In0pLHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiY2VudGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0sdmFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJtaWRkbGUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcnBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHNob3dhcnJvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxhcnJvd2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sc3RhcnRhcnJvd2hlYWQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDpuLmxlbmd0aCxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93c2lkZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiZW5kIiwic3RhcnQiXSxleHRyYXM6WyJub25lIl0sZGZsdDoiZW5kIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3dzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMyxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhcnRhcnJvd3NpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxhcnJvd3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhcnRzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXg6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXk6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6InBpeGVsIix2YWx1ZXM6WyJwaXhlbCIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSxheXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoicGl4ZWwiLHZhbHVlczpbInBpeGVsIixhLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixhLmlkUmVnZXgueC50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHg6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHhzaGlmdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxjbGlja3Rvc2hvdzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwib25vZmYiLCJvbm91dCJdLGRmbHQ6ITEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhjbGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXJyYXlkcmF3In0seWNsaWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGhvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZm9udDppKHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLGVkaXRUeXBlOiJhcnJheWRyYXcifSxjYXB0dXJlZXZlbnRzOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOntyZWY6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifX19KX0seyIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyI6NzE4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjgwNSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4MjcsIi4vYXJyb3dfcGF0aHMiOjU5N31dLDU5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuL2RyYXciKS5kcmF3O2Z1bmN0aW9uIG8odCl7dmFyIGU9dC5fZnVsbExheW91dDtuLmZpbHRlclZpc2libGUoZS5hbm5vdGF0aW9ucykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9aS5nZXRGcm9tSWQodCxlLnhyZWYpLG49aS5nZXRGcm9tSWQodCxlLnlyZWYpLGE9aS5nZXRSZWZUeXBlKGUueHJlZiksbz1pLmdldFJlZlR5cGUoZS55cmVmKTtlLl9leHRyZW1lcz17fSwicmFuZ2UiPT09YSYmcyhlLHIpLCJyYW5nZSI9PT1vJiZzKGUsbil9KSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG49ZS5faWQsYT1uLmNoYXJBdCgwKSxvPXRbYV0scz10WyJhIithXSxsPXRbYSsicmVmIl0sYz10WyJhIithKyJyZWYiXSx1PXRbIl8iK2ErInBhZHBsdXMiXSxoPXRbIl8iK2ErInBhZG1pbnVzIl0sZj17eDoxLHk6LTF9W2FdKnRbYSsic2hpZnQiXSxwPTMqdC5hcnJvd3NpemUqdC5hcnJvd3dpZHRofHwwLGQ9cCtmLGc9cC1mLG09Myp0LnN0YXJ0YXJyb3dzaXplKnQuYXJyb3d3aWR0aHx8MCx2PW0rZix5PW0tZjtpZihjPT09bCl7dmFyIHg9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpkLHBwYWRtaW51czpnfSksYj1pLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhzKV0se3BwYWRwbHVzOk1hdGgubWF4KHUsdikscHBhZG1pbnVzOk1hdGgubWF4KGgseSl9KTtyPXttaW46W3gubWluWzBdLGIubWluWzBdXSxtYXg6W3gubWF4WzBdLGIubWF4WzBdXX19ZWxzZSB2PXM/ditzOnYseT1zP3ktczp5LHI9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpNYXRoLm1heCh1LGQsdikscHBhZG1pbnVzOk1hdGgubWF4KGgsZyx5KX0pO3QuX2V4dHJlbWVzW25dPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYobi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKXJldHVybiBuLnN5bmNPckFzeW5jKFthLG9dLHQpfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi9kcmF3Ijo2MDR9XSw2MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yO2Z1bmN0aW9uIG8odCxlKXt2YXIgcixuLGksYSxvLGwsYyx1PXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsaD1bXSxmPVtdLHA9W10sZD0oZXx8W10pLmxlbmd0aDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWlmKGE9KGk9dVtyXSkuY2xpY2t0b3Nob3cpe2ZvcihuPTA7bjxkO24rKylpZihsPShvPWVbbl0pLnhheGlzLGM9by55YXhpcyxsLl9pZD09PWkueHJlZiYmYy5faWQ9PT1pLnlyZWYmJmwuZDJyKG8ueCk9PT1zKGkuX3hjbGljayxsKSYmYy5kMnIoby55KT09PXMoaS5feWNsaWNrLGMpKXsoaS52aXNpYmxlPyJvbm91dCI9PT1hP2Y6cDpoKS5wdXNoKHIpO2JyZWFrfW49PT1kJiZpLnZpc2libGUmJiJvbm91dCI9PT1hJiZmLnB1c2gocil9cmV0dXJue29uOmgsb2ZmOmYsZXhwbGljaXRPZmY6cH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiJsb2ciPT09ZS50eXBlP2UubDJyKHQpOmUuZDJyKHQpfWUuZXhwb3J0cz17aGFzQ2xpY2tUb1Nob3c6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHQsZSk7cmV0dXJuIHIub24ubGVuZ3RoPjB8fHIuZXhwbGljaXRPZmYubGVuZ3RoPjB9LG9uQ2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcixzLGw9byh0LGUpLGM9bC5vbix1PWwub2ZmLmNvbmNhdChsLmV4cGxpY2l0T2ZmKSxoPXt9LGY9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucztpZighYy5sZW5ndGgmJiF1Lmxlbmd0aClyZXR1cm47Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKykocz1hKHQubGF5b3V0LCJhbm5vdGF0aW9ucyIsZltjW3JdXSkpLm1vZGlmeUl0ZW0oInZpc2libGUiLCEwKSxuLmV4dGVuZEZsYXQoaCxzLmdldFVwZGF0ZU9iaigpKTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKShzPWEodC5sYXlvdXQsImFubm90YXRpb25zIixmW3Vbcl1dKSkubW9kaWZ5SXRlbSgidmlzaWJsZSIsITEpLG4uZXh0ZW5kRmxhdChoLHMuZ2V0VXBkYXRlT2JqKCkpO3JldHVybiBpLmNhbGwoInVwZGF0ZSIsdCx7fSxoKX19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODgsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODJ9XSw2MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXthKCJvcGFjaXR5Iik7dmFyIG89YSgiYmdjb2xvciIpLHM9YSgiYm9yZGVyY29sb3IiKSxsPWkub3BhY2l0eShzKTthKCJib3JkZXJwYWQiKTt2YXIgYz1hKCJib3JkZXJ3aWR0aCIpLHU9YSgic2hvd2Fycm93Iik7aWYoYSgidGV4dCIsdT8iICI6ci5fZGZsdFRpdGxlLmFubm90YXRpb24pLGEoInRleHRhbmdsZSIpLG4uY29lcmNlRm9udChhLCJmb250IixyLmZvbnQpLGEoIndpZHRoIiksYSgiYWxpZ24iKSxhKCJoZWlnaHQiKSYmYSgidmFsaWduIiksdSl7dmFyIGgsZixwPWEoImFycm93c2lkZSIpOy0xIT09cC5pbmRleE9mKCJlbmQiKSYmKGg9YSgiYXJyb3doZWFkIiksZj1hKCJhcnJvd3NpemUiKSksLTEhPT1wLmluZGV4T2YoInN0YXJ0IikmJihhKCJzdGFydGFycm93aGVhZCIsaCksYSgic3RhcnRhcnJvd3NpemUiLGYpKSxhKCJhcnJvd2NvbG9yIixsP2UuYm9yZGVyY29sb3I6aS5kZWZhdWx0TGluZSksYSgiYXJyb3d3aWR0aCIsMioobCYmY3x8MSkpLGEoInN0YW5kb2ZmIiksYSgic3RhcnRzdGFuZG9mZiIpfXZhciBkPWEoImhvdmVydGV4dCIpLGc9ci5ob3ZlcmxhYmVsfHx7fTtpZihkKXt2YXIgbT1hKCJob3ZlcmxhYmVsLmJnY29sb3IiLGcuYmdjb2xvcnx8KGkub3BhY2l0eShvKT9pLnJnYihvKTppLmRlZmF1bHRMaW5lKSksdj1hKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixnLmJvcmRlcmNvbG9yfHxpLmNvbnRyYXN0KG0pKTtuLmNvZXJjZUZvbnQoYSwiaG92ZXJsYWJlbC5mb250Iix7ZmFtaWx5OmcuZm9udC5mYW1pbHksc2l6ZTpnLmZvbnQuc2l6ZSxjb2xvcjpnLmZvbnQuY29sb3J8fHZ9KX1hKCJjYXB0dXJlZXZlbnRzIiwhIWQpfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vY29sb3IiOjYxNX1dLDYwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtlPWV8fHt9O3ZhciBvPSJsb2ciPT09ciYmImxpbmVhciI9PT1lLnR5cGUscz0ibGluZWFyIj09PXImJiJsb2ciPT09ZS50eXBlO2lmKG98fHMpZm9yKHZhciBsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGg9ZS5faWQuY2hhckF0KDApLGY9MDtmPHUubGVuZ3RoO2YrKylsPXVbZl0sYz0iYW5ub3RhdGlvbnNbIitmKyJdLiIsbFtoKyJyZWYiXT09PWUuX2lkJiZwKGgpLGxbImEiK2grInJlZiJdPT09ZS5faWQmJnAoImEiK2gpO2Z1bmN0aW9uIHAodCl7dmFyIHI9bFt0XSxzPW51bGw7cz1vP2kocixlLnJhbmdlKTpNYXRoLnBvdygxMCxyKSxuKHMpfHwocz1udWxsKSxhKGMrdCxzKX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjc3NiwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDYwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vY29tbW9uX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9dmFyIGw9YSgidmlzaWJsZSIpLGM9YSgiY2xpY2t0b3Nob3ciKTtpZihsfHxjKXtvKHQsZSxyLGEpO2Zvcih2YXIgdT1lLnNob3dhcnJvdyxoPVsieCIsInkiXSxmPVstMTAsLTMwXSxwPXtfZnVsbExheW91dDpyfSxkPTA7ZDwyO2QrKyl7dmFyIGc9aFtkXSxtPWkuY29lcmNlUmVmKHQsZSxwLGcsIiIsInBhcGVyIik7aWYoInBhcGVyIiE9PW0paS5nZXRGcm9tSWQocCxtKS5fYW5uSW5kaWNlcy5wdXNoKGUuX2luZGV4KTtpZihpLmNvZXJjZVBvc2l0aW9uKGUscCxhLG0sZywuNSksdSl7dmFyIHY9ImEiK2cseT1pLmNvZXJjZVJlZih0LGUscCx2LCJwaXhlbCIsWyJwaXhlbCIsInBhcGVyIl0pOyJwaXhlbCIhPT15JiZ5IT09bSYmKHk9ZVt2XT0icGl4ZWwiKTt2YXIgeD0icGl4ZWwiPT09eT9mW2RdOi40O2kuY29lcmNlUG9zaXRpb24oZSxwLGEseSx2LHgpfWEoZysiYW5jaG9yIiksYShnKyJzaGlmdCIpfWlmKG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLHUmJm4ubm9uZU9yQWxsKHQsZSxbImF4IiwiYXkiXSksYyl7dmFyIGI9YSgieGNsaWNrIiksXz1hKCJ5Y2xpY2siKTtlLl94Y2xpY2s9dm9pZCAwPT09Yj9lLng6aS5jbGVhblBvc2l0aW9uKGIscCxlLnhyZWYpLGUuX3ljbGljaz12b2lkIDA9PT1fP2UueTppLmNsZWFuUG9zaXRpb24oXyxwLGUueXJlZil9fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToiYW5ub3RhdGlvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc5NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi9hdHRyaWJ1dGVzIjo1OTgsIi4vY29tbW9uX2RlZmF1bHRzIjo2MDF9XSw2MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vY29sb3IiKSxjPXQoIi4uL2RyYXdpbmciKSx1PXQoIi4uL2Z4IiksaD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxwPXQoIi4uL2RyYWdlbGVtZW50IiksZD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsZz10KCIuL2RyYXdfYXJyb3dfaGVhZCIpO2Z1bmN0aW9uIG0odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zW2VdfHx7fSxuPXMuZ2V0RnJvbUlkKHQsci54cmVmKSxpPXMuZ2V0RnJvbUlkKHQsci55cmVmKTtuJiZuLnNldFNjYWxlKCksaSYmaS5zZXRTY2FsZSgpLHkodCxyLGUsITEsbixpKX1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dmFyIGE9aVtyXSxvPWlbcisicmVmIl0sbD0tMSE9PXIuaW5kZXhPZigieSIpLGM9ImRvbWFpbiI9PT1zLmdldFJlZlR5cGUobyksdT1sP24uaDpuLnc7cmV0dXJuIHQ/Yz9hKyhsPy1lOmUpL3QuX2xlbmd0aDp0LnAycih0LnIycChhKStlKTphKyhsPy1lOmUpL3V9ZnVuY3Rpb24geSh0LGUscixhLG0seSl7dmFyIHgsYixfPXQuX2Z1bGxMYXlvdXQsdz10Ll9mdWxsTGF5b3V0Ll9zaXplLFQ9dC5fY29udGV4dC5lZGl0czthPyh4PSJhbm5vdGF0aW9uLSIrYSxiPWErIi5hbm5vdGF0aW9ucyIpOih4PSJhbm5vdGF0aW9uIixiPSJhbm5vdGF0aW9ucyIpO3ZhciBrPWQodC5sYXlvdXQsYixlKSxNPWsubW9kaWZ5QmFzZSxBPWsubW9kaWZ5SXRlbSxTPWsuZ2V0VXBkYXRlT2JqO18uX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK3grJ1tkYXRhLWluZGV4PSInK3IrJyJdJykucmVtb3ZlKCk7dmFyIEU9ImNsaXAiK18uX3VpZCsiX2FubiIrcjtpZihlLl9pbnB1dCYmITEhPT1lLnZpc2libGUpe3ZhciBDPXt4Ont9LHk6e319LEw9K2UudGV4dGFuZ2xlfHwwLFA9Xy5faW5mb2xheWVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoeCwhMCkuYXR0cigiZGF0YS1pbmRleCIsU3RyaW5nKHIpKS5zdHlsZSgib3BhY2l0eSIsZS5vcGFjaXR5KSxJPVAuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi10ZXh0LWciLCEwKSx6PVRbZS5zaG93YXJyb3c/ImFubm90YXRpb25UYWlsIjoiYW5ub3RhdGlvblBvc2l0aW9uIl0sTz1lLmNhcHR1cmVldmVudHN8fFQuYW5ub3RhdGlvblRleHR8fHosRD1JLmFwcGVuZCgiZyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsTz8iYWxsIjpudWxsKS5jYWxsKGYsInBvaW50ZXIiKS5vbigiY2xpY2siLChmdW5jdGlvbigpe3QuX2RyYWdnaW5nPSExLHQuZW1pdCgicGxvdGx5X2NsaWNrYW5ub3RhdGlvbiIsRyhuLmV2ZW50KSl9KSk7ZS5ob3ZlcnRleHQmJkQub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dmFyIHI9ZS5ob3ZlcmxhYmVsLG49ci5mb250LGk9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dS5sb25lSG92ZXIoe3gwOmkubGVmdC1hLmxlZnQseDE6aS5yaWdodC1hLmxlZnQseTooaS50b3AraS5ib3R0b20pLzItYS50b3AsdGV4dDplLmhvdmVydGV4dCxjb2xvcjpyLmJnY29sb3IsYm9yZGVyQ29sb3I6ci5ib3JkZXJjb2xvcixmb250RmFtaWx5Om4uZmFtaWx5LGZvbnRTaXplOm4uc2l6ZSxmb250Q29sb3I6bi5jb2xvcn0se2NvbnRhaW5lcjpfLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpfLl9wYXBlci5ub2RlKCksZ2Q6dH0pfSkpLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7dS5sb25lVW5ob3ZlcihfLl9ob3ZlcmxheWVyLm5vZGUoKSl9KSk7dmFyIFI9ZS5ib3JkZXJ3aWR0aCxGPWUuYm9yZGVycGFkLEI9UitGLE49RC5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJnIikuc3R5bGUoInN0cm9rZS13aWR0aCIsUisicHgiKS5jYWxsKGwuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwobC5maWxsLGUuYmdjb2xvciksaj1lLndpZHRofHxlLmhlaWdodCxVPV8uX3RvcGNsaXBzLnNlbGVjdEFsbCgiIyIrRSkuZGF0YShqP1swXTpbXSk7VS5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJhbm5jbGlwIiwhMCkuYXR0cigiaWQiLEUpLmFwcGVuZCgicmVjdCIpLFUuZXhpdCgpLnJlbW92ZSgpO3ZhciBWPWUuZm9udCxxPV8uX21ldGE/by50ZW1wbGF0ZVN0cmluZyhlLnRleHQsXy5fbWV0YSk6ZS50ZXh0LEg9RC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQiLCEwKS50ZXh0KHEpO1QuYW5ub3RhdGlvblRleHQ/SC5jYWxsKGgubWFrZUVkaXRhYmxlLHtkZWxlZ2F0ZTpELGdkOnR9KS5jYWxsKFkpLm9uKCJlZGl0IiwoZnVuY3Rpb24ocil7ZS50ZXh0PXIsdGhpcy5jYWxsKFkpLEEoInRleHQiLHIpLG0mJm0uYXV0b3JhbmdlJiZNKG0uX25hbWUrIi5hdXRvcmFuZ2UiLCEwKSx5JiZ5LmF1dG9yYW5nZSYmTSh5Ll9uYW1lKyIuYXV0b3JhbmdlIiwhMCksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsUygpKX0pKTpILmNhbGwoWSl9ZWxzZSBuLnNlbGVjdEFsbCgiIyIrRSkucmVtb3ZlKCk7ZnVuY3Rpb24gRyh0KXt2YXIgbj17aW5kZXg6cixhbm5vdGF0aW9uOmUuX2lucHV0LGZ1bGxBbm5vdGF0aW9uOmUsZXZlbnQ6dH07cmV0dXJuIGEmJihuLnN1YnBsb3RJZD1hKSxufWZ1bmN0aW9uIFkocil7cmV0dXJuIHIuY2FsbChjLmZvbnQsVikuYXR0cih7InRleHQtYW5jaG9yIjp7bGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifVtlLmFsaWduXXx8Im1pZGRsZSJ9KSxoLmNvbnZlcnRUb1RzcGFucyhyLHQsVykscn1mdW5jdGlvbiBXKCl7dmFyIHI9SC5zZWxlY3RBbGwoImEiKTsxPT09ci5zaXplKCkmJnIudGV4dCgpPT09SC50ZXh0KCkmJkQuaW5zZXJ0KCJhIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7InhsaW5rOnhsaW5rOmhyZWYiOnIuYXR0cigieGxpbms6aHJlZiIpLCJ4bGluazp4bGluazpzaG93IjpyLmF0dHIoInhsaW5rOnNob3ciKX0pLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIifSkubm9kZSgpLmFwcGVuZENoaWxkKE4ubm9kZSgpKTt2YXIgbj1ELnNlbGVjdCgiLmFubm90YXRpb24tdGV4dC1tYXRoLWdyb3VwIiksdT0hbi5lbXB0eSgpLGQ9Yy5iQm94KCh1P246SCkubm9kZSgpKSx4PWQud2lkdGgsYj1kLmhlaWdodCxrPWUud2lkdGh8fHgsTz1lLmhlaWdodHx8YixGPU1hdGgucm91bmQoaysyKkIpLFY9TWF0aC5yb3VuZChPKzIqQik7ZnVuY3Rpb24gcSh0LGUpe3JldHVybiJhdXRvIj09PWUmJihlPXQ8MS8zPyJsZWZ0Ijp0PjIvMz8icmlnaHQiOiJjZW50ZXIiKSx7Y2VudGVyOjAsbWlkZGxlOjAsbGVmdDouNSxib3R0b206LS41LHJpZ2h0Oi0uNSx0b3A6LjV9W2VdfWZvcih2YXIgWT0hMSxXPVsieCIsInkiXSxaPTA7WjxXLmxlbmd0aDtaKyspe3ZhciBYLEosSyxRLCQsdHQ9V1taXSxldD1lW3R0KyJyZWYiXXx8dHQscnQ9ZVsiYSIrdHQrInJlZiJdLG50PXt4Om0seTp5fVt0dF0saXQ9KEwrKCJ4Ij09PXR0PzA6LTkwKSkqTWF0aC5QSS8xODAsYXQ9RipNYXRoLmNvcyhpdCksb3Q9VipNYXRoLnNpbihpdCksc3Q9TWF0aC5hYnMoYXQpK01hdGguYWJzKG90KSxsdD1lW3R0KyJhbmNob3IiXSxjdD1lW3R0KyJzaGlmdCJdKigieCI9PT10dD8xOi0xKSx1dD1DW3R0XSxodD1zLmdldFJlZlR5cGUoZXQpO2lmKG50JiYiZG9tYWluIiE9PWh0KXt2YXIgZnQ9bnQucjJmcmFjdGlvbihlW3R0XSk7KGZ0PDB8fGZ0PjEpJiYocnQ9PT1ldD8oKGZ0PW50LnIyZnJhY3Rpb24oZVsiYSIrdHRdKSk8MHx8ZnQ+MSkmJihZPSEwKTpZPSEwKSxYPW50Ll9vZmZzZXQrbnQucjJwKGVbdHRdKSxRPS41fWVsc2V7dmFyIHB0PSJkb21haW4iPT09aHQ7IngiPT09dHQ/KEs9ZVt0dF0sWD1wdD9udC5fb2Zmc2V0K250Ll9sZW5ndGgqSzpYPXcubCt3LncqSyk6KEs9MS1lW3R0XSxYPXB0P250Ll9vZmZzZXQrbnQuX2xlbmd0aCpLOlg9dy50K3cuaCpLKSxRPWUuc2hvd2Fycm93Py41Okt9aWYoZS5zaG93YXJyb3cpe3V0LmhlYWQ9WDt2YXIgZHQ9ZVsiYSIrdHRdO2lmKCQ9YXQqcSguNSxlLnhhbmNob3IpLW90KnEoLjUsZS55YW5jaG9yKSxydD09PWV0KXt2YXIgZ3Q9cy5nZXRSZWZUeXBlKHJ0KTsiZG9tYWluIj09PWd0PygieSI9PT10dCYmKGR0PTEtZHQpLHV0LnRhaWw9bnQuX29mZnNldCtudC5fbGVuZ3RoKmR0KToicGFwZXIiPT09Z3Q/InkiPT09dHQ/KGR0PTEtZHQsdXQudGFpbD13LnQrdy5oKmR0KTp1dC50YWlsPXcubCt3LncqZHQ6dXQudGFpbD1udC5fb2Zmc2V0K250LnIycChkdCksSj0kfWVsc2UgdXQudGFpbD1YK2R0LEo9JCtkdDt1dC50ZXh0PXV0LnRhaWwrJDt2YXIgbXQ9X1sieCI9PT10dD8id2lkdGgiOiJoZWlnaHQiXTtpZigicGFwZXIiPT09ZXQmJih1dC5oZWFkPW8uY29uc3RyYWluKHV0LmhlYWQsMSxtdC0xKSksInBpeGVsIj09PXJ0KXt2YXIgdnQ9LU1hdGgubWF4KHV0LnRhaWwtMyx1dC50ZXh0KSx5dD1NYXRoLm1pbih1dC50YWlsKzMsdXQudGV4dCktbXQ7dnQ+MD8odXQudGFpbCs9dnQsdXQudGV4dCs9dnQpOnl0PjAmJih1dC50YWlsLT15dCx1dC50ZXh0LT15dCl9dXQudGFpbCs9Y3QsdXQuaGVhZCs9Y3R9ZWxzZSBKPSQ9c3QqcShRLGx0KSx1dC50ZXh0PVgrJDt1dC50ZXh0Kz1jdCwkKz1jdCxKKz1jdCxlWyJfIit0dCsicGFkcGx1cyJdPXN0LzIrSixlWyJfIit0dCsicGFkbWludXMiXT1zdC8yLUosZVsiXyIrdHQrInNpemUiXT1zdCxlWyJfIit0dCsic2hpZnQiXT0kfWlmKFkpRC5yZW1vdmUoKTtlbHNle3ZhciB4dD0wLGJ0PTA7aWYoImxlZnQiIT09ZS5hbGlnbiYmKHh0PShrLXgpKigiY2VudGVyIj09PWUuYWxpZ24/LjU6MSkpLCJ0b3AiIT09ZS52YWxpZ24mJihidD0oTy1iKSooIm1pZGRsZSI9PT1lLnZhbGlnbj8uNToxKSksdSluLnNlbGVjdCgic3ZnIikuYXR0cih7eDpCK3h0LTEseTpCK2J0fSkuY2FsbChjLnNldENsaXBVcmwsaj9FOm51bGwsdCk7ZWxzZXt2YXIgX3Q9QitidC1kLnRvcCx3dD1CK3h0LWQubGVmdDtILmNhbGwoaC5wb3NpdGlvblRleHQsd3QsX3QpLmNhbGwoYy5zZXRDbGlwVXJsLGo/RTpudWxsLHQpfVUuc2VsZWN0KCJyZWN0IikuY2FsbChjLnNldFJlY3QsQixCLGssTyksTi5jYWxsKGMuc2V0UmVjdCxSLzIsUi8yLEYtUixWLVIpLEQuY2FsbChjLnNldFRyYW5zbGF0ZSxNYXRoLnJvdW5kKEMueC50ZXh0LUYvMiksTWF0aC5yb3VuZChDLnkudGV4dC1WLzIpKSxJLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrTCsiLCIrQy54LnRleHQrIiwiK0MueS50ZXh0KyIpIn0pO3ZhciBUdCxrdD1mdW5jdGlvbihyLG4pe1Auc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1hcnJvdy1nIikucmVtb3ZlKCk7dmFyIHM9Qy54LmhlYWQsdT1DLnkuaGVhZCxoPUMueC50YWlsK3IsZj1DLnkudGFpbCtuLGQ9Qy54LnRleHQrcix4PUMueS50ZXh0K24sYj1vLnJvdGF0aW9uWFlNYXRyaXgoTCxkLHgpLF89by5hcHBseTJEVHJhbnNmb3JtKGIpLGs9by5hcHBseTJEVHJhbnNmb3JtMihiKSxFPStOLmF0dHIoIndpZHRoIiksej0rTi5hdHRyKCJoZWlnaHQiKSxPPWQtLjUqRSxSPU8rRSxGPXgtLjUqeixCPUYreixqPVtbTyxGLE8sQl0sW08sQixSLEJdLFtSLEIsUixGXSxbUixGLE8sRl1dLm1hcChrKTtpZighai5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReISFvLnNlZ21lbnRzSW50ZXJzZWN0KHMsdSxzKzFlNix1KzFlNixlWzBdLGVbMV0sZVsyXSxlWzNdKX0pLCExKSl7ai5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1vLnNlZ21lbnRzSW50ZXJzZWN0KGgsZixzLHUsdFswXSx0WzFdLHRbMl0sdFszXSk7ZSYmKGg9ZS54LGY9ZS55KX0pKTt2YXIgVT1lLmFycm93d2lkdGgsVj1lLmFycm93Y29sb3IscT1lLmFycm93c2lkZSxIPVAuYXBwZW5kKCJnIikuc3R5bGUoe29wYWNpdHk6bC5vcGFjaXR5KFYpfSkuY2xhc3NlZCgiYW5ub3RhdGlvbi1hcnJvdy1nIiwhMCksRz1ILmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIitoKyIsIitmKyJMIitzKyIsIit1KS5zdHlsZSgic3Ryb2tlLXdpZHRoIixVKyJweCIpLmNhbGwobC5zdHJva2UsbC5yZ2IoVikpO2lmKGcoRyxxLGUpLFQuYW5ub3RhdGlvblBvc2l0aW9uJiZHLm5vZGUoKS5wYXJlbnROb2RlJiYhYSl7dmFyIFk9cyxXPXU7aWYoZS5zdGFuZG9mZil7dmFyIFo9TWF0aC5zcXJ0KE1hdGgucG93KHMtaCwyKStNYXRoLnBvdyh1LWYsMikpO1krPWUuc3RhbmRvZmYqKGgtcykvWixXKz1lLnN0YW5kb2ZmKihmLXUpL1p9dmFyIFgsSixLPUguYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1hcnJvdyIsITApLmNsYXNzZWQoImFubmRyYWciLCEwKS5jbGFzc2VkKCJjdXJzb3ItbW92ZSIsITApLmF0dHIoe2Q6Ik0zLDNILTNWLTNIM1pNMCwwTCIrKGgtWSkrIiwiKyhmLVcpLHRyYW5zZm9ybToidHJhbnNsYXRlKCIrWSsiLCIrVysiKSJ9KS5zdHlsZSgic3Ryb2tlLXdpZHRoIixVKzYrInB4IikuY2FsbChsLnN0cm9rZSwicmdiYSgwLDAsMCwwKSIpLmNhbGwobC5maWxsLCJyZ2JhKDAsMCwwLDApIik7cC5pbml0KHtlbGVtZW50Oksubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoRCk7WD10LngsSj10LnksbSYmbS5hdXRvcmFuZ2UmJk0obS5fbmFtZSsiLmF1dG9yYW5nZSIsITApLHkmJnkuYXV0b3JhbmdlJiZNKHkuX25hbWUrIi5hdXRvcmFuZ2UiLCEwKX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49XyhYLEopLGk9blswXSt0LGE9blsxXStyO0QuY2FsbChjLnNldFRyYW5zbGF0ZSxpLGEpLEEoIngiLHYobSx0LCJ4Iix3LGUpKSxBKCJ5Iix2KHksciwieSIsdyxlKSksZS5heHJlZj09PWUueHJlZiYmQSgiYXgiLHYobSx0LCJheCIsdyxlKSksZS5heXJlZj09PWUueXJlZiYmQSgiYXkiLHYoeSxyLCJheSIsdyxlKSksSC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIiksSS5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK0wrIiwiK2krIiwiK2ErIikifSl9LGRvbmVGbjpmdW5jdGlvbigpe2kuY2FsbCgiX2d1aVJlbGF5b3V0Iix0LFMoKSk7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmpzLW5vdGVzLWJveC1wYW5lbCIpO2UmJmUucmVkcmF3KGUuc2VsZWN0ZWRPYmopfX0pfX19O2lmKGUuc2hvd2Fycm93JiZrdCgwLDApLHopcC5pbml0KHtlbGVtZW50OkQubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7VHQ9SS5hdHRyKCJ0cmFuc2Zvcm0iKX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49InBvaW50ZXIiO2lmKGUuc2hvd2Fycm93KWUuYXhyZWY9PT1lLnhyZWY/QSgiYXgiLHYobSx0LCJheCIsdyxlKSk6QSgiYXgiLGUuYXgrdCksZS5heXJlZj09PWUueXJlZj9BKCJheSIsdih5LHIsImF5Iix3LncsZSkpOkEoImF5IixlLmF5K3IpLGt0KHQscik7ZWxzZXtpZihhKXJldHVybjt2YXIgaSxvO2lmKG0paT12KG0sdCwieCIsdyxlKTtlbHNle3ZhciBzPWUuX3hzaXplL3cudyxsPWUueCsoZS5feHNoaWZ0LWUueHNoaWZ0KS93Lnctcy8yO2k9cC5hbGlnbihsK3Qvdy53LHMsMCwxLGUueGFuY2hvcil9aWYoeSlvPXYoeSxyLCJ5Iix3LGUpO2Vsc2V7dmFyIGM9ZS5feXNpemUvdy5oLHU9ZS55LShlLl95c2hpZnQrZS55c2hpZnQpL3cuaC1jLzI7bz1wLmFsaWduKHUtci93LmgsYywwLDEsZS55YW5jaG9yKX1BKCJ4IixpKSxBKCJ5IixvKSxtJiZ5fHwobj1wLmdldEN1cnNvcihtPy41OmkseT8uNTpvLGUueGFuY2hvcixlLnlhbmNob3IpKX1JLmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrdCsiLCIrcisiKSIrVHR9KSxmKEQsbil9LGNsaWNrRm46ZnVuY3Rpb24ocixuKXtlLmNhcHR1cmVldmVudHMmJnQuZW1pdCgicGxvdGx5X2NsaWNrYW5ub3RhdGlvbiIsRyhuKSl9LGRvbmVGbjpmdW5jdGlvbigpe2YoRCksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsUygpKTt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7ZSYmZS5yZWRyYXcoZS5zZWxlY3RlZE9iail9fSl9fX1lLmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbiIpLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKWUuYW5ub3RhdGlvbnNbcl0udmlzaWJsZSYmbSh0LHIpO3JldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LGRyYXdPbmU6bSxkcmF3UmF3Onl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3NzAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6Nzc0LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4NjIsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL2NvbG9yIjo2MTUsIi4uL2RyYWdlbGVtZW50Ijo2MzQsIi4uL2RyYXdpbmciOjYzNywiLi4vZngiOjY1NSwiLi9kcmF3X2Fycm93X2hlYWQiOjYwNSxkMzoxNjl9XSw2MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2NvbG9yIiksYT10KCIuL2Fycm93X3BhdGhzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzLGwsYyx1PXQubm9kZSgpLGg9YVtyLmFycm93aGVhZHx8MF0sZj1hW3Iuc3RhcnRhcnJvd2hlYWR8fDBdLHA9KHIuYXJyb3d3aWR0aHx8MSkqKHIuYXJyb3dzaXplfHwxKSxkPShyLmFycm93d2lkdGh8fDEpKihyLnN0YXJ0YXJyb3dzaXplfHwxKSxnPWUuaW5kZXhPZigic3RhcnQiKT49MCxtPWUuaW5kZXhPZigiZW5kIik+PTAsdj1oLmJhY2tvZmYqcCtyLnN0YW5kb2ZmLHk9Zi5iYWNrb2ZmKmQrci5zdGFydHN0YW5kb2ZmO2lmKCJsaW5lIj09PXUubm9kZU5hbWUpe289e3g6K3QuYXR0cigieDEiKSx5Oit0LmF0dHIoInkxIil9LHM9e3g6K3QuYXR0cigieDIiKSx5Oit0LmF0dHIoInkyIil9O3ZhciB4PW8ueC1zLngsYj1vLnktcy55O2lmKGM9KGw9TWF0aC5hdGFuMihiLHgpKStNYXRoLlBJLHYmJnkmJnYreT5NYXRoLnNxcnQoeCp4K2IqYikpcmV0dXJuIHZvaWQgUCgpO2lmKHYpe2lmKHYqdj54KngrYipiKXJldHVybiB2b2lkIFAoKTt2YXIgXz12Kk1hdGguY29zKGwpLHc9dipNYXRoLnNpbihsKTtzLngrPV8scy55Kz13LHQuYXR0cih7eDI6cy54LHkyOnMueX0pfWlmKHkpe2lmKHkqeT54KngrYipiKXJldHVybiB2b2lkIFAoKTt2YXIgVD15Kk1hdGguY29zKGwpLGs9eSpNYXRoLnNpbihsKTtvLngtPVQsby55LT1rLHQuYXR0cih7eDE6by54LHkxOm8ueX0pfX1lbHNlIGlmKCJwYXRoIj09PXUubm9kZU5hbWUpe3ZhciBNPXUuZ2V0VG90YWxMZW5ndGgoKSxBPSIiO2lmKE08dit5KXJldHVybiB2b2lkIFAoKTt2YXIgUz11LmdldFBvaW50QXRMZW5ndGgoMCksRT11LmdldFBvaW50QXRMZW5ndGgoLjEpO2w9TWF0aC5hdGFuMihTLnktRS55LFMueC1FLngpLG89dS5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWluKHksTSkpLEE9IjBweCwiK3krInB4LCI7dmFyIEM9dS5nZXRQb2ludEF0TGVuZ3RoKE0pLEw9dS5nZXRQb2ludEF0TGVuZ3RoKE0tLjEpO2M9TWF0aC5hdGFuMihDLnktTC55LEMueC1MLngpLHM9dS5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWF4KDAsTS12KSksQSs9TS0oQT95K3Y6dikrInB4LCIrTSsicHgiLHQuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLEEpfWZ1bmN0aW9uIFAoKXt0LnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMHB4LDEwMHB4Iil9ZnVuY3Rpb24gSShlLGEsbyxzKXtlLnBhdGgmJihlLm5vUm90YXRlJiYobz0wKSxuLnNlbGVjdCh1LnBhcmVudE5vZGUpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2NsYXNzOnQuYXR0cigiY2xhc3MiKSxkOmUucGF0aCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK2EueCsiLCIrYS55KyIpIisobz8icm90YXRlKCIrMTgwKm8vTWF0aC5QSSsiKSI6IiIpKyJzY2FsZSgiK3MrIikifSkuc3R5bGUoe2ZpbGw6aS5yZ2Ioci5hcnJvd2NvbG9yKSwic3Ryb2tlLXdpZHRoIjowfSkpfWcmJkkoZixvLGwsZCksbSYmSShoLHMsYyxwKX19LHsiLi4vY29sb3IiOjYxNSwiLi9hcnJvd19wYXRocyI6NTk3LGQzOjE2OX1dLDYwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RyYXciKSxpPXQoIi4vY2xpY2siKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiYW5ub3RhdGlvbnMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImFubm90YXRpb25zIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmUsZHJhd1JhdzpuLmRyYXdSYXcsaGFzQ2xpY2tUb1Nob3c6aS5oYXNDbGlja1RvU2hvdyxvbkNsaWNrOmkub25DbGljayxjb252ZXJ0Q29vcmRzOnQoIi4vY29udmVydF9jb29yZHMiKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyI6ODExLCIuL2F0dHJpYnV0ZXMiOjU5OCwiLi9jYWxjX2F1dG9yYW5nZSI6NTk5LCIuL2NsaWNrIjo2MDAsIi4vY29udmVydF9jb29yZHMiOjYwMiwiLi9kZWZhdWx0cyI6NjAzLCIuL2RyYXciOjYwNH1dLDYwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPWkoYSgiYW5ub3RhdGlvbiIse3Zpc2libGU6bi52aXNpYmxlLHg6e3ZhbFR5cGU6ImFueSJ9LHk6e3ZhbFR5cGU6ImFueSJ9LHo6e3ZhbFR5cGU6ImFueSJ9LGF4Ont2YWxUeXBlOiJudW1iZXIifSxheTp7dmFsVHlwZToibnVtYmVyIn0seGFuY2hvcjpuLnhhbmNob3IseHNoaWZ0Om4ueHNoaWZ0LHlhbmNob3I6bi55YW5jaG9yLHlzaGlmdDpuLnlzaGlmdCx0ZXh0Om4udGV4dCx0ZXh0YW5nbGU6bi50ZXh0YW5nbGUsZm9udDpuLmZvbnQsd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsb3BhY2l0eTpuLm9wYWNpdHksYWxpZ246bi5hbGlnbix2YWxpZ246bi52YWxpZ24sYmdjb2xvcjpuLmJnY29sb3IsYm9yZGVyY29sb3I6bi5ib3JkZXJjb2xvcixib3JkZXJwYWQ6bi5ib3JkZXJwYWQsYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aCxzaG93YXJyb3c6bi5zaG93YXJyb3csYXJyb3djb2xvcjpuLmFycm93Y29sb3IsYXJyb3doZWFkOm4uYXJyb3doZWFkLHN0YXJ0YXJyb3doZWFkOm4uc3RhcnRhcnJvd2hlYWQsYXJyb3dzaWRlOm4uYXJyb3dzaWRlLGFycm93c2l6ZTpuLmFycm93c2l6ZSxzdGFydGFycm93c2l6ZTpuLnN0YXJ0YXJyb3dzaXplLGFycm93d2lkdGg6bi5hcnJvd3dpZHRoLHN0YW5kb2ZmOm4uc3RhbmRvZmYsc3RhcnRzdGFuZG9mZjpuLnN0YXJ0c3RhbmRvZmYsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLGNhcHR1cmVldmVudHM6bi5jYXB0dXJlZXZlbnRzfSksImNhbGMiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3ODEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyI6NTk4fV0sNjA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9ZS5mdWxsU2NlbmVMYXlvdXQuZG9tYWluLGE9ZS5mdWxsTGF5b3V0Ll9zaXplLG89e3BkYXRhOm51bGwsdHlwZToibGluZWFyIixhdXRvcmFuZ2U6ITEscmFuZ2U6Wy0xLzAsMS8wXX07dC5feGE9e30sbi5leHRlbmRGbGF0KHQuX3hhLG8pLGkuc2V0Q29udmVydCh0Ll94YSksdC5feGEuX29mZnNldD1hLmwrci54WzBdKmEudyx0Ll94YS5sMnA9ZnVuY3Rpb24oKXtyZXR1cm4uNSooMSt0Ll9wZGF0YVswXS90Ll9wZGF0YVszXSkqYS53KihyLnhbMV0tci54WzBdKX0sdC5feWE9e30sbi5leHRlbmRGbGF0KHQuX3lhLG8pLGkuc2V0Q29udmVydCh0Ll95YSksdC5feWEuX29mZnNldD1hLnQrKDEtci55WzFdKSphLmgsdC5feWEubDJwPWZ1bmN0aW9uKCl7cmV0dXJuLjUqKDEtdC5fcGRhdGFbMV0vdC5fcGRhdGFbM10pKmEuaCooci55WzFdLXIueVswXSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5mdWxsU2NlbmVMYXlvdXQuYW5ub3RhdGlvbnMscj0wO3I8ZS5sZW5ndGg7cisrKWEoZVtyXSx0KTt0LmZ1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLSIrdC5pZCkucmVtb3ZlKCl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5fV0sNjA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi4vYW5ub3RhdGlvbnMvY29tbW9uX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyLGEpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1mdW5jdGlvbiBjKHQpe3ZhciBuPXQrImF4aXMiLGE9e19mdWxsTGF5b3V0Ont9fTtyZXR1cm4gYS5fZnVsbExheW91dFtuXT1yW25dLGkuY29lcmNlUG9zaXRpb24oZSxhLGwsdCx0LC41KX1sKCJ2aXNpYmxlIikmJihvKHQsZSxhLmZ1bGxMYXlvdXQsbCksYygieCIpLGMoInkiKSxjKCJ6Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiLCJ6Il0pLGUueHJlZj0ieCIsZS55cmVmPSJ5IixlLnpyZWY9InoiLGwoInhhbmNob3IiKSxsKCJ5YW5jaG9yIiksbCgieHNoaWZ0IiksbCgieXNoaWZ0IiksZS5zaG93YXJyb3cmJihlLmF4cmVmPSJwaXhlbCIsZS5heXJlZj0icGl4ZWwiLGwoImF4IiwtMTApLGwoImF5IiwtMzApLG4ubm9uZU9yQWxsKHQsZSxbImF4IiwiYXkiXSkpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EodCxlLHtuYW1lOiJhbm5vdGF0aW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmwsZnVsbExheW91dDpyLmZ1bGxMYXlvdXR9KX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6Nzk0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHMiOjYwMSwiLi9hdHRyaWJ1dGVzIjo2MDd9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYW5ub3RhdGlvbnMvZHJhdyIpLmRyYXdSYXcsaT10KCIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3QiKSxhPVsieCIsInkiLCJ6Il07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dCxyPXQuZGF0YVNjYWxlLG89ZS5hbm5vdGF0aW9ucyxzPTA7czxvLmxlbmd0aDtzKyspe2Zvcih2YXIgbD1vW3NdLGM9ITEsdT0wO3U8Mzt1Kyspe3ZhciBoPWFbdV0sZj1sW2hdLHA9ZVtoKyJheGlzIl0ucjJmcmFjdGlvbihmKTtpZihwPDB8fHA+MSl7Yz0hMDticmVha319Yz90LmZ1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3QoIi5hbm5vdGF0aW9uLSIrdC5pZCsnW2RhdGEtaW5kZXg9IicrcysnIl0nKS5yZW1vdmUoKToobC5fcGRhdGE9aSh0LmdscGxvdC5jYW1lcmFQYXJhbXMsW2UueGF4aXMucjJsKGwueCkqclswXSxlLnlheGlzLnIybChsLnkpKnJbMV0sZS56YXhpcy5yMmwobC56KSpyWzJdXSksbih0LmdyYXBoRGl2LGwscyx0LmlkLGwuX3hhLGwuX3lhKSl9fX0seyIuLi8uLi9wbG90cy9nbDNkL3Byb2plY3QiOjg1MCwiLi4vYW5ub3RhdGlvbnMvZHJhdyI6NjA0fV0sNjExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiYW5ub3RhdGlvbnMzZCIsc2NoZW1hOntzdWJwbG90czp7c2NlbmU6e2Fubm90YXRpb25zOnQoIi4vYXR0cmlidXRlcyIpfX19LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDpmdW5jdGlvbih0LGUpe3ZhciByPW4uc3VicGxvdHNSZWdpc3RyeS5nbDNkO2lmKCFyKXJldHVybjtmb3IodmFyIGE9ci5hdHRyUmVnZXgsbz1PYmplY3Qua2V5cyh0KSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107YS50ZXN0KGwpJiYodFtsXS5hbm5vdGF0aW9uc3x8W10pLmxlbmd0aCYmKGkucHVzaFVuaXF1ZShlLl9iYXNlUGxvdE1vZHVsZXMsciksaS5wdXNoVW5pcXVlKGUuX3N1YnBsb3RzLmdsM2QsbCkpfX0sY29udmVydDp0KCIuL2NvbnZlcnQiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi9hdHRyaWJ1dGVzIjo2MDcsIi4vY29udmVydCI6NjA4LCIuL2RlZmF1bHRzIjo2MDksIi4vZHJhdyI6NjEwfV0sNjEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9tYWluIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvcGx1cyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jaGluZXNlIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NvcHRpYyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9kaXNjd29ybGQiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZXRoaW9waWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2hlYnJldyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9pc2xhbWljIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2p1bGlhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9tYXlhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uYW5ha3NoYWhpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25lcGFsaSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9wZXJzaWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RhaXdhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90aGFpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3VtbWFscXVyYSIpfSx7IndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jaGluZXNlIjo1NzksIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jb3B0aWMiOjU4MCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2Rpc2N3b3JsZCI6NTgxLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZXRoaW9waWFuIjo1ODIsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9oZWJyZXciOjU4Mywid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2lzbGFtaWMiOjU4NCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2p1bGlhbiI6NTg1LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbWF5YW4iOjU4Niwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25hbmFrc2hhaGkiOjU4Nywid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25lcGFsaSI6NTg4LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvcGVyc2lhbiI6NTg5LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGFpd2FuIjo1OTAsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90aGFpIjo1OTEsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy91bW1hbHF1cmEiOjU5Miwid29ybGQtY2FsZW5kYXJzL2Rpc3QvbWFpbiI6NTkzLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzIjo1OTR9XSw2MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jYWxlbmRhcnMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLG89YS5FUE9DSEpELHM9YS5PTkVEQVksbD17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKG4uY2FsZW5kYXJzKSxlZGl0VHlwZToiY2FsYyIsZGZsdDoiZ3JlZ29yaWFuIn0sYz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT17fTtyZXR1cm4gYVtyXT1sLGkuY29lcmNlKHQsZSxhLHIsbil9LHU9e2Q6ezA6ImRkIiwiLSI6ImQifSxlOnswOiJkIiwiLSI6ImQifSxhOnswOiJEIiwiLSI6IkQifSxBOnswOiJERCIsIi0iOiJERCJ9LGo6ezA6Im9vIiwiLSI6Im8ifSxXOnswOiJ3dyIsIi0iOiJ3In0sbTp7MDoibW0iLCItIjoibSJ9LGI6ezA6Ik0iLCItIjoiTSJ9LEI6ezA6Ik1NIiwiLSI6Ik1NIn0seTp7MDoieXkiLCItIjoieXkifSxZOnswOiJ5eXl5IiwiLSI6Inl5eXkifSxVOiIjIyIsdzoiIyMiLGM6ezA6IkQgTSBkICVYIHl5eXkiLCItIjoiRCBNIGQgJVggeXl5eSJ9LHg6ezA6Im1tL2RkL3l5eXkiLCItIjoibW0vZGQveXl5eSJ9fTt2YXIgaD17fTtmdW5jdGlvbiBmKHQpe3ZhciBlPWhbdF07cmV0dXJuIGV8fChlPWhbdF09bi5pbnN0YW5jZSh0KSl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gaS5leHRlbmRGbGF0KHt9LGwse2Rlc2NyaXB0aW9uOnR9KX1mdW5jdGlvbiBkKHQpe3JldHVybiJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIHdpdGggYCIrdCsiYCBkYXRlIGRhdGEuIn12YXIgZz17eGNhbGVuZGFyOnAoZCgieCIpKX0sbT1pLmV4dGVuZEZsYXQoe30sZyx7eWNhbGVuZGFyOnAoZCgieSIpKX0pLHY9aS5leHRlbmRGbGF0KHt9LG0se3pjYWxlbmRhcjpwKGQoInoiKSl9KSx5PXAoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgcmFuZ2VgIGFuZCBgdGljazBgIiwiaWYgdGhpcyBpcyBhIGRhdGUgYXhpcy4gVGhpcyBkb2VzIG5vdCBzZXQgdGhlIGNhbGVuZGFyIGZvciIsImludGVycHJldGluZyBkYXRhIG9uIHRoaXMgYXhpcywgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgdHJhY2UiLCJvciB2aWEgdGhlIGdsb2JhbCBgbGF5b3V0LmNhbGVuZGFyYCJdLmpvaW4oIiAiKSk7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNhbGVuZGFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6bSxiYXI6bSxib3g6bSxoZWF0bWFwOm0sY29udG91cjptLGhpc3RvZ3JhbTptLGhpc3RvZ3JhbTJkOm0saGlzdG9ncmFtMmRjb250b3VyOm0sc2NhdHRlcjNkOnYsc3VyZmFjZTp2LG1lc2gzZDp2LHNjYXR0ZXJnbDptLG9obGM6ZyxjYW5kbGVzdGljazpnfSxsYXlvdXQ6e2NhbGVuZGFyOnAoWyJTZXRzIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGludGVycHJldGluZyBhbmQiLCJkaXNwbGF5aW5nIGRhdGVzIHRocm91Z2hvdXQgdGhlIHBsb3QuIl0uam9pbigiICIpKX0sc3VicGxvdHM6e3hheGlzOntjYWxlbmRhcjp5fSx5YXhpczp7Y2FsZW5kYXI6eX0sc2NlbmU6e3hheGlzOntjYWxlbmRhcjp5fSx5YXhpczp7Y2FsZW5kYXI6eX0semF4aXM6e2NhbGVuZGFyOnl9fSxwb2xhcjp7cmFkaWFsYXhpczp7Y2FsZW5kYXI6eX19fSx0cmFuc2Zvcm1zOntmaWx0ZXI6e3ZhbHVlY2FsZW5kYXI6cChbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB2YWx1ZWAsIGlmIGl0IGlzIGEgZGF0ZS4iXS5qb2luKCIgIikpLHRhcmdldGNhbGVuZGFyOnAoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdGFyZ2V0YCwgaWYgaXQgaXMgYW4iLCJhcnJheSBvZiBkYXRlcy4gSWYgYHRhcmdldGAgaXMgYSBzdHJpbmcgKGVnICp4Kikgd2UgdXNlIHRoZSIsImNvcnJlc3BvbmRpbmcgdHJhY2UgYXR0cmlidXRlIChlZyBgeGNhbGVuZGFyYCkgaWYgaXQgZXhpc3RzLCIsImV2ZW4gaWYgYHRhcmdldGNhbGVuZGFyYCBpcyBwcm92aWRlZC4iXS5qb2luKCIgIikpfX19LGxheW91dEF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czpjLGhhbmRsZVRyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspYyh0LGUscltpXSsiY2FsZW5kYXIiLG4uY2FsZW5kYXIpfSxDQU5PTklDQUxfU1VOREFZOntjaGluZXNlOiIyMDAwLTAxLTAyIixjb3B0aWM6IjIwMDAtMDEtMDMiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMyIsZXRoaW9waWFuOiIyMDAwLTAxLTA1IixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDIiLGp1bGlhbjoiMjAwMC0wMS0wMyIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDUiLG5lcGFsaToiMjAwMC0wMS0wNSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDQiLHRoYWk6IjIwMDAtMDEtMDQiLHVtbWFscXVyYToiMTQwMC0wMS0wNiJ9LENBTk9OSUNBTF9USUNLOntjaGluZXNlOiIyMDAwLTAxLTAxIixjb3B0aWM6IjIwMDAtMDEtMDEiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMSIsZXRoaW9waWFuOiIyMDAwLTAxLTAxIixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDEiLGp1bGlhbjoiMjAwMC0wMS0wMSIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDEiLG5lcGFsaToiMjAwMC0wMS0wMSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDEiLHRoYWk6IjIwMDAtMDEtMDEiLHVtbWFscXVyYToiMTQwMC0wMS0wMSJ9LERGTFRSQU5HRTp7Y2hpbmVzZTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sY29wdGljOlsiMTcwMC0wMS0wMSIsIjE3MDEtMDEtMDEiXSxkaXNjd29ybGQ6WyIxODAwLTAxLTAxIiwiMTgwMS0wMS0wMSJdLGV0aGlvcGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0saGVicmV3OlsiNTcwMC0wMS0wMSIsIjU3MDEtMDEtMDEiXSxpc2xhbWljOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSxqdWxpYW46WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLG1heWFuOlsiNTIwMC0wMS0wMSIsIjUyMDEtMDEtMDEiXSxuYW5ha3NoYWhpOlsiMDUwMC0wMS0wMSIsIjA1MDEtMDEtMDEiXSxuZXBhbGk6WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLHBlcnNpYW46WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGphbGFsaTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0sdGFpd2FuOlsiMDEwMC0wMS0wMSIsIjAxMDEtMDEtMDEiXSx0aGFpOlsiMjUwMC0wMS0wMSIsIjI1MDEtMDEtMDEiXSx1bW1hbHF1cmE6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdfSxnZXRDYWw6Zix3b3JsZENhbEZtdDpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYSxsLGMsaD1NYXRoLmZsb29yKChlKy4wNSkvcykrbyxwPWYocikuZnJvbUpEKGgpLGQ9MDstMSE9PShkPXQuaW5kZXhPZigiJSIsZCkpOykiMCI9PT0obj10LmNoYXJBdChkKzEpKXx8Ii0iPT09bnx8Il8iPT09bj8oYT0zLGk9dC5jaGFyQXQoZCsyKSwiXyI9PT1uJiYobj0iLSIpKTooaT1uLG49IjAiLGE9MiksKGw9dVtpXSk/KGM9IiMjIj09PWw/IiMjIjpwLmZvcm1hdERhdGUobFtuXSksdD10LnN1YnN0cigwLGQpK2MrdC5zdWJzdHIoZCthKSxkKz1jLmxlbmd0aCk6ZCs9YTtyZXR1cm4gdH19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4vY2FsZW5kYXJzIjo2MTJ9XSw2MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWZhdWx0cz1bIiMxZjc3YjQiLCIjZmY3ZjBlIiwiIzJjYTAyYyIsIiNkNjI3MjgiLCIjOTQ2N2JkIiwiIzhjNTY0YiIsIiNlMzc3YzIiLCIjN2Y3ZjdmIiwiI2JjYmQyMiIsIiMxN2JlY2YiXSxyLmRlZmF1bHRMaW5lPSIjNDQ0IixyLmxpZ2h0TGluZT0iI2VlZSIsci5iYWNrZ3JvdW5kPSIjZmZmIixyLmJvcmRlckxpbmU9IiNCRUM4RDkiLHIubGlnaHRGcmFjdGlvbj0xZTMvMTF9LHt9XSw2MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPWUuZXhwb3J0cz17fSxvPXQoIi4vYXR0cmlidXRlcyIpO2EuZGVmYXVsdHM9by5kZWZhdWx0czt2YXIgcz1hLmRlZmF1bHRMaW5lPW8uZGVmYXVsdExpbmU7YS5saWdodExpbmU9by5saWdodExpbmU7dmFyIGw9YS5iYWNrZ3JvdW5kPW8uYmFja2dyb3VuZDtmdW5jdGlvbiBjKHQpe2lmKGkodCl8fCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10LnRyaW0oKTtpZigicmdiIiE9PWUuc3Vic3RyKDAsMykpcmV0dXJuIHQ7dmFyIHI9ZS5tYXRjaCgvXnJnYmE/XHMqXCgoW14oKV0qKVwpJC8pO2lmKCFyKXJldHVybiB0O3ZhciBuPXJbMV0udHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pLGE9ImEiPT09ZS5jaGFyQXQoMykmJjQ9PT1uLmxlbmd0aDtpZighYSYmMyE9PW4ubGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXtpZighbltvXS5sZW5ndGgpcmV0dXJuIHQ7aWYobltvXT1OdW1iZXIobltvXSksIShuW29dPj0wKSlyZXR1cm4gdDtpZigzPT09byluW29dPjEmJihuW29dPTEpO2Vsc2UgaWYobltvXT49MSlyZXR1cm4gdH12YXIgcz1NYXRoLnJvdW5kKDI1NSpuWzBdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMV0pKyIsICIrTWF0aC5yb3VuZCgyNTUqblsyXSk7cmV0dXJuIGE/InJnYmEoIitzKyIsICIrblszXSsiKSI6InJnYigiK3MrIikifWEudGlueVJHQj1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmdiKCk7cmV0dXJuInJnYigiK01hdGgucm91bmQoZS5yKSsiLCAiK01hdGgucm91bmQoZS5nKSsiLCAiK01hdGgucm91bmQoZS5iKSsiKSJ9LGEucmdiPWZ1bmN0aW9uKHQpe3JldHVybiBhLnRpbnlSR0Iobih0KSl9LGEub3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpLmdldEFscGhhKCk6MH0sYS5hZGRPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZChyLnIpKyIsICIrTWF0aC5yb3VuZChyLmcpKyIsICIrTWF0aC5yb3VuZChyLmIpKyIsICIrZSsiKSJ9LGEuY29tYmluZT1mdW5jdGlvbih0LGUpe3ZhciByPW4odCkudG9SZ2IoKTtpZigxPT09ci5hKXJldHVybiBuKHQpLnRvUmdiU3RyaW5nKCk7dmFyIGk9bihlfHxsKS50b1JnYigpLGE9MT09PWkuYT9pOntyOjI1NSooMS1pLmEpK2kucippLmEsZzoyNTUqKDEtaS5hKStpLmcqaS5hLGI6MjU1KigxLWkuYSkraS5iKmkuYX0sbz17cjphLnIqKDEtci5hKStyLnIqci5hLGc6YS5nKigxLXIuYSkrci5nKnIuYSxiOmEuYiooMS1yLmEpK3IuYipyLmF9O3JldHVybiBuKG8pLnRvUmdiU3RyaW5nKCl9LGEuY29udHJhc3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4odCk7cmV0dXJuIDEhPT1pLmdldEFscGhhKCkmJihpPW4oYS5jb21iaW5lKHQsbCkpKSwoaS5pc0RhcmsoKT9lP2kubGlnaHRlbihlKTpsOnI/aS5kYXJrZW4ocik6cykudG9TdHJpbmcoKX0sYS5zdHJva2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpO3Quc3R5bGUoe3N0cm9rZTphLnRpbnlSR0IociksInN0cm9rZS1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sYS5maWxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtmaWxsOmEudGlueVJHQihyKSwiZmlsbC1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sYS5jbGVhbj1mdW5jdGlvbih0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlLHIsbixpLG89T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKylpZihpPXRbbj1vW2VdXSwiY29sb3IiPT09bi5zdWJzdHIobi5sZW5ndGgtNSkpaWYoQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl09YyhpW3JdKTtlbHNlIHRbbl09YyhpKTtlbHNlIGlmKCJjb2xvcnNjYWxlIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTEwKSYmQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKUFycmF5LmlzQXJyYXkoaVtyXSkmJihpW3JdWzFdPWMoaVtyXVsxXSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIHM9aVswXTtpZighQXJyYXkuaXNBcnJheShzKSYmcyYmIm9iamVjdCI9PXR5cGVvZiBzKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspYS5jbGVhbihpW3JdKX1lbHNlIGkmJiJvYmplY3QiPT10eXBlb2YgaSYmYS5jbGVhbihpKX19fSx7Ii4vYXR0cmlidXRlcyI6NjE0LCJmYXN0LWlzbnVtZXJpYyI6MjQxLHRpbnljb2xvcjI6NTQ4fV0sNjE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHhwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIn0seXBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDoiIn0pLHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyx0aWNrZm9udDppKHt9KSx0aWNrYW5nbGU6bi50aWNrYW5nbGUsdGlja2Zvcm1hdDpuLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOm4udGlja2Zvcm1hdHN0b3BzLHRpY2twcmVmaXg6bi50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Om4uc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDpuLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6bi5zaG93dGlja3N1ZmZpeCxzZXBhcmF0ZXRob3VzYW5kczpuLnNlcGFyYXRldGhvdXNhbmRzLGV4cG9uZW50Zm9ybWF0Om4uZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6bi5taW5leHBvbmVudCxzaG93ZXhwb25lbnQ6bi5zaG93ZXhwb25lbnQsdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyJ9LGZvbnQ6aSh7fSksc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmlnaHQiLCJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AifX0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmcifSx0aXRsZWZvbnQ6aSh7fSksdGl0bGVzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyaWdodCIsInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9fX0sImNvbG9yYmFycyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzgxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxMywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4Mjd9XSw2MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjbjp7Y29sb3JiYXI6ImNvbG9yYmFyIixjYmJnOiJjYmJnIixjYmZpbGw6ImNiZmlsbCIsY2JmaWxsczoiY2JmaWxscyIsY2JsaW5lOiJjYmxpbmUiLGNibGluZXM6ImNibGluZXMiLGNiYXhpczoiY2JheGlzIixjYnRpdGxldW5zaGlmdDoiY2J0aXRsZXVuc2hpZnQiLGNidGl0bGU6ImNidGl0bGUiLGNib3V0bGluZToiY2JvdXRsaW5lIixjcmlzcDoiY3Jpc3AiLGpzUGxhY2Vob2xkZXI6ImpzLXBsYWNlaG9sZGVyIn19fSx7fV0sNjE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBjPWkubmV3Q29udGFpbmVyKGUsImNvbG9yYmFyIiksdT10LmNvbG9yYmFyfHx7fTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIG4uY29lcmNlKHUsYyxsLHQsZSl9dmFyIGY9aCgidGhpY2tuZXNzbW9kZSIpO2goInRoaWNrbmVzcyIsImZyYWN0aW9uIj09PWY/MzAvKHIud2lkdGgtci5tYXJnaW4ubC1yLm1hcmdpbi5yKTozMCk7dmFyIHA9aCgibGVubW9kZSIpO2goImxlbiIsImZyYWN0aW9uIj09PXA/MTpyLmhlaWdodC1yLm1hcmdpbi50LXIubWFyZ2luLmIpLGgoIngiKSxoKCJ4YW5jaG9yIiksaCgieHBhZCIpLGgoInkiKSxoKCJ5YW5jaG9yIiksaCgieXBhZCIpLG4ubm9uZU9yQWxsKHUsYyxbIngiLCJ5Il0pLGgoIm91dGxpbmVjb2xvciIpLGgoIm91dGxpbmV3aWR0aCIpLGgoImJvcmRlcmNvbG9yIiksaCgiYm9yZGVyd2lkdGgiKSxoKCJiZ2NvbG9yIiksYSh1LGMsaCwibGluZWFyIik7dmFyIGQ9e291dGVyVGlja3M6ITEsZm9udDpyLmZvbnR9O3ModSxjLGgsImxpbmVhciIsZCksbyh1LGMsaCwibGluZWFyIixkKSxoKCJ0aXRsZS50ZXh0IixyLl9kZmx0VGl0bGUuY29sb3JiYXIpLG4uY29lcmNlRm9udChoLCJ0aXRsZS5mb250IixyLmZvbnQpLGgoInRpdGxlLnNpZGUiKX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjgyMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6ODIxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6ODIyLCIuL2F0dHJpYnV0ZXMiOjYxNn1dLDYxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSxjPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZj10KCIuLi9kcmF3aW5nIikscD10KCIuLi9jb2xvciIpLGQ9dCgiLi4vdGl0bGVzIiksZz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxtPXQoIi4uL2NvbG9yc2NhbGUvaGVscGVycyIpLmZsaXBTY2FsZSx2PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIikseT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiKSx4PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGI9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLF89Yi5MSU5FX1NQQUNJTkcsdz1iLkZST01fVEwsVD1iLkZST01fQlIsaz10KCIuL2NvbnN0YW50cyIpLmNuO2UuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIray5jb2xvcmJhcikuZGF0YShmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXQuX2Z1bGxMYXlvdXQsbz10LmNhbGNkYXRhLHM9W107ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdSh0LHtfZmlsbGNvbG9yOm51bGwsX2xpbmU6e2NvbG9yOm51bGwsd2lkdGg6bnVsbCxkYXNoOm51bGx9LF9sZXZlbHM6e3N0YXJ0Om51bGwsZW5kOm51bGwsc2l6ZTpudWxsfSxfZmlsbGxldmVsczpudWxsLF9maWxsZ3JhZGllbnQ6bnVsbCxfenJhbmdlOm51bGx9KX1mdW5jdGlvbiBjKCl7ImZ1bmN0aW9uIj09dHlwZW9mIGkuY2FsYz9pLmNhbGModCxuLGUpOihlLl9maWxsZ3JhZGllbnQ9ci5yZXZlcnNlc2NhbGU/bShyLmNvbG9yc2NhbGUpOnIuY29sb3JzY2FsZSxlLl96cmFuZ2U9W3JbaS5taW5dLHJbaS5tYXhdXSl9Zm9yKHZhciBoPTA7aDxvLmxlbmd0aDtoKyspe3ZhciBmPW9baF0scD0obj1mWzBdLnRyYWNlKS5fbW9kdWxlLmNvbG9yYmFyO2lmKCEwPT09bi52aXNpYmxlJiZwKWZvcih2YXIgZD1BcnJheS5pc0FycmF5KHApLGc9ZD9wOltwXSx2PTA7djxnLmxlbmd0aDt2Kyspe3ZhciB5PShpPWdbdl0pLmNvbnRhaW5lcjsocj15P25beV06bikmJnIuc2hvd3NjYWxlJiYoKGU9bChyLmNvbG9yYmFyKSkuX2lkPSJjYiIrbi51aWQrKGQmJnk/Ii0iK3k6IiIpLGUuX3RyYWNlSW5kZXg9bi5pbmRleCxlLl9wcm9wUHJlZml4PSh5P3krIi4iOiIiKSsiY29sb3JiYXIuIixlLl9tZXRhPW4uX21ldGEsYygpLHMucHVzaChlKSl9fWZvcih2YXIgeCBpbiBhLl9jb2xvckF4ZXMpaWYoKHI9YVt4XSkuc2hvd3NjYWxlKXt2YXIgYj1hLl9jb2xvckF4ZXNbeF07KGU9bChyLmNvbG9yYmFyKSkuX2lkPSJjYiIreCxlLl9wcm9wUHJlZml4PXgrIi5jb2xvcmJhci4iLGUuX21ldGE9YS5fbWV0YSxpPXttaW46ImNtaW4iLG1heDoiY21heCJ9LCJoZWF0bWFwIiE9PWJbMF0mJihuPWJbMV0saS5jYWxjPW4uX21vZHVsZS5jb2xvcmJhci5jYWxjKSxjKCkscy5wdXNoKGUpfXJldHVybiBzfSh0KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2lkfSkpO2UuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9pZH0pKS5jbGFzc2VkKGsuY29sb3JiYXIsITApLGUuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7Yy5lbnN1cmVTaW5nbGUociwicmVjdCIsay5jYmJnKSxjLmVuc3VyZVNpbmdsZShyLCJnIixrLmNiZmlsbHMpLGMuZW5zdXJlU2luZ2xlKHIsImciLGsuY2JsaW5lcyksYy5lbnN1cmVTaW5nbGUociwiZyIsay5jYmF4aXMsKGZ1bmN0aW9uKHQpe3QuY2xhc3NlZChrLmNyaXNwLCEwKX0pKSxjLmVuc3VyZVNpbmdsZShyLCJnIixrLmNidGl0bGV1bnNoaWZ0LChmdW5jdGlvbih0KXt0LmFwcGVuZCgiZyIpLmNsYXNzZWQoay5jYnRpdGxlLCEwKX0pKSxjLmVuc3VyZVNpbmdsZShyLCJyZWN0IixrLmNib3V0bGluZSk7dmFyIG09ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXIuX2Z1bGxMYXlvdXQsbD1vLl9zaXplLGg9ZS5fZmlsbGNvbG9yLG09ZS5fbGluZSxiPWUudGl0bGUsTT1iLnNpZGUsQT1lLl96cmFuZ2V8fG4uZXh0ZW50KCgiZnVuY3Rpb24iPT10eXBlb2YgaD9oOm0uY29sb3IpLmRvbWFpbigpKSxTPSJmdW5jdGlvbiI9PXR5cGVvZiBtLmNvbG9yP20uY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gbS5jb2xvcn0sRT0iZnVuY3Rpb24iPT10eXBlb2YgaD9oOmZ1bmN0aW9uKCl7cmV0dXJuIGh9LEM9ZS5fbGV2ZWxzLEw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLl9sZXZlbHMsbz1bXSxzPVtdLGw9YS5lbmQrYS5zaXplLzEwMCxjPWEuc2l6ZSx1PTEuMDAxKnJbMF0tLjAwMSpyWzFdLGg9MS4wMDEqclsxXS0uMDAxKnJbMF07Zm9yKGk9MDtpPDFlNSYmKG49YS5zdGFydCtpKmMsIShjPjA/bj49bDpuPD1sKSk7aSsrKW4+dSYmbjxoJiZvLnB1c2gobik7aWYoZS5fZmlsbGdyYWRpZW50KXM9WzBdO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuX2ZpbGxjb2xvcil7dmFyIGY9ZS5fZmlsbGxldmVscztpZihmKWZvcihsPWYuZW5kK2Yuc2l6ZS8xMDAsYz1mLnNpemUsaT0wO2k8MWU1JiYobj1mLnN0YXJ0K2kqYywhKGM+MD9uPj1sOm48PWwpKTtpKyspbj5yWzBdJiZuPHJbMV0mJnMucHVzaChuKTtlbHNlKHM9by5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LWEuc2l6ZS8yfSkpKS5wdXNoKHNbcy5sZW5ndGgtMV0rYS5zaXplKX1lbHNlIGUuX2ZpbGxjb2xvciYmInN0cmluZyI9PXR5cGVvZiBlLl9maWxsY29sb3ImJihzPVswXSk7YS5zaXplPDAmJihvLnJldmVyc2UoKSxzLnJldmVyc2UoKSk7cmV0dXJue2xpbmU6byxmaWxsOnN9fSgwLGUsQSksUD1MLmZpbGwsST1MLmxpbmUsej1NYXRoLnJvdW5kKGUudGhpY2tuZXNzKigiZnJhY3Rpb24iPT09ZS50aGlja25lc3Ntb2RlP2wudzoxKSksTz16L2wudyxEPU1hdGgucm91bmQoZS5sZW4qKCJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/bC5oOjEpKSxSPUQvbC5oLEY9ZS54cGFkL2wudyxCPShlLmJvcmRlcndpZHRoK2Uub3V0bGluZXdpZHRoKS8yLE49ZS55cGFkL2wuaCxqPU1hdGgucm91bmQoZS54KmwudytlLnhwYWQpLFU9ZS54LU8qKHttaWRkbGU6LjUscmlnaHQ6MX1bZS54YW5jaG9yXXx8MCksVj1lLnkrUiooKHt0b3A6LS41LGJvdHRvbTouNX1bZS55YW5jaG9yXXx8MCktLjUpLHE9TWF0aC5yb3VuZChsLmgqKDEtVikpLEg9cS1EO2UuX2xlbkZyYWM9UixlLl90aGlja0ZyYWM9TyxlLl94TGVmdEZyYWM9VSxlLl95Qm90dG9tRnJhYz1WO3ZhciBHPWUuX2F4aXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT17dHlwZToibGluZWFyIixyYW5nZTpyLHRpY2ttb2RlOmUudGlja21vZGUsbnRpY2tzOmUubnRpY2tzLHRpY2swOmUudGljazAsZHRpY2s6ZS5kdGljayx0aWNrdmFsczplLnRpY2t2YWxzLHRpY2t0ZXh0OmUudGlja3RleHQsdGlja3M6ZS50aWNrcyx0aWNrbGVuOmUudGlja2xlbix0aWNrd2lkdGg6ZS50aWNrd2lkdGgsdGlja2NvbG9yOmUudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmUuc2hvd3RpY2tsYWJlbHMsdGlja2ZvbnQ6ZS50aWNrZm9udCx0aWNrYW5nbGU6ZS50aWNrYW5nbGUsdGlja2Zvcm1hdDplLnRpY2tmb3JtYXQsZXhwb25lbnRmb3JtYXQ6ZS5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDplLm1pbmV4cG9uZW50LHNlcGFyYXRldGhvdXNhbmRzOmUuc2VwYXJhdGV0aG91c2FuZHMsc2hvd2V4cG9uZW50OmUuc2hvd2V4cG9uZW50LHNob3d0aWNrcHJlZml4OmUuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDplLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6ZS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmUudGlja3N1ZmZpeCx0aXRsZTplLnRpdGxlLHNob3dsaW5lOiEwLGFuY2hvcjoiZnJlZSIsc2lkZToicmlnaHQiLHBvc2l0aW9uOjF9LGE9e3R5cGU6ImxpbmVhciIsX2lkOiJ5IitlLl9pZH0sbz17bGV0dGVyOiJ5Iixmb250Om4uZm9udCxub0hvdmVyOiEwLG5vVGlja3NvbjohMCxub1RpY2tsYWJlbG1vZGU6ITAsY2FsZW5kYXI6bi5jYWxlbmRhcn07ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBjLmNvZXJjZShpLGEseCx0LGUpfXJldHVybiB2KGksYSxzLG8sbikseShpLGEscyxvKSxhfShyLGUsQSk7Ry5wb3NpdGlvbj1lLngrRitPLC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0pJiYoRy50aXRsZS5zaWRlPU0sRy50aXRsZXg9ZS54K0YsRy50aXRsZXk9VisoInRvcCI9PT1iLnNpZGU/Ui1OOk4pKTtpZihtLmNvbG9yJiYiYXV0byI9PT1lLnRpY2ttb2RlKXtHLnRpY2ttb2RlPSJsaW5lYXIiLEcudGljazA9Qy5zdGFydDt2YXIgWT1DLnNpemUsVz1jLmNvbnN0cmFpbigocS1IKS81MCw0LDE1KSsxLFo9KEFbMV0tQVswXSkvKChlLm50aWNrc3x8VykqWSk7aWYoWj4xKXt2YXIgWD1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKFopL01hdGguTE4xMCkpO1kqPVgqYy5yb3VuZFVwKFovWCxbMiw1LDEwXSksKE1hdGguYWJzKEMuc3RhcnQpL0Muc2l6ZSsxZS02KSUxPDJlLTYmJihHLnRpY2swPTApfUcuZHRpY2s9WX1HLmRvbWFpbj1bVitOLFYrUi1OXSxHLnNldFNjYWxlKCksdC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitNYXRoLnJvdW5kKGwubCkrIiwiK01hdGgucm91bmQobC50KSsiKSIpO3ZhciBKLEs9dC5zZWxlY3QoIi4iK2suY2J0aXRsZXVuc2hpZnQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtIitNYXRoLnJvdW5kKGwubCkrIiwtIitNYXRoLnJvdW5kKGwudCkrIikiKSxRPXQuc2VsZWN0KCIuIitrLmNiYXhpcyksJD0wO2Z1bmN0aW9uIHR0KG4saSl7dmFyIGE9e3Byb3BDb250YWluZXI6Ryxwcm9wTmFtZTplLl9wcm9wUHJlZml4KyJ0aXRsZSIsdHJhY2VJbmRleDplLl90cmFjZUluZGV4LF9tZXRhOmUuX21ldGEscGxhY2Vob2xkZXI6by5fZGZsdFRpdGxlLmNvbG9yYmFyLGNvbnRhaW5lckdyb3VwOnQuc2VsZWN0KCIuIitrLmNidGl0bGUpfSxzPSJoIj09PW4uY2hhckF0KDApP24uc3Vic3RyKDEpOiJoIituO3Quc2VsZWN0QWxsKCIuIitzKyIsLiIrcysiLW1hdGgtZ3JvdXAiKS5yZW1vdmUoKSxkLmRyYXcocixuLHUoYSxpfHx7fSkpfXJldHVybiBjLnN5bmNPckFzeW5jKFthLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZigtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKSl7dmFyIHQscj1sLmwrKGUueCtGKSpsLncsbj1HLnRpdGxlLmZvbnQuc2l6ZTt0PSJ0b3AiPT09TT8oMS0oVitSLU4pKSpsLmgrbC50KzMrLjc1Km46KDEtKFYrTikpKmwuaCtsLnQtMy0uMjUqbix0dChHLl9pZCsidGl0bGUiLHthdHRyaWJ1dGVzOnt4OnIseTp0LCJ0ZXh0LWFuY2hvciI6InN0YXJ0In19KX19LGZ1bmN0aW9uKCl7aWYoLTEhPT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2YoTSkpe3ZhciBhPXQuc2VsZWN0KCIuIitrLmNidGl0bGUpLG89YS5zZWxlY3QoInRleHQiKSx1PVstZS5vdXRsaW5ld2lkdGgvMixlLm91dGxpbmV3aWR0aC8yXSxoPWEuc2VsZWN0KCIuaCIrRy5faWQrInRpdGxlLW1hdGgtZ3JvdXAiKS5ub2RlKCkscD0xNS42O2lmKG8ubm9kZSgpJiYocD1wYXJzZUludChvLm5vZGUoKS5zdHlsZS5mb250U2l6ZSwxMCkqXyksaD8oJD1mLmJCb3goaCkuaGVpZ2h0KT5wJiYodVsxXS09KCQtcCkvMik6by5ub2RlKCkmJiFvLmNsYXNzZWQoay5qc1BsYWNlaG9sZGVyKSYmKCQ9Zi5iQm94KG8ubm9kZSgpKS5oZWlnaHQpLCQpe2lmKCQrPTUsInRvcCI9PT1NKUcuZG9tYWluWzFdLT0kL2wuaCx1WzFdKj0tMTtlbHNle0cuZG9tYWluWzBdKz0kL2wuaDt2YXIgZD1nLmxpbmVDb3VudChvKTt1WzFdKz0oMS1kKSpwfWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdSsiKSIpLEcuc2V0U2NhbGUoKX19dC5zZWxlY3RBbGwoIi4iK2suY2JmaWxscysiLC4iK2suY2JsaW5lcykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIitNYXRoLnJvdW5kKGwuaCooMS1HLmRvbWFpblsxXSkpKyIpIiksUS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK01hdGgucm91bmQoLWwudCkrIikiKTt2YXIgdj10LnNlbGVjdCgiLiIray5jYmZpbGxzKS5zZWxlY3RBbGwoInJlY3QuIitrLmNiZmlsbCkuYXR0cigic3R5bGUiLCIiKS5kYXRhKFApO3YuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKGsuY2JmaWxsLCEwKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpLHYuZXhpdCgpLnJlbW92ZSgpO3ZhciB5PUEubWFwKEcuYzJwKS5tYXAoTWF0aC5yb3VuZCkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpO3YuZWFjaCgoZnVuY3Rpb24odCxhKXt2YXIgbz1bMD09PWE/QVswXTooUFthXStQW2EtMV0pLzIsYT09PVAubGVuZ3RoLTE/QVsxXTooUFthXStQW2ErMV0pLzJdLm1hcChHLmMycCkubWFwKE1hdGgucm91bmQpO29bMV09Yy5jb25zdHJhaW4ob1sxXSsob1sxXT5vWzBdKT8xOi0xLHlbMF0seVsxXSk7dmFyIHM9bi5zZWxlY3QodGhpcykuYXR0cih7eDpqLHdpZHRoOk1hdGgubWF4KHosMikseTpuLm1pbihvKSxoZWlnaHQ6TWF0aC5tYXgobi5tYXgobyktbi5taW4obyksMil9KTtpZihlLl9maWxsZ3JhZGllbnQpZi5ncmFkaWVudChzLHIsZS5faWQsInZlcnRpY2FsIixlLl9maWxsZ3JhZGllbnQsImZpbGwiKTtlbHNle3ZhciBsPUUodCkucmVwbGFjZSgiZS0iLCIiKTtzLmF0dHIoImZpbGwiLGkobCkudG9IZXhTdHJpbmcoKSl9fSkpO3ZhciB4PXQuc2VsZWN0KCIuIitrLmNibGluZXMpLnNlbGVjdEFsbCgicGF0aC4iK2suY2JsaW5lKS5kYXRhKG0uY29sb3ImJm0ud2lkdGg/STpbXSk7eC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoay5jYmxpbmUsITApLHguZXhpdCgpLnJlbW92ZSgpLHguZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK2orIiwiKyhNYXRoLnJvdW5kKEcuYzJwKHQpKSttLndpZHRoLzIlMSkrImgiK3opLmNhbGwoZi5saW5lR3JvdXBTdHlsZSxtLndpZHRoLFModCksbS5kYXNoKX0pKSxRLnNlbGVjdEFsbCgiZy4iK0cuX2lkKyJ0aWNrLHBhdGgiKS5yZW1vdmUoKTt2YXIgYj1qK3orKGUub3V0bGluZXdpZHRofHwwKS8yLSgib3V0c2lkZSI9PT1lLnRpY2tzPzE6MCksdz1zLmNhbGNUaWNrcyhHKSxUPXMubWFrZVRyYW5zRm4oRyksQz1zLmdldFRpY2tTaWducyhHKVsyXTtyZXR1cm4gcy5kcmF3VGlja3MocixHLHt2YWxzOiJpbnNpZGUiPT09Ry50aWNrcz9zLmNsaXBFbmRzKEcsdyk6dyxsYXllcjpRLHBhdGg6cy5tYWtlVGlja1BhdGgoRyxiLEMpLHRyYW5zRm46VH0pLHMuZHJhd0xhYmVscyhyLEcse3ZhbHM6dyxsYXllcjpRLHRyYW5zRm46VCxsYWJlbEZuczpzLm1ha2VMYWJlbEZucyhHLGIpfSl9LGZ1bmN0aW9uKCl7aWYoLTE9PT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2YoTSkpe3ZhciB0PUcudGl0bGUuZm9udC5zaXplLGU9Ry5fb2Zmc2V0K0cuX2xlbmd0aC8yLGk9bC5sKyhHLnBvc2l0aW9ufHwwKSpsLncrKCJyaWdodCI9PT1HLnNpZGU/MTArdCooRy5zaG93dGlja2xhYmVscz8xOi41KTotMTAtdCooRy5zaG93dGlja2xhYmVscz8uNTowKSk7dHQoImgiK0cuX2lkKyJ0aXRsZSIse2F2b2lkOntzZWxlY3Rpb246bi5zZWxlY3Qocikuc2VsZWN0QWxsKCJnLiIrRy5faWQrInRpY2siKSxzaWRlOk0sb2Zmc2V0TGVmdDpsLmwsb2Zmc2V0VG9wOjAsbWF4U2hpZnQ6by53aWR0aH0sYXR0cmlidXRlczp7eDppLHk6ZSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSx0cmFuc2Zvcm06e3JvdGF0ZToiLTkwIixvZmZzZXQ6MH19KX19LGEucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3ZhciBuPXorZS5vdXRsaW5ld2lkdGgvMitmLmJCb3goUS5ub2RlKCkpLndpZHRoO2lmKChKPUsuc2VsZWN0KCJ0ZXh0IikpLm5vZGUoKSYmIUouY2xhc3NlZChrLmpzUGxhY2Vob2xkZXIpKXt2YXIgaSxvPUsuc2VsZWN0KCIuaCIrRy5faWQrInRpdGxlLW1hdGgtZ3JvdXAiKS5ub2RlKCk7aT1vJiYtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKT9mLmJCb3gobykud2lkdGg6Zi5iQm94KEsubm9kZSgpKS5yaWdodC1qLWwubCxuPU1hdGgubWF4KG4saSl9dmFyIHM9MiplLnhwYWQrbitlLmJvcmRlcndpZHRoK2Uub3V0bGluZXdpZHRoLzIsYz1xLUg7dC5zZWxlY3QoIi4iK2suY2JiZykuYXR0cih7eDpqLWUueHBhZC0oZS5ib3JkZXJ3aWR0aCtlLm91dGxpbmV3aWR0aCkvMix5OkgtQix3aWR0aDpNYXRoLm1heChzLDIpLGhlaWdodDpNYXRoLm1heChjKzIqQiwyKX0pLmNhbGwocC5maWxsLGUuYmdjb2xvcikuY2FsbChwLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKSx0LnNlbGVjdEFsbCgiLiIray5jYm91dGxpbmUpLmF0dHIoe3g6aix5OkgrZS55cGFkKygidG9wIj09PU0/JDowKSx3aWR0aDpNYXRoLm1heCh6LDIpLGhlaWdodDpNYXRoLm1heChjLTIqZS55cGFkLSQsMil9KS5jYWxsKHAuc3Ryb2tlLGUub3V0bGluZWNvbG9yKS5zdHlsZSh7ZmlsbDoibm9uZSIsInN0cm9rZS13aWR0aCI6ZS5vdXRsaW5ld2lkdGh9KTt2YXIgdT0oe2NlbnRlcjouNSxyaWdodDoxfVtlLnhhbmNob3JdfHwwKSpzO3QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGwubC11KSsiLCIrbC50KyIpIik7dmFyIGg9e30sZD13W2UueWFuY2hvcl0sZz1UW2UueWFuY2hvcl07InBpeGVscyI9PT1lLmxlbm1vZGU/KGgueT1lLnksaC50PWMqZCxoLmI9YypnKTooaC50PWguYj0wLGgueXQ9ZS55K2UubGVuKmQsaC55Yj1lLnktZS5sZW4qZyk7dmFyIG09d1tlLnhhbmNob3JdLHY9VFtlLnhhbmNob3JdO2lmKCJwaXhlbHMiPT09ZS50aGlja25lc3Ntb2RlKWgueD1lLngsaC5sPXMqbSxoLnI9cyp2O2Vsc2V7dmFyIHk9cy16O2gubD15Km0saC5yPXkqdixoLnhsPWUueC1lLnRoaWNrbmVzcyptLGgueHI9ZS54K2UudGhpY2tuZXNzKnZ9YS5hdXRvTWFyZ2luKHIsZS5faWQsaCl9XSxyKX0ocixlLHQpO20mJm0udGhlbiYmKHQuX3Byb21pc2VzfHxbXSkucHVzaChtKSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24mJmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEscz1yLl9mdWxsTGF5b3V0Ll9zaXplO2wuaW5pdCh7ZWxlbWVudDp0Lm5vZGUoKSxnZDpyLHByZXBGbjpmdW5jdGlvbigpe249dC5hdHRyKCJ0cmFuc2Zvcm0iKSxoKHQpfSxtb3ZlRm46ZnVuY3Rpb24ocixvKXt0LmF0dHIoInRyYW5zZm9ybSIsbisiIHRyYW5zbGF0ZSgiK3IrIiwiK28rIikiKSxpPWwuYWxpZ24oZS5feExlZnRGcmFjK3Ivcy53LGUuX3RoaWNrRnJhYywwLDEsZS54YW5jaG9yKSxhPWwuYWxpZ24oZS5feUJvdHRvbUZyYWMtby9zLmgsZS5fbGVuRnJhYywwLDEsZS55YW5jaG9yKTt2YXIgYz1sLmdldEN1cnNvcihpLGEsZS54YW5jaG9yLGUueWFuY2hvcik7aCh0LGMpfSxkb25lRm46ZnVuY3Rpb24oKXtpZihoKHQpLHZvaWQgMCE9PWkmJnZvaWQgMCE9PWEpe3ZhciBuPXt9O25bZS5fcHJvcFByZWZpeCsieCJdPWksbltlLl9wcm9wUHJlZml4KyJ5Il09YSx2b2lkIDAhPT1lLl90cmFjZUluZGV4P28uY2FsbCgiX2d1aVJlc3R5bGUiLHIsbixlLl90cmFjZUluZGV4KTpvLmNhbGwoIl9ndWlSZWxheW91dCIscixuKX19fSl9KHIsZSx0KX0pKSxlLmV4aXQoKS5lYWNoKChmdW5jdGlvbihlKXthLmF1dG9NYXJnaW4odCxlLl9pZCl9KSkucmVtb3ZlKCksZS5vcmRlcigpfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzE3LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3NzAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6Nzc0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6ODAxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIjo4MTYsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4NjIsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL2NvbG9yIjo2MTUsIi4uL2NvbG9yc2NhbGUvaGVscGVycyI6NjI2LCIuLi9kcmFnZWxlbWVudCI6NjM0LCIuLi9kcmF3aW5nIjo2MzcsIi4uL3RpdGxlcyI6NzEwLCIuL2NvbnN0YW50cyI6NjE3LGQzOjE2OSx0aW55Y29sb3IyOjU0OH1dLDYyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0LmNvbG9yYmFyKX19LHsiLi4vLi4vbGliIjo3NTB9XSw2MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNvbG9yYmFyIixhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpLmRyYXcsaGFzQ29sb3JiYXI6dCgiLi9oYXNfY29sb3JiYXIiKX19LHsiLi9hdHRyaWJ1dGVzIjo2MTYsIi4vZGVmYXVsdHMiOjYxOCwiLi9kcmF3Ijo2MTksIi4vaGFzX2NvbG9yYmFyIjo2MjB9XSw2MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29sb3JiYXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcixhPXQoIi4vc2NhbGVzLmpzIikuc2NhbGVzO09iamVjdC5rZXlzKGEpO2Z1bmN0aW9uIG8odCl7cmV0dXJuImAiK3QrImAifWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8IiI7dmFyIHIscz0oZT1lfHx7fSkuY0xldHRlcnx8ImMiLGw9KCJvbmx5SWZOdW1lcmljYWwiaW4gZT9lLm9ubHlJZk51bWVyaWNhbDpCb29sZWFuKHQpLCJub1NjYWxlImluIGU/ZS5ub1NjYWxlOiJtYXJrZXIubGluZSI9PT10KSxjPSJzaG93U2NhbGVEZmx0ImluIGU/ZS5zaG93U2NhbGVEZmx0OiJ6Ij09PXMsdT0ic3RyaW5nIj09dHlwZW9mIGUuY29sb3JzY2FsZURmbHQ/YVtlLmNvbG9yc2NhbGVEZmx0XTpudWxsLGg9ZS5lZGl0VHlwZU92ZXJyaWRlfHwiIixmPXQ/dCsiLiI6IiI7ImNvbG9yQXR0ciJpbiBlPyhyPWUuY29sb3JBdHRyLGUuY29sb3JBdHRyKTpvKGYrKHI9e3o6InoiLGM6ImNvbG9yIn1bc10pKTt2YXIgcD1zKyJhdXRvIixkPXMrIm1pbiIsZz1zKyJtYXgiLG09cysibWlkIix2PShvKGYrcCksbyhmK2QpLG8oZitnKSx7fSk7dltkXT12W2ddPXZvaWQgMDt2YXIgeT17fTt5W3BdPSExO3ZhciB4PXt9O3JldHVybiJjb2xvciI9PT1yJiYoeC5jb2xvcj17dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6aHx8InN0eWxlIn0sZS5hbmltJiYoeC5jb2xvci5hbmltPSEwKSkseFtwXT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnZ9LHhbZF09e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOmh8fCJwbG90IixpbXBsaWVkRWRpdHM6eX0seFtnXT17dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6aHx8InBsb3QiLGltcGxpZWRFZGl0czp5fSx4W21dPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnZ9LHguY29sb3JzY2FsZT17dmFsVHlwZToiY29sb3JzY2FsZSIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6dSxpbXBsaWVkRWRpdHM6e2F1dG9jb2xvcnNjYWxlOiExfX0seC5hdXRvY29sb3JzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSE9PWUuYXV0b0NvbG9yRGZsdCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOntjb2xvcnNjYWxlOnZvaWQgMH19LHgucmV2ZXJzZXNjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbHx8KHguc2hvd3NjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OmMsZWRpdFR5cGU6ImNhbGMifSx4LmNvbG9yYmFyPW4pLGUubm9Db2xvckF4aXN8fCh4LmNvbG9yYXhpcz17dmFsVHlwZToic3VicGxvdGlkIixyZWdleDppKCJjb2xvcmF4aXMiKSxkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSkseH19LHsiLi4vLi4vbGliL3JlZ2V4Ijo3NjYsIi4uL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYxNiwiLi9zY2FsZXMuanMiOjYzMH1dLDYyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2hlbHBlcnMiKS5leHRyYWN0T3B0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHM9dC5fZnVsbExheW91dCxsPXIudmFscyxjPXIuY29udGFpbmVyU3RyLHU9Yz9pLm5lc3RlZFByb3BlcnR5KGUsYykuZ2V0KCk6ZSxoPWEodSksZj0hMSE9PWguYXV0byxwPWgubWluLGQ9aC5tYXgsZz1oLm1pZCxtPWZ1bmN0aW9uKCl7cmV0dXJuIGkuYWdnTnVtcyhNYXRoLm1pbixudWxsLGwpfSx2PWZ1bmN0aW9uKCl7cmV0dXJuIGkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGwpfTsodm9pZCAwPT09cD9wPW0oKTpmJiYocD11Ll9jb2xvckF4JiZuKHApP01hdGgubWluKHAsbSgpKTptKCkpLHZvaWQgMD09PWQ/ZD12KCk6ZiYmKGQ9dS5fY29sb3JBeCYmbihkKT9NYXRoLm1heChkLHYoKSk6digpKSxmJiZ2b2lkIDAhPT1nJiYoZC1nPmctcD9wPWctKGQtZyk6ZC1nPGctcCYmKGQ9ZysoZy1wKSkpLHA9PT1kJiYocC09LjUsZCs9LjUpLGguX3N5bmMoIm1pbiIscCksaC5fc3luYygibWF4IixkKSxoLmF1dG9jb2xvcnNjYWxlKSYmKG89cCpkPDA/cy5jb2xvcnNjYWxlLmRpdmVyZ2luZzpwPj0wP3MuY29sb3JzY2FsZS5zZXF1ZW50aWFsOnMuY29sb3JzY2FsZS5zZXF1ZW50aWFsbWludXMsaC5fc3luYygiY29sb3JzY2FsZSIsbykpfX0seyIuLi8uLi9saWIiOjc1MCwiLi9oZWxwZXJzIjo2MjYsImZhc3QtaXNudW1lcmljIjoyNDF9XSw2MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi9oZWxwZXJzIikuZXh0cmFjdE9wdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciByPXRbIl8iK2VdO3ZvaWQgMCE9PXImJih0W2VdPXIpfWZ1bmN0aW9uIG8odCxpKXt2YXIgbz1pLmNvbnRhaW5lcj9uLm5lc3RlZFByb3BlcnR5KHQsaS5jb250YWluZXIpLmdldCgpOnQ7aWYobylpZihvLmNvbG9yYXhpcylvLl9jb2xvckF4PWVbby5jb2xvcmF4aXNdO2Vsc2V7dmFyIHM9YShvKSxsPXMuYXV0bzsobHx8dm9pZCAwPT09cy5taW4pJiZyKG8saS5taW4pLChsfHx2b2lkIDA9PT1zLm1heCkmJnIobyxpLm1heCkscy5hdXRvY29sb3JzY2FsZSYmcihvLCJjb2xvcnNjYWxlIil9fWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdLGM9bC5fbW9kdWxlLmNvbG9yYmFyO2lmKGMpaWYoQXJyYXkuaXNBcnJheShjKSlmb3IodmFyIHU9MDt1PGMubGVuZ3RoO3UrKylvKGwsY1t1XSk7ZWxzZSBvKGwsYyk7aShsLCJtYXJrZXIubGluZSIpJiZvKGwse2NvbnRhaW5lcjoibWFya2VyLmxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0pfWZvcih2YXIgaCBpbiBlLl9jb2xvckF4ZXMpbyhlW2hdLHttaW46ImNtaW4iLG1heDoiY21heCJ9KX19LHsiLi4vLi4vbGliIjo3NTAsIi4vaGVscGVycyI6NjI2fV0sNjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2NvbG9yYmFyL2hhc19jb2xvcmJhciIpLG89dCgiLi4vY29sb3JiYXIvZGVmYXVsdHMiKSxzPXQoIi4vc2NhbGVzIikuaXNWYWxpZCxsPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcztmdW5jdGlvbiBjKHQsZSl7dmFyIHI9ZS5zbGljZSgwLGUubGVuZ3RoLTEpO3JldHVybiBlP2kubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKXx8e306dH1lLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsdSxoLGYpe3ZhciBwPWYucHJlZml4LGQ9Zi5jTGV0dGVyLGc9Il9tb2R1bGUiaW4gcixtPWMoZSxwKSx2PWMocixwKSx5PWMoci5fdGVtcGxhdGV8fHt9LHApfHx7fSx4PWZ1bmN0aW9uKCl7cmV0dXJuIGRlbGV0ZSBlLmNvbG9yYXhpcyxkZWxldGUgci5jb2xvcmF4aXMsdChlLHIsdSxoLGYpfTtpZihnKXt2YXIgYj11Ll9jb2xvckF4ZXN8fHt9LF89aChwKyJjb2xvcmF4aXMiKTtpZihfKXt2YXIgdz1sKHIsImNvbnRvdXIiKSYmaS5uZXN0ZWRQcm9wZXJ0eShyLCJjb250b3Vycy5jb2xvcmluZyIpLmdldCgpfHwiaGVhdG1hcCIsVD1iW19dO3JldHVybiB2b2lkKFQ/KFRbMl0ucHVzaCh4KSxUWzBdIT09dyYmKFRbMF09ITEsaS53YXJuKFsiSWdub3JpbmcgY29sb3JheGlzOiIsXywic2V0dGluZyIsImFzIGl0IGlzIGxpbmtlZCB0byBpbmNvbXBhdGlibGUgY29sb3JzY2FsZXMuIl0uam9pbigiICIpKSkpOmJbX109W3cscixbeF1dKX19dmFyIGs9bVtkKyJtaW4iXSxNPW1bZCsibWF4Il0sQT1uKGspJiZuKE0pJiZrPE07aChwK2QrImF1dG8iLCFBKT9oKHArZCsibWlkIik6KGgocCtkKyJtaW4iKSxoKHArZCsibWF4IikpO3ZhciBTLEUsQz1tLmNvbG9yc2NhbGUsTD15LmNvbG9yc2NhbGU7KHZvaWQgMCE9PUMmJihTPSFzKEMpKSx2b2lkIDAhPT1MJiYoUz0hcyhMKSksaChwKyJhdXRvY29sb3JzY2FsZSIsUyksaChwKyJjb2xvcnNjYWxlIiksaChwKyJyZXZlcnNlc2NhbGUiKSwibWFya2VyLmxpbmUuIiE9PXApJiYocCYmZyYmKEU9YShtKSksaChwKyJzaG93c2NhbGUiLEUpJiYocCYmeSYmKHYuX3RlbXBsYXRlPXkpLG8obSx2LHUpKSl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuLi9jb2xvcmJhci9kZWZhdWx0cyI6NjE4LCIuLi9jb2xvcmJhci9oYXNfY29sb3JiYXIiOjYyMCwiLi9zY2FsZXMiOjYzMCwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDYyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vY29sb3IiKSxsPXQoIi4vc2NhbGVzIikuaXNWYWxpZDt2YXIgYz1bInNob3dzY2FsZSIsImF1dG9jb2xvcnNjYWxlIiwiY29sb3JzY2FsZSIsInJldmVyc2VzY2FsZSIsImNvbG9yYmFyIl0sdT1bIm1pbiIsIm1heCIsIm1pZCIsImF1dG8iXTtmdW5jdGlvbiBoKHQpe3ZhciBlLHIsbixpPXQuX2NvbG9yQXgsYT1pfHx0LG89e307Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKylvW249Y1tyXV09YVtuXTtpZihpKWZvcihlPSJjIixyPTA7cjx1Lmxlbmd0aDtyKyspb1tuPXVbcl1dPWFbImMiK25dO2Vsc2V7dmFyIHM7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKykoKHM9ImMiKyhuPXVbcl0pKWluIGF8fChzPSJ6IituKWluIGEpJiYob1tuXT1hW3NdKTtlPXMuY2hhckF0KDApfXJldHVybiBvLl9zeW5jPWZ1bmN0aW9uKHQscil7dmFyIG49LTEhPT11LmluZGV4T2YodCk/ZSt0OnQ7YVtuXT1hWyJfIituXT1yfSxvfWZ1bmN0aW9uIGYodCl7Zm9yKHZhciBlPWgodCkscj1lLm1pbixuPWUubWF4LGk9ZS5yZXZlcnNlc2NhbGU/cChlLmNvbG9yc2NhbGUpOmUuY29sb3JzY2FsZSxhPWkubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9bmV3IEFycmF5KGEpLGw9MDtsPGE7bCsrKXt2YXIgYz1pW2xdO29bbF09citjWzBdKihuLXIpLHNbbF09Y1sxXX1yZXR1cm57ZG9tYWluOm8scmFuZ2U6c319ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj1lLTEsaT0wO24+PTA7bi0tLGkrKyl7dmFyIGE9dFtuXTtyW2ldPVsxLWFbMF0sYVsxXV19cmV0dXJuIHJ9ZnVuY3Rpb24gZCh0LGUpe2U9ZXx8e307Zm9yKHZhciByPXQuZG9tYWluLG89dC5yYW5nZSxsPW8ubGVuZ3RoLGM9bmV3IEFycmF5KGwpLHU9MDt1PGw7dSsrKXt2YXIgaD1pKG9bdV0pLnRvUmdiKCk7Y1t1XT1baC5yLGguZyxoLmIsaC5hXX12YXIgZixwPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKHIpLnJhbmdlKGMpLmNsYW1wKCEwKSxkPWUubm9OdW1lcmljQ2hlY2ssbT1lLnJldHVybkFycmF5O3JldHVybihmPWQmJm0/cDpkP2Z1bmN0aW9uKHQpe3JldHVybiBnKHAodCkpfTptP2Z1bmN0aW9uKHQpe3JldHVybiBhKHQpP3AodCk6aSh0KS5pc1ZhbGlkKCk/dDpzLmRlZmF1bHRMaW5lfTpmdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9nKHAodCkpOmkodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX0pLmRvbWFpbj1wLmRvbWFpbixmLnJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGZ9ZnVuY3Rpb24gZyh0KXt2YXIgZT17cjp0WzBdLGc6dFsxXSxiOnRbMl0sYTp0WzNdfTtyZXR1cm4gaShlKS50b1JnYlN0cmluZygpfWUuZXhwb3J0cz17aGFzQ29sb3JzY2FsZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZT9vLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCl8fHt9OnQsaT1uW3J8fCJjb2xvciJdLHM9ITE7aWYoby5pc0FycmF5T3JUeXBlZEFycmF5KGkpKWZvcih2YXIgYz0wO2M8aS5sZW5ndGg7YysrKWlmKGEoaVtjXSkpe3M9ITA7YnJlYWt9cmV0dXJuIG8uaXNQbGFpbk9iamVjdChuKSYmKHN8fCEwPT09bi5zaG93c2NhbGV8fGEobi5jbWluKSYmYShuLmNtYXgpfHxsKG4uY29sb3JzY2FsZSl8fG8uaXNQbGFpbk9iamVjdChuLmNvbG9yYmFyKSl9LGV4dHJhY3RPcHRzOmgsZXh0cmFjdFNjYWxlOmYsZmxpcFNjYWxlOnAsbWFrZUNvbG9yU2NhbGVGdW5jOmQsbWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQoZih0KSxlKX19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi9jb2xvciI6NjE1LCIuL3NjYWxlcyI6NjMwLGQzOjE2OSwiZmFzdC1pc251bWVyaWMiOjI0MSx0aW55Y29sb3IyOjU0OH1dLDYyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NjYWxlcyIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNvbG9yc2NhbGUiLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHNjYWxlczpuLnNjYWxlcyxkZWZhdWx0U2NhbGU6bi5kZWZhdWx0U2NhbGUsZ2V0U2NhbGU6bi5nZXQsaXNWYWxpZFNjYWxlOm4uaXNWYWxpZCxoYXNDb2xvcnNjYWxlOmkuaGFzQ29sb3JzY2FsZSxleHRyYWN0T3B0czppLmV4dHJhY3RPcHRzLGV4dHJhY3RTY2FsZTppLmV4dHJhY3RTY2FsZSxmbGlwU2NhbGU6aS5mbGlwU2NhbGUsbWFrZUNvbG9yU2NhbGVGdW5jOmkubWFrZUNvbG9yU2NhbGVGdW5jLG1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZTppLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZX19LHsiLi9hdHRyaWJ1dGVzIjo2MjIsIi4vY2FsYyI6NjIzLCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjo2MjQsIi4vZGVmYXVsdHMiOjYyNSwiLi9oZWxwZXJzIjo2MjYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjYyOCwiLi9sYXlvdXRfZGVmYXVsdHMiOjYyOSwiLi9zY2FsZXMiOjYzMH1dLDYyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi9zY2FsZXMiKS5zY2FsZXM7ZS5leHBvcnRzPXtlZGl0VHlwZToiY2FsYyIsY29sb3JzY2FsZTp7ZWRpdFR5cGU6ImNhbGMiLHNlcXVlbnRpYWw6e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGRmbHQ6YS5SZWRzLGVkaXRUeXBlOiJjYWxjIn0sc2VxdWVudGlhbG1pbnVzOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0OmEuQmx1ZXMsZWRpdFR5cGU6ImNhbGMifSxkaXZlcmdpbmc6e3ZhbFR5cGU6ImNvbG9yc2NhbGUiLGRmbHQ6YS5SZEJ1LGVkaXRUeXBlOiJjYWxjIn19LGNvbG9yYXhpczpuKHtfaXNTdWJwbG90T2JqOiEwLGVkaXRUeXBlOiJjYWxjIn0saSgiIix7Y29sb3JBdHRyOiJjb3JyZXNwb25kaW5nIHRyYWNlIGNvbG9yIGFycmF5KHMpIixub0NvbG9yQXhpczohMCxzaG93U2NhbGVEZmx0OiEwfSkpfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4vYXR0cmlidXRlcyI6NjIyLCIuL3NjYWxlcyI6NjMwfV0sNjI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1yKCJjb2xvcnNjYWxlLnNlcXVlbnRpYWwiKSxyKCJjb2xvcnNjYWxlLnNlcXVlbnRpYWxtaW51cyIpLHIoImNvbG9yc2NhbGUuZGl2ZXJnaW5nIik7dmFyIHMsbCxjPWUuX2NvbG9yQXhlcztmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCxhLmNvbG9yYXhpcyx0LGUpfWZvcih2YXIgaCBpbiBjKXt2YXIgZj1jW2hdO2lmKGZbMF0pcz10W2hdfHx7fSwobD1pLm5ld0NvbnRhaW5lcihlLGgsImNvbG9yYXhpcyIpKS5fbmFtZT1oLG8ocyxsLGUsdSx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSk7ZWxzZXtmb3IodmFyIHA9MDtwPGZbMl0ubGVuZ3RoO3ArKylmWzJdW3BdKCk7ZGVsZXRlIGUuX2NvbG9yQXhlc1toXX19fX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6Nzg4LCIuL2RlZmF1bHRzIjo2MjUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjYyOH1dLDYzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIiksaT17R3JleXM6W1swLCJyZ2IoMCwwLDApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sWWxHbkJ1OltbMCwicmdiKDgsMjksODgpIl0sWy4xMjUsInJnYigzNyw1MiwxNDgpIl0sWy4yNSwicmdiKDM0LDk0LDE2OCkiXSxbLjM3NSwicmdiKDI5LDE0NSwxOTIpIl0sWy41LCJyZ2IoNjUsMTgyLDE5NikiXSxbLjYyNSwicmdiKDEyNywyMDUsMTg3KSJdLFsuNzUsInJnYigxOTksMjMzLDE4MCkiXSxbLjg3NSwicmdiKDIzNywyNDgsMjE3KSJdLFsxLCJyZ2IoMjU1LDI1NSwyMTcpIl1dLEdyZWVuczpbWzAsInJnYigwLDY4LDI3KSJdLFsuMTI1LCJyZ2IoMCwxMDksNDQpIl0sWy4yNSwicmdiKDM1LDEzOSw2OSkiXSxbLjM3NSwicmdiKDY1LDE3MSw5MykiXSxbLjUsInJnYigxMTYsMTk2LDExOCkiXSxbLjYyNSwicmdiKDE2MSwyMTcsMTU1KSJdLFsuNzUsInJnYigxOTksMjMzLDE5MikiXSxbLjg3NSwicmdiKDIyOSwyNDUsMjI0KSJdLFsxLCJyZ2IoMjQ3LDI1MiwyNDUpIl1dLFlsT3JSZDpbWzAsInJnYigxMjgsMCwzOCkiXSxbLjEyNSwicmdiKDE4OSwwLDM4KSJdLFsuMjUsInJnYigyMjcsMjYsMjgpIl0sWy4zNzUsInJnYigyNTIsNzgsNDIpIl0sWy41LCJyZ2IoMjUzLDE0MSw2MCkiXSxbLjYyNSwicmdiKDI1NCwxNzgsNzYpIl0sWy43NSwicmdiKDI1NCwyMTcsMTE4KSJdLFsuODc1LCJyZ2IoMjU1LDIzNywxNjApIl0sWzEsInJnYigyNTUsMjU1LDIwNCkiXV0sQmx1ZXJlZDpbWzAsInJnYigwLDAsMjU1KSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUmRCdTpbWzAsInJnYig1LDEwLDE3MikiXSxbLjM1LCJyZ2IoMTA2LDEzNywyNDcpIl0sWy41LCJyZ2IoMTkwLDE5MCwxOTApIl0sWy42LCJyZ2IoMjIwLDE3MCwxMzIpIl0sWy43LCJyZ2IoMjMwLDE0NSw5MCkiXSxbMSwicmdiKDE3OCwxMCwyOCkiXV0sUmVkczpbWzAsInJnYigyMjAsMjIwLDIyMCkiXSxbLjIsInJnYigyNDUsMTk1LDE1NykiXSxbLjQsInJnYigyNDUsMTYwLDEwNSkiXSxbMSwicmdiKDE3OCwxMCwyOCkiXV0sQmx1ZXM6W1swLCJyZ2IoNSwxMCwxNzIpIl0sWy4zNSwicmdiKDQwLDYwLDE5MCkiXSxbLjUsInJnYig3MCwxMDAsMjQ1KSJdLFsuNiwicmdiKDkwLDEyMCwyNDUpIl0sWy43LCJyZ2IoMTA2LDEzNywyNDcpIl0sWzEsInJnYigyMjAsMjIwLDIyMCkiXV0sUGljbmljOltbMCwicmdiKDAsMCwyNTUpIl0sWy4xLCJyZ2IoNTEsMTUzLDI1NSkiXSxbLjIsInJnYigxMDIsMjA0LDI1NSkiXSxbLjMsInJnYigxNTMsMjA0LDI1NSkiXSxbLjQsInJnYigyMDQsMjA0LDI1NSkiXSxbLjUsInJnYigyNTUsMjU1LDI1NSkiXSxbLjYsInJnYigyNTUsMjA0LDI1NSkiXSxbLjcsInJnYigyNTUsMTUzLDI1NSkiXSxbLjgsInJnYigyNTUsMTAyLDIwNCkiXSxbLjksInJnYigyNTUsMTAyLDEwMikiXSxbMSwicmdiKDI1NSwwLDApIl1dLFJhaW5ib3c6W1swLCJyZ2IoMTUwLDAsOTApIl0sWy4xMjUsInJnYigwLDAsMjAwKSJdLFsuMjUsInJnYigwLDI1LDI1NSkiXSxbLjM3NSwicmdiKDAsMTUyLDI1NSkiXSxbLjUsInJnYig0NCwyNTUsMTUwKSJdLFsuNjI1LCJyZ2IoMTUxLDI1NSwwKSJdLFsuNzUsInJnYigyNTUsMjM0LDApIl0sWy44NzUsInJnYigyNTUsMTExLDApIl0sWzEsInJnYigyNTUsMCwwKSJdXSxQb3J0bGFuZDpbWzAsInJnYigxMiw1MSwxMzEpIl0sWy4yNSwicmdiKDEwLDEzNiwxODYpIl0sWy41LCJyZ2IoMjQyLDIxMSw1NikiXSxbLjc1LCJyZ2IoMjQyLDE0Myw1NikiXSxbMSwicmdiKDIxNywzMCwzMCkiXV0sSmV0OltbMCwicmdiKDAsMCwxMzEpIl0sWy4xMjUsInJnYigwLDYwLDE3MCkiXSxbLjM3NSwicmdiKDUsMjU1LDI1NSkiXSxbLjYyNSwicmdiKDI1NSwyNTUsMCkiXSxbLjg3NSwicmdiKDI1MCwwLDApIl0sWzEsInJnYigxMjgsMCwwKSJdXSxIb3Q6W1swLCJyZ2IoMCwwLDApIl0sWy4zLCJyZ2IoMjMwLDAsMCkiXSxbLjYsInJnYigyNTUsMjEwLDApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sQmxhY2tib2R5OltbMCwicmdiKDAsMCwwKSJdLFsuMiwicmdiKDIzMCwwLDApIl0sWy40LCJyZ2IoMjMwLDIxMCwwKSJdLFsuNywicmdiKDI1NSwyNTUsMjU1KSJdLFsxLCJyZ2IoMTYwLDIwMCwyNTUpIl1dLEVhcnRoOltbMCwicmdiKDAsMCwxMzApIl0sWy4xLCJyZ2IoMCwxODAsMTgwKSJdLFsuMiwicmdiKDQwLDIxMCw0MCkiXSxbLjQsInJnYigyMzAsMjMwLDUwKSJdLFsuNiwicmdiKDEyMCw3MCwyMCkiXSxbMSwicmdiKDI1NSwyNTUsMjU1KSJdXSxFbGVjdHJpYzpbWzAsInJnYigwLDAsMCkiXSxbLjE1LCJyZ2IoMzAsMCwxMDApIl0sWy40LCJyZ2IoMTIwLDAsMTAwKSJdLFsuNiwicmdiKDE2MCw5MCwwKSJdLFsuOCwicmdiKDIzMCwyMDAsMCkiXSxbMSwicmdiKDI1NSwyNTAsMjIwKSJdXSxWaXJpZGlzOltbMCwiIzQ0MDE1NCJdLFsuMDYyNzQ1MDk4MDM5MjE1NjksIiM0ODE4NmEiXSxbLjEyNTQ5MDE5NjA3ODQzMTM3LCIjNDcyZDdiIl0sWy4xODgyMzUyOTQxMTc2NDcwNiwiIzQyNDA4NiJdLFsuMjUwOTgwMzkyMTU2ODYyNzQsIiMzYjUyOGIiXSxbLjMxMzcyNTQ5MDE5NjA3ODQsIiMzMzYzOGQiXSxbLjM3NjQ3MDU4ODIzNTI5NDEsIiMyYzcyOGUiXSxbLjQzOTIxNTY4NjI3NDUwOTgsIiMyNjgyOGUiXSxbLjUwMTk2MDc4NDMxMzcyNTUsIiMyMTkxOGMiXSxbLjU2NDcwNTg4MjM1Mjk0MTIsIiMxZmEwODgiXSxbLjYyNzQ1MDk4MDM5MjE1NjksIiMyOGFlODAiXSxbLjY5MDE5NjA3ODQzMTM3MjUsIiMzZmJjNzMiXSxbLjc1Mjk0MTE3NjQ3MDU4ODIsIiM1ZWM5NjIiXSxbLjgxNTY4NjI3NDUwOTgwMzksIiM4NGQ0NGIiXSxbLjg3ODQzMTM3MjU0OTAxOTYsIiNhZGRjMzAiXSxbLjk0MTE3NjQ3MDU4ODIzNTMsIiNkOGUyMTkiXSxbMSwiI2ZkZTcyNSJdXSxDaXZpZGlzOltbMCwicmdiKDAsMzIsNzYpIl0sWy4wNTg4MjQsInJnYigwLDQyLDEwMikiXSxbLjExNzY0NywicmdiKDAsNTIsMTEwKSJdLFsuMTc2NDcxLCJyZ2IoMzksNjMsMTA4KSJdLFsuMjM1Mjk0LCJyZ2IoNjAsNzQsMTA3KSJdLFsuMjk0MTE4LCJyZ2IoNzYsODUsMTA3KSJdLFsuMzUyOTQxLCJyZ2IoOTEsOTUsMTA5KSJdLFsuNDExNzY1LCJyZ2IoMTA0LDEwNiwxMTIpIl0sWy40NzA1ODgsInJnYigxMTcsMTE3LDExNykiXSxbLjUyOTQxMiwicmdiKDEzMSwxMjksMTIwKSJdLFsuNTg4MjM1LCJyZ2IoMTQ2LDE0MCwxMjApIl0sWy42NDcwNTksInJnYigxNjEsMTUyLDExOCkiXSxbLjcwNTg4MiwicmdiKDE3NiwxNjUsMTE0KSJdLFsuNzY0NzA2LCJyZ2IoMTkyLDE3NywxMDkpIl0sWy44MjM1MjksInJnYigyMDksMTkxLDEwMikiXSxbLjg4MjM1MywicmdiKDIyNSwyMDQsOTIpIl0sWy45NDExNzYsInJnYigyNDMsMjE5LDc5KSJdLFsxLCJyZ2IoMjU1LDIzMyw2OSkiXV19LGE9aS5SZEJ1O2Z1bmN0aW9uIG8odCl7dmFyIGU9MDtpZighQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8MilyZXR1cm4hMTtpZighdFswXXx8IXRbdC5sZW5ndGgtMV0pcmV0dXJuITE7aWYoMCE9K3RbMF1bMF18fDEhPSt0W3QubGVuZ3RoLTFdWzBdKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO2lmKDIhPT1pLmxlbmd0aHx8K2lbMF08ZXx8IW4oaVsxXSkuaXNWYWxpZCgpKXJldHVybiExO2U9K2lbMF19cmV0dXJuITB9ZS5leHBvcnRzPXtzY2FsZXM6aSxkZWZhdWx0U2NhbGU6YSxnZXQ6ZnVuY3Rpb24odCxlKXtpZihlfHwoZT1hKSwhdClyZXR1cm4gZTtmdW5jdGlvbiByKCl7dHJ5e3Q9aVt0XXx8SlNPTi5wYXJzZSh0KX1jYXRjaChyKXt0PWV9fXJldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHIoKSwic3RyaW5nIj09dHlwZW9mIHQmJnIoKSksbyh0KT90OmV9LGlzVmFsaWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PWlbdF18fG8odCl9fX0se3Rpbnljb2xvcjI6NTQ4fV0sNjMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSh0LXIpLyhuLXIpLG89YStlLyhuLXIpLHM9KGErbykvMjtyZXR1cm4ibGVmdCI9PT1pfHwiYm90dG9tIj09PWk/YToiY2VudGVyIj09PWl8fCJtaWRkbGUiPT09aT9zOiJyaWdodCI9PT1pfHwidG9wIj09PWk/bzphPDIvMy1zP2E6bz40LzMtcz9vOnN9fSx7fV0sNjMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9W1sic3ctcmVzaXplIiwicy1yZXNpemUiLCJzZS1yZXNpemUiXSxbInctcmVzaXplIiwibW92ZSIsImUtcmVzaXplIl0sWyJudy1yZXNpemUiLCJuLXJlc2l6ZSIsIm5lLXJlc2l6ZSJdXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIHQ9ImxlZnQiPT09cj8wOiJjZW50ZXIiPT09cj8xOiJyaWdodCI9PT1yPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKnQpLDAsMiksZT0iYm90dG9tIj09PWE/MDoibWlkZGxlIj09PWE/MToidG9wIj09PWE/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqZSksMCwyKSxpW2VdW3RdfX0seyIuLi8uLi9saWIiOjc1MH1dLDYzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnNlbGVjdE1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuImxhc3NvIj09PXR8fCJzZWxlY3QiPT09dH0sci5kcmF3TW9kZT1mdW5jdGlvbih0KXtyZXR1cm4iZHJhd2Nsb3NlZHBhdGgiPT09dHx8ImRyYXdvcGVucGF0aCI9PT10fHwiZHJhd2xpbmUiPT09dHx8ImRyYXdyZWN0Ij09PXR8fCJkcmF3Y2lyY2xlIj09PXR9LHIub3Blbk1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuImRyYXdsaW5lIj09PXR8fCJkcmF3b3BlbnBhdGgiPT09dH0sci5yZWN0TW9kZT1mdW5jdGlvbih0KXtyZXR1cm4ic2VsZWN0Ij09PXR8fCJkcmF3bGluZSI9PT10fHwiZHJhd3JlY3QiPT09dHx8ImRyYXdjaXJjbGUiPT09dH0sci5mcmVlTW9kZT1mdW5jdGlvbih0KXtyZXR1cm4ibGFzc28iPT09dHx8ImRyYXdjbG9zZWRwYXRoIj09PXR8fCJkcmF3b3BlbnBhdGgiPT09dH0sci5zZWxlY3RpbmdPckRyYXdpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZnJlZU1vZGUodCl8fHIucmVjdE1vZGUodCl9fSx7fV0sNjM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGk9dCgiaGFzLWhvdmVyIiksYT10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKSxvPXQoIi4uLy4uL2xpYiIpLnJlbW92ZUVsZW1lbnQscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksbD1lLmV4cG9ydHM9e307bC5hbGlnbj10KCIuL2FsaWduIiksbC5nZXRDdXJzb3I9dCgiLi9jdXJzb3IiKTt2YXIgYz10KCIuL3VuaG92ZXIiKTtmdW5jdGlvbiB1KCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImRyYWdjb3ZlciI7dmFyIGU9dC5zdHlsZTtyZXR1cm4gZS5wb3NpdGlvbj0iZml4ZWQiLGUubGVmdD0wLGUucmlnaHQ9MCxlLnRvcD0wLGUuYm90dG9tPTAsZS56SW5kZXg9OTk5OTk5OTk5LGUuYmFja2dyb3VuZD0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fWZ1bmN0aW9uIGgodCl7cmV0dXJuIG4odC5jaGFuZ2VkVG91Y2hlcz90LmNoYW5nZWRUb3VjaGVzWzBdOnQsZG9jdW1lbnQuYm9keSl9bC51bmhvdmVyPWMud3JhcHBlZCxsLnVuaG92ZXJSYXc9Yy5yYXcsbC5pbml0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixjLGYscCxkLGcsbT10LmdkLHY9MSx5PW0uX2NvbnRleHQuZG91YmxlQ2xpY2tEZWxheSx4PXQuZWxlbWVudDttLl9tb3VzZURvd25UaW1lfHwobS5fbW91c2VEb3duVGltZT0wKSx4LnN0eWxlLnBvaW50ZXJFdmVudHM9ImFsbCIseC5vbm1vdXNlZG93bj1fLGE/KHguX29udG91Y2hzdGFydCYmeC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix4Ll9vbnRvdWNoc3RhcnQpLHguX29udG91Y2hzdGFydD1fLHguYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsXyx7cGFzc2l2ZTohMX0pKTp4Lm9udG91Y2hzdGFydD1fO3ZhciBiPXQuY2xhbXBGbnx8ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmFicyh0KTxyJiYodD0wKSxNYXRoLmFicyhlKTxyJiYoZT0wKSxbdCxlXX07ZnVuY3Rpb24gXyhhKXttLl9kcmFnZ2VkPSExLG0uX2RyYWdnaW5nPSEwO3ZhciBvPWgoYSk7ZT1vWzBdLHI9b1sxXSxkPWEudGFyZ2V0LHA9YSxnPTI9PT1hLmJ1dHRvbnN8fGEuY3RybEtleSwidW5kZWZpbmVkIj09dHlwZW9mIGEuY2xpZW50WCYmInVuZGVmaW5lZCI9PXR5cGVvZiBhLmNsaWVudFkmJihhLmNsaWVudFg9ZSxhLmNsaWVudFk9ciksKG49KG5ldyBEYXRlKS5nZXRUaW1lKCkpLW0uX21vdXNlRG93blRpbWU8eT92Kz0xOih2PTEsbS5fbW91c2VEb3duVGltZT1uKSx0LnByZXBGbiYmdC5wcmVwRm4oYSxlLHIpLGkmJiFnPyhmPXUoKSkuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHgpLmN1cnNvcjppfHwoZj1kb2N1bWVudCxjPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY3Vyc29yLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoeCkuY3Vyc29yKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixUKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsVCksITEhPT10LmRyYWdtb2RlJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix3LHtwYXNzaXZlOiExfSkpfWZ1bmN0aW9uIHcobil7bi5wcmV2ZW50RGVmYXVsdCgpO3ZhciBpPWgobiksYT10Lm1pbkRyYWd8fHMuTUlORFJBRyxvPWIoaVswXS1lLGlbMV0tcixhKSxjPW9bMF0sdT1vWzFdOyhjfHx1KSYmKG0uX2RyYWdnZWQ9ITAsbC51bmhvdmVyKG0pKSxtLl9kcmFnZ2VkJiZ0Lm1vdmVGbiYmIWcmJihtLl9kcmFnZGF0YT17ZWxlbWVudDp4LGR4OmMsZHk6dX0sdC5tb3ZlRm4oYyx1KSl9ZnVuY3Rpb24gVChlKXtpZihkZWxldGUgbS5fZHJhZ2RhdGEsITEhPT10LmRyYWdtb2RlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix3KSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsVCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLFQpLGk/byhmKTpjJiYoZi5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPWMsYz1udWxsKSxtLl9kcmFnZ2luZyl7aWYobS5fZHJhZ2dpbmc9ITEsKG5ldyBEYXRlKS5nZXRUaW1lKCktbS5fbW91c2VEb3duVGltZT55JiYodj1NYXRoLm1heCh2LTEsMSkpLG0uX2RyYWdnZWQpdC5kb25lRm4mJnQuZG9uZUZuKCk7ZWxzZSBpZih0LmNsaWNrRm4mJnQuY2xpY2tGbih2LHApLCFnKXt2YXIgcjt0cnl7cj1uZXcgTW91c2VFdmVudCgiY2xpY2siLGUpfWNhdGNoKHQpe3ZhciBuPWgoZSk7KHI9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIikpLmluaXRNb3VzZUV2ZW50KCJjbGljayIsZS5idWJibGVzLGUuY2FuY2VsYWJsZSxlLnZpZXcsZS5kZXRhaWwsZS5zY3JlZW5YLGUuc2NyZWVuWSxuWzBdLG5bMV0sZS5jdHJsS2V5LGUuYWx0S2V5LGUuc2hpZnRLZXksZS5tZXRhS2V5LGUuYnV0dG9uLGUucmVsYXRlZFRhcmdldCl9ZC5kaXNwYXRjaEV2ZW50KHIpfW0uX2RyYWdnaW5nPSExLG0uX2RyYWdnZWQ9ITF9ZWxzZSBtLl9kcmFnZ2VkPSExfX0sbC5jb3ZlclNsaXA9dX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6ODA1LCIuL2FsaWduIjo2MzEsIi4vY3Vyc29yIjo2MzIsIi4vdW5ob3ZlciI6NjM1LCJoYXMtaG92ZXIiOjQxNCwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MTUsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDU4fV0sNjM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ldmVudHMiKSxpPXQoIi4uLy4uL2xpYi90aHJvdHRsZSIpLGE9dCgiLi4vLi4vbGliL2RvbSIpLmdldEdyYXBoRGl2LG89dCgiLi4vZngvY29uc3RhbnRzIikscz1lLmV4cG9ydHM9e307cy53cmFwcGVkPWZ1bmN0aW9uKHQsZSxyKXsodD1hKHQpKS5fZnVsbExheW91dCYmaS5jbGVhcih0Ll9mdWxsTGF5b3V0Ll91aWQrby5IT1ZFUklEKSxzLnJhdyh0LGUscil9LHMucmF3PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPXQuX2hvdmVyZGF0YTtlfHwoZT17fSksZS50YXJnZXQmJiExPT09bi50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpfHwoci5faG92ZXJsYXllci5zZWxlY3RBbGwoImciKS5yZW1vdmUoKSxyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgibGluZSIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJjaXJjbGUiKS5yZW1vdmUoKSx0Ll9ob3ZlcmRhdGE9dm9pZCAwLGUudGFyZ2V0JiZpJiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6aX0pKX19LHsiLi4vLi4vbGliL2RvbSI6NzM4LCIuLi8uLi9saWIvZXZlbnRzIjo3MzksIi4uLy4uL2xpYi90aHJvdHRsZSI6Nzc1LCIuLi9meC9jb25zdGFudHMiOjY0OX1dLDYzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmRhc2g9e3ZhbFR5cGU6InN0cmluZyIsdmFsdWVzOlsic29saWQiLCJkb3QiLCJkYXNoIiwibG9uZ2Rhc2giLCJkYXNoZG90IiwibG9uZ2Rhc2hkb3QiXSxkZmx0OiJzb2xpZCIsZWRpdFR5cGU6InN0eWxlIn19LHt9XSw2Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCJ0aW55Y29sb3IyIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vY29sb3IiKSxsPXQoIi4uL2NvbG9yc2NhbGUiKSxjPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGY9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxwPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxkPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksZz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSx2PWUuZXhwb3J0cz17fTt2LmZvbnQ9ZnVuY3Rpb24odCxlLHIsbil7Yy5pc1BsYWluT2JqZWN0KGUpJiYobj1lLmNvbG9yLHI9ZS5zaXplLGU9ZS5mYW1pbHkpLGUmJnQuc3R5bGUoImZvbnQtZmFtaWx5IixlKSxyKzEmJnQuc3R5bGUoImZvbnQtc2l6ZSIscisicHgiKSxuJiZ0LmNhbGwocy5maWxsLG4pfSx2LnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyKXt0LmF0dHIoIngiLGUpLmF0dHIoInkiLHIpfSx2LnNldFNpemU9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigid2lkdGgiLGUpLmF0dHIoImhlaWdodCIscil9LHYuc2V0UmVjdD1mdW5jdGlvbih0LGUscixuLGkpe3QuY2FsbCh2LnNldFBvc2l0aW9uLGUscikuY2FsbCh2LnNldFNpemUsbixpKX0sdi50cmFuc2xhdGVQb2ludD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1yLmMycCh0LngpLG89bi5jMnAodC55KTtyZXR1cm4hIShpKGEpJiZpKG8pJiZlLm5vZGUoKSkmJigidGV4dCI9PT1lLm5vZGUoKS5ub2RlTmFtZT9lLmF0dHIoIngiLGEpLmF0dHIoInkiLG8pOmUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYSsiLCIrbysiKSIpLCEwKX0sdi50cmFuc2xhdGVQb2ludHM9ZnVuY3Rpb24odCxlLHIpe3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcyk7di50cmFuc2xhdGVQb2ludCh0LGksZSxyKX0pKX0sdi5oaWRlT3V0c2lkZVJhbmdlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2UuYXR0cigiZGlzcGxheSIsci5pc1B0V2l0aGluUmFuZ2UodCxpKSYmbi5pc1B0V2l0aGluUmFuZ2UodCxhKT9udWxsOiJub25lIil9LHYuaGlkZU91dHNpZGVSYW5nZVBvaW50cz1mdW5jdGlvbih0LGUpe2lmKGUuX2hhc0NsaXBPbkF4aXNGYWxzZSl7dmFyIHI9ZS54YXhpcyxpPWUueWF4aXM7dC5lYWNoKChmdW5jdGlvbihlKXt2YXIgYT1lWzBdLnRyYWNlLHM9YS54Y2FsZW5kYXIsbD1hLnljYWxlbmRhcixjPW8udHJhY2VJcyhhLCJiYXItbGlrZSIpPyIuYmFydGV4dCI6Ii5wb2ludCwudGV4dHBvaW50Ijt0LnNlbGVjdEFsbChjKS5lYWNoKChmdW5jdGlvbih0KXt2LmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh0LG4uc2VsZWN0KHRoaXMpLHIsaSxzLGwpfSkpfSkpfX0sdi5jcmlzcFJvdW5kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmaShlKT90Ll9jb250ZXh0LnN0YXRpY1Bsb3Q/ZTplPDE/MTpNYXRoLnJvdW5kKGUpOnJ8fDB9LHYuc2luZ2xlTGluZVN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7ZS5zdHlsZSgiZmlsbCIsIm5vbmUiKTt2YXIgYT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89cnx8YS53aWR0aHx8MCxsPWl8fGEuZGFzaHx8IiI7cy5zdHJva2UoZSxufHxhLmNvbG9yKSx2LmRhc2hMaW5lKGUsbCxvKX0sdi5saW5lR3JvdXBTdHlsZT1mdW5jdGlvbih0LGUscixpKXt0LnN0eWxlKCJmaWxsIiwibm9uZSIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBhPSgoKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sbz1lfHxhLndpZHRofHwwLGw9aXx8YS5kYXNofHwiIjtuLnNlbGVjdCh0aGlzKS5jYWxsKHMuc3Ryb2tlLHJ8fGEuY29sb3IpLmNhbGwodi5kYXNoTGluZSxsLG8pfSkpfSx2LmRhc2hMaW5lPWZ1bmN0aW9uKHQsZSxyKXtyPStyfHwwLGU9di5kYXNoU3R5bGUoZSxyKSx0LnN0eWxlKHsic3Ryb2tlLWRhc2hhcnJheSI6ZSwic3Ryb2tlLXdpZHRoIjpyKyJweCJ9KX0sdi5kYXNoU3R5bGU9ZnVuY3Rpb24odCxlKXtlPStlfHwxO3ZhciByPU1hdGgubWF4KGUsMyk7cmV0dXJuInNvbGlkIj09PXQ/dD0iIjoiZG90Ij09PXQ/dD1yKyJweCwiK3IrInB4IjoiZGFzaCI9PT10P3Q9MypyKyJweCwiKzMqcisicHgiOiJsb25nZGFzaCI9PT10P3Q9NSpyKyJweCwiKzUqcisicHgiOiJkYXNoZG90Ij09PXQ/dD0zKnIrInB4LCIrcisicHgsIityKyJweCwiK3IrInB4IjoibG9uZ2Rhc2hkb3QiPT09dCYmKHQ9NSpyKyJweCwiKzIqcisicHgsIityKyJweCwiKzIqcisicHgiKSx0fSx2LnNpbmdsZUZpbGxTdHlsZT1mdW5jdGlvbih0KXt2YXIgZT0oKChuLnNlbGVjdCh0Lm5vZGUoKSkuZGF0YSgpWzBdfHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmZpbGxjb2xvcjtlJiZ0LmNhbGwocy5maWxsLGUpfSx2LmZpbGxHcm91cFN0eWxlPWZ1bmN0aW9uKHQpe3Quc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7dFswXS50cmFjZSYmZS5jYWxsKHMuZmlsbCx0WzBdLnRyYWNlLmZpbGxjb2xvcil9KSl9O3ZhciB5PXQoIi4vc3ltYm9sX2RlZnMiKTt2LnN5bWJvbE5hbWVzPVtdLHYuc3ltYm9sRnVuY3M9W10sdi5zeW1ib2xOZWVkTGluZXM9e30sdi5zeW1ib2xOb0RvdD17fSx2LnN5bWJvbE5vRmlsbD17fSx2LnN5bWJvbExpc3Q9W10sT2JqZWN0LmtleXMoeSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9eVt0XSxyPWUubjt2LnN5bWJvbExpc3QucHVzaChyLFN0cmluZyhyKSx0LHIrMTAwLFN0cmluZyhyKzEwMCksdCsiLW9wZW4iKSx2LnN5bWJvbE5hbWVzW3JdPXQsdi5zeW1ib2xGdW5jc1tyXT1lLmYsZS5uZWVkTGluZSYmKHYuc3ltYm9sTmVlZExpbmVzW3JdPSEwKSxlLm5vRG90P3Yuc3ltYm9sTm9Eb3Rbcl09ITA6di5zeW1ib2xMaXN0LnB1c2gocisyMDAsU3RyaW5nKHIrMjAwKSx0KyItZG90IixyKzMwMCxTdHJpbmcociszMDApLHQrIi1vcGVuLWRvdCIpLGUubm9GaWxsJiYodi5zeW1ib2xOb0ZpbGxbcl09ITApfSkpO3ZhciB4PXYuc3ltYm9sTmFtZXMubGVuZ3RoO2Z1bmN0aW9uIGIodCxlKXt2YXIgcj10JTEwMDtyZXR1cm4gdi5zeW1ib2xGdW5jc1tyXShlKSsodD49MjAwPyJNMCwwLjVMMC41LDBMMCwtMC41TC0wLjUsMFoiOiIiKX12LnN5bWJvbE51bWJlcj1mdW5jdGlvbih0KXtpZihpKHQpKXQ9K3Q7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPTA7dC5pbmRleE9mKCItb3BlbiIpPjAmJihlPTEwMCx0PXQucmVwbGFjZSgiLW9wZW4iLCIiKSksdC5pbmRleE9mKCItZG90Iik+MCYmKGUrPTIwMCx0PXQucmVwbGFjZSgiLWRvdCIsIiIpKSwodD12LnN5bWJvbE5hbWVzLmluZGV4T2YodCkpPj0wJiYodCs9ZSl9cmV0dXJuIHQlMTAwPj14fHx0Pj00MDA/MDpNYXRoLmZsb29yKE1hdGgubWF4KHQsMCkpfTt2YXIgXz17eDE6MSx4MjowLHkxOjAseTI6MH0sdz17eDE6MCx4MjowLHkxOjEseTI6MH0sVD1uLmZvcm1hdCgifi4xZiIpLGs9e3JhZGlhbDp7bm9kZToicmFkaWFsR3JhZGllbnQifSxyYWRpYWxyZXZlcnNlZDp7bm9kZToicmFkaWFsR3JhZGllbnQiLHJldmVyc2VkOiEwfSxob3Jpem9udGFsOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6X30saG9yaXpvbnRhbHJldmVyc2VkOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6XyxyZXZlcnNlZDohMH0sdmVydGljYWw6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczp3fSx2ZXJ0aWNhbHJldmVyc2VkOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6dyxyZXZlcnNlZDohMH19O3YuZ3JhZGllbnQ9ZnVuY3Rpb24odCxlLHIsaSxvLGwpe2Zvcih2YXIgdT1vLmxlbmd0aCxoPWtbaV0sZj1uZXcgQXJyYXkodSkscD0wO3A8dTtwKyspaC5yZXZlcnNlZD9mW3UtMS1wXT1bVCgxMDAqKDEtb1twXVswXSkpLG9bcF1bMV1dOmZbcF09W1QoMTAwKm9bcF1bMF0pLG9bcF1bMV1dO3ZhciBkPWUuX2Z1bGxMYXlvdXQsZz0iZyIrZC5fdWlkKyItIityLG09ZC5fZGVmcy5zZWxlY3QoIi5ncmFkaWVudHMiKS5zZWxlY3RBbGwoIiMiK2cpLmRhdGEoW2krZi5qb2luKCI7IildLGMuaWRlbnRpdHkpO20uZXhpdCgpLnJlbW92ZSgpLG0uZW50ZXIoKS5hcHBlbmQoaC5ub2RlKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2guYXR0cnMmJnQuYXR0cihoLmF0dHJzKSx0LmF0dHIoImlkIixnKTt2YXIgZT10LnNlbGVjdEFsbCgic3RvcCIpLmRhdGEoZik7ZS5leGl0KCkucmVtb3ZlKCksZS5lbnRlcigpLmFwcGVuZCgic3RvcCIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9YSh0WzFdKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtvZmZzZXQ6dFswXSsiJSIsInN0b3AtY29sb3IiOnMudGlueVJHQihlKSwic3RvcC1vcGFjaXR5IjplLmdldEFscGhhKCl9KX0pKX0pKSx0LnN0eWxlKGwseihnLGUpKS5zdHlsZShsKyItb3BhY2l0eSIsbnVsbCk7dmFyIHY9ZnVuY3Rpb24odCl7cmV0dXJuIi4iK3QuYXR0cigiY2xhc3MiKS5yZXBsYWNlKC9ccy9nLCIuIil9LHk9dihuLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKSkrIj4iK3YodCk7ZC5fZ3JhZGllbnRVcmxRdWVyeVBhcnRzW3ldPTF9LHYuaW5pdEdyYWRpZW50cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2MuZW5zdXJlU2luZ2xlKGUuX2RlZnMsImciLCJncmFkaWVudHMiKS5zZWxlY3RBbGwoImxpbmVhckdyYWRpZW50LHJhZGlhbEdyYWRpZW50IikucmVtb3ZlKCksZS5fZ3JhZGllbnRVcmxRdWVyeVBhcnRzPXt9fSx2LnBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIpe2lmKHQuc2l6ZSgpKXt2YXIgaT12Lm1ha2VQb2ludFN0eWxlRm5zKGUpO3QuZWFjaCgoZnVuY3Rpb24odCl7di5zaW5nbGVQb2ludFN0eWxlKHQsbi5zZWxlY3QodGhpcyksZSxpLHIpfSkpfX0sdi5zaW5nbGVQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ci5tYXJrZXIsbz1hLmxpbmU7aWYoZS5zdHlsZSgib3BhY2l0eSIsbi5zZWxlY3RlZE9wYWNpdHlGbj9uLnNlbGVjdGVkT3BhY2l0eUZuKHQpOnZvaWQgMD09PXQubW8/YS5vcGFjaXR5OnQubW8pLG4ubXMybXJjKXt2YXIgbDtsPSJ2YXJpb3VzIj09PXQubXN8fCJ2YXJpb3VzIj09PWEuc2l6ZT8zOm4ubXMybXJjKHQubXMpLHQubXJjPWwsbi5zZWxlY3RlZFNpemVGbiYmKGw9dC5tcmM9bi5zZWxlY3RlZFNpemVGbih0KSk7dmFyIHU9di5zeW1ib2xOdW1iZXIodC5teHx8YS5zeW1ib2wpfHwwO3Qub209dSUyMDA+PTEwMCxlLmF0dHIoImQiLGIodSxsKSl9dmFyIGgsZixwLGQ9ITE7aWYodC5zbylwPW8ub3V0bGllcndpZHRoLGY9by5vdXRsaWVyY29sb3IsaD1hLm91dGxpZXJjb2xvcjtlbHNle3ZhciBnPShvfHx7fSkud2lkdGg7cD0odC5tbHcrMXx8ZysxfHwodC50cmFjZT8odC50cmFjZS5tYXJrZXIubGluZXx8e30pLndpZHRoOjApKzEpLTF8fDAsZj0ibWxjImluIHQ/dC5tbGNjPW4ubGluZVNjYWxlKHQubWxjKTpjLmlzQXJyYXlPclR5cGVkQXJyYXkoby5jb2xvcik/cy5kZWZhdWx0TGluZTpvLmNvbG9yLGMuaXNBcnJheU9yVHlwZWRBcnJheShhLmNvbG9yKSYmKGg9cy5kZWZhdWx0TGluZSxkPSEwKSxoPSJtYyJpbiB0P3QubWNjPW4ubWFya2VyU2NhbGUodC5tYyk6YS5jb2xvcnx8InJnYmEoMCwwLDAsMCkiLG4uc2VsZWN0ZWRDb2xvckZuJiYoaD1uLnNlbGVjdGVkQ29sb3JGbih0KSl9aWYodC5vbSllLmNhbGwocy5zdHJva2UsaCkuc3R5bGUoeyJzdHJva2Utd2lkdGgiOihwfHwxKSsicHgiLGZpbGw6Im5vbmUifSk7ZWxzZXtlLnN0eWxlKCJzdHJva2Utd2lkdGgiLCh0LmlzQmxhbms/MDpwKSsicHgiKTt2YXIgbT1hLmdyYWRpZW50LHk9dC5tZ3Q7aWYoeT9kPSEwOnk9bSYmbS50eXBlLEFycmF5LmlzQXJyYXkoeSkmJih5PXlbMF0sa1t5XXx8KHk9MCkpLHkmJiJub25lIiE9PXkpe3ZhciB4PXQubWdjO3g/ZD0hMDp4PW0uY29sb3I7dmFyIF89ci51aWQ7ZCYmKF8rPSItIit0LmkpLHYuZ3JhZGllbnQoZSxpLF8seSxbWzAseF0sWzEsaF1dLCJmaWxsIil9ZWxzZSBzLmZpbGwoZSxoKTtwJiZzLnN0cm9rZShlLGYpfX0sdi5tYWtlUG9pbnRTdHlsZUZucz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQubWFya2VyO3JldHVybiBlLm1hcmtlclNjYWxlPXYudHJ5Q29sb3JzY2FsZShyLCIiKSxlLmxpbmVTY2FsZT12LnRyeUNvbG9yc2NhbGUociwibGluZSIpLG8udHJhY2VJcyh0LCJzeW1ib2xzIikmJihlLm1zMm1yYz1kLmlzQnViYmxlKHQpP2codCk6ZnVuY3Rpb24oKXtyZXR1cm4oci5zaXplfHw2KS8yfSksdC5zZWxlY3RlZHBvaW50cyYmYy5leHRlbmRGbGF0KGUsdi5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHQpKSxlfSx2Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30saT10Lm1hcmtlcnx8e30sYT1yLm1hcmtlcnx8e30scz1uLm1hcmtlcnx8e30sbD1pLm9wYWNpdHksdT1hLm9wYWNpdHksaD1zLm9wYWNpdHksZj12b2lkIDAhPT11LGQ9dm9pZCAwIT09aDsoYy5pc0FycmF5T3JUeXBlZEFycmF5KGwpfHxmfHxkKSYmKGUuc2VsZWN0ZWRPcGFjaXR5Rm49ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwPT09dC5tbz9pLm9wYWNpdHk6dC5tbztyZXR1cm4gdC5zZWxlY3RlZD9mP3U6ZTpkP2g6cCplfSk7dmFyIGc9aS5jb2xvcixtPWEuY29sb3Isdj1zLmNvbG9yOyhtfHx2KSYmKGUuc2VsZWN0ZWRDb2xvckZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWNjfHxnO3JldHVybiB0LnNlbGVjdGVkP218fGU6dnx8ZX0pO3ZhciB5PWkuc2l6ZSx4PWEuc2l6ZSxiPXMuc2l6ZSxfPXZvaWQgMCE9PXgsdz12b2lkIDAhPT1iO3JldHVybiBvLnRyYWNlSXModCwic3ltYm9scyIpJiYoX3x8dykmJihlLnNlbGVjdGVkU2l6ZUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubXJjfHx5LzI7cmV0dXJuIHQuc2VsZWN0ZWQ/Xz94LzI6ZTp3P2IvMjplfSksZX0sdi5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30saT10LnRleHRmb250fHx7fSxhPXIudGV4dGZvbnR8fHt9LG89bi50ZXh0Zm9udHx8e30sbD1pLmNvbG9yLGM9YS5jb2xvcix1PW8uY29sb3I7cmV0dXJuIGUuc2VsZWN0ZWRUZXh0Q29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10LnRjfHxsO3JldHVybiB0LnNlbGVjdGVkP2N8fGU6dXx8KGM/ZTpzLmFkZE9wYWNpdHkoZSxwKSl9LGV9LHYuc2VsZWN0ZWRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPXYubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyhlKSxpPWUubWFya2VyfHx7fSxhPVtdO3Iuc2VsZWN0ZWRPcGFjaXR5Rm4mJmEucHVzaCgoZnVuY3Rpb24odCxlKXt0LnN0eWxlKCJvcGFjaXR5IixyLnNlbGVjdGVkT3BhY2l0eUZuKGUpKX0pKSxyLnNlbGVjdGVkQ29sb3JGbiYmYS5wdXNoKChmdW5jdGlvbih0LGUpe3MuZmlsbCh0LHIuc2VsZWN0ZWRDb2xvckZuKGUpKX0pKSxyLnNlbGVjdGVkU2l6ZUZuJiZhLnB1c2goKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5teHx8aS5zeW1ib2x8fDAsYT1yLnNlbGVjdGVkU2l6ZUZuKGUpO3QuYXR0cigiZCIsYih2LnN5bWJvbE51bWJlcihuKSxhKSksZS5tcmMyPWF9KSksYS5sZW5ndGgmJnQuZWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4uc2VsZWN0KHRoaXMpLHI9MDtyPGEubGVuZ3RoO3IrKylhW3JdKGUsdCl9KSl9fSx2LnRyeUNvbG9yc2NhbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2MubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKTp0O2lmKHIpe3ZhciBuPXIuY29sb3I7aWYoKHIuY29sb3JzY2FsZXx8ci5fY29sb3JBeCkmJmMuaXNBcnJheU9yVHlwZWRBcnJheShuKSlyZXR1cm4gbC5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2Uocil9cmV0dXJuIGMuaWRlbnRpdHl9O3ZhciBNPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIEEodCxlLHIsaSl7dmFyIGE9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSksbz0tMSE9PWUuaW5kZXhPZigidG9wIik/InRvcCI6LTEhPT1lLmluZGV4T2YoImJvdHRvbSIpPyJib3R0b20iOiJtaWRkbGUiLHM9LTEhPT1lLmluZGV4T2YoImxlZnQiKT8iZW5kIjotMSE9PWUuaW5kZXhPZigicmlnaHQiKT8ic3RhcnQiOiJtaWRkbGUiLGw9aT9pLy44KzE6MCxjPSh1LmxpbmVDb3VudCh0KS0xKSpmKzEsaD1NW3NdKmwscD0uNzUqcitNW29dKmwrKE1bb10tMSkqYypyLzI7dC5hdHRyKCJ0ZXh0LWFuY2hvciIscyksYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitoKyIsIitwKyIpIil9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQudHN8fGUudGV4dGZvbnQuc2l6ZTtyZXR1cm4gaShyKSYmcj4wP3I6MH12LnRleHRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGk7aWYoZS5zZWxlY3RlZHBvaW50cyl7dmFyIGE9di5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7aT1hLnNlbGVjdGVkVGV4dENvbG9yRm59dmFyIG89ZS50ZXh0dGVtcGxhdGUscz1yLl9mdWxsTGF5b3V0O3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGE9bi5zZWxlY3QodGhpcyksbD1vP2MuZXh0cmFjdE9wdGlvbih0LGUsInR4dCIsInRleHR0ZW1wbGF0ZSIpOmMuZXh0cmFjdE9wdGlvbih0LGUsInR4IiwidGV4dCIpO2lmKGx8fDA9PT1sKXtpZihvKXt2YXIgaD1lLl9tb2R1bGUuZm9ybWF0TGFiZWxzP2UuX21vZHVsZS5mb3JtYXRMYWJlbHModCxlLHMpOnt9LGY9e307bShmLGUsdC5pKTt2YXIgcD1lLl9tZXRhfHx7fTtsPWMudGV4dHRlbXBsYXRlU3RyaW5nKGwsaCxzLl9kM2xvY2FsZSxmLHQscCl9dmFyIGQ9dC50cHx8ZS50ZXh0cG9zaXRpb24sZz1TKHQsZSkseT1pP2kodCk6dC50Y3x8ZS50ZXh0Zm9udC5jb2xvcjthLmNhbGwodi5mb250LHQudGZ8fGUudGV4dGZvbnQuZmFtaWx5LGcseSkudGV4dChsKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHIpLmNhbGwoQSxkLGcsdC5tcmMpfWVsc2UgYS5yZW1vdmUoKX0pKX19LHYuc2VsZWN0ZWRUZXh0U3R5bGU9ZnVuY3Rpb24odCxlKXtpZih0LnNpemUoKSYmZS5zZWxlY3RlZHBvaW50cyl7dmFyIHI9di5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPXIuc2VsZWN0ZWRUZXh0Q29sb3JGbih0KSxvPXQudHB8fGUudGV4dHBvc2l0aW9uLGw9Uyh0LGUpO3MuZmlsbChpLGEpLEEoaSxvLGwsdC5tcmMyfHx0Lm1yYyl9KSl9fTtmdW5jdGlvbiBFKHQsZSxyLGkpe3ZhciBhPXRbMF0tZVswXSxvPXRbMV0tZVsxXSxzPXJbMF0tZVswXSxsPXJbMV0tZVsxXSxjPU1hdGgucG93KGEqYStvKm8sLjI1KSx1PU1hdGgucG93KHMqcytsKmwsLjI1KSxoPSh1KnUqYS1jKmMqcykqaSxmPSh1KnUqby1jKmMqbCkqaSxwPTMqdSooYyt1KSxkPTMqYyooYyt1KTtyZXR1cm5bW24ucm91bmQoZVswXSsocCYmaC9wKSwyKSxuLnJvdW5kKGVbMV0rKHAmJmYvcCksMildLFtuLnJvdW5kKGVbMF0tKGQmJmgvZCksMiksbi5yb3VuZChlWzFdLShkJiZmL2QpLDIpXV19di5zbW9vdGhvcGVuPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm4iTSIrdC5qb2luKCJMIik7dmFyIHIsbj0iTSIrdFswXSxpPVtdO2ZvcihyPTE7cjx0Lmxlbmd0aC0xO3IrKylpLnB1c2goRSh0W3ItMV0sdFtyXSx0W3IrMV0sZSkpO2ZvcihuKz0iUSIraVswXVswXSsiICIrdFsxXSxyPTI7cjx0Lmxlbmd0aC0xO3IrKyluKz0iQyIraVtyLTJdWzFdKyIgIitpW3ItMV1bMF0rIiAiK3Rbcl07cmV0dXJuIG4rPSJRIitpW3QubGVuZ3RoLTNdWzFdKyIgIit0W3QubGVuZ3RoLTFdfSx2LnNtb290aGNsb3NlZD1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIk0iK3Quam9pbigiTCIpKyJaIjt2YXIgcixuPSJNIit0WzBdLGk9dC5sZW5ndGgtMSxhPVtFKHRbaV0sdFswXSx0WzFdLGUpXTtmb3Iocj0xO3I8aTtyKyspYS5wdXNoKEUodFtyLTFdLHRbcl0sdFtyKzFdLGUpKTtmb3IoYS5wdXNoKEUodFtpLTFdLHRbaV0sdFswXSxlKSkscj0xO3I8PWk7cisrKW4rPSJDIithW3ItMV1bMV0rIiAiK2Fbcl1bMF0rIiAiK3Rbcl07cmV0dXJuIG4rPSJDIithW2ldWzFdKyIgIithWzBdWzBdKyIgIit0WzBdKyJaIn07dmFyIEM9e2h2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIkgiK24ucm91bmQoZVswXSwyKSsiViIrbi5yb3VuZChlWzFdLDIpfSx2aDpmdW5jdGlvbih0LGUpe3JldHVybiJWIituLnJvdW5kKGVbMV0sMikrIkgiK24ucm91bmQoZVswXSwyKX0saHZoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIkgiK24ucm91bmQoKHRbMF0rZVswXSkvMiwyKSsiViIrbi5yb3VuZChlWzFdLDIpKyJIIituLnJvdW5kKGVbMF0sMil9LHZodjpmdW5jdGlvbih0LGUpe3JldHVybiJWIituLnJvdW5kKCh0WzFdK2VbMV0pLzIsMikrIkgiK24ucm91bmQoZVswXSwyKSsiViIrbi5yb3VuZChlWzFdLDIpfX0sTD1mdW5jdGlvbih0LGUpe3JldHVybiJMIituLnJvdW5kKGVbMF0sMikrIiwiK24ucm91bmQoZVsxXSwyKX07di5zdGVwcz1mdW5jdGlvbih0KXt2YXIgZT1DW3RdfHxMO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHI9Ik0iK24ucm91bmQodFswXVswXSwyKSsiLCIrbi5yb3VuZCh0WzBdWzFdLDIpLGk9MTtpPHQubGVuZ3RoO2krKylyKz1lKHRbaS0xXSx0W2ldKTtyZXR1cm4gcn19LHYubWFrZVRlc3Rlcj1mdW5jdGlvbigpe3ZhciB0PWMuZW5zdXJlU2luZ2xlQnlJZChuLnNlbGVjdCgiYm9keSIpLCJzdmciLCJqcy1wbG90bHktdGVzdGVyIiwoZnVuY3Rpb24odCl7dC5hdHRyKGguc3ZnQXR0cnMpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwMHB4Iix0b3A6Ii0xMDAwMHB4Iix3aWR0aDoiOTAwMHB4IixoZWlnaHQ6IjkwMDBweCIsInotaW5kZXgiOiIxIn0pfSkpLGU9Yy5lbnN1cmVTaW5nbGUodCwicGF0aCIsImpzLXJlZmVyZW5jZS1wb2ludCIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZCIsIk0wLDBIMVYxSDBaIikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOjAsZmlsbDoiYmxhY2sifSl9KSk7di50ZXN0ZXI9dCx2LnRlc3RyZWY9ZX0sdi5zYXZlZEJCb3hlcz17fTt2YXIgUD0wO2Z1bmN0aW9uIEkodCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtdW5mb3JtYXR0ZWQiKTtpZihudWxsIT09ZSlyZXR1cm4gZSt0LmdldEF0dHJpYnV0ZSgiZGF0YS1tYXRoIikrdC5nZXRBdHRyaWJ1dGUoInRleHQtYW5jaG9yIikrdC5nZXRBdHRyaWJ1dGUoInN0eWxlIil9ZnVuY3Rpb24geih0LGUpe2lmKCF0KXJldHVybiBudWxsO3ZhciByPWUuX2NvbnRleHQ7cmV0dXJuInVybCgnIisoci5fZXhwb3J0ZWRQbG90PyIiOnIuX2Jhc2VVcmx8fCIiKSsiIyIrdCsiJykifXYuYkJveD1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvO2lmKHJ8fChyPUkodCkpLHIpe2lmKGk9di5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gYy5leHRlbmRGbGF0KHt9LGkpfWVsc2UgaWYoMT09PXQuY2hpbGROb2Rlcy5sZW5ndGgpe3ZhciBzPXQuY2hpbGROb2Rlc1swXTtpZihyPUkocykpe3ZhciBsPStzLmdldEF0dHJpYnV0ZSgieCIpfHwwLGg9K3MuZ2V0QXR0cmlidXRlKCJ5Iil8fDAsZj1zLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIik7aWYoIWYpe3ZhciBwPXYuYkJveChzLCExLHIpO3JldHVybiBsJiYocC5sZWZ0Kz1sLHAucmlnaHQrPWwpLGgmJihwLnRvcCs9aCxwLmJvdHRvbSs9aCkscH1pZihyKz0ifiIrbCsifiIraCsifiIrZixpPXYuc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGMuZXh0ZW5kRmxhdCh7fSxpKX19ZT9hPXQ6KG89di50ZXN0ZXIubm9kZSgpLGE9dC5jbG9uZU5vZGUoITApLG8uYXBwZW5kQ2hpbGQoYSkpLG4uc2VsZWN0KGEpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApO3ZhciBkPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZz12LnRlc3RyZWYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2V8fG8ucmVtb3ZlQ2hpbGQoYSk7dmFyIG09e2hlaWdodDpkLmhlaWdodCx3aWR0aDpkLndpZHRoLGxlZnQ6ZC5sZWZ0LWcubGVmdCx0b3A6ZC50b3AtZy50b3AscmlnaHQ6ZC5yaWdodC1nLmxlZnQsYm90dG9tOmQuYm90dG9tLWcudG9wfTtyZXR1cm4gUD49MWU0JiYodi5zYXZlZEJCb3hlcz17fSxQPTApLHImJih2LnNhdmVkQkJveGVzW3JdPW0pLFArKyxjLmV4dGVuZEZsYXQoe30sbSl9LHYuc2V0Q2xpcFVybD1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJjbGlwLXBhdGgiLHooZSxyKSl9LHYuZ2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSJdKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoLy4qXGJ0cmFuc2xhdGVcKCgtP1xkKlwuP1xkKilbXi1cZF0qKC0/XGQqXC4/XGQqKVteXGRdLiovLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbigiICIpfSkpLnNwbGl0KCIgIik7cmV0dXJue3g6K2VbMF18fDAseTorZVsxXXx8MH19LHYuc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGk9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixhPXRbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwwLHI9cnx8MCxhPWEucmVwbGFjZSgvKFxidHJhbnNsYXRlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxhPShhKz0iIHRyYW5zbGF0ZSgiK2UrIiwgIityKyIpIikudHJpbSgpLHRbaV0oInRyYW5zZm9ybSIsYSksYX0sdi5nZXRTY2FsZT1mdW5jdGlvbih0KXt2YXIgZT0odFt0LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiXSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKC8uKlxic2NhbGVcKChcZCpcLj9cZCopW15cZF0qKFxkKlwuP1xkKilbXlxkXS4qLywoZnVuY3Rpb24odCxlLHIpe3JldHVybltlLHJdLmpvaW4oIiAiKX0pKS5zcGxpdCgiICIpO3JldHVybnt4OitlWzBdfHwxLHk6K2VbMV18fDF9fSx2LnNldFNjYWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGk9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixhPXRbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwxLHI9cnx8MSxhPWEucmVwbGFjZSgvKFxic2NhbGVcKC4qP1wpOz8pLywiIikudHJpbSgpLGE9KGErPSIgc2NhbGUoIitlKyIsICIrcisiKSIpLnRyaW0oKSx0W2ldKCJ0cmFuc2Zvcm0iLGEpLGF9O3ZhciBPPS9ccypzYy4qLzt2LnNldFBvaW50R3JvdXBTY2FsZT1mdW5jdGlvbih0LGUscil7aWYoZT1lfHwxLHI9cnx8MSx0KXt2YXIgbj0xPT09ZSYmMT09PXI/IiI6IiBzY2FsZSgiK2UrIiwiK3IrIikiO3QuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfHwiIikucmVwbGFjZShPLCIiKTt0PSh0Kz1uKS50cmltKCksdGhpcy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCl9KSl9fTt2YXIgRD0vdHJhbnNsYXRlXChbXildKlwpXHMqJC87di5zZXRUZXh0UG9pbnRzU2NhbGU9ZnVuY3Rpb24odCxlLHIpe3QmJnQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdCxpPW4uc2VsZWN0KHRoaXMpLGE9aS5zZWxlY3QoInRleHQiKTtpZihhLm5vZGUoKSl7dmFyIG89cGFyc2VGbG9hdChhLmF0dHIoIngiKXx8MCkscz1wYXJzZUZsb2F0KGEuYXR0cigieSIpfHwwKSxsPShpLmF0dHIoInRyYW5zZm9ybSIpfHwiIikubWF0Y2goRCk7dD0xPT09ZSYmMT09PXI/W106WyJ0cmFuc2xhdGUoIitvKyIsIitzKyIpIiwic2NhbGUoIitlKyIsIityKyIpIiwidHJhbnNsYXRlKCIrLW8rIiwiKy1zKyIpIl0sbCYmdC5wdXNoKGwpLGkuYXR0cigidHJhbnNmb3JtIix0LmpvaW4oIiAiKSl9fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY1MSwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzE3LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3MjQsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MjYsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc3NCwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMTc1LCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTE4MywiLi4vY29sb3IiOjYxNSwiLi4vY29sb3JzY2FsZSI6NjI3LCIuL3N5bWJvbF9kZWZzIjo2MzgsZDM6MTY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxLHRpbnljb2xvcjI6NTQ4fV0sNjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIik7ZS5leHBvcnRzPXtjaXJjbGU6e246MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifX0sc3F1YXJlOntuOjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9fSxkaWFtb25kOntuOjIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWiJ9fSxjcm9zczp7bjozLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNCp0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrcisiLCIrZSsiSCIrZSsiViIrcisiSC0iK2UrIlYiK2UrIkgtIityKyJWLSIrZSsiSC0iK2UrIlYtIityKyJIIitlKyJWLSIrZSsiSCIrcisiWiJ9fSx4OntuOjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC44KnQvTWF0aC5zcXJ0KDIpLDIpLHI9ImwiK2UrIiwiK2UsaT0ibCIrZSsiLC0iK2UsYT0ibC0iK2UrIiwtIitlLG89ImwtIitlKyIsIitlO3JldHVybiJNMCwiK2UrcitpK2EraSthK28rYStvK3IrbytyKyJaIn19LCJ0cmlhbmdsZS11cCI6e246NSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK2UrIiwiK24ucm91bmQodC8yLDIpKyJIIitlKyJMMCwtIituLnJvdW5kKHQsMikrIloifX0sInRyaWFuZ2xlLWRvd24iOntuOjYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIitlKyIsLSIrbi5yb3VuZCh0LzIsMikrIkgiK2UrIkwwLCIrbi5yb3VuZCh0LDIpKyJaIn19LCJ0cmlhbmdsZS1sZWZ0Ijp7bjo3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNIituLnJvdW5kKHQvMiwyKSsiLC0iK2UrIlYiK2UrIkwtIituLnJvdW5kKHQsMikrIiwwWiJ9fSwidHJpYW5nbGUtcmlnaHQiOntuOjgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIituLnJvdW5kKHQvMiwyKSsiLC0iK2UrIlYiK2UrIkwiK24ucm91bmQodCwyKSsiLDBaIn19LCJ0cmlhbmdsZS1uZSI6e246OSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0tIityKyIsLSIrZSsiSCIrZSsiViIrcisiWiJ9fSwidHJpYW5nbGUtc2UiOntuOjEwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrZSsiLC0iK3IrIlYiK2UrIkgtIityKyJaIn19LCJ0cmlhbmdsZS1zdyI6e246MTEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIityKyIsIitlKyJILSIrZSsiVi0iK3IrIloifX0sInRyaWFuZ2xlLW53Ijp7bjoxMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0tIitlKyIsIityKyJWLSIrZSsiSCIrcisiWiJ9fSxwZW50YWdvbjp7bjoxMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjk1MSp0LDIpLHI9bi5yb3VuZCguNTg4KnQsMiksaT1uLnJvdW5kKC10LDIpLGE9bi5yb3VuZCgtLjMwOSp0LDIpO3JldHVybiJNIitlKyIsIithKyJMIityKyIsIituLnJvdW5kKC44MDkqdCwyKSsiSC0iK3IrIkwtIitlKyIsIithKyJMMCwiK2krIloifX0saGV4YWdvbjp7bjoxNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC8yLDIpLGk9bi5yb3VuZCh0Kk1hdGguc3FydCgzKS8yLDIpO3JldHVybiJNIitpKyIsLSIrcisiViIrcisiTDAsIitlKyJMLSIraSsiLCIrcisiVi0iK3IrIkwwLC0iK2UrIloifX0saGV4YWdvbjI6e246MTUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvMiwyKSxpPW4ucm91bmQodCpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm4iTS0iK3IrIiwiK2krIkgiK3IrIkwiK2UrIiwwTCIrcisiLC0iK2krIkgtIityKyJMLSIrZSsiLDBaIn19LG9jdGFnb246e246MTYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC45MjQqdCwyKSxyPW4ucm91bmQoLjM4Myp0LDIpO3JldHVybiJNLSIrcisiLC0iK2UrIkgiK3IrIkwiK2UrIiwtIityKyJWIityKyJMIityKyIsIitlKyJILSIrcisiTC0iK2UrIiwiK3IrIlYtIityKyJaIn19LHN0YXI6e246MTcsZjpmdW5jdGlvbih0KXt2YXIgZT0xLjQqdCxyPW4ucm91bmQoLjIyNSplLDIpLGk9bi5yb3VuZCguOTUxKmUsMiksYT1uLnJvdW5kKC4zNjMqZSwyKSxvPW4ucm91bmQoLjU4OCplLDIpLHM9bi5yb3VuZCgtZSwyKSxsPW4ucm91bmQoLS4zMDkqZSwyKSxjPW4ucm91bmQoLjExOCplLDIpLHU9bi5yb3VuZCguODA5KmUsMik7cmV0dXJuIk0iK3IrIiwiK2wrIkgiK2krIkwiK2ErIiwiK2MrIkwiK28rIiwiK3UrIkwwLCIrbi5yb3VuZCguMzgyKmUsMikrIkwtIitvKyIsIit1KyJMLSIrYSsiLCIrYysiTC0iK2krIiwiK2wrIkgtIityKyJMMCwiK3MrIloifX0saGV4YWdyYW06e246MTgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42Nip0LDIpLHI9bi5yb3VuZCguMzgqdCwyKSxpPW4ucm91bmQoLjc2KnQsMik7cmV0dXJuIk0tIitpKyIsMGwtIityKyIsLSIrZSsiaCIraSsibCIrcisiLC0iK2UrImwiK3IrIiwiK2UrImgiK2krImwtIityKyIsIitlKyJsIityKyIsIitlKyJoLSIraSsibC0iK3IrIiwiK2UrImwtIityKyIsLSIrZSsiaC0iK2krIloifX0sInN0YXItdHJpYW5nbGUtdXAiOntuOjE5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0Kk1hdGguc3FydCgzKSouOCwyKSxyPW4ucm91bmQoLjgqdCwyKSxpPW4ucm91bmQoMS42KnQsMiksYT1uLnJvdW5kKDQqdCwyKSxvPSJBICIrYSsiLCIrYSsiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsIityK28rZSsiLCIrcitvKyIwLC0iK2krbysiLSIrZSsiLCIrcisiWiJ9fSwic3Rhci10cmlhbmdsZS1kb3duIjp7bjoyMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz0iQSAiK2ErIiwiK2ErIiAwIDAgMSAiO3JldHVybiJNIitlKyIsLSIrcitvKyItIitlKyIsLSIrcitvKyIwLCIraStvK2UrIiwtIityKyJaIn19LCJzdGFyLXNxdWFyZSI6e246MjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMSp0LDIpLHI9bi5yb3VuZCgyKnQsMiksaT0iQSAiK3IrIiwiK3IrIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLC0iK2UraSsiLSIrZSsiLCIrZStpK2UrIiwiK2UraStlKyIsLSIrZStpKyItIitlKyIsLSIrZSsiWiJ9fSwic3Rhci1kaWFtb25kIjp7bjoyMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMikscj1uLnJvdW5kKDEuOSp0LDIpLGk9IkEgIityKyIsIityKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwwIitpKyIwLCIrZStpK2UrIiwwIitpKyIwLC0iK2UraSsiLSIrZSsiLDBaIn19LCJkaWFtb25kLXRhbGwiOntuOjIzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNyp0LDIpLHI9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIityKyJMIitlKyIsMEwwLC0iK3IrIkwtIitlKyIsMFoifX0sImRpYW1vbmQtd2lkZSI6e246MjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpLHI9bi5yb3VuZCguNyp0LDIpO3JldHVybiJNMCwiK3IrIkwiK2UrIiwwTDAsLSIrcisiTC0iK2UrIiwwWiJ9fSxob3VyZ2xhc3M6e246MjUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkgtIitlKyJMIitlKyIsLSIrZSsiSC0iK2UrIloifSxub0RvdDohMH0sYm93dGllOntuOjI2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJWLSIrZSsiTC0iK2UrIiwiK2UrIlYtIitlKyJaIn0sbm9Eb3Q6ITB9LCJjaXJjbGUtY3Jvc3MiOntuOjI3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiY2lyY2xlLXgiOntuOjI4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0L01hdGguc3FydCgyKSwyKTtyZXR1cm4iTSIrcisiLCIrcisiTC0iK3IrIiwtIityKyJNIityKyIsLSIrcisiTC0iK3IrIiwiK3IrIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJzcXVhcmUtY3Jvc3MiOntuOjI5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sInNxdWFyZS14Ijp7bjozMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlKyJNIitlKyIsLSIrZSsiTC0iK2UrIiwiK2UrIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiZGlhbW9uZC1jcm9zcyI6e246MzEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWk0wLC0iK2UrIlYiK2UrIk0tIitlKyIsMEgiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiZGlhbW9uZC14Ijp7bjozMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMikscj1uLnJvdW5kKC42NSp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWk0tIityKyIsLSIrcisiTCIrcisiLCIrcisiTS0iK3IrIiwiK3IrIkwiK3IrIiwtIityfSxuZWVkTGluZTohMCxub0RvdDohMH0sImNyb3NzLXRoaW4iOntuOjMzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieC10aGluIjp7bjozNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlKyJNIitlKyIsLSIrZSsiTC0iK2UrIiwiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sYXN0ZXJpc2s6e246MzUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCguODUqdCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZSsiTSIrcisiLCIrcisiTC0iK3IrIiwtIityKyJNIityKyIsLSIrcisiTC0iK3IrIiwiK3J9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0saGFzaDp7bjozNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodC8yLDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIityKyJWLSIrcisibS0iK3IrIiwwViIrcisiTSIrcisiLCIrZSsiSC0iK3IrIm0wLC0iK3IrIkgiK3J9LG5lZWRMaW5lOiEwLG5vRmlsbDohMH0sInktdXAiOntuOjM3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0tIitlKyIsIitpKyJMMCwwTSIrZSsiLCIraSsiTDAsME0wLC0iK3IrIkwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ5LWRvd24iOntuOjM4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0tIitlKyIsLSIraSsiTDAsME0iK2UrIiwtIitpKyJMMCwwTTAsIityKyJMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieS1sZWZ0Ijp7bjozOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNIitpKyIsIitlKyJMMCwwTSIraSsiLC0iK2UrIkwwLDBNLSIrcisiLDBMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwieS1yaWdodCI6e246NDAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2krIiwiK2UrIkwwLDBNLSIraSsiLC0iK2UrIkwwLDBNIityKyIsMEwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLWV3Ijp7bjo0MSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMik7cmV0dXJuIk0iK2UrIiwwSC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtbnMiOntuOjQyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1uZSI6e246NDMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1udyI6e246NDQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkwtIitlKyIsLSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwiYXJyb3ctdXAiOntuOjQ1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwwTC0iK2UrIiwiK24ucm91bmQoMip0LDIpKyJIIitlKyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1kb3duIjp7bjo0NixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsMEwtIitlKyIsLSIrbi5yb3VuZCgyKnQsMikrIkgiK2UrIloifSxub0RvdDohMH0sImFycm93LWxlZnQiOntuOjQ3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLDBMIitlKyIsLSIrcisiViIrcisiWiJ9LG5vRG90OiEwfSwiYXJyb3ctcmlnaHQiOntuOjQ4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLDBMLSIrZSsiLC0iK3IrIlYiK3IrIloifSxub0RvdDohMH0sImFycm93LWJhci11cCI6e246NDksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0tIitlKyIsMEgiK2UrIk0wLDBMLSIrZSsiLCIrbi5yb3VuZCgyKnQsMikrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImFycm93LWJhci1kb3duIjp7bjo1MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTS0iK2UrIiwwSCIrZSsiTTAsMEwtIitlKyIsLSIrbi5yb3VuZCgyKnQsMikrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImFycm93LWJhci1sZWZ0Ijp7bjo1MSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0LDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwtIityKyJWIityKyJNMCwwTCIrZSsiLC0iK3IrIlYiK3IrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sImFycm93LWJhci1yaWdodCI6e246NTIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdCwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsLSIrcisiViIrcisiTTAsMEwtIitlKyIsLSIrcisiViIrcisiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfX19LHtkMzoxNjl9XSw2Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcmNlbnQiLCJjb25zdGFudCIsInNxcnQiLCJkYXRhIl0sZWRpdFR5cGU6ImNhbGMifSxzeW1tZXRyaWM6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0sYXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYXJyYXltaW51czp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVtaW51czp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJjYWxjIn0sdHJhY2VyZWY6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSx0cmFjZXJlZm1pbnVzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0sY29weV95c3R5bGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90In0sY29weV96c3R5bGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJzdHlsZSJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sdGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToic3R5bGUifX19fSx7fV0sNjQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi9jb21wdXRlX2Vycm9yIik7ZnVuY3Rpb24gbCh0LGUscixpKXt2YXIgbD1lWyJlcnJvcl8iK2ldfHx7fSxjPVtdO2lmKGwudmlzaWJsZSYmLTEhPT1bImxpbmVhciIsImxvZyJdLmluZGV4T2Yoci50eXBlKSl7Zm9yKHZhciB1PXMobCksaD0wO2g8dC5sZW5ndGg7aCsrKXt2YXIgZj10W2hdLHA9Zi5pO2lmKHZvaWQgMD09PXApcD1oO2Vsc2UgaWYobnVsbD09PXApY29udGludWU7dmFyIGQ9ZltpXTtpZihuKHIuYzJsKGQpKSl7dmFyIGc9dShkLHApO2lmKG4oZ1swXSkmJm4oZ1sxXSkpe3ZhciBtPWZbaSsicyJdPWQtZ1swXSx2PWZbaSsiaCJdPWQrZ1sxXTtjLnB1c2gobSx2KX19fXZhciB5PXIuX2lkLHg9ZS5fZXh0cmVtZXNbeV0sYj1hLmZpbmRFeHRyZW1lcyhyLGMsby5leHRlbmRGbGF0KHt0b3plcm86eC5vcHRzLnRvemVyb30se3BhZGRlZDohMH0pKTt4Lm1pbj14Lm1pbi5jb25jYXQoYi5taW4pLHgubWF4PXgubWF4LmNvbmNhdChiLm1heCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jYWxjZGF0YSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0sbz1uWzBdLnRyYWNlO2lmKCEwPT09by52aXNpYmxlJiZpLnRyYWNlSXMobywiZXJyb3JCYXJzT0siKSl7dmFyIHM9YS5nZXRGcm9tSWQodCxvLnhheGlzKSxjPWEuZ2V0RnJvbUlkKHQsby55YXhpcyk7bChuLG8scywieCIpLGwobixvLGMsInkiKX19fX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi9jb21wdXRlX2Vycm9yIjo2NDEsImZhc3QtaXNudW1lcmljIjoyNDF9XSw2NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiJwZXJjZW50Ij09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQqZS8xMDApfToiY29uc3RhbnQiPT09dD9mdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyhlKX06InNxcnQiPT09dD9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGguYWJzKHQpKX06dm9pZCAwfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LnR5cGUscj10LnN5bW1ldHJpYztpZigiZGF0YSI9PT1lKXt2YXIgaT10LmFycmF5fHxbXTtpZihyKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPStpW2VdO3JldHVybltyLHJdfTt2YXIgYT10LmFycmF5bWludXN8fFtdO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPStpW2VdLG49K2FbZV07cmV0dXJuIGlzTmFOKHIpJiZpc05hTihuKT9bTmFOLE5hTl06W258fDAscnx8MF19fXZhciBvPW4oZSx0LnZhbHVlKSxzPW4oZSx0LnZhbHVlbWludXMpO3JldHVybiByfHx2b2lkIDA9PT10LnZhbHVlbWludXM/ZnVuY3Rpb24odCl7dmFyIGU9byh0KTtyZXR1cm5bZSxlXX06ZnVuY3Rpb24odCl7cmV0dXJuW3ModCksbyh0KV19fX0se31dLDY0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPSJlcnJvcl8iK2wuYXhpcyx1PW8ubmV3Q29udGFpbmVyKGUsYyksaD10W2NdfHx7fTtmdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGEuY29lcmNlKGgsdSxzLHQsZSl9aWYoITEhPT1mKCJ2aXNpYmxlIix2b2lkIDAhPT1oLmFycmF5fHx2b2lkIDAhPT1oLnZhbHVlfHwic3FydCI9PT1oLnR5cGUpKXt2YXIgcD1mKCJ0eXBlIiwiYXJyYXkiaW4gaD8iZGF0YSI6InBlcmNlbnQiKSxkPSEwOyJzcXJ0IiE9PXAmJihkPWYoInN5bW1ldHJpYyIsISgoImRhdGEiPT09cD8iYXJyYXltaW51cyI6InZhbHVlbWludXMiKWluIGgpKSksImRhdGEiPT09cD8oZigiYXJyYXkiKSxmKCJ0cmFjZXJlZiIpLGR8fChmKCJhcnJheW1pbnVzIiksZigidHJhY2VyZWZtaW51cyIpKSk6InBlcmNlbnQiIT09cCYmImNvbnN0YW50IiE9PXB8fChmKCJ2YWx1ZSIpLGR8fGYoInZhbHVlbWludXMiKSk7dmFyIGc9ImNvcHlfIitsLmluaGVyaXQrInN0eWxlIjtpZihsLmluaGVyaXQpKGVbImVycm9yXyIrbC5pbmhlcml0XXx8e30pLnZpc2libGUmJmYoZywhKGguY29sb3J8fG4oaC50aGlja25lc3MpfHxuKGgud2lkdGgpKSk7bC5pbmhlcml0JiZ1W2ddfHwoZigiY29sb3IiLHIpLGYoInRoaWNrbmVzcyIpLGYoIndpZHRoIixpLnRyYWNlSXMoZSwiZ2wzZCIpPzA6NCkpfX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi9hdHRyaWJ1dGVzIjo2MzksImZhc3QtaXNudW1lcmljIjoyNDF9XSw2NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXtlcnJvcl94Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl95Om4uZXh0ZW5kRmxhdCh7fSxhKX07ZGVsZXRlIG8uZXJyb3JfeC5jb3B5X3pzdHlsZSxkZWxldGUgby5lcnJvcl95LmNvcHlfenN0eWxlLGRlbGV0ZSBvLmVycm9yX3kuY29weV95c3R5bGU7dmFyIHM9e2Vycm9yX3g6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3k6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3o6bi5leHRlbmRGbGF0KHt9LGEpfTtkZWxldGUgcy5lcnJvcl94LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3kuY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3Jfei5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl96LmNvcHlfenN0eWxlLGUuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJlcnJvcmJhcnMiLHNjaGVtYTp7dHJhY2VzOntzY2F0dGVyOm8sYmFyOm8saGlzdG9ncmFtOm8sc2NhdHRlcjNkOmkocywiY2FsYyIsIm5lc3RlZCIpLHNjYXR0ZXJnbDppKG8sImNhbGMiLCJuZXN0ZWQiKX19LHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLG1ha2VDb21wdXRlRXJyb3I6dCgiLi9jb21wdXRlX2Vycm9yIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJJbmZvOmZ1bmN0aW9uKHQsZSxyKXsoZS5lcnJvcl95fHx7fSkudmlzaWJsZSYmKHIueWVycj10LnloLXQueSxlLmVycm9yX3kuc3ltbWV0cmljfHwoci55ZXJybmVnPXQueS10LnlzKSk7KGUuZXJyb3JfeHx8e30pLnZpc2libGUmJihyLnhlcnI9dC54aC10LngsZS5lcnJvcl94LnN5bW1ldHJpY3x8KHIueGVycm5lZz10LngtdC54cykpfX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi9hdHRyaWJ1dGVzIjo2MzksIi4vY2FsYyI6NjQwLCIuL2NvbXB1dGVfZXJyb3IiOjY0MSwiLi9kZWZhdWx0cyI6NjQyLCIuL3Bsb3QiOjY0NCwiLi9zdHlsZSI6NjQ1fV0sNjQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vZHJhd2luZyIpLG89dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7dmFyIGw9ci54YXhpcyxjPXIueWF4aXMsdT1zJiZzLmR1cmF0aW9uPjA7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgaCxmPWVbMF0udHJhY2UscD1mLmVycm9yX3h8fHt9LGQ9Zi5lcnJvcl95fHx7fTtmLmlkcyYmKGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KTt2YXIgZz1vLmhhc01hcmtlcnMoZikmJmYubWFya2VyLm1heGRpc3BsYXllZD4wO2QudmlzaWJsZXx8cC52aXNpYmxlfHwoZT1bXSk7dmFyIG09bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLmVycm9yYmFyIikuZGF0YShlLGgpO2lmKG0uZXhpdCgpLnJlbW92ZSgpLGUubGVuZ3RoKXtwLnZpc2libGV8fG0uc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnJlbW92ZSgpLGQudmlzaWJsZXx8bS5zZWxlY3RBbGwoInBhdGgueWVycm9yIikucmVtb3ZlKCksbS5zdHlsZSgib3BhY2l0eSIsMSk7dmFyIHY9bS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVycm9yYmFyIiwhMCk7dSYmdi5zdHlsZSgib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwxKSxhLnNldENsaXBVcmwobSxyLmxheWVyQ2xpcElkLHQpLG0uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1mdW5jdGlvbih0LGUscil7dmFyIG49e3g6ZS5jMnAodC54KSx5OnIuYzJwKHQueSl9O3ZvaWQgMCE9PXQueWgmJihuLnloPXIuYzJwKHQueWgpLG4ueXM9ci5jMnAodC55cyksaShuLnlzKXx8KG4ubm9ZUz0hMCxuLnlzPXIuYzJwKHQueXMsITApKSk7dm9pZCAwIT09dC54aCYmKG4ueGg9ZS5jMnAodC54aCksbi54cz1lLmMycCh0LnhzKSxpKG4ueHMpfHwobi5ub1hTPSEwLG4ueHM9ZS5jMnAodC54cywhMCkpKTtyZXR1cm4gbn0odCxsLGMpO2lmKCFnfHx0LnZpcyl7dmFyIGEsbz1lLnNlbGVjdCgicGF0aC55ZXJyb3IiKTtpZihkLnZpc2libGUmJmkoci54KSYmaShyLnloKSYmaShyLnlzKSl7dmFyIGg9ZC53aWR0aDthPSJNIisoci54LWgpKyIsIityLnloKyJoIisyKmgrIm0tIitoKyIsMFYiK3IueXMsci5ub1lTfHwoYSs9Im0tIitoKyIsMGgiKzIqaCksIW8uc2l6ZSgpP289ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInllcnJvciIsITApOnUmJihvPW8udHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLmVhc2Uocy5lYXNpbmcpKSxvLmF0dHIoImQiLGEpfWVsc2Ugby5yZW1vdmUoKTt2YXIgZj1lLnNlbGVjdCgicGF0aC54ZXJyb3IiKTtpZihwLnZpc2libGUmJmkoci55KSYmaShyLnhoKSYmaShyLnhzKSl7dmFyIG09KHAuY29weV95c3R5bGU/ZDpwKS53aWR0aDthPSJNIityLnhoKyIsIisoci55LW0pKyJ2IisyKm0rIm0wLC0iK20rIkgiK3IueHMsci5ub1hTfHwoYSs9Im0wLC0iK20rInYiKzIqbSksIWYuc2l6ZSgpP2Y9ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInhlcnJvciIsITApOnUmJihmPWYudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLmVhc2Uocy5lYXNpbmcpKSxmLmF0dHIoImQiLGEpfWVsc2UgZi5yZW1vdmUoKX19KSl9fSkpfX0seyIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTE4MywiLi4vZHJhd2luZyI6NjM3LGQzOjE2OSwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDY0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5lcnJvcl95fHx7fSxhPWUuZXJyb3JfeHx8e30sbz1uLnNlbGVjdCh0aGlzKTtvLnNlbGVjdEFsbCgicGF0aC55ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLnRoaWNrbmVzcysicHgiKS5jYWxsKGkuc3Ryb2tlLHIuY29sb3IpLGEuY29weV95c3R5bGUmJihhPXIpLG8uc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGEudGhpY2tuZXNzKyJweCIpLmNhbGwoaS5zdHJva2UsYS5jb2xvcil9KSl9fSx7Ii4uL2NvbG9yIjo2MTUsZDM6MTY5fV0sNjQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLmhvdmVybGFiZWwsYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2hvdmVybGFiZWw6e2JnY29sb3I6YSh7fSxpLmJnY29sb3Ise2FycmF5T2s6ITB9KSxib3JkZXJjb2xvcjphKHt9LGkuYm9yZGVyY29sb3Ise2FycmF5T2s6ITB9KSxmb250Om4oe2FycmF5T2s6ITAsZWRpdFR5cGU6Im5vbmUifSksYWxpZ246YSh7fSxpLmFsaWduLHthcnJheU9rOiEwfSksbmFtZWxlbmd0aDphKHt9LGkubmFtZWxlbmd0aCx7YXJyYXlPazohMH0pLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4MjcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY1Nn1dLDY0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gYSh0LGUscixpKXtpPWl8fG4uaWRlbnRpdHksQXJyYXkuaXNBcnJheSh0KSYmKGVbMF1bcl09aSh0KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2FsY2RhdGEscj10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOmV9LHtfbW9kdWxlOnQuX21vZHVsZX0scil9fWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLGM9bFswXS50cmFjZTtpZighaS50cmFjZUlzKGMsInBpZS1saWtlIikpe3ZhciB1PWkudHJhY2VJcyhjLCIyZE1hcCIpP2E6bi5maWxsQXJyYXk7dShjLmhvdmVyaW5mbyxsLCJoaSIsbyhjKSksYy5ob3ZlcnRlbXBsYXRlJiZ1KGMuaG92ZXJ0ZW1wbGF0ZSxsLCJodCIpLGMuaG92ZXJsYWJlbCYmKHUoYy5ob3ZlcmxhYmVsLmJnY29sb3IsbCwiaGJnIiksdShjLmhvdmVybGFiZWwuYm9yZGVyY29sb3IsbCwiaGJjIiksdShjLmhvdmVybGFiZWwuZm9udC5zaXplLGwsImh0cyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuY29sb3IsbCwiaHRjIiksdShjLmhvdmVybGFiZWwuZm9udC5mYW1pbHksbCwiaHRmIiksdShjLmhvdmVybGFiZWwubmFtZWxlbmd0aCxsLCJobmwiKSx1KGMuaG92ZXJsYWJlbC5hbGlnbixsLCJodGEiKSl9fX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODJ9XSw2NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vaG92ZXIiKS5ob3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsIm9uQ2xpY2siKSh0LHQuX2hvdmVyZGF0YSk7ZnVuY3Rpb24gbygpe3QuZW1pdCgicGxvdGx5X2NsaWNrIix7cG9pbnRzOnQuX2hvdmVyZGF0YSxldmVudDplfSl9dm9pZCAwIT09ciYmaSh0LGUsciwhMCksdC5faG92ZXJkYXRhJiZlJiZlLnRhcmdldCYmKGEmJmEudGhlbj9hLnRoZW4obyk6bygpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19LHsiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi9ob3ZlciI6NjUyfV0sNjQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17WUFOR0xFOjYwLEhPVkVSQVJST1dTSVpFOjYsSE9WRVJURVhUUEFEOjMsSE9WRVJGT05UU0laRToxMyxIT1ZFUkZPTlQ6IkFyaWFsLCBzYW5zLXNlcmlmIixIT1ZFUk1JTlRJTUU6NTAsSE9WRVJJRDoiLWhvdmVyIn19LHt9XSw2NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz1uLmV4dGVuZEZsYXQoe30sby5ob3ZlcmxhYmVsKTtlLmhvdmVydGVtcGxhdGUmJihzLm5hbWVsZW5ndGg9LTEpLGEodCxlLChmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSkscyl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuL2F0dHJpYnV0ZXMiOjY0NiwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2NTN9XSw2NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5nZXRTdWJwbG90PWZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnBsb3R8fHQueGF4aXMrdC55YXhpc3x8dC5nZW99LHIuaXNUcmFjZUluU3VicGxvdHM9ZnVuY3Rpb24odCxlKXtpZigic3Bsb20iPT09dC50eXBlKXtmb3IodmFyIG49dC54YXhlc3x8W10saT10LnlheGVzfHxbXSxhPTA7YTxuLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYoLTEhPT1lLmluZGV4T2YoblthXStpW29dKSlyZXR1cm4hMDtyZXR1cm4hMX1yZXR1cm4tMSE9PWUuaW5kZXhPZihyLmdldFN1YnBsb3QodCkpfSxyLmZsYXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT1lO3JldHVybiByfSxyLnAyYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyW25dPXRbbl0ucDJjKGUpO3JldHVybiByfSxyLmdldERpc3RhbmNlRnVuY3Rpb249ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuImNsb3Nlc3QiPT09dD9pfHxyLnF1YWRyYXR1cmUoZSxuKToieCI9PT10LmNoYXJBdCgwKT9lOm59LHIuZ2V0Q2xvc2VzdD1mdW5jdGlvbih0LGUscil7aWYoITEhPT1yLmluZGV4KXIuaW5kZXg+PTAmJnIuaW5kZXg8dC5sZW5ndGg/ci5kaXN0YW5jZT0wOnIuaW5kZXg9ITE7ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9ZSh0W25dKTtpPD1yLmRpc3RhbmNlJiYoci5pbmRleD1uLHIuZGlzdGFuY2U9aSl9cmV0dXJuIHJ9LHIuaW5ib3g9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KmU8MHx8MD09PXQ/cjoxLzB9LHIucXVhZHJhdHVyZT1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10KHIpLGk9ZShyKTtyZXR1cm4gTWF0aC5zcXJ0KG4qbitpKmkpfX0sci5tYWtlRXZlbnREYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0iaW5kZXgiaW4gdD90LmluZGV4OnQucG9pbnROdW1iZXIsYT17ZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGN1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6aX07aWYoZS5faW5kZXhUb1BvaW50cyl7dmFyIG89ZS5faW5kZXhUb1BvaW50c1tpXTsxPT09by5sZW5ndGg/YS5wb2ludEluZGV4PW9bMF06YS5wb2ludEluZGljZXM9b31lbHNlIGEucG9pbnRJbmRleD1pO3JldHVybiBlLl9tb2R1bGUuZXZlbnREYXRhP2E9ZS5fbW9kdWxlLmV2ZW50RGF0YShhLHQsZSxuLGkpOigieFZhbCJpbiB0P2EueD10LnhWYWw6IngiaW4gdCYmKGEueD10LngpLCJ5VmFsImluIHQ/YS55PXQueVZhbDoieSJpbiB0JiYoYS55PXQueSksdC54YSYmKGEueGF4aXM9dC54YSksdC55YSYmKGEueWF4aXM9dC55YSksdm9pZCAwIT09dC56TGFiZWxWYWwmJihhLno9dC56TGFiZWxWYWwpKSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShhLGUsaSksYX0sci5hcHBlbmRBcnJheVBvaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7dmFyIHU9byhuLm5lc3RlZFByb3BlcnR5KGUsbCkuZ2V0KCkscik7dm9pZCAwIT09dSYmKHRbY109dSl9fX0sci5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7Zm9yKHZhciB1PW4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxoPW5ldyBBcnJheShyLmxlbmd0aCksZj0wO2Y8ci5sZW5ndGg7ZisrKWhbZl09byh1LHJbZl0pO3RbY109aH19fTt2YXIgaT17aWRzOiJpZCIsbG9jYXRpb25zOiJsb2NhdGlvbiIsbGFiZWxzOiJsYWJlbCIsdmFsdWVzOiJ2YWx1ZSIsIm1hcmtlci5jb2xvcnMiOiJjb2xvciIscGFyZW50czoicGFyZW50In07ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaVt0XXx8dH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/QXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheSh0W2VbMF1dKT90W2VbMF1dW2VbMV1dOnZvaWQgMDp0W2VdfXZhciBzPXt4OiEwLHk6ITB9LGw9eyJ4IHVuaWZpZWQiOiEwLCJ5IHVuaWZpZWQiOiEwfTtyLmlzVW5pZmllZEhvdmVyPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmISFsW3RdfSxyLmlzWFlob3Zlcj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiEhc1t0XX19LHsiLi4vLi4vbGliIjo3NTB9XSw2NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCJ0aW55Y29sb3IyIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL2xpYi9ldmVudHMiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciIpLHU9dCgiLi4vZHJhd2luZyIpLGg9dCgiLi4vY29sb3IiKSxmPXQoIi4uL2RyYWdlbGVtZW50IikscD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGQ9dCgiLi4vLi4vcmVnaXN0cnkiKSxnPXQoIi4vaGVscGVycyIpLG09dCgiLi9jb25zdGFudHMiKSx2PXQoIi4uL2xlZ2VuZC9kZWZhdWx0cyIpLHk9dCgiLi4vbGVnZW5kL2RyYXciKSx4PW0uWUFOR0xFLGI9TWF0aC5QSSp4LzE4MCxfPTEvTWF0aC5zaW4oYiksdz1NYXRoLmNvcyhiKSxUPU1hdGguc2luKGIpLGs9bS5IT1ZFUkFSUk9XU0laRSxNPW0uSE9WRVJURVhUUEFEO2Z1bmN0aW9uIEEodCl7cmV0dXJuW3QudHJhY2UuaW5kZXgsdC5pbmRleCx0LngwLHQueTAsdC5uYW1lLHQuYXR0cix0LnhhLHQueWF8fCIiXS5qb2luKCIsIil9ci5ob3Zlcj1mdW5jdGlvbih0LGUscixhKXt0PW8uZ2V0R3JhcGhEaXYodCksby50aHJvdHRsZSh0Ll9mdWxsTGF5b3V0Ll91aWQrbS5IT1ZFUklELG0uSE9WRVJNSU5USU1FLChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUscixhKXtyfHwocj0ieHkiKTt2YXIgbD1BcnJheS5pc0FycmF5KHIpP3I6W3JdLHU9dC5fZnVsbExheW91dCxwPXUuX3Bsb3RzfHxbXSxtPXBbcl0sdj11Ll9oYXMoImNhcnRlc2lhbiIpO2lmKG0pe3ZhciB5PW0ub3ZlcmxheXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKTtsPWwuY29uY2F0KHkpfWZvcih2YXIgeD1sLmxlbmd0aCxiPW5ldyBBcnJheSh4KSx3PW5ldyBBcnJheSh4KSxUPSExLGs9MDtrPHg7aysrKXt2YXIgTT1sW2tdO2lmKHBbTV0pVD0hMCxiW2tdPXBbTV0ueGF4aXMsd1trXT1wW01dLnlheGlzO2Vsc2V7aWYoIXVbTV18fCF1W01dLl9zdWJwbG90KXJldHVybiB2b2lkIG8ud2FybigiVW5yZWNvZ25pemVkIHN1YnBsb3Q6ICIrTSk7dmFyIFM9dVtNXS5fc3VicGxvdDtiW2tdPVMueGF4aXMsd1trXT1TLnlheGlzfX12YXIgQz1lLmhvdmVybW9kZXx8dS5ob3Zlcm1vZGU7QyYmIVQmJihDPSJjbG9zZXN0Iik7aWYoLTE9PT1bIngiLCJ5IiwiY2xvc2VzdCIsInggdW5pZmllZCIsInkgdW5pZmllZCJdLmluZGV4T2YoQyl8fCF0LmNhbGNkYXRhfHx0LnF1ZXJ5U2VsZWN0b3IoIi56b29tYm94Iil8fHQuX2RyYWdnaW5nKXJldHVybiBmLnVuaG92ZXJSYXcodCxlKTt2YXIgTyxELFIsRixCLE4saixVLFYscSxILEcsWSxXPS0xPT09dS5ob3ZlcmRpc3RhbmNlPzEvMDp1LmhvdmVyZGlzdGFuY2UsWj0tMT09PXUuc3Bpa2VkaXN0YW5jZT8xLzA6dS5zcGlrZWRpc3RhbmNlLFg9W10sSj1bXSxLPXtoTGluZVBvaW50Om51bGwsdkxpbmVQb2ludDpudWxsfSxRPSExO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKEM9ImFycmF5IixSPTA7UjxlLmxlbmd0aDtSKyspKEI9dC5jYWxjZGF0YVtlW1JdLmN1cnZlTnVtYmVyfHwwXSkmJihOPUJbMF0udHJhY2UsInNraXAiIT09QlswXS50cmFjZS5ob3ZlcmluZm8mJihKLnB1c2goQiksImgiPT09Ti5vcmllbnRhdGlvbiYmKFE9ITApKSk7ZWxzZXtmb3IoRj0wO0Y8dC5jYWxjZGF0YS5sZW5ndGg7RisrKUI9dC5jYWxjZGF0YVtGXSwic2tpcCIhPT0oTj1CWzBdLnRyYWNlKS5ob3ZlcmluZm8mJmcuaXNUcmFjZUluU3VicGxvdHMoTixsKSYmKEoucHVzaChCKSwiaCI9PT1OLm9yaWVudGF0aW9uJiYoUT0hMCkpO3ZhciAkLHR0O2lmKCFlLnRhcmdldCkkPSJ4cHgiaW4gZT9lLnhweDpiWzBdLl9sZW5ndGgvMix0dD0ieXB4ImluIGU/ZS55cHg6d1swXS5fbGVuZ3RoLzI7ZWxzZXtpZighMT09PXMudHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2JlZm9yZWhvdmVyIixlKSlyZXR1cm47dmFyIGV0PWUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCQ9ZS5jbGllbnRYLWV0LmxlZnQsdHQ9ZS5jbGllbnRZLWV0LnRvcCwkPDB8fCQ+YlswXS5fbGVuZ3RofHx0dDwwfHx0dD53WzBdLl9sZW5ndGgpcmV0dXJuIGYudW5ob3ZlclJhdyh0LGUpfWlmKGUucG9pbnRlclg9JCtiWzBdLl9vZmZzZXQsZS5wb2ludGVyWT10dCt3WzBdLl9vZmZzZXQsTz0ieHZhbCJpbiBlP2cuZmxhdChsLGUueHZhbCk6Zy5wMmMoYiwkKSxEPSJ5dmFsImluIGU/Zy5mbGF0KGwsZS55dmFsKTpnLnAyYyh3LHR0KSwhaShPWzBdKXx8IWkoRFswXSkpcmV0dXJuIG8ud2FybigiRnguaG92ZXIgZmFpbGVkIixlLHQpLGYudW5ob3ZlclJhdyh0LGUpfXZhciBydD0xLzA7ZnVuY3Rpb24gbnQodCxyKXtmb3IoRj0wO0Y8Si5sZW5ndGg7RisrKWlmKChCPUpbRl0pJiZCWzBdJiZCWzBdLnRyYWNlJiYhMD09PShOPUJbMF0udHJhY2UpLnZpc2libGUmJjAhPT1OLl9sZW5ndGgmJi0xPT09WyJjYXJwZXQiLCJjb250b3VyY2FycGV0Il0uaW5kZXhPZihOLl9tb2R1bGUubmFtZSkpe2lmKCJzcGxvbSI9PT1OLnR5cGU/aj1sW1U9MF06KGo9Zy5nZXRTdWJwbG90KE4pLFU9bC5pbmRleE9mKGopKSxWPUMsZy5pc1VuaWZpZWRIb3ZlcihWKSYmKFY9Vi5jaGFyQXQoMCkpLEc9e2NkOkIsdHJhY2U6Tix4YTpiW1VdLHlhOndbVV0sbWF4SG92ZXJEaXN0YW5jZTpXLG1heFNwaWtlRGlzdGFuY2U6WixpbmRleDohMSxkaXN0YW5jZTpNYXRoLm1pbihydCxXKSxzcGlrZURpc3RhbmNlOjEvMCx4U3Bpa2U6dm9pZCAwLHlTcGlrZTp2b2lkIDAsY29sb3I6aC5kZWZhdWx0TGluZSxuYW1lOk4ubmFtZSx4MDp2b2lkIDAseDE6dm9pZCAwLHkwOnZvaWQgMCx5MTp2b2lkIDAseExhYmVsVmFsOnZvaWQgMCx5TGFiZWxWYWw6dm9pZCAwLHpMYWJlbFZhbDp2b2lkIDAsdGV4dDp2b2lkIDB9LHVbal0mJihHLnN1YnBsb3Q9dVtqXS5fc3VicGxvdCksdS5fc3Bsb21TY2VuZXMmJnUuX3NwbG9tU2NlbmVzW04udWlkXSYmKEcuc2NlbmU9dS5fc3Bsb21TY2VuZXNbTi51aWRdKSxZPVgubGVuZ3RoLCJhcnJheSI9PT1WKXt2YXIgbj1lW0ZdOyJwb2ludE51bWJlciJpbiBuPyhHLmluZGV4PW4ucG9pbnROdW1iZXIsVj0iY2xvc2VzdCIpOihWPSIiLCJ4dmFsImluIG4mJihxPW4ueHZhbCxWPSJ4IiksInl2YWwiaW4gbiYmKEg9bi55dmFsLFY9Vj8iY2xvc2VzdCI6InkiKSl9ZWxzZSB2b2lkIDAhPT10JiZ2b2lkIDAhPT1yPyhxPXQsSD1yKToocT1PW1VdLEg9RFtVXSk7aWYoMCE9PVcpaWYoTi5fbW9kdWxlJiZOLl9tb2R1bGUuaG92ZXJQb2ludHMpe3ZhciBhPU4uX21vZHVsZS5ob3ZlclBvaW50cyhHLHEsSCxWLHUuX2hvdmVybGF5ZXIpO2lmKGEpZm9yKHZhciBzLGM9MDtjPGEubGVuZ3RoO2MrKylzPWFbY10saShzLngwKSYmaShzLnkwKSYmWC5wdXNoKFAocyxDKSl9ZWxzZSBvLmxvZygiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgaW4gaG92ZXI6IixOKTtpZigiY2xvc2VzdCI9PT1DJiZYLmxlbmd0aD5ZJiYoWC5zcGxpY2UoMCxZKSxydD1YWzBdLmRpc3RhbmNlKSx2JiYwIT09WiYmMD09PVgubGVuZ3RoKXtHLmRpc3RhbmNlPVosRy5pbmRleD0hMTt2YXIgZj1OLl9tb2R1bGUuaG92ZXJQb2ludHMoRyxxLEgsImNsb3Nlc3QiLHUuX2hvdmVybGF5ZXIpO2lmKGYmJihmPWYuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGlrZURpc3RhbmNlPD1afSkpKSxmJiZmLmxlbmd0aCl7dmFyIHAsZD1mLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQueGEuc2hvd3NwaWtlcyYmImhvdmVyZWQgZGF0YSIhPT10LnhhLnNwaWtlc25hcH0pKTtpZihkLmxlbmd0aCl7dmFyIG09ZFswXTtpKG0ueDApJiZpKG0ueTApJiYocD1hdChtKSwoIUsudkxpbmVQb2ludHx8Sy52TGluZVBvaW50LnNwaWtlRGlzdGFuY2U+cC5zcGlrZURpc3RhbmNlKSYmKEsudkxpbmVQb2ludD1wKSl9dmFyIHk9Zi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnlhLnNob3dzcGlrZXMmJiJob3ZlcmVkIGRhdGEiIT09dC55YS5zcGlrZXNuYXB9KSk7aWYoeS5sZW5ndGgpe3ZhciB4PXlbMF07aSh4LngwKSYmaSh4LnkwKSYmKHA9YXQoeCksKCFLLmhMaW5lUG9pbnR8fEsuaExpbmVQb2ludC5zcGlrZURpc3RhbmNlPnAuc3Bpa2VEaXN0YW5jZSkmJihLLmhMaW5lUG9pbnQ9cCkpfX19fX1mdW5jdGlvbiBpdCh0LGUpe2Zvcih2YXIgcixuPW51bGwsaT0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKShyPXRbYV0uc3Bpa2VEaXN0YW5jZSk8PWkmJnI8PWUmJihuPXRbYV0saT1yKTtyZXR1cm4gbn1mdW5jdGlvbiBhdCh0KXtyZXR1cm4gdD97eGE6dC54YSx5YTp0LnlhLHg6dm9pZCAwIT09dC54U3Bpa2U/dC54U3Bpa2U6KHQueDArdC54MSkvMix5OnZvaWQgMCE9PXQueVNwaWtlP3QueVNwaWtlOih0LnkwK3QueTEpLzIsZGlzdGFuY2U6dC5kaXN0YW5jZSxzcGlrZURpc3RhbmNlOnQuc3Bpa2VEaXN0YW5jZSxjdXJ2ZU51bWJlcjp0LnRyYWNlLmluZGV4LGNvbG9yOnQuY29sb3IscG9pbnROdW1iZXI6dC5pbmRleH06bnVsbH1udCgpO3ZhciBvdD17ZnVsbExheW91dDp1LGNvbnRhaW5lcjp1Ll9ob3ZlcmxheWVyLG91dGVyQ29udGFpbmVyOnUuX3BhcGVyZGl2LGV2ZW50OmV9LHN0PXQuX3NwaWtlcG9pbnRzLGx0PXt2TGluZVBvaW50OksudkxpbmVQb2ludCxoTGluZVBvaW50OksuaExpbmVQb2ludH07aWYodC5fc3Bpa2Vwb2ludHM9bHQsdiYmMCE9PVomJjAhPT1YLmxlbmd0aCl7dmFyIGN0PWl0KFguZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC55YS5zaG93c3Bpa2VzfSkpLFopO0suaExpbmVQb2ludD1hdChjdCk7dmFyIHV0PWl0KFguZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC54YS5zaG93c3Bpa2VzfSkpLFopO0sudkxpbmVQb2ludD1hdCh1dCl9aWYoMD09PVgubGVuZ3RoKXt2YXIgaHQ9Zi51bmhvdmVyUmF3KHQsZSk7cmV0dXJuIXZ8fG51bGw9PT1LLmhMaW5lUG9pbnQmJm51bGw9PT1LLnZMaW5lUG9pbnR8fHooc3QpJiZJKHQsSyxvdCksaHR9diYmeihzdCkmJkkodCxLLG90KTtpZihYLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzdGFuY2UtZS5kaXN0YW5jZX0pKSxnLmlzWFlob3ZlcihWKSYmMCE9PVhbMF0ubGVuZ3RoJiYic3Bsb20iIT09WFswXS50cmFjZS50eXBlKXt2YXIgZnQ9WFswXSxwdD1mdC5jZFtmdC5pbmRleF0sZHQ9Imdyb3VwIj09PXUuYm94bW9kZXx8Imdyb3VwIj09PXUudmlvbGlubW9kZSxndD1mdC54VmFsLG10PWZ0LnhhOyJjYXRlZ29yeSI9PT1tdC50eXBlJiYoZ3Q9bXQuX2NhdGVnb3JpZXNNYXBbZ3RdKSwiZGF0ZSI9PT1tdC50eXBlJiYoZ3Q9bXQuZDJjKGd0KSkscHQmJnB0LnQmJnB0LnQucG9zTGV0dGVyPT09bXQuX2lkJiZkdCYmKGd0Kz1wdC50LmRQb3MpO3ZhciB2dD1mdC55VmFsOyJjYXRlZ29yeSI9PT0obXQ9ZnQueWEpLnR5cGUmJih2dD1tdC5fY2F0ZWdvcmllc01hcFt2dF0pLCJkYXRlIj09PW10LnR5cGUmJih2dD1tdC5kMmModnQpKSxwdCYmcHQudCYmcHQudC5wb3NMZXR0ZXI9PT1tdC5faWQmJmR0JiYodnQrPXB0LnQuZFBvcyksbnQoZ3QsdnQpO3ZhciB5dD17fTtYPVguZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgZT1BKHQpO2lmKCF5dFtlXSlyZXR1cm4geXRbZV09ITAseXRbZV19KSl9dmFyIHh0PXQuX2hvdmVyZGF0YSxidD1bXTtmb3IoUj0wO1I8WC5sZW5ndGg7UisrKXt2YXIgX3Q9WFtSXSx3dD1nLm1ha2VFdmVudERhdGEoX3QsX3QudHJhY2UsX3QuY2QpO2lmKCExIT09X3QuaG92ZXJ0ZW1wbGF0ZSl7dmFyIFR0PSExO190LmNkW190LmluZGV4XSYmX3QuY2RbX3QuaW5kZXhdLmh0JiYoVHQ9X3QuY2RbX3QuaW5kZXhdLmh0KSxfdC5ob3ZlcnRlbXBsYXRlPVR0fHxfdC50cmFjZS5ob3ZlcnRlbXBsYXRlfHwhMX1fdC5ldmVudERhdGE9W3d0XSxidC5wdXNoKHd0KX10Ll9ob3ZlcmRhdGE9YnQ7dmFyIGt0PSJ5Ij09PUMmJihKLmxlbmd0aD4xfHxYLmxlbmd0aD4xKXx8ImNsb3Nlc3QiPT09QyYmUSYmWC5sZW5ndGg+MSxNdD1oLmNvbWJpbmUodS5wbG90X2JnY29sb3J8fGguYmFja2dyb3VuZCx1LnBhcGVyX2JnY29sb3IpLEF0PXtob3Zlcm1vZGU6Qyxyb3RhdGVMYWJlbHM6a3QsYmdDb2xvcjpNdCxjb250YWluZXI6dS5faG92ZXJsYXllcixvdXRlckNvbnRhaW5lcjp1Ll9wYXBlcmRpdixjb21tb25MYWJlbE9wdHM6dS5ob3ZlcmxhYmVsLGhvdmVyZGlzdGFuY2U6dS5ob3ZlcmRpc3RhbmNlfSxTdD1FKFgsQXQsdCk7Zy5pc1VuaWZpZWRIb3ZlcihDKXx8KCFmdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdT0wLGg9MSxmPXQuc2l6ZSgpLHA9bmV3IEFycmF5KGYpLGQ9MDtmdW5jdGlvbiBnKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO2lmKGk9ZS5wbWluLWUucG9zLWUuZHArZS5zaXplLGE9ci5wb3Mrci5kcCtyLnNpemUtZS5wbWF4LGk+LjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHArPWk7bj0hMX1pZighKGE8LjAxKSl7aWYoaTwtLjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7bj0hMX1pZihuKXt2YXIgYz0wO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmYysrO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zPmUucG1heC0xJiYobC5kZWw9ITAsYy0tKTtmb3Iobz0wO288dC5sZW5ndGgmJiEoYzw9MCk7bysrKWlmKChsPXRbb10pLnBvczxlLnBtaW4rMSlmb3IobC5kZWw9ITAsYy0tLGE9MipsLnNpemUscz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7Zm9yKG89dC5sZW5ndGgtMTtvPj0wJiYhKGM8PTApO28tLSkobD10W29dKS5wb3MrbC5kcCtsLnNpemU+ZS5wbWF4JiYobC5kZWw9ITAsYy0tKX19fXQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dFtlXSxpPSJ4Ij09PW4uX2lkLmNoYXJBdCgwKSxhPW4ucmFuZ2U7MD09PWQmJmEmJmFbMF0+YVsxXSE9PWkmJihoPS0xKSxwW2QrK109W3tkYXR1bTp0LHRyYWNlSW5kZXg6dC50cmFjZS5pbmRleCxkcDowLHBvczp0LnBvcyxwb3NyZWY6dC5wb3NyZWYsc2l6ZTp0LmJ5KihpP186MSkvMixwbWluOjAscG1heDppP3Iud2lkdGg6ci5oZWlnaHR9XX0pKSxwLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ucG9zcmVmLWVbMF0ucG9zcmVmfHxoKihlWzBdLnRyYWNlSW5kZXgtdFswXS50cmFjZUluZGV4KX0pKTtmb3IoOyFuJiZ1PD1mOyl7Zm9yKHUrKyxuPSEwLG89MDtvPHAubGVuZ3RoLTE7KXt2YXIgbT1wW29dLHY9cFtvKzFdLHk9bVttLmxlbmd0aC0xXSx4PXZbMF07aWYoKGk9eS5wb3MreS5kcCt5LnNpemUteC5wb3MteC5kcCt4LnNpemUpPi4wMSYmeS5wbWluPT09eC5wbWluJiZ5LnBtYXg9PT14LnBtYXgpe2ZvcihzPXYubGVuZ3RoLTE7cz49MDtzLS0pdltzXS5kcCs9aTtmb3IobS5wdXNoLmFwcGx5KG0sdikscC5zcGxpY2UobysxLDEpLGM9MCxzPW0ubGVuZ3RoLTE7cz49MDtzLS0pYys9bVtzXS5kcDtmb3IoYT1jL20ubGVuZ3RoLHM9bS5sZW5ndGgtMTtzPj0wO3MtLSltW3NdLmRwLT1hO249ITF9ZWxzZSBvKyt9cC5mb3JFYWNoKGcpfWZvcihvPXAubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBiPXBbb107Zm9yKHM9Yi5sZW5ndGgtMTtzPj0wO3MtLSl7dmFyIHc9YltzXSxUPXcuZGF0dW07VC5vZmZzZXQ9dy5kcCxULmRlbD13LmRlbH19fShTdCxrdD8ieGEiOiJ5YSIsdSksTChTdCxrdCkpO2lmKGUudGFyZ2V0JiZlLnRhcmdldC50YWdOYW1lKXt2YXIgRXQ9ZC5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiaGFzQ2xpY2tUb1Nob3ciKSh0LGJ0KTtjKG4uc2VsZWN0KGUudGFyZ2V0KSxFdD8icG9pbnRlciI6IiIpfWlmKCFlLnRhcmdldHx8YXx8IWZ1bmN0aW9uKHQsZSxyKXtpZighcnx8ci5sZW5ndGghPT10Ll9ob3ZlcmRhdGEubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgbj1yLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgaT1yW25dLGE9dC5faG92ZXJkYXRhW25dO2lmKGkuY3VydmVOdW1iZXIhPT1hLmN1cnZlTnVtYmVyfHxTdHJpbmcoaS5wb2ludE51bWJlcikhPT1TdHJpbmcoYS5wb2ludE51bWJlcil8fFN0cmluZyhpLnBvaW50TnVtYmVycykhPT1TdHJpbmcoYS5wb2ludE51bWJlcnMpKXJldHVybiEwfXJldHVybiExfSh0LDAseHQpKXJldHVybjt4dCYmdC5lbWl0KCJwbG90bHlfdW5ob3ZlciIse2V2ZW50OmUscG9pbnRzOnh0fSk7dC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDplLHBvaW50czp0Ll9ob3ZlcmRhdGEseGF4ZXM6Yix5YXhlczp3LHh2YWxzOk8seXZhbHM6RH0pfSh0LGUscixhKX0pKX0sci5sb25lSG92ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj0hMDtBcnJheS5pc0FycmF5KHQpfHwocj0hMSx0PVt0XSk7dmFyIGk9dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntjb2xvcjp0LmNvbG9yfHxoLmRlZmF1bHRMaW5lLHgwOnQueDB8fHQueHx8MCx4MTp0LngxfHx0Lnh8fDAseTA6dC55MHx8dC55fHwwLHkxOnQueTF8fHQueXx8MCx4TGFiZWw6dC54TGFiZWwseUxhYmVsOnQueUxhYmVsLHpMYWJlbDp0LnpMYWJlbCx0ZXh0OnQudGV4dCxuYW1lOnQubmFtZSxpZGVhbEFsaWduOnQuaWRlYWxBbGlnbixib3JkZXJDb2xvcjp0LmJvcmRlckNvbG9yLGZvbnRGYW1pbHk6dC5mb250RmFtaWx5LGZvbnRTaXplOnQuZm9udFNpemUsZm9udENvbG9yOnQuZm9udENvbG9yLG5hbWVMZW5ndGg6dC5uYW1lTGVuZ3RoLHRleHRBbGlnbjp0LnRleHRBbGlnbix0cmFjZTp0LnRyYWNlfHx7aW5kZXg6MCxob3ZlcmluZm86IiJ9LHhhOntfb2Zmc2V0OjB9LHlhOntfb2Zmc2V0OjB9LGluZGV4OjAsaG92ZXJ0ZW1wbGF0ZTp0LmhvdmVydGVtcGxhdGV8fCExLGV2ZW50RGF0YTp0LmV2ZW50RGF0YXx8ITEsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LmhvdmVydGVtcGxhdGVMYWJlbHN8fCExfX0pKSxhPW4uc2VsZWN0KGUuY29udGFpbmVyKSxvPWUub3V0ZXJDb250YWluZXI/bi5zZWxlY3QoZS5vdXRlckNvbnRhaW5lcik6YSxzPXtob3Zlcm1vZGU6ImNsb3Nlc3QiLHJvdGF0ZUxhYmVsczohMSxiZ0NvbG9yOmUuYmdDb2xvcnx8aC5iYWNrZ3JvdW5kLGNvbnRhaW5lcjphLG91dGVyQ29udGFpbmVyOm99LGw9RShpLHMsZS5nZCksYz0wLHU9MDtyZXR1cm4gbC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnkwLWUueTB9KSkuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj10LnkwLXQuYnkvMjt0Lm9mZnNldD1uLTU8Yz9jLW4rNTowLGM9bit0LmJ5K3Qub2Zmc2V0LHI9PT1lLmFuY2hvckluZGV4JiYodT10Lm9mZnNldCl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dC5vZmZzZXQtPXV9KSksTChsLHMucm90YXRlTGFiZWxzKSxyP2w6bC5ub2RlKCl9O3ZhciBTPS88ZXh0cmE+KFtcc1xTXSopPFwvZXh0cmE+LztmdW5jdGlvbiBFKHQsZSxyKXt2YXIgaT1yLl9mdWxsTGF5b3V0LGE9ZS5ob3Zlcm1vZGUscz1lLnJvdGF0ZUxhYmVscyxjPWUuYmdDb2xvcixmPWUuY29udGFpbmVyLHA9ZS5vdXRlckNvbnRhaW5lcixkPWUuY29tbW9uTGFiZWxPcHRzfHx7fSxiPWUuZm9udEZhbWlseXx8bS5IT1ZFUkZPTlQsXz1lLmZvbnRTaXplfHxtLkhPVkVSRk9OVFNJWkUsdz10WzBdLFQ9dy54YSxTPXcueWEsRT0ieSI9PT1hLmNoYXJBdCgwKT8ieUxhYmVsIjoieExhYmVsIixMPXdbRV0sUD0oU3RyaW5nKEwpfHwiIikuc3BsaXQoIiAiKVswXSxJPXAubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHo9SS50b3AsTz1JLndpZHRoLEQ9SS5oZWlnaHQsUj12b2lkIDAhPT1MJiZ3LmRpc3RhbmNlPD1lLmhvdmVyZGlzdGFuY2UmJigieCI9PT1hfHwieSI9PT1hKTtpZihSKXt2YXIgRixCLE49ITA7Zm9yKEY9MDtGPHQubGVuZ3RoO0YrKylpZihOJiZ2b2lkIDA9PT10W0ZdLnpMYWJlbCYmKE49ITEpLEI9dFtGXS5ob3ZlcmluZm98fHRbRl0udHJhY2UuaG92ZXJpbmZvKXt2YXIgaj1BcnJheS5pc0FycmF5KEIpP0I6Qi5zcGxpdCgiKyIpO2lmKC0xPT09ai5pbmRleE9mKCJhbGwiKSYmLTE9PT1qLmluZGV4T2YoYSkpe1I9ITE7YnJlYWt9fU4mJihSPSExKX12YXIgVT1mLnNlbGVjdEFsbCgiZy5heGlzdGV4dCIpLmRhdGEoUj9bMF06W10pO2Z1bmN0aW9uIFYodCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dC56TGFiZWxWYWx8fCh0W0VdfHwiIikuc3BsaXQoIiAiKVswXT09PVB9KSl9aWYoVS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXN0ZXh0IiwhMCksVS5leGl0KCkucmVtb3ZlKCksVS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHM9by5lbnN1cmVTaW5nbGUoZSwicGF0aCIsIiIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoeyJzdHJva2Utd2lkdGgiOiIxcHgifSl9KSksYz1vLmVuc3VyZVNpbmdsZShlLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxmPWQuYmdjb2xvcnx8aC5kZWZhdWx0TGluZSxwPWQuYm9yZGVyY29sb3J8fGguY29udHJhc3QoZiksZz1oLmNvbnRyYXN0KGYpLG09e2ZhbWlseTpkLmZvbnQuZmFtaWx5fHxiLHNpemU6ZC5mb250LnNpemV8fF8sY29sb3I6ZC5mb250LmNvbG9yfHxnfTtzLnN0eWxlKHtmaWxsOmYsc3Ryb2tlOnB9KSxjLnRleHQoTCkuY2FsbCh1LmZvbnQsbSkuY2FsbChsLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsciksZS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKTt2YXIgdix5LHg9Yy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIngiPT09YSl7dmFyIEE9InRvcCI9PT1ULnNpZGU/Ii0iOiIiO2MuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGwucG9zaXRpb25UZXh0LDAsInRvcCI9PT1ULnNpZGU/ei14LmJvdHRvbS1rLU06ei14LnRvcCtrK00pLHY9VC5fb2Zmc2V0Kyh3LngwK3cueDEpLzIseT1TLl9vZmZzZXQrKCJ0b3AiPT09VC5zaWRlPzA6Uy5fbGVuZ3RoKTt2YXIgRT14LndpZHRoLzIrTTt2PEU/KHY9RSxzLmF0dHIoImQiLCJNLSIrKEUtaykrIiwwTC0iKyhFLTIqaykrIiwiK0EraysiSCIrKE0reC53aWR0aC8yKSsidiIrQSsoMipNK3guaGVpZ2h0KSsiSC0iK0UrIlYiK0EraysiWiIpKTp2Pmkud2lkdGgtRT8odj1pLndpZHRoLUUscy5hdHRyKCJkIiwiTSIrKEUtaykrIiwwTCIrRSsiLCIrQStrKyJ2IitBKygyKk0reC5oZWlnaHQpKyJILSIrRSsiViIrQStrKyJIIisoRS0yKmspKyJaIikpOnMuYXR0cigiZCIsIk0wLDBMIitrKyIsIitBK2srIkgiKyhNK3gud2lkdGgvMikrInYiK0ErKDIqTSt4LmhlaWdodCkrIkgtIisoTSt4LndpZHRoLzIpKyJWIitBK2srIkgtIitrKyJaIil9ZWxzZXt2YXIgQyxQLEk7InJpZ2h0Ij09PVMuc2lkZT8oQz0ic3RhcnQiLFA9MSxJPSIiLHY9VC5fb2Zmc2V0K1QuX2xlbmd0aCk6KEM9ImVuZCIsUD0tMSxJPSItIix2PVQuX29mZnNldCkseT1TLl9vZmZzZXQrKHcueTArdy55MSkvMixjLmF0dHIoInRleHQtYW5jaG9yIixDKSxzLmF0dHIoImQiLCJNMCwwTCIrSStrKyIsIitrKyJWIisoTSt4LmhlaWdodC8yKSsiaCIrSSsoMipNK3gud2lkdGgpKyJWLSIrKE0reC5oZWlnaHQvMikrIkgiK0kraysiVi0iK2srIloiKTt2YXIgTyxEPXguaGVpZ2h0LzIsUj16LXgudG9wLUQsRj0iY2xpcCIraS5fdWlkKyJjb21tb25sYWJlbCIrUy5faWQ7aWYodjx4LndpZHRoKzIqTStrKXtPPSJNLSIrKGsrTSkrIi0iK0QrImgtIisoeC53aWR0aC1NKSsiViIrRCsiaCIrKHgud2lkdGgtTSkrIloiO3ZhciBCPXgud2lkdGgtditNO2wucG9zaXRpb25UZXh0KGMsQixSKSwiZW5kIj09PUMmJmMuc2VsZWN0QWxsKCJ0c3BhbiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT11LnRlc3Rlci5hcHBlbmQoInRleHQiKS50ZXh0KHQudGV4dCgpKS5jYWxsKHUuZm9udCxtKSxyPWUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO01hdGgucm91bmQoci53aWR0aCk8TWF0aC5yb3VuZCh4LndpZHRoKSYmdC5hdHRyKCJ4IixCLXIud2lkdGgpLGUucmVtb3ZlKCl9KSl9ZWxzZSBsLnBvc2l0aW9uVGV4dChjLFAqKE0rayksUiksTz1udWxsO3ZhciBOPWkuX3RvcGNsaXBzLnNlbGVjdEFsbCgiIyIrRikuZGF0YShPP1swXTpbXSk7Ti5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsRikuYXBwZW5kKCJwYXRoIiksTi5leGl0KCkucmVtb3ZlKCksTi5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixPKSx1LnNldENsaXBVcmwoYyxPP0Y6bnVsbCxyKX1lLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YrIiwiK3krIikiKSx0PVYodCl9KSksZy5pc1VuaWZpZWRIb3ZlcihhKSl7aWYoZi5zZWxlY3RBbGwoImcuaG92ZXJ0ZXh0IikucmVtb3ZlKCksdm9pZCAwIT09TCYmdy5kaXN0YW5jZTw9ZS5ob3ZlcmRpc3RhbmNlJiYodD1WKHQpKSwwPT09dC5sZW5ndGgpcmV0dXJuO3ZhciBxPXtzaG93bGVnZW5kOiEwLGxlZ2VuZDp7dGl0bGU6e3RleHQ6TCxmb250OmkuaG92ZXJsYWJlbC5mb250fSxmb250OmkuaG92ZXJsYWJlbC5mb250LGJnY29sb3I6aS5ob3ZlcmxhYmVsLmJnY29sb3IsYm9yZGVyY29sb3I6aS5ob3ZlcmxhYmVsLmJvcmRlcmNvbG9yLGJvcmRlcndpZHRoOjEsdHJhY2Vncm91cGdhcDo3LHRyYWNlb3JkZXI6aS5sZWdlbmQ/aS5sZWdlbmQudHJhY2VvcmRlcjp2b2lkIDAsb3JpZW50YXRpb246InYifX0sSD17fTt2KHEsSCxyLl9mdWxsRGF0YSk7dmFyIEc9SC5sZWdlbmQ7Ry5lbnRyaWVzPVtdO2Zvcih2YXIgWT0wO1k8dC5sZW5ndGg7WSsrKXt2YXIgVz1DKHRbWV0sITAsYSxpLEwpLFo9V1swXSxYPVdbMV0sSj10W1ldO0oubmFtZT1YLEoudGV4dD0iIiE9PVg/WCsiIDogIitaOlo7dmFyIEs9Si5jZFtKLmluZGV4XTtLJiYoSy5tYyYmKEoubWM9Sy5tYyksSy5tY2MmJihKLm1jPUsubWNjKSxLLm1sYyYmKEoubWxjPUsubWxjKSxLLm1sY2MmJihKLm1sYz1LLm1sY2MpLEsubWx3JiYoSi5tbHc9Sy5tbHcpLEsubXJjJiYoSi5tcmM9Sy5tcmMpLEsuZGlyJiYoSi5kaXI9Sy5kaXIpKSxKLl9kaXN0aW5jdD0hMCxHLmVudHJpZXMucHVzaChbSl0pfUcuZW50cmllcy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLnRyYWNlLmluZGV4LWVbMF0udHJhY2UuaW5kZXh9KSksRy5sYXllcj1mLHkocixHKTt2YXIgUT1vLm1lYW4odC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LnkwK3QueTEpLzJ9KSkpLCQ9by5tZWFuKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC54MCt0LngxKS8yfSkpKSx0dD1mLnNlbGVjdCgiZy5sZWdlbmQiKSxldD10dC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7JCs9VC5fb2Zmc2V0LFErPVMuX29mZnNldC1ldC5oZWlnaHQvMjt2YXIgcnQ9ZXQud2lkdGgrMipNOyEoJCtydDw9TykmJiQtcnQ+PTA/JC09cnQ6JCs9MipNO3ZhciBudD1ldC5oZWlnaHQrMipNLGl0PVErbnQ+PUQ7cmV0dXJuIG50PD1EJiYoUTw9ej9RPVMuX29mZnNldCsyKk06aXQmJihRPUQtbnQpKSx0dC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIiskKyIsIitRKyIpIiksdHR9dmFyIGF0PWYuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLmRhdGEodCwoZnVuY3Rpb24odCl7cmV0dXJuIEEodCl9KSk7cmV0dXJuIGF0LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJ0ZXh0IiwhMCkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZCgicmVjdCIpLmNhbGwoaC5maWxsLGguYWRkT3BhY2l0eShjLC44KSksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJuYW1lIiwhMCksdC5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwiMXB4IiksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJudW1zIiwhMCkuY2FsbCh1LmZvbnQsYixfKX0pKSxhdC5leGl0KCkucmVtb3ZlKCksYXQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwiIiksbz10LmNvbG9yO0FycmF5LmlzQXJyYXkobykmJihvPW9bdC5ldmVudERhdGFbMF0ucG9pbnROdW1iZXJdKTt2YXIgZj10LmJnY29sb3J8fG8scD1oLmNvbWJpbmUoaC5vcGFjaXR5KGYpP2Y6aC5kZWZhdWx0TGluZSxjKSxkPWguY29tYmluZShoLm9wYWNpdHkobyk/bzpoLmRlZmF1bHRMaW5lLGMpLGc9dC5ib3JkZXJDb2xvcnx8aC5jb250cmFzdChwKSxtPUModCxSLGEsaSxMLGUpLHY9bVswXSx5PW1bMV0sdz1lLnNlbGVjdCgidGV4dC5udW1zIikuY2FsbCh1LmZvbnQsdC5mb250RmFtaWx5fHxiLHQuZm9udFNpemV8fF8sdC5mb250Q29sb3J8fGcpLnRleHQodikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChsLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsciksVD1lLnNlbGVjdCgidGV4dC5uYW1lIiksQT0wLFM9MDtpZih5JiZ5IT09dil7VC5jYWxsKHUuZm9udCx0LmZvbnRGYW1pbHl8fGIsdC5mb250U2l6ZXx8XyxkKS50ZXh0KHkpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwobC5wb3NpdGlvblRleHQsMCwwKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHIpO3ZhciBFPVQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0E9RS53aWR0aCsyKk0sUz1FLmhlaWdodCsyKk19ZWxzZSBULnJlbW92ZSgpLGUuc2VsZWN0KCJyZWN0IikucmVtb3ZlKCk7ZS5zZWxlY3QoInBhdGgiKS5zdHlsZSh7ZmlsbDpwLHN0cm9rZTpnfSk7dmFyIFAsSSxGPXcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEI9dC54YS5fb2Zmc2V0Kyh0LngwK3QueDEpLzIsTj10LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMixqPU1hdGguYWJzKHQueDEtdC54MCksVT1NYXRoLmFicyh0LnkxLXQueTApLFY9Ri53aWR0aCtrK00rQTtpZih0LnR5MD16LUYudG9wLHQuYng9Ri53aWR0aCsyKk0sdC5ieT1NYXRoLm1heChGLmhlaWdodCsyKk0sUyksdC5hbmNob3I9InN0YXJ0Iix0LnR4d2lkdGg9Ri53aWR0aCx0LnR4MndpZHRoPUEsdC5vZmZzZXQ9MCxzKXQucG9zPUIsUD1OK1UvMitWPD1ELEk9Ti1VLzItVj49MCwidG9wIiE9PXQuaWRlYWxBbGlnbiYmUHx8IUk/UD8oTis9VS8yLHQuYW5jaG9yPSJzdGFydCIpOnQuYW5jaG9yPSJtaWRkbGUiOihOLT1VLzIsdC5hbmNob3I9ImVuZCIpO2Vsc2UgaWYodC5wb3M9TixQPUIrai8yK1Y8PU8sST1CLWovMi1WPj0wLCJsZWZ0IiE9PXQuaWRlYWxBbGlnbiYmUHx8IUkpaWYoUClCKz1qLzIsdC5hbmNob3I9InN0YXJ0IjtlbHNle3QuYW5jaG9yPSJtaWRkbGUiO3ZhciBxPVYvMixIPUIrcS1PLEc9Qi1xO0g+MCYmKEItPUgpLEc8MCYmKEIrPS1HKX1lbHNlIEItPWovMix0LmFuY2hvcj0iZW5kIjt3LmF0dHIoInRleHQtYW5jaG9yIix0LmFuY2hvciksQSYmVC5hdHRyKCJ0ZXh0LWFuY2hvciIsdC5hbmNob3IpLGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrQisiLCIrTisiKSIrKHM/InJvdGF0ZSgiK3grIikiOiIiKSl9KSksYXR9ZnVuY3Rpb24gQyh0LGUscixuLGksYSl7dmFyIHM9IiIsbD0iIjt2b2lkIDAhPT10Lm5hbWVPdmVycmlkZSYmKHQubmFtZT10Lm5hbWVPdmVycmlkZSksdC5uYW1lJiYodC50cmFjZS5fbWV0YSYmKHQubmFtZT1vLnRlbXBsYXRlU3RyaW5nKHQubmFtZSx0LnRyYWNlLl9tZXRhKSkscz1PKHQubmFtZSx0Lm5hbWVMZW5ndGgpKSx2b2lkIDAhPT10LnpMYWJlbD8odm9pZCAwIT09dC54TGFiZWwmJihsKz0ieDogIit0LnhMYWJlbCsiPGJyPiIpLHZvaWQgMCE9PXQueUxhYmVsJiYobCs9Ink6ICIrdC55TGFiZWwrIjxicj4iKSwiY2hvcm9wbGV0aCIhPT10LnRyYWNlLnR5cGUmJiJjaG9yb3BsZXRobWFwYm94IiE9PXQudHJhY2UudHlwZSYmKGwrPShsPyJ6OiAiOiIiKSt0LnpMYWJlbCkpOmUmJnRbci5jaGFyQXQoMCkrIkxhYmVsIl09PT1pP2w9dFsoIngiPT09ci5jaGFyQXQoMCk/InkiOiJ4IikrIkxhYmVsIl18fCIiOnZvaWQgMD09PXQueExhYmVsP3ZvaWQgMCE9PXQueUxhYmVsJiYic2NhdHRlcmNhcnBldCIhPT10LnRyYWNlLnR5cGUmJihsPXQueUxhYmVsKTpsPXZvaWQgMD09PXQueUxhYmVsP3QueExhYmVsOiIoIit0LnhMYWJlbCsiLCAiK3QueUxhYmVsKyIpIiwhdC50ZXh0JiYwIT09dC50ZXh0fHxBcnJheS5pc0FycmF5KHQudGV4dCl8fChsKz0obD8iPGJyPiI6IiIpK3QudGV4dCksdm9pZCAwIT09dC5leHRyYVRleHQmJihsKz0obD8iPGJyPiI6IiIpK3QuZXh0cmFUZXh0KSxhJiYiIj09PWwmJiF0LmhvdmVydGVtcGxhdGUmJigiIj09PXMmJmEucmVtb3ZlKCksbD1zKTt2YXIgYz1uLl9kM2xvY2FsZSx1PXQuaG92ZXJ0ZW1wbGF0ZXx8ITEsaD10LmhvdmVydGVtcGxhdGVMYWJlbHN8fHQsZj10LmV2ZW50RGF0YVswXXx8e307cmV0dXJuIHUmJihsPShsPW8uaG92ZXJ0ZW1wbGF0ZVN0cmluZyh1LGgsYyxmLHQudHJhY2UuX21ldGEpKS5yZXBsYWNlKFMsKGZ1bmN0aW9uKGUscil7cmV0dXJuIHM9TyhyLHQubmFtZUxlbmd0aCksIiJ9KSkpLFtsLHNdfWZ1bmN0aW9uIEwodCxlKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQuZGVsKXJldHVybiByLnJlbW92ZSgpO3ZhciBpPXIuc2VsZWN0KCJ0ZXh0Lm51bXMiKSxhPXQuYW5jaG9yLG89ImVuZCI9PT1hPy0xOjEscz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W2FdLGM9cyooaytNKSxoPWMrcyoodC50eHdpZHRoK00pLGY9MCxwPXQub2Zmc2V0OyJtaWRkbGUiPT09YSYmKGMtPXQudHgyd2lkdGgvMixoKz10LnR4d2lkdGgvMitNKSxlJiYocCo9LVQsZj10Lm9mZnNldCp3KSxyLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLCJtaWRkbGUiPT09YT8iTS0iKyh0LmJ4LzIrdC50eDJ3aWR0aC8yKSsiLCIrKHAtdC5ieS8yKSsiaCIrdC5ieCsidiIrdC5ieSsiaC0iK3QuYngrIloiOiJNMCwwTCIrKG8qaytmKSsiLCIrKGsrcCkrInYiKyh0LmJ5LzItaykrImgiK28qdC5ieCsidi0iK3QuYnkrIkgiKyhvKmsrZikrIlYiKyhwLWspKyJaIik7dmFyIGQ9YytmLGc9cCt0LnR5MC10LmJ5LzIrTSxtPXQudGV4dEFsaWdufHwiYXV0byI7ImF1dG8iIT09bSYmKCJsZWZ0Ij09PW0mJiJzdGFydCIhPT1hPyhpLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSxkPSJtaWRkbGUiPT09YT8tdC5ieC8yLXQudHgyd2lkdGgvMitNOi10LmJ4LU0pOiJyaWdodCI9PT1tJiYiZW5kIiE9PWEmJihpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIiksZD0ibWlkZGxlIj09PWE/dC5ieC8yLXQudHgyd2lkdGgvMi1NOnQuYngrTSkpLGkuY2FsbChsLnBvc2l0aW9uVGV4dCxkLGcpLHQudHgyd2lkdGgmJihyLnNlbGVjdCgidGV4dC5uYW1lIikuY2FsbChsLnBvc2l0aW9uVGV4dCxoK3MqTStmLHArdC50eTAtdC5ieS8yK00pLHIuc2VsZWN0KCJyZWN0IikuY2FsbCh1LnNldFJlY3QsaCsocy0xKSp0LnR4MndpZHRoLzIrZixwLXQuYnkvMi0xLHQudHgyd2lkdGgsdC5ieSsyKSl9KSl9ZnVuY3Rpb24gUCh0LGUpe3ZhciByPXQuaW5kZXgsbj10LnRyYWNlfHx7fSxhPXQuY2RbMF0scz10LmNkW3JdfHx7fTtmdW5jdGlvbiBsKHQpe3JldHVybiB0fHxpKHQpJiYwPT09dH12YXIgYz1BcnJheS5pc0FycmF5KHIpP2Z1bmN0aW9uKHQsZSl7dmFyIGk9by5jYXN0T3B0aW9uKGEscix0KTtyZXR1cm4gbChpKT9pOm8uZXh0cmFjdE9wdGlvbih7fSxuLCIiLGUpfTpmdW5jdGlvbih0LGUpe3JldHVybiBvLmV4dHJhY3RPcHRpb24ocyxuLHQsZSl9O2Z1bmN0aW9uIHUoZSxyLG4pe3ZhciBpPWMocixuKTtsKGkpJiYodFtlXT1pKX1pZih1KCJob3ZlcmluZm8iLCJoaSIsImhvdmVyaW5mbyIpLHUoImJnY29sb3IiLCJoYmciLCJob3ZlcmxhYmVsLmJnY29sb3IiKSx1KCJib3JkZXJDb2xvciIsImhiYyIsImhvdmVybGFiZWwuYm9yZGVyY29sb3IiKSx1KCJmb250RmFtaWx5IiwiaHRmIiwiaG92ZXJsYWJlbC5mb250LmZhbWlseSIpLHUoImZvbnRTaXplIiwiaHRzIiwiaG92ZXJsYWJlbC5mb250LnNpemUiKSx1KCJmb250Q29sb3IiLCJodGMiLCJob3ZlcmxhYmVsLmZvbnQuY29sb3IiKSx1KCJuYW1lTGVuZ3RoIiwiaG5sIiwiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoIiksdSgidGV4dEFsaWduIiwiaHRhIiwiaG92ZXJsYWJlbC5hbGlnbiIpLHQucG9zcmVmPSJ5Ij09PWV8fCJjbG9zZXN0Ij09PWUmJiJoIj09PW4ub3JpZW50YXRpb24/dC54YS5fb2Zmc2V0Kyh0LngwK3QueDEpLzI6dC55YS5fb2Zmc2V0Kyh0LnkwK3QueTEpLzIsdC54MD1vLmNvbnN0cmFpbih0LngwLDAsdC54YS5fbGVuZ3RoKSx0LngxPW8uY29uc3RyYWluKHQueDEsMCx0LnhhLl9sZW5ndGgpLHQueTA9by5jb25zdHJhaW4odC55MCwwLHQueWEuX2xlbmd0aCksdC55MT1vLmNvbnN0cmFpbih0LnkxLDAsdC55YS5fbGVuZ3RoKSx2b2lkIDAhPT10LnhMYWJlbFZhbCYmKHQueExhYmVsPSJ4TGFiZWwiaW4gdD90LnhMYWJlbDpwLmhvdmVyTGFiZWxUZXh0KHQueGEsdC54TGFiZWxWYWwpLHQueFZhbD10LnhhLmMyZCh0LnhMYWJlbFZhbCkpLHZvaWQgMCE9PXQueUxhYmVsVmFsJiYodC55TGFiZWw9InlMYWJlbCJpbiB0P3QueUxhYmVsOnAuaG92ZXJMYWJlbFRleHQodC55YSx0LnlMYWJlbFZhbCksdC55VmFsPXQueWEuYzJkKHQueUxhYmVsVmFsKSksdm9pZCAwIT09dC56TGFiZWxWYWwmJnZvaWQgMD09PXQuekxhYmVsJiYodC56TGFiZWw9U3RyaW5nKHQuekxhYmVsVmFsKSksIShpc05hTih0LnhlcnIpfHwibG9nIj09PXQueGEudHlwZSYmdC54ZXJyPD0wKSl7dmFyIGg9cC50aWNrVGV4dCh0LnhhLHQueGEuYzJsKHQueGVyciksImhvdmVyIikudGV4dDt2b2lkIDAhPT10LnhlcnJuZWc/dC54TGFiZWwrPSIgKyIraCsiIC8gLSIrcC50aWNrVGV4dCh0LnhhLHQueGEuYzJsKHQueGVycm5lZyksImhvdmVyIikudGV4dDp0LnhMYWJlbCs9IiBceGIxICIraCwieCI9PT1lJiYodC5kaXN0YW5jZSs9MSl9aWYoIShpc05hTih0LnllcnIpfHwibG9nIj09PXQueWEudHlwZSYmdC55ZXJyPD0wKSl7dmFyIGY9cC50aWNrVGV4dCh0LnlhLHQueWEuYzJsKHQueWVyciksImhvdmVyIikudGV4dDt2b2lkIDAhPT10LnllcnJuZWc/dC55TGFiZWwrPSIgKyIrZisiIC8gLSIrcC50aWNrVGV4dCh0LnlhLHQueWEuYzJsKHQueWVycm5lZyksImhvdmVyIikudGV4dDp0LnlMYWJlbCs9IiBceGIxICIrZiwieSI9PT1lJiYodC5kaXN0YW5jZSs9MSl9dmFyIGQ9dC5ob3ZlcmluZm98fHQudHJhY2UuaG92ZXJpbmZvO3JldHVybiBkJiYiYWxsIiE9PWQmJigtMT09PShkPUFycmF5LmlzQXJyYXkoZCk/ZDpkLnNwbGl0KCIrIikpLmluZGV4T2YoIngiKSYmKHQueExhYmVsPXZvaWQgMCksLTE9PT1kLmluZGV4T2YoInkiKSYmKHQueUxhYmVsPXZvaWQgMCksLTE9PT1kLmluZGV4T2YoInoiKSYmKHQuekxhYmVsPXZvaWQgMCksLTE9PT1kLmluZGV4T2YoInRleHQiKSYmKHQudGV4dD12b2lkIDApLC0xPT09ZC5pbmRleE9mKCJuYW1lIikmJih0Lm5hbWU9dm9pZCAwKSksdH1mdW5jdGlvbiBJKHQsZSxyKXt2YXIgbixpLG89ci5jb250YWluZXIscz1yLmZ1bGxMYXlvdXQsbD1zLl9zaXplLGM9ci5ldmVudCxmPSEhZS5oTGluZVBvaW50LGQ9ISFlLnZMaW5lUG9pbnQ7aWYoby5zZWxlY3RBbGwoIi5zcGlrZWxpbmUiKS5yZW1vdmUoKSxkfHxmKXt2YXIgZz1oLmNvbWJpbmUocy5wbG90X2JnY29sb3Iscy5wYXBlcl9iZ2NvbG9yKTtpZihmKXt2YXIgbSx2LHk9ZS5oTGluZVBvaW50O249eSYmeS54YSwiY3Vyc29yIj09PShpPXkmJnkueWEpLnNwaWtlc25hcD8obT1jLnBvaW50ZXJYLHY9Yy5wb2ludGVyWSk6KG09bi5fb2Zmc2V0K3kueCx2PWkuX29mZnNldCt5LnkpO3ZhciB4LGIsXz1hLnJlYWRhYmlsaXR5KHkuY29sb3IsZyk8MS41P2guY29udHJhc3QoZyk6eS5jb2xvcix3PWkuc3Bpa2Vtb2RlLFQ9aS5zcGlrZXRoaWNrbmVzcyxrPWkuc3Bpa2Vjb2xvcnx8XyxNPXAuZ2V0UHhQb3NpdGlvbih0LGkpO2lmKC0xIT09dy5pbmRleE9mKCJ0b2F4aXMiKXx8LTEhPT13LmluZGV4T2YoImFjcm9zcyIpKXtpZigtMSE9PXcuaW5kZXhPZigidG9heGlzIikmJih4PU0sYj1tKSwtMSE9PXcuaW5kZXhPZigiYWNyb3NzIikpe3ZhciBBPWkuX2NvdW50ZXJEb21haW5NaW4sUz1pLl9jb3VudGVyRG9tYWluTWF4OyJmcmVlIj09PWkuYW5jaG9yJiYoQT1NYXRoLm1pbihBLGkucG9zaXRpb24pLFM9TWF0aC5tYXgoUyxpLnBvc2l0aW9uKSkseD1sLmwrQSpsLncsYj1sLmwrUypsLnd9by5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTp4LHgyOmIseTE6dix5Mjp2LCJzdHJva2Utd2lkdGgiOlQsc3Ryb2tlOmssInN0cm9rZS1kYXNoYXJyYXkiOnUuZGFzaFN0eWxlKGkuc3Bpa2VkYXNoLFQpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxvLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOngseDI6Yix5MTp2LHkyOnYsInN0cm9rZS13aWR0aCI6VCsyLHN0cm9rZTpnfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PXcuaW5kZXhPZigibWFya2VyIikmJm8uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHtjeDpNKygicmlnaHQiIT09aS5zaWRlP1Q6LVQpLGN5OnYscjpULGZpbGw6a30pLmNsYXNzZWQoInNwaWtlbGluZSIsITApfWlmKGQpe3ZhciBFLEMsTD1lLnZMaW5lUG9pbnQ7bj1MJiZMLnhhLGk9TCYmTC55YSwiY3Vyc29yIj09PW4uc3Bpa2VzbmFwPyhFPWMucG9pbnRlclgsQz1jLnBvaW50ZXJZKTooRT1uLl9vZmZzZXQrTC54LEM9aS5fb2Zmc2V0K0wueSk7dmFyIFAsSSx6PWEucmVhZGFiaWxpdHkoTC5jb2xvcixnKTwxLjU/aC5jb250cmFzdChnKTpMLmNvbG9yLE89bi5zcGlrZW1vZGUsRD1uLnNwaWtldGhpY2tuZXNzLFI9bi5zcGlrZWNvbG9yfHx6LEY9cC5nZXRQeFBvc2l0aW9uKHQsbik7aWYoLTEhPT1PLmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PU8uaW5kZXhPZigiYWNyb3NzIikpe2lmKC0xIT09Ty5pbmRleE9mKCJ0b2F4aXMiKSYmKFA9RixJPUMpLC0xIT09Ty5pbmRleE9mKCJhY3Jvc3MiKSl7dmFyIEI9bi5fY291bnRlckRvbWFpbk1pbixOPW4uX2NvdW50ZXJEb21haW5NYXg7ImZyZWUiPT09bi5hbmNob3ImJihCPU1hdGgubWluKEIsbi5wb3NpdGlvbiksTj1NYXRoLm1heChOLG4ucG9zaXRpb24pKSxQPWwudCsoMS1OKSpsLmgsST1sLnQrKDEtQikqbC5ofW8uaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6RSx4MjpFLHkxOlAseTI6SSwic3Ryb2tlLXdpZHRoIjpELHN0cm9rZTpSLCJzdHJva2UtZGFzaGFycmF5Ijp1LmRhc2hTdHlsZShuLnNwaWtlZGFzaCxEKX0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCksby5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTpFLHgyOkUseTE6UCx5MjpJLCJzdHJva2Utd2lkdGgiOkQrMixzdHJva2U6Z30pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCl9LTEhPT1PLmluZGV4T2YoIm1hcmtlciIpJiZvLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7Y3g6RSxjeTpGLSgidG9wIiE9PW4uc2lkZT9EOi1EKSxyOkQsZmlsbDpSfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCl9fX1mdW5jdGlvbiB6KHQsZSl7cmV0dXJuIWV8fChlLnZMaW5lUG9pbnQhPT10Ll9zcGlrZXBvaW50cy52TGluZVBvaW50fHxlLmhMaW5lUG9pbnQhPT10Ll9zcGlrZXBvaW50cy5oTGluZVBvaW50KX1mdW5jdGlvbiBPKHQsZSl7cmV0dXJuIGwucGxhaW5UZXh0KHR8fCIiLHtsZW46ZSxhbGxvd2VkVGFnczpbImJyIiwic3ViIiwic3VwIiwiYiIsImkiLCJlbSJdfSl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvZXZlbnRzIjo3MzksIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3IiOjc2MSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL2NvbG9yIjo2MTUsIi4uL2RyYWdlbGVtZW50Ijo2MzQsIi4uL2RyYXdpbmciOjYzNywiLi4vbGVnZW5kL2RlZmF1bHRzIjo2NjcsIi4uL2xlZ2VuZC9kcmF3Ijo2NjgsIi4vY29uc3RhbnRzIjo2NDksIi4vaGVscGVycyI6NjUxLGQzOjE2OSwiZmFzdC1pc251bWVyaWMiOjI0MSx0aW55Y29sb3IyOjU0OH1dLDY1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NvbG9yIiksYT10KCIuL2hlbHBlcnMiKS5pc1VuaWZpZWRIb3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyh0KXtvLmZvbnRbdF18fChvLmZvbnRbdF09ZS5sZWdlbmQ/ZS5sZWdlbmQuZm9udFt0XTplLmZvbnRbdF0pfW89b3x8e30sZSYmYShlLmhvdmVybW9kZSkmJihvLmZvbnR8fChvLmZvbnQ9e30pLHMoInNpemUiKSxzKCJmYW1pbHkiKSxzKCJjb2xvciIpLGUubGVnZW5kPyhvLmJnY29sb3J8fChvLmJnY29sb3I9aS5jb21iaW5lKGUubGVnZW5kLmJnY29sb3IsZS5wYXBlcl9iZ2NvbG9yKSksby5ib3JkZXJjb2xvcnx8KG8uYm9yZGVyY29sb3I9ZS5sZWdlbmQuYm9yZGVyY29sb3IpKTpvLmJnY29sb3J8fChvLmJnY29sb3I9ZS5wYXBlcl9iZ2NvbG9yKSkscigiaG92ZXJsYWJlbC5iZ2NvbG9yIixvLmJnY29sb3IpLHIoImhvdmVybGFiZWwuYm9yZGVyY29sb3IiLG8uYm9yZGVyY29sb3IpLHIoImhvdmVybGFiZWwubmFtZWxlbmd0aCIsby5uYW1lbGVuZ3RoKSxuLmNvZXJjZUZvbnQociwiaG92ZXJsYWJlbC5mb250IixvLmZvbnQpLHIoImhvdmVybGFiZWwuYWxpZ24iLG8uYWxpZ24pfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vY29sb3IiOjYxNSwiLi9oZWxwZXJzIjo2NTF9XSw2NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBhKHIsYSl7cmV0dXJuIHZvaWQgMCE9PWVbcl0/ZVtyXTpuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBvLHM9YSgiY2xpY2ttb2RlIik7cmV0dXJuIGUuX2hhcygiY2FydGVzaWFuIik/cy5pbmRleE9mKCJzZWxlY3QiKT4tMT9vPSJjbG9zZXN0IjooZS5faXNIb3Jpej1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9zY2F0dGVyU3RhY2tPcHRzfHx7fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pLnhheGlzK2kueWF4aXMsbz0oclthXXx8e30pW2kuc3RhY2tncm91cF18fHt9O2lmKCJoIiE9PWkub3JpZW50YXRpb24mJiJoIiE9PW8ub3JpZW50YXRpb24pcmV0dXJuITF9cmV0dXJuITB9KHIsZSksbz1lLl9pc0hvcml6PyJ5IjoieCIpOm89ImNsb3Nlc3QiLGEoImhvdmVybW9kZSIsbyl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NTZ9XSw2NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vZHJhZ2VsZW1lbnQiKSxvPXQoIi4vaGVscGVycyIpLHM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGw9dCgiLi9ob3ZlciIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJmeCIsY29uc3RhbnRzOnQoIi4vY29uc3RhbnRzIiksc2NoZW1hOntsYXlvdXQ6c30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnMsc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM6dCgiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxnZXREaXN0YW5jZUZ1bmN0aW9uOm8uZ2V0RGlzdGFuY2VGdW5jdGlvbixnZXRDbG9zZXN0Om8uZ2V0Q2xvc2VzdCxpbmJveDpvLmluYm94LHF1YWRyYXR1cmU6by5xdWFkcmF0dXJlLGFwcGVuZEFycmF5UG9pbnRWYWx1ZTpvLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxjYXN0SG92ZXJPcHRpb246ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpLmNhc3RPcHRpb24odCxlLCJob3ZlcmxhYmVsLiIrcil9LGNhc3RIb3ZlcmluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpLmNhc3RPcHRpb24odCxyLCJob3ZlcmluZm8iLChmdW5jdGlvbihyKXtyZXR1cm4gaS5jb2VyY2VIb3ZlcmluZm8oe2hvdmVyaW5mbzpyfSx7X21vZHVsZTp0Ll9tb2R1bGV9LGUpfSkpfSxob3ZlcjpsLmhvdmVyLHVuaG92ZXI6YS51bmhvdmVyLGxvbmVIb3ZlcjpsLmxvbmVIb3Zlcixsb25lVW5ob3ZlcjpmdW5jdGlvbih0KXt2YXIgZT1pLmlzRDNTZWxlY3Rpb24odCk/dDpuLnNlbGVjdCh0KTtlLnNlbGVjdEFsbCgiZy5ob3ZlcnRleHQiKS5yZW1vdmUoKSxlLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpfSxjbGljazp0KCIuL2NsaWNrIil9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi9kcmFnZWxlbWVudCI6NjM0LCIuL2F0dHJpYnV0ZXMiOjY0NiwiLi9jYWxjIjo2NDcsIi4vY2xpY2siOjY0OCwiLi9jb25zdGFudHMiOjY0OSwiLi9kZWZhdWx0cyI6NjUwLCIuL2hlbHBlcnMiOjY1MSwiLi9ob3ZlciI6NjUyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NTYsIi4vbGF5b3V0X2RlZmF1bHRzIjo2NTcsIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0cyI6NjU4LGQzOjE2OX1dLDY1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikoe2VkaXRUeXBlOiJub25lIn0pO2kuZmFtaWx5LmRmbHQ9bi5IT1ZFUkZPTlQsaS5zaXplLmRmbHQ9bi5IT1ZFUkZPTlRTSVpFLGUuZXhwb3J0cz17Y2xpY2ttb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJldmVudCIsInNlbGVjdCJdLGRmbHQ6ImV2ZW50IixlZGl0VHlwZToicGxvdCIsZXh0cmFzOlsibm9uZSJdfSxkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiem9vbSIsInBhbiIsInNlbGVjdCIsImxhc3NvIiwiZHJhd2Nsb3NlZHBhdGgiLCJkcmF3b3BlbnBhdGgiLCJkcmF3bGluZSIsImRyYXdyZWN0IiwiZHJhd2NpcmNsZSIsIm9yYml0IiwidHVybnRhYmxlIiwhMV0sZGZsdDoiem9vbSIsZWRpdFR5cGU6Im1vZGViYXIifSxob3Zlcm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIngiLCJ5IiwiY2xvc2VzdCIsITEsInggdW5pZmllZCIsInkgdW5pZmllZCJdLGVkaXRUeXBlOiJtb2RlYmFyIn0saG92ZXJkaXN0YW5jZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MjAsZWRpdFR5cGU6Im5vbmUifSxzcGlrZWRpc3RhbmNlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZToibm9uZSJ9LGhvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im5vbmUifSxmb250OmksYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJyaWdodCIsImF1dG8iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToibm9uZSJ9LG5hbWVsZW5ndGg6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjE1LGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6Im5vbmUifSxzZWxlY3RkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImgiLCJ2IiwiZCIsImFueSJdLGRmbHQ6ImFueSIsZWRpdFR5cGU6Im5vbmUifX19LHsiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4MjcsIi4vY29uc3RhbnRzIjo2NDl9XSw2NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2hlbHBlcnMiKS5pc1VuaWZpZWRIb3ZlcixhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4vaG92ZXJtb2RlX2RlZmF1bHRzIikscz10KCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGwocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgYz1vKHQsZSxyKTtjJiYobCgiaG92ZXJkaXN0YW5jZSIpLGwoInNwaWtlZGlzdGFuY2UiLGkoYyk/LTE6dm9pZCAwKSksInNlbGVjdCI9PT1sKCJkcmFnbW9kZSIpJiZsKCJzZWxlY3RkaXJlY3Rpb24iKTt2YXIgdT1lLl9oYXMoIm1hcGJveCIpLGg9ZS5faGFzKCJnZW8iKSxmPWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7Inpvb20iPT09ZS5kcmFnbW9kZSYmKCh1fHxoKSYmMT09PWZ8fHUmJmgmJjI9PT1mKSYmKGUuZHJhZ21vZGU9InBhbiIpLHModCxlLGwpfX0seyIuLi8uLi9saWIiOjc1MCwiLi9oZWxwZXJzIjo2NTEsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6NjUzLCIuL2hvdmVybW9kZV9kZWZhdWx0cyI6NjU0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NTZ9XSw2NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSwoZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX0pKX19LHsiLi4vLi4vbGliIjo3NTAsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6NjUzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NTZ9XSw2NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9saWIvcmVnZXgiKS5jb3VudGVyLGE9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKS5pZFJlZ2V4LHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGw9e3Jvd3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGVkaXRUeXBlOiJwbG90In0scm93b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCB0byBib3R0b20iLCJib3R0b20gdG8gdG9wIl0sZGZsdDoidG9wIHRvIGJvdHRvbSIsZWRpdFR5cGU6InBsb3QifSxjb2x1bW5zOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxlZGl0VHlwZToicGxvdCJ9LHN1YnBsb3RzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6MixpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltpKCJ4eSIpLnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx4YXhlczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltvLngudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHlheGVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W28ueS50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0scGF0dGVybjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5kZXBlbmRlbnQiLCJjb3VwbGVkIl0sZGZsdDoiY291cGxlZCIsZWRpdFR5cGU6InBsb3QifSx4Z2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0seWdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjphKHtuYW1lOiJncmlkIixlZGl0VHlwZToicGxvdCIsbm9HcmlkQ2VsbDohMH0se30pLHhzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJib3R0b20iLCJib3R0b20gcGxvdCIsInRvcCBwbG90IiwidG9wIl0sZGZsdDoiYm90dG9tIHBsb3QiLGVkaXRUeXBlOiJwbG90In0seXNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJsZWZ0IHBsb3QiLCJyaWdodCBwbG90IiwicmlnaHQiXSxkZmx0OiJsZWZ0IHBsb3QiLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifTtmdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1lW3IrImF4ZXMiXSxpPU9iamVjdC5rZXlzKCh0Ll9zcGxvbUF4ZXN8fHt9KVtyXXx8e30pO3JldHVybiBBcnJheS5pc0FycmF5KG4pP246aS5sZW5ndGg/aTp2b2lkIDB9ZnVuY3Rpb24gdSh0LGUscixuLGksYSl7dmFyIG89ZSh0KyJnYXAiLHIpLHM9ZSgiZG9tYWluLiIrdCk7ZSh0KyJzaWRlIixuKTtmb3IodmFyIGw9bmV3IEFycmF5KGkpLGM9c1swXSx1PShzWzFdLWMpLyhpLW8pLGg9dSooMS1vKSxmPTA7ZjxpO2YrKyl7dmFyIHA9Yyt1KmY7bFthP2ktMS1mOmZdPVtwLHAraF19cmV0dXJuIGx9ZnVuY3Rpb24gaCh0LGUscixuLGkpe3ZhciBhLG89bmV3IEFycmF5KHIpO2Z1bmN0aW9uIHModCxyKXstMSE9PWUuaW5kZXhPZihyKSYmdm9pZCAwPT09bltyXT8ob1t0XT1yLG5bcl09dCk6b1t0XT0iIn1pZihBcnJheS5pc0FycmF5KHQpKWZvcihhPTA7YTxyO2ErKylzKGEsdFthXSk7ZWxzZSBmb3IocygwLGkpLGE9MTthPHI7YSsrKXMoYSxpKyhhKzEpKTtyZXR1cm4gb31lLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZ3JpZCIsc2NoZW1hOntsYXlvdXQ6e2dyaWQ6bH19LGxheW91dEF0dHJpYnV0ZXM6bCxzaXplRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdyaWR8fHt9LGk9YyhlLHIsIngiKSxhPWMoZSxyLCJ5Iik7aWYodC5ncmlkfHxpfHxhKXt2YXIgbyxoLGY9QXJyYXkuaXNBcnJheShyLnN1YnBsb3RzKSYmQXJyYXkuaXNBcnJheShyLnN1YnBsb3RzWzBdKSxwPUFycmF5LmlzQXJyYXkoaSksZD1BcnJheS5pc0FycmF5KGEpLGc9cCYmaSE9PXIueGF4ZXMmJmQmJmEhPT1yLnlheGVzO2Y/KG89ci5zdWJwbG90cy5sZW5ndGgsaD1yLnN1YnBsb3RzWzBdLmxlbmd0aCk6KGQmJihvPWEubGVuZ3RoKSxwJiYoaD1pLmxlbmd0aCkpO3ZhciBtPXMubmV3Q29udGFpbmVyKGUsImdyaWQiKSx2PWsoInJvd3MiLG8pLHk9aygiY29sdW1ucyIsaCk7aWYodip5PjEpe2lmKCFmJiYhcCYmIWQpImluZGVwZW5kZW50Ij09PWsoInBhdHRlcm4iKSYmKGY9ITApO20uX2hhc1N1YnBsb3RHcmlkPWY7dmFyIHgsYixfPSJ0b3AgdG8gYm90dG9tIj09PWsoInJvd29yZGVyIiksdz1mPy4yOi4xLFQ9Zj8uMzouMTtnJiZlLl9zcGxvbUdyaWREZmx0JiYoeD1lLl9zcGxvbUdyaWREZmx0LnhzaWRlLGI9ZS5fc3Bsb21HcmlkRGZsdC55c2lkZSksbS5fZG9tYWlucz17eDp1KCJ4IixrLHcseCx5KSx5OnUoInkiLGssVCxiLHYsXyl9fWVsc2UgZGVsZXRlIGUuZ3JpZH1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIG4uY29lcmNlKHIsbSxsLHQsZSl9fSxjb250ZW50RGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmdyaWQ7aWYociYmci5fZG9tYWlucyl7dmFyIG4saSxhLG8scyxsLHUsZj10LmdyaWR8fHt9LHA9ZS5fc3VicGxvdHMsZD1yLl9oYXNTdWJwbG90R3JpZCxnPXIucm93cyxtPXIuY29sdW1ucyx2PSJpbmRlcGVuZGVudCI9PT1yLnBhdHRlcm4seT1yLl9heGlzTWFwPXt9O2lmKGQpe3ZhciB4PWYuc3VicGxvdHN8fFtdO2w9ci5zdWJwbG90cz1uZXcgQXJyYXkoZyk7dmFyIGI9MTtmb3Iobj0wO248ZztuKyspe3ZhciBfPWxbbl09bmV3IEFycmF5KG0pLHc9eFtuXXx8W107Zm9yKGk9MDtpPG07aSsrKWlmKHY/KHM9MT09PWI/Inh5IjoieCIrYisieSIrYixiKyspOnM9d1tpXSxfW2ldPSIiLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihzKSl7aWYodT1zLmluZGV4T2YoInkiKSxhPXMuc2xpY2UoMCx1KSxvPXMuc2xpY2UodSksdm9pZCAwIT09eVthXSYmeVthXSE9PWl8fHZvaWQgMCE9PXlbb10mJnlbb10hPT1uKWNvbnRpbnVlO19baV09cyx5W2FdPWkseVtvXT1ufX19ZWxzZXt2YXIgVD1jKGUsZiwieCIpLGs9YyhlLGYsInkiKTtyLnhheGVzPWgoVCxwLnhheGlzLG0seSwieCIpLHIueWF4ZXM9aChrLHAueWF4aXMsZyx5LCJ5Iil9dmFyIE09ci5fYW5jaG9ycz17fSxBPSJ0b3AgdG8gYm90dG9tIj09PXIucm93b3JkZXI7Zm9yKHZhciBTIGluIHkpe3ZhciBFLEMsTCxQPVMuY2hhckF0KDApLEk9cltQKyJzaWRlIl07aWYoSS5sZW5ndGg8OClNW1NdPSJmcmVlIjtlbHNlIGlmKCJ4Ij09PVApe2lmKCJ0Ij09PUkuY2hhckF0KDApPT09QT8oRT0wLEM9MSxMPWcpOihFPWctMSxDPS0xLEw9LTEpLGQpe3ZhciB6PXlbU107Zm9yKG49RTtuIT09TDtuKz1DKWlmKChzPWxbbl1bel0pJiYodT1zLmluZGV4T2YoInkiKSxzLnNsaWNlKDAsdSk9PT1TKSl7TVtTXT1zLnNsaWNlKHUpO2JyZWFrfX1lbHNlIGZvcihuPUU7biE9PUw7bis9QylpZihvPXIueWF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKFMrbykpe01bU109bzticmVha319ZWxzZSBpZigibCI9PT1JLmNoYXJBdCgwKT8oRT0wLEM9MSxMPW0pOihFPW0tMSxDPS0xLEw9LTEpLGQpe3ZhciBPPXlbU107Zm9yKG49RTtuIT09TDtuKz1DKWlmKChzPWxbT11bbl0pJiYodT1zLmluZGV4T2YoInkiKSxzLnNsaWNlKHUpPT09Uykpe01bU109cy5zbGljZSgwLHUpO2JyZWFrfX1lbHNlIGZvcihuPUU7biE9PUw7bis9QylpZihhPXIueGF4ZXNbbl0sLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKGErUykpe01bU109YTticmVha319fX19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvcmVnZXgiOjc2NiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6Nzg4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MDUsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODI2fV0sNjYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTt0KCIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyIpO2UuZXhwb3J0cz1pKCJpbWFnZSIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNvdXJjZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiYXJyYXlkcmF3In0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemV4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6ZXk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXppbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJjb250YWluIiwic3RyZXRjaCJdLGRmbHQ6ImNvbnRhaW4iLGVkaXRUeXBlOiJhcnJheWRyYXcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0seDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHk6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToiYXJyYXlkcmF3In0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIixlZGl0VHlwZToiYXJyYXlkcmF3In0seHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLG4uaWRSZWdleC54LnRvU3RyaW5nKCldLGRmbHQ6InBhcGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLG4uaWRSZWdleC55LnRvU3RyaW5nKCldLGRmbHQ6InBhcGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KX0seyIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyI6NzE4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjgwNX1dLDY2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtlPWV8fHt9O3ZhciBvPSJsb2ciPT09ciYmImxpbmVhciI9PT1lLnR5cGUscz0ibGluZWFyIj09PXImJiJsb2ciPT09ZS50eXBlO2lmKG98fHMpZm9yKHZhciBsLGMsdT10Ll9mdWxsTGF5b3V0LmltYWdlcyxoPWUuX2lkLmNoYXJBdCgwKSxmPTA7Zjx1Lmxlbmd0aDtmKyspaWYoYz0iaW1hZ2VzWyIrZisiXS4iLChsPXVbZl0pW2grInJlZiJdPT09ZS5faWQpe3ZhciBwPWxbaF0sZD1sWyJzaXplIitoXSxnPW51bGwsbT1udWxsO2lmKG8pe2c9aShwLGUucmFuZ2UpO3ZhciB2PWQvTWF0aC5wb3coMTAsZykvMjttPTIqTWF0aC5sb2coditNYXRoLnNxcnQoMSt2KnYpKS9NYXRoLkxOMTB9ZWxzZSBtPShnPU1hdGgucG93KDEwLHApKSooTWF0aC5wb3coMTAsZC8yKS1NYXRoLnBvdygxMCwtZC8yKSk7bihnKT9uKG0pfHwobT1udWxsKTooZz1udWxsLG09bnVsbCksYShjK2gsZyksYShjKyJzaXplIitoLG0pfX19LHsiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSI6Nzc2LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfXZhciBzPWEoInNvdXJjZSIpO2lmKCFhKCJ2aXNpYmxlIiwhIXMpKXJldHVybiBlO2EoImxheWVyIiksYSgieGFuY2hvciIpLGEoInlhbmNob3IiKSxhKCJzaXpleCIpLGEoInNpemV5IiksYSgic2l6aW5nIiksYSgib3BhY2l0eSIpO2Zvcih2YXIgbD17X2Z1bGxMYXlvdXQ6cn0sYz1bIngiLCJ5Il0sdT0wO3U8Mjt1Kyspe3ZhciBoPWNbdV0sZj1pLmNvZXJjZVJlZih0LGUsbCxoLCJwYXBlciIsdm9pZCAwKTtpZigicGFwZXIiIT09ZilpLmdldEZyb21JZChsLGYpLl9pbWdJbmRpY2VzLnB1c2goZS5faW5kZXgpO2kuY29lcmNlUG9zaXRpb24oZSxsLGEsZixoLDApfXJldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOiJpbWFnZXMiLGhhbmRsZUl0ZW1EZWZhdWx0czpzfSl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc5NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi9hdHRyaWJ1dGVzIjo2NjB9XSw2NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2RyYXdpbmciKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbD10Ll9mdWxsTGF5b3V0LGM9W10sdT17fSxoPVtdO2ZvcihyPTA7cjxsLmltYWdlcy5sZW5ndGg7cisrKXt2YXIgZj1sLmltYWdlc1tyXTtpZihmLnZpc2libGUpaWYoImJlbG93Ij09PWYubGF5ZXImJiJwYXBlciIhPT1mLnhyZWYmJiJwYXBlciIhPT1mLnlyZWYpe2U9by5yZWYyaWQoZi54cmVmKStvLnJlZjJpZChmLnlyZWYpO3ZhciBwPWwuX3Bsb3RzW2VdO2lmKCFwKXtoLnB1c2goZik7Y29udGludWV9cC5tYWlucGxvdCYmKGU9cC5tYWlucGxvdC5pZCksdVtlXXx8KHVbZV09W10pLHVbZV0ucHVzaChmKX1lbHNlImFib3ZlIj09PWYubGF5ZXI/Yy5wdXNoKGYpOmgucHVzaChmKX12YXIgZD17bGVmdDp7c2l6aW5nOiJ4TWluIixvZmZzZXQ6MH0sY2VudGVyOntzaXppbmc6InhNaWQiLG9mZnNldDotLjV9LHJpZ2h0OntzaXppbmc6InhNYXgiLG9mZnNldDotMX19LGc9e3RvcDp7c2l6aW5nOiJZTWluIixvZmZzZXQ6MH0sbWlkZGxlOntzaXppbmc6IllNaWQiLG9mZnNldDotLjV9LGJvdHRvbTp7c2l6aW5nOiJZTWF4IixvZmZzZXQ6LTF9fTtmdW5jdGlvbiBtKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHRoaXMuX2ltZ1NyYyE9PWUuc291cmNlKWlmKHIuYXR0cigieG1sbnMiLHMuc3ZnKSxlLnNvdXJjZSYmImRhdGE6Ij09PWUuc291cmNlLnNsaWNlKDAsNSkpci5hdHRyKCJ4bGluazpocmVmIixlLnNvdXJjZSksdGhpcy5faW1nU3JjPWUuc291cmNlO2Vsc2V7dmFyIGk9bmV3IFByb21pc2UoZnVuY3Rpb24odCl7dmFyIG49bmV3IEltYWdlO2Z1bmN0aW9uIGkoKXtyLnJlbW92ZSgpLHQoKX10aGlzLmltZz1uLG4uc2V0QXR0cmlidXRlKCJjcm9zc09yaWdpbiIsImFub255bW91cyIpLG4ub25lcnJvcj1pLG4ub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZS53aWR0aD10aGlzLndpZHRoLGUuaGVpZ2h0PXRoaXMuaGVpZ2h0LGUuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodGhpcywwLDApO3ZhciBuPWUudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtyLmF0dHIoInhsaW5rOmhyZWYiLG4pLHQoKX0sci5vbigiZXJyb3IiLGkpLG4uc3JjPWUuc291cmNlLHRoaXMuX2ltZ1NyYz1lLnNvdXJjZX0uYmluZCh0aGlzKSk7dC5fcHJvbWlzZXMucHVzaChpKX19ZnVuY3Rpb24gdihlKXt2YXIgcixvLHM9bi5zZWxlY3QodGhpcyksYz1hLmdldEZyb21JZCh0LGUueHJlZiksdT1hLmdldEZyb21JZCh0LGUueXJlZiksaD0iZG9tYWluIj09PWEuZ2V0UmVmVHlwZShlLnhyZWYpLGY9ImRvbWFpbiI9PT1hLmdldFJlZlR5cGUoZS55cmVmKSxwPWwuX3NpemU7cj12b2lkIDAhPT1jPyJzdHJpbmciPT10eXBlb2YgZS54cmVmJiZoP2MuX2xlbmd0aCplLnNpemV4Ok1hdGguYWJzKGMubDJwKGUuc2l6ZXgpLWMubDJwKDApKTplLnNpemV4KnAudyxvPXZvaWQgMCE9PXU/InN0cmluZyI9PXR5cGVvZiBlLnlyZWYmJmY/dS5fbGVuZ3RoKmUuc2l6ZXk6TWF0aC5hYnModS5sMnAoZS5zaXpleSktdS5sMnAoMCkpOmUuc2l6ZXkqcC5oO3ZhciBtLHYseT1yKmRbZS54YW5jaG9yXS5vZmZzZXQseD1vKmdbZS55YW5jaG9yXS5vZmZzZXQsYj1kW2UueGFuY2hvcl0uc2l6aW5nK2dbZS55YW5jaG9yXS5zaXppbmc7c3dpdGNoKG09dm9pZCAwIT09Yz8ic3RyaW5nIj09dHlwZW9mIGUueHJlZiYmaD9jLl9sZW5ndGgqZS54K2MuX29mZnNldDpjLnIycChlLngpK2MuX29mZnNldDplLngqcC53K3AubCxtKz15LHY9dm9pZCAwIT09dT8ic3RyaW5nIj09dHlwZW9mIGUueXJlZiYmZj91Ll9sZW5ndGgqKDEtZS55KSt1Ll9vZmZzZXQ6dS5yMnAoZS55KSt1Ll9vZmZzZXQ6cC5oLWUueSpwLmgrcC50LHYrPXgsZS5zaXppbmcpe2Nhc2UiZmlsbCI6Yis9IiBzbGljZSI7YnJlYWs7Y2FzZSJzdHJldGNoIjpiPSJub25lIn1zLmF0dHIoe3g6bSx5OnYsd2lkdGg6cixoZWlnaHQ6byxwcmVzZXJ2ZUFzcGVjdFJhdGlvOmIsb3BhY2l0eTplLm9wYWNpdHl9KTt2YXIgXz0oYyYmImRvbWFpbiIhPT1hLmdldFJlZlR5cGUoZS54cmVmKT9jLl9pZDoiIikrKHUmJiJkb21haW4iIT09YS5nZXRSZWZUeXBlKGUueXJlZik/dS5faWQ6IiIpO2kuc2V0Q2xpcFVybChzLF8/ImNsaXAiK2wuX3VpZCtfOm51bGwsdCl9dmFyIHk9bC5faW1hZ2VMb3dlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGgpLHg9bC5faW1hZ2VVcHBlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGMpO3kuZW50ZXIoKS5hcHBlbmQoImltYWdlIikseC5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx5LmV4aXQoKS5yZW1vdmUoKSx4LmV4aXQoKS5yZW1vdmUoKSx5LmVhY2goKGZ1bmN0aW9uKHQpe20uYmluZCh0aGlzKSh0KSx2LmJpbmQodGhpcykodCl9KSkseC5lYWNoKChmdW5jdGlvbih0KXttLmJpbmQodGhpcykodCksdi5iaW5kKHRoaXMpKHQpfSkpO3ZhciBiPU9iamVjdC5rZXlzKGwuX3Bsb3RzKTtmb3Iocj0wO3I8Yi5sZW5ndGg7cisrKXtlPWJbcl07dmFyIF89bC5fcGxvdHNbZV07aWYoXy5pbWFnZWxheWVyKXt2YXIgdz1fLmltYWdlbGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEodVtlXXx8W10pO3cuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksdy5leGl0KCkucmVtb3ZlKCksdy5lYWNoKChmdW5jdGlvbih0KXttLmJpbmQodGhpcykodCksdi5iaW5kKHRoaXMpKHQpfSkpfX19fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODAyLCIuLi9kcmF3aW5nIjo2MzcsZDM6MTY5fV0sNjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJpbWFnZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImltYWdlcyIpLGRyYXc6dCgiLi9kcmF3IiksY29udmVydENvb3Jkczp0KCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjgxMSwiLi9hdHRyaWJ1dGVzIjo2NjAsIi4vY29udmVydF9jb29yZHMiOjY2MSwiLi9kZWZhdWx0cyI6NjYyLCIuL2RyYXciOjY2M31dLDY2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibGVnZW5kIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxlZ2VuZCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToibGVnZW5kIn0sZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6InYiLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZW9yZGVyOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJyZXZlcnNlZCIsImdyb3VwZWQiXSxleHRyYXM6WyJub3JtYWwiXSxlZGl0VHlwZToibGVnZW5kIn0sdHJhY2Vncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNvbnN0YW50Il0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtY2xpY2s6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvZ2dsZSIsInRvZ2dsZW90aGVycyIsITFdLGRmbHQ6InRvZ2dsZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW1kb3VibGVjbGljazp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9nZ2xlIiwidG9nZ2xlb3RoZXJzIiwhMV0sZGZsdDoidG9nZ2xlb3RoZXJzIixlZGl0VHlwZToibGVnZW5kIn0seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6ImxlZ2VuZCJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToibGVnZW5kIn0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6ImxlZ2VuZCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxlZGl0VHlwZToibGVnZW5kIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHZhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIixlZGl0VHlwZToibGVnZW5kIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToibGVnZW5kIn0sZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImxlZnQiLCJ0b3AgbGVmdCJdLGVkaXRUeXBlOiJsZWdlbmQifSxlZGl0VHlwZToibGVnZW5kIn0sZWRpdFR5cGU6ImxlZ2VuZCJ9fSx7Ii4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODI3LCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2MTR9XSw2NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzY3JvbGxCYXJXaWR0aDo2LHNjcm9sbEJhck1pbkhlaWdodDoyMCxzY3JvbGxCYXJDb2xvcjoiIzgwOEJBNCIsc2Nyb2xsQmFyTWFyZ2luOjQsc2Nyb2xsQmFyRW50ZXJBdHRyczp7cng6MjAscnk6Myx3aWR0aDowLGhlaWdodDowfSx0aXRsZVBhZDoyLHRleHRHYXA6NDAsaXRlbUdhcDo1fX0se31dLDY2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYz10LmxlZ2VuZHx8e30sdT0wLGg9ITEsZj0ibm9ybWFsIixwPTA7cDxyLmxlbmd0aDtwKyspe3ZhciBkPXJbcF07ZC52aXNpYmxlJiYoKGQuc2hvd2xlZ2VuZHx8ZC5fZGZsdFNob3dMZWdlbmQmJiEoZC5fbW9kdWxlJiZkLl9tb2R1bGUuYXR0cmlidXRlcyYmZC5fbW9kdWxlLmF0dHJpYnV0ZXMuc2hvd2xlZ2VuZCYmITE9PT1kLl9tb2R1bGUuYXR0cmlidXRlcy5zaG93bGVnZW5kLmRmbHQpKSYmKHUrKyxkLnNob3dsZWdlbmQmJihoPSEwLChuLnRyYWNlSXMoZCwicGllLWxpa2UiKXx8ITA9PT1kLl9pbnB1dC5zaG93bGVnZW5kKSYmdSsrKSksKG4udHJhY2VJcyhkLCJiYXIiKSYmInN0YWNrIj09PWUuYmFybW9kZXx8LTEhPT1bInRvbmV4dHgiLCJ0b25leHR5Il0uaW5kZXhPZihkLmZpbGwpKSYmKGY9bC5pc0dyb3VwZWQoe3RyYWNlb3JkZXI6Zn0pPyJncm91cGVkK3JldmVyc2VkIjoicmV2ZXJzZWQiKSx2b2lkIDAhPT1kLmxlZ2VuZGdyb3VwJiYiIiE9PWQubGVnZW5kZ3JvdXAmJihmPWwuaXNSZXZlcnNlZCh7dHJhY2VvcmRlcjpmfSk/InJldmVyc2VkK2dyb3VwZWQiOiJncm91cGVkIikpfXZhciBnPWkuY29lcmNlKHQsZSxzLCJzaG93bGVnZW5kIixoJiZ1PjEpO2lmKCExIT09Z3x8Yy51aXJldmlzaW9uKXt2YXIgbT1hLm5ld0NvbnRhaW5lcihlLCJsZWdlbmQiKTtpZihfKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLCExIT09Zyl7XygiYmdjb2xvciIsZS5wYXBlcl9iZ2NvbG9yKSxfKCJib3JkZXJjb2xvciIpLF8oImJvcmRlcndpZHRoIiksaS5jb2VyY2VGb250KF8sImZvbnQiLGUuZm9udCk7dmFyIHYseSx4LGI9Xygib3JpZW50YXRpb24iKTsiaCI9PT1iPyh2PTAsbi5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikodC54YXhpcyk/KHk9MS4xLHg9ImJvdHRvbSIpOih5PS0uMSx4PSJ0b3AiKSk6KHY9MS4wMix5PTEseD0iYXV0byIpLF8oInRyYWNlb3JkZXIiLGYpLGwuaXNHcm91cGVkKGUubGVnZW5kKSYmXygidHJhY2Vncm91cGdhcCIpLF8oIml0ZW1zaXppbmciKSxfKCJpdGVtY2xpY2siKSxfKCJpdGVtZG91YmxlY2xpY2siKSxfKCJ4Iix2KSxfKCJ4YW5jaG9yIiksXygieSIseSksXygieWFuY2hvciIseCksXygidmFsaWduIiksaS5ub25lT3JBbGwoYyxtLFsieCIsInkiXSksXygidGl0bGUudGV4dCIpJiYoXygidGl0bGUuc2lkZSIsImgiPT09Yj8ibGVmdCI6InRvcCIpLGkuY29lcmNlRm9udChfLCJ0aXRsZS5mb250IixlLmZvbnQpKX19ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBpLmNvZXJjZShjLG0sbyx0LGUpfX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjg1MywiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi9hdHRyaWJ1dGVzIjo2NjUsIi4vaGVscGVycyI6NjcxfV0sNjY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliL2V2ZW50cyIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSxjPXQoIi4uL2RyYXdpbmciKSx1PXQoIi4uL2NvbG9yIiksaD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4vaGFuZGxlX2NsaWNrIikscD10KCIuL2NvbnN0YW50cyIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLGc9ZC5MSU5FX1NQQUNJTkcsbT1kLkZST01fVEwsdj1kLkZST01fQlIseT10KCIuL2dldF9sZWdlbmRfZGF0YSIpLHg9dCgiLi9zdHlsZSIpLGI9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gXyh0LGUscixuLGkpe3ZhciBhPXIuZGF0YSgpWzBdWzBdLnRyYWNlLGw9e2V2ZW50Omksbm9kZTpyLm5vZGUoKSxjdXJ2ZU51bWJlcjphLmluZGV4LGV4cGFuZGVkSW5kZXg6YS5fZXhwYW5kZWRJbmRleCxkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXQsZnJhbWVzOnQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsY29uZmlnOnQuX2NvbnRleHQsZnVsbERhdGE6dC5fZnVsbERhdGEsZnVsbExheW91dDp0Ll9mdWxsTGF5b3V0fTtpZihhLl9ncm91cCYmKGwuZ3JvdXA9YS5fZ3JvdXApLG8udHJhY2VJcyhhLCJwaWUtbGlrZSIpJiYobC5sYWJlbD1yLmRhdHVtKClbMF0ubGFiZWwpLCExIT09cy50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfbGVnZW5kY2xpY2siLGwpKWlmKDE9PT1uKWUuX2NsaWNrVGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2Yocix0LG4pfSksdC5fY29udGV4dC5kb3VibGVDbGlja0RlbGF5KTtlbHNlIGlmKDI9PT1uKXtlLl9jbGlja1RpbWVvdXQmJmNsZWFyVGltZW91dChlLl9jbGlja1RpbWVvdXQpLHQuX2xlZ2VuZE1vdXNlRG93blRpbWU9MCwhMSE9PXMudHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2xlZ2VuZGRvdWJsZWNsaWNrIixsKSYmZihyLHQsbil9fWZ1bmN0aW9uIHcodCxlLHIpe3ZhciBuLGE9dC5kYXRhKClbMF1bMF0scz1hLnRyYWNlLGw9by50cmFjZUlzKHMsInBpZS1saWtlIiksdT1zLmluZGV4LGY9ci5fbWFpbiYmZS5fY29udGV4dC5lZGl0cy5sZWdlbmRUZXh0JiYhbCxkPXIuX21heE5hbWVMZW5ndGg7ci5lbnRyaWVzP249YS50ZXh0OihuPWw/YS5sYWJlbDpzLm5hbWUscy5fbWV0YSYmKG49aS50ZW1wbGF0ZVN0cmluZyhuLHMuX21ldGEpKSk7dmFyIGc9aS5lbnN1cmVTaW5nbGUodCwidGV4dCIsImxlZ2VuZHRleHQiKTtnLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5jYWxsKGMuZm9udCxyLmZvbnQpLnRleHQoZj9UKG4sZCk6biksaC5wb3NpdGlvblRleHQoZyxwLnRleHRHYXAsMCksZj9nLmNhbGwoaC5tYWtlRWRpdGFibGUse2dkOmUsdGV4dDpufSkuY2FsbChNLHQsZSxyKS5vbigiZWRpdCIsKGZ1bmN0aW9uKG4pe3RoaXMudGV4dChUKG4sZCkpLmNhbGwoTSx0LGUscik7dmFyIHM9YS50cmFjZS5fZnVsbElucHV0fHx7fSxsPXt9O2lmKG8uaGFzVHJhbnNmb3JtKHMsImdyb3VwYnkiKSl7dmFyIGM9by5nZXRUcmFuc2Zvcm1JbmRpY2VzKHMsImdyb3VwYnkiKSxoPWNbYy5sZW5ndGgtMV0sZj1pLmtleWVkQ29udGFpbmVyKHMsInRyYW5zZm9ybXNbIitoKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLm5hbWUiKTtmLnNldChhLnRyYWNlLl9ncm91cCxuKSxsPWYuY29uc3RydWN0VXBkYXRlKCl9ZWxzZSBsLm5hbWU9bjtyZXR1cm4gby5jYWxsKCJfZ3VpUmVzdHlsZSIsZSxsLHUpfSkpOk0oZyx0LGUscil9ZnVuY3Rpb24gVCh0LGUpe3ZhciByPU1hdGgubWF4KDQsZSk7aWYodCYmdC50cmltKCkubGVuZ3RoPj1yLzIpcmV0dXJuIHQ7Zm9yKHZhciBuPXItKHQ9dHx8IiIpLmxlbmd0aDtuPjA7bi0tKXQrPSIgIjtyZXR1cm4gdH1mdW5jdGlvbiBrKHQsZSl7dmFyIHIsYT1lLl9jb250ZXh0LmRvdWJsZUNsaWNrRGVsYXksbz0xLHM9aS5lbnN1cmVTaW5nbGUodCwicmVjdCIsImxlZ2VuZHRvZ2dsZSIsKGZ1bmN0aW9uKHQpe2UuX2NvbnRleHQuc3RhdGljUGxvdHx8dC5zdHlsZSgiY3Vyc29yIiwicG9pbnRlciIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksdC5jYWxsKHUuZmlsbCwicmdiYSgwLDAsMCwwKSIpfSkpO2UuX2NvbnRleHQuc3RhdGljUGxvdHx8KHMub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKCl7KHI9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU8YT9vKz0xOihvPTEsZS5fbGVnZW5kTW91c2VEb3duVGltZT1yKX0pKSxzLm9uKCJtb3VzZXVwIiwoZnVuY3Rpb24oKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciByPWUuX2Z1bGxMYXlvdXQubGVnZW5kOyhuZXcgRGF0ZSkuZ2V0VGltZSgpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU+YSYmKG89TWF0aC5tYXgoby0xLDEpKSxfKGUscix0LG8sbi5ldmVudCl9fSkpKX1mdW5jdGlvbiBNKHQsZSxyLG4pe24uX21haW58fHQuYXR0cigiZGF0YS1ub3RleCIsITApLGguY29udmVydFRvVHNwYW5zKHQsciwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuZGF0YSgpWzBdWzBdO2lmKHIuX21haW4mJm4mJiFuLnRyYWNlLnNob3dsZWdlbmQpcmV0dXJuIHZvaWQgdC5yZW1vdmUoKTt2YXIgaT10LnNlbGVjdCgiZ1tjbGFzcyo9bWF0aC1ncm91cF0iKSxhPWkubm9kZSgpO3J8fChyPWUuX2Z1bGxMYXlvdXQubGVnZW5kKTt2YXIgbyxzLGw9ci5ib3JkZXJ3aWR0aCx1PShuP3I6ci50aXRsZSkuZm9udC5zaXplKmc7aWYoYSl7dmFyIGY9Yy5iQm94KGEpO289Zi5oZWlnaHQscz1mLndpZHRoLG4/Yy5zZXRUcmFuc2xhdGUoaSwwLC4yNSpvKTpjLnNldFRyYW5zbGF0ZShpLGwsLjc1Km8rbCl9ZWxzZXt2YXIgZD10LnNlbGVjdChuPyIubGVnZW5kdGV4dCI6Ii5sZWdlbmR0aXRsZXRleHQiKSxtPWgubGluZUNvdW50KGQpLHY9ZC5ub2RlKCk7bz11Km0scz12P2MuYkJveCh2KS53aWR0aDowO3ZhciB5PXUqKChtLTEpLzItLjMpO24/aC5wb3NpdGlvblRleHQoZCxwLnRleHRHYXAsLXkpOmgucG9zaXRpb25UZXh0KGQscC50aXRsZVBhZCtsLHUrbCl9bj8obi5saW5lSGVpZ2h0PXUsbi5oZWlnaHQ9TWF0aC5tYXgobywxNikrMyxuLndpZHRoPXMpOihyLl90aXRsZVdpZHRoPXMsci5fdGl0bGVIZWlnaHQ9byl9KGUscixuKX0pKX1mdW5jdGlvbiBBKHQpe3JldHVybiBpLmlzUmlnaHRBbmNob3IodCk/InJpZ2h0IjppLmlzQ2VudGVyQW5jaG9yKHQpPyJjZW50ZXIiOiJsZWZ0In1mdW5jdGlvbiBTKHQpe3JldHVybiBpLmlzQm90dG9tQW5jaG9yKHQpPyJib3R0b20iOmkuaXNNaWRkbGVBbmNob3IodCk/Im1pZGRsZSI6InRvcCJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIscz10Ll9mdWxsTGF5b3V0LGg9ImxlZ2VuZCIrcy5fdWlkO2lmKGU/KHI9ZS5sYXllcixoKz0iLWhvdmVyIik6KChlPXMubGVnZW5kfHx7fSkuX21haW49ITAscj1zLl9pbmZvbGF5ZXIpLHIpe3ZhciBmO2lmKHQuX2xlZ2VuZE1vdXNlRG93blRpbWV8fCh0Ll9sZWdlbmRNb3VzZURvd25UaW1lPTApLGUuX21haW4pe2lmKCF0LmNhbGNkYXRhKXJldHVybjtmPXMuc2hvd2xlZ2VuZCYmeSh0LmNhbGNkYXRhLGUpfWVsc2V7aWYoIWUuZW50cmllcylyZXR1cm47Zj15KGUuZW50cmllcyxlKX12YXIgZD1zLmhpZGRlbmxhYmVsc3x8W107aWYoZS5fbWFpbiYmKCFzLnNob3dsZWdlbmR8fCFmLmxlbmd0aCkpcmV0dXJuIHIuc2VsZWN0QWxsKCIubGVnZW5kIikucmVtb3ZlKCkscy5fdG9wZGVmcy5zZWxlY3QoIiMiK2gpLnJlbW92ZSgpLGEuYXV0b01hcmdpbih0LCJsZWdlbmQiKTt2YXIgZz1pLmVuc3VyZVNpbmdsZShyLCJnIiwibGVnZW5kIiwoZnVuY3Rpb24odCl7ZS5fbWFpbiYmdC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLFQ9aS5lbnN1cmVTaW5nbGVCeUlkKHMuX3RvcGRlZnMsImNsaXBQYXRoIixoLChmdW5jdGlvbih0KXt0LmFwcGVuZCgicmVjdCIpfSkpLEU9aS5lbnN1cmVTaW5nbGUoZywicmVjdCIsImJnIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KSk7RS5jYWxsKHUuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwodS5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKTt2YXIgQz1pLmVuc3VyZVNpbmdsZShnLCJnIiwic2Nyb2xsYm94IiksTD1lLnRpdGxlO2lmKGUuX3RpdGxlV2lkdGg9MCxlLl90aXRsZUhlaWdodD0wLEwudGV4dCl7dmFyIFA9aS5lbnN1cmVTaW5nbGUoQywidGV4dCIsImxlZ2VuZHRpdGxldGV4dCIpO1AuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmNhbGwoYy5mb250LEwuZm9udCkudGV4dChMLnRleHQpLE0oUCxDLHQsZSl9ZWxzZSBDLnNlbGVjdEFsbCgiLmxlZ2VuZHRpdGxldGV4dCIpLnJlbW92ZSgpO3ZhciBJPWkuZW5zdXJlU2luZ2xlKGcsInJlY3QiLCJzY3JvbGxiYXIiLChmdW5jdGlvbih0KXt0LmF0dHIocC5zY3JvbGxCYXJFbnRlckF0dHJzKS5jYWxsKHUuZmlsbCxwLnNjcm9sbEJhckNvbG9yKX0pKSx6PUMuc2VsZWN0QWxsKCJnLmdyb3VwcyIpLmRhdGEoZik7ei5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JvdXBzIiksei5leGl0KCkucmVtb3ZlKCk7dmFyIE89ei5zZWxlY3RBbGwoImcudHJhY2VzIikuZGF0YShpLmlkZW50aXR5KTtPLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZXMiKSxPLmV4aXQoKS5yZW1vdmUoKSxPLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtyZXR1cm4gby50cmFjZUlzKGUsInBpZS1saWtlIik/LTEhPT1kLmluZGV4T2YodFswXS5sYWJlbCk/LjU6MToibGVnZW5kb25seSI9PT1lLnZpc2libGU/LjU6MX0pKS5lYWNoKChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLmNhbGwodyx0LGUpfSkpLmNhbGwoeCx0LGUpLmVhY2goKGZ1bmN0aW9uKCl7ZS5fbWFpbiYmbi5zZWxlY3QodGhpcykuY2FsbChrLHQpfSkpLGkuc3luY09yQXN5bmMoW2EucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixpKXt2YXIgYT10Ll9mdWxsTGF5b3V0O2l8fChpPWEubGVnZW5kKTt2YXIgbz1hLl9zaXplLHM9Yi5pc1ZlcnRpY2FsKGkpLGw9Yi5pc0dyb3VwZWQoaSksdT1pLmJvcmRlcndpZHRoLGg9Mip1LGY9cC50ZXh0R2FwLGQ9cC5pdGVtR2FwLGc9MioodStkKSxtPVMoaSksdj1pLnk8MHx8MD09PWkueSYmInRvcCI9PT1tLHk9aS55PjF8fDE9PT1pLnkmJiJib3R0b20iPT09bTtpLl9tYXhIZWlnaHQ9TWF0aC5tYXgodnx8eT9hLmhlaWdodC8yOm8uaCwzMCk7dmFyIHg9MDtpLl93aWR0aD0wLGkuX2hlaWdodD0wO3ZhciBfPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49dC50aXRsZS5zaWRlO24mJigtMSE9PW4uaW5kZXhPZigibGVmdCIpJiYoZT10Ll90aXRsZVdpZHRoKSwtMSE9PW4uaW5kZXhPZigidG9wIikmJihyPXQuX3RpdGxlSGVpZ2h0KSk7cmV0dXJuW2Uscl19KGkpO2lmKHMpci5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLmhlaWdodDtjLnNldFRyYW5zbGF0ZSh0aGlzLHUrX1swXSx1K19bMV0raS5faGVpZ2h0K2UvMitkKSxpLl9oZWlnaHQrPWUsaS5fd2lkdGg9TWF0aC5tYXgoaS5fd2lkdGgsdFswXS53aWR0aCl9KSkseD1mK2kuX3dpZHRoLGkuX3dpZHRoKz1kK2YraCxpLl9oZWlnaHQrPWcsbCYmKGUuZWFjaCgoZnVuY3Rpb24odCxlKXtjLnNldFRyYW5zbGF0ZSh0aGlzLDAsZSppLnRyYWNlZ3JvdXBnYXApfSkpLGkuX2hlaWdodCs9KGkuX2xncm91cHNMZW5ndGgtMSkqaS50cmFjZWdyb3VwZ2FwKTtlbHNle3ZhciB3PUEoaSksVD1pLng8MHx8MD09PWkueCYmInJpZ2h0Ij09PXcsaz1pLng+MXx8MT09PWkueCYmImxlZnQiPT09dyxNPXl8fHYsRT1hLndpZHRoLzI7aS5fbWF4V2lkdGg9TWF0aC5tYXgoVD9NJiYibGVmdCI9PT13P28ubCtvLnc6RTprP00mJiJyaWdodCI9PT13P28ucitvLnc6RTpvLncsMipmKTt2YXIgQz0wLEw9MDtyLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0ud2lkdGgrZjtDPU1hdGgubWF4KEMsZSksTCs9ZX0pKSx4PW51bGw7dmFyIFA9MDtpZihsKXt2YXIgST0wLHo9MCxPPTA7ZS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PTAsZT0wO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy50cmFjZXMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgbj1yWzBdLmhlaWdodDtjLnNldFRyYW5zbGF0ZSh0aGlzLF9bMF0sX1sxXSt1K2Qrbi8yK2UpLGUrPW4sdD1NYXRoLm1heCh0LGYrclswXS53aWR0aCl9KSksST1NYXRoLm1heChJLGUpO3ZhciByPXQrZDtyK3Urej5pLl9tYXhXaWR0aCYmKFA9TWF0aC5tYXgoUCx6KSx6PTAsTys9SStpLnRyYWNlZ3JvdXBnYXAsST1lKSxjLnNldFRyYW5zbGF0ZSh0aGlzLHosTykseis9cn0pKSxpLl93aWR0aD1NYXRoLm1heChQLHopK3UsaS5faGVpZ2h0PU8rSStnfWVsc2V7dmFyIEQ9ci5zaXplKCksUj1MK2grKEQtMSkqZDxpLl9tYXhXaWR0aCxGPTAsQj0wLE49MCxqPTA7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLmhlaWdodCxyPWYrdFswXS53aWR0aCxuPShSP3I6QykrZDtuK3UrQi1kPj1pLl9tYXhXaWR0aCYmKFA9TWF0aC5tYXgoUCxqKSxCPTAsTis9RixpLl9oZWlnaHQrPUYsRj0wKSxjLnNldFRyYW5zbGF0ZSh0aGlzLF9bMF0rdStCLF9bMV0rdStOK2UvMitkKSxqPUIrcitkLEIrPW4sRj1NYXRoLm1heChGLGUpfSkpLFI/KGkuX3dpZHRoPUIraCxpLl9oZWlnaHQ9RitnKTooaS5fd2lkdGg9TWF0aC5tYXgoUCxqKStoLGkuX2hlaWdodCs9RitnKX19aS5fd2lkdGg9TWF0aC5jZWlsKE1hdGgubWF4KGkuX3dpZHRoK19bMF0saS5fdGl0bGVXaWR0aCsyKih1K3AudGl0bGVQYWQpKSksaS5faGVpZ2h0PU1hdGguY2VpbChNYXRoLm1heChpLl9oZWlnaHQrX1sxXSxpLl90aXRsZUhlaWdodCsyKih1K3AuaXRlbUdhcCkpKSxpLl9lZmZIZWlnaHQ9TWF0aC5taW4oaS5faGVpZ2h0LGkuX21heEhlaWdodCk7dmFyIFU9dC5fY29udGV4dC5lZGl0cyxWPVUubGVnZW5kVGV4dHx8VS5sZWdlbmRQb3NpdGlvbjtyLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZ2VuZHRvZ2dsZSIpLHI9dFswXS5oZWlnaHQsaT1WP2Y6eHx8Zit0WzBdLndpZHRoO3N8fChpKz1kLzIpLGMuc2V0UmVjdChlLDAsLXIvMixpLHIpfSkpfSh0LHosTyxlKX0sZnVuY3Rpb24oKXtpZighZS5fbWFpbnx8IWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQubGVnZW5kLHI9QShlKSxuPVMoZSk7cmV0dXJuIGEuYXV0b01hcmdpbih0LCJsZWdlbmQiLHt4OmUueCx5OmUueSxsOmUuX3dpZHRoKm1bcl0scjplLl93aWR0aCp2W3JdLGI6ZS5fZWZmSGVpZ2h0KnZbbl0sdDplLl9lZmZIZWlnaHQqbVtuXX0pfSh0KSl7dmFyIHUsZixkLHkseD1zLl9zaXplLGI9ZS5ib3JkZXJ3aWR0aCx3PXgubCt4LncqZS54LW1bQShlKV0qZS5fd2lkdGgsaz14LnQreC5oKigxLWUueSktbVtTKGUpXSplLl9lZmZIZWlnaHQ7aWYoZS5fbWFpbiYmcy5tYXJnaW4uYXV0b2V4cGFuZCl7dmFyIE09dyxMPWs7dz1pLmNvbnN0cmFpbih3LDAscy53aWR0aC1lLl93aWR0aCksaz1pLmNvbnN0cmFpbihrLDAscy5oZWlnaHQtZS5fZWZmSGVpZ2h0KSx3IT09TSYmaS5sb2coIkNvbnN0cmFpbiBsZWdlbmQueCB0byBtYWtlIGxlZ2VuZCBmaXQgaW5zaWRlIGdyYXBoIiksayE9PUwmJmkubG9nKCJDb25zdHJhaW4gbGVnZW5kLnkgdG8gbWFrZSBsZWdlbmQgZml0IGluc2lkZSBncmFwaCIpfWlmKGUuX21haW4mJmMuc2V0VHJhbnNsYXRlKGcsdyxrKSxJLm9uKCIuZHJhZyIsbnVsbCksZy5vbigid2hlZWwiLG51bGwpLCFlLl9tYWlufHxlLl9oZWlnaHQ8PWUuX21heEhlaWdodHx8dC5fY29udGV4dC5zdGF0aWNQbG90KXt2YXIgUD1lLl9lZmZIZWlnaHQ7ZS5fbWFpbnx8KFA9ZS5faGVpZ2h0KSxFLmF0dHIoe3dpZHRoOmUuX3dpZHRoLWIsaGVpZ2h0OlAtYix4OmIvMix5OmIvMn0pLGMuc2V0VHJhbnNsYXRlKEMsMCwwKSxULnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOmUuX3dpZHRoLTIqYixoZWlnaHQ6UC0yKmIseDpiLHk6Yn0pLGMuc2V0Q2xpcFVybChDLGgsdCksYy5zZXRSZWN0KEksMCwwLDAsMCksZGVsZXRlIGUuX3Njcm9sbFl9ZWxzZXt2YXIgeixPLEQsUj1NYXRoLm1heChwLnNjcm9sbEJhck1pbkhlaWdodCxlLl9lZmZIZWlnaHQqZS5fZWZmSGVpZ2h0L2UuX2hlaWdodCksRj1lLl9lZmZIZWlnaHQtUi0yKnAuc2Nyb2xsQmFyTWFyZ2luLEI9ZS5faGVpZ2h0LWUuX2VmZkhlaWdodCxOPUYvQixqPU1hdGgubWluKGUuX3Njcm9sbFl8fDAsQik7RS5hdHRyKHt3aWR0aDplLl93aWR0aC0yKmIrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6ZS5fZWZmSGVpZ2h0LWIseDpiLzIseTpiLzJ9KSxULnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOmUuX3dpZHRoLTIqYitwLnNjcm9sbEJhcldpZHRoK3Auc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDplLl9lZmZIZWlnaHQtMipiLHg6Yix5OmIran0pLGMuc2V0Q2xpcFVybChDLGgsdCkscShqLFIsTiksZy5vbigid2hlZWwiLChmdW5jdGlvbigpe3Eoaj1pLmNvbnN0cmFpbihlLl9zY3JvbGxZK24uZXZlbnQuZGVsdGFZL0YqQiwwLEIpLFIsTiksMCE9PWomJmohPT1CJiZuLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9KSk7dmFyIFU9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5ldmVudC5zb3VyY2VFdmVudDt6PSJ0b3VjaHN0YXJ0Ij09PXQudHlwZT90LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk6dC5jbGllbnRZLEQ9an0pKS5vbigiZHJhZyIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5ldmVudC5zb3VyY2VFdmVudDsyPT09dC5idXR0b25zfHx0LmN0cmxLZXl8fChPPSJ0b3VjaG1vdmUiPT09dC50eXBlP3QuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTp0LmNsaWVudFkscShqPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0oci1lKS9OK3Q7cmV0dXJuIGkuY29uc3RyYWluKG4sMCxCKX0oRCx6LE8pLFIsTikpfSkpO0kuY2FsbChVKTt2YXIgVj1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXt2YXIgdD1uLmV2ZW50LnNvdXJjZUV2ZW50OyJ0b3VjaHN0YXJ0Ij09PXQudHlwZSYmKHo9dC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZLEQ9ail9KSkub24oImRyYWciLChmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7InRvdWNobW92ZSI9PT10LnR5cGUmJihPPXQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WSxxKGo9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPShlLXIpL04rdDtyZXR1cm4gaS5jb25zdHJhaW4obiwwLEIpfShELHosTyksUixOKSl9KSk7Qy5jYWxsKFYpfWlmKHQuX2NvbnRleHQuZWRpdHMubGVnZW5kUG9zaXRpb24pZy5jbGFzc2VkKCJjdXJzb3ItbW92ZSIsITApLGwuaW5pdCh7ZWxlbWVudDpnLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe3ZhciB0PWMuZ2V0VHJhbnNsYXRlKGcpO2Q9dC54LHk9dC55fSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj1kK3QsaT15K3I7Yy5zZXRUcmFuc2xhdGUoZyxuLGkpLHU9bC5hbGlnbihuLDAseC5sLHgubCt4LncsZS54YW5jaG9yKSxmPWwuYWxpZ24oaSwwLHgudCt4LmgseC50LGUueWFuY2hvcil9LGRvbmVGbjpmdW5jdGlvbigpe3ZvaWQgMCE9PXUmJnZvaWQgMCE9PWYmJm8uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHsibGVnZW5kLngiOnUsImxlZ2VuZC55IjpmfSl9LGNsaWNrRm46ZnVuY3Rpb24oZSxuKXt2YXIgaT1yLnNlbGVjdEFsbCgiZy50cmFjZXMiKS5maWx0ZXIoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbi5jbGllbnRYPj10LmxlZnQmJm4uY2xpZW50WDw9dC5yaWdodCYmbi5jbGllbnRZPj10LnRvcCYmbi5jbGllbnRZPD10LmJvdHRvbX0pKTtpLnNpemUoKT4wJiZfKHQsZyxpLGUsbil9fSl9ZnVuY3Rpb24gcShyLG4saSl7ZS5fc2Nyb2xsWT10Ll9mdWxsTGF5b3V0LmxlZ2VuZC5fc2Nyb2xsWT1yLGMuc2V0VHJhbnNsYXRlKEMsMCwtciksYy5zZXRSZWN0KEksZS5fd2lkdGgscC5zY3JvbGxCYXJNYXJnaW4rcippLHAuc2Nyb2xsQmFyV2lkdGgsbiksVC5zZWxlY3QoInJlY3QiKS5hdHRyKCJ5IixiK3IpfX1dLHQpfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzE3LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL2V2ZW50cyI6NzM5LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc3NCwiLi4vLi4vcGxvdHMvcGxvdHMiOjg2MiwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vY29sb3IiOjYxNSwiLi4vZHJhZ2VsZW1lbnQiOjYzNCwiLi4vZHJhd2luZyI6NjM3LCIuL2NvbnN0YW50cyI6NjY2LCIuL2dldF9sZWdlbmRfZGF0YSI6NjY5LCIuL2hhbmRsZV9jbGljayI6NjcwLCIuL2hlbHBlcnMiOjY3MSwiLi9zdHlsZSI6NjczLGQzOjE2OX1dLDY2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvPXt9LHM9W10sbD0hMSxjPXt9LHU9MCxoPTAsZj1lLl9tYWluO2Z1bmN0aW9uIHAodCxyKXtpZigiIiE9PXQmJmkuaXNHcm91cGVkKGUpKS0xPT09cy5pbmRleE9mKHQpPyhzLnB1c2godCksbD0hMCxvW3RdPVtbcl1dKTpvW3RdLnB1c2goW3JdKTtlbHNle3ZhciBuPSJ+fmkiK3U7cy5wdXNoKG4pLG9bbl09W1tyXV0sdSsrfX1mb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgZD10W3JdLGc9ZFswXSxtPWcudHJhY2Usdj1tLmxlZ2VuZGdyb3VwO2lmKCFmfHxtLnZpc2libGUmJm0uc2hvd2xlZ2VuZClpZihuLnRyYWNlSXMobSwicGllLWxpa2UiKSlmb3IoY1t2XXx8KGNbdl09e30pLGE9MDthPGQubGVuZ3RoO2ErKyl7dmFyIHk9ZFthXS5sYWJlbDtjW3ZdW3ldfHwocCh2LHtsYWJlbDp5LGNvbG9yOmRbYV0uY29sb3IsaTpkW2FdLmksdHJhY2U6bSxwdHM6ZFthXS5wdHN9KSxjW3ZdW3ldPSEwLGg9TWF0aC5tYXgoaCwoeXx8IiIpLmxlbmd0aCkpfWVsc2UgcCh2LGcpLGg9TWF0aC5tYXgoaCwobS5uYW1lfHwiIikubGVuZ3RoKX1pZighcy5sZW5ndGgpcmV0dXJuW107dmFyIHgsYixfPXMubGVuZ3RoO2lmKGwmJmkuaXNHcm91cGVkKGUpKWZvcihiPW5ldyBBcnJheShfKSxyPTA7cjxfO3IrKyl4PW9bc1tyXV0sYltyXT1pLmlzUmV2ZXJzZWQoZSk/eC5yZXZlcnNlKCk6eDtlbHNle2ZvcihiPVtuZXcgQXJyYXkoXyldLHI9MDtyPF87cisrKXg9b1tzW3JdXVswXSxiWzBdW2kuaXNSZXZlcnNlZChlKT9fLXItMTpyXT14O189MX1yZXR1cm4gZS5fbGdyb3Vwc0xlbmd0aD1fLGUuX21heE5hbWVMZW5ndGg9aCxifX0seyIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2hlbHBlcnMiOjY3MX1dLDY3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT0hMDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPWUuX2Z1bGxMYXlvdXQ7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcyxsPW8ubGVnZW5kLml0ZW1jbGljayxjPW8ubGVnZW5kLml0ZW1kb3VibGVjbGljaztpZigxPT09ciYmInRvZ2dsZSI9PT1sJiYidG9nZ2xlb3RoZXJzIj09PWMmJmEmJmUuZGF0YSYmZS5fY29udGV4dC5zaG93VGlwcz8obi5ub3RpZmllcihuLl8oZSwiRG91YmxlLWNsaWNrIG9uIGxlZ2VuZCB0byBpc29sYXRlIG9uZSB0cmFjZSIpLCJsb25nIiksYT0hMSk6YT0hMSwxPT09cj9zPWw6Mj09PXImJihzPWMpLHMpe3ZhciB1LGgsZixwLGQsZz1vLmhpZGRlbmxhYmVscz9vLmhpZGRlbmxhYmVscy5zbGljZSgpOltdLG09dC5kYXRhKClbMF1bMF0sdj1lLl9mdWxsRGF0YSx5PW0udHJhY2UseD15LmxlZ2VuZGdyb3VwLGI9e30sXz1bXSx3PVtdLFQ9W107aWYoaS50cmFjZUlzKHksInBpZS1saWtlIikpe3ZhciBrPW0ubGFiZWwsTT1nLmluZGV4T2Yoayk7InRvZ2dsZSI9PT1zPy0xPT09TT9nLnB1c2goayk6Zy5zcGxpY2UoTSwxKToidG9nZ2xlb3RoZXJzIj09PXMmJihnPVtdLGUuY2FsY2RhdGFbMF0uZm9yRWFjaCgoZnVuY3Rpb24odCl7ayE9PXQubGFiZWwmJmcucHVzaCh0LmxhYmVsKX0pKSxlLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscyYmZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMubGVuZ3RoPT09Zy5sZW5ndGgmJi0xPT09TSYmKGc9W10pKSxpLmNhbGwoIl9ndWlSZWxheW91dCIsZSwiaGlkZGVubGFiZWxzIixnKX1lbHNle3ZhciBBLFM9eCYmeC5sZW5ndGgsRT1bXTtpZihTKWZvcih1PTA7dTx2Lmxlbmd0aDt1KyspKEE9dlt1XSkudmlzaWJsZSYmQS5sZWdlbmRncm91cD09PXgmJkUucHVzaCh1KTtpZigidG9nZ2xlIj09PXMpe3ZhciBDO3N3aXRjaCh5LnZpc2libGUpe2Nhc2UhMDpDPSJsZWdlbmRvbmx5IjticmVhaztjYXNlITE6Qz0hMTticmVhaztjYXNlImxlZ2VuZG9ubHkiOkM9ITB9aWYoUylmb3IodT0wO3U8di5sZW5ndGg7dSsrKSExIT09dlt1XS52aXNpYmxlJiZ2W3VdLmxlZ2VuZGdyb3VwPT09eCYmQih2W3VdLEMpO2Vsc2UgQih5LEMpfWVsc2UgaWYoInRvZ2dsZW90aGVycyI9PT1zKXt2YXIgTCxQLEkseixPPSEwO2Zvcih1PTA7dTx2Lmxlbmd0aDt1KyspaWYoTD12W3VdPT09eSxJPSEwIT09dlt1XS5zaG93bGVnZW5kLCEoTHx8SXx8KFA9UyYmdlt1XS5sZWdlbmRncm91cD09PXgpfHwhMCE9PXZbdV0udmlzaWJsZXx8aS50cmFjZUlzKHZbdV0sIm5vdExlZ2VuZElzb2xhdGFibGUiKSkpe089ITE7YnJlYWt9Zm9yKHU9MDt1PHYubGVuZ3RoO3UrKylpZighMSE9PXZbdV0udmlzaWJsZSYmIWkudHJhY2VJcyh2W3VdLCJub3RMZWdlbmRJc29sYXRhYmxlIikpc3dpdGNoKHkudmlzaWJsZSl7Y2FzZSJsZWdlbmRvbmx5IjpCKHZbdV0sITApO2JyZWFrO2Nhc2UhMDp6PSEhT3x8ImxlZ2VuZG9ubHkiLEw9dlt1XT09PXksST0hMCE9PXZbdV0uc2hvd2xlZ2VuZCYmIXZbdV0ubGVnZW5kZ3JvdXAsUD1MfHxTJiZ2W3VdLmxlZ2VuZGdyb3VwPT09eCxCKHZbdV0sISghUCYmIUkpfHx6KX19Zm9yKHU9MDt1PHcubGVuZ3RoO3UrKylpZihmPXdbdV0pe3ZhciBEPWYuY29uc3RydWN0VXBkYXRlKCksUj1PYmplY3Qua2V5cyhEKTtmb3IoaD0wO2g8Ui5sZW5ndGg7aCsrKXA9UltoXSwoYltwXT1iW3BdfHxbXSlbVFt1XV09RFtwXX1mb3IoZD1PYmplY3Qua2V5cyhiKSx1PTA7dTxkLmxlbmd0aDt1KyspZm9yKHA9ZFt1XSxoPTA7aDxfLmxlbmd0aDtoKyspYltwXS5oYXNPd25Qcm9wZXJ0eShoKXx8KGJbcF1baF09dm9pZCAwKTtpLmNhbGwoIl9ndWlSZXN0eWxlIixlLGIsXyl9fX1mdW5jdGlvbiBGKHQsZSxyKXt2YXIgbj1fLmluZGV4T2YodCksaT1iW2VdO3JldHVybiBpfHwoaT1iW2VdPVtdKSwtMT09PV8uaW5kZXhPZih0KSYmKF8ucHVzaCh0KSxuPV8ubGVuZ3RoLTEpLGlbbl09cixufWZ1bmN0aW9uIEIodCxlKXt2YXIgcj10Ll9mdWxsSW5wdXQ7aWYoaS5oYXNUcmFuc2Zvcm0ociwiZ3JvdXBieSIpKXt2YXIgYT13W3IuaW5kZXhdO2lmKCFhKXt2YXIgbz1pLmdldFRyYW5zZm9ybUluZGljZXMociwiZ3JvdXBieSIpLHM9b1tvLmxlbmd0aC0xXTthPW4ua2V5ZWRDb250YWluZXIociwidHJhbnNmb3Jtc1siK3MrIl0uc3R5bGVzIiwidGFyZ2V0IiwidmFsdWUudmlzaWJsZSIpLHdbci5pbmRleF09YX12YXIgbD1hLmdldCh0Ll9ncm91cCk7dm9pZCAwPT09bCYmKGw9ITApLCExIT09bCYmYS5zZXQodC5fZ3JvdXAsZSksVFtyLmluZGV4XT1GKHIuaW5kZXgsInZpc2libGUiLCExIT09ci52aXNpYmxlKX1lbHNle3ZhciBjPSExIT09ci52aXNpYmxlJiZlO0Yoci5pbmRleCwidmlzaWJsZSIsYyl9fX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODJ9XSw2NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5pc0dyb3VwZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHwiIikuaW5kZXhPZigiZ3JvdXBlZCIpfSxyLmlzVmVydGljYWw9ZnVuY3Rpb24odCl7cmV0dXJuImgiIT09dC5vcmllbnRhdGlvbn0sci5pc1JldmVyc2VkPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09KHQudHJhY2VvcmRlcnx8IiIpLmluZGV4T2YoInJldmVyc2VkIil9fSx7fV0sNjcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJsZWdlbmQiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3Iiksc3R5bGU6dCgiLi9zdHlsZSIpfX0seyIuL2F0dHJpYnV0ZXMiOjY2NSwiLi9kZWZhdWx0cyI6NjY3LCIuL2RyYXciOjY2OCwiLi9zdHlsZSI6NjczfV0sNjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi9kcmF3aW5nIikscz10KCIuLi9jb2xvciIpLGw9dCgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZXh0cmFjdE9wdHMsYz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLHU9dCgiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiKSxoPXQoIi4uLy4uL3RyYWNlcy9waWUvaGVscGVycyIpLmNhc3RPcHRpb247ZnVuY3Rpb24gZih0LGUpe3JldHVybihlPyJyYWRpYWwiOiJob3Jpem9udGFsIikrKHQ/IiI6InJldmVyc2VkIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgcD1lLl9mdWxsTGF5b3V0O3J8fChyPXAubGVnZW5kKTt2YXIgZD0iY29uc3RhbnQiPT09ci5pdGVtc2l6aW5nLGc9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk7aWYodCsxKWk9dDtlbHNle2lmKCEoZSYmZS53aWR0aD4wKSlyZXR1cm4gMDtpPWUud2lkdGh9cmV0dXJuIGQ/bjpNYXRoLm1pbihpLHIpfTtmdW5jdGlvbiBtKHQsZSxyKXt2YXIgYT10WzBdLnRyYWNlLG89YS5tYXJrZXJ8fHt9LGw9by5saW5lfHx7fSxjPXI/YS52aXNpYmxlJiZhLnR5cGU9PT1yOmkudHJhY2VJcyhhLCJiYXIiKSx1PW4uc2VsZWN0KGUpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kIityKS5kYXRhKGM/W3RdOltdKTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kIityLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLGk9ZyhyLm1sdyxvLmxpbmUsNSwyKTtlLnN0eWxlKCJzdHJva2Utd2lkdGgiLGkrInB4IikuY2FsbChzLmZpbGwsci5tY3x8by5jb2xvciksaSYmcy5zdHJva2UoZSxyLm1sY3x8bC5jb2xvcil9KSl9ZnVuY3Rpb24gdih0LGUscil7dmFyIG89dFswXSxzPW8udHJhY2UsbD1yP3MudmlzaWJsZSYmcy50eXBlPT09cjppLnRyYWNlSXMocyxyKSxjPW4uc2VsZWN0KGUpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kIityKS5kYXRhKGw/W3RdOltdKTtpZihjLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kIityLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLGMuZXhpdCgpLnJlbW92ZSgpLGMuc2l6ZSgpKXt2YXIgZj0ocy5tYXJrZXJ8fHt9KS5saW5lLHA9ZyhoKGYud2lkdGgsby5wdHMpLGYsNSwyKSxkPWEubWluRXh0ZW5kKHMse21hcmtlcjp7bGluZTp7d2lkdGg6cH19fSk7ZC5tYXJrZXIubGluZS5jb2xvcj1mLmNvbG9yO3ZhciBtPWEubWluRXh0ZW5kKG8se3RyYWNlOmR9KTt1KGMsbSxkKX19dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPWEuZW5zdXJlU2luZ2xlKGUsImciLCJsYXllcnMiKTtpLnN0eWxlKCJvcGFjaXR5Iix0WzBdLnRyYWNlLm9wYWNpdHkpO3ZhciBvPXIudmFsaWduLHM9dFswXS5saW5lSGVpZ2h0LGw9dFswXS5oZWlnaHQ7aWYoIm1pZGRsZSIhPT1vJiZzJiZsKXt2YXIgYz17dG9wOjEsYm90dG9tOi0xfVtvXSooLjUqKHMtbCszKSk7aS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK2MrIikiKX1lbHNlIGkuYXR0cigidHJhbnNmb3JtIixudWxsKTtpLnNlbGVjdEFsbCgiZy5sZWdlbmRmaWxsIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kZmlsbCIsITApLGkuc2VsZWN0QWxsKCJnLmxlZ2VuZGxpbmVzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kbGluZXMiLCEwKTt2YXIgdT1pLnNlbGVjdEFsbCgiZy5sZWdlbmRzeW1ib2xzIikuZGF0YShbdF0pO3UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmRzeW1ib2xzIiwhMCksdS5zZWxlY3RBbGwoImcubGVnZW5kcG9pbnRzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kcG9pbnRzIiwhMCl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHIsaT10WzBdLnRyYWNlLGM9W107aWYoaS52aXNpYmxlKXN3aXRjaChpLnR5cGUpe2Nhc2UiaGlzdG9ncmFtMmQiOmNhc2UiaGVhdG1hcCI6Yz1bWyJNLTE1LC0yVjRIMTVWLTJaIl1dLHI9ITA7YnJlYWs7Y2FzZSJjaG9yb3BsZXRoIjpjYXNlImNob3JvcGxldGhtYXBib3giOmM9W1siTS02LC02VjZINlYtNloiXV0scj0hMDticmVhaztjYXNlImRlbnNpdHltYXBib3giOmM9W1siTS02LDAgYTYsNiAwIDEsMCAxMiwwIGEgNiw2IDAgMSwwIC0xMiwwIl1dLHI9InJhZGlhbCI7YnJlYWs7Y2FzZSJjb25lIjpjPVtbIk0tNiwyIEEyLDIgMCAwLDAgLTYsNiBWNkw2LDRaIl0sWyJNLTYsLTYgQTIsMiAwIDAsMCAtNiwtMiBMNiwtNFoiXSxbIk0tNiwtMiBBMiwyIDAgMCwwIC02LDIgTDYsMFoiXV0scj0hMTticmVhaztjYXNlInN0cmVhbXR1YmUiOmM9W1siTS02LDIgQTIsMiAwIDAsMCAtNiw2IEg2IEEyLDIgMCAwLDEgNiwyIFoiXSxbIk0tNiwtNiBBMiwyIDAgMCwwIC02LC0yIEg2IEEyLDIgMCAwLDEgNiwtNiBaIl0sWyJNLTYsLTIgQTIsMiAwIDAsMCAtNiwyIEg2IEEyLDIgMCAwLDEgNiwtMiBaIl1dLHI9ITE7YnJlYWs7Y2FzZSJzdXJmYWNlIjpjPVtbIk0tNiwtNiBBMiwzIDAgMCwwIC02LDAgSDYgQTIsMyAwIDAsMSA2LC02IFoiXSxbIk0tNiwxIEEyLDMgMCAwLDEgLTYsNiBINiBBMiwzIDAgMCwwIDYsMCBaIl1dLHI9ITA7YnJlYWs7Y2FzZSJtZXNoM2QiOmM9W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02SDZMMCw2WiJdXSxyPSExO2JyZWFrO2Nhc2Uidm9sdW1lIjpjPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNkg2TDAsNloiXV0scj0hMDticmVhaztjYXNlImlzb3N1cmZhY2UiOmM9W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02IEExMiwyNCAwIDAsMCA2LC02IEwwLDZaIl1dLHI9ITF9dmFyIHU9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQzZGFuZGZyaWVuZHMiKS5kYXRhKGMpO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQzZGFuZGZyaWVuZHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24odCxjKXt2YXIgdSxoPW4uc2VsZWN0KHRoaXMpLHA9bChpKSxkPXAuY29sb3JzY2FsZSxnPXAucmV2ZXJzZXNjYWxlO2lmKGQpe2lmKCFyKXt2YXIgbT1kLmxlbmd0aDt1PTA9PT1jP2RbZz9tLTE6MF1bMV06MT09PWM/ZFtnPzA6bS0xXVsxXTpkW01hdGguZmxvb3IoKG0tMSkvMildWzFdfX1lbHNle3ZhciB2PWkudmVydGV4Y29sb3J8fGkuZmFjZWNvbG9yfHxpLmNvbG9yO3U9YS5pc0FycmF5T3JUeXBlZEFycmF5KHYpP3ZbY118fHZbMF06dn1oLmF0dHIoImQiLHRbMF0pLHU/aC5jYWxsKHMuZmlsbCx1KTpoLmNhbGwoKGZ1bmN0aW9uKHQpe2lmKHQuc2l6ZSgpKXt2YXIgbj0ibGVnZW5kZmlsbC0iK2kudWlkO28uZ3JhZGllbnQodCxlLG4sZihnLCJyYWRpYWwiPT09ciksZCwiZmlsbCIpfX0pKX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9IndhdGVyZmFsbCI9PT1lLnR5cGU7aWYodFswXS5fZGlzdGluY3QmJnIpe3ZhciBpPXRbMF0udHJhY2VbdFswXS5kaXJdLm1hcmtlcjtyZXR1cm4gdFswXS5tYz1pLmNvbG9yLHRbMF0ubWx3PWkubGluZS53aWR0aCx0WzBdLm1sYz1pLmxpbmUuY29sb3IsbSh0LHRoaXMsIndhdGVyZmFsbCIpfXZhciBhPVtdO2UudmlzaWJsZSYmciYmKGE9dFswXS5oYXNUb3RhbHM/W1siaW5jcmVhc2luZyIsIk0tNiwtNlY2SDBaIl0sWyJ0b3RhbHMiLCJNNiw2SDBMLTYsLTZILTBaIl0sWyJkZWNyZWFzaW5nIiwiTTYsNlYtNkgwWiJdXTpbWyJpbmNyZWFzaW5nIiwiTS02LC02VjZINloiXSxbImRlY3JlYXNpbmciLCJNNiw2Vi02SC02WiJdXSk7dmFyIG89bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmR3YXRlcmZhbGwiKS5kYXRhKGEpO28uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmR3YXRlcmZhbGwiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyksaT1lW3RbMF1dLm1hcmtlcixhPWcodm9pZCAwLGkubGluZSw1LDIpO3IuYXR0cigiZCIsdFsxXSkuc3R5bGUoInN0cm9rZS13aWR0aCIsYSsicHgiKS5jYWxsKHMuZmlsbCxpLmNvbG9yKSxhJiZyLmNhbGwocy5zdHJva2UsaS5saW5lLmNvbG9yKX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXttKHQsdGhpcywiZnVubmVsIil9KSkuZWFjaCgoZnVuY3Rpb24odCl7bSh0LHRoaXMpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPXRbMF0udHJhY2UsbD1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZGJveCIpLmRhdGEoci52aXNpYmxlJiZpLnRyYWNlSXMociwiYm94LXZpb2xpbiIpP1t0XTpbXSk7bC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZGJveCIsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksbC5leGl0KCkucmVtb3ZlKCksbC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKCJhbGwiIT09ci5ib3hwb2ludHMmJiJhbGwiIT09ci5wb2ludHN8fDAhPT1zLm9wYWNpdHkoci5maWxsY29sb3IpfHwwIT09cy5vcGFjaXR5KChyLmxpbmV8fHt9KS5jb2xvcikpe3ZhciBpPWcodm9pZCAwLHIubGluZSw1LDIpO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsaSsicHgiKS5jYWxsKHMuZmlsbCxyLmZpbGxjb2xvciksaSYmcy5zdHJva2UodCxyLmxpbmUuY29sb3IpfWVsc2V7dmFyIGM9YS5taW5FeHRlbmQocix7bWFya2VyOntzaXplOmQ/MTI6YS5jb25zdHJhaW4oci5tYXJrZXIuc2l6ZSwyLDE2KSxzaXplcmVmOjEsc2l6ZW1pbjoxLHNpemVtb2RlOiJkaWFtZXRlciJ9fSk7bC5jYWxsKG8ucG9pbnRTdHlsZSxjLGUpfX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2KHQsdGhpcywiZnVubmVsYXJlYSIpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3YodCx0aGlzLCJwaWUiKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcixpLHM9dFswXSx1PXMudHJhY2UsaD11LnZpc2libGUmJnUuZmlsbCYmIm5vbmUiIT09dS5maWxsLHA9Yy5oYXNMaW5lcyh1KSxkPXUuY29udG91cnMsbT0hMSx2PSExLHk9bCh1KSx4PXkuY29sb3JzY2FsZSxiPXkucmV2ZXJzZXNjYWxlO2lmKGQpe3ZhciBfPWQuY29sb3Jpbmc7ImxpbmVzIj09PV8/bT0hMDpwPSJub25lIj09PV98fCJoZWF0bWFwIj09PV98fGQuc2hvd2xpbmVzLCJjb25zdHJhaW50Ij09PWQudHlwZT9oPSI9IiE9PWQuX29wZXJhdGlvbjoiZmlsbCIhPT1fJiYiaGVhdG1hcCIhPT1ffHwodj0hMCl9dmFyIHc9Yy5oYXNNYXJrZXJzKHUpfHxjLmhhc1RleHQodSksVD1ofHx2LGs9cHx8bSxNPXd8fCFUPyJNNSwwIjprPyJNNSwtMiI6Ik01LC0zIixBPW4uc2VsZWN0KHRoaXMpLFM9QS5zZWxlY3QoIi5sZWdlbmRmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShofHx2P1t0XTpbXSk7aWYoUy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWZpbGwiLCEwKSxTLmV4aXQoKS5yZW1vdmUoKSxTLmF0dHIoImQiLE0rImgzMHY2aC0zMHoiKS5jYWxsKGg/by5maWxsR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIHI9ImxlZ2VuZGZpbGwtIit1LnVpZDtvLmdyYWRpZW50KHQsZSxyLGYoYikseCwiZmlsbCIpfX0pLHB8fG0pe3ZhciBFPWcodm9pZCAwLHUubGluZSwxMCw1KTtpPWEubWluRXh0ZW5kKHUse2xpbmU6e3dpZHRoOkV9fSkscj1bYS5taW5FeHRlbmQocyx7dHJhY2U6aX0pXX12YXIgQz1BLnNlbGVjdCgiLmxlZ2VuZGxpbmVzIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShwfHxtP1tyXTpbXSk7Qy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKSxDLmV4aXQoKS5yZW1vdmUoKSxDLmF0dHIoImQiLE0rKG0/ImwzMCwwLjAwMDEiOiJoMzAiKSkuY2FsbChwP28ubGluZUdyb3VwU3R5bGU6ZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciByPSJsZWdlbmRsaW5lLSIrdS51aWQ7by5saW5lR3JvdXBTdHlsZSh0KSxvLmdyYWRpZW50KHQsZSxyLGYoYikseCwic3Ryb2tlIil9fSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHIsaSxzPXRbMF0sbD1zLnRyYWNlLHU9Yy5oYXNNYXJrZXJzKGwpLGg9Yy5oYXNUZXh0KGwpLGY9Yy5oYXNMaW5lcyhsKTtmdW5jdGlvbiBwKHQsZSxyLG4pe3ZhciBpPWEubmVzdGVkUHJvcGVydHkobCx0KS5nZXQoKSxvPWEuaXNBcnJheU9yVHlwZWRBcnJheShpKSYmZT9lKGkpOmk7aWYoZCYmbyYmdm9pZCAwIT09biYmKG89bikscil7aWYobzxyWzBdKXJldHVybiByWzBdO2lmKG8+clsxXSlyZXR1cm4gclsxXX1yZXR1cm4gb31mdW5jdGlvbiBnKHQpe3JldHVybiBzLl9kaXN0aW5jdCYmcy5pbmRleCYmdFtzLmluZGV4XT90W3MuaW5kZXhdOnRbMF19aWYodXx8aHx8Zil7dmFyIG09e30sdj17fTtpZih1KXttLm1jPXAoIm1hcmtlci5jb2xvciIsZyksbS5teD1wKCJtYXJrZXIuc3ltYm9sIixnKSxtLm1vPXAoIm1hcmtlci5vcGFjaXR5IixhLm1lYW4sWy4yLDFdKSxtLm1sYz1wKCJtYXJrZXIubGluZS5jb2xvciIsZyksbS5tbHc9cCgibWFya2VyLmxpbmUud2lkdGgiLGEubWVhbixbMCw1XSwyKSx2Lm1hcmtlcj17c2l6ZXJlZjoxLHNpemVtaW46MSxzaXplbW9kZToiZGlhbWV0ZXIifTt2YXIgeT1wKCJtYXJrZXIuc2l6ZSIsYS5tZWFuLFsyLDE2XSwxMik7bS5tcz15LHYubWFya2VyLnNpemU9eX1mJiYodi5saW5lPXt3aWR0aDpwKCJsaW5lLndpZHRoIixnLFswLDEwXSw1KX0pLGgmJihtLnR4PSJBYSIsbS50cD1wKCJ0ZXh0cG9zaXRpb24iLGcpLG0udHM9MTAsbS50Yz1wKCJ0ZXh0Zm9udC5jb2xvciIsZyksbS50Zj1wKCJ0ZXh0Zm9udC5mYW1pbHkiLGcpKSxyPVthLm1pbkV4dGVuZChzLG0pXSwoaT1hLm1pbkV4dGVuZChsLHYpKS5zZWxlY3RlZHBvaW50cz1udWxsLGkudGV4dHRlbXBsYXRlPW51bGx9dmFyIHg9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLGI9eC5zZWxlY3RBbGwoInBhdGguc2NhdHRlcnB0cyIpLmRhdGEodT9yOltdKTtiLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgic2NhdHRlcnB0cyIsITApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLGIuZXhpdCgpLnJlbW92ZSgpLGIuY2FsbChvLnBvaW50U3R5bGUsaSxlKSx1JiYoclswXS5tcmM9Myk7dmFyIF89eC5zZWxlY3RBbGwoImcucG9pbnR0ZXh0IikuZGF0YShoP3I6W10pO18uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludHRleHQiLCEwKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKSxfLmV4aXQoKS5yZW1vdmUoKSxfLnNlbGVjdEFsbCgidGV4dCIpLmNhbGwoby50ZXh0UG9pbnRTdHlsZSxpLGUpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZGNhbmRsZSIpLmRhdGEoZS52aXNpYmxlJiYiY2FuZGxlc3RpY2siPT09ZS50eXBlP1t0LHRdOltdKTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kY2FuZGxlIiwhMCkuYXR0cigiZCIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/Ik0tMTUsMEgtOE0tOCw2Vi02SDhaIjoiTTE1LDBIOE04LC02VjZILThaIn0pKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLHIuZXhpdCgpLnJlbW92ZSgpLHIuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPWVbcj8iaW5jcmVhc2luZyI6ImRlY3JlYXNpbmciXSxvPWcodm9pZCAwLGEubGluZSw1LDIpO2kuc3R5bGUoInN0cm9rZS13aWR0aCIsbysicHgiKS5jYWxsKHMuZmlsbCxhLmZpbGxjb2xvciksbyYmcy5zdHJva2UoaSxhLmxpbmUuY29sb3IpfSkpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZG9obGMiKS5kYXRhKGUudmlzaWJsZSYmIm9obGMiPT09ZS50eXBlP1t0LHRdOltdKTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kb2hsYyIsITApLmF0dHIoImQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlPyJNLTE1LDBIME0tOCwtNlYwIjoiTTE1LDBIME04LDZWMCJ9KSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sbD1nKHZvaWQgMCxhLmxpbmUsNSwyKTtpLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNhbGwoby5kYXNoTGluZSxhLmxpbmUuZGFzaCxsKSxsJiZzLnN0cm9rZShpLGEubGluZS5jb2xvcil9KSl9KSl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnMiOjExMzcsIi4uLy4uL3RyYWNlcy9waWUvc3R5bGVfb25lIjoxMTQzLCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTE4MywiLi4vY29sb3IiOjYxNSwiLi4vY29sb3JzY2FsZS9oZWxwZXJzIjo2MjYsIi4uL2RyYXdpbmciOjYzNyxkMzoxNjl9XSw2NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL2ZvbnRzL3Bsb3RpY29uIikscz10KCIuLi9zaGFwZXMvZHJhdyIpLmVyYXNlQWN0aXZlU2hhcGUsbD10KCIuLi8uLi9saWIiKSxjPWwuXyx1PWUuZXhwb3J0cz17fTtmdW5jdGlvbiBoKHQsZSl7dmFyIHIsaSxvPWUuY3VycmVudFRhcmdldCxzPW8uZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxsPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxjPXQuX2Z1bGxMYXlvdXQsdT17fSxoPWEubGlzdCh0LG51bGwsITApLGY9Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDtpZigiem9vbSI9PT1zKXt2YXIgcCxkPSJpbiI9PT1sPy41OjIsZz0oMStkKS8yLG09KDEtZCkvMjtmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKWlmKCEocj1oW2ldKS5maXhlZHJhbmdlKWlmKHA9ci5fbmFtZSwiYXV0byI9PT1sKXVbcCsiLmF1dG9yYW5nZSJdPSEwO2Vsc2UgaWYoInJlc2V0Ij09PWwpe2lmKHZvaWQgMD09PXIuX3JhbmdlSW5pdGlhbCl1W3ArIi5hdXRvcmFuZ2UiXT0hMDtlbHNle3ZhciB2PXIuX3JhbmdlSW5pdGlhbC5zbGljZSgpO3VbcCsiLnJhbmdlWzBdIl09dlswXSx1W3ArIi5yYW5nZVsxXSJdPXZbMV19dm9pZCAwIT09ci5fc2hvd1NwaWtlSW5pdGlhbCYmKHVbcCsiLnNob3dzcGlrZXMiXT1yLl9zaG93U3Bpa2VJbml0aWFsLCJvbiIhPT1mfHxyLl9zaG93U3Bpa2VJbml0aWFsfHwoZj0ib2ZmIikpfWVsc2V7dmFyIHk9W3IucjJsKHIucmFuZ2VbMF0pLHIucjJsKHIucmFuZ2VbMV0pXSx4PVtnKnlbMF0rbSp5WzFdLGcqeVsxXSttKnlbMF1dO3VbcCsiLnJhbmdlWzBdIl09ci5sMnIoeFswXSksdVtwKyIucmFuZ2VbMV0iXT1yLmwycih4WzFdKX19ZWxzZSJob3Zlcm1vZGUiIT09c3x8IngiIT09bCYmInkiIT09bHx8KGw9Yy5faXNIb3Jpej8ieSI6IngiLG8uc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsbCkpLHVbc109bDtjLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWYsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdSl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cy5nbDNkfHxbXSxzPXt9LGw9aS5zcGxpdCgiLiIpLGM9MDtjPG8ubGVuZ3RoO2MrKylzW29bY10rIi4iK2xbMV1dPWE7dmFyIHU9InBhbiI9PT1hP2E6Inpvb20iO3MuZHJhZ21vZGU9dSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxzKX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9InJlc2V0TGFzdFNhdmUiPT09cixhPSJyZXNldERlZmF1bHQiPT09cixvPXQuX2Z1bGxMYXlvdXQscz1vLl9zdWJwbG90cy5nbDNkfHxbXSxsPXt9LGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHUsaD1zW2NdLGY9aCsiLmNhbWVyYSIscD1oKyIuYXNwZWN0cmF0aW8iLGQ9aCsiLmFzcGVjdG1vZGUiLGc9b1toXS5fc2NlbmU7aT8obFtmKyIudXAiXT1nLnZpZXdJbml0aWFsLnVwLGxbZisiLmV5ZSJdPWcudmlld0luaXRpYWwuZXllLGxbZisiLmNlbnRlciJdPWcudmlld0luaXRpYWwuY2VudGVyLHU9ITApOmEmJihsW2YrIi51cCJdPW51bGwsbFtmKyIuZXllIl09bnVsbCxsW2YrIi5jZW50ZXIiXT1udWxsLHU9ITApLHUmJihsW3ArIi54Il09Zy52aWV3SW5pdGlhbC5hc3BlY3RyYXRpby54LGxbcCsiLnkiXT1nLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvLnksbFtwKyIueiJdPWcudmlld0luaXRpYWwuYXNwZWN0cmF0aW8ueixsW2RdPWcudmlld0luaXRpYWwuYXNwZWN0bW9kZSl9bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsbCl9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldCxuPXIuX3ByZXZpb3VzVmFsLGk9dC5fZnVsbExheW91dCxhPWkuX3N1YnBsb3RzLmdsM2R8fFtdLG89WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxzPXt9LGw9e307aWYobilsPW4sci5fcHJldmlvdXNWYWw9bnVsbDtlbHNle2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGg9aVt1XSxmPXUrIi5ob3Zlcm1vZGUiO3NbZl09aC5ob3Zlcm1vZGUsbFtmXT0hMTtmb3IodmFyIHA9MDtwPDM7cCsrKXt2YXIgZD1vW3BdLGc9dSsiLiIrZCsiLnNob3dzcGlrZXMiO2xbZ109ITEsc1tnXT1oW2RdLnNob3dzcGlrZXN9fXIuX3ByZXZpb3VzVmFsPXN9cmV0dXJuIGx9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0LHM9by5fc3VicGxvdHMuZ2VvfHxbXSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF0sdT1vW2NdO2lmKCJ6b29tIj09PWkpe3ZhciBoPXUucHJvamVjdGlvbi5zY2FsZSxmPSJpbiI9PT1hPzIqaDouNSpoO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LGMrIi5wcm9qZWN0aW9uLnNjYWxlIixmKX19InJlc2V0Ij09PWkmJngodCwiZ2VvIil9ZnVuY3Rpb24gbSh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O3JldHVybiFlLmhvdmVybW9kZSYmKGUuX2hhcygiY2FydGVzaWFuIik/ZS5faXNIb3Jpej8ieSI6IngiOiJjbG9zZXN0Iil9ZnVuY3Rpb24gdih0KXt2YXIgZT1tKHQpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LCJob3Zlcm1vZGUiLGUpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKSxpPXQuX2Z1bGxMYXlvdXQsYT1pLl9zdWJwbG90cy5tYXBib3h8fFtdLG89e30scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9aVtsXS56b29tLHU9ImluIj09PXI/MS4wNSpjOmMvMS4wNTtvW2wrIi56b29tIl09dX1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCxvKX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9zdWJwbG90c1tlXXx8W10sYT17fSxvPTA7bzxpLmxlbmd0aDtvKyspZm9yKHZhciBzPWlbb10sbD1yW3NdLl9zdWJwbG90LnZpZXdJbml0aWFsLGM9T2JqZWN0LmtleXMobCksdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgaD1jW3VdO2FbcysiLiIraF09bFtoXX1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCxhKX11LnRvSW1hZ2U9e25hbWU6InRvSW1hZ2UiLHRpdGxlOmZ1bmN0aW9uKHQpe3ZhciBlPSh0Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zfHx7fSkuZm9ybWF0fHwicG5nIjtyZXR1cm4gYyh0LCJwbmciPT09ZT8iRG93bmxvYWQgcGxvdCBhcyBhIHBuZyI6IkRvd25sb2FkIHBsb3QiKX0saWNvbjpvLmNhbWVyYSxjbGljazpmdW5jdGlvbih0KXt2YXIgZT10Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zLHI9e2Zvcm1hdDplLmZvcm1hdHx8InBuZyJ9O2wubm90aWZpZXIoYyh0LCJUYWtpbmcgc25hcHNob3QgLSB0aGlzIG1heSB0YWtlIGEgZmV3IHNlY29uZHMiKSwibG9uZyIpLCJzdmciIT09ci5mb3JtYXQmJmwuaXNJRSgpJiYobC5ub3RpZmllcihjKHQsIklFIG9ubHkgc3VwcG9ydHMgc3ZnLiAgQ2hhbmdpbmcgZm9ybWF0IHRvIHN2Zy4iKSwibG9uZyIpLHIuZm9ybWF0PSJzdmciKSxbImZpbGVuYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJzY2FsZSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QgaW4gZSYmKHJbdF09ZVt0XSl9KSksbi5jYWxsKCJkb3dubG9hZEltYWdlIix0LHIpLnRoZW4oKGZ1bmN0aW9uKGUpe2wubm90aWZpZXIoYyh0LCJTbmFwc2hvdCBzdWNjZWVkZWQiKSsiIC0gIitlLCJsb25nIil9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7bC5ub3RpZmllcihjKHQsIlNvcnJ5LCB0aGVyZSB3YXMgYSBwcm9ibGVtIGRvd25sb2FkaW5nIHlvdXIgc25hcHNob3QhIiksImxvbmciKX0pKX19LHUuc2VuZERhdGFUb0Nsb3VkPXtuYW1lOiJzZW5kRGF0YVRvQ2xvdWQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvIil9LGljb246by5kaXNrLGNsaWNrOmZ1bmN0aW9uKHQpe2kuc2VuZERhdGFUb0Nsb3VkKHQpfX0sdS5lZGl0SW5DaGFydFN0dWRpbz17bmFtZToiZWRpdEluQ2hhcnRTdHVkaW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvIil9LGljb246by5wZW5jaWwsY2xpY2s6ZnVuY3Rpb24odCl7aS5zZW5kRGF0YVRvQ2xvdWQodCl9fSx1Lnpvb20yZD17bmFtZToiem9vbTJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6Inpvb20iLGljb246by56b29tYm94LGNsaWNrOmh9LHUucGFuMmQ9e25hbWU6InBhbjJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJQYW4iKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoicGFuIixpY29uOm8ucGFuLGNsaWNrOmh9LHUuc2VsZWN0MmQ9e25hbWU6InNlbGVjdDJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJCb3ggU2VsZWN0Iil9LGF0dHI6ImRyYWdtb2RlIix2YWw6InNlbGVjdCIsaWNvbjpvLnNlbGVjdGJveCxjbGljazpofSx1Lmxhc3NvMmQ9e25hbWU6Imxhc3NvMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkxhc3NvIFNlbGVjdCIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJsYXNzbyIsaWNvbjpvLmxhc3NvLGNsaWNrOmh9LHUuZHJhd2Nsb3NlZHBhdGg9e25hbWU6ImRyYXdjbG9zZWRwYXRoIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJEcmF3IGNsb3NlZCBmcmVlZm9ybSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3Y2xvc2VkcGF0aCIsaWNvbjpvLmRyYXdjbG9zZWRwYXRoLGNsaWNrOmh9LHUuZHJhd29wZW5wYXRoPXtuYW1lOiJkcmF3b3BlbnBhdGgiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkRyYXcgb3BlbiBmcmVlZm9ybSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3b3BlbnBhdGgiLGljb246by5kcmF3b3BlbnBhdGgsY2xpY2s6aH0sdS5kcmF3bGluZT17bmFtZToiZHJhd2xpbmUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkRyYXcgbGluZSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3bGluZSIsaWNvbjpvLmRyYXdsaW5lLGNsaWNrOmh9LHUuZHJhd3JlY3Q9e25hbWU6ImRyYXdyZWN0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJEcmF3IHJlY3RhbmdsZSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3cmVjdCIsaWNvbjpvLmRyYXdyZWN0LGNsaWNrOmh9LHUuZHJhd2NpcmNsZT17bmFtZToiZHJhd2NpcmNsZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRHJhdyBjaXJjbGUiKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoiZHJhd2NpcmNsZSIsaWNvbjpvLmRyYXdjaXJjbGUsY2xpY2s6aH0sdS5lcmFzZXNoYXBlPXtuYW1lOiJlcmFzZXNoYXBlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJFcmFzZSBhY3RpdmUgc2hhcGUiKX0saWNvbjpvLmVyYXNlc2hhcGUsY2xpY2s6c30sdS56b29tSW4yZD17bmFtZToiem9vbUluMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlpvb20gaW4iKX0sYXR0cjoiem9vbSIsdmFsOiJpbiIsaWNvbjpvLnpvb21fcGx1cyxjbGljazpofSx1Lnpvb21PdXQyZD17bmFtZToiem9vbU91dDJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpvLnpvb21fbWludXMsY2xpY2s6aH0sdS5hdXRvU2NhbGUyZD17bmFtZToiYXV0b1NjYWxlMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkF1dG9zY2FsZSIpfSxhdHRyOiJ6b29tIix2YWw6ImF1dG8iLGljb246by5hdXRvc2NhbGUsY2xpY2s6aH0sdS5yZXNldFNjYWxlMmQ9e25hbWU6InJlc2V0U2NhbGUyZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgYXhlcyIpfSxhdHRyOiJ6b29tIix2YWw6InJlc2V0IixpY29uOm8uaG9tZSxjbGljazpofSx1LmhvdmVyQ2xvc2VzdENhcnRlc2lhbj17bmFtZToiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJTaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDoiY2xvc2VzdCIsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmh9LHUuaG92ZXJDb21wYXJlQ2FydGVzaWFuPXtuYW1lOiJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkNvbXBhcmUgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5fZnVsbExheW91dC5faXNIb3Jpej8ieSI6IngifSxpY29uOm8udG9vbHRpcF9jb21wYXJlLGdyYXZpdHk6Im5lIixjbGljazpofSx1Lnpvb20zZD17bmFtZToiem9vbTNkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6Inpvb20iLGljb246by56b29tYm94LGNsaWNrOmZ9LHUucGFuM2Q9e25hbWU6InBhbjNkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJQYW4iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoicGFuIixpY29uOm8ucGFuLGNsaWNrOmZ9LHUub3JiaXRSb3RhdGlvbj17bmFtZToib3JiaXRSb3RhdGlvbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiT3JiaXRhbCByb3RhdGlvbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJvcmJpdCIsaWNvbjpvWyIzZF9yb3RhdGUiXSxjbGljazpmfSx1LnRhYmxlUm90YXRpb249e25hbWU6InRhYmxlUm90YXRpb24iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlR1cm50YWJsZSByb3RhdGlvbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ0dXJudGFibGUiLGljb246b1siei1heGlzIl0sY2xpY2s6Zn0sdS5yZXNldENhbWVyYURlZmF1bHQzZD17bmFtZToicmVzZXRDYW1lcmFEZWZhdWx0M2QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlJlc2V0IGNhbWVyYSB0byBkZWZhdWx0Iil9LGF0dHI6InJlc2V0RGVmYXVsdCIsaWNvbjpvLmhvbWUsY2xpY2s6cH0sdS5yZXNldENhbWVyYUxhc3RTYXZlM2Q9e25hbWU6InJlc2V0Q2FtZXJhTGFzdFNhdmUzZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgY2FtZXJhIHRvIGxhc3Qgc2F2ZSIpfSxhdHRyOiJyZXNldExhc3RTYXZlIixpY29uOm8ubW92aWUsY2xpY2s6cH0sdS5ob3ZlckNsb3Nlc3QzZD17bmFtZToiaG92ZXJDbG9zZXN0M2QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1kKHQsZSk7bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQscil9fSx1Lnpvb21Jbkdlbz17bmFtZToiem9vbUluR2VvIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6Z30sdS56b29tT3V0R2VvPXtuYW1lOiJ6b29tT3V0R2VvIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpvLnpvb21fbWludXMsY2xpY2s6Z30sdS5yZXNldEdlbz17bmFtZToicmVzZXRHZW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlJlc2V0Iil9LGF0dHI6InJlc2V0Iix2YWw6bnVsbCxpY29uOm8uYXV0b3NjYWxlLGNsaWNrOmd9LHUuaG92ZXJDbG9zZXN0R2VvPXtuYW1lOiJob3ZlckNsb3Nlc3RHZW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dn0sdS5ob3ZlckNsb3Nlc3RHbDJkPXtuYW1lOiJob3ZlckNsb3Nlc3RHbDJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOnZ9LHUuaG92ZXJDbG9zZXN0UGllPXtuYW1lOiJob3ZlckNsb3Nlc3RQaWUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDoiY2xvc2VzdCIsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOnZ9LHUucmVzZXRWaWV3U2Fua2V5PXtuYW1lOiJyZXNldFNhbmtleUdyb3VwIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCB2aWV3Iil9LGljb246by5ob21lLGNsaWNrOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17Im5vZGUuZ3JvdXBzIjpbXSwibm9kZS54IjpbXSwibm9kZS55IjpbXX0scj0wO3I8dC5fZnVsbERhdGEubGVuZ3RoO3IrKyl7dmFyIGk9dC5fZnVsbERhdGFbcl0uX3ZpZXdJbml0aWFsO2VbIm5vZGUuZ3JvdXBzIl0ucHVzaChpLm5vZGUuZ3JvdXBzLnNsaWNlKCkpLGVbIm5vZGUueCJdLnB1c2goaS5ub2RlLnguc2xpY2UoKSksZVsibm9kZS55Il0ucHVzaChpLm5vZGUueS5zbGljZSgpKX1uLmNhbGwoInJlc3R5bGUiLHQsZSl9fSx1LnRvZ2dsZUhvdmVyPXtuYW1lOiJ0b2dnbGVIb3ZlciIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPWQodCxlKTtyLmhvdmVybW9kZT1tKHQpLG4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHIpfX0sdS5yZXNldFZpZXdzPXtuYW1lOiJyZXNldFZpZXdzIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCB2aWV3cyIpfSxpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldDtyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwiem9vbSIpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsInJlc2V0IiksaCh0LGUpLHIuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLCJyZXNldExhc3RTYXZlIikscCh0LGUpLHgodCwiZ2VvIikseCh0LCJtYXBib3giKX19LHUudG9nZ2xlU3Bpa2VsaW5lcz17bmFtZToidG9nZ2xlU3Bpa2VsaW5lcyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiVG9nZ2xlIFNwaWtlIExpbmVzIil9LGljb246by5zcGlrZWxpbmUsYXR0cjoiX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQiLHZhbDoib24iLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkO2UuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9Im9uIj09PXI/Im9mZiI6Im9uIixuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxmdW5jdGlvbih0KXtmb3IodmFyIGU9Im9uIj09PXQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQscj1hLmxpc3QodCxudWxsLCEwKSxuPXt9LGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtuW28uX25hbWUrIi5zaG93c3Bpa2VzIl09ISFlfHxvLl9zaG93U3Bpa2VJbml0aWFsfXJldHVybiBufSh0KSl9fSx1LnJlc2V0Vmlld01hcGJveD17bmFtZToicmVzZXRWaWV3TWFwYm94Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCB2aWV3Iil9LGF0dHI6InJlc2V0IixpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbih0KXt4KHQsIm1hcGJveCIpfX0sdS56b29tSW5NYXBib3g9e25hbWU6Inpvb21Jbk1hcGJveCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiWm9vbSBpbiIpfSxhdHRyOiJ6b29tIix2YWw6ImluIixpY29uOm8uem9vbV9wbHVzLGNsaWNrOnl9LHUuem9vbU91dE1hcGJveD17bmFtZToiem9vbU91dE1hcGJveCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246by56b29tX21pbnVzLGNsaWNrOnl9fSx7Ii4uLy4uL2ZvbnRzL3Bsb3RpY29uIjo3MjksIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgwMiwiLi4vLi4vcGxvdHMvcGxvdHMiOjg2MiwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vc2hhcGVzL2RyYXciOjY5Nn1dLDY3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLm1hbmFnZT10KCIuL21hbmFnZSIpfSx7Ii4vbWFuYWdlIjo2NzZ9XSw2NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksaT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uL2Z4L2hlbHBlcnMiKS5pc1VuaWZpZWRIb3ZlcixzPXQoIi4vbW9kZWJhciIpLGw9dCgiLi9idXR0b25zIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9jb250ZXh0LHU9ZS5fbW9kZUJhcjtpZihyLmRpc3BsYXlNb2RlQmFyfHxyLndhdGVybWFyayl7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnNUb1JlbW92ZSogY29uZmlndXJhdGlvbiBvcHRpb25zIiwibXVzdCBiZSBhbiBhcnJheS4iXS5qb2luKCIgIikpO2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb0FkZCkpdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zVG9BZGQqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsIm11c3QgYmUgYW4gYXJyYXkuIl0uam9pbigiICIpKTt2YXIgaCxmPXIubW9kZUJhckJ1dHRvbnM7aD1BcnJheS5pc0FycmF5KGYpJiZmLmxlbmd0aD9mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylmb3IodmFyIHI9dFtlXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoInN0cmluZyI9PXR5cGVvZiBpKXtpZih2b2lkIDA9PT1sW2ldKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9ucyogY29uZmlndXJhdGlvbiBvcHRpb25zIiwiaW52YWxpZCBidXR0b24gbmFtZSJdLmpvaW4oIiAiKSk7dFtlXVtuXT1sW2ldfX1yZXR1cm4gdH0oZik6IXIuZGlzcGxheU1vZGVCYXImJnIud2F0ZXJtYXJrP1tdOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxzPXQuX2NvbnRleHQsdT1zLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUsaD1zLm1vZGVCYXJCdXR0b25zVG9BZGQsZj1lLl9oYXMoImNhcnRlc2lhbiIpLHA9ZS5faGFzKCJnbDNkIiksZD1lLl9oYXMoImdlbyIpLGc9ZS5faGFzKCJwaWUiKSxtPWUuX2hhcygiZnVubmVsYXJlYSIpLHY9ZS5faGFzKCJnbDJkIikseT1lLl9oYXMoInRlcm5hcnkiKSx4PWUuX2hhcygibWFwYm94IiksYj1lLl9oYXMoInBvbGFyIiksXz1lLl9oYXMoInNhbmtleSIpLHc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sbnVsbCwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFlW3JdLmZpeGVkcmFuZ2UpcmV0dXJuITE7cmV0dXJuITB9KGUpLFQ9byhlLmhvdmVybW9kZSksaz1bXTtmdW5jdGlvbiBNKHQpe2lmKHQubGVuZ3RoKXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOy0xPT09dS5pbmRleE9mKG4pJiZlLnB1c2gobFtuXSl9ay5wdXNoKGUpfX12YXIgQT1bInRvSW1hZ2UiXTtzLnNob3dFZGl0SW5DaGFydFN0dWRpbz9BLnB1c2goImVkaXRJbkNoYXJ0U3R1ZGlvIik6cy5zaG93U2VuZFRvQ2xvdWQmJkEucHVzaCgic2VuZERhdGFUb0Nsb3VkIik7TShBKTt2YXIgUz1bXSxFPVtdLEM9W10sTD1bXTsoZnx8dnx8Z3x8bXx8eSkrZCtwK3grYj4xPyhFPVsidG9nZ2xlSG92ZXIiXSxDPVsicmVzZXRWaWV3cyJdKTpkPyhTPVsiem9vbUluR2VvIiwiem9vbU91dEdlbyJdLEU9WyJob3ZlckNsb3Nlc3RHZW8iXSxDPVsicmVzZXRHZW8iXSk6cD8oRT1bImhvdmVyQ2xvc2VzdDNkIl0sQz1bInJlc2V0Q2FtZXJhRGVmYXVsdDNkIiwicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIl0pOng/KFM9WyJ6b29tSW5NYXBib3giLCJ6b29tT3V0TWFwYm94Il0sRT1bInRvZ2dsZUhvdmVyIl0sQz1bInJlc2V0Vmlld01hcGJveCJdKTp2P0U9WyJob3ZlckNsb3Nlc3RHbDJkIl06Zz9FPVsiaG92ZXJDbG9zZXN0UGllIl06Xz8oRT1bImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsImhvdmVyQ29tcGFyZUNhcnRlc2lhbiJdLEM9WyJyZXNldFZpZXdTYW5rZXkiXSk6RT1bInRvZ2dsZUhvdmVyIl07ZiYmKEU9WyJ0b2dnbGVTcGlrZWxpbmVzIiwiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIiwiaG92ZXJDb21wYXJlQ2FydGVzaWFuIl0pOyhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZighYS50cmFjZUlzKHRbZV0sIm5vSG92ZXIiKSlyZXR1cm4hMTtyZXR1cm4hMH0ocil8fFQpJiYoRT1bXSk7IWYmJiF2fHx3fHwoUz1bInpvb21JbjJkIiwiem9vbU91dDJkIiwiYXV0b1NjYWxlMmQiXSwicmVzZXRWaWV3cyIhPT1DWzBdJiYoQz1bInJlc2V0U2NhbGUyZCJdKSk7cD9MPVsiem9vbTNkIiwicGFuM2QiLCJvcmJpdFJvdGF0aW9uIiwidGFibGVSb3RhdGlvbiJdOihmfHx2KSYmIXd8fHk/TD1bInpvb20yZCIsInBhbjJkIl06eHx8ZD9MPVsicGFuMmQiXTpiJiYoTD1bInpvb20yZCJdKTsoZnVuY3Rpb24odCl7Zm9yKHZhciBlPSExLHI9MDtyPHQubGVuZ3RoJiYhZTtyKyspe3ZhciBuPXRbcl07bi5fbW9kdWxlJiZuLl9tb2R1bGUuc2VsZWN0UG9pbnRzJiYoYS50cmFjZUlzKG4sInNjYXR0ZXItbGlrZSIpPyhpLmhhc01hcmtlcnMobil8fGkuaGFzVGV4dChuKSkmJihlPSEwKTphLnRyYWNlSXMobiwiYm94LXZpb2xpbiIpJiYiYWxsIiE9PW4uYm94cG9pbnRzJiYiYWxsIiE9PW4ucG9pbnRzfHwoZT0hMCkpfXJldHVybiBlfSkocikmJkwucHVzaCgic2VsZWN0MmQiLCJsYXNzbzJkIik7aWYoQXJyYXkuaXNBcnJheShoKSl7Zm9yKHZhciBQPVtdLEk9MDtJPGgubGVuZ3RoO0krKyl7dmFyIHo9aFtJXTsic3RyaW5nIj09dHlwZW9mIHo/LTEhPT1jLmluZGV4T2YoeikmJihlLl9oYXMoIm1hcGJveCIpfHxlLl9oYXMoImNhcnRlc2lhbiIpKSYmTC5wdXNoKHopOlAucHVzaCh6KX1oPVB9cmV0dXJuIE0oTCksTShTLmNvbmNhdChDKSksTShFKSxmdW5jdGlvbih0LGUpe2lmKGUubGVuZ3RoKWlmKEFycmF5LmlzQXJyYXkoZVswXSkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdC5wdXNoKGVbcl0pO2Vsc2UgdC5wdXNoKGUpO3JldHVybiB0fShrLGgpfSh0KSx1P3UudXBkYXRlKHQsaCk6ZS5fbW9kZUJhcj1zKHQsaCl9ZWxzZSB1JiYodS5kZXN0cm95KCksZGVsZXRlIGUuX21vZGVCYXIpfTt2YXIgYz1bImRyYXdsaW5lIiwiZHJhd29wZW5wYXRoIiwiZHJhd2Nsb3NlZHBhdGgiLCJkcmF3Y2lyY2xlIiwiZHJhd3JlY3QiLCJlcmFzZXNoYXBlIl19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MDIsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMTgzLCIuLi9meC9oZWxwZXJzIjo2NTEsIi4vYnV0dG9ucyI6Njc0LCIuL21vZGViYXIiOjY3N31dLDY3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vZm9udHMvcGxvdGljb24iKSxzPW5ldyBET01QYXJzZXI7ZnVuY3Rpb24gbCh0KXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy51cGRhdGUodC5ncmFwaEluZm8sdC5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfXZhciBjPWwucHJvdG90eXBlO2MudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5ncmFwaEluZm89dDt2YXIgcj10aGlzLmdyYXBoSW5mby5fY29udGV4dCxuPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LGk9Im1vZGViYXItIituLl91aWQ7dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLGkpLHRoaXMuX3VpZD1pLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9Im1vZGViYXIiLCJob3ZlciI9PT1yLmRpc3BsYXlNb2RlQmFyJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiBtb2RlYmFyLS1ob3ZlciBlYXNlLWJnIiksInYiPT09bi5tb2RlYmFyLm9yaWVudGF0aW9uJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiB2ZXJ0aWNhbCIsZT1lLnJldmVyc2UoKSk7dmFyIG89bi5tb2RlYmFyLHM9ImhvdmVyIj09PXIuZGlzcGxheU1vZGVCYXI/Ii5qcy1wbG90bHktcGxvdCAucGxvdGx5OmhvdmVyICI6IiI7YS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKGkpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLHMrIiMiK2krIiAubW9kZWJhci1ncm91cCIsImJhY2tncm91bmQtY29sb3I6ICIrby5iZ2NvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0biAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmNvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0bjpob3ZlciAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmFjdGl2ZWNvbG9yKSxhLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoaSwiIyIraSsiIC5tb2RlYmFyLWJ0bi5hY3RpdmUgLmljb24gcGF0aCIsImZpbGw6ICIrby5hY3RpdmVjb2xvcik7dmFyIGw9IXRoaXMuaGFzQnV0dG9ucyhlKSxjPXRoaXMuaGFzTG9nbyE9PXIuZGlzcGxheWxvZ28sdT10aGlzLmxvY2FsZSE9PXIubG9jYWxlO2lmKHRoaXMubG9jYWxlPXIubG9jYWxlLChsfHxjfHx1KSYmKHRoaXMucmVtb3ZlQWxsQnV0dG9ucygpLHRoaXMudXBkYXRlQnV0dG9ucyhlKSxyLndhdGVybWFya3x8ci5kaXNwbGF5bG9nbykpe3ZhciBoPXRoaXMuZ2V0TG9nbygpO3Iud2F0ZXJtYXJrJiYoaC5jbGFzc05hbWU9aC5jbGFzc05hbWUrIiB3YXRlcm1hcmsiKSwidiI9PT1uLm1vZGViYXIub3JpZW50YXRpb24/dGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShoLHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzWzBdKTp0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaCksdGhpcy5oYXNMb2dvPSEwfXRoaXMudXBkYXRlQWN0aXZlQnV0dG9uKCl9LGMudXBkYXRlQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYnV0dG9ucz10LHRoaXMuYnV0dG9uRWxlbWVudHM9W10sdGhpcy5idXR0b25zTmFtZXM9W10sdGhpcy5idXR0b25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWUuY3JlYXRlR3JvdXAoKTt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZTtpZighbil0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBidXR0b24gJ25hbWUnIGluIGJ1dHRvbiBjb25maWciKTtpZigtMSE9PWUuYnV0dG9uc05hbWVzLmluZGV4T2YobikpdGhyb3cgbmV3IEVycm9yKCJidXR0b24gbmFtZSAnIituKyInIGlzIHRha2VuIik7ZS5idXR0b25zTmFtZXMucHVzaChuKTt2YXIgaT1lLmNyZWF0ZUJ1dHRvbih0KTtlLmJ1dHRvbkVsZW1lbnRzLnB1c2goaSksci5hcHBlbmRDaGlsZChpKX0pKSxlLmVsZW1lbnQuYXBwZW5kQ2hpbGQocil9KSl9LGMuY3JlYXRlR3JvdXA9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5jbGFzc05hbWU9Im1vZGViYXItZ3JvdXAiLHR9LGMuY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ci5zZXRBdHRyaWJ1dGUoInJlbCIsInRvb2x0aXAiKSxyLmNsYXNzTmFtZT0ibW9kZWJhci1idG4iO3ZhciBpPXQudGl0bGU7dm9pZCAwPT09aT9pPXQubmFtZToiZnVuY3Rpb24iPT10eXBlb2YgaSYmKGk9aSh0aGlzLmdyYXBoSW5mbykpLChpfHwwPT09aSkmJnIuc2V0QXR0cmlidXRlKCJkYXRhLXRpdGxlIixpKSx2b2lkIDAhPT10LmF0dHImJnIuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLHQuYXR0cik7dmFyIGE9dC52YWw7aWYodm9pZCAwIT09YSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKHRoaXMuZ3JhcGhJbmZvKSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdmFsIixhKSksImZ1bmN0aW9uIiE9dHlwZW9mIHQuY2xpY2spdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICdjbGljaycgZnVuY3Rpb24gaW4gYnV0dG9uIGNvbmZpZyIpO3IuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbihyKXt0LmNsaWNrKGUuZ3JhcGhJbmZvLHIpLGUudXBkYXRlQWN0aXZlQnV0dG9uKHIuY3VycmVudFRhcmdldCl9KSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIix0LnRvZ2dsZXx8ITEpLHQudG9nZ2xlJiZuLnNlbGVjdChyKS5jbGFzc2VkKCJhY3RpdmUiLCEwKTt2YXIgcz10Lmljb247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHM/ci5hcHBlbmRDaGlsZChzKCkpOnIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKHN8fG8ucXVlc3Rpb24pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1ncmF2aXR5Iix0LmdyYXZpdHl8fCJuIikscn0sYy5jcmVhdGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlLHI9aSh0LmhlaWdodCk/TnVtYmVyKHQuaGVpZ2h0KTp0LmFzY2VudC10LmRlc2NlbnQsbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2lmKHQucGF0aCl7KGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sInN2ZyIpKS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFswLDAsdC53aWR0aCxyXS5qb2luKCIgIikpLGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsImljb24iKTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwicGF0aCIpO2Euc2V0QXR0cmlidXRlKCJkIix0LnBhdGgpLHQudHJhbnNmb3JtP2Euc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQudHJhbnNmb3JtKTp2b2lkIDAhPT10LmFzY2VudCYmYS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsIm1hdHJpeCgxIDAgMCAtMSAwICIrdC5hc2NlbnQrIikiKSxlLmFwcGVuZENoaWxkKGEpfXQuc3ZnJiYoZT1zLnBhcnNlRnJvbVN0cmluZyh0LnN2ZywiYXBwbGljYXRpb24veG1sIikuY2hpbGROb2Rlc1swXSk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxZW0iKSxlLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxZW0iKSxlfSxjLnVwZGF0ZUFjdGl2ZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxyPXZvaWQgMCE9PXQ/dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpOm51bGw7dGhpcy5idXR0b25FbGVtZW50cy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIikscz0idHJ1ZSI9PT10LmdldEF0dHJpYnV0ZSgiZGF0YS10b2dnbGUiKSxsPW4uc2VsZWN0KHQpO2lmKHMpbz09PXImJmwuY2xhc3NlZCgiYWN0aXZlIiwhbC5jbGFzc2VkKCJhY3RpdmUiKSk7ZWxzZXt2YXIgYz1udWxsPT09bz9vOmEubmVzdGVkUHJvcGVydHkoZSxvKS5nZXQoKTtsLmNsYXNzZWQoImFjdGl2ZSIsYz09PWkpfX0pKX0sYy5oYXNCdXR0b25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYnV0dG9ucztpZighZSlyZXR1cm4hMTtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXtpZih0W3JdLmxlbmd0aCE9PWVbcl0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7bisrKWlmKHRbcl1bbl0ubmFtZSE9PWVbcl1bbl0ubmFtZSlyZXR1cm4hMX1yZXR1cm4hMH0sYy5nZXRMb2dvPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jcmVhdGVHcm91cCgpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3JldHVybiBlLmhyZWY9Imh0dHBzOi8vcGxvdGx5LmNvbS8iLGUudGFyZ2V0PSJfYmxhbmsiLGUuc2V0QXR0cmlidXRlKCJkYXRhLXRpdGxlIixhLl8odGhpcy5ncmFwaEluZm8sIlByb2R1Y2VkIHdpdGggUGxvdGx5IikpLGUuY2xhc3NOYW1lPSJtb2RlYmFyLWJ0biBwbG90bHlqc2ljb24gbW9kZWJhci1idG4tLWxvZ28iLGUuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKG8ubmV3cGxvdGx5bG9nbykpLHQuYXBwZW5kQ2hpbGQoZSksdH0sYy5yZW1vdmVBbGxCdXR0b25zPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZDspdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudC5maXJzdENoaWxkKTt0aGlzLmhhc0xvZ289ITF9LGMuZGVzdHJveT1mdW5jdGlvbigpe2EucmVtb3ZlRWxlbWVudCh0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubW9kZWJhciIpKSxhLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUodGhpcy5fdWlkKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPW5ldyBsKHtncmFwaEluZm86dCxjb250YWluZXI6ci5fbW9kZWJhcmRpdi5ub2RlKCksYnV0dG9uczplfSk7cmV0dXJuIHIuX3ByaXZhdGVwbG90JiZuLnNlbGVjdChpLmVsZW1lbnQpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoImJhZGdlLXByaXZhdGUgZmxvYXQtLWxlZnQiLCEwKS50ZXh0KCJQUklWQVRFIiksaX19LHsiLi4vLi4vZm9udHMvcGxvdGljb24iOjcyOSwiLi4vLi4vbGliIjo3NTAsZDM6MTY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNjc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vY29sb3IvYXR0cmlidXRlcyIpLGE9KDAsdCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5KSgiYnV0dG9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHN0ZXA6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm1vbnRoIiwieWVhciIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJhbGwiXSxkZmx0OiJtb250aCIsZWRpdFR5cGU6InBsb3QifSxzdGVwbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmFja3dhcmQiLCJ0b2RhdGUiXSxkZmx0OiJiYWNrd2FyZCIsZWRpdFR5cGU6InBsb3QifSxjb3VudDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0pO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxidXR0b25zOmEseDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6InBsb3QifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6InBsb3QifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxlZGl0VHlwZToicGxvdCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJib3R0b20iLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHtlZGl0VHlwZToicGxvdCJ9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToicGxvdCJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In19LHsiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6Nzg4LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgyNywiLi4vY29sb3IvYXR0cmlidXRlcyI6NjE0fV0sNjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17eVBhZDouMDIsbWluQnV0dG9uV2lkdGg6MzAscng6MyxyeTozLGxpZ2h0QW1vdW50OjI1LGRhcmtBbW91bnQ6MTB9fSx7fV0sNjgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGModCxlLHIsaSl7dmFyIGE9aS5jYWxlbmRhcjtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLmJ1dHRvbnMscixpKX1pZihvKCJ2aXNpYmxlIikpe3ZhciBsPW8oInN0ZXAiKTsiYWxsIiE9PWwmJighYXx8ImdyZWdvcmlhbiI9PT1hfHwibW9udGgiIT09bCYmInllYXIiIT09bD9vKCJzdGVwbW9kZSIpOmUuc3RlcG1vZGU9ImJhY2t3YXJkIixvKCJjb3VudCIpKSxvKCJsYWJlbCIpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSxoKXt2YXIgZj10LnJhbmdlc2VsZWN0b3J8fHt9LHA9YS5uZXdDb250YWluZXIoZSwicmFuZ2VzZWxlY3RvciIpO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4gbi5jb2VyY2UoZixwLHMsdCxlKX1pZihkKCJ2aXNpYmxlIixvKGYscCx7bmFtZToiYnV0dG9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmMsY2FsZW5kYXI6aH0pLmxlbmd0aD4wKSl7dmFyIGc9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1yLmZpbHRlcigoZnVuY3Rpb24ocil7cmV0dXJuIGVbcl0uYW5jaG9yPT09dC5faWR9KSksaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ZVtuW2FdXS5kb21haW47byYmKGk9TWF0aC5tYXgob1sxXSxpKSl9cmV0dXJuW3QuZG9tYWluWzBdLGkrbC55UGFkXX0oZSxyLHUpO2QoIngiLGdbMF0pLGQoInkiLGdbMV0pLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLGQoInhhbmNob3IiKSxkKCJ5YW5jaG9yIiksbi5jb2VyY2VGb250KGQsImZvbnQiLHIuZm9udCk7dmFyIG09ZCgiYmdjb2xvciIpO2QoImFjdGl2ZWNvbG9yIixpLmNvbnRyYXN0KG0sbC5saWdodEFtb3VudCxsLmRhcmtBbW91bnQpKSxkKCJib3JkZXJjb2xvciIpLGQoImJvcmRlcndpZHRoIil9fX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6Nzg4LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc5NCwiLi4vY29sb3IiOjYxNSwiLi9hdHRyaWJ1dGVzIjo2NzgsIi4vY29uc3RhbnRzIjo2Nzl9XSw2ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vY29sb3IiKSxzPXQoIi4uL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxmPWguTElORV9TUEFDSU5HLHA9aC5GUk9NX1RMLGQ9aC5GUk9NX0JSLGc9dCgiLi9jb25zdGFudHMiKSxtPXQoIi4vZ2V0X3VwZGF0ZV9vYmplY3QiKTtmdW5jdGlvbiB2KHQpe3JldHVybiB0Ll9pZH1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1sLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iiwic2VsZWN0b3ItcmVjdCIsKGZ1bmN0aW9uKHQpe3QuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSkpO24uYXR0cih7cng6Zy5yeCxyeTpnLnJ5fSksbi5jYWxsKG8uc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoby5maWxsLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzQWN0aXZlfHxlLl9pc0hvdmVyZWQ/dC5hY3RpdmVjb2xvcjp0LmJnY29sb3J9KGUscikpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24geCh0LGUscixuKXtsLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0Iiwic2VsZWN0b3ItdGV4dCIsKGZ1bmN0aW9uKHQpe3QuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKX0pKS5jYWxsKHMuZm9udCxlLmZvbnQpLnRleHQoZnVuY3Rpb24odCxlKXtpZih0LmxhYmVsKXJldHVybiBlP2wudGVtcGxhdGVTdHJpbmcodC5sYWJlbCxlKTp0LmxhYmVsO3JldHVybiJhbGwiPT09dC5zdGVwPyJhbGwiOnQuY291bnQrdC5zdGVwLmNoYXJBdCgwKX0ocixuLl9mdWxsTGF5b3V0Ll9tZXRhKSkuY2FsbCgoZnVuY3Rpb24odCl7Yy5jb252ZXJ0VG9Uc3BhbnModCxuKX0pKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLnJhbmdlc2VsZWN0b3IiKS5kYXRhKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT11Lmxpc3QodCwieCIsITApLHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kucmFuZ2VzZWxlY3RvciYmaS5yYW5nZXNlbGVjdG9yLnZpc2libGUmJnIucHVzaChpKX1yZXR1cm4gcn0odCksdik7ZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJhbmdlc2VsZWN0b3IiLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIiLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSxlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89ZSx1PW8ucmFuZ2VzZWxlY3RvcixoPXIuc2VsZWN0QWxsKCJnLmJ1dHRvbiIpLmRhdGEobC5maWx0ZXJWaXNpYmxlKHUuYnV0dG9ucykpO2guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidXR0b24iLCEwKSxoLmV4aXQoKS5yZW1vdmUoKSxoLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9bShvLGUpO2UuX2lzQWN0aXZlPWZ1bmN0aW9uKHQsZSxyKXtpZigiYWxsIj09PWUuc3RlcClyZXR1cm4hMD09PXQuYXV0b3JhbmdlO3ZhciBuPU9iamVjdC5rZXlzKHIpO3JldHVybiB0LnJhbmdlWzBdPT09cltuWzBdXSYmdC5yYW5nZVsxXT09PXJbblsxXV19KG8sZSxhKSxyLmNhbGwoeSx1LGUpLHIuY2FsbCh4LHUsZSx0KSxyLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7dC5fZHJhZ2dlZHx8aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsYSl9KSksci5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtlLl9pc0hvdmVyZWQ9ITAsci5jYWxsKHksdSxlKX0pKSxyLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7ZS5faXNIb3ZlcmVkPSExLHIuY2FsbCh5LHUsZSl9KSl9KSksZnVuY3Rpb24odCxlLHIsaSxvKXt2YXIgdT0wLGg9MCxtPXIuYm9yZGVyd2lkdGg7ZS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLnNlbGVjdG9yLXRleHQiKSxlPXIuZm9udC5zaXplKmYsaT1NYXRoLm1heChlKmMubGluZUNvdW50KHQpLDE2KSszO2g9TWF0aC5tYXgoaCxpKX0pKSxlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgiLnNlbGVjdG9yLXJlY3QiKSxpPXQuc2VsZWN0KCIuc2VsZWN0b3ItdGV4dCIpLGE9aS5ub2RlKCkmJnMuYkJveChpLm5vZGUoKSkud2lkdGgsbz1yLmZvbnQuc2l6ZSpmLGw9Yy5saW5lQ291bnQoaSkscD1NYXRoLm1heChhKzEwLGcubWluQnV0dG9uV2lkdGgpO3QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG0rdSkrIiwiK20rIikiKSxlLmF0dHIoe3g6MCx5OjAsd2lkdGg6cCxoZWlnaHQ6aH0pLGMucG9zaXRpb25UZXh0KGkscC8yLGgvMi0obC0xKSpvLzIrMyksdSs9cCs1fSkpO3ZhciB2PXQuX2Z1bGxMYXlvdXQuX3NpemUseT12Lmwrdi53KnIueCx4PXYudCt2LmgqKDEtci55KSxiPSJsZWZ0IjtsLmlzUmlnaHRBbmNob3IocikmJih5LT11LGI9InJpZ2h0Iik7bC5pc0NlbnRlckFuY2hvcihyKSYmKHktPXUvMixiPSJjZW50ZXIiKTt2YXIgXz0idG9wIjtsLmlzQm90dG9tQW5jaG9yKHIpJiYoeC09aCxfPSJib3R0b20iKTtsLmlzTWlkZGxlQW5jaG9yKHIpJiYoeC09aC8yLF89Im1pZGRsZSIpO3U9TWF0aC5jZWlsKHUpLGg9TWF0aC5jZWlsKGgpLHk9TWF0aC5yb3VuZCh5KSx4PU1hdGgucm91bmQoeCksYS5hdXRvTWFyZ2luKHQsaSsiLXJhbmdlLXNlbGVjdG9yIix7eDpyLngseTpyLnksbDp1KnBbYl0scjp1KmRbYl0sYjpoKmRbX10sdDpoKnBbX119KSxvLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3krIiwiK3grIikiKX0odCxoLHUsby5fbmFtZSxyKX0pKX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzE3LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODAyLCIuLi8uLi9wbG90cy9wbG90cyI6ODYyLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuLi9jb2xvciI6NjE1LCIuLi9kcmF3aW5nIjo2MzcsIi4vY29uc3RhbnRzIjo2NzksIi4vZ2V0X3VwZGF0ZV9vYmplY3QiOjY4MixkMzoxNjl9XSw2ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9uYW1lLGk9e307aWYoImFsbCI9PT1lLnN0ZXApaVtyKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgYT1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5yYW5nZSxhPW5ldyBEYXRlKHQucjJsKGlbMV0pKSxvPWUuc3RlcCxzPWUuY291bnQ7c3dpdGNoKGUuc3RlcG1vZGUpe2Nhc2UiYmFja3dhcmQiOnI9dC5sMnIoK24udGltZVtvXS51dGMub2Zmc2V0KGEsLXMpKTticmVhaztjYXNlInRvZGF0ZSI6dmFyIGw9bi50aW1lW29dLnV0Yy5vZmZzZXQoYSwtcyk7cj10Lmwycigrbi50aW1lW29dLnV0Yy5jZWlsKGwpKX12YXIgYz1pWzFdO3JldHVybltyLGNdfSh0LGUpO2lbcisiLnJhbmdlWzBdIl09YVswXSxpW3IrIi5yYW5nZVsxXSJdPWFbMV19cmV0dXJuIGl9fSx7ZDM6MTY5fV0sNjgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNlbGVjdG9yIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzZWxlY3Rvcjp0KCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjY3OCwiLi9kZWZhdWx0cyI6NjgwLCIuL2RyYXciOjY4MX1dLDY4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmQsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9fSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMTUsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2MTR9XSw2ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikubGlzdCxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2UsYT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0LCJ4IiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdLHM9b1thLm5hbWVdO3MmJnMudmlzaWJsZSYmcy5hdXRvcmFuZ2UmJihzLl9pbnB1dC5hdXRvcmFuZ2U9ITAscy5faW5wdXQucmFuZ2U9cy5yYW5nZT1pKHQsbykpfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6Nzk4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgwMiwiLi9jb25zdGFudHMiOjY4Nn1dLDY4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InJhbmdlc2xpZGVyIixjb250YWluZXJDbGFzc05hbWU6InJhbmdlc2xpZGVyLWNvbnRhaW5lciIsYmdDbGFzc05hbWU6InJhbmdlc2xpZGVyLWJnIixyYW5nZVBsb3RDbGFzc05hbWU6InJhbmdlc2xpZGVyLXJhbmdlcGxvdCIsbWFza01pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1taW4iLG1hc2tNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4IixzbGlkZUJveENsYXNzTmFtZToicmFuZ2VzbGlkZXItc2xpZGVib3giLGdyYWJiZXJNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWluIixncmFiQXJlYU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWluIixoYW5kbGVNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1taW4iLGdyYWJiZXJNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWF4IixncmFiQXJlYU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWF4IixoYW5kbGVNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1tYXgiLG1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbi1vcHAtYXhpcyIsbWFza01heE9wcEF4aXNDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4LW9wcC1heGlzIixtYXNrQ29sb3I6InJnYmEoMCwwLDAsMC40KSIsbWFza09wcEF4aXNDb2xvcjoicmdiYSgwLDAsMCwwLjIpIixzbGlkZUJveEZpbGw6InRyYW5zcGFyZW50IixzbGlkZUJveEN1cnNvcjoiZXctcmVzaXplIixncmFiQXJlYUZpbGw6InRyYW5zcGFyZW50IixncmFiQXJlYUN1cnNvcjoiY29sLXJlc2l6ZSIsZ3JhYkFyZWFXaWR0aDoxMCxoYW5kbGVXaWR0aDo0LGhhbmRsZVJhZGl1czoxLGhhbmRsZVN0cm9rZVdpZHRoOjEsZXh0cmFQYWQ6MTV9fSx7fV0sNjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10W3JdLGM9ZVtyXTtpZihsLnJhbmdlc2xpZGVyfHxlLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbYy5faWRdKXtuLmlzUGxhaW5PYmplY3QobC5yYW5nZXNsaWRlcil8fChsLnJhbmdlc2xpZGVyPXt9KTt2YXIgdSxoLGY9bC5yYW5nZXNsaWRlcixwPWkubmV3Q29udGFpbmVyKGMsInJhbmdlc2xpZGVyIik7aWYoXygidmlzaWJsZSIpKXtfKCJiZ2NvbG9yIixlLnBsb3RfYmdjb2xvciksXygiYm9yZGVyY29sb3IiKSxfKCJib3JkZXJ3aWR0aCIpLF8oInRoaWNrbmVzcyIpLF8oImF1dG9yYW5nZSIsIWMuaXNWYWxpZFJhbmdlKGYucmFuZ2UpKSxfKCJyYW5nZSIpO3ZhciBkPWUuX3N1YnBsb3RzO2lmKGQpZm9yKHZhciBnPWQuY2FydGVzaWFuLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKDAsdC5pbmRleE9mKCJ5IikpPT09YS5uYW1lMmlkKHIpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKHQuaW5kZXhPZigieSIpLHQubGVuZ3RoKX0pKSxtPW4uc2ltcGxlTWFwKGcsYS5pZDJuYW1lKSx2PTA7djxtLmxlbmd0aDt2Kyspe3ZhciB5PW1bdl07dT1mW3ldfHx7fSxoPWkubmV3Q29udGFpbmVyKHAseSwieWF4aXMiKTt2YXIgeCxiPWVbeV07dS5yYW5nZSYmYi5pc1ZhbGlkUmFuZ2UodS5yYW5nZSkmJih4PSJmaXhlZCIpLCJtYXRjaCIhPT13KCJyYW5nZW1vZGUiLHgpJiZ3KCJyYW5nZSIsYi5yYW5nZS5zbGljZSgpKX1wLl9pbnB1dD1mfX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIG4uY29lcmNlKGYscCxvLHQsZSl9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBuLmNvZXJjZSh1LGgscyx0LGUpfX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MDIsIi4vYXR0cmlidXRlcyI6Njg0LCIuL29wcGF4aXNfYXR0cmlidXRlcyI6NjkxfV0sNjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vZHJhd2luZyIpLGw9dCgiLi4vY29sb3IiKSxjPXQoIi4uL3RpdGxlcyIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksaD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxmPXQoIi4uL2RyYWdlbGVtZW50IikscD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZD10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9by5lbnN1cmVTaW5nbGUodCwicmVjdCIsZC5iZ0NsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt4OjAseTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLGE9bi5ib3JkZXJ3aWR0aCUyPT0wP24uYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aC0xLGw9LW4uX29mZnNldFNoaWZ0LGM9cy5jcmlzcFJvdW5kKGUsbi5ib3JkZXJ3aWR0aCk7aS5hdHRyKHt3aWR0aDpuLl93aWR0aCthLGhlaWdodDpuLl9oZWlnaHQrYSx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK2wrIiwiK2wrIikiLGZpbGw6bi5iZ2NvbG9yLHN0cm9rZTpuLmJvcmRlcmNvbG9yLCJzdHJva2Utd2lkdGgiOmN9KX1mdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBpPWUuX2Z1bGxMYXlvdXQ7by5lbnN1cmVTaW5nbGVCeUlkKGkuX3RvcGRlZnMsImNsaXBQYXRoIixuLl9jbGlwSWQsKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJyZWN0IikuYXR0cih7eDowLHk6MH0pfSkpLnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOm4uX3dpZHRoLGhlaWdodDpuLl9oZWlnaHR9KX1mdW5jdGlvbiB2KHQsZSxyLGkpe3ZhciBsLGM9ZS5jYWxjZGF0YSxmPXQuc2VsZWN0QWxsKCJnLiIrZC5yYW5nZVBsb3RDbGFzc05hbWUpLmRhdGEoci5fc3VicGxvdHNXaXRoLG8uaWRlbnRpdHkpO2YuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiBkLnJhbmdlUGxvdENsYXNzTmFtZSsiICIrdH0pKS5jYWxsKHMuc2V0Q2xpcFVybCxpLl9jbGlwSWQsZSksZi5vcmRlcigpLGYuZXhpdCgpLnJlbW92ZSgpLGYuZWFjaCgoZnVuY3Rpb24odCxvKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSxmPTA9PT1vLHA9aC5nZXRGcm9tSWQoZSx0LCJ5IiksZD1wLl9uYW1lLGc9aVtkXSxtPXtkYXRhOltdLGxheW91dDp7eGF4aXM6e3R5cGU6ci50eXBlLGRvbWFpbjpbMCwxXSxyYW5nZTppLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6ci5jYWxlbmRhcn0sd2lkdGg6aS5fd2lkdGgsaGVpZ2h0OmkuX2hlaWdodCxtYXJnaW46e3Q6MCxiOjAsbDowLHI6MH19LF9jb250ZXh0OmUuX2NvbnRleHR9O3IucmFuZ2VicmVha3MmJihtLmxheW91dC54YXhpcy5yYW5nZWJyZWFrcz1yLnJhbmdlYnJlYWtzKSxtLmxheW91dFtkXT17dHlwZTpwLnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOiJtYXRjaCIhPT1nLnJhbmdlbW9kZT9nLnJhbmdlLnNsaWNlKCk6cC5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnAuY2FsZW5kYXJ9LHAucmFuZ2VicmVha3MmJihtLmxheW91dFtkXS5yYW5nZWJyZWFrcz1wLnJhbmdlYnJlYWtzKSxhLnN1cHBseURlZmF1bHRzKG0pO3ZhciB2PW0uX2Z1bGxMYXlvdXQueGF4aXMseT1tLl9mdWxsTGF5b3V0W2RdO3YuY2xlYXJDYWxjKCksdi5zZXRTY2FsZSgpLHkuY2xlYXJDYWxjKCkseS5zZXRTY2FsZSgpO3ZhciB4PXtpZDp0LHBsb3Rncm91cDpzLHhheGlzOnYseWF4aXM6eSxpc1JhbmdlUGxvdDohMH07Zj9sPXg6KHgubWFpbnBsb3Q9Inh5Iix4Lm1haW5wbG90aW5mbz1sKSx1LnJhbmdlUGxvdChlLHgsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9aVswXS50cmFjZTthLnhheGlzK2EueWF4aXM9PT1lJiZyLnB1c2goaSl9cmV0dXJuIHJ9KGMsdCkpfSkpfWZ1bmN0aW9uIHkodCxlLHIsbixpKXsoby5lbnN1cmVTaW5nbGUodCwicmVjdCIsZC5tYXNrTWluQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLmNhbGwobC5maWxsLGQubWFza0NvbG9yKSxvLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixkLm1hc2tNYXhDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KS5jYWxsKGwuZmlsbCxkLm1hc2tDb2xvciksIm1hdGNoIiE9PWkucmFuZ2Vtb2RlKSYmKG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQubWFza01pbk9wcEF4aXNDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoIndpZHRoIixuLl93aWR0aCkuY2FsbChsLmZpbGwsZC5tYXNrT3BwQXhpc0NvbG9yKSxvLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixkLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKCJ3aWR0aCIsbi5fd2lkdGgpLnN0eWxlKCJib3JkZXItdG9wIixkLm1hc2tPcHBCb3JkZXIpLmNhbGwobC5maWxsLGQubWFza09wcEF4aXNDb2xvcikpfWZ1bmN0aW9uIHgodCxlLHIsbil7ZS5fY29udGV4dC5zdGF0aWNQbG90fHxvLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixkLnNsaWRlQm94Q2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCxjdXJzb3I6ZC5zbGlkZUJveEN1cnNvciwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKHtoZWlnaHQ6bi5faGVpZ2h0LGZpbGw6ZC5zbGlkZUJveEZpbGx9KX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPW8uZW5zdXJlU2luZ2xlKHQsImciLGQuZ3JhYmJlck1pbkNsYXNzTmFtZSksYT1vLmVuc3VyZVNpbmdsZSh0LCJnIixkLmdyYWJiZXJNYXhDbGFzc05hbWUpLHM9e3g6MCx3aWR0aDpkLmhhbmRsZVdpZHRoLHJ4OmQuaGFuZGxlUmFkaXVzLGZpbGw6bC5iYWNrZ3JvdW5kLHN0cm9rZTpsLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOmQuaGFuZGxlU3Ryb2tlV2lkdGgsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSxjPXt5Ok1hdGgucm91bmQobi5faGVpZ2h0LzQpLGhlaWdodDpNYXRoLnJvdW5kKG4uX2hlaWdodC8yKX07by5lbnN1cmVTaW5nbGUoaSwicmVjdCIsZC5oYW5kbGVNaW5DbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cihzKX0pKS5hdHRyKGMpLG8uZW5zdXJlU2luZ2xlKGEsInJlY3QiLGQuaGFuZGxlTWF4Q2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIocyl9KSkuYXR0cihjKTt2YXIgdT17d2lkdGg6ZC5ncmFiQXJlYVdpZHRoLHg6MCx5OjAsZmlsbDpkLmdyYWJBcmVhRmlsbCxjdXJzb3I6ZS5fY29udGV4dC5zdGF0aWNQbG90P3ZvaWQgMDpkLmdyYWJBcmVhQ3Vyc29yfTtvLmVuc3VyZVNpbmdsZShpLCJyZWN0IixkLmdyYWJBcmVhTWluQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIodSl9KSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLG8uZW5zdXJlU2luZ2xlKGEsInJlY3QiLGQuZ3JhYkFyZWFNYXhDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fcmFuZ2VTbGlkZXJEYXRhLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXVtkLm5hbWVdO3MuX2NsaXBJZD1zLl9pZCsiLSIrZS5fdWlkfXZhciBsPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitkLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLChmdW5jdGlvbih0KXtyZXR1cm4gdC5fbmFtZX0pKTtsLmV4aXQoKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj10W2QubmFtZV07ZS5fdG9wZGVmcy5zZWxlY3QoIiMiK3IuX2NsaXBJZCkucmVtb3ZlKCl9KSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoJiYobC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZC5jb250YWluZXJDbGFzc05hbWUsITApLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksbC5lYWNoKChmdW5jdGlvbihyKXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxzPXJbZC5uYW1lXSxsPWVbaC5pZDJuYW1lKHIuYW5jaG9yKV0sdT1zW2guaWQybmFtZShyLmFuY2hvcildO2lmKHMucmFuZ2Upe3ZhciBfLHc9by5zaW1wbGVNYXAocy5yYW5nZSxyLnIybCksVD1vLnNpbXBsZU1hcChyLnJhbmdlLHIucjJsKTtfPVRbMF08VFsxXT9bTWF0aC5taW4od1swXSxUWzBdKSxNYXRoLm1heCh3WzFdLFRbMV0pXTpbTWF0aC5tYXgod1swXSxUWzBdKSxNYXRoLm1pbih3WzFdLFRbMV0pXSxzLnJhbmdlPXMuX2lucHV0LnJhbmdlPW8uc2ltcGxlTWFwKF8sci5sMnIpfXIuY2xlYW5SYW5nZSgicmFuZ2VzbGlkZXIucmFuZ2UiKTt2YXIgaz1lLl9zaXplLE09ci5kb21haW47cy5fd2lkdGg9ay53KihNWzFdLU1bMF0pO3ZhciBBPU1hdGgucm91bmQoay5sK2sudypNWzBdKSxTPU1hdGgucm91bmQoay50K2suaCooMS1yLl9jb3VudGVyRG9tYWluTWluKSsoImJvdHRvbSI9PT1yLnNpZGU/ci5fZGVwdGg6MCkrcy5fb2Zmc2V0U2hpZnQrZC5leHRyYVBhZCk7YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitBKyIsIitTKyIpIikscy5fcmw9by5zaW1wbGVNYXAocy5yYW5nZSxyLnIybCk7dmFyIEU9cy5fcmxbMF0sQz1zLl9ybFsxXSxMPUMtRTtpZihzLnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gdC9zLl93aWR0aCpMK0V9LHMuZDJwPWZ1bmN0aW9uKHQpe3JldHVybih0LUUpL0wqcy5fd2lkdGh9LHIucmFuZ2VicmVha3Mpe3ZhciBQPXIubG9jYXRlQnJlYWtzKEUsQyk7aWYoUC5sZW5ndGgpe3ZhciBJLHosTz0wO2ZvcihJPTA7STxQLmxlbmd0aDtJKyspTys9KHo9UFtJXSkubWF4LXoubWluO3ZhciBEPXMuX3dpZHRoLyhDLUUtTyksUj1bLUQqRV07Zm9yKEk9MDtJPFAubGVuZ3RoO0krKyl6PVBbSV0sUi5wdXNoKFJbUi5sZW5ndGgtMV0tRCooei5tYXgtei5taW4pKTtmb3Iocy5kMnA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVJbMF0scj0wO3I8UC5sZW5ndGg7cisrKXt2YXIgbj1QW3JdO2lmKHQ+PW4ubWF4KWU9UltyKzFdO2Vsc2UgaWYodDxuLm1pbilicmVha31yZXR1cm4gZStEKnR9LEk9MDtJPFAubGVuZ3RoO0krKykoej1QW0ldKS5wbWluPXMuZDJwKHoubWluKSx6LnBtYXg9cy5kMnAoei5tYXgpO3MucDJkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1SWzBdLHI9MDtyPFAubGVuZ3RoO3IrKyl7dmFyIG49UFtyXTtpZih0Pj1uLnBtYXgpZT1SW3IrMV07ZWxzZSBpZih0PG4ucG1pbilicmVha31yZXR1cm4odC1lKS9EfX19aWYoIm1hdGNoIiE9PXUucmFuZ2Vtb2RlKXt2YXIgRj1sLnIybCh1LnJhbmdlWzBdKSxCPWwucjJsKHUucmFuZ2VbMV0pLUY7cy5kMnBPcHBBeGlzPWZ1bmN0aW9uKHQpe3JldHVybih0LUYpL0Iqcy5faGVpZ2h0fX1hLmNhbGwoZyx0LHIscykuY2FsbChtLHQscixzKS5jYWxsKHYsdCxyLHMpLmNhbGwoeSx0LHIscyx1KS5jYWxsKHgsdCxyLHMpLmNhbGwoYix0LHIscyksZnVuY3Rpb24odCxlLHIsYSl7aWYoZS5fY29udGV4dC5zdGF0aWNQbG90KXJldHVybjt2YXIgcz10LnNlbGVjdCgicmVjdC4iK2Quc2xpZGVCb3hDbGFzc05hbWUpLm5vZGUoKSxsPXQuc2VsZWN0KCJyZWN0LiIrZC5ncmFiQXJlYU1pbkNsYXNzTmFtZSkubm9kZSgpLGM9dC5zZWxlY3QoInJlY3QuIitkLmdyYWJBcmVhTWF4Q2xhc3NOYW1lKS5ub2RlKCk7ZnVuY3Rpb24gdSgpe3ZhciB1PW4uZXZlbnQsaD11LnRhcmdldCxkPXUuY2xpZW50WHx8dS50b3VjaGVzWzBdLmNsaWVudFgsZz1kLXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsbT1hLmQycChyLl9ybFswXSksdj1hLmQycChyLl9ybFsxXSkseT1mLmNvdmVyU2xpcCgpO2Z1bmN0aW9uIHgodCl7dmFyIHUsZix4LGI9Kyh0LmNsaWVudFh8fHQudG91Y2hlc1swXS5jbGllbnRYKS1kO3N3aXRjaChoKXtjYXNlIHM6eD0iZXctcmVzaXplIix1PW0rYixmPXYrYjticmVhaztjYXNlIGw6eD0iY29sLXJlc2l6ZSIsdT1tK2IsZj12O2JyZWFrO2Nhc2UgYzp4PSJjb2wtcmVzaXplIix1PW0sZj12K2I7YnJlYWs7ZGVmYXVsdDp4PSJldy1yZXNpemUiLHU9ZyxmPWcrYn1pZihmPHUpe3ZhciBfPWY7Zj11LHU9X31hLl9waXhlbE1pbj11LGEuX3BpeGVsTWF4PWYscChuLnNlbGVjdCh5KSx4KSxmdW5jdGlvbih0LGUscixuKXtmdW5jdGlvbiBhKHQpe3JldHVybiByLmwycihvLmNvbnN0cmFpbih0LG4uX3JsWzBdLG4uX3JsWzFdKSl9dmFyIHM9YShuLnAyZChuLl9waXhlbE1pbikpLGw9YShuLnAyZChuLl9waXhlbE1heCkpO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsci5fbmFtZSsiLnJhbmdlIixbcyxsXSl9KSl9KDAsZSxyLGEpfWZ1bmN0aW9uIGIoKXt5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIseCkseS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixiKSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseCksdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsYiksby5yZW1vdmVFbGVtZW50KHkpfXRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix4KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixiKSx5LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIseCkseS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixiKX10Lm9uKCJtb3VzZWRvd24iLHUpLHQub24oInRvdWNoc3RhcnQiLHUpfShhLHQscixzKSxmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9ZC5oYW5kbGVXaWR0aC8yO2Z1bmN0aW9uIGwodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsMCxuLl93aWR0aCl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gby5jb25zdHJhaW4odCwwLG4uX2hlaWdodCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gby5jb25zdHJhaW4odCwtcyxuLl93aWR0aCtzKX12YXIgaD1sKG4uZDJwKHIuX3JsWzBdKSksZj1sKG4uZDJwKHIuX3JsWzFdKSk7aWYodC5zZWxlY3QoInJlY3QuIitkLnNsaWRlQm94Q2xhc3NOYW1lKS5hdHRyKCJ4IixoKS5hdHRyKCJ3aWR0aCIsZi1oKSx0LnNlbGVjdCgicmVjdC4iK2QubWFza01pbkNsYXNzTmFtZSkuYXR0cigid2lkdGgiLGgpLHQuc2VsZWN0KCJyZWN0LiIrZC5tYXNrTWF4Q2xhc3NOYW1lKS5hdHRyKCJ4IixmKS5hdHRyKCJ3aWR0aCIsbi5fd2lkdGgtZiksIm1hdGNoIiE9PWEucmFuZ2Vtb2RlKXt2YXIgcD1uLl9oZWlnaHQtYyhuLmQycE9wcEF4aXMoaS5fcmxbMV0pKSxnPW4uX2hlaWdodC1jKG4uZDJwT3BwQXhpcyhpLl9ybFswXSkpO3Quc2VsZWN0KCJyZWN0LiIrZC5tYXNrTWluT3BwQXhpc0NsYXNzTmFtZSkuYXR0cigieCIsaCkuYXR0cigiaGVpZ2h0IixwKS5hdHRyKCJ3aWR0aCIsZi1oKSx0LnNlbGVjdCgicmVjdC4iK2QubWFza01heE9wcEF4aXNDbGFzc05hbWUpLmF0dHIoIngiLGgpLmF0dHIoInkiLGcpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0LWcpLmF0dHIoIndpZHRoIixmLWgpLHQuc2VsZWN0KCJyZWN0LiIrZC5zbGlkZUJveENsYXNzTmFtZSkuYXR0cigieSIscCkuYXR0cigiaGVpZ2h0IixnLXApfXZhciBtPU1hdGgucm91bmQodShoLXMpKS0uNSx2PU1hdGgucm91bmQodShmLXMpKSsuNTt0LnNlbGVjdCgiZy4iK2QuZ3JhYmJlck1pbkNsYXNzTmFtZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbSsiLDAuNSkiKSx0LnNlbGVjdCgiZy4iK2QuZ3JhYmJlck1heENsYXNzTmFtZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiLDAuNSkiKX0oYSwwLHIscyxsLHUpLCJib3R0b20iPT09ci5zaWRlJiZjLmRyYXcodCxyLl9pZCsidGl0bGUiLHtwcm9wQ29udGFpbmVyOnIscHJvcE5hbWU6ci5fbmFtZSsiLnRpdGxlIixwbGFjZWhvbGRlcjplLl9kZmx0VGl0bGUueCxhdHRyaWJ1dGVzOnt4OnIuX29mZnNldCtyLl9sZW5ndGgvMix5OlMrcy5faGVpZ2h0K3MuX29mZnNldFNoaWZ0KzEwKzEuNSpyLnRpdGxlLmZvbnQuc2l6ZSwidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pfSkpKX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc3MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4MTIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODAyLCIuLi8uLi9wbG90cy9wbG90cyI6ODYyLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuLi9jb2xvciI6NjE1LCIuLi9kcmFnZWxlbWVudCI6NjM0LCIuLi9kcmF3aW5nIjo2MzcsIi4uL3RpdGxlcyI6NzEwLCIuL2NvbnN0YW50cyI6Njg2LGQzOjE2OX1dLDY4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxpPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcscz1hLm5hbWU7ZnVuY3Rpb24gbCh0KXt2YXIgZT10JiZ0W3NdO3JldHVybiBlJiZlLnZpc2libGV9ci5pc1Zpc2libGU9bCxyLm1ha2VEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sIngiLCEwKSxyPXQubWFyZ2luLGk9W107aWYoIXQuX2hhcygiZ2wyZCIpKWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lmKGwobykpe2kucHVzaChvKTt2YXIgYz1vW3NdO2MuX2lkPXMrby5faWQsYy5faGVpZ2h0PSh0LmhlaWdodC1yLmItci50KSpjLnRoaWNrbmVzcyxjLl9vZmZzZXRTaGlmdD1NYXRoLmZsb29yKGMuYm9yZGVyd2lkdGgvMil9fXQuX3JhbmdlU2xpZGVyRGF0YT1pfSxyLmF1dG9NYXJnaW5PcHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWVbc10sbD1lLl9pZC5jaGFyQXQoMCksYz0wLHU9MDsiYm90dG9tIj09PWUuc2lkZSYmKGM9ZS5fZGVwdGgsZS50aXRsZS50ZXh0IT09ci5fZGZsdFRpdGxlW2xdJiYodT0xLjUqZS50aXRsZS5mb250LnNpemUrMTArbi5fb2Zmc2V0U2hpZnQsdSs9KGUudGl0bGUudGV4dC5tYXRjaChpLkJSX1RBR19BTEwpfHxbXSkubGVuZ3RoKmUudGl0bGUuZm9udC5zaXplKm8pKTtyZXR1cm57eDowLHk6ZS5fY291bnRlckRvbWFpbk1pbixsOjAscjowLHQ6MCxiOm4uX2hlaWdodCtjK01hdGgubWF4KHIubWFyZ2luLmIsdSkscGFkOmEuZXh0cmFQYWQrMipuLl9vZmZzZXRTaGlmdH19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjcxNywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODAyLCIuL2NvbnN0YW50cyI6Njg2fV0sNjkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuL29wcGF4aXNfYXR0cmlidXRlcyIpLG89dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InJhbmdlc2xpZGVyIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzbGlkZXI6bi5leHRlbmRGbGF0KHt9LGkse3lheGlzOmF9KX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3OnQoIi4vZHJhdyIpLGlzVmlzaWJsZTpvLmlzVmlzaWJsZSxtYWtlRGF0YTpvLm1ha2VEYXRhLGF1dG9NYXJnaW5PcHRzOm8uYXV0b01hcmdpbk9wdHN9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuL2F0dHJpYnV0ZXMiOjY4NCwiLi9jYWxjX2F1dG9yYW5nZSI6Njg1LCIuL2RlZmF1bHRzIjo2ODcsIi4vZHJhdyI6Njg4LCIuL2hlbHBlcnMiOjY4OSwiLi9vcHBheGlzX2F0dHJpYnV0ZXMiOjY5MX1dLDY5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e19pc1N1YnBsb3RPYmo6ITAscmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwiZml4ZWQiLCJtYXRjaCJdLGRmbHQ6Im1hdGNoIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCJ9XSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn19LHt9XSw2OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyIpLmxpbmUsYT10KCIuLi9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7dCgiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiKTtlLmV4cG9ydHM9cygic2hhcGUiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNpcmNsZSIsInJlY3QiLCJwYXRoIiwibGluZSJdLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4cmVmOm8oe30sbi54cmVmLHt9KSx4c2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNjYWxlZCIsInBpeGVsIl0sZGZsdDoic2NhbGVkIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHgxOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlyZWY6byh7fSxuLnlyZWYse30pLHlzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwicGl4ZWwiXSxkZmx0OiJzY2FsZWQiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seTA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seTE6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0scGF0aDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sbGluZTp7Y29sb3I6byh7fSxpLmNvbG9yLHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLHdpZHRoOm8oe30saS53aWR0aCx7ZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0pLGRhc2g6byh7fSxhLHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxmaWxscnVsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZXZlbm9kZCIsIm5vbnplcm8iXSxkZmx0OiJldmVub2RkIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdGFibGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KX0seyIuLi8uLi9jb25zdGFudHMvYXhpc19wbGFjZWFibGVfb2JqZWN0cyI6NzE4LCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE1OCwiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyI6NTk4LCIuLi9kcmF3aW5nL2F0dHJpYnV0ZXMiOjYzNn1dLDY5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuL2NvbnN0YW50cyIpLG89dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYyh0LmxpbmUud2lkdGgsdC54c2l6ZW1vZGUsdC54MCx0LngxLHQucGF0aCwhMSl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYyh0LmxpbmUud2lkdGgsdC55c2l6ZW1vZGUsdC55MCx0LnkxLHQucGF0aCwhMCl9ZnVuY3Rpb24gYyh0LGUscixpLHMsbCl7dmFyIGM9dC8yLHU9bDtpZigicGl4ZWwiPT09ZSl7dmFyIGg9cz9vLmV4dHJhY3RQYXRoQ29vcmRzKHMsbD9hLnBhcmFtSXNZOmEucGFyYW1Jc1gpOltyLGldLGY9bi5hZ2dOdW1zKE1hdGgubWF4LG51bGwsaCkscD1uLmFnZ051bXMoTWF0aC5taW4sbnVsbCxoKSxkPXA8MD9NYXRoLmFicyhwKStjOmMsZz1mPjA/ZitjOmM7cmV0dXJue3BwYWQ6YyxwcGFkcGx1czp1P2Q6ZyxwcGFkbWludXM6dT9nOmR9fXJldHVybntwcGFkOmN9fWZ1bmN0aW9uIHUodCxlLHIsbixpKXt2YXIgcz0iY2F0ZWdvcnkiPT09dC50eXBlfHwibXVsdGljYXRlZ29yeSI9PT10LnR5cGU/dC5yMmM6dC5kMmM7aWYodm9pZCAwIT09ZSlyZXR1cm5bcyhlKSxzKHIpXTtpZihuKXt2YXIgbCxjLHUsaCxmPTEvMCxwPS0xLzAsZD1uLm1hdGNoKGEuc2VnbWVudFJFKTtmb3IoImRhdGUiPT09dC50eXBlJiYocz1vLmRlY29kZURhdGUocykpLGw9MDtsPGQubGVuZ3RoO2wrKyl2b2lkIDAhPT0oYz1pW2RbbF0uY2hhckF0KDApXS5kcmF3bikmJighKHU9ZFtsXS5zdWJzdHIoMSkubWF0Y2goYS5wYXJhbVJFKSl8fHUubGVuZ3RoPGN8fCgoaD1zKHVbY10pKTxmJiYoZj1oKSxoPnAmJihwPWgpKSk7cmV0dXJuIHA+PWY/W2YscF06dm9pZCAwfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPW4uZmlsdGVyVmlzaWJsZShlLnNoYXBlcyk7aWYoci5sZW5ndGgmJnQuX2Z1bGxEYXRhLmxlbmd0aClmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGMsaCxmPXJbb107Zi5fZXh0cmVtZXM9e307dmFyIHA9aS5nZXRSZWZUeXBlKGYueHJlZiksZD1pLmdldFJlZlR5cGUoZi55cmVmKTtpZigicGFwZXIiIT09Zi54cmVmJiYiZG9tYWluIiE9PXApe3ZhciBnPSJwaXhlbCI9PT1mLnhzaXplbW9kZT9mLnhhbmNob3I6Zi54MCxtPSJwaXhlbCI9PT1mLnhzaXplbW9kZT9mLnhhbmNob3I6Zi54MTsoaD11KGM9aS5nZXRGcm9tSWQodCxmLnhyZWYpLGcsbSxmLnBhdGgsYS5wYXJhbUlzWCkpJiYoZi5fZXh0cmVtZXNbYy5faWRdPWkuZmluZEV4dHJlbWVzKGMsaCxzKGYpKSl9aWYoInBhcGVyIiE9PWYueXJlZiYmImRvbWFpbiIhPT1kKXt2YXIgdj0icGl4ZWwiPT09Zi55c2l6ZW1vZGU/Zi55YW5jaG9yOmYueTAseT0icGl4ZWwiPT09Zi55c2l6ZW1vZGU/Zi55YW5jaG9yOmYueTE7KGg9dShjPWkuZ2V0RnJvbUlkKHQsZi55cmVmKSx2LHksZi5wYXRoLGEucGFyYW1Jc1kpKSYmKGYuX2V4dHJlbWVzW2MuX2lkXT1pLmZpbmRFeHRyZW1lcyhjLGgsbChmKSkpfX19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuL2NvbnN0YW50cyI6Njk0LCIuL2hlbHBlcnMiOjcwM31dLDY5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3NlZ21lbnRSRTovW01MSFZRQ1RTWl1bXk1MSFZRQ1RTWl0qL2cscGFyYW1SRTovW15ccyxdKy9nLHBhcmFtSXNYOntNOnswOiEwLGRyYXduOjB9LEw6ezA6ITAsZHJhd246MH0sSDp7MDohMCxkcmF3bjowfSxWOnt9LFE6ezA6ITAsMjohMCxkcmF3bjoyfSxDOnswOiEwLDI6ITAsNDohMCxkcmF3bjo0fSxUOnswOiEwLGRyYXduOjB9LFM6ezA6ITAsMjohMCxkcmF3bjoyfSxaOnt9fSxwYXJhbUlzWTp7TTp7MTohMCxkcmF3bjoxfSxMOnsxOiEwLGRyYXduOjF9LEg6e30sVjp7MDohMCxkcmF3bjowfSxROnsxOiEwLDM6ITAsZHJhd246M30sQzp7MTohMCwzOiEwLDU6ITAsZHJhd246NX0sVDp7MTohMCxkcmF3bjoxfSxTOnsxOiEwLDM6ITAsZHJhd246NX0sWjp7fX0sbnVtUGFyYW1zOntNOjIsTDoyLEg6MSxWOjEsUTo0LEM6NixUOjIsUzo0LFo6MH19fSx7fV0sNjk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9aWYoYSgidmlzaWJsZSIpKXt2YXIgbD1hKCJwYXRoIiksYz1hKCJ0eXBlIixsPyJwYXRoIjoicmVjdCIpOyJwYXRoIiE9PWUudHlwZSYmZGVsZXRlIGUucGF0aCxhKCJlZGl0YWJsZSIpLGEoImxheWVyIiksYSgib3BhY2l0eSIpLGEoImZpbGxjb2xvciIpLGEoImZpbGxydWxlIiksYSgibGluZS53aWR0aCIpJiYoYSgibGluZS5jb2xvciIpLGEoImxpbmUuZGFzaCIpKTtmb3IodmFyIHU9YSgieHNpemVtb2RlIiksaD1hKCJ5c2l6ZW1vZGUiKSxmPVsieCIsInkiXSxwPTA7cDwyO3ArKyl7dmFyIGQsZyxtLHY9ZltwXSx5PXYrImFuY2hvciIseD0ieCI9PT12P3U6aCxiPXtfZnVsbExheW91dDpyfSxfPWkuY29lcmNlUmVmKHQsZSxiLHYsdm9pZCAwLCJwYXBlciIpO2lmKCJyYW5nZSI9PT1pLmdldFJlZlR5cGUoXyk/KChkPWkuZ2V0RnJvbUlkKGIsXykpLl9zaGFwZUluZGljZXMucHVzaChlLl9pbmRleCksbT1zLnJhbmdlVG9TaGFwZVBvc2l0aW9uKGQpLGc9cy5zaGFwZVBvc2l0aW9uVG9SYW5nZShkKSk6Zz1tPW4uaWRlbnRpdHksInBhdGgiIT09Yyl7dmFyIHc9disiMCIsVD12KyIxIixrPXRbd10sTT10W1RdO3Rbd109Zyh0W3ddLCEwKSx0W1RdPWcodFtUXSwhMCksInBpeGVsIj09PXg/KGEodywwKSxhKFQsMTApKTooaS5jb2VyY2VQb3NpdGlvbihlLGIsYSxfLHcsLjI1KSxpLmNvZXJjZVBvc2l0aW9uKGUsYixhLF8sVCwuNzUpKSxlW3ddPW0oZVt3XSksZVtUXT1tKGVbVF0pLHRbd109ayx0W1RdPU19aWYoInBpeGVsIj09PXgpe3ZhciBBPXRbeV07dFt5XT1nKHRbeV0sITApLGkuY29lcmNlUG9zaXRpb24oZSxiLGEsXyx5LC4yNSksZVt5XT1tKGVbeV0pLHRbeV09QX19InBhdGgiPT09Yz9hKCJwYXRoIik6bi5ub25lT3JBbGwodCxlLFsieDAiLCJ4MSIsInkwIiwieTEiXSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOiJzaGFwZXMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc5NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi9hdHRyaWJ1dGVzIjo2OTIsIi4vaGVscGVycyI6NzAzfV0sNjk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuL2RyYXdfbmV3c2hhcGUvaGVscGVycyIpLnJlYWRQYXRocyxzPXQoIi4vZHJhd19uZXdzaGFwZS9kaXNwbGF5X291dGxpbmVzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiKS5jbGVhck91dGxpbmVDb250cm9sbGVycyxjPXQoIi4uL2NvbG9yIiksdT10KCIuLi9kcmF3aW5nIiksaD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsZj10KCIuLi9kcmFnZWxlbWVudCIpLHA9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGQ9dCgiLi9jb25zdGFudHMiKSxnPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIG0odCl7dmFyIGU9dC5fZnVsbExheW91dDtmb3IodmFyIHIgaW4gZS5fc2hhcGVVcHBlckxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLGUuX3NoYXBlTG93ZXJMYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxlLl9wbG90cyl7dmFyIG49ZS5fcGxvdHNbcl0uc2hhcGVsYXllcjtuJiZuLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpfWZvcih2YXIgaT0wO2k8ZS5zaGFwZXMubGVuZ3RoO2krKyllLnNoYXBlc1tpXS52aXNpYmxlJiZ4KHQsaSl9ZnVuY3Rpb24gdih0KXtyZXR1cm4hIXQuX2Z1bGxMYXlvdXQuX2RyYXdpbmd9ZnVuY3Rpb24geSh0KXtyZXR1cm4hdC5fY29udGV4dC5lZGl0cy5zaGFwZVBvc2l0aW9ufWZ1bmN0aW9uIHgodCxlKXt0Ll9mdWxsTGF5b3V0Ll9wYXBlcmRpdi5zZWxlY3RBbGwoJy5zaGFwZWxheWVyIFtkYXRhLWluZGV4PSInK2UrJyJdJykucmVtb3ZlKCk7dmFyIHI9Zy5tYWtlT3B0aW9uc0FuZFBsb3RpbmZvKHQsZSksbD1yLm9wdGlvbnMseD1yLnBsb3RpbmZvO2lmKGwuX2lucHV0JiYhMSE9PWwudmlzaWJsZSlpZigiYmVsb3ciIT09bC5sYXllcilrKHQuX2Z1bGxMYXlvdXQuX3NoYXBlVXBwZXJMYXllcik7ZWxzZSBpZigicGFwZXIiPT09bC54cmVmfHwicGFwZXIiPT09bC55cmVmKWsodC5fZnVsbExheW91dC5fc2hhcGVMb3dlckxheWVyKTtlbHNle2lmKHguX2hhZFBsb3RpbmZvKWsoKHgubWFpbnBsb3RpbmZvfHx4KS5zaGFwZWxheWVyKTtlbHNlIGsodC5fZnVsbExheW91dC5fc2hhcGVMb3dlckxheWVyKX1mdW5jdGlvbiBrKHIpe3ZhciBrPV8odCxsKSxNPXsiZGF0YS1pbmRleCI6ZSwiZmlsbC1ydWxlIjpsLmZpbGxydWxlLGQ6a30sQT1sLm9wYWNpdHksUz1sLmZpbGxjb2xvcixFPWwubGluZS53aWR0aD9sLmxpbmUuY29sb3I6InJnYmEoMCwwLDAsMCkiLEM9bC5saW5lLndpZHRoLEw9bC5saW5lLmRhc2g7Q3x8ITAhPT1sLmVkaXRhYmxlfHwoQz01LEw9InNvbGlkIik7dmFyIFA9IloiIT09a1trLmxlbmd0aC0xXSxJPXkodCkmJmwuZWRpdGFibGUmJnQuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg9PT1lO0kmJihTPVA/InJnYmEoMCwwLDAsMCkiOnQuX2Z1bGxMYXlvdXQuYWN0aXZlc2hhcGUuZmlsbGNvbG9yLEE9dC5fZnVsbExheW91dC5hY3RpdmVzaGFwZS5vcGFjaXR5KTt2YXIgeixPPXIuYXBwZW5kKCJwYXRoIikuYXR0cihNKS5zdHlsZSgib3BhY2l0eSIsQSkuY2FsbChjLnN0cm9rZSxFKS5jYWxsKGMuZmlsbCxTKS5jYWxsKHUuZGFzaExpbmUsTCxDKTtpZihiKE8sdCxsKSwoSXx8dC5fY29udGV4dC5lZGl0cy5zaGFwZVBvc2l0aW9uKSYmKHo9aCh0LmxheW91dCwic2hhcGVzIixsKSksSSl7Ty5zdHlsZSh7Y3Vyc29yOiJtb3ZlIn0pO3ZhciBEPXtlbGVtZW50Ok8ubm9kZSgpLHBsb3RpbmZvOngsZ2Q6dCxlZGl0SGVscGVyczp6LGlzQWN0aXZlU2hhcGU6ITB9LFI9byhrLHQpO3MoUixPLEQpfWVsc2UgdC5fY29udGV4dC5lZGl0cy5zaGFwZVBvc2l0aW9uP2Z1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYyxoLG0seSx4LFQsayxNLEEsUyxFLEMsTCxQLEkseixPPSJwaXhlbCI9PT1yLnhzaXplbW9kZSxEPSJwaXhlbCI9PT1yLnlzaXplbW9kZSxSPSJsaW5lIj09PXIudHlwZSxGPSJwYXRoIj09PXIudHlwZSxCPWwubW9kaWZ5SXRlbSxOPWEuZ2V0RnJvbUlkKHQsci54cmVmKSxqPWEuZ2V0UmVmVHlwZShyLnhyZWYpLFU9YS5nZXRGcm9tSWQodCxyLnlyZWYpLFY9YS5nZXRSZWZUeXBlKHIueXJlZikscT1nLmdldERhdGFUb1BpeGVsKHQsTiwhMSxqKSxIPWcuZ2V0RGF0YVRvUGl4ZWwodCxVLCEwLFYpLEc9Zy5nZXRQaXhlbFRvRGF0YSh0LE4sITEsaiksWT1nLmdldFBpeGVsVG9EYXRhKHQsVSwhMCxWKSxXPVI/ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLm1heChyLmxpbmUud2lkdGgsMTApLG49cy5hcHBlbmQoImciKS5hdHRyKCJkYXRhLWluZGV4IixvKTtuLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGUuYXR0cigiZCIpKS5zdHlsZSh7Y3Vyc29yOiJtb3ZlIiwic3Ryb2tlLXdpZHRoIjp0LCJzdHJva2Utb3BhY2l0eSI6IjAifSk7dmFyIGk9eyJmaWxsLW9wYWNpdHkiOiIwIn0sYT1NYXRoLm1heCh0LzIsMTApO3JldHVybiBuLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7ImRhdGEtbGluZS1wb2ludCI6InN0YXJ0LXBvaW50IixjeDpPP3Eoci54YW5jaG9yKStyLngwOnEoci54MCksY3k6RD9IKHIueWFuY2hvciktci55MDpIKHIueTApLHI6YX0pLnN0eWxlKGkpLmNsYXNzZWQoImN1cnNvci1ncmFiIiwhMCksbi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoeyJkYXRhLWxpbmUtcG9pbnQiOiJlbmQtcG9pbnQiLGN4Ok8/cShyLnhhbmNob3IpK3IueDE6cShyLngxKSxjeTpEP0goci55YW5jaG9yKS1yLnkxOkgoci55MSkscjphfSkuc3R5bGUoaSkuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKSxufSgpOmUsWj17ZWxlbWVudDpXLm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbihuKXtpZih2KHQpKXJldHVybjtPJiYoeD1xKHIueGFuY2hvcikpO0QmJihUPUgoci55YW5jaG9yKSk7InBhdGgiPT09ci50eXBlP0k9ci5wYXRoOihjPU8/ci54MDpxKHIueDApLGg9RD9yLnkwOkgoci55MCksbT1PP3IueDE6cShyLngxKSx5PUQ/ci55MTpIKHIueTEpKTtjPG0/KEE9YyxMPSJ4MCIsUz1tLFA9IngxIik6KEE9bSxMPSJ4MSIsUz1jLFA9IngwIik7IUQmJmg8eXx8RCYmaD55PyhrPWgsRT0ieTAiLE09eSxDPSJ5MSIpOihrPXksRT0ieTEiLE09aCxDPSJ5MCIpO1gobiksUShzLHIpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnhyZWYsaT1lLnlyZWYsbz1hLmdldEZyb21JZChyLG4pLHM9YS5nZXRGcm9tSWQocixpKSxsPSIiOyJwYXBlciI9PT1ufHxvLmF1dG9yYW5nZXx8KGwrPW4pOyJwYXBlciI9PT1pfHxzLmF1dG9yYW5nZXx8KGwrPWkpO3Uuc2V0Q2xpcFVybCh0LGw/ImNsaXAiK3IuX2Z1bGxMYXlvdXQuX3VpZCtsOm51bGwscil9KGUscix0KSxaLm1vdmVGbj0ibW92ZSI9PT16P0o6SyxaLmFsdEtleT1uLmFsdEtleX0sZG9uZUZuOmZ1bmN0aW9uKCl7aWYodih0KSlyZXR1cm47cChlKSwkKHMpLGIoZSx0LHIpLG4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LGwuZ2V0VXBkYXRlT2JqKCkpfSxjbGlja0ZuOmZ1bmN0aW9uKCl7aWYodih0KSlyZXR1cm47JChzKX19O2Z1bmN0aW9uIFgocil7aWYodih0KSl6PW51bGw7ZWxzZSBpZihSKXo9InBhdGgiPT09ci50YXJnZXQudGFnTmFtZT8ibW92ZSI6InN0YXJ0LXBvaW50Ij09PXIudGFyZ2V0LmF0dHJpYnV0ZXNbImRhdGEtbGluZS1wb2ludCJdLnZhbHVlPyJyZXNpemUtb3Zlci1zdGFydC1wb2ludCI6InJlc2l6ZS1vdmVyLWVuZC1wb2ludCI7ZWxzZXt2YXIgbj1aLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1uLnJpZ2h0LW4ubGVmdCxhPW4uYm90dG9tLW4udG9wLG89ci5jbGllbnRYLW4ubGVmdCxzPXIuY2xpZW50WS1uLnRvcCxsPSFGJiZpPjEwJiZhPjEwJiYhci5zaGlmdEtleT9mLmdldEN1cnNvcihvL2ksMS1zL2EpOiJtb3ZlIjtwKGUsbCksej1sLnNwbGl0KCItIilbMF19fWZ1bmN0aW9uIEoobixpKXtpZigicGF0aCI9PT1yLnR5cGUpe3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxvPWEsbD1hO08/QigieGFuY2hvciIsci54YW5jaG9yPUcoeCtuKSk6KG89ZnVuY3Rpb24odCl7cmV0dXJuIEcocSh0KStuKX0sTiYmImRhdGUiPT09Ti50eXBlJiYobz1nLmVuY29kZURhdGUobykpKSxEP0IoInlhbmNob3IiLHIueWFuY2hvcj1ZKFQraSkpOihsPWZ1bmN0aW9uKHQpe3JldHVybiBZKEgodCkraSl9LFUmJiJkYXRlIj09PVUudHlwZSYmKGw9Zy5lbmNvZGVEYXRlKGwpKSksQigicGF0aCIsci5wYXRoPXcoSSxvLGwpKX1lbHNlIE8/QigieGFuY2hvciIsci54YW5jaG9yPUcoeCtuKSk6KEIoIngwIixyLngwPUcoYytuKSksQigieDEiLHIueDE9RyhtK24pKSksRD9CKCJ5YW5jaG9yIixyLnlhbmNob3I9WShUK2kpKTooQigieTAiLHIueTA9WShoK2kpKSxCKCJ5MSIsci55MT1ZKHkraSkpKTtlLmF0dHIoImQiLF8odCxyKSksUShzLHIpfWZ1bmN0aW9uIEsobixpKXtpZihGKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbz1hLGw9YTtPP0IoInhhbmNob3IiLHIueGFuY2hvcj1HKHgrbikpOihvPWZ1bmN0aW9uKHQpe3JldHVybiBHKHEodCkrbil9LE4mJiJkYXRlIj09PU4udHlwZSYmKG89Zy5lbmNvZGVEYXRlKG8pKSksRD9CKCJ5YW5jaG9yIixyLnlhbmNob3I9WShUK2kpKToobD1mdW5jdGlvbih0KXtyZXR1cm4gWShIKHQpK2kpfSxVJiYiZGF0ZSI9PT1VLnR5cGUmJihsPWcuZW5jb2RlRGF0ZShsKSkpLEIoInBhdGgiLHIucGF0aD13KEksbyxsKSl9ZWxzZSBpZihSKXtpZigicmVzaXplLW92ZXItc3RhcnQtcG9pbnQiPT09eil7dmFyIHU9YytuLGY9RD9oLWk6aCtpO0IoIngwIixyLngwPU8/dTpHKHUpKSxCKCJ5MCIsci55MD1EP2Y6WShmKSl9ZWxzZSBpZigicmVzaXplLW92ZXItZW5kLXBvaW50Ij09PXope3ZhciBwPW0rbixkPUQ/eS1pOnkraTtCKCJ4MSIsci54MT1PP3A6RyhwKSksQigieTEiLHIueTE9RD9kOlkoZCkpfX1lbHNle3ZhciB2PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09ei5pbmRleE9mKHQpfSxiPXYoIm4iKSxqPXYoInMiKSxWPXYoInciKSxXPXYoImUiKSxaPWI/aytpOmssWD1qP00raTpNLEo9Vj9BK246QSxLPVc/UytuOlM7RCYmKGImJihaPWstaSksaiYmKFg9TS1pKSksKCFEJiZYLVo+MTB8fEQmJlotWD4xMCkmJihCKEUscltFXT1EP1o6WShaKSksQihDLHJbQ109RD9YOlkoWCkpKSxLLUo+MTAmJihCKEwscltMXT1PP0o6RyhKKSksQihQLHJbUF09Tz9LOkcoSykpKX1lLmF0dHIoImQiLF8odCxyKSksUShzLHIpfWZ1bmN0aW9uIFEodCxlKXsoT3x8RCkmJmZ1bmN0aW9uKCl7dmFyIHI9InBhdGgiIT09ZS50eXBlLG49dC5zZWxlY3RBbGwoIi52aXN1YWwtY3VlIikuZGF0YShbMF0pO24uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKHtmaWxsOiIjZmZmIiwiZmlsbC1ydWxlIjoiZXZlbm9kZCIsc3Ryb2tlOiIjMDAwIiwic3Ryb2tlLXdpZHRoIjoxfSkuY2xhc3NlZCgidmlzdWFsLWN1ZSIsITApO3ZhciBhPXEoTz9lLnhhbmNob3I6aS5taWRSYW5nZShyP1tlLngwLGUueDFdOmcuZXh0cmFjdFBhdGhDb29yZHMoZS5wYXRoLGQucGFyYW1Jc1gpKSksbz1IKEQ/ZS55YW5jaG9yOmkubWlkUmFuZ2Uocj9bZS55MCxlLnkxXTpnLmV4dHJhY3RQYXRoQ29vcmRzKGUucGF0aCxkLnBhcmFtSXNZKSkpO2lmKGE9Zy5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmcoYSwxKSxvPWcucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nKG8sMSksTyYmRCl7dmFyIHM9Ik0iKyhhLTEtMSkrIiwiKyhvLTEtMSkrImgtOHYyaDggdjhoMnYtOCBoOHYtMmgtOCB2LThoLTIgWiI7bi5hdHRyKCJkIixzKX1lbHNlIGlmKE8pe3ZhciBsPSJNIisoYS0xLTEpKyIsIisoby05LTEpKyJ2MTggaDIgdi0xOCBaIjtuLmF0dHIoImQiLGwpfWVsc2V7dmFyIGM9Ik0iKyhhLTktMSkrIiwiKyhvLTEtMSkrImgxOCB2MiBoLTE4IFoiO24uYXR0cigiZCIsYyl9fSgpfWZ1bmN0aW9uICQodCl7dC5zZWxlY3RBbGwoIi52aXN1YWwtY3VlIikucmVtb3ZlKCl9Zi5pbml0KFopLFcubm9kZSgpLm9ubW91c2Vtb3ZlPVh9KHQsTyxsLGUscix6KTohMD09PWwuZWRpdGFibGUmJk8uc3R5bGUoInBvaW50ZXItZXZlbnRzIixQfHxjLm9wYWNpdHkoUykqQTw9LjU/InN0cm9rZSI6ImFsbCIpO08ubm9kZSgpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZigheSh0KSlyZXR1cm47dmFyIHI9K2Uubm9kZSgpLmdldEF0dHJpYnV0ZSgiZGF0YS1pbmRleCIpO2lmKHI+PTApe2lmKHI9PT10Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4KXJldHVybiB2b2lkIFQodCk7dC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD1yLHQuX2Z1bGxMYXlvdXQuX2RlYWN0aXZhdGVTaGFwZT1ULG0odCl9fSh0LE8pfSkpfX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj0oci54cmVmK3IueXJlZikucmVwbGFjZSgvcGFwZXIvZywiIikucmVwbGFjZSgvW3h5el1bMS05XSogKmRvbWFpbi9nLCIiKTt1LnNldENsaXBVcmwodCxuPyJjbGlwIitlLl9mdWxsTGF5b3V0Ll91aWQrbjpudWxsLGUpfWZ1bmN0aW9uIF8odCxlKXt2YXIgcixuLG8scyxsLGMsdSxoLGY9ZS50eXBlLHA9YS5nZXRSZWZUeXBlKGUueHJlZiksbT1hLmdldFJlZlR5cGUoZS55cmVmKSx2PWEuZ2V0RnJvbUlkKHQsZS54cmVmKSx5PWEuZ2V0RnJvbUlkKHQsZS55cmVmKSx4PXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYodj8iZG9tYWluIj09PXA/bj1mdW5jdGlvbih0KXtyZXR1cm4gdi5fb2Zmc2V0K3YuX2xlbmd0aCp0fToocj1nLnNoYXBlUG9zaXRpb25Ub1JhbmdlKHYpLG49ZnVuY3Rpb24odCl7cmV0dXJuIHYuX29mZnNldCt2LnIycChyKHQsITApKX0pOm49ZnVuY3Rpb24odCl7cmV0dXJuIHgubCt4LncqdH0seT8iZG9tYWluIj09PW0/cz1mdW5jdGlvbih0KXtyZXR1cm4geS5fb2Zmc2V0K3kuX2xlbmd0aCooMS10KX06KG89Zy5zaGFwZVBvc2l0aW9uVG9SYW5nZSh5KSxzPWZ1bmN0aW9uKHQpe3JldHVybiB5Ll9vZmZzZXQreS5yMnAobyh0LCEwKSl9KTpzPWZ1bmN0aW9uKHQpe3JldHVybiB4LnQreC5oKigxLXQpfSwicGF0aCI9PT1mKXJldHVybiB2JiYiZGF0ZSI9PT12LnR5cGUmJihuPWcuZGVjb2RlRGF0ZShuKSkseSYmImRhdGUiPT09eS50eXBlJiYocz1nLmRlY29kZURhdGUocykpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LnBhdGgsYT10LnhzaXplbW9kZSxvPXQueXNpemVtb2RlLHM9dC54YW5jaG9yLGw9dC55YW5jaG9yO3JldHVybiBuLnJlcGxhY2UoZC5zZWdtZW50UkUsKGZ1bmN0aW9uKHQpe3ZhciBuPTAsYz10LmNoYXJBdCgwKSx1PWQucGFyYW1Jc1hbY10saD1kLnBhcmFtSXNZW2NdLGY9ZC5udW1QYXJhbXNbY10scD10LnN1YnN0cigxKS5yZXBsYWNlKGQucGFyYW1SRSwoZnVuY3Rpb24odCl7cmV0dXJuIHVbbl0/dD0icGl4ZWwiPT09YT9lKHMpK051bWJlcih0KTplKHQpOmhbbl0mJih0PSJwaXhlbCI9PT1vP3IobCktTnVtYmVyKHQpOnIodCkpLCsrbj5mJiYodD0iWCIpLHR9KSk7cmV0dXJuIG4+ZiYmKHA9cC5yZXBsYWNlKC9bXHMsXSpYLiovLCIiKSxpLmxvZygiSWdub3JpbmcgZXh0cmEgcGFyYW1zIGluIHNlZ21lbnQgIit0KSksYytwfSkpfShlLG4scyk7aWYoInBpeGVsIj09PWUueHNpemVtb2RlKXt2YXIgYj1uKGUueGFuY2hvcik7bD1iK2UueDAsYz1iK2UueDF9ZWxzZSBsPW4oZS54MCksYz1uKGUueDEpO2lmKCJwaXhlbCI9PT1lLnlzaXplbW9kZSl7dmFyIF89cyhlLnlhbmNob3IpO3U9Xy1lLnkwLGg9Xy1lLnkxfWVsc2UgdT1zKGUueTApLGg9cyhlLnkxKTtpZigibGluZSI9PT1mKXJldHVybiJNIitsKyIsIit1KyJMIitjKyIsIitoO2lmKCJyZWN0Ij09PWYpcmV0dXJuIk0iK2wrIiwiK3UrIkgiK2MrIlYiK2grIkgiK2wrIloiO3ZhciB3PShsK2MpLzIsVD0odStoKS8yLGs9TWF0aC5hYnMody1sKSxNPU1hdGguYWJzKFQtdSksQT0iQSIraysiLCIrTSxTPXcraysiLCIrVDtyZXR1cm4iTSIrUytBKyIgMCAxLDEgIisodysiLCIrKFQtTSkpK0ErIiAwIDAsMSAiK1MrIloifWZ1bmN0aW9uIHcodCxlLHIpe3JldHVybiB0LnJlcGxhY2UoZC5zZWdtZW50UkUsKGZ1bmN0aW9uKHQpe3ZhciBuPTAsaT10LmNoYXJBdCgwKSxhPWQucGFyYW1Jc1hbaV0sbz1kLnBhcmFtSXNZW2ldLHM9ZC5udW1QYXJhbXNbaV07cmV0dXJuIGkrdC5zdWJzdHIoMSkucmVwbGFjZShkLnBhcmFtUkUsKGZ1bmN0aW9uKHQpe3JldHVybiBuPj1zfHwoYVtuXT90PWUodCk6b1tuXSYmKHQ9cih0KSksbisrKSx0fSkpfSkpfWZ1bmN0aW9uIFQodCl7eSh0KSYmKHQuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTAmJihsKHQpLGRlbGV0ZSB0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4LG0odCkpKX1lLmV4cG9ydHM9e2RyYXc6bSxkcmF3T25lOngsZXJhc2VBY3RpdmVTaGFwZTpmdW5jdGlvbih0KXtpZigheSh0KSlyZXR1cm47bCh0KTt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4LHI9KHQubGF5b3V0fHx7fSkuc2hhcGVzfHxbXTtpZihlPHIubGVuZ3RoKXtmb3IodmFyIGk9W10sYT0wO2E8ci5sZW5ndGg7YSsrKWEhPT1lJiZpLnB1c2goclthXSk7ZGVsZXRlIHQuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQse3NoYXBlczppfSl9fX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc3MCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6Nzg4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiOjgwOSwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vY29sb3IiOjYxNSwiLi4vZHJhZ2VsZW1lbnQiOjYzNCwiLi4vZHJhd2luZyI6NjM3LCIuL2NvbnN0YW50cyI6Njk0LCIuL2RyYXdfbmV3c2hhcGUvZGlzcGxheV9vdXRsaW5lcyI6NzAwLCIuL2RyYXdfbmV3c2hhcGUvaGVscGVycyI6NzAxLCIuL2hlbHBlcnMiOjcwM31dLDY5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGk9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtuZXdzaGFwZTp7bGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NCxlZGl0VHlwZToibm9uZSJ9LGRhc2g6aSh7fSxuLHtkZmx0OiJzb2xpZCIsZWRpdFR5cGU6Im5vbmUifSksZWRpdFR5cGU6Im5vbmUifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToibm9uZSJ9LGZpbGxydWxlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJldmVub2RkIiwibm9uemVybyJdLGRmbHQ6ImV2ZW5vZGQiLGVkaXRUeXBlOiJub25lIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6Im5vbmUifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmVsb3ciLCJhYm92ZSJdLGRmbHQ6ImFib3ZlIixlZGl0VHlwZToibm9uZSJ9LGRyYXdkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm9ydGhvIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwiZGlhZ29uYWwiXSxkZmx0OiJkaWFnb25hbCIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToibm9uZSJ9LGFjdGl2ZXNoYXBlOntmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2IoMjU1LDAsMjU1KSIsZWRpdFR5cGU6Im5vbmUifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjUsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToibm9uZSJ9fX0seyIuLi8uLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL2RyYXdpbmcvYXR0cmlidXRlcyI6NjM2fV0sNjk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Q0lSQ0xFX1NJREVTOjMyLGkwMDA6MCxpMDkwOjgsaTE4MDoxNixpMjcwOjI0LGNvczQ1Ok1hdGguY29zKE1hdGguUEkvNCksc2luNDU6TWF0aC5zaW4oTWF0aC5QSS80KSxTUVJUMjpNYXRoLnNxcnQoMil9fSx7fV0sNjk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihyKCJuZXdzaGFwZS5kcmF3ZGlyZWN0aW9uIikscigibmV3c2hhcGUubGF5ZXIiKSxyKCJuZXdzaGFwZS5maWxsY29sb3IiKSxyKCJuZXdzaGFwZS5maWxscnVsZSIpLHIoIm5ld3NoYXBlLm9wYWNpdHkiKSxyKCJuZXdzaGFwZS5saW5lLndpZHRoIikpe3ZhciBpPSh0fHx7fSkucGxvdF9iZ2NvbG9yfHwiI0ZGRiI7cigibmV3c2hhcGUubGluZS5jb2xvciIsbi5jb250cmFzdChpKSkscigibmV3c2hhcGUubGluZS5kYXNoIil9cigiYWN0aXZlc2hhcGUuZmlsbGNvbG9yIikscigiYWN0aXZlc2hhcGUub3BhY2l0eSIpfX0seyIuLi8uLi9jb2xvciI6NjE1fV0sNzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2RyYWdlbGVtZW50IiksaT10KCIuLi8uLi9kcmFnZWxlbWVudC9oZWxwZXJzIikuZHJhd01vZGUsYT10KCIuLi8uLi8uLi9yZWdpc3RyeSIpLG89dCgiLi9jb25zdGFudHMiKSxzPW8uaTAwMCxsPW8uaTA5MCxjPW8uaTE4MCx1PW8uaTI3MCxoPXQoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSIpLmNsZWFyT3V0bGluZUNvbnRyb2xsZXJzLGY9dCgiLi9oZWxwZXJzIikscD1mLnBvaW50c1NoYXBlUmVjdGFuZ2xlLGQ9Zi5wb2ludHNTaGFwZUVsbGlwc2UsZz1mLndyaXRlUGF0aHMsbT10KCIuL25ld3NoYXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscixvLGYpe2Z8fChmPTApO3ZhciB2PW8uZ2Q7ZnVuY3Rpb24geSgpe3QoZSxyLG8sZisrKSxkKGVbMF0pJiZ4KHtyZWRyYXdpbmc6ITB9KX1mdW5jdGlvbiB4KHQpe28uaXNBY3RpdmVTaGFwZT0hMTt2YXIgZT1tKHIsbyk7T2JqZWN0LmtleXMoZSkubGVuZ3RoJiZhLmNhbGwoKHR8fHt9KS5yZWRyYXdpbmc/InJlbGF5b3V0IjoiX2d1aVJlbGF5b3V0Iix2LGUpfXZhciBiLF8sdyxULGssTT1vLmlzQWN0aXZlU2hhcGUsQT12Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXIsUz1vLmRyYWdtb2RlOyhpKFMpP3YuX2Z1bGxMYXlvdXQuX2RyYXdpbmc9ITA6di5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MCYmaCh2KSxyLmF0dHIoImQiLGcoZSkpLE0mJiFmKSYmKGs9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTt0W3JdPVtdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt0W3JdW2ldPVtdO2Zvcih2YXIgYT0wO2E8bltpXS5sZW5ndGg7YSsrKXRbcl1baV1bYV09bltpXVthXX19cmV0dXJuIHR9KFtdLGUpLGZ1bmN0aW9uKHQpe2I9W107Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl0sYT0hcChpKSYmZChpKTtiW3JdPVtdO2Zvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKWlmKCJaIiE9PWlbb11bMF0mJighYXx8bz09PXN8fG89PT1sfHxvPT09Y3x8bz09PXUpKXt2YXIgaD1pW29dWzFdLGY9aVtvXVsyXSxnPXQuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJjdXJzb3ItZ3JhYiIsITApLmF0dHIoImRhdGEtaSIscikuYXR0cigiZGF0YS1qIixvKS5hdHRyKCJjeCIsaCkuYXR0cigiY3kiLGYpLmF0dHIoInIiLDQpLnN0eWxlKHsibWl4LWJsZW5kLW1vZGUiOiJsdW1pbm9zaXR5IixmaWxsOiJibGFjayIsc3Ryb2tlOiJ3aGl0ZSIsInN0cm9rZS13aWR0aCI6MX0pO2Jbcl1bb109e2VsZW1lbnQ6Zy5ub2RlKCksZ2Q6dixwcmVwRm46RSxkb25lRm46TCxjbGlja0ZuOlB9LG4uaW5pdChiW3JdW29dKX19fShBLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwib3V0bGluZS1jb250cm9sbGVycyIpKSxmdW5jdGlvbigpe2lmKF89W10sIWUubGVuZ3RoKXJldHVybjtfWzBdPXtlbGVtZW50OnJbMF1bMF0sZ2Q6dixwcmVwRm46eixkb25lRm46T30sbi5pbml0KF9bMF0pfSgpKTtmdW5jdGlvbiBFKHQpe3c9K3Quc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaSIpLFQ9K3Quc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaiIpLGJbd11bVF0ubW92ZUZuPUN9ZnVuY3Rpb24gQyh0LHIpe2lmKGUubGVuZ3RoKXt2YXIgbj1rW3ddW1RdWzFdLGk9a1t3XVtUXVsyXSxhPWVbd10sbz1hLmxlbmd0aDtpZihwKGEpKXtmb3IodmFyIHM9MDtzPG87cysrKWlmKHMhPT1UKXt2YXIgbD1hW3NdO2xbMV09PT1hW1RdWzFdJiYobFsxXT1uK3QpLGxbMl09PT1hW1RdWzJdJiYobFsyXT1pK3IpfWlmKGFbVF1bMV09bit0LGFbVF1bMl09aStyLCFwKGEpKWZvcih2YXIgYz0wO2M8bztjKyspZm9yKHZhciB1PTA7dTxhW2NdLmxlbmd0aDt1KyspYVtjXVt1XT1rW3ddW2NdW3VdfWVsc2UgYVtUXVsxXT1uK3QsYVtUXVsyXT1pK3I7eSgpfX1mdW5jdGlvbiBMKCl7eCgpfWZ1bmN0aW9uIFAodCxyKXtpZigyPT09dCl7dz0rci5zcmNFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1pIiksVD0rci5zcmNFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1qIik7dmFyIG49ZVt3XTtwKG4pfHxkKG4pfHxmdW5jdGlvbigpe2lmKGUubGVuZ3RoJiZlW3ddJiZlW3ddLmxlbmd0aCl7Zm9yKHZhciB0PVtdLHI9MDtyPGVbd10ubGVuZ3RoO3IrKylyIT09VCYmdC5wdXNoKGVbd11bcl0pO3QubGVuZ3RoPjEmJigyIT09dC5sZW5ndGh8fCJaIiE9PXRbMV1bMF0pJiYoMD09PVQmJih0WzBdWzBdPSJNIiksZVt3XT10LHkoKSx4KCkpfX0oKX19ZnVuY3Rpb24gSSh0LHIpeyFmdW5jdGlvbih0LHIpe2lmKGUubGVuZ3RoKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT0wO2k8ZVtuXS5sZW5ndGg7aSsrKWZvcih2YXIgYT0wO2ErMjxlW25dW2ldLmxlbmd0aDthKz0yKWVbbl1baV1bYSsxXT1rW25dW2ldW2ErMV0rdCxlW25dW2ldW2ErMl09a1tuXVtpXVthKzJdK3J9KHQscikseSgpfWZ1bmN0aW9uIHoodCl7KHc9K3Quc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaSIpKXx8KHc9MCksX1t3XS5tb3ZlRm49SX1mdW5jdGlvbiBPKCl7eCgpfX19LHsiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIjo4MDksIi4uLy4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uLy4uL2RyYWdlbGVtZW50Ijo2MzQsIi4uLy4uL2RyYWdlbGVtZW50L2hlbHBlcnMiOjYzMywiLi9jb25zdGFudHMiOjY5OCwiLi9oZWxwZXJzIjo3MDEsIi4vbmV3c2hhcGVzIjo3MDJ9XSw3MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyc2Utc3ZnLXBhdGgiKSxpPXQoIi4vY29uc3RhbnRzIiksYT1pLkNJUkNMRV9TSURFUyxvPWkuU1FSVDIscz10KCIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGVscGVycyIpLGw9cy5wMnIsYz1zLnIycCx1PVswLDMsNCw1LDYsMSwyXSxoPVswLDMsNCwxLDJdO2Z1bmN0aW9uIGYodCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKTw9MWUtNn1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9ZVsxXS10WzFdLG49ZVsyXS10WzJdO3JldHVybiBNYXRoLnNxcnQocipyK24qbil9ci53cml0ZVBhdGhzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKCFlKXJldHVybiJNMCwwWiI7Zm9yKHZhciByPSIiLG49MDtuPGU7bisrKWZvcih2YXIgaT10W25dLmxlbmd0aCxhPTA7YTxpO2ErKyl7dmFyIG89dFtuXVthXVswXTtpZigiWiI9PT1vKXIrPSJaIjtlbHNlIGZvcih2YXIgcz10W25dW2FdLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9bDsiUSI9PT1vfHwiUyI9PT1vP2M9aFtsXToiQyI9PT1vJiYoYz11W2xdKSxyKz10W25dW2FdW2NdLGw+MCYmbDxzLTEmJihyKz0iLCIpfX1yZXR1cm4gcn0sci5yZWFkUGF0aHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG8scyx1LGg9bih0KSxmPVtdLHA9LTEsZD0wLGc9MCxtPWZ1bmN0aW9uKCl7cz1kLHU9Z307bSgpO2Zvcih2YXIgdj0wO3Y8aC5sZW5ndGg7disrKXt2YXIgeSx4LGIsXyx3PVtdLFQ9aFt2XVswXSxrPVQ7c3dpdGNoKFQpe2Nhc2UiTSI6cCsrLGZbcF09W10sZD0raFt2XVsxXSxnPStoW3ZdWzJdLHcucHVzaChbayxkLGddKSxtKCk7YnJlYWs7Y2FzZSJRIjpjYXNlIlMiOnk9K2hbdl1bMV0sYj0raFt2XVsyXSxkPStoW3ZdWzNdLGc9K2hbdl1bNF0sdy5wdXNoKFtrLGQsZyx5LGJdKTticmVhaztjYXNlIkMiOnk9K2hbdl1bMV0sYj0raFt2XVsyXSx4PStoW3ZdWzNdLF89K2hbdl1bNF0sZD0raFt2XVs1XSxnPStoW3ZdWzZdLHcucHVzaChbayxkLGcseSxiLHgsX10pO2JyZWFrO2Nhc2UiVCI6Y2FzZSJMIjpkPStoW3ZdWzFdLGc9K2hbdl1bMl0sdy5wdXNoKFtrLGQsZ10pO2JyZWFrO2Nhc2UiSCI6az0iTCIsZD0raFt2XVsxXSx3LnB1c2goW2ssZCxnXSk7YnJlYWs7Y2FzZSJWIjprPSJMIixnPStoW3ZdWzFdLHcucHVzaChbayxkLGddKTticmVhaztjYXNlIkEiOms9IkwiO3ZhciBNPStoW3ZdWzFdLEE9K2hbdl1bMl07K2hbdl1bNF18fChNPS1NLEE9LUEpO3ZhciBTPWQtTSxFPWc7Zm9yKG89MTtvPD1hLzI7bysrKXt2YXIgQz0yKk1hdGguUEkqby9hO3cucHVzaChbayxTK00qTWF0aC5jb3MoQyksRStBKk1hdGguc2luKEMpXSl9YnJlYWs7Y2FzZSJaIjpkPT09cyYmZz09PXV8fChkPXMsZz11LHcucHVzaChbayxkLGddKSl9Zm9yKHZhciBMPShyfHx7fSkuZG9tYWluLFA9ZS5fZnVsbExheW91dC5fc2l6ZSxJPXImJiJwaXhlbCI9PT1yLnhzaXplbW9kZSx6PXImJiJwaXhlbCI9PT1yLnlzaXplbW9kZSxPPSExPT09aSxEPTA7RDx3Lmxlbmd0aDtEKyspe2ZvcihvPTA7bysyPDc7bys9Mil7dmFyIFI9d1tEXVtvKzFdLEY9d1tEXVtvKzJdO3ZvaWQgMCE9PVImJnZvaWQgMCE9PUYmJihkPVIsZz1GLHImJihyLnhheGlzJiZyLnhheGlzLnAycj8oTyYmKFItPXIueGF4aXMuX29mZnNldCksUj1JP2Moci54YXhpcyxyLnhhbmNob3IpK1I6bChyLnhheGlzLFIpKTooTyYmKFItPVAubCksTD9SPUwueFswXStSL1AudzpSLz1QLncpLHIueWF4aXMmJnIueWF4aXMucDJyPyhPJiYoRi09ci55YXhpcy5fb2Zmc2V0KSxGPXo/YyhyLnlheGlzLHIueWFuY2hvciktRjpsKHIueWF4aXMsRikpOihPJiYoRi09UC50KSxGPUw/TC55WzFdLUYvUC5oOjEtRi9QLmgpKSx3W0RdW28rMV09Uix3W0RdW28rMl09Ril9ZltwXS5wdXNoKHdbRF0uc2xpY2UoKSl9fXJldHVybiBmfSxyLnBvaW50c1NoYXBlUmVjdGFuZ2xlPWZ1bmN0aW9uKHQpe2lmKDUhPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGU9MTtlPDM7ZSsrKXtpZighZih0WzBdW2VdLXRbMV1bZV0sdFszXVtlXS10WzJdW2VdKSlyZXR1cm4hMTtpZighZih0WzBdW2VdLXRbM11bZV0sdFsxXVtlXS10WzJdW2VdKSlyZXR1cm4hMX1yZXR1cm4hKCFmKHRbMF1bMV0sdFsxXVsxXSkmJiFmKHRbMF1bMV0sdFszXVsxXSkpJiYhIShwKHRbMF0sdFsxXSkqcCh0WzBdLHRbM10pKX0sci5wb2ludHNTaGFwZUVsbGlwc2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZSE9PWErMSlyZXR1cm4hMTtlPWE7Zm9yKHZhciByPTA7cjxlO3IrKyl7dmFyIG49KDIqZS1yKSVlLGk9KGUvMituKSVlLG89KGUvMityKSVlO2lmKCFmKHAodFtyXSx0W29dKSxwKHRbbl0sdFtpXSkpKXJldHVybiExfXJldHVybiEwfSxyLmhhbmRsZUVsbGlwc2U9ZnVuY3Rpb24odCxlLG4pe2lmKCF0KXJldHVybltlLG5dO3ZhciBpPXIuZWxsaXBzZU92ZXIoe3gwOmVbMF0seTA6ZVsxXSx4MTpuWzBdLHkxOm5bMV19KSxzPShpLngxK2kueDApLzIsbD0oaS55MStpLnkwKS8yLGM9KGkueDEtaS54MCkvMix1PShpLnkxLWkueTApLzI7Y3x8KGM9dS89byksdXx8KHU9Yy89byk7Zm9yKHZhciBoPVtdLGY9MDtmPGE7ZisrKXt2YXIgcD0yKmYqTWF0aC5QSS9hO2gucHVzaChbcytjKk1hdGguY29zKHApLGwrdSpNYXRoLnNpbihwKV0pfXJldHVybiBofSxyLmVsbGlwc2VPdmVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQueDAscj10LnkwLG49dC54MSxpPXQueTEsYT1uLWUscz1pLXIsbD0oKGUtPWEpK24pLzIsYz0oKHItPXMpK2kpLzI7cmV0dXJue3gwOmwtKGEqPW8pLHkwOmMtKHMqPW8pLHgxOmwrYSx5MTpjK3N9fX0seyIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGVscGVycyI6ODEwLCIuL2NvbnN0YW50cyI6Njk4LCJwYXJzZS1zdmctcGF0aCI6NDc5fV0sNzAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2RyYWdlbGVtZW50L2hlbHBlcnMiKSxpPW4uZHJhd01vZGUsYT1uLm9wZW5Nb2RlLG89dCgiLi9jb25zdGFudHMiKSxzPW8uaTAwMCxsPW8uaTA5MCxjPW8uaTE4MCx1PW8uaTI3MCxoPW8uY29zNDUsZj1vLnNpbjQ1LHA9dCgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hlbHBlcnMiKSxkPXAucDJyLGc9cC5yMnAsbT10KCIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiKS5jbGVhclNlbGVjdCx2PXQoIi4vaGVscGVycyIpLHk9di5yZWFkUGF0aHMseD12LndyaXRlUGF0aHMsYj12LmVsbGlwc2VPdmVyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoKXt2YXIgcj10WzBdWzBdO2lmKHIpe3ZhciBuPXIuZ2V0QXR0cmlidXRlKCJkIiksbz1lLmdkLHA9by5fZnVsbExheW91dC5uZXdzaGFwZSx2PWUucGxvdGluZm8sXz12LnhheGlzLHc9di55YXhpcyxUPSEhdi5kb21haW58fCF2LnhheGlzLGs9ISF2LmRvbWFpbnx8IXYueWF4aXMsTT1lLmlzQWN0aXZlU2hhcGUsQT1lLmRyYWdtb2RlLFM9KG8ubGF5b3V0fHx7fSkuc2hhcGVzfHxbXTtpZighaShBKSYmdm9pZCAwIT09TSl7dmFyIEU9by5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleDtpZihFPFMubGVuZ3RoKXN3aXRjaChvLl9mdWxsTGF5b3V0LnNoYXBlc1tFXS50eXBlKXtjYXNlInJlY3QiOkE9ImRyYXdyZWN0IjticmVhaztjYXNlImNpcmNsZSI6QT0iZHJhd2NpcmNsZSI7YnJlYWs7Y2FzZSJsaW5lIjpBPSJkcmF3bGluZSI7YnJlYWs7Y2FzZSJwYXRoIjp2YXIgQz1TW0VdLnBhdGh8fCIiO0E9IloiPT09Q1tDLmxlbmd0aC0xXT8iZHJhd2Nsb3NlZHBhdGgiOiJkcmF3b3BlbnBhdGgifX12YXIgTCxQPWEoQSksST15KG4sbyx2LE0pLHo9e2VkaXRhYmxlOiEwLHhyZWY6VD8icGFwZXIiOl8uX2lkLHlyZWY6az8icGFwZXIiOncuX2lkLGxheWVyOnAubGF5ZXIsb3BhY2l0eTpwLm9wYWNpdHksbGluZTp7Y29sb3I6cC5saW5lLmNvbG9yLHdpZHRoOnAubGluZS53aWR0aCxkYXNoOnAubGluZS5kYXNofX07aWYoUHx8KHouZmlsbGNvbG9yPXAuZmlsbGNvbG9yLHouZmlsbHJ1bGU9cC5maWxscnVsZSksMT09PUkubGVuZ3RoJiYoTD1JWzBdKSxMJiYiZHJhd3JlY3QiPT09QSl6LnR5cGU9InJlY3QiLHoueDA9TFswXVsxXSx6LnkwPUxbMF1bMl0sei54MT1MWzJdWzFdLHoueTE9TFsyXVsyXTtlbHNlIGlmKEwmJiJkcmF3bGluZSI9PT1BKXoudHlwZT0ibGluZSIsei54MD1MWzBdWzFdLHoueTA9TFswXVsyXSx6LngxPUxbMV1bMV0sei55MT1MWzFdWzJdO2Vsc2UgaWYoTCYmImRyYXdjaXJjbGUiPT09QSl7ei50eXBlPSJjaXJjbGUiO3ZhciBPPUxbc11bMV0sRD1MW2xdWzFdLFI9TFtjXVsxXSxGPUxbdV1bMV0sQj1MW3NdWzJdLE49TFtsXVsyXSxqPUxbY11bMl0sVT1MW3VdWzJdLFY9di54YXhpcyYmKCJkYXRlIj09PXYueGF4aXMudHlwZXx8ImxvZyI9PT12LnhheGlzLnR5cGUpLHE9di55YXhpcyYmKCJkYXRlIj09PXYueWF4aXMudHlwZXx8ImxvZyI9PT12LnlheGlzLnR5cGUpO1YmJihPPWcodi54YXhpcyxPKSxEPWcodi54YXhpcyxEKSxSPWcodi54YXhpcyxSKSxGPWcodi54YXhpcyxGKSkscSYmKEI9Zyh2LnlheGlzLEIpLE49Zyh2LnlheGlzLE4pLGo9Zyh2LnlheGlzLGopLFU9Zyh2LnlheGlzLFUpKTt2YXIgSD0oRCtGKS8yLEc9KEIraikvMixZPWIoe3gwOkgseTA6Ryx4MTpIKyhGLUQrUi1PKS8yKmgseTE6RysoVS1OK2otQikvMipmfSk7ViYmKFkueDA9ZCh2LnhheGlzLFkueDApLFkueDE9ZCh2LnhheGlzLFkueDEpKSxxJiYoWS55MD1kKHYueWF4aXMsWS55MCksWS55MT1kKHYueWF4aXMsWS55MSkpLHoueDA9WS54MCx6LnkwPVkueTAsei54MT1ZLngxLHoueTE9WS55MX1lbHNlIHoudHlwZT0icGF0aCIsXyYmdyYmZnVuY3Rpb24odCxlLHIpe3ZhciBuPSJkYXRlIj09PWUudHlwZSxpPSJkYXRlIj09PXIudHlwZTtpZighbiYmIWkpcmV0dXJuIHQ7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzx0W2FdLmxlbmd0aDtvKyspZm9yKHZhciBzPTA7cysyPHRbYV1bb10ubGVuZ3RoO3MrPTIpbiYmKHRbYV1bb11bcysxXT10W2FdW29dW3MrMV0ucmVwbGFjZSgiICIsIl8iKSksaSYmKHRbYV1bb11bcysyXT10W2FdW29dW3MrMl0ucmVwbGFjZSgiICIsIl8iKSl9KEksXyx3KSx6LnBhdGg9eChJKSxMPW51bGw7bShvKTtmb3IodmFyIFc9ZS5lZGl0SGVscGVycyxaPShXfHx7fSkubW9kaWZ5SXRlbSxYPVtdLEo9MDtKPFMubGVuZ3RoO0orKyl7dmFyIEs9by5fZnVsbExheW91dC5zaGFwZXNbSl07aWYoWFtKXT1LLl9pbnB1dCx2b2lkIDAhPT1NJiZKPT09by5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleCl7dmFyIFE9ejtzd2l0Y2goSy50eXBlKXtjYXNlImxpbmUiOmNhc2UicmVjdCI6Y2FzZSJjaXJjbGUiOlooIngwIixRLngwKSxaKCJ4MSIsUS54MSksWigieTAiLFEueTApLFooInkxIixRLnkxKTticmVhaztjYXNlInBhdGgiOlooInBhdGgiLFEucGF0aCl9fX1yZXR1cm4gdm9pZCAwPT09TT8oWC5wdXNoKHopLFgpOlc/Vy5nZXRVcGRhdGVPYmooKTp7fX19fX0seyIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiOjgwOSwiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hlbHBlcnMiOjgxMCwiLi4vLi4vZHJhZ2VsZW1lbnQvaGVscGVycyI6NjMzLCIuL2NvbnN0YW50cyI6Njk4LCIuL2hlbHBlcnMiOjcwMX1dLDcwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vbGliIik7ci5yYW5nZVRvU2hhcGVQb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4ibG9nIj09PXQudHlwZT90LnIyZDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuc2hhcGVQb3NpdGlvblRvUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuImxvZyI9PT10LnR5cGU/dC5kMnI6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxyLmRlY29kZURhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UmJihlPWUucmVwbGFjZSgiXyIsIiAiKSksdChlKX19LHIuZW5jb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkucmVwbGFjZSgiICIsIl8iKX19LHIuZXh0cmFjdFBhdGhDb29yZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtyZXR1cm4gdC5tYXRjaChuLnNlZ21lbnRSRSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGE9ZVt0LmNoYXJBdCgwKV0uZHJhd247aWYodm9pZCAwIT09YSl7dmFyIG89dC5zdWJzdHIoMSkubWF0Y2gobi5wYXJhbVJFKTshb3x8by5sZW5ndGg8YXx8ci5wdXNoKGkuY2xlYW5OdW1iZXIob1thXSkpfX0pKSxyfSxyLmdldERhdGFUb1BpeGVsPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhLG89dC5fZnVsbExheW91dC5fc2l6ZTtpZihlKWlmKCJkb21haW4iPT09aSlhPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9sZW5ndGgqKG4/MS10OnQpK2UuX29mZnNldH07ZWxzZXt2YXIgcz1yLnNoYXBlUG9zaXRpb25Ub1JhbmdlKGUpO2E9ZnVuY3Rpb24odCl7cmV0dXJuIGUuX29mZnNldCtlLnIycChzKHQsITApKX0sImRhdGUiPT09ZS50eXBlJiYoYT1yLmRlY29kZURhdGUoYSkpfWVsc2UgYT1uP2Z1bmN0aW9uKHQpe3JldHVybiBvLnQrby5oKigxLXQpfTpmdW5jdGlvbih0KXtyZXR1cm4gby5sK28udyp0fTtyZXR1cm4gYX0sci5nZXRQaXhlbFRvRGF0YT1mdW5jdGlvbih0LGUsbixpKXt2YXIgYSxvPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSlpZigiZG9tYWluIj09PWkpYT1mdW5jdGlvbih0KXt2YXIgcj0odC1lLl9vZmZzZXQpL2UuX2xlbmd0aDtyZXR1cm4gbj8xLXI6cn07ZWxzZXt2YXIgcz1yLnJhbmdlVG9TaGFwZVBvc2l0aW9uKGUpO2E9ZnVuY3Rpb24odCl7cmV0dXJuIHMoZS5wMnIodC1lLl9vZmZzZXQpKX19ZWxzZSBhPW4/ZnVuY3Rpb24odCl7cmV0dXJuIDEtKHQtby50KS9vLmh9OmZ1bmN0aW9uKHQpe3JldHVybih0LW8ubCkvby53fTtyZXR1cm4gYX0sci5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj0xPT09TWF0aC5yb3VuZChlJTIpLG49TWF0aC5yb3VuZCh0KTtyZXR1cm4gcj9uKy41Om59LHIubWFrZU9wdGlvbnNBbmRQbG90aW5mbz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuc2hhcGVzW2VdfHx7fSxuPXQuX2Z1bGxMYXlvdXQuX3Bsb3RzW3IueHJlZityLnlyZWZdO3JldHVybiEhbj9uLl9oYWRQbG90aW5mbz0hMDoobj17fSxyLnhyZWYmJiJwYXBlciIhPT1yLnhyZWYmJihuLnhheGlzPXQuX2Z1bGxMYXlvdXRbci54cmVmKyJheGlzIl0pLHIueXJlZiYmInBhcGVyIiE9PXIueXJlZiYmKG4ueWF4aXM9dC5fZnVsbExheW91dFtyLnlyZWYrImF4aXMiXSkpLG4ueHNpemVtb2RlPXIueHNpemVtb2RlLG4ueXNpemVtb2RlPXIueXNpemVtb2RlLG4ueGFuY2hvcj1yLnhhbmNob3Isbi55YW5jaG9yPXIueWFuY2hvcix7b3B0aW9uczpyLHBsb3RpbmZvOm59fX0seyIuLi8uLi9saWIiOjc1MCwiLi9jb25zdGFudHMiOjY5NH1dLDcwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RyYXciKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToic2hhcGVzIixsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlEcmF3TmV3U2hhcGVEZWZhdWx0czp0KCIuL2RyYXdfbmV3c2hhcGUvZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyIpKCJzaGFwZXMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3Om4uZHJhdyxkcmF3T25lOm4uZHJhd09uZX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyI6ODExLCIuL2F0dHJpYnV0ZXMiOjY5MiwiLi9jYWxjX2F1dG9yYW5nZSI6NjkzLCIuL2RlZmF1bHRzIjo2OTUsIi4vZHJhdyI6Njk2LCIuL2RyYXdfbmV3c2hhcGUvZGVmYXVsdHMiOjY5OX1dLDcwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRGVlcEFsbCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksYz10KCIuL2NvbnN0YW50cyIpLHU9bCgic3RlcCIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LG1ldGhvZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVzdHlsZSIsInJlbGF5b3V0IiwiYW5pbWF0ZSIsInVwZGF0ZSIsInNraXAiXSxkZmx0OiJyZXN0eWxlIn0sYXJnczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In1dfSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIn0sdmFsdWU6e3ZhbFR5cGU6InN0cmluZyJ9LGV4ZWN1dGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSk7ZS5leHBvcnRzPW8obCgic2xpZGVyIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sYWN0aXZlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sc3RlcHM6dSxsZW5tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmFjdGlvbiIsInBpeGVscyJdLGRmbHQ6ImZyYWN0aW9uIn0sbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDowfSxwYWQ6YShpKHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLHt9LHt0OntkZmx0OjIwfX0pLHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDowfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIn0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxNTB9LGVhc2luZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMudHJhbnNpdGlvbi5lYXNpbmcudmFsdWVzLGRmbHQ6ImN1YmljLWluLW91dCJ9fSxjdXJyZW50dmFsdWU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQifSxvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMH0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmcifSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyJ9LGZvbnQ6bih7fSl9LGZvbnQ6bih7fSksYWN0aXZlYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy5ncmlwQmdBY3RpdmVDb2xvcn0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Yy5yYWlsQmdDb2xvcn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMucmFpbEJvcmRlckNvbG9yfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMucmFpbEJvcmRlcldpZHRofSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy50aWNrTGVuZ3RofSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMudGlja0NvbG9yfSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxtaW5vcnRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLm1pbm9yVGlja0xlbmd0aH19KSwiYXJyYXlkcmF3IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3ODEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi4vLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc5MywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4MjcsIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIjo4NjEsIi4vY29uc3RhbnRzIjo3MDZ9XSw3MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtuYW1lOiJzbGlkZXJzIixjb250YWluZXJDbGFzc05hbWU6InNsaWRlci1jb250YWluZXIiLGdyb3VwQ2xhc3NOYW1lOiJzbGlkZXItZ3JvdXAiLGlucHV0QXJlYUNsYXNzOiJzbGlkZXItaW5wdXQtYXJlYSIscmFpbFJlY3RDbGFzczoic2xpZGVyLXJhaWwtcmVjdCIscmFpbFRvdWNoUmVjdENsYXNzOiJzbGlkZXItcmFpbC10b3VjaC1yZWN0IixncmlwUmVjdENsYXNzOiJzbGlkZXItZ3JpcC1yZWN0Iix0aWNrUmVjdENsYXNzOiJzbGlkZXItdGljay1yZWN0IixpbnB1dFByb3h5Q2xhc3M6InNsaWRlci1pbnB1dC1wcm94eSIsbGFiZWxzQ2xhc3M6InNsaWRlci1sYWJlbHMiLGxhYmVsR3JvdXBDbGFzczoic2xpZGVyLWxhYmVsLWdyb3VwIixsYWJlbENsYXNzOiJzbGlkZXItbGFiZWwiLGN1cnJlbnRWYWx1ZUNsYXNzOiJzbGlkZXItY3VycmVudC12YWx1ZSIscmFpbEhlaWdodDo1LG1lbnVJbmRleEF0dHJOYW1lOiJzbGlkZXItYWN0aXZlLWluZGV4IixhdXRvTWFyZ2luSWRSb290OiJzbGlkZXItIixtaW5XaWR0aDozMCxtaW5IZWlnaHQ6MzAsdGV4dFBhZFg6NDAsYXJyb3dPZmZzZXRYOjQscmFpbFJhZGl1czoyLHJhaWxXaWR0aDo1LHJhaWxCb3JkZXI6NCxyYWlsQm9yZGVyV2lkdGg6MSxyYWlsQm9yZGVyQ29sb3I6IiNiZWM4ZDkiLHJhaWxCZ0NvbG9yOiIjZjhmYWZjIixyYWlsSW5zZXQ6OCxzdGVwSW5zZXQ6MTAsZ3JpcFJhZGl1czoxMCxncmlwV2lkdGg6MjAsZ3JpcEhlaWdodDoyMCxncmlwQm9yZGVyOjIwLGdyaXBCb3JkZXJXaWR0aDoxLGdyaXBCb3JkZXJDb2xvcjoiI2JlYzhkOSIsZ3JpcEJnQ29sb3I6IiNmNmY4ZmEiLGdyaXBCZ0FjdGl2ZUNvbG9yOiIjZGJkZGUwIixsYWJlbFBhZGRpbmc6OCxsYWJlbE9mZnNldDowLHRpY2tXaWR0aDoxLHRpY2tDb2xvcjoiIzMzMyIsdGlja09mZnNldDoyNSx0aWNrTGVuZ3RoOjcsbWlub3JUaWNrT2Zmc2V0OjI1LG1pbm9yVGlja0NvbG9yOiIjMzMzIixtaW5vclRpY2tMZW5ndGg6NCxjdXJyZW50VmFsdWVQYWRkaW5nOjgsY3VycmVudFZhbHVlSW5zZXQ6MH19LHt9XSw3MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9jb25zdGFudHMiKS5uYW1lLHM9YS5zdGVwcztmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9Zm9yKHZhciBzPWkodCxlLHtuYW1lOiJzdGVwcyIsaGFuZGxlSXRlbURlZmF1bHRzOmN9KSxsPTAsdT0wO3U8cy5sZW5ndGg7dSsrKXNbdV0udmlzaWJsZSYmbCsrO2lmKGw8Mj9lLnZpc2libGU9ITE6bygidmlzaWJsZSIpKXtlLl9zdGVwQ291bnQ9bDt2YXIgaD1lLl92aXNpYmxlU3RlcHM9bi5maWx0ZXJWaXNpYmxlKHMpOyhzW28oImFjdGl2ZSIpXXx8e30pLnZpc2libGV8fChlLmFjdGl2ZT1oWzBdLl9pbmRleCksbygieCIpLG8oInkiKSxuLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSxvKCJ4YW5jaG9yIiksbygieWFuY2hvciIpLG8oImxlbiIpLG8oImxlbm1vZGUiKSxvKCJwYWQudCIpLG8oInBhZC5yIiksbygicGFkLmIiKSxvKCJwYWQubCIpLG4uY29lcmNlRm9udChvLCJmb250IixyLmZvbnQpLG8oImN1cnJlbnR2YWx1ZS52aXNpYmxlIikmJihvKCJjdXJyZW50dmFsdWUueGFuY2hvciIpLG8oImN1cnJlbnR2YWx1ZS5wcmVmaXgiKSxvKCJjdXJyZW50dmFsdWUuc3VmZml4IiksbygiY3VycmVudHZhbHVlLm9mZnNldCIpLG4uY29lcmNlRm9udChvLCJjdXJyZW50dmFsdWUuZm9udCIsZS5mb250KSksbygidHJhbnNpdGlvbi5kdXJhdGlvbiIpLG8oInRyYW5zaXRpb24uZWFzaW5nIiksbygiYmdjb2xvciIpLG8oImFjdGl2ZWJnY29sb3IiKSxvKCJib3JkZXJjb2xvciIpLG8oImJvcmRlcndpZHRoIiksbygidGlja2xlbiIpLG8oInRpY2t3aWR0aCIpLG8oInRpY2tjb2xvciIpLG8oIm1pbm9ydGlja2xlbiIpfX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWlmKCJza2lwIj09PXQubWV0aG9kfHxBcnJheS5pc0FycmF5KHQuYXJncyk/cigidmlzaWJsZSIpOmUudmlzaWJsZT0hMSl7cigibWV0aG9kIikscigiYXJncyIpO3ZhciBpPXIoImxhYmVsIiwic3RlcC0iK2UuX2luZGV4KTtyKCJ2YWx1ZSIsaSkscigiZXhlY3V0ZSIpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSx7bmFtZTpvLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc5NCwiLi9hdHRyaWJ1dGVzIjo3MDUsIi4vY29uc3RhbnRzIjo3MDZ9XSw3MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi9jb2xvciIpLG89dCgiLi4vZHJhd2luZyIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcix1PXQoIi4vY29uc3RhbnRzIiksaD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IiksZj1oLkxJTkVfU1BBQ0lORyxwPWguRlJPTV9UTCxkPWguRlJPTV9CUjtmdW5jdGlvbiBnKHQpe3JldHVybiB1LmF1dG9NYXJnaW5JZFJvb3QrdC5faW5kZXh9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5faW5kZXh9ZnVuY3Rpb24gdih0LGUpe3ZhciByPW8udGVzdGVyLnNlbGVjdEFsbCgiZy4iK3UubGFiZWxHcm91cENsYXNzKS5kYXRhKGUuX3Zpc2libGVTdGVwcyk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodS5sYWJlbEdyb3VwQ2xhc3MsITApO3ZhciBhPTAsYz0wO3IuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9YihuLnNlbGVjdCh0aGlzKSx7c3RlcDp0fSxlKS5ub2RlKCk7aWYocil7dmFyIGk9by5iQm94KHIpO2M9TWF0aC5tYXgoYyxpLmhlaWdodCksYT1NYXRoLm1heChhLGkud2lkdGgpfX0pKSxyLnJlbW92ZSgpO3ZhciBoPWUuX2RpbXM9e307aC5pbnB1dEFyZWFXaWR0aD1NYXRoLm1heCh1LnJhaWxXaWR0aCx1LmdyaXBIZWlnaHQpO3ZhciBmPXQuX2Z1bGxMYXlvdXQuX3NpemU7aC5seD1mLmwrZi53KmUueCxoLmx5PWYudCtmLmgqKDEtZS55KSwiZnJhY3Rpb24iPT09ZS5sZW5tb2RlP2gub3V0ZXJMZW5ndGg9TWF0aC5yb3VuZChmLncqZS5sZW4pOmgub3V0ZXJMZW5ndGg9ZS5sZW4saC5pbnB1dEFyZWFTdGFydD0wLGguaW5wdXRBcmVhTGVuZ3RoPU1hdGgucm91bmQoaC5vdXRlckxlbmd0aC1lLnBhZC5sLWUucGFkLnIpO3ZhciBtPShoLmlucHV0QXJlYUxlbmd0aC0yKnUuc3RlcEluc2V0KS8oZS5fc3RlcENvdW50LTEpLHY9YSt1LmxhYmVsUGFkZGluZztpZihoLmxhYmVsU3RyaWRlPU1hdGgubWF4KDEsTWF0aC5jZWlsKHYvbSkpLGgubGFiZWxIZWlnaHQ9YyxoLmN1cnJlbnRWYWx1ZU1heFdpZHRoPTAsaC5jdXJyZW50VmFsdWVIZWlnaHQ9MCxoLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0PTAsaC5jdXJyZW50VmFsdWVNYXhMaW5lcz0xLGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciB4PW8udGVzdGVyLmFwcGVuZCgiZyIpO3IuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9eSh4LGUsdC5sYWJlbCksbj1yLm5vZGUoKSYmby5iQm94KHIubm9kZSgpKXx8e3dpZHRoOjAsaGVpZ2h0OjB9LGk9bC5saW5lQ291bnQocik7aC5jdXJyZW50VmFsdWVNYXhXaWR0aD1NYXRoLm1heChoLmN1cnJlbnRWYWx1ZU1heFdpZHRoLE1hdGguY2VpbChuLndpZHRoKSksaC5jdXJyZW50VmFsdWVIZWlnaHQ9TWF0aC5tYXgoaC5jdXJyZW50VmFsdWVIZWlnaHQsTWF0aC5jZWlsKG4uaGVpZ2h0KSksaC5jdXJyZW50VmFsdWVNYXhMaW5lcz1NYXRoLm1heChoLmN1cnJlbnRWYWx1ZU1heExpbmVzLGkpfSkpLGguY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9aC5jdXJyZW50VmFsdWVIZWlnaHQrZS5jdXJyZW50dmFsdWUub2Zmc2V0LHgucmVtb3ZlKCl9aC5oZWlnaHQ9aC5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCt1LnRpY2tPZmZzZXQrZS50aWNrbGVuK3UubGFiZWxPZmZzZXQraC5sYWJlbEhlaWdodCtlLnBhZC50K2UucGFkLmI7dmFyIF89ImxlZnQiO3MuaXNSaWdodEFuY2hvcihlKSYmKGgubHgtPWgub3V0ZXJMZW5ndGgsXz0icmlnaHQiKSxzLmlzQ2VudGVyQW5jaG9yKGUpJiYoaC5seC09aC5vdXRlckxlbmd0aC8yLF89ImNlbnRlciIpO3ZhciB3PSJ0b3AiO3MuaXNCb3R0b21BbmNob3IoZSkmJihoLmx5LT1oLmhlaWdodCx3PSJib3R0b20iKSxzLmlzTWlkZGxlQW5jaG9yKGUpJiYoaC5seS09aC5oZWlnaHQvMix3PSJtaWRkbGUiKSxoLm91dGVyTGVuZ3RoPU1hdGguY2VpbChoLm91dGVyTGVuZ3RoKSxoLmhlaWdodD1NYXRoLmNlaWwoaC5oZWlnaHQpLGgubHg9TWF0aC5yb3VuZChoLmx4KSxoLmx5PU1hdGgucm91bmQoaC5seSk7dmFyIFQ9e3k6ZS55LGI6aC5oZWlnaHQqZFt3XSx0OmguaGVpZ2h0KnBbd119OyJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/KFQubD0wLFQueGw9ZS54LWUubGVuKnBbX10sVC5yPTAsVC54cj1lLngrZS5sZW4qZFtfXSk6KFQueD1lLngsVC5sPWgub3V0ZXJMZW5ndGgqcFtfXSxULnI9aC5vdXRlckxlbmd0aCpkW19dKSxpLmF1dG9NYXJnaW4odCxnKGUpLFQpfWZ1bmN0aW9uIHkodCxlLHIpe2lmKGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciBuLGksYT1lLl9kaW1zO3N3aXRjaChlLmN1cnJlbnR2YWx1ZS54YW5jaG9yKXtjYXNlInJpZ2h0IjpuPWEuaW5wdXRBcmVhTGVuZ3RoLXUuY3VycmVudFZhbHVlSW5zZXQtYS5jdXJyZW50VmFsdWVNYXhXaWR0aCxpPSJsZWZ0IjticmVhaztjYXNlImNlbnRlciI6bj0uNSphLmlucHV0QXJlYUxlbmd0aCxpPSJtaWRkbGUiO2JyZWFrO2RlZmF1bHQ6bj11LmN1cnJlbnRWYWx1ZUluc2V0LGk9ImxlZnQifXZhciBjPXMuZW5zdXJlU2luZ2xlKHQsInRleHQiLHUubGFiZWxDbGFzcywoZnVuY3Rpb24odCl7dC5hdHRyKHsidGV4dC1hbmNob3IiOmksImRhdGEtbm90ZXgiOjF9KX0pKSxoPWUuY3VycmVudHZhbHVlLnByZWZpeD9lLmN1cnJlbnR2YWx1ZS5wcmVmaXg6IiI7aWYoInN0cmluZyI9PXR5cGVvZiByKWgrPXI7ZWxzZXt2YXIgcD1lLnN0ZXBzW2UuYWN0aXZlXS5sYWJlbCxkPWUuX2dkLl9mdWxsTGF5b3V0Ll9tZXRhO2QmJihwPXMudGVtcGxhdGVTdHJpbmcocCxkKSksaCs9cH1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgmJihoKz1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgpLGMuY2FsbChvLmZvbnQsZS5jdXJyZW50dmFsdWUuZm9udCkudGV4dChoKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLGUuX2dkKTt2YXIgZz1sLmxpbmVDb3VudChjKSxtPShhLmN1cnJlbnRWYWx1ZU1heExpbmVzKzEtZykqZS5jdXJyZW50dmFsdWUuZm9udC5zaXplKmY7cmV0dXJuIGwucG9zaXRpb25UZXh0KGMsbixtKSxjfX1mdW5jdGlvbiB4KHQsZSxyKXtzLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iix1LmdyaXBSZWN0Q2xhc3MsKGZ1bmN0aW9uKG4pe24uY2FsbChrLGUsdCxyKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKS5hdHRyKHt3aWR0aDp1LmdyaXBXaWR0aCxoZWlnaHQ6dS5ncmlwSGVpZ2h0LHJ4OnUuZ3JpcFJhZGl1cyxyeTp1LmdyaXBSYWRpdXN9KS5jYWxsKGEuc3Ryb2tlLHIuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLHIuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsci5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj1zLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0Iix1LmxhYmVsQ2xhc3MsKGZ1bmN0aW9uKHQpe3QuYXR0cih7InRleHQtYW5jaG9yIjoibWlkZGxlIiwiZGF0YS1ub3RleCI6MX0pfSkpLGk9ZS5zdGVwLmxhYmVsLGE9ci5fZ2QuX2Z1bGxMYXlvdXQuX21ldGE7cmV0dXJuIGEmJihpPXMudGVtcGxhdGVTdHJpbmcoaSxhKSksbi5jYWxsKG8uZm9udCxyLmZvbnQpLnRleHQoaSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyLl9nZCksbn1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9cy5lbnN1cmVTaW5nbGUodCwiZyIsdS5sYWJlbHNDbGFzcyksaT1lLl9kaW1zLGE9ci5zZWxlY3RBbGwoImcuIit1LmxhYmVsR3JvdXBDbGFzcykuZGF0YShpLmxhYmVsU3RlcHMpO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHUubGFiZWxHcm91cENsYXNzLCEwKSxhLmV4aXQoKS5yZW1vdmUoKSxhLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO3IuY2FsbChiLHQsZSksby5zZXRUcmFuc2xhdGUocixTKGUsdC5mcmFjdGlvbiksdS50aWNrT2Zmc2V0K2UudGlja2xlbitlLmZvbnQuc2l6ZSpmK3UubGFiZWxPZmZzZXQraS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9KSl9ZnVuY3Rpb24gdyh0LGUscixuLGkpe3ZhciBhPU1hdGgucm91bmQobiooci5fc3RlcENvdW50LTEpKSxvPXIuX3Zpc2libGVTdGVwc1thXS5faW5kZXg7byE9PXIuYWN0aXZlJiZUKHQsZSxyLG8sITAsaSl9ZnVuY3Rpb24gVCh0LGUscixuLGEsbyl7dmFyIHM9ci5hY3RpdmU7ci5hY3RpdmU9bixjKHQubGF5b3V0LHUubmFtZSxyKS5hcHBseVVwZGF0ZSgiYWN0aXZlIixuKTt2YXIgbD1yLnN0ZXBzW3IuYWN0aXZlXTtlLmNhbGwoQSxyLG8pLGUuY2FsbCh5LHIpLHQuZW1pdCgicGxvdGx5X3NsaWRlcmNoYW5nZSIse3NsaWRlcjpyLHN0ZXA6ci5zdGVwc1tyLmFjdGl2ZV0saW50ZXJhY3Rpb246YSxwcmV2aW91c0FjdGl2ZTpzfSksbCYmbC5tZXRob2QmJmEmJihlLl9uZXh0TWV0aG9kPyhlLl9uZXh0TWV0aG9kLnN0ZXA9bCxlLl9uZXh0TWV0aG9kLmRvQ2FsbGJhY2s9YSxlLl9uZXh0TWV0aG9kLmRvVHJhbnNpdGlvbj1vKTooZS5fbmV4dE1ldGhvZD17c3RlcDpsLGRvQ2FsbGJhY2s6YSxkb1RyYW5zaXRpb246b30sZS5fbmV4dE1ldGhvZFJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe3ZhciByPWUuX25leHRNZXRob2Quc3RlcDtyLm1ldGhvZCYmKHIuZXhlY3V0ZSYmaS5leGVjdXRlQVBJQ29tbWFuZCh0LHIubWV0aG9kLHIuYXJncyksZS5fbmV4dE1ldGhvZD1udWxsLGUuX25leHRNZXRob2RSYWY9bnVsbCl9KSkpKX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgaT1yLm5vZGUoKSxvPW4uc2VsZWN0KGUpO2Z1bmN0aW9uIHMoKXtyZXR1cm4gci5kYXRhKClbMF19dC5vbigibW91c2Vkb3duIiwoZnVuY3Rpb24oKXt2YXIgdD1zKCk7ZS5lbWl0KCJwbG90bHlfc2xpZGVyc3RhcnQiLHtzbGlkZXI6dH0pO3ZhciBsPXIuc2VsZWN0KCIuIit1LmdyaXBSZWN0Q2xhc3MpO24uZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksbi5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLGwuY2FsbChhLmZpbGwsdC5hY3RpdmViZ2NvbG9yKTt2YXIgYz1FKHQsbi5tb3VzZShpKVswXSk7dyhlLHIsdCxjLCEwKSx0Ll9kcmFnZ2luZz0hMCxvLm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbigpe3ZhciB0PXMoKSxhPUUodCxuLm1vdXNlKGkpWzBdKTt3KGUscix0LGEsITEpfSkpLG8ub24oIm1vdXNldXAiLChmdW5jdGlvbigpe3ZhciB0PXMoKTt0Ll9kcmFnZ2luZz0hMSxsLmNhbGwoYS5maWxsLHQuYmdjb2xvciksby5vbigibW91c2V1cCIsbnVsbCksby5vbigibW91c2Vtb3ZlIixudWxsKSxlLmVtaXQoInBsb3RseV9zbGlkZXJlbmQiLHtzbGlkZXI6dCxzdGVwOnQuc3RlcHNbdC5hY3RpdmVdfSl9KSl9KSl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPXQuc2VsZWN0QWxsKCJyZWN0LiIrdS50aWNrUmVjdENsYXNzKS5kYXRhKGUuX3Zpc2libGVTdGVwcyksaT1lLl9kaW1zO3IuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKHUudGlja1JlY3RDbGFzcywhMCksci5leGl0KCkucmVtb3ZlKCksci5hdHRyKHt3aWR0aDplLnRpY2t3aWR0aCsicHgiLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLHIuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgcz1yJWkubGFiZWxTdHJpZGU9PTAsbD1uLnNlbGVjdCh0aGlzKTtsLmF0dHIoe2hlaWdodDpzP2UudGlja2xlbjplLm1pbm9ydGlja2xlbn0pLmNhbGwoYS5maWxsLGUudGlja2NvbG9yKSxvLnNldFRyYW5zbGF0ZShsLFMoZSxyLyhlLl9zdGVwQ291bnQtMSkpLS41KmUudGlja3dpZHRoLChzP3UudGlja09mZnNldDp1Lm1pbm9yVGlja09mZnNldCkraS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9KSl9ZnVuY3Rpb24gQSh0LGUscil7Zm9yKHZhciBuPXQuc2VsZWN0KCJyZWN0LiIrdS5ncmlwUmVjdENsYXNzKSxpPTAsYT0wO2E8ZS5fc3RlcENvdW50O2ErKylpZihlLl92aXNpYmxlU3RlcHNbYV0uX2luZGV4PT09ZS5hY3RpdmUpe2k9YTticmVha312YXIgbz1TKGUsaS8oZS5fc3RlcENvdW50LTEpKTtpZighZS5faW52b2tpbmdDb21tYW5kKXt2YXIgcz1uO3ImJmUudHJhbnNpdGlvbi5kdXJhdGlvbj4wJiYocz1zLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlLnRyYW5zaXRpb24uZHVyYXRpb24pLmVhc2UoZS50cmFuc2l0aW9uLmVhc2luZykpLHMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG8tLjUqdS5ncmlwV2lkdGgpKyIsIitlLl9kaW1zLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KyIpIil9fWZ1bmN0aW9uIFModCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiByLmlucHV0QXJlYVN0YXJ0K3Uuc3RlcEluc2V0KyhyLmlucHV0QXJlYUxlbmd0aC0yKnUuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKGUtdS5zdGVwSW5zZXQtci5pbnB1dEFyZWFTdGFydCkvKHIuaW5wdXRBcmVhTGVuZ3RoLTIqdS5zdGVwSW5zZXQtMipyLmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuPXIuX2RpbXMsaT1zLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iix1LnJhaWxUb3VjaFJlY3RDbGFzcywoZnVuY3Rpb24obil7bi5jYWxsKGssZSx0LHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpO2kuYXR0cih7d2lkdGg6bi5pbnB1dEFyZWFMZW5ndGgsaGVpZ2h0Ok1hdGgubWF4KG4uaW5wdXRBcmVhV2lkdGgsdS50aWNrT2Zmc2V0K3IudGlja2xlbituLmxhYmVsSGVpZ2h0KX0pLmNhbGwoYS5maWxsLHIuYmdjb2xvcikuYXR0cigib3BhY2l0eSIsMCksby5zZXRUcmFuc2xhdGUoaSwwLG4uY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWZ1bmN0aW9uIEwodCxlKXt2YXIgcj1lLl9kaW1zLG49ci5pbnB1dEFyZWFMZW5ndGgtMip1LnJhaWxJbnNldCxpPXMuZW5zdXJlU2luZ2xlKHQsInJlY3QiLHUucmFpbFJlY3RDbGFzcyk7aS5hdHRyKHt3aWR0aDpuLGhlaWdodDp1LnJhaWxXaWR0aCxyeDp1LnJhaWxSYWRpdXMscnk6dS5yYWlsUmFkaXVzLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpLG8uc2V0VHJhbnNsYXRlKGksdS5yYWlsSW5zZXQsLjUqKHIuaW5wdXRBcmVhV2lkdGgtdS5yYWlsV2lkdGgpK3IuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFt1Lm5hbWVdLG49W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2EudmlzaWJsZSYmKGEuX2dkPWUsbi5wdXNoKGEpKX1yZXR1cm4gbn0oZSx0KSxhPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIit1LmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7ZnVuY3Rpb24gcyhlKXtlLl9jb21tYW5kT2JzZXJ2ZXImJihlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZGVsZXRlIGUuX2NvbW1hbmRPYnNlcnZlciksaS5hdXRvTWFyZ2luKHQsZyhlKSl9aWYoYS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodS5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKSxhLmV4aXQoKS5lYWNoKChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK3UuZ3JvdXBDbGFzc05hbWUpLmVhY2gocyl9KSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgbD1hLnNlbGVjdEFsbCgiZy4iK3UuZ3JvdXBDbGFzc05hbWUpLmRhdGEocixtKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh1Lmdyb3VwQ2xhc3NOYW1lLCEwKSxsLmV4aXQoKS5lYWNoKHMpLnJlbW92ZSgpO2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgaD1yW2NdO3YodCxoKX1sLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpOyFmdW5jdGlvbih0KXt2YXIgZT10Ll9kaW1zO2UubGFiZWxTdGVwcz1bXTtmb3IodmFyIHI9dC5fc3RlcENvdW50LG49MDtuPHI7bis9ZS5sYWJlbFN0cmlkZSllLmxhYmVsU3RlcHMucHVzaCh7ZnJhY3Rpb246bi8oci0xKSxzdGVwOnQuX3Zpc2libGVTdGVwc1tuXX0pfShlKSxpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5fdmlzaWJsZVN0ZXBzLChmdW5jdGlvbihlKXt2YXIgbj1yLmRhdGEoKVswXTtuLmFjdGl2ZSE9PWUuaW5kZXgmJihuLl9kcmFnZ2luZ3x8VCh0LHIsbixlLmluZGV4LCExLCEwKSl9KSksZnVuY3Rpb24odCxlLHIpeyhyLnN0ZXBzW3IuYWN0aXZlXXx8e30pLnZpc2libGV8fChyLmFjdGl2ZT1yLl92aXNpYmxlU3RlcHNbMF0uX2luZGV4KTtlLmNhbGwoeSxyKS5jYWxsKEwscikuY2FsbChfLHIpLmNhbGwoTSxyKS5jYWxsKEMsdCxyKS5jYWxsKHgsdCxyKTt2YXIgbj1yLl9kaW1zO28uc2V0VHJhbnNsYXRlKGUsbi5seCtyLnBhZC5sLG4ubHkrci5wYWQudCksZS5jYWxsKEEsciwhMSksZS5jYWxsKHkscil9KHQsbi5zZWxlY3QodGhpcyksZSl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3MTcsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc3NCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6Nzg4LCIuLi8uLi9wbG90cy9wbG90cyI6ODYyLCIuLi9jb2xvciI6NjE1LCIuLi9kcmF3aW5nIjo2MzcsIi4vY29uc3RhbnRzIjo3MDYsZDM6MTY5fV0sNzA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6bi5uYW1lLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6NzA1LCIuL2NvbnN0YW50cyI6NzA2LCIuL2RlZmF1bHRzIjo3MDcsIi4vZHJhdyI6NzA4fV0sNzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uL2RyYXdpbmciKSxjPXQoIi4uL2NvbG9yIiksdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5PUFBPU0lURV9TSURFLHA9LyBbWFldWzAtOV0qIC87ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQsZSxyKXt2YXIgZCxnPXIucHJvcENvbnRhaW5lcixtPXIucHJvcE5hbWUsdj1yLnBsYWNlaG9sZGVyLHk9ci50cmFjZUluZGV4LHg9ci5hdm9pZHx8e30sYj1yLmF0dHJpYnV0ZXMsXz1yLnRyYW5zZm9ybSx3PXIuY29udGFpbmVyR3JvdXAsVD10Ll9mdWxsTGF5b3V0LGs9MSxNPSExLEE9Zy50aXRsZSxTPShBJiZBLnRleHQ/QS50ZXh0OiIiKS50cmltKCksRT1BJiZBLmZvbnQ/QS5mb250Ont9LEM9RS5mYW1pbHksTD1FLnNpemUsUD1FLmNvbG9yOyJ0aXRsZS50ZXh0Ij09PW0/ZD0idGl0bGVUZXh0IjotMSE9PW0uaW5kZXhPZigiYXhpcyIpP2Q9ImF4aXNUaXRsZVRleHQiOm0uaW5kZXhPZighMCkmJihkPSJjb2xvcmJhclRpdGxlVGV4dCIpO3ZhciBJPXQuX2NvbnRleHQuZWRpdHNbZF07IiI9PT1TP2s9MDpTLnJlcGxhY2UocCwiICUgIik9PT12LnJlcGxhY2UocCwiICUgIikmJihrPS4yLE09ITAsSXx8KFM9IiIpKSxyLl9tZXRhP1M9cy50ZW1wbGF0ZVN0cmluZyhTLHIuX21ldGEpOlQuX21ldGEmJihTPXMudGVtcGxhdGVTdHJpbmcoUyxULl9tZXRhKSk7dmFyIHo9U3x8STt3fHwodz1zLmVuc3VyZVNpbmdsZShULl9pbmZvbGF5ZXIsImciLCJnLSIrZSkpO3ZhciBPPXcuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YSh6P1swXTpbXSk7aWYoTy5lbnRlcigpLmFwcGVuZCgidGV4dCIpLE8udGV4dChTKS5hdHRyKCJjbGFzcyIsZSksTy5leGl0KCkucmVtb3ZlKCksIXopcmV0dXJuIHc7ZnVuY3Rpb24gRCh0KXtzLnN5bmNPckFzeW5jKFtSLEZdLHQpfWZ1bmN0aW9uIFIoZSl7dmFyIHI7cmV0dXJuIF8/KHI9IiIsXy5yb3RhdGUmJihyKz0icm90YXRlKCIrW18ucm90YXRlLGIueCxiLnldKyIpIiksXy5vZmZzZXQmJihyKz0idHJhbnNsYXRlKDAsICIrXy5vZmZzZXQrIikiKSk6cj1udWxsLGUuYXR0cigidHJhbnNmb3JtIixyKSxlLnN0eWxlKHsiZm9udC1mYW1pbHkiOkMsImZvbnQtc2l6ZSI6bi5yb3VuZChMLDIpKyJweCIsZmlsbDpjLnJnYihQKSxvcGFjaXR5OmsqYy5vcGFjaXR5KFApLCJmb250LXdlaWdodCI6YS5mb250V2VpZ2h0fSkuYXR0cihiKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBGKHQpe3ZhciBlPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKHgmJnguc2VsZWN0aW9uJiZ4LnNpZGUmJlMpe2UuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgcj1mW3guc2lkZV0sYT0ibGVmdCI9PT14LnNpZGV8fCJ0b3AiPT09eC5zaWRlPy0xOjEsbz1pKHgucGFkKT94LnBhZDoyLGM9bC5iQm94KGUubm9kZSgpKSx1PXtsZWZ0OjAsdG9wOjAscmlnaHQ6VC53aWR0aCxib3R0b206VC5oZWlnaHR9LGg9eC5tYXhTaGlmdHx8YSoodVt4LnNpZGVdLWNbeC5zaWRlXSkscD0wO2lmKGg8MClwPWg7ZWxzZXt2YXIgZD14Lm9mZnNldExlZnR8fDAsZz14Lm9mZnNldFRvcHx8MDtjLmxlZnQtPWQsYy5yaWdodC09ZCxjLnRvcC09ZyxjLmJvdHRvbS09Zyx4LnNlbGVjdGlvbi5lYWNoKChmdW5jdGlvbigpe3ZhciB0PWwuYkJveCh0aGlzKTtzLmJCb3hJbnRlcnNlY3QoYyx0LG8pJiYocD1NYXRoLm1heChwLGEqKHRbeC5zaWRlXS1jW3JdKStvKSl9KSkscD1NYXRoLm1pbihoLHApfWlmKHA+MHx8aDwwKXt2YXIgbT17bGVmdDpbLXAsMF0scmlnaHQ6W3AsMF0sdG9wOlswLC1wXSxib3R0b206WzAscF19W3guc2lkZV07ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIittKyIpIil9fX1yZXR1cm4gTy5jYWxsKEQpLEkmJihTP08ub24oIi5vcGFjaXR5IixudWxsKTooaz0wLE09ITAsTy50ZXh0KHYpLm9uKCJtb3VzZW92ZXIub3BhY2l0eSIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguU0hPV19QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDEpfSkpLm9uKCJtb3VzZW91dC5vcGFjaXR5IiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oaC5ISURFX1BMQUNFSE9MREVSKS5zdHlsZSgib3BhY2l0eSIsMCl9KSkpLE8uY2FsbCh1Lm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKCJlZGl0IiwoZnVuY3Rpb24oZSl7dm9pZCAwIT09eT9vLmNhbGwoIl9ndWlSZXN0eWxlIix0LG0sZSx5KTpvLmNhbGwoIl9ndWlSZWxheW91dCIsdCxtLGUpfSkpLm9uKCJjYW5jZWwiLChmdW5jdGlvbigpe3RoaXMudGV4dCh0aGlzLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKSkuY2FsbChEKX0pKS5vbigiaW5wdXQiLChmdW5jdGlvbih0KXt0aGlzLnRleHQodHx8IiAiKS5jYWxsKHUucG9zaXRpb25UZXh0LGIueCxiLnkpfSkpKSxPLmNsYXNzZWQoImpzLXBsYWNlaG9sZGVyIixNKSx3fX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzE3LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3MjQsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc3NCwiLi4vLi4vcGxvdHMvcGxvdHMiOjg2MiwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vY29sb3IiOjYxNSwiLi4vZHJhd2luZyI6NjM3LGQzOjE2OSwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDcxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPWwoImJ1dHRvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sYXJnczI6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sZXhlY3V0ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19KTtlLmV4cG9ydHM9byhsKCJ1cGRhdGVtZW51Iix7X2FycmF5QXR0clJlZ2V4cHM6Wy9edXBkYXRlbWVudXNcWygwfFsxLTldWzAtOV0rKVxdXC5idXR0b25zL10sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRyb3Bkb3duIiwiYnV0dG9ucyJdLGRmbHQ6ImRyb3Bkb3duIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwicmlnaHQiLCJ1cCIsImRvd24iXSxkZmx0OiJkb3duIn0sYWN0aXZlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDowfSxzaG93YWN0aXZlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxidXR0b25zOmMseDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDotLjA1fSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoicmlnaHQifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjF9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJ0b3AifSxwYWQ6YShzKHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLHt9KSxmb250Om4oe30pLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuYm9yZGVyTGluZX0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifX0pLCJhcnJheWRyYXciLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6Nzg4LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgyNywiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiOjg2MSwiLi4vY29sb3IvYXR0cmlidXRlcyI6NjE0fV0sNzEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToidXBkYXRlbWVudXMiLGNvbnRhaW5lckNsYXNzTmFtZToidXBkYXRlbWVudS1jb250YWluZXIiLGhlYWRlckdyb3VwQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1ncm91cCIsaGVhZGVyQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlciIsaGVhZGVyQXJyb3dDbGFzc05hbWU6InVwZGF0ZW1lbnUtaGVhZGVyLWFycm93Iixkcm9wZG93bkJ1dHRvbkdyb3VwQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbi1ncm91cCIsZHJvcGRvd25CdXR0b25DbGFzc05hbWU6InVwZGF0ZW1lbnUtZHJvcGRvd24tYnV0dG9uIixidXR0b25DbGFzc05hbWU6InVwZGF0ZW1lbnUtYnV0dG9uIixpdGVtUmVjdENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXJlY3QiLGl0ZW1UZXh0Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWl0ZW0tdGV4dCIsbWVudUluZGV4QXR0ck5hbWU6InVwZGF0ZW1lbnUtYWN0aXZlLWluZGV4IixhdXRvTWFyZ2luSWRSb290OiJ1cGRhdGVtZW51LSIsYmxhbmtIZWFkZXJPcHRzOntsYWJlbDoiICAifSxtaW5XaWR0aDozMCxtaW5IZWlnaHQ6MzAsdGV4dFBhZFg6MjQsYXJyb3dQYWRYOjE2LHJ4OjIscnk6Mix0ZXh0T2Zmc2V0WDoxMix0ZXh0T2Zmc2V0WTozLGFycm93T2Zmc2V0WDo0LGdhcEJ1dHRvbkhlYWRlcjo1LGdhcEJ1dHRvbjoyLGFjdGl2ZUNvbG9yOiIjRjRGQUZGIixob3ZlckNvbG9yOiIjRjRGQUZGIixhcnJvd1N5bWJvbDp7bGVmdDoiXHUyNWM0IixyaWdodDoiXHUyNWJhIix1cDoiXHUyNWIyIixkb3duOiJcdTI1YmMifX19LHt9XSw3MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9jb25zdGFudHMiKS5uYW1lLHM9YS5idXR0b25zO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1vKCJ2aXNpYmxlIixpKHQsZSx7bmFtZToiYnV0dG9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmN9KS5sZW5ndGg+MCkmJihvKCJhY3RpdmUiKSxvKCJkaXJlY3Rpb24iKSxvKCJ0eXBlIiksbygic2hvd2FjdGl2ZSIpLG8oIngiKSxvKCJ5Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksbygieGFuY2hvciIpLG8oInlhbmNob3IiKSxvKCJwYWQudCIpLG8oInBhZC5yIiksbygicGFkLmIiKSxvKCJwYWQubCIpLG4uY29lcmNlRm9udChvLCJmb250IixyLmZvbnQpLG8oImJnY29sb3IiLHIucGFwZXJfYmdjb2xvciksbygiYm9yZGVyY29sb3IiKSxvKCJib3JkZXJ3aWR0aCIpKX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfXIoInZpc2libGUiLCJza2lwIj09PXQubWV0aG9kfHxBcnJheS5pc0FycmF5KHQuYXJncykpJiYocigibWV0aG9kIikscigiYXJncyIpLHIoImFyZ3MyIikscigibGFiZWwiKSxyKCJleGVjdXRlIikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLHtuYW1lOm8saGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6Nzk0LCIuL2F0dHJpYnV0ZXMiOjcxMSwiLi9jb25zdGFudHMiOjcxMn1dLDcxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4uL2NvbG9yIiksbz10KCIuLi9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxoPXQoIi4vY29uc3RhbnRzIiksZj10KCIuL3Njcm9sbGJveCIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIHQuX2luZGV4fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4rdC5hdHRyKGgubWVudUluZGV4QXR0ck5hbWUpPT09ZS5faW5kZXh9ZnVuY3Rpb24gZyh0LGUscixuLGksYSxvLHMpe2UuYWN0aXZlPW8sYyh0LmxheW91dCxoLm5hbWUsZSkuYXBwbHlVcGRhdGUoImFjdGl2ZSIsbyksImJ1dHRvbnMiPT09ZS50eXBlP3YodCxuLG51bGwsbnVsbCxlKToiZHJvcGRvd24iPT09ZS50eXBlJiYoaS5hdHRyKGgubWVudUluZGV4QXR0ck5hbWUsIi0xIiksbSh0LG4saSxhLGUpLHN8fHYodCxuLGksYSxlKSl9ZnVuY3Rpb24gbSh0LGUscixuLGkpe3ZhciBhPXMuZW5zdXJlU2luZ2xlKGUsImciLGguaGVhZGVyQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLGw9aS5fZGltcyxjPWkuYWN0aXZlLHU9aS5idXR0b25zW2NdfHxoLmJsYW5rSGVhZGVyT3B0cyxmPXt5OmkucGFkLnQseVBhZDowLHg6aS5wYWQubCx4UGFkOjAsaW5kZXg6MH0scD17d2lkdGg6bC5oZWFkZXJXaWR0aCxoZWlnaHQ6bC5oZWFkZXJIZWlnaHR9O2EuY2FsbCh5LGksdSx0KS5jYWxsKEEsaSxmLHApLHMuZW5zdXJlU2luZ2xlKGUsInRleHQiLGguaGVhZGVyQXJyb3dDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS5jYWxsKG8uZm9udCxpLmZvbnQpLnRleHQoaC5hcnJvd1N5bWJvbFtpLmRpcmVjdGlvbl0pfSkpLmF0dHIoe3g6bC5oZWFkZXJXaWR0aC1oLmFycm93T2Zmc2V0WCtpLnBhZC5sLHk6bC5oZWFkZXJIZWlnaHQvMitoLnRleHRPZmZzZXRZK2kucGFkLnR9KSxhLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7ci5jYWxsKFMsU3RyaW5nKGQocixpKT8tMTppLl9pbmRleCkpLHYodCxlLHIsbixpKX0pKSxhLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe2EuY2FsbCh3KX0pKSxhLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7YS5jYWxsKFQsaSl9KSksby5zZXRUcmFuc2xhdGUoZSxsLmx4LGwubHkpfWZ1bmN0aW9uIHYodCxlLHIsYSxvKXtyfHwocj1lKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpO3ZhciBsPWZ1bmN0aW9uKHQpe3JldHVybi0xPT0rdC5hdHRyKGgubWVudUluZGV4QXR0ck5hbWUpfShyKSYmImJ1dHRvbnMiIT09by50eXBlP1tdOm8uYnV0dG9ucyxjPSJkcm9wZG93biI9PT1vLnR5cGU/aC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZTpoLmJ1dHRvbkNsYXNzTmFtZSx1PXIuc2VsZWN0QWxsKCJnLiIrYykuZGF0YShzLmZpbHRlclZpc2libGUobCkpLGY9dS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoYywhMCkscD11LmV4aXQoKTsiZHJvcGRvd24iPT09by50eXBlPyhmLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIikscC50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjAiKS5yZW1vdmUoKSk6cC5yZW1vdmUoKTt2YXIgZD0wLG09MCx2PW8uX2RpbXMseD0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZihvLmRpcmVjdGlvbik7ImRyb3Bkb3duIj09PW8udHlwZSYmKHg/bT12LmhlYWRlckhlaWdodCtoLmdhcEJ1dHRvbkhlYWRlcjpkPXYuaGVhZGVyV2lkdGgraC5nYXBCdXR0b25IZWFkZXIpLCJkcm9wZG93biI9PT1vLnR5cGUmJiJ1cCI9PT1vLmRpcmVjdGlvbiYmKG09LWguZ2FwQnV0dG9uSGVhZGVyK2guZ2FwQnV0dG9uLXYub3BlbkhlaWdodCksImRyb3Bkb3duIj09PW8udHlwZSYmImxlZnQiPT09by5kaXJlY3Rpb24mJihkPS1oLmdhcEJ1dHRvbkhlYWRlcitoLmdhcEJ1dHRvbi12Lm9wZW5XaWR0aCk7dmFyIGI9e3g6di5seCtkK28ucGFkLmwseTp2Lmx5K20rby5wYWQudCx5UGFkOmguZ2FwQnV0dG9uLHhQYWQ6aC5nYXBCdXR0b24saW5kZXg6MH0saz17bDpiLngrby5ib3JkZXJ3aWR0aCx0OmIueStvLmJvcmRlcndpZHRofTt1LmVhY2goKGZ1bmN0aW9uKHMsbCl7dmFyIGM9bi5zZWxlY3QodGhpcyk7Yy5jYWxsKHksbyxzLHQpLmNhbGwoQSxvLGIpLGMub24oImNsaWNrIiwoZnVuY3Rpb24oKXtuLmV2ZW50LmRlZmF1bHRQcmV2ZW50ZWR8fChzLmV4ZWN1dGUmJihzLmFyZ3MyJiZvLmFjdGl2ZT09PWw/KGcodCxvLDAsZSxyLGEsLTEpLGkuZXhlY3V0ZUFQSUNvbW1hbmQodCxzLm1ldGhvZCxzLmFyZ3MyKSk6KGcodCxvLDAsZSxyLGEsbCksaS5leGVjdXRlQVBJQ29tbWFuZCh0LHMubWV0aG9kLHMuYXJncykpKSx0LmVtaXQoInBsb3RseV9idXR0b25jbGlja2VkIix7bWVudTpvLGJ1dHRvbjpzLGFjdGl2ZTpvLmFjdGl2ZX0pKX0pKSxjLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe2MuY2FsbCh3KX0pKSxjLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7Yy5jYWxsKFQsbyksdS5jYWxsKF8sbyl9KSl9KSksdS5jYWxsKF8sbykseD8oay53PU1hdGgubWF4KHYub3BlbldpZHRoLHYuaGVhZGVyV2lkdGgpLGsuaD1iLnktay50KTooay53PWIueC1rLmwsay5oPU1hdGgubWF4KHYub3BlbkhlaWdodCx2LmhlYWRlckhlaWdodCkpLGsuZGlyZWN0aW9uPW8uZGlyZWN0aW9uLGEmJih1LnNpemUoKT9mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9aS5kaXJlY3Rpb24sdT0idXAiPT09Y3x8ImRvd24iPT09YyxmPWkuX2RpbXMscD1pLmFjdGl2ZTtpZih1KWZvcihzPTAsbD0wO2w8cDtsKyspcys9Zi5oZWlnaHRzW2xdK2guZ2FwQnV0dG9uO2Vsc2UgZm9yKG89MCxsPTA7bDxwO2wrKylvKz1mLndpZHRoc1tsXStoLmdhcEJ1dHRvbjtuLmVuYWJsZShhLG8scyksbi5oYmFyJiZuLmhiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKTtuLnZiYXImJm4udmJhci5hdHRyKCJvcGFjaXR5IiwiMCIpLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMSIpfSgwLDAsMCxhLG8sayk6ZnVuY3Rpb24odCl7dmFyIGU9ISF0LmhiYXIscj0hIXQudmJhcjtlJiZ0LmhiYXIudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSkpO3ImJnQudmJhci50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjAiKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3I9ITEsZXx8dC5kaXNhYmxlKCl9KSl9KGEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3QuY2FsbCh4LGUpLmNhbGwoYixlLHIsbil9ZnVuY3Rpb24geCh0LGUpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGguaXRlbVJlY3RDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7cng6aC5yeCxyeTpoLnJ5LCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGk9cy5lbnN1cmVTaW5nbGUodCwidGV4dCIsaC5pdGVtVGV4dENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHsidGV4dC1hbmNob3IiOiJzdGFydCIsImRhdGEtbm90ZXgiOjF9KX0pKSxhPXIubGFiZWwsYz1uLl9mdWxsTGF5b3V0Ll9tZXRhO2MmJihhPXMudGVtcGxhdGVTdHJpbmcoYSxjKSksaS5jYWxsKG8uZm9udCxlLmZvbnQpLnRleHQoYSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxuKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9ZS5hY3RpdmU7dC5lYWNoKChmdW5jdGlvbih0LGkpe3ZhciBvPW4uc2VsZWN0KHRoaXMpO2k9PT1yJiZlLnNob3dhY3RpdmUmJm8uc2VsZWN0KCJyZWN0LiIraC5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsaC5hY3RpdmVDb2xvcil9KSl9ZnVuY3Rpb24gdyh0KXt0LnNlbGVjdCgicmVjdC4iK2guaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGguaG92ZXJDb2xvcil9ZnVuY3Rpb24gVCh0LGUpe3Quc2VsZWN0KCJyZWN0LiIraC5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9ZS5fZGltcz17d2lkdGgxOjAsaGVpZ2h0MTowLGhlaWdodHM6W10sd2lkdGhzOltdLHRvdGFsV2lkdGg6MCx0b3RhbEhlaWdodDowLG9wZW5XaWR0aDowLG9wZW5IZWlnaHQ6MCxseDowLGx5OjB9LGE9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIraC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkuZGF0YShzLmZpbHRlclZpc2libGUoZS5idXR0b25zKSk7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoaC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSwhMCk7dmFyIGM9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoZS5kaXJlY3Rpb24pO2EuZWFjaCgoZnVuY3Rpb24oaSxhKXt2YXIgcz1uLnNlbGVjdCh0aGlzKTtzLmNhbGwoeSxlLGksdCk7dmFyIGY9cy5zZWxlY3QoIi4iK2guaXRlbVRleHRDbGFzc05hbWUpLHA9Zi5ub2RlKCkmJm8uYkJveChmLm5vZGUoKSkud2lkdGgsZD1NYXRoLm1heChwK2gudGV4dFBhZFgsaC5taW5XaWR0aCksZz1lLmZvbnQuc2l6ZSp1LG09bC5saW5lQ291bnQoZiksdj1NYXRoLm1heChnKm0saC5taW5IZWlnaHQpK2gudGV4dE9mZnNldFk7dj1NYXRoLmNlaWwodiksZD1NYXRoLmNlaWwoZCksci53aWR0aHNbYV09ZCxyLmhlaWdodHNbYV09dixyLmhlaWdodDE9TWF0aC5tYXgoci5oZWlnaHQxLHYpLHIud2lkdGgxPU1hdGgubWF4KHIud2lkdGgxLGQpLGM/KHIudG90YWxXaWR0aD1NYXRoLm1heChyLnRvdGFsV2lkdGgsZCksci5vcGVuV2lkdGg9ci50b3RhbFdpZHRoLHIudG90YWxIZWlnaHQrPXYraC5nYXBCdXR0b24sci5vcGVuSGVpZ2h0Kz12K2guZ2FwQnV0dG9uKTooci50b3RhbFdpZHRoKz1kK2guZ2FwQnV0dG9uLHIub3BlbldpZHRoKz1kK2guZ2FwQnV0dG9uLHIudG90YWxIZWlnaHQ9TWF0aC5tYXgoci50b3RhbEhlaWdodCx2KSxyLm9wZW5IZWlnaHQ9ci50b3RhbEhlaWdodCl9KSksYz9yLnRvdGFsSGVpZ2h0LT1oLmdhcEJ1dHRvbjpyLnRvdGFsV2lkdGgtPWguZ2FwQnV0dG9uLHIuaGVhZGVyV2lkdGg9ci53aWR0aDEraC5hcnJvd1BhZFgsci5oZWFkZXJIZWlnaHQ9ci5oZWlnaHQxLCJkcm9wZG93biI9PT1lLnR5cGUmJihjPyhyLndpZHRoMSs9aC5hcnJvd1BhZFgsci50b3RhbEhlaWdodD1yLmhlaWdodDEpOnIudG90YWxXaWR0aD1yLndpZHRoMSxyLnRvdGFsV2lkdGgrPWguYXJyb3dQYWRYKSxhLnJlbW92ZSgpO3ZhciBmPXIudG90YWxXaWR0aCtlLnBhZC5sK2UucGFkLnIscD1yLnRvdGFsSGVpZ2h0K2UucGFkLnQrZS5wYWQuYixkPXQuX2Z1bGxMYXlvdXQuX3NpemU7ci5seD1kLmwrZC53KmUueCxyLmx5PWQudCtkLmgqKDEtZS55KTt2YXIgZz0ibGVmdCI7cy5pc1JpZ2h0QW5jaG9yKGUpJiYoci5seC09ZixnPSJyaWdodCIpLHMuaXNDZW50ZXJBbmNob3IoZSkmJihyLmx4LT1mLzIsZz0iY2VudGVyIik7dmFyIG09InRvcCI7cy5pc0JvdHRvbUFuY2hvcihlKSYmKHIubHktPXAsbT0iYm90dG9tIikscy5pc01pZGRsZUFuY2hvcihlKSYmKHIubHktPXAvMixtPSJtaWRkbGUiKSxyLnRvdGFsV2lkdGg9TWF0aC5jZWlsKHIudG90YWxXaWR0aCksci50b3RhbEhlaWdodD1NYXRoLmNlaWwoci50b3RhbEhlaWdodCksci5seD1NYXRoLnJvdW5kKHIubHgpLHIubHk9TWF0aC5yb3VuZChyLmx5KSxpLmF1dG9NYXJnaW4odCxNKGUpLHt4OmUueCx5OmUueSxsOmYqKHtyaWdodDoxLGNlbnRlcjouNX1bZ118fDApLHI6Ziooe2xlZnQ6MSxjZW50ZXI6LjV9W2ddfHwwKSxiOnAqKHt0b3A6MSxtaWRkbGU6LjV9W21dfHwwKSx0OnAqKHtib3R0b206MSxtaWRkbGU6LjV9W21dfHwwKX0pfWZ1bmN0aW9uIE0odCl7cmV0dXJuIGguYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiBBKHQsZSxyLG4pe249bnx8e307dmFyIGk9dC5zZWxlY3QoIi4iK2guaXRlbVJlY3RDbGFzc05hbWUpLGE9dC5zZWxlY3QoIi4iK2guaXRlbVRleHRDbGFzc05hbWUpLHM9ZS5ib3JkZXJ3aWR0aCxjPXIuaW5kZXgsZj1lLl9kaW1zO28uc2V0VHJhbnNsYXRlKHQscytyLngscytyLnkpO3ZhciBwPS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKGUuZGlyZWN0aW9uKSxkPW4uaGVpZ2h0fHwocD9mLmhlaWdodHNbY106Zi5oZWlnaHQxKTtpLmF0dHIoe3g6MCx5OjAsd2lkdGg6bi53aWR0aHx8KHA/Zi53aWR0aDE6Zi53aWR0aHNbY10pLGhlaWdodDpkfSk7dmFyIGc9ZS5mb250LnNpemUqdSxtPShsLmxpbmVDb3VudChhKS0xKSpnLzI7bC5wb3NpdGlvblRleHQoYSxoLnRleHRPZmZzZXRYLGQvMi1tK2gudGV4dE9mZnNldFkpLHA/ci55Kz1mLmhlaWdodHNbY10rci55UGFkOnIueCs9Zi53aWR0aHNbY10rci54UGFkLHIuaW5kZXgrK31mdW5jdGlvbiBTKHQsZSl7dC5hdHRyKGgubWVudUluZGV4QXR0ck5hbWUsZXx8Ii0xIikuc2VsZWN0QWxsKCJnLiIraC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkucmVtb3ZlKCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1zLmZpbHRlclZpc2libGUoZVtoLm5hbWVdKTtmdW5jdGlvbiBhKGUpe2kuYXV0b01hcmdpbih0LE0oZSkpfXZhciBvPWUuX21lbnVsYXllci5zZWxlY3RBbGwoImcuIitoLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7aWYoby5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoaC5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJwb2ludGVyIiksby5leGl0KCkuZWFjaCgoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIitoLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5lYWNoKGEpfSkpLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCl7dmFyIGw9by5zZWxlY3RBbGwoImcuIitoLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIscCk7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoaC5oZWFkZXJHcm91cENsYXNzTmFtZSwhMCk7Zm9yKHZhciBjPXMuZW5zdXJlU2luZ2xlKG8sImciLGguZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKSx1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciB5PXJbdV07ayh0LHkpfXZhciB4PSJ1cGRhdGVtZW51cyIrZS5fdWlkLGI9bmV3IGYodCxjLHgpO2wuZW50ZXIoKS5zaXplKCkmJihjLm5vZGUoKS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGMubm9kZSgpKSxjLmNhbGwoUykpLGwuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKHQpe2MuY2FsbChTKSxhKHQpfSkpLnJlbW92ZSgpLGwuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT0iZHJvcGRvd24iPT09ZS50eXBlP2M6bnVsbDtpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5idXR0b25zLChmdW5jdGlvbihuKXtnKHQsZSxlLmJ1dHRvbnNbbi5pbmRleF0scixhLGIsbi5pbmRleCwhMCl9KSksImRyb3Bkb3duIj09PWUudHlwZT8obSh0LHIsYyxiLGUpLGQoYyxlKSYmdih0LHIsYyxiLGUpKTp2KHQscixudWxsLG51bGwsZSl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3MTcsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc3NCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6Nzg4LCIuLi8uLi9wbG90cy9wbG90cyI6ODYyLCIuLi9jb2xvciI6NjE1LCIuLi9kcmF3aW5nIjo2MzcsIi4vY29uc3RhbnRzIjo3MTIsIi4vc2Nyb2xsYm94Ijo3MTYsZDM6MTY5fV0sNzE1OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzcwOV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vYXR0cmlidXRlcyI6NzExLCIuL2NvbnN0YW50cyI6NzEyLCIuL2RlZmF1bHRzIjo3MTMsIi4vZHJhdyI6NzE0LGR1cDo3MDl9XSw3MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXM7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2NvbG9yIiksYT10KCIuLi9kcmF3aW5nIiksbz10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBzKHQsZSxyKXt0aGlzLmdkPXQsdGhpcy5jb250YWluZXI9ZSx0aGlzLmlkPXIsdGhpcy5wb3NpdGlvbj1udWxsLHRoaXMudHJhbnNsYXRlWD1udWxsLHRoaXMudHJhbnNsYXRlWT1udWxsLHRoaXMuaGJhcj1udWxsLHRoaXMudmJhcj1udWxsLHRoaXMuYmc9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJveC1iZyIpLmRhdGEoWzBdKSx0aGlzLmJnLmV4aXQoKS5vbigiLmRyYWciLG51bGwpLm9uKCJ3aGVlbCIsbnVsbCkucmVtb3ZlKCksdGhpcy5iZy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJveC1iZyIsITApLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoe29wYWNpdHk6MCx4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9KX1zLmJhcldpZHRoPTIscy5iYXJMZW5ndGg9MjAscy5iYXJSYWRpdXM9MixzLmJhclBhZD0xLHMuYmFyQ29sb3I9IiM4MDhCQTQiLHMucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIG89dGhpcy5nZC5fZnVsbExheW91dCxsPW8ud2lkdGgsYz1vLmhlaWdodDt0aGlzLnBvc2l0aW9uPXQ7dmFyIHUsaCxmLHAsZD10aGlzLnBvc2l0aW9uLmwsZz10aGlzLnBvc2l0aW9uLncsbT10aGlzLnBvc2l0aW9uLnQsdj10aGlzLnBvc2l0aW9uLmgseT10aGlzLnBvc2l0aW9uLmRpcmVjdGlvbix4PSJkb3duIj09PXksYj0ibGVmdCI9PT15LF89InVwIj09PXksdz1nLFQ9djt4fHxifHwicmlnaHQiPT09eXx8X3x8KHRoaXMucG9zaXRpb24uZGlyZWN0aW9uPSJkb3duIix4PSEwKSx4fHxfPyhoPSh1PWQpK3cseD8oZj1tLFQ9KHA9TWF0aC5taW4oZitULGMpKS1mKTpUPShwPW0rVCktKGY9TWF0aC5tYXgocC1ULDApKSk6KHA9KGY9bSkrVCxiP3c9KGg9ZCt3KS0odT1NYXRoLm1heChoLXcsMCkpOih1PWQsdz0oaD1NYXRoLm1pbih1K3csbCkpLXUpKSx0aGlzLl9ib3g9e2w6dSx0OmYsdzp3LGg6VH07dmFyIGs9Zz53LE09cy5iYXJMZW5ndGgrMipzLmJhclBhZCxBPXMuYmFyV2lkdGgrMipzLmJhclBhZCxTPWQsRT1tK3Y7RStBPmMmJihFPWMtQSk7dmFyIEM9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhci1ob3Jpem9udGFsIikuZGF0YShrP1swXTpbXSk7Qy5leGl0KCkub24oIi5kcmFnIixudWxsKS5yZW1vdmUoKSxDLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2Nyb2xsYmFyLWhvcml6b250YWwiLCEwKS5jYWxsKGkuZmlsbCxzLmJhckNvbG9yKSxrPyh0aGlzLmhiYXI9Qy5hdHRyKHtyeDpzLmJhclJhZGl1cyxyeTpzLmJhclJhZGl1cyx4OlMseTpFLHdpZHRoOk0saGVpZ2h0OkF9KSx0aGlzLl9oYmFyWE1pbj1TK00vMix0aGlzLl9oYmFyVHJhbnNsYXRlTWF4PXctTSk6KGRlbGV0ZSB0aGlzLmhiYXIsZGVsZXRlIHRoaXMuX2hiYXJYTWluLGRlbGV0ZSB0aGlzLl9oYmFyVHJhbnNsYXRlTWF4KTt2YXIgTD12PlQsUD1zLmJhcldpZHRoKzIqcy5iYXJQYWQsST1zLmJhckxlbmd0aCsyKnMuYmFyUGFkLHo9ZCtnLE89bTt6K1A+bCYmKHo9bC1QKTt2YXIgRD10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYmFyLXZlcnRpY2FsIikuZGF0YShMP1swXTpbXSk7RC5leGl0KCkub24oIi5kcmFnIixudWxsKS5yZW1vdmUoKSxELmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2Nyb2xsYmFyLXZlcnRpY2FsIiwhMCkuY2FsbChpLmZpbGwscy5iYXJDb2xvciksTD8odGhpcy52YmFyPUQuYXR0cih7cng6cy5iYXJSYWRpdXMscnk6cy5iYXJSYWRpdXMseDp6LHk6Tyx3aWR0aDpQLGhlaWdodDpJfSksdGhpcy5fdmJhcllNaW49TytJLzIsdGhpcy5fdmJhclRyYW5zbGF0ZU1heD1ULUkpOihkZWxldGUgdGhpcy52YmFyLGRlbGV0ZSB0aGlzLl92YmFyWU1pbixkZWxldGUgdGhpcy5fdmJhclRyYW5zbGF0ZU1heCk7dmFyIFI9dGhpcy5pZCxGPXUtLjUsQj1MP2grUCsuNTpoKy41LE49Zi0uNSxqPWs/cCtBKy41OnArLjUsVT1vLl90b3BkZWZzLnNlbGVjdEFsbCgiIyIrUikuZGF0YShrfHxMP1swXTpbXSk7aWYoVS5leGl0KCkucmVtb3ZlKCksVS5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsUikuYXBwZW5kKCJyZWN0Iiksa3x8TD8odGhpcy5fY2xpcFJlY3Q9VS5zZWxlY3QoInJlY3QiKS5hdHRyKHt4Ok1hdGguZmxvb3IoRikseTpNYXRoLmZsb29yKE4pLHdpZHRoOk1hdGguY2VpbChCKS1NYXRoLmZsb29yKEYpLGhlaWdodDpNYXRoLmNlaWwoaiktTWF0aC5mbG9vcihOKX0pLHRoaXMuY29udGFpbmVyLmNhbGwoYS5zZXRDbGlwVXJsLFIsdGhpcy5nZCksdGhpcy5iZy5hdHRyKHt4OmQseTptLHdpZHRoOmcsaGVpZ2h0OnZ9KSk6KHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIi5kcmFnIixudWxsKS5jYWxsKGEuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLGt8fEwpe3ZhciBWPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe24uZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKX0pKS5vbigiZHJhZyIsdGhpcy5fb25Cb3hEcmFnLmJpbmQodGhpcykpO3RoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIndoZWVsIix0aGlzLl9vbkJveFdoZWVsLmJpbmQodGhpcykpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChWKTt2YXIgcT1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oKXtuLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCksbi5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKX0pKS5vbigiZHJhZyIsdGhpcy5fb25CYXJEcmFnLmJpbmQodGhpcykpO2smJnRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLmNhbGwocSksTCYmdGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChxKX10aGlzLnNldFRyYW5zbGF0ZShlLHIpfSxzLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7KHRoaXMuaGJhcnx8dGhpcy52YmFyKSYmKHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIi5kcmFnIixudWxsKS5jYWxsKGEuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLHRoaXMuaGJhciYmKHRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLHRoaXMuaGJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCksdGhpcy52YmFyJiYodGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCksdGhpcy52YmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX0scy5wcm90b3R5cGUuX29uQm94RHJhZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJih0LT1uLmV2ZW50LmR4KSx0aGlzLnZiYXImJihlLT1uLmV2ZW50LmR5KSx0aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5fb25Cb3hXaGVlbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJih0Kz1uLmV2ZW50LmRlbHRhWSksdGhpcy52YmFyJiYoZSs9bi5ldmVudC5kZWx0YVkpLHRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLl9vbkJhckRyYWc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7aWYodGhpcy5oYmFyKXt2YXIgcj10K3RoaXMuX2hiYXJYTWluLGk9cit0aGlzLl9oYmFyVHJhbnNsYXRlTWF4O3Q9KG8uY29uc3RyYWluKG4uZXZlbnQueCxyLGkpLXIpLyhpLXIpKih0aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94LncpfWlmKHRoaXMudmJhcil7dmFyIGE9ZSt0aGlzLl92YmFyWU1pbixzPWErdGhpcy5fdmJhclRyYW5zbGF0ZU1heDtlPShvLmNvbnN0cmFpbihuLmV2ZW50LnksYSxzKS1hKS8ocy1hKSoodGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oKX10aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94Lncsbj10aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94Lmg7aWYodD1vLmNvbnN0cmFpbih0fHwwLDAsciksZT1vLmNvbnN0cmFpbihlfHwwLDAsbiksdGhpcy50cmFuc2xhdGVYPXQsdGhpcy50cmFuc2xhdGVZPWUsdGhpcy5jb250YWluZXIuY2FsbChhLnNldFRyYW5zbGF0ZSx0aGlzLl9ib3gubC10aGlzLnBvc2l0aW9uLmwtdCx0aGlzLl9ib3gudC10aGlzLnBvc2l0aW9uLnQtZSksdGhpcy5fY2xpcFJlY3QmJnRoaXMuX2NsaXBSZWN0LmF0dHIoe3g6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLmwrdC0uNSkseTpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24udCtlLS41KX0pLHRoaXMuaGJhcil7dmFyIGk9dC9yO3RoaXMuaGJhci5jYWxsKGEuc2V0VHJhbnNsYXRlLHQraSp0aGlzLl9oYmFyVHJhbnNsYXRlTWF4LGUpfWlmKHRoaXMudmJhcil7dmFyIHM9ZS9uO3RoaXMudmJhci5jYWxsKGEuc2V0VHJhbnNsYXRlLHQsZStzKnRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfX19LHsiLi4vLi4vbGliIjo3NTAsIi4uL2NvbG9yIjo2MTUsIi4uL2RyYXdpbmciOjYzNyxkMzoxNjl9XSw3MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtGUk9NX0JMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxGUk9NX1RMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjEsbWlkZGxlOi41LHRvcDowfSxGUk9NX0JSOntsZWZ0OjEsY2VudGVyOi41LHJpZ2h0OjAsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxMSU5FX1NQQUNJTkc6MS4zLENBUF9TSElGVDouNyxNSURfU0hJRlQ6LjM1LE9QUE9TSVRFX1NJREU6e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn19fSx7fV0sNzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXhpc1JlZkRlc2NyaXB0aW9uOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bIklmIHNldCB0byBhIix0LCJheGlzIGlkIChlLmcuICoiK3QrIiogb3IiLCIqIit0KyIyKiksIHRoZSBgIit0KyJgIHBvc2l0aW9uIHJlZmVycyB0byBhIix0LCJjb29yZGluYXRlLiBJZiBzZXQgdG8gKnBhcGVyKiwgdGhlIGAiK3QrImAiLCJwb3NpdGlvbiByZWZlcnMgdG8gdGhlIGRpc3RhbmNlIGZyb20gdGhlIixlLCJvZiB0aGUgcGxvdHRpbmciLCJhcmVhIGluIG5vcm1hbGl6ZWQgY29vcmRpbmF0ZXMgd2hlcmUgKjAqICgqMSopIGNvcnJlc3BvbmRzIHRvIHRoZSIsZSwiKCIrcisiKS4gSWYgc2V0IHRvIGEiLHQsImF4aXMgSUQgZm9sbG93ZWQgYnkiLCIqZG9tYWluKiAoc2VwYXJhdGVkIGJ5IGEgc3BhY2UpLCB0aGUgcG9zaXRpb24gYmVoYXZlcyBsaWtlIGZvciIsIipwYXBlciosIGJ1dCByZWZlcnMgdG8gdGhlIGRpc3RhbmNlIGluIGZyYWN0aW9ucyBvZiB0aGUgZG9tYWluIiwibGVuZ3RoIGZyb20gdGhlIixlLCJvZiB0aGUgZG9tYWluIG9mIHRoYXQgYXhpczogZS5nLiwiLCIqIit0KyIyIGRvbWFpbiogcmVmZXJzIHRvIHRoZSBkb21haW4gb2YgdGhlIHNlY29uZCIsdCwiIGF4aXMgYW5kIGEiLHQsInBvc2l0aW9uIG9mIDAuNSByZWZlcnMgdG8gdGhlIiwicG9pbnQgYmV0d2VlbiB0aGUiLGUsImFuZCB0aGUiLHIsIm9mIHRoZSBkb21haW4gb2YgdGhlIiwic2Vjb25kIix0LCJheGlzLiJdLmpvaW4oIiAiKX19fSx7fV0sNzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17SU5DUkVBU0lORzp7Q09MT1I6IiMzRDk5NzAiLFNZTUJPTDoiXHUyNWIyIn0sREVDUkVBU0lORzp7Q09MT1I6IiNGRjQxMzYiLFNZTUJPTDoiXHUyNWJjIn19fSx7fV0sNzIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Rk9STUFUX0xJTks6Imh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy0zLngtYXBpLXJlZmVyZW5jZS9ibG9iL21hc3Rlci9Gb3JtYXR0aW5nLm1kI2QzX2Zvcm1hdCIsREFURV9GT1JNQVRfTElOSzoiaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLXRpbWUtZm9ybWF0I2xvY2FsZV9mb3JtYXQifX0se31dLDcyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0NPTVBBUklTT05fT1BTOlsiPSIsIiE9IiwiPCIsIj49IiwiPiIsIjw9Il0sQ09NUEFSSVNPTl9PUFMyOlsiPSIsIjwiLCI+PSIsIj4iLCI8PSJdLElOVEVSVkFMX09QUzpbIltdIiwiKCkiLCJbKSIsIihdIiwiXVsiLCIpKCIsIl0oIiwiKVsiXSxTRVRfT1BTOlsie30iLCJ9eyJdLENPTlNUUkFJTlRfUkVEVUNUSU9OOnsiPSI6Ij0iLCI8IjoiPCIsIjw9IjoiPCIsIj4iOiI+IiwiPj0iOiI+IiwiW10iOiJbXSIsIigpIjoiW10iLCJbKSI6IltdIiwiKF0iOiJbXSIsIl1bIjoiXVsiLCIpKCI6Il1bIiwiXSgiOiJdWyIsIilbIjoiXVsifX19LHt9XSw3MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzb2xpZDpbW10sMF0sZG90OltbLjUsMV0sMjAwXSxkYXNoOltbLjUsMV0sNTBdLGxvbmdkYXNoOltbLjUsMV0sMTBdLGRhc2hkb3Q6W1suNSwuNjI1LC44NzUsMV0sNTBdLGxvbmdkYXNoZG90OltbLjUsLjcsLjgsMV0sMTBdfX0se31dLDcyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NpcmNsZToiXHUyNWNmIiwiY2lyY2xlLW9wZW4iOiJcdTI1Y2IiLHNxdWFyZToiXHUyNWEwIiwic3F1YXJlLW9wZW4iOiJcdTI1YTEiLGRpYW1vbmQ6Ilx1MjVjNiIsImRpYW1vbmQtb3BlbiI6Ilx1MjVjNyIsY3Jvc3M6IisiLHg6Ilx1Mjc0YyJ9fSx7fV0sNzI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17U0hPV19QTEFDRUhPTERFUjoxMDAsSElERV9QTEFDRUhPTERFUjoxZTMsREVTRUxFQ1RESU06LjJ9fSx7fV0sNzI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17QkFETlVNOnZvaWQgMCxGUF9TQUZFOk51bWJlci5NQVhfVkFMVUUvMWU0LE9ORU1BWFlFQVI6MzE2MjI0ZTUsT05FQVZHWUVBUjozMTU1NzZlNSxPTkVNSU5ZRUFSOjMxNTM2ZTYsT05FTUFYUVVBUlRFUjo3OTQ4OGU1LE9ORUFWR1FVQVJURVI6Nzg4OTRlNSxPTkVNSU5RVUFSVEVSOjc2ODk2ZTUsT05FTUFYTU9OVEg6MjY3ODRlNSxPTkVBVkdNT05USDoyNjI5OGU1LE9ORU1JTk1PTlRIOjI0MTkyZTUsT05FV0VFSzo2MDQ4ZTUsT05FREFZOjg2NGU1LE9ORUhPVVI6MzZlNSxPTkVNSU46NmU0LE9ORVNFQzoxZTMsRVBPQ0hKRDoyNDQwNTg3LjUsQUxNT1NUX0VRVUFMOi45OTk5OTksTE9HX0NMSVA6MTAsTUlOVVNfU0lHTjoiXHUyMjEyIn19LHt9XSw3MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci54bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLHIuc3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsci54bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsci5zdmdBdHRycz17eG1sbnM6ci5zdmcsInhtbG5zOnhsaW5rIjpyLnhsaW5rfX0se31dLDcyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnZlcnNpb249dCgiLi92ZXJzaW9uIikudmVyc2lvbix0KCJlczYtcHJvbWlzZSIpLnBvbHlmaWxsKCksdCgiLi4vYnVpbGQvcGxvdGNzcyIpLHQoIi4vZm9udHMvbWF0aGpheF9jb25maWciKSgpO2Zvcih2YXIgbj10KCIuL3JlZ2lzdHJ5IiksaT1yLnJlZ2lzdGVyPW4ucmVnaXN0ZXIsYT10KCIuL3Bsb3RfYXBpIiksbz1PYmplY3Qua2V5cyhhKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Il8iIT09bC5jaGFyQXQoMCkmJihyW2xdPWFbbF0pLGkoe21vZHVsZVR5cGU6ImFwaU1ldGhvZCIsbmFtZTpsLGZuOmFbbF19KX1pKHQoIi4vdHJhY2VzL3NjYXR0ZXIiKSksaShbdCgiLi9jb21wb25lbnRzL2xlZ2VuZCIpLHQoIi4vY29tcG9uZW50cy9meCIpLHQoIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyIpLHQoIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uczNkIiksdCgiLi9jb21wb25lbnRzL3NoYXBlcyIpLHQoIi4vY29tcG9uZW50cy9pbWFnZXMiKSx0KCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXMiKSx0KCIuL2NvbXBvbmVudHMvc2xpZGVycyIpLHQoIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlciIpLHQoIi4vY29tcG9uZW50cy9yYW5nZXNlbGVjdG9yIiksdCgiLi9jb21wb25lbnRzL2dyaWQiKSx0KCIuL2NvbXBvbmVudHMvZXJyb3JiYXJzIiksdCgiLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSx0KCIuL2NvbXBvbmVudHMvY29sb3JiYXIiKV0pLGkoW3QoIi4vbG9jYWxlLWVuIiksdCgiLi9sb2NhbGUtZW4tdXMiKV0pLHdpbmRvdy5QbG90bHlMb2NhbGVzJiZBcnJheS5pc0FycmF5KHdpbmRvdy5QbG90bHlMb2NhbGVzKSYmKGkod2luZG93LlBsb3RseUxvY2FsZXMpLGRlbGV0ZSB3aW5kb3cuUGxvdGx5TG9jYWxlcyksci5JY29ucz10KCIuL2ZvbnRzL3Bsb3RpY29uIiksci5QbG90cz10KCIuL3Bsb3RzL3Bsb3RzIiksci5GeD10KCIuL2NvbXBvbmVudHMvZngiKSxyLlNuYXBzaG90PXQoIi4vc25hcHNob3QiKSxyLlBsb3RTY2hlbWE9dCgiLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLHIuUXVldWU9dCgiLi9saWIvcXVldWUiKSxyLmQzPXQoImQzIil9LHsiLi4vYnVpbGQvcGxvdGNzcyI6MSwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zIjo2MDYsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uczNkIjo2MTEsIi4vY29tcG9uZW50cy9jb2xvcmJhciI6NjIxLCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2NDMsIi4vY29tcG9uZW50cy9meCI6NjU1LCIuL2NvbXBvbmVudHMvZ3JpZCI6NjU5LCIuL2NvbXBvbmVudHMvaW1hZ2VzIjo2NjQsIi4vY29tcG9uZW50cy9sZWdlbmQiOjY3MiwiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiOjY4MywiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIjo2OTAsIi4vY29tcG9uZW50cy9zaGFwZXMiOjcwNCwiLi9jb21wb25lbnRzL3NsaWRlcnMiOjcwOSwiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIjo3MTUsIi4vZm9udHMvbWF0aGpheF9jb25maWciOjcyOCwiLi9mb250cy9wbG90aWNvbiI6NzI5LCIuL2xpYi9xdWV1ZSI6NzY1LCIuL2xvY2FsZS1lbiI6Nzc5LCIuL2xvY2FsZS1lbi11cyI6Nzc4LCIuL3Bsb3RfYXBpIjo3ODMsIi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjc4NywiLi9wbG90cy9wbG90cyI6ODYyLCIuL3JlZ2lzdHJ5Ijo4ODIsIi4vc25hcHNob3QiOjg4NywiLi90cmFjZXMvc2NhdHRlciI6MTE3MCwiLi92ZXJzaW9uIjoxMzQxLGQzOjE2OSwiZXM2LXByb21pc2UiOjIyNH1dLDcyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIE1hdGhKYXgmJigibG9jYWwiIT09KHdpbmRvdy5QbG90bHlDb25maWd8fHt9KS5NYXRoSmF4Q29uZmlnJiYoTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6Im5vbmUiLHNraXBTdGFydHVwVHlwZXNldDohMCxkaXNwbGF5QWxpZ246ImxlZnQiLHRleDJqYXg6e2lubGluZU1hdGg6W1siJCIsIiQiXSxbIlxcKCIsIlxcKSJdXX19KSxNYXRoSmF4Lkh1Yi5Db25maWd1cmVkKCkpKX19LHt9XSw3Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt1bmRvOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6Im04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0saG9tZTp7d2lkdGg6OTI4LjYsaGVpZ2h0OjFlMyxwYXRoOiJtNzg2IDI5NnYtMjY3cTAtMTUtMTEtMjZ0LTI1LTEwaC0yMTR2MjE0aC0xNDN2LTIxNGgtMjE0cS0xNSAwLTI1IDEwdC0xMSAyNnYyNjdxMCAxIDAgMnQwIDJsMzIxIDI2NCAzMjEtMjY0cTEtMSAxLTR6IG0xMjQgMzlsLTM0LTQxcS01LTUtMTItNmgtMnEtNyAwLTEyIDNsLTM4NiAzMjItMzg2LTMyMnEtNy00LTEzLTQtNyAyLTEyIDdsLTM1IDQxcS00IDUtMyAxM3Q2IDEybDQwMSAzMzRxMTggMTUgNDIgMTV0NDMtMTVsMTM2LTExNHYxMDlxMCA4IDUgMTN0MTMgNWgxMDdxOCAwIDEzLTV0NS0xM3YtMjI3bDEyMi0xMDJxNS01IDYtMTJ0LTQtMTN6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSwiY2FtZXJhLXJldHJvIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTUxOCAzODZxMCA4LTUgMTN0LTEzIDVxLTM3IDAtNjMtMjd0LTI2LTYzcTAtOCA1LTEzdDEzLTUgMTIgNSA1IDEzcTAgMjMgMTYgMzh0MzggMTZxOCAwIDEzIDV0NSAxM3ogbTEyNS03M3EwLTU5LTQyLTEwMXQtMTAxLTQyLTEwMSA0Mi00MiAxMDEgNDIgMTAxIDEwMSA0MiAxMDEtNDIgNDItMTAxeiBtLTU3Mi0zMjBoODU4djcxaC04NTh2LTcxeiBtNjQzIDMyMHEwIDg5LTYyIDE1MnQtMTUyIDYyLTE1MS02Mi02My0xNTIgNjMtMTUxIDE1MS02MyAxNTIgNjMgNjIgMTUxeiBtLTU3MSAzNThoMjE0djcyaC0yMTR2LTcyeiBtLTcyLTEwN2g4NTh2MTQzaC00NjJsLTM2LTcxaC0zNjB2LTcyeiBtOTI5IDE0M3YtNzE0cTAtMzAtMjEtNTF0LTUwLTIxaC04NThxLTI5IDAtNTAgMjF0LTIxIDUxdjcxNHEwIDMwIDIxIDUxdDUwIDIxaDg1OHEyOSAwIDUwLTIxdDIxLTUxeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbWJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTEwMDAtMjVsLTI1MCAyNTFjNDAgNjMgNjMgMTM4IDYzIDIxOCAwIDIyNC0xODIgNDA2LTQwNyA0MDYtMjI0IDAtNDA2LTE4Mi00MDYtNDA2czE4My00MDYgNDA3LTQwNmM4MCAwIDE1NSAyMiAyMTggNjJsMjUwLTI1MCAxMjUgMTI1eiBtLTgxMiAyNTBsMCA0MzggNDM3IDAgMC00MzgtNDM3IDB6IG02MiAzNzVsMzEzIDAgMC0zMTItMzEzIDAgMCAzMTJ6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxwYW46e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0xMDAwIDM1MGwtMTg3IDE4OCAwLTEyNS0yNTAgMCAwIDI1MCAxMjUgMC0xODggMTg3LTE4Ny0xODcgMTI1IDAgMC0yNTAtMjUwIDAgMCAxMjUtMTg4LTE4OCAxODYtMTg3IDAgMTI1IDI1MiAwIDAtMjUwLTEyNSAwIDE4Ny0xODggMTg4IDE4OC0xMjUgMCAwIDI1MCAyNTAgMCAwLTEyNiAxODcgMTg4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbV9wbHVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOiJtMSA3ODdsMC04NzUgODc1IDAgMCA4NzUtODc1IDB6IG02ODctNTAwbC0xODcgMCAwLTE4Ny0xMjUgMCAwIDE4Ny0xODggMCAwIDEyNSAxODggMCAwIDE4NyAxMjUgMCAwLTE4NyAxODcgMCAwLTEyNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21fbWludXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6Im0wIDc4OGwwLTg3NiA4NzUgMCAwIDg3Ni04NzUgMHogbTY4OC01MDBsLTUwMCAwIDAgMTI1IDUwMCAwIDAtMTI1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sYXV0b3NjYWxlOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMjUwIDg1MGwtMTg3IDAtNjMgMCAwLTYyIDAtMTg4IDYzIDAgMCAxODggMTg3IDAgMCA2MnogbTY4OCAwbC0xODggMCAwLTYyIDE4OCAwIDAtMTg4IDYyIDAgMCAxODggMCA2Mi02MiAweiBtLTg3NS05MzhsMCAxODgtNjMgMCAwLTE4OCAwLTYyIDYzIDAgMTg3IDAgMCA2Mi0xODcgMHogbTg3NSAxODhsMC0xODgtMTg4IDAgMC02MiAxODggMCA2MiAwIDAgNjIgMCAxODgtNjIgMHogbS0xMjUgMTg4bC0xIDAtOTMtOTQtMTU2IDE1NiAxNTYgMTU2IDkyLTkzIDIgMCAwIDI1MC0yNTAgMCAwLTIgOTMtOTItMTU2LTE1Ni0xNTYgMTU2IDk0IDkyIDAgMi0yNTAgMCAwLTI1MCAwIDAgOTMgOTMgMTU3LTE1Ni0xNTctMTU2LTkzIDk0IDAgMCAwLTI1MCAyNTAgMCAwIDAtOTQgOTMgMTU2IDE1NyAxNTYtMTU3LTkzLTkzIDAgMCAyNTAgMCAwIDI1MHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAsaGVpZ2h0OjFlMyxwYXRoOiJtMzc1IDcyNWwwIDAtMzc1LTM3NSAzNzUtMzc0IDAtMSAxMTI1IDAgMCA3NTAtMTEyNSAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sdG9vbHRpcF9jb21wYXJlOnt3aWR0aDoxMTI1LGhlaWdodDoxZTMscGF0aDoibTE4NyA3ODZsMCAyLTE4Ny0xODggMTg4LTE4NyAwIDAgOTM3IDAgMCAzNzMtOTM4IDB6IG0wLTQ5OWwwIDEtMTg3LTE4OCAxODgtMTg4IDAgMCA5MzcgMCAwIDM3Ni05MzgtMXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHBsb3RseWxvZ286e3dpZHRoOjE1NDIsaGVpZ2h0OjFlMyxwYXRoOiJtMC0xMGgxODJ2LTE0MGgtMTgydjE0MHogbTIyOCAxNDZoMTgzdi0yODZoLTE4M3YyODZ6IG0yMjUgNzE0aDE4MnYtMTAwMGgtMTgydjEwMDB6IG0yMjUtMjg1aDE4MnYtNzE1aC0xODJ2NzE1eiBtMjI1IDE0MmgxODN2LTg1N2gtMTgzdjg1N3ogbTIzMS00MjhoMTgydi00MjloLTE4MnY0Mjl6IG0yMjUtMjkxaDE4M3YtMTM4aC0xODN2MTM4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sInotYXhpcyI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im04MzMgNWwtMTcgMTA4djQxbC0xMzAtNjUgMTMwLTY2YzAgMCAwIDM4IDAgMzkgMC0xIDM2LTE0IDM5LTI1IDQtMTUtNi0yMi0xNi0zMC0xNS0xMi0zOS0xNi01Ni0yMC05MC0yMi0xODctMjMtMjc5LTIzLTI2MSAwLTM0MSAzNC0zNTMgNTkgMyA2MCAyMjggMTEwIDIyOCAxMTAtMTQwLTgtMzUxLTM1LTM1MS0xMTYgMC0xMjAgMjkzLTE0MiA0NzQtMTQyIDE1NSAwIDQ3NyAyMiA0NzcgMTQyIDAgNTAtNzQgNzktMTYzIDk2eiBtLTM3NCA5NGMtNTgtNS05OS0yMS05OS00MCAwLTI0IDY1LTQzIDE0NC00MyA3OSAwIDE0MyAxOSAxNDMgNDMgMCAxOS00MiAzNC05OCA0MHYyMTZoODdsLTEzMiAxMzUtMTMzLTEzNWg4OHYtMjE2eiBtMTY3IDUxNWgtMTM2djFjMTYgMTYgMzEgMzQgNDYgNTJsODQgMTA5djU0aC0yMzB2LTcxaDEyNHYtMWMtMTYtMTctMjgtMzItNDQtNTFsLTg5LTExNHYtNTFoMjQ1djcyeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sIjNkX3JvdGF0ZSI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sY2FtZXJhOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDQ1MGMtODMgMC0xNTAtNjctMTUwLTE1MCAwLTgzIDY3LTE1MCAxNTAtMTUwIDgzIDAgMTUwIDY3IDE1MCAxNTAgMCA4My02NyAxNTAtMTUwIDE1MHogbTQwMCAxNTBoLTEyMGMtMTYgMC0zNCAxMy0zOSAyOWwtMzEgOTNjLTYgMTUtMjMgMjgtNDAgMjhoLTM0MGMtMTYgMC0zNC0xMy0zOS0yOGwtMzEtOTRjLTYtMTUtMjMtMjgtNDAtMjhoLTEyMGMtNTUgMC0xMDAtNDUtMTAwLTEwMHYtNDUwYzAtNTUgNDUtMTAwIDEwMC0xMDBoODAwYzU1IDAgMTAwIDQ1IDEwMCAxMDB2NDUwYzAgNTUtNDUgMTAwLTEwMCAxMDB6IG0tNDAwLTU1MGMtMTM4IDAtMjUwIDExMi0yNTAgMjUwIDAgMTM4IDExMiAyNTAgMjUwIDI1MCAxMzggMCAyNTAtMTEyIDI1MC0yNTAgMC0xMzgtMTEyLTI1MC0yNTAtMjUweiBtMzY1IDM4MGMtMTkgMC0zNSAxNi0zNSAzNSAwIDE5IDE2IDM1IDM1IDM1IDE5IDAgMzUtMTYgMzUtMzUgMC0xOS0xNi0zNS0zNS0zNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LG1vdmllOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtOTM4IDQxM2wtMTg4LTEyNWMwIDM3LTE3IDcxLTQ0IDk0IDY0IDM4IDEwNyAxMDcgMTA3IDE4NyAwIDEyMS05OCAyMTktMjE5IDIxOS0xMjEgMC0yMTktOTgtMjE5LTIxOSAwLTYxIDI1LTExNyA2Ni0xNTZoLTExNWMzMCAzMyA0OSA3NiA0OSAxMjUgMCAxMDMtODQgMTg3LTE4NyAxODdzLTE4OC04NC0xODgtMTg3YzAtNTcgMjYtMTA3IDY1LTE0MS0zOC0yMi02NS02Mi02NS0xMDl2LTI1MGMwLTcwIDU2LTEyNiAxMjUtMTI2aDUwMGM2OSAwIDEyNSA1NiAxMjUgMTI2bDE4OC0xMjZjMzQgMCA2MiAyOCA2MiA2M3YzNzVjMCAzNS0yOCA2My02MiA2M3ogbS03NTAgMGMtNjkgMC0xMjUgNTYtMTI1IDEyNXM1NiAxMjUgMTI1IDEyNSAxMjUtNTYgMTI1LTEyNS01Ni0xMjUtMTI1LTEyNXogbTQwNi0xYy04NyAwLTE1NyA3MC0xNTcgMTU3IDAgODYgNzAgMTU2IDE1NyAxNTZzMTU2LTcwIDE1Ni0xNTYtNzAtMTU3LTE1Ni0xNTd6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxxdWVzdGlvbjp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZGlzazp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtMjE0LTdoNDI5djIxNGgtNDI5di0yMTR6IG01MDAgMGg3MnY1MDBxMCA4LTYgMjF0LTExIDIwbC0xNTcgMTU2cS01IDYtMTkgMTJ0LTIyIDV2LTIzMnEwLTIyLTE1LTM4dC0zOC0xNmgtMzIycS0yMiAwLTM3IDE2dC0xNiAzOHYyMzJoLTcydi03MTRoNzJ2MjMycTAgMjIgMTYgMzh0MzcgMTZoNDY1cTIyIDAgMzgtMTZ0MTUtMzh2LTIzMnogbS0yMTQgNTE4djE3OHEwIDgtNSAxM3QtMTMgNWgtMTA3cS03IDAtMTMtNXQtNS0xM3YtMTc4cTAtOCA1LTEzdDEzLTVoMTA3cTcgMCAxMyA1dDUgMTN6IG0zNTctMTh2LTUxOHEwLTIyLTE1LTM4dC0zOC0xNmgtNzUwcS0yMyAwLTM4IDE2dC0xNiAzOHY3NTBxMCAyMiAxNiAzOHQzOCAxNmg1MTdxMjMgMCA1MC0xMnQ0Mi0yNmwxNTYtMTU3cTE2LTE1IDI3LTQydDExLTQ5eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZHJhd29wZW5wYXRoOnt3aWR0aDo3MCxoZWlnaHQ6NzAscGF0aDoiTTMzLjIxLDg1LjY1YTcuMzEsNy4zMSwwLDAsMS0yLjU5LS40OGMtOC4xNi0zLjExLTkuMjctMTkuOC05Ljg4LTQxLjMtLjEtMy41OC0uMTktNi42OC0uMzUtOS0uMTUtMi4xLS42Ny0zLjQ4LTEuNDMtMy43OS0yLjEzLS44OC03LjkxLDIuMzItMTIsNS44NkwzLDMyLjM4YzEuODctMS42NCwxMS41NS05LjY2LDE4LjI3LTYuOSwyLjEzLjg3LDQuNzUsMy4xNCw1LjE3LDksLjE3LDIuNDMuMjYsNS41OS4zNiw5LjI1YTIyNC4xNywyMjQuMTcsMCwwLDAsMS41LDIzLjRjMS41NCwxMC43Niw0LDEyLjIyLDQuNDgsMTIuNC44NC4zMiwyLjc5LS40Niw1Ljc2LTMuNTlMNDMsODAuMDdDNDEuNTMsODEuNTcsMzcuNjgsODUuNjQsMzMuMjEsODUuNjVaTTc0LjgxLDY5YTExLjM0LDExLjM0LDAsMCwwLDYuMDktNi43Mkw4Ny4yNiw0NC41LDc0LjcyLDMyLDU2LjksMzguMzVjLTIuMzcuODYtNS41NywzLjQyLTYuNjEsNkwzOC42NSw3Mi4xNGw4LjQyLDguNDNaTTU1LDQ2LjI3YTcuOTEsNy45MSwwLDAsMSwzLjY0LTMuMTdsMTQuOC01LjMsOCw4TDc2LjExLDYwLjZsLS4wNi4xOWE2LjM3LDYuMzcsMCwwLDEtMywzLjQzTDQ4LjI1LDc0LjU5LDQ0LjYyLDcxWm0xNi41Nyw3LjgyQTYuOSw2LjksMCwxLDAsNjQuNjQsNjEsNi45MSw2LjkxLDAsMCwwLDcxLjU0LDU0LjA5Wm0tNC4wNSwwYTIuODUsMi44NSwwLDEsMS0yLjg1LTIuODVBMi44NiwyLjg2LDAsMCwxLDY3LjQ5LDU0LjA5Wm0tNC4xMyw1LjIyTDYwLjUsNTYuNDUsNDQuMjYsNzIuN2wyLjg2LDIuODZaTTk3LjgzLDM1LjY3LDg0LjE0LDIybC04LjU3LDguNTdMODkuMjYsNDQuMjRabS0xMy42OS04LDgsOC0yLjg1LDIuODUtOC04WiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTUgLTE1KSJ9LGRyYXdjbG9zZWRwYXRoOnt3aWR0aDo5MCxoZWlnaHQ6OTAscGF0aDoiTTg4LjQxLDIxLjEyYTI2LjU2LDI2LjU2LDAsMCwwLTM2LjE4LDBsLTIuMDcsMi0yLjA3LTJhMjYuNTcsMjYuNTcsMCwwLDAtMzYuMTgsMCwyMy43NCwyMy43NCwwLDAsMCwwLDM0LjhMNDgsOTAuMTJhMy4yMiwzLjIyLDAsMCwwLDQuNDIsMGwzNi0zNC4yMWEyMy43MywyMy43MywwLDAsMCwwLTM0Ljc5Wk04NCw1MS4yNCw1MC4xNiw4My4zNSwxNi4zNSw1MS4yNWExNy4yOCwxNy4yOCwwLDAsMSwwLTI1LjQ3LDIwLDIwLDAsMCwxLDI3LjMsMGw0LjI5LDQuMDdhMy4yMywzLjIzLDAsMCwwLDQuNDQsMGw0LjI5LTQuMDdhMjAsMjAsMCwwLDEsMjcuMywwLDE3LjI3LDE3LjI3LDAsMCwxLDAsMjUuNDZaTTY2Ljc2LDQ3LjY4aC0zM3Y2LjkxaDMzWk01My4zNSwzNUg0Ni40NFY2OGg2LjkxWiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtNSAtNSkifSxsYXNzbzp7d2lkdGg6MTAzMSxoZWlnaHQ6MWUzLHBhdGg6Im0xMDE4IDUzOGMtMzYgMjA3LTI5MCAzMzYtNTY4IDI4Ni0yNzctNDgtNDczLTI1Ni00MzYtNDYzIDEwLTU3IDM2LTEwOCA3Ni0xNTEtMTMtNjYgMTEtMTM3IDY4LTE4MyAzNC0yOCA3NS00MSAxMTQtNDJsLTU1LTcwIDAgMGMtMi0xLTMtMi00LTMtMTAtMTQtOC0zNCA1LTQ1IDE0LTExIDM0LTggNDUgNCAxIDEgMiAzIDIgNWwwIDAgMTEzIDE0MGMxNiAxMSAzMSAyNCA0NSA0MCA0IDMgNiA3IDggMTEgNDgtMyAxMDAgMCAxNTEgOSAyNzggNDggNDczIDI1NSA0MzYgNDYyeiBtLTYyNC0zNzljLTgwIDE0LTE0OSA0OC0xOTcgOTYgNDIgNDIgMTA5IDQ3IDE1NiA5IDMzLTI2IDQ3LTY2IDQxLTEwNXogbS0xODctNzRjLTE5IDE2LTMzIDM3LTM5IDYwIDUwLTMyIDEwOS01NSAxNzQtNjgtNDItMjUtOTUtMjQtMTM1IDh6IG0zNjAgNzVjLTM0LTctNjktOS0xMDItOCA4IDYyLTE2IDEyOC02OCAxNzAtNzMgNTktMTc1IDU0LTI0NC01LTkgMjAtMTYgNDAtMjAgNjEtMjggMTU5IDEyMSAzMTcgMzMzIDM1NHM0MDctNjAgNDM0LTIxN2MyOC0xNTktMTIxLTMxOC0zMzMtMzU1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sc2VsZWN0Ym94Ont3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMCA4NTBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NSAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTg1NyAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODVsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg2bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZHJhd2xpbmU6e3dpZHRoOjcwLGhlaWdodDo3MCxwYXRoOiJNNjAuNjQsNjIuM2ExMS4yOSwxMS4yOSwwLDAsMCw2LjA5LTYuNzJsNi4zNS0xNy43Mkw2MC41NCwyNS4zMWwtMTcuODIsNi40Yy0yLjM2Ljg2LTUuNTcsMy40MS02LjYsNkwyNC40OCw2NS41bDguNDIsOC40MlpNNDAuNzksMzkuNjNhNy44OSw3Ljg5LDAsMCwxLDMuNjUtMy4xN2wxNC43OS01LjMxLDgsOEw2MS45NCw1NGwtLjA2LjE5YTYuNDQsNi40NCwwLDAsMS0zLDMuNDNMMzQuMDcsNjhsLTMuNjItMy42M1ptMTYuNTcsNy44MWE2LjksNi45LDAsMSwwLTYuODksNi45QTYuOSw2LjksMCwwLDAsNTcuMzYsNDcuNDRabS00LDBhMi44NiwyLjg2LDAsMSwxLTIuODUtMi44NUEyLjg2LDIuODYsMCwwLDEsNTMuMzIsNDcuNDRabS00LjEzLDUuMjJMNDYuMzMsNDkuOCwzMC4wOCw2Ni4wNWwyLjg2LDIuODZaTTgzLjY1LDI5LDcwLDE1LjM0LDYxLjQsMjMuOSw3NS4wOSwzNy41OVpNNzAsMjEuMDZsOCw4LTIuODQsMi44NS04LThaTTg3LDgwLjQ5SDEwLjY3Vjg3SDg3WiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTUgLTE1KSJ9LGRyYXdyZWN0Ont3aWR0aDo4MCxoZWlnaHQ6ODAscGF0aDoiTTc4LDIyVjc5SDIxVjIySDc4bTktOUgxMlY4OEg4N1YxM1pNNjgsNDYuMjJIMzFWNTRINjhaTTUzLDMySDQ1LjIyVjY5SDUzWiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTAgLTEwKSJ9LGRyYXdjaXJjbGU6e3dpZHRoOjgwLGhlaWdodDo4MCxwYXRoOiJNNTAsODQuNzJDMjYuODQsODQuNzIsOCw2OS4yOCw4LDUwLjNTMjYuODQsMTUuODcsNTAsMTUuODcsOTIsMzEuMzEsOTIsNTAuMyw3My4xNiw4NC43Miw1MCw4NC43MlptMC02MC41OWMtMTguNiwwLTMzLjc0LDExLjc0LTMzLjc0LDI2LjE3UzMxLjQsNzYuNDYsNTAsNzYuNDYsODMuNzQsNjQuNzIsODMuNzQsNTAuMyw2OC42LDI0LjEzLDUwLDI0LjEzWm0xNy4xNSwyMmgtMzR2Ny4xMWgzNFptLTEzLjgtMTNINDYuMjR2MzRoNy4xMVoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTEwIC0xMCkifSxlcmFzZXNoYXBlOnt3aWR0aDo4MCxoZWlnaHQ6ODAscGF0aDoiTTgyLjc3LDc4SDMxLjg1TDYsNDkuNTcsMzEuODUsMjEuMTRIODIuNzdhOC43Miw4LjcyLDAsMCwxLDguNjUsOC43N1Y2OS4yNEE4LjcyLDguNzIsMCwwLDEsODIuNzcsNzhaTTM1LjQ2LDY5Ljg0SDgyLjc3YS41Ny41NywwLDAsMCwuNDktLjZWMjkuOTFhLjU3LjU3LDAsMCwwLS40OS0uNjFIMzUuNDZMMTcsNDkuNTdabTMyLjY4LTM0LjctMjQsMjQsNSw1LDI0LTI0Wm0tMTksLjUzLTUsNSwyNCwyNCw1LTVaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xMCAtMTApIn0sc3Bpa2VsaW5lOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJNNTEyIDQwOWMwLTU3LTQ2LTEwNC0xMDMtMTA0LTU3IDAtMTA0IDQ3LTEwNCAxMDQgMCA1NyA0NyAxMDMgMTA0IDEwMyA1NyAwIDEwMy00NiAxMDMtMTAzeiBtLTMyNy0zOWw5MiAwIDAgOTItOTIgMHogbS0xODUgMGw5MiAwIDAgOTItOTIgMHogbTM3MC0xODZsOTIgMCAwIDkzLTkyIDB6IG0wLTE4NGw5MiAwIDAgOTItOTIgMHoiLHRyYW5zZm9ybToibWF0cml4KDEuNSAwIDAgLTEuNSAwIDg1MCkifSxwZW5jaWw6e3dpZHRoOjE3OTIsaGVpZ2h0OjE3OTIscGF0aDoiTTQ5MSAxNTM2bDkxLTkxLTIzNS0yMzUtOTEgOTF2MTA3aDEyOHYxMjhoMTA3em01MjMtOTI4cTAtMjItMjItMjItMTAgMC0xNyA3bC01NDIgNTQycS03IDctNyAxNyAwIDIyIDIyIDIyIDEwIDAgMTctN2w1NDItNTQycTctNyA3LTE3em0tNTQtMTkybDQxNiA0MTYtODMyIDgzMmgtNDE2di00MTZ6bTY4MyA5NnEwIDUzLTM3IDkwbC0xNjYgMTY2LTQxNi00MTYgMTY2LTE2NXEzNi0zOCA5MC0zOCA1MyAwIDkxIDM4bDIzNSAyMzRxMzcgMzkgMzcgOTF6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIDAgMSkifSxuZXdwbG90bHlsb2dvOntuYW1lOiJuZXdwbG90bHlsb2dvIixzdmc6IjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTMyIDEzMic+PGRlZnM+PHN0eWxlPi5jbHMtMSB7ZmlsbDogIzNmNGY3NTt9IC5jbHMtMiB7ZmlsbDogIzgwY2ZiZTt9IC5jbHMtMyB7ZmlsbDogI2ZmZjt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPnBsb3RseS1sb2dvbWFyazwvdGl0bGU+PGcgaWQ9J3N5bWJvbCc+PHJlY3QgY2xhc3M9J2Nscy0xJyB3aWR0aD0nMTMyJyBoZWlnaHQ9JzEzMicgcng9JzYnIHJ5PSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc3OCcgY3k9JzU0JyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PScxMDInIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNzgnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNTQnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMzAnIGN5PSczMCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMzAnIGN5PSc1NCcgcj0nNicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTMwLDcyYTYsNiwwLDAsMC02LDZ2MjRhNiw2LDAsMCwwLDEyLDBWNzhBNiw2LDAsMCwwLDMwLDcyWicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTc4LDcyYTYsNiwwLDAsMC02LDZ2MjRhNiw2LDAsMCwwLDEyLDBWNzhBNiw2LDAsMCwwLDc4LDcyWicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTU0LDQ4YTYsNiwwLDAsMC02LDZ2NDhhNiw2LDAsMCwwLDEyLDBWNTRBNiw2LDAsMCwwLDU0LDQ4WicvPjxwYXRoIGNsYXNzPSdjbHMtMycgZD0nTTEwMiw0OGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjU0QTYsNiwwLDAsMCwxMDIsNDhaJy8+PC9nPjwvc3ZnPiJ9fX0se31dLDczMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzTGVmdEFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4ibGVmdCI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54PD0xLzN9LHIuaXNDZW50ZXJBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuImNlbnRlciI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54PjEvMyYmdC54PDIvM30sci5pc1JpZ2h0QW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJyaWdodCI9PT10LnhhbmNob3J8fCJhdXRvIj09PXQueGFuY2hvciYmdC54Pj0yLzN9LHIuaXNUb3BBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuInRvcCI9PT10LnlhbmNob3J8fCJhdXRvIj09PXQueWFuY2hvciYmdC55Pj0yLzN9LHIuaXNNaWRkbGVBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIm1pZGRsZSI9PT10LnlhbmNob3J8fCJhdXRvIj09PXQueWFuY2hvciYmdC55PjEvMyYmdC55PDIvM30sci5pc0JvdHRvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4iYm90dG9tIj09PXQueWFuY2hvcnx8ImF1dG8iPT09dC55YW5jaG9yJiZ0Lnk8PTEvM319LHt9XSw3MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tb2QiKSxpPW4ubW9kLGE9bi5tb2RIYWxmLG89TWF0aC5QSSxzPTIqbztmdW5jdGlvbiBsKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXRbMF0pPnMtMWUtMTR9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBhKGUtdCxzKX1mdW5jdGlvbiB1KHQsZSl7aWYobChlKSlyZXR1cm4hMDt2YXIgcixuO2VbMF08ZVsxXT8ocj1lWzBdLG49ZVsxXSk6KHI9ZVsxXSxuPWVbMF0pLChyPWkocixzKSk+KG49aShuLHMpKSYmKG4rPXMpO3ZhciBhPWkodCxzKSxvPWErcztyZXR1cm4gYT49ciYmYTw9bnx8bz49ciYmbzw9bn1mdW5jdGlvbiBoKHQsZSxyLG4saSxhLGMpe2k9aXx8MCxhPWF8fDA7dmFyIHUsaCxmLHAsZCxnPWwoW3Isbl0pO2Z1bmN0aW9uIG0odCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKStpLGEtdCpNYXRoLnNpbihlKV19Zz8odT0wLGg9byxmPXMpOnI8bj8odT1yLGY9bik6KHU9bixmPXIpLHQ8ZT8ocD10LGQ9ZSk6KHA9ZSxkPXQpO3ZhciB2LHk9TWF0aC5hYnMoZi11KTw9bz8wOjE7ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIkEiK1t0LHRdKyIgIitbMCx5LHJdKyIgIittKHQsZSl9cmV0dXJuIGc/dj1udWxsPT09cD8iTSIrbShkLHUpK3goZCxoLDApK3goZCxmLDApKyJaIjoiTSIrbShwLHUpK3gocCxoLDApK3gocCxmLDApKyJaTSIrbShkLHUpK3goZCxoLDEpK3goZCxmLDEpKyJaIjpudWxsPT09cD8odj0iTSIrbShkLHUpK3goZCxmLDApLGMmJih2Kz0iTDAsMFoiKSk6dj0iTSIrbShwLHUpKyJMIittKGQsdSkreChkLGYsMCkrIkwiK20ocCxmKSt4KHAsdSwxKSsiWiIsdn1lLmV4cG9ydHM9e2RlZzJyYWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQvMTgwKm99LHJhZDJkZWc6ZnVuY3Rpb24odCl7cmV0dXJuIHQvbyoxODB9LGFuZ2xlRGVsdGE6YyxhbmdsZURpc3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnMoYyh0LGUpKX0saXNGdWxsQ2lyY2xlOmwsaXNBbmdsZUluc2lkZVNlY3Rvcjp1LGlzUHRJbnNpZGVTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuISF1KGUsbikmJihyWzBdPHJbMV0/KGk9clswXSxhPXJbMV0pOihpPXJbMV0sYT1yWzBdKSx0Pj1pJiZ0PD1hKTt2YXIgaSxhfSxwYXRoQXJjOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGgobnVsbCx0LGUscixuLGksMCl9LHBhdGhTZWN0b3I6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gaChudWxsLHQsZSxyLG4saSwxKX0scGF0aEFubnVsdXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBoKHQsZSxyLG4saSxhLDEpfX19LHsiLi9tb2QiOjc1N31dLDczMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1BcnJheS5pc0FycmF5LGk9InVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyOntpc1ZpZXc6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LGE9InVuZGVmaW5lZCI9PXR5cGVvZiBEYXRhVmlldz9mdW5jdGlvbigpe306RGF0YVZpZXc7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaS5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIGEpfWZ1bmN0aW9uIHModCl7cmV0dXJuIG4odCl8fG8odCl9ZnVuY3Rpb24gbCh0LGUscil7aWYocyh0KSl7aWYocyh0WzBdKSl7Zm9yKHZhciBuPXIsaT0wO2k8dC5sZW5ndGg7aSsrKW49ZShuLHRbaV0ubGVuZ3RoKTtyZXR1cm4gbn1yZXR1cm4gdC5sZW5ndGh9cmV0dXJuIDB9ci5pc1R5cGVkQXJyYXk9byxyLmlzQXJyYXlPclR5cGVkQXJyYXk9cyxyLmlzQXJyYXkxRD1mdW5jdGlvbih0KXtyZXR1cm4hcyh0WzBdKX0sci5lbnN1cmVBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQpfHwodD1bXSksdC5sZW5ndGg9ZSx0fSxyLmNvbmNhdD1mdW5jdGlvbigpe3ZhciB0LGUscixpLGEsbyxzLGwsYz1bXSx1PSEwLGg9MDtmb3Iocj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspKG89KGk9YXJndW1lbnRzW3JdKS5sZW5ndGgpJiYoZT9jLnB1c2goaSk6KGU9aSxhPW8pLG4oaSk/dD0hMToodT0hMSxoP3QhPT1pLmNvbnN0cnVjdG9yJiYodD0hMSk6dD1pLmNvbnN0cnVjdG9yKSxoKz1vKTtpZighaClyZXR1cm5bXTtpZighYy5sZW5ndGgpcmV0dXJuIGU7aWYodSlyZXR1cm4gZS5jb25jYXQuYXBwbHkoZSxjKTtpZih0KXtmb3IoKHM9bmV3IHQoaCkpLnNldChlKSxyPTA7cjxjLmxlbmd0aDtyKyspaT1jW3JdLHMuc2V0KGksYSksYSs9aS5sZW5ndGg7cmV0dXJuIHN9Zm9yKHM9bmV3IEFycmF5KGgpLGw9MDtsPGUubGVuZ3RoO2wrKylzW2xdPWVbbF07Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKyl7Zm9yKGk9Y1tyXSxsPTA7bDxpLmxlbmd0aDtsKyspc1thK2xdPWlbbF07YSs9bH1yZXR1cm4gc30sci5tYXhSb3dMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxNYXRoLm1heCwwKX0sci5taW5Sb3dMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxNYXRoLm1pbiwxLzApfX0se31dLDczMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPS9eWyciJSwkI1xzJ10rfFssIF18WyciJSwkI1xzJ10rJC9nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXQucmVwbGFjZShhLCIiKSksbih0KT9OdW1iZXIodCk6aX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNzM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2dsY2FudmFzJiZlLl9nbGNhbnZhcy5zaXplKCkmJmUuX2dsY2FudmFzLmVhY2goKGZ1bmN0aW9uKHQpe3QucmVnbCYmdC5yZWdsLmNsZWFyKHtjb2xvcjohMCxkZXB0aDohMH0pfSkpfX0se31dLDczNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlciYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXIpLGRlbGV0ZSB0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKX19LHt9XSw3MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMiKSxzPXQoIi4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxsPXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksYz10KCIuL3JlZ2V4IikuY291bnRlcix1PXQoIi4vbW9kIikubW9kSGFsZixoPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5O2Z1bmN0aW9uIGYodCxlKXt2YXIgbj1yLnZhbE9iamVjdE1ldGFbZS52YWxUeXBlXTtpZihlLmFycmF5T2smJmgodCkpcmV0dXJuITA7aWYobi52YWxpZGF0ZUZ1bmN0aW9uKXJldHVybiBuLnZhbGlkYXRlRnVuY3Rpb24odCxlKTt2YXIgaT17fSxhPWksbz17c2V0OmZ1bmN0aW9uKHQpe2E9dH19O3JldHVybiBuLmNvZXJjZUZ1bmN0aW9uKHQsbyxpLGUpLGEhPT1pfXIudmFsT2JqZWN0TWV0YT17ZGF0YV9hcnJheTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2godCk/ZS5zZXQodCk6dm9pZCAwIT09ciYmZS5zZXQocil9fSxlbnVtZXJhdGVkOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtuLmNvZXJjZU51bWJlciYmKHQ9K3QpLC0xPT09bi52YWx1ZXMuaW5kZXhPZih0KT9lLnNldChyKTplLnNldCh0KX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbih0LGUpe2UuY29lcmNlTnVtYmVyJiYodD0rdCk7Zm9yKHZhciByPWUudmFsdWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9U3RyaW5nKHJbbl0pO2lmKCIvIj09PWkuY2hhckF0KDApJiYiLyI9PT1pLmNoYXJBdChpLmxlbmd0aC0xKSl7aWYobmV3IFJlZ0V4cChpLnN1YnN0cigxLGkubGVuZ3RoLTIpKS50ZXN0KHQpKXJldHVybiEwfWVsc2UgaWYodD09PXJbbl0pcmV0dXJuITB9cmV0dXJuITF9fSxib29sZWFuOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ITA9PT10fHwhMT09PXQ/ZS5zZXQodCk6ZS5zZXQocil9fSxudW1iZXI6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLGkpeyFuKHQpfHx2b2lkIDAhPT1pLm1pbiYmdDxpLm1pbnx8dm9pZCAwIT09aS5tYXgmJnQ+aS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0saW50ZWdlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsaSl7dCUxfHwhbih0KXx8dm9pZCAwIT09aS5taW4mJnQ8aS5taW58fHZvaWQgMCE9PWkubWF4JiZ0PmkubWF4P2Uuc2V0KHIpOmUuc2V0KCt0KX19LHN0cmluZzp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7aWYoInN0cmluZyIhPXR5cGVvZiB0KXt2YXIgaT0ibnVtYmVyIj09dHlwZW9mIHQ7ITAhPT1uLnN0cmljdCYmaT9lLnNldChTdHJpbmcodCkpOmUuc2V0KHIpfWVsc2Ugbi5ub0JsYW5rJiYhdD9lLnNldChyKTplLnNldCh0KX19LGNvbG9yOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7aSh0KS5pc1ZhbGlkKCk/ZS5zZXQodCk6ZS5zZXQocil9fSxjb2xvcmxpc3Q6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aCYmdC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIGkodCkuaXNWYWxpZCgpfSkpP2Uuc2V0KHQpOmUuc2V0KHIpfX0sY29sb3JzY2FsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2Uuc2V0KG8uZ2V0KHQscikpfX0sYW5nbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXsiYXV0byI9PT10P2Uuc2V0KCJhdXRvIik6bih0KT9lLnNldCh1KCt0LDM2MCkpOmUuc2V0KHIpfX0sc3VicGxvdGlkOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLnJlZ2V4fHxjKHIpOyJzdHJpbmciPT10eXBlb2YgdCYmaS50ZXN0KHQpP2Uuc2V0KHQpOmUuc2V0KHIpfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5kZmx0O3JldHVybiB0PT09cnx8InN0cmluZyI9PXR5cGVvZiB0JiYhIWMocikudGVzdCh0KX19LGZsYWdsaXN0Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZigic3RyaW5nIj09dHlwZW9mIHQpaWYoLTE9PT0obi5leHRyYXN8fFtdKS5pbmRleE9mKHQpKXtmb3IodmFyIGk9dC5zcGxpdCgiKyIpLGE9MDthPGkubGVuZ3RoOyl7dmFyIG89aVthXTstMT09PW4uZmxhZ3MuaW5kZXhPZihvKXx8aS5pbmRleE9mKG8pPGE/aS5zcGxpY2UoYSwxKTphKyt9aS5sZW5ndGg/ZS5zZXQoaS5qb2luKCIrIikpOmUuc2V0KHIpfWVsc2UgZS5zZXQodCk7ZWxzZSBlLnNldChyKX19LGFueTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXQ/ZS5zZXQocik6ZS5zZXQodCl9fSxpbmZvX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUsbixpKXtmdW5jdGlvbiBhKHQsZSxuKXt2YXIgaSxhPXtzZXQ6ZnVuY3Rpb24odCl7aT10fX07cmV0dXJuIHZvaWQgMD09PW4mJihuPWUuZGZsdCksci52YWxPYmplY3RNZXRhW2UudmFsVHlwZV0uY29lcmNlRnVuY3Rpb24odCxhLG4sZSksaX12YXIgbz0yPT09aS5kaW1lbnNpb25zfHwiMS0yIj09PWkuZGltZW5zaW9ucyYmQXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheSh0WzBdKTtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcyxsLGMsdSxoLGYscD1pLml0ZW1zLGQ9W10sZz1BcnJheS5pc0FycmF5KHApLG09ZyYmbyYmQXJyYXkuaXNBcnJheShwWzBdKSx2PW8mJmcmJiFtLHk9ZyYmIXY/cC5sZW5ndGg6dC5sZW5ndGg7aWYobj1BcnJheS5pc0FycmF5KG4pP246W10sbylmb3Iocz0wO3M8eTtzKyspZm9yKGRbc109W10sYz1BcnJheS5pc0FycmF5KHRbc10pP3Rbc106W10saD12P3AubGVuZ3RoOmc/cFtzXS5sZW5ndGg6Yy5sZW5ndGgsbD0wO2w8aDtsKyspdT12P3BbbF06Zz9wW3NdW2xdOnAsdm9pZCAwIT09KGY9YShjW2xdLHUsKG5bc118fFtdKVtsXSkpJiYoZFtzXVtsXT1mKTtlbHNlIGZvcihzPTA7czx5O3MrKyl2b2lkIDAhPT0oZj1hKHRbc10sZz9wW3NdOnAsbltzXSkpJiYoZFtzXT1mKTtlLnNldChkKX1lbHNlIGUuc2V0KG4pfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7dmFyIHI9ZS5pdGVtcyxuPUFycmF5LmlzQXJyYXkociksaT0yPT09ZS5kaW1lbnNpb25zO2lmKCFlLmZyZWVMZW5ndGgmJnQubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspaWYoaSl7aWYoIUFycmF5LmlzQXJyYXkodFthXSl8fCFlLmZyZWVMZW5ndGgmJnRbYV0ubGVuZ3RoIT09clthXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzx0W2FdLmxlbmd0aDtvKyspaWYoIWYodFthXVtvXSxuP3JbYV1bb106cikpcmV0dXJuITF9ZWxzZSBpZighZih0W2FdLG4/clthXTpyKSlyZXR1cm4hMTtyZXR1cm4hMH19fSxyLmNvZXJjZT1mdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPWwobixpKS5nZXQoKSxzPWwodCxpKSxjPWwoZSxpKSx1PXMuZ2V0KCkscD1lLl90ZW1wbGF0ZTtpZih2b2lkIDA9PT11JiZwJiYodT1sKHAsaSkuZ2V0KCkscD0wKSx2b2lkIDA9PT1hJiYoYT1vLmRmbHQpLG8uYXJyYXlPayYmaCh1KSlyZXR1cm4gYy5zZXQodSksdTt2YXIgZD1yLnZhbE9iamVjdE1ldGFbby52YWxUeXBlXS5jb2VyY2VGdW5jdGlvbjtkKHUsYyxhLG8pO3ZhciBnPWMuZ2V0KCk7cmV0dXJuIHAmJmc9PT1hJiYhZih1LG8pJiYoZCh1PWwocCxpKS5nZXQoKSxjLGEsbyksZz1jLmdldCgpKSxnfSxyLmNvZXJjZTI9ZnVuY3Rpb24odCxlLG4saSxhKXt2YXIgbz1sKHQsaSkscz1yLmNvZXJjZSh0LGUsbixpLGEpLGM9by5nZXQoKTtyZXR1cm4gbnVsbCE9YyYmc30sci5jb2VyY2VGb250PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj17fTtyZXR1cm4gcj1yfHx7fSxuLmZhbWlseT10KGUrIi5mYW1pbHkiLHIuZmFtaWx5KSxuLnNpemU9dChlKyIuc2l6ZSIsci5zaXplKSxuLmNvbG9yPXQoZSsiLmNvbG9yIixyLmNvbG9yKSxufSxyLmNvZXJjZUhvdmVyaW5mbz1mdW5jdGlvbih0LGUsbil7dmFyIGksbz1lLl9tb2R1bGUuYXR0cmlidXRlcyxzPW8uaG92ZXJpbmZvP286YSxsPXMuaG92ZXJpbmZvO2lmKDE9PT1uLl9kYXRhTGVuZ3RoKXt2YXIgYz0iYWxsIj09PWwuZGZsdD9sLmZsYWdzLnNsaWNlKCk6bC5kZmx0LnNwbGl0KCIrIik7Yy5zcGxpY2UoYy5pbmRleE9mKCJuYW1lIiksMSksaT1jLmpvaW4oIisiKX1yZXR1cm4gci5jb2VyY2UodCxlLHMsImhvdmVyaW5mbyIsaSl9LHIuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1mdW5jdGlvbih0LGUpe2lmKHQubWFya2VyKXt2YXIgcixuLGk9dC5tYXJrZXIub3BhY2l0eTtpZih2b2lkIDAhPT1pKWgoaSl8fHQuc2VsZWN0ZWR8fHQudW5zZWxlY3RlZHx8KHI9aSxuPXMqaSksZSgic2VsZWN0ZWQubWFya2VyLm9wYWNpdHkiLHIpLGUoInVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHkiLG4pfX0sci52YWxpZGF0ZT1mfSx7Ii4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMiOjYzMCwiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzI0LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4vYXJyYXkiOjczMiwiLi9tb2QiOjc1NywiLi9uZXN0ZWRfcHJvcGVydHkiOjc1OCwiLi9yZWdleCI6NzY2LCJmYXN0LWlzbnVtZXJpYyI6MjQxLHRpbnljb2xvcjI6NTQ4fV0sNzM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYT10KCJkMy10aW1lLWZvcm1hdCIpLnRpbWVGb3JtYXQsbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgiLi9sb2dnZXJzIiksbD10KCIuL21vZCIpLm1vZCxjPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKSx1PWMuQkFETlVNLGg9Yy5PTkVEQVksZj1jLk9ORUhPVVIscD1jLk9ORU1JTixkPWMuT05FU0VDLGc9Yy5FUE9DSEpELG09dCgiLi4vcmVnaXN0cnkiKSx2PXQoImQzLXRpbWUtZm9ybWF0IikudXRjRm9ybWF0LHk9L15ccyooLT9cZFxkXGRcZHxcZFxkKSgtKFxkP1xkKSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkKDo/XGRcZCk/KT8pPyk/KT8pP1xzKiQvbSx4PS9eXHMqKC0/XGRcZFxkXGR8XGRcZCkoLShcZD9cZGk/KSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkKDo/XGRcZCk/KT8pPyk/KT8pP1xzKiQvbSxiPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS03MDtmdW5jdGlvbiBfKHQpe3JldHVybiB0JiZtLmNvbXBvbmVudHNSZWdpc3RyeS5jYWxlbmRhcnMmJiJzdHJpbmciPT10eXBlb2YgdCYmImdyZWdvcmlhbiIhPT10fWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gU3RyaW5nKHQrTWF0aC5wb3coMTAsZSkpLnN1YnN0cigxKX1yLmRhdGVUaWNrMD1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIF8odCk/ZT9tLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiQ0FOT05JQ0FMX1NVTkRBWSIpW3RdOm0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJDQU5PTklDQUxfVElDSyIpW3RdOmU/IjIwMDAtMDEtMDIiOiIyMDAwLTAxLTAxIn0odCwhIWUpO2lmKGU8MilyZXR1cm4gbjt2YXIgaT1yLmRhdGVUaW1lMm1zKG4sdCk7cmV0dXJuIGkrPWgqKGUtMSksci5tczJEYXRlVGltZShpLDAsdCl9LHIuZGZsdFJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBfKHQpP20uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJERkxUUkFOR0UiKVt0XTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl19LHIuaXNKU0RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0VGltZX0sci5kYXRlVGltZTJtcz1mdW5jdGlvbih0LGUpe2lmKHIuaXNKU0RhdGUodCkpe3ZhciBhPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpwLG89KHQuZ2V0VVRDTWludXRlcygpLXQuZ2V0TWludXRlcygpKSpwKyh0LmdldFVUQ1NlY29uZHMoKS10LmdldFNlY29uZHMoKSkqZCsodC5nZXRVVENNaWxsaXNlY29uZHMoKS10LmdldE1pbGxpc2Vjb25kcygpKTtpZihvKXt2YXIgcz0zKnA7YT1hLXMvMitsKG8tYStzLzIscyl9cmV0dXJuKHQ9TnVtYmVyKHQpLWEpPj1uJiZ0PD1pP3Q6dX1pZigic3RyaW5nIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gdTt0PVN0cmluZyh0KTt2YXIgYz1fKGUpLHY9dC5jaGFyQXQoMCk7IWN8fCJHIiE9PXYmJiJnIiE9PXZ8fCh0PXQuc3Vic3RyKDEpLGU9IiIpO3ZhciB3PWMmJiJjaGluZXNlIj09PWUuc3Vic3RyKDAsNyksVD10Lm1hdGNoKHc/eDp5KTtpZighVClyZXR1cm4gdTt2YXIgaz1UWzFdLE09VFszXXx8IjEiLEE9TnVtYmVyKFRbNV18fDEpLFM9TnVtYmVyKFRbN118fDApLEU9TnVtYmVyKFRbOV18fDApLEM9TnVtYmVyKFRbMTFdfHwwKTtpZihjKXtpZigyPT09ay5sZW5ndGgpcmV0dXJuIHU7dmFyIEw7az1OdW1iZXIoayk7dHJ5e3ZhciBQPW0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKTtpZih3KXt2YXIgST0iaSI9PT1NLmNoYXJBdChNLmxlbmd0aC0xKTtNPXBhcnNlSW50KE0sMTApLEw9UC5uZXdEYXRlKGssUC50b01vbnRoSW5kZXgoayxNLEkpLEEpfWVsc2UgTD1QLm5ld0RhdGUoayxOdW1iZXIoTSksQSl9Y2F0Y2godCl7cmV0dXJuIHV9cmV0dXJuIEw/KEwudG9KRCgpLWcpKmgrUypmK0UqcCtDKmQ6dX1rPTI9PT1rLmxlbmd0aD8oTnVtYmVyKGspKzJlMy1iKSUxMDArYjpOdW1iZXIoayksTS09MTt2YXIgej1uZXcgRGF0ZShEYXRlLlVUQygyZTMsTSxBLFMsRSkpO3JldHVybiB6LnNldFVUQ0Z1bGxZZWFyKGspLHouZ2V0VVRDTW9udGgoKSE9PU18fHouZ2V0VVRDRGF0ZSgpIT09QT91OnouZ2V0VGltZSgpK0MqZH0sbj1yLk1JTl9NUz1yLmRhdGVUaW1lMm1zKCItOTk5OSIpLGk9ci5NQVhfTVM9ci5kYXRlVGltZTJtcygiOTk5OS0xMi0zMSAyMzo1OTo1OS45OTk5Iiksci5pc0RhdGVUaW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGF0ZVRpbWUybXModCxlKSE9PXV9O3ZhciBUPTkwKmgsaz0zKmYsTT01KnA7ZnVuY3Rpb24gQSh0LGUscixuLGkpe2lmKChlfHxyfHxufHxpKSYmKHQrPSIgIit3KGUsMikrIjoiK3cociwyKSwobnx8aSkmJih0Kz0iOiIrdyhuLDIpLGkpKSl7Zm9yKHZhciBhPTQ7aSUxMD09MDspYS09MSxpLz0xMDt0Kz0iLiIrdyhpLGEpfXJldHVybiB0fXIubXMyRGF0ZVRpbWU9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8ISh0Pj1uJiZ0PD1pKSlyZXR1cm4gdTtlfHwoZT0wKTt2YXIgYSxvLHMsYyx5LHgsYj1NYXRoLmZsb29yKDEwKmwodCsuMDUsMSkpLHc9TWF0aC5yb3VuZCh0LWIvMTApO2lmKF8ocikpe3ZhciBTPU1hdGguZmxvb3Iody9oKStnLEU9TWF0aC5mbG9vcihsKHQsaCkpO3RyeXthPW0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKS5mcm9tSkQoUykuZm9ybWF0RGF0ZSgieXl5eS1tbS1kZCIpfWNhdGNoKHQpe2E9digiRyVZLSVtLSVkIikobmV3IERhdGUodykpfWlmKCItIj09PWEuY2hhckF0KDApKWZvcig7YS5sZW5ndGg8MTE7KWE9Ii0wIithLnN1YnN0cigxKTtlbHNlIGZvcig7YS5sZW5ndGg8MTA7KWE9IjAiK2E7bz1lPFQ/TWF0aC5mbG9vcihFL2YpOjAscz1lPFQ/TWF0aC5mbG9vcihFJWYvcCk6MCxjPWU8az9NYXRoLmZsb29yKEUlcC9kKTowLHk9ZTxNP0UlZCoxMCtiOjB9ZWxzZSB4PW5ldyBEYXRlKHcpLGE9digiJVktJW0tJWQiKSh4KSxvPWU8VD94LmdldFVUQ0hvdXJzKCk6MCxzPWU8VD94LmdldFVUQ01pbnV0ZXMoKTowLGM9ZTxrP3guZ2V0VVRDU2Vjb25kcygpOjAseT1lPE0/MTAqeC5nZXRVVENNaWxsaXNlY29uZHMoKStiOjA7cmV0dXJuIEEoYSxvLHMsYyx5KX0sci5tczJEYXRlVGltZUxvY2FsPWZ1bmN0aW9uKHQpe2lmKCEodD49bitoJiZ0PD1pLWgpKXJldHVybiB1O3ZhciBlPU1hdGguZmxvb3IoMTAqbCh0Ky4wNSwxKSkscj1uZXcgRGF0ZShNYXRoLnJvdW5kKHQtZS8xMCkpO3JldHVybiBBKGEoIiVZLSVtLSVkIikociksci5nZXRIb3VycygpLHIuZ2V0TWludXRlcygpLHIuZ2V0U2Vjb25kcygpLDEwKnIuZ2V0VVRDTWlsbGlzZWNvbmRzKCkrZSl9LHIuY2xlYW5EYXRlPWZ1bmN0aW9uKHQsZSxuKXtpZih0PT09dSlyZXR1cm4gZTtpZihyLmlzSlNEYXRlKHQpfHwibnVtYmVyIj09dHlwZW9mIHQmJmlzRmluaXRlKHQpKXtpZihfKG4pKXJldHVybiBzLmVycm9yKCJKUyBEYXRlcyBhbmQgbWlsbGlzZWNvbmRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB3b3JsZCBjYWxlbmRhcnMiLHQpLGU7aWYoISh0PXIubXMyRGF0ZVRpbWVMb2NhbCgrdCkpJiZ2b2lkIDAhPT1lKXJldHVybiBlfWVsc2UgaWYoIXIuaXNEYXRlVGltZSh0LG4pKXJldHVybiBzLmVycm9yKCJ1bnJlY29nbml6ZWQgZGF0ZSIsdCksZTtyZXR1cm4gdH07dmFyIFM9LyVcZD9mL2c7ZnVuY3Rpb24gRSh0LGUscixuKXt0PXQucmVwbGFjZShTLChmdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1pbigrdC5jaGFyQXQoMSl8fDYsNik7cmV0dXJuKGUvMWUzJTErMikudG9GaXhlZChyKS5zdWJzdHIoMikucmVwbGFjZSgvMCskLywiIil8fCIwIn0pKTt2YXIgaT1uZXcgRGF0ZShNYXRoLmZsb29yKGUrLjA1KSk7aWYoXyhuKSl0cnl7dD1tLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwid29ybGRDYWxGbXQiKSh0LGUsbil9Y2F0Y2godCl7cmV0dXJuIkludmFsaWQifXJldHVybiByKHQpKGkpfXZhciBDPVs1OSw1OS45LDU5Ljk5LDU5Ljk5OSw1OS45OTk5XTtyLmZvcm1hdERhdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKGk9XyhpKSYmaSwhZSlpZigieSI9PT1yKWU9YS55ZWFyO2Vsc2UgaWYoIm0iPT09cillPWEubW9udGg7ZWxzZXtpZigiZCIhPT1yKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWwodCsuMDUsaCksbj13KE1hdGguZmxvb3Ioci9mKSwyKSsiOiIrdyhsKE1hdGguZmxvb3Ioci9wKSw2MCksMik7aWYoIk0iIT09ZSl7byhlKXx8KGU9MCk7dmFyIGk9KDEwMCtNYXRoLm1pbihsKHQvZCw2MCksQ1tlXSkpLnRvRml4ZWQoZSkuc3Vic3RyKDEpO2U+MCYmKGk9aS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9bXC5dJC8sIiIpKSxuKz0iOiIraX1yZXR1cm4gbn0odCxyKSsiXG4iK0UoYS5kYXlNb250aFllYXIsdCxuLGkpO2U9YS5kYXlNb250aCsiXG4iK2EueWVhcn1yZXR1cm4gRShlLHQsbixpKX07dmFyIEw9MypoO3IuaW5jcmVtZW50TW9udGg9ZnVuY3Rpb24odCxlLHIpe3I9XyhyKSYmcjt2YXIgbj1sKHQsaCk7aWYodD1NYXRoLnJvdW5kKHQtbikscil0cnl7dmFyIGk9TWF0aC5yb3VuZCh0L2gpK2csYT1tLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikociksbz1hLmZyb21KRChpKTtyZXR1cm4gZSUxMj9hLmFkZChvLGUsIm0iKTphLmFkZChvLGUvMTIsInkiKSwoby50b0pEKCktZykqaCtufWNhdGNoKGUpe3MuZXJyb3IoImludmFsaWQgbXMgIit0KyIgaW4gY2FsZW5kYXIgIityKX12YXIgYz1uZXcgRGF0ZSh0K0wpO3JldHVybiBjLnNldFVUQ01vbnRoKGMuZ2V0VVRDTW9udGgoKStlKStuLUx9LHIuZmluZEV4YWN0RGF0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPTAsYT0wLHM9MCxsPTAsYz1fKGUpJiZtLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikoZSksdT0wO3U8dC5sZW5ndGg7dSsrKWlmKG49dFt1XSxvKG4pKXtpZighKG4laCkpaWYoYyl0cnl7MT09PShyPWMuZnJvbUpEKG4vaCtnKSkuZGF5KCk/MT09PXIubW9udGgoKT9pKys6YSsrOnMrK31jYXRjaCh0KXt9ZWxzZSAxPT09KHI9bmV3IERhdGUobikpLmdldFVUQ0RhdGUoKT8wPT09ci5nZXRVVENNb250aCgpP2krKzphKys6cysrfWVsc2UgbCsrO3MrPWErPWk7dmFyIGY9dC5sZW5ndGgtbDtyZXR1cm57ZXhhY3RZZWFyczppL2YsZXhhY3RNb250aHM6YS9mLGV4YWN0RGF5czpzL2Z9fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uL3JlZ2lzdHJ5Ijo4ODIsIi4vbG9nZ2VycyI6NzU0LCIuL21vZCI6NzU3LCJkMy10aW1lLWZvcm1hdCI6MTY2LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNzM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuL2xvZ2dlcnMiKTtmdW5jdGlvbiBhKHQpe3ZhciBlPXQmJnQucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHQpfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPSJwbG90bHkuanMtc3R5bGUtIit0LGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobik7YXx8KChhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIikpLnNldEF0dHJpYnV0ZSgiaWQiLG4pLGEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGEpKTt2YXIgbz1hLnNoZWV0O28uaW5zZXJ0UnVsZT9vLmluc2VydFJ1bGUoZSsieyIrcisifSIsMCk6by5hZGRSdWxlP28uYWRkUnVsZShlLHIsMCk6aS53YXJuKCJhZGRTdHlsZVJ1bGUgZmFpbGVkIil9ZS5leHBvcnRzPXtnZXRHcmFwaERpdjpmdW5jdGlvbih0KXt2YXIgZTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKG51bGw9PT0oZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSkpdGhyb3cgbmV3IEVycm9yKCJObyBET00gZWxlbWVudCB3aXRoIGlkICciK3QrIicgZXhpc3RzIG9uIHRoZSBwYWdlLiIpO3JldHVybiBlfWlmKG51bGw9PXQpdGhyb3cgbmV3IEVycm9yKCJET00gZWxlbWVudCBwcm92aWRlZCBpcyBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiB0fSxpc1Bsb3REaXY6ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCk7cmV0dXJuIGUubm9kZSgpaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmZS5zaXplKCkmJmUuY2xhc3NlZCgianMtcGxvdGx5LXBsb3QiKX0scmVtb3ZlRWxlbWVudDphLGFkZFN0eWxlUnVsZTpmdW5jdGlvbih0LGUpe28oImdsb2JhbCIsdCxlKX0sYWRkUmVsYXRlZFN0eWxlUnVsZTpvLGRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGU6ZnVuY3Rpb24odCl7dmFyIGU9InBsb3RseS5qcy1zdHlsZS0iK3Qscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtyJiZhKHIpfX19LHsiLi9sb2dnZXJzIjo3NTQsZDM6MTY5fV0sNzM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixpPXtpbml0OmZ1bmN0aW9uKHQpe2lmKHQuX2V2IGluc3RhbmNlb2YgbilyZXR1cm4gdDt2YXIgZT1uZXcgbixyPW5ldyBuO3JldHVybiB0Ll9ldj1lLHQuX2ludGVybmFsRXY9cix0Lm9uPWUub24uYmluZChlKSx0Lm9uY2U9ZS5vbmNlLmJpbmQoZSksdC5yZW1vdmVMaXN0ZW5lcj1lLnJlbW92ZUxpc3RlbmVyLmJpbmQoZSksdC5yZW1vdmVBbGxMaXN0ZW5lcnM9ZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChlKSx0Ll9pbnRlcm5hbE9uPXIub24uYmluZChyKSx0Ll9pbnRlcm5hbE9uY2U9ci5vbmNlLmJpbmQociksdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcj1yLnJlbW92ZUxpc3RlbmVyLmJpbmQociksdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnM9ci5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChyKSx0LmVtaXQ9ZnVuY3Rpb24obixpKXsidW5kZWZpbmVkIiE9dHlwZW9mIGpRdWVyeSYmalF1ZXJ5KHQpLnRyaWdnZXIobixpKSxlLmVtaXQobixpKSxyLmVtaXQobixpKX0sdH0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJihuPWpRdWVyeSh0KS50cmlnZ2VySGFuZGxlcihlLHIpKTt2YXIgYT10Ll9ldjtpZighYSlyZXR1cm4gbjt2YXIgbyxzPWEuX2V2ZW50c1tlXTtpZighcylyZXR1cm4gbjtmdW5jdGlvbiBsKHQpe3JldHVybiB0Lmxpc3RlbmVyPyhhLnJlbW92ZUxpc3RlbmVyKGUsdC5saXN0ZW5lciksdC5maXJlZD92b2lkIDA6KHQuZmlyZWQ9ITAsdC5saXN0ZW5lci5hcHBseShhLFtyXSkpKTp0LmFwcGx5KGEsW3JdKX1mb3Iocz1BcnJheS5pc0FycmF5KHMpP3M6W3NdLG89MDtvPHMubGVuZ3RoLTE7bysrKWwoc1tvXSk7cmV0dXJuIGk9bChzW29dKSx2b2lkIDAhPT1uP246aX0scHVyZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5vbixkZWxldGUgdC5vbmNlLGRlbGV0ZSB0LnJlbW92ZUxpc3RlbmVyLGRlbGV0ZSB0LnJlbW92ZUFsbExpc3RlbmVycyxkZWxldGUgdC5lbWl0LGRlbGV0ZSB0Ll9ldixkZWxldGUgdC5faW50ZXJuYWxFdixkZWxldGUgdC5faW50ZXJuYWxPbixkZWxldGUgdC5faW50ZXJuYWxPbmNlLGRlbGV0ZSB0Ll9yZW1vdmVJbnRlcm5hbExpc3RlbmVyLGRlbGV0ZSB0Ll9yZW1vdmVBbGxJbnRlcm5hbExpc3RlbmVycyx0fX07ZS5leHBvcnRzPWl9LHtldmVudHM6MTEwfV0sNzQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXNfcGxhaW5fb2JqZWN0LmpzIiksaT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGEodCxlLHIsbyl7dmFyIHMsbCxjLHUsaCxmLHA9dFswXSxkPXQubGVuZ3RoO2lmKDI9PT1kJiZpKHApJiZpKHRbMV0pJiYwPT09cC5sZW5ndGgpe2lmKGZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpZihudWxsIT09KG49dFtyXSkmJiJvYmplY3QiPT10eXBlb2YgbilyZXR1cm4hMTt2b2lkIDAhPT1uJiYoZVtyXT1uKX1yZXR1cm4hMH0odFsxXSxwKSlyZXR1cm4gcDtwLnNwbGljZSgwLHAubGVuZ3RoKX1mb3IodmFyIGc9MTtnPGQ7ZysrKWZvcihsIGluIHM9dFtnXSljPXBbbF0sdT1zW2xdLG8mJmkodSk/cFtsXT11OmUmJnUmJihuKHUpfHwoaD1pKHUpKSk/KGg/KGg9ITEsZj1jJiZpKGMpP2M6W10pOmY9YyYmbihjKT9jOnt9LHBbbF09YShbZix1XSxlLHIsbykpOigidW5kZWZpbmVkIiE9dHlwZW9mIHV8fHIpJiYocFtsXT11KTtyZXR1cm4gcH1yLmV4dGVuZEZsYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITEsITEsITEpfSxyLmV4dGVuZERlZXA9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITEsITEpfSxyLmV4dGVuZERlZXBBbGw9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITAsITEpfSxyLmV4dGVuZERlZXBOb0FycmF5cz1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMCwhMSwhMCl9fSx7Ii4vaXNfcGxhaW5fb2JqZWN0LmpzIjo3NTF9XSw3NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxyPVtdLG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07MSE9PWVbYV0mJihlW2FdPTEscltuKytdPWEpfXJldHVybiByfX0se31dLDc0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiEwPT09dC52aXNpYmxlfWZ1bmN0aW9uIGkodCl7dmFyIGU9dFswXS50cmFjZTtyZXR1cm4hMD09PWUudmlzaWJsZSYmMCE9PWUuX2xlbmd0aH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9KGU9dCxBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KGVbMF0pJiZlWzBdWzBdJiZlWzBdWzBdLnRyYWNlP2k6biksYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107cihzKSYmYS5wdXNoKHMpfXJldHVybiBhfX0se31dLDc0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiY291bnRyeS1yZWdleCIpLGE9dCgiQHR1cmYvYXJlYSIpLG89dCgiQHR1cmYvY2VudHJvaWQiKSxzPXQoIkB0dXJmL2Jib3giKSxsPXQoIi4vaWRlbnRpdHkiKSxjPXQoIi4vbG9nZ2VycyIpLHU9dCgiLi9pc19wbGFpbl9vYmplY3QiKSxoPXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksZj10KCIuL3BvbHlnb24iKSxwPU9iamVjdC5rZXlzKGkpLGQ9eyJJU08tMyI6bCwiVVNBLXN0YXRlcyI6bCwiY291bnRyeSBuYW1lcyI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxwLmxlbmd0aDtlKyspe3ZhciByPXBbZV07aWYobmV3IFJlZ0V4cChpW3JdKS50ZXN0KHQudHJpbSgpLnRvTG93ZXJDYXNlKCkpKXJldHVybiByfXJldHVybiBjLmxvZygiVW5yZWNvZ25pemVkIGNvdW50cnkgbmFtZTogIit0KyIuIiksITF9fTtmdW5jdGlvbiBnKHQpe3ZhciBlPXQuZ2VvanNvbixyPXdpbmRvdy5QbG90bHlHZW9Bc3NldHN8fHt9LG49InN0cmluZyI9PXR5cGVvZiBlP3JbZV06ZTtyZXR1cm4gdShuKT9uOihjLmVycm9yKCJPb3BzIC4uLiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aGVuIGZldGNoaW5nICIrZSksITEpfWUuZXhwb3J0cz17bG9jYXRpb25Ub0ZlYXR1cmU6ZnVuY3Rpb24odCxlLHIpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuITE7dmFyIG4saSxhLG89ZFt0XShlKTtpZihvKXtpZigiVVNBLXN0YXRlcyI9PT10KWZvcihuPVtdLGE9MDthPHIubGVuZ3RoO2ErKykoaT1yW2FdKS5wcm9wZXJ0aWVzJiZpLnByb3BlcnRpZXMuZ3UmJiJVU0EiPT09aS5wcm9wZXJ0aWVzLmd1JiZuLnB1c2goaSk7ZWxzZSBuPXI7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylpZigoaT1uW2FdKS5pZD09PW8pcmV0dXJuIGk7Yy5sb2coWyJMb2NhdGlvbiB3aXRoIGlkIixvLCJkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgdG9wb2pzb24gZmVhdHVyZSBhdCB0aGlzIHJlc29sdXRpb24uIl0uam9pbigiICIpKX1yZXR1cm4hMX0sZmVhdHVyZTJwb2x5Z29uczpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXQuZ2VvbWV0cnksbz1hLmNvb3JkaW5hdGVzLHM9dC5pZCxsPVtdO2Z1bmN0aW9uIGModCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aC0xO2UrKylpZih0W2VdWzBdPjAmJnRbZSsxXVswXTwwKXJldHVybiBlO3JldHVybiBudWxsfXN3aXRjaChlPSJSVVMiPT09c3x8IkZKSSI9PT1zP2Z1bmN0aW9uKHQpe3ZhciBlO2lmKG51bGw9PT1jKHQpKWU9dDtlbHNlIGZvcihlPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7aSsrKWVbaV09W3RbaV1bMF08MD90W2ldWzBdKzM2MDp0W2ldWzBdLHRbaV1bMV1dO2wucHVzaChmLnRlc3RlcihlKSl9OiJBVEEiPT09cz9mdW5jdGlvbih0KXt2YXIgZT1jKHQpO2lmKG51bGw9PT1lKXJldHVybiBsLnB1c2goZi50ZXN0ZXIodCkpO3ZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCsxKSxuPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpPmU/cltuKytdPVt0W2ldWzBdKzM2MCx0W2ldWzFdXTppPT09ZT8ocltuKytdPXRbaV0scltuKytdPVt0W2ldWzBdLC05MF0pOnJbbisrXT10W2ldO3ZhciBhPWYudGVzdGVyKHIpO2EucHRzLnBvcCgpLGwucHVzaChhKX06ZnVuY3Rpb24odCl7bC5wdXNoKGYudGVzdGVyKHQpKX0sYS50eXBlKXtjYXNlIk11bHRpUG9seWdvbiI6Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKylmb3Iobj0wO248b1tyXS5sZW5ndGg7bisrKWUob1tyXVtuXSk7YnJlYWs7Y2FzZSJQb2x5Z29uIjpmb3Iocj0wO3I8by5sZW5ndGg7cisrKWUob1tyXSl9cmV0dXJuIGx9LGdldFRyYWNlR2VvanNvbjpnLGV4dHJhY3RUcmFjZUZlYXR1cmU6ZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPWcoZSk7aWYoIXIpcmV0dXJuITE7dmFyIG4saT17fSxzPVtdO2ZvcihuPTA7bjxlLl9sZW5ndGg7bisrKXt2YXIgbD10W25dOyhsLmxvY3x8MD09PWwubG9jKSYmKGlbbC5sb2NdPWwpfWZ1bmN0aW9uIHUodCl7dmFyIHI9aCh0LGUuZmVhdHVyZWlka2V5fHwiaWQiKS5nZXQoKSxuPWlbcl07aWYobil7dmFyIGw9dC5nZW9tZXRyeTtpZigiUG9seWdvbiI9PT1sLnR5cGV8fCJNdWx0aVBvbHlnb24iPT09bC50eXBlKXt2YXIgdT17dHlwZToiRmVhdHVyZSIsaWQ6cixnZW9tZXRyeTpsLHByb3BlcnRpZXM6e319O3UucHJvcGVydGllcy5jdD1mdW5jdGlvbih0KXt2YXIgZSxyPXQuZ2VvbWV0cnk7aWYoIk11bHRpUG9seWdvbiI9PT1yLnR5cGUpZm9yKHZhciBuPXIuY29vcmRpbmF0ZXMsaT0wLHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOm5bc119LGM9YS5kZWZhdWx0KGwpO2M+aSYmKGk9YyxlPWwpfWVsc2UgZT1yO3JldHVybiBvLmRlZmF1bHQoZSkuZ2VvbWV0cnkuY29vcmRpbmF0ZXN9KHUpLG4uZkluPXQsbi5mT3V0PXUscy5wdXNoKHUpfWVsc2UgYy5sb2coWyJMb2NhdGlvbiIsbi5sb2MsImRvZXMgbm90IGhhdmUgYSB2YWxpZCBHZW9KU09OIGdlb21ldHJ5LiIsIlRyYWNlcyB3aXRoIGxvY2F0aW9ubW9kZSAqZ2VvanNvbi1pZCogb25seSBzdXBwb3J0IiwiKlBvbHlnb24qIGFuZCAqTXVsdGlQb2x5Z29uKiBnZW9tZXRyaWVzLiJdLmpvaW4oIiAiKSl9ZGVsZXRlIGlbcl19c3dpdGNoKHIudHlwZSl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6dmFyIGY9ci5mZWF0dXJlcztmb3Iobj0wO248Zi5sZW5ndGg7bisrKXUoZltuXSk7YnJlYWs7Y2FzZSJGZWF0dXJlIjp1KHIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGMud2FybihbIkludmFsaWQgR2VvSlNPTiB0eXBlIiwoci50eXBlfHwibm9uZSIpKyIuIiwiVHJhY2VzIHdpdGggbG9jYXRpb25tb2RlICpnZW9qc29uLWlkKiBvbmx5IHN1cHBvcnQiLCIqRmVhdHVyZUNvbGxlY3Rpb24qIGFuZCAqRmVhdHVyZSogdHlwZXMuIl0uam9pbigiICIpKSwhMX1mb3IodmFyIHAgaW4gaSljLmxvZyhbIkxvY2F0aW9uICoiK3ArIioiLCJkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgZmVhdHVyZSB3aXRoIGlkLWtleSIsIioiK2UuZmVhdHVyZWlka2V5KyIqLiJdLmpvaW4oIiAiKSk7cmV0dXJuIHN9LGZldGNoVHJhY2VHZW9EYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXdpbmRvdy5QbG90bHlHZW9Bc3NldHN8fHt9LHI9W107ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsaSl7bi5qc29uKHQsKGZ1bmN0aW9uKG4sYSl7aWYobil7ZGVsZXRlIGVbdF07dmFyIG89NDA0PT09bi5zdGF0dXM/J0dlb0pTT04gYXQgVVJMICInK3QrJyIgZG9lcyBub3QgZXhpc3QuJzoiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyBmcm9tICIrdDtyZXR1cm4gaShuZXcgRXJyb3IobykpfXJldHVybiBlW3RdPWEscihhKX0pKX0pKX1mdW5jdGlvbiBhKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXt2YXIgaT0wLGE9c2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCl7cmV0dXJuIGVbdF0mJiJwZW5kaW5nIiE9PWVbdF0/KGNsZWFySW50ZXJ2YWwoYSkscihlW3RdKSk6aT4xMDA/KGNsZWFySW50ZXJ2YWwoYSksbigiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyBmcm9tICIrdCkpOnZvaWQgaSsrfSksNTApfSkpfWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dWzBdLnRyYWNlLmdlb2pzb247InN0cmluZyI9PXR5cGVvZiBzJiYoZVtzXT8icGVuZGluZyI9PT1lW3NdJiZyLnB1c2goYShzKSk6KGVbc109InBlbmRpbmciLHIucHVzaChpKHMpKSkpfXJldHVybiByfSxjb21wdXRlQmJveDpmdW5jdGlvbih0KXtyZXR1cm4gcy5kZWZhdWx0KHQpfX19LHsiLi9pZGVudGl0eSI6NzQ4LCIuL2lzX3BsYWluX29iamVjdCI6NzUxLCIuL2xvZ2dlcnMiOjc1NCwiLi9uZXN0ZWRfcHJvcGVydHkiOjc1OCwiLi9wb2x5Z29uIjo3NjIsIkB0dXJmL2FyZWEiOjU5LCJAdHVyZi9iYm94Ijo2MCwiQHR1cmYvY2VudHJvaWQiOjYxLCJjb3VudHJ5LXJlZ2V4IjoxMzksZDM6MTY5fV0sNzQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5jYWxjVHJhY2VUb0xpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0udHJhY2UuY29ubmVjdGdhcHMscj1bXSxpPVtdLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXS5sb25sYXQ7b1swXSE9PW4/aS5wdXNoKG8pOiFlJiZpLmxlbmd0aD4wJiYoci5wdXNoKGkpLGk9W10pfXJldHVybiBpLmxlbmd0aD4wJiZyLnB1c2goaSkscn0sci5tYWtlTGluZT1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0WzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0sci5tYWtlUG9seWdvbj1mdW5jdGlvbih0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOnR9O2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPVt0W3JdXTtyZXR1cm57dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczplfX0sci5tYWtlQmxhbms9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOltdfX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1fV0sNzQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYSxvPXQoIi4vbW9kIikubW9kO2Z1bmN0aW9uIHModCxlLHIsbixpLGEsbyxzKXt2YXIgbD1yLXQsYz1pLXQsdT1vLWksaD1uLWUsZj1hLWUscD1zLWEsZD1sKnAtdSpoO2lmKDA9PT1kKXJldHVybiBudWxsO3ZhciBnPShjKnAtdSpmKS9kLG09KGMqaC1sKmYpL2Q7cmV0dXJuIG08MHx8bT4xfHxnPDB8fGc+MT9udWxsOnt4OnQrbCpnLHk6ZStoKmd9fWZ1bmN0aW9uIGwodCxlLHIsbixpKXt2YXIgYT1uKnQraSplO2lmKGE8MClyZXR1cm4gbipuK2kqaTtpZihhPnIpe3ZhciBvPW4tdCxzPWktZTtyZXR1cm4gbypvK3Mqc312YXIgbD1uKmUtaSp0O3JldHVybiBsKmwvcn1yLnNlZ21lbnRzSW50ZXJzZWN0PXMsci5zZWdtZW50RGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxjKXtpZihzKHQsZSxyLG4saSxhLG8sYykpcmV0dXJuIDA7dmFyIHU9ci10LGg9bi1lLGY9by1pLHA9Yy1hLGQ9dSp1K2gqaCxnPWYqZitwKnAsbT1NYXRoLm1pbihsKHUsaCxkLGktdCxhLWUpLGwodSxoLGQsby10LGMtZSksbChmLHAsZyx0LWksZS1hKSxsKGYscCxnLHItaSxuLWEpKTtyZXR1cm4gTWF0aC5zcXJ0KG0pfSxyLmdldFRleHRMb2NhdGlvbj1mdW5jdGlvbih0LGUscixzKXtpZih0PT09aSYmcz09PWF8fChuPXt9LGk9dCxhPXMpLG5bcl0pcmV0dXJuIG5bcl07dmFyIGw9dC5nZXRQb2ludEF0TGVuZ3RoKG8oci1zLzIsZSkpLGM9dC5nZXRQb2ludEF0TGVuZ3RoKG8ocitzLzIsZSkpLHU9TWF0aC5hdGFuKChjLnktbC55KS8oYy54LWwueCkpLGg9dC5nZXRQb2ludEF0TGVuZ3RoKG8ocixlKSksZj17eDooNCpoLngrbC54K2MueCkvNix5Oig0KmgueStsLnkrYy55KS82LHRoZXRhOnV9O3JldHVybiBuW3JdPWYsZn0sci5jbGVhckxvY2F0aW9uQ2FjaGU9ZnVuY3Rpb24oKXtpPW51bGx9LHIuZ2V0VmlzaWJsZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLmxlZnQsbz1lLnJpZ2h0LHM9ZS50b3AsbD1lLmJvdHRvbSxjPTAsdT10LmdldFRvdGFsTGVuZ3RoKCksaD11O2Z1bmN0aW9uIGYoZSl7dmFyIHI9dC5nZXRQb2ludEF0TGVuZ3RoKGUpOzA9PT1lP249cjplPT09dSYmKGk9cik7dmFyIGM9ci54PGE/YS1yLng6ci54Pm8/ci54LW86MCxoPXIueTxzP3Mtci55OnIueT5sP3IueS1sOjA7cmV0dXJuIE1hdGguc3FydChjKmMraCpoKX1mb3IodmFyIHA9ZihjKTtwOyl7aWYoKGMrPXArcik+aClyZXR1cm47cD1mKGMpfWZvcihwPWYoaCk7cDspe2lmKGM+KGgtPXArcikpcmV0dXJuO3A9ZihoKX1yZXR1cm57bWluOmMsbWF4OmgsbGVuOmgtYyx0b3RhbDp1LGlzQ2xvc2VkOjA9PT1jJiZoPT09dSYmTWF0aC5hYnMobi54LWkueCk8LjEmJk1hdGguYWJzKG4ueS1pLnkpPC4xfX0sci5maW5kUG9pbnRPblBhdGg9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpLGEsbyxzPShuPW58fHt9KS5wYXRoTGVuZ3RofHx0LmdldFRvdGFsTGVuZ3RoKCksbD1uLnRvbGVyYW5jZXx8LjAwMSxjPW4uaXRlcmF0aW9uTGltaXR8fDMwLHU9dC5nZXRQb2ludEF0TGVuZ3RoKDApW3JdPnQuZ2V0UG9pbnRBdExlbmd0aChzKVtyXT8tMToxLGg9MCxmPTAscD1zO2g8Yzspe2lmKGk9KGYrcCkvMixvPShhPXQuZ2V0UG9pbnRBdExlbmd0aChpKSlbcl0tZSxNYXRoLmFicyhvKTxsKXJldHVybiBhO3Uqbz4wP3A9aTpmPWksaCsrfXJldHVybiBhfX0seyIuL21vZCI6NzU3fV0sNzQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCJjb2xvci1ub3JtYWxpemUiKSxvPXQoIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikuZGVmYXVsdExpbmUsbD10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheSxjPWEocyk7ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQ7cmV0dXJuIHJbM10qPWUscn1mdW5jdGlvbiBoKHQpe2lmKG4odCkpcmV0dXJuIGM7dmFyIGU9YSh0KTtyZXR1cm4gZS5sZW5ndGg/ZTpjfWZ1bmN0aW9uIGYodCl7cmV0dXJuIG4odCk/dDoxfWUuZXhwb3J0cz17Zm9ybWF0Q29sb3I6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGkscyxwLGQsZz10LmNvbG9yLG09bChnKSx2PWwoZSkseT1vLmV4dHJhY3RPcHRzKHQpLHg9W107aWYobj12b2lkIDAhPT15LmNvbG9yc2NhbGU/by5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2UodCk6aCxpPW0/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT9jOmEobih0W2VdKSl9Omgscz12P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/MTpmKHRbZV0pfTpmLG18fHYpZm9yKHZhciBiPTA7YjxyO2IrKylwPWkoZyxiKSxkPXMoZSxiKSx4W2JdPXUocCxkKTtlbHNlIHg9dShhKGcpLGUpO3JldHVybiB4fSxwYXJzZUNvbG9yU2NhbGU6ZnVuY3Rpb24odCl7dmFyIGU9by5leHRyYWN0T3B0cyh0KSxyPWUuY29sb3JzY2FsZTtyZXR1cm4gZS5yZXZlcnNlc2NhbGUmJihyPW8uZmxpcFNjYWxlKGUuY29sb3JzY2FsZSkpLHIubWFwKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9aSh0WzFdKS50b1JnYigpO3JldHVybntpbmRleDplLHJnYjpbci5yLHIuZyxyLmIsci5hXX19KSl9fX0seyIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYxNCwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjcsIi4vYXJyYXkiOjczMiwiY29sb3Itbm9ybWFsaXplIjoxMjUsImZhc3QtaXNudW1lcmljIjoyNDEsdGlueWNvbG9yMjo1NDh9XSw3NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pZGVudGl0eSIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuW3RdfWUuZXhwb3J0cz17a2V5RnVuOmZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0scmVwZWF0OmksZGVzY2VuZDpuLHdyYXA6aSx1bndyYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19fX0seyIuL2lkZW50aXR5Ijo3NDh9XSw3NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0se31dLDc0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gdDt2YXIgcj0xL01hdGguYWJzKGUpLG49cj4xPyhyKnQrciplKS9yOnQrZSxpPVN0cmluZyhuKS5sZW5ndGg7aWYoaT4xNil7dmFyIGE9U3RyaW5nKGUpLmxlbmd0aDtpZihpPj1TdHJpbmcodCkubGVuZ3RoK2Epe3ZhciBvPXBhcnNlRmxvYXQobikudG9QcmVjaXNpb24oMTIpOy0xPT09by5pbmRleE9mKCJlKyIpJiYobj0rbyl9fXJldHVybiBufX0se31dLDc1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZDMtdGltZS1mb3JtYXQiKS51dGNGb3JtYXQsYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLHM9by5GUF9TQUZFLGw9by5CQUROVU0sYz1lLmV4cG9ydHM9e307Yy5uZXN0ZWRQcm9wZXJ0eT10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGMua2V5ZWRDb250YWluZXI9dCgiLi9rZXllZF9jb250YWluZXIiKSxjLnJlbGF0aXZlQXR0cj10KCIuL3JlbGF0aXZlX2F0dHIiKSxjLmlzUGxhaW5PYmplY3Q9dCgiLi9pc19wbGFpbl9vYmplY3QiKSxjLnRvTG9nUmFuZ2U9dCgiLi90b19sb2dfcmFuZ2UiKSxjLnJlbGlua1ByaXZhdGVLZXlzPXQoIi4vcmVsaW5rX3ByaXZhdGUiKTt2YXIgdT10KCIuL2FycmF5Iik7Yy5pc1R5cGVkQXJyYXk9dS5pc1R5cGVkQXJyYXksYy5pc0FycmF5T3JUeXBlZEFycmF5PXUuaXNBcnJheU9yVHlwZWRBcnJheSxjLmlzQXJyYXkxRD11LmlzQXJyYXkxRCxjLmVuc3VyZUFycmF5PXUuZW5zdXJlQXJyYXksYy5jb25jYXQ9dS5jb25jYXQsYy5tYXhSb3dMZW5ndGg9dS5tYXhSb3dMZW5ndGgsYy5taW5Sb3dMZW5ndGg9dS5taW5Sb3dMZW5ndGg7dmFyIGg9dCgiLi9tb2QiKTtjLm1vZD1oLm1vZCxjLm1vZEhhbGY9aC5tb2RIYWxmO3ZhciBmPXQoIi4vY29lcmNlIik7Yy52YWxPYmplY3RNZXRhPWYudmFsT2JqZWN0TWV0YSxjLmNvZXJjZT1mLmNvZXJjZSxjLmNvZXJjZTI9Zi5jb2VyY2UyLGMuY29lcmNlRm9udD1mLmNvZXJjZUZvbnQsYy5jb2VyY2VIb3ZlcmluZm89Zi5jb2VyY2VIb3ZlcmluZm8sYy5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5PWYuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eSxjLnZhbGlkYXRlPWYudmFsaWRhdGU7dmFyIHA9dCgiLi9kYXRlcyIpO2MuZGF0ZVRpbWUybXM9cC5kYXRlVGltZTJtcyxjLmlzRGF0ZVRpbWU9cC5pc0RhdGVUaW1lLGMubXMyRGF0ZVRpbWU9cC5tczJEYXRlVGltZSxjLm1zMkRhdGVUaW1lTG9jYWw9cC5tczJEYXRlVGltZUxvY2FsLGMuY2xlYW5EYXRlPXAuY2xlYW5EYXRlLGMuaXNKU0RhdGU9cC5pc0pTRGF0ZSxjLmZvcm1hdERhdGU9cC5mb3JtYXREYXRlLGMuaW5jcmVtZW50TW9udGg9cC5pbmNyZW1lbnRNb250aCxjLmRhdGVUaWNrMD1wLmRhdGVUaWNrMCxjLmRmbHRSYW5nZT1wLmRmbHRSYW5nZSxjLmZpbmRFeGFjdERhdGVzPXAuZmluZEV4YWN0RGF0ZXMsYy5NSU5fTVM9cC5NSU5fTVMsYy5NQVhfTVM9cC5NQVhfTVM7dmFyIGQ9dCgiLi9zZWFyY2giKTtjLmZpbmRCaW49ZC5maW5kQmluLGMuc29ydGVyQXNjPWQuc29ydGVyQXNjLGMuc29ydGVyRGVzPWQuc29ydGVyRGVzLGMuZGlzdGluY3RWYWxzPWQuZGlzdGluY3RWYWxzLGMucm91bmRVcD1kLnJvdW5kVXAsYy5zb3J0PWQuc29ydCxjLmZpbmRJbmRleE9mTWluPWQuZmluZEluZGV4T2ZNaW47dmFyIGc9dCgiLi9zdGF0cyIpO2MuYWdnTnVtcz1nLmFnZ051bXMsYy5sZW49Zy5sZW4sYy5tZWFuPWcubWVhbixjLm1lZGlhbj1nLm1lZGlhbixjLm1pZFJhbmdlPWcubWlkUmFuZ2UsYy52YXJpYW5jZT1nLnZhcmlhbmNlLGMuc3RkZXY9Zy5zdGRldixjLmludGVycD1nLmludGVycDt2YXIgbT10KCIuL21hdHJpeCIpO2MuaW5pdDJkQXJyYXk9bS5pbml0MmRBcnJheSxjLnRyYW5zcG9zZVJhZ2dlZD1tLnRyYW5zcG9zZVJhZ2dlZCxjLmRvdD1tLmRvdCxjLnRyYW5zbGF0aW9uTWF0cml4PW0udHJhbnNsYXRpb25NYXRyaXgsYy5yb3RhdGlvbk1hdHJpeD1tLnJvdGF0aW9uTWF0cml4LGMucm90YXRpb25YWU1hdHJpeD1tLnJvdGF0aW9uWFlNYXRyaXgsYy5hcHBseTJEVHJhbnNmb3JtPW0uYXBwbHkyRFRyYW5zZm9ybSxjLmFwcGx5MkRUcmFuc2Zvcm0yPW0uYXBwbHkyRFRyYW5zZm9ybTI7dmFyIHY9dCgiLi9hbmdsZXMiKTtjLmRlZzJyYWQ9di5kZWcycmFkLGMucmFkMmRlZz12LnJhZDJkZWcsYy5hbmdsZURlbHRhPXYuYW5nbGVEZWx0YSxjLmFuZ2xlRGlzdD12LmFuZ2xlRGlzdCxjLmlzRnVsbENpcmNsZT12LmlzRnVsbENpcmNsZSxjLmlzQW5nbGVJbnNpZGVTZWN0b3I9di5pc0FuZ2xlSW5zaWRlU2VjdG9yLGMuaXNQdEluc2lkZVNlY3Rvcj12LmlzUHRJbnNpZGVTZWN0b3IsYy5wYXRoQXJjPXYucGF0aEFyYyxjLnBhdGhTZWN0b3I9di5wYXRoU2VjdG9yLGMucGF0aEFubnVsdXM9di5wYXRoQW5udWx1czt2YXIgeT10KCIuL2FuY2hvcl91dGlscyIpO2MuaXNMZWZ0QW5jaG9yPXkuaXNMZWZ0QW5jaG9yLGMuaXNDZW50ZXJBbmNob3I9eS5pc0NlbnRlckFuY2hvcixjLmlzUmlnaHRBbmNob3I9eS5pc1JpZ2h0QW5jaG9yLGMuaXNUb3BBbmNob3I9eS5pc1RvcEFuY2hvcixjLmlzTWlkZGxlQW5jaG9yPXkuaXNNaWRkbGVBbmNob3IsYy5pc0JvdHRvbUFuY2hvcj15LmlzQm90dG9tQW5jaG9yO3ZhciB4PXQoIi4vZ2VvbWV0cnkyZCIpO2Muc2VnbWVudHNJbnRlcnNlY3Q9eC5zZWdtZW50c0ludGVyc2VjdCxjLnNlZ21lbnREaXN0YW5jZT14LnNlZ21lbnREaXN0YW5jZSxjLmdldFRleHRMb2NhdGlvbj14LmdldFRleHRMb2NhdGlvbixjLmNsZWFyTG9jYXRpb25DYWNoZT14LmNsZWFyTG9jYXRpb25DYWNoZSxjLmdldFZpc2libGVTZWdtZW50PXguZ2V0VmlzaWJsZVNlZ21lbnQsYy5maW5kUG9pbnRPblBhdGg9eC5maW5kUG9pbnRPblBhdGg7dmFyIGI9dCgiLi9leHRlbmQiKTtjLmV4dGVuZEZsYXQ9Yi5leHRlbmRGbGF0LGMuZXh0ZW5kRGVlcD1iLmV4dGVuZERlZXAsYy5leHRlbmREZWVwQWxsPWIuZXh0ZW5kRGVlcEFsbCxjLmV4dGVuZERlZXBOb0FycmF5cz1iLmV4dGVuZERlZXBOb0FycmF5czt2YXIgXz10KCIuL2xvZ2dlcnMiKTtjLmxvZz1fLmxvZyxjLndhcm49Xy53YXJuLGMuZXJyb3I9Xy5lcnJvcjt2YXIgdz10KCIuL3JlZ2V4Iik7Yy5jb3VudGVyUmVnZXg9dy5jb3VudGVyO3ZhciBUPXQoIi4vdGhyb3R0bGUiKTtjLnRocm90dGxlPVQudGhyb3R0bGUsYy50aHJvdHRsZURvbmU9VC5kb25lLGMuY2xlYXJUaHJvdHRsZT1ULmNsZWFyO3ZhciBrPXQoIi4vZG9tIik7ZnVuY3Rpb24gTSh0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdClmb3IodmFyIG49dFtyXSxpPTA7aTxuLmxlbmd0aDtpKyspZVtuW2ldXT0rcjtyZXR1cm4gZX1jLmdldEdyYXBoRGl2PWsuZ2V0R3JhcGhEaXYsYy5pc1Bsb3REaXY9ay5pc1Bsb3REaXYsYy5yZW1vdmVFbGVtZW50PWsucmVtb3ZlRWxlbWVudCxjLmFkZFN0eWxlUnVsZT1rLmFkZFN0eWxlUnVsZSxjLmFkZFJlbGF0ZWRTdHlsZVJ1bGU9ay5hZGRSZWxhdGVkU3R5bGVSdWxlLGMuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZT1rLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUsYy5jbGVhclJlc3BvbnNpdmU9dCgiLi9jbGVhcl9yZXNwb25zaXZlIiksYy5tYWtlVHJhY2VHcm91cHM9dCgiLi9tYWtlX3RyYWNlX2dyb3VwcyIpLGMuXz10KCIuL2xvY2FsaXplIiksYy5ub3RpZmllcj10KCIuL25vdGlmaWVyIiksYy5maWx0ZXJVbmlxdWU9dCgiLi9maWx0ZXJfdW5pcXVlIiksYy5maWx0ZXJWaXNpYmxlPXQoIi4vZmlsdGVyX3Zpc2libGUiKSxjLnB1c2hVbmlxdWU9dCgiLi9wdXNoX3VuaXF1ZSIpLGMuaW5jcmVtZW50PXQoIi4vaW5jcmVtZW50IiksYy5jbGVhbk51bWJlcj10KCIuL2NsZWFuX251bWJlciIpLGMuZW5zdXJlTnVtYmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpPyh0PU51bWJlcih0KSk8LXN8fHQ+cz9sOmEodCk/TnVtYmVyKHQpOmw6bH0sYy5pc0luZGV4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuISh2b2lkIDAhPT1lJiZ0Pj1lKSYmKGEodCkmJnQ+PTAmJnQlMT09MCl9LGMubm9vcD10KCIuL25vb3AiKSxjLmlkZW50aXR5PXQoIi4vaWRlbnRpdHkiKSxjLnJlcGVhdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT10O3JldHVybiByfSxjLnN3YXBBdHRycz1mdW5jdGlvbih0LGUscixuKXtyfHwocj0ieCIpLG58fChuPSJ5Iik7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV0sbz1jLm5lc3RlZFByb3BlcnR5KHQsYS5yZXBsYWNlKCI/IixyKSkscz1jLm5lc3RlZFByb3BlcnR5KHQsYS5yZXBsYWNlKCI/IixuKSksbD1vLmdldCgpO28uc2V0KHMuZ2V0KCkpLHMuc2V0KGwpfX0sYy5yYWlzZVRvVG9wPWZ1bmN0aW9uKHQpe3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0KX0sYy5jYW5jZWxUcmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKX0sYy5jb25zdHJhaW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPnI/TWF0aC5tYXgocixNYXRoLm1pbihlLHQpKTpNYXRoLm1heChlLE1hdGgubWluKHIsdCkpfSxjLmJCb3hJbnRlcnNlY3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiByPXJ8fDAsdC5sZWZ0PD1lLnJpZ2h0K3ImJmUubGVmdDw9dC5yaWdodCtyJiZ0LnRvcDw9ZS5ib3R0b20rciYmZS50b3A8PXQuYm90dG9tK3J9LGMuc2ltcGxlTWFwPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPXQubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9MDtzPGE7cysrKW9bc109ZSh0W3NdLHIsbixpKTtyZXR1cm4gb30sYy5yYW5kc3RyPWZ1bmN0aW9uIHQoZSxyLG4saSl7aWYobnx8KG49MTYpLHZvaWQgMD09PXImJihyPTI0KSxyPD0wKXJldHVybiIwIjt2YXIgYSxvLHM9TWF0aC5sb2coTWF0aC5wb3coMixyKSkvTWF0aC5sb2cobiksbD0iIjtmb3IoYT0yO3M9PT0xLzA7YSo9MilzPU1hdGgubG9nKE1hdGgucG93KDIsci9hKSkvTWF0aC5sb2cobikqYTt2YXIgdT1zLU1hdGguZmxvb3Iocyk7Zm9yKGE9MDthPE1hdGguZmxvb3Iocyk7YSsrKWw9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm4pLnRvU3RyaW5nKG4pK2w7dSYmKG89TWF0aC5wb3cobix1KSxsPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvKS50b1N0cmluZyhuKStsKTt2YXIgaD1wYXJzZUludChsLG4pO3JldHVybiBlJiZlW2xdfHxoIT09MS8wJiZoPj1NYXRoLnBvdygyLHIpP2k+MTA/KGMud2FybigicmFuZHN0ciBmYWlsZWQgdW5pcXVlbmVzcyIpLGwpOnQoZSxyLG4sKGl8fDApKzEpOmx9LGMuT3B0aW9uQ29udHJvbD1mdW5jdGlvbih0LGUpe3R8fCh0PXt9KSxlfHwoZT0ib3B0Iik7dmFyIHI9e29wdGlvbkxpc3Q6W10sX25ld29wdGlvbjpmdW5jdGlvbihuKXtuW2VdPXQscltuLm5hbWVdPW4sci5vcHRpb25MaXN0LnB1c2gobil9fTtyZXR1cm4gclsiXyIrZV09dCxyfSxjLnNtb290aD1mdW5jdGlvbih0LGUpe2lmKChlPU1hdGgucm91bmQoZSl8fDApPDIpcmV0dXJuIHQ7dmFyIHIsbixpLGEsbz10Lmxlbmd0aCxzPTIqbyxsPTIqZS0xLGM9bmV3IEFycmF5KGwpLHU9bmV3IEFycmF5KG8pO2ZvcihyPTA7cjxsO3IrKyljW3JdPSgxLU1hdGguY29zKE1hdGguUEkqKHIrMSkvZSkpLygyKmUpO2ZvcihyPTA7cjxvO3IrKyl7Zm9yKGE9MCxuPTA7bjxsO24rKykoaT1yK24rMS1lKTwtbz9pLT1zKk1hdGgucm91bmQoaS9zKTppPj1zJiYoaS09cypNYXRoLmZsb29yKGkvcykpLGk8MD9pPS0xLWk6aT49byYmKGk9cy0xLWkpLGErPXRbaV0qY1tuXTt1W3JdPWF9cmV0dXJuIHV9LGMuc3luY09yQXN5bmM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2Z1bmN0aW9uIGkoKXtyZXR1cm4gYy5zeW5jT3JBc3luYyh0LGUscil9Zm9yKDt0Lmxlbmd0aDspaWYoKG49KDAsdC5zcGxpY2UoMCwxKVswXSkoZSkpJiZuLnRoZW4pcmV0dXJuIG4udGhlbihpKS50aGVuKHZvaWQgMCxjLnByb21pc2VFcnJvcik7cmV0dXJuIHImJnIoZSl9LGMuc3RyaXBUcmFpbGluZ1NsYXNoPWZ1bmN0aW9uKHQpe3JldHVybiIvIj09PXQuc3Vic3RyKC0xKT90LnN1YnN0cigwLHQubGVuZ3RoLTEpOnR9LGMubm9uZU9yQWxsPWZ1bmN0aW9uKHQsZSxyKXtpZih0KXt2YXIgbixpPSExLGE9ITA7Zm9yKG49MDtuPHIubGVuZ3RoO24rKyludWxsIT10W3Jbbl1dP2k9ITA6YT0hMTtpZihpJiYhYSlmb3Iobj0wO248ci5sZW5ndGg7bisrKXRbcltuXV09ZVtyW25dXX19LGMubWVyZ2VBcnJheT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0iZnVuY3Rpb24iPT10eXBlb2YgbjtpZihjLmlzQXJyYXlPclR5cGVkQXJyYXkodCkpZm9yKHZhciBhPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxvPTA7bzxhO28rKyl7dmFyIHM9dFtvXTtlW29dW3JdPWk/bihzKTpzfX0sYy5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYy5tZXJnZUFycmF5KHQsZSxyLChmdW5jdGlvbih0KXt2YXIgZT0rdDtyZXR1cm4gaXNGaW5pdGUoZSkmJmU+MD9lOjB9KSl9LGMuZmlsbEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKG49bnx8Yy5pZGVudGl0eSxjLmlzQXJyYXlPclR5cGVkQXJyYXkodCkpZm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspZVtpXVtyXT1uKHRbaV0pfSxjLmNhc3RPcHRpb249ZnVuY3Rpb24odCxlLHIsbil7bj1ufHxjLmlkZW50aXR5O3ZhciBpPWMubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKTtyZXR1cm4gYy5pc0FycmF5T3JUeXBlZEFycmF5KGkpP0FycmF5LmlzQXJyYXkoZSkmJmMuaXNBcnJheU9yVHlwZWRBcnJheShpW2VbMF1dKT9uKGlbZVswXV1bZVsxXV0pOm4oaVtlXSk6aX0sYy5leHRyYWN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHIgaW4gdClyZXR1cm4gdFtyXTt2YXIgaT1jLm5lc3RlZFByb3BlcnR5KGUsbikuZ2V0KCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dm9pZCAwOml9LGMudGFnU2VsZWN0ZWQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLnNlbGVjdGVkcG9pbnRzLG89ZS5faW5kZXhUb1BvaW50cztvJiYobj1NKG8pKTtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXTtpZihjLmlzSW5kZXgobCl8fGMuaXNBcnJheU9yVHlwZWRBcnJheShsKSYmYy5pc0luZGV4KGxbMF0pJiZjLmlzSW5kZXgobFsxXSkpe3ZhciB1PW4/bltsXTpsLGg9cj9yW3VdOnU7dm9pZCAwIT09KGk9aCkmJmk8dC5sZW5ndGgmJih0W2hdLnNlbGVjdGVkPTEpfX19LGMuc2VsSW5kaWNlczJzZWxQb2ludHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RlZHBvaW50cyxyPXQuX2luZGV4VG9Qb2ludHM7aWYocil7Zm9yKHZhciBuPU0ociksaT1bXSxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPWVbYV07aWYoYy5pc0luZGV4KG8pKXt2YXIgcz1uW29dO2MuaXNJbmRleChzKSYmaS5wdXNoKHMpfX1yZXR1cm4gaX1yZXR1cm4gZX0sYy5nZXRUYXJnZXRBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPWUudGFyZ2V0O2lmKCJzdHJpbmciPT10eXBlb2YgciYmcil7dmFyIG49Yy5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpO3JldHVybiEhQXJyYXkuaXNBcnJheShuKSYmbn1yZXR1cm4hIUFycmF5LmlzQXJyYXkocikmJnJ9LGMubWluRXh0ZW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307Im9iamVjdCIhPXR5cGVvZiBlJiYoZT17fSk7dmFyIG4saSxhLG89T2JqZWN0LmtleXModCk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylhPXRbaT1vW25dXSwiXyIhPT1pLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGEmJigibW9kdWxlIj09PWk/cltpXT1hOkFycmF5LmlzQXJyYXkoYSk/cltpXT0iY29sb3JzY2FsZSI9PT1pP2Euc2xpY2UoKTphLnNsaWNlKDAsMyk6Yy5pc1R5cGVkQXJyYXkoYSk/cltpXT1hLnN1YmFycmF5KDAsMyk6cltpXT1hJiYib2JqZWN0Ij09dHlwZW9mIGE/Yy5taW5FeHRlbmQodFtpXSxlW2ldKTphKTtmb3Iobz1PYmplY3Qua2V5cyhlKSxuPTA7bjxvLmxlbmd0aDtuKyspIm9iamVjdCI9PXR5cGVvZihhPWVbaT1vW25dXSkmJmkgaW4gciYmIm9iamVjdCI9PXR5cGVvZiByW2ldfHwocltpXT1hKTtyZXR1cm4gcn0sYy50aXRsZUNhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSl9LGMuY29udGFpbnNBbnk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZigtMSE9PXQuaW5kZXhPZihlW3JdKSlyZXR1cm4hMDtyZXR1cm4hMX0sYy5pc0lFPWZ1bmN0aW9uKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2J9O3ZhciBBPS9NU0lFIFsxLTldXC4vO2MuaXNJRTlvckJlbG93PWZ1bmN0aW9uKCl7cmV0dXJuIGMuaXNJRSgpJiZBLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpfTt2YXIgUz0vVmVyc2lvblwvW1xkXC5dKy4qU2FmYXJpLztjLmlzU2FmYXJpPWZ1bmN0aW9uKCl7cmV0dXJuIFMudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCl9O3ZhciBFPS9pUGFkfGlQaG9uZXxpUG9kLztjLmlzSU9TPWZ1bmN0aW9uKCl7cmV0dXJuIEUudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCl9LGMuaXNEM1NlbGVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY2xhc3NlZH0sYy5lbnN1cmVTaW5nbGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5zZWxlY3QoZSsocj8iLiIrcjoiIikpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpO3JldHVybiByJiZhLmNsYXNzZWQociwhMCksbiYmYS5jYWxsKG4pLGF9LGMuZW5zdXJlU2luZ2xlQnlJZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnNlbGVjdChlKyIjIityKTtpZihpLnNpemUoKSlyZXR1cm4gaTt2YXIgYT10LmFwcGVuZChlKS5hdHRyKCJpZCIscik7cmV0dXJuIG4mJmEuY2FsbChuKSxhfSxjLm9iamVjdEZyb21QYXRoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5zcGxpdCgiLiIpLGk9cj17fSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV0scz1udWxsLGw9blthXS5tYXRjaCgvKC4qKVxbKFswLTldKylcXS8pO2w/KG89bFsxXSxzPWxbMl0scj1yW29dPVtdLGE9PT1uLmxlbmd0aC0xP3Jbc109ZTpyW3NdPXt9LHI9cltzXSk6KGE9PT1uLmxlbmd0aC0xP3Jbb109ZTpyW29dPXt9LHI9cltvXSl9cmV0dXJuIGl9O3ZhciBDPS9eKFteXFtcLl0rKVwuKC4rKT8vLEw9L14oW15cLl0rKVxbKFswLTldKylcXShcLik/KC4rKT8vO2MuZXhwYW5kT2JqZWN0UGF0aHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSlmb3IociBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJigoZT1yLm1hdGNoKEMpKT8oaT10W3JdLG49ZVsxXSxkZWxldGUgdFtyXSx0W25dPWMuZXh0ZW5kRGVlcE5vQXJyYXlzKHRbbl18fHt9LGMub2JqZWN0RnJvbVBhdGgocixjLmV4cGFuZE9iamVjdFBhdGhzKGkpKVtuXSkpOihlPXIubWF0Y2goTCkpPyhpPXRbcl0sbj1lWzFdLGE9cGFyc2VJbnQoZVsyXSksZGVsZXRlIHRbcl0sdFtuXT10W25dfHxbXSwiLiI9PT1lWzNdPyhzPWVbNF0sbz10W25dW2FdPXRbbl1bYV18fHt9LGMuZXh0ZW5kRGVlcE5vQXJyYXlzKG8sYy5vYmplY3RGcm9tUGF0aChzLGMuZXhwYW5kT2JqZWN0UGF0aHMoaSkpKSk6dFtuXVthXT1jLmV4cGFuZE9iamVjdFBhdGhzKGkpKTp0W3JdPWMuZXhwYW5kT2JqZWN0UGF0aHModFtyXSkpO3JldHVybiB0fSxjLm51bVNlcGFyYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihyfHwocj0hMSksInN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTZXBhcmF0b3Igc3RyaW5nIHJlcXVpcmVkIGZvciBmb3JtYXR0aW5nISIpOyJudW1iZXIiPT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKTt2YXIgbj0vKFxkKykoXGR7M30pLyxpPWUuY2hhckF0KDApLGE9ZS5jaGFyQXQoMSksbz10LnNwbGl0KCIuIikscz1vWzBdLGw9by5sZW5ndGg+MT9pK29bMV06IiI7aWYoYSYmKG8ubGVuZ3RoPjF8fHMubGVuZ3RoPjR8fHIpKWZvcig7bi50ZXN0KHMpOylzPXMucmVwbGFjZShuLCIkMSIrYSsiJDIiKTtyZXR1cm4gcytsfSxjLlRFTVBMQVRFX1NUUklOR19SRUdFWD0vJXsoW15ccyV7fTpdKikoWzp8XHxdW159XSopP30vZzt2YXIgUD0vXlx3KiQvO2MudGVtcGxhdGVTdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyZXR1cm4gdC5yZXBsYWNlKGMuVEVNUExBVEVfU1RSSU5HX1JFR0VYLChmdW5jdGlvbih0LG4pe3ZhciBpO3JldHVybiBQLnRlc3Qobik/aT1lW25dOihyW25dPXJbbl18fGMubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQsaT1yW25dKCkpLGMuaXNWYWxpZFRleHRWYWx1ZShpKT9pOiIifSkpfTt2YXIgST17bWF4OjEwLGNvdW50OjAsbmFtZToiaG92ZXJ0ZW1wbGF0ZSJ9O2MuaG92ZXJ0ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiBELmFwcGx5KEksYXJndW1lbnRzKX07dmFyIHo9e21heDoxMCxjb3VudDowLG5hbWU6InRleHR0ZW1wbGF0ZSJ9O2MudGV4dHRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEQuYXBwbHkoeixhcmd1bWVudHMpfTt2YXIgTz0vXls6fFx8XS87ZnVuY3Rpb24gRCh0LGUscil7dmFyIGE9dGhpcyxvPWFyZ3VtZW50cztlfHwoZT17fSk7dmFyIHM9e307cmV0dXJuIHQucmVwbGFjZShjLlRFTVBMQVRFX1NUUklOR19SRUdFWCwoZnVuY3Rpb24odCxsLHUpe3ZhciBoLGYscCxkO2ZvcihwPTM7cDxvLmxlbmd0aDtwKyspaWYoaD1vW3BdKXtpZihoLmhhc093blByb3BlcnR5KGwpKXtmPWhbbF07YnJlYWt9aWYoUC50ZXN0KGwpfHwoZj1zW2xdfHxjLm5lc3RlZFByb3BlcnR5KGgsbCkuZ2V0KCkpJiYoc1tsXT1mKSx2b2lkIDAhPT1mKWJyZWFrfWlmKHZvaWQgMD09PWYmJmEpcmV0dXJuIGEuY291bnQ8YS5tYXgmJihjLndhcm4oIlZhcmlhYmxlICciK2wrIicgaW4gIithLm5hbWUrIiBjb3VsZCBub3QgYmUgZm91bmQhIiksZj10KSxhLmNvdW50PT09YS5tYXgmJmMud2FybigiVG9vIG1hbnkgIithLm5hbWUrIiB3YXJuaW5ncyAtIGFkZGl0aW9uYWwgd2FybmluZ3Mgd2lsbCBiZSBzdXBwcmVzc2VkIiksYS5jb3VudCsrLHQ7aWYodSl7aWYoIjoiPT09dVswXSYmKGY9KGQ9cj9yLm51bWJlckZvcm1hdDpuLmZvcm1hdCkodS5yZXBsYWNlKE8sIiIpKShmKSksInwiPT09dVswXSl7ZD1yP3IudGltZUZvcm1hdDppO3ZhciBnPWMuZGF0ZVRpbWUybXMoZik7Zj1jLmZvcm1hdERhdGUoZyx1LnJlcGxhY2UoTywiIiksITEsZCl9fWVsc2UgZS5oYXNPd25Qcm9wZXJ0eShsKyJMYWJlbCIpJiYoZj1lW2wrIkxhYmVsIl0pO3JldHVybiBmfSkpfWMuc3VicGxvdFNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpKzEsbj0wLGk9MCxhPTA7YTxyO2ErKyl7dmFyIG89dC5jaGFyQ29kZUF0KGEpfHwwLHM9ZS5jaGFyQ29kZUF0KGEpfHwwLGw9bz49NDgmJm88PTU3LGM9cz49NDgmJnM8PTU3O2lmKGwmJihuPTEwKm4rby00OCksYyYmKGk9MTAqaStzLTQ4KSwhbHx8IWMpe2lmKG4hPT1pKXJldHVybiBuLWk7aWYobyE9PXMpcmV0dXJuIG8tc319cmV0dXJuIGktbn07dmFyIFI9MmU5O2Muc2VlZFBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe1I9MmU5fSxjLnBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe3ZhciB0PVI7cmV0dXJuIFI9KDY5MDY5KlIrMSklNDI5NDk2NzI5NixNYXRoLmFicyhSLXQpPDQyOTQ5NjcyOT9jLnBzZXVkb1JhbmRvbSgpOlIvNDI5NDk2NzI5Nn0sYy5maWxsVGV4dD1mdW5jdGlvbih0LGUscil7dmFyIG49QXJyYXkuaXNBcnJheShyKT9mdW5jdGlvbih0KXtyLnB1c2godCl9OmZ1bmN0aW9uKHQpe3IudGV4dD10fSxpPWMuZXh0cmFjdE9wdGlvbih0LGUsImh0eCIsImhvdmVydGV4dCIpO2lmKGMuaXNWYWxpZFRleHRWYWx1ZShpKSlyZXR1cm4gbihpKTt2YXIgYT1jLmV4dHJhY3RPcHRpb24odCxlLCJ0eCIsInRleHQiKTtyZXR1cm4gYy5pc1ZhbGlkVGV4dFZhbHVlKGEpP24oYSk6dm9pZCAwfSxjLmlzVmFsaWRUZXh0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHR8fDA9PT10fSxjLmZvcm1hdFBlcmNlbnQ9ZnVuY3Rpb24odCxlKXtlPWV8fDA7Zm9yKHZhciByPShNYXRoLnJvdW5kKDEwMCp0Kk1hdGgucG93KDEwLGUpKSpNYXRoLnBvdyguMSxlKSkudG9GaXhlZChlKSsiJSIsbj0wO248ZTtuKyspLTEhPT1yLmluZGV4T2YoIi4iKSYmKHI9KHI9ci5yZXBsYWNlKCIwJSIsIiUiKSkucmVwbGFjZSgiLiUiLCIlIikpO3JldHVybiByfSxjLmlzSGlkZGVuPWZ1bmN0aW9uKHQpe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmRpc3BsYXk7cmV0dXJuIWV8fCJub25lIj09PWV9LGMuZ2V0VGV4dFRyYW5zZm9ybT1mdW5jdGlvbih0KXt2YXIgZT10Lm5vQ2VudGVyLHI9dC50ZXh0WCxuPXQudGV4dFksaT10LnRhcmdldFgsYT10LnRhcmdldFksbz10LmFuY2hvclh8fDAscz10LmFuY2hvcll8fDAsbD10LnJvdGF0ZSxjPXQuc2NhbGU7cmV0dXJuIGM/Yz4xJiYoYz0xKTpjPTAsInRyYW5zbGF0ZSgiKyhpLWMqKHIrbykpKyIsIisoYS1jKihuK3MpKSsiKSIrKGM8MT8ic2NhbGUoIitjKyIpIjoiIikrKGw/InJvdGF0ZSgiK2wrKGU/IiI6IiAiK3IrIiAiK24pKyIpIjoiIil9LGMuZW5zdXJlVW5pZm9ybUZvbnRTaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Yy5leHRlbmRGbGF0KHt9LGUpO3JldHVybiByLnNpemU9TWF0aC5tYXgoZS5zaXplLHQuX2Z1bGxMYXlvdXQudW5pZm9ybXRleHQubWluc2l6ZXx8MCkscn0sYy5qb2luMj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5sZW5ndGg7cmV0dXJuIG4+MT90LnNsaWNlKDAsLTEpLmpvaW4oZSkrcit0W24tMV06dC5qb2luKGUpfX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4vYW5jaG9yX3V0aWxzIjo3MzAsIi4vYW5nbGVzIjo3MzEsIi4vYXJyYXkiOjczMiwiLi9jbGVhbl9udW1iZXIiOjczMywiLi9jbGVhcl9yZXNwb25zaXZlIjo3MzUsIi4vY29lcmNlIjo3MzYsIi4vZGF0ZXMiOjczNywiLi9kb20iOjczOCwiLi9leHRlbmQiOjc0MCwiLi9maWx0ZXJfdW5pcXVlIjo3NDEsIi4vZmlsdGVyX3Zpc2libGUiOjc0MiwiLi9nZW9tZXRyeTJkIjo3NDUsIi4vaWRlbnRpdHkiOjc0OCwiLi9pbmNyZW1lbnQiOjc0OSwiLi9pc19wbGFpbl9vYmplY3QiOjc1MSwiLi9rZXllZF9jb250YWluZXIiOjc1MiwiLi9sb2NhbGl6ZSI6NzUzLCIuL2xvZ2dlcnMiOjc1NCwiLi9tYWtlX3RyYWNlX2dyb3VwcyI6NzU1LCIuL21hdHJpeCI6NzU2LCIuL21vZCI6NzU3LCIuL25lc3RlZF9wcm9wZXJ0eSI6NzU4LCIuL25vb3AiOjc1OSwiLi9ub3RpZmllciI6NzYwLCIuL3B1c2hfdW5pcXVlIjo3NjQsIi4vcmVnZXgiOjc2NiwiLi9yZWxhdGl2ZV9hdHRyIjo3NjcsIi4vcmVsaW5rX3ByaXZhdGUiOjc2OCwiLi9zZWFyY2giOjc2OSwiLi9zdGF0cyI6NzcyLCIuL3Rocm90dGxlIjo3NzUsIi4vdG9fbG9nX3JhbmdlIjo3NzYsZDM6MTY5LCJkMy10aW1lLWZvcm1hdCI6MTY2LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNzUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gd2luZG93JiZ3aW5kb3cucHJvY2VzcyYmd2luZG93LnByb2Nlc3MudmVyc2lvbnM/IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk6IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkmJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PU9iamVjdC5wcm90b3R5cGV9fSx7fV0sNzUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksaT0vXlx3KiQvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGw7cj1yfHwibmFtZSIsYT1hfHwidmFsdWUiO3ZhciBjPXt9O2UmJmUubGVuZ3RoPyhsPW4odCxlKSxzPWwuZ2V0KCkpOnM9dCxlPWV8fCIiO3ZhciB1PXt9O2lmKHMpZm9yKG89MDtvPHMubGVuZ3RoO28rKyl1W3Nbb11bcl1dPW87dmFyIGg9aS50ZXN0KGEpLGY9e3NldDpmdW5jdGlvbih0LGUpe3ZhciBpPW51bGw9PT1lPzQ6MDtpZighcyl7aWYoIWx8fDQ9PT1pKXJldHVybjtzPVtdLGwuc2V0KHMpfXZhciBvPXVbdF07aWYodm9pZCAwPT09byl7aWYoND09PWkpcmV0dXJuO2l8PTMsbz1zLmxlbmd0aCx1W3RdPW99ZWxzZSBlIT09KGg/c1tvXVthXTpuKHNbb10sYSkuZ2V0KCkpJiYoaXw9Mik7dmFyIHA9c1tvXT1zW29dfHx7fTtyZXR1cm4gcFtyXT10LGg/cFthXT1lOm4ocCxhKS5zZXQoZSksbnVsbCE9PWUmJihpJj0tNSksY1tvXT1jW29dfGksZn0sZ2V0OmZ1bmN0aW9uKHQpe2lmKHMpe3ZhciBlPXVbdF07cmV0dXJuIHZvaWQgMD09PWU/dm9pZCAwOmg/c1tlXVthXTpuKHNbZV0sYSkuZ2V0KCl9fSxyZW5hbWU6ZnVuY3Rpb24odCxlKXt2YXIgbj11W3RdO3JldHVybiB2b2lkIDA9PT1ufHwoY1tuXT0xfGNbbl0sdVtlXT1uLGRlbGV0ZSB1W3RdLHNbbl1bcl09ZSksZn0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXVbdF07aWYodm9pZCAwPT09ZSlyZXR1cm4gZjt2YXIgaT1zW2VdO2lmKE9iamVjdC5rZXlzKGkpLmxlbmd0aD4yKXJldHVybiBjW2VdPTJ8Y1tlXSxmLnNldCh0LG51bGwpO2lmKGgpe2ZvcihvPWU7bzxzLmxlbmd0aDtvKyspY1tvXT0zfGNbb107Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyl1W3Nbb11bcl1dLS07cy5zcGxpY2UoZSwxKSxkZWxldGUgdVt0XX1lbHNlIG4oaSxhKS5zZXQobnVsbCksY1tlXT02fGNbZV07cmV0dXJuIGZ9LGNvbnN0cnVjdFVwZGF0ZTpmdW5jdGlvbigpe2Zvcih2YXIgdCxpLG89e30sbD1PYmplY3Qua2V5cyhjKSx1PTA7dTxsLmxlbmd0aDt1KyspaT1sW3VdLHQ9ZSsiWyIraSsiXSIsc1tpXT8oMSZjW2ldJiYob1t0KyIuIityXT1zW2ldW3JdKSwyJmNbaV0mJihvW3QrIi4iK2FdPWg/NCZjW2ldP251bGw6c1tpXVthXTo0JmNbaV0/bnVsbDpuKHNbaV0sYSkuZ2V0KCkpKTpvW3RdPW51bGw7cmV0dXJuIG99fTtyZXR1cm4gZn19LHsiLi9uZXN0ZWRfcHJvcGVydHkiOjc1OH1dLDc1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9jb250ZXh0LmxvY2FsZSxpPTA7aTwyO2krKyl7Zm9yKHZhciBhPXQuX2NvbnRleHQubG9jYWxlcyxvPTA7bzwyO28rKyl7dmFyIHM9KGFbcl18fHt9KS5kaWN0aW9uYXJ5O2lmKHMpe3ZhciBsPXNbZV07aWYobClyZXR1cm4gbH1hPW4ubG9jYWxlUmVnaXN0cnl9dmFyIGM9ci5zcGxpdCgiLSIpWzBdO2lmKGM9PT1yKWJyZWFrO3I9Y31yZXR1cm4gZX19LHsiLi4vcmVnaXN0cnkiOjg4Mn1dLDc1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLmRmbHRDb25maWcsaT10KCIuL25vdGlmaWVyIiksYT1lLmV4cG9ydHM9e307ZnVuY3Rpb24gbyh0LGUpe2lmKHQmJnQuYXBwbHkpdHJ5e3JldHVybiB2b2lkIHQuYXBwbHkoY29uc29sZSxlKX1jYXRjaCh0KXt9Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdHJ5e3QoZVtyXSl9Y2F0Y2godCl7Y29uc29sZS5sb2coZVtyXSl9fWEubG9nPWZ1bmN0aW9uKCl7dmFyIHQ7aWYobi5sb2dnaW5nPjEpe3ZhciBlPVsiTE9HOiJdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKTtvKGNvbnNvbGUudHJhY2V8fGNvbnNvbGUubG9nLGUpfWlmKG4ubm90aWZ5T25Mb2dnaW5nPjEpe3ZhciByPVtdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylyLnB1c2goYXJndW1lbnRzW3RdKTtpKHIuam9pbigiPGJyPiIpLCJsb25nIil9fSxhLndhcm49ZnVuY3Rpb24oKXt2YXIgdDtpZihuLmxvZ2dpbmc+MCl7dmFyIGU9WyJXQVJOOiJdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKTtvKGNvbnNvbGUudHJhY2V8fGNvbnNvbGUubG9nLGUpfWlmKG4ubm90aWZ5T25Mb2dnaW5nPjApe3ZhciByPVtdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylyLnB1c2goYXJndW1lbnRzW3RdKTtpKHIuam9pbigiPGJyPiIpLCJzdGljayIpfX0sYS5lcnJvcj1mdW5jdGlvbigpe3ZhciB0O2lmKG4ubG9nZ2luZz4wKXt2YXIgZT1bIkVSUk9SOiJdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKTtvKGNvbnNvbGUuZXJyb3IsZSl9aWYobi5ub3RpZnlPbkxvZ2dpbmc+MCl7dmFyIHI9W107Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXIucHVzaChhcmd1bWVudHNbdF0pO2koci5qb2luKCI8YnI+IiksInN0aWNrIil9fX0seyIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyI6Nzg2LCIuL25vdGlmaWVyIjo3NjB9XSw3NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuc2VsZWN0QWxsKCJnLiIrci5yZXBsYWNlKC9ccy9nLCIuIikpLmRhdGEoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpO2kuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsciksaS5vcmRlcigpO3ZhciBhPXQuY2xhc3NlZCgicmFuZ2VwbG90Iik/Im5vZGVSYW5nZVBsb3QzIjoibm9kZTMiO3JldHVybiBpLmVhY2goKGZ1bmN0aW9uKHQpe3RbMF1bYV09bi5zZWxlY3QodGhpcyl9KSksaX19LHtkMzoxNjl9XSw3NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5pbml0MmRBcnJheT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDtuKyspcltuXT1uZXcgQXJyYXkoZSk7cmV0dXJuIHJ9LHIudHJhbnNwb3NlUmFnZ2VkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0wLGk9dC5sZW5ndGg7Zm9yKGU9MDtlPGk7ZSsrKW49TWF0aC5tYXgobix0W2VdLmxlbmd0aCk7dmFyIGE9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuO2UrKylmb3IoYVtlXT1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspYVtlXVtyXT10W3JdW2VdO3JldHVybiBhfSxyLmRvdD1mdW5jdGlvbih0LGUpe2lmKCF0Lmxlbmd0aHx8IWUubGVuZ3RofHx0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiBudWxsO3ZhciBuLGksYT10Lmxlbmd0aDtpZih0WzBdLmxlbmd0aClmb3Iobj1uZXcgQXJyYXkoYSksaT0wO2k8YTtpKyspbltpXT1yLmRvdCh0W2ldLGUpO2Vsc2UgaWYoZVswXS5sZW5ndGgpe3ZhciBvPXIudHJhbnNwb3NlUmFnZ2VkKGUpO2ZvcihuPW5ldyBBcnJheShvLmxlbmd0aCksaT0wO2k8by5sZW5ndGg7aSsrKW5baV09ci5kb3QodCxvW2ldKX1lbHNlIGZvcihuPTAsaT0wO2k8YTtpKyspbis9dFtpXSplW2ldO3JldHVybiBufSxyLnRyYW5zbGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW1sxLDAsdF0sWzAsMSxlXSxbMCwwLDFdXX0sci5yb3RhdGlvbk1hdHJpeD1mdW5jdGlvbih0KXt2YXIgZT10Kk1hdGguUEkvMTgwO3JldHVybltbTWF0aC5jb3MoZSksLU1hdGguc2luKGUpLDBdLFtNYXRoLnNpbihlKSxNYXRoLmNvcyhlKSwwXSxbMCwwLDFdXX0sci5yb3RhdGlvblhZTWF0cml4PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5kb3Qoci5kb3Qoci50cmFuc2xhdGlvbk1hdHJpeChlLG4pLHIucm90YXRpb25NYXRyaXgodCkpLHIudHJhbnNsYXRpb25NYXRyaXgoLWUsLW4pKX0sci5hcHBseTJEVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50czszPT09ZS5sZW5ndGgmJihlPWVbMF0pO3ZhciBuPTE9PT1hcmd1bWVudHMubGVuZ3RoP2VbMF06W2VbMF0sZVsxXV07cmV0dXJuIHIuZG90KHQsW25bMF0sblsxXSwxXSkuc2xpY2UoMCwyKX19LHIuYXBwbHkyRFRyYW5zZm9ybTI9ZnVuY3Rpb24odCl7dmFyIGU9ci5hcHBseTJEVHJhbnNmb3JtKHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0LnNsaWNlKDAsMikpLmNvbmNhdChlKHQuc2xpY2UoMiw0KSkpfX19LHt9XSw3NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10JWU7cmV0dXJuIHI8MD9yK2U6cn0sbW9kSGFsZjpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0KT5lLzI/dC1NYXRoLnJvdW5kKHQvZSkqZTp0fX19LHt9XSw3NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5O2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuLG8scyxsLGM9dDtmb3Iocz0wO3M8ZS5sZW5ndGgtMTtzKyspe2lmKC0xPT09KHI9ZVtzXSkpe2ZvcihuPSEwLG89W10sbD0wO2w8Yy5sZW5ndGg7bCsrKW9bbF09YShjW2xdLGUuc2xpY2UocysxKSkoKSxvW2xdIT09b1swXSYmKG49ITEpO3JldHVybiBuP29bMF06b31pZigibnVtYmVyIj09dHlwZW9mIHImJiFpKGMpKXJldHVybjtpZigib2JqZWN0IiE9dHlwZW9mKGM9Y1tyXSl8fG51bGw9PT1jKXJldHVybn1pZigib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiZudWxsIT09KG89Y1tlW3NdXSkpcmV0dXJuIG99fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKG4oZSkpZT1TdHJpbmcoZSk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGV8fCJbLTFdIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Zvcih2YXIgcixpLG8scz0wLGM9ZS5zcGxpdCgiLiIpO3M8Yy5sZW5ndGg7KXtpZihyPVN0cmluZyhjW3NdKS5tYXRjaCgvXihbXlxbXF1dKikoKFxbXC0/WzAtOV0qXF0pKykkLykpe2lmKHJbMV0pY1tzXT1yWzFdO2Vsc2V7aWYoMCE9PXMpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7Yy5zcGxpY2UoMCwxKX1mb3IoaT1yWzJdLnN1YnN0cigxLHJbMl0ubGVuZ3RoLTIpLnNwbGl0KCJdWyIpLG89MDtvPGkubGVuZ3RoO28rKylzKyssYy5zcGxpY2UocywwLE51bWJlcihpW29dKSl9cysrfXJldHVybiJvYmplY3QiIT10eXBlb2YgdD9mdW5jdGlvbih0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93ImJhZCBjb250YWluZXIifSxnZXQ6ZnVuY3Rpb24oKXt9LGFzdHI6ZSxwYXJ0czpyLG9iajp0fX0odCxlLGMpOntzZXQ6bCh0LGMsZSksZ2V0OmEodCxjKSxhc3RyOmUscGFydHM6YyxvYmo6dH19O3ZhciBvPS8oXnxcLilhcmdzXFsvO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gdm9pZCAwPT09dHx8bnVsbD09PXQmJiFlLm1hdGNoKG8pfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgYSxvLGw9dCxmPSIiLHA9W1t0LGZdXSxkPXMobixyKTtmb3Iobz0wO288ZS5sZW5ndGgtMTtvKyspe2lmKCJudW1iZXIiPT10eXBlb2YoYT1lW29dKSYmIWkobCkpdGhyb3ciYXJyYXkgaW5kZXggYnV0IGNvbnRhaW5lciBpcyBub3QgYW4gYXJyYXkiO2lmKC0xPT09YSl7aWYoZD0hdShsLGUuc2xpY2UobysxKSxuLHIpKWJyZWFrO3JldHVybn1pZighaChsLGEsZVtvKzFdLGQpKWJyZWFrO2lmKCJvYmplY3QiIT10eXBlb2YobD1sW2FdKXx8bnVsbD09PWwpdGhyb3ciY29udGFpbmVyIGlzIG5vdCBhbiBvYmplY3QiO2Y9YyhmLGEpLHAucHVzaChbbCxmXSl9aWYoZCl7aWYobz09PWUubGVuZ3RoLTEmJihkZWxldGUgbFtlW29dXSxBcnJheS5pc0FycmF5KGwpJiYrZVtvXT09bC5sZW5ndGgtMSkpZm9yKDtsLmxlbmd0aCYmdm9pZCAwPT09bFtsLmxlbmd0aC0xXTspbC5wb3AoKX1lbHNlIGxbZVtvXV09bn19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWU7cmV0dXJuIG4oZSk/cj0iWyIrZSsiXSI6dCYmKHI9Ii4iK2UpLHQrcn1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBhLG89aShyKSxjPSEwLHU9cixmPW4ucmVwbGFjZSgiLTEiLDApLHA9IW8mJnMocixmKSxkPWVbMF07Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylmPW4ucmVwbGFjZSgiLTEiLGEpLG8mJihwPXModT1yW2Elci5sZW5ndGhdLGYpKSxwJiYoYz0hMSksaCh0LGEsZCxwKSYmbCh0W2FdLGUsbi5yZXBsYWNlKCItMSIsYSkpKHUpO3JldHVybiBjfWZ1bmN0aW9uIGgodCxlLHIsbil7aWYodm9pZCAwPT09dFtlXSl7aWYobilyZXR1cm4hMTt0W2VdPSJudW1iZXIiPT10eXBlb2Ygcj9bXTp7fX1yZXR1cm4hMH19LHsiLi9hcnJheSI6NzMyLCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNzU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSw3NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT1bXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigtMT09PWEuaW5kZXhPZih0KSl7YS5wdXNoKHQpO3ZhciByPTFlMztpKGUpP3I9ZToibG9uZyI9PT1lJiYocj0zZTMpO3ZhciBvPW4uc2VsZWN0KCJib2R5Iikuc2VsZWN0QWxsKCIucGxvdGx5LW5vdGlmaWVyIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInBsb3RseS1ub3RpZmllciIsITApLG8uc2VsZWN0QWxsKCIubm90aWZpZXItbm90ZSIpLmRhdGEoYSkuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoIm5vdGlmaWVyLW5vdGUiLCEwKS5zdHlsZSgib3BhY2l0eSIsMCkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcyk7aS5hcHBlbmQoImJ1dHRvbiIpLmNsYXNzZWQoIm5vdGlmaWVyLWNsb3NlIiwhMCkuaHRtbCgiJnRpbWVzOyIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7aS50cmFuc2l0aW9uKCkuY2FsbChzKX0pKTtmb3IodmFyIGE9aS5hcHBlbmQoInAiKSxvPXQuc3BsaXQoLzxiclxzKlwvPz4vZyksbD0wO2w8by5sZW5ndGg7bCsrKWwmJmEuYXBwZW5kKCJiciIpLGEuYXBwZW5kKCJzcGFuIikudGV4dChvW2xdKTsic3RpY2siPT09ZT9pLnRyYW5zaXRpb24oKS5kdXJhdGlvbigzNTApLnN0eWxlKCJvcGFjaXR5IiwxKTppLnRyYW5zaXRpb24oKS5kdXJhdGlvbig3MDApLnN0eWxlKCJvcGFjaXR5IiwxKS50cmFuc2l0aW9uKCkuZGVsYXkocikuY2FsbChzKX0pKX1mdW5jdGlvbiBzKHQpe3QuZHVyYXRpb24oNzAwKS5zdHlsZSgib3BhY2l0eSIsMCkuZWFjaCgiZW5kIiwoZnVuY3Rpb24odCl7dmFyIGU9YS5pbmRleE9mKHQpOy0xIT09ZSYmYS5zcGxpY2UoZSwxKSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pKX19fSx7ZDM6MTY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2V0Y3Vyc29yIiksaT0iZGF0YS1zYXZlZGN1cnNvciI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hdHRyKGkpO2lmKGUpe2lmKCFyKXtmb3IodmFyIGE9KHQuYXR0cigiY2xhc3MiKXx8IiIpLnNwbGl0KCIgIiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dOzA9PT1zLmluZGV4T2YoImN1cnNvci0iKSYmdC5hdHRyKGkscy5zdWJzdHIoNykpLmNsYXNzZWQocywhMSl9dC5hdHRyKGkpfHx0LmF0dHIoaSwiISEiKX1uKHQsZSl9ZWxzZSByJiYodC5hdHRyKGksbnVsbCksIiEhIj09PXI/bih0KTpuKHQscikpfX0seyIuL3NldGN1cnNvciI6NzcwfV0sNzYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbWF0cml4IikuZG90LGk9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPWUuZXhwb3J0cz17fTthLnRlc3Rlcj1mdW5jdGlvbih0KXt2YXIgZSxyPXQuc2xpY2UoKSxuPXJbMF1bMF0sYT1uLG89clswXVsxXSxzPW87Zm9yKHIucHVzaChyWzBdKSxlPTE7ZTxyLmxlbmd0aDtlKyspbj1NYXRoLm1pbihuLHJbZV1bMF0pLGE9TWF0aC5tYXgoYSxyW2VdWzBdKSxvPU1hdGgubWluKG8scltlXVsxXSkscz1NYXRoLm1heChzLHJbZV1bMV0pO3ZhciBsLGM9ITE7NT09PXIubGVuZ3RoJiYoclswXVswXT09PXJbMV1bMF0/clsyXVswXT09PXJbM11bMF0mJnJbMF1bMV09PT1yWzNdWzFdJiZyWzFdWzFdPT09clsyXVsxXSYmKGM9ITAsbD1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PXJbMF1bMF19KTpyWzBdWzFdPT09clsxXVsxXSYmclsyXVsxXT09PXJbM11bMV0mJnJbMF1bMF09PT1yWzNdWzBdJiZyWzFdWzBdPT09clsyXVswXSYmKGM9ITAsbD1mdW5jdGlvbih0KXtyZXR1cm4gdFsxXT09PXJbMF1bMV19KSk7dmFyIHU9ITAsaD1yWzBdO2ZvcihlPTE7ZTxyLmxlbmd0aDtlKyspaWYoaFswXSE9PXJbZV1bMF18fGhbMV0hPT1yW2VdWzFdKXt1PSExO2JyZWFrfXJldHVybnt4bWluOm4seG1heDphLHltaW46byx5bWF4OnMscHRzOnIsY29udGFpbnM6Yz9mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sYz10WzFdO3JldHVybiEocj09PWl8fHI8bnx8cj5hfHxjPT09aXx8YzxvfHxjPnMpJiYoIWV8fCFsKHQpKX06ZnVuY3Rpb24odCxlKXt2YXIgbD10WzBdLGM9dFsxXTtpZihsPT09aXx8bDxufHxsPmF8fGM9PT1pfHxjPG98fGM+cylyZXR1cm4hMTt2YXIgdSxoLGYscCxkLGc9ci5sZW5ndGgsbT1yWzBdWzBdLHY9clswXVsxXSx5PTA7Zm9yKHU9MTt1PGc7dSsrKWlmKGg9bSxmPXYsbT1yW3VdWzBdLHY9clt1XVsxXSwhKGw8KHA9TWF0aC5taW4oaCxtKSl8fGw+TWF0aC5tYXgoaCxtKXx8Yz5NYXRoLm1heChmLHYpKSlpZihjPE1hdGgubWluKGYsdikpbCE9PXAmJnkrKztlbHNle2lmKGM9PT0oZD1tPT09aD9jOmYrKGwtaCkqKHYtZikvKG0taCkpKXJldHVybiAxIT09dXx8IWU7Yzw9ZCYmbCE9PXAmJnkrK31yZXR1cm4geSUyPT0xfSxpc1JlY3Q6YyxkZWdlbmVyYXRlOnV9fSxhLmlzU2VnbWVudEJlbnQ9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGw9dFtlXSxjPVt0W3JdWzBdLWxbMF0sdFtyXVsxXS1sWzFdXSx1PW4oYyxjKSxoPU1hdGguc3FydCh1KSxmPVstY1sxXS9oLGNbMF0vaF07Zm9yKGE9ZSsxO2E8cjthKyspaWYobz1bdFthXVswXS1sWzBdLHRbYV1bMV0tbFsxXV0sKHM9bihvLGMpKTwwfHxzPnV8fE1hdGguYWJzKG4obyxmKSk+aSlyZXR1cm4hMDtyZXR1cm4hMX0sYS5maWx0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj1bdFswXV0sbj0wLGk9MDtmdW5jdGlvbiBvKG8pe3QucHVzaChvKTt2YXIgcz1yLmxlbmd0aCxsPW47ci5zcGxpY2UoaSsxKTtmb3IodmFyIGM9bCsxO2M8dC5sZW5ndGg7YysrKShjPT09dC5sZW5ndGgtMXx8YS5pc1NlZ21lbnRCZW50KHQsbCxjKzEsZSkpJiYoci5wdXNoKHRbY10pLHIubGVuZ3RoPHMtMiYmKG49YyxpPXIubGVuZ3RoLTEpLGw9Yyl9dC5sZW5ndGg+MSYmbyh0LnBvcCgpKTtyZXR1cm57YWRkUHQ6byxyYXc6dCxmaWx0ZXJlZDpyfX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuL21hdHJpeCI6NzU2fV0sNzYzOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3Nob3dfbm9fd2ViZ2xfbXNnIiksaT10KCJyZWdsIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIGE9dC5fZnVsbExheW91dCxvPSEwO3JldHVybiBhLl9nbGNhbnZhcy5lYWNoKChmdW5jdGlvbihuKXtpZighbi5yZWdsJiYoIW4ucGlja3x8YS5faGFzKCJwYXJjb29yZHMiKSkpe3RyeXtuLnJlZ2w9aSh7Y2FudmFzOnRoaXMsYXR0cmlidXRlczp7YW50aWFsaWFzOiFuLnBpY2sscHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwfSxwaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb3x8ci5kZXZpY2VQaXhlbFJhdGlvLGV4dGVuc2lvbnM6ZXx8W119KX1jYXRjaCh0KXtvPSExfW4ucmVnbHx8KG89ITEpLG8mJnRoaXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsKGZ1bmN0aW9uKGUpe3QmJnQuZW1pdCYmdC5lbWl0KCJwbG90bHlfd2ViZ2xjb250ZXh0bG9zdCIse2V2ZW50OmUsbGF5ZXI6bi5rZXl9KX0pLCExKX19KSksb3x8bih7Y29udGFpbmVyOmEuX2dsY29udGFpbmVyLm5vZGUoKX0pLG99fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc2hvd19ub193ZWJnbF9tc2ciOjc3MSxyZWdsOjUxMn1dLDc2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihlIGluc3RhbmNlb2YgUmVnRXhwKXtmb3IodmFyIHI9ZS50b1N0cmluZygpLG49MDtuPHQubGVuZ3RoO24rKylpZih0W25daW5zdGFuY2VvZiBSZWdFeHAmJnRbbl0udG9TdHJpbmcoKT09PXIpcmV0dXJuIHQ7dC5wdXNoKGUpfWVsc2UhZSYmMCE9PWV8fC0xIT09dC5pbmRleE9mKGUpfHx0LnB1c2goZSk7cmV0dXJuIHR9fSx7fV0sNzY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdF9hcGkvcGxvdF9jb25maWciKS5kZmx0Q29uZmlnO3ZhciBhPXthZGQ6ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzO3QudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0scz10LnVuZG9RdWV1ZS5pbmRleCx0LmF1dG9wbGF5P3QudW5kb1F1ZXVlLmluU2VxdWVuY2V8fCh0LmF1dG9wbGF5PSExKTooIXQudW5kb1F1ZXVlLnNlcXVlbmNlfHx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPyhvPXt1bmRvOntjYWxsczpbXSxhcmdzOltdfSxyZWRvOntjYWxsczpbXSxhcmdzOltdfX0sdC51bmRvUXVldWUucXVldWUuc3BsaWNlKHMsdC51bmRvUXVldWUucXVldWUubGVuZ3RoLXMsbyksdC51bmRvUXVldWUuaW5kZXgrPTEpOm89dC51bmRvUXVldWUucXVldWVbcy0xXSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExLG8mJihvLnVuZG8uY2FsbHMudW5zaGlmdChlKSxvLnVuZG8uYXJncy51bnNoaWZ0KHIpLG8ucmVkby5jYWxscy5wdXNoKG4pLG8ucmVkby5hcmdzLnB1c2goYSkpLHQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aD5pLnF1ZXVlTGVuZ3RoJiYodC51bmRvUXVldWUucXVldWUuc2hpZnQoKSx0LnVuZG9RdWV1ZS5pbmRleC0tKSl9LHN0YXJ0U2VxdWVuY2U6ZnVuY3Rpb24odCl7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSx0LnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMCx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSEwfSxzdG9wU2VxdWVuY2U6ZnVuY3Rpb24odCl7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSx0LnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExfSx1bmRvOmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYodC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXIpdC5mcmFtZXdvcmsudW5kbygpO2Vsc2UgaWYoISh2b2lkIDA9PT10LnVuZG9RdWV1ZXx8aXNOYU4odC51bmRvUXVldWUuaW5kZXgpfHx0LnVuZG9RdWV1ZS5pbmRleDw9MCkpe2Zvcih0LnVuZG9RdWV1ZS5pbmRleC0tLGU9dC51bmRvUXVldWUucXVldWVbdC51bmRvUXVldWUuaW5kZXhdLHQudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITAscj0wO3I8ZS51bmRvLmNhbGxzLmxlbmd0aDtyKyspYS5wbG90RG8odCxlLnVuZG8uY2FsbHNbcl0sZS51bmRvLmFyZ3Nbcl0pO3QudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITEsdC5hdXRvcGxheT0hMX19LHJlZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZih0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcil0LmZyYW1ld29yay5yZWRvKCk7ZWxzZSBpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4Pj10LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgpKXtmb3IoZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnJlZG8uY2FsbHMubGVuZ3RoO3IrKylhLnBsb3REbyh0LGUucmVkby5jYWxsc1tyXSxlLnJlZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExLHQudW5kb1F1ZXVlLmluZGV4Kyt9fX07YS5wbG90RG89ZnVuY3Rpb24odCxlLHIpe3QuYXV0b3BsYXk9ITAscj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixpPVtdLGE9MDthPGUubGVuZ3RoO2ErKylyPWVbYV0saVthXT1yPT09dD9yOiJvYmplY3QiPT10eXBlb2Ygcj9BcnJheS5pc0FycmF5KHIpP24uZXh0ZW5kRGVlcChbXSxyKTpuLmV4dGVuZERlZXBBbGwoe30scik6cjtyZXR1cm4gaX0odCxyKSxlLmFwcGx5KG51bGwscil9LGUuZXhwb3J0cz1hfSx7Ii4uL2xpYiI6NzUwLCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyI6Nzg2fV0sNzY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuY291bnRlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0oZXx8IiIpKyhyPyIiOiIkIiksYT0hMT09PW4/IiI6Il4iO3JldHVybiJ4eSI9PT10P25ldyBSZWdFeHAoYSsieChbMi05XXxbMS05XVswLTldKyk/eShbMi05XXxbMS05XVswLTldKyk/IitpKTpuZXcgUmVnRXhwKGErdCsiKFsyLTldfFsxLTldWzAtOV0rKT8iK2kpfX0se31dLDc2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0vXiguKikoXC5bXlwuXFtcXV0rfFxbXGRcXSkkLyxpPS9eW15cLlxbXF1dKyQvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcig7ZTspe3ZhciByPXQubWF0Y2gobik7aWYocil0PXJbMV07ZWxzZXtpZighdC5tYXRjaChpKSl0aHJvdyBuZXcgRXJyb3IoImJhZCByZWxhdGl2ZUF0dHIgY2FsbDoiK1t0LGVdKTt0PSIifWlmKCJeIiE9PWUuY2hhckF0KDApKWJyZWFrO2U9ZS5zbGljZSgxKX1yZXR1cm4gdCYmIlsiIT09ZS5jaGFyQXQoMCk/dCsiLiIrZTp0K2V9fSx7fV0sNzY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9dCgiLi9pc19wbGFpbl9vYmplY3QiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgYSBpbiByKXt2YXIgbz1yW2FdLHM9ZVthXTtpZihzIT09bylpZigiXyI9PT1hLmNoYXJBdCgwKXx8ImZ1bmN0aW9uIj09dHlwZW9mIG8pe2lmKGEgaW4gZSljb250aW51ZTtlW2FdPW99ZWxzZSBpZihuKG8pJiZuKHMpJiZpKG9bMF0pKXtpZigiY3VzdG9tZGF0YSI9PT1hfHwiaWRzIj09PWEpY29udGludWU7Zm9yKHZhciBsPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoKSxjPTA7YzxsO2MrKylzW2NdIT09b1tjXSYmaShvW2NdKSYmaShzW2NdKSYmdChzW2NdLG9bY10pfWVsc2UgaShvKSYmaShzKSYmKHQocyxvKSxPYmplY3Qua2V5cyhzKS5sZW5ndGh8fGRlbGV0ZSBlW2FdKX19fSx7Ii4vYXJyYXkiOjczMiwiLi9pc19wbGFpbl9vYmplY3QiOjc1MX1dLDc2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9sb2dnZXJzIiksYT10KCIuL2lkZW50aXR5Iiksbz10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gdDxlfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdDw9ZX1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQ+ZX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQ+PWV9ci5maW5kQmluPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUuc3RhcnQpKXJldHVybiByP01hdGguY2VpbCgodC1lLnN0YXJ0KS9lLnNpemUtMWUtOSktMTpNYXRoLmZsb29yKCh0LWUuc3RhcnQpL2Uuc2l6ZSsxZS05KTt2YXIgYSxvLGg9MCxmPWUubGVuZ3RoLHA9MCxkPWY+MT8oZVtmLTFdLWVbMF0pLyhmLTEpOjE7Zm9yKG89ZD49MD9yP3M6bDpyP3U6Yyx0Kz0xZS05KmQqKHI/LTE6MSkqKGQ+PTA/MTotMSk7aDxmJiZwKys8MTAwOylvKGVbYT1NYXRoLmZsb29yKChoK2YpLzIpXSx0KT9oPWErMTpmPWE7cmV0dXJuIHA+OTAmJmkubG9nKCJMb25nIGJpbmFyeSBzZWFyY2guLi4iKSxoLTF9LHIuc29ydGVyQXNjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0sci5zb3J0ZXJEZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSxyLmRpc3RpbmN0VmFscz1mdW5jdGlvbih0LGUpe3ZhciBuLGk9KGV8fHt9KS51bml0TWluRGlmZixhPXQuc2xpY2UoKTtmb3IoYS5zb3J0KHIuc29ydGVyQXNjKSxuPWEubGVuZ3RoLTE7bj4tMSYmYVtuXT09PW87bi0tKTt2YXIgcz0xO2l8fChzPWFbbl0tYVswXXx8MSk7Zm9yKHZhciBsLGM9cy8obnx8MSkvMWU0LHU9W10saD0wO2g8PW47aCsrKXt2YXIgZj1hW2hdLHA9Zi1sO3ZvaWQgMD09PWw/KHUucHVzaChmKSxsPWYpOnA+YyYmKHM9TWF0aC5taW4ocyxwKSx1LnB1c2goZiksbD1mKX1yZXR1cm57dmFsczp1LG1pbkRpZmY6c319LHIucm91bmRVcD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9MCxhPWUubGVuZ3RoLTEsbz0wLHM9cj8wOjEsbD1yPzE6MCxjPXI/TWF0aC5jZWlsOk1hdGguZmxvb3I7aTxhJiZvKys8MTAwOyllW249YygoaSthKS8yKV08PXQ/aT1uK3M6YT1uLWw7cmV0dXJuIGVbaV19LHIuc29ydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPTE7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPWUodFtpXSx0W2ktMV0pO2lmKGE8MD9yPTE6YT4wJiYobj0xKSxyJiZuKXJldHVybiB0LnNvcnQoZSl9cmV0dXJuIG4/dDp0LnJldmVyc2UoKX0sci5maW5kSW5kZXhPZk1pbj1mdW5jdGlvbih0LGUpe2U9ZXx8YTtmb3IodmFyIHIsbj0xLzAsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz1lKHRbaV0pO288biYmKG49byxyPWkpfXJldHVybiByfX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4vaWRlbnRpdHkiOjc0OCwiLi9sb2dnZXJzIjo3NTQsImZhc3QtaXNudW1lcmljIjoyNDF9XSw3NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7KHQuYXR0cigiY2xhc3MiKXx8IiIpLnNwbGl0KCIgIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7MD09PWUuaW5kZXhPZigiY3Vyc29yLSIpJiZ0LmNsYXNzZWQoZSwhMSl9KSksZSYmdC5jbGFzc2VkKCJjdXJzb3ItIitlLCEwKX19LHt9XSw3NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGk9ZnVuY3Rpb24oKXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCkiZnVuY3Rpb24iPT10eXBlb2YgdFtlXSYmKHRbZV09aSk7dC5kZXN0cm95PWZ1bmN0aW9uKCl7dC5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmNvbnRhaW5lcil9O3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuY2xhc3NOYW1lPSJuby13ZWJnbCIsci5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHIuc3R5bGUuZm9udFNpemU9IjI0cHgiLHIuc3R5bGUuY29sb3I9bi5kZWZhdWx0c1swXSxyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS5sZWZ0PXIuc3R5bGUudG9wPSIwcHgiLHIuc3R5bGUud2lkdGg9ci5zdHlsZS5oZWlnaHQ9IjEwMCUiLHIuc3R5bGVbImJhY2tncm91bmQtY29sb3IiXT1uLmxpZ2h0TGluZSxyLnN0eWxlWyJ6LWluZGV4Il09MzA7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO3JldHVybiBhLnRleHRDb250ZW50PSJXZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlciAtIHZpc2l0IGh0dHBzOi8vZ2V0LndlYmdsLm9yZyBmb3IgbW9yZSBpbmZvIixhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsYS5zdHlsZS50b3A9IjUwJSIsYS5zdHlsZS5sZWZ0PSI1MCUiLGEuc3R5bGUuaGVpZ2h0PSIzMCUiLGEuc3R5bGUud2lkdGg9IjUwJSIsYS5zdHlsZS5tYXJnaW49Ii0xNSUgMCAwIC0yNSUiLHIuYXBwZW5kQ2hpbGQoYSksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQociksdC5jb250YWluZXIuc3R5bGUuYmFja2dyb3VuZD0iI0ZGRkZGRiIsdC5jb250YWluZXIub25jbGljaz1mdW5jdGlvbigpe3dpbmRvdy5vcGVuKCJodHRwczovL2dldC53ZWJnbC5vcmciKX0sITF9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjYxNX1dLDc3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ci5hZ2dOdW1zPWZ1bmN0aW9uKHQsZSxhLG8pe3ZhciBzLGw7aWYoKCFvfHxvPmEubGVuZ3RoKSYmKG89YS5sZW5ndGgpLG4oZSl8fChlPSExKSxpKGFbMF0pKXtmb3IobD1uZXcgQXJyYXkobykscz0wO3M8bztzKyspbFtzXT1yLmFnZ051bXModCxlLGFbc10pO2E9bH1mb3Iocz0wO3M8bztzKyspbihlKT9uKGFbc10pJiYoZT10KCtlLCthW3NdKSk6ZT1hW3NdO3JldHVybiBlfSxyLmxlbj1mdW5jdGlvbih0KXtyZXR1cm4gci5hZ2dOdW1zKChmdW5jdGlvbih0KXtyZXR1cm4gdCsxfSksMCx0KX0sci5tZWFuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fChlPXIubGVuKHQpKSxyLmFnZ051bXMoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLDAsdCkvZX0sci5taWRSYW5nZT1mdW5jdGlvbih0KXtpZih2b2lkIDAhPT10JiYwIT09dC5sZW5ndGgpcmV0dXJuKHIuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQpK3IuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQpKS8yfSxyLnZhcmlhbmNlPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLG4oaSl8fChpPXIubWVhbih0LGUpKSxyLmFnZ051bXMoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrTWF0aC5wb3coZS1pLDIpfSksMCx0KS9lfSxyLnN0ZGV2PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5zcXJ0KHIudmFyaWFuY2UodCxlLG4pKX0sci5tZWRpYW49ZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpLnNvcnQoKTtyZXR1cm4gci5pbnRlcnAoZSwuNSl9LHIuaW50ZXJwPWZ1bmN0aW9uKHQsZSl7aWYoIW4oZSkpdGhyb3cibiBzaG91bGQgYmUgYSBmaW5pdGUgbnVtYmVyIjtpZigoZT1lKnQubGVuZ3RoLS41KTwwKXJldHVybiB0WzBdO2lmKGU+dC5sZW5ndGgtMSlyZXR1cm4gdFt0Lmxlbmd0aC0xXTt2YXIgcj1lJTE7cmV0dXJuIHIqdFtNYXRoLmNlaWwoZSldKygxLXIpKnRbTWF0aC5mbG9vcihlKV19fSx7Ii4vYXJyYXkiOjczMiwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDc3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1ub3JtYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/bih0KTpbMCwwLDAsMV19fSx7ImNvbG9yLW5vcm1hbGl6ZSI6MTI1fV0sNzc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi9saWIiKSxhPXQoIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksbz10KCIuLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gdC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV19dmFyIGw9LyhbXiRdKikoWyRdK1teJF0qWyRdKykoW14kXSopLztyLmNvbnZlcnRUb1RzcGFucz1mdW5jdGlvbih0LGUsTSl7dmFyIEE9dC50ZXh0KCksRT0hdC5hdHRyKCJkYXRhLW5vdGV4IikmJiJ1bmRlZmluZWQiIT10eXBlb2YgTWF0aEpheCYmQS5tYXRjaChsKSxDPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKCFDLmVtcHR5KCkpe3ZhciBMPXQuYXR0cigiY2xhc3MiKT90LmF0dHIoImNsYXNzIikuc3BsaXQoIiAiKVswXToidGV4dCI7cmV0dXJuIEwrPSItbWF0aCIsQy5zZWxlY3RBbGwoInN2Zy4iK0wpLnJlbW92ZSgpLEMuc2VsZWN0QWxsKCJnLiIrTCsiLWdyb3VwIikucmVtb3ZlKCksdC5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cih7ImRhdGEtdW5mb3JtYXR0ZWQiOkEsImRhdGEtbWF0aCI6Ik4ifSksRT8oZSYmZS5fcHJvbWlzZXN8fFtdKS5wdXNoKG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0LnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpO3ZhciByPXBhcnNlSW50KHQubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSxhPXtmb250U2l6ZTpyfTshZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scyxsO01hdGhKYXguSHViLlF1ZXVlKChmdW5jdGlvbigpe3JldHVybiBvPWkuZXh0ZW5kRGVlcEFsbCh7fSxNYXRoSmF4Lkh1Yi5jb25maWcpLHM9TWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheSx2b2lkIDAhPT1NYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5JiYoTWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheT0wKSxNYXRoSmF4Lkh1Yi5Db25maWcoe21lc3NhZ2VTdHlsZToibm9uZSIsdGV4MmpheDp7aW5saW5lTWF0aDpbWyIkIiwiJCJdLFsiXFwoIiwiXFwpIl1dfSxkaXNwbGF5QWxpZ246ImxlZnQifSl9KSwoZnVuY3Rpb24oKXtpZigiU1ZHIiE9PShhPU1hdGhKYXguSHViLmNvbmZpZy5tZW51U2V0dGluZ3MucmVuZGVyZXIpKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcigiU1ZHIil9KSwoZnVuY3Rpb24oKXt2YXIgcj0ibWF0aC1vdXRwdXQtIitpLnJhbmRzdHIoe30sNjQpO3JldHVybiBsPW4uc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKHtpZDpyfSkuc3R5bGUoe3Zpc2liaWxpdHk6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIn0pLnN0eWxlKHsiZm9udC1zaXplIjplLmZvbnRTaXplKyJweCJ9KS50ZXh0KHQucmVwbGFjZShjLCJcXGx0ICIpLnJlcGxhY2UodSwiXFxndCAiKSksTWF0aEpheC5IdWIuVHlwZXNldChsLm5vZGUoKSl9KSwoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCgiYm9keSIpLnNlbGVjdCgiI01hdGhKYXhfU1ZHX2dseXBocyIpO2lmKGwuc2VsZWN0KCIuTWF0aEpheF9TVkciKS5lbXB0eSgpfHwhbC5zZWxlY3QoInN2ZyIpLm5vZGUoKSlpLmxvZygiVGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSB0ZXggc3ludGF4LiIsdCkscigpO2Vsc2V7dmFyIG89bC5zZWxlY3QoInN2ZyIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyKGwuc2VsZWN0KCIuTWF0aEpheF9TVkciKSxlLG8pfWlmKGwucmVtb3ZlKCksIlNWRyIhPT1hKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcihhKX0pLChmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT1zJiYoTWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheT1zKSxNYXRoSmF4Lkh1Yi5Db25maWcobyl9KSl9KEVbMl0sYSwoZnVuY3Rpb24obixpLGEpe0Muc2VsZWN0QWxsKCJzdmcuIitMKS5yZW1vdmUoKSxDLnNlbGVjdEFsbCgiZy4iK0wrIi1ncm91cCIpLnJlbW92ZSgpO3ZhciBvPW4mJm4uc2VsZWN0KCJzdmciKTtpZighb3x8IW8ubm9kZSgpKXJldHVybiBQKCksdm9pZCBlKCk7dmFyIGw9Qy5hcHBlbmQoImciKS5jbGFzc2VkKEwrIi1ncm91cCIsITApLmF0dHIoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLCJkYXRhLXVuZm9ybWF0dGVkIjpBLCJkYXRhLW1hdGgiOiJZIn0pO2wubm9kZSgpLmFwcGVuZENoaWxkKG8ubm9kZSgpKSxpJiZpLm5vZGUoKSYmby5ub2RlKCkuaW5zZXJ0QmVmb3JlKGkubm9kZSgpLmNsb25lTm9kZSghMCksby5ub2RlKCkuZmlyc3RDaGlsZCksby5hdHRyKHtjbGFzczpMLGhlaWdodDphLmhlaWdodCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiBtZWV0In0pLnN0eWxlKHtvdmVyZmxvdzoidmlzaWJsZSIsInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTt2YXIgYz10Lm5vZGUoKS5zdHlsZS5maWxsfHwiYmxhY2siLHU9by5zZWxlY3QoImciKTt1LmF0dHIoe2ZpbGw6YyxzdHJva2U6Y30pO3ZhciBoPXModSwid2lkdGgiKSxmPXModSwiaGVpZ2h0IikscD0rdC5hdHRyKCJ4IiktaCp7c3RhcnQ6MCxtaWRkbGU6LjUsZW5kOjF9W3QuYXR0cigidGV4dC1hbmNob3IiKXx8InN0YXJ0Il0sZD0tKHJ8fHModCwiaGVpZ2h0IikpLzQ7InkiPT09TFswXT8obC5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK1stOTAsK3QuYXR0cigieCIpLCt0LmF0dHIoInkiKV0rIikgdHJhbnNsYXRlKCIrWy1oLzIsZC1mLzJdKyIpIn0pLG8uYXR0cih7eDordC5hdHRyKCJ4IikseTordC5hdHRyKCJ5Iil9KSk6ImwiPT09TFswXT9vLmF0dHIoe3g6dC5hdHRyKCJ4IikseTpkLWYvMn0pOiJhIj09PUxbMF0mJjAhPT1MLmluZGV4T2YoImF0aXRsZSIpP28uYXR0cih7eDowLHk6ZH0pOm8uYXR0cih7eDpwLHk6K3QuYXR0cigieSIpK2QtZi8yfSksTSYmTS5jYWxsKHQsbCksZShsKX0pKX0pKSk6UCgpLHR9ZnVuY3Rpb24gUCgpe0MuZW1wdHkoKXx8KEw9dC5hdHRyKCJjbGFzcyIpKyItbWF0aCIsQy5zZWxlY3QoInN2Zy4iK0wpLnJlbW92ZSgpKSx0LnRleHQoIiIpLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsInByZSIpLGZ1bmN0aW9uKHQsZSl7ZT1lLnJlcGxhY2UoZywiICIpO3ZhciByLHM9ITEsbD1bXSxjPS0xO2Z1bmN0aW9uIHUoKXtjKys7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGEuc3ZnLCJ0c3BhbiIpO24uc2VsZWN0KGUpLmF0dHIoe2NsYXNzOiJsaW5lIixkeTpjKm8rImVtIn0pLHQuYXBwZW5kQ2hpbGQoZSkscj1lO3ZhciBpPWw7aWYobD1be25vZGU6ZX1dLGkubGVuZ3RoPjEpZm9yKHZhciBzPTE7czxpLmxlbmd0aDtzKyspTShpW3NdKX1mdW5jdGlvbiBNKHQpe3ZhciBlLGk9dC50eXBlLG89e307aWYoImEiPT09aSl7ZT0iYSI7dmFyIHM9dC50YXJnZXQsYz10LmhyZWYsdT10LnBvcHVwO2MmJihvPXsieGxpbms6eGxpbms6c2hvdyI6Il9ibGFuayI9PT1zfHwiXyIhPT1zLmNoYXJBdCgwKT8ibmV3IjoicmVwbGFjZSIsdGFyZ2V0OnMsInhsaW5rOnhsaW5rOmhyZWYiOmN9LHUmJihvLm9uY2xpY2s9J3dpbmRvdy5vcGVuKHRoaXMuaHJlZi5iYXNlVmFsLHRoaXMudGFyZ2V0LmJhc2VWYWwsIicrdSsnIik7cmV0dXJuIGZhbHNlOycpKX1lbHNlIGU9InRzcGFuIjt0LnN0eWxlJiYoby5zdHlsZT10LnN0eWxlKTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYS5zdmcsZSk7aWYoInN1cCI9PT1pfHwic3ViIj09PWkpe0EociwiXHUyMDBiIiksci5hcHBlbmRDaGlsZChoKTt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYS5zdmcsInRzcGFuIik7QShkLCJcdTIwMGIiKSxuLnNlbGVjdChkKS5hdHRyKCJkeSIscFtpXSksby5keT1mW2ldLHIuYXBwZW5kQ2hpbGQoaCksci5hcHBlbmRDaGlsZChkKX1lbHNlIHIuYXBwZW5kQ2hpbGQoaCk7bi5zZWxlY3QoaCkuYXR0cihvKSxyPXQubm9kZT1oLGwucHVzaCh0KX1mdW5jdGlvbiBBKHQsZSl7dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9ZnVuY3Rpb24gRSh0KXtpZigxIT09bC5sZW5ndGgpe3ZhciBuPWwucG9wKCk7dCE9PW4udHlwZSYmaS5sb2coIlN0YXJ0IHRhZyA8IituLnR5cGUrIj4gZG9lc250IG1hdGNoIGVuZCB0YWcgPCIrdCsiPi4gUHJldGVuZGluZyBpdCBkaWQgbWF0Y2guIixlKSxyPWxbbC5sZW5ndGgtMV0ubm9kZX1lbHNlIGkubG9nKCJJZ25vcmluZyB1bmV4cGVjdGVkIGVuZCB0YWcgPC8iK3QrIj4uIixlKX15LnRlc3QoZSk/dSgpOihyPXQsbD1be25vZGU6dH1dKTtmb3IodmFyIEM9ZS5zcGxpdChtKSxMPTA7TDxDLmxlbmd0aDtMKyspe3ZhciBQPUNbTF0sST1QLm1hdGNoKHYpLHo9SSYmSVsyXS50b0xvd2VyQ2FzZSgpLE89aFt6XTtpZigiYnIiPT09eil1KCk7ZWxzZSBpZih2b2lkIDA9PT1PKUEocixTKFApKTtlbHNlIGlmKElbMV0pRSh6KTtlbHNle3ZhciBEPUlbNF0sUj17dHlwZTp6fSxGPVQoRCx4KTtpZihGPyhGPUYucmVwbGFjZShrLCIkMSBmaWxsOiIpLE8mJihGKz0iOyIrTykpOk8mJihGPU8pLEYmJihSLnN0eWxlPUYpLCJhIj09PXope3M9ITA7dmFyIEI9VChELGIpO2lmKEIpe3ZhciBOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtOLmhyZWY9QiwtMSE9PWQuaW5kZXhPZihOLnByb3RvY29sKSYmKFIuaHJlZj1lbmNvZGVVUkkoZGVjb2RlVVJJKEIpKSxSLnRhcmdldD1UKEQsXyl8fCJfYmxhbmsiLFIucG9wdXA9VChELHcpKX19TShSKX19cmV0dXJuIHN9KHQubm9kZSgpLEEpJiZ0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHIucG9zaXRpb25UZXh0KHQpLE0mJk0uY2FsbCh0KX19O3ZhciBjPS8oPHwmbHQ7fCYjNjA7KS9nLHU9Lyg+fCZndDt8JiM2MjspL2c7dmFyIGg9e3N1cDoiZm9udC1zaXplOjcwJSIsc3ViOiJmb250LXNpemU6NzAlIixiOiJmb250LXdlaWdodDpib2xkIixpOiJmb250LXN0eWxlOml0YWxpYyIsYToiY3Vyc29yOnBvaW50ZXIiLHNwYW46IiIsZW06ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQifSxmPXtzdWI6IjAuM2VtIixzdXA6Ii0wLjZlbSJ9LHA9e3N1YjoiLTAuMjFlbSIsc3VwOiIwLjQyZW0ifSxkPVsiaHR0cDoiLCJodHRwczoiLCJtYWlsdG86IiwiIix2b2lkIDAsIjoiXSxnPXIuTkVXTElORVM9LyhcclxuP3xcbikvZyxtPS8oPFtePD5dKj4pLyx2PS88KFwvPykoW14gPl0qKShccysoLiopKT8+L2kseT0vPGJyKFxzKy4qKT8+L2k7ci5CUl9UQUdfQUxMPS88YnIoXHMrLiopPz4vZ2k7dmFyIHg9LyhefFtccyInXSlzdHlsZVxzKj1ccyooIihbXiJdKik7PyJ8JyhbXiddKik7PycpL2ksYj0vKF58W1xzIiddKWhyZWZccyo9XHMqKCIoW14iXSopInwnKFteJ10qKScpL2ksXz0vKF58W1xzIiddKXRhcmdldFxzKj1ccyooIihbXiJcc10qKSJ8JyhbXidcc10qKScpL2ksdz0vKF58W1xzIiddKXBvcHVwXHMqPVxzKigiKFtcdz0sXSopInwnKFtcdz0sXSopJykvaTtmdW5jdGlvbiBUKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9dC5tYXRjaChlKSxuPXImJihyWzNdfHxyWzRdKTtyZXR1cm4gbiYmUyhuKX12YXIgaz0vKF58Oylccypjb2xvcjovO3IucGxhaW5UZXh0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXZvaWQgMCE9PShlPWV8fHt9KS5sZW4mJi0xIT09ZS5sZW4/ZS5sZW46MS8wLG49dm9pZCAwIT09ZS5hbGxvd2VkVGFncz9lLmFsbG93ZWRUYWdzOlsiYnIiXSxpPSIuLi4iLmxlbmd0aCxhPXQuc3BsaXQobSksbz1bXSxzPSIiLGw9MCxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10saD11Lm1hdGNoKHYpLGY9aCYmaFsyXS50b0xvd2VyQ2FzZSgpO2lmKGYpLTEhPT1uLmluZGV4T2YoZikmJihvLnB1c2godSkscz1mKTtlbHNle3ZhciBwPXUubGVuZ3RoO2lmKGwrcDxyKW8ucHVzaCh1KSxsKz1wO2Vsc2UgaWYobDxyKXt2YXIgZD1yLWw7cyYmKCJiciIhPT1zfHxkPD1pfHxwPD1pKSYmby5wb3AoKSxyPmk/by5wdXNoKHUuc3Vic3RyKDAsZC1pKSsiLi4uIik6by5wdXNoKHUuc3Vic3RyKDAsZCkpO2JyZWFrfXM9IiJ9fXJldHVybiBvLmpvaW4oIiIpfTt2YXIgTT17bXU6Ilx1MDNiYyIsYW1wOiImIixsdDoiPCIsZ3Q6Ij4iLG5ic3A6Ilx4YTAiLHRpbWVzOiJceGQ3IixwbHVzbW46Ilx4YjEiLGRlZzoiXHhiMCJ9LEE9LyYoI1xkK3wjeFtcZGEtZkEtRl0rfFthLXpdKyk7L2c7ZnVuY3Rpb24gUyh0KXtyZXR1cm4gdC5yZXBsYWNlKEEsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKCIjIj09PWUuY2hhckF0KDApP2Z1bmN0aW9uKHQpe2lmKHQ+MTExNDExMSlyZXR1cm47dmFyIGU9U3RyaW5nLmZyb21Db2RlUG9pbnQ7aWYoZSlyZXR1cm4gZSh0KTt2YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlO3JldHVybiB0PD02NTUzNT9yKHQpOnIoNTUyMzIrKHQ+PjEwKSx0JTEwMjQrNTYzMjApfSgieCI9PT1lLmNoYXJBdCgxKT9wYXJzZUludChlLnN1YnN0cigyKSwxNik6cGFyc2VJbnQoZS5zdWJzdHIoMSksMTApKTpNW2VdKXx8dH0pKX1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbixpLGEsbz1yLmhvcml6b250YWxBbGlnbixzPXIudmVydGljYWxBbGlnbnx8InRvcCIsbD10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBpPSJib3R0b20iPT09cz9mdW5jdGlvbigpe3JldHVybiBsLmJvdHRvbS1uLmhlaWdodH06Im1pZGRsZSI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGwudG9wKyhsLmhlaWdodC1uLmhlaWdodCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gbC50b3B9LGE9InJpZ2h0Ij09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5yaWdodC1uLndpZHRofToiY2VudGVyIj09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5sZWZ0KyhsLndpZHRoLW4ud2lkdGgpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGwubGVmdH0sZnVuY3Rpb24oKXtyZXR1cm4gbj10aGlzLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLnN0eWxlKHt0b3A6aSgpLWMudG9wKyJweCIsbGVmdDphKCktYy5sZWZ0KyJweCIsInotaW5kZXgiOjFlM30pLHRoaXN9fXIuY29udmVydEVudGl0aWVzPVMsci5zYW5pdGl6ZUhUTUw9ZnVuY3Rpb24odCl7dD10LnJlcGxhY2UoZywiICIpO2Zvcih2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIikscj1lLGk9W10sYT10LnNwbGl0KG0pLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPXMubWF0Y2godiksYz1sJiZsWzJdLnRvTG93ZXJDYXNlKCk7aWYoYyBpbiBoKWlmKGxbMV0paS5sZW5ndGgmJihyPWkucG9wKCkpO2Vsc2V7dmFyIHU9bFs0XSxmPVQodSx4KSxwPWY/e3N0eWxlOmZ9Ont9O2lmKCJhIj09PWMpe3ZhciB5PVQodSxiKTtpZih5KXt2YXIgdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aWYody5ocmVmPXksLTEhPT1kLmluZGV4T2Yody5wcm90b2NvbCkpe3AuaHJlZj1lbmNvZGVVUkkoZGVjb2RlVVJJKHkpKTt2YXIgaz1UKHUsXyk7ayYmKHAudGFyZ2V0PWspfX19dmFyIE09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjKTtyLmFwcGVuZENoaWxkKE0pLG4uc2VsZWN0KE0pLmF0dHIocCkscj1NLGkucHVzaChNKX1lbHNlIHIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoUyhzKSkpfXJldHVybiBlLmlubmVySFRNTH0sci5saW5lQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuc2l6ZSgpfHwxfSxyLnBvc2l0aW9uVGV4dD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtmdW5jdGlvbiBpKGUscil7cmV0dXJuIHZvaWQgMD09PXI/bnVsbD09PShyPXQuYXR0cihlKSkmJih0LmF0dHIoZSwwKSxyPTApOnQuYXR0cihlLHIpLHJ9dmFyIGE9aSgieCIsZSksbz1pKCJ5IixyKTsidGV4dCI9PT10aGlzLm5vZGVOYW1lJiZ0LnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLmF0dHIoe3g6YSx5Om99KX0pKX0sci5tYWtlRWRpdGFibGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmdkLGk9ZS5kZWxlZ2F0ZSxhPW4uZGlzcGF0Y2goImVkaXQiLCJpbnB1dCIsImNhbmNlbCIpLG89aXx8dDtpZih0LnN0eWxlKHsicG9pbnRlci1ldmVudHMiOmk/Im5vbmUiOiJhbGwifSksMSE9PXQuc2l6ZSgpKXRocm93IG5ldyBFcnJvcigiYm9vIik7ZnVuY3Rpb24gcygpeyFmdW5jdGlvbigpe3ZhciBpPW4uc2VsZWN0KHIpLnNlbGVjdCgiLnN2Zy1jb250YWluZXIiKSxvPWkuYXBwZW5kKCJkaXYiKSxzPXQubm9kZSgpLnN0eWxlLGM9cGFyc2VGbG9hdChzLmZvbnRTaXplfHwxMiksdT1lLnRleHQ7dm9pZCAwPT09dSYmKHU9dC5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpO28uY2xhc3NlZCgicGx1Z2luLWVkaXRhYmxlIGVkaXRhYmxlIiwhMCkuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsImZvbnQtZmFtaWx5IjpzLmZvbnRGYW1pbHl8fCJBcmlhbCIsImZvbnQtc2l6ZSI6Yyxjb2xvcjplLmZpbGx8fHMuZmlsbHx8ImJsYWNrIixvcGFjaXR5OjEsImJhY2tncm91bmQtY29sb3IiOmUuYmFja2dyb3VuZHx8InRyYW5zcGFyZW50IixvdXRsaW5lOiIjZmZmZmZmMzMgMXB4IHNvbGlkIixtYXJnaW46Wy1jLzgrMSwwLDAsLTFdLmpvaW4oInB4ICIpKyJweCIscGFkZGluZzoiMCIsImJveC1zaXppbmciOiJib3JkZXItYm94In0pLmF0dHIoe2NvbnRlbnRlZGl0YWJsZTohMH0pLnRleHQodSkuY2FsbChFKHQsaSxlKSkub24oImJsdXIiLChmdW5jdGlvbigpe3IuX2VkaXRpbmc9ITEsdC50ZXh0KHRoaXMudGV4dENvbnRlbnQpLnN0eWxlKHtvcGFjaXR5OjF9KTt2YXIgZSxpPW4uc2VsZWN0KHRoaXMpLmF0dHIoImNsYXNzIik7KGU9aT8iLiIraS5zcGxpdCgiICIpWzBdKyItbWF0aC1ncm91cCI6IltjbGFzcyo9LW1hdGgtZ3JvdXBdIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChlKS5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIG89dGhpcy50ZXh0Q29udGVudDtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkucmVtb3ZlKCksbi5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIixudWxsKSxhLmVkaXQuY2FsbCh0LG8pfSkpLm9uKCJmb2N1cyIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyLl9lZGl0aW5nPSEwLG4uc2VsZWN0KGRvY3VtZW50KS5vbigibW91c2V1cCIsKGZ1bmN0aW9uKCl7aWYobi5ldmVudC50YXJnZXQ9PT10KXJldHVybiExO2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1vLm5vZGUoKSYmby5ub2RlKCkuYmx1cigpfSkpfSkpLm9uKCJrZXl1cCIsKGZ1bmN0aW9uKCl7Mjc9PT1uLmV2ZW50LndoaWNoPyhyLl9lZGl0aW5nPSExLHQuc3R5bGUoe29wYWNpdHk6MX0pLG4uc2VsZWN0KHRoaXMpLnN0eWxlKHtvcGFjaXR5OjB9KS5vbigiYmx1ciIsKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSkudHJhbnNpdGlvbigpLnJlbW92ZSgpLGEuY2FuY2VsLmNhbGwodCx0aGlzLnRleHRDb250ZW50KSk6KGEuaW5wdXQuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpLG4uc2VsZWN0KHRoaXMpLmNhbGwoRSh0LGksZSkpKX0pKS5vbigia2V5ZG93biIsKGZ1bmN0aW9uKCl7MTM9PT1uLmV2ZW50LndoaWNoJiZ0aGlzLmJsdXIoKX0pKS5jYWxsKGwpfSgpLHQuc3R5bGUoe29wYWNpdHk6MH0pO3ZhciBpLHM9by5hdHRyKCJjbGFzcyIpOyhpPXM/Ii4iK3Muc3BsaXQoIiAiKVswXSsiLW1hdGgtZ3JvdXAiOiJbY2xhc3MqPS1tYXRoLWdyb3VwXSIpJiZuLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QoaSkuc3R5bGUoe29wYWNpdHk6MH0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5ub2RlKCkscj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Iuc2VsZWN0Tm9kZUNvbnRlbnRzKGUpO3ZhciBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtuLnJlbW92ZUFsbFJhbmdlcygpLG4uYWRkUmFuZ2UociksZS5mb2N1cygpfXJldHVybiBlLmltbWVkaWF0ZT9zKCk6by5vbigiY2xpY2siLHMpLG4ucmViaW5kKHQsYSwib24iKX19LHsiLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzE3LCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzI2LCIuLi9saWIiOjc1MCxkMzoxNjl9XSw3NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307ZnVuY3Rpb24gaSh0KXt0JiZudWxsIT09dC50aW1lciYmKGNsZWFyVGltZW91dCh0LnRpbWVyKSx0LnRpbWVyPW51bGwpfXIudGhyb3R0bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW5bdF0sbz1EYXRlLm5vdygpO2lmKCFhKXtmb3IodmFyIHMgaW4gbiluW3NdLnRzPG8tNmU0JiZkZWxldGUgbltzXTthPW5bdF09e3RzOjAsdGltZXI6bnVsbH19ZnVuY3Rpb24gbCgpe3IoKSxhLnRzPURhdGUubm93KCksYS5vbkRvbmUmJihhLm9uRG9uZSgpLGEub25Eb25lPW51bGwpfWkoYSksbz5hLnRzK2U/bCgpOmEudGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtsKCksYS50aW1lcj1udWxsfSksZSl9LHIuZG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uW3RdO3JldHVybiBlJiZlLnRpbWVyP25ldyBQcm9taXNlKChmdW5jdGlvbih0KXt2YXIgcj1lLm9uRG9uZTtlLm9uRG9uZT1mdW5jdGlvbigpe3ImJnIoKSx0KCksZS5vbkRvbmU9bnVsbH19KSk6UHJvbWlzZS5yZXNvbHZlKCl9LHIuY2xlYXI9ZnVuY3Rpb24odCl7aWYodClpKG5bdF0pLGRlbGV0ZSBuW3RdO2Vsc2UgZm9yKHZhciBlIGluIG4pci5jbGVhcihlKX19LHt9XSw3NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PjApcmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMDt2YXIgcj1NYXRoLmxvZyhNYXRoLm1pbihlWzBdLGVbMV0pKS9NYXRoLkxOMTA7cmV0dXJuIG4ocil8fChyPU1hdGgubG9nKE1hdGgubWF4KGVbMF0sZVsxXSkpL01hdGguTE4xMC02KSxyfX0seyJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNzc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17fSxpPXQoIi4uL3Bsb3RzL2dlby9jb25zdGFudHMiKS5sb2NhdGlvbm1vZGVUb0xheWVyLGE9dCgidG9wb2pzb24tY2xpZW50IikuZmVhdHVyZTtuLmdldFRvcG9qc29uTmFtZT1mdW5jdGlvbih0KXtyZXR1cm5bdC5zY29wZS5yZXBsYWNlKC8gL2csIi0iKSwiXyIsdC5yZXNvbHV0aW9uLnRvU3RyaW5nKCksIm0iXS5qb2luKCIiKX0sbi5nZXRUb3BvanNvblBhdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlKyIuanNvbiJ9LG4uZ2V0VG9wb2pzb25GZWF0dXJlcz1mdW5jdGlvbih0LGUpe3ZhciByPWlbdC5sb2NhdGlvbm1vZGVdLG49ZS5vYmplY3RzW3JdO3JldHVybiBhKGUsbikuZmVhdHVyZXN9fSx7Ii4uL3Bsb3RzL2dlby9jb25zdGFudHMiOjgyOSwidG9wb2pzb24tY2xpZW50Ijo1NTF9XSw3Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJsb2NhbGUiLG5hbWU6ImVuLVVTIixkaWN0aW9uYXJ5OnsiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSI6IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUifSxmb3JtYXQ6e2RhdGU6IiVtLyVkLyVZIn19fSx7fV0sNzc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToibG9jYWxlIixuYW1lOiJlbiIsZGljdGlvbmFyeTp7IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiOiJDbGljayB0byBlbnRlciBDb2xvdXJzY2FsZSB0aXRsZSJ9LGZvcm1hdDp7ZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlZC8lbS8lWSIsdGltZToiJUg6JU06JVMiLGRlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLHllYXI6IiVZIixtb250aDoiJWIgJVkiLGRheU1vbnRoOiIlYiAlLWQiLGRheU1vbnRoWWVhcjoiJWIgJS1kLCAlWSJ9fX0se31dLDc4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixpPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGE9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz10LnNwbGl0KCJbIilbMF0scz0wO3M8YS5sZW5ndGg7cysrKWlmKChyPXQubWF0Y2goYVtzXSkpJiYwPT09ci5pbmRleCl7ZT1yWzBdO2JyZWFrfWlmKGV8fChlPWlbaS5pbmRleE9mKG8pXSksIWUpcmV0dXJuITE7dmFyIGw9dC5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiBsPyEhKHI9bC5tYXRjaCgvXlxbKDB8WzEtOV1bMC05XSopXF0oXC4oLispKT8kLykpJiZ7YXJyYXk6ZSxpbmRleDpOdW1iZXIoclsxXSkscHJvcGVydHk6clszXXx8IiJ9OnthcnJheTplLGluZGV4OiIiLHByb3BlcnR5OiIifX19LHsiLi4vcmVnaXN0cnkiOjg4Mn1dLDc4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uZXh0ZW5kRmxhdCxhPW4uaXNQbGFpbk9iamVjdCxvPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsImNsZWFyQXhpc1R5cGVzIiwicGxvdCIsInN0eWxlIiwibWFya2VyU2l6ZSIsImNvbG9yYmFycyJdfSxzPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsInBsb3QiLCJsZWdlbmQiLCJ0aWNrcyIsImF4cmFuZ2UiLCJsYXlvdXRzdHlsZSIsIm1vZGViYXIiLCJjYW1lcmEiLCJhcnJheWRyYXciLCJjb2xvcmJhcnMiXX0sbD1vLmZsYWdzLnNsaWNlKCkuY29uY2F0KFsiZnVsbFJlcGxvdCJdKSxjPXMuZmxhZ3Muc2xpY2UoKS5jb25jYXQoImxheW91dFJlcGxvdCIpO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPSExO3JldHVybiBlfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPWkoe30sdCk7Zm9yKHZhciBvIGluIG4pe3ZhciBzPW5bb107YShzKSYmKG5bb109ZihzLGUscixvKSl9cmV0dXJuImZyb20tcm9vdCI9PT1yJiYobi5lZGl0VHlwZT1lKSxufWZ1bmN0aW9uIGYodCxlLHIsbil7aWYodC52YWxUeXBlKXt2YXIgYT1pKHt9LHQpO2lmKGEuZWRpdFR5cGU9ZSxBcnJheS5pc0FycmF5KHQuaXRlbXMpKXthLml0ZW1zPW5ldyBBcnJheSh0Lml0ZW1zLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzx0Lml0ZW1zLmxlbmd0aDtvKyspYS5pdGVtc1tvXT1mKHQuaXRlbXNbb10sZSwiZnJvbS1yb290Iil9cmV0dXJuIGF9cmV0dXJuIGgodCxlLCJfIj09PW4uY2hhckF0KDApPyJuZXN0ZWQiOiJmcm9tLXJvb3QiKX1lLmV4cG9ydHM9e3RyYWNlczpvLGxheW91dDpzLHRyYWNlRmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShsKX0sbGF5b3V0RmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShjKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyJiYibm9uZSIhPT1yKWZvcih2YXIgbj1yLnNwbGl0KCIrIiksaT0wO2k8bi5sZW5ndGg7aSsrKXRbbltpXV09ITB9LG92ZXJyaWRlQWxsOmh9fSx7Ii4uL2xpYiI6NzUwfV0sNzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJnbC1tYXQ0L2Zyb21RdWF0IiksYT10KCIuLi9yZWdpc3RyeSIpLG89dCgiLi4vbGliIikscz10KCIuLi9wbG90cy9wbG90cyIpLGw9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksdT1sLmNsZWFuSWQsaD1sLmdldEZyb21UcmFjZSxmPWEudHJhY2VJcztmdW5jdGlvbiBwKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJiJwYXBlciIhPT1yJiYodFtlXT11KHIsbiwhMCkpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPXRbZV0saT10LnRpdGxlJiZ0LnRpdGxlW3JdO24mJiFpJiYodC50aXRsZXx8KHQudGl0bGU9e30pLHQudGl0bGVbcl09dFtlXSxkZWxldGUgdFtlXSl9dCYmKCJzdHJpbmciIT10eXBlb2YgdC50aXRsZSYmIm51bWJlciIhPXR5cGVvZiB0LnRpdGxlfHwodC50aXRsZT17dGV4dDp0LnRpdGxlfSksZSgidGl0bGVmb250IiwiZm9udCIpLGUoInRpdGxlcG9zaXRpb24iLCJwb3NpdGlvbiIpLGUoInRpdGxlc2lkZSIsInNpZGUiKSxlKCJ0aXRsZW9mZnNldCIsIm9mZnNldCIpKX1mdW5jdGlvbiBnKHQpe2lmKCFvLmlzUGxhaW5PYmplY3QodCkpcmV0dXJuITE7dmFyIGU9dC5uYW1lO3JldHVybiBkZWxldGUgdC5uYW1lLGRlbGV0ZSB0LnNob3dsZWdlbmQsKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlKSYmU3RyaW5nKGUpfWZ1bmN0aW9uIG0odCxlLHIsbil7aWYociYmIW4pcmV0dXJuIHQ7aWYobiYmIXIpcmV0dXJuIGU7aWYoIXQudHJpbSgpKXJldHVybiBlO2lmKCFlLnRyaW0oKSlyZXR1cm4gdDt2YXIgaSxhPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3IoaT0wO2k8YSYmdC5jaGFyQXQoaSk9PT1lLmNoYXJBdChpKTtpKyspO3JldHVybiB0LnN1YnN0cigwLGkpLnRyaW0oKX1mdW5jdGlvbiB2KHQpe3ZhciBlPSJtaWRkbGUiLHI9ImNlbnRlciI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYoLTEhPT10LmluZGV4T2YoInRvcCIpP2U9InRvcCI6LTEhPT10LmluZGV4T2YoImJvdHRvbSIpJiYoZT0iYm90dG9tIiksLTEhPT10LmluZGV4T2YoImxlZnQiKT9yPSJsZWZ0IjotMSE9PXQuaW5kZXhPZigicmlnaHQiKSYmKHI9InJpZ2h0IikpLGUrIiAiK3J9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBlIGluIHQmJiJvYmplY3QiPT10eXBlb2YgdFtlXSYmMD09PU9iamVjdC5rZXlzKHRbZV0pLmxlbmd0aH1yLmNsZWFyUHJvbWlzZVF1ZXVlPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpJiZ0Ll9wcm9taXNlcy5sZW5ndGg+MCYmby5sb2coIkNsZWFyaW5nIHByZXZpb3VzIHJlamVjdGVkIHByb21pc2VzIGZyb20gcXVldWUuIiksdC5fcHJvbWlzZXM9W119LHIuY2xlYW5MYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUsbjt0fHwodD17fSksdC54YXhpczEmJih0LnhheGlzfHwodC54YXhpcz10LnhheGlzMSksZGVsZXRlIHQueGF4aXMxKSx0LnlheGlzMSYmKHQueWF4aXN8fCh0LnlheGlzPXQueWF4aXMxKSxkZWxldGUgdC55YXhpczEpLHQuc2NlbmUxJiYodC5zY2VuZXx8KHQuc2NlbmU9dC5zY2VuZTEpLGRlbGV0ZSB0LnNjZW5lMSk7dmFyIGE9KHMuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW58fHt9KS5hdHRyUmVnZXgsbD0ocy5zdWJwbG90c1JlZ2lzdHJ5LnBvbGFyfHx7fSkuYXR0clJlZ2V4LGg9KHMuc3VicGxvdHNSZWdpc3RyeS50ZXJuYXJ5fHx7fSkuYXR0clJlZ2V4LGY9KHMuc3VicGxvdHNSZWdpc3RyeS5nbDNkfHx7fSkuYXR0clJlZ2V4LGc9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKyl7dmFyIG09Z1tlXTtpZihhJiZhLnRlc3QobSkpe3ZhciB2PXRbbV07di5hbmNob3ImJiJmcmVlIiE9PXYuYW5jaG9yJiYodi5hbmNob3I9dSh2LmFuY2hvcikpLHYub3ZlcmxheWluZyYmKHYub3ZlcmxheWluZz11KHYub3ZlcmxheWluZykpLHYudHlwZXx8KHYuaXNkYXRlP3YudHlwZT0iZGF0ZSI6di5pc2xvZz92LnR5cGU9ImxvZyI6ITE9PT12LmlzZGF0ZSYmITE9PT12LmlzbG9nJiYodi50eXBlPSJsaW5lYXIiKSksIndpdGh6ZXJvIiE9PXYuYXV0b3JhbmdlJiYidG96ZXJvIiE9PXYuYXV0b3JhbmdlfHwodi5hdXRvcmFuZ2U9ITAsdi5yYW5nZW1vZGU9InRvemVybyIpLGRlbGV0ZSB2LmlzbG9nLGRlbGV0ZSB2LmlzZGF0ZSxkZWxldGUgdi5jYXRlZ29yaWVzLHkodiwiZG9tYWluIikmJmRlbGV0ZSB2LmRvbWFpbix2b2lkIDAhPT12LmF1dG90aWNrJiYodm9pZCAwPT09di50aWNrbW9kZSYmKHYudGlja21vZGU9di5hdXRvdGljaz8iYXV0byI6ImxpbmVhciIpLGRlbGV0ZSB2LmF1dG90aWNrKSxkKHYpfWVsc2UgaWYobCYmbC50ZXN0KG0pKXtkKHRbbV0ucmFkaWFsYXhpcyl9ZWxzZSBpZihoJiZoLnRlc3QobSkpe3ZhciB4PXRbbV07ZCh4LmFheGlzKSxkKHguYmF4aXMpLGQoeC5jYXhpcyl9ZWxzZSBpZihmJiZmLnRlc3QobSkpe3ZhciBiPXRbbV0sXz1iLmNhbWVyYXBvc2l0aW9uO2lmKEFycmF5LmlzQXJyYXkoXykmJjQ9PT1fWzBdLmxlbmd0aCl7dmFyIHc9X1swXSxUPV9bMV0saz1fWzJdLE09aShbXSx3KSxBPVtdO2ZvcihuPTA7bjwzOysrbilBW25dPVRbbl0raypNWzIrNCpuXTtiLmNhbWVyYT17ZXllOnt4OkFbMF0seTpBWzFdLHo6QVsyXX0sY2VudGVyOnt4OlRbMF0seTpUWzFdLHo6VFsyXX0sdXA6e3g6MCx5OjAsejoxfX0sZGVsZXRlIGIuY2FtZXJhcG9zaXRpb259ZChiLnhheGlzKSxkKGIueWF4aXMpLGQoYi56YXhpcyl9fXZhciBTPUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8UztlKyspe3ZhciBFPXQuYW5ub3RhdGlvbnNbZV07by5pc1BsYWluT2JqZWN0KEUpJiYoRS5yZWYmJigicGFwZXIiPT09RS5yZWY/KEUueHJlZj0icGFwZXIiLEUueXJlZj0icGFwZXIiKToiZGF0YSI9PT1FLnJlZiYmKEUueHJlZj0ieCIsRS55cmVmPSJ5IiksZGVsZXRlIEUucmVmKSxwKEUsInhyZWYiKSxwKEUsInlyZWYiKSl9dmFyIEM9QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPEM7ZSsrKXt2YXIgTD10LnNoYXBlc1tlXTtvLmlzUGxhaW5PYmplY3QoTCkmJihwKEwsInhyZWYiKSxwKEwsInlyZWYiKSl9dmFyIFA9QXJyYXkuaXNBcnJheSh0LmltYWdlcyk/dC5pbWFnZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPFA7ZSsrKXt2YXIgST10LmltYWdlc1tlXTtvLmlzUGxhaW5PYmplY3QoSSkmJihwKEksInhyZWYiKSxwKEksInlyZWYiKSl9dmFyIHo9dC5sZWdlbmQ7cmV0dXJuIHomJih6Lng+Mz8oei54PTEuMDIsei54YW5jaG9yPSJsZWZ0Iik6ei54PC0yJiYoei54PS0uMDIsei54YW5jaG9yPSJyaWdodCIpLHoueT4zPyh6Lnk9MS4wMix6LnlhbmNob3I9ImJvdHRvbSIpOnoueTwtMiYmKHoueT0tLjAyLHoueWFuY2hvcj0idG9wIikpLGQodCksInJvdGF0ZSI9PT10LmRyYWdtb2RlJiYodC5kcmFnbW9kZT0ib3JiaXQiKSxjLmNsZWFuKHQpLHQudGVtcGxhdGUmJnQudGVtcGxhdGUubGF5b3V0JiZyLmNsZWFuTGF5b3V0KHQudGVtcGxhdGUubGF5b3V0KSx0fSxyLmNsZWFuRGF0YT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG4saT10W2VdO2lmKCJoaXN0b2dyYW15Ij09PWkudHlwZSYmInhiaW5zImluIGkmJiEoInliaW5zImluIGkpJiYoaS55Ymlucz1pLnhiaW5zLGRlbGV0ZSBpLnhiaW5zKSxpLmVycm9yX3kmJiJvcGFjaXR5ImluIGkuZXJyb3JfeSl7dmFyIGw9Yy5kZWZhdWx0cyxoPWkuZXJyb3JfeS5jb2xvcnx8KGYoaSwiYmFyIik/Yy5kZWZhdWx0TGluZTpsW2UlbC5sZW5ndGhdKTtpLmVycm9yX3kuY29sb3I9Yy5hZGRPcGFjaXR5KGMucmdiKGgpLGMub3BhY2l0eShoKSppLmVycm9yX3kub3BhY2l0eSksZGVsZXRlIGkuZXJyb3JfeS5vcGFjaXR5fWlmKCJiYXJkaXIiaW4gaSYmKCJoIiE9PWkuYmFyZGlyfHwhZihpLCJiYXIiKSYmImhpc3RvZ3JhbSIhPT1pLnR5cGUuc3Vic3RyKDAsOSl8fChpLm9yaWVudGF0aW9uPSJoIixyLnN3YXBYWURhdGEoaSkpLGRlbGV0ZSBpLmJhcmRpciksImhpc3RvZ3JhbXkiPT09aS50eXBlJiZyLnN3YXBYWURhdGEoaSksImhpc3RvZ3JhbXgiIT09aS50eXBlJiYiaGlzdG9ncmFteSIhPT1pLnR5cGV8fChpLnR5cGU9Imhpc3RvZ3JhbSIpLCJzY2wiaW4gaSYmISgiY29sb3JzY2FsZSJpbiBpKSYmKGkuY29sb3JzY2FsZT1pLnNjbCxkZWxldGUgaS5zY2wpLCJyZXZlcnNlc2NsImluIGkmJiEoInJldmVyc2VzY2FsZSJpbiBpKSYmKGkucmV2ZXJzZXNjYWxlPWkucmV2ZXJzZXNjbCxkZWxldGUgaS5yZXZlcnNlc2NsKSxpLnhheGlzJiYoaS54YXhpcz11KGkueGF4aXMsIngiKSksaS55YXhpcyYmKGkueWF4aXM9dShpLnlheGlzLCJ5IikpLGYoaSwiZ2wzZCIpJiZpLnNjZW5lJiYoaS5zY2VuZT1zLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZC5jbGVhbklkKGkuc2NlbmUpKSwhZihpLCJwaWUtbGlrZSIpJiYhZihpLCJiYXItbGlrZSIpKWlmKEFycmF5LmlzQXJyYXkoaS50ZXh0cG9zaXRpb24pKWZvcihuPTA7bjxpLnRleHRwb3NpdGlvbi5sZW5ndGg7bisrKWkudGV4dHBvc2l0aW9uW25dPXYoaS50ZXh0cG9zaXRpb25bbl0pO2Vsc2UgaS50ZXh0cG9zaXRpb24mJihpLnRleHRwb3NpdGlvbj12KGkudGV4dHBvc2l0aW9uKSk7dmFyIHA9YS5nZXRNb2R1bGUoaSk7aWYocCYmcC5jb2xvcmJhcil7dmFyIHg9cC5jb2xvcmJhci5jb250YWluZXIsYj14P2lbeF06aTtiJiZiLmNvbG9yc2NhbGUmJigiWUlHbkJ1Ij09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT0iWWxHbkJ1IiksIllJT3JSZCI9PT1iLmNvbG9yc2NhbGUmJihiLmNvbG9yc2NhbGU9IllsT3JSZCIpKX1pZigic3VyZmFjZSI9PT1pLnR5cGUmJm8uaXNQbGFpbk9iamVjdChpLmNvbnRvdXJzKSl7dmFyIF89WyJ4IiwieSIsInoiXTtmb3Iobj0wO248Xy5sZW5ndGg7bisrKXt2YXIgdz1pLmNvbnRvdXJzW19bbl1dO28uaXNQbGFpbk9iamVjdCh3KSYmKHcuaGlnaGxpZ2h0Q29sb3ImJih3LmhpZ2hsaWdodGNvbG9yPXcuaGlnaGxpZ2h0Q29sb3IsZGVsZXRlIHcuaGlnaGxpZ2h0Q29sb3IpLHcuaGlnaGxpZ2h0V2lkdGgmJih3LmhpZ2hsaWdodHdpZHRoPXcuaGlnaGxpZ2h0V2lkdGgsZGVsZXRlIHcuaGlnaGxpZ2h0V2lkdGgpKX19aWYoImNhbmRsZXN0aWNrIj09PWkudHlwZXx8Im9obGMiPT09aS50eXBlKXt2YXIgVD0hMSE9PShpLmluY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLGs9ITEhPT0oaS5kZWNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxNPWcoaS5pbmNyZWFzaW5nKSxBPWcoaS5kZWNyZWFzaW5nKTtpZighMSE9PU0mJiExIT09QSl7dmFyIFM9bShNLEEsVCxrKTtTJiYoaS5uYW1lPVMpfWVsc2UhTSYmIUF8fGkubmFtZXx8KGkubmFtZT1NfHxBKX1pZihBcnJheS5pc0FycmF5KGkudHJhbnNmb3Jtcykpe3ZhciBFPWkudHJhbnNmb3Jtcztmb3Iobj0wO248RS5sZW5ndGg7bisrKXt2YXIgQz1FW25dO2lmKG8uaXNQbGFpbk9iamVjdChDKSlzd2l0Y2goQy50eXBlKXtjYXNlImZpbHRlciI6Qy5maWx0ZXJzcmMmJihDLnRhcmdldD1DLmZpbHRlcnNyYyxkZWxldGUgQy5maWx0ZXJzcmMpLEMuY2FsZW5kYXImJihDLnZhbHVlY2FsZW5kYXJ8fChDLnZhbHVlY2FsZW5kYXI9Qy5jYWxlbmRhciksZGVsZXRlIEMuY2FsZW5kYXIpO2JyZWFrO2Nhc2UiZ3JvdXBieSI6aWYoQy5zdHlsZXM9Qy5zdHlsZXN8fEMuc3R5bGUsQy5zdHlsZXMmJiFBcnJheS5pc0FycmF5KEMuc3R5bGVzKSl7dmFyIEw9Qy5zdHlsZXMsUD1PYmplY3Qua2V5cyhMKTtDLnN0eWxlcz1bXTtmb3IodmFyIEk9MDtJPFAubGVuZ3RoO0krKylDLnN0eWxlcy5wdXNoKHt0YXJnZXQ6UFtJXSx2YWx1ZTpMW1BbSV1dfSl9fX19eShpLCJsaW5lIikmJmRlbGV0ZSBpLmxpbmUsIm1hcmtlciJpbiBpJiYoeShpLm1hcmtlciwibGluZSIpJiZkZWxldGUgaS5tYXJrZXIubGluZSx5KGksIm1hcmtlciIpJiZkZWxldGUgaS5tYXJrZXIpLGMuY2xlYW4oaSksaS5hdXRvYmlueCYmKGRlbGV0ZSBpLmF1dG9iaW54LGRlbGV0ZSBpLnhiaW5zKSxpLmF1dG9iaW55JiYoZGVsZXRlIGkuYXV0b2JpbnksZGVsZXRlIGkueWJpbnMpLGQoaSksaS5jb2xvcmJhciYmZChpLmNvbG9yYmFyKSxpLm1hcmtlciYmaS5tYXJrZXIuY29sb3JiYXImJmQoaS5tYXJrZXIuY29sb3JiYXIpLGkubGluZSYmaS5saW5lLmNvbG9yYmFyJiZkKGkubGluZS5jb2xvcmJhciksaS5hYXhpcyYmZChpLmFheGlzKSxpLmJheGlzJiZkKGkuYmF4aXMpfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKG8uc3dhcEF0dHJzKHQsWyI/IiwiPzAiLCJkPyIsIj9iaW5zIiwibmJpbnM/IiwiYXV0b2Jpbj8iLCI/c3JjIiwiZXJyb3JfPyJdKSxBcnJheS5pc0FycmF5KHQueikmJkFycmF5LmlzQXJyYXkodC56WzBdKSYmKHQudHJhbnNwb3NlP2RlbGV0ZSB0LnRyYW5zcG9zZTp0LnRyYW5zcG9zZT0hMCksdC5lcnJvcl94JiZ0LmVycm9yX3kpe3ZhciByPXQuZXJyb3JfeSxuPSJjb3B5X3lzdHlsZSJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7by5zd2FwQXR0cnModCxbImVycm9yXz8uY29weV95c3R5bGUiXSksbiYmby5zd2FwQXR0cnModCxbImVycm9yXz8uY29sb3IiLCJlcnJvcl8/LnRoaWNrbmVzcyIsImVycm9yXz8ud2lkdGgiXSl9aWYoInN0cmluZyI9PXR5cGVvZiB0LmhvdmVyaW5mbyl7dmFyIGk9dC5ob3ZlcmluZm8uc3BsaXQoIisiKTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKSJ4Ij09PWlbZV0/aVtlXT0ieSI6InkiPT09aVtlXSYmKGlbZV09IngiKTt0LmhvdmVyaW5mbz1pLmpvaW4oIisiKX19LHIuY29lcmNlVHJhY2VJbmRpY2VzPWZ1bmN0aW9uKHQsZSl7aWYobihlKSlyZXR1cm5bZV07aWYoIUFycmF5LmlzQXJyYXkoZSl8fCFlLmxlbmd0aClyZXR1cm4gdC5kYXRhLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKTtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHI9W10saT0wO2k8ZS5sZW5ndGg7aSsrKW8uaXNJbmRleChlW2ldLHQuZGF0YS5sZW5ndGgpP3IucHVzaChlW2ldKTpvLndhcm4oInRyYWNlIGluZGV4ICgiLGVbaV0sIikgaXMgbm90IGEgbnVtYmVyIG9yIGlzIG91dCBvZiBib3VuZHMiKTtyZXR1cm4gcn1yZXR1cm4gZX0sci5tYW5hZ2VBcnJheUNvbnRhaW5lcnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQub2JqLGE9dC5wYXJ0cyxzPWEubGVuZ3RoLGw9YVtzLTFdLGM9bihsKTtpZihjJiZudWxsPT09ZSl7dmFyIHU9YS5zbGljZSgwLHMtMSkuam9pbigiLiIpO28ubmVzdGVkUHJvcGVydHkoaSx1KS5nZXQoKS5zcGxpY2UobCwxKX1lbHNlIGMmJnZvaWQgMD09PXQuZ2V0KCk/KHZvaWQgMD09PXQuZ2V0KCkmJihyW3QuYXN0cl09bnVsbCksdC5zZXQoZSkpOnQuc2V0KGUpfTt2YXIgeD0vKFwuW15cW1xdXC5dK3xcW1teXFtcXVwuXStcXSkkLztmdW5jdGlvbiBiKHQpe3ZhciBlPXQuc2VhcmNoKHgpO2lmKGU+MClyZXR1cm4gdC5zdWJzdHIoMCxlKX1yLmhhc1BhcmVudD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1iKGUpO3I7KXtpZihyIGluIHQpcmV0dXJuITA7cj1iKHIpfXJldHVybiExfTt2YXIgXz1bIngiLCJ5IiwieiJdO3IuY2xlYXJBeGlzVHlwZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT10Ll9mdWxsRGF0YVtuXSxhPTA7YTwzO2ErKyl7dmFyIHM9aCh0LGksX1thXSk7aWYocyYmImxvZyIhPT1zLnR5cGUpe3ZhciBsPXMuX25hbWUsYz1zLl9pZC5zdWJzdHIoMSk7aWYoInNjZW5lIj09PWMuc3Vic3RyKDAsNSkpe2lmKHZvaWQgMCE9PXJbY10pY29udGludWU7bD1jKyIuIitsfXZhciB1PWwrIi50eXBlIjt2b2lkIDA9PT1yW2xdJiZ2b2lkIDA9PT1yW3VdJiZvLm5lc3RlZFByb3BlcnR5KHQubGF5b3V0LHUpLnNldChudWxsKX19fX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uL2xpYiI6NzUwLCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgwMiwiLi4vcGxvdHMvcGxvdHMiOjg2MiwiLi4vcmVnaXN0cnkiOjg4MiwiZmFzdC1pc251bWVyaWMiOjI0MSwiZ2wtbWF0NC9mcm9tUXVhdCI6Mjc1fV0sNzgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcGxvdF9hcGkiKTtyLnBsb3Q9bi5wbG90LHIubmV3UGxvdD1uLm5ld1Bsb3Qsci5yZXN0eWxlPW4ucmVzdHlsZSxyLnJlbGF5b3V0PW4ucmVsYXlvdXQsci5yZWRyYXc9bi5yZWRyYXcsci51cGRhdGU9bi51cGRhdGUsci5fZ3VpUmVzdHlsZT1uLl9ndWlSZXN0eWxlLHIuX2d1aVJlbGF5b3V0PW4uX2d1aVJlbGF5b3V0LHIuX2d1aVVwZGF0ZT1uLl9ndWlVcGRhdGUsci5fc3RvcmVEaXJlY3RHVUlFZGl0PW4uX3N0b3JlRGlyZWN0R1VJRWRpdCxyLnJlYWN0PW4ucmVhY3Qsci5leHRlbmRUcmFjZXM9bi5leHRlbmRUcmFjZXMsci5wcmVwZW5kVHJhY2VzPW4ucHJlcGVuZFRyYWNlcyxyLmFkZFRyYWNlcz1uLmFkZFRyYWNlcyxyLmRlbGV0ZVRyYWNlcz1uLmRlbGV0ZVRyYWNlcyxyLm1vdmVUcmFjZXM9bi5tb3ZlVHJhY2VzLHIucHVyZ2U9bi5wdXJnZSxyLmFkZEZyYW1lcz1uLmFkZEZyYW1lcyxyLmRlbGV0ZUZyYW1lcz1uLmRlbGV0ZUZyYW1lcyxyLmFuaW1hdGU9bi5hbmltYXRlLHIuc2V0UGxvdENvbmZpZz1uLnNldFBsb3RDb25maWcsci50b0ltYWdlPXQoIi4vdG9faW1hZ2UiKSxyLnZhbGlkYXRlPXQoIi4vdmFsaWRhdGUiKSxyLmRvd25sb2FkSW1hZ2U9dCgiLi4vc25hcHNob3QvZG93bmxvYWQiKTt2YXIgaT10KCIuL3RlbXBsYXRlX2FwaSIpO3IubWFrZVRlbXBsYXRlPWkubWFrZVRlbXBsYXRlLHIudmFsaWRhdGVUZW1wbGF0ZT1pLnZhbGlkYXRlVGVtcGxhdGV9LHsiLi4vc25hcHNob3QvZG93bmxvYWQiOjg4NCwiLi9wbG90X2FwaSI6Nzg1LCIuL3RlbXBsYXRlX2FwaSI6NzkwLCIuL3RvX2ltYWdlIjo3OTEsIi4vdmFsaWRhdGUiOjc5Mn1dLDc4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvaXNfcGxhaW5fb2JqZWN0IiksaT10KCIuLi9saWIvbm9vcCIpLGE9dCgiLi4vbGliL2xvZ2dlcnMiKSxvPXQoIi4uL2xpYi9zZWFyY2giKS5zb3J0ZXJBc2Mscz10KCIuLi9yZWdpc3RyeSIpO3IuY29udGFpbmVyQXJyYXlNYXRjaD10KCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCIpO3ZhciBsPXIuaXNBZGRWYWw9ZnVuY3Rpb24odCl7cmV0dXJuImFkZCI9PT10fHxuKHQpfSxjPXIuaXNSZW1vdmVWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwicmVtb3ZlIj09PXR9O3IuYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXM9ZnVuY3Rpb24odCxlLHIsbix1KXt2YXIgaD1lLmFzdHIsZj1zLmdldENvbXBvbmVudE1ldGhvZChoLCJzdXBwbHlMYXlvdXREZWZhdWx0cyIpLHA9cy5nZXRDb21wb25lbnRNZXRob2QoaCwiZHJhdyIpLGQ9cy5nZXRDb21wb25lbnRNZXRob2QoaCwiZHJhd09uZSIpLGc9bi5yZXBsb3R8fG4ucmVjYWxjfHxmPT09aXx8cD09PWksbT10LmxheW91dCx2PXQuX2Z1bGxMYXlvdXQ7aWYoclsiIl0pe09iamVjdC5rZXlzKHIpLmxlbmd0aD4xJiZhLndhcm4oIkZ1bGwgYXJyYXkgZWRpdHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIGVkaXRzIixoKTt2YXIgeT1yWyIiXVsiIl07aWYoYyh5KSllLnNldChudWxsKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHkpKXJldHVybiBhLndhcm4oIlVucmVjb2duaXplZCBmdWxsIGFycmF5IGVkaXQgdmFsdWUiLGgseSksITA7ZS5zZXQoeSl9cmV0dXJuIWcmJihmKG0sdikscCh0KSwhMCl9dmFyIHgsYixfLHcsVCxrLE0sQSxTPU9iamVjdC5rZXlzKHIpLm1hcChOdW1iZXIpLnNvcnQobyksRT1lLmdldCgpLEM9RXx8W10sTD11KHYsaCkuZ2V0KCksUD1bXSxJPS0xLHo9Qy5sZW5ndGg7Zm9yKHg9MDt4PFMubGVuZ3RoO3grKylpZih3PXJbXz1TW3hdXSxUPU9iamVjdC5rZXlzKHcpLGs9d1siIl0sTT1sKGspLF88MHx8Xz5DLmxlbmd0aC0oTT8wOjEpKWEud2FybigiaW5kZXggb3V0IG9mIHJhbmdlIixoLF8pO2Vsc2UgaWYodm9pZCAwIT09aylULmxlbmd0aD4xJiZhLndhcm4oIkluc2VydGlvbiAmIHJlbW92YWwgYXJlIGluY29tcGF0aWJsZSB3aXRoIGVkaXRzIHRvIHRoZSBzYW1lIGluZGV4LiIsaCxfKSxjKGspP1AucHVzaChfKTpNPygiYWRkIj09PWsmJihrPXt9KSxDLnNwbGljZShfLDAsayksTCYmTC5zcGxpY2UoXywwLHt9KSk6YS53YXJuKCJVbnJlY29nbml6ZWQgZnVsbCBvYmplY3QgZWRpdCB2YWx1ZSIsaCxfLGspLC0xPT09SSYmKEk9Xyk7ZWxzZSBmb3IoYj0wO2I8VC5sZW5ndGg7YisrKUE9aCsiWyIrXysiXS4iLHUoQ1tfXSxUW2JdLEEpLnNldCh3W1RbYl1dKTtmb3IoeD1QLmxlbmd0aC0xO3g+PTA7eC0tKUMuc3BsaWNlKFBbeF0sMSksTCYmTC5zcGxpY2UoUFt4XSwxKTtpZihDLmxlbmd0aD9FfHxlLnNldChDKTplLnNldChudWxsKSxnKXJldHVybiExO2lmKGYobSx2KSxkIT09aSl7dmFyIE87aWYoLTE9PT1JKU89UztlbHNle2Zvcih6PU1hdGgubWF4KEMubGVuZ3RoLHopLE89W10seD0wO3g8Uy5sZW5ndGgmJiEoKF89U1t4XSk+PUkpO3grKylPLnB1c2goXyk7Zm9yKHg9STt4PHo7eCsrKU8ucHVzaCh4KX1mb3IoeD0wO3g8Ty5sZW5ndGg7eCsrKWQodCxPW3hdKX1lbHNlIHAodCk7cmV0dXJuITB9fSx7Ii4uL2xpYi9pc19wbGFpbl9vYmplY3QiOjc1MSwiLi4vbGliL2xvZ2dlcnMiOjc1NCwiLi4vbGliL25vb3AiOjc1OSwiLi4vbGliL3NlYXJjaCI6NzY5LCIuLi9yZWdpc3RyeSI6ODgyLCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCI6NzgwfV0sNzg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiaGFzLWhvdmVyIiksbz10KCIuLi9saWIiKSxzPW8ubmVzdGVkUHJvcGVydHksbD10KCIuLi9saWIvZXZlbnRzIiksYz10KCIuLi9saWIvcXVldWUiKSx1PXQoIi4uL3JlZ2lzdHJ5IiksaD10KCIuL3Bsb3Rfc2NoZW1hIiksZj10KCIuLi9wbG90cy9wbG90cyIpLHA9dCgiLi4vcGxvdHMvcG9sYXIvbGVnYWN5IiksZD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGc9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbT10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksdj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3QiKS5pbml0SW50ZXJhY3Rpb25zLHk9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSx4PXQoIi4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGI9dCgiLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LF89dCgiLi9wbG90X2NvbmZpZyIpLmRmbHRDb25maWcsdz10KCIuL21hbmFnZV9hcnJheXMiKSxUPXQoIi4vaGVscGVycyIpLGs9dCgiLi9zdWJyb3V0aW5lcyIpLE09dCgiLi9lZGl0X3R5cGVzIiksQT10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuQVhfTkFNRV9QQVRURVJOLFM9MDtmdW5jdGlvbiBFKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50LS06dC5lbWl0KCJwbG90bHlfYWZ0ZXJwbG90Iil9ZnVuY3Rpb24gQyh0LGUpe3RyeXt0Ll9mdWxsTGF5b3V0Ll9wYXBlci5zdHlsZSgiYmFja2dyb3VuZCIsZSl9Y2F0Y2godCl7by5lcnJvcih0KX19ZnVuY3Rpb24gTCh0LGUpe0ModCxtLmNvbWJpbmUoZSwid2hpdGUiKSl9ZnVuY3Rpb24gUCh0LGUpe2lmKCF0Ll9jb250ZXh0KXt0Ll9jb250ZXh0PW8uZXh0ZW5kRGVlcCh7fSxfKTt2YXIgcj1uLnNlbGVjdCgiYmFzZSIpO3QuX2NvbnRleHQuX2Jhc2VVcmw9ci5zaXplKCkmJnIuYXR0cigiaHJlZiIpP3dpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF06IiJ9dmFyIGkscyxsLGM9dC5fY29udGV4dDtpZihlKXtmb3Iocz1PYmplY3Qua2V5cyhlKSxpPTA7aTxzLmxlbmd0aDtpKyspImVkaXRhYmxlIiE9PShsPXNbaV0pJiYiZWRpdHMiIT09bCYmbCBpbiBjJiYoInNldEJhY2tncm91bmQiPT09bCYmIm9wYXF1ZSI9PT1lW2xdP2NbbF09TDpjW2xdPWVbbF0pO2UucGxvdDNkUGl4ZWxSYXRpbyYmIWMucGxvdEdsUGl4ZWxSYXRpbyYmKGMucGxvdEdsUGl4ZWxSYXRpbz1jLnBsb3QzZFBpeGVsUmF0aW8pO3ZhciB1PWUuZWRpdGFibGU7aWYodm9pZCAwIT09dSlmb3IoYy5lZGl0YWJsZT11LHM9T2JqZWN0LmtleXMoYy5lZGl0cyksaT0wO2k8cy5sZW5ndGg7aSsrKWMuZWRpdHNbc1tpXV09dTtpZihlLmVkaXRzKWZvcihzPU9iamVjdC5rZXlzKGUuZWRpdHMpLGk9MDtpPHMubGVuZ3RoO2krKykobD1zW2ldKWluIGMuZWRpdHMmJihjLmVkaXRzW2xdPWUuZWRpdHNbbF0pO2MuX2V4cG9ydGVkUGxvdD1lLl9leHBvcnRlZFBsb3R9Yy5zdGF0aWNQbG90JiYoYy5lZGl0YWJsZT0hMSxjLmVkaXRzPXt9LGMuYXV0b3NpemFibGU9ITEsYy5zY3JvbGxab29tPSExLGMuZG91YmxlQ2xpY2s9ITEsYy5zaG93VGlwcz0hMSxjLnNob3dMaW5rPSExLGMuZGlzcGxheU1vZGVCYXI9ITEpLCJob3ZlciIhPT1jLmRpc3BsYXlNb2RlQmFyfHxhfHwoYy5kaXNwbGF5TW9kZUJhcj0hMCksInRyYW5zcGFyZW50IiE9PWMuc2V0QmFja2dyb3VuZCYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc2V0QmFja2dyb3VuZHx8KGMuc2V0QmFja2dyb3VuZD1DKSxjLl9oYXNaZXJvSGVpZ2h0PWMuX2hhc1plcm9IZWlnaHR8fDA9PT10LmNsaWVudEhlaWdodCxjLl9oYXNaZXJvV2lkdGg9Yy5faGFzWmVyb1dpZHRofHwwPT09dC5jbGllbnRXaWR0aDt2YXIgaD1jLnNjcm9sbFpvb20sZj1jLl9zY3JvbGxab29tPXt9O2lmKCEwPT09aClmLmNhcnRlc2lhbj0xLGYuZ2wzZD0xLGYuZ2VvPTEsZi5tYXBib3g9MTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgaCl7dmFyIHA9aC5zcGxpdCgiKyIpO2ZvcihpPTA7aTxwLmxlbmd0aDtpKyspZltwW2ldXT0xfWVsc2UhMSE9PWgmJihmLmdsM2Q9MSxmLmdlbz0xLGYubWFwYm94PTEpfWZ1bmN0aW9uIEkodCxlKXt2YXIgcixuLGk9ZSsxLGE9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKykobj10W3JdKTwwP2EucHVzaChpK24pOmEucHVzaChuKTtyZXR1cm4gYX1mdW5jdGlvbiB6KHQsZSxyKXt2YXIgbixpO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe2lmKChpPWVbbl0pIT09cGFyc2VJbnQoaSwxMCkpdGhyb3cgbmV3IEVycm9yKCJhbGwgdmFsdWVzIGluICIrcisiIG11c3QgYmUgaW50ZWdlcnMiKTtpZihpPj10LmRhdGEubGVuZ3RofHxpPC10LmRhdGEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihyKyIgbXVzdCBiZSB2YWxpZCBpbmRpY2VzIGZvciBnZC5kYXRhLiIpO2lmKGUuaW5kZXhPZihpLG4rMSk+LTF8fGk+PTAmJmUuaW5kZXhPZigtdC5kYXRhLmxlbmd0aCtpKT4tMXx8aTwwJiZlLmluZGV4T2YodC5kYXRhLmxlbmd0aCtpKT4tMSl0aHJvdyBuZXcgRXJyb3IoImVhY2ggaW5kZXggaW4gIityKyIgbXVzdCBiZSB1bmlxdWUuIil9fWZ1bmN0aW9uIE8odCxlLHIpe2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiY3VycmVudEluZGljZXMgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4iKTtpZihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLHoodCxlLCJjdXJyZW50SW5kaWNlcyIpLCJ1bmRlZmluZWQiPT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSwidW5kZWZpbmVkIiE9dHlwZW9mIHImJnoodCxyLCJuZXdJbmRpY2VzIiksInVuZGVmaW5lZCIhPXR5cGVvZiByJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3VycmVudCBhbmQgbmV3IGluZGljZXMgbXVzdCBiZSBvZiBlcXVhbCBsZW5ndGguIil9ZnVuY3Rpb24gRCh0LGUscixuLGEpeyFmdW5jdGlvbih0LGUscixuKXt2YXIgaT1vLmlzUGxhaW5PYmplY3Qobik7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpdGhyb3cgbmV3IEVycm9yKCJ1cGRhdGUgbXVzdCBiZSBhIGtleTp2YWx1ZSBvYmplY3QiKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2VycyIpO2Zvcih2YXIgYSBpbiB6KHQsciwiaW5kaWNlcyIpLGUpe2lmKCFBcnJheS5pc0FycmF5KGVbYV0pfHxlW2FdLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlICIrYSsiIG11c3QgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIGluZGljZXMgYXJyYXkgbGVuZ3RoIik7aWYoaSYmKCEoYSBpbiBuKXx8IUFycmF5LmlzQXJyYXkoblthXSl8fG5bYV0ubGVuZ3RoIT09ZVthXS5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigid2hlbiBtYXhQb2ludHMgaXMgc2V0IGFzIGEga2V5OnZhbHVlIG9iamVjdCBpdCBtdXN0IGNvbnRhaW4gYSAxOjEgY29ycmlzcG9uZGVuY2Ugd2l0aCB0aGUga2V5cyBhbmQgbnVtYmVyIG9mIHRyYWNlcyBpbiB0aGUgdXBkYXRlIG9iamVjdCIpfX0odCxlLHIsbik7Zm9yKHZhciBsPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGwsYyx1LGgsZj1vLmlzUGxhaW5PYmplY3QobikscD1bXTtmb3IodmFyIGQgaW4gQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPUkocix0LmRhdGEubGVuZ3RoLTEpLGUpZm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspe2lmKGE9dC5kYXRhW3JbZ11dLGw9KGM9cyhhLGQpKS5nZXQoKSx1PWVbZF1bZ10sIW8uaXNBcnJheU9yVHlwZWRBcnJheSh1KSl0aHJvdyBuZXcgRXJyb3IoImF0dHJpYnV0ZTogIitkKyIgaW5kZXg6ICIrZysiIG11c3QgYmUgYW4gYXJyYXkiKTtpZighby5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGV4dGVuZCBtaXNzaW5nIG9yIG5vbi1hcnJheSBhdHRyaWJ1dGU6ICIrZCk7aWYobC5jb25zdHJ1Y3RvciE9PXUuY29uc3RydWN0b3IpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIGFycmF5IHdpdGggYW4gYXJyYXkgb2YgYSBkaWZmZXJlbnQgdHlwZTogIitkKTtoPWY/bltkXVtnXTpuLGkoaCl8fChoPS0xKSxwLnB1c2goe3Byb3A6Yyx0YXJnZXQ6bCxpbnNlcnQ6dSxtYXhwOk1hdGguZmxvb3IoaCl9KX1yZXR1cm4gcH0odCxlLHIsbiksYz17fSx1PXt9LGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIGY9bFtoXS5wcm9wLHA9bFtoXS5tYXhwLGQ9YShsW2hdLnRhcmdldCxsW2hdLmluc2VydCxwKTtmLnNldChkWzBdKSxBcnJheS5pc0FycmF5KGNbZi5hc3RyXSl8fChjW2YuYXN0cl09W10pLGNbZi5hc3RyXS5wdXNoKGRbMV0pLEFycmF5LmlzQXJyYXkodVtmLmFzdHJdKXx8KHVbZi5hc3RyXT1bXSksdVtmLmFzdHJdLnB1c2gobFtoXS50YXJnZXQubGVuZ3RoKX1yZXR1cm57dXBkYXRlOmMsbWF4UG9pbnRzOnV9fWZ1bmN0aW9uIFIodCxlKXt2YXIgcj1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aCk7cmV0dXJuIHIuc2V0KHQpLHIuc2V0KGUsdC5sZW5ndGgpLHJ9ZnVuY3Rpb24gRih0LGUsbixpKXt0PW8uZ2V0R3JhcGhEaXYodCksVC5jbGVhclByb21pc2VRdWV1ZSh0KTt2YXIgYT17fTtpZigic3RyaW5nIj09dHlwZW9mIGUpYVtlXT1uO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKCJSZXN0eWxlIGZhaWwuIixlLG4saSksUHJvbWlzZS5yZWplY3QoKTthPW8uZXh0ZW5kRmxhdCh7fSxlKSx2b2lkIDA9PT1pJiYoaT1uKX1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBzPVQuY29lcmNlVHJhY2VJbmRpY2VzKHQsaSksbD1VKHQsYSxzKSx1PWwuZmxhZ3M7dS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApLHUuY2xlYXJBeGlzVHlwZXMmJlQuY2xlYXJBeGlzVHlwZXModCxzLHt9KTt2YXIgaD1bXTt1LmZ1bGxSZXBsb3Q/aC5wdXNoKHIucGxvdCk6KGgucHVzaChmLnByZXZpb3VzUHJvbWlzZXMpLGYuc3VwcGx5RGVmYXVsdHModCksdS5tYXJrZXJTaXplJiYoZi5kb0NhbGNkYXRhKHQpLEcoaCkpLHUuc3R5bGUmJmgucHVzaChrLmRvVHJhY2VTdHlsZSksdS5jb2xvcmJhcnMmJmgucHVzaChrLmRvQ29sb3JCYXJzKSxoLnB1c2goRSkpLGgucHVzaChmLnJlaG92ZXIsZi5yZWRyYWcpLGMuYWRkKHQsRixbdCxsLnVuZG9pdCxsLnRyYWNlc10sRixbdCxsLnJlZG9pdCxsLnRyYWNlc10pO3ZhciBwPW8uc3luY09yQXN5bmMoaCx0KTtyZXR1cm4gcCYmcC50aGVufHwocD1Qcm9taXNlLnJlc29sdmUoKSkscC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZXN0eWxlIixsLmV2ZW50RGF0YSksdH0pKX1mdW5jdGlvbiBCKHQpe3JldHVybiB2b2lkIDA9PT10P251bGw6dH1mdW5jdGlvbiBOKHQsZSl7cmV0dXJuIGU/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXMoZSxyKSxhPWkuc2V0O3JldHVybiBpLnNldD1mdW5jdGlvbihlKXtqKChufHwiIikrcixpLmdldCgpLGUsdCksYShlKX0saX06c31mdW5jdGlvbiBqKHQsZSxyLG4pe2lmKEFycmF5LmlzQXJyYXkoZSl8fEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPUFycmF5LmlzQXJyYXkoZSk/ZTpbXSxhPUFycmF5LmlzQXJyYXkocik/cjpbXSxzPU1hdGgubWF4KGkubGVuZ3RoLGEubGVuZ3RoKSxsPTA7bDxzO2wrKylqKHQrIlsiK2wrIl0iLGlbbF0sYVtsXSxuKTtlbHNlIGlmKG8uaXNQbGFpbk9iamVjdChlKXx8by5pc1BsYWluT2JqZWN0KHIpKXt2YXIgYz1vLmlzUGxhaW5PYmplY3QoZSk/ZTp7fSx1PW8uaXNQbGFpbk9iamVjdChyKT9yOnt9LGg9by5leHRlbmRGbGF0KHt9LGMsdSk7Zm9yKHZhciBmIGluIGgpaih0KyIuIitmLGNbZl0sdVtmXSxuKX1lbHNlIHZvaWQgMD09PW5bdF0mJihuW3RdPUIoZSkpfWZ1bmN0aW9uIFUodCxlLHIpe3ZhciBuLGk9dC5fZnVsbExheW91dCxhPXQuX2Z1bGxEYXRhLGw9dC5kYXRhLGM9aS5fZ3VpRWRpdGluZyxwPU4oaS5fcHJlR1VJLGMpLGc9by5leHRlbmREZWVwQWxsKHt9LGUpO1YoZSk7dmFyIG0sdj1NLnRyYWNlRmxhZ3MoKSx5PXt9LHg9e307ZnVuY3Rpb24gYigpe3JldHVybiByLm1hcCgoZnVuY3Rpb24oKXt9KSl9ZnVuY3Rpb24gXyh0KXt2YXIgZT1kLmlkMm5hbWUodCk7LTE9PT1tLmluZGV4T2YoZSkmJm0ucHVzaChlKX1mdW5jdGlvbiB3KHQpe3JldHVybiJMQVlPVVQiK3QrIi5hdXRvcmFuZ2UifWZ1bmN0aW9uIGsodCl7cmV0dXJuIkxBWU9VVCIrdCsiLnJhbmdlIn1mdW5jdGlvbiBBKHQpe2Zvcih2YXIgZT10O2U8YS5sZW5ndGg7ZSsrKWlmKGFbZV0uX2lucHV0PT09bFt0XSlyZXR1cm4gYVtlXX1mdW5jdGlvbiBTKG4sYSxvKXtpZihBcnJheS5pc0FycmF5KG4pKW4uZm9yRWFjaCgoZnVuY3Rpb24odCl7Uyh0LGEsbyl9KSk7ZWxzZSBpZighKG4gaW4gZSkmJiFULmhhc1BhcmVudChlLG4pKXt2YXIgcztpZigiTEFZT1VUIj09PW4uc3Vic3RyKDAsNikpcz1wKHQubGF5b3V0LG4ucmVwbGFjZSgiTEFZT1VUIiwiIikpO2Vsc2V7dmFyIHU9cltvXTtzPU4oaS5fdHJhY2VQcmVHVUlbQSh1KS5fZnVsbElucHV0LnVpZF0sYykobFt1XSxuKX1uIGluIHh8fCh4W25dPWIoKSksdm9pZCAwPT09eFtuXVtvXSYmKHhbbl1bb109QihzLmdldCgpKSksdm9pZCAwIT09YSYmcy5zZXQoYSl9fWZ1bmN0aW9uIEUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBhW2VdW3RdfX1mdW5jdGlvbiBDKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiExPT09ZT9hW3Jbbl1dW3RdOm51bGx9fWZvcih2YXIgTCBpbiBlKXtpZihULmhhc1BhcmVudChlLEwpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK0wrIiBhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7dmFyIFAsSSx6LE8sRCxSLEY9ZVtMXTtpZigiYXV0b2JpbngiIT09TCYmImF1dG9iaW55IiE9PUx8fChMPUwuY2hhckF0KEwubGVuZ3RoLTEpKyJiaW5zIixGPUFycmF5LmlzQXJyYXkoRik/Ri5tYXAoQyhMKSk6ITE9PT1GP3IubWFwKEUoTCkpOm51bGwpLHlbTF09RiwiTEFZT1VUIiE9PUwuc3Vic3RyKDAsNikpe2Zvcih4W0xdPWIoKSxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKFA9bFtyW25dXSxJPUEocltuXSksTz0oej1OKGkuX3RyYWNlUHJlR1VJW0kuX2Z1bGxJbnB1dC51aWRdLGMpKFAsTCkpLmdldCgpLHZvaWQgMCE9PShEPUFycmF5LmlzQXJyYXkoRik/RltuJUYubGVuZ3RoXTpGKSl7dmFyIGo9ei5wYXJ0c1t6LnBhcnRzLmxlbmd0aC0xXSxVPUwuc3Vic3RyKDAsTC5sZW5ndGgtai5sZW5ndGgtMSkscT1VP1UrIi4iOiIiLEg9VT9zKEksVSkuZ2V0KCk6STtpZigoUj1oLmdldFRyYWNlVmFsT2JqZWN0KEksei5wYXJ0cykpJiZSLmltcGxpZWRFZGl0cyYmbnVsbCE9PUQpZm9yKHZhciBHIGluIFIuaW1wbGllZEVkaXRzKVMoby5yZWxhdGl2ZUF0dHIoTCxHKSxSLmltcGxpZWRFZGl0c1tHXSxuKTtlbHNlIGlmKCJ0aGlja25lc3Ntb2RlIiE9PWomJiJsZW5tb2RlIiE9PWp8fE89PT1EfHwiZnJhY3Rpb24iIT09RCYmInBpeGVscyIhPT1EfHwhSCl7aWYoInR5cGUiPT09TCYmKCJwaWUiPT09RCE9KCJwaWUiPT09Tyl8fCJmdW5uZWxhcmVhIj09PUQhPSgiZnVubmVsYXJlYSI9PT1PKSkpe3ZhciBZPSJ4IixXPSJ5IjsiYmFyIiE9PUQmJiJiYXIiIT09T3x8ImgiIT09UC5vcmllbnRhdGlvbnx8KFk9InkiLFc9IngiKSxvLnN3YXBBdHRycyhQLFsiPyIsIj9zcmMiXSwibGFiZWxzIixZKSxvLnN3YXBBdHRycyhQLFsiZD8iLCI/MCJdLCJsYWJlbCIsWSksby5zd2FwQXR0cnMoUCxbIj8iLCI/c3JjIl0sInZhbHVlcyIsVyksInBpZSI9PT1PfHwiZnVubmVsYXJlYSI9PT1PPyhzKFAsIm1hcmtlci5jb2xvciIpLnNldChzKFAsIm1hcmtlci5jb2xvcnMiKS5nZXQoKSksaS5fcGllbGF5ZXIuc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCkpOnUudHJhY2VJcyhQLCJjYXJ0ZXNpYW4iKSYmcyhQLCJtYXJrZXIuY29sb3JzIikuc2V0KHMoUCwibWFya2VyLmNvbG9yIikuZ2V0KCkpfX1lbHNle3ZhciBaPWkuX3NpemUsWD1ILm9yaWVudCxKPSJ0b3AiPT09WHx8ImJvdHRvbSI9PT1YO2lmKCJ0aGlja25lc3Ntb2RlIj09PWope3ZhciBLPUo/Wi5oOloudztTKHErInRoaWNrbmVzcyIsSC50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1EPzEvSzpLKSxuKX1lbHNle3ZhciBRPUo/Wi53OlouaDtTKHErImxlbiIsSC5sZW4qKCJmcmFjdGlvbiI9PT1EPzEvUTpRKSxuKX19eFtMXVtuXT1CKE8pO2lmKC0xIT09WyJzd2FweHkiLCJzd2FweHlheGVzIiwib3JpZW50YXRpb24iLCJvcmllbnRhdGlvbmF4ZXMiXS5pbmRleE9mKEwpKXtpZigib3JpZW50YXRpb24iPT09TCl7ei5zZXQoRCk7dmFyICQ9UC54JiYhUC55PyJoIjoidiI7aWYoKHouZ2V0KCl8fCQpPT09SS5vcmllbnRhdGlvbiljb250aW51ZX1lbHNlIm9yaWVudGF0aW9uYXhlcyI9PT1MJiYoUC5vcmllbnRhdGlvbj17djoiaCIsaDoidiJ9W0kub3JpZW50YXRpb25dKTtULnN3YXBYWURhdGEoUCksdi5jYWxjPXYuY2xlYXJBeGlzVHlwZXM9ITB9ZWxzZS0xIT09Zi5kYXRhQXJyYXlDb250YWluZXJzLmluZGV4T2Yoei5wYXJ0c1swXSk/KFQubWFuYWdlQXJyYXlDb250YWluZXJzKHosRCx4KSx2LmNhbGM9ITApOihSP1IuYXJyYXlPayYmIXUudHJhY2VJcyhJLCJyZWdsIikmJihvLmlzQXJyYXlPclR5cGVkQXJyYXkoRCl8fG8uaXNBcnJheU9yVHlwZWRBcnJheShPKSk/di5jYWxjPSEwOk0udXBkYXRlKHYsUik6di5jYWxjPSEwLHouc2V0KEQpKX19aWYoLTEhPT1bInN3YXB4eWF4ZXMiLCJvcmllbnRhdGlvbmF4ZXMiXS5pbmRleE9mKEwpJiZkLnN3YXAodCxyKSwib3JpZW50YXRpb25heGVzIj09PUwpe3ZhciB0dD1zKHQubGF5b3V0LCJob3Zlcm1vZGUiKSxldD10dC5nZXQoKTsieCI9PT1ldD90dC5zZXQoInkiKToieSI9PT1ldD90dC5zZXQoIngiKToieCB1bmlmaWVkIj09PWV0P3R0LnNldCgieSB1bmlmaWVkIik6InkgdW5pZmllZCI9PT1ldCYmdHQuc2V0KCJ4IHVuaWZpZWQiKX1pZigtMSE9PVsib3JpZW50YXRpb24iLCJ0eXBlIl0uaW5kZXhPZihMKSl7Zm9yKG09W10sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgcnQ9bFtyW25dXTt1LnRyYWNlSXMocnQsImNhcnRlc2lhbiIpJiYoXyhydC54YXhpc3x8IngiKSxfKHJ0LnlheGlzfHwieSIpKX1TKG0ubWFwKHcpLCEwLDApLFMobS5tYXAoayksWzAsMV0sMCl9fWVsc2Ugej1wKHQubGF5b3V0LEwucmVwbGFjZSgiTEFZT1VUIiwiIikpLHhbTF09W0Ioei5nZXQoKSldLHouc2V0KEFycmF5LmlzQXJyYXkoRik/RlswXTpGKSx2LmNhbGM9ITB9cmV0dXJuKHYuY2FsY3x8di5wbG90KSYmKHYuZnVsbFJlcGxvdD0hMCkse2ZsYWdzOnYsdW5kb2l0OngscmVkb2l0OnksdHJhY2VzOnIsZXZlbnREYXRhOm8uZXh0ZW5kRGVlcE5vQXJyYXlzKFtdLFtnLHJdKX19ZnVuY3Rpb24gVih0KXt2YXIgZSxyLG4saT1vLmNvdW50ZXJSZWdleCgiYXhpcyIsIi50aXRsZSIsITEsITEpLGE9L2NvbG9yYmFyXC50aXRsZSQvLHM9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPHMubGVuZ3RoO2UrKylyPXNbZV0sbj10W3JdLCJ0aXRsZSIhPT1yJiYhaS50ZXN0KHIpJiYhYS50ZXN0KHIpfHwic3RyaW5nIiE9dHlwZW9mIG4mJiJudW1iZXIiIT10eXBlb2Ygbj9yLmluZGV4T2YoInRpdGxlZm9udCIpPi0xP2wocixyLnJlcGxhY2UoInRpdGxlZm9udCIsInRpdGxlLmZvbnQiKSk6ci5pbmRleE9mKCJ0aXRsZXBvc2l0aW9uIik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVwb3NpdGlvbiIsInRpdGxlLnBvc2l0aW9uIikpOnIuaW5kZXhPZigidGl0bGVzaWRlIik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVzaWRlIiwidGl0bGUuc2lkZSIpKTpyLmluZGV4T2YoInRpdGxlb2Zmc2V0Iik+LTEmJmwocixyLnJlcGxhY2UoInRpdGxlb2Zmc2V0IiwidGl0bGUub2Zmc2V0IikpOmwocixyLnJlcGxhY2UoInRpdGxlIiwidGl0bGUudGV4dCIpKTtmdW5jdGlvbiBsKGUscil7dFtyXT10W2VdLGRlbGV0ZSB0W2VdfX1mdW5jdGlvbiBxKHQsZSxyKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksVC5jbGVhclByb21pc2VRdWV1ZSh0KSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpO3ZhciBuPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgZSluW2VdPXI7ZWxzZXtpZighby5pc1BsYWluT2JqZWN0KGUpKXJldHVybiBvLndhcm4oIlJlbGF5b3V0IGZhaWwuIixlLHIpLFByb21pc2UucmVqZWN0KCk7bj1vLmV4dGVuZEZsYXQoe30sZSl9T2JqZWN0LmtleXMobikubGVuZ3RoJiYodC5jaGFuZ2VkPSEwKTt2YXIgaT1YKHQsbiksYT1pLmZsYWdzO2EuY2FsYyYmKHQuY2FsY2RhdGE9dm9pZCAwKTt2YXIgcz1bZi5wcmV2aW91c1Byb21pc2VzXTthLmxheW91dFJlcGxvdD9zLnB1c2goay5sYXlvdXRSZXBsb3QpOk9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKEgodCxhLGkpfHxmLnN1cHBseURlZmF1bHRzKHQpLGEubGVnZW5kJiZzLnB1c2goay5kb0xlZ2VuZCksYS5sYXlvdXRzdHlsZSYmcy5wdXNoKGsubGF5b3V0U3R5bGVzKSxhLmF4cmFuZ2UmJkcocyxpLnJhbmdlc0FsdGVyZWQpLGEudGlja3MmJnMucHVzaChrLmRvVGlja3NSZWxheW91dCksYS5tb2RlYmFyJiZzLnB1c2goay5kb01vZGVCYXIpLGEuY2FtZXJhJiZzLnB1c2goay5kb0NhbWVyYSksYS5jb2xvcmJhcnMmJnMucHVzaChrLmRvQ29sb3JCYXJzKSxzLnB1c2goRSkpLHMucHVzaChmLnJlaG92ZXIsZi5yZWRyYWcpLGMuYWRkKHQscSxbdCxpLnVuZG9pdF0scSxbdCxpLnJlZG9pdF0pO3ZhciBsPW8uc3luY09yQXN5bmMocyx0KTtyZXR1cm4gbCYmbC50aGVufHwobD1Qcm9taXNlLnJlc29sdmUodCkpLGwudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGkuZXZlbnREYXRhKSx0fSkpfWZ1bmN0aW9uIEgodCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQ7aWYoIWUuYXhyYW5nZSlyZXR1cm4hMTtmb3IodmFyIGkgaW4gZSlpZigiYXhyYW5nZSIhPT1pJiZlW2ldKXJldHVybiExO2Zvcih2YXIgYSBpbiByLnJhbmdlc0FsdGVyZWQpe3ZhciBvPWQuaWQybmFtZShhKSxzPXQubGF5b3V0W29dLGw9bltvXTtpZihsLmF1dG9yYW5nZT1zLmF1dG9yYW5nZSxsLnJhbmdlPXMucmFuZ2Uuc2xpY2UoKSxsLmNsZWFuUmFuZ2UoKSxsLl9tYXRjaEdyb3VwKWZvcih2YXIgYyBpbiBsLl9tYXRjaEdyb3VwKWlmKGMhPT1hKXt2YXIgdT1uW2QuaWQybmFtZShjKV07dS5hdXRvcmFuZ2U9bC5hdXRvcmFuZ2UsdS5yYW5nZT1sLnJhbmdlLnNsaWNlKCksdS5faW5wdXQucmFuZ2U9bC5yYW5nZS5zbGljZSgpfX1yZXR1cm4hMH1mdW5jdGlvbiBHKHQsZSl7dmFyIHI9ZT9mdW5jdGlvbih0KXt2YXIgcj1bXSxuPSEwO2Zvcih2YXIgaSBpbiBlKXt2YXIgYT1kLmdldEZyb21JZCh0LGkpO2lmKHIucHVzaChpKSxhLl9tYXRjaEdyb3VwKWZvcih2YXIgbyBpbiBhLl9tYXRjaEdyb3VwKWVbb118fHIucHVzaChvKTthLmF1dG9tYXJnaW4mJihuPSExKX1yZXR1cm4gZC5kcmF3KHQscix7c2tpcFRpdGxlOm59KX06ZnVuY3Rpb24odCl7cmV0dXJuIGQuZHJhdyh0LCJyZWRyYXciKX07dC5wdXNoKGIsay5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzLHIsay5kcmF3RGF0YSxrLmZpbmFsRHJhdyl9dmFyIFk9L15beHl6XWF4aXNbMC05XSpcLnJhbmdlKFxbWzB8MV1cXSk/JC8sVz0vXlt4eXpdYXhpc1swLTldKlwuYXV0b3JhbmdlJC8sWj0vXlt4eXpdYXhpc1swLTldKlwuZG9tYWluKFxbWzB8MV1cXSk/JC87ZnVuY3Rpb24gWCh0LGUpe3ZhciByLG4saSxhPXQubGF5b3V0LGw9dC5fZnVsbExheW91dCxjPWwuX2d1aUVkaXRpbmcsZj1OKGwuX3ByZUdVSSxjKSxwPU9iamVjdC5rZXlzKGUpLGc9ZC5saXN0KHQpLG09by5leHRlbmREZWVwQWxsKHt9LGUpLHY9e307Zm9yKFYoZSkscD1PYmplY3Qua2V5cyhlKSxuPTA7bjxwLmxlbmd0aDtuKyspaWYoMD09PXBbbl0uaW5kZXhPZigiYWxsYXhlcyIpKXtmb3IoaT0wO2k8Zy5sZW5ndGg7aSsrKXt2YXIgeT1nW2ldLl9pZC5zdWJzdHIoMSkseD0tMSE9PXkuaW5kZXhPZigic2NlbmUiKT95KyIuIjoiIixiPXBbbl0ucmVwbGFjZSgiYWxsYXhlcyIseCtnW2ldLl9uYW1lKTtlW2JdfHwoZVtiXT1lW3Bbbl1dKX1kZWxldGUgZVtwW25dXX12YXIgXz1NLmxheW91dEZsYWdzKCksaz17fSxTPXt9O2Z1bmN0aW9uIEUodCxyKXtpZihBcnJheS5pc0FycmF5KHQpKXQuZm9yRWFjaCgoZnVuY3Rpb24odCl7RSh0LHIpfSkpO2Vsc2UgaWYoISh0IGluIGUpJiYhVC5oYXNQYXJlbnQoZSx0KSl7dmFyIG49ZihhLHQpO3QgaW4gU3x8KFNbdF09QihuLmdldCgpKSksdm9pZCAwIT09ciYmbi5zZXQocil9fXZhciBDLEw9e307ZnVuY3Rpb24gUCh0KXt2YXIgZT1kLm5hbWUyaWQodC5zcGxpdCgiLiIpWzBdKTtyZXR1cm4gTFtlXT0xLGV9Zm9yKHZhciBJIGluIGUpe2lmKFQuaGFzUGFyZW50KGUsSSkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2V0ICIrSSsiIGFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTtmb3IodmFyIHo9ZihhLEkpLE89ZVtJXSxEPXoucGFydHMubGVuZ3RoLTE7RD4wJiYic3RyaW5nIiE9dHlwZW9mIHoucGFydHNbRF07KUQtLTt2YXIgUj16LnBhcnRzW0RdLEY9ei5wYXJ0c1tELTFdKyIuIitSLGo9ei5wYXJ0cy5zbGljZSgwLEQpLmpvaW4oIi4iKSxVPXModC5sYXlvdXQsaikuZ2V0KCkscT1zKGwsaikuZ2V0KCksSD16LmdldCgpO2lmKHZvaWQgMCE9PU8pe2tbSV09TyxTW0ldPSJyZXZlcnNlIj09PVI/TzpCKEgpO3ZhciBHPWguZ2V0TGF5b3V0VmFsT2JqZWN0KGwsei5wYXJ0cyk7aWYoRyYmRy5pbXBsaWVkRWRpdHMmJm51bGwhPT1PKWZvcih2YXIgWCBpbiBHLmltcGxpZWRFZGl0cylFKG8ucmVsYXRpdmVBdHRyKEksWCksRy5pbXBsaWVkRWRpdHNbWF0pO2lmKC0xIT09WyJ3aWR0aCIsImhlaWdodCJdLmluZGV4T2YoSSkpaWYoTyl7RSgiYXV0b3NpemUiLG51bGwpO3ZhciBLPSJoZWlnaHQiPT09ST8id2lkdGgiOiJoZWlnaHQiO0UoSyxsW0tdKX1lbHNlIGxbSV09dC5faW5pdGlhbEF1dG9TaXplW0ldO2Vsc2UgaWYoImF1dG9zaXplIj09PUkpRSgid2lkdGgiLE8/bnVsbDpsLndpZHRoKSxFKCJoZWlnaHQiLE8/bnVsbDpsLmhlaWdodCk7ZWxzZSBpZihGLm1hdGNoKFkpKVAoRikscyhsLGorIi5faW5wdXRSYW5nZSIpLnNldChudWxsKTtlbHNlIGlmKEYubWF0Y2goVykpe1AoRikscyhsLGorIi5faW5wdXRSYW5nZSIpLnNldChudWxsKTt2YXIgUT1zKGwsaikuZ2V0KCk7US5faW5wdXREb21haW4mJihRLl9pbnB1dC5kb21haW49US5faW5wdXREb21haW4uc2xpY2UoKSl9ZWxzZSBGLm1hdGNoKFopJiZzKGwsaisiLl9pbnB1dERvbWFpbiIpLnNldChudWxsKTtpZigidHlwZSI9PT1SKXt2YXIgJD1VLHR0PSJsaW5lYXIiPT09cS50eXBlJiYibG9nIj09PU8sZXQ9ImxvZyI9PT1xLnR5cGUmJiJsaW5lYXIiPT09TztpZih0dHx8ZXQpe2lmKCQmJiQucmFuZ2UpaWYocS5hdXRvcmFuZ2UpdHQmJigkLnJhbmdlPSQucmFuZ2VbMV0+JC5yYW5nZVswXT9bMSwyXTpbMiwxXSk7ZWxzZXt2YXIgcnQ9JC5yYW5nZVswXSxudD0kLnJhbmdlWzFdO3R0PyhydDw9MCYmbnQ8PTAmJkUoaisiLmF1dG9yYW5nZSIsITApLHJ0PD0wP3J0PW50LzFlNjpudDw9MCYmKG50PXJ0LzFlNiksRShqKyIucmFuZ2VbMF0iLE1hdGgubG9nKHJ0KS9NYXRoLkxOMTApLEUoaisiLnJhbmdlWzFdIixNYXRoLmxvZyhudCkvTWF0aC5MTjEwKSk6KEUoaisiLnJhbmdlWzBdIixNYXRoLnBvdygxMCxydCkpLEUoaisiLnJhbmdlWzFdIixNYXRoLnBvdygxMCxudCkpKX1lbHNlIEUoaisiLmF1dG9yYW5nZSIsITApO0FycmF5LmlzQXJyYXkobC5fc3VicGxvdHMucG9sYXIpJiZsLl9zdWJwbG90cy5wb2xhci5sZW5ndGgmJmxbei5wYXJ0c1swXV0mJiJyYWRpYWxheGlzIj09PXoucGFydHNbMV0mJmRlbGV0ZSBsW3oucGFydHNbMF1dLl9zdWJwbG90LnZpZXdJbml0aWFsWyJyYWRpYWxheGlzLnJhbmdlIl0sdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY29udmVydENvb3JkcyIpKHQscSxPLEUpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJjb252ZXJ0Q29vcmRzIikodCxxLE8sRSl9ZWxzZSBFKGorIi5hdXRvcmFuZ2UiLCEwKSxFKGorIi5yYW5nZSIsbnVsbCk7cyhsLGorIi5faW5wdXRSYW5nZSIpLnNldChudWxsKX1lbHNlIGlmKFIubWF0Y2goQSkpe3ZhciBpdD1zKGwsSSkuZ2V0KCksYXQ9KE98fHt9KS50eXBlO2F0JiYiLSIhPT1hdHx8KGF0PSJsaW5lYXIiKSx1LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjb252ZXJ0Q29vcmRzIikodCxpdCxhdCxFKSx1LmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsaXQsYXQsRSl9dmFyIG90PXcuY29udGFpbmVyQXJyYXlNYXRjaChJKTtpZihvdCl7cj1vdC5hcnJheSxuPW90LmluZGV4O3ZhciBzdD1vdC5wcm9wZXJ0eSxsdD1HfHx7ZWRpdFR5cGU6ImNhbGMifTsiIiE9PW4mJiIiPT09c3QmJih3LmlzQWRkVmFsKE8pP1NbSV09bnVsbDp3LmlzUmVtb3ZlVmFsKE8pP1NbSV09KHMoYSxyKS5nZXQoKXx8W10pW25dOm8ud2FybigidW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IHZhbHVlIixlKSksTS51cGRhdGUoXyxsdCksdltyXXx8KHZbcl09e30pO3ZhciBjdD12W3JdW25dO2N0fHwoY3Q9dltyXVtuXT17fSksY3Rbc3RdPU8sZGVsZXRlIGVbSV19ZWxzZSJyZXZlcnNlIj09PVI/KFUucmFuZ2U/VS5yYW5nZS5yZXZlcnNlKCk6KEUoaisiLmF1dG9yYW5nZSIsITApLFUucmFuZ2U9WzEsMF0pLHEuYXV0b3JhbmdlP18uY2FsYz0hMDpfLnBsb3Q9ITApOihsLl9oYXMoInNjYXR0ZXItbGlrZSIpJiZsLl9oYXMoInJlZ2wiKSYmImRyYWdtb2RlIj09PUkmJigibGFzc28iPT09T3x8InNlbGVjdCI9PT1PKSYmImxhc3NvIiE9PUgmJiJzZWxlY3QiIT09SHx8bC5faGFzKCJnbDJkIik/Xy5wbG90PSEwOkc/TS51cGRhdGUoXyxHKTpfLmNhbGM9ITAsei5zZXQoTykpfX1mb3IociBpbiB2KXt3LmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzKHQsZihhLHIpLHZbcl0sXyxmKXx8KF8ucGxvdD0hMCl9dmFyIHV0PWwuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoQyBpbiBMKWZvcihuPTA7bjx1dC5sZW5ndGg7bisrKXt2YXIgaHQ9dXRbbl07aWYoaHRbQ10pZm9yKHZhciBmdCBpbiBfLmNhbGM9ITAsaHQpTFtmdF18fChkLmdldEZyb21JZCh0LGZ0KS5fY29uc3RyYWludFNocmlua2FibGU9ITApfXJldHVybihKKHQpfHxlLmhlaWdodHx8ZS53aWR0aCkmJihfLnBsb3Q9ITApLChfLnBsb3R8fF8uY2FsYykmJihfLmxheW91dFJlcGxvdD0hMCkse2ZsYWdzOl8scmFuZ2VzQWx0ZXJlZDpMLHVuZG9pdDpTLHJlZG9pdDprLGV2ZW50RGF0YTptfX1mdW5jdGlvbiBKKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLndpZHRoLG49ZS5oZWlnaHQ7cmV0dXJuIHQubGF5b3V0LmF1dG9zaXplJiZmLnBsb3RBdXRvU2l6ZSh0LHQubGF5b3V0LGUpLGUud2lkdGghPT1yfHxlLmhlaWdodCE9PW59ZnVuY3Rpb24gSyh0LGUsbixpKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksVC5jbGVhclByb21pc2VRdWV1ZSh0KSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpO28uaXNQbGFpbk9iamVjdChlKXx8KGU9e30pLG8uaXNQbGFpbk9iamVjdChuKXx8KG49e30pLE9iamVjdC5rZXlzKGUpLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCksT2JqZWN0LmtleXMobikubGVuZ3RoJiYodC5jaGFuZ2VkPSEwKTt2YXIgYT1ULmNvZXJjZVRyYWNlSW5kaWNlcyh0LGkpLHM9VSh0LG8uZXh0ZW5kRmxhdCh7fSxlKSxhKSxsPXMuZmxhZ3MsdT1YKHQsby5leHRlbmRGbGF0KHt9LG4pKSxoPXUuZmxhZ3M7KGwuY2FsY3x8aC5jYWxjKSYmKHQuY2FsY2RhdGE9dm9pZCAwKSxsLmNsZWFyQXhpc1R5cGVzJiZULmNsZWFyQXhpc1R5cGVzKHQsYSxuKTt2YXIgcD1bXTtoLmxheW91dFJlcGxvdD9wLnB1c2goay5sYXlvdXRSZXBsb3QpOmwuZnVsbFJlcGxvdD9wLnB1c2goci5wbG90KToocC5wdXNoKGYucHJldmlvdXNQcm9taXNlcyksSCh0LGgsdSl8fGYuc3VwcGx5RGVmYXVsdHModCksbC5zdHlsZSYmcC5wdXNoKGsuZG9UcmFjZVN0eWxlKSwobC5jb2xvcmJhcnN8fGguY29sb3JiYXJzKSYmcC5wdXNoKGsuZG9Db2xvckJhcnMpLGgubGVnZW5kJiZwLnB1c2goay5kb0xlZ2VuZCksaC5sYXlvdXRzdHlsZSYmcC5wdXNoKGsubGF5b3V0U3R5bGVzKSxoLmF4cmFuZ2UmJkcocCx1LnJhbmdlc0FsdGVyZWQpLGgudGlja3MmJnAucHVzaChrLmRvVGlja3NSZWxheW91dCksaC5tb2RlYmFyJiZwLnB1c2goay5kb01vZGVCYXIpLGguY2FtZXJhJiZwLnB1c2goay5kb0NhbWVyYSkscC5wdXNoKEUpKSxwLnB1c2goZi5yZWhvdmVyLGYucmVkcmFnKSxjLmFkZCh0LEssW3Qscy51bmRvaXQsdS51bmRvaXQscy50cmFjZXNdLEssW3Qscy5yZWRvaXQsdS5yZWRvaXQscy50cmFjZXNdKTt2YXIgZD1vLnN5bmNPckFzeW5jKHAsdCk7cmV0dXJuIGQmJmQudGhlbnx8KGQ9UHJvbWlzZS5yZXNvbHZlKHQpKSxkLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3VwZGF0ZSIse2RhdGE6cy5ldmVudERhdGEsbGF5b3V0OnUuZXZlbnREYXRhfSksdH0pKX1mdW5jdGlvbiBRKHQpe3JldHVybiBmdW5jdGlvbihlKXtlLl9mdWxsTGF5b3V0Ll9ndWlFZGl0aW5nPSEwO3ZhciByPXQuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiBlLl9mdWxsTGF5b3V0Ll9ndWlFZGl0aW5nPSExLHJ9fXZhciAkPVt7cGF0dGVybjovXmhpZGRlbmxhYmVscy8sYXR0cjoibGVnZW5kLnVpcmV2aXNpb24ifSx7cGF0dGVybjovXigoeHx5KWF4aXNcZCopXC4oKGF1dG8pP3JhbmdlfHRpdGxlXC50ZXh0KS99LHtwYXR0ZXJuOi9heGlzXGQqXC5zaG93c3Bpa2VzJC8sYXR0cjoibW9kZWJhci51aXJldmlzaW9uIn0se3BhdHRlcm46Lyhob3ZlcnxkcmFnKW1vZGUkLyxhdHRyOiJtb2RlYmFyLnVpcmV2aXNpb24ifSx7cGF0dGVybjovXihzY2VuZVxkKilcLmNhbWVyYS99LHtwYXR0ZXJuOi9eKGdlb1xkKilcLihwcm9qZWN0aW9ufGNlbnRlcnxmaXRib3VuZHMpL30se3BhdHRlcm46L14odGVybmFyeVxkKlwuW2FiY11heGlzKVwuKG1pbnx0aXRsZVwudGV4dCkkL30se3BhdHRlcm46L14ocG9sYXJcZCpcLnJhZGlhbGF4aXMpXC4oKGF1dG8pP3JhbmdlfGFuZ2xlfHRpdGxlXC50ZXh0KS99LHtwYXR0ZXJuOi9eKHBvbGFyXGQqXC5hbmd1bGFyYXhpcylcLnJvdGF0aW9uL30se3BhdHRlcm46L14obWFwYm94XGQqKVwuKGNlbnRlcnx6b29tfGJlYXJpbmd8cGl0Y2gpL30se3BhdHRlcm46L15sZWdlbmRcLih4fHkpJC8sYXR0cjoiZWRpdHJldmlzaW9uIn0se3BhdHRlcm46L14oc2hhcGVzfGFubm90YXRpb25zKS8sYXR0cjoiZWRpdHJldmlzaW9uIn0se3BhdHRlcm46L150aXRsZVwudGV4dCQvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9XSx0dD1be3BhdHRlcm46L15zZWxlY3RlZHBvaW50cyQvLGF0dHI6InNlbGVjdGlvbnJldmlzaW9uIn0se3BhdHRlcm46LyhefHZhbHVlXC4pdmlzaWJsZSQvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L15kaW1lbnNpb25zXFtcZCtcXVwuY29uc3RyYWludHJhbmdlL30se3BhdHRlcm46L15ub2RlXC4oeHx5fGdyb3VwcykvfSx7cGF0dGVybjovXmxldmVsJC99LHtwYXR0ZXJuOi8oXnx2YWx1ZVwuKW5hbWUkL30se3BhdHRlcm46L2NvbG9yYmFyXC50aXRsZVwudGV4dCQvfSx7cGF0dGVybjovY29sb3JiYXJcLih4fHkpJC8sYXR0cjoiZWRpdHJldmlzaW9uIn1dO2Z1bmN0aW9uIGV0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0saT10Lm1hdGNoKG4ucGF0dGVybik7aWYoaSlyZXR1cm57aGVhZDppWzFdLGF0dHI6bi5hdHRyfX19ZnVuY3Rpb24gcnQodCxlKXt2YXIgcj1zKGUsdCkuZ2V0KCk7aWYodm9pZCAwIT09cilyZXR1cm4gcjt2YXIgbj10LnNwbGl0KCIuIik7Zm9yKG4ucG9wKCk7bi5sZW5ndGg+MTspaWYobi5wb3AoKSx2b2lkIDAhPT0ocj1zKGUsbi5qb2luKCIuIikrIi51aXJldmlzaW9uIikuZ2V0KCkpKXJldHVybiByO3JldHVybiBlLnVpcmV2aXNpb259ZnVuY3Rpb24gbnQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdLl9mdWxsSW5wdXQudWlkPT09dClyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBpdCh0LGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoZVtuXS51aWQ9PT10KXJldHVybiBuO3JldHVybiFlW3JdfHxlW3JdLnVpZD8tMTpyfWZ1bmN0aW9uIGF0KHQsZSl7dmFyIHI9by5pc1BsYWluT2JqZWN0KHQpLG49QXJyYXkuaXNBcnJheSh0KTtyZXR1cm4gcnx8bj8ociYmby5pc1BsYWluT2JqZWN0KGUpfHxuJiZBcnJheS5pc0FycmF5KGUpKSYmSlNPTi5zdHJpbmdpZnkodCk9PT1KU09OLnN0cmluZ2lmeShlKTp0PT09ZX1mdW5jdGlvbiBvdCh0LGUscixuKXt2YXIgaSxhLGwsYz1uLmdldFZhbE9iamVjdCx1PW4uZmxhZ3MsaD1uLmltbXV0YWJsZSxmPW4uaW5BcnJheSxwPW4uYXJyYXlJbmRleDtmdW5jdGlvbiBkKCl7dmFyIHQ9aS5lZGl0VHlwZTtmJiYtMSE9PXQuaW5kZXhPZigiYXJyYXlkcmF3Iik/by5wdXNoVW5pcXVlKHUuYXJyYXlzW2ZdLHApOihNLnVwZGF0ZSh1LGkpLCJub25lIiE9PXQmJnUubkNoYW5nZXMrKyxuLnRyYW5zaXRpb24mJmkuYW5pbSYmdS5uQ2hhbmdlc0FuaW0rKywoWS50ZXN0KGwpfHxXLnRlc3QobCkpJiYodS5yYW5nZXNBbHRlcmVkW3JbMF1dPTEpLFoudGVzdChsKSYmcyhlLCJfaW5wdXREb21haW4iKS5zZXQobnVsbCksImRhdGFyZXZpc2lvbiI9PT1hJiYodS5uZXdEYXRhUmV2aXNpb249MSkpfWZ1bmN0aW9uIGcodCl7cmV0dXJuImRhdGFfYXJyYXkiPT09dC52YWxUeXBlfHx0LmFycmF5T2t9Zm9yKGEgaW4gdCl7aWYodS5jYWxjJiYhbi50cmFuc2l0aW9uKXJldHVybjt2YXIgbT10W2FdLHY9ZVthXSx5PXIuY29uY2F0KGEpO2lmKGw9eS5qb2luKCIuIiksIl8iIT09YS5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBtJiZtIT09dil7aWYoKCJ0aWNrMCI9PT1hfHwiZHRpY2siPT09YSkmJiJnZW8iIT09clswXSl7dmFyIHg9ZS50aWNrbW9kZTtpZigiYXV0byI9PT14fHwiYXJyYXkiPT09eHx8IXgpY29udGludWV9aWYoKCJyYW5nZSIhPT1hfHwhZS5hdXRvcmFuZ2UpJiYoInptaW4iIT09YSYmInptYXgiIT09YXx8ImNvbnRvdXJjYXJwZXQiIT09ZS50eXBlKSYmKGk9Yyh5KSkmJighaS5fY29tcGFyZUFzSlNPTnx8SlNPTi5zdHJpbmdpZnkobSkhPT1KU09OLnN0cmluZ2lmeSh2KSkpe3ZhciBiLF89aS52YWxUeXBlLHc9ZyhpKSxUPUFycmF5LmlzQXJyYXkobSksaz1BcnJheS5pc0FycmF5KHYpO2lmKFQmJmspe3ZhciBBPSJfaW5wdXRfIithLFM9dFtBXSxFPWVbQV07aWYoQXJyYXkuaXNBcnJheShTKSYmUz09PUUpY29udGludWV9aWYodm9pZCAwPT09dil3JiZUP3UuY2FsYz0hMDpkKCk7ZWxzZSBpZihpLl9pc0xpbmtlZFRvQXJyYXkpe3ZhciBDPVtdLEw9ITE7Znx8KHUuYXJyYXlzW2FdPUMpO3ZhciBQPU1hdGgubWluKG0ubGVuZ3RoLHYubGVuZ3RoKSxJPU1hdGgubWF4KG0ubGVuZ3RoLHYubGVuZ3RoKTtpZihQIT09SSl7aWYoImFycmF5ZHJhdyIhPT1pLmVkaXRUeXBlKXtkKCk7Y29udGludWV9TD0hMH1mb3IoYj0wO2I8UDtiKyspb3QobVtiXSx2W2JdLHkuY29uY2F0KGIpLG8uZXh0ZW5kRmxhdCh7aW5BcnJheTphLGFycmF5SW5kZXg6Yn0sbikpO2lmKEwpZm9yKGI9UDtiPEk7YisrKUMucHVzaChiKX1lbHNlIV8mJm8uaXNQbGFpbk9iamVjdChtKT9vdChtLHYseSxuKTp3P1QmJms/KGgmJih1LmNhbGM9ITApLChofHxuLm5ld0RhdGFSZXZpc2lvbikmJmQoKSk6VCE9PWs/dS5jYWxjPSEwOmQoKTpUJiZrJiZtLmxlbmd0aD09PXYubGVuZ3RoJiZTdHJpbmcobSk9PT1TdHJpbmcodil8fGQoKX19fWZvcihhIGluIGUpaWYoIShhIGluIHQpJiYiXyIhPT1hLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGVbYV0pe2lmKGcoaT1jKHIuY29uY2F0KGEpKSkmJkFycmF5LmlzQXJyYXkoZVthXSkpcmV0dXJuIHZvaWQodS5jYWxjPSEwKTtkKCl9fWZ1bmN0aW9uIHN0KHQpe3ZhciBlPW4uc2VsZWN0KHQpLHI9dC5fZnVsbExheW91dDtpZihyLl9jb250YWluZXI9ZS5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9jb250YWluZXIuZW50ZXIoKS5pbnNlcnQoImRpdiIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInBsb3QtY29udGFpbmVyIiwhMCkuY2xhc3NlZCgicGxvdGx5IiwhMCksci5fcGFwZXJkaXY9ci5fY29udGFpbmVyLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKS5kYXRhKFswXSksci5fcGFwZXJkaXYuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5jbGFzc2VkKCJzdmctY29udGFpbmVyIiwhMCkuc3R5bGUoInBvc2l0aW9uIiwicmVsYXRpdmUiKSxyLl9nbGNvbnRhaW5lcj1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5nbC1jb250YWluZXIiKS5kYXRhKFt7fV0pLHIuX2dsY29udGFpbmVyLmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJnbC1jb250YWluZXIiLCEwKSxyLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLnJlbW92ZSgpLHIuX3BhcGVyZGl2LnNlbGVjdCgiLm1vZGViYXItY29udGFpbmVyIikucmVtb3ZlKCksci5fcGFwZXI9ci5fcGFwZXJkaXYuaW5zZXJ0KCJzdmciLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLHIuX3RvcHBhcGVyPXIuX3BhcGVyZGl2LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSxyLl9tb2RlYmFyZGl2PXIuX3BhcGVyZGl2LmFwcGVuZCgiZGl2IiksZGVsZXRlIHIuX21vZGVCYXIsci5faG92ZXJwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksIXIuX3VpZCl7dmFyIGk9e307bi5zZWxlY3RBbGwoImRlZnMiKS5lYWNoKChmdW5jdGlvbigpe3RoaXMuaWQmJihpW3RoaXMuaWQuc3BsaXQoIi0iKVsxXV09MSl9KSksci5fdWlkPW8ucmFuZHN0cihpKX1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmF0dHIoeS5zdmdBdHRycyksci5fZGVmcz1yLl9wYXBlci5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsImRlZnMtIityLl91aWQpLHIuX2NsaXBzPXIuX2RlZnMuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2xpcHMiLCEwKSxyLl90b3BkZWZzPXIuX3RvcHBhcGVyLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwidG9wZGVmcy0iK3IuX3VpZCksci5fdG9wY2xpcHM9ci5fdG9wZGVmcy5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLHIuX2JnTGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYmdsYXllciIsITApLHIuX2RyYWdnZXJzPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImRyYWdsYXllciIsITApO3ZhciBhPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxheWVyLWJlbG93IiwhMCk7ci5faW1hZ2VMb3dlckxheWVyPWEuYXBwZW5kKCJnIikuY2xhc3NlZCgiaW1hZ2VsYXllciIsITApLHIuX3NoYXBlTG93ZXJMYXllcj1hLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNoYXBlbGF5ZXIiLCEwKSxyLl9jYXJ0ZXNpYW5sYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJjYXJ0ZXNpYW5sYXllciIsITApLHIuX3BvbGFybGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgicG9sYXJsYXllciIsITApLHIuX3Rlcm5hcnlsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXJuYXJ5bGF5ZXIiLCEwKSxyLl9nZW9sYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJnZW9sYXllciIsITApLHIuX2Z1bm5lbGFyZWFsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJmdW5uZWxhcmVhbGF5ZXIiLCEwKSxyLl9waWVsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJwaWVsYXllciIsITApLHIuX3RyZWVtYXBsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ0cmVlbWFwbGF5ZXIiLCEwKSxyLl9zdW5idXJzdGxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInN1bmJ1cnN0bGF5ZXIiLCEwKSxyLl9pbmRpY2F0b3JsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpbmRpY2F0b3JsYXllciIsITApLHIuX2dsaW1hZ2VzPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdsaW1hZ2VzIiwhMCk7dmFyIHM9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXItYWJvdmUiLCEwKTtyLl9pbWFnZVVwcGVyTGF5ZXI9cy5hcHBlbmQoImciKS5jbGFzc2VkKCJpbWFnZWxheWVyIiwhMCksci5fc2hhcGVVcHBlckxheWVyPXMuYXBwZW5kKCJnIikuY2xhc3NlZCgic2hhcGVsYXllciIsITApLHIuX2luZm9sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpbmZvbGF5ZXIiLCEwKSxyLl9tZW51bGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibWVudWxheWVyIiwhMCksci5fem9vbWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInpvb21sYXllciIsITApLHIuX2hvdmVybGF5ZXI9ci5faG92ZXJwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJob3ZlcmxheWVyIiwhMCksci5fbW9kZWJhcmRpdi5jbGFzc2VkKCJtb2RlYmFyLWNvbnRhaW5lciIsITApLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoInRvcCIsIjBweCIpLnN0eWxlKCJyaWdodCIsIjBweCIpLHQuZW1pdCgicGxvdGx5X2ZyYW1ld29yayIpfXIuYW5pbWF0ZT1mdW5jdGlvbih0LGUscil7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KyIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhbmltYXRpbmcgaXQuIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL3Bsb3RseS5jb20vamF2YXNjcmlwdC9hbmltYXRpb25zLyIpO3ZhciBuPXQuX3RyYW5zaXRpb25EYXRhO24uX2ZyYW1lUXVldWV8fChuLl9mcmFtZVF1ZXVlPVtdKTt2YXIgaT0ocj1mLnN1cHBseUFuaW1hdGlvbkRlZmF1bHRzKHIpKS50cmFuc2l0aW9uLGE9ci5mcmFtZTtmdW5jdGlvbiBzKHQpe3JldHVybiBBcnJheS5pc0FycmF5KGkpP3Q+PWkubGVuZ3RoP2lbMF06aVt0XTppfWZ1bmN0aW9uIGwodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/dD49YS5sZW5ndGg/YVswXTphW3RdOmF9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPTA7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodCYmKytyPT09ZSlyZXR1cm4gdCgpfX1yZXR1cm4gdm9pZCAwPT09bi5fZnJhbWVXYWl0aW5nQ250JiYobi5fZnJhbWVXYWl0aW5nQ250PTApLG5ldyBQcm9taXNlKChmdW5jdGlvbihhLHUpe2Z1bmN0aW9uIGgoKXtuLl9jdXJyZW50RnJhbWUmJm4uX2N1cnJlbnRGcmFtZS5vbkNvbXBsZXRlJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSgpO3ZhciBlPW4uX2N1cnJlbnRGcmFtZT1uLl9mcmFtZVF1ZXVlLnNoaWZ0KCk7aWYoZSl7dmFyIHI9ZS5uYW1lP2UubmFtZS50b1N0cmluZygpOm51bGw7dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lPXIsbi5fbGFzdEZyYW1lQXQ9RGF0ZS5ub3coKSxuLl90aW1lVG9OZXh0PWUuZnJhbWVPcHRzLmR1cmF0aW9uLGYudHJhbnNpdGlvbih0LGUuZnJhbWUuZGF0YSxlLmZyYW1lLmxheW91dCxULmNvZXJjZVRyYWNlSW5kaWNlcyh0LGUuZnJhbWUudHJhY2VzKSxlLmZyYW1lT3B0cyxlLnRyYW5zaXRpb25PcHRzKS50aGVuKChmdW5jdGlvbigpe2Uub25Db21wbGV0ZSYmZS5vbkNvbXBsZXRlKCl9KSksdC5lbWl0KCJwbG90bHlfYW5pbWF0aW5nZnJhbWUiLHtuYW1lOnIsZnJhbWU6ZS5mcmFtZSxhbmltYXRpb246e2ZyYW1lOmUuZnJhbWVPcHRzLHRyYW5zaXRpb246ZS50cmFuc2l0aW9uT3B0c319KX1lbHNlIHQuZW1pdCgicGxvdGx5X2FuaW1hdGVkIiksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4uX2FuaW1hdGlvblJhZiksbi5fYW5pbWF0aW9uUmFmPW51bGx9ZnVuY3Rpb24gcCgpe3QuZW1pdCgicGxvdGx5X2FuaW1hdGluZyIpLG4uX2xhc3RGcmFtZUF0PS0xLzAsbi5fdGltZVRvTmV4dD0wLG4uX3J1bm5pbmdUcmFuc2l0aW9ucz0wLG4uX2N1cnJlbnRGcmFtZT1udWxsO3ZhciBlPWZ1bmN0aW9uKCl7bi5fYW5pbWF0aW9uUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSksRGF0ZS5ub3coKS1uLl9sYXN0RnJhbWVBdD5uLl90aW1lVG9OZXh0JiZoKCl9O2UoKX12YXIgZCxnLG09MDtmdW5jdGlvbiB2KHQpe3JldHVybiBBcnJheS5pc0FycmF5KGkpP20+PWkubGVuZ3RoP3QudHJhbnNpdGlvbk9wdHM9aVttXTp0LnRyYW5zaXRpb25PcHRzPWlbMF06dC50cmFuc2l0aW9uT3B0cz1pLG0rKyx0fXZhciB5PVtdLHg9bnVsbD09ZSxiPUFycmF5LmlzQXJyYXkoZSk7aWYoIXgmJiFiJiZvLmlzUGxhaW5PYmplY3QoZSkpeS5wdXNoKHt0eXBlOiJvYmplY3QiLGRhdGE6dihvLmV4dGVuZEZsYXQoe30sZSkpfSk7ZWxzZSBpZih4fHwtMSE9PVsic3RyaW5nIiwibnVtYmVyIl0uaW5kZXhPZih0eXBlb2YgZSkpZm9yKGQ9MDtkPG4uX2ZyYW1lcy5sZW5ndGg7ZCsrKShnPW4uX2ZyYW1lc1tkXSkmJih4fHxTdHJpbmcoZy5ncm91cCk9PT1TdHJpbmcoZSkpJiZ5LnB1c2goe3R5cGU6ImJ5bmFtZSIsbmFtZTpTdHJpbmcoZy5uYW1lKSxkYXRhOnYoe25hbWU6Zy5uYW1lfSl9KTtlbHNlIGlmKGIpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIF89ZVtkXTstMSE9PVsibnVtYmVyIiwic3RyaW5nIl0uaW5kZXhPZih0eXBlb2YgXyk/KF89U3RyaW5nKF8pLHkucHVzaCh7dHlwZToiYnluYW1lIixuYW1lOl8sZGF0YTp2KHtuYW1lOl99KX0pKTpvLmlzUGxhaW5PYmplY3QoXykmJnkucHVzaCh7dHlwZToib2JqZWN0IixkYXRhOnYoby5leHRlbmRGbGF0KHt9LF8pKX0pfWZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoImJ5bmFtZSI9PT0oZz15W2RdKS50eXBlJiYhbi5fZnJhbWVIYXNoW2cuZGF0YS5uYW1lXSlyZXR1cm4gby53YXJuKCdhbmltYXRlIGZhaWx1cmU6IGZyYW1lIG5vdCBmb3VuZDogIicrZy5kYXRhLm5hbWUrJyInKSx2b2lkIHUoKTstMSE9PVsibmV4dCIsImltbWVkaWF0ZSJdLmluZGV4T2Yoci5tb2RlKSYmZnVuY3Rpb24oKXtpZigwIT09bi5fZnJhbWVRdWV1ZS5sZW5ndGgpe2Zvcig7bi5fZnJhbWVRdWV1ZS5sZW5ndGg7KXt2YXIgZT1uLl9mcmFtZVF1ZXVlLnBvcCgpO2Uub25JbnRlcnJ1cHQmJmUub25JbnRlcnJ1cHQoKX10LmVtaXQoInBsb3RseV9hbmltYXRpb25pbnRlcnJ1cHRlZCIsW10pfX0oKSwicmV2ZXJzZSI9PT1yLmRpcmVjdGlvbiYmeS5yZXZlcnNlKCk7dmFyIHc9dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lO2lmKHcmJnIuZnJvbWN1cnJlbnQpe3ZhciBrPS0xO2ZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoImJ5bmFtZSI9PT0oZz15W2RdKS50eXBlJiZnLm5hbWU9PT13KXtrPWQ7YnJlYWt9aWYoaz4wJiZrPHkubGVuZ3RoLTEpe3ZhciBNPVtdO2ZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspZz15W2RdLCgiYnluYW1lIiE9PXlbZF0udHlwZXx8ZD5rKSYmTS5wdXNoKGcpO3k9TX19eS5sZW5ndGg+MD9mdW5jdGlvbihlKXtpZigwIT09ZS5sZW5ndGgpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbztvPSJieW5hbWUiPT09ZVtpXS50eXBlP2YuY29tcHV0ZUZyYW1lKHQsZVtpXS5uYW1lKTplW2ldLmRhdGE7dmFyIGg9bChpKSxkPXMoaSk7ZC5kdXJhdGlvbj1NYXRoLm1pbihkLmR1cmF0aW9uLGguZHVyYXRpb24pO3ZhciBnPXtmcmFtZTpvLG5hbWU6ZVtpXS5uYW1lLGZyYW1lT3B0czpoLHRyYW5zaXRpb25PcHRzOmR9O2k9PT1lLmxlbmd0aC0xJiYoZy5vbkNvbXBsZXRlPWMoYSwyKSxnLm9uSW50ZXJydXB0PXUpLG4uX2ZyYW1lUXVldWUucHVzaChnKX0iaW1tZWRpYXRlIj09PXIubW9kZSYmKG4uX2xhc3RGcmFtZUF0PS0xLzApLG4uX2FuaW1hdGlvblJhZnx8cCgpfX0oeSk6KHQuZW1pdCgicGxvdGx5X2FuaW1hdGVkIiksYSgpKX0pKX0sci5hZGRGcmFtZXM9ZnVuY3Rpb24odCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxudWxsPT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtpZighby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYWRkaW5nIGZyYW1lcy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdGx5LmNvbS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIG4saSxhLHMsbD10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLHU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoImFkZEZyYW1lcyBmYWlsdXJlOiBmcmFtZUxpc3QgbXVzdCBiZSBhbiBBcnJheSBvZiBmcmFtZSBkZWZpbml0aW9ucyIrZSk7dmFyIGg9bC5sZW5ndGgrMiplLmxlbmd0aCxwPVtdLGQ9e307Zm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZihvLmlzUGxhaW5PYmplY3QoZVtuXSkpe3ZhciBnPWVbbl0ubmFtZSxtPSh1W2ddfHxkW2ddfHx7fSkubmFtZSx2PWVbbl0ubmFtZSx5PXVbbV18fGRbbV07bSYmdiYmIm51bWJlciI9PXR5cGVvZiB2JiZ5JiZTPDUmJihTKyssby53YXJuKCdhZGRGcmFtZXM6IG92ZXJ3cml0aW5nIGZyYW1lICInKyh1W21dfHxkW21dKS5uYW1lKyciIHdpdGggYSBmcmFtZSB3aG9zZSBuYW1lIG9mIHR5cGUgIm51bWJlciIgYWxzbyBlcXVhdGVzIHRvICInK20rJyIuIFRoaXMgaXMgdmFsaWQgYnV0IG1heSBwb3RlbnRpYWxseSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igc2luY2UgYWxsIHBsb3RseS5qcyBmcmFtZSBuYW1lcyBhcmUgc3RvcmVkIGludGVybmFsbHkgYXMgc3RyaW5ncy4nKSw1PT09UyYmby53YXJuKCJhZGRGcmFtZXM6IFRoaXMgQVBJIGNhbGwgaGFzIHlpZWxkZWQgdG9vIG1hbnkgb2YgdGhlc2Ugd2FybmluZ3MuIEZvciB0aGUgcmVzdCBvZiB0aGlzIGNhbGwsIGZ1cnRoZXIgd2FybmluZ3MgYWJvdXQgbnVtZXJpYyBmcmFtZSBuYW1lcyB3aWxsIGJlIHN1cHByZXNzZWQuIikpLGRbZ109e25hbWU6Z30scC5wdXNoKHtmcmFtZTpmLnN1cHBseUZyYW1lRGVmYXVsdHMoZVtuXSksaW5kZXg6ciYmdm9pZCAwIT09cltuXSYmbnVsbCE9PXJbbl0/cltuXTpoK259KX1wLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW5kZXg+ZS5pbmRleD8tMTp0LmluZGV4PGUuaW5kZXg/MTowfSkpO3ZhciB4PVtdLGI9W10sXz1sLmxlbmd0aDtmb3Iobj1wLmxlbmd0aC0xO24+PTA7bi0tKXtpZigibnVtYmVyIj09dHlwZW9mKGk9cFtuXS5mcmFtZSkubmFtZSYmby53YXJuKCJXYXJuaW5nOiBhZGRGcmFtZXMgYWNjZXB0cyBmcmFtZXMgd2l0aCBudW1lcmljIG5hbWVzLCBidXQgdGhlIG51bWJlcnMgYXJlaW1wbGljaXRseSBjYXN0IHRvIHN0cmluZ3MiKSwhaS5uYW1lKWZvcig7dVtpLm5hbWU9ImZyYW1lICIrdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXIrK107KTtpZih1W2kubmFtZV0pe2ZvcihhPTA7YTxsLmxlbmd0aCYmKGxbYV18fHt9KS5uYW1lIT09aS5uYW1lO2ErKyk7eC5wdXNoKHt0eXBlOiJyZXBsYWNlIixpbmRleDphLHZhbHVlOml9KSxiLnVuc2hpZnQoe3R5cGU6InJlcGxhY2UiLGluZGV4OmEsdmFsdWU6bFthXX0pfWVsc2Ugcz1NYXRoLm1heCgwLE1hdGgubWluKHBbbl0uaW5kZXgsXykpLHgucHVzaCh7dHlwZToiaW5zZXJ0IixpbmRleDpzLHZhbHVlOml9KSxiLnVuc2hpZnQoe3R5cGU6ImRlbGV0ZSIsaW5kZXg6c30pLF8rK312YXIgdz1mLm1vZGlmeUZyYW1lcyxUPWYubW9kaWZ5RnJhbWVzLGs9W3QsYl0sTT1bdCx4XTtyZXR1cm4gYyYmYy5hZGQodCx3LGssVCxNKSxmLm1vZGlmeUZyYW1lcyh0LHgpfSxyLmRlbGV0ZUZyYW1lcz1mdW5jdGlvbih0LGUpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCk7dmFyIHIsbixpPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsYT1bXSxzPVtdO2lmKCFlKWZvcihlPVtdLHI9MDtyPGkubGVuZ3RoO3IrKyllLnB1c2gocik7Zm9yKChlPWUuc2xpY2UoKSkuc29ydCgpLHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSluPWVbcl0sYS5wdXNoKHt0eXBlOiJkZWxldGUiLGluZGV4Om59KSxzLnVuc2hpZnQoe3R5cGU6Imluc2VydCIsaW5kZXg6bix2YWx1ZTppW25dfSk7dmFyIGw9Zi5tb2RpZnlGcmFtZXMsdT1mLm1vZGlmeUZyYW1lcyxoPVt0LHNdLHA9W3QsYV07cmV0dXJuIGMmJmMuYWRkKHQsbCxoLHUscCksZi5tb2RpZnlGcmFtZXModCxhKX0sci5hZGRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBhLHMsbD1bXSx1PXIuZGVsZXRlVHJhY2VzLGg9dCxmPVtlLGxdLHA9W2Usbl07Zm9yKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigidHJhY2VzIG11c3QgYmUgZGVmaW5lZC4iKTtmb3IoQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIm9iamVjdCIhPXR5cGVvZihpPWVbbl0pfHxBcnJheS5pc0FycmF5KGkpfHxudWxsPT09aSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gdHJhY2VzIGFycmF5IG11c3QgYmUgbm9uLWFycmF5IG9iamVjdHMiKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksInVuZGVmaW5lZCIhPXR5cGVvZiByJiZyLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaWYgaW5kaWNlcyBpcyBzcGVjaWZpZWQsIHRyYWNlcy5sZW5ndGggbXVzdCBlcXVhbCBpbmRpY2VzLmxlbmd0aCIpfShlLG4saSksQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxuPW4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gby5leHRlbmRGbGF0KHt9LHQpfSkpLFQuY2xlYW5EYXRhKG4pLGE9MDthPG4ubGVuZ3RoO2ErKyllLmRhdGEucHVzaChuW2FdKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKWwucHVzaCgtbi5sZW5ndGgrYSk7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBpKXJldHVybiBzPXIucmVkcmF3KGUpLGMuYWRkKGUsdSxmLGgscCkscztBcnJheS5pc0FycmF5KGkpfHwoaT1baV0pO3RyeXtPKGUsbCxpKX1jYXRjaCh0KXt0aHJvdyBlLmRhdGEuc3BsaWNlKGUuZGF0YS5sZW5ndGgtbi5sZW5ndGgsbi5sZW5ndGgpLHR9cmV0dXJuIGMuc3RhcnRTZXF1ZW5jZShlKSxjLmFkZChlLHUsZixoLHApLHM9ci5tb3ZlVHJhY2VzKGUsbCxpKSxjLnN0b3BTZXF1ZW5jZShlKSxzfSxyLmRlbGV0ZVRyYWNlcz1mdW5jdGlvbiB0KGUsbil7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBpLGEscz1bXSxsPXIuYWRkVHJhY2VzLHU9dCxoPVtlLHMsbl0sZj1bZSxuXTtpZigidW5kZWZpbmVkIj09dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2Vycy4iKTtmb3IoQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSx6KGUsbiwiaW5kaWNlcyIpLChuPUkobixlLmRhdGEubGVuZ3RoLTEpKS5zb3J0KG8uc29ydGVyRGVzKSxpPTA7aTxuLmxlbmd0aDtpKz0xKWE9ZS5kYXRhLnNwbGljZShuW2ldLDEpWzBdLHMucHVzaChhKTt2YXIgcD1yLnJlZHJhdyhlKTtyZXR1cm4gYy5hZGQoZSxsLGgsdSxmKSxwfSxyLmV4dGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpLGEpe2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuLGk7aWYoby5pc1R5cGVkQXJyYXkodCkpaWYocjwwKXt2YXIgYT1uZXcgdC5jb25zdHJ1Y3RvcigwKSxzPVIodCxlKTtyPDA/KG49cyxpPWEpOihuPWEsaT1zKX1lbHNlIGlmKG49bmV3IHQuY29uc3RydWN0b3IociksaT1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aC1yKSxyPT09ZS5sZW5ndGgpbi5zZXQoZSksaS5zZXQodCk7ZWxzZSBpZihyPGUubGVuZ3RoKXt2YXIgbD1lLmxlbmd0aC1yO24uc2V0KGUuc3ViYXJyYXkobCkpLGkuc2V0KHQpLGkuc2V0KGUuc3ViYXJyYXkoMCxsKSx0Lmxlbmd0aCl9ZWxzZXt2YXIgYz1yLWUubGVuZ3RoLHU9dC5sZW5ndGgtYztuLnNldCh0LnN1YmFycmF5KHUpKSxuLnNldChlLGMpLGkuc2V0KHQuc3ViYXJyYXkoMCx1KSl9ZWxzZSBuPXQuY29uY2F0KGUpLGk9cj49MCYmcjxuLmxlbmd0aD9uLnNwbGljZSgwLG4ubGVuZ3RoLXIpOltdO3JldHVybltuLGldfXZhciBsPUQoZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLHMpLHU9ci5yZWRyYXcoZSksaD1bZSxsLnVwZGF0ZSxpLGwubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQoZSxyLnByZXBlbmRUcmFjZXMsaCx0LGFyZ3VtZW50cyksdX0sci5tb3ZlVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGkpe3ZhciBhLHM9W10sbD1bXSx1PXQsaD10LGY9W2U9by5nZXRHcmFwaERpdihlKSxpLG5dLHA9W2UsbixpXTtpZihPKGUsbixpKSxuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sInVuZGVmaW5lZCI9PXR5cGVvZiBpKWZvcihpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKylpLnB1c2goLW4ubGVuZ3RoK2EpO2ZvcihpPUFycmF5LmlzQXJyYXkoaSk/aTpbaV0sbj1JKG4sZS5kYXRhLmxlbmd0aC0xKSxpPUkoaSxlLmRhdGEubGVuZ3RoLTEpLGE9MDthPGUuZGF0YS5sZW5ndGg7YSsrKS0xPT09bi5pbmRleE9mKGEpJiZzLnB1c2goZS5kYXRhW2FdKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKWwucHVzaCh7bmV3SW5kZXg6aVthXSx0cmFjZTplLmRhdGFbblthXV19KTtmb3IobC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5ld0luZGV4LWUubmV3SW5kZXh9KSksYT0wO2E8bC5sZW5ndGg7YSs9MSlzLnNwbGljZShsW2FdLm5ld0luZGV4LDAsbFthXS50cmFjZSk7ZS5kYXRhPXM7dmFyIGQ9ci5yZWRyYXcoZSk7cmV0dXJuIGMuYWRkKGUsdSxmLGgscCksZH0sci5wcmVwZW5kVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGksYSl7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG4saTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPD0wKXt2YXIgYT1uZXcgdC5jb25zdHJ1Y3RvcigwKSxzPVIoZSx0KTtyPDA/KG49cyxpPWEpOihuPWEsaT1zKX1lbHNlIGlmKG49bmV3IHQuY29uc3RydWN0b3IociksaT1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aC1yKSxyPT09ZS5sZW5ndGgpbi5zZXQoZSksaS5zZXQodCk7ZWxzZSBpZihyPGUubGVuZ3RoKXt2YXIgbD1lLmxlbmd0aC1yO24uc2V0KGUuc3ViYXJyYXkoMCxsKSksaS5zZXQoZS5zdWJhcnJheShsKSksaS5zZXQodCxsKX1lbHNle3ZhciBjPXItZS5sZW5ndGg7bi5zZXQoZSksbi5zZXQodC5zdWJhcnJheSgwLGMpLGUubGVuZ3RoKSxpLnNldCh0LnN1YmFycmF5KGMpKX1lbHNlIG49ZS5jb25jYXQodCksaT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKHIsbi5sZW5ndGgpOltdO3JldHVybltuLGldfXZhciBsPUQoZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLHMpLHU9ci5yZWRyYXcoZSksaD1bZSxsLnVwZGF0ZSxpLGwubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQoZSxyLmV4dGVuZFRyYWNlcyxoLHQsYXJndW1lbnRzKSx1fSxyLm5ld1Bsb3Q9ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIHQ9by5nZXRHcmFwaERpdih0KSxmLmNsZWFuUGxvdChbXSx7fSx0Ll9mdWxsRGF0YXx8W10sdC5fZnVsbExheW91dHx8e30pLGYucHVyZ2UodCksci5wbG90KHQsZSxuLGkpfSxyLnBsb3Q9ZnVuY3Rpb24odCxlLGksYSl7dmFyIHM7aWYodD1vLmdldEdyYXBoRGl2KHQpLGwuaW5pdCh0KSxvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciBjPWU7ZT1jLmRhdGEsaT1jLmxheW91dCxhPWMuY29uZmlnLHM9Yy5mcmFtZXN9aWYoITE9PT1sLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVwbG90IixbZSxpLGFdKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtlfHxpfHxvLmlzUGxvdERpdih0KXx8by53YXJuKCJDYWxsaW5nIFBsb3RseS5wbG90IGFzIGlmIHJlZHJhd2luZyBidXQgdGhpcyBjb250YWluZXIgZG9lc24ndCB5ZXQgaGF2ZSBhIHBsb3QuIix0KSxQKHQsYSksaXx8KGk9e30pLG4uc2VsZWN0KHQpLmNsYXNzZWQoImpzLXBsb3RseS1wbG90IiwhMCksZy5tYWtlVGVzdGVyKCksQXJyYXkuaXNBcnJheSh0Ll9wcm9taXNlcyl8fCh0Ll9wcm9taXNlcz1bXSk7dmFyIGg9MD09PSh0LmRhdGF8fFtdKS5sZW5ndGgmJkFycmF5LmlzQXJyYXkoZSk7QXJyYXkuaXNBcnJheShlKSYmKFQuY2xlYW5EYXRhKGUpLGg/dC5kYXRhPWU6dC5kYXRhLnB1c2guYXBwbHkodC5kYXRhLGUpLHQuZW1wdHk9ITEpLHQubGF5b3V0JiYhaHx8KHQubGF5b3V0PVQuY2xlYW5MYXlvdXQoaSkpLGYuc3VwcGx5RGVmYXVsdHModCk7dmFyIG09dC5fZnVsbExheW91dCx5PW0uX2hhcygiY2FydGVzaWFuIik7aWYoIW0uX2hhcygicG9sYXIiKSYmZSYmZVswXSYmZVswXS5yKXJldHVybiBvLmxvZygiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCEiKSxmdW5jdGlvbih0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIucGxvdC1jb250YWluZXIiKS5kYXRhKFswXSk7aS5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIgcGxvdGx5IiwhMCk7dmFyIGE9aS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIikuZGF0YShbMF0pO2EuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLGEuaHRtbCgiIiksZSYmKHQuZGF0YT1lKTtyJiYodC5sYXlvdXQ9cik7cC5tYW5hZ2VyLmZpbGxMYXlvdXQodCksYS5zdHlsZSh7d2lkdGg6dC5fZnVsbExheW91dC53aWR0aCsicHgiLGhlaWdodDp0Ll9mdWxsTGF5b3V0LmhlaWdodCsicHgifSksdC5mcmFtZXdvcms9cC5tYW5hZ2VyLmZyYW1ld29yayh0KSx0LmZyYW1ld29yayh7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSxhLm5vZGUoKSksdC5mcmFtZXdvcmsuc2V0VW5kb1BvaW50KCk7dmFyIHM9dC5mcmFtZXdvcmsuc3ZnKCksbD0xLGM9dC5fZnVsbExheW91dC50aXRsZT90Ll9mdWxsTGF5b3V0LnRpdGxlLnRleHQ6IiI7IiIhPT1jJiZjfHwobD0wKTt2YXIgdT1mdW5jdGlvbigpe3RoaXMuY2FsbCh4LmNvbnZlcnRUb1RzcGFucyx0KX0saD1zLnNlbGVjdCgiLnRpdGxlLWdyb3VwIHRleHQiKS5jYWxsKHUpO2lmKHQuX2NvbnRleHQuZWRpdHMudGl0bGVUZXh0KXt2YXIgZD1vLl8odCwiQ2xpY2sgdG8gZW50ZXIgUGxvdCB0aXRsZSIpO2MmJmMhPT1kfHwobD0uMixoLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpkfSkudGV4dChkKS5zdHlsZSh7b3BhY2l0eTpsfSkub24oIm1vdXNlb3Zlci5vcGFjaXR5IiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgib3BhY2l0eSIsMSl9KSkub24oIm1vdXNlb3V0Lm9wYWNpdHkiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxZTMpLnN0eWxlKCJvcGFjaXR5IiwwKX0pKSk7dmFyIGc9ZnVuY3Rpb24oKXt0aGlzLmNhbGwoeC5tYWtlRWRpdGFibGUse2dkOnR9KS5vbigiZWRpdCIsKGZ1bmN0aW9uKGUpe3QuZnJhbWV3b3JrKHtsYXlvdXQ6e3RpdGxlOnt0ZXh0OmV9fX0pLHRoaXMudGV4dChlKS5jYWxsKHUpLHRoaXMuY2FsbChnKX0pKS5vbigiY2FuY2VsIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKTt0aGlzLnRleHQodCkuY2FsbCh1KX0pKX07aC5jYWxsKGcpfXJldHVybiB0Ll9jb250ZXh0LnNldEJhY2tncm91bmQodCx0Ll9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3IpLGYuYWRkTGlua3ModCksUHJvbWlzZS5yZXNvbHZlKCl9KHQsZSxpKTttLl9yZXBsb3R0aW5nPSEwLChofHxtLl9zaG91bGRDcmVhdGVCZ0xheWVyKSYmKHN0KHQpLG0uX3Nob3VsZENyZWF0ZUJnTGF5ZXImJmRlbGV0ZSBtLl9zaG91bGRDcmVhdGVCZ0xheWVyKSx0LmZyYW1ld29yayE9PXN0JiYodC5mcmFtZXdvcms9c3Qsc3QodCkpLGcuaW5pdEdyYWRpZW50cyh0KSxoJiZkLnNhdmVTaG93U3Bpa2VJbml0aWFsKHQpO3ZhciBiPSF0LmNhbGNkYXRhfHx0LmNhbGNkYXRhLmxlbmd0aCE9PSh0Ll9mdWxsRGF0YXx8W10pLmxlbmd0aDtiJiZmLmRvQ2FsY2RhdGEodCk7Zm9yKHZhciBfPTA7Xzx0LmNhbGNkYXRhLmxlbmd0aDtfKyspdC5jYWxjZGF0YVtfXVswXS50cmFjZT10Ll9mdWxsRGF0YVtfXTt0Ll9jb250ZXh0LnJlc3BvbnNpdmU/dC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcnx8KHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXI9ZnVuY3Rpb24oKXtvLmlzSGlkZGVuKHQpfHxmLnJlc2l6ZSh0KX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcikpOm8uY2xlYXJSZXNwb25zaXZlKHQpO3ZhciB3PW8uZXh0ZW5kRmxhdCh7fSxtLl9zaXplKSxNPTA7ZnVuY3Rpb24gQSgpe2lmKGYuY2xlYXJBdXRvTWFyZ2luSWRzKHQpLGsuZHJhd01hcmdpblB1c2hlcnModCksZC5hbGxvd0F1dG9NYXJnaW4odCksbS5faGFzKCJwaWUiKSlmb3IodmFyIGU9dC5fZnVsbERhdGEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdOyJwaWUiPT09bi50eXBlJiZuLmF1dG9tYXJnaW4mJmYuYWxsb3dBdXRvTWFyZ2luKHQsInBpZS4iK24udWlkKyIuYXV0b21hcmdpbiIpfXJldHVybiBmLmRvQXV0b01hcmdpbih0KSxmLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gUygpe3QuX3RyYW5zaXRpb25pbmd8fChrLmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHModCksaCYmZC5zYXZlUmFuZ2VJbml0aWFsKHQpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImNhbGNBdXRvcmFuZ2UiKSh0KSl9dmFyIEM9W2YucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKHMpcmV0dXJuIHIuYWRkRnJhbWVzKHQscyl9LGZ1bmN0aW9uIGUoKXtmb3IodmFyIHI9bS5fYmFzZVBsb3RNb2R1bGVzLG49MDtuPHIubGVuZ3RoO24rKylyW25dLmRyYXdGcmFtZXdvcmsmJnJbbl0uZHJhd0ZyYW1ld29yayh0KTtpZighbS5fZ2xjYW52YXMmJm0uX2hhcygiZ2wiKSYmKG0uX2dsY2FudmFzPW0uX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLmRhdGEoW3trZXk6ImNvbnRleHRMYXllciIsY29udGV4dDohMCxwaWNrOiExfSx7a2V5OiJmb2N1c0xheWVyIixjb250ZXh0OiExLHBpY2s6ITF9LHtrZXk6InBpY2tMYXllciIsY29udGV4dDohMSxwaWNrOiEwfV0sKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKSxtLl9nbGNhbnZhcy5lbnRlcigpLmFwcGVuZCgiY2FudmFzIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4iZ2wtY2FudmFzIGdsLWNhbnZhcy0iK3Qua2V5LnJlcGxhY2UoIkxheWVyIiwiIil9KSkuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLG92ZXJmbG93OiJ2aXNpYmxlIiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pKSxtLl9nbGNhbnZhcyl7bS5fZ2xjYW52YXMuYXR0cigid2lkdGgiLG0ud2lkdGgpLmF0dHIoImhlaWdodCIsbS5oZWlnaHQpO3ZhciBpPW0uX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKGkmJihNYXRoLmZsb29yKG0ud2lkdGgpIT09aS5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRofHxNYXRoLmZsb29yKG0uaGVpZ2h0KSE9PWkuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHQpKXt2YXIgYT0iV2ViR0wgY29udGV4dCBidWZmZXIgYW5kIGNhbnZhcyBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaCBkdWUgdG8gYnJvd3Nlci9XZWJHTCBidWcuIjtpZighTSlyZXR1cm4gby5sb2coYSsiIENsZWFyaW5nIGdyYXBoIGFuZCBwbG90dGluZyBhZ2Fpbi4iKSxmLmNsZWFuUGxvdChbXSx7fSx0Ll9mdWxsRGF0YSxtKSxmLnN1cHBseURlZmF1bHRzKHQpLG09dC5fZnVsbExheW91dCxmLmRvQ2FsY2RhdGEodCksTSsrLGUoKTtvLmVycm9yKGEpfX1yZXR1cm4iaCI9PT1tLm1vZGViYXIub3JpZW50YXRpb24/bS5fbW9kZWJhcmRpdi5zdHlsZSgiaGVpZ2h0IixudWxsKS5zdHlsZSgid2lkdGgiLCIxMDAlIik6bS5fbW9kZWJhcmRpdi5zdHlsZSgid2lkdGgiLG51bGwpLnN0eWxlKCJoZWlnaHQiLG0uaGVpZ2h0KyJweCIpLGYucHJldmlvdXNQcm9taXNlcyh0KX0sQSxmdW5jdGlvbigpe2lmKGYuZGlkTWFyZ2luQ2hhbmdlKHcsbS5fc2l6ZSkpcmV0dXJuIG8uc3luY09yQXN5bmMoW0Esay5sYXlvdXRTdHlsZXNdLHQpfV07eSYmQy5wdXNoKChmdW5jdGlvbigpe2lmKGIpcmV0dXJuIG8uc3luY09yQXN5bmMoW3UuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJjYWxjQXV0b3JhbmdlIiksdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY2FsY0F1dG9yYW5nZSIpLFNdLHQpO1MoKX0pKSxDLnB1c2goay5sYXlvdXRTdHlsZXMpLHkmJkMucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gZC5kcmF3KHQsaD8iIjoicmVkcmF3Iil9KSksQy5wdXNoKGsuZHJhd0RhdGEsay5maW5hbERyYXcsdixmLmFkZExpbmtzLGYucmVob3ZlcixmLnJlZHJhZyxmLmRvQXV0b01hcmdpbixmLnByZXZpb3VzUHJvbWlzZXMpO3ZhciBMPW8uc3luY09yQXN5bmMoQyx0KTtyZXR1cm4gTCYmTC50aGVufHwoTD1Qcm9taXNlLnJlc29sdmUoKSksTC50aGVuKChmdW5jdGlvbigpe3JldHVybiBFKHQpLHR9KSl9LHIucHVyZ2U9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9by5nZXRHcmFwaERpdih0KSkuX2Z1bGxMYXlvdXR8fHt9LHI9dC5fZnVsbERhdGF8fFtdO3JldHVybiBmLmNsZWFuUGxvdChbXSx7fSxyLGUpLGYucHVyZ2UodCksbC5wdXJnZSh0KSxlLl9jb250YWluZXImJmUuX2NvbnRhaW5lci5yZW1vdmUoKSxkZWxldGUgdC5fY29udGV4dCx0fSxyLnJlYWN0PWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhLGw7dD1vLmdldEdyYXBoRGl2KHQpLFQuY2xlYXJQcm9taXNlUXVldWUodCk7dmFyIGM9dC5fZnVsbERhdGEscD10Ll9mdWxsTGF5b3V0O2lmKG8uaXNQbG90RGl2KHQpJiZjJiZwKXtpZihvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciBkPWU7ZT1kLmRhdGEsbj1kLmxheW91dCxpPWQuY29uZmlnLGE9ZC5mcmFtZXN9dmFyIGc9ITE7aWYoaSl7dmFyIG09by5leHRlbmREZWVwKHt9LHQuX2NvbnRleHQpO3QuX2NvbnRleHQ9dm9pZCAwLFAodCxpKSxnPWZ1bmN0aW9uIHQoZSxyKXt2YXIgbjtmb3IobiBpbiBlKWlmKCJfIiE9PW4uY2hhckF0KDApKXt2YXIgaT1lW25dLGE9cltuXTtpZihpIT09YSlpZihvLmlzUGxhaW5PYmplY3QoaSkmJm8uaXNQbGFpbk9iamVjdChhKSl7aWYodChpLGEpKXJldHVybiEwfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkoaSl8fCFBcnJheS5pc0FycmF5KGEpKXJldHVybiEwO2lmKGkubGVuZ3RoIT09YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspaWYoaVtzXSE9PWFbc10pe2lmKCFvLmlzUGxhaW5PYmplY3QoaVtzXSl8fCFvLmlzUGxhaW5PYmplY3QoYVtzXSkpcmV0dXJuITA7aWYodChpW3NdLGFbc10pKXJldHVybiEwfX19fShtLHQuX2NvbnRleHQpfXQuZGF0YT1lfHxbXSxULmNsZWFuRGF0YSh0LmRhdGEpLHQubGF5b3V0PW58fHt9LFQuY2xlYW5MYXlvdXQodC5sYXlvdXQpLGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbCxjLHUsaCxmLHAsZD1uLl9wcmVHVUksZz1bXSxtPXt9O2ZvcihpIGluIGQpe2lmKHU9ZXQoaSwkKSl7aWYoYT11LmF0dHJ8fHUuaGVhZCsiLnVpcmV2aXNpb24iLChjPShsPXMobixhKS5nZXQoKSkmJnJ0KGEsZSkpJiZjPT09bCYmKG51bGw9PT0oaD1kW2ldKSYmKGg9dm9pZCAwKSxhdChwPShmPXMoZSxpKSkuZ2V0KCksaCkpKXt2b2lkIDA9PT1wJiYiYXV0b3JhbmdlIj09PWkuc3Vic3RyKGkubGVuZ3RoLTkpJiZnLnB1c2goaS5zdWJzdHIoMCxpLmxlbmd0aC0xMCkpLGYuc2V0KEIocyhuLGkpLmdldCgpKSk7Y29udGludWV9fWVsc2Ugby53YXJuKCJ1bnJlY29nbml6ZWQgR1VJIGVkaXQ6ICIraSk7ZGVsZXRlIGRbaV0sInJhbmdlWyI9PT1pLnN1YnN0cihpLmxlbmd0aC04LDYpJiYobVtpLnN1YnN0cigwLGkubGVuZ3RoLTkpXT0xKX1mb3IodmFyIHY9MDt2PGcubGVuZ3RoO3YrKyl7dmFyIHk9Z1t2XTtpZihtW3ldKXt2YXIgeD1zKGUseSkuZ2V0KCk7eCYmZGVsZXRlIHguYXV0b3JhbmdlfX12YXIgYj1uLl90cmFjZVByZUdVSTtmb3IodmFyIF8gaW4gYil7dmFyIHcsVD1iW19dLGs9bnVsbDtmb3IoaSBpbiBUKXtpZighayl7dmFyIE09bnQoXyxyKTtpZihNPDApe2RlbGV0ZSBiW19dO2JyZWFrfXZhciBBPWl0KF8sdCwodz1yW01dLl9mdWxsSW5wdXQpLmluZGV4KTtpZihBPDApe2RlbGV0ZSBiW19dO2JyZWFrfWs9dFtBXX1pZih1PWV0KGksdHQpKXtpZih1LmF0dHI/Yz0obD1zKG4sdS5hdHRyKS5nZXQoKSkmJnJ0KHUuYXR0cixlKToobD13LnVpcmV2aXNpb24sdm9pZCAwPT09KGM9ay51aXJldmlzaW9uKSYmKGM9ZS51aXJldmlzaW9uKSksYyYmYz09PWwmJihudWxsPT09KGg9VFtpXSkmJihoPXZvaWQgMCksYXQocD0oZj1zKGssaSkpLmdldCgpLGgpKSl7Zi5zZXQoQihzKHcsaSkuZ2V0KCkpKTtjb250aW51ZX19ZWxzZSBvLndhcm4oInVucmVjb2duaXplZCBHVUkgZWRpdDogIitpKyIgaW4gdHJhY2UgdWlkICIrXyk7ZGVsZXRlIFRbaV19fX0odC5kYXRhLHQubGF5b3V0LGMscCk7Zm9yKHZhciB2PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHApLHk9MDt5PHYubGVuZ3RoO3krKyl7dmFyIHg9dlt5XSxiPXguc3Vic3RyaW5nKDAsNSk7aWYoInhheGlzIj09PWJ8fCJ5YXhpcyI9PT1iKXt2YXIgXz1wW3hdLl9lbXB0eUNhdGVnb3JpZXM7XyYmXygpfX1mLnN1cHBseURlZmF1bHRzKHQse3NraXBVcGRhdGVDYWxjOiEwfSk7dmFyIHc9dC5fZnVsbERhdGEsQT10Ll9mdWxsTGF5b3V0LFM9dm9pZCAwPT09QS5kYXRhcmV2aXNpb24sQz1BLnRyYW5zaXRpb24sTD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPU0ubGF5b3V0RmxhZ3MoKTtmdW5jdGlvbiBvKHQpe3JldHVybiBoLmdldExheW91dFZhbE9iamVjdChyLHQpfWEuYXJyYXlzPXt9LGEucmFuZ2VzQWx0ZXJlZD17fSxhLm5DaGFuZ2VzPTAsYS5uQ2hhbmdlc0FuaW09MCxvdChlLHIsW10se2dldFZhbE9iamVjdDpvLGZsYWdzOmEsaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjppLGdkOnR9KSwoYS5wbG90fHxhLmNhbGMpJiYoYS5sYXlvdXRSZXBsb3Q9ITApO2kmJmEubkNoYW5nZXMmJmEubkNoYW5nZXNBbmltJiYoYS5hbmltPWEubkNoYW5nZXM9PT1hLm5DaGFuZ2VzQW5pbT8iYWxsIjoic29tZSIpO3JldHVybiBhfSh0LHAsQSxTLEMpLEk9TC5uZXdEYXRhUmV2aXNpb24sej1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89ZS5sZW5ndGg9PT1yLmxlbmd0aDtpZighaSYmIW8pcmV0dXJue2Z1bGxSZXBsb3Q6ITAsY2FsYzohMH07dmFyIHMsbCxjPU0udHJhY2VGbGFncygpO2MuYXJyYXlzPXt9LGMubkNoYW5nZXM9MCxjLm5DaGFuZ2VzQW5pbT0wO3ZhciB1PXtnZXRWYWxPYmplY3Q6ZnVuY3Rpb24odCl7dmFyIGU9aC5nZXRUcmFjZVZhbE9iamVjdChsLHQpO3JldHVybiFsLl9tb2R1bGUuYW5pbWF0YWJsZSYmZS5hbmltJiYoZS5hbmltPSExKSxlfSxmbGFnczpjLGltbXV0YWJsZTpuLHRyYW5zaXRpb246aSxuZXdEYXRhUmV2aXNpb246YSxnZDp0fSxwPXt9O2ZvcihzPTA7czxlLmxlbmd0aDtzKyspaWYocltzXSl7aWYobD1yW3NdLl9mdWxsSW5wdXQsZi5oYXNNYWtlc0RhdGFUcmFuc2Zvcm0obCkmJihsPXJbc10pLHBbbC51aWRdKWNvbnRpbnVlO3BbbC51aWRdPTEsb3QoZVtzXS5fZnVsbElucHV0LGwsW10sdSl9KGMuY2FsY3x8Yy5wbG90KSYmKGMuZnVsbFJlcGxvdD0hMCk7aSYmYy5uQ2hhbmdlcyYmYy5uQ2hhbmdlc0FuaW0mJihjLmFuaW09Yy5uQ2hhbmdlcz09PWMubkNoYW5nZXNBbmltJiZvPyJhbGwiOiJzb21lIik7cmV0dXJuIGN9KHQsYyx3LFMsQyxJKTtKKHQpJiYoTC5sYXlvdXRSZXBsb3Q9ITApLHouY2FsY3x8TC5jYWxjP3QuY2FsY2RhdGE9dm9pZCAwOmYuc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKHQuY2FsY2RhdGEsdyk7dmFyIE89W107aWYoYSYmKHQuX3RyYW5zaXRpb25EYXRhPXt9LGYuY3JlYXRlVHJhbnNpdGlvbkRhdGEodCksTy5wdXNoKChmdW5jdGlvbigpe3JldHVybiByLmFkZEZyYW1lcyh0LGEpfSkpKSxBLnRyYW5zaXRpb24mJiFnJiYoei5hbmltfHxMLmFuaW0pKUwudGlja3MmJk8ucHVzaChrLmRvVGlja3NSZWxheW91dCksZi5kb0NhbGNkYXRhKHQpLGsuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSxPLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIGYudHJhbnNpdGlvbkZyb21SZWFjdCh0LHosTCxwKX0pKTtlbHNlIGlmKHouZnVsbFJlcGxvdHx8TC5sYXlvdXRSZXBsb3R8fGcpdC5fZnVsbExheW91dC5fc2tpcERlZmF1bHRzPSEwLE8ucHVzaChyLnBsb3QpO2Vsc2V7Zm9yKHZhciBEIGluIEwuYXJyYXlzKXt2YXIgUj1MLmFycmF5c1tEXTtpZihSLmxlbmd0aCl7dmFyIEY9dS5nZXRDb21wb25lbnRNZXRob2QoRCwiZHJhd09uZSIpO2lmKEYhPT1vLm5vb3ApZm9yKHZhciBOPTA7TjxSLmxlbmd0aDtOKyspRih0LFJbTl0pO2Vsc2V7dmFyIGo9dS5nZXRDb21wb25lbnRNZXRob2QoRCwiZHJhdyIpO2lmKGo9PT1vLm5vb3ApdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZHJhdyBjb21wb25lbnRzOiAiK0QpO2oodCl9fX1PLnB1c2goZi5wcmV2aW91c1Byb21pc2VzKSx6LnN0eWxlJiZPLnB1c2goay5kb1RyYWNlU3R5bGUpLCh6LmNvbG9yYmFyc3x8TC5jb2xvcmJhcnMpJiZPLnB1c2goay5kb0NvbG9yQmFycyksTC5sZWdlbmQmJk8ucHVzaChrLmRvTGVnZW5kKSxMLmxheW91dHN0eWxlJiZPLnB1c2goay5sYXlvdXRTdHlsZXMpLEwuYXhyYW5nZSYmRyhPKSxMLnRpY2tzJiZPLnB1c2goay5kb1RpY2tzUmVsYXlvdXQpLEwubW9kZWJhciYmTy5wdXNoKGsuZG9Nb2RlQmFyKSxMLmNhbWVyYSYmTy5wdXNoKGsuZG9DYW1lcmEpLE8ucHVzaChFKX1PLnB1c2goZi5yZWhvdmVyLGYucmVkcmFnKSwobD1vLnN5bmNPckFzeW5jKE8sdCkpJiZsLnRoZW58fChsPVByb21pc2UucmVzb2x2ZSh0KSl9ZWxzZSBsPXIubmV3UGxvdCh0LGUsbixpKTtyZXR1cm4gbC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZWFjdCIse2RhdGE6ZSxsYXlvdXQ6bn0pLHR9KSl9LHIucmVkcmF3PWZ1bmN0aW9uKHQpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCk7cmV0dXJuIFQuY2xlYW5EYXRhKHQuZGF0YSksVC5jbGVhbkxheW91dCh0LmxheW91dCksdC5jYWxjZGF0YT12b2lkIDAsci5wbG90KHQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlZHJhdyIpLHR9KSl9LHIucmVsYXlvdXQ9cSxyLnJlc3R5bGU9RixyLnNldFBsb3RDb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZXh0ZW5kRmxhdChfLHQpfSxyLnVwZGF0ZT1LLHIuX2d1aVJlbGF5b3V0PVEocSksci5fZ3VpUmVzdHlsZT1RKEYpLHIuX2d1aVVwZGF0ZT1RKEspLHIuX3N0b3JlRGlyZWN0R1VJRWRpdD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHIpe2oobixzKHQsbikuZ2V0KCkscltuXSxlKX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzcsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MjYsIi4uL2xpYiI6NzUwLCIuLi9saWIvZXZlbnRzIjo3MzksIi4uL2xpYi9xdWV1ZSI6NzY1LCIuLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc3NCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6ODA1LCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3QiOjgwOCwiLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCI6ODE4LCIuLi9wbG90cy9wbG90cyI6ODYyLCIuLi9wbG90cy9wb2xhci9sZWdhY3kiOjg3MCwiLi4vcmVnaXN0cnkiOjg4MiwiLi9lZGl0X3R5cGVzIjo3ODEsIi4vaGVscGVycyI6NzgyLCIuL21hbmFnZV9hcnJheXMiOjc4NCwiLi9wbG90X2NvbmZpZyI6Nzg2LCIuL3Bsb3Rfc2NoZW1hIjo3ODcsIi4vc3Vicm91dGluZXMiOjc4OSxkMzoxNjksImZhc3QtaXNudW1lcmljIjoyNDEsImhhcy1ob3ZlciI6NDE0fV0sNzg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXtzdGF0aWNQbG90Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxwbG90bHlTZXJ2ZXJVUkw6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sZWRpdGFibGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGVkaXRzOnthbm5vdGF0aW9uUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGFubm90YXRpb25UYWlsOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxhbm5vdGF0aW9uVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYXhpc1RpdGxlVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY29sb3JiYXJQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY29sb3JiYXJUaXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxlZ2VuZFBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsZWdlbmRUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzaGFwZVBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx0aXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fSxhdXRvc2l6YWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scmVzcG9uc2l2ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZmlsbEZyYW1lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmcmFtZU1hcmdpbnM6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLG1heDouNX0sc2Nyb2xsWm9vbTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiY2FydGVzaWFuIiwiZ2wzZCIsImdlbyIsIm1hcGJveCJdLGV4dHJhczpbITAsITFdLGRmbHQ6ImdsM2QrZ2VvK21hcGJveCJ9LGRvdWJsZUNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJyZXNldCIsImF1dG9zaXplIiwicmVzZXQrYXV0b3NpemUiXSxkZmx0OiJyZXNldCthdXRvc2l6ZSJ9LGRvdWJsZUNsaWNrRGVsYXk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozMDAsbWluOjB9LHNob3dBeGlzRHJhZ0hhbmRsZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dBeGlzUmFuZ2VFbnRyeUJveGVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93VGlwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd0xpbms6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxpbmtUZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IkVkaXQgY2hhcnQiLG5vQmxhbms6ITB9LHNlbmREYXRhOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93U291cmNlczp7dmFsVHlwZToiYW55IixkZmx0OiExfSxkaXNwbGF5TW9kZUJhcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG92ZXIiLCEwLCExXSxkZmx0OiJob3ZlciJ9LHNob3dTZW5kVG9DbG91ZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sc2hvd0VkaXRJbkNoYXJ0U3R1ZGlvOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxtb2RlQmFyQnV0dG9uc1RvUmVtb3ZlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6W119LG1vZGVCYXJCdXR0b25zVG9BZGQ6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbW9kZUJhckJ1dHRvbnM6e3ZhbFR5cGU6ImFueSIsZGZsdDohMX0sdG9JbWFnZUJ1dHRvbk9wdGlvbnM6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fX0sZGlzcGxheWxvZ286e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHdhdGVybWFyazp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scGxvdEdsUGl4ZWxSYXRpbzp7dmFsVHlwZToibnVtYmVyIixkZmx0OjIsbWluOjEsbWF4OjR9LHNldEJhY2tncm91bmQ6e3ZhbFR5cGU6ImFueSIsZGZsdDoidHJhbnNwYXJlbnQifSx0b3BvanNvblVSTDp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLGRmbHQ6Imh0dHBzOi8vY2RuLnBsb3QubHkvIn0sbWFwYm94QWNjZXNzVG9rZW46e3ZhbFR5cGU6InN0cmluZyIsZGZsdDpudWxsfSxsb2dnaW5nOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6MixkZmx0OjF9LG5vdGlmeU9uTG9nZ2luZzp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4OjIsZGZsdDowfSxxdWV1ZUxlbmd0aDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowfSxnbG9iYWxUcmFuc2Zvcm1zOnt2YWxUeXBlOiJhbnkiLGRmbHQ6W119LGxvY2FsZTp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJlbi1VUyJ9LGxvY2FsZXM6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fX19LGk9e307IWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpLnZhbFR5cGU/cltuXT1pLmRmbHQ6KHJbbl18fChyW25dPXt9KSx0KGkscltuXSkpfX0obixpKSxlLmV4cG9ydHM9e2NvbmZpZ0F0dHJpYnV0ZXM6bixkZmx0Q29uZmlnOml9fSx7fV0sNzg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5IiksaT10KCIuLi9saWIiKSxhPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIikscz10KCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzIiksbD10KCIuLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyIpLGM9dCgiLi9wbG90X2NvbmZpZyIpLmNvbmZpZ0F0dHJpYnV0ZXMsdT10KCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXJlYV9hdHRyaWJ1dGVzIiksaD10KCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXhpc19hdHRyaWJ1dGVzIiksZj10KCIuL2VkaXRfdHlwZXMiKSxwPWkuZXh0ZW5kRmxhdCxkPWkuZXh0ZW5kRGVlcEFsbCxnPWkuaXNQbGFpbk9iamVjdCxtPWkuaXNBcnJheU9yVHlwZWRBcnJheSx2PWkubmVzdGVkUHJvcGVydHkseT1pLnZhbE9iamVjdE1ldGEseD1bIl9pc1N1YnBsb3RPYmoiLCJfaXNMaW5rZWRUb0FycmF5IiwiX2FycmF5QXR0clJlZ2V4cHMiLCJfZGVwcmVjYXRlZCJdO2Z1bmN0aW9uIGIodCxlLHIpe2lmKCF0KXJldHVybiExO2lmKHQuX2lzTGlua2VkVG9BcnJheSlpZihfKGVbcl0pKXIrKztlbHNlIGlmKHI8ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49dFtlW3JdXTtpZighZyhuKSlicmVhaztpZih0PW4scj09PWUubGVuZ3RoLTEpYnJlYWs7aWYodC5faXNMaW5rZWRUb0FycmF5KXtpZighXyhlWysrcl0pKXJldHVybiExfWVsc2UgaWYoImluZm9fYXJyYXkiPT09dC52YWxUeXBlKXt2YXIgaT1lWysrcl07aWYoIV8oaSkpcmV0dXJuITE7dmFyIGE9dC5pdGVtcztpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPj1hLmxlbmd0aClyZXR1cm4hMTtpZigyPT09dC5kaW1lbnNpb25zKXtpZihyKyssZS5sZW5ndGg9PT1yKXJldHVybiB0O3ZhciBvPWVbcl07aWYoIV8obykpcmV0dXJuITE7dD1hW2ldW29dfWVsc2UgdD1hW2ldfWVsc2UgdD1hfX1yZXR1cm4gdH1mdW5jdGlvbiBfKHQpe3JldHVybiB0PT09TWF0aC5yb3VuZCh0KSYmdD49MH1mdW5jdGlvbiB3KCl7dmFyIHQsZSxyPXt9O2Zvcih0IGluIGQocixvKSxuLnN1YnBsb3RzUmVnaXN0cnkpe2lmKChlPW4uc3VicGxvdHNSZWdpc3RyeVt0XSkubGF5b3V0QXR0cmlidXRlcylpZihBcnJheS5pc0FycmF5KGUuYXR0cikpZm9yKHZhciBpPTA7aTxlLmF0dHIubGVuZ3RoO2krKylNKHIsZSxlLmF0dHJbaV0pO2Vsc2UgTShyLGUsInN1YnBsb3QiPT09ZS5hdHRyP2UubmFtZTplLmF0dHIpfWZvcih0IGluIHI9ZnVuY3Rpb24odCl7cmV0dXJuIHAodCx7cmFkaWFsYXhpczpoLnJhZGlhbGF4aXMsYW5ndWxhcmF4aXM6aC5hbmd1bGFyYXhpc30pLHAodCxoLmxheW91dCksdH0ociksbi5jb21wb25lbnRzUmVnaXN0cnkpe3ZhciBhPShlPW4uY29tcG9uZW50c1JlZ2lzdHJ5W3RdKS5zY2hlbWE7aWYoYSYmKGEuc3VicGxvdHN8fGEubGF5b3V0KSl7dmFyIHM9YS5zdWJwbG90cztpZihzJiZzLnhheGlzJiYhcy55YXhpcylmb3IodmFyIGwgaW4gcy54YXhpcylkZWxldGUgci55YXhpc1tsXX1lbHNlImNvbG9yc2NhbGUiPT09ZS5uYW1lP2QocixlLmxheW91dEF0dHJpYnV0ZXMpOmUubGF5b3V0QXR0cmlidXRlcyYmQShyLGUubGF5b3V0QXR0cmlidXRlcyxlLm5hbWUpfXJldHVybntsYXlvdXRBdHRyaWJ1dGVzOmsocil9fWZ1bmN0aW9uIFQoKXt2YXIgdD17ZnJhbWVzOmQoe30scyl9O3JldHVybiBrKHQpLHQuZnJhbWVzfWZ1bmN0aW9uIGsodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IuY3Jhd2wodCwoZnVuY3Rpb24odCxlLG4pe3IuaXNWYWxPYmplY3QodCk/ImRhdGFfYXJyYXkiPT09dC52YWxUeXBlPyh0LnJvbGU9ImRhdGEiLG5bZSsic3JjIl09e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifSk6ITA9PT10LmFycmF5T2smJihuW2UrInNyYyJdPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJub25lIn0pOmcodCkmJih0LnJvbGU9Im9iamVjdCIpfSkpfSh0KSxmdW5jdGlvbih0KXtyLmNyYXdsKHQsKGZ1bmN0aW9uKHQsZSxyKXtpZih0KXt2YXIgbj10Ll9pc0xpbmtlZFRvQXJyYXk7biYmKGRlbGV0ZSB0Ll9pc0xpbmtlZFRvQXJyYXkscltlXT17aXRlbXM6e319LHJbZV0uaXRlbXNbbl09dCxyW2VdLnJvbGU9Im9iamVjdCIpfX0pKX0odCksZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHQoZSl7Zm9yKHZhciByIGluIGUpaWYoZyhlW3JdKSl0KGVbcl0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlW3JdKSlmb3IodmFyIG49MDtuPGVbcl0ubGVuZ3RoO24rKyl0KGVbcl1bbl0pO2Vsc2UgZVtyXWluc3RhbmNlb2YgUmVnRXhwJiYoZVtyXT1lW3JdLnRvU3RyaW5nKCkpfSh0KX0odCksdH1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj12KHQsciksaT1kKHt9LGUubGF5b3V0QXR0cmlidXRlcyk7aS5faXNTdWJwbG90T2JqPSEwLG4uc2V0KGkpfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPXYodCxyKTtuLnNldChkKG4uZ2V0KCl8fHt9LGUpKX1yLklTX1NVQlBMT1RfT0JKPSJfaXNTdWJwbG90T2JqIixyLklTX0xJTktFRF9UT19BUlJBWT0iX2lzTGlua2VkVG9BcnJheSIsci5ERVBSRUNBVEVEPSJfZGVwcmVjYXRlZCIsci5VTkRFUlNDT1JFX0FUVFJTPXgsci5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD17fTtuLmFsbFR5cGVzLmNvbmNhdCgiYXJlYSIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCl7dmFyIGUsaTsiYXJlYSI9PT10PyhlPXthdHRyaWJ1dGVzOnV9LGk9e30pOihlPW4ubW9kdWxlc1t0XS5fbW9kdWxlLGk9ZS5iYXNlUGxvdE1vZHVsZSk7dmFyIG89e3R5cGU6bnVsbH0scz1kKHt9LGEpLGw9ZCh7fSxlLmF0dHJpYnV0ZXMpO3IuY3Jhd2wobCwoZnVuY3Rpb24odCxlLHIsbixpKXt2KHMsaSkuc2V0KHZvaWQgMCksdm9pZCAwPT09dCYmdihsLGkpLnNldCh2b2lkIDApfSkpLGQobyxzKSxuLnRyYWNlSXModCwibm9PcGFjaXR5IikmJmRlbGV0ZSBvLm9wYWNpdHk7bi50cmFjZUlzKHQsInNob3dMZWdlbmQiKXx8KGRlbGV0ZSBvLnNob3dsZWdlbmQsZGVsZXRlIG8ubGVnZW5kZ3JvdXApO24udHJhY2VJcyh0LCJub0hvdmVyIikmJihkZWxldGUgby5ob3ZlcmluZm8sZGVsZXRlIG8uaG92ZXJsYWJlbCk7ZS5zZWxlY3RQb2ludHN8fGRlbGV0ZSBvLnNlbGVjdGVkcG9pbnRzO2QobyxsKSxpLmF0dHJpYnV0ZXMmJmQobyxpLmF0dHJpYnV0ZXMpO28udHlwZT10O3ZhciBjPXttZXRhOmUubWV0YXx8e30sY2F0ZWdvcmllczplLmNhdGVnb3JpZXN8fHt9LGFuaW1hdGFibGU6Qm9vbGVhbihlLmFuaW1hdGFibGUpLHR5cGU6dCxhdHRyaWJ1dGVzOmsobyl9O2lmKGUubGF5b3V0QXR0cmlidXRlcyl7dmFyIGg9e307ZChoLGUubGF5b3V0QXR0cmlidXRlcyksYy5sYXlvdXRBdHRyaWJ1dGVzPWsoaCl9ZS5hbmltYXRhYmxlfHxyLmNyYXdsKGMsKGZ1bmN0aW9uKHQpe3IuaXNWYWxPYmplY3QodCkmJiJhbmltImluIHQmJmRlbGV0ZSB0LmFuaW19KSk7cmV0dXJuIGN9KGUpfSkpO3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyhuLnRyYW5zZm9ybXNSZWdpc3RyeSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbih0KXt2YXIgZT1uLnRyYW5zZm9ybXNSZWdpc3RyeVt0XSxyPWQoe30sZS5hdHRyaWJ1dGVzKTtyZXR1cm4gT2JqZWN0LmtleXMobi5jb21wb25lbnRzUmVnaXN0cnkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBpPW4uY29tcG9uZW50c1JlZ2lzdHJ5W2VdO2kuc2NoZW1hJiZpLnNjaGVtYS50cmFuc2Zvcm1zJiZpLnNjaGVtYS50cmFuc2Zvcm1zW3RdJiZPYmplY3Qua2V5cyhpLnNjaGVtYS50cmFuc2Zvcm1zW3RdKS5mb3JFYWNoKChmdW5jdGlvbihlKXtBKHIsaS5zY2hlbWEudHJhbnNmb3Jtc1t0XVtlXSxlKX0pKX0pKSx7YXR0cmlidXRlczprKHIpfX0odCl9KSkse2RlZnM6e3ZhbE9iamVjdHM6eSxtZXRhS2V5czp4LmNvbmNhdChbImRlc2NyaXB0aW9uIiwicm9sZSIsImVkaXRUeXBlIiwiaW1wbGllZEVkaXRzIl0pLGVkaXRUeXBlOnt0cmFjZXM6Zi50cmFjZXMsbGF5b3V0OmYubGF5b3V0fSxpbXBsaWVkRWRpdHM6e319LHRyYWNlczp0LGxheW91dDp3KCksdHJhbnNmb3JtczplLGZyYW1lczpUKCksYW5pbWF0aW9uOmsobCksY29uZmlnOmsoYyl9fSxyLmNyYXdsPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPW58fDA7aT1pfHwiIixPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgbz10W25dO2lmKC0xPT09eC5pbmRleE9mKG4pKXt2YXIgcz0oaT9pKyIuIjoiIikrbjtlKG8sbix0LGEscyksci5pc1ZhbE9iamVjdChvKXx8ZyhvKSYmImltcGxpZWRFZGl0cyIhPT1uJiZyLmNyYXdsKG8sZSxhKzEscyl9fSkpfSxyLmlzVmFsT2JqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ2b2lkIDAhPT10LnZhbFR5cGV9LHIuZmluZEFycmF5QXR0cmlidXRlcz1mdW5jdGlvbih0KXt2YXIgZSxuLGk9W10sbz1bXSxzPVtdO2Z1bmN0aW9uIGwodCxyLGEsbCl7bz1vLnNsaWNlKDAsbCkuY29uY2F0KFtyXSkscz1zLnNsaWNlKDAsbCkuY29uY2F0KFt0JiZ0Ll9pc0xpbmtlZFRvQXJyYXldKSx0JiYoImRhdGFfYXJyYXkiPT09dC52YWxUeXBlfHwhMD09PXQuYXJyYXlPaykmJiEoImNvbG9yYmFyIj09PW9bbC0xXSYmKCJ0aWNrdGV4dCI9PT1yfHwidGlja3ZhbHMiPT09cikpJiZmdW5jdGlvbiB0KGUscixhKXt2YXIgbD1lW29bcl1dLGM9YStvW3JdO2lmKHI9PT1vLmxlbmd0aC0xKW0obCkmJmkucHVzaChuK2MpO2Vsc2UgaWYoc1tyXSl7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IodmFyIHU9MDt1PGwubGVuZ3RoO3UrKylnKGxbdV0pJiZ0KGxbdV0scisxLGMrIlsiK3UrIl0uIil9ZWxzZSBnKGwpJiZ0KGwscisxLGMrIi4iKX0oZSwwLCIiKX1lPXQsbj0iIixyLmNyYXdsKGEsbCksdC5fbW9kdWxlJiZ0Ll9tb2R1bGUuYXR0cmlidXRlcyYmci5jcmF3bCh0Ll9tb2R1bGUuYXR0cmlidXRlcyxsKTt2YXIgYz10LnRyYW5zZm9ybXM7aWYoYylmb3IodmFyIHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGg9Y1t1XSxmPWguX21vZHVsZTtmJiYobj0idHJhbnNmb3Jtc1siK3UrIl0uIixlPWgsci5jcmF3bChmLmF0dHJpYnV0ZXMsbCkpfXJldHVybiBpfSxyLmdldFRyYWNlVmFsT2JqZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxvPWVbMF0scz0xO2lmKCJ0cmFuc2Zvcm1zIj09PW8pe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gYS50cmFuc2Zvcm1zO3ZhciBsPXQudHJhbnNmb3JtcztpZighQXJyYXkuaXNBcnJheShsKXx8IWwubGVuZ3RoKXJldHVybiExO3ZhciBjPWVbMV07aWYoIV8oYyl8fGM+PWwubGVuZ3RoKXJldHVybiExO2k9KHI9KG4udHJhbnNmb3Jtc1JlZ2lzdHJ5W2xbY10udHlwZV18fHt9KS5hdHRyaWJ1dGVzKSYmcltlWzJdXSxzPTN9ZWxzZSBpZigiYXJlYSI9PT10LnR5cGUpaT11W29dO2Vsc2V7dmFyIGg9dC5fbW9kdWxlO2lmKGh8fChoPShuLm1vZHVsZXNbdC50eXBlfHxhLnR5cGUuZGZsdF18fHt9KS5fbW9kdWxlKSwhaClyZXR1cm4hMTtpZighKGk9KHI9aC5hdHRyaWJ1dGVzKSYmcltvXSkpe3ZhciBmPWguYmFzZVBsb3RNb2R1bGU7ZiYmZi5hdHRyaWJ1dGVzJiYoaT1mLmF0dHJpYnV0ZXNbb10pfWl8fChpPWFbb10pfXJldHVybiBiKGksZSxzKX0sci5nZXRMYXlvdXRWYWxPYmplY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYihmdW5jdGlvbih0LGUpe3ZhciByLGksYSxzLGw9dC5fYmFzZVBsb3RNb2R1bGVzO2lmKGwpe3ZhciBjO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspe2lmKChhPWxbcl0pLmF0dHJSZWdleCYmYS5hdHRyUmVnZXgudGVzdChlKSl7aWYoYS5sYXlvdXRBdHRyT3ZlcnJpZGVzKXJldHVybiBhLmxheW91dEF0dHJPdmVycmlkZXM7IWMmJmEubGF5b3V0QXR0cmlidXRlcyYmKGM9YS5sYXlvdXRBdHRyaWJ1dGVzKX12YXIgdT1hLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzO2lmKHUmJmUgaW4gdSlyZXR1cm4gdVtlXX1pZihjKXJldHVybiBjfXZhciBmPXQuX21vZHVsZXM7aWYoZilmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKWlmKChzPWZbcl0ubGF5b3V0QXR0cmlidXRlcykmJmUgaW4gcylyZXR1cm4gc1tlXTtmb3IoaSBpbiBuLmNvbXBvbmVudHNSZWdpc3RyeSl7aWYoImNvbG9yc2NhbGUiPT09KGE9bi5jb21wb25lbnRzUmVnaXN0cnlbaV0pLm5hbWUmJjA9PT1lLmluZGV4T2YoImNvbG9yYXhpcyIpKXJldHVybiBhLmxheW91dEF0dHJpYnV0ZXNbZV07aWYoIWEuc2NoZW1hJiZlPT09YS5uYW1lKXJldHVybiBhLmxheW91dEF0dHJpYnV0ZXN9aWYoZSBpbiBvKXJldHVybiBvW2VdO2lmKCJyYWRpYWxheGlzIj09PWV8fCJhbmd1bGFyYXhpcyI9PT1lKXJldHVybiBoW2VdO3JldHVybiBoLmxheW91dFtlXXx8ITF9KHQsZVswXSksZSwxKX19LHsiLi4vbGliIjo3NTAsIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo3OTMsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc5NSwiLi4vcGxvdHMvZnJhbWVfYXR0cmlidXRlcyI6ODI4LCIuLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6ODUzLCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXJlYV9hdHRyaWJ1dGVzIjo4NjgsIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9heGlzX2F0dHJpYnV0ZXMiOjg2OSwiLi4vcmVnaXN0cnkiOjg4MiwiLi9lZGl0X3R5cGVzIjo3ODEsIi4vcGxvdF9jb25maWciOjc4Nn1dLDc4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXtuYW1lOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJub25lIn19O2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgdH1mdW5jdGlvbiBzKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuInMiIT09dC5jaGFyQXQoZSkmJm4ud2FybigiYmFkIGFyZ3VtZW50IHRvIGFycmF5RGVmYXVsdEtleTogIit0KSx0LnN1YnN0cigwLHQubGVuZ3RoLTEpKyJkZWZhdWx0cyJ9YS50ZW1wbGF0ZWl0ZW1uYW1lPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sci50ZW1wbGF0ZWRBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiBlLl9pc0xpbmtlZFRvQXJyYXk9dCxlLm5hbWU9YS5uYW1lLGUudGVtcGxhdGVpdGVtbmFtZT1hLnRlbXBsYXRlaXRlbW5hbWUsZX0sci50cmFjZVRlbXBsYXRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLGE9e307Zm9yKGUgaW4gdClyPXRbZV0sQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGgmJihhW2VdPTApO3JldHVybntuZXdUcmFjZTpmdW5jdGlvbihvKXt2YXIgcz17dHlwZTplPW4uY29lcmNlKG8se30saSwidHlwZSIpLF90ZW1wbGF0ZTpudWxsfTtpZihlIGluIGEpe3I9dFtlXTt2YXIgbD1hW2VdJXIubGVuZ3RoO2FbZV0rKyxzLl90ZW1wbGF0ZT1yW2xdfXJldHVybiBzfX19LHIubmV3Q29udGFpbmVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Ll90ZW1wbGF0ZSxhPWkmJihpW2VdfHxyJiZpW3JdKTtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KGEpfHwoYT1udWxsKSx0W2VdPXtfdGVtcGxhdGU6YX19LHIuYXJyYXlUZW1wbGF0ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX3RlbXBsYXRlLGk9biYmbltzKGUpXSxhPW4mJm5bZV07QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGh8fChhPVtdKTt2YXIgbD17fTtyZXR1cm57bmV3SXRlbTpmdW5jdGlvbih0KXt2YXIgZT17bmFtZTp0Lm5hbWUsX2lucHV0OnR9LG49ZS50ZW1wbGF0ZWl0ZW1uYW1lPXQudGVtcGxhdGVpdGVtbmFtZTtpZighbyhuKSlyZXR1cm4gZS5fdGVtcGxhdGU9aSxlO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgYz1hW3NdO2lmKGMubmFtZT09PW4pcmV0dXJuIGxbbl09MSxlLl90ZW1wbGF0ZT1jLGV9cmV0dXJuIGVbcl09dFtyXXx8ITEsZS5fdGVtcGxhdGU9ITEsZX0sZGVmYXVsdEl0ZW1zOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIHI9YVtlXSxuPXIubmFtZTtpZihvKG4pJiYhbFtuXSl7dmFyIGk9e190ZW1wbGF0ZTpyLG5hbWU6bixfaW5wdXQ6e190ZW1wbGF0ZWl0ZW1uYW1lOm59fTtpLnRlbXBsYXRlaXRlbW5hbWU9ci50ZW1wbGF0ZWl0ZW1uYW1lLHQucHVzaChpKSxsW25dPTF9fXJldHVybiB0fX19LHIuYXJyYXlEZWZhdWx0S2V5PXMsci5hcnJheUVkaXRvcj1mdW5jdGlvbih0LGUscil7dmFyIGk9KG4ubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8W10pLmxlbmd0aCxhPXIuX2luZGV4LG89YT49aSYmKHIuX2lucHV0fHx7fSkuX3RlbXBsYXRlaXRlbW5hbWU7byYmKGE9aSk7dmFyIHMsbD1lKyJbIithKyJdIjtmdW5jdGlvbiBjKCl7cz17fSxvJiYoc1tsXT17fSxzW2xdLnRlbXBsYXRlaXRlbW5hbWU9byl9ZnVuY3Rpb24gdSh0LGUpe28/bi5uZXN0ZWRQcm9wZXJ0eShzW2xdLHQpLnNldChlKTpzW2wrIi4iK3RdPWV9ZnVuY3Rpb24gaCgpe3ZhciB0PXM7cmV0dXJuIGMoKSx0fXJldHVybiBjKCkse21vZGlmeUJhc2U6ZnVuY3Rpb24odCxlKXtzW3RdPWV9LG1vZGlmeUl0ZW06dSxnZXRVcGRhdGVPYmo6aCxhcHBseVVwZGF0ZTpmdW5jdGlvbihlLHIpe2UmJnUoZSxyKTt2YXIgaT1oKCk7Zm9yKHZhciBhIGluIGkpbi5uZXN0ZWRQcm9wZXJ0eSh0LGEpLnNldChpW2FdKX19fX0seyIuLi9saWIiOjc1MCwiLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzk1fV0sNzg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi9yZWdpc3RyeSIpLGE9dCgiLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uL2xpYiIpLHM9dCgiLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksbD10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksYz10KCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSx1PXQoIi4uL2NvbXBvbmVudHMvdGl0bGVzIiksaD10KCIuLi9jb21wb25lbnRzL21vZGViYXIiKSxmPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscD10KCIuLi9jb25zdGFudHMvYWxpZ25tZW50IiksZD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKSxnPWQuZW5mb3JjZSxtPWQuY2xlYW4sdj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZG9BdXRvUmFuZ2U7ZnVuY3Rpb24geSh0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl1bMF0sYT1yW25dWzFdO2lmKCEoaVswXT49dFsxXXx8aVsxXTw9dFswXSkmJihhWzBdPGVbMV0mJmFbMV0+ZVswXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24geCh0KXt2YXIgZSxpLHMsdSxkLGcsbT10Ll9mdWxsTGF5b3V0LHY9bS5fc2l6ZSx4PXYucCxfPWYubGlzdCh0LCIiLCEwKTtpZihtLl9wYXBlcmRpdi5zdHlsZSh7d2lkdGg6dC5fY29udGV4dC5yZXNwb25zaXZlJiZtLmF1dG9zaXplJiYhdC5fY29udGV4dC5faGFzWmVyb1dpZHRoJiYhdC5sYXlvdXQud2lkdGg/IjEwMCUiOm0ud2lkdGgrInB4IixoZWlnaHQ6dC5fY29udGV4dC5yZXNwb25zaXZlJiZtLmF1dG9zaXplJiYhdC5fY29udGV4dC5faGFzWmVyb0hlaWdodCYmIXQubGF5b3V0LmhlaWdodD8iMTAwJSI6bS5oZWlnaHQrInB4In0pLnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuY2FsbChjLnNldFNpemUsbS53aWR0aCxtLmhlaWdodCksdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsbS5wYXBlcl9iZ2NvbG9yKSxyLmRyYXdNYWluVGl0bGUodCksaC5tYW5hZ2UodCksIW0uX2hhcygiY2FydGVzaWFuIikpcmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KTtmdW5jdGlvbiBUKHQsZSxyKXt2YXIgbj10Ll9sdy8yO3JldHVybiJ4Ij09PXQuX2lkLmNoYXJBdCgwKT9lPyJ0b3AiPT09cj9lLl9vZmZzZXQteC1uOmUuX29mZnNldCtlLl9sZW5ndGgreCtuOnYudCt2LmgqKDEtKHQucG9zaXRpb258fDApKStuJTE6ZT8icmlnaHQiPT09cj9lLl9vZmZzZXQrZS5fbGVuZ3RoK3grbjplLl9vZmZzZXQteC1uOnYubCt2LncqKHQucG9zaXRpb258fDApK24lMX1mb3IoZT0wO2U8Xy5sZW5ndGg7ZSsrKXt2YXIgaz0odT1fW2VdKS5fYW5jaG9yQXhpczt1Ll9saW5lcG9zaXRpb25zPXt9LHUuX2x3PWMuY3Jpc3BSb3VuZCh0LHUubGluZXdpZHRoLDEpLHUuX21haW5MaW5lUG9zaXRpb249VCh1LGssdS5zaWRlKSx1Ll9tYWluTWlycm9yUG9zaXRpb249dS5taXJyb3ImJms/VCh1LGsscC5PUFBPU0lURV9TSURFW3Uuc2lkZV0pOm51bGx9dmFyIE09W10sQT1bXSxTPVtdLEU9MT09PWwub3BhY2l0eShtLnBhcGVyX2JnY29sb3IpJiYxPT09bC5vcGFjaXR5KG0ucGxvdF9iZ2NvbG9yKSYmbS5wYXBlcl9iZ2NvbG9yPT09bS5wbG90X2JnY29sb3I7Zm9yKGkgaW4gbS5fcGxvdHMpaWYoKHM9bS5fcGxvdHNbaV0pLm1haW5wbG90KXMuYmcmJnMuYmcucmVtb3ZlKCkscy5iZz12b2lkIDA7ZWxzZXt2YXIgQz1zLnhheGlzLmRvbWFpbixMPXMueWF4aXMuZG9tYWluLFA9cy5wbG90Z3JvdXA7aWYoeShDLEwsUykpe3ZhciBJPVAubm9kZSgpLHo9cy5iZz1vLmVuc3VyZVNpbmdsZShQLCJyZWN0IiwiYmciKTtJLmluc2VydEJlZm9yZSh6Lm5vZGUoKSxJLmNoaWxkTm9kZXNbMF0pLEEucHVzaChpKX1lbHNlIFAuc2VsZWN0KCJyZWN0LmJnIikucmVtb3ZlKCksUy5wdXNoKFtDLExdKSxFfHwoTS5wdXNoKGkpLEEucHVzaChpKSl9dmFyIE8sRCxSLEYsQixOLGosVSxWLHEsSCxHLFksVz1tLl9iZ0xheWVyLnNlbGVjdEFsbCgiLmJnIikuZGF0YShNKTtmb3IoVy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImJnIiwhMCksVy5leGl0KCkucmVtb3ZlKCksVy5lYWNoKChmdW5jdGlvbih0KXttLl9wbG90c1t0XS5iZz1uLnNlbGVjdCh0aGlzKX0pKSxlPTA7ZTxBLmxlbmd0aDtlKyspcz1tLl9wbG90c1tBW2VdXSxkPXMueGF4aXMsZz1zLnlheGlzLHMuYmcmJnMuYmcuY2FsbChjLnNldFJlY3QsZC5fb2Zmc2V0LXgsZy5fb2Zmc2V0LXgsZC5fbGVuZ3RoKzIqeCxnLl9sZW5ndGgrMip4KS5jYWxsKGwuZmlsbCxtLnBsb3RfYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsMCk7aWYoIW0uX2hhc09ubHlMYXJnZVNwbG9tcylmb3IoaSBpbiBtLl9wbG90cyl7cz1tLl9wbG90c1tpXSxkPXMueGF4aXMsZz1zLnlheGlzO3ZhciBaLFgsSj1zLmNsaXBJZD0iY2xpcCIrbS5fdWlkK2krInBsb3QiLEs9by5lbnN1cmVTaW5nbGVCeUlkKG0uX2NsaXBzLCJjbGlwUGF0aCIsSiwoZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJwbG90Y2xpcCIsITApLmFwcGVuZCgicmVjdCIpfSkpO3MuY2xpcFJlY3Q9Sy5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpkLl9sZW5ndGgsaGVpZ2h0OmcuX2xlbmd0aH0pLGMuc2V0VHJhbnNsYXRlKHMucGxvdCxkLl9vZmZzZXQsZy5fb2Zmc2V0KSxzLl9oYXNDbGlwT25BeGlzRmFsc2U/KFo9bnVsbCxYPUopOihaPUosWD1udWxsKSxjLnNldENsaXBVcmwocy5wbG90LFosdCkscy5sYXllckNsaXBJZD1YfWZ1bmN0aW9uIFEodCl7cmV0dXJuIk0iK08rIiwiK3QrIkgiK0R9ZnVuY3Rpb24gJCh0KXtyZXR1cm4iTSIrZC5fb2Zmc2V0KyIsIit0KyJoIitkLl9sZW5ndGh9ZnVuY3Rpb24gdHQodCl7cmV0dXJuIk0iK3QrIiwiK1UrIlYiK2p9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIk0iK3QrIiwiK2cuX29mZnNldCsidiIrZy5fbGVuZ3RofWZ1bmN0aW9uIHJ0KHQsZSxyKXtpZighdC5zaG93bGluZXx8aSE9PXQuX21haW5TdWJwbG90KXJldHVybiIiO2lmKCF0Ll9hbmNob3JBeGlzKXJldHVybiByKHQuX21haW5MaW5lUG9zaXRpb24pO3ZhciBuPWUodC5fbWFpbkxpbmVQb3NpdGlvbik7cmV0dXJuIHQubWlycm9yJiYobis9ZSh0Ll9tYWluTWlycm9yUG9zaXRpb24pKSxufWZvcihpIGluIG0uX3Bsb3RzKXtzPW0uX3Bsb3RzW2ldLGQ9cy54YXhpcyxnPXMueWF4aXM7dmFyIG50PSJNMCwwIjtiKGQsaSkmJihCPXcoZCwibGVmdCIsZyxfKSxPPWQuX29mZnNldC0oQj94K0I6MCksTj13KGQsInJpZ2h0IixnLF8pLEQ9ZC5fb2Zmc2V0K2QuX2xlbmd0aCsoTj94K046MCksUj1UKGQsZywiYm90dG9tIiksRj1UKGQsZywidG9wIiksIShZPSFkLl9hbmNob3JBeGlzfHxpIT09ZC5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09ZC5taXJyb3ImJiJhbGwiIT09ZC5taXJyb3J8fChkLl9saW5lcG9zaXRpb25zW2ldPVtSLEZdKSxudD1ydChkLFEsJCksWSYmZC5zaG93bGluZSYmKCJhbGwiPT09ZC5taXJyb3J8fCJhbGx0aWNrcyI9PT1kLm1pcnJvcikmJihudCs9UShSKStRKEYpKSxzLnhsaW5lcy5zdHlsZSgic3Ryb2tlLXdpZHRoIixkLl9sdysicHgiKS5jYWxsKGwuc3Ryb2tlLGQuc2hvd2xpbmU/ZC5saW5lY29sb3I6InJnYmEoMCwwLDAsMCkiKSkscy54bGluZXMuYXR0cigiZCIsbnQpO3ZhciBpdD0iTTAsMCI7YihnLGkpJiYoSD13KGcsImJvdHRvbSIsZCxfKSxqPWcuX29mZnNldCtnLl9sZW5ndGgrKEg/eDowKSxHPXcoZywidG9wIixkLF8pLFU9Zy5fb2Zmc2V0LShHP3g6MCksVj1UKGcsZCwibGVmdCIpLHE9VChnLGQsInJpZ2h0IiksIShZPSFnLl9hbmNob3JBeGlzfHxpIT09Zy5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09Zy5taXJyb3ImJiJhbGwiIT09Zy5taXJyb3J8fChnLl9saW5lcG9zaXRpb25zW2ldPVtWLHFdKSxpdD1ydChnLHR0LGV0KSxZJiZnLnNob3dsaW5lJiYoImFsbCI9PT1nLm1pcnJvcnx8ImFsbHRpY2tzIj09PWcubWlycm9yKSYmKGl0Kz10dChWKSt0dChxKSkscy55bGluZXMuc3R5bGUoInN0cm9rZS13aWR0aCIsZy5fbHcrInB4IikuY2FsbChsLnN0cm9rZSxnLnNob3dsaW5lP2cubGluZWNvbG9yOiJyZ2JhKDAsMCwwLDApIikpLHMueWxpbmVzLmF0dHIoImQiLGl0KX1yZXR1cm4gZi5tYWtlQ2xpcFBhdGhzKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuKHQudGlja3N8fHQuc2hvd2xpbmUpJiYoZT09PXQuX21haW5TdWJwbG90fHwiYWxsIj09PXQubWlycm9yfHwiYWxsdGlja3MiPT09dC5taXJyb3IpfWZ1bmN0aW9uIF8odCxlLHIpe2lmKCFyLnNob3dsaW5lfHwhci5fbHcpcmV0dXJuITE7aWYoImFsbCI9PT1yLm1pcnJvcnx8ImFsbHRpY2tzIj09PXIubWlycm9yKXJldHVybiEwO3ZhciBuPXIuX2FuY2hvckF4aXM7aWYoIW4pcmV0dXJuITE7dmFyIGk9cC5GUk9NX0JMW2VdO3JldHVybiByLnNpZGU9PT1lP24uZG9tYWluW2ldPT09dC5kb21haW5baV06ci5taXJyb3ImJm4uZG9tYWluWzEtaV09PT10LmRvbWFpblsxLWldfWZ1bmN0aW9uIHcodCxlLHIsbil7aWYoXyh0LGUscikpcmV0dXJuIHIuX2x3O2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO2lmKGEuX21haW5BeGlzPT09ci5fbWFpbkF4aXMmJl8odCxlLGEpKXJldHVybiBhLl9sd31yZXR1cm4gMH1mdW5jdGlvbiBUKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsaT0wO3N3aXRjaCgic3RhcnQiPT09ZT9pPXIucGFkLmw6ImVuZCI9PT1lJiYoaT0tci5wYWQuciksci54cmVmKXtjYXNlInBhcGVyIjpyZXR1cm4gbi5sK24udypyLngraTtjYXNlImNvbnRhaW5lciI6ZGVmYXVsdDpyZXR1cm4gdC53aWR0aCpyLngraX19ZnVuY3Rpb24gayh0LGUpe3ZhciByPXQudGl0bGUsbj10Ll9zaXplLGk9MDtpZigiMGVtIiE9PWUmJmU/ZT09PXAuQ0FQX1NISUZUKyJlbSImJihpPXIucGFkLnQpOmk9LXIucGFkLmIsImF1dG8iPT09ci55KXJldHVybiBuLnQvMjtzd2l0Y2goci55cmVmKXtjYXNlInBhcGVyIjpyZXR1cm4gbi50K24uaC1uLmgqci55K2k7Y2FzZSJjb250YWluZXIiOmRlZmF1bHQ6cmV0dXJuIHQuaGVpZ2h0LXQuaGVpZ2h0KnIueStpfX1yLmxheW91dFN0eWxlcz1mdW5jdGlvbih0KXtyZXR1cm4gby5zeW5jT3JBc3luYyhbYS5kb0F1dG9NYXJnaW4seF0sdCl9LHIuZHJhd01haW5UaXRsZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCl7dmFyIGU9dC50aXRsZSxyPSJtaWRkbGUiO28uaXNSaWdodEFuY2hvcihlKT9yPSJlbmQiOm8uaXNMZWZ0QW5jaG9yKGUpJiYocj0ic3RhcnQiKTtyZXR1cm4gcn0oZSksbj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9IjBlbSI7by5pc1RvcEFuY2hvcihlKT9yPXAuQ0FQX1NISUZUKyJlbSI6by5pc01pZGRsZUFuY2hvcihlKSYmKHI9cC5NSURfU0hJRlQrImVtIik7cmV0dXJuIHJ9KGUpO3UuZHJhdyh0LCJndGl0bGUiLHtwcm9wQ29udGFpbmVyOmUscHJvcE5hbWU6InRpdGxlLnRleHQiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS5wbG90LGF0dHJpYnV0ZXM6e3g6VChlLHIpLHk6ayhlLG4pLCJ0ZXh0LWFuY2hvciI6cixkeTpufX0pfSxyLmRvVHJhY2VTdHlsZT1mdW5jdGlvbih0KXt2YXIgZSxuPXQuY2FsY2RhdGEsbz1bXTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgbD1uW2VdLGM9bFswXXx8e30sdT1jLnRyYWNlfHx7fSxoPXUuX21vZHVsZXx8e30sZj1oLmFycmF5c1RvQ2FsY2RhdGE7ZiYmZihsLHUpO3ZhciBwPWguZWRpdFN0eWxlO3AmJm8ucHVzaCh7Zm46cCxjZDA6Y30pfWlmKG8ubGVuZ3RoKXtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgZD1vW2VdO2QuZm4odCxkLmNkMCl9cyh0KSxyLnJlZHJhd1JlZ2xUcmFjZXModCl9cmV0dXJuIGEuc3R5bGUodCksaS5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKSh0KSxhLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9Db2xvckJhcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KSxhLnByZXZpb3VzUHJvbWlzZXModCl9LHIubGF5b3V0UmVwbG90PWZ1bmN0aW9uKHQpe3ZhciBlPXQubGF5b3V0O3JldHVybiB0LmxheW91dD12b2lkIDAsaS5jYWxsKCJwbG90Iix0LCIiLGUpfSxyLmRvTGVnZW5kPWZ1bmN0aW9uKHQpe3JldHVybiBpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb1RpY2tzUmVsYXlvdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGYuZHJhdyh0LCJyZWRyYXciKSx0Ll9mdWxsTGF5b3V0Ll9oYXNPbmx5TGFyZ2VTcGxvbXMmJihpLnN1YnBsb3RzUmVnaXN0cnkuc3Bsb20udXBkYXRlR3JpZCh0KSxzKHQpLHIucmVkcmF3UmVnbFRyYWNlcyh0KSksci5kcmF3TWFpblRpdGxlKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb01vZGVCYXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtoLm1hbmFnZSh0KTtmb3IodmFyIHI9MDtyPGUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7cisrKXt2YXIgbj1lLl9iYXNlUGxvdE1vZHVsZXNbcl0udXBkYXRlRng7biYmbih0KX1yZXR1cm4gYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvQ2FtZXJhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wzZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWVbcltuXV07aS5fc2NlbmUuc2V0Vmlld3BvcnQoaSl9fSxyLmRyYXdEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7cyh0KTtmb3IodmFyIG49ZS5fYmFzZVBsb3RNb2R1bGVzLG89MDtvPG4ubGVuZ3RoO28rKyluW29dLnBsb3QodCk7cmV0dXJuIHIucmVkcmF3UmVnbFRyYWNlcyh0KSxhLnN0eWxlKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJkcmF3IikodCksZS5fcmVwbG90dGluZz0hMSxhLnByZXZpb3VzUHJvbWlzZXModCl9LHIucmVkcmF3UmVnbFRyYWNlcz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKGUuX2hhcygicmVnbCIpKXt2YXIgcixuLGk9dC5fZnVsbERhdGEsYT1bXSxzPVtdO2ZvcihlLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmUuX3NwbG9tR3JpZC5kcmF3KCkscj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgbD1pW3JdOyEwPT09bC52aXNpYmxlJiYwIT09bC5fbGVuZ3RoJiYoInNwbG9tIj09PWwudHlwZT9lLl9zcGxvbVNjZW5lc1tsLnVpZF0uZHJhdygpOiJzY2F0dGVyZ2wiPT09bC50eXBlP28ucHVzaFVuaXF1ZShhLGwueGF4aXMrbC55YXhpcyk6InNjYXR0ZXJwb2xhcmdsIj09PWwudHlwZSYmby5wdXNoVW5pcXVlKHMsbC5zdWJwbG90KSl9Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKykobj1lLl9wbG90c1thW3JdXSkuX3NjZW5lJiZuLl9zY2VuZS5kcmF3KCk7Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKykobj1lW3Nbcl1dLl9zdWJwbG90KS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKX19LHIuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPXQuX2Z1bGxMYXlvdXQsaT1mLmxpc3QodCwiIiwhMCksYT1uLl9heGlzTWF0Y2hHcm91cHN8fFtdLHM9e30sbD0wO2w8aS5sZW5ndGg7bCsrKWU9aVtsXSxtKHQsZSksdih0LGUpLHNbZS5faWRdPTE7Zyh0KTt0OmZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdSxoPWFbY10scD1udWxsO2Zvcih1IGluIGgpaWYoc1soZT1mLmdldEZyb21JZCh0LHUpKS5faWRdKXtpZighMT09PWUuYXV0b3JhbmdlKWNvbnRpbnVlIHQ7cj1vLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKSxwP3BbMF08cFsxXT8ocFswXT1NYXRoLm1pbihwWzBdLHJbMF0pLHBbMV09TWF0aC5tYXgocFsxXSxyWzFdKSk6KHBbMF09TWF0aC5tYXgocFswXSxyWzBdKSxwWzFdPU1hdGgubWluKHBbMV0sclsxXSkpOnA9cn1mb3IodSBpbiBoKShlPWYuZ2V0RnJvbUlkKHQsdSkpLnJhbmdlPW8uc2ltcGxlTWFwKHAsZS5sMnIpLGUuX2lucHV0LnJhbmdlPWUucmFuZ2Uuc2xpY2UoKSxlLnNldFNjYWxlKCl9fSxyLmZpbmFsRHJhdz1mdW5jdGlvbih0KXtpLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2VsZWN0b3IiLCJkcmF3IikodCl9LHIuZHJhd01hcmdpblB1c2hlcnM9ZnVuY3Rpb24odCl7aS5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgic2xpZGVycyIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgidXBkYXRlbWVudXMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi9jb21wb25lbnRzL21vZGViYXIiOjY3NSwiLi4vY29tcG9uZW50cy90aXRsZXMiOjcxMCwiLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzE3LCIuLi9saWIiOjc1MCwiLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjo3MzQsIi4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjc5OCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo4MDYsIi4uL3Bsb3RzL3Bsb3RzIjo4NjIsIi4uL3JlZ2lzdHJ5Ijo4ODIsZDM6MTY5fV0sNzkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9bi5pc1BsYWluT2JqZWN0LGE9dCgiLi9wbG90X3NjaGVtYSIpLG89dCgiLi4vcGxvdHMvcGxvdHMiKSxzPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4vcGxvdF90ZW1wbGF0ZSIpLGM9dCgiLi9wbG90X2NvbmZpZyIpLmRmbHRDb25maWc7ZnVuY3Rpb24gdSh0LGUpe3Q9bi5leHRlbmREZWVwKHt9LHQpO3ZhciByLGEsbz1PYmplY3Qua2V5cyh0KS5zb3J0KCk7ZnVuY3Rpb24gcyhlLHIsbil7aWYoaShyKSYmaShlKSl1KGUscik7ZWxzZSBpZihBcnJheS5pc0FycmF5KHIpJiZBcnJheS5pc0FycmF5KGUpKXt2YXIgbz1sLmFycmF5VGVtcGxhdGVyKHtfdGVtcGxhdGU6dH0sbik7Zm9yKGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXSxjPW8ubmV3SXRlbShzKS5fdGVtcGxhdGU7YyYmdShjLHMpfXZhciBoPW8uZGVmYXVsdEl0ZW1zKCk7Zm9yKGE9MDthPGgubGVuZ3RoO2ErKylyLnB1c2goaFthXS5fdGVtcGxhdGUpO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspZGVsZXRlIHJbYV0udGVtcGxhdGVpdGVtbmFtZX19Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGM9b1tyXSxmPXRbY107aWYoYyBpbiBlP3MoZixlW2NdLGMpOmVbY109ZixoKGMpPT09Yylmb3IodmFyIHAgaW4gZSl7dmFyIGQ9aChwKTtwPT09ZHx8ZCE9PWN8fHAgaW4gdHx8cyhmLGVbcF0sYyl9fX1mdW5jdGlvbiBoKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldKyQvLCIiKX1mdW5jdGlvbiBmKHQsZSxyLGEsbyl7dmFyIHM9byYmcihvKTtmb3IodmFyIGMgaW4gdCl7dmFyIHU9dFtjXSxwPWcodCxjLGEpLGQ9Zyh0LGMsbyksbT1yKGQpO2lmKCFtKXt2YXIgdj1oKGMpO3YhPT1jJiYobT1yKGQ9Zyh0LHYsbykpKX1pZigoIXN8fHMhPT1tKSYmISghbXx8bS5fbm9UZW1wbGF0aW5nfHwiZGF0YV9hcnJheSI9PT1tLnZhbFR5cGV8fG0uYXJyYXlPayYmQXJyYXkuaXNBcnJheSh1KSkpaWYoIW0udmFsVHlwZSYmaSh1KSlmKHUsZSxyLHAsZCk7ZWxzZSBpZihtLl9pc0xpbmtlZFRvQXJyYXkmJkFycmF5LmlzQXJyYXkodSkpZm9yKHZhciB5PSExLHg9MCxiPXt9LF89MDtfPHUubGVuZ3RoO18rKyl7dmFyIHc9dVtfXTtpZihpKHcpKXt2YXIgVD13Lm5hbWU7aWYoVCliW1RdfHwoZih3LGUscixnKHUseCxwKSxnKHUseCxkKSkseCsrLGJbVF09MSk7ZWxzZSBpZigheSl7dmFyIGs9Zyh0LGwuYXJyYXlEZWZhdWx0S2V5KGMpLGEpLE09Zyh1LHgscCk7Zih3LGUscixNLGcodSx4LGQpKTt2YXIgQT1uLm5lc3RlZFByb3BlcnR5KGUsTSk7bi5uZXN0ZWRQcm9wZXJ0eShlLGspLnNldChBLmdldCgpKSxBLnNldChudWxsKSx5PSEwfX19ZWxzZXtuLm5lc3RlZFByb3BlcnR5KGUscCkuc2V0KHUpfX19ZnVuY3Rpb24gcCh0LGUpe3JldHVybiBhLmdldExheW91dFZhbE9iamVjdCh0LG4ubmVzdGVkUHJvcGVydHkoe30sZSkucGFydHMpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gYS5nZXRUcmFjZVZhbE9iamVjdCh0LG4ubmVzdGVkUHJvcGVydHkoe30sZSkucGFydHMpfWZ1bmN0aW9uIGcodCxlLHIpe3JldHVybiByP0FycmF5LmlzQXJyYXkodCk/cisiWyIrZSsiXSI6cisiLiIrZTplfWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoaSh0W2VdKSlyZXR1cm4hMH1mdW5jdGlvbiB2KHQpe3ZhciBlO3N3aXRjaCh0LmNvZGUpe2Nhc2UiZGF0YSI6ZT0iVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgZGF0YS4iO2JyZWFrO2Nhc2UibGF5b3V0IjplPSJUaGUgdGVtcGxhdGUgaGFzIG5vIGtleSBsYXlvdXQuIjticmVhaztjYXNlIm1pc3NpbmciOmU9dC5wYXRoPyJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciBpdGVtICIrdC5wYXRoKyIgd2l0aCBuYW1lICIrdC50ZW1wbGF0ZWl0ZW1uYW1lOiJUaGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciB0cmFjZSAiK3QuaW5kZXgrIiwgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIuIjticmVhaztjYXNlInVudXNlZCI6ZT10LnBhdGg/IlRoZSB0ZW1wbGF0ZSBpdGVtIGF0ICIrdC5wYXRoKyIgd2FzIG5vdCB1c2VkIGluIGNvbnN0cnVjdGluZyB0aGUgcGxvdC4iOnQuZGF0YUNvdW50PyJTb21lIG9mIHRoZSB0ZW1wbGF0ZXMgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIgd2VyZSBub3QgdXNlZC4gVGhlIHRlbXBsYXRlIGhhcyAiK3QudGVtcGxhdGVDb3VudCsiIHRyYWNlcywgdGhlIGRhdGEgb25seSBoYXMgIit0LmRhdGFDb3VudCsiIG9mIHRoaXMgdHlwZS4iOiJUaGUgdGVtcGxhdGUgaGFzICIrdC50ZW1wbGF0ZUNvdW50KyIgdHJhY2VzIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiIGJ1dCB0aGVyZSBhcmUgbm9uZSBpbiB0aGUgZGF0YS4iO2JyZWFrO2Nhc2UicmV1c2VkIjplPSJTb21lIG9mIHRoZSB0ZW1wbGF0ZXMgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIgd2VyZSB1c2VkIG1vcmUgdGhhbiBvbmNlLiBUaGUgdGVtcGxhdGUgaGFzICIrdC50ZW1wbGF0ZUNvdW50KyIgdHJhY2VzLCB0aGUgZGF0YSBoYXMgIit0LmRhdGFDb3VudCsiIG9mIHRoaXMgdHlwZS4ifXJldHVybiB0Lm1zZz1lLHR9ci5tYWtlVGVtcGxhdGU9ZnVuY3Rpb24odCl7dD1uLmlzUGxhaW5PYmplY3QodCk/dDpuLmdldEdyYXBoRGl2KHQpLHQ9bi5leHRlbmREZWVwKHtfY29udGV4dDpjfSx7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksby5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgZT10LmRhdGF8fFtdLHI9dC5sYXlvdXR8fHt9O3IuX2Jhc2VQbG90TW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsci5fbW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9tb2R1bGVzO3ZhciBhPXtkYXRhOnt9LGxheW91dDp7fX07ZS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT17fTtmKHQsZSxkLmJpbmQobnVsbCx0KSk7dmFyIHI9bi5jb2VyY2UodCx7fSxzLCJ0eXBlIiksaT1hLmRhdGFbcl07aXx8KGk9YS5kYXRhW3JdPVtdKSxpLnB1c2goZSl9KSksZihyLGEubGF5b3V0LHAuYmluZChudWxsLHIpKSxkZWxldGUgYS5sYXlvdXQudGVtcGxhdGU7dmFyIGw9ci50ZW1wbGF0ZTtpZihpKGwpKXt2YXIgaCxnLG0sdix5LHgsYj1sLmxheW91dDtpKGIpJiZ1KGIsYS5sYXlvdXQpO3ZhciBfPWwuZGF0YTtpZihpKF8pKXtmb3IoZyBpbiBhLmRhdGEpaWYobT1fW2ddLEFycmF5LmlzQXJyYXkobSkpe2Zvcih4PSh5PWEuZGF0YVtnXSkubGVuZ3RoLHY9bS5sZW5ndGgsaD0wO2g8eDtoKyspdShtW2gldl0seVtoXSk7Zm9yKGg9eDtoPHY7aCsrKXkucHVzaChuLmV4dGVuZERlZXAoe30sbVtoXSkpfWZvcihnIGluIF8pZyBpbiBhLmRhdGF8fChhLmRhdGFbZ109bi5leHRlbmREZWVwKFtdLF9bZ10pKX19cmV0dXJuIGF9LHIudmFsaWRhdGVUZW1wbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPW4uZXh0ZW5kRGVlcCh7fSx7X2NvbnRleHQ6YyxkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXR9KSxhPXIubGF5b3V0fHx7fTtpKGUpfHwoZT1hLnRlbXBsYXRlfHx7fSk7dmFyIHM9ZS5sYXlvdXQsbD1lLmRhdGEsdT1bXTtyLmxheW91dD1hLHIubGF5b3V0LnRlbXBsYXRlPWUsby5zdXBwbHlEZWZhdWx0cyhyKTt2YXIgZj1yLl9mdWxsTGF5b3V0LHA9ci5fZnVsbERhdGEsZD17fTtpZihpKHMpPyghZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKCJfIiE9PW4uY2hhckF0KDApJiZpKGVbbl0pKXt2YXIgYSxvPWgobikscz1bXTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKXMucHVzaChnKGUsbixyW2FdKSksbyE9PW4mJnMucHVzaChnKGUsbyxyW2FdKSk7Zm9yKGE9MDthPHMubGVuZ3RoO2ErKylkW3NbYV1dPTE7dChlW25dLHMpfX0oZixbImxheW91dCJdKSxmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpaWYoLTE9PT1uLmluZGV4T2YoImRlZmF1bHRzIikmJmkoZVtuXSkpe3ZhciBhPWcoZSxuLHIpO2RbYV0/dChlW25dLGEpOnUucHVzaCh7Y29kZToidW51c2VkIixwYXRoOmF9KX19KHMsImxheW91dCIpKTp1LnB1c2goe2NvZGU6ImxheW91dCJ9KSxpKGwpKXtmb3IodmFyIHkseD17fSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBfPXBbYl07eFt5PV8udHlwZV09KHhbeV18fDApKzEsXy5fZnVsbElucHV0Ll90ZW1wbGF0ZXx8dS5wdXNoKHtjb2RlOiJtaXNzaW5nIixpbmRleDpfLl9mdWxsSW5wdXQuaW5kZXgsdHJhY2VUeXBlOnl9KX1mb3IoeSBpbiBsKXt2YXIgdz1sW3ldLmxlbmd0aCxUPXhbeV18fDA7dz5UP3UucHVzaCh7Y29kZToidW51c2VkIix0cmFjZVR5cGU6eSx0ZW1wbGF0ZUNvdW50OncsZGF0YUNvdW50OlR9KTpUPncmJnUucHVzaCh7Y29kZToicmV1c2VkIix0cmFjZVR5cGU6eSx0ZW1wbGF0ZUNvdW50OncsZGF0YUNvdW50OlR9KX19ZWxzZSB1LnB1c2goe2NvZGU6ImRhdGEifSk7aWYoZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKCJfIiE9PW4uY2hhckF0KDApKXt2YXIgYT1lW25dLG89ZyhlLG4scik7aShhKT8oQXJyYXkuaXNBcnJheShlKSYmITE9PT1hLl90ZW1wbGF0ZSYmYS50ZW1wbGF0ZWl0ZW1uYW1lJiZ1LnB1c2goe2NvZGU6Im1pc3NpbmciLHBhdGg6byx0ZW1wbGF0ZWl0ZW1uYW1lOmEudGVtcGxhdGVpdGVtbmFtZX0pLHQoYSxvKSk6QXJyYXkuaXNBcnJheShhKSYmbShhKSYmdChhLG8pfX0oe2RhdGE6cCxsYXlvdXQ6Zn0sIiIpLHUubGVuZ3RoKXJldHVybiB1Lm1hcCh2KX19LHsiLi4vbGliIjo3NTAsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc5NSwiLi4vcGxvdHMvcGxvdHMiOjg2MiwiLi9wbG90X2NvbmZpZyI6Nzg2LCIuL3Bsb3Rfc2NoZW1hIjo3ODcsIi4vcGxvdF90ZW1wbGF0ZSI6Nzg4fV0sNzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL3Bsb3RfYXBpIiksYT10KCIuLi9wbG90cy9wbG90cyIpLG89dCgiLi4vbGliIikscz10KCIuLi9zbmFwc2hvdC9oZWxwZXJzIiksbD10KCIuLi9zbmFwc2hvdC90b3N2ZyIpLGM9dCgiLi4vc25hcHNob3Qvc3ZndG9pbWciKSx1PXQoIi4uL3ZlcnNpb24iKS52ZXJzaW9uLGg9e2Zvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicG5nIiwianBlZyIsIndlYnAiLCJzdmciLCJmdWxsLWpzb24iXSxkZmx0OiJwbmcifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNldEJhY2tncm91bmQ6e3ZhbFR5cGU6ImFueSIsZGZsdDohMX0saW1hZ2VEYXRhT25seTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX19O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGYscCxkO2Z1bmN0aW9uIGcodCl7cmV0dXJuISh0IGluIGUpfHxvLnZhbGlkYXRlKGVbdF0saFt0XSl9aWYoZT1lfHx7fSxvLmlzUGxhaW5PYmplY3QodCk/KHI9dC5kYXRhfHxbXSxmPXQubGF5b3V0fHx7fSxwPXQuY29uZmlnfHx7fSxkPXt9KToodD1vLmdldEdyYXBoRGl2KHQpLHI9by5leHRlbmREZWVwKFtdLHQuZGF0YSksZj1vLmV4dGVuZERlZXAoe30sdC5sYXlvdXQpLHA9dC5fY29udGV4dCxkPXQuX2Z1bGxMYXlvdXR8fHt9KSwhZygid2lkdGgiKSYmbnVsbCE9PWUud2lkdGh8fCFnKCJoZWlnaHQiKSYmbnVsbCE9PWUuaGVpZ2h0KXRocm93IG5ldyBFcnJvcigiSGVpZ2h0IGFuZCB3aWR0aCBzaG91bGQgYmUgcGl4ZWwgdmFsdWVzLiIpO2lmKCFnKCJmb3JtYXQiKSl0aHJvdyBuZXcgRXJyb3IoIkV4cG9ydCBmb3JtYXQgaXMgbm90ICIrby5qb2luMihoLmZvcm1hdC52YWx1ZXMsIiwgIiwiIG9yICIpKyIuIik7dmFyIG09e307ZnVuY3Rpb24gdih0LHIpe3JldHVybiBvLmNvZXJjZShlLG0saCx0LHIpfXZhciB5PXYoImZvcm1hdCIpLHg9digid2lkdGgiKSxiPXYoImhlaWdodCIpLF89digic2NhbGUiKSx3PXYoInNldEJhY2tncm91bmQiKSxUPXYoImltYWdlRGF0YU9ubHkiKSxrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2suc3R5bGUucG9zaXRpb249ImFic29sdXRlIixrLnN0eWxlLmxlZnQ9Ii01MDAwcHgiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoayk7dmFyIE09by5leHRlbmRGbGF0KHt9LGYpO3g/TS53aWR0aD14Om51bGw9PT1lLndpZHRoJiZuKGQud2lkdGgpJiYoTS53aWR0aD1kLndpZHRoKSxiP00uaGVpZ2h0PWI6bnVsbD09PWUuaGVpZ2h0JiZuKGQuaGVpZ2h0KSYmKE0uaGVpZ2h0PWQuaGVpZ2h0KTt2YXIgQT1vLmV4dGVuZEZsYXQoe30scCx7X2V4cG9ydGVkUGxvdDohMCxzdGF0aWNQbG90OiEwLHNldEJhY2tncm91bmQ6d30pLFM9cy5nZXRSZWRyYXdGdW5jKGspO2Z1bmN0aW9uIEUoKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCxzLmdldERlbGF5KGsuX2Z1bGxMYXlvdXQpKX0pKX1mdW5jdGlvbiBDKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LGUpe3ZhciByPWwoayx5LF8pLG49ay5fZnVsbExheW91dC53aWR0aCxoPWsuX2Z1bGxMYXlvdXQuaGVpZ2h0O2Z1bmN0aW9uIGYoKXtpLnB1cmdlKGspLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoayl9aWYoImZ1bGwtanNvbiI9PT15KXt2YXIgcD1hLmdyYXBoSnNvbihrLCExLCJrZWVwZGF0YSIsIm9iamVjdCIsITAsITApO3JldHVybiBwLnZlcnNpb249dSxwPUpTT04uc3RyaW5naWZ5KHApLGYoKSx0KFQ/cDpzLmVuY29kZUpTT04ocCkpfWlmKGYoKSwic3ZnIj09PXkpcmV0dXJuIHQoVD9yOnMuZW5jb2RlU1ZHKHIpKTt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtkLmlkPW8ucmFuZHN0cigpLGMoe2Zvcm1hdDp5LHdpZHRoOm4saGVpZ2h0Omgsc2NhbGU6XyxjYW52YXM6ZCxzdmc6cixwcm9taXNlOiEwfSkudGhlbih0KS5jYXRjaChlKX0pKX1yZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsZSl7aS5wbG90KGsscixNLEEpLnRoZW4oUykudGhlbihFKS50aGVuKEMpLnRoZW4oKGZ1bmN0aW9uKGUpe3QoZnVuY3Rpb24odCl7cmV0dXJuIFQ/dC5yZXBsYWNlKHMuSU1BR0VfVVJMX1BSRUZJWCwiIik6dH0oZSkpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtlKHQpfSkpfSkpfX0seyIuLi9saWIiOjc1MCwiLi4vcGxvdHMvcGxvdHMiOjg2MiwiLi4vc25hcHNob3QvaGVscGVycyI6ODg2LCIuLi9zbmFwc2hvdC9zdmd0b2ltZyI6ODg4LCIuLi9zbmFwc2hvdC90b3N2ZyI6ODkwLCIuLi92ZXJzaW9uIjoxMzQxLCIuL3Bsb3RfYXBpIjo3ODUsImZhc3QtaXNudW1lcmljIjoyNDF9XSw3OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90cy9wbG90cyIpLGE9dCgiLi9wbG90X3NjaGVtYSIpLG89dCgiLi9wbG90X2NvbmZpZyIpLmRmbHRDb25maWcscz1uLmlzUGxhaW5PYmplY3QsbD1BcnJheS5pc0FycmF5LGM9bi5pc0FycmF5T3JUeXBlZEFycmF5O2Z1bmN0aW9uIHUodCxlLHIsaSxhLG8pe289b3x8W107Zm9yKHZhciBoPU9iamVjdC5rZXlzKHQpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIHA9aFtmXTtpZigidHJhbnNmb3JtcyIhPT1wKXt2YXIgdj1vLnNsaWNlKCk7di5wdXNoKHApO3ZhciB5PXRbcF0seD1lW3BdLGI9bShyLHApLF89KGJ8fHt9KS52YWxUeXBlLHc9ImluZm9fYXJyYXkiPT09XyxUPSJjb2xvcnNjYWxlIj09PV8saz0oYnx8e30pLml0ZW1zO2lmKGcocixwKSlpZihzKHkpJiZzKHgpJiYiYW55IiE9PV8pdSh5LHgsYixpLGEsdik7ZWxzZSBpZih3JiZsKHkpKXt5Lmxlbmd0aD54Lmxlbmd0aCYmaS5wdXNoKGQoInVudXNlZCIsYSx2LmNvbmNhdCh4Lmxlbmd0aCkpKTt2YXIgTSxBLFMsRSxDLEw9eC5sZW5ndGgsUD1BcnJheS5pc0FycmF5KGspO2lmKFAmJihMPU1hdGgubWluKEwsay5sZW5ndGgpKSwyPT09Yi5kaW1lbnNpb25zKWZvcihBPTA7QTxMO0ErKylpZihsKHlbQV0pKXt5W0FdLmxlbmd0aD54W0FdLmxlbmd0aCYmaS5wdXNoKGQoInVudXNlZCIsYSx2LmNvbmNhdChBLHhbQV0ubGVuZ3RoKSkpO3ZhciBJPXhbQV0ubGVuZ3RoO2ZvcihNPTA7TTwoUD9NYXRoLm1pbihJLGtbQV0ubGVuZ3RoKTpJKTtNKyspUz1QP2tbQV1bTV06ayxFPXlbQV1bTV0sQz14W0FdW01dLG4udmFsaWRhdGUoRSxTKT9DIT09RSYmQyE9PStFJiZpLnB1c2goZCgiZHluYW1pYyIsYSx2LmNvbmNhdChBLE0pLEUsQykpOmkucHVzaChkKCJ2YWx1ZSIsYSx2LmNvbmNhdChBLE0pLEUpKX1lbHNlIGkucHVzaChkKCJhcnJheSIsYSx2LmNvbmNhdChBKSx5W0FdKSk7ZWxzZSBmb3IoQT0wO0E8TDtBKyspUz1QP2tbQV06ayxFPXlbQV0sQz14W0FdLG4udmFsaWRhdGUoRSxTKT9DIT09RSYmQyE9PStFJiZpLnB1c2goZCgiZHluYW1pYyIsYSx2LmNvbmNhdChBKSxFLEMpKTppLnB1c2goZCgidmFsdWUiLGEsdi5jb25jYXQoQSksRSkpfWVsc2UgaWYoYi5pdGVtcyYmIXcmJmwoeSkpe3ZhciB6LE8sRD1rW09iamVjdC5rZXlzKGspWzBdXSxSPVtdO2Zvcih6PTA7ejx4Lmxlbmd0aDt6Kyspe3ZhciBGPXhbel0uX2luZGV4fHx6O2lmKChPPXYuc2xpY2UoKSkucHVzaChGKSxzKHlbRl0pJiZzKHhbel0pKXtSLnB1c2goRik7dmFyIEI9eVtGXSxOPXhbel07cyhCKSYmITEhPT1CLnZpc2libGUmJiExPT09Ti52aXNpYmxlP2kucHVzaChkKCJpbnZpc2libGUiLGEsTykpOnUoQixOLEQsaSxhLE8pfX1mb3Ioej0wO3o8eS5sZW5ndGg7eisrKShPPXYuc2xpY2UoKSkucHVzaCh6KSxzKHlbel0pPy0xPT09Ui5pbmRleE9mKHopJiZpLnB1c2goZCgidW51c2VkIixhLE8pKTppLnB1c2goZCgib2JqZWN0IixhLE8seVt6XSkpfWVsc2Uhcyh5KSYmcyh4KT9pLnB1c2goZCgib2JqZWN0IixhLHYseSkpOmMoeSl8fCFjKHgpfHx3fHxUP3AgaW4gZT9uLnZhbGlkYXRlKHksYik/ImVudW1lcmF0ZWQiPT09Yi52YWxUeXBlJiYoYi5jb2VyY2VOdW1iZXImJnkhPT0reHx8eSE9PXgpJiZpLnB1c2goZCgiZHluYW1pYyIsYSx2LHkseCkpOmkucHVzaChkKCJ2YWx1ZSIsYSx2LHkpKTppLnB1c2goZCgidW51c2VkIixhLHYseSkpOmkucHVzaChkKCJhcnJheSIsYSx2LHkpKTtlbHNlIGkucHVzaChkKCJzY2hlbWEiLGEsdikpfX1yZXR1cm4gaX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPXQubGF5b3V0LmxheW91dEF0dHJpYnV0ZXMsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldLG89dC50cmFjZXNbYS50eXBlXSxzPW8ubGF5b3V0QXR0cmlidXRlcztzJiYoYS5zdWJwbG90P24uZXh0ZW5kRmxhdChyW28uYXR0cmlidXRlcy5zdWJwbG90LmRmbHRdLHMpOm4uZXh0ZW5kRmxhdChyLHMpKX1yZXR1cm4gcn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09ZSYmKGU9e30pO3ZhciByLGMsZj1hLmdldCgpLHA9W10sZz17X2NvbnRleHQ6bi5leHRlbmRGbGF0KHt9LG8pfTtsKHQpPyhnLmRhdGE9bi5leHRlbmREZWVwKFtdLHQpLHI9dCk6KGcuZGF0YT1bXSxyPVtdLHAucHVzaChkKCJhcnJheSIsImRhdGEiKSkpLHMoZSk/KGcubGF5b3V0PW4uZXh0ZW5kRGVlcCh7fSxlKSxjPWUpOihnLmxheW91dD17fSxjPXt9LGFyZ3VtZW50cy5sZW5ndGg+MSYmcC5wdXNoKGQoIm9iamVjdCIsImxheW91dCIpKSksaS5zdXBwbHlEZWZhdWx0cyhnKTtmb3IodmFyIG09Zy5fZnVsbERhdGEsdj1yLmxlbmd0aCx5PTA7eTx2O3krKyl7dmFyIHg9clt5XSxiPVsiZGF0YSIseV07aWYocyh4KSl7dmFyIF89bVt5XSx3PV8udHlwZSxUPWYudHJhY2VzW3ddLmF0dHJpYnV0ZXM7VC50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W3ddfSwhMT09PV8udmlzaWJsZSYmITEhPT14LnZpc2libGUmJnAucHVzaChkKCJpbnZpc2libGUiLGIpKSx1KHgsXyxULHAsYik7dmFyIGs9eC50cmFuc2Zvcm1zLE09Xy50cmFuc2Zvcm1zO2lmKGspe2woayl8fHAucHVzaChkKCJhcnJheSIsYixbInRyYW5zZm9ybXMiXSkpLGIucHVzaCgidHJhbnNmb3JtcyIpO2Zvcih2YXIgQT0wO0E8ay5sZW5ndGg7QSsrKXt2YXIgUz1bInRyYW5zZm9ybXMiLEFdLEU9a1tBXS50eXBlO2lmKHMoa1tBXSkpe3ZhciBDPWYudHJhbnNmb3Jtc1tFXT9mLnRyYW5zZm9ybXNbRV0uYXR0cmlidXRlczp7fTtDLnR5cGU9e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhmLnRyYW5zZm9ybXMpfSx1KGtbQV0sTVtBXSxDLHAsYixTKX1lbHNlIHAucHVzaChkKCJvYmplY3QiLGIsUykpfX19ZWxzZSBwLnB1c2goZCgib2JqZWN0IixiKSl9dmFyIEw9Zy5fZnVsbExheW91dCxQPWgoZixtKTtyZXR1cm4gdShjLEwsUCxwLCJsYXlvdXQiKSwwPT09cC5sZW5ndGg/dm9pZCAwOnB9O3ZhciBmPXtvYmplY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4oImxheW91dCI9PT10JiYiIj09PWU/IlRoZSBsYXlvdXQgYXJndW1lbnQiOiJkYXRhIj09PXRbMF0mJiIiPT09ZT8iVHJhY2UgIit0WzFdKyIgaW4gdGhlIGRhdGEgYXJndW1lbnQiOnAodCkrImtleSAiK2UpKyIgbXVzdCBiZSBsaW5rZWQgdG8gYW4gb2JqZWN0IGNvbnRhaW5lciJ9LGFycmF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJkYXRhIj09PXQ/IlRoZSBkYXRhIGFyZ3VtZW50IjpwKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIGFycmF5IGNvbnRhaW5lciJ9LHNjaGVtYTpmdW5jdGlvbih0LGUpe3JldHVybiBwKHQpKyJrZXkgIitlKyIgaXMgbm90IHBhcnQgb2YgdGhlIHNjaGVtYSJ9LHVudXNlZDpmdW5jdGlvbih0LGUscil7dmFyIG49cyhyKT8iY29udGFpbmVyIjoia2V5IjtyZXR1cm4gcCh0KStuKyIgIitlKyIgZGlkIG5vdCBnZXQgY29lcmNlZCJ9LGR5bmFtaWM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuW3AodCkrImtleSIsZSwiKHNldCB0byAnIityKyInKSIsImdvdCByZXNldCB0byIsIiciK24rIiciLCJkdXJpbmcgZGVmYXVsdHMuIl0uam9pbigiICIpfSxpbnZpc2libGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT9wKHQpKyJpdGVtICIrZToiVHJhY2UgIit0WzFdKSsiIGdvdCBkZWZhdWx0ZWQgdG8gYmUgbm90IHZpc2libGUifSx2YWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuW3AodCkrImtleSAiK2UsImlzIHNldCB0byBhbiBpbnZhbGlkIHZhbHVlICgiK3IrIikiXS5qb2luKCIgIil9fTtmdW5jdGlvbiBwKHQpe3JldHVybiBsKHQpPyJJbiBkYXRhIHRyYWNlICIrdFsxXSsiLCAiOiJJbiAiK3QrIiwgIn1mdW5jdGlvbiBkKHQsZSxyLGksYSl7dmFyIG8scztyPXJ8fCIiLGwoZSk/KG89ZVswXSxzPWVbMV0pOihvPWUscz1udWxsKTt2YXIgYz1mdW5jdGlvbih0KXtpZighbCh0KSlyZXR1cm4gU3RyaW5nKHQpO2Zvcih2YXIgZT0iIixyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07Im51bWJlciI9PXR5cGVvZiBuP2U9ZS5zdWJzdHIoMCxlLmxlbmd0aC0xKSsiWyIrbisiXSI6ZSs9bixyPHQubGVuZ3RoLTEmJihlKz0iLiIpfXJldHVybiBlfShyKSx1PWZbdF0oZSxjLGksYSk7cmV0dXJuIG4ubG9nKHUpLHtjb2RlOnQsY29udGFpbmVyOm8sdHJhY2U6cyxwYXRoOnIsYXN0cjpjLG1zZzp1fX1mdW5jdGlvbiBnKHQsZSl7dmFyIHI9eShlKSxuPXIua2V5TWludXNJZCxpPXIuaWQ7cmV0dXJuISEobiBpbiB0JiZ0W25dLl9pc1N1YnBsb3RPYmomJmkpfHxlIGluIHR9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBlIGluIHQ/dFtlXTp0W3koZSkua2V5TWludXNJZF19dmFyIHY9bi5jb3VudGVyUmVnZXgoIihbYS16XSspIik7ZnVuY3Rpb24geSh0KXt2YXIgZT10Lm1hdGNoKHYpO3JldHVybntrZXlNaW51c0lkOmUmJmVbMV0saWQ6ZSYmZVsyXX19fSx7Ii4uL2xpYiI6NzUwLCIuLi9wbG90cy9wbG90cyI6ODYyLCIuL3Bsb3RfY29uZmlnIjo3ODYsIi4vcGxvdF9zY2hlbWEiOjc4N31dLDc5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImFmdGVyYWxsIix2YWx1ZXM6WyJpbW1lZGlhdGUiLCJuZXh0IiwiYWZ0ZXJhbGwiXX0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmb3J3YXJkIiwicmV2ZXJzZSJdLGRmbHQ6ImZvcndhcmQifSxmcm9tY3VycmVudDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZnJhbWU6e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NTAwfSxyZWRyYXc6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMCxlZGl0VHlwZToibm9uZSJ9LGVhc2luZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY3ViaWMtaW4tb3V0Iix2YWx1ZXM6WyJsaW5lYXIiLCJxdWFkIiwiY3ViaWMiLCJzaW4iLCJleHAiLCJjaXJjbGUiLCJlbGFzdGljIiwiYmFjayIsImJvdW5jZSIsImxpbmVhci1pbiIsInF1YWQtaW4iLCJjdWJpYy1pbiIsInNpbi1pbiIsImV4cC1pbiIsImNpcmNsZS1pbiIsImVsYXN0aWMtaW4iLCJiYWNrLWluIiwiYm91bmNlLWluIiwibGluZWFyLW91dCIsInF1YWQtb3V0IiwiY3ViaWMtb3V0Iiwic2luLW91dCIsImV4cC1vdXQiLCJjaXJjbGUtb3V0IiwiZWxhc3RpYy1vdXQiLCJiYWNrLW91dCIsImJvdW5jZS1vdXQiLCJsaW5lYXItaW4tb3V0IiwicXVhZC1pbi1vdXQiLCJjdWJpYy1pbi1vdXQiLCJzaW4taW4tb3V0IiwiZXhwLWluLW91dCIsImNpcmNsZS1pbi1vdXQiLCJlbGFzdGljLWluLW91dCIsImJhY2staW4tb3V0IiwiYm91bmNlLWluLW91dCJdLGVkaXRUeXBlOiJub25lIn0sb3JkZXJpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxheW91dCBmaXJzdCIsInRyYWNlcyBmaXJzdCJdLGRmbHQ6ImxheW91dCBmaXJzdCIsZWRpdFR5cGU6Im5vbmUifX19fSx7fV0sNzk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGEsbyxzPXIubmFtZSxsPXIuaW5jbHVzaW9uQXR0cnx8InZpc2libGUiLGM9ZVtzXSx1PW4uaXNBcnJheU9yVHlwZWRBcnJheSh0W3NdKT90W3NdOltdLGg9ZVtzXT1bXSxmPWkuYXJyYXlUZW1wbGF0ZXIoZSxzLGwpO2ZvcihhPTA7YTx1Lmxlbmd0aDthKyspe3ZhciBwPXVbYV07bi5pc1BsYWluT2JqZWN0KHApP289Zi5uZXdJdGVtKHApOihvPWYubmV3SXRlbSh7fSkpW2xdPSExLG8uX2luZGV4PWEsITEhPT1vW2xdJiZyLmhhbmRsZUl0ZW1EZWZhdWx0cyhwLG8sZSxyKSxoLnB1c2gobyl9dmFyIGQ9Zi5kZWZhdWx0SXRlbXMoKTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKShvPWRbYV0pLl9pbmRleD1oLmxlbmd0aCxyLmhhbmRsZUl0ZW1EZWZhdWx0cyh7fSxvLGUscix7fSksaC5wdXNoKG8pO2lmKG4uaXNBcnJheU9yVHlwZWRBcnJheShjKSl7dmFyIGc9TWF0aC5taW4oYy5sZW5ndGgsaC5sZW5ndGgpO2ZvcihhPTA7YTxnO2ErKyluLnJlbGlua1ByaXZhdGVLZXlzKGhbYV0sY1thXSl9cmV0dXJuIGh9fSx7Ii4uL2xpYiI6NzUwLCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODh9XSw3OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10sZGZsdDoic2NhdHRlciIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLF9ub1RlbXBsYXRpbmc6ITB9LHZpc2libGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsImxlZ2VuZG9ubHkiXSxkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToic3R5bGUifSxsZWdlbmRncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJzdHlsZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9LG5hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InN0eWxlIn0sdWlkOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90IixhbmltOiEwfSxpZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIixhbmltOiEwfSxjdXN0b21kYXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1ldGE6e3ZhbFR5cGU6ImFueSIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHNlbGVjdGVkcG9pbnRzOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ0ZXh0IiwibmFtZSJdLGV4dHJhczpbImFsbCIsIm5vbmUiLCJza2lwIl0sYXJyYXlPazohMCxkZmx0OiJhbGwiLGVkaXRUeXBlOiJub25lIn0saG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsc3RyZWFtOnt0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZToiY2FsYyJ9LG1heHBvaW50czp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MWU0LGRmbHQ6NTAwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0cmFuc2Zvcm1zOntfaXNMaW5rZWRUb0FycmF5OiJ0cmFuc2Zvcm0iLGVkaXRUeXBlOiJjYWxjIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9fX0seyIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiOjY0Nn1dLDc5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLmRhdGVUaW1lMm1zLG89aS5pbmNyZW1lbnRNb250aCxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVBVkdNT05USDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7aWYoImRhdGUiIT09ZS50eXBlKXJldHVybiBpO3ZhciBsPXRbcisicGVyaW9kYWxpZ25tZW50Il07aWYoIWwpcmV0dXJuIGk7dmFyIGMsdT10W3IrInBlcmlvZCJdO2lmKG4odSkpe2lmKCh1PSt1KTw9MClyZXR1cm4gaX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdSYmIk0iPT09dS5jaGFyQXQoMCkpe3ZhciBoPSt1LnN1YnN0cmluZygxKTtpZighKGg+MCYmTWF0aC5yb3VuZChoKT09PWgpKXJldHVybiBpO2M9aH1mb3IodmFyIGY9ZS5jYWxlbmRhcixwPSJzdGFydCI9PT1sLGQ9ImVuZCI9PT1sLGc9dFtyKyJwZXJpb2QwIl0sbT1hKGcsZil8fDAsdj1bXSx5PWkubGVuZ3RoLHg9MDt4PHk7eCsrKXt2YXIgYixfLHcsVD1pW3hdO2lmKGMpe2ZvcihiPU1hdGgucm91bmQoKFQtbSkvKGMqcykpLHc9byhtLGMqYixmKTt3PlQ7KXc9byh3LC1jLGYpO2Zvcig7dzw9VDspdz1vKHcsYyxmKTtfPW8odywtYyxmKX1lbHNle2Zvcih3PW0rKGI9TWF0aC5yb3VuZCgoVC1tKS91KSkqdTt3PlQ7KXctPXU7Zm9yKDt3PD1UOyl3Kz11O189dy11fXZbeF09cD9fOmQ/dzooXyt3KS8yfXJldHVybiB2fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYiI6NzUwLCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sNzk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17eGF4aXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5YXhpczp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9fX0se31dLDc5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuRlBfU0FGRSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4sYT1bXSxvPWwoZSkscz1jKHQsZSksdT1zLm1pbixoPXMubWF4O2lmKDA9PT11Lmxlbmd0aHx8MD09PWgubGVuZ3RoKXJldHVybiBpLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTt2YXIgZj11WzBdLnZhbCxwPWhbMF0udmFsO2ZvcihyPTE7cjx1Lmxlbmd0aCYmZj09PXA7cisrKWY9TWF0aC5taW4oZix1W3JdLnZhbCk7Zm9yKHI9MTtyPGgubGVuZ3RoJiZmPT09cDtyKyspcD1NYXRoLm1heChwLGhbcl0udmFsKTt2YXIgZD0hMTtpZihlLnJhbmdlKXt2YXIgZz1pLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtkPWdbMV08Z1swXX0icmV2ZXJzZWQiPT09ZS5hdXRvcmFuZ2UmJihkPSEwLGUuYXV0b3JhbmdlPSEwKTt2YXIgbSx2LHkseCxiLF8sdz1lLnJhbmdlbW9kZSxUPSJ0b3plcm8iPT09dyxrPSJub25uZWdhdGl2ZSI9PT13LE09ZS5fbGVuZ3RoLEE9TS8xMCxTPWZ1bmN0aW9uKHQscil7dmFyIG49MDtpZihlLnJhbmdlYnJlYWtzKWZvcih2YXIgaT1lLmxvY2F0ZUJyZWFrcyh0LHIpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtuKz1vLm1heC1vLm1pbn1yZXR1cm4gbn0sRT0wO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspZm9yKG09dVtyXSxuPTA7bjxoLmxlbmd0aDtuKyspKF89KHY9aFtuXSkudmFsLW0udmFsLVMobS52YWwsdi52YWwpKT4wJiYoKGI9TS1vKG0pLW8odikpPkE/Xy9iPkUmJih5PW0seD12LEU9Xy9iKTpfL00+RSYmKHk9e3ZhbDptLnZhbCxwYWQ6MH0seD17dmFsOnYudmFsLHBhZDowfSxFPV8vTSkpO2lmKGY9PT1wKXt2YXIgQz1mLTEsTD1mKzE7aWYoVClpZigwPT09ZilhPVswLDFdO2Vsc2V7dmFyIFA9KGY+MD9oOnUpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxvKGUpKX0pLDApLEk9Zi8oMS1NYXRoLm1pbiguNSxQL00pKTthPWY+MD9bMCxJXTpbSSwwXX1lbHNlIGE9az9bTWF0aC5tYXgoMCxDKSxNYXRoLm1heCgxLEwpXTpbQyxMXX1lbHNlIFQ/KHkudmFsPj0wJiYoeT17dmFsOjAscGFkOjB9KSx4LnZhbDw9MCYmKHg9e3ZhbDowLHBhZDowfSkpOmsmJih5LnZhbC1FKm8oeSk8MCYmKHk9e3ZhbDowLHBhZDowfSkseC52YWw8PTAmJih4PXt2YWw6MSxwYWQ6MH0pKSxFPSh4LnZhbC15LnZhbC1TKG0udmFsLHYudmFsKSkvKE0tbyh5KS1vKHgpKSxhPVt5LnZhbC1FKm8oeSkseC52YWwrRSpvKHgpXTtyZXR1cm4gZCYmYS5yZXZlcnNlKCksaS5zaW1wbGVNYXAoYSxlLmwycnx8TnVtYmVyKX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQuX2xlbmd0aC8yMDtyZXR1cm4iZG9tYWluIj09PXQuY29uc3RyYWluJiZ0Ll9pbnB1dERvbWFpbiYmKGUqPSh0Ll9pbnB1dERvbWFpblsxXS10Ll9pbnB1dERvbWFpblswXSkvKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSksZnVuY3Rpb24odCl7cmV0dXJuIHQucGFkKyh0LmV4dHJhcGFkP2U6MCl9fWZ1bmN0aW9uIGModCxlKXt2YXIgcixuLGksYT1lLl9pZCxvPXQuX2Z1bGxEYXRhLHM9dC5fZnVsbExheW91dCxsPVtdLGM9W107ZnVuY3Rpb24gZih0LGUpe2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBvPXRbZVtyXV0scz0oby5fZXh0cmVtZXN8fHt9KVthXTtpZighMD09PW8udmlzaWJsZSYmcyl7Zm9yKG49MDtuPHMubWluLmxlbmd0aDtuKyspaT1zLm1pbltuXSx1KGwsaS52YWwsaS5wYWQse2V4dHJhcGFkOmkuZXh0cmFwYWR9KTtmb3Iobj0wO248cy5tYXgubGVuZ3RoO24rKylpPXMubWF4W25dLGgoYyxpLnZhbCxpLnBhZCx7ZXh0cmFwYWQ6aS5leHRyYXBhZH0pfX19cmV0dXJuIGYobyxlLl90cmFjZUluZGljZXMpLGYocy5hbm5vdGF0aW9uc3x8W10sZS5fYW5uSW5kaWNlc3x8W10pLGYocy5zaGFwZXN8fFtdLGUuX3NoYXBlSW5kaWNlc3x8W10pLHttaW46bCxtYXg6Y319ZnVuY3Rpb24gdSh0LGUscixuKXtmKHQsZSxyLG4sZCl9ZnVuY3Rpb24gaCh0LGUscixuKXtmKHQsZSxyLG4sZyl9ZnVuY3Rpb24gZih0LGUscixuLGkpe2Zvcih2YXIgYT1uLnRvemVybyxvPW4uZXh0cmFwYWQscz0hMCxsPTA7bDx0Lmxlbmd0aCYmcztsKyspe3ZhciBjPXRbbF07aWYoaShjLnZhbCxlKSYmYy5wYWQ+PXImJihjLmV4dHJhcGFkfHwhbykpe3M9ITE7YnJlYWt9aShlLGMudmFsKSYmYy5wYWQ8PXImJihvfHwhYy5leHRyYXBhZCkmJih0LnNwbGljZShsLDEpLGwtLSl9aWYocyl7dmFyIHU9YSYmMD09PWU7dC5wdXNoKHt2YWw6ZSxwYWQ6dT8wOnIsZXh0cmFwYWQ6IXUmJm99KX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbih0KSYmTWF0aC5hYnModCk8YX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24gZyh0LGUpe3JldHVybiB0Pj1lfWUuZXhwb3J0cz17Z2V0QXV0b1JhbmdlOnMsbWFrZVBhZEZuOmwsZG9BdXRvUmFuZ2U6ZnVuY3Rpb24odCxlKXtpZihlLnNldFNjYWxlKCksZS5hdXRvcmFuZ2Upe2UucmFuZ2U9cyh0LGUpLGUuX3I9ZS5yYW5nZS5zbGljZSgpLGUuX3JsPWkuc2ltcGxlTWFwKGUuX3IsZS5yMmwpO3ZhciByPWUuX2lucHV0LG49e307bltlLl9hdHRyKyIucmFuZ2UiXT1lLnJhbmdlLG5bZS5fYXR0cisiLmF1dG9yYW5nZSJdPWUuYXV0b3JhbmdlLG8uY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsdC5sYXlvdXQsdC5fZnVsbExheW91dC5fcHJlR1VJLG4pLHIucmFuZ2U9ZS5yYW5nZS5zbGljZSgpLHIuYXV0b3JhbmdlPWUuYXV0b3JhbmdlfXZhciBhPWUuX2FuY2hvckF4aXM7aWYoYSYmYS5yYW5nZXNsaWRlcil7dmFyIGw9YS5yYW5nZXNsaWRlcltlLl9uYW1lXTtsJiYiYXV0byI9PT1sLnJhbmdlbW9kZSYmKGwucmFuZ2U9cyh0LGUpKSxhLl9pbnB1dC5yYW5nZXNsaWRlcltlLl9uYW1lXT1pLmV4dGVuZEZsYXQoe30sbCl9fSxmaW5kRXh0cmVtZXM6ZnVuY3Rpb24odCxlLHIpe3J8fChyPXt9KTt0Ll9tfHx0LnNldFNjYWxlKCk7dmFyIGksbyxzLGwsYyxmLGQsZyxtLHY9W10seT1bXSx4PWUubGVuZ3RoLGI9ci5wYWRkZWR8fCExLF89ci50b3plcm8mJigibGluZWFyIj09PXQudHlwZXx8Ii0iPT09dC50eXBlKSx3PSJsb2ciPT09dC50eXBlLFQ9ITEsaz1yLnZwYWRMaW5lYXJpemVkfHwhMTtmdW5jdGlvbiBNKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIFQ9ITAsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KE51bWJlcih0W2VdfHwwKSwwKX07dmFyIGU9TWF0aC5tYXgoTnVtYmVyKHR8fDApLDApO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgQT1NKCh0Ll9tPjA/ci5wcGFkcGx1czpyLnBwYWRtaW51cyl8fHIucHBhZHx8MCksUz1NKCh0Ll9tPjA/ci5wcGFkbWludXM6ci5wcGFkcGx1cyl8fHIucHBhZHx8MCksRT1NKHIudnBhZHBsdXN8fHIudnBhZCksQz1NKHIudnBhZG1pbnVzfHxyLnZwYWQpO2lmKCFUKXtpZihnPTEvMCxtPS0xLzAsdylmb3IoaT0wO2k8eDtpKyspKG89ZVtpXSk8ZyYmbz4wJiYoZz1vKSxvPm0mJm88YSYmKG09byk7ZWxzZSBmb3IoaT0wO2k8eDtpKyspKG89ZVtpXSk8ZyYmbz4tYSYmKGc9byksbz5tJiZvPGEmJihtPW8pO2U9W2csbV0seD0yfXZhciBMPXt0b3plcm86XyxleHRyYXBhZDpifTtmdW5jdGlvbiBQKHIpe3M9ZVtyXSxuKHMpJiYoZj1BKHIpLGQ9UyhyKSxrPyhsPXQuYzJsKHMpLUMociksYz10LmMybChzKStFKHIpKTooZz1zLUMociksbT1zK0UociksdyYmZzxtLzEwJiYoZz1tLzEwKSxsPXQuYzJsKGcpLGM9dC5jMmwobSkpLF8mJihsPU1hdGgubWluKDAsbCksYz1NYXRoLm1heCgwLGMpKSxwKGwpJiZ1KHYsbCxkLEwpLHAoYykmJmgoeSxjLGYsTCkpfXZhciBJPU1hdGgubWluKDYseCk7Zm9yKGk9MDtpPEk7aSsrKVAoaSk7Zm9yKGk9eC0xO2k+PUk7aS0tKVAoaSk7cmV0dXJue21pbjp2LG1heDp5LG9wdHM6cn19LGNvbmNhdEV4dHJlbWVzOmN9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsImZhc3QtaXNudW1lcmljIjoyNDF9XSw3OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksZj10KCIuL2xheW91dF9hdHRyaWJ1dGVzIikscD10KCIuL2NsZWFuX3RpY2tzIiksZD10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksZz1kLk9ORU1BWFlFQVIsbT1kLk9ORUFWR1lFQVIsdj1kLk9ORU1JTllFQVIseT1kLk9ORU1BWFFVQVJURVIseD1kLk9ORUFWR1FVQVJURVIsYj1kLk9ORU1JTlFVQVJURVIsXz1kLk9ORU1BWE1PTlRILHc9ZC5PTkVBVkdNT05USCxUPWQuT05FTUlOTU9OVEgsaz1kLk9ORVdFRUssTT1kLk9ORURBWSxBPU0vMixTPWQuT05FSE9VUixFPWQuT05FTUlOLEM9ZC5PTkVTRUMsTD1kLk1JTlVTX1NJR04sUD1kLkJBRE5VTSxJPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSx6PUkuTUlEX1NISUZULE89SS5DQVBfU0hJRlQsRD1JLkxJTkVfU1BBQ0lORyxSPUkuT1BQT1NJVEVfU0lERSxGPWUuZXhwb3J0cz17fTtGLnNldENvbnZlcnQ9dCgiLi9zZXRfY29udmVydCIpO3ZhciBCPXQoIi4vYXhpc19hdXRvdHlwZSIpLE49dCgiLi9heGlzX2lkcyIpO0YuaWQybmFtZT1OLmlkMm5hbWUsRi5uYW1lMmlkPU4ubmFtZTJpZCxGLmNsZWFuSWQ9Ti5jbGVhbklkLEYubGlzdD1OLmxpc3QsRi5saXN0SWRzPU4ubGlzdElkcyxGLmdldEZyb21JZD1OLmdldEZyb21JZCxGLmdldEZyb21UcmFjZT1OLmdldEZyb21UcmFjZTt2YXIgaj10KCIuL2F1dG9yYW5nZSIpO0YuZ2V0QXV0b1JhbmdlPWouZ2V0QXV0b1JhbmdlLEYuZmluZEV4dHJlbWVzPWouZmluZEV4dHJlbWVzO2Z1bmN0aW9uIFUodCl7dmFyIGU9MWUtNCoodFsxXS10WzBdKTtyZXR1cm5bdFswXS1lLHRbMV0rZV19Ri5jb2VyY2VSZWY9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPW4uY2hhckF0KG4ubGVuZ3RoLTEpLGw9ci5fZnVsbExheW91dC5fc3VicGxvdHNbbysiYXhpcyJdLGM9bisicmVmIix1PXt9O3JldHVybiBpfHwoaT1sWzBdfHwoInN0cmluZyI9PXR5cGVvZiBhP2E6YVswXSkpLGF8fChhPWkpLGw9bC5jb25jYXQobC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0KyIgZG9tYWluIn0pKSksdVtjXT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmwuY29uY2F0KGE/InN0cmluZyI9PXR5cGVvZiBhP1thXTphOltdKSxkZmx0Oml9LHMuY29lcmNlKHQsZSx1LGMpfSxGLmdldFJlZlR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dDoicGFwZXIiPT09dD8icGFwZXIiOiJwaXhlbCI9PT10PyJwaXhlbCI6LyggZG9tYWluKSQvLnRlc3QodCk/ImRvbWFpbiI6InJhbmdlIn0sRi5jb2VyY2VQb3NpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8sbDtpZigicmFuZ2UiIT09Ri5nZXRSZWZUeXBlKG4pKW89cy5lbnN1cmVOdW1iZXIsbD1yKGksYSk7ZWxzZXt2YXIgYz1GLmdldEZyb21JZChlLG4pO2w9cihpLGE9Yy5mcmFjdGlvbjJyKGEpKSxvPWMuY2xlYW5Qb3N9dFtpXT1vKGwpfSxGLmNsZWFuUG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3JldHVybigicGFwZXIiPT09cnx8InBpeGVsIj09PXI/cy5lbnN1cmVOdW1iZXI6Ri5nZXRGcm9tSWQoZSxyKS5jbGVhblBvcykodCl9LEYucmVkcmF3Q29tcG9uZW50cz1mdW5jdGlvbih0LGUpe2U9ZXx8Ri5saXN0SWRzKHQpO3ZhciByPXQuX2Z1bGxMYXlvdXQ7ZnVuY3Rpb24gbihuLGksYSxzKXtmb3IodmFyIGw9by5nZXRDb21wb25lbnRNZXRob2QobixpKSxjPXt9LHU9MDt1PGUubGVuZ3RoO3UrKylmb3IodmFyIGg9cltGLmlkMm5hbWUoZVt1XSldW2FdLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIHA9aFtmXTtpZighY1twXSYmKGwodCxwKSxjW3BdPTEscykpcmV0dXJufX1uKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiLCJfYW5uSW5kaWNlcyIpLG4oInNoYXBlcyIsImRyYXdPbmUiLCJfc2hhcGVJbmRpY2VzIiksbigiaW1hZ2VzIiwiZHJhdyIsIl9pbWdJbmRpY2VzIiwhMCl9O3ZhciBWPUYuZ2V0RGF0YUNvbnZlcnNpb25zPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9IngiPT09cnx8InkiPT09cnx8InoiPT09cj9yOm47aWYoQXJyYXkuaXNBcnJheShhKSl7aWYoaT17dHlwZTpCKG4pLF9jYXRlZ29yaWVzOltdfSxGLnNldENvbnZlcnQoaSksImNhdGVnb3J5Ij09PWkudHlwZSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylpLmQyYyhuW29dKX1lbHNlIGk9Ri5nZXRGcm9tVHJhY2UodCxlLGEpO3JldHVybiBpP3tkMmM6aS5kMmMsYzJkOmkuYzJkfToiaWRzIj09PWE/e2QyYzpILGMyZDpIfTp7ZDJjOnEsYzJkOnF9fTtmdW5jdGlvbiBxKHQpe3JldHVybit0fWZ1bmN0aW9uIEgodCl7cmV0dXJuIFN0cmluZyh0KX1mdW5jdGlvbiBHKHQpe3JldHVybit0LnN1YnN0cmluZygxKX1GLmdldERhdGFUb0Nvb3JkRnVuYz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gVih0LGUscixuKS5kMmN9LEYuY291bnRlckxldHRlcj1mdW5jdGlvbih0KXt2YXIgZT10LmNoYXJBdCgwKTtyZXR1cm4ieCI9PT1lPyJ5IjoieSI9PT1lPyJ4Ijp2b2lkIDB9LEYubWluRHRpY2s9ZnVuY3Rpb24odCxlLHIsbil7LTE9PT1bImxvZyIsImNhdGVnb3J5IiwibXVsdGljYXRlZ29yeSJdLmluZGV4T2YodC50eXBlKSYmbj92b2lkIDA9PT10Ll9taW5EdGljaz8odC5fbWluRHRpY2s9ZSx0Ll9mb3JjZVRpY2swPXIpOnQuX21pbkR0aWNrJiYoKHQuX21pbkR0aWNrL2UrMWUtNiklMTwyZS02JiYoKHItdC5fZm9yY2VUaWNrMCkvZSUxKzEuMDAwMDAxKSUxPDJlLTY/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTooKGUvdC5fbWluRHRpY2srMWUtNiklMT4yZS02fHwoKHItdC5fZm9yY2VUaWNrMCkvdC5fbWluRHRpY2slMSsxLjAwMDAwMSklMT4yZS02KSYmKHQuX21pbkR0aWNrPTApKTp0Ll9taW5EdGljaz0wfSxGLnNhdmVSYW5nZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9Ri5saXN0KHQsIiIsITApLG49ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89dm9pZCAwPT09YS5fcmFuZ2VJbml0aWFsLHM9b3x8IShhLnJhbmdlWzBdPT09YS5fcmFuZ2VJbml0aWFsWzBdJiZhLnJhbmdlWzFdPT09YS5fcmFuZ2VJbml0aWFsWzFdKTsobyYmITE9PT1hLmF1dG9yYW5nZXx8ZSYmcykmJihhLl9yYW5nZUluaXRpYWw9YS5yYW5nZS5zbGljZSgpLG49ITApfXJldHVybiBufSxGLnNhdmVTaG93U3Bpa2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPUYubGlzdCh0LCIiLCEwKSxuPSExLGk9Im9uIixhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz12b2lkIDA9PT1vLl9zaG93U3Bpa2VJbml0aWFsLGw9c3x8IShvLnNob3dzcGlrZXM9PT1vLl9zaG93c3Bpa2VzKTsoc3x8ZSYmbCkmJihvLl9zaG93U3Bpa2VJbml0aWFsPW8uc2hvd3NwaWtlcyxuPSEwKSwib24iIT09aXx8by5zaG93c3Bpa2VzfHwoaT0ib2ZmIil9cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9aSxufSxGLmF1dG9CaW49ZnVuY3Rpb24odCxlLHIsbixhLG8pe3ZhciBsLGM9cy5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksdT1zLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZigiY2F0ZWdvcnkiPT09ZS50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpcmV0dXJue3N0YXJ0OmMtLjUsZW5kOnUrLjUsc2l6ZTpNYXRoLm1heCgxLE1hdGgucm91bmQobyl8fDEpLF9kYXRhU3Bhbjp1LWN9O2lmKGF8fChhPWUuY2FsZW5kYXIpLGw9ImxvZyI9PT1lLnR5cGU/e3R5cGU6ImxpbmVhciIscmFuZ2U6W2MsdV19Ont0eXBlOmUudHlwZSxyYW5nZTpzLnNpbXBsZU1hcChbYyx1XSxlLmMyciwwLGEpLGNhbGVuZGFyOmF9LEYuc2V0Q29udmVydChsKSxvPW8mJnAuZHRpY2sobyxsLnR5cGUpKWwuZHRpY2s9byxsLnRpY2swPXAudGljazAodm9pZCAwLGwudHlwZSxhKTtlbHNle3ZhciBoO2lmKHIpaD0odS1jKS9yO2Vsc2V7dmFyIGY9cy5kaXN0aW5jdFZhbHModCksZD1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGYubWluRGlmZikvTWF0aC5MTjEwKSksZz1kKnMucm91bmRVcChmLm1pbkRpZmYvZCxbLjksMS45LDQuOSw5LjldLCEwKTtoPU1hdGgubWF4KGcsMipzLnN0ZGV2KHQpL01hdGgucG93KHQubGVuZ3RoLG4/LjI1Oi40KSksaShoKXx8KGg9MSl9Ri5hdXRvVGlja3MobCxoKX12YXIgbSx2PWwuZHRpY2sseT1GLnRpY2tJbmNyZW1lbnQoRi50aWNrRmlyc3QobCksdiwicmV2ZXJzZSIsYSk7aWYoIm51bWJlciI9PXR5cGVvZiB2KW09KHk9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz0wLHM9MCxsPTAsYz0wO2Z1bmN0aW9uIHUoZSl7cmV0dXJuKDErMTAwKihlLXQpL3IuZHRpY2spJTEwMDwyfWZvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKWVbaF0lMT09MD9sKys6aShlW2hdKXx8YysrLHUoZVtoXSkmJm8rKyx1KGVbaF0rci5kdGljay8yKSYmcysrO3ZhciBmPWUubGVuZ3RoLWM7aWYobD09PWYmJiJkYXRlIiE9PXIudHlwZSlyLmR0aWNrPDE/dD1uLS41KnIuZHRpY2s6KHQtPS41KStyLmR0aWNrPG4mJih0Kz1yLmR0aWNrKTtlbHNlIGlmKHM8LjEqZiYmKG8+LjMqZnx8dShuKXx8dShhKSkpe3ZhciBwPXIuZHRpY2svMjt0Kz10K3A8bj9wOi1wfXJldHVybiB0fSh5LHQsbCxjLHUpKSsoMStNYXRoLmZsb29yKCh1LXkpL3YpKSp2O2Vsc2UgZm9yKCJNIj09PWwuZHRpY2suY2hhckF0KDApJiYoeT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXMuZmluZEV4YWN0RGF0ZXMoZSxpKTtpZihhLmV4YWN0RGF5cz4uOCl7dmFyIG89TnVtYmVyKHIuc3Vic3RyKDEpKTthLmV4YWN0WWVhcnM+LjgmJm8lMTI9PTA/dD1GLnRpY2tJbmNyZW1lbnQodCwiTTYiLCJyZXZlcnNlIikrMS41Kk06YS5leGFjdE1vbnRocz4uOD90PUYudGlja0luY3JlbWVudCh0LCJNMSIsInJldmVyc2UiKSsxNS41Kk06dC09QTt2YXIgbD1GLnRpY2tJbmNyZW1lbnQodCxyKTtpZihsPD1uKXJldHVybiBsfXJldHVybiB0fSh5LHQsdixjLGEpKSxtPXksMDttPD11OyltPUYudGlja0luY3JlbWVudChtLHYsITEsYSk7cmV0dXJue3N0YXJ0OmUuYzJyKHksMCxhKSxlbmQ6ZS5jMnIobSwwLGEpLHNpemU6dixfZGF0YVNwYW46dS1jfX0sRi5wcmVwVGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsLHZvaWQgMCx2b2lkIDAsZSk7aWYodC5fZHRpY2tJbml0PXQuZHRpY2ssdC5fdGljazBJbml0PXQudGljazAsImF1dG8iPT09dC50aWNrbW9kZXx8IXQuZHRpY2spe3ZhciBuLGE9dC5udGlja3M7YXx8KCJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT8obj10LnRpY2tmb250PzEuMioodC50aWNrZm9udC5zaXplfHwxMik6MTUsYT10Ll9sZW5ndGgvbik6KG49InkiPT09dC5faWQuY2hhckF0KDApPzQwOjgwLGE9cy5jb25zdHJhaW4odC5fbGVuZ3RoL24sNCw5KSsxKSwicmFkaWFsYXhpcyI9PT10Ll9uYW1lJiYoYSo9MikpLCJhcnJheSI9PT10LnRpY2ttb2RlJiYoYSo9MTAwKSx0Ll9yb3VnaERUaWNrPU1hdGguYWJzKHJbMV0tclswXSkvYSxGLmF1dG9UaWNrcyh0LHQuX3JvdWdoRFRpY2spLHQuX21pbkR0aWNrPjAmJnQuZHRpY2s8Mip0Ll9taW5EdGljayYmKHQuZHRpY2s9dC5fbWluRHRpY2ssdC50aWNrMD10Lmwycih0Ll9mb3JjZVRpY2swKSl9InBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGUmJmZ1bmN0aW9uKHQpe3ZhciBlO2Z1bmN0aW9uIHIoKXtyZXR1cm4hKGkodC5kdGljayl8fCJNIiE9PXQuZHRpY2suY2hhckF0KDApKX12YXIgbj1yKCksYT1GLmdldFRpY2tGb3JtYXQodCk7aWYoYSl7dmFyIG89dC5fZHRpY2tJbml0IT09dC5kdGljazsvJVtmTFFzU01YXS8udGVzdChhKXx8KC8lW0hJXS8udGVzdChhKT8oZT1TLG8mJiFuJiZ0LmR0aWNrPFMmJih0LmR0aWNrPVMpKTovJXAvLnRlc3QoYSk/KGU9QSxvJiYhbiYmdC5kdGljazxBJiYodC5kdGljaz1BKSk6LyVbQWFkZWp1d3hdLy50ZXN0KGEpPyhlPU0sbyYmIW4mJnQuZHRpY2s8TSYmKHQuZHRpY2s9TSkpOi8lW1VWV10vLnRlc3QoYSk/KGU9ayxvJiYhbiYmdC5kdGljazxrJiYodC5kdGljaz1rKSk6LyVbQmJtXS8udGVzdChhKT8oZT13LG8mJihuP0codC5kdGljayk8MTp0LmR0aWNrPFQpJiYodC5kdGljaz0iTTEiKSk6LyVbcV0vLnRlc3QoYSk/KGU9eCxvJiYobj9HKHQuZHRpY2spPDM6dC5kdGljazxiKSYmKHQuZHRpY2s9Ik0zIikpOi8lW1l5XS8udGVzdChhKSYmKGU9bSxvJiYobj9HKHQuZHRpY2spPDEyOnQuZHRpY2s8dikmJih0LmR0aWNrPSJNMTIiKSkpfShuPXIoKSkmJnQudGljazA9PT10Ll9kb3dUaWNrMCYmKHQudGljazA9dC5fcmF3VGljazApO3QuX2RlZmluZWREZWx0YT1lfSh0KSx0LnRpY2swfHwodC50aWNrMD0iZGF0ZSI9PT10LnR5cGU/IjIwMDAtMDEtMDEiOjApLCJkYXRlIj09PXQudHlwZSYmdC5kdGljazwuMSYmKHQuZHRpY2s9LjEpLHR0KHQpfSxGLmNhbGNUaWNrcz1mdW5jdGlvbih0LGUpe0YucHJlcFRpY2tzKHQsZSk7dmFyIHI9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCx2b2lkIDAsdm9pZCAwLGUpO2lmKCJhcnJheSI9PT10LnRpY2ttb2RlKXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRpY2t2YWxzLHI9dC50aWNrdGV4dCxuPW5ldyBBcnJheShlLmxlbmd0aCksaT1VKHMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpKSxhPU1hdGgubWluKGlbMF0saVsxXSksbz1NYXRoLm1heChpWzBdLGlbMV0pLGw9MDtBcnJheS5pc0FycmF5KHIpfHwocj1bXSk7dmFyIGM9ImNhdGVnb3J5Ij09PXQudHlwZT90LmQybF9ub2FkZDp0LmQybDsibG9nIj09PXQudHlwZSYmIkwiIT09U3RyaW5nKHQuZHRpY2spLmNoYXJBdCgwKSYmKHQuZHRpY2s9IkwiK01hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5taW4odC5yYW5nZVswXSx0LnJhbmdlWzFdKSktMSkpO2Zvcih2YXIgdT0wO3U8ZS5sZW5ndGg7dSsrKXt2YXIgaD1jKGVbdV0pO2g+YSYmaDxvJiYodm9pZCAwPT09clt1XT9uW2xdPUYudGlja1RleHQodCxoKTpuW2xdPWV0KHQsaCxTdHJpbmcoclt1XSkpLGwrKyl9bDxlLmxlbmd0aCYmbi5zcGxpY2UobCxlLmxlbmd0aC1sKTt0LnJhbmdlYnJlYWtzJiYobj1uLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHQubWFza0JyZWFrcyhlLngpIT09UH0pKSk7cmV0dXJuIG59KHQpO3ZhciBuPVUociksYT1uWzBdLG89blsxXSxsPXJbMV08clswXSxjPU1hdGgubWluKHJbMF0sclsxXSksdT1NYXRoLm1heChyWzBdLHJbMV0pLGg9ImxvZyI9PT10LnR5cGUmJiEoaSh0LmR0aWNrKXx8IkwiPT09dC5kdGljay5jaGFyQXQoMCkpLGY9InBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGU7aWYodC5fdG1pbj1GLnRpY2tGaXJzdCh0LGUpLHQuX3RtaW48YSE9PWwpcmV0dXJuW107ImNhdGVnb3J5IiE9PXQudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09dC50eXBlfHwobz1sP01hdGgubWF4KC0uNSxvKTpNYXRoLm1pbih0Ll9jYXRlZ29yaWVzLmxlbmd0aC0uNSxvKSk7dmFyIHA9dC5fdG1pbjt0LnJhbmdlYnJlYWtzJiZ0Ll90aWNrMEluaXQhPT10LnRpY2swJiYocD15dChwLHQpLGx8fChwPUYudGlja0luY3JlbWVudChwLHQuZHRpY2ssIWwsdC5jYWxlbmRhcikpKSxmJiYocD1GLnRpY2tJbmNyZW1lbnQocCx0LmR0aWNrLCFsLHQuY2FsZW5kYXIpKTtmb3IodmFyIGQsRT1NYXRoLm1heCgxZTMsdC5fbGVuZ3RofHwwKSxDPVtdLEw9bnVsbDtsP3A+PW86cDw9bztwPUYudGlja0luY3JlbWVudChwLHQuZHRpY2ssbCx0LmNhbGVuZGFyKSl7aWYodC5yYW5nZWJyZWFrcyYmIWwpe2lmKHA8YSljb250aW51ZTtpZih0Lm1hc2tCcmVha3MocCk9PT1QJiZ5dChwLHQpPj11KWJyZWFrfWlmKEMubGVuZ3RoPkV8fHA9PT1MKWJyZWFrO0w9cDt2YXIgST0hMTtoJiZwIT09KDB8cCkmJihJPSEwKSxDLnB1c2goe21pbm9yOkksdmFsdWU6cH0pfWlmKGYmJmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXS52YWx1ZSxhPW4sbz1uKzE7bjx0Lmxlbmd0aC0xPyhhPW4sbz1uKzEpOm4+MD8oYT1uLTEsbz1uKTooYT1uLG89bik7dmFyIHMsbD10W2FdLnZhbHVlLGM9dFtvXS52YWx1ZSx1PU1hdGguYWJzKGMtbCksaD1yfHx1LGY9MDtoPj12P2Y9dT49diYmdTw9Zz91Om06cj09PXgmJmg+PWI/Zj11Pj1iJiZ1PD15P3U6eDpoPj1UP2Y9dT49VCYmdTw9Xz91Onc6cj09PWsmJmg+PWs/Zj1rOmg+PU0/Zj1NOnI9PT1BJiZoPj1BP2Y9QTpyPT09UyYmaD49UyYmKGY9UyksZj49dSYmKGY9dSxzPSEwKTt2YXIgcD1pK2Y7aWYoZS5yYW5nZWJyZWFrcyYmZj4wKXtmb3IodmFyIGQ9MCxFPTA7RTw4NDtFKyspe3ZhciBDPShFKy41KS84NDtlLm1hc2tCcmVha3MoaSooMS1DKStDKnApIT09UCYmZCsrfShmKj1kLzg0KXx8KHRbbl0uZHJvcD0hMCkscyYmdT5rJiYoZj11KX0oZj4wfHwwPT09bikmJih0W25dLnBlcmlvZFg9aStmLzIpfX0oQyx0LHQuX2RlZmluZWREZWx0YSksdC5yYW5nZWJyZWFrcyl7dmFyIHo9InkiPT09dC5faWQuY2hhckF0KDApLE89MTsiYXV0byI9PT10LnRpY2ttb2RlJiYoTz10LnRpY2tmb250P3QudGlja2ZvbnQuc2l6ZToxMik7dmFyIEQ9TmFOO2ZvcihkPUMubGVuZ3RoLTE7ZD4tMTtkLS0paWYoQ1tkXS5kcm9wKUMuc3BsaWNlKGQsMSk7ZWxzZXtDW2RdLnZhbHVlPXl0KENbZF0udmFsdWUsdCk7dmFyIFI9dC5jMnAoQ1tkXS52YWx1ZSk7KHo/RD5SLU86RDxSK08pP0Muc3BsaWNlKGw/ZCsxOmQsMSk6RD1SfX12dCh0KSYmMzYwPT09TWF0aC5hYnMoclsxXS1yWzBdKSYmQy5wb3AoKSx0Ll90bWF4PShDW0MubGVuZ3RoLTFdfHx7fSkudmFsdWUsdC5fcHJldkRhdGVIZWFkPSIiLHQuX2luQ2FsY1RpY2tzPSEwO3ZhciBCLE4saj1bXTtmb3IoZD0wO2Q8Qy5sZW5ndGg7ZCsrKXt2YXIgVj1DW2RdLm1pbm9yLHE9Q1tkXS52YWx1ZTtCPUYudGlja1RleHQodCxxLCExLFYpLHZvaWQgMCE9PShOPUNbZF0ucGVyaW9kWCkmJihCLnBlcmlvZFg9TiwoTj51fHxOPGMpJiYoTj51JiYoQi5wZXJpb2RYPXUpLE48YyYmKEIucGVyaW9kWD1jKSxCLnRleHQ9IiAiLHQuX3ByZXZEYXRlSGVhZD0iIikpLGoucHVzaChCKX1yZXR1cm4gdC5faW5DYWxjVGlja3M9ITEsan07dmFyIFk9WzIsNSwxMF0sVz1bMSwyLDMsNiwxMl0sWj1bMSwyLDUsMTAsMTUsMzBdLFg9WzEsMiwzLDcsMTRdLEo9Wy0uMDQ2LDAsLjMwMSwuNDc3LC42MDIsLjY5OSwuNzc4LC44NDUsLjkwMywuOTU0LDFdLEs9Wy0uMzAxLDAsLjMwMSwuNjk5LDFdLFE9WzE1LDMwLDQ1LDkwLDE4MF07ZnVuY3Rpb24gJCh0LGUscil7cmV0dXJuIGUqcy5yb3VuZFVwKHQvZSxyKX1mdW5jdGlvbiB0dCh0KXt2YXIgZT10LmR0aWNrO2lmKHQuX3RpY2tleHBvbmVudD0wLGkoZSl8fCJzdHJpbmciPT10eXBlb2YgZXx8KGU9MSksImNhdGVnb3J5IiE9PXQudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09dC50eXBlfHwodC5fdGlja3JvdW5kPW51bGwpLCJkYXRlIj09PXQudHlwZSl7dmFyIHI9dC5yMmwodC50aWNrMCksbj10LmwycihyKS5yZXBsYWNlKC8oXi18aSkvZywiIiksYT1uLmxlbmd0aDtpZigiTSI9PT1TdHJpbmcoZSkuY2hhckF0KDApKWE+MTB8fCIwMS0wMSIhPT1uLnN1YnN0cig1KT90Ll90aWNrcm91bmQ9ImQiOnQuX3RpY2tyb3VuZD0rZS5zdWJzdHIoMSklMTI9PTA/InkiOiJtIjtlbHNlIGlmKGU+PU0mJmE8PTEwfHxlPj0xNSpNKXQuX3RpY2tyb3VuZD0iZCI7ZWxzZSBpZihlPj1FJiZhPD0xNnx8ZT49Uyl0Ll90aWNrcm91bmQ9Ik0iO2Vsc2UgaWYoZT49QyYmYTw9MTl8fGU+PUUpdC5fdGlja3JvdW5kPSJTIjtlbHNle3ZhciBvPXQubDJyKHIrZSkucmVwbGFjZSgvXi0vLCIiKS5sZW5ndGg7dC5fdGlja3JvdW5kPU1hdGgubWF4KGEsbyktMjAsdC5fdGlja3JvdW5kPDAmJih0Ll90aWNrcm91bmQ9NCl9fWVsc2UgaWYoaShlKXx8IkwiPT09ZS5jaGFyQXQoMCkpe3ZhciBzPXQucmFuZ2UubWFwKHQucjJkfHxOdW1iZXIpO2koZSl8fChlPU51bWJlcihlLnN1YnN0cigxKSkpLHQuX3RpY2tyb3VuZD0yLU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKy4wMSk7dmFyIGw9TWF0aC5tYXgoTWF0aC5hYnMoc1swXSksTWF0aC5hYnMoc1sxXSkpLGM9TWF0aC5mbG9vcihNYXRoLmxvZyhsKS9NYXRoLkxOMTArLjAxKSx1PXZvaWQgMD09PXQubWluZXhwb25lbnQ/Mzp0Lm1pbmV4cG9uZW50O01hdGguYWJzKGMpPnUmJihudCh0LmV4cG9uZW50Zm9ybWF0KSYmIWl0KGMpP3QuX3RpY2tleHBvbmVudD0zKk1hdGgucm91bmQoKGMtMSkvMyk6dC5fdGlja2V4cG9uZW50PWMpfWVsc2UgdC5fdGlja3JvdW5kPW51bGx9ZnVuY3Rpb24gZXQodCxlLHIpe3ZhciBuPXQudGlja2ZvbnR8fHt9O3JldHVybnt4OmUsZHg6MCxkeTowLHRleHQ6cnx8IiIsZm9udFNpemU6bi5zaXplLGZvbnQ6bi5mYW1pbHksZm9udENvbG9yOm4uY29sb3J9fUYuYXV0b1RpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4xMCkpfWlmKCJkYXRlIj09PXQudHlwZSl7dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyLDApO3ZhciBhPTIqZTtpZihhPm0pZS89bSxyPW4oMTApLHQuZHRpY2s9Ik0iKzEyKiQoZSxyLFkpO2Vsc2UgaWYoYT53KWUvPXcsdC5kdGljaz0iTSIrJChlLDEsVyk7ZWxzZSBpZihhPk0pe3QuZHRpY2s9JChlLE0sdC5faGFzRGF5T2ZXZWVrQnJlYWtzP1sxLDIsNywxNF06WCk7dmFyIG89Ri5nZXRUaWNrRm9ybWF0KHQpLGw9InBlcmlvZCI9PT10LnRpY2tsYWJlbG1vZGU7bCYmKHQuX3Jhd1RpY2swPXQudGljazApLC8lW3VWV10vLnRlc3Qobyk/dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyLDIpOnQudGljazA9cy5kYXRlVGljazAodC5jYWxlbmRhciwxKSxsJiYodC5fZG93VGljazA9dC50aWNrMCl9ZWxzZSBhPlM/dC5kdGljaz0kKGUsUyxXKTphPkU/dC5kdGljaz0kKGUsRSxaKTphPkM/dC5kdGljaz0kKGUsQyxaKToocj1uKDEwKSx0LmR0aWNrPSQoZSxyLFkpKX1lbHNlIGlmKCJsb2ciPT09dC50eXBlKXt0LnRpY2swPTA7dmFyIGM9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoZT4uNyl0LmR0aWNrPU1hdGguY2VpbChlKTtlbHNlIGlmKE1hdGguYWJzKGNbMV0tY1swXSk8MSl7dmFyIHU9MS41Kk1hdGguYWJzKChjWzFdLWNbMF0pL2UpO2U9TWF0aC5hYnMoTWF0aC5wb3coMTAsY1sxXSktTWF0aC5wb3coMTAsY1swXSkpL3Uscj1uKDEwKSx0LmR0aWNrPSJMIiskKGUscixZKX1lbHNlIHQuZHRpY2s9ZT4uMz8iRDIiOiJEMSJ9ZWxzZSJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT8odC50aWNrMD0wLHQuZHRpY2s9TWF0aC5jZWlsKE1hdGgubWF4KGUsMSkpKTp2dCh0KT8odC50aWNrMD0wLHI9MSx0LmR0aWNrPSQoZSxyLFEpKToodC50aWNrMD0wLHI9bigxMCksdC5kdGljaz0kKGUscixZKSk7aWYoMD09PXQuZHRpY2smJih0LmR0aWNrPTEpLCFpKHQuZHRpY2spJiYic3RyaW5nIiE9dHlwZW9mIHQuZHRpY2spe3ZhciBoPXQuZHRpY2s7dGhyb3cgdC5kdGljaz0xLCJheC5kdGljayBlcnJvcjogIitTdHJpbmcoaCl9fSxGLnRpY2tJbmNyZW1lbnQ9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89cj8tMToxO2lmKGkoZSkpcmV0dXJuIHMuaW5jcmVtZW50KHQsbyplKTt2YXIgbD1lLmNoYXJBdCgwKSxjPW8qTnVtYmVyKGUuc3Vic3RyKDEpKTtpZigiTSI9PT1sKXJldHVybiBzLmluY3JlbWVudE1vbnRoKHQsYyxhKTtpZigiTCI9PT1sKXJldHVybiBNYXRoLmxvZyhNYXRoLnBvdygxMCx0KStjKS9NYXRoLkxOMTA7aWYoIkQiPT09bCl7dmFyIHU9IkQyIj09PWU/SzpKLGg9dCsuMDEqbyxmPXMucm91bmRVcChzLm1vZChoLDEpLHUscik7cmV0dXJuIE1hdGguZmxvb3IoaCkrTWF0aC5sb2cobi5yb3VuZChNYXRoLnBvdygxMCxmKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhlKX0sRi50aWNrRmlyc3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnIybHx8TnVtYmVyLGE9cy5zaW1wbGVNYXAodC5yYW5nZSxyLHZvaWQgMCx2b2lkIDAsZSksbz1hWzFdPGFbMF0sbD1vP01hdGguZmxvb3I6TWF0aC5jZWlsLGM9VShhKVswXSx1PXQuZHRpY2ssaD1yKHQudGljazApO2lmKGkodSkpe3ZhciBmPWwoKGMtaCkvdSkqdStoO3JldHVybiJjYXRlZ29yeSIhPT10LnR5cGUmJiJtdWx0aWNhdGVnb3J5IiE9PXQudHlwZXx8KGY9cy5jb25zdHJhaW4oZiwwLHQuX2NhdGVnb3JpZXMubGVuZ3RoLTEpKSxmfXZhciBwPXUuY2hhckF0KDApLGQ9TnVtYmVyKHUuc3Vic3RyKDEpKTtpZigiTSI9PT1wKXtmb3IodmFyIGcsbSx2LHk9MCx4PWg7eTwxMDspe2lmKCgoZz1GLnRpY2tJbmNyZW1lbnQoeCx1LG8sdC5jYWxlbmRhcikpLWMpKih4LWMpPD0wKXJldHVybiBvP01hdGgubWluKHgsZyk6TWF0aC5tYXgoeCxnKTttPShjLSh4K2cpLzIpLyhnLXgpLHY9cCsoTWF0aC5hYnMoTWF0aC5yb3VuZChtKSl8fDEpKmQseD1GLnRpY2tJbmNyZW1lbnQoeCx2LG08MD8hbzpvLHQuY2FsZW5kYXIpLHkrK31yZXR1cm4gcy5lcnJvcigidGlja0ZpcnN0IGRpZCBub3QgY29udmVyZ2UiLHQpLHh9aWYoIkwiPT09cClyZXR1cm4gTWF0aC5sb2cobCgoTWF0aC5wb3coMTAsYyktaCkvZCkqZCtoKS9NYXRoLkxOMTA7aWYoIkQiPT09cCl7dmFyIGI9IkQyIj09PXU/SzpKLF89cy5yb3VuZFVwKHMubW9kKGMsMSksYixvKTtyZXR1cm4gTWF0aC5mbG9vcihjKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLF8pLDEpKS9NYXRoLkxOMTB9dGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKHUpfSxGLnRpY2tUZXh0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLG89ZXQodCxlKSxsPSJhcnJheSI9PT10LnRpY2ttb2RlLGM9cnx8bCx1PXQudHlwZSxoPSJjYXRlZ29yeSI9PT11P3QuZDJsX25vYWRkOnQuZDJsO2lmKGwmJkFycmF5LmlzQXJyYXkodC50aWNrdGV4dCkpe3ZhciBmPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLHA9KE1hdGguYWJzKGZbMV0tZlswXSktKHQuX2xCcmVha3N8fDApKS8xZTQ7Zm9yKGE9MDthPHQudGlja3RleHQubGVuZ3RoJiYhKE1hdGguYWJzKGUtaCh0LnRpY2t2YWxzW2FdKSk8cCk7YSsrKTtpZihhPHQudGlja3RleHQubGVuZ3RoKXJldHVybiBvLnRleHQ9U3RyaW5nKHQudGlja3RleHRbYV0pLG99ZnVuY3Rpb24gZChuKXtpZih2b2lkIDA9PT1uKXJldHVybiEwO2lmKHIpcmV0dXJuIm5vbmUiPT09bjt2YXIgaT17Zmlyc3Q6dC5fdG1pbixsYXN0OnQuX3RtYXh9W25dO3JldHVybiJhbGwiIT09biYmZSE9PWl9dmFyIGc9cj8ibmV2ZXIiOiJub25lIiE9PXQuZXhwb25lbnRmb3JtYXQmJmQodC5zaG93ZXhwb25lbnQpPyJoaWRlIjoiIjtpZigiZGF0ZSI9PT11P2Z1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXQuX3RpY2tyb3VuZCxvPXImJnQuaG92ZXJmb3JtYXR8fEYuZ2V0VGlja0Zvcm1hdCh0KTtuJiYoYT1pKGEpPzQ6e3k6Im0iLG06ImQiLGQ6Ik0iLE06IlMiLFM6NH1bYV0pO3ZhciBsLGM9cy5mb3JtYXREYXRlKGUueCxvLGEsdC5fZGF0ZUZvcm1hdCx0LmNhbGVuZGFyLHQuX2V4dHJhRm9ybWF0KSx1PWMuaW5kZXhPZigiXG4iKTstMSE9PXUmJihsPWMuc3Vic3RyKHUrMSksYz1jLnN1YnN0cigwLHUpKTtuJiYoIjAwOjAwOjAwIj09PWN8fCIwMDowMCI9PT1jPyhjPWwsbD0iIik6OD09PWMubGVuZ3RoJiYoYz1jLnJlcGxhY2UoLzowMCQvLCIiKSkpO2wmJihyPyJkIj09PWE/Yys9IiwgIitsOmM9bCsoYz8iLCAiK2M6IiIpOnQuX2luQ2FsY1RpY2tzJiZsPT09dC5fcHJldkRhdGVIZWFkfHwoYys9Ijxicj4iK2wsdC5fcHJldkRhdGVIZWFkPWwpKTtlLnRleHQ9Y30odCxvLHIsYyk6ImxvZyI9PT11P2Z1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89dC5kdGljayxsPWUueCxjPXQudGlja2Zvcm1hdCx1PSJzdHJpbmciPT10eXBlb2YgbyYmby5jaGFyQXQoMCk7Im5ldmVyIj09PWEmJihhPSIiKTtuJiYiTCIhPT11JiYobz0iTDMiLHU9IkwiKTtpZihjfHwiTCI9PT11KWUudGV4dD1hdChNYXRoLnBvdygxMCxsKSx0LGEsbik7ZWxzZSBpZihpKG8pfHwiRCI9PT11JiZzLm1vZChsKy4wMSwxKTwuMSl7dmFyIGg9TWF0aC5yb3VuZChsKSxmPU1hdGguYWJzKGgpLHA9dC5leHBvbmVudGZvcm1hdDsicG93ZXIiPT09cHx8bnQocCkmJml0KGgpPyhlLnRleHQ9MD09PWg/MToxPT09aD8iMTAiOiIxMDxzdXA+IisoaD4xPyIiOkwpK2YrIjwvc3VwPiIsZS5mb250U2l6ZSo9MS4yNSk6KCJlIj09PXB8fCJFIj09PXApJiZmPjI/ZS50ZXh0PSIxIitwKyhoPjA/IisiOkwpK2Y6KGUudGV4dD1hdChNYXRoLnBvdygxMCxsKSx0LCIiLCJmYWtlaG92ZXIiKSwiRDEiPT09byYmInkiPT09dC5faWQuY2hhckF0KDApJiYoZS5keS09ZS5mb250U2l6ZS82KSl9ZWxzZXtpZigiRCIhPT11KXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhvKTtlLnRleHQ9U3RyaW5nKE1hdGgucm91bmQoTWF0aC5wb3coMTAscy5tb2QobCwxKSkpKSxlLmZvbnRTaXplKj0uNzV9aWYoIkQxIj09PXQuZHRpY2spe3ZhciBkPVN0cmluZyhlLnRleHQpLmNoYXJBdCgwKTsiMCIhPT1kJiYiMSIhPT1kfHwoInkiPT09dC5faWQuY2hhckF0KDApP2UuZHgtPWUuZm9udFNpemUvNDooZS5keSs9ZS5mb250U2l6ZS8yLGUuZHgrPSh0LnJhbmdlWzFdPnQucmFuZ2VbMF0/MTotMSkqZS5mb250U2l6ZSoobDwwPy41Oi4yNSkpKX19KHQsbywwLGMsZyk6ImNhdGVnb3J5Ij09PXU/ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZS54KV07dm9pZCAwPT09ciYmKHI9IiIpO2UudGV4dD1TdHJpbmcocil9KHQsbyk6Im11bHRpY2F0ZWdvcnkiPT09dT9mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5yb3VuZChlLngpLGk9dC5fY2F0ZWdvcmllc1tuXXx8W10sYT12b2lkIDA9PT1pWzFdPyIiOlN0cmluZyhpWzFdKSxvPXZvaWQgMD09PWlbMF0/IiI6U3RyaW5nKGlbMF0pO3I/ZS50ZXh0PW8rIiAtICIrYTooZS50ZXh0PWEsZS50ZXh0Mj1vKX0odCxvLHIpOnZ0KHQpP2Z1bmN0aW9uKHQsZSxyLG4saSl7aWYoInJhZGlhbnMiIT09dC50aGV0YXVuaXR8fHIpZS50ZXh0PWF0KGUueCx0LGksbik7ZWxzZXt2YXIgYT1lLngvMTgwO2lmKDA9PT1hKWUudGV4dD0iMCI7ZWxzZXt2YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIE1hdGguYWJzKHQtZSk8PTFlLTZ9dmFyIHI9ZnVuY3Rpb24odCl7Zm9yKHZhciByPTE7IWUoTWF0aC5yb3VuZCh0KnIpL3IsdCk7KXIqPTEwO3JldHVybiByfSh0KSxuPXQqcixpPU1hdGguYWJzKGZ1bmN0aW9uIHQocixuKXtyZXR1cm4gZShuLDApP3I6dChuLHIlbil9KG4scikpO3JldHVybltNYXRoLnJvdW5kKG4vaSksTWF0aC5yb3VuZChyL2kpXX0oYSk7aWYob1sxXT49MTAwKWUudGV4dD1hdChzLmRlZzJyYWQoZS54KSx0LGksbik7ZWxzZXt2YXIgbD1lLng8MDsxPT09b1sxXT8xPT09b1swXT9lLnRleHQ9Ilx1MDNjMCI6ZS50ZXh0PW9bMF0rIlx1MDNjMCI6ZS50ZXh0PVsiPHN1cD4iLG9bMF0sIjwvc3VwPiIsIlx1MjA0NCIsIjxzdWI+IixvWzFdLCI8L3N1Yj4iLCJcdTAzYzAiXS5qb2luKCIiKSxsJiYoZS50ZXh0PUwrZS50ZXh0KX19fX0odCxvLHIsYyxnKTpmdW5jdGlvbih0LGUscixuLGkpeyJuZXZlciI9PT1pP2k9IiI6ImFsbCI9PT10LnNob3dleHBvbmVudCYmTWF0aC5hYnMoZS54L3QuZHRpY2spPDFlLTYmJihpPSJoaWRlIik7ZS50ZXh0PWF0KGUueCx0LGksbil9KHQsbywwLGMsZyksbnx8KHQudGlja3ByZWZpeCYmIWQodC5zaG93dGlja3ByZWZpeCkmJihvLnRleHQ9dC50aWNrcHJlZml4K28udGV4dCksdC50aWNrc3VmZml4JiYhZCh0LnNob3d0aWNrc3VmZml4KSYmKG8udGV4dCs9dC50aWNrc3VmZml4KSksImJvdW5kYXJpZXMiPT09dC50aWNrc29ufHx0LnNob3dkaXZpZGVycyl7dmFyIG09ZnVuY3Rpb24oZSl7dmFyIHI9dC5sMnAoZSk7cmV0dXJuIHI+PTAmJnI8PXQuX2xlbmd0aD9lOm51bGx9O28ueGJuZD1bbShvLngtLjUpLG0oby54K3QuZHRpY2stLjUpXX1yZXR1cm4gb30sRi5ob3ZlckxhYmVsVGV4dD1mdW5jdGlvbih0LGUscil7aWYociE9PVAmJnIhPT1lKXJldHVybiBGLmhvdmVyTGFiZWxUZXh0KHQsZSkrIiAtICIrRi5ob3ZlckxhYmVsVGV4dCh0LHIpO3ZhciBuPSJsb2ciPT09dC50eXBlJiZlPD0wLGk9Ri50aWNrVGV4dCh0LHQuYzJsKG4/LWU6ZSksImhvdmVyIikudGV4dDtyZXR1cm4gbj8wPT09ZT8iMCI6TCtpOml9O3ZhciBydD1bImYiLCJwIiwibiIsIlx1MDNiYyIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIl07ZnVuY3Rpb24gbnQodCl7cmV0dXJuIlNJIj09PXR8fCJCIj09PXR9ZnVuY3Rpb24gaXQodCl7cmV0dXJuIHQ+MTR8fHQ8LTE1fWZ1bmN0aW9uIGF0KHQsZSxyLG4pe3ZhciBhPXQ8MCxvPWUuX3RpY2tyb3VuZCxsPXJ8fGUuZXhwb25lbnRmb3JtYXR8fCJCIixjPWUuX3RpY2tleHBvbmVudCx1PUYuZ2V0VGlja0Zvcm1hdChlKSxoPWUuc2VwYXJhdGV0aG91c2FuZHM7aWYobil7dmFyIGY9e2V4cG9uZW50Zm9ybWF0OmwsbWluZXhwb25lbnQ6ZS5taW5leHBvbmVudCxkdGljazoibm9uZSI9PT1lLnNob3dleHBvbmVudD9lLmR0aWNrOmkodCkmJk1hdGguYWJzKHQpfHwxLHJhbmdlOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UucmFuZ2UubWFwKGUucjJkKTpbMCx0fHwxXX07dHQoZiksbz0oTnVtYmVyKGYuX3RpY2tyb3VuZCl8fDApKzQsYz1mLl90aWNrZXhwb25lbnQsZS5ob3ZlcmZvcm1hdCYmKHU9ZS5ob3ZlcmZvcm1hdCl9aWYodSlyZXR1cm4gZS5fbnVtRm9ybWF0KHUpKHQpLnJlcGxhY2UoLy0vZyxMKTt2YXIgcCxkPU1hdGgucG93KDEwLC1vKS8yO2lmKCJub25lIj09PWwmJihjPTApLCh0PU1hdGguYWJzKHQpKTxkKXQ9IjAiLGE9ITE7ZWxzZXtpZih0Kz1kLGMmJih0Kj1NYXRoLnBvdygxMCwtYyksbys9YyksMD09PW8pdD1TdHJpbmcoTWF0aC5mbG9vcih0KSk7ZWxzZSBpZihvPDApe3Q9KHQ9U3RyaW5nKE1hdGgucm91bmQodCkpKS5zdWJzdHIoMCx0Lmxlbmd0aCtvKTtmb3IodmFyIGc9bztnPDA7ZysrKXQrPSIwIn1lbHNle3ZhciBtPSh0PVN0cmluZyh0KSkuaW5kZXhPZigiLiIpKzE7bSYmKHQ9dC5zdWJzdHIoMCxtK28pLnJlcGxhY2UoL1wuPzArJC8sIiIpKX10PXMubnVtU2VwYXJhdGUodCxlLl9zZXBhcmF0b3JzLGgpfWMmJiJoaWRlIiE9PWwmJihudChsKSYmaXQoYykmJihsPSJwb3dlciIpLHA9YzwwP0wrLWM6InBvd2VyIiE9PWw/IisiK2M6U3RyaW5nKGMpLCJlIj09PWx8fCJFIj09PWw/dCs9bCtwOiJwb3dlciI9PT1sP3QrPSJceGQ3MTA8c3VwPiIrcCsiPC9zdXA+IjoiQiI9PT1sJiY5PT09Yz90Kz0iQiI6bnQobCkmJih0Kz1ydFtjLzMrNV0pKTtyZXR1cm4gYT9MK3Q6dH1mdW5jdGlvbiBvdCh0LGUpe2Zvcih2YXIgcj1bXSxuPXt9LGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTtuW2EudGV4dDJdP25bYS50ZXh0Ml0ucHVzaChhLngpOm5bYS50ZXh0Ml09W2EueF19Zm9yKHZhciBvIGluIG4pci5wdXNoKGV0KHQscy5pbnRlcnAobltvXSwuNSksbykpO3JldHVybiByfWZ1bmN0aW9uIHN0KHQpe3JldHVyblt0LnRleHQsdC54LHQuYXhJbmZvLHQuZm9udCx0LmZvbnRTaXplLHQuZm9udENvbG9yXS5qb2luKCJfIil9ZnVuY3Rpb24gbHQodCl7dmFyIGU9dC50aXRsZS5mb250LnNpemUscj0odC50aXRsZS50ZXh0Lm1hdGNoKGwuQlJfVEFHX0FMTCl8fFtdKS5sZW5ndGg7cmV0dXJuIHQudGl0bGUuaGFzT3duUHJvcGVydHkoInN0YW5kb2ZmIik/cj9lKihPK3IqRCk6ZSpPOnI/ZSoocisxKSpEOmV9ZnVuY3Rpb24gY3QodCxlKXt2YXIgcj10LmwycChlKTtyZXR1cm4gcj4xJiZyPHQuX2xlbmd0aC0xfWZ1bmN0aW9uIHV0KHQpe3ZhciBlPW4uc2VsZWN0KHQpLHI9ZS5zZWxlY3QoIi50ZXh0LW1hdGgtZ3JvdXAiKTtyZXR1cm4gci5lbXB0eSgpP2Uuc2VsZWN0KCJ0ZXh0Iik6cn1mdW5jdGlvbiBodCh0KXtyZXR1cm4gdC5faWQrIi5hdXRvbWFyZ2luIn1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gaHQodCkrIi5taXJyb3IifWZ1bmN0aW9uIHB0KHQpe3JldHVybiB0Ll9pZCsiLnJhbmdlc2xpZGVyIn1mdW5jdGlvbiBkdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKS0xPT09dC5pbmRleE9mKGVbcl0pJiZ0LnB1c2goZVtyXSl9ZnVuY3Rpb24gZ3QodCxlLHIpe3ZhciBuLGksYT1bXSxvPVtdLGw9dC5sYXlvdXQ7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylhLnB1c2goRi5nZXRGcm9tSWQodCxlW25dKSk7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylvLnB1c2goRi5nZXRGcm9tSWQodCxyW25dKSk7dmFyIGM9T2JqZWN0LmtleXMoZiksdT1bImFuY2hvciIsImRvbWFpbiIsIm92ZXJsYXlpbmciLCJwb3NpdGlvbiIsInNpZGUiLCJ0aWNrYW5nbGUiLCJlZGl0VHlwZSJdLGg9WyJsaW5lYXIiLCJsb2ciXTtmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgcD1jW25dLGQ9YVswXVtwXSxnPW9bMF1bcF0sbT0hMCx2PSExLHk9ITE7aWYoIl8iIT09cC5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBkJiYtMT09PXUuaW5kZXhPZihwKSl7Zm9yKGk9MTtpPGEubGVuZ3RoJiZtO2krKyl7dmFyIHg9YVtpXVtwXTsidHlwZSI9PT1wJiYtMSE9PWguaW5kZXhPZihkKSYmLTEhPT1oLmluZGV4T2YoeCkmJmQhPT14P3Y9ITA6eCE9PWQmJihtPSExKX1mb3IoaT0xO2k8by5sZW5ndGgmJm07aSsrKXt2YXIgYj1vW2ldW3BdOyJ0eXBlIj09PXAmJi0xIT09aC5pbmRleE9mKGcpJiYtMSE9PWguaW5kZXhPZihiKSYmZyE9PWI/eT0hMDpvW2ldW3BdIT09ZyYmKG09ITEpfW0mJih2JiYobFthWzBdLl9uYW1lXS50eXBlPSJsaW5lYXIiKSx5JiYobFtvWzBdLl9uYW1lXS50eXBlPSJsaW5lYXIiKSxtdChsLHAsYSxvLHQuX2Z1bGxMYXlvdXQuX2RmbHRUaXRsZSkpfX1mb3Iobj0wO248dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucy5sZW5ndGg7bisrKXt2YXIgXz10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zW25dOy0xIT09ZS5pbmRleE9mKF8ueHJlZikmJi0xIT09ci5pbmRleE9mKF8ueXJlZikmJnMuc3dhcEF0dHJzKGwuYW5ub3RhdGlvbnNbbl0sWyI/Il0pfX1mdW5jdGlvbiBtdCh0LGUscixuLGkpe3ZhciBhLG89cy5uZXN0ZWRQcm9wZXJ0eSxsPW8odFtyWzBdLl9uYW1lXSxlKS5nZXQoKSxjPW8odFtuWzBdLl9uYW1lXSxlKS5nZXQoKTtmb3IoInRpdGxlIj09PWUmJihsJiZsLnRleHQ9PT1pLngmJihsLnRleHQ9aS55KSxjJiZjLnRleHQ9PT1pLnkmJihjLnRleHQ9aS54KSksYT0wO2E8ci5sZW5ndGg7YSsrKW8odCxyW2FdLl9uYW1lKyIuIitlKS5zZXQoYyk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylvKHQsblthXS5fbmFtZSsiLiIrZSkuc2V0KGwpfWZ1bmN0aW9uIHZ0KHQpe3JldHVybiJhbmd1bGFyYXhpcyI9PT10Ll9pZH1mdW5jdGlvbiB5dCh0LGUpe2Zvcih2YXIgcj1lLl9yYW5nZWJyZWFrcy5sZW5ndGgsbj0wO248cjtuKyspe3ZhciBpPWUuX3JhbmdlYnJlYWtzW25dO2lmKHQ+PWkubWluJiZ0PGkubWF4KXJldHVybiBpLm1heH1yZXR1cm4gdH1GLmdldFRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbDtmdW5jdGlvbiBjKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdD90Ok51bWJlcih0LnJlcGxhY2UoIk0iLCIiKSkqd31mdW5jdGlvbiB1KHQsZSl7dmFyIHI9WyJMIiwiRCJdO2lmKHR5cGVvZiB0PT10eXBlb2YgZSl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0LWU7dmFyIG49ci5pbmRleE9mKHQuY2hhckF0KDApKSxpPXIuaW5kZXhPZihlLmNoYXJBdCgwKSk7cmV0dXJuIG49PT1pP051bWJlcih0LnJlcGxhY2UoLyhMfEQpL2csIiIpKS1OdW1iZXIoZS5yZXBsYWNlKC8oTHxEKS9nLCIiKSk6bi1pfXJldHVybiJudW1iZXIiPT10eXBlb2YgdD8xOi0xfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1udWxsPT09ZVswXSxuPW51bGw9PT1lWzFdLGk9dSh0LGVbMF0pPj0wLGE9dSh0LGVbMV0pPD0wO3JldHVybihyfHxpKSYmKG58fGEpfWlmKHQudGlja2Zvcm1hdHN0b3BzJiZ0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg+MClzd2l0Y2godC50eXBlKXtjYXNlImRhdGUiOmNhc2UibGluZWFyIjpmb3IoZT0wO2U8dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO2UrKylpZigobj10LnRpY2tmb3JtYXRzdG9wc1tlXSkuZW5hYmxlZCYmKGk9dC5kdGljayxhPW4uZHRpY2tyYW5nZSxvPXZvaWQgMCxzPXZvaWQgMCxsPXZvaWQgMCxvPWN8fGZ1bmN0aW9uKHQpe3JldHVybiB0fSxzPWFbMF0sbD1hWzFdLCghcyYmIm51bWJlciIhPXR5cGVvZiBzfHxvKHMpPD1vKGkpKSYmKCFsJiYibnVtYmVyIiE9dHlwZW9mIGx8fG8obCk+PW8oaSkpKSl7cj1uO2JyZWFrfWJyZWFrO2Nhc2UibG9nIjpmb3IoZT0wO2U8dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO2UrKylpZigobj10LnRpY2tmb3JtYXRzdG9wc1tlXSkuZW5hYmxlZCYmaCh0LmR0aWNrLG4uZHRpY2tyYW5nZSkpe3I9bjticmVha319cmV0dXJuIHI/ci52YWx1ZTp0LnRpY2tmb3JtYXR9LEYuZ2V0U3VicGxvdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cyxuPXIuY2FydGVzaWFuLmNvbmNhdChyLmdsMmR8fFtdKSxpPWU/Ri5maW5kU3VicGxvdHNXaXRoQXhpcyhuLGUpOm47cmV0dXJuIGkuc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LnN1YnN0cigxKS5zcGxpdCgieSIpLG49ZS5zdWJzdHIoMSkuc3BsaXQoInkiKTtyZXR1cm4gclswXT09PW5bMF0/K3JbMV0tK25bMV06K3JbMF0tK25bMF19KSksaX0sRi5maW5kU3VicGxvdHNXaXRoQXhpcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgUmVnRXhwKCJ4Ij09PWUuX2lkLmNoYXJBdCgwKT8iXiIrZS5faWQrInkiOmUuX2lkKyIkIiksbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07ci50ZXN0KGEpJiZuLnB1c2goYSl9cmV0dXJuIG59LEYubWFrZUNsaXBQYXRocz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKCFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpe3ZhciByLGksYT17X29mZnNldDowLF9sZW5ndGg6ZS53aWR0aCxfaWQ6IiJ9LG89e19vZmZzZXQ6MCxfbGVuZ3RoOmUuaGVpZ2h0LF9pZDoiIn0scz1GLmxpc3QodCwieCIsITApLGw9Ri5saXN0KHQsInkiLCEwKSxjPVtdO2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspZm9yKGMucHVzaCh7eDpzW3JdLHk6b30pLGk9MDtpPGwubGVuZ3RoO2krKykwPT09ciYmYy5wdXNoKHt4OmEseTpsW2ldfSksYy5wdXNoKHt4OnNbcl0seTpsW2ldfSk7dmFyIHU9ZS5fY2xpcHMuc2VsZWN0QWxsKCIuYXhlc2NsaXAiKS5kYXRhKGMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnguX2lkK3QueS5faWR9KSk7dS5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJheGVzY2xpcCIsITApLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuImNsaXAiK2UuX3VpZCt0LnguX2lkK3QueS5faWR9KSkuYXBwZW5kKCJyZWN0IiksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3QoInJlY3QiKS5hdHRyKHt4OnQueC5fb2Zmc2V0fHwwLHk6dC55Ll9vZmZzZXR8fDAsd2lkdGg6dC54Ll9sZW5ndGh8fDEsaGVpZ2h0OnQueS5fbGVuZ3RofHwxfSl9KSl9fSxGLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQ7InJlZHJhdyI9PT1lJiZuLl9wYXBlci5zZWxlY3RBbGwoImcuc3VicGxvdCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1uLl9wbG90c1tlXSxpPXIueGF4aXMsYT1yLnlheGlzO3IueGF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2kuX2lkKyJ0aWNrIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIrYS5faWQrInRpY2siKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsidGljazIiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsidGljazIiKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsiZGl2aWRlciIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJkaXZpZGVyIikucmVtb3ZlKCksci5ncmlkbGF5ZXImJnIuZ3JpZGxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLHIuemVyb2xpbmVsYXllciYmci56ZXJvbGluZWxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoIi5nLSIraS5faWQrInRpdGxlIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdCgiLmctIithLl9pZCsidGl0bGUiKS5yZW1vdmUoKX0pKTt2YXIgaT1lJiYicmVkcmF3IiE9PWU/ZTpGLmxpc3RJZHModCk7cmV0dXJuIHMuc3luY09yQXN5bmMoaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe2lmKGUpe3ZhciBuPUYuZ2V0RnJvbUlkKHQsZSksaT1GLmRyYXdPbmUodCxuLHIpO3JldHVybiBuLl9yPW4ucmFuZ2Uuc2xpY2UoKSxuLl9ybD1zLnNpbXBsZU1hcChuLl9yLG4ucjJsKSxpfX19KSkpfSxGLmRyYXdPbmU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbDtyPXJ8fHt9LGUuc2V0U2NhbGUoKTt2YXIgZj10Ll9mdWxsTGF5b3V0LHA9ZS5faWQsZD1wLmNoYXJBdCgwKSxnPUYuY291bnRlckxldHRlcihwKSxtPWYuX3Bsb3RzW2UuX21haW5TdWJwbG90XTtpZihtKXt2YXIgdj1tW2QrImF4aXNsYXllciJdLHk9ZS5fbWFpbkxpbmVQb3NpdGlvbix4PWUuX21haW5NaXJyb3JQb3NpdGlvbixiPWUuX3ZhbHM9Ri5jYWxjVGlja3MoZSksXz1bZS5taXJyb3IseSx4XS5qb2luKCJfIik7Zm9yKG49MDtuPGIubGVuZ3RoO24rKyliW25dLmF4SW5mbz1fO2UuX3NlbGVjdGlvbnM9e30sZS5fdGlja0FuZ2xlcyYmKGUuX3ByZXZUaWNrQW5nbGVzPWUuX3RpY2tBbmdsZXMpLGUuX3RpY2tBbmdsZXM9e30sZS5fZGVwdGg9bnVsbDt2YXIgdz17fTtpZihlLnZpc2libGUpe3ZhciBULGssTT1GLm1ha2VUcmFuc0ZuKGUpLEE9InBlcmlvZCI9PT1lLnRpY2tsYWJlbG1vZGU/Ri5tYWtlVHJhbnNQZXJpb2RGbihlKTpGLm1ha2VUcmFuc0ZuKGUpO2lmKCJib3VuZGFyaWVzIj09PWUudGlja3Nvbil7dmFyIFM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdLGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnhibmRbZV07bnVsbCE9PXImJm4ucHVzaChzLmV4dGVuZEZsYXQoe30sdCx7eDpyfSkpfTtpZihlLmxlbmd0aCl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpKGVbcl0sMCk7aShlW3ItMV0sMSl9cmV0dXJuIG59KDAsYik7az1GLmNsaXBFbmRzKGUsUyksVD0iaW5zaWRlIj09PWUudGlja3M/azpTfWVsc2Ugaz1GLmNsaXBFbmRzKGUsYiksVD0iaW5zaWRlIj09PWUudGlja3M/azpiO3ZhciBFPWUuX2dyaWRWYWxzPWssQz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXSxhPWUubGVuZ3RoJiZlW2UubGVuZ3RoLTFdLng8ZVswXS54LG89ZnVuY3Rpb24odCxlKXt2YXIgcj10LnhibmRbZV07bnVsbCE9PXImJmkucHVzaChzLmV4dGVuZEZsYXQoe30sdCx7eDpyfSkpfTtpZih0LnNob3dkaXZpZGVycyYmZS5sZW5ndGgpe2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBsPWVbcl07bC50ZXh0MiE9PW4mJm8obCxhPzE6MCksbj1sLnRleHQyfW8oZVtyLTFdLGE/MDoxKX1yZXR1cm4gaX0oZSxiKTtpZighZi5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgTD1lLl9zdWJwbG90c1dpdGgsUD17fTtmb3Iobj0wO248TC5sZW5ndGg7bisrKXtpPUxbbl07dmFyIEk9KGw9Zi5fcGxvdHNbaV0pW2crImF4aXMiXSx6PUkuX21haW5BeGlzLl9pZDtpZighUFt6XSl7UFt6XT0xO3ZhciBPPSJ4Ij09PWQ/Ik0wLCIrSS5fb2Zmc2V0KyJ2IitJLl9sZW5ndGg6Ik0iK0kuX29mZnNldCsiLDBoIitJLl9sZW5ndGg7Ri5kcmF3R3JpZCh0LGUse3ZhbHM6RSxjb3VudGVyQXhpczpJLGxheWVyOmwuZ3JpZGxheWVyLnNlbGVjdCgiLiIrcCkscGF0aDpPLHRyYW5zRm46TX0pLEYuZHJhd1plcm9MaW5lKHQsZSx7Y291bnRlckF4aXM6SSxsYXllcjpsLnplcm9saW5lbGF5ZXIscGF0aDpPLHRyYW5zRm46TX0pfX19dmFyIEI9Ri5nZXRUaWNrU2lnbnMoZSksTj1bXTtpZihlLnRpY2tzKXt2YXIgaixVLFYscT1GLm1ha2VUaWNrUGF0aChlLHksQlsyXSk7aWYoZS5fYW5jaG9yQXhpcyYmZS5taXJyb3ImJiEwIT09ZS5taXJyb3I/KGo9Ri5tYWtlVGlja1BhdGgoZSx4LEJbM10pLFU9cStqKTooaj0iIixVPXEpLGUuc2hvd2RpdmlkZXJzJiYib3V0c2lkZSI9PT1lLnRpY2tzJiYiYm91bmRhcmllcyI9PT1lLnRpY2tzb24pe3ZhciBIPXt9O2ZvcihuPTA7bjxDLmxlbmd0aDtuKyspSFtDW25dLnhdPTE7Vj1mdW5jdGlvbih0KXtyZXR1cm4gSFt0LnhdP2o6VX19ZWxzZSBWPVU7Ri5kcmF3VGlja3ModCxlLHt2YWxzOlQsbGF5ZXI6dixwYXRoOlYsdHJhbnNGbjpNfSksImFsbHRpY2tzIj09PWUubWlycm9yJiYoTj1PYmplY3Qua2V5cyhlLl9saW5lcG9zaXRpb25zfHx7fSkpfWZvcihuPTA7bjxOLmxlbmd0aDtuKyspe2k9TltuXSxsPWYuX3Bsb3RzW2ldO3ZhciBHPWUuX2xpbmVwb3NpdGlvbnNbaV18fFtdLFk9Ri5tYWtlVGlja1BhdGgoZSxHWzBdLEJbMF0pK0YubWFrZVRpY2tQYXRoKGUsR1sxXSxCWzFdKTtGLmRyYXdUaWNrcyh0LGUse3ZhbHM6VCxsYXllcjpsW2QrImF4aXNsYXllciJdLHBhdGg6WSx0cmFuc0ZuOk19KX12YXIgVz1bXTtpZihXLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIEYuZHJhd0xhYmVscyh0LGUse3ZhbHM6YixsYXllcjp2LHRyYW5zRm46QSxsYWJlbEZuczpGLm1ha2VMYWJlbEZucyhlLHkpfSl9KSksIm11bHRpY2F0ZWdvcnkiPT09ZS50eXBlKXt2YXIgWj17eDoyLHk6MTB9W2RdO1cucHVzaCgoZnVuY3Rpb24oKXt2YXIgcj17eDoiaGVpZ2h0Iix5OiJ3aWR0aCJ9W2RdLG49SigpW3JdK1orKGUuX3RpY2tBbmdsZXNbcCsidGljayJdP2UudGlja2ZvbnQuc2l6ZSpEOjApO3JldHVybiBGLmRyYXdMYWJlbHModCxlLHt2YWxzOm90KGUsYiksbGF5ZXI6dixjbHM6cCsidGljazIiLHJlcG9zaXRpb25PblVwZGF0ZTohMCxzZWNvbmRhcnk6ITAsdHJhbnNGbjpNLGxhYmVsRm5zOkYubWFrZUxhYmVsRm5zKGUseStuKkJbNF0pfSl9KSksVy5wdXNoKChmdW5jdGlvbigpe3JldHVybiBlLl9kZXB0aD1CWzRdKihKKCJ0aWNrMiIpW2Uuc2lkZV0teSksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuX2lkKyJkaXZpZGVyIixpPXIudmFscyxhPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShpLHN0KTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoImNyaXNwIiwxKS5jYWxsKHUuc3Ryb2tlLGUuZGl2aWRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixoLmNyaXNwUm91bmQodCxlLmRpdmlkZXJ3aWR0aCwxKSsicHgiKSxhLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpfSh0LGUse3ZhbHM6QyxsYXllcjp2LHBhdGg6Ri5tYWtlVGlja1BhdGgoZSx5LEJbNF0sZS5fZGVwdGgpLHRyYW5zRm46TX0pfSkpfWVsc2UgZS50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSYmVy5wdXNoKChmdW5jdGlvbigpe2UuX2RlcHRoPUJbNF0qKEooKVtlLnNpZGVdLXkpfSkpO3ZhciBYPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKGUpO3JldHVybiBXLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHIsbixpLHMsbD1lLnNpZGUuY2hhckF0KDApLGM9UltlLnNpZGVdLmNoYXJBdCgwKSx1PUYuZ2V0UHhQb3NpdGlvbih0LGUpLGg9Im91dHNpZGUiPT09ZS50aWNrcz9lLnRpY2tsZW46MDtpZigoZS5hdXRvbWFyZ2lufHxYKSYmKCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZT9yPUooInRpY2syIik6KHI9SigpLCJ4Ij09PWQmJiJiIj09PWwmJihlLl9kZXB0aD1NYXRoLm1heChyLndpZHRoPjA/ci5ib3R0b20tdTowLGgpKSkpLGUuYXV0b21hcmdpbil7bj17eDowLHk6MCxyOjAsbDowLHQ6MCxiOjB9O3ZhciBwPVswLDFdO2lmKCJ4Ij09PWQpe2lmKCJiIj09PWw/bltsXT1lLl9kZXB0aDoobltsXT1lLl9kZXB0aD1NYXRoLm1heChyLndpZHRoPjA/dS1yLnRvcDowLGgpLHAucmV2ZXJzZSgpKSxyLndpZHRoPjApe3ZhciBtPXIucmlnaHQtKGUuX29mZnNldCtlLl9sZW5ndGgpO20+MCYmKG4ueHI9MSxuLnI9bSk7dmFyIHY9ZS5fb2Zmc2V0LXIubGVmdDt2PjAmJihuLnhsPTAsbi5sPXYpfX1lbHNlIGlmKCJsIj09PWw/bltsXT1lLl9kZXB0aD1NYXRoLm1heChyLmhlaWdodD4wP3Utci5sZWZ0OjAsaCk6KG5bbF09ZS5fZGVwdGg9TWF0aC5tYXgoci5oZWlnaHQ+MD9yLnJpZ2h0LXU6MCxoKSxwLnJldmVyc2UoKSksci5oZWlnaHQ+MCl7dmFyIHk9ci5ib3R0b20tKGUuX29mZnNldCtlLl9sZW5ndGgpO3k+MCYmKG4ueWI9MCxuLmI9eSk7dmFyIHg9ZS5fb2Zmc2V0LXIudG9wO3g+MCYmKG4ueXQ9MSxuLnQ9eCl9bltnXT0iZnJlZSI9PT1lLmFuY2hvcj9lLnBvc2l0aW9uOmUuX2FuY2hvckF4aXMuZG9tYWluW3BbMF1dLGUudGl0bGUudGV4dCE9PWYuX2RmbHRUaXRsZVtkXSYmKG5bbF0rPWx0KGUpKyhlLnRpdGxlLnN0YW5kb2ZmfHwwKSksZS5taXJyb3ImJiJmcmVlIiE9PWUuYW5jaG9yJiYoKGk9e3g6MCx5OjAscjowLGw6MCx0OjAsYjowfSlbY109ZS5saW5ld2lkdGgsZS5taXJyb3ImJiEwIT09ZS5taXJyb3ImJihpW2NdKz1oKSwhMD09PWUubWlycm9yfHwidGlja3MiPT09ZS5taXJyb3I/aVtnXT1lLl9hbmNob3JBeGlzLmRvbWFpbltwWzFdXToiYWxsIiE9PWUubWlycm9yJiYiYWxsdGlja3MiIT09ZS5taXJyb3J8fChpW2ddPVtlLl9jb3VudGVyRG9tYWluTWluLGUuX2NvdW50ZXJEb21haW5NYXhdW3BbMV1dKSl9WCYmKHM9by5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiYXV0b01hcmdpbk9wdHMiKSh0LGUpKSxhLmF1dG9NYXJnaW4odCxodChlKSxuKSxhLmF1dG9NYXJnaW4odCxmdChlKSxpKSxhLmF1dG9NYXJnaW4odCxwdChlKSxzKX0pKSxyLnNraXBUaXRsZXx8WCYmImJvdHRvbSI9PT1lLnNpZGV8fFcucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX2Z1bGxMYXlvdXQsaT1lLl9pZCxhPWkuY2hhckF0KDApLG89ZS50aXRsZS5mb250LnNpemU7aWYoZS50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSlyPWUuX2RlcHRoK2UudGl0bGUuc3RhbmRvZmYrbHQoZSk7ZWxzZXtpZigibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpcj1lLl9kZXB0aDtlbHNle3I9MTArMS41Km8rKGUubGluZXdpZHRoP2UubGluZXdpZHRoLTE6MCl9cis9IngiPT09YT8idG9wIj09PWUuc2lkZT9vKihlLnNob3d0aWNrbGFiZWxzPzE6MCk6byooZS5zaG93dGlja2xhYmVscz8xLjU6LjUpOiJyaWdodCI9PT1lLnNpZGU/byooZS5zaG93dGlja2xhYmVscz8xOi41KTpvKihlLnNob3d0aWNrbGFiZWxzPy41OjApfXZhciBzLGwsdSxmLHA9Ri5nZXRQeFBvc2l0aW9uKHQsZSk7IngiPT09YT8obD1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIsdT0idG9wIj09PWUuc2lkZT9wLXI6cCtyKToodT1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIsbD0icmlnaHQiPT09ZS5zaWRlP3ArcjpwLXIscz17cm90YXRlOiItOTAiLG9mZnNldDowfSk7aWYoIm11bHRpY2F0ZWdvcnkiIT09ZS50eXBlKXt2YXIgZD1lLl9zZWxlY3Rpb25zW2UuX2lkKyJ0aWNrIl07aWYoZj17c2VsZWN0aW9uOmQsc2lkZTplLnNpZGV9LGQmJmQubm9kZSgpJiZkLm5vZGUoKS5wYXJlbnROb2RlKXt2YXIgZz1oLmdldFRyYW5zbGF0ZShkLm5vZGUoKS5wYXJlbnROb2RlKTtmLm9mZnNldExlZnQ9Zy54LGYub2Zmc2V0VG9wPWcueX1lLnRpdGxlLmhhc093blByb3BlcnR5KCJzdGFuZG9mZiIpJiYoZi5wYWQ9MCl9cmV0dXJuIGMuZHJhdyh0LGkrInRpdGxlIix7cHJvcENvbnRhaW5lcjplLHByb3BOYW1lOmUuX25hbWUrIi50aXRsZS50ZXh0IixwbGFjZWhvbGRlcjpuLl9kZmx0VGl0bGVbYV0sYXZvaWQ6Zix0cmFuc2Zvcm06cyxhdHRyaWJ1dGVzOnt4OmwseTp1LCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9KHQsZSl9KSkscy5zeW5jT3JBc3luYyhXKX19ZnVuY3Rpb24gSih0KXt2YXIgcj1wKyh0fHwidGljayIpO3JldHVybiB3W3JdfHwod1tyXT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhO3QuX3NlbGVjdGlvbnNbZV0uc2l6ZSgpPyhyPTEvMCxuPS0xLzAsaT0xLzAsYT0tMS8wLHQuX3NlbGVjdGlvbnNbZV0uZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD11dCh0aGlzKSxlPWguYkJveCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtyPU1hdGgubWluKHIsZS50b3ApLG49TWF0aC5tYXgobixlLmJvdHRvbSksaT1NYXRoLm1pbihpLGUubGVmdCksYT1NYXRoLm1heChhLGUucmlnaHQpfSkpKToocj0wLG49MCxpPTAsYT0wKTtyZXR1cm57dG9wOnIsYm90dG9tOm4sbGVmdDppLHJpZ2h0OmEsaGVpZ2h0Om4tcix3aWR0aDphLWl9fShlLHIpKSx3W3JdfX0sRi5nZXRUaWNrU2lnbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5faWQuY2hhckF0KDApLHI9e3g6InRvcCIseToicmlnaHQifVtlXSxuPXQuc2lkZT09PXI/MTotMSxpPVstMSwxLG4sLW5dO3JldHVybiJpbnNpZGUiIT09dC50aWNrcz09KCJ4Ij09PWUpJiYoaT1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuLXR9KSkpLHQuc2lkZSYmaS5wdXNoKHtsOi0xLHQ6LTEscjoxLGI6MX1bdC5zaWRlLmNoYXJBdCgwKV0pLGl9LEYubWFrZVRyYW5zRm49ZnVuY3Rpb24odCl7dmFyIGU9dC5faWQuY2hhckF0KDApLHI9dC5fb2Zmc2V0O3JldHVybiJ4Ij09PWU/ZnVuY3Rpb24oZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhyK3QubDJwKGUueCkpKyIsMCkifTpmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisocit0LmwycChlLngpKSsiKSJ9fSxGLm1ha2VUcmFuc1BlcmlvZEZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2lkLmNoYXJBdCgwKSxyPXQuX29mZnNldDtyZXR1cm4ieCI9PT1lP2Z1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoIisocit0LmwycCh2b2lkIDAhPT1lLnBlcmlvZFg/ZS5wZXJpb2RYOmUueCkpKyIsMCkifTpmdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisocit0LmwycCh2b2lkIDAhPT1lLnBlcmlvZFg/ZS5wZXJpb2RYOmUueCkpKyIpIn19LEYubWFrZVRpY2tQYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe249dm9pZCAwIT09bj9uOnQudGlja2xlbjt2YXIgaT10Ll9pZC5jaGFyQXQoMCksYT0odC5saW5ld2lkdGh8fDEpLzI7cmV0dXJuIngiPT09aT8iTTAsIisoZSthKnIpKyJ2IituKnI6Ik0iKyhlK2EqcikrIiwwaCIrbipyfSxGLm1ha2VMYWJlbEZucz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5faWQuY2hhckF0KDApLGE9ImJvdW5kYXJpZXMiIT09dC50aWNrc29uJiYib3V0c2lkZSI9PT10LnRpY2tzLG89MCxsPTA7aWYoYSYmKG8rPXQudGlja2xlbiksciYmIm91dHNpZGUiPT09dC50aWNrcyl7dmFyIGM9cy5kZWcycmFkKHIpO289dC50aWNrbGVuKk1hdGguY29zKGMpKzEsbD10LnRpY2tsZW4qTWF0aC5zaW4oYyl9dC5zaG93dGlja2xhYmVscyYmKGF8fHQuc2hvd2xpbmUpJiYobys9LjIqdC50aWNrZm9udC5zaXplKTt2YXIgdSxoLGYscCxkPXtsYWJlbFN0YW5kb2ZmOm8rPSh0LmxpbmV3aWR0aHx8MSkvMixsYWJlbFNoaWZ0Omx9O3JldHVybiJ4Ij09PW4/KHA9ImJvdHRvbSI9PT10LnNpZGU/MTotMSx1PWwqcCxoPWUrbypwLGY9ImJvdHRvbSI9PT10LnNpZGU/MTotLjIsZC54Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHgrdX0sZC55Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkraCt0LmZvbnRTaXplKmZ9LGQuYW5jaG9yRm49ZnVuY3Rpb24odCxlKXtyZXR1cm4gaShlKSYmMCE9PWUmJjE4MCE9PWU/ZSpwPDA/ImVuZCI6InN0YXJ0IjoibWlkZGxlIn0sZC5oZWlnaHRGbj1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHI8LTYwfHxyPjYwPy0uNSpuOiJ0b3AiPT09dC5zaWRlPy1uOjB9KToieSI9PT1uJiYocD0icmlnaHQiPT09dC5zaWRlPzE6LTEsdT1vLGg9LWwqcCxmPTkwPT09TWF0aC5hYnModC50aWNrYW5nbGUpPy41OjAsZC54Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHgrZSsodSt0LmZvbnRTaXplKmYpKnB9LGQueUZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K2grdC5mb250U2l6ZSp6fSxkLmFuY2hvckZuPWZ1bmN0aW9uKGUscil7cmV0dXJuIGkocikmJjkwPT09TWF0aC5hYnMocik/Im1pZGRsZSI6InJpZ2h0Ij09PXQuc2lkZT8ic3RhcnQiOiJlbmQifSxkLmhlaWdodEZuPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4ocio9ImxlZnQiPT09dC5zaWRlPzE6LTEpPC0zMD8tbjpyPDMwPy0uNSpuOjB9KSxkfSxGLmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgbj1lLl9pZCsidGljayIsaT1yLnZhbHM7InBlcmlvZCI9PT1lLnRpY2tsYWJlbG1vZGUmJihpPWkuc2xpY2UoKSkuc2hpZnQoKTt2YXIgYT1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoZS50aWNrcz9pOltdLHN0KTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoInRpY2tzIiwxKS5jbGFzc2VkKCJjcmlzcCIsITEhPT1yLmNyaXNwKS5jYWxsKHUuc3Ryb2tlLGUudGlja2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixoLmNyaXNwUm91bmQodCxlLnRpY2t3aWR0aCwxKSsicHgiKS5hdHRyKCJkIixyLnBhdGgpLGEuYXR0cigidHJhbnNmb3JtIixyLnRyYW5zRm4pfSxGLmRyYXdHcmlkPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBuPWUuX2lkKyJncmlkIixpPXIudmFscyxhPXIuY291bnRlckF4aXM7aWYoITE9PT1lLnNob3dncmlkKWk9W107ZWxzZSBpZihhJiZGLnNob3VsZFNob3daZXJvTGluZSh0LGUsYSkpZm9yKHZhciBvPSJhcnJheSI9PT1lLnRpY2ttb2RlLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXS54O2lmKG8/IWw6TWF0aC5hYnMobCk8ZS5kdGljay8xMDApe2lmKGk9aS5zbGljZSgwLHMpLmNvbmNhdChpLnNsaWNlKHMrMSkpLCFvKWJyZWFrO3MtLX19dmFyIGM9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGksc3QpO2MuZXhpdCgpLnJlbW92ZSgpLGMuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgiY3Jpc3AiLCExIT09ci5jcmlzcCksZS5fZ3c9aC5jcmlzcFJvdW5kKHQsZS5ncmlkd2lkdGgsMSksYy5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKS5jYWxsKHUuc3Ryb2tlLGUuZ3JpZGNvbG9yfHwiI2RkZCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuX2d3KyJweCIpLCJmdW5jdGlvbiI9PXR5cGVvZiByLnBhdGgmJmMuYXR0cigiZCIsci5wYXRoKX0sRi5kcmF3WmVyb0xpbmU9ZnVuY3Rpb24odCxlLHIpe3I9cnx8cjt2YXIgbj1lLl9pZCsiemwiLGk9Ri5zaG91bGRTaG93WmVyb0xpbmUodCxlLHIuY291bnRlckF4aXMpLGE9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGk/W3t4OjAsaWQ6ZS5faWR9XTpbXSk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJ6bCIsMSkuY2xhc3NlZCgiY3Jpc3AiLCExIT09ci5jcmlzcCkuZWFjaCgoZnVuY3Rpb24oKXtyLmxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE4uaWRTb3J0KHQuaWQsZS5pZCl9KSl9KSksYS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKS5jYWxsKHUuc3Ryb2tlLGUuemVyb2xpbmVjb2xvcnx8dS5kZWZhdWx0TGluZSkuc3R5bGUoInN0cm9rZS13aWR0aCIsaC5jcmlzcFJvdW5kKHQsZS56ZXJvbGluZXdpZHRoLGUuX2d3fHwxKSsicHgiKX0sRi5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1lLl9pZCxjPW8uY2hhckF0KDApLHU9ci5jbHN8fG8rInRpY2siLGY9ci52YWxzLHA9ci5sYWJlbEZucyxkPXIuc2Vjb25kYXJ5PzA6ZS50aWNrYW5nbGUsZz0oZS5fcHJldlRpY2tBbmdsZXN8fHt9KVt1XSxtPXIubGF5ZXIuc2VsZWN0QWxsKCJnLiIrdSkuZGF0YShlLnNob3d0aWNrbGFiZWxzP2Y6W10sc3QpLHY9W107ZnVuY3Rpb24geSh0LGUpe3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGE9bi5zZWxlY3QodGhpcyksbz1hLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpLHM9cC5hbmNob3JGbih0LGUpLGM9ci50cmFuc0ZuLmNhbGwoYS5ub2RlKCksdCkrKGkoZSkmJjAhPStlPyIgcm90YXRlKCIrZSsiLCIrcC54Rm4odCkrIiwiKyhwLnlGbih0KS10LmZvbnRTaXplLzIpKyIpIjoiIiksdT1sLmxpbmVDb3VudChhKSxmPUQqdC5mb250U2l6ZSxkPXAuaGVpZ2h0Rm4odCxpKGUpPytlOjAsKHUtMSkqZik7aWYoZCYmKGMrPSIgdHJhbnNsYXRlKDAsICIrZCsiKSIpLG8uZW1wdHkoKSlhLnNlbGVjdCgidGV4dCIpLmF0dHIoe3RyYW5zZm9ybTpjLCJ0ZXh0LWFuY2hvciI6c30pO2Vsc2V7dmFyIGc9aC5iQm94KG8ubm9kZSgpKS53aWR0aCp7ZW5kOi0uNSxzdGFydDouNX1bc107by5hdHRyKCJ0cmFuc2Zvcm0iLGMrKGc/InRyYW5zbGF0ZSgiK2crIiwwKSI6IiIpKX19KSl9bS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodSwxKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9dC5fcHJvbWlzZXMubGVuZ3RoO3IuY2FsbChsLnBvc2l0aW9uVGV4dCxwLnhGbihlKSxwLnlGbihlKSkuY2FsbChoLmZvbnQsZS5mb250LGUuZm9udFNpemUsZS5mb250Q29sb3IpLnRleHQoZS50ZXh0KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLHQuX3Byb21pc2VzW2ldP3YucHVzaCh0Ll9wcm9taXNlcy5wb3AoKS50aGVuKChmdW5jdGlvbigpe3kocixkKX0pKSk6eShyLGQpfSkpLG0uZXhpdCgpLnJlbW92ZSgpLHIucmVwb3NpdGlvbk9uVXBkYXRlJiZtLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmNhbGwobC5wb3NpdGlvblRleHQscC54Rm4odCkscC55Rm4odCkpfSkpLHkobSxnKzE/ZzpkKTt2YXIgeD1udWxsO2UuX3NlbGVjdGlvbnMmJihlLl9zZWxlY3Rpb25zW3VdPW0pO3ZhciBiPVtmdW5jdGlvbigpe3JldHVybiB2Lmxlbmd0aCYmUHJvbWlzZS5hbGwodil9XTtlLmF1dG9tYXJnaW4mJmEuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQmJjkwPT09Zz8oeD05MCxiLnB1c2goKGZ1bmN0aW9uKCl7eShtLGcpfSkpKTpiLnB1c2goKGZ1bmN0aW9uKCl7aWYoeShtLGQpLGYubGVuZ3RoJiYieCI9PT1jJiYhaShkKSYmKCJsb2ciIT09ZS50eXBlfHwiRCIhPT1TdHJpbmcoZS5kdGljaykuY2hhckF0KDApKSl7eD0wO3ZhciB0LG49MCxhPVtdO2lmKG0uZWFjaCgoZnVuY3Rpb24odCl7bj1NYXRoLm1heChuLHQuZm9udFNpemUpO3ZhciByPWUubDJwKHQueCksaT11dCh0aGlzKSxvPWguYkJveChpLm5vZGUoKSk7YS5wdXNoKHt0b3A6MCxib3R0b206MTAsaGVpZ2h0OjEwLGxlZnQ6ci1vLndpZHRoLzIscmlnaHQ6citvLndpZHRoLzIrMix3aWR0aDpvLndpZHRoKzJ9KX0pKSwiYm91bmRhcmllcyIhPT1lLnRpY2tzb24mJiFlLnNob3dkaXZpZGVyc3x8ci5zZWNvbmRhcnkpe3ZhciBvPWYubGVuZ3RoLGw9TWF0aC5hYnMoKGZbby0xXS54LWZbMF0ueCkqZS5fbSkvKG8tMSk8Mi41Km58fCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZTtmb3IodD0wO3Q8YS5sZW5ndGgtMTt0KyspaWYocy5iQm94SW50ZXJzZWN0KGFbdF0sYVt0KzFdKSl7eD1sPzkwOjMwO2JyZWFrfX1lbHNle3ZhciB1PTI7Zm9yKGUudGlja3MmJih1Kz1lLnRpY2t3aWR0aC8yKSx0PTA7dDxhLmxlbmd0aDt0Kyspe3ZhciBwPWZbdF0ueGJuZCxnPWFbdF07aWYobnVsbCE9PXBbMF0mJmcubGVmdC1lLmwycChwWzBdKTx1fHxudWxsIT09cFsxXSYmZS5sMnAocFsxXSktZy5yaWdodDx1KXt4PTkwO2JyZWFrfX19eCYmeShtLHgpfX0pKSxlLl90aWNrQW5nbGVzJiZiLnB1c2goKGZ1bmN0aW9uKCl7ZS5fdGlja0FuZ2xlc1t1XT1udWxsPT09eD9pKGQpP2Q6MDp4fSkpO3ZhciBfPXMuc3luY09yQXN5bmMoYik7cmV0dXJuIF8mJl8udGhlbiYmdC5fcHJvbWlzZXMucHVzaChfKSxffSxGLmdldFB4UG9zaXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX2Z1bGxMYXlvdXQuX3NpemUsaT1lLl9pZC5jaGFyQXQoMCksYT1lLnNpZGU7cmV0dXJuImZyZWUiIT09ZS5hbmNob3I/cj1lLl9hbmNob3JBeGlzOiJ4Ij09PWk/cj17X29mZnNldDpuLnQrKDEtKGUucG9zaXRpb258fDApKSpuLmgsX2xlbmd0aDowfToieSI9PT1pJiYocj17X29mZnNldDpuLmwrKGUucG9zaXRpb258fDApKm4udyxfbGVuZ3RoOjB9KSwidG9wIj09PWF8fCJsZWZ0Ij09PWE/ci5fb2Zmc2V0OiJib3R0b20iPT09YXx8InJpZ2h0Ij09PWE/ci5fb2Zmc2V0K3IuX2xlbmd0aDp2b2lkIDB9LEYuc2hvdWxkU2hvd1plcm9MaW5lPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1zLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtyZXR1cm4gblswXSpuWzFdPD0wJiZlLnplcm9saW5lJiYoImxpbmVhciI9PT1lLnR5cGV8fCItIj09PWUudHlwZSkmJiEoZS5yYW5nZWJyZWFrcyYmZS5tYXNrQnJlYWtzKDApPT09UCkmJihjdChlLDApfHwhZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5fbWFpbkF4aXM7aWYoIWkpcmV0dXJuO3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1lLl9pZC5jaGFyQXQoMCkscz1GLmNvdW50ZXJMZXR0ZXIoZS5faWQpLGw9ZS5fb2Zmc2V0KyhNYXRoLmFicyhuWzBdKTxNYXRoLmFicyhuWzFdKT09KCJ4Ij09PW8pPzA6ZS5fbGVuZ3RoKTtmdW5jdGlvbiBjKHQpe2lmKCF0LnNob3dsaW5lfHwhdC5saW5ld2lkdGgpcmV0dXJuITE7dmFyIHI9TWF0aC5tYXgoKHQubGluZXdpZHRoK2UuemVyb2xpbmV3aWR0aCkvMiwxKTtmdW5jdGlvbiBuKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmTWF0aC5hYnModC1sKTxyfWlmKG4odC5fbWFpbkxpbmVQb3NpdGlvbil8fG4odC5fbWFpbk1pcnJvclBvc2l0aW9uKSlyZXR1cm4hMDt2YXIgaT10Ll9saW5lcG9zaXRpb25zfHx7fTtmb3IodmFyIGEgaW4gaSlpZihuKGlbYV1bMF0pfHxuKGlbYV1bMV0pKXJldHVybiEwfXZhciB1PWEuX3Bsb3RzW3IuX21haW5TdWJwbG90XTtpZighKHUubWFpbnBsb3RpbmZvfHx1KS5vdmVybGF5cy5sZW5ndGgpcmV0dXJuIGMocik7Zm9yKHZhciBoPUYubGlzdCh0LHMpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIHA9aFtmXTtpZihwLl9tYWluQXhpcz09PWkmJmMocCkpcmV0dXJuITB9fSh0LGUscixuKXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbERhdGEsbj1lLl9tYWluU3VicGxvdCxpPWUuX2lkLmNoYXJBdCgwKSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07aWYoITA9PT1zLnZpc2libGUmJnMueGF4aXMrcy55YXhpcz09PW4pe2lmKG8udHJhY2VJcyhzLCJiYXItbGlrZSIpJiZzLm9yaWVudGF0aW9uPT09e3g6ImgiLHk6InYifVtpXSlyZXR1cm4hMDtpZihzLmZpbGwmJnMuZmlsbC5jaGFyQXQocy5maWxsLmxlbmd0aC0xKT09PWkpcmV0dXJuITB9fXJldHVybiExfSh0LGUpKX0sRi5jbGlwRW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiBlLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGN0KHQsZS54KX0pKX0sRi5hbGxvd0F1dG9NYXJnaW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUYubGlzdCh0LCIiLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5hdXRvbWFyZ2luJiYoYS5hbGxvd0F1dG9NYXJnaW4odCxodChuKSksbi5taXJyb3ImJmEuYWxsb3dBdXRvTWFyZ2luKHQsZnQobikpKSxvLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShuKSYmYS5hbGxvd0F1dG9NYXJnaW4odCxwdChuKSl9fSxGLnN3YXA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9W107Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGE9W10sbz10Ll9mdWxsRGF0YVtlW3JdXS54YXhpcyxzPXQuX2Z1bGxEYXRhW2Vbcl1dLnlheGlzO2lmKG8mJnMpe2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspLTE9PT1pW25dLnguaW5kZXhPZihvKSYmLTE9PT1pW25dLnkuaW5kZXhPZihzKXx8YS5wdXNoKG4pO2lmKGEubGVuZ3RoKXt2YXIgbCxjPWlbYVswXV07aWYoYS5sZW5ndGg+MSlmb3Iobj0xO248YS5sZW5ndGg7bisrKWw9aVthW25dXSxkdChjLngsbC54KSxkdChjLnksbC55KTtkdChjLngsW29dKSxkdChjLnksW3NdKX1lbHNlIGkucHVzaCh7eDpbb10seTpbc119KX19cmV0dXJuIGl9KHQsZSksbj0wO248ci5sZW5ndGg7bisrKWd0KHQscltuXS54LHJbbl0ueSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzcsIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIjo3MTAsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjcxNywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NzQsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4NjIsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4vYXV0b3JhbmdlIjo3OTgsIi4vYXhpc19hdXRvdHlwZSI6ODAwLCIuL2F4aXNfaWRzIjo4MDIsIi4vY2xlYW5fdGlja3MiOjgwNCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODEzLCIuL3NldF9jb252ZXJ0Ijo4MTksZDM6MTY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sODAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4hKHI9cnx8e30pLm5vTXVsdGlDYXRlZ29yeSYmKG89dCxpLmlzQXJyYXlPclR5cGVkQXJyYXkob1swXSkmJmkuaXNBcnJheU9yVHlwZWRBcnJheShvWzFdKSk/Im11bHRpY2F0ZWdvcnkiOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWF4KDEsKHQubGVuZ3RoLTEpLzFlMyksYT0wLG89MCxzPXt9LGw9MDtsPHQubGVuZ3RoO2wrPXIpe3ZhciBjPXRbTWF0aC5yb3VuZChsKV0sdT1TdHJpbmcoYyk7c1t1XXx8KHNbdV09MSxpLmlzRGF0ZVRpbWUoYyxlKSYmKGErPTEpLG4oYykmJihvKz0xKSl9cmV0dXJuIGE+MipvfSh0LGUpPyJkYXRlIjpmdW5jdGlvbih0KXtmb3IodmFyIGU9TWF0aC5tYXgoMSwodC5sZW5ndGgtMSkvMWUzKSxyPTAsbj0wLG89e30scz0wO3M8dC5sZW5ndGg7cys9ZSl7dmFyIGw9dFtNYXRoLnJvdW5kKHMpXSxjPVN0cmluZyhsKTtvW2NdfHwob1tjXT0xLCJib29sZWFuIj09dHlwZW9mIGw/bisrOmkuY2xlYW5OdW1iZXIobCkhPT1hP3IrKzoic3RyaW5nIj09dHlwZW9mIGwmJm4rKyl9cmV0dXJuIG4+MipyfSh0KT8iY2F0ZWdvcnkiOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKG4odFtlXSkpcmV0dXJuITA7cmV0dXJuITF9KHQpPyJsaW5lYXIiOiItIjt2YXIgb319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuLi8uLi9saWIiOjc1MCwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDgwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIikscz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxjPXQoIi4vdGlja19tYXJrX2RlZmF1bHRzIiksdT10KCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxoPXQoIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSxmPXQoIi4vbGluZV9ncmlkX2RlZmF1bHRzIikscD10KCIuL3NldF9jb252ZXJ0IiksZD10KCIuL2NvbnN0YW50cyIpLldFRUtEQVlfUEFUVEVSTixnPXQoIi4vY29uc3RhbnRzIikuSE9VUl9QQVRURVJOO2Z1bmN0aW9uIG0odCxlLHIpe2Z1bmN0aW9uIGkocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLHMucmFuZ2VicmVha3MscixuKX1pZihpKCJlbmFibGVkIikpe3ZhciBvPWkoImJvdW5kcyIpO2lmKG8mJm8ubGVuZ3RoPj0yKXt2YXIgbCxjLHU9IiI7aWYoMj09PW8ubGVuZ3RoKWZvcihsPTA7bDwyO2wrKylpZihjPXkob1tsXSkpe3U9ZDticmVha312YXIgaD1pKCJwYXR0ZXJuIix1KTtpZihoPT09ZClmb3IobD0wO2w8MjtsKyspKGM9eShvW2xdKSkmJihlLmJvdW5kc1tsXT1vW2xdPWMtMSk7aWYoaClmb3IobD0wO2w8MjtsKyspc3dpdGNoKGM9b1tsXSxoKXtjYXNlIGQ6aWYoIW4oYykpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtpZigoYz0rYykhPT1NYXRoLmZsb29yKGMpfHxjPDB8fGM+PTcpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtlLmJvdW5kc1tsXT1vW2xdPWM7YnJlYWs7Y2FzZSBnOmlmKCFuKGMpKXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSk7aWYoKGM9K2MpPDB8fGM+MjQpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtlLmJvdW5kc1tsXT1vW2xdPWN9aWYoITE9PT1yLmF1dG9yYW5nZSl7dmFyIGY9ci5yYW5nZTtpZihmWzBdPGZbMV0pe2lmKG9bMF08ZlswXSYmb1sxXT5mWzFdKXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSl9ZWxzZSBpZihvWzBdPmZbMF0mJm9bMV08ZlsxXSlyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpfX1lbHNle3ZhciBwPWkoInZhbHVlcyIpO2lmKCFwfHwhcC5sZW5ndGgpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtpKCJkdmFsdWUiKX19fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGcpe3ZhciB2PW4ubGV0dGVyLHk9bi5mb250fHx7fSx4PW4uc3Bsb21TdGFzaHx8e30sYj1yKCJ2aXNpYmxlIiwhbi52aXNpYmxlRGZsdCksXz1lLl90ZW1wbGF0ZXx8e30sdz1lLnR5cGV8fF8udHlwZXx8Ii0iOyJkYXRlIj09PXcmJmkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiLG4uY2FsZW5kYXIpO3AoZSxnKTt2YXIgVD0hZS5pc1ZhbGlkUmFuZ2UodC5yYW5nZSk7VCYmbi5yZXZlcnNlRGZsdCYmKFQ9InJldmVyc2VkIiksIXIoImF1dG9yYW5nZSIsVCl8fCJsaW5lYXIiIT09dyYmIi0iIT09d3x8cigicmFuZ2Vtb2RlIikscigicmFuZ2UiKSxlLmNsZWFuUmFuZ2UoKSxoKHQsZSxyLG4pLCJjYXRlZ29yeSI9PT13fHxuLm5vSG92ZXJ8fHIoImhvdmVyZm9ybWF0Iik7dmFyIGs9cigiY29sb3IiKSxNPWshPT1zLmNvbG9yLmRmbHQ/azp5LmNvbG9yLEE9eC5sYWJlbHx8Zy5fZGZsdFRpdGxlW3ZdO2lmKHUodCxlLHIsdyxuLHtwYXNzOjF9KSwhYilyZXR1cm4gZTtyKCJ0aXRsZS50ZXh0IixBKSxhLmNvZXJjZUZvbnQociwidGl0bGUuZm9udCIse2ZhbWlseTp5LmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKnkuc2l6ZSksY29sb3I6TX0pLGwodCxlLHIsdyksdSh0LGUscix3LG4se3Bhc3M6Mn0pLGModCxlLHIsbiksZih0LGUscix7ZGZsdENvbG9yOmssYmdDb2xvcjpuLmJnQ29sb3Isc2hvd0dyaWQ6bi5zaG93R3JpZCxhdHRyaWJ1dGVzOnN9KSwoZS5zaG93bGluZXx8ZS50aWNrcykmJnIoIm1pcnJvciIpLG4uYXV0b21hcmdpbiYmcigiYXV0b21hcmdpbiIpO3ZhciBTLEU9Im11bHRpY2F0ZWdvcnkiPT09dztuLm5vVGlja3Nvbnx8ImNhdGVnb3J5IiE9PXcmJiFFfHwhZS50aWNrcyYmIWUuc2hvd2dyaWR8fChFJiYoUz0iYm91bmRhcmllcyIpLHIoInRpY2tzb24iLFMpKTtFJiYocigic2hvd2RpdmlkZXJzIikmJihyKCJkaXZpZGVyY29sb3IiKSxyKCJkaXZpZGVyd2lkdGgiKSkpO2lmKCJkYXRlIj09PXcpaWYobi5ub1RpY2tsYWJlbG1vZGV8fHIoInRpY2tsYWJlbG1vZGUiKSxvKHQsZSx7bmFtZToicmFuZ2VicmVha3MiLGluY2x1c2lvbkF0dHI6ImVuYWJsZWQiLGhhbmRsZUl0ZW1EZWZhdWx0czptfSksZS5yYW5nZWJyZWFrcy5sZW5ndGgpe2Zvcih2YXIgQz0wO0M8ZS5yYW5nZWJyZWFrcy5sZW5ndGg7QysrKWlmKGUucmFuZ2VicmVha3NbQ10ucGF0dGVybj09PWQpe2UuX2hhc0RheU9mV2Vla0JyZWFrcz0hMDticmVha31pZihwKGUsZyksZy5faGFzKCJzY2F0dGVyZ2wiKXx8Zy5faGFzKCJzcGxvbSIpKWZvcih2YXIgTD0wO0w8bi5kYXRhLmxlbmd0aDtMKyspe3ZhciBQPW4uZGF0YVtMXTsic2NhdHRlcmdsIiE9PVAudHlwZSYmInNwbG9tIiE9PVAudHlwZXx8KFAudmlzaWJsZT0hMSxhLndhcm4oUC50eXBlKyIgdHJhY2VzIGRvIG5vdCB3b3JrIG9uIGF4ZXMgd2l0aCByYW5nZWJyZWFrcy4gU2V0dGluZyB0cmFjZSAiK1AuaW5kZXgrIiB0byBgdmlzaWJsZTogZmFsc2VgLiIpKX19ZWxzZSBkZWxldGUgZS5yYW5nZWJyZWFrcztyZXR1cm4gZX07dmFyIHY9e3N1bjoxLG1vbjoyLHR1ZTozLHdlZDo0LHRodTo1LGZyaTo2LHNhdDo3fTtmdW5jdGlvbiB5KHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdlt0LnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCldfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3OTQsIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiOjgwMywiLi9jb25zdGFudHMiOjgwNSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODEzLCIuL2xpbmVfZ3JpZF9kZWZhdWx0cyI6ODE1LCIuL3NldF9jb252ZXJ0Ijo4MTksIi4vdGlja19sYWJlbF9kZWZhdWx0cyI6ODIwLCIuL3RpY2tfbWFya19kZWZhdWx0cyI6ODIxLCIuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjgyMiwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDgwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9jb25zdGFudHMiKTtyLmlkMm5hbWU9ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0Lm1hdGNoKGkuQVhfSURfUEFUVEVSTikpe3ZhciBlPXQuc3BsaXQoIiAiKVswXS5zdWJzdHIoMSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLHQuY2hhckF0KDApKyJheGlzIitlfX0sci5uYW1lMmlkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goaS5BWF9OQU1FX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksdC5jaGFyQXQoMCkrZX19LHIuY2xlYW5JZD1mdW5jdGlvbih0LGUscil7dmFyIG49LyggZG9tYWluKSQvLnRlc3QodCk7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0Lm1hdGNoKGkuQVhfSURfUEFUVEVSTikmJighZXx8dC5jaGFyQXQoMCk9PT1lKSYmKCFufHxyKSl7dmFyIGE9dC5zcGxpdCgiICIpWzBdLnN1YnN0cigxKS5yZXBsYWNlKC9eMCsvLCIiKTtyZXR1cm4iMSI9PT1hJiYoYT0iIiksdC5jaGFyQXQoMCkrYSsobiYmcj8iIGRvbWFpbiI6IiIpfX0sci5saXN0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Ll9mdWxsTGF5b3V0O2lmKCFpKXJldHVybltdO3ZhciBhLG89ci5saXN0SWRzKHQsZSkscz1uZXcgQXJyYXkoby5sZW5ndGgpO2ZvcihhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV07c1thXT1pW2wuY2hhckF0KDApKyJheGlzIitsLnN1YnN0cigxKV19aWYoIW4pe3ZhciBjPWkuX3N1YnBsb3RzLmdsM2R8fFtdO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWlbY1thXV07ZT9zLnB1c2godVtlKyJheGlzIl0pOnMucHVzaCh1LnhheGlzLHUueWF4aXMsdS56YXhpcyl9fXJldHVybiBzfSxyLmxpc3RJZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKCFyKXJldHVybltdO3ZhciBuPXIuX3N1YnBsb3RzO3JldHVybiBlP25bZSsiYXhpcyJdOm4ueGF4aXMuY29uY2F0KG4ueWF4aXMpfSxyLmdldEZyb21JZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtyZXR1cm4gZT12b2lkIDA9PT1lfHwic3RyaW5nIiE9dHlwZW9mIGU/ZTplLnJlcGxhY2UoIiBkb21haW4iLCIiKSwieCI9PT1uP2U9ZS5yZXBsYWNlKC95WzAtOV0qLywiIik6InkiPT09biYmKGU9ZS5yZXBsYWNlKC94WzAtOV0qLywiIikpLGlbci5pZDJuYW1lKGUpXX0sci5nZXRGcm9tVHJhY2U9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1udWxsO2lmKG4udHJhY2VJcyhlLCJnbDNkIikpe3ZhciBzPWUuc2NlbmU7InNjZW5lIj09PXMuc3Vic3RyKDAsNSkmJihvPWFbc11baSsiYXhpcyJdKX1lbHNlIG89ci5nZXRGcm9tSWQodCxlW2krImF4aXMiXXx8aSk7cmV0dXJuIG99LHIuaWRTb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jaGFyQXQoMCksbj1lLmNoYXJBdCgwKTtyZXR1cm4gciE9PW4/cj5uPzE6LTE6Kyh0LnN1YnN0cigxKXx8MSktKyhlLnN1YnN0cigxKXx8MSl9LHIuZ2V0QXhpc0dyb3VwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2F4aXNNYXRjaEdyb3VwcyxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKHJbbl1bZV0pcmV0dXJuImciK259cmV0dXJuIGV9LHIucmVmMmlkPWZ1bmN0aW9uKHQpe3JldHVybiEhL15beHl6XS8udGVzdCh0KSYmdC5zcGxpdCgiICIpWzBdfX0seyIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2NvbnN0YW50cyI6ODA1fV0sODAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZigiY2F0ZWdvcnkiPT09ZS50eXBlKXt2YXIgaSxhPXQuY2F0ZWdvcnlhcnJheSxvPUFycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoPjA7byYmKGk9ImFycmF5Iik7dmFyIHMsbD1yKCJjYXRlZ29yeW9yZGVyIixpKTsiYXJyYXkiPT09bCYmKHM9cigiY2F0ZWdvcnlhcnJheSIpKSxvfHwiYXJyYXkiIT09bHx8KGw9ZS5jYXRlZ29yeW9yZGVyPSJ0cmFjZSIpLCJ0cmFjZSI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPVtdOiJhcnJheSI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXMuc2xpY2UoKToocz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPWUuZGF0YUF0dHJ8fHQuX2lkLmNoYXJBdCgwKSxvPXt9O2lmKGUuYXhEYXRhKXI9ZS5heERhdGE7ZWxzZSBmb3Iocj1bXSxuPTA7bjxlLmRhdGEubGVuZ3RoO24rKyl7dmFyIHM9ZS5kYXRhW25dO3NbYSsiYXhpcyJdPT09dC5faWQmJnIucHVzaChzKX1mb3Iobj0wO248ci5sZW5ndGg7bisrKXt2YXIgbD1yW25dW2FdO2ZvcihpPTA7aTxsLmxlbmd0aDtpKyspe3ZhciBjPWxbaV07bnVsbCE9YyYmKG9bY109MSl9fXJldHVybiBPYmplY3Qua2V5cyhvKX0oZSxuKS5zb3J0KCksImNhdGVnb3J5IGFzY2VuZGluZyI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXM6ImNhdGVnb3J5IGRlc2NlbmRpbmciPT09bCYmKGUuX2luaXRpYWxDYXRlZ29yaWVzPXMucmV2ZXJzZSgpKSl9fX0se31dLDgwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLk9ORURBWSxzPWEuT05FV0VFSztyLmR0aWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ImxvZyI9PT1lLGk9ImRhdGUiPT09ZSxhPSJjYXRlZ29yeSI9PT1lLHM9aT9vOjE7aWYoIXQpcmV0dXJuIHM7aWYobih0KSlyZXR1cm4odD1OdW1iZXIodCkpPD0wP3M6YT9NYXRoLm1heCgxLE1hdGgucm91bmQodCkpOmk/TWF0aC5tYXgoLjEsdCk6dDtpZigic3RyaW5nIiE9dHlwZW9mIHR8fCFpJiYhcilyZXR1cm4gczt2YXIgbD10LmNoYXJBdCgwKSxjPXQuc3Vic3RyKDEpO3JldHVybihjPW4oYyk/TnVtYmVyKGMpOjApPD0wfHwhKGkmJiJNIj09PWwmJmM9PT1NYXRoLnJvdW5kKGMpfHxyJiYiTCI9PT1sfHxyJiYiRCI9PT1sJiYoMT09PWN8fDI9PT1jKSk/czp0fSxyLnRpY2swPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiJkYXRlIj09PWU/aS5jbGVhbkRhdGUodCxpLmRhdGVUaWNrMChyLGElcz09MD8xOjApKToiRDEiIT09YSYmIkQyIiE9PWE/bih0KT9OdW1iZXIodCk6MDp2b2lkIDB9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsImZhc3QtaXNudW1lcmljIjoyNDF9XSw4MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcjtlLmV4cG9ydHM9e2lkUmVnZXg6e3g6bigieCIsIiggZG9tYWluKT8iKSx5Om4oInkiLCIoIGRvbWFpbik/Iil9LGF0dHJSZWdleDpuKCJbeHldYXhpcyIpLHhBeGlzTWF0Y2g6bigieGF4aXMiKSx5QXhpc01hdGNoOm4oInlheGlzIiksQVhfSURfUEFUVEVSTjovXlt4eXpdWzAtOV0qKCBkb21haW4pPyQvLEFYX05BTUVfUEFUVEVSTjovXlt4eXpdYXhpc1swLTldKiQvLFNVQlBMT1RfUEFUVEVSTjovXngoWzAtOV0qKXkoWzAtOV0qKSQvLEhPVVJfUEFUVEVSTjoiaG91ciIsV0VFS0RBWV9QQVRURVJOOiJkYXkgb2Ygd2VlayIsTUlORFJBRzo4LE1JTlNFTEVDVDoxMixNSU5aT09NOjIwLERSQUdHRVJTSVpFOjIwLEJFTkRQWDoxLjUsUkVEUkFXREVMQVk6NTAsU0VMRUNUREVMQVk6MTAwLFNFTEVDVElEOiItc2VsZWN0IixERkxUUkFOR0VYOlstMSw2XSxERkxUUkFOR0VZOlstMSw0XSx0cmFjZUxheWVyQ2xhc3NlczpbImltYWdlbGF5ZXIiLCJoZWF0bWFwbGF5ZXIiLCJjb250b3VyY2FycGV0bGF5ZXIiLCJjb250b3VybGF5ZXIiLCJmdW5uZWxsYXllciIsIndhdGVyZmFsbGxheWVyIiwiYmFybGF5ZXIiLCJjYXJwZXRsYXllciIsInZpb2xpbmxheWVyIiwiYm94bGF5ZXIiLCJvaGxjbGF5ZXIiLCJzY2F0dGVyY2FycGV0bGF5ZXIiLCJzY2F0dGVybGF5ZXIiXSxjbGlwT25BeGlzRmFsc2VRdWVyeTpbIi5zY2F0dGVybGF5ZXIiLCIuYmFybGF5ZXIiLCIuZnVubmVsbGF5ZXIiLCIud2F0ZXJmYWxsbGF5ZXIiXSxsYXllclZhbHVlMmxheWVyQ2xhc3M6eyJhYm92ZSB0cmFjZXMiOiJhYm92ZSIsImJlbG93IHRyYWNlcyI6ImJlbG93In19fSx7Ii4uLy4uL2xpYi9yZWdleCI6NzY2fV0sODA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9heGlzX2lkcyIpLmlkMm5hbWUsYT10KCIuL3NjYWxlX3pvb20iKSxvPXQoIi4vYXV0b3JhbmdlIikubWFrZVBhZEZuLHM9dCgiLi9hdXRvcmFuZ2UiKS5jb25jYXRFeHRyZW1lcyxsPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5BTE1PU1RfRVFVQUwsYz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9CTDtmdW5jdGlvbiB1KHQsZSxyLG4sYSl7dmFyIG8scyxsLGMsdT0icmFuZ2UiIT09YSxoPW5baShlKV0udHlwZSxmPVtdO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspaWYoKGw9cltzXSkhPT1lJiYoYz1uW2kobCldKS50eXBlPT09aClpZihjLmZpeGVkcmFuZ2Upe2lmKHUmJmMuYW5jaG9yKXtuW2koYy5hbmNob3IpXS5maXhlZHJhbmdlJiZmLnB1c2gobCl9fWVsc2UgZi5wdXNoKGwpO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspaWYodFtvXVtlXSl7dmFyIHA9dFtvXSxkPVtdO2ZvcihzPTA7czxmLmxlbmd0aDtzKyspcFtsPWZbc11dfHxkLnB1c2gobCk7cmV0dXJue2xpbmthYmxlQXhlczpkLHRoaXNHcm91cDpwfX1yZXR1cm57bGlua2FibGVBeGVzOmYsdGhpc0dyb3VwOm51bGx9fWZ1bmN0aW9uIGgodCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjO251bGw9PT1lPygoZT17fSlbcl09MSxjPXQubGVuZ3RoLHQucHVzaChlKSk6Yz10LmluZGV4T2YoZSk7dmFyIHU9T2JqZWN0LmtleXMoZSk7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylpZihzPXRbYV0sYSE9PWMmJnNbbl0pe3ZhciBoPXNbbl07Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzW2w9dVtvXV09aCppKmVbbF07cmV0dXJuIHZvaWQgdC5zcGxpY2UoYywxKX1pZigxIT09aSlmb3Iobz0wO288dS5sZW5ndGg7bysrKWVbdVtvXV0qPWk7ZVtuXT0xfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj10Ll9pbnB1dERvbWFpbixuPWNbdC5jb25zdHJhaW50b3dhcmRdLGk9clswXSsoclsxXS1yWzBdKSpuO3QuZG9tYWluPXQuX2lucHV0LmRvbWFpbj1baSsoclswXS1pKS9lLGkrKHJbMV0taSkvZV0sdC5zZXRTY2FsZSgpfXIuaGFuZGxlQ29uc3RyYWludERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsLGM9aS5hbGxBeGlzSWRzLGY9aS5sYXlvdXRPdXQscD1pLnNjYWxlYW5jaG9yRGZsdCxkPWkuY29uc3RyYWluRGZsdCxnPWYuX2F4aXNDb25zdHJhaW50R3JvdXBzLG09Zi5fYXhpc01hdGNoR3JvdXBzLHY9ZS5faWQseT12LmNoYXJBdCgwKSx4PSgoZi5fc3Bsb21BeGVzfHx7fSlbeV18fHt9KVt2XXx8e30sYj1lLl9pZCxfPWIuY2hhckF0KDApLHc9cigiY29uc3RyYWluIixkKTtpZihuLmNvZXJjZSh0LGUse2NvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOiJ4Ij09PV8/WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXTpbImJvdHRvbSIsIm1pZGRsZSIsInRvcCJdLGRmbHQ6IngiPT09Xz8iY2VudGVyIjoibWlkZGxlIn19LCJjb25zdHJhaW50b3dhcmQiKSwhdC5tYXRjaGVzJiYheC5tYXRjaGVzfHxlLmZpeGVkcmFuZ2V8fChvPXUobSxiLGMsZiksYT1uLmNvZXJjZSh0LGUse21hdGNoZXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpvLmxpbmthYmxlQXhlc3x8W10sZGZsdDp4Lm1hdGNoZXN9fSwibWF0Y2hlcyIpKSxhfHxlLmZpeGVkcmFuZ2UmJiJkb21haW4iIT09d3x8IXQuc2NhbGVhbmNob3ImJiFwfHwobD11KGcsYixjLGYsdykscz1uLmNvZXJjZSh0LGUse3NjYWxlYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6bC5saW5rYWJsZUF4ZXN8fFtdfX0sInNjYWxlYW5jaG9yIixwKSksYT8oZGVsZXRlIGUuY29uc3RyYWluLGgobSxvLnRoaXNHcm91cCxiLGEsMSkpOi0xIT09Yy5pbmRleE9mKHQubWF0Y2hlcykmJm4ud2FybigiaWdub3JlZCAiK2UuX25hbWUrJy5tYXRjaGVzOiAiJyt0Lm1hdGNoZXMrJyIgdG8gYXZvaWQgZWl0aGVyIGFuIGluZmluaXRlIGxvb3Agb3IgYmVjYXVzZSB0aGUgdGFyZ2V0IGF4aXMgaGFzIGZpeGVkIHJhbmdlLicpLHMpe3ZhciBUPXIoInNjYWxlcmF0aW8iKTtUfHwoVD1lLnNjYWxlcmF0aW89MSksaChnLGwudGhpc0dyb3VwLGIscyxUKX1lbHNlLTEhPT1jLmluZGV4T2YodC5zY2FsZWFuY2hvcikmJm4ud2FybigiaWdub3JlZCAiK2UuX25hbWUrJy5zY2FsZWFuY2hvcjogIicrdC5zY2FsZWFuY2hvcisnIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgcG9zc2libHkgaW5jb25zaXN0ZW50IHNjYWxlcmF0aW9zLCBvciBiZWNhdXNlIHRoZSB0YXJnZXQgYXhpcyBoYXMgZml4ZWQgcmFuZ2Ugb3IgdGhpcyBheGlzIGRlY2xhcmVzIGEgKm1hdGNoZXMqIGNvbnN0cmFpbnQuJyl9LHIuZW5mb3JjZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYyx1LGgscCxkPXQuX2Z1bGxMYXlvdXQsZz1kLl9heGlzQ29uc3RyYWludEdyb3Vwc3x8W107Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKyl7dmFyIG09Z1tlXSx2PU9iamVjdC5rZXlzKG0pLHk9MS8wLHg9MCxiPTEvMCxfPXt9LHc9e30sVD0hMTtmb3Iocj0wO3I8di5sZW5ndGg7cisrKXdbbj12W3JdXT1jPWRbaShuKV0sYy5faW5wdXREb21haW4/Yy5kb21haW49Yy5faW5wdXREb21haW4uc2xpY2UoKTpjLl9pbnB1dERvbWFpbj1jLmRvbWFpbi5zbGljZSgpLGMuX2lucHV0UmFuZ2V8fChjLl9pbnB1dFJhbmdlPWMucmFuZ2Uuc2xpY2UoKSksYy5zZXRTY2FsZSgpLF9bbl09dT1NYXRoLmFicyhjLl9tKS9tW25dLHk9TWF0aC5taW4oeSx1KSwiZG9tYWluIiE9PWMuY29uc3RyYWluJiZjLl9jb25zdHJhaW50U2hyaW5rYWJsZXx8KGI9TWF0aC5taW4oYix1KSksZGVsZXRlIGMuX2NvbnN0cmFpbnRTaHJpbmthYmxlLHg9TWF0aC5tYXgoeCx1KSwiZG9tYWluIj09PWMuY29uc3RyYWluJiYoVD0hMCk7aWYoISh5PmwqeCl8fFQpZm9yKHI9MDtyPHYubGVuZ3RoO3IrKylpZih1PV9bbj12W3JdXSxoPShjPXdbbl0pLmNvbnN0cmFpbix1IT09Ynx8ImRvbWFpbiI9PT1oKWlmKHA9dS9iLCJyYW5nZSI9PT1oKWEoYyxwKTtlbHNle3ZhciBrPWMuX2lucHV0RG9tYWluLE09KGMuZG9tYWluWzFdLWMuZG9tYWluWzBdKS8oa1sxXS1rWzBdKSxBPShjLnIybChjLnJhbmdlWzFdKS1jLnIybChjLnJhbmdlWzBdKSkvKGMucjJsKGMuX2lucHV0UmFuZ2VbMV0pLWMucjJsKGMuX2lucHV0UmFuZ2VbMF0pKTtpZigocC89TSkqQTwxKXtjLmRvbWFpbj1jLl9pbnB1dC5kb21haW49ay5zbGljZSgpLGEoYyxwKTtjb250aW51ZX1pZihBPDEmJihjLnJhbmdlPWMuX2lucHV0LnJhbmdlPWMuX2lucHV0UmFuZ2Uuc2xpY2UoKSxwKj1BKSxjLmF1dG9yYW5nZSl7dmFyIFM9Yy5yMmwoYy5yYW5nZVswXSksRT1jLnIybChjLnJhbmdlWzFdKSxDPShTK0UpLzIsTD1DLFA9QyxJPU1hdGguYWJzKEUtQyksej1DLUkqcCoxLjAwMDEsTz1DK0kqcCoxLjAwMDEsRD1vKGMpO2YoYyxwKTt2YXIgUixGLEI9TWF0aC5hYnMoYy5fbSksTj1zKHQsYyksaj1OLm1pbixVPU4ubWF4O2ZvcihGPTA7RjxqLmxlbmd0aDtGKyspKFI9altGXS52YWwtRChqW0ZdKS9CKT56JiZSPEwmJihMPVIpO2ZvcihGPTA7RjxVLmxlbmd0aDtGKyspKFI9VVtGXS52YWwrRChVW0ZdKS9CKTxPJiZSPlAmJihQPVIpO3AvPShQLUwpLygyKkkpLEw9Yy5sMnIoTCksUD1jLmwycihQKSxjLnJhbmdlPWMuX2lucHV0LnJhbmdlPVM8RT9bTCxQXTpbUCxMXX1mKGMscCl9fX0sci5jbGVhbj1mdW5jdGlvbih0LGUpe2lmKGUuX2lucHV0RG9tYWluKXtmb3IodmFyIHI9ITEsbj1lLl9pZCxpPXQuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLGE9MDthPGkubGVuZ3RoO2ErKylpZihpW2FdW25dKXtyPSEwO2JyZWFrfXImJiJkb21haW4iPT09ZS5jb25zdHJhaW58fChlLl9pbnB1dC5kb21haW49ZS5kb21haW49ZS5faW5wdXREb21haW4sZGVsZXRlIGUuX2lucHV0RG9tYWluKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjcxNywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuLi8uLi9saWIiOjc1MCwiLi9hdXRvcmFuZ2UiOjc5OCwiLi9heGlzX2lkcyI6ODAyLCIuL3NjYWxlX3pvb20iOjgxN31dLDgwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGY9dCgiLi9heGVzIikscD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZD10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IiksZz10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKSxtPWcuc2VsZWN0aW5nT3JEcmF3aW5nLHY9Zy5mcmVlTW9kZSx5PXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX1RMLHg9dCgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksYj10KCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMsXz10KCIuLi9wbG90cyIpLHc9dCgiLi9heGlzX2lkcyIpLmdldEZyb21JZCxUPXQoIi4vc2VsZWN0IikucHJlcFNlbGVjdCxrPXQoIi4vc2VsZWN0IikuY2xlYXJTZWxlY3QsTT10KCIuL3NlbGVjdCIpLnNlbGVjdE9uQ2xpY2ssQT10KCIuL3NjYWxlX3pvb20iKSxTPXQoIi4vY29uc3RhbnRzIiksRT1TLk1JTkRSQUcsQz1TLk1JTlpPT00sTD0hMDtmdW5jdGlvbiBQKHQsZSxyLG4pe3ZhciBpPXMuZW5zdXJlU2luZ2xlKHQuZHJhZ2xheWVyLGUsciwoZnVuY3Rpb24oZSl7ZS5jbGFzc2VkKCJkcmFnIiwhMCkuc3R5bGUoe2ZpbGw6InRyYW5zcGFyZW50Iiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigiZGF0YS1zdWJwbG90Iix0LmlkKX0pKTtyZXR1cm4gaS5jYWxsKHAsbiksaS5ub2RlKCl9ZnVuY3Rpb24gSSh0LGUscixpLGEsbyxzKXt2YXIgbD1QKHQsInJlY3QiLGUscik7cmV0dXJuIG4uc2VsZWN0KGwpLmNhbGwodS5zZXRSZWN0LGksYSxvLHMpLGx9ZnVuY3Rpb24geih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKCF0W3JdLmZpeGVkcmFuZ2UpcmV0dXJuIGU7cmV0dXJuIiJ9ZnVuY3Rpb24gTyh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO2lmKCFvLmZpeGVkcmFuZ2UpaWYoby5yYW5nZWJyZWFrcyl7dmFyIHM9InkiPT09by5faWQuY2hhckF0KDApLGw9cz8xLWU6ZSxjPXM/MS1yOnI7bltvLl9uYW1lKyIucmFuZ2VbMF0iXT1vLmwycihvLnAybChsKm8uX2xlbmd0aCkpLG5bby5fbmFtZSsiLnJhbmdlWzFdIl09by5sMnIoby5wMmwoYypvLl9sZW5ndGgpKX1lbHNle3ZhciB1PW8uX3JsWzBdLGg9by5fcmxbMV0tdTtuW28uX25hbWUrIi5yYW5nZVswXSJdPW8ubDJyKHUraCplKSxuW28uX25hbWUrIi5yYW5nZVsxXSJdPW8ubDJyKHUraCpyKX19aWYoaSYmaS5sZW5ndGgpe3ZhciBmPShlKygxLXIpKS8yO08oaSxmLDEtZixuLFtdKX19ZnVuY3Rpb24gRCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKCFuLmZpeGVkcmFuZ2UpaWYobi5yYW5nZWJyZWFrcyl7dmFyIGk9bi5fbGVuZ3RoLGE9KG4ucDJsKDArZSktbi5wMmwoMCkrKG4ucDJsKGkrZSktbi5wMmwoaSkpKS8yO24ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWEpLG4ubDJyKG4uX3JsWzFdLWEpXX1lbHNlIG4ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWUvbi5fbSksbi5sMnIobi5fcmxbMV0tZS9uLl9tKV19fWZ1bmN0aW9uIFIodCl7cmV0dXJuIDEtKHQ+PTA/TWF0aC5taW4odCwuOSk6MS8oMS9NYXRoLm1heCh0LC0uMykrMy4yMjIpKX1mdW5jdGlvbiBGKHQsZSxyLG4saSl7cmV0dXJuIHQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94Iikuc3R5bGUoe2ZpbGw6ZT4uMj8icmdiYSgwLDAsMCwwKSI6InJnYmEoMjU1LDI1NSwyNTUsMCkiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIityKyIsICIrbisiKSIpLmF0dHIoImQiLGkrIloiKX1mdW5jdGlvbiBCKHQsZSxyKXtyZXR1cm4gdC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOmMuYmFja2dyb3VuZCxzdHJva2U6Yy5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UrIiwgIityKyIpIikuYXR0cigiZCIsIk0wLDBaIil9ZnVuY3Rpb24gTih0LGUscixuLGksYSl7dC5hdHRyKCJkIixuKyJNIityLmwrIiwiK3IudCsidiIrci5oKyJoIityLncrInYtIityLmgrImgtIityLncrIloiKSxqKHQsZSxpLGEpfWZ1bmN0aW9uIGoodCxlLHIsbil7cnx8KHQudHJhbnNpdGlvbigpLnN0eWxlKCJmaWxsIixuPi4yPyJyZ2JhKDAsMCwwLDAuNCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiKS5kdXJhdGlvbigyMDApLGUudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxKS5kdXJhdGlvbigyMDApKX1mdW5jdGlvbiBVKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnpvb21ib3gsLmpzLXpvb21ib3gtYmFja2Ryb3AsLmpzLXpvb21ib3gtbWVudSwuem9vbWJveC1jb3JuZXJzIikucmVtb3ZlKCl9ZnVuY3Rpb24gVih0KXtMJiZ0LmRhdGEmJnQuX2NvbnRleHQuc2hvd1RpcHMmJihzLm5vdGlmaWVyKHMuXyh0LCJEb3VibGUtY2xpY2sgdG8gem9vbSBiYWNrIG91dCIpLCJsb25nIiksTD0hMSl9ZnVuY3Rpb24gcSh0KXt2YXIgZT1NYXRoLmZsb29yKE1hdGgubWluKHQuYi10LnQsdC5yLXQubCxDKS8yKTtyZXR1cm4iTSIrKHQubC0zLjUpKyIsIisodC50LS41K2UpKyJoM3YiKy1lKyJoIitlKyJ2LTNoLSIrKGUrMykrIlpNIisodC5yKzMuNSkrIiwiKyh0LnQtLjUrZSkrImgtM3YiKy1lKyJoIistZSsidi0zaCIrKGUrMykrIlpNIisodC5yKzMuNSkrIiwiKyh0LmIrLjUtZSkrImgtM3YiK2UrImgiKy1lKyJ2M2giKyhlKzMpKyJaTSIrKHQubC0zLjUpKyIsIisodC5iKy41LWUpKyJoM3YiK2UrImgiK2UrInYzaC0iKyhlKzMpKyJaIn1mdW5jdGlvbiBIKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8sbCxjPSExLHU9e30saD17fSxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBwPWVbZl07Zm9yKGkgaW4gcilpZihwW2ldKXtmb3IobyBpbiBwKSgieCI9PT1vLmNoYXJBdCgwKT9yOm4pW29dfHwodVtvXT1pKTtmb3IoYSBpbiBuKXBbYV0mJihjPSEwKX1mb3IoYSBpbiBuKWlmKHBbYV0pZm9yKGwgaW4gcCkoIngiPT09bC5jaGFyQXQoMCk/cjpuKVtsXXx8KGhbbF09YSl9YyYmKHMuZXh0ZW5kRmxhdCh1LGgpLGg9e30pO3ZhciBkPXt9LGc9W107Zm9yKG8gaW4gdSl7dmFyIG09dyh0LG8pO2cucHVzaChtKSxkW20uX2lkXT1tfXZhciB2PXt9LHk9W107Zm9yKGwgaW4gaCl7dmFyIHg9dyh0LGwpO3kucHVzaCh4KSx2W3guX2lkXT14fXJldHVybnt4YUhhc2g6ZCx5YUhhc2g6dix4YXhlczpnLHlheGVzOnkseExpbmtzOnUseUxpbmtzOmgsaXNTdWJwbG90Q29uc3RyYWluZWQ6Y319ZnVuY3Rpb24gRyh0LGUpe2lmKGEpe3ZhciByPXZvaWQgMCE9PXQub253aGVlbD8id2hlZWwiOiJtb3VzZXdoZWVsIjt0Ll9vbndoZWVsJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIocix0Ll9vbndoZWVsKSx0Ll9vbndoZWVsPWUsdC5hZGRFdmVudExpc3RlbmVyKHIsZSx7cGFzc2l2ZTohMX0pfWVsc2Ugdm9pZCAwIT09dC5vbndoZWVsP3Qub253aGVlbD1lOnZvaWQgMCE9PXQub25tb3VzZXdoZWVsP3Qub25tb3VzZXdoZWVsPWU6dC5pc0FkZGVkV2hlZWxFdmVudHx8KHQuaXNBZGRlZFdoZWVsRXZlbnQ9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsZSx7cGFzc2l2ZTohMX0pKX1mdW5jdGlvbiBZKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX1lLmV4cG9ydHM9e21ha2VEcmFnQm94OmZ1bmN0aW9uKHQsZSxyLGEsYyxwLGcsTCl7dmFyIFAsaixXLFosWCxKLEssUSwkLHR0LGV0LHJ0LG50LGl0LGF0LG90LHN0LGx0LGN0LHV0LGh0LGZ0PXQuX2Z1bGxMYXlvdXQuX3pvb21sYXllcixwdD1nK0w9PT0ibnNldyIsZHQ9MT09PShnK0wpLmxlbmd0aDtmdW5jdGlvbiBndCgpe2lmKFA9ZS54YXhpcyxqPWUueWF4aXMsJD1QLl9sZW5ndGgsdHQ9ai5fbGVuZ3RoLEs9UC5fb2Zmc2V0LFE9ai5fb2Zmc2V0LChXPXt9KVtQLl9pZF09UCwoWj17fSlbai5faWRdPWosZyYmTClmb3IodmFyIHI9ZS5vdmVybGF5cyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0ueGF4aXM7V1tpLl9pZF09aTt2YXIgYT1yW25dLnlheGlzO1pbYS5faWRdPWF9WD1ZKFcpLEo9WShaKSxudD16KFgsTCksaXQ9eihKLGcpLGF0PSFpdCYmIW50LGV0PUgodCx0Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxXLFopLHJ0PUgodCx0Ll9mdWxsTGF5b3V0Ll9heGlzTWF0Y2hHcm91cHMsVyxaKSxvdD1MfHxldC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8cnQuaXNTdWJwbG90Q29uc3RyYWluZWQsc3Q9Z3x8ZXQuaXNTdWJwbG90Q29uc3RyYWluZWR8fHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkO3ZhciBvPXQuX2Z1bGxMYXlvdXQ7bHQ9by5faGFzKCJzY2F0dGVyZ2wiKSxjdD1vLl9oYXMoInNwbG9tIiksdXQ9by5faGFzKCJzdmciKX1ndCgpO3ZhciBtdD1mdW5jdGlvbih0LGUscil7aWYoIXQpcmV0dXJuInBvaW50ZXIiO2lmKCJuc2V3Ij09PXQpcmV0dXJuIHI/IiI6InBhbiI9PT1lPyJtb3ZlIjoiY3Jvc3NoYWlyIjtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpKyItcmVzaXplIn0oaXQrbnQsdC5fZnVsbExheW91dC5kcmFnbW9kZSxwdCksdnQ9SShlLGcrTCsiZHJhZyIsbXQscixhLGMscCk7aWYoYXQmJiFwdClyZXR1cm4gdnQub25tb3VzZWRvd249bnVsbCx2dC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix2dDt2YXIgeXQseHQsYnQsX3Qsd3QsVHQsa3QsTXQsQXQsU3QsRXQ9e2VsZW1lbnQ6dnQsZ2Q6dCxwbG90aW5mbzplfTtmdW5jdGlvbiBDdCgpe0V0LnBsb3RpbmZvLnNlbGVjdGlvbj0hMSxrKHQpfWZ1bmN0aW9uIEx0KHQscil7dmFyIGk9RXQuZ2Q7aWYoaS5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MClpLl9mdWxsTGF5b3V0Ll9kZWFjdGl2YXRlU2hhcGUoaSk7ZWxzZXt2YXIgYT1pLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtpZihVKGkpLDIhPT10fHxkdHx8VXQoKSxwdClhLmluZGV4T2YoInNlbGVjdCIpPi0xJiZNKHIsaSxYLEosZS5pZCxFdCksYS5pbmRleE9mKCJldmVudCIpPi0xJiZoLmNsaWNrKGkscixlLmlkKTtlbHNlIGlmKDE9PT10JiZkdCl7dmFyIHM9Zz9qOlAsYz0icyI9PT1nfHwidyI9PT1MPzA6MSx1PXMuX25hbWUrIi5yYW5nZVsiK2MrIl0iLGY9ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQucmFuZ2VbZV0sYT1NYXRoLmFicyhpLXQucmFuZ2VbMS1lXSk7cmV0dXJuImRhdGUiPT09dC50eXBlP2k6ImxvZyI9PT10LnR5cGU/KHI9TWF0aC5jZWlsKE1hdGgubWF4KDAsLU1hdGgubG9nKGEpL01hdGguTE4xMCkpKzMsbi5mb3JtYXQoIi4iK3IrImciKShNYXRoLnBvdygxMCxpKSkpOihyPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMoaSkpL01hdGguTE4xMCktTWF0aC5mbG9vcihNYXRoLmxvZyhhKS9NYXRoLkxOMTApKzQsbi5mb3JtYXQoIi4iK1N0cmluZyhyKSsiZyIpKGkpKX0ocyxjKSxwPSJsZWZ0IixkPSJtaWRkbGUiO2lmKHMuZml4ZWRyYW5nZSlyZXR1cm47Zz8oZD0ibiI9PT1nPyJ0b3AiOiJib3R0b20iLCJyaWdodCI9PT1zLnNpZGUmJihwPSJyaWdodCIpKToiZSI9PT1MJiYocD0icmlnaHQiKSxpLl9jb250ZXh0LnNob3dBeGlzUmFuZ2VFbnRyeUJveGVzJiZuLnNlbGVjdCh2dCkuY2FsbChsLm1ha2VFZGl0YWJsZSx7Z2Q6aSxpbW1lZGlhdGU6ITAsYmFja2dyb3VuZDppLl9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3IsdGV4dDpTdHJpbmcoZiksZmlsbDpzLnRpY2tmb250P3MudGlja2ZvbnQuY29sb3I6IiM0NDQiLGhvcml6b250YWxBbGlnbjpwLHZlcnRpY2FsQWxpZ246ZH0pLm9uKCJlZGl0IiwoZnVuY3Rpb24odCl7dmFyIGU9cy5kMnIodCk7dm9pZCAwIT09ZSYmby5jYWxsKCJfZ3VpUmVsYXlvdXQiLGksdSxlKX0pKX19fWZ1bmN0aW9uIFB0KGUscil7aWYodC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbilyZXR1cm4hMTt2YXIgbj1NYXRoLm1heCgwLE1hdGgubWluKCQsZSt5dCkpLGk9TWF0aC5tYXgoMCxNYXRoLm1pbih0dCxyK3h0KSksYT1NYXRoLmFicyhuLXl0KSxvPU1hdGguYWJzKGkteHQpO2Z1bmN0aW9uIHMoKXtrdD0iIixidC5yPWJ0LmwsYnQudD1idC5iLEF0LmF0dHIoImQiLCJNMCwwWiIpfWlmKGJ0Lmw9TWF0aC5taW4oeXQsbiksYnQucj1NYXRoLm1heCh5dCxuKSxidC50PU1hdGgubWluKHh0LGkpLGJ0LmI9TWF0aC5tYXgoeHQsaSksZXQuaXNTdWJwbG90Q29uc3RyYWluZWQpYT5DfHxvPkM/KGt0PSJ4eSIsYS8kPm8vdHQ/KG89YSp0dC8kLHh0Pmk/YnQudD14dC1vOmJ0LmI9eHQrbyk6KGE9byokL3R0LHl0Pm4/YnQubD15dC1hOmJ0LnI9eXQrYSksQXQuYXR0cigiZCIscShidCkpKTpzKCk7ZWxzZSBpZihydC5pc1N1YnBsb3RDb25zdHJhaW5lZClpZihhPkN8fG8+Qyl7a3Q9Inh5Ijt2YXIgbD1NYXRoLm1pbihidC5sLyQsKHR0LWJ0LmIpL3R0KSxjPU1hdGgubWF4KGJ0LnIvJCwodHQtYnQudCkvdHQpO2J0Lmw9bCokLGJ0LnI9YyokLGJ0LmI9KDEtbCkqdHQsYnQudD0oMS1jKSp0dCxBdC5hdHRyKCJkIixxKGJ0KSl9ZWxzZSBzKCk7ZWxzZSFpdHx8bzxNYXRoLm1pbihNYXRoLm1heCguNiphLEUpLEMpP2E8RXx8IW50P3MoKTooYnQudD0wLGJ0LmI9dHQsa3Q9IngiLEF0LmF0dHIoImQiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIk0iKyh0LmwtLjUpKyIsIisoZS1DLS41KSsiaC0zdiIrKDIqQysxKSsiaDNaTSIrKHQucisuNSkrIiwiKyhlLUMtLjUpKyJoM3YiKygyKkMrMSkrImgtM1oifShidCx4dCkpKTohbnR8fGE8TWF0aC5taW4oLjYqbyxDKT8oYnQubD0wLGJ0LnI9JCxrdD0ieSIsQXQuYXR0cigiZCIsZnVuY3Rpb24odCxlKXtyZXR1cm4iTSIrKGUtQy0uNSkrIiwiKyh0LnQtLjUpKyJ2LTNoIisoMipDKzEpKyJ2M1pNIisoZS1DLS41KSsiLCIrKHQuYisuNSkrInYzaCIrKDIqQysxKSsidi0zWiJ9KGJ0LHl0KSkpOihrdD0ieHkiLEF0LmF0dHIoImQiLHEoYnQpKSk7YnQudz1idC5yLWJ0LmwsYnQuaD1idC5iLWJ0LnQsa3QmJihTdD0hMCksdC5fZHJhZ2dlZD1TdCxOKE10LEF0LGJ0LHd0LFR0LF90KSxJdCgpLHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixodCksVHQ9ITB9ZnVuY3Rpb24gSXQoKXtodD17fSwieHkiIT09a3QmJiJ4IiE9PWt0fHwoTyhYLGJ0LmwvJCxidC5yLyQsaHQsZXQueGF4ZXMpLE50KCJ4IixodCkpLCJ4eSIhPT1rdCYmInkiIT09a3R8fChPKEosKHR0LWJ0LmIpL3R0LCh0dC1idC50KS90dCxodCxldC55YXhlcyksTnQoInkiLGh0KSl9ZnVuY3Rpb24genQoKXtJdCgpLFUodCksVnQoKSxWKHQpfUV0LnByZXBGbj1mdW5jdGlvbihlLHIsbil7dmFyIGE9RXQuZHJhZ21vZGUsbz10Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO28hPT1hJiYoRXQuZHJhZ21vZGU9byksZ3QoKSxhdHx8KHB0P2Uuc2hpZnRLZXk/InBhbiI9PT1vP289Inpvb20iOm0obyl8fChvPSJwYW4iKTplLmN0cmxLZXkmJihvPSJwYW4iKTpvPSJwYW4iKSx2KG8pP0V0Lm1pbkRyYWc9MTpFdC5taW5EcmFnPXZvaWQgMCxtKG8pPyhFdC54YXhlcz1YLEV0LnlheGVzPUosVChlLHIsbixFdCxvKSk6KEV0LmNsaWNrRm49THQsbShhKSYmQ3QoKSxhdHx8KCJ6b29tIj09PW8/KEV0Lm1vdmVGbj1QdCxFdC5kb25lRm49enQsRXQubWluRHJhZz0xLGZ1bmN0aW9uKGUscixuKXt2YXIgYT12dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt5dD1yLWEubGVmdCx4dD1uLWEudG9wLGJ0PXtsOnl0LHI6eXQsdzowLHQ6eHQsYjp4dCxoOjB9LF90PXQuX2htcGl4Y291bnQ/dC5faG1sdW1jb3VudC90Ll9obXBpeGNvdW50OmkodC5fZnVsbExheW91dC5wbG90X2JnY29sb3IpLmdldEx1bWluYW5jZSgpLFR0PSExLGt0PSJ4eSIsU3Q9ITEsTXQ9RihmdCxfdCxLLFEsd3Q9Ik0wLDBIIiskKyJWIit0dCsiSDBWMCIpLEF0PUIoZnQsSyxRKX0oMCxyLG4pKToicGFuIj09PW8mJihFdC5tb3ZlRm49QnQsRXQuZG9uZUZuPVZ0KSkpLHQuX2Z1bGxMYXlvdXQuX3JlZHJhZz1mdW5jdGlvbigpe3ZhciBlPXQuX2RyYWdkYXRhO2lmKGUmJmUuZWxlbWVudD09PXZ0KXt2YXIgcj10Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO20ocil8fChndCgpLHF0KFswLDAsJCx0dF0pLEV0Lm1vdmVGbihlLmR4LGUuZHkpKX19fSxkLmluaXQoRXQpO3ZhciBPdD1bMCwwLCQsdHRdLER0PW51bGwsUnQ9Uy5SRURSQVdERUxBWSxGdD1lLm1haW5wbG90P3QuX2Z1bGxMYXlvdXQuX3Bsb3RzW2UubWFpbnBsb3RdOmU7ZnVuY3Rpb24gQnQoZSxyKXtpZighdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbil7aWYodC5fZnVsbExheW91dC5fcmVwbG90dGluZz0hMCwiZXciPT09bnR8fCJucyI9PT1pdClyZXR1cm4gbnQmJihEKFgsZSksTnQoIngiKSksaXQmJihEKEosciksTnQoInkiKSkscXQoW250Py1lOjAsaXQ/LXI6MCwkLHR0XSksanQoKSx2b2lkIHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixodCk7aWYoZXQuaXNTdWJwbG90Q29uc3RyYWluZWQmJm50JiZpdCl7dmFyIG49InciPT09bnQ9PSgibiI9PT1pdCk/MTotMSxpPShlLyQrbipyL3R0KS8yO2U9aSokLHI9bippKnR0fSJ3Ij09PW50P2U9bChYLDAsZSk6ImUiPT09bnQ/ZT1sKFgsMSwtZSk6bnR8fChlPTApLCJuIj09PWl0P3I9bChKLDEscik6InMiPT09aXQ/cj1sKEosMCwtcik6aXR8fChyPTApO3ZhciBhPSJ3Ij09PW50P2U6MCxvPSJuIj09PWl0P3I6MDtpZihldC5pc1N1YnBsb3RDb25zdHJhaW5lZCl7dmFyIHM7aWYoIW50JiYxPT09aXQubGVuZ3RoKXtmb3Iocz0wO3M8WC5sZW5ndGg7cysrKVhbc10ucmFuZ2U9WFtzXS5fci5zbGljZSgpLEEoWFtzXSwxLXIvdHQpO2E9KGU9ciokL3R0KS8yfWlmKCFpdCYmMT09PW50Lmxlbmd0aCl7Zm9yKHM9MDtzPEoubGVuZ3RoO3MrKylKW3NdLnJhbmdlPUpbc10uX3Iuc2xpY2UoKSxBKEpbc10sMS1lLyQpO289KHI9ZSp0dC8kKS8yfX1OdCgieCIpLE50KCJ5IikscXQoW2EsbywkLWUsdHQtcl0pLGp0KCksdC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGh0KX1mdW5jdGlvbiBsKHQsZSxyKXtmb3IodmFyIG4saSxhPTEtZSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aWYoIXMuZml4ZWRyYW5nZSl7bj1zLGk9cy5fcmxbYV0rKHMuX3JsW2VdLXMuX3JsW2FdKS9SKHIvcy5fbGVuZ3RoKTt2YXIgbD1zLmwycihpKTshMSE9PWwmJnZvaWQgMCE9PWwmJihzLnJhbmdlW2VdPWwpfX1yZXR1cm4gbi5fbGVuZ3RoKihuLl9ybFtlXS1pKS8obi5fcmxbZV0tbi5fcmxbYV0pfX1mdW5jdGlvbiBOdCh0LGUpe2Zvcih2YXIgcj1ydC5pc1N1YnBsb3RDb25zdHJhaW5lZD97eDpKLHk6WH1bdF06cnRbdCsiYXhlcyJdLG49cnQuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6WCx5Okp9W3RdOltdLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPWEuX2lkLHM9cnQueExpbmtzW29dfHxydC55TGlua3Nbb10sbD1uWzBdfHxXW3NdfHxaW3NdO2wmJihlPyhlW2EuX25hbWUrIi5yYW5nZVswXSJdPWVbbC5fbmFtZSsiLnJhbmdlWzBdIl0sZVthLl9uYW1lKyIucmFuZ2VbMV0iXT1lW2wuX25hbWUrIi5yYW5nZVsxXSJdKTphLnJhbmdlPWwucmFuZ2Uuc2xpY2UoKSl9fWZ1bmN0aW9uIGp0KCl7dmFyIGUscj1bXTtmdW5jdGlvbiBuKHQpe2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5maXhlZHJhbmdlfHxyLnB1c2godFtlXS5faWQpfWZvcihvdCYmKG4oWCksbihldC54YXhlcyksbihydC54YXhlcykpLHN0JiYobihKKSxuKGV0LnlheGVzKSxuKHJ0LnlheGVzKSksaHQ9e30sZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdLGE9dyh0LGkpO2YuZHJhd09uZSh0LGEse3NraXBUaXRsZTohMH0pLGh0W2EuX25hbWUrIi5yYW5nZVswXSJdPWEucmFuZ2VbMF0saHRbYS5fbmFtZSsiLnJhbmdlWzFdIl09YS5yYW5nZVsxXX1mLnJlZHJhd0NvbXBvbmVudHModCxyKX1mdW5jdGlvbiBVdCgpe2lmKCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXt2YXIgZT10Ll9jb250ZXh0LmRvdWJsZUNsaWNrLHI9W107bnQmJihyPXIuY29uY2F0KFgpKSxpdCYmKHI9ci5jb25jYXQoSikpLHJ0LnhheGVzJiYocj1yLmNvbmNhdChydC54YXhlcykpLHJ0LnlheGVzJiYocj1yLmNvbmNhdChydC55YXhlcykpO3ZhciBuLGksYSxzPXt9O2lmKCJyZXNldCthdXRvc2l6ZSI9PT1lKWZvcihlPSJhdXRvc2l6ZSIsaT0wO2k8ci5sZW5ndGg7aSsrKWlmKChuPXJbaV0pLl9yYW5nZUluaXRpYWwmJihuLnJhbmdlWzBdIT09bi5fcmFuZ2VJbml0aWFsWzBdfHxuLnJhbmdlWzFdIT09bi5fcmFuZ2VJbml0aWFsWzFdKXx8IW4uX3JhbmdlSW5pdGlhbCYmIW4uYXV0b3JhbmdlKXtlPSJyZXNldCI7YnJlYWt9aWYoImF1dG9zaXplIj09PWUpZm9yKGk9MDtpPHIubGVuZ3RoO2krKykobj1yW2ldKS5maXhlZHJhbmdlfHwoc1tuLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApO2Vsc2UgaWYoInJlc2V0Ij09PWUpZm9yKChudHx8ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQpJiYocj1yLmNvbmNhdChldC54YXhlcykpLGl0JiYhZXQuaXNTdWJwbG90Q29uc3RyYWluZWQmJihyPXIuY29uY2F0KGV0LnlheGVzKSksZXQuaXNTdWJwbG90Q29uc3RyYWluZWQmJihudD9pdHx8KHI9ci5jb25jYXQoSikpOnI9ci5jb25jYXQoWCkpLGk9MDtpPHIubGVuZ3RoO2krKykobj1yW2ldKS5maXhlZHJhbmdlfHwobi5fcmFuZ2VJbml0aWFsPyhhPW4uX3JhbmdlSW5pdGlhbCxzW24uX25hbWUrIi5yYW5nZVswXSJdPWFbMF0sc1tuLl9uYW1lKyIucmFuZ2VbMV0iXT1hWzFdKTpzW24uX25hbWUrIi5hdXRvcmFuZ2UiXT0hMCk7dC5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLG8uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHMpfX1mdW5jdGlvbiBWdCgpe3F0KFswLDAsJCx0dF0pLHMuc3luY09yQXN5bmMoW18ucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQuX3JlcGxvdHRpbmc9ITEsby5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsaHQpfV0sdCl9ZnVuY3Rpb24gcXQoZSl7dmFyIHIsbixpLGEsbD10Ll9mdWxsTGF5b3V0LGM9bC5fcGxvdHMsaD1sLl9zdWJwbG90cy5jYXJ0ZXNpYW47aWYoY3QmJm8uc3VicGxvdHNSZWdpc3RyeS5zcGxvbS5kcmFnKHQpLGx0KWZvcihyPTA7cjxoLmxlbmd0aDtyKyspaWYoaT0obj1jW2hbcl1dKS54YXhpcyxhPW4ueWF4aXMsbi5fc2NlbmUpe3ZhciBmPXMuc2ltcGxlTWFwKGkucmFuZ2UsaS5yMmwpLHA9cy5zaW1wbGVNYXAoYS5yYW5nZSxhLnIybCk7bi5fc2NlbmUudXBkYXRlKHtyYW5nZTpbZlswXSxwWzBdLGZbMV0scFsxXV19KX1pZigoY3R8fGx0KSYmKHgodCksYih0KSksdXQpe3ZhciBkPWVbMl0vUC5fbGVuZ3RoLG09ZVszXS9qLl9sZW5ndGg7Zm9yKHI9MDtyPGgubGVuZ3RoO3IrKyl7aT0obj1jW2hbcl1dKS54YXhpcyxhPW4ueWF4aXM7dmFyIHYseSxfLHcsVD1vdCYmIWkuZml4ZWRyYW5nZSYmV1tpLl9pZF0saz1zdCYmIWEuZml4ZWRyYW5nZSYmWlthLl9pZF07aWYoVD8odj1kLF89TD9lWzBdOll0KGksdikpOnJ0LnhhSGFzaFtpLl9pZF0/KHY9ZCxfPWVbMF0qaS5fbGVuZ3RoL1AuX2xlbmd0aCk6cnQueWFIYXNoW2kuX2lkXT8odj1tLF89Im5zIj09PWl0Py1lWzFdKmkuX2xlbmd0aC9qLl9sZW5ndGg6WXQoaSx2LHtuOiJ0b3AiLHM6ImJvdHRvbSJ9W2l0XSkpOl89R3QoaSx2PUh0KGksZCxtKSksaz8oeT1tLHc9Zz9lWzFdOll0KGEseSkpOnJ0LnlhSGFzaFthLl9pZF0/KHk9bSx3PWVbMV0qYS5fbGVuZ3RoL2ouX2xlbmd0aCk6cnQueGFIYXNoW2EuX2lkXT8oeT1kLHc9ImV3Ij09PW50Py1lWzBdKmEuX2xlbmd0aC9QLl9sZW5ndGg6WXQoYSx5LHtlOiJyaWdodCIsdzoibGVmdCJ9W250XSkpOnc9R3QoYSx5PUh0KGEsZCxtKSksdnx8eSl7dnx8KHY9MSkseXx8KHk9MSk7dmFyIE09aS5fb2Zmc2V0LV8vdixBPWEuX29mZnNldC13L3k7bi5jbGlwUmVjdC5jYWxsKHUuc2V0VHJhbnNsYXRlLF8sdykuY2FsbCh1LnNldFNjYWxlLHYseSksbi5wbG90LmNhbGwodS5zZXRUcmFuc2xhdGUsTSxBKS5jYWxsKHUuc2V0U2NhbGUsMS92LDEveSksdj09PW4ueFNjYWxlRmFjdG9yJiZ5PT09bi55U2NhbGVGYWN0b3J8fCh1LnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cyx2LHkpLHUuc2V0VGV4dFBvaW50c1NjYWxlKG4uem9vbVNjYWxlVHh0LHYseSkpLHUuaGlkZU91dHNpZGVSYW5nZVBvaW50cyhuLmNsaXBPbkF4aXNGYWxzZVRyYWNlcyxuKSxuLnhTY2FsZUZhY3Rvcj12LG4ueVNjYWxlRmFjdG9yPXl9fX19ZnVuY3Rpb24gSHQodCxlLHIpe3JldHVybiB0LmZpeGVkcmFuZ2U/MDpvdCYmZXQueGFIYXNoW3QuX2lkXT9lOnN0JiYoZXQuaXNTdWJwbG90Q29uc3RyYWluZWQ/ZXQueGFIYXNoOmV0LnlhSGFzaClbdC5faWRdP3I6MH1mdW5jdGlvbiBHdCh0LGUpe3JldHVybiBlPyh0LnJhbmdlPXQuX3Iuc2xpY2UoKSxBKHQsZSksWXQodCxlKSk6MH1mdW5jdGlvbiBZdCh0LGUscil7cmV0dXJuIHQuX2xlbmd0aCooMS1lKSp5W3J8fHQuY29uc3RyYWludG93YXJkfHwibWlkZGxlIl19cmV0dXJuIGcubGVuZ3RoKkwubGVuZ3RoIT0xJiZHKHZ0LChmdW5jdGlvbihlKXtpZih0Ll9jb250ZXh0Ll9zY3JvbGxab29tLmNhcnRlc2lhbnx8dC5fZnVsbExheW91dC5fZW5hYmxlc2Nyb2xsem9vbSl7aWYoQ3QoKSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksdm9pZCBlLnN0b3BQcm9wYWdhdGlvbigpO2d0KCksY2xlYXJUaW1lb3V0KER0KTt2YXIgcj0tZS5kZWx0YVk7aWYoaXNGaW5pdGUocil8fChyPWUud2hlZWxEZWx0YS8xMCksaXNGaW5pdGUocikpe3ZhciBuLGk9TWF0aC5leHAoLU1hdGgubWluKE1hdGgubWF4KHIsLTIwKSwyMCkvMjAwKSxhPUZ0LmRyYWdsYXllci5zZWxlY3QoIi5uc2V3ZHJhZyIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPShlLmNsaWVudFgtYS5sZWZ0KS9hLndpZHRoLGw9KGEuYm90dG9tLWUuY2xpZW50WSkvYS5oZWlnaHQ7aWYob3Qpe2ZvcihMfHwobz0uNSksbj0wO248WC5sZW5ndGg7bisrKWMoWFtuXSxvLGkpO050KCJ4IiksT3RbMl0qPWksT3RbMF0rPU90WzJdKm8qKDEvaS0xKX1pZihzdCl7Zm9yKGd8fChsPS41KSxuPTA7bjxKLmxlbmd0aDtuKyspYyhKW25dLGwsaSk7TnQoInkiKSxPdFszXSo9aSxPdFsxXSs9T3RbM10qKDEtbCkqKDEvaS0xKX1xdChPdCksanQoKSx0LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsaHQpLER0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7T3Q9WzAsMCwkLHR0XSxWdCgpfSksUnQpLGUucHJldmVudERlZmF1bHQoKX1lbHNlIHMubG9nKCJEaWQgbm90IGZpbmQgd2hlZWwgbW90aW9uIGF0dHJpYnV0ZXM6ICIsZSl9ZnVuY3Rpb24gYyh0LGUscil7aWYoIXQuZml4ZWRyYW5nZSl7dmFyIG49cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCksaT1uWzBdKyhuWzFdLW5bMF0pKmU7dC5yYW5nZT1uLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJyKGkrKGUtaSkqcil9KSl9fX0pKSx2dH0sbWFrZURyYWdnZXI6UCxtYWtlUmVjdERyYWdnZXI6SSxtYWtlWm9vbWJveDpGLG1ha2VDb3JuZXJzOkIsdXBkYXRlWm9vbWJveDpOLHh5Q29ybmVyczpxLHRyYW5zaXRpb25ab29tYm94OmoscmVtb3ZlWm9vbWJveDpVLHNob3dEb3VibGVDbGlja05vdGlmaWVyOlYsYXR0YWNoV2hlZWxFdmVudEhhbmRsZXI6R319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2MzQsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6NjMzLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vY29tcG9uZW50cy9meCI6NjU1LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3MTcsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjczNCwiLi4vLi4vbGliL3NldGN1cnNvciI6NzcwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc3NCwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiOjc4OSwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vcGxvdHMiOjg2MiwiLi9heGVzIjo3OTksIi4vYXhpc19pZHMiOjgwMiwiLi9jb25zdGFudHMiOjgwNSwiLi9zY2FsZV96b29tIjo4MTcsIi4vc2VsZWN0Ijo4MTgsZDM6MTY5LCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQxNSx0aW55Y29sb3IyOjU0OH1dLDgwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLG89dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLHM9dCgiLi9kcmFnYm94IikubWFrZURyYWdCb3gsbD10KCIuL2NvbnN0YW50cyIpLkRSQUdHRVJTSVpFO3IuaW5pdEludGVyYWN0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKHQuX2NvbnRleHQuc3RhdGljUGxvdCluLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5kcmFnIikucmVtb3ZlKCk7ZWxzZSBpZihlLl9oYXMoImNhcnRlc2lhbiIpfHxlLl9oYXMoInNwbG9tIikpe09iamVjdC5rZXlzKGUuX3Bsb3RzfHx7fSkuc29ydCgoZnVuY3Rpb24odCxyKXtpZigoZS5fcGxvdHNbdF0ubWFpbnBsb3QmJiEwKT09PShlLl9wbG90c1tyXS5tYWlucGxvdCYmITApKXt2YXIgbj10LnNwbGl0KCJ5IiksaT1yLnNwbGl0KCJ5Iik7cmV0dXJuIG5bMF09PT1pWzBdP051bWJlcihuWzFdfHwxKS1OdW1iZXIoaVsxXXx8MSk6TnVtYmVyKG5bMF18fDEpLU51bWJlcihpWzBdfHwxKX1yZXR1cm4gZS5fcGxvdHNbdF0ubWFpbnBsb3Q/MTotMX0pKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1lLl9wbG90c1tyXSxvPW4ueGF4aXMsYz1uLnlheGlzO2lmKCFuLm1haW5wbG90KXt2YXIgdT1zKHQsbixvLl9vZmZzZXQsYy5fb2Zmc2V0LG8uX2xlbmd0aCxjLl9sZW5ndGgsIm5zIiwiZXciKTt1Lm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKGUpe3QuX2Z1bGxMYXlvdXQuX3JlaG92ZXI9ZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9PT1yJiZ0Ll9mdWxsTGF5b3V0Ll9wbG90c1tyXSYmaS5ob3Zlcih0LGUscil9LGkuaG92ZXIodCxlLHIpLHQuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj11LHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSx1Lm9ubW91c2VvdXQ9ZnVuY3Rpb24oZSl7dC5fZHJhZ2dpbmd8fCh0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxhLnVuaG92ZXIodCxlKSl9LHQuX2NvbnRleHQuc2hvd0F4aXNEcmFnSGFuZGxlcyYmKHModCxuLG8uX29mZnNldC1sLGMuX29mZnNldC1sLGwsbCwibiIsInciKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldC1sLGwsbCwibiIsImUiKSxzKHQsbixvLl9vZmZzZXQtbCxjLl9vZmZzZXQrYy5fbGVuZ3RoLGwsbCwicyIsInciKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldCtjLl9sZW5ndGgsbCxsLCJzIiwiZSIpKX1pZih0Ll9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMpe2lmKHI9PT1vLl9tYWluU3VicGxvdCl7dmFyIGg9by5fbWFpbkxpbmVQb3NpdGlvbjsidG9wIj09PW8uc2lkZSYmKGgtPWwpLHModCxuLG8uX29mZnNldCsuMSpvLl9sZW5ndGgsaCwuOCpvLl9sZW5ndGgsbCwiIiwiZXciKSxzKHQsbixvLl9vZmZzZXQsaCwuMSpvLl9sZW5ndGgsbCwiIiwidyIpLHModCxuLG8uX29mZnNldCsuOSpvLl9sZW5ndGgsaCwuMSpvLl9sZW5ndGgsbCwiIiwiZSIpfWlmKHI9PT1jLl9tYWluU3VicGxvdCl7dmFyIGY9Yy5fbWFpbkxpbmVQb3NpdGlvbjsicmlnaHQiIT09Yy5zaWRlJiYoZi09bCkscyh0LG4sZixjLl9vZmZzZXQrLjEqYy5fbGVuZ3RoLGwsLjgqYy5fbGVuZ3RoLCJucyIsIiIpLHModCxuLGYsYy5fb2Zmc2V0Ky45KmMuX2xlbmd0aCxsLC4xKmMuX2xlbmd0aCwicyIsIiIpLHModCxuLGYsYy5fb2Zmc2V0LGwsLjEqYy5fbGVuZ3RoLCJuIiwiIil9fX0pKTt2YXIgbz1lLl9ob3ZlcmxheWVyLm5vZGUoKTtvLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHIpe3IudGFyZ2V0PXQuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixpLmhvdmVyKHQscixlLl9ob3ZlcnN1YnBsb3QpfSxvLm9uY2xpY2s9ZnVuY3Rpb24oZSl7ZS50YXJnZXQ9dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLGkuY2xpY2sodCxlKX0sby5vbm1vdXNlZG93bj1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIub25tb3VzZWRvd24oZSl9LHIudXBkYXRlRngodCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj0icGFuIj09PWUuZHJhZ21vZGU/Im1vdmUiOiJjcm9zc2hhaXIiO28oZS5fZHJhZ2dlcnMscil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjYzNCwiLi4vLi4vY29tcG9uZW50cy9meCI6NjU1LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3NzAsIi4vY29uc3RhbnRzIjo4MDUsIi4vZHJhZ2JveCI6ODA3LGQzOjE2OX1dLDgwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NsZWFyT3V0bGluZUNvbnRyb2xsZXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX3pvb21sYXllcjtlJiZlLnNlbGVjdEFsbCgiLm91dGxpbmUtY29udHJvbGxlcnMiKS5yZW1vdmUoKX0sY2xlYXJTZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fem9vbWxheWVyO2UmJmUuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKSx0Ll9mdWxsTGF5b3V0Ll9kcmF3aW5nPSExfX19LHt9XSw4MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3N3aXRjaCh0LnR5cGUpe2Nhc2UibG9nIjpyZXR1cm4gdC5wMmQoZSk7Y2FzZSJkYXRlIjpyZXR1cm4gdC5wMnIoZSwwLHQuY2FsZW5kYXIpO2RlZmF1bHQ6cmV0dXJuIHQucDJyKGUpfX1lLmV4cG9ydHM9e3AycjpuLHIycDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0LnR5cGUpe2Nhc2UibG9nIjpyZXR1cm4gdC5kMnAoZSk7Y2FzZSJkYXRlIjpyZXR1cm4gdC5yMnAoZSwwLHQuY2FsZW5kYXIpO2RlZmF1bHQ6cmV0dXJuIHQucjJwKGUpfX0sYXhWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/MTowO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gbih0LHJbZV0pfX0sZ2V0VHJhbnNmb3JtOmZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnhheGlzLl9vZmZzZXQrIiwiK3QueWF4aXMuX29mZnNldCsiKSJ9fX0se31dLDgxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F4aXNfaWRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBvPWVbdF07aWYoQXJyYXkuaXNBcnJheShvKSlmb3IodmFyIHM9bi5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbixsPXMuaWRSZWdleCxjPXIuX3N1YnBsb3RzLHU9Yy54YXhpcyxoPWMueWF4aXMsZj1jLmNhcnRlc2lhbixwPXIuX2hhcygiY2FydGVzaWFuIil8fHIuX2hhcygiZ2wyZCIpLGQ9MDtkPG8ubGVuZ3RoO2QrKyl7dmFyIGc9b1tkXTtpZihpLmlzUGxhaW5PYmplY3QoZykpe3ZhciBtPWEuY2xlYW5JZChnLnhyZWYsIngiLCExKSx2PWEuY2xlYW5JZChnLnlyZWYsInkiLCExKSx5PWwueC50ZXN0KG0pLHg9bC55LnRlc3Qodik7aWYoeXx8eCl7cHx8aS5wdXNoVW5pcXVlKHIuX2Jhc2VQbG90TW9kdWxlcyxzKTt2YXIgYj0hMTt5JiYtMT09PXUuaW5kZXhPZihtKSYmKHUucHVzaChtKSxiPSEwKSx4JiYtMT09PWguaW5kZXhPZih2KSYmKGgucHVzaCh2KSxiPSEwKSxiJiZ5JiZ4JiZmLnB1c2gobSt2KX19fX19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2F4aXNfaWRzIjo4MDJ9XSw4MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL3Bsb3RzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYz10KCIuL2F4aXNfaWRzIiksdT10KCIuL2NvbnN0YW50cyIpLGg9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxmPWEuZW5zdXJlU2luZ2xlO2Z1bmN0aW9uIHAodCxlLHIpe3JldHVybiBhLmVuc3VyZVNpbmdsZSh0LGUsciwoZnVuY3Rpb24odCl7dC5kYXR1bShyKX0pKX1mdW5jdGlvbiBkKHQsZSxyLGEsbyl7Zm9yKHZhciBjLGgsZixwPXUudHJhY2VMYXllckNsYXNzZXMsZD10Ll9mdWxsTGF5b3V0LGc9ZC5fbW9kdWxlcyxtPVtdLHY9W10seT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgeD0oYz1nW3ldKS5uYW1lLGI9aS5tb2R1bGVzW3hdLmNhdGVnb3JpZXM7aWYoYi5zdmcpe3ZhciBfPWMubGF5ZXJOYW1lfHx4KyJsYXllciIsdz1jLnBsb3Q7Zj0oaD1sKHIsdykpWzBdLHI9aFsxXSxmLmxlbmd0aCYmbS5wdXNoKHtpOnAuaW5kZXhPZihfKSxjbGFzc05hbWU6XyxwbG90TWV0aG9kOncsY2RNb2R1bGU6Zn0pLGIuem9vbVNjYWxlJiZ2LnB1c2goIi4iK18pfX1tLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaS1lLml9KSk7dmFyIFQ9ZS5wbG90LnNlbGVjdEFsbCgiZy5tbGF5ZXIiKS5kYXRhKG0sKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTmFtZX0pKTtpZihULmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc05hbWV9KSkuY2xhc3NlZCgibWxheWVyIiwhMCkuY2xhc3NlZCgicmFuZ2VwbG90IixlLmlzUmFuZ2VQbG90KSxULmV4aXQoKS5yZW1vdmUoKSxULm9yZGVyKCksVC5lYWNoKChmdW5jdGlvbihyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxsPXIuY2xhc3NOYW1lO3IucGxvdE1ldGhvZCh0LGUsci5jZE1vZHVsZSxpLGEsbyksLTE9PT11LmNsaXBPbkF4aXNGYWxzZVF1ZXJ5LmluZGV4T2YoIi4iK2wpJiZzLnNldENsaXBVcmwoaSxlLmxheWVyQ2xpcElkLHQpfSkpLGQuX2hhcygic2NhdHRlcmdsIikmJihjPWkuZ2V0TW9kdWxlKCJzY2F0dGVyZ2wiKSxmPWwocixjKVswXSxjLnBsb3QodCxlLGYpKSwhdC5fY29udGV4dC5zdGF0aWNQbG90JiYoZS5faGFzQ2xpcE9uQXhpc0ZhbHNlJiYoZS5jbGlwT25BeGlzRmFsc2VUcmFjZXM9ZS5wbG90LnNlbGVjdEFsbCh1LmNsaXBPbkF4aXNGYWxzZVF1ZXJ5LmpvaW4oIiwiKSkuc2VsZWN0QWxsKCIudHJhY2UiKSksdi5sZW5ndGgpKXt2YXIgaz1lLnBsb3Quc2VsZWN0QWxsKHYuam9pbigiLCIpKS5zZWxlY3RBbGwoIi50cmFjZSIpO2Uuem9vbVNjYWxlUHRzPWsuc2VsZWN0QWxsKCJwYXRoLnBvaW50IiksZS56b29tU2NhbGVUeHQ9ay5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKX19ZnVuY3Rpb24gZyh0LGUpe3ZhciByPWUucGxvdGdyb3VwLG49ZS5pZCxpPXUubGF5ZXJWYWx1ZTJsYXllckNsYXNzW2UueGF4aXMubGF5ZXJdLGE9dS5sYXllclZhbHVlMmxheWVyQ2xhc3NbZS55YXhpcy5sYXllcl0sbz10Ll9mdWxsTGF5b3V0Ll9oYXNPbmx5TGFyZ2VTcGxvbXM7aWYoZS5tYWlucGxvdCl7dmFyIHM9ZS5tYWlucGxvdGluZm8sbD1zLnBsb3Rncm91cCxoPW4rIi14IixkPW4rIi15IjtlLmdyaWRsYXllcj1zLmdyaWRsYXllcixlLnplcm9saW5lbGF5ZXI9cy56ZXJvbGluZWxheWVyLGYocy5vdmVybGluZXNCZWxvdywicGF0aCIsaCksZihzLm92ZXJsaW5lc0JlbG93LCJwYXRoIixkKSxmKHMub3ZlcmF4ZXNCZWxvdywiZyIsaCksZihzLm92ZXJheGVzQmVsb3csImciLGQpLGUucGxvdD1mKHMub3ZlcnBsb3QsImciLG4pLGYocy5vdmVybGluZXNBYm92ZSwicGF0aCIsaCksZihzLm92ZXJsaW5lc0Fib3ZlLCJwYXRoIixkKSxmKHMub3ZlcmF4ZXNBYm92ZSwiZyIsaCksZihzLm92ZXJheGVzQWJvdmUsImciLGQpLGUueGxpbmVzPWwuc2VsZWN0KCIub3ZlcmxpbmVzLSIraSkuc2VsZWN0KCIuIitoKSxlLnlsaW5lcz1sLnNlbGVjdCgiLm92ZXJsaW5lcy0iK2EpLnNlbGVjdCgiLiIrZCksZS54YXhpc2xheWVyPWwuc2VsZWN0KCIub3ZlcmF4ZXMtIitpKS5zZWxlY3QoIi4iK2gpLGUueWF4aXNsYXllcj1sLnNlbGVjdCgiLm92ZXJheGVzLSIrYSkuc2VsZWN0KCIuIitkKX1lbHNlIGlmKG8pZS54bGluZXM9ZihyLCJwYXRoIiwieGxpbmVzLWFib3ZlIiksZS55bGluZXM9ZihyLCJwYXRoIiwieWxpbmVzLWFib3ZlIiksZS54YXhpc2xheWVyPWYociwiZyIsInhheGlzbGF5ZXItYWJvdmUiKSxlLnlheGlzbGF5ZXI9ZihyLCJnIiwieWF4aXNsYXllci1hYm92ZSIpO2Vsc2V7dmFyIGc9ZihyLCJnIiwibGF5ZXItc3VicGxvdCIpO2Uuc2hhcGVsYXllcj1mKGcsImciLCJzaGFwZWxheWVyIiksZS5pbWFnZWxheWVyPWYoZywiZyIsImltYWdlbGF5ZXIiKSxlLmdyaWRsYXllcj1mKHIsImciLCJncmlkbGF5ZXIiKSxlLnplcm9saW5lbGF5ZXI9ZihyLCJnIiwiemVyb2xpbmVsYXllciIpLGYociwicGF0aCIsInhsaW5lcy1iZWxvdyIpLGYociwicGF0aCIsInlsaW5lcy1iZWxvdyIpLGUub3ZlcmxpbmVzQmVsb3c9ZihyLCJnIiwib3ZlcmxpbmVzLWJlbG93IiksZihyLCJnIiwieGF4aXNsYXllci1iZWxvdyIpLGYociwiZyIsInlheGlzbGF5ZXItYmVsb3ciKSxlLm92ZXJheGVzQmVsb3c9ZihyLCJnIiwib3ZlcmF4ZXMtYmVsb3ciKSxlLnBsb3Q9ZihyLCJnIiwicGxvdCIpLGUub3ZlcnBsb3Q9ZihyLCJnIiwib3ZlcnBsb3QiKSxlLnhsaW5lcz1mKHIsInBhdGgiLCJ4bGluZXMtYWJvdmUiKSxlLnlsaW5lcz1mKHIsInBhdGgiLCJ5bGluZXMtYWJvdmUiKSxlLm92ZXJsaW5lc0Fib3ZlPWYociwiZyIsIm92ZXJsaW5lcy1hYm92ZSIpLGYociwiZyIsInhheGlzbGF5ZXItYWJvdmUiKSxmKHIsImciLCJ5YXhpc2xheWVyLWFib3ZlIiksZS5vdmVyYXhlc0Fib3ZlPWYociwiZyIsIm92ZXJheGVzLWFib3ZlIiksZS54bGluZXM9ci5zZWxlY3QoIi54bGluZXMtIitpKSxlLnlsaW5lcz1yLnNlbGVjdCgiLnlsaW5lcy0iK2EpLGUueGF4aXNsYXllcj1yLnNlbGVjdCgiLnhheGlzbGF5ZXItIitpKSxlLnlheGlzbGF5ZXI9ci5zZWxlY3QoIi55YXhpc2xheWVyLSIrYSl9b3x8KHAoZS5ncmlkbGF5ZXIsImciLGUueGF4aXMuX2lkKSxwKGUuZ3JpZGxheWVyLCJnIixlLnlheGlzLl9pZCksZS5ncmlkbGF5ZXIuc2VsZWN0QWxsKCJnIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKS5zb3J0KGMuaWRTb3J0KSksZS54bGluZXMuc3R5bGUoImZpbGwiLCJub25lIikuY2xhc3NlZCgiY3Jpc3AiLCEwKSxlLnlsaW5lcy5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jbGFzc2VkKCJjcmlzcCIsITApfWZ1bmN0aW9uIG0odCxlKXtpZih0KXt2YXIgcj17fTtmb3IodmFyIGkgaW4gdC5lYWNoKChmdW5jdGlvbih0KXt2YXIgaT10WzBdO24uc2VsZWN0KHRoaXMpLnJlbW92ZSgpLHYoaSxlKSxyW2ldPSEwfSkpLGUuX3Bsb3RzKWZvcih2YXIgYT1lLl9wbG90c1tpXS5vdmVybGF5c3x8W10sbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO3Jbcy5pZF0mJnMucGxvdC5zZWxlY3RBbGwoIi50cmFjZSIpLnJlbW92ZSgpfX19ZnVuY3Rpb24gdih0LGUpe2UuX2RyYWdnZXJzLnNlbGVjdEFsbCgiZy4iK3QpLnJlbW92ZSgpLGUuX2RlZnMuc2VsZWN0KCIjY2xpcCIrZS5fdWlkK3QrInBsb3QiKS5yZW1vdmUoKX1yLm5hbWU9ImNhcnRlc2lhbiIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9dS5pZFJlZ2V4LHIuYXR0clJlZ2V4PXUuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnRyYW5zaXRpb25BeGVzPXQoIi4vdHJhbnNpdGlvbl9heGVzIiksci5maW5hbGl6ZVN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLG89ZS5fc3VicGxvdHMscz1vLnhheGlzLGw9by55YXhpcyxoPW8uY2FydGVzaWFuLGY9aC5jb25jYXQoby5nbDJkfHxbXSkscD17fSxkPXt9O2ZvcihyPTA7cjxmLmxlbmd0aDtyKyspe3ZhciBnPWZbcl0uc3BsaXQoInkiKTtwW2dbMF1dPTEsZFsieSIrZ1sxXV09MX1mb3Iocj0wO3I8cy5sZW5ndGg7cisrKXBbbj1zW3JdXXx8KGk9KHRbYy5pZDJuYW1lKG4pXXx8e30pLmFuY2hvcix1LmlkUmVnZXgueS50ZXN0KGkpfHwoaT0ieSIpLGgucHVzaChuK2kpLGYucHVzaChuK2kpLGRbaV18fChkW2ldPTEsYS5wdXNoVW5pcXVlKGwsaSkpKTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWRbaT1sW3JdXXx8KG49KHRbYy5pZDJuYW1lKGkpXXx8e30pLmFuY2hvcix1LmlkUmVnZXgueC50ZXN0KG4pfHwobj0ieCIpLGgucHVzaChuK2kpLGYucHVzaChuK2kpLHBbbl18fChwW25dPTEsYS5wdXNoVW5pcXVlKHMsbikpKTtpZighZi5sZW5ndGgpe2Zvcih2YXIgbSBpbiBuPSIiLGk9IiIsdCl7aWYodS5hdHRyUmVnZXgudGVzdChtKSkieCI9PT1tLmNoYXJBdCgwKT8oIW58fCttLnN1YnN0cig1KTwrbi5zdWJzdHIoNSkpJiYobj1tKTooIWl8fCttLnN1YnN0cig1KTwraS5zdWJzdHIoNSkpJiYoaT1tKX1uPW4/Yy5uYW1lMmlkKG4pOiJ4IixpPWk/Yy5uYW1lMmlkKGkpOiJ5IixzLnB1c2gobiksbC5wdXNoKGkpLGgucHVzaChuK2kpfX0sci5wbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5fZnVsbExheW91dCxvPWEuX3N1YnBsb3RzLmNhcnRlc2lhbixzPXQuY2FsY2RhdGE7aWYoIUFycmF5LmlzQXJyYXkoZSkpZm9yKGU9W10saT0wO2k8cy5sZW5ndGg7aSsrKWUucHVzaChpKTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXtmb3IodmFyIGwsYz1vW2ldLHU9YS5fcGxvdHNbY10saD1bXSxmPTA7ZjxzLmxlbmd0aDtmKyspe3ZhciBwPXNbZl0sZz1wWzBdLnRyYWNlO2cueGF4aXMrZy55YXhpcz09PWMmJigoLTEhPT1lLmluZGV4T2YoZy5pbmRleCl8fGcuY2FycGV0KSYmKGwmJmxbMF0udHJhY2UueGF4aXMrbFswXS50cmFjZS55YXhpcz09PWMmJi0xIT09WyJ0b25leHR4IiwidG9uZXh0eSIsInRvbmV4dCJdLmluZGV4T2YoZy5maWxsKSYmLTE9PT1oLmluZGV4T2YobCkmJmgucHVzaChsKSxoLnB1c2gocCkpLGw9cCl9ZCh0LHUsaCxyLG4pfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1uLl9wbG90c3x8e30sbD1lLl9wbG90c3x8e30sdT1uLl9zdWJwbG90c3x8e307aWYobi5faGFzT25seUxhcmdlU3Bsb21zJiYhZS5faGFzT25seUxhcmdlU3Bsb21zKWZvcihvIGluIHMpKGk9c1tvXSkucGxvdGdyb3VwJiZpLnBsb3Rncm91cC5yZW1vdmUoKTt2YXIgaD1uLl9oYXMmJm4uX2hhcygiZ2wiKSxmPWUuX2hhcyYmZS5faGFzKCJnbCIpO2lmKGgmJiFmKWZvcihvIGluIHMpKGk9c1tvXSkuX3NjZW5lJiZpLl9zY2VuZS5kZXN0cm95KCk7aWYodS54YXhpcyYmdS55YXhpcyl7dmFyIHA9Yy5saXN0SWRzKHtfZnVsbExheW91dDpufSk7Zm9yKGE9MDthPHAubGVuZ3RoO2ErKyl7dmFyIGQ9cFthXTtlW2MuaWQybmFtZShkKV18fG4uX2luZm9sYXllci5zZWxlY3RBbGwoIi5nLSIrZCsidGl0bGUiKS5yZW1vdmUoKX19dmFyIGc9bi5faGFzJiZuLl9oYXMoImNhcnRlc2lhbiIpLHk9ZS5faGFzJiZlLl9oYXMoImNhcnRlc2lhbiIpO2lmKGcmJiF5KW0obi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKCIuc3VicGxvdCIpLG4pLG4uX2RlZnMuc2VsZWN0QWxsKCIuYXhlc2NsaXAiKS5yZW1vdmUoKSxkZWxldGUgbi5fYXhpc0NvbnN0cmFpbnRHcm91cHM7ZWxzZSBpZih1LmNhcnRlc2lhbilmb3IoYT0wO2E8dS5jYXJ0ZXNpYW4ubGVuZ3RoO2ErKyl7dmFyIHg9dS5jYXJ0ZXNpYW5bYV07aWYoIWxbeF0pe3ZhciBiPSIuIit4KyIsLiIreCsiLXgsLiIreCsiLXkiO24uX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbChiKS5yZW1vdmUoKSx2KHgsbil9fX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5fc3VicGxvdHMuY2FydGVzaWFuLGM9bC5sZW5ndGgsdT1bXSxoPVtdO2ZvcihlPTA7ZTxjO2UrKyl7bj1sW2VdLGk9cy5fcGxvdHNbbl0sYT1pLnhheGlzLG89aS55YXhpczt2YXIgZj1hLl9tYWluQXhpcyxwPW8uX21haW5BeGlzLGQ9Zi5faWQrcC5faWQsZz1zLl9wbG90c1tkXTtpLm92ZXJsYXlzPVtdLGQhPT1uJiZnPyhpLm1haW5wbG90PWQsaS5tYWlucGxvdGluZm89ZyxoLnB1c2gobikpOihpLm1haW5wbG90PXZvaWQgMCxpLm1haW5wbG90aW5mbz12b2lkIDAsdS5wdXNoKG4pKX1mb3IoZT0wO2U8aC5sZW5ndGg7ZSsrKW49aFtlXSwoaT1zLl9wbG90c1tuXSkubWFpbnBsb3RpbmZvLm92ZXJsYXlzLnB1c2goaSk7dmFyIG09dS5jb25jYXQoaCksdj1uZXcgQXJyYXkoYyk7Zm9yKGU9MDtlPGM7ZSsrKXtuPW1bZV0saT1zLl9wbG90c1tuXSxhPWkueGF4aXMsbz1pLnlheGlzO3ZhciB5PVtuLGEubGF5ZXIsby5sYXllcixhLm92ZXJsYXlpbmd8fCIiLG8ub3ZlcmxheWluZ3x8IiJdO2ZvcihyPTA7cjxpLm92ZXJsYXlzLmxlbmd0aDtyKyspeS5wdXNoKGkub3ZlcmxheXNbcl0uaWQpO3ZbZV09eX1yZXR1cm4gdn0odCksaT1lLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90IikuZGF0YShyLFN0cmluZyk7aS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInN1YnBsb3QgIit0WzBdfSkpLGkub3JkZXIoKSxpLmV4aXQoKS5jYWxsKG0sZSksaS5lYWNoKChmdW5jdGlvbihyKXt2YXIgaT1yWzBdLGE9ZS5fcGxvdHNbaV07YS5wbG90Z3JvdXA9bi5zZWxlY3QodGhpcyksZyh0LGEpLGEuZHJhZ2xheWVyPWYoZS5fZHJhZ2dlcnMsImciLGkpfSkpfSxyLnJhbmdlUGxvdD1mdW5jdGlvbih0LGUscil7Zyh0LGUpLGQodCxlLHIpLG8uc3R5bGUodCl9LHIudG9TVkc9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fZ2xpbWFnZXMscj1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIik7ci5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkpLnNlbGVjdEFsbCgiLmdsLWNhbnZhcy1jb250ZXh0LCAuZ2wtY2FudmFzLWZvY3VzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ZS5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmguc3ZnLCJ4bGluazpocmVmIjp0LHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLHg6MCx5OjAsd2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9KX0pKX0sci51cGRhdGVGeD10KCIuL2dyYXBoX2ludGVyYWN0IikudXBkYXRlRnh9LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzcsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MjYsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuLi9nZXRfZGF0YSI6ODM2LCIuLi9wbG90cyI6ODYyLCIuL2F0dHJpYnV0ZXMiOjc5NywiLi9heGlzX2lkcyI6ODAyLCIuL2NvbnN0YW50cyI6ODA1LCIuL2dyYXBoX2ludGVyYWN0Ijo4MDgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxMywiLi9sYXlvdXRfZGVmYXVsdHMiOjgxNCwiLi90cmFuc2l0aW9uX2F4ZXMiOjgyMyxkMzoxNjl9XSw4MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGw9KHQoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuRk9STUFUX0xJTkssdCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKS5EQVRFX0ZPUk1BVF9MSU5LLHQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVEQVkpLGM9dCgiLi9jb25zdGFudHMiKSx1PWMuSE9VUl9QQVRURVJOLGg9Yy5XRUVLREFZX1BBVFRFUk47ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJ0aWNrcyJ9LGZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pLHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJ0aWNrcyJ9LGVkaXRUeXBlOiJ0aWNrcyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiLCJtdWx0aWNhdGVnb3J5Il0sZGZsdDoiLSIsZWRpdFR5cGU6ImNhbGMiLF9ub1RlbXBsYXRpbmc6ITB9LGF1dG9yYW5nZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwicmV2ZXJzZWQiXSxkZmx0OiEwLGVkaXRUeXBlOiJheHJhbmdlIixpbXBsaWVkRWRpdHM6eyJyYW5nZVswXSI6dm9pZCAwLCJyYW5nZVsxXSI6dm9pZCAwfX0scmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub3JtYWwiLCJ0b3plcm8iLCJub25uZWdhdGl2ZSJdLGRmbHQ6Im5vcm1hbCIsZWRpdFR5cGU6InBsb3QifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJheHJhbmdlIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX0sYW5pbTohMH0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfSxhbmltOiEwfV0sZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7YXV0b3JhbmdlOiExfSxhbmltOiEwfSxmaXhlZHJhbmdlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbYy5pZFJlZ2V4LngudG9TdHJpbmcoKSxjLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToicGxvdCJ9LHNjYWxlcmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sY29uc3RyYWluOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYW5nZSIsImRvbWFpbiJdLGRmbHQ6InJhbmdlIixlZGl0VHlwZToicGxvdCJ9LGNvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6InBsb3QifSxtYXRjaGVzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W2MuaWRSZWdleC54LnRvU3RyaW5nKCksYy5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSxyYW5nZWJyZWFrczpzKCJyYW5nZWJyZWFrIix7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGJvdW5kczp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSxwYXR0ZXJuOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W2gsdSwiIl0sZWRpdFR5cGU6ImNhbGMifSx2YWx1ZXM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn19LGR2YWx1ZTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjAsZGZsdDpsfSxlZGl0VHlwZToiY2FsYyJ9KSx0aWNrbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxpbmVhciIsImFycmF5Il0sZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2swOnZvaWQgMCxkdGljazp2b2lkIDB9fSxudGlja3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToidGlja3MifSx0aWNrMDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MiLGltcGxpZWRFZGl0czp7dGlja21vZGU6ImxpbmVhciJ9fSxkdGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MiLGltcGxpZWRFZGl0czp7dGlja21vZGU6ImxpbmVhciJ9fSx0aWNrdmFsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvdXRzaWRlIiwiaW5zaWRlIiwiIl0sZWRpdFR5cGU6InRpY2tzIn0sdGlja3Nvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGFiZWxzIiwiYm91bmRhcmllcyJdLGRmbHQ6ImxhYmVscyIsZWRpdFR5cGU6InRpY2tzIn0sdGlja2xhYmVsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zdGFudCIsInBlcmlvZCJdLGRmbHQ6Imluc3RhbnQiLGVkaXRUeXBlOiJ0aWNrcyJ9LG1pcnJvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwidGlja3MiLCExLCJhbGwiLCJhbGx0aWNrcyJdLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzK2xheW91dHN0eWxlIn0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUsZWRpdFR5cGU6InRpY2tzIn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InRpY2tzIn0sYXV0b21hcmdpbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSxzaG93c3Bpa2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJtb2RlYmFyIn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bnVsbCxlZGl0VHlwZToibm9uZSJ9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGFzaDpvKHt9LGEse2RmbHQ6ImRhc2giLGVkaXRUeXBlOiJub25lIn0pLHNwaWtlbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsidG9heGlzIiwiYWNyb3NzIiwibWFya2VyIl0sZGZsdDoidG9heGlzIixlZGl0VHlwZToibm9uZSJ9LHNwaWtlc25hcDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGF0YSIsImN1cnNvciIsImhvdmVyZWQgZGF0YSJdLGRmbHQ6ImRhdGEiLGVkaXRUeXBlOiJub25lIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pLHRpY2thbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2twcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3d0aWNrc3VmZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LGV4cG9uZW50Zm9ybWF0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwiZSIsIkUiLCJwb3dlciIsIlNJIiwiQiJdLGRmbHQ6IkIiLGVkaXRUeXBlOiJ0aWNrcyJ9LG1pbmV4cG9uZW50Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxtaW46MCxlZGl0VHlwZToidGlja3MifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sdGlja2Zvcm1hdHN0b3BzOnMoInRpY2tmb3JtYXRzdG9wIix7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkdGlja3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn1dLGVkaXRUeXBlOiJ0aWNrcyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sZWRpdFR5cGU6InRpY2tzIn0pLGhvdmVyZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6Im5vbmUifSxzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MrbGF5b3V0c3R5bGUifSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToidGlja3MifSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5lOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSx6ZXJvbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dkaXZpZGVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkaXZpZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sZGl2aWRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSxhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLGMuaWRSZWdleC54LnRvU3RyaW5nKCksYy5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LG92ZXJsYXlpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLGMuaWRSZWdleC54LnRvU3RyaW5nKCksYy5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWJvdmUgdHJhY2VzIiwiYmVsb3cgdHJhY2VzIl0sZGZsdDoiYWJvdmUgdHJhY2VzIixlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifV0sZGZsdDpbMCwxXSxlZGl0VHlwZToicGxvdCJ9LHBvc2l0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRyYWNlIiwiY2F0ZWdvcnkgYXNjZW5kaW5nIiwiY2F0ZWdvcnkgZGVzY2VuZGluZyIsImFycmF5IiwidG90YWwgYXNjZW5kaW5nIiwidG90YWwgZGVzY2VuZGluZyIsIm1pbiBhc2NlbmRpbmciLCJtaW4gZGVzY2VuZGluZyIsIm1heCBhc2NlbmRpbmciLCJtYXggZGVzY2VuZGluZyIsInN1bSBhc2NlbmRpbmciLCJzdW0gZGVzY2VuZGluZyIsIm1lYW4gYXNjZW5kaW5nIiwibWVhbiBkZXNjZW5kaW5nIiwibWVkaWFuIGFzY2VuZGluZyIsIm1lZGlhbiBkZXNjZW5kaW5nIl0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJjYWxjIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOnthdXRvdGljazp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InRpY2tzIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjE0LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjM2LCIuLi8uLi9jb25zdGFudHMvZG9jcyI6NzIwLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6Nzg4LCIuLi9mb250X2F0dHJpYnV0ZXMiOjgyNywiLi9jb25zdGFudHMiOjgwNX1dLDgxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmlzVW5pZmllZEhvdmVyLG89dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3Zlcm1vZGVfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxsPXQoIi4uL2xheW91dF9hdHRyaWJ1dGVzIiksYz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuL3R5cGVfZGVmYXVsdHMiKSxoPXQoIi4vYXhpc19kZWZhdWx0cyIpLGY9dCgiLi9jb25zdHJhaW50cyIpLmhhbmRsZUNvbnN0cmFpbnREZWZhdWx0cyxwPXQoIi4vcG9zaXRpb25fZGVmYXVsdHMiKSxkPXQoIi4vYXhpc19pZHMiKSxnPWQuaWQybmFtZSxtPWQubmFtZTJpZCx2PXQoIi4vY29uc3RhbnRzIikuQVhfSURfUEFUVEVSTix5PXQoIi4uLy4uL3JlZ2lzdHJ5IikseD15LnRyYWNlSXMsYj15LmdldENvbXBvbmVudE1ldGhvZDtmdW5jdGlvbiBfKHQsZSxyKXtBcnJheS5pc0FycmF5KHRbZV0pP3RbZV0ucHVzaChyKTp0W2VdPVtyXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBkLHksdz17fSxUPXt9LGs9e30sTT17fSxBPXt9LFM9e30sRT17fSxDPXt9LEw9e30sUD17fTtmb3IoZD0wO2Q8ci5sZW5ndGg7ZCsrKXt2YXIgST1yW2RdO2lmKHgoSSwiY2FydGVzaWFuIil8fHgoSSwiZ2wyZCIpKXt2YXIgeixPO2lmKEkueGF4aXMpej1nKEkueGF4aXMpLF8odyx6LEkpO2Vsc2UgaWYoSS54YXhlcylmb3IoeT0wO3k8SS54YXhlcy5sZW5ndGg7eSsrKV8odyxnKEkueGF4ZXNbeV0pLEkpO2lmKEkueWF4aXMpTz1nKEkueWF4aXMpLF8odyxPLEkpO2Vsc2UgaWYoSS55YXhlcylmb3IoeT0wO3k8SS55YXhlcy5sZW5ndGg7eSsrKV8odyxnKEkueWF4ZXNbeV0pLEkpO2lmKCJmdW5uZWwiPT09SS50eXBlPyJoIj09PUkub3JpZW50YXRpb24/KHomJihUW3pdPSEwKSxPJiYoRVtPXT0hMCkpOk8mJihrW09dPSEwKToiaW1hZ2UiPT09SS50eXBlPyhPJiYoQ1tPXT0hMCkseiYmKENbel09ITApKTooTyYmKEFbT109ITAsU1tPXT0hMCkseChJLCJjYXJwZXQiKSYmKCJjYXJwZXQiIT09SS50eXBlfHxJLl9jaGVhdGVyKXx8eiYmKE1bel09ITApKSwiY2FycGV0Ij09PUkudHlwZSYmSS5fY2hlYXRlciYmeiYmKFRbel09ITApLHgoSSwiMmRNYXAiKSYmKExbel09ITAsTFtPXT0hMCkseChJLCJvcmllbnRlZCIpKVBbImgiPT09SS5vcmllbnRhdGlvbj9POnpdPSEwfX12YXIgRD1lLl9zdWJwbG90cyxSPUQueGF4aXMsRj1ELnlheGlzLEI9bi5zaW1wbGVNYXAoUixnKSxOPW4uc2ltcGxlTWFwKEYsZyksaj1CLmNvbmNhdChOKSxVPWkuYmFja2dyb3VuZDtSLmxlbmd0aCYmRi5sZW5ndGgmJihVPW4uY29lcmNlKHQsZSxsLCJwbG90X2JnY29sb3IiKSk7dmFyIFYscSxILEcsWSxXPWkuY29tYmluZShVLGUucGFwZXJfYmdjb2xvcik7ZnVuY3Rpb24gWigpe3ZhciB0PXdbVl18fFtdO1kuX3RyYWNlSW5kaWNlcz10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KSksWS5fYW5uSW5kaWNlcz1bXSxZLl9zaGFwZUluZGljZXM9W10sWS5faW1nSW5kaWNlcz1bXSxZLl9zdWJwbG90c1dpdGg9W10sWS5fY291bnRlckF4ZXM9W10sWS5fbmFtZT1ZLl9hdHRyPVYsWS5faWQ9cX1mdW5jdGlvbiBYKHQsZSl7cmV0dXJuIG4uY29lcmNlKEcsWSxjLHQsZSl9ZnVuY3Rpb24gSih0LGUpe3JldHVybiBuLmNvZXJjZTIoRyxZLGMsdCxlKX1mdW5jdGlvbiBLKHQpe3JldHVybiJ4Ij09PXQ/RjpSfWZ1bmN0aW9uIFEoZSxyKXtmb3IodmFyIG49IngiPT09ZT9COk4saT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV07bz09PXJ8fCh0W29dfHx7fSkub3ZlcmxheWluZ3x8aS5wdXNoKG0obykpfXJldHVybiBpfXZhciAkPXt4OksoIngiKSx5OksoInkiKX0sdHQ9JC54LmNvbmNhdCgkLnkpLGV0PXt9LHJ0PVtdO2Z1bmN0aW9uIG50KCl7dmFyIHQ9Ry5tYXRjaGVzO3YudGVzdCh0KSYmLTE9PT10dC5pbmRleE9mKHQpJiYoZXRbdF09Ry50eXBlLHJ0PU9iamVjdC5rZXlzKGV0KSl9dmFyIGl0PW8odCxlLHIpLGF0PWEoaXQpO2ZvcihkPTA7ZDxqLmxlbmd0aDtkKyspe1Y9altkXSxxPW0oViksSD1WLmNoYXJBdCgwKSxuLmlzUGxhaW5PYmplY3QodFtWXSl8fCh0W1ZdPXt9KSxHPXRbVl0sWT1zLm5ld0NvbnRhaW5lcihlLFYsSCsiYXhpcyIpLFooKTt2YXIgb3Q9IngiPT09SCYmIU1bVl0mJlRbVl18fCJ5Ij09PUgmJiFBW1ZdJiZrW1ZdLHN0PSJ5Ij09PUgmJighU1tWXSYmRVtWXXx8Q1tWXSksbHQ9e2xldHRlcjpILGZvbnQ6ZS5mb250LG91dGVyVGlja3M6TFtWXSxzaG93R3JpZDohUFtWXSxkYXRhOndbVl18fFtdLGJnQ29sb3I6VyxjYWxlbmRhcjplLmNhbGVuZGFyLGF1dG9tYXJnaW46ITAsdmlzaWJsZURmbHQ6b3QscmV2ZXJzZURmbHQ6c3Qsc3Bsb21TdGFzaDooKGUuX3NwbG9tQXhlc3x8e30pW0hdfHx7fSlbcV19O1goInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksdShHLFksWCxsdCksaChHLFksWCxsdCxlKTt2YXIgY3Q9YXQmJkg9PT1pdC5jaGFyQXQoMCksdXQ9Sigic3Bpa2Vjb2xvciIsYXQ/WS5jb2xvcjp2b2lkIDApLGh0PUooInNwaWtldGhpY2tuZXNzIixhdD8xLjU6dm9pZCAwKSxmdD1KKCJzcGlrZWRhc2giLGF0PyJkb3QiOnZvaWQgMCkscHQ9Sigic3Bpa2Vtb2RlIixhdD8iYWNyb3NzIjp2b2lkIDApLGR0PUooInNwaWtlc25hcCIsYXQ/ImhvdmVyZWQgZGF0YSI6dm9pZCAwKTtYKCJzaG93c3Bpa2VzIiwhIShjdHx8dXR8fGh0fHxmdHx8cHR8fGR0KSl8fChkZWxldGUgWS5zcGlrZWNvbG9yLGRlbGV0ZSBZLnNwaWtldGhpY2tuZXNzLGRlbGV0ZSBZLnNwaWtlZGFzaCxkZWxldGUgWS5zcGlrZW1vZGUsZGVsZXRlIFkuc3Bpa2VzbmFwKSxwKEcsWSxYLHtsZXR0ZXI6SCxjb3VudGVyQXhlczokW0hdLG92ZXJsYXlhYmxlQXhlczpRKEgsViksZ3JpZDplLmdyaWR9KSxYKCJ0aXRsZS5zdGFuZG9mZiIpLG50KCksWS5faW5wdXQ9R31mb3IoZD0wO2Q8cnQubGVuZ3RoOyl7cT1ydFtkKytdLEg9KFY9ZyhxKSkuY2hhckF0KDApLG4uaXNQbGFpbk9iamVjdCh0W1ZdKXx8KHRbVl09e30pLEc9dFtWXSxZPXMubmV3Q29udGFpbmVyKGUsVixIKyJheGlzIiksWigpO3ZhciBndD17bGV0dGVyOkgsZm9udDplLmZvbnQsb3V0ZXJUaWNrczpMW1ZdLHNob3dHcmlkOiFQW1ZdLGRhdGE6W10sYmdDb2xvcjpXLGNhbGVuZGFyOmUuY2FsZW5kYXIsYXV0b21hcmdpbjohMCx2aXNpYmxlRGZsdDohMSxyZXZlcnNlRGZsdDohMSxzcGxvbVN0YXNoOigoZS5fc3Bsb21BeGVzfHx7fSlbSF18fHt9KVtxXX07WCgidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKSxZLnR5cGU9ZXRbcV18fCJsaW5lYXIiLGgoRyxZLFgsZ3QsZSkscChHLFksWCx7bGV0dGVyOkgsY291bnRlckF4ZXM6JFtIXSxvdmVybGF5YWJsZUF4ZXM6UShILFYpLGdyaWQ6ZS5ncmlkfSksWCgiZml4ZWRyYW5nZSIpLG50KCksWS5faW5wdXQ9R312YXIgbXQ9YigicmFuZ2VzbGlkZXIiLCJoYW5kbGVEZWZhdWx0cyIpLHZ0PWIoInJhbmdlc2VsZWN0b3IiLCJoYW5kbGVEZWZhdWx0cyIpO2ZvcihkPTA7ZDxCLmxlbmd0aDtkKyspVj1CW2RdLEc9dFtWXSxZPWVbVl0sbXQodCxlLFYpLCJkYXRlIj09PVkudHlwZSYmdnQoRyxZLGUsTixZLmNhbGVuZGFyKSxYKCJmaXhlZHJhbmdlIik7Zm9yKGQ9MDtkPE4ubGVuZ3RoO2QrKyl7Vj1OW2RdLEc9dFtWXSxZPWVbVl07dmFyIHl0PWVbZyhZLmFuY2hvcildO1goImZpeGVkcmFuZ2UiLGIoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoeXQpKX12YXIgeHQ9ZS5fYXhpc0NvbnN0cmFpbnRHcm91cHM9W10sYnQ9ZS5fYXhpc01hdGNoR3JvdXBzPVtdLF90PXR0LmNvbmNhdChydCksd3Q9ai5jb25jYXQobi5zaW1wbGVNYXAocnQsZykpO2ZvcihkPTA7ZDx3dC5sZW5ndGg7ZCsrKXt2YXIgVHQsa3Q7SD0oVj13dFtkXSkuY2hhckF0KDApLEc9dFtWXSxZPWVbVl0sVHQ9InkiPT09SCYmIUcuaGFzT3duUHJvcGVydHkoInNjYWxlYW5jaG9yIikmJkNbVl0/WS5hbmNob3I6dm9pZCAwLGt0PSFHLmhhc093blByb3BlcnR5KCJjb25zdHJhaW4iKSYmQ1tWXT8iZG9tYWluIjp2b2lkIDAsZihHLFksWCx7YWxsQXhpc0lkczpfdCxsYXlvdXRPdXQ6ZSxzY2FsZWFuY2hvckRmbHQ6VHQsY29uc3RyYWluRGZsdDprdH0pfWZvcihkPTA7ZDxidC5sZW5ndGg7ZCsrKXt2YXIgTXQ9YnRbZF0sQXQ9bnVsbCxTdD1udWxsO2ZvcihxIGluIE10KShZPWVbZyhxKV0pLm1hdGNoZXN8fChBdD1ZLnJhbmdlLFN0PVkuYXV0b3JhbmdlKTtpZihudWxsPT09QXR8fG51bGw9PT1TdClmb3IocSBpbiBNdCl7QXQ9KFk9ZVtnKHEpXSkucmFuZ2UsU3Q9WS5hdXRvcmFuZ2U7YnJlYWt9Zm9yKHEgaW4gTXQpKFk9ZVtnKHEpXSkubWF0Y2hlcyYmKFkucmFuZ2U9QXQuc2xpY2UoKSxZLmF1dG9yYW5nZT1TdCksWS5fbWF0Y2hHcm91cD1NdDtpZih4dC5sZW5ndGgpZm9yKHEgaW4gTXQpZm9yKHk9MDt5PHh0Lmxlbmd0aDt5Kyspe3ZhciBFdD14dFt5XTtmb3IodmFyIEN0IGluIEV0KXE9PT1DdCYmKG4ud2FybigiQXhpcyAiK0N0KyIgaXMgc2V0IHdpdGggYm90aCBhICpzY2FsZWFuY2hvciogYW5kICptYXRjaGVzKiBjb25zdHJhaW50OyBpZ25vcmluZyB0aGUgc2NhbGUgY29uc3RyYWludC4iKSxkZWxldGUgRXRbQ3RdLE9iamVjdC5rZXlzKEV0KS5sZW5ndGg8MiYmeHQuc3BsaWNlKHksMSkpfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NTEsIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJtb2RlX2RlZmF1bHRzIjo2NTQsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODgsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL2xheW91dF9hdHRyaWJ1dGVzIjo4NTMsIi4vYXhpc19kZWZhdWx0cyI6ODAxLCIuL2F4aXNfaWRzIjo4MDIsIi4vY29uc3RhbnRzIjo4MDUsIi4vY29uc3RyYWludHMiOjgwNiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODEzLCIuL3Bvc2l0aW9uX2RlZmF1bHRzIjo4MTYsIi4vdHlwZV9kZWZhdWx0cyI6ODI0fV0sODE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKS5taXgsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKS5saWdodEZyYWN0aW9uLGE9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPShvPW98fHt9KS5kZmx0Q29sb3I7ZnVuY3Rpb24gbChyLG4pe3JldHVybiBhLmNvZXJjZTIodCxlLG8uYXR0cmlidXRlcyxyLG4pfXZhciBjPWwoImxpbmVjb2xvciIscyksdT1sKCJsaW5ld2lkdGgiKTtyKCJzaG93bGluZSIsby5zaG93TGluZXx8ISFjfHwhIXUpfHwoZGVsZXRlIGUubGluZWNvbG9yLGRlbGV0ZSBlLmxpbmV3aWR0aCk7dmFyIGg9bCgiZ3JpZGNvbG9yIixuKHMsby5iZ0NvbG9yLG8uYmxlbmR8fGkpLnRvUmdiU3RyaW5nKCkpLGY9bCgiZ3JpZHdpZHRoIik7aWYocigic2hvd2dyaWQiLG8uc2hvd0dyaWR8fCEhaHx8ISFmKXx8KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkd2lkdGgpLCFvLm5vWmVyb0xpbmUpe3ZhciBwPWwoInplcm9saW5lY29sb3IiLHMpLGQ9bCgiemVyb2xpbmV3aWR0aCIpO3IoInplcm9saW5lIixvLnNob3dHcmlkfHwhIXB8fCEhZCl8fChkZWxldGUgZS56ZXJvbGluZWNvbG9yLGRlbGV0ZSBlLnplcm9saW5ld2lkdGgpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MTQsIi4uLy4uL2xpYiI6NzUwLHRpbnljb2xvcjI6NTQ4fV0sODE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsLGMsdT1hLmNvdW50ZXJBeGVzfHxbXSxoPWEub3ZlcmxheWFibGVBeGVzfHxbXSxmPWEubGV0dGVyLHA9YS5ncmlkO3AmJihzPXAuX2RvbWFpbnNbZl1bcC5fYXhpc01hcFtlLl9pZF1dLG89cC5fYW5jaG9yc1tlLl9pZF0scyYmKGw9cFtmKyJzaWRlIl0uc3BsaXQoIiAiKVswXSxjPXAuZG9tYWluW2ZdWyJyaWdodCI9PT1sfHwidG9wIj09PWw/MTowXSkpLHM9c3x8WzAsMV0sbz1vfHwobih0LnBvc2l0aW9uKT8iZnJlZSI6dVswXXx8ImZyZWUiKSxsPWx8fCgieCI9PT1mPyJib3R0b20iOiJsZWZ0IiksYz1jfHwwLCJmcmVlIj09PWkuY29lcmNlKHQsZSx7YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIl0uY29uY2F0KHUpLGRmbHQ6b319LCJhbmNob3IiKSYmcigicG9zaXRpb24iLGMpLGkuY29lcmNlKHQsZSx7c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOiJ4Ij09PWY/WyJib3R0b20iLCJ0b3AiXTpbImxlZnQiLCJyaWdodCJdLGRmbHQ6bH19LCJzaWRlIik7dmFyIGQ9ITE7aWYoaC5sZW5ndGgmJihkPWkuY29lcmNlKHQsZSx7b3ZlcmxheWluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMV0uY29uY2F0KGgpLGRmbHQ6ITF9fSwib3ZlcmxheWluZyIpKSwhZCl7dmFyIGc9cigiZG9tYWluIixzKTtnWzBdPmdbMV0tMS80MDk2JiYoZS5kb21haW49cyksaS5ub25lT3JBbGwodC5kb21haW4sZS5kb21haW4scyl9cmV0dXJuIHIoImxheWVyIiksZX19LHsiLi4vLi4vbGliIjo3NTAsImZhc3QtaXNudW1lcmljIjoyNDF9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkZST01fQkw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1yJiYocj1uW3QuY29uc3RyYWludG93YXJkfHwiY2VudGVyIl0pO3ZhciBpPVt0LnIybCh0LnJhbmdlWzBdKSx0LnIybCh0LnJhbmdlWzFdKV0sYT1pWzBdKyhpWzFdLWlbMF0pKnI7dC5yYW5nZT10Ll9pbnB1dC5yYW5nZT1bdC5sMnIoYSsoaVswXS1hKSplKSx0LmwycihhKyhpWzFdLWEpKmUpXX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzE3fV0sODE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBvbHlib29sanMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKS5kYXNoU3R5bGUsbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5tYWtlRXZlbnREYXRhLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIiksdT1jLmZyZWVNb2RlLGg9Yy5yZWN0TW9kZSxmPWMuZHJhd01vZGUscD1jLm9wZW5Nb2RlLGQ9Yy5zZWxlY3RNb2RlLGc9dCgiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9kaXNwbGF5X291dGxpbmVzIiksbT10KCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2hlbHBlcnMiKS5oYW5kbGVFbGxpcHNlLHY9dCgiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9uZXdzaGFwZXMiKSx5PXQoIi4uLy4uL2xpYiIpLHg9dCgiLi4vLi4vbGliL3BvbHlnb24iKSxiPXQoIi4uLy4uL2xpYi90aHJvdHRsZSIpLF89dCgiLi9heGlzX2lkcyIpLmdldEZyb21JZCx3PXQoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLFQ9dCgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLGs9dCgiLi9jb25zdGFudHMiKSxNPWsuTUlOU0VMRUNULEE9eC5maWx0ZXIsUz14LnRlc3RlcixFPXQoIi4vaGFuZGxlX291dGxpbmUiKS5jbGVhclNlbGVjdCxDPXQoIi4vaGVscGVycyIpLEw9Qy5wMnIsUD1DLmF4VmFsdWUsST1DLmdldFRyYW5zZm9ybTtmdW5jdGlvbiB6KHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGgsZixkLG0sdix5PWUuX2hvdmVyZGF0YSx4PWUuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlLmluZGV4T2YoImV2ZW50Iik+LTEsYj1bXTtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmQXJyYXkuaXNBcnJheSh0KSYmITAhPT10WzBdLmhvdmVyT25Cb3h9KHkpKXtGKHQsZSxhKTt2YXIgXz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9LTEsbz1bXTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKHI9ZVtuXSxpLmZ1bGxEYXRhLl9leHBhbmRlZEluZGV4PT09ci5jZFswXS50cmFjZS5fZXhwYW5kZWRJbmRleCl7aWYoITA9PT1pLmhvdmVyT25Cb3gpYnJlYWs7dm9pZCAwIT09aS5wb2ludE51bWJlcj9hPWkucG9pbnROdW1iZXI6dm9pZCAwIT09aS5iaW5OdW1iZXImJihhPWkuYmluTnVtYmVyLG89aS5wb2ludE51bWJlcnMpO2JyZWFrfXJldHVybntwb2ludE51bWJlcjphLHBvaW50TnVtYmVyczpvLHNlYXJjaEluZm86cn19KHkscz1OKGUscixuLGkpKTtpZihfLnBvaW50TnVtYmVycy5sZW5ndGg+MD9mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspKHI9dFtpXSkuY2RbMF0udHJhY2Uuc2VsZWN0ZWRwb2ludHMmJnIuY2RbMF0udHJhY2Uuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPjAmJmEucHVzaChyKTtpZigxPT09YS5sZW5ndGgmJmFbMF09PT1lLnNlYXJjaEluZm8mJihuPWUuc2VhcmNoSW5mby5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPT09ZS5wb2ludE51bWJlcnMubGVuZ3RoKXtmb3IoaT0wO2k8ZS5wb2ludE51bWJlcnMubGVuZ3RoO2krKylpZihuLnNlbGVjdGVkcG9pbnRzLmluZGV4T2YoZS5wb2ludE51bWJlcnNbaV0pPDApcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9KHMsXyk6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9MDtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKGU9dFtuXSwocj1lLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cyl7aWYoci5zZWxlY3RlZHBvaW50cy5sZW5ndGg+MSlyZXR1cm4hMTtpZigoaSs9ci5zZWxlY3RlZHBvaW50cy5sZW5ndGgpPjEpcmV0dXJuITF9cmV0dXJuIDE9PT1pfShzKSYmKGY9aihfKSkpe2ZvcihvJiZvLnJlbW92ZSgpLHY9MDt2PHMubGVuZ3RoO3YrKykobD1zW3ZdKS5fbW9kdWxlLnNlbGVjdFBvaW50cyhsLCExKTtVKGUscyksQihhKSx4JiZlLmVtaXQoInBsb3RseV9kZXNlbGVjdCIsbnVsbCl9ZWxzZXtmb3IoZD10LnNoaWZ0S2V5JiYodm9pZCAwIT09Zj9mOmooXykpLGM9ZnVuY3Rpb24odCxlLHIpe3JldHVybntwb2ludE51bWJlcjp0LHNlYXJjaEluZm86ZSxzdWJ0cmFjdDpyfX0oXy5wb2ludE51bWJlcixfLnNlYXJjaEluZm8sZCksdT1SKGEuc2VsZWN0aW9uRGVmcy5jb25jYXQoW2NdKSksdj0wO3Y8cy5sZW5ndGg7disrKWlmKGg9VihzW3ZdLl9tb2R1bGUuc2VsZWN0UG9pbnRzKHNbdl0sdSksc1t2XSksYi5sZW5ndGgpZm9yKHZhciB3PTA7dzxoLmxlbmd0aDt3KyspYi5wdXNoKGhbd10pO2Vsc2UgYj1oO2lmKFUoZSxzLG09e3BvaW50czpifSksYyYmYSYmYS5zZWxlY3Rpb25EZWZzLnB1c2goYyksbyl7dmFyIFQ9YS5tZXJnZWRQb2x5Z29ucyxrPXAoYS5kcmFnbW9kZSk7ZyhxKFQsayksbyxhKX14JiZlLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsbSl9fX1mdW5jdGlvbiBPKHQpe3JldHVybiJwb2ludE51bWJlciJpbiB0JiYic2VhcmNoSW5mbyJpbiB0fWZ1bmN0aW9uIEQodCl7cmV0dXJue3htaW46MCx4bWF4OjAseW1pbjowLHltYXg6MCxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4O3JldHVybiBpLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4PT09YSYmbj09PXQucG9pbnROdW1iZXJ9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExLHN1YnRyYWN0OnQuc3VidHJhY3R9fWZ1bmN0aW9uIFIodCl7Zm9yKHZhciBlPVtdLHI9Tyh0WzBdKT8wOnRbMF1bMF1bMF0sbj1yLGk9Tyh0WzBdKT8wOnRbMF1bMF1bMV0sYT1pLG89MDtvPHQubGVuZ3RoO28rKylpZihPKHRbb10pKWUucHVzaChEKHRbb10pKTtlbHNle3ZhciBzPXgudGVzdGVyKHRbb10pO3Muc3VidHJhY3Q9dFtvXS5zdWJ0cmFjdCxlLnB1c2gocykscj1NYXRoLm1pbihyLHMueG1pbiksbj1NYXRoLm1heChuLHMueG1heCksaT1NYXRoLm1pbihpLHMueW1pbiksYT1NYXRoLm1heChhLHMueW1heCl9cmV0dXJue3htaW46cix4bWF4Om4seW1pbjppLHltYXg6YSxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24odCxyLG4saSl7Zm9yKHZhciBhPSExLG89MDtvPGUubGVuZ3RoO28rKyllW29dLmNvbnRhaW5zKHQscixuLGkpJiYoYT0hMT09PWVbb10uc3VidHJhY3QpO3JldHVybiBhfSxpc1JlY3Q6ITEsZGVnZW5lcmF0ZTohMX19ZnVuY3Rpb24gRih0LGUscil7ZS5fZnVsbExheW91dC5fZHJhd2luZz0hMTt2YXIgbj1lLl9mdWxsTGF5b3V0LGk9ci5wbG90aW5mbyxhPXIuZHJhZ21vZGUsbz1uLl9sYXN0U2VsZWN0ZWRTdWJwbG90JiZuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PT09aS5pZCxzPSh0LnNoaWZ0S2V5fHx0LmFsdEtleSkmJiEoZihhKSYmcChhKSk7byYmcyYmaS5zZWxlY3Rpb24mJmkuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnMmJiFyLnNlbGVjdGlvbkRlZnM/KHIuc2VsZWN0aW9uRGVmcz1pLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzLHIubWVyZ2VkUG9seWdvbnM9aS5zZWxlY3Rpb24ubWVyZ2VkUG9seWdvbnMpOnMmJmkuc2VsZWN0aW9ufHxCKHIpLG98fChFKGUpLG4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9aS5pZCl9ZnVuY3Rpb24gQih0KXt2YXIgZT10LmRyYWdtb2RlLHI9dC5wbG90aW5mbyxuPXQuZ2Q7aWYobi5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MCYmbi5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlKG4pLGYoZSkpe3ZhciBhPW4uX2Z1bGxMYXlvdXQuX3pvb21sYXllci5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZS0iK3IuaWQpO2lmKGEmJm4uX2Z1bGxMYXlvdXQuX2RyYXdpbmcpe3ZhciBvPXYoYSx0KTtvJiZpLmNhbGwoIl9ndWlSZWxheW91dCIsbix7c2hhcGVzOm99KSxuLl9mdWxsTGF5b3V0Ll9kcmF3aW5nPSExfX1yLnNlbGVjdGlvbj17fSxyLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzPXQuc2VsZWN0aW9uRGVmcz1bXSxyLnNlbGVjdGlvbi5tZXJnZWRQb2x5Z29ucz10Lm1lcmdlZFBvbHlnb25zPVtdfWZ1bmN0aW9uIE4odCxlLHIsbil7dmFyIGksYSxvLHM9W10sbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2lkfSkpLGM9ci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9pZH0pKTtmb3Iobz0wO288dC5jYWxjZGF0YS5sZW5ndGg7bysrKWlmKCEwPT09KGE9KGk9dC5jYWxjZGF0YVtvXSlbMF0udHJhY2UpLnZpc2libGUmJmEuX21vZHVsZSYmYS5fbW9kdWxlLnNlbGVjdFBvaW50cylpZighbnx8YS5zdWJwbG90IT09biYmYS5nZW8hPT1uKWlmKCJzcGxvbSI9PT1hLnR5cGUmJmEuX3hheGVzW2xbMF1dJiZhLl95YXhlc1tjWzBdXSl7dmFyIHU9ZihhLl9tb2R1bGUsaSxlWzBdLHJbMF0pO3Uuc2NlbmU9dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbYS51aWRdLHMucHVzaCh1KX1lbHNlIGlmKCJzYW5rZXkiPT09YS50eXBlKXt2YXIgaD1mKGEuX21vZHVsZSxpLGVbMF0sclswXSk7cy5wdXNoKGgpfWVsc2V7aWYoLTE9PT1sLmluZGV4T2YoYS54YXhpcykpY29udGludWU7aWYoLTE9PT1jLmluZGV4T2YoYS55YXhpcykpY29udGludWU7cy5wdXNoKGYoYS5fbW9kdWxlLGksXyh0LGEueGF4aXMpLF8odCxhLnlheGlzKSkpfWVsc2Ugcy5wdXNoKGYoYS5fbW9kdWxlLGksZVswXSxyWzBdKSk7cmV0dXJuIHM7ZnVuY3Rpb24gZih0LGUscixuKXtyZXR1cm57X21vZHVsZTp0LGNkOmUseGF4aXM6cix5YXhpczpufX19ZnVuY3Rpb24gaih0KXt2YXIgZT10LnNlYXJjaEluZm8uY2RbMF0udHJhY2Uscj10LnBvaW50TnVtYmVyLG49dC5wb2ludE51bWJlcnMsaT1uLmxlbmd0aD4wP25bMF06cjtyZXR1cm4hIWUuc2VsZWN0ZWRwb2ludHMmJmUuc2VsZWN0ZWRwb2ludHMuaW5kZXhPZihpKT4tMX1mdW5jdGlvbiBVKHQsZSxyKXt2YXIgbixhLG8scztmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbD1lW25dLmNkWzBdLnRyYWNlLl9mdWxsSW5wdXQsYz10Ll9mdWxsTGF5b3V0Ll90cmFjZVByZUdVSVtsLnVpZF18fHt9O3ZvaWQgMD09PWMuc2VsZWN0ZWRwb2ludHMmJihjLnNlbGVjdGVkcG9pbnRzPWwuX2lucHV0LnNlbGVjdGVkcG9pbnRzfHxudWxsKX1pZihyKXt2YXIgdT1yLnBvaW50c3x8W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKykocz1lW25dLmNkWzBdLnRyYWNlKS5faW5wdXQuc2VsZWN0ZWRwb2ludHM9cy5fZnVsbElucHV0LnNlbGVjdGVkcG9pbnRzPVtdLHMuX2Z1bGxJbnB1dCE9PXMmJihzLnNlbGVjdGVkcG9pbnRzPVtdKTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgaD11W25dLGY9aC5kYXRhLHA9aC5mdWxsRGF0YTtoLnBvaW50SW5kaWNlcz8oW10ucHVzaC5hcHBseShmLnNlbGVjdGVkcG9pbnRzLGgucG9pbnRJbmRpY2VzKSxzLl9mdWxsSW5wdXQhPT1zJiZbXS5wdXNoLmFwcGx5KHAuc2VsZWN0ZWRwb2ludHMsaC5wb2ludEluZGljZXMpKTooZi5zZWxlY3RlZHBvaW50cy5wdXNoKGgucG9pbnRJbmRleCkscy5fZnVsbElucHV0IT09cyYmcC5zZWxlY3RlZHBvaW50cy5wdXNoKGgucG9pbnRJbmRleCkpfX1lbHNlIGZvcihuPTA7bjxlLmxlbmd0aDtuKyspZGVsZXRlKHM9ZVtuXS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMsZGVsZXRlIHMuX2lucHV0LnNlbGVjdGVkcG9pbnRzLHMuX2Z1bGxJbnB1dCE9PXMmJmRlbGV0ZSBzLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM7dmFyIGQ9ITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7cz0obz0oYT1lW25dKS5jZClbMF0udHJhY2UsaS50cmFjZUlzKHMsInJlZ2wiKSYmKGQ9ITApO3ZhciBnPWEuX21vZHVsZSxtPWcuc3R5bGVPblNlbGVjdHx8Zy5zdHlsZTttJiYobSh0LG8sb1swXS5ub2RlMyksb1swXS5ub2RlUmFuZ2VQbG90MyYmbSh0LG8sb1swXS5ub2RlUmFuZ2VQbG90MykpfWQmJih3KHQpLFQodCkpfWZ1bmN0aW9uIFYodCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj1lLmNkLG49ZS5jZFswXS50cmFjZSxpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXT1sKHRbaV0sbixyKTtyZXR1cm4gdH1mdW5jdGlvbiBxKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7cltuXT1bXTtmb3IodmFyIGk9MDtpPHRbbl0ubGVuZ3RoO2krKyl7cltuXVtpXT1bXSxyW25dW2ldWzBdPWk/IkwiOiJNIjtmb3IodmFyIGE9MDthPHRbbl1baV0ubGVuZ3RoO2ErKylyW25dW2ldLnB1c2godFtuXVtpXVthXSl9ZXx8cltuXS5wdXNoKFsiWiIscltuXVswXVsxXSxyW25dWzBdWzJdXSl9cmV0dXJuIHJ9ZS5leHBvcnRzPXtwcmVwU2VsZWN0OmZ1bmN0aW9uKHQsZSxyLGksbCl7dmFyIGMsdix4LF8sdyxULEUsQz11KGwpLE89aChsKSxEPXAobCksaj1mKGwpLEg9ZChsKSxHPSJkcmF3Y2lyY2xlIj09PWwsWT0iZHJhd2xpbmUiPT09bHx8RyxXPWkuZ2QsWj1XLl9mdWxsTGF5b3V0LFg9Wi5fem9vbWxheWVyLEo9aS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEs9aS5wbG90aW5mbyxRPUkoSyksJD1lLUoubGVmdCx0dD1yLUoudG9wLGV0PSQscnQ9dHQsbnQ9Ik0iKyQrIiwiK3R0LGl0PWkueGF4ZXNbMF0uX2xlbmd0aCxhdD1pLnlheGVzWzBdLl9sZW5ndGgsb3Q9aS54YXhlcy5jb25jYXQoaS55YXhlcyksc3Q9dC5hbHRLZXkmJiEoZihsKSYmRCk7Rih0LFcsaSksQyYmKGM9QShbWyQsdHRdXSxrLkJFTkRQWCkpO3ZhciBsdD1YLnNlbGVjdEFsbCgicGF0aC5zZWxlY3Qtb3V0bGluZS0iK0suaWQpLmRhdGEoaj9bMF06WzEsMl0pLGN0PVoubmV3c2hhcGU7bHQuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJzZWxlY3Qtb3V0bGluZSBzZWxlY3Qtb3V0bGluZS0iK3QrIiBzZWxlY3Qtb3V0bGluZS0iK0suaWR9KSkuc3R5bGUoaj97b3BhY2l0eTpjdC5vcGFjaXR5LzIsZmlsbDpEP3ZvaWQgMDpjdC5maWxsY29sb3Isc3Ryb2tlOmN0LmxpbmUuY29sb3IsInN0cm9rZS1kYXNoYXJyYXkiOmEoY3QubGluZS5kYXNoLGN0LmxpbmUud2lkdGgpLCJzdHJva2Utd2lkdGgiOmN0LmxpbmUud2lkdGgrInB4In06e30pLmF0dHIoImZpbGwtcnVsZSIsY3QuZmlsbHJ1bGUpLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhIWopLmF0dHIoInRyYW5zZm9ybSIsUSkuYXR0cigiZCIsbnQrIloiKTt2YXIgdXQsaHQ9WC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOm8uYmFja2dyb3VuZCxzdHJva2U6by5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxfSkuYXR0cigidHJhbnNmb3JtIixRKS5hdHRyKCJkIiwiTTAsMFoiKSxmdD1aLl91aWQray5TRUxFQ1RJRCxwdD1bXSxkdD1OKFcsaS54YXhlcyxpLnlheGVzLGkuc3VicGxvdCk7ZnVuY3Rpb24gZ3QodCxlKXtyZXR1cm4gdC1lfXV0PUsuZmlsbFJhbmdlSXRlbXM/Sy5maWxsUmFuZ2VJdGVtczpPP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYW5nZT17fTtmb3Iodz0wO3c8b3QubGVuZ3RoO3crKyl7dmFyIG49b3Rbd10saT1uLl9pZC5jaGFyQXQoMCk7cltuLl9pZF09W0wobixlW2krIm1pbiJdKSxMKG4sZVtpKyJtYXgiXSldLnNvcnQoZ3QpfX06ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubGFzc29Qb2ludHM9e307Zm9yKHc9MDt3PG90Lmxlbmd0aDt3Kyspe3ZhciBpPW90W3ddO25baS5faWRdPXIuZmlsdGVyZWQubWFwKFAoaSkpfX0saS5tb3ZlRm49ZnVuY3Rpb24odCxlKXtldD1NYXRoLm1heCgwLE1hdGgubWluKGl0LHQrJCkpLHJ0PU1hdGgubWF4KDAsTWF0aC5taW4oYXQsZSt0dCkpO3ZhciByPU1hdGguYWJzKGV0LSQpLGE9TWF0aC5hYnMocnQtdHQpO2lmKE8pe3ZhciBvLHMsbDtpZihIKXt2YXIgdT1aLnNlbGVjdGRpcmVjdGlvbjtzd2l0Y2gobz0iYW55Ij09PXU/YTxNYXRoLm1pbiguNipyLE0pPyJoIjpyPE1hdGgubWluKC42KmEsTSk/InYiOiJkIjp1KXtjYXNlImgiOnM9Rz9hdC8yOjAsbD1hdDticmVhaztjYXNlInYiOnM9Rz9pdC8yOjAsbD1pdH19aWYoailzd2l0Y2goWi5uZXdzaGFwZS5kcmF3ZGlyZWN0aW9uKXtjYXNlInZlcnRpY2FsIjpvPSJoIixzPUc/YXQvMjowLGw9YXQ7YnJlYWs7Y2FzZSJob3Jpem9udGFsIjpvPSJ2IixzPUc/aXQvMjowLGw9aXQ7YnJlYWs7Y2FzZSJvcnRobyI6cjxhPyhvPSJoIixzPXR0LGw9cnQpOihvPSJ2IixzPSQsbD1ldCk7YnJlYWs7ZGVmYXVsdDpvPSJkIn0iaCI9PT1vPygoXz1ZP20oRyxbZXQsc10sW2V0LGxdKTpbWyQsc10sWyQsbF0sW2V0LGxdLFtldCxzXV0pLnhtaW49WT9ldDpNYXRoLm1pbigkLGV0KSxfLnhtYXg9WT9ldDpNYXRoLm1heCgkLGV0KSxfLnltaW49TWF0aC5taW4ocyxsKSxfLnltYXg9TWF0aC5tYXgocyxsKSxodC5hdHRyKCJkIiwiTSIrXy54bWluKyIsIisodHQtTSkrImgtNHYiKzIqTSsiaDRaTSIrKF8ueG1heC0xKSsiLCIrKHR0LU0pKyJoNHYiKzIqTSsiaC00WiIpKToidiI9PT1vPygoXz1ZP20oRyxbcyxydF0sW2wscnRdKTpbW3MsdHRdLFtzLHJ0XSxbbCxydF0sW2wsdHRdXSkueG1pbj1NYXRoLm1pbihzLGwpLF8ueG1heD1NYXRoLm1heChzLGwpLF8ueW1pbj1ZP3J0Ok1hdGgubWluKHR0LHJ0KSxfLnltYXg9WT9ydDpNYXRoLm1heCh0dCxydCksaHQuYXR0cigiZCIsIk0iKygkLU0pKyIsIitfLnltaW4rInYtNGgiKzIqTSsidjRaTSIrKCQtTSkrIiwiKyhfLnltYXgtMSkrInY0aCIrMipNKyJ2LTRaIikpOiJkIj09PW8mJigoXz1ZP20oRyxbJCx0dF0sW2V0LHJ0XSk6W1skLHR0XSxbJCxydF0sW2V0LHJ0XSxbZXQsdHRdXSkueG1pbj1NYXRoLm1pbigkLGV0KSxfLnhtYXg9TWF0aC5tYXgoJCxldCksXy55bWluPU1hdGgubWluKHR0LHJ0KSxfLnltYXg9TWF0aC5tYXgodHQscnQpLGh0LmF0dHIoImQiLCJNMCwwWiIpKX1lbHNlIEMmJihjLmFkZFB0KFtldCxydF0pLF89Yy5maWx0ZXJlZCk7aS5zZWxlY3Rpb25EZWZzJiZpLnNlbGVjdGlvbkRlZnMubGVuZ3RoPyh4PWZ1bmN0aW9uKHQsZSxyKXtpZihyKXJldHVybiBuLmRpZmZlcmVuY2Uoe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9ucztyZXR1cm4gbi51bmlvbih7cmVnaW9uczp0LGludmVydGVkOiExfSx7cmVnaW9uczpbZV0saW52ZXJ0ZWQ6ITF9KS5yZWdpb25zfShpLm1lcmdlZFBvbHlnb25zLF8sc3QpLF8uc3VidHJhY3Q9c3Qsdj1SKGkuc2VsZWN0aW9uRGVmcy5jb25jYXQoW19dKSkpOih4PVtfXSx2PVMoXykpLGcocSh4LEQpLGx0LGkpLEgmJmIudGhyb3R0bGUoZnQsay5TRUxFQ1RERUxBWSwoZnVuY3Rpb24oKXt2YXIgdDtwdD1bXTt2YXIgZSxyPVtdO2Zvcih3PTA7dzxkdC5sZW5ndGg7dysrKWlmKGU9KFQ9ZHRbd10pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKFQsdiksci5wdXNoKGUpLHQ9VihlLFQpLHB0Lmxlbmd0aClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylwdC5wdXNoKHRbbl0pO2Vsc2UgcHQ9dDtVKFcsZHQsRT17cG9pbnRzOnB0fSksdXQoRSxfLGMpLGkuZ2QuZW1pdCgicGxvdGx5X3NlbGVjdGluZyIsRSl9KSl9LGkuY2xpY2tGbj1mdW5jdGlvbih0LGUpe2lmKGh0LnJlbW92ZSgpLFcuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTApVy5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlKFcpO2Vsc2UgaWYoIWope3ZhciByPVouY2xpY2ttb2RlO2IuZG9uZShmdCkudGhlbigoZnVuY3Rpb24oKXtpZihiLmNsZWFyKGZ0KSwyPT09dCl7Zm9yKGx0LnJlbW92ZSgpLHc9MDt3PGR0Lmxlbmd0aDt3KyspKFQ9ZHRbd10pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKFQsITEpO1UoVyxkdCksQihpKSxXLmVtaXQoInBsb3RseV9kZXNlbGVjdCIsbnVsbCl9ZWxzZSByLmluZGV4T2YoInNlbGVjdCIpPi0xJiZ6KGUsVyxpLnhheGVzLGkueWF4ZXMsaS5zdWJwbG90LGksbHQpLCJldmVudCI9PT1yJiZXLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsdm9pZCAwKTtzLmNsaWNrKFcsZSl9KSkuY2F0Y2goeS5lcnJvcil9fSxpLmRvbmVGbj1mdW5jdGlvbigpe2h0LnJlbW92ZSgpLGIuZG9uZShmdCkudGhlbigoZnVuY3Rpb24oKXtiLmNsZWFyKGZ0KSxpLmdkLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsRSksXyYmaS5zZWxlY3Rpb25EZWZzJiYoXy5zdWJ0cmFjdD1zdCxpLnNlbGVjdGlvbkRlZnMucHVzaChfKSxpLm1lcmdlZFBvbHlnb25zLmxlbmd0aD0wLFtdLnB1c2guYXBwbHkoaS5tZXJnZWRQb2x5Z29ucyx4KSksaS5kb25lRm5Db21wbGV0ZWQmJmkuZG9uZUZuQ29tcGxldGVkKHB0KX0pKS5jYXRjaCh5LmVycm9yKSxqJiZCKGkpfX0sY2xlYXJTZWxlY3Q6RSxjbGVhclNlbGVjdGlvbnNDYWNoZTpCLHNlbGVjdE9uQ2xpY2s6en19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjYzMywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY1NSwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NTEsIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvZGlzcGxheV9vdXRsaW5lcyI6NzAwLCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2hlbHBlcnMiOjcwMSwiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9uZXdzaGFwZXMiOjcwMiwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NzM0LCIuLi8uLi9saWIvcG9seWdvbiI6NzYyLCIuLi8uLi9saWIvdGhyb3R0bGUiOjc3NSwiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiOjc4OSwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi9heGlzX2lkcyI6ODAyLCIuL2NvbnN0YW50cyI6ODA1LCIuL2hhbmRsZV9vdXRsaW5lIjo4MDksIi4vaGVscGVycyI6ODEwLHBvbHlib29sanM6NDkxfV0sODE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJkMy10aW1lLWZvcm1hdCIpLnV0Y0Zvcm1hdCxhPXQoImZhc3QtaXNudW1lcmljIiksbz10KCIuLi8uLi9saWIiKSxzPW8uY2xlYW5OdW1iZXIsbD1vLm1zMkRhdGVUaW1lLGM9by5kYXRlVGltZTJtcyx1PW8uZW5zdXJlTnVtYmVyLGg9by5pc0FycmF5T3JUeXBlZEFycmF5LGY9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLHA9Zi5GUF9TQUZFLGQ9Zi5CQUROVU0sZz1mLkxPR19DTElQLG09Zi5PTkVXRUVLLHY9Zi5PTkVEQVkseT1mLk9ORUhPVVIseD1mLk9ORU1JTixiPWYuT05FU0VDLF89dCgiLi9heGlzX2lkcyIpLHc9dCgiLi9jb25zdGFudHMiKSxUPXcuSE9VUl9QQVRURVJOLGs9dy5XRUVLREFZX1BBVFRFUk47ZnVuY3Rpb24gTSh0KXtyZXR1cm4gTWF0aC5wb3coMTAsdCl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gbnVsbCE9dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXQuX2lkfHwieCIsZj1yLmNoYXJBdCgwKTtmdW5jdGlvbiBTKGUscil7aWYoZT4wKXJldHVybiBNYXRoLmxvZyhlKS9NYXRoLkxOMTA7aWYoZTw9MCYmciYmdC5yYW5nZSYmMj09PXQucmFuZ2UubGVuZ3RoKXt2YXIgbj10LnJhbmdlWzBdLGk9dC5yYW5nZVsxXTtyZXR1cm4uNSoobitpLTIqZypNYXRoLmFicyhuLWkpKX1yZXR1cm4gZH1mdW5jdGlvbiBFKGUscixuLGkpe2lmKChpfHx7fSkubXNVVEMmJmEoZSkpcmV0dXJuK2U7dmFyIHM9YyhlLG58fHQuY2FsZW5kYXIpO2lmKHM9PT1kKXtpZighYShlKSlyZXR1cm4gZDtlPStlO3ZhciBsPU1hdGguZmxvb3IoMTAqby5tb2QoZSsuMDUsMSkpLHU9TWF0aC5yb3VuZChlLWwvMTApO3M9YyhuZXcgRGF0ZSh1KSkrbC8xMH1yZXR1cm4gc31mdW5jdGlvbiBDKGUscixuKXtyZXR1cm4gbChlLHIsbnx8dC5jYWxlbmRhcil9ZnVuY3Rpb24gTChlKXtyZXR1cm4gdC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUpXX1mdW5jdGlvbiBQKGUpe2lmKEEoZSkpe2lmKHZvaWQgMD09PXQuX2NhdGVnb3JpZXNNYXAmJih0Ll9jYXRlZ29yaWVzTWFwPXt9KSx2b2lkIDAhPT10Ll9jYXRlZ29yaWVzTWFwW2VdKXJldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdO3QuX2NhdGVnb3JpZXMucHVzaCgibnVtYmVyIj09dHlwZW9mIGU/U3RyaW5nKGUpOmUpO3ZhciByPXQuX2NhdGVnb3JpZXMubGVuZ3RoLTE7cmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV09cixyfXJldHVybiBkfWZ1bmN0aW9uIEkoZSl7aWYodC5fY2F0ZWdvcmllc01hcClyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXX1mdW5jdGlvbiB6KHQpe3ZhciBlPUkodCk7cmV0dXJuIHZvaWQgMCE9PWU/ZTphKHQpPyt0OnZvaWQgMH1mdW5jdGlvbiBPKHQpe3JldHVybiBhKHQpPyt0OkkodCl9ZnVuY3Rpb24gRCh0LGUscil7cmV0dXJuIG4ucm91bmQocitlKnQsMil9ZnVuY3Rpb24gUih0LGUscil7cmV0dXJuKHQtcikvZX12YXIgRj1mdW5jdGlvbihlKXtyZXR1cm4gYShlKT9EKGUsdC5fbSx0Ll9iKTpkfSxCPWZ1bmN0aW9uKGUpe3JldHVybiBSKGUsdC5fbSx0Ll9iKX07aWYodC5yYW5nZWJyZWFrcyl7dmFyIE49InkiPT09ZjtGPWZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiBkO3ZhciByPXQuX3JhbmdlYnJlYWtzLmxlbmd0aDtpZighcilyZXR1cm4gRChlLHQuX20sdC5fYik7dmFyIG49Tjt0LnJhbmdlWzBdPnQucmFuZ2VbMV0mJihuPSFuKTtmb3IodmFyIGk9bj8tMToxLG89aSplLHM9MCxsPTA7bDxyO2wrKyl7dmFyIGM9aSp0Ll9yYW5nZWJyZWFrc1tsXS5taW4sdT1pKnQuX3JhbmdlYnJlYWtzW2xdLm1heDtpZihvPGMpYnJlYWs7aWYoIShvPnUpKXtzPW88KGMrdSkvMj9sOmwrMTticmVha31zPWwrMX12YXIgaD10Ll9CW3NdfHwwO3JldHVybiBpc0Zpbml0ZShoKT9EKGUsdC5fbTIsaCk6MH0sQj1mdW5jdGlvbihlKXt2YXIgcj10Ll9yYW5nZWJyZWFrcy5sZW5ndGg7aWYoIXIpcmV0dXJuIFIoZSx0Ll9tLHQuX2IpO2Zvcih2YXIgbj0wLGk9MDtpPHImJiEoZTx0Ll9yYW5nZWJyZWFrc1tpXS5wbWluKTtpKyspZT50Ll9yYW5nZWJyZWFrc1tpXS5wbWF4JiYobj1pKzEpO3JldHVybiBSKGUsdC5fbTIsdC5fQltuXSl9fXQuYzJsPSJsb2ciPT09dC50eXBlP1M6dSx0LmwyYz0ibG9nIj09PXQudHlwZT9NOnUsdC5sMnA9Rix0LnAybD1CLHQuYzJwPSJsb2ciPT09dC50eXBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIEYoUyh0LGUpKX06Rix0LnAyYz0ibG9nIj09PXQudHlwZT9mdW5jdGlvbih0KXtyZXR1cm4gTShCKHQpKX06QiwtMSE9PVsibGluZWFyIiwiLSJdLmluZGV4T2YodC50eXBlKT8odC5kMnI9dC5yMmQ9dC5kMmM9dC5yMmM9dC5kMmw9dC5yMmw9cyx0LmMyZD10LmMycj10LmwyZD10Lmwycj11LHQuZDJwPXQucjJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycChzKGUpKX0sdC5wMmQ9dC5wMnI9Qix0LmNsZWFuUG9zPXUpOiJsb2ciPT09dC50eXBlPyh0LmQycj10LmQybD1mdW5jdGlvbih0LGUpe3JldHVybiBTKHModCksZSl9LHQucjJkPXQucjJjPWZ1bmN0aW9uKHQpe3JldHVybiBNKHModCkpfSx0LmQyYz10LnIybD1zLHQuYzJkPXQubDJyPXUsdC5jMnI9Uyx0LmwyZD1NLHQuZDJwPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQubDJwKHQuZDJyKGUscikpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gTShCKHQpKX0sdC5yMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHMoZSkpfSx0LnAycj1CLHQuY2xlYW5Qb3M9dSk6ImRhdGUiPT09dC50eXBlPyh0LmQycj10LnIyZD1vLmlkZW50aXR5LHQuZDJjPXQucjJjPXQuZDJsPXQucjJsPUUsdC5jMmQ9dC5jMnI9dC5sMmQ9dC5sMnI9Qyx0LmQycD10LnIycD1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHQubDJwKEUoZSwwLG4pKX0sdC5wMmQ9dC5wMnI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBDKEIodCksZSxyKX0sdC5jbGVhblBvcz1mdW5jdGlvbihlKXtyZXR1cm4gby5jbGVhbkRhdGUoZSxkLHQuY2FsZW5kYXIpfSk6ImNhdGVnb3J5Ij09PXQudHlwZT8odC5kMmM9dC5kMmw9UCx0LnIyZD10LmMyZD10LmwyZD1MLHQuZDJyPXQuZDJsX25vYWRkPXosdC5yMmM9ZnVuY3Rpb24oZSl7dmFyIHI9TyhlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZnJhY3Rpb24yciguNSl9LHQubDJyPXQuYzJyPXUsdC5yMmw9Tyx0LmQycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAodC5yMmMoZSkpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gTChCKHQpKX0sdC5yMnA9dC5kMnAsdC5wMnI9Qix0LmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmIiIhPT10P3Q6dSh0KX0pOiJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZSYmKHQucjJkPXQuYzJkPXQubDJkPUwsdC5kMnI9dC5kMmxfbm9hZGQ9eix0LnIyYz1mdW5jdGlvbihlKXt2YXIgcj16KGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5mcmFjdGlvbjJyKC41KX0sdC5yMmNfanVzdF9pbmRpY2VzPUksdC5sMnI9dC5jMnI9dSx0LnIybD16LHQuZDJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycCh0LnIyYyhlKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiBMKEIodCkpfSx0LnIycD10LmQycCx0LnAycj1CLHQuY2xlYW5Qb3M9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fCJzdHJpbmciPT10eXBlb2YgdCYmIiIhPT10P3Q6dSh0KX0sdC5zZXR1cE11bHRpQ2F0ZWdvcnk9ZnVuY3Rpb24obil7dmFyIGksYSxzPXQuX3RyYWNlSW5kaWNlcyxsPWUuX2F4aXNNYXRjaEdyb3VwcztpZihsJiZsLmxlbmd0aCYmMD09PXQuX2NhdGVnb3JpZXMubGVuZ3RoKWZvcihpPTA7aTxsLmxlbmd0aDtpKyspe3ZhciBjPWxbaV07aWYoY1tyXSlmb3IodmFyIHUgaW4gYylpZih1IT09cil7dmFyIHA9ZVtfLmlkMm5hbWUodSldO3M9cy5jb25jYXQocC5fdHJhY2VJbmRpY2VzKX19dmFyIGQ9W1swLHt9XSxbMCx7fV1dLGc9W107Zm9yKGk9MDtpPHMubGVuZ3RoO2krKyl7dmFyIG09bltzW2ldXTtpZihmIGluIG0pe3ZhciB2PW1bZl0seT1tLl9sZW5ndGh8fG8ubWluUm93TGVuZ3RoKHYpO2lmKGgodlswXSkmJmgodlsxXSkpZm9yKGE9MDthPHk7YSsrKXt2YXIgeD12WzBdW2FdLGI9dlsxXVthXTtBKHgpJiZBKGIpJiYoZy5wdXNoKFt4LGJdKSx4IGluIGRbMF1bMV18fChkWzBdWzFdW3hdPWRbMF1bMF0rKyksYiBpbiBkWzFdWzFdfHwoZFsxXVsxXVtiXT1kWzFdWzBdKyspKX19fWZvcihnLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZFswXVsxXSxuPXJbdFswXV0tcltlWzBdXTtpZihuKXJldHVybiBuO3ZhciBpPWRbMV1bMV07cmV0dXJuIGlbdFsxXV0taVtlWzFdXX0pKSxpPTA7aTxnLmxlbmd0aDtpKyspUChnW2ldKX0pLHQuZnJhY3Rpb24ycj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybiB0LmwycihyK2UqKG4tcikpfSx0LnIyZnJhY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHI9dC5yMmwodC5yYW5nZVswXSksbj10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4odC5yMmwoZSktcikvKG4tcil9LHQuY2xlYW5SYW5nZT1mdW5jdGlvbihlLHIpe3J8fChyPXt9KSxlfHwoZT0icmFuZ2UiKTt2YXIgbixpLHM9by5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpO2lmKGk9KGk9ImRhdGUiPT09dC50eXBlP28uZGZsdFJhbmdlKHQuY2FsZW5kYXIpOiJ5Ij09PWY/dy5ERkxUUkFOR0VZOnIuZGZsdFJhbmdlfHx3LkRGTFRSQU5HRVgpLnNsaWNlKCksInRvemVybyIhPT10LnJhbmdlbW9kZSYmIm5vbm5lZ2F0aXZlIiE9PXQucmFuZ2Vtb2RlfHwoaVswXT0wKSxzJiYyPT09cy5sZW5ndGgpZm9yKCJkYXRlIiE9PXQudHlwZXx8dC5hdXRvcmFuZ2V8fChzWzBdPW8uY2xlYW5EYXRlKHNbMF0sZCx0LmNhbGVuZGFyKSxzWzFdPW8uY2xlYW5EYXRlKHNbMV0sZCx0LmNhbGVuZGFyKSksbj0wO248MjtuKyspaWYoImRhdGUiPT09dC50eXBlKXtpZighby5pc0RhdGVUaW1lKHNbbl0sdC5jYWxlbmRhcikpe3RbZV09aTticmVha31pZih0LnIybChzWzBdKT09PXQucjJsKHNbMV0pKXt2YXIgbD1vLmNvbnN0cmFpbih0LnIybChzWzBdKSxvLk1JTl9NUysxZTMsby5NQVhfTVMtMWUzKTtzWzBdPXQubDJyKGwtMWUzKSxzWzFdPXQubDJyKGwrMWUzKTticmVha319ZWxzZXtpZighYShzW25dKSl7aWYoIWEoc1sxLW5dKSl7dFtlXT1pO2JyZWFrfXNbbl09c1sxLW5dKihuPzEwOi4xKX1pZihzW25dPC1wP3Nbbl09LXA6c1tuXT5wJiYoc1tuXT1wKSxzWzBdPT09c1sxXSl7dmFyIGM9TWF0aC5tYXgoMSxNYXRoLmFicygxZS02KnNbMF0pKTtzWzBdLT1jLHNbMV0rPWN9fWVsc2Ugby5uZXN0ZWRQcm9wZXJ0eSh0LGUpLnNldChpKX0sdC5zZXRTY2FsZT1mdW5jdGlvbihyKXt2YXIgbj1lLl9zaXplO2lmKHQub3ZlcmxheWluZyl7dmFyIGk9Xy5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LHQub3ZlcmxheWluZyk7dC5kb21haW49aS5kb21haW59dmFyIGE9ciYmdC5fcj8iX3IiOiJyYW5nZSIsbz10LmNhbGVuZGFyO3QuY2xlYW5SYW5nZShhKTt2YXIgcyxsLGM9dC5yMmwodFthXVswXSxvKSx1PXQucjJsKHRbYV1bMV0sbyksaD0ieSI9PT1mO2lmKChoPyh0Ll9vZmZzZXQ9bi50KygxLXQuZG9tYWluWzFdKSpuLmgsdC5fbGVuZ3RoPW4uaCoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyhjLXUpLHQuX2I9LXQuX20qdSk6KHQuX29mZnNldD1uLmwrdC5kb21haW5bMF0qbi53LHQuX2xlbmd0aD1uLncqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8odS1jKSx0Ll9iPS10Ll9tKmMpLHQuX3JhbmdlYnJlYWtzPVtdLHQuX2xCcmVha3M9MCx0Ll9tMj0wLHQuX0I9W10sdC5yYW5nZWJyZWFrcykmJih0Ll9yYW5nZWJyZWFrcz10LmxvY2F0ZUJyZWFrcyhNYXRoLm1pbihjLHUpLE1hdGgubWF4KGMsdSkpLHQuX3JhbmdlYnJlYWtzLmxlbmd0aCkpe2ZvcihzPTA7czx0Ll9yYW5nZWJyZWFrcy5sZW5ndGg7cysrKWw9dC5fcmFuZ2VicmVha3Nbc10sdC5fbEJyZWFrcys9TWF0aC5hYnMobC5tYXgtbC5taW4pO3ZhciBwPWg7Yz51JiYocD0hcCkscCYmdC5fcmFuZ2VicmVha3MucmV2ZXJzZSgpO3ZhciBkPXA/LTE6MTtmb3IodC5fbTI9ZCp0Ll9sZW5ndGgvKE1hdGguYWJzKHUtYyktdC5fbEJyZWFrcyksdC5fQi5wdXNoKC10Ll9tMiooaD91OmMpKSxzPTA7czx0Ll9yYW5nZWJyZWFrcy5sZW5ndGg7cysrKWw9dC5fcmFuZ2VicmVha3Nbc10sdC5fQi5wdXNoKHQuX0JbdC5fQi5sZW5ndGgtMV0tZCp0Ll9tMioobC5tYXgtbC5taW4pKTtmb3Iocz0wO3M8dC5fcmFuZ2VicmVha3MubGVuZ3RoO3MrKykobD10Ll9yYW5nZWJyZWFrc1tzXSkucG1pbj1GKGwubWluKSxsLnBtYXg9RihsLm1heCl9aWYoIWlzRmluaXRlKHQuX20pfHwhaXNGaW5pdGUodC5fYil8fHQuX2xlbmd0aDwwKXRocm93IGUuX3JlcGxvdHRpbmc9ITEsbmV3IEVycm9yKCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGF4aXMgc2NhbGluZyIpfSx0Lm1hc2tCcmVha3M9ZnVuY3Rpb24oZSl7Zm9yKHZhciByLG4saSxhLGwsYz10LnJhbmdlYnJlYWtzfHxbXSx1PTA7dTxjLmxlbmd0aDt1Kyspe3ZhciBoPWNbdV07aWYoaC5lbmFibGVkKWlmKGguYm91bmRzKXt2YXIgZj1oLnBhdHRlcm47c3dpdGNoKG49KHI9by5zaW1wbGVNYXAoaC5ib3VuZHMsZj9zOnQuZDJjKSlbMF0saT1yWzFdLGYpe2Nhc2UgazphPShsPW5ldyBEYXRlKGUpKS5nZXRVVENEYXkoKSxuPmkmJihpKz03LGE8biYmKGErPTcpKTticmVhaztjYXNlIFQ6YT0obD1uZXcgRGF0ZShlKSkuZ2V0VVRDSG91cnMoKSsobC5nZXRVVENNaW51dGVzKCkvNjArbC5nZXRVVENTZWNvbmRzKCkvMzYwMCtsLmdldFVUQ01pbGxpc2Vjb25kcygpLzM2ZTUpLG4+aSYmKGkrPTI0LGE8biYmKGErPTI0KSk7YnJlYWs7Y2FzZSIiOmE9ZX1pZihhPj1uJiZhPGkpcmV0dXJuIGR9ZWxzZSBmb3IodmFyIHA9by5zaW1wbGVNYXAoaC52YWx1ZXMsdC5kMmMpLnNvcnQoby5zb3J0ZXJBc2MpLGc9MDtnPHAubGVuZ3RoO2crKylpZihpPShuPXBbZ10pK2guZHZhbHVlLGU+PW4mJmU8aSlyZXR1cm4gZH1yZXR1cm4gZX0sdC5sb2NhdGVCcmVha3M9ZnVuY3Rpb24oZSxyKXt2YXIgbixpLGEsbCxjPVtdO2lmKCF0LnJhbmdlYnJlYWtzKXJldHVybiBjO3ZhciB1PXQucmFuZ2VicmVha3Muc2xpY2UoKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnBhdHRlcm49PT1rJiZlLnBhdHRlcm49PT1UPy0xOmUucGF0dGVybj09PWsmJnQucGF0dGVybj09PVQ/MTowfSkpLGg9ZnVuY3Rpb24odCxuKXtpZigodD1vLmNvbnN0cmFpbih0LGUscikpIT09KG49by5jb25zdHJhaW4obixlLHIpKSl7Zm9yKHZhciBpPSEwLGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIHM9Y1thXTt0PHMubWF4JiZuPj1zLm1pbiYmKHQ8cy5taW4mJihzLm1pbj10KSxuPnMubWF4JiYocy5tYXg9biksaT0hMSl9aSYmYy5wdXNoKHttaW46dCxtYXg6bn0pfX07Zm9yKG49MDtuPHUubGVuZ3RoO24rKyl7dmFyIGY9dVtuXTtpZihmLmVuYWJsZWQpaWYoZi5ib3VuZHMpe3ZhciBwPWUsZD1yO2YucGF0dGVybiYmKHA9TWF0aC5mbG9vcihwKSksYT0oaT1vLnNpbXBsZU1hcChmLmJvdW5kcyxmLnBhdHRlcm4/czp0LnIybCkpWzBdLGw9aVsxXTt2YXIgZyxfLHc9bmV3IERhdGUocCk7c3dpdGNoKGYucGF0dGVybil7Y2FzZSBrOl89bSxnPShsLWErKGw8YT83OjApKSp2LHArPWEqdi0ody5nZXRVVENEYXkoKSp2K3cuZ2V0VVRDSG91cnMoKSp5K3cuZ2V0VVRDTWludXRlcygpKngrdy5nZXRVVENTZWNvbmRzKCkqYit3LmdldFVUQ01pbGxpc2Vjb25kcygpKTticmVhaztjYXNlIFQ6Xz12LGc9KGwtYSsobDxhPzI0OjApKSp5LHArPWEqeS0ody5nZXRVVENIb3VycygpKnkrdy5nZXRVVENNaW51dGVzKCkqeCt3LmdldFVUQ1NlY29uZHMoKSpiK3cuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO2JyZWFrO2RlZmF1bHQ6cD1NYXRoLm1pbihpWzBdLGlbMV0pLGc9Xz0oZD1NYXRoLm1heChpWzBdLGlbMV0pKS1wfWZvcih2YXIgTT1wO008ZDtNKz1fKWgoTSxNK2cpfWVsc2UgZm9yKHZhciBBPW8uc2ltcGxlTWFwKGYudmFsdWVzLHQuZDJjKSxTPTA7UzxBLmxlbmd0aDtTKyspaChhPUFbU10sbD1hK2YuZHZhbHVlKX1yZXR1cm4gYy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1pbi1lLm1pbn0pKSxjfSx0Lm1ha2VDYWxjZGF0YT1mdW5jdGlvbihlLHIsbil7dmFyIGksYSxzLGwsYz10LnR5cGUsdT0iZGF0ZSI9PT1jJiZlW3IrImNhbGVuZGFyIl07aWYociBpbiBlKXtpZihpPWVbcl0sbD1lLl9sZW5ndGh8fG8ubWluUm93TGVuZ3RoKGkpLG8uaXNUeXBlZEFycmF5KGkpJiYoImxpbmVhciI9PT1jfHwibG9nIj09PWMpKXtpZihsPT09aS5sZW5ndGgpcmV0dXJuIGk7aWYoaS5zdWJhcnJheSlyZXR1cm4gaS5zdWJhcnJheSgwLGwpfWlmKCJtdWx0aWNhdGVnb3J5Ij09PWMpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl7dmFyIGk9KHRbMF18fFtdKVtuXSxhPSh0WzFdfHxbXSlbbl07cltuXT1JKFtpLGFdKX1yZXR1cm4gcn0oaSxsKTtmb3IoYT1uZXcgQXJyYXkobCkscz0wO3M8bDtzKyspYVtzXT10LmQyYyhpW3NdLDAsdSxuKX1lbHNle3ZhciBoPXIrIjAiaW4gZT90LmQyYyhlW3IrIjAiXSwwLHUpOjAsZj1lWyJkIityXT9OdW1iZXIoZVsiZCIrcl0pOjE7Zm9yKGk9ZVt7eDoieSIseToieCJ9W3JdXSxsPWUuX2xlbmd0aHx8aS5sZW5ndGgsYT1uZXcgQXJyYXkobCkscz0wO3M8bDtzKyspYVtzXT1oK3MqZn1pZih0LnJhbmdlYnJlYWtzKWZvcihzPTA7czxsO3MrKylhW3NdPXQubWFza0JyZWFrcyhhW3NdKTtyZXR1cm4gYX0sdC5pc1ZhbGlkUmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aCYmYSh0LnIybChlWzBdKSkmJmEodC5yMmwoZVsxXSkpfSx0LmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbihlLHIpe3ZhciBuPXQuYzJsKGVbZl0sbnVsbCxyKSxpPXQucjJsKHQucmFuZ2VbMF0pLGE9dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIGk8YT9pPD1uJiZuPD1hOmE8PW4mJm48PWl9LHQuX2VtcHR5Q2F0ZWdvcmllcz1mdW5jdGlvbigpe3QuX2NhdGVnb3JpZXM9W10sdC5fY2F0ZWdvcmllc01hcD17fX0sdC5jbGVhckNhbGM9ZnVuY3Rpb24oKXt2YXIgbj1lLl9heGlzTWF0Y2hHcm91cHM7aWYobiYmbi5sZW5ndGgpe2Zvcih2YXIgaT0hMSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV07aWYob1tyXSl7aT0hMDt2YXIgcz1udWxsLGw9bnVsbDtmb3IodmFyIGMgaW4gbyl7dmFyIHU9ZVtfLmlkMm5hbWUoYyldO2lmKHUuX2NhdGVnb3JpZXMpe3M9dS5fY2F0ZWdvcmllcyxsPXUuX2NhdGVnb3JpZXNNYXA7YnJlYWt9fXMmJmw/KHQuX2NhdGVnb3JpZXM9cyx0Ll9jYXRlZ29yaWVzTWFwPWwpOnQuX2VtcHR5Q2F0ZWdvcmllcygpO2JyZWFrfX1pfHx0Ll9lbXB0eUNhdGVnb3JpZXMoKX1lbHNlIHQuX2VtcHR5Q2F0ZWdvcmllcygpO2lmKHQuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgaD0wO2g8dC5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO2grKylQKHQuX2luaXRpYWxDYXRlZ29yaWVzW2hdKX0sdC5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcz1mdW5jdGlvbigpe3ZhciBuPVtdO2lmKHQuX2VtcHR5Q2F0ZWdvcmllcygpLHQuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgaT0wO2k8dC5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO2krKylQKHQuX2luaXRpYWxDYXRlZ29yaWVzW2ldKTtuPW4uY29uY2F0KHQuX3RyYWNlSW5kaWNlcyk7dmFyIGE9dC5fbWF0Y2hHcm91cDtmb3IodmFyIG8gaW4gYSlpZihyIT09byl7dmFyIHM9ZVtfLmlkMm5hbWUobyldO3MuX2NhdGVnb3JpZXM9dC5fY2F0ZWdvcmllcyxzLl9jYXRlZ29yaWVzTWFwPXQuX2NhdGVnb3JpZXNNYXAsbj1uLmNvbmNhdChzLl90cmFjZUluZGljZXMpfXJldHVybiBufTt2YXIgaj1lLl9kM2xvY2FsZTsiZGF0ZSI9PT10LnR5cGUmJih0Ll9kYXRlRm9ybWF0PWo/ai50aW1lRm9ybWF0OmksdC5fZXh0cmFGb3JtYXQ9ZS5fZXh0cmFGb3JtYXQpLHQuX3NlcGFyYXRvcnM9ZS5zZXBhcmF0b3JzLHQuX251bUZvcm1hdD1qP2oubnVtYmVyRm9ybWF0Om4uZm9ybWF0LGRlbGV0ZSB0Ll9taW5EdGljayxkZWxldGUgdC5fZm9yY2VUaWNrMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuLi8uLi9saWIiOjc1MCwiLi9heGlzX2lkcyI6ODAyLCIuL2NvbnN0YW50cyI6ODA1LGQzOjE2OSwiZDMtdGltZS1mb3JtYXQiOjE2NiwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDgyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpO2Z1bmN0aW9uIG8odCl7dmFyIGU9WyJzaG93ZXhwb25lbnQiLCJzaG93dGlja3ByZWZpeCIsInNob3d0aWNrc3VmZml4Il0uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dFtlXX0pKTtpZihlLmV2ZXJ5KChmdW5jdGlvbihyKXtyZXR1cm4gdFtyXT09PXRbZVswXV19KSl8fDE9PT1lLmxlbmd0aClyZXR1cm4gdFtlWzBdXX1mdW5jdGlvbiBzKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaS50aWNrZm9ybWF0c3RvcHMscixhKX1yKCJlbmFibGVkIikmJihyKCJkdGlja3JhbmdlIikscigidmFsdWUiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsYyx1KXt1JiYxIT09dS5wYXNzfHxmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW8odCk7cigidGlja3ByZWZpeCIpJiZyKCJzaG93dGlja3ByZWZpeCIsYSk7cigidGlja3N1ZmZpeCIsaS50aWNrU3VmZml4RGZsdCkmJnIoInNob3d0aWNrc3VmZml4IixhKX0odCwwLHIsMCxjKSx1JiYyIT09dS5wYXNzfHxmdW5jdGlvbih0LGUscixsLGMpe3ZhciB1PW8odCk7cigidGlja3ByZWZpeCIpJiZyKCJzaG93dGlja3ByZWZpeCIsdSk7cigidGlja3N1ZmZpeCIsYy50aWNrU3VmZml4RGZsdCkmJnIoInNob3d0aWNrc3VmZml4Iix1KTtpZihyKCJzaG93dGlja2xhYmVscyIpKXt2YXIgaD1jLmZvbnR8fHt9LGY9ZS5jb2xvcixwPWYmJmYhPT1pLmNvbG9yLmRmbHQ/ZjpoLmNvbG9yO2lmKG4uY29lcmNlRm9udChyLCJ0aWNrZm9udCIse2ZhbWlseTpoLmZhbWlseSxzaXplOmguc2l6ZSxjb2xvcjpwfSkscigidGlja2FuZ2xlIiksImNhdGVnb3J5IiE9PWwpe3ZhciBkPXIoInRpY2tmb3JtYXQiKTthKHQsZSx7bmFtZToidGlja2Zvcm1hdHN0b3BzIixpbmNsdXNpb25BdHRyOiJlbmFibGVkIixoYW5kbGVJdGVtRGVmYXVsdHM6c30pLGUudGlja2Zvcm1hdHN0b3BzLmxlbmd0aHx8ZGVsZXRlIGUudGlja2Zvcm1hdHN0b3BzLGR8fCJkYXRlIj09PWx8fChyKCJzaG93ZXhwb25lbnQiLHUpLHIoImV4cG9uZW50Zm9ybWF0IikscigibWluZXhwb25lbnQiKSxyKCJzZXBhcmF0ZXRob3VzYW5kcyIpKX19fSh0LGUscixsLGMpfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3OTQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxM31dLDgyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bi5jb2VyY2UyKHQsZSxpLCJ0aWNrbGVuIikscz1uLmNvZXJjZTIodCxlLGksInRpY2t3aWR0aCIpLGw9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrY29sb3IiLGUuY29sb3IpO3IoInRpY2tzIixhLm91dGVyVGlja3N8fG98fHN8fGw/Im91dHNpZGUiOiIiKXx8KGRlbGV0ZSBlLnRpY2tsZW4sZGVsZXRlIGUudGlja3dpZHRoLGRlbGV0ZSBlLnRpY2tjb2xvcil9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MTN9XSw4MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jbGVhbl90aWNrcyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZnVuY3Rpb24gbyhyKXt2YXIgbj10W3JdO3JldHVybiB2b2lkIDAhPT1uP246KGUuX3RlbXBsYXRlfHx7fSlbcl19dmFyIHM9bygidGljazAiKSxsPW8oImR0aWNrIiksYz1vKCJ0aWNrdmFscyIpLHU9cigidGlja21vZGUiLGkoYyk/ImFycmF5IjpsPyJsaW5lYXIiOiJhdXRvIik7aWYoImF1dG8iPT09dSlyKCJudGlja3MiKTtlbHNlIGlmKCJsaW5lYXIiPT09dSl7dmFyIGg9ZS5kdGljaz1uLmR0aWNrKGwsYSk7ZS50aWNrMD1uLnRpY2swKHMsYSxlLmNhbGVuZGFyLGgpfWVsc2UgaWYoIm11bHRpY2F0ZWdvcnkiIT09YSl7dm9pZCAwPT09cigidGlja3ZhbHMiKT9lLnRpY2ttb2RlPSJhdXRvIjpyKCJ0aWNrdGV4dCIpfX19LHsiLi4vLi4vbGliIjo3NTAsIi4vY2xlYW5fdGlja3MiOjgwNH1dLDgyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7dmFyIGM9dC5fZnVsbExheW91dDtpZigwIT09ZS5sZW5ndGgpe3ZhciB1LGgsZixwO2wmJih1PWwoKSk7dmFyIGQ9bi5lYXNlKHIuZWFzaW5nKTtyZXR1cm4gdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocCkscD1udWxsLGZ1bmN0aW9uKCl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxvPWEucGxvdGluZm8ueGF4aXMscz1hLnBsb3RpbmZvLnlheGlzO2EueHIwJiYocltvLl9uYW1lKyIucmFuZ2UiXT1hLnhyMC5zbGljZSgpKSxhLnlyMCYmKHJbcy5fbmFtZSsiLnJhbmdlIl09YS55cjAuc2xpY2UoKSl9cmV0dXJuIGkuY2FsbCgicmVsYXlvdXQiLHQscikudGhlbigoZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylnKGVbdF0ucGxvdGluZm8pfSkpfSgpfSkpLGg9RGF0ZS5ub3coKSxwPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uIG4oKXtmPURhdGUubm93KCk7Zm9yKHZhciBhPU1hdGgubWluKDEsKGYtaCkvci5kdXJhdGlvbiksbz1kKGEpLHM9MDtzPGUubGVuZ3RoO3MrKyltKGVbc10sbyk7Zi1oPnIuZHVyYXRpb24/KCFmdW5jdGlvbigpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBhPWVbbl0sbz1hLnBsb3RpbmZvLnhheGlzLHM9YS5wbG90aW5mby55YXhpczthLnhyMSYmKHJbby5fbmFtZSsiLnJhbmdlIl09YS54cjEuc2xpY2UoKSksYS55cjEmJihyW3MuX25hbWUrIi5yYW5nZSJdPWEueXIxLnNsaWNlKCkpfXUmJnUoKSxpLmNhbGwoInJlbGF5b3V0Iix0LHIpLnRoZW4oKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZyhlW3RdLnBsb3RpbmZvKX0pKX0oKSxwPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShuKSk6cD13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSkpLFByb21pc2UucmVzb2x2ZSgpfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC54YXhpcyxyPXQueWF4aXM7Yy5fZGVmcy5zZWxlY3QoIiMiK3QuY2xpcElkKyI+IHJlY3QiKS5jYWxsKG8uc2V0VHJhbnNsYXRlLDAsMCkuY2FsbChvLnNldFNjYWxlLDEsMSksdC5wbG90LmNhbGwoby5zZXRUcmFuc2xhdGUsZS5fb2Zmc2V0LHIuX29mZnNldCkuY2FsbChvLnNldFNjYWxlLDEsMSk7dmFyIG49dC5wbG90LnNlbGVjdEFsbCgiLnNjYXR0ZXJsYXllciAudHJhY2UiKTtuLnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbChvLnNldFBvaW50R3JvdXBTY2FsZSwxLDEpLG4uc2VsZWN0QWxsKCIudGV4dHBvaW50IikuY2FsbChvLnNldFRleHRQb2ludHNTY2FsZSwxLDEpLG4uY2FsbChvLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsdCl9ZnVuY3Rpb24gbShlLHIpe3ZhciBuPWUucGxvdGluZm8saT1uLnhheGlzLGw9bi55YXhpcyxjPWkuX2xlbmd0aCx1PWwuX2xlbmd0aCxoPSEhZS54cjEsZj0hIWUueXIxLHA9W107aWYoaCl7dmFyIGQ9YS5zaW1wbGVNYXAoZS54cjAsaS5yMmwpLGc9YS5zaW1wbGVNYXAoZS54cjEsaS5yMmwpLG09ZFsxXS1kWzBdLHY9Z1sxXS1nWzBdO3BbMF09KGRbMF0qKDEtcikrcipnWzBdLWRbMF0pLyhkWzFdLWRbMF0pKmMscFsyXT1jKigxLXIrcip2L20pLGkucmFuZ2VbMF09aS5sMnIoZFswXSooMS1yKStyKmdbMF0pLGkucmFuZ2VbMV09aS5sMnIoZFsxXSooMS1yKStyKmdbMV0pfWVsc2UgcFswXT0wLHBbMl09YztpZihmKXt2YXIgeT1hLnNpbXBsZU1hcChlLnlyMCxsLnIybCkseD1hLnNpbXBsZU1hcChlLnlyMSxsLnIybCksYj15WzFdLXlbMF0sXz14WzFdLXhbMF07cFsxXT0oeVsxXSooMS1yKStyKnhbMV0teVsxXSkvKHlbMF0teVsxXSkqdSxwWzNdPXUqKDEtcityKl8vYiksbC5yYW5nZVswXT1pLmwycih5WzBdKigxLXIpK3IqeFswXSksbC5yYW5nZVsxXT1sLmwycih5WzFdKigxLXIpK3IqeFsxXSl9ZWxzZSBwWzFdPTAscFszXT11O3MuZHJhd09uZSh0LGkse3NraXBUaXRsZTohMH0pLHMuZHJhd09uZSh0LGwse3NraXBUaXRsZTohMH0pLHMucmVkcmF3Q29tcG9uZW50cyh0LFtpLl9pZCxsLl9pZF0pO3ZhciB3PWg/Yy9wWzJdOjEsVD1mP3UvcFszXToxLGs9aD9wWzBdOjAsTT1mP3BbMV06MCxBPWg/cFswXS9wWzJdKmM6MCxTPWY/cFsxXS9wWzNdKnU6MCxFPWkuX29mZnNldC1BLEM9bC5fb2Zmc2V0LVM7bi5jbGlwUmVjdC5jYWxsKG8uc2V0VHJhbnNsYXRlLGssTSkuY2FsbChvLnNldFNjYWxlLDEvdywxL1QpLG4ucGxvdC5jYWxsKG8uc2V0VHJhbnNsYXRlLEUsQykuY2FsbChvLnNldFNjYWxlLHcsVCksby5zZXRQb2ludEdyb3VwU2NhbGUobi56b29tU2NhbGVQdHMsMS93LDEvVCksby5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQsMS93LDEvVCl9cy5yZWRyYXdDb21wb25lbnRzKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4vYXhlcyI6Nzk5LGQzOjE2OX1dLDgyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLnRyYWNlSXMsaT10KCIuL2F4aXNfYXV0b3R5cGUiKTtmdW5jdGlvbiBhKHQpe3JldHVybnt2OiJ4IixoOiJ5In1bdC5vcmllbnRhdGlvbnx8InYiXX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9YSh0KSxpPW4odCwiYm94LXZpb2xpbiIpLG89bih0Ll9mdWxsSW5wdXR8fHt9LCJjYW5kbGVzdGljayIpO3JldHVybiBpJiYhbyYmZT09PXImJnZvaWQgMD09PXRbcl0mJnZvaWQgMD09PXRbcisiMCJdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXsiLSI9PT1yKCJ0eXBlIiwocy5zcGxvbVN0YXNofHx7fSkudHlwZSkmJighZnVuY3Rpb24odCxlKXtpZigiLSIhPT10LnR5cGUpcmV0dXJuO3ZhciByLHM9dC5faWQsbD1zLmNoYXJBdCgwKTstMSE9PXMuaW5kZXhPZigic2NlbmUiKSYmKHM9bCk7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2lmKCJzcGxvbSI9PT1pLnR5cGUmJmkuX2xlbmd0aD4wJiYoaVsiXyIrcisiYXhlcyJdfHx7fSlbZV0pcmV0dXJuIGk7aWYoKGlbcisiYXhpcyJdfHxyKT09PWUpe2lmKG8oaSxyKSlyZXR1cm4gaTtpZigoaVtyXXx8W10pLmxlbmd0aHx8aVtyKyIwIl0pcmV0dXJuIGl9fX0oZSxzLGwpO2lmKCFjKXJldHVybjtpZigiaGlzdG9ncmFtIj09PWMudHlwZSYmbD09PXt2OiJ5IixoOiJ4In1bYy5vcmllbnRhdGlvbnx8InYiXSlyZXR1cm4gdm9pZCh0LnR5cGU9ImxpbmVhciIpO3ZhciB1PWwrImNhbGVuZGFyIixoPWNbdV0sZj17bm9NdWx0aUNhdGVnb3J5OiFuKGMsImNhcnRlc2lhbiIpfHxuKGMsIm5vTXVsdGlDYXRlZ29yeSIpfTsiYm94Ij09PWMudHlwZSYmYy5faGFzUHJlQ29tcFN0YXRzJiZsPT09e2g6IngiLHY6InkifVtjLm9yaWVudGF0aW9ufHwidiJdJiYoZi5ub011bHRpQ2F0ZWdvcnk9ITApO2lmKG8oYyxsKSl7dmFyIHA9YShjKSxkPVtdO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBnPWVbcl07bihnLCJib3gtdmlvbGluIikmJihnW2wrImF4aXMiXXx8bCk9PT1zJiYodm9pZCAwIT09Z1twXT9kLnB1c2goZ1twXVswXSk6dm9pZCAwIT09Zy5uYW1lP2QucHVzaChnLm5hbWUpOmQucHVzaCgidGV4dCIpLGdbdV0hPT1oJiYoaD12b2lkIDApKX10LnR5cGU9aShkLGgsZil9ZWxzZSBpZigic3Bsb20iPT09Yy50eXBlKXt2YXIgbT1jLmRpbWVuc2lvbnNbYy5fYXhlc0RpbVtzXV07bS52aXNpYmxlJiYodC50eXBlPWkobS52YWx1ZXMsaCxmKSl9ZWxzZSB0LnR5cGU9aShjW2xdfHxbY1tsKyIwIl1dLGgsZil9KGUscy5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnQudHlwZT1lLnR5cGUpfX0seyIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2F4aXNfYXV0b3R5cGUiOjgwMH1dLDgyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIG4sYSxvLHM9ITE7aWYoImRhdGEiPT09ZS50eXBlKW49dC5fZnVsbERhdGFbbnVsbCE9PWUudHJhY2VzP2UudHJhY2VzWzBdOjBdO2Vsc2V7aWYoImxheW91dCIhPT1lLnR5cGUpcmV0dXJuITE7bj10Ll9mdWxsTGF5b3V0fXJldHVybiBhPWkubmVzdGVkUHJvcGVydHkobixlLnByb3ApLmdldCgpLChvPXJbZS50eXBlXT1yW2UudHlwZV18fHt9KS5oYXNPd25Qcm9wZXJ0eShlLnByb3ApJiZvW2UucHJvcF0hPT1hJiYocz0hMCksb1tlLnByb3BdPWEse2NoYW5nZWQ6cyx2YWx1ZTphfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9W10sbj1lWzBdLGE9e307aWYoInN0cmluZyI9PXR5cGVvZiBuKWFbbl09ZVsxXTtlbHNle2lmKCFpLmlzUGxhaW5PYmplY3QobikpcmV0dXJuIHI7YT1ufXJldHVybiBsKGEsKGZ1bmN0aW9uKHQsZSxuKXtyLnB1c2goe3R5cGU6ImxheW91dCIscHJvcDp0LHZhbHVlOm59KX0pLCIiLDApLHJ9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4sYSxvLHM9W107aWYobj1lWzBdLGE9ZVsxXSxyPWVbMl0sbz17fSwic3RyaW5nIj09dHlwZW9mIG4pb1tuXT1hO2Vsc2V7aWYoIWkuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcztvPW4sdm9pZCAwPT09ciYmKHI9YSl9cmV0dXJuIHZvaWQgMD09PXImJihyPW51bGwpLGwobywoZnVuY3Rpb24oZSxuLGkpe3ZhciBhLG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1pLnNsaWNlKCk7dmFyIGw9TWF0aC5taW4oby5sZW5ndGgsdC5kYXRhLmxlbmd0aCk7ciYmKGw9TWF0aC5taW4obCxyLmxlbmd0aCkpLGE9W107Zm9yKHZhciBjPTA7YzxsO2MrKylhW2NdPXI/cltjXTpjfWVsc2Ugbz1pLGE9cj9yLnNsaWNlKCk6bnVsbDtpZihudWxsPT09YSlBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe2lmKCFBcnJheS5pc0FycmF5KG8pKXt2YXIgdT1vO289W107Zm9yKHZhciBoPTA7aDxhLmxlbmd0aDtoKyspb1toXT11fW8ubGVuZ3RoPU1hdGgubWluKGEubGVuZ3RoLG8ubGVuZ3RoKX1zLnB1c2goe3R5cGU6ImRhdGEiLHByb3A6ZSx0cmFjZXM6YSx2YWx1ZTpvfSl9KSwiIiwwKSxzfWZ1bmN0aW9uIGwodCxlLHIsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oYSl7dmFyIG89dFthXTtpZigiXyIhPT1hWzBdKXt2YXIgcz1yKyhuPjA/Ii4iOiIiKSthO2kuaXNQbGFpbk9iamVjdChvKT9sKG8sZSxzLG4rMSk6ZShzLGEsbyl9fSkpfXIubWFuYWdlQ29tbWFuZE9ic2VydmVyPWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBzPXt9LGw9ITA7ZSYmZS5fY29tbWFuZE9ic2VydmVyJiYocz1lLl9jb21tYW5kT2JzZXJ2ZXIpLHMuY2FjaGV8fChzLmNhY2hlPXt9KSxzLmxvb2t1cFRhYmxlPXt9O3ZhciBjPXIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzKHQsbixzLmxvb2t1cFRhYmxlKTtpZihlJiZlLl9jb21tYW5kT2JzZXJ2ZXIpe2lmKGMpcmV0dXJuIHM7aWYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSlyZXR1cm4gZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlcj1udWxsLHN9aWYoYyl7YSh0LGMscy5jYWNoZSkscy5jaGVjaz1mdW5jdGlvbigpe2lmKGwpe3ZhciBlPWEodCxjLHMuY2FjaGUpO3JldHVybiBlLmNoYW5nZWQmJm8mJnZvaWQgMCE9PXMubG9va3VwVGFibGVbZS52YWx1ZV0mJihzLmRpc2FibGUoKSxQcm9taXNlLnJlc29sdmUobyh7dmFsdWU6ZS52YWx1ZSx0eXBlOmMudHlwZSxwcm9wOmMucHJvcCx0cmFjZXM6Yy50cmFjZXMsaW5kZXg6cy5sb29rdXBUYWJsZVtlLnZhbHVlXX0pKS50aGVuKHMuZW5hYmxlLHMuZW5hYmxlKSksZS5jaGFuZ2VkfX07Zm9yKHZhciB1PVsicGxvdGx5X3JlbGF5b3V0IiwicGxvdGx5X3JlZHJhdyIsInBsb3RseV9yZXN0eWxlIiwicGxvdGx5X3VwZGF0ZSIsInBsb3RseV9hbmltYXRpbmdmcmFtZSIsInBsb3RseV9hZnRlcnBsb3QiXSxoPTA7aDx1Lmxlbmd0aDtoKyspdC5faW50ZXJuYWxPbih1W2hdLHMuY2hlY2spO3MucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcih1W2VdLHMuY2hlY2spfX1lbHNlIGkubG9nKCJVbmFibGUgdG8gYXV0b21hdGljYWxseSBiaW5kIHBsb3QgdXBkYXRlcyB0byBBUEkgY29tbWFuZCIpLHMubG9va3VwVGFibGU9e30scy5yZW1vdmU9ZnVuY3Rpb24oKXt9O3JldHVybiBzLmRpc2FibGU9ZnVuY3Rpb24oKXtsPSExfSxzLmVuYWJsZT1mdW5jdGlvbigpe2w9ITB9LGUmJihlLl9jb21tYW5kT2JzZXJ2ZXI9cyksc30sci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbz1lLmxlbmd0aDtmb3IoaT0wO2k8bztpKyspe3ZhciBzLGw9ZVtpXSxjPWwubWV0aG9kLHU9bC5hcmdzO2lmKEFycmF5LmlzQXJyYXkodSl8fCh1PVtdKSwhYylyZXR1cm4hMTt2YXIgaD1yLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3ModCxjLHUpO2lmKDEhPT1oLmxlbmd0aClyZXR1cm4hMTtpZihhKXtpZigocz1oWzBdKS50eXBlIT09YS50eXBlKXJldHVybiExO2lmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGEudHJhY2VzKSl7aWYoIUFycmF5LmlzQXJyYXkocy50cmFjZXMpKXJldHVybiExO3MudHJhY2VzLnNvcnQoKTtmb3IodmFyIGY9MDtmPGEudHJhY2VzLmxlbmd0aDtmKyspaWYoYS50cmFjZXNbZl0hPT1zLnRyYWNlc1tmXSlyZXR1cm4hMX1lbHNlIGlmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMX1lbHNlIGE9aFswXSxBcnJheS5pc0FycmF5KGEudHJhY2VzKSYmYS50cmFjZXMuc29ydCgpO3ZhciBwPShzPWhbMF0pLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocCkpe2lmKDEhPT1wLmxlbmd0aClyZXR1cm4hMTtwPXBbMF19biYmKG5bcF09aSl9cmV0dXJuIGF9LHIuZXhlY3V0ZUFQSUNvbW1hbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJza2lwIj09PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBhPW4uYXBpTWV0aG9kUmVnaXN0cnlbZV0sbz1bdF07QXJyYXkuaXNBcnJheShyKXx8KHI9W10pO2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKW8ucHVzaChyW3NdKTtyZXR1cm4gYS5hcHBseShudWxsLG8pLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4gaS53YXJuKCJBUEkgY2FsbCB0byBQbG90bHkuIitlKyIgcmVqZWN0ZWQuIix0KSxQcm9taXNlLnJlamVjdCh0KX0pKX0sci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtzd2l0Y2goQXJyYXkuaXNBcnJheShyKXx8KHI9W10pLGUpe2Nhc2UicmVzdHlsZSI6bj1zKHQscik7YnJlYWs7Y2FzZSJyZWxheW91dCI6bj1vKHQscik7YnJlYWs7Y2FzZSJ1cGRhdGUiOm49cyh0LFtyWzBdLHJbMl1dKS5jb25jYXQobyh0LFtyWzFdXSkpO2JyZWFrO2Nhc2UiYW5pbWF0ZSI6bj1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGVbMF0pJiYxPT09ZVswXS5sZW5ndGgmJi0xIT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlWzBdWzBdKT9be3R5cGU6ImxheW91dCIscHJvcDoiX2N1cnJlbnRGcmFtZSIsdmFsdWU6ZVswXVswXS50b1N0cmluZygpfV06W119KDAscik7YnJlYWs7ZGVmYXVsdDpuPVtdfXJldHVybiBufX0seyIuLi9saWIiOjc1MCwiLi4vcmVnaXN0cnkiOjg4Mn1dLDgyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToodD10fHx7fSkuZWRpdFR5cGUsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9XSxkZmx0OlswLDFdfSxpPSh0Lm5hbWUmJnQubmFtZSx0LnRyYWNlLGUuZGVzY3JpcHRpb24mJmUuZGVzY3JpcHRpb24se3g6bih7fSxyLHt9KSx5Om4oe30scix7fSksZWRpdFR5cGU6dC5lZGl0VHlwZX0pO3JldHVybiB0Lm5vR3JpZENlbGx8fChpLnJvdz17dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9LGkuY29sdW1uPXt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6dC5lZGl0VHlwZX0pLGl9LHIuZGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9biYmbi54fHxbMCwxXSxhPW4mJm4ueXx8WzAsMV0sbz1lLmdyaWQ7aWYobyl7dmFyIHM9cigiZG9tYWluLmNvbHVtbiIpO3ZvaWQgMCE9PXMmJihzPG8uY29sdW1ucz9pPW8uX2RvbWFpbnMueFtzXTpkZWxldGUgdC5kb21haW4uY29sdW1uKTt2YXIgbD1yKCJkb21haW4ucm93Iik7dm9pZCAwIT09bCYmKGw8by5yb3dzP2E9by5fZG9tYWlucy55W2xdOmRlbGV0ZSB0LmRvbWFpbi5yb3cpfXZhciBjPXIoImRvbWFpbi54IixpKSx1PXIoImRvbWFpbi55IixhKTtjWzBdPGNbMV18fCh0LmRvbWFpbi54PWkuc2xpY2UoKSksdVswXTx1WzFdfHwodC5kb21haW4ueT1hLnNsaWNlKCkpfX0seyIuLi9saWIvZXh0ZW5kIjo3NDB9XSw4Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWRpdFR5cGUscj10LmNvbG9yRWRpdFR5cGU7dm9pZCAwPT09ciYmKHI9ZSk7dmFyIG49e2ZhbWlseTp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZTplfSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGVkaXRUeXBlOmV9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6cn0sZWRpdFR5cGU6ZX07cmV0dXJuIHQuYXJyYXlPayYmKG4uZmFtaWx5LmFycmF5T2s9ITAsbi5zaXplLmFycmF5T2s9ITAsbi5jb2xvci5hcnJheU9rPSEwKSxufX0se31dLDgyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6ImZyYW1lc19lbnRyeSIsZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyJ9LG5hbWU6e3ZhbFR5cGU6InN0cmluZyJ9LHRyYWNlczp7dmFsVHlwZToiYW55In0sYmFzZWZyYW1lOnt2YWxUeXBlOiJzdHJpbmcifSxkYXRhOnt2YWxUeXBlOiJhbnkifSxsYXlvdXQ6e3ZhbFR5cGU6ImFueSJ9fX0se31dLDgyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnByb2pOYW1lcz17ZXF1aXJlY3Rhbmd1bGFyOiJlcXVpcmVjdGFuZ3VsYXIiLG1lcmNhdG9yOiJtZXJjYXRvciIsb3J0aG9ncmFwaGljOiJvcnRob2dyYXBoaWMiLCJuYXR1cmFsIGVhcnRoIjoibmF0dXJhbEVhcnRoIixrYXZyYXlza2l5Nzoia2F2cmF5c2tpeTciLG1pbGxlcjoibWlsbGVyIixyb2JpbnNvbjoicm9iaW5zb24iLGVja2VydDQ6ImVja2VydDQiLCJhemltdXRoYWwgZXF1YWwgYXJlYSI6ImF6aW11dGhhbEVxdWFsQXJlYSIsImF6aW11dGhhbCBlcXVpZGlzdGFudCI6ImF6aW11dGhhbEVxdWlkaXN0YW50IiwiY29uaWMgZXF1YWwgYXJlYSI6ImNvbmljRXF1YWxBcmVhIiwiY29uaWMgY29uZm9ybWFsIjoiY29uaWNDb25mb3JtYWwiLCJjb25pYyBlcXVpZGlzdGFudCI6ImNvbmljRXF1aWRpc3RhbnQiLGdub21vbmljOiJnbm9tb25pYyIsc3RlcmVvZ3JhcGhpYzoic3RlcmVvZ3JhcGhpYyIsbW9sbHdlaWRlOiJtb2xsd2VpZGUiLGhhbW1lcjoiaGFtbWVyIiwidHJhbnN2ZXJzZSBtZXJjYXRvciI6InRyYW5zdmVyc2VNZXJjYXRvciIsImFsYmVycyB1c2EiOiJhbGJlcnNVc2EiLCJ3aW5rZWwgdHJpcGVsIjoid2lua2VsMyIsYWl0b2ZmOiJhaXRvZmYiLHNpbnVzb2lkYWw6InNpbnVzb2lkYWwifSxyLmF4ZXNOYW1lcz1bImxvbmF4aXMiLCJsYXRheGlzIl0sci5sb25heGlzU3Bhbj17b3J0aG9ncmFwaGljOjE4MCwiYXppbXV0aGFsIGVxdWFsIGFyZWEiOjM2MCwiYXppbXV0aGFsIGVxdWlkaXN0YW50IjozNjAsImNvbmljIGNvbmZvcm1hbCI6MTgwLGdub21vbmljOjE2MCxzdGVyZW9ncmFwaGljOjE4MCwidHJhbnN2ZXJzZSBtZXJjYXRvciI6MTgwLCIqIjozNjB9LHIubGF0YXhpc1NwYW49eyJjb25pYyBjb25mb3JtYWwiOjE1MCxzdGVyZW9ncmFwaGljOjE3OS41LCIqIjoxODB9LHIuc2NvcGVEZWZhdWx0cz17d29ybGQ6e2xvbmF4aXNSYW5nZTpbLTE4MCwxODBdLGxhdGF4aXNSYW5nZTpbLTkwLDkwXSxwcm9qVHlwZToiZXF1aXJlY3Rhbmd1bGFyIixwcm9qUm90YXRlOlswLDAsMF19LHVzYTp7bG9uYXhpc1JhbmdlOlstMTgwLC01MF0sbGF0YXhpc1JhbmdlOlsxNSw4MF0scHJvalR5cGU6ImFsYmVycyB1c2EifSxldXJvcGU6e2xvbmF4aXNSYW5nZTpbLTMwLDYwXSxsYXRheGlzUmFuZ2U6WzMwLDg1XSxwcm9qVHlwZToiY29uaWMgY29uZm9ybWFsIixwcm9qUm90YXRlOlsxNSwwLDBdLHByb2pQYXJhbGxlbHM6WzAsNjBdfSxhc2lhOntsb25heGlzUmFuZ2U6WzIyLDE2MF0sbGF0YXhpc1JhbmdlOlstMTUsNTVdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfSxhZnJpY2E6e2xvbmF4aXNSYW5nZTpbLTMwLDYwXSxsYXRheGlzUmFuZ2U6Wy00MCw0MF0scHJvalR5cGU6Im1lcmNhdG9yIixwcm9qUm90YXRlOlswLDAsMF19LCJub3J0aCBhbWVyaWNhIjp7bG9uYXhpc1JhbmdlOlstMTgwLC00NV0sbGF0YXhpc1JhbmdlOls1LDg1XSxwcm9qVHlwZToiY29uaWMgY29uZm9ybWFsIixwcm9qUm90YXRlOlstMTAwLDAsMF0scHJvalBhcmFsbGVsczpbMjkuNSw0NS41XX0sInNvdXRoIGFtZXJpY2EiOntsb25heGlzUmFuZ2U6Wy0xMDAsLTMwXSxsYXRheGlzUmFuZ2U6Wy02MCwxNV0scHJvalR5cGU6Im1lcmNhdG9yIixwcm9qUm90YXRlOlswLDAsMF19fSxyLmNsaXBQYWQ9LjAwMSxyLnByZWNpc2lvbj0uMSxyLmxhbmRDb2xvcj0iI0YwREM4MiIsci53YXRlckNvbG9yPSIjMzM5OUZGIixyLmxvY2F0aW9ubW9kZVRvTGF5ZXI9eyJJU08tMyI6ImNvdW50cmllcyIsIlVTQS1zdGF0ZXMiOiJzdWJ1bml0cyIsImNvdW50cnkgbmFtZXMiOiJjb3VudHJpZXMifSxyLnNwaGVyZVNWRz17dHlwZToiU3BoZXJlIn0sci5maWxsTGF5ZXJzPXtvY2VhbjoxLGxhbmQ6MSxsYWtlczoxfSxyLmxpbmVMYXllcnM9e3N1YnVuaXRzOjEsY291bnRyaWVzOjEsY29hc3RsaW5lczoxLHJpdmVyczoxLGZyYW1lOjF9LHIubGF5ZXJzPVsiYmciLCJvY2VhbiIsImxhbmQiLCJsYWtlcyIsInN1YnVuaXRzIiwiY291bnRyaWVzIiwiY29hc3RsaW5lcyIsInJpdmVycyIsImxhdGF4aXMiLCJsb25heGlzIiwiZnJhbWUiLCJiYWNrcGxvdCIsImZyb250cGxvdCJdLHIubGF5ZXJzRm9yQ2hvcm9wbGV0aD1bImJnIiwib2NlYW4iLCJsYW5kIiwic3VidW5pdHMiLCJjb3VudHJpZXMiLCJjb2FzdGxpbmVzIiwibGF0YXhpcyIsImxvbmF4aXMiLCJmcmFtZSIsImJhY2twbG90Iiwicml2ZXJzIiwibGFrZXMiLCJmcm9udHBsb3QiXSxyLmxheWVyTmFtZVRvQWRqZWN0aXZlPXtvY2Vhbjoib2NlYW4iLGxhbmQ6ImxhbmQiLGxha2VzOiJsYWtlIixzdWJ1bml0czoic3VidW5pdCIsY291bnRyaWVzOiJjb3VudHJ5Iixjb2FzdGxpbmVzOiJjb2FzdGxpbmUiLHJpdmVyczoicml2ZXIiLGZyYW1lOiJmcmFtZSJ9fSx7fV0sODMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxjPXQoIi4uL3Bsb3RzIiksdT10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGg9dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmdldEF1dG9SYW5nZSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxwPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LGQ9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LGc9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnNlbGVjdE9uQ2xpY2ssbT10KCIuL3pvb20iKSx2PXQoIi4vY29uc3RhbnRzIikseT10KCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIikseD10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKSxiPXQoInRvcG9qc29uLWNsaWVudCIpLmZlYXR1cmU7ZnVuY3Rpb24gXyh0KXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMudG9wb2pzb25VUkw9dC50b3BvanNvblVSTCx0aGlzLmlzU3RhdGljPXQuc3RhdGljUGxvdCx0aGlzLnRvcG9qc29uTmFtZT1udWxsLHRoaXMudG9wb2pzb249bnVsbCx0aGlzLnByb2plY3Rpb249bnVsbCx0aGlzLnNjb3BlPW51bGwsdGhpcy52aWV3SW5pdGlhbD1udWxsLHRoaXMuZml0U2NhbGU9bnVsbCx0aGlzLmJvdW5kcz1udWxsLHRoaXMubWlkUHQ9bnVsbCx0aGlzLmhhc0Nob3JvcGxldGg9ITEsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e30sdGhpcy5iYXNlUGF0aHM9e30sdGhpcy5kYXRhUGF0aHM9e30sdGhpcy5kYXRhUG9pbnRzPXt9LHRoaXMuY2xpcERlZj1udWxsLHRoaXMuY2xpcFJlY3Q9bnVsbCx0aGlzLmJnUmVjdD1udWxsLHRoaXMubWFrZUZyYW1ld29yaygpfXQoIi4vcHJvamVjdGlvbnMiKShuKTt2YXIgdz1fLnByb3RvdHlwZTtmdW5jdGlvbiBUKHQsZSl7dmFyIHI9di5jbGlwUGFkLG49dFswXStyLGk9dFsxXS1yLGE9ZVswXStyLG89ZVsxXS1yO24+MCYmaTwwJiYoaSs9MzYwKTt2YXIgcz0oaS1uKS80O3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbW1tuLGFdLFtuLG9dLFtuK3Msb10sW24rMipzLG9dLFtuKzMqcyxvXSxbaSxvXSxbaSxhXSxbaS1zLGFdLFtpLTIqcyxhXSxbaS0zKnMsYV0sW24sYV1dXX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgXyh0KX0sdy5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9ZVt0aGlzLmlkXSxhPVtdLG89ITE7Zm9yKHZhciBzIGluIHYubGF5ZXJOYW1lVG9BZGplY3RpdmUpaWYoImZyYW1lIiE9PXMmJmlbInNob3ciK3NdKXtvPSEwO2JyZWFrfWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKWlmKHRbMF1bMF0udHJhY2UubG9jYXRpb25tb2RlKXtvPSEwO2JyZWFrfWlmKG8pe3ZhciBjPXguZ2V0VG9wb2pzb25OYW1lKGkpO251bGwhPT1uLnRvcG9qc29uJiZjPT09bi50b3BvanNvbk5hbWV8fChuLnRvcG9qc29uTmFtZT1jLHZvaWQgMD09PVBsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV0mJmEucHVzaChuLmZldGNoVG9wb2pzb24oKSkpfWE9YS5jb25jYXQoeS5mZXRjaFRyYWNlR2VvRGF0YSh0KSksci5wdXNoKG5ldyBQcm9taXNlKChmdW5jdGlvbihyLGkpe1Byb21pc2UuYWxsKGEpLnRoZW4oKGZ1bmN0aW9uKCl7bi50b3BvanNvbj1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdLG4udXBkYXRlKHQsZSkscigpfSkpLmNhdGNoKGkpfSkpKX0sdy5mZXRjaFRvcG9qc29uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXguZ2V0VG9wb2pzb25QYXRoKHQudG9wb2pzb25VUkwsdC50b3BvanNvbk5hbWUpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixpKXtuLmpzb24oZSwoZnVuY3Rpb24obixhKXtpZihuKXJldHVybiA0MDQ9PT1uLnN0YXR1cz9pKG5ldyBFcnJvcihbInBsb3RseS5qcyBjb3VsZCBub3QgZmluZCB0b3BvanNvbiBmaWxlIGF0IixlLCIuIiwiTWFrZSBzdXJlIHRoZSAqdG9wb2pzb25VUkwqIHBsb3QgY29uZmlnIG9wdGlvbiIsImlzIHNldCBwcm9wZXJseS4iXS5qb2luKCIgIikpKTppKG5ldyBFcnJvcihbInVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmV0Y2hpbmcgdG9wb2pzb24gZmlsZSBhdCIsZV0uam9pbigiICIpKSk7UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW3QudG9wb2pzb25OYW1lXT1hLHIoKX0pKX0pKX0sdy51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO3RoaXMuaGFzQ2hvcm9wbGV0aD0hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWlbMF0udHJhY2U7ImNob3JvcGxldGgiPT09YS50eXBlJiYodGhpcy5oYXNDaG9yb3BsZXRoPSEwKSwhMD09PWEudmlzaWJsZSYmYS5fbGVuZ3RoPjAmJmEuX21vZHVsZS5jYWxjR2VvSlNPTihpLGUpfWlmKCF0aGlzLnVwZGF0ZVByb2plY3Rpb24odCxlKSl7dGhpcy52aWV3SW5pdGlhbCYmdGhpcy5zY29wZT09PXIuc2NvcGV8fHRoaXMuc2F2ZVZpZXdJbml0aWFsKHIpLHRoaXMuc2NvcGU9ci5zY29wZSx0aGlzLnVwZGF0ZUJhc2VMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZURpbXMoZSxyKSx0aGlzLnVwZGF0ZUZ4KGUsciksYy5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5ncmFwaERpdix0aGlzLHQscik7dmFyIG89dGhpcy5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpO3RoaXMuZGF0YVBvaW50cy5wb2ludD1vLnNlbGVjdEFsbCgiLnBvaW50IiksdGhpcy5kYXRhUG9pbnRzLnRleHQ9by5zZWxlY3RBbGwoInRleHQiKSx0aGlzLmRhdGFQYXRocy5saW5lPW8uc2VsZWN0QWxsKCIuanMtbGluZSIpO3ZhciBzPXRoaXMubGF5ZXJzLmJhY2twbG90LnNlbGVjdCgiLmNob3JvcGxldGhsYXllciIpO3RoaXMuZGF0YVBhdGhzLmNob3JvcGxldGg9cy5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLnJlbmRlcigpfX0sdy51cGRhdGVQcm9qZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ncmFwaERpdixvPWVbdGhpcy5pZF0scz1lLl9zaXplLGw9by5kb21haW4sYz1vLnByb2plY3Rpb24sdT1vLmxvbmF4aXMsZj1vLmxhdGF4aXMscD11Ll9heCxkPWYuX2F4LGc9dGhpcy5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnByb2plY3Rpb24udHlwZSxyPW4uZ2VvW3YucHJvak5hbWVzW2VdXSgpLGk9dC5faXNDbGlwcGVkP3YubG9uYXhpc1NwYW5bZV0vMjpudWxsLGE9WyJjZW50ZXIiLCJyb3RhdGUiLCJwYXJhbGxlbHMiLCJjbGlwRXh0ZW50Il0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdD9yOltdfSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107ImZ1bmN0aW9uIiE9dHlwZW9mIHJbbF0mJihyW2xdPW8pfXIuaXNMb25MYXRPdmVyRWRnZXM9ZnVuY3Rpb24odCl7aWYobnVsbD09PXIodCkpcmV0dXJuITA7aWYoaSl7dmFyIGU9ci5yb3RhdGUoKTtyZXR1cm4gbi5nZW8uZGlzdGFuY2UodCxbLWVbMF0sLWVbMV1dKT5pKk1hdGguUEkvMTgwfXJldHVybiExfSxyLmdldFBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZW8ucGF0aCgpLnByb2plY3Rpb24ocil9LHIuZ2V0Qm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmdldFBhdGgoKS5ib3VuZHModCl9LHIuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dFsxXVswXS10WzBdWzBdLGk9dFsxXVsxXS10WzBdWzFdLGE9ci5jbGlwRXh0ZW50JiZyLmNsaXBFeHRlbnQoKTtyLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxhJiZyLmNsaXBFeHRlbnQobnVsbCk7dmFyIG89ci5nZXRCb3VuZHMoZSkscz1NYXRoLm1pbihuLyhvWzFdWzBdLW9bMF1bMF0pLGkvKG9bMV1bMV0tb1swXVsxXSkpLGw9K3RbMF1bMF0rKG4tcyoob1sxXVswXStvWzBdWzBdKSkvMixjPSt0WzBdWzFdKyhpLXMqKG9bMV1bMV0rb1swXVsxXSkpLzI7cmV0dXJuIGEmJnIuY2xpcEV4dGVudChhKSxyLnNjYWxlKDE1MCpzKS50cmFuc2xhdGUoW2wsY10pfSxyLnByZWNpc2lvbih2LnByZWNpc2lvbiksaSYmci5jbGlwQW5nbGUoaS12LmNsaXBQYWQpO3JldHVybiByfShvKSxtPVtbcy5sK3MudypsLnhbMF0scy50K3MuaCooMS1sLnlbMV0pXSxbcy5sK3MudypsLnhbMV0scy50K3MuaCooMS1sLnlbMF0pXV0seT1vLmNlbnRlcnx8e30seD1jLnJvdGF0aW9ufHx7fSxiPXUucmFuZ2V8fFtdLF89Zi5yYW5nZXx8W107aWYoby5maXRib3VuZHMpe3AuX2xlbmd0aD1tWzFdWzBdLW1bMF1bMF0sZC5fbGVuZ3RoPW1bMV1bMV0tbVswXVsxXSxwLnJhbmdlPWgocixwKSxkLnJhbmdlPWgocixkKTt2YXIgdz0ocC5yYW5nZVswXStwLnJhbmdlWzFdKS8yLGs9KGQucmFuZ2VbMF0rZC5yYW5nZVsxXSkvMjtpZihvLl9pc1Njb3BlZCl5PXtsb246dyxsYXQ6a307ZWxzZSBpZihvLl9pc0NsaXBwZWQpe3k9e2xvbjp3LGxhdDprfSx4PXtsb246dyxsYXQ6ayxyb2xsOngucm9sbH07dmFyIE09Yy50eXBlLEE9di5sb25heGlzU3BhbltNXS8yfHwxODAsUz12LmxhdGF4aXNTcGFuW01dLzJ8fDkwO2I9W3ctQSx3K0FdLF89W2stUyxrK1NdfWVsc2UgeT17bG9uOncsbGF0Omt9LHg9e2xvbjp3LGxhdDp4LmxhdCxyb2xsOngucm9sbH19Zy5jZW50ZXIoW3kubG9uLXgubG9uLHkubGF0LXgubGF0XSkucm90YXRlKFsteC5sb24sLXgubGF0LHgucm9sbF0pLnBhcmFsbGVscyhjLnBhcmFsbGVscyk7dmFyIEU9VChiLF8pO2cuZml0RXh0ZW50KG0sRSk7dmFyIEM9dGhpcy5ib3VuZHM9Zy5nZXRCb3VuZHMoRSksTD10aGlzLmZpdFNjYWxlPWcuc2NhbGUoKSxQPWcudHJhbnNsYXRlKCk7aWYoIWlzRmluaXRlKENbMF1bMF0pfHwhaXNGaW5pdGUoQ1swXVsxXSl8fCFpc0Zpbml0ZShDWzFdWzBdKXx8IWlzRmluaXRlKENbMV1bMV0pfHxpc05hTihQWzBdKXx8aXNOYU4oUFswXSkpe2Zvcih2YXIgST1bImZpdGJvdW5kcyIsInByb2plY3Rpb24ucm90YXRpb24iLCJjZW50ZXIiLCJsb25heGlzLnJhbmdlIiwibGF0YXhpcy5yYW5nZSJdLHo9IkludmFsaWQgZ2VvIHNldHRpbmdzLCByZWxheW91dCdpbmcgdG8gZGVmYXVsdCB2aWV3LiIsTz17fSxEPTA7RDxJLmxlbmd0aDtEKyspT1t0aGlzLmlkKyIuIitJW0RdXT1udWxsO3JldHVybiB0aGlzLnZpZXdJbml0aWFsPW51bGwsYS53YXJuKHopLHIuX3Byb21pc2VzLnB1c2goaS5jYWxsKCJyZWxheW91dCIscixPKSksen1pZihvLmZpdGJvdW5kcyl7dmFyIFI9Zy5nZXRCb3VuZHMoVChwLnJhbmdlLGQucmFuZ2UpKSxGPU1hdGgubWluKChDWzFdWzBdLUNbMF1bMF0pLyhSWzFdWzBdLVJbMF1bMF0pLChDWzFdWzFdLUNbMF1bMV0pLyhSWzFdWzFdLVJbMF1bMV0pKTtpc0Zpbml0ZShGKT9nLnNjYWxlKEYqTCk6YS53YXJuKCJTb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmciK3RoaXMuaWQrImZpdGJvdW5kcyBjb21wdXRhdGlvbnMuIil9ZWxzZSBnLnNjYWxlKGMuc2NhbGUqTCk7dmFyIEI9dGhpcy5taWRQdD1bKENbMF1bMF0rQ1sxXVswXSkvMiwoQ1swXVsxXStDWzFdWzFdKS8yXTtpZihnLnRyYW5zbGF0ZShbUFswXSsoQlswXS1QWzBdKSxQWzFdKyhCWzFdLVBbMV0pXSkuY2xpcEV4dGVudChDKSxvLl9pc0FsYmVyc1VzYSl7dmFyIE49ZyhbeS5sb24seS5sYXRdKSxqPWcudHJhbnNsYXRlKCk7Zy50cmFuc2xhdGUoW2pbMF0tKE5bMF0talswXSksalsxXS0oTlsxXS1qWzFdKV0pfX0sdy51cGRhdGVCYXNlTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxpPXIudG9wb2pzb24sYT1yLmxheWVycyxsPXIuYmFzZVBhdGhzO2Z1bmN0aW9uIGModCl7cmV0dXJuImxvbmF4aXMiPT09dHx8ImxhdGF4aXMiPT09dH1mdW5jdGlvbiBoKHQpe3JldHVybiBCb29sZWFuKHYubGluZUxheWVyc1t0XSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gQm9vbGVhbih2LmZpbGxMYXllcnNbdF0pfXZhciBwPSh0aGlzLmhhc0Nob3JvcGxldGg/di5sYXllcnNGb3JDaG9yb3BsZXRoOnYubGF5ZXJzKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpfHxmKHQpP2VbInNob3ciK3RdOiFjKHQpfHxlW3RdLnNob3dncmlkfSkpLGQ9ci5mcmFtZXdvcmsuc2VsZWN0QWxsKCIubGF5ZXIiKS5kYXRhKHAsU3RyaW5nKTtkLmV4aXQoKS5lYWNoKChmdW5jdGlvbih0KXtkZWxldGUgYVt0XSxkZWxldGUgbFt0XSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pKSxkLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4ibGF5ZXIgIit0fSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF09bi5zZWxlY3QodGhpcyk7ImJnIj09PXQ/ci5iZ1JlY3Q9ZS5hcHBlbmQoInJlY3QiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTpjKHQpP2xbdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKToiYmFja3Bsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNob3JvcGxldGhsYXllciIsITApOiJmcm9udHBsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOmgodCk/bFt0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMik6Zih0KSYmKGxbdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpKX0pKSxkLm9yZGVyKCksZC5lYWNoKChmdW5jdGlvbihyKXt2YXIgbj1sW3JdLGE9di5sYXllck5hbWVUb0FkamVjdGl2ZVtyXTsiZnJhbWUiPT09cj9uLmRhdHVtKHYuc3BoZXJlU1ZHKTpoKHIpfHxmKHIpP24uZGF0dW0oYihpLGkub2JqZWN0c1tyXSkpOmMocikmJm4uZGF0dW0oZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPWVbdF0scz12LnNjb3BlRGVmYXVsdHNbZS5zY29wZV07ImxvbmF4aXMiPT09dD8obj1zLmxvbmF4aXNSYW5nZSxpPXMubGF0YXhpc1JhbmdlLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCxlXX0pOiJsYXRheGlzIj09PXQmJihuPXMubGF0YXhpc1JhbmdlLGk9cy5sb25heGlzUmFuZ2UsYT1mdW5jdGlvbih0LGUpe3JldHVybltlLHRdfSk7dmFyIGw9e3R5cGU6ImxpbmVhciIscmFuZ2U6W25bMF0sblsxXS0xZS02XSx0aWNrMDpvLnRpY2swLGR0aWNrOm8uZHRpY2t9O3Uuc2V0Q29udmVydChsLHIpO3ZhciBjPXUuY2FsY1RpY2tzKGwpO2UuaXNTY29wZWR8fCJsb25heGlzIiE9PXR8fGMucG9wKCk7Zm9yKHZhciBoPWMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHA9MDtwPGg7cCsrKWZvcih2YXIgZD1jW3BdLngsZz1mW3BdPVtdLG09aVswXTttPGlbMV0rMi41O20rPTIuNSlnLnB1c2goYShkLG0pKTtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpmfX0ocixlLHQpKS5jYWxsKG8uc3Ryb2tlLGVbcl0uZ3JpZGNvbG9yKS5jYWxsKHMuZGFzaExpbmUsIiIsZVtyXS5ncmlkd2lkdGgpLGgocik/bi5jYWxsKG8uc3Ryb2tlLGVbYSsiY29sb3IiXSkuY2FsbChzLmRhc2hMaW5lLCIiLGVbYSsid2lkdGgiXSk6ZihyKSYmbi5jYWxsKG8uZmlsbCxlW2ErImNvbG9yIl0pfSkpfSx3LnVwZGF0ZURpbXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmJvdW5kcyxuPShlLmZyYW1ld2lkdGh8fDApLzIsaT1yWzBdWzBdLW4sYT1yWzBdWzFdLW4sbD1yWzFdWzBdLWkrbixjPXJbMV1bMV0tYStuO3Muc2V0UmVjdCh0aGlzLmNsaXBSZWN0LGksYSxsLGMpLHRoaXMuYmdSZWN0LmNhbGwocy5zZXRSZWN0LGksYSxsLGMpLmNhbGwoby5maWxsLGUuYmdjb2xvciksdGhpcy54YXhpcy5fb2Zmc2V0PWksdGhpcy54YXhpcy5fbGVuZ3RoPWwsdGhpcy55YXhpcy5fb2Zmc2V0PWEsdGhpcy55YXhpcy5fbGVuZ3RoPWN9LHcudXBkYXRlRng9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLGE9ci5ncmFwaERpdixvPXIuYmdSZWN0LHM9dC5kcmFnbW9kZSxjPXQuY2xpY2ttb2RlO2lmKCFyLmlzU3RhdGljKXt2YXIgdTsic2VsZWN0Ij09PXM/dT1mdW5jdGlvbih0LGUpeyh0LnJhbmdlPXt9KVtyLmlkXT1bdihbZS54bWluLGUueW1pbl0pLHYoW2UueG1heCxlLnltYXhdKV19OiJsYXNzbyI9PT1zJiYodT1mdW5jdGlvbih0LGUsbil7KHQubGFzc29Qb2ludHM9e30pW3IuaWRdPW4uZmlsdGVyZWQubWFwKHYpfSk7dmFyIGg9e2VsZW1lbnQ6ci5iZ1JlY3Qubm9kZSgpLGdkOmEscGxvdGluZm86e2lkOnIuaWQseGF4aXM6ci54YXhpcyx5YXhpczpyLnlheGlzLGZpbGxSYW5nZUl0ZW1zOnV9LHhheGVzOltyLnhheGlzXSx5YXhlczpbci55YXhpc10sc3VicGxvdDpyLmlkLGNsaWNrRm46ZnVuY3Rpb24odCl7Mj09PXQmJmQoYSl9fTsicGFuIj09PXM/KG8ubm9kZSgpLm9ubW91c2Vkb3duPW51bGwsby5jYWxsKG0ocixlKSksby5vbigiZGJsY2xpY2suem9vbSIsKGZ1bmN0aW9uKCl7dmFyIHQ9ci52aWV3SW5pdGlhbCxlPXt9O2Zvcih2YXIgbiBpbiB0KWVbci5pZCsiLiIrbl09dFtuXTtpLmNhbGwoIl9ndWlSZWxheW91dCIsYSxlKSxhLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCl9KSksYS5fY29udGV4dC5fc2Nyb2xsWm9vbS5nZW98fG8ub24oIndoZWVsLnpvb20iLG51bGwpKToic2VsZWN0IiE9PXMmJiJsYXNzbyIhPT1zfHwoby5vbigiLnpvb20iLG51bGwpLGgucHJlcEZuPWZ1bmN0aW9uKHQsZSxyKXtwKHQsZSxyLGgscyl9LGYuaW5pdChoKSksby5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24oKXt2YXIgdD1yLnByb2plY3Rpb24uaW52ZXJ0KG4ubW91c2UodGhpcykpO2lmKCF0fHxpc05hTih0WzBdKXx8aXNOYU4odFsxXSkpcmV0dXJuIGYudW5ob3ZlcihhLG4uZXZlbnQpO3IueGF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHRbMF19LHIueWF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHRbMV19LGwuaG92ZXIoYSxuLmV2ZW50LHIuaWQpfSkpLG8ub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXthLl9kcmFnZ2luZ3x8Zi51bmhvdmVyKGEsbi5ldmVudCl9KSksby5vbigiY2xpY2siLChmdW5jdGlvbigpeyJzZWxlY3QiIT09cyYmImxhc3NvIiE9PXMmJihjLmluZGV4T2YoInNlbGVjdCIpPi0xJiZnKG4uZXZlbnQsYSxbci54YXhpc10sW3IueWF4aXNdLHIuaWQsaCksYy5pbmRleE9mKCJldmVudCIpPi0xJiZsLmNsaWNrKGEsbi5ldmVudCkpfSkpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHIucHJvamVjdGlvbi5pbnZlcnQoW3RbMF0rci54YXhpcy5fb2Zmc2V0LHRbMV0rci55YXhpcy5fb2Zmc2V0XSl9fSx3Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5ncmFwaERpdixyPWUuX2Z1bGxMYXlvdXQsaT0iY2xpcCIrci5fdWlkK3QuaWQ7dC5jbGlwRGVmPXIuX2NsaXBzLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsaSksdC5jbGlwUmVjdD10LmNsaXBEZWYuYXBwZW5kKCJyZWN0IiksdC5mcmFtZXdvcms9bi5zZWxlY3QodC5jb250YWluZXIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ2VvICIrdC5pZCkuY2FsbChzLnNldENsaXBVcmwsaSxlKSx0LnByb2plY3Q9ZnVuY3Rpb24oZSl7dmFyIHI9dC5wcm9qZWN0aW9uKGUpO3JldHVybiByP1tyWzBdLXQueGF4aXMuX29mZnNldCxyWzFdLXQueWF4aXMuX29mZnNldF06W251bGwsbnVsbF19LHQueGF4aXM9e19pZDoieCIsYzJwOmZ1bmN0aW9uKGUpe3JldHVybiB0LnByb2plY3QoZSlbMF19fSx0LnlheGlzPXtfaWQ6InkiLGMycDpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9qZWN0KGUpWzFdfX0sdC5tb2NrQXhpcz17dHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIifSx1LnNldENvbnZlcnQodC5tb2NrQXhpcyxyKX0sdy5zYXZlVmlld0luaXRpYWw9ZnVuY3Rpb24odCl7dmFyIGUscj10LmNlbnRlcnx8e30sbj10LnByb2plY3Rpb24saT1uLnJvdGF0aW9ufHx7fTt0aGlzLnZpZXdJbml0aWFsPXtmaXRib3VuZHM6dC5maXRib3VuZHMsInByb2plY3Rpb24uc2NhbGUiOm4uc2NhbGV9LGU9dC5faXNTY29wZWQ/eyJjZW50ZXIubG9uIjpyLmxvbiwiY2VudGVyLmxhdCI6ci5sYXR9OnQuX2lzQ2xpcHBlZD97InByb2plY3Rpb24ucm90YXRpb24ubG9uIjppLmxvbiwicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiOmkubGF0fTp7ImNlbnRlci5sb24iOnIubG9uLCJjZW50ZXIubGF0IjpyLmxhdCwicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOmkubG9ufSxhLmV4dGVuZEZsYXQodGhpcy52aWV3SW5pdGlhbCxlKX0sdy5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMucHJvamVjdGlvbixyPWUuZ2V0UGF0aCgpO2Z1bmN0aW9uIG4odCl7dmFyIHI9ZSh0LmxvbmxhdCk7cmV0dXJuIHI/InRyYW5zbGF0ZSgiK3JbMF0rIiwiK3JbMV0rIikiOm51bGx9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZS5pc0xvbkxhdE92ZXJFZGdlcyh0LmxvbmxhdCk/Im5vbmUiOm51bGx9Zm9yKHQgaW4gdGhpcy5iYXNlUGF0aHMpdGhpcy5iYXNlUGF0aHNbdF0uYXR0cigiZCIscik7Zm9yKHQgaW4gdGhpcy5kYXRhUGF0aHMpdGhpcy5kYXRhUGF0aHNbdF0uYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiByKHQuZ2VvanNvbil9KSk7Zm9yKHQgaW4gdGhpcy5kYXRhUG9pbnRzKXRoaXMuZGF0YVBvaW50c1t0XS5hdHRyKCJkaXNwbGF5IixpKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjYzNCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY1NSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjc0MywiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIjo3NzcsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjc5OCwiLi4vY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vY2FydGVzaWFuL3NlbGVjdCI6ODE4LCIuLi9wbG90cyI6ODYyLCIuL2NvbnN0YW50cyI6ODI5LCIuL3Byb2plY3Rpb25zIjo4MzQsIi4vem9vbSI6ODM1LGQzOjE2OSwidG9wb2pzb24tY2xpZW50Ijo1NTF9XSw4MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsaT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsYT10KCIuL2dlbyIpLG89ImdlbyIscz1pKG8pLGw9e307bC5nZW89e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDpvLGVkaXRUeXBlOiJjYWxjIn0sZS5leHBvcnRzPXthdHRyOm8sbmFtZTpvLGlkUm9vdDpvLGlkUmVnZXg6cyxhdHRyUmVnZXg6cyxhdHRyaWJ1dGVzOmwsbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzLmdlbyxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10sYz1uKHIsbyxsKSx1PWVbbF0uX3N1YnBsb3Q7dXx8KHU9YSh7aWQ6bCxncmFwaERpdjp0LGNvbnRhaW5lcjplLl9nZW9sYXllci5ub2RlKCksdG9wb2pzb25VUkw6dC5fY29udGV4dC50b3BvanNvblVSTCxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbbF0uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSx1cGRhdGVGeDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdlbyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWVbcltuXV07aS5fc3VicGxvdC51cGRhdGVGeChlLGkpfX0sY2xlYW46ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdlb3x8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bltvXS5fc3VicGxvdDshZVtvXSYmcyYmKHMuZnJhbWV3b3JrLnJlbW92ZSgpLHMuY2xpcERlZi5yZW1vdmUoKSl9fX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4MzYsIi4vZ2VvIjo4MzAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgzMiwiLi9sYXlvdXRfZGVmYXVsdHMiOjgzM31dLDgzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuL2NvbnN0YW50cyIpLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9e3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx0aWNrMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGR0aWNrOnt2YWxUeXBlOiJudW1iZXIifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4ubGlnaHRMaW5lfSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfX07KGUuZXhwb3J0cz1vKHtkb21haW46aSh7bmFtZToiZ2VvIn0se30pLGZpdGJvdW5kczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwibG9jYXRpb25zIiwiZ2VvanNvbiJdLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxyZXNvbHV0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WzExMCw1MF0sZGZsdDoxMTAsY29lcmNlTnVtYmVyOiEwfSxzY29wZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGEuc2NvcGVEZWZhdWx0cyksZGZsdDoid29ybGQifSxwcm9qZWN0aW9uOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMoYS5wcm9qTmFtZXMpfSxyb3RhdGlvbjp7bG9uOnt2YWxUeXBlOiJudW1iZXIifSxsYXQ6e3ZhbFR5cGU6Im51bWJlciJ9LHJvbGw6e3ZhbFR5cGU6Im51bWJlciJ9fSxwYXJhbGxlbHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIn0se3ZhbFR5cGU6Im51bWJlciJ9XX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfX0sY2VudGVyOntsb246e3ZhbFR5cGU6Im51bWJlciJ9LGxhdDp7dmFsVHlwZToibnVtYmVyIn19LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3djb2FzdGxpbmVzOnt2YWxUeXBlOiJib29sZWFuIn0sY29hc3RsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LGNvYXN0bGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2xhbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxhbmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5sYW5kQ29sb3J9LHNob3dvY2Vhbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb2NlYW5jb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxzaG93bGFrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxha2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxzaG93cml2ZXJzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxyaXZlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLndhdGVyQ29sb3J9LHJpdmVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93Y291bnRyaWVzOnt2YWxUeXBlOiJib29sZWFuIn0sY291bnRyeWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb3VudHJ5d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93c3VidW5pdHM6e3ZhbFR5cGU6ImJvb2xlYW4ifSxzdWJ1bml0Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHN1YnVuaXR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dmcmFtZTp7dmFsVHlwZToiYm9vbGVhbiJ9LGZyYW1lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LGZyYW1ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmR9LGxvbmF4aXM6cyxsYXRheGlzOnN9LCJwbG90IiwiZnJvbS1yb290IikpLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYxNCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzgxLCIuLi9kb21haW4iOjgyNiwiLi9jb25zdGFudHMiOjgyOX1dLDgzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxhPXQoIi4uL2dldF9kYXRhIikuZ2V0U3VicGxvdERhdGEsbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGw9by5heGVzTmFtZXM7ZnVuY3Rpb24gYyh0LGUscixpKXt2YXIgcz1hKGkuZnVsbERhdGEsImdlbyIsaS5pZCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pKSxjPXIoInJlc29sdXRpb24iKSx1PXIoInNjb3BlIiksaD1vLnNjb3BlRGVmYXVsdHNbdV0sZj1yKCJwcm9qZWN0aW9uLnR5cGUiLGgucHJvalR5cGUpLHA9ZS5faXNBbGJlcnNVc2E9ImFsYmVycyB1c2EiPT09ZjtwJiYodT1lLnNjb3BlPSJ1c2EiKTt2YXIgZD1lLl9pc1Njb3BlZD0id29ybGQiIT09dSxnPWUuX2lzQ29uaWM9LTEhPT1mLmluZGV4T2YoImNvbmljIiksbT1lLl9pc0NsaXBwZWQ9ISFvLmxvbmF4aXNTcGFuW2ZdO2lmKCExPT09dC52aXNpYmxlKXt2YXIgdj1uLmV4dGVuZERlZXAoe30sZS5fdGVtcGxhdGUpO3Yuc2hvd2NvYXN0bGluZXM9ITEsdi5zaG93Y291bnRyaWVzPSExLHYuc2hvd2ZyYW1lPSExLHYuc2hvd2xha2VzPSExLHYuc2hvd2xhbmQ9ITEsdi5zaG93b2NlYW49ITEsdi5zaG93cml2ZXJzPSExLHYuc2hvd3N1YnVuaXRzPSExLHYubG9uYXhpcyYmKHYubG9uYXhpcy5zaG93Z3JpZD0hMSksdi5sYXRheGlzJiYodi5sYXRheGlzLnNob3dncmlkPSExKSxlLl90ZW1wbGF0ZT12fWZvcih2YXIgeT1yKCJ2aXNpYmxlIikseD0wO3g8bC5sZW5ndGg7eCsrKXt2YXIgYixfPWxbeF0sdz1bMzAsMTBdW3hdO2lmKGQpYj1oW18rIlJhbmdlIl07ZWxzZXt2YXIgVD1vW18rIlNwYW4iXSxrPShUW2ZdfHxUWyIqIl0pLzIsTT1yKCJwcm9qZWN0aW9uLnJvdGF0aW9uLiIrXy5zdWJzdHIoMCwzKSxoLnByb2pSb3RhdGVbeF0pO2I9W00tayxNK2tdfXZhciBBPXIoXysiLnJhbmdlIixiKTtyKF8rIi50aWNrMCIpLHIoXysiLmR0aWNrIix3KSxyKF8rIi5zaG93Z3JpZCIsISF5JiZ2b2lkIDApJiYocihfKyIuZ3JpZGNvbG9yIikscihfKyIuZ3JpZHdpZHRoIikpLGVbX10uX2F4PXt0eXBlOiJsaW5lYXIiLF9pZDpfLnNsaWNlKDAsMyksX3RyYWNlSW5kaWNlczpzLHNldFNjYWxlOm4uaWRlbnRpdHksYzJsOm4uaWRlbnRpdHkscjJsOm4uaWRlbnRpdHksYXV0b3JhbmdlOiEwLHJhbmdlOkEuc2xpY2UoKSxfbToxLF9pbnB1dDp7fX19dmFyIFM9ZS5sb25heGlzLnJhbmdlLEU9ZS5sYXRheGlzLnJhbmdlLEM9U1swXSxMPVNbMV07Qz4wJiZMPDAmJihMKz0zNjApO3ZhciBQLEkseixPPShDK0wpLzI7aWYoIXApe3ZhciBEPWQ/aC5wcm9qUm90YXRlOltPLDAsMF07UD1yKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsRFswXSkscigicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiLERbMV0pLHIoInByb2plY3Rpb24ucm90YXRpb24ucm9sbCIsRFsyXSkscigic2hvd2NvYXN0bGluZXMiLCFkJiZ5KSYmKHIoImNvYXN0bGluZWNvbG9yIikscigiY29hc3RsaW5ld2lkdGgiKSkscigic2hvd29jZWFuIiwhIXkmJnZvaWQgMCkmJnIoIm9jZWFuY29sb3IiKX0ocD8oST0tOTYuNix6PTM4LjcpOihJPWQ/TzpQLHo9KEVbMF0rRVsxXSkvMikscigiY2VudGVyLmxvbiIsSSkscigiY2VudGVyLmxhdCIseiksZykmJnIoInByb2plY3Rpb24ucGFyYWxsZWxzIixoLnByb2pQYXJhbGxlbHN8fFswLDYwXSk7cigicHJvamVjdGlvbi5zY2FsZSIpLHIoInNob3dsYW5kIiwhIXkmJnZvaWQgMCkmJnIoImxhbmRjb2xvciIpLHIoInNob3dsYWtlcyIsISF5JiZ2b2lkIDApJiZyKCJsYWtlY29sb3IiKSxyKCJzaG93cml2ZXJzIiwhIXkmJnZvaWQgMCkmJihyKCJyaXZlcmNvbG9yIikscigicml2ZXJ3aWR0aCIpKSxyKCJzaG93Y291bnRyaWVzIixkJiYidXNhIiE9PXUmJnkpJiYocigiY291bnRyeWNvbG9yIikscigiY291bnRyeXdpZHRoIikpLCgidXNhIj09PXV8fCJub3J0aCBhbWVyaWNhIj09PXUmJjUwPT09YykmJihyKCJzaG93c3VidW5pdHMiLHkpLHIoInN1YnVuaXRjb2xvciIpLHIoInN1YnVuaXR3aWR0aCIpKSxkfHxyKCJzaG93ZnJhbWUiLHkpJiYocigiZnJhbWVjb2xvciIpLHIoImZyYW1ld2lkdGgiKSkscigiYmdjb2xvciIpLHIoImZpdGJvdW5kcyIpJiYoZGVsZXRlIGUucHJvamVjdGlvbi5zY2FsZSxkPyhkZWxldGUgZS5jZW50ZXIubG9uLGRlbGV0ZSBlLmNlbnRlci5sYXQpOm0/KGRlbGV0ZSBlLmNlbnRlci5sb24sZGVsZXRlIGUuY2VudGVyLmxhdCxkZWxldGUgZS5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbixkZWxldGUgZS5wcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCxkZWxldGUgZS5sb25heGlzLnJhbmdlLGRlbGV0ZSBlLmxhdGF4aXMucmFuZ2UpOihkZWxldGUgZS5jZW50ZXIubG9uLGRlbGV0ZSBlLmNlbnRlci5sYXQsZGVsZXRlIGUucHJvamVjdGlvbi5yb3RhdGlvbi5sb24pKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2kodCxlLHIse3R5cGU6ImdlbyIsYXR0cmlidXRlczpzLGhhbmRsZURlZmF1bHRzOmMsZnVsbERhdGE6cixwYXJ0aXRpb246InkifSl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi9nZXRfZGF0YSI6ODM2LCIuLi9zdWJwbG90X2RlZmF1bHRzIjo4NzYsIi4vY29uc3RhbnRzIjo4MjksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgzMn1dLDgzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybnt0eXBlOiJGZWF0dXJlIixpZDp0LmlkLHByb3BlcnRpZXM6dC5wcm9wZXJ0aWVzLGdlb21ldHJ5OnIodC5nZW9tZXRyeSxlKX19ZnVuY3Rpb24gcihlLG4pe2lmKCFlKXJldHVybiBudWxsO2lmKCJHZW9tZXRyeUNvbGxlY3Rpb24iPT09ZS50eXBlKXJldHVybnt0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24iLGdlb21ldHJpZXM6b2JqZWN0Lmdlb21ldHJpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcih0LG4pfSkpfTtpZighYy5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpKXJldHVybiBudWxsO3ZhciBpPWNbZS50eXBlXTtyZXR1cm4gdC5nZW8uc3RyZWFtKGUsbihpKSksaS5yZXN1bHQoKX10Lmdlby5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5zdHJlYW07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJub3QgeWV0IHN1cHBvcnRlZCIpO3JldHVybih0JiZuLmhhc093blByb3BlcnR5KHQudHlwZSk/blt0LnR5cGVdOnIpKHQsaSl9O3ZhciBuPXtGZWF0dXJlOmUsRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxyKXtyZXR1cm57dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOnQuZmVhdHVyZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZSh0LHIpfSkpfX19LGk9W10sYT1bXSxvPXtwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaChbdCxlXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PWkubGVuZ3RoP2kubGVuZ3RoPDI/e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczppWzBdfTp7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6aX06bnVsbDtyZXR1cm4gaT1bXSx0fX0scz17bGluZVN0YXJ0OnUscG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2goW3QsZV0pfSxsaW5lRW5kOmZ1bmN0aW9uKCl7aS5sZW5ndGgmJihhLnB1c2goaSksaT1bXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PWEubGVuZ3RoP2EubGVuZ3RoPDI/e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmFbMF19Ont0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmF9Om51bGw7cmV0dXJuIGE9W10sdH19LGw9e3BvbHlnb25TdGFydDp1LGxpbmVTdGFydDp1LHBvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PWkubGVuZ3RoO2lmKHQpe2Rve2kucHVzaChpWzBdLnNsaWNlKCkpfXdoaWxlKCsrdDw0KTthLnB1c2goaSksaT1bXX19LHBvbHlnb25FbmQ6dSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZighYS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHQ9W10sZT1bXTtyZXR1cm4gYS5mb3JFYWNoKChmdW5jdGlvbihyKXshZnVuY3Rpb24odCl7aWYoKGU9dC5sZW5ndGgpPDQpcmV0dXJuITE7dmFyIGUscj0wLG49dFtlLTFdWzFdKnRbMF1bMF0tdFtlLTFdWzBdKnRbMF1bMV07Zm9yKDsrK3I8ZTspbis9dFtyLTFdWzFdKnRbcl1bMF0tdFtyLTFdWzBdKnRbcl1bMV07cmV0dXJuIG48PTB9KHIpP2UucHVzaChyKTp0LnB1c2goW3JdKX0pKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07dC5zb21lKChmdW5jdGlvbih0KXtpZihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxpPSExLGE9MCxvPXQubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9dFthXSxjPWxbMF0sdT1sWzFdLGg9dFtzXSxmPWhbMF0scD1oWzFdO3U+bl5wPm4mJnI8KGYtYykqKG4tdSkvKHAtdSkrYyYmKGk9IWkpfXJldHVybiBpfSh0WzBdLHIpKXJldHVybiB0LnB1c2goZSksITB9KSl8fHQucHVzaChbZV0pfSkpLGE9W10sdC5sZW5ndGg/dC5sZW5ndGg+MT97dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0fTp7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dFswXX06bnVsbH19LGM9e1BvaW50Om8sTXVsdGlQb2ludDpvLExpbmVTdHJpbmc6cyxNdWx0aUxpbmVTdHJpbmc6cyxQb2x5Z29uOmwsTXVsdGlQb2x5Z29uOmwsU3BoZXJlOmx9O2Z1bmN0aW9uIHUoKXt9dmFyIGg9MWUtNixmPU1hdGguUEkscD1mLzIsZD0oTWF0aC5zcXJ0KGYpLGYvMTgwKSxnPTE4MC9mO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQ+MT9wOnQ8LTE/LXA6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/ZjpNYXRoLmFjb3ModCl9dmFyIHk9dC5nZW8ucHJvamVjdGlvbix4PXQuZ2VvLnByb2plY3Rpb25NdXRhdG9yO2Z1bmN0aW9uIGIodCxlKXt2YXIgcj0oMitwKSpNYXRoLnNpbihlKTtlLz0yO2Zvcih2YXIgbj0wLGk9MS8wO248MTAmJk1hdGguYWJzKGkpPmg7bisrKXt2YXIgYT1NYXRoLmNvcyhlKTtlLT1pPShlK01hdGguc2luKGUpKihhKzIpLXIpLygyKmEqKDErYSkpfXJldHVyblsyL01hdGguc3FydChmKig0K2YpKSp0KigxK01hdGguY29zKGUpKSwyKk1hdGguc3FydChmLyg0K2YpKSpNYXRoLnNpbihlKV19dC5nZW8uaW50ZXJydXB0PWZ1bmN0aW9uKGUpe3ZhciByLG49W1tbWy1mLDBdLFswLHBdLFtmLDBdXV0sW1tbLWYsMF0sWzAsLXBdLFtmLDBdXV1dO2Z1bmN0aW9uIGkodCxyKXtmb3IodmFyIGk9cjwwPy0xOjEsYT1uWysocjwwKV0sbz0wLHM9YS5sZW5ndGgtMTtvPHMmJnQ+YVtvXVsyXVswXTsrK28pO3ZhciBsPWUodC1hW29dWzFdWzBdLHIpO3JldHVybiBsWzBdKz1lKGFbb11bMV1bMF0saSpyPmkqYVtvXVswXVsxXT9hW29dWzBdWzFdOnIpWzBdLGx9ZnVuY3Rpb24gYSgpe3I9bi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIHIsbj1lKHRbMF1bMF0sdFswXVsxXSlbMF0saT1lKHRbMl1bMF0sdFsyXVsxXSlbMF0sYT1lKHRbMV1bMF0sdFswXVsxXSlbMV0sbz1lKHRbMV1bMF0sdFsxXVsxXSlbMV07cmV0dXJuIGE+byYmKHI9YSxhPW8sbz1yKSxbW24sYV0sW2ksb11dfSkpfSkpfWUuaW52ZXJ0JiYoaS5pbnZlcnQ9ZnVuY3Rpb24odCxhKXtmb3IodmFyIG89clsrKGE8MCldLHM9blsrKGE8MCldLGw9MCx1PW8ubGVuZ3RoO2w8dTsrK2wpe3ZhciBoPW9bbF07aWYoaFswXVswXTw9dCYmdDxoWzFdWzBdJiZoWzBdWzFdPD1hJiZhPGhbMV1bMV0pe3ZhciBmPWUuaW52ZXJ0KHQtZShzW2xdWzFdWzBdLDApWzBdLGEpO3JldHVybiBmWzBdKz1zW2xdWzFdWzBdLGMoaShmWzBdLGZbMV0pLFt0LGFdKT9mOm51bGx9fX0pO3ZhciBvPXQuZ2VvLnByb2plY3Rpb24oaSkscz1vLnN0cmVhbTtmdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByLG4saSxhPS0xLG89dC5sZW5ndGgscz10WzBdLGw9W107KythPG87KXtuPSgocj10W2FdKVswXS1zWzBdKS9lLGk9KHJbMV0tc1sxXSkvZTtmb3IodmFyIGM9MDtjPGU7KytjKWwucHVzaChbc1swXStjKm4sc1sxXStjKmldKTtzPXJ9cmV0dXJuIGwucHVzaChyKSxsfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzBdKTxoJiZNYXRoLmFicyh0WzFdLWVbMV0pPGh9cmV0dXJuIG8uc3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciByPW8ucm90YXRlKCksaT1zKGUpLGE9KG8ucm90YXRlKFswLDBdKSxzKGUpKTtyZXR1cm4gby5yb3RhdGUociksaS5zcGhlcmU9ZnVuY3Rpb24oKXt0Lmdlby5zdHJlYW0oZnVuY3Rpb24oKXtmb3IodmFyIGU9MWUtNixyPVtdLGk9MCxhPW5bMF0ubGVuZ3RoO2k8YTsrK2kpe3ZhciBvPTE4MCoocD1uWzBdW2ldKVswXVswXS9mLHM9MTgwKnBbMF1bMV0vZixjPTE4MCpwWzFdWzFdL2YsdT0xODAqcFsyXVswXS9mLGg9MTgwKnBbMl1bMV0vZjtyLnB1c2gobChbW28rZSxzK2VdLFtvK2UsYy1lXSxbdS1lLGMtZV0sW3UtZSxoK2VdXSwzMCkpfWZvcihpPW5bMV0ubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBwO289MTgwKihwPW5bMV1baV0pWzBdWzBdL2Yscz0xODAqcFswXVsxXS9mLGM9MTgwKnBbMV1bMV0vZix1PTE4MCpwWzJdWzBdL2YsaD0xODAqcFsyXVsxXS9mO3IucHVzaChsKFtbdS1lLGgtZV0sW3UtZSxjK2VdLFtvK2UsYytlXSxbbytlLHMtZV1dLDMwKSl9cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0Lm1lcmdlKHIpXX19KCksYSl9LGl9LG8ubG9iZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW1t0WzBdWzBdKmYvMTgwLHRbMF1bMV0qZi8xODBdLFt0WzFdWzBdKmYvMTgwLHRbMV1bMV0qZi8xODBdLFt0WzJdWzBdKmYvMTgwLHRbMl1bMV0qZi8xODBdXX0pKX0pKSxhKCksbyk6bi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW1sxODAqdFswXVswXS9mLDE4MCp0WzBdWzFdL2ZdLFsxODAqdFsxXVswXS9mLDE4MCp0WzFdWzFdL2ZdLFsxODAqdFsyXVswXS9mLDE4MCp0WzJdWzFdL2ZdXX0pKX0pKX0sb30sYi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0uNSplKk1hdGguc3FydCgoNCtmKS9mKSxuPW0ociksaT1NYXRoLmNvcyhuKTtyZXR1cm5bdC8oMi9NYXRoLnNxcnQoZiooNCtmKSkqKDEraSkpLG0oKG4rciooaSsyKSkvKDIrcCkpXX0sKHQuZ2VvLmVja2VydDQ9ZnVuY3Rpb24oKXtyZXR1cm4geShiKX0pLnJhdz1iO3ZhciBfPXQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYS5yYXc7ZnVuY3Rpb24gdyh0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dCksMT09PWUpcmV0dXJuIF87aWYoZT09PTEvMClyZXR1cm4gVDtmdW5jdGlvbiByKHIsbil7dmFyIGk9XyhyL2Usbik7cmV0dXJuIGlbMF0qPXQsaX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1fLmludmVydChyL3Qsbik7cmV0dXJuIGlbMF0qPWUsaX0scn1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSkvTWF0aC5jb3MoZS89MiksMipNYXRoLnNpbihlKV19ZnVuY3Rpb24gayh0LGUpe3JldHVyblszKnQvKDIqZikqTWF0aC5zcXJ0KGYqZi8zLWUqZSksZV19ZnVuY3Rpb24gTSh0LGUpe3JldHVyblt0LDEuMjUqTWF0aC5sb2coTWF0aC50YW4oZi80Ky40KmUpKV19ZnVuY3Rpb24gQSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsbj10Kk1hdGguc2luKGUpLGk9MzA7ZG97ZS09cj0oZStNYXRoLnNpbihlKS1uKS8oMStNYXRoLmNvcyhlKSl9d2hpbGUoTWF0aC5hYnMocik+aCYmLS1pPjApO3JldHVybiBlLzJ9fVQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MiptKGUvMik7cmV0dXJuW3QqTWF0aC5jb3Moci8yKS9NYXRoLmNvcyhyKSxyXX0sKHQuZ2VvLmhhbW1lcj1mdW5jdGlvbigpe3ZhciB0PTIsZT14KHcpLHI9ZSh0KTtyZXR1cm4gci5jb2VmZmljaWVudD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHQ9K3IpOnR9LHJ9KS5yYXc9dyxrLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblsyLzMqZip0L01hdGguc3FydChmKmYvMy1lKmUpLGVdfSwodC5nZW8ua2F2cmF5c2tpeTc9ZnVuY3Rpb24oKXtyZXR1cm4geShrKX0pLnJhdz1rLE0uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMi41Kk1hdGguYXRhbihNYXRoLmV4cCguOCplKSktLjYyNSpmXX0sKHQuZ2VvLm1pbGxlcj1mdW5jdGlvbigpe3JldHVybiB5KE0pfSkucmF3PU0sQShmKTt2YXIgUz1mdW5jdGlvbih0LGUscil7dmFyIG49QShyKTtmdW5jdGlvbiBpKHIsaSl7cmV0dXJuW3QqcipNYXRoLmNvcyhpPW4oaSkpLGUqTWF0aC5zaW4oaSldfXJldHVybiBpLmludmVydD1mdW5jdGlvbihuLGkpe3ZhciBhPW0oaS9lKTtyZXR1cm5bbi8odCpNYXRoLmNvcyhhKSksbSgoMiphK01hdGguc2luKDIqYSkpL3IpXX0saX0oTWF0aC5TUVJUMi9wLE1hdGguU1FSVDIsZik7ZnVuY3Rpb24gRSh0LGUpe3ZhciByPWUqZSxuPXIqcjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpyK24qKG4qKC4wMDM5NzEqci0uMDAxNTI5Km4pLS4wMTM3OTEpKSxlKigxLjAwNzIyNityKiguMDE1MDg1K24qKC4wMjg4NzQqci0uMDQ0NDc1LS4wMDU5MTYqbikpKV19KHQuZ2VvLm1vbGx3ZWlkZT1mdW5jdGlvbigpe3JldHVybiB5KFMpfSkucmF3PVMsRS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT0yNTtkb3t2YXIgYT1uKm4sbz1hKmE7bi09cj0obiooMS4wMDcyMjYrYSooLjAxNTA4NStvKiguMDI4ODc0KmEtLjA0NDQ3NS0uMDA1OTE2Km8pKSktZSkvKDEuMDA3MjI2K2EqKC4wNDUyNTUrbyooLjI1OTg2NiphLS4zMTEzMjUtLjAwNTkxNioxMSpvKSkpfXdoaWxlKE1hdGguYWJzKHIpPmgmJi0taT4wKTtyZXR1cm5bdC8oLjg3MDcrKGE9bipuKSooYSooYSphKmEqKC4wMDM5NzEtLjAwMTUyOSphKS0uMDEzNzkxKS0uMTMxOTc5KSksbl19LCh0Lmdlby5uYXR1cmFsRWFydGg9ZnVuY3Rpb24oKXtyZXR1cm4geShFKX0pLnJhdz1FO3ZhciBDPVtbLjk5ODYsLS4wNjJdLFsxLDBdLFsuOTk4NiwuMDYyXSxbLjk5NTQsLjEyNF0sWy45OSwuMTg2XSxbLjk4MjIsLjI0OF0sWy45NzMsLjMxXSxbLjk2LC4zNzJdLFsuOTQyNywuNDM0XSxbLjkyMTYsLjQ5NThdLFsuODk2MiwuNTU3MV0sWy44Njc5LC42MTc2XSxbLjgzNSwuNjc2OV0sWy43OTg2LC43MzQ2XSxbLjc1OTcsLjc5MDNdLFsuNzE4NiwuODQzNV0sWy42NzMyLC44OTM2XSxbLjYyMTMsLjkzOTRdLFsuNTcyMiwuOTc2MV0sWy41MzIyLDFdXTtmdW5jdGlvbiBMKHQsZSl7dmFyIHIsbj1NYXRoLm1pbigxOCwzNipNYXRoLmFicyhlKS9mKSxpPU1hdGguZmxvb3IobiksYT1uLWksbz0ocj1DW2ldKVswXSxzPXJbMV0sbD0ocj1DWysraV0pWzBdLGM9clsxXSx1PShyPUNbTWF0aC5taW4oMTksKytpKV0pWzBdLGg9clsxXTtyZXR1cm5bdCoobCthKih1LW8pLzIrYSphKih1LTIqbCtvKS8yKSwoZT4wP3A6LXApKihjK2EqKGgtcykvMithKmEqKGgtMipjK3MpLzIpXX1mdW5jdGlvbiBQKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksZV19ZnVuY3Rpb24gSSh0LGUpe3ZhciByLG49TWF0aC5jb3MoZSksaT0ocj12KG4qTWF0aC5jb3ModC89MikpKT9yL01hdGguc2luKHIpOjE7cmV0dXJuWzIqbipNYXRoLnNpbih0KSppLE1hdGguc2luKGUpKmldfWZ1bmN0aW9uIHoodCxlKXt2YXIgcj1JKHQsZSk7cmV0dXJuWyhyWzBdK3QvcCkvMiwoclsxXStlKS8yXX1DLmZvckVhY2goKGZ1bmN0aW9uKHQpe3RbMV0qPTEuMDE0NH0pKSxMLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUvcCxuPTkwKnIsaT1NYXRoLm1pbigxOCxNYXRoLmFicyhuLzUpKSxhPU1hdGgubWF4KDAsTWF0aC5mbG9vcihpKSk7ZG97dmFyIG89Q1thXVsxXSxzPUNbYSsxXVsxXSxsPUNbTWF0aC5taW4oMTksYSsyKV1bMV0sYz1sLW8sdT1sLTIqcytvLGg9MiooTWF0aC5hYnMociktcykvYyxmPXUvYyxtPWgqKDEtZipoKigxLTIqZipoKSk7aWYobT49MHx8MT09PWEpe249KGU+PTA/NTotNSkqKG0raSk7dmFyIHYseT01MDtkb3ttPShpPU1hdGgubWluKDE4LE1hdGguYWJzKG4pLzUpKS0oYT1NYXRoLmZsb29yKGkpKSxvPUNbYV1bMV0scz1DW2ErMV1bMV0sbD1DW01hdGgubWluKDE5LGErMildWzFdLG4tPSh2PShlPj0wP3A6LXApKihzK20qKGwtbykvMittKm0qKGwtMipzK28pLzIpLWUpKmd9d2hpbGUoTWF0aC5hYnModik+MWUtMTImJi0teT4wKTticmVha319d2hpbGUoLS1hPj0wKTt2YXIgeD1DW2FdWzBdLGI9Q1thKzFdWzBdLF89Q1tNYXRoLm1pbigxOSxhKzIpXVswXTtyZXR1cm5bdC8oYittKihfLXgpLzIrbSptKihfLTIqYit4KS8yKSxuKmRdfSwodC5nZW8ucm9iaW5zb249ZnVuY3Rpb24oKXtyZXR1cm4geShMKX0pLnJhdz1MLFAuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QvTWF0aC5jb3MoZSksZV19LCh0Lmdlby5zaW51c29pZGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHkoUCl9KS5yYXc9UCxJLmludmVydD1mdW5jdGlvbih0LGUpe2lmKCEodCp0KzQqZSplPmYqZitoKSl7dmFyIHI9dCxuPWUsaT0yNTtkb3t2YXIgYSxvPU1hdGguc2luKHIpLHM9TWF0aC5zaW4oci8yKSxsPU1hdGguY29zKHIvMiksYz1NYXRoLnNpbihuKSx1PU1hdGguY29zKG4pLHA9TWF0aC5zaW4oMipuKSxkPWMqYyxnPXUqdSxtPXMqcyx5PTEtZypsKmwseD15P3YodSpsKSpNYXRoLnNxcnQoYT0xL3kpOmE9MCxiPTIqeCp1KnMtdCxfPXgqYy1lLHc9YSooZyptK3gqdSpsKmQpLFQ9YSooLjUqbypwLTIqeCpjKnMpLGs9LjI1KmEqKHAqcy14KmMqZypvKSxNPWEqKGQqbCt4Km0qdSksQT1UKmstTSp3O2lmKCFBKWJyZWFrO3ZhciBTPShfKlQtYipNKS9BLEU9KGIqay1fKncpL0E7ci09UyxuLT1FfXdoaWxlKChNYXRoLmFicyhTKT5ofHxNYXRoLmFicyhFKT5oKSYmLS1pPjApO3JldHVybltyLG5dfX0sKHQuZ2VvLmFpdG9mZj1mdW5jdGlvbigpe3JldHVybiB5KEkpfSkucmF3PUksei5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ZSxpPTI1O2Rve3ZhciBhLG89TWF0aC5jb3Mobikscz1NYXRoLnNpbihuKSxsPU1hdGguc2luKDIqbiksYz1zKnMsdT1vKm8sZj1NYXRoLnNpbihyKSxkPU1hdGguY29zKHIvMiksZz1NYXRoLnNpbihyLzIpLG09ZypnLHk9MS11KmQqZCx4PXk/dihvKmQpKk1hdGguc3FydChhPTEveSk6YT0wLGI9LjUqKDIqeCpvKmcrci9wKS10LF89LjUqKHgqcytuKS1lLHc9LjUqYSoodSptK3gqbypkKmMpKy41L3AsVD1hKihmKmwvNC14KnMqZyksaz0uMTI1KmEqKGwqZy14KnMqdSpmKSxNPS41KmEqKGMqZCt4Km0qbykrLjUsQT1UKmstTSp3LFM9KF8qVC1iKk0pL0EsRT0oYiprLV8qdykvQTtyLT1TLG4tPUV9d2hpbGUoKE1hdGguYWJzKFMpPmh8fE1hdGguYWJzKEUpPmgpJiYtLWk+MCk7cmV0dXJuW3Isbl19LCh0Lmdlby53aW5rZWwzPWZ1bmN0aW9uKCl7cmV0dXJuIHkoeil9KS5yYXc9en19LHt9XSw4MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPU1hdGguUEkvMTgwLHM9MTgwL01hdGguUEksbD17Y3Vyc29yOiJwb2ludGVyIn0sYz17Y3Vyc29yOiJhdXRvIn07ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBuLmJlaGF2aW9yLnpvb20oKS50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSkuc2NhbGUoZS5zY2FsZSgpKX1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj10LmlkLG89dC5ncmFwaERpdixzPW8ubGF5b3V0LGw9c1tuXSxjPW8uX2Z1bGxMYXlvdXQsdT1jW25dLGg9e30sZj17fTtmdW5jdGlvbiBwKHQsZSl7aFtuKyIuIit0XT1pLm5lc3RlZFByb3BlcnR5KGwsdCkuZ2V0KCksYS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixzLGMuX3ByZUdVSSxoKTt2YXIgcj1pLm5lc3RlZFByb3BlcnR5KHUsdCk7ci5nZXQoKSE9PWUmJihyLnNldChlKSxpLm5lc3RlZFByb3BlcnR5KGwsdCkuc2V0KGUpLGZbbisiLiIrdF09ZSl9cihwKSxwKCJwcm9qZWN0aW9uLnNjYWxlIixlLnNjYWxlKCkvdC5maXRTY2FsZSkscCgiZml0Ym91bmRzIiwhMSksby5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGYpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj11KDAsZSk7ZnVuY3Rpb24gaShyKXt2YXIgbj1lLmludmVydCh0Lm1pZFB0KTtyKCJjZW50ZXIubG9uIixuWzBdKSxyKCJjZW50ZXIubGF0IixuWzFdKX1yZXR1cm4gci5vbigiem9vbXN0YXJ0IiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShsKX0pKS5vbigiem9vbSIsKGZ1bmN0aW9uKCl7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKS50cmFuc2xhdGUobi5ldmVudC50cmFuc2xhdGUpLHQucmVuZGVyKCk7dmFyIHI9ZS5pbnZlcnQodC5taWRQdCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHsiZ2VvLnByb2plY3Rpb24uc2NhbGUiOmUuc2NhbGUoKS90LmZpdFNjYWxlLCJnZW8uY2VudGVyLmxvbiI6clswXSwiZ2VvLmNlbnRlci5sYXQiOnJbMV19KX0pKS5vbigiem9vbWVuZCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksaCh0LGUsaSl9KSkscn1mdW5jdGlvbiBwKHQsZSl7dmFyIHIsaSxhLG8scyxmLHAsZCxnLG09dSgwLGUpO2Z1bmN0aW9uIHYodCl7cmV0dXJuIGUuaW52ZXJ0KHQpfWZ1bmN0aW9uIHkocil7dmFyIG49ZS5yb3RhdGUoKSxpPWUuaW52ZXJ0KHQubWlkUHQpO3IoInByb2plY3Rpb24ucm90YXRpb24ubG9uIiwtblswXSkscigiY2VudGVyLmxvbiIsaVswXSkscigiY2VudGVyLmxhdCIsaVsxXSl9cmV0dXJuIG0ub24oInpvb21zdGFydCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCkscj1uLm1vdXNlKHRoaXMpLGk9ZS5yb3RhdGUoKSxhPWUudHJhbnNsYXRlKCksbz1pLHM9dihyKX0pKS5vbigiem9vbSIsKGZ1bmN0aW9uKCl7aWYoZj1uLm1vdXNlKHRoaXMpLGZ1bmN0aW9uKHQpe3ZhciByPXYodCk7aWYoIXIpcmV0dXJuITA7dmFyIG49ZShyKTtyZXR1cm4gTWF0aC5hYnMoblswXS10WzBdKT4yfHxNYXRoLmFicyhuWzFdLXRbMV0pPjJ9KHIpKXJldHVybiBtLnNjYWxlKGUuc2NhbGUoKSksdm9pZCBtLnRyYW5zbGF0ZShlLnRyYW5zbGF0ZSgpKTtlLnNjYWxlKG4uZXZlbnQuc2NhbGUpLGUudHJhbnNsYXRlKFthWzBdLG4uZXZlbnQudHJhbnNsYXRlWzFdXSkscz92KGYpJiYoZD12KGYpLHA9W29bMF0rKGRbMF0tc1swXSksaVsxXSxpWzJdXSxlLnJvdGF0ZShwKSxvPXApOnM9dihyPWYpLGc9ITAsdC5yZW5kZXIoKTt2YXIgbD1lLnJvdGF0ZSgpLGM9ZS5pbnZlcnQodC5taWRQdCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHsiZ2VvLnByb2plY3Rpb24uc2NhbGUiOmUuc2NhbGUoKS90LmZpdFNjYWxlLCJnZW8uY2VudGVyLmxvbiI6Y1swXSwiZ2VvLmNlbnRlci5sYXQiOmNbMV0sImdlby5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6LWxbMF19KX0pKS5vbigiem9vbWVuZCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksZyYmaCh0LGUseSl9KSksbX1mdW5jdGlvbiBkKHQsZSl7dmFyIHIsaT17cjplLnJvdGF0ZSgpLGs6ZS5zY2FsZSgpfSxhPXUoMCxlKSxvPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj1hcmd1bWVudHMubGVuZ3RoLGk9W107Zm9yKDsrK2U8cjspaS5wdXNoKGFyZ3VtZW50c1tlXSk7dmFyIGE9bi5kaXNwYXRjaC5hcHBseShudWxsLGkpO3JldHVybiBhLm9mPWZ1bmN0aW9uKGUscil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvO3RyeXtvPWkuc291cmNlRXZlbnQ9bi5ldmVudCxpLnRhcmdldD10LG4uZXZlbnQ9aSxhW2kudHlwZV0uYXBwbHkoZSxyKX1maW5hbGx5e24uZXZlbnQ9b319fSxhfShhLCJ6b29tc3RhcnQiLCJ6b29tIiwiem9vbWVuZCIpLHM9MCxmPWEub247ZnVuY3Rpb24gcCh0KXtzKyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBkKHQpe3Qoe3R5cGU6Inpvb20ifSl9ZnVuY3Rpb24gYih0KXstLXN8fHQoe3R5cGU6Inpvb21lbmQifSl9ZnVuY3Rpb24gXyh0KXt2YXIgcj1lLnJvdGF0ZSgpO3QoInByb2plY3Rpb24ucm90YXRpb24ubG9uIiwtclswXSksdCgicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiLC1yWzFdKX1yZXR1cm4gYS5vbigiem9vbXN0YXJ0IiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShsKTt2YXIgdD1uLm1vdXNlKHRoaXMpLHM9ZS5yb3RhdGUoKSxjPXMsdT1lLnRyYW5zbGF0ZSgpLGg9bShzKTtyPWcoZSx0KSxmLmNhbGwoYSwiem9vbSIsKGZ1bmN0aW9uKCl7dmFyIGE9bi5tb3VzZSh0aGlzKTtpZihlLnNjYWxlKGkuaz1uLmV2ZW50LnNjYWxlKSxyKXtpZihnKGUsYSkpe2Uucm90YXRlKHMpLnRyYW5zbGF0ZSh1KTt2YXIgbD1nKGUsYSksZj15KHIsbCkscD1UKHYoaCxmKSksbT1pLnI9eChwLHIsYyk7aXNGaW5pdGUobVswXSkmJmlzRmluaXRlKG1bMV0pJiZpc0Zpbml0ZShtWzJdKXx8KG09YyksZS5yb3RhdGUobSksYz1tfX1lbHNlIHI9ZyhlLHQ9YSk7ZChvLm9mKHRoaXMsYXJndW1lbnRzKSl9KSkscChvLm9mKHRoaXMsYXJndW1lbnRzKSl9KSkub24oInpvb21lbmQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGYuY2FsbChhLCJ6b29tIixudWxsKSxiKG8ub2YodGhpcyxhcmd1bWVudHMpKSxoKHQsZSxfKX0pKS5vbigiem9vbS5yZWRyYXciLChmdW5jdGlvbigpe3QucmVuZGVyKCk7dmFyIHI9ZS5yb3RhdGUoKTt0LmdyYXBoRGl2LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIseyJnZW8ucHJvamVjdGlvbi5zY2FsZSI6ZS5zY2FsZSgpL3QuZml0U2NhbGUsImdlby5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6LXJbMF0sImdlby5wcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCI6LXJbMV19KX0pKSxuLnJlYmluZChhLG8sIm9uIil9ZnVuY3Rpb24gZyh0LGUpe3ZhciByPXQuaW52ZXJ0KGUpO3JldHVybiByJiZpc0Zpbml0ZShyWzBdKSYmaXNGaW5pdGUoclsxXSkmJmZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0qbyxyPXRbMV0qbyxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfShyKX1mdW5jdGlvbiBtKHQpe3ZhciBlPS41KnRbMF0qbyxyPS41KnRbMV0qbyxuPS41KnRbMl0qbyxpPU1hdGguc2luKGUpLGE9TWF0aC5jb3MoZSkscz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4obiksdT1NYXRoLmNvcyhuKTtyZXR1cm5bYSpsKnUraSpzKmMsaSpsKnUtYSpzKmMsYSpzKnUraSpsKmMsYSpsKmMtaSpzKnVdfWZ1bmN0aW9uIHYodCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sYT10WzNdLG89ZVswXSxzPWVbMV0sbD1lWzJdLGM9ZVszXTtyZXR1cm5bcipvLW4qcy1pKmwtYSpjLHIqcytuKm8raSpjLWEqbCxyKmwtbipjK2kqbythKnMscipjK24qbC1pKnMrYSpvXX1mdW5jdGlvbiB5KHQsZSl7aWYodCYmZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfSh0LGUpLG49TWF0aC5zcXJ0KGsocixyKSksaT0uNSpNYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSxrKHQsZSkpKSksYT1NYXRoLnNpbihpKS9uO3JldHVybiBuJiZbTWF0aC5jb3MoaSksclsyXSphLC1yWzFdKmEsclswXSphXX19ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dyhlLDIsdFswXSk7bj13KG4sMSx0WzFdKSxuPXcobiwwLHRbMl0tclsyXSk7dmFyIGksYSxvPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PW5bMF0saD1uWzFdLGY9blsyXSxwPU1hdGguYXRhbjIobCxvKSpzLGQ9TWF0aC5zcXJ0KG8qbytsKmwpO01hdGguYWJzKGgpPmQ/KGE9KGg+MD85MDotOTApLXAsaT0wKTooYT1NYXRoLmFzaW4oaC9kKSpzLXAsaT1NYXRoLnNxcnQoZCpkLWgqaCkpO3ZhciBnPTE4MC1hLTIqcCxtPShNYXRoLmF0YW4yKGYsdSktTWF0aC5hdGFuMihjLGkpKSpzLHY9KE1hdGguYXRhbjIoZix1KS1NYXRoLmF0YW4yKGMsLWkpKSpzO3JldHVybiBiKHJbMF0sclsxXSxhLG0pPD1iKHJbMF0sclsxXSxnLHYpP1thLG0sclsyXV06W2csdixyWzJdXX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPV8oci10KSxhPV8obi1lKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaSthKmEpfWZ1bmN0aW9uIF8odCl7cmV0dXJuKHQlMzYwKzU0MCklMzYwLTE4MH1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj1yKm8saT10LnNsaWNlKCksYT0wPT09ZT8xOjAscz0yPT09ZT8xOjIsbD1NYXRoLmNvcyhuKSxjPU1hdGguc2luKG4pO3JldHVybiBpW2FdPXRbYV0qbC10W3NdKmMsaVtzXT10W3NdKmwrdFthXSpjLGl9ZnVuY3Rpb24gVCh0KXtyZXR1cm5bTWF0aC5hdGFuMigyKih0WzBdKnRbMV0rdFsyXSp0WzNdKSwxLTIqKHRbMV0qdFsxXSt0WzJdKnRbMl0pKSpzLE1hdGguYXNpbihNYXRoLm1heCgtMSxNYXRoLm1pbigxLDIqKHRbMF0qdFsyXS10WzNdKnRbMV0pKSkpKnMsTWF0aC5hdGFuMigyKih0WzBdKnRbM10rdFsxXSp0WzJdKSwxLTIqKHRbMl0qdFsyXSt0WzNdKnRbM10pKSpzXX1mdW5jdGlvbiBrKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilyKz10W25dKmVbbl07cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcm9qZWN0aW9uO3JldHVybihlLl9pc1Njb3BlZD9mOmUuX2lzQ2xpcHBlZD9kOnApKHQscil9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyLGQzOjE2OX1dLDgzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuU1VCUExPVF9QQVRURVJOO3IuZ2V0U3VicGxvdENhbGNEYXRhPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLnN1YnBsb3RzUmVnaXN0cnlbZV07aWYoIWkpcmV0dXJuW107Zm9yKHZhciBhPWkuYXR0cixvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtsWzBdLnRyYWNlW2FdPT09ciYmby5wdXNoKGwpfXJldHVybiBvfSxyLmdldE1vZHVsZUNhbGNEYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT1bXSxhPVtdO2lmKCEocj0ic3RyaW5nIj09dHlwZW9mIGU/bi5nZXRNb2R1bGUoZSkucGxvdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmUucGxvdCkpcmV0dXJuW2ksdF07Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb10sbD1zWzBdLnRyYWNlOyEwPT09bC52aXNpYmxlJiYwIT09bC5fbGVuZ3RoJiYobC5fbW9kdWxlLnBsb3Q9PT1yP2kucHVzaChzKTphLnB1c2gocykpfXJldHVybltpLGFdfSxyLmdldFN1YnBsb3REYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighbi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO3ZhciBhLG8scyxsPW4uc3VicGxvdHNSZWdpc3RyeVtlXS5hdHRyLGM9W107aWYoImdsMmQiPT09ZSl7dmFyIHU9ci5tYXRjaChpKTtvPSJ4Iit1WzFdLHM9InkiK3VbMl19Zm9yKHZhciBoPTA7aDx0Lmxlbmd0aDtoKyspYT10W2hdLCJnbDJkIj09PWUmJm4udHJhY2VJcyhhLCJnbDJkIik/YVtsWzBdXT09PW8mJmFbbFsxXV09PT1zJiZjLnB1c2goYSk6YVtsXT09PXImJmMucHVzaChhKTtyZXR1cm4gY319LHsiLi4vcmVnaXN0cnkiOjg4MiwiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MDV9XSw4Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibW91c2UtY2hhbmdlIiksaT10KCJtb3VzZS13aGVlbCIpLGE9dCgibW91c2UtZXZlbnQtb2Zmc2V0Iiksbz10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikscz10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5lbGVtZW50PXQsdGhpcy5wbG90PWUsdGhpcy5tb3VzZUxpc3RlbmVyPW51bGwsdGhpcy53aGVlbExpc3RlbmVyPW51bGwsdGhpcy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdGhpcy5sYXN0UG9zPVswLDBdLHRoaXMuYm94RW5hYmxlZD0hMSx0aGlzLmJveEluaXRlZD0hMSx0aGlzLmJveFN0YXJ0PVswLDBdLHRoaXMuYm94RW5kPVswLDBdLHRoaXMuZHJhZ1N0YXJ0PVswLDBdfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lm1vdXNlQ29udGFpbmVyLHI9dC5nbHBsb3QsYz1uZXcgbChlLHIpO2Z1bmN0aW9uIHUoKXt0LnhheGlzLmF1dG9yYW5nZT0hMSx0LnlheGlzLmF1dG9yYW5nZT0hMX1mdW5jdGlvbiBoKGUsbixpKXt2YXIgYSxzLGw9dC5jYWxjRGF0YUJveCgpLGg9ci52aWV3Qm94LGY9Yy5sYXN0UG9zWzBdLHA9Yy5sYXN0UG9zWzFdLGQ9by5NSU5EUkFHKnIucGl4ZWxSYXRpbyxnPW8uTUlOWk9PTSpyLnBpeGVsUmF0aW87ZnVuY3Rpb24gbShlLHIsbil7dmFyIGk9TWF0aC5taW4ocixuKSxhPU1hdGgubWF4KHIsbik7aSE9PWE/KGxbZV09aSxsW2UrMl09YSxjLmRhdGFCb3g9bCx0LnNldFJhbmdlcyhsKSk6KHQuc2VsZWN0Qm94LnNlbGVjdEJveD1bMCwwLDEsMV0sdC5nbHBsb3Quc2V0RGlydHkoKSl9c3dpdGNoKG4qPXIucGl4ZWxSYXRpbyxpKj1yLnBpeGVsUmF0aW8saT1oWzNdLWhbMV0taSx0LmZ1bGxMYXlvdXQuZHJhZ21vZGUpe2Nhc2Uiem9vbSI6aWYoZSl7dmFyIHY9bi8oaFsyXS1oWzBdKSoobFsyXS1sWzBdKStsWzBdLHk9aS8oaFszXS1oWzFdKSoobFszXS1sWzFdKStsWzFdO2MuYm94SW5pdGVkfHwoYy5ib3hTdGFydFswXT12LGMuYm94U3RhcnRbMV09eSxjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLGMuYm94RW5kWzBdPXYsYy5ib3hFbmRbMV09eSxjLmJveEluaXRlZD0hMCxjLmJveEVuYWJsZWR8fGMuYm94U3RhcnRbMF09PT1jLmJveEVuZFswXSYmYy5ib3hTdGFydFsxXT09PWMuYm94RW5kWzFdfHwoYy5ib3hFbmFibGVkPSEwKTt2YXIgeD1NYXRoLmFicyhjLmRyYWdTdGFydFswXS1uKTxnLGI9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMV0taSk8ZztpZighZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMscj10LnhheGlzLl9pZCxuPXQueWF4aXMuX2lkLGk9MDtpPGUubGVuZ3RoO2krKylpZigtMSE9PWVbaV1bcl0pe2lmKC0xIT09ZVtpXVtuXSlyZXR1cm4hMDticmVha31yZXR1cm4hMX0oKXx8eCYmYil4JiYoYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSksYiYmKGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0pO2Vsc2V7YT1jLmJveEVuZFswXS1jLmJveFN0YXJ0WzBdLHM9Yy5ib3hFbmRbMV0tYy5ib3hTdGFydFsxXTt2YXIgXz0obFszXS1sWzFdKS8obFsyXS1sWzBdKTtNYXRoLmFicyhhKl8pPk1hdGguYWJzKHMpPyhjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdK01hdGguYWJzKGEpKl8qKHM+PTA/MTotMSksYy5ib3hFbmRbMV08bFsxXT8oYy5ib3hFbmRbMV09bFsxXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzFdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKTpjLmJveEVuZFsxXT5sWzNdJiYoYy5ib3hFbmRbMV09bFszXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzNdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKSk6KGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0rTWF0aC5hYnMocykvXyooYT49MD8xOi0xKSxjLmJveEVuZFswXTxsWzBdPyhjLmJveEVuZFswXT1sWzBdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMF0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpOmMuYm94RW5kWzBdPmxbMl0mJihjLmJveEVuZFswXT1sWzJdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMl0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpKX19ZWxzZSBjLmJveEVuYWJsZWQ/KGE9Yy5ib3hTdGFydFswXSE9PWMuYm94RW5kWzBdLHM9Yy5ib3hTdGFydFsxXSE9PWMuYm94RW5kWzFdLGF8fHM/KGEmJihtKDAsYy5ib3hTdGFydFswXSxjLmJveEVuZFswXSksdC54YXhpcy5hdXRvcmFuZ2U9ITEpLHMmJihtKDEsYy5ib3hTdGFydFsxXSxjLmJveEVuZFsxXSksdC55YXhpcy5hdXRvcmFuZ2U9ITEpLHQucmVsYXlvdXRDYWxsYmFjaygpKTp0LmdscGxvdC5zZXREaXJ0eSgpLGMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSk6Yy5ib3hJbml0ZWQmJihjLmJveEluaXRlZD0hMSk7YnJlYWs7Y2FzZSJwYW4iOmMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSxlPyhjLnBhbm5pbmd8fChjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLE1hdGguYWJzKGMuZHJhZ1N0YXJ0WzBdLW4pPGQmJihuPWMuZHJhZ1N0YXJ0WzBdKSxNYXRoLmFicyhjLmRyYWdTdGFydFsxXS1pKTxkJiYoaT1jLmRyYWdTdGFydFsxXSksYT0oZi1uKSoobFsyXS1sWzBdKS8oci52aWV3Qm94WzJdLXIudmlld0JveFswXSkscz0ocC1pKSoobFszXS1sWzFdKS8oci52aWV3Qm94WzNdLXIudmlld0JveFsxXSksbFswXSs9YSxsWzJdKz1hLGxbMV0rPXMsbFszXSs9cyx0LnNldFJhbmdlcyhsKSxjLnBhbm5pbmc9ITAsYy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSk6Yy5wYW5uaW5nJiYoYy5wYW5uaW5nPSExLHQucmVsYXlvdXRDYWxsYmFjaygpKX1jLmxhc3RQb3NbMF09bixjLmxhc3RQb3NbMV09aX1yZXR1cm4gYy5tb3VzZUxpc3RlbmVyPW4oZSxoKSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLChmdW5jdGlvbih0KXt2YXIgcj1hKHQuY2hhbmdlZFRvdWNoZXNbMF0sZSk7aCgwLHJbMF0sclsxXSksaCgxLHJbMF0sclsxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSksISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPWEodC5jaGFuZ2VkVG91Y2hlc1swXSxlKTtoKDEsclswXSxyWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9KSwhIXMmJntwYXNzaXZlOiExfSksZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsKGZ1bmN0aW9uKHQpe2goMCxjLmxhc3RQb3NbMF0sYy5sYXN0UG9zWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9KSwhIXMmJntwYXNzaXZlOiExfSksYy53aGVlbExpc3RlbmVyPWkoZSwoZnVuY3Rpb24oZSxuKXtpZighdC5zY3JvbGxab29tKXJldHVybiExO3ZhciBpPXQuY2FsY0RhdGFCb3goKSxhPXIudmlld0JveCxvPWMubGFzdFBvc1swXSxzPWMubGFzdFBvc1sxXSxsPU1hdGguZXhwKDUqbi8oYVszXS1hWzFdKSksaD1vLyhhWzJdLWFbMF0pKihpWzJdLWlbMF0pK2lbMF0sZj1zLyhhWzNdLWFbMV0pKihpWzNdLWlbMV0pK2lbMV07cmV0dXJuIGlbMF09KGlbMF0taCkqbCtoLGlbMl09KGlbMl0taCkqbCtoLGlbMV09KGlbMV0tZikqbCtmLGlbM109KGlbM10tZikqbCtmLHQuc2V0UmFuZ2VzKGkpLGMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHUoKSx0LmNhbWVyYUNoYW5nZWQoKSx0LmhhbmRsZUFubm90YXRpb25zKCksdC5yZWxheW91dENhbGxiYWNrKCksITB9KSwhMCksY319LHsiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6ODA1LCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQxNSwibW91c2UtY2hhbmdlIjo0NTcsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDU4LCJtb3VzZS13aGVlbCI6NDYwfV0sODM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iik7ZnVuY3Rpb24gYSh0KXt0aGlzLnNjZW5lPXQsdGhpcy5nbD10LmdsLHRoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sdGhpcy5zY3JlZW5Cb3g9WzAsMCwxLDFdLHRoaXMudmlld0JveD1bMCwwLDEsMV0sdGhpcy5kYXRhQm94PVstMSwtMSwxLDFdLHRoaXMuYm9yZGVyTGluZUVuYWJsZT1bITEsITEsITEsITFdLHRoaXMuYm9yZGVyTGluZVdpZHRoPVsxLDEsMSwxXSx0aGlzLmJvcmRlckxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tzPVtbXSxbXV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy50aWNrUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy50aWNrQW5nbGU9WzAsMCwwLDBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxzPVsieCIsInkiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbFNpemU9WzEyLDEyXSx0aGlzLmxhYmVsRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGU9IiIsdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQ2VudGVyPVswLDAsMCwwXSx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMudGl0bGVGb250PSJzYW5zLXNlcmlmIix0aGlzLnRpdGxlU2l6ZT0xOCx0aGlzLmdyaWRMaW5lRW5hYmxlPVshMCwhMF0sdGhpcy5ncmlkTGluZUNvbG9yPVtbMCwwLDAsLjVdLFswLDAsMCwuNV1dLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVsxLDFdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9WzAsMCwwLDBdLHRoaXMuc3RhdGljPXRoaXMuc2NlbmUuc3RhdGljUGxvdH12YXIgbz1hLnByb3RvdHlwZSxzPVsieGF4aXMiLCJ5YXhpcyJdO28ubWVyZ2U9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEsbyxsLGMsdSxoLGYscDtmb3IodGhpcy50aXRsZUVuYWJsZT0hMSx0aGlzLmJhY2tncm91bmRDb2xvcj1pKHQucGxvdF9iZ2NvbG9yKSxmPTA7ZjwyOysrZil7dmFyIGQ9KGU9c1tmXSkuY2hhckF0KDApO2ZvcihuPShyPXRbdGhpcy5zY2VuZVtlXS5fbmFtZV0pLnRpdGxlLnRleHQ9PT10aGlzLnNjZW5lLmZ1bGxMYXlvdXQuX2RmbHRUaXRsZVtkXT8iIjpyLnRpdGxlLnRleHQscD0wO3A8PTI7cCs9Mil0aGlzLmxhYmVsRW5hYmxlW2YrcF09ITEsdGhpcy5sYWJlbHNbZitwXT1uLHRoaXMubGFiZWxDb2xvcltmK3BdPWkoci50aXRsZS5mb250LmNvbG9yKSx0aGlzLmxhYmVsRm9udFtmK3BdPXIudGl0bGUuZm9udC5mYW1pbHksdGhpcy5sYWJlbFNpemVbZitwXT1yLnRpdGxlLmZvbnQuc2l6ZSx0aGlzLmxhYmVsUGFkW2YrcF09dGhpcy5nZXRMYWJlbFBhZChlLHIpLHRoaXMudGlja0VuYWJsZVtmK3BdPSExLHRoaXMudGlja0NvbG9yW2YrcF09aSgoci50aWNrZm9udHx8e30pLmNvbG9yKSx0aGlzLnRpY2tBbmdsZVtmK3BdPSJhdXRvIj09PXIudGlja2FuZ2xlPzA6TWF0aC5QSSotci50aWNrYW5nbGUvMTgwLHRoaXMudGlja1BhZFtmK3BdPXRoaXMuZ2V0VGlja1BhZChyKSx0aGlzLnRpY2tNYXJrTGVuZ3RoW2YrcF09MCx0aGlzLnRpY2tNYXJrV2lkdGhbZitwXT1yLnRpY2t3aWR0aHx8MCx0aGlzLnRpY2tNYXJrQ29sb3JbZitwXT1pKHIudGlja2NvbG9yKSx0aGlzLmJvcmRlckxpbmVFbmFibGVbZitwXT0hMSx0aGlzLmJvcmRlckxpbmVDb2xvcltmK3BdPWkoci5saW5lY29sb3IpLHRoaXMuYm9yZGVyTGluZVdpZHRoW2YrcF09ci5saW5ld2lkdGh8fDA7Yz10aGlzLmhhc1NoYXJlZEF4aXMociksbz10aGlzLmhhc0F4aXNJbkRmbHRQb3MoZSxyKSYmIWMsbD10aGlzLmhhc0F4aXNJbkFsdHJQb3MoZSxyKSYmIWMsYT1yLm1pcnJvcnx8ITEsdT1jPy0xIT09U3RyaW5nKGEpLmluZGV4T2YoImFsbCIpOiEhYSxoPWM/ImFsbHRpY2tzIj09PWE6LTEhPT1TdHJpbmcoYSkuaW5kZXhPZigidGlja3MiKSxvP3RoaXMubGFiZWxFbmFibGVbZl09ITA6bCYmKHRoaXMubGFiZWxFbmFibGVbZisyXT0hMCksbz90aGlzLnRpY2tFbmFibGVbZl09ci5zaG93dGlja2xhYmVsczpsJiYodGhpcy50aWNrRW5hYmxlW2YrMl09ci5zaG93dGlja2xhYmVscyksKG98fHUpJiYodGhpcy5ib3JkZXJMaW5lRW5hYmxlW2ZdPXIuc2hvd2xpbmUpLChsfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtmKzJdPXIuc2hvd2xpbmUpLChvfHxoKSYmKHRoaXMudGlja01hcmtMZW5ndGhbZl09dGhpcy5nZXRUaWNrTWFya0xlbmd0aChyKSksKGx8fGgpJiYodGhpcy50aWNrTWFya0xlbmd0aFtmKzJdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLHRoaXMuZ3JpZExpbmVFbmFibGVbZl09ci5zaG93Z3JpZCx0aGlzLmdyaWRMaW5lQ29sb3JbZl09aShyLmdyaWRjb2xvciksdGhpcy5ncmlkTGluZVdpZHRoW2ZdPXIuZ3JpZHdpZHRoLHRoaXMuemVyb0xpbmVFbmFibGVbZl09ci56ZXJvbGluZSx0aGlzLnplcm9MaW5lQ29sb3JbZl09aShyLnplcm9saW5lY29sb3IpLHRoaXMuemVyb0xpbmVXaWR0aFtmXT1yLnplcm9saW5ld2lkdGh9fSxvLmhhc1NoYXJlZEF4aXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbExheW91dC5fc3VicGxvdHMuZ2wyZDtyZXR1cm4gMCE9PW4uZmluZFN1YnBsb3RzV2l0aEF4aXMocix0KS5pbmRleE9mKGUuaWQpfSxvLmhhc0F4aXNJbkRmbHRQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuInhheGlzIj09PXQ/ImJvdHRvbSI9PT1yOiJ5YXhpcyI9PT10PyJsZWZ0Ij09PXI6dm9pZCAwfSxvLmhhc0F4aXNJbkFsdHJQb3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNpZGU7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1yOiJ5YXhpcyI9PT10PyJyaWdodCI9PT1yOnZvaWQgMH0sby5nZXRMYWJlbFBhZD1mdW5jdGlvbih0LGUpe3ZhciByPWUudGl0bGUuZm9udC5zaXplLG49ZS5zaG93dGlja2xhYmVscztyZXR1cm4ieGF4aXMiPT09dD8idG9wIj09PWUuc2lkZT9yKigxLjUrKG4/MTowKSktMTA6ciooMS41KyhuPy41OjApKS0xMDoieWF4aXMiPT09dD8icmlnaHQiPT09ZS5zaWRlPzEwK3IqKDEuNSsobj8xOi41KSk6MTArciooMS41KyhuPy41OjApKTp2b2lkIDB9LG8uZ2V0VGlja1BhZD1mdW5jdGlvbih0KXtyZXR1cm4ib3V0c2lkZSI9PT10LnRpY2tzPzEwK3QudGlja2xlbjoxNX0sby5nZXRUaWNrTWFya0xlbmd0aD1mdW5jdGlvbih0KXtpZighdC50aWNrcylyZXR1cm4gMDt2YXIgZT10LnRpY2tsZW47cmV0dXJuImluc2lkZSI9PT10LnRpY2tzPy1lOmV9LGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEodCl9fSx7Ii4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc3MywiLi4vY2FydGVzaWFuL2F4ZXMiOjc5OX1dLDgzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuL3NjZW5lMmQiKSxhPXQoIi4uL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLGw9dCgiLi4vY2FydGVzaWFuIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhO3IubmFtZT0iZ2wyZCIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9cy5pZFJlZ2V4LHIuYXR0clJlZ2V4PXMuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuLi9jYXJ0ZXNpYW4vYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2UuX2hhcygiY2FydGVzaWFuIil8fGwuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpfSxyLmxheW91dEF0dHJPdmVycmlkZXM9bihsLmxheW91dEF0dHJpYnV0ZXMsInBsb3QiLCJmcm9tLXJvb3QiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe3Bsb3RfYmdjb2xvcjphLnBsb3RfYmdjb2xvcixob3ZlcmxhYmVsOmMuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsMmQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9ZS5fcGxvdHNbb10sbD11KHIsImdsMmQiLG8pLGM9cy5fc2NlbmUyZDt2b2lkIDA9PT1jJiYoYz1uZXcgaSh7aWQ6byxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb30sZSkscy5fc2NlbmUyZD1jKSxjLnBsb3QobCx0LmNhbGNkYXRhLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMuZ2wyZHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bi5fcGxvdHNbb107aWYocy5fc2NlbmUyZCl7dmFyIGM9dSh0LCJnbDJkIixvKTswPT09Yy5sZW5ndGgmJihzLl9zY2VuZTJkLmRlc3Ryb3koKSxkZWxldGUgbi5fcGxvdHNbb10pfX1sLmNsZWFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3QuX2NvbnRleHQuc3RhdGljUGxvdHx8bC5kcmF3RnJhbWV3b3JrKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wyZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWUuX3Bsb3RzW3Jbbl1dLl9zY2VuZTJkLGE9aS50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOm8uc3ZnLCJ4bGluazpocmVmIjphLHg6MCx5OjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxpLmRlc3Ryb3koKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDJkLG49MDtuPHIubGVuZ3RoO24rKyl7ZS5fcGxvdHNbcltuXV0uX3NjZW5lMmQudXBkYXRlRngoZS5kcmFnbW9kZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo2NTYsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MjYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi4vY2FydGVzaWFuIjo4MTIsIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzIjo3OTcsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjgwNSwiLi4vZ2V0X2RhdGEiOjgzNiwiLi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg1MywiLi9zY2VuZTJkIjo4NDB9XSw4NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGw9dCgiZ2wtcGxvdDJkIiksYz10KCJnbC1zcGlrZXMyZCIpLHU9dCgiZ2wtc2VsZWN0LWJveCIpLGg9dCgid2ViZ2wtY29udGV4dCIpLGY9dCgiLi9jb252ZXJ0IikscD10KCIuL2NhbWVyYSIpLGQ9dCgiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIiksZz10KCIuLi9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKSxtPWcuZW5mb3JjZSx2PWcuY2xlYW4seT10KCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZG9BdXRvUmFuZ2UseD10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKSxiPXguZHJhd01vZGUsXz14LnNlbGVjdE1vZGUsdz1bInhheGlzIiwieWF4aXMiXSxUPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKS5TVUJQTE9UX1BBVFRFUk47ZnVuY3Rpb24gayh0LGUpe3RoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLnBpeGVsUmF0aW89dC5wbG90R2xQaXhlbFJhdGlvfHx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmlkPXQuaWQsdGhpcy5zdGF0aWNQbG90PSEhdC5zdGF0aWNQbG90LHRoaXMuc2Nyb2xsWm9vbT10aGlzLmdyYXBoRGl2Ll9jb250ZXh0Ll9zY3JvbGxab29tLmNhcnRlc2lhbix0aGlzLmZ1bGxEYXRhPW51bGwsdGhpcy51cGRhdGVSZWZzKGUpLHRoaXMubWFrZUZyYW1ld29yaygpLHRoaXMuc3RvcHBlZHx8KHRoaXMuZ2xwbG90T3B0aW9ucz1mKHRoaXMpLHRoaXMuZ2xwbG90T3B0aW9ucy5tZXJnZShlKSx0aGlzLmdscGxvdD1sKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5jYW1lcmE9cCh0aGlzKSx0aGlzLnRyYWNlcz17fSx0aGlzLnNwaWtlcz1jKHRoaXMuZ2xwbG90KSx0aGlzLnNlbGVjdEJveD11KHRoaXMuZ2xwbG90LHtpbm5lckZpbGw6ITEsb3V0ZXJGaWxsOiEwfSksdGhpcy5sYXN0QnV0dG9uU3RhdGU9MCx0aGlzLnBpY2tSZXN1bHQ9bnVsbCx0aGlzLmlzTW91c2VPdmVyPSEwLHRoaXMuc3RvcHBlZD0hMSx0aGlzLnJlZHJhdz10aGlzLmRyYXcuYmluZCh0aGlzKSx0aGlzLnJlZHJhdygpKX1lLmV4cG9ydHM9azt2YXIgTT1rLnByb3RvdHlwZTtNLm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXRpY1Bsb3Qpe2lmKCEoaXx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksaT1oKHtjYW52YXM6bixwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlciIpO3RoaXMuY2FudmFzPW4sdGhpcy5nbD1pfWVsc2V7dmFyIHQ9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLmdsLWNhbnZhcy1mb2N1cyIpLGU9aCh7Y2FudmFzOnQscHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwLHByZW11bHRpcGxpZWRBbHBoYTohMH0pO2lmKCFlKXJldHVybiBkKHRoaXMpLHZvaWQodGhpcy5zdG9wcGVkPSEwKTt0aGlzLmNhbnZhcz10LHRoaXMuZ2w9ZX12YXIgcj10aGlzLmNhbnZhcztyLnN0eWxlLndpZHRoPSIxMDAlIixyLnN0eWxlLmhlaWdodD0iMTAwJSIsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUudG9wPSIwcHgiLHIuc3R5bGUubGVmdD0iMHB4IixyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIix0aGlzLnVwZGF0ZVNpemUocik7dmFyIGE9dGhpcy5zdmdDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO2Euc3R5bGUucG9zaXRpb249ImFic29sdXRlIixhLnN0eWxlLnRvcD1hLnN0eWxlLmxlZnQ9IjBweCIsYS5zdHlsZS53aWR0aD1hLnN0eWxlLmhlaWdodD0iMTAwJSIsYS5zdHlsZVsiei1pbmRleCJdPTIwLGEuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiO3ZhciBvPXRoaXMubW91c2VDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7by5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLG8uc3R5bGVbInBvaW50ZXItZXZlbnRzIl09ImF1dG8iLHRoaXMucGlja0NhbnZhcz10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuZ2wtY2FudmFzLXBpY2siKTt2YXIgcz10aGlzLmNvbnRhaW5lcjtzLmFwcGVuZENoaWxkKGEpLHMuYXBwZW5kQ2hpbGQobyk7dmFyIGw9dGhpcztvLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtsLmlzTW91c2VPdmVyPSExLGwudW5ob3ZlcigpfSkpLG8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtsLmlzTW91c2VPdmVyPSEwfSkpfSxNLnRvSW1hZ2U9ZnVuY3Rpb24odCl7dHx8KHQ9InBuZyIpLHRoaXMuc3RvcHBlZD0hMCx0aGlzLnN0YXRpY1Bsb3QmJnRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKG4pLHRoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIGU9dGhpcy5nbHBsb3QuZ2wscj1lLmRyYXdpbmdCdWZmZXJXaWR0aCxpPWUuZHJhd2luZ0J1ZmZlckhlaWdodDtlLmNsZWFyQ29sb3IoMSwxLDEsMCksZS5jbGVhcihlLkNPTE9SX0JVRkZFUl9CSVR8ZS5ERVBUSF9CVUZGRVJfQklUKSx0aGlzLmdscGxvdC5zZXREaXJ0eSgpLHRoaXMuZ2xwbG90LmRyYXcoKSxlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpO3ZhciBhPW5ldyBVaW50OEFycmF5KHIqaSo0KTtlLnJlYWRQaXhlbHMoMCwwLHIsaSxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLGEpO2Zvcih2YXIgbz0wLHM9aS0xO288czsrK28sLS1zKWZvcih2YXIgbD0wO2w8cjsrK2wpZm9yKHZhciBjPTA7Yzw0OysrYyl7dmFyIHU9YVs0KihyKm8rbCkrY107YVs0KihyKm8rbCkrY109YVs0KihyKnMrbCkrY10sYVs0KihyKnMrbCkrY109dX12YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtoLndpZHRoPXIsaC5oZWlnaHQ9aTt2YXIgZixwPWguZ2V0Q29udGV4dCgiMmQiKSxkPXAuY3JlYXRlSW1hZ2VEYXRhKHIsaSk7c3dpdGNoKGQuZGF0YS5zZXQoYSkscC5wdXRJbWFnZURhdGEoZCwwLDApLHQpe2Nhc2UianBlZyI6Zj1oLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpO2JyZWFrO2Nhc2Uid2VicCI6Zj1oLnRvRGF0YVVSTCgiaW1hZ2Uvd2VicCIpO2JyZWFrO2RlZmF1bHQ6Zj1oLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9cmV0dXJuIHRoaXMuc3RhdGljUGxvdCYmdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQobiksZn0sTS51cGRhdGVTaXplPWZ1bmN0aW9uKHQpe3R8fCh0PXRoaXMuY2FudmFzKTt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLmZ1bGxMYXlvdXQsbj1yLndpZHRoLGk9ci5oZWlnaHQsYT0wfE1hdGguY2VpbChlKm4pLG89MHxNYXRoLmNlaWwoZSppKTtyZXR1cm4gdC53aWR0aD09PWEmJnQuaGVpZ2h0PT09b3x8KHQud2lkdGg9YSx0LmhlaWdodD1vKSx0fSxNLmNvbXB1dGVUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLnhheGlzLnNldFNjYWxlKCksdGhpcy55YXhpcy5zZXRTY2FsZSgpO2Zvcih2YXIgdD1bby5jYWxjVGlja3ModGhpcy54YXhpcyksby5jYWxjVGlja3ModGhpcy55YXhpcyldLGU9MDtlPDI7KytlKWZvcih2YXIgcj0wO3I8dFtlXS5sZW5ndGg7KytyKXRbZV1bcl0udGV4dD10W2VdW3JdLnRleHQrIiI7cmV0dXJuIHR9LE0udXBkYXRlUmVmcz1mdW5jdGlvbih0KXt0aGlzLmZ1bGxMYXlvdXQ9dDt2YXIgZT10aGlzLmlkLm1hdGNoKFQpLHI9InhheGlzIitlWzFdLG49InlheGlzIitlWzJdO3RoaXMueGF4aXM9dGhpcy5mdWxsTGF5b3V0W3JdLHRoaXMueWF4aXM9dGhpcy5mdWxsTGF5b3V0W25dfSxNLnJlbGF5b3V0Q2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy54YXhpcyxyPXRoaXMueWF4aXMsbj10LmxheW91dCxpPXt9LG89aVtlLl9uYW1lKyIucmFuZ2UiXT1lLnJhbmdlLnNsaWNlKCkscz1pW3IuX25hbWUrIi5yYW5nZSJdPXIucmFuZ2Uuc2xpY2UoKTtpW2UuX25hbWUrIi5hdXRvcmFuZ2UiXT1lLmF1dG9yYW5nZSxpW3IuX25hbWUrIi5hdXRvcmFuZ2UiXT1yLmF1dG9yYW5nZSxhLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLHQubGF5b3V0LHQuX2Z1bGxMYXlvdXQuX3ByZUdVSSxpKTt2YXIgbD1uW2UuX25hbWVdO2wucmFuZ2U9byxsLmF1dG9yYW5nZT1lLmF1dG9yYW5nZTt2YXIgYz1uW3IuX25hbWVdO2MucmFuZ2U9cyxjLmF1dG9yYW5nZT1yLmF1dG9yYW5nZSxpLmxhc3RJbnB1dFRpbWU9dGhpcy5jYW1lcmEubGFzdElucHV0VGltZSx0LmVtaXQoInBsb3RseV9yZWxheW91dCIsaSl9LE0uY2FtZXJhQ2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FtZXJhO3RoaXMuZ2xwbG90LnNldERhdGFCb3godGhpcy5jYWxjRGF0YUJveCgpKTt2YXIgZT10aGlzLmNvbXB1dGVUaWNrTWFya3MoKTsoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDI7KytyKXt2YXIgbj10W3JdLGk9ZVtyXTtpZihuLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7KythKWlmKG5bYV0ueCE9PWlbYV0ueClyZXR1cm4hMH1yZXR1cm4hMX0pKGUsdGhpcy5nbHBsb3RPcHRpb25zLnRpY2tzKSYmKHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcz1lLHRoaXMuZ2xwbG90T3B0aW9ucy5kYXRhQm94PXQuZGF0YUJveCx0aGlzLmdscGxvdC51cGRhdGUodGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmhhbmRsZUFubm90YXRpb25zKCkpfSxNLmhhbmRsZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZ3JhcGhEaXYsZT10aGlzLmZ1bGxMYXlvdXQuYW5ub3RhdGlvbnMscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24ueHJlZj09PXRoaXMueGF4aXMuX2lkJiZuLnlyZWY9PT10aGlzLnlheGlzLl9pZCYmYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhd09uZSIpKHQscil9fSxNLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLmdscGxvdCl7dmFyIHQ9dGhpcy50cmFjZXM7dCYmT2JqZWN0LmtleXModCkubWFwKChmdW5jdGlvbihlKXt0W2VdLmRpc3Bvc2UoKSxkZWxldGUgdFtlXX0pKSx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5zdmdDb250YWluZXIpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMubW91c2VDb250YWluZXIpLHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLmdscGxvdD1udWxsLHRoaXMuc3RvcHBlZD0hMCx0aGlzLmNhbWVyYS5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsdGhpcy5tb3VzZUNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5jYW1lcmEud2hlZWxMaXN0ZW5lciksdGhpcy5jYW1lcmE9bnVsbH19LE0ucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbHBsb3Q7dGhpcy51cGRhdGVSZWZzKHIpLHRoaXMueGF4aXMuY2xlYXJDYWxjKCksdGhpcy55YXhpcy5jbGVhckNhbGMoKSx0aGlzLnVwZGF0ZVRyYWNlcyh0LGUpLHRoaXMudXBkYXRlRngoci5kcmFnbW9kZSk7dmFyIGk9ci53aWR0aCxhPXIuaGVpZ2h0O3RoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIG89dGhpcy5nbHBsb3RPcHRpb25zO28ubWVyZ2Uociksby5zY3JlZW5Cb3g9WzAsMCxpLGFdO3ZhciBzPXtfZnVsbExheW91dDp7X2F4aXNDb25zdHJhaW50R3JvdXBzOnRoaXMuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLHhheGlzOnRoaXMueGF4aXMseWF4aXM6dGhpcy55YXhpc319O3Yocyx0aGlzLnhheGlzKSx2KHMsdGhpcy55YXhpcyk7dmFyIGwsYyx1PXIuX3NpemUsaD10aGlzLnhheGlzLmRvbWFpbixmPXRoaXMueWF4aXMuZG9tYWluO2ZvcihvLnZpZXdCb3g9W3UubCtoWzBdKnUudyx1LmIrZlswXSp1LmgsaS11LnItKDEtaFsxXSkqdS53LGEtdS50LSgxLWZbMV0pKnUuaF0sdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS53aWR0aD11LncqKGhbMV0taFswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmhlaWdodD11LmgqKGZbMV0tZlswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLmhlaWdodD11LmgqKGZbMV0tZlswXSksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5sZWZ0PXUubCtoWzBdKnUudysicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUudG9wPXUudCsoMS1mWzFdKSp1LmgrInB4IixjPTA7YzwyOysrYykobD10aGlzW3dbY11dKS5fbGVuZ3RoPW8udmlld0JveFtjKzJdLW8udmlld0JveFtjXSx5KHRoaXMuZ3JhcGhEaXYsbCksbC5zZXRTY2FsZSgpO20ocyksby50aWNrcz10aGlzLmNvbXB1dGVUaWNrTWFya3MoKSxvLmRhdGFCb3g9dGhpcy5jYWxjRGF0YUJveCgpLG8ubWVyZ2Uociksbi51cGRhdGUobyksdGhpcy5nbHBsb3QuZHJhdygpfSxNLmNhbGNEYXRhQm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54YXhpcyxlPXRoaXMueWF4aXMscj10LnJhbmdlLG49ZS5yYW5nZSxpPXQucjJsLGE9ZS5yMmw7cmV0dXJuW2koclswXSksYShuWzBdKSxpKHJbMV0pLGEoblsxXSldfSxNLnNldFJhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnhheGlzLHI9dGhpcy55YXhpcyxuPWUubDJyLGk9ci5sMnI7ZS5yYW5nZT1bbih0WzBdKSxuKHRbMl0pXSxyLnJhbmdlPVtpKHRbMV0pLGkodFszXSldfSxNLnVwZGF0ZVRyYWNlcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0aGlzLmZ1bGxEYXRhPXQ7dDpmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgbz1hW3JdLHM9dGhpcy50cmFjZXNbb107Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZigoaT10W25dKS51aWQ9PT1vJiZpLnR5cGU9PT1zLnR5cGUpY29udGludWUgdDtzLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbb119Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aT10W3JdO3ZhciBsPWVbcl0sYz10aGlzLnRyYWNlc1tpLnVpZF07Yz9jLnVwZGF0ZShpLGwpOihjPWkuX21vZHVsZS5wbG90KHRoaXMsaSxsKSx0aGlzLnRyYWNlc1tpLnVpZF09Yyl9dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmFjZS5pbmRleC1lLl90cmFjZS5pbmRleH0pKX0sTS51cGRhdGVGeD1mdW5jdGlvbih0KXtfKHQpfHxiKHQpPyh0aGlzLnBpY2tDYW52YXMuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiKToodGhpcy5waWNrQ2FudmFzLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIiksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5jdXJzb3I9InBhbiI9PT10PyJtb3ZlIjoiem9vbSI9PT10PyJjcm9zc2hhaXIiOm51bGx9LE0uZW1pdFBvaW50QWN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC50cmFjZS51aWQsaT10LnBvaW50SW5kZXgsYT0wO2E8dGhpcy5mdWxsRGF0YS5sZW5ndGg7YSsrKXRoaXMuZnVsbERhdGFbYV0udWlkPT09biYmKHI9dGhpcy5mdWxsRGF0YVthXSk7dmFyIG89e3g6dC50cmFjZUNvb3JkWzBdLHk6dC50cmFjZUNvb3JkWzFdLGN1cnZlTnVtYmVyOnIuaW5kZXgscG9pbnROdW1iZXI6aSxkYXRhOnIuX2lucHV0LGZ1bGxEYXRhOnRoaXMuZnVsbERhdGEseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfTtzLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShvLHIsaSksdGhpcy5ncmFwaERpdi5lbWl0KGUse3BvaW50czpbb119KX0sTS5kcmF3PWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RvcHBlZCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVkcmF3KTt2YXIgdD10aGlzLmdscGxvdCxlPXRoaXMuY2FtZXJhLHI9ZS5tb3VzZUxpc3RlbmVyLG49MT09PXRoaXMubGFzdEJ1dHRvblN0YXRlJiYwPT09ci5idXR0b25zLGk9dGhpcy5mdWxsTGF5b3V0O3RoaXMubGFzdEJ1dHRvblN0YXRlPXIuYnV0dG9ucyx0aGlzLmNhbWVyYUNoYW5nZWQoKTt2YXIgYSxvPXIueCp0LnBpeGVsUmF0aW8sbD10aGlzLmNhbnZhcy5oZWlnaHQtdC5waXhlbFJhdGlvKnIueTtpZihlLmJveEVuYWJsZWQmJiJ6b29tIj09PWkuZHJhZ21vZGUpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITA7Zm9yKHZhciBjPXRoaXMuc2VsZWN0Qm94LnNlbGVjdEJveD1bTWF0aC5taW4oZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5taW4oZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSksTWF0aC5tYXgoZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5tYXgoZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSldLHU9MDt1PDI7dSsrKWUuYm94U3RhcnRbdV09PT1lLmJveEVuZFt1XSYmKGNbdV09dC5kYXRhQm94W3VdLGNbdSsyXT10LmRhdGFCb3hbdSsyXSk7dC5zZXREaXJ0eSgpfWVsc2UgaWYoIWUucGFubmluZyYmdGhpcy5pc01vdXNlT3Zlcil7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMTt2YXIgaD1pLl9zaXplLGY9dGhpcy54YXhpcy5kb21haW4scD10aGlzLnlheGlzLmRvbWFpbixkPShhPXQucGljayhvL3QucGl4ZWxSYXRpbytoLmwrZlswXSpoLncsbC90LnBpeGVsUmF0aW8tKGgudCsoMS1wWzFdKSpoLmgpKSkmJmEub2JqZWN0Ll90cmFjZS5oYW5kbGVQaWNrKGEpO2lmKGQmJm4mJnRoaXMuZW1pdFBvaW50QWN0aW9uKGQsInBsb3RseV9jbGljayIpLGEmJiJza2lwIiE9PWEub2JqZWN0Ll90cmFjZS5ob3ZlcmluZm8mJmkuaG92ZXJtb2RlJiZkJiYoIXRoaXMubGFzdFBpY2tSZXN1bHR8fHRoaXMubGFzdFBpY2tSZXN1bHQudHJhY2VVaWQhPT1kLnRyYWNlLnVpZHx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMF0hPT1kLmRhdGFDb29yZFswXXx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMV0hPT1kLmRhdGFDb29yZFsxXSkpe3ZhciBnPWQ7dGhpcy5sYXN0UGlja1Jlc3VsdD17dHJhY2VVaWQ6ZC50cmFjZT9kLnRyYWNlLnVpZDpudWxsLGRhdGFDb29yZDpkLmRhdGFDb29yZC5zbGljZSgpfSx0aGlzLnNwaWtlcy51cGRhdGUoe2NlbnRlcjphLmRhdGFDb29yZH0pLGcuc2NyZWVuQ29vcmQ9WygodC52aWV3Qm94WzJdLXQudmlld0JveFswXSkqKGEuZGF0YUNvb3JkWzBdLXQuZGF0YUJveFswXSkvKHQuZGF0YUJveFsyXS10LmRhdGFCb3hbMF0pK3Qudmlld0JveFswXSkvdC5waXhlbFJhdGlvLCh0aGlzLmNhbnZhcy5oZWlnaHQtKHQudmlld0JveFszXS10LnZpZXdCb3hbMV0pKihhLmRhdGFDb29yZFsxXS10LmRhdGFCb3hbMV0pLyh0LmRhdGFCb3hbM10tdC5kYXRhQm94WzFdKS10LnZpZXdCb3hbMV0pL3QucGl4ZWxSYXRpb10sdGhpcy5lbWl0UG9pbnRBY3Rpb24oZCwicGxvdGx5X2hvdmVyIik7dmFyIG09dGhpcy5mdWxsRGF0YVtnLnRyYWNlLmluZGV4XXx8e30sdj1nLnBvaW50SW5kZXgseT1zLmNhc3RIb3ZlcmluZm8obSxpLHYpO2lmKHkmJiJhbGwiIT09eSl7dmFyIHg9eS5zcGxpdCgiKyIpOy0xPT09eC5pbmRleE9mKCJ4IikmJihnLnRyYWNlQ29vcmRbMF09dm9pZCAwKSwtMT09PXguaW5kZXhPZigieSIpJiYoZy50cmFjZUNvb3JkWzFdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInoiKSYmKGcudHJhY2VDb29yZFsyXT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ0ZXh0IikmJihnLnRleHRMYWJlbD12b2lkIDApLC0xPT09eC5pbmRleE9mKCJuYW1lIikmJihnLm5hbWU9dm9pZCAwKX1zLmxvbmVIb3Zlcih7eDpnLnNjcmVlbkNvb3JkWzBdLHk6Zy5zY3JlZW5Db29yZFsxXSx4TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcigieGF4aXMiLGcudHJhY2VDb29yZFswXSkseUxhYmVsOnRoaXMuaG92ZXJGb3JtYXR0ZXIoInlheGlzIixnLnRyYWNlQ29vcmRbMV0pLHpMYWJlbDpnLnRyYWNlQ29vcmRbMl0sdGV4dDpnLnRleHRMYWJlbCxuYW1lOmcubmFtZSxjb2xvcjpzLmNhc3RIb3Zlck9wdGlvbihtLHYsImJnY29sb3IiKXx8Zy5jb2xvcixib3JkZXJDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbihtLHYsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpzLmNhc3RIb3Zlck9wdGlvbihtLHYsImZvbnQuZmFtaWx5IiksZm9udFNpemU6cy5jYXN0SG92ZXJPcHRpb24obSx2LCJmb250LnNpemUiKSxmb250Q29sb3I6cy5jYXN0SG92ZXJPcHRpb24obSx2LCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpzLmNhc3RIb3Zlck9wdGlvbihtLHYsIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246cy5jYXN0SG92ZXJPcHRpb24obSx2LCJhbGlnbiIpfSx7Y29udGFpbmVyOnRoaXMuc3ZnQ29udGFpbmVyLGdkOnRoaXMuZ3JhcGhEaXZ9KX19YXx8dGhpcy51bmhvdmVyKCksdC5kcmF3KCl9fSxNLnVuaG92ZXI9ZnVuY3Rpb24oKXt0aGlzLmxhc3RQaWNrUmVzdWx0JiYodGhpcy5zcGlrZXMudXBkYXRlKHt9KSx0aGlzLmxhc3RQaWNrUmVzdWx0PW51bGwsdGhpcy5ncmFwaERpdi5lbWl0KCJwbG90bHlfdW5ob3ZlciIpLHMubG9uZVVuaG92ZXIodGhpcy5zdmdDb250YWluZXIpKX0sTS5ob3ZlckZvcm1hdHRlcj1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUpe3ZhciByPXRoaXNbdF07cmV0dXJuIG8udGlja1RleHQocixyLmMybChlKSwiaG92ZXIiKS50ZXh0fX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2MzMsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY1NSwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIjo3NzEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjc5OCwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6ODA1LCIuLi9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjgwNiwiLi9jYW1lcmEiOjgzNywiLi9jb252ZXJ0Ijo4MzgsImdsLXBsb3QyZCI6Mjk4LCJnbC1zZWxlY3QtYm94IjozMTAsImdsLXNwaWtlczJkIjozMTksIndlYmdsLWNvbnRleHQiOjU3OH1dLDg0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuL3NjZW5lIiksbz10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO3IubmFtZT0iZ2wzZCIsci5hdHRyPSJzY2VuZSIsci5pZFJvb3Q9InNjZW5lIixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9cy5jb3VudGVyUmVnZXgoInNjZW5lIiksci5hdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6aS5ob3ZlcmxhYmVsfSwicGxvdCIsIm5lc3RlZCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXQvZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsM2QsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcz1uW2ldLGw9byhyLCJnbDNkIixzKSxjPWVbc10sdT1jLmNhbWVyYSxoPWMuX3NjZW5lO2h8fChoPW5ldyBhKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOnQucXVlcnlTZWxlY3RvcigiLmdsLWNvbnRhaW5lciIpLHN0YXRpY1Bsb3Q6dC5fY29udGV4dC5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLGNhbWVyYTp1fSxlKSxjLl9zY2VuZT1oKSxoLnZpZXdJbml0aWFsfHwoaC52aWV3SW5pdGlhbD17dXA6e3g6dS51cC54LHk6dS51cC55LHo6dS51cC56fSxleWU6e3g6dS5leWUueCx5OnUuZXllLnksejp1LmV5ZS56fSxjZW50ZXI6e3g6dS5jZW50ZXIueCx5OnUuY2VudGVyLnksejp1LmNlbnRlci56fX0pLGgucGxvdChsLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMuZ2wzZHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdOyFlW29dJiZuW29dLl9zY2VuZSYmKG5bb10uX3NjZW5lLmRlc3Ryb3koKSxuLl9pbmZvbGF5ZXImJm4uX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLSIrbykucmVtb3ZlKCkpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9ZVtyW2ldXSxvPWEuZG9tYWluLHM9YS5fc2NlbmUsYz1zLnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6bC5zdmcsInhsaW5rOmhyZWYiOmMseDpuLmwrbi53Km8ueFswXSx5Om4udCtuLmgqKDEtby55WzFdKSx3aWR0aDpuLncqKG8ueFsxXS1vLnhbMF0pLGhlaWdodDpuLmgqKG8ueVsxXS1vLnlbMF0pLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSkscy5kZXN0cm95KCl9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaCgvXnNjZW5lWzAtOV0qJC8pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksInNjZW5lIitlfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj0wO248ci5sZW5ndGg7bisrKXtlW3Jbbl1dLl9zY2VuZS51cGRhdGVGeChlLmRyYWdtb2RlLGUuaG92ZXJtb2RlKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiOjY1NiwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcyNiwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi4vZ2V0X2RhdGEiOjgzNiwiLi9sYXlvdXQvYXR0cmlidXRlcyI6ODQyLCIuL2xheW91dC9kZWZhdWx0cyI6ODQ2LCIuL2xheW91dC9sYXlvdXRfYXR0cmlidXRlcyI6ODQ3LCIuL3NjZW5lIjo4NTF9XSw4NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzY2VuZTp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJzY2VuZSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifX19LHt9XSw4NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dmlzaWJsZTppLnZpc2libGUsc2hvd3NwaWtlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc3Bpa2VzaWRlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyfSxzcGlrZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzaG93YmFja2dyb3VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYmFja2dyb3VuZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgyMDQsIDIwNCwgMjA0LCAwLjUpIn0sc2hvd2F4ZXNsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGNvbG9yOmkuY29sb3IsY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGl0bGU6e3RleHQ6aS50aXRsZS50ZXh0LGZvbnQ6aS50aXRsZS5mb250fSx0eXBlOmEoe30saS50eXBlLHt2YWx1ZXM6WyItIiwibGluZWFyIiwibG9nIiwiZGF0ZSIsImNhdGVnb3J5Il19KSxhdXRvcmFuZ2U6aS5hdXRvcmFuZ2UscmFuZ2Vtb2RlOmkucmFuZ2Vtb2RlLHJhbmdlOmEoe30saS5yYW5nZSx7aXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxhbmltOiExfSksdGlja21vZGU6aS50aWNrbW9kZSxudGlja3M6aS5udGlja3MsdGljazA6aS50aWNrMCxkdGljazppLmR0aWNrLHRpY2t2YWxzOmkudGlja3ZhbHMsdGlja3RleHQ6aS50aWNrdGV4dCx0aWNrczppLnRpY2tzLG1pcnJvcjppLm1pcnJvcix0aWNrbGVuOmkudGlja2xlbix0aWNrd2lkdGg6aS50aWNrd2lkdGgsdGlja2NvbG9yOmkudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmkuc2hvd3RpY2tsYWJlbHMsdGlja2ZvbnQ6aS50aWNrZm9udCx0aWNrYW5nbGU6aS50aWNrYW5nbGUsdGlja3ByZWZpeDppLnRpY2twcmVmaXgsc2hvd3RpY2twcmVmaXg6aS5zaG93dGlja3ByZWZpeCx0aWNrc3VmZml4OmkudGlja3N1ZmZpeCxzaG93dGlja3N1ZmZpeDppLnNob3d0aWNrc3VmZml4LHNob3dleHBvbmVudDppLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDppLmV4cG9uZW50Zm9ybWF0LG1pbmV4cG9uZW50OmkubWluZXhwb25lbnQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsaG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCxzaG93bGluZTppLnNob3dsaW5lLGxpbmVjb2xvcjppLmxpbmVjb2xvcixsaW5ld2lkdGg6aS5saW5ld2lkdGgsc2hvd2dyaWQ6aS5zaG93Z3JpZCxncmlkY29sb3I6YSh7fSxpLmdyaWRjb2xvcix7ZGZsdDoicmdiKDIwNCwgMjA0LCAyMDQpIn0pLGdyaWR3aWR0aDppLmdyaWR3aWR0aCx6ZXJvbGluZTppLnplcm9saW5lLHplcm9saW5lY29sb3I6aS56ZXJvbGluZWNvbG9yLHplcm9saW5ld2lkdGg6aS56ZXJvbGluZXdpZHRoLF9kZXByZWNhdGVkOnt0aXRsZTppLl9kZXByZWNhdGVkLnRpdGxlLHRpdGxlZm9udDppLl9kZXByZWNhdGVkLnRpdGxlZm9udH19LCJwbG90IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4MTN9XSw4NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLm1peCxpPXQoIi4uLy4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NhcnRlc2lhbi90eXBlX2RlZmF1bHRzIiksbD10KCIuLi8uLi9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyIpLGM9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB1LGg7ZnVuY3Rpb24gZih0LGUpe3JldHVybiBpLmNvZXJjZSh1LGgsbyx0LGUpfWZvcih2YXIgcD0wO3A8Yy5sZW5ndGg7cCsrKXt2YXIgZD1jW3BdO3U9dFtkXXx8e30sKGg9YS5uZXdDb250YWluZXIoZSxkKSkuX2lkPWRbMF0rci5zY2VuZSxoLl9uYW1lPWQscyh1LGgsZixyKSxsKHUsaCxmLHtmb250OnIuZm9udCxsZXR0ZXI6ZFswXSxkYXRhOnIuZGF0YSxzaG93R3JpZDohMCxub1RpY2tzb246ITAsbm9UaWNrbGFiZWxtb2RlOiEwLGJnQ29sb3I6ci5iZ0NvbG9yLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHIuZnVsbExheW91dCksZigiZ3JpZGNvbG9yIixuKGguY29sb3Isci5iZ0NvbG9yLDEzNjAwLzE4NykudG9SZ2JTdHJpbmcoKSksZigidGl0bGUudGV4dCIsZFswXSksaC5zZXRTY2FsZT1pLm5vb3AsZigic2hvd3NwaWtlcyIpJiYoZigic3Bpa2VzaWRlcyIpLGYoInNwaWtldGhpY2tuZXNzIiksZigic3Bpa2Vjb2xvciIsaC5jb2xvcikpLGYoInNob3dheGVzbGFiZWxzIiksZigic2hvd2JhY2tncm91bmQiKSYmZigiYmFja2dyb3VuZGNvbG9yIil9fX0seyIuLi8uLi8uLi9saWIiOjc1MCwiLi4vLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6Nzg4LCIuLi8uLi9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6ODAxLCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0cyI6ODI0LCIuL2F4aXNfYXR0cmlidXRlcyI6ODQzLHRpbnljb2xvcjI6NTQ4fV0sODQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxpPXQoIi4uLy4uLy4uL2xpYiIpLGE9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtmdW5jdGlvbiBvKCl7dGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMudGlja0ZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aGlzLnRpY2tTaXplPVsxMiwxMiwxMl0sdGhpcy50aWNrQW5nbGU9WzAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTgsMTgsMThdLHRoaXMubGFiZWxzPVsieCIsInkiLCJ6Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITBdLHRoaXMubGFiZWxGb250PVsiT3BlbiBTYW5zIiwiT3BlbiBTYW5zIiwiT3BlbiBTYW5zIl0sdGhpcy5sYWJlbFNpemU9WzIwLDIwLDIwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVszMCwzMCwzMF0sdGhpcy5saW5lRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGluZVRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVUaWNrTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lVGlja0xlbmd0aD1bMTAsMTAsMTBdLHRoaXMubGluZVRpY2tXaWR0aD1bMSwxLDFdLHRoaXMubGluZVRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZEVuYWJsZT1bITAsITAsITBdLHRoaXMuZ3JpZFdpZHRoPVsxLDEsMV0sdGhpcy5ncmlkQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9FbmFibGU9WyEwLCEwLCEwXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9MaW5lV2lkdGg9WzIsMiwyXSx0aGlzLmJhY2tncm91bmRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV1dLHRoaXMuX2RlZmF1bHRUaWNrUGFkPXRoaXMudGlja1BhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMYWJlbFBhZD10aGlzLmxhYmVsUGFkLnNsaWNlKCksdGhpcy5fZGVmYXVsdExpbmVUaWNrTGVuZ3RoPXRoaXMubGluZVRpY2tMZW5ndGguc2xpY2UoKX1vLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3Ipe3ZhciBvPWVbYVtyXV07by52aXNpYmxlPyh0aGlzLmxhYmVsc1tyXT10Ll9tZXRhP2kudGVtcGxhdGVTdHJpbmcoby50aXRsZS50ZXh0LHQuX21ldGEpOm8udGl0bGUudGV4dCwiZm9udCJpbiBvLnRpdGxlJiYoby50aXRsZS5mb250LmNvbG9yJiYodGhpcy5sYWJlbENvbG9yW3JdPW4oby50aXRsZS5mb250LmNvbG9yKSksby50aXRsZS5mb250LmZhbWlseSYmKHRoaXMubGFiZWxGb250W3JdPW8udGl0bGUuZm9udC5mYW1pbHkpLG8udGl0bGUuZm9udC5zaXplJiYodGhpcy5sYWJlbFNpemVbcl09by50aXRsZS5mb250LnNpemUpKSwic2hvd2xpbmUiaW4gbyYmKHRoaXMubGluZUVuYWJsZVtyXT1vLnNob3dsaW5lKSwibGluZWNvbG9yImluIG8mJih0aGlzLmxpbmVDb2xvcltyXT1uKG8ubGluZWNvbG9yKSksImxpbmV3aWR0aCJpbiBvJiYodGhpcy5saW5lV2lkdGhbcl09by5saW5ld2lkdGgpLCJzaG93Z3JpZCJpbiBvJiYodGhpcy5ncmlkRW5hYmxlW3JdPW8uc2hvd2dyaWQpLCJncmlkY29sb3IiaW4gbyYmKHRoaXMuZ3JpZENvbG9yW3JdPW4oby5ncmlkY29sb3IpKSwiZ3JpZHdpZHRoImluIG8mJih0aGlzLmdyaWRXaWR0aFtyXT1vLmdyaWR3aWR0aCksImxvZyI9PT1vLnR5cGU/dGhpcy56ZXJvRW5hYmxlW3JdPSExOiJ6ZXJvbGluZSJpbiBvJiYodGhpcy56ZXJvRW5hYmxlW3JdPW8uemVyb2xpbmUpLCJ6ZXJvbGluZWNvbG9yImluIG8mJih0aGlzLnplcm9MaW5lQ29sb3Jbcl09bihvLnplcm9saW5lY29sb3IpKSwiemVyb2xpbmV3aWR0aCJpbiBvJiYodGhpcy56ZXJvTGluZVdpZHRoW3JdPW8uemVyb2xpbmV3aWR0aCksInRpY2tzImluIG8mJm8udGlja3M/dGhpcy5saW5lVGlja0VuYWJsZVtyXT0hMDp0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLCJ0aWNrbGVuImluIG8mJih0aGlzLmxpbmVUaWNrTGVuZ3RoW3JdPXRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aFtyXT1vLnRpY2tsZW4pLCJ0aWNrY29sb3IiaW4gbyYmKHRoaXMubGluZVRpY2tDb2xvcltyXT1uKG8udGlja2NvbG9yKSksInRpY2t3aWR0aCJpbiBvJiYodGhpcy5saW5lVGlja1dpZHRoW3JdPW8udGlja3dpZHRoKSwidGlja2FuZ2xlImluIG8mJih0aGlzLnRpY2tBbmdsZVtyXT0iYXV0byI9PT1vLnRpY2thbmdsZT8tMzYwMDpNYXRoLlBJKi1vLnRpY2thbmdsZS8xODApLCJzaG93dGlja2xhYmVscyJpbiBvJiYodGhpcy50aWNrRW5hYmxlW3JdPW8uc2hvd3RpY2tsYWJlbHMpLCJ0aWNrZm9udCJpbiBvJiYoby50aWNrZm9udC5jb2xvciYmKHRoaXMudGlja0NvbG9yW3JdPW4oby50aWNrZm9udC5jb2xvcikpLG8udGlja2ZvbnQuZmFtaWx5JiYodGhpcy50aWNrRm9udFtyXT1vLnRpY2tmb250LmZhbWlseSksby50aWNrZm9udC5zaXplJiYodGhpcy50aWNrU2l6ZVtyXT1vLnRpY2tmb250LnNpemUpKSwibWlycm9yImluIG8/LTEhPT1bInRpY2tzIiwiYWxsIiwiYWxsdGlja3MiXS5pbmRleE9mKG8ubWlycm9yKT8odGhpcy5saW5lVGlja01pcnJvcltyXT0hMCx0aGlzLmxpbmVNaXJyb3Jbcl09ITApOiEwPT09by5taXJyb3I/KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITEsdGhpcy5saW5lTWlycm9yW3JdPSEwKToodGhpcy5saW5lVGlja01pcnJvcltyXT0hMSx0aGlzLmxpbmVNaXJyb3Jbcl09ITEpOnRoaXMubGluZU1pcnJvcltyXT0hMSwic2hvd2JhY2tncm91bmQiaW4gbyYmITEhPT1vLnNob3diYWNrZ3JvdW5kPyh0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITAsdGhpcy5iYWNrZ3JvdW5kQ29sb3Jbcl09bihvLmJhY2tncm91bmRjb2xvcikpOnRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSk6KHRoaXMudGlja0VuYWJsZVtyXT0hMSx0aGlzLmxhYmVsRW5hYmxlW3JdPSExLHRoaXMubGluZUVuYWJsZVtyXT0hMSx0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLHRoaXMuZ3JpZEVuYWJsZVtyXT0hMSx0aGlzLnplcm9FbmFibGVbcl09ITEsdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBvO3JldHVybiByLm1lcmdlKHQsZSkscn19LHsiLi4vLi4vLi4vbGliIjo3NTAsIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc3M31dLDg0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIiKSxpPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIikscz10KCIuL2F4aXNfZGVmYXVsdHMiKSxsPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2dldF9kYXRhIikuZ2V0U3VicGxvdERhdGE7ZnVuY3Rpb24gdSh0LGUscixuKXtmb3IodmFyIG89cigiYmdjb2xvciIpLGw9aS5jb21iaW5lKG8sbi5wYXBlcl9iZ2NvbG9yKSx1PVsidXAiLCJjZW50ZXIiLCJleWUiXSxoPTA7aDx1Lmxlbmd0aDtoKyspcigiY2FtZXJhLiIrdVtoXSsiLngiKSxyKCJjYW1lcmEuIit1W2hdKyIueSIpLHIoImNhbWVyYS4iK3VbaF0rIi56Iik7cigiY2FtZXJhLnByb2plY3Rpb24udHlwZSIpO3ZhciBmPSEhcigiYXNwZWN0cmF0aW8ueCIpJiYhIXIoImFzcGVjdHJhdGlvLnkiKSYmISFyKCJhc3BlY3RyYXRpby56IikscD1yKCJhc3BlY3Rtb2RlIixmPyJtYW51YWwiOiJhdXRvIik7Znx8KHQuYXNwZWN0cmF0aW89ZS5hc3BlY3RyYXRpbz17eDoxLHk6MSx6OjF9LCJtYW51YWwiPT09cCYmKGUuYXNwZWN0bW9kZT0iYXV0byIpLHQuYXNwZWN0bW9kZT1lLmFzcGVjdG1vZGUpO3ZhciBkPWMobi5mdWxsRGF0YSwiZ2wzZCIsbi5pZCk7cyh0LGUse2ZvbnQ6bi5mb250LHNjZW5lOm4uaWQsZGF0YTpkLGJnQ29sb3I6bCxjYWxlbmRhcjpuLmNhbGVuZGFyLGZ1bGxMYXlvdXQ6bi5mdWxsTGF5b3V0fSksYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zM2QiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSxuKTt2YXIgZz1uLmdldERmbHRGcm9tTGF5b3V0KCJkcmFnbW9kZSIpO2lmKCExIT09ZyYmIWcpaWYoZz0ib3JiaXQiLHQuY2FtZXJhJiZ0LmNhbWVyYS51cCl7dmFyIG09dC5jYW1lcmEudXAueCx2PXQuY2FtZXJhLnVwLnkseT10LmNhbWVyYS51cC56OzAhPT15JiYobSYmdiYmeT95L01hdGguc3FydChtKm0rdip2K3kqeSk+Ljk5OSYmKGc9InR1cm50YWJsZSIpOmc9InR1cm50YWJsZSIpfWVsc2UgZz0idHVybnRhYmxlIjtyKCJkcmFnbW9kZSIsZykscigiaG92ZXJtb2RlIixuLmdldERmbHRGcm9tTGF5b3V0KCJob3Zlcm1vZGUiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoPjE7byh0LGUscix7dHlwZToiZ2wzZCIsYXR0cmlidXRlczpsLGhhbmRsZURlZmF1bHRzOnUsZnVsbExheW91dDplLGZvbnQ6ZS5mb250LGZ1bGxEYXRhOnIsZ2V0RGZsdEZyb21MYXlvdXQ6ZnVuY3Rpb24oZSl7aWYoIWkpcmV0dXJuIG4udmFsaWRhdGUodFtlXSxsW2VdKT90W2VdOnZvaWQgMH0scGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsY2FsZW5kYXI6ZS5jYWxlbmRhcn0pfX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uLy4uL2xpYiI6NzUwLCIuLi8uLi8uLi9yZWdpc3RyeSI6ODgyLCIuLi8uLi9nZXRfZGF0YSI6ODM2LCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIjo4NzYsIi4vYXhpc19kZWZhdWx0cyI6ODQ0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDd9XSw4NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uLy4uL2xpYiIpLmNvdW50ZXJSZWdleDtmdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm57eDp7dmFsVHlwZToibnVtYmVyIixkZmx0OnQsZWRpdFR5cGU6ImNhbWVyYSJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDplLGVkaXRUeXBlOiJjYW1lcmEifSx6Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6cixlZGl0VHlwZToiY2FtZXJhIn0sZWRpdFR5cGU6ImNhbWVyYSJ9fWUuZXhwb3J0cz17X2FycmF5QXR0clJlZ2V4cHM6W28oInNjZW5lIiwiLmFubm90YXRpb25zIiwhMCldLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToicGxvdCJ9LGNhbWVyYTp7dXA6YShzKDAsMCwxKSx7fSksY2VudGVyOmEocygwLDAsMCkse30pLGV5ZTphKHMoMS4yNSwxLjI1LDEuMjUpLHt9KSxwcm9qZWN0aW9uOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwZXJzcGVjdGl2ZSIsIm9ydGhvZ3JhcGhpYyJdLGRmbHQ6InBlcnNwZWN0aXZlIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbWVyYSJ9LGRvbWFpbjppKHtuYW1lOiJzY2VuZSIsZWRpdFR5cGU6InBsb3QifSksYXNwZWN0bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImN1YmUiLCJkYXRhIiwibWFudWFsIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7ImFzcGVjdHJhdGlvLngiOnZvaWQgMCwiYXNwZWN0cmF0aW8ueSI6dm9pZCAwLCJhc3BlY3RyYXRpby56Ijp2b2lkIDB9fSxhc3BlY3RyYXRpbzp7eDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0seTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0sejp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmFzcGVjdG1vZGUiOiJtYW51YWwifX0sZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7YXNwZWN0bW9kZToibWFudWFsIn19LHhheGlzOm4seWF4aXM6bix6YXhpczpuLGRyYWdtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvcmJpdCIsInR1cm50YWJsZSIsInpvb20iLCJwYW4iLCExXSxlZGl0VHlwZToicGxvdCJ9LGhvdmVybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvc2VzdCIsITFdLGRmbHQ6ImNsb3Nlc3QiLGVkaXRUeXBlOiJtb2RlYmFyIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJwbG90IixfZGVwcmVjYXRlZDp7Y2FtZXJhcG9zaXRpb246e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGVkaXRUeXBlOiJjYW1lcmEifX19fSx7Ii4uLy4uLy4uL2xpYiI6NzUwLCIuLi8uLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL2RvbWFpbiI6ODI2LCIuL2F4aXNfYXR0cmlidXRlcyI6ODQzfV0sODQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxpPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZnVuY3Rpb24gYSgpe3RoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdfWEucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MzsrK2Upe3ZhciByPXRbaVtlXV07ci52aXNpYmxlPyh0aGlzLmVuYWJsZWRbZV09ci5zaG93c3Bpa2VzLHRoaXMuY29sb3JzW2VdPW4oci5zcGlrZWNvbG9yKSx0aGlzLmRyYXdTaWRlc1tlXT1yLnNwaWtlc2lkZXMsdGhpcy5saW5lV2lkdGhbZV09ci5zcGlrZXRoaWNrbmVzcyk6KHRoaXMuZW5hYmxlZFtlXT0hMSx0aGlzLmRyYXdTaWRlc1tlXT0hMSl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGE7cmV0dXJuIGUubWVyZ2UodCksZX19LHsiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzczfV0sODQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5heGVzT3B0aW9ucyxyPXQuZ2xwbG90LmF4ZXNQaXhlbHMscz10LmZ1bGxTY2VuZUxheW91dCxsPVtbXSxbXSxbXV0sYz0wO2M8MzsrK2Mpe3ZhciB1PXNbYVtjXV07aWYodS5fbGVuZ3RoPShyW2NdLmhpLXJbY10ubG8pKnJbY10ucGl4ZWxzUGVyRGF0YVVuaXQvdC5kYXRhU2NhbGVbY10sTWF0aC5hYnModS5fbGVuZ3RoKT09PTEvMHx8aXNOYU4odS5fbGVuZ3RoKSlsW2NdPVtdO2Vsc2V7dS5faW5wdXRfcmFuZ2U9dS5yYW5nZS5zbGljZSgpLHUucmFuZ2VbMF09cltjXS5sby90LmRhdGFTY2FsZVtjXSx1LnJhbmdlWzFdPXJbY10uaGkvdC5kYXRhU2NhbGVbY10sdS5fbT0xLyh0LmRhdGFTY2FsZVtjXSpyW2NdLnBpeGVsc1BlckRhdGFVbml0KSx1LnJhbmdlWzBdPT09dS5yYW5nZVsxXSYmKHUucmFuZ2VbMF0tPTEsdS5yYW5nZVsxXSs9MSk7dmFyIGg9dS50aWNrbW9kZTtpZigiYXV0byI9PT11LnRpY2ttb2RlKXt1LnRpY2ttb2RlPSJsaW5lYXIiO3ZhciBmPXUubnRpY2tzfHxpLmNvbnN0cmFpbih1Ll9sZW5ndGgvNDAsNCw5KTtuLmF1dG9UaWNrcyh1LE1hdGguYWJzKHUucmFuZ2VbMV0tdS5yYW5nZVswXSkvZil9Zm9yKHZhciBwPW4uY2FsY1RpY2tzKHUse21zVVRDOiEwfSksZD0wO2Q8cC5sZW5ndGg7KytkKXBbZF0ueD1wW2RdLngqdC5kYXRhU2NhbGVbY10sImRhdGUiPT09dS50eXBlJiYocFtkXS50ZXh0PXBbZF0udGV4dC5yZXBsYWNlKC9cPGJyXD4vZywiICIpKTtsW2NdPXAsdS50aWNrbW9kZT1ofX1lLnRpY2tzPWw7Zm9yKGM9MDtjPDM7KytjKXtvW2NdPS41Kih0LmdscGxvdC5ib3VuZHNbMF1bY10rdC5nbHBsb3QuYm91bmRzWzFdW2NdKTtmb3IoZD0wO2Q8MjsrK2QpZS5ib3VuZHNbZF1bY109dC5nbHBsb3QuYm91bmRzW2RdW2NdfXQuY29udG91ckxldmVscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KDMpLHI9MDtyPDM7KytyKXtmb3IodmFyIG49dFtyXSxpPW5ldyBBcnJheShuLmxlbmd0aCksYT0wO2E8bi5sZW5ndGg7KythKWlbYV09blthXS54O2Vbcl09aX1yZXR1cm4gZX0obCl9O3ZhciBuPXQoIi4uLy4uL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi8uLi9saWIiKSxhPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0sbz1bMCwwLDBdfSx7Ii4uLy4uLy4uL2xpYiI6NzUwLCIuLi8uLi9jYXJ0ZXNpYW4vYXhlcyI6Nzk5fV0sODUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuLGk9WzAsMCwwLDBdO2ZvcihyPTA7cjw0Oysrcilmb3Iobj0wO248NDsrK24paVtuXSs9dFs0KnIrbl0qZVtyXTtyZXR1cm4gaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LnByb2plY3Rpb24sbih0LnZpZXcsbih0Lm1vZGVsLFtlWzBdLGVbMV0sZVsyXSwxXSkpKX19LHt9XSw4NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhPXQoImdsLXBsb3QzZCIpLG89YS5jcmVhdGVDYW1lcmEscz1hLmNyZWF0ZVNjZW5lLGw9dCgid2ViZ2wtY29udGV4dCIpLGM9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIiksdT10KCIuLi8uLi9yZWdpc3RyeSIpLGg9dCgiLi4vLi4vbGliIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHA9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGQ9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGc9dCgiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIiksbT10KCIuL3Byb2plY3QiKSx2PXQoIi4vbGF5b3V0L2NvbnZlcnQiKSx5PXQoIi4vbGF5b3V0L3NwaWtlcyIpLHg9dCgiLi9sYXlvdXQvdGlja19tYXJrcyIpLGI9dCgiaXMtbW9iaWxlIikoe3RhYmxldDohMCxmZWF0dXJlRGV0ZWN0OiEwfSk7ZnVuY3Rpb24gXyh0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG49dC5jb250YWluZXI7dGhpcy5ncmFwaERpdj10LmdyYXBoRGl2O3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtpLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5zdHlsZS50b3A9aS5zdHlsZS5sZWZ0PSIwcHgiLGkuc3R5bGUud2lkdGg9aS5zdHlsZS5oZWlnaHQ9IjEwMCUiLGkuc3R5bGVbInotaW5kZXgiXT0yMCxpLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIixyLmFwcGVuZENoaWxkKGkpLHRoaXMuc3ZnQ29udGFpbmVyPWksci5pZD10LmlkLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLnRvcD1yLnN0eWxlLmxlZnQ9IjBweCIsci5zdHlsZS53aWR0aD1yLnN0eWxlLmhlaWdodD0iMTAwJSIsbi5hcHBlbmRDaGlsZChyKSx0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmlkPXQuaWR8fCJzY2VuZSIsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9ZVt0aGlzLmlkXSx0aGlzLnBsb3RBcmdzPVtbXSx7fSx7fV0sdGhpcy5heGVzT3B0aW9ucz12KGUsZVt0aGlzLmlkXSksdGhpcy5zcGlrZU9wdGlvbnM9eShlW3RoaXMuaWRdKSx0aGlzLmNvbnRhaW5lcj1yLHRoaXMuc3RhdGljTW9kZT0hIXQuc3RhdGljUGxvdCx0aGlzLnBpeGVsUmF0aW89dGhpcy5waXhlbFJhdGlvfHx0LnBsb3RHbFBpeGVsUmF0aW98fDIsdGhpcy5kYXRhU2NhbGU9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1tdLFtdLFtdXSx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucz11LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImNvbnZlcnQiKSx0aGlzLmRyYXdBbm5vdGF0aW9ucz11LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImRyYXciKSx0aGlzLmluaXRpYWxpemVHTFBsb3QoKX12YXIgdz1fLnByb3RvdHlwZTt3LnByZXBhcmVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e2NhbnZhczp0aGlzLmNhbnZhcyxnbDp0aGlzLmdsLGdsT3B0aW9uczp7cHJlc2VydmVEcmF3aW5nQnVmZmVyOmIscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0sY29udGFpbmVyOnRoaXMuY29udGFpbmVyLGF4ZXM6dGhpcy5heGVzT3B0aW9ucyxzcGlrZXM6dGhpcy5zcGlrZU9wdGlvbnMscGlja1JhZGl1czoxMCxzbmFwVG9EYXRhOiEwLGF1dG9TY2FsZTohMCxhdXRvQm91bmRzOiExLGNhbWVyYU9iamVjdDp0aGlzLmNhbWVyYSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb307aWYodGhpcy5zdGF0aWNNb2RlKXtpZighKGl8fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9bCh7Y2FudmFzOm4scHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9KSkpKXRocm93IG5ldyBFcnJvcigiZXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXIiKTt0LmdsPWksdC5jYW52YXM9bn1yZXR1cm4gdH0sdy50cnlDcmVhdGVQbG90PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wcmVwYXJlT3B0aW9ucygpLGU9ITA7dHJ5e3RoaXMuZ2xwbG90PXModCl9Y2F0Y2gocil7aWYodGhpcy5zdGF0aWNNb2RlKWU9ITE7ZWxzZSB0cnl7aC53YXJuKFsid2ViZ2wgc2V0dXAgZmFpbGVkIHBvc3NpYmx5IGR1ZSB0byIsYj8iZGlzYWJsaW5nIjoiZW5hYmxpbmciLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgY29uZmlnLiIsIlRoZSBkZXZpY2UgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgaXMtbW9iaWxlIG1vZHVsZSEiLCJJbnZlcnRpbmcgcHJlc2VydmVEcmF3aW5nQnVmZmVyIG9wdGlvbiBpbiBzZWNvbmQgYXR0ZW1wdCB0byBjcmVhdGUgd2ViZ2wgc2NlbmUuIl0uam9pbigiICIpKSxiPXQuZ2xPcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj0hdC5nbE9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyLHRoaXMuZ2xwbG90PXModCl9Y2F0Y2godCl7ZT0hMX19cmV0dXJuIGV9LHcuaW5pdGlhbGl6ZUdMQ2FtZXJhPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mdWxsU2NlbmVMYXlvdXQuY2FtZXJhLGU9Im9ydGhvZ3JhcGhpYyI9PT10LnByb2plY3Rpb24udHlwZTt0aGlzLmNhbWVyYT1vKHRoaXMuY29udGFpbmVyLHtjZW50ZXI6W3QuY2VudGVyLngsdC5jZW50ZXIueSx0LmNlbnRlci56XSxleWU6W3QuZXllLngsdC5leWUueSx0LmV5ZS56XSx1cDpbdC51cC54LHQudXAueSx0LnVwLnpdLF9vcnRobzplLHpvb21NaW46LjAxLHpvb21NYXg6MTAwLG1vZGU6Im9yYml0In0pfSx3LmluaXRpYWxpemVHTFBsb3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHQuaW5pdGlhbGl6ZUdMQ2FtZXJhKCksIXQudHJ5Q3JlYXRlUGxvdCgpKXJldHVybiBnKHQpO3QudHJhY2VzPXt9LHQubWFrZTR0aERpbWVuc2lvbigpO3ZhciBlPXQuZ3JhcGhEaXYscj1lLmxheW91dCxuPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIHQuaXNDYW1lcmFDaGFuZ2VkKHIpJiYoZVt0LmlkKyIuY2FtZXJhIl09dC5nZXRDYW1lcmEoKSksdC5pc0FzcGVjdENoYW5nZWQocikmJihlW3QuaWQrIi5hc3BlY3RyYXRpbyJdPXQuZ2xwbG90LmdldEFzcGVjdHJhdGlvKCksIm1hbnVhbCIhPT1yW3QuaWRdLmFzcGVjdG1vZGUmJih0LmZ1bGxTY2VuZUxheW91dC5hc3BlY3Rtb2RlPXJbdC5pZF0uYXNwZWN0bW9kZT1lW3QuaWQrIi5hc3BlY3Rtb2RlIl09Im1hbnVhbCIpKSxlfSxpPWZ1bmN0aW9uKHQpe2lmKCExIT09dC5mdWxsU2NlbmVMYXlvdXQuZHJhZ21vZGUpe3ZhciBlPW4oKTt0LnNhdmVMYXlvdXQociksdC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGUpfX07cmV0dXJuIHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoZnVuY3Rpb24oKXtpKHQpfSkpLHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsKGZ1bmN0aW9uKHIpe2lmKGUuX2NvbnRleHQuX3Njcm9sbFpvb20uZ2wzZCl7aWYodC5jYW1lcmEuX29ydGhvKXt2YXIgbj1yLmRlbHRhWD5yLmRlbHRhWT8xLjE6MS8xLjEsYT10LmdscGxvdC5nZXRBc3BlY3RyYXRpbygpO3QuZ2xwbG90LnNldEFzcGVjdHJhdGlvKHt4Om4qYS54LHk6biphLnksejpuKmEuen0pfWkodCl9fSksISFjJiZ7cGFzc2l2ZTohMX0pLHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLChmdW5jdGlvbigpe2lmKCExIT09dC5mdWxsU2NlbmVMYXlvdXQuZHJhZ21vZGUmJjAhPT10LmNhbWVyYS5tb3VzZUxpc3RlbmVyLmJ1dHRvbnMpe3ZhciBlPW4oKTt0LmdyYXBoRGl2LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsZSl9fSkpLHQuc3RhdGljTW9kZXx8dC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLChmdW5jdGlvbihyKXtlJiZlLmVtaXQmJmUuZW1pdCgicGxvdGx5X3dlYmdsY29udGV4dGxvc3QiLHtldmVudDpyLGxheWVyOnQuaWR9KX0pLCExKSx0LmdscGxvdC5vbmNvbnRleHRsb3NzPWZ1bmN0aW9uKCl7dC5yZWNvdmVyQ29udGV4dCgpfSx0LmdscGxvdC5vbnJlbmRlcj1mdW5jdGlvbigpe3QucmVuZGVyKCl9LCEwfSx3LnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcyxyPWUuZ3JhcGhEaXYsbj1lLnN2Z0NvbnRhaW5lcixpPWUuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9aS53aWR0aCxvPWkuaGVpZ2h0O24uc2V0QXR0cmlidXRlTlMobnVsbCwidmlld0JveCIsIjAgMCAiK2ErIiAiK28pLG4uc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLGEpLG4uc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixvKSx4KGUpLGUuZ2xwbG90LmF4ZXMudXBkYXRlKGUuYXhlc09wdGlvbnMpO2Zvcih2YXIgcyxsPU9iamVjdC5rZXlzKGUudHJhY2VzKSxjPW51bGwsdT1lLmdscGxvdC5zZWxlY3Rpb24sZD0wO2Q8bC5sZW5ndGg7KytkKSJza2lwIiE9PSh0PWUudHJhY2VzW2xbZF1dKS5kYXRhLmhvdmVyaW5mbyYmdC5oYW5kbGVQaWNrKHUpJiYoYz10KSx0LnNldENvbnRvdXJMZXZlbHMmJnQuc2V0Q29udG91ckxldmVscygpO2Z1bmN0aW9uIGcodCxyKXt2YXIgbj1lLmZ1bGxTY2VuZUxheW91dFt0XTtyZXR1cm4gZi50aWNrVGV4dChuLG4uZDJsKHIpLCJob3ZlciIpLnRleHR9aWYobnVsbCE9PWMpe3ZhciB2PW0oZS5nbHBsb3QuY2FtZXJhUGFyYW1zLHUuZGF0YUNvb3JkaW5hdGUpO3Q9Yy5kYXRhO3ZhciB5LGI9ci5fZnVsbERhdGFbdC5pbmRleF0sXz11LmluZGV4LHc9e3hMYWJlbDpnKCJ4YXhpcyIsdS50cmFjZUNvb3JkaW5hdGVbMF0pLHlMYWJlbDpnKCJ5YXhpcyIsdS50cmFjZUNvb3JkaW5hdGVbMV0pLHpMYWJlbDpnKCJ6YXhpcyIsdS50cmFjZUNvb3JkaW5hdGVbMl0pfSxUPXAuY2FzdEhvdmVyaW5mbyhiLGUuZnVsbExheW91dCxfKSxrPShUfHwiIikuc3BsaXQoIisiKSxNPVQmJiJhbGwiPT09VDtiLmhvdmVydGVtcGxhdGV8fE18fCgtMT09PWsuaW5kZXhPZigieCIpJiYody54TGFiZWw9dm9pZCAwKSwtMT09PWsuaW5kZXhPZigieSIpJiYody55TGFiZWw9dm9pZCAwKSwtMT09PWsuaW5kZXhPZigieiIpJiYody56TGFiZWw9dm9pZCAwKSwtMT09PWsuaW5kZXhPZigidGV4dCIpJiYodS50ZXh0TGFiZWw9dm9pZCAwKSwtMT09PWsuaW5kZXhPZigibmFtZSIpJiYoYy5uYW1lPXZvaWQgMCkpO3ZhciBBPVtdOyJjb25lIj09PXQudHlwZXx8InN0cmVhbXR1YmUiPT09dC50eXBlPyh3LnVMYWJlbD1nKCJ4YXhpcyIsdS50cmFjZUNvb3JkaW5hdGVbM10pLChNfHwtMSE9PWsuaW5kZXhPZigidSIpKSYmQS5wdXNoKCJ1OiAiK3cudUxhYmVsKSx3LnZMYWJlbD1nKCJ5YXhpcyIsdS50cmFjZUNvb3JkaW5hdGVbNF0pLChNfHwtMSE9PWsuaW5kZXhPZigidiIpKSYmQS5wdXNoKCJ2OiAiK3cudkxhYmVsKSx3LndMYWJlbD1nKCJ6YXhpcyIsdS50cmFjZUNvb3JkaW5hdGVbNV0pLChNfHwtMSE9PWsuaW5kZXhPZigidyIpKSYmQS5wdXNoKCJ3OiAiK3cud0xhYmVsKSx3Lm5vcm1MYWJlbD11LnRyYWNlQ29vcmRpbmF0ZVs2XS50b1ByZWNpc2lvbigzKSwoTXx8LTEhPT1rLmluZGV4T2YoIm5vcm0iKSkmJkEucHVzaCgibm9ybTogIit3Lm5vcm1MYWJlbCksInN0cmVhbXR1YmUiPT09dC50eXBlJiYody5kaXZlcmdlbmNlTGFiZWw9dS50cmFjZUNvb3JkaW5hdGVbN10udG9QcmVjaXNpb24oMyksKE18fC0xIT09ay5pbmRleE9mKCJkaXZlcmdlbmNlIikpJiZBLnB1c2goImRpdmVyZ2VuY2U6ICIrdy5kaXZlcmdlbmNlTGFiZWwpKSx1LnRleHRMYWJlbCYmQS5wdXNoKHUudGV4dExhYmVsKSx5PUEuam9pbigiPGJyPiIpKToiaXNvc3VyZmFjZSI9PT10LnR5cGV8fCJ2b2x1bWUiPT09dC50eXBlPyh3LnZhbHVlTGFiZWw9Zi50aWNrVGV4dChlLl9tb2NrQXhpcyxlLl9tb2NrQXhpcy5kMmwodS50cmFjZUNvb3JkaW5hdGVbM10pLCJob3ZlciIpLnRleHQsQS5wdXNoKCJ2YWx1ZTogIit3LnZhbHVlTGFiZWwpLHUudGV4dExhYmVsJiZBLnB1c2godS50ZXh0TGFiZWwpLHk9QS5qb2luKCI8YnI+IikpOnk9dS50ZXh0TGFiZWw7dmFyIFM9e3g6dS50cmFjZUNvb3JkaW5hdGVbMF0seTp1LnRyYWNlQ29vcmRpbmF0ZVsxXSx6OnUudHJhY2VDb29yZGluYXRlWzJdLGRhdGE6Yi5faW5wdXQsZnVsbERhdGE6YixjdXJ2ZU51bWJlcjpiLmluZGV4LHBvaW50TnVtYmVyOl99O3AuYXBwZW5kQXJyYXlQb2ludFZhbHVlKFMsYixfKSx0Ll9tb2R1bGUuZXZlbnREYXRhJiYoUz1iLl9tb2R1bGUuZXZlbnREYXRhKFMsdSxiLHt9LF8pKTt2YXIgRT17cG9pbnRzOltTXX07ZS5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlJiZwLmxvbmVIb3Zlcih7dHJhY2U6Yix4OiguNSsuNSp2WzBdL3ZbM10pKmEseTooLjUtLjUqdlsxXS92WzNdKSpvLHhMYWJlbDp3LnhMYWJlbCx5TGFiZWw6dy55TGFiZWwsekxhYmVsOncuekxhYmVsLHRleHQ6eSxuYW1lOmMubmFtZSxjb2xvcjpwLmNhc3RIb3Zlck9wdGlvbihiLF8sImJnY29sb3IiKXx8Yy5jb2xvcixib3JkZXJDb2xvcjpwLmNhc3RIb3Zlck9wdGlvbihiLF8sImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpwLmNhc3RIb3Zlck9wdGlvbihiLF8sImZvbnQuZmFtaWx5IiksZm9udFNpemU6cC5jYXN0SG92ZXJPcHRpb24oYixfLCJmb250LnNpemUiKSxmb250Q29sb3I6cC5jYXN0SG92ZXJPcHRpb24oYixfLCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpwLmNhc3RIb3Zlck9wdGlvbihiLF8sIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246cC5jYXN0SG92ZXJPcHRpb24oYixfLCJhbGlnbiIpLGhvdmVydGVtcGxhdGU6aC5jYXN0T3B0aW9uKGIsXywiaG92ZXJ0ZW1wbGF0ZSIpLGhvdmVydGVtcGxhdGVMYWJlbHM6aC5leHRlbmRGbGF0KHt9LFMsdyksZXZlbnREYXRhOltTXX0se2NvbnRhaW5lcjpuLGdkOnJ9KSx1LmJ1dHRvbnMmJnUuZGlzdGFuY2U8NT9yLmVtaXQoInBsb3RseV9jbGljayIsRSk6ci5lbWl0KCJwbG90bHlfaG92ZXIiLEUpLHM9RX1lbHNlIHAubG9uZVVuaG92ZXIobiksci5lbWl0KCJwbG90bHlfdW5ob3ZlciIscyk7ZS5kcmF3QW5ub3RhdGlvbnMoZSl9LHcucmVjb3ZlckNvbnRleHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuZ2xwbG90LmRpc3Bvc2UoKTt2YXIgZT1mdW5jdGlvbigpe3QuZ2xwbG90LmdsLmlzQ29udGV4dExvc3QoKT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk6dC5pbml0aWFsaXplR0xQbG90KCk/dC5wbG90LmFwcGx5KHQsdC5wbG90QXJncyk6aC5lcnJvcigiQ2F0YXN0cm9waGljIGFuZCB1bnJlY292ZXJhYmxlIFdlYkdMIGVycm9yLiBDb250ZXh0IGxvc3QuIil9O3JlcXVlc3RBbmltYXRpb25GcmFtZShlKX07dmFyIFQ9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtmdW5jdGlvbiBrKHQsZSxyKXtmb3IodmFyIG49dC5mdWxsU2NlbmVMYXlvdXQsaT0wO2k8MztpKyspe3ZhciBhPVRbaV0sbz1hLmNoYXJBdCgwKSxzPW5bYV0sbD1lW29dLGM9ZVtvKyJjYWxlbmRhciJdLHU9ZVsiXyIrbysibGVuZ3RoIl07aWYoaC5pc0FycmF5T3JUeXBlZEFycmF5KGwpKWZvcih2YXIgZixwPTA7cDwodXx8bC5sZW5ndGgpO3ArKylpZihoLmlzQXJyYXlPclR5cGVkQXJyYXkobFtwXSkpZm9yKHZhciBkPTA7ZDxsW3BdLmxlbmd0aDsrK2QpZj1zLmQybChsW3BdW2RdLDAsYyksIWlzTmFOKGYpJiZpc0Zpbml0ZShmKSYmKHJbMF1baV09TWF0aC5taW4oclswXVtpXSxmKSxyWzFdW2ldPU1hdGgubWF4KHJbMV1baV0sZikpO2Vsc2UgZj1zLmQybChsW3BdLDAsYyksIWlzTmFOKGYpJiZpc0Zpbml0ZShmKSYmKHJbMF1baV09TWF0aC5taW4oclswXVtpXSxmKSxyWzFdW2ldPU1hdGgubWF4KHJbMV1baV0sZikpO2Vsc2UgclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLDApLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSx1LTEpfX13LnBsb3Q9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMucGxvdEFyZ3M9W3QsZSxyXSwhdGhpcy5nbHBsb3QuY29udGV4dExvc3Qpe3ZhciBuLGksYSxvLHMsbCxjPWVbdGhpcy5pZF0sdT1yW3RoaXMuaWRdO3RoaXMuZnVsbExheW91dD1lLHRoaXMuZnVsbFNjZW5lTGF5b3V0PWMsdGhpcy5heGVzT3B0aW9ucy5tZXJnZShlLGMpLHRoaXMuc3Bpa2VPcHRpb25zLm1lcmdlKGMpLHRoaXMuc2V0Vmlld3BvcnQoYyksdGhpcy51cGRhdGVGeChjLmRyYWdtb2RlLGMuaG92ZXJtb2RlKSx0aGlzLmNhbWVyYS5lbmFibGVXaGVlbD10aGlzLmdyYXBoRGl2Ll9jb250ZXh0Ll9zY3JvbGxab29tLmdsM2QsdGhpcy5nbHBsb3Quc2V0Q2xlYXJDb2xvcihkKGMuYmdjb2xvcikpLHRoaXMuc2V0Q29udmVydChzKSx0P0FycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk6dD1bXTt2YXIgaD1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoYT0wO2E8dC5sZW5ndGg7KythKSEwPT09KG49dFthXSkudmlzaWJsZSYmMCE9PW4uX2xlbmd0aCYmayh0aGlzLG4saCk7IWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZnVsbFNjZW5lTGF5b3V0LG49ci5hbm5vdGF0aW9uc3x8W10saT0wO2k8MztpKyspZm9yKHZhciBhPVRbaV0sbz1hLmNoYXJBdCgwKSxzPXJbYV0sbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYz1uW2xdO2lmKGMudmlzaWJsZSl7dmFyIHU9cy5yMmwoY1tvXSk7IWlzTmFOKHUpJiZpc0Zpbml0ZSh1KSYmKGVbMF1baV09TWF0aC5taW4oZVswXVtpXSx1KSxlWzFdW2ldPU1hdGgubWF4KGVbMV1baV0sdSkpfX19KHRoaXMsaCk7dmFyIGY9WzEsMSwxXTtmb3Iobz0wO288MzsrK28paFsxXVtvXT09PWhbMF1bb10/ZltvXT0xOmZbb109MS8oaFsxXVtvXS1oWzBdW29dKTtmb3IodGhpcy5kYXRhU2NhbGU9Zix0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucyh0aGlzKSxhPTA7YTx0Lmxlbmd0aDsrK2EpITA9PT0obj10W2FdKS52aXNpYmxlJiYwIT09bi5fbGVuZ3RoJiYoKGk9dGhpcy50cmFjZXNbbi51aWRdKT9pLmRhdGEudHlwZT09PW4udHlwZT9pLnVwZGF0ZShuKTooaS5kaXNwb3NlKCksaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKTooaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKSxpLm5hbWU9bi5uYW1lKTt2YXIgcD1PYmplY3Qua2V5cyh0aGlzLnRyYWNlcyk7dDpmb3IoYT0wO2E8cC5sZW5ndGg7KythKXtmb3Iobz0wO288dC5sZW5ndGg7KytvKWlmKHRbb10udWlkPT09cFthXSYmITA9PT10W29dLnZpc2libGUmJjAhPT10W29dLl9sZW5ndGgpY29udGludWUgdDsoaT10aGlzLnRyYWNlc1twW2FdXSkuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1twW2FdXX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyYWNlLmRhdGEuaW5kZXgtZS5fdHJhY2UuZGF0YS5pbmRleH0pKTt2YXIgZyxtPVtbMCwwLDBdLFswLDAsMF1dLHY9W10seT17fTtmb3IoYT0wO2E8MzsrK2Epe2lmKChsPShzPWNbVFthXV0pLnR5cGUpaW4geT8oeVtsXS5hY2MqPWZbYV0seVtsXS5jb3VudCs9MSk6eVtsXT17YWNjOmZbYV0sY291bnQ6MX0scy5hdXRvcmFuZ2Upe21bMF1bYV09MS8wLG1bMV1bYV09LTEvMDt2YXIgeD10aGlzLmdscGxvdC5vYmplY3RzLGI9dGhpcy5mdWxsU2NlbmVMYXlvdXQuYW5ub3RhdGlvbnN8fFtdLF89cy5fbmFtZS5jaGFyQXQoMCk7Zm9yKG89MDtvPHgubGVuZ3RoO28rKyl7dmFyIHc9eFtvXSxNPXcuYm91bmRzLEE9dy5fdHJhY2UuZGF0YS5fcGFkfHwwOyJFcnJvckJhcnMiPT09dy5jb25zdHJ1Y3Rvci5uYW1lJiZzLl9sb3dlckxvZ0Vycm9yQm91bmQ/bVswXVthXT1NYXRoLm1pbihtWzBdW2FdLHMuX2xvd2VyTG9nRXJyb3JCb3VuZCk6bVswXVthXT1NYXRoLm1pbihtWzBdW2FdLE1bMF1bYV0vZlthXS1BKSxtWzFdW2FdPU1hdGgubWF4KG1bMV1bYV0sTVsxXVthXS9mW2FdK0EpfWZvcihvPTA7bzxiLmxlbmd0aDtvKyspe3ZhciBTPWJbb107aWYoUy52aXNpYmxlKXt2YXIgRT1zLnIybChTW19dKTttWzBdW2FdPU1hdGgubWluKG1bMF1bYV0sRSksbVsxXVthXT1NYXRoLm1heChtWzFdW2FdLEUpfX1pZigicmFuZ2Vtb2RlImluIHMmJiJ0b3plcm8iPT09cy5yYW5nZW1vZGUmJihtWzBdW2FdPU1hdGgubWluKG1bMF1bYV0sMCksbVsxXVthXT1NYXRoLm1heChtWzFdW2FdLDApKSxtWzBdW2FdPm1bMV1bYV0pbVswXVthXT0tMSxtWzFdW2FdPTE7ZWxzZXt2YXIgQz1tWzFdW2FdLW1bMF1bYV07bVswXVthXS09Qy8zMixtWzFdW2FdKz1DLzMyfWlmKCJyZXZlcnNlZCI9PT1zLmF1dG9yYW5nZSl7dmFyIEw9bVswXVthXTttWzBdW2FdPW1bMV1bYV0sbVsxXVthXT1MfX1lbHNle3ZhciBQPXMucmFuZ2U7bVswXVthXT1zLnIybChQWzBdKSxtWzFdW2FdPXMucjJsKFBbMV0pfW1bMF1bYV09PT1tWzFdW2FdJiYobVswXVthXS09MSxtWzFdW2FdKz0xKSx2W2FdPW1bMV1bYV0tbVswXVthXSx0aGlzLmdscGxvdC5zZXRCb3VuZHMoYSx7bWluOm1bMF1bYV0qZlthXSxtYXg6bVsxXVthXSpmW2FdfSl9dmFyIEk9Yy5hc3BlY3Rtb2RlO2lmKCJjdWJlIj09PUkpZz1bMSwxLDFdO2Vsc2UgaWYoIm1hbnVhbCI9PT1JKXt2YXIgej1jLmFzcGVjdHJhdGlvO2c9W3oueCx6Lnksei56XX1lbHNle2lmKCJhdXRvIiE9PUkmJiJkYXRhIiE9PUkpdGhyb3cgbmV3IEVycm9yKCJzY2VuZS5qcyBhc3BlY3RSYXRpbyB3YXMgbm90IG9uZSBvZiB0aGUgZW51bWVyYXRlZCB0eXBlcyIpO3ZhciBPPVsxLDEsMV07Zm9yKGE9MDthPDM7KythKXt2YXIgRD15W2w9KHM9Y1tUW2FdXSkudHlwZV07T1thXT1NYXRoLnBvdyhELmFjYywxL0QuY291bnQpL2ZbYV19Zz0iZGF0YSI9PT1JfHxNYXRoLm1heC5hcHBseShudWxsLE8pL01hdGgubWluLmFwcGx5KG51bGwsTyk8PTQ/TzpbMSwxLDFdfWMuYXNwZWN0cmF0aW8ueD11LmFzcGVjdHJhdGlvLng9Z1swXSxjLmFzcGVjdHJhdGlvLnk9dS5hc3BlY3RyYXRpby55PWdbMV0sYy5hc3BlY3RyYXRpby56PXUuYXNwZWN0cmF0aW8uej1nWzJdLHRoaXMuZ2xwbG90LnNldEFzcGVjdHJhdGlvKGMuYXNwZWN0cmF0aW8pLHRoaXMudmlld0luaXRpYWwuYXNwZWN0cmF0aW98fCh0aGlzLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvPXt4OmMuYXNwZWN0cmF0aW8ueCx5OmMuYXNwZWN0cmF0aW8ueSx6OmMuYXNwZWN0cmF0aW8uen0pLHRoaXMudmlld0luaXRpYWwuYXNwZWN0bW9kZXx8KHRoaXMudmlld0luaXRpYWwuYXNwZWN0bW9kZT1jLmFzcGVjdG1vZGUpO3ZhciBSPWMuZG9tYWlufHxudWxsLEY9ZS5fc2l6ZXx8bnVsbDtpZihSJiZGKXt2YXIgQj10aGlzLmNvbnRhaW5lci5zdHlsZTtCLnBvc2l0aW9uPSJhYnNvbHV0ZSIsQi5sZWZ0PUYubCtSLnhbMF0qRi53KyJweCIsQi50b3A9Ri50KygxLVIueVsxXSkqRi5oKyJweCIsQi53aWR0aD1GLncqKFIueFsxXS1SLnhbMF0pKyJweCIsQi5oZWlnaHQ9Ri5oKihSLnlbMV0tUi55WzBdKSsicHgifXRoaXMuZ2xwbG90LnJlZHJhdygpfX0sdy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5nbHBsb3QmJih0aGlzLmNhbWVyYS5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsdGhpcy5jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPW51bGwsdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpLHRoaXMuZ2xwbG90PW51bGwpfSx3LmdldENhbWVyYT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmNhbWVyYS52aWV3LnJlY2FsY01hdHJpeCh0aGlzLmNhbWVyYS52aWV3Lmxhc3RUKCkpLHt1cDp7eDoodD10aGlzLmNhbWVyYSkudXBbMF0seTp0LnVwWzFdLHo6dC51cFsyXX0sY2VudGVyOnt4OnQuY2VudGVyWzBdLHk6dC5jZW50ZXJbMV0sejp0LmNlbnRlclsyXX0sZXllOnt4OnQuZXllWzBdLHk6dC5leWVbMV0sejp0LmV5ZVsyXX0scHJvamVjdGlvbjp7dHlwZTohMD09PXQuX29ydGhvPyJvcnRob2dyYXBoaWMiOiJwZXJzcGVjdGl2ZSJ9fX0sdy5zZXRWaWV3cG9ydD1mdW5jdGlvbih0KXt2YXIgZSxyPXQuY2FtZXJhO3RoaXMuY2FtZXJhLmxvb2tBdC5hcHBseSh0aGlzLFtbKGU9cikuZXllLngsZS5leWUueSxlLmV5ZS56XSxbZS5jZW50ZXIueCxlLmNlbnRlci55LGUuY2VudGVyLnpdLFtlLnVwLngsZS51cC55LGUudXAuel1dKSx0aGlzLmdscGxvdC5zZXRBc3BlY3RyYXRpbyh0LmFzcGVjdHJhdGlvKSwib3J0aG9ncmFwaGljIj09PXIucHJvamVjdGlvbi50eXBlIT09dGhpcy5jYW1lcmEuX29ydGhvJiYodGhpcy5nbHBsb3QucmVkcmF3KCksdGhpcy5nbHBsb3QuY2xlYXJSR0JBKCksdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuaW5pdGlhbGl6ZUdMUGxvdCgpKX0sdy5pc0NhbWVyYUNoYW5nZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDYW1lcmEoKSxyPWgubmVzdGVkUHJvcGVydHkodCx0aGlzLmlkKyIuY2FtZXJhIikuZ2V0KCk7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgaT1bInVwIiwiY2VudGVyIiwiZXllIl0sYT1bIngiLCJ5IiwieiJdO3JldHVybiBlW2lbcl1dJiZ0W2lbcl1dW2Fbbl1dPT09ZVtpW3JdXVthW25dXX12YXIgaT0hMTtpZih2b2lkIDA9PT1yKWk9ITA7ZWxzZXtmb3IodmFyIGE9MDthPDM7YSsrKWZvcih2YXIgbz0wO288MztvKyspaWYoIW4oZSxyLGEsbykpe2k9ITA7YnJlYWt9KCFyLnByb2plY3Rpb258fGUucHJvamVjdGlvbiYmZS5wcm9qZWN0aW9uLnR5cGUhPT1yLnByb2plY3Rpb24udHlwZSkmJihpPSEwKX1yZXR1cm4gaX0sdy5pc0FzcGVjdENoYW5nZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbHBsb3QuZ2V0QXNwZWN0cmF0aW8oKSxyPWgubmVzdGVkUHJvcGVydHkodCx0aGlzLmlkKyIuYXNwZWN0cmF0aW8iKS5nZXQoKTtyZXR1cm4gdm9pZCAwPT09cnx8ci54IT09ZS54fHxyLnkhPT1lLnl8fHIueiE9PWUuen0sdy5zYXZlTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzPXRoaXMuZnVsbExheW91dCxsPXRoaXMuaXNDYW1lcmFDaGFuZ2VkKHQpLGM9dGhpcy5pc0FzcGVjdENoYW5nZWQodCksZj1sfHxjO2lmKGYpe3ZhciBwPXt9O2lmKGwmJihlPXRoaXMuZ2V0Q2FtZXJhKCksbj0ocj1oLm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCsiLmNhbWVyYSIpKS5nZXQoKSxwW3RoaXMuaWQrIi5jYW1lcmEiXT1uKSxjJiYoaT10aGlzLmdscGxvdC5nZXRBc3BlY3RyYXRpbygpLG89KGE9aC5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5hc3BlY3RyYXRpbyIpKS5nZXQoKSxwW3RoaXMuaWQrIi5hc3BlY3RyYXRpbyJdPW8pLHUuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsdCxzLl9wcmVHVUkscCksbClyLnNldChlKSxoLm5lc3RlZFByb3BlcnR5KHMsdGhpcy5pZCsiLmNhbWVyYSIpLnNldChlKTtpZihjKWEuc2V0KGkpLGgubmVzdGVkUHJvcGVydHkocyx0aGlzLmlkKyIuYXNwZWN0cmF0aW8iKS5zZXQoaSksdGhpcy5nbHBsb3QucmVkcmF3KCl9cmV0dXJuIGZ9LHcudXBkYXRlRng9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNhbWVyYTtpZihyKWlmKCJvcmJpdCI9PT10KXIubW9kZT0ib3JiaXQiLHIua2V5QmluZGluZ01vZGU9InJvdGF0ZSI7ZWxzZSBpZigidHVybnRhYmxlIj09PXQpe3IudXA9WzAsMCwxXSxyLm1vZGU9InR1cm50YWJsZSIsci5rZXlCaW5kaW5nTW9kZT0icm90YXRlIjt2YXIgbj10aGlzLmdyYXBoRGl2LGk9bi5fZnVsbExheW91dCxhPXRoaXMuZnVsbFNjZW5lTGF5b3V0LmNhbWVyYSxvPWEudXAueCxzPWEudXAueSxsPWEudXAuejtpZihsL01hdGguc3FydChvKm8rcypzK2wqbCk8Ljk5OSl7dmFyIGM9dGhpcy5pZCsiLmNhbWVyYS51cCIsZj17eDowLHk6MCx6OjF9LHA9e307cFtjXT1mO3ZhciBkPW4ubGF5b3V0O3UuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsZCxpLl9wcmVHVUkscCksYS51cD1mLGgubmVzdGVkUHJvcGVydHkoZCxjKS5zZXQoZil9fWVsc2Ugci5rZXlCaW5kaW5nTW9kZT10O3RoaXMuZnVsbFNjZW5lTGF5b3V0LmhvdmVybW9kZT1lfSx3LnRvSW1hZ2U9ZnVuY3Rpb24odCl7dHx8KHQ9InBuZyIpLHRoaXMuc3RhdGljTW9kZSYmdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQobiksdGhpcy5nbHBsb3QucmVkcmF3KCk7dmFyIGU9dGhpcy5nbHBsb3QuZ2wscj1lLmRyYXdpbmdCdWZmZXJXaWR0aCxpPWUuZHJhd2luZ0J1ZmZlckhlaWdodDtlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpO3ZhciBhPW5ldyBVaW50OEFycmF5KHIqaSo0KTtlLnJlYWRQaXhlbHMoMCwwLHIsaSxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLGEpLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPXItMTtuPGk7KytuLC0taSlmb3IodmFyIGE9MDthPGU7KythKWZvcih2YXIgbz0wO288NDsrK28pe3ZhciBzPTQqKGUqbithKStvLGw9NCooZSppK2EpK28sYz10W3NdO3Rbc109dFtsXSx0W2xdPWN9fShhLHIsaSksZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248cjsrK24pZm9yKHZhciBpPTA7aTxlOysraSl7dmFyIGE9NCooZSpuK2kpLG89dFthKzNdO2lmKG8+MClmb3IodmFyIHM9MjU1L28sbD0wO2w8MzsrK2wpdFthK2xdPU1hdGgubWluKHMqdFthK2xdLDI1NSl9fShhLHIsaSk7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7by53aWR0aD1yLG8uaGVpZ2h0PWk7dmFyIHMsbD1vLmdldENvbnRleHQoIjJkIiksYz1sLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChjLmRhdGEuc2V0KGEpLGwucHV0SW1hZ2VEYXRhKGMsMCwwKSx0KXtjYXNlImpwZWciOnM9by50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlIndlYnAiOnM9by50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztkZWZhdWx0OnM9by50b0RhdGFVUkwoImltYWdlL3BuZyIpfXJldHVybiB0aGlzLnN0YXRpY01vZGUmJnRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKG4pLHN9LHcuc2V0Q29udmVydD1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8Mzt0Kyspe3ZhciBlPXRoaXMuZnVsbFNjZW5lTGF5b3V0W1RbdF1dO2Yuc2V0Q29udmVydChlLHRoaXMuZnVsbExheW91dCksZS5zZXRTY2FsZT1oLm5vb3B9fSx3Lm1ha2U0dGhEaW1lbnNpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdyYXBoRGl2Ll9mdWxsTGF5b3V0O3RoaXMuX21vY2tBeGlzPXt0eXBlOiJsaW5lYXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9LGYuc2V0Q29udmVydCh0aGlzLl9tb2NrQXhpcyx0KX0sZS5leHBvcnRzPV99LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjU1LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIjo3NzEsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc3MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi9sYXlvdXQvY29udmVydCI6ODQ1LCIuL2xheW91dC9zcGlrZXMiOjg0OCwiLi9sYXlvdXQvdGlja19tYXJrcyI6ODQ5LCIuL3Byb2plY3QiOjg1MCwiZ2wtcGxvdDNkIjozMDEsImhhcy1wYXNzaXZlLWV2ZW50cyI6NDE1LCJpcy1tb2JpbGUiOjQ0MSwid2ViZ2wtY29udGV4dCI6NTc4fV0sODUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtuPW58fHQubGVuZ3RoO2Zvcih2YXIgaT1uZXcgQXJyYXkobiksYT0wO2E8bjthKyspaVthXT1bdFthXSxlW2FdLHJbYV1dO3JldHVybiBpfX0se31dLDg1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9hbmltYXRpb25fYXR0cmlidXRlcyIpLGE9dCgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2F0dHJpYnV0ZXMiKSxzPXQoIi4vcGFkX2F0dHJpYnV0ZXMiKSxsPXQoIi4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9bih7ZWRpdFR5cGU6ImNhbGMifSk7Yy5mYW1pbHkuZGZsdD0nIk9wZW4gU2FucyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxjLnNpemUuZGZsdD0xMixjLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2ZvbnQ6Yyx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSxmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjb250YWluZXIiLHZhbHVlczpbImNvbnRhaW5lciIsInBhcGVyIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY29udGFpbmVyIix2YWx1ZXM6WyJjb250YWluZXIiLCJwYXBlciJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImF1dG8iLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhdXRvIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0scGFkOmwocyh7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pLHt9KSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx1bmlmb3JtdGV4dDp7bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwiaGlkZSIsInNob3ciXSxkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbWluc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGF1dG9zaXplOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJub25lIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEwLGRmbHQ6NzAwLGVkaXRUeXBlOiJwbG90In0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjQ1MCxlZGl0VHlwZToicGxvdCJ9LG1hcmdpbjp7bDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0scjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0sdDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwMCxlZGl0VHlwZToicGxvdCJ9LGI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZToicGxvdCJ9LHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxhdXRvZXhwYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxjb21wdXRlZDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHBhcGVyX2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuYmFja2dyb3VuZCxlZGl0VHlwZToicGxvdCJ9LHBsb3RfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHNlcGFyYXRvcnM6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSxoaWRlc291cmNlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJsZWdlbmQifSxjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixkZmx0OmEuZGVmYXVsdHMsZWRpdFR5cGU6ImNhbGMifSxkYXRhcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdHJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sc2VsZWN0aW9ucmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSx0ZW1wbGF0ZTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LG1vZGViYXI6e29yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6ImgiLGVkaXRUeXBlOiJtb2RlYmFyIn0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJtb2RlYmFyIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibW9kZWJhciJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im1vZGViYXIifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6Im1vZGViYXIifSxuZXdzaGFwZTpvLm5ld3NoYXBlLGFjdGl2ZXNoYXBlOm8uYWN0aXZlc2hhcGUsbWV0YTp7dmFsVHlwZToiYW55IixhcnJheU9rOiEwLGVkaXRUeXBlOiJwbG90In0sdHJhbnNpdGlvbjpsKHt9LGkudHJhbnNpdGlvbix7ZWRpdFR5cGU6Im5vbmUifSksX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHRpdGxlZm9udDpuKHtlZGl0VHlwZToibGF5b3V0c3R5bGUifSl9fX0seyIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYxNCwiLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9hdHRyaWJ1dGVzIjo2OTcsIi4uL2xpYi9leHRlbmQiOjc0MCwiLi9hbmltYXRpb25fYXR0cmlidXRlcyI6NzkzLCIuL2ZvbnRfYXR0cmlidXRlcyI6ODI3LCIuL3BhZF9hdHRyaWJ1dGVzIjo4NjF9XSw4NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49eyJvcGVuLXN0cmVldC1tYXAiOntpZDoib3NtIix2ZXJzaW9uOjgsc291cmNlczp7InBsb3RseS1vc20tdGlsZXMiOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOic8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2Fib3V0LyIgdGFyZ2V0PSJfYmxhbmsiPlx4YTkgT3BlblN0cmVldE1hcDwvYT4nLHRpbGVzOlsiaHR0cHM6Ly9hLnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwiaHR0cHM6Ly9iLnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1vc20tdGlsZXMiLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktb3NtLXRpbGVzIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwid2hpdGUtYmciOntpZDoid2hpdGUtYmciLHZlcnNpb246OCxzb3VyY2VzOnt9LGxheWVyczpbe2lkOiJ3aGl0ZS1iZyIsdHlwZToiYmFja2dyb3VuZCIscGFpbnQ6eyJiYWNrZ3JvdW5kLWNvbG9yIjoiI0ZGRkZGRiJ9LG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJjYXJ0by1wb3NpdHJvbiI6e2lkOiJjYXJ0by1wb3NpdHJvbiIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktY2FydG8tcG9zaXRyb24iOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOic8YSBocmVmPSJodHRwczovL2NhcnRvLmNvbS8iIHRhcmdldD0iX2JsYW5rIj5ceGE5IENBUlRPPC9hPicsdGlsZXM6WyJodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYy5nbG9iYWwuc3NsLmZhc3RseS5uZXQvbGlnaHRfYWxsL3t6fS97eH0ve3l9LnBuZyJdLHRpbGVTaXplOjI1Nn19LGxheWVyczpbe2lkOiJwbG90bHktY2FydG8tcG9zaXRyb24iLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktY2FydG8tcG9zaXRyb24iLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJjYXJ0by1kYXJrbWF0dGVyIjp7aWQ6ImNhcnRvLWRhcmttYXR0ZXIiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LWNhcnRvLWRhcmttYXR0ZXIiOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOic8YSBocmVmPSJodHRwczovL2NhcnRvLmNvbS8iIHRhcmdldD0iX2JsYW5rIj5ceGE5IENBUlRPPC9hPicsdGlsZXM6WyJodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYy5nbG9iYWwuc3NsLmZhc3RseS5uZXQvZGFya19hbGwve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1jYXJ0by1kYXJrbWF0dGVyIix0eXBlOiJyYXN0ZXIiLHNvdXJjZToicGxvdGx5LWNhcnRvLWRhcmttYXR0ZXIiLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJzdGFtZW4tdGVycmFpbiI6e2lkOiJzdGFtZW4tdGVycmFpbiIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktc3RhbWVuLXRlcnJhaW4iOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOidNYXAgdGlsZXMgYnkgPGEgaHJlZj0iaHR0cDovL3N0YW1lbi5jb20iPlN0YW1lbiBEZXNpZ248L2E+LCB1bmRlciA8YSBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAiPkNDIEJZIDMuMDwvYT4gfCBEYXRhIGJ5IDxhIGhyZWY9Imh0dHA6Ly9vcGVuc3RyZWV0bWFwLm9yZyI+T3BlblN0cmVldE1hcDwvYT4sIHVuZGVyIDxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0Ij5PRGJMPC9hPi4nLHRpbGVzOlsiaHR0cHM6Ly9zdGFtZW4tdGlsZXMuYS5zc2wuZmFzdGx5Lm5ldC90ZXJyYWluL3t6fS97eH0ve3l9LnBuZyJdLHRpbGVTaXplOjI1Nn19LGxheWVyczpbe2lkOiJwbG90bHktc3RhbWVuLXRlcnJhaW4iLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktc3RhbWVuLXRlcnJhaW4iLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJzdGFtZW4tdG9uZXIiOntpZDoic3RhbWVuLXRvbmVyIix2ZXJzaW9uOjgsc291cmNlczp7InBsb3RseS1zdGFtZW4tdG9uZXIiOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOidNYXAgdGlsZXMgYnkgPGEgaHJlZj0iaHR0cDovL3N0YW1lbi5jb20iPlN0YW1lbiBEZXNpZ248L2E+LCB1bmRlciA8YSBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAiPkNDIEJZIDMuMDwvYT4gfCBEYXRhIGJ5IDxhIGhyZWY9Imh0dHA6Ly9vcGVuc3RyZWV0bWFwLm9yZyI+T3BlblN0cmVldE1hcDwvYT4sIHVuZGVyIDxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0Ij5PRGJMPC9hPi4nLHRpbGVzOlsiaHR0cHM6Ly9zdGFtZW4tdGlsZXMuYS5zc2wuZmFzdGx5Lm5ldC90b25lci97en0ve3h9L3t5fS5wbmciXSx0aWxlU2l6ZToyNTZ9fSxsYXllcnM6W3tpZDoicGxvdGx5LXN0YW1lbi10b25lciIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1zdGFtZW4tdG9uZXIiLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJzdGFtZW4td2F0ZXJjb2xvciI6e2lkOiJzdGFtZW4td2F0ZXJjb2xvciIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktc3RhbWVuLXdhdGVyY29sb3IiOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOidNYXAgdGlsZXMgYnkgPGEgaHJlZj0iaHR0cDovL3N0YW1lbi5jb20iPlN0YW1lbiBEZXNpZ248L2E+LCB1bmRlciA8YSBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAiPkNDIEJZIDMuMDwvYT4gfCBEYXRhIGJ5IDxhIGhyZWY9Imh0dHA6Ly9vcGVuc3RyZWV0bWFwLm9yZyI+T3BlblN0cmVldE1hcDwvYT4sIHVuZGVyIDxhIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzMuMCI+Q0MgQlkgU0E8L2E+LicsdGlsZXM6WyJodHRwczovL3N0YW1lbi10aWxlcy5hLnNzbC5mYXN0bHkubmV0L3dhdGVyY29sb3Ive3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4td2F0ZXJjb2xvciIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1zdGFtZW4td2F0ZXJjb2xvciIsbWluem9vbTowLG1heHpvb206MjJ9XX19LGk9T2JqZWN0LmtleXMobik7ZS5leHBvcnRzPXtyZXF1aXJlZFZlcnNpb246IjEuMTAuMSIsc3R5bGVVcmxQcmVmaXg6Im1hcGJveDovL3N0eWxlcy9tYXBib3gvIixzdHlsZVVybFN1ZmZpeDoidjkiLHN0eWxlVmFsdWVzTWFwYm94OlsiYmFzaWMiLCJzdHJlZXRzIiwib3V0ZG9vcnMiLCJsaWdodCIsImRhcmsiLCJzYXRlbGxpdGUiLCJzYXRlbGxpdGUtc3RyZWV0cyJdLHN0eWxlVmFsdWVEZmx0OiJiYXNpYyIsc3R5bGVzTm9uTWFwYm94Om4sc3R5bGVWYWx1ZXNOb25NYXBib3g6aSx0cmFjZUxheWVyUHJlZml4OiJwbG90bHktdHJhY2UtbGF5ZXItIixsYXlvdXRMYXllclByZWZpeDoicGxvdGx5LWxheW91dC1sYXllci0iLHdyb25nVmVyc2lvbkVycm9yTXNnOlsiWW91ciBjdXN0b20gcGxvdGx5LmpzIGJ1bmRsZSBpcyBub3QgdXNpbmcgdGhlIGNvcnJlY3QgbWFwYm94LWdsIHZlcnNpb24iLCJQbGVhc2UgaW5zdGFsbCBtYXBib3gtZ2xAMS4xMC4xLiJdLmpvaW4oIlxuIiksbm9BY2Nlc3NUb2tlbkVycm9yTXNnOlsiTWlzc2luZyBNYXBib3ggYWNjZXNzIHRva2VuLiIsIk1hcGJveCB0cmFjZSB0eXBlIHJlcXVpcmUgYSBNYXBib3ggYWNjZXNzIHRva2VuIHRvIGJlIHJlZ2lzdGVyZWQuIiwiRm9yIGV4YW1wbGU6IiwiICBQbG90bHkucGxvdChnZCwgZGF0YSwgbGF5b3V0LCB7IG1hcGJveEFjY2Vzc1Rva2VuOiAnbXktYWNjZXNzLXRva2VuJyB9KTsiLCJNb3JlIGluZm8gaGVyZTogaHR0cHM6Ly93d3cubWFwYm94LmNvbS9oZWxwL2RlZmluZS1hY2Nlc3MtdG9rZW4vIl0uam9pbigiXG4iKSxtaXNzaW5nU3R5bGVFcnJvck1zZzpbIk5vIHZhbGlkIG1hcGJveCBzdHlsZSBmb3VuZCwgcGxlYXNlIHNldCBgbWFwYm94LnN0eWxlYCB0byBvbmUgb2Y6IixpLmpvaW4oIiwgIiksIm9yIHJlZ2lzdGVyIGEgTWFwYm94IGFjY2VzcyB0b2tlbiB0byB1c2UgYSBNYXBib3gtc2VydmVkIHN0eWxlLiJdLmpvaW4oIlxuIiksbXVsdGlwbGVUb2tlbnNFcnJvck1zZzpbIlNldCBtdWx0aXBsZSBtYXBib3ggYWNjZXNzIHRva2VuIGFjcm9zcyBkaWZmZXJlbnQgbWFwYm94IHN1YnBsb3QsIiwidXNpbmcgZmlyc3QgdG9rZW4gZm91bmQgYXMgbWFwYm94LWdsIGRvZXMgbm90IGFsbG93IG11bHRpcGxlYWNjZXNzIHRva2VucyBvbiB0aGUgc2FtZSBwYWdlLiJdLmpvaW4oIlxuIiksbWFwT25FcnJvck1zZzoiTWFwYm94IGVycm9yLiIsbWFwYm94TG9nbzp7cGF0aDA6Im0gMTAuNSwxLjI0IGMgLTUuMTEsMCAtOS4yNSw0LjE1IC05LjI1LDkuMjUgMCw1LjEgNC4xNSw5LjI1IDkuMjUsOS4yNSA1LjEsMCA5LjI1LC00LjE1IDkuMjUsLTkuMjUgMCwtNS4xMSAtNC4xNCwtOS4yNSAtOS4yNSwtOS4yNSB6IG0gNC4zOSwxMS41MyBjIC0xLjkzLDEuOTMgLTQuNzgsMi4zMSAtNi43LDIuMzEgLTAuNywwIC0xLjQxLC0wLjA1IC0yLjEsLTAuMTYgMCwwIC0xLjAyLC01LjY0IDIuMTQsLTguODEgMC44MywtMC44MyAxLjk1LC0xLjI4IDMuMTMsLTEuMjggMS4yNywwIDIuNDksMC41MSAzLjM5LDEuNDIgMS44NCwxLjg0IDEuODksNC43NSAwLjE0LDYuNTIgeiIscGF0aDE6Ik0gMTAuNSwtMC4wMSBDIDQuNywtMC4wMSAwLDQuNyAwLDEwLjQ5IGMgMCw1Ljc5IDQuNywxMC41IDEwLjUsMTAuNSA1LjgsMCAxMC41LC00LjcgMTAuNSwtMTAuNSBDIDIwLjk5LDQuNyAxNi4zLC0wLjAxIDEwLjUsLTAuMDEgWiBtIDAsMTkuNzUgYyAtNS4xMSwwIC05LjI1LC00LjE1IC05LjI1LC05LjI1IDAsLTUuMSA0LjE0LC05LjI2IDkuMjUsLTkuMjYgNS4xMSwwIDkuMjUsNC4xNSA5LjI1LDkuMjUgMCw1LjEzIC00LjE0LDkuMjYgLTkuMjUsOS4yNiB6IixwYXRoMjoiTSAxNC43NCw2LjI1IEMgMTIuOSw0LjQxIDkuOTgsNC4zNSA4LjIzLDYuMSA1LjA3LDkuMjcgNi4wOSwxNC45MSA2LjA5LDE0LjkxIGMgMCwwIDUuNjQsMS4wMiA4LjgxLC0yLjE0IEMgMTYuNjQsMTEgMTYuNTksOC4wOSAxNC43NCw2LjI1IFogbSAtMi4yNyw0LjA5IC0wLjkxLDEuODcgLTAuOSwtMS44NyAtMS44NiwtMC45MSAxLjg2LC0wLjkgMC45LC0xLjg3IDAuOTEsMS44NyAxLjg2LDAuOSB6Iixwb2x5Z29uOiIxMS41NiwxMi4yMSAxMC42NiwxMC4zNCA4LjgsOS40MyAxMC42Niw4LjUzIDExLjU2LDYuNjYgMTIuNDcsOC41MyAxNC4zMyw5LjQzIDEyLjQ3LDEwLjM0In0sc3R5bGVSdWxlczp7bWFwOiJvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7IiwibWlzc2luZy1jc3MiOiJkaXNwbGF5Om5vbmU7IixjYW5hcnk6ImJhY2tncm91bmQtY29sb3I6c2FsbW9uOyIsImN0cmwtYm90dG9tLWxlZnQiOiJwb3NpdGlvbjogYWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOiBub25lOyB6LWluZGV4OiAyOyBib3R0b206IDA7IGxlZnQ6IDA7IiwiY3RybC1ib3R0b20tcmlnaHQiOiJwb3NpdGlvbjogYWJzb2x1dGU7IHBvaW50ZXItZXZlbnRzOiBub25lOyB6LWluZGV4OiAyOyByaWdodDogMDsgYm90dG9tOiAwOyIsY3RybDoiY2xlYXI6IGJvdGg7IHBvaW50ZXItZXZlbnRzOiBhdXRvOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsiLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0IC5tYXBib3hnbC1jdHJsLWF0dHJpYi1pbm5lciI6ImRpc3BsYXk6IG5vbmU7IiwiY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDpob3ZlciAubWFwYm94Z2wtY3RybC1hdHRyaWItaW5uZXIiOiJkaXNwbGF5OiBibG9jazsgbWFyZ2luLXRvcDoycHgiLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0OmhvdmVyIjoicGFkZGluZzogMnB4IDI0cHggMnB4IDRweDsgdmlzaWJpbGl0eTogdmlzaWJsZTsgbWFyZ2luLXRvcDogNnB4OyIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6OmFmdGVyIjonY29udGVudDogIiI7IGN1cnNvcjogcG9pbnRlcjsgcG9zaXRpb246IGFic29sdXRlOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCdkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0Nzdmcgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciJTNFICUzQ3BhdGggZmlsbD0iJTIzMzMzMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00LDEwYTYsNiAwIDEsMCAxMiwwYTYsNiAwIDEsMCAtMTIsMCBNOSw3YTEsMSAwIDEsMCAyLDBhMSwxIDAgMSwwIC0yLDAgTTksMTBhMSwxIDAgMSwxIDIsMGwwLDNhMSwxIDAgMSwxIC0yLDAiLyUzRSAlM0Mvc3ZnJTNFXCcpOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7IHdpZHRoOiAyNHB4OyBoZWlnaHQ6IDI0cHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlci1yYWRpdXM6IDEycHg7JywiY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdCI6Im1pbi1oZWlnaHQ6IDIwcHg7IHBhZGRpbmc6IDA7IG1hcmdpbjogMTBweDsgcG9zaXRpb246IHJlbGF0aXZlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyBib3JkZXItcmFkaXVzOiAzcHggMTJweCAxMnB4IDNweDsiLCJjdHJsLWJvdHRvbS1yaWdodCA+IC5tYXBib3hnbC1jdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0OjphZnRlciI6ImJvdHRvbTogMDsgcmlnaHQ6IDAiLCJjdHJsLWJvdHRvbS1sZWZ0ID4gLm1hcGJveGdsLWN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6OmFmdGVyIjoiYm90dG9tOiAwOyBsZWZ0OiAwIiwiY3RybC1ib3R0b20tbGVmdCAubWFwYm94Z2wtY3RybCI6Im1hcmdpbjogMCAwIDEwcHggMTBweDsgZmxvYXQ6IGxlZnQ7IiwiY3RybC1ib3R0b20tcmlnaHQgLm1hcGJveGdsLWN0cmwiOiJtYXJnaW46IDAgMTBweCAxMHB4IDA7IGZsb2F0OiByaWdodDsiLCJjdHJsLWF0dHJpYiI6ImNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzUpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweCIsImN0cmwtYXR0cmliIGEiOiJjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjc1KTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDEycHgiLCJjdHJsLWF0dHJpYiBhOmhvdmVyIjoiY29sb3I6IGluaGVyaXQ7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIsImN0cmwtYXR0cmliIC5tYXBib3gtaW1wcm92ZS1tYXAiOiJmb250LXdlaWdodDogYm9sZDsgbWFyZ2luLWxlZnQ6IDJweDsiLCJhdHRyaWItZW1wdHkiOiJkaXNwbGF5OiBub25lOyIsImN0cmwtbG9nbyI6J2Rpc3BsYXk6YmxvY2s7IHdpZHRoOiAyMXB4OyBoZWlnaHQ6IDIxcHg7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQz94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPyUzRSAlM0NzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCAyMSAyMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjEgMjE7IiB4bWw6c3BhY2U9InByZXNlcnZlIiUzRSUzQ2cgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwLjAxKSIlM0UlM0NwYXRoIGQ9Im0gMTAuNSwxLjI0IGMgLTUuMTEsMCAtOS4yNSw0LjE1IC05LjI1LDkuMjUgMCw1LjEgNC4xNSw5LjI1IDkuMjUsOS4yNSA1LjEsMCA5LjI1LC00LjE1IDkuMjUsLTkuMjUgMCwtNS4xMSAtNC4xNCwtOS4yNSAtOS4yNSwtOS4yNSB6IG0gNC4zOSwxMS41MyBjIC0xLjkzLDEuOTMgLTQuNzgsMi4zMSAtNi43LDIuMzEgLTAuNywwIC0xLjQxLC0wLjA1IC0yLjEsLTAuMTYgMCwwIC0xLjAyLC01LjY0IDIuMTQsLTguODEgMC44MywtMC44MyAxLjk1LC0xLjI4IDMuMTMsLTEuMjggMS4yNywwIDIuNDksMC41MSAzLjM5LDEuNDIgMS44NCwxLjg0IDEuODksNC43NSAwLjE0LDYuNTIgeiIgc3R5bGU9Im9wYWNpdHk6MC45O2ZpbGw6JTIzZmZmZmZmO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgY2xhc3M9InN0MCIvJTNFJTNDcGF0aCBkPSJNIDEwLjUsLTAuMDEgQyA0LjcsLTAuMDEgMCw0LjcgMCwxMC40OSBjIDAsNS43OSA0LjcsMTAuNSAxMC41LDEwLjUgNS44LDAgMTAuNSwtNC43IDEwLjUsLTEwLjUgQyAyMC45OSw0LjcgMTYuMywtMC4wMSAxMC41LC0wLjAxIFogbSAwLDE5Ljc1IGMgLTUuMTEsMCAtOS4yNSwtNC4xNSAtOS4yNSwtOS4yNSAwLC01LjEgNC4xNCwtOS4yNiA5LjI1LC05LjI2IDUuMTEsMCA5LjI1LDQuMTUgOS4yNSw5LjI1IDAsNS4xMyAtNC4xNCw5LjI2IC05LjI1LDkuMjYgeiIgc3R5bGU9Im9wYWNpdHk6MC4zNTtlbmFibGUtYmFja2dyb3VuZDpuZXciIGNsYXNzPSJzdDEiLyUzRSUzQ3BhdGggZD0iTSAxNC43NCw2LjI1IEMgMTIuOSw0LjQxIDkuOTgsNC4zNSA4LjIzLDYuMSA1LjA3LDkuMjcgNi4wOSwxNC45MSA2LjA5LDE0LjkxIGMgMCwwIDUuNjQsMS4wMiA4LjgxLC0yLjE0IEMgMTYuNjQsMTEgMTYuNTksOC4wOSAxNC43NCw2LjI1IFogbSAtMi4yNyw0LjA5IC0wLjkxLDEuODcgLTAuOSwtMS44NyAtMS44NiwtMC45MSAxLjg2LC0wLjkgMC45LC0xLjg3IDAuOTEsMS44NyAxLjg2LDAuOSB6IiBzdHlsZT0ib3BhY2l0eTowLjM1O2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgY2xhc3M9InN0MSIvJTNFJTNDcG9seWdvbiBwb2ludHM9IjExLjU2LDEyLjIxIDEwLjY2LDEwLjM0IDguOCw5LjQzIDEwLjY2LDguNTMgMTEuNTYsNi42NiAxMi40Nyw4LjUzIDE0LjMzLDkuNDMgMTIuNDcsMTAuMzQgIiBzdHlsZT0ib3BhY2l0eTowLjk7ZmlsbDolMjNmZmZmZmY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QwIi8lM0UlM0MvZyUzRSUzQy9zdmclM0VcJyknfX19LHt9XSw4NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zcGxpdCgiICIpLGk9clswXSxhPXJbMV0sbz1uLmlzQXJyYXlPclR5cGVkQXJyYXkoZSk/bi5tZWFuKGUpOmUscz0uNStvLzEwMCxsPTEuNStvLzEwMCxjPVsiIiwiIl0sdT1bMCwwXTtzd2l0Y2goaSl7Y2FzZSJ0b3AiOmNbMF09InRvcCIsdVsxXT0tbDticmVhaztjYXNlImJvdHRvbSI6Y1swXT0iYm90dG9tIix1WzFdPWx9c3dpdGNoKGEpe2Nhc2UibGVmdCI6Y1sxXT0icmlnaHQiLHVbMF09LXM7YnJlYWs7Y2FzZSJyaWdodCI6Y1sxXT0ibGVmdCIsdVswXT1zfXJldHVybnthbmNob3I6Y1swXSYmY1sxXT9jLmpvaW4oIi0iKTpjWzBdP2NbMF06Y1sxXT9jWzFdOiJjZW50ZXIiLG9mZnNldDp1fX19LHsiLi4vLi4vbGliIjo3NTB9XSw4NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibWFwYm94LWdsIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLG89dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxzPXQoImQzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHU9dCgiLi9tYXBib3giKSxoPXIuY29uc3RhbnRzPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gZih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJigtMSE9PWguc3R5bGVWYWx1ZXNNYXBib3guaW5kZXhPZih0KXx8MD09PXQuaW5kZXhPZigibWFwYm94Oi8vIikpfXIubmFtZT0ibWFwYm94IixyLmF0dHI9InN1YnBsb3QiLHIuaWRSb290PSJtYXBib3giLHIuaWRSZWdleD1yLmF0dHJSZWdleD1pLmNvdW50ZXJSZWdleCgibWFwYm94Iiksci5hdHRyaWJ1dGVzPXtzdWJwbG90Ont2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6Im1hcGJveCIsZWRpdFR5cGU6ImNhbGMifX0sci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj10LmNhbGNkYXRhLG89ZS5fc3VicGxvdHMubWFwYm94O2lmKG4udmVyc2lvbiE9PWgucmVxdWlyZWRWZXJzaW9uKXRocm93IG5ldyBFcnJvcihoLndyb25nVmVyc2lvbkVycm9yTXNnKTt2YXIgcz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQ7aWYoIiI9PT10Ll9jb250ZXh0Lm1hcGJveEFjY2Vzc1Rva2VuKXJldHVybiIiO2Zvcih2YXIgbj1bXSxhPVtdLG89ITEscz0hMSxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBjPXJbZVtsXV0sdT1jLmFjY2Vzc3Rva2VuO2YoYy5zdHlsZSkmJih1P2kucHVzaFVuaXF1ZShuLHUpOihmKGMuX2lucHV0LnN0eWxlKSYmKGkuZXJyb3IoIlVzZXMgTWFwYm94IG1hcCBzdHlsZSwgYnV0IGRpZCBub3Qgc2V0IGFuIGFjY2VzcyB0b2tlbi4iKSxvPSEwKSxzPSEwKSksdSYmaS5wdXNoVW5pcXVlKGEsdSl9aWYocyl7dmFyIHA9bz9oLm5vQWNjZXNzVG9rZW5FcnJvck1zZzpoLm1pc3NpbmdTdHlsZUVycm9yTXNnO3Rocm93IGkuZXJyb3IocCksbmV3IEVycm9yKHApfXJldHVybiBuLmxlbmd0aD8obi5sZW5ndGg+MSYmaS53YXJuKGgubXVsdGlwbGVUb2tlbnNFcnJvck1zZyksblswXSk6KGEubGVuZ3RoJiZpLmxvZyhbIkxpc3RlZCBtYXBib3ggYWNjZXNzIHRva2VuKHMpIixhLmpvaW4oIiwiKSwiYnV0IGRpZCBub3QgdXNlIGEgTWFwYm94IG1hcCBzdHlsZSwgaWdub3JpbmcgdG9rZW4ocykuIl0uam9pbigiICIpKSwiIil9KHQsbyk7bi5hY2Nlc3NUb2tlbj1zO2Zvcih2YXIgbD0wO2w8by5sZW5ndGg7bCsrKXt2YXIgYz1vW2xdLHA9YShyLCJtYXBib3giLGMpLGQ9ZVtjXSxnPWQuX3N1YnBsb3Q7Z3x8KGc9bmV3IHUodCxjKSxlW2NdLl9zdWJwbG90PWcpLGcudmlld0luaXRpYWx8fChnLnZpZXdJbml0aWFsPXtjZW50ZXI6aS5leHRlbmRGbGF0KHt9LGQuY2VudGVyKSx6b29tOmQuem9vbSxiZWFyaW5nOmQuYmVhcmluZyxwaXRjaDpkLnBpdGNofSksZy5wbG90KHAsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5tYXBib3h8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTshZVtvXSYmbltvXS5fc3VicGxvdCYmbltvXS5fc3VicGxvdC5kZXN0cm95KCl9fSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMubWFwYm94LG49ZS5fc2l6ZSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPWVbcltpXV0sdT1hLmRvbWFpbixmPWEuX3N1YnBsb3QudG9JbWFnZSgicG5nIik7ZS5fZ2xpbWFnZXMuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6Zix4Om4ubCtuLncqdS54WzBdLHk6bi50K24uaCooMS11LnlbMV0pLHdpZHRoOm4udyoodS54WzFdLXUueFswXSksaGVpZ2h0Om4uaCoodS55WzFdLXUueVswXSkscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KTt2YXIgcD1zLnNlbGVjdChhLl9zdWJwbG90LmRpdik7aWYoIShudWxsPT09cC5zZWxlY3QoIi5tYXBib3hnbC1jdHJsLWxvZ28iKS5ub2RlKCkub2Zmc2V0UGFyZW50KSl7dmFyIGQ9ZS5fZ2xpbWFnZXMuYXBwZW5kKCJnIik7ZC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisobi5sK24udyp1LnhbMF0rMTApKyIsICIrKG4udCtuLmgqKDEtdS55WzBdKS0zMSkrIikiKSxkLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGgubWFwYm94TG9nby5wYXRoMCkuc3R5bGUoe29wYWNpdHk6LjksZmlsbDoiI2ZmZmZmZiIsImVuYWJsZS1iYWNrZ3JvdW5kIjoibmV3In0pLGQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsaC5tYXBib3hMb2dvLnBhdGgxKS5zdHlsZSgib3BhY2l0eSIsLjM1KS5zdHlsZSgiZW5hYmxlLWJhY2tncm91bmQiLCJuZXciKSxkLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGgubWFwYm94TG9nby5wYXRoMikuc3R5bGUoIm9wYWNpdHkiLC4zNSkuc3R5bGUoImVuYWJsZS1iYWNrZ3JvdW5kIiwibmV3IiksZC5hcHBlbmQoInBvbHlnb24iKS5hdHRyKCJwb2ludHMiLGgubWFwYm94TG9nby5wb2x5Z29uKS5zdHlsZSh7b3BhY2l0eTouOSxmaWxsOiIjZmZmZmZmIiwiZW5hYmxlLWJhY2tncm91bmQiOiJuZXcifSl9dmFyIGc9cC5zZWxlY3QoIi5tYXBib3hnbC1jdHJsLWF0dHJpYiIpLnRleHQoKS5yZXBsYWNlKCJJbXByb3ZlIHRoaXMgbWFwIiwiIiksbT1lLl9nbGltYWdlcy5hcHBlbmQoImciKSx2PW0uYXBwZW5kKCJ0ZXh0Iik7di50ZXh0KGcpLmNsYXNzZWQoInN0YXRpYy1hdHRyaWJ1dGlvbiIsITApLmF0dHIoeyJmb250LXNpemUiOjEyLCJmb250LWZhbWlseSI6IkFyaWFsIixjb2xvcjoicmdiYSgwLCAwLCAwLCAwLjc1KSIsInRleHQtYW5jaG9yIjoiZW5kIiwiZGF0YS11bmZvcm1hdHRlZCI6Z30pO3ZhciB5PWwuYkJveCh2Lm5vZGUoKSkseD1uLncqKHUueFsxXS11LnhbMF0pO2lmKHkud2lkdGg+eC8yKXt2YXIgYj1nLnNwbGl0KCJ8Iikuam9pbigiPGJyPiIpO3YudGV4dChiKS5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIixiKS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHQpLHk9bC5iQm94KHYubm9kZSgpKX12LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMywgIisoOC15LmhlaWdodCkrIikiKSxtLmluc2VydCgicmVjdCIsIi5zdGF0aWMtYXR0cmlidXRpb24iKS5hdHRyKHt4Oi15LndpZHRoLTYseToteS5oZWlnaHQtMyx3aWR0aDp5LndpZHRoKzYsaGVpZ2h0OnkuaGVpZ2h0KzMsZmlsbDoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KSJ9KTt2YXIgXz0xO3kud2lkdGgrNj54JiYoXz14Lyh5LndpZHRoKzYpKTt2YXIgdz1bbi5sK24udyp1LnhbMV0sbi50K24uaCooMS11LnlbMF0pXTttLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3dbMF0rIiwiK3dbMV0rIikgc2NhbGUoIitfKyIpIil9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMubWFwYm94LG49MDtuPHIubGVuZ3RoO24rKyl7ZVtyW25dXS5fc3VicGxvdC51cGRhdGVGeChlKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzI2LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NzQsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4MzYsIi4vY29uc3RhbnRzIjo4NTQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg1OCwiLi9sYXlvdXRfZGVmYXVsdHMiOjg1OSwiLi9tYXBib3giOjg2MCxkMzoxNjksIm1hcGJveC1nbCI6NDQ3fV0sODU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikuc2FuaXRpemVIVE1MLGE9dCgiLi9jb252ZXJ0X3RleHRfb3B0cyIpLG89dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBzKHQsZSl7dGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9dC51aWQrIi0iK2UsdGhpcy5pbmRleD1lLHRoaXMuaWRTb3VyY2U9InNvdXJjZS0iK3RoaXMudWlkLHRoaXMuaWRMYXllcj1vLmxheW91dExheWVyUHJlZml4K3RoaXMudWlkLHRoaXMuc291cmNlVHlwZT1udWxsLHRoaXMuc291cmNlPW51bGwsdGhpcy5sYXllclR5cGU9bnVsbCx0aGlzLmJlbG93PW51bGwsdGhpcy52aXNpYmxlPSExfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCl7aWYoIXQudmlzaWJsZSlyZXR1cm4hMTt2YXIgZT10LnNvdXJjZTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZigic3RyaW5nIiE9dHlwZW9mIGVbcl18fDA9PT1lW3JdLmxlbmd0aClyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gbi5pc1BsYWluT2JqZWN0KGUpfHwic3RyaW5nIj09dHlwZW9mIGUmJmUubGVuZ3RoPjB9ZnVuY3Rpb24gdSh0KXt2YXIgZT17fSxyPXt9O3N3aXRjaCh0LnR5cGUpe2Nhc2UiY2lyY2xlIjpuLmV4dGVuZEZsYXQocix7ImNpcmNsZS1yYWRpdXMiOnQuY2lyY2xlLnJhZGl1cywiY2lyY2xlLWNvbG9yIjp0LmNvbG9yLCJjaXJjbGUtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJsaW5lIjpuLmV4dGVuZEZsYXQocix7ImxpbmUtd2lkdGgiOnQubGluZS53aWR0aCwibGluZS1jb2xvciI6dC5jb2xvciwibGluZS1vcGFjaXR5Ijp0Lm9wYWNpdHksImxpbmUtZGFzaGFycmF5Ijp0LmxpbmUuZGFzaH0pO2JyZWFrO2Nhc2UiZmlsbCI6bi5leHRlbmRGbGF0KHIseyJmaWxsLWNvbG9yIjp0LmNvbG9yLCJmaWxsLW91dGxpbmUtY29sb3IiOnQuZmlsbC5vdXRsaW5lY29sb3IsImZpbGwtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJzeW1ib2wiOnZhciBpPXQuc3ltYm9sLG89YShpLnRleHRwb3NpdGlvbixpLmljb25zaXplKTtuLmV4dGVuZEZsYXQoZSx7Imljb24taW1hZ2UiOmkuaWNvbisiLTE1IiwiaWNvbi1zaXplIjppLmljb25zaXplLzEwLCJ0ZXh0LWZpZWxkIjppLnRleHQsInRleHQtc2l6ZSI6aS50ZXh0Zm9udC5zaXplLCJ0ZXh0LWFuY2hvciI6by5hbmNob3IsInRleHQtb2Zmc2V0IjpvLm9mZnNldCwic3ltYm9sLXBsYWNlbWVudCI6aS5wbGFjZW1lbnR9KSxuLmV4dGVuZEZsYXQocix7Imljb24tY29sb3IiOnQuY29sb3IsInRleHQtY29sb3IiOmkudGV4dGZvbnQuY29sb3IsInRleHQtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJyYXN0ZXIiOm4uZXh0ZW5kRmxhdChyLHsicmFzdGVyLWZhZGUtZHVyYXRpb24iOjAsInJhc3Rlci1vcGFjaXR5Ijp0Lm9wYWNpdHl9KX1yZXR1cm57bGF5b3V0OmUscGFpbnQ6cn19bC51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy52aXNpYmxlP3RoaXMubmVlZHNOZXdJbWFnZSh0KT90aGlzLnVwZGF0ZUltYWdlKHQpOnRoaXMubmVlZHNOZXdTb3VyY2UodCk/KHRoaXMucmVtb3ZlTGF5ZXIoKSx0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKTp0aGlzLm5lZWRzTmV3TGF5ZXIodCk/dGhpcy51cGRhdGVMYXllcih0KTp0aGlzLnVwZGF0ZVN0eWxlKHQpOih0aGlzLnVwZGF0ZVNvdXJjZSh0KSx0aGlzLnVwZGF0ZUxheWVyKHQpKSx0aGlzLnZpc2libGU9Yyh0KX0sbC5uZWVkc05ld0ltYWdlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN1YnBsb3QubWFwLmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmImltYWdlIj09PXRoaXMuc291cmNlVHlwZSYmImltYWdlIj09PXQuc291cmNldHlwZSYmKHRoaXMuc291cmNlIT09dC5zb3VyY2V8fEpTT04uc3RyaW5naWZ5KHRoaXMuY29vcmRpbmF0ZXMpIT09SlNPTi5zdHJpbmdpZnkodC5jb29yZGluYXRlcykpfSxsLm5lZWRzTmV3U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvdXJjZVR5cGUhPT10LnNvdXJjZXR5cGV8fHRoaXMuc291cmNlIT09dC5zb3VyY2V8fHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfSxsLm5lZWRzTmV3TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfHx0aGlzLmJlbG93IT09dGhpcy5zdWJwbG90LmJlbG93TG9va3VwWyJsYXlvdXQtIit0aGlzLmluZGV4XX0sbC51cGRhdGVJbWFnZT1mdW5jdGlvbih0KXt0aGlzLnN1YnBsb3QubWFwLmdldFNvdXJjZSh0aGlzLmlkU291cmNlKS51cGRhdGVJbWFnZSh7dXJsOnQuc291cmNlLGNvb3JkaW5hdGVzOnQuY29vcmRpbmF0ZXN9KX0sbC51cGRhdGVTb3VyY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdWJwbG90Lm1hcDtpZihlLmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmZS5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSksdGhpcy5zb3VyY2VUeXBlPXQuc291cmNldHlwZSx0aGlzLnNvdXJjZT10LnNvdXJjZSxjKHQpKXt2YXIgcj1mdW5jdGlvbih0KXt2YXIgZSxyPXQuc291cmNldHlwZSxuPXQuc291cmNlLGE9e3R5cGU6cn07Imdlb2pzb24iPT09cj9lPSJkYXRhIjoidmVjdG9yIj09PXI/ZT0ic3RyaW5nIj09dHlwZW9mIG4/InVybCI6InRpbGVzIjoicmFzdGVyIj09PXI/KGU9InRpbGVzIixhLnRpbGVTaXplPTI1Nik6ImltYWdlIj09PXImJihlPSJ1cmwiLGEuY29vcmRpbmF0ZXM9dC5jb29yZGluYXRlcyk7YVtlXT1uLHQuc291cmNlYXR0cmlidXRpb24mJihhLmF0dHJpYnV0aW9uPWkodC5zb3VyY2VhdHRyaWJ1dGlvbikpO3JldHVybiBhfSh0KTtlLmFkZFNvdXJjZSh0aGlzLmlkU291cmNlLHIpfX0sbC51cGRhdGVMYXllcj1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuc3VicGxvdCxuPXUodCksaT10aGlzLnN1YnBsb3QuYmVsb3dMb29rdXBbImxheW91dC0iK3RoaXMuaW5kZXhdO2lmKCJ0cmFjZXMiPT09aSlmb3IodmFyIGE9ci5nZXRNYXBMYXllcnMoKSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10uaWQ7aWYoInN0cmluZyI9PXR5cGVvZiBsJiYwPT09bC5pbmRleE9mKG8udHJhY2VMYXllclByZWZpeCkpe2U9bDticmVha319ZWxzZSBlPWk7dGhpcy5yZW1vdmVMYXllcigpLGModCkmJnIuYWRkTGF5ZXIoe2lkOnRoaXMuaWRMYXllcixzb3VyY2U6dGhpcy5pZFNvdXJjZSwic291cmNlLWxheWVyIjp0LnNvdXJjZWxheWVyfHwiIix0eXBlOnQudHlwZSxtaW56b29tOnQubWluem9vbSxtYXh6b29tOnQubWF4em9vbSxsYXlvdXQ6bi5sYXlvdXQscGFpbnQ6bi5wYWludH0sZSksdGhpcy5sYXllclR5cGU9dC50eXBlLHRoaXMuYmVsb3c9aX0sbC51cGRhdGVTdHlsZT1mdW5jdGlvbih0KXtpZihjKHQpKXt2YXIgZT11KHQpO3RoaXMuc3VicGxvdC5zZXRPcHRpb25zKHRoaXMuaWRMYXllciwic2V0TGF5b3V0UHJvcGVydHkiLGUubGF5b3V0KSx0aGlzLnN1YnBsb3Quc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldFBhaW50UHJvcGVydHkiLGUucGFpbnQpfX0sbC5yZW1vdmVMYXllcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3VicGxvdC5tYXA7dC5nZXRMYXllcih0aGlzLmlkTGF5ZXIpJiZ0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllcil9LGwuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3VicGxvdC5tYXA7dC5nZXRMYXllcih0aGlzLmlkTGF5ZXIpJiZ0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllciksdC5nZXRTb3VyY2UodGhpcy5pZFNvdXJjZSkmJnQucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2UpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBzKHQsZSk7cmV0dXJuIG4udXBkYXRlKHIpLG59fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc3NCwiLi9jb25zdGFudHMiOjg1NCwiLi9jb252ZXJ0X3RleHRfb3B0cyI6ODU1fV0sODU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLmRlZmF1bHRMaW5lLGE9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyIpLnRleHRwb3NpdGlvbixsPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxjPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSx1PXQoIi4vY29uc3RhbnRzIiksaD1vKHt9KTtoLmZhbWlseS5kZmx0PSJPcGVuIFNhbnMgUmVndWxhciwgQXJpYWwgVW5pY29kZSBNUyBSZWd1bGFyIiwoZS5leHBvcnRzPWwoe19hcnJheUF0dHJSZWdleHBzOltuLmNvdW50ZXJSZWdleCgibWFwYm94IiwiLmxheWVycyIsITApXSxkb21haW46YSh7bmFtZToibWFwYm94In0pLGFjY2Vzc3Rva2VuOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwfSxzdHlsZTp7dmFsVHlwZToiYW55Iix2YWx1ZXM6dS5zdHlsZVZhbHVlc01hcGJveC5jb25jYXQodS5zdHlsZVZhbHVlc05vbk1hcGJveCksZGZsdDp1LnN0eWxlVmFsdWVEZmx0fSxjZW50ZXI6e2xvbjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGxhdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9fSx6b29tOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MX0sYmVhcmluZzp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LHBpdGNoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sbGF5ZXJzOmMoImxheWVyIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc291cmNldHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ2VvanNvbiIsInZlY3RvciIsInJhc3RlciIsImltYWdlIl0sZGZsdDoiZ2VvanNvbiJ9LHNvdXJjZTp7dmFsVHlwZToiYW55In0sc291cmNlbGF5ZXI6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sc291cmNlYXR0cmlidXRpb246e3ZhbFR5cGU6InN0cmluZyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNpcmNsZSIsImxpbmUiLCJmaWxsIiwic3ltYm9sIiwicmFzdGVyIl0sZGZsdDoiY2lyY2xlIn0sY29vcmRpbmF0ZXM6e3ZhbFR5cGU6ImFueSJ9LGJlbG93Ont2YWxUeXBlOiJzdHJpbmcifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LG1pbnpvb206e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjI0LGRmbHQ6MH0sbWF4em9vbTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MjQsZGZsdDoyNH0sY2lyY2xlOntyYWRpdXM6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxNX19LGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6Mn0sZGFzaDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9fSxmaWxsOntvdXRsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Oml9fSxzeW1ib2w6e2ljb246e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoibWFya2VyIn0saWNvbnNpemU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMH0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxwbGFjZW1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBvaW50IiwibGluZSIsImxpbmUtY2VudGVyIl0sZGZsdDoicG9pbnQifSx0ZXh0Zm9udDpoLHRleHRwb3NpdGlvbjpuLmV4dGVuZEZsYXQoe30scyx7YXJyYXlPazohMX0pfX0pfSwicGxvdCIsImZyb20tcm9vdCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzgxLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODgsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExNTgsIi4uL2RvbWFpbiI6ODI2LCIuLi9mb250X2F0dHJpYnV0ZXMiOjgyNywiLi9jb25zdGFudHMiOjg1NH1dLDg1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxhPXQoIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIsbil7cigiYWNjZXNzdG9rZW4iLG4uYWNjZXNzVG9rZW4pLHIoInN0eWxlIikscigiY2VudGVyLmxvbiIpLHIoImNlbnRlci5sYXQiKSxyKCJ6b29tIikscigiYmVhcmluZyIpLHIoInBpdGNoIiksYSh0LGUse25hbWU6ImxheWVycyIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KSxlLl9pbnB1dD10fWZ1bmN0aW9uIGwodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLmxheWVycyxyLGkpfWlmKHIoInZpc2libGUiKSl7dmFyIGksYT1yKCJzb3VyY2V0eXBlIikscz0icmFzdGVyIj09PWF8fCJpbWFnZSI9PT1hO3IoInNvdXJjZSIpLHIoInNvdXJjZWF0dHJpYnV0aW9uIiksInZlY3RvciI9PT1hJiZyKCJzb3VyY2VsYXllciIpLCJpbWFnZSI9PT1hJiZyKCJjb29yZGluYXRlcyIpLHMmJihpPSJyYXN0ZXIiKTt2YXIgbD1yKCJ0eXBlIixpKTtzJiYicmFzdGVyIiE9PWwmJihsPWUudHlwZT0icmFzdGVyIixuLmxvZygiU291cmNlIHR5cGVzICpyYXN0ZXIqIGFuZCAqaW1hZ2UqIG11c3QgZHJhd24gKnJhc3RlciogbGF5ZXIgdHlwZS4iKSkscigiYmVsb3ciKSxyKCJjb2xvciIpLHIoIm9wYWNpdHkiKSxyKCJtaW56b29tIikscigibWF4em9vbSIpLCJjaXJjbGUiPT09bCYmcigiY2lyY2xlLnJhZGl1cyIpLCJsaW5lIj09PWwmJihyKCJsaW5lLndpZHRoIikscigibGluZS5kYXNoIikpLCJmaWxsIj09PWwmJnIoImZpbGwub3V0bGluZWNvbG9yIiksInN5bWJvbCI9PT1sJiYocigic3ltYm9sLmljb24iKSxyKCJzeW1ib2wuaWNvbnNpemUiKSxyKCJzeW1ib2wudGV4dCIpLG4uY29lcmNlRm9udChyLCJzeW1ib2wudGV4dGZvbnQiKSxyKCJzeW1ib2wudGV4dHBvc2l0aW9uIikscigic3ltYm9sLnBsYWNlbWVudCIpKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpKHQsZSxyLHt0eXBlOiJtYXBib3giLGF0dHJpYnV0ZXM6byxoYW5kbGVEZWZhdWx0czpzLHBhcnRpdGlvbjoieSIsYWNjZXNzVG9rZW46ZS5fbWFwYm94QWNjZXNzVG9rZW59KX19LHsiLi4vLi4vbGliIjo3NTAsIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6Nzk0LCIuLi9zdWJwbG90X2RlZmF1bHRzIjo4NzYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg1OH1dLDg2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtYXBib3gtZ2wiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksdT10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKSxoPXUucmVjdE1vZGUsZj11LmRyYXdNb2RlLHA9dS5zZWxlY3RNb2RlLGQ9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QsZz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikuY2xlYXJTZWxlY3QsbT10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikuY2xlYXJTZWxlY3Rpb25zQ2FjaGUsdj10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Iikuc2VsZWN0T25DbGljayx5PXQoIi4vY29uc3RhbnRzIikseD10KCIuL2xheWVycyIpO2Z1bmN0aW9uIGIodCxlKXt0aGlzLmlkPWUsdGhpcy5nZD10O3ZhciByPXQuX2Z1bGxMYXlvdXQsbj10Ll9jb250ZXh0O3RoaXMuY29udGFpbmVyPXIuX2dsY29udGFpbmVyLm5vZGUoKSx0aGlzLmlzU3RhdGljPW4uc3RhdGljUGxvdCx0aGlzLnVpZD1yLl91aWQrIi0iK3RoaXMuaWQsdGhpcy5kaXY9bnVsbCx0aGlzLnhheGlzPW51bGwsdGhpcy55YXhpcz1udWxsLHRoaXMuY3JlYXRlRnJhbWV3b3JrKHIpLHRoaXMubWFwPW51bGwsdGhpcy5hY2Nlc3NUb2tlbj1udWxsLHRoaXMuc3R5bGVPYmo9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVyTGlzdD1bXSx0aGlzLmJlbG93TG9va3VwPXt9LHRoaXMuZHJhZ2dpbmc9ITEsdGhpcy53aGVlbGluZz0hMX12YXIgXz1iLnByb3RvdHlwZTtfLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcyxhPWVbaS5pZF07aS5tYXAmJmEuYWNjZXNzdG9rZW4hPT1pLmFjY2Vzc1Rva2VuJiYoaS5tYXAucmVtb3ZlKCksaS5tYXA9bnVsbCxpLnN0eWxlT2JqPW51bGwsaS50cmFjZUhhc2g9e30saS5sYXllckxpc3Q9W10pLG49aS5tYXA/bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7aS51cGRhdGVNYXAodCxlLHIsbil9KSk6bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7aS5jcmVhdGVNYXAodCxlLHIsbil9KSksci5wdXNoKG4pfSxfLmNyZWF0ZU1hcD1mdW5jdGlvbih0LGUscixpKXt2YXIgbz10aGlzLHM9ZVtvLmlkXSxsPW8uc3R5bGVPYmo9VChzLnN0eWxlKTtvLmFjY2Vzc1Rva2VuPXMuYWNjZXNzdG9rZW47dmFyIGM9by5tYXA9bmV3IG4uTWFwKHtjb250YWluZXI6by5kaXYsc3R5bGU6bC5zdHlsZSxjZW50ZXI6TShzLmNlbnRlciksem9vbTpzLnpvb20sYmVhcmluZzpzLmJlYXJpbmcscGl0Y2g6cy5waXRjaCxpbnRlcmFjdGl2ZTohby5pc1N0YXRpYyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6by5pc1N0YXRpYyxkb3VibGVDbGlja1pvb206ITEsYm94Wm9vbTohMSxhdHRyaWJ1dGlvbkNvbnRyb2w6ITF9KS5hZGRDb250cm9sKG5ldyBuLkF0dHJpYnV0aW9uQ29udHJvbCh7Y29tcGFjdDohMH0pKTtjLl9jYW52YXMuc3R5bGUubGVmdD0iMHB4IixjLl9jYW52YXMuc3R5bGUudG9wPSIwcHgiLG8ucmVqZWN0T25FcnJvcihpKSxvLmlzU3RhdGljfHxvLmluaXRGeCh0LGUpO3ZhciB1PVtdO3UucHVzaChuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7Yy5vbmNlKCJsb2FkIix0KX0pKSksdT11LmNvbmNhdChhLmZldGNoVHJhY2VHZW9EYXRhKHQpKSxQcm9taXNlLmFsbCh1KS50aGVuKChmdW5jdGlvbigpe28uZmlsbEJlbG93TG9va3VwKHQsZSksby51cGRhdGVEYXRhKHQpLG8udXBkYXRlTGF5b3V0KGUpLG8ucmVzb2x2ZU9uUmVuZGVyKHIpfSkpLmNhdGNoKGkpfSxfLnVwZGF0ZU1hcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLG89aS5tYXAscz1lW3RoaXMuaWRdO2kucmVqZWN0T25FcnJvcihuKTt2YXIgbD1bXSxjPVQocy5zdHlsZSk7SlNPTi5zdHJpbmdpZnkoaS5zdHlsZU9iaikhPT1KU09OLnN0cmluZ2lmeShjKSYmKGkuc3R5bGVPYmo9YyxvLnNldFN0eWxlKGMuc3R5bGUpLGkudHJhY2VIYXNoPXt9LGwucHVzaChuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7by5vbmNlKCJzdHlsZWRhdGEiLHQpfSkpKSksbD1sLmNvbmNhdChhLmZldGNoVHJhY2VHZW9EYXRhKHQpKSxQcm9taXNlLmFsbChsKS50aGVuKChmdW5jdGlvbigpe2kuZmlsbEJlbG93TG9va3VwKHQsZSksaS51cGRhdGVEYXRhKHQpLGkudXBkYXRlTGF5b3V0KGUpLGkucmVzb2x2ZU9uUmVuZGVyKHIpfSkpLmNhdGNoKG4pfSxfLmZpbGxCZWxvd0xvb2t1cD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1lW3RoaXMuaWRdLmxheWVycyxhPXRoaXMuYmVsb3dMb29rdXA9e30sbz0hMTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgcz10W3JdWzBdLnRyYWNlLGw9cy5fbW9kdWxlOyJzdHJpbmciPT10eXBlb2Ygcy5iZWxvdz9uPXMuYmVsb3c6bC5nZXRCZWxvdyYmKG49bC5nZXRCZWxvdyhzLHRoaXMpKSwiIj09PW4mJihvPSEwKSxhWyJ0cmFjZS0iK3MudWlkXT1ufHwiIn1mb3Iocj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgYz1pW3JdO249InN0cmluZyI9PXR5cGVvZiBjLmJlbG93P2MuYmVsb3c6bz8idHJhY2VzIjoiIixhWyJsYXlvdXQtIityXT1ufXZhciB1LGgsZj17fTtmb3IodSBpbiBhKWZbbj1hW3VdXT9mW25dLnB1c2godSk6ZltuXT1bdV07Zm9yKG4gaW4gZil7dmFyIHA9ZltuXTtpZihwLmxlbmd0aD4xKWZvcihyPTA7cjxwLmxlbmd0aDtyKyspMD09PSh1PXBbcl0pLmluZGV4T2YoInRyYWNlLSIpPyhoPXUuc3BsaXQoInRyYWNlLSIpWzFdLHRoaXMudHJhY2VIYXNoW2hdJiYodGhpcy50cmFjZUhhc2hbaF0uYmVsb3c9bnVsbCkpOjA9PT11LmluZGV4T2YoImxheW91dC0iKSYmKGg9dS5zcGxpdCgibGF5b3V0LSIpWzFdLHRoaXMubGF5ZXJMaXN0W2hdJiYodGhpcy5sYXllckxpc3RbaF0uYmVsb3c9bnVsbCkpfX07dmFyIHc9e2Nob3JvcGxldGhtYXBib3g6MCxkZW5zaXR5bWFwYm94OjEsc2NhdHRlcm1hcGJveDoyfTtmdW5jdGlvbiBUKHQpe3ZhciBlPXt9O3JldHVybiBpLmlzUGxhaW5PYmplY3QodCk/KGUuaWQ9dC5pZCxlLnN0eWxlPXQpOiJzdHJpbmciPT10eXBlb2YgdD8oZS5pZD10LC0xIT09eS5zdHlsZVZhbHVlc01hcGJveC5pbmRleE9mKHQpP2Uuc3R5bGU9ayh0KTp5LnN0eWxlc05vbk1hcGJveFt0XT9lLnN0eWxlPXkuc3R5bGVzTm9uTWFwYm94W3RdOmUuc3R5bGU9dCk6KGUuaWQ9eS5zdHlsZVZhbHVlRGZsdCxlLnN0eWxlPWsoeS5zdHlsZVZhbHVlRGZsdCkpLGUudHJhbnNpdGlvbj17ZHVyYXRpb246MCxkZWxheTowfSxlfWZ1bmN0aW9uIGsodCl7cmV0dXJuIHkuc3R5bGVVcmxQcmVmaXgrdCsiLSIreS5zdHlsZVVybFN1ZmZpeH1mdW5jdGlvbiBNKHQpe3JldHVyblt0Lmxvbix0LmxhdF19Xy51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcy50cmFjZUhhc2gsbz10LnNsaWNlKCkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gd1t0WzBdLnRyYWNlLnR5cGVdLXdbZVswXS50cmFjZS50eXBlXX0pKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXt2YXIgcz1vW25dLGw9ITE7KGU9YVsocj1zWzBdLnRyYWNlKS51aWRdKSYmKGUudHlwZT09PXIudHlwZT8oZS51cGRhdGUocyksbD0hMCk6ZS5kaXNwb3NlKCkpLCFsJiZyLl9tb2R1bGUmJihhW3IudWlkXT1yLl9tb2R1bGUucGxvdCh0aGlzLHMpKX12YXIgYz1PYmplY3Qua2V5cyhhKTt0OmZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciB1PWNbbl07Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpZih1PT09KHI9dFtpXVswXS50cmFjZSkudWlkKWNvbnRpbnVlIHQ7KGU9YVt1XSkuZGlzcG9zZSgpLGRlbGV0ZSBhW3VdfX0sXy51cGRhdGVMYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXAscj10W3RoaXMuaWRdO3RoaXMuZHJhZ2dpbmd8fHRoaXMud2hlZWxpbmd8fChlLnNldENlbnRlcihNKHIuY2VudGVyKSksZS5zZXRab29tKHIuem9vbSksZS5zZXRCZWFyaW5nKHIuYmVhcmluZyksZS5zZXRQaXRjaChyLnBpdGNoKSksdGhpcy51cGRhdGVMYXllcnModCksdGhpcy51cGRhdGVGcmFtZXdvcmsodCksdGhpcy51cGRhdGVGeCh0KSx0aGlzLm1hcC5yZXNpemUoKSx0aGlzLmdkLl9jb250ZXh0Ll9zY3JvbGxab29tLm1hcGJveD9lLnNjcm9sbFpvb20uZW5hYmxlKCk6ZS5zY3JvbGxab29tLmRpc2FibGUoKX0sXy5yZXNvbHZlT25SZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXA7ZS5vbigicmVuZGVyIiwoZnVuY3Rpb24gcigpe2UubG9hZGVkKCkmJihlLm9mZigicmVuZGVyIixyKSxzZXRUaW1lb3V0KHQsMTApKX0pKX0sXy5yZWplY3RPbkVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2Z1bmN0aW9uIHIoKXt0KG5ldyBFcnJvcih5Lm1hcE9uRXJyb3JNc2cpKX1lLm9uY2UoImVycm9yIixyKSxlLm9uY2UoInN0eWxlLmVycm9yIixyKSxlLm9uY2UoInNvdXJjZS5lcnJvciIsciksZS5vbmNlKCJ0aWxlLmVycm9yIixyKSxlLm9uY2UoImxheWVyLmVycm9yIixyKX0sXy5jcmVhdGVGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuaWQ9ZS51aWQsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGUuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLGUueGF4aXM9e19pZDoieCIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueH19LGUueWF4aXM9e19pZDoieSIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueX19LGUudXBkYXRlRnJhbWV3b3JrKHQpLGUubW9ja0F4aXM9e3R5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn0scy5zZXRDb252ZXJ0KGUubW9ja0F4aXMsdCl9LF8uaW5pdEZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLm1hcDtmdW5jdGlvbiBhKCl7Yy5sb25lVW5ob3ZlcihlLl9ob3ZlcmxheWVyKX1mdW5jdGlvbiBzKCl7dmFyIHQ9ci5nZXRWaWV3KCk7bi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHIuZ2V0Vmlld0VkaXRzV2l0aERlcml2ZWQodCkpfWkub24oIm1vdmVlbmQiLChmdW5jdGlvbih0KXtpZihyLm1hcCl7dmFyIGU9bi5fZnVsbExheW91dDtpZih0Lm9yaWdpbmFsRXZlbnR8fHIud2hlZWxpbmcpe3ZhciBpPWVbci5pZF07by5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixuLmxheW91dCxlLl9wcmVHVUksci5nZXRWaWV3RWRpdHMoaSkpO3ZhciBhPXIuZ2V0VmlldygpO2kuX2lucHV0LmNlbnRlcj1pLmNlbnRlcj1hLmNlbnRlcixpLl9pbnB1dC56b29tPWkuem9vbT1hLnpvb20saS5faW5wdXQuYmVhcmluZz1pLmJlYXJpbmc9YS5iZWFyaW5nLGkuX2lucHV0LnBpdGNoPWkucGl0Y2g9YS5waXRjaCxuLmVtaXQoInBsb3RseV9yZWxheW91dCIsci5nZXRWaWV3RWRpdHNXaXRoRGVyaXZlZChhKSl9dC5vcmlnaW5hbEV2ZW50JiYibW91c2V1cCI9PT10Lm9yaWdpbmFsRXZlbnQudHlwZT9yLmRyYWdnaW5nPSExOnIud2hlZWxpbmcmJihyLndoZWVsaW5nPSExKSxlLl9yZWhvdmVyJiZlLl9yZWhvdmVyKCl9fSkpLGkub24oIndoZWVsIiwoZnVuY3Rpb24oKXtyLndoZWVsaW5nPSEwfSkpLGkub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXIuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QuY2xpZW50WD10LnBvaW50LngrZS5sZWZ0LHQuY2xpZW50WT10LnBvaW50LnkrZS50b3AsdC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIueGF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHQubG5nTGF0LmxuZ30sci55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5sbmdMYXQubGF0fSxuLl9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7bi5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ci5pZCYmbi5fZnVsbExheW91dFtyLmlkXSYmYy5ob3ZlcihuLHQsci5pZCl9LGMuaG92ZXIobix0LHIuaWQpLG4uX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yLmlkfSkpLGkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7ci5kcmFnZ2luZz0hMCxhKCl9KSksaS5vbigiem9vbXN0YXJ0IixhKSxpLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7bi5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PW51bGx9KSksaS5vbigiZHJhZyIscyksaS5vbigiem9vbSIscyksaS5vbigiZGJsY2xpY2siLChmdW5jdGlvbigpe3ZhciB0PW4uX2Z1bGxMYXlvdXRbci5pZF07by5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixuLmxheW91dCxuLl9mdWxsTGF5b3V0Ll9wcmVHVUksci5nZXRWaWV3RWRpdHModCkpO3ZhciBlPXIudmlld0luaXRpYWw7aS5zZXRDZW50ZXIoTShlLmNlbnRlcikpLGkuc2V0Wm9vbShlLnpvb20pLGkuc2V0QmVhcmluZyhlLmJlYXJpbmcpLGkuc2V0UGl0Y2goZS5waXRjaCk7dmFyIGE9ci5nZXRWaWV3KCk7dC5faW5wdXQuY2VudGVyPXQuY2VudGVyPWEuY2VudGVyLHQuX2lucHV0Lnpvb209dC56b29tPWEuem9vbSx0Ll9pbnB1dC5iZWFyaW5nPXQuYmVhcmluZz1hLmJlYXJpbmcsdC5faW5wdXQucGl0Y2g9dC5waXRjaD1hLnBpdGNoLG4uZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxuLmVtaXQoInBsb3RseV9yZWxheW91dCIsci5nZXRWaWV3RWRpdHNXaXRoRGVyaXZlZChhKSl9KSksci5jbGVhclNlbGVjdD1mdW5jdGlvbigpe20oci5kcmFnT3B0aW9ucyksZyhyLmRyYWdPcHRpb25zLmdkKX0sci5vbkNsaWNrSW5QYW5Gbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9bi5fZnVsbExheW91dC5jbGlja21vZGU7aS5pbmRleE9mKCJzZWxlY3QiKT4tMSYmdihlLm9yaWdpbmFsRXZlbnQsbixbci54YXhpc10sW3IueWF4aXNdLHIuaWQsdCksaS5pbmRleE9mKCJldmVudCIpPi0xJiZjLmNsaWNrKG4sZS5vcmlnaW5hbEV2ZW50KX19fSxfLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLm1hcCxuPWUuZ2Q7aWYoIWUuaXNTdGF0aWMpe3ZhciBhLG89dC5kcmFnbW9kZTthPWgobyk/ZnVuY3Rpb24odCxyKXsodC5yYW5nZT17fSlbZS5pZF09W2MoW3IueG1pbixyLnltaW5dKSxjKFtyLnhtYXgsci55bWF4XSldfTpmdW5jdGlvbih0LHIsbil7KHQubGFzc29Qb2ludHM9e30pW2UuaWRdPW4uZmlsdGVyZWQubWFwKGMpfTt2YXIgcz1lLmRyYWdPcHRpb25zO2UuZHJhZ09wdGlvbnM9aS5leHRlbmREZWVwKHN8fHt9LHtkcmFnbW9kZTp0LmRyYWdtb2RlLGVsZW1lbnQ6ZS5kaXYsZ2Q6bixwbG90aW5mbzp7aWQ6ZS5pZCxkb21haW46dFtlLmlkXS5kb21haW4seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLGZpbGxSYW5nZUl0ZW1zOmF9LHhheGVzOltlLnhheGlzXSx5YXhlczpbZS55YXhpc10sc3VicGxvdDplLmlkfSksci5vZmYoImNsaWNrIixlLm9uQ2xpY2tJblBhbkhhbmRsZXIpLHAobyl8fGYobyk/KHIuZHJhZ1Bhbi5kaXNhYmxlKCksci5vbigiem9vbXN0YXJ0IixlLmNsZWFyU2VsZWN0KSxlLmRyYWdPcHRpb25zLnByZXBGbj1mdW5jdGlvbih0LHIsbil7ZCh0LHIsbixlLmRyYWdPcHRpb25zLG8pfSxsLmluaXQoZS5kcmFnT3B0aW9ucykpOihyLmRyYWdQYW4uZW5hYmxlKCksci5vZmYoInpvb21zdGFydCIsZS5jbGVhclNlbGVjdCksZS5kaXYub25tb3VzZWRvd249bnVsbCxlLm9uQ2xpY2tJblBhbkhhbmRsZXI9ZS5vbkNsaWNrSW5QYW5GbihlLmRyYWdPcHRpb25zKSxyLm9uKCJjbGljayIsZS5vbkNsaWNrSW5QYW5IYW5kbGVyKSl9ZnVuY3Rpb24gYyh0KXt2YXIgcj1lLm1hcC51bnByb2plY3QodCk7cmV0dXJuW3IubG5nLHIubGF0XX19LF8udXBkYXRlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRbdGhpcy5pZF0uZG9tYWluLHI9dC5fc2l6ZSxuPXRoaXMuZGl2LnN0eWxlO24ud2lkdGg9ci53KihlLnhbMV0tZS54WzBdKSsicHgiLG4uaGVpZ2h0PXIuaCooZS55WzFdLWUueVswXSkrInB4IixuLmxlZnQ9ci5sK2UueFswXSpyLncrInB4IixuLnRvcD1yLnQrKDEtZS55WzFdKSpyLmgrInB4Iix0aGlzLnhheGlzLl9vZmZzZXQ9ci5sK2UueFswXSpyLncsdGhpcy54YXhpcy5fbGVuZ3RoPXIudyooZS54WzFdLWUueFswXSksdGhpcy55YXhpcy5fb2Zmc2V0PXIudCsoMS1lLnlbMV0pKnIuaCx0aGlzLnlheGlzLl9sZW5ndGg9ci5oKihlLnlbMV0tZS55WzBdKX0sXy51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGUscj10W3RoaXMuaWRdLmxheWVycyxuPXRoaXMubGF5ZXJMaXN0O2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpe2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspbltlXS5kaXNwb3NlKCk7Zm9yKG49dGhpcy5sYXllckxpc3Q9W10sZT0wO2U8ci5sZW5ndGg7ZSsrKW4ucHVzaCh4KHRoaXMsZSxyW2VdKSl9ZWxzZSBmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKW5bZV0udXBkYXRlKHJbZV0pfSxfLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMubWFwLnJlbW92ZSgpLHRoaXMubWFwPW51bGwsdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5kaXYpKX0sXy50b0ltYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwLnN0b3AoKSx0aGlzLm1hcC5nZXRDYW52YXMoKS50b0RhdGFVUkwoKX0sXy5zZXRPcHRpb25zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gcil0aGlzLm1hcFtlXSh0LG4scltuXSl9LF8uZ2V0TWFwTGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwLmdldFN0eWxlKCkubGF5ZXJzfSxfLmFkZExheWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5tYXA7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigiIj09PWUpcmV0dXJuIHZvaWQgci5hZGRMYXllcih0LGUpO2Zvcih2YXIgbj10aGlzLmdldE1hcExheWVycygpLGE9MDthPG4ubGVuZ3RoO2ErKylpZihlPT09blthXS5pZClyZXR1cm4gdm9pZCByLmFkZExheWVyKHQsZSk7aS53YXJuKFsiVHJ5aW5nIHRvIGFkZCBsYXllciB3aXRoICpiZWxvdyogdmFsdWUiLGUsInJlZmVyZW5jaW5nIGEgbGF5ZXIgdGhhdCBkb2VzIG5vdCBleGlzdCIsIm9yIHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LiJdLmpvaW4oIiAiKSl9ci5hZGRMYXllcih0KX0sXy5wcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5wcm9qZWN0KG5ldyBuLkxuZ0xhdCh0WzBdLHRbMV0pKX0sXy5nZXRWaWV3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXAsZT10LmdldENlbnRlcigpLHI9e2xvbjplLmxuZyxsYXQ6ZS5sYXR9LG49dC5nZXRDYW52YXMoKSxpPW4ud2lkdGgsYT1uLmhlaWdodDtyZXR1cm57Y2VudGVyOnIsem9vbTp0LmdldFpvb20oKSxiZWFyaW5nOnQuZ2V0QmVhcmluZygpLHBpdGNoOnQuZ2V0UGl0Y2goKSxfZGVyaXZlZDp7Y29vcmRpbmF0ZXM6W3QudW5wcm9qZWN0KFswLDBdKS50b0FycmF5KCksdC51bnByb2plY3QoW2ksMF0pLnRvQXJyYXkoKSx0LnVucHJvamVjdChbaSxhXSkudG9BcnJheSgpLHQudW5wcm9qZWN0KFswLGFdKS50b0FycmF5KCldfX19LF8uZ2V0Vmlld0VkaXRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmlkLHI9WyJjZW50ZXIiLCJ6b29tIiwiYmVhcmluZyIsInBpdGNoIl0sbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07bltlKyIuIithXT10W2FdfXJldHVybiBufSxfLmdldFZpZXdFZGl0c1dpdGhEZXJpdmVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLmdldFZpZXdFZGl0cyh0KTtyZXR1cm4gcltlKyIuX2Rlcml2ZWQiXT10Ll9kZXJpdmVkLHJ9LGUuZXhwb3J0cz1ifSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjYzNCwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2MzMsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY1NSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjc0MywiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vY2FydGVzaWFuL3NlbGVjdCI6ODE4LCIuL2NvbnN0YW50cyI6ODU0LCIuL2xheWVycyI6ODU3LCJtYXBib3gtZ2wiOjQ0N31dLDg2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lZGl0VHlwZTtyZXR1cm57dDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0scjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sYjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sbDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sZWRpdFR5cGU6ZX19fSx7fV0sODYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJkMy10aW1lLWZvcm1hdCIpLnRpbWVGb3JtYXRMb2NhbGUsYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89dCgiLi4vcmVnaXN0cnkiKSxzPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksbD10KCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksYz10KCIuLi9saWIiKSx1PXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxoPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sZj10KCIuL2NhcnRlc2lhbi9heGlzX2lkcyIpLHA9dCgiLi9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiKS5jbGVhclNlbGVjdCxkPXQoIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxnPXQoIi4vZnJhbWVfYXR0cmlidXRlcyIpLG09dCgiLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSx2PWMucmVsaW5rUHJpdmF0ZUtleXMseT1jLl8seD1lLmV4cG9ydHM9e307Yy5leHRlbmRGbGF0KHgsbykseC5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLHguYXR0cmlidXRlcy50eXBlLnZhbHVlcz14LmFsbFR5cGVzLHguZm9udEF0dHJzPXQoIi4vZm9udF9hdHRyaWJ1dGVzIikseC5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSx4LmZvbnRXZWlnaHQ9Im5vcm1hbCI7dmFyIGI9eC50cmFuc2Zvcm1zUmVnaXN0cnksXz10KCIuL2NvbW1hbmQiKTt4LmV4ZWN1dGVBUElDb21tYW5kPV8uZXhlY3V0ZUFQSUNvbW1hbmQseC5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPV8uY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncyx4Lm1hbmFnZUNvbW1hbmRPYnNlcnZlcj1fLm1hbmFnZUNvbW1hbmRPYnNlcnZlcix4Lmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncz1fLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncyx4LnJlZHJhd1RleHQ9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9Yy5nZXRHcmFwaERpdih0KSkuX2Z1bGxMYXlvdXR8fHt9O2lmKCEoIShlLl9oYXMmJmUuX2hhcygicG9sYXIiKSkmJnQuZGF0YSYmdC5kYXRhWzBdJiZ0LmRhdGFbMF0ucikpcmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe28uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXciKSh0KSxvLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KSxlKHgucHJldmlvdXNQcm9taXNlcyh0KSl9KSwzMDApfSkpfSx4LnJlc2l6ZT1mdW5jdGlvbih0KXt2YXIgZTt0PWMuZ2V0R3JhcGhEaXYodCk7dmFyIHI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dCYmIWMuaXNIaWRkZW4odCl8fG4obmV3IEVycm9yKCJSZXNpemUgbXVzdCBiZSBwYXNzZWQgYSBkaXNwbGF5ZWQgcGxvdCBkaXYgZWxlbWVudC4iKSksdC5fcmVkcmF3VGltZXImJmNsZWFyVGltZW91dCh0Ll9yZWRyYXdUaW1lciksdC5fcmVzb2x2ZVJlc2l6ZSYmKGU9dC5fcmVzb2x2ZVJlc2l6ZSksdC5fcmVzb2x2ZVJlc2l6ZT1yLHQuX3JlZHJhd1RpbWVyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aWYoIXQubGF5b3V0fHx0LmxheW91dC53aWR0aCYmdC5sYXlvdXQuaGVpZ2h0fHxjLmlzSGlkZGVuKHQpKXIodCk7ZWxzZXtkZWxldGUgdC5sYXlvdXQud2lkdGgsZGVsZXRlIHQubGF5b3V0LmhlaWdodDt2YXIgZT10LmNoYW5nZWQ7dC5hdXRvcGxheT0hMCxvLmNhbGwoInJlbGF5b3V0Iix0LHthdXRvc2l6ZTohMH0pLnRoZW4oKGZ1bmN0aW9uKCl7dC5jaGFuZ2VkPWUsdC5fcmVzb2x2ZVJlc2l6ZT09PXImJihkZWxldGUgdC5fcmVzb2x2ZVJlc2l6ZSxyKHQpKX0pKX19KSwxMDApfSkpO3JldHVybiBlJiZlKHIpLHJ9LHgucHJldmlvdXNQcm9taXNlcz1mdW5jdGlvbih0KXtpZigodC5fcHJvbWlzZXN8fFtdKS5sZW5ndGgpcmV0dXJuIFByb21pc2UuYWxsKHQuX3Byb21pc2VzKS50aGVuKChmdW5jdGlvbigpe3QuX3Byb21pc2VzPVtdfSkpfSx4LmFkZExpbmtzPWZ1bmN0aW9uKHQpe2lmKHQuX2NvbnRleHQuc2hvd0xpbmt8fHQuX2NvbnRleHQuc2hvd1NvdXJjZXMpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1jLmVuc3VyZVNpbmdsZShlLl9wYXBlciwidGV4dCIsImpzLXBsb3QtbGluay1jb250YWluZXIiLChmdW5jdGlvbih0KXt0LnN0eWxlKHsiZm9udC1mYW1pbHkiOiciT3BlbiBTYW5zIiwgQXJpYWwsIHNhbnMtc2VyaWYnLCJmb250LXNpemUiOiIxMnB4IixmaWxsOnUuZGVmYXVsdExpbmUsInBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtbGluay10by10b29sIiwhMCksdC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtbGluay1zcGFjZXIiLCEwKSx0LmFwcGVuZCgidHNwYW4iKS5jbGFzc2VkKCJqcy1zb3VyY2VsaW5rcyIsITApfSkpfSkpLGk9ci5ub2RlKCksYT17eTplLl9wYXBlci5hdHRyKCJoZWlnaHQiKS05fTtkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGkpJiZpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPj1lLndpZHRoLTIwPyhhWyJ0ZXh0LWFuY2hvciJdPSJzdGFydCIsYS54PTUpOihhWyJ0ZXh0LWFuY2hvciJdPSJlbmQiLGEueD1lLl9wYXBlci5hdHRyKCJ3aWR0aCIpLTcpLHIuYXR0cihhKTt2YXIgbz1yLnNlbGVjdCgiLmpzLWxpbmstdG8tdG9vbCIpLHM9ci5zZWxlY3QoIi5qcy1saW5rLXNwYWNlciIpLGw9ci5zZWxlY3QoIi5qcy1zb3VyY2VsaW5rcyIpO3QuX2NvbnRleHQuc2hvd1NvdXJjZXMmJnQuX2NvbnRleHQuc2hvd1NvdXJjZXModCksdC5fY29udGV4dC5zaG93TGluayYmZnVuY3Rpb24odCxlKXtlLnRleHQoIiIpO3ZhciByPWUuYXBwZW5kKCJhIikuYXR0cih7InhsaW5rOnhsaW5rOmhyZWYiOiIjIixjbGFzczoibGluay0taW1wdCBsaW5rLS1lbWJlZHZpZXciLCJmb250LXdlaWdodCI6ImJvbGQifSkudGV4dCh0Ll9jb250ZXh0LmxpbmtUZXh0KyIgIitTdHJpbmcuZnJvbUNoYXJDb2RlKDE4NykpO2lmKHQuX2NvbnRleHQuc2VuZERhdGEpci5vbigiY2xpY2siLChmdW5jdGlvbigpe3guc2VuZERhdGFUb0Nsb3VkKHQpfSkpO2Vsc2V7dmFyIG49d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCIvIiksaT13aW5kb3cubG9jYXRpb24uc2VhcmNoO3IuYXR0cih7InhsaW5rOnhsaW5rOnNob3ciOiJuZXciLCJ4bGluazp4bGluazpocmVmIjoiLyIrblsyXS5zcGxpdCgiLiIpWzBdKyIvIituWzFdK2l9KX19KHQsbykscy50ZXh0KG8udGV4dCgpJiZsLnRleHQoKT8iIC0gIjoiIil9fSx4LnNlbmREYXRhVG9DbG91ZD1mdW5jdGlvbih0KXt2YXIgZT0od2luZG93LlBMT1RMWUVOVnx8e30pLkJBU0VfVVJMfHx0Ll9jb250ZXh0LnBsb3RseVNlcnZlclVSTDtpZihlKXt0LmVtaXQoInBsb3RseV9iZWZvcmVleHBvcnQiKTt2YXIgcj1uLnNlbGVjdCh0KS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiaGlkZGVuZm9ybSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGk9ci5hcHBlbmQoImZvcm0iKS5hdHRyKHthY3Rpb246ZSsiL2V4dGVybmFsIixtZXRob2Q6InBvc3QiLHRhcmdldDoiX2JsYW5rIn0pO3JldHVybiBpLmFwcGVuZCgiaW5wdXQiKS5hdHRyKHt0eXBlOiJ0ZXh0IixuYW1lOiJkYXRhIn0pLm5vZGUoKS52YWx1ZT14LmdyYXBoSnNvbih0LCExLCJrZWVwZGF0YSIpLGkubm9kZSgpLnN1Ym1pdCgpLHIucmVtb3ZlKCksdC5lbWl0KCJwbG90bHlfYWZ0ZXJleHBvcnQiKSwhMX19O3ZhciB3PVsiZGF5cyIsInNob3J0RGF5cyIsIm1vbnRocyIsInNob3J0TW9udGhzIiwicGVyaW9kcyIsImRhdGVUaW1lIiwiZGF0ZSIsInRpbWUiLCJkZWNpbWFsIiwidGhvdXNhbmRzIiwiZ3JvdXBpbmciLCJjdXJyZW5jeSJdLFQ9WyJ5ZWFyIiwibW9udGgiLCJkYXlNb250aCIsImRheU1vbnRoWWVhciJdO2Z1bmN0aW9uIGsodCxlKXt2YXIgcj10Ll9jb250ZXh0LmxvY2FsZSxuPSExLGk9e307ZnVuY3Rpb24gYSh0KXtmb3IodmFyIHI9ITAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lbb118fCh0W29dP2lbb109dFtvXTpyPSExKX1yJiYobj0hMCl9Zm9yKHZhciBzPTA7czwyO3MrKyl7Zm9yKHZhciBsPXQuX2NvbnRleHQubG9jYWxlcyxjPTA7YzwyO2MrKyl7dmFyIHU9KGxbcl18fHt9KS5mb3JtYXQ7aWYodSYmKGEodSksbikpYnJlYWs7bD1vLmxvY2FsZVJlZ2lzdHJ5fXZhciBoPXIuc3BsaXQoIi0iKVswXTtpZihufHxoPT09cilicmVhaztyPWh9cmV0dXJuIG58fGEoby5sb2NhbGVSZWdpc3RyeS5lbi5mb3JtYXQpLGl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPXtfZnVsbExheW91dDplfSxuPSJ4Ij09PXQuX2lkLmNoYXJBdCgwKSxpPXQuX21haW5BeGlzLl9hbmNob3JBeGlzLGE9IiIsbz0iIixzPSIiO2lmKGkmJihzPWkuX21haW5BeGlzLl9pZCxhPW4/dC5faWQrczpzK3QuX2lkKSwhYXx8IWUuX3Bsb3RzW2FdKXthPSIiO2Zvcih2YXIgbD10Ll9jb3VudGVyQXhlcyxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY10saD1uP3QuX2lkK3U6dSt0Ll9pZDtvfHwobz1oKTt2YXIgcD1mLmdldEZyb21JZChyLHUpO2lmKHMmJnAub3ZlcmxheWluZz09PXMpe2E9aDticmVha319fXJldHVybiBhfHxvfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC50cmFuc2Zvcm1zO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9bi5fbW9kdWxlfHxiW24udHlwZV07aWYoaSYmaS5tYWtlc0RhdGEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUyh0LGUscixuKXtmb3IodmFyIGk9dC50cmFuc2Zvcm1zLGE9W3RdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxsPWJbcy50eXBlXTtsJiZsLnRyYW5zZm9ybSYmKGE9bC50cmFuc2Zvcm0oYSx7dHJhbnNmb3JtOnMsZnVsbFRyYWNlOnQsZnVsbERhdGE6ZSxsYXlvdXQ6cixmdWxsTGF5b3V0Om4sdHJhbnNmb3JtSW5kZXg6b30pKX1yZXR1cm4gYX1mdW5jdGlvbiBFKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmInB4Ij09PXQuc3Vic3RyKHQubGVuZ3RoLTIpJiZwYXJzZUZsb2F0KHQpfWZ1bmN0aW9uIEModCl7dmFyIGU9dC5tYXJnaW47aWYoIXQuX3NpemUpe3ZhciByPXQuX3NpemU9e2w6TWF0aC5yb3VuZChlLmwpLHI6TWF0aC5yb3VuZChlLnIpLHQ6TWF0aC5yb3VuZChlLnQpLGI6TWF0aC5yb3VuZChlLmIpLHA6TWF0aC5yb3VuZChlLnBhZCl9O3Iudz1NYXRoLnJvdW5kKHQud2lkdGgpLXIubC1yLnIsci5oPU1hdGgucm91bmQodC5oZWlnaHQpLXIudC1yLmJ9dC5fcHVzaG1hcmdpbnx8KHQuX3B1c2htYXJnaW49e30pLHQuX3B1c2htYXJnaW5JZHN8fCh0Ll9wdXNobWFyZ2luSWRzPXt9KX14LnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSYmZS5za2lwVXBkYXRlQ2FsYyxhPXQuX2Z1bGxMYXlvdXR8fHt9O2lmKGEuX3NraXBEZWZhdWx0cylkZWxldGUgYS5fc2tpcERlZmF1bHRzO2Vsc2V7dmFyIHMsbD10Ll9mdWxsTGF5b3V0PXt9LHU9dC5sYXlvdXR8fHt9LGg9dC5fZnVsbERhdGF8fFtdLGY9dC5fZnVsbERhdGE9W10sZD10LmRhdGF8fFtdLGc9dC5jYWxjZGF0YXx8W10sbT10Ll9jb250ZXh0fHx7fTt0Ll90cmFuc2l0aW9uRGF0YXx8eC5jcmVhdGVUcmFuc2l0aW9uRGF0YSh0KSxsLl9kZmx0VGl0bGU9e3Bsb3Q6eSh0LCJDbGljayB0byBlbnRlciBQbG90IHRpdGxlIikseDp5KHQsIkNsaWNrIHRvIGVudGVyIFggYXhpcyB0aXRsZSIpLHk6eSh0LCJDbGljayB0byBlbnRlciBZIGF4aXMgdGl0bGUiKSxjb2xvcmJhcjp5KHQsIkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiKSxhbm5vdGF0aW9uOnkodCwibmV3IHRleHQiKX0sbC5fdHJhY2VXb3JkPXkodCwidHJhY2UiKTt2YXIgYj1rKHQsdyk7aWYobC5fbWFwYm94QWNjZXNzVG9rZW49bS5tYXBib3hBY2Nlc3NUb2tlbixhLl9pbml0aWFsQXV0b1NpemVJc0RvbmUpe3ZhciBfPWEud2lkdGgsTT1hLmhlaWdodDt4LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKHUsbCxiKSx1LndpZHRofHwobC53aWR0aD1fKSx1LmhlaWdodHx8KGwuaGVpZ2h0PU0pLHguc2FuaXRpemVNYXJnaW5zKGwpfWVsc2V7eC5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyh1LGwsYik7dmFyIEE9IXUud2lkdGh8fCF1LmhlaWdodCxTPWwuYXV0b3NpemUsRT1tLmF1dG9zaXphYmxlO0EmJihTfHxFKT94LnBsb3RBdXRvU2l6ZSh0LHUsbCk6QSYmeC5zYW5pdGl6ZU1hcmdpbnMobCksIVMmJkEmJih1LndpZHRoPWwud2lkdGgsdS5oZWlnaHQ9bC5oZWlnaHQpfWwuX2QzbG9jYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGVjaW1hbD1lLmNoYXJBdCgwKSx0LnRob3VzYW5kcz1lLmNoYXJBdCgxKSx7bnVtYmVyRm9ybWF0Om4ubG9jYWxlKHQpLm51bWJlckZvcm1hdCx0aW1lRm9ybWF0OmkodCkudXRjRm9ybWF0fX0oYixsLnNlcGFyYXRvcnMpLGwuX2V4dHJhRm9ybWF0PWsodCxUKSxsLl9pbml0aWFsQXV0b1NpemVJc0RvbmU9ITAsbC5fZGF0YUxlbmd0aD1kLmxlbmd0aCxsLl9tb2R1bGVzPVtdLGwuX3Zpc2libGVNb2R1bGVzPVtdLGwuX2Jhc2VQbG90TW9kdWxlcz1bXTt2YXIgTD1sLl9zdWJwbG90cz1mdW5jdGlvbigpe3ZhciB0LGUscj1vLmNvbGxlY3RhYmxlU3VicGxvdFR5cGVzLG49e307aWYoIXIpe3I9W107dmFyIGk9by5zdWJwbG90c1JlZ2lzdHJ5O2Zvcih2YXIgYSBpbiBpKXt2YXIgcz1pW2FdLmF0dHI7aWYocyYmKHIucHVzaChhKSxBcnJheS5pc0FycmF5KHMpKSlmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKWMucHVzaFVuaXF1ZShyLHNbZV0pfX1mb3IodD0wO3Q8ci5sZW5ndGg7dCsrKW5bclt0XV09W107cmV0dXJuIG59KCksUD1sLl9zcGxvbUF4ZXM9e3g6e30seTp7fX0sST1sLl9zcGxvbVN1YnBsb3RzPXt9O2wuX3NwbG9tR3JpZERmbHQ9e30sbC5fc2NhdHRlclN0YWNrT3B0cz17fSxsLl9maXJzdFNjYXR0ZXI9e30sbC5fYWxpZ25tZW50T3B0cz17fSxsLl9jb2xvckF4ZXM9e30sbC5fcmVxdWVzdFJhbmdlc2xpZGVyPXt9LGwuX3RyYWNlVWlkcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1lLmxlbmd0aCxhPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl0uX2Z1bGxJbnB1dDtvIT09biYmYS5wdXNoKG8pLG49b312YXIgcz1hLmxlbmd0aCxsPW5ldyBBcnJheShpKSx1PXt9O2Z1bmN0aW9uIGgodCxlKXtsW2VdPXQsdVt0XT0xfWZ1bmN0aW9uIGYodCxlKXtpZih0JiYic3RyaW5nIj09dHlwZW9mIHQmJiF1W3RdKXJldHVybiBoKHQsZSksITB9Zm9yKHI9MDtyPGk7cisrKXt2YXIgcD1lW3JdLnVpZDsibnVtYmVyIj09dHlwZW9mIHAmJihwPVN0cmluZyhwKSksZihwLHIpfHwocjxzJiZmKGFbcl0udWlkLHIpfHxoKGMucmFuZHN0cih1KSxyKSl9cmV0dXJuIGx9KGgsZCksbC5fZ2xvYmFsVHJhbnNmb3Jtcz0odC5fY29udGV4dHx8e30pLmdsb2JhbFRyYW5zZm9ybXMseC5zdXBwbHlEYXRhRGVmYXVsdHMoZCxmLHUsbCk7dmFyIHo9T2JqZWN0LmtleXMoUC54KSxPPU9iamVjdC5rZXlzKFAueSk7aWYoei5sZW5ndGg+MSYmTy5sZW5ndGg+MSl7Zm9yKG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJncmlkIiwic2l6ZURlZmF1bHRzIikodSxsKSxzPTA7czx6Lmxlbmd0aDtzKyspYy5wdXNoVW5pcXVlKEwueGF4aXMseltzXSk7Zm9yKHM9MDtzPE8ubGVuZ3RoO3MrKyljLnB1c2hVbmlxdWUoTC55YXhpcyxPW3NdKTtmb3IodmFyIEQgaW4gSSljLnB1c2hVbmlxdWUoTC5jYXJ0ZXNpYW4sRCl9aWYobC5faGFzPXguX2hhc1Bsb3RUeXBlLmJpbmQobCksaC5sZW5ndGg9PT1mLmxlbmd0aClmb3Iocz0wO3M8Zi5sZW5ndGg7cysrKXYoZltzXSxoW3NdKTt4LnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzKHUsbCxmLHQuX3RyYW5zaXRpb25EYXRhKTt2YXIgUj1sLl92aXNpYmxlTW9kdWxlcyxGPVtdO2ZvcihzPTA7czxSLmxlbmd0aDtzKyspe3ZhciBCPVJbc10uY3Jvc3NUcmFjZURlZmF1bHRzO0ImJmMucHVzaFVuaXF1ZShGLEIpfWZvcihzPTA7czxGLmxlbmd0aDtzKyspRltzXShmLGwpO2wuX2hhc09ubHlMYXJnZVNwbG9tcz0xPT09bC5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aCYmInNwbG9tIj09PWwuX2Jhc2VQbG90TW9kdWxlc1swXS5uYW1lJiZ6Lmxlbmd0aD4xNSYmTy5sZW5ndGg+MTUmJjA9PT1sLnNoYXBlcy5sZW5ndGgmJjA9PT1sLmltYWdlcy5sZW5ndGgsbC5faGFzQ2FydGVzaWFuPWwuX2hhcygiY2FydGVzaWFuIiksbC5faGFzR2VvPWwuX2hhcygiZ2VvIiksbC5faGFzR0wzRD1sLl9oYXMoImdsM2QiKSxsLl9oYXNHTDJEPWwuX2hhcygiZ2wyZCIpLGwuX2hhc1Rlcm5hcnk9bC5faGFzKCJ0ZXJuYXJ5IiksbC5faGFzUGllPWwuX2hhcygicGllIikseC5saW5rU3VicGxvdHMoZixsLGgsYSkseC5jbGVhblBsb3QoZixsLGgsYSk7dmFyIE49ISghYS5faGFzfHwhYS5faGFzKCJnbDJkIikpLGo9ISghbC5faGFzfHwhbC5faGFzKCJnbDJkIikpLFU9ISghYS5faGFzfHwhYS5faGFzKCJjYXJ0ZXNpYW4iKSl8fE4sVj0hKCFsLl9oYXN8fCFsLl9oYXMoImNhcnRlc2lhbiIpKXx8ajtVJiYhVj9hLl9iZ0xheWVyLnJlbW92ZSgpOlYmJiFVJiYobC5fc2hvdWxkQ3JlYXRlQmdMYXllcj0hMCksYS5fem9vbWxheWVyJiYhdC5fZHJhZ2dpbmcmJnAoe19mdWxsTGF5b3V0OmF9KSxmdW5jdGlvbih0LGUpe3ZhciByLG49W107ZS5tZXRhJiYocj1lLl9tZXRhPXttZXRhOmUubWV0YSxsYXlvdXQ6e21ldGE6ZS5tZXRhfX0pO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO2EubWV0YT9uW2EuaW5kZXhdPWEuX21ldGE9e21ldGE6YS5tZXRhfTplLm1ldGEmJihhLl9tZXRhPXttZXRhOmUubWV0YX0pLGUubWV0YSYmKGEuX21ldGEubGF5b3V0PXttZXRhOmUubWV0YX0pfW4ubGVuZ3RoJiYocnx8KHI9ZS5fbWV0YT17fSksci5kYXRhPW4pfShmLGwpLHYobCxhKSxvLmdldENvbXBvbmVudE1ldGhvZCgiY29sb3JzY2FsZSIsImNyb3NzVHJhY2VEZWZhdWx0cyIpKGYsbCksbC5fcHJlR1VJfHwobC5fcHJlR1VJPXt9KSxsLl90cmFjZVByZUdVSXx8KGwuX3RyYWNlUHJlR1VJPXt9KTt2YXIgcSxIPWwuX3RyYWNlUHJlR1VJLEc9e307Zm9yKHEgaW4gSClHW3FdPSJvbGQiO2ZvcihzPTA7czxmLmxlbmd0aDtzKyspR1txPWZbc10uX2Z1bGxJbnB1dC51aWRdfHwoSFtxXT17fSksR1txXT0ibmV3Ijtmb3IocSBpbiBHKSJvbGQiPT09R1txXSYmZGVsZXRlIEhbcV07QyhsKSxvLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJtYWtlRGF0YSIpKGwpLHJ8fGcubGVuZ3RoIT09Zi5sZW5ndGh8fHguc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKGcsZil9fSx4LnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9KHRbcl18fFtdKVswXTtpZihpJiZpLnRyYWNlKXt2YXIgYT1pLnRyYWNlO2lmKGEuX2hhc0NhbGNUcmFuc2Zvcm0pe3ZhciBvLHMsbCx1PWEuX2FycmF5QXR0cnM7Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzPXVbb10sbD1jLm5lc3RlZFByb3BlcnR5KGEscykuZ2V0KCkuc2xpY2UoKSxjLm5lc3RlZFByb3BlcnR5KG4scykuc2V0KGwpfWkudHJhY2U9bn19fSx4LmNyZWF0ZVRyYW5zaXRpb25EYXRhPWZ1bmN0aW9uKHQpe3QuX3RyYW5zaXRpb25EYXRhfHwodC5fdHJhbnNpdGlvbkRhdGE9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXN8fCh0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzPVtdKSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNofHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSksdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXJ8fCh0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcj0wKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcz1bXSl9LHguX2hhc1Bsb3RUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKWlmKHJbZV0ubmFtZT09PXQpcmV0dXJuITA7dmFyIG49dGhpcy5fbW9kdWxlc3x8W107Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIGk9bltlXS5uYW1lO2lmKGk9PT10KXJldHVybiEwO3ZhciBhPW8ubW9kdWxlc1tpXTtpZihhJiZhLmNhdGVnb3JpZXNbdF0pcmV0dXJuITB9cmV0dXJuITF9LHguY2xlYW5QbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBzPW9baV07cy5jbGVhbiYmcy5jbGVhbih0LGUscixuKX12YXIgbD1uLl9oYXMmJm4uX2hhcygiZ2wiKSxjPWUuX2hhcyYmZS5faGFzKCJnbCIpO2wmJiFjJiZ2b2lkIDAhPT1uLl9nbGNvbnRhaW5lciYmKG4uX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLnJlbW92ZSgpLG4uX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLm5vLXdlYmdsIikucmVtb3ZlKCksbi5fZ2xjYW52YXM9bnVsbCk7dmFyIHU9ISFuLl9pbmZvbGF5ZXI7dDpmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgaD1yW2ldLnVpZDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXtpZihoPT09dFthXS51aWQpY29udGludWUgdH11JiZuLl9pbmZvbGF5ZXIuc2VsZWN0KCIuY2IiK2gpLnJlbW92ZSgpfX0seC5saW5rU3VicGxvdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxzPW4uX3Bsb3RzfHx7fSxsPWUuX3Bsb3RzPXt9LHU9ZS5fc3VicGxvdHMsaD17X2Z1bGxEYXRhOnQsX2Z1bGxMYXlvdXQ6ZX0scD11LmNhcnRlc2lhbi5jb25jYXQodS5nbDJkfHxbXSk7Zm9yKGk9MDtpPHAubGVuZ3RoO2krKyl7dmFyIGQsZz1wW2ldLG09c1tnXSx2PWYuZ2V0RnJvbUlkKGgsZywieCIpLHk9Zi5nZXRGcm9tSWQoaCxnLCJ5Iik7Zm9yKG0/ZD1sW2ddPW06KGQ9bFtnXT17fSkuaWQ9Zyx2Ll9jb3VudGVyQXhlcy5wdXNoKHkuX2lkKSx5Ll9jb3VudGVyQXhlcy5wdXNoKHYuX2lkKSx2Ll9zdWJwbG90c1dpdGgucHVzaChnKSx5Ll9zdWJwbG90c1dpdGgucHVzaChnKSxkLnhheGlzPXYsZC55YXhpcz15LGQuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciB4PXRbYV07aWYoeC54YXhpcz09PWQueGF4aXMuX2lkJiZ4LnlheGlzPT09ZC55YXhpcy5faWQmJiExPT09eC5jbGlwb25heGlzKXtkLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fX12YXIgYixfPWYubGlzdChoLG51bGwsITApO2ZvcihpPTA7aTxfLmxlbmd0aDtpKyspe3ZhciB3PW51bGw7KGI9X1tpXSkub3ZlcmxheWluZyYmKHc9Zi5nZXRGcm9tSWQoaCxiLm92ZXJsYXlpbmcpKSYmdy5vdmVybGF5aW5nJiYoYi5vdmVybGF5aW5nPSExLHc9bnVsbCksYi5fbWFpbkF4aXM9d3x8Yix3JiYoYi5kb21haW49dy5kb21haW4uc2xpY2UoKSksYi5fYW5jaG9yQXhpcz0iZnJlZSI9PT1iLmFuY2hvcj9udWxsOmYuZ2V0RnJvbUlkKGgsYi5hbmNob3IpfWZvcihpPTA7aTxfLmxlbmd0aDtpKyspaWYoKGI9X1tpXSkuX2NvdW50ZXJBeGVzLnNvcnQoZi5pZFNvcnQpLGIuX3N1YnBsb3RzV2l0aC5zb3J0KGMuc3VicGxvdFNvcnQpLGIuX21haW5TdWJwbG90PU0oYixlKSxiLl9jb3VudGVyQXhlcy5sZW5ndGgmJihiLnNwaWtlbW9kZSYmLTEhPT1iLnNwaWtlbW9kZS5pbmRleE9mKCJhY3Jvc3MiKXx8Yi5hdXRvbWFyZ2luJiZiLm1pcnJvciYmImZyZWUiIT09Yi5hbmNob3J8fG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKGIpKSl7dmFyIFQ9MSxrPTA7Zm9yKGE9MDthPGIuX2NvdW50ZXJBeGVzLmxlbmd0aDthKyspe3ZhciBBPWYuZ2V0RnJvbUlkKGgsYi5fY291bnRlckF4ZXNbYV0pO1Q9TWF0aC5taW4oVCxBLmRvbWFpblswXSksaz1NYXRoLm1heChrLEEuZG9tYWluWzFdKX1UPGsmJihiLl9jb3VudGVyRG9tYWluTWluPVQsYi5fY291bnRlckRvbWFpbk1heD1rKX19LHguY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycz1mdW5jdGlvbih0KXt2YXIgZSxyLG47Zm9yKHI9W10sKGU9dC5fbW9kdWxlLl9jb2xvckF0dHJzKXx8KHQuX21vZHVsZS5fY29sb3JBdHRycz1lPVtdLHMuY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsKGZ1bmN0aW9uKHQsbixpLGEpe3JbYV09bixyLmxlbmd0aD1hKzEsImNvbG9yIj09PXQudmFsVHlwZSYmdm9pZCAwPT09dC5kZmx0JiZlLnB1c2goci5qb2luKCIuIikpfSkpKSxuPTA7bjxlLmxlbmd0aDtuKyspe2MubmVzdGVkUHJvcGVydHkodCwiX2lucHV0LiIrZVtuXSkuZ2V0KCl8fGMubmVzdGVkUHJvcGVydHkodCxlW25dKS5zZXQobnVsbCl9fSx4LnN1cHBseURhdGFEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLHMsdT1uLl9tb2R1bGVzLGg9bi5fdmlzaWJsZU1vZHVsZXMsZj1uLl9iYXNlUGxvdE1vZHVsZXMscD0wLGQ9MDtmdW5jdGlvbiBnKHQpe2UucHVzaCh0KTt2YXIgcj10Ll9tb2R1bGU7ciYmKGMucHVzaFVuaXF1ZSh1LHIpLCEwPT09dC52aXNpYmxlJiZjLnB1c2hVbmlxdWUoaCxyKSxjLnB1c2hVbmlxdWUoZix0Ll9tb2R1bGUuYmFzZVBsb3RNb2R1bGUpLHArKywhMSE9PXQuX2lucHV0LnZpc2libGUmJmQrKyl9bi5fdHJhbnNmb3JtTW9kdWxlcz1bXTt2YXIgbT17fSx5PVtdLGI9KHIudGVtcGxhdGV8fHt9KS5kYXRhfHx7fSxfPWwudHJhY2VUZW1wbGF0ZXIoYik7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7aWYocz10W2ldLChhPV8ubmV3VHJhY2UocykpLnVpZD1uLl90cmFjZVVpZHNbaV0seC5zdXBwbHlUcmFjZURlZmF1bHRzKHMsYSxkLG4saSksYS5pbmRleD1pLGEuX2lucHV0PXMsYS5fZXhwYW5kZWRJbmRleD1wLGEudHJhbnNmb3JtcyYmYS50cmFuc2Zvcm1zLmxlbmd0aClmb3IodmFyIHc9ITEhPT1zLnZpc2libGUmJiExPT09YS52aXNpYmxlLFQ9UyhhLGUscixuKSxrPTA7azxULmxlbmd0aDtrKyspe3ZhciBNPVRba10sQT17X3RlbXBsYXRlOmEuX3RlbXBsYXRlLHR5cGU6YS50eXBlLHVpZDphLnVpZCtrfTt3JiYhMT09PU0udmlzaWJsZSYmZGVsZXRlIE0udmlzaWJsZSx4LnN1cHBseVRyYWNlRGVmYXVsdHMoTSxBLHAsbixpKSx2KEEsTSksQS5pbmRleD1pLEEuX2lucHV0PXMsQS5fZnVsbElucHV0PWEsQS5fZXhwYW5kZWRJbmRleD1wLEEuX2V4cGFuZGVkSW5wdXQ9TSxnKEEpfWVsc2UgYS5fZnVsbElucHV0PWEsYS5fZXhwYW5kZWRJbnB1dD1hLGcoYSk7by50cmFjZUlzKGEsImNhcnBldEF4aXMiKSYmKG1bYS5jYXJwZXRdPWEpLG8udHJhY2VJcyhhLCJjYXJwZXREZXBlbmRlbnQiKSYmeS5wdXNoKGkpfWZvcihpPTA7aTx5Lmxlbmd0aDtpKyspaWYoKGE9ZVt5W2ldXSkudmlzaWJsZSl7dmFyIEU9bVthLmNhcnBldF07YS5fY2FycGV0PUUsRSYmRS52aXNpYmxlPyhhLnhheGlzPUUueGF4aXMsYS55YXhpcz1FLnlheGlzKTphLnZpc2libGU9ITF9fSx4LnN1cHBseUFuaW1hdGlvbkRlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlO3Q9dHx8e307dmFyIHI9e307ZnVuY3Rpb24gbihlLG4pe3JldHVybiBjLmNvZXJjZSh0fHx7fSxyLGQsZSxuKX1pZihuKCJtb2RlIiksbigiZGlyZWN0aW9uIiksbigiZnJvbWN1cnJlbnQiKSxBcnJheS5pc0FycmF5KHQuZnJhbWUpKWZvcihyLmZyYW1lPVtdLGU9MDtlPHQuZnJhbWUubGVuZ3RoO2UrKylyLmZyYW1lW2VdPXguc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lW2VdfHx7fSk7ZWxzZSByLmZyYW1lPXguc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lfHx7fSk7aWYoQXJyYXkuaXNBcnJheSh0LnRyYW5zaXRpb24pKWZvcihyLnRyYW5zaXRpb249W10sZT0wO2U8dC50cmFuc2l0aW9uLmxlbmd0aDtlKyspci50cmFuc2l0aW9uW2VdPXguc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbltlXXx8e30pO2Vsc2Ugci50cmFuc2l0aW9uPXguc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbnx8e30pO3JldHVybiByfSx4LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBjLmNvZXJjZSh0fHx7fSxlLGQuZnJhbWUscixuKX1yZXR1cm4gcigiZHVyYXRpb24iKSxyKCJyZWRyYXciKSxlfSx4LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGMuY29lcmNlKHR8fHt9LGUsZC50cmFuc2l0aW9uLHIsbil9cmV0dXJuIHIoImR1cmF0aW9uIikscigiZWFzaW5nIiksZX0seC5zdXBwbHlGcmFtZURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gYy5jb2VyY2UodCxlLGcscixuKX1yZXR1cm4gcigiZ3JvdXAiKSxyKCJuYW1lIikscigidHJhY2VzIikscigiYmFzZWZyYW1lIikscigiZGF0YSIpLHIoImxheW91dCIpLGV9LHguc3VwcGx5VHJhY2VEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLHM9bi5jb2xvcndheXx8dS5kZWZhdWx0cyxsPXNbciVzLmxlbmd0aF07ZnVuY3Rpb24gaChyLG4pe3JldHVybiBjLmNvZXJjZSh0LGUseC5hdHRyaWJ1dGVzLHIsbil9dmFyIGY9aCgidmlzaWJsZSIpO2goInR5cGUiKSxoKCJuYW1lIixuLl90cmFjZVdvcmQrIiAiK2kpLGgoInVpcmV2aXNpb24iLG4udWlyZXZpc2lvbik7dmFyIHA9eC5nZXRNb2R1bGUoZSk7aWYoZS5fbW9kdWxlPXAscCl7dmFyIGQ9cC5iYXNlUGxvdE1vZHVsZSxnPWQuYXR0cixtPWQuYXR0cmlidXRlcztpZihnJiZtKXt2YXIgdj1uLl9zdWJwbG90cyx5PSIiO2lmKGZ8fCJnbDJkIiE9PWQubmFtZSl7aWYoQXJyYXkuaXNBcnJheShnKSlmb3IoYT0wO2E8Zy5sZW5ndGg7YSsrKXt2YXIgYj1nW2FdLF89Yy5jb2VyY2UodCxlLG0sYik7dltiXSYmYy5wdXNoVW5pcXVlKHZbYl0sXykseSs9X31lbHNlIHk9Yy5jb2VyY2UodCxlLG0sZyk7dltkLm5hbWVdJiZjLnB1c2hVbmlxdWUodltkLm5hbWVdLHkpfX19cmV0dXJuIGYmJihoKCJjdXN0b21kYXRhIiksaCgiaWRzIiksaCgibWV0YSIpLG8udHJhY2VJcyhlLCJzaG93TGVnZW5kIik/KGMuY29lcmNlKHQsZSxwLmF0dHJpYnV0ZXMuc2hvd2xlZ2VuZD9wLmF0dHJpYnV0ZXM6eC5hdHRyaWJ1dGVzLCJzaG93bGVnZW5kIiksaCgibGVnZW5kZ3JvdXAiKSxlLl9kZmx0U2hvd0xlZ2VuZD0hMCk6ZS5fZGZsdFNob3dMZWdlbmQ9ITEscCYmcC5zdXBwbHlEZWZhdWx0cyh0LGUsbCxuKSxvLnRyYWNlSXMoZSwibm9PcGFjaXR5Iil8fGgoIm9wYWNpdHkiKSxvLnRyYWNlSXMoZSwibm90TGVnZW5kSXNvbGF0YWJsZSIpJiYoZS52aXNpYmxlPSEhZS52aXNpYmxlKSxvLnRyYWNlSXMoZSwibm9Ib3ZlciIpfHwoZS5ob3ZlcnRlbXBsYXRlfHxjLmNvZXJjZUhvdmVyaW5mbyh0LGUsbiksInBhcmNhdHMiIT09ZS50eXBlJiZvLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlEZWZhdWx0cyIpKHQsZSxsLG4pKSxwJiZwLnNlbGVjdFBvaW50cyYmaCgic2VsZWN0ZWRwb2ludHMiKSx4LnN1cHBseVRyYW5zZm9ybURlZmF1bHRzKHQsZSxuKSksZX0seC5oYXNNYWtlc0RhdGFUcmFuc2Zvcm09QSx4LnN1cHBseVRyYW5zZm9ybURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtpZihlLl9sZW5ndGh8fEEodCkpe3ZhciBuPXIuX2dsb2JhbFRyYW5zZm9ybXN8fFtdLGk9ci5fdHJhbnNmb3JtTW9kdWxlc3x8W107aWYoQXJyYXkuaXNBcnJheSh0LnRyYW5zZm9ybXMpfHwwIT09bi5sZW5ndGgpZm9yKHZhciBhPXQudHJhbnNmb3Jtc3x8W10sbz1uLmNvbmNhdChhKSxzPWUudHJhbnNmb3Jtcz1bXSxsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciB1LGg9b1tsXSxmPWgudHlwZSxwPWJbZl0sZD0hKGguX21vZHVsZSYmaC5fbW9kdWxlPT09cCksZz1wJiYiZnVuY3Rpb24iPT10eXBlb2YgcC50cmFuc2Zvcm07cHx8Yy53YXJuKCJVbnJlY29nbml6ZWQgdHJhbnNmb3JtIHR5cGUgIitmKyIuIikscCYmcC5zdXBwbHlEZWZhdWx0cyYmKGR8fGcpPygodT1wLnN1cHBseURlZmF1bHRzKGgsZSxyLHQpKS50eXBlPWYsdS5fbW9kdWxlPXAsYy5wdXNoVW5pcXVlKGkscCkpOnU9Yy5leHRlbmRGbGF0KHt9LGgpLHMucHVzaCh1KX19fSx4LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHIsbil7cmV0dXJuIGMuY29lcmNlKHQsZSx4LmxheW91dEF0dHJpYnV0ZXMscixuKX12YXIgaT10LnRlbXBsYXRlO2MuaXNQbGFpbk9iamVjdChpKSYmKGUudGVtcGxhdGU9aSxlLl90ZW1wbGF0ZT1pLmxheW91dCxlLl9kYXRhVGVtcGxhdGU9aS5kYXRhKTt2YXIgYT1jLmNvZXJjZUZvbnQobiwiZm9udCIpO24oInRpdGxlLnRleHQiLGUuX2RmbHRUaXRsZS5wbG90KSxjLmNvZXJjZUZvbnQobiwidGl0bGUuZm9udCIse2ZhbWlseTphLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS40KmEuc2l6ZSksY29sb3I6YS5jb2xvcn0pLG4oInRpdGxlLnhyZWYiKSxuKCJ0aXRsZS55cmVmIiksbigidGl0bGUueCIpLG4oInRpdGxlLnkiKSxuKCJ0aXRsZS54YW5jaG9yIiksbigidGl0bGUueWFuY2hvciIpLG4oInRpdGxlLnBhZC50IiksbigidGl0bGUucGFkLnIiKSxuKCJ0aXRsZS5wYWQuYiIpLG4oInRpdGxlLnBhZC5sIiksbigidW5pZm9ybXRleHQubW9kZSIpJiZuKCJ1bmlmb3JtdGV4dC5taW5zaXplIiksbigiYXV0b3NpemUiLCEodC53aWR0aCYmdC5oZWlnaHQpKSxuKCJ3aWR0aCIpLG4oImhlaWdodCIpLG4oIm1hcmdpbi5sIiksbigibWFyZ2luLnIiKSxuKCJtYXJnaW4udCIpLG4oIm1hcmdpbi5iIiksbigibWFyZ2luLnBhZCIpLG4oIm1hcmdpbi5hdXRvZXhwYW5kIiksdC53aWR0aCYmdC5oZWlnaHQmJnguc2FuaXRpemVNYXJnaW5zKGUpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJncmlkIiwic2l6ZURlZmF1bHRzIikodCxlKSxuKCJwYXBlcl9iZ2NvbG9yIiksbigic2VwYXJhdG9ycyIsci5kZWNpbWFsK3IudGhvdXNhbmRzKSxuKCJoaWRlc291cmNlcyIpLG4oImNvbG9yd2F5IiksbigiZGF0YXJldmlzaW9uIik7dmFyIHM9bigidWlyZXZpc2lvbiIpO24oImVkaXRyZXZpc2lvbiIscyksbigic2VsZWN0aW9ucmV2aXNpb24iLHMpLG4oIm1vZGViYXIub3JpZW50YXRpb24iKSxuKCJtb2RlYmFyLmJnY29sb3IiLHUuYWRkT3BhY2l0eShlLnBhcGVyX2JnY29sb3IsLjUpKTt2YXIgbD11LmNvbnRyYXN0KHUucmdiKGUubW9kZWJhci5iZ2NvbG9yKSk7bigibW9kZWJhci5jb2xvciIsdS5hZGRPcGFjaXR5KGwsLjMpKSxuKCJtb2RlYmFyLmFjdGl2ZWNvbG9yIix1LmFkZE9wYWNpdHkobCwuNykpLG4oIm1vZGViYXIudWlyZXZpc2lvbiIscyksby5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsInN1cHBseURyYXdOZXdTaGFwZURlZmF1bHRzIikodCxlLG4pLG4oIm1ldGEiKSxjLmlzUGxhaW5PYmplY3QodC50cmFuc2l0aW9uKSYmKG4oInRyYW5zaXRpb24uZHVyYXRpb24iKSxuKCJ0cmFuc2l0aW9uLmVhc2luZyIpLG4oInRyYW5zaXRpb24ub3JkZXJpbmciKSksby5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJmeCIsInN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzIikodCxlLG4pfSx4LnBsb3RBdXRvU2l6ZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvPXQuX2NvbnRleHR8fHt9LHM9by5mcmFtZU1hcmdpbnMsbD1jLmlzUGxvdERpdih0KTtpZihsJiZ0LmVtaXQoInBsb3RseV9hdXRvc2l6ZSIpLG8uZmlsbEZyYW1lKW49d2luZG93LmlubmVyV2lkdGgsaT13aW5kb3cuaW5uZXJIZWlnaHQsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjtlbHNle3ZhciB1PWw/d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk6e307aWYobj1FKHUud2lkdGgpfHxFKHUubWF4V2lkdGgpfHxyLndpZHRoLGk9RSh1LmhlaWdodCl8fEUodS5tYXhIZWlnaHQpfHxyLmhlaWdodCxhKHMpJiZzPjApe3ZhciBoPTEtMipzO249TWF0aC5yb3VuZChoKm4pLGk9TWF0aC5yb3VuZChoKmkpfX12YXIgZj14LmxheW91dEF0dHJpYnV0ZXMud2lkdGgubWluLHA9eC5sYXlvdXRBdHRyaWJ1dGVzLmhlaWdodC5taW47bjxmJiYobj1mKSxpPHAmJihpPXApO3ZhciBkPSFlLndpZHRoJiZNYXRoLmFicyhyLndpZHRoLW4pPjEsZz0hZS5oZWlnaHQmJk1hdGguYWJzKHIuaGVpZ2h0LWkpPjE7KGd8fGQpJiYoZCYmKHIud2lkdGg9biksZyYmKHIuaGVpZ2h0PWkpKSx0Ll9pbml0aWFsQXV0b1NpemV8fCh0Ll9pbml0aWFsQXV0b1NpemU9e3dpZHRoOm4saGVpZ2h0Oml9KSx4LnNhbml0aXplTWFyZ2lucyhyKX0seC5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLHMsbD1vLmNvbXBvbmVudHNSZWdpc3RyeSx1PWUuX2Jhc2VQbG90TW9kdWxlcyxoPW8uc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW47Zm9yKGkgaW4gbCkocz1sW2ldKS5pbmNsdWRlQmFzZVBsb3QmJnMuaW5jbHVkZUJhc2VQbG90KHQsZSk7Zm9yKHZhciBmIGluIHUubGVuZ3RofHx1LnB1c2goaCksZS5faGFzKCJjYXJ0ZXNpYW4iKSYmKG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJncmlkIiwiY29udGVudERlZmF1bHRzIikodCxlKSxoLmZpbmFsaXplU3VicGxvdHModCxlKSksZS5fc3VicGxvdHMpZS5fc3VicGxvdHNbZl0uc29ydChjLnN1YnBsb3RTb3J0KTtmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKShzPXVbYV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgcD1lLl9tb2R1bGVzO2ZvcihhPTA7YTxwLmxlbmd0aDthKyspKHM9cFthXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBkPWUuX3RyYW5zZm9ybU1vZHVsZXM7Zm9yKGE9MDthPGQubGVuZ3RoO2ErKykocz1kW2FdKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscixuKTtmb3IoaSBpbiBsKShzPWxbaV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0seC5wdXJnZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0fHx7fTt2b2lkIDAhPT1lLl9nbGNvbnRhaW5lciYmKGUuX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLnJlbW92ZSgpLGUuX2dsY29udGFpbmVyLnJlbW92ZSgpLGUuX2dsY2FudmFzPW51bGwpLGUuX21vZGVCYXImJmUuX21vZGVCYXIuZGVzdHJveSgpLHQuX3RyYW5zaXRpb25EYXRhJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyYmKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MubGVuZ3RoPTApLHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0Ll90cmFuc2l0aW9uRGF0YS5fYW5pbWF0aW9uUmFmKSksYy5jbGVhclRocm90dGxlKCksYy5jbGVhclJlc3BvbnNpdmUodCksZGVsZXRlIHQuZGF0YSxkZWxldGUgdC5sYXlvdXQsZGVsZXRlIHQuX2Z1bGxEYXRhLGRlbGV0ZSB0Ll9mdWxsTGF5b3V0LGRlbGV0ZSB0LmNhbGNkYXRhLGRlbGV0ZSB0LmZyYW1ld29yayxkZWxldGUgdC5lbXB0eSxkZWxldGUgdC5maWQsZGVsZXRlIHQudW5kb3F1ZXVlLGRlbGV0ZSB0LnVuZG9udW0sZGVsZXRlIHQuYXV0b3BsYXksZGVsZXRlIHQuY2hhbmdlZCxkZWxldGUgdC5fcHJvbWlzZXMsZGVsZXRlIHQuX3JlZHJhd1RpbWVyLGRlbGV0ZSB0Ll9obWx1bWNvdW50LGRlbGV0ZSB0Ll9obXBpeGNvdW50LGRlbGV0ZSB0Ll90cmFuc2l0aW9uRGF0YSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZyxkZWxldGUgdC5faW5pdGlhbEF1dG9TaXplLGRlbGV0ZSB0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uLGRlbGV0ZSB0Ll9kcmFnZ2luZyxkZWxldGUgdC5fZHJhZ2dlZCxkZWxldGUgdC5fZHJhZ2RhdGEsZGVsZXRlIHQuX2hvdmVyZGF0YSxkZWxldGUgdC5fc25hcHNob3RJblByb2dyZXNzLGRlbGV0ZSB0Ll9lZGl0aW5nLGRlbGV0ZSB0Ll9tb3VzZURvd25UaW1lLGRlbGV0ZSB0Ll9sZWdlbmRNb3VzZURvd25UaW1lLHQucmVtb3ZlQWxsTGlzdGVuZXJzJiZ0LnJlbW92ZUFsbExpc3RlbmVycygpfSx4LnN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5fZnVsbExheW91dC5fdmlzaWJsZU1vZHVsZXMsbj1bXTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdO2kuc3R5bGUmJmMucHVzaFVuaXF1ZShuLGkuc3R5bGUpfWZvcihlPTA7ZTxuLmxlbmd0aDtlKyspbltlXSh0KX0seC5zYW5pdGl6ZU1hcmdpbnM9ZnVuY3Rpb24odCl7aWYodCYmdC5tYXJnaW4pe3ZhciBlLHI9dC53aWR0aCxuPXQuaGVpZ2h0LGk9dC5tYXJnaW4sYT1yLShpLmwraS5yKSxvPW4tKGkudCtpLmIpO2E8MCYmKGU9KHItMSkvKGkubCtpLnIpLGkubD1NYXRoLmZsb29yKGUqaS5sKSxpLnI9TWF0aC5mbG9vcihlKmkucikpLG88MCYmKGU9KG4tMSkvKGkudCtpLmIpLGkudD1NYXRoLmZsb29yKGUqaS50KSxpLmI9TWF0aC5mbG9vcihlKmkuYikpfX0seC5jbGVhckF1dG9NYXJnaW5JZHM9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcHVzaG1hcmdpbklkcz17fX0seC5hbGxvd0F1dG9NYXJnaW49ZnVuY3Rpb24odCxlKXt0Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2luSWRzW2VdPTF9LHguYXV0b01hcmdpbj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPW4uX3B1c2htYXJnaW4sYT1uLl9wdXNobWFyZ2luSWRzO2lmKCExIT09bi5tYXJnaW4uYXV0b2V4cGFuZCl7aWYocil7dmFyIG89ci5wYWQ7aWYodm9pZCAwPT09byl7dmFyIHM9bi5tYXJnaW47bz1NYXRoLm1pbigxMixzLmwscy5yLHMudCxzLmIpfXIubCtyLnI+LjUqbi53aWR0aCYmKGMubG9nKCJNYXJnaW4gcHVzaCIsZSwiaXMgdG9vIGJpZyBpbiB4LCBkcm9wcGluZyIpLHIubD1yLnI9MCksci5iK3IudD4uNSpuLmhlaWdodCYmKGMubG9nKCJNYXJnaW4gcHVzaCIsZSwiaXMgdG9vIGJpZyBpbiB5LCBkcm9wcGluZyIpLHIuYj1yLnQ9MCk7dmFyIGw9dm9pZCAwIT09ci54bD9yLnhsOnIueCx1PXZvaWQgMCE9PXIueHI/ci54cjpyLngsaD12b2lkIDAhPT1yLnl0P3IueXQ6ci55LGY9dm9pZCAwIT09ci55Yj9yLnliOnIueTtpW2VdPXtsOnt2YWw6bCxzaXplOnIubCtvfSxyOnt2YWw6dSxzaXplOnIucitvfSxiOnt2YWw6ZixzaXplOnIuYitvfSx0Ont2YWw6aCxzaXplOnIudCtvfX0sYVtlXT0xfWVsc2UgZGVsZXRlIGlbZV0sZGVsZXRlIGFbZV07aWYoIW4uX3JlcGxvdHRpbmcpcmV0dXJuIHguZG9BdXRvTWFyZ2luKHQpfX0seC5kb0F1dG9NYXJnaW49ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9zaXplfHwoZS5fc2l6ZT17fSksQyhlKTt2YXIgcj1lLl9zaXplLG49ZS5tYXJnaW4saT1jLmV4dGVuZEZsYXQoe30scikscz1uLmwsbD1uLnIsdT1uLnQsaD1uLmIsZj1lLndpZHRoLHA9ZS5oZWlnaHQsZD1lLl9wdXNobWFyZ2luLGc9ZS5fcHVzaG1hcmdpbklkcztpZighMSE9PWUubWFyZ2luLmF1dG9leHBhbmQpe2Zvcih2YXIgbSBpbiBkKWdbbV18fGRlbGV0ZSBkW21dO2Zvcih2YXIgdiBpbiBkLmJhc2U9e2w6e3ZhbDowLHNpemU6c30scjp7dmFsOjEsc2l6ZTpsfSx0Ont2YWw6MSxzaXplOnV9LGI6e3ZhbDowLHNpemU6aH19LGQpe3ZhciB5PWRbdl0ubHx8e30sYj1kW3ZdLmJ8fHt9LF89eS52YWwsdz15LnNpemUsVD1iLnZhbCxrPWIuc2l6ZTtmb3IodmFyIE0gaW4gZCl7aWYoYSh3KSYmZFtNXS5yKXt2YXIgQT1kW01dLnIudmFsLFM9ZFtNXS5yLnNpemU7aWYoQT5fKXt2YXIgRT0odypBKyhTLWYpKl8pLyhBLV8pLEw9KFMqKDEtXykrKHctZikqKDEtQSkpLyhBLV8pO0U+PTAmJkw+PTAmJmYtKEUrTCk+MCYmRStMPnMrbCYmKHM9RSxsPUwpfX1pZihhKGspJiZkW01dLnQpe3ZhciBQPWRbTV0udC52YWwsST1kW01dLnQuc2l6ZTtpZihQPlQpe3ZhciB6PShrKlArKEktcCkqVCkvKFAtVCksTz0oSSooMS1UKSsoay1wKSooMS1QKSkvKFAtVCk7ej49MCYmTz49MCYmcC0oTyt6KT4wJiZ6K08+aCt1JiYoaD16LHU9Tyl9fX19fWlmKHIubD1NYXRoLnJvdW5kKHMpLHIucj1NYXRoLnJvdW5kKGwpLHIudD1NYXRoLnJvdW5kKHUpLHIuYj1NYXRoLnJvdW5kKGgpLHIucD1NYXRoLnJvdW5kKG4ucGFkKSxyLnc9TWF0aC5yb3VuZChmKS1yLmwtci5yLHIuaD1NYXRoLnJvdW5kKHApLXIudC1yLmIsIWUuX3JlcGxvdHRpbmcmJnguZGlkTWFyZ2luQ2hhbmdlKGkscikpeyJfcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudCJpbiBlP2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQrKzplLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50PTE7dmFyIEQ9MyooMStPYmplY3Qua2V5cyhnKS5sZW5ndGgpO2lmKGUuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQ8RClyZXR1cm4gby5jYWxsKCJwbG90Iix0KTtlLl9zaXplPWksYy53YXJuKCJUb28gbWFueSBhdXRvLW1hcmdpbiByZWRyYXdzLiIpfX07dmFyIEw9WyJsIiwiciIsInQiLCJiIiwicCIsInciLCJoIl07ZnVuY3Rpb24gUCh0LGUscil7dmFyIG49ITE7dmFyIGk9W3gucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKHQuX3RyYW5zaXRpb25EYXRhKXJldHVybiB0Ll90cmFuc2l0aW9uaW5nPSExLGZ1bmN0aW9uKHQpe3ZhciBlPVByb21pc2UucmVzb2x2ZSgpO2lmKCF0KXJldHVybiBlO2Zvcig7dC5sZW5ndGg7KWU9ZS50aGVuKHQuc2hpZnQoKSk7cmV0dXJuIGV9KHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpfSxyLnByZXBhcmVGbix4LnJlaG92ZXIsZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfdHJhbnNpdGlvbmluZyIsW10pLG5ldyBQcm9taXNlKChmdW5jdGlvbihpKXt0Ll90cmFuc2l0aW9uaW5nPSEwLGUuZHVyYXRpb24+MCYmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb249ITApLHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaCgoZnVuY3Rpb24oKXtuPSEwfSkpLHIucmVkcmF3JiZ0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FsbCgicmVkcmF3Iix0KX0pKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goKGZ1bmN0aW9uKCl7dC5lbWl0KCJwbG90bHlfdHJhbnNpdGlvbmludGVycnVwdGVkIixbXSl9KSk7dmFyIGE9MCxzPTA7ZnVuY3Rpb24gbCgpe3JldHVybiBhKyssZnVuY3Rpb24oKXtzKyssbnx8cyE9PWF8fGZ1bmN0aW9uKGUpe2lmKCF0Ll90cmFuc2l0aW9uRGF0YSlyZXR1cm47KGZ1bmN0aW9uKHQpe2lmKHQpZm9yKDt0Lmxlbmd0aDspdC5zaGlmdCgpfSkodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtpZihyLnJlZHJhdylyZXR1cm4gby5jYWxsKCJyZWRyYXciLHQpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7dC5fdHJhbnNpdGlvbmluZz0hMSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSExLHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25lZCIsW10pfSkpLnRoZW4oZSl9KGkpfX1yLnJ1bkZuKGwpLHNldFRpbWVvdXQobCgpKX0pKX1dLGE9Yy5zeW5jT3JBc3luYyhpLHQpO3JldHVybiBhJiZhLnRoZW58fChhPVByb21pc2UucmVzb2x2ZSgpKSxhLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9eC5kaWRNYXJnaW5DaGFuZ2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPEwubGVuZ3RoO3IrKyl7dmFyIG49TFtyXSxpPXRbbl0sbz1lW25dO2lmKCFhKGkpfHxNYXRoLmFicyhvLWkpPjEpcmV0dXJuITB9cmV0dXJuITF9LHguZ3JhcGhKc29uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXsoaSYmZSYmIXQuX2Z1bGxEYXRhfHxpJiYhZSYmIXQuX2Z1bGxMYXlvdXQpJiZ4LnN1cHBseURlZmF1bHRzKHQpO3ZhciBvPWk/dC5fZnVsbERhdGE6dC5kYXRhLHM9aT90Ll9mdWxsTGF5b3V0OnQubGF5b3V0LGw9KHQuX3RyYW5zaXRpb25EYXRhfHx7fSkuX2ZyYW1lcztmdW5jdGlvbiB1KHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIGU/Il9mdW5jdGlvbl8iOm51bGw7aWYoYy5pc1BsYWluT2JqZWN0KHQpKXt2YXIgbixpPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5zb3J0KCkuZm9yRWFjaCgoZnVuY3Rpb24oYSl7aWYoLTE9PT1bIl8iLCJbIl0uaW5kZXhPZihhLmNoYXJBdCgwKSkpaWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbYV0pe2lmKCJrZWVwZGF0YSI9PT1yKXtpZigic3JjIj09PWEuc3Vic3RyKGEubGVuZ3RoLTMpKXJldHVybn1lbHNlIGlmKCJrZWVwc3RyZWFtIj09PXIpe2lmKCJzdHJpbmciPT10eXBlb2Yobj10W2ErInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MCYmIWMuaXNQbGFpbk9iamVjdCh0LnN0cmVhbSkpcmV0dXJufWVsc2UgaWYoImtlZXBhbGwiIT09ciYmInN0cmluZyI9PXR5cGVvZihuPXRbYSsic3JjIl0pJiZuLmluZGV4T2YoIjoiKT4wKXJldHVybjtpW2FdPXUodFthXSxlKX1lbHNlIGUmJihpW2FdPSJfZnVuY3Rpb24iKX0pKSxpfXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdSh0LGUpfSkpOmMuaXNUeXBlZEFycmF5KHQpP2Muc2ltcGxlTWFwKHQsYy5pZGVudGl0eSk6Yy5pc0pTRGF0ZSh0KT9jLm1zMkRhdGVUaW1lTG9jYWwoK3QpOnR9dmFyIGg9e2RhdGE6KG98fFtdKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByPXUodCk7cmV0dXJuIGUmJmRlbGV0ZSByLmZpdCxyfSkpfTtpZighZSYmKGgubGF5b3V0PXUocyksaSkpe3ZhciBmPXMuX3NpemU7aC5sYXlvdXQuY29tcHV0ZWQ9e21hcmdpbjp7YjpmLmIsbDpmLmwscjpmLnIsdDpmLnR9fX1yZXR1cm4gdC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXImJihoPXQuZnJhbWV3b3JrLmdldENvbmZpZygpKSxsJiYoaC5mcmFtZXM9dShsKSksYSYmKGguY29uZmlnPXUodC5fY29udGV4dCwhMCkpLCJvYmplY3QiPT09bj9oOkpTT04uc3RyaW5naWZ5KGgpfSx4Lm1vZGlmeUZyYW1lcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsbz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspc3dpdGNoKChuPWVbcl0pLnR5cGUpe2Nhc2UicmVwbGFjZSI6aT1uLnZhbHVlO3ZhciBzPShhW24uaW5kZXhdfHx7fSkubmFtZSxsPWkubmFtZTthW24uaW5kZXhdPW9bbF09aSxsIT09cyYmKGRlbGV0ZSBvW3NdLG9bbF09aSk7YnJlYWs7Y2FzZSJpbnNlcnQiOm9bKGk9bi52YWx1ZSkubmFtZV09aSxhLnNwbGljZShuLmluZGV4LDAsaSk7YnJlYWs7Y2FzZSJkZWxldGUiOmRlbGV0ZSBvWyhpPWFbbi5pbmRleF0pLm5hbWVdLGEuc3BsaWNlKG4uaW5kZXgsMSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSx4LmNvbXB1dGVGcmFtZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG89dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighZSl0aHJvdyBuZXcgRXJyb3IoImNvbXB1dGVGcmFtZSBtdXN0IGJlIGdpdmVuIGEgc3RyaW5nIGZyYW1lIG5hbWUiKTt2YXIgcz1vW2UudG9TdHJpbmcoKV07aWYoIXMpcmV0dXJuITE7Zm9yKHZhciBsPVtzXSxjPVtzLm5hbWVdO3MuYmFzZWZyYW1lJiYocz1vW3MuYmFzZWZyYW1lLnRvU3RyaW5nKCldKSYmLTE9PT1jLmluZGV4T2Yocy5uYW1lKTspbC5wdXNoKHMpLGMucHVzaChzLm5hbWUpO2Zvcih2YXIgdT17fTtzPWwucG9wKCk7KWlmKHMubGF5b3V0JiYodS5sYXlvdXQ9eC5leHRlbmRMYXlvdXQodS5sYXlvdXQscy5sYXlvdXQpKSxzLmRhdGEpe2lmKHUuZGF0YXx8KHUuZGF0YT1bXSksIShuPXMudHJhY2VzKSlmb3Iobj1bXSxyPTA7cjxzLmRhdGEubGVuZ3RoO3IrKyluW3JdPXI7Zm9yKHUudHJhY2VzfHwodS50cmFjZXM9W10pLHI9MDtyPHMuZGF0YS5sZW5ndGg7cisrKW51bGwhPShpPW5bcl0pJiYoLTE9PT0oYT11LnRyYWNlcy5pbmRleE9mKGkpKSYmKGE9dS5kYXRhLmxlbmd0aCx1LnRyYWNlc1thXT1pKSx1LmRhdGFbYV09eC5leHRlbmRUcmFjZSh1LmRhdGFbYV0scy5kYXRhW3JdKSl9cmV0dXJuIHV9LHgucmVjb21wdXRlRnJhbWVIYXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoPXt9LHI9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aSYmaS5uYW1lJiYoZVtpLm5hbWVdPWkpfX0seC5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLHUsaD1jLmV4dGVuZERlZXBOb0FycmF5cyh7fSxlfHx7fSksZj1jLmV4cGFuZE9iamVjdFBhdGhzKGgpLHA9e307aWYociYmci5sZW5ndGgpZm9yKGE9MDthPHIubGVuZ3RoO2ErKyl2b2lkIDA9PT0oaT0obj1jLm5lc3RlZFByb3BlcnR5KGYsclthXSkpLmdldCgpKT9jLm5lc3RlZFByb3BlcnR5KHAsclthXSkuc2V0KG51bGwpOihuLnNldChudWxsKSxjLm5lc3RlZFByb3BlcnR5KHAsclthXSkuc2V0KGkpKTtpZih0PWMuZXh0ZW5kRGVlcE5vQXJyYXlzKHR8fHt9LGYpLHImJnIubGVuZ3RoKWZvcihhPTA7YTxyLmxlbmd0aDthKyspaWYobD1jLm5lc3RlZFByb3BlcnR5KHAsclthXSkuZ2V0KCkpe2Zvcih1PShzPWMubmVzdGVkUHJvcGVydHkodCxyW2FdKSkuZ2V0KCksQXJyYXkuaXNBcnJheSh1KXx8KHU9W10scy5zZXQodSkpLG89MDtvPGwubGVuZ3RoO28rKyl7dmFyIGQ9bFtvXTt1W29dPW51bGw9PT1kP251bGw6eC5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh1W29dLGQpfXMuc2V0KHUpfXJldHVybiB0fSx4LmRhdGFBcnJheUNvbnRhaW5lcnM9WyJ0cmFuc2Zvcm1zIiwiZGltZW5zaW9ucyJdLHgubGF5b3V0QXJyYXlDb250YWluZXJzPW8ubGF5b3V0QXJyYXlDb250YWluZXJzLHguZXh0ZW5kVHJhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geC5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh0LGUseC5kYXRhQXJyYXlDb250YWluZXJzKX0seC5leHRlbmRMYXlvdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geC5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh0LGUseC5sYXlvdXRBcnJheUNvbnRhaW5lcnMpfSx4LnRyYW5zaXRpb249ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXtyZWRyYXc6aS5yZWRyYXd9LHM9e30sbD1bXTtyZXR1cm4gby5wcmVwYXJlRm49ZnVuY3Rpb24oKXtmb3IodmFyIGk9QXJyYXkuaXNBcnJheShlKT9lLmxlbmd0aDowLGE9bi5zbGljZSgwLGkpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHU9YVtvXSxoPXQuX2Z1bGxEYXRhW3VdLl9tb2R1bGU7aWYoaCl7aWYoaC5hbmltYXRhYmxlKXt2YXIgZj1oLmJhc2VQbG90TW9kdWxlLm5hbWU7c1tmXXx8KHNbZl09W10pLHNbZl0ucHVzaCh1KX10LmRhdGFbYVtvXV09eC5leHRlbmRUcmFjZSh0LmRhdGFbYVtvXV0sZVtvXSl9fXZhciBwPWMuZXhwYW5kT2JqZWN0UGF0aHMoYy5leHRlbmREZWVwTm9BcnJheXMoe30scikpLGQ9L15beHldYXhpc1swLTldKiQvO2Zvcih2YXIgZyBpbiBwKWQudGVzdChnKSYmZGVsZXRlIHBbZ10ucmFuZ2U7eC5leHRlbmRMYXlvdXQodC5sYXlvdXQscCksZGVsZXRlIHQuY2FsY2RhdGEseC5zdXBwbHlEZWZhdWx0cyh0KSx4LmRvQ2FsY2RhdGEodCk7dmFyIG09Yy5leHBhbmRPYmplY3RQYXRocyhyKTtpZihtKXt2YXIgdj10Ll9mdWxsTGF5b3V0Ll9wbG90cztmb3IodmFyIHkgaW4gdil7dmFyIGI9dlt5XSxfPWIueGF4aXMsdz1iLnlheGlzLFQ9Xy5yYW5nZS5zbGljZSgpLGs9dy5yYW5nZS5zbGljZSgpLE09bnVsbCxBPW51bGwsUz1udWxsLEU9bnVsbDtBcnJheS5pc0FycmF5KG1bXy5fbmFtZSsiLnJhbmdlIl0pP009bVtfLl9uYW1lKyIucmFuZ2UiXS5zbGljZSgpOkFycmF5LmlzQXJyYXkoKG1bXy5fbmFtZV18fHt9KS5yYW5nZSkmJihNPW1bXy5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSksQXJyYXkuaXNBcnJheShtW3cuX25hbWUrIi5yYW5nZSJdKT9BPW1bdy5fbmFtZSsiLnJhbmdlIl0uc2xpY2UoKTpBcnJheS5pc0FycmF5KChtW3cuX25hbWVdfHx7fSkucmFuZ2UpJiYoQT1tW3cuX25hbWVdLnJhbmdlLnNsaWNlKCkpLFQmJk0mJihfLnIybChUWzBdKSE9PV8ucjJsKE1bMF0pfHxfLnIybChUWzFdKSE9PV8ucjJsKE1bMV0pKSYmKFM9e3hyMDpULHhyMTpNfSksayYmQSYmKHcucjJsKGtbMF0pIT09dy5yMmwoQVswXSl8fHcucjJsKGtbMV0pIT09dy5yMmwoQVsxXSkpJiYoRT17eXIwOmsseXIxOkF9KSwoU3x8RSkmJmwucHVzaChjLmV4dGVuZEZsYXQoe3Bsb3RpbmZvOmJ9LFMsRSkpfX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LG8ucnVuRm49ZnVuY3Rpb24oZSl7dmFyIG4saSxvPXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyx1PWwubGVuZ3RoO2lmKHIpZm9yKGk9MDtpPG8ubGVuZ3RoO2krKylvW2ldLnRyYW5zaXRpb25BeGVzJiZvW2ldLnRyYW5zaXRpb25BeGVzKHQsbCxhLGUpO2Zvcih2YXIgaCBpbiB1Pygobj1jLmV4dGVuZEZsYXQoe30sYSkpLmR1cmF0aW9uPTAsZGVsZXRlIHMuY2FydGVzaWFuKTpuPWEscyl7dmFyIGY9c1toXTt0Ll9mdWxsRGF0YVtmWzBdXS5fbW9kdWxlLmJhc2VQbG90TW9kdWxlLnBsb3QodCxmLG4sZSl9fSxQKHQsYSxvKX0seC50cmFuc2l0aW9uRnJvbVJlYWN0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1pLnRyYW5zaXRpb24sbz17fSxzPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe3ZhciB0PWkuX3Bsb3RzO2Zvcih2YXIgYSBpbiBvLnJlZHJhdz0hMSwic29tZSI9PT1lLmFuaW0mJihvLnJlZHJhdz0hMCksInNvbWUiPT09ci5hbmltJiYoby5yZWRyYXc9ITApLHQpe3ZhciBsPXRbYV0sdT1sLnhheGlzLGg9bC55YXhpcyxmPW5bdS5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSxwPW5baC5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSxkPXUucmFuZ2Uuc2xpY2UoKSxnPWgucmFuZ2Uuc2xpY2UoKTt1LnNldFNjYWxlKCksaC5zZXRTY2FsZSgpO3ZhciBtPW51bGwsdj1udWxsO3UucjJsKGZbMF0pPT09dS5yMmwoZFswXSkmJnUucjJsKGZbMV0pPT09dS5yMmwoZFsxXSl8fChtPXt4cjA6Zix4cjE6ZH0pLGgucjJsKHBbMF0pPT09aC5yMmwoZ1swXSkmJmgucjJsKHBbMV0pPT09aC5yMmwoZ1sxXSl8fCh2PXt5cjA6cCx5cjE6Z30pLChtfHx2KSYmcy5wdXNoKGMuZXh0ZW5kRmxhdCh7cGxvdGluZm86bH0sbSx2KSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxvLnJ1bkZuPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbixpLG8sbD10Ll9mdWxsRGF0YSx1PXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyxoPVtdLGY9MDtmPGwubGVuZ3RoO2YrKyloLnB1c2goZik7ZnVuY3Rpb24gcCgpe2Zvcih2YXIgZT0wO2U8dS5sZW5ndGg7ZSsrKXVbZV0udHJhbnNpdGlvbkF4ZXMmJnVbZV0udHJhbnNpdGlvbkF4ZXModCxzLG4scil9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZT0wO2U8dS5sZW5ndGg7ZSsrKXVbZV0ucGxvdCh0LG8saSxyKX1zLmxlbmd0aCYmZS5hbmltPyJ0cmFjZXMgZmlyc3QiPT09YS5vcmRlcmluZz8obj1jLmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLG89aCxpPWEsc2V0VGltZW91dChwLGEuZHVyYXRpb24pLGQoKSk6KG49YSxvPW51bGwsaT1jLmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLHNldFRpbWVvdXQoZCxuLmR1cmF0aW9uKSxwKCkpOnMubGVuZ3RoPyhuPWEscCgpKTplLmFuaW0mJihvPWgsaT1hLGQoKSl9LFAodCxhLG8pfSx4LmRvQ2FsY2RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxsPWYubGlzdCh0KSx1PXQuX2Z1bGxEYXRhLHA9dC5fZnVsbExheW91dCxkPW5ldyBBcnJheSh1Lmxlbmd0aCksZz0odC5jYWxjZGF0YXx8W10pLnNsaWNlKCk7Zm9yKHQuY2FsY2RhdGE9ZCxwLl9udW1Cb3hlcz0wLHAuX251bVZpb2xpbnM9MCxwLl92aW9saW5TY2FsZUdyb3VwU3RhdHM9e30sdC5faG1waXhjb3VudD0wLHQuX2htbHVtY291bnQ9MCxwLl9waWVjb2xvcm1hcD17fSxwLl9zdW5idXJzdGNvbG9ybWFwPXt9LHAuX3RyZWVtYXBjb2xvcm1hcD17fSxwLl9mdW5uZWxhcmVhY29sb3JtYXA9e30saT0wO2k8dS5sZW5ndGg7aSsrKUFycmF5LmlzQXJyYXkoZSkmJi0xPT09ZS5pbmRleE9mKGkpJiYoZFtpXT1nW2ldKTtmb3IoaT0wO2k8dS5sZW5ndGg7aSsrKShyPXVbaV0pLl9hcnJheUF0dHJzPXMuZmluZEFycmF5QXR0cmlidXRlcyhyKSxyLl9leHRyZW1lcz17fTt2YXIgbT1wLl9zdWJwbG90cy5wb2xhcnx8W107Zm9yKGk9MDtpPG0ubGVuZ3RoO2krKylsLnB1c2gocFttW2ldXS5yYWRpYWxheGlzLHBbbVtpXV0uYW5ndWxhcmF4aXMpO2Zvcih2YXIgdiBpbiBwLl9jb2xvckF4ZXMpe3ZhciB5PXBbdl07ITEhPT15LmNhdXRvJiYoZGVsZXRlIHkuY21pbixkZWxldGUgeS5jbWF4KX12YXIgeD0hMTtmdW5jdGlvbiBfKGUpe2lmKHI9dVtlXSxuPXIuX21vZHVsZSwhMD09PXIudmlzaWJsZSYmci50cmFuc2Zvcm1zKXtpZihuJiZuLmNhbGMpe3ZhciBpPW4uY2FsYyh0LHIpO2lbMF0mJmlbMF0udCYmaVswXS50Ll9zY2VuZSYmZGVsZXRlIGlbMF0udC5fc2NlbmUuZGlydHl9Zm9yKGE9MDthPHIudHJhbnNmb3Jtcy5sZW5ndGg7YSsrKXt2YXIgbz1yLnRyYW5zZm9ybXNbYV07KG49YltvLnR5cGVdKSYmbi5jYWxjVHJhbnNmb3JtJiYoci5faGFzQ2FsY1RyYW5zZm9ybT0hMCx4PSEwLG4uY2FsY1RyYW5zZm9ybSh0LHIsbykpfX19ZnVuY3Rpb24gdyhlLGkpe2lmKHI9dVtlXSwhIShuPXIuX21vZHVsZSkuaXNDb250YWluZXI9PT1pKXt2YXIgbz1bXTtpZighMD09PXIudmlzaWJsZSYmMCE9PXIuX2xlbmd0aCl7ZGVsZXRlIHIuX2luZGV4VG9Qb2ludHM7dmFyIHM9ci50cmFuc2Zvcm1zfHxbXTtmb3IoYT1zLmxlbmd0aC0xO2E+PTA7YS0tKWlmKHNbYV0uZW5hYmxlZCl7ci5faW5kZXhUb1BvaW50cz1zW2FdLl9pbmRleFRvUG9pbnRzO2JyZWFrfW4mJm4uY2FsYyYmKG89bi5jYWxjKHQscikpfUFycmF5LmlzQXJyYXkobykmJm9bMF18fChvPVt7eDpoLHk6aH1dKSxvWzBdLnR8fChvWzBdLnQ9e30pLG9bMF0udHJhY2U9cixkW2VdPW99fWZvcih6KGwsdSxwKSxpPTA7aTx1Lmxlbmd0aDtpKyspdyhpLCEwKTtmb3IoaT0wO2k8dS5sZW5ndGg7aSsrKV8oaSk7Zm9yKHgmJnoobCx1LHApLGk9MDtpPHUubGVuZ3RoO2krKyl3KGksITApO2ZvcihpPTA7aTx1Lmxlbmd0aDtpKyspdyhpLCExKTtPKHQpO3ZhciBUPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEscyxsPVtdO2Z1bmN0aW9uIHUodCxyLG4pe3ZhciBpPXIuX2lkLmNoYXJBdCgwKTtpZigiaGlzdG9ncmFtMmRjb250b3VyIj09PXQpe3ZhciBhPXIuX2NvdW50ZXJBeGVzWzBdLG89Zi5nZXRGcm9tSWQoZSxhKSxzPSJ4Ij09PWl8fCJ4Ij09PWEmJiJjYXRlZ29yeSI9PT1vLnR5cGUsbD0ieSI9PT1pfHwieSI9PT1hJiYiY2F0ZWdvcnkiPT09by50eXBlO3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiAwPT09dHx8MD09PWV8fHMmJnQ9PT1uW2VdLmxlbmd0aC0xfHxsJiZlPT09bi5sZW5ndGgtMT8tMTooInkiPT09aT9lOnQpLTF9fXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiJ5Ij09PWk/ZTp0fX12YXIgaD17bWluOmZ1bmN0aW9uKHQpe3JldHVybiBjLmFnZ051bXMoTWF0aC5taW4sbnVsbCx0KX0sbWF4OmZ1bmN0aW9uKHQpe3JldHVybiBjLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KX0sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiBjLmFnZ051bXMoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLG51bGwsdCl9LHRvdGFsOmZ1bmN0aW9uKHQpe3JldHVybiBjLmFnZ051bXMoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLG51bGwsdCl9LG1lYW46ZnVuY3Rpb24odCl7cmV0dXJuIGMubWVhbih0KX0sbWVkaWFuOmZ1bmN0aW9uKHQpe3JldHVybiBjLm1lZGlhbih0KX19O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBwPXRbcl07aWYoImNhdGVnb3J5Ij09PXAudHlwZSl7dmFyIGQ9cC5jYXRlZ29yeW9yZGVyLm1hdGNoKEkpO2lmKGQpe3ZhciBnPWRbMV0sbT1kWzJdLHY9W107Zm9yKG49MDtuPHAuX2NhdGVnb3JpZXMubGVuZ3RoO24rKyl2LnB1c2goW3AuX2NhdGVnb3JpZXNbbl0sW11dKTtmb3Iobj0wO248cC5fdHJhY2VJbmRpY2VzLmxlbmd0aDtuKyspe3ZhciB5PXAuX3RyYWNlSW5kaWNlc1tuXSx4PWUuX2Z1bGxEYXRhW3ldLGI9cC5faWQuY2hhckF0KDApO2lmKCEwPT09eC52aXNpYmxlKXt2YXIgXz14LnR5cGU7by50cmFjZUlzKHgsImhpc3RvZ3JhbSIpJiYoZGVsZXRlIHguX3hhdXRvQmluRmluaXNoZWQsZGVsZXRlIHguX3lhdXRvQmluRmluaXNoZWQpO3ZhciB3PWUuY2FsY2RhdGFbeV07Zm9yKGk9MDtpPHcubGVuZ3RoO2krKyl7dmFyIFQsayxNLEE9d1tpXTtpZigic3Bsb20iPT09Xyl7dmFyIFM9eC5fYXhlc0RpbVtwLl9pZF07aWYoInkiPT09Yil7dmFyIEU9eC5fZGlhZ1tTXVswXTtFJiYocD1lLl9mdWxsTGF5b3V0W2YuaWQybmFtZShFKV0pfXZhciBDPUEudHJhY2UuZGltZW5zaW9uc1tTXS52YWx1ZXM7Zm9yKGE9MDthPEMubGVuZ3RoO2ErKylmb3IoVD1DW2FdLGs9cC5fY2F0ZWdvcmllc01hcFtUXSxzPTA7czxBLnRyYWNlLmRpbWVuc2lvbnMubGVuZ3RoO3MrKylpZihzIT09Uyl7dmFyIEw9QS50cmFjZS5kaW1lbnNpb25zW3NdO3Zba11bMV0ucHVzaChMLnZhbHVlc1thXSl9fWVsc2UgaWYoInNjYXR0ZXJnbCI9PT1fKXtmb3IoYT0wO2E8QS50LngubGVuZ3RoO2ErKykieCI9PT1iJiYoVD1BLnQueFthXSxrPVQsTT1BLnQueVthXSksInkiPT09YiYmKFQ9QS50LnlbYV0saz1ULE09QS50LnhbYV0pLHZba11bMV0ucHVzaChNKTtBLnQmJkEudC5fc2NlbmUmJmRlbGV0ZSBBLnQuX3NjZW5lLmRpcnR5fWVsc2UgaWYoQS5oYXNPd25Qcm9wZXJ0eSgieiIpKXtNPUEuejt2YXIgUD11KHgudHlwZSxwLE0pO2ZvcihhPTA7YTxNLmxlbmd0aDthKyspZm9yKHM9MDtzPE1bYV0ubGVuZ3RoO3MrKykoaz1QKHMsYSkpKzEmJnZba11bMV0ucHVzaChNW2FdW3NdKX1lbHNlIGZvcigieCI9PT1iPyhUPUEucCsxP0EucDpBLngsTT1BLnN8fEEudnx8QS55KToieSI9PT1iJiYoVD1BLnArMT9BLnA6QS55LE09QS5zfHxBLnZ8fEEueCksQXJyYXkuaXNBcnJheShNKXx8KE09W01dKSxhPTA7YTxNLmxlbmd0aDthKyspdltUXVsxXS5wdXNoKE1bYV0pfX19cC5fY2F0ZWdvcmllc1ZhbHVlPXY7dmFyIHo9W107Zm9yKG49MDtuPHYubGVuZ3RoO24rKyl6LnB1c2goW3Zbbl1bMF0saFtnXSh2W25dWzFdKV0pO3ouc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFsxXS1lWzFdfSkpLHAuX2NhdGVnb3JpZXNBZ2dyZWdhdGVkVmFsdWU9eixwLl9pbml0aWFsQ2F0ZWdvcmllcz16Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksImRlc2NlbmRpbmciPT09bSYmcC5faW5pdGlhbENhdGVnb3JpZXMucmV2ZXJzZSgpLGw9bC5jb25jYXQocC5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcygpKX19fXJldHVybiBsfShsLHQpO2lmKFQubGVuZ3RoKXtmb3IocC5fbnVtQm94ZXM9MCxwLl9udW1WaW9saW5zPTAsaT0wO2k8VC5sZW5ndGg7aSsrKXcoVFtpXSwhMCk7Zm9yKGk9MDtpPFQubGVuZ3RoO2krKyl3KFRbaV0sITEpO08odCl9by5nZXRDb21wb25lbnRNZXRob2QoImZ4IiwiY2FsYyIpKHQpLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJjYWxjIikodCl9O3ZhciBJPS8odG90YWx8c3VtfG1pbnxtYXh8bWVhbnxtZWRpYW4pIChhc2NlbmRpbmd8ZGVzY2VuZGluZykvO2Z1bmN0aW9uIHoodCxlLHIpe3ZhciBuLGksYSxvPXt9O2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspYT0oaT10W25dKS5faWQsaS5jbGVhckNhbGMoKSwibXVsdGljYXRlZ29yeSI9PT1pLnR5cGUmJmkuc2V0dXBNdWx0aUNhdGVnb3J5KGUpLG9baS5faWRdPTE7dmFyIHM9ci5fYXhpc01hdGNoR3JvdXBzfHxbXTtmb3Iobj0wO248cy5sZW5ndGg7bisrKWZvcihhIGluIHNbbl0pb1thXXx8KGk9cltmLmlkMm5hbWUoYSldKS5jbGVhckNhbGMoKX1mdW5jdGlvbiBPKHQpe3ZhciBlLHIsbixpPXQuX2Z1bGxMYXlvdXQsYT1pLl92aXNpYmxlTW9kdWxlcyxvPXt9O2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBzPWFbcl0sbD1zLmNyb3NzVHJhY2VDYWxjO2lmKGwpe3ZhciB1PXMuYmFzZVBsb3RNb2R1bGUubmFtZTtvW3VdP2MucHVzaFVuaXF1ZShvW3VdLGwpOm9bdV09W2xdfX1mb3IobiBpbiBvKXt2YXIgaD1vW25dLGY9aS5fc3VicGxvdHNbbl07aWYoQXJyYXkuaXNBcnJheShmKSlmb3IoZT0wO2U8Zi5sZW5ndGg7ZSsrKXt2YXIgcD1mW2VdLGQ9ImNhcnRlc2lhbiI9PT1uP2kuX3Bsb3RzW3BdOmlbcF07Zm9yKHI9MDtyPGgubGVuZ3RoO3IrKyloW3JdKHQsZCxwKX1lbHNlIGZvcihyPTA7cjxoLmxlbmd0aDtyKyspaFtyXSh0KX19eC5yZWhvdmVyPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3JlaG92ZXImJnQuX2Z1bGxMYXlvdXQuX3JlaG92ZXIoKX0seC5yZWRyYWc9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcmVkcmFnJiZ0Ll9mdWxsTGF5b3V0Ll9yZWRyYWcoKX0seC5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1lLnRyYWNlSGFzaCxvPXt9O2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBzPXJbaV0sbD1zWzBdLnRyYWNlO2wudmlzaWJsZSYmKG9bbC50eXBlXT1vW2wudHlwZV18fFtdLG9bbC50eXBlXS5wdXNoKHMpKX1mb3IodmFyIHUgaW4gYSlpZighb1t1XSl7dmFyIGg9YVt1XVswXTtoWzBdLnRyYWNlLnZpc2libGU9ITEsb1t1XT1baF19Zm9yKHZhciBmIGluIG8pe3ZhciBwPW9bZl07cFswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QodCxlLGMuZmlsdGVyVmlzaWJsZShwKSxuKX1lLnRyYWNlSGFzaD1vfSx4LnBsb3RCYXNlUGxvdD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW8uZ2V0TW9kdWxlKHQpLHM9bShlLmNhbGNkYXRhLGEpWzBdO2EucGxvdChlLHMsbixpKX0seC5jbGVhbkJhc2VQbG90PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9aS5faGFzJiZpLl9oYXModCksbz1yLl9oYXMmJnIuX2hhcyh0KTthJiYhbyYmaVsiXyIrdCsibGF5ZXIiXS5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uL2xpYiI6NzUwLCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6Nzg3LCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODgsIi4uL3Bsb3RzL2dldF9kYXRhIjo4MzYsIi4uL3JlZ2lzdHJ5Ijo4ODIsIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc5MywiLi9hdHRyaWJ1dGVzIjo3OTUsIi4vY2FydGVzaWFuL2F4aXNfaWRzIjo4MDIsIi4vY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIjo4MDksIi4vY29tbWFuZCI6ODI1LCIuL2ZvbnRfYXR0cmlidXRlcyI6ODI3LCIuL2ZyYW1lX2F0dHJpYnV0ZXMiOjgyOCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODUzLGQzOjE2OSwiZDMtdGltZS1mb3JtYXQiOjE2NiwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDg2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHI6InN1YnBsb3QiLG5hbWU6InBvbGFyIixheGlzTmFtZXM6WyJhbmd1bGFyYXhpcyIsInJhZGlhbGF4aXMiXSxheGlzTmFtZTJkYXRhQXJyYXk6e2FuZ3VsYXJheGlzOiJ0aGV0YSIscmFkaWFsYXhpczoiciJ9LGxheWVyTmFtZXM6WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImFuZ3VsYXItZ3JpZCIsInJhZGlhbC1ncmlkIiwiZnJvbnRwbG90IiwiYW5ndWxhci1saW5lIiwicmFkaWFsLWxpbmUiLCJhbmd1bGFyLWF4aXMiLCJyYWRpYWwtYXhpcyJdLHJhZGlhbERyYWdCb3hTaXplOjUwLGFuZ3VsYXJEcmFnQm94U2l6ZTozMCxjb3JuZXJMZW46MjUsY29ybmVySGFsZldpZHRoOjIsTUlORFJBRzo4LE1JTlpPT006MjAsT0ZGRURHRToyMH19LHt9XSw4NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcixhPW4uZmluZEluZGV4T2ZNaW4sbz1uLmlzQW5nbGVJbnNpZGVTZWN0b3Iscz1uLmFuZ2xlRGVsdGEsbD1uLmFuZ2xlRGlzdDtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpLGEsbz1uWzBdLHM9blsxXSxsPWgoTWF0aC5zaW4oZSktTWF0aC5zaW4odCkpLGM9aChNYXRoLmNvcyhlKS1NYXRoLmNvcyh0KSksdT1NYXRoLnRhbihyKSxmPWgoMS91KSxwPWwvYyxkPXMtcCpvO3JldHVybiBmP2wmJmM/YT11KihpPWQvKHUtcCkpOmM/KGk9cypmLGE9cyk6KGk9byxhPW8qdSk6bCYmYz8oaT0wLGE9ZCk6Yz8oaT0wLGE9cyk6aT1hPU5hTixbaSxhXX1mdW5jdGlvbiB1KHQsZSxyLGkpe3JldHVybiBuLmlzRnVsbENpcmNsZShbZSxyXSk/ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4rMSk7Zm9yKHI9MDtyPG47cisrKXt2YXIgYT1lW3JdO2lbcl09W3QqTWF0aC5jb3MoYSksdCpNYXRoLnNpbihhKV19cmV0dXJuIGlbcl09aVswXS5zbGljZSgpLGl9KHQsaSk6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIHMsdSxoPWkubGVuZ3RoLGY9W107ZnVuY3Rpb24gcChlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gYyh0LGUscixwKHQpKX1mdW5jdGlvbiBnKHQpe3JldHVybiBuLm1vZCh0LGgpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG8odCxbZSxyXSl9dmFyIHY9YShpLChmdW5jdGlvbih0KXtyZXR1cm4gbSh0KT9sKHQsZSk6MS8wfSkpLHk9ZChpW3ZdLGlbZyh2LTEpXSxlKTtmb3IoZi5wdXNoKHkpLHM9dix1PTA7dTxoO3MrKyx1Kyspe3ZhciB4PWlbZyhzKV07aWYoIW0oeCkpYnJlYWs7Zi5wdXNoKHAoeCkpfXZhciBiPWEoaSwoZnVuY3Rpb24odCl7cmV0dXJuIG0odCk/bCh0LHIpOjEvMH0pKSxfPWQoaVtiXSxpW2coYisxKV0scik7cmV0dXJuIGYucHVzaChfKSxmLnB1c2goWzAsMF0pLGYucHVzaChmWzBdLnNsaWNlKCkpLGZ9KHQsZSxyLGkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIE1hdGguYWJzKHQpPjFlLTEwP3Q6MH1mdW5jdGlvbiBmKHQsZSxyKXtlPWV8fDAscj1yfHwwO2Zvcih2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPTA7YTxuO2ErKyl7dmFyIG89dFthXTtpW2FdPVtlK29bMF0sci1vWzFdXX1yZXR1cm4gaX1lLmV4cG9ydHM9e2lzUHRJbnNpZGVQb2x5Z29uOmZ1bmN0aW9uKHQsZSxyLG4sYSl7aWYoIW8oZSxuKSlyZXR1cm4hMTt2YXIgcyxsO3JbMF08clsxXT8ocz1yWzBdLGw9clsxXSk6KHM9clsxXSxsPXJbMF0pO3ZhciBjPWkodShzLG5bMF0sblsxXSxhKSksaD1pKHUobCxuWzBdLG5bMV0sYSkpLGY9W3QqTWF0aC5jb3MoZSksdCpNYXRoLnNpbihlKV07cmV0dXJuIGguY29udGFpbnMoZikmJiFjLmNvbnRhaW5zKGYpfSxmaW5kUG9seWdvbk9mZnNldDpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MS8wLGE9MS8wLG89dSh0LGUscixuKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107aT1NYXRoLm1pbihpLGxbMF0pLGE9TWF0aC5taW4oYSwtbFsxXSl9cmV0dXJuW2ksYV19LGZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hKGUsKGZ1bmN0aW9uKGUpe3ZhciByPXMoZSx0KTtyZXR1cm4gcj4wP3I6MS8wfSkpLGk9bi5tb2QocisxLGUubGVuZ3RoKTtyZXR1cm5bZVtyXSxlW2ldXX0sZmluZEludGVyc2VjdGlvblhZOmMsZmluZFhZYXRMZW5ndGg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9LWUqcixhPWUqZSsxLG89MiooZSppLXIpLHM9aSppK3Iqci10KnQsbD1NYXRoLnNxcnQobypvLTQqYSpzKSxjPSgtbytsKS8oMiphKSx1PSgtby1sKS8oMiphKTtyZXR1cm5bW2MsZSpjK2krbl0sW3UsZSp1K2krbl1dfSxjbGFtcFRpbnk6aCxwYXRoUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIk0iK2YodSh0LGUscixuKSxpLGEpLmpvaW4oIkwiKX0scGF0aFBvbHlnb25Bbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw7dDxlPyhzPXQsbD1lKToocz1lLGw9dCk7dmFyIGM9Zih1KHMscixuLGkpLGEsbyk7cmV0dXJuIk0iK2YodShsLHIsbixpKSxhLG8pLnJldmVyc2UoKS5qb2luKCJMIikrIk0iK2Muam9pbigiTCIpfX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9wb2x5Z29uIjo3NjJ9XSw4NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsaT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsYT10KCIuL3BvbGFyIiksbz10KCIuL2NvbnN0YW50cyIpLHM9by5hdHRyLGw9by5uYW1lLGM9aShsKSx1PXt9O3Vbc109e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDpsLGVkaXRUeXBlOiJjYWxjIn0sZS5leHBvcnRzPXthdHRyOnMsbmFtZTpsLGlkUm9vdDpsLGlkUmVnZXg6YyxhdHRyUmVnZXg6YyxhdHRyaWJ1dGVzOnUsbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzW2xdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPW4ocixsLHMpLHU9ZVtzXS5fc3VicGxvdDt1fHwodT1hKHQscyksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90c1tsXXx8W10sYT1uLl9oYXMmJm4uX2hhcygiZ2wiKSxvPWUuX2hhcyYmZS5faGFzKCJnbCIpLHM9YSYmIW8sYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdLGg9blt1XS5fc3VicGxvdDtpZighZVt1XSYmaClmb3IodmFyIGYgaW4gaC5mcmFtZXdvcmsucmVtb3ZlKCksaC5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl0ucmVtb3ZlKCksaC5jbGlwUGF0aHMpaC5jbGlwUGF0aHNbZl0ucmVtb3ZlKCk7cyYmaC5fc2NlbmUmJihoLl9zY2VuZS5kZXN0cm95KCksaC5fc2NlbmU9bnVsbCl9fSx0b1NWRzp0KCIuLi9jYXJ0ZXNpYW4iKS50b1NWR319LHsiLi4vLi4vbGliIjo3NTAsIi4uL2NhcnRlc2lhbiI6ODEyLCIuLi9nZXRfZGF0YSI6ODM2LCIuL2NvbnN0YW50cyI6ODYzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NjYsIi4vbGF5b3V0X2RlZmF1bHRzIjo4NjcsIi4vcG9sYXIiOjg3NH1dLDg2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQscz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD1zKHtjb2xvcjppLmNvbG9yLHNob3dsaW5lOm8oe30saS5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjppLmxpbmVjb2xvcixsaW5ld2lkdGg6aS5saW5ld2lkdGgsc2hvd2dyaWQ6byh7fSxpLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOmkuZ3JpZGNvbG9yLGdyaWR3aWR0aDppLmdyaWR3aWR0aH0sInBsb3QiLCJmcm9tLXJvb3QiKSxjPXMoe3RpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyx0aWNrbGVuOmkudGlja2xlbix0aWNrd2lkdGg6aS50aWNrd2lkdGgsdGlja2NvbG9yOmkudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmkuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6aS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDppLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3dleHBvbmVudDppLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDppLmV4cG9uZW50Zm9ybWF0LG1pbmV4cG9uZW50OmkubWluZXhwb25lbnQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsbGF5ZXI6aS5sYXllcn0sInBsb3QiLCJmcm9tLXJvb3QiKSx1PXt2aXNpYmxlOm8oe30saS52aXNpYmxlLHtkZmx0OiEwfSksdHlwZTpvKHt9LGkudHlwZSx7dmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdfSksYXV0b3JhbmdlOm8oe30saS5hdXRvcmFuZ2Use2VkaXRUeXBlOiJwbG90In0pLHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG96ZXJvIiwibm9ubmVnYXRpdmUiLCJub3JtYWwiXSxkZmx0OiJ0b3plcm8iLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6byh7fSxpLnJhbmdlLHtpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX1dLGVkaXRUeXBlOiJwbG90In0pLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LGFuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl0sZGZsdDoiY2xvY2t3aXNlIixlZGl0VHlwZToicGxvdCJ9LHRpdGxlOnt0ZXh0Om8oe30saS50aXRsZS50ZXh0LHtlZGl0VHlwZToicGxvdCIsZGZsdDoiIn0pLGZvbnQ6byh7fSxpLnRpdGxlLmZvbnQse2VkaXRUeXBlOiJwbG90In0pLGVkaXRUeXBlOiJwbG90In0saG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOnt0aXRsZTppLl9kZXByZWNhdGVkLnRpdGxlLHRpdGxlZm9udDppLl9kZXByZWNhdGVkLnRpdGxlZm9udH19O28odSxsLGMpO3ZhciBoPXt2aXNpYmxlOm8oe30saS52aXNpYmxlLHtkZmx0OiEwfSksdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiLSIsImxpbmVhciIsImNhdGVnb3J5Il0sZGZsdDoiLSIsZWRpdFR5cGU6ImNhbGMiLF9ub1RlbXBsYXRpbmc6ITB9LGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRoZXRhdW5pdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFkaWFucyIsImRlZ3JlZXMiXSxkZmx0OiJkZWdyZWVzIixlZGl0VHlwZToiY2FsYyJ9LHBlcmlvZDp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjB9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY291bnRlcmNsb2Nrd2lzZSIsImNsb2Nrd2lzZSJdLGRmbHQ6ImNvdW50ZXJjbG9ja3dpc2UiLGVkaXRUeXBlOiJjYWxjIn0scm90YXRpb246e3ZhbFR5cGU6ImFuZ2xlIixlZGl0VHlwZToiY2FsYyJ9LGhvdmVyZm9ybWF0OmkuaG92ZXJmb3JtYXQsdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIn07byhoLGwsYyksZS5leHBvcnRzPXtkb21haW46YSh7bmFtZToicG9sYXIiLGVkaXRUeXBlOiJwbG90In0pLHNlY3Rvcjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifV0sZGZsdDpbMCwzNjBdLGVkaXRUeXBlOiJwbG90In0saG9sZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxyYWRpYWxheGlzOnUsYW5ndWxhcmF4aXM6aCxncmlkc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNpcmN1bGFyIiwibGluZWFyIl0sZGZsdDoiY2lyY3VsYXIiLGVkaXRUeXBlOiJwbG90In0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MTQsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3ODEsIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODEzLCIuLi9kb21haW4iOjgyNn1dLDg2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxzPXQoIi4uL2dldF9kYXRhIikuZ2V0U3VicGxvdERhdGEsbD10KCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLGM9dCgiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyIpLHU9dCgiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxoPXQoIi4uL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyIpLGY9dCgiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpLHA9dCgiLi4vY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiKSxkPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxnPXQoIi4vc2V0X2NvbnZlcnQiKSxtPXQoIi4vY29uc3RhbnRzIiksdj1tLmF4aXNOYW1lcztmdW5jdGlvbiB5KHQsZSxyLG8pe3ZhciBwPXIoImJnY29sb3IiKTtvLmJnQ29sb3I9aS5jb21iaW5lKHAsby5wYXBlcl9iZ2NvbG9yKTt2YXIgeT1yKCJzZWN0b3IiKTtyKCJob2xlIik7dmFyIGIsXz1zKG8uZnVsbERhdGEsbS5uYW1lLG8uaWQpLHc9by5sYXlvdXRPdXQ7ZnVuY3Rpb24gVCh0LGUpe3JldHVybiByKGIrIi4iK3QsZSl9Zm9yKHZhciBrPTA7azx2Lmxlbmd0aDtrKyspe2I9dltrXSxuLmlzUGxhaW5PYmplY3QodFtiXSl8fCh0W2JdPXt9KTt2YXIgTT10W2JdLEE9YS5uZXdDb250YWluZXIoZSxiKTtBLl9pZD1BLl9uYW1lPWIsQS5fYXR0cj1vLmlkKyIuIitiLEEuX3RyYWNlSW5kaWNlcz1fLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KSk7dmFyIFM9bS5heGlzTmFtZTJkYXRhQXJyYXlbYl0sRT14KE0sQSxULF8sUyk7aChNLEEsVCx7YXhEYXRhOl8sZGF0YUF0dHI6U30pO3ZhciBDLEwsUD1UKCJ2aXNpYmxlIik7c3dpdGNoKGcoQSxlLHcpLFQoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksUCYmKEw9KEM9VCgiY29sb3IiKSk9PT1NLmNvbG9yP0M6by5mb250LmNvbG9yKSxBLl9tPTEsYil7Y2FzZSJyYWRpYWxheGlzIjp2YXIgST1UKCJhdXRvcmFuZ2UiLCFBLmlzVmFsaWRSYW5nZShNLnJhbmdlKSk7TS5hdXRvcmFuZ2U9SSwhSXx8ImxpbmVhciIhPT1FJiYiLSIhPT1FfHxUKCJyYW5nZW1vZGUiKSwicmV2ZXJzZWQiPT09SSYmKEEuX209LTEpLFQoInJhbmdlIiksQS5jbGVhblJhbmdlKCJyYW5nZSIse2RmbHRSYW5nZTpbMCwxXX0pLFAmJihUKCJzaWRlIiksVCgiYW5nbGUiLHlbMF0pLFQoInRpdGxlLnRleHQiKSxuLmNvZXJjZUZvbnQoVCwidGl0bGUuZm9udCIse2ZhbWlseTpvLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqby5mb250LnNpemUpLGNvbG9yOkx9KSk7YnJlYWs7Y2FzZSJhbmd1bGFyYXhpcyI6aWYoImRhdGUiPT09RSl7bi5sb2coIlBvbGFyIHBsb3RzIGRvIG5vdCBzdXBwb3J0IGRhdGUgYW5ndWxhciBheGVzIHlldC4iKTtmb3IodmFyIHo9MDt6PF8ubGVuZ3RoO3orKylfW3pdLnZpc2libGU9ITE7RT1NLnR5cGU9QS50eXBlPSJsaW5lYXIifVQoImxpbmVhciI9PT1FPyJ0aGV0YXVuaXQiOiJwZXJpb2QiKTt2YXIgTz1UKCJkaXJlY3Rpb24iKTtUKCJyb3RhdGlvbiIse2NvdW50ZXJjbG9ja3dpc2U6MCxjbG9ja3dpc2U6OTB9W09dKX1pZihQKWwoTSxBLFQsQS50eXBlKSx1KE0sQSxULEEudHlwZSx7dGlja1N1ZmZpeERmbHQ6ImRlZ3JlZXMiPT09QS50aGV0YXVuaXQ/Ilx4YjAiOnZvaWQgMH0pLGMoTSxBLFQse291dGVyVGlja3M6ITB9KSxUKCJzaG93dGlja2xhYmVscyIpJiYobi5jb2VyY2VGb250KFQsInRpY2tmb250Iix7ZmFtaWx5Om8uZm9udC5mYW1pbHksc2l6ZTpvLmZvbnQuc2l6ZSxjb2xvcjpMfSksVCgidGlja2FuZ2xlIiksVCgidGlja2Zvcm1hdCIpKSxmKE0sQSxULHtkZmx0Q29sb3I6QyxiZ0NvbG9yOm8uYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6ZFtiXX0pLFQoImxheWVyIik7ImNhdGVnb3J5IiE9PUUmJlQoImhvdmVyZm9ybWF0IiksQS5faW5wdXQ9TX0iY2F0ZWdvcnkiPT09ZS5hbmd1bGFyYXhpcy50eXBlJiZyKCJncmlkc2hhcGUiKX1mdW5jdGlvbiB4KHQsZSxyLG4saSl7aWYoIi0iPT09cigidHlwZSIpKXtmb3IodmFyIGEsbz0wO288bi5sZW5ndGg7bysrKWlmKG5bb10udmlzaWJsZSl7YT1uW29dO2JyZWFrfWEmJmFbaV0mJihlLnR5cGU9cChhW2ldLCJncmVnb3JpYW4iKSksIi0iPT09ZS50eXBlP2UudHlwZT0ibGluZWFyIjp0LnR5cGU9ZS50eXBlfXJldHVybiBlLnR5cGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOm0ubmFtZSxhdHRyaWJ1dGVzOmQsaGFuZGxlRGVmYXVsdHM6eSxmb250OmUuZm9udCxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcixmdWxsRGF0YTpyLGxheW91dE91dDplfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi4vY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiOjgwMCwiLi4vY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo4MDMsIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiOjgxNSwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjgyMCwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6ODIxLCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6ODIyLCIuLi9nZXRfZGF0YSI6ODM2LCIuLi9zdWJwbG90X2RlZmF1bHRzIjo4NzYsIi4vY29uc3RhbnRzIjo4NjMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg2NiwiLi9zZXRfY29udmVydCI6ODc1fV0sODY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPW4ubWFya2VyLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7WyJBcmVhIHRyYWNlcyBhcmUgZGVwcmVjYXRlZCEiLCJQbGVhc2Ugc3dpdGNoIHRvIHRoZSAqYmFycG9sYXIqIHRyYWNlIHR5cGUuIl0uam9pbigiICIpO2UuZXhwb3J0cz17cjphKHt9LG4ucix7fSksdDphKHt9LG4udCx7fSksbWFya2VyOntjb2xvcjphKHt9LGkuY29sb3Ise30pLHNpemU6YSh7fSxpLnNpemUse30pLHN5bWJvbDphKHt9LGkuc3ltYm9sLHt9KSxvcGFjaXR5OmEoe30saS5vcGFjaXR5LHt9KSxlZGl0VHlwZToiY2FsYyJ9fX0seyIuLi8uLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExNTh9XSw4Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPVsiTGVnYWN5IHBvbGFyIGNoYXJ0cyBhcmUgZGVwcmVjYXRlZCEiLCJQbGVhc2Ugc3dpdGNoIHRvICpwb2xhciogc3VicGxvdHMuIl0uam9pbigiICIpLHM9aSh7fSxuLmRvbWFpbix7fSk7ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBpKHt9LGUse3Nob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4ifSx0aWNrb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdfSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowfSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIn0sZW5kcGFkZGluZzp7dmFsVHlwZToibnVtYmVyIixkZXNjcmlwdGlvbjpvfSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn19KX1lLmV4cG9ydHM9YSh7cmFkaWFsYXhpczpsKDAse3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LGRvbWFpbjpzLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJudW1iZXIifX0pLGFuZ3VsYXJheGlzOmwoMCx7cmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LHt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MzYwfV19LGRvbWFpbjpzfSksbGF5b3V0OntkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNsb2Nrd2lzZSIsImNvdW50ZXJjbG9ja3dpc2UiXX0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImFuZ2xlIn19fSwicGxvdCIsIm5lc3RlZCIpfSx7Ii4uLy4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzgxLCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxM31dLDg3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsoZS5leHBvcnRzPXQoIi4vbWljcm9wb2xhciIpKS5tYW5hZ2VyPXQoIi4vbWljcm9wb2xhcl9tYW5hZ2VyIil9LHsiLi9taWNyb3BvbGFyIjo4NzEsIi4vbWljcm9wb2xhcl9tYW5hZ2VyIjo4NzJ9XSw4NzE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vLi4vbGliIikuZXh0ZW5kRGVlcEFsbCxhPXQoIi4uLy4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5NSURfU0hJRlQsbz1lLmV4cG9ydHM9e3ZlcnNpb246IjAuMi4yIn07by5BeGlzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLHMsbD17ZGF0YTpbXSxsYXlvdXQ6e319LGM9e30sdT17fSxoPW4uZGlzcGF0Y2goImhvdmVyIiksZj17fTtyZXR1cm4gZi5yZW5kZXI9ZnVuY3Rpb24oYyl7cmV0dXJuIGZ1bmN0aW9uKGMpe2U9Y3x8ZTt2YXIgaD1sLmRhdGEsZj1sLmxheW91dDsoInN0cmluZyI9PXR5cGVvZiBlfHxlLm5vZGVOYW1lKSYmKGU9bi5zZWxlY3QoZSkpLGUuZGF0dW0oaCkuZWFjaCgoZnVuY3Rpb24oZSxsKXt2YXIgYz1lLnNsaWNlKCk7dT17ZGF0YTpvLnV0aWwuY2xvbmVKc29uKGMpLGxheW91dDpvLnV0aWwuY2xvbmVKc29uKGYpfTt2YXIgaD0wO2MuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LmNvbG9yfHwodC5jb2xvcj1mLmRlZmF1bHRDb2xvclJhbmdlW2hdLGg9KGgrMSklZi5kZWZhdWx0Q29sb3JSYW5nZS5sZW5ndGgpLHQuc3Ryb2tlQ29sb3J8fCh0LnN0cm9rZUNvbG9yPSJMaW5lUGxvdCI9PT10Lmdlb21ldHJ5P3QuY29sb3I6bi5yZ2IodC5jb2xvcikuZGFya2VyKCkudG9TdHJpbmcoKSksdS5kYXRhW2VdLmNvbG9yPXQuY29sb3IsdS5kYXRhW2VdLnN0cm9rZUNvbG9yPXQuc3Ryb2tlQ29sb3IsdS5kYXRhW2VdLnN0cm9rZURhc2g9dC5zdHJva2VEYXNoLHUuZGF0YVtlXS5zdHJva2VTaXplPXQuc3Ryb2tlU2l6ZX0pKTt2YXIgcD1jLmZpbHRlcigoZnVuY3Rpb24odCxlKXt2YXIgcj10LnZpc2libGU7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiByfHwhMD09PXJ9KSksZD0hMSxnPXAubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBkPWR8fCJ1bmRlZmluZWQiIT10eXBlb2YgdC5ncm91cElkLHR9KSk7aWYoZCl7dmFyIG09bi5uZXN0KCkua2V5KChmdW5jdGlvbih0LGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5ncm91cElkP3QuZ3JvdXBJZDoidW5zdGFja2VkIn0pKS5lbnRyaWVzKGcpLHY9W10seT1tLm1hcCgoZnVuY3Rpb24odCxlKXtpZigidW5zdGFja2VkIj09PXQua2V5KXJldHVybiB0LnZhbHVlczt2YXIgcj10LnZhbHVlc1swXS5yLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gMH0pKTtyZXR1cm4gdC52YWx1ZXMuZm9yRWFjaCgoZnVuY3Rpb24odCxlLG4pe3QueVN0YWNrPVtyXSx2LnB1c2gocikscj1vLnV0aWwuc3VtQXJyYXlzKHQucixyKX0pKSx0LnZhbHVlc30pKTtwPW4ubWVyZ2UoeSl9cC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QudD1BcnJheS5pc0FycmF5KHQudFswXSk/dC50Olt0LnRdLHQucj1BcnJheS5pc0FycmF5KHQuclswXSk/dC5yOlt0LnJdfSkpO3ZhciB4PU1hdGgubWluKGYud2lkdGgtZi5tYXJnaW4ubGVmdC1mLm1hcmdpbi5yaWdodCxmLmhlaWdodC1mLm1hcmdpbi50b3AtZi5tYXJnaW4uYm90dG9tKS8yO3g9TWF0aC5tYXgoMTAseCk7dmFyIGIsXz1bZi5tYXJnaW4ubGVmdCt4LGYubWFyZ2luLnRvcCt4XTtkP2I9WzAsbi5tYXgoby51dGlsLnN1bUFycmF5cyhvLnV0aWwuYXJyYXlMYXN0KHApLnJbMF0sby51dGlsLmFycmF5TGFzdCh2KSkpXTpiPW4uZXh0ZW50KG8udXRpbC5mbGF0dGVuQXJyYXkocC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucn0pKSkpO2YucmFkaWFsQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmKGJbMF09MCkscj1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihmLnJhZGlhbEF4aXMuZG9tYWluIT1vLkRBVEFFWFRFTlQmJmYucmFkaWFsQXhpcy5kb21haW4/Zi5yYWRpYWxBeGlzLmRvbWFpbjpiKS5yYW5nZShbMCx4XSksdS5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49ci5kb21haW4oKTt2YXIgdyxUPW8udXRpbC5mbGF0dGVuQXJyYXkocC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudH0pKSksaz0ic3RyaW5nIj09dHlwZW9mIFRbMF07ayYmKFQ9by51dGlsLmRlZHVwbGljYXRlKFQpLHc9VC5zbGljZSgpLFQ9bi5yYW5nZShULmxlbmd0aCkscD1wLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj10O3JldHVybiB0LnQ9W1RdLGQmJihyLnlTdGFjaz10LnlTdGFjaykscn0pKSk7dmFyIE09cC5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIkxpbmVQbG90Ij09PXQuZ2VvbWV0cnl8fCJEb3RQbG90Ij09PXQuZ2VvbWV0cnl9KSkubGVuZ3RoPT09cC5sZW5ndGgsQT1udWxsPT09Zi5uZWVkc0VuZFNwYWNpbmc/a3x8IU06Zi5uZWVkc0VuZFNwYWNpbmcsUz1mLmFuZ3VsYXJBeGlzLmRvbWFpbiYmZi5hbmd1bGFyQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmIWsmJmYuYW5ndWxhckF4aXMuZG9tYWluWzBdPj0wP2YuYW5ndWxhckF4aXMuZG9tYWluOm4uZXh0ZW50KFQpLEU9TWF0aC5hYnMoVFsxXS1UWzBdKTtNJiYhayYmKEU9MCk7dmFyIEM9Uy5zbGljZSgpO0EmJmsmJihDWzFdKz1FKTt2YXIgTD1mLmFuZ3VsYXJBeGlzLnRpY2tzQ291bnR8fDQ7TD44JiYoTD1MLyhMLzgpK0wlOCksZi5hbmd1bGFyQXhpcy50aWNrc1N0ZXAmJihMPShDWzFdLUNbMF0pL0wpO3ZhciBQPWYuYW5ndWxhckF4aXMudGlja3NTdGVwfHwoQ1sxXS1DWzBdKS8oTCooZi5taW5vclRpY2tzKzEpKTt3JiYoUD1NYXRoLm1heChNYXRoLnJvdW5kKFApLDEpKSxDWzJdfHwoQ1syXT1QKTt2YXIgST1uLnJhbmdlLmFwcGx5KHRoaXMsQyk7aWYoST1JLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdCh0LnRvUHJlY2lzaW9uKDEyKSl9KSkscz1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihDLnNsaWNlKDAsMikpLnJhbmdlKCJjbG9ja3dpc2UiPT09Zi5kaXJlY3Rpb24/WzAsMzYwXTpbMzYwLDBdKSx1LmxheW91dC5hbmd1bGFyQXhpcy5kb21haW49cy5kb21haW4oKSx1LmxheW91dC5hbmd1bGFyQXhpcy5lbmRQYWRkaW5nPUE/RTowLCJ1bmRlZmluZWQiPT10eXBlb2YodD1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoInN2Zy5jaGFydC1yb290IikpfHx0LmVtcHR5KCkpe3ZhciB6PShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoIjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBjbGFzcz0nY2hhcnQtcm9vdCc+JyArICc8ZyBjbGFzcz0nb3V0ZXItZ3JvdXAnPicgKyAnPGcgY2xhc3M9J2NoYXJ0LWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J2JhY2tncm91bmQtY2lyY2xlJz48L2NpcmNsZT4nICsgJzxnIGNsYXNzPSdnZW9tZXRyeS1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3JhZGlhbCBheGlzLWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J291dHNpZGUtY2lyY2xlJz48L2NpcmNsZT4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdhbmd1bGFyIGF4aXMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdndWlkZXMtZ3JvdXAnPjxsaW5lPjwvbGluZT48Y2lyY2xlIHI9JzAnPjwvY2lyY2xlPjwvZz4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdsZWdlbmQtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0b29sdGlwcy1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3RpdGxlLWdyb3VwJz48dGV4dD48L3RleHQ+PC9nPicgKyAnPC9nPicgKyAnPC9zdmc+IiwiYXBwbGljYXRpb24veG1sIiksTz10aGlzLmFwcGVuZENoaWxkKHRoaXMub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKHouZG9jdW1lbnRFbGVtZW50LCEwKSk7dD1uLnNlbGVjdChPKX10LnNlbGVjdCgiLmd1aWRlcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pLHQuc2VsZWN0KCIuYW5ndWxhci5heGlzLWdyb3VwIikuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSksdC5zZWxlY3QoIi5yYWRpYWwuYXhpcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pO3ZhciBELFI9dC5zZWxlY3QoIi5jaGFydC1ncm91cCIpLEY9e2ZpbGw6Im5vbmUiLHN0cm9rZTpmLnRpY2tDb2xvcn0sQj17ImZvbnQtc2l6ZSI6Zi5mb250LnNpemUsImZvbnQtZmFtaWx5IjpmLmZvbnQuZmFtaWx5LGZpbGw6Zi5mb250LmNvbG9yLCJ0ZXh0LXNoYWRvdyI6WyItMXB4IDBweCIsIjFweCAtMXB4IiwiLTFweCAxcHgiLCIxcHggMXB4Il0ubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiIgIit0KyIgMCAiK2YuZm9udC5vdXRsaW5lQ29sb3J9KSkuam9pbigiLCIpfTtpZihmLnNob3dMZWdlbmQpe0Q9dC5zZWxlY3QoIi5sZWdlbmQtZ3JvdXAiKS5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1t4LGYubWFyZ2luLnRvcF0rIikifSkuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pO3ZhciBOPXAubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPW8udXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIHIuc3ltYm9sPSJEb3RQbG90Ij09PXQuZ2VvbWV0cnk/dC5kb3RUeXBlfHwiY2lyY2xlIjoiTGluZVBsb3QiIT10Lmdlb21ldHJ5PyJzcXVhcmUiOiJsaW5lIixyLnZpc2libGVJbkxlZ2VuZD0idW5kZWZpbmVkIj09dHlwZW9mIHQudmlzaWJsZUluTGVnZW5kfHx0LnZpc2libGVJbkxlZ2VuZCxyLmNvbG9yPSJMaW5lUGxvdCI9PT10Lmdlb21ldHJ5P3Quc3Ryb2tlQ29sb3I6dC5jb2xvcixyfSkpO28uTGVnZW5kKCkuY29uZmlnKHtkYXRhOnAubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5hbWV8fCJFbGVtZW50IitlfSkpLGxlZ2VuZENvbmZpZzppKHt9LG8uTGVnZW5kLmRlZmF1bHRDb25maWcoKS5sZWdlbmRDb25maWcse2NvbnRhaW5lcjpELGVsZW1lbnRzOk4scmV2ZXJzZU9yZGVyOmYubGVnZW5kLnJldmVyc2VPcmRlcn0pfSkoKTt2YXIgaj1ELm5vZGUoKS5nZXRCQm94KCk7eD1NYXRoLm1pbihmLndpZHRoLWoud2lkdGgtZi5tYXJnaW4ubGVmdC1mLm1hcmdpbi5yaWdodCxmLmhlaWdodC1mLm1hcmdpbi50b3AtZi5tYXJnaW4uYm90dG9tKS8yLHg9TWF0aC5tYXgoMTAseCksXz1bZi5tYXJnaW4ubGVmdCt4LGYubWFyZ2luLnRvcCt4XSxyLnJhbmdlKFswLHhdKSx1LmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1yLmRvbWFpbigpLEQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrW19bMF0reCxfWzFdLXhdKyIpIil9ZWxzZSBEPXQuc2VsZWN0KCIubGVnZW5kLWdyb3VwIikuc3R5bGUoe2Rpc3BsYXk6Im5vbmUifSk7dC5hdHRyKHt3aWR0aDpmLndpZHRoLGhlaWdodDpmLmhlaWdodH0pLnN0eWxlKHtvcGFjaXR5OmYub3BhY2l0eX0pLFIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiKSIpLnN0eWxlKHtjdXJzb3I6ImNyb3NzaGFpciJ9KTt2YXIgVT1bKGYud2lkdGgtKGYubWFyZ2luLmxlZnQrZi5tYXJnaW4ucmlnaHQrMip4KyhqP2oud2lkdGg6MCkpKS8yLChmLmhlaWdodC0oZi5tYXJnaW4udG9wK2YubWFyZ2luLmJvdHRvbSsyKngpKS8yXTtpZihVWzBdPU1hdGgubWF4KDAsVVswXSksVVsxXT1NYXRoLm1heCgwLFVbMV0pLHQuc2VsZWN0KCIub3V0ZXItZ3JvdXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitVKyIpIiksZi50aXRsZSYmZi50aXRsZS50ZXh0KXt2YXIgVj10LnNlbGVjdCgiZy50aXRsZS1ncm91cCB0ZXh0Iikuc3R5bGUoQikudGV4dChmLnRpdGxlLnRleHQpLHE9Vi5ub2RlKCkuZ2V0QkJveCgpO1YuYXR0cih7eDpfWzBdLXEud2lkdGgvMix5Ol9bMV0teC0yMH0pfXZhciBIPXQuc2VsZWN0KCIucmFkaWFsLmF4aXMtZ3JvdXAiKTtpZihmLnJhZGlhbEF4aXMuZ3JpZExpbmVzVmlzaWJsZSl7dmFyIEc9SC5zZWxlY3RBbGwoImNpcmNsZS5ncmlkLWNpcmNsZSIpLmRhdGEoci50aWNrcyg1KSk7Ry5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7Y2xhc3M6ImdyaWQtY2lyY2xlIn0pLnN0eWxlKEYpLEcuYXR0cigiciIsciksRy5leGl0KCkucmVtb3ZlKCl9SC5zZWxlY3QoImNpcmNsZS5vdXRzaWRlLWNpcmNsZSIpLmF0dHIoe3I6eH0pLnN0eWxlKEYpO3ZhciBZPXQuc2VsZWN0KCJjaXJjbGUuYmFja2dyb3VuZC1jaXJjbGUiKS5hdHRyKHtyOnh9KS5zdHlsZSh7ZmlsbDpmLmJhY2tncm91bmRDb2xvcixzdHJva2U6Zi5zdHJva2V9KTtmdW5jdGlvbiBXKHQsZSl7cmV0dXJuIHModCklMzYwK2Yub3JpZW50YXRpb259aWYoZi5yYWRpYWxBeGlzLnZpc2libGUpe3ZhciBaPW4uc3ZnLmF4aXMoKS5zY2FsZShyKS50aWNrcyg1KS50aWNrU2l6ZSg1KTtILmNhbGwoWikuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitmLnJhZGlhbEF4aXMub3JpZW50YXRpb24rIikifSksSC5zZWxlY3RBbGwoIi5kb21haW4iKS5zdHlsZShGKSxILnNlbGVjdEFsbCgiZz50ZXh0IikudGV4dCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50ZXh0Q29udGVudCtmLnJhZGlhbEF4aXMudGlja3NTdWZmaXh9KSkuc3R5bGUoQikuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6InN0YXJ0In0pLmF0dHIoe3g6MCx5OjAsZHg6MCxkeTowLHRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJob3Jpem9udGFsIj09PWYucmFkaWFsQXhpcy50aWNrT3JpZW50YXRpb24/InJvdGF0ZSgiKy1mLnJhZGlhbEF4aXMub3JpZW50YXRpb24rIikgdHJhbnNsYXRlKCIrWzAsQlsiZm9udC1zaXplIl1dKyIpIjoidHJhbnNsYXRlKCIrWzAsQlsiZm9udC1zaXplIl1dKyIpIn19KSxILnNlbGVjdEFsbCgiZz5saW5lIikuc3R5bGUoe3N0cm9rZToiYmxhY2sifSl9dmFyIFg9dC5zZWxlY3QoIi5hbmd1bGFyLmF4aXMtZ3JvdXAiKS5zZWxlY3RBbGwoImcuYW5ndWxhci10aWNrIikuZGF0YShJKSxKPVguZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyLXRpY2siLCEwKTtYLmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJyb3RhdGUoIitXKHQpKyIpIn19KS5zdHlsZSh7ZGlzcGxheTpmLmFuZ3VsYXJBeGlzLnZpc2libGU/ImJsb2NrIjoibm9uZSJ9KSxYLmV4aXQoKS5yZW1vdmUoKSxKLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImdyaWQtbGluZSIsITApLmNsYXNzZWQoIm1ham9yIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSUoZi5taW5vclRpY2tzKzEpPT0wfSkpLmNsYXNzZWQoIm1pbm9yIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4hKGUlKGYubWlub3JUaWNrcysxKT09MCl9KSkuc3R5bGUoRiksSi5zZWxlY3RBbGwoIi5taW5vciIpLnN0eWxlKHtzdHJva2U6Zi5taW5vclRpY2tDb2xvcn0pLFguc2VsZWN0KCJsaW5lLmdyaWQtbGluZSIpLmF0dHIoe3gxOmYudGlja0xlbmd0aD94LWYudGlja0xlbmd0aDowLHgyOnh9KS5zdHlsZSh7ZGlzcGxheTpmLmFuZ3VsYXJBeGlzLmdyaWRMaW5lc1Zpc2libGU/ImJsb2NrIjoibm9uZSJ9KSxKLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImF4aXMtdGV4dCIsITApLnN0eWxlKEIpO3ZhciBLPVguc2VsZWN0KCJ0ZXh0LmF4aXMtdGV4dCIpLmF0dHIoe3g6eCtmLmxhYmVsT2Zmc2V0LGR5OmErImVtIix0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXt2YXIgcj1XKHQpLG49eCtmLmxhYmVsT2Zmc2V0LGk9Zi5hbmd1bGFyQXhpcy50aWNrT3JpZW50YXRpb247cmV0dXJuImhvcml6b250YWwiPT1pPyJyb3RhdGUoIistcisiICIrbisiIDApIjoicmFkaWFsIj09aT9yPDI3MCYmcj45MD8icm90YXRlKDE4MCAiK24rIiAwKSI6bnVsbDoicm90YXRlKCIrKHI8PTE4MCYmcj4wPy05MDo5MCkrIiAiK24rIiAwKSJ9fSkuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsZGlzcGxheTpmLmFuZ3VsYXJBeGlzLmxhYmVsc1Zpc2libGU/ImJsb2NrIjoibm9uZSJ9KS50ZXh0KChmdW5jdGlvbih0LGUpe3JldHVybiBlJShmLm1pbm9yVGlja3MrMSkhPTA/IiI6dz93W3RdK2YuYW5ndWxhckF4aXMudGlja3NTdWZmaXg6dCtmLmFuZ3VsYXJBeGlzLnRpY2tzU3VmZml4fSkpLnN0eWxlKEIpO2YuYW5ndWxhckF4aXMucmV3cml0ZVRpY2tzJiZLLnRleHQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKSE9MD8iIjpmLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyh0aGlzLnRleHRDb250ZW50LGUpfSkpO3ZhciBRPW4ubWF4KFIuc2VsZWN0QWxsKCIuYW5ndWxhci10aWNrIHRleHQiKVswXS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0Q1RNKCkuZSt0LmdldEJCb3goKS53aWR0aH0pKSk7RC5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1t4K1EsZi5tYXJnaW4udG9wXSsiKSJ9KTt2YXIgJD10LnNlbGVjdCgiZy5nZW9tZXRyeS1ncm91cCIpLnNlbGVjdEFsbCgiZyIpLnNpemUoKT4wLHR0PXQuc2VsZWN0KCJnLmdlb21ldHJ5LWdyb3VwIikuc2VsZWN0QWxsKCJnLmdlb21ldHJ5IikuZGF0YShwKTtpZih0dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoe2NsYXNzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuImdlb21ldHJ5IGdlb21ldHJ5IitlfX0pLHR0LmV4aXQoKS5yZW1vdmUoKSxwWzBdfHwkKXt2YXIgZXQ9W107cC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3ZhciBuPXt9O24ucmFkaWFsU2NhbGU9cixuLmFuZ3VsYXJTY2FsZT1zLG4uY29udGFpbmVyPXR0LmZpbHRlcigoZnVuY3Rpb24odCxyKXtyZXR1cm4gcj09ZX0pKSxuLmdlb21ldHJ5PXQuZ2VvbWV0cnksbi5vcmllbnRhdGlvbj1mLm9yaWVudGF0aW9uLG4uZGlyZWN0aW9uPWYuZGlyZWN0aW9uLG4uaW5kZXg9ZSxldC5wdXNoKHtkYXRhOnQsZ2VvbWV0cnlDb25maWc6bn0pfSkpO3ZhciBydD1uLm5lc3QoKS5rZXkoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB0LmRhdGEuZ3JvdXBJZHx8InVuc3RhY2tlZCJ9KSkuZW50cmllcyhldCksbnQ9W107cnQuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXsidW5zdGFja2VkIj09PXQua2V5P250PW50LmNvbmNhdCh0LnZhbHVlcy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RdfSkpKTpudC5wdXNoKHQudmFsdWVzKX0pKSxudC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3ZhciByO3I9QXJyYXkuaXNBcnJheSh0KT90WzBdLmdlb21ldHJ5Q29uZmlnLmdlb21ldHJ5OnQuZ2VvbWV0cnlDb25maWcuZ2VvbWV0cnk7dmFyIG49dC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkob1tyXS5kZWZhdWx0Q29uZmlnKCksdCl9KSk7b1tyXSgpLmNvbmZpZyhuKSgpfSkpfXZhciBpdCxhdCxvdD10LnNlbGVjdCgiLmd1aWRlcy1ncm91cCIpLHN0PXQuc2VsZWN0KCIudG9vbHRpcHMtZ3JvdXAiKSxsdD1vLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOnN0LGZvbnRTaXplOjh9KSgpLGN0PW8udG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6c3QsZm9udFNpemU6OH0pKCksdXQ9by50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpzdCxoYXNUaWNrOiEwfSkoKTtpZighayl7dmFyIGh0PW90LnNlbGVjdCgibGluZSIpLmF0dHIoe3gxOjAseTE6MCx5MjowfSkuc3R5bGUoe3N0cm9rZToiZ3JleSIsInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTtSLm9uKCJtb3VzZW1vdmUuYW5ndWxhci1ndWlkZSIsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9by51dGlsLmdldE1vdXNlUG9zKFkpLmFuZ2xlO2h0LmF0dHIoe3gyOi14LHRyYW5zZm9ybToicm90YXRlKCIrcisiKSJ9KS5zdHlsZSh7b3BhY2l0eTouNX0pO3ZhciBuPShyKzE4MCszNjAtZi5vcmllbnRhdGlvbiklMzYwO2l0PXMuaW52ZXJ0KG4pO3ZhciBpPW8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW4oeCsxMixyKzE4MCk7bHQudGV4dChvLnV0aWwucm91bmQoaXQpKS5tb3ZlKFtpWzBdK19bMF0saVsxXStfWzFdXSl9KSkub24oIm1vdXNlb3V0LmFuZ3VsYXItZ3VpZGUiLChmdW5jdGlvbih0LGUpe290LnNlbGVjdCgibGluZSIpLnN0eWxlKHtvcGFjaXR5OjB9KX0pKX12YXIgZnQ9b3Quc2VsZWN0KCJjaXJjbGUiKS5zdHlsZSh7c3Ryb2tlOiJncmV5IixmaWxsOiJub25lIn0pO1Iub24oIm1vdXNlbW92ZS5yYWRpYWwtZ3VpZGUiLChmdW5jdGlvbih0LGUpe3ZhciBuPW8udXRpbC5nZXRNb3VzZVBvcyhZKS5yYWRpdXM7ZnQuYXR0cih7cjpufSkuc3R5bGUoe29wYWNpdHk6LjV9KSxhdD1yLmludmVydChvLnV0aWwuZ2V0TW91c2VQb3MoWSkucmFkaXVzKTt2YXIgaT1vLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKG4sZi5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKTtjdC50ZXh0KG8udXRpbC5yb3VuZChhdCkpLm1vdmUoW2lbMF0rX1swXSxpWzFdK19bMV1dKX0pKS5vbigibW91c2VvdXQucmFkaWFsLWd1aWRlIiwoZnVuY3Rpb24odCxlKXtmdC5zdHlsZSh7b3BhY2l0eTowfSksdXQuaGlkZSgpLGx0LmhpZGUoKSxjdC5oaWRlKCl9KSksdC5zZWxlY3RBbGwoIi5nZW9tZXRyeS1ncm91cCAubWFyayIpLm9uKCJtb3VzZW92ZXIudG9vbHRpcCIsKGZ1bmN0aW9uKGUscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT10aGlzLnN0eWxlLmZpbGwscz0iYmxhY2siLGw9dGhpcy5zdHlsZS5vcGFjaXR5fHwxO2lmKGkuYXR0cih7ImRhdGEtb3BhY2l0eSI6bH0pLGEmJiJub25lIiE9PWEpe2kuYXR0cih7ImRhdGEtZmlsbCI6YX0pLHM9bi5oc2woYSkuZGFya2VyKCkudG9TdHJpbmcoKSxpLnN0eWxlKHtmaWxsOnMsb3BhY2l0eToxfSk7dmFyIGM9e3Q6by51dGlsLnJvdW5kKGVbMF0pLHI6by51dGlsLnJvdW5kKGVbMV0pfTtrJiYoYy50PXdbZVswXV0pO3ZhciB1PSJ0OiAiK2MudCsiLCByOiAiK2MucixoPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVtoLmxlZnQraC53aWR0aC8yLVVbMF0tZi5sZWZ0LGgudG9wK2guaGVpZ2h0LzItVVsxXS1mLnRvcF07dXQuY29uZmlnKHtjb2xvcjpzfSkudGV4dCh1KSx1dC5tb3ZlKHApfWVsc2UgYT10aGlzLnN0eWxlLnN0cm9rZXx8ImJsYWNrIixpLmF0dHIoeyJkYXRhLXN0cm9rZSI6YX0pLHM9bi5oc2woYSkuZGFya2VyKCkudG9TdHJpbmcoKSxpLnN0eWxlKHtzdHJva2U6cyxvcGFjaXR5OjF9KX0pKS5vbigibW91c2Vtb3ZlLnRvb2x0aXAiLChmdW5jdGlvbih0LGUpe2lmKDAhPW4uZXZlbnQud2hpY2gpcmV0dXJuITE7bi5zZWxlY3QodGhpcykuYXR0cigiZGF0YS1maWxsIikmJnV0LnNob3coKX0pKS5vbigibW91c2VvdXQudG9vbHRpcCIsKGZ1bmN0aW9uKHQsZSl7dXQuaGlkZSgpO3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ci5hdHRyKCJkYXRhLWZpbGwiKTtpP3Iuc3R5bGUoe2ZpbGw6aSxvcGFjaXR5OnIuYXR0cigiZGF0YS1vcGFjaXR5Iil9KTpyLnN0eWxlKHtzdHJva2U6ci5hdHRyKCJkYXRhLXN0cm9rZSIpLG9wYWNpdHk6ci5hdHRyKCJkYXRhLW9wYWNpdHkiKX0pfSkpfSkpfShjKSx0aGlzfSxmLmNvbmZpZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbDt2YXIgZT1vLnV0aWwuY2xvbmVKc29uKHQpO3JldHVybiBlLmRhdGEuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtsLmRhdGFbZV18fChsLmRhdGFbZV09e30pLGkobC5kYXRhW2VdLG8uQXhpcy5kZWZhdWx0Q29uZmlnKCkuZGF0YVswXSksaShsLmRhdGFbZV0sdCl9KSksaShsLmxheW91dCxvLkF4aXMuZGVmYXVsdENvbmZpZygpLmxheW91dCksaShsLmxheW91dCxlLmxheW91dCksdGhpc30sZi5nZXRMaXZlQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LGYuZ2V0aW5wdXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gY30sZi5yYWRpYWxTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gcn0sZi5hbmd1bGFyU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHN9LGYuc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucmViaW5kKGYsaCwib24iKSxmfSxvLkF4aXMuZGVmYXVsdENvbmZpZz1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOlt7dDpbMSwyLDMsNF0scjpbMTAsMTEsMTIsMTNdLG5hbWU6IkxpbmUxIixnZW9tZXRyeToiTGluZVBsb3QiLGNvbG9yOm51bGwsc3Ryb2tlRGFzaDoic29saWQiLHN0cm9rZUNvbG9yOm51bGwsc3Ryb2tlU2l6ZToiMSIsdmlzaWJsZUluTGVnZW5kOiEwLG9wYWNpdHk6MX1dLGxheW91dDp7ZGVmYXVsdENvbG9yUmFuZ2U6bi5zY2FsZS5jYXRlZ29yeTEwKCkucmFuZ2UoKSx0aXRsZTpudWxsLGhlaWdodDo0NTAsd2lkdGg6NTAwLG1hcmdpbjp7dG9wOjQwLHJpZ2h0OjQwLGJvdHRvbTo0MCxsZWZ0OjQwfSxmb250OntzaXplOjEyLGNvbG9yOiJncmF5IixvdXRsaW5lQ29sb3I6IndoaXRlIixmYW1pbHk6IlRhaG9tYSwgc2Fucy1zZXJpZiJ9LGRpcmVjdGlvbjoiY2xvY2t3aXNlIixvcmllbnRhdGlvbjowLGxhYmVsT2Zmc2V0OjEwLHJhZGlhbEF4aXM6e2RvbWFpbjpudWxsLG9yaWVudGF0aW9uOi00NSx0aWNrc1N1ZmZpeDoiIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsdGlja09yaWVudGF0aW9uOiJob3Jpem9udGFsIixyZXdyaXRlVGlja3M6bnVsbH0sYW5ndWxhckF4aXM6e2RvbWFpbjpbMCwzNjBdLHRpY2tzU3VmZml4OiIiLHZpc2libGU6ITAsZ3JpZExpbmVzVmlzaWJsZTohMCxsYWJlbHNWaXNpYmxlOiEwLHRpY2tPcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmV3cml0ZVRpY2tzOm51bGwsdGlja3NDb3VudDpudWxsLHRpY2tzU3RlcDpudWxsfSxtaW5vclRpY2tzOjAsdGlja0xlbmd0aDpudWxsLHRpY2tDb2xvcjoic2lsdmVyIixtaW5vclRpY2tDb2xvcjoiI2VlZSIsYmFja2dyb3VuZENvbG9yOiJub25lIixuZWVkc0VuZFNwYWNpbmc6bnVsbCxzaG93TGVnZW5kOiEwLGxlZ2VuZDp7cmV2ZXJzZU9yZGVyOiExfSxvcGFjaXR5OjF9fX0sby51dGlsPXt9LG8uREFUQUVYVEVOVD0iZGF0YUV4dGVudCIsby5BUkVBPSJBcmVhQ2hhcnQiLG8uTElORT0iTGluZVBsb3QiLG8uRE9UPSJEb3RQbG90IixvLkJBUj0iQmFyQ2hhcnQiLG8udXRpbC5fb3ZlcnJpZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdClyIGluIGUmJihlW3JdPXRbcl0pfSxvLnV0aWwuX2V4dGVuZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0sby51dGlsLl9ybmRTbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gMipNYXRoLnJhbmRvbSgpLTErKDIqTWF0aC5yYW5kb20oKS0xKSsoMipNYXRoLnJhbmRvbSgpLTEpfSxvLnV0aWwuZGF0YUZyb21FcXVhdGlvbjI9ZnVuY3Rpb24odCxlKXt2YXIgcj1lfHw2O3JldHVybiBuLnJhbmdlKDAsMzYwK3IscikubWFwKChmdW5jdGlvbihlLHIpe3ZhciBuPWUqTWF0aC5QSS8xODA7cmV0dXJuW2UsdChuKV19KSl9LG8udXRpbC5kYXRhRnJvbUVxdWF0aW9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lfHw2LGE9W10sbz1bXTtuLnJhbmdlKDAsMzYwK2ksaSkuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt2YXIgbj1lKk1hdGguUEkvMTgwLGk9dChuKTthLnB1c2goZSksby5wdXNoKGkpfSkpO3ZhciBzPXt0OmEscjpvfTtyZXR1cm4gciYmKHMubmFtZT1yKSxzfSxvLnV0aWwuZW5zdXJlQXJyYXk9ZnVuY3Rpb24odCxlKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIHQpcmV0dXJuIG51bGw7dmFyIHI9W10uY29uY2F0KHQpO3JldHVybiBuLnJhbmdlKGUpLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gcltlXXx8clswXX0pKX0sby51dGlsLmZpbGxBcnJheXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7dFtlXT1vLnV0aWwuZW5zdXJlQXJyYXkodFtlXSxyKX0pKSx0fSxvLnV0aWwuY2xvbmVKc29uPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKX0sby51dGlsLnZhbGlkYXRlS2V5cz1mdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZS5zcGxpdCgiLiIpKTt2YXIgcj1lLnNoaWZ0KCk7cmV0dXJuIHRbcl0mJighZS5sZW5ndGh8fG9iakhhc0tleXModFtyXSxlKSl9LG8udXRpbC5zdW1BcnJheXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi56aXAodCxlKS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc3VtKHQpfSkpfSxvLnV0aWwuYXJyYXlMYXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfSxvLnV0aWwuYXJyYXlFcXVhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1heCh0Lmxlbmd0aCxlLmxlbmd0aCwxKTtyLS0gPj0wJiZ0W3JdPT09ZVtyXTspO3JldHVybi0yPT09cn0sby51dGlsLmZsYXR0ZW5BcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W107IW8udXRpbC5hcnJheUVxdWFsKGUsdCk7KWU9dCx0PVtdLmNvbmNhdC5hcHBseShbXSx0KTtyZXR1cm4gdH0sby51dGlsLmRlZHVwbGljYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24odCxlLHIpe3JldHVybiByLmluZGV4T2YodCk9PWV9KSl9LG8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlKXt2YXIgcj1lKk1hdGguUEkvMTgwO3JldHVyblt0Kk1hdGguY29zKHIpLHQqTWF0aC5zaW4ocildfSxvLnV0aWwucm91bmQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lfHwyLG49TWF0aC5wb3coMTAscik7cmV0dXJuIE1hdGgucm91bmQodCpuKS9ufSxvLnV0aWwuZ2V0TW91c2VQb3M9ZnVuY3Rpb24odCl7dmFyIGU9bi5tb3VzZSh0Lm5vZGUoKSkscj1lWzBdLGk9ZVsxXSxhPXt9O3JldHVybiBhLng9cixhLnk9aSxhLnBvcz1lLGEuYW5nbGU9MTgwKihNYXRoLmF0YW4yKGkscikrTWF0aC5QSSkvTWF0aC5QSSxhLnJhZGl1cz1NYXRoLnNxcnQocipyK2kqaSksYX0sby51dGlsLmR1cGxpY2F0ZXNDb3VudD1mdW5jdGlvbih0KXtmb3IodmFyIGUscj17fSxuPXt9LGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspKGU9dFtpXSlpbiByPyhyW2VdKyssbltlXT1yW2VdKTpyW2VdPTE7cmV0dXJuIG59LG8udXRpbC5kdXBsaWNhdGVzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyhvLnV0aWwuZHVwbGljYXRlc0NvdW50KHQpKX0sby51dGlsLnRyYW5zbGF0b3I9ZnVuY3Rpb24odCxlLHIsbil7aWYobil7dmFyIGk9ci5zbGljZSgpO3I9ZSxlPWl9dmFyIGE9ZS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0KXJldHVybiB0W2VdfSksdCk7InVuZGVmaW5lZCIhPXR5cGVvZiBhJiYoZS5yZWR1Y2UoKGZ1bmN0aW9uKHQscixuKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQpcmV0dXJuIG49PT1lLmxlbmd0aC0xJiZkZWxldGUgdFtyXSx0W3JdfSksdCksci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHRbZV0mJih0W2VdPXt9KSxuPT09ci5sZW5ndGgtMSYmKHRbZV09YSksdFtlXX0pLHQpKX0sby5Qb2x5Q2hhcnQ9ZnVuY3Rpb24oKXt2YXIgdD1bby5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpXSxlPW4uZGlzcGF0Y2goImhvdmVyIikscj17c29saWQ6Im5vbmUiLGRhc2g6WzUsMl0sZG90OlsyLDVdfTtmdW5jdGlvbiBhKCl7dmFyIGU9dFswXS5nZW9tZXRyeUNvbmZpZyxpPWUuY29udGFpbmVyOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9bi5zZWxlY3QoaSkpLGkuZGF0dW0odCkuZWFjaCgoZnVuY3Rpb24odCxpKXt2YXIgYT0hIXRbMF0uZGF0YS55U3RhY2ssbz10Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gYT9uLnppcCh0LmRhdGEudFswXSx0LmRhdGEuclswXSx0LmRhdGEueVN0YWNrWzBdKTpuLnppcCh0LmRhdGEudFswXSx0LmRhdGEuclswXSl9KSkscz1lLmFuZ3VsYXJTY2FsZSxsPWUucmFkaWFsU2NhbGUuZG9tYWluKClbMF0sYz17YmFyOmZ1bmN0aW9uKHIsaSxhKXt2YXIgbz10W2FdLmRhdGEsbD1lLnJhZGlhbFNjYWxlKHJbMV0pLWUucmFkaWFsU2NhbGUoMCksYz1lLnJhZGlhbFNjYWxlKHJbMl18fDApLHU9by5iYXJXaWR0aDtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBiYXIiLGQ6Ik0iK1tbbCtjLC11LzJdLFtsK2MsdS8yXSxbYyx1LzJdLFtjLC11LzJdXS5qb2luKCJMIikrIloiLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVybiJyb3RhdGUoIisoZS5vcmllbnRhdGlvbitzKHRbMF0pKSsiKSJ9fSl9fTtjLmRvdD1mdW5jdGlvbihyLGksYSl7dmFyIG89clsyXT9bclswXSxyWzFdK3JbMl1dOnIscz1uLnN2Zy5zeW1ib2woKS5zaXplKHRbYV0uZGF0YS5kb3RTaXplKS50eXBlKHRbYV0uZGF0YS5kb3RUeXBlKShyLGkpO24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGRvdCIsZDpzLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3ZhciBuLGksYSxzPShuPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5yYWRpYWxTY2FsZSh0WzFdKSxpPShlLmFuZ3VsYXJTY2FsZSh0WzBdKStlLm9yaWVudGF0aW9uKSpNYXRoLlBJLzE4MDtyZXR1cm57cjpuLHQ6aX19KG8pLGk9bi5yKk1hdGguY29zKG4udCksYT1uLnIqTWF0aC5zaW4obi50KSx7eDppLHk6YX0pO3JldHVybiJ0cmFuc2xhdGUoIitbcy54LHMueV0rIikifX0pfTt2YXIgdT1uLnN2Zy5saW5lLnJhZGlhbCgpLmludGVycG9sYXRlKHRbMF0uZGF0YS5saW5lSW50ZXJwb2xhdGlvbikucmFkaXVzKChmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZSh0WzFdKX0pKS5hbmdsZSgoZnVuY3Rpb24odCl7cmV0dXJuIGUuYW5ndWxhclNjYWxlKHRbMF0pKk1hdGguUEkvMTgwfSkpO2MubGluZT1mdW5jdGlvbihyLGksYSl7dmFyIHM9clsyXT9vW2FdLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm5bdFswXSx0WzFdK3RbMl1dfSkpOm9bYV07aWYobi5zZWxlY3QodGhpcykuZWFjaChjLmRvdCkuc3R5bGUoe29wYWNpdHk6ZnVuY3Rpb24oZSxyKXtyZXR1cm4rdFthXS5kYXRhLmRvdFZpc2libGV9LGZpbGw6ZC5zdHJva2UocixpLGEpfSkuYXR0cih7Y2xhc3M6Im1hcmsgZG90In0pLCEoaT4wKSl7dmFyIGw9bi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInBhdGgubGluZSIpLmRhdGEoWzBdKTtsLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiksbC5hdHRyKHtjbGFzczoibGluZSIsZDp1KHMpLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVybiJyb3RhdGUoIisoZS5vcmllbnRhdGlvbis5MCkrIikifSwicG9pbnRlci1ldmVudHMiOiJub25lIn0pLnN0eWxlKHtmaWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuZmlsbChyLGksYSl9LCJmaWxsLW9wYWNpdHkiOjAsc3Ryb2tlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuc3Ryb2tlKHIsaSxhKX0sInN0cm9rZS13aWR0aCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZFsic3Ryb2tlLXdpZHRoIl0ocixpLGEpfSwic3Ryb2tlLWRhc2hhcnJheSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZFsic3Ryb2tlLWRhc2hhcnJheSJdKHIsaSxhKX0sb3BhY2l0eTpmdW5jdGlvbih0LGUpe3JldHVybiBkLm9wYWNpdHkocixpLGEpfSxkaXNwbGF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQuZGlzcGxheShyLGksYSl9fSl9fTt2YXIgaD1lLmFuZ3VsYXJTY2FsZS5yYW5nZSgpLGY9TWF0aC5hYnMoaFsxXS1oWzBdKS9vWzBdLmxlbmd0aCpNYXRoLlBJLzE4MCxwPW4uc3ZnLmFyYygpLnN0YXJ0QW5nbGUoKGZ1bmN0aW9uKHQpe3JldHVybi1mLzJ9KSkuZW5kQW5nbGUoKGZ1bmN0aW9uKHQpe3JldHVybiBmLzJ9KSkuaW5uZXJSYWRpdXMoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKGwrKHRbMl18fDApKX0pKS5vdXRlclJhZGl1cygoZnVuY3Rpb24odCl7cmV0dXJuIGUucmFkaWFsU2NhbGUobCsodFsyXXx8MCkpK2UucmFkaWFsU2NhbGUodFsxXSl9KSk7Yy5hcmM9ZnVuY3Rpb24odCxyLGkpe24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGFyYyIsZDpwLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVybiJyb3RhdGUoIisoZS5vcmllbnRhdGlvbitzKHRbMF0pKzkwKSsiKSJ9fSl9O3ZhciBkPXtmaWxsOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLmNvbG9yfSxzdHJva2U6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEuc3Ryb2tlQ29sb3J9LCJzdHJva2Utd2lkdGgiOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLnN0cm9rZVNpemUrInB4In0sInN0cm9rZS1kYXNoYXJyYXkiOmZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gclt0W2ldLmRhdGEuc3Ryb2tlRGFzaF19LG9wYWNpdHk6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEub3BhY2l0eX0sZGlzcGxheTpmdW5jdGlvbihlLHIsbil7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dLmRhdGEudmlzaWJsZXx8dFtuXS5kYXRhLnZpc2libGU/ImJsb2NrIjoibm9uZSJ9fSxnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5sYXllciIpLmRhdGEobyk7Zy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoe2NsYXNzOiJsYXllciJ9KTt2YXIgbT1nLnNlbGVjdEFsbCgicGF0aC5tYXJrIikuZGF0YSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdH0pKTttLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cih7Y2xhc3M6Im1hcmsifSksbS5zdHlsZShkKS5lYWNoKGNbZS5nZW9tZXRyeVR5cGVdKSxtLmV4aXQoKS5yZW1vdmUoKSxnLmV4aXQoKS5yZW1vdmUoKX0pKX1yZXR1cm4gYS5jb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt0W3JdfHwodFtyXT17fSksaSh0W3JdLG8uUG9seUNoYXJ0LmRlZmF1bHRDb25maWcoKSksaSh0W3JdLGUpfSkpLHRoaXMpOnR9LGEuZ2V0Q29sb3JTY2FsZT1mdW5jdGlvbigpe30sbi5yZWJpbmQoYSxlLCJvbiIpLGF9LG8uUG9seUNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57ZGF0YTp7bmFtZToiZ2VvbTEiLHQ6W1sxLDIsMyw0XV0scjpbWzEsMiwzLDRdXSxkb3RUeXBlOiJjaXJjbGUiLGRvdFNpemU6NjQsZG90VmlzaWJsZTohMSxiYXJXaWR0aDoyMCxjb2xvcjoiI2ZmYTUwMCIsc3Ryb2tlU2l6ZToxLHN0cm9rZUNvbG9yOiJzaWx2ZXIiLHN0cm9rZURhc2g6InNvbGlkIixvcGFjaXR5OjEsaW5kZXg6MCx2aXNpYmxlOiEwLHZpc2libGVJbkxlZ2VuZDohMH0sZ2VvbWV0cnlDb25maWc6e2dlb21ldHJ5OiJMaW5lUGxvdCIsZ2VvbWV0cnlUeXBlOiJhcmMiLGRpcmVjdGlvbjoiY2xvY2t3aXNlIixvcmllbnRhdGlvbjowLGNvbnRhaW5lcjoiYm9keSIscmFkaWFsU2NhbGU6bnVsbCxhbmd1bGFyU2NhbGU6bnVsbCxjb2xvclNjYWxlOm4uc2NhbGUuY2F0ZWdvcnkyMCgpfX19LG8uQmFyQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5CYXJDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImJhciJ9fX0sby5BcmVhQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5BcmVhQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJhcmMifX19LG8uRG90UGxvdD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkRvdFBsb3QuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJkb3QiLGRvdFR5cGU6ImNpcmNsZSJ9fX0sby5MaW5lUGxvdD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkxpbmVQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToibGluZSJ9fX0sby5MZWdlbmQ9ZnVuY3Rpb24oKXt2YXIgdD1vLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCksZT1uLmRpc3BhdGNoKCJob3ZlciIpO2Z1bmN0aW9uIHIoKXt2YXIgZT10LmxlZ2VuZENvbmZpZyxhPXQuZGF0YS5tYXAoKGZ1bmN0aW9uKHQscil7cmV0dXJuW10uY29uY2F0KHQpLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgYT1pKHt9LGUuZWxlbWVudHNbcl0pO3JldHVybiBhLm5hbWU9dCxhLmNvbG9yPVtdLmNvbmNhdChlLmVsZW1lbnRzW3JdLmNvbG9yKVtuXSxhfSkpfSkpLG89bi5tZXJnZShhKTtvPW8uZmlsdGVyKChmdW5jdGlvbih0LHIpe3JldHVybiBlLmVsZW1lbnRzW3JdJiYoZS5lbGVtZW50c1tyXS52aXNpYmxlSW5MZWdlbmR8fCJ1bmRlZmluZWQiPT10eXBlb2YgZS5lbGVtZW50c1tyXS52aXNpYmxlSW5MZWdlbmQpfSkpLGUucmV2ZXJzZU9yZGVyJiYobz1vLnJldmVyc2UoKSk7dmFyIHM9ZS5jb250YWluZXI7KCJzdHJpbmciPT10eXBlb2Ygc3x8cy5ub2RlTmFtZSkmJihzPW4uc2VsZWN0KHMpKTt2YXIgbD1vLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb2xvcn0pKSxjPWUuZm9udFNpemUsdT1udWxsPT1lLmlzQ29udGludW91cz8ibnVtYmVyIj09dHlwZW9mIG9bMF06ZS5pc0NvbnRpbnVvdXMsaD11P2UuaGVpZ2h0OmMqby5sZW5ndGgsZj1zLmNsYXNzZWQoImxlZ2VuZC1ncm91cCIsITApLnNlbGVjdEFsbCgic3ZnIikuZGF0YShbMF0pLHA9Zi5lbnRlcigpLmFwcGVuZCgic3ZnIikuYXR0cih7d2lkdGg6MzAwLGhlaWdodDpoK2MseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix2ZXJzaW9uOiIxLjEifSk7cC5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmQtYXhpcyIsITApLHAuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kLW1hcmtzIiwhMCk7dmFyIGQ9bi5yYW5nZShvLmxlbmd0aCksZz1uLnNjYWxlW3U/ImxpbmVhciI6Im9yZGluYWwiXSgpLmRvbWFpbihkKS5yYW5nZShsKSxtPW4uc2NhbGVbdT8ibGluZWFyIjoib3JkaW5hbCJdKCkuZG9tYWluKGQpW3U/InJhbmdlIjoicmFuZ2VQb2ludHMiXShbMCxoXSk7aWYodSl7dmFyIHY9Zi5zZWxlY3QoIi5sZWdlbmQtbWFya3MiKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cih7aWQ6ImdyYWQxIix4MToiMCUiLHkxOiIwJSIseDI6IjAlIix5MjoiMTAwJSJ9KS5zZWxlY3RBbGwoInN0b3AiKS5kYXRhKGwpO3YuZW50ZXIoKS5hcHBlbmQoInN0b3AiKSx2LmF0dHIoe29mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBlLyhsLmxlbmd0aC0xKSoxMDArIiUifX0pLnN0eWxlKHsic3RvcC1jb2xvciI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH19KSxmLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkuYXR0cih7aGVpZ2h0OmUuaGVpZ2h0LHdpZHRoOmUuY29sb3JCYW5kV2lkdGgsZmlsbDoidXJsKCNncmFkMSkifSl9ZWxzZXt2YXIgeT1mLnNlbGVjdCgiLmxlZ2VuZC1tYXJrcyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQtbWFyayIpLmRhdGEobyk7eS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkseS5hdHRyKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4idHJhbnNsYXRlKCIrW2MvMixtKGUpK2MvMl0rIikifSxkOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG89dC5zeW1ib2w7cmV0dXJuIGE9MyooaT1jKSwibGluZSI9PT0ocj1vKT8iTSIrW1staS8yLC1pLzEyXSxbaS8yLC1pLzEyXSxbaS8yLGkvMTJdLFstaS8yLGkvMTJdXSsiWiI6LTEhPW4uc3ZnLnN5bWJvbFR5cGVzLmluZGV4T2Yocik/bi5zdmcuc3ltYm9sKCkudHlwZShyKS5zaXplKGEpKCk6bi5zdmcuc3ltYm9sKCkudHlwZSgic3F1YXJlIikuc2l6ZShhKSgpfSxmaWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGcoZSl9fSkseS5leGl0KCkucmVtb3ZlKCl9dmFyIHg9bi5zdmcuYXhpcygpLnNjYWxlKG0pLm9yaWVudCgicmlnaHQiKSxiPWYuc2VsZWN0KCJnLmxlZ2VuZC1heGlzIikuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbdT9lLmNvbG9yQmFuZFdpZHRoOmMsYy8yXSsiKSJ9KS5jYWxsKHgpO3JldHVybiBiLnNlbGVjdEFsbCgiLmRvbWFpbiIpLnN0eWxlKHtmaWxsOiJub25lIixzdHJva2U6Im5vbmUifSksYi5zZWxlY3RBbGwoImxpbmUiKS5zdHlsZSh7ZmlsbDoibm9uZSIsc3Ryb2tlOnU/ZS50ZXh0Q29sb3I6Im5vbmUifSksYi5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSh7ZmlsbDplLnRleHRDb2xvciwiZm9udC1zaXplIjplLmZvbnRTaXplfSkudGV4dCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gb1tlXS5uYW1lfSkpLHJ9cmV0dXJuIHIuY29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQsZSksdGhpcyk6dH0sbi5yZWJpbmQocixlLCJvbiIpLHJ9LG8uTGVnZW5kLmRlZmF1bHRDb25maWc9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZGF0YTpbImEiLCJiIiwiYyJdLGxlZ2VuZENvbmZpZzp7ZWxlbWVudHM6W3tzeW1ib2w6ImxpbmUiLGNvbG9yOiJyZWQifSx7c3ltYm9sOiJzcXVhcmUiLGNvbG9yOiJ5ZWxsb3cifSx7c3ltYm9sOiJkaWFtb25kIixjb2xvcjoibGltZWdyZWVuIn1dLGhlaWdodDoxNTAsY29sb3JCYW5kV2lkdGg6MzAsZm9udFNpemU6MTIsY29udGFpbmVyOiJib2R5Iixpc0NvbnRpbnVvdXM6bnVsbCx0ZXh0Q29sb3I6ImdyZXkiLHJldmVyc2VPcmRlcjohMX19fSxvLnRvb2x0aXBQYW5lbD1mdW5jdGlvbigpe3ZhciB0LGUscixhPXtjb250YWluZXI6bnVsbCxoYXNUaWNrOiExLGZvbnRTaXplOjEyLGNvbG9yOiJ3aGl0ZSIscGFkZGluZzo1fSxzPSJ0b29sdGlwLSIrby50b29sdGlwUGFuZWwudWlkKyssbD0xMCxjPWZ1bmN0aW9uKCl7dmFyIG49KHQ9YS5jb250YWluZXIuc2VsZWN0QWxsKCJnLiIrcykuZGF0YShbMF0pKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQocywhMCkuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLGRpc3BsYXk6Im5vbmUifSk7cmV0dXJuIHI9bi5hcHBlbmQoInBhdGgiKS5zdHlsZSh7ZmlsbDoid2hpdGUiLCJmaWxsLW9wYWNpdHkiOi45fSkuYXR0cih7ZDoiTTAgMCJ9KSxlPW4uYXBwZW5kKCJ0ZXh0IikuYXR0cih7ZHg6YS5wYWRkaW5nK2wsZHk6LjMqK2EuZm9udFNpemV9KSxjfTtyZXR1cm4gYy50ZXh0PWZ1bmN0aW9uKGkpe3ZhciBvPW4uaHNsKGEuY29sb3IpLmwscz1vPj0uNT8iI2FhYSI6IndoaXRlIix1PW8+PS41PyJibGFjayI6IndoaXRlIixoPWl8fCIiO2Uuc3R5bGUoe2ZpbGw6dSwiZm9udC1zaXplIjphLmZvbnRTaXplKyJweCJ9KS50ZXh0KGgpO3ZhciBmPWEucGFkZGluZyxwPWUubm9kZSgpLmdldEJCb3goKSxkPXtmaWxsOmEuY29sb3Isc3Ryb2tlOnMsInN0cm9rZS13aWR0aCI6IjJweCJ9LGc9cC53aWR0aCsyKmYrbCxtPXAuaGVpZ2h0KzIqZjtyZXR1cm4gci5hdHRyKHtkOiJNIitbW2wsLW0vMl0sW2wsLW0vNF0sW2EuaGFzVGljaz8wOmwsMF0sW2wsbS80XSxbbCxtLzJdLFtnLG0vMl0sW2csLW0vMl1dLmpvaW4oIkwiKSsiWiJ9KS5zdHlsZShkKSx0LmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW2wsLW0vMisyKmZdKyIpIn0pLHQuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGN9LGMubW92ZT1mdW5jdGlvbihlKXtpZih0KXJldHVybiB0LmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW2VbMF0sZVsxXV0rIikifSkuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGN9LGMuaGlkZT1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6Im5vbmUifSksY30sYy5zaG93PWZ1bmN0aW9uKCl7aWYodClyZXR1cm4gdC5zdHlsZSh7ZGlzcGxheToiYmxvY2sifSksY30sYy5jb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIGkoYSx0KSxjfSxjfSxvLnRvb2x0aXBQYW5lbC51aWQ9MSxvLmFkYXB0ZXI9e30sby5hZGFwdGVyLnBsb3RseT1mdW5jdGlvbigpe3ZhciB0PXtjb252ZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYodC5kYXRhJiYoci5kYXRhPXQuZGF0YS5tYXAoKGZ1bmN0aW9uKHQscil7dmFyIG49aSh7fSx0KTtyZXR1cm5bW24sWyJtYXJrZXIiLCJjb2xvciJdLFsiY29sb3IiXV0sW24sWyJtYXJrZXIiLCJvcGFjaXR5Il0sWyJvcGFjaXR5Il1dLFtuLFsibWFya2VyIiwibGluZSIsImNvbG9yIl0sWyJzdHJva2VDb2xvciJdXSxbbixbIm1hcmtlciIsImxpbmUiLCJkYXNoIl0sWyJzdHJva2VEYXNoIl1dLFtuLFsibWFya2VyIiwibGluZSIsIndpZHRoIl0sWyJzdHJva2VTaXplIl1dLFtuLFsibWFya2VyIiwic3ltYm9sIl0sWyJkb3RUeXBlIl1dLFtuLFsibWFya2VyIiwic2l6ZSJdLFsiZG90U2l6ZSJdXSxbbixbIm1hcmtlciIsImJhcldpZHRoIl0sWyJiYXJXaWR0aCJdXSxbbixbImxpbmUiLCJpbnRlcnBvbGF0aW9uIl0sWyJsaW5lSW50ZXJwb2xhdGlvbiJdXSxbbixbInNob3dsZWdlbmQiXSxbInZpc2libGVJbkxlZ2VuZCJdXV0uZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtvLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLHQuY29uY2F0KGUpKX0pKSxlfHxkZWxldGUgbi5tYXJrZXIsZSYmZGVsZXRlIG4uZ3JvdXBJZCxlPygiTGluZVBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIiwhMD09PW4uZG90VmlzaWJsZT8oZGVsZXRlIG4uZG90VmlzaWJsZSxuLm1vZGU9ImxpbmVzK21hcmtlcnMiKTpuLm1vZGU9ImxpbmVzIik6IkRvdFBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIixuLm1vZGU9Im1hcmtlcnMiKToiQXJlYUNoYXJ0Ij09PW4uZ2VvbWV0cnk/bi50eXBlPSJhcmVhIjoiQmFyQ2hhcnQiPT09bi5nZW9tZXRyeSYmKG4udHlwZT0iYmFyIiksZGVsZXRlIG4uZ2VvbWV0cnkpOigic2NhdHRlciI9PT1uLnR5cGU/ImxpbmVzIj09PW4ubW9kZT9uLmdlb21ldHJ5PSJMaW5lUGxvdCI6Im1hcmtlcnMiPT09bi5tb2RlP24uZ2VvbWV0cnk9IkRvdFBsb3QiOiJsaW5lcyttYXJrZXJzIj09PW4ubW9kZSYmKG4uZ2VvbWV0cnk9IkxpbmVQbG90IixuLmRvdFZpc2libGU9ITApOiJhcmVhIj09PW4udHlwZT9uLmdlb21ldHJ5PSJBcmVhQ2hhcnQiOiJiYXIiPT09bi50eXBlJiYobi5nZW9tZXRyeT0iQmFyQ2hhcnQiKSxkZWxldGUgbi5tb2RlLGRlbGV0ZSBuLnR5cGUpLG59KSksIWUmJnQubGF5b3V0JiYic3RhY2siPT09dC5sYXlvdXQuYmFybW9kZSkpe3ZhciBhPW8udXRpbC5kdXBsaWNhdGVzKHIuZGF0YS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2VvbWV0cnl9KSkpO3IuZGF0YS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3ZhciBuPWEuaW5kZXhPZih0Lmdlb21ldHJ5KTstMSE9biYmKHIuZGF0YVtlXS5ncm91cElkPW4pfSkpfWlmKHQubGF5b3V0KXt2YXIgcz1pKHt9LHQubGF5b3V0KTtpZihbW3MsWyJwbG90X2JnY29sb3IiXSxbImJhY2tncm91bmRDb2xvciJdXSxbcyxbInNob3dsZWdlbmQiXSxbInNob3dMZWdlbmQiXV0sW3MsWyJyYWRpYWxheGlzIl0sWyJyYWRpYWxBeGlzIl1dLFtzLFsiYW5ndWxhcmF4aXMiXSxbImFuZ3VsYXJBeGlzIl1dLFtzLmFuZ3VsYXJheGlzLFsic2hvd2xpbmUiXSxbImdyaWRMaW5lc1Zpc2libGUiXV0sW3MuYW5ndWxhcmF4aXMsWyJzaG93dGlja2xhYmVscyJdLFsibGFiZWxzVmlzaWJsZSJdXSxbcy5hbmd1bGFyYXhpcyxbIm50aWNrcyJdLFsidGlja3NDb3VudCJdXSxbcy5hbmd1bGFyYXhpcyxbInRpY2tvcmllbnRhdGlvbiJdLFsidGlja09yaWVudGF0aW9uIl1dLFtzLmFuZ3VsYXJheGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW3MuYW5ndWxhcmF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtzLmFuZ3VsYXJheGlzLFsiZW5kcGFkZGluZyJdLFsiZW5kUGFkZGluZyJdXSxbcy5yYWRpYWxheGlzLFsic2hvd2xpbmUiXSxbImdyaWRMaW5lc1Zpc2libGUiXV0sW3MucmFkaWFsYXhpcyxbInRpY2tvcmllbnRhdGlvbiJdLFsidGlja09yaWVudGF0aW9uIl1dLFtzLnJhZGlhbGF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbcy5yYWRpYWxheGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbcy5hbmd1bGFyQXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtzLmFuZ3VsYXJBeGlzLFsic2hvd3RpY2tsYWJlbHMiXSxbImxhYmVsc1Zpc2libGUiXV0sW3MuYW5ndWxhckF4aXMsWyJudGlja3MiXSxbInRpY2tzQ291bnQiXV0sW3MuYW5ndWxhckF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbcy5hbmd1bGFyQXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtzLmFuZ3VsYXJBeGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbcy5hbmd1bGFyQXhpcyxbImVuZHBhZGRpbmciXSxbImVuZFBhZGRpbmciXV0sW3MucmFkaWFsQXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtzLnJhZGlhbEF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbcy5yYWRpYWxBeGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW3MucmFkaWFsQXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW3MuZm9udCxbIm91dGxpbmVjb2xvciJdLFsib3V0bGluZUNvbG9yIl1dLFtzLmxlZ2VuZCxbInRyYWNlb3JkZXIiXSxbInJldmVyc2VPcmRlciJdXSxbcyxbImxhYmVsb2Zmc2V0Il0sWyJsYWJlbE9mZnNldCJdXSxbcyxbImRlZmF1bHRjb2xvcnJhbmdlIl0sWyJkZWZhdWx0Q29sb3JSYW5nZSJdXV0uZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtvLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLHQuY29uY2F0KGUpKX0pKSxlPygidW5kZWZpbmVkIiE9dHlwZW9mIHMudGlja0xlbmd0aCYmKHMuYW5ndWxhcmF4aXMudGlja2xlbj1zLnRpY2tMZW5ndGgsZGVsZXRlIHMudGlja0xlbmd0aCkscy50aWNrQ29sb3ImJihzLmFuZ3VsYXJheGlzLnRpY2tjb2xvcj1zLnRpY2tDb2xvcixkZWxldGUgcy50aWNrQ29sb3IpKToocy5hbmd1bGFyQXhpcyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzLmFuZ3VsYXJBeGlzLnRpY2tsZW4mJihzLnRpY2tMZW5ndGg9cy5hbmd1bGFyQXhpcy50aWNrbGVuKSxzLmFuZ3VsYXJBeGlzJiYidW5kZWZpbmVkIiE9dHlwZW9mIHMuYW5ndWxhckF4aXMudGlja2NvbG9yJiYocy50aWNrQ29sb3I9cy5hbmd1bGFyQXhpcy50aWNrY29sb3IpKSxzLmxlZ2VuZCYmImJvb2xlYW4iIT10eXBlb2Ygcy5sZWdlbmQucmV2ZXJzZU9yZGVyJiYocy5sZWdlbmQucmV2ZXJzZU9yZGVyPSJub3JtYWwiIT1zLmxlZ2VuZC5yZXZlcnNlT3JkZXIpLHMubGVnZW5kJiYiYm9vbGVhbiI9PXR5cGVvZiBzLmxlZ2VuZC50cmFjZW9yZGVyJiYocy5sZWdlbmQudHJhY2VvcmRlcj1zLmxlZ2VuZC50cmFjZW9yZGVyPyJyZXZlcnNlZCI6Im5vcm1hbCIsZGVsZXRlIHMubGVnZW5kLnJldmVyc2VPcmRlcikscy5tYXJnaW4mJiJ1bmRlZmluZWQiIT10eXBlb2Ygcy5tYXJnaW4udCl7dmFyIGw9WyJ0IiwiciIsImIiLCJsIiwicGFkIl0sYz1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInBhZCJdLHU9e307bi5lbnRyaWVzKHMubWFyZ2luKS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3VbY1tsLmluZGV4T2YodC5rZXkpXV09dC52YWx1ZX0pKSxzLm1hcmdpbj11fWUmJihkZWxldGUgcy5uZWVkc0VuZFNwYWNpbmcsZGVsZXRlIHMubWlub3JUaWNrQ29sb3IsZGVsZXRlIHMubWlub3JUaWNrcyxkZWxldGUgcy5hbmd1bGFyYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMuYW5ndWxhcmF4aXMudGlja3NTdGVwLGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnJld3JpdGVUaWNrcyxkZWxldGUgcy5hbmd1bGFyYXhpcy5udGlja3MsZGVsZXRlIHMucmFkaWFsYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLnJhZGlhbGF4aXMudGlja3NDb3VudCxkZWxldGUgcy5yYWRpYWxheGlzLnRpY2tzU3RlcCxkZWxldGUgcy5yYWRpYWxheGlzLnJld3JpdGVUaWNrcyxkZWxldGUgcy5yYWRpYWxheGlzLm50aWNrcyksci5sYXlvdXQ9c31yZXR1cm4gcn19O3JldHVybiB0fX0seyIuLi8uLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3MTcsIi4uLy4uLy4uL2xpYiI6NzUwLGQzOjE2OX1dLDg3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vLi4vbGliIiksYT10KCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuL21pY3JvcG9sYXIiKSxzPXQoIi4vdW5kb19tYW5hZ2VyIiksbD1pLmV4dGVuZERlZXBBbGwsYz1lLmV4cG9ydHM9e307Yy5mcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGUscixpLGEsdSxoPW5ldyBzO2Z1bmN0aW9uIGYocixzKXtyZXR1cm4gcyYmKHU9cyksbi5zZWxlY3Qobi5zZWxlY3QodSkubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXI+Kjpub3QoLmNoYXJ0LXJvb3QpIikucmVtb3ZlKCksZT1lP2woZSxyKTpyLGl8fChpPW8uQXhpcygpKSxhPW8uYWRhcHRlci5wbG90bHkoKS5jb252ZXJ0KGUpLGkuY29uZmlnKGEpLnJlbmRlcih1KSx0LmRhdGE9ZS5kYXRhLHQubGF5b3V0PWUubGF5b3V0LGMuZmlsbExheW91dCh0KSxlfXJldHVybiBmLmlzUG9sYXI9ITAsZi5zdmc9ZnVuY3Rpb24oKXtyZXR1cm4gaS5zdmcoKX0sZi5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sZi5nZXRMaXZlQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIG8uYWRhcHRlci5wbG90bHkoKS5jb252ZXJ0KGkuZ2V0TGl2ZUNvbmZpZygpLCEwKX0sZi5nZXRMaXZlU2NhbGVzPWZ1bmN0aW9uKCl7cmV0dXJue3Q6aS5hbmd1bGFyU2NhbGUoKSxyOmkucmFkaWFsU2NhbGUoKX19LGYuc2V0VW5kb1BvaW50PWZ1bmN0aW9uKCl7dmFyIHQsbixpPXRoaXMsYT1vLnV0aWwuY2xvbmVKc29uKGUpO3Q9YSxuPXIsaC5hZGQoe3VuZG86ZnVuY3Rpb24oKXtuJiZpKG4pfSxyZWRvOmZ1bmN0aW9uKCl7aSh0KX19KSxyPW8udXRpbC5jbG9uZUpzb24oYSl9LGYudW5kbz1mdW5jdGlvbigpe2gudW5kbygpfSxmLnJlZG89ZnVuY3Rpb24oKXtoLnJlZG8oKX0sZn0sYy5maWxsTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikscj1lLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKSxpPXQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5zdmcmJnQuZnJhbWV3b3JrLnN2ZygpLG89e3dpZHRoOjgwMCxoZWlnaHQ6NjAwLHBhcGVyX2JnY29sb3I6YS5iYWNrZ3JvdW5kLF9jb250YWluZXI6ZSxfcGFwZXJkaXY6cixfcGFwZXI6aX07dC5fZnVsbExheW91dD1sKG8sdC5sYXlvdXQpfX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uLy4uL2xpYiI6NzUwLCIuL21pY3JvcG9sYXIiOjg3MSwiLi91bmRvX21hbmFnZXIiOjg3MyxkMzoxNjl9XSw4NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT1bXSxyPS0xLG49ITE7ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0PyhuPSEwLHRbZV0oKSxuPSExLHRoaXMpOnRoaXN9cmV0dXJue2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gbnx8KGUuc3BsaWNlKHIrMSxlLmxlbmd0aC1yKSxlLnB1c2godCkscj1lLmxlbmd0aC0xKSx0aGlzfSxzZXRDYWxsYmFjazpmdW5jdGlvbihlKXt0PWV9LHVuZG86ZnVuY3Rpb24oKXt2YXIgbj1lW3JdO3JldHVybiBuPyhpKG4sInVuZG8iKSxyLT0xLHQmJnQobi51bmRvKSx0aGlzKTp0aGlzfSxyZWRvOmZ1bmN0aW9uKCl7dmFyIG49ZVtyKzFdO3JldHVybiBuPyhpKG4sInJlZG8iKSxyKz0xLHQmJnQobi5yZWRvKSx0aGlzKTp0aGlzfSxjbGVhcjpmdW5jdGlvbigpe2U9W10scj0tMX0saGFzVW5kbzpmdW5jdGlvbigpe3JldHVybi0xIT09cn0saGFzUmVkbzpmdW5jdGlvbigpe3JldHVybiByPGUubGVuZ3RoLTF9LGdldENvbW1hbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGV9LGdldFByZXZpb3VzQ29tbWFuZDpmdW5jdGlvbigpe3JldHVybiBlW3ItMV19LGdldEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9fX19LHt9XSw4NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9dCgiLi4vcGxvdHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaD10KCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxmPXQoIi4vc2V0X2NvbnZlcnQiKSxwPXQoIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5kb0F1dG9SYW5nZSxkPXQoIi4uL2NhcnRlc2lhbi9kcmFnYm94IiksZz10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IiksbT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksdj10KCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLHk9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QseD10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Iikuc2VsZWN0T25DbGljayxiPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCxfPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSx3PXQoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLFQ9dCgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLGs9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxNPXQoIi4vY29uc3RhbnRzIiksQT10KCIuL2hlbHBlcnMiKSxTPW8uXyxFPW8ubW9kLEM9by5kZWcycmFkLEw9by5yYWQyZGVnO2Z1bmN0aW9uIFAodCxlKXt0aGlzLmlkPWUsdGhpcy5nZD10LHRoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT1udWxsLHRoaXMudmFuZ2xlcz1udWxsLHRoaXMucmFkaWFsQXhpc0FuZ2xlPW51bGwsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e30sdGhpcy5jbGlwUGF0aHM9e30sdGhpcy5jbGlwSWRzPXt9LHRoaXMudmlld0luaXRpYWw9e307dmFyIHI9dC5fZnVsbExheW91dCxuPSJjbGlwIityLl91aWQrZTt0aGlzLmNsaXBJZHMuZm9yVHJhY2VzPW4rIi1mb3ItdHJhY2VzIix0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXM9ci5fY2xpcHMuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIix0aGlzLmNsaXBJZHMuZm9yVHJhY2VzKSx0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuYXBwZW5kKCJwYXRoIiksdGhpcy5mcmFtZXdvcms9ci5fcG9sYXJsYXllci5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZSksdGhpcy5yYWRpYWxUaWNrTGF5b3V0PW51bGwsdGhpcy5hbmd1bGFyVGlja0xheW91dD1udWxsfXZhciBJPVAucHJvdG90eXBlO2Z1bmN0aW9uIHoodCl7dmFyIGU9dC50aWNrcytTdHJpbmcodC50aWNrbGVuKStTdHJpbmcodC5zaG93dGlja2xhYmVscyk7cmV0dXJuInNpZGUiaW4gdCYmKGUrPXQuc2lkZSksZX1mdW5jdGlvbiBPKHQsZSl7cmV0dXJuIGVbby5maW5kSW5kZXhPZk1pbihlLChmdW5jdGlvbihlKXtyZXR1cm4gby5hbmdsZURpc3QodCxlKX0pKV19ZnVuY3Rpb24gRCh0LGUscil7cmV0dXJuIGU/KHQuYXR0cigiZGlzcGxheSIsbnVsbCksdC5hdHRyKHIpKTp0JiZ0LmF0dHIoImRpc3BsYXkiLCJub25lIiksdH1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuInRyYW5zbGF0ZSgiK3QrIiwiK2UrIikifWZ1bmN0aW9uIEYodCl7cmV0dXJuInJvdGF0ZSgiK3QrIikifWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgUCh0LGUpfSxJLnBsb3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7aWYoITE9PT10W25dWzBdLnRyYWNlLmNsaXBvbmF4aXMpe3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319dGhpcy51cGRhdGVMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZUxheW91dChlLHIpLGMuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ2QsdGhpcyx0LHIpLHRoaXMudXBkYXRlRngoZSxyKX0sSS51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVycyxpPWUucmFkaWFsYXhpcyxhPWUuYW5ndWxhcmF4aXMsbz1NLmxheWVyTmFtZXMscz1vLmluZGV4T2YoImZyb250cGxvdCIpLGw9by5zbGljZSgwLHMpLGM9ImJlbG93IHRyYWNlcyI9PT1hLmxheWVyLHU9ImJlbG93IHRyYWNlcyI9PT1pLmxheWVyO2MmJmwucHVzaCgiYW5ndWxhci1saW5lIiksdSYmbC5wdXNoKCJyYWRpYWwtbGluZSIpLGMmJmwucHVzaCgiYW5ndWxhci1heGlzIiksdSYmbC5wdXNoKCJyYWRpYWwtYXhpcyIpLGwucHVzaCgiZnJvbnRwbG90IiksY3x8bC5wdXNoKCJhbmd1bGFyLWxpbmUiKSx1fHxsLnB1c2goInJhZGlhbC1saW5lIiksY3x8bC5wdXNoKCJhbmd1bGFyLWF4aXMiKSx1fHxsLnB1c2goInJhZGlhbC1heGlzIik7dmFyIGg9dGhpcy5mcmFtZXdvcmsuc2VsZWN0QWxsKCIucG9sYXJzdWJsYXllciIpLmRhdGEobCxTdHJpbmcpO2guZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJwb2xhcnN1YmxheWVyICIrdH0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yW3RdPW4uc2VsZWN0KHRoaXMpO3N3aXRjaCh0KXtjYXNlImZyb250cGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJiYXJsYXllciIsITApLGUuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk7YnJlYWs7Y2FzZSJiYWNrcGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJtYXBsYXllciIsITApO2JyZWFrO2Nhc2UicGxvdGJnIjpyLmJnPWUuYXBwZW5kKCJwYXRoIik7YnJlYWs7Y2FzZSJyYWRpYWwtZ3JpZCI6Y2FzZSJhbmd1bGFyLWdyaWQiOmUuc3R5bGUoImZpbGwiLCJub25lIik7YnJlYWs7Y2FzZSJyYWRpYWwtbGluZSI6ZS5hcHBlbmQoImxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTticmVhaztjYXNlImFuZ3VsYXItbGluZSI6ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX19KSksaC5vcmRlcigpfSxJLnVwZGF0ZUxheW91dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzLG49dC5fc2l6ZSxpPWUucmFkaWFsYXhpcyxhPWUuYW5ndWxhcmF4aXMsbz1lLmRvbWFpbi54LGM9ZS5kb21haW4ueTt0aGlzLnhPZmZzZXQ9bi5sK24udypvWzBdLHRoaXMueU9mZnNldD1uLnQrbi5oKigxLWNbMV0pO3ZhciB1PXRoaXMueExlbmd0aD1uLncqKG9bMV0tb1swXSksaD10aGlzLnlMZW5ndGg9bi5oKihjWzFdLWNbMF0pLGY9ZS5zZWN0b3I7dGhpcy5zZWN0b3JJblJhZD1mLm1hcChDKTt2YXIgcCxkLGcsbSx2LHk9dGhpcy5zZWN0b3JCQm94PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dFswXSxvPXRbMV0tYSxzPUUoYSwzNjApLGw9cytvLGM9TWF0aC5jb3MoQyhzKSksdT1NYXRoLnNpbihDKHMpKSxoPU1hdGguY29zKEMobCkpLGY9TWF0aC5zaW4oQyhsKSk7aT1zPD05MCYmbD49OTB8fHM+OTAmJmw+PTQ1MD8xOnU8PTAmJmY8PTA/MDpNYXRoLm1heCh1LGYpO2U9czw9MTgwJiZsPj0xODB8fHM+MTgwJiZsPj01NDA/LTE6Yz49MCYmaD49MD8wOk1hdGgubWluKGMsaCk7cj1zPD0yNzAmJmw+PTI3MHx8cz4yNzAmJmw+PTYzMD8tMTp1Pj0wJiZmPj0wPzA6TWF0aC5taW4odSxmKTtuPWw+PTM2MD8xOmM8PTAmJmg8PTA/MDpNYXRoLm1heChjLGgpO3JldHVybltlLHIsbixpXX0oZikseD15WzJdLXlbMF0sYj15WzNdLXlbMV0sXz1oL3Usdz1NYXRoLmFicyhiL3gpO18+dz8ocD11LHY9KGgtKGQ9dSp3KSkvbi5oLzIsZz1bb1swXSxvWzFdXSxtPVtjWzBdK3YsY1sxXS12XSk6KGQ9aCx2PSh1LShwPWgvdykpL24udy8yLGc9W29bMF0rdixvWzFdLXZdLG09W2NbMF0sY1sxXV0pLHRoaXMueExlbmd0aDI9cCx0aGlzLnlMZW5ndGgyPWQsdGhpcy54RG9tYWluMj1nLHRoaXMueURvbWFpbjI9bTt2YXIgVD10aGlzLnhPZmZzZXQyPW4ubCtuLncqZ1swXSxrPXRoaXMueU9mZnNldDI9bi50K24uaCooMS1tWzFdKSxNPXRoaXMucmFkaXVzPXAveCxBPXRoaXMuaW5uZXJSYWRpdXM9ZS5ob2xlKk0sUz10aGlzLmN4PVQtTSp5WzBdLEw9dGhpcy5jeT1rK00qeVszXSxQPXRoaXMuY3h4PVMtVCxJPXRoaXMuY3l5PUwtazt0aGlzLnJhZGlhbEF4aXM9dGhpcy5tb2NrQXhpcyh0LGUsaSx7X2lkOiJ4IixzaWRlOntjb3VudGVyY2xvY2t3aXNlOiJ0b3AiLGNsb2Nrd2lzZToiYm90dG9tIn1baS5zaWRlXSxkb21haW46W0Evbi53LE0vbi53XX0pLHRoaXMuYW5ndWxhckF4aXM9dGhpcy5tb2NrQXhpcyh0LGUsYSx7c2lkZToicmlnaHQiLGRvbWFpbjpbMCxNYXRoLlBJXSxhdXRvcmFuZ2U6ITF9KSx0aGlzLmRvQXV0b1JhbmdlKHQsZSksdGhpcy51cGRhdGVBbmd1bGFyQXhpcyh0LGUpLHRoaXMudXBkYXRlUmFkaWFsQXhpcyh0LGUpLHRoaXMudXBkYXRlUmFkaWFsQXhpc1RpdGxlKHQsZSksdGhpcy54YXhpcz10aGlzLm1vY2tDYXJ0ZXNpYW5BeGlzKHQsZSx7X2lkOiJ4Iixkb21haW46Z30pLHRoaXMueWF4aXM9dGhpcy5tb2NrQ2FydGVzaWFuQXhpcyh0LGUse19pZDoieSIsZG9tYWluOm19KTt2YXIgej10aGlzLnBhdGhTdWJwbG90KCk7dGhpcy5jbGlwUGF0aHMuZm9yVHJhY2VzLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLHopLmF0dHIoInRyYW5zZm9ybSIsUihQLEkpKSxyLmZyb250cGxvdC5hdHRyKCJ0cmFuc2Zvcm0iLFIoVCxrKSkuY2FsbChsLnNldENsaXBVcmwsdGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlP251bGw6dGhpcy5jbGlwSWRzLmZvclRyYWNlcyx0aGlzLmdkKSxyLmJnLmF0dHIoImQiLHopLmF0dHIoInRyYW5zZm9ybSIsUihTLEwpKS5jYWxsKHMuZmlsbCxlLmJnY29sb3IpfSxJLm1vY2tBeGlzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8uZXh0ZW5kRmxhdCh7fSxyLG4pO3JldHVybiBmKGksZSx0KSxpfSxJLm1vY2tDYXJ0ZXNpYW5BeGlzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9ci5faWQsYT1vLmV4dGVuZEZsYXQoe3R5cGU6ImxpbmVhciJ9LHIpO2goYSx0KTt2YXIgcz17eDpbMCwyXSx5OlsxLDNdfTtyZXR1cm4gYS5zZXRSYW5nZT1mdW5jdGlvbigpe3ZhciB0PW4uc2VjdG9yQkJveCxyPXNbaV0sbz1uLnJhZGlhbEF4aXMuX3JsLGw9KG9bMV0tb1swXSkvKDEtZS5ob2xlKTthLnJhbmdlPVt0W3JbMF1dKmwsdFtyWzFdXSpsXX0sYS5pc1B0V2l0aGluUmFuZ2U9IngiPT09aT9mdW5jdGlvbih0KXtyZXR1cm4gbi5pc1B0SW5zaWRlKHQpfTpmdW5jdGlvbigpe3JldHVybiEwfSxhLnNldFJhbmdlKCksYS5zZXRTY2FsZSgpLGF9LEkuZG9BdXRvUmFuZ2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdkLG49dGhpcy5yYWRpYWxBeGlzLGk9ZS5yYWRpYWxheGlzO24uc2V0U2NhbGUoKSxwKHIsbik7dmFyIGE9bi5yYW5nZTtpLnJhbmdlPWEuc2xpY2UoKSxpLl9pbnB1dC5yYW5nZT1hLnNsaWNlKCksbi5fcmw9W24ucjJsKGFbMF0sbnVsbCwiZ3JlZ29yaWFuIiksbi5yMmwoYVsxXSxudWxsLCJncmVnb3JpYW4iKV19LEkudXBkYXRlUmFkaWFsQXhpcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdkLGk9ci5sYXllcnMsYT1yLnJhZGl1cyxsPXIuaW5uZXJSYWRpdXMsYz1yLmN4LGg9ci5jeSxmPWUucmFkaWFsYXhpcyxwPUUoZS5zZWN0b3JbMF0sMzYwKSxkPXIucmFkaWFsQXhpcyxnPWw8YTtyLmZpbGxWaWV3SW5pdGlhbEtleSgicmFkaWFsYXhpcy5hbmdsZSIsZi5hbmdsZSksci5maWxsVmlld0luaXRpYWxLZXkoInJhZGlhbGF4aXMucmFuZ2UiLGQucmFuZ2Uuc2xpY2UoKSksZC5zZXRHZW9tZXRyeSgpLCJhdXRvIj09PWQudGlja2FuZ2xlJiZwPjkwJiZwPD0yNzAmJihkLnRpY2thbmdsZT0xODApO3ZhciBtPWZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIisoZC5sMnAodC54KStsKSsiLDApIn0sdj16KGYpO2lmKHIucmFkaWFsVGlja0xheW91dCE9PXYmJihpWyJyYWRpYWwtYXhpcyJdLnNlbGVjdEFsbCgiLnh0aWNrIikucmVtb3ZlKCksci5yYWRpYWxUaWNrTGF5b3V0PXYpLGcpe2Quc2V0U2NhbGUoKTt2YXIgeT11LmNhbGNUaWNrcyhkKSx4PXUuY2xpcEVuZHMoZCx5KSxiPXUuZ2V0VGlja1NpZ25zKGQpWzJdO3UuZHJhd1RpY2tzKG4sZCx7dmFsczp5LGxheWVyOmlbInJhZGlhbC1heGlzIl0scGF0aDp1Lm1ha2VUaWNrUGF0aChkLDAsYiksdHJhbnNGbjptLGNyaXNwOiExfSksdS5kcmF3R3JpZChuLGQse3ZhbHM6eCxsYXllcjppWyJyYWRpYWwtZ3JpZCJdLHBhdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHIucGF0aEFyYyhkLnIycCh0LngpK2wpfSx0cmFuc0ZuOm8ubm9vcCxjcmlzcDohMX0pLHUuZHJhd0xhYmVscyhuLGQse3ZhbHM6eSxsYXllcjppWyJyYWRpYWwtYXhpcyJdLHRyYW5zRm46bSxsYWJlbEZuczp1Lm1ha2VMYWJlbEZucyhkLDApfSl9dmFyIF89ci5yYWRpYWxBeGlzQW5nbGU9ci52YW5nbGVzP0woTyhDKGYuYW5nbGUpLHIudmFuZ2xlcykpOmYuYW5nbGUsdz1SKGMsaCksVD13K0YoLV8pO0QoaVsicmFkaWFsLWF4aXMiXSxnJiYoZi5zaG93dGlja2xhYmVsc3x8Zi50aWNrcykse3RyYW5zZm9ybTpUfSksRChpWyJyYWRpYWwtZ3JpZCJdLGcmJmYuc2hvd2dyaWQse3RyYW5zZm9ybTp3fSksRChpWyJyYWRpYWwtbGluZSJdLnNlbGVjdCgibGluZSIpLGcmJmYuc2hvd2xpbmUse3gxOmwseTE6MCx4MjphLHkyOjAsdHJhbnNmb3JtOlR9KS5hdHRyKCJzdHJva2Utd2lkdGgiLGYubGluZXdpZHRoKS5jYWxsKHMuc3Ryb2tlLGYubGluZWNvbG9yKX0sSS51cGRhdGVSYWRpYWxBeGlzVGl0bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2QsaT10aGlzLnJhZGl1cyxhPXRoaXMuY3gsbz10aGlzLmN5LHM9ZS5yYWRpYWxheGlzLGM9dGhpcy5pZCsidGl0bGUiLHU9dm9pZCAwIT09cj9yOnRoaXMucmFkaWFsQXhpc0FuZ2xlLGg9Qyh1KSxmPU1hdGguY29zKGgpLHA9TWF0aC5zaW4oaCksZD0wO2lmKHMudGl0bGUpe3ZhciBnPWwuYkJveCh0aGlzLmxheWVyc1sicmFkaWFsLWF4aXMiXS5ub2RlKCkpLmhlaWdodCxtPXMudGl0bGUuZm9udC5zaXplO2Q9ImNvdW50ZXJjbG9ja3dpc2UiPT09cy5zaWRlPy1nLS40Km06ZysuOCptfXRoaXMubGF5ZXJzWyJyYWRpYWwtYXhpcy10aXRsZSJdPXYuZHJhdyhuLGMse3Byb3BDb250YWluZXI6cyxwcm9wTmFtZTp0aGlzLmlkKyIucmFkaWFsYXhpcy50aXRsZSIscGxhY2Vob2xkZXI6UyhuLCJDbGljayB0byBlbnRlciByYWRpYWwgYXhpcyB0aXRsZSIpLGF0dHJpYnV0ZXM6e3g6YStpLzIqZitkKnAseTpvLWkvMipwK2QqZiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSx0cmFuc2Zvcm06e3JvdGF0ZTotdX19KX0sSS51cGRhdGVBbmd1bGFyQXhpcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdkLGk9ci5sYXllcnMsYT1yLnJhZGl1cyxsPXIuaW5uZXJSYWRpdXMsYz1yLmN4LGg9ci5jeSxmPWUuYW5ndWxhcmF4aXMscD1yLmFuZ3VsYXJBeGlzO3IuZmlsbFZpZXdJbml0aWFsS2V5KCJhbmd1bGFyYXhpcy5yb3RhdGlvbiIsZi5yb3RhdGlvbikscC5zZXRHZW9tZXRyeSgpLHAuc2V0U2NhbGUoKTt2YXIgZD1mdW5jdGlvbih0KXtyZXR1cm4gcC50MmcodC54KX07ImxpbmVhciI9PT1wLnR5cGUmJiJyYWRpYW5zIj09PXAudGhldGF1bml0JiYocC50aWNrMD1MKHAudGljazApLHAuZHRpY2s9TChwLmR0aWNrKSk7dmFyIGc9ZnVuY3Rpb24odCl7cmV0dXJuIFIoYythKk1hdGguY29zKHQpLGgtYSpNYXRoLnNpbih0KSl9LG09dS5tYWtlTGFiZWxGbnMocCwwKS5sYWJlbFN0YW5kb2ZmLHY9e3hGbjpmdW5jdGlvbih0KXt2YXIgZT1kKHQpO3JldHVybiBNYXRoLmNvcyhlKSptfSx5Rm46ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPU1hdGguc2luKGUpPjA/LjI6MTtyZXR1cm4tTWF0aC5zaW4oZSkqKG0rdC5mb250U2l6ZSpyKStNYXRoLmFicyhNYXRoLmNvcyhlKSkqKHQuZm9udFNpemUqayl9LGFuY2hvckZuOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj1NYXRoLmNvcyhlKTtyZXR1cm4gTWF0aC5hYnMocik8LjE/Im1pZGRsZSI6cj4wPyJzdGFydCI6ImVuZCJ9LGhlaWdodEZuOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1kKHQpO3JldHVybi0uNSooMStNYXRoLnNpbihuKSkqcn19LHk9eihmKTtyLmFuZ3VsYXJUaWNrTGF5b3V0IT09eSYmKGlbImFuZ3VsYXItYXhpcyJdLnNlbGVjdEFsbCgiLiIrcC5faWQrInRpY2siKS5yZW1vdmUoKSxyLmFuZ3VsYXJUaWNrTGF5b3V0PXkpO3ZhciB4LGI9dS5jYWxjVGlja3MocCk7aWYoImxpbmVhciI9PT1lLmdyaWRzaGFwZT8oeD1iLm1hcChkKSxvLmFuZ2xlRGVsdGEoeFswXSx4WzFdKTwwJiYoeD14LnNsaWNlKCkucmV2ZXJzZSgpKSk6eD1udWxsLHIudmFuZ2xlcz14LCJjYXRlZ29yeSI9PT1wLnR5cGUmJihiPWIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gby5pc0FuZ2xlSW5zaWRlU2VjdG9yKGQodCksci5zZWN0b3JJblJhZCl9KSkpLHAudmlzaWJsZSl7dmFyIF89Imluc2lkZSI9PT1wLnRpY2tzPy0xOjEsdz0ocC5saW5ld2lkdGh8fDEpLzI7dS5kcmF3VGlja3MobixwLHt2YWxzOmIsbGF5ZXI6aVsiYW5ndWxhci1heGlzIl0scGF0aDoiTSIrXyp3KyIsMGgiK18qcC50aWNrbGVuLHRyYW5zRm46ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KTtyZXR1cm4gZyhlKStGKC1MKGUpKX0sY3Jpc3A6ITF9KSx1LmRyYXdHcmlkKG4scCx7dmFsczpiLGxheWVyOmlbImFuZ3VsYXItZ3JpZCJdLHBhdGg6ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPU1hdGguY29zKGUpLG49TWF0aC5zaW4oZSk7cmV0dXJuIk0iK1tjK2wqcixoLWwqbl0rIkwiK1tjK2EqcixoLWEqbl19LHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksdS5kcmF3TGFiZWxzKG4scCx7dmFsczpiLGxheWVyOmlbImFuZ3VsYXItYXhpcyJdLHJlcG9zaXRpb25PblVwZGF0ZTohMCx0cmFuc0ZuOmZ1bmN0aW9uKHQpe3JldHVybiBnKGQodCkpfSxsYWJlbEZuczp2fSl9RChpWyJhbmd1bGFyLWxpbmUiXS5zZWxlY3QoInBhdGgiKSxmLnNob3dsaW5lLHtkOnIucGF0aFN1YnBsb3QoKSx0cmFuc2Zvcm06UihjLGgpfSkuYXR0cigic3Ryb2tlLXdpZHRoIixmLmxpbmV3aWR0aCkuY2FsbChzLnN0cm9rZSxmLmxpbmVjb2xvcil9LEkudXBkYXRlRng9ZnVuY3Rpb24odCxlKXt0aGlzLmdkLl9jb250ZXh0LnN0YXRpY1Bsb3R8fCh0aGlzLnVwZGF0ZUFuZ3VsYXJEcmFnKHQpLHRoaXMudXBkYXRlUmFkaWFsRHJhZyh0LGUsMCksdGhpcy51cGRhdGVSYWRpYWxEcmFnKHQsZSwxKSx0aGlzLnVwZGF0ZU1haW5EcmFnKHQpKX0sSS51cGRhdGVNYWluRHJhZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZCxvPWUubGF5ZXJzLHM9dC5fem9vbWxheWVyLGw9TS5NSU5aT09NLGM9TS5PRkZFREdFLHU9ZS5yYWRpdXMsaD1lLmlubmVyUmFkaXVzLGY9ZS5jeCxwPWUuY3ksdj1lLmN4eCxfPWUuY3l5LHc9ZS5zZWN0b3JJblJhZCxUPWUudmFuZ2xlcyxrPWUucmFkaWFsQXhpcyxTPUEuY2xhbXBUaW55LEU9QS5maW5kWFlhdExlbmd0aCxDPUEuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyxMPU0uY29ybmVySGFsZldpZHRoLFA9TS5jb3JuZXJMZW4vMixJPWQubWFrZURyYWdnZXIobywicGF0aCIsIm1haW5kcmFnIiwiY3Jvc3NoYWlyIik7bi5zZWxlY3QoSSkuYXR0cigiZCIsZS5wYXRoU3VicGxvdCgpKS5hdHRyKCJ0cmFuc2Zvcm0iLFIoZixwKSk7dmFyIHosTyxELEYsQixOLGosVSxWLHE9e2VsZW1lbnQ6SSxnZDpyLHN1YnBsb3Q6ZS5pZCxwbG90aW5mbzp7aWQ6ZS5pZCx4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXN9LHhheGVzOltlLnhheGlzXSx5YXhlczpbZS55YXhpc119O2Z1bmN0aW9uIEgodCxlKXtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtlKmUpfWZ1bmN0aW9uIEcodCxlKXtyZXR1cm4gSCh0LXYsZS1fKX1mdW5jdGlvbiBZKHQsZSl7cmV0dXJuIE1hdGguYXRhbjIoXy1lLHQtdil9ZnVuY3Rpb24gVyh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oLWUpXX1mdW5jdGlvbiBaKHQscil7aWYoMD09PXQpcmV0dXJuIGUucGF0aFNlY3RvcigyKkwpO3ZhciBuPVAvdCxpPXItbixhPXIrbixvPU1hdGgubWF4KDAsTWF0aC5taW4odCx1KSkscz1vLUwsbD1vK0w7cmV0dXJuIk0iK1cocyxpKSsiQSIrW3Msc10rIiAwLDAsMCAiK1cocyxhKSsiTCIrVyhsLGEpKyJBIitbbCxsXSsiIDAsMCwxICIrVyhsLGkpKyJaIn1mdW5jdGlvbiBYKHQscixuKXtpZigwPT09dClyZXR1cm4gZS5wYXRoU2VjdG9yKDIqTCk7dmFyIGksYSxvPVcodCxyKSxzPVcodCxuKSxsPVMoKG9bMF0rc1swXSkvMiksYz1TKChvWzFdK3NbMV0pLzIpO2lmKGwmJmMpe3ZhciB1PWMvbCxoPS0xL3UsZj1FKEwsdSxsLGMpO2k9RShQLGgsZlswXVswXSxmWzBdWzFdKSxhPUUoUCxoLGZbMV1bMF0sZlsxXVsxXSl9ZWxzZXt2YXIgcCxkO2M/KHA9UCxkPUwpOihwPUwsZD1QKSxpPVtbbC1wLGMtZF0sW2wrcCxjLWRdXSxhPVtbbC1wLGMrZF0sW2wrcCxjK2RdXX1yZXR1cm4iTSIraS5qb2luKCJMIikrIkwiK2EucmV2ZXJzZSgpLmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gSih0LGUpe3JldHVybiBlPU1hdGgubWF4KE1hdGgubWluKGUsdSksaCksdDxjP3Q9MDp1LXQ8Yz90PXU6ZTxjP2U9MDp1LWU8YyYmKGU9dSksTWF0aC5hYnMoZS10KT5sPyh0PGU/KEQ9dCxGPWUpOihEPWUsRj10KSwhMCk6KEQ9bnVsbCxGPW51bGwsITEpfWZ1bmN0aW9uIEsodCxlKXt0PXR8fEIsZT1lfHwiTTAsMFoiLFUuYXR0cigiZCIsdCksVi5hdHRyKCJkIixlKSxkLnRyYW5zaXRpb25ab29tYm94KFUsVixOLGopLE49ITA7dmFyIG49e307cnQobiksci5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLG4pfWZ1bmN0aW9uIFEodCxyKXt2YXIgbixpLGE9eit0LG89TytyLHM9Ryh6LE8pLGw9TWF0aC5taW4oRyhhLG8pLHUpLGM9WSh6LE8pO0oocyxsKSYmKG49QitlLnBhdGhTZWN0b3IoRiksRCYmKG4rPWUucGF0aFNlY3RvcihEKSksaT1aKEQsYykrWihGLGMpKSxLKG4saSl9ZnVuY3Rpb24gJCh0LGUscixuKXt2YXIgaT1BLmZpbmRJbnRlcnNlY3Rpb25YWShyLG4scixbdC12LF8tZV0pO3JldHVybiBIKGlbMF0saVsxXSl9ZnVuY3Rpb24gdHQodCxyKXt2YXIgbixpLGE9eit0LG89TytyLHM9WSh6LE8pLGw9WShhLG8pLGM9QyhzLFQpLGg9QyhsLFQpO0ooJCh6LE8sY1swXSxjWzFdKSxNYXRoLm1pbigkKGEsbyxoWzBdLGhbMV0pLHUpKSYmKG49QitlLnBhdGhTZWN0b3IoRiksRCYmKG4rPWUucGF0aFNlY3RvcihEKSksaT1bWChELGNbMF0sY1sxXSksWChGLGNbMF0sY1sxXSldLmpvaW4oIiAiKSksSyhuLGkpfWZ1bmN0aW9uIGV0KCl7aWYoZC5yZW1vdmVab29tYm94KHIpLG51bGwhPT1EJiZudWxsIT09Ril7dmFyIHQ9e307cnQodCksZC5zaG93RG91YmxlQ2xpY2tOb3RpZmllcihyKSxhLmNhbGwoIl9ndWlSZWxheW91dCIscix0KX19ZnVuY3Rpb24gcnQodCl7dmFyIHI9ay5fcmwsbj0oclsxXS1yWzBdKS8oMS1oL3UpL3UsaT1bclswXSsoRC1oKSpuLHJbMF0rKEYtaCkqbl07dFtlLmlkKyIucmFkaWFsYXhpcy5yYW5nZSJdPWl9ZnVuY3Rpb24gbnQodCxuKXt2YXIgaT1yLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtpZihkLnJlbW92ZVpvb21ib3gociksMj09PXQpe3ZhciBvPXt9O2Zvcih2YXIgcyBpbiBlLnZpZXdJbml0aWFsKW9bZS5pZCsiLiIrc109ZS52aWV3SW5pdGlhbFtzXTtyLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHIsbyl9aS5pbmRleE9mKCJzZWxlY3QiKT4tMSYmMT09PXQmJngobixyLFtlLnhheGlzXSxbZS55YXhpc10sZS5pZCxxKSxpLmluZGV4T2YoImV2ZW50Iik+LTEmJm0uY2xpY2socixuLGUuaWQpfXEucHJlcEZuPWZ1bmN0aW9uKHQsbixhKXt2YXIgbz1yLl9mdWxsTGF5b3V0LmRyYWdtb2RlLGw9SS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih6PW4tbC5sZWZ0LE89YS1sLnRvcCxUKXt2YXIgYz1BLmZpbmRQb2x5Z29uT2Zmc2V0KHUsd1swXSx3WzFdLFQpO3orPXYrY1swXSxPKz1fK2NbMV19c3dpdGNoKG8pe2Nhc2Uiem9vbSI6cS5tb3ZlRm49VD90dDpRLHEuY2xpY2tGbj1udCxxLmRvbmVGbj1ldCxmdW5jdGlvbigpe0Q9bnVsbCxGPW51bGwsQj1lLnBhdGhTdWJwbG90KCksTj0hMTt2YXIgdD1yLl9mdWxsTGF5b3V0W2UuaWRdO2o9aSh0LmJnY29sb3IpLmdldEx1bWluYW5jZSgpLChVPWQubWFrZVpvb21ib3gocyxqLGYscCxCKSkuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLFY9ZC5tYWtlQ29ybmVycyhzLGYscCksYihyKX0oKTticmVhaztjYXNlInNlbGVjdCI6Y2FzZSJsYXNzbyI6eSh0LG4sYSxxLG8pfX0sSS5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXttLmhvdmVyKHIsdCxlLmlkKSxyLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9SSxyLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9ZS5pZH0sSS5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe3IuX2RyYWdnaW5nfHxnLnVuaG92ZXIocix0KX0sZy5pbml0KHEpfSxJLnVwZGF0ZVJhZGlhbERyYWc9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMscz1pLmdkLGw9aS5sYXllcnMsYz1pLnJhZGl1cyx1PWkuaW5uZXJSYWRpdXMsaD1pLmN4LGY9aS5jeSxwPWkucmFkaWFsQXhpcyxtPU0ucmFkaWFsRHJhZ0JveFNpemUsdj1tLzI7aWYocC52aXNpYmxlKXt2YXIgeSx4LF8saz1DKGkucmFkaWFsQXhpc0FuZ2xlKSxBPXAuX3JsLFM9QVswXSxFPUFbMV0sUD1BW3JdLEk9Ljc1KihBWzFdLUFbMF0pLygxLWUuaG9sZSkvYztyPyh5PWgrKGMrdikqTWF0aC5jb3MoaykseD1mLShjK3YpKk1hdGguc2luKGspLF89InJhZGlhbGRyYWciKTooeT1oKyh1LXYpKk1hdGguY29zKGspLHg9Zi0odS12KSpNYXRoLnNpbihrKSxfPSJyYWRpYWxkcmFnLWlubmVyIik7dmFyIHosQixOLGo9ZC5tYWtlUmVjdERyYWdnZXIobCxfLCJjcm9zc2hhaXIiLC12LC12LG0sbSksVT17ZWxlbWVudDpqLGdkOnN9O0Qobi5zZWxlY3QoaikscC52aXNpYmxlJiZ1PGMse3RyYW5zZm9ybTpSKHkseCl9KSxVLnByZXBGbj1mdW5jdGlvbigpe3o9bnVsbCxCPW51bGwsTj1udWxsLFUubW92ZUZuPVYsVS5kb25lRm49cSxiKHMpfSxVLmNsYW1wRm49ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtlKmUpPE0uTUlORFJBRyYmKHQ9MCxlPTApLFt0LGVdfSxnLmluaXQoVSl9ZnVuY3Rpb24gVih0LGUpe2lmKHopeih0LGUpO2Vsc2V7dmFyIG49W3QsLWVdLGE9W01hdGguY29zKGspLE1hdGguc2luKGspXSxsPU1hdGguYWJzKG8uZG90KG4sYSkvTWF0aC5zcXJ0KG8uZG90KG4sbikpKTtpc05hTihsKXx8KHo9bDwuNT9IOkcpfXZhciBjPXt9OyFmdW5jdGlvbih0KXtudWxsIT09Qj90W2kuaWQrIi5yYWRpYWxheGlzLmFuZ2xlIl09QjpudWxsIT09TiYmKHRbaS5pZCsiLnJhZGlhbGF4aXMucmFuZ2VbIityKyJdIl09Til9KGMpLHMuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixjKX1mdW5jdGlvbiBxKCl7bnVsbCE9PUI/YS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHMsaS5pZCsiLnJhZGlhbGF4aXMuYW5nbGUiLEIpOm51bGwhPT1OJiZhLmNhbGwoIl9ndWlSZWxheW91dCIscyxpLmlkKyIucmFkaWFsYXhpcy5yYW5nZVsiK3IrIl0iLE4pfWZ1bmN0aW9uIEgodCxlKXtpZigwIT09cil7dmFyIG49eSt0LGE9eCtlO0I9TWF0aC5hdGFuMihmLWEsbi1oKSxpLnZhbmdsZXMmJihCPU8oQixpLnZhbmdsZXMpKSxCPUwoQik7dmFyIG89UihoLGYpK0YoLUIpO2xbInJhZGlhbC1heGlzIl0uYXR0cigidHJhbnNmb3JtIixvKSxsWyJyYWRpYWwtbGluZSJdLnNlbGVjdCgibGluZSIpLmF0dHIoInRyYW5zZm9ybSIsbyk7dmFyIHM9aS5nZC5fZnVsbExheW91dCxjPXNbaS5pZF07aS51cGRhdGVSYWRpYWxBeGlzVGl0bGUocyxjLEIpfX1mdW5jdGlvbiBHKHQsZSl7dmFyIG49by5kb3QoW3QsLWVdLFtNYXRoLmNvcyhrKSxNYXRoLnNpbihrKV0pO2lmKE49UC1JKm4sST4wPT0ocj9OPlM6TjxFKSl7dmFyIGw9cy5fZnVsbExheW91dCxjPWxbaS5pZF07cC5yYW5nZVtyXT1OLHAuX3JsW3JdPU4saS51cGRhdGVSYWRpYWxBeGlzKGwsYyksaS54YXhpcy5zZXRSYW5nZSgpLGkueGF4aXMuc2V0U2NhbGUoKSxpLnlheGlzLnNldFJhbmdlKCksaS55YXhpcy5zZXRTY2FsZSgpO3ZhciB1PSExO2Zvcih2YXIgaCBpbiBpLnRyYWNlSGFzaCl7dmFyIGY9aS50cmFjZUhhc2hbaF0sZD1vLmZpbHRlclZpc2libGUoZik7ZlswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QocyxpLGQsYyksYS50cmFjZUlzKGgsImdsIikmJmQubGVuZ3RoJiYodT0hMCl9dSYmKHcocyksVChzKSl9ZWxzZSBOPW51bGx9fSxJLnVwZGF0ZUFuZ3VsYXJEcmFnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmdkLGk9ZS5sYXllcnMscz1lLnJhZGl1cyxjPWUuYW5ndWxhckF4aXMsdT1lLmN4LGg9ZS5jeSxmPWUuY3h4LHA9ZS5jeXksbT1NLmFuZ3VsYXJEcmFnQm94U2l6ZSx2PWQubWFrZURyYWdnZXIoaSwicGF0aCIsImFuZ3VsYXJkcmFnIiwibW92ZSIpLHk9e2VsZW1lbnQ6dixnZDpyfTtmdW5jdGlvbiB4KHQsZSl7cmV0dXJuIE1hdGguYXRhbjIocCttLWUsdC1mLW0pfW4uc2VsZWN0KHYpLmF0dHIoImQiLGUucGF0aEFubnVsdXMocyxzK20pKS5hdHRyKCJ0cmFuc2Zvcm0iLFIodSxoKSkuY2FsbChfLCJtb3ZlIik7dmFyIGssQSxTLEUsQyxQLEk9aS5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCIudHJhY2UiKSx6PUkuc2VsZWN0QWxsKCIucG9pbnQiKSxPPUkuc2VsZWN0QWxsKCIudGV4dHBvaW50Iik7ZnVuY3Rpb24gRCh0LHMpe3ZhciBkPWUuZ2QuX2Z1bGxMYXlvdXQsZz1kW2UuaWRdLG09eChrK3QsQStzKSx2PUwobS1QKTtpZihFPVMrdixpLmZyb250cGxvdC5hdHRyKCJ0cmFuc2Zvcm0iLFIoZS54T2Zmc2V0MixlLnlPZmZzZXQyKStGKFstdixmLHBdKSksZS52YW5nbGVzKXtDPWUucmFkaWFsQXhpc0FuZ2xlK3Y7dmFyIHk9Uih1LGgpK0YoLXYpLGI9Uih1LGgpK0YoLUMpO2kuYmcuYXR0cigidHJhbnNmb3JtIix5KSxpWyJyYWRpYWwtZ3JpZCJdLmF0dHIoInRyYW5zZm9ybSIseSksaVsicmFkaWFsLWF4aXMiXS5hdHRyKCJ0cmFuc2Zvcm0iLGIpLGlbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIikuYXR0cigidHJhbnNmb3JtIixiKSxlLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZShkLGcsQyl9ZWxzZSBlLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixSKGYscCkrRih2KSk7ei5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9bC5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLFIoZS54LGUueSkrRihbdl0pKX0pKSxPLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgidGV4dCIpLHI9bC5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLEYoW3YsZS5hdHRyKCJ4IiksZS5hdHRyKCJ5IildKStSKHIueCxyLnkpKX0pKSxjLnJvdGF0aW9uPW8ubW9kSGFsZihFLDM2MCksZS51cGRhdGVBbmd1bGFyQXhpcyhkLGcpLGUuX2hhc0NsaXBPbkF4aXNGYWxzZSYmIW8uaXNGdWxsQ2lyY2xlKGUuc2VjdG9ySW5SYWQpJiZJLmNhbGwobC5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLGUpO3ZhciBfPSExO2Zvcih2YXIgTSBpbiBlLnRyYWNlSGFzaClpZihhLnRyYWNlSXMoTSwiZ2wiKSl7dmFyIEQ9ZS50cmFjZUhhc2hbTV0sTj1vLmZpbHRlclZpc2libGUoRCk7RFswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QocixlLE4sZyksTi5sZW5ndGgmJihfPSEwKX1fJiYodyhyKSxUKHIpKTt2YXIgaj17fTtCKGopLHIuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixqKX1mdW5jdGlvbiBCKHQpe3RbZS5pZCsiLmFuZ3VsYXJheGlzLnJvdGF0aW9uIl09RSxlLnZhbmdsZXMmJih0W2UuaWQrIi5yYWRpYWxheGlzLmFuZ2xlIl09Qyl9ZnVuY3Rpb24gTigpe08uc2VsZWN0KCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgdD17fTtCKHQpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixyLHQpfXkucHJlcEZuPWZ1bmN0aW9uKG4saSxhKXt2YXIgbz10W2UuaWRdO1M9by5hbmd1bGFyYXhpcy5yb3RhdGlvbjt2YXIgcz12LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2s9aS1zLmxlZnQsQT1hLXMudG9wLFA9eChrLEEpLHkubW92ZUZuPUQseS5kb25lRm49TixiKHIpfSxlLnZhbmdsZXMmJiFvLmlzRnVsbENpcmNsZShlLnNlY3RvckluUmFkKSYmKHkucHJlcEZuPW8ubm9vcCxfKG4uc2VsZWN0KHYpLG51bGwpKSxnLmluaXQoeSl9LEkuaXNQdEluc2lkZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzLG49dGhpcy5hbmd1bGFyQXhpcy5jMmcodC50aGV0YSksaT10aGlzLnJhZGlhbEF4aXMsYT1pLmMybCh0LnIpLHM9aS5fcmw7cmV0dXJuKHI/QS5pc1B0SW5zaWRlUG9seWdvbjpvLmlzUHRJbnNpZGVTZWN0b3IpKGEsbixzLGUscil9LEkucGF0aEFyYz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzO3JldHVybihyP0EucGF0aFBvbHlnb246by5wYXRoQXJjKSh0LGVbMF0sZVsxXSxyKX0sSS5wYXRoU2VjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VjdG9ySW5SYWQscj10aGlzLnZhbmdsZXM7cmV0dXJuKHI/QS5wYXRoUG9seWdvbjpvLnBhdGhTZWN0b3IpKHQsZVswXSxlWzFdLHIpfSxJLnBhdGhBbm51bHVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5zZWN0b3JJblJhZCxuPXRoaXMudmFuZ2xlcztyZXR1cm4obj9BLnBhdGhQb2x5Z29uQW5udWx1czpvLnBhdGhBbm51bHVzKSh0LGUsclswXSxyWzFdLG4pfSxJLnBhdGhTdWJwbG90PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5pbm5lclJhZGl1cyxlPXRoaXMucmFkaXVzO3JldHVybiB0P3RoaXMucGF0aEFubnVsdXModCxlKTp0aGlzLnBhdGhTZWN0b3IoZSl9LEkuZmlsbFZpZXdJbml0aWFsS2V5PWZ1bmN0aW9uKHQsZSl7dCBpbiB0aGlzLnZpZXdJbml0aWFsfHwodGhpcy52aWV3SW5pdGlhbFt0XT1lKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2MzQsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTUsIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIjo3MTAsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjcxNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NzM0LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3NzAsIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIjo3ODksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjc5OCwiLi4vY2FydGVzaWFuL2RyYWdib3giOjgwNywiLi4vY2FydGVzaWFuL3NlbGVjdCI6ODE4LCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjgxOSwiLi4vcGxvdHMiOjg2MiwiLi9jb25zdGFudHMiOjg2MywiLi9oZWxwZXJzIjo4NjQsIi4vc2V0X2NvbnZlcnQiOjg3NSxkMzoxNjksdGlueWNvbG9yMjo1NDh9XSw4NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxhPW4uZGVnMnJhZCxvPW4ucmFkMmRlZztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChpKHQsciksdC5faWQpe2Nhc2UieCI6Y2FzZSJyYWRpYWxheGlzIjohZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9zdWJwbG90O3Quc2V0R2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgZT10Ll9ybFswXSxuPXQuX3JsWzFdLGk9ci5pbm5lclJhZGl1cyxhPShyLnJhZGl1cy1pKS8obi1lKSxvPWkvYSxzPWU+bj9mdW5jdGlvbih0KXtyZXR1cm4gdDw9MH06ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTB9O3QuYzJnPWZ1bmN0aW9uKHIpe3ZhciBuPXQuYzJsKHIpLWU7cmV0dXJuKHMobik/bjowKStvfSx0LmcyYz1mdW5jdGlvbihyKXtyZXR1cm4gdC5sMmMocitlLW8pfSx0LmcycD1mdW5jdGlvbih0KXtyZXR1cm4gdCphfSx0LmMycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5nMnAodC5jMmcoZSkpfX19KHQsZSk7YnJlYWs7Y2FzZSJhbmd1bGFyYXhpcyI6IWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50eXBlO2lmKCJsaW5lYXIiPT09cil7dmFyIGk9dC5kMmMscz10LmMyZDt0LmQyYz1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiJkZWdyZWVzIj09PWU/YSh0KTp0fShpKHQpLGUpfSx0LmMyZD1mdW5jdGlvbih0LGUpe3JldHVybiBzKGZ1bmN0aW9uKHQsZSl7cmV0dXJuImRlZ3JlZXMiPT09ZT9vKHQpOnR9KHQsZSkpfX10Lm1ha2VDYWxjZGF0YT1mdW5jdGlvbihlLGkpe3ZhciBhLG8scz1lW2ldLGw9ZS5fbGVuZ3RoLGM9ZnVuY3Rpb24ocil7cmV0dXJuIHQuZDJjKHIsZS50aGV0YXVuaXQpfTtpZihzKXtpZihuLmlzVHlwZWRBcnJheShzKSYmImxpbmVhciI9PT1yKXtpZihsPT09cy5sZW5ndGgpcmV0dXJuIHM7aWYocy5zdWJhcnJheSlyZXR1cm4gcy5zdWJhcnJheSgwLGwpfWZvcihhPW5ldyBBcnJheShsKSxvPTA7bzxsO28rKylhW29dPWMoc1tvXSl9ZWxzZXt2YXIgdT1pKyIwIixoPSJkIitpLGY9dSBpbiBlP2MoZVt1XSk6MCxwPWVbaF0/YyhlW2hdKToodC5wZXJpb2R8fDIqTWF0aC5QSSkvbDtmb3IoYT1uZXcgQXJyYXkobCksbz0wO288bDtvKyspYVtvXT1mK28qcH1yZXR1cm4gYX0sdC5zZXRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciBpLHMsbCxjLHU9ZS5zZWN0b3IsaD11Lm1hcChhKSxmPXtjbG9ja3dpc2U6LTEsY291bnRlcmNsb2Nrd2lzZToxfVt0LmRpcmVjdGlvbl0scD1hKHQucm90YXRpb24pLGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGYqdCtwfSxnPWZ1bmN0aW9uKHQpe3JldHVybih0LXApL2Z9O3N3aXRjaChyKXtjYXNlImxpbmVhciI6cz1pPW4uaWRlbnRpdHksYz1hLGw9byx0LnJhbmdlPW4uaXNGdWxsQ2lyY2xlKGgpP1t1WzBdLHVbMF0rMzYwXTpoLm1hcChnKS5tYXAobyk7YnJlYWs7Y2FzZSJjYXRlZ29yeSI6dmFyIG09dC5fY2F0ZWdvcmllcy5sZW5ndGgsdj10LnBlcmlvZD9NYXRoLm1heCh0LnBlcmlvZCxtKTptOzA9PT12JiYodj0xKSxzPWM9ZnVuY3Rpb24odCl7cmV0dXJuIDIqdCpNYXRoLlBJL3Z9LGk9bD1mdW5jdGlvbih0KXtyZXR1cm4gdCp2L01hdGguUEkvMn0sdC5yYW5nZT1bMCx2XX10LmMyZz1mdW5jdGlvbih0KXtyZXR1cm4gZChzKHQpKX0sdC5nMmM9ZnVuY3Rpb24odCl7cmV0dXJuIGkoZyh0KSl9LHQudDJnPWZ1bmN0aW9uKHQpe3JldHVybiBkKGModCkpfSx0LmcydD1mdW5jdGlvbih0KXtyZXR1cm4gbChnKHQpKX19fSh0LGUpfX19LHsiLi4vLi4vbGliIjo3NTAsIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCI6ODE5fV0sODc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi9kb21haW4iKS5kZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbCxjPW8udHlwZSx1PW8uYXR0cmlidXRlcyxoPW8uaGFuZGxlRGVmYXVsdHMsZj1vLnBhcnRpdGlvbnx8IngiLHA9ZS5fc3VicGxvdHNbY10sZD1wLmxlbmd0aCxnPWQmJnBbMF0ucmVwbGFjZSgvXGQrJC8sIiIpO2Z1bmN0aW9uIG0odCxlKXtyZXR1cm4gbi5jb2VyY2UocyxsLHUsdCxlKX1mb3IodmFyIHY9MDt2PGQ7disrKXt2YXIgeT1wW3ZdO3M9dFt5XT90W3ldOnRbeV09e30sbD1pLm5ld0NvbnRhaW5lcihlLHksZyksbSgidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKTt2YXIgeD17fTt4W2ZdPVt2L2QsKHYrMSkvZF0sYShsLGUsbSx4KSxvLmlkPXksaChzLGwsbSxvKX19fSx7Ii4uL2xpYiI6NzUwLCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODgsIi4vZG9tYWluIjo4MjZ9XSw4Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7WydWYXJpYWJsZXMgYXJlIGluc2VydGVkIHVzaW5nICV7dmFyaWFibGV9LCBmb3IgZXhhbXBsZSAieTogJXt5fSIuJywnTnVtYmVycyBhcmUgZm9ybWF0dGVkIHVzaW5nIGQzLWZvcm1hdFwncyBzeW50YXggJXt2YXJpYWJsZTpkMy1mb3JtYXR9LCBmb3IgZXhhbXBsZSAiUHJpY2U6ICV7eTokLjJmfSIuJyx0KCIuLi9jb25zdGFudHMvZG9jcyIpLkZPUk1BVF9MSU5LLCJmb3IgZGV0YWlscyBvbiB0aGUgZm9ybWF0dGluZyBzeW50YXguIiwnRGF0ZXMgYXJlIGZvcm1hdHRlZCB1c2luZyBkMy10aW1lLWZvcm1hdFwncyBzeW50YXggJXt2YXJpYWJsZXxkMy10aW1lLWZvcm1hdH0sIGZvciBleGFtcGxlICJEYXk6ICV7MjAxOS0wMS0wMXwlQX0iLicsdCgiLi4vY29uc3RhbnRzL2RvY3MiKS5EQVRFX0ZPUk1BVF9MSU5LLCJmb3IgZGV0YWlscyBvbiB0aGUgZGF0ZSBmb3JtYXR0aW5nIHN5bnRheC4iXS5qb2luKCIgIik7ZnVuY3Rpb24gbih0KXt2YXIgZT10LmRlc2NyaXB0aW9uPyIgIit0LmRlc2NyaXB0aW9uOiIiLHI9dC5rZXlzfHxbXTtpZihyLmxlbmd0aD4wKXtmb3IodmFyIG49W10saT0wO2k8ci5sZW5ndGg7aSsrKW5baV09ImAiK3JbaV0rImAiO2UrPSJGaW5hbGx5LCB0aGUgdGVtcGxhdGUgc3RyaW5nIGhhcyBhY2Nlc3MgdG8gIixlPTE9PT1yLmxlbmd0aD8idmFyaWFibGUgIituWzBdOiJ2YXJpYWJsZXMgIituLnNsaWNlKDAsLTEpLmpvaW4oIiwgIikrIiBhbmQgIituLnNsaWNlKC0xKSsiLiJ9cmV0dXJuIGV9ci5ob3ZlcnRlbXBsYXRlQXR0cnM9ZnVuY3Rpb24odCxlKXt0PXR8fHt9O24oZT1lfHx7fSk7dmFyIHI9e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZTp0LmVkaXRUeXBlfHwibm9uZSJ9O3JldHVybiExIT09dC5hcnJheU9rJiYoci5hcnJheU9rPSEwKSxyfSxyLnRleHR0ZW1wbGF0ZUF0dHJzPWZ1bmN0aW9uKHQsZSl7dD10fHx7fTtuKGU9ZXx8e30pO3ZhciByPXt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6dC5lZGl0VHlwZXx8ImNhbGMifTtyZXR1cm4hMSE9PXQuYXJyYXlPayYmKHIuYXJyYXlPaz0hMCkscn19LHsiLi4vY29uc3RhbnRzL2RvY3MiOjcyMH1dLDg3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3Rlcm5hcnkiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGE9dCgiLi4vLi4vbGliIikuY291bnRlclJlZ2V4O3IubmFtZT0idGVybmFyeSI7dmFyIG89ci5hdHRyPSJzdWJwbG90IjtyLmlkUm9vdD0idGVybmFyeSIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWEoInRlcm5hcnkiKSwoci5hdHRyaWJ1dGVzPXt9KVtvXT17dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ0ZXJuYXJ5IixlZGl0VHlwZToiY2FsYyJ9LHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy50ZXJuYXJ5LG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPWkociwidGVybmFyeSIscyksYz1lW3NdLl9zdWJwbG90O2N8fChjPW5ldyBuKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX3Rlcm5hcnlsYXllci5ub2RlKCl9LGUpLGVbc10uX3N1YnBsb3Q9YyksYy5wbG90KGwsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy50ZXJuYXJ5fHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0scz1uW29dLl9zdWJwbG90OyFlW29dJiZzJiYocy5wbG90Q29udGFpbmVyLnJlbW92ZSgpLHMuY2xpcERlZi5yZW1vdmUoKSxzLmNsaXBEZWZSZWxhdGl2ZS5yZW1vdmUoKSxzLmxheWVyc1siYS10aXRsZSJdLnJlbW92ZSgpLHMubGF5ZXJzWyJiLXRpdGxlIl0ucmVtb3ZlKCkscy5sYXllcnNbImMtdGl0bGUiXS5yZW1vdmUoKSl9fX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjgzNiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODc5LCIuL2xheW91dF9kZWZhdWx0cyI6ODgwLCIuL3Rlcm5hcnkiOjg4MX1dLDg3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9e3RpdGxlOnt0ZXh0OmEudGl0bGUudGV4dCxmb250OmEudGl0bGUuZm9udH0sY29sb3I6YS5jb2xvcix0aWNrbW9kZTphLnRpY2ttb2RlLG50aWNrczpzKHt9LGEubnRpY2tzLHtkZmx0OjYsbWluOjF9KSx0aWNrMDphLnRpY2swLGR0aWNrOmEuZHRpY2ssdGlja3ZhbHM6YS50aWNrdmFscyx0aWNrdGV4dDphLnRpY2t0ZXh0LHRpY2tzOmEudGlja3MsdGlja2xlbjphLnRpY2tsZW4sdGlja3dpZHRoOmEudGlja3dpZHRoLHRpY2tjb2xvcjphLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczphLnNob3d0aWNrbGFiZWxzLHNob3d0aWNrcHJlZml4OmEuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDphLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6YS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmEudGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6YS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6YS5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDphLm1pbmV4cG9uZW50LHNlcGFyYXRldGhvdXNhbmRzOmEuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6YS50aWNrZm9udCx0aWNrYW5nbGU6YS50aWNrYW5nbGUsdGlja2Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmEudGlja2Zvcm1hdHN0b3BzLGhvdmVyZm9ybWF0OmEuaG92ZXJmb3JtYXQsc2hvd2xpbmU6cyh7fSxhLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmEubGluZWNvbG9yLGxpbmV3aWR0aDphLmxpbmV3aWR0aCxzaG93Z3JpZDpzKHt9LGEuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6YS5ncmlkY29sb3IsZ3JpZHdpZHRoOmEuZ3JpZHdpZHRoLGxheWVyOmEubGF5ZXIsbWluOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH0sX2RlcHJlY2F0ZWQ6e3RpdGxlOmEuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmEuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sYz1lLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6InRlcm5hcnkifSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxzdW06e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLG1pbjowfSxhYXhpczpsLGJheGlzOmwsY2F4aXM6bH0sInBsb3QiLCJmcm9tLXJvb3QiKTtjLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxjLmFheGlzLnVpcmV2aXNpb249Yy5iYXhpcy51aXJldmlzaW9uPWMuY2F4aXMudWlyZXZpc2lvbj17dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjE0LCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4MTMsIi4uL2RvbWFpbiI6ODI2fV0sODgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxsPXQoIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxjPXQoIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIiksaD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksZj1bImFheGlzIiwiYmF4aXMiLCJjYXhpcyJdO2Z1bmN0aW9uIHAodCxlLHIsYSl7dmFyIG8scyxsLGM9cigiYmdjb2xvciIpLHU9cigic3VtIik7YS5iZ0NvbG9yPW4uY29tYmluZShjLGEucGFwZXJfYmdjb2xvcik7Zm9yKHZhciBoPTA7aDxmLmxlbmd0aDtoKyspcz10W289ZltoXV18fHt9LChsPWkubmV3Q29udGFpbmVyKGUsbykpLl9uYW1lPW8sZChzLGwsYSxlKTt2YXIgcD1lLmFheGlzLGc9ZS5iYXhpcyxtPWUuY2F4aXM7cC5taW4rZy5taW4rbS5taW4+PXUmJihwLm1pbj0wLGcubWluPTAsbS5taW49MCx0LmFheGlzJiZkZWxldGUgdC5hYXhpcy5taW4sdC5iYXhpcyYmZGVsZXRlIHQuYmF4aXMubWluLHQuY2F4aXMmJmRlbGV0ZSB0LmNheGlzLm1pbil9ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1oW2UuX25hbWVdO2Z1bmN0aW9uIG8ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLGkscixuKX1vKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pLGUudHlwZT0ibGluZWFyIjt2YXIgZj1vKCJjb2xvciIpLHA9ZiE9PWkuY29sb3IuZGZsdD9mOnIuZm9udC5jb2xvcixkPWUuX25hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCksZz0iQ29tcG9uZW50ICIrZCxtPW8oInRpdGxlLnRleHQiLGcpO2UuX2hvdmVydGl0bGU9bT09PWc/bTpkLGEuY29lcmNlRm9udChvLCJ0aXRsZS5mb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipyLmZvbnQuc2l6ZSksY29sb3I6cH0pLG8oIm1pbiIpLGModCxlLG8sImxpbmVhciIpLHModCxlLG8sImxpbmVhciIse30pLGwodCxlLG8se291dGVyVGlja3M6ITB9KSxvKCJzaG93dGlja2xhYmVscyIpJiYoYS5jb2VyY2VGb250KG8sInRpY2tmb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTpyLmZvbnQuc2l6ZSxjb2xvcjpwfSksbygidGlja2FuZ2xlIiksbygidGlja2Zvcm1hdCIpKSx1KHQsZSxvLHtkZmx0Q29sb3I6ZixiZ0NvbG9yOnIuYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6aX0pLG8oImhvdmVyZm9ybWF0IiksbygibGF5ZXIiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6InRlcm5hcnkiLGF0dHJpYnV0ZXM6aCxoYW5kbGVEZWZhdWx0czpwLGZvbnQ6ZS5mb250LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyI6ODE1LCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6ODIwLCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo4MjEsIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo4MjIsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjg3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODc5fV0sODgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz1vLl8sbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSx1PXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGg9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsZj10KCIuLi9wbG90cyIpLHA9dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxkPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyIpLHY9bS5mcmVlTW9kZSx5PW0ucmVjdE1vZGUseD10KCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLGI9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QsXz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Iikuc2VsZWN0T25DbGljayx3PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCxUPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdGlvbnNDYWNoZSxrPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKTtmdW5jdGlvbiBNKHQsZSl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmluaXQoZSksdGhpcy5tYWtlRnJhbWV3b3JrKGUpLHRoaXMuYVRpY2tMYXlvdXQ9bnVsbCx0aGlzLmJUaWNrTGF5b3V0PW51bGwsdGhpcy5jVGlja0xheW91dD1udWxsfWUuZXhwb3J0cz1NO3ZhciBBPU0ucHJvdG90eXBlO0EuaW5pdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRhaW5lcj10Ll90ZXJuYXJ5bGF5ZXIsdGhpcy5kZWZzPXQuX2RlZnMsdGhpcy5sYXlvdXRJZD10Ll91aWQsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e319LEEucGxvdD1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF0sbj1lLl9zaXplO3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7aWYoITE9PT10W2ldWzBdLnRyYWNlLmNsaXBvbmF4aXMpe3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319dGhpcy51cGRhdGVMYXllcnMociksdGhpcy5hZGp1c3RMYXlvdXQocixuKSxmLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdyYXBoRGl2LHRoaXMsdCxyKSx0aGlzLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikuY2FsbChsLmZpbGwsci5iZ2NvbG9yKX0sQS5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhEaXYscj10W3RoaXMuaWRdLG49dGhpcy5jbGlwSWQ9ImNsaXAiK3RoaXMubGF5b3V0SWQrdGhpcy5pZCxpPXRoaXMuY2xpcElkUmVsYXRpdmU9ImNsaXAtcmVsYXRpdmUiK3RoaXMubGF5b3V0SWQrdGhpcy5pZDt0aGlzLmNsaXBEZWY9by5lbnN1cmVTaW5nbGVCeUlkKHQuX2NsaXBzLCJjbGlwUGF0aCIsbiwoZnVuY3Rpb24odCl7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFoiKX0pKSx0aGlzLmNsaXBEZWZSZWxhdGl2ZT1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsImNsaXBQYXRoIixpLChmdW5jdGlvbih0KXt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpfSkpLHRoaXMucGxvdENvbnRhaW5lcj1vLmVuc3VyZVNpbmdsZSh0aGlzLmNvbnRhaW5lciwiZyIsdGhpcy5pZCksdGhpcy51cGRhdGVMYXllcnMociksYy5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmJhY2twbG90LG4sZSksYy5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmdyaWRzLG4sZSl9LEEudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJzLHI9WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImdyaWRzIl07ImJlbG93IHRyYWNlcyI9PT10LmFheGlzLmxheWVyJiZyLnB1c2goImFheGlzIiwiYWxpbmUiKSwiYmVsb3cgdHJhY2VzIj09PXQuYmF4aXMubGF5ZXImJnIucHVzaCgiYmF4aXMiLCJibGluZSIpLCJiZWxvdyB0cmFjZXMiPT09dC5jYXhpcy5sYXllciYmci5wdXNoKCJjYXhpcyIsImNsaW5lIiksci5wdXNoKCJmcm9udHBsb3QiKSwiYWJvdmUgdHJhY2VzIj09PXQuYWF4aXMubGF5ZXImJnIucHVzaCgiYWF4aXMiLCJhbGluZSIpLCJhYm92ZSB0cmFjZXMiPT09dC5iYXhpcy5sYXllciYmci5wdXNoKCJiYXhpcyIsImJsaW5lIiksImFib3ZlIHRyYWNlcyI9PT10LmNheGlzLmxheWVyJiZyLnB1c2goImNheGlzIiwiY2xpbmUiKTt2YXIgaT10aGlzLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCJnLnRvcGxldmVsIikuZGF0YShyLFN0cmluZyksYT1bImFncmlkIiwiYmdyaWQiLCJjZ3JpZCJdO2kuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0b3BsZXZlbCAiK3R9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ZVt0XT1yLCJmcm9udHBsb3QiPT09dD9yLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOiJiYWNrcGxvdCI9PT10P3IuYXBwZW5kKCJnIikuY2xhc3NlZCgibWFwbGF5ZXIiLCEwKToicGxvdGJnIj09PXQ/ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFoiKToiYWxpbmUiPT09dHx8ImJsaW5lIj09PXR8fCJjbGluZSI9PT10P3IuYXBwZW5kKCJwYXRoIik6ImdyaWRzIj09PXQmJmEuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1yLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdyaWQgIit0LCEwKX0pKX0pKSxpLm9yZGVyKCl9O3ZhciBTPU1hdGguc3FydCg0LzMpO0EuYWRqdXN0TGF5b3V0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGY9dGhpcyxwPXQuZG9tYWluLGQ9KHAueFswXStwLnhbMV0pLzIsZz0ocC55WzBdK3AueVsxXSkvMixtPXAueFsxXS1wLnhbMF0sdj1wLnlbMV0tcC55WzBdLHk9bSplLncseD12KmUuaCxiPXQuc3VtLF89dC5hYXhpcy5taW4sdz10LmJheGlzLm1pbixUPXQuY2F4aXMubWluO3k+Uyp4P2k9KGE9eCkqUzphPShpPXkpL1Msbz1tKmkveSxzPXYqYS94LHI9ZS5sK2UudypkLWkvMixuPWUudCtlLmgqKDEtZyktYS8yLGYueDA9cixmLnkwPW4sZi53PWksZi5oPWEsZi5zdW09YixmLnhheGlzPXt0eXBlOiJsaW5lYXIiLHJhbmdlOltfKzIqVC1iLGItXy0yKnddLGRvbWFpbjpbZC1vLzIsZCtvLzJdLF9pZDoieCJ9LHUoZi54YXhpcyxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxmLnhheGlzLnNldFNjYWxlKCksZi54YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuYT49Zi5hYXhpcy5yYW5nZVswXSYmdC5hPD1mLmFheGlzLnJhbmdlWzFdJiZ0LmI+PWYuYmF4aXMucmFuZ2VbMV0mJnQuYjw9Zi5iYXhpcy5yYW5nZVswXSYmdC5jPj1mLmNheGlzLnJhbmdlWzFdJiZ0LmM8PWYuY2F4aXMucmFuZ2VbMF19LGYueWF4aXM9e3R5cGU6ImxpbmVhciIscmFuZ2U6W18sYi13LVRdLGRvbWFpbjpbZy1zLzIsZytzLzJdLF9pZDoieSJ9LHUoZi55YXhpcyxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxmLnlheGlzLnNldFNjYWxlKCksZi55YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hMH07dmFyIGs9Zi55YXhpcy5kb21haW5bMF0sTT1mLmFheGlzPWgoe30sdC5hYXhpcyx7cmFuZ2U6W18sYi13LVRdLHNpZGU6ImxlZnQiLHRpY2thbmdsZTooK3QuYWF4aXMudGlja2FuZ2xlfHwwKS0zMCxkb21haW46W2ssaytzKlNdLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MCxfaWQ6InkiLF9sZW5ndGg6aX0pO3UoTSxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxNLnNldFNjYWxlKCk7dmFyIEE9Zi5iYXhpcz1oKHt9LHQuYmF4aXMse3JhbmdlOltiLV8tVCx3XSxzaWRlOiJib3R0b20iLGRvbWFpbjpmLnhheGlzLmRvbWFpbixhbmNob3I6ImZyZWUiLHBvc2l0aW9uOjAsX2lkOiJ4IixfbGVuZ3RoOml9KTt1KEEsZi5ncmFwaERpdi5fZnVsbExheW91dCksQS5zZXRTY2FsZSgpO3ZhciBFPWYuY2F4aXM9aCh7fSx0LmNheGlzLHtyYW5nZTpbYi1fLXcsVF0sc2lkZToicmlnaHQiLHRpY2thbmdsZTooK3QuY2F4aXMudGlja2FuZ2xlfHwwKSszMCxkb21haW46W2ssaytzKlNdLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MCxfaWQ6InkiLF9sZW5ndGg6aX0pO3UoRSxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxFLnNldFNjYWxlKCk7dmFyIEM9Ik0iK3IrIiwiKyhuK2EpKyJoIitpKyJsLSIraS8yKyIsLSIrYSsiWiI7Zi5jbGlwRGVmLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEMpLGYubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixDKTt2YXIgTD0iTTAsIithKyJoIitpKyJsLSIraS8yKyIsLSIrYSsiWiI7Zi5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsTCk7dmFyIFA9InRyYW5zbGF0ZSgiK3IrIiwiK24rIikiO2YucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIsLm1hcGxheWVyIikuYXR0cigidHJhbnNmb3JtIixQKSxmLmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpO3ZhciBJPSJ0cmFuc2xhdGUoIisoci1BLl9vZmZzZXQpKyIsIisobithKSsiKSI7Zi5sYXllcnMuYmF4aXMuYXR0cigidHJhbnNmb3JtIixJKSxmLmxheWVycy5iZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLEkpO3ZhciB6PSJ0cmFuc2xhdGUoIisocitpLzIpKyIsIituKyIpcm90YXRlKDMwKXRyYW5zbGF0ZSgwLCIrLU0uX29mZnNldCsiKSI7Zi5sYXllcnMuYWF4aXMuYXR0cigidHJhbnNmb3JtIix6KSxmLmxheWVycy5hZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLHopO3ZhciBPPSJ0cmFuc2xhdGUoIisocitpLzIpKyIsIituKyIpcm90YXRlKC0zMCl0cmFuc2xhdGUoMCwiKy1FLl9vZmZzZXQrIikiO2YubGF5ZXJzLmNheGlzLmF0dHIoInRyYW5zZm9ybSIsTyksZi5sYXllcnMuY2dyaWQuYXR0cigidHJhbnNmb3JtIixPKSxmLmRyYXdBeGVzKCEwKSxmLmxheWVycy5hbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixNLnNob3dsaW5lPyJNIityKyIsIisobithKSsibCIraS8yKyIsLSIrYToiTTAsMCIpLmNhbGwobC5zdHJva2UsTS5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKE0ubGluZXdpZHRofHwwKSsicHgiKSxmLmxheWVycy5ibGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixBLnNob3dsaW5lPyJNIityKyIsIisobithKSsiaCIraToiTTAsMCIpLmNhbGwobC5zdHJva2UsQS5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKEEubGluZXdpZHRofHwwKSsicHgiKSxmLmxheWVycy5jbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixFLnNob3dsaW5lPyJNIisocitpLzIpKyIsIituKyJsIitpLzIrIiwiK2E6Ik0wLDAiKS5jYWxsKGwuc3Ryb2tlLEUubGluZWNvbG9yfHwiIzAwMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChFLmxpbmV3aWR0aHx8MCkrInB4IiksZi5ncmFwaERpdi5fY29udGV4dC5zdGF0aWNQbG90fHxmLmluaXRJbnRlcmFjdGlvbnMoKSxjLnNldENsaXBVcmwoZi5sYXllcnMuZnJvbnRwbG90LGYuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOmYuY2xpcElkLGYuZ3JhcGhEaXYpfSxBLmRyYXdBeGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhEaXYscj10aGlzLmlkLnN1YnN0cig3KSsidGl0bGUiLG49dGhpcy5sYXllcnMsaT10aGlzLmFheGlzLGE9dGhpcy5iYXhpcyxvPXRoaXMuY2F4aXM7aWYodGhpcy5kcmF3QXgoaSksdGhpcy5kcmF3QXgoYSksdGhpcy5kcmF3QXgobyksdCl7dmFyIGw9TWF0aC5tYXgoaS5zaG93dGlja2xhYmVscz9pLnRpY2tmb250LnNpemUvMjowLChvLnNob3d0aWNrbGFiZWxzPy43NSpvLnRpY2tmb250LnNpemU6MCkrKCJvdXRzaWRlIj09PW8udGlja3M/Ljg3Km8udGlja2xlbjowKSksYz0oYS5zaG93dGlja2xhYmVscz9hLnRpY2tmb250LnNpemU6MCkrKCJvdXRzaWRlIj09PWEudGlja3M/YS50aWNrbGVuOjApKzM7blsiYS10aXRsZSJdPXguZHJhdyhlLCJhIityLHtwcm9wQ29udGFpbmVyOmkscHJvcE5hbWU6dGhpcy5pZCsiLmFheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpzKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBBIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwK3RoaXMudy8yLHk6dGhpcy55MC1pLnRpdGxlLmZvbnQuc2l6ZS8zLWwsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KSxuWyJiLXRpdGxlIl09eC5kcmF3KGUsImIiK3Ise3Byb3BDb250YWluZXI6YSxwcm9wTmFtZTp0aGlzLmlkKyIuYmF4aXMudGl0bGUiLHBsYWNlaG9sZGVyOnMoZSwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEIgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDAtYyx5OnRoaXMueTArdGhpcy5oKy44MyphLnRpdGxlLmZvbnQuc2l6ZStjLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSksblsiYy10aXRsZSJdPXguZHJhdyhlLCJjIityLHtwcm9wQ29udGFpbmVyOm8scHJvcE5hbWU6dGhpcy5pZCsiLmNheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpzKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBDIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwK3RoaXMudytjLHk6dGhpcy55MCt0aGlzLmgrLjgzKm8udGl0bGUuZm9udC5zaXplK2MsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX19LEEuZHJhd0F4PWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5ncmFwaERpdixuPXQuX25hbWUsaT1uLmNoYXJBdCgwKSxhPXQuX2lkLHM9dGhpcy5sYXllcnNbbl0sbD1pKyJ0aWNrTGF5b3V0IixjPShlPXQpLnRpY2tzK1N0cmluZyhlLnRpY2tsZW4pK1N0cmluZyhlLnNob3d0aWNrbGFiZWxzKTt0aGlzW2xdIT09YyYmKHMuc2VsZWN0QWxsKCIuIithKyJ0aWNrIikucmVtb3ZlKCksdGhpc1tsXT1jKSx0LnNldFNjYWxlKCk7dmFyIHU9cC5jYWxjVGlja3ModCksaD1wLmNsaXBFbmRzKHQsdSksZj1wLm1ha2VUcmFuc0ZuKHQpLGQ9cC5nZXRUaWNrU2lnbnModClbMl0sZz1vLmRlZzJyYWQoMzApLG09ZCoodC5saW5ld2lkdGh8fDEpLzIsdj1kKnQudGlja2xlbix5PXRoaXMudyx4PXRoaXMuaCxiPSJiIj09PWk/Ik0wLCIrbSsibCIrTWF0aC5zaW4oZykqdisiLCIrTWF0aC5jb3MoZykqdjoiTSIrbSsiLDBsIitNYXRoLmNvcyhnKSp2KyIsIistTWF0aC5zaW4oZykqdixfPXthOiJNMCwwbCIreCsiLC0iK3kvMixiOiJNMCwwbC0iK3kvMisiLC0iK3gsYzoiTTAsMGwtIit4KyIsIit5LzJ9W2ldO3AuZHJhd1RpY2tzKHIsdCx7dmFsczoiaW5zaWRlIj09PXQudGlja3M/aDp1LGxheWVyOnMscGF0aDpiLHRyYW5zRm46ZixjcmlzcDohMX0pLHAuZHJhd0dyaWQocix0LHt2YWxzOmgsbGF5ZXI6dGhpcy5sYXllcnNbaSsiZ3JpZCJdLHBhdGg6Xyx0cmFuc0ZuOmYsY3Jpc3A6ITF9KSxwLmRyYXdMYWJlbHMocix0LHt2YWxzOnUsbGF5ZXI6cyx0cmFuc0ZuOmYsbGFiZWxGbnM6cC5tYWtlTGFiZWxGbnModCwwLDMwKX0pfTt2YXIgRT1rLk1JTlpPT00vMisuODcsQz0ibS0wLjg3LC41aCIrRSsidjNoLSIrKEUrNS4yKSsibCIrKEUvMisyLjYpKyIsLSIrKC44NypFKzQuNSkrImwyLjYsMS41bC0iK0UvMisiLCIrLjg3KkUrIloiLEw9Im0wLjg3LC41aC0iK0UrInYzaCIrKEUrNS4yKSsibC0iKyhFLzIrMi42KSsiLC0iKyguODcqRSs0LjUpKyJsLTIuNiwxLjVsIitFLzIrIiwiKy44NypFKyJaIixQPSJtMCwxbCIrRS8yKyIsIisuODcqRSsibDIuNiwtMS41bC0iKyhFLzIrMi42KSsiLC0iKyguODcqRSs0LjUpKyJsLSIrKEUvMisyLjYpKyIsIisoLjg3KkUrNC41KSsibDIuNiwxLjVsIitFLzIrIiwtIisuODcqRSsiWiIsST0hMDtmdW5jdGlvbiB6KHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnpvb21ib3gsLmpzLXpvb21ib3gtYmFja2Ryb3AsLmpzLXpvb21ib3gtbWVudSwuem9vbWJveC1jb3JuZXJzIikucmVtb3ZlKCl9QS5jbGVhclNlbGVjdD1mdW5jdGlvbigpe1QodGhpcy5kcmFnT3B0aW9ucyksdyh0aGlzLmRyYWdPcHRpb25zLmdkKX0sQS5pbml0SW50ZXJhY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4sdSxoLGYscCxtLHgsdz10aGlzLFQ9dy5sYXllcnMucGxvdGJnLnNlbGVjdCgicGF0aCIpLm5vZGUoKSxNPXcuZ3JhcGhEaXYsQT1NLl9mdWxsTGF5b3V0Ll96b29tbGF5ZXI7ZnVuY3Rpb24gRSh0KXt2YXIgZT17fTtyZXR1cm4gZVt3LmlkKyIuYWF4aXMubWluIl09dC5hLGVbdy5pZCsiLmJheGlzLm1pbiJdPXQuYixlW3cuaWQrIi5jYXhpcy5taW4iXT10LmMsZX1mdW5jdGlvbiBPKHQsZSl7dmFyIHI9TS5fZnVsbExheW91dC5jbGlja21vZGU7eihNKSwyPT09dCYmKE0uZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxhLmNhbGwoIl9ndWlSZWxheW91dCIsTSxFKHthOjAsYjowLGM6MH0pKSksci5pbmRleE9mKCJzZWxlY3QiKT4tMSYmMT09PXQmJl8oZSxNLFt3LnhheGlzXSxbdy55YXhpc10sdy5pZCx3LmRyYWdPcHRpb25zKSxyLmluZGV4T2YoImV2ZW50Iik+LTEmJmcuY2xpY2soTSxlLHcuaWQpfWZ1bmN0aW9uIEQodCxlKXtyZXR1cm4gMS1lL3cuaH1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuIDEtKHQrKHcuaC1lKS9NYXRoLnNxcnQoMykpL3cud31mdW5jdGlvbiBGKHQsZSl7cmV0dXJuKHQtKHcuaC1lKS9NYXRoLnNxcnQoMykpL3cud31mdW5jdGlvbiBCKGksYSl7dmFyIG89dCtpLHM9ZSthLGw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLEQoMCxlKSxEKDAscykpKSxjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxSKHQsZSksUihvLHMpKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsRih0LGUpLEYobyxzKSkpLGc9KGwvMitkKSp3Lncsdj0oMS1sLzItYykqdy53LHk9KGcrdikvMixiPXYtZyxfPSgxLWwpKncuaCxUPV8tYi9TO2I8ay5NSU5aT09NPyh1PXIsbS5hdHRyKCJkIixmKSx4LmF0dHIoImQiLCJNMCwwWiIpKToodT17YTpyLmErbCpuLGI6ci5iK2MqbixjOnIuYytkKm59LG0uYXR0cigiZCIsZisiTSIrZysiLCIrXysiSCIrdisiTCIreSsiLCIrVCsiTCIrZysiLCIrXysiWiIpLHguYXR0cigiZCIsIk0iK3QrIiwiK2UrIm0wLjUsMC41aDV2LTJoLTV2LTVoLTJ2NWgtNXYyaDV2NWgyWk0iK2crIiwiK18rQysiTSIrdisiLCIrXytMKyJNIit5KyIsIitUK1ApKSxwfHwobS50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLGg+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCkseC50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCkscD0hMCksTS5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLEUodSkpfWZ1bmN0aW9uIE4oKXt6KE0pLHUhPT1yJiYoYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLE0sRSh1KSksSSYmTS5kYXRhJiZNLl9jb250ZXh0LnNob3dUaXBzJiYoby5ub3RpZmllcihzKE0sIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0IiksImxvbmciKSxJPSExKSl9ZnVuY3Rpb24gaih0LGUpe3ZhciBuPXQvdy54YXhpcy5fbSxpPWUvdy55YXhpcy5fbSxhPVsodT17YTpyLmEtaSxiOnIuYisobitpKS8yLGM6ci5jLShuLWkpLzJ9KS5hLHUuYix1LmNdLnNvcnQoby5zb3J0ZXJBc2MpLHM9YS5pbmRleE9mKHUuYSksbD1hLmluZGV4T2YodS5iKSxoPWEuaW5kZXhPZih1LmMpO2FbMF08MCYmKGFbMV0rYVswXS8yPDA/KGFbMl0rPWFbMF0rYVsxXSxhWzBdPWFbMV09MCk6KGFbMl0rPWFbMF0vMixhWzFdKz1hWzBdLzIsYVswXT0wKSx1PXthOmFbc10sYjphW2xdLGM6YVtoXX0sZT0oci5hLXUuYSkqdy55YXhpcy5fbSx0PShyLmMtdS5jLXIuYit1LmIpKncueGF4aXMuX20pO3ZhciBmPSJ0cmFuc2xhdGUoIisody54MCt0KSsiLCIrKHcueTArZSkrIikiO3cucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIsLm1hcGxheWVyIikuYXR0cigidHJhbnNmb3JtIixmKTt2YXIgcD0idHJhbnNsYXRlKCIrLXQrIiwiKy1lKyIpIjt3LmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLHApLHcuYWF4aXMucmFuZ2U9W3UuYSx3LnN1bS11LmItdS5jXSx3LmJheGlzLnJhbmdlPVt3LnN1bS11LmEtdS5jLHUuYl0sdy5jYXhpcy5yYW5nZT1bdy5zdW0tdS5hLXUuYix1LmNdLHcuZHJhd0F4ZXMoITEpLHcuX2hhc0NsaXBPbkF4aXNGYWxzZSYmdy5wbG90Q29udGFpbmVyLnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiLnRyYWNlIikuY2FsbChjLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsdyksTS5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLEUodSkpfWZ1bmN0aW9uIFUoKXthLmNhbGwoIl9ndWlSZWxheW91dCIsTSxFKHUpKX10aGlzLmRyYWdPcHRpb25zPXtlbGVtZW50OlQsZ2Q6TSxwbG90aW5mbzp7aWQ6dy5pZCxkb21haW46TS5fZnVsbExheW91dFt3LmlkXS5kb21haW4seGF4aXM6dy54YXhpcyx5YXhpczp3LnlheGlzfSxzdWJwbG90OncuaWQscHJlcEZuOmZ1bmN0aW9uKGEsbyxzKXt3LmRyYWdPcHRpb25zLnhheGVzPVt3LnhheGlzXSx3LmRyYWdPcHRpb25zLnlheGVzPVt3LnlheGlzXTt2YXIgYz13LmRyYWdPcHRpb25zLmRyYWdtb2RlPU0uX2Z1bGxMYXlvdXQuZHJhZ21vZGU7dihjKT93LmRyYWdPcHRpb25zLm1pbkRyYWc9MTp3LmRyYWdPcHRpb25zLm1pbkRyYWc9dm9pZCAwLCJ6b29tIj09PWM/KHcuZHJhZ09wdGlvbnMubW92ZUZuPUIsdy5kcmFnT3B0aW9ucy5jbGlja0ZuPU8sdy5kcmFnT3B0aW9ucy5kb25lRm49TixmdW5jdGlvbihhLG8scyl7dmFyIGM9VC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0PW8tYy5sZWZ0LGU9cy1jLnRvcCxyPXthOncuYWF4aXMucmFuZ2VbMF0sYjp3LmJheGlzLnJhbmdlWzFdLGM6dy5jYXhpcy5yYW5nZVsxXX0sdT1yLG49dy5hYXhpcy5yYW5nZVsxXS1yLmEsaD1pKHcuZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbdy5pZF0uYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksZj0iTTAsIit3LmgrIkwiK3cudy8yKyIsIDBMIit3LncrIiwiK3cuaCsiWiIscD0hMSxtPUEuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94IikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdy54MCsiLCAiK3cueTArIikiKS5zdHlsZSh7ZmlsbDpoPi4yPyJyZ2JhKDAsMCwwLDApIjoicmdiYSgyNTUsMjU1LDI1NSwwKSIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoImQiLGYpLHg9QS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3cueDArIiwgIit3LnkwKyIpIikuc3R5bGUoe2ZpbGw6bC5iYWNrZ3JvdW5kLHN0cm9rZTpsLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOjEsb3BhY2l0eTowfSkuYXR0cigiZCIsIk0wLDBaIiksdy5jbGVhclNlbGVjdChNKX0oMCxvLHMpKToicGFuIj09PWM/KHcuZHJhZ09wdGlvbnMubW92ZUZuPWosdy5kcmFnT3B0aW9ucy5jbGlja0ZuPU8sdy5kcmFnT3B0aW9ucy5kb25lRm49VSxyPXthOncuYWF4aXMucmFuZ2VbMF0sYjp3LmJheGlzLnJhbmdlWzFdLGM6dy5jYXhpcy5yYW5nZVsxXX0sdT1yLHcuY2xlYXJTZWxlY3QoTSkpOih5KGMpfHx2KGMpKSYmYihhLG8scyx3LmRyYWdPcHRpb25zLGMpfX0sVC5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXtnLmhvdmVyKE0sdCx3LmlkKSxNLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9VCxNLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9dy5pZH0sVC5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe00uX2RyYWdnaW5nfHxkLnVuaG92ZXIoTSx0KX0sZC5pbml0KHRoaXMuZHJhZ09wdGlvbnMpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjYzNCwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2MzMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTUsIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIjo3MTAsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjgwNSwiLi4vY2FydGVzaWFuL3NlbGVjdCI6ODE4LCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjgxOSwiLi4vcGxvdHMiOjg2MixkMzoxNjksdGlueWNvbG9yMjo1NDh9XSw4ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvbG9nZ2VycyIpLGk9dCgiLi9saWIvbm9vcCIpLGE9dCgiLi9saWIvcHVzaF91bmlxdWUiKSxvPXQoIi4vbGliL2lzX3BsYWluX29iamVjdCIpLHM9dCgiLi9saWIvZG9tIikuYWRkU3R5bGVSdWxlLGw9dCgiLi9saWIvZXh0ZW5kIiksYz10KCIuL3Bsb3RzL2F0dHJpYnV0ZXMiKSx1PXQoIi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxoPWwuZXh0ZW5kRmxhdCxmPWwuZXh0ZW5kRGVlcEFsbDtmdW5jdGlvbiBwKHQpe3ZhciBlPXQubmFtZSxpPXQuY2F0ZWdvcmllcyxhPXQubWV0YTtpZihyLm1vZHVsZXNbZV0pbi5sb2coIlR5cGUgIitlKyIgYWxyZWFkeSByZWdpc3RlcmVkIik7ZWxzZXtyLnN1YnBsb3RzUmVnaXN0cnlbdC5iYXNlUGxvdE1vZHVsZS5uYW1lXXx8ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lO2lmKHIuc3VicGxvdHNSZWdpc3RyeVtlXSlyZXR1cm4gdm9pZCBuLmxvZygiUGxvdCB0eXBlICIrZSsiIGFscmVhZHkgcmVnaXN0ZXJlZC4iKTtmb3IodmFyIGkgaW4gdih0KSxyLnN1YnBsb3RzUmVnaXN0cnlbZV09dCxyLmNvbXBvbmVudHNSZWdpc3RyeSliKGksdC5uYW1lKX0odC5iYXNlUGxvdE1vZHVsZSk7Zm9yKHZhciBvPXt9LGw9MDtsPGkubGVuZ3RoO2wrKylvW2lbbF1dPSEwLHIuYWxsQ2F0ZWdvcmllc1tpW2xdXT0hMDtmb3IodmFyIGMgaW4gci5tb2R1bGVzW2VdPXtfbW9kdWxlOnQsY2F0ZWdvcmllczpvfSxhJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgmJihyLm1vZHVsZXNbZV0ubWV0YT1hKSxyLmFsbFR5cGVzLnB1c2goZSksci5jb21wb25lbnRzUmVnaXN0cnkpeShjLGUpO3QubGF5b3V0QXR0cmlidXRlcyYmaChyLnRyYWNlTGF5b3V0QXR0cmlidXRlcyx0LmxheW91dEF0dHJpYnV0ZXMpO3ZhciB1PXQuYmFzZVBsb3RNb2R1bGUsZj11Lm5hbWU7aWYoIm1hcGJveCI9PT1mKXt2YXIgcD11LmNvbnN0YW50cy5zdHlsZVJ1bGVzO2Zvcih2YXIgZCBpbiBwKXMoIi5qcy1wbG90bHktcGxvdCAucGxvdGx5IC5tYXBib3hnbC0iK2QscFtkXSl9ImdlbyIhPT1mJiYibWFwYm94IiE9PWZ8fHZvaWQgMD09PXR5cGVvZiB3aW5kb3d8fHZvaWQgMCE9PXdpbmRvdy5QbG90bHlHZW9Bc3NldHN8fCh3aW5kb3cuUGxvdGx5R2VvQXNzZXRzPXt0b3BvanNvbjp7fX0pfX1mdW5jdGlvbiBkKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcigiQ29tcG9uZW50IG1vZHVsZSAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgZT10Lm5hbWU7Zm9yKHZhciBuIGluIHIuY29tcG9uZW50c1JlZ2lzdHJ5W2VdPXQsdC5sYXlvdXRBdHRyaWJ1dGVzJiYodC5sYXlvdXRBdHRyaWJ1dGVzLl9pc0xpbmtlZFRvQXJyYXkmJmEoci5sYXlvdXRBcnJheUNvbnRhaW5lcnMsZSksdih0KSksci5tb2R1bGVzKXkoZSxuKTtmb3IodmFyIGkgaW4gci5zdWJwbG90c1JlZ2lzdHJ5KWIoZSxpKTtmb3IodmFyIG8gaW4gci50cmFuc2Zvcm1zUmVnaXN0cnkpeChlLG8pO3Quc2NoZW1hJiZ0LnNjaGVtYS5sYXlvdXQmJmYodSx0LnNjaGVtYS5sYXlvdXQpfWZ1bmN0aW9uIGcodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJUcmFuc2Zvcm0gbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiIpO3ZhciBlPSJUcmFuc2Zvcm0gbW9kdWxlICIrdC5uYW1lLGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQudHJhbnNmb3JtLGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQuY2FsY1RyYW5zZm9ybTtpZighaSYmIWEpdGhyb3cgbmV3IEVycm9yKGUrIiBpcyBtaXNzaW5nIGEgKnRyYW5zZm9ybSogb3IgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZC4iKTtmb3IodmFyIHMgaW4gaSYmYSYmbi5sb2coW2UrIiBoYXMgYm90aCBhICp0cmFuc2Zvcm0qIGFuZCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy4iLCJQbGVhc2Ugbm90ZSB0aGF0IGFsbCAqdHJhbnNmb3JtKiBtZXRob2RzIGFyZSBleGVjdXRlZCIsImJlZm9yZSBhbGwgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuIl0uam9pbigiICIpKSxvKHQuYXR0cmlidXRlcyl8fG4ubG9nKGUrIiByZWdpc3RlcmVkIHdpdGhvdXQgYW4gKmF0dHJpYnV0ZXMqIG9iamVjdC4iKSwiZnVuY3Rpb24iIT10eXBlb2YgdC5zdXBwbHlEZWZhdWx0cyYmbi5sb2coZSsiIHJlZ2lzdGVyZWQgd2l0aG91dCBhICpzdXBwbHlEZWZhdWx0cyogbWV0aG9kLiIpLHIudHJhbnNmb3Jtc1JlZ2lzdHJ5W3QubmFtZV09dCxyLmNvbXBvbmVudHNSZWdpc3RyeSl4KHMsdC5uYW1lKX1mdW5jdGlvbiBtKHQpe3ZhciBlPXQubmFtZSxuPWUuc3BsaXQoIi0iKVswXSxpPXQuZGljdGlvbmFyeSxhPXQuZm9ybWF0LG89aSYmT2JqZWN0LmtleXMoaSkubGVuZ3RoLHM9YSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoLGw9ci5sb2NhbGVSZWdpc3RyeSxjPWxbZV07aWYoY3x8KGxbZV09Yz17fSksbiE9PWUpe3ZhciB1PWxbbl07dXx8KGxbbl09dT17fSksbyYmdS5kaWN0aW9uYXJ5PT09Yy5kaWN0aW9uYXJ5JiYodS5kaWN0aW9uYXJ5PWkpLHMmJnUuZm9ybWF0PT09Yy5mb3JtYXQmJih1LmZvcm1hdD1hKX1vJiYoYy5kaWN0aW9uYXJ5PWkpLHMmJihjLmZvcm1hdD1hKX1mdW5jdGlvbiB2KHQpe2lmKHQubGF5b3V0QXR0cmlidXRlcyl7dmFyIGU9dC5sYXlvdXRBdHRyaWJ1dGVzLl9hcnJheUF0dHJSZWdleHBzO2lmKGUpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspYShyLmxheW91dEFycmF5UmVnZXhlcyxlW25dKX19ZnVuY3Rpb24geSh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYWNlcyl7dmFyIGk9bi50cmFjZXNbZV07aSYmZihyLm1vZHVsZXNbZV0uX21vZHVsZS5hdHRyaWJ1dGVzLGkpfX1mdW5jdGlvbiB4KHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF0uc2NoZW1hO2lmKG4mJm4udHJhbnNmb3Jtcyl7dmFyIGk9bi50cmFuc2Zvcm1zW2VdO2kmJmYoci50cmFuc2Zvcm1zUmVnaXN0cnlbZV0uYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24gYih0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnN1YnBsb3RzKXt2YXIgaT1yLnN1YnBsb3RzUmVnaXN0cnlbZV0sYT1pLmxheW91dEF0dHJpYnV0ZXMsbz0ic3VicGxvdCI9PT1pLmF0dHI/aS5uYW1lOmkuYXR0cjtBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTt2YXIgcz1uLnN1YnBsb3RzW29dO2EmJnMmJmYoYSxzKX19ZnVuY3Rpb24gXyh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJih0PXQudHlwZSksdH1yLm1vZHVsZXM9e30sci5hbGxDYXRlZ29yaWVzPXt9LHIuYWxsVHlwZXM9W10sci5zdWJwbG90c1JlZ2lzdHJ5PXt9LHIudHJhbnNmb3Jtc1JlZ2lzdHJ5PXt9LHIuY29tcG9uZW50c1JlZ2lzdHJ5PXt9LHIubGF5b3V0QXJyYXlDb250YWluZXJzPVtdLHIubGF5b3V0QXJyYXlSZWdleGVzPVtdLHIudHJhY2VMYXlvdXRBdHRyaWJ1dGVzPXt9LHIubG9jYWxlUmVnaXN0cnk9e30sci5hcGlNZXRob2RSZWdpc3RyeT17fSxyLmNvbGxlY3RhYmxlU3VicGxvdFR5cGVzPW51bGwsci5yZWdpc3Rlcj1mdW5jdGlvbih0KXtpZihyLmNvbGxlY3RhYmxlU3VicGxvdFR5cGVzPW51bGwsIXQpdGhyb3cgbmV3IEVycm9yKCJObyBhcmd1bWVudCBwYXNzZWQgdG8gUGxvdGx5LnJlZ2lzdGVyLiIpO3QmJiFBcnJheS5pc0FycmF5KHQpJiYodD1bdF0pO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtb2R1bGUgd2FzIGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkISIpO3N3aXRjaChuLm1vZHVsZVR5cGUpe2Nhc2UidHJhY2UiOnAobik7YnJlYWs7Y2FzZSJ0cmFuc2Zvcm0iOmcobik7YnJlYWs7Y2FzZSJjb21wb25lbnQiOmQobik7YnJlYWs7Y2FzZSJsb2NhbGUiOm0obik7YnJlYWs7Y2FzZSJhcGlNZXRob2QiOnZhciBpPW4ubmFtZTtyLmFwaU1ldGhvZFJlZ2lzdHJ5W2ldPW4uZm47YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbW9kdWxlIHdhcyBhdHRlbXB0ZWQgdG8gYmUgcmVnaXN0ZXJlZCEiKX19fSxyLmdldE1vZHVsZT1mdW5jdGlvbih0KXt2YXIgZT1yLm1vZHVsZXNbXyh0KV07cmV0dXJuISFlJiZlLl9tb2R1bGV9LHIudHJhY2VJcz1mdW5jdGlvbih0LGUpe2lmKCJ2YXJpb3VzIj09PSh0PV8odCkpKXJldHVybiExO3ZhciBpPXIubW9kdWxlc1t0XTtyZXR1cm4gaXx8KHQmJiJhcmVhIiE9PXQmJm4ubG9nKCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSAiK3QrIi4iKSxpPXIubW9kdWxlc1tjLnR5cGUuZGZsdF0pLCEhaS5jYXRlZ29yaWVzW2VdfSxyLmdldFRyYW5zZm9ybUluZGljZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj10LnRyYW5zZm9ybXN8fFtdLGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLnR5cGU9PT1lJiZyLnB1c2goaSk7cmV0dXJuIHJ9LHIuaGFzVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQudHJhbnNmb3Jtc3x8W10sbj0wO248ci5sZW5ndGg7bisrKWlmKHJbbl0udHlwZT09PWUpcmV0dXJuITA7cmV0dXJuITF9LHIuZ2V0Q29tcG9uZW50TWV0aG9kPWZ1bmN0aW9uKHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF07cmV0dXJuIG4mJm5bZV18fGl9LHIuY2FsbD1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXSxlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiByLmFwaU1ldGhvZFJlZ2lzdHJ5W3RdLmFwcGx5KG51bGwsZSl9fSx7Ii4vbGliL2RvbSI6NzM4LCIuL2xpYi9leHRlbmQiOjc0MCwiLi9saWIvaXNfcGxhaW5fb2JqZWN0Ijo3NTEsIi4vbGliL2xvZ2dlcnMiOjc1NCwiLi9saWIvbm9vcCI6NzU5LCIuL2xpYi9wdXNoX3VuaXF1ZSI6NzY0LCIuL3Bsb3RzL2F0dHJpYnV0ZXMiOjc5NSwiLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6ODUzfV0sODgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5IiksaT10KCIuLi9saWIiKSxhPWkuZXh0ZW5kRmxhdCxvPWkuZXh0ZW5kRGVlcDtmdW5jdGlvbiBzKHQpe3ZhciBlO3N3aXRjaCh0KXtjYXNlInRoZW1lc19fdGh1bWIiOmU9e2F1dG9zaXplOiEwLHdpZHRoOjE1MCxoZWlnaHQ6MTUwLHRpdGxlOnt0ZXh0OiIifSxzaG93bGVnZW5kOiExLG1hcmdpbjp7bDo1LHI6NSx0OjUsYjo1LHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7Y2FzZSJ0aHVtYm5haWwiOmU9e3RpdGxlOnt0ZXh0OiIifSxoaWRlc291cmNlczohMCxzaG93bGVnZW5kOiExLGJvcmRlcndpZHRoOjAsYm9yZGVyY29sb3I6IiIsbWFyZ2luOntsOjEscjoxLHQ6MSxiOjEscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztkZWZhdWx0OmU9e319cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7dC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXImJih0PXQuZnJhbWV3b3JrLmdldENvbmZpZygpKTt2YXIgaSxsPXQuZGF0YSxjPXQubGF5b3V0LHU9byhbXSxsKSxoPW8oe30sYyxzKGUudGlsZUNsYXNzKSksZj10Ll9jb250ZXh0fHx7fTtpZihlLndpZHRoJiYoaC53aWR0aD1lLndpZHRoKSxlLmhlaWdodCYmKGguaGVpZ2h0PWUuaGVpZ2h0KSwidGh1bWJuYWlsIj09PWUudGlsZUNsYXNzfHwidGhlbWVzX190aHVtYiI9PT1lLnRpbGVDbGFzcyl7aC5hbm5vdGF0aW9ucz1bXTt2YXIgcD1PYmplY3Qua2V5cyhoKTtmb3Iocj0wO3I8cC5sZW5ndGg7cisrKWk9cFtyXSxbInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdLmluZGV4T2YoaS5zbGljZSgwLDUpKT4tMSYmKGhbcFtyXV0udGl0bGU9e3RleHQ6IiJ9KTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKXt2YXIgZD11W3JdO2Quc2hvd3NjYWxlPSExLGQubWFya2VyJiYoZC5tYXJrZXIuc2hvd3NjYWxlPSExKSxuLnRyYWNlSXMoZCwicGllLWxpa2UiKSYmKGQudGV4dHBvc2l0aW9uPSJub25lIil9fWlmKEFycmF5LmlzQXJyYXkoZS5hbm5vdGF0aW9ucykpZm9yKHI9MDtyPGUuYW5ub3RhdGlvbnMubGVuZ3RoO3IrKyloLmFubm90YXRpb25zLnB1c2goZS5hbm5vdGF0aW9uc1tyXSk7dmFyIGc9T2JqZWN0LmtleXMoaCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaCgvXnNjZW5lXGQqJC8pfSkpO2lmKGcubGVuZ3RoKXt2YXIgbT17fTtmb3IoInRodW1ibmFpbCI9PT1lLnRpbGVDbGFzcyYmKG09e3RpdGxlOnt0ZXh0OiIifSxzaG93YXhlc2xhYmVsczohMSxzaG93dGlja2xhYmVsczohMSxsaW5ldGlja2VuYWJsZTohMX0pLHI9MDtyPGcubGVuZ3RoO3IrKyl7dmFyIHY9aFtnW3JdXTt2LnhheGlzfHwodi54YXhpcz17fSksdi55YXhpc3x8KHYueWF4aXM9e30pLHYuemF4aXN8fCh2LnpheGlzPXt9KSxhKHYueGF4aXMsbSksYSh2LnlheGlzLG0pLGEodi56YXhpcyxtKSx2Ll9zY2VuZT1udWxsfX12YXIgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnRpbGVDbGFzcyYmKHkuY2xhc3NOYW1lPWUudGlsZUNsYXNzKTt2YXIgeD17Z2Q6eSx0ZDp5LGxheW91dDpoLGRhdGE6dSxjb25maWc6e3N0YXRpY1Bsb3Q6dm9pZCAwPT09ZS5zdGF0aWNQbG90fHxlLnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp2b2lkIDA9PT1lLnBsb3RHbFBpeGVsUmF0aW8/MjplLnBsb3RHbFBpeGVsUmF0aW8sZGlzcGxheWxvZ286ZS5kaXNwbGF5bG9nb3x8ITEsc2hvd0xpbms6ZS5zaG93TGlua3x8ITEsc2hvd1RpcHM6ZS5zaG93VGlwc3x8ITEsbWFwYm94QWNjZXNzVG9rZW46Zi5tYXBib3hBY2Nlc3NUb2tlbn19O3JldHVybiJ0cmFuc3BhcmVudCIhPT1lLnNldEJhY2tncm91bmQmJih4LmNvbmZpZy5zZXRCYWNrZ3JvdW5kPWUuc2V0QmFja2dyb3VuZHx8Im9wYXF1ZSIpLHguZ2QuZGVmYXVsdExheW91dD1zKGUudGlsZUNsYXNzKSx4fX0seyIuLi9saWIiOjc1MCwiLi4vcmVnaXN0cnkiOjg4Mn1dLDg4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIiksYT10KCIuL2ZpbGVzYXZlciIpLG89dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0KXx8KHI9bi5nZXRHcmFwaERpdih0KSksKGU9ZXx8e30pLmZvcm1hdD1lLmZvcm1hdHx8InBuZyIsZS53aWR0aD1lLndpZHRofHxudWxsLGUuaGVpZ2h0PWUuaGVpZ2h0fHxudWxsLGUuaW1hZ2VEYXRhT25seT0hMCxuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocyxsKXtyJiZyLl9zbmFwc2hvdEluUHJvZ3Jlc3MmJmwobmV3IEVycm9yKCJTbmFwc2hvdHRpbmcgYWxyZWFkeSBpbiBwcm9ncmVzcy4iKSksbi5pc0lFKCkmJiJzdmciIT09ZS5mb3JtYXQmJmwobmV3IEVycm9yKG8uTVNHX0lFX0JBRF9GT1JNQVQpKSxyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSEwKTt2YXIgYz1pKHQsZSksdT1lLmZpbGVuYW1lfHx0LmZufHwibmV3cGxvdCI7dSs9Ii4iK2UuZm9ybWF0LnJlcGxhY2UoIi0iLCIuIiksYy50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gciYmKHIuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMSksYSh0LHUsZS5mb3JtYXQpfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3ModCl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3ImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLGwodCl9KSl9KSl9fSx7Ii4uL2xpYiI6NzUwLCIuLi9wbG90X2FwaS90b19pbWFnZSI6NzkxLCIuL2ZpbGVzYXZlciI6ODg1LCIuL2hlbHBlcnMiOjg4Nn1dLDg4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG89ImRvd25sb2FkImluIGE7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihzLGwpe3ZhciBjLHU7aWYobi5pc0lFOW9yQmVsb3coKSYmbChuZXcgRXJyb3IoIklFIDwgMTAgdW5zdXBwb3J0ZWQiKSksbi5pc1NhZmFyaSgpKXt2YXIgaD0ic3ZnIj09PXI/IiwiOiI7YmFzZTY0LCI7cmV0dXJuIGkub2N0ZXRTdHJlYW0oaCtlbmNvZGVVUklDb21wb25lbnQodCkpLHMoZSl9cmV0dXJuIG4uaXNJRSgpPyhjPWkuY3JlYXRlQmxvYih0LCJzdmciKSx3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoYyxlKSxjPW51bGwscyhlKSk6bz8oYz1pLmNyZWF0ZUJsb2IodCxyKSx1PWkuY3JlYXRlT2JqZWN0VVJMKGMpLGEuaHJlZj11LGEuZG93bmxvYWQ9ZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpLGkucmV2b2tlT2JqZWN0VVJMKHUpLGM9bnVsbCxzKGUpKTp2b2lkIGwobmV3IEVycm9yKCJkb3dubG9hZCBlcnJvciIpKX0pKX19LHsiLi4vbGliIjo3NTAsIi4vaGVscGVycyI6ODg2fV0sODg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5Iik7ci5nZXREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdC5faGFzJiYodC5faGFzKCJnbDNkIil8fHQuX2hhcygiZ2wyZCIpfHx0Ll9oYXMoIm1hcGJveCIpKT81MDA6MH0sci5nZXRSZWRyYXdGdW5jPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuX2Z1bGxMYXlvdXR8fHt9OyEoZS5faGFzJiZlLl9oYXMoInBvbGFyIikpJiZ0LmRhdGEmJnQuZGF0YVswXSYmdC5kYXRhWzBdLnJ8fG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KX19LHIuZW5jb2RlU1ZHPWZ1bmN0aW9uKHQpe3JldHVybiJkYXRhOmltYWdlL3N2Zyt4bWwsIitlbmNvZGVVUklDb21wb25lbnQodCl9LHIuZW5jb2RlSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4iZGF0YTphcHBsaWNhdGlvbi9qc29uLCIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTt2YXIgaT13aW5kb3cuVVJMfHx3aW5kb3cud2Via2l0VVJMO3IuY3JlYXRlT2JqZWN0VVJMPWZ1bmN0aW9uKHQpe3JldHVybiBpLmNyZWF0ZU9iamVjdFVSTCh0KX0sci5yZXZva2VPYmplY3RVUkw9ZnVuY3Rpb24odCl7cmV0dXJuIGkucmV2b2tlT2JqZWN0VVJMKHQpfSxyLmNyZWF0ZUJsb2I9ZnVuY3Rpb24odCxlKXtpZigic3ZnIj09PWUpcmV0dXJuIG5ldyB3aW5kb3cuQmxvYihbdF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtpZigiZnVsbC1qc29uIj09PWUpcmV0dXJuIG5ldyB3aW5kb3cuQmxvYihbdF0se3R5cGU6ImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCJ9KTt2YXIgcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXlCdWZmZXIoZSksbj1uZXcgVWludDhBcnJheShyKSxpPTA7aTxlO2krKyluW2ldPXQuY2hhckNvZGVBdChpKTtyZXR1cm4gcn0od2luZG93LmF0b2IodCkpO3JldHVybiBuZXcgd2luZG93LkJsb2IoW3JdLHt0eXBlOiJpbWFnZS8iK2V9KX0sci5vY3RldFN0cmVhbT1mdW5jdGlvbih0KXtkb2N1bWVudC5sb2NhdGlvbi5ocmVmPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIrdH0sci5JTUFHRV9VUkxfUFJFRklYPS9eZGF0YTppbWFnZVwvXHcrO2Jhc2U2NCwvLHIuTVNHX0lFX0JBRF9GT1JNQVQ9IlNvcnJ5IElFIGRvZXMgbm90IHN1cHBvcnQgZG93bmxvYWRpbmcgZnJvbSBjYW52YXMuIFRyeSB7Zm9ybWF0OidzdmcnfSBpbnN0ZWFkLiJ9LHsiLi4vcmVnaXN0cnkiOjg4Mn1dLDg4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hlbHBlcnMiKSxpPXtnZXREZWxheTpuLmdldERlbGF5LGdldFJlZHJhd0Z1bmM6bi5nZXRSZWRyYXdGdW5jLGNsb25lOnQoIi4vY2xvbmVwbG90IiksdG9TVkc6dCgiLi90b3N2ZyIpLHN2Z1RvSW1nOnQoIi4vc3ZndG9pbWciKSx0b0ltYWdlOnQoIi4vdG9pbWFnZSIpLGRvd25sb2FkSW1hZ2U6dCgiLi9kb3dubG9hZCIpfTtlLmV4cG9ydHM9aX0seyIuL2Nsb25lcGxvdCI6ODgzLCIuL2Rvd25sb2FkIjo4ODQsIi4vaGVscGVycyI6ODg2LCIuL3N2Z3RvaW1nIjo4ODgsIi4vdG9pbWFnZSI6ODg5LCIuL3Rvc3ZnIjo4OTB9XSw4ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsYT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lbWl0dGVyfHxuZXcgaSxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihpLG8pe3ZhciBzPXdpbmRvdy5JbWFnZSxsPXQuc3ZnLGM9dC5mb3JtYXR8fCJwbmciO2lmKG4uaXNJRSgpJiYic3ZnIiE9PWMpe3ZhciB1PW5ldyBFcnJvcihhLk1TR19JRV9CQURfRk9STUFUKTtyZXR1cm4gbyh1KSx0LnByb21pc2U/cjplLmVtaXQoImVycm9yIix1KX12YXIgaCxmLHA9dC5jYW52YXMsZD10LnNjYWxlfHwxLGc9dC53aWR0aHx8MzAwLG09dC5oZWlnaHR8fDE1MCx2PWQqZyx5PWQqbSx4PXAuZ2V0Q29udGV4dCgiMmQiKSxiPW5ldyBzOyJzdmciPT09Y3x8bi5pc0lFOW9yQmVsb3coKXx8bi5pc1NhZmFyaSgpP2Y9YS5lbmNvZGVTVkcobCk6KGg9YS5jcmVhdGVCbG9iKGwsInN2ZyIpLGY9YS5jcmVhdGVPYmplY3RVUkwoaCkpLHAud2lkdGg9dixwLmhlaWdodD15LGIub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHI7c3dpdGNoKGg9bnVsbCxhLnJldm9rZU9iamVjdFVSTChmKSwic3ZnIiE9PWMmJnguZHJhd0ltYWdlKGIsMCwwLHYseSksYyl7Y2FzZSJqcGVnIjpyPXAudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJwbmciOnI9cC50b0RhdGFVUkwoImltYWdlL3BuZyIpO2JyZWFrO2Nhc2Uid2VicCI6cj1wLnRvRGF0YVVSTCgiaW1hZ2Uvd2VicCIpO2JyZWFrO2Nhc2Uic3ZnIjpyPWY7YnJlYWs7ZGVmYXVsdDp2YXIgbj0iSW1hZ2UgZm9ybWF0IGlzIG5vdCBqcGVnLCBwbmcsIHN2ZyBvciB3ZWJwLiI7aWYobyhuZXcgRXJyb3IobikpLCF0LnByb21pc2UpcmV0dXJuIGUuZW1pdCgiZXJyb3IiLG4pfWkociksdC5wcm9taXNlfHxlLmVtaXQoInN1Y2Nlc3MiLHIpfSxiLm9uZXJyb3I9ZnVuY3Rpb24ocil7aWYoaD1udWxsLGEucmV2b2tlT2JqZWN0VVJMKGYpLG8ociksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KCJlcnJvciIscil9LGIuc3JjPWZ9KSk7cmV0dXJuIHQucHJvbWlzZT9yOmV9fSx7Ii4uL2xpYiI6NzUwLCIuL2hlbHBlcnMiOjg4NixldmVudHM6MTEwfV0sODg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixpPXQoIi4uL3JlZ2lzdHJ5IiksYT10KCIuLi9saWIiKSxvPXQoIi4vaGVscGVycyIpLHM9dCgiLi9jbG9uZXBsb3QiKSxsPXQoIi4vdG9zdmciKSxjPXQoIi4vc3ZndG9pbWciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbix1PXModCx7Zm9ybWF0OiJwbmcifSksaD11LmdkO2guc3R5bGUucG9zaXRpb249ImFic29sdXRlIixoLnN0eWxlLmxlZnQ9Ii01MDAwcHgiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCk7dmFyIGY9by5nZXRSZWRyYXdGdW5jKGgpO3JldHVybiBpLmNhbGwoInBsb3QiLGgsdS5kYXRhLHUubGF5b3V0LHUuY29uZmlnKS50aGVuKGYpLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQ9by5nZXREZWxheShoLl9mdWxsTGF5b3V0KTtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3ZhciB0PWwoaCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLmlkPWEucmFuZHN0cigpLChyPWMoe2Zvcm1hdDplLmZvcm1hdCx3aWR0aDpoLl9mdWxsTGF5b3V0LndpZHRoLGhlaWdodDpoLl9mdWxsTGF5b3V0LmhlaWdodCxjYW52YXM6bixlbWl0dGVyOnIsc3ZnOnR9KSkuY2xlYW49ZnVuY3Rpb24oKXtoJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGgpfX0pLHQpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyLmVtaXQoImVycm9yIix0KX0pKSxyfX0seyIuLi9saWIiOjc1MCwiLi4vcmVnaXN0cnkiOjg4MiwiLi9jbG9uZXBsb3QiOjg4MywiLi9oZWxwZXJzIjo4ODYsIi4vc3ZndG9pbWciOjg4OCwiLi90b3N2ZyI6ODkwLGV2ZW50czoxMTB9XSw4OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2xpYiIpLGE9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGw9LyIvZyxjPW5ldyBSZWdFeHAoJygiVE9CRVNUUklQUEVEKXwoVE9CRVNUUklQUEVEIiknLCJnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxoPXQuX2Z1bGxMYXlvdXQsZj1oLl9wYXBlcixwPWguX3RvcHBhcGVyLGQ9aC53aWR0aCxnPWguaGVpZ2h0O2YuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuY2FsbChhLnNldFJlY3QsMCwwLGQsZykuY2FsbChvLmZpbGwsaC5wYXBlcl9iZ2NvbG9yKTt2YXIgbT1oLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2Zvcih1PTA7dTxtLmxlbmd0aDt1Kyspe3ZhciB2PW1bdV07di50b1NWRyYmdi50b1NWRyh0KX1pZihwKXt2YXIgeT1wLm5vZGUoKS5jaGlsZE5vZGVzLHg9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeSk7Zm9yKHU9MDt1PHgubGVuZ3RoO3UrKyl7dmFyIGI9eFt1XTtiLmNoaWxkTm9kZXMubGVuZ3RoJiZmLm5vZGUoKS5hcHBlbmRDaGlsZChiKX19aWYoaC5fZHJhZ2dlcnMmJmguX2RyYWdnZXJzLnJlbW92ZSgpLGYubm9kZSgpLnN0eWxlLmJhY2tncm91bmQ9IiIsZi5zZWxlY3RBbGwoInRleHQiKS5hdHRyKHsiZGF0YS11bmZvcm1hdHRlZCI6bnVsbCwiZGF0YS1tYXRoIjpudWxsfSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtpZigiaGlkZGVuIiE9PXRoaXMuc3R5bGUudmlzaWJpbGl0eSYmIm5vbmUiIT09dGhpcy5zdHlsZS5kaXNwbGF5KXt0LnN0eWxlKHt2aXNpYmlsaXR5Om51bGwsZGlzcGxheTpudWxsfSk7dmFyIGU9dGhpcy5zdHlsZS5mb250RmFtaWx5O2UmJi0xIT09ZS5pbmRleE9mKCciJykmJnQuc3R5bGUoImZvbnQtZmFtaWx5IixlLnJlcGxhY2UobCwiVE9CRVNUUklQUEVEIikpfWVsc2UgdC5yZW1vdmUoKX0pKSxoLl9ncmFkaWVudFVybFF1ZXJ5UGFydHMpe3ZhciBfPVtdO2Zvcih2YXIgdyBpbiBoLl9ncmFkaWVudFVybFF1ZXJ5UGFydHMpXy5wdXNoKHcpO18ubGVuZ3RoJiZmLnNlbGVjdEFsbChfLmpvaW4oIiwiKSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXRoaXMuc3R5bGUuZmlsbDtlJiYtMSE9PWUuaW5kZXhPZigidXJsKCIpJiZ0LnN0eWxlKCJmaWxsIixlLnJlcGxhY2UobCwiVE9CRVNUUklQUEVEIikpO3ZhciByPXRoaXMuc3R5bGUuc3Ryb2tlO3ImJi0xIT09ci5pbmRleE9mKCJ1cmwoIikmJnQuc3R5bGUoInN0cm9rZSIsci5yZXBsYWNlKGwsIlRPQkVTVFJJUFBFRCIpKX0pKX0icGRmIiE9PWUmJiJlcHMiIT09ZXx8Zi5zZWxlY3RBbGwoIiNNYXRoSmF4X1NWR19nbHlwaHMgcGF0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsMCksZi5ub2RlKCkuc2V0QXR0cmlidXRlTlMocy54bWxucywieG1sbnMiLHMuc3ZnKSxmLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhzLnhtbG5zLCJ4bWxuczp4bGluayIscy54bGluayksInN2ZyI9PT1lJiZyJiYoZi5hdHRyKCJ3aWR0aCIscipkKSxmLmF0dHIoImhlaWdodCIscipnKSxmLmF0dHIoInZpZXdCb3giLCIwIDAgIitkKyIgIitnKSk7dmFyIFQ9KG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcikuc2VyaWFsaXplVG9TdHJpbmcoZi5ub2RlKCkpO3JldHVybiBUPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5zdHlsZSh7ZGlzcGxheToibm9uZSJ9KS5odG1sKCIiKSxyPXQucmVwbGFjZSgvKCZbXjtdKjspL2dpLChmdW5jdGlvbih0KXtyZXR1cm4iJmx0OyI9PT10PyImIzYwOyI6IiZydDsiPT09dD8iJiM2MjsiOi0xIT09dC5pbmRleE9mKCI8Iil8fC0xIT09dC5pbmRleE9mKCI+Iik/IiI6ZS5odG1sKHQpLnRleHQoKX0pKTtyZXR1cm4gZS5yZW1vdmUoKSxyfShUKSxUPShUPVQucmVwbGFjZSgvJig/IVx3Kzt8XCNbMC05XSs7fCBcI3hbMC05QS1GXSs7KS9nLCImYW1wOyIpKS5yZXBsYWNlKGMsIiciKSxpLmlzSUUoKSYmKFQ9KFQ9KFQ9VC5yZXBsYWNlKC8iL2dpLCInIikpLnJlcGxhY2UoLyhcKCcjKShbXiddKikoJ1wpKS9naSwnKCIjJDIiKScpKS5yZXBsYWNlKC8oXFwnKS9naSwnIicpKSxUfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzI2LCIuLi9saWIiOjc1MCxkMzoxNjl9XSw4OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LCJ0eCIpLG4ubWVyZ2VBcnJheShlLmhvdmVydGV4dCx0LCJodHgiKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuLm1lcmdlQXJyYXkoaS5vcGFjaXR5LHQsIm1vIiwhMCksbi5tZXJnZUFycmF5KGkuY29sb3IsdCwibWMiKTt2YXIgYT1pLmxpbmU7YSYmKG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsIm1sYyIpLG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShhLndpZHRoLHQsIm1sdyIpKX19fSx7Ii4uLy4uL2xpYiI6NzUwfV0sODkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxsPXQoIi4vY29uc3RhbnRzIiksYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PXMoe2VkaXRUeXBlOiJjYWxjIixhcnJheU9rOiEwLGNvbG9yRWRpdFR5cGU6InN0eWxlIn0pLGg9Yyh7fSxuLm1hcmtlci5saW5lLndpZHRoLHtkZmx0OjB9KSxmPWMoe3dpZHRoOmgsZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIubGluZSIpKSxwPWMoe2xpbmU6ZixlZGl0VHlwZToiY2FsYyJ9LG8oIm1hcmtlciIpLHtvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsZGZsdDoxLG1pbjowLG1heDoxLGVkaXRUeXBlOiJzdHlsZSJ9fSk7ZS5leHBvcnRzPXt4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHhwZXJpb2Q6bi54cGVyaW9kLHlwZXJpb2Q6bi55cGVyaW9kLHhwZXJpb2QwOm4ueHBlcmlvZDAseXBlcmlvZDA6bi55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50Om4ueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50Om4ueXBlcmlvZGFsaWdubWVudCx0ZXh0Om4udGV4dCx0ZXh0dGVtcGxhdGU6YSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpsLmV2ZW50RGF0YUtleXN9KSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOmwuZXZlbnREYXRhS2V5c30pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoibm9uZSIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGluc2lkZXRleHRhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImVuZCIsIm1pZGRsZSIsInN0YXJ0Il0sZGZsdDoiZW5kIixlZGl0VHlwZToicGxvdCJ9LHRleHRhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJwbG90In0sdGV4dGZvbnQ6Yyh7fSx1LHt9KSxpbnNpZGV0ZXh0Zm9udDpjKHt9LHUse30pLG91dHNpZGV0ZXh0Zm9udDpjKHt9LHUse30pLGNvbnN0cmFpbnRleHQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJib3RoIiwibm9uZSJdLGRmbHQ6ImJvdGgiLGVkaXRUeXBlOiJjYWxjIn0sY2xpcG9uYXhpczpjKHt9LG4uY2xpcG9uYXhpcyx7fSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxiYXNlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6cCxvZmZzZXRncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sYWxpZ25tZW50Z3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxjb2xvcjpuLnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDpuLnNlbGVjdGVkLnRleHRmb250LGVkaXRUeXBlOiJzdHlsZSJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksY29sb3I6bi51bnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDpuLnVuc2VsZWN0ZWQudGV4dGZvbnQsZWRpdFR5cGU6InN0eWxlIn0scjpuLnIsdDpuLnQsX2RlcHJlY2F0ZWQ6e2JhcmRpcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZWRpdFR5cGU6ImNhbGMiLHZhbHVlczpbInYiLCJoIl19fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYyMiwiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgyNywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODc3LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExNTgsIi4vY29uc3RhbnRzIjo4OTR9XSw4OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIikscz10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLGw9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsdSxoLGY9bi5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLHA9bi5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLGQ9e21zVVRDOiEoIWUuYmFzZSYmMCE9PWUuYmFzZSl9OyJoIj09PWUub3JpZW50YXRpb24/KHI9Zi5tYWtlQ2FsY2RhdGEoZSwieCIsZCksdT1wLm1ha2VDYWxjZGF0YShlLCJ5IiksYz1pKGUscCwieSIsdSksaD0hIWUueXBlcmlvZGFsaWdubWVudCk6KHI9cC5tYWtlQ2FsY2RhdGEoZSwieSIsZCksdT1mLm1ha2VDYWxjZGF0YShlLCJ4IiksYz1pKGUsZiwieCIsdSksaD0hIWUueHBlcmlvZGFsaWdubWVudCk7Zm9yKHZhciBnPU1hdGgubWluKGMubGVuZ3RoLHIubGVuZ3RoKSxtPW5ldyBBcnJheShnKSx2PTA7djxnO3YrKyltW3ZdPXtwOmNbdl0sczpyW3ZdfSxoJiYobVt2XS5vcmlnX3A9dVt2XSksZS5pZHMmJihtW3ZdLmlkPVN0cmluZyhlLmlkc1t2XSkpO3JldHVybiBhKGUsIm1hcmtlciIpJiZvKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxhKGUsIm1hcmtlci5saW5lIikmJm8odCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIubGluZSIsY0xldHRlcjoiYyJ9KSxzKG0sZSksbChtLGUpLG19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MjMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2MjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjc5NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE2MCwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjg5MX1dLDg5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1RFWFRQQUQ6MyxldmVudERhdGFLZXlzOlsidmFsdWUiLCJsYWJlbCJdfX0se31dLDg5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLmdldEF4aXNHcm91cCxjPXQoIi4vc2lldmUuanMiKTtmdW5jdGlvbiB1KHQsZSxyLG8sdSl7aWYoby5sZW5ndGgpe3ZhciBiLF8sdyxUO3N3aXRjaChmdW5jdGlvbih0LGUpe3ZhciByLGE7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG8scz1lW3JdLGw9c1swXS50cmFjZSxjPSJmdW5uZWwiPT09bC50eXBlP2wuX2Jhc2U6bC5iYXNlLHU9ImgiPT09bC5vcmllbnRhdGlvbj9sLnhjYWxlbmRhcjpsLnljYWxlbmRhcixoPSJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT9mdW5jdGlvbigpe3JldHVybiBudWxsfTp0LmQyYztpZihpKGMpKXtmb3IoYT0wO2E8TWF0aC5taW4oYy5sZW5ndGgscy5sZW5ndGgpO2ErKylvPWgoY1thXSwwLHUpLG4obyk/KHNbYV0uYj0rbyxzW2FdLmhhc0I9MSk6c1thXS5iPTA7Zm9yKDthPHMubGVuZ3RoO2ErKylzW2FdLmI9MH1lbHNle289aChjLDAsdSk7dmFyIGY9bihvKTtmb3Iobz1mP286MCxhPTA7YTxzLmxlbmd0aDthKyspc1thXS5iPW8sZiYmKHNbYV0uaGFzQj0xKX19fShyLG8pLHUubW9kZSl7Y2FzZSJvdmVybGF5IjpoKGUscixvLHUpO2JyZWFrO2Nhc2UiZ3JvdXAiOmZvcihiPVtdLF89W10sdz0wO3c8by5sZW5ndGg7dysrKXZvaWQgMD09PShUPW9bd10pWzBdLnRyYWNlLm9mZnNldD9fLnB1c2goVCk6Yi5wdXNoKFQpO18ubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPW5ldyBjKG4se3NlcE5lZ1ZhbDohMSxvdmVybGFwTm9NZXJnZTohaS5ub3JtfSk7KGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10Ll9mdWxsTGF5b3V0LGE9ci5wb3NpdGlvbnMsbz1yLmRpc3RpbmN0UG9zaXRpb25zLHM9ci5taW5EaWZmLGM9ci50cmFjZXMsdT1jLmxlbmd0aCxoPWEubGVuZ3RoIT09by5sZW5ndGgsZj1zKigxLW4uZ2FwKSxtPWwoaSxlLl9pZCkrY1swXVswXS50cmFjZS5vcmllbnRhdGlvbix2PWkuX2FsaWdubWVudE9wdHNbbV18fHt9LHk9MDt5PHU7eSsrKXt2YXIgeCxiLF89Y1t5XSx3PV9bMF0udHJhY2UsVD12W3cuYWxpZ25tZW50Z3JvdXBdfHx7fSxrPU9iamVjdC5rZXlzKFQub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLE09KHg9az9mL2s6aD9mL3U6ZikqKDEtKG4uZ3JvdXBnYXB8fDApKTtiPWs/KCgyKncuX29mZnNldEluZGV4KzEtaykqeC1NKS8yOmg/KCgyKnkrMS11KSp4LU0pLzI6LU0vMjt2YXIgQT1fWzBdLnQ7QS5iYXJ3aWR0aD1NLEEucG9mZnNldD1iLEEuYmFyZ3JvdXB3aWR0aD1mLEEuYmFyZGVsdGE9c31yLmJpbldpZHRoPWNbMF1bMF0udC5iYXJ3aWR0aC8xMDAscChyKSxkKGUsciksZyhlLHIsaCl9KSh0LGUsbyxpKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC50cmFjZXMscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO2lmKHZvaWQgMD09PW5bMF0udHJhY2UuYmFzZSlmb3IodmFyIGk9bmV3IGMoW25dLHtzZXBOZWdWYWw6ITAsb3ZlcmxhcE5vTWVyZ2U6ITB9KSxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBzPW5bb107aWYocy5wIT09YSl7dmFyIGw9aS5wdXQocy5wLHMuYitzLnMpO2wmJihzLmI9bCl9fX19KG8pLGkubm9ybT8odihvKSx5KHIsbyxpKSk6bShyLG8pfSh0LGUscixfLHUpLGIubGVuZ3RoJiZoKGUscixiLHUpO2JyZWFrO2Nhc2Uic3RhY2siOmNhc2UicmVsYXRpdmUiOmZvcihiPVtdLF89W10sdz0wO3c8by5sZW5ndGg7dysrKXZvaWQgMD09PShUPW9bd10pWzBdLnRyYWNlLmJhc2U/Xy5wdXNoKFQpOmIucHVzaChUKTtfLmxlbmd0aCYmZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1uZXcgYyhuLHtzZXBOZWdWYWw6InJlbGF0aXZlIj09PWkubW9kZSxvdmVybGFwTm9NZXJnZTohKGkubm9ybXx8InN0YWNrIj09PWkubW9kZXx8InJlbGF0aXZlIj09PWkubW9kZSl9KTtmKGUsbyxpKSxmdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGwsYyx1LGg9eCh0KSxmPWUudHJhY2VzO2ZvcihsPTA7bDxmLmxlbmd0aDtsKyspaWYobj1mW2xdLCJmdW5uZWwiPT09KGk9blswXS50cmFjZSkudHlwZSlmb3IoYz0wO2M8bi5sZW5ndGg7YysrKSh1PW5bY10pLnMhPT1hJiZlLnB1dCh1LnAsLS41KnUucyk7Zm9yKGw9MDtsPGYubGVuZ3RoO2wrKyl7bj1mW2xdLGk9blswXS50cmFjZSxvPSJmdW5uZWwiPT09aS50eXBlO3ZhciBwPVtdO2ZvcihjPTA7YzxuLmxlbmd0aDtjKyspaWYoKHU9bltjXSkucyE9PWEpe3ZhciBkO2Q9bz91LnM6dS5zK3UuYjt2YXIgZz1lLnB1dCh1LnAsZCksbT1nK2Q7dS5iPWcsdVtoXT1tLHIubm9ybXx8KHAucHVzaChtKSx1Lmhhc0ImJnAucHVzaChnKSl9ci5ub3JtfHwoaS5fZXh0cmVtZXNbdC5faWRdPXMuZmluZEV4dHJlbWVzKHQscCx7dG96ZXJvOiEwLHBhZGRlZDohMH0pKX19KHIsbyxpKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKylmb3IodmFyIHU9bltsXSxoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBwPXVbaF07aWYocC5zIT09YSlwLmIrcC5zPT09by5nZXQocC5wLHAucykmJihwLl9vdXRtb3N0PSEwKX1pLm5vcm0mJnkocixvLGkpfSgwLGUscixfLHUpLGIubGVuZ3RoJiZoKGUscixiLHUpfSFmdW5jdGlvbih0LGUpe3ZhciByLGksYSxvPXgoZSkscz17fSxsPTEvMCxjPS0xLzA7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylmb3IoYT10W3JdLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIHU9YVtpXS5wO24odSkmJihsPU1hdGgubWluKGwsdSksYz1NYXRoLm1heChjLHUpKX12YXIgaD0xZTQvKGMtbCksZj1zLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZChoKih0LWwpKSl9O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspeyhhPXRbcl0pWzBdLnQuZXh0ZW50cz1zO3ZhciBwPWFbMF0udC5wb2Zmc2V0LGQ9QXJyYXkuaXNBcnJheShwKTtmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgZz1hW2ldLG09Z1tvXS1nLncvMjtpZihuKG0pKXt2YXIgdj1nW29dK2cudy8yLHk9ZihnLnApO3NbeV0/c1t5XT1bTWF0aC5taW4obSxzW3ldWzBdKSxNYXRoLm1heCh2LHNbeV1bMV0pXTpzW3ldPVttLHZdfWcucDA9Zy5wKyhkP3BbaV06cCksZy5wMT1nLnAwK2cudyxnLnMwPWcuYixnLnMxPWcuczArZy5zfX19KG8sZSl9fWZ1bmN0aW9uIGgodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz1uZXcgYyhbYV0se3VuaXRNaW5EaWZmOm4ueENhdHx8bi55Q2F0LHNlcE5lZ1ZhbDohMSxvdmVybGFwTm9NZXJnZTohbi5ub3JtfSk7Zih0LG8sbiksbi5ub3JtPyh2KG8pLHkoZSxvLG4pKTptKGUsbyl9fWZ1bmN0aW9uIGYodCxlLHIpe2Zvcih2YXIgbj1lLm1pbkRpZmYsaT1lLnRyYWNlcyxhPW4qKDEtci5nYXApLG89YSooMS0oci5ncm91cGdhcHx8MCkpLHM9LW8vMixsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciBjPWlbbF1bMF0udDtjLmJhcndpZHRoPW8sYy5wb2Zmc2V0PXMsYy5iYXJncm91cHdpZHRoPWEsYy5iYXJkZWx0YT1ufWUuYmluV2lkdGg9aVswXVswXS50LmJhcndpZHRoLzEwMCxwKGUpLGQodCxlKSxnKHQsZSl9ZnVuY3Rpb24gcCh0KXt2YXIgZSxyLGE9dC50cmFjZXM7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIG8scz1hW2VdLGw9c1swXSxjPWwudHJhY2UsdT1sLnQsaD1jLl9vZmZzZXR8fGMub2Zmc2V0LGY9dS5wb2Zmc2V0O2lmKGkoaCkpe2ZvcihvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGgsMCxzLmxlbmd0aCkscj0wO3I8by5sZW5ndGg7cisrKW4ob1tyXSl8fChvW3JdPWYpO2ZvcihyPW8ubGVuZ3RoO3I8cy5sZW5ndGg7cisrKW8ucHVzaChmKTt1LnBvZmZzZXQ9b31lbHNlIHZvaWQgMCE9PWgmJih1LnBvZmZzZXQ9aCk7dmFyIHA9Yy5fd2lkdGh8fGMud2lkdGgsZD11LmJhcndpZHRoO2lmKGkocCkpe3ZhciBnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHAsMCxzLmxlbmd0aCk7Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKyluKGdbcl0pfHwoZ1tyXT1kKTtmb3Iocj1nLmxlbmd0aDtyPHMubGVuZ3RoO3IrKylnLnB1c2goZCk7aWYodS5iYXJ3aWR0aD1nLHZvaWQgMD09PWgpe2ZvcihvPVtdLHI9MDtyPHMubGVuZ3RoO3IrKylvLnB1c2goZisoZC1nW3JdKS8yKTt1LnBvZmZzZXQ9b319ZWxzZSB2b2lkIDAhPT1wJiYodS5iYXJ3aWR0aD1wLHZvaWQgMD09PWgmJih1LnBvZmZzZXQ9ZisoZC1wKS8yKSl9fWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9ZS50cmFjZXMsbj14KHQpLGk9MDtpPHIubGVuZ3RoO2krKylmb3IodmFyIGE9cltpXSxvPWFbMF0udCxzPW8ucG9mZnNldCxsPUFycmF5LmlzQXJyYXkocyksYz1vLmJhcndpZHRoLHU9QXJyYXkuaXNBcnJheShjKSxoPTA7aDxhLmxlbmd0aDtoKyspe3ZhciBmPWFbaF0scD1mLnc9dT9jW2hdOmM7ZltuXT1mLnArKGw/c1toXTpzKStwLzJ9fWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuPWUudHJhY2VzLGk9ZS5taW5EaWZmLzI7cy5taW5EdGljayh0LGUubWluRGlmZixlLmRpc3RpbmN0UG9zaXRpb25zWzBdLHIpO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbyxsLGMsdSxoPW5bYV0sZj1oWzBdLHA9Zi50cmFjZSxkPVtdO2Zvcih1PTA7dTxoLmxlbmd0aDt1KyspbD0obz1oW3VdKS5wLWksYz1vLnAraSxkLnB1c2gobCxjKTtpZihwLndpZHRofHxwLm9mZnNldCl7dmFyIGc9Zi50LG09Zy5wb2Zmc2V0LHY9Zy5iYXJ3aWR0aCx5PUFycmF5LmlzQXJyYXkobSkseD1BcnJheS5pc0FycmF5KHYpO2Zvcih1PTA7dTxoLmxlbmd0aDt1Kyspe289aFt1XTt2YXIgYj15P21bdV06bSxfPXg/dlt1XTp2O2M9KGw9by5wK2IpK18sZC5wdXNoKGwsYyl9fXAuX2V4dHJlbWVzW3QuX2lkXT1zLmZpbmRFeHRyZW1lcyh0LGQse3BhZGRlZDohMX0pfX1mdW5jdGlvbiBtKHQsZSl7Zm9yKHZhciByPWUudHJhY2VzLG49eCh0KSxpPTA7aTxyLmxlbmd0aDtpKyspe2Zvcih2YXIgYT1yW2ldLG89YVswXS50cmFjZSxsPVtdLGM9ITEsdT0wO3U8YS5sZW5ndGg7dSsrKXt2YXIgaD1hW3VdLGY9aC5iLHA9ZitoLnM7aFtuXT1wLGwucHVzaChwKSxoLmhhc0ImJmwucHVzaChmKSxoLmhhc0ImJmguYnx8KGM9ITApfW8uX2V4dHJlbWVzW3QuX2lkXT1zLmZpbmRFeHRyZW1lcyh0LGwse3RvemVybzpjLHBhZGRlZDohMH0pfX1mdW5jdGlvbiB2KHQpe2Zvcih2YXIgZT10LnRyYWNlcyxyPTA7cjxlLmxlbmd0aDtyKyspZm9yKHZhciBuPWVbcl0saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO28ucyE9PWEmJnQucHV0KG8ucCxvLmIrby5zKX19ZnVuY3Rpb24geSh0LGUscil7dmFyIGk9ZS50cmFjZXMsbz14KHQpLGw9ImZyYWN0aW9uIj09PXIubm9ybT8xOjEwMCxjPWwvMWU5LHU9dC5sMmModC5jMmwoMCkpLGg9InN0YWNrIj09PXIubW9kZT9sOnU7ZnVuY3Rpb24gZihlKXtyZXR1cm4gbih0LmMybChlKSkmJihlPHUtY3x8ZT5oK2N8fCFuKHUpKX1mb3IodmFyIHA9MDtwPGkubGVuZ3RoO3ArKyl7Zm9yKHZhciBkPWlbcF0sZz1kWzBdLnRyYWNlLG09W10sdj0hMSx5PSExLGI9MDtiPGQubGVuZ3RoO2IrKyl7dmFyIF89ZFtiXTtpZihfLnMhPT1hKXt2YXIgdz1NYXRoLmFicyhsL2UuZ2V0KF8ucCxfLnMpKTtfLmIqPXcsXy5zKj13O3ZhciBUPV8uYixrPVQrXy5zO19bb109ayxtLnB1c2goaykseT15fHxmKGspLF8uaGFzQiYmKG0ucHVzaChUKSx5PXl8fGYoVCkpLF8uaGFzQiYmXy5ifHwodj0hMCl9fWcuX2V4dHJlbWVzW3QuX2lkXT1zLmZpbmRFeHRyZW1lcyh0LG0se3RvemVybzp2LHBhZGRlZDp5fSl9fWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQuX2lkLmNoYXJBdCgwKX1lLmV4cG9ydHM9e2Nyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUueGF4aXMsbj1lLnlheGlzLGk9dC5fZnVsbExheW91dCxhPXQuX2Z1bGxEYXRhLHM9dC5jYWxjZGF0YSxsPVtdLGM9W10saD0wO2g8YS5sZW5ndGg7aCsrKXt2YXIgZj1hW2hdO2lmKCEwPT09Zi52aXNpYmxlJiZvLnRyYWNlSXMoZiwiYmFyIikmJmYueGF4aXM9PT1yLl9pZCYmZi55YXhpcz09PW4uX2lkJiYoImgiPT09Zi5vcmllbnRhdGlvbj9sLnB1c2goc1toXSk6Yy5wdXNoKHNbaF0pLGYuX2NvbXB1dGVQaCkpZm9yKHZhciBwPXQuY2FsY2RhdGFbaF0sZD0wO2Q8cC5sZW5ndGg7ZCsrKSJmdW5jdGlvbiI9PXR5cGVvZiBwW2RdLnBoMCYmKHBbZF0ucGgwPXBbZF0ucGgwKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBwW2RdLnBoMSYmKHBbZF0ucGgxPXBbZF0ucGgxKCkpfXZhciBnPXt4Q2F0OiJjYXRlZ29yeSI9PT1yLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXIudHlwZSx5Q2F0OiJjYXRlZ29yeSI9PT1uLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PW4udHlwZSxtb2RlOmkuYmFybW9kZSxub3JtOmkuYmFybm9ybSxnYXA6aS5iYXJnYXAsZ3JvdXBnYXA6aS5iYXJncm91cGdhcH07dSh0LHIsbixjLGcpLHUodCxuLHIsbCxnKX0sc2V0R3JvdXBQb3NpdGlvbnM6dX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MDIsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4vc2lldmUuanMiOjkwNSwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDg5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLGw9dCgiLi9zdHlsZV9kZWZhdWx0cyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikuZ2V0QXhpc0dyb3VwLHU9dCgiLi9hdHRyaWJ1dGVzIiksaD1uLmNvZXJjZUZvbnQ7ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT1lLm9yaWVudGF0aW9uLGE9ZVt7djoieCIsaDoieSJ9W2ldKyJheGlzIl0sbz1jKHIsYSkraSxzPXIuX2FsaWdubWVudE9wdHN8fHt9LGw9bigiYWxpZ25tZW50Z3JvdXAiKSx1PXNbb107dXx8KHU9c1tvXT17fSk7dmFyIGg9dVtsXTtoP2gudHJhY2VzLnB1c2goZSk6aD11W2xdPXt0cmFjZXM6W2VdLGFsaWdubWVudEluZGV4Ok9iamVjdC5rZXlzKHUpLmxlbmd0aCxvZmZzZXRHcm91cHM6e319O3ZhciBmPW4oIm9mZnNldGdyb3VwIikscD1oLm9mZnNldEdyb3VwcyxkPXBbZl07ZiYmKGR8fChkPXBbZl09e29mZnNldEluZGV4Ok9iamVjdC5rZXlzKHApLmxlbmd0aH0pLGUuX29mZnNldEluZGV4PWQub2Zmc2V0SW5kZXgpfWZ1bmN0aW9uIHAodCxlLHIsaSxhLG8pe3ZhciBzPSEoITE9PT0obz1vfHx7fSkubW9kdWxlSGFzU2VsZWN0ZWQpLGw9ISghMT09PW8ubW9kdWxlSGFzVW5zZWxlY3RlZCksYz0hKCExPT09by5tb2R1bGVIYXNDb25zdHJhaW4pLHU9ISghMT09PW8ubW9kdWxlSGFzQ2xpcG9uYXhpcyksZj0hKCExPT09by5tb2R1bGVIYXNUZXh0YW5nbGUpLHA9ISghMT09PW8ubW9kdWxlSGFzSW5zaWRlYW5jaG9yKSxkPSEhby5oYXNQYXRoYmFyLGc9QXJyYXkuaXNBcnJheShhKXx8ImF1dG8iPT09YSxtPWd8fCJpbnNpZGUiPT09YSx2PWd8fCJvdXRzaWRlIj09PWE7aWYobXx8dil7dmFyIHk9aChpLCJ0ZXh0Zm9udCIsci5mb250KSx4PW4uZXh0ZW5kRmxhdCh7fSx5KSxiPSEodC50ZXh0Zm9udCYmdC50ZXh0Zm9udC5jb2xvcik7aWYoYiYmZGVsZXRlIHguY29sb3IsaChpLCJpbnNpZGV0ZXh0Zm9udCIseCksZCl7dmFyIF89bi5leHRlbmRGbGF0KHt9LHkpO2ImJmRlbGV0ZSBfLmNvbG9yLGgoaSwicGF0aGJhci50ZXh0Zm9udCIsXyl9diYmaChpLCJvdXRzaWRldGV4dGZvbnQiLHkpLHMmJmkoInNlbGVjdGVkLnRleHRmb250LmNvbG9yIiksbCYmaSgidW5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpLGMmJmkoImNvbnN0cmFpbnRleHQiKSx1JiZpKCJjbGlwb25heGlzIiksZiYmaSgidGV4dGFuZ2xlIiksaSgidGV4dHRlbXBsYXRlIil9bSYmcCYmaSgiaW5zaWRldGV4dGFuY2hvciIpfWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gaChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsdSxyLGkpfWlmKG8odCxlLGMsaCkpe3ModCxlLGMsaCksaCgib3JpZW50YXRpb24iLGUueCYmIWUueT8iaCI6InYiKSxoKCJiYXNlIiksaCgib2Zmc2V0IiksaCgid2lkdGgiKSxoKCJ0ZXh0IiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBmPWgoInRleHRwb3NpdGlvbiIpO3AodCxlLGMsaCxmLHttb2R1bGVIYXNTZWxlY3RlZDohMCxtb2R1bGVIYXNVbnNlbGVjdGVkOiEwLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSxsKHQsZSxoLHIsYyk7dmFyIGQ9KGUubWFya2VyLmxpbmV8fHt9KS5jb2xvcixnPWEuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO2codCxlLGR8fGkuZGVmYXVsdExpbmUse2F4aXM6InkifSksZyh0LGUsZHx8aS5kZWZhdWx0TGluZSx7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxoKX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5jb2VyY2Uoci5faW5wdXQscix1LHQpfWlmKCJncm91cCI9PT1lLmJhcm1vZGUpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspImJhciI9PT0ocj10W2FdKS50eXBlJiYoci5faW5wdXQsZigwLHIsZSxpKSl9LGhhbmRsZUdyb3VwaW5nRGVmYXVsdHM6ZixoYW5kbGVUZXh0OnB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODAyLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6MTE3OCwiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6MTE4NSwiLi9hdHRyaWJ1dGVzIjo4OTIsIi4vc3R5bGVfZGVmYXVsdHMiOjkwN31dLDg5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0Lng9InhWYWwiaW4gZT9lLnhWYWw6ZS54LHQueT0ieVZhbCJpbiBlP2UueVZhbDplLnksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksImgiPT09ci5vcmllbnRhdGlvbj8odC5sYWJlbD10LnksdC52YWx1ZT10LngpOih0LmxhYmVsPXQueCx0LnZhbHVlPXQueSksdH19LHt9XSw4OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ci5jb2VyY2VTdHJpbmc9ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoZXx8IXQubm9CbGFuaylyZXR1cm4gZX1lbHNlIGlmKCgibnVtYmVyIj09dHlwZW9mIGV8fCEwPT09ZSkmJiF0LnN0cmljdClyZXR1cm4gU3RyaW5nKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmNvZXJjZU51bWJlcj1mdW5jdGlvbih0LGUscil7aWYobihlKSl7ZT0rZTt2YXIgaT10Lm1pbixhPXQubWF4O2lmKCEodm9pZCAwIT09aSYmZTxpfHx2b2lkIDAhPT1hJiZlPmEpKXJldHVybiBlfXJldHVybiB2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmNvZXJjZUNvbG9yPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaShlKS5pc1ZhbGlkKCk/ZTp2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmNvZXJjZUVudW1lcmF0ZWQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmNvZXJjZU51bWJlciYmKGU9K2UpLC0xIT09dC52YWx1ZXMuaW5kZXhPZihlKT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuZ2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9lPHQubGVuZ3RoJiYocj10W2VdKTpyPXQscn0sci5nZXRMaW5lV2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMDxlLm1sdz9lLm1sdzphKHQubWFya2VyLmxpbmUud2lkdGgpPzA6dC5tYXJrZXIubGluZS53aWR0aH19LHsiLi4vLi4vbGliIjo3NTAsImZhc3QtaXNudW1lcmljIjoyNDEsdGlueWNvbG9yMjo1NDh9XSw4OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2xpYiIpLmZpbGxUZXh0LHM9dCgiLi9oZWxwZXJzIikuZ2V0TGluZVdpZHRoLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dCxjPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gdSh0LGUscixpKXt2YXIgYSxzLHUsaCxmLHAsZCxnPXQuY2QsbT1nWzBdLnRyYWNlLHY9Z1swXS50LHk9ImNsb3Nlc3QiPT09aSx4PSJ3YXRlcmZhbGwiPT09bS50eXBlLGI9dC5tYXhIb3ZlckRpc3RhbmNlO2Z1bmN0aW9uIF8odCl7cmV0dXJuIHRbdV0tdC53LzJ9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gdFt1XSt0LncvMn12YXIgVD15P186ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKF8odCksdC5wLXYuYmFyZGVsdGEvMil9LGs9eT93OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh3KHQpLHQucCt2LmJhcmRlbHRhLzIpfTtmdW5jdGlvbiBNKHQsZSl7cmV0dXJuIG4uaW5ib3godC1hLGUtYSxiK01hdGgubWluKDEsTWF0aC5hYnMoZS10KS9kKS0xKX1mdW5jdGlvbiBBKHQpe3JldHVybiBNKFQodCksayh0KSl9ZnVuY3Rpb24gUyh0KXt2YXIgZT1zLHI9dC5iLGk9dFtoXTtpZih4KXt2YXIgYT1NYXRoLmFicyh0LnJhd1MpfHwwO2U+MD9pKz1hOmU8MCYmKGktPWEpfXJldHVybiBuLmluYm94KHItZSxpLWUsYisoaS1lKS8oaS1yKS0xKX0iaCI9PT1tLm9yaWVudGF0aW9uPyhhPXIscz1lLHU9InkiLGg9IngiLGY9UyxwPUEpOihhPWUscz1yLHU9IngiLGg9InkiLHA9UyxmPUEpO3ZhciBFPXRbdSsiYSJdLEM9dFtoKyJhIl07ZD1NYXRoLmFicyhFLnIyYyhFLnJhbmdlWzFdKS1FLnIyYyhFLnJhbmdlWzBdKSk7dmFyIEw9bi5nZXREaXN0YW5jZUZ1bmN0aW9uKGksZixwLChmdW5jdGlvbih0KXtyZXR1cm4oZih0KStwKHQpKS8yfSkpO2lmKG4uZ2V0Q2xvc2VzdChnLEwsdCksITEhPT10LmluZGV4JiZnW3QuaW5kZXhdLnAhPT1jKXt5fHwoVD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oXyh0KSx0LnAtdi5iYXJncm91cHdpZHRoLzIpfSxrPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh3KHQpLHQucCt2LmJhcmdyb3Vwd2lkdGgvMil9KTt2YXIgUD1nW3QuaW5kZXhdLEk9bS5iYXNlP1AuYitQLnM6UC5zO3RbaCsiMCJdPXRbaCsiMSJdPUMuYzJwKFBbaF0sITApLHRbaCsiTGFiZWxWYWwiXT1JO3ZhciB6PXYuZXh0ZW50c1t2LmV4dGVudHMucm91bmQoUC5wKV07dFt1KyIwIl09RS5jMnAoeT9UKFApOnpbMF0sITApLHRbdSsiMSJdPUUuYzJwKHk/ayhQKTp6WzFdLCEwKTt2YXIgTz12b2lkIDAhPT1QLm9yaWdfcDtyZXR1cm4gdFt1KyJMYWJlbFZhbCJdPU8/UC5vcmlnX3A6UC5wLHQubGFiZWxMYWJlbD1sKEUsdFt1KyJMYWJlbFZhbCJdKSx0LnZhbHVlTGFiZWw9bChDLHRbaCsiTGFiZWxWYWwiXSksdC5iYXNlTGFiZWw9bChDLFAuYiksdC5zcGlrZURpc3RhbmNlPShTKFApK2Z1bmN0aW9uKHQpe3JldHVybiBNKF8odCksdyh0KSl9KFApKS8yLWIsdFt1KyJTcGlrZSJdPUUuYzJwKFAucCwhMCksbyhQLG0sdCksdC5ob3ZlcnRlbXBsYXRlPW0uaG92ZXJ0ZW1wbGF0ZSx0fX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9ZS5tY2N8fHQubWFya2VyLmNvbG9yLG49ZS5tbGNjfHx0Lm1hcmtlci5saW5lLmNvbG9yLGk9cyh0LGUpO3JldHVybiBhLm9wYWNpdHkocik/cjphLm9wYWNpdHkobikmJmk/bjp2b2lkIDB9ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgYT11KHQsZSxyLG4pO2lmKGEpe3ZhciBvPWEuY2Qscz1vWzBdLnRyYWNlLGw9b1thLmluZGV4XTtyZXR1cm4gYS5jb2xvcj1oKHMsbCksaS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsImhvdmVySW5mbyIpKGwscyxhKSxbYV19fSxob3Zlck9uQmFyczp1LGdldFRyYWNlQ29sb3I6aH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTUsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4vaGVscGVycyI6ODk4fV0sOTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLmNyb3NzVHJhY2VDYWxjLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksYXJyYXlzVG9DYWxjZGF0YTp0KCIuL2FycmF5c190b19jYWxjZGF0YSIpLHBsb3Q6dCgiLi9wbG90IikucGxvdCxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJiYXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJiYXItbGlrZSIsImNhcnRlc2lhbiIsInN2ZyIsImJhciIsIm9yaWVudGVkIiwiZXJyb3JCYXJzT0siLCJzaG93TGVnZW5kIiwiem9vbVNjYWxlIl0sYW5pbWF0YWJsZTohMCxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjgxMiwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjExNzYsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo4OTEsIi4vYXR0cmlidXRlcyI6ODkyLCIuL2NhbGMiOjg5MywiLi9jcm9zc190cmFjZV9jYWxjIjo4OTUsIi4vZGVmYXVsdHMiOjg5NiwiLi9ldmVudF9kYXRhIjo4OTcsIi4vaG92ZXIiOjg5OSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTAxLCIuL2xheW91dF9kZWZhdWx0cyI6OTAyLCIuL3Bsb3QiOjkwMywiLi9zZWxlY3QiOjkwNCwiLi9zdHlsZSI6OTA2fV0sOTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJncm91cCIsIm92ZXJsYXkiLCJyZWxhdGl2ZSJdLGRmbHQ6Imdyb3VwIixlZGl0VHlwZToiY2FsYyJ9LGJhcm5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsImZyYWN0aW9uIiwicGVyY2VudCJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxiYXJnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSxiYXJncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw5MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIHMocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLG8scixuKX1mb3IodmFyIGw9ITEsYz0hMSx1PSExLGg9e30sZj1zKCJiYXJtb2RlIikscD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgZD1yW3BdO2lmKG4udHJhY2VJcyhkLCJiYXIiKSYmZC52aXNpYmxlKXtpZihsPSEwLCJncm91cCI9PT1mKXt2YXIgZz1kLnhheGlzK2QueWF4aXM7aFtnXSYmKHU9ITApLGhbZ109ITB9aWYoZC52aXNpYmxlJiYiaGlzdG9ncmFtIj09PWQudHlwZSkiY2F0ZWdvcnkiIT09aS5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LGRbInYiPT09ZC5vcmllbnRhdGlvbj8ieGF4aXMiOiJ5YXhpcyJdKS50eXBlJiYoYz0hMCl9fWw/KCJvdmVybGF5IiE9PWYmJnMoImJhcm5vcm0iKSxzKCJiYXJnYXAiLGMmJiF1PzA6LjIpLHMoImJhcmdyb3VwZ2FwIikpOmRlbGV0ZSBlLmJhcm1vZGV9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5MDF9XSw5MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi8uLi9yZWdpc3RyeSIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS50aWNrVGV4dCxoPXQoIi4vdW5pZm9ybV90ZXh0IiksZj1oLnJlY29yZE1pblRleHRTaXplLHA9aC5jbGVhck1pblRleHRTaXplLGQ9dCgiLi9zdHlsZSIpLGc9dCgiLi9oZWxwZXJzIiksbT10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi9hdHRyaWJ1dGVzIikseT12LnRleHQseD12LnRleHRwb3NpdGlvbixiPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxfPW0uVEVYVFBBRDtmdW5jdGlvbiB3KHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIFQodCl7aWYodC5pZHMpcmV0dXJuIHd9ZnVuY3Rpb24gayh0LGUpe3JldHVybiB0PGU/MTotMX1mdW5jdGlvbiBNKHQsZSxyLG4pe3ZhciBpO3JldHVybiFlLnVuaWZvcm10ZXh0Lm1vZGUmJkEocik/KG4mJihpPW4oKSksdC50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtpJiZpKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtpJiZpKCl9KSkpOnR9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gdCYmdC5kdXJhdGlvbj4wfWZ1bmN0aW9uIFModCl7cmV0dXJuImF1dG8iPT09dD8wOnR9ZnVuY3Rpb24gRSh0LGUpe3ZhciByPU1hdGguUEkvMTgwKmUsbj1NYXRoLmFicyhNYXRoLnNpbihyKSksaT1NYXRoLmFicyhNYXRoLmNvcyhyKSk7cmV0dXJue3g6dC53aWR0aCppK3QuaGVpZ2h0Km4seTp0LndpZHRoKm4rdC5oZWlnaHQqaX19ZnVuY3Rpb24gQyh0LGUscixuLGksYSl7dmFyIG89ISFhLmlzSG9yaXpvbnRhbCxzPSEhYS5jb25zdHJhaW5lZCxsPWEuYW5nbGV8fDAsYz1hLmFuY2hvcnx8ImVuZCIsdT0iZW5kIj09PWMsaD0ic3RhcnQiPT09YyxmPSgoYS5sZWZ0VG9SaWdodHx8MCkrMSkvMixwPTEtZixkPWkud2lkdGgsZz1pLmhlaWdodCxtPU1hdGguYWJzKGUtdCksdj1NYXRoLmFicyhuLXIpLHk9bT4yKl8mJnY+MipfP186MDttLT0yKnksdi09Mip5O3ZhciB4PVMobCk7ImF1dG8iIT09bHx8ZDw9bSYmZzw9dnx8IShkPm18fGc+dil8fChkPnZ8fGc+bSkmJmQ8Zz09bTx2fHwoeCs9OTApO3ZhciBiPUUoaSx4KSx3PTE7cyYmKHc9TWF0aC5taW4oMSxtL2IueCx2L2IueSkpO3ZhciBUPWkubGVmdCpwK2kucmlnaHQqZixNPShpLnRvcCtpLmJvdHRvbSkvMixBPSh0K18pKnArKGUtXykqZixDPShyK24pLzIsTD0wLFA9MDtpZihofHx1KXt2YXIgST0obz9iLng6Yi55KS8yLHo9bz9rKHQsZSk6ayhyLG4pO28/aD8oQT10K3oqeSxMPS16KkkpOihBPWUteip5LEw9eipJKTpoPyhDPXIreip5LFA9LXoqSSk6KEM9bi16KnksUD16KkkpfXJldHVybnt0ZXh0WDpULHRleHRZOk0sdGFyZ2V0WDpBLHRhcmdldFk6QyxhbmNob3JYOkwsYW5jaG9yWTpQLHNjYWxlOncscm90YXRlOnh9fWUuZXhwb3J0cz17cGxvdDpmdW5jdGlvbih0LGUscixoLG0sdil7dmFyIHc9ZS54YXhpcyxMPWUueWF4aXMsUD10Ll9mdWxsTGF5b3V0O218fChtPXttb2RlOlAuYmFybW9kZSxub3JtOlAuYmFybW9kZSxnYXA6UC5iYXJnYXAsZ3JvdXBnYXA6UC5iYXJncm91cGdhcH0scCgiYmFyIixQKSk7dmFyIEk9YS5tYWtlVHJhY2VHcm91cHMoaCxyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGM9bi5zZWxlY3QodGhpcyksaD1yWzBdLnRyYWNlLHA9IndhdGVyZmFsbCI9PT1oLnR5cGUsST0iZnVubmVsIj09PWgudHlwZSx6PSJiYXIiPT09aC50eXBlfHxJLE89MDtwJiZoLmNvbm5lY3Rvci52aXNpYmxlJiYiYmV0d2VlbiI9PT1oLmNvbm5lY3Rvci5tb2RlJiYoTz1oLmNvbm5lY3Rvci5saW5lLndpZHRoLzIpO3ZhciBEPSJoIj09PWgub3JpZW50YXRpb24sUj1BKG0pLEY9YS5lbnN1cmVTaW5nbGUoYywiZyIsInBvaW50cyIpLEI9VChoKSxOPUYuc2VsZWN0QWxsKCJnLnBvaW50IikuZGF0YShhLmlkZW50aXR5LEIpO04uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludCIsITApLE4uZXhpdCgpLnJlbW92ZSgpLE4uZWFjaCgoZnVuY3Rpb24oYyxwKXt2YXIgVCxBLEk9bi5zZWxlY3QodGhpcyksRj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxuP1tpLGFdOlthLGldfShjLHcsTCxEKSxCPUZbMF1bMF0sTj1GWzBdWzFdLGo9RlsxXVswXSxVPUZbMV1bMV0sVj0wPT0oRD9OLUI6VS1qKTtpZihWJiZ6JiZnLmdldExpbmVXaWR0aChoLGMpJiYoVj0hMSksVnx8KFY9IShpKEIpJiZpKE4pJiZpKGopJiZpKFUpKSksYy5pc0JsYW5rPVYsViYmKEQ/Tj1COlU9aiksTyYmIVYmJihEPyhCLT1rKEIsTikqTyxOKz1rKEIsTikqTyk6KGotPWsoaixVKSpPLFUrPWsoaixVKSpPKSksIndhdGVyZmFsbCI9PT1oLnR5cGUpe2lmKCFWKXt2YXIgcT1oW2MuZGlyXS5tYXJrZXI7VD1xLmxpbmUud2lkdGgsQT1xLmNvbG9yfX1lbHNlIFQ9Zy5nZXRMaW5lV2lkdGgoaCxjKSxBPWMubWN8fGgubWFya2VyLmNvbG9yO2Z1bmN0aW9uIEgodCl7dmFyIGU9bi5yb3VuZChULzIlMSwyKTtyZXR1cm4gMD09PW0uZ2FwJiYwPT09bS5ncm91cGdhcD9uLnJvdW5kKE1hdGgucm91bmQodCktZSwyKTp0fWlmKCF0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciBHPXMub3BhY2l0eShBKTwxfHxUPi4wMT9IOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gciYmdD09PWU/dDpNYXRoLmFicyh0LWUpPj0yP0godCk6dD5lP01hdGguY2VpbCh0KTpNYXRoLmZsb29yKHQpfTtCPUcoQixOLEQpLE49RyhOLEIsRCksaj1HKGosVSwhRCksVT1HKFUsaiwhRCl9dmFyIFk9TShhLmVuc3VyZVNpbmdsZShJLCJwYXRoIiksUCxtLHYpO2lmKFkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixpc05hTigoTi1CKSooVS1qKSk/Ik0wLDBaIjoiTSIrQisiLCIraisiViIrVSsiSCIrTisiViIraisiWiIpLmNhbGwobC5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCksIVAudW5pZm9ybXRleHQubW9kZSYmUil7dmFyIFc9bC5tYWtlUG9pbnRTdHlsZUZucyhoKTtsLnNpbmdsZVBvaW50U3R5bGUoYyxZLGgsVyx0KX0hZnVuY3Rpb24odCxlLHIsbixpLHMsYyxoLHAsbSx2KXt2YXIgdyxUPWUueGF4aXMsQT1lLnlheGlzLEw9dC5fZnVsbExheW91dDtmdW5jdGlvbiBQKGUscixuKXtyZXR1cm4gYS5lbnN1cmVTaW5nbGUoZSwidGV4dCIpLnRleHQocikuYXR0cih7Y2xhc3M6ImJhcnRleHQgYmFydGV4dC0iK3csInRleHQtYW5jaG9yIjoibWlkZGxlIiwiZGF0YS1ub3RleCI6MX0pLmNhbGwobC5mb250LG4pLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCl9dmFyIEk9blswXS50cmFjZSx6PSJoIj09PUkub3JpZW50YXRpb24sTz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBvLHM9ZVswXS50cmFjZTtvPXMudGV4dHRlbXBsYXRlP2Z1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89ZVswXS50cmFjZSxzPWEuY2FzdE9wdGlvbihvLHIsInRleHR0ZW1wbGF0ZSIpO2lmKCFzKXJldHVybiIiO3ZhciBsLGMsaCxmLHA9IndhdGVyZmFsbCI9PT1vLnR5cGUsZD0iZnVubmVsIj09PW8udHlwZTsiaCI9PT1vLm9yaWVudGF0aW9uPyhsPSJ5IixjPWksaD0ieCIsZj1uKToobD0ieCIsYz1uLGg9InkiLGY9aSk7ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdShmLCt0LCEwKS50ZXh0fXZhciBtPWVbcl0sdj17fTt2LmxhYmVsPW0ucCx2LmxhYmVsTGFiZWw9dltsKyJMYWJlbCJdPSh5PW0ucCx1KGMseSwhMCkudGV4dCk7dmFyIHk7dmFyIHg9YS5jYXN0T3B0aW9uKG8sbS5pLCJ0ZXh0Iik7KDA9PT14fHx4KSYmKHYudGV4dD14KTt2LnZhbHVlPW0ucyx2LnZhbHVlTGFiZWw9dltoKyJMYWJlbCJdPWcobS5zKTt2YXIgXz17fTtiKF8sbyxtLmkpLHAmJih2LmRlbHRhPSttLnJhd1N8fG0ucyx2LmRlbHRhTGFiZWw9Zyh2LmRlbHRhKSx2LmZpbmFsPW0udix2LmZpbmFsTGFiZWw9Zyh2LmZpbmFsKSx2LmluaXRpYWw9di5maW5hbC12LmRlbHRhLHYuaW5pdGlhbExhYmVsPWcodi5pbml0aWFsKSk7ZCYmKHYudmFsdWU9bS5zLHYudmFsdWVMYWJlbD1nKHYudmFsdWUpLHYucGVyY2VudEluaXRpYWw9bS5iZWdSLHYucGVyY2VudEluaXRpYWxMYWJlbD1hLmZvcm1hdFBlcmNlbnQobS5iZWdSKSx2LnBlcmNlbnRQcmV2aW91cz1tLmRpZlIsdi5wZXJjZW50UHJldmlvdXNMYWJlbD1hLmZvcm1hdFBlcmNlbnQobS5kaWZSKSx2LnBlcmNlbnRUb3RhbD1tLnN1bVIsdi5wZXJjZW5Ub3RhbExhYmVsPWEuZm9ybWF0UGVyY2VudChtLnN1bVIpKTt2YXIgdz1hLmNhc3RPcHRpb24obyxtLmksImN1c3RvbWRhdGEiKTt3JiYodi5jdXN0b21kYXRhPXcpO3JldHVybiBhLnRleHR0ZW1wbGF0ZVN0cmluZyhzLHYsdC5fZDNsb2NhbGUsXyx2LG8uX21ldGF8fHt9KX0odCxlLHIsbixpKTpzLnRleHRpbmZvP2Z1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0udHJhY2Usbz0iaCI9PT1pLm9yaWVudGF0aW9uLHM9IndhdGVyZmFsbCI9PT1pLnR5cGUsbD0iZnVubmVsIj09PWkudHlwZTtmdW5jdGlvbiBjKHQpe3JldHVybiB1KG8/cjpuLCt0LCEwKS50ZXh0fXZhciBoLGY9aS50ZXh0aW5mbyxwPXRbZV0sZD1mLnNwbGl0KCIrIiksZz1bXSxtPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09ZC5pbmRleE9mKHQpfTttKCJsYWJlbCIpJiZnLnB1c2goKHY9dFtlXS5wLHUobz9uOnIsdiwhMCkudGV4dCkpO3ZhciB2O20oInRleHQiKSYmKDA9PT0oaD1hLmNhc3RPcHRpb24oaSxwLmksInRleHQiKSl8fGgpJiZnLnB1c2goaCk7aWYocyl7dmFyIHk9K3AucmF3U3x8cC5zLHg9cC52LGI9eC15O20oImluaXRpYWwiKSYmZy5wdXNoKGMoYikpLG0oImRlbHRhIikmJmcucHVzaChjKHkpKSxtKCJmaW5hbCIpJiZnLnB1c2goYyh4KSl9aWYobCl7bSgidmFsdWUiKSYmZy5wdXNoKGMocC5zKSk7dmFyIF89MDttKCJwZXJjZW50IGluaXRpYWwiKSYmXysrLG0oInBlcmNlbnQgcHJldmlvdXMiKSYmXysrLG0oInBlcmNlbnQgdG90YWwiKSYmXysrO3ZhciB3PV8+MTttKCJwZXJjZW50IGluaXRpYWwiKSYmKGg9YS5mb3JtYXRQZXJjZW50KHAuYmVnUiksdyYmKGgrPSIgb2YgaW5pdGlhbCIpLGcucHVzaChoKSksbSgicGVyY2VudCBwcmV2aW91cyIpJiYoaD1hLmZvcm1hdFBlcmNlbnQocC5kaWZSKSx3JiYoaCs9IiBvZiBwcmV2aW91cyIpLGcucHVzaChoKSksbSgicGVyY2VudCB0b3RhbCIpJiYoaD1hLmZvcm1hdFBlcmNlbnQocC5zdW1SKSx3JiYoaCs9IiBvZiB0b3RhbCIpLGcucHVzaChoKSl9cmV0dXJuIGcuam9pbigiPGJyPiIpfShlLHIsbixpKTpnLmdldFZhbHVlKHMudGV4dCxyKTtyZXR1cm4gZy5jb2VyY2VTdHJpbmcoeSxvKX0oTCxuLGksVCxBKTt3PWZ1bmN0aW9uKHQsZSl7dmFyIHI9Zy5nZXRWYWx1ZSh0LnRleHRwb3NpdGlvbixlKTtyZXR1cm4gZy5jb2VyY2VFbnVtZXJhdGVkKHgscil9KEksaSk7dmFyIEQ9InN0YWNrIj09PW0ubW9kZXx8InJlbGF0aXZlIj09PW0ubW9kZSxSPW5baV0sRj0hRHx8Ui5fb3V0bW9zdDtpZighT3x8Im5vbmUiPT09d3x8KFIuaXNCbGFua3x8cz09PWN8fGg9PT1wKSYmKCJhdXRvIj09PXd8fCJpbnNpZGUiPT09dykpcmV0dXJuIHZvaWQgci5zZWxlY3QoInRleHQiKS5yZW1vdmUoKTt2YXIgQj1MLmZvbnQsTj1kLmdldEJhckNvbG9yKG5baV0sSSksaj1kLmdldEluc2lkZVRleHRGb250KEksaSxCLE4pLFU9ZC5nZXRPdXRzaWRlVGV4dEZvbnQoSSxpLEIpLFY9ci5kYXR1bSgpO3o/ImxvZyI9PT1ULnR5cGUmJlYuczA8PTAmJihzPVQucmFuZ2VbMF08VC5yYW5nZVsxXT8wOlQuX2xlbmd0aCk6ImxvZyI9PT1BLnR5cGUmJlYuczA8PTAmJihoPUEucmFuZ2VbMF08QS5yYW5nZVsxXT9BLl9sZW5ndGg6MCk7dmFyIHEsSCxHLFksVyxaPU1hdGguYWJzKGMtcyktMipfLFg9TWF0aC5hYnMocC1oKS0yKl87Im91dHNpZGUiPT09dyYmKEZ8fFIuaGFzQnx8KHc9Imluc2lkZSIpKTtpZigiYXV0byI9PT13KWlmKEYpe3c9Imluc2lkZSIsVz1hLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LGopLHE9UChyLE8sVyksSD1sLmJCb3gocS5ub2RlKCkpLEc9SC53aWR0aCxZPUguaGVpZ2h0O3ZhciBKPUc8PVomJlk8PVgsSz1HPD1YJiZZPD1aLFE9ej9aPj1HKihYL1kpOlg+PVkqKFovRyk7Rz4wJiZZPjAmJihKfHxLfHxRKT93PSJpbnNpZGUiOih3PSJvdXRzaWRlIixxLnJlbW92ZSgpLHE9bnVsbCl9ZWxzZSB3PSJpbnNpZGUiO2lmKCFxKXtXPWEuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsIm91dHNpZGUiPT09dz9VOmopO3ZhciAkPShxPVAocixPLFcpKS5hdHRyKCJ0cmFuc2Zvcm0iKTtpZihxLmF0dHIoInRyYW5zZm9ybSIsIiIpLEg9bC5iQm94KHEubm9kZSgpKSxHPUgud2lkdGgsWT1ILmhlaWdodCxxLmF0dHIoInRyYW5zZm9ybSIsJCksRzw9MHx8WTw9MClyZXR1cm4gdm9pZCBxLnJlbW92ZSgpfXZhciB0dCxldCxydD1JLnRleHRhbmdsZTsib3V0c2lkZSI9PT13PyhldD0iYm90aCI9PT1JLmNvbnN0cmFpbnRleHR8fCJvdXRzaWRlIj09PUkuY29uc3RyYWludGV4dCx0dD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scz0hIWEuaXNIb3Jpem9udGFsLGw9ISFhLmNvbnN0cmFpbmVkLGM9YS5hbmdsZXx8MCx1PWkud2lkdGgsaD1pLmhlaWdodCxmPU1hdGguYWJzKGUtdCkscD1NYXRoLmFicyhuLXIpO289cz9wPjIqXz9fOjA6Zj4yKl8/XzowO3ZhciBkPTE7bCYmKGQ9cz9NYXRoLm1pbigxLHAvaCk6TWF0aC5taW4oMSxmL3UpKTt2YXIgZz1TKGMpLG09RShpLGcpLHY9KHM/bS54Om0ueSkvMix5PShpLmxlZnQraS5yaWdodCkvMix4PShpLnRvcCtpLmJvdHRvbSkvMixiPSh0K2UpLzIsdz0ocituKS8yLFQ9MCxNPTAsQT1zP2soZSx0KTprKHIsbik7cz8oYj1lLUEqbyxUPUEqdik6KHc9bitBKm8sTT0tQSp2KTtyZXR1cm57dGV4dFg6eSx0ZXh0WTp4LHRhcmdldFg6Yix0YXJnZXRZOncsYW5jaG9yWDpULGFuY2hvclk6TSxzY2FsZTpkLHJvdGF0ZTpnfX0ocyxjLGgscCxILHtpc0hvcml6b250YWw6eixjb25zdHJhaW5lZDpldCxhbmdsZTpydH0pKTooZXQ9ImJvdGgiPT09SS5jb25zdHJhaW50ZXh0fHwiaW5zaWRlIj09PUkuY29uc3RyYWludGV4dCx0dD1DKHMsYyxoLHAsSCx7aXNIb3Jpem9udGFsOnosY29uc3RyYWluZWQ6ZXQsYW5nbGU6cnQsYW5jaG9yOkkuaW5zaWRldGV4dGFuY2hvcn0pKTt0dC5mb250U2l6ZT1XLnNpemUsZihJLnR5cGUsdHQsTCksUi50cmFuc2Zvcm09dHQsTShxLEwsbSx2KS5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VGV4dFRyYW5zZm9ybSh0dCkpfSh0LGUsSSxyLHAsQixOLGosVSxtLHYpLGUubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KGMsSS5zZWxlY3QoInRleHQiKSx3LEwsaC54Y2FsZW5kYXIsaC55Y2FsZW5kYXIpfSkpO3ZhciBqPSExPT09aC5jbGlwb25heGlzO2wuc2V0Q2xpcFVybChjLGo/bnVsbDplLmxheWVyQ2xpcElkLHQpfSkpO2MuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJwbG90IikodCxJLGUsbSl9LHRvTW92ZUluc2lkZUJhcjpDfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY1MSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6Nzc0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2F0dHJpYnV0ZXMiOjg5MiwiLi9jb25zdGFudHMiOjg5NCwiLi9oZWxwZXJzIjo4OTgsIi4vc3R5bGUiOjkwNiwiLi91bmlmb3JtX3RleHQiOjkwOCxkMzoxNjksImZhc3QtaXNudW1lcmljIjoyNDF9XSw5MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPWUuYzJwKG4/dC5zMDp0LnAwLCEwKSxvPWUuYzJwKG4/dC5zMTp0LnAxLCEwKSxzPXIuYzJwKG4/dC5wMDp0LnMwLCEwKSxsPXIuYzJwKG4/dC5wMTp0LnMxLCEwKTtyZXR1cm4gaT9bKGErbykvMiwocytsKS8yXTpuP1tvLChzK2wpLzJdOlsoYStvKS8yLGxdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5jZCxhPXQueGF4aXMsbz10LnlheGlzLHM9aVswXS50cmFjZSxsPSJmdW5uZWwiPT09cy50eXBlLGM9ImgiPT09cy5vcmllbnRhdGlvbix1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBoPWlbcl0sZj0iY3QiaW4gaD9oLmN0Om4oaCxhLG8sYyxsKTtlLmNvbnRhaW5zKGYsITEscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjpyLHg6YS5jMmQoaC54KSx5Om8uYzJkKGgueSl9KSxoLnNlbGVjdGVkPTEpOmguc2VsZWN0ZWQ9MH1yZXR1cm4gdX19LHt9XSw5MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWE7dmFyIG49dCgiLi4vLi4vbGliIikuZGlzdGluY3RWYWxzLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBhKHQsZSl7dGhpcy50cmFjZXM9dCx0aGlzLnNlcE5lZ1ZhbD1lLnNlcE5lZ1ZhbCx0aGlzLm92ZXJsYXBOb01lcmdlPWUub3ZlcmxhcE5vTWVyZ2U7Zm9yKHZhciByPTEvMCxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRbb10sbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdO2MucCE9PWkmJmEucHVzaChjLnApfXNbMF0mJnNbMF0ud2lkdGgxJiYocj1NYXRoLm1pbihzWzBdLndpZHRoMSxyKSl9dGhpcy5wb3NpdGlvbnM9YTt2YXIgdT1uKGEse3VuaXRNaW5EaWZmOmUudW5pdE1pbkRpZmZ9KTt0aGlzLmRpc3RpbmN0UG9zaXRpb25zPXUudmFscywxPT09dS52YWxzLmxlbmd0aCYmciE9PTEvMD90aGlzLm1pbkRpZmY9cjp0aGlzLm1pbkRpZmY9TWF0aC5taW4odS5taW5EaWZmLHIpLHRoaXMuYmluV2lkdGg9dGhpcy5taW5EaWZmLHRoaXMuYmlucz17fX1hLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSksbj10aGlzLmJpbnNbcl18fDA7cmV0dXJuIHRoaXMuYmluc1tyXT1uK2Usbn0sYS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nZXRMYWJlbCh0LGUpO3JldHVybiB0aGlzLmJpbnNbcl18fDB9LGEucHJvdG90eXBlLmdldExhYmVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU8MCYmdGhpcy5zZXBOZWdWYWw/InYiOiJeIikrKHRoaXMub3ZlcmxhcE5vTWVyZ2U/dDpNYXRoLnJvdW5kKHQvdGhpcy5iaW5XaWR0aCkpfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYiI6NzUwfV0sOTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vcmVnaXN0cnkiKSxsPXQoIi4vdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dCxjPXQoIi4vYXR0cmlidXRlcyIpLHU9Yy50ZXh0Zm9udCxoPWMuaW5zaWRldGV4dGZvbnQsZj1jLm91dHNpZGV0ZXh0Zm9udCxwPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIGQodCxlLHIpe2EucG9pbnRTdHlsZSh0LnNlbGVjdEFsbCgicGF0aCIpLGUsciksZyh0LGUscil9ZnVuY3Rpb24gZyh0LGUscil7dC5zZWxlY3RBbGwoInRleHQiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxzPW8uZW5zdXJlVW5pZm9ybUZvbnRTaXplKHIsbShpLHQsZSxyKSk7YS5mb250KGkscyl9KSl9ZnVuY3Rpb24gbSh0LGUscixuKXt2YXIgaT1uLl9mdWxsTGF5b3V0LmZvbnQsYT1yLnRleHRmb250O2lmKHQuY2xhc3NlZCgiYmFydGV4dC1pbnNpZGUiKSl7dmFyIG89XyhlLHIpO2E9eShyLGUuaSxpLG8pfWVsc2UgdC5jbGFzc2VkKCJiYXJ0ZXh0LW91dHNpZGUiKSYmKGE9eChyLGUuaSxpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gdih0LGUscil7cmV0dXJuIGIodSx0LnRleHRmb250LGUscil9ZnVuY3Rpb24geSh0LGUscixuKXt2YXIgYT12KHQsZSxyKTtyZXR1cm4odm9pZCAwPT09dC5faW5wdXQudGV4dGZvbnR8fHZvaWQgMD09PXQuX2lucHV0LnRleHRmb250LmNvbG9yfHxBcnJheS5pc0FycmF5KHQudGV4dGZvbnQuY29sb3IpJiZ2b2lkIDA9PT10LnRleHRmb250LmNvbG9yW2VdKSYmKGE9e2NvbG9yOmkuY29udHJhc3QobiksZmFtaWx5OmEuZmFtaWx5LHNpemU6YS5zaXplfSksYihoLHQuaW5zaWRldGV4dGZvbnQsZSxhKX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbj12KHQsZSxyKTtyZXR1cm4gYihmLHQub3V0c2lkZXRleHRmb250LGUsbil9ZnVuY3Rpb24gYih0LGUscixuKXtlPWV8fHt9O3ZhciBpPXAuZ2V0VmFsdWUoZS5mYW1pbHksciksYT1wLmdldFZhbHVlKGUuc2l6ZSxyKSxvPXAuZ2V0VmFsdWUoZS5jb2xvcixyKTtyZXR1cm57ZmFtaWx5OnAuY29lcmNlU3RyaW5nKHQuZmFtaWx5LGksbi5mYW1pbHkpLHNpemU6cC5jb2VyY2VOdW1iZXIodC5zaXplLGEsbi5zaXplKSxjb2xvcjpwLmNvZXJjZUNvbG9yKHQuY29sb3IsbyxuLmNvbG9yKX19ZnVuY3Rpb24gXyh0LGUpe3JldHVybiJ3YXRlcmZhbGwiPT09ZS50eXBlP2VbdC5kaXJdLm1hcmtlci5jb2xvcjp0Lm1jfHxlLm1hcmtlci5jb2xvcn1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy5iYXJsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpO2wodCxlLCJiYXIiKTt2YXIgcj1lLnNpemUoKSxpPXQuX2Z1bGxMYXlvdXQ7ZS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSkuZWFjaCgoZnVuY3Rpb24odCl7KCJzdGFjayI9PT1pLmJhcm1vZGUmJnI+MXx8MD09PWkuYmFyZ2FwJiYwPT09aS5iYXJncm91cGdhcCYmIXRbMF0udHJhY2UubWFya2VyLmxpbmUud2lkdGgpJiZuLnNlbGVjdCh0aGlzKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KSksZS5zZWxlY3RBbGwoImcucG9pbnRzIikuZWFjaCgoZnVuY3Rpb24oZSl7ZChuLnNlbGVjdCh0aGlzKSxlWzBdLnRyYWNlLHQpfSkpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdHlsZSIpKGUpfSxzdHlsZVRleHRQb2ludHM6ZyxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lWzBdLnRyYWNlO2kuc2VsZWN0ZWRwb2ludHM/ZnVuY3Rpb24odCxlLHIpe2Euc2VsZWN0ZWRQb2ludFN0eWxlKHQuc2VsZWN0QWxsKCJwYXRoIiksZSksZnVuY3Rpb24odCxlLHIpe3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGkscz1uLnNlbGVjdCh0aGlzKTtpZih0LnNlbGVjdGVkKXtpPW8uZW5zdXJlVW5pZm9ybUZvbnRTaXplKHIsbShzLHQsZSxyKSk7dmFyIGw9ZS5zZWxlY3RlZC50ZXh0Zm9udCYmZS5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvcjtsJiYoaS5jb2xvcj1sKSxhLmZvbnQocyxpKX1lbHNlIGEuc2VsZWN0ZWRUZXh0U3R5bGUocyxlKX0pKX0odC5zZWxlY3RBbGwoInRleHQiKSxlLHIpfShyLGksdCk6KGQocixpLHQpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdHlsZSIpKHIpKX0sZ2V0SW5zaWRlVGV4dEZvbnQ6eSxnZXRPdXRzaWRlVGV4dEZvbnQ6eCxnZXRCYXJDb2xvcjpfLHJlc2l6ZVRleHQ6bH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4vYXR0cmlidXRlcyI6ODkyLCIuL2hlbHBlcnMiOjg5OCwiLi91bmlmb3JtX3RleHQiOjkwOCxkMzoxNjl9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyl7cigibWFya2VyLmNvbG9yIixvKSxpKHQsIm1hcmtlciIpJiZhKHQsZSxzLHIse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KSxyKCJtYXJrZXIubGluZS5jb2xvciIsbi5kZWZhdWx0TGluZSksaSh0LCJtYXJrZXIubGluZSIpJiZhKHQsZSxzLHIse3ByZWZpeDoibWFya2VyLmxpbmUuIixjTGV0dGVyOiJjIn0pLHIoIm1hcmtlci5saW5lLndpZHRoIikscigibWFya2VyLm9wYWNpdHkiKSxyKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjI1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjI2fV0sOTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBhKHQpe3JldHVybiJfIit0KyJUZXh0X21pbnNpemUifWUuZXhwb3J0cz17cmVjb3JkTWluVGV4dFNpemU6ZnVuY3Rpb24odCxlLHIpe2lmKHIudW5pZm9ybXRleHQubW9kZSl7dmFyIG49YSh0KSxpPXIudW5pZm9ybXRleHQubWluc2l6ZSxvPWUuc2NhbGUqZS5mb250U2l6ZTtlLmhpZGU9bzxpLHJbbl09cltuXXx8MS8wLGUuaGlkZXx8KHJbbl09TWF0aC5taW4ocltuXSxNYXRoLm1heChvLGkpKSl9fSxjbGVhck1pblRleHRTaXplOmZ1bmN0aW9uKHQsZSl7ZVthKHQpXT12b2lkIDB9LHJlc2l6ZVRleHQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1hWyJfIityKyJUZXh0X21pbnNpemUiXTtpZihvKXt2YXIgcyxsPSJoaWRlIj09PWEudW5pZm9ybXRleHQubW9kZTtzd2l0Y2gocil7Y2FzZSJmdW5uZWxhcmVhIjpjYXNlInBpZSI6Y2FzZSJzdW5idXJzdCI6cz0iZy5zbGljZSI7YnJlYWs7Y2FzZSJ0cmVlbWFwIjpzPSJnLnNsaWNlLCBnLnBhdGhiYXIiO2JyZWFrO2RlZmF1bHQ6cz0iZy5wb2ludHMgPiBnLnBvaW50In1lLnNlbGVjdEFsbChzKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnRyYW5zZm9ybTtlJiYoZS5zY2FsZT1sJiZlLmhpZGU/MDpvL2UuZm9udFNpemUsbi5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixpLmdldFRleHRUcmFuc2Zvcm0oZSkpKX0pKX19fX0seyIuLi8uLi9saWIiOjc1MCxkMzoxNjl9XSw5MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiLi4vc2NhdHRlcnBvbGFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtyOmEucix0aGV0YTphLnRoZXRhLHIwOmEucjAsZHI6YS5kcix0aGV0YTA6YS50aGV0YTAsZHRoZXRhOmEuZHRoZXRhLHRoZXRhdW5pdDphLnRoZXRhdW5pdCxiYXNlOmkoe30sby5iYXNlLHt9KSxvZmZzZXQ6aSh7fSxvLm9mZnNldCx7fSksd2lkdGg6aSh7fSxvLndpZHRoLHt9KSx0ZXh0Omkoe30sby50ZXh0LHt9KSxob3ZlcnRleHQ6aSh7fSxvLmhvdmVydGV4dCx7fSksbWFya2VyOm8ubWFya2VyLGhvdmVyaW5mbzphLmhvdmVyaW5mbyxob3ZlcnRlbXBsYXRlOm4oKSxzZWxlY3RlZDpvLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6by51bnNlbGVjdGVkfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vYmFyL2F0dHJpYnV0ZXMiOjg5MiwiLi4vc2NhdHRlcnBvbGFyL2F0dHJpYnV0ZXMiOjEyMzJ9XSw5MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxhPXQoIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuc2V0R3JvdXBQb3NpdGlvbnMscz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIiksbD10KCIuLi8uLi9yZWdpc3RyeSIpLnRyYWNlSXMsYz10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LG89ZS5zdWJwbG90LGw9cltvXS5yYWRpYWxheGlzLGM9cltvXS5hbmd1bGFyYXhpcyx1PWwubWFrZUNhbGNkYXRhKGUsInIiKSxoPWMubWFrZUNhbGNkYXRhKGUsInRoZXRhIiksZj1lLl9sZW5ndGgscD1uZXcgQXJyYXkoZiksZD11LGc9aCxtPTA7bTxmO20rKylwW21dPXtwOmdbbV0sczpkW21dfTtmdW5jdGlvbiB2KHQpe3ZhciByPWVbdF07dm9pZCAwIT09ciYmKGVbIl8iK3RdPUFycmF5LmlzQXJyYXkocik/Yy5tYWtlQ2FsY2RhdGEoZSx0KTpjLmQyYyhyLGUudGhldGF1bml0KSl9cmV0dXJuImxpbmVhciI9PT1jLnR5cGUmJih2KCJ3aWR0aCIpLHYoIm9mZnNldCIpKSxuKGUsIm1hcmtlciIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxuKGUsIm1hcmtlci5saW5lIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIubGluZSIsY0xldHRlcjoiYyJ9KSxhKHAsZSkscyhwLGUpLHB9LGNyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5jYWxjZGF0YSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXSx1PXNbMF0udHJhY2U7ITA9PT11LnZpc2libGUmJmwodSwiYmFyIikmJnUuc3VicGxvdD09PXImJmkucHVzaChzKX12YXIgaD1jKHt9LGUucmFkaWFsYXhpcyx7X2lkOiJ4In0pLGY9ZS5hbmd1bGFyYXhpcztvKHQsZixoLGkse21vZGU6ZS5iYXJtb2RlLG5vcm06ZS5iYXJub3JtLGdhcDplLmJhcmdhcCxncm91cGdhcDplLmJhcmdyb3VwZ2FwfSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjIzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjI2LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSI6ODkxLCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyI6ODk1LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTYwfV0sOTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIikuaGFuZGxlUlRoZXRhRGVmYXVsdHMsYT10KCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9aSh0LGUscyxsKT8obCgidGhldGF1bml0IiksbCgiYmFzZSIpLGwoIm9mZnNldCIpLGwoIndpZHRoIiksbCgidGV4dCIpLGwoImhvdmVydGV4dCIpLGwoImhvdmVydGVtcGxhdGUiKSxhKHQsZSxsLHIscyksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsbCkpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NTAsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6OTA3LCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHMiOjEyMzQsIi4vYXR0cmlidXRlcyI6OTA5fV0sOTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vYmFyL2hvdmVyIikuZ2V0VHJhY2VDb2xvcixvPWkuZmlsbFRleHQscz10KCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiKS5tYWtlSG92ZXJQb2ludFRleHQsbD10KCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIikuaXNQdEluc2lkZVBvbHlnb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYz10LmNkLHU9Y1swXS50cmFjZSxoPXQuc3VicGxvdCxmPWgucmFkaWFsQXhpcyxwPWguYW5ndWxhckF4aXMsZD1oLnZhbmdsZXMsZz1kP2w6aS5pc1B0SW5zaWRlU2VjdG9yLG09dC5tYXhIb3ZlckRpc3RhbmNlLHY9cC5fcGVyaW9kfHwyKk1hdGguUEkseT1NYXRoLmFicyhmLmcycChNYXRoLnNxcnQoZSplK3IqcikpKSx4PU1hdGguYXRhbjIocixlKTtmLnJhbmdlWzBdPmYucmFuZ2VbMV0mJih4Kz1NYXRoLlBJKTtpZihuLmdldENsb3Nlc3QoYywoZnVuY3Rpb24odCl7cmV0dXJuIGcoeSx4LFt0LnJwMCx0LnJwMV0sW3QudGhldGFnMCx0LnRoZXRhZzFdLGQpP20rTWF0aC5taW4oMSxNYXRoLmFicyh0LnRoZXRhZzEtdC50aGV0YWcwKS92KS0xKyh0LnJwMS15KS8odC5ycDEtdC5ycDApLTE6MS8wfSksdCksITEhPT10LmluZGV4KXt2YXIgYj1jW3QuaW5kZXhdO3QueDA9dC54MT1iLmN0WzBdLHQueTA9dC55MT1iLmN0WzFdO3ZhciBfPWkuZXh0ZW5kRmxhdCh7fSxiLHtyOmIucyx0aGV0YTpiLnB9KTtyZXR1cm4gbyhiLHUsdCkscyhfLHUsaCx0KSx0LmhvdmVydGVtcGxhdGU9dS5ob3ZlcnRlbXBsYXRlLHQuY29sb3I9YSh1LGIpLHQueExhYmVsVmFsPXQueUxhYmVsVmFsPXZvaWQgMCxiLnM8MCYmKHQuaWRlYWxBbGlnbj0ibGVmdCIpLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY1NSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnMiOjg2NCwiLi4vYmFyL2hvdmVyIjo4OTksIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciI6MTIzNn1dLDkxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJiYXJwb2xhciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvcG9sYXIiKSxjYXRlZ29yaWVzOlsicG9sYXIiLCJiYXIiLCJzaG93TGVnZW5kIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuLi9zY2F0dGVycG9sYXIvZm9ybWF0X2xhYmVscyIpLHN0eWxlOnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi4vYmFyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9wb2xhciI6ODY1LCIuLi9iYXIvc2VsZWN0Ijo5MDQsIi4uL2Jhci9zdHlsZSI6OTA2LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTE3NiwiLi4vc2NhdHRlcnBvbGFyL2Zvcm1hdF9sYWJlbHMiOjEyMzUsIi4vYXR0cmlidXRlcyI6OTA5LCIuL2NhbGMiOjkxMCwiLi9kZWZhdWx0cyI6OTExLCIuL2hvdmVyIjo5MTIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjkxNCwiLi9sYXlvdXRfZGVmYXVsdHMiOjkxNSwiLi9wbG90Ijo5MTZ9XSw5MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFjayIsIm92ZXJsYXkiXSxkZmx0OiJzdGFjayIsZWRpdFR5cGU6ImNhbGMifSxiYXJnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMSxtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDkxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG89e307ZnVuY3Rpb24gcyhyLG8pe3JldHVybiBuLmNvZXJjZSh0W2FdfHx7fSxlW2FdLGkscixvKX1mb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXTsiYmFycG9sYXIiPT09Yy50eXBlJiYhMD09PWMudmlzaWJsZSYmKG9bYT1jLnN1YnBsb3RdfHwocygiYmFybW9kZSIpLHMoImJhcmdhcCIpLG9bYV09MSkpfX19LHsiLi4vLi4vbGliIjo3NTAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjkxNH1dLDkxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcyx1PWUucmFkaWFsQXhpcyxoPWUuYW5ndWxhckF4aXMsZj1mdW5jdGlvbih0KXt2YXIgZT10LmN4eCxyPXQuY3l5O2lmKHQudmFuZ2xlcylyZXR1cm4gZnVuY3Rpb24obixpLG8sbCl7dmFyIGMsdTthLmFuZ2xlRGVsdGEobyxsKT4wPyhjPW8sdT1sKTooYz1sLHU9byk7dmFyIGg9W3MuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyhjLHQudmFuZ2xlcylbMF0sKGMrdSkvMixzLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXModSx0LnZhbmdsZXMpWzFdXTtyZXR1cm4gcy5wYXRoUG9seWdvbkFubnVsdXMobixpLGMsdSxoLGUscil9O3JldHVybiBmdW5jdGlvbih0LG4saSxvKXtyZXR1cm4gYS5wYXRoQW5udWx1cyh0LG4saSxvLGUscil9fShlKSxwPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuYmFybGF5ZXIiKTthLm1ha2VUcmFjZUdyb3VwcyhwLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbigpe3ZhciByPW4uc2VsZWN0KHRoaXMpLHM9YS5lbnN1cmVTaW5nbGUociwiZyIsInBvaW50cyIpLnNlbGVjdEFsbCgiZy5wb2ludCIpLmRhdGEoYS5pZGVudGl0eSk7cy5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKS5jbGFzc2VkKCJwb2ludCIsITApLHMuZXhpdCgpLnJlbW92ZSgpLHMuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscj1uLnNlbGVjdCh0aGlzKSxvPXQucnAwPXUuYzJwKHQuczApLHM9dC5ycDE9dS5jMnAodC5zMSkscD10LnRoZXRhZzA9aC5jMmcodC5wMCksZD10LnRoZXRhZzE9aC5jMmcodC5wMSk7aWYoaShvKSYmaShzKSYmaShwKSYmaShkKSYmbyE9PXMmJnAhPT1kKXt2YXIgZz11LmMyZyh0LnMxKSxtPShwK2QpLzI7dC5jdD1bbC5jMnAoZypNYXRoLmNvcyhtKSksYy5jMnAoZypNYXRoLnNpbihtKSldLGU9ZihvLHMscCxkKX1lbHNlIGU9Ik0wLDBaIjthLmVuc3VyZVNpbmdsZShyLCJwYXRoIikuYXR0cigiZCIsZSl9KSksby5zZXRDbGlwVXJsKHIsZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbCx0KX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzcsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIjo4NjQsZDM6MTY5LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sOTE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9bi5tYXJrZXIsYz1sLmxpbmU7ZS5leHBvcnRzPXt5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seDA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGR4Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0sZHk6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx4cGVyaW9kOm4ueHBlcmlvZCx5cGVyaW9kOm4ueXBlcmlvZCx4cGVyaW9kMDpuLnhwZXJpb2QwLHlwZXJpb2QwOm4ueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDpuLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDpuLnlwZXJpb2RhbGlnbm1lbnQsbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHExOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG1lZGlhbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxxMzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxsb3dlcmZlbmNlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHVwcGVyZmVuY2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbm90Y2hlZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxub3RjaHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4yNSxlZGl0VHlwZToiY2FsYyJ9LG5vdGNoc3Bhbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxib3hwb2ludHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm91dGxpZXJzIiwic3VzcGVjdGVkb3V0bGllcnMiLCExXSxlZGl0VHlwZToiY2FsYyJ9LGppdHRlcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LHBvaW50cG9zOnt2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MixlZGl0VHlwZToiY2FsYyJ9LGJveG1lYW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInNkIiwhMV0sZWRpdFR5cGU6ImNhbGMifSxtZWFuOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNkOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0scXVhcnRpbGVtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImV4Y2x1c2l2ZSIsImluY2x1c2l2ZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6ImNhbGMifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6e291dGxpZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwgMCwgMCwgMCkiLGVkaXRUeXBlOiJzdHlsZSJ9LHN5bWJvbDpzKHt9LGwuc3ltYm9sLHthcnJheU9rOiExLGVkaXRUeXBlOiJwbG90In0pLG9wYWNpdHk6cyh7fSxsLm9wYWNpdHkse2FycmF5T2s6ITEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9KSxzaXplOnMoe30sbC5zaXplLHthcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0pLGNvbG9yOnMoe30sbC5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksbGluZTp7Y29sb3I6cyh7fSxjLmNvbG9yLHthcnJheU9rOiExLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToic3R5bGUifSksd2lkdGg6cyh7fSxjLndpZHRoLHthcnJheU9rOiExLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSksb3V0bGllcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sb3V0bGllcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJjYWxjIn0sb2Zmc2V0Z3JvdXA6aS5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDppLmFsaWdubWVudGdyb3VwLHNlbGVjdGVkOnttYXJrZXI6bi5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6InN0eWxlIn0sdW5zZWxlY3RlZDp7bWFya2VyOm4udW5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6InN0eWxlIn0sdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6byh7fSksaG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiYm94ZXMiLCJwb2ludHMiXSxkZmx0OiJib3hlcytwb2ludHMiLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYxNCwiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NzcsIi4uL2Jhci9hdHRyaWJ1dGVzIjo4OTIsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE1OH1dLDkxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxsPW8uXztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLHkseCxiLF8sdyxUPXQuX2Z1bGxMYXlvdXQsaz1pLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksTT1pLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IiksQT1bXSxTPSJ2aW9saW4iPT09ZS50eXBlPyJfbnVtVmlvbGlucyI6Il9udW1Cb3hlcyI7ImgiPT09ZS5vcmllbnRhdGlvbj8oeT1rLHg9IngiLGI9TSxfPSJ5Iix3PSEhZS55cGVyaW9kYWxpZ25tZW50KTooeT1NLHg9InkiLGI9ayxfPSJ4Iix3PSEhZS54cGVyaW9kYWxpZ25tZW50KTt2YXIgRSxDLEwsUCxJLHosTz1mdW5jdGlvbih0LGUscixpKXt2YXIgcyxsPWUrIjAiaW4gdCxjPSJkIitlIGluIHQ7aWYoZSBpbiB0fHxsJiZjKXt2YXIgdT1yLm1ha2VDYWxjZGF0YSh0LGUpO3JldHVyblthKHQscixlLHUpLHVdfXM9bD90W2UrIjAiXToibmFtZSJpbiB0JiYoImNhdGVnb3J5Ij09PXIudHlwZXx8bih0Lm5hbWUpJiYtMSE9PVsibGluZWFyIiwibG9nIl0uaW5kZXhPZihyLnR5cGUpfHxvLmlzRGF0ZVRpbWUodC5uYW1lKSYmImRhdGUiPT09ci50eXBlKT90Lm5hbWU6aTtmb3IodmFyIGg9Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP3IucjJjX2p1c3RfaW5kaWNlcyhzKTpyLmQyYyhzLDAsdFtlKyJjYWxlbmRhciJdKSxmPXQuX2xlbmd0aCxwPW5ldyBBcnJheShmKSxkPTA7ZDxmO2QrKylwW2RdPWg7cmV0dXJuW3BdfShlLF8sYixUW1NdKSxEPU9bMF0sUj1PWzFdLEY9by5kaXN0aW5jdFZhbHMoRCksQj1GLnZhbHMsTj1GLm1pbkRpZmYvMixqPSJhbGwiPT09KGUuYm94cG9pbnRzfHxlLnBvaW50cyk/by5pZGVudGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdC52PEUubGZ8fHQudj5FLnVmfTtpZihlLl9oYXNQcmVDb21wU3RhdHMpe3ZhciBVPWVbeF0sVj1mdW5jdGlvbih0KXtyZXR1cm4geS5kMmMoKGVbdF18fFtdKVtyXSl9LHE9MS8wLEg9LTEvMDtmb3Iocj0wO3I8ZS5fbGVuZ3RoO3IrKyl7dmFyIEc9RFtyXTtpZihuKEcpKXtpZigoRT17fSkucG9zPUVbX109Ryx3JiZSJiYoRS5vcmlnX3A9UltyXSksRS5xMT1WKCJxMSIpLEUubWVkPVYoIm1lZGlhbiIpLEUucTM9VigicTMiKSxDPVtdLFUmJm8uaXNBcnJheU9yVHlwZWRBcnJheShVW3JdKSlmb3IoYz0wO2M8VVtyXS5sZW5ndGg7YysrKSh6PXkuZDJjKFVbcl1bY10pKSE9PXMmJih1KEk9e3Y6eixpOltyLGNdfSxlLFtyLGNdKSxDLnB1c2goSSkpO2lmKEUucHRzPUMuc29ydChoKSxQPShMPUVbeF09Qy5tYXAoZikpLmxlbmd0aCxFLm1lZCE9PXMmJkUucTEhPT1zJiZFLnEzIT09cyYmRS5tZWQ+PUUucTEmJkUucTM+PUUubWVkKXt2YXIgWT1WKCJsb3dlcmZlbmNlIik7RS5sZj1ZIT09cyYmWTw9RS5xMT9ZOnAoRSxMLFApO3ZhciBXPVYoInVwcGVyZmVuY2UiKTtFLnVmPVchPT1zJiZXPj1FLnEzP1c6ZChFLEwsUCk7dmFyIFo9VigibWVhbiIpO0UubWVhbj1aIT09cz9aOlA/by5tZWFuKEwsUCk6KEUucTErRS5xMykvMjt2YXIgWD1WKCJzZCIpO0Uuc2Q9WiE9PXMmJlg+PTA/WDpQP28uc3RkZXYoTCxQLEUubWVhbik6RS5xMy1FLnExLEUubG89ZyhFKSxFLnVvPW0oRSk7dmFyIEo9Vigibm90Y2hzcGFuIik7Sj1KIT09cyYmSj4wP0o6dihFLFApLEUubG49RS5tZWQtSixFLnVuPUUubWVkK0o7dmFyIEs9RS5sZixRPUUudWY7ZS5ib3hwb2ludHMmJkwubGVuZ3RoJiYoSz1NYXRoLm1pbihLLExbMF0pLFE9TWF0aC5tYXgoUSxMW1AtMV0pKSxlLm5vdGNoZWQmJihLPU1hdGgubWluKEssRS5sbiksUT1NYXRoLm1heChRLEUudW4pKSxFLm1pbj1LLEUubWF4PVF9ZWxzZXt2YXIgJDtvLndhcm4oWyJJbnZhbGlkIGlucHV0IC0gbWFrZSBzdXJlIHRoYXQgcTEgPD0gbWVkaWFuIDw9IHEzIiwicTEgPSAiK0UucTEsIm1lZGlhbiA9ICIrRS5tZWQsInEzID0gIitFLnEzXS5qb2luKCJcbiIpKSwkPUUubWVkIT09cz9FLm1lZDpFLnExIT09cz9FLnEzIT09cz8oRS5xMStFLnEzKS8yOkUucTE6RS5xMyE9PXM/RS5xMzowLEUubWVkPSQsRS5xMT1FLnEzPSQsRS5sZj1FLnVmPSQsRS5tZWFuPUUuc2Q9JCxFLmxuPUUudW49JCxFLm1pbj1FLm1heD0kfXE9TWF0aC5taW4ocSxFLm1pbiksSD1NYXRoLm1heChILEUubWF4KSxFLnB0czI9Qy5maWx0ZXIoaiksQS5wdXNoKEUpfX1lLl9leHRyZW1lc1t5Ll9pZF09aS5maW5kRXh0cmVtZXMoeSxbcSxIXSx7cGFkZGVkOiEwfSl9ZWxzZXt2YXIgdHQ9eS5tYWtlQ2FsY2RhdGEoZSx4KSxldD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKzEpLGk9MDtpPHI7aSsrKW5baV09dFtpXS1lO3JldHVybiBuW3JdPXRbci0xXStlLG59KEIsTikscnQ9Qi5sZW5ndGgsbnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPVtdO3JldHVybiBlfShydCk7Zm9yKHI9MDtyPGUuX2xlbmd0aDtyKyspaWYoej10dFtyXSxuKHopKXt2YXIgaXQ9by5maW5kQmluKERbcl0sZXQpO2l0Pj0wJiZpdDxydCYmKHUoST17djp6LGk6cn0sZSxyKSxudFtpdF0ucHVzaChJKSl9dmFyIGF0PTEvMCxvdD0tMS8wLHN0PWUucXVhcnRpbGVtZXRob2QsbHQ9ImV4Y2x1c2l2ZSI9PT1zdCxjdD0iaW5jbHVzaXZlIj09PXN0O2ZvcihyPTA7cjxydDtyKyspaWYobnRbcl0ubGVuZ3RoPjApe3ZhciB1dCxodDtpZigoRT17fSkucG9zPUVbX109QltyXSxDPUUucHRzPW50W3JdLnNvcnQoaCksUD0oTD1FW3hdPUMubWFwKGYpKS5sZW5ndGgsRS5taW49TFswXSxFLm1heD1MW1AtMV0sRS5tZWFuPW8ubWVhbihMLFApLEUuc2Q9by5zdGRldihMLFAsRS5tZWFuKSxFLm1lZD1vLmludGVycChMLC41KSxQJTImJihsdHx8Y3QpKWx0Pyh1dD1MLnNsaWNlKDAsUC8yKSxodD1MLnNsaWNlKFAvMisxKSk6Y3QmJih1dD1MLnNsaWNlKDAsUC8yKzEpLGh0PUwuc2xpY2UoUC8yKSksRS5xMT1vLmludGVycCh1dCwuNSksRS5xMz1vLmludGVycChodCwuNSk7ZWxzZSBFLnExPW8uaW50ZXJwKEwsLjI1KSxFLnEzPW8uaW50ZXJwKEwsLjc1KTtFLmxmPXAoRSxMLFApLEUudWY9ZChFLEwsUCksRS5sbz1nKEUpLEUudW89bShFKTt2YXIgZnQ9dihFLFApO0UubG49RS5tZWQtZnQsRS51bj1FLm1lZCtmdCxhdD1NYXRoLm1pbihhdCxFLmxuKSxvdD1NYXRoLm1heChvdCxFLnVuKSxFLnB0czI9Qy5maWx0ZXIoaiksQS5wdXNoKEUpfWUuX2V4dHJlbWVzW3kuX2lkXT1pLmZpbmRFeHRyZW1lcyh5LGUubm90Y2hlZD90dC5jb25jYXQoW2F0LG90XSk6dHQse3BhZGRlZDohMH0pfXJldHVybiBmdW5jdGlvbih0LGUpe2lmKG8uaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7Zm9yKHZhciBuPXRbcl0ucHRzfHxbXSxpPXt9LGE9MDthPG4ubGVuZ3RoO2ErKylpW25bYV0uaV09YTtvLnRhZ1NlbGVjdGVkKG4sZSxpKX19KEEsZSksQS5sZW5ndGg+MD8oQVswXS50PXtudW06VFtTXSxkUG9zOk4scG9zTGV0dGVyOl8sdmFsTGV0dGVyOngsbGFiZWxzOnttZWQ6bCh0LCJtZWRpYW46IiksbWluOmwodCwibWluOiIpLHExOmwodCwicTE6IikscTM6bCh0LCJxMzoiKSxtYXg6bCh0LCJtYXg6IiksbWVhbjoic2QiPT09ZS5ib3htZWFuP2wodCwibWVhbiBceGIxIFx1MDNjMzoiKTpsKHQsIm1lYW46IiksbGY6bCh0LCJsb3dlciBmZW5jZToiKSx1ZjpsKHQsInVwcGVyIGZlbmNlOiIpfX0sVFtTXSsrLEEpOlt7dDp7ZW1wdHk6ITB9fV19O3ZhciBjPXt0ZXh0OiJ0eCIsaG92ZXJ0ZXh0OiJodHgifTtmdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIG4gaW4gYylvLmlzQXJyYXlPclR5cGVkQXJyYXkoZVtuXSkmJihBcnJheS5pc0FycmF5KHIpP28uaXNBcnJheU9yVHlwZWRBcnJheShlW25dW3JbMF1dKSYmKHRbY1tuXV09ZVtuXVtyWzBdXVtyWzFdXSk6dFtjW25dXT1lW25dW3JdKX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQudi1lLnZ9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC52fWZ1bmN0aW9uIHAodCxlLHIpe3JldHVybiAwPT09cj90LnExOk1hdGgubWluKHQucTEsZVtNYXRoLm1pbihvLmZpbmRCaW4oMi41KnQucTEtMS41KnQucTMsZSwhMCkrMSxyLTEpXSl9ZnVuY3Rpb24gZCh0LGUscil7cmV0dXJuIDA9PT1yP3QucTM6TWF0aC5tYXgodC5xMyxlW01hdGgubWF4KG8uZmluZEJpbigyLjUqdC5xMy0xLjUqdC5xMSxlKSwwKV0pfWZ1bmN0aW9uIGcodCl7cmV0dXJuIDQqdC5xMS0zKnQucTN9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gNCp0LnEzLTMqdC5xMX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIDA9PT1lPzA6MS41NyoodC5xMy10LnExKS9NYXRoLnNxcnQoZSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjc5NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDkxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKS5nZXRBeGlzR3JvdXAsbz1bInYiLCJoIl07ZnVuY3Rpb24gcyh0LGUscixvKXt2YXIgcyxsLGMsdT1lLmNhbGNkYXRhLGg9ZS5fZnVsbExheW91dCxmPW8uX2lkLHA9Zi5jaGFyQXQoMCksZD1bXSxnPTA7Zm9yKHM9MDtzPHIubGVuZ3RoO3MrKylmb3IoYz11W3Jbc11dLGw9MDtsPGMubGVuZ3RoO2wrKylkLnB1c2goby5jMmwoY1tsXS5wb3MsITApKSxnKz0oY1tsXS5wdHMyfHxbXSkubGVuZ3RoO2lmKGQubGVuZ3RoKXt2YXIgbT1pLmRpc3RpbmN0VmFscyhkLHt1bml0TWluRGlmZjoiY2F0ZWdvcnkiPT09by50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1vLnR5cGV9KSx2PW0ubWluRGlmZi8yO24ubWluRHRpY2sobyxtLm1pbkRpZmYsbS52YWxzWzBdLCEwKTt2YXIgeT1oWyJ2aW9saW4iPT09dD8iX251bVZpb2xpbnMiOiJfbnVtQm94ZXMiXSx4PSJncm91cCI9PT1oW3QrIm1vZGUiXSYmeT4xLGI9MS1oW3QrImdhcCJdLF89MS1oW3QrImdyb3VwZ2FwIl07Zm9yKHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIHcsVCxrLE0sQSxTLEU9KGM9dVtyW3NdXSlbMF0udHJhY2UsQz1jWzBdLnQsTD1FLndpZHRoLFA9RS5zaWRlO2lmKEwpdz1UPU09TC8yLGs9MDtlbHNlIGlmKHc9dix4KXt2YXIgST1hKGgsby5faWQpK0Uub3JpZW50YXRpb24sej0oaC5fYWxpZ25tZW50T3B0c1tJXXx8e30pW0UuYWxpZ25tZW50Z3JvdXBdfHx7fSxPPU9iamVjdC5rZXlzKHoub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLEQ9T3x8eTtUPXcqYipfL0Qsaz0yKncqKCgoTz9FLl9vZmZzZXRJbmRleDpDLm51bSkrLjUpL0QtLjUpKmIsTT13KmIvRH1lbHNlIFQ9dypiKl8saz0wLE09dztDLmRQb3M9dyxDLmJQb3M9ayxDLmJkUG9zPVQsQy53SG92ZXI9TTt2YXIgUixGLEIsTixqLFUsVj1rK1QscT1Cb29sZWFuKEwpO2lmKCJwb3NpdGl2ZSI9PT1QPyhBPXcqKEw/MTouNSksUj1WLFM9Uj1rKToibmVnYXRpdmUiPT09UD8oQT1SPWssUz13KihMPzE6LjUpLEY9Vik6KEE9Uz13LFI9Rj1WKSwoRS5ib3hwb2ludHN8fEUucG9pbnRzKSYmZz4wKXt2YXIgSD1FLnBvaW50cG9zLEc9RS5qaXR0ZXIsWT1FLm1hcmtlci5zaXplLzIsVz0wO0grRz49MCYmKChXPVYqKEgrRykpPkE/KHE9ITAsaj1ZLEI9Vyk6Vz5SJiYoaj1ZLEI9QSkpLFc8PUEmJihCPUEpO3ZhciBaPTA7SC1HPD0wJiYoKFo9LVYqKEgtRykpPlM/KHE9ITAsVT1ZLE49Wik6Wj5GJiYoVT1ZLE49UykpLFo8PVMmJihOPVMpfWVsc2UgQj1BLE49Uzt2YXIgWD1uZXcgQXJyYXkoYy5sZW5ndGgpO2ZvcihsPTA7bDxjLmxlbmd0aDtsKyspWFtsXT1jW2xdLnBvcztFLl9leHRyZW1lc1tmXT1uLmZpbmRFeHRyZW1lcyhvLFgse3BhZGRlZDpxLHZwYWRtaW51czpOLHZwYWRwbHVzOkIsdnBhZExpbmVhcml6ZWQ6ITAscHBhZG1pbnVzOnt4OlUseTpqfVtwXSxwcGFkcGx1czp7eDpqLHk6VX1bcF19KX19fWUuZXhwb3J0cz17Y3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxuPWUueGF4aXMsaT1lLnlheGlzLGE9MDthPG8ubGVuZ3RoO2ErKyl7Zm9yKHZhciBsPW9bYV0sYz0iaCI9PT1sP2k6bix1PVtdLGg9MDtoPHIubGVuZ3RoO2grKyl7dmFyIGY9cltoXSxwPWZbMF0udCxkPWZbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fCJib3giIT09ZC50eXBlJiYiY2FuZGxlc3RpY2siIT09ZC50eXBlfHxwLmVtcHR5fHwoZC5vcmllbnRhdGlvbnx8InYiKSE9PWx8fGQueGF4aXMhPT1uLl9pZHx8ZC55YXhpcyE9PWkuX2lkfHx1LnB1c2goaCl9cygiYm94Iix0LHUsYyl9fSxzZXRQb3NpdGlvbk9mZnNldDpzfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MDJ9XSw5MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxzPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gdSh0LGUscixhKXtmdW5jdGlvbiBvKHQpe3ZhciBlPTA7cmV0dXJuIHQmJnQubGVuZ3RoJiYoZSs9MSxuLmlzQXJyYXlPclR5cGVkQXJyYXkodFswXSkmJnRbMF0ubGVuZ3RoJiYoZSs9MSkpLGV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbi52YWxpZGF0ZSh0W2VdLGNbZV0pfXZhciB1LGg9cigieSIpLGY9cigieCIpO2lmKCJib3giPT09ZS50eXBlKXt2YXIgcD1yKCJxMSIpLGQ9cigibWVkaWFuIiksZz1yKCJxMyIpO2UuX2hhc1ByZUNvbXBTdGF0cz1wJiZwLmxlbmd0aCYmZCYmZC5sZW5ndGgmJmcmJmcubGVuZ3RoLHU9TWF0aC5taW4obi5taW5Sb3dMZW5ndGgocCksbi5taW5Sb3dMZW5ndGgoZCksbi5taW5Sb3dMZW5ndGgoZykpfXZhciBtLHYseT1vKGgpLHg9byhmKSxiPXkmJm4ubWluUm93TGVuZ3RoKGgpLF89eCYmbi5taW5Sb3dMZW5ndGgoZik7aWYoZS5faGFzUHJlQ29tcFN0YXRzKXN3aXRjaChTdHJpbmcoeCkrU3RyaW5nKHkpKXtjYXNlIjAwIjp2YXIgdz1zKCJ4MCIpfHxzKCJkeCIpO209KHMoInkwIil8fHMoImR5IikpJiYhdz8iaCI6InYiLHY9dTticmVhaztjYXNlIjEwIjptPSJ2Iix2PU1hdGgubWluKHUsXyk7YnJlYWs7Y2FzZSIyMCI6bT0iaCIsdj1NYXRoLm1pbih1LGYubGVuZ3RoKTticmVhaztjYXNlIjAxIjptPSJoIix2PU1hdGgubWluKHUsYik7YnJlYWs7Y2FzZSIwMiI6bT0idiIsdj1NYXRoLm1pbih1LGgubGVuZ3RoKTticmVhaztjYXNlIjEyIjptPSJ2Iix2PU1hdGgubWluKHUsXyxoLmxlbmd0aCk7YnJlYWs7Y2FzZSIyMSI6bT0iaCIsdj1NYXRoLm1pbih1LGYubGVuZ3RoLGIpO2JyZWFrO2Nhc2UiMTEiOnY9MDticmVhaztjYXNlIjIyIjp2YXIgVCxrPSExO2ZvcihUPTA7VDxmLmxlbmd0aDtUKyspaWYoImNhdGVnb3J5Ij09PWwoZltUXSkpe2s9ITA7YnJlYWt9aWYoayltPSJ2Iix2PU1hdGgubWluKHUsXyxoLmxlbmd0aCk7ZWxzZXtmb3IoVD0wO1Q8aC5sZW5ndGg7VCsrKWlmKCJjYXRlZ29yeSI9PT1sKGhbVF0pKXtrPSEwO2JyZWFrfWs/KG09ImgiLHY9TWF0aC5taW4odSxmLmxlbmd0aCxiKSk6KG09InYiLHY9TWF0aC5taW4odSxfLGgubGVuZ3RoKSl9fWVsc2UgeT4wPyhtPSJ2Iix2PXg+MD9NYXRoLm1pbihfLGIpOk1hdGgubWluKGIpKTp4PjA/KG09ImgiLHY9TWF0aC5taW4oXykpOnY9MDtpZih2KXtlLl9sZW5ndGg9djt2YXIgTT1yKCJvcmllbnRhdGlvbiIsbSk7ZS5faGFzUHJlQ29tcFN0YXRzPyJ2Ij09PU0mJjA9PT14PyhyKCJ4MCIsMCkscigiZHgiLDEpKToiaCI9PT1NJiYwPT09eSYmKHIoInkwIiwwKSxyKCJkeSIsMSkpOiJ2Ij09PU0mJjA9PT14P3IoIngwIik6ImgiPT09TSYmMD09PXkmJnIoInkwIiksaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpfWVsc2UgZS52aXNpYmxlPSExfWZ1bmN0aW9uIGgodCxlLHIsaSl7dmFyIGE9aS5wcmVmaXgsbz1uLmNvZXJjZTIodCxlLGMsIm1hcmtlci5vdXRsaWVyY29sb3IiKSxzPXIoIm1hcmtlci5saW5lLm91dGxpZXJjb2xvciIpLGw9Im91dGxpZXJzIjtlLl9oYXNQcmVDb21wU3RhdHM/bD0iYWxsIjoob3x8cykmJihsPSJzdXNwZWN0ZWRvdXRsaWVycyIpO3ZhciB1PXIoYSsicG9pbnRzIixsKTt1PyhyKCJqaXR0ZXIiLCJhbGwiPT09dT8uMzowKSxyKCJwb2ludHBvcyIsImFsbCI9PT11Py0xLjU6MCkscigibWFya2VyLnN5bWJvbCIpLHIoIm1hcmtlci5vcGFjaXR5IikscigibWFya2VyLnNpemUiKSxyKCJtYXJrZXIuY29sb3IiLGUubGluZS5jb2xvcikscigibWFya2VyLmxpbmUuY29sb3IiKSxyKCJtYXJrZXIubGluZS53aWR0aCIpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT11JiYocigibWFya2VyLmxpbmUub3V0bGllcmNvbG9yIixlLm1hcmtlci5jb2xvcikscigibWFya2VyLmxpbmUub3V0bGllcndpZHRoIikpLHIoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIikscigic2VsZWN0ZWQubWFya2VyLnNpemUiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplIikscigidGV4dCIpLHIoImhvdmVydGV4dCIpKTpkZWxldGUgZS5tYXJrZXI7dmFyIGg9cigiaG92ZXJvbiIpOyJhbGwiIT09aCYmLTE9PT1oLmluZGV4T2YoInBvaW50cyIpfHxyKCJob3ZlcnRlbXBsYXRlIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9aWYodSh0LGUscyxpKSwhMSE9PWUudmlzaWJsZSl7byh0LGUsaSxzKTt2YXIgbD1lLl9oYXNQcmVDb21wU3RhdHM7bCYmKHMoImxvd2VyZmVuY2UiKSxzKCJ1cHBlcmZlbmNlIikpLHMoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxzKCJsaW5lLndpZHRoIikscygiZmlsbGNvbG9yIixhLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLC41KSk7dmFyIGY9ITE7aWYobCl7dmFyIHA9cygibWVhbiIpLGQ9cygic2QiKTtwJiZwLmxlbmd0aCYmKGY9ITAsZCYmZC5sZW5ndGgmJihmPSJzZCIpKX1zKCJib3htZWFuIixmKSxzKCJ3aGlza2Vyd2lkdGgiKSxzKCJ3aWR0aCIpLHMoInF1YXJ0aWxlbWV0aG9kIik7dmFyIGc9ITE7aWYobCl7dmFyIG09cygibm90Y2hzcGFuIik7bSYmbS5sZW5ndGgmJihnPSEwKX1lbHNlIG4udmFsaWRhdGUodC5ub3RjaHdpZHRoLGMubm90Y2h3aWR0aCkmJihnPSEwKTtzKCJub3RjaGVkIixnKSYmcygibm90Y2h3aWR0aCIpLGgodCxlLHMse3ByZWZpeDoiYm94In0pfX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaTtmdW5jdGlvbiBhKHQpe3JldHVybiBuLmNvZXJjZShpLl9pbnB1dCxpLGMsdCl9Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBsPShpPXRbb10pLnR5cGU7ImJveCIhPT1sJiYidmlvbGluIiE9PWx8fChyPWkuX2lucHV0LCJncm91cCI9PT1lW2wrIm1vZGUiXSYmcyhyLGksZSxhKSl9fSxoYW5kbGVTYW1wbGVEZWZhdWx0czp1LGhhbmRsZVBvaW50c0RlZmF1bHRzOmh9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo4MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL2Jhci9kZWZhdWx0cyI6ODk2LCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6MTE3OCwiLi9hdHRyaWJ1dGVzIjo5MTd9XSw5MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaG92ZXJPbkJveCYmKHQuaG92ZXJPbkJveD1lLmhvdmVyT25Cb3gpLCJ4VmFsImluIGUmJih0Lng9ZS54VmFsKSwieVZhbCJpbiBlJiYodC55PWUueVZhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdH19LHt9XSw5MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9aS5maWxsVGV4dDtmdW5jdGlvbiBsKHQsZSxyLHMpe3ZhciBsLGMsdSxoLGYscCxkLGcsbSx2LHkseCxiLF8sdz10LmNkLFQ9dC54YSxrPXQueWEsTT13WzBdLnRyYWNlLEE9d1swXS50LFM9InZpb2xpbiI9PT1NLnR5cGUsRT1bXSxDPUEuYmRQb3MsTD1BLndIb3ZlcixQPWZ1bmN0aW9uKHQpe3JldHVybiB1LmMybCh0LnBvcykrQS5iUG9zLXUuYzJsKHApfTtTJiYiYm90aCIhPT1NLnNpZGU/KCJwb3NpdGl2ZSI9PT1NLnNpZGUmJihtPWZ1bmN0aW9uKHQpe3ZhciBlPVAodCk7cmV0dXJuIGEuaW5ib3goZSxlK0wsdil9LHg9QyxiPTApLCJuZWdhdGl2ZSI9PT1NLnNpZGUmJihtPWZ1bmN0aW9uKHQpe3ZhciBlPVAodCk7cmV0dXJuIGEuaW5ib3goZS1MLGUsdil9LHg9MCxiPUMpKToobT1mdW5jdGlvbih0KXt2YXIgZT1QKHQpO3JldHVybiBhLmluYm94KGUtTCxlK0wsdil9LHg9Yj1DKSxfPVM/ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5zcGFuWzBdLWYsdC5zcGFuWzFdLWYsdil9OmZ1bmN0aW9uKHQpe3JldHVybiBhLmluYm94KHQubWluLWYsdC5tYXgtZix2KX0sImgiPT09TS5vcmllbnRhdGlvbj8oZj1lLHA9cixkPV8sZz1tLGw9InkiLHU9ayxjPSJ4IixoPVQpOihmPXIscD1lLGQ9bSxnPV8sbD0ieCIsdT1ULGM9InkiLGg9ayk7dmFyIEk9TWF0aC5taW4oMSxDL01hdGguYWJzKHUucjJjKHUucmFuZ2VbMV0pLXUucjJjKHUucmFuZ2VbMF0pKSk7ZnVuY3Rpb24geih0KXtyZXR1cm4oZCh0KStnKHQpKS8yfXY9dC5tYXhIb3ZlckRpc3RhbmNlLUkseT10Lm1heFNwaWtlRGlzdGFuY2UtSTt2YXIgTz1hLmdldERpc3RhbmNlRnVuY3Rpb24ocyxkLGcseik7aWYoYS5nZXRDbG9zZXN0KHcsTyx0KSwhMT09PXQuaW5kZXgpcmV0dXJuW107dmFyIEQ9d1t0LmluZGV4XSxSPU0ubGluZS5jb2xvcixGPShNLm1hcmtlcnx8e30pLmNvbG9yO28ub3BhY2l0eShSKSYmTS5saW5lLndpZHRoP3QuY29sb3I9UjpvLm9wYWNpdHkoRikmJk0uYm94cG9pbnRzP3QuY29sb3I9Rjp0LmNvbG9yPU0uZmlsbGNvbG9yLHRbbCsiMCJdPXUuYzJwKEQucG9zK0EuYlBvcy1iLCEwKSx0W2wrIjEiXT11LmMycChELnBvcytBLmJQb3MreCwhMCksdFtsKyJMYWJlbFZhbCJdPXZvaWQgMCE9PUQub3JpZ19wP0Qub3JpZ19wOkQucG9zO3ZhciBCPWwrIlNwaWtlIjt0LnNwaWtlRGlzdGFuY2U9eihEKSp5L3YsdFtCXT11LmMycChELnBvcywhMCk7dmFyIE49e30saj1bIm1lZCIsInExIiwicTMiLCJtaW4iLCJtYXgiXTsoTS5ib3htZWFufHwoTS5tZWFubGluZXx8e30pLnZpc2libGUpJiZqLnB1c2goIm1lYW4iKSwoTS5ib3hwb2ludHN8fE0ucG9pbnRzKSYmai5wdXNoKCJsZiIsInVmIik7Zm9yKHZhciBVPTA7VTxqLmxlbmd0aDtVKyspe3ZhciBWPWpbVV07aWYoViBpbiBEJiYhKERbVl1pbiBOKSl7TltEW1ZdXT0hMDt2YXIgcT1EW1ZdLEg9aC5jMnAocSwhMCksRz1pLmV4dGVuZEZsYXQoe30sdCk7Ry5hdHRyPVYsR1tjKyIwIl09R1tjKyIxIl09SCxHW2MrIkxhYmVsVmFsIl09cSxHW2MrIkxhYmVsIl09KEEubGFiZWxzP0EubGFiZWxzW1ZdKyIgIjoiIikrbi5ob3ZlckxhYmVsVGV4dChoLHEpLEcuaG92ZXJPbkJveD0hMCwibWVhbiI9PT1WJiYic2QiaW4gRCYmInNkIj09PU0uYm94bWVhbiYmKEdbYysiZXJyIl09RC5zZCksdC5uYW1lPSIiLHQuc3Bpa2VEaXN0YW5jZT12b2lkIDAsdFtCXT12b2lkIDAsRy5ob3ZlcnRlbXBsYXRlPSExLEUucHVzaChHKX19cmV0dXJuIEV9ZnVuY3Rpb24gYyh0LGUscil7Zm9yKHZhciBuLG8sbCxjPXQuY2QsdT10LnhhLGg9dC55YSxmPWNbMF0udHJhY2UscD11LmMycChlKSxkPWguYzJwKHIpLGc9YS5xdWFkcmF0dXJlKChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModS5jMnAodC54KS1wKS1lLDEtMy9lKX0pLChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoaC5jMnAodC55KS1kKS1lLDEtMy9lKX0pKSxtPSExLHY9MDt2PGMubGVuZ3RoO3YrKyl7bz1jW3ZdO2Zvcih2YXIgeT0wO3k8KG8ucHRzfHxbXSkubGVuZ3RoO3krKyl7dmFyIHg9ZyhsPW8ucHRzW3ldKTt4PD10LmRpc3RhbmNlJiYodC5kaXN0YW5jZT14LG09W3YseV0pfX1pZighbSlyZXR1cm4hMTtsPShvPWNbbVswXV0pLnB0c1ttWzFdXTt2YXIgYj11LmMycChsLngsITApLF89aC5jMnAobC55LCEwKSx3PWwubXJjfHwxO249aS5leHRlbmRGbGF0KHt9LHQse2luZGV4OmwuaSxjb2xvcjooZi5tYXJrZXJ8fHt9KS5jb2xvcixuYW1lOmYubmFtZSx4MDpiLXcseDE6Yit3LHkwOl8tdyx5MTpfK3csc3Bpa2VEaXN0YW5jZTp0LmRpc3RhbmNlLGhvdmVydGVtcGxhdGU6Zi5ob3ZlcnRlbXBsYXRlfSk7dmFyIFQsaz1vLm9yaWdfcCxNPXZvaWQgMCE9PWs/azpvLnBvcztyZXR1cm4iaCI9PT1mLm9yaWVudGF0aW9uPyhUPWgsbi54TGFiZWxWYWw9bC54LG4ueUxhYmVsVmFsPU0pOihUPXUsbi54TGFiZWxWYWw9TSxuLnlMYWJlbFZhbD1sLnkpLG5bVC5faWQuY2hhckF0KDApKyJTcGlrZSJdPVQuYzJwKG8ucG9zLCEwKSxzKGwsZixuKSxufWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT10LmNkWzBdLnRyYWNlLmhvdmVyb24sbz1bXTtyZXR1cm4tMSE9PWEuaW5kZXhPZigiYm94ZXMiKSYmKG89by5jb25jYXQobCh0LGUscixuKSkpLC0xIT09YS5pbmRleE9mKCJwb2ludHMiKSYmKGk9Yyh0LGUscikpLCJjbG9zZXN0Ij09PW4/aT9baV06bzppPyhvLnB1c2goaSksbyk6b30saG92ZXJPbkJveGVzOmwsaG92ZXJPblBvaW50czpjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY1NSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTl9XSw5MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4vc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInN5bWJvbHMiLCJvcmllbnRlZCIsImJveC12aW9saW4iLCJzaG93TGVnZW5kIiwiYm94TGF5b3V0Iiwiem9vbVNjYWxlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4MTIsIi4vYXR0cmlidXRlcyI6OTE3LCIuL2NhbGMiOjkxOCwiLi9jcm9zc190cmFjZV9jYWxjIjo5MTksIi4vZGVmYXVsdHMiOjkyMCwiLi9ldmVudF9kYXRhIjo5MjEsIi4vaG92ZXIiOjkyMiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTI0LCIuL2xheW91dF9kZWZhdWx0cyI6OTI1LCIuL3Bsb3QiOjkyNiwiLi9zZWxlY3QiOjkyNywiLi9zdHlsZSI6OTI4fV0sOTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Ym94bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoib3ZlcmxheSIsZWRpdFR5cGU6ImNhbGMifSxib3hnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZToiY2FsYyJ9LGJveGdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw5MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2Z1bmN0aW9uIG8odCxlLHIsaSxhKXtmb3IodmFyIG89YSsiTGF5b3V0IixzPSExLGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXTtpZihuLnRyYWNlSXMoYyxvKSl7cz0hMDticmVha319cyYmKGkoYSsibW9kZSIpLGkoYSsiZ2FwIiksaShhKyJncm91cGdhcCIpKX1lLmV4cG9ydHM9e3N1cHBseUxheW91dERlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyKXtvKDAsMCxyLChmdW5jdGlvbihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfSksImJveCIpfSxfc3VwcGx5Om99fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5MjR9XSw5MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZnVuY3Rpb24gbyh0LGUscixhKXt2YXIgbyxzLGw9ImgiPT09ci5vcmllbnRhdGlvbixjPWUudmFsLHU9ZS5wb3MsaD0hIXUucmFuZ2VicmVha3MsZj1hLmJQb3MscD1hLndkUG9zfHwwLGQ9YS5iUG9zUHhPZmZzZXR8fDAsZz1yLndoaXNrZXJ3aWR0aHx8MCxtPXIubm90Y2hlZHx8ITEsdj1tPzEtMipyLm5vdGNod2lkdGg6MTtBcnJheS5pc0FycmF5KGEuYmRQb3MpPyhvPWEuYmRQb3NbMF0scz1hLmJkUG9zWzFdKToobz1hLmJkUG9zLHM9YS5iZFBvcyk7dmFyIHk9dC5zZWxlY3RBbGwoInBhdGguYm94IikuZGF0YSgidmlvbGluIiE9PXIudHlwZXx8ci5ib3gudmlzaWJsZT9pLmlkZW50aXR5OltdKTt5LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJjbGFzcyIsImJveCIpLHkuZXhpdCgpLnJlbW92ZSgpLHkuZWFjaCgoZnVuY3Rpb24odCl7aWYodC5lbXB0eSlyZXR1cm4iTTAsMFoiO3ZhciBlPXUuYzJsKHQucG9zK2YsITApLGE9dS5sMnAoZS1vKStkLHk9dS5sMnAoZStzKStkLHg9aD8oYSt5KS8yOnUubDJwKGUpK2QsYj1yLndoaXNrZXJ3aWR0aCxfPWg/YSpiKygxLWIpKng6dS5sMnAoZS1wKStkLHc9aD95KmIrKDEtYikqeDp1LmwycChlK3ApK2QsVD11LmwycChlLW8qdikrZCxrPXUubDJwKGUrcyp2KStkLE09Yy5jMnAodC5xMSwhMCksQT1jLmMycCh0LnEzLCEwKSxTPWkuY29uc3RyYWluKGMuYzJwKHQubWVkLCEwKSxNYXRoLm1pbihNLEEpKzEsTWF0aC5tYXgoTSxBKS0xKSxFPXZvaWQgMD09PXQubGZ8fCExPT09ci5ib3hwb2ludHMsQz1jLmMycChFP3QubWluOnQubGYsITApLEw9Yy5jMnAoRT90Lm1heDp0LnVmLCEwKSxQPWMuYzJwKHQubG4sITApLEk9Yy5jMnAodC51biwhMCk7bD9uLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrUysiLCIrVCsiViIraysiTSIrTSsiLCIrYSsiViIreSsobT8iSCIrUCsiTCIrUysiLCIraysiTCIrSSsiLCIreToiIikrIkgiK0ErIlYiK2ErKG0/IkgiK0krIkwiK1MrIiwiK1QrIkwiK1ArIiwiK2E6IiIpKyJaTSIrTSsiLCIreCsiSCIrQysiTSIrQSsiLCIreCsiSCIrTCsoMD09PWc/IiI6Ik0iK0MrIiwiK18rIlYiK3crIk0iK0wrIiwiK18rIlYiK3cpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrVCsiLCIrUysiSCIraysiTSIrYSsiLCIrTSsiSCIreSsobT8iViIrUCsiTCIraysiLCIrUysiTCIreSsiLCIrSToiIikrIlYiK0ErIkgiK2ErKG0/IlYiK0krIkwiK1QrIiwiK1MrIkwiK2ErIiwiK1A6IiIpKyJaTSIreCsiLCIrTSsiViIrQysiTSIreCsiLCIrQSsiViIrTCsoMD09PWc/IiI6Ik0iK18rIiwiK0MrIkgiK3crIk0iK18rIiwiK0wrIkgiK3cpKX0pKX1mdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBvPWUueCxzPWUueSxsPW4uYmRQb3MsYz1uLmJQb3MsdT1yLmJveHBvaW50c3x8ci5wb2ludHM7aS5zZWVkUHNldWRvUmFuZG9tKCk7dmFyIGg9dC5zZWxlY3RBbGwoImcucG9pbnRzIikuZGF0YSh1P2Z1bmN0aW9uKHQpe3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudD1uLHQudHJhY2U9cn0pKSx0fTpbXSk7aC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicG9pbnRzIiksaC5leGl0KCkucmVtb3ZlKCk7dmFyIGY9aC5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKChmdW5jdGlvbih0KXt2YXIgZSxuLGE9dC5wdHMyLG89TWF0aC5tYXgoKHQubWF4LXQubWluKS8xMCx0LnEzLXQucTEpLHM9MWUtOSpvLGg9LjAxKm8sZj1bXSxwPTA7aWYoci5qaXR0ZXIpe2lmKDA9PT1vKWZvcihwPTEsZj1uZXcgQXJyYXkoYS5sZW5ndGgpLGU9MDtlPGEubGVuZ3RoO2UrKylmW2VdPTE7ZWxzZSBmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZD1NYXRoLm1heCgwLGUtNSksZz1hW2RdLnYsbT1NYXRoLm1pbihhLmxlbmd0aC0xLGUrNSksdj1hW21dLnY7ImFsbCIhPT11JiYoYVtlXS52PHQubGY/dj1NYXRoLm1pbih2LHQubGYpOmc9TWF0aC5tYXgoZyx0LnVmKSk7dmFyIHk9TWF0aC5zcXJ0KGgqKG0tZCkvKHYtZytzKSl8fDA7eT1pLmNvbnN0cmFpbihNYXRoLmFicyh5KSwwLDEpLGYucHVzaCh5KSxwPU1hdGgubWF4KHkscCl9bj0yKnIuaml0dGVyLyhwfHwxKX1mb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgeD1hW2VdLGI9eC52LF89ci5qaXR0ZXI/bipmW2VdKihpLnBzZXVkb1JhbmRvbSgpLS41KTowLHc9dC5wb3MrYytsKihyLnBvaW50cG9zK18pOyJoIj09PXIub3JpZW50YXRpb24/KHgueT13LHgueD1iKTooeC54PXcseC55PWIpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT11JiZiPHQudW8mJmI+dC5sbyYmKHguc289ITApfXJldHVybiBhfSkpO2YuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApLGYuZXhpdCgpLnJlbW92ZSgpLGYuY2FsbChhLnRyYW5zbGF0ZVBvaW50cyxvLHMpfWZ1bmN0aW9uIGwodCxlLHIsYSl7dmFyIG8scyxsPWUudmFsLGM9ZS5wb3MsdT0hIWMucmFuZ2VicmVha3MsaD1hLmJQb3MsZj1hLmJQb3NQeE9mZnNldHx8MCxwPXIuYm94bWVhbnx8KHIubWVhbmxpbmV8fHt9KS52aXNpYmxlO0FycmF5LmlzQXJyYXkoYS5iZFBvcyk/KG89YS5iZFBvc1swXSxzPWEuYmRQb3NbMV0pOihvPWEuYmRQb3Mscz1hLmJkUG9zKTt2YXIgZD10LnNlbGVjdEFsbCgicGF0aC5tZWFuIikuZGF0YSgiYm94Ij09PXIudHlwZSYmci5ib3htZWFufHwidmlvbGluIj09PXIudHlwZSYmci5ib3gudmlzaWJsZSYmci5tZWFubGluZS52aXNpYmxlP2kuaWRlbnRpdHk6W10pO2QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1lYW4iKS5zdHlsZSh7ZmlsbDoibm9uZSIsInZlY3Rvci1lZmZlY3QiOiJub24tc2NhbGluZy1zdHJva2UifSksZC5leGl0KCkucmVtb3ZlKCksZC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1jLmMybCh0LnBvcytoLCEwKSxpPWMubDJwKGUtbykrZixhPWMubDJwKGUrcykrZixkPXU/KGkrYSkvMjpjLmwycChlKStmLGc9bC5jMnAodC5tZWFuLCEwKSxtPWwuYzJwKHQubWVhbi10LnNkLCEwKSx2PWwuYzJwKHQubWVhbit0LnNkLCEwKTsiaCI9PT1yLm9yaWVudGF0aW9uP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitnKyIsIitpKyJWIithKygic2QiPT09cD8ibTAsMEwiK20rIiwiK2QrIkwiK2crIiwiK2krIkwiK3YrIiwiK2QrIloiOiIiKSk6bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK2krIiwiK2crIkgiK2ErKCJzZCI9PT1wPyJtMCwwTCIrZCsiLCIrbSsiTCIraSsiLCIrZysiTCIrZCsiLCIrdisiWiI6IiIpKX0pKX1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGM9ZS54YXhpcyx1PWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBib3hlcyIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaT1uLnNlbGVjdCh0aGlzKSxhPXRbMF0saD1hLnQsZj1hLnRyYWNlOyhoLndkUG9zPWguYmRQb3MqZi53aGlza2Vyd2lkdGgsITAhPT1mLnZpc2libGV8fGguZW1wdHkpP2kucmVtb3ZlKCk6KCJoIj09PWYub3JpZW50YXRpb24/KGU9dSxyPWMpOihlPWMscj11KSxvKGkse3BvczplLHZhbDpyfSxmLGgpLHMoaSx7eDpjLHk6dX0sZixoKSxsKGkse3BvczplLHZhbDpyfSxmLGgpKX0pKX0scGxvdEJveEFuZFdoaXNrZXJzOm8scGxvdFBvaW50czpzLHBsb3RCb3hNZWFuOmx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9saWIiOjc1MCxkMzoxNjl9XSw5Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQuY2QsYT10LnhheGlzLG89dC55YXhpcyxzPVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWZvcihuPTA7bjwoaVtyXS5wdHN8fFtdKS5sZW5ndGg7bisrKWlbcl0ucHRzW25dLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWZvcihuPTA7bjwoaVtyXS5wdHN8fFtdKS5sZW5ndGg7bisrKXt2YXIgbD1pW3JdLnB0c1tuXSxjPWEuYzJwKGwueCksdT1vLmMycChsLnkpO2UuY29udGFpbnMoW2MsdV0sbnVsbCxsLmksdCk/KHMucHVzaCh7cG9pbnROdW1iZXI6bC5pLHg6YS5jMmQobC54KSx5Om8uYzJkKGwueSl9KSxsLnNlbGVjdGVkPTEpOmwuc2VsZWN0ZWQ9MH1yZXR1cm4gc319LHt9XSw5Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpO2UuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXJ8fG4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy50cmFjZS5ib3hlcyIpO28uc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLG8uZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1lWzBdLnRyYWNlLHM9by5saW5lLndpZHRoO2Z1bmN0aW9uIGwodCxlLHIsbil7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIixlKyJweCIpLmNhbGwoaS5zdHJva2UscikuY2FsbChpLmZpbGwsbil9dmFyIGM9ci5zZWxlY3RBbGwoInBhdGguYm94Iik7aWYoImNhbmRsZXN0aWNrIj09PW8udHlwZSljLmVhY2goKGZ1bmN0aW9uKHQpe2lmKCF0LmVtcHR5KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPW9bdC5kaXJdO2woZSxyLmxpbmUud2lkdGgsci5saW5lLmNvbG9yLHIuZmlsbGNvbG9yKSxlLnN0eWxlKCJvcGFjaXR5IixvLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX19KSk7ZWxzZXtsKGMscyxvLmxpbmUuY29sb3Isby5maWxsY29sb3IpLHIuc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6cywic3Ryb2tlLWRhc2hhcnJheSI6MipzKyJweCwiK3MrInB4In0pLmNhbGwoaS5zdHJva2Usby5saW5lLmNvbG9yKTt2YXIgdT1yLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpO2EucG9pbnRTdHlsZSh1LG8sdCl9fSkpfSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLnRyYWNlLGk9ci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKTtuLnNlbGVjdGVkcG9pbnRzP2Euc2VsZWN0ZWRQb2ludFN0eWxlKGksbik6YS5wb2ludFN0eWxlKGksbix0KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzcsZDM6MTY5fV0sOTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsaT10KCIuLi9vaGxjL2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2JveC9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbyh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxhLmxpbmUuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOmEubGluZS53aWR0aCxlZGl0VHlwZToic3R5bGUifSxmaWxsY29sb3I6YS5maWxsY29sb3IsZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4cGVyaW9kOmkueHBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6aS54cGVyaW9kYWxpZ25tZW50LHg6aS54LG9wZW46aS5vcGVuLGhpZ2g6aS5oaWdoLGxvdzppLmxvdyxjbG9zZTppLmNsb3NlLGxpbmU6e3dpZHRoOm4oe30sYS5saW5lLndpZHRoLHt9KSxlZGl0VHlwZToic3R5bGUifSxpbmNyZWFzaW5nOm8oaS5pbmNyZWFzaW5nLmxpbmUuY29sb3IuZGZsdCksZGVjcmVhc2luZzpvKGkuZGVjcmVhc2luZy5saW5lLmNvbG9yLmRmbHQpLHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCx3aGlza2Vyd2lkdGg6bih7fSxhLndoaXNrZXJ3aWR0aCx7ZGZsdDowfSksaG92ZXJsYWJlbDppLmhvdmVybGFiZWx9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi9ib3gvYXR0cmlidXRlcyI6OTE3LCIuLi9vaGxjL2F0dHJpYnV0ZXMiOjExMDR9XSw5MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLG89dCgiLi4vb2hsYy9jYWxjIikuY2FsY0NvbW1vbjtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybnttaW46cixxMTpNYXRoLm1pbih0LG4pLG1lZDpuLHEzOk1hdGgubWF4KHQsbiksbWF4OmV9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbD1pLmdldEZyb21JZCh0LGUueGF4aXMpLGM9aS5nZXRGcm9tSWQodCxlLnlheGlzKSx1PWwubWFrZUNhbGNkYXRhKGUsIngiKSxoPWEoZSxsLCJ4Iix1KSxmPW8odCxlLHUsaCxjLHMpO3JldHVybiBmLmxlbmd0aD8obi5leHRlbmRGbGF0KGZbMF0udCx7bnVtOnIuX251bUJveGVzLGRQb3M6bi5kaXN0aW5jdFZhbHMoaCkubWluRGlmZi8yLHBvc0xldHRlcjoieCIsdmFsTGV0dGVyOiJ5In0pLHIuX251bUJveGVzKyssZik6W3t0OntlbXB0eTohMH19XX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjc5NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vb2hsYy9jYWxjIjoxMTA1fV0sOTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vb2hsYy9vaGxjX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgYT1yKG4rIi5saW5lLmNvbG9yIik7cihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5maWxsY29sb3IiLGkuYWRkT3BhY2l0eShhLC41KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1hKHQsZSxjLGkpPyhvKHQsZSxpLGMse3g6ITB9KSxjKCJsaW5lLndpZHRoIiksbCh0LGUsYywiaW5jcmVhc2luZyIpLGwodCxlLGMsImRlY3JlYXNpbmciKSxjKCJ0ZXh0IiksYygiaG92ZXJ0ZXh0IiksYygid2hpc2tlcndpZHRoIiksaS5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vbGliIjo3NTAsIi4uL29obGMvb2hsY19kZWZhdWx0cyI6MTEwOSwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjExNzgsIi4vYXR0cmlidXRlcyI6OTI5fV0sOTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNhbmRsZXN0aWNrIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic2hvd0xlZ2VuZCIsImNhbmRsZXN0aWNrIiwiYm94TGF5b3V0Il0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi4vYm94L2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLGNyb3NzVHJhY2VDYWxjOnQoIi4uL2JveC9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuLi9ib3gvcGxvdCIpLnBsb3QsbGF5ZXJOYW1lOiJib3hsYXllciIsc3R5bGU6dCgiLi4vYm94L3N0eWxlIikuc3R5bGUsaG92ZXJQb2ludHM6dCgiLi4vb2hsYy9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9vaGxjL3NlbGVjdCIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjgxMiwiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiOjkxOSwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIjo5MjQsIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiOjkyNSwiLi4vYm94L3Bsb3QiOjkyNiwiLi4vYm94L3N0eWxlIjo5MjgsIi4uL29obGMvaG92ZXIiOjExMDcsIi4uL29obGMvc2VsZWN0IjoxMTExLCIuL2F0dHJpYnV0ZXMiOjkyOSwiLi9jYWxjIjo5MzAsIi4vZGVmYXVsdHMiOjkzMX1dLDkzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfZGVmYXVsdHMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXthKCJhIil8fChhKCJkYSIpLGEoImEwIikpLGEoImIiKXx8KGEoImRiIiksYSgiYjAiKSksZnVuY3Rpb24odCxlLHIsYSl7WyJhYXhpcyIsImJheGlzIl0uZm9yRWFjaCgoZnVuY3Rpb24obyl7dmFyIHM9by5jaGFyQXQoMCksbD10W29dfHx7fSxjPWkubmV3Q29udGFpbmVyKGUsbyksdT17dGlja2ZvbnQ6IngiLGlkOnMrImF4aXMiLGxldHRlcjpzLGZvbnQ6ZS5mb250LG5hbWU6byxkYXRhOnRbc10sY2FsZW5kYXI6ZS5jYWxlbmRhcixkZmx0Q29sb3I6YSxiZ0NvbG9yOnIucGFwZXJfYmdjb2xvcixmdWxsTGF5b3V0OnJ9O24obCxjLHUpLGMuX2NhdGVnb3JpZXM9Yy5fY2F0ZWdvcmllc3x8W10sdFtvXXx8Ii0iPT09bC50eXBlfHwodFtvXT17dHlwZTpsLnR5cGV9KX0pKX0odCxlLHIsbyl9fSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi9heGlzX2RlZmF1bHRzIjo5Mzh9XSw5MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZighbihlKXx8cj49MTApcmV0dXJuIG51bGw7Zm9yKHZhciBpPTEvMCxhPS0xLzAsbz1lLmxlbmd0aCxzPTA7czxvO3MrKyl7dmFyIGw9ZVtzXTtpZihuKGwpKXt2YXIgYz10KGwscisxKTtjJiYoaT1NYXRoLm1pbihjWzBdLGkpLGE9TWF0aC5tYXgoY1sxXSxhKSl9ZWxzZSBpPU1hdGgubWluKGwsaSksYT1NYXRoLm1heChsLGEpfXJldHVybltpLGFdfSh0LDApfX0seyIuLi8uLi9saWIiOjc1MH1dLDkzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4vYXhpc19hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPW4oe2VkaXRUeXBlOiJjYWxjIn0pO28uZmFtaWx5LmRmbHQ9JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsby5zaXplLmRmbHQ9MTIsby5jb2xvci5kZmx0PWEuZGVmYXVsdExpbmUsZS5leHBvcnRzPXtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxhMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkYTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGIwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGRiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGNoZWF0ZXJzbG9wZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhYXhpczppLGJheGlzOmksZm9udDpvLGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sdHJhbnNmb3Jtczp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjE0LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgyNywiLi9heGlzX2F0dHJpYnV0ZXMiOjkzN31dLDkzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbCxjLHUsaCxmLHAsZCxnLG0sdix5PW4ocik/ImEiOiJiIix4PSgiYSI9PT15P3QuYWF4aXM6dC5iYXhpcykuc21vb3RoaW5nLGI9ImEiPT09eT90LmEyaTp0LmIyaixfPSJhIj09PXk/cjppLHc9ImEiPT09eT9pOnIsVD0iYSI9PT15P2UuYS5sZW5ndGg6ZS5iLmxlbmd0aCxrPSJhIj09PXk/ZS5iLmxlbmd0aDplLmEubGVuZ3RoLE09TWF0aC5mbG9vcigiYSI9PT15P3QuYjJqKHcpOnQuYTJpKHcpKSxBPSJhIj09PXk/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsTSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxNLGUpfTt4JiYocz1NYXRoLm1heCgwLE1hdGgubWluKGstMixNKSksbD1NLXMsbz0iYSI9PT15P2Z1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxzLHIsbCl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10scyxlLGwscil9KTt2YXIgUz1iKF9bMF0pLEU9YihfWzFdKSxDPVM8RT8xOi0xLEw9MWUtOCooRS1TKSxQPUM+MD9NYXRoLmZsb29yOk1hdGguY2VpbCxJPUM+MD9NYXRoLmNlaWw6TWF0aC5mbG9vcix6PUM+MD9NYXRoLm1pbjpNYXRoLm1heCxPPUM+MD9NYXRoLm1heDpNYXRoLm1pbixEPVAoUytMKSxSPUkoRS1MKSxGPVtbaD1BKFMpXV07Zm9yKGE9RDthKkM8UipDO2ErPUMpYz1bXSxnPU8oUyxhKSx2PShtPXooRSxhK0MpKS1nLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihULTIsTWF0aC5mbG9vciguNSooZyttKSkpKSxmPUEobSkseCYmKHA9byh1LGctdSksZD1vKHUsbS11KSxjLnB1c2goW2hbMF0rcFswXS8zKnYsaFsxXStwWzFdLzMqdl0pLGMucHVzaChbZlswXS1kWzBdLzMqdixmWzFdLWRbMV0vMyp2XSkpLGMucHVzaChmKSxGLnB1c2goYyksaD1mO3JldHVybiBGfX0seyIuLi8uLi9saWIiOjc1MH1dLDkzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7dCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKS5GT1JNQVRfTElOSyx0KCIuLi8uLi9jb25zdGFudHMvZG9jcyIpLlRJTUVfRk9STUFUX0xJTks7ZS5leHBvcnRzPXtjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxtaW46MCxtYXg6MS4zLGVkaXRUeXBlOiJjYWxjIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJkYXRlIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyJ9LGF1dG9yYW5nZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwicmV2ZXJzZWQiXSxkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub3JtYWwiLCJ0b3plcm8iLCJub25uZWdhdGl2ZSJdLGRmbHQ6Im5vcm1hbCIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn1dfSxmaXhlZHJhbmdlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY2hlYXRlcnR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZGV4IiwidmFsdWUiXSxkZmx0OiJ2YWx1ZSIsZWRpdFR5cGU6ImNhbGMifSx0aWNrbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiYXJyYXkiXSxkZmx0OiJhcnJheSIsZWRpdFR5cGU6ImNhbGMifSxudGlja3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsImVuZCIsImJvdGgiLCJub25lIl0sZGZsdDoic3RhcnQiLGVkaXRUeXBlOiJjYWxjIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGlja2FuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMifSx0aWNrcHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja3N1ZmZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJlIiwiRSIsInBvd2VyIiwiU0kiLCJCIl0sZGZsdDoiQiIsZWRpdFR5cGU6ImNhbGMifSxtaW5leHBvbmVudDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjMsbWluOjAsZWRpdFR5cGU6ImNhbGMifSxzZXBhcmF0ZXRob3VzYW5kczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb3JtYXRzdG9wczpvKGEudGlja2Zvcm1hdHN0b3BzLCJjYWxjIiwiZnJvbS1yb290IiksY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVscGFkZGluZzp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9LGxhYmVscHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJjYWxjIn0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWlub3JncmlkY291bnQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmxpZ2h0TGluZSxlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxzdGFydGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxlbmRsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx0aWNrMDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkdGljazp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxhcnJheXRpY2swOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxhcnJheWR0aWNrOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksdGl0bGVvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMCxlZGl0VHlwZToiY2FsYyJ9fSxlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjE0LCIuLi8uLi9jb25zdGFudHMvZG9jcyI6NzIwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3ODEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODEzLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgyN31dLDkzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5hZGRPcGFjaXR5LGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBmPXIubGV0dGVyLHA9ci5mb250fHx7fSxkPW5bZisiYXhpcyJdO2Z1bmN0aW9uIGcocixuKXtyZXR1cm4gby5jb2VyY2UodCxlLGQscixuKX1mdW5jdGlvbiBtKHIsbil7cmV0dXJuIG8uY29lcmNlMih0LGUsZCxyLG4pfXIubmFtZSYmKGUuX25hbWU9ci5uYW1lLGUuX2lkPXIubmFtZSk7dmFyIHY9ZygidHlwZSIpOygiLSI9PT12JiYoci5kYXRhJiZmdW5jdGlvbih0LGUpe2lmKCItIiE9PXQudHlwZSlyZXR1cm47dmFyIHI9dC5faWQuY2hhckF0KDApLG49dFtyKyJjYWxlbmRhciJdO3QudHlwZT1oKGUsbil9KGUsci5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnY9dC50eXBlPWUudHlwZSksZygic21vb3RoaW5nIiksZygiY2hlYXRlcnR5cGUiKSxnKCJzaG93dGlja2xhYmVscyIpLGcoImxhYmVscHJlZml4IixmKyIgPSAiKSxnKCJsYWJlbHN1ZmZpeCIpLGcoInNob3d0aWNrcHJlZml4IiksZygic2hvd3RpY2tzdWZmaXgiKSxnKCJzZXBhcmF0ZXRob3VzYW5kcyIpLGcoInRpY2tmb3JtYXQiKSxnKCJleHBvbmVudGZvcm1hdCIpLGcoIm1pbmV4cG9uZW50IiksZygic2hvd2V4cG9uZW50IiksZygiY2F0ZWdvcnlvcmRlciIpLGcoInRpY2ttb2RlIiksZygidGlja3ZhbHMiKSxnKCJ0aWNrdGV4dCIpLGcoInRpY2swIiksZygiZHRpY2siKSwiYXJyYXkiPT09ZS50aWNrbW9kZSYmKGcoImFycmF5dGljazAiKSxnKCJhcnJheWR0aWNrIikpLGcoImxhYmVscGFkZGluZyIpLGUuX2hvdmVydGl0bGU9ZiwiZGF0ZSI9PT12KSYmYS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIsci5jYWxlbmRhcik7dShlLHIuZnVsbExheW91dCksZS5jMnA9by5pZGVudGl0eTt2YXIgeT1nKCJjb2xvciIsci5kZmx0Q29sb3IpLHg9eT09PXQuY29sb3I/eTpwLmNvbG9yO2coInRpdGxlLnRleHQiKSYmKG8uY29lcmNlRm9udChnLCJ0aXRsZS5mb250Iix7ZmFtaWx5OnAuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqcC5zaXplKSxjb2xvcjp4fSksZygidGl0bGUub2Zmc2V0IikpLGcoInRpY2thbmdsZSIpLGcoImF1dG9yYW5nZSIsIWUuaXNWYWxpZFJhbmdlKHQucmFuZ2UpKSYmZygicmFuZ2Vtb2RlIiksZygicmFuZ2UiKSxlLmNsZWFuUmFuZ2UoKSxnKCJmaXhlZHJhbmdlIikscyh0LGUsZyx2KSxsKHQsZSxnLHYsciksYyh0LGUsZyx7ZGF0YTpyLmRhdGEsZGF0YUF0dHI6Zn0pO3ZhciBiPW0oImdyaWRjb2xvciIsaSh5LC4zKSksXz1tKCJncmlkd2lkdGgiKSx3PWcoInNob3dncmlkIik7d3x8KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkd2lkdGgpO3ZhciBUPW0oInN0YXJ0bGluZWNvbG9yIix5KSxrPW0oInN0YXJ0bGluZXdpZHRoIixfKTtnKCJzdGFydGxpbmUiLGUuc2hvd2dyaWR8fCEhVHx8ISFrKXx8KGRlbGV0ZSBlLnN0YXJ0bGluZWNvbG9yLGRlbGV0ZSBlLnN0YXJ0bGluZXdpZHRoKTt2YXIgTT1tKCJlbmRsaW5lY29sb3IiLHkpLEE9bSgiZW5kbGluZXdpZHRoIixfKTtyZXR1cm4gZygiZW5kbGluZSIsZS5zaG93Z3JpZHx8ISFNfHwhIUEpfHwoZGVsZXRlIGUuZW5kbGluZWNvbG9yLGRlbGV0ZSBlLmVuZGxpbmV3aWR0aCksdz8oZygibWlub3JncmlkY291bnQiKSxnKCJtaW5vcmdyaWR3aWR0aCIsXyksZygibWlub3JncmlkY29sb3IiLGkoYiwuMDYpKSxlLm1pbm9yZ3JpZGNvdW50fHwoZGVsZXRlIGUubWlub3Jncmlkd2lkdGgsZGVsZXRlIGUubWlub3JncmlkY29sb3IpKTooZGVsZXRlIGUuZ3JpZGNvbG9yLGRlbGV0ZSBlLmdyaWRXaWR0aCksIm5vbmUiPT09ZS5zaG93dGlja2xhYmVscyYmKGRlbGV0ZSBlLnRpY2tmb250LGRlbGV0ZSBlLnRpY2thbmdsZSxkZWxldGUgZS5zaG93ZXhwb25lbnQsZGVsZXRlIGUuZXhwb25lbnRmb3JtYXQsZGVsZXRlIGUubWluZXhwb25lbnQsZGVsZXRlIGUudGlja2Zvcm1hdCxkZWxldGUgZS5zaG93dGlja3N1ZmZpeCxkZWxldGUgZS5zaG93dGlja3ByZWZpeCksZS5zaG93dGlja3N1ZmZpeHx8ZGVsZXRlIGUudGlja3N1ZmZpeCxlLnNob3d0aWNrcHJlZml4fHxkZWxldGUgZS50aWNrcHJlZml4LGcoInRpY2ttb2RlIiksZX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiOjgwMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo4MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCI6ODE5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6ODIwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6ODIyLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2F0dHJpYnV0ZXMiOjkzNX1dLDkzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheTFELGE9dCgiLi9jaGVhdGVyX2Jhc2lzIiksbz10KCIuL2FycmF5X21pbm1heCIpLHM9dCgiLi9jYWxjX2dyaWRsaW5lcyIpLGw9dCgiLi9jYWxjX2xhYmVscyIpLGM9dCgiLi9jYWxjX2NsaXBwYXRoIiksdT10KCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5IiksaD10KCIuL3Ntb290aF9maWxsXzJkX2FycmF5IiksZj10KCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5eiIpLHA9dCgiLi9zZXRfY29udmVydCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4uZ2V0RnJvbUlkKHQsZS54YXhpcyksZD1uLmdldEZyb21JZCh0LGUueWF4aXMpLGc9ZS5hYXhpcyxtPWUuYmF4aXMsdj1lLngseT1lLnkseD1bXTt2JiZpKHYpJiZ4LnB1c2goIngiKSx5JiZpKHkpJiZ4LnB1c2goInkiKSx4Lmxlbmd0aCYmZihlLGcsbSwiYSIsImIiLHgpO3ZhciBiPWUuX2E9ZS5fYXx8ZS5hLF89ZS5fYj1lLl9ifHxlLmI7dj1lLl94fHxlLngseT1lLl95fHxlLnk7dmFyIHc9e307aWYoZS5fY2hlYXRlcil7dmFyIFQ9ImluZGV4Ij09PWcuY2hlYXRlcnR5cGU/Yi5sZW5ndGg6YixrPSJpbmRleCI9PT1tLmNoZWF0ZXJ0eXBlP18ubGVuZ3RoOl87dj1hKFQsayxlLmNoZWF0ZXJzbG9wZSl9ZS5feD12PXUodiksZS5feT15PXUoeSksaCh2LGIsXyksaCh5LGIsXykscChlKSxlLnNldFNjYWxlKCk7dmFyIE09byh2KSxBPW8oeSksUz0uNSooTVsxXS1NWzBdKSxFPS41KihNWzFdK01bMF0pLEM9LjUqKEFbMV0tQVswXSksTD0uNSooQVsxXStBWzBdKTtyZXR1cm4gTT1bRS0xLjMqUyxFKzEuMypTXSxBPVtMLTEuMypDLEwrMS4zKkNdLGUuX2V4dHJlbWVzW3IuX2lkXT1uLmZpbmRFeHRyZW1lcyhyLE0se3BhZGRlZDohMH0pLGUuX2V4dHJlbWVzW2QuX2lkXT1uLmZpbmRFeHRyZW1lcyhkLEEse3BhZGRlZDohMH0pLHMoZSwiYSIsImIiKSxzKGUsImIiLCJhIiksbChlLGcpLGwoZSxtKSx3LmNsaXBzZWdtZW50cz1jKGUuX3hjdHJsLGUuX3ljdHJsLGcsbSksdy54PXYsdy55PXksdy5hPWIsdy5iPV8sW3ddfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSI6MTAzOCwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjEwNDAsIi4vYXJyYXlfbWlubWF4Ijo5MzQsIi4vY2FsY19jbGlwcGF0aCI6OTQwLCIuL2NhbGNfZ3JpZGxpbmVzIjo5NDEsIi4vY2FsY19sYWJlbHMiOjk0MiwiLi9jaGVhdGVyX2Jhc2lzIjo5NDQsIi4vc2V0X2NvbnZlcnQiOjk1NywiLi9zbW9vdGhfZmlsbF8yZF9hcnJheSI6OTU4fV0sOTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1bXSxsPSEhci5zbW9vdGhpbmcsYz0hIW4uc21vb3RoaW5nLHU9dFswXS5sZW5ndGgtMSxoPXQubGVuZ3RoLTE7Zm9yKGk9MCxhPVtdLG89W107aTw9dTtpKyspYVtpXT10WzBdW2ldLG9baV09ZVswXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9MCxhPVtdLG89W107aTw9aDtpKyspYVtpXT10W2ldW3VdLG9baV09ZVtpXVt1XTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6Y30pLGk9dSxhPVtdLG89W107aT49MDtpLS0pYVt1LWldPXRbaF1baV0sb1t1LWldPWVbaF1baV07Zm9yKHMucHVzaCh7eDphLHk6byxiaWN1YmljOmx9KSxpPWgsYT1bXSxvPVtdO2k+PTA7aS0tKWFbaC1pXT10W2ldWzBdLG9baC1pXT1lW2ldWzBdO3JldHVybiBzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpjfSksc319LHt9XSw5NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHYseSx4PXRbIl8iK2VdLGI9dFtlKyJheGlzIl0sXz1iLl9ncmlkbGluZXM9W10sdz1iLl9taW5vcmdyaWRsaW5lcz1bXSxUPWIuX2JvdW5kYXJ5bGluZXM9W10saz10WyJfIityXSxNPXRbcisiYXhpcyJdOyJhcnJheSI9PT1iLnRpY2ttb2RlJiYoYi50aWNrdmFscz14LnNsaWNlKCkpO3ZhciBBPXQuX3hjdHJsLFM9dC5feWN0cmwsRT1BWzBdLmxlbmd0aCxDPUEubGVuZ3RoLEw9dC5fYS5sZW5ndGgsUD10Ll9iLmxlbmd0aDtuLnByZXBUaWNrcyhiKSwiYXJyYXkiPT09Yi50aWNrbW9kZSYmZGVsZXRlIGIudGlja3ZhbHM7dmFyIEk9Yi5zbW9vdGhpbmc/MzoxO2Z1bmN0aW9uIHoobil7dmFyIGksYSxvLHMsbCxjLHUsaCxwLGQsZyxtLHY9W10seT1bXSx4PXt9O2lmKCJiIj09PWUpZm9yKGE9dC5iMmoobiksbz1NYXRoLmZsb29yKE1hdGgubWF4KDAsTWF0aC5taW4oUC0yLGEpKSkscz1hLW8seC5sZW5ndGg9UCx4LmNyb3NzTGVuZ3RoPUwseC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sZSxhKX0seC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLG8scixzKX0saT0wO2k8TDtpKyspYz1NYXRoLm1pbihMLTIsaSksdT1pLWMsaD10LmV2YWx4eShbXSxpLGEpLE0uc21vb3RoaW5nJiZpPjAmJihwPXQuZHh5ZGkoW10saS0xLG8sMCxzKSx2LnB1c2gobFswXStwWzBdLzMpLHkucHVzaChsWzFdK3BbMV0vMyksZD10LmR4eWRpKFtdLGktMSxvLDEscyksdi5wdXNoKGhbMF0tZFswXS8zKSx5LnB1c2goaFsxXS1kWzFdLzMpKSx2LnB1c2goaFswXSkseS5wdXNoKGhbMV0pLGw9aDtlbHNlIGZvcihpPXQuYTJpKG4pLGM9TWF0aC5mbG9vcihNYXRoLm1heCgwLE1hdGgubWluKEwtMixpKSkpLHU9aS1jLHgubGVuZ3RoPUwseC5jcm9zc0xlbmd0aD1QLHgueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGksZSl9LHguZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10sYyxlLHUscil9LGE9MDthPFA7YSsrKW89TWF0aC5taW4oUC0yLGEpLHM9YS1vLGg9dC5ldmFseHkoW10saSxhKSxNLnNtb290aGluZyYmYT4wJiYoZz10LmR4eWRqKFtdLGMsYS0xLHUsMCksdi5wdXNoKGxbMF0rZ1swXS8zKSx5LnB1c2gobFsxXStnWzFdLzMpLG09dC5keHlkaihbXSxjLGEtMSx1LDEpLHYucHVzaChoWzBdLW1bMF0vMykseS5wdXNoKGhbMV0tbVsxXS8zKSksdi5wdXNoKGhbMF0pLHkucHVzaChoWzFdKSxsPWg7cmV0dXJuIHguYXhpc0xldHRlcj1lLHguYXhpcz1iLHguY3Jvc3NBeGlzPU0seC52YWx1ZT1uLHguY29uc3R2YXI9cix4LmluZGV4PWYseC54PXYseC55PXkseC5zbW9vdGhpbmc9TS5zbW9vdGhpbmcseH1mdW5jdGlvbiBPKG4pe3ZhciBpLGEsbyxzLGwsYz1bXSx1PVtdLGg9e307aWYoaC5sZW5ndGg9eC5sZW5ndGgsaC5jcm9zc0xlbmd0aD1rLmxlbmd0aCwiYiI9PT1lKWZvcihvPU1hdGgubWF4KDAsTWF0aC5taW4oUC0yLG4pKSxsPU1hdGgubWluKDEsTWF0aC5tYXgoMCxuLW8pKSxoLnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLG4pfSxoLmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLGwpfSxpPTA7aTxFO2krKyljW2ldPUFbbipJXVtpXSx1W2ldPVNbbipJXVtpXTtlbHNlIGZvcihhPU1hdGgubWF4KDAsTWF0aC5taW4oTC0yLG4pKSxzPU1hdGgubWluKDEsTWF0aC5tYXgoMCxuLWEpKSxoLnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxuLGUpfSxoLmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLGEsZSxzLHIpfSxpPTA7aTxDO2krKyljW2ldPUFbaV1bbipJXSx1W2ldPVNbaV1bbipJXTtyZXR1cm4gaC5heGlzTGV0dGVyPWUsaC5heGlzPWIsaC5jcm9zc0F4aXM9TSxoLnZhbHVlPXhbbl0saC5jb25zdHZhcj1yLGguaW5kZXg9bixoLng9YyxoLnk9dSxoLnNtb290aGluZz1NLnNtb290aGluZyxofWlmKCJhcnJheSI9PT1iLnRpY2ttb2RlKXtmb3IobD01ZS0xNSx1PShjPVtNYXRoLmZsb29yKCh4Lmxlbmd0aC0xLWIuYXJyYXl0aWNrMCkvYi5hcnJheWR0aWNrKigxK2wpKSxNYXRoLmNlaWwoLWIuYXJyYXl0aWNrMC9iLmFycmF5ZHRpY2svKDErbCkpXS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSkpWzBdLTEsaD1jWzFdKzEsZj11O2Y8aDtmKyspKG89Yi5hcnJheXRpY2swK2IuYXJyYXlkdGljaypmKTwwfHxvPngubGVuZ3RoLTF8fF8ucHVzaChpKE8obykse2NvbG9yOmIuZ3JpZGNvbG9yLHdpZHRoOmIuZ3JpZHdpZHRofSkpO2ZvcihmPXU7ZjxoO2YrKylpZihzPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqZixnPU1hdGgubWluKHMrYi5hcnJheWR0aWNrLHgubGVuZ3RoLTEpLCEoczwwfHxzPngubGVuZ3RoLTF8fGc8MHx8Zz54Lmxlbmd0aC0xKSlmb3IobT14W3NdLHY9eFtnXSxhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoeT1nLXMpPD0wfHwoZD1tKyh2LW0pKihhKzEpLyhiLm1pbm9yZ3JpZGNvdW50KzEpKihiLmFycmF5ZHRpY2sveSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoeihkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZULnB1c2goaShPKDApLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZULnB1c2goaShPKHgubGVuZ3RoLTEpLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX1lbHNle2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHhbeC5sZW5ndGgtMV0tYi50aWNrMCkvYi5kdGljayooMStsKSksTWF0aC5jZWlsKCh4WzBdLWIudGljazApL2IuZHRpY2svKDErbCkpXS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSkpWzBdLGg9Y1sxXSxmPXU7Zjw9aDtmKyspcD1iLnRpY2swK2IuZHRpY2sqZixfLnB1c2goaSh6KHApLHtjb2xvcjpiLmdyaWRjb2xvcix3aWR0aDpiLmdyaWR3aWR0aH0pKTtmb3IoZj11LTE7ZjxoKzE7ZisrKWZvcihwPWIudGljazArYi5kdGljaypmLGE9MDthPGIubWlub3JncmlkY291bnQ7YSsrKShkPXArYi5kdGljayooYSsxKS8oYi5taW5vcmdyaWRjb3VudCsxKSk8eFswXXx8ZD54W3gubGVuZ3RoLTFdfHx3LnB1c2goaSh6KGQpLHtjb2xvcjpiLm1pbm9yZ3JpZGNvbG9yLHdpZHRoOmIubWlub3Jncmlkd2lkdGh9KSk7Yi5zdGFydGxpbmUmJlQucHVzaChpKHooeFswXSkse2NvbG9yOmIuc3RhcnRsaW5lY29sb3Isd2lkdGg6Yi5zdGFydGxpbmV3aWR0aH0pKSxiLmVuZGxpbmUmJlQucHVzaChpKHooeFt4Lmxlbmd0aC0xXSkse2NvbG9yOmIuZW5kbGluZWNvbG9yLHdpZHRoOmIuZW5kbGluZXdpZHRofSkpfX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5fV0sOTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scz1lLl9sYWJlbHM9W10sbD1lLl9ncmlkbGluZXM7Zm9yKHI9MDtyPGwubGVuZ3RoO3IrKylvPWxbcl0sLTEhPT1bInN0YXJ0IiwiYm90aCJdLmluZGV4T2YoZS5zaG93dGlja2xhYmVscykmJihhPW4udGlja1RleHQoZSxvLnZhbHVlKSxpKGEse3ByZWZpeDp2b2lkIDAsc3VmZml4OnZvaWQgMCxlbmRBbmNob3I6ITAseHk6by54eSgwKSxkeHk6by5keHkoMCwwKSxheGlzOm8uYXhpcyxsZW5ndGg6by5jcm9zc0F4aXMubGVuZ3RoLGZvbnQ6by5heGlzLnRpY2tmb250LGlzRmlyc3Q6MD09PXIsaXNMYXN0OnI9PT1sLmxlbmd0aC0xfSkscy5wdXNoKGEpKSwtMSE9PVsiZW5kIiwiYm90aCJdLmluZGV4T2YoZS5zaG93dGlja2xhYmVscykmJihhPW4udGlja1RleHQoZSxvLnZhbHVlKSxpKGEse2VuZEFuY2hvcjohMSx4eTpvLnh5KG8uY3Jvc3NMZW5ndGgtMSksZHh5Om8uZHh5KG8uY3Jvc3NMZW5ndGgtMiwxKSxheGlzOm8uYXhpcyxsZW5ndGg6by5jcm9zc0F4aXMubGVuZ3RoLGZvbnQ6by5heGlzLnRpY2tmb250LGlzRmlyc3Q6MD09PXIsaXNMYXN0OnI9PT1sLmxlbmd0aC0xfSkscy5wdXNoKGEpKX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5fV0sOTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10WzBdLWVbMF0sYT10WzFdLWVbMV0sbz1yWzBdLWVbMF0scz1yWzFdLWVbMV0sbD1NYXRoLnBvdyhpKmkrYSphLC4yNSksYz1NYXRoLnBvdyhvKm8rcypzLC4yNSksdT0oYypjKmktbCpsKm8pKm4saD0oYypjKmEtbCpsKnMpKm4sZj1jKihsK2MpKjMscD1sKihsK2MpKjM7cmV0dXJuW1tlWzBdKyhmJiZ1L2YpLGVbMV0rKGYmJmgvZildLFtlWzBdLShwJiZ1L3ApLGVbMV0tKHAmJmgvcCldXX19LHt9XSw5NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzLGwsYyx1PVtdLGg9bih0KT90Lmxlbmd0aDp0LGY9bihlKT9lLmxlbmd0aDplLHA9bih0KT90Om51bGwsZD1uKGUpP2U6bnVsbDtwJiYobz0ocC5sZW5ndGgtMSkvKHBbcC5sZW5ndGgtMV0tcFswXSkvKGgtMSkpLGQmJihzPShkLmxlbmd0aC0xKS8oZFtkLmxlbmd0aC0xXS1kWzBdKS8oZi0xKSk7dmFyIGc9MS8wLG09LTEvMDtmb3IoYT0wO2E8ZjthKyspZm9yKHVbYV09W10sbD1kPyhkW2FdLWRbMF0pKnM6YS8oZi0xKSxpPTA7aTxoO2krKyljPShwPyhwW2ldLXBbMF0pKm86aS8oaC0xKSktbCpyLGc9TWF0aC5taW4oYyxnKSxtPU1hdGgubWF4KGMsbSksdVthXVtpXT1jO3ZhciB2PTEvKG0tZykseT0tZyp2O2ZvcihhPTA7YTxmO2ErKylmb3IoaT0wO2k8aDtpKyspdVthXVtpXT12KnVbYV1baV0reTtyZXR1cm4gdX19LHsiLi4vLi4vbGliIjo3NTB9XSw5NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jYXRtdWxsX3JvbSIpLGk9dCgiLi4vLi4vbGliIikuZW5zdXJlQXJyYXk7ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49LS41KnJbMF0rMS41KmVbMF0saT0tLjUqclsxXSsxLjUqZVsxXTtyZXR1cm5bKDIqbit0WzBdKS8zLCgyKmkrdFsxXSkvM119ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYyx1LGgsZixwLGQsZyxtLHYseSx4PXJbMF0ubGVuZ3RoLGI9ci5sZW5ndGgsXz1zPzMqeC0yOngsdz1sPzMqYi0yOmI7Zm9yKHQ9aSh0LHcpLGU9aShlLHcpLGg9MDtoPHc7aCsrKXRbaF09aSh0W2hdLF8pLGVbaF09aShlW2hdLF8pO2Zvcih1PTAsZj0wO3U8Yjt1KyssZis9bD8zOjEpZm9yKHA9dFtmXSxkPWVbZl0sZz1yW3VdLG09b1t1XSxjPTAsaD0wO2M8eDtjKyssaCs9cz8zOjEpcFtoXT1nW2NdLGRbaF09bVtjXTtpZihzKWZvcih1PTAsZj0wO3U8Yjt1KyssZis9bD8zOjEpe2ZvcihjPTEsaD0zO2M8eC0xO2MrKyxoKz0zKXY9bihbclt1XVtjLTFdLG9bdV1bYy0xXV0sW3JbdV1bY10sb1t1XVtjXV0sW3JbdV1bYysxXSxvW3VdW2MrMV1dLHMpLHRbZl1baC0xXT12WzBdWzBdLGVbZl1baC0xXT12WzBdWzFdLHRbZl1baCsxXT12WzFdWzBdLGVbZl1baCsxXT12WzFdWzFdO3k9YShbdFtmXVswXSxlW2ZdWzBdXSxbdFtmXVsyXSxlW2ZdWzJdXSxbdFtmXVszXSxlW2ZdWzNdXSksdFtmXVsxXT15WzBdLGVbZl1bMV09eVsxXSx5PWEoW3RbZl1bXy0xXSxlW2ZdW18tMV1dLFt0W2ZdW18tM10sZVtmXVtfLTNdXSxbdFtmXVtfLTRdLGVbZl1bXy00XV0pLHRbZl1bXy0yXT15WzBdLGVbZl1bXy0yXT15WzFdfWlmKGwpZm9yKGg9MDtoPF87aCsrKXtmb3IoZj0zO2Y8dy0zO2YrPTMpdj1uKFt0W2YtM11baF0sZVtmLTNdW2hdXSxbdFtmXVtoXSxlW2ZdW2hdXSxbdFtmKzNdW2hdLGVbZiszXVtoXV0sbCksdFtmLTFdW2hdPXZbMF1bMF0sZVtmLTFdW2hdPXZbMF1bMV0sdFtmKzFdW2hdPXZbMV1bMF0sZVtmKzFdW2hdPXZbMV1bMV07eT1hKFt0WzBdW2hdLGVbMF1baF1dLFt0WzJdW2hdLGVbMl1baF1dLFt0WzNdW2hdLGVbM11baF1dKSx0WzFdW2hdPXlbMF0sZVsxXVtoXT15WzFdLHk9YShbdFt3LTFdW2hdLGVbdy0xXVtoXV0sW3Rbdy0zXVtoXSxlW3ctM11baF1dLFt0W3ctNF1baF0sZVt3LTRdW2hdXSksdFt3LTJdW2hdPXlbMF0sZVt3LTJdW2hdPXlbMV19aWYocyYmbClmb3IoZj0xO2Y8dztmKz0oZisxKSUzPT0wPzI6MSl7Zm9yKGg9MztoPF8tMztoKz0zKXY9bihbdFtmXVtoLTNdLGVbZl1baC0zXV0sW3RbZl1baF0sZVtmXVtoXV0sW3RbZl1baCszXSxlW2ZdW2grM11dLHMpLHRbZl1baC0xXT0uNSoodFtmXVtoLTFdK3ZbMF1bMF0pLGVbZl1baC0xXT0uNSooZVtmXVtoLTFdK3ZbMF1bMV0pLHRbZl1baCsxXT0uNSoodFtmXVtoKzFdK3ZbMV1bMF0pLGVbZl1baCsxXT0uNSooZVtmXVtoKzFdK3ZbMV1bMV0pO3k9YShbdFtmXVswXSxlW2ZdWzBdXSxbdFtmXVsyXSxlW2ZdWzJdXSxbdFtmXVszXSxlW2ZdWzNdXSksdFtmXVsxXT0uNSoodFtmXVsxXSt5WzBdKSxlW2ZdWzFdPS41KihlW2ZdWzFdK3lbMV0pLHk9YShbdFtmXVtfLTFdLGVbZl1bXy0xXV0sW3RbZl1bXy0zXSxlW2ZdW18tM11dLFt0W2ZdW18tNF0sZVtmXVtfLTRdXSksdFtmXVtfLTJdPS41Kih0W2ZdW18tMl0reVswXSksZVtmXVtfLTJdPS41KihlW2ZdW18tMl0reVsxXSl9cmV0dXJuW3QsZV19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuL2NhdG11bGxfcm9tIjo5NDN9XSw5NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtSRUxBVElWRV9DVUxMX1RPTEVSQU5DRToxZS02fX0se31dLDk0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxoO2V8fChlPVtdKSxyKj0zLG4qPTM7dmFyIGY9aSppLHA9MS1pLGQ9cCpwLGc9cCppKjIsbT0tMypkLHY9MyooZC1nKSx5PTMqKGctZikseD0zKmYsYj1hKmEsXz1iKmEsdz0xLWEsVD13Kncsaz1UKnc7Zm9yKGg9MDtoPHQubGVuZ3RoO2grKylvPW0qKHU9dFtoXSlbbl1bcl0rdip1W25dW3IrMV0reSp1W25dW3IrMl0reCp1W25dW3IrM10scz1tKnVbbisxXVtyXSt2KnVbbisxXVtyKzFdK3kqdVtuKzFdW3IrMl0reCp1W24rMV1bciszXSxsPW0qdVtuKzJdW3JdK3YqdVtuKzJdW3IrMV0reSp1W24rMl1bcisyXSt4KnVbbisyXVtyKzNdLGM9bSp1W24rM11bcl0rdip1W24rM11bcisxXSt5KnVbbiszXVtyKzJdK3gqdVtuKzNdW3IrM10sZVtoXT1rKm8rMyooVCphKnMrdypiKmwpK18qYztyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKSxyKj0zO3ZhciB1PWkqaSxoPTEtaSxmPWgqaCxwPWgqaSoyLGQ9LTMqZixnPTMqKGYtcCksbT0zKihwLXUpLHY9Myp1LHk9MS1hO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz1kKihjPXRbbF0pW25dW3JdK2cqY1tuXVtyKzFdK20qY1tuXVtyKzJdK3YqY1tuXVtyKzNdLHM9ZCpjW24rMV1bcl0rZypjW24rMV1bcisxXSttKmNbbisxXVtyKzJdK3YqY1tuKzFdW3IrM10sZVtsXT15Km8rYSpzO3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxoO2V8fChlPVtdKSxuKj0zO3ZhciBmPWEqYSxwPWYqYSxkPTEtYSxnPWQqZCxtPWcqZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKW89KGg9dFt1XSlbbl1bcisxXS1oW25dW3JdLHM9aFtuKzFdW3IrMV0taFtuKzFdW3JdLGw9aFtuKzJdW3IrMV0taFtuKzJdW3JdLGM9aFtuKzNdW3IrMV0taFtuKzNdW3JdLGVbdV09bSpvKzMqKGcqYSpzK2QqZipsKStwKmM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pO3ZhciB1PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89KGM9dFtsXSlbbl1bcisxXS1jW25dW3JdLHM9Y1tuKzFdW3IrMV0tY1tuKzFdW3JdLGVbbF09dSpvK2EqcztyZXR1cm4gZX19fSx7fV0sOTQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJnI/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYyx1LGg7ZXx8KGU9W10pLHIqPTMsbio9Mzt2YXIgZj1pKmkscD1mKmksZD0xLWksZz1kKmQsbT1nKmQsdj1hKmEseT0xLWEseD15KnksYj15KmEqMixfPS0zKngsdz0zKih4LWIpLFQ9MyooYi12KSxrPTMqdjtmb3IoaD0wO2g8dC5sZW5ndGg7aCsrKW89XyoodT10W2hdKVtuXVtyXSt3KnVbbisxXVtyXStUKnVbbisyXVtyXStrKnVbbiszXVtyXSxzPV8qdVtuXVtyKzFdK3cqdVtuKzFdW3IrMV0rVCp1W24rMl1bcisxXStrKnVbbiszXVtyKzFdLGw9Xyp1W25dW3IrMl0rdyp1W24rMV1bcisyXStUKnVbbisyXVtyKzJdK2sqdVtuKzNdW3IrMl0sYz1fKnVbbl1bciszXSt3KnVbbisxXVtyKzNdK1QqdVtuKzJdW3IrM10rayp1W24rM11bciszXSxlW2hdPW0qbyszKihnKmkqcytkKmYqbCkrcCpjO3JldHVybiBlfTplP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxoO2V8fChlPVtdKSxyKj0zO3ZhciBmPWEqYSxwPWYqYSxkPTEtYSxnPWQqZCxtPWcqZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKW89KGg9dFt1XSlbbisxXVtyXS1oW25dW3JdLHM9aFtuKzFdW3IrMV0taFtuXVtyKzFdLGw9aFtuKzFdW3IrMl0taFtuXVtyKzJdLGM9aFtuKzFdW3IrM10taFtuXVtyKzNdLGVbdV09bSpvKzMqKGcqYSpzK2QqZipsKStwKmM7cmV0dXJuIGV9OnI/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSksbio9Mzt2YXIgdT0xLWksaD1hKmEsZj0xLWEscD1mKmYsZD1mKmEqMixnPS0zKnAsbT0zKihwLWQpLHY9MyooZC1oKSx5PTMqaDtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZyooYz10W2xdKVtuXVtyXSttKmNbbisxXVtyXSt2KmNbbisyXVtyXSt5KmNbbiszXVtyXSxzPWcqY1tuXVtyKzFdK20qY1tuKzFdW3IrMV0rdipjW24rMl1bcisxXSt5KmNbbiszXVtyKzFdLGVbbF09dSpvK2kqcztyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSk7dmFyIHU9MS1pO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspbz0oYz10W2xdKVtuKzFdW3JdLWNbbl1bcl0scz1jW24rMV1bcisxXS1jW25dW3IrMV0sZVtsXT11Km8raSpzO3JldHVybiBlfX19LHt9XSw5NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ZS0yLG89ci0yO3JldHVybiBuJiZpP2Z1bmN0aW9uKGUscixuKXt2YXIgaSxzLGwsYyx1LGg7ZXx8KGU9W10pO3ZhciBmPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSkscD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItZikpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tcCkpO2YqPTMscCo9Mzt2YXIgbT1kKmQsdj1tKmQseT0xLWQseD15KnksYj14KnksXz1nKmcsdz1fKmcsVD0xLWcsaz1UKlQsTT1rKlQ7Zm9yKGg9MDtoPHQubGVuZ3RoO2grKylpPWIqKHU9dFtoXSlbcF1bZl0rMyooeCpkKnVbcF1bZisxXSt5Km0qdVtwXVtmKzJdKSt2KnVbcF1bZiszXSxzPWIqdVtwKzFdW2ZdKzMqKHgqZCp1W3ArMV1bZisxXSt5Km0qdVtwKzFdW2YrMl0pK3YqdVtwKzFdW2YrM10sbD1iKnVbcCsyXVtmXSszKih4KmQqdVtwKzJdW2YrMV0reSptKnVbcCsyXVtmKzJdKSt2KnVbcCsyXVtmKzNdLGM9Yip1W3ArM11bZl0rMyooeCpkKnVbcCszXVtmKzFdK3kqbSp1W3ArM11bZisyXSkrdip1W3ArM11bZiszXSxlW2hdPU0qaSszKihrKmcqcytUKl8qbCkrdypjO3JldHVybiBlfTpuP2Z1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLGMsdSxoLGY9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1mKSksZz1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1wKSk7Zio9Mzt2YXIgbT1kKmQsdj1tKmQseT0xLWQseD15KnksYj14KnksXz0xLWc7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylpPV8qKGg9dFt1XSlbcF1bZl0rZypoW3ArMV1bZl0scz1fKmhbcF1bZisxXStnKmhbcCsxXVtmKzFdLGw9XypoW3BdW2YrMl0rZypoW3ArMV1bZisxXSxjPV8qaFtwXVtmKzNdK2cqaFtwKzFdW2YrMV0sZVt1XT1iKmkrMyooeCpkKnMreSptKmwpK3YqYztyZXR1cm4gZX06aT9mdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHUsaCxmPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSkscD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItZikpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tcCkpO3AqPTM7dmFyIG09ZypnLHY9bSpnLHk9MS1nLHg9eSp5LGI9eCp5LF89MS1kO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaT1fKihoPXRbdV0pW3BdW2ZdK2QqaFtwXVtmKzFdLHM9XypoW3ArMV1bZl0rZCpoW3ArMV1bZisxXSxsPV8qaFtwKzJdW2ZdK2QqaFtwKzJdW2YrMV0sYz1fKmhbcCszXVtmXStkKmhbcCszXVtmKzFdLGVbdV09YippKzMqKHgqZypzK3kqbSpsKSt2KmM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLGMsdT1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxmPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLXUpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLWgpKSxkPTEtcCxnPTEtZjtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKWk9ZyooYz10W2xdKVtoXVt1XStmKmNbaF1bdSsxXSxzPWcqY1toKzFdW3VdK2YqY1toKzFdW3UrMV0sZVtsXT1kKmkrcCpzO3JldHVybiBlfX19LHt9XSw5NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL3h5X2RlZmF1bHRzIiksYT10KCIuL2FiX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9ZS5fY2xpcFBhdGhJZD0iY2xpcCIrZS51aWQrImNhcnBldCI7dmFyIHU9YygiY29sb3IiLHMuZGVmYXVsdExpbmUpOyhuLmNvZXJjZUZvbnQoYywiZm9udCIpLGMoImNhcnBldCIpLGEodCxlLGwsYyx1KSxlLmEmJmUuYik/KGUuYS5sZW5ndGg8MyYmKGUuYWF4aXMuc21vb3RoaW5nPTApLGUuYi5sZW5ndGg8MyYmKGUuYmF4aXMuc21vb3RoaW5nPTApLGkodCxlLGMpfHwoZS52aXNpYmxlPSExKSxlLl9jaGVhdGVyJiZjKCJjaGVhdGVyc2xvcGUiKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYxNCwiLi4vLi4vbGliIjo3NTAsIi4vYWJfZGVmYXVsdHMiOjkzMywiLi9hdHRyaWJ1dGVzIjo5MzUsIi4veHlfZGVmYXVsdHMiOjk1OX1dLDk1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHBsb3Q6dCgiLi9wbG90IiksY2FsYzp0KCIuL2NhbGMiKSxhbmltYXRhYmxlOiEwLGlzQ29udGFpbmVyOiEwLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjYXJwZXQiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJjYXJwZXQiLCJjYXJwZXRBeGlzIiwibm90TGVnZW5kSXNvbGF0YWJsZSIsIm5vTXVsdGlDYXRlZ29yeSIsIm5vSG92ZXIiLCJub1NvcnRpbmdCeVZhbHVlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4MTIsIi4vYXR0cmlidXRlcyI6OTM1LCIuL2NhbGMiOjkzOSwiLi9kZWZhdWx0cyI6OTUwLCIuL3Bsb3QiOjk1Nn1dLDk1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Ll9mdWxsRGF0YS5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXQuX2Z1bGxEYXRhW2ldO2lmKGEuaW5kZXghPT1lLmluZGV4JiYoImNhcnBldCI9PT1hLnR5cGUmJihyfHwocj1hKSxhLmNhcnBldD09PWUuY2FycGV0KSkpcmV0dXJuIGF9cmV0dXJuIHJ9fSx7fV0sOTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoMD09PXQubGVuZ3RoKXJldHVybiIiO3ZhciBuLGk9W10sYT1yPzM6MTtmb3Iobj0wO248dC5sZW5ndGg7bis9YSlpLnB1c2godFtuXSsiLCIrZVtuXSksciYmbjx0Lmxlbmd0aC1hJiYoaS5wdXNoKCJDIiksaS5wdXNoKFt0W24rMV0rIiwiK2VbbisxXSx0W24rMl0rIiwiK2VbbisyXSsiICJdLmpvaW4oIiAiKSkpO3JldHVybiBpLmpvaW4ocj8iIjoiTCIpfX0se31dLDk1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk7Zm9yKG4odCk/dC5sZW5ndGg+ZS5sZW5ndGgmJih0PXQuc2xpY2UoMCxlLmxlbmd0aCkpOnQ9W10saT0wO2k8ZS5sZW5ndGg7aSsrKXRbaV09cihlW2ldKTtyZXR1cm4gdH19LHsiLi4vLi4vbGliIjo3NTB9XSw5NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pWzBdKnQuZHBkeChlKSxzPWlbMV0qdC5kcGR5KHIpLGw9MSxjPTE7aWYoYSl7dmFyIHU9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLGg9TWF0aC5zcXJ0KGFbMF0qYVswXSthWzFdKmFbMV0pLGY9KGlbMF0qYVswXStpWzFdKmFbMV0pL3UvaDtjPU1hdGgubWF4KDAsZil9dmFyIHA9MTgwKk1hdGguYXRhbjIocyxvKS9NYXRoLlBJO3JldHVybiBwPC05MD8ocCs9MTgwLGw9LWwpOnA+OTAmJihwLT0xODAsbD0tbCkse2FuZ2xlOnAsZmxpcDpsLHA6dC5jMnAobixlLHIpLG9mZnNldE11bHRwbGllcjpjfX19LHt9XSw5NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi9tYXBfMWRfYXJyYXkiKSxvPXQoIi4vbWFrZXBhdGgiKSxzPXQoIi4vb3JpZW50X3RleHQiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vbGliIiksdT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iik7ZnVuY3Rpb24gaCh0LGUscixpLHMsbCl7dmFyIGM9ImNvbnN0LSIrcysiLWxpbmVzIix1PXIuc2VsZWN0QWxsKCIuIitjKS5kYXRhKGwpO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKGMsITApLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIiksdS5lYWNoKChmdW5jdGlvbihyKXt2YXIgaT1yLHM9aS54LGw9aS55LGM9YShbXSxzLHQuYzJwKSx1PWEoW10sbCxlLmMycCksaD0iTSIrbyhjLHUsaS5zbW9vdGhpbmcpO24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGgpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGkud2lkdGgpLnN0eWxlKCJzdHJva2UiLGkuY29sb3IpLnN0eWxlKCJmaWxsIiwibm9uZSIpfSkpLHUuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIGYodCxlLHIsYSxvLGMsdSxoKXt2YXIgZj1jLnNlbGVjdEFsbCgidGV4dC4iK2gpLmRhdGEodSk7Zi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoaCwhMCk7dmFyIHA9MCxkPXt9O3JldHVybiBmLmVhY2goKGZ1bmN0aW9uKG8sYyl7dmFyIHU7aWYoImF1dG8iPT09by5heGlzLnRpY2thbmdsZSl1PXMoYSxlLHIsby54eSxvLmR4eSk7ZWxzZXt2YXIgaD0oby5heGlzLnRpY2thbmdsZSsxODApKk1hdGguUEkvMTgwO3U9cyhhLGUscixvLnh5LFtNYXRoLmNvcyhoKSxNYXRoLnNpbihoKV0pfWN8fChkPXthbmdsZTp1LmFuZ2xlLGZsaXA6dS5mbGlwfSk7dmFyIGY9KG8uZW5kQW5jaG9yPy0xOjEpKnUuZmxpcCxnPW4uc2VsZWN0KHRoaXMpLmF0dHIoeyJ0ZXh0LWFuY2hvciI6Zj4wPyJzdGFydCI6ImVuZCIsImRhdGEtbm90ZXgiOjF9KS5jYWxsKGkuZm9udCxvLmZvbnQpLnRleHQoby50ZXh0KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLG09aS5iQm94KHRoaXMpO2cuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS5wWzBdKyIsIit1LnBbMV0rIikgcm90YXRlKCIrdS5hbmdsZSsiKXRyYW5zbGF0ZSgiK28uYXhpcy5sYWJlbHBhZGRpbmcqZisiLCIrLjMqbS5oZWlnaHQrIikiKSxwPU1hdGgubWF4KHAsbS53aWR0aCtvLmF4aXMubGFiZWxwYWRkaW5nKX0pKSxmLmV4aXQoKS5yZW1vdmUoKSxkLm1heEV4dGVudD1wLGR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBsPWUueGF4aXMsdT1lLnlheGlzLHA9dC5fZnVsbExheW91dC5fY2xpcHM7Yy5tYWtlVHJhY2VHcm91cHMoaSxyLCJ0cmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ZVswXSxkPWkudHJhY2UsbT1kLmFheGlzLHY9ZC5iYXhpcyx5PWMuZW5zdXJlU2luZ2xlKHIsImciLCJtaW5vcmxheWVyIikseD1jLmVuc3VyZVNpbmdsZShyLCJnIiwibWFqb3JsYXllciIpLGI9Yy5lbnN1cmVTaW5nbGUociwiZyIsImJvdW5kYXJ5bGF5ZXIiKSxfPWMuZW5zdXJlU2luZ2xlKHIsImciLCJsYWJlbGxheWVyIik7ci5zdHlsZSgib3BhY2l0eSIsZC5vcGFjaXR5KSxoKGwsdSx4LG0sImEiLG0uX2dyaWRsaW5lcyksaChsLHUseCx2LCJiIix2Ll9ncmlkbGluZXMpLGgobCx1LHksbSwiYSIsbS5fbWlub3JncmlkbGluZXMpLGgobCx1LHksdiwiYiIsdi5fbWlub3JncmlkbGluZXMpLGgobCx1LGIsbSwiYS1ib3VuZGFyeSIsbS5fYm91bmRhcnlsaW5lcyksaChsLHUsYix2LCJiLWJvdW5kYXJ5Iix2Ll9ib3VuZGFyeWxpbmVzKTt2YXIgdz1mKHQsbCx1LGQsaSxfLG0uX2xhYmVscywiYS1sYWJlbCIpLFQ9Zih0LGwsdSxkLGksXyx2Ll9sYWJlbHMsImItbGFiZWwiKTshZnVuY3Rpb24odCxlLHIsbixpLGEsbyxsKXt2YXIgdSxoLGYscCxkPWMuYWdnTnVtcyhNYXRoLm1pbixudWxsLHIuYSksbT1jLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxyLmEpLHY9Yy5hZ2dOdW1zKE1hdGgubWluLG51bGwsci5iKSx5PWMuYWdnTnVtcyhNYXRoLm1heCxudWxsLHIuYik7dT0uNSooZCttKSxoPXYsZj1yLmFiMnh5KHUsaCwhMCkscD1yLmR4eWRhX3JvdWdoKHUsaCksdm9pZCAwPT09by5hbmdsZSYmYy5leHRlbmRGbGF0KG8scyhyLGksYSxmLHIuZHh5ZGJfcm91Z2godSxoKSkpO2codCxlLHIsbixmLHAsci5hYXhpcyxpLGEsbywiYS10aXRsZSIpLHU9ZCxoPS41Kih2K3kpLGY9ci5hYjJ4eSh1LGgsITApLHA9ci5keHlkYl9yb3VnaCh1LGgpLHZvaWQgMD09PWwuYW5nbGUmJmMuZXh0ZW5kRmxhdChsLHMocixpLGEsZixyLmR4eWRhX3JvdWdoKHUsaCkpKTtnKHQsZSxyLG4sZixwLHIuYmF4aXMsaSxhLGwsImItdGl0bGUiKX0odCxfLGQsaSxsLHUsdyxUKSxmdW5jdGlvbih0LGUscixuLGkpe3ZhciBzLGwsdSxoLGY9ci5zZWxlY3QoIiMiK3QuX2NsaXBQYXRoSWQpO2Yuc2l6ZSgpfHwoZj1yLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjYXJwZXRjbGlwIiwhMCkpO3ZhciBwPWMuZW5zdXJlU2luZ2xlKGYsInBhdGgiLCJjYXJwZXRib3VuZGFyeSIpLGQ9ZS5jbGlwc2VnbWVudHMsZz1bXTtmb3IoaD0wO2g8ZC5sZW5ndGg7aCsrKXM9ZFtoXSxsPWEoW10scy54LG4uYzJwKSx1PWEoW10scy55LGkuYzJwKSxnLnB1c2gobyhsLHUscy5iaWN1YmljKSk7dmFyIG09Ik0iK2cuam9pbigiTCIpKyJaIjtmLmF0dHIoImlkIix0Ll9jbGlwUGF0aElkKSxwLmF0dHIoImQiLG0pfShkLGkscCxsLHUpfSkpfTt2YXIgcD11LkxJTkVfU1BBQ0lORyxkPSgxLXUuTUlEX1NISUZUKS9wKzE7ZnVuY3Rpb24gZyh0LGUscixhLG8sYyx1LGgsZixnLG0pe3ZhciB2PVtdO3UudGl0bGUudGV4dCYmdi5wdXNoKHUudGl0bGUudGV4dCk7dmFyIHk9ZS5zZWxlY3RBbGwoInRleHQuIittKS5kYXRhKHYpLHg9Zy5tYXhFeHRlbnQ7eS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQobSwhMCkseS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPXMocixoLGYsbyxjKTstMT09PVsic3RhcnQiLCJib3RoIl0uaW5kZXhPZih1LnNob3d0aWNrbGFiZWxzKSYmKHg9MCk7dmFyIGE9dS50aXRsZS5mb250LnNpemU7eCs9YSt1LnRpdGxlLm9mZnNldDt2YXIgbT0oZy5hbmdsZSsoZy5mbGlwPDA/MTgwOjApLWUuYW5nbGUrNDUwKSUzNjAsdj1tPjkwJiZtPDI3MCx5PW4uc2VsZWN0KHRoaXMpO3kudGV4dCh1LnRpdGxlLnRleHQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCksdiYmKHg9KC1sLmxpbmVDb3VudCh5KStkKSpwKmEteCkseS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLnBbMF0rIiwiK2UucFsxXSsiKSByb3RhdGUoIitlLmFuZ2xlKyIpIHRyYW5zbGF0ZSgwLCIreCsiKSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChpLmZvbnQsdS50aXRsZS5mb250KX0pKSx5LmV4aXQoKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzcsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjcxNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6Nzc0LCIuL21ha2VwYXRoIjo5NTMsIi4vbWFwXzFkX2FycmF5Ijo5NTQsIi4vb3JpZW50X3RleHQiOjk1NSxkMzoxNjl9XSw5NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL2xpYi9zZWFyY2giKS5maW5kQmluLGE9dCgiLi9jb21wdXRlX2NvbnRyb2xfcG9pbnRzIiksbz10KCIuL2NyZWF0ZV9zcGxpbmVfZXZhbHVhdG9yIikscz10KCIuL2NyZWF0ZV9pX2Rlcml2YXRpdmVfZXZhbHVhdG9yIiksbD10KCIuL2NyZWF0ZV9qX2Rlcml2YXRpdmVfZXZhbHVhdG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Escj10Ll9iLGM9ZS5sZW5ndGgsdT1yLmxlbmd0aCxoPXQuYWF4aXMsZj10LmJheGlzLHA9ZVswXSxkPWVbYy0xXSxnPXJbMF0sbT1yW3UtMV0sdj1lW2UubGVuZ3RoLTFdLWVbMF0seT1yW3IubGVuZ3RoLTFdLXJbMF0seD12Km4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0UsYj15Km4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U7cC09eCxkKz14LGctPWIsbSs9Yix0LmlzVmlzaWJsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0PnAmJnQ8ZCYmZT5nJiZlPG19LHQuaXNPY2NsdWRlZD1mdW5jdGlvbih0LGUpe3JldHVybiB0PHB8fHQ+ZHx8ZTxnfHxlPm19LHQuc2V0U2NhbGU9ZnVuY3Rpb24oKXt2YXIgZT10Ll94LHI9dC5feSxuPWEodC5feGN0cmwsdC5feWN0cmwsZSxyLGguc21vb3RoaW5nLGYuc21vb3RoaW5nKTt0Ll94Y3RybD1uWzBdLHQuX3ljdHJsPW5bMV0sdC5ldmFseHk9byhbdC5feGN0cmwsdC5feWN0cmxdLGMsdSxoLnNtb290aGluZyxmLnNtb290aGluZyksdC5keHlkaT1zKFt0Ll94Y3RybCx0Ll95Y3RybF0saC5zbW9vdGhpbmcsZi5zbW9vdGhpbmcpLHQuZHh5ZGo9bChbdC5feGN0cmwsdC5feWN0cmxdLGguc21vb3RoaW5nLGYuc21vb3RoaW5nKX0sdC5pMmE9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHRbMF0pLGMtMiksbj10WzBdLXI7cmV0dXJuKDEtbikqZVtyXStuKmVbcisxXX0sdC5qMmI9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHRbMV0pLGMtMiksbj10WzFdLWU7cmV0dXJuKDEtbikqcltlXStuKnJbZSsxXX0sdC5pajJhYj1mdW5jdGlvbihlKXtyZXR1cm5bdC5pMmEoZVswXSksdC5qMmIoZVsxXSldfSx0LmEyaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGkodCxlKSxjLTIpKSxuPWVbcl0sYT1lW3IrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oYy0xLHIrKHQtbikvKGEtbikpKX0sdC5iMmo9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLm1pbihpKHQsciksdS0yKSksbj1yW2VdLGE9cltlKzFdO3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHUtMSxlKyh0LW4pLyhhLW4pKSl9LHQuYWIyaWo9ZnVuY3Rpb24oZSl7cmV0dXJuW3QuYTJpKGVbMF0pLHQuYjJqKGVbMV0pXX0sdC5pMmM9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5ldmFseHkoW10sZSxyKX0sdC5hYjJ4eT1mdW5jdGlvbihuLGksYSl7aWYoIWEmJihuPGVbMF18fG4+ZVtjLTFdfGk8clswXXx8aT5yW3UtMV0pKXJldHVyblshMSwhMV07dmFyIG89dC5hMmkobikscz10LmIyaihpKSxsPXQuZXZhbHh5KFtdLG8scyk7aWYoYSl7dmFyIGgsZixwLGQsZz0wLG09MCx2PVtdO248ZVswXT8oaD0wLGY9MCxnPShuLWVbMF0pLyhlWzFdLWVbMF0pKTpuPmVbYy0xXT8oaD1jLTIsZj0xLGc9KG4tZVtjLTFdKS8oZVtjLTFdLWVbYy0yXSkpOmY9by0oaD1NYXRoLm1heCgwLE1hdGgubWluKGMtMixNYXRoLmZsb29yKG8pKSkpLGk8clswXT8ocD0wLGQ9MCxtPShpLXJbMF0pLyhyWzFdLXJbMF0pKTppPnJbdS0xXT8ocD11LTIsZD0xLG09KGktclt1LTFdKS8oclt1LTFdLXJbdS0yXSkpOmQ9cy0ocD1NYXRoLm1heCgwLE1hdGgubWluKHUtMixNYXRoLmZsb29yKHMpKSkpLGcmJih0LmR4eWRpKHYsaCxwLGYsZCksbFswXSs9dlswXSpnLGxbMV0rPXZbMV0qZyksbSYmKHQuZHh5ZGoodixoLHAsZixkKSxsWzBdKz12WzBdKm0sbFsxXSs9dlsxXSptKX1yZXR1cm4gbH0sdC5jMnA9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmMycCh0WzBdKSxyLmMycCh0WzFdKV19LHQucDJ4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5wMmModFswXSksci5wMmModFsxXSldfSx0LmRhZGk9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihlLmxlbmd0aC0yLHQpKTtyZXR1cm4gZVtyKzFdLWVbcl19LHQuZGJkaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHIubGVuZ3RoLTIsdCkpO3JldHVybiByW2UrMV0tcltlXX0sdC5keHlkYT1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRpKG51bGwsZSxyLG4saSksbz10LmRhZGkoZSxuKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGI9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5keHlkaihudWxsLGUscixuLGkpLG89dC5kYmRqKHIsaSk7cmV0dXJuW2FbMF0vbyxhWzFdL29dfSx0LmR4eWRhX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgaT12KihufHwuMSksYT10LmFiMnh5KGUraSxyLCEwKSxvPXQuYWIyeHkoZS1pLHIsITApO3JldHVyblsuNSooYVswXS1vWzBdKS9pLC41KihhWzFdLW9bMV0pL2ldfSx0LmR4eWRiX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgaT15KihufHwuMSksYT10LmFiMnh5KGUscitpLCEwKSxvPXQuYWIyeHkoZSxyLWksITApO3JldHVyblsuNSooYVswXS1vWzBdKS9pLC41KihhWzFdLW9bMV0pL2ldfSx0LmRwZHg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX219LHQuZHBkeT1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX19fSx7Ii4uLy4uL2xpYi9zZWFyY2giOjc2OSwiLi9jb21wdXRlX2NvbnRyb2xfcG9pbnRzIjo5NDUsIi4vY29uc3RhbnRzIjo5NDYsIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiOjk0NywiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvciI6OTQ4LCIuL2NyZWF0ZV9zcGxpbmVfZXZhbHVhdG9yIjo5NDl9XSw5NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scz1bXSxsPVtdLGM9dFswXS5sZW5ndGgsdT10Lmxlbmd0aDtmdW5jdGlvbiBoKGUscil7dmFyIG4saT0wLGE9MDtyZXR1cm4gZT4wJiZ2b2lkIDAhPT0obj10W3JdW2UtMV0pJiYoYSsrLGkrPW4pLGU8Yy0xJiZ2b2lkIDAhPT0obj10W3JdW2UrMV0pJiYoYSsrLGkrPW4pLHI+MCYmdm9pZCAwIT09KG49dFtyLTFdW2VdKSYmKGErKyxpKz1uKSxyPHUtMSYmdm9pZCAwIT09KG49dFtyKzFdW2VdKSYmKGErKyxpKz1uKSxpL01hdGgubWF4KDEsYSl9dmFyIGYscCxkLGcsbSx2LHkseCxiLF8sdyxUPTA7Zm9yKGk9MDtpPGM7aSsrKWZvcihhPTA7YTx1O2ErKyl2b2lkIDA9PT10W2FdW2ldJiYocy5wdXNoKGkpLGwucHVzaChhKSx0W2FdW2ldPWgoaSxhKSksVD1NYXRoLm1heChULE1hdGguYWJzKHRbYV1baV0pKTtpZighcy5sZW5ndGgpcmV0dXJuIHQ7dmFyIGs9MCxNPTAsQT1zLmxlbmd0aDtkb3tmb3Ioaz0wLG89MDtvPEE7bysrKXtpPXNbb10sYT1sW29dO3ZhciBTLEUsQyxMLFAsSSx6PTAsTz0wOzA9PT1pPyhDPWVbUD1NYXRoLm1pbihjLTEsMildLEw9ZVsxXSxTPXRbYV1bUF0sTys9KEU9dFthXVsxXSkrKEUtUykqKGVbMF0tTCkvKEwtQykseisrKTppPT09Yy0xJiYoQz1lW1A9TWF0aC5tYXgoMCxjLTMpXSxMPWVbYy0yXSxTPXRbYV1bUF0sTys9KEU9dFthXVtjLTJdKSsoRS1TKSooZVtjLTFdLUwpLyhMLUMpLHorKyksKDA9PT1pfHxpPT09Yy0xKSYmYT4wJiZhPHUtMSYmKGY9clthKzFdLXJbYV0sTys9KChwPXJbYV0tclthLTFdKSp0W2ErMV1baV0rZip0W2EtMV1baV0pLyhwK2YpLHorKyksMD09PWE/KEM9cltJPU1hdGgubWluKHUtMSwyKV0sTD1yWzFdLFM9dFtJXVtpXSxPKz0oRT10WzFdW2ldKSsoRS1TKSooclswXS1MKS8oTC1DKSx6KyspOmE9PT11LTEmJihDPXJbST1NYXRoLm1heCgwLHUtMyldLEw9clt1LTJdLFM9dFtJXVtpXSxPKz0oRT10W3UtMl1baV0pKyhFLVMpKihyW3UtMV0tTCkvKEwtQykseisrKSwoMD09PWF8fGE9PT11LTEpJiZpPjAmJmk8Yy0xJiYoZj1lW2krMV0tZVtpXSxPKz0oKHA9ZVtpXS1lW2ktMV0pKnRbYV1baSsxXStmKnRbYV1baS0xXSkvKHArZikseisrKSx6P08vPXo6KGQ9ZVtpKzFdLWVbaV0sZz1lW2ldLWVbaS0xXSx4PShtPXJbYSsxXS1yW2FdKSoodj1yW2FdLXJbYS0xXSkqKG0rdiksTz0oKHk9ZCpnKihkK2cpKSoodip0W2ErMV1baV0rbSp0W2EtMV1baV0pK3gqKGcqdFthXVtpKzFdK2QqdFthXVtpLTFdKSkvKHgqKGcrZCkreSoodittKSkpLGsrPShfPShiPU8tdFthXVtpXSkvVCkqXyx3PXo/MDouODUsdFthXVtpXSs9YiooMSt3KX1rPU1hdGguc3FydChrKX13aGlsZShNKys8MTAwJiZrPjFlLTUpO3JldHVybiBuLmxvZygiU21vb3RoZXIgY29udmVyZ2VkIHRvIixrLCJhZnRlciIsTSwiaXRlcmF0aW9ucyIpLHR9fSx7Ii4uLy4uL2xpYiI6NzUwfV0sOTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXkxRDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXIoIngiKSxhPWkmJmkubGVuZ3RoLG89cigieSIpLHM9byYmby5sZW5ndGg7aWYoIWEmJiFzKXJldHVybiExO2lmKGUuX2NoZWF0ZXI9IWksYSYmIW4oaSl8fHMmJiFuKG8pKWUuX2xlbmd0aD1udWxsO2Vsc2V7dmFyIGw9YT9pLmxlbmd0aDoxLzA7cyYmKGw9TWF0aC5taW4obCxvLmxlbmd0aCkpLGUuYSYmZS5hLmxlbmd0aCYmKGw9TWF0aC5taW4obCxlLmEubGVuZ3RoKSksZS5iJiZlLmIubGVuZ3RoJiYobD1NYXRoLm1pbihsLGUuYi5sZW5ndGgpKSxlLl9sZW5ndGg9bH1yZXR1cm4hMH19LHsiLi4vLi4vbGliIjo3NTB9XSw5NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmRlZmF1bHRMaW5lLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz1pLm1hcmtlci5saW5lO2UuZXhwb3J0cz1sKHtsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbG9jYXRpb25tb2RlOmkubG9jYXRpb25tb2RlLHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZ2VvanNvbjpsKHt9LGkuZ2VvanNvbix7fSksZmVhdHVyZWlka2V5OmkuZmVhdHVyZWlka2V5LHRleHQ6bCh7fSxpLnRleHQse30pLGhvdmVydGV4dDpsKHt9LGkuaG92ZXJ0ZXh0LHt9KSxtYXJrZXI6e2xpbmU6e2NvbG9yOmwoe30sYy5jb2xvcix7ZGZsdDpzfSksd2lkdGg6bCh7fSxjLndpZHRoLHtkZmx0OjF9KSxlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6ImNhbGMifSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Omkuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTppLnVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGhvdmVyaW5mbzpsKHt9LG8uaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJsb2NhdGlvbiIsInoiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpuKCksc2hvd2xlZ2VuZDpsKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSxhKCIiLHtjTGV0dGVyOiJ6IixlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYxNCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYyMiwiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIjoxMjAwfV0sOTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxvPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIikscz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIik7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiB0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGM9ZS5fbGVuZ3RoLHU9bmV3IEFycmF5KGMpO3I9ZS5nZW9qc29uP2Z1bmN0aW9uKHQpe3JldHVybiBsKHQpfHxuKHQpfTpsO2Zvcih2YXIgaD0wO2g8YztoKyspe3ZhciBmPXVbaF09e30scD1lLmxvY2F0aW9uc1toXSxkPWUueltoXTtyKHApJiZuKGQpPyhmLmxvYz1wLGYuej1kKTooZi5sb2M9bnVsbCxmLno9aSksZi5pbmRleD1ofXJldHVybiBvKHUsZSksYSh0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJ6In0pLHModSxlKSx1fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjIzLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTU3LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTYwLCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sOTYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoImxvY2F0aW9ucyIpLGM9cygieiIpO2lmKGwmJmwubGVuZ3RoJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkoYykmJmMubGVuZ3RoKXtlLl9sZW5ndGg9TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpO3ZhciB1LGg9cygiZ2VvanNvbiIpOygic3RyaW5nIj09dHlwZW9mIGgmJiIiIT09aHx8bi5pc1BsYWluT2JqZWN0KGgpKSYmKHU9Imdlb2pzb24taWQiKSwiZ2VvanNvbi1pZCI9PT1zKCJsb2NhdGlvbm1vZGUiLHUpJiZzKCJmZWF0dXJlaWRrZXkiKSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLHMoIm1hcmtlci5saW5lLndpZHRoIikmJnMoIm1hcmtlci5saW5lLmNvbG9yIikscygibWFya2VyLm9wYWNpdHkiKSxpKHQsZSxvLHMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHMpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYyNSwiLi4vLi4vbGliIjo3NTAsIi4vYXR0cmlidXRlcyI6OTYwfV0sOTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3QubG9jYXRpb249ZS5sb2NhdGlvbix0Lno9ZS56O3ZhciBhPW5baV07cmV0dXJuIGEuZkluJiZhLmZJbi5wcm9wZXJ0aWVzJiYodC5wcm9wZXJ0aWVzPWEuZkluLnByb3BlcnRpZXMpLHQuY3Q9YS5jdCx0fX0se31dLDk2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIiKS5maWxsVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHMsbCxjLHU9dC5jZCxoPXVbMF0udHJhY2UsZj10LnN1YnBsb3Q7Zm9yKHM9MDtzPHUubGVuZ3RoO3MrKylpZihjPSExLChvPXVbc10pLl9wb2x5Z29ucyl7Zm9yKGw9MDtsPG8uX3BvbHlnb25zLmxlbmd0aDtsKyspby5fcG9seWdvbnNbbF0uY29udGFpbnMoW2Uscl0pJiYoYz0hYyksby5fcG9seWdvbnNbbF0uY29udGFpbnMoW2UrMzYwLHJdKSYmKGM9IWMpO2lmKGMpYnJlYWt9aWYoYyYmbylyZXR1cm4gdC54MD10LngxPXQueGEuYzJwKG8uY3QpLHQueTA9dC55MT10LnlhLmMycChvLmN0KSx0LmluZGV4PW8uaW5kZXgsdC5sb2NhdGlvbj1vLmxvYyx0Lno9by56LHQuekxhYmVsPW4udGlja1RleHQoZi5tb2NrQXhpcyxmLm1vY2tBeGlzLmMybChvLnopLCJob3ZlciIpLnRleHQsdC5ob3ZlcnRlbXBsYXRlPW8uaG92ZXJ0ZW1wbGF0ZSxmdW5jdGlvbih0LGUscil7aWYoZS5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgbj1yLmhpfHxlLmhvdmVyaW5mbyxvPVN0cmluZyhyLmxvYykscz0iYWxsIj09PW4/aS5ob3ZlcmluZm8uZmxhZ3M6bi5zcGxpdCgiKyIpLGw9LTEhPT1zLmluZGV4T2YoIm5hbWUiKSxjPS0xIT09cy5pbmRleE9mKCJsb2NhdGlvbiIpLHU9LTEhPT1zLmluZGV4T2YoInoiKSxoPS0xIT09cy5pbmRleE9mKCJ0ZXh0IiksZj1bXTshbCYmYz90Lm5hbWVPdmVycmlkZT1vOihsJiYodC5uYW1lT3ZlcnJpZGU9ZS5uYW1lKSxjJiZmLnB1c2gobykpO3UmJmYucHVzaCh0LnpMYWJlbCk7aCYmYShyLGUsZik7dC5leHRyYVRleHQ9Zi5qb2luKCI8YnI+Iil9KHQsaCxvLGYubW9ja0F4aXMpLFt0XX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4vYXR0cmlidXRlcyI6OTYwfV0sOTY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGNhbGM6dCgiLi9jYWxjIiksY2FsY0dlb0pTT046dCgiLi9wbG90IikuY2FsY0dlb0pTT04scGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4vc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNob3JvcGxldGgiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dlbyIpLGNhdGVnb3JpZXM6WyJnZW8iLCJub09wYWNpdHkiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2VvIjo4MzEsIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwMzksIi4vYXR0cmlidXRlcyI6OTYwLCIuL2NhbGMiOjk2MSwiLi9kZWZhdWx0cyI6OTYyLCIuL2V2ZW50X2RhdGEiOjk2MywiLi9ob3ZlciI6OTY0LCIuL3Bsb3QiOjk2NiwiLi9zZWxlY3QiOjk2NywiLi9zdHlsZSI6OTY4fV0sOTY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKSxvPXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLGw9dCgiLi9zdHlsZSIpLnN0eWxlO2UuZXhwb3J0cz17Y2FsY0dlb0pTT046ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFswXS50cmFjZSxuPWVbci5nZW9dLGk9bi5fc3VicGxvdCxsPXIubG9jYXRpb25tb2RlLGM9ci5fbGVuZ3RoLHU9Imdlb2pzb24taWQiPT09bD9hLmV4dHJhY3RUcmFjZUZlYXR1cmUodCk6byhyLGkudG9wb2pzb24pLGg9W10sZj1bXSxwPTA7cDxjO3ArKyl7dmFyIGQ9dFtwXSxnPSJnZW9qc29uLWlkIj09PWw/ZC5mT3V0OmEubG9jYXRpb25Ub0ZlYXR1cmUobCxkLmxvYyx1KTtpZihnKXtkLmdlb2pzb249ZyxkLmN0PWcucHJvcGVydGllcy5jdCxkLl9wb2x5Z29ucz1hLmZlYXR1cmUycG9seWdvbnMoZyk7dmFyIG09YS5jb21wdXRlQmJveChnKTtoLnB1c2gobVswXSxtWzJdKSxmLnB1c2gobVsxXSxtWzNdKX1lbHNlIGQuZ2VvanNvbj1udWxsfWlmKCJnZW9qc29uIj09PW4uZml0Ym91bmRzJiYiZ2VvanNvbi1pZCI9PT1sKXt2YXIgdj1hLmNvbXB1dGVCYm94KGEuZ2V0VHJhY2VHZW9qc29uKHIpKTtoPVt2WzBdLHZbMl1dLGY9W3ZbMV0sdlszXV19dmFyIHk9e3BhZGRlZDohMH07ci5fZXh0cmVtZXMubG9uPXMobi5sb25heGlzLl9heCxoLHkpLHIuX2V4dHJlbWVzLmxhdD1zKG4ubGF0YXhpcy5fYXgsZix5KX0scGxvdDpmdW5jdGlvbih0LGUscil7dmFyIGE9ZS5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBjaG9yb3BsZXRoIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLmNob3JvcGxldGhsb2NhdGlvbiIpLmRhdGEoaS5pZGVudGl0eSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNob3JvcGxldGhsb2NhdGlvbiIsITApLHIuZXhpdCgpLnJlbW92ZSgpLGwodCxlKX0pKX19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3NDMsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6Nzc3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo3OTgsIi4vc3R5bGUiOjk2OCxkMzoxNjl9XSw5Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspKGk9KG49c1tyXSkuY3QpJiYoYT1sLmMycChpKSxvPWMuYzJwKGkpLGUuY29udGFpbnMoW2Esb10sbnVsbCxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmlbMF0sbGF0OmlbMV19KSxuLnNlbGVjdGVkPTEpOm4uc2VsZWN0ZWQ9MCk7cmV0dXJuIHV9fSx7fV0sOTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpO2Z1bmN0aW9uIHModCxlKXt2YXIgcj1lWzBdLnRyYWNlLHM9ZVswXS5ub2RlMy5zZWxlY3RBbGwoIi5jaG9yb3BsZXRobG9jYXRpb24iKSxsPXIubWFya2VyfHx7fSxjPWwubGluZXx8e30sdT1vLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZShyKTtzLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmF0dHIoImZpbGwiLHUodC56KSkuY2FsbChpLnN0cm9rZSx0Lm1sY3x8Yy5jb2xvcikuY2FsbChhLmRhc2hMaW5lLCIiLHQubWx3fHxjLndpZHRofHwwKS5zdHlsZSgib3BhY2l0eSIsbC5vcGFjaXR5KX0pKSxhLnNlbGVjdGVkUG9pbnRTdHlsZShzLHIsdCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe2UmJnModCxlKX0sc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsbj1lWzBdLnRyYWNlO24uc2VsZWN0ZWRwb2ludHM/YS5zZWxlY3RlZFBvaW50U3R5bGUoci5zZWxlY3RBbGwoIi5jaG9yb3BsZXRobG9jYXRpb24iKSxuLHQpOnModCxlKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LGQzOjE2OX1dLDk2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jaG9yb3BsZXRoL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe2xvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGdlb2pzb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxmZWF0dXJlaWRrZXk6cyh7fSxuLmZlYXR1cmVpZGtleSx7fSksYmVsb3c6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsbWFya2VyOntsaW5lOntjb2xvcjpzKHt9LG4ubWFya2VyLmxpbmUuY29sb3Ise2VkaXRUeXBlOiJwbG90In0pLHdpZHRoOnMoe30sbi5tYXJrZXIubGluZS53aWR0aCx7ZWRpdFR5cGU6InBsb3QifSksZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5OnMoe30sbi5tYXJrZXIub3BhY2l0eSx7ZWRpdFR5cGU6InBsb3QifSksZWRpdFR5cGU6ImNhbGMifSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5OnMoe30sbi5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSx7ZWRpdFR5cGU6InBsb3QifSksZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpzKHt9LG4udW5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSx7ZWRpdFR5cGU6InBsb3QifSksZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGhvdmVyaW5mbzpuLmhvdmVyaW5mbyxob3ZlcnRlbXBsYXRlOmEoe30se2tleXM6WyJwcm9wZXJ0aWVzIl19KSxzaG93bGVnZW5kOnMoe30sby5zaG93bGVnZW5kLHtkZmx0OiExfSl9LGkoIiIse2NMZXR0ZXI6InoiLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzk1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NzcsIi4uL2Nob3JvcGxldGgvYXR0cmlidXRlcyI6OTYwfV0sOTcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyIpLm1ha2VCbGFuayxsPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKTtmdW5jdGlvbiBjKHQpe3ZhciBlLHI9dFswXS50cmFjZSxuPXIuX29wdHM7aWYoci5zZWxlY3RlZHBvaW50cyl7Zm9yKHZhciBhPW8ubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyhyKSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107bC5mT3V0JiYobC5mT3V0LnByb3BlcnRpZXMubW8yPWEuc2VsZWN0ZWRPcGFjaXR5Rm4obCkpfWU9e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibW8yIn19ZWxzZSBlPWkuaXNBcnJheU9yVHlwZWRBcnJheShyLm1hcmtlci5vcGFjaXR5KT97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9OnIubWFya2VyLm9wYWNpdHk7cmV0dXJuIGkuZXh0ZW5kRmxhdChuLmZpbGwucGFpbnQseyJmaWxsLW9wYWNpdHkiOmV9KSxpLmV4dGVuZEZsYXQobi5saW5lLnBhaW50LHsibGluZS1vcGFjaXR5IjplfSksbn1lLmV4cG9ydHM9e2NvbnZlcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPSEwPT09ZS52aXNpYmxlJiYwIT09ZS5fbGVuZ3RoLG89e2xheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fSx1PXtsYXlvdXQ6e3Zpc2liaWxpdHk6Im5vbmUifSxwYWludDp7fX0saD1lLl9vcHRzPXtmaWxsOm8sbGluZTp1LGdlb2pzb246cygpfTtpZighcilyZXR1cm4gaDt2YXIgZj1sLmV4dHJhY3RUcmFjZUZlYXR1cmUodCk7aWYoIWYpcmV0dXJuIGg7dmFyIHAsZCxnLG09YS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2UoZSksdj1lLm1hcmtlcix5PXYubGluZXx8e307aS5pc0FycmF5T3JUeXBlZEFycmF5KHYub3BhY2l0eSkmJihwPWZ1bmN0aW9uKHQpe3ZhciBlPXQubW87cmV0dXJuIG4oZSk/K2kuY29uc3RyYWluKGUsMCwxKTowfSksaS5pc0FycmF5T3JUeXBlZEFycmF5KHkuY29sb3IpJiYoZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5tbGN9KSxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS53aWR0aCkmJihnPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1sd30pO2Zvcih2YXIgeD0wO3g8dC5sZW5ndGg7eCsrKXt2YXIgYj10W3hdLF89Yi5mT3V0O2lmKF8pe3ZhciB3PV8ucHJvcGVydGllczt3LmZjPW0oYi56KSxwJiYody5tbz1wKGIpKSxkJiYody5tbGM9ZChiKSksZyYmKHcubWx3PWcoYikpLGIuY3Q9dy5jdCxiLl9wb2x5Z29ucz1sLmZlYXR1cmUycG9seWdvbnMoXyl9fXZhciBUPXA/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibW8ifTp2Lm9wYWNpdHk7cmV0dXJuIGkuZXh0ZW5kRmxhdChvLnBhaW50LHsiZmlsbC1jb2xvciI6e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToiZmMifSwiZmlsbC1vcGFjaXR5IjpUfSksaS5leHRlbmRGbGF0KHUucGFpbnQseyJsaW5lLWNvbG9yIjpkP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1sYyJ9OnkuY29sb3IsImxpbmUtd2lkdGgiOmc/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibWx3In06eS53aWR0aCwibGluZS1vcGFjaXR5IjpUfSksby5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsdS5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsaC5nZW9qc29uPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6Zn0sYyh0KSxofSxjb252ZXJ0T25TZWxlY3Q6Y319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyI6NzQzLCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6NzQ0LCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sOTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoImxvY2F0aW9ucyIpLGM9cygieiIpLHU9cygiZ2VvanNvbiIpO24uaXNBcnJheU9yVHlwZWRBcnJheShsKSYmbC5sZW5ndGgmJm4uaXNBcnJheU9yVHlwZWRBcnJheShjKSYmYy5sZW5ndGgmJigic3RyaW5nIj09dHlwZW9mIHUmJiIiIT09dXx8bi5pc1BsYWluT2JqZWN0KHUpKT8ocygiZmVhdHVyZWlka2V5IiksZS5fbGVuZ3RoPU1hdGgubWluKGwubGVuZ3RoLGMubGVuZ3RoKSxzKCJiZWxvdyIpLHMoInRleHQiKSxzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIikscygibWFya2VyLmxpbmUud2lkdGgiKSYmcygibWFya2VyLmxpbmUuY29sb3IiKSxzKCJtYXJrZXIub3BhY2l0eSIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscykpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MjUsIi4uLy4uL2xpYiI6NzUwLCIuL2F0dHJpYnV0ZXMiOjk2OX1dLDk3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL2hlYXRtYXAvY29sb3JiYXIiKSxjYWxjOnQoIi4uL2Nob3JvcGxldGgvY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksaG92ZXJQb2ludHM6dCgiLi4vY2hvcm9wbGV0aC9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuLi9jaG9yb3BsZXRoL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi4vY2hvcm9wbGV0aC9zZWxlY3QiKSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7ZSYmZVswXS50cmFjZS5fZ2xUcmFjZS51cGRhdGVPblNlbGVjdChlKX0sZ2V0QmVsb3c6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5nZXRNYXBMYXllcnMoKSxuPXIubGVuZ3RoLTI7bj49MDtuLS0pe3ZhciBpPXJbbl0uaWQ7aWYoInN0cmluZyI9PXR5cGVvZiBpJiYwPT09aS5pbmRleE9mKCJ3YXRlciIpKWZvcih2YXIgYT1uKzE7YTxyLmxlbmd0aDthKyspaWYoInN0cmluZyI9PXR5cGVvZihpPXJbYV0uaWQpJiYtMT09PWkuaW5kZXhPZigicGxvdGx5LSIpKXJldHVybiBpfX0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNob3JvcGxldGhtYXBib3giLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLGNhdGVnb3JpZXM6WyJtYXBib3giLCJnbCIsIm5vT3BhY2l0eSIsInNob3dMZWdlbmQiXSxtZXRhOntocl9uYW1lOiJjaG9yb3BsZXRoX21hcGJveCJ9fX0seyIuLi8uLi9wbG90cy9tYXBib3giOjg1NiwiLi4vY2hvcm9wbGV0aC9jYWxjIjo5NjEsIi4uL2Nob3JvcGxldGgvZXZlbnRfZGF0YSI6OTYzLCIuLi9jaG9yb3BsZXRoL2hvdmVyIjo5NjQsIi4uL2Nob3JvcGxldGgvc2VsZWN0Ijo5NjcsIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwMzksIi4vYXR0cmlidXRlcyI6OTY5LCIuL2RlZmF1bHRzIjo5NzEsIi4vcGxvdCI6OTczfV0sOTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29udmVydCIpLmNvbnZlcnQsaT10KCIuL2NvbnZlcnQiKS5jb252ZXJ0T25TZWxlY3QsYT10KCIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIikudHJhY2VMYXllclByZWZpeDtmdW5jdGlvbiBvKHQsZSl7dGhpcy50eXBlPSJjaG9yb3BsZXRobWFwYm94Iix0aGlzLnN1YnBsb3Q9dCx0aGlzLnVpZD1lLHRoaXMuc291cmNlSWQ9InNvdXJjZS0iK2UsdGhpcy5sYXllckxpc3Q9W1siZmlsbCIsYStlKyItZmlsbCJdLFsibGluZSIsYStlKyItbGluZSJdXSx0aGlzLmJlbG93PW51bGx9dmFyIHM9by5wcm90b3R5cGU7cy51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKG4odCkpfSxzLnVwZGF0ZU9uU2VsZWN0PWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZShpKHQpKX0scy5fdXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3VicGxvdCxyPXRoaXMubGF5ZXJMaXN0LG49ZS5iZWxvd0xvb2t1cFsidHJhY2UtIit0aGlzLnVpZF07ZS5tYXAuZ2V0U291cmNlKHRoaXMuc291cmNlSWQpLnNldERhdGEodC5nZW9qc29uKSxuIT09dGhpcy5iZWxvdyYmKHRoaXMuX3JlbW92ZUxheWVycygpLHRoaXMuX2FkZExheWVycyh0LG4pLHRoaXMuYmVsb3c9bik7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz1hWzBdLHM9YVsxXSxsPXRbb107ZS5zZXRPcHRpb25zKHMsInNldExheW91dFByb3BlcnR5IixsLmxheW91dCksInZpc2libGUiPT09bC5sYXlvdXQudmlzaWJpbGl0eSYmZS5zZXRPcHRpb25zKHMsInNldFBhaW50UHJvcGVydHkiLGwucGFpbnQpfX0scy5fYWRkTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuc3VicGxvdCxuPXRoaXMubGF5ZXJMaXN0LGk9dGhpcy5zb3VyY2VJZCxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV0scz1vWzBdLGw9dFtzXTtyLmFkZExheWVyKHt0eXBlOnMsaWQ6b1sxXSxzb3VyY2U6aSxsYXlvdXQ6bC5sYXlvdXQscGFpbnQ6bC5wYWludH0sZSl9fSxzLl9yZW1vdmVMYXllcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdWJwbG90Lm1hcCxlPXRoaXMubGF5ZXJMaXN0LHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSl0LnJlbW92ZUxheWVyKGVbcl1bMV0pfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN1YnBsb3QubWFwO3RoaXMuX3JlbW92ZUxheWVycygpLHQucmVtb3ZlU291cmNlKHRoaXMuc291cmNlSWQpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLGk9bmV3IG8odCxyLnVpZCksYT1pLnNvdXJjZUlkLHM9bihlKSxsPWkuYmVsb3c9dC5iZWxvd0xvb2t1cFsidHJhY2UtIityLnVpZF07cmV0dXJuIHQubWFwLmFkZFNvdXJjZShhLHt0eXBlOiJnZW9qc29uIixkYXRhOnMuZ2VvanNvbn0pLGkuX2FkZExheWVycyhzLGwpLGVbMF0udHJhY2UuX2dsVHJhY2U9aSxpfX0seyIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIjo4NTQsIi4vY29udmVydCI6OTcwfV0sOTc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx3Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzY2FsZWQiLCJhYnNvbHV0ZSJdLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJzY2FsZWQifSxzaXplcmVmOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MH0sYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixlZGl0VHlwZToiY2FsYyIsdmFsdWVzOlsidGlwIiwidGFpbCIsImNtIiwiY2VudGVyIl0sZGZsdDoiY20ifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmkoe2VkaXRUeXBlOiJjYWxjIn0se2tleXM6WyJub3JtIl19KSxzaG93bGVnZW5kOnMoe30sby5zaG93bGVnZW5kLHtkZmx0OiExfSl9O3MobCxuKCIiLHtjb2xvckF0dHI6InUvdi93IG5vcm0iLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSk7WyJvcGFjaXR5IiwibGlnaHRwb3NpdGlvbiIsImxpZ2h0aW5nIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bFt0XT1hW3RdfSkpLGwuaG92ZXJpbmZvPXMoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbIngiLCJ5IiwieiIsInUiLCJ2IiwidyIsIm5vcm0iLCJ0ZXh0IiwibmFtZSJdLGRmbHQ6IngreSt6K25vcm0rdGV4dCtuYW1lIn0pLGwudHJhbnNmb3Jtcz12b2lkIDAsZS5leHBvcnRzPWx9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYyMiwiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiOjEwOTl9XSw5NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS51LGk9ZS52LGE9ZS53LG89TWF0aC5taW4oZS54Lmxlbmd0aCxlLnkubGVuZ3RoLGUuei5sZW5ndGgsci5sZW5ndGgsaS5sZW5ndGgsYS5sZW5ndGgpLHM9LTEvMCxsPTEvMCxjPTA7YzxvO2MrKyl7dmFyIHU9cltjXSxoPWlbY10sZj1hW2NdLHA9TWF0aC5zcXJ0KHUqdStoKmgrZipmKTtzPU1hdGgubWF4KHMscCksbD1NYXRoLm1pbihsLHApfWUuX2xlbj1vLGUuX25vcm1NYXg9cyxuKHQsZSx7dmFsczpbbCxzXSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYyM31dLDk3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1jb25lM2QiKSxpPXQoImdsLWNvbmUzZCIpLmNyZWF0ZUNvbmVNZXNoLGE9dCgiLi4vLi4vbGliIikuc2ltcGxlTWFwLG89dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmV4dHJhY3RPcHRzLGw9dCgiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIik7ZnVuY3Rpb24gYyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB1PWMucHJvdG90eXBlO3UuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXgscj10aGlzLmRhdGEueFtlXSxuPXRoaXMuZGF0YS55W2VdLGk9dGhpcy5kYXRhLnpbZV0sYT10aGlzLmRhdGEudVtlXSxvPXRoaXMuZGF0YS52W2VdLHM9dGhpcy5kYXRhLndbZV07dC50cmFjZUNvb3JkaW5hdGU9W3IsbixpLGEsbyxzLE1hdGguc3FydChhKmErbypvK3MqcyldO3ZhciBsPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGwpJiZ2b2lkIDAhPT1sW2VdP3QudGV4dExhYmVsPWxbZV06bCYmKHQudGV4dExhYmVsPWwpLCEwfX07dmFyIGg9e3hheGlzOjAseWF4aXM6MSx6YXhpczoyfSxmPXt0aXA6MSx0YWlsOjAsY206LjI1LGNlbnRlcjouNX0scD17dGlwOjEsdGFpbDoxLGNtOi43NSxjZW50ZXI6LjV9O2Z1bmN0aW9uIGQodCxlKXt2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxpPXQuZGF0YVNjYWxlLGM9e307ZnVuY3Rpb24gdSh0LGUpe3ZhciBuPXJbZV0sbz1pW2hbZV1dO3JldHVybiBhKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBuLmQybCh0KSpvfSkpfWMudmVjdG9ycz1sKHUoZS51LCJ4YXhpcyIpLHUoZS52LCJ5YXhpcyIpLHUoZS53LCJ6YXhpcyIpLGUuX2xlbiksYy5wb3NpdGlvbnM9bCh1KGUueCwieGF4aXMiKSx1KGUueSwieWF4aXMiKSx1KGUueiwiemF4aXMiKSxlLl9sZW4pO3ZhciBkPXMoZSk7Yy5jb2xvcm1hcD1vKGUpLGMudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtkLm1pbi9lLl9ub3JtTWF4LGQubWF4L2UuX25vcm1NYXhdLGMuY29uZU9mZnNldD1mW2UuYW5jaG9yXSwic2NhbGVkIj09PWUuc2l6ZW1vZGU/Yy5jb25lU2l6ZT1lLnNpemVyZWZ8fC41OmMuY29uZVNpemU9ZS5zaXplcmVmJiZlLl9ub3JtTWF4P2Uuc2l6ZXJlZi9lLl9ub3JtTWF4Oi41O3ZhciBnPW4oYyksbT1lLmxpZ2h0cG9zaXRpb247cmV0dXJuIGcubGlnaHRQb3NpdGlvbj1bbS54LG0ueSxtLnpdLGcuYW1iaWVudD1lLmxpZ2h0aW5nLmFtYmllbnQsZy5kaWZmdXNlPWUubGlnaHRpbmcuZGlmZnVzZSxnLnNwZWN1bGFyPWUubGlnaHRpbmcuc3BlY3VsYXIsZy5yb3VnaG5lc3M9ZS5saWdodGluZy5yb3VnaG5lc3MsZy5mcmVzbmVsPWUubGlnaHRpbmcuZnJlc25lbCxnLm9wYWNpdHk9ZS5vcGFjaXR5LGUuX3BhZD1wW2UuYW5jaG9yXSpnLnZlY3RvclNjYWxlKmcuY29uZVNjYWxlKmUuX25vcm1NYXgsZ311LnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1kKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1kKHQsZSksYT1pKHIsbiksbz1uZXcgYyh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjcsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NDYsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODUyLCJnbC1jb25lM2QiOjI1OX1dLDk3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKCJ1IiksYz1zKCJ2IiksdT1zKCJ3IiksaD1zKCJ4IiksZj1zKCJ5IikscD1zKCJ6Iik7bCYmbC5sZW5ndGgmJmMmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmaCYmaC5sZW5ndGgmJmYmJmYubGVuZ3RoJiZwJiZwLmxlbmd0aD8ocygic2l6ZXJlZiIpLHMoInNpemVtb2RlIikscygiYW5jaG9yIikscygibGlnaHRpbmcuYW1iaWVudCIpLHMoImxpZ2h0aW5nLmRpZmZ1c2UiKSxzKCJsaWdodGluZy5zcGVjdWxhciIpLHMoImxpZ2h0aW5nLnJvdWdobmVzcyIpLHMoImxpZ2h0aW5nLmZyZXNuZWwiKSxzKCJsaWdodHBvc2l0aW9uLngiKSxzKCJsaWdodHBvc2l0aW9uLnkiKSxzKCJsaWdodHBvc2l0aW9uLnoiKSxpKHQsZSxvLHMse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLHMoInRleHQiKSxzKCJob3ZlcnRleHQiKSxzKCJob3ZlcnRlbXBsYXRlIiksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MjUsIi4uLy4uL2xpYiI6NzUwLCIuL2F0dHJpYnV0ZXMiOjk3NH1dLDk3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjb25lIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzaG93TGVnZW5kIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0sY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLGV2ZW50RGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vcm09ZS50cmFjZUNvb3JkaW5hdGVbNl0sdH0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6ODQxLCIuL2F0dHJpYnV0ZXMiOjk3NCwiLi9jYWxjIjo5NzUsIi4vY29udmVydCI6OTc2LCIuL2RlZmF1bHRzIjo5Nzd9XSw5Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gscz10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9dCgiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiKSx1PWMuQ09NUEFSSVNPTl9PUFMyLGg9Yy5JTlRFUlZBTF9PUFMsZj0odCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKS5GT1JNQVRfTElOSyxpLmxpbmUpO2UuZXhwb3J0cz1sKHt6Om4ueix4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHhwZXJpb2Q6bi54cGVyaW9kLHlwZXJpb2Q6bi55cGVyaW9kLHhwZXJpb2QwOmkueHBlcmlvZDAseXBlcmlvZDA6aS55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50Om4ueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50Om4ueXBlcmlvZGFsaWdubWVudCx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLHh0eXBlOm4ueHR5cGUseXR5cGU6bi55dHlwZSx6aG92ZXJmb3JtYXQ6bi56aG92ZXJmb3JtYXQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsaG92ZXJvbmdhcHM6bi5ob3Zlcm9uZ2Fwcyxjb25uZWN0Z2FwczpsKHt9LG4uY29ubmVjdGdhcHMse30pLGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sYXV0b2NvbnRvdXI6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7ImNvbnRvdXJzLnN0YXJ0Ijp2b2lkIDAsImNvbnRvdXJzLmVuZCI6dm9pZCAwLCJjb250b3Vycy5zaXplIjp2b2lkIDB9fSxuY29udG91cnM6e3ZhbFR5cGU6ImludGVnZXIiLGRmbHQ6MTUsbWluOjEsZWRpdFR5cGU6ImNhbGMifSxjb250b3Vyczp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGV2ZWxzIiwiY29uc3RyYWludCJdLGRmbHQ6ImxldmVscyIsZWRpdFR5cGU6ImNhbGMifSxzdGFydDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvY29udG91ciI6ITF9fSxlbmQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b2NvbnRvdXIiOiExfX0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvY29udG91ciI6ITF9fSxjb2xvcmluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmlsbCIsImhlYXRtYXAiLCJsaW5lcyIsIm5vbmUiXSxkZmx0OiJmaWxsIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHNob3dsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxsYWJlbGZvbnQ6cyh7ZWRpdFR5cGU6InBsb3QiLGNvbG9yRWRpdFR5cGU6InN0eWxlIn0pLGxhYmVsZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxvcGVyYXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXS5jb25jYXQodSkuY29uY2F0KGgpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpsKHt9LGYuY29sb3Ise2VkaXRUeXBlOiJzdHlsZStjb2xvcmJhcnMifSksd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlK2NvbG9yYmFycyJ9LGRhc2g6byxzbW9vdGhpbmc6bCh7fSxmLnNtb290aGluZyx7fSksZWRpdFR5cGU6InBsb3QifX0sYSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjIyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjM2LCIuLi8uLi9jb25zdGFudHMvZG9jcyI6NzIwLCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NzIxLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODI3LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjEwMzYsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE1OH1dLDk4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxpPXQoIi4uL2hlYXRtYXAvY2FsYyIpLGE9dCgiLi9zZXRfY29udG91cnMiKSxvPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKHQsZSkscz1yWzBdLno7YShlLHMpO3ZhciBsLGM9ZS5jb250b3Vycyx1PW4uZXh0cmFjdE9wdHMoZSk7aWYoImhlYXRtYXAiPT09Yy5jb2xvcmluZyYmdS5hdXRvJiYhMT09PWUuYXV0b2NvbnRvdXIpe3ZhciBoPWMuc3RhcnQsZj1vKGMpLHA9Yy5zaXplfHwxLGQ9TWF0aC5mbG9vcigoZi1oKS9wKSsxO2lzRmluaXRlKHApfHwocD0xLGQ9MSk7dmFyIGc9aC1wLzI7bD1bZyxnK2QqcF19ZWxzZSBsPXM7cmV0dXJuIG4uY2FsYyh0LGUse3ZhbHM6bCxjTGV0dGVyOiJ6In0pLHJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuLi9oZWF0bWFwL2NhbGMiOjEwMzcsIi4vZW5kX3BsdXMiOjk5MCwiLi9zZXRfY29udG91cnMiOjk5OH1dLDk4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRbMF0saT1uLno7c3dpdGNoKGUudHlwZSl7Y2FzZSJsZXZlbHMiOnZhciBhPU1hdGgubWluKGlbMF1bMF0saVswXVsxXSk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXTtvLnByZWZpeEJvdW5kYXJ5PSFvLmVkZ2VwYXRocy5sZW5ndGgmJihhPm8ubGV2ZWx8fG8uc3RhcnRzLmxlbmd0aCYmYT09PW8ubGV2ZWwpfWJyZWFrO2Nhc2UiY29uc3RyYWludCI6aWYobi5wcmVmaXhCb3VuZGFyeT0hMSxuLmVkZ2VwYXRocy5sZW5ndGgpcmV0dXJuO3ZhciBzPW4ueC5sZW5ndGgsbD1uLnkubGVuZ3RoLGM9LTEvMCx1PTEvMDtmb3Iocj0wO3I8bDtyKyspdT1NYXRoLm1pbih1LGlbcl1bMF0pLHU9TWF0aC5taW4odSxpW3JdW3MtMV0pLGM9TWF0aC5tYXgoYyxpW3JdWzBdKSxjPU1hdGgubWF4KGMsaVtyXVtzLTFdKTtmb3Iocj0xO3I8cy0xO3IrKyl1PU1hdGgubWluKHUsaVswXVtyXSksdT1NYXRoLm1pbih1LGlbbC0xXVtyXSksYz1NYXRoLm1heChjLGlbMF1bcl0pLGM9TWF0aC5tYXgoYyxpW2wtMV1bcl0pO3ZhciBoLGYscD1lLnZhbHVlO3N3aXRjaChlLl9vcGVyYXRpb24pe2Nhc2UiPiI6cD5jJiYobi5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZSI8IjoocDx1fHxuLnN0YXJ0cy5sZW5ndGgmJnA9PT11KSYmKG4ucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiW10iOmg9TWF0aC5taW4ocFswXSxwWzFdKSwoKGY9TWF0aC5tYXgocFswXSxwWzFdKSk8dXx8aD5jfHxuLnN0YXJ0cy5sZW5ndGgmJmY9PT11KSYmKG4ucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiXVsiOmg9TWF0aC5taW4ocFswXSxwWzFdKSxmPU1hdGgubWF4KHBbMF0scFsxXSksaDx1JiZmPmMmJihuLnByZWZpeEJvdW5kYXJ5PSEwKX19fX0se31dLDk4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxpPXQoIi4vbWFrZV9jb2xvcl9tYXAiKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9e21pbjoiem1pbiIsbWF4OiJ6bWF4IixjYWxjOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1lLmNvbnRvdXJzLHM9ZS5saW5lLGw9by5zaXplfHwxLGM9by5jb2xvcmluZyx1PWkoZSx7aXNDb2xvcmJhcjohMH0pO2lmKCJoZWF0bWFwIj09PWMpe3ZhciBoPW4uZXh0cmFjdE9wdHMoZSk7ci5fZmlsbGdyYWRpZW50PWgucmV2ZXJzZXNjYWxlP24uZmxpcFNjYWxlKGguY29sb3JzY2FsZSk6aC5jb2xvcnNjYWxlLHIuX3pyYW5nZT1baC5taW4saC5tYXhdfWVsc2UiZmlsbCI9PT1jJiYoci5fZmlsbGNvbG9yPXUpO3IuX2xpbmU9e2NvbG9yOiJsaW5lcyI9PT1jP3U6cy5jb2xvcix3aWR0aDohMSE9PW8uc2hvd2xpbmVzP3Mud2lkdGg6MCxkYXNoOnMuZGFzaH0sci5fbGV2ZWxzPXtzdGFydDpvLnN0YXJ0LGVuZDphKG8pLHNpemU6bH19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYyNywiLi9lbmRfcGx1cyI6OTkwLCIuL21ha2VfY29sb3JfbWFwIjo5OTV9XSw5ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCT1RUT01TVEFSVDpbMSw5LDEzLDEwNCw3MTNdLFRPUFNUQVJUOls0LDYsNywxMDQsNzEzXSxMRUZUU1RBUlQ6WzgsMTIsMTQsMjA4LDExMTRdLFJJR0hUU1RBUlQ6WzIsMywxMSwyMDgsMTExNF0sTkVXREVMVEE6W251bGwsWy0xLDBdLFswLC0xXSxbLTEsMF0sWzEsMF0sbnVsbCxbMCwtMV0sWy0xLDBdLFswLDFdLFswLDFdLG51bGwsWzAsMV0sWzEsMF0sWzEsMF0sWzAsLTFdXSxDSE9PU0VTQURETEU6ezEwNDpbNCwxXSwyMDg6WzIsOF0sNzEzOls3LDEzXSwxMTE0OlsxMSwxNF19LFNBRERMRVJFTUFJTkRFUjp7MTo0LDI6OCw0OjEsNzoxMyw4OjIsMTE6MTQsMTM6NywxNDoxMX0sTEFCRUxESVNUQU5DRToyLExBQkVMSU5DUkVBU0U6MTAsTEFCRUxNSU46MyxMQUJFTE1BWDoxMCxMQUJFTE9QVElNSVpFUjp7RURHRUNPU1Q6MSxBTkdMRUNPU1Q6MSxORUlHSEJPUkNPU1Q6NSxTQU1FTEVWRUxGQUNUT1I6MTAsU0FNRUxFVkVMRElTVEFOQ0U6NSxNQVhDT1NUOjEwMCxJTklUSUFMU0VBUkNIUE9JTlRTOjEwLElURVJBVElPTlM6NX19fSx7fV0sOTg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2xhYmVsX2RlZmF1bHRzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz1hLmFkZE9wYWNpdHkscz1hLm9wYWNpdHksbD10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGM9bC5DT05TVFJBSU5UX1JFRFVDVElPTix1PWwuQ09NUEFSSVNPTl9PUFMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsaCl7dmFyIGYscCxkLGc9ZS5jb250b3VycyxtPXIoImNvbnRvdXJzLm9wZXJhdGlvbiIpOyhnLl9vcGVyYXRpb249Y1ttXSxmdW5jdGlvbih0LGUpe3ZhciByOy0xPT09dS5pbmRleE9mKGUub3BlcmF0aW9uKT8odCgiY29udG91cnMudmFsdWUiLFswLDFdKSxBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWUubGVuZ3RoPjI/ZS52YWx1ZT1lLnZhbHVlLnNsaWNlKDIpOjA9PT1lLmxlbmd0aD9lLnZhbHVlPVswLDFdOmUubGVuZ3RoPDI/KHI9cGFyc2VGbG9hdChlLnZhbHVlWzBdKSxlLnZhbHVlPVtyLHIrMV0pOmUudmFsdWU9W3BhcnNlRmxvYXQoZS52YWx1ZVswXSkscGFyc2VGbG9hdChlLnZhbHVlWzFdKV06bihlLnZhbHVlKSYmKHI9cGFyc2VGbG9hdChlLnZhbHVlKSxlLnZhbHVlPVtyLHIrMV0pKToodCgiY29udG91cnMudmFsdWUiLDApLG4oZS52YWx1ZSl8fChBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWU9cGFyc2VGbG9hdChlLnZhbHVlWzBdKTplLnZhbHVlPTApKX0ocixnKSwiPSI9PT1tP2Y9Zy5zaG93bGluZXM9ITA6KGY9cigiY29udG91cnMuc2hvd2xpbmVzIiksZD1yKCJmaWxsY29sb3IiLG8oKHQubGluZXx8e30pLmNvbG9yfHxsLC41KSkpLGYpJiYocD1yKCJsaW5lLmNvbG9yIixkJiZzKGQpP28oZS5maWxsY29sb3IsMSk6bCkscigibGluZS53aWR0aCIsMikscigibGluZS5kYXNoIikpO3IoImxpbmUuc21vb3RoaW5nIiksaShyLGEscCxoKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NzIxLCIuL2xhYmVsX2RlZmF1bHRzIjo5OTQsImZhc3QtaXNudW1lcmljIjoyNDF9XSw5ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiKSxpPXQoImZhc3QtaXNudW1lcmljIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByLGE9QXJyYXkuaXNBcnJheShlKTtmdW5jdGlvbiBvKHQpe3JldHVybiBpKHQpPyt0Om51bGx9cmV0dXJuLTEhPT1uLkNPTVBBUklTT05fT1BTMi5pbmRleE9mKHQpP3I9byhhP2VbMF06ZSk6LTEhPT1uLklOVEVSVkFMX09QUy5pbmRleE9mKHQpP3I9YT9bbyhlWzBdKSxvKGVbMV0pXTpbbyhlKSxvKGUpXTotMSE9PW4uU0VUX09QUy5pbmRleE9mKHQpJiYocj1hP2UubWFwKG8pOltvKGUpXSkscn1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtlPWEodCxlKTt2YXIgcj1NYXRoLm1pbihlWzBdLGVbMV0pLG49TWF0aC5tYXgoZVswXSxlWzFdKTtyZXR1cm57c3RhcnQ6cixlbmQ6bixzaXplOm4tcn19fWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybntzdGFydDplPWEodCxlKSxlbmQ6MS8wLHNpemU6MS8wfX19ZS5leHBvcnRzPXsiW10iOm8oIltdIiksIl1bIjpvKCJdWyIpLCI+IjpzKCI+IiksIjwiOnMoIjwiKSwiPSI6cygiPSIpfX0seyIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NzIxLCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sOTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uKCJjb250b3Vycy5zdGFydCIpLGE9bigiY29udG91cnMuZW5kIiksbz0hMT09PWl8fCExPT09YSxzPXIoImNvbnRvdXJzLnNpemUiKTshKG8/ZS5hdXRvY29udG91cj0hMDpyKCJhdXRvY29udG91ciIsITEpKSYmc3x8cigibmNvbnRvdXJzIil9fSx7fV0sOTg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG4uZXh0ZW5kRmxhdCh7fSx0LHtlZGdlcGF0aHM6bi5leHRlbmREZWVwKFtdLHQuZWRnZXBhdGhzKSxwYXRoczpuLmV4dGVuZERlZXAoW10sdC5wYXRocyksc3RhcnRzOm4uZXh0ZW5kRGVlcChbXSx0LnN0YXJ0cyl9KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scz1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXZlcnNlKCl9LGw9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3N3aXRjaChlKXtjYXNlIj0iOmNhc2UiPCI6cmV0dXJuIHQ7Y2FzZSI+Ijpmb3IoMSE9PXQubGVuZ3RoJiZuLndhcm4oIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgb3BlcmF0aW9uLiIpLGE9dFswXSxyPTA7cjxhLmVkZ2VwYXRocy5sZW5ndGg7cisrKWEuZWRnZXBhdGhzW3JdPXMoYS5lZGdlcGF0aHNbcl0pO2ZvcihyPTA7cjxhLnBhdGhzLmxlbmd0aDtyKyspYS5wYXRoc1tyXT1zKGEucGF0aHNbcl0pO2ZvcihyPTA7cjxhLnN0YXJ0cy5sZW5ndGg7cisrKWEuc3RhcnRzW3JdPXMoYS5zdGFydHNbcl0pO3JldHVybiB0O2Nhc2UiXVsiOnZhciBjPXM7cz1sLGw9YztjYXNlIltdIjpmb3IoMiE9PXQubGVuZ3RoJiZuLndhcm4oIkNvbnRvdXIgZGF0YSBpbnZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGluZXF1YWxpdHkgcmFuZ2Ugb3BlcmF0aW9uLiIpLGE9aSh0WzBdKSxvPWkodFsxXSkscj0wO3I8YS5lZGdlcGF0aHMubGVuZ3RoO3IrKylhLmVkZ2VwYXRoc1tyXT1zKGEuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8YS5wYXRocy5sZW5ndGg7cisrKWEucGF0aHNbcl09cyhhLnBhdGhzW3JdKTtmb3Iocj0wO3I8YS5zdGFydHMubGVuZ3RoO3IrKylhLnN0YXJ0c1tyXT1zKGEuc3RhcnRzW3JdKTtmb3IoO28uZWRnZXBhdGhzLmxlbmd0aDspYS5lZGdlcGF0aHMucHVzaChsKG8uZWRnZXBhdGhzLnNoaWZ0KCkpKTtmb3IoO28ucGF0aHMubGVuZ3RoOylhLnBhdGhzLnB1c2gobChvLnBhdGhzLnNoaWZ0KCkpKTtmb3IoO28uc3RhcnRzLmxlbmd0aDspYS5zdGFydHMucHVzaChsKG8uc3RhcnRzLnNoaWZ0KCkpKTtyZXR1cm5bYV19fX0seyIuLi8uLi9saWIiOjc1MH1dLDk4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLG89dCgiLi9jb25zdHJhaW50X2RlZmF1bHRzIikscz10KCIuL2NvbnRvdXJzX2RlZmF1bHRzIiksbD10KCIuL3N0eWxlX2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gaChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWlmKGkodCxlLGgsdSkpe2EodCxlLHUsaCksaCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxoKCJob3Zlcm9uZ2FwcyIpO3ZhciBmPSJjb25zdHJhaW50Ij09PWgoImNvbnRvdXJzLnR5cGUiKTtoKCJjb25uZWN0Z2FwcyIsbi5pc0FycmF5MUQoZS56KSksZj9vKHQsZSxoLHUscik6KHModCxlLGgsKGZ1bmN0aW9uKHIpe3JldHVybiBuLmNvZXJjZTIodCxlLGMscil9KSksbCh0LGUsaCx1KSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyI6MTA1MCwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjExNzgsIi4vYXR0cmlidXRlcyI6OTc5LCIuL2NvbnN0cmFpbnRfZGVmYXVsdHMiOjk4NCwiLi9jb250b3Vyc19kZWZhdWx0cyI6OTg2LCIuL3N0eWxlX2RlZmF1bHRzIjoxZTN9XSw5ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2NvbnN0cmFpbnRfbWFwcGluZyIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBvPSJjb25zdHJhaW50Ij09PXQudHlwZT9pW3QuX29wZXJhdGlvbl0odC52YWx1ZSk6dCxzPW8uc2l6ZSxsPVtdLGM9YShvKSx1PXIudHJhY2UuX2NhcnBldFRyYWNlLGg9dT97eGF4aXM6dS5hYXhpcyx5YXhpczp1LmJheGlzLHg6ci5hLHk6ci5ifTp7eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6ci54LHk6ci55fSxmPW8uc3RhcnQ7ZjxjO2YrPXMpaWYobC5wdXNoKG4uZXh0ZW5kRmxhdCh7bGV2ZWw6Zixjcm9zc2luZ3M6e30sc3RhcnRzOltdLGVkZ2VwYXRoczpbXSxwYXRoczpbXSx6OnIueixzbW9vdGhpbmc6ci50cmFjZS5saW5lLnNtb290aGluZ30saCkpLGwubGVuZ3RoPjFlMyl7bi53YXJuKCJUb28gbWFueSBjb250b3VycywgY2xpcHBpbmcgYXQgMTAwMCIsdCk7YnJlYWt9cmV0dXJuIGx9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuL2NvbnN0cmFpbnRfbWFwcGluZyI6OTg1LCIuL2VuZF9wbHVzIjo5OTB9XSw5OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZCt0LnNpemUvMWU2fX0se31dLDk5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzBdKTxyJiZNYXRoLmFicyh0WzFdLWVbMV0pPG59ZnVuY3Rpb24gbyh0LGUscixvLGwpe3ZhciBjLHU9ZS5qb2luKCIsIiksaD10LmNyb3NzaW5nc1t1XSxmPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0wLGE9MDt0PjIwJiZlPzIwOD09PXR8fDExMTQ9PT10P249MD09PXJbMF0/MTotMTphPTA9PT1yWzFdPzE6LTE6LTEhPT1pLkJPVFRPTVNUQVJULmluZGV4T2YodCk/YT0xOi0xIT09aS5MRUZUU1RBUlQuaW5kZXhPZih0KT9uPTE6LTEhPT1pLlRPUFNUQVJULmluZGV4T2YodCk/YT0tMTpuPS0xO3JldHVybltuLGFdfShoLHIsZSkscD1bcyh0LGUsWy1mWzBdLC1mWzFdXSldLGQ9dC56Lmxlbmd0aCxnPXQuelswXS5sZW5ndGgsbT1lLnNsaWNlKCksdj1mLnNsaWNlKCk7Zm9yKGM9MDtjPDFlNDtjKyspe2lmKGg+MjA/KGg9aS5DSE9PU0VTQURETEVbaF1bKGZbMF18fGZbMV0pPDA/MDoxXSx0LmNyb3NzaW5nc1t1XT1pLlNBRERMRVJFTUFJTkRFUltoXSk6ZGVsZXRlIHQuY3Jvc3NpbmdzW3VdLCEoZj1pLk5FV0RFTFRBW2hdKSl7bi5sb2coIkZvdW5kIGJhZCBtYXJjaGluZyBpbmRleDoiLGgsZSx0LmxldmVsKTticmVha31wLnB1c2gocyh0LGUsZikpLGVbMF0rPWZbMF0sZVsxXSs9ZlsxXSx1PWUuam9pbigiLCIpLGEocFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTJdLG8sbCkmJnAucG9wKCk7dmFyIHk9ZlswXSYmKGVbMF08MHx8ZVswXT5nLTIpfHxmWzFdJiYoZVsxXTwwfHxlWzFdPmQtMik7aWYoZVswXT09PW1bMF0mJmVbMV09PT1tWzFdJiZmWzBdPT09dlswXSYmZlsxXT09PXZbMV18fHImJnkpYnJlYWs7aD10LmNyb3NzaW5nc1t1XX0xZTQ9PT1jJiZuLmxvZygiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyPyIpO3ZhciB4LGIsXyx3LFQsayxNLEEsUyxFLEMsTCxQLEkseixPPWEocFswXSxwW3AubGVuZ3RoLTFdLG8sbCksRD0wLFI9LjIqdC5zbW9vdGhpbmcsRj1bXSxCPTA7Zm9yKGM9MTtjPHAubGVuZ3RoO2MrKylMPXBbY10sUD1wW2MtMV0sST12b2lkIDAsej12b2lkIDAsST1MWzJdLVBbMl0sej1MWzNdLVBbM10sRCs9TT1NYXRoLnNxcnQoSSpJK3oqeiksRi5wdXNoKE0pO3ZhciBOPUQvRi5sZW5ndGgqUjtmdW5jdGlvbiBqKHQpe3JldHVybiBwW3QlcC5sZW5ndGhdfWZvcihjPXAubGVuZ3RoLTI7Yz49QjtjLS0paWYoKHg9RltjXSk8Til7Zm9yKF89MCxiPWMtMTtiPj1CJiZ4K0ZbYl08TjtiLS0peCs9RltiXTtpZihPJiZjPT09cC5sZW5ndGgtMilmb3IoXz0wO188YiYmeCtGW19dPE47XysrKXgrPUZbX107VD1jLWIrXysxLGs9TWF0aC5mbG9vcigoYytiK18rMikvMiksdz1PfHxjIT09cC5sZW5ndGgtMj9PfHwtMSE9PWI/VCUyP2ooayk6WyhqKGspWzBdK2ooaysxKVswXSkvMiwoaihrKVsxXStqKGsrMSlbMV0pLzJdOnBbMF06cFtwLmxlbmd0aC0xXSxwLnNwbGljZShiKzEsYy1iKzEsdyksYz1iKzEsXyYmKEI9XyksTyYmKGM9PT1wLmxlbmd0aC0yP3BbX109cFtwLmxlbmd0aC0xXTowPT09YyYmKHBbcC5sZW5ndGgtMV09cFswXSkpfWZvcihwLnNwbGljZSgwLEIpLGM9MDtjPHAubGVuZ3RoO2MrKylwW2NdLmxlbmd0aD0yO2lmKCEocC5sZW5ndGg8MikpaWYoTylwLnBvcCgpLHQucGF0aHMucHVzaChwKTtlbHNle3J8fG4ubG9nKCJVbmNsb3NlZCBpbnRlcmlvciBjb250b3VyPyIsdC5sZXZlbCxtLmpvaW4oIiwiKSxwLmpvaW4oIkwiKSk7dmFyIFU9ITE7Zm9yKEE9MDtBPHQuZWRnZXBhdGhzLmxlbmd0aDtBKyspaWYoRT10LmVkZ2VwYXRoc1tBXSwhVSYmYShFWzBdLHBbcC5sZW5ndGgtMV0sbyxsKSl7cC5wb3AoKSxVPSEwO3ZhciBWPSExO2ZvcihTPTA7Uzx0LmVkZ2VwYXRocy5sZW5ndGg7UysrKWlmKGEoKEM9dC5lZGdlcGF0aHNbU10pW0MubGVuZ3RoLTFdLHBbMF0sbyxsKSl7Vj0hMCxwLnNoaWZ0KCksdC5lZGdlcGF0aHMuc3BsaWNlKEEsMSksUz09PUE/dC5wYXRocy5wdXNoKHAuY29uY2F0KEMpKTooUz5BJiZTLS0sdC5lZGdlcGF0aHNbU109Qy5jb25jYXQocCxFKSk7YnJlYWt9Vnx8KHQuZWRnZXBhdGhzW0FdPXAuY29uY2F0KEUpKX1mb3IoQT0wO0E8dC5lZGdlcGF0aHMubGVuZ3RoJiYhVTtBKyspYSgoRT10LmVkZ2VwYXRoc1tBXSlbRS5sZW5ndGgtMV0scFswXSxvLGwpJiYocC5zaGlmdCgpLHQuZWRnZXBhdGhzW0FdPUUuY29uY2F0KHApLFU9ITApO1V8fHQuZWRnZXBhdGhzLnB1c2gocCl9fWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuPWVbMF0rTWF0aC5tYXgoclswXSwwKSxpPWVbMV0rTWF0aC5tYXgoclsxXSwwKSxhPXQueltpXVtuXSxvPXQueGF4aXMscz10LnlheGlzO2lmKHJbMV0pe3ZhciBsPSh0LmxldmVsLWEpLyh0LnpbaV1bbisxXS1hKTtyZXR1cm5bby5jMnAoKDEtbCkqdC54W25dK2wqdC54W24rMV0sITApLHMuYzJwKHQueVtpXSwhMCksbitsLGldfXZhciBjPSh0LmxldmVsLWEpLyh0LnpbaSsxXVtuXS1hKTtyZXR1cm5bby5jMnAodC54W25dLCEwKSxzLmMycCgoMS1jKSp0LnlbaV0rYyp0LnlbaSsxXSwhMCksbixpK2NdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxzLGw7Zm9yKGU9ZXx8LjAxLHI9cnx8LjAxLGE9MDthPHQubGVuZ3RoO2ErKyl7Zm9yKHM9dFthXSxsPTA7bDxzLnN0YXJ0cy5sZW5ndGg7bCsrKW8ocyxzLnN0YXJ0c1tsXSwiZWRnZSIsZSxyKTtmb3IoaT0wO09iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKS5sZW5ndGgmJmk8MWU0OylpKyssbyhzLE9iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKVswXS5zcGxpdCgiLCIpLm1hcChOdW1iZXIpLHZvaWQgMCxlLHIpOzFlND09PWkmJm4ubG9nKCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/Iil9fX0seyIuLi8uLi9saWIiOjc1MCwiLi9jb25zdGFudHMiOjk4M31dLDk5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi9oZWF0bWFwL2hvdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9aSh0LGUscixhLG8sITApO3JldHVybiBzJiZzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2U7ImNvbnN0cmFpbnQiPT09ZS5jb250b3Vycy50eXBlJiYoZS5maWxsY29sb3ImJm4ub3BhY2l0eShlLmZpbGxjb2xvcik/dC5jb2xvcj1uLmFkZE9wYWNpdHkoZS5maWxsY29sb3IsMSk6ZS5jb250b3Vycy5zaG93bGluZXMmJm4ub3BhY2l0eShlLmxpbmUuY29sb3IpJiYodC5jb2xvcj1uLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLDEpKSl9KSksc319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi9oZWF0bWFwL2hvdmVyIjoxMDQzfV0sOTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLGNvbG9yYmFyOnQoIi4vY29sb3JiYXIiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNvbnRvdXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImNvbnRvdXIiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4MTIsIi4vYXR0cmlidXRlcyI6OTc5LCIuL2NhbGMiOjk4MCwiLi9jb2xvcmJhciI6OTgyLCIuL2RlZmF1bHRzIjo5ODgsIi4vaG92ZXIiOjk5MiwiLi9wbG90Ijo5OTcsIi4vc3R5bGUiOjk5OX1dLDk5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7aWYoaXx8KGk9e30pLHQoImNvbnRvdXJzLnNob3dsYWJlbHMiKSl7dmFyIGE9ZS5mb250O24uY29lcmNlRm9udCh0LCJjb250b3Vycy5sYWJlbGZvbnQiLHtmYW1pbHk6YS5mYW1pbHksc2l6ZTphLnNpemUsY29sb3I6cn0pLHQoImNvbnRvdXJzLmxhYmVsZm9ybWF0Iil9ITEhPT1pLmhhc0hvdmVyJiZ0KCJ6aG92ZXJmb3JtYXQiKX19LHsiLi4vLi4vbGliIjo3NTB9XSw5OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNvbnRvdXJzLHI9ZS5zdGFydCxvPWEoZSkscz1lLnNpemV8fDEsbD1NYXRoLmZsb29yKChvLXIpL3MpKzEsYz0ibGluZXMiPT09ZS5jb2xvcmluZz8wOjEsdT1pLmV4dHJhY3RPcHRzKHQpO2lzRmluaXRlKHMpfHwocz0xLGw9MSk7dmFyIGgsZixwPXUucmV2ZXJzZXNjYWxlP2kuZmxpcFNjYWxlKHUuY29sb3JzY2FsZSk6dS5jb2xvcnNjYWxlLGQ9cC5sZW5ndGgsZz1uZXcgQXJyYXkoZCksbT1uZXcgQXJyYXkoZCk7aWYoImhlYXRtYXAiPT09ZS5jb2xvcmluZyl7dmFyIHY9dS5taW4seT11Lm1heDtmb3IoZj0wO2Y8ZDtmKyspaD1wW2ZdLGdbZl09aFswXSooeS12KSt2LG1bZl09aFsxXTt2YXIgeD1uLmV4dGVudChbdix5LGUuc3RhcnQsZS5zdGFydCtzKihsLTEpXSksYj14W3Y8eT8wOjFdLF89eFt2PHk/MTowXTtiIT09diYmKGcuc3BsaWNlKDAsMCxiKSxtLnNwbGljZSgwLDAsbVswXSkpLF8hPT15JiYoZy5wdXNoKF8pLG0ucHVzaChtW20ubGVuZ3RoLTFdKSl9ZWxzZSBmb3IoZj0wO2Y8ZDtmKyspaD1wW2ZdLGdbZl09KGhbMF0qKGwrYy0xKS1jLzIpKnMrcixtW2ZdPWhbMV07cmV0dXJuIGkubWFrZUNvbG9yU2NhbGVGdW5jKHtkb21haW46ZyxyYW5nZTptfSx7bm9OdW1lcmljQ2hlY2s6ITB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjcsIi4vZW5kX3BsdXMiOjk5MCxkMzoxNjl9XSw5OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBpKHQsZSl7dmFyIHI9KGVbMF1bMF0+dD8wOjEpKyhlWzBdWzFdPnQ/MDoyKSsoZVsxXVsxXT50PzA6NCkrKGVbMV1bMF0+dD8wOjgpO3JldHVybiA1PT09cnx8MTA9PT1yP3Q+KGVbMF1bMF0rZVswXVsxXStlWzFdWzBdK2VbMV1bMV0pLzQ/NT09PXI/NzEzOjExMTQ6NT09PXI/MTA0OjIwODoxNT09PXI/MDpyfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGEsbyxzLGwsYyx1LGgsZj10WzBdLnoscD1mLmxlbmd0aCxkPWZbMF0ubGVuZ3RoLGc9Mj09PXB8fDI9PT1kO2ZvcihyPTA7cjxwLTE7cisrKWZvcihvPVtdLDA9PT1yJiYobz1vLmNvbmNhdChuLkJPVFRPTVNUQVJUKSkscj09PXAtMiYmKG89by5jb25jYXQobi5UT1BTVEFSVCkpLGU9MDtlPGQtMTtlKyspZm9yKGE9by5zbGljZSgpLDA9PT1lJiYoYT1hLmNvbmNhdChuLkxFRlRTVEFSVCkpLGU9PT1kLTImJihhPWEuY29uY2F0KG4uUklHSFRTVEFSVCkpLHM9ZSsiLCIrcixsPVtbZltyXVtlXSxmW3JdW2UrMV1dLFtmW3IrMV1bZV0sZltyKzFdW2UrMV1dXSxoPTA7aDx0Lmxlbmd0aDtoKyspKGM9aSgodT10W2hdKS5sZXZlbCxsKSkmJih1LmNyb3NzaW5nc1tzXT1jLC0xIT09YS5pbmRleE9mKGMpJiYodS5zdGFydHMucHVzaChbZSxyXSksZyYmLTEhPT1hLmluZGV4T2YoYyxhLmluZGV4T2YoYykrMSkmJnUuc3RhcnRzLnB1c2goW2Uscl0pKSl9fSx7Ii4vY29uc3RhbnRzIjo5ODN9XSw5OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxzPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLHU9dCgiLi4vaGVhdG1hcC9wbG90IiksaD10KCIuL21ha2VfY3Jvc3NpbmdzIiksZj10KCIuL2ZpbmRfYWxsX3BhdGhzIikscD10KCIuL2VtcHR5X3BhdGhpbmZvIiksZD10KCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHMiKSxnPXQoIi4vY2xvc2VfYm91bmRhcmllcyIpLG09dCgiLi9jb25zdGFudHMiKSx2PW0uTEFCRUxPUFRJTUlaRVI7ZnVuY3Rpb24geSh0LGUpe3ZhciByLG4sbyxzLGwsYyx1LGg9IiIsZj0wLHA9dC5lZGdlcGF0aHMubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpLGQ9ITA7ZnVuY3Rpb24gZyh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1lWzJdWzFdKTwuMDF9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzBdWzBdKTwuMDF9ZnVuY3Rpb24gdih0KXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzJdWzBdKTwuMDF9Zm9yKDtwLmxlbmd0aDspe2ZvcihjPWEuc21vb3Rob3Blbih0LmVkZ2VwYXRoc1tmXSx0LnNtb290aGluZyksaCs9ZD9jOmMucmVwbGFjZSgvXk0vLCJMIikscC5zcGxpY2UocC5pbmRleE9mKGYpLDEpLHI9dC5lZGdlcGF0aHNbZl1bdC5lZGdlcGF0aHNbZl0ubGVuZ3RoLTFdLHM9LTEsbz0wO288NDtvKyspe2lmKCFyKXtpLmxvZygiTWlzc2luZyBlbmQ/IixmLHQpO2JyZWFrfWZvcih1PXIsTWF0aC5hYnModVsxXS1lWzBdWzFdKTwuMDEmJiF2KHIpP249ZVsxXTptKHIpP249ZVswXTpnKHIpP249ZVszXTp2KHIpJiYobj1lWzJdKSxsPTA7bDx0LmVkZ2VwYXRocy5sZW5ndGg7bCsrKXt2YXIgeT10LmVkZ2VwYXRoc1tsXVswXTtNYXRoLmFicyhyWzBdLW5bMF0pPC4wMT9NYXRoLmFicyhyWzBdLXlbMF0pPC4wMSYmKHlbMV0tclsxXSkqKG5bMV0teVsxXSk+PTAmJihuPXkscz1sKTpNYXRoLmFicyhyWzFdLW5bMV0pPC4wMT9NYXRoLmFicyhyWzFdLXlbMV0pPC4wMSYmKHlbMF0tclswXSkqKG5bMF0teVswXSk+PTAmJihuPXkscz1sKTppLmxvZygiZW5kcHQgdG8gbmV3ZW5kcHQgaXMgbm90IHZlcnQuIG9yIGhvcnouIixyLG4seSl9aWYocj1uLHM+PTApYnJlYWs7aCs9IkwiK259aWYocz09PXQuZWRnZXBhdGhzLmxlbmd0aCl7aS5sb2coInVuY2xvc2VkIHBlcmltZXRlciBwYXRoIik7YnJlYWt9Zj1zLChkPS0xPT09cC5pbmRleE9mKGYpKSYmKGY9cFswXSxoKz0iWiIpfWZvcihmPTA7Zjx0LnBhdGhzLmxlbmd0aDtmKyspaCs9YS5zbW9vdGhjbG9zZWQodC5wYXRoc1tmXSx0LnNtb290aGluZyk7cmV0dXJuIGh9ZnVuY3Rpb24geCh0LGUscixuKXt2YXIgYT1lLndpZHRoLzIsbz1lLmhlaWdodC8yLHM9dC54LGw9dC55LGM9dC50aGV0YSx1PU1hdGguY29zKGMpKmEsaD1NYXRoLnNpbihjKSphLGY9KHM+bi5jZW50ZXI/bi5yaWdodC1zOnMtbi5sZWZ0KS8odStNYXRoLmFicyhNYXRoLnNpbihjKSpvKSkscD0obD5uLm1pZGRsZT9uLmJvdHRvbS1sOmwtbi50b3ApLyhNYXRoLmFicyhoKStNYXRoLmNvcyhjKSpvKTtpZihmPDF8fHA8MSlyZXR1cm4gMS8wO3ZhciBkPXYuRURHRUNPU1QqKDEvKGYtMSkrMS8ocC0xKSk7ZCs9di5BTkdMRUNPU1QqYypjO2Zvcih2YXIgZz1zLXUsbT1sLWgseT1zK3UseD1sK2gsYj0wO2I8ci5sZW5ndGg7YisrKXt2YXIgXz1yW2JdLHc9TWF0aC5jb3MoXy50aGV0YSkqXy53aWR0aC8yLFQ9TWF0aC5zaW4oXy50aGV0YSkqXy53aWR0aC8yLGs9MippLnNlZ21lbnREaXN0YW5jZShnLG0seSx4LF8ueC13LF8ueS1ULF8ueCt3LF8ueStUKS8oZS5oZWlnaHQrXy5oZWlnaHQpLE09Xy5sZXZlbD09PWUubGV2ZWwsQT1NP3YuU0FNRUxFVkVMRElTVEFOQ0U6MTtpZihrPD1BKXJldHVybiAxLzA7ZCs9di5ORUlHSEJPUkNPU1QqKE0/di5TQU1FTEVWRUxGQUNUT1I6MSkvKGstQSl9cmV0dXJuIGR9ZnVuY3Rpb24gYih0KXt2YXIgZSxyLG49dC50cmFjZS5fZW1wdHlwb2ludHMsaT1bXSxhPXQuei5sZW5ndGgsbz10LnpbMF0ubGVuZ3RoLHM9W107Zm9yKGU9MDtlPG87ZSsrKXMucHVzaCgxKTtmb3IoZT0wO2U8YTtlKyspaS5wdXNoKHMuc2xpY2UoKSk7Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKylpWyhyPW5bZV0pWzBdXVtyWzFdXT0wO3JldHVybiB0LnptYXNrPWksaX1yLnBsb3Q9ZnVuY3Rpb24odCxlLG8scyl7dmFyIGw9ZS54YXhpcyxjPWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMocyxvLCJjb250b3VyIikuZWFjaCgoZnVuY3Rpb24obyl7dmFyIHM9bi5zZWxlY3QodGhpcyksdj1vWzBdLHg9di50cmFjZSxfPXYueCx3PXYueSxUPXguY29udG91cnMsaz1wKFQsZSx2KSxNPWkuZW5zdXJlU2luZ2xlKHMsImciLCJoZWF0bWFwY29sb3JpbmciKSxBPVtdOyJoZWF0bWFwIj09PVQuY29sb3JpbmcmJihBPVtvXSksdSh0LGUsQSxNKSxoKGspLGYoayk7dmFyIFM9bC5jMnAoX1swXSwhMCksRT1sLmMycChfW18ubGVuZ3RoLTFdLCEwKSxDPWMuYzJwKHdbMF0sITApLEw9Yy5jMnAod1t3Lmxlbmd0aC0xXSwhMCksUD1bW1MsTF0sW0UsTF0sW0UsQ10sW1MsQ11dLEk9azsiY29uc3RyYWludCI9PT1ULnR5cGUmJihJPWQoayxULl9vcGVyYXRpb24pKSxmdW5jdGlvbih0LGUscil7dmFyIG49aS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJiZyIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoImZpbGwiPT09ci5jb2xvcmluZz9bMF06W10pO24uZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxuLmV4aXQoKS5yZW1vdmUoKSxuLmF0dHIoImQiLCJNIitlLmpvaW4oIkwiKSsiWiIpLnN0eWxlKCJzdHJva2UiLCJub25lIil9KHMsUCxUKSxmdW5jdGlvbih0LGUscixhKXt2YXIgbz0iZmlsbCI9PT1hLmNvbG9yaW5nfHwiY29uc3RyYWludCI9PT1hLnR5cGUmJiI9IiE9PWEuX29wZXJhdGlvbixzPSJNIityLmpvaW4oIkwiKSsiWiI7byYmZyhlLGEpO3ZhciBsPWkuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VyZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEobz9lOltdKTtsLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksbC5leGl0KCkucmVtb3ZlKCksbC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT0odC5wcmVmaXhCb3VuZGFyeT9zOiIiKSt5KHQscik7ZT9uLnNlbGVjdCh0aGlzKS5hdHRyKCJkIixlKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpOm4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSkpfShzLEksUCxUKSxmdW5jdGlvbih0LGUsbyxzLGwpe3ZhciBjPWkuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VybGluZXMiKSx1PSExIT09bC5zaG93bGluZXMsaD1sLnNob3dsYWJlbHMsZj11JiZoLHA9ci5jcmVhdGVMaW5lcyhjLHV8fGgsZSksZD1yLmNyZWF0ZUxpbmVDbGlwKGMsZixvLHMudHJhY2UudWlkKSxnPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMiKS5kYXRhKGg/WzBdOltdKTtpZihnLmV4aXQoKS5yZW1vdmUoKSxnLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxhYmVscyIsITApLGgpe3ZhciB2PVtdLHk9W107aS5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgeD1yLmxhYmVsRm9ybWF0dGVyKG8scyksYj1hLnRlc3Rlci5hcHBlbmQoInRleHQiKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKGEuZm9udCxsLmxhYmVsZm9udCksXz1lWzBdLnhheGlzLHc9ZVswXS55YXhpcyxUPV8uX2xlbmd0aCxrPXcuX2xlbmd0aCxNPV8ucmFuZ2UsQT13LnJhbmdlLFM9aS5hZ2dOdW1zKE1hdGgubWluLG51bGwscy54KSxFPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLHMueCksQz1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxzLnkpLEw9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwscy55KSxQPU1hdGgubWF4KF8uYzJwKFMsITApLDApLEk9TWF0aC5taW4oXy5jMnAoRSwhMCksVCksej1NYXRoLm1heCh3LmMycChMLCEwKSwwKSxPPU1hdGgubWluKHcuYzJwKEMsITApLGspLEQ9e307TVswXTxNWzFdPyhELmxlZnQ9UCxELnJpZ2h0PUkpOihELmxlZnQ9SSxELnJpZ2h0PVApLEFbMF08QVsxXT8oRC50b3A9eixELmJvdHRvbT1PKTooRC50b3A9TyxELmJvdHRvbT16KSxELm1pZGRsZT0oRC50b3ArRC5ib3R0b20pLzIsRC5jZW50ZXI9KEQubGVmdCtELnJpZ2h0KS8yLHYucHVzaChbW0QubGVmdCxELnRvcF0sW0QucmlnaHQsRC50b3BdLFtELnJpZ2h0LEQuYm90dG9tXSxbRC5sZWZ0LEQuYm90dG9tXV0pO3ZhciBSPU1hdGguc3FydChUKlQrayprKSxGPW0uTEFCRUxESVNUQU5DRSpSL01hdGgubWF4KDEsZS5sZW5ndGgvbS5MQUJFTElOQ1JFQVNFKTtwLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXIuY2FsY1RleHRPcHRzKHQubGV2ZWwseCxiLG8pO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9aS5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLEQsZS5oZWlnaHQvMik7aWYodCYmISh0LmxlbjwoZS53aWR0aCtlLmhlaWdodCkqbS5MQUJFTE1JTikpZm9yKHZhciBuPU1hdGgubWluKE1hdGguY2VpbCh0Lmxlbi9GKSxtLkxBQkVMTUFYKSxhPTA7YTxuO2ErKyl7dmFyIG89ci5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLHQsZSx5LEQpO2lmKCFvKWJyZWFrO3IuYWRkTGFiZWxEYXRhKG8sZSx5LHYpfX0pKX0pKSxiLnJlbW92ZSgpLHIuZHJhd0xhYmVscyhnLHksbyxkLGY/djpudWxsKX1oJiYhdSYmcC5yZW1vdmUoKX0ocyxrLHQsdixUKSxmdW5jdGlvbih0LGUscixuLG8pe3ZhciBzPW4udHJhY2UsbD1yLl9mdWxsTGF5b3V0Ll9jbGlwcyxjPSJjbGlwIitzLnVpZCx1PWwuc2VsZWN0QWxsKCIjIitjKS5kYXRhKHMuY29ubmVjdGdhcHM/W106WzBdKTtpZih1LmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImNvbnRvdXJjbGlwIiwhMCkuYXR0cigiaWQiLGMpLHUuZXhpdCgpLnJlbW92ZSgpLCExPT09cy5jb25uZWN0Z2Fwcyl7dmFyIHA9e2xldmVsOi45LGNyb3NzaW5nczp7fSxzdGFydHM6W10sZWRnZXBhdGhzOltdLHBhdGhzOltdLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyx4Om4ueCx5Om4ueSx6OmIobiksc21vb3RoaW5nOjB9O2goW3BdKSxmKFtwXSksZyhbcF0se3R5cGU6ImxldmVscyJ9KSxpLmVuc3VyZVNpbmdsZSh1LCJwYXRoIiwiIikuYXR0cigiZCIsKHAucHJlZml4Qm91bmRhcnk/Ik0iK28uam9pbigiTCIpKyJaIjoiIikreShwLG8pKX1lbHNlIGM9bnVsbDthLnNldENsaXBVcmwodCxjLHIpfShzLGUsdCx2LFApfSkpfSxyLmNyZWF0ZUxpbmVzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLnNtb290aGluZyxpPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsZXZlbCIpLmRhdGEoZT9yOltdKTtpZihpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxldmVsIiwhMCksZSl7dmFyIG89aS5zZWxlY3RBbGwoInBhdGgub3BlbmxpbmUiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wZWRnZXBhdGhzfHx0LmVkZ2VwYXRoc30pKTtvLmV4aXQoKS5yZW1vdmUoKSxvLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgib3BlbmxpbmUiLCEwKSxvLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gYS5zbW9vdGhvcGVuKHQsbil9KSkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpO3ZhciBzPWkuc2VsZWN0QWxsKCJwYXRoLmNsb3NlZGxpbmUiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcGF0aHN8fHQucGF0aHN9KSk7cy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNsb3NlZGxpbmUiLCEwKSxzLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gYS5zbW9vdGhjbG9zZWQodCxuKX0pKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIil9cmV0dXJuIGl9LHIuY3JlYXRlTGluZUNsaXA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZT8iY2xpcGxpbmUiK246bnVsbCxvPXIuX2Z1bGxMYXlvdXQuX2NsaXBzLnNlbGVjdEFsbCgiIyIraSkuZGF0YShlP1swXTpbXSk7cmV0dXJuIG8uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY29udG91cmxpbmVjbGlwIiwhMCkuYXR0cigiaWQiLGkpLGEuc2V0Q2xpcFVybCh0LGksciksb30sci5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbj1lLnRyYWNlLGk9bi5jb250b3VycyxhPXt0eXBlOiJsaW5lYXIiLF9pZDoieWNvbnRvdXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9O2lmKGkubGFiZWxmb3JtYXQpYS50aWNrZm9ybWF0PWkubGFiZWxmb3JtYXQsYyhhLHIpO2Vsc2V7dmFyIHM9by5leHRyYWN0T3B0cyhuKTtpZihzJiZzLmNvbG9yYmFyJiZzLmNvbG9yYmFyLl9heGlzKWE9cy5jb2xvcmJhci5fYXhpcztlbHNle2lmKCJjb25zdHJhaW50Ij09PWkudHlwZSl7dmFyIHU9aS52YWx1ZTtBcnJheS5pc0FycmF5KHUpP2EucmFuZ2U9W3VbMF0sdVt1Lmxlbmd0aC0xXV06YS5yYW5nZT1bdSx1XX1lbHNlIGEucmFuZ2U9W2kuc3RhcnQsaS5lbmRdLGEubnRpY2tzPShpLmVuZC1pLnN0YXJ0KS9pLnNpemU7YS5yYW5nZVswXT09PWEucmFuZ2VbMV0mJihhLnJhbmdlWzFdKz1hLnJhbmdlWzBdfHwxKSxhLm50aWNrc3x8KGEubnRpY2tzPTFlMyksYyhhLHIpLGwucHJlcFRpY2tzKGEpLGEuX3RtaW49bnVsbCxhLl90bWF4PW51bGx9fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbC50aWNrVGV4dChhLHQpLnRleHR9fSxyLmNhbGNUZXh0T3B0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lKHQpO3IudGV4dChpKS5jYWxsKHMuY29udmVydFRvVHNwYW5zLG4pO3ZhciBvPXIubm9kZSgpLGw9YS5iQm94KG8sITApO3JldHVybnt0ZXh0Omksd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHQsZm9udFNpemU6K28uc3R5bGVbImZvbnQtc2l6ZSJdLnJlcGxhY2UoInB4IiwiIiksbGV2ZWw6dCxkeToobC50b3ArbC5ib3R0b20pLzJ9fSxyLmZpbmRCZXN0VGV4dExvY2F0aW9uPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG8scyxsLGMsdSxoPXIud2lkdGg7ZS5pc0Nsb3NlZD8ocz1lLmxlbi92LklOSVRJQUxTRUFSQ0hQT0lOVFMsbz1lLm1pbitzLzIsbD1lLm1heCk6KHM9KGUubGVuLWgpLyh2LklOSVRJQUxTRUFSQ0hQT0lOVFMrMSksbz1lLm1pbitzK2gvMixsPWUubWF4LShzK2gpLzIpO2Zvcih2YXIgZj0xLzAscD0wO3A8di5JVEVSQVRJT05TO3ArKyl7Zm9yKHZhciBkPW87ZDxsO2QrPXMpe3ZhciBnPWkuZ2V0VGV4dExvY2F0aW9uKHQsZS50b3RhbCxkLGgpLG09eChnLHIsbixhKTttPGYmJihmPW0sdT1nLGM9ZCl9aWYoZj4yKnYuTUFYQ09TVClicmVhaztwJiYocy89MiksbD0obz1jLXMvMikrMS41KnN9aWYoZjw9di5NQVhDT1NUKXJldHVybiB1fSxyLmFkZExhYmVsRGF0YT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lLmZvbnRTaXplLGE9ZS53aWR0aCtpLzMsbz1NYXRoLm1heCgwLGUuaGVpZ2h0LWkvMykscz10LngsbD10LnksYz10LnRoZXRhLHU9TWF0aC5zaW4oYyksaD1NYXRoLmNvcyhjKSxmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3MrdCpoLWUqdSxsK3QqdStlKmhdfSxwPVtmKC1hLzIsLW8vMiksZigtYS8yLG8vMiksZihhLzIsby8yKSxmKGEvMiwtby8yKV07ci5wdXNoKHt0ZXh0OmUudGV4dCx4OnMseTpsLGR5OmUuZHksdGhldGE6YyxsZXZlbDplLmxldmVsLHdpZHRoOmEsaGVpZ2h0Om99KSxuLnB1c2gocCl9LHIuZHJhd0xhYmVscz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBsPXQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShlLChmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0KyIsIit0LngrIiwiK3QueSsiLCIrdC50aGV0YX0pKTtpZihsLmV4aXQoKS5yZW1vdmUoKSxsLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cih7ImRhdGEtbm90ZXgiOjEsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQueCtNYXRoLnNpbih0LnRoZXRhKSp0LmR5LGk9dC55LU1hdGguY29zKHQudGhldGEpKnQuZHk7bi5zZWxlY3QodGhpcykudGV4dCh0LnRleHQpLmF0dHIoe3g6ZSx5OmksdHJhbnNmb3JtOiJyb3RhdGUoIisxODAqdC50aGV0YS9NYXRoLlBJKyIgIitlKyIgIitpKyIpIn0pLmNhbGwocy5jb252ZXJ0VG9Uc3BhbnMscil9KSksbyl7Zm9yKHZhciBjPSIiLHU9MDt1PG8ubGVuZ3RoO3UrKyljKz0iTSIrb1t1XS5qb2luKCJMIikrIloiO2kuZW5zdXJlU2luZ2xlKGEsInBhdGgiLCIiKS5hdHRyKCJkIixjKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6Nzc0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjgxOSwiLi4vaGVhdG1hcC9wbG90IjoxMDQ3LCIuL2Nsb3NlX2JvdW5kYXJpZXMiOjk4MSwiLi9jb25zdGFudHMiOjk4MywiLi9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIjo5ODcsIi4vZW1wdHlfcGF0aGluZm8iOjk4OSwiLi9maW5kX2FsbF9wYXRocyI6OTkxLCIuL21ha2VfY3Jvc3NpbmdzIjo5OTYsZDM6MTY5fV0sOTk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgaT17dHlwZToibGluZWFyIixyYW5nZTpbdCxlXX07cmV0dXJuIG4uYXV0b1RpY2tzKGksKGUtdCkvKHJ8fDE1KSksaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNvbnRvdXJzO2lmKHQuYXV0b2NvbnRvdXIpe3ZhciBvPXQuem1pbixzPXQuem1heDsodC56YXV0b3x8dm9pZCAwPT09bykmJihvPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLGUpKSwodC56YXV0b3x8dm9pZCAwPT09cykmJihzPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGUpKTt2YXIgbD1hKG8scyx0Lm5jb250b3Vycyk7ci5zaXplPWwuZHRpY2ssci5zdGFydD1uLnRpY2tGaXJzdChsKSxsLnJhbmdlLnJldmVyc2UoKSxyLmVuZD1uLnRpY2tGaXJzdChsKSxyLnN0YXJ0PT09byYmKHIuc3RhcnQrPXIuc2l6ZSksci5lbmQ9PT1zJiYoci5lbmQtPXIuc2l6ZSksci5zdGFydD5yLmVuZCYmKHIuc3RhcnQ9ci5lbmQ9KHIuc3RhcnQrci5lbmQpLzIpLHQuX2lucHV0LmNvbnRvdXJzfHwodC5faW5wdXQuY29udG91cnM9e30pLGkuZXh0ZW5kRmxhdCh0Ll9pbnB1dC5jb250b3Vycyx7c3RhcnQ6ci5zdGFydCxlbmQ6ci5lbmQsc2l6ZTpyLnNpemV9KSx0Ll9pbnB1dC5hdXRvY29udG91cj0hMH1lbHNlIGlmKCJjb25zdHJhaW50IiE9PXIudHlwZSl7dmFyIGMsdT1yLnN0YXJ0LGg9ci5lbmQsZj10Ll9pbnB1dC5jb250b3VycztpZih1PmgmJihyLnN0YXJ0PWYuc3RhcnQ9aCxoPXIuZW5kPWYuZW5kPXUsdT1yLnN0YXJ0KSwhKHIuc2l6ZT4wKSljPXU9PT1oPzE6YSh1LGgsdC5uY29udG91cnMpLmR0aWNrLGYuc2l6ZT1yLnNpemU9Y319fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5fV0sOTk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGUiKSxvPXQoIi4vbWFrZV9jb2xvcl9tYXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmNvbnRvdXIiKTtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZSxhPXIuY29udG91cnMscz1yLmxpbmUsbD1hLnNpemV8fDEsYz1hLnN0YXJ0LHU9ImNvbnN0cmFpbnQiPT09YS50eXBlLGg9IXUmJiJsaW5lcyI9PT1hLmNvbG9yaW5nLGY9IXUmJiJmaWxsIj09PWEuY29sb3JpbmcscD1ofHxmP28ocik6bnVsbDtlLnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUscy53aWR0aCxoP3AodC5sZXZlbCk6cy5jb2xvcixzLmRhc2gpfSkpO3ZhciBkPWEubGFiZWxmb250O2lmKGUuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMgdGV4dCIpLmVhY2goKGZ1bmN0aW9uKHQpe2kuZm9udChuLnNlbGVjdCh0aGlzKSx7ZmFtaWx5OmQuZmFtaWx5LHNpemU6ZC5zaXplLGNvbG9yOmQuY29sb3J8fChoP3AodC5sZXZlbCk6cy5jb2xvcil9KX0pKSx1KWUuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIHBhdGgiKS5zdHlsZSgiZmlsbCIsci5maWxsY29sb3IpO2Vsc2UgaWYoZil7dmFyIGc7ZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwgcGF0aCIpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PWcmJihnPXQubGV2ZWwpLHAodC5sZXZlbCsuNSpsKX0pKSx2b2lkIDA9PT1nJiYoZz1jKSxlLnNlbGVjdEFsbCgiZy5jb250b3VyYmcgcGF0aCIpLnN0eWxlKCJmaWxsIixwKGctLjUqbCkpfX0pKSxhKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vaGVhdG1hcC9zdHlsZSI6MTA0OCwiLi9tYWtlX2NvbG9yX21hcCI6OTk1LGQzOjE2OX1dLDFlMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxpPXQoIi4vbGFiZWxfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcyxsPXIoImNvbnRvdXJzLmNvbG9yaW5nIiksYz0iIjsiZmlsbCI9PT1sJiYocz1yKCJjb250b3Vycy5zaG93bGluZXMiKSksITEhPT1zJiYoImxpbmVzIiE9PWwmJihjPXIoImxpbmUuY29sb3IiLCIjMDAwIikpLHIoImxpbmUud2lkdGgiLC41KSxyKCJsaW5lLmRhc2giKSksIm5vbmUiIT09bCYmKCEwIT09dC5zaG93bGVnZW5kJiYoZS5zaG93bGVnZW5kPSExKSxlLl9kZmx0U2hvd0xlZ2VuZD0hMSxuKHQsZSxhLHIse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pKSxyKCJsaW5lLnNtb290aGluZyIpLGkocixhLGMsbyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjI1LCIuL2xhYmVsX2RlZmF1bHRzIjo5OTR9XSwxMDAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz1pLmNvbnRvdXJzO2UuZXhwb3J0cz1vKHtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx6Om4ueixhOm4ueCxhMDpuLngwLGRhOm4uZHgsYjpuLnksYjA6bi55MCxkYjpuLmR5LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCx0cmFuc3Bvc2U6bi50cmFuc3Bvc2UsYXR5cGU6bi54dHlwZSxidHlwZTpuLnl0eXBlLGZpbGxjb2xvcjppLmZpbGxjb2xvcixhdXRvY29udG91cjppLmF1dG9jb250b3VyLG5jb250b3VyczppLm5jb250b3Vycyxjb250b3Vyczp7dHlwZTpzLnR5cGUsc3RhcnQ6cy5zdGFydCxlbmQ6cy5lbmQsc2l6ZTpzLnNpemUsY29sb3Jpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJsaW5lcyIsIm5vbmUiXSxkZmx0OiJmaWxsIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lczpzLnNob3dsaW5lcyxzaG93bGFiZWxzOnMuc2hvd2xhYmVscyxsYWJlbGZvbnQ6cy5sYWJlbGZvbnQsbGFiZWxmb3JtYXQ6cy5sYWJlbGZvcm1hdCxvcGVyYXRpb246cy5vcGVyYXRpb24sdmFsdWU6cy52YWx1ZSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvY29udG91cjohMX19LGxpbmU6e2NvbG9yOmkubGluZS5jb2xvcix3aWR0aDppLmxpbmUud2lkdGgsZGFzaDppLmxpbmUuZGFzaCxzbW9vdGhpbmc6aS5saW5lLnNtb290aGluZyxlZGl0VHlwZToicGxvdCJ9LHRyYW5zZm9ybXM6dm9pZCAwfSxhKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vY29udG91ci9hdHRyaWJ1dGVzIjo5NzksIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6MTAzNn1dLDEwMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiKSxvPXQoIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiKSxzPXQoIi4uL2hlYXRtYXAvaW50ZXJwMmQiKSxsPXQoIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIiksYz10KCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXkiKSx1PXQoIi4vZGVmYXVsdHMiKSxoPXQoIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiKSxmPXQoIi4uL2NvbnRvdXIvc2V0X2NvbnRvdXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fY2FycGV0VHJhY2U9aCh0LGUpO2lmKHImJnIudmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09ci52aXNpYmxlKXtpZighZS5hfHwhZS5iKXt2YXIgcD10LmRhdGFbci5pbmRleF0sZD10LmRhdGFbZS5pbmRleF07ZC5hfHwoZC5hPXAuYSksZC5ifHwoZC5iPXAuYiksdShkLGUsZS5fZGVmYXVsdENvbG9yLHQuX2Z1bGxMYXlvdXQpfXZhciBnPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkLGcsbT1lLl9jYXJwZXRUcmFjZSx2PW0uYWF4aXMseT1tLmJheGlzO3YuX21pbkR0aWNrPTAseS5fbWluRHRpY2s9MCxpLmlzQXJyYXkxRChlLnopJiZhKGUsdix5LCJhIiwiYiIsWyJ6Il0pO3I9ZS5fYT1lLl9hfHxlLmEsZj1lLl9iPWUuX2J8fGUuYixyPXI/di5tYWtlQ2FsY2RhdGEoZSwiX2EiKTpbXSxmPWY/eS5tYWtlQ2FsY2RhdGEoZSwiX2IiKTpbXSx1PWUuYTB8fDAsaD1lLmRhfHwxLHA9ZS5iMHx8MCxkPWUuZGJ8fDEsZz1lLl96PW8oZS5fenx8ZS56LGUudHJhbnNwb3NlKSxlLl9lbXB0eXBvaW50cz1sKGcpLHMoZyxlLl9lbXB0eXBvaW50cyk7dmFyIHg9aS5tYXhSb3dMZW5ndGgoZyksYj0ic2NhbGVkIj09PWUueHR5cGU/IiI6cixfPWMoZSxiLHUsaCx4LHYpLHc9InNjYWxlZCI9PT1lLnl0eXBlPyIiOmYsVD1jKGUsdyxwLGQsZy5sZW5ndGgseSksaz17YTpfLGI6VCx6Omd9OyJsZXZlbHMiPT09ZS5jb250b3Vycy50eXBlJiYibm9uZSIhPT1lLmNvbnRvdXJzLmNvbG9yaW5nJiZuKHQsZSx7dmFsczpnLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJ6In0pO3JldHVybltrXX0odCxlKTtyZXR1cm4gZihlLGUuX3opLGd9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjIzLCIuLi8uLi9saWIiOjc1MCwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCI6OTUyLCIuLi9jb250b3VyL3NldF9jb250b3VycyI6OTk4LCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5IjoxMDM4LCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5eiI6MTA0MCwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXMiOjEwNDIsIi4uL2hlYXRtYXAvaW50ZXJwMmQiOjEwNDUsIi4uL2hlYXRtYXAvbWFrZV9ib3VuZF9hcnJheSI6MTA0NiwiLi9kZWZhdWx0cyI6MTAwM31dLDEwMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuLi9jb250b3VyL2NvbnN0cmFpbnRfZGVmYXVsdHMiKSxzPXQoIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHMiKSxsPXQoIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWlmKHUoImNhcnBldCIpLHQuYSYmdC5iKXtpZighaSh0LGUsdSxjLCJhIiwiYiIpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dSgidGV4dCIpLCJjb25zdHJhaW50Ij09PXUoImNvbnRvdXJzLnR5cGUiKT9vKHQsZSx1LGMscix7aGFzSG92ZXI6ITF9KToocyh0LGUsdSwoZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUsYSxyKX0pKSxsKHQsZSx1LGMse2hhc0hvdmVyOiExfSkpfWVsc2UgZS5fZGVmYXVsdENvbG9yPXIsZS5fbGVuZ3RoPW51bGx9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi9jb250b3VyL2NvbnN0cmFpbnRfZGVmYXVsdHMiOjk4NCwiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyI6OTg2LCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIjoxZTMsIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjoxMDUwLCIuL2F0dHJpYnV0ZXMiOjEwMDF9XSwxMDA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vY29udG91ci9jb2xvcmJhciIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9jb250b3VyL3N0eWxlIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNvbnRvdXJjYXJwZXQiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJjYXJwZXQiLCJjb250b3VyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJoYXNMaW5lcyIsImNhcnBldERlcGVuZGVudCIsIm5vSG92ZXIiLCJub1NvcnRpbmdCeVZhbHVlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4MTIsIi4uL2NvbnRvdXIvY29sb3JiYXIiOjk4MiwiLi4vY29udG91ci9zdHlsZSI6OTk5LCIuL2F0dHJpYnV0ZXMiOjEwMDEsIi4vY2FsYyI6MTAwMiwiLi9kZWZhdWx0cyI6MTAwMywiLi9wbG90IjoxMDA1fV0sMTAwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vY2FycGV0L21hcF8xZF9hcnJheSIpLGE9dCgiLi4vY2FycGV0L21ha2VwYXRoIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vY29udG91ci9tYWtlX2Nyb3NzaW5ncyIpLGM9dCgiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyIpLHU9dCgiLi4vY29udG91ci9wbG90IiksaD10KCIuLi9jb250b3VyL2NvbnN0YW50cyIpLGY9dCgiLi4vY29udG91ci9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIikscD10KCIuLi9jb250b3VyL2VtcHR5X3BhdGhpbmZvIiksZD10KCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXMiKSxnPXQoIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiKSxtPXQoIi4uL2NhcnBldC9heGlzX2FsaWduZWRfbGluZSIpO2Z1bmN0aW9uIHYodCxlLHIpe3ZhciBuPXQuZ2V0UG9pbnRBdExlbmd0aChlKSxpPXQuZ2V0UG9pbnRBdExlbmd0aChyKSxhPWkueC1uLngsbz1pLnktbi55LHM9TWF0aC5zcXJ0KGEqYStvKm8pO3JldHVyblthL3Msby9zXX1mdW5jdGlvbiB5KHQpe3ZhciBlPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKTtyZXR1cm5bdFswXS9lLHRbMV0vZV19ZnVuY3Rpb24geCh0LGUpe3ZhciByPU1hdGguYWJzKHRbMF0qZVswXSt0WzFdKmVbMV0pO3JldHVybiBNYXRoLnNxcnQoMS1yKnIpL3J9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGIpe3ZhciBfPWUueGF4aXMsdz1lLnlheGlzO3MubWFrZVRyYWNlR3JvdXBzKGIsciwiY29udG91ciIpLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBiPW4uc2VsZWN0KHRoaXMpLFQ9clswXSxrPVQudHJhY2UsTT1rLl9jYXJwZXRUcmFjZT1nKHQsayksQT10LmNhbGNkYXRhW00uaW5kZXhdWzBdO2lmKE0udmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09TS52aXNpYmxlKXt2YXIgUz1ULmEsRT1ULmIsQz1rLmNvbnRvdXJzLEw9cChDLGUsVCksUD0iY29uc3RyYWludCI9PT1DLnR5cGUsST1DLl9vcGVyYXRpb24sej1QPyI9Ij09PUk/ImxpbmVzIjoiZmlsbCI6Qy5jb2xvcmluZyxPPVtbU1swXSxFW0UubGVuZ3RoLTFdXSxbU1tTLmxlbmd0aC0xXSxFW0UubGVuZ3RoLTFdXSxbU1tTLmxlbmd0aC0xXSxFWzBdXSxbU1swXSxFWzBdXV07bChMKTt2YXIgRD0xZS04KihTW1MubGVuZ3RoLTFdLVNbMF0pLFI9MWUtOCooRVtFLmxlbmd0aC0xXS1FWzBdKTtjKEwsRCxSKTt2YXIgRixCLE4saixVPUw7ImNvbnN0cmFpbnQiPT09Qy50eXBlJiYoVT1mKEwsSSkpLGZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyx1O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2ZvcihhPXRbcl0sbz1hLnBlZGdlcGF0aHM9W10scz1hLnBwYXRocz1bXSxuPTA7bjxhLmVkZ2VwYXRocy5sZW5ndGg7bisrKXtmb3IodT1hLmVkZ2VwYXRoc1tuXSxsPVtdLGk9MDtpPHUubGVuZ3RoO2krKylsW2ldPWUodVtpXSk7by5wdXNoKGwpfWZvcihuPTA7bjxhLnBhdGhzLmxlbmd0aDtuKyspe2Zvcih1PWEucGF0aHNbbl0sYz1bXSxpPTA7aTx1Lmxlbmd0aDtpKyspY1tpXT1lKHVbaV0pO3MucHVzaChjKX19fShMLEgpO3ZhciBWPVtdO2ZvcihqPUEuY2xpcHNlZ21lbnRzLmxlbmd0aC0xO2o+PTA7ai0tKUY9QS5jbGlwc2VnbWVudHNbal0sQj1pKFtdLEYueCxfLmMycCksTj1pKFtdLEYueSx3LmMycCksQi5yZXZlcnNlKCksTi5yZXZlcnNlKCksVi5wdXNoKGEoQixOLEYuYmljdWJpYykpO3ZhciBxPSJNIitWLmpvaW4oIkwiKSsiWiI7IWZ1bmN0aW9uKHQsZSxyLG4sbyxsKXt2YXIgYyx1LGgsZixwPXMuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VyYmciKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKCJmaWxsIiE9PWx8fG8/W106WzBdKTtwLmVudGVyKCkuYXBwZW5kKCJwYXRoIikscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9W107Zm9yKGY9MDtmPGUubGVuZ3RoO2YrKyljPWVbZl0sdT1pKFtdLGMueCxyLmMycCksaD1pKFtdLGMueSxuLmMycCksZC5wdXNoKGEodSxoLGMuYmljdWJpYykpO3AuYXR0cigiZCIsIk0iK2Quam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0oYixBLmNsaXBzZWdtZW50cyxfLHcsUCx6KSxmdW5jdGlvbih0LGUscixpLGEsbCxjLHUsaCxmLHApe3ZhciBnPSJmaWxsIj09PWY7ZyYmZChhLHQuY29udG91cnMpO3ZhciB2PXMuZW5zdXJlU2luZ2xlKGUsImciLCJjb250b3VyZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoZz9hOltdKTt2LmVudGVyKCkuYXBwZW5kKCJwYXRoIiksdi5leGl0KCkucmVtb3ZlKCksdi5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT0odC5wcmVmaXhCb3VuZGFyeT9wOiIiKStmdW5jdGlvbih0LGUscixuLGksYSxsLGMpe3ZhciB1LGgsZixwLGQsZyx2LHk9IiIseD1lLmVkZ2VwYXRocy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSksYj0hMCxfPTFlLTQqTWF0aC5hYnMoclswXVswXS1yWzJdWzBdKSx3PTFlLTQqTWF0aC5hYnMoclswXVsxXS1yWzJdWzFdKTtmdW5jdGlvbiBUKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMF1bMV0pPHd9ZnVuY3Rpb24gayh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzJdWzFdKTx3fWZ1bmN0aW9uIE0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tclswXVswXSk8X31mdW5jdGlvbiBBKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLXJbMl1bMF0pPF99ZnVuY3Rpb24gUyh0LGUpe3ZhciByLG4sbyxzLHU9IiI7Zm9yKFQodCkmJiFBKHQpfHxrKHQpJiYhTSh0KT8ocz1pLmFheGlzLG89bShpLGEsW3RbMF0sZVswXV0sLjUqKHRbMV0rZVsxXSkpKToocz1pLmJheGlzLG89bShpLGEsLjUqKHRbMF0rZVswXSksW3RbMV0sZVsxXV0pKSxyPTE7cjxvLmxlbmd0aDtyKyspZm9yKHUrPXMuc21vb3RoaW5nPyJDIjoiTCIsbj0wO248b1tyXS5sZW5ndGg7bisrKXt2YXIgaD1vW3JdW25dO3UrPVtsLmMycChoWzBdKSxjLmMycChoWzFdKV0rIiAifXJldHVybiB1fXU9MCxoPW51bGw7Zm9yKDt4Lmxlbmd0aDspe3ZhciBFPWUuZWRnZXBhdGhzW3VdWzBdO2ZvcihoJiYoeSs9UyhoLEUpKSx2PW8uc21vb3Rob3BlbihlLmVkZ2VwYXRoc1t1XS5tYXAobiksZS5zbW9vdGhpbmcpLHkrPWI/djp2LnJlcGxhY2UoL15NLywiTCIpLHguc3BsaWNlKHguaW5kZXhPZih1KSwxKSxoPWUuZWRnZXBhdGhzW3VdW2UuZWRnZXBhdGhzW3VdLmxlbmd0aC0xXSxkPS0xLHA9MDtwPDQ7cCsrKXtpZighaCl7cy5sb2coIk1pc3NpbmcgZW5kPyIsdSxlKTticmVha31mb3IoVChoKSYmIUEoaCk/Zj1yWzFdOk0oaCk/Zj1yWzBdOmsoaCk/Zj1yWzNdOkEoaCkmJihmPXJbMl0pLGc9MDtnPGUuZWRnZXBhdGhzLmxlbmd0aDtnKyspe3ZhciBDPWUuZWRnZXBhdGhzW2ddWzBdO01hdGguYWJzKGhbMF0tZlswXSk8Xz9NYXRoLmFicyhoWzBdLUNbMF0pPF8mJihDWzFdLWhbMV0pKihmWzFdLUNbMV0pPj0wJiYoZj1DLGQ9Zyk6TWF0aC5hYnMoaFsxXS1mWzFdKTx3P01hdGguYWJzKGhbMV0tQ1sxXSk8dyYmKENbMF0taFswXSkqKGZbMF0tQ1swXSk+PTAmJihmPUMsZD1nKTpzLmxvZygiZW5kcHQgdG8gbmV3ZW5kcHQgaXMgbm90IHZlcnQuIG9yIGhvcnouIixoLGYsQyl9aWYoZD49MClicmVhazt5Kz1TKGgsZiksaD1mfWlmKGQ9PT1lLmVkZ2VwYXRocy5sZW5ndGgpe3MubG9nKCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aCIpO2JyZWFrfXU9ZCwoYj0tMT09PXguaW5kZXhPZih1KSkmJih1PXhbMF0seSs9UyhoLGYpKyJaIixoPW51bGwpfWZvcih1PTA7dTxlLnBhdGhzLmxlbmd0aDt1KyspeSs9by5zbW9vdGhjbG9zZWQoZS5wYXRoc1t1XS5tYXAobiksZS5zbW9vdGhpbmcpO3JldHVybiB5fSgwLHQsbCxjLHUsaCxyLGkpO2U/bi5zZWxlY3QodGhpcykuYXR0cigiZCIsZSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKTpuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pKX0oayxiLF8sdyxVLE8sSCxNLEEseixxKSxmdW5jdGlvbih0LGUscixpLGEsbCxjKXt2YXIgZj1zLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmxpbmVzIikscD0hMSE9PWEuc2hvd2xpbmVzLGQ9YS5zaG93bGFiZWxzLGc9cCYmZCxtPXUuY3JlYXRlTGluZXMoZixwfHxkLGUpLGI9dS5jcmVhdGVMaW5lQ2xpcChmLGcscixpLnRyYWNlLnVpZCksXz10LnNlbGVjdEFsbCgiZy5jb250b3VybGFiZWxzIikuZGF0YShkP1swXTpbXSk7aWYoXy5leGl0KCkucmVtb3ZlKCksXy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsYWJlbHMiLCEwKSxkKXt2YXIgdz1sLnhheGlzLFQ9bC55YXhpcyxrPXcuX2xlbmd0aCxNPVQuX2xlbmd0aCxBPVtbWzAsMF0sW2ssMF0sW2ssTV0sWzAsTV1dXSxTPVtdO3MuY2xlYXJMb2NhdGlvbkNhY2hlKCk7dmFyIEU9dS5sYWJlbEZvcm1hdHRlcihyLGkpLEM9by50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChvLmZvbnQsYS5sYWJlbGZvbnQpLEw9e2xlZnQ6MCxyaWdodDprLGNlbnRlcjprLzIsdG9wOjAsYm90dG9tOk0sbWlkZGxlOk0vMn0sUD1NYXRoLnNxcnQoayprK00qTSksST1oLkxBQkVMRElTVEFOQ0UqUC9NYXRoLm1heCgxLGUubGVuZ3RoL2guTEFCRUxJTkNSRUFTRSk7bS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT11LmNhbGNUZXh0T3B0cyh0LmxldmVsLEUsQyxyKTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgbj1zLmdldFZpc2libGVTZWdtZW50KHRoaXMsTCxlLmhlaWdodC8yKTtpZihuJiYoZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbyxzPTA7czxyLnBlZGdlcGF0aHMubGVuZ3RoO3MrKyllPT09ci5wZWRnZXBhdGhzW3NdJiYobz1yLmVkZ2VwYXRoc1tzXSk7aWYoIW8pcmV0dXJuO3ZhciBsPWkuYVswXSxjPWkuYVtpLmEubGVuZ3RoLTFdLHU9aS5iWzBdLGg9aS5iW2kuYi5sZW5ndGgtMV07ZnVuY3Rpb24gZih0LGUpe3ZhciByLG49MDtyZXR1cm4oTWF0aC5hYnModFswXS1sKTwuMXx8TWF0aC5hYnModFswXS1jKTwuMSkmJihyPXkoaS5keHlkYl9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSp4KGUscikvMikpLChNYXRoLmFicyh0WzFdLXUpPC4xfHxNYXRoLmFicyh0WzFdLWgpPC4xKSYmKHI9eShpLmR4eWRhX3JvdWdoKHRbMF0sdFsxXSwuMSkpLG49TWF0aC5tYXgobixhKngoZSxyKS8yKSksbn12YXIgcD12KHQsMCwxKSxkPXYodCxuLnRvdGFsLG4udG90YWwtMSksZz1mKG9bMF0scCksbT1uLnRvdGFsLWYob1tvLmxlbmd0aC0xXSxkKTtuLm1pbjxnJiYobi5taW49Zyk7bi5tYXg+bSYmKG4ubWF4PW0pO24ubGVuPW4ubWF4LW4ubWlufSh0aGlzLHIsdCxuLGMsZS5oZWlnaHQpLCEobi5sZW48KGUud2lkdGgrZS5oZWlnaHQpKmguTEFCRUxNSU4pKSlmb3IodmFyIGk9TWF0aC5taW4oTWF0aC5jZWlsKG4ubGVuL0kpLGguTEFCRUxNQVgpLGE9MDthPGk7YSsrKXt2YXIgbz11LmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsbixlLFMsTCk7aWYoIW8pYnJlYWs7dS5hZGRMYWJlbERhdGEobyxlLFMsQSl9fSkpfSkpLEMucmVtb3ZlKCksdS5kcmF3TGFiZWxzKF8sUyxyLGIsZz9BOm51bGwpfWQmJiFwJiZtLnJlbW92ZSgpfShiLEwsdCxULEMsZSxNKSxvLnNldENsaXBVcmwoYixNLl9jbGlwUGF0aElkLHQpfWZ1bmN0aW9uIEgodCl7dmFyIGU9TS5hYjJ4eSh0WzBdLHRbMV0sITApO3JldHVybltfLmMycChlWzBdKSx3LmMycChlWzFdKV19fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vbGliIjo3NTAsIi4uL2NhcnBldC9heGlzX2FsaWduZWRfbGluZSI6OTM2LCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo5NTIsIi4uL2NhcnBldC9tYWtlcGF0aCI6OTUzLCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5Ijo5NTQsIi4uL2NvbnRvdXIvY2xvc2VfYm91bmRhcmllcyI6OTgxLCIuLi9jb250b3VyL2NvbnN0YW50cyI6OTgzLCIuLi9jb250b3VyL2NvbnZlcnRfdG9fY29uc3RyYWludHMiOjk4NywiLi4vY29udG91ci9lbXB0eV9wYXRoaW5mbyI6OTg5LCIuLi9jb250b3VyL2ZpbmRfYWxsX3BhdGhzIjo5OTEsIi4uL2NvbnRvdXIvbWFrZV9jcm9zc2luZ3MiOjk5NiwiLi4vY29udG91ci9wbG90Ijo5OTcsZDM6MTY5fV0sMTAwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXJtYXBib3gvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe2xvbjpvLmxvbixsYXQ6by5sYXQsejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxyYWRpdXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITAsbWluOjEsZGZsdDozMH0sYmVsb3c6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSx0ZXh0Om8udGV4dCxob3ZlcnRleHQ6by5ob3ZlcnRleHQsaG92ZXJpbmZvOnMoe30sYS5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwieiIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOmkoKSxzaG93bGVnZW5kOnMoe30sYS5zaG93bGVnZW5kLHtkZmx0OiExfSl9LG4oIiIse2NMZXR0ZXI6InoiLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzk1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NzcsIi4uL3NjYXR0ZXJtYXBib3gvYXR0cmlidXRlcyI6MTIyM31dLDEwMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxzPXQoIi4uLy4uL2xpYiIpLl87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX2xlbmd0aCxsPW5ldyBBcnJheShyKSxjPWUueix1PWkoYykmJmMubGVuZ3RoLGg9MDtoPHI7aCsrKXt2YXIgZj1sW2hdPXt9LHA9ZS5sb25baF0sZD1lLmxhdFtoXTtpZihmLmxvbmxhdD1uKHApJiZuKGQpP1srcCwrZF06W2EsYV0sdSl7dmFyIGc9Y1toXTtmLno9bihnKT9nOmF9fXJldHVybiBvKHQsZSx7dmFsczp1P2M6WzAsMV0sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6InoifSksciYmKGxbMF0udD17bGFiZWxzOntsYXQ6cyh0LCJsYXQ6IikrIiAiLGxvbjpzKHQsImxvbjoiKSsiICJ9fSksbH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYyMywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuLi8uLi9saWIiOjc1MCwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEwMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGw9dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKS5tYWtlQmxhbms7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj0hMD09PWUudmlzaWJsZSYmMCE9PWUuX2xlbmd0aCxjPWUuX29wdHM9e2hlYXRtYXA6e2xheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fSxnZW9qc29uOmwoKX07aWYoIXIpcmV0dXJuIGM7dmFyIHUsaD1bXSxmPWUueixwPWUucmFkaXVzLGQ9aS5pc0FycmF5T3JUeXBlZEFycmF5KGYpJiZmLmxlbmd0aCxnPWkuaXNBcnJheU9yVHlwZWRBcnJheShwKTtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgbT10W3VdLHY9bS5sb25sYXQ7aWYodlswXSE9PXMpe3ZhciB5PXt9O2lmKGQpe3ZhciB4PW0uejt5Lno9eCE9PXM/eDowfWcmJih5LnI9bihwW3VdKSYmcFt1XT4wPytwW3VdOjApLGgucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczp2fSxwcm9wZXJ0aWVzOnl9KX19dmFyIGI9by5leHRyYWN0T3B0cyhlKSxfPWIucmV2ZXJzZXNjYWxlP28uZmxpcFNjYWxlKGIuY29sb3JzY2FsZSk6Yi5jb2xvcnNjYWxlLHc9X1swXVsxXSxUPVsiaW50ZXJwb2xhdGUiLFsibGluZWFyIl0sWyJoZWF0bWFwLWRlbnNpdHkiXSwwLGEub3BhY2l0eSh3KTwxP3c6YS5hZGRPcGFjaXR5KHcsMCldO2Zvcih1PTE7dTxfLmxlbmd0aDt1KyspVC5wdXNoKF9bdV1bMF0sX1t1XVsxXSk7dmFyIGs9WyJpbnRlcnBvbGF0ZSIsWyJsaW5lYXIiXSxbImdldCIsInoiXSxiLm1pbiwwLGIubWF4LDFdO3JldHVybiBpLmV4dGVuZEZsYXQoYy5oZWF0bWFwLnBhaW50LHsiaGVhdG1hcC13ZWlnaHQiOmQ/azoxLyhiLm1heC1iLm1pbiksImhlYXRtYXAtY29sb3IiOlQsImhlYXRtYXAtcmFkaXVzIjpnP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6InIifTplLnJhZGl1cywiaGVhdG1hcC1vcGFjaXR5IjplLm9wYWNpdHl9KSxjLmdlb2pzb249e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpofSxjLmhlYXRtYXAubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLGN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjcsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo3NDQsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMDA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoImxvbiIpfHxbXSxjPXMoImxhdCIpfHxbXSx1PU1hdGgubWluKGwubGVuZ3RoLGMubGVuZ3RoKTt1PyhlLl9sZW5ndGg9dSxzKCJ6IikscygicmFkaXVzIikscygiYmVsb3ciKSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSkpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MjUsIi4uLy4uL2xpYiI6NzUwLCIuL2F0dHJpYnV0ZXMiOjEwMDZ9XSwxMDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0Lno9ZS56LHR9fSx7fV0sMTAxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9zY2F0dGVybWFwYm94L2hvdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1hKHQsZSxyKTtpZihvKXt2YXIgcz1vWzBdLGw9cy5jZCxjPWxbMF0udHJhY2UsdT1sW3MuaW5kZXhdO2lmKGRlbGV0ZSBzLmNvbG9yLCJ6ImluIHUpe3ZhciBoPXMuc3VicGxvdC5tb2NrQXhpcztzLno9dS56LHMuekxhYmVsPWkudGlja1RleHQoaCxoLmMybCh1LnopLCJob3ZlciIpLnRleHR9cmV0dXJuIHMuZXh0cmFUZXh0PWZ1bmN0aW9uKHQsZSxyKXtpZih0LmhvdmVydGVtcGxhdGUpcmV0dXJuO3ZhciBpPShlLmhpfHx0LmhvdmVyaW5mbykuc3BsaXQoIisiKSxhPS0xIT09aS5pbmRleE9mKCJhbGwiKSxvPS0xIT09aS5pbmRleE9mKCJsb24iKSxzPS0xIT09aS5pbmRleE9mKCJsYXQiKSxsPWUubG9ubGF0LGM9W107ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdCsiXHhiMCJ9YXx8byYmcz9jLnB1c2goIigiK3UobFswXSkrIiwgIit1KGxbMV0pKyIpIik6bz9jLnB1c2goci5sb24rdShsWzBdKSk6cyYmYy5wdXNoKHIubGF0K3UobFsxXSkpOyhhfHwtMSE9PWkuaW5kZXhPZigidGV4dCIpKSYmbi5maWxsVGV4dChlLHQsYyk7cmV0dXJuIGMuam9pbigiPGJyPiIpfShjLHUsbFswXS50LmxhYmVscyksW3NdfX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uL3NjYXR0ZXJtYXBib3gvaG92ZXIiOjEyMjh9XSwxMDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuLi9zY2F0dGVybWFwYm94L2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxnZXRCZWxvdzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmdldE1hcExheWVycygpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxhPWkuaWQ7aWYoInN5bWJvbCI9PT1pLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgYSYmLTE9PT1hLmluZGV4T2YoInBsb3RseS0iKSlyZXR1cm4gYX19LG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJkZW5zaXR5bWFwYm94IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9tYXBib3giKSxjYXRlZ29yaWVzOlsibWFwYm94IiwiZ2wiLCJzaG93TGVnZW5kIl0sbWV0YTp7aHJfbmFtZToiZGVuc2l0eV9tYXBib3gifX19LHsiLi4vLi4vcGxvdHMvbWFwYm94Ijo4NTYsIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwMzksIi4uL3NjYXR0ZXJtYXBib3gvZm9ybWF0X2xhYmVscyI6MTIyNywiLi9hdHRyaWJ1dGVzIjoxMDA2LCIuL2NhbGMiOjEwMDcsIi4vZGVmYXVsdHMiOjEwMDksIi4vZXZlbnRfZGF0YSI6MTAxMCwiLi9ob3ZlciI6MTAxMSwiLi9wbG90IjoxMDEzfV0sMTAxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnZlcnQiKSxpPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiKS50cmFjZUxheWVyUHJlZml4O2Z1bmN0aW9uIGEodCxlKXt0aGlzLnR5cGU9ImRlbnNpdHltYXBib3giLHRoaXMuc3VicGxvdD10LHRoaXMudWlkPWUsdGhpcy5zb3VyY2VJZD0ic291cmNlLSIrZSx0aGlzLmxheWVyTGlzdD1bWyJoZWF0bWFwIixpK2UrIi1oZWF0bWFwIl1dLHRoaXMuYmVsb3c9bnVsbH12YXIgbz1hLnByb3RvdHlwZTtvLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3Qscj10aGlzLmxheWVyTGlzdCxpPW4odCksYT1lLmJlbG93TG9va3VwWyJ0cmFjZS0iK3RoaXMudWlkXTtlLm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZCkuc2V0RGF0YShpLmdlb2pzb24pLGEhPT10aGlzLmJlbG93JiYodGhpcy5fcmVtb3ZlTGF5ZXJzKCksdGhpcy5fYWRkTGF5ZXJzKGksYSksdGhpcy5iZWxvdz1hKTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIHM9cltvXSxsPXNbMF0sYz1zWzFdLHU9aVtsXTtlLnNldE9wdGlvbnMoYywic2V0TGF5b3V0UHJvcGVydHkiLHUubGF5b3V0KSwidmlzaWJsZSI9PT11LmxheW91dC52aXNpYmlsaXR5JiZlLnNldE9wdGlvbnMoYywic2V0UGFpbnRQcm9wZXJ0eSIsdS5wYWludCl9fSxvLl9hZGRMYXllcnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5zdWJwbG90LG49dGhpcy5sYXllckxpc3QsaT10aGlzLnNvdXJjZUlkLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW9bMF0sbD10W3NdO3IuYWRkTGF5ZXIoe3R5cGU6cyxpZDpvWzFdLHNvdXJjZTppLGxheW91dDpsLmxheW91dCxwYWludDpsLnBhaW50fSxlKX19LG8uX3JlbW92ZUxheWVycz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnBsb3QubWFwLGU9dGhpcy5sYXllckxpc3Qscj1lLmxlbmd0aC0xO3I+PTA7ci0tKXQucmVtb3ZlTGF5ZXIoZVtyXVsxXSl9LG8uZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3VicGxvdC5tYXA7dGhpcy5fcmVtb3ZlTGF5ZXJzKCksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2UsaT1uZXcgYSh0LHIudWlkKSxvPWkuc291cmNlSWQscz1uKGUpLGw9aS5iZWxvdz10LmJlbG93TG9va3VwWyJ0cmFjZS0iK3IudWlkXTtyZXR1cm4gdC5tYXAuYWRkU291cmNlKG8se3R5cGU6Imdlb2pzb24iLGRhdGE6cy5nZW9qc29ufSksaS5fYWRkTGF5ZXJzKHMsbCksaX19LHsiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyI6ODU0LCIuL2NvbnZlcnQiOjEwMDh9XSwxMDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24ubWVyZ2VBcnJheShlLnRleHQsdCwidHgiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iik7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bi5tZXJnZUFycmF5KGkub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2EmJihuLm1lcmdlQXJyYXkoYS5jb2xvcix0LCJtbGMiKSxuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoYS53aWR0aCx0LCJtbHciKSl9fX0seyIuLi8uLi9saWIiOjc1MH1dLDEwMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLmxpbmUsYT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGw9dCgiLi9jb25zdGFudHMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz17eDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx4cGVyaW9kOm4ueHBlcmlvZCx5cGVyaW9kOm4ueXBlcmlvZCx4cGVyaW9kMDpuLnhwZXJpb2QwLHlwZXJpb2QwOm4ueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDpuLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDpuLnlwZXJpb2RhbGlnbm1lbnQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6byh7fSx7a2V5czpsLmV2ZW50RGF0YUtleXN9KSxob3ZlcmluZm86Yyh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6WyJuYW1lIiwieCIsInkiLCJ0ZXh0IiwicGVyY2VudCBpbml0aWFsIiwicGVyY2VudCBwcmV2aW91cyIsInBlcmNlbnQgdG90YWwiXX0pLHRleHRpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJwZXJjZW50IGluaXRpYWwiLCJwZXJjZW50IHByZXZpb3VzIiwicGVyY2VudCB0b3RhbCIsInZhbHVlIl0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx0ZXh0dGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpsLmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiLCJ2YWx1ZSJdKX0pLHRleHQ6bi50ZXh0LHRleHRwb3NpdGlvbjpjKHt9LG4udGV4dHBvc2l0aW9uLHtkZmx0OiJhdXRvIn0pLGluc2lkZXRleHRhbmNob3I6Yyh7fSxuLmluc2lkZXRleHRhbmNob3Ise2RmbHQ6Im1pZGRsZSJ9KSx0ZXh0YW5nbGU6Yyh7fSxuLnRleHRhbmdsZSx7ZGZsdDowfSksdGV4dGZvbnQ6bi50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpuLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDpuLm91dHNpZGV0ZXh0Zm9udCxjb25zdHJhaW50ZXh0Om4uY29uc3RyYWludGV4dCxjbGlwb25heGlzOm4uY2xpcG9uYXhpcyxvcmllbnRhdGlvbjpjKHt9LG4ub3JpZW50YXRpb24se30pLG9mZnNldDpjKHt9LG4ub2Zmc2V0LHthcnJheU9rOiExfSksd2lkdGg6Yyh7fSxuLndpZHRoLHthcnJheU9rOiExfSksbWFya2VyOm4ubWFya2VyLGNvbm5lY3Rvcjp7ZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sbGluZTp7Y29sb3I6Yyh7fSxpLmNvbG9yLHtkZmx0OnUuZGVmYXVsdExpbmV9KSx3aWR0aDpjKHt9LGkud2lkdGgse2RmbHQ6MCxlZGl0VHlwZToicGxvdCJ9KSxkYXNoOmkuZGFzaCxlZGl0VHlwZToic3R5bGUifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4uYWxpZ25tZW50Z3JvdXB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vYmFyL2F0dHJpYnV0ZXMiOjg5MiwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTU4LCIuL2NvbnN0YW50cyI6MTAxN31dLDEwMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxhPXQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIiksbz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHQ9PT1zPzA6dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLHUsaCxmLHAsZD1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksZz1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iik7ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1kLm1ha2VDYWxjZGF0YShlLCJ4IiksdT1nLm1ha2VDYWxjZGF0YShlLCJ5IiksYz1pKGUsZywieSIsdSkscD0hIWUueXBlcmlvZGFsaWdubWVudCk6KHI9Zy5tYWtlQ2FsY2RhdGEoZSwieSIpLHU9ZC5tYWtlQ2FsY2RhdGEoZSwieCIpLGM9aShlLGQsIngiLHUpLHA9ISFlLnhwZXJpb2RhbGlnbm1lbnQpO3ZhciBtLHY9TWF0aC5taW4oYy5sZW5ndGgsci5sZW5ndGgpLHk9bmV3IEFycmF5KHYpO2ZvcihlLl9iYXNlPVtdLGg9MDtoPHY7aCsrKXtyW2hdPDAmJihyW2hdPXMpO3ZhciB4PSExO3JbaF0hPT1zJiZoKzE8diYmcltoKzFdIT09cyYmKHg9ITApLGY9eVtoXT17cDpjW2hdLHM6cltoXSxjTmV4dDp4fSxlLl9iYXNlW2hdPS0uNSpmLnMscCYmKHlbaF0ub3JpZ19wPXVbaF0pLGUuaWRzJiYoZi5pZD1TdHJpbmcoZS5pZHNbaF0pKSwwPT09aCYmKHlbMF0udlRvdGFsPTApLHlbMF0udlRvdGFsKz1sKGYucyksZi5iZWdSPWwoZi5zKS9sKHlbMF0ucyl9Zm9yKGg9MDtoPHY7aCsrKShmPXlbaF0pLnMhPT1zJiYoZi5zdW1SPWYucy95WzBdLnZUb3RhbCxmLmRpZlI9dm9pZCAwIT09bT9mLnMvbToxLG09Zi5zKTtyZXR1cm4gYSh5LGUpLG8oeSxlKSx5fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjc5NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE2MCwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjEwMTR9XSwxMDE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbInBlcmNlbnRJbml0aWFsIiwicGVyY2VudFByZXZpb3VzIiwicGVyY2VudFRvdGFsIl19fSx7fV0sMTAxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLnNldEdyb3VwUG9zaXRpb25zO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT10Ll9mdWxsTGF5b3V0LG89dC5fZnVsbERhdGEscz10LmNhbGNkYXRhLGw9ZS54YXhpcyxjPWUueWF4aXMsdT1bXSxoPVtdLGY9W107Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIHA9b1tpXSxkPSJoIj09PXAub3JpZW50YXRpb247ITA9PT1wLnZpc2libGUmJnAueGF4aXM9PT1sLl9pZCYmcC55YXhpcz09PWMuX2lkJiYiZnVubmVsIj09PXAudHlwZSYmKHI9c1tpXSxkP2YucHVzaChyKTpoLnB1c2gociksdS5wdXNoKHIpKX12YXIgZz17bW9kZTphLmZ1bm5lbG1vZGUsbm9ybTphLmZ1bm5lbG5vcm0sZ2FwOmEuZnVubmVsZ2FwLGdyb3VwZ2FwOmEuZnVubmVsZ3JvdXBnYXB9O2ZvcihuKHQsbCxjLGgsZyksbih0LGMsbCxmLGcpLGk9MDtpPHUubGVuZ3RoO2krKyl7cj11W2ldO2Zvcih2YXIgbT0wO208ci5sZW5ndGg7bSsrKW0rMTxyLmxlbmd0aCYmKHJbbV0ubmV4dFAwPXJbbSsxXS5wMCxyW21dLm5leHRTMD1yW20rMV0uczAsclttXS5uZXh0UDE9clttKzFdLnAxLHJbbV0ubmV4dFMxPXJbbSsxXS5zMSl9fX0seyIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyI6ODk1fV0sMTAxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsYT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0LG89dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsaSl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfWlmKG8odCxlLGksdSkpe3ModCxlLGksdSksdSgib3JpZW50YXRpb24iLGUueSYmIWUueD8idiI6ImgiKSx1KCJvZmZzZXQiKSx1KCJ3aWR0aCIpO3ZhciBoPXUoInRleHQiKTt1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIik7dmFyIGY9dSgidGV4dHBvc2l0aW9uIik7YSh0LGUsaSx1LGYse21vZHVsZUhhc1NlbGVjdGVkOiExLG1vZHVsZUhhc1Vuc2VsZWN0ZWQ6ITEsbW9kdWxlSGFzQ29uc3RyYWluOiEwLG1vZHVsZUhhc0NsaXBvbmF4aXM6ITAsbW9kdWxlSGFzVGV4dGFuZ2xlOiEwLG1vZHVsZUhhc0luc2lkZWFuY2hvcjohMH0pLCJub25lIj09PWUudGV4dHBvc2l0aW9ufHxlLnRleHR0ZW1wbGF0ZXx8dSgidGV4dGluZm8iLEFycmF5LmlzQXJyYXkoaCk/InRleHQrdmFsdWUiOiJ2YWx1ZSIpO3ZhciBwPXUoIm1hcmtlci5jb2xvciIscik7aWYodSgibWFya2VyLmxpbmUuY29sb3IiLGMuZGVmYXVsdExpbmUpLHUoIm1hcmtlci5saW5lLndpZHRoIiksdSgiY29ubmVjdG9yLnZpc2libGUiKSl1KCJjb25uZWN0b3IuZmlsbGNvbG9yIixmdW5jdGlvbih0KXt2YXIgZT1uLmlzQXJyYXlPclR5cGVkQXJyYXkodCk/IiMwMDAiOnQ7cmV0dXJuIGMuYWRkT3BhY2l0eShlLC41KmMub3BhY2l0eShlKSl9KHApKSx1KCJjb25uZWN0b3IubGluZS53aWR0aCIpJiYodSgiY29ubmVjdG9yLmxpbmUuY29sb3IiKSx1KCJjb25uZWN0b3IubGluZS5kYXNoIikpfWVsc2UgZS52aXNpYmxlPSExfSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcixhO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG4uY29lcmNlKGEuX2lucHV0LGEsbCx0KX1pZigiZ3JvdXAiPT09ZS5mdW5uZWxtb2RlKWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXI9KGE9dFtzXSkuX2lucHV0LGkocixhLGUsbyl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2xpYiI6NzUwLCIuLi9iYXIvZGVmYXVsdHMiOjg5NiwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjExNzgsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjExODUsIi4vYXR0cmlidXRlcyI6MTAxNX1dLDEwMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwicGVyY2VudEluaXRpYWwiaW4gZSYmKHQucGVyY2VudEluaXRpYWw9ZS5wZXJjZW50SW5pdGlhbCksInBlcmNlbnRQcmV2aW91cyJpbiBlJiYodC5wZXJjZW50UHJldmlvdXM9ZS5wZXJjZW50UHJldmlvdXMpLCJwZXJjZW50VG90YWwiaW4gZSYmKHQucGVyY2VudFRvdGFsPWUucGVyY2VudFRvdGFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDEwMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLm9wYWNpdHksaT10KCIuLi9iYXIvaG92ZXIiKS5ob3Zlck9uQmFycyxhPXQoIi4uLy4uL2xpYiIpLmZvcm1hdFBlcmNlbnQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPWkodCxlLHIsbyk7aWYocyl7dmFyIGw9cy5jZCxjPWxbMF0udHJhY2UsdT0iaCI9PT1jLm9yaWVudGF0aW9uLGg9bFtzLmluZGV4XTtzWyh1PyJ4IjoieSIpKyJMYWJlbFZhbCJdPWgucyxzLnBlcmNlbnRJbml0aWFsPWguYmVnUixzLnBlcmNlbnRJbml0aWFsTGFiZWw9YShoLmJlZ1IsMSkscy5wZXJjZW50UHJldmlvdXM9aC5kaWZSLHMucGVyY2VudFByZXZpb3VzTGFiZWw9YShoLmRpZlIsMSkscy5wZXJjZW50VG90YWw9aC5zdW1SLHMucGVyY2VudFRvdGFsTGFiZWw9YShoLnN1bVIsMSk7dmFyIGY9aC5oaXx8Yy5ob3ZlcmluZm8scD1bXTtpZihmJiYibm9uZSIhPT1mJiYic2tpcCIhPT1mKXt2YXIgZD0iYWxsIj09PWYsZz1mLnNwbGl0KCIrIiksbT1mdW5jdGlvbih0KXtyZXR1cm4gZHx8LTEhPT1nLmluZGV4T2YodCl9O20oInBlcmNlbnQgaW5pdGlhbCIpJiZwLnB1c2gocy5wZXJjZW50SW5pdGlhbExhYmVsKyIgb2YgaW5pdGlhbCIpLG0oInBlcmNlbnQgcHJldmlvdXMiKSYmcC5wdXNoKHMucGVyY2VudFByZXZpb3VzTGFiZWwrIiBvZiBwcmV2aW91cyIpLG0oInBlcmNlbnQgdG90YWwiKSYmcC5wdXNoKHMucGVyY2VudFRvdGFsTGFiZWwrIiBvZiB0b3RhbCIpfXJldHVybiBzLmV4dHJhVGV4dD1wLmpvaW4oIjxicj4iKSxzLmNvbG9yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXJrZXIsaT1lLm1jfHxyLmNvbG9yLGE9ZS5tbGN8fHIubGluZS5jb2xvcixvPWUubWx3fHxyLmxpbmUud2lkdGg7aWYobihpKSlyZXR1cm4gaTtpZihuKGEpJiZvKXJldHVybiBhfShjLGgpLFtzXX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vbGliIjo3NTAsIi4uL2Jhci9ob3ZlciI6ODk5fV0sMTAyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuLi9iYXIvc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImZ1bm5lbCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImJhci1saWtlIiwiY2FydGVzaWFuIiwic3ZnIiwib3JpZW50ZWQiLCJzaG93TGVnZW5kIiwiem9vbVNjYWxlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4MTIsIi4uL2Jhci9zZWxlY3QiOjkwNCwiLi9hdHRyaWJ1dGVzIjoxMDE1LCIuL2NhbGMiOjEwMTYsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6MTAxOCwiLi9kZWZhdWx0cyI6MTAxOSwiLi9ldmVudF9kYXRhIjoxMDIwLCIuL2hvdmVyIjoxMDIxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDIzLCIuL2xheW91dF9kZWZhdWx0cyI6MTAyNCwiLi9wbG90IjoxMDI1LCIuL3N0eWxlIjoxMDI2fV0sMTAyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2Z1bm5lbG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInN0YWNrIiwiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoic3RhY2siLGVkaXRUeXBlOiJjYWxjIn0sZnVubmVsZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sZnVubmVsZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTAyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPSExO2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1mb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZihsLnZpc2libGUmJiJmdW5uZWwiPT09bC50eXBlKXthPSEwO2JyZWFrfX1hJiYobygiZnVubmVsbW9kZSIpLG8oImZ1bm5lbGdhcCIsLjIpLG8oImZ1bm5lbGdyb3VwZ2FwIikpfX0seyIuLi8uLi9saWIiOjc1MCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTAyM31dLDEwMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHM9dCgiLi4vYmFyL3Bsb3QiKSxsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5jbGVhck1pblRleHRTaXplO2Z1bmN0aW9uIGModCxlLHIsbil7dmFyIGk9W10sYT1bXSxvPW4/ZTpyLHM9bj9yOmU7cmV0dXJuIGlbMF09by5jMnAodC5zMCwhMCksYVswXT1zLmMycCh0LnAwLCEwKSxpWzFdPW8uYzJwKHQuczEsITApLGFbMV09cy5jMnAodC5wMSwhMCksaVsyXT1vLmMycCh0Lm5leHRTMCwhMCksYVsyXT1zLmMycCh0Lm5leHRQMCwhMCksaVszXT1vLmMycCh0Lm5leHRTMSwhMCksYVszXT1zLmMycCh0Lm5leHRQMSwhMCksbj9baSxhXTpbYSxpXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7dmFyIGg9dC5fZnVsbExheW91dDtsKCJmdW5uZWwiLGgpLGZ1bmN0aW9uKHQsZSxyLHMpe3ZhciBsPWUueGF4aXMsdT1lLnlheGlzO2kubWFrZVRyYWNlR3JvdXBzKHMsciwidHJhY2UgYmFycyIpLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBzPW4uc2VsZWN0KHRoaXMpLGg9clswXS50cmFjZSxmPWkuZW5zdXJlU2luZ2xlKHMsImciLCJyZWdpb25zIik7aWYoaC5jb25uZWN0b3ImJmguY29ubmVjdG9yLnZpc2libGUpe3ZhciBwPSJoIj09PWgub3JpZW50YXRpb24sZD1mLnNlbGVjdEFsbCgiZy5yZWdpb24iKS5kYXRhKGkuaWRlbnRpdHkpO2QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJyZWdpb24iLCEwKSxkLmV4aXQoKS5yZW1vdmUoKTt2YXIgZz1kLnNpemUoKTtkLmVhY2goKGZ1bmN0aW9uKHIscyl7aWYocz09PWctMXx8ci5jTmV4dCl7dmFyIGg9YyhyLGwsdSxwKSxmPWhbMF0sZD1oWzFdLG09IiI7ZlswXSE9PW8mJmRbMF0hPT1vJiZmWzFdIT09byYmZFsxXSE9PW8mJmZbMl0hPT1vJiZkWzJdIT09byYmZlszXSE9PW8mJmRbM10hPT1vJiYobSs9cD8iTSIrZlswXSsiLCIrZFsxXSsiTCIrZlsyXSsiLCIrZFsyXSsiSCIrZlszXSsiTCIrZlsxXSsiLCIrZFsxXSsiWiI6Ik0iK2ZbMV0rIiwiK2RbMV0rIkwiK2ZbMl0rIiwiK2RbM10rIlYiK2RbMl0rIkwiK2ZbMV0rIiwiK2RbMF0rIloiKSwiIj09PW0mJihtPSJNMCwwWiIpLGkuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJwYXRoIikuYXR0cigiZCIsbSkuY2FsbChhLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KX19KSl9ZWxzZSBmLnJlbW92ZSgpfSkpfSh0LGUscix1KSxmdW5jdGlvbih0LGUscixvKXt2YXIgcz1lLnhheGlzLGw9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhvLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgbz1uLnNlbGVjdCh0aGlzKSx1PXJbMF0udHJhY2UsaD1pLmVuc3VyZVNpbmdsZShvLCJnIiwibGluZXMiKTtpZih1LmNvbm5lY3RvciYmdS5jb25uZWN0b3IudmlzaWJsZSYmdS5jb25uZWN0b3IubGluZS53aWR0aCl7dmFyIGY9ImgiPT09dS5vcmllbnRhdGlvbixwPWguc2VsZWN0QWxsKCJnLmxpbmUiKS5kYXRhKGkuaWRlbnRpdHkpO3AuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsaW5lIiwhMCkscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9cC5zaXplKCk7cC5lYWNoKChmdW5jdGlvbihyLG8pe2lmKG89PT1kLTF8fHIuY05leHQpe3ZhciB1PWMocixzLGwsZiksaD11WzBdLHA9dVsxXSxnPSIiO3ZvaWQgMCE9PWhbM10mJnZvaWQgMCE9PXBbM10mJihmPyhnKz0iTSIraFswXSsiLCIrcFsxXSsiTCIraFsyXSsiLCIrcFsyXSxnKz0iTSIraFsxXSsiLCIrcFsxXSsiTCIraFszXSsiLCIrcFsyXSk6KGcrPSJNIitoWzFdKyIsIitwWzFdKyJMIitoWzJdKyIsIitwWzNdLGcrPSJNIitoWzFdKyIsIitwWzBdKyJMIitoWzJdKyIsIitwWzJdKSksIiI9PT1nJiYoZz0iTTAsMFoiKSxpLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwicGF0aCIpLmF0dHIoImQiLGcpLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSkpfWVsc2UgaC5yZW1vdmUoKX0pKX0odCxlLHIsdSkscy5wbG90KHQsZSxyLHUse21vZGU6aC5mdW5uZWxtb2RlLG5vcm06aC5mdW5uZWxtb2RlLGdhcDpoLmZ1bm5lbGdhcCxncm91cGdhcDpoLmZ1bm5lbGdyb3VwZ2FwfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYiI6NzUwLCIuLi9iYXIvcGxvdCI6OTAzLCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MDgsZDM6MTY5fV0sMTAyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0scz10KCIuLi9iYXIvc3R5bGUiKSxsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0LGM9cy5zdHlsZVRleHRQb2ludHM7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUscil7dmFyIHM9cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmZ1bm5lbGxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7bCh0LHMsImZ1bm5lbCIpLHMuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLHMuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcykscz1lWzBdLnRyYWNlO3Iuc2VsZWN0QWxsKCIucG9pbnQgPiBwYXRoIikuZWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuaXNCbGFuayl7dmFyIGU9cy5tYXJrZXI7bi5zZWxlY3QodGhpcykuY2FsbChhLmZpbGwsdC5tY3x8ZS5jb2xvcikuY2FsbChhLnN0cm9rZSx0Lm1sY3x8ZS5saW5lLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsZS5saW5lLmRhc2gsdC5tbHd8fGUubGluZS53aWR0aCkuc3R5bGUoIm9wYWNpdHkiLHMuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkP286MSl9fSkpLGMocixzLHQpLHIuc2VsZWN0QWxsKCIucmVnaW9ucyIpLmVhY2goKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuY2FsbChhLmZpbGwscy5jb25uZWN0b3IuZmlsbGNvbG9yKX0pKSxyLnNlbGVjdEFsbCgiLmxpbmVzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1zLmNvbm5lY3Rvci5saW5lO2kubGluZUdyb3VwU3R5bGUobi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIiksdC53aWR0aCx0LmNvbG9yLHQuZGFzaCl9KSl9KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3MjQsIi4uL2Jhci9zdHlsZSI6OTA2LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MDgsZDM6MTY5fV0sMTAyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9waWUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczpuLmxhYmVscyxsYWJlbDA6bi5sYWJlbDAsZGxhYmVsOm4uZGxhYmVsLHZhbHVlczpuLnZhbHVlcyxtYXJrZXI6e2NvbG9yczpuLm1hcmtlci5jb2xvcnMsbGluZTp7Y29sb3I6bCh7fSxuLm1hcmtlci5saW5lLmNvbG9yLHtkZmx0Om51bGx9KSx3aWR0aDpsKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsc2NhbGVncm91cDpsKHt9LG4uc2NhbGVncm91cCx7fSksdGV4dGluZm86bCh7fSxuLnRleHRpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCJdfSksdGV4dHRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJsYWJlbCIsImNvbG9yIiwidmFsdWUiLCJ0ZXh0IiwicGVyY2VudCJdfSksaG92ZXJpbmZvOmwoe30saS5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwidGV4dCIsInBlcmNlbnQiXX0pLHRleHRwb3NpdGlvbjpsKHt9LG4udGV4dHBvc2l0aW9uLHt2YWx1ZXM6WyJpbnNpZGUiLCJub25lIl0sZGZsdDoiaW5zaWRlIn0pLHRleHRmb250Om4udGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6bi5pbnNpZGV0ZXh0Zm9udCx0aXRsZTp7dGV4dDpuLnRpdGxlLnRleHQsZm9udDpuLnRpdGxlLmZvbnQscG9zaXRpb246bCh7fSxuLnRpdGxlLnBvc2l0aW9uLHt2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiXSxkZmx0OiJ0b3AgY2VudGVyIn0pLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmEoe25hbWU6ImZ1bm5lbGFyZWEiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGFzcGVjdHJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGJhc2VyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zMzMsZWRpdFR5cGU6InBsb3QifX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODI2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NzcsIi4uL3BpZS9hdHRyaWJ1dGVzIjoxMTMyfV0sMTAyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0iZnVubmVsYXJlYSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODYyfV0sMTAyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9waWUvY2FsYyIpO2UuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3JldHVybiBuLmNhbGModCxlKX0sY3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCl7bi5jcm9zc1RyYWNlQ2FsYyh0LHt0eXBlOiJmdW5uZWxhcmVhIn0pfX19LHsiLi4vcGllL2NhbGMiOjExMzR9XSwxMDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQscz10KCIuLi9waWUvZGVmYXVsdHMiKS5oYW5kbGVMYWJlbHNBbmRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgdT1jKCJsYWJlbHMiKSxoPWMoInZhbHVlcyIpLGY9cyh1LGgpLHA9Zi5sZW47aWYoZS5faGFzTGFiZWxzPWYuaGFzTGFiZWxzLGUuX2hhc1ZhbHVlcz1mLmhhc1ZhbHVlcywhZS5faGFzTGFiZWxzJiZlLl9oYXNWYWx1ZXMmJihjKCJsYWJlbDAiKSxjKCJkbGFiZWwiKSkscCl7ZS5fbGVuZ3RoPXAsYygibWFya2VyLmxpbmUud2lkdGgiKSYmYygibWFya2VyLmxpbmUuY29sb3IiLGwucGFwZXJfYmdjb2xvciksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgZCxnPWMoInRleHQiKSxtPWMoInRleHR0ZW1wbGF0ZSIpO2lmKG18fChkPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KGcpPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxtfHxkJiYibm9uZSIhPT1kKXt2YXIgdj1jKCJ0ZXh0cG9zaXRpb24iKTtvKHQsZSxsLGMsdix7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSl9YShlLGwsYyksYygidGl0bGUudGV4dCIpJiYoYygidGl0bGUucG9zaXRpb24iKSxuLmNvZXJjZUZvbnQoYywidGl0bGUuZm9udCIsbC5mb250KSksYygiYXNwZWN0cmF0aW8iKSxjKCJiYXNlcmF0aW8iKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODI2LCIuLi9iYXIvZGVmYXVsdHMiOjg5NiwiLi4vcGllL2RlZmF1bHRzIjoxMTM1LCIuL2F0dHJpYnV0ZXMiOjEwMjd9XSwxMDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImZ1bm5lbGFyZWEiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInBpZS1saWtlIiwiZnVubmVsYXJlYSIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uZTp0KCIuLi9waWUvc3R5bGVfb25lIiksbWV0YTp7fX19LHsiLi4vcGllL3N0eWxlX29uZSI6MTE0MywiLi9hdHRyaWJ1dGVzIjoxMDI3LCIuL2Jhc2VfcGxvdCI6MTAyOCwiLi9jYWxjIjoxMDI5LCIuL2RlZmF1bHRzIjoxMDMwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDMyLCIuL2xheW91dF9kZWZhdWx0cyI6MTAzMywiLi9wbG90IjoxMDM0LCIuL3N0eWxlIjoxMDM1fV0sMTAzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9waWUvbGF5b3V0X2F0dHJpYnV0ZXMiKS5oaWRkZW5sYWJlbHM7ZS5leHBvcnRzPXtoaWRkZW5sYWJlbHM6bixmdW5uZWxhcmVhY29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRmdW5uZWxhcmVhY29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19fSx7Ii4uL3BpZS9sYXlvdXRfYXR0cmlidXRlcyI6MTEzOX1dLDEwMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXIoImhpZGRlbmxhYmVscyIpLHIoImZ1bm5lbGFyZWFjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kZnVubmVsYXJlYWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjc1MCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTAzMn1dLDEwMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxzPXQoIi4uL2Jhci9wbG90IikudG9Nb3ZlSW5zaWRlQmFyLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLGM9bC5yZWNvcmRNaW5UZXh0U2l6ZSx1PWwuY2xlYXJNaW5UZXh0U2l6ZSxoPXQoIi4uL3BpZS9oZWxwZXJzIiksZj10KCIuLi9waWUvcGxvdCIpLHA9Zi5hdHRhY2hGeEhhbmRsZXJzLGQ9Zi5kZXRlcm1pbmVJbnNpZGVUZXh0Rm9udCxnPWYubGF5b3V0QXJlYXMsbT1mLnByZXJlbmRlclRpdGxlcyx2PWYucG9zaXRpb25UaXRsZU91dHNpZGUseT1mLmZvcm1hdFNsaWNlTGFiZWw7ZnVuY3Rpb24geCh0LGUpe3JldHVybiJsIisoZVswXS10WzBdKSsiLCIrKGVbMV0tdFsxXSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDt1KCJmdW5uZWxhcmVhIixyKSxtKGUsdCksZyhlLHIuX3NpemUpLGEubWFrZVRyYWNlR3JvdXBzKHIuX2Z1bm5lbGFyZWFsYXllcixlLCJ0cmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBsPW4uc2VsZWN0KHRoaXMpLHU9ZVswXSxmPXUudHJhY2U7IWZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClyZXR1cm47dmFyIGU9dFswXSxyPWUudHJhY2Usbj1yLmFzcGVjdHJhdGlvLGk9ci5iYXNlcmF0aW87aT4uOTk5JiYoaT0uOTk5KTt2YXIgYSxvPU1hdGgucG93KGksMikscz1lLnZUb3RhbCxsPXMsYz1zKm8vKDEtbykvcztmdW5jdGlvbiB1KCl7dmFyIHQsZT17eDp0PU1hdGguc3FydChjKSx5Oi10fTtyZXR1cm5bZS54LGUueV19dmFyIGgsZixwPVtdO2ZvcihwLnB1c2godSgpKSxoPXQubGVuZ3RoLTE7aD4tMTtoLS0paWYoIShmPXRbaF0pLmhpZGRlbil7dmFyIGQ9Zi52L2w7Yys9ZCxwLnB1c2godSgpKX12YXIgZz0xLzAsbT0tMS8wO2ZvcihoPTA7aDxwLmxlbmd0aDtoKyspYT1wW2hdLGc9TWF0aC5taW4oZyxhWzFdKSxtPU1hdGgubWF4KG0sYVsxXSk7Zm9yKGg9MDtoPHAubGVuZ3RoO2grKylwW2hdWzFdLT0obStnKS8yO3ZhciB2PXBbcC5sZW5ndGgtMV1bMF0seT1lLnIseD0obS1nKS8yLGI9eS92LF89eS94Km47Zm9yKGUucj1fKngsaD0wO2g8cC5sZW5ndGg7aCsrKXBbaF1bMF0qPWIscFtoXVsxXSo9Xzt2YXIgdz1bLShhPXBbMF0pWzBdLGFbMV1dLFQ9W2FbMF0sYVsxXV0saz0wO2ZvcihoPXQubGVuZ3RoLTE7aD4tMTtoLS0paWYoIShmPXRbaF0pLmhpZGRlbil7dmFyIE09cFtrKz0xXVswXSxBPXBba11bMV07Zi5UTD1bLU0sQV0sZi5UUj1bTSxBXSxmLkJMPXcsZi5CUj1ULGYucHhtaWQ9KFM9Zi5UUixFPWYuQlIsWy41KihTWzBdK0VbMF0pLC41KihTWzFdK0VbMV0pXSksdz1mLlRMLFQ9Zi5UUn12YXIgUyxFfShlKSxsLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGw9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnNsaWNlIikuZGF0YShlKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSxsLmV4aXQoKS5yZW1vdmUoKSxsLmVhY2goKGZ1bmN0aW9uKGwsZyl7aWYobC5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle2wucG9pbnROdW1iZXI9bC5pLGwuY3VydmVOdW1iZXI9Zi5pbmRleDt2YXIgbT11LmN4LHY9dS5jeSxiPW4uc2VsZWN0KHRoaXMpLF89Yi5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmRhdGEoW2xdKTtfLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgic3VyZmFjZSIsITApLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJhbGwifSksYi5jYWxsKHAsdCxlKTt2YXIgdz0iTSIrKG0rbC5UUlswXSkrIiwiKyh2K2wuVFJbMV0pK3gobC5UUixsLkJSKSt4KGwuQlIsbC5CTCkreChsLkJMLGwuVEwpKyJaIjtfLmF0dHIoImQiLHcpLHkodCxsLHUpO3ZhciBUPWguY2FzdE9wdGlvbihmLnRleHRwb3NpdGlvbixsLnB0cyksaz1iLnNlbGVjdEFsbCgiZy5zbGljZXRleHQiKS5kYXRhKGwudGV4dCYmIm5vbmUiIT09VD9bMF06W10pO2suZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKSxrLmV4aXQoKS5yZW1vdmUoKSxrLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHU9YS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLGg9YS5lbnN1cmVVbmlmb3JtRm9udFNpemUodCxkKGYsbCxyLmZvbnQpKTt1LnRleHQobC50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwoaS5mb250LGgpLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHAseSx4LGI9aS5iQm94KHUubm9kZSgpKSxfPU1hdGgubWluKGwuQkxbMV0sbC5CUlsxXSkrdix3PU1hdGgubWF4KGwuVExbMV0sbC5UUlsxXSkrdjt5PU1hdGgubWF4KGwuVExbMF0sbC5CTFswXSkrbSx4PU1hdGgubWluKGwuVFJbMF0sbC5CUlswXSkrbSwocD1zKHkseCxfLHcsYix7aXNIb3Jpem9udGFsOiEwLGNvbnN0cmFpbmVkOiEwLGFuZ2xlOjAsYW5jaG9yOiJtaWRkbGUifSkpLmZvbnRTaXplPWguc2l6ZSxjKGYudHlwZSxwLHIpLGVbZ10udHJhbnNmb3JtPXAsdS5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VGV4dFRyYW5zZm9ybShwKSl9KSl9fSkpO3ZhciBnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy50aXRsZXRleHQiKS5kYXRhKGYudGl0bGUudGV4dD9bMF06W10pO2cuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aXRsZXRleHQiLCEwKSxnLmV4aXQoKS5yZW1vdmUoKSxnLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9YS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLHM9Zi50aXRsZS50ZXh0O2YuX21ldGEmJihzPWEudGVtcGxhdGVTdHJpbmcocyxmLl9tZXRhKSksZS50ZXh0KHMpLmF0dHIoe2NsYXNzOiJ0aXRsZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChpLmZvbnQsZi50aXRsZS5mb250KS5jYWxsKG8uY29udmVydFRvVHNwYW5zLHQpO3ZhciBsPXYodSxyLl9zaXplKTtlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2wueCsiLCIrbC55KyIpIisobC5zY2FsZTwxPyJzY2FsZSgiK2wuc2NhbGUrIikiOiIiKSsidHJhbnNsYXRlKCIrbC50eCsiLCIrbC50eSsiKSIpfSkpfSkpfSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6Nzc0LCIuLi9iYXIvcGxvdCI6OTAzLCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MDgsIi4uL3BpZS9oZWxwZXJzIjoxMTM3LCIuLi9waWUvcGxvdCI6MTE0MSxkMzoxNjl9XSwxMDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi9waWUvc3R5bGVfb25lIiksYT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fZnVubmVsYXJlYWxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7YSh0LGUsImZ1bm5lbGFyZWEiKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKTtyLnN0eWxlKHtvcGFjaXR5OmUub3BhY2l0eX0pLHIuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5jYWxsKGksdCxlKX0pKX0pKX19LHsiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTA4LCIuLi9waWUvc3R5bGVfb25lIjoxMTQzLGQzOjE2OX1dLDEwMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPSh0KCIuLi8uLi9jb25zdGFudHMvZG9jcyIpLkZPUk1BVF9MSU5LLHQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0KTtlLmV4cG9ydHM9cyh7ejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx4OnMoe30sbi54LHtpbXBsaWVkRWRpdHM6e3h0eXBlOiJhcnJheSJ9fSkseDA6cyh7fSxuLngwLHtpbXBsaWVkRWRpdHM6e3h0eXBlOiJzY2FsZWQifX0pLGR4OnMoe30sbi5keCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5OnMoe30sbi55LHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJhcnJheSJ9fSkseTA6cyh7fSxuLnkwLHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLGR5OnMoe30sbi5keSx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSx4cGVyaW9kOnMoe30sbi54cGVyaW9kLHtpbXBsaWVkRWRpdHM6e3h0eXBlOiJzY2FsZWQifX0pLHlwZXJpb2Q6cyh7fSxuLnlwZXJpb2Qse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSkseHBlcmlvZDA6cyh7fSxuLnhwZXJpb2QwLHtpbXBsaWVkRWRpdHM6e3h0eXBlOiJzY2FsZWQifX0pLHlwZXJpb2QwOnMoe30sbi55cGVyaW9kMCx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSx4cGVyaW9kYWxpZ25tZW50OnMoe30sbi54cGVyaW9kYWxpZ25tZW50LHtpbXBsaWVkRWRpdHM6e3h0eXBlOiJzY2FsZWQifX0pLHlwZXJpb2RhbGlnbm1lbnQ6cyh7fSxuLnlwZXJpb2RhbGlnbm1lbnQse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSksdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNwb3NlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0seHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFycmF5Iiwic2NhbGVkIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXJyYXkiLCJzY2FsZWQiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHpzbW9vdGg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZhc3QiLCJiZXN0IiwhMV0sZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGhvdmVyb25nYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJub25lIn0sY29ubmVjdGdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0seGdhcDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSx5Z2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToicGxvdCJ9LHpob3ZlcmZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJub25lIn0saG92ZXJ0ZW1wbGF0ZTphKCksc2hvd2xlZ2VuZDpzKHt9LGkuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSx7dHJhbnNmb3Jtczp2b2lkIDB9LG8oIiIse2NMZXR0ZXI6InoiLGF1dG9Db2xvckRmbHQ6ITF9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYyMiwiLi4vLi4vY29uc3RhbnRzL2RvY3MiOjcyMCwiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTU4fV0sMTAzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLHM9dCgiLi4vaGlzdG9ncmFtMmQvY2FsYyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxjPXQoIi4vY29udmVydF9jb2x1bW5feHl6IiksdT10KCIuL2NsZWFuXzJkX2FycmF5IiksaD10KCIuL2ludGVycDJkIiksZj10KCIuL2ZpbmRfZW1wdGllcyIpLHA9dCgiLi9tYWtlX2JvdW5kX2FycmF5IiksZD10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGcodCl7Zm9yKHZhciBlPVtdLHI9dC5sZW5ndGgsbj0wO248cjtuKyspe3ZhciBpPXRbbl07aSE9PWQmJmUucHVzaChpKX1yZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixtLHYseSx4LGIsXyx3LFQsayxNLEE9YS5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLFM9YS5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLEU9bi50cmFjZUlzKGUsImNvbnRvdXIiKSxDPW4udHJhY2VJcyhlLCJoaXN0b2dyYW0iKSxMPW4udHJhY2VJcyhlLCJnbDJkIiksUD1FPyJiZXN0IjplLnpzbW9vdGg7aWYoQS5fbWluRHRpY2s9MCxTLl9taW5EdGljaz0wLEMpeT0oTT1zKHQsZSkpLm9yaWdfeCxyPU0ueCxtPU0ueDAsdj1NLmR4LHc9TS5vcmlnX3kseD1NLnksYj1NLnkwLF89TS5keSxUPU0uejtlbHNle3ZhciBJPWUuejtpLmlzQXJyYXkxRChJKT8oYyhlLEEsUywieCIsInkiLFsieiJdKSxyPWUuX3gseD1lLl95LEk9ZS5feik6KHk9ZS54P0EubWFrZUNhbGNkYXRhKGUsIngiKTpbXSx3PWUueT9TLm1ha2VDYWxjZGF0YShlLCJ5Iik6W10scj1vKGUsQSwieCIseSkseD1vKGUsUywieSIsdyksZS5feD1yLGUuX3k9eCksbT1lLngwLHY9ZS5keCxiPWUueTAsXz1lLmR5LFQ9dShJLGUsQSxTKX1mdW5jdGlvbiB6KHQpe1A9ZS5faW5wdXQuenNtb290aD1lLnpzbW9vdGg9ITEsaS53YXJuKCdjYW5ub3QgdXNlIHpzbW9vdGg6ICJmYXN0IjogJyt0KX1pZigoQS5yYW5nZWJyZWFrc3x8Uy5yYW5nZWJyZWFrcykmJihUPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10saT0tMSxhPTA7YTxyLmxlbmd0aDthKyspaWYoZVthXSE9PWQpe2krKyxuW2ldPVtdO2Zvcih2YXIgbz0wO288clthXS5sZW5ndGg7bysrKXRbb10hPT1kJiZuW2ldLnB1c2goclthXVtvXSl9cmV0dXJuIG59KHIseCxUKSxDfHwocj1nKHIpLHg9Zyh4KSxlLl94PXIsZS5feT14KSksQ3x8IUUmJiFlLmNvbm5lY3RnYXBzfHwoZS5fZW1wdHlwb2ludHM9ZihUKSxoKFQsZS5fZW1wdHlwb2ludHMpKSwiZmFzdCI9PT1QKWlmKCJsb2ciPT09QS50eXBlfHwibG9nIj09PVMudHlwZSl6KCJsb2cgYXhpcyBmb3VuZCIpO2Vsc2UgaWYoIUMpe2lmKHIubGVuZ3RoKXt2YXIgTz0ocltyLmxlbmd0aC0xXS1yWzBdKS8oci5sZW5ndGgtMSksRD1NYXRoLmFicyhPLzEwMCk7Zm9yKGs9MDtrPHIubGVuZ3RoLTE7aysrKWlmKE1hdGguYWJzKHJbaysxXS1yW2tdLU8pPkQpe3ooInggc2NhbGUgaXMgbm90IGxpbmVhciIpO2JyZWFrfX1pZih4Lmxlbmd0aCYmImZhc3QiPT09UCl7dmFyIFI9KHhbeC5sZW5ndGgtMV0teFswXSkvKHgubGVuZ3RoLTEpLEY9TWF0aC5hYnMoUi8xMDApO2ZvcihrPTA7azx4Lmxlbmd0aC0xO2srKylpZihNYXRoLmFicyh4W2srMV0teFtrXS1SKT5GKXt6KCJ5IHNjYWxlIGlzIG5vdCBsaW5lYXIiKTticmVha319fXZhciBCPWkubWF4Um93TGVuZ3RoKFQpLE49InNjYWxlZCI9PT1lLnh0eXBlPyIiOnIsaj1wKGUsTixtLHYsQixBKSxVPSJzY2FsZWQiPT09ZS55dHlwZT8iIjp4LFY9cChlLFUsYixfLFQubGVuZ3RoLFMpO0x8fChlLl9leHRyZW1lc1tBLl9pZF09YS5maW5kRXh0cmVtZXMoQSxqKSxlLl9leHRyZW1lc1tTLl9pZF09YS5maW5kRXh0cmVtZXMoUyxWKSk7dmFyIHE9e3g6aix5OlYsejpULHRleHQ6ZS5fdGV4dHx8ZS50ZXh0LGhvdmVydGV4dDplLl9ob3ZlcnRleHR8fGUuaG92ZXJ0ZXh0fTtpZihlLnhwZXJpb2RhbGlnbm1lbnQmJnkmJihxLm9yaWdfeD15KSxlLnlwZXJpb2RhbGlnbm1lbnQmJncmJihxLm9yaWdfeT13KSxOJiZOLmxlbmd0aD09PWoubGVuZ3RoLTEmJihxLnhDZW50ZXI9TiksVSYmVS5sZW5ndGg9PT1WLmxlbmd0aC0xJiYocS55Q2VudGVyPVUpLEMmJihxLnhSYW5nZXM9TS54UmFuZ2VzLHEueVJhbmdlcz1NLnlSYW5nZXMscS5wdHM9TS5wdHMpLEV8fGwodCxlLHt2YWxzOlQsY0xldHRlcjoieiJ9KSxFJiZlLmNvbnRvdXJzJiYiaGVhdG1hcCI9PT1lLmNvbnRvdXJzLmNvbG9yaW5nKXt2YXIgSD17dHlwZToiY29udG91ciI9PT1lLnR5cGU/ImhlYXRtYXAiOiJoaXN0b2dyYW0yZCIseGNhbGVuZGFyOmUueGNhbGVuZGFyLHljYWxlbmRhcjplLnljYWxlbmRhcn07cS54ZmlsbD1wKEgsTixtLHYsQixBKSxxLnlmaWxsPXAoSCxVLGIsXyxULmxlbmd0aCxTKX1yZXR1cm5bcV19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MjMsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjc5NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vaGlzdG9ncmFtMmQvY2FsYyI6MTA2OSwiLi9jbGVhbl8yZF9hcnJheSI6MTAzOCwiLi9jb252ZXJ0X2NvbHVtbl94eXoiOjEwNDAsIi4vZmluZF9lbXB0aWVzIjoxMDQyLCIuL2ludGVycDJkIjoxMDQ1LCIuL21ha2VfYm91bmRfYXJyYXkiOjEwNDZ9XSwxMDM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYyx1LGgsZjtmdW5jdGlvbiBwKHQpe2lmKG4odCkpcmV0dXJuK3R9aWYoZSYmZS50cmFuc3Bvc2Upe2ZvcihzPTAsaD0wO2g8dC5sZW5ndGg7aCsrKXM9TWF0aC5tYXgocyx0W2hdLmxlbmd0aCk7aWYoMD09PXMpcmV0dXJuITE7Yz1mdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9LHU9ZnVuY3Rpb24odCxlLHIpe3JldHVybih0W3JdfHxbXSlbZV19fWVsc2Ugcz10Lmxlbmd0aCxjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV0ubGVuZ3RofSx1PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odFtlXXx8W10pW3JdfTt2YXIgZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU9PT1hfHxyPT09YT9hOnUodCxlLHIpfTtmdW5jdGlvbiBnKHQpe2lmKGUmJiJjYXJwZXQiIT09ZS50eXBlJiYiY29udG91cmNhcnBldCIhPT1lLnR5cGUmJnQmJiJjYXRlZ29yeSI9PT10LnR5cGUmJmVbIl8iK3QuX2lkLmNoYXJBdCgwKV0ubGVuZ3RoKXt2YXIgcj10Ll9pZC5jaGFyQXQoMCksbj17fSxvPWVbIl8iK3IrIkNhdGVnb3J5TWFwIl18fGVbcl07Zm9yKGg9MDtoPG8ubGVuZ3RoO2grKyluW29baF1dPWg7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPW5bdC5fY2F0ZWdvcmllc1tlXV07cmV0dXJuIHIrMT9yOmF9fXJldHVybiBpLmlkZW50aXR5fXZhciBtPWcociksdj1nKG8pO28mJiJjYXRlZ29yeSI9PT1vLnR5cGUmJihzPW8uX2NhdGVnb3JpZXMubGVuZ3RoKTt2YXIgeT1uZXcgQXJyYXkocyk7Zm9yKGg9MDtoPHM7aCsrKWZvcihsPXImJiJjYXRlZ29yeSI9PT1yLnR5cGU/ci5fY2F0ZWdvcmllcy5sZW5ndGg6Yyh0LGgpLHlbaF09bmV3IEFycmF5KGwpLGY9MDtmPGw7ZisrKXlbaF1bZl09cChkKHQsdihoKSxtKGYpKSk7cmV0dXJuIHl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bWluOiJ6bWluIixtYXg6InptYXgifX0se31dLDEwNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGM9dC5fbGVuZ3RoLHU9ZS5tYWtlQ2FsY2RhdGEodCxvKSxoPXIubWFrZUNhbGNkYXRhKHQscyk7dT1hKHQsZSxvLHUpLGg9YSh0LHIscyxoKTt2YXIgZixwLGQsZyxtPXQudGV4dCx2PXZvaWQgMCE9PW0mJm4uaXNBcnJheTFEKG0pLHk9dC5ob3ZlcnRleHQseD12b2lkIDAhPT15JiZuLmlzQXJyYXkxRCh5KSxiPW4uZGlzdGluY3RWYWxzKHUpLF89Yi52YWxzLHc9bi5kaXN0aW5jdFZhbHMoaCksVD13LnZhbHMsaz1bXSxNPVQubGVuZ3RoLEE9Xy5sZW5ndGg7Zm9yKGY9MDtmPGwubGVuZ3RoO2YrKylrW2ZdPW4uaW5pdDJkQXJyYXkoTSxBKTt2JiYoZD1uLmluaXQyZEFycmF5KE0sQSkpLHgmJihnPW4uaW5pdDJkQXJyYXkoTSxBKSk7dmFyIFM9bi5pbml0MmRBcnJheShNLEEpO2ZvcihmPTA7ZjxjO2YrKylpZih1W2ZdIT09aSYmaFtmXSE9PWkpe3ZhciBFPW4uZmluZEJpbih1W2ZdK2IubWluRGlmZi8yLF8pLEM9bi5maW5kQmluKGhbZl0rdy5taW5EaWZmLzIsVCk7Zm9yKHA9MDtwPGwubGVuZ3RoO3ArKyl7dmFyIEw9dFtsW3BdXTtrW3BdW0NdW0VdPUxbZl0sU1tDXVtFXT1mfXYmJihkW0NdW0VdPW1bZl0pLHgmJihnW0NdW0VdPXlbZl0pfWZvcih0WyJfIitvXT1fLHRbIl8iK3NdPVQscD0wO3A8bC5sZW5ndGg7cCsrKXRbIl8iK2xbcF1dPWtbcF07diYmKHQuX3RleHQ9ZCkseCYmKHQuX2hvdmVydGV4dD1nKSxlJiYiY2F0ZWdvcnkiPT09ZS50eXBlJiYodFsiXyIrbysiQ2F0ZWdvcnlNYXAiXT1fLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NhdGVnb3JpZXNbdF19KSkpLHImJiJjYXRlZ29yeSI9PT1yLnR5cGUmJih0WyJfIitzKyJDYXRlZ29yeU1hcCJdPVQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gci5fY2F0ZWdvcmllc1t0XX0pKSksdC5fYWZ0ZXIyYmVmb3JlPVN9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjc5Nn1dLDEwNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL3h5el9kZWZhdWx0cyIpLGE9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxvPXQoIi4vc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pKHQsZSx1LGMpPyhhKHQsZSxjLHUpLHUoInRleHQiKSx1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIiksbyh0LGUsdSxjKSx1KCJob3Zlcm9uZ2FwcyIpLHUoImNvbm5lY3RnYXBzIixuLmlzQXJyYXkxRChlLnopJiYhMSE9PWUuenNtb290aCkscyh0LGUsYyx1LHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYyNSwiLi4vLi4vbGliIjo3NTAsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjoxMTc4LCIuL2F0dHJpYnV0ZXMiOjEwMzYsIi4vc3R5bGVfZGVmYXVsdHMiOjEwNDksIi4veHl6X2RlZmF1bHRzIjoxMDUwfV0sMTA0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5tYXhSb3dMZW5ndGg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG8scyxsLGMsdT1bXSxoPXt9LGY9W10scD10WzBdLGQ9W10sZz1bMCwwLDBdLG09bih0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihlPWQsZD1wLHA9dFtyKzFdfHxbXSxpPTA7aTxtO2krKyl2b2lkIDA9PT1kW2ldJiYoKHM9KHZvaWQgMCE9PWRbaS0xXT8xOjApKyh2b2lkIDAhPT1kW2krMV0/MTowKSsodm9pZCAwIT09ZVtpXT8xOjApKyh2b2lkIDAhPT1wW2ldPzE6MCkpPygwPT09ciYmcysrLDA9PT1pJiZzKysscj09PXQubGVuZ3RoLTEmJnMrKyxpPT09ZC5sZW5ndGgtMSYmcysrLHM8NCYmKGhbW3IsaV1dPVtyLGksc10pLHUucHVzaChbcixpLHNdKSk6Zi5wdXNoKFtyLGldKSk7Zm9yKDtmLmxlbmd0aDspe2ZvcihsPXt9LGM9ITEsbz1mLmxlbmd0aC0xO28+PTA7by0tKShzPSgoaFtbKHI9KGE9ZltvXSlbMF0pLTEsaT1hWzFdXV18fGcpWzJdKyhoW1tyKzEsaV1dfHxnKVsyXSsoaFtbcixpLTFdXXx8ZylbMl0rKGhbW3IsaSsxXV18fGcpWzJdKS8yMCkmJihsW2FdPVtyLGksc10sZi5zcGxpY2UobywxKSxjPSEwKTtpZighYyl0aHJvdyJmaW5kRW1wdGllcyBpdGVyYXRlZCB3aXRoIG5vIG5ldyBuZWlnaGJvcnMiO2ZvcihhIGluIGwpaFthXT1sW2FdLHUucHVzaChsW2FdKX1yZXR1cm4gdS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlWzJdLXRbMl19KSl9fSx7Ii4uLy4uL2xpYiI6NzUwfV0sMTA0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1LGgsZixwLGQ9dC5jZFswXSxnPWQudHJhY2UsbT10LnhhLHY9dC55YSx5PWQueCx4PWQueSxiPWQueixfPWQueENlbnRlcix3PWQueUNlbnRlcixUPWQuem1hc2ssaz1nLnpob3ZlcmZvcm1hdCxNPXksQT14O2lmKCExIT09dC5pbmRleCl7dHJ5e2Y9TWF0aC5yb3VuZCh0LmluZGV4WzFdKSxwPU1hdGgucm91bmQodC5pbmRleFswXSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgaS5lcnJvcigiRXJyb3IgaG92ZXJpbmcgb24gaGVhdG1hcCwgcG9pbnROdW1iZXIgbXVzdCBiZSBbcm93LGNvbF0sIGZvdW5kOiIsdC5pbmRleCl9aWYoZjwwfHxmPj1iWzBdLmxlbmd0aHx8cDwwfHxwPmIubGVuZ3RoKXJldHVybn1lbHNle2lmKG4uaW5ib3goZS15WzBdLGUteVt5Lmxlbmd0aC0xXSwwKT4wfHxuLmluYm94KHIteFswXSxyLXhbeC5sZW5ndGgtMV0sMCk+MClyZXR1cm47aWYoYyl7dmFyIFM7Zm9yKE09WzIqeVswXS15WzFdXSxTPTE7Uzx5Lmxlbmd0aDtTKyspTS5wdXNoKCh5W1NdK3lbUy0xXSkvMik7Zm9yKE0ucHVzaChbMip5W3kubGVuZ3RoLTFdLXlbeS5sZW5ndGgtMl1dKSxBPVsyKnhbMF0teFsxXV0sUz0xO1M8eC5sZW5ndGg7UysrKUEucHVzaCgoeFtTXSt4W1MtMV0pLzIpO0EucHVzaChbMip4W3gubGVuZ3RoLTFdLXhbeC5sZW5ndGgtMl1dKX1mPU1hdGgubWF4KDAsTWF0aC5taW4oTS5sZW5ndGgtMixpLmZpbmRCaW4oZSxNKSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihBLmxlbmd0aC0yLGkuZmluZEJpbihyLEEpKSl9dmFyIEUsQyxMPW0uYzJwKHlbZl0pLFA9bS5jMnAoeVtmKzFdKSxJPXYuYzJwKHhbcF0pLHo9di5jMnAoeFtwKzFdKTtjPyhFPWQub3JpZ194fHx5LEM9ZC5vcmlnX3l8fHgsUD1MLHU9RVtmXSx6PUksaD1DW3BdKTooRT1kLm9yaWdfeHx8X3x8eSxDPWQub3JpZ195fHx3fHx4LHU9Xz9FW2ZdOihFW2ZdK0VbZisxXSkvMixoPXc/Q1twXTooQ1twXStDW3ArMV0pLzIsbSYmImNhdGVnb3J5Ij09PW0udHlwZSYmKHU9eVtmXSksdiYmImNhdGVnb3J5Ij09PXYudHlwZSYmKGg9eFtwXSksZy56c21vb3RoJiYoTD1QPW0uYzJwKHUpLEk9ej12LmMycChoKSkpO3ZhciBPPWJbcF1bZl07aWYoVCYmIVRbcF1bZl0mJihPPXZvaWQgMCksdm9pZCAwIT09T3x8Zy5ob3Zlcm9uZ2Fwcyl7dmFyIEQ7QXJyYXkuaXNBcnJheShkLmhvdmVydGV4dCkmJkFycmF5LmlzQXJyYXkoZC5ob3ZlcnRleHRbcF0pP0Q9ZC5ob3ZlcnRleHRbcF1bZl06QXJyYXkuaXNBcnJheShkLnRleHQpJiZBcnJheS5pc0FycmF5KGQudGV4dFtwXSkmJihEPWQudGV4dFtwXVtmXSk7dmFyIFI9byhnKSxGPXt0eXBlOiJsaW5lYXIiLHJhbmdlOltSLm1pbixSLm1heF0saG92ZXJmb3JtYXQ6ayxfc2VwYXJhdG9yczptLl9zZXBhcmF0b3JzLF9udW1Gb3JtYXQ6bS5fbnVtRm9ybWF0fSxCPWEudGlja1RleHQoRixPLCJob3ZlciIpLnRleHQ7cmV0dXJuW2kuZXh0ZW5kRmxhdCh0LHtpbmRleDpnLl9hZnRlcjJiZWZvcmU/Zy5fYWZ0ZXIyYmVmb3JlW3BdW2ZdOltwLGZdLGRpc3RhbmNlOnQubWF4SG92ZXJEaXN0YW5jZSxzcGlrZURpc3RhbmNlOnQubWF4U3Bpa2VEaXN0YW5jZSx4MDpMLHgxOlAseTA6SSx5MTp6LHhMYWJlbFZhbDp1LHlMYWJlbFZhbDpoLHpMYWJlbFZhbDpPLHpMYWJlbDpCLHRleHQ6RH0pXX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTUsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5fV0sMTA0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp0KCIuL2NvbG9yYmFyIiksc3R5bGU6dCgiLi9zdHlsZSIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGVhdG1hcCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODEyLCIuL2F0dHJpYnV0ZXMiOjEwMzYsIi4vY2FsYyI6MTAzNywiLi9jb2xvcmJhciI6MTAzOSwiLi9kZWZhdWx0cyI6MTA0MSwiLi9ob3ZlciI6MTA0MywiLi9wbG90IjoxMDQ3LCIuL3N0eWxlIjoxMDQ4fV0sMTA0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPVtbLTEsMF0sWzEsMF0sWzAsLTFdLFswLDFdXTtmdW5jdGlvbiBhKHQpe3JldHVybi41LS4yNSpNYXRoLm1pbigxLC41KnQpfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuLGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHY9MDtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXtmb3IoYT0obj1lW3NdKVswXSxvPW5bMV0sZD10W2FdW29dLHA9MCxmPTAsbD0wO2w8NDtsKyspKHU9dFthKyhjPWlbbF0pWzBdXSkmJnZvaWQgMCE9PShoPXVbbytjWzFdXSkmJigwPT09cD9nPW09aDooZz1NYXRoLm1pbihnLGgpLG09TWF0aC5tYXgobSxoKSksZisrLHArPWgpO2lmKDA9PT1mKXRocm93Iml0ZXJhdGVJbnRlcnAyZCBvcmRlciBpcyB3cm9uZzogbm8gZGVmaW5lZCBuZWlnaGJvcnMiO3RbYV1bb109cC9mLHZvaWQgMD09PWQ/Zjw0JiYodj0xKToodFthXVtvXT0oMStyKSp0W2FdW29dLXIqZCxtPmcmJih2PU1hdGgubWF4KHYsTWF0aC5hYnModFthXVtvXS1kKS8obS1nKSkpKX1yZXR1cm4gdn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpPTE7Zm9yKG8odCxlKSxyPTA7cjxlLmxlbmd0aCYmIShlW3JdWzJdPDQpO3IrKyk7Zm9yKGU9ZS5zbGljZShyKSxyPTA7cjwxMDAmJmk+LjAxO3IrKylpPW8odCxlLGEoaSkpO3JldHVybiBpPi4wMSYmbi5sb2coImludGVycDJkIGRpZG4ndCBjb252ZXJnZSBxdWlja2x5IixpKSx0fX0seyIuLi8uLi9saWIiOjc1MH1dLDEwNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbCxjLHUsaD1bXSxmPW4udHJhY2VJcyh0LCJjb250b3VyIikscD1uLnRyYWNlSXModCwiaGlzdG9ncmFtIiksZD1uLnRyYWNlSXModCwiZ2wyZCIpO2lmKGkoZSkmJmUubGVuZ3RoPjEmJiFwJiYiY2F0ZWdvcnkiIT09cy50eXBlKXt2YXIgZz1lLmxlbmd0aDtpZighKGc8PW8pKXJldHVybiBmP2Uuc2xpY2UoMCxvKTplLnNsaWNlKDAsbysxKTtpZihmfHxkKWg9ZS5zbGljZSgwLG8pO2Vsc2UgaWYoMT09PW8paD1bZVswXS0uNSxlWzBdKy41XTtlbHNle2ZvcihoPVsxLjUqZVswXS0uNSplWzFdXSx1PTE7dTxnO3UrKyloLnB1c2goLjUqKGVbdS0xXStlW3VdKSk7aC5wdXNoKDEuNSplW2ctMV0tLjUqZVtnLTJdKX1pZihnPG8pe3ZhciBtPWhbaC5sZW5ndGgtMV0sdj1tLWhbaC5sZW5ndGgtMl07Zm9yKHU9Zzt1PG87dSsrKW0rPXYsaC5wdXNoKG0pfX1lbHNle3ZhciB5PXRbcy5faWQuY2hhckF0KDApKyJjYWxlbmRhciJdO2lmKHApbD1zLnIyYyhyLDAseSk7ZWxzZSBpZihpKGUpJiYxPT09ZS5sZW5ndGgpbD1lWzBdO2Vsc2UgaWYodm9pZCAwPT09cilsPTA7ZWxzZXtsPSgibG9nIj09PXMudHlwZT9zLmQyYzpzLnIyYykociwwLHkpfWZvcihjPWF8fDEsdT1mfHxkPzA6LS41O3U8bzt1KyspaC5wdXNoKGwrYyp1KX1yZXR1cm4gaH19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODJ9XSwxMDQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2UsbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1lLmxlbmd0aC0yLG49by5jb25zdHJhaW4oby5maW5kQmluKHQsZSksMCxyKSxpPWVbbl0sYT1lW24rMV0scz1vLmNvbnN0cmFpbihuKyh0LWkpLyhhLWkpLS41LDAsciksbD1NYXRoLnJvdW5kKHMpLGM9TWF0aC5hYnMocy1sKTtyZXR1cm4gcyYmcyE9PXImJmM/e2JpbjA6bCxmcmFjOmMsYmluMTpNYXRoLnJvdW5kKGwrYy8ocy1sKSl9OntiaW4wOmwsYmluMTpsLGZyYWM6MH19ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWUubGVuZ3RoLTEsbj1vLmNvbnN0cmFpbihvLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPSh0LWkpLyhlW24rMV0taSl8fDA7cmV0dXJuIGE8PTA/e2JpbjA6bixiaW4xOm4sZnJhYzowfTphPC41P3tiaW4wOm4sYmluMTpuKzEsZnJhYzphfTp7YmluMDpuKzEsYmluMTpuLGZyYWM6MS1hfX1mdW5jdGlvbiBoKHQsZSxyKXt0W2VdPXJbMF0sdFtlKzFdPXJbMV0sdFtlKzJdPXJbMl0sdFtlKzNdPU1hdGgucm91bmQoMjU1KnJbM10pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXt2YXIgcD1lLnhheGlzLGQ9ZS55YXhpcztvLm1ha2VUcmFjZUdyb3VwcyhmLHIsImhtIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHIsZixnLG0sdix5LHg9bi5zZWxlY3QodGhpcyksYj1lWzBdLF89Yi50cmFjZSx3PWIueixUPWIueCxrPWIueSxNPWIueENlbnRlcixBPWIueUNlbnRlcixTPWEudHJhY2VJcyhfLCJjb250b3VyIiksRT1TPyJiZXN0IjpfLnpzbW9vdGgsQz13Lmxlbmd0aCxMPW8ubWF4Um93TGVuZ3RoKHcpLFA9ITEsST0hMTtmb3IoeT0wO3ZvaWQgMD09PXImJnk8VC5sZW5ndGgtMTspcj1wLmMycChUW3ldKSx5Kys7Zm9yKHk9VC5sZW5ndGgtMTt2b2lkIDA9PT1mJiZ5PjA7KWY9cC5jMnAoVFt5XSkseS0tO2ZvcihmPHImJihnPWYsZj1yLHI9ZyxQPSEwKSx5PTA7dm9pZCAwPT09bSYmeTxrLmxlbmd0aC0xOyltPWQuYzJwKGtbeV0pLHkrKztmb3IoeT1rLmxlbmd0aC0xO3ZvaWQgMD09PXYmJnk+MDspdj1kLmMycChrW3ldKSx5LS07aWYodjxtJiYoZz1tLG09dix2PWcsST0hMCksUyYmKE09VCxBPWssVD1iLnhmaWxsLGs9Yi55ZmlsbCksImZhc3QiIT09RSl7dmFyIHo9ImJlc3QiPT09RT8wOi41O3I9TWF0aC5tYXgoLXoqcC5fbGVuZ3RoLHIpLGY9TWF0aC5taW4oKDEreikqcC5fbGVuZ3RoLGYpLG09TWF0aC5tYXgoLXoqZC5fbGVuZ3RoLG0pLHY9TWF0aC5taW4oKDEreikqZC5fbGVuZ3RoLHYpfXZhciBPPU1hdGgucm91bmQoZi1yKSxEPU1hdGgucm91bmQodi1tKTtpZihPPD0wfHxEPD0wKXt4LnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKFtdKS5leGl0KCkucmVtb3ZlKCl9ZWxzZXt2YXIgUixGOyJmYXN0Ij09PUU/KFI9TCxGPUMpOihSPU8sRj1EKTt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtCLndpZHRoPVIsQi5oZWlnaHQ9Rjt2YXIgTixqLFU9Qi5nZXRDb250ZXh0KCIyZCIpLFY9cyhfLHtub051bWVyaWNDaGVjazohMCxyZXR1cm5BcnJheTohMH0pOyJmYXN0Ij09PUU/KE49UD9mdW5jdGlvbih0KXtyZXR1cm4gTC0xLXR9Om8uaWRlbnRpdHksaj1JP2Z1bmN0aW9uKHQpe3JldHVybiBDLTEtdH06by5pZGVudGl0eSk6KE49ZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RyYWluKE1hdGgucm91bmQocC5jMnAoVFt0XSktciksMCxPKX0saj1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZChkLmMycChrW3RdKS1tKSwwLEQpfSk7dmFyIHEsSCxHLFksVyxaPWooMCksWD1bWixaXSxKPVA/MDoxLEs9ST8wOjEsUT0wLCQ9MCx0dD0wLGV0PTA7aWYoRSl7dmFyIHJ0LG50PTA7dHJ5e3J0PW5ldyBVaW50OEFycmF5KE8qRCo0KX1jYXRjaCh0KXtydD1uZXcgQXJyYXkoTypEKjQpfWlmKCJiZXN0Ij09PUUpe3ZhciBpdCxhdCxvdCxzdD1NfHxULGx0PUF8fGssY3Q9bmV3IEFycmF5KHN0Lmxlbmd0aCksdXQ9bmV3IEFycmF5KGx0Lmxlbmd0aCksaHQ9bmV3IEFycmF5KE8pLGZ0PU0/dTpjLHB0PUE/dTpjO2Zvcih5PTA7eTxzdC5sZW5ndGg7eSsrKWN0W3ldPU1hdGgucm91bmQocC5jMnAoc3RbeV0pLXIpO2Zvcih5PTA7eTxsdC5sZW5ndGg7eSsrKXV0W3ldPU1hdGgucm91bmQoZC5jMnAobHRbeV0pLW0pO2Zvcih5PTA7eTxPO3krKylodFt5XT1mdCh5LGN0KTtmb3IoSD0wO0g8RDtIKyspZm9yKGF0PXdbKGl0PXB0KEgsdXQpKS5iaW4wXSxvdD13W2l0LmJpbjFdLHk9MDt5PE87eSsrLG50Kz00KWgocnQsbnQsVz1rdChhdCxvdCxodFt5XSxpdCkpfWVsc2UgZm9yKEg9MDtIPEM7SCsrKWZvcihZPXdbSF0sWD1qKEgpLHk9MDt5PE87eSsrKVc9VHQoWVt5XSwxKSxoKHJ0LG50PTQqKFgqTytOKHkpKSxXKTt2YXIgZHQ9VS5jcmVhdGVJbWFnZURhdGEoTyxEKTt0cnl7ZHQuZGF0YS5zZXQocnQpfWNhdGNoKHQpe3ZhciBndD1kdC5kYXRhLG10PWd0Lmxlbmd0aDtmb3IoSD0wO0g8bXQ7SCsrKWd0W0hdPXJ0W0hdfVUucHV0SW1hZ2VEYXRhKGR0LDAsMCl9ZWxzZXt2YXIgdnQ9Xy54Z2FwLHl0PV8ueWdhcCx4dD1NYXRoLmZsb29yKHZ0LzIpLGJ0PU1hdGguZmxvb3IoeXQvMik7Zm9yKEg9MDtIPEM7SCsrKWlmKFk9d1tIXSxYLnJldmVyc2UoKSxYW0tdPWooSCsxKSxYWzBdIT09WFsxXSYmdm9pZCAwIT09WFswXSYmdm9pZCAwIT09WFsxXSlmb3IocT1bRz1OKDApLEddLHk9MDt5PEw7eSsrKXEucmV2ZXJzZSgpLHFbSl09Tih5KzEpLHFbMF0hPT1xWzFdJiZ2b2lkIDAhPT1xWzBdJiZ2b2lkIDAhPT1xWzFdJiYoVz1UdChZW3ldLChxWzFdLXFbMF0pKihYWzFdLVhbMF0pKSxVLmZpbGxTdHlsZT0icmdiYSgiK1cuam9pbigiLCIpKyIpIixVLmZpbGxSZWN0KHFbMF0reHQsWFswXStidCxxWzFdLXFbMF0tdnQsWFsxXS1YWzBdLXl0KSl9JD1NYXRoLnJvdW5kKCQvUSksdHQ9TWF0aC5yb3VuZCh0dC9RKSxldD1NYXRoLnJvdW5kKGV0L1EpO3ZhciBfdD1pKCJyZ2IoIiskKyIsIit0dCsiLCIrZXQrIikiKTt0Ll9obXBpeGNvdW50PSh0Ll9obXBpeGNvdW50fHwwKStRLHQuX2htbHVtY291bnQ9KHQuX2htbHVtY291bnR8fDApK1EqX3QuZ2V0THVtaW5hbmNlKCk7dmFyIHd0PXguc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoZSk7d3QuZW50ZXIoKS5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSksd3QuYXR0cih7aGVpZ2h0OkQsd2lkdGg6Tyx4OnIseTptLCJ4bGluazpocmVmIjpCLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9KX1mdW5jdGlvbiBUdCh0LGUpe2lmKHZvaWQgMCE9PXQpe3ZhciByPVYodCk7cmV0dXJuIHJbMF09TWF0aC5yb3VuZChyWzBdKSxyWzFdPU1hdGgucm91bmQoclsxXSksclsyXT1NYXRoLnJvdW5kKHJbMl0pLFErPWUsJCs9clswXSplLHR0Kz1yWzFdKmUsZXQrPXJbMl0qZSxyfXJldHVyblswLDAsMCwwXX1mdW5jdGlvbiBrdCh0LGUscixuKXt2YXIgaT10W3IuYmluMF07aWYodm9pZCAwPT09aSlyZXR1cm4gVHQodm9pZCAwLDEpO3ZhciBhLG89dFtyLmJpbjFdLHM9ZVtyLmJpbjBdLGw9ZVtyLmJpbjFdLGM9by1pfHwwLHU9cy1pfHwwO3JldHVybiBhPXZvaWQgMD09PW8/dm9pZCAwPT09bD8wOnZvaWQgMD09PXM/MioobC1pKToyKigyKmwtcy1pKS8zOnZvaWQgMD09PWw/dm9pZCAwPT09cz8wOjIqKDIqaS1vLXMpLzM6dm9pZCAwPT09cz8yKigyKmwtby1pKS8zOmwraS1vLXMsVHQoaStyLmZyYWMqYytuLmZyYWMqKHUrci5mcmFjKmEpKX19KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzI2LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcmVnaXN0cnkiOjg4MixkMzoxNjksdGlueWNvbG9yMjo1NDh9XSwxMDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmhtIGltYWdlIikuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50cmFjZS5vcGFjaXR5fSkpfX0se2QzOjE2OX1dLDEwNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXshMT09PXIoInpzbW9vdGgiKSYmKHIoInhnYXAiKSxyKCJ5Z2FwIikpLHIoInpob3ZlcmZvcm1hdCIpfX0se31dLDEwNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9ZSh0KTtyZXR1cm4ic2NhbGVkIj09PShyP2UodCsidHlwZSIsImFycmF5Iik6InNjYWxlZCIpJiYoZSh0KyIwIiksZSgiZCIrdCkpLHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdSxoLGY9cigieiIpO2lmKGw9bHx8IngiLGM9Y3x8InkiLHZvaWQgMD09PWZ8fCFmLmxlbmd0aClyZXR1cm4gMDtpZihpLmlzQXJyYXkxRCh0LnopKXt1PXIobCksaD1yKGMpO3ZhciBwPWkubWluUm93TGVuZ3RoKHUpLGQ9aS5taW5Sb3dMZW5ndGgoaCk7aWYoMD09PXB8fDA9PT1kKXJldHVybiAwO2UuX2xlbmd0aD1NYXRoLm1pbihwLGQsZi5sZW5ndGgpfWVsc2V7aWYodT1vKGwsciksaD1vKGMsciksIWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPSEwLGE9ITEsbz0hMSxzPTA7czx0Lmxlbmd0aDtzKyspe2lmKGU9dFtzXSwhaS5pc0FycmF5T3JUeXBlZEFycmF5KGUpKXtyPSExO2JyZWFrfWUubGVuZ3RoPjAmJihhPSEwKTtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKylpZihuKGVbbF0pKXtvPSEwO2JyZWFrfX1yZXR1cm4gciYmYSYmb30oZikpcmV0dXJuIDA7cigidHJhbnNwb3NlIiksZS5fbGVuZ3RoPW51bGx9cmV0dXJuImhlYXRtYXBnbCI9PT10LnR5cGV8fCJjb250b3VyZ2wiPT09dC50eXBlfHxhLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbbCxjXSxzKSwhMH19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Zvcih2YXIgbj10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPVsieiIsIngiLCJ4MCIsImR4IiwieSIsInkwIiwiZHkiLCJ0ZXh0IiwidHJhbnNwb3NlIiwieHR5cGUiLCJ5dHlwZSJdLGw9e30sYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgdT1zW2NdO2xbdV09blt1XX1sLnpzbW9vdGg9e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZhc3QiLCExXSxkZmx0OiJmYXN0IixlZGl0VHlwZToiY2FsYyJ9LGEobCxpKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpLGUuZXhwb3J0cz1vKGwsImNhbGMiLCJuZXN0ZWQiKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjIyLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjoxMDM2fV0sMTA1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1oZWF0bWFwMmQiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0iaGVhdG1hcGdsIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuekRhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuaWRUb0luZGV4PVtdLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLm9wdGlvbnM9e3pzbW9vdGg6ImZhc3QiLHo6W10seDpbXSx5OltdLHNoYXBlOlswLDBdLGNvbG9yTGV2ZWxzOlswXSxjb2xvclZhbHVlczpbMCwwLDAsMV19LHRoaXMuaGVhdG1hcD1uKHQuZ2xwbG90LHRoaXMub3B0aW9ucyksdGhpcy5oZWF0bWFwLl90cmFjZT10aGlzfXZhciBzPW8ucHJvdG90eXBlO3MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMscj1lLnNoYXBlLG49dC5wb2ludElkLGk9biVyWzBdLGE9TWF0aC5mbG9vcihuL3JbMF0pLG89bjtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDpbZS54W2ldLGUueVthXSxlLnpbb11dLHRleHRMYWJlbDp0aGlzLnRleHRMYWJlbHNbbl0sbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDpbYSxpXSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxzLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhpcy5pbmRleD10LmluZGV4LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm87dmFyIG49ci56O3RoaXMub3B0aW9ucy56PVtdLmNvbmNhdC5hcHBseShbXSxuKTt2YXIgbz1uWzBdLmxlbmd0aCxzPW4ubGVuZ3RoO3RoaXMub3B0aW9ucy5zaGFwZT1bbyxzXSx0aGlzLm9wdGlvbnMueD1yLngsdGhpcy5vcHRpb25zLnk9ci55LHRoaXMub3B0aW9ucy56c21vb3RoPXQuenNtb290aDt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jb2xvcnNjYWxlLHI9dC56bWluLG49dC56bWF4LGk9ZS5sZW5ndGgsbz1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoNCppKSxsPTA7bDxpO2wrKyl7dmFyIGM9ZVtsXSx1PWEoY1sxXSk7b1tsXT1yK2NbMF0qKG4tcik7Zm9yKHZhciBoPTA7aDw0O2grKylzWzQqbCtoXT11W2hdfXJldHVybntjb2xvckxldmVsczpvLGNvbG9yVmFsdWVzOnN9fSh0KTt0aGlzLm9wdGlvbnMuY29sb3JMZXZlbHM9bC5jb2xvckxldmVscyx0aGlzLm9wdGlvbnMuY29sb3JWYWx1ZXM9bC5jb2xvclZhbHVlcyx0aGlzLnRleHRMYWJlbHM9W10uY29uY2F0LmFwcGx5KFtdLHQudGV4dCksdGhpcy5oZWF0bWFwLnVwZGF0ZSh0aGlzLm9wdGlvbnMpO3ZhciBjLHUsaD10aGlzLnNjZW5lLnhheGlzLGY9dGhpcy5zY2VuZS55YXhpczshMT09PXQuenNtb290aCYmKGM9e3BwYWQ6ci54WzFdLXIueFswXX0sdT17cHBhZDpyLnlbMV0tci55WzBdfSksdC5fZXh0cmVtZXNbaC5faWRdPWkuZmluZEV4dHJlbWVzKGgsci54LGMpLHQuX2V4dHJlbWVzW2YuX2lkXT1pLmZpbmRFeHRyZW1lcyhmLHIueSx1KX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgbyh0LGUudWlkKTtyZXR1cm4gbi51cGRhdGUoZSxyKSxufX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NzMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksImdsLWhlYXRtYXAyZCI6MjY4fV0sMTA1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9aSh0LGUsbCxzKT8obCgidGV4dCIpLGwoInpzbW9vdGgiKSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjI1LCIuLi8uLi9saWIiOjc1MCwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiOjEwNTAsIi4vYXR0cmlidXRlcyI6MTA1MX1dLDEwNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksY2FsYzp0KCIuLi9oZWF0bWFwL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJoZWF0bWFwZ2wiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsMmQiKSxjYXRlZ29yaWVzOlsiZ2wiLCJnbDJkIiwiMmRNYXAiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDJkIjo4MzksIi4uL2hlYXRtYXAvY2FsYyI6MTAzNywiLi4vaGVhdG1hcC9jb2xvcmJhciI6MTAzOSwiLi9hdHRyaWJ1dGVzIjoxMDUxLCIuL2NvbnZlcnQiOjEwNTIsIi4vZGVmYXVsdHMiOjEwNTN9XSwxMDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi9iaW5fYXR0cmlidXRlcyIpLG89dCgiLi9jb25zdGFudHMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRleHQ6cyh7fSxuLnRleHQse30pLGhvdmVydGV4dDpzKHt9LG4uaG92ZXJ0ZXh0LHt9KSxvcmllbnRhdGlvbjpuLm9yaWVudGF0aW9uLGhpc3RmdW5jOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb3VudCIsInN1bSIsImF2ZyIsIm1pbiIsIm1heCJdLGRmbHQ6ImNvdW50IixlZGl0VHlwZToiY2FsYyJ9LGhpc3Rub3JtOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyIiLCJwZXJjZW50IiwicHJvYmFiaWxpdHkiLCJkZW5zaXR5IiwicHJvYmFiaWxpdHkgZGVuc2l0eSJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxjdW11bGF0aXZlOntlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmNyZWFzaW5nIiwiZGVjcmVhc2luZyJdLGRmbHQ6ImluY3JlYXNpbmciLGVkaXRUeXBlOiJjYWxjIn0sY3VycmVudGJpbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5jbHVkZSIsImV4Y2x1ZGUiLCJoYWxmIl0sZGZsdDoiaW5jbHVkZSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LG5iaW5zeDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0seGJpbnM6YSgieCIsITApLG5iaW5zeTp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0seWJpbnM6YSgieSIsITApLGF1dG9iaW54Ont2YWxUeXBlOiJib29sZWFuIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSxhdXRvYmlueTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIn0sYmluZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGVtcGxhdGU6aSh7fSx7a2V5czpvLmV2ZW50RGF0YUtleXN9KSxtYXJrZXI6bi5tYXJrZXIsb2Zmc2V0Z3JvdXA6bi5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDpuLmFsaWdubWVudGdyb3VwLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWQsX2RlcHJlY2F0ZWQ6e2JhcmRpcjpuLl9kZXByZWNhdGVkLmJhcmRpcn19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODc3LCIuLi9iYXIvYXR0cmlidXRlcyI6ODkyLCIuL2Jpbl9hdHRyaWJ1dGVzIjoxMDU3LCIuL2NvbnN0YW50cyI6MTA2MX1dLDEwNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MCxpPTA7aTxyO2krKyllW2ldPyh0W2ldLz1lW2ldLG4rPXRbaV0pOnRbaV09bnVsbDtyZXR1cm4gbn19LHt9XSwxMDU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybntzdGFydDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGVuZDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHNpemU6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDEwNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9e2NvdW50OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gclt0XSsrLDF9LHN1bTpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO3JldHVybiBuKGEpPyhhPU51bWJlcihhKSxyW3RdKz1hLGEpOjB9LGF2ZzpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPWlbZV07cmV0dXJuIG4obykmJihvPU51bWJlcihvKSxyW3RdKz1vLGFbdF0rKyksMH0sbWluOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPWlbZV07aWYobihhKSl7aWYoYT1OdW1iZXIoYSksIW4oclt0XSkpcmV0dXJuIHJbdF09YSxhO2lmKHJbdF0+YSl7dmFyIG89YS1yW3RdO3JldHVybiByW3RdPWEsb319cmV0dXJuIDB9LG1heDpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPGEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfX19LHsiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEwNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGk9bi5PTkVBVkdZRUFSLGE9bi5PTkVBVkdNT05USCxvPW4uT05FREFZLHM9bi5PTkVIT1VSLGw9bi5PTkVNSU4sYz1uLk9ORVNFQyx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikudGlja0luY3JlbWVudDtmdW5jdGlvbiBoKHQsZSxyLG4pe2lmKHQqZTw9MClyZXR1cm4gMS8wO2Zvcih2YXIgaT1NYXRoLmFicyhlLXQpLGE9ImRhdGUiPT09ci50eXBlLG89ZihpLGEpLHM9MDtzPDEwO3MrKyl7dmFyIGw9Zig4MCpvLGEpO2lmKG89PT1sKWJyZWFrO2lmKCFwKGwsdCxlLGEscixuKSlicmVhaztvPWx9cmV0dXJuIG99ZnVuY3Rpb24gZih0LGUpe3JldHVybiBlJiZ0PmM/dD5vP3Q+MS4xKmk/aTp0PjEuMSphP2E6bzp0PnM/czp0Pmw/bDpjOk1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKSl9ZnVuY3Rpb24gcCh0LGUscixuLGEscyl7aWYobiYmdD5vKXt2YXIgbD1kKGUsYSxzKSxjPWQocixhLHMpLHU9dD09PWk/MDoxO3JldHVybiBsW3VdIT09Y1t1XX1yZXR1cm4gTWF0aC5mbG9vcihyL3QpLU1hdGguZmxvb3IoZS90KT4uMX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj1lLmMyZCh0LGkscikuc3BsaXQoIi0iKTtyZXR1cm4iIj09PW5bMF0mJihuLnVuc2hpZnQoKSxuWzBdPSItIituWzBdKSxufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBzLGwsYz0tMS4xKmUsZj0tLjEqZSxwPXQtZixkPXJbMF0sZz1yWzFdLG09TWF0aC5taW4oaChkK2YsZCtwLG4sYSksaChnK2YsZytwLG4sYSkpLHY9TWF0aC5taW4oaChkK2MsZCtmLG4sYSksaChnK2MsZytmLG4sYSkpO2lmKG0+diYmdjxNYXRoLmFicyhnLWQpLzRlMz8ocz1tLGw9ITEpOihzPU1hdGgubWluKG0sdiksbD0hMCksImRhdGUiPT09bi50eXBlJiZzPm8pe3ZhciB5PXM9PT1pPzE6Nix4PXM9PT1pPyJNMTIiOiJNMSI7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG89bi5jMmQoZSxpLGEpLHM9by5pbmRleE9mKCItIix5KTtzPjAmJihvPW8uc3Vic3RyKDAscykpO3ZhciBjPW4uZDJjKG8sMCxhKTtpZihjPGUpe3ZhciBoPXUoYyx4LCExLGEpOyhjK2gpLzI8ZSt0JiYoYz1oKX1yZXR1cm4gciYmbD91KGMseCwhMCxhKTpjfX1yZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj1zKk1hdGgucm91bmQoZS9zKTtyZXR1cm4gbitzLzEwPGUmJm4rLjkqczxlK3QmJihuKz1zKSxyJiZsJiYobi09cyksbn19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OX1dLDEwNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbD10KCIuL2Jpbl9mdW5jdGlvbnMiKSxjPXQoIi4vbm9ybV9mdW5jdGlvbnMiKSx1PXQoIi4vYXZlcmFnZSIpLGg9dCgiLi9iaW5fbGFiZWxfdmFscyIpO2Z1bmN0aW9uIGYodCxlLHIscyxsKXt2YXIgYyx1LGgscCxkLGcsbSx2PXMrImJpbnMiLHk9dC5fZnVsbExheW91dCx4PWVbIl8iK3MrImJpbmdyb3VwIl0sYj15Ll9oaXN0b2dyYW1CaW5PcHRzW3hdLF89Im92ZXJsYXkiPT09eS5iYXJtb2RlLHc9ZnVuY3Rpb24odCl7cmV0dXJuIHIucjJjKHQsMCxwKX0sVD1mdW5jdGlvbih0KXtyZXR1cm4gci5jMnIodCwwLHApfSxrPSJkYXRlIj09PXIudHlwZT9mdW5jdGlvbih0KXtyZXR1cm4gdHx8MD09PXQ/aS5jbGVhbkRhdGUodCxudWxsLHApOm51bGx9OmZ1bmN0aW9uKHQpe3JldHVybiBuKHQpP051bWJlcih0KTpudWxsfTtmdW5jdGlvbiBNKHQsZSxyKXtlW3QrIkZvdW5kIl0/KGVbdF09ayhlW3RdKSxudWxsPT09ZVt0XSYmKGVbdF09clt0XSkpOihnW3RdPWVbdF09clt0XSxpLm5lc3RlZFByb3BlcnR5KHVbMF0sdisiLiIrdCkuc2V0KHJbdF0pKX1pZihlWyJfIitzKyJhdXRvQmluRmluaXNoZWQiXSlkZWxldGUgZVsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl07ZWxzZXt1PWIudHJhY2VzO3ZhciBBPVtdLFM9ITAsRT0hMSxDPSExO2ZvcihjPTA7Yzx1Lmxlbmd0aDtjKyspaWYoKGg9dVtjXSkudmlzaWJsZSl7dmFyIEw9Yi5kaXJzW2NdO2Q9aFsiXyIrTCsicG9zMCJdPXIubWFrZUNhbGNkYXRhKGgsTCksQT1pLmNvbmNhdChBLGQpLGRlbGV0ZSBoWyJfIitzKyJhdXRvQmluRmluaXNoZWQiXSwhMD09PWUudmlzaWJsZSYmKFM/Uz0hMTooZGVsZXRlIGguX2F1dG9CaW4saFsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl09MSksYS50cmFjZUlzKGgsIjJkTWFwIikmJihFPSEwKSwiaGlzdG9ncmFtMmRjb250b3VyIj09PWgudHlwZSYmKEM9ITApKX1wPXVbMF1bcysiY2FsZW5kYXIiXTt2YXIgUD1vLmF1dG9CaW4oQSxyLGIubmJpbnMsRSxwLGIuc2l6ZUZvdW5kJiZiLnNpemUpLEk9dVswXS5fYXV0b0Jpbj17fTtpZihnPUlbYi5kaXJzWzBdXT17fSxDJiYoYi5zaXplfHwoUC5zdGFydD1UKG8udGlja0luY3JlbWVudCh3KFAuc3RhcnQpLFAuc2l6ZSwhMCxwKSkpLHZvaWQgMD09PWIuZW5kJiYoUC5lbmQ9VChvLnRpY2tJbmNyZW1lbnQodyhQLmVuZCksUC5zaXplLCExLHApKSkpLF8mJiFhLnRyYWNlSXMoZSwiMmRNYXAiKSYmMD09PVAuX2RhdGFTcGFuJiYiY2F0ZWdvcnkiIT09ci50eXBlJiYibXVsdGljYXRlZ29yeSIhPT1yLnR5cGUpe2lmKGwpcmV0dXJuW1AsZCwhMF07UD1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHMsbCxjPXQuX2Z1bGxMYXlvdXQsdT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnhheGlzLG49ZS55YXhpcyxpPWUub3JpZW50YXRpb24sYT1bXSxvPXQuX2Z1bGxEYXRhLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTsiaGlzdG9ncmFtIj09PWwudHlwZSYmITA9PT1sLnZpc2libGUmJmwub3JpZW50YXRpb249PT1pJiZsLnhheGlzPT09ciYmbC55YXhpcz09PW4mJmEucHVzaChsKX1yZXR1cm4gYX0odCxlKSxoPSExLHA9MS8wLGQ9W2VdO2ZvcihvPTA7bzx1Lmxlbmd0aDtvKyspaWYoKHM9dVtvXSk9PT1lKWg9ITA7ZWxzZSBpZihoKXt2YXIgZz1mKHQscyxyLG4sITApLG09Z1swXSx2PWdbMl07c1siXyIrbisiYXV0b0JpbkZpbmlzaGVkIl09MSxzWyJfIituKyJwb3MwIl09Z1sxXSx2P2QucHVzaChzKTpwPU1hdGgubWluKHAsbS5zaXplKX1lbHNlIGw9Yy5faGlzdG9ncmFtQmluT3B0c1tzWyJfIituKyJiaW5ncm91cCJdXSxwPU1hdGgubWluKHAsbC5zaXplfHxzW2FdLnNpemUpO3ZhciB5PW5ldyBBcnJheShkLmxlbmd0aCk7Zm9yKG89MDtvPGQubGVuZ3RoO28rKylmb3IodmFyIHg9ZFtvXVsiXyIrbisicG9zMCJdLGI9MDtiPHgubGVuZ3RoO2IrKylpZih2b2lkIDAhPT14W2JdKXt5W29dPXhbYl07YnJlYWt9aXNGaW5pdGUocCl8fChwPWkuZGlzdGluY3RWYWxzKHkpLm1pbkRpZmYpO2ZvcihvPTA7bzxkLmxlbmd0aDtvKyspe3ZhciBfPShzPWRbb10pW24rImNhbGVuZGFyIl0sdz17c3RhcnQ6ci5jMnIoeVtvXS1wLzIsMCxfKSxlbmQ6ci5jMnIoeVtvXStwLzIsMCxfKSxzaXplOnB9O3MuX2lucHV0W2FdPXNbYV09dywobD1jLl9oaXN0b2dyYW1CaW5PcHRzW3NbIl8iK24rImJpbmdyb3VwIl1dKSYmaS5leHRlbmRGbGF0KGwsdyl9cmV0dXJuIGVbYV19KHQsZSxyLHMsdil9KG09aC5jdW11bGF0aXZlfHx7fSkuZW5hYmxlZCYmImluY2x1ZGUiIT09bS5jdXJyZW50YmluJiYoImRlY3JlYXNpbmciPT09bS5kaXJlY3Rpb24/UC5zdGFydD1UKG8udGlja0luY3JlbWVudCh3KFAuc3RhcnQpLFAuc2l6ZSwhMCxwKSk6UC5lbmQ9VChvLnRpY2tJbmNyZW1lbnQodyhQLmVuZCksUC5zaXplLCExLHApKSksYi5zaXplPVAuc2l6ZSxiLnNpemVGb3VuZHx8KGcuc2l6ZT1QLnNpemUsaS5uZXN0ZWRQcm9wZXJ0eSh1WzBdLHYrIi5zaXplIikuc2V0KFAuc2l6ZSkpLE0oInN0YXJ0IixiLFApLE0oImVuZCIsYixQKX1kPWVbIl8iK3MrInBvczAiXSxkZWxldGUgZVsiXyIrcysicG9zMCJdO3ZhciB6PWUuX2lucHV0W3ZdfHx7fSxPPWkuZXh0ZW5kRmxhdCh7fSxiKSxEPWIuc3RhcnQsUj1yLnIybCh6LnN0YXJ0KSxGPXZvaWQgMCE9PVI7aWYoKGIuc3RhcnRGb3VuZHx8RikmJlIhPT1yLnIybChEKSl7dmFyIEI9Rj9SOmkuYWdnTnVtcyhNYXRoLm1pbixudWxsLGQpLE49e3R5cGU6ImNhdGVnb3J5Ij09PXIudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlPyJsaW5lYXIiOnIudHlwZSxyMmw6ci5yMmwsZHRpY2s6Yi5zaXplLHRpY2swOkQsY2FsZW5kYXI6cCxyYW5nZTpbQixvLnRpY2tJbmNyZW1lbnQoQixiLnNpemUsITEscCldLm1hcChyLmwycil9LGo9by50aWNrRmlyc3QoTik7aj5yLnIybChCKSYmKGo9by50aWNrSW5jcmVtZW50KGosYi5zaXplLCEwLHApKSxPLnN0YXJ0PXIubDJyKGopLEZ8fGkubmVzdGVkUHJvcGVydHkoZSx2KyIuc3RhcnQiKS5zZXQoTy5zdGFydCl9dmFyIFU9Yi5lbmQsVj1yLnIybCh6LmVuZCkscT12b2lkIDAhPT1WO2lmKChiLmVuZEZvdW5kfHxxKSYmViE9PXIucjJsKFUpKXt2YXIgSD1xP1Y6aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsZCk7Ty5lbmQ9ci5sMnIoSCkscXx8aS5uZXN0ZWRQcm9wZXJ0eShlLHYrIi5zdGFydCIpLnNldChPLmVuZCl9dmFyIEc9ImF1dG9iaW4iK3M7cmV0dXJuITE9PT1lLl9pbnB1dFtHXSYmKGUuX2lucHV0W3ZdPWkuZXh0ZW5kRmxhdCh7fSxlW3ZdfHx7fSksZGVsZXRlIGUuX2lucHV0W0ddLGRlbGV0ZSBlW0ddKSxbTyxkXX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcixhLHAsZCxnPVtdLG09W10sdj1vLmdldEZyb21JZCh0LCJoIj09PWUub3JpZW50YXRpb24/ZS55YXhpczplLnhheGlzKSx5PSJoIj09PWUub3JpZW50YXRpb24/InkiOiJ4Iix4PXt4OiJ5Iix5OiJ4In1beV0sYj1lW3krImNhbGVuZGFyIl0sXz1lLmN1bXVsYXRpdmUsdz1mKHQsZSx2LHkpLFQ9d1swXSxrPXdbMV0sTT0ic3RyaW5nIj09dHlwZW9mIFQuc2l6ZSxBPVtdLFM9TT9BOlQsRT1bXSxDPVtdLEw9W10sUD0wLEk9ZS5oaXN0bm9ybSx6PWUuaGlzdGZ1bmMsTz0tMSE9PUkuaW5kZXhPZigiZGVuc2l0eSIpO18uZW5hYmxlZCYmTyYmKEk9SS5yZXBsYWNlKC8gP2RlbnNpdHkkLywiIiksTz0hMSk7dmFyIEQsUj0ibWF4Ij09PXp8fCJtaW4iPT09ej9udWxsOjAsRj1sLmNvdW50LEI9Y1tJXSxOPSExLGo9ZnVuY3Rpb24odCl7cmV0dXJuIHYucjJjKHQsMCxiKX07Zm9yKGkuaXNBcnJheU9yVHlwZWRBcnJheShlW3hdKSYmImNvdW50IiE9PXomJihEPWVbeF0sTj0iYXZnIj09PXosRj1sW3pdKSxyPWooVC5zdGFydCkscD1qKFQuZW5kKSsoci1vLnRpY2tJbmNyZW1lbnQocixULnNpemUsITEsYikpLzFlNjtyPHAmJmcubGVuZ3RoPDFlNiYmKGE9by50aWNrSW5jcmVtZW50KHIsVC5zaXplLCExLGIpLGcucHVzaCgocithKS8yKSxtLnB1c2goUiksTC5wdXNoKFtdKSxBLnB1c2gociksTyYmRS5wdXNoKDEvKGEtcikpLE4mJkMucHVzaCgwKSwhKGE8PXIpKTspcj1hO0EucHVzaChyKSxNfHwiZGF0ZSIhPT12LnR5cGV8fChTPXtzdGFydDpqKFMuc3RhcnQpLGVuZDpqKFMuZW5kKSxzaXplOlMuc2l6ZX0pLHQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzfHwodC5fZnVsbExheW91dC5fcm91bmRGbk9wdHM9e30pO3ZhciBVPWVbIl8iK3krImJpbmdyb3VwIl0sVj17bGVmdEdhcDoxLzAscmlnaHRHYXA6MS8wfTtVJiYodC5fZnVsbExheW91dC5fcm91bmRGbk9wdHNbVV18fCh0Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c1tVXT1WKSxWPXQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzW1VdKTt2YXIgcSxIPW0ubGVuZ3RoLEc9ITAsWT1WLmxlZnRHYXAsVz1WLnJpZ2h0R2FwLFo9e307Zm9yKHI9MDtyPGsubGVuZ3RoO3IrKyl7dmFyIFg9a1tyXTsoZD1pLmZpbmRCaW4oWCxTKSk+PTAmJmQ8SCYmKFArPUYoZCxyLG0sRCxDKSxHJiZMW2RdLmxlbmd0aCYmWCE9PWtbTFtkXVswXV0mJihHPSExKSxMW2RdLnB1c2gociksWltyXT1kLFk9TWF0aC5taW4oWSxYLUFbZF0pLFc9TWF0aC5taW4oVyxBW2QrMV0tWCkpfVYubGVmdEdhcD1ZLFYucmlnaHRHYXA9VyxHfHwocT1mdW5jdGlvbihlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzW1VdO3JldHVybiBoKG4ubGVmdEdhcCxuLnJpZ2h0R2FwLEEsdixiKShlLHIpfX0pLE4mJihQPXUobSxDKSksQiYmQihtLFAsRSksXy5lbmFibGVkJiZmdW5jdGlvbih0LGUscil7dmFyIG4saSxhO2Z1bmN0aW9uIG8oZSl7YT10W2VdLHRbZV0vPTJ9ZnVuY3Rpb24gcyhlKXtpPXRbZV0sdFtlXT1hK2kvMixhKz1pfWlmKCJoYWxmIj09PXIpaWYoImluY3JlYXNpbmciPT09ZSlmb3IobygwKSxuPTE7bjx0Lmxlbmd0aDtuKyspcyhuKTtlbHNlIGZvcihvKHQubGVuZ3RoLTEpLG49dC5sZW5ndGgtMjtuPj0wO24tLSlzKG4pO2Vsc2UgaWYoImluY3JlYXNpbmciPT09ZSl7Zm9yKG49MTtuPHQubGVuZ3RoO24rKyl0W25dKz10W24tMV07ImV4Y2x1ZGUiPT09ciYmKHQudW5zaGlmdCgwKSx0LnBvcCgpKX1lbHNle2ZvcihuPXQubGVuZ3RoLTI7bj49MDtuLS0pdFtuXSs9dFtuKzFdOyJleGNsdWRlIj09PXImJih0LnB1c2goMCksdC5zaGlmdCgpKX19KG0sXy5kaXJlY3Rpb24sXy5jdXJyZW50YmluKTt2YXIgSj1NYXRoLm1pbihnLmxlbmd0aCxtLmxlbmd0aCksSz1bXSxRPTAsJD1KLTE7Zm9yKHI9MDtyPEo7cisrKWlmKG1bcl0pe1E9cjticmVha31mb3Iocj1KLTE7cj49UTtyLS0paWYobVtyXSl7JD1yO2JyZWFrfWZvcihyPVE7cjw9JDtyKyspaWYobihnW3JdKSYmbihtW3JdKSl7dmFyIHR0PXtwOmdbcl0sczptW3JdLGI6MH07Xy5lbmFibGVkfHwodHQucHRzPUxbcl0sRz90dC5waDA9dHQucGgxPUxbcl0ubGVuZ3RoP2tbTFtyXVswXV06Z1tyXTooZS5fY29tcHV0ZVBoPSEwLHR0LnBoMD1xKEFbcl0pLHR0LnBoMT1xKEFbcisxXSwhMCkpKSxLLnB1c2godHQpfXJldHVybiAxPT09Sy5sZW5ndGgmJihLWzBdLndpZHRoMT1vLnRpY2tJbmNyZW1lbnQoS1swXS5wLFQuc2l6ZSwhMSxiKS1LWzBdLnApLHMoSyxlKSxpLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykmJmkudGFnU2VsZWN0ZWQoSyxlLFopLEt9LGNhbGNBbGxBdXRvQmluczpmfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSI6ODkxLCIuL2F2ZXJhZ2UiOjEwNTYsIi4vYmluX2Z1bmN0aW9ucyI6MTA1OCwiLi9iaW5fbGFiZWxfdmFscyI6MTA1OSwiLi9ub3JtX2Z1bmN0aW9ucyI6MTA2NywiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEwNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOlsiYmluTnVtYmVyIl19fSx7fV0sMTA2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzLG89dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlR3JvdXBpbmdEZWZhdWx0cyxzPW4ubmVzdGVkUHJvcGVydHksbD1pLmdldEF4aXNHcm91cCxjPVt7YVN0cjp7eDoieGJpbnMuc3RhcnQiLHk6InliaW5zLnN0YXJ0In0sbmFtZToic3RhcnQifSx7YVN0cjp7eDoieGJpbnMuZW5kIix5OiJ5Ymlucy5lbmQifSxuYW1lOiJlbmQifSx7YVN0cjp7eDoieGJpbnMuc2l6ZSIseToieWJpbnMuc2l6ZSJ9LG5hbWU6InNpemUifSx7YVN0cjp7eDoibmJpbnN4Iix5OiJuYmluc3kifSxuYW1lOiJuYmlucyJ9XSx1PVsieCIsInkiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixoLGYscCxkLGcsbSx2PWUuX2hpc3RvZ3JhbUJpbk9wdHM9e30seT1bXSx4PXt9LGI9W107ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBuLmNvZXJjZShyLl9pbnB1dCxyLHIuX21vZHVsZS5hdHRyaWJ1dGVzLHQsZSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4idiI9PT10Lm9yaWVudGF0aW9uPyJ4IjoieSJ9ZnVuY3Rpb24gVCh0LHIsYSl7dmFyIG89dC51aWQrIl9fIithO3J8fChyPW8pO3ZhciBzPWZ1bmN0aW9uKHQscil7cmV0dXJuIGkuZ2V0RnJvbVRyYWNlKHtfZnVsbExheW91dDplfSx0LHIpLnR5cGV9KHQsYSksbD10W2ErImNhbGVuZGFyIl18fCIiLGM9dltyXSx1PSEwO2MmJihzPT09Yy5heFR5cGUmJmw9PT1jLmNhbGVuZGFyPyh1PSExLGMudHJhY2VzLnB1c2godCksYy5kaXJzLnB1c2goYSkpOihyPW8scyE9PWMuYXhUeXBlJiZuLndhcm4oWyJBdHRlbXB0ZWQgdG8gZ3JvdXAgdGhlIGJpbnMgb2YgdHJhY2UiLHQuaW5kZXgsInNldCBvbiBhIiwidHlwZToiK3MsImF4aXMiLCJ3aXRoIGJpbnMgb24iLCJ0eXBlOiIrYy5heFR5cGUsImF4aXMuIl0uam9pbigiICIpKSxsIT09Yy5jYWxlbmRhciYmbi53YXJuKFsiQXR0ZW1wdGVkIHRvIGdyb3VwIHRoZSBiaW5zIG9mIHRyYWNlIix0LmluZGV4LCJzZXQgd2l0aCBhIixsLCJjYWxlbmRhciIsIndpdGggYmlucyIsYy5jYWxlbmRhcj8ib24gYSAiK2MuY2FsZW5kYXIrIiBjYWxlbmRhciI6IncvbyBhIHNldCBjYWxlbmRhciJdLmpvaW4oIiAiKSkpKSx1JiYodltyXT17dHJhY2VzOlt0XSxkaXJzOlthXSxheFR5cGU6cyxjYWxlbmRhcjp0W2ErImNhbGVuZGFyIl18fCIifSksdFsiXyIrYSsiYmluZ3JvdXAiXT1yfWZvcihkPTA7ZDx0Lmxlbmd0aDtkKyspcj10W2RdLGEociwiaGlzdG9ncmFtIikmJih5LnB1c2gociksZGVsZXRlIHIuX3hhdXRvQmluRmluaXNoZWQsZGVsZXRlIHIuX3lhdXRvQmluRmluaXNoZWQsYShyLCIyZE1hcCIpfHxvKHIuX2lucHV0LHIsZSxfKSk7dmFyIGs9ZS5fYWxpZ25tZW50T3B0c3x8e307Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKyl7aWYocj15W2RdLGY9IiIsIWEociwiMmRNYXAiKSl7aWYocD13KHIpLCJncm91cCI9PT1lLmJhcm1vZGUmJnIuYWxpZ25tZW50Z3JvdXApe3ZhciBNPXJbcCsiYXhpcyJdLEE9bChlLE0pK3Iub3JpZW50YXRpb247KGtbQV18fHt9KVtyLmFsaWdubWVudGdyb3VwXSYmKGY9QSl9Znx8Im92ZXJsYXkiPT09ZS5iYXJtb2RlfHwoZj1sKGUsci54YXhpcykrbChlLHIueWF4aXMpK3cocikpfWY/KHhbZl18fCh4W2ZdPVtdKSx4W2ZdLnB1c2gocikpOmIucHVzaChyKX1mb3IoZiBpbiB4KWlmKDEhPT0oaD14W2ZdKS5sZW5ndGgpe3ZhciBTPSExO2ZvcihkPTA7ZDxoLmxlbmd0aDtkKyspe3I9aFtkXSxTPV8oImJpbmdyb3VwIik7YnJlYWt9Zm9yKGY9U3x8ZixkPTA7ZDxoLmxlbmd0aDtkKyspe3ZhciBFPShyPWhbZF0pLl9pbnB1dC5iaW5ncm91cDtFJiZFIT09ZiYmbi53YXJuKFsiVHJhY2UiLHIuaW5kZXgsIm11c3QgbWF0Y2giLCJ3aXRoaW4gYmluZ3JvdXAiLGYrIi4iLCJJZ25vcmluZyBpdHMgYmluZ3JvdXA6IixFLCJzZXR0aW5nLiJdLmpvaW4oIiAiKSksci5iaW5ncm91cD1mLFQocixmLHcocikpfX1lbHNlIGIucHVzaChoWzBdKTtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKXtyPWJbZF07dmFyIEM9XygiYmluZ3JvdXAiKTtpZihhKHIsIjJkTWFwIikpZm9yKG09MDttPDI7bSsrKXt2YXIgTD1fKChwPXVbbV0pKyJiaW5ncm91cCIsQz9DKyJfXyIrcDpudWxsKTtUKHIsTCxwKX1lbHNlIFQocixDLHcocikpfWZvcihmIGluIHYpe3ZhciBQPXZbZl07Zm9yKGg9UC50cmFjZXMsZz0wO2c8Yy5sZW5ndGg7ZysrKXt2YXIgSSx6LE89Y1tnXSxEPU8ubmFtZTtpZigibmJpbnMiIT09RHx8IVAuc2l6ZUZvdW5kKXtmb3IoZD0wO2Q8aC5sZW5ndGg7ZCsrKXtpZihyPWhbZF0scD1QLmRpcnNbZF0sST1PLmFTdHJbcF0sdm9pZCAwIT09cyhyLl9pbnB1dCxJKS5nZXQoKSl7UFtEXT1fKEkpLFBbRCsiRm91bmQiXT0hMDticmVha30oej0oci5fYXV0b0Jpbnx8e30pW3BdfHx7fSlbRF0mJnMocixJKS5zZXQoeltEXSl9aWYoInN0YXJ0Ij09PUR8fCJlbmQiPT09RClmb3IoO2Q8aC5sZW5ndGg7ZCsrKShyPWhbZF0pWyJfIitwKyJiaW5ncm91cCJdJiZfKEksKHo9KHIuX2F1dG9CaW58fHt9KVtwXXx8e30pW0RdKTsibmJpbnMiIT09RHx8UC5zaXplRm91bmR8fFAubmJpbnNGb3VuZHx8KHI9aFswXSxQW0RdPV8oSSkpfX19fX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MDIsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL2Jhci9kZWZhdWx0cyI6ODk2fV0sMTA2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxzLHIsbil9dmFyIHU9YygieCIpLGg9YygieSIpO2MoImN1bXVsYXRpdmUuZW5hYmxlZCIpJiYoYygiY3VtdWxhdGl2ZS5kaXJlY3Rpb24iKSxjKCJjdW11bGF0aXZlLmN1cnJlbnRiaW4iKSksYygidGV4dCIpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKTt2YXIgZj1jKCJvcmllbnRhdGlvbiIsaCYmIXU/ImgiOiJ2IikscD0idiI9PT1mPyJ4IjoieSIsZD0idiI9PT1mPyJ5IjoieCIsZz11JiZoP01hdGgubWluKGkubWluUm93TGVuZ3RoKHUpJiZpLm1pblJvd0xlbmd0aChoKSk6aS5taW5Sb3dMZW5ndGgoZVtwXXx8W10pO2lmKGcpe2UuX2xlbmd0aD1nLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxsKSxlW2RdJiZjKCJoaXN0ZnVuYyIpLGMoImhpc3Rub3JtIiksYygiYXV0b2JpbiIrcCksbyh0LGUsYyxyLGwpLGkuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGMpO3ZhciBtPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3Isdj1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt2KHQsZSxtfHxhLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLHYodCxlLG18fGEuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6OTA3LCIuL2F0dHJpYnV0ZXMiOjEwNTV9XSwxMDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwiekxhYmVsVmFsImluIGUmJih0Lno9ZS56TGFiZWxWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLCEoci5jdW11bGF0aXZlfHx7fSkuZW5hYmxlZCl7dmFyIGEsbz1BcnJheS5pc0FycmF5KGkpP25bMF0ucHRzW2lbMF1dW2lbMV1dOm5baV0ucHRzO2lmKHQucG9pbnROdW1iZXJzPW8sdC5iaW5OdW1iZXI9dC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludEluZGV4LHIuX2luZGV4VG9Qb2ludHMpe2E9W107Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspYT1hLmNvbmNhdChyLl9pbmRleFRvUG9pbnRzW29bc11dKX1lbHNlIGE9bzt0LnBvaW50SW5kaWNlcz1hfXJldHVybiB0fX0se31dLDEwNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJQb2ludHMsaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8pe3ZhciBzPSh0PW9bMF0pLmNkW3QuaW5kZXhdLGw9dC5jZFswXS50cmFjZTtpZighbC5jdW11bGF0aXZlLmVuYWJsZWQpe3ZhciBjPSJoIj09PWwub3JpZW50YXRpb24/InkiOiJ4Ijt0W2MrIkxhYmVsIl09aSh0W2MrImEiXSxzLnBoMCxzLnBoMSl9cmV0dXJuIG99fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuLi9iYXIvaG92ZXIiOjg5OX1dLDEwNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi4vYmFyL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi4vYmFyL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi4vYmFyL3Bsb3QiKS5wbG90LGxheWVyTmFtZToiYmFybGF5ZXIiLHN0eWxlOnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi4vYmFyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxzZWxlY3RQb2ludHM6dCgiLi4vYmFyL3NlbGVjdCIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGlzdG9ncmFtIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJiYXIiLCJoaXN0b2dyYW0iLCJvcmllbnRlZCIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODEyLCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyI6ODk1LCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXMiOjkwMSwiLi4vYmFyL2xheW91dF9kZWZhdWx0cyI6OTAyLCIuLi9iYXIvcGxvdCI6OTAzLCIuLi9iYXIvc2VsZWN0Ijo5MDQsIi4uL2Jhci9zdHlsZSI6OTA2LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTE3NiwiLi9hdHRyaWJ1dGVzIjoxMDU1LCIuL2NhbGMiOjEwNjAsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjEwNjIsIi4vZGVmYXVsdHMiOjEwNjMsIi4vZXZlbnRfZGF0YSI6MTA2NCwiLi9ob3ZlciI6MTA2NX1dLDEwNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwZXJjZW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MTAwL2UsaT0wO2k8cjtpKyspdFtpXSo9bn0scHJvYmFiaWxpdHk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspdFtuXS89ZX0sZGVuc2l0eTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuPW58fDE7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdKm59LCJwcm9iYWJpbGl0eSBkZW5zaXR5IjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuJiYoZS89bik7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdL2V9fX0se31dLDEwNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGlzdG9ncmFtL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlcyIpLGE9dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1jKHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxoaXN0bm9ybTpuLmhpc3Rub3JtLGhpc3RmdW5jOm4uaGlzdGZ1bmMsbmJpbnN4Om4ubmJpbnN4LHhiaW5zOmkoIngiKSxuYmluc3k6bi5uYmluc3kseWJpbnM6aSgieSIpLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSxiaW5ncm91cDpjKHt9LG4uYmluZ3JvdXAse30pLHhiaW5ncm91cDpjKHt9LG4uYmluZ3JvdXAse30pLHliaW5ncm91cDpjKHt9LG4uYmluZ3JvdXAse30pLHhnYXA6YS54Z2FwLHlnYXA6YS55Z2FwLHpzbW9vdGg6YS56c21vb3RoLHpob3ZlcmZvcm1hdDphLnpob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOnMoe30se2tleXM6InoifSksc2hvd2xlZ2VuZDpjKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSxsKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzk1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NzcsIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6MTAzNiwiLi4vaGlzdG9ncmFtL2F0dHJpYnV0ZXMiOjEwNTUsIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlcyI6MTA1N31dLDEwNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnMiKSxvPXQoIi4uL2hpc3RvZ3JhbS9ub3JtX2Z1bmN0aW9ucyIpLHM9dCgiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiKSxsPXQoIi4uL2hpc3RvZ3JhbS9iaW5fbGFiZWxfdmFscyIpLGM9dCgiLi4vaGlzdG9ncmFtL2NhbGMiKS5jYWxjQWxsQXV0b0JpbnM7ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaSxhPW5ldyBBcnJheSh0KTtpZihuKWZvcihpPTA7aTx0O2krKylhW2ldPTEvKGVbaSsxXS1lW2ldKTtlbHNle3ZhciBvPTEvcjtmb3IoaT0wO2k8dDtpKyspYVtpXT1vfXJldHVybiBhfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm57c3RhcnQ6dChlLnN0YXJ0KSxlbmQ6dChlLmVuZCksc2l6ZTplLnNpemV9fWZ1bmN0aW9uIGYodCxlLHIsbixpLGEpe3ZhciBvLHM9dC5sZW5ndGgtMSxjPW5ldyBBcnJheShzKSx1PWwocixuLHQsaSxhKTtmb3Iobz0wO288cztvKyspe3ZhciBoPShlfHxbXSlbb107Y1tvXT12b2lkIDA9PT1oP1t1KHRbb10pLHUodFtvKzFdLCEwKV06W2gsaF19cmV0dXJuIGN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxwLGQsZz1pLmdldEZyb21JZCh0LGUueGF4aXMpLG09aS5nZXRGcm9tSWQodCxlLnlheGlzKSx2PWUueGNhbGVuZGFyLHk9ZS55Y2FsZW5kYXIseD1mdW5jdGlvbih0KXtyZXR1cm4gZy5yMmModCwwLHYpfSxiPWZ1bmN0aW9uKHQpe3JldHVybiBtLnIyYyh0LDAseSl9LF89Yyh0LGUsZywieCIpLHc9X1swXSxUPV9bMV0saz1jKHQsZSxtLCJ5IiksTT1rWzBdLEE9a1sxXSxTPWUuX2xlbmd0aDtULmxlbmd0aD5TJiZULnNwbGljZShTLFQubGVuZ3RoLVMpLEEubGVuZ3RoPlMmJkEuc3BsaWNlKFMsQS5sZW5ndGgtUyk7dmFyIEU9W10sQz1bXSxMPVtdLFA9InN0cmluZyI9PXR5cGVvZiB3LnNpemUsST0ic3RyaW5nIj09dHlwZW9mIE0uc2l6ZSx6PVtdLE89W10sRD1QP3o6dyxSPUk/TzpNLEY9MCxCPVtdLE49W10saj1lLmhpc3Rub3JtLFU9ZS5oaXN0ZnVuYyxWPS0xIT09ai5pbmRleE9mKCJkZW5zaXR5IikscT0ibWF4Ij09PVV8fCJtaW4iPT09VT9udWxsOjAsSD1hLmNvdW50LEc9b1tqXSxZPSExLFc9W10sWj1bXSxYPSJ6ImluIGU/ZS56OiJtYXJrZXIiaW4gZSYmQXJyYXkuaXNBcnJheShlLm1hcmtlci5jb2xvcik/ZS5tYXJrZXIuY29sb3I6IiI7WCYmImNvdW50IiE9PVUmJihZPSJhdmciPT09VSxIPWFbVV0pO3ZhciBKPXcuc2l6ZSxLPXgody5zdGFydCksUT14KHcuZW5kKSsoSy1pLnRpY2tJbmNyZW1lbnQoSyxKLCExLHYpKS8xZTY7Zm9yKHI9SztyPFE7cj1pLnRpY2tJbmNyZW1lbnQocixKLCExLHYpKUMucHVzaChxKSx6LnB1c2gociksWSYmTC5wdXNoKDApO3oucHVzaChyKTt2YXIgJCx0dD1DLmxlbmd0aCxldD0oci1LKS90dCxydD0oJD1LK2V0LzIsZy5jMnIoJCwwLHYpKSxudD1NLnNpemUsaXQ9YihNLnN0YXJ0KSxhdD1iKE0uZW5kKSsoaXQtaS50aWNrSW5jcmVtZW50KGl0LG50LCExLHkpKS8xZTY7Zm9yKHI9aXQ7cjxhdDtyPWkudGlja0luY3JlbWVudChyLG50LCExLHkpKXtFLnB1c2goQy5zbGljZSgpKSxPLnB1c2gocik7dmFyIG90PW5ldyBBcnJheSh0dCk7Zm9yKGw9MDtsPHR0O2wrKylvdFtsXT1bXTtOLnB1c2gob3QpLFkmJkIucHVzaChMLnNsaWNlKCkpfU8ucHVzaChyKTt2YXIgc3Q9RS5sZW5ndGgsbHQ9KHItaXQpL3N0LGN0PWZ1bmN0aW9uKHQpe3JldHVybiBtLmMycih0LDAseSl9KGl0K2x0LzIpO1YmJihXPXUoQy5sZW5ndGgsRCxldCxQKSxaPXUoRS5sZW5ndGgsUixsdCxJKSksUHx8ImRhdGUiIT09Zy50eXBlfHwoRD1oKHgsRCkpLEl8fCJkYXRlIiE9PW0udHlwZXx8KFI9aChiLFIpKTt2YXIgdXQ9ITAsaHQ9ITAsZnQ9bmV3IEFycmF5KHR0KSxwdD1uZXcgQXJyYXkoc3QpLGR0PTEvMCxndD0xLzAsbXQ9MS8wLHZ0PTEvMDtmb3Iocj0wO3I8UztyKyspe3ZhciB5dD1UW3JdLHh0PUFbcl07cD1uLmZpbmRCaW4oeXQsRCksZD1uLmZpbmRCaW4oeHQsUikscD49MCYmcDx0dCYmZD49MCYmZDxzdCYmKEYrPUgocCxyLEVbZF0sWCxCW2RdKSxOW2RdW3BdLnB1c2gociksdXQmJih2b2lkIDA9PT1mdFtwXT9mdFtwXT15dDpmdFtwXSE9PXl0JiYodXQ9ITEpKSxodCYmKHZvaWQgMD09PXB0W2RdP3B0W2RdPXh0OnB0W2RdIT09eHQmJihodD0hMSkpLGR0PU1hdGgubWluKGR0LHl0LXpbcF0pLGd0PU1hdGgubWluKGd0LHpbcCsxXS15dCksbXQ9TWF0aC5taW4obXQseHQtT1tkXSksdnQ9TWF0aC5taW4odnQsT1tkKzFdLXh0KSl9aWYoWSlmb3IoZD0wO2Q8c3Q7ZCsrKUYrPXMoRVtkXSxCW2RdKTtpZihHKWZvcihkPTA7ZDxzdDtkKyspRyhFW2RdLEYsVyxaW2RdKTtyZXR1cm57eDpULHhSYW5nZXM6Zih6LHV0JiZmdCxkdCxndCxnLHYpLHgwOnJ0LGR4OmV0LHk6QSx5UmFuZ2VzOmYoTyxodCYmcHQsbXQsdnQsbSx5KSx5MDpjdCxkeTpsdCx6OkUscHRzOk59fX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiOjEwNTYsIi4uL2hpc3RvZ3JhbS9iaW5fZnVuY3Rpb25zIjoxMDU4LCIuLi9oaXN0b2dyYW0vYmluX2xhYmVsX3ZhbHMiOjEwNTksIi4uL2hpc3RvZ3JhbS9jYWxjIjoxMDYwLCIuLi9oaXN0b2dyYW0vbm9ybV9mdW5jdGlvbnMiOjEwNjd9XSwxMDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9zYW1wbGVfZGVmYXVsdHMiKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGVfZGVmYXVsdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpLCExIT09ZS52aXNpYmxlJiYoYSh0LGUsYyxsKSxvKHQsZSxsLGMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pLGMoImhvdmVydGVtcGxhdGUiKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjI1LCIuLi8uLi9saWIiOjc1MCwiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0cyI6MTA0OSwiLi9hdHRyaWJ1dGVzIjoxMDY4LCIuL3NhbXBsZV9kZWZhdWx0cyI6MTA3M31dLDEwNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGVhdG1hcC9ob3ZlciIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3ZhciBsPW4odCxlLHIsYSxvLHMpO2lmKGwpe3ZhciBjPSh0PWxbMF0pLmluZGV4LHU9Y1swXSxoPWNbMV0sZj10LmNkWzBdLHA9Zi54UmFuZ2VzW2hdLGQ9Zi55UmFuZ2VzW3VdO3JldHVybiB0LnhMYWJlbD1pKHQueGEscFswXSxwWzFdKSx0LnlMYWJlbD1pKHQueWEsZFswXSxkWzFdKSxsfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vaGVhdG1hcC9ob3ZlciI6MTA0M31dLDEwNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzp0KCIuLi9oZWF0bWFwL2NhbGMiKSxwbG90OnQoIi4uL2hlYXRtYXAvcGxvdCIpLGxheWVyTmFtZToiaGVhdG1hcGxheWVyIixjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksc3R5bGU6dCgiLi4vaGVhdG1hcC9zdHlsZSIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGEiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGlzdG9ncmFtMmQiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImhpc3RvZ3JhbSIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjgxMiwiLi4vaGVhdG1hcC9jYWxjIjoxMDM3LCIuLi9oZWF0bWFwL2NvbG9yYmFyIjoxMDM5LCIuLi9oZWF0bWFwL3Bsb3QiOjEwNDcsIi4uL2hlYXRtYXAvc3R5bGUiOjEwNDgsIi4uL2hpc3RvZ3JhbS9jcm9zc190cmFjZV9kZWZhdWx0cyI6MTA2MiwiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGEiOjEwNjQsIi4vYXR0cmlidXRlcyI6MTA2OCwiLi9kZWZhdWx0cyI6MTA3MCwiLi9ob3ZlciI6MTA3MX1dLDEwNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKCJ4Iikscz1yKCJ5IiksbD1pLm1pblJvd0xlbmd0aChvKSxjPWkubWluUm93TGVuZ3RoKHMpO2wmJmM/KGUuX2xlbmd0aD1NYXRoLm1pbihsLGMpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxhKSwocigieiIpfHxyKCJtYXJrZXIuY29sb3IiKSkmJnIoImhpc3RmdW5jIikscigiaGlzdG5vcm0iKSxyKCJhdXRvYmlueCIpLHIoImF1dG9iaW55IikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODJ9XSwxMDc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbnRvdXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1vKHt4Om4ueCx5Om4ueSx6Om4ueixtYXJrZXI6bi5tYXJrZXIsaGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLG5iaW5zeDpuLm5iaW5zeCx4YmluczpuLnhiaW5zLG5iaW5zeTpuLm5iaW5zeSx5YmluczpuLnliaW5zLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSxiaW5ncm91cDpuLmJpbmdyb3VwLHhiaW5ncm91cDpuLnhiaW5ncm91cCx5YmluZ3JvdXA6bi55YmluZ3JvdXAsYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6aS5jb250b3VycyxsaW5lOntjb2xvcjppLmxpbmUuY29sb3Isd2lkdGg6byh7fSxpLmxpbmUud2lkdGgse2RmbHQ6LjV9KSxkYXNoOmkubGluZS5kYXNoLHNtb290aGluZzppLmxpbmUuc21vb3RoaW5nLGVkaXRUeXBlOiJwbG90In0semhvdmVyZm9ybWF0Om4uemhvdmVyZm9ybWF0LGhvdmVydGVtcGxhdGU6bi5ob3ZlcnRlbXBsYXRlfSxhKCIiLHtjTGV0dGVyOiJ6IixlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjIyLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uL2NvbnRvdXIvYXR0cmlidXRlcyI6OTc5LCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIjoxMDY4fV0sMTA3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLG89dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpLCExIT09ZS52aXNpYmxlJiYoYSh0LGUsYywoZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUscyxyKX0pKSxvKHQsZSxjLGwpLGMoImhvdmVydGVtcGxhdGUiKSl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIjo5ODYsIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiOjFlMywiLi4vaGlzdG9ncmFtMmQvc2FtcGxlX2RlZmF1bHRzIjoxMDczLCIuL2F0dHJpYnV0ZXMiOjEwNzR9XSwxMDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4uL2hpc3RvZ3JhbS9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi4vY29udG91ci9jYWxjIikscGxvdDp0KCIuLi9jb250b3VyL3Bsb3QiKS5wbG90LGxheWVyTmFtZToiY29udG91cmxheWVyIixzdHlsZTp0KCIuLi9jb250b3VyL3N0eWxlIiksY29sb3JiYXI6dCgiLi4vY29udG91ci9jb2xvcmJhciIpLGhvdmVyUG9pbnRzOnQoIi4uL2NvbnRvdXIvaG92ZXIiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGlzdG9ncmFtMmRjb250b3VyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiMmRNYXAiLCJjb250b3VyIiwiaGlzdG9ncmFtIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODEyLCIuLi9jb250b3VyL2NhbGMiOjk4MCwiLi4vY29udG91ci9jb2xvcmJhciI6OTgyLCIuLi9jb250b3VyL2hvdmVyIjo5OTIsIi4uL2NvbnRvdXIvcGxvdCI6OTk3LCIuLi9jb250b3VyL3N0eWxlIjo5OTksIi4uL2hpc3RvZ3JhbS9jcm9zc190cmFjZV9kZWZhdWx0cyI6MTA2MiwiLi9hdHRyaWJ1dGVzIjoxMDc0LCIuL2RlZmF1bHRzIjoxMDc1fV0sMTA3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi9jb25zdGFudHMiKS5jb2xvcm1vZGVsLHM9WyJyZ2IiLCJyZ2JhIiwicmdiYTI1NiIsImhzbCIsImhzbGEiXSxsPVtdLGM9W10sdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgaD1vW3NbdV1dO2wucHVzaCgiRm9yIHRoZSBgIitzW3VdKyJgIGNvbG9ybW9kZWwsIGl0IGlzIFsiKyhoLnptaW5EZmx0fHxoLm1pbikuam9pbigiLCAiKSsiXS4iKSxjLnB1c2goIkZvciB0aGUgYCIrc1t1XSsiYCBjb2xvcm1vZGVsLCBpdCBpcyBbIisoaC56bWF4RGZsdHx8aC5tYXgpLmpvaW4oIiwgIikrIl0uIil9ZS5leHBvcnRzPWEoe3NvdXJjZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3Jtb2RlbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMsZWRpdFR5cGU6ImNhbGMifSx6bWluOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSx6bWF4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSx4MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkeDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxkeTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InBsb3QifSxob3ZlcmluZm86YSh7fSxuLmhvdmVyaW5mbyx7ZmxhZ3M6WyJ4IiwieSIsInoiLCJjb2xvciIsIm5hbWUiLCJ0ZXh0Il0sZGZsdDoieCt5K3ordGV4dCtuYW1lIn0pLGhvdmVydGVtcGxhdGU6aSh7fSx7a2V5czpbInoiLCJjb2xvciIsImNvbG9ybW9kZWwiXX0pLHRyYW5zZm9ybXM6dm9pZCAwfSl9LHsiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi9jb25zdGFudHMiOjEwNzl9XSwxMDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9jb25zdGFudHMiKSxhPXQoImZhc3QtaXNudW1lcmljIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vLi4vbGliIikubWF4Um93TGVuZ3RoLGw9dCgiLi9oZWxwZXJzIikuZ2V0SW1hZ2VTaXplO2Z1bmN0aW9uIGModCxlLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBuLmNvbnN0cmFpbigoYS10KSplLHIsaSl9fWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG4uY29uc3RyYWluKHIsdCxlKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtpZihlLl9oYXNaKXI9ZS56Lmxlbmd0aCxuPXMoZS56KTtlbHNlIGlmKGUuX2hhc1NvdXJjZSl7dmFyIGg9bChlLnNvdXJjZSk7cj1oLmhlaWdodCxuPWgud2lkdGh9dmFyIGYscD1vLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksZD1vLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IiksZz1wLmQyYyhlLngwKS1lLmR4LzIsbT1kLmQyYyhlLnkwKS1lLmR5LzIsdj1bZyxnK24qZS5keF0seT1bbSxtK3IqZS5keV07aWYocCYmImxvZyI9PT1wLnR5cGUpZm9yKGY9MDtmPG47ZisrKXYucHVzaChnK2YqZS5keCk7aWYoZCYmImxvZyI9PT1kLnR5cGUpZm9yKGY9MDtmPHI7ZisrKXkucHVzaChtK2YqZS5keSk7cmV0dXJuIGUuX2V4dHJlbWVzW3AuX2lkXT1vLmZpbmRFeHRyZW1lcyhwLHYpLGUuX2V4dHJlbWVzW2QuX2lkXT1vLmZpbmRFeHRyZW1lcyhkLHkpLGUuX3NjYWxlcj1mdW5jdGlvbih0KXt2YXIgZT1pLmNvbG9ybW9kZWxbdC5jb2xvcm1vZGVsXSxyPShlLmNvbG9ybW9kZWx8fHQuY29sb3Jtb2RlbCkubGVuZ3RoO3QuX3NBcnJheT1bXTtmb3IodmFyIG49MDtuPHI7bisrKWUubWluW25dIT09dC56bWluW25dfHxlLm1heFtuXSE9PXQuem1heFtuXT90Ll9zQXJyYXkucHVzaChjKHQuem1pbltuXSwoZS5tYXhbbl0tZS5taW5bbl0pLyh0LnptYXhbbl0tdC56bWluW25dKSxlLm1pbltuXSxlLm1heFtuXSkpOnQuX3NBcnJheS5wdXNoKHUoZS5taW5bbl0sZS5tYXhbbl0pKTtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUuc2xpY2UoMCxyKSxpPTA7aTxyO2krKyl7dmFyIG89bltpXTtpZighYShvKSlyZXR1cm4hMTtuW2ldPXQuX3NBcnJheVtpXShvKX1yZXR1cm4gbn19KGUpLFt7eDA6Zyx5MDptLHo6ZS56LHc6bixoOnJ9XX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4vY29uc3RhbnRzIjoxMDc5LCIuL2hlbHBlcnMiOjEwODIsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y29sb3Jtb2RlbDp7cmdiOnttaW46WzAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1XSxmbXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMCwzKX0sc3VmZml4OlsiIiwiIiwiIl19LHJnYmE6e21pbjpbMCwwLDAsMF0sbWF4OlsyNTUsMjU1LDI1NSwxXSxmbXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMCw0KX0sc3VmZml4OlsiIiwiIiwiIiwiIl19LHJnYmEyNTY6e2NvbG9ybW9kZWw6InJnYmEiLHptaW5EZmx0OlswLDAsMCwwXSx6bWF4RGZsdDpbMjU1LDI1NSwyNTUsMjU1XSxtaW46WzAsMCwwLDBdLG1heDpbMjU1LDI1NSwyNTUsMV0sZm10OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKDAsNCl9LHN1ZmZpeDpbIiIsIiIsIiIsIiJdfSxoc2w6e21pbjpbMCwwLDBdLG1heDpbMzYwLDEwMCwxMDBdLGZtdDpmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKDAsMyk7cmV0dXJuIGVbMV09ZVsxXSsiJSIsZVsyXT1lWzJdKyIlIixlfSxzdWZmaXg6WyJceGIwIiwiJSIsIiUiXX0saHNsYTp7bWluOlswLDAsMCwwXSxtYXg6WzM2MCwxMDAsMTAwLDFdLGZtdDpmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKDAsNCk7cmV0dXJuIGVbMV09ZVsxXSsiJSIsZVsyXT1lWzJdKyIlIixlfSxzdWZmaXg6WyJceGIwIiwiJSIsIiUiLCIiXX19fX0se31dLDEwODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vY29uc3RhbnRzIiksbz10KCIuLi8uLi9zbmFwc2hvdC9oZWxwZXJzIikuSU1BR0VfVVJMX1BSRUZJWDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigic291cmNlIiksZS5zb3VyY2UmJiFlLnNvdXJjZS5tYXRjaChvKSYmZGVsZXRlIGUuc291cmNlLGUuX2hhc1NvdXJjZT0hIWUuc291cmNlO3ZhciBzLGw9cigieiIpOyhlLl9oYXNaPSEodm9pZCAwPT09bHx8IWwubGVuZ3RofHwhbFswXXx8IWxbMF0ubGVuZ3RoKSxlLl9oYXNafHxlLl9oYXNTb3VyY2UpPyhyKCJ4MCIpLHIoInkwIikscigiZHgiKSxyKCJkeSIpLGUuX2hhc1o/KHIoImNvbG9ybW9kZWwiLCJyZ2IiKSxyKCJ6bWluIiwocz1hLmNvbG9ybW9kZWxbZS5jb2xvcm1vZGVsXSkuem1pbkRmbHR8fHMubWluKSxyKCJ6bWF4IixzLnptYXhEZmx0fHxzLm1heCkpOmUuX2hhc1NvdXJjZSYmKGUuY29sb3Jtb2RlbD0icmdiYTI1NiIscz1hLmNvbG9ybW9kZWxbZS5jb2xvcm1vZGVsXSxlLnptaW49cy56bWluRGZsdCxlLnptYXg9cy56bWF4RGZsdCkscigidGV4dCIpLHIoImhvdmVydGV4dCIpLHIoImhvdmVydGVtcGxhdGUiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vc25hcHNob3QvaGVscGVycyI6ODg2LCIuL2F0dHJpYnV0ZXMiOjEwNzcsIi4vY29uc3RhbnRzIjoxMDc5fV0sMTA4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4ieFZhbCJpbiBlJiYodC54PWUueFZhbCksInlWYWwiaW4gZSYmKHQueT1lLnlWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLHQuY29sb3I9ZS5jb2xvcix0LmNvbG9ybW9kZWw9ZS50cmFjZS5jb2xvcm1vZGVsLHQuenx8KHQuej1lLmNvbG9yKSx0fX0se31dLDEwODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaW1hZ2Utc2l6ZSIpLGk9dCgiLi4vLi4vc25hcHNob3QvaGVscGVycyIpLklNQUdFX1VSTF9QUkVGSVgsYT10KCJidWZmZXIvIikuQnVmZmVyO3IuZ2V0SW1hZ2VTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVwbGFjZShpLCIiKSxyPW5ldyBhKGUsImJhc2U2NCIpO3JldHVybiBuKHIpfX0seyIuLi8uLi9zbmFwc2hvdC9oZWxwZXJzIjo4ODYsImJ1ZmZlci8iOjExMSwiaW1hZ2Utc2l6ZSI6NDE4fV0sMTA4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz10LmNkWzBdLHM9by50cmFjZSxsPXQueGEsYz10LnlhO2lmKCEobi5pbmJveChlLW8ueDAsZS0oby54MCtvLncqcy5keCksMCk+MHx8bi5pbmJveChyLW8ueTAsci0oby55MCtvLmgqcy5keSksMCk+MCkpe3ZhciB1LGg9TWF0aC5mbG9vcigoZS1vLngwKS9zLmR4KSxmPU1hdGguZmxvb3IoTWF0aC5hYnMoci1vLnkwKS9zLmR5KTtpZihzLl9oYXNaP3U9by56W2ZdW2hdOnMuX2hhc1NvdXJjZSYmKHU9cy5fY2FudmFzLmVsLmdldENvbnRleHQoIjJkIikuZ2V0SW1hZ2VEYXRhKGgsZiwxLDEpLmRhdGEpLHUpe3ZhciBwLGQ9by5oaXx8cy5ob3ZlcmluZm87aWYoZCl7dmFyIGc9ZC5zcGxpdCgiKyIpOy0xIT09Zy5pbmRleE9mKCJhbGwiKSYmKGc9WyJjb2xvciJdKSwtMSE9PWcuaW5kZXhPZigiY29sb3IiKSYmKHA9ITApfXZhciBtLHY9YS5jb2xvcm1vZGVsW3MuY29sb3Jtb2RlbF0seT12LmNvbG9ybW9kZWx8fHMuY29sb3Jtb2RlbCx4PXkubGVuZ3RoLGI9cy5fc2NhbGVyKHUpLF89di5zdWZmaXgsdz1bXTsocy5ob3ZlcnRlbXBsYXRlfHxwKSYmKHcucHVzaCgiWyIrW2JbMF0rX1swXSxiWzFdK19bMV0sYlsyXStfWzJdXS5qb2luKCIsICIpKSw0PT09eCYmdy5wdXNoKCIsICIrYlszXStfWzNdKSx3LnB1c2goIl0iKSx3PXcuam9pbigiIiksdC5leHRyYVRleHQ9eS50b1VwcGVyQ2FzZSgpKyI6ICIrdyksQXJyYXkuaXNBcnJheShzLmhvdmVydGV4dCkmJkFycmF5LmlzQXJyYXkocy5ob3ZlcnRleHRbZl0pP209cy5ob3ZlcnRleHRbZl1baF06QXJyYXkuaXNBcnJheShzLnRleHQpJiZBcnJheS5pc0FycmF5KHMudGV4dFtmXSkmJihtPXMudGV4dFtmXVtoXSk7dmFyIFQ9Yy5jMnAoby55MCsoZisuNSkqcy5keSksaz1vLngwKyhoKy41KSpzLmR4LE09by55MCsoZisuNSkqcy5keSxBPSJbIit1LnNsaWNlKDAscy5jb2xvcm1vZGVsLmxlbmd0aCkuam9pbigiLCAiKSsiXSI7cmV0dXJuW2kuZXh0ZW5kRmxhdCh0LHtpbmRleDpbZixoXSx4MDpsLmMycChvLngwK2gqcy5keCkseDE6bC5jMnAoby54MCsoaCsxKSpzLmR4KSx5MDpULHkxOlQsY29sb3I6Yix4VmFsOmsseExhYmVsVmFsOmsseVZhbDpNLHlMYWJlbFZhbDpNLHpMYWJlbFZhbDpBLHRleHQ6bSxob3ZlcnRlbXBsYXRlTGFiZWxzOnt6TGFiZWw6QSxjb2xvckxhYmVsOncsImNvbG9yWzBdTGFiZWwiOmJbMF0rX1swXSwiY29sb3JbMV1MYWJlbCI6YlsxXStfWzFdLCJjb2xvclsyXUxhYmVsIjpiWzJdK19bMl0sImNvbG9yWzNdTGFiZWwiOmJbM10rX1szXX19KV19fX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjU1LCIuLi8uLi9saWIiOjc1MCwiLi9jb25zdGFudHMiOjEwNzl9XSwxMDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJpbWFnZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwibm9Tb3J0aW5nQnlWYWx1ZSJdLGFuaW1hdGFibGU6ITEsbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4MTIsIi4vYXR0cmlidXRlcyI6MTA3NywiLi9jYWxjIjoxMDc4LCIuL2RlZmF1bHRzIjoxMDgwLCIuL2V2ZW50X2RhdGEiOjEwODEsIi4vaG92ZXIiOjEwODMsIi4vcGxvdCI6MTA4NSwiLi9zdHlsZSI6MTA4Nn1dLDEwODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxvPXQoIi4vY29uc3RhbnRzIikscz1pLmlzSU9TKCl8fGkuaXNTYWZhcmkoKXx8aS5pc0lFKCk7ZnVuY3Rpb24gbCh0KXtyZXR1cm4ibGluZWFyIj09PXQudHlwZSYmdC5yYW5nZVsxXT50LnJhbmdlWzBdPT0oIngiPT09dC5faWQuY2hhckF0KDApKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9ZS54YXhpcyxoPWUueWF4aXMsZj0hKHN8fHQuX2NvbnRleHQuX2V4cG9ydGVkUGxvdCk7aS5tYWtlVHJhY2VHcm91cHMoYyxyLCJpbSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLHM9ZVswXSxjPXMudHJhY2UscD1mJiYhYy5faGFzWiYmYy5faGFzU291cmNlJiZsKHUpJiZsKGgpO2MuX2Zhc3RJbWFnZT1wO3ZhciBkLGcsbSx2LHkseCxiPXMueixfPXMueDAsdz1zLnkwLFQ9cy53LGs9cy5oLE09Yy5keCxBPWMuZHk7Zm9yKHg9MDt2b2lkIDA9PT1kJiZ4PFQ7KWQ9dS5jMnAoXyt4Kk0pLHgrKztmb3IoeD1UO3ZvaWQgMD09PWcmJng+MDspZz11LmMycChfK3gqTSkseC0tO2Zvcih4PTA7dm9pZCAwPT09diYmeDxrOyl2PWguYzJwKHcreCpBKSx4Kys7Zm9yKHg9azt2b2lkIDA9PT15JiZ4PjA7KXk9aC5jMnAodyt4KkEpLHgtLTtpZihnPGQmJihtPWcsZz1kLGQ9bSkseTx2JiYobT12LHY9eSx5PW0pLCFwKXtkPU1hdGgubWF4KC0uNSp1Ll9sZW5ndGgsZCksZz1NYXRoLm1pbigxLjUqdS5fbGVuZ3RoLGcpLHY9TWF0aC5tYXgoLS41KmguX2xlbmd0aCx2KSx5PU1hdGgubWluKDEuNSpoLl9sZW5ndGgseSl9dmFyIFM9TWF0aC5yb3VuZChnLWQpLEU9TWF0aC5yb3VuZCh5LXYpO2lmKFM8PTB8fEU8PTApe3Iuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoW10pLmV4aXQoKS5yZW1vdmUoKX1lbHNle3ZhciBDPXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoW2VdKTtDLmVudGVyKCkuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczphLnN2ZyxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLEMuZXhpdCgpLnJlbW92ZSgpLEMuYXR0cigic3R5bGUiLCJpbWFnZS1yZW5kZXJpbmc6IG9wdGltaXplU3BlZWQ7IGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsgaW1hZ2UtcmVuZGVyaW5nOiAtby1jcmlzcC1lZGdlczsgaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0OyBpbWFnZS1yZW5kZXJpbmc6IG9wdGltaXplLWNvbnRyYXN0OyBpbWFnZS1yZW5kZXJpbmc6IGNyaXNwLWVkZ2VzOyBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsiKTt2YXIgTD1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7aWYoYy5faGFzWil0KCk7ZWxzZSBpZihjLl9oYXNTb3VyY2UpaWYoYy5fY2FudmFzJiZjLl9jYW52YXMuZWwud2lkdGg9PT1UJiZjLl9jYW52YXMuZWwuaGVpZ2h0PT09ayYmYy5fY2FudmFzLnNvdXJjZT09PWMuc291cmNlKXQoKTtlbHNle3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9VCxlLmhlaWdodD1rO3ZhciByPWUuZ2V0Q29udGV4dCgiMmQiKTtjLl9pbWFnZT1jLl9pbWFnZXx8bmV3IEltYWdlO3ZhciBuPWMuX2ltYWdlO24ub25sb2FkPWZ1bmN0aW9uKCl7ci5kcmF3SW1hZ2UobiwwLDApLGMuX2NhbnZhcz17ZWw6ZSxzb3VyY2U6Yy5zb3VyY2V9LHQoKX0sbi5zZXRBdHRyaWJ1dGUoInNyYyIsYy5zb3VyY2UpfX0pKS50aGVuKChmdW5jdGlvbigpe3ZhciB0O2lmKGMuX2hhc1opdD1QKChmdW5jdGlvbih0LGUpe3JldHVybiBiW2VdW3RdfSkpLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ZWxzZSBpZihjLl9oYXNTb3VyY2UpaWYocCl0PWMuc291cmNlO2Vsc2V7dmFyIGU9Yy5fY2FudmFzLmVsLmdldENvbnRleHQoIjJkIikuZ2V0SW1hZ2VEYXRhKDAsMCxULGspLmRhdGE7dD1QKChmdW5jdGlvbih0LHIpe3ZhciBuPTQqKHIqVCt0KTtyZXR1cm5bZVtuXSxlW24rMV0sZVtuKzJdLGVbbiszXV19KSkudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1DLmF0dHIoeyJ4bGluazpocmVmIjp0LGhlaWdodDpFLHdpZHRoOlMseDpkLHk6dn0pfSkpO3QuX3Byb21pc2VzLnB1c2goTCl9ZnVuY3Rpb24gUCh0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtlLndpZHRoPVMsZS5oZWlnaHQ9RTt2YXIgcixuPWUuZ2V0Q29udGV4dCgiMmQiKSxhPWZ1bmN0aW9uKHQpe3JldHVybiBpLmNvbnN0cmFpbihNYXRoLnJvdW5kKHUuYzJwKF8rdCpNKS1kKSwwLFMpfSxsPWZ1bmN0aW9uKHQpe3JldHVybiBpLmNvbnN0cmFpbihNYXRoLnJvdW5kKGguYzJwKHcrdCpBKS12KSwwLEUpfSxmPW8uY29sb3Jtb2RlbFtjLmNvbG9ybW9kZWxdLHA9Zi5jb2xvcm1vZGVsfHxjLmNvbG9ybW9kZWwsZz1mLmZtdDtmb3IoeD0wO3g8cy53O3grKyl7dmFyIG09YSh4KSx5PWEoeCsxKTtpZih5IT09bSYmIWlzTmFOKHkpJiYhaXNOYU4obSkpZm9yKHZhciBiPTA7YjxzLmg7YisrKXt2YXIgVD1sKGIpLGs9bChiKzEpO2s9PT1UfHxpc05hTihrKXx8aXNOYU4oVCl8fCF0KHgsYil8fChyPWMuX3NjYWxlcih0KHgsYikpLG4uZmlsbFN0eWxlPXI/cCsiKCIrZyhyKS5qb2luKCIsIikrIikiOiJyZ2JhKDAsMCwwLDApIixuLmZpbGxSZWN0KG0sVCx5LW0say1UKSl9fXJldHVybiBlfX0pKX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcyNiwiLi4vLi4vbGliIjo3NTAsIi4vY29uc3RhbnRzIjoxMDc5LGQzOjE2OX1dLDEwODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuaW0gaW1hZ2UiKS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSl9fSx7ZDM6MTY5fV0sMTA4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmREZWVwLGE9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLG89dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxoPXQoIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyIpLGY9KHQoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuRk9STUFUX0xJTkssbyh7ZWRpdFR5cGU6InBsb3QiLGNvbG9yRWRpdFR5cGU6InBsb3QifSkpLHA9e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6cy5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sdGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sZD17dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxnPXUoInN0ZXAiLGkoe30scCx7cmFuZ2U6ZH0pKTtlLmV4cG9ydHM9e21vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJudW1iZXIiLCJkZWx0YSIsImdhdWdlIl0sZGZsdDoibnVtYmVyIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjpsKHtuYW1lOiJpbmRpY2F0b3IiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHt9LGYse30pLGVkaXRUeXBlOiJwbG90In0sbnVtYmVyOnt2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHt9LGYse30pLHByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGRlbHRhOntyZWZlcmVuY2U6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSxwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0sZGZsdDoiYm90dG9tIixlZGl0VHlwZToicGxvdCJ9LHJlbGF0aXZlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCIsZGZsdDohMX0sdmFsdWVmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSxpbmNyZWFzaW5nOntzeW1ib2w6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDpoLklOQ1JFQVNJTkcuU1lNQk9MLGVkaXRUeXBlOiJwbG90In0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmguSU5DUkVBU0lORy5DT0xPUixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZGVjcmVhc2luZzp7c3ltYm9sOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6aC5ERUNSRUFTSU5HLlNZTUJPTCxlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpoLkRFQ1JFQVNJTkcuQ09MT1IsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGZvbnQ6bih7fSxmLHt9KSxlZGl0VHlwZToiY2FsYyJ9LGdhdWdlOntzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsZWRpdFR5cGU6InBsb3QiLGRmbHQ6ImFuZ3VsYXIiLHZhbHVlczpbImFuZ3VsYXIiLCJidWxsZXQiXX0sYmFyOmkoe30scCx7Y29sb3I6e2RmbHQ6ImdyZWVuIn19KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6cy5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGF4aXM6YSh7cmFuZ2U6ZCx2aXNpYmxlOm4oe30sYy52aXNpYmxlLHtkZmx0OiEwfSksdGlja21vZGU6Yy50aWNrbW9kZSxudGlja3M6Yy5udGlja3MsdGljazA6Yy50aWNrMCxkdGljazpjLmR0aWNrLHRpY2t2YWxzOmMudGlja3ZhbHMsdGlja3RleHQ6Yy50aWNrdGV4dCx0aWNrczpuKHt9LGMudGlja3Mse2RmbHQ6Im91dHNpZGUifSksdGlja2xlbjpjLnRpY2tsZW4sdGlja3dpZHRoOmMudGlja3dpZHRoLHRpY2tjb2xvcjpjLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpjLnNob3d0aWNrbGFiZWxzLHRpY2tmb250Om8oe30pLHRpY2thbmdsZTpjLnRpY2thbmdsZSx0aWNrZm9ybWF0OmMudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6Yy50aWNrZm9ybWF0c3RvcHMsdGlja3ByZWZpeDpjLnRpY2twcmVmaXgsc2hvd3RpY2twcmVmaXg6Yy5zaG93dGlja3ByZWZpeCx0aWNrc3VmZml4OmMudGlja3N1ZmZpeCxzaG93dGlja3N1ZmZpeDpjLnNob3d0aWNrc3VmZml4LHNlcGFyYXRldGhvdXNhbmRzOmMuc2VwYXJhdGV0aG91c2FuZHMsZXhwb25lbnRmb3JtYXQ6Yy5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDpjLm1pbmV4cG9uZW50LHNob3dleHBvbmVudDpjLnNob3dleHBvbmVudCxlZGl0VHlwZToicGxvdCJ9LCJwbG90Iiksc3RlcHM6Zyx0aHJlc2hvbGQ6e2xpbmU6e2NvbG9yOm4oe30scC5saW5lLmNvbG9yLHt9KSx3aWR0aDpuKHt9LHAubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6InBsb3QifSx0aGlja25lc3M6bih7fSxwLnRoaWNrbmVzcyx7ZGZsdDouODV9KSx2YWx1ZTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsZGZsdDohMX0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYxNCwiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIjo3MTksIi4uLy4uL2NvbnN0YW50cy9kb2NzIjo3MjAsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzgxLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODEzLCIuLi8uLi9wbG90cy9kb21haW4iOjgyNiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4Mjd9XSwxMDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIik7ci5uYW1lPSJpbmRpY2F0b3IiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjg2Mn1dLDEwODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj1lLnZhbHVlOyJudW1iZXIiIT10eXBlb2YgZS5fbGFzdFZhbHVlJiYoZS5fbGFzdFZhbHVlPWUudmFsdWUpO3ZhciBpPWUuX2xhc3RWYWx1ZSxhPWk7cmV0dXJuIGUuX2hhc0RlbHRhJiYibnVtYmVyIj09dHlwZW9mIGUuZGVsdGEucmVmZXJlbmNlJiYoYT1lLmRlbHRhLnJlZmVyZW5jZSksclswXT17eTpuLGxhc3RZOmksZGVsdGE6bi1hLHJlbGF0aXZlRGVsdGE6KG4tYSkvYX0scn19fSx7fV0sMTA5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2RlZmF1bHROdW1iZXJGb250U2l6ZTo4MCxidWxsZXROdW1iZXJEb21haW5TaXplOi4yNSxidWxsZXRQYWRkaW5nOi4wMjUsaW5uZXJSYWRpdXM6Ljc1LHZhbHVlVGhpY2tuZXNzOi41LHRpdGxlUGFkZGluZzo1LGhvcml6b250YWxQYWRkaW5nOjEwfX0se31dLDEwOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLG89dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuL2NvbnN0YW50cy5qcyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIik7ZnVuY3Rpb24gZih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkuZ2F1Z2Uuc3RlcHMscixhKX1yKCJjb2xvciIpLHIoImxpbmUuY29sb3IiKSxyKCJsaW5lLndpZHRoIikscigicmFuZ2UiKSxyKCJ0aGlja25lc3MiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKGUscCxkKSxkKCJtb2RlIiksZS5faGFzTnVtYmVyPS0xIT09ZS5tb2RlLmluZGV4T2YoIm51bWJlciIpLGUuX2hhc0RlbHRhPS0xIT09ZS5tb2RlLmluZGV4T2YoImRlbHRhIiksZS5faGFzR2F1Z2U9LTEhPT1lLm1vZGUuaW5kZXhPZigiZ2F1Z2UiKTt2YXIgZz1kKCJ2YWx1ZSIpO2UuX3JhbmdlPVswLCJudW1iZXIiPT10eXBlb2YgZz8xLjUqZzoxXTt2YXIgbSx2LHkseCxiLF8sdz1uZXcgQXJyYXkoMik7ZnVuY3Rpb24gVCh0LGUpe3JldHVybiBuLmNvZXJjZSh5LHgsaS5nYXVnZSx0LGUpfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4gbi5jb2VyY2UoYixfLGkuZ2F1Z2UuYXhpcyx0LGUpfWlmKGUuX2hhc051bWJlciYmKGQoIm51bWJlci52YWx1ZWZvcm1hdCIpLGQoIm51bWJlci5mb250LmNvbG9yIixwLmZvbnQuY29sb3IpLGQoIm51bWJlci5mb250LmZhbWlseSIscC5mb250LmZhbWlseSksZCgibnVtYmVyLmZvbnQuc2l6ZSIpLHZvaWQgMD09PWUubnVtYmVyLmZvbnQuc2l6ZSYmKGUubnVtYmVyLmZvbnQuc2l6ZT1sLmRlZmF1bHROdW1iZXJGb250U2l6ZSx3WzBdPSEwKSxkKCJudW1iZXIucHJlZml4IiksZCgibnVtYmVyLnN1ZmZpeCIpLG09ZS5udW1iZXIuZm9udC5zaXplKSxlLl9oYXNEZWx0YSYmKGQoImRlbHRhLmZvbnQuY29sb3IiLHAuZm9udC5jb2xvciksZCgiZGVsdGEuZm9udC5mYW1pbHkiLHAuZm9udC5mYW1pbHkpLGQoImRlbHRhLmZvbnQuc2l6ZSIpLHZvaWQgMD09PWUuZGVsdGEuZm9udC5zaXplJiYoZS5kZWx0YS5mb250LnNpemU9KGUuX2hhc051bWJlcj8uNToxKSoobXx8bC5kZWZhdWx0TnVtYmVyRm9udFNpemUpLHdbMV09ITApLGQoImRlbHRhLnJlZmVyZW5jZSIsZS52YWx1ZSksZCgiZGVsdGEucmVsYXRpdmUiKSxkKCJkZWx0YS52YWx1ZWZvcm1hdCIsZS5kZWx0YS5yZWxhdGl2ZT8iMiUiOiIiKSxkKCJkZWx0YS5pbmNyZWFzaW5nLnN5bWJvbCIpLGQoImRlbHRhLmluY3JlYXNpbmcuY29sb3IiKSxkKCJkZWx0YS5kZWNyZWFzaW5nLnN5bWJvbCIpLGQoImRlbHRhLmRlY3JlYXNpbmcuY29sb3IiKSxkKCJkZWx0YS5wb3NpdGlvbiIpLHY9ZS5kZWx0YS5mb250LnNpemUpLGUuX3NjYWxlTnVtYmVycz0oIWUuX2hhc051bWJlcnx8d1swXSkmJighZS5faGFzRGVsdGF8fHdbMV0pfHwhMSxkKCJ0aXRsZS5mb250LmNvbG9yIixwLmZvbnQuY29sb3IpLGQoInRpdGxlLmZvbnQuZmFtaWx5IixwLmZvbnQuZmFtaWx5KSxkKCJ0aXRsZS5mb250LnNpemUiLC4yNSoobXx8dnx8bC5kZWZhdWx0TnVtYmVyRm9udFNpemUpKSxkKCJ0aXRsZS50ZXh0IiksZS5faGFzR2F1Z2Upeyh5PXQuZ2F1Z2UpfHwoeT17fSkseD1vLm5ld0NvbnRhaW5lcihlLCJnYXVnZSIpLFQoInNoYXBlIiksKGUuX2lzQnVsbGV0PSJidWxsZXQiPT09ZS5nYXVnZS5zaGFwZSl8fGQoInRpdGxlLmFsaWduIiwiY2VudGVyIiksKGUuX2lzQW5ndWxhcj0iYW5ndWxhciI9PT1lLmdhdWdlLnNoYXBlKXx8ZCgiYWxpZ24iLCJjZW50ZXIiKSxUKCJiZ2NvbG9yIixwLnBhcGVyX2JnY29sb3IpLFQoImJvcmRlcndpZHRoIiksVCgiYm9yZGVyY29sb3IiKSxUKCJiYXIuY29sb3IiKSxUKCJiYXIubGluZS5jb2xvciIpLFQoImJhci5saW5lLndpZHRoIiksVCgiYmFyLnRoaWNrbmVzcyIsbC52YWx1ZVRoaWNrbmVzcyooImJ1bGxldCI9PT1lLmdhdWdlLnNoYXBlPy41OjEpKSxzKHkseCx7bmFtZToic3RlcHMiLGhhbmRsZUl0ZW1EZWZhdWx0czpmfSksVCgidGhyZXNob2xkLnZhbHVlIiksVCgidGhyZXNob2xkLnRoaWNrbmVzcyIpLFQoInRocmVzaG9sZC5saW5lLndpZHRoIiksVCgidGhyZXNob2xkLmxpbmUuY29sb3IiKSxiPXt9LHkmJihiPXkuYXhpc3x8e30pLF89by5uZXdDb250YWluZXIoeCwiYXhpcyIpLGsoInZpc2libGUiKSxlLl9yYW5nZT1rKCJyYW5nZSIsZS5fcmFuZ2UpO3ZhciBNPXtvdXRlclRpY2tzOiEwfTtjKGIsXyxrLCJsaW5lYXIiKSxoKGIsXyxrLCJsaW5lYXIiLE0pLHUoYixfLGssTSl9ZWxzZSBkKCJ0aXRsZS5hbGlnbiIsImNlbnRlciIpLGQoImFsaWduIiwiY2VudGVyIiksZS5faXNBbmd1bGFyPWUuX2lzQnVsbGV0PSExO2UuX2xlbmd0aD1udWxsfX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3OTQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo4MjAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjgyMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjgyMiwiLi4vLi4vcGxvdHMvZG9tYWluIjo4MjYsIi4vYXR0cmlidXRlcyI6MTA4NywiLi9jb25zdGFudHMuanMiOjEwOTB9XSwxMDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImluZGljYXRvciIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsic3ZnIiwibm9PcGFjaXR5Iiwibm9Ib3ZlciJdLGFuaW1hdGFibGU6ITAsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY2FsYzp0KCIuL2NhbGMiKS5jYWxjLHBsb3Q6dCgiLi9wbG90IiksbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMDg3LCIuL2Jhc2VfcGxvdCI6MTA4OCwiLi9jYWxjIjoxMDg5LCIuL2RlZmF1bHRzIjoxMDkxLCIuL3Bsb3QiOjEwOTN9XSwxMDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPWkucmFkMmRlZyxvPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5NSURfU0hJRlQscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4vY29uc3RhbnRzIiksYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyIpLGY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIikscD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxkPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxnPXtsZWZ0OiJzdGFydCIsY2VudGVyOiJtaWRkbGUiLHJpZ2h0OiJlbmQifSxtPXtsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjF9LHY9L1t5emFmcG5ceGI1bWtNR1RQRVpZXS87ZnVuY3Rpb24geSh0KXtyZXR1cm4gdCYmdC5kdXJhdGlvbj4wfWZ1bmN0aW9uIHgodCl7dC5lYWNoKChmdW5jdGlvbih0KXtkLnN0cm9rZShuLnNlbGVjdCh0aGlzKSx0LmxpbmUuY29sb3IpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2QuZmlsbChuLnNlbGVjdCh0aGlzKSx0LmNvbG9yKX0pKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluZS53aWR0aH0pKX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0LGE9aS5leHRlbmRGbGF0KHt0eXBlOiJsaW5lYXIiLHRpY2tzOiJvdXRzaWRlIixyYW5nZTpyLHNob3dsaW5lOiEwfSxlKSxvPXt0eXBlOiJsaW5lYXIiLF9pZDoieCIrZS5faWR9LHM9e2xldHRlcjoieCIsZm9udDpuLmZvbnQsbm9Ib3ZlcjohMCxub1RpY2tzb246ITB9O2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gaS5jb2VyY2UoYSxvLHAsdCxlKX1yZXR1cm4gaChhLG8sbCxzLG4pLGYoYSxvLGwscyksb31mdW5jdGlvbiBfKHQsZSl7cmV0dXJuInRyYW5zbGF0ZSgiK3QrIiwiK2UrIikifWZ1bmN0aW9uIHcodCxlLHIpe3JldHVybltNYXRoLm1pbihlL3Qud2lkdGgsci90LmhlaWdodCksdCxlKyJ4IityXX1mdW5jdGlvbiBUKHQsZSxyLGkpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iiksbz1uLnNlbGVjdChhKTtyZXR1cm4gby50ZXh0KHQpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoInRleHQtYW5jaG9yIixyKS5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIix0KS5jYWxsKGMuY29udmVydFRvVHNwYW5zLGkpLmNhbGwocy5mb250LGUpLHMuYkJveChvLm5vZGUoKSl9ZnVuY3Rpb24gayh0LGUscixuLGEsbyl7dmFyIHM9Il9jYWNoZSIrZTt0W3NdJiZ0W3NdLmtleT09PWF8fCh0W3NdPXtrZXk6YSx2YWx1ZTpyfSk7dmFyIGw9aS5hZ2dOdW1zKG8sbnVsbCxbdFtzXS52YWx1ZSxuXSwyKTtyZXR1cm4gdFtzXS52YWx1ZT1sLGx9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe3ZhciBmLHA9dC5fZnVsbExheW91dDt5KHIpJiZoJiYoZj1oKCkpLGkubWFrZVRyYWNlR3JvdXBzKHAuX2luZGljYXRvcmxheWVyLGUsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGgsTSxBLFMsRSxDPWVbMF0udHJhY2UsTD1uLnNlbGVjdCh0aGlzKSxQPUMuX2hhc0dhdWdlLEk9Qy5faXNBbmd1bGFyLHo9Qy5faXNCdWxsZXQsTz1DLmRvbWFpbixEPXt3OnAuX3NpemUudyooTy54WzFdLU8ueFswXSksaDpwLl9zaXplLmgqKE8ueVsxXS1PLnlbMF0pLGw6cC5fc2l6ZS5sK3AuX3NpemUudypPLnhbMF0scjpwLl9zaXplLnIrcC5fc2l6ZS53KigxLU8ueFsxXSksdDpwLl9zaXplLnQrcC5fc2l6ZS5oKigxLU8ueVsxXSksYjpwLl9zaXplLmIrcC5fc2l6ZS5oKk8ueVswXX0sUj1ELmwrRC53LzIsRj1ELnQrRC5oLzIsQj1NYXRoLm1pbihELncvMixELmgpLE49bC5pbm5lclJhZGl1cypCLGo9Qy5hbGlnbnx8ImNlbnRlciI7aWYoTT1GLFApe2lmKEkmJihoPVIsTT1GK0IvMixBPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydCh0LndpZHRoLzIqKHQud2lkdGgvMikrdC5oZWlnaHQqdC5oZWlnaHQpO3JldHVybltlL3IsdCxlXX0odCwuOSpOKX0pLHope3ZhciBVPWwuYnVsbGV0UGFkZGluZyxWPTEtbC5idWxsZXROdW1iZXJEb21haW5TaXplK1U7aD1ELmwrKFYrKDEtVikqbVtqXSkqRC53LEE9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCwobC5idWxsZXROdW1iZXJEb21haW5TaXplLVUpKkQudyxELmgpfX19ZWxzZSBoPUQubCttW2pdKkQudyxBPWZ1bmN0aW9uKHQpe3JldHVybiB3KHQsRC53LEQuaCl9OyFmdW5jdGlvbih0LGUscixhKXt2YXIgbyxsLGgsZj1yWzBdLnRyYWNlLHA9YS5udW1iZXJzWCx4PWEubnVtYmVyc1ksdz1mLmFsaWdufHwiY2VudGVyIixNPWdbd10sQT1hLnRyYW5zaXRpb25PcHRzLFM9YS5vbkNvbXBsZXRlLEU9aS5lbnN1cmVTaW5nbGUoZSwiZyIsIm51bWJlcnMiKSxDPVtdO2YuX2hhc051bWJlciYmQy5wdXNoKCJudW1iZXIiKTtmLl9oYXNEZWx0YSYmKEMucHVzaCgiZGVsdGEiKSwibGVmdCI9PT1mLmRlbHRhLnBvc2l0aW9uJiZDLnJldmVyc2UoKSk7dmFyIEw9RS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKEMpO2Z1bmN0aW9uIFAoZSxyLG4saSl7aWYoIWUubWF0Y2goInMiKXx8bj49MD09aT49MHx8cihuKS5zbGljZSgtMSkubWF0Y2godil8fHIoaSkuc2xpY2UoLTEpLm1hdGNoKHYpKXJldHVybiByO3ZhciBhPWUuc2xpY2UoKS5yZXBsYWNlKCJzIiwiZiIpLnJlcGxhY2UoL1xkKy8sKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0KS0xfSkpLG89Yih0LHt0aWNrZm9ybWF0OmF9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQpPDE/dS50aWNrVGV4dChvLHQpLnRleHQ6cih0KX19TC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLEwuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbigpe3JldHVybiBNfSkpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigiZHgiLG51bGwpLmF0dHIoImR5IixudWxsKSxMLmV4aXQoKS5yZW1vdmUoKTt2YXIgSSx6PWYubW9kZStmLmFsaWduO2YuX2hhc0RlbHRhJiYoST1mdW5jdGlvbigpe3ZhciBlPWIodCx7dGlja2Zvcm1hdDpmLmRlbHRhLnZhbHVlZm9ybWF0fSxmLl9yYW5nZSk7ZS5zZXRTY2FsZSgpLHUucHJlcFRpY2tzKGUpO3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiB1LnRpY2tUZXh0KGUsdCkudGV4dH0sYT1mdW5jdGlvbih0KXtyZXR1cm4gZi5kZWx0YS5yZWxhdGl2ZT90LnJlbGF0aXZlRGVsdGE6dC5kZWx0YX0sbz1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09dHx8Im51bWJlciIhPXR5cGVvZiB0fHxpc05hTih0KT8iLSI6KHQ+MD9mLmRlbHRhLmluY3JlYXNpbmcuc3ltYm9sOmYuZGVsdGEuZGVjcmVhc2luZy5zeW1ib2wpK2UodCl9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVsdGE+PTA/Zi5kZWx0YS5pbmNyZWFzaW5nLmNvbG9yOmYuZGVsdGEuZGVjcmVhc2luZy5jb2xvcn07dm9pZCAwPT09Zi5fZGVsdGFMYXN0VmFsdWUmJihmLl9kZWx0YUxhc3RWYWx1ZT1hKHJbMF0pKTt2YXIgcD1FLnNlbGVjdCgidGV4dC5kZWx0YSIpO2Z1bmN0aW9uIGcoKXtwLnRleHQobyhhKHJbMF0pLGkpKS5jYWxsKGQuZmlsbCxoKHJbMF0pKS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHQpfXJldHVybiBwLmNhbGwocy5mb250LGYuZGVsdGEuZm9udCkuY2FsbChkLmZpbGwsaCh7ZGVsdGE6Zi5fZGVsdGFMYXN0VmFsdWV9KSkseShBKT9wLnRyYW5zaXRpb24oKS5kdXJhdGlvbihBLmR1cmF0aW9uKS5lYXNlKEEuZWFzaW5nKS50d2VlbigidGV4dCIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1hKHJbMF0pLHM9Zi5fZGVsdGFMYXN0VmFsdWUsbD1QKGYuZGVsdGEudmFsdWVmb3JtYXQsaSxzLGUpLGM9bi5pbnRlcnBvbGF0ZU51bWJlcihzLGUpO3JldHVybiBmLl9kZWx0YUxhc3RWYWx1ZT1lLGZ1bmN0aW9uKGUpe3QudGV4dChvKGMoZSksbCkpLHQuY2FsbChkLmZpbGwsaCh7ZGVsdGE6YyhlKX0pKX19KSkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtnKCksUyYmUygpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7ZygpLFMmJlMoKX0pKTpnKCksbD1UKG8oYShyWzBdKSxpKSxmLmRlbHRhLmZvbnQsTSx0KSxwfSgpLHorPWYuZGVsdGEucG9zaXRpb24rZi5kZWx0YS5mb250LnNpemUrZi5kZWx0YS5mb250LmZhbWlseStmLmRlbHRhLnZhbHVlZm9ybWF0LHorPWYuZGVsdGEuaW5jcmVhc2luZy5zeW1ib2wrZi5kZWx0YS5kZWNyZWFzaW5nLnN5bWJvbCxoPWwpO2YuX2hhc051bWJlciYmKCFmdW5jdGlvbigpe3ZhciBlPWIodCx7dGlja2Zvcm1hdDpmLm51bWJlci52YWx1ZWZvcm1hdH0sZi5fcmFuZ2UpO2Uuc2V0U2NhbGUoKSx1LnByZXBUaWNrcyhlKTt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gdS50aWNrVGV4dChlLHQpLnRleHR9LGE9Zi5udW1iZXIuc3VmZml4LGw9Zi5udW1iZXIucHJlZml4LGg9RS5zZWxlY3QoInRleHQubnVtYmVyIik7ZnVuY3Rpb24gcCgpe3ZhciBlPSJudW1iZXIiPT10eXBlb2YgclswXS55P2wraShyWzBdLnkpK2E6Ii0iO2gudGV4dChlKS5jYWxsKHMuZm9udCxmLm51bWJlci5mb250KS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHQpfXkoQSk/aC50cmFuc2l0aW9uKCkuZHVyYXRpb24oQS5kdXJhdGlvbikuZWFzZShBLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtwKCksUyYmUygpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7cCgpLFMmJlMoKX0pKS5hdHRyVHdlZW4oInRleHQiLChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9bi5pbnRlcnBvbGF0ZU51bWJlcihyWzBdLmxhc3RZLHJbMF0ueSk7Zi5fbGFzdFZhbHVlPXJbMF0ueTt2YXIgbz1QKGYubnVtYmVyLnZhbHVlZm9ybWF0LGksclswXS5sYXN0WSxyWzBdLnkpO3JldHVybiBmdW5jdGlvbihyKXt0LnRleHQobCtvKGUocikpK2EpfX0pKTpwKCksbz1UKGwraShyWzBdLnkpK2EsZi5udW1iZXIuZm9udCxNLHQpfSgpLHorPWYubnVtYmVyLmZvbnQuc2l6ZStmLm51bWJlci5mb250LmZhbWlseStmLm51bWJlci52YWx1ZWZvcm1hdCtmLm51bWJlci5zdWZmaXgrZi5udW1iZXIucHJlZml4LGg9byk7aWYoZi5faGFzRGVsdGEmJmYuX2hhc051bWJlcil7dmFyIE8sRCxSPVsoby5sZWZ0K28ucmlnaHQpLzIsKG8udG9wK28uYm90dG9tKS8yXSxGPVsobC5sZWZ0K2wucmlnaHQpLzIsKGwudG9wK2wuYm90dG9tKS8yXSxCPS43NSpmLmRlbHRhLmZvbnQuc2l6ZTsibGVmdCI9PT1mLmRlbHRhLnBvc2l0aW9uJiYoTz1rKGYsImRlbHRhUG9zIiwwLC0xKihvLndpZHRoKm1bZi5hbGlnbl0rbC53aWR0aCooMS1tW2YuYWxpZ25dKStCKSx6LE1hdGgubWluKSxEPVJbMV0tRlsxXSxoPXt3aWR0aDpvLndpZHRoK2wud2lkdGgrQixoZWlnaHQ6TWF0aC5tYXgoby5oZWlnaHQsbC5oZWlnaHQpLGxlZnQ6bC5sZWZ0K08scmlnaHQ6by5yaWdodCx0b3A6TWF0aC5taW4oby50b3AsbC50b3ArRCksYm90dG9tOk1hdGgubWF4KG8uYm90dG9tLGwuYm90dG9tK0QpfSksInJpZ2h0Ij09PWYuZGVsdGEucG9zaXRpb24mJihPPWsoZiwiZGVsdGFQb3MiLDAsby53aWR0aCooMS1tW2YuYWxpZ25dKStsLndpZHRoKm1bZi5hbGlnbl0rQix6LE1hdGgubWF4KSxEPVJbMV0tRlsxXSxoPXt3aWR0aDpvLndpZHRoK2wud2lkdGgrQixoZWlnaHQ6TWF0aC5tYXgoby5oZWlnaHQsbC5oZWlnaHQpLGxlZnQ6by5sZWZ0LHJpZ2h0OmwucmlnaHQrTyx0b3A6TWF0aC5taW4oby50b3AsbC50b3ArRCksYm90dG9tOk1hdGgubWF4KG8uYm90dG9tLGwuYm90dG9tK0QpfSksImJvdHRvbSI9PT1mLmRlbHRhLnBvc2l0aW9uJiYoTz1udWxsLEQ9bC5oZWlnaHQsaD17d2lkdGg6TWF0aC5tYXgoby53aWR0aCxsLndpZHRoKSxoZWlnaHQ6by5oZWlnaHQrbC5oZWlnaHQsbGVmdDpNYXRoLm1pbihvLmxlZnQsbC5sZWZ0KSxyaWdodDpNYXRoLm1heChvLnJpZ2h0LGwucmlnaHQpLHRvcDpvLmJvdHRvbS1vLmhlaWdodCxib3R0b206by5ib3R0b20rbC5oZWlnaHR9KSwidG9wIj09PWYuZGVsdGEucG9zaXRpb24mJihPPW51bGwsRD1vLnRvcCxoPXt3aWR0aDpNYXRoLm1heChvLndpZHRoLGwud2lkdGgpLGhlaWdodDpvLmhlaWdodCtsLmhlaWdodCxsZWZ0Ok1hdGgubWluKG8ubGVmdCxsLmxlZnQpLHJpZ2h0Ok1hdGgubWF4KG8ucmlnaHQsbC5yaWdodCksdG9wOm8uYm90dG9tLW8uaGVpZ2h0LWwuaGVpZ2h0LGJvdHRvbTpvLmJvdHRvbX0pLEkuYXR0cih7ZHg6TyxkeTpEfSl9KGYuX2hhc051bWJlcnx8Zi5faGFzRGVsdGEpJiZFLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKCl7dmFyIHQ9YS5udW1iZXJzU2NhbGVyKGgpO3orPXRbMl07dmFyIGUscj1rKGYsIm51bWJlcnNTY2FsZSIsMSx0WzBdLHosTWF0aC5taW4pO2YuX3NjYWxlTnVtYmVyc3x8KHI9MSksZT1mLl9pc0FuZ3VsYXI/eC1yKmguYm90dG9tOngtciooaC50b3AraC5ib3R0b20pLzIsZi5fbnVtYmVyc1RvcD1yKmgudG9wK2U7dmFyIG49aFt3XTsiY2VudGVyIj09PXcmJihuPShoLmxlZnQraC5yaWdodCkvMik7dmFyIGk9cC1yKm47cmV0dXJuIF8oaT1rKGYsIm51bWJlcnNUcmFuc2xhdGUiLDAsaSx6LE1hdGgubWF4KSxlKSsiIHNjYWxlKCIrcisiKSJ9KSl9KHQsTCxlLHtudW1iZXJzWDpoLG51bWJlcnNZOk0sbnVtYmVyc1NjYWxlcjpBLHRyYW5zaXRpb25PcHRzOnIsb25Db21wbGV0ZTpmfSksUCYmKFM9e3JhbmdlOkMuZ2F1Z2UuYXhpcy5yYW5nZSxjb2xvcjpDLmdhdWdlLmJnY29sb3IsbGluZTp7Y29sb3I6Qy5nYXVnZS5ib3JkZXJjb2xvcix3aWR0aDowfSx0aGlja25lc3M6MX0sRT17cmFuZ2U6Qy5nYXVnZS5heGlzLnJhbmdlLGNvbG9yOiJyZ2JhKDAsIDAsIDAsIDApIixsaW5lOntjb2xvcjpDLmdhdWdlLmJvcmRlcmNvbG9yLHdpZHRoOkMuZ2F1Z2UuYm9yZGVyd2lkdGh9LHRoaWNrbmVzczoxfSk7dmFyIHE9TC5zZWxlY3RBbGwoImcuYW5ndWxhciIpLmRhdGEoST9lOltdKTtxLmV4aXQoKS5yZW1vdmUoKTt2YXIgSD1MLnNlbGVjdEFsbCgiZy5hbmd1bGFyYXhpcyIpLmRhdGEoST9lOltdKTtILmV4aXQoKS5yZW1vdmUoKSxJJiZmdW5jdGlvbih0LGUscixpKXt2YXIgcyxsLGMsaCxmPXJbMF0udHJhY2UscD1pLnNpemUsZD1pLnJhZGl1cyxnPWkuaW5uZXJSYWRpdXMsbT1pLmdhdWdlQmcsdj1pLmdhdWdlT3V0bGluZSx3PVtwLmwrcC53LzIscC50K3AuaC8yK2QvMl0sVD1pLmdhdWdlLGs9aS5sYXllcixNPWkudHJhbnNpdGlvbk9wdHMsQT1pLm9uQ29tcGxldGUsUz1NYXRoLlBJLzI7ZnVuY3Rpb24gRSh0KXt2YXIgZT1mLmdhdWdlLmF4aXMucmFuZ2VbMF0scj0odC1lKS8oZi5nYXVnZS5heGlzLnJhbmdlWzFdLWUpKk1hdGguUEktUztyZXR1cm4gcjwtUz8tUzpyPlM/UzpyfWZ1bmN0aW9uIEModCl7cmV0dXJuIG4uc3ZnLmFyYygpLmlubmVyUmFkaXVzKChnK2QpLzItdC8yKihkLWcpKS5vdXRlclJhZGl1cygoZytkKS8yK3QvMiooZC1nKSkuc3RhcnRBbmdsZSgtUyl9ZnVuY3Rpb24gTCh0KXt0LmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gQyh0LnRoaWNrbmVzcykuc3RhcnRBbmdsZShFKHQucmFuZ2VbMF0pKS5lbmRBbmdsZShFKHQucmFuZ2VbMV0pKSgpfSkpfVQuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyIiwhMCksVC5hdHRyKCJ0cmFuc2Zvcm0iLF8od1swXSx3WzFdKSksay5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFuZ3VsYXJheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxrLnNlbGVjdEFsbCgiZy54YW5ndWxhcmF4aXN0aWNrLHBhdGgsdGV4dCIpLnJlbW92ZSgpLChzPWIodCxmLmdhdWdlLmF4aXMpKS50eXBlPSJsaW5lYXIiLHMucmFuZ2U9Zi5nYXVnZS5heGlzLnJhbmdlLHMuX2lkPSJ4YW5ndWxhcmF4aXMiLHMuc2V0U2NhbGUoKTt2YXIgUD1mdW5jdGlvbih0KXtyZXR1cm4ocy5yYW5nZVswXS10LngpLyhzLnJhbmdlWzFdLXMucmFuZ2VbMF0pKk1hdGguUEkrTWF0aC5QSX0sST17fSx6PXUubWFrZUxhYmVsRm5zKHMsMCkubGFiZWxTdGFuZG9mZjtJLnhGbj1mdW5jdGlvbih0KXt2YXIgZT1QKHQpO3JldHVybiBNYXRoLmNvcyhlKSp6fSxJLnlGbj1mdW5jdGlvbih0KXt2YXIgZT1QKHQpLHI9TWF0aC5zaW4oZSk+MD8uMjoxO3JldHVybi1NYXRoLnNpbihlKSooeit0LmZvbnRTaXplKnIpK01hdGguYWJzKE1hdGguY29zKGUpKSoodC5mb250U2l6ZSpvKX0sSS5hbmNob3JGbj1mdW5jdGlvbih0KXt2YXIgZT1QKHQpLHI9TWF0aC5jb3MoZSk7cmV0dXJuIE1hdGguYWJzKHIpPC4xPyJtaWRkbGUiOnI+MD8ic3RhcnQiOiJlbmQifSxJLmhlaWdodEZuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1QKHQpO3JldHVybi0uNSooMStNYXRoLnNpbihuKSkqcn07dmFyIE89ZnVuY3Rpb24odCl7cmV0dXJuIF8od1swXStkKk1hdGguY29zKHQpLHdbMV0tZCpNYXRoLnNpbih0KSl9O2M9ZnVuY3Rpb24odCl7cmV0dXJuIE8oUCh0KSl9O2lmKGw9dS5jYWxjVGlja3MocyksaD11LmdldFRpY2tTaWducyhzKVsyXSxzLnZpc2libGUpe2g9Imluc2lkZSI9PT1zLnRpY2tzPy0xOjE7dmFyIEQ9KHMubGluZXdpZHRofHwxKS8yO3UuZHJhd1RpY2tzKHQscyx7dmFsczpsLGxheWVyOmsscGF0aDoiTSIraCpEKyIsMGgiK2gqcy50aWNrbGVuLHRyYW5zRm46ZnVuY3Rpb24odCl7dmFyIGU9UCh0KTtyZXR1cm4gTyhlKSsicm90YXRlKCIrLWEoZSkrIikifX0pLHUuZHJhd0xhYmVscyh0LHMse3ZhbHM6bCxsYXllcjprLHRyYW5zRm46YyxsYWJlbEZuczpJfSl9dmFyIFI9W21dLmNvbmNhdChmLmdhdWdlLnN0ZXBzKSxGPVQuc2VsZWN0QWxsKCJnLmJnLWFyYyIpLmRhdGEoUik7Ri5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnLWFyYyIsITApLmFwcGVuZCgicGF0aCIpLEYuc2VsZWN0KCJwYXRoIikuY2FsbChMKS5jYWxsKHgpLEYuZXhpdCgpLnJlbW92ZSgpO3ZhciBCPUMoZi5nYXVnZS5iYXIudGhpY2tuZXNzKSxOPVQuc2VsZWN0QWxsKCJnLnZhbHVlLWFyYyIpLmRhdGEoW2YuZ2F1Z2UuYmFyXSk7Ti5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInZhbHVlLWFyYyIsITApLmFwcGVuZCgicGF0aCIpO3ZhciBqPU4uc2VsZWN0KCJwYXRoIik7eShNKT8oai50cmFuc2l0aW9uKCkuZHVyYXRpb24oTS5kdXJhdGlvbikuZWFzZShNLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtBJiZBKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtBJiZBKCl9KSkuYXR0clR3ZWVuKCJkIiwoVT1CLFY9RShyWzBdLmxhc3RZKSxxPUUoclswXS55KSxmdW5jdGlvbigpe3ZhciB0PW4uaW50ZXJwb2xhdGUoVixxKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFUuZW5kQW5nbGUodChlKSkoKX19KSksZi5fbGFzdFZhbHVlPXJbMF0ueSk6ai5hdHRyKCJkIiwibnVtYmVyIj09dHlwZW9mIHJbMF0ueT9CLmVuZEFuZ2xlKEUoclswXS55KSk6Ik0wLDBaIik7dmFyIFUsVixxO2ouY2FsbCh4KSxOLmV4aXQoKS5yZW1vdmUoKSxSPVtdO3ZhciBIPWYuZ2F1Z2UudGhyZXNob2xkLnZhbHVlO0gmJlIucHVzaCh7cmFuZ2U6W0gsSF0sY29sb3I6Zi5nYXVnZS50aHJlc2hvbGQuY29sb3IsbGluZTp7Y29sb3I6Zi5nYXVnZS50aHJlc2hvbGQubGluZS5jb2xvcix3aWR0aDpmLmdhdWdlLnRocmVzaG9sZC5saW5lLndpZHRofSx0aGlja25lc3M6Zi5nYXVnZS50aHJlc2hvbGQudGhpY2tuZXNzfSk7dmFyIEc9VC5zZWxlY3RBbGwoImcudGhyZXNob2xkLWFyYyIpLmRhdGEoUik7Ry5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRocmVzaG9sZC1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKSxHLnNlbGVjdCgicGF0aCIpLmNhbGwoTCkuY2FsbCh4KSxHLmV4aXQoKS5yZW1vdmUoKTt2YXIgWT1ULnNlbGVjdEFsbCgiZy5nYXVnZS1vdXRsaW5lIikuZGF0YShbdl0pO1kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJnYXVnZS1vdXRsaW5lIiwhMCkuYXBwZW5kKCJwYXRoIiksWS5zZWxlY3QoInBhdGgiKS5jYWxsKEwpLmNhbGwoeCksWS5leGl0KCkucmVtb3ZlKCl9KHQsMCxlLHtyYWRpdXM6Qixpbm5lclJhZGl1czpOLGdhdWdlOnEsbGF5ZXI6SCxzaXplOkQsZ2F1Z2VCZzpTLGdhdWdlT3V0bGluZTpFLHRyYW5zaXRpb25PcHRzOnIsb25Db21wbGV0ZTpmfSk7dmFyIEc9TC5zZWxlY3RBbGwoImcuYnVsbGV0IikuZGF0YSh6P2U6W10pO0cuZXhpdCgpLnJlbW92ZSgpO3ZhciBZPUwuc2VsZWN0QWxsKCJnLmJ1bGxldGF4aXMiKS5kYXRhKHo/ZTpbXSk7WS5leGl0KCkucmVtb3ZlKCkseiYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsYyxoPXJbMF0udHJhY2UsZj1uLmdhdWdlLHA9bi5sYXllcixnPW4uZ2F1Z2VCZyxtPW4uZ2F1Z2VPdXRsaW5lLHY9bi5zaXplLF89aC5kb21haW4sdz1uLnRyYW5zaXRpb25PcHRzLFQ9bi5vbkNvbXBsZXRlO2YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidWxsZXQiLCEwKSxmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YubCsiLCAiK3YudCsiKSIpLHAuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidWxsZXRheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxwLnNlbGVjdEFsbCgiZy54YnVsbGV0YXhpc3RpY2sscGF0aCx0ZXh0IikucmVtb3ZlKCk7dmFyIGs9di5oLE09aC5nYXVnZS5iYXIudGhpY2tuZXNzKmssQT1fLnhbMF0sUz1fLnhbMF0rKF8ueFsxXS1fLnhbMF0pKihoLl9oYXNOdW1iZXJ8fGguX2hhc0RlbHRhPzEtbC5idWxsZXROdW1iZXJEb21haW5TaXplOjEpOyhpPWIodCxoLmdhdWdlLmF4aXMpKS5faWQ9InhidWxsZXRheGlzIixpLmRvbWFpbj1bQSxTXSxpLnNldFNjYWxlKCksYT11LmNhbGNUaWNrcyhpKSxvPXUubWFrZVRyYW5zRm4oaSkscz11LmdldFRpY2tTaWducyhpKVsyXSxjPXYudCt2LmgsaS52aXNpYmxlJiYodS5kcmF3VGlja3ModCxpLHt2YWxzOiJpbnNpZGUiPT09aS50aWNrcz91LmNsaXBFbmRzKGksYSk6YSxsYXllcjpwLHBhdGg6dS5tYWtlVGlja1BhdGgoaSxjLHMpLHRyYW5zRm46b30pLHUuZHJhd0xhYmVscyh0LGkse3ZhbHM6YSxsYXllcjpwLHRyYW5zRm46byxsYWJlbEZuczp1Lm1ha2VMYWJlbEZucyhpLGMpfSkpO2Z1bmN0aW9uIEUodCl7dC5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLGkuYzJwKHQucmFuZ2VbMV0pLWkuYzJwKHQucmFuZ2VbMF0pKX0pKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGkuYzJwKHQucmFuZ2VbMF0pfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4uNSooMS10LnRoaWNrbmVzcykqa30pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aGlja25lc3Mqa30pKX12YXIgQz1bZ10uY29uY2F0KGguZ2F1Z2Uuc3RlcHMpLEw9Zi5zZWxlY3RBbGwoImcuYmctYnVsbGV0IikuZGF0YShDKTtMLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYmctYnVsbGV0IiwhMCkuYXBwZW5kKCJyZWN0IiksTC5zZWxlY3QoInJlY3QiKS5jYWxsKEUpLmNhbGwoeCksTC5leGl0KCkucmVtb3ZlKCk7dmFyIFA9Zi5zZWxlY3RBbGwoImcudmFsdWUtYnVsbGV0IikuZGF0YShbaC5nYXVnZS5iYXJdKTtQLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidmFsdWUtYnVsbGV0IiwhMCkuYXBwZW5kKCJyZWN0IiksUC5zZWxlY3QoInJlY3QiKS5hdHRyKCJoZWlnaHQiLE0pLmF0dHIoInkiLChrLU0pLzIpLmNhbGwoeCkseSh3KT9QLnNlbGVjdCgicmVjdCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih3LmR1cmF0aW9uKS5lYXNlKHcuZWFzaW5nKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe1QmJlQoKX0pKS5lYWNoKCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe1QmJlQoKX0pKS5hdHRyKCJ3aWR0aCIsTWF0aC5tYXgoMCxpLmMycChNYXRoLm1pbihoLmdhdWdlLmF4aXMucmFuZ2VbMV0sclswXS55KSkpKTpQLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIiwibnVtYmVyIj09dHlwZW9mIHJbMF0ueT9NYXRoLm1heCgwLGkuYzJwKE1hdGgubWluKGguZ2F1Z2UuYXhpcy5yYW5nZVsxXSxyWzBdLnkpKSk6MCk7UC5leGl0KCkucmVtb3ZlKCk7dmFyIEk9ci5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIGguZ2F1Z2UudGhyZXNob2xkLnZhbHVlfSkpLHo9Zi5zZWxlY3RBbGwoImcudGhyZXNob2xkLWJ1bGxldCIpLmRhdGEoSSk7ei5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRocmVzaG9sZC1idWxsZXQiLCEwKS5hcHBlbmQoImxpbmUiKSx6LnNlbGVjdCgibGluZSIpLmF0dHIoIngxIixpLmMycChoLmdhdWdlLnRocmVzaG9sZC52YWx1ZSkpLmF0dHIoIngyIixpLmMycChoLmdhdWdlLnRocmVzaG9sZC52YWx1ZSkpLmF0dHIoInkxIiwoMS1oLmdhdWdlLnRocmVzaG9sZC50aGlja25lc3MpLzIqaykuYXR0cigieTIiLCgxLSgxLWguZ2F1Z2UudGhyZXNob2xkLnRoaWNrbmVzcykvMikqaykuY2FsbChkLnN0cm9rZSxoLmdhdWdlLnRocmVzaG9sZC5saW5lLmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixoLmdhdWdlLnRocmVzaG9sZC5saW5lLndpZHRoKSx6LmV4aXQoKS5yZW1vdmUoKTt2YXIgTz1mLnNlbGVjdEFsbCgiZy5nYXVnZS1vdXRsaW5lIikuZGF0YShbbV0pO08uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJnYXVnZS1vdXRsaW5lIiwhMCkuYXBwZW5kKCJyZWN0IiksTy5zZWxlY3QoInJlY3QiKS5jYWxsKEUpLmNhbGwoeCksTy5leGl0KCkucmVtb3ZlKCl9KHQsMCxlLHtnYXVnZTpHLGxheWVyOlksc2l6ZTpELGdhdWdlQmc6UyxnYXVnZU91dGxpbmU6RSx0cmFuc2l0aW9uT3B0czpyLG9uQ29tcGxldGU6Zn0pO3ZhciBXPUwuc2VsZWN0QWxsKCJ0ZXh0LnRpdGxlIikuZGF0YShlKTtXLmV4aXQoKS5yZW1vdmUoKSxXLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgidGl0bGUiLCEwKSxXLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gej9nLnJpZ2h0OmdbQy50aXRsZS5hbGlnbl19KSkudGV4dChDLnRpdGxlLnRleHQpLmNhbGwocy5mb250LEMudGl0bGUuZm9udCkuY2FsbChjLmNvbnZlcnRUb1RzcGFucyx0KSxXLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKCl7dmFyIHQsZT1ELmwrRC53Km1bQy50aXRsZS5hbGlnbl0scj1sLnRpdGxlUGFkZGluZyxuPXMuYkJveChXLm5vZGUoKSk7aWYoUCl7aWYoSSlpZihDLmdhdWdlLmF4aXMudmlzaWJsZSl0PXMuYkJveChILm5vZGUoKSkudG9wLXItbi5ib3R0b207ZWxzZSB0PUQudCtELmgvMi1CLzItbi5ib3R0b20tcjt6JiYodD1NLShuLnRvcCtuLmJvdHRvbSkvMixlPUQubC1sLmJ1bGxldFBhZGRpbmcqRC53KX1lbHNlIHQ9Qy5fbnVtYmVyc1RvcC1yLW4uYm90dG9tO3JldHVybiBfKGUsdCl9KSl9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MzcsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjcxNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6Nzc0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6ODAxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIjo4MTYsIi4vY29uc3RhbnRzIjoxMDkwLGQzOjE2OX1dLDEwOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsYT10KCIuLi9tZXNoM2QvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7dmFyIGM9ZS5leHBvcnRzPWwocyh7eDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdmFsdWU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxpc29taW46e3ZhbFR5cGU6Im51bWJlciJ9LGlzb21heDp7dmFsVHlwZToibnVtYmVyIn0sc3VyZmFjZTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sY291bnQ6e3ZhbFR5cGU6ImludGVnZXIiLGRmbHQ6MixtaW46MX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHBhdHRlcm46e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIkEiLCJCIiwiQyIsIkQiLCJFIl0sZXh0cmFzOlsiYWxsIiwib2RkIiwiZXZlbiJdLGRmbHQ6ImFsbCJ9fSxzcGFjZWZyYW1lOntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjE1fX0sc2xpY2VzOnt4OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0seTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHo6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fX0sY2Fwczp7eDp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx5OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHo6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX19LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwfSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwfSxob3ZlcnRlbXBsYXRlOmkoKSxzaG93bGVnZW5kOnMoe30sby5zaG93bGVnZW5kLHtkZmx0OiExfSl9LG4oIiIse2NvbG9yQXR0cjoiYHZhbHVlYCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtvcGFjaXR5OmEub3BhY2l0eSxsaWdodHBvc2l0aW9uOmEubGlnaHRwb3NpdGlvbixsaWdodGluZzphLmxpZ2h0aW5nLGZsYXRzaGFkaW5nOmEuZmxhdHNoYWRpbmcsY29udG91cjphLmNvbnRvdXIsaG92ZXJpbmZvOnMoe30sby5ob3ZlcmluZm8pfSksImNhbGMiLCJuZXN0ZWQiKTtjLmZsYXRzaGFkaW5nLmRmbHQ9ITAsYy5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24uZGZsdD0wLGMueC5lZGl0VHlwZT1jLnkuZWRpdFR5cGU9Yy56LmVkaXRUeXBlPWMudmFsdWUuZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGMudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYyMiwiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3ODEsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc5NSwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODc3LCIuLi9tZXNoM2QvYXR0cmlidXRlcyI6MTA5OX1dLDEwOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxpPXQoIi4uL3N0cmVhbXR1YmUvY2FsYyIpLnByb2Nlc3NHcmlkLGE9dCgiLi4vc3RyZWFtdHViZS9jYWxjIikuZmlsdGVyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuX2xlbj1NYXRoLm1pbihlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCxlLnZhbHVlLmxlbmd0aCksZS5feD1hKGUueCxlLl9sZW4pLGUuX3k9YShlLnksZS5fbGVuKSxlLl96PWEoZS56LGUuX2xlbiksZS5fdmFsdWU9YShlLnZhbHVlLGUuX2xlbik7dmFyIHI9aShlKTtlLl9ncmlkRmlsbD1yLmZpbGwsZS5fWHM9ci5YcyxlLl9Zcz1yLllzLGUuX1pzPXIuWnMsZS5fbGVuPXIubGVuO2Zvcih2YXIgbz0xLzAscz0tMS8wLGw9MDtsPGUuX2xlbjtsKyspe3ZhciBjPWUuX3ZhbHVlW2xdO289TWF0aC5taW4obyxjKSxzPU1hdGgubWF4KHMsYyl9ZS5fbWluVmFsdWVzPW8sZS5fbWF4VmFsdWVzPXMsZS5fdk1pbj12b2lkIDA9PT1lLmlzb21pbnx8bnVsbD09PWUuaXNvbWluP286ZS5pc29taW4sZS5fdk1heD12b2lkIDA9PT1lLmlzb21heHx8bnVsbD09PWUuaXNvbWluP3M6ZS5pc29tYXgsbih0LGUse3ZhbHM6W2UuX3ZNaW4sZS5fdk1heF0sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MjMsIi4uL3N0cmVhbXR1YmUvY2FsYyI6MTI2Nn1dLDEwOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbWVzaDNkIiksaT10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLGE9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMscz10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKSxsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLTE7cj4wO3ItLSl7dmFyIG49TWF0aC5taW4oZVtyXSxlW3ItMV0pLGk9TWF0aC5tYXgoZVtyXSxlW3ItMV0pO2lmKGk+biYmbjx0JiZ0PD1pKXJldHVybntpZDpyLGRpc3RSYXRpbzooaS10KS8oaS1uKX19cmV0dXJue2lkOjAsZGlzdFJhdGlvOjB9fTtmdW5jdGlvbiBjKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5fbWVzaFhbZV0sbj10aGlzLmRhdGEuX21lc2hZW2VdLGk9dGhpcy5kYXRhLl9tZXNoWltlXSxhPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgscz1sKHIsdGhpcy5kYXRhLl9YcykuaWQsYz1sKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1sKGksdGhpcy5kYXRhLl9acykuaWQsaD10LmluZGV4PXUrbypjK28qYSpzO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX21lc2hYW2hdLHRoaXMuZGF0YS5fbWVzaFlbaF0sdGhpcy5kYXRhLl9tZXNoWltoXSx0aGlzLmRhdGEuX3ZhbHVlW2hdXTt2YXIgZj10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShmKSYmdm9pZCAwIT09ZltoXT90LnRleHRMYWJlbD1mW2hdOmYmJih0LnRleHRMYWJlbD1mKSwhMH19LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDtmdW5jdGlvbiBuKHQsZSxyLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSkpfXRoaXMuZGF0YT1mKHQpO3ZhciBsPXtwb3NpdGlvbnM6cyhuKHIueGF4aXMsdC5fbWVzaFgsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll9tZXNoWSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksbihyLnpheGlzLHQuX21lc2haLGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6cyh0Ll9tZXNoSSx0Ll9tZXNoSix0Ll9tZXNoSyksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmEodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9LGM9byh0KTtsLnZlcnRleEludGVuc2l0eT10Ll9tZXNoSW50ZW5zaXR5LGwudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtjLm1pbixjLm1heF0sbC5jb2xvcm1hcD1pKHQpLHRoaXMubWVzaC51cGRhdGUobCl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9O3ZhciBoPVsieHl6IiwieHp5IiwieXh6IiwieXp4Iiwienh5Iiwienl4Il07ZnVuY3Rpb24gZih0KXt0Ll9tZXNoST1bXSx0Ll9tZXNoSj1bXSx0Ll9tZXNoSz1bXTt2YXIgZSxyLG4saSxhLG8scyxjPXQuc3VyZmFjZS5zaG93LHU9dC5zcGFjZWZyYW1lLnNob3csZj10LnN1cmZhY2UuZmlsbCxwPXQuc3BhY2VmcmFtZS5maWxsLGQ9ITEsZz0hMSxtPTAsdj10Ll9Ycyx5PXQuX1lzLHg9dC5fWnMsYj12Lmxlbmd0aCxfPXkubGVuZ3RoLHc9eC5sZW5ndGgsVD1oLmluZGV4T2YodC5fZ3JpZEZpbGwucmVwbGFjZSgvLS9nLCIiKS5yZXBsYWNlKC9cKy9nLCIiKSksaz1mdW5jdGlvbih0LGUscil7c3dpdGNoKFQpe2Nhc2UgNTpyZXR1cm4gcit3KmUrdypfKnQ7Y2FzZSA0OnJldHVybiByK3cqdCt3KmIqZTtjYXNlIDM6cmV0dXJuIGUrXypyK18qdyp0O2Nhc2UgMjpyZXR1cm4gZStfKnQrXypiKnI7Y2FzZSAxOnJldHVybiB0K2IqcitiKncqZTtkZWZhdWx0OnJldHVybiB0K2IqZStiKl8qcn19LE09dC5fbWluVmFsdWVzLEE9dC5fbWF4VmFsdWVzLFM9dC5fdk1pbixFPXQuX3ZNYXg7ZnVuY3Rpb24gQyh0LGUscyl7Zm9yKHZhciBsPW8ubGVuZ3RoLGM9cjtjPGw7YysrKWlmKHQ9PT1uW2NdJiZlPT09aVtjXSYmcz09PWFbY10pcmV0dXJuIGM7cmV0dXJuLTF9ZnVuY3Rpb24gTCgpe3I9ZX1mdW5jdGlvbiBQKCl7bj1bXSxpPVtdLGE9W10sbz1bXSxlPTAsTCgpfWZ1bmN0aW9uIEkodCxyLHMsbCl7cmV0dXJuIG4ucHVzaCh0KSxpLnB1c2gociksYS5wdXNoKHMpLG8ucHVzaChsKSwrK2UtMX1mdW5jdGlvbiB6KHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKW5baV09dFtpXSooMS1yKStyKmVbaV07cmV0dXJuIG59ZnVuY3Rpb24gTyh0KXtzPXR9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiJhbGwiPT09dHx8bnVsbD09PXR8fHQuaW5kZXhPZihlKT4tMX1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuIG51bGw9PT10P2U6dH1mdW5jdGlvbiBGKGUscixuKXtMKCk7dmFyIGksYSxvLGw9W3JdLGM9W25dO2lmKHM+PTEpbD1bcl0sYz1bbl07ZWxzZSBpZihzPjApe3ZhciB1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspbltpXT0odFtpXStlW2ldK3JbaV0pLzM7cmV0dXJuIG59KHIsbixpKSxvPU1hdGguc3FydCgxLXMpLGw9eihhLHIsbyksYz16KGEsbixvKSx1PXooYSxpLG8pLGg9ZVswXSxmPWVbMV0scD1lWzJdO3JldHVybnt4eXp2OltbcixuLGNdLFtjLGwscl0sW24saSx1XSxbdSxjLG5dLFtpLHIsbF0sW2wsdSxpXV0sYWJjOltbaCxmLC0xXSxbLTEsLTEsaF0sW2YscCwtMV0sWy0xLC0xLGZdLFtwLGgsLTFdLFstMSwtMSxwXV19fShyLG4pO2w9dS54eXp2LGM9dS5hYmN9Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspe3I9bFtoXSxuPWNbaF07Zm9yKHZhciBmPVtdLHA9MDtwPDM7cCsrKXt2YXIgZD1yW3BdWzBdLGc9cltwXVsxXSx2PXJbcF1bMl0seT1yW3BdWzNdLHg9bltwXT4tMT9uW3BdOkMoZCxnLHYpO2ZbcF09eD4tMT94OkkoZCxnLHYsUihlLHkpKX1pPWZbMF0sYT1mWzFdLG89ZlsyXSx0Ll9tZXNoSS5wdXNoKGkpLHQuX21lc2hKLnB1c2goYSksdC5fbWVzaEsucHVzaChvKSwrK219fWZ1bmN0aW9uIEIodCxlLHIsbil7dmFyIGk9dFszXTtpPHImJihpPXIpLGk+biYmKGk9bik7Zm9yKHZhciBhPSh0WzNdLWkpLyh0WzNdLWVbM10rMWUtOSksbz1bXSxzPTA7czw0O3MrKylvW3NdPSgxLWEpKnRbc10rYSplW3NdO3JldHVybiBvfWZ1bmN0aW9uIE4odCxlLHIpe3JldHVybiB0Pj1lJiZ0PD1yfWZ1bmN0aW9uIGoodCl7dmFyIGU9LjAwMSooRS1TKTtyZXR1cm4gdD49Uy1lJiZ0PD1FK2V9ZnVuY3Rpb24gVShlKXtmb3IodmFyIHI9W10sbj0wO248NDtuKyspe3ZhciBpPWVbbl07ci5wdXNoKFt0Ll94W2ldLHQuX3lbaV0sdC5feltpXSx0Ll92YWx1ZVtpXV0pfXJldHVybiByfWZ1bmN0aW9uIFYodCxlLHIsbixpLGEpe2F8fChhPTEpLHI9Wy0xLC0xLC0xXTt2YXIgbz0hMSxzPVtOKGVbMF1bM10sbixpKSxOKGVbMV1bM10sbixpKSxOKGVbMl1bM10sbixpKV07aWYoIXNbMF0mJiFzWzFdJiYhc1syXSlyZXR1cm4hMTt2YXIgbD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGooZVswXVszXSkmJmooZVsxXVszXSkmJmooZVsyXVszXSk/KEYodCxlLHIpLCEwKTphPDMmJlYodCxlLHIsUyxFLCsrYSl9O2lmKHNbMF0mJnNbMV0mJnNbMl0pcmV0dXJuIGwodCxlLHIpfHxvO3ZhciBjPSExO3JldHVybltbMCwxLDJdLFsyLDAsMV0sWzEsMiwwXV0uZm9yRWFjaCgoZnVuY3Rpb24oYSl7aWYoc1thWzBdXSYmc1thWzFdXSYmIXNbYVsyXV0pe3ZhciB1PWVbYVswXV0saD1lW2FbMV1dLGY9ZVthWzJdXSxwPUIoZix1LG4saSksZD1CKGYsaCxuLGkpO289bCh0LFtkLHAsdV0sWy0xLC0xLHJbYVswXV1dKXx8byxvPWwodCxbdSxoLGRdLFtyW2FbMF1dLHJbYVsxXV0sLTFdKXx8byxjPSEwfX0pKSxjfHxbWzAsMSwyXSxbMSwyLDBdLFsyLDAsMV1dLmZvckVhY2goKGZ1bmN0aW9uKGEpe2lmKHNbYVswXV0mJiFzW2FbMV1dJiYhc1thWzJdXSl7dmFyIHU9ZVthWzBdXSxoPWVbYVsxXV0sZj1lW2FbMl1dLHA9QihoLHUsbixpKSxkPUIoZix1LG4saSk7bz1sKHQsW2QscCx1XSxbLTEsLTEsclthWzBdXV0pfHxvLGM9ITB9fSkpLG99ZnVuY3Rpb24gcSh0LGUscixuKXt2YXIgaT0hMSxhPVUoZSksbz1bTihhWzBdWzNdLHIsbiksTihhWzFdWzNdLHIsbiksTihhWzJdWzNdLHIsbiksTihhWzNdWzNdLHIsbildO2lmKCEob1swXXx8b1sxXXx8b1syXXx8b1szXSkpcmV0dXJuIGk7aWYob1swXSYmb1sxXSYmb1syXSYmb1szXSlyZXR1cm4gZyYmKGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKG4saSxhKXtGKHQsW2Vbbl0sZVtpXSxlW2FdXSxbcltuXSxyW2ldLHJbYV1dKX07bigwLDEsMiksbigzLDAsMSksbigyLDMsMCksbigxLDIsMyl9KHQsYSxlKXx8aSksaTt2YXIgcz0hMTtyZXR1cm5bWzAsMSwyLDNdLFszLDAsMSwyXSxbMiwzLDAsMV0sWzEsMiwzLDBdXS5mb3JFYWNoKChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiZvW2xbMV1dJiZvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9YVtsWzBdXSx1PWFbbFsxXV0saD1hW2xbMl1dLGY9YVtsWzNdXTtpZihnKWk9Rih0LFtjLHUsaF0sW2VbbFswXV0sZVtsWzFdXSxlW2xbMl1dXSl8fGk7ZWxzZXt2YXIgcD1CKGYsYyxyLG4pLGQ9QihmLHUscixuKSxtPUIoZixoLHIsbik7aT1GKG51bGwsW3AsZCxtXSxbLTEsLTEsLTFdKXx8aX1zPSEwfX0pKSxzP2k6KFtbMCwxLDIsM10sWzEsMiwzLDBdLFsyLDMsMCwxXSxbMywwLDEsMl0sWzAsMiwzLDFdLFsxLDMsMiwwXV0uZm9yRWFjaCgoZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLHU9YVtsWzFdXSxoPWFbbFsyXV0sZj1hW2xbM11dLHA9QihoLGMscixuKSxkPUIoaCx1LHIsbiksbT1CKGYsdSxyLG4pLHY9QihmLGMscixuKTtnPyhpPUYodCxbYyx2LHBdLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1GKHQsW3UsZCxtXSxbZVtsWzFdXSwtMSwtMV0pfHxpKTppPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbihuLGksYSl7Rih0LFtlW25dLGVbaV0sZVthXV0sW3Jbbl0scltpXSxyW2FdXSl9O24oMCwxLDIpLG4oMiwzLDApfShudWxsLFtwLGQsbSx2XSxbLTEsLTEsLTEsLTFdKXx8aSxzPSEwfX0pKSxzfHxbWzAsMSwyLDNdLFsxLDIsMywwXSxbMiwzLDAsMV0sWzMsMCwxLDJdXS5mb3JFYWNoKChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiYhb1tsWzFdXSYmIW9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLHU9YVtsWzFdXSxoPWFbbFsyXV0sZj1hW2xbM11dLHA9Qih1LGMscixuKSxkPUIoaCxjLHIsbiksbT1CKGYsYyxyLG4pO2c/KGk9Rih0LFtjLHAsZF0sW2VbbFswXV0sLTEsLTFdKXx8aSxpPUYodCxbYyxkLG1dLFtlW2xbMF1dLC0xLC0xXSl8fGksaT1GKHQsW2MsbSxwXSxbZVtsWzBdXSwtMSwtMV0pfHxpKTppPUYobnVsbCxbcCxkLG1dLFstMSwtMSwtMV0pfHxpLHM9ITB9fSkpLGkpfWZ1bmN0aW9uIEgodCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgaD0hMTtyZXR1cm4gZCYmKEQodCwiQSIpJiYoaD1xKG51bGwsW2UscixuLGFdLGMsdSl8fGgpLEQodCwiQiIpJiYoaD1xKG51bGwsW3IsbixpLGxdLGMsdSl8fGgpLEQodCwiQyIpJiYoaD1xKG51bGwsW3IsYSxvLGxdLGMsdSl8fGgpLEQodCwiRCIpJiYoaD1xKG51bGwsW24sYSxzLGxdLGMsdSl8fGgpLEQodCwiRSIpJiYoaD1xKG51bGwsW3IsbixhLGxdLGMsdSl8fGgpKSxnJiYoaD1xKHQsW3IsbixhLGxdLGMsdSl8fGgpLGh9ZnVuY3Rpb24gRyh0LGUscixuLGksYSxvLHMpe3JldHVyblshMD09PXNbMF18fFYodCxVKFtlLHIsbl0pLFtlLHIsbl0sYSxvKSwhMD09PXNbMV18fFYodCxVKFtuLGksZV0pLFtuLGksZV0sYSxvKV19ZnVuY3Rpb24gWSh0LGUscixuLGksYSxvLHMsbCl7cmV0dXJuIHM/Ryh0LGUscixpLG4sYSxvLGwpOkcodCxyLGksbixlLGEsbyxsKX1mdW5jdGlvbiBXKHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGg9ITEsZj1mdW5jdGlvbigpe2g9Vih0LFtzLGwsY10sWy0xLC0xLC0xXSxpLGEpfHxoLGg9Vih0LFtjLHUsc10sWy0xLC0xLC0xXSxpLGEpfHxofSxwPW9bMF0sZD1vWzFdLGc9b1syXTtyZXR1cm4gcCYmKHM9eihVKFtrKGUsci0wLG4tMCldKVswXSxVKFtrKGUtMSxyLTAsbi0wKV0pWzBdLHApLGw9eihVKFtrKGUsci0wLG4tMSldKVswXSxVKFtrKGUtMSxyLTAsbi0xKV0pWzBdLHApLGM9eihVKFtrKGUsci0xLG4tMSldKVswXSxVKFtrKGUtMSxyLTEsbi0xKV0pWzBdLHApLHU9eihVKFtrKGUsci0xLG4tMCldKVswXSxVKFtrKGUtMSxyLTEsbi0wKV0pWzBdLHApLGYoKSksZCYmKHM9eihVKFtrKGUtMCxyLG4tMCldKVswXSxVKFtrKGUtMCxyLTEsbi0wKV0pWzBdLGQpLGw9eihVKFtrKGUtMCxyLG4tMSldKVswXSxVKFtrKGUtMCxyLTEsbi0xKV0pWzBdLGQpLGM9eihVKFtrKGUtMSxyLG4tMSldKVswXSxVKFtrKGUtMSxyLTEsbi0xKV0pWzBdLGQpLHU9eihVKFtrKGUtMSxyLG4tMCldKVswXSxVKFtrKGUtMSxyLTEsbi0wKV0pWzBdLGQpLGYoKSksZyYmKHM9eihVKFtrKGUtMCxyLTAsbildKVswXSxVKFtrKGUtMCxyLTAsbi0xKV0pWzBdLGcpLGw9eihVKFtrKGUtMCxyLTEsbildKVswXSxVKFtrKGUtMCxyLTEsbi0xKV0pWzBdLGcpLGM9eihVKFtrKGUtMSxyLTEsbildKVswXSxVKFtrKGUtMSxyLTEsbi0xKV0pWzBdLGcpLHU9eihVKFtrKGUtMSxyLTAsbildKVswXSxVKFtrKGUtMSxyLTAsbi0xKV0pWzBdLGcpLGYoKSksaH1mdW5jdGlvbiBaKHQsZSxyLG4saSxhLG8scyxsLGMsdSxoKXt2YXIgZj10O3JldHVybiBoPyhkJiYiZXZlbiI9PT10JiYoZj1udWxsKSxIKGYsZSxyLG4saSxhLG8scyxsLGMsdSkpOihkJiYib2RkIj09PXQmJihmPW51bGwpLEgoZixsLHMsbyxhLGksbixyLGUsYyx1KSl9ZnVuY3Rpb24gWCh0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPHc7YysrKWZvcih2YXIgdT0xO3U8Xzt1KyspYS5wdXNoKFkodCxrKGwsdS0xLGMtMSksayhsLHUtMSxjKSxrKGwsdSxjLTEpLGsobCx1LGMpLHIsbiwobCt1K2MpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uIEoodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7YzxiO2MrKylmb3IodmFyIHU9MTt1PHc7dSsrKWEucHVzaChZKHQsayhjLTEsbCx1LTEpLGsoYyxsLHUtMSksayhjLTEsbCx1KSxrKGMsbCx1KSxyLG4sKGMrbCt1KSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBLKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8XztjKyspZm9yKHZhciB1PTE7dTxiO3UrKylhLnB1c2goWSh0LGsodS0xLGMtMSxsKSxrKHUtMSxjLGwpLGsodSxjLTEsbCksayh1LGMsbCkscixuLCh1K2MrbCklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gUSh0LGUscil7Zm9yKHZhciBuPTE7bjx3O24rKylmb3IodmFyIGk9MTtpPF87aSsrKWZvcih2YXIgYT0xO2E8YjthKyspWih0LGsoYS0xLGktMSxuLTEpLGsoYS0xLGktMSxuKSxrKGEtMSxpLG4tMSksayhhLTEsaSxuKSxrKGEsaS0xLG4tMSksayhhLGktMSxuKSxrKGEsaSxuLTEpLGsoYSxpLG4pLGUsciwoYStpK24pJTIpfWZ1bmN0aW9uICQodCxlLHIpe2Q9ITAsUSh0LGUsciksZD0hMX1mdW5jdGlvbiB0dCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8dzt1KyspZm9yKHZhciBoPTE7aDxfO2grKylvLnB1c2goVyh0LGMsaCx1LHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gZXQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PGI7dSsrKWZvcih2YXIgaD0xO2g8dztoKyspby5wdXNoKFcodCx1LGMsaCxyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIHJ0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTxfO3UrKylmb3IodmFyIGg9MTtoPGI7aCsrKW8ucHVzaChXKHQsaCx1LGMscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBudCh0LGUpe2Zvcih2YXIgcj1bXSxuPXQ7bjxlO24rKylyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIGZ1bmN0aW9uKCl7aWYoUCgpLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxiO2UrKylmb3IodmFyIHI9MDtyPF87cisrKWZvcih2YXIgbj0wO248dztuKyspe3ZhciBpPWsoZSxyLG4pO0kodC5feFtpXSx0Ll95W2ldLHQuX3pbaV0sdC5fdmFsdWVbaV0pfX0oKSx1JiZwJiYoTyhwKSxnPSEwLFEobnVsbCxTLEUpLGc9ITEpLGMmJmYpe08oZik7Zm9yKHZhciBlPXQuc3VyZmFjZS5wYXR0ZXJuLHI9dC5zdXJmYWNlLmNvdW50LHM9MDtzPHI7cysrKXt2YXIgaD0xPT09cj8uNTpzLyhyLTEpLGQ9KDEtaCkqUytoKkUsVD1NYXRoLmFicyhkLU0pPk1hdGguYWJzKGQtQSk/W00sZF06W2QsQV07JChlLFRbMF0sVFsxXSl9fXZhciBDPVtbTWF0aC5taW4oUyxBKSxNYXRoLm1heChTLEEpXSxbTWF0aC5taW4oTSxFKSxNYXRoLm1heChNLEUpXV07WyJ4IiwieSIsInoiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtmb3IodmFyIHI9W10sbj0wO248Qy5sZW5ndGg7bisrKXt2YXIgaT0wLGE9Q1tuXVswXSxvPUNbbl1bMV0scz10LnNsaWNlc1tlXTtpZihzLnNob3cmJnMuZmlsbCl7TyhzLmZpbGwpO3ZhciBjPVtdLHU9W10saD1bXTtpZihzLmxvY2F0aW9ucy5sZW5ndGgpZm9yKHZhciBmPTA7ZjxzLmxvY2F0aW9ucy5sZW5ndGg7ZisrKXt2YXIgcD1sKHMubG9jYXRpb25zW2ZdLCJ4Ij09PWU/djoieSI9PT1lP3k6eCk7MD09PXAuZGlzdFJhdGlvP2MucHVzaChwLmlkKTpwLmlkPjAmJih1LnB1c2gocC5pZCksIngiPT09ZT9oLnB1c2goW3AuZGlzdFJhdGlvLDAsMF0pOiJ5Ij09PWU/aC5wdXNoKFswLHAuZGlzdFJhdGlvLDBdKTpoLnB1c2goWzAsMCxwLmRpc3RSYXRpb10pKX1lbHNlIGM9bnQoMSwieCI9PT1lP2ItMToieSI9PT1lP18tMTp3LTEpO3UubGVuZ3RoPjAmJihyW2ldPSJ4Ij09PWU/dHQobnVsbCx1LGEsbyxoLHJbaV0pOiJ5Ij09PWU/ZXQobnVsbCx1LGEsbyxoLHJbaV0pOnJ0KG51bGwsdSxhLG8saCxyW2ldKSxpKyspLGMubGVuZ3RoPjAmJihyW2ldPSJ4Ij09PWU/WChudWxsLGMsYSxvLHJbaV0pOiJ5Ij09PWU/SihudWxsLGMsYSxvLHJbaV0pOksobnVsbCxjLGEsbyxyW2ldKSxpKyspfXZhciBkPXQuY2Fwc1tlXTtkLnNob3cmJmQuZmlsbCYmKE8oZC5maWxsKSxyW2ldPSJ4Ij09PWU/WChudWxsLFswLGItMV0sYSxvLHJbaV0pOiJ5Ij09PWU/SihudWxsLFswLF8tMV0sYSxvLHJbaV0pOksobnVsbCxbMCx3LTFdLGEsbyxyW2ldKSxpKyspfX0pKSwwPT09bSYmUCgpLHQuX21lc2hYPW4sdC5fbWVzaFk9aSx0Ll9tZXNoWj1hLHQuX21lc2hJbnRlbnNpdHk9byx0Ll9Ycz12LHQuX1lzPXksdC5fWnM9eH0oKSx0fWUuZXhwb3J0cz17ZmluZE5lYXJlc3RPbkF4aXM6bCxnZW5lcmF0ZUlzb01lc2hlczpmLGNyZWF0ZUlzb3N1cmZhY2VUcmFjZTpmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IGModCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NDYsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc3MywiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo4NTIsImdsLW1lc2gzZCI6MjkyfV0sMTA5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO2Z1bmN0aW9uIHModCxlLHIsbixhKXt2YXIgcz1hKCJpc29taW4iKSxsPWEoImlzb21heCIpO251bGwhPWwmJm51bGwhPXMmJnM+bCYmKGUuaXNvbWluPW51bGwsZS5pc29tYXg9bnVsbCk7dmFyIGM9YSgieCIpLHU9YSgieSIpLGg9YSgieiIpLGY9YSgidmFsdWUiKTtjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmgmJmgubGVuZ3RoJiZmJiZmLmxlbmd0aD8oaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxuKSxbIngiLCJ5IiwieiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSJjYXBzLiIrdDthKGUrIi5zaG93IikmJmEoZSsiLmZpbGwiKTt2YXIgcj0ic2xpY2VzLiIrdDthKHIrIi5zaG93IikmJihhKHIrIi5maWxsIiksYShyKyIubG9jYXRpb25zIikpfSkpLGEoInNwYWNlZnJhbWUuc2hvdyIpJiZhKCJzcGFjZWZyYW1lLmZpbGwiKSxhKCJzdXJmYWNlLnNob3ciKSYmKGEoInN1cmZhY2UuY291bnQiKSxhKCJzdXJmYWNlLmZpbGwiKSxhKCJzdXJmYWNlLnBhdHRlcm4iKSksYSgiY29udG91ci5zaG93IikmJihhKCJjb250b3VyLmNvbG9yIiksYSgiY29udG91ci53aWR0aCIpKSxbInRleHQiLCJob3ZlcnRleHQiLCJob3ZlcnRlbXBsYXRlIiwibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbiIsImxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbiIsImxpZ2h0cG9zaXRpb24ueCIsImxpZ2h0cG9zaXRpb24ueSIsImxpZ2h0cG9zaXRpb24ueiIsImZsYXRzaGFkaW5nIiwib3BhY2l0eSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2EodCl9KSksbyh0LGUsbixhLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsaSl7cyh0LGUscixpLChmdW5jdGlvbihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfSkpfSxzdXBwbHlJc29EZWZhdWx0czpzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYyNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4vYXR0cmlidXRlcyI6MTA5NH1dLDEwOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjYWxjOnQoIi4vY2FsYyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LHBsb3Q6dCgiLi9jb252ZXJ0IikuY3JlYXRlSXNvc3VyZmFjZVRyYWNlLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJpc29zdXJmYWNlIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6ODQxLCIuL2F0dHJpYnV0ZXMiOjEwOTQsIi4vY2FsYyI6MTA5NSwiLi9jb252ZXJ0IjoxMDk2LCIuL2RlZmF1bHRzIjoxMDk3fV0sMTA5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uL3N1cmZhY2UvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sajp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxrOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGVtcGxhdGU6aSh7ZWRpdFR5cGU6ImNhbGMifSksZGVsYXVuYXlheGlzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsInoiXSxkZmx0OiJ6IixlZGl0VHlwZToiY2FsYyJ9LGFscGhhaHVsbDp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi0xLGVkaXRUeXBlOiJjYWxjIn0saW50ZW5zaXR5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGludGVuc2l0eW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInZlcnRleCIsImNlbGwiXSxkZmx0OiJ2ZXJ0ZXgiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHZlcnRleGNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGZhY2Vjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0cmFuc2Zvcm1zOnZvaWQgMH0sbigiIix7Y29sb3JBdHRyOiJgaW50ZW5zaXR5YCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtvcGFjaXR5OmEub3BhY2l0eSxmbGF0c2hhZGluZzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNvbnRvdXI6e3Nob3c6cyh7fSxhLmNvbnRvdXJzLnguc2hvdyx7fSksY29sb3I6YS5jb250b3Vycy54LmNvbG9yLHdpZHRoOmEuY29udG91cnMueC53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0cG9zaXRpb246e3g6cyh7fSxhLmxpZ2h0cG9zaXRpb24ueCx7ZGZsdDoxZTV9KSx5OnMoe30sYS5saWdodHBvc2l0aW9uLnkse2RmbHQ6MWU1fSksejpzKHt9LGEubGlnaHRwb3NpdGlvbi56LHtkZmx0OjB9KSxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0aW5nOnMoe3ZlcnRleG5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtMTIsZWRpdFR5cGU6ImNhbGMifSxmYWNlbm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxZS02LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxhLmxpZ2h0aW5nKSxob3ZlcmluZm86cyh7fSxvLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMifSksc2hvd2xlZ2VuZDpzKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYyMiwiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIjoxMjgyfV0sMTEwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuaW50ZW5zaXR5JiZuKHQsZSx7dmFsczplLmludGVuc2l0eSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYyM31dLDExMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbWVzaDNkIiksaT10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLGE9dCgiYWxwaGEtc2hhcGUiKSxvPXQoImNvbnZleC1odWxsIikscz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLGw9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMsdT10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKTtmdW5jdGlvbiBoKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj0iI2ZmZiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgZj1oLnByb3RvdHlwZTtmdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWVbbl09bCh0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBkKHQsZSxyLG4pe2Zvcih2YXIgaT1bXSxhPWUubGVuZ3RoLG89MDtvPGE7bysrKWlbb109dC5kMmwoZVtvXSwwLG4pKnI7cmV0dXJuIGl9ZnVuY3Rpb24gZyh0KXtmb3IodmFyIGU9W10scj10Lmxlbmd0aCxuPTA7bjxyO24rKyllW25dPU1hdGgucm91bmQodFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbSh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZih0W25dPD0tLjV8fHRbbl0+PWUtLjUpcmV0dXJuITE7cmV0dXJuITB9Zi5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleDt0LmRhdGEuX2NlbGxDZW50ZXI/dC50cmFjZUNvb3JkaW5hdGU9dC5kYXRhLmRhdGFDb29yZGluYXRlOnQudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEueFtlXSx0aGlzLmRhdGEueVtlXSx0aGlzLmRhdGEueltlXV07dmFyIHI9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocikmJnZvaWQgMCE9PXJbZV0/dC50ZXh0TGFiZWw9cltlXTpyJiYodC50ZXh0TGFiZWw9ciksITB9fSxmLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7dGhpcy5kYXRhPXQ7dmFyIG4saD10LngubGVuZ3RoLGY9dShkKHIueGF4aXMsdC54LGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxkKHIueWF4aXMsdC55LGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxkKHIuemF4aXMsdC56LGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSk7aWYodC5pJiZ0LmomJnQuayl7aWYodC5pLmxlbmd0aCE9PXQuai5sZW5ndGh8fHQuai5sZW5ndGghPT10LmsubGVuZ3RofHwhbSh0LmksaCl8fCFtKHQuaixoKXx8IW0odC5rLGgpKXJldHVybjtuPXUoZyh0LmkpLGcodC5qKSxnKHQuaykpfWVsc2Ugbj0wPT09dC5hbHBoYWh1bGw/byhmKTp0LmFscGhhaHVsbD4wP2EodC5hbHBoYWh1bGwsZik6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9WyJ4IiwieSIsInoiXS5pbmRleE9mKHQpLG49W10sYT1lLmxlbmd0aCxvPTA7bzxhO28rKyluW29dPVtlW29dWyhyKzEpJTNdLGVbb11bKHIrMiklM11dO3JldHVybiBpKG4pfSh0LmRlbGF1bmF5YXhpcyxmKTt2YXIgdj17cG9zaXRpb25zOmYsY2VsbHM6bixsaWdodFBvc2l0aW9uOlt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0sYW1iaWVudDp0LmxpZ2h0aW5nLmFtYmllbnQsZGlmZnVzZTp0LmxpZ2h0aW5nLmRpZmZ1c2Usc3BlY3VsYXI6dC5saWdodGluZy5zcGVjdWxhcixyb3VnaG5lc3M6dC5saWdodGluZy5yb3VnaG5lc3MsZnJlc25lbDp0LmxpZ2h0aW5nLmZyZXNuZWwsdmVydGV4Tm9ybWFsc0Vwc2lsb246dC5saWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbixmYWNlTm9ybWFsc0Vwc2lsb246dC5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24sb3BhY2l0eTp0Lm9wYWNpdHksY29udG91ckVuYWJsZTp0LmNvbnRvdXIuc2hvdyxjb250b3VyQ29sb3I6bCh0LmNvbnRvdXIuY29sb3IpLnNsaWNlKDAsMyksY29udG91cldpZHRoOnQuY29udG91ci53aWR0aCx1c2VGYWNldE5vcm1hbHM6dC5mbGF0c2hhZGluZ307aWYodC5pbnRlbnNpdHkpe3ZhciB5PWModCk7dGhpcy5jb2xvcj0iI2ZmZiI7dmFyIHg9dC5pbnRlbnNpdHltb2RlO3ZbeCsiSW50ZW5zaXR5Il09dC5pbnRlbnNpdHksdlt4KyJJbnRlbnNpdHlCb3VuZHMiXT1beS5taW4seS5tYXhdLHYuY29sb3JtYXA9cyh0KX1lbHNlIHQudmVydGV4Y29sb3I/KHRoaXMuY29sb3I9dC52ZXJ0ZXhjb2xvclswXSx2LnZlcnRleENvbG9ycz1wKHQudmVydGV4Y29sb3IpKTp0LmZhY2Vjb2xvcj8odGhpcy5jb2xvcj10LmZhY2Vjb2xvclswXSx2LmNlbGxDb2xvcnM9cCh0LmZhY2Vjb2xvcikpOih0aGlzLmNvbG9yPXQuY29sb3Isdi5tZXNoQ29sb3I9bCh0LmNvbG9yKSk7dGhpcy5tZXNoLnVwZGF0ZSh2KX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgaCh0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYyNywiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzQ2LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NzMsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODUyLCJhbHBoYS1zaGFwZSI6NjksImNvbnZleC1odWxsIjoxMzUsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNzEsImdsLW1lc2gzZCI6MjkyfV0sMTEwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxvLHIsbil9ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9bCh0KTtyZXR1cm4gZSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KGUpP2U6bnVsbH0pKTtyZXR1cm4gZS5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoPT09ZVswXS5sZW5ndGh9KSkmJmV9YyhbIngiLCJ5IiwieiJdKT8oYyhbImkiLCJqIiwiayJdKSwoIWUuaXx8ZS5qJiZlLmspJiYoIWUuanx8ZS5rJiZlLmkpJiYoIWUua3x8ZS5pJiZlLmopPyhuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLHMpLFsibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbiIsImxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbiIsImxpZ2h0cG9zaXRpb24ueCIsImxpZ2h0cG9zaXRpb24ueSIsImxpZ2h0cG9zaXRpb24ueiIsImZsYXRzaGFkaW5nIiwiYWxwaGFodWxsIiwiZGVsYXVuYXlheGlzIiwib3BhY2l0eSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2wodCl9KSksbCgiY29udG91ci5zaG93IikmJihsKCJjb250b3VyLmNvbG9yIiksbCgiY29udG91ci53aWR0aCIpKSwiaW50ZW5zaXR5ImluIHQ/KGwoImludGVuc2l0eSIpLGwoImludGVuc2l0eW1vZGUiKSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pKTooZS5zaG93c2NhbGU9ITEsImZhY2Vjb2xvciJpbiB0P2woImZhY2Vjb2xvciIpOiJ2ZXJ0ZXhjb2xvciJpbiB0P2woInZlcnRleGNvbG9yIik6bCgiY29sb3IiLHIpKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgiaG92ZXJ0ZW1wbGF0ZSIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITEpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MjUsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2F0dHJpYnV0ZXMiOjEwOTl9XSwxMTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJtZXNoM2QiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo4NDEsIi4vYXR0cmlidXRlcyI6MTA5OSwiLi9jYWxjIjoxMTAwLCIuL2NvbnZlcnQiOjExMDEsIi4vZGVmYXVsdHMiOjExMDJ9XSwxMTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIiksbD1zLklOQ1JFQVNJTkcuQ09MT1IsYz1zLkRFQ1JFQVNJTkcuQ09MT1IsdT1pLmxpbmU7ZnVuY3Rpb24gaCh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSx1LmNvbG9yLHtkZmx0OnR9KSx3aWR0aDp1LndpZHRoLGRhc2g6YSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifX1lLmV4cG9ydHM9e3hwZXJpb2Q6aS54cGVyaW9kLHhwZXJpb2QwOmkueHBlcmlvZDAseHBlcmlvZGFsaWdubWVudDppLnhwZXJpb2RhbGlnbm1lbnQseDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxvcGVuOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGhpZ2g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbG93Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGNsb3NlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e3dpZHRoOm4oe30sdS53aWR0aCx7fSksZGFzaDpuKHt9LGEse30pLGVkaXRUeXBlOiJzdHlsZSJ9LGluY3JlYXNpbmc6aChsKSxkZWNyZWFzaW5nOmgoYyksdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4zLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJsYWJlbDpuKHt9LG8uaG92ZXJsYWJlbCx7c3BsaXQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InN0eWxlIn19KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjYzNiwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6NzE5LCIuLi8uLi9saWIiOjc1MCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTU4fV0sMTEwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPW4uXyxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJue286dCxoOmUsbDpyLGM6bn19ZnVuY3Rpb24gYyh0LGUscixvLGwsYyl7Zm9yKHZhciB1PWwubWFrZUNhbGNkYXRhKGUsIm9wZW4iKSxoPWwubWFrZUNhbGNkYXRhKGUsImhpZ2giKSxmPWwubWFrZUNhbGNkYXRhKGUsImxvdyIpLHA9bC5tYWtlQ2FsY2RhdGEoZSwiY2xvc2UiKSxkPUFycmF5LmlzQXJyYXkoZS50ZXh0KSxnPUFycmF5LmlzQXJyYXkoZS5ob3ZlcnRleHQpLG09ITAsdj1udWxsLHk9ISFlLnhwZXJpb2RhbGlnbm1lbnQseD1bXSxiPTA7YjxvLmxlbmd0aDtiKyspe3ZhciBfPW9bYl0sdz11W2JdLFQ9aFtiXSxrPWZbYl0sTT1wW2JdO2lmKF8hPT1zJiZ3IT09cyYmVCE9PXMmJmshPT1zJiZNIT09cyl7TT09PXc/bnVsbCE9PXYmJk0hPT12JiYobT1NPnYpOm09TT53LHY9TTt2YXIgQT1jKHcsVCxrLE0pO0EucG9zPV8sQS55Yz0odytNKS8yLEEuaT1iLEEuZGlyPW0/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIixBLng9QS5wb3MsQS55PVtrLFRdLHkmJihBLm9yaWdfcD1yW2JdKSxkJiYoQS50eD1lLnRleHRbYl0pLGcmJihBLmh0eD1lLmhvdmVydGV4dFtiXSkseC5wdXNoKEEpfWVsc2UgeC5wdXNoKHtwb3M6XyxlbXB0eTohMH0pfXJldHVybiBlLl9leHRyZW1lc1tsLl9pZF09YS5maW5kRXh0cmVtZXMobCxuLmNvbmNhdChmLGgpLHtwYWRkZWQ6ITB9KSx4Lmxlbmd0aCYmKHhbMF0udD17bGFiZWxzOntvcGVuOmkodCwib3BlbjoiKSsiICIsaGlnaDppKHQsImhpZ2g6IikrIiAiLGxvdzppKHQsImxvdzoiKSsiICIsY2xvc2U6aSh0LCJjbG9zZToiKSsiICJ9fSkseH1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hLmdldEZyb21JZCh0LGUueGF4aXMpLGk9YS5nZXRGcm9tSWQodCxlLnlheGlzKSxzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yLl9taW5EaWZmO2lmKCFpKXt2YXIgYSxzPXQuX2Z1bGxEYXRhLGw9W107Zm9yKGk9MS8wLGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGM9c1thXTtpZigib2hsYyI9PT1jLnR5cGUmJiEwPT09Yy52aXNpYmxlJiZjLnhheGlzPT09ZS5faWQpe2wucHVzaChjKTt2YXIgdT1lLm1ha2VDYWxjZGF0YShjLCJ4Iik7Yy5fb3JpZ1g9dTt2YXIgaD1vKHIsZSwieCIsdSk7Yy5feGNhbGM9aDt2YXIgZj1uLmRpc3RpbmN0VmFscyhoKS5taW5EaWZmO2YmJmlzRmluaXRlKGYpJiYoaT1NYXRoLm1pbihpLGYpKX19Zm9yKGk9PT0xLzAmJihpPTEpLGE9MDthPGwubGVuZ3RoO2ErKylsW2FdLl9taW5EaWZmPWl9cmV0dXJuIGkqci50aWNrd2lkdGh9KHQscixlKSx1PWUuX21pbkRpZmY7ZS5fbWluRGlmZj1udWxsO3ZhciBoPWUuX29yaWdYO2UuX29yaWdYPW51bGw7dmFyIGY9ZS5feGNhbGM7ZS5feGNhbGM9bnVsbDt2YXIgcD1jKHQsZSxoLGYsaSxsKTtyZXR1cm4gZS5fZXh0cmVtZXNbci5faWRdPWEuZmluZEV4dHJlbWVzKHIsZix7dnBhZDp1LzJ9KSxwLmxlbmd0aD8obi5leHRlbmRGbGF0KHBbMF0udCx7d0hvdmVyOnUvMix0aWNrTGVuOnN9KSxwKTpbe3Q6e2VtcHR5OiEwfX1dfSxjYWxjQ29tbW9uOmN9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjc5NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OX1dLDExMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL29obGNfZGVmYXVsdHMiKSxhPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3IobisiLmxpbmUuY29sb3IiKSxyKG4rIi5saW5lLndpZHRoIixlLmxpbmUud2lkdGgpLHIobisiLmxpbmUuZGFzaCIsZS5saW5lLmRhc2gpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9aSh0LGUsYyxsKT8oYSh0LGUsbCxjLHt4OiEwfSksYygibGluZS53aWR0aCIpLGMoImxpbmUuZGFzaCIpLHModCxlLGMsImluY3JlYXNpbmciKSxzKHQsZSxjLCJkZWNyZWFzaW5nIiksYygidGV4dCIpLGMoImhvdmVydGV4dCIpLGMoInRpY2t3aWR0aCIpLGwuX3JlcXVlc3RSYW5nZXNsaWRlcltlLnhheGlzXT0hMCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjExNzgsIi4vYXR0cmlidXRlcyI6MTEwNCwiLi9vaGxjX2RlZmF1bHRzIjoxMTA5fV0sMTEwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9saWIiKS5maWxsVGV4dCxsPXQoIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyIpLGM9e2luY3JlYXNpbmc6bC5JTkNSRUFTSU5HLlNZTUJPTCxkZWNyZWFzaW5nOmwuREVDUkVBU0lORy5TWU1CT0x9O2Z1bmN0aW9uIHUodCxlLHIsbil7dmFyIGkscyxsPXQuY2QsYz10LnhhLHU9bFswXS50cmFjZSxoPWxbMF0udCxmPXUudHlwZSxwPSJvaGxjIj09PWY/ImwiOiJtaW4iLGQ9Im9obGMiPT09Zj8iaCI6Im1heCIsZz1oLmJQb3N8fDAsbT1oLmJkUG9zfHxoLnRpY2tMZW4sdj1oLndIb3Zlcix5PU1hdGgubWluKDEsbS9NYXRoLmFicyhjLnIyYyhjLnJhbmdlWzFdKS1jLnIyYyhjLnJhbmdlWzBdKSkpO2Z1bmN0aW9uIHgodCl7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zK2ctZX0odCk7cmV0dXJuIGEuaW5ib3goci12LHIrdixpKX1mdW5jdGlvbiBiKHQpe3ZhciBlPXRbcF0sbj10W2RdO3JldHVybiBlPT09bnx8YS5pbmJveChlLXIsbi1yLGkpfWZ1bmN0aW9uIF8odCl7cmV0dXJuKHgodCkrYih0KSkvMn1pPXQubWF4SG92ZXJEaXN0YW5jZS15LHM9dC5tYXhTcGlrZURpc3RhbmNlLXk7dmFyIHc9YS5nZXREaXN0YW5jZUZ1bmN0aW9uKG4seCxiLF8pO2lmKGEuZ2V0Q2xvc2VzdChsLHcsdCksITE9PT10LmluZGV4KXJldHVybiBudWxsO3ZhciBUPWxbdC5pbmRleF07aWYoVC5lbXB0eSlyZXR1cm4gbnVsbDt2YXIgaz11W1QuZGlyXSxNPWsubGluZS5jb2xvcjtyZXR1cm4gby5vcGFjaXR5KE0pJiZrLmxpbmUud2lkdGg/dC5jb2xvcj1NOnQuY29sb3I9ay5maWxsY29sb3IsdC54MD1jLmMycChULnBvcytnLW0sITApLHQueDE9Yy5jMnAoVC5wb3MrZyttLCEwKSx0LnhMYWJlbFZhbD12b2lkIDAhPT1ULm9yaWdfcD9ULm9yaWdfcDpULnBvcyx0LnNwaWtlRGlzdGFuY2U9XyhUKSpzL2ksdC54U3Bpa2U9Yy5jMnAoVC5wb3MsITApLHR9ZnVuY3Rpb24gaCh0LGUscixhKXt2YXIgbz10LmNkLHM9dC55YSxsPW9bMF0udHJhY2UsYz1vWzBdLnQsaD1bXSxmPXUodCxlLHIsYSk7aWYoIWYpcmV0dXJuW107dmFyIHA9b1tmLmluZGV4XS5oaXx8bC5ob3ZlcmluZm8sZD1wLnNwbGl0KCIrIik7aWYoISgiYWxsIj09PXB8fC0xIT09ZC5pbmRleE9mKCJ5IikpKXJldHVybltdO2Zvcih2YXIgZz1bImhpZ2giLCJvcGVuIiwiY2xvc2UiLCJsb3ciXSxtPXt9LHY9MDt2PGcubGVuZ3RoO3YrKyl7dmFyIHkseD1nW3ZdLGI9bFt4XVtmLmluZGV4XSxfPXMuYzJwKGIsITApO2IgaW4gbT8oeT1tW2JdKS55TGFiZWwrPSI8YnI+IitjLmxhYmVsc1t4XStuLmhvdmVyTGFiZWxUZXh0KHMsYik6KCh5PWkuZXh0ZW5kRmxhdCh7fSxmKSkueTA9eS55MT1fLHkueUxhYmVsVmFsPWIseS55TGFiZWw9Yy5sYWJlbHNbeF0rbi5ob3ZlckxhYmVsVGV4dChzLGIpLHkubmFtZT0iIixoLnB1c2goeSksbVtiXT15KX1yZXR1cm4gaH1mdW5jdGlvbiBmKHQsZSxyLGkpe3ZhciBhPXQuY2Qsbz10LnlhLGw9YVswXS50cmFjZSxoPWFbMF0udCxmPXUodCxlLHIsaSk7aWYoIWYpcmV0dXJuW107dmFyIHA9YVtmLmluZGV4XSxkPWYuaW5kZXg9cC5pLGc9cC5kaXI7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gaC5sYWJlbHNbdF0rbi5ob3ZlckxhYmVsVGV4dChvLGxbdF1bZF0pfXZhciB2PXAuaGl8fGwuaG92ZXJpbmZvLHk9di5zcGxpdCgiKyIpLHg9ImFsbCI9PT12LGI9eHx8LTEhPT15LmluZGV4T2YoInkiKSxfPXh8fC0xIT09eS5pbmRleE9mKCJ0ZXh0Iiksdz1iP1ttKCJvcGVuIiksbSgiaGlnaCIpLG0oImxvdyIpLG0oImNsb3NlIikrIiAgIitjW2ddXTpbXTtyZXR1cm4gXyYmcyhwLGwsdyksZi5leHRyYVRleHQ9dy5qb2luKCI8YnI+IiksZi55MD1mLnkxPW8uYzJwKHAueWMsITApLFtmXX1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmNkWzBdLnRyYWNlLmhvdmVybGFiZWwuc3BsaXQ/aCh0LGUscixuKTpmKHQsZSxyLG4pfSxob3ZlclNwbGl0OmgsaG92ZXJPblBvaW50czpmfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY1NSwiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIjo3MTksIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5fV0sMTEwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJvaGxjIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic2hvd0xlZ2VuZCJdLG1ldGE6e30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4MTIsIi4vYXR0cmlidXRlcyI6MTEwNCwiLi9jYWxjIjoxMTA1LCIuL2RlZmF1bHRzIjoxMTA2LCIuL2hvdmVyIjoxMTA3LCIuL3Bsb3QiOjExMTAsIi4vc2VsZWN0IjoxMTExLCIuL3N0eWxlIjoxMTEyfV0sMTEwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXIoIngiKSxzPXIoIm9wZW4iKSxsPXIoImhpZ2giKSxjPXIoImxvdyIpLHU9cigiY2xvc2UiKTtpZihyKCJob3ZlcmxhYmVsLnNwbGl0Iiksbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4Il0sYSkscyYmbCYmYyYmdSl7dmFyIGg9TWF0aC5taW4ocy5sZW5ndGgsbC5sZW5ndGgsYy5sZW5ndGgsdS5sZW5ndGgpO3JldHVybiBvJiYoaD1NYXRoLm1pbihoLGkubWluUm93TGVuZ3RoKG8pKSksZS5fbGVuZ3RoPWgsaH19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyfV0sMTExMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPWUueWF4aXMscz1lLnhheGlzLGw9ISFzLnJhbmdlYnJlYWtzO2kubWFrZVRyYWNlR3JvdXBzKGEsciwidHJhY2Ugb2hsYyIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXSxhPXIudDtpZighMCE9PXIudHJhY2UudmlzaWJsZXx8YS5lbXB0eSllLnJlbW92ZSgpO2Vsc2V7dmFyIGM9YS50aWNrTGVuLHU9ZS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKGkuaWRlbnRpdHkpO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmF0dHIoImQiLChmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVybiJNMCwwWiI7dmFyIGU9cy5jMnAodC5wb3MtYywhMCkscj1zLmMycCh0LnBvcytjLCEwKSxuPWw/KGUrcikvMjpzLmMycCh0LnBvcywhMCk7cmV0dXJuIk0iK2UrIiwiK28uYzJwKHQubywhMCkrIkgiK24rIk0iK24rIiwiK28uYzJwKHQuaCwhMCkrIlYiK28uYzJwKHQubCwhMCkrIk0iK3IrIiwiK28uYzJwKHQuYywhMCkrIkgiK259KSl9fSkpfX0seyIuLi8uLi9saWIiOjc1MCxkMzoxNjl9XSwxMTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5jZCxpPXQueGF4aXMsYT10LnlheGlzLG89W10scz1uWzBdLnQuYlBvc3x8MDtpZighMT09PWUpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbD1uW3JdO2UuY29udGFpbnMoW2kuYzJwKGwucG9zK3MpLGEuYzJwKGwueWMpXSxudWxsLGwuaSx0KT8oby5wdXNoKHtwb2ludE51bWJlcjpsLmkseDppLmMyZChsLnBvcykseTphLmMyZChsLnljKX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBvfX0se31dLDExMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLm9obGNsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpO28uc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLG8uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXtpZighdC5lbXB0eSl7dmFyIHI9ZVt0LmRpcl0ubGluZTtuLnNlbGVjdCh0aGlzKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jYWxsKGEuc3Ryb2tlLHIuY29sb3IpLmNhbGwoaS5kYXNoTGluZSxyLmRhc2gsci53aWR0aCkuc3R5bGUoIm9wYWNpdHkiLGUuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkPy4zOjEpfX0pKX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNyxkMzoxNjl9XSwxMTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYz1uKHtlZGl0VHlwZToiY2FsYyJ9LG8oImxpbmUiLHtlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiaHNwbGluZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxob3ZlcnRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx7a2V5czpbImNvdW50IiwicHJvYmFiaWxpdHkiXX0pfSk7ZS5leHBvcnRzPXtkb21haW46bCh7bmFtZToicGFyY2F0cyIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG92ZXJpbmZvOm4oe30saS5ob3ZlcmluZm8se2ZsYWdzOlsiY291bnQiLCJwcm9iYWJpbGl0eSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSksaG92ZXJvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2F0ZWdvcnkiLCJjb2xvciIsImRpbWVuc2lvbiJdLGRmbHQ6ImNhdGVnb3J5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITF9LHtrZXlzOlsiY291bnQiLCJwcm9iYWJpbGl0eSIsImNhdGVnb3J5IiwiY2F0ZWdvcnljb3VudCIsImNvbG9yY291bnQiLCJiYW5kY29sb3Jjb3VudCJdfSksYXJyYW5nZW1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcnBlbmRpY3VsYXIiLCJmcmVlZm9ybSIsImZpeGVkIl0sZGZsdDoicGVycGVuZGljdWxhciIsZWRpdFR5cGU6InBsb3QifSxidW5kbGVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzb3J0cGF0aHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZvcndhcmQiLCJiYWNrd2FyZCJdLGRmbHQ6ImZvcndhcmQiLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLHRpY2tmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLGRpbWVuc2lvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImRpbWVuc2lvbiIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sZGlzcGxheWluZGV4Ont2YWxUeXBlOiJpbnRlZ2VyIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19LGxpbmU6Yyxjb3VudHM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxjdXN0b21kYXRhOnZvaWQgMCxob3ZlcmxhYmVsOnZvaWQgMCxpZHM6dm9pZCAwLGxlZ2VuZGdyb3VwOnZvaWQgMCxvcGFjaXR5OnZvaWQgMCxzZWxlY3RlZHBvaW50czp2b2lkIDAsc2hvd2xlZ2VuZDp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzk1LCIuLi8uLi9wbG90cy9kb21haW4iOjgyNiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4MjcsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3N31dLDExMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxpPXQoIi4vcGxvdCIpO3IubmFtZT0icGFyY2F0cyIsci5wbG90PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odC5jYWxjZGF0YSwicGFyY2F0cyIpO2lmKG8ubGVuZ3RoKXt2YXIgcz1vWzBdO2kodCxzLHIsYSl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJwYXJjYXRzIiksYT1lLl9oYXMmJmUuX2hhcygicGFyY2F0cyIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjYXRzIikucmVtb3ZlKCl9fSx7Ii4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4MzYsIi4vcGxvdCI6MTExOX1dLDExMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLG89dCgiLi4vLi4vbGliL2ZpbHRlcl91bmlxdWUuanMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliIiksYz10KCJmYXN0LWlzbnVtZXJpYyIpO2Z1bmN0aW9uIHUodCxlLHIpe3QudmFsdWVJbmRzLnB1c2goZSksdC5jb3VudCs9cn1mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm57Y2F0ZWdvcnlJbmRzOnQsY29sb3I6ZSxyYXdDb2xvcjpyLHZhbHVlSW5kczpbXSxjb3VudDowfX1mdW5jdGlvbiBmKHQsZSxyKXt0LnZhbHVlSW5kcy5wdXNoKGUpLHQuY291bnQrPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bC5maWx0ZXJWaXNpYmxlKGUuZGltZW5zaW9ucyk7aWYoMD09PXIubGVuZ3RoKXJldHVybltdO3ZhciBwLGQsZyxtPXIubWFwKChmdW5jdGlvbih0KXt2YXIgZTtpZigidHJhY2UiPT09dC5jYXRlZ29yeW9yZGVyKWU9bnVsbDtlbHNlIGlmKCJhcnJheSI9PT10LmNhdGVnb3J5b3JkZXIpZT10LmNhdGVnb3J5YXJyYXk7ZWxzZXtlPW8odC52YWx1ZXMpO2Zvcih2YXIgcj0hMCxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIWMoZVtuXSkpe3I9ITE7YnJlYWt9ZS5zb3J0KHI/bC5zb3J0ZXJBc2M6dm9pZCAwKSwiY2F0ZWdvcnkgZGVzY2VuZGluZyI9PT10LmNhdGVnb3J5b3JkZXImJihlPWUucmV2ZXJzZSgpKX1yZXR1cm4gZnVuY3Rpb24odCxlKXtlPW51bGw9PWU/W106ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpO3ZhciByPXt9LG49e30saT1bXTtlLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7clt0XT0wLG5bdF09ZX0pKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG8scz10W2FdO3ZvaWQgMD09PXJbc10/KHJbc109MSxvPWUucHVzaChzKS0xLG5bc109byk6KHJbc10rKyxvPW5bc10pLGkucHVzaChvKX12YXIgbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHJbdF19KSk7cmV0dXJue3VuaXF1ZVZhbHVlczplLHVuaXF1ZUNvdW50czpsLGluZHM6aX19KHQudmFsdWVzLGUpfSkpO3A9bC5pc0FycmF5T3JUeXBlZEFycmF5KGUuY291bnRzKT9lLmNvdW50czpbZS5jb3VudHNdLGZ1bmN0aW9uKHQpe3ZhciBlO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYodFtyXTwwfHx0W3JdPj10Lmxlbmd0aClyZXR1cm4hMTtpZih2b2lkIDAhPT1lW3Rbcl1dKXJldHVybiExO2VbdFtyXV09ITB9cmV0dXJuITB9KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5aW5kZXh9KSkpKWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5fZGlzcGxheWluZGV4PXRbZV0uZGlzcGxheWluZGV4O2Vsc2UgZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLl9kaXNwbGF5aW5kZXg9ZX0ociksci5mb3JFYWNoKChmdW5jdGlvbih0LGUpeyFmdW5jdGlvbih0LGUpe3QuX2NhdGVnb3J5YXJyYXk9ZS51bmlxdWVWYWx1ZXMsbnVsbD09PXQudGlja3RleHR8fHZvaWQgMD09PXQudGlja3RleHQ/dC5fdGlja3RleHQ9W106dC5fdGlja3RleHQ9dC50aWNrdGV4dC5zbGljZSgpO2Zvcih2YXIgcj10Ll90aWNrdGV4dC5sZW5ndGg7cjxlLnVuaXF1ZVZhbHVlcy5sZW5ndGg7cisrKXQuX3RpY2t0ZXh0LnB1c2goZS51bmlxdWVWYWx1ZXNbcl0pfSh0LG1bZV0pfSkpO3ZhciB2LHk9ZS5saW5lO3k/KGkoZSwibGluZSIpJiZhKHQsZSx7dmFsczplLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJsaW5lIixjTGV0dGVyOiJjIn0pLHY9cy50cnlDb2xvcnNjYWxlKHkpKTp2PWwuaWRlbnRpdHk7dmFyIHgsYixfLHcsVCxrPXJbMF0udmFsdWVzLmxlbmd0aCxNPXt9LEE9bS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluZHN9KSk7Zm9yKGc9MCx4PTA7eDxrO3grKyl7dmFyIFM9W107Zm9yKGI9MDtiPEEubGVuZ3RoO2IrKylTLnB1c2goQVtiXVt4XSk7ZD1wW3glcC5sZW5ndGhdLGcrPWQ7dmFyIEU9KF89eCx3PXZvaWQgMCxUPXZvaWQgMCxsLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5jb2xvcik/VD13PXkuY29sb3JbXyV5LmNvbG9yLmxlbmd0aF06dz15LmNvbG9yLHtjb2xvcjp2KHcpLHJhd0NvbG9yOlR9KSxDPVMrIi0iK0UucmF3Q29sb3I7dm9pZCAwPT09TVtDXSYmKE1bQ109aChTLEUuY29sb3IsRS5yYXdDb2xvcikpLGYoTVtDXSx4LGQpfXZhciBMLFA9ci5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJue2RpbWVuc2lvbkluZDp0LGNvbnRhaW5lckluZDplLGRpc3BsYXlJbmQ6cixkaW1lbnNpb25MYWJlbDpuLGNvdW50OmksY2F0ZWdvcmllczpbXSxkcmFnWDpudWxsfX0oZSx0Ll9pbmRleCx0Ll9kaXNwbGF5aW5kZXgsdC5sYWJlbCxnKX0pKTtmb3IoeD0wO3g8azt4KyspZm9yKGQ9cFt4JXAubGVuZ3RoXSxiPTA7YjxQLmxlbmd0aDtiKyspe3ZhciBJPVBbYl0uY29udGFpbmVySW5kLHo9bVtiXS5pbmRzW3hdLE89UFtiXS5jYXRlZ29yaWVzO2lmKHZvaWQgMD09PU9bel0pe3ZhciBEPWUuZGltZW5zaW9uc1tJXS5fY2F0ZWdvcnlhcnJheVt6XSxSPWUuZGltZW5zaW9uc1tJXS5fdGlja3RleHRbel07T1t6XT17ZGltZW5zaW9uSW5kOmIsY2F0ZWdvcnlJbmQ6TD16LGNhdGVnb3J5VmFsdWU6RCxkaXNwbGF5SW5kOkwsY2F0ZWdvcnlMYWJlbDpSLHZhbHVlSW5kczpbXSxjb3VudDowLGRyYWdZOm51bGx9fXUoT1t6XSx4LGQpfXJldHVybiBuKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5sZW5ndGh9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUpfSkpO3JldHVybntkaW1lbnNpb25zOnQscGF0aHM6ZSx0cmFjZTp2b2lkIDAsbWF4Q2F0czpuLGNvdW50OnJ9fShQLE0sZykpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjIzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjI2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzIjo3NDEsIi4uLy4uL2xpYi9ndXAiOjc0NywiZmFzdC1pc251bWVyaWMiOjI0MX1dLDExMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiKTtmdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbC5kaW1lbnNpb25zLHIsaSl9dmFyIGk9cigidmFsdWVzIiksYT1yKCJ2aXNpYmxlIik7aWYoaSYmaS5sZW5ndGh8fChhPWUudmlzaWJsZT0hMSksYSl7cigibGFiZWwiKSxyKCJkaXNwbGF5aW5kZXgiLGUuX2luZGV4KTt2YXIgbyxzPXQuY2F0ZWdvcnlhcnJheSxjPUFycmF5LmlzQXJyYXkocykmJnMubGVuZ3RoPjA7YyYmKG89ImFycmF5Iik7dmFyIHU9cigiY2F0ZWdvcnlvcmRlciIsbyk7ImFycmF5Ij09PXU/KHIoImNhdGVnb3J5YXJyYXkiKSxyKCJ0aWNrdGV4dCIpKTooZGVsZXRlIHQuY2F0ZWdvcnlhcnJheSxkZWxldGUgdC50aWNrdGV4dCksY3x8ImFycmF5IiE9PXV8fChlLmNhdGVnb3J5b3JkZXI9InRyYWNlIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9dmFyIHA9cyh0LGUse25hbWU6ImRpbWVuc2lvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czp1fSksZD1mdW5jdGlvbih0LGUscixvLHMpe3MoImxpbmUuc2hhcGUiKSxzKCJsaW5lLmhvdmVydGVtcGxhdGUiKTt2YXIgbD1zKCJsaW5lLmNvbG9yIixvLmNvbG9yd2F5WzBdKTtpZihpKHQsImxpbmUiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcygibGluZS5jb2xvcnNjYWxlIiksYSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGgsZik7byhlLGgsZiksQXJyYXkuaXNBcnJheShwKSYmcC5sZW5ndGh8fChlLnZpc2libGU9ITEpLGMoZSxwLCJ2YWx1ZXMiLGQpLGYoImhvdmVyb24iKSxmKCJob3ZlcnRlbXBsYXRlIiksZigiYXJyYW5nZW1lbnQiKSxmKCJidW5kbGVjb2xvcnMiKSxmKCJzb3J0cGF0aHMiKSxmKCJjb3VudHMiKTt2YXIgZz17ZmFtaWx5OmguZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGguZm9udC5zaXplKSxjb2xvcjpoLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChmLCJsYWJlbGZvbnQiLGcpO3ZhciBtPXtmYW1pbHk6aC5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoaC5mb250LnNpemUvMS4yKSxjb2xvcjpoLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChmLCJ0aWNrZm9udCIsbSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjI1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjI2LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3OTQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODI2LCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIjoxMTI5LCIuL2F0dHJpYnV0ZXMiOjExMTN9XSwxMTE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGNvbG9yYmFyOntjb250YWluZXI6ImxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InBhcmNhdHMiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbIm5vT3BhY2l0eSJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTExMywiLi9iYXNlX3Bsb3QiOjExMTQsIi4vY2FsYyI6MTExNSwiLi9kZWZhdWx0cyI6MTExNiwiLi9wbG90IjoxMTE5fV0sMTExODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGkiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCJ0aW55Y29sb3IyIiksYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKTtmdW5jdGlvbiB1KHQsZSxyLGkpe3ZhciBhPXQubWFwKEQuYmluZCgwLGUscikpLGw9aS5zZWxlY3RBbGwoImcucGFyY2F0c2xheWVyIikuZGF0YShbbnVsbF0pO2wuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInBhcmNhdHNsYXllciIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpO3ZhciB1PWwuc2VsZWN0QWxsKCJnLnRyYWNlLnBhcmNhdHMiKS5kYXRhKGEsaCksbT11LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZSBwYXJjYXRzIik7dS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIsICIrdC55KyIpIn0pKSxtLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicGF0aHMiKTt2YXIgdj11LnNlbGVjdCgiZy5wYXRocyIpLnNlbGVjdEFsbCgicGF0aC5wYXRoIikuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQucGF0aHN9KSxoKTt2LmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pKTt2YXIgYj12LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJwYXRoIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO3goYiksdi5hdHRyKCJkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnRH0pKSxiLmVtcHR5KCl8fHYuc29ydChwKSx2LmV4aXQoKS5yZW1vdmUoKSx2Lm9uKCJtb3VzZW92ZXIiLGQpLm9uKCJtb3VzZW91dCIsZykub24oImNsaWNrIix5KSxtLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGltZW5zaW9ucyIpO3ZhciBUPXUuc2VsZWN0KCJnLmRpbWVuc2lvbnMiKS5zZWxlY3RBbGwoImcuZGltZW5zaW9uIikuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30pLGgpO1QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRpbWVuc2lvbiIpLFQuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiLCAwKSJ9KSksVC5leGl0KCkucmVtb3ZlKCk7dmFyIGs9VC5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzfSksaCksTT1rLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXRlZ29yeSIpO2suYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwLCAiK3QueSsiKSJ9KSksTS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImNhdHJlY3QiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxrLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKSxfKE0pO3ZhciBBPWsuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmFuZHN9KSxoKTtBLmVhY2goKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSkpLEEuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkpO3ZhciBJPUEuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhbmRyZWN0IikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO0EuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiJmaXhlZCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/ImRlZmF1bHQiOiJwZXJwZW5kaWN1bGFyIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudD8ibnMtcmVzaXplIjoibW92ZSJ9KSksdyhJKSxBLmV4aXQoKS5yZW1vdmUoKSxNLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY2F0bGFiZWwiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKTt2YXIgej1lLl9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3I7ay5zZWxlY3QoInRleHQuY2F0bGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPyJzdGFydCI6ImVuZCJ9KSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtc2hhZG93Iix6KyIgLTFweCAgMXB4IDJweCwgIit6KyIgMXB4ICAxcHggMnB4LCAiK3orIiAgMXB4IC0xcHggMnB4LCAiK3orIiAtMXB4IC0xcHggMnB4Iikuc3R5bGUoImZpbGwiLCJyZ2IoMCwgMCwgMCkiKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/dC53aWR0aCs1Oi01fSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQvMn0pKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jYXRlZ29yeUxhYmVsfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwuY2F0ZWdvcnlsYWJlbGZvbnQpLGMuY29udmVydFRvVHNwYW5zKG4uc2VsZWN0KHRoaXMpLGUpfSkpLE0uYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJkaW1sYWJlbCIpLGsuc2VsZWN0KCJ0ZXh0LmRpbWxhYmVsIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJiYXNlbGluZSIpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiJmaXhlZCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/ImRlZmF1bHQiOiJldy1yZXNpemUifSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aC8yfSkpLmF0dHIoInkiLC01KS50ZXh0KChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pKS5lYWNoKChmdW5jdGlvbih0KXtzLmZvbnQobi5zZWxlY3QodGhpcyksdC5wYXJjYXRzVmlld01vZGVsLmxhYmVsZm9udCl9KSksay5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5vbigibW91c2VvdmVyIixTKS5vbigibW91c2VvdXQiLEUpLGsuZXhpdCgpLnJlbW92ZSgpLFQuY2FsbChuLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybnt4OnQueCx5OjB9fSkpLm9uKCJkcmFnc3RhcnQiLEMpLm9uKCJkcmFnIixMKS5vbigiZHJhZ2VuZCIsUCkpLHUuZWFjaCgoZnVuY3Rpb24odCl7dC50cmFjZVNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKSx0LnBhdGhTZWxlY3Rpb249bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKSx0LmRpbWVuc2lvblNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuZGltZW5zaW9ucyIpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb24iKX0pKSx1LmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBoKHQpe3JldHVybiB0LmtleX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zLmxlbmd0aCxyPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2UtMV0ubW9kZWwuZGltZW5zaW9uSW5kO3JldHVybiB0Lm1vZGVsLmRpbWVuc2lvbkluZD09PXJ9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiB0Lm1vZGVsLnJhd0NvbG9yPmUubW9kZWwucmF3Q29sb3I/MTp0Lm1vZGVsLnJhd0NvbG9yPGUubW9kZWwucmF3Q29sb3I/LTE6MH1mdW5jdGlvbiBkKHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKXtvLnJhaXNlVG9Ub3AodGhpcyksYihuLnNlbGVjdCh0aGlzKSk7dmFyIGU9bSh0KSxyPXYodCk7aWYodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czplLGV2ZW50Om4uZXZlbnQsY29uc3RyYWludHM6cn0pLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoIm5vbmUiKSl7dmFyIGkscyxjLHU9bi5tb3VzZSh0aGlzKVswXSxoPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixmPXQucGFyY2F0c1ZpZXdNb2RlbC50cmFjZSxwPWguX2Z1bGxMYXlvdXQsZD1wLl9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZz10LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zm9yKGM9MDtjPHQubGVmdFhzLmxlbmd0aC0xO2MrKylpZih0LmxlZnRYc1tjXSt0LmRpbVdpZHRoc1tjXS0yPD11JiZ1PD10LmxlZnRYc1tjKzFdKzIpe3ZhciB5PXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2NdLHg9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbYysxXTtpPSh5LngreS53aWR0aCt4LngpLzIscz0odC50b3BZc1tjXSt0LnRvcFlzW2MrMV0rdC5oZWlnaHQpLzI7YnJlYWt9dmFyIF89dC5wYXJjYXRzVmlld01vZGVsLngraSx3PXQucGFyY2F0c1ZpZXdNb2RlbC55K3MsVD1sLm1vc3RSZWFkYWJsZSh0Lm1vZGVsLmNvbG9yLFsiYmxhY2siLCJ3aGl0ZSJdKSxrPXQubW9kZWwuY291bnQsTT1rL3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5jb3VudCxBPXtjb3VudExhYmVsOmsscHJvYmFiaWxpdHlMYWJlbDpNLnRvRml4ZWQoMyl9LFM9W107LTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigiY291bnQiKSYmUy5wdXNoKFsiQ291bnQ6IixBLmNvdW50TGFiZWxdLmpvaW4oIiAiKSksLTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigicHJvYmFiaWxpdHkiKSYmUy5wdXNoKFsiUDoiLEEucHJvYmFiaWxpdHlMYWJlbF0uam9pbigiICIpKTt2YXIgRT1TLmpvaW4oIjxicj4iKSxDPW4ubW91c2UoaClbMF07YS5sb25lSG92ZXIoe3RyYWNlOmYseDpfLWQubGVmdCtnLmxlZnQseTp3LWQudG9wK2cudG9wLHRleHQ6RSxjb2xvcjp0Lm1vZGVsLmNvbG9yLGJvcmRlckNvbG9yOiJibGFjayIsZm9udEZhbWlseTonTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRTaXplOjEwLGZvbnRDb2xvcjpULGlkZWFsQWxpZ246QzxfPyJyaWdodCI6ImxlZnQiLGhvdmVydGVtcGxhdGU6KGYubGluZXx8e30pLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpBLGV2ZW50RGF0YTpbe2RhdGE6Zi5faW5wdXQsZnVsbERhdGE6Zixjb3VudDprLHByb2JhYmlsaXR5Ok19XX0se2NvbnRhaW5lcjpwLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpwLl9wYXBlci5ub2RlKCksZ2Q6aH0pfX19ZnVuY3Rpb24gZyh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJih4KG4uc2VsZWN0KHRoaXMpKSxhLmxvbmVVbmhvdmVyKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpLHQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLnNvcnQocCksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKSl7dmFyIGU9bSh0KSxyPXYodCk7dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV91bmhvdmVyIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudCxjb25zdHJhaW50czpyfSl9fWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPVtdLHI9SSh0LnBhcmNhdHNWaWV3TW9kZWwpLG49MDtuPHQubW9kZWwudmFsdWVJbmRzLmxlbmd0aDtuKyspe3ZhciBpPXQubW9kZWwudmFsdWVJbmRzW25dO2UucHVzaCh7Y3VydmVOdW1iZXI6cixwb2ludE51bWJlcjppfSl9cmV0dXJuIGV9ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9e30scj10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9ucyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0sYT1pLmNhdGVnb3JpZXNbdC5tb2RlbC5jYXRlZ29yeUluZHNbbl1dO2VbaS5jb250YWluZXJJbmRdPWEuY2F0ZWdvcnlWYWx1ZX1yZXR1cm4gdm9pZCAwIT09dC5tb2RlbC5yYXdDb2xvciYmKGUuY29sb3I9dC5tb2RlbC5yYXdDb2xvciksZX1mdW5jdGlvbiB5KHQpe2lmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSl7dmFyIGU9bSh0KSxyPXYodCk7dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV9jbGljayIse3BvaW50czplLGV2ZW50Om4uZXZlbnQsY29uc3RyYWludHM6cn0pfX1mdW5jdGlvbiB4KHQpe3QuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjYpLmF0dHIoInN0cm9rZSIsImxpZ2h0Z3JheSIpLmF0dHIoInN0cm9rZS13aWR0aCIsLjIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKX1mdW5jdGlvbiBiKHQpe3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuOCkuYXR0cigic3Ryb2tlIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsWyJibGFjayIsIndoaXRlIl0pfSkpLmF0dHIoInN0cm9rZS13aWR0aCIsLjMpfWZ1bmN0aW9uIF8odCl7dC5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIiwxKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSl9ZnVuY3Rpb24gdyh0KXt0LmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIiwuMikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDEpLmF0dHIoImZpbGwtb3BhY2l0eSIsMSl9ZnVuY3Rpb24gVCh0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWwucGF0aFNlbGVjdGlvbixyPXQuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uSW5kLG49dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5jYXRlZ29yeUluZDtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1vZGVsLmNhdGVnb3J5SW5kc1tyXT09PW4mJmUubW9kZWwuY29sb3I9PT10LmNvbG9yfSkpfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBpPW4uc2VsZWN0KHQpLmRhdHVtKCksYT1pLmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLG89aS5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LHM9bi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKSxsPVtdO3MuZWFjaCgoZnVuY3Rpb24odCl7VCh0KS5lYWNoKChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLG0odCkpfSkpfSkpO3ZhciBjPXt9O2NbYS5kaW1lbnNpb25JbmRdPWEuY2F0ZWdvcnlWYWx1ZSxvLmVtaXQoZSx7cG9pbnRzOmwsZXZlbnQ6cixjb25zdHJhaW50czpjfSl9ZnVuY3Rpb24gTSh0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuZGF0dW0oKSxhPWkuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwsbz1pLnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYscz1UKGkpLGw9W107cy5lYWNoKChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLG0odCkpfSkpO3ZhciBjPXt9O2NbYS5kaW1lbnNpb25JbmRdPWEuY2F0ZWdvcnlWYWx1ZSx2b2lkIDAhPT1pLnJhd0NvbG9yJiYoYy5jb2xvcj1pLnJhd0NvbG9yKSxvLmVtaXQoZSx7cG9pbnRzOmwsZXZlbnQ6cixjb25zdHJhaW50czpjfSl9ZnVuY3Rpb24gQSh0LGUpe3ZhciByLGksYT1uLnNlbGVjdChlLnBhcmVudE5vZGUpLnNlbGVjdCgicmVjdC5jYXRyZWN0Iiksbz1hLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWEuZGF0dW0oKSxsPXMucGFyY2F0c1ZpZXdNb2RlbCxjPWwubW9kZWwuZGltZW5zaW9uc1tzLm1vZGVsLmRpbWVuc2lvbkluZF0sdT1sLnRyYWNlLGg9by50b3Arby5oZWlnaHQvMjtsLmRpbWVuc2lvbnMubGVuZ3RoPjEmJmMuZGlzcGxheUluZD09PWwuZGltZW5zaW9ucy5sZW5ndGgtMT8ocj1vLmxlZnQsaT0ibGVmdCIpOihyPW8ubGVmdCtvLndpZHRoLGk9InJpZ2h0Iik7dmFyIGY9cy5tb2RlbC5jb3VudCxwPXMubW9kZWwuY2F0ZWdvcnlMYWJlbCxkPWYvcy5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LGc9e2NvdW50TGFiZWw6ZixjYXRlZ29yeUxhYmVsOnAscHJvYmFiaWxpdHlMYWJlbDpkLnRvRml4ZWQoMyl9LG09W107LTEhPT1zLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigiY291bnQiKSYmbS5wdXNoKFsiQ291bnQ6IixnLmNvdW50TGFiZWxdLmpvaW4oIiAiKSksLTEhPT1zLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigicHJvYmFiaWxpdHkiKSYmbS5wdXNoKFsiUCgiK2cuY2F0ZWdvcnlMYWJlbCsiKToiLGcucHJvYmFiaWxpdHlMYWJlbF0uam9pbigiICIpKTt2YXIgdj1tLmpvaW4oIjxicj4iKTtyZXR1cm57dHJhY2U6dSx4OnItdC5sZWZ0LHk6aC10LnRvcCx0ZXh0OnYsY29sb3I6ImxpZ2h0Z3JheSIsYm9yZGVyQ29sb3I6ImJsYWNrIixmb250RmFtaWx5OidNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZScsZm9udFNpemU6MTIsZm9udENvbG9yOiJibGFjayIsaWRlYWxBbGlnbjppLGhvdmVydGVtcGxhdGU6dS5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6ZyxldmVudERhdGE6W3tkYXRhOnUuX2lucHV0LGZ1bGxEYXRhOnUsY291bnQ6ZixjYXRlZ29yeTpwLHByb2JhYmlsaXR5OmR9XX19ZnVuY3Rpb24gUyh0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJi0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSl7aWYobi5tb3VzZSh0aGlzKVsxXTwtMSlyZXR1cm47dmFyIGUscj10LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsaT1yLl9mdWxsTGF5b3V0LHM9aS5fcGFwZXJkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb247aWYoImNvbG9yIj09PWM/KCFmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5kYXR1bSgpLHI9VChlKTtiKHIpLHIuZWFjaCgoZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSksbi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yPT09ZS5jb2xvcn0pKS5lYWNoKChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKSxuLnNlbGVjdCh0aGlzKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsMS41KX0pKX0odGhpcyksTSh0aGlzLCJwbG90bHlfaG92ZXIiLG4uZXZlbnQpKTooIWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9VCh0KTtiKGUpLGUuZWFjaCgoZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSl9KSksbi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIiwyLjUpfSh0aGlzKSxrKHRoaXMsInBsb3RseV9ob3ZlciIsbi5ldmVudCkpLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoIm5vbmUiKSkiY2F0ZWdvcnkiPT09Yz9lPUEocyx0aGlzKToiY29sb3IiPT09Yz9lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1uLnNlbGVjdChlKS5kYXR1bSgpLHM9by5jYXRlZ29yeVZpZXdNb2RlbCxjPXMucGFyY2F0c1ZpZXdNb2RlbCx1PWMubW9kZWwuZGltZW5zaW9uc1tzLm1vZGVsLmRpbWVuc2lvbkluZF0saD1jLnRyYWNlLGY9YS55K2EuaGVpZ2h0LzI7Yy5kaW1lbnNpb25zLmxlbmd0aD4xJiZ1LmRpc3BsYXlJbmQ9PT1jLmRpbWVuc2lvbnMubGVuZ3RoLTE/KHI9YS5sZWZ0LGk9ImxlZnQiKToocj1hLmxlZnQrYS53aWR0aCxpPSJyaWdodCIpO3ZhciBwPXMubW9kZWwuY2F0ZWdvcnlMYWJlbCxkPW8ucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5jb3VudCxnPTA7by5jYXRlZ29yeVZpZXdNb2RlbC5iYW5kcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNvbG9yPT09by5jb2xvciYmKGcrPXQuY291bnQpfSkpO3ZhciBtPXMubW9kZWwuY291bnQsdj0wO2MucGF0aFNlbGVjdGlvbi5lYWNoKChmdW5jdGlvbih0KXt0Lm1vZGVsLmNvbG9yPT09by5jb2xvciYmKHYrPXQubW9kZWwuY291bnQpfSkpO3ZhciB5PWcvZCx4PWcvdixiPWcvbSxfPXtjb3VudExhYmVsOmQsY2F0ZWdvcnlMYWJlbDpwLHByb2JhYmlsaXR5TGFiZWw6eS50b0ZpeGVkKDMpfSx3PVtdOy0xIT09cy5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoImNvdW50IikmJncucHVzaChbIkNvdW50OiIsXy5jb3VudExhYmVsXS5qb2luKCIgIikpLC0xIT09cy5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInByb2JhYmlsaXR5IikmJih3LnB1c2goIlAoY29sb3IgXHUyMjI5ICIrcCsiKTogIitfLnByb2JhYmlsaXR5TGFiZWwpLHcucHVzaCgiUCgiK3ArIiB8IGNvbG9yKTogIit4LnRvRml4ZWQoMykpLHcucHVzaCgiUChjb2xvciB8ICIrcCsiKTogIitiLnRvRml4ZWQoMykpKTt2YXIgVD13LmpvaW4oIjxicj4iKSxrPWwubW9zdFJlYWRhYmxlKG8uY29sb3IsWyJibGFjayIsIndoaXRlIl0pO3JldHVybnt0cmFjZTpoLHg6ci10LmxlZnQseTpmLXQudG9wLHRleHQ6VCxjb2xvcjpvLmNvbG9yLGJvcmRlckNvbG9yOiJibGFjayIsZm9udEZhbWlseTonTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRDb2xvcjprLGZvbnRTaXplOjEwLGlkZWFsQWxpZ246aSxob3ZlcnRlbXBsYXRlOmguaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOl8sZXZlbnREYXRhOlt7ZGF0YTpoLl9pbnB1dCxmdWxsRGF0YTpoLGNhdGVnb3J5OnAsY291bnQ6ZCxwcm9iYWJpbGl0eTp5LGNhdGVnb3J5Y291bnQ6bSxjb2xvcmNvdW50OnYsYmFuZGNvbG9yY291bnQ6Z31dfX0ocyx0aGlzKToiZGltZW5zaW9uIj09PWMmJihlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIG4uc2VsZWN0KGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmVhY2goKGZ1bmN0aW9uKCl7ci5wdXNoKEEodCx0aGlzKSl9KSkscn0ocyx0aGlzKSksZSYmYS5sb25lSG92ZXIoZSx7Y29udGFpbmVyOmkuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOmkuX3BhcGVyLm5vZGUoKSxnZDpyfSl9fWZ1bmN0aW9uIEUodCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsO2lmKCFlLmRyYWdEaW1lbnNpb24mJih4KGUucGF0aFNlbGVjdGlvbiksXyhlLmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKSksdyhlLmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKSksYS5sb25lVW5ob3ZlcihlLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSksZS5wYXRoU2VsZWN0aW9uLnNvcnQocCksLTE9PT1lLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSkpeyJjb2xvciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJvbj9NKHRoaXMsInBsb3RseV91bmhvdmVyIixuLmV2ZW50KTprKHRoaXMsInBsb3RseV91bmhvdmVyIixuLmV2ZW50KX19ZnVuY3Rpb24gQyh0KXsiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD10Lm1vZGVsLmRpc3BsYXlJbmQsdC5pbml0aWFsRHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRzPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKSx0LmRyYWdIYXNNb3ZlZD0hMSx0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9bnVsbCxuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4ubW91c2UodGhpcylbMF0saT1uLm1vdXNlKHRoaXMpWzFdOy0yPD1yJiZyPD1lLndpZHRoKzImJi0yPD1pJiZpPD1lLmhlaWdodCsyJiYodC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPWUubW9kZWwuZGlzcGxheUluZCx0LmluaXRpYWxEcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kcz10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpLGUubW9kZWwuZHJhZ1k9ZS55LG8ucmFpc2VUb1RvcCh0aGlzLnBhcmVudE5vZGUpLG4uc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZWFjaCgoZnVuY3Rpb24oZSl7ZS55PGkmJmk8PWUueStlLmhlaWdodCYmKHQucG90ZW50aWFsQ2xpY2tCYW5kPXRoaXMpfSkpKX0pKSx0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbj10LGEubG9uZVVuaG92ZXIodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSkpfWZ1bmN0aW9uIEwodCl7aWYoImZpeGVkIiE9PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCYmKHQuZHJhZ0hhc01vdmVkPSEwLG51bGwhPT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKSl7dmFyIGU9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCxyPWUtMSxpPWUrMSxhPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2VdO2lmKG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpe3ZhciBvPWEuY2F0ZWdvcmllc1t0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmRdO28ubW9kZWwuZHJhZ1krPW4uZXZlbnQuZHk7dmFyIHM9by5tb2RlbC5kcmFnWSxsPW8ubW9kZWwuZGlzcGxheUluZCxjPWEuY2F0ZWdvcmllcyx1PWNbbC0xXSxoPWNbbCsxXTt2b2lkIDAhPT11JiZzPHUueSt1LmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPXUubW9kZWwuZGlzcGxheUluZCx1Lm1vZGVsLmRpc3BsYXlJbmQ9bCksdm9pZCAwIT09aCYmcytvLmhlaWdodD5oLnkraC5oZWlnaHQvMiYmKG8ubW9kZWwuZGlzcGxheUluZD1oLm1vZGVsLmRpc3BsYXlJbmQsaC5tb2RlbC5kaXNwbGF5SW5kPWwpLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1vLm1vZGVsLmRpc3BsYXlJbmR9aWYobnVsbD09PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZHx8ImZyZWVmb3JtIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCl7YS5tb2RlbC5kcmFnWD1uLmV2ZW50Lng7dmFyIGY9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbcl0scD10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tpXTt2b2lkIDAhPT1mJiZhLm1vZGVsLmRyYWdYPGYueCtmLndpZHRoJiYoYS5tb2RlbC5kaXNwbGF5SW5kPWYubW9kZWwuZGlzcGxheUluZCxmLm1vZGVsLmRpc3BsYXlJbmQ9ZSksdm9pZCAwIT09cCYmYS5tb2RlbC5kcmFnWCthLndpZHRoPnAueCYmKGEubW9kZWwuZGlzcGxheUluZD1wLm1vZGVsLmRpc3BsYXlJbmQscC5tb2RlbC5kaXNwbGF5SW5kPXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpLHQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ9YS5tb2RlbC5kaXNwbGF5SW5kfUIodC5wYXJjYXRzVmlld01vZGVsKSxGKHQucGFyY2F0c1ZpZXdNb2RlbCksTyh0LnBhcmNhdHNWaWV3TW9kZWwpLHoodC5wYXJjYXRzVmlld01vZGVsKX19ZnVuY3Rpb24gUCh0KXtpZigiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiZudWxsIT09dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0ZXh0IikuYXR0cigiZm9udC13ZWlnaHQiLCJub3JtYWwiKTt2YXIgZT17fSxyPUkodC5wYXJjYXRzVmlld01vZGVsKSxhPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKSxvPXQuaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kcy5zb21lKChmdW5jdGlvbih0LGUpe3JldHVybiB0IT09YVtlXX0pKTtvJiZhLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7dmFyIGk9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbbl0uY29udGFpbmVySW5kO2VbImRpbWVuc2lvbnNbIitpKyJdLmRpc3BsYXlpbmRleCJdPXJ9KSk7dmFyIHM9ITE7aWYobnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl7dmFyIGw9dC5tb2RlbC5jYXRlZ29yaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKTtpZihzPXQuaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzLnNvbWUoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQhPT1sW2VdfSkpKXt2YXIgYz10Lm1vZGVsLmNhdGVnb3JpZXMuc2xpY2UoKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSkpLHU9Yy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3J5VmFsdWV9KSksaD1jLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcnlMYWJlbH0pKTtlWyJkaW1lbnNpb25zWyIrdC5tb2RlbC5jb250YWluZXJJbmQrIl0uY2F0ZWdvcnlhcnJheSJdPVt1XSxlWyJkaW1lbnNpb25zWyIrdC5tb2RlbC5jb250YWluZXJJbmQrIl0udGlja3RleHQiXT1baF0sZVsiZGltZW5zaW9uc1siK3QubW9kZWwuY29udGFpbmVySW5kKyJdLmNhdGVnb3J5b3JkZXIiXT0iYXJyYXkifX1pZigtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikmJiF0LmRyYWdIYXNNb3ZlZCYmdC5wb3RlbnRpYWxDbGlja0JhbmQmJigiY29sb3IiPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb24/TSh0LnBvdGVudGlhbENsaWNrQmFuZCwicGxvdGx5X2NsaWNrIixuLmV2ZW50LnNvdXJjZUV2ZW50KTprKHQucG90ZW50aWFsQ2xpY2tCYW5kLCJwbG90bHlfY2xpY2siLG4uZXZlbnQuc291cmNlRXZlbnQpKSx0Lm1vZGVsLmRyYWdYPW51bGwsbnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl0LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1t0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kXS5jYXRlZ29yaWVzW3QuZHJhZ0NhdGVnb3J5RGlzcGxheUluZF0ubW9kZWwuZHJhZ1k9bnVsbCx0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9bnVsbDt0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kPW51bGwsdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb249bnVsbCx0LmRyYWdIYXNNb3ZlZD1udWxsLHQucG90ZW50aWFsQ2xpY2tCYW5kPW51bGwsQih0LnBhcmNhdHNWaWV3TW9kZWwpLEYodC5wYXJjYXRzVmlld01vZGVsKSxuLnRyYW5zaXRpb24oKS5kdXJhdGlvbigzMDApLmVhc2UoImN1YmljLWluLW91dCIpLmVhY2goKGZ1bmN0aW9uKCl7Tyh0LnBhcmNhdHNWaWV3TW9kZWwsITApLHoodC5wYXJjYXRzVmlld01vZGVsLCEwKX0pKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpeyhvfHxzKSYmaS5yZXN0eWxlKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixlLFtyXSl9KSl9fWZ1bmN0aW9uIEkodCl7Zm9yKHZhciBlLHI9dC5ncmFwaERpdi5fZnVsbERhdGEsbj0wO248ci5sZW5ndGg7bisrKWlmKHQua2V5PT09cltuXS51aWQpe2U9bjticmVha31yZXR1cm4gZX1mdW5jdGlvbiB6KHQsZSl7dmFyIHI7dm9pZCAwPT09ZSYmKGU9ITEpLHQucGF0aFNlbGVjdGlvbi5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRoc30pLGgpLChyPXQucGF0aFNlbGVjdGlvbixlP3IudHJhbnNpdGlvbigpOnIpLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSkpfWZ1bmN0aW9uIE8odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP3QudHJhbnNpdGlvbigpOnR9dm9pZCAwPT09ZSYmKGU9ITEpLHQuZGltZW5zaW9uU2VsZWN0aW9uLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbWVuc2lvbnN9KSxoKTt2YXIgaT10LmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzfSksaCk7cih0LmRpbWVuc2lvblNlbGVjdGlvbikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiLCAwKSJ9KSkscihpKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrdC55KyIpIn0pKSxpLnNlbGVjdCgiLmRpbWxhYmVsIikudGV4dCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PWU/dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbdC5tb2RlbC5kaW1lbnNpb25JbmRdLmRpbWVuc2lvbkxhYmVsOm51bGx9KSksaS5zZWxlY3QoIi5jYXRsYWJlbCIpLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/InN0YXJ0IjoiZW5kIn0pKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/dC53aWR0aCs1Oi01fSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLHI7Zih0KT8oZT10LndpZHRoKzUscj0ic3RhcnQiKTooZT0tNSxyPSJlbmQiKSxuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRzcGFuIikuYXR0cigieCIsZSkuYXR0cigidGV4dC1hbmNob3IiLHIpfSkpO3ZhciBhPWkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmFuZHN9KSxoKSxzPWEuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhbmRyZWN0IikuYXR0cigiY3Vyc29yIiwibW92ZSIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KSkuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTthLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKSx3KHMpLGEuZWFjaCgoZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSksYS5leGl0KCkucmVtb3ZlKCl9ZnVuY3Rpb24gRCh0LGUscil7dmFyIG4saT1yWzBdLGE9ZS5tYXJnaW58fHtsOjgwLHI6ODAsdDoxMDAsYjo4MH0sbz1pLnRyYWNlLHM9by5kb21haW4sbD1lLndpZHRoLGM9ZS5oZWlnaHQsdT1NYXRoLmZsb29yKGwqKHMueFsxXS1zLnhbMF0pKSxoPU1hdGguZmxvb3IoYyoocy55WzFdLXMueVswXSkpLGY9cy54WzBdKmwrYS5sLHA9ZS5oZWlnaHQtcy55WzFdKmUuaGVpZ2h0K2EudCxkPW8ubGluZS5zaGFwZTtuPSJhbGwiPT09by5ob3ZlcmluZm8/WyJjb3VudCIsInByb2JhYmlsaXR5Il06KG8uaG92ZXJpbmZvfHwiIikuc3BsaXQoIisiKTt2YXIgZz17dHJhY2U6byxrZXk6by51aWQsbW9kZWw6aSx4OmYseTpwLHdpZHRoOnUsaGVpZ2h0OmgsaG92ZXJvbjpvLmhvdmVyb24saG92ZXJpbmZvSXRlbXM6bixhcnJhbmdlbWVudDpvLmFycmFuZ2VtZW50LGJ1bmRsZWNvbG9yczpvLmJ1bmRsZWNvbG9ycyxzb3J0cGF0aHM6by5zb3J0cGF0aHMsbGFiZWxmb250Om8ubGFiZWxmb250LGNhdGVnb3J5bGFiZWxmb250Om8udGlja2ZvbnQscGF0aFNoYXBlOmQsZHJhZ0RpbWVuc2lvbjpudWxsLG1hcmdpbjphLHBhdGhzOltdLGRpbWVuc2lvbnM6W10sZ3JhcGhEaXY6dCx0cmFjZVNlbGVjdGlvbjpudWxsLHBhdGhTZWxlY3Rpb246bnVsbCxkaW1lbnNpb25TZWxlY3Rpb246bnVsbH07cmV0dXJuIGkuZGltZW5zaW9ucyYmKEIoZyksRihnKSksZ31mdW5jdGlvbiBSKHQsZSxyLGksYSl7dmFyIG8scyxsPVtdLGM9W107Zm9yKHM9MDtzPHIubGVuZ3RoLTE7cysrKW89bi5pbnRlcnBvbGF0ZU51bWJlcihyW3NdK3Rbc10sdFtzKzFdKSxsLnB1c2gobyhhKSksYy5wdXNoKG8oMS1hKSk7dmFyIHU9Ik0gIit0WzBdKyIsIitlWzBdO2Zvcih1Kz0ibCIrclswXSsiLDAgIixzPTE7czxyLmxlbmd0aDtzKyspdSs9IkMiK2xbcy0xXSsiLCIrZVtzLTFdKyIgIitjW3MtMV0rIiwiK2Vbc10rIiAiK3Rbc10rIiwiK2Vbc10sdSs9ImwiK3Jbc10rIiwwICI7Zm9yKHUrPSJsMCwiK2krIiAiLHUrPSJsIC0iK3Jbci5sZW5ndGgtMV0rIiwwICIscz1yLmxlbmd0aC0yO3M+PTA7cy0tKXUrPSJDIitjW3NdKyIsIisoZVtzKzFdK2kpKyIgIitsW3NdKyIsIisoZVtzXStpKSsiICIrKHRbc10rcltzXSkrIiwiKyhlW3NdK2kpLHUrPSJsLSIrcltzXSsiLDAgIjtyZXR1cm4gdSs9IloifWZ1bmN0aW9uIEYodCl7dmFyIGU9dC5kaW1lbnNpb25zLHI9dC5tb2RlbCxuPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKX0pKSxpPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpfSkpLGE9dC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKSxvPXQuZGltZW5zaW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmRpbWVuc2lvbkluZH0pKSxzPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLGw9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkpLGM9W107Zm9yKHZhciB1IGluIHIucGF0aHMpci5wYXRocy5oYXNPd25Qcm9wZXJ0eSh1KSYmYy5wdXNoKHIucGF0aHNbdV0pO2Z1bmN0aW9uIGgodCl7dmFyIGU9dC5jYXRlZ29yeUluZHMubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBpW2VdW3RdfSkpO3JldHVybiBvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KSl9Yy5zb3J0KChmdW5jdGlvbihlLHIpe3ZhciBuPWgoZSksaT1oKHIpO3JldHVybiJiYWNrd2FyZCI9PT10LnNvcnRwYXRocyYmKG4ucmV2ZXJzZSgpLGkucmV2ZXJzZSgpKSxuLnB1c2goZS52YWx1ZUluZHNbMF0pLGkucHVzaChyLnZhbHVlSW5kc1swXSksdC5idW5kbGVjb2xvcnMmJihuLnVuc2hpZnQoZS5yYXdDb2xvciksaS51bnNoaWZ0KHIucmF3Q29sb3IpKSxuPGk/LTE6bj5pPzE6MH0pKTtmb3IodmFyIGY9bmV3IEFycmF5KGMubGVuZ3RoKSxwPWVbMF0ubW9kZWwuY291bnQsZD1lWzBdLmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSksZz0wO2c8Yy5sZW5ndGg7ZysrKXt2YXIgbSx2PWNbZ107bT1wPjA/ZCoodi5jb3VudC9wKTowO2Zvcih2YXIgeSx4PW5ldyBBcnJheShuLmxlbmd0aCksYj0wO2I8di5jYXRlZ29yeUluZHMubGVuZ3RoO2IrKyl7dmFyIF89di5jYXRlZ29yeUluZHNbYl0sdz1pW2JdW19dLFQ9YVtiXTt4W1RdPW5bVF1bd10sbltUXVt3XSs9bTt2YXIgaz10LmRpbWVuc2lvbnNbVF0uY2F0ZWdvcmllc1t3XSxNPWsuYmFuZHMubGVuZ3RoLEE9ay5iYW5kc1tNLTFdO2lmKHZvaWQgMD09PUF8fHYucmF3Q29sb3IhPT1BLnJhd0NvbG9yKXt2YXIgUz12b2lkIDA9PT1BPzA6QS55K0EuaGVpZ2h0O2suYmFuZHMucHVzaCh7a2V5OlMsY29sb3I6di5jb2xvcixyYXdDb2xvcjp2LnJhd0NvbG9yLGhlaWdodDptLHdpZHRoOmsud2lkdGgsY291bnQ6di5jb3VudCx5OlMsY2F0ZWdvcnlWaWV3TW9kZWw6ayxwYXJjYXRzVmlld01vZGVsOnR9KX1lbHNle3ZhciBFPWsuYmFuZHNbTS0xXTtFLmhlaWdodCs9bSxFLmNvdW50Kz12LmNvdW50fX15PSJoc3BsaW5lIj09PXQucGF0aFNoYXBlP1Iocyx4LGwsbSwuNSk6UihzLHgsbCxtLDApLGZbZ109e2tleTp2LnZhbHVlSW5kc1swXSxtb2RlbDp2LGhlaWdodDptLGxlZnRYczpzLHRvcFlzOngsZGltV2lkdGhzOmwsc3ZnRDp5LHBhcmNhdHNWaWV3TW9kZWw6dH19dC5wYXRocz1mfWZ1bmN0aW9uIEIodCl7dmFyIGU9dC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue2Rpc3BsYXlJbmQ6dC5kaXNwbGF5SW5kLGRpbWVuc2lvbkluZDp0LmRpbWVuc2lvbkluZH19KSk7ZS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSkpO3ZhciByPVtdO2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dLmRpbWVuc2lvbkluZCxhPXQubW9kZWwuZGltZW5zaW9uc1tpXTtyLnB1c2goTih0LGEpKX10LmRpbWVuc2lvbnM9cn1mdW5jdGlvbiBOKHQsZSl7dmFyIHIsbj10Lm1vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLGk9ZS5kaXNwbGF5SW5kO3I9NDArKG4+MT8odC53aWR0aC04MC0xNikvKG4tMSk6MCkqaTt2YXIgYSxvLHMsbCxjLHU9W10saD10Lm1vZGVsLm1heENhdHMsZj1lLmNhdGVnb3JpZXMubGVuZ3RoLHA9ZS5jb3VudCxkPXQuaGVpZ2h0LTgqKGgtMSksZz04KihoLWYpLzIsbT1lLmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm57ZGlzcGxheUluZDp0LmRpc3BsYXlJbmQsY2F0ZWdvcnlJbmQ6dC5jYXRlZ29yeUluZH19KSk7Zm9yKG0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pKSxjPTA7YzxmO2MrKylsPW1bY10uY2F0ZWdvcnlJbmQsbz1lLmNhdGVnb3JpZXNbbF0sYT1wPjA/by5jb3VudC9wKmQ6MCxzPXtrZXk6by52YWx1ZUluZHNbMF0sbW9kZWw6byx3aWR0aDoxNixoZWlnaHQ6YSx5Om51bGwhPT1vLmRyYWdZP28uZHJhZ1k6ZyxiYW5kczpbXSxwYXJjYXRzVmlld01vZGVsOnR9LGc9ZythKzgsdS5wdXNoKHMpO3JldHVybntrZXk6ZS5kaW1lbnNpb25JbmQseDpudWxsIT09ZS5kcmFnWD9lLmRyYWdYOnIseTowLHdpZHRoOjE2LG1vZGVsOmUsY2F0ZWdvcmllczp1LHBhcmNhdHNWaWV3TW9kZWw6dCxkcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kOm51bGwsZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ6bnVsbCxpbml0aWFsRHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRzOm51bGwsaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzOm51bGwsZHJhZ0hhc01vdmVkOm51bGwscG90ZW50aWFsQ2xpY2tCYW5kOm51bGx9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt1KHIsdCxuLGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vY29tcG9uZW50cy9meCI6NjU1LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NzQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfYXBpIjo3ODUsZDM6MTY5LHRpbnljb2xvcjI6NTQ4fV0sMTExOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3BhcmNhdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dC5fZnVsbExheW91dCxvPWEuX3BhcGVyLHM9YS5fc2l6ZTtuKHQsbyxlLHt3aWR0aDpzLncsaGVpZ2h0OnMuaCxtYXJnaW46e3Q6cy50LHI6cy5yLGI6cy5iLGw6cy5sfX0scixpKX19LHsiLi9wYXJjYXRzIjoxMTE4fV0sMTEyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9e2RvbWFpbjpvKHtuYW1lOiJwYXJjb29yZHMiLHRyYWNlOiEwLGVkaXRUeXBlOiJwbG90In0pLGxhYmVsYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxsYWJlbHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCIsZWRpdFR5cGU6InBsb3QifSxsYWJlbGZvbnQ6YSh7ZWRpdFR5cGU6InBsb3QifSksdGlja2ZvbnQ6YSh7ZWRpdFR5cGU6InBsb3QifSkscmFuZ2Vmb250OmEoe2VkaXRUeXBlOiJwbG90In0pLGRpbWVuc2lvbnM6bCgiZGltZW5zaW9uIix7bGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSx0aWNrdmFsczpzKHt9LGkudGlja3ZhbHMse2VkaXRUeXBlOiJwbG90In0pLHRpY2t0ZXh0OnMoe30saS50aWNrdGV4dCx7ZWRpdFR5cGU6InBsb3QifSksdGlja2Zvcm1hdDpzKHt9LGkudGlja2Zvcm1hdCx7ZWRpdFR5cGU6InBsb3QifSksdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9XSxlZGl0VHlwZToicGxvdCJ9LGNvbnN0cmFpbnRyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxkaW1lbnNpb25zOiIxLTIiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In1dLGVkaXRUeXBlOiJwbG90In0sbXVsdGlzZWxlY3Q6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSx2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSksbGluZTpzKHtlZGl0VHlwZToiY2FsYyJ9LG4oImxpbmUiLHtjb2xvcnNjYWxlRGZsdDoiVmlyaWRpcyIsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYyMiwiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODEzLCIuLi8uLi9wbG90cy9kb21haW4iOjgyNiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4Mjd9XSwxMTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJkMyIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLmtleUZ1bixvPXQoIi4uLy4uL2xpYi9ndXAiKS5yZXBlYXQscz10KCIuLi8uLi9saWIiKS5zb3J0ZXJBc2MsbD1uLmJhci5zbmFwUmF0aW87ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0KigxLWwpK2UqbH12YXIgdT1uLmJhci5zbmFwQ2xvc2U7ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0KigxLXUpK2UqdX1mdW5jdGlvbiBmKHQsZSxyLG4pe2lmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYodD49ZVtyXVswXSYmdDw9ZVtyXVsxXSlyZXR1cm4hMDtyZXR1cm4hMX0ocixuKSlyZXR1cm4gcjt2YXIgaT10Py0xOjEsYT0wLG89ZS5sZW5ndGgtMTtpZihpPDApe3ZhciBzPWE7YT1vLG89c31mb3IodmFyIGw9ZVthXSx1PWwsZj1hO2kqZjxpKm87Zis9aSl7dmFyIHA9ZitpLGQ9ZVtwXTtpZihpKnI8aSpoKGwsZCkpcmV0dXJuIGMobCx1KTtpZihpKnI8aSpkfHxwPT09bylyZXR1cm4gYyhkLGwpO3U9bCxsPWR9fWZ1bmN0aW9uIHAodCl7dC5hdHRyKCJ4Iiwtbi5iYXIuY2FwdHVyZVdpZHRoLzIpLmF0dHIoIndpZHRoIixuLmJhci5jYXB0dXJlV2lkdGgpfWZ1bmN0aW9uIGQodCl7dC5hdHRyKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpLmF0dHIoImZpbGwiLCJ5ZWxsb3ciKS5hdHRyKCJvcGFjaXR5IiwwKX1mdW5jdGlvbiBnKHQpe2lmKCF0LmJydXNoLmZpbHRlclNwZWNpZmllZClyZXR1cm4iMCwiK3QuaGVpZ2h0O2Zvcih2YXIgZSxyLG4saT1tKHQuYnJ1c2guZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpLHQuaGVpZ2h0KSxhPVswXSxvPWkubGVuZ3RoP2lbMF1bMF06bnVsbCxzPTA7czxpLmxlbmd0aDtzKyspcj0oZT1pW3NdKVsxXS1lWzBdLGEucHVzaChvKSxhLnB1c2gociksKG49cysxKTxpLmxlbmd0aCYmKG89aVtuXVswXS1lWzFdKTtyZXR1cm4gYS5wdXNoKHQuaGVpZ2h0KSxhfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsdCplKX0pKS5zb3J0KHMpfSkpfWZ1bmN0aW9uIHYoKXtpLnNlbGVjdChkb2N1bWVudC5ib2R5KS5zdHlsZSgiY3Vyc29yIixudWxsKX1mdW5jdGlvbiB5KHQpe3QuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsZyl9ZnVuY3Rpb24geCh0LGUpe3ZhciByPWkuc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmhpZ2hsaWdodCwgLmhpZ2hsaWdodC1zaGFkb3ciKTt5KGU/ci50cmFuc2l0aW9uKCkuZHVyYXRpb24obi5iYXIuc25hcER1cmF0aW9uKS5lYWNoKCJlbmQiLGUpOnIpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcixpPXQuYnJ1c2gsYT1OYU4sbz17fTtpZihpLmZpbHRlclNwZWNpZmllZCl7dmFyIHM9dC5oZWlnaHQsbD1pLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKSxjPW0obCxzKSx1PU5hTixoPU5hTixmPU5hTjtmb3Iocj0wO3I8PWMubGVuZ3RoO3IrKyl7dmFyIHA9Y1tyXTtpZihwJiZwWzBdPD1lJiZlPD1wWzFdKXt1PXI7YnJlYWt9aWYoaD1yP3ItMTpOYU4scCYmcFswXT5lKXtmPXI7YnJlYWt9fWlmKGE9dSxpc05hTihhKSYmKGE9aXNOYU4oaCl8fGlzTmFOKGYpP2lzTmFOKGgpP2Y6aDplLWNbaF1bMV08Y1tmXVswXS1lP2g6ZiksIWlzTmFOKGEpKXt2YXIgZD1jW2FdLGc9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmJhci5oYW5kbGVIZWlnaHQ7aWYoIShlPnRbMV0rcnx8ZTx0WzBdLXIpKXJldHVybiBlPj0uOSp0WzFdKy4xKnRbMF0/Im4iOmU8PS45KnRbMF0rLjEqdFsxXT8icyI6Im5zIn0oZCxlKTtnJiYoby5pbnRlcnZhbD1sW2FdLG8uaW50ZXJ2YWxQaXg9ZCxvLnJlZ2lvbj1nKX19aWYodC5vcmRpbmFsJiYhby5yZWdpb24pe3ZhciB2PXQudW5pdFRpY2t2YWxzLHk9dC51bml0VG9QYWRkZWRQeC5pbnZlcnQoZSk7Zm9yKHI9MDtyPHYubGVuZ3RoO3IrKyl7dmFyIHg9Wy4yNSp2W01hdGgubWF4KHItMSwwKV0rLjc1KnZbcl0sLjI1KnZbTWF0aC5taW4ocisxLHYubGVuZ3RoLTEpXSsuNzUqdltyXV07aWYoeT49eFswXSYmeTw9eFsxXSl7by5jbGlja2FibGVPcmRpbmFsUmFuZ2U9eDticmVha319fXJldHVybiBvfWZ1bmN0aW9uIF8odCxlKXtpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciByPWUuaGVpZ2h0LWkubW91c2UodClbMV0tMipuLnZlcnRpY2FsUGFkZGluZyxhPWUuYnJ1c2guc3ZnQnJ1c2g7YS53YXNEcmFnZ2VkPSEwLGEuX2RyYWdnaW5nPSEwLGEuZ3JhYmJpbmdCYXI/YS5uZXdFeHRlbnQ9W3ItYS5ncmFiUG9pbnQscithLmJhckxlbmd0aC1hLmdyYWJQb2ludF0ubWFwKGUudW5pdFRvUGFkZGVkUHguaW52ZXJ0KTphLm5ld0V4dGVudD1bYS5zdGFydEV4dGVudCxlLnVuaXRUb1BhZGRlZFB4LmludmVydChyKV0uc29ydChzKSxlLmJydXNoLmZpbHRlclNwZWNpZmllZD0hMCxhLmV4dGVudD1hLnN0YXlpbmdJbnRlcnZhbHMuY29uY2F0KFthLm5ld0V4dGVudF0pLGEuYnJ1c2hDYWxsYmFjayhlKSx4KHQucGFyZW50Tm9kZSl9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPWIoZSxlLmhlaWdodC1pLm1vdXNlKHQpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcpLGE9ImNyb3NzaGFpciI7ci5jbGlja2FibGVPcmRpbmFsUmFuZ2U/YT0icG9pbnRlciI6ci5yZWdpb24mJihhPXIucmVnaW9uKyItcmVzaXplIiksaS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoImN1cnNvciIsYSl9ZnVuY3Rpb24gVCh0KXt0Lm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbih0KXtpLmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5wYXJlbnQuaW5CcnVzaERyYWd8fHcodGhpcyx0KX0pKS5vbigibW91c2VsZWF2ZSIsKGZ1bmN0aW9uKHQpe3QucGFyZW50LmluQnJ1c2hEcmFnfHx2KCl9KSkuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7aS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgcj1lLmhlaWdodC1pLm1vdXNlKHQpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcsYT1lLnVuaXRUb1BhZGRlZFB4LmludmVydChyKSxvPWUuYnJ1c2gscz1iKGUsciksbD1zLmludGVydmFsLGM9by5zdmdCcnVzaDtpZihjLndhc0RyYWdnZWQ9ITEsYy5ncmFiYmluZ0Jhcj0ibnMiPT09cy5yZWdpb24sYy5ncmFiYmluZ0Jhcil7dmFyIHU9bC5tYXAoZS51bml0VG9QYWRkZWRQeCk7Yy5ncmFiUG9pbnQ9ci11WzBdLW4udmVydGljYWxQYWRkaW5nLGMuYmFyTGVuZ3RoPXVbMV0tdVswXX1jLmNsaWNrYWJsZU9yZGluYWxSYW5nZT1zLmNsaWNrYWJsZU9yZGluYWxSYW5nZSxjLnN0YXlpbmdJbnRlcnZhbHM9ZS5tdWx0aXNlbGVjdCYmby5maWx0ZXJTcGVjaWZpZWQ/by5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCk6W10sbCYmKGMuc3RheWluZ0ludGVydmFscz1jLnN0YXlpbmdJbnRlcnZhbHMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXSE9PWxbMF0mJnRbMV0hPT1sWzFdfSkpKSxjLnN0YXJ0RXh0ZW50PXMucmVnaW9uP2xbInMiPT09cy5yZWdpb24/MTowXTphLGUucGFyZW50LmluQnJ1c2hEcmFnPSEwLGMuYnJ1c2hTdGFydENhbGxiYWNrKCl9KHRoaXMsdCl9KSkub24oImRyYWciLChmdW5jdGlvbih0KXtfKHRoaXMsdCl9KSkub24oImRyYWdlbmQiLChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXt2YXIgcj1lLmJydXNoLG49ci5maWx0ZXIsYT1yLnN2Z0JydXNoO2EuX2RyYWdnaW5nfHwodyh0LGUpLF8odCxlKSxlLmJydXNoLnN2Z0JydXNoLndhc0RyYWdnZWQ9ITEpLGEuX2RyYWdnaW5nPSExLGkuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIG89YS5ncmFiYmluZ0JhcjtpZihhLmdyYWJiaW5nQmFyPSExLGEuZ3JhYkxvY2F0aW9uPXZvaWQgMCxlLnBhcmVudC5pbkJydXNoRHJhZz0hMSx2KCksIWEud2FzRHJhZ2dlZClyZXR1cm4gYS53YXNEcmFnZ2VkPXZvaWQgMCxhLmNsaWNrYWJsZU9yZGluYWxSYW5nZT9yLmZpbHRlclNwZWNpZmllZCYmZS5tdWx0aXNlbGVjdD9hLmV4dGVudC5wdXNoKGEuY2xpY2thYmxlT3JkaW5hbFJhbmdlKTooYS5leHRlbnQ9W2EuY2xpY2thYmxlT3JkaW5hbFJhbmdlXSxyLmZpbHRlclNwZWNpZmllZD0hMCk6bz8oYS5leHRlbnQ9YS5zdGF5aW5nSW50ZXJ2YWxzLDA9PT1hLmV4dGVudC5sZW5ndGgmJk0ocikpOk0ociksYS5icnVzaENhbGxiYWNrKGUpLHgodC5wYXJlbnROb2RlKSx2b2lkIGEuYnJ1c2hFbmRDYWxsYmFjayhyLmZpbHRlclNwZWNpZmllZD9uLmdldENvbnNvbGlkYXRlZCgpOltdKTt2YXIgcz1mdW5jdGlvbigpe24uc2V0KG4uZ2V0Q29uc29saWRhdGVkKCkpfTtpZihlLm9yZGluYWwpe3ZhciBsPWUudW5pdFRpY2t2YWxzO2xbbC5sZW5ndGgtMV08bFswXSYmbC5yZXZlcnNlKCksYS5uZXdFeHRlbnQ9W2YoMCxsLGEubmV3RXh0ZW50WzBdLGEuc3RheWluZ0ludGVydmFscyksZigxLGwsYS5uZXdFeHRlbnRbMV0sYS5zdGF5aW5nSW50ZXJ2YWxzKV07dmFyIGM9YS5uZXdFeHRlbnRbMV0+YS5uZXdFeHRlbnRbMF07YS5leHRlbnQ9YS5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChjP1thLm5ld0V4dGVudF06W10pLGEuZXh0ZW50Lmxlbmd0aHx8TShyKSxhLmJydXNoQ2FsbGJhY2soZSksYz94KHQucGFyZW50Tm9kZSxzKToocygpLHgodC5wYXJlbnROb2RlKSl9ZWxzZSBzKCk7YS5icnVzaEVuZENhbGxiYWNrKHIuZmlsdGVyU3BlY2lmaWVkP24uZ2V0Q29uc29saWRhdGVkKCk6W10pfSh0aGlzLHQpfSkpKX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBNKHQpe3QuZmlsdGVyU3BlY2lmaWVkPSExLHQuc3ZnQnJ1c2guZXh0ZW50PVtbLTEvMCwxLzBdXX1mdW5jdGlvbiBBKHQpe2Zvcih2YXIgZSxyPXQuc2xpY2UoKSxuPVtdLGk9ci5zaGlmdCgpO2k7KXtmb3IoZT1pLnNsaWNlKCk7KGk9ci5zaGlmdCgpKSYmaVswXTw9ZVsxXTspZVsxXT1NYXRoLm1heChlWzFdLGlbMV0pO24ucHVzaChlKX1yZXR1cm4gMT09PW4ubGVuZ3RoJiZuWzBdWzBdPm5bMF1bMV0mJihuPVtdKSxufWUuZXhwb3J0cz17bWFrZUJydXNoOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPVtdO3JldHVybntzZXQ6ZnVuY3Rpb24obil7MT09PShyPW4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpLnNvcnQocyl9KSkuc29ydChrKSkubGVuZ3RoJiZyWzBdWzBdPT09LTEvMCYmclswXVsxXT09PTEvMCYmKHI9W1swLC0xXV0pLHQ9QShyKSxlPXIucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybltNYXRoLm1pbih0WzBdLGVbMF0pLE1hdGgubWF4KHRbMV0sZVsxXSldfSksWzEvMCwtMS8wXSl9LGdldDpmdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LGdldENvbnNvbGlkYXRlZDpmdW5jdGlvbigpe3JldHVybiB0fSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gZX19fSgpO3JldHVybiBsLnNldChyKSx7ZmlsdGVyOmwsZmlsdGVyU3BlY2lmaWVkOmUsc3ZnQnJ1c2g6e2V4dGVudDpbXSxicnVzaFN0YXJ0Q2FsbGJhY2s6bixicnVzaENhbGxiYWNrOihvPWksZnVuY3Rpb24odCl7dmFyIGU9dC5icnVzaCxyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0JydXNoLmV4dGVudC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KSl9KGUpLnNsaWNlKCk7ZS5maWx0ZXIuc2V0KHIpLG8oKX0pLGJydXNoRW5kQ2FsbGJhY2s6YX19fSxlbnN1cmVBeGlzQnJ1c2g6ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uYXhpc0JydXNoKS5kYXRhKG8sYSk7ZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5heGlzQnJ1c2gsITApLGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpLmRhdGEobyk7ZS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImJhY2tncm91bmQiLCEwKS5jYWxsKHApLmNhbGwoZCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwICIrbi52ZXJ0aWNhbFBhZGRpbmcrIikiKSxlLmNhbGwoVCkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0LW4udmVydGljYWxQYWRkaW5nfSkpO3ZhciByPXQuc2VsZWN0QWxsKCIuaGlnaGxpZ2h0LXNoYWRvdyIpLmRhdGEobyk7ci5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImhpZ2hsaWdodC1zaGFkb3ciLCEwKS5hdHRyKCJ4Iiwtbi5iYXIud2lkdGgvMikuYXR0cigic3Ryb2tlLXdpZHRoIixuLmJhci53aWR0aCtuLmJhci5zdHJva2VXaWR0aCkuYXR0cigic3Ryb2tlIixuLmJhci5zdHJva2VDb2xvcikuYXR0cigib3BhY2l0eSIsbi5iYXIuc3Ryb2tlT3BhY2l0eSkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJidXR0Iiksci5hdHRyKCJ5MSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKS5jYWxsKHkpO3ZhciBpPXQuc2VsZWN0QWxsKCIuaGlnaGxpZ2h0IikuZGF0YShvKTtpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiaGlnaGxpZ2h0IiwhMCkuYXR0cigieCIsLW4uYmFyLndpZHRoLzIpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5iYXIud2lkdGgtbi5iYXIuc3Ryb2tlV2lkdGgpLmF0dHIoInN0cm9rZSIsbi5iYXIuZmlsbENvbG9yKS5hdHRyKCJvcGFjaXR5IixuLmJhci5maWxsT3BhY2l0eSkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJidXR0IiksaS5hdHRyKCJ5MSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKS5jYWxsKHkpfShlKX0sY2xlYW5SYW5nZXM6ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHRbMF0pPyh0PXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3J0KHMpfSkpLHQ9ZS5tdWx0aXNlbGVjdD9BKHQuc29ydChrKSk6W3RbMF1dKTp0PVt0LnNvcnQocyldLGUudGlja3ZhbHMpe3ZhciByPWUudGlja3ZhbHMuc2xpY2UoKS5zb3J0KHMpO2lmKCEodD10Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9W2YoMCxyLHRbMF0sW10pLGYoMSxyLHRbMV0sW10pXTtpZihlWzFdPmVbMF0pcmV0dXJuIGV9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKSkubGVuZ3RoKXJldHVybn1yZXR1cm4gdC5sZW5ndGg+MT90OnRbMF19fX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL2d1cCI6NzQ3LCIuL2NvbnN0YW50cyI6MTEyNCxkMzoxNjl9XSwxMTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLGE9dCgiLi9wbG90Iiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO3IubmFtZT0icGFyY29vcmRzIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLCJwYXJjb29yZHMiKVswXTtlLmxlbmd0aCYmYSh0LGUpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJwYXJjb29yZHMiKSxhPWUuX2hhcyYmZS5faGFzKCJwYXJjb29yZHMiKTtpJiYhYSYmKG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnBhcmNvb3JkcyIpLnJlbW92ZSgpLG4uX2dsaW1hZ2VzLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpKX0sci50b1NWRz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9nbGltYWdlcyxyPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKTtyLmZpbHRlcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT09PXIuc2l6ZSgpLTF9KSkuc2VsZWN0QWxsKCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXMiKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PXRoaXMudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtlLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcsInhsaW5rOmhyZWYiOnQscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSIseDowLHk6MCx3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0pfSkpLHdpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe24uc2VsZWN0QWxsKCIjZmlsdGVyQmFyUGF0dGVybiIpLmF0dHIoImlkIiwiZmlsdGVyQmFyUGF0dGVybiIpfSksNjApfX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzI2LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6ODM2LCIuL3Bsb3QiOjExMzEsZDM6MTY5fV0sMTEyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksYT10KCIuLi8uLi9saWIvZ3VwIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvO3JldHVybiBpLmhhc0NvbG9yc2NhbGUoZSwibGluZSIpJiZuKGUubGluZS5jb2xvcik/KHI9ZS5saW5lLmNvbG9yLG89aS5leHRyYWN0T3B0cyhlLmxpbmUpLmNvbG9yc2NhbGUsaS5jYWxjKHQsZSx7dmFsczpyLGNvbnRhaW5lclN0cjoibGluZSIsY0xldHRlcjoiYyJ9KSk6KHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPS41O3JldHVybiBlfShlLl9sZW5ndGgpLG89W1swLGUubGluZS5jb2xvcl0sWzEsZS5saW5lLmNvbG9yXV0pLGEoe2xpbmVDb2xvcjpyLGNzY2FsZTpvfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL2d1cCI6NzQ3fV0sMTEyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21heERpbWVuc2lvbkNvdW50OjYwLG92ZXJkcmFnOjQ1LHZlcnRpY2FsUGFkZGluZzoyLHRpY2tEaXN0YW5jZTo1MCxjYW52YXNQaXhlbFJhdGlvOjEsYmxvY2tMaW5lQ291bnQ6NWUzLGxheWVyczpbImNvbnRleHRMaW5lTGF5ZXIiLCJmb2N1c0xpbmVMYXllciIsInBpY2tMaW5lTGF5ZXIiXSxheGlzVGl0bGVPZmZzZXQ6MjgsYXhpc0V4dGVudE9mZnNldDoxMCxkZXNlbGVjdGVkTGluZUNvbG9yOiIjNzc3IixiYXI6e3dpZHRoOjQsY2FwdHVyZVdpZHRoOjEwLGZpbGxDb2xvcjoibWFnZW50YSIsZmlsbE9wYWNpdHk6MSxzbmFwRHVyYXRpb246MTUwLHNuYXBSYXRpbzouMjUsc25hcENsb3NlOi4wMSxzdHJva2VDb2xvcjoid2hpdGUiLHN0cm9rZU9wYWNpdHk6MSxzdHJva2VXaWR0aDoxLGhhbmRsZUhlaWdodDo4LGhhbmRsZU9wYWNpdHk6MSxoYW5kbGVPdmVybGFwOjB9LGNuOntheGlzRXh0ZW50VGV4dDoiYXhpcy1leHRlbnQtdGV4dCIscGFyY29vcmRzTGluZUxheWVyczoicGFyY29vcmRzLWxpbmUtbGF5ZXJzIixwYXJjb29yZHNMaW5lTGF5ZXI6InBhcmNvb3Jkcy1saW5lcyIscGFyY29vcmRzOiJwYXJjb29yZHMiLHBhcmNvb3Jkc0NvbnRyb2xWaWV3OiJwYXJjb29yZHMtY29udHJvbC12aWV3Iix5QXhpczoieS1heGlzIixheGlzT3ZlcmxheXM6ImF4aXMtb3ZlcmxheXMiLGF4aXM6ImF4aXMiLGF4aXNIZWFkaW5nOiJheGlzLWhlYWRpbmciLGF4aXNUaXRsZToiYXhpcy10aXRsZSIsYXhpc0V4dGVudDoiYXhpcy1leHRlbnQiLGF4aXNFeHRlbnRUb3A6ImF4aXMtZXh0ZW50LXRvcCIsYXhpc0V4dGVudFRvcFRleHQ6ImF4aXMtZXh0ZW50LXRvcC10ZXh0IixheGlzRXh0ZW50Qm90dG9tOiJheGlzLWV4dGVudC1ib3R0b20iLGF4aXNFeHRlbnRCb3R0b21UZXh0OiJheGlzLWV4dGVudC1ib3R0b20tdGV4dCIsYXhpc0JydXNoOiJheGlzLWJydXNoIn0saWQ6e2ZpbHRlckJhclBhdHRlcm46ImZpbHRlci1iYXItcGF0dGVybiJ9fX0se31dLDExMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGM9dCgiLi9hdHRyaWJ1dGVzIiksdT10KCIuL2F4aXNicnVzaCIpLGg9dCgiLi9jb25zdGFudHMiKS5tYXhEaW1lbnNpb25Db3VudCxmPXQoIi4vbWVyZ2VfbGVuZ3RoIik7ZnVuY3Rpb24gcCh0LGUscixpKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLmRpbWVuc2lvbnMscixpKX12YXIgbz1hKCJ2YWx1ZXMiKSxzPWEoInZpc2libGUiKTtpZihvJiZvLmxlbmd0aHx8KHM9ZS52aXNpYmxlPSExKSxzKXthKCJsYWJlbCIpLGEoInRpY2t2YWxzIiksYSgidGlja3RleHQiKSxhKCJ0aWNrZm9ybWF0Iik7dmFyIGg9YSgicmFuZ2UiKTtlLl9heD17X2lkOiJ5Iix0eXBlOiJsaW5lYXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiIscmFuZ2U6aH0sbC5zZXRDb252ZXJ0KGUuX2F4LGkubGF5b3V0KSxhKCJtdWx0aXNlbGVjdCIpO3ZhciBmPWEoImNvbnN0cmFpbnRyYW5nZSIpO2YmJihlLmNvbnN0cmFpbnRyYW5nZT11LmNsZWFuUmFuZ2VzKGYsZSkpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfXZhciBkPXQuZGltZW5zaW9ucztBcnJheS5pc0FycmF5KGQpJiZkLmxlbmd0aD5oJiYobi5sb2coInBhcmNvb3JkcyB0cmFjZXMgc3VwcG9ydCB1cCB0byAiK2grIiBkaW1lbnNpb25zIGF0IHRoZSBtb21lbnQiKSxkLnNwbGljZShoKSk7dmFyIGc9cyh0LGUse25hbWU6ImRpbWVuc2lvbnMiLGxheW91dDpsLGhhbmRsZUl0ZW1EZWZhdWx0czpwfSksbT1mdW5jdGlvbih0LGUscixvLHMpe3ZhciBsPXMoImxpbmUuY29sb3IiLHIpO2lmKGkodCwibGluZSIpJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkobCkpe2lmKGwubGVuZ3RoKXJldHVybiBzKCJsaW5lLmNvbG9yc2NhbGUiKSxhKHQsZSxvLHMse3ByZWZpeDoibGluZS4iLGNMZXR0ZXI6ImMifSksbC5sZW5ndGg7ZS5saW5lLmNvbG9yPXJ9cmV0dXJuIDEvMH0odCxlLHIsbCx1KTtvKGUsbCx1KSxBcnJheS5pc0FycmF5KGcpJiZnLmxlbmd0aHx8KGUudmlzaWJsZT0hMSksZihlLGcsInZhbHVlcyIsbSk7dmFyIHY9e2ZhbWlseTpsLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZChsLmZvbnQuc2l6ZS8xLjIpLGNvbG9yOmwuZm9udC5jb2xvcn07bi5jb2VyY2VGb250KHUsImxhYmVsZm9udCIsdiksbi5jb2VyY2VGb250KHUsInRpY2tmb250Iix2KSxuLmNvZXJjZUZvbnQodSwicmFuZ2Vmb250Iix2KSx1KCJsYWJlbGFuZ2xlIiksdSgibGFiZWxzaWRlIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjI1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjI2LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3OTQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODI2LCIuL2F0dHJpYnV0ZXMiOjExMjAsIi4vYXhpc2JydXNoIjoxMTIxLCIuL2NvbnN0YW50cyI6MTEyNCwiLi9tZXJnZV9sZW5ndGgiOjExMjl9XSwxMTI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzVHlwZWRBcnJheTtyLmNvbnZlcnRUeXBlZEFycmF5PWZ1bmN0aW9uKHQpe3JldHVybiBuKHQpP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpOnR9LHIuaXNPcmRpbmFsPWZ1bmN0aW9uKHQpe3JldHVybiEhdC50aWNrdmFsc30sci5pc1Zpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZXx8ISgidmlzaWJsZSJpbiB0KX19LHsiLi4vLi4vbGliIjo3NTB9XSwxMTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGNvbG9yYmFyOntjb250YWluZXI6ImxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InBhcmNvb3JkcyIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsiZ2wiLCJyZWdsIiwibm9PcGFjaXR5Iiwibm9Ib3ZlciJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTEyMCwiLi9iYXNlX3Bsb3QiOjExMjIsIi4vY2FsYyI6MTEyMywiLi9kZWZhdWx0cyI6MTEyNSwiLi9wbG90IjoxMTMxfV0sMTEyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxuYXR0cmlidXRlIHZlYzQgcDAxXzA0LCBwMDVfMDgsIHAwOV8xMiwgcDEzXzE2LFxuICAgICAgICAgICAgICAgcDE3XzIwLCBwMjFfMjQsIHAyNV8yOCwgcDI5XzMyLFxuICAgICAgICAgICAgICAgcDMzXzM2LCBwMzdfNDAsIHA0MV80NCwgcDQ1XzQ4LFxuICAgICAgICAgICAgICAgcDQ5XzUyLCBwNTNfNTYsIHA1N182MCwgY29sb3JzO1xuXG51bmlmb3JtIG1hdDQgZGltMEEsIGRpbTFBLCBkaW0wQiwgZGltMUIsIGRpbTBDLCBkaW0xQywgZGltMEQsIGRpbTFELFxuICAgICAgICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEO1xuXG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbiwgdmlld0JveFBvcywgdmlld0JveFNpemU7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrLCBwYWxldHRlO1xudW5pZm9ybSBmbG9hdCBtYXNrSGVpZ2h0O1xudW5pZm9ybSBmbG9hdCBkcndMYXllcjsgLy8gMDogY29udGV4dCwgMTogZm9jdXMsIDI6IHBpY2tcbnVuaWZvcm0gdmVjNCBjb250ZXh0Q29sb3I7XG5cbmJvb2wgaXNQaWNrICAgID0gKGRyd0xheWVyID4gMS41KTtcbmJvb2wgaXNDb250ZXh0ID0gKGRyd0xheWVyIDwgMC41KTtcblxuY29uc3QgdmVjNCBaRVJPUyA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbmNvbnN0IHZlYzQgVU5JVFMgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XG5cbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiBVTklUUywgVU5JVFMpO1xufVxuXG5mbG9hdCBheGlzWShmbG9hdCByYXRpbywgbWF0NCBBLCBtYXQ0IEIsIG1hdDQgQywgbWF0NCBEKSB7XG4gICAgZmxvYXQgeTEgPSB2YWwoQSwgZGltMEEpICsgdmFsKEIsIGRpbTBCKSArIHZhbChDLCBkaW0wQykgKyB2YWwoRCwgZGltMEQpO1xuICAgIGZsb2F0IHkyID0gdmFsKEEsIGRpbTFBKSArIHZhbChCLCBkaW0xQikgKyB2YWwoQywgZGltMUMpICsgdmFsKEQsIGRpbTFEKTtcbiAgICByZXR1cm4geTEgKiAoMS4wIC0gcmF0aW8pICsgeTIgKiByYXRpbztcbn1cblxuaW50IGlNb2QoaW50IGEsIGludCBiKSB7XG4gICAgcmV0dXJuIGEgLSBiICogKGEgLyBiKTtcbn1cblxuYm9vbCBmT3V0c2lkZShmbG9hdCBwLCBmbG9hdCBsbywgZmxvYXQgaGkpIHtcbiAgICByZXR1cm4gKGxvIDwgaGkpICYmIChsbyA+IHAgfHwgcCA+IGhpKTtcbn1cblxuYm9vbCB2T3V0c2lkZSh2ZWM0IHAsIHZlYzQgbG8sIHZlYzQgaGkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBmT3V0c2lkZShwWzBdLCBsb1swXSwgaGlbMF0pIHx8XG4gICAgICAgIGZPdXRzaWRlKHBbMV0sIGxvWzFdLCBoaVsxXSkgfHxcbiAgICAgICAgZk91dHNpZGUocFsyXSwgbG9bMl0sIGhpWzJdKSB8fFxuICAgICAgICBmT3V0c2lkZShwWzNdLCBsb1szXSwgaGlbM10pXG4gICAgKTtcbn1cblxuYm9vbCBtT3V0c2lkZShtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICB2T3V0c2lkZShwWzBdLCBsb1swXSwgaGlbMF0pIHx8XG4gICAgICAgIHZPdXRzaWRlKHBbMV0sIGxvWzFdLCBoaVsxXSkgfHxcbiAgICAgICAgdk91dHNpZGUocFsyXSwgbG9bMl0sIGhpWzJdKSB8fFxuICAgICAgICB2T3V0c2lkZShwWzNdLCBsb1szXSwgaGlbM10pXG4gICAgKTtcbn1cblxuYm9vbCBvdXRzaWRlQm91bmRpbmdCb3gobWF0NCBBLCBtYXQ0IEIsIG1hdDQgQywgbWF0NCBEKSB7XG4gICAgcmV0dXJuIG1PdXRzaWRlKEEsIGxvQSwgaGlBKSB8fFxuICAgICAgICAgICBtT3V0c2lkZShCLCBsb0IsIGhpQikgfHxcbiAgICAgICAgICAgbU91dHNpZGUoQywgbG9DLCBoaUMpIHx8XG4gICAgICAgICAgIG1PdXRzaWRlKEQsIGxvRCwgaGlEKTtcbn1cblxuYm9vbCBvdXRzaWRlUmFzdGVyTWFzayhtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICBtYXQ0IHBudHNbNF07XG4gICAgcG50c1swXSA9IEE7XG4gICAgcG50c1sxXSA9IEI7XG4gICAgcG50c1syXSA9IEM7XG4gICAgcG50c1szXSA9IEQ7XG5cbiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA0OyArK2opIHtcbiAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0OyArK2spIHtcbiAgICAgICAgICAgICAgICBpZigwID09IGlNb2QoXG4gICAgICAgICAgICAgICAgICAgIGludCgyNTUuMCAqIHRleHR1cmUyRChtYXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVjMihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQoaSAqIDIgKyBqIC8gMikgKyAwLjUpIC8gOC4wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwbnRzW2ldW2pdW2tdICogKG1hc2tIZWlnaHQgLSAxLjApICsgMS4wKSAvIG1hc2tIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICkpWzNdXG4gICAgICAgICAgICAgICAgICAgICkgLyBpbnQocG93KDIuMCwgZmxvYXQoaU1vZChqICogNCArIGssIDgpKSkpLFxuICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG52ZWM0IHBvc2l0aW9uKGJvb2wgaXNDb250ZXh0LCBmbG9hdCB2LCBtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbih2KSArIDAuNTtcbiAgICBmbG9hdCB5ID0gYXhpc1koeCwgQSwgQiwgQywgRCk7XG4gICAgZmxvYXQgeiA9IDEuMCAtIGFicyh2KTtcblxuICAgIHogKz0gaXNDb250ZXh0ID8gMC4wIDogMi4wICogZmxvYXQoXG4gICAgICAgIG91dHNpZGVCb3VuZGluZ0JveChBLCBCLCBDLCBEKSB8fFxuICAgICAgICBvdXRzaWRlUmFzdGVyTWFzayhBLCBCLCBDLCBEKVxuICAgICk7XG5cbiAgICByZXR1cm4gdmVjNChcbiAgICAgICAgMi4wICogKHZlYzIoeCwgeSkgKiB2aWV3Qm94U2l6ZSArIHZpZXdCb3hQb3MpIC8gcmVzb2x1dGlvbiAtIDEuMCxcbiAgICAgICAgeixcbiAgICAgICAgMS4wXG4gICAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAgIG1hdDQgQSA9IG1hdDQocDAxXzA0LCBwMDVfMDgsIHAwOV8xMiwgcDEzXzE2KTtcbiAgICBtYXQ0IEIgPSBtYXQ0KHAxN18yMCwgcDIxXzI0LCBwMjVfMjgsIHAyOV8zMik7XG4gICAgbWF0NCBDID0gbWF0NChwMzNfMzYsIHAzN180MCwgcDQxXzQ0LCBwNDVfNDgpO1xuICAgIG1hdDQgRCA9IG1hdDQocDQ5XzUyLCBwNTNfNTYsIHA1N182MCwgWkVST1MpO1xuXG4gICAgZmxvYXQgdiA9IGNvbG9yc1szXTtcblxuICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb24oaXNDb250ZXh0LCB2LCBBLCBCLCBDLCBEKTtcblxuICAgIGZyYWdDb2xvciA9XG4gICAgICAgIGlzQ29udGV4dCA/IHZlYzQoY29udGV4dENvbG9yKSA6XG4gICAgICAgIGlzUGljayA/IHZlYzQoY29sb3JzLnJnYiwgMS4wKSA6IHRleHR1cmUyRChwYWxldHRlLCB2ZWMyKGFicyh2KSwgMC41KSk7XG59XG4iXSksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn1cbiJdKSxvPXQoIi4vY29uc3RhbnRzIikubWF4RGltZW5zaW9uQ291bnQscz10KCIuLi8uLi9saWIiKSxsPW5ldyBVaW50OEFycmF5KDQpLGM9bmV3IFVpbnQ4QXJyYXkoNCksdT17c2hhcGU6WzI1NiwxXSxmb3JtYXQ6InJnYmEiLHR5cGU6InVpbnQ4IixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCJ9O2Z1bmN0aW9uIGgodCxlLHIsbixpKXt2YXIgYT10Ll9nbDthLmVuYWJsZShhLlNDSVNTT1JfVEVTVCksYS5zY2lzc29yKGUscixuLGkpLHQuY2xlYXIoe2NvbG9yOlswLDAsMCwwXSxkZXB0aDoxfSl9ZnVuY3Rpb24gZih0LGUscixuLGksYSl7dmFyIG89YS5rZXk7ci5kcmF3Q29tcGxldGVkfHwoIWZ1bmN0aW9uKHQpe3QucmVhZCh7eDowLHk6MCx3aWR0aDoxLGhlaWdodDoxLGRhdGE6bH0pfSh0KSxyLmRyYXdDb21wbGV0ZWQ9ITApLGZ1bmN0aW9uIHMobCl7dmFyIGM9TWF0aC5taW4obixpLWwqbik7MD09PWwmJih3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoci5jdXJyZW50UmFmc1tvXSksZGVsZXRlIHIuY3VycmVudFJhZnNbb10saCh0LGEuc2Npc3NvclgsYS5zY2lzc29yWSxhLnNjaXNzb3JXaWR0aCxhLnZpZXdCb3hTaXplWzFdKSksci5jbGVhck9ubHl8fChhLmNvdW50PTIqYyxhLm9mZnNldD0yKmwqbixlKGEpLGwqbitjPGkmJihyLmN1cnJlbnRSYWZzW29dPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7cyhsKzEpfSkpKSxyLmRyYXdDb21wbGV0ZWQ9ITEpfSgwKX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSgyNTYpLG49MDtuPDI1NjtuKyspcltuXT10KG4vMjU1KS5jb25jYXQoZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZCh0LGUpe3JldHVybih0Pj4+OCplKSUyNTYvMjU1fWZ1bmN0aW9uIGcodCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoOCplKSxpPTAsYT0wO2E8ZTthKyspZm9yKHZhciBvPTA7bzwyO28rKylmb3IodmFyIHM9MDtzPDQ7cysrKXt2YXIgbD00KnQrcyxjPXJbNjQqYStsXTs2Mz09PWwmJjA9PT1vJiYoYyo9LTEpLG5baSsrXT1jfXJldHVybiBufWZ1bmN0aW9uIG0odCl7dmFyIGU9IjAiK3Q7cmV0dXJuIGUuc3Vic3RyKGUubGVuZ3RoLTIpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQ8bz8icCIrbSh0KzEpKyJfIittKHQrNCk6ImNvbG9ycyJ9ZnVuY3Rpb24geSh0LGUscixuLGksYSxvLGwsYyx1LGgsZixwKXtmb3IodmFyIGQ9W1tdLFtdXSxnPTA7Zzw2NDtnKyspZFswXVtnXT1nPT09aT8xOjAsZFsxXVtnXT1nPT09YT8xOjA7dmFyIG09dC5saW5lcy5jYW52YXNPdmVyZHJhZyx2PXQuZG9tYWluLHk9dC5jYW52YXNXaWR0aCx4PXQuY2FudmFzSGVpZ2h0LGI9dC5kZXNlbGVjdGVkTGluZXMuY29sb3I7cmV0dXJuIHMuZXh0ZW5kRmxhdCh7a2V5OmgscmVzb2x1dGlvbjpbeSx4XSx2aWV3Qm94UG9zOltvK20sbF0sdmlld0JveFNpemU6W2MsdV0saTA6aSxpMTphLGRpbTBBOmRbMF0uc2xpY2UoMCwxNiksZGltMEI6ZFswXS5zbGljZSgxNiwzMiksZGltMEM6ZFswXS5zbGljZSgzMiw0OCksZGltMEQ6ZFswXS5zbGljZSg0OCw2NCksZGltMUE6ZFsxXS5zbGljZSgwLDE2KSxkaW0xQjpkWzFdLnNsaWNlKDE2LDMyKSxkaW0xQzpkWzFdLnNsaWNlKDMyLDQ4KSxkaW0xRDpkWzFdLnNsaWNlKDQ4LDY0KSxkcndMYXllcjpmLGNvbnRleHRDb2xvcjpbYlswXS8yNTUsYlsxXS8yNTUsYlsyXS8yNTUsYlszXTwxP2JbM106TWF0aC5tYXgoMS8yNTUsTWF0aC5wb3coMS90LmxpbmVzLmNvbG9yLmxlbmd0aCwxLzMpKV0sc2Npc3Nvclg6KG49PT1lPzA6byttKSsodC5wYWQubC1tKSt0LmxheW91dFdpZHRoKnYueFswXSxzY2lzc29yV2lkdGg6KG49PT1yP3ktbyttOmMrLjUpKyhuPT09ZT9vK206MCksc2Npc3Nvclk6bCt0LnBhZC5iK3QubGF5b3V0SGVpZ2h0KnYueVswXSxzY2lzc29ySGVpZ2h0OnUsdmlld3BvcnRYOnQucGFkLmwtbSt0LmxheW91dFdpZHRoKnYueFswXSx2aWV3cG9ydFk6dC5wYWQuYit0LmxheW91dEhlaWdodCp2LnlbMF0sdmlld3BvcnRXaWR0aDp5LHZpZXdwb3J0SGVpZ2h0Onh9LHApfWZ1bmN0aW9uIHgodCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLmZsb29yKDIwNDcqdFswXSksMCkscj1NYXRoLm1pbigyMDQ3LE1hdGguY2VpbCgyMDQ3KnRbMV0pLDIwNDcpO3JldHVybltNYXRoLm1pbihlLHIpLE1hdGgubWF4KGUscildfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4sbCxtLGIsXz1lLmNvbnRleHQsdz1lLnBpY2ssVD1lLnJlZ2wsaz17Y3VycmVudFJhZnM6e30sZHJhd0NvbXBsZXRlZDohMCxjbGVhck9ubHk6ITF9LE09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9MDtyPD1vO3IrPTQpZVt2KHIpXT10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSk7cmV0dXJuIGV9KFQpLEE9VC50ZXh0dXJlKHUpLFM9W107QyhlKTt2YXIgRT1UKHtwcm9maWxlOiExLGJsZW5kOntlbmFibGU6XyxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToxLGRzdEFscGhhOjF9LGVxdWF0aW9uOntyZ2I6ImFkZCIsYWxwaGE6ImFkZCJ9LGNvbG9yOlswLDAsMCwwXX0sZGVwdGg6e2VuYWJsZTohXyxtYXNrOiEwLGZ1bmM6Imxlc3MiLHJhbmdlOlswLDFdfSxjdWxsOntlbmFibGU6ITAsZmFjZToiYmFjayJ9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6e3g6VC5wcm9wKCJzY2lzc29yWCIpLHk6VC5wcm9wKCJzY2lzc29yWSIpLHdpZHRoOlQucHJvcCgic2Npc3NvcldpZHRoIiksaGVpZ2h0OlQucHJvcCgic2Npc3NvckhlaWdodCIpfX0sdmlld3BvcnQ6e3g6VC5wcm9wKCJ2aWV3cG9ydFgiKSx5OlQucHJvcCgidmlld3BvcnRZIiksd2lkdGg6VC5wcm9wKCJ2aWV3cG9ydFdpZHRoIiksaGVpZ2h0OlQucHJvcCgidmlld3BvcnRIZWlnaHQiKX0sZGl0aGVyOiExLHZlcnQ6aSxmcmFnOmEscHJpbWl0aXZlOiJsaW5lcyIsbGluZVdpZHRoOjEsYXR0cmlidXRlczpNLHVuaWZvcm1zOntyZXNvbHV0aW9uOlQucHJvcCgicmVzb2x1dGlvbiIpLHZpZXdCb3hQb3M6VC5wcm9wKCJ2aWV3Qm94UG9zIiksdmlld0JveFNpemU6VC5wcm9wKCJ2aWV3Qm94U2l6ZSIpLGRpbTBBOlQucHJvcCgiZGltMEEiKSxkaW0xQTpULnByb3AoImRpbTFBIiksZGltMEI6VC5wcm9wKCJkaW0wQiIpLGRpbTFCOlQucHJvcCgiZGltMUIiKSxkaW0wQzpULnByb3AoImRpbTBDIiksZGltMUM6VC5wcm9wKCJkaW0xQyIpLGRpbTBEOlQucHJvcCgiZGltMEQiKSxkaW0xRDpULnByb3AoImRpbTFEIiksbG9BOlQucHJvcCgibG9BIiksaGlBOlQucHJvcCgiaGlBIiksbG9COlQucHJvcCgibG9CIiksaGlCOlQucHJvcCgiaGlCIiksbG9DOlQucHJvcCgibG9DIiksaGlDOlQucHJvcCgiaGlDIiksbG9EOlQucHJvcCgibG9EIiksaGlEOlQucHJvcCgiaGlEIikscGFsZXR0ZTpBLGNvbnRleHRDb2xvcjpULnByb3AoImNvbnRleHRDb2xvciIpLG1hc2s6VC5wcm9wKCJtYXNrVGV4dHVyZSIpLGRyd0xheWVyOlQucHJvcCgiZHJ3TGF5ZXIiKSxtYXNrSGVpZ2h0OlQucHJvcCgibWFza0hlaWdodCIpfSxvZmZzZXQ6VC5wcm9wKCJvZmZzZXQiKSxjb3VudDpULnByb3AoImNvdW50Iil9KTtmdW5jdGlvbiBDKHQpe3I9dC5tb2RlbCxuPXQudmlld01vZGVsLGw9bi5kaW1lbnNpb25zLnNsaWNlKCksbT1sWzBdP2xbMF0udmFsdWVzLmxlbmd0aDowO3ZhciBlPXIubGluZXMsaT13P2UuY29sb3IubWFwKChmdW5jdGlvbih0LHIpe3JldHVybiByL2UuY29sb3IubGVuZ3RofSkpOmUuY29sb3IsYT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9bmV3IEFycmF5KHQqKG8rNCkpLGE9MCxzPTA7czx0O3MrKyl7Zm9yKHZhciBsPTA7bDxvO2wrKylpW2ErK109bDxlLmxlbmd0aD9lW2xdLnBhZGRlZFVuaXRWYWx1ZXNbc106LjU7aVthKytdPWQocywyKSxpW2ErK109ZChzLDEpLGlbYSsrXT1kKHMsMCksaVthKytdPShuPXJbc10sTWF0aC5tYXgoMWUtNixNYXRoLm1pbiguOTk5OTk5LG4pKSl9cmV0dXJuIGl9KG0sbCxpKTshZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248PW87bis9NCl0W3YobildKGcobi80LGUscikpfShNLG0sYSksX3x8d3x8KEE9VC50ZXh0dXJlKHMuZXh0ZW5kRmxhdCh7ZGF0YTpwKHIudW5pdFRvQ29sb3IsMjU1KX0sdSkpKX1yZXR1cm57cmVuZGVyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhLG8scz10Lmxlbmd0aCxjPTEvMCx1PS0xLzA7Zm9yKGk9MDtpPHM7aSsrKXRbaV0uZGltMC5jYW52YXNYPGMmJihjPXRbaV0uZGltMC5jYW52YXNYLGE9aSksdFtpXS5kaW0xLmNhbnZhc1g+dSYmKHU9dFtpXS5kaW0xLmNhbnZhc1gsbz1pKTswPT09cyYmaChULDAsMCxyLmNhbnZhc1dpZHRoLHIuY2FudmFzSGVpZ2h0KTt2YXIgcD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1bW10sW11dO2ZvcihuPTA7bjw2NDtuKyspe3ZhciBhPSF0JiZuPGwubGVuZ3RoP2xbbl0uYnJ1c2guZmlsdGVyLmdldEJvdW5kcygpOlstMS8wLDEvMF07aVswXVtuXT1hWzBdLGlbMV1bbl09YVsxXX12YXIgbz1uZXcgQXJyYXkoMTYzODQpO2ZvcihlPTA7ZTwxNjM4NDtlKyspb1tlXT0yNTU7aWYoIXQpZm9yKGU9MDtlPGwubGVuZ3RoO2UrKyl7dmFyIHM9ZSU4LGM9KGUtcykvOCx1PU1hdGgucG93KDIscyksaD1sW2VdLmJydXNoLmZpbHRlci5nZXQoKTtpZighKGgubGVuZ3RoPDIpKXt2YXIgZj14KGhbMF0pWzFdO2ZvcihyPTE7cjxoLmxlbmd0aDtyKyspe3ZhciBwPXgoaFtyXSk7Zm9yKG49ZisxO248cFswXTtuKyspb1s4Km4rY10mPX51O2Y9TWF0aC5tYXgoZixwWzFdKX19fXZhciBkPXtzaGFwZTpbOCwyMDQ4XSxmb3JtYXQ6ImFscGhhIix0eXBlOiJ1aW50OCIsbWFnOiJuZWFyZXN0IixtaW46Im5lYXJlc3QiLGRhdGE6b307cmV0dXJuIGI/YihkKTpiPVQudGV4dHVyZShkKSx7bWFza1RleHR1cmU6YixtYXNrSGVpZ2h0OjIwNDgsbG9BOmlbMF0uc2xpY2UoMCwxNiksbG9COmlbMF0uc2xpY2UoMTYsMzIpLGxvQzppWzBdLnNsaWNlKDMyLDQ4KSxsb0Q6aVswXS5zbGljZSg0OCw2NCksaGlBOmlbMV0uc2xpY2UoMCwxNiksaGlCOmlbMV0uc2xpY2UoMTYsMzIpLGhpQzppWzFdLnNsaWNlKDMyLDQ4KSxoaUQ6aVsxXS5zbGljZSg0OCw2NCl9fShfKTtmb3IoaT0wO2k8cztpKyspe3ZhciBkPXRbaV0sZz1kLmRpbTAuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCx2PWQuZGltMS5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LE09ZC5jYW52YXNYLEE9ZC5jYW52YXNZLEM9TStkLnBhbmVsU2l6ZVg7aWYoZXx8IVNbZ118fFNbZ11bMF0hPT1NfHxTW2ddWzFdIT09Qyl7U1tnXT1bTSxDXTt2YXIgTD15KHIsYSxvLGksZyx2LE0sQSxkLnBhbmVsU2l6ZVgsZC5wYW5lbFNpemVZLGQuZGltMC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LF8/MDp3PzI6MSxwKTtrLmNsZWFyT25seT1uO3ZhciBQPWU/ci5saW5lcy5ibG9ja0xpbmVDb3VudDptO2YoVCxFLGssUCxtLEwpfX19LHJlYWRQaXhlbDpmdW5jdGlvbih0LGUpe3JldHVybiBULnJlYWQoe3g6dCx5OmUsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOmN9KSxjfSxyZWFkUGl4ZWxzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBVaW50OEFycmF5KDQqcipuKTtyZXR1cm4gVC5yZWFkKHt4OnQseTplLHdpZHRoOnIsaGVpZ2h0Om4sZGF0YTppfSksaX0sZGVzdHJveTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0LnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIixBLmRlc3Ryb3koKSxiJiZiLmRlc3Ryb3koKSxNKU1bZV0uZGVzdHJveSgpfSx1cGRhdGU6Q319fSx7Ii4uLy4uL2xpYiI6NzUwLCIuL2NvbnN0YW50cyI6MTEyNCxnbHNsaWZ5OjQxM31dLDExMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE7Zm9yKG58fChuPTEvMCksaT0wO2k8ZS5sZW5ndGg7aSsrKShhPWVbaV0pLnZpc2libGUmJihuPU1hdGgubWluKG4sYVtyXS5sZW5ndGgpKTtmb3Iobj09PTEvMCYmKG49MCksdC5fbGVuZ3RoPW4saT0wO2k8ZS5sZW5ndGg7aSsrKShhPWVbaV0pLnZpc2libGUmJihhLl9sZW5ndGg9bik7cmV0dXJuIG59fSx7fV0sMTEzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiY29sb3ItcmdiYSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHU9dCgiLi4vLi4vbGliL2d1cCIpLGg9dS5rZXlGdW4sZj11LnJlcGVhdCxwPXUudW53cmFwLGQ9dCgiLi9oZWxwZXJzIiksZz10KCIuL2NvbnN0YW50cyIpLG09dCgiLi9heGlzYnJ1c2giKSx2PXQoIi4vbGluZXMiKTtmdW5jdGlvbiB5KHQsZSxyKXtyZXR1cm4gby5hZ2dOdW1zKHQsbnVsbCxlLHIpfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gXyh5KE1hdGgubWluLHQsZSkseShNYXRoLm1heCx0LGUpKX1mdW5jdGlvbiBiKHQpe3ZhciBlPXQucmFuZ2U7cmV0dXJuIGU/XyhlWzBdLGVbMV0pOngodC52YWx1ZXMsdC5fbGVuZ3RoKX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIWlzTmFOKHQpJiZpc0Zpbml0ZSh0KXx8KHQ9MCksIWlzTmFOKGUpJiZpc0Zpbml0ZShlKXx8KGU9MCksdD09PWUmJigwPT09dD8odC09MSxlKz0xKToodCo9LjksZSo9MS4xKSksW3QsZV19ZnVuY3Rpb24gdyh0LGUscixpLGEpe3ZhciBvLHMsbD1iKHIpO3JldHVybiBpP24uc2NhbGUub3JkaW5hbCgpLmRvbWFpbihpLm1hcCgobz1uLmZvcm1hdChyLnRpY2tmb3JtYXQpLHM9YSxzP2Z1bmN0aW9uKHQsZSl7dmFyIHI9c1tlXTtyZXR1cm4gbnVsbD09cj9vKHQpOnJ9Om8pKSkucmFuZ2UoaS5tYXAoKGZ1bmN0aW9uKHIpe3ZhciBuPShyLWxbMF0pLyhsWzFdLWxbMF0pO3JldHVybiB0LWUrbiooMiplLXQpfSkpKTpuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihsKS5yYW5nZShbdC1lLGVdKX1mdW5jdGlvbiBUKHQpe2lmKHQudGlja3ZhbHMpe3ZhciBlPWIodCk7cmV0dXJuIG4uc2NhbGUub3JkaW5hbCgpLmRvbWFpbih0LnRpY2t2YWxzKS5yYW5nZSh0LnRpY2t2YWxzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQtZVswXSkvKGVbMV0tZVswXSl9KSkpfX1mdW5jdGlvbiBrKHQpe3ZhciBlPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSxyPXQubWFwKChmdW5jdGlvbih0KXt2YXIgZT1pKHRbMV0pO3JldHVybiBuLnJnYigicmdiKCIrZVswXSsiLCIrZVsxXSsiLCIrZVsyXSsiKSIpfSkpLGE9InJnYiIuc3BsaXQoIiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG4uc2NhbGUubGluZWFyKCkuY2xhbXAoITApLmRvbWFpbihlKS5yYW5nZShyLm1hcCgoaT10LGZ1bmN0aW9uKHQpe3JldHVybiB0W2ldfSkpKTt2YXIgaX0pKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGEubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pKX19ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdC5kaW1lbnNpb25zLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJydXNoLmZpbHRlclNwZWNpZmllZH0pKX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgYT1wKGUpLHM9YS50cmFjZSxsPWQuY29udmVydFR5cGVkQXJyYXkoYS5saW5lQ29sb3IpLHU9cy5saW5lLGg9e2NvbG9yOmkoZy5kZXNlbGVjdGVkTGluZUNvbG9yKX0sZj1jLmV4dHJhY3RPcHRzKHUpLG09Zi5yZXZlcnNlc2NhbGU/Yy5mbGlwU2NhbGUoYS5jc2NhbGUpOmEuY3NjYWxlLHY9cy5kb21haW4seT1zLmRpbWVuc2lvbnMseD10LndpZHRoLF89cy5sYWJlbGFuZ2xlLHc9cy5sYWJlbHNpZGUsVD1zLmxhYmVsZm9udCxNPXMudGlja2ZvbnQsQT1zLnJhbmdlZm9udCxTPW8uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHUse2NvbG9yOmwubWFwKG4uc2NhbGUubGluZWFyKCkuZG9tYWluKGIoe3ZhbHVlczpsLHJhbmdlOltmLm1pbixmLm1heF0sX2xlbmd0aDpzLl9sZW5ndGh9KSkpLGJsb2NrTGluZUNvdW50OmcuYmxvY2tMaW5lQ291bnQsY2FudmFzT3ZlcmRyYWc6Zy5vdmVyZHJhZypnLmNhbnZhc1BpeGVsUmF0aW99KSxFPU1hdGguZmxvb3IoeCoodi54WzFdLXYueFswXSkpLEM9TWF0aC5mbG9vcih0LmhlaWdodCoodi55WzFdLXYueVswXSkpLEw9dC5tYXJnaW58fHtsOjgwLHI6ODAsdDoxMDAsYjo4MH0sUD1FLEk9QztyZXR1cm57a2V5OnIsY29sQ291bnQ6eS5maWx0ZXIoZC5pc1Zpc2libGUpLmxlbmd0aCxkaW1lbnNpb25zOnksdGlja0Rpc3RhbmNlOmcudGlja0Rpc3RhbmNlLHVuaXRUb0NvbG9yOmsobSksbGluZXM6UyxkZXNlbGVjdGVkTGluZXM6aCxsYWJlbEFuZ2xlOl8sbGFiZWxTaWRlOncsbGFiZWxGb250OlQsdGlja0ZvbnQ6TSxyYW5nZUZvbnQ6QSxsYXlvdXRXaWR0aDp4LGxheW91dEhlaWdodDp0LmhlaWdodCxkb21haW46dix0cmFuc2xhdGVYOnYueFswXSp4LHRyYW5zbGF0ZVk6dC5oZWlnaHQtdi55WzFdKnQuaGVpZ2h0LHBhZDpMLGNhbnZhc1dpZHRoOlAqZy5jYW52YXNQaXhlbFJhdGlvKzIqUy5jYW52YXNPdmVyZHJhZyxjYW52YXNIZWlnaHQ6SSpnLmNhbnZhc1BpeGVsUmF0aW8sd2lkdGg6UCxoZWlnaHQ6SSxjYW52YXNQaXhlbFJhdGlvOmcuY2FudmFzUGl4ZWxSYXRpb319ZnVuY3Rpb24gUyh0LGUscil7dmFyIGk9ci53aWR0aCxhPXIuaGVpZ2h0LHM9ci5kaW1lbnNpb25zLGw9ci5jYW52YXNQaXhlbFJhdGlvLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGkqdC9NYXRoLm1heCgxLHIuY29sQ291bnQtMSl9LHU9Zy52ZXJ0aWNhbFBhZGRpbmcvYSxoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2NhbGUubGluZWFyKCkucmFuZ2UoW2UsdC1lXSl9KGEsZy52ZXJ0aWNhbFBhZGRpbmcpLGY9e2tleTpyLmtleSx4U2NhbGU6Yyxtb2RlbDpyLGluQnJ1c2hEcmFnOiExfSxwPXt9O3JldHVybiBmLmRpbWVuc2lvbnM9cy5maWx0ZXIoZC5pc1Zpc2libGUpLm1hcCgoZnVuY3Rpb24oaSxzKXt2YXIgdj1mdW5jdGlvbih0LGUpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihiKHQpKS5yYW5nZShbZSwxLWVdKX0oaSx1KSx5PXBbaS5sYWJlbF07cFtpLmxhYmVsXT0oeXx8MCkrMTt2YXIgeD1pLmxhYmVsKyh5PyJfXyIreToiIiksXz1pLmNvbnN0cmFpbnRyYW5nZSxrPV8mJl8ubGVuZ3RoO2smJiFBcnJheS5pc0FycmF5KF9bMF0pJiYoXz1bX10pO3ZhciBBPWs/Xy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCh2KX0pKTpbWy0xLzAsMS8wXV0sUz1pLnZhbHVlcztTLmxlbmd0aD5pLl9sZW5ndGgmJihTPVMuc2xpY2UoMCxpLl9sZW5ndGgpKTt2YXIgRSxDPWkudGlja3ZhbHM7ZnVuY3Rpb24gTCh0LGUpe3JldHVybnt2YWw6dCx0ZXh0OkVbZV19fWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gdC52YWwtZS52YWx9aWYoQXJyYXkuaXNBcnJheShDKSYmQy5sZW5ndGgpe0U9aS50aWNrdGV4dCxBcnJheS5pc0FycmF5KEUpJiZFLmxlbmd0aD9FLmxlbmd0aD5DLmxlbmd0aD9FPUUuc2xpY2UoMCxDLmxlbmd0aCk6Qy5sZW5ndGg+RS5sZW5ndGgmJihDPUMuc2xpY2UoMCxFLmxlbmd0aCkpOkU9Qy5tYXAobi5mb3JtYXQoaS50aWNrZm9ybWF0KSk7Zm9yKHZhciBJPTE7STxDLmxlbmd0aDtJKyspaWYoQ1tJXTxDW0ktMV0pe2Zvcih2YXIgej1DLm1hcChMKS5zb3J0KFApLE89MDtPPEMubGVuZ3RoO08rKylDW09dPXpbT10udmFsLEVbT109eltPXS50ZXh0O2JyZWFrfX1lbHNlIEM9dm9pZCAwO3JldHVybiBTPWQuY29udmVydFR5cGVkQXJyYXkoUykse2tleTp4LGxhYmVsOmkubGFiZWwsdGlja0Zvcm1hdDppLnRpY2tmb3JtYXQsdGlja3ZhbHM6Qyx0aWNrdGV4dDpFLG9yZGluYWw6ZC5pc09yZGluYWwoaSksbXVsdGlzZWxlY3Q6aS5tdWx0aXNlbGVjdCx4SW5kZXg6cyxjcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4OnMsdmlzaWJsZUluZGV4OmkuX2luZGV4LGhlaWdodDphLHZhbHVlczpTLHBhZGRlZFVuaXRWYWx1ZXM6Uy5tYXAodiksdW5pdFRpY2t2YWxzOkMmJkMubWFwKHYpLHhTY2FsZTpjLHg6YyhzKSxjYW52YXNYOmMocykqbCx1bml0VG9QYWRkZWRQeDpoLGRvbWFpblNjYWxlOncoYSxnLnZlcnRpY2FsUGFkZGluZyxpLEMsRSksb3JkaW5hbFNjYWxlOlQoaSkscGFyZW50OmYsbW9kZWw6cixicnVzaDptLm1ha2VCcnVzaCh0LGssQSwoZnVuY3Rpb24oKXt0LmxpbmVQaWNrQWN0aXZlKCExKX0pLChmdW5jdGlvbigpe3ZhciBlPWY7ZS5mb2N1c0xheWVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKTt2YXIgcj1NKGUpOyF0LmNvbnRleHRTaG93bigpJiZyPyhlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSx0LmNvbnRleHRTaG93bighMCkpOnQuY29udGV4dFNob3duKCkmJiFyJiYoZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMCwhMCksdC5jb250ZXh0U2hvd24oITEpKX0pLChmdW5jdGlvbihyKXtpZihmLmZvY3VzTGF5ZXIucmVuZGVyKGYucGFuZWxzLCEwKSxmLnBpY2tMYXllciYmZi5waWNrTGF5ZXIucmVuZGVyKGYucGFuZWxzLCEwKSx0LmxpbmVQaWNrQWN0aXZlKCEwKSxlJiZlLmZpbHRlckNoYW5nZWQpe3ZhciBuPXYuaW52ZXJ0LGE9ci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChuKS5zb3J0KG8uc29ydGVyQXNjKX0pKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KSk7ZS5maWx0ZXJDaGFuZ2VkKGYua2V5LGkuX2luZGV4LGEpfX0pKX19KSksZn1mdW5jdGlvbiBFKHQpe3QuY2xhc3NlZChnLmNuLmF4aXNFeHRlbnRUZXh0LCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iil9ZnVuY3Rpb24gQyh0LGUpe3ZhciByPSJ0b3AiPT09ZT8xOi0xLG49dCpNYXRoLlBJLzE4MDtyZXR1cm57ZGlyOnIsZHg6TWF0aC5zaW4obiksZHk6TWF0aC5jb3MobiksZGVncmVlczp0fX1mdW5jdGlvbiBMKHQsZSl7Zm9yKHZhciByPWUucGFuZWxzfHwoZS5wYW5lbHM9W10pLG49dC5kYXRhKCksaT0wO2k8bi5sZW5ndGgtMTtpKyspe3ZhciBhPXJbaV18fChyW2ldPXt9KSxvPW5baV0scz1uW2krMV07YS5kaW0wPW8sYS5kaW0xPXMsYS5jYW52YXNYPW8uY2FudmFzWCxhLnBhbmVsU2l6ZVg9cy5jYW52YXNYLW8uY2FudmFzWCxhLnBhbmVsU2l6ZVk9ZS5tb2RlbC5jYW52YXNIZWlnaHQsYS55PTAsYS5jYW52YXNZPTB9fWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gYS50aWNrVGV4dCh0Ll9heCxlLCExKS50ZXh0fWZ1bmN0aW9uIEkodCxlKXtpZih0Lm9yZGluYWwpcmV0dXJuIiI7dmFyIHI9dC5kb21haW5TY2FsZS5kb21haW4oKSxuPXJbZT9yLmxlbmd0aC0xOjBdO3JldHVybiBQKHQubW9kZWwuZGltZW5zaW9uc1t0LnZpc2libGVJbmRleF0sbil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBjPXQuX2Z1bGxMYXlvdXQsdT1jLl90b3BwYXBlcix5PWMuX2dsY29udGFpbmVyOyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylmb3IodmFyIHI9MDtyPHRbZV0ubGVuZ3RoO3IrKylmb3IodmFyIG49dFtlXVtyXS50cmFjZSxpPW4uZGltZW5zaW9ucyxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10udmFsdWVzLGw9aVtvXS5fYXg7bCYmKGwucmFuZ2U/bC5yYW5nZT1fKGwucmFuZ2VbMF0sbC5yYW5nZVsxXSk6bC5yYW5nZT14KHMsbi5fbGVuZ3RoKSxsLmR0aWNrfHwobC5kdGljaz0uMDEqKE1hdGguYWJzKGwucmFuZ2VbMV0tbC5yYW5nZVswXSl8fDEpKSxsLnRpY2tmb3JtYXQ9aVtvXS50aWNrZm9ybWF0LGEuY2FsY1RpY2tzKGwpLGwuY2xlYW5SYW5nZSgpKX19KGUpO3ZhciBiLHcsVD0oYj0hMCx3PSExLHtsaW5lUGlja0FjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9iPSEhdDpifSxjb250ZXh0U2hvd246ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dz0hIXQ6d319KSxrPWUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gcCh0KS50cmFjZS52aXNpYmxlfSkpLm1hcChBLmJpbmQoMCxyKSkubWFwKFMuYmluZCgwLFQsaSkpO3kuZWFjaCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gby5leHRlbmRGbGF0KHQsa1tlXSl9KSk7dmFyIHo9eS5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5lYWNoKChmdW5jdGlvbih0KXt0LnZpZXdNb2RlbD1rWzBdLHQubW9kZWw9dC52aWV3TW9kZWw/dC52aWV3TW9kZWwubW9kZWw6bnVsbH0pKSxPPW51bGw7ei5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2t9KSkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbih0KXtpZihULmxpbmVQaWNrQWN0aXZlKCkmJnQubGluZUxheWVyJiZpJiZpLmhvdmVyKXt2YXIgZT1uLmV2ZW50LHI9dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LG89bi5tb3VzZSh0aGlzKSxzPW9bMF0sbD1vWzFdO2lmKHM8MHx8bDwwfHxzPj1yfHxsPj1hKXJldHVybjt2YXIgYz10LmxpbmVMYXllci5yZWFkUGl4ZWwocyxhLTEtbCksdT0wIT09Y1szXSxoPXU/Y1syXSsyNTYqKGNbMV0rMjU2KmNbMF0pOm51bGwsZj17eDpzLHk6bCxjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WSxkYXRhSW5kZXg6dC5tb2RlbC5rZXksY3VydmVOdW1iZXI6aH07aCE9PU8mJih1P2kuaG92ZXIoZik6aS51bmhvdmVyJiZpLnVuaG92ZXIoZiksTz1oKX19KSksei5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2s/MDoxfSkpLHUuc3R5bGUoImJhY2tncm91bmQiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDApIik7dmFyIEQ9dS5zZWxlY3RBbGwoIi4iK2cuY24ucGFyY29vcmRzKS5kYXRhKGssaCk7RC5leGl0KCkucmVtb3ZlKCksRC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi5wYXJjb29yZHMsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEQuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QubW9kZWwudHJhbnNsYXRlWCsiLCIrdC5tb2RlbC50cmFuc2xhdGVZKyIpIn0pKTt2YXIgUj1ELnNlbGVjdEFsbCgiLiIrZy5jbi5wYXJjb29yZHNDb250cm9sVmlldykuZGF0YShmLGgpO1IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGcuY24ucGFyY29vcmRzQ29udHJvbFZpZXcsITApLFIuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QubW9kZWwucGFkLmwrIiwiK3QubW9kZWwucGFkLnQrIikifSkpO3ZhciBGPVIuc2VsZWN0QWxsKCIuIitnLmNuLnlBeGlzKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSksaCk7Ri5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi55QXhpcywhMCksUi5lYWNoKChmdW5jdGlvbih0KXtMKEYsdCl9KSksei5lYWNoKChmdW5jdGlvbih0KXtpZih0LnZpZXdNb2RlbCl7IXQubGluZUxheWVyfHxpP3QubGluZUxheWVyPXYodGhpcyx0KTp0LmxpbmVMYXllci51cGRhdGUodCksKHQua2V5fHwwPT09dC5rZXkpJiYodC52aWV3TW9kZWxbdC5rZXldPXQubGluZUxheWVyKTt2YXIgZT0hdC5jb250ZXh0fHxpO3QubGluZUxheWVyLnJlbmRlcih0LnZpZXdNb2RlbC5wYW5lbHMsZSl9fSkpLEYuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueFNjYWxlKHQueEluZGV4KSsiLCAwKSJ9KSksRi5jYWxsKG4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkub24oImRyYWciLChmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudDtULmxpbmVQaWNrQWN0aXZlKCExKSx0Lng9TWF0aC5tYXgoLWcub3ZlcmRyYWcsTWF0aC5taW4odC5tb2RlbC53aWR0aCtnLm92ZXJkcmFnLG4uZXZlbnQueCkpLHQuY2FudmFzWD10LngqdC5tb2RlbC5jYW52YXNQaXhlbFJhdGlvLEYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pKS5lYWNoKChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlLnhJbmRleCksZS5jYW52YXNYPWUueCplLm1vZGVsLmNhbnZhc1BpeGVsUmF0aW99KSksTChGLGUpLEYuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gMCE9PU1hdGguYWJzKHQueEluZGV4LWUueEluZGV4KX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54U2NhbGUodC54SW5kZXgpKyIsIDApIn0pKSxuLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LngrIiwgMCkiKSxGLmVhY2goKGZ1bmN0aW9uKHIsbixpKXtpPT09dC5wYXJlbnQua2V5JiYoZS5kaW1lbnNpb25zW25dPXIpfSkpLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIU0oZSkpLGUuZm9jdXNMYXllci5yZW5kZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMpfSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7dC54PXQueFNjYWxlKHQueEluZGV4KSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxMKEYsZSksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiLCAwKSJ9KSksZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMSwhTShlKSksZS5mb2N1c0xheWVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzKSxlLnBpY2tMYXllciYmZS5waWNrTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSxULmxpbmVQaWNrQWN0aXZlKCEwKSxpJiZpLmF4ZXNNb3ZlZCYmaS5heGVzTW92ZWQoZS5rZXksZS5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleH0pKSl9KSkpLEYuZXhpdCgpLnJlbW92ZSgpO3ZhciBCPUYuc2VsZWN0QWxsKCIuIitnLmNuLmF4aXNPdmVybGF5cykuZGF0YShmLGgpO0IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGcuY24uYXhpc092ZXJsYXlzLCEwKSxCLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzKS5yZW1vdmUoKTt2YXIgTj1CLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzKS5kYXRhKGYsaCk7Ti5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi5heGlzLCEwKSxOLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQubW9kZWwuaGVpZ2h0L3QubW9kZWwudGlja0Rpc3RhbmNlLHI9dC5kb21haW5TY2FsZSxpPXIuZG9tYWluKCk7bi5zZWxlY3QodGhpcykuY2FsbChuLnN2Zy5heGlzKCkub3JpZW50KCJsZWZ0IikudGlja1NpemUoNCkub3V0ZXJUaWNrU2l6ZSgyKS50aWNrcyhlLHQudGlja0Zvcm1hdCkudGlja1ZhbHVlcyh0Lm9yZGluYWw/aTpudWxsKS50aWNrRm9ybWF0KChmdW5jdGlvbihlKXtyZXR1cm4gZC5pc09yZGluYWwodCk/ZTpQKHQubW9kZWwuZGltZW5zaW9uc1t0LnZpc2libGVJbmRleF0sZSl9KSkuc2NhbGUocikpLGwuZm9udChOLnNlbGVjdEFsbCgidGV4dCIpLHQubW9kZWwudGlja0ZvbnQpfSkpLE4uc2VsZWN0QWxsKCIuZG9tYWluLCAudGljaz5saW5lIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwuMjUpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLE4uc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtc2hhZG93IiwiMXB4IDFweCAxcHggI2ZmZiwgLTFweCAtMXB4IDFweCAjZmZmLCAxcHggLTFweCAxcHggI2ZmZiwgLTFweCAxcHggMXB4ICNmZmYiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpO3ZhciBqPUIuc2VsZWN0QWxsKCIuIitnLmNuLmF4aXNIZWFkaW5nKS5kYXRhKGYsaCk7ai5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi5heGlzSGVhZGluZywhMCk7dmFyIFU9ai5zZWxlY3RBbGwoIi4iK2cuY24uYXhpc1RpdGxlKS5kYXRhKGYsaCk7VS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoZy5jbi5heGlzVGl0bGUsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImN1cnNvciIsImV3LXJlc2l6ZSIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKSxVLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxhYmVsfSkpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2wuZm9udChyLGUubW9kZWwubGFiZWxGb250KSxzLmNvbnZlcnRUb1RzcGFucyhyLHQpfSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPUModC5tb2RlbC5sYWJlbEFuZ2xlLHQubW9kZWwubGFiZWxTaWRlKSxyPWcuYXhpc1RpdGxlT2Zmc2V0O3JldHVybihlLmRpcj4wPyIiOiJ0cmFuc2xhdGUoMCwiKygyKnIrdC5tb2RlbC5oZWlnaHQpKyIpIikrInJvdGF0ZSgiK2UuZGVncmVlcysiKXRyYW5zbGF0ZSgiKy1yKmUuZHgrIiwiKy1yKmUuZHkrIikifSkpLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24odCl7dmFyIGU9Qyh0Lm1vZGVsLmxhYmVsQW5nbGUsdC5tb2RlbC5sYWJlbFNpZGUpO3JldHVybiAyKk1hdGguYWJzKGUuZHgpPk1hdGguYWJzKGUuZHkpP2UuZGlyKmUuZHg8MD8ic3RhcnQiOiJlbmQiOiJtaWRkbGUifSkpO3ZhciBWPUIuc2VsZWN0QWxsKCIuIitnLmNuLmF4aXNFeHRlbnQpLmRhdGEoZixoKTtWLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNuLmF4aXNFeHRlbnQsITApO3ZhciBxPVYuc2VsZWN0QWxsKCIuIitnLmNuLmF4aXNFeHRlbnRUb3ApLmRhdGEoZixoKTtxLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNuLmF4aXNFeHRlbnRUb3AsITApLHEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIistZy5heGlzRXh0ZW50T2Zmc2V0KyIpIik7dmFyIEg9cS5zZWxlY3RBbGwoIi4iK2cuY24uYXhpc0V4dGVudFRvcFRleHQpLmRhdGEoZixoKTtILmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChnLmNuLmF4aXNFeHRlbnRUb3BUZXh0LCEwKS5jYWxsKEUpLEgudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIEkodCwhMCl9KSkuZWFjaCgoZnVuY3Rpb24odCl7bC5mb250KG4uc2VsZWN0KHRoaXMpLHQubW9kZWwucmFuZ2VGb250KX0pKTt2YXIgRz1WLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzRXh0ZW50Qm90dG9tKS5kYXRhKGYsaCk7Ry5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi5heGlzRXh0ZW50Qm90dG9tLCEwKSxHLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyh0Lm1vZGVsLmhlaWdodCtnLmF4aXNFeHRlbnRPZmZzZXQpKyIpIn0pKTt2YXIgWT1HLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzRXh0ZW50Qm90dG9tVGV4dCkuZGF0YShmLGgpO1kuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKGcuY24uYXhpc0V4dGVudEJvdHRvbVRleHQsITApLmF0dHIoImR5IiwiMC43NWVtIikuY2FsbChFKSxZLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiBJKHQsITEpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2wuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLnJhbmdlRm9udCl9KSksbS5lbnN1cmVBeGlzQnJ1c2goQil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9ndXAiOjc0NywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NzQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4vYXhpc2JydXNoIjoxMTIxLCIuL2NvbnN0YW50cyI6MTEyNCwiLi9oZWxwZXJzIjoxMTI2LCIuL2xpbmVzIjoxMTI4LCJjb2xvci1yZ2JhIjoxMjcsZDM6MTY5fV0sMTEzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3BhcmNvb3JkcyIpLGk9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLGE9dCgiLi9oZWxwZXJzIikuaXNWaXNpYmxlO2Z1bmN0aW9uIG8odCxlLHIpe3ZhciBuPWUuaW5kZXhPZihyKSxpPXQuaW5kZXhPZihuKTtyZXR1cm4tMT09PWkmJihpKz1lLmxlbmd0aCksaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKGkodCkpe3ZhciBzPXt9LGw9e30sYz17fSx1PXt9LGg9ci5fc2l6ZTtlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dmFyIG49ZVswXS50cmFjZTtjW3JdPW4uaW5kZXg7dmFyIGk9dVtyXT1uLl9mdWxsSW5wdXQuaW5kZXg7c1tyXT10LmRhdGFbaV0uZGltZW5zaW9ucyxsW3JdPXQuZGF0YVtpXS5kaW1lbnNpb25zLnNsaWNlKCl9KSk7bih0LGUse3dpZHRoOmgudyxoZWlnaHQ6aC5oLG1hcmdpbjp7dDpoLnQscjpoLnIsYjpoLmIsbDpoLmx9fSx7ZmlsdGVyQ2hhbmdlZDpmdW5jdGlvbihlLG4saSl7dmFyIGE9bFtlXVtuXSxvPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkpLHM9ImRpbWVuc2lvbnNbIituKyJdLmNvbnN0cmFpbnRyYW5nZSIsaD1yLl90cmFjZVByZUdVSVt0Ll9mdWxsRGF0YVtjW2VdXS5fZnVsbElucHV0LnVpZF07aWYodm9pZCAwPT09aFtzXSl7dmFyIGY9YS5jb25zdHJhaW50cmFuZ2U7aFtzXT1mfHxudWxsfXZhciBwPXQuX2Z1bGxEYXRhW2NbZV1dLmRpbWVuc2lvbnNbbl07by5sZW5ndGg/KDE9PT1vLmxlbmd0aCYmKG89b1swXSksYS5jb25zdHJhaW50cmFuZ2U9byxwLmNvbnN0cmFpbnRyYW5nZT1vLnNsaWNlKCksbz1bb10pOihkZWxldGUgYS5jb25zdHJhaW50cmFuZ2UsZGVsZXRlIHAuY29uc3RyYWludHJhbmdlLG89bnVsbCk7dmFyIGQ9e307ZFtzXT1vLHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLFtkLFt1W2VdXV0pfSxob3ZlcjpmdW5jdGlvbihlKXt0LmVtaXQoInBsb3RseV9ob3ZlciIsZSl9LHVuaG92ZXI6ZnVuY3Rpb24oZSl7dC5lbWl0KCJwbG90bHlfdW5ob3ZlciIsZSl9LGF4ZXNNb3ZlZDpmdW5jdGlvbihlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIG8odCxlLHIpLW8odCxlLG4pfX0ocixsW2VdLmZpbHRlcihhKSk7c1tlXS5zb3J0KG4pLGxbZV0uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hYSh0KX0pKS5zb3J0KChmdW5jdGlvbih0KXtyZXR1cm4gbFtlXS5pbmRleE9mKHQpfSkpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3NbZV0uc3BsaWNlKHNbZV0uaW5kZXhPZih0KSwxKSxzW2VdLnNwbGljZShsW2VdLmluZGV4T2YodCksMCx0KX0pKSx0LmVtaXQoInBsb3RseV9yZXN0eWxlIixbe2RpbWVuc2lvbnM6W3NbZV1dfSxbdVtlXV1dKX19KX19fSx7Ii4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiOjc2MywiLi9oZWxwZXJzIjoxMTI2LCIuL3BhcmNvb3JkcyI6MTEzMH1dLDExMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT1hKHtlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOiJwbG90In0pO2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVsMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkbGFiZWw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpvLmRlZmF1bHRMaW5lLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJwbG90In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxzY2FsZWdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0aW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJpbmZvOmMoe30sbi5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpzKHt9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHR0ZW1wbGF0ZTpsKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoiYXV0byIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHRleHRmb250OmMoe30sdSx7fSksaW5zaWRldGV4dG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJob3Jpem9udGFsIiwicmFkaWFsIiwidGFuZ2VudGlhbCIsImF1dG8iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCJ9LGluc2lkZXRleHRmb250OmMoe30sdSx7fSksb3V0c2lkZXRleHRmb250OmMoe30sdSx7fSksYXV0b21hcmdpbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxmb250OmMoe30sdSx7fSkscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBjZW50ZXIiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmkoe25hbWU6InBpZSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG9sZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzb3J0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46LTM2MCxtYXg6MzYwLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHB1bGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRpdGxlZm9udDpjKHt9LHUse30pLHRpdGxlcG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBjZW50ZXIiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxlZGl0VHlwZToiY2FsYyJ9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MTQsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzk1LCIuLi8uLi9wbG90cy9kb21haW4iOjgyNiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4MjcsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3N31dLDExMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODYyfV0sMTEzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89e307ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4hIWUmJighIShlPWkoZSkpLmlzVmFsaWQoKSYmKGU9YS5hZGRPcGFjaXR5KGUsZS5nZXRBbHBoYSgpKSx0W3JdfHwodFtyXT1lKSxlKSl9fWZ1bmN0aW9uIGwodCxlKXt2YXIgcixuPUpTT04uc3RyaW5naWZ5KHQpLGE9ZVtuXTtpZighYSl7Zm9yKGE9dC5zbGljZSgpLHI9MDtyPHQubGVuZ3RoO3IrKylhLnB1c2goaSh0W3JdKS5saWdodGVuKDIwKS50b0hleFN0cmluZygpKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWEucHVzaChpKHRbcl0pLmRhcmtlbigyMCkudG9IZXhTdHJpbmcoKSk7ZVtuXT1hfXJldHVybiBhfWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLGksYT1bXSxvPXQuX2Z1bGxMYXlvdXQsbD1vLmhpZGRlbmxhYmVsc3x8W10sYz1lLmxhYmVscyx1PWUubWFya2VyLmNvbG9yc3x8W10saD1lLnZhbHVlcyxmPWUuX2xlbmd0aCxwPWUuX2hhc1ZhbHVlcyYmZjtpZihlLmRsYWJlbClmb3IoYz1uZXcgQXJyYXkoZikscj0wO3I8ZjtyKyspY1tyXT1TdHJpbmcoZS5sYWJlbDArciplLmRsYWJlbCk7dmFyIGQ9e30sZz1zKG9bIl8iK2UudHlwZSsiY29sb3JtYXAiXSksbT0wLHY9ITE7Zm9yKHI9MDtyPGY7cisrKXt2YXIgeSx4LGI7aWYocCl7aWYoeT1oW3JdLCFuKHkpKWNvbnRpbnVlO2lmKCh5PSt5KTwwKWNvbnRpbnVlfWVsc2UgeT0xO3ZvaWQgMCE9PSh4PWNbcl0pJiYiIiE9PXh8fCh4PXIpO3ZhciBfPWRbeD1TdHJpbmcoeCldO3ZvaWQgMD09PV8/KGRbeF09YS5sZW5ndGgsKGI9LTEhPT1sLmluZGV4T2YoeCkpfHwobSs9eSksYS5wdXNoKHt2OnksbGFiZWw6eCxjb2xvcjpnKHVbcl0seCksaTpyLHB0czpbcl0saGlkZGVuOmJ9KSk6KHY9ITAsKGk9YVtfXSkudis9eSxpLnB0cy5wdXNoKHIpLGkuaGlkZGVufHwobSs9eSksITE9PT1pLmNvbG9yJiZ1W3JdJiYoaS5jb2xvcj1nKHVbcl0seCkpKX1yZXR1cm4oImZ1bm5lbGFyZWEiPT09ZS50eXBlP3Y6ZS5zb3J0KSYmYS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnYtdC52fSkpLGFbMF0mJihhWzBdLnZUb3RhbD1tKSxhfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe3ZhciByPShlfHx7fSkudHlwZTtyfHwocj0icGllIik7dmFyIG49dC5fZnVsbExheW91dCxpPXQuY2FsY2RhdGEsYT1uW3IrImNvbG9yd2F5Il0scz1uWyJfIityKyJjb2xvcm1hcCJdO25bImV4dGVuZCIrcisiY29sb3JzIl0mJihhPWwoYSxvKSk7Zm9yKHZhciBjPTAsdT0wO3U8aS5sZW5ndGg7dSsrKXt2YXIgaD1pW3VdO2lmKGhbMF0udHJhY2UudHlwZT09PXIpZm9yKHZhciBmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBwPWhbZl07ITE9PT1wLmNvbG9yJiYoc1twLmxhYmVsXT9wLmNvbG9yPXNbcC5sYWJlbF06KHNbcC5sYWJlbF09cC5jb2xvcj1hW2MlYS5sZW5ndGhdLGMrKykpfX19LG1ha2VQdWxsQ29sb3JGbjpzLGdlbmVyYXRlRXh0ZW5kZWRDb2xvcnM6bH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCJmYXN0LWlzbnVtZXJpYyI6MjQxLHRpbnljb2xvcjI6NTQ4fV0sMTEzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dDtmdW5jdGlvbiBsKHQsZSl7dmFyIHI9QXJyYXkuaXNBcnJheSh0KSxhPWkuaXNBcnJheU9yVHlwZWRBcnJheShlKSxvPU1hdGgubWluKHI/dC5sZW5ndGg6MS8wLGE/ZS5sZW5ndGg6MS8wKTtpZihpc0Zpbml0ZShvKXx8KG89MCksbyYmYSl7Zm9yKHZhciBzLGw9MDtsPG87bCsrKXt2YXIgYz1lW2xdO2lmKG4oYykmJmM+MCl7cz0hMDticmVha319c3x8KG89MCl9cmV0dXJue2hhc0xhYmVsczpyLGhhc1ZhbHVlczphLGxlbjpvfX1lLmV4cG9ydHM9e2hhbmRsZUxhYmVsc0FuZFZhbHVlczpsLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX12YXIgdT1sKGMoImxhYmVscyIpLGMoInZhbHVlcyIpKSxoPXUubGVuO2lmKGUuX2hhc0xhYmVscz11Lmhhc0xhYmVscyxlLl9oYXNWYWx1ZXM9dS5oYXNWYWx1ZXMsIWUuX2hhc0xhYmVscyYmZS5faGFzVmFsdWVzJiYoYygibGFiZWwwIiksYygiZGxhYmVsIikpLGgpe2UuX2xlbmd0aD1oLGMoIm1hcmtlci5saW5lLndpZHRoIikmJmMoIm1hcmtlci5saW5lLmNvbG9yIiksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgZixwPWMoInRleHQiKSxkPWMoInRleHR0ZW1wbGF0ZSIpO2lmKGR8fChmPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KHApPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxkfHxmJiYibm9uZSIhPT1mKXt2YXIgZz1jKCJ0ZXh0cG9zaXRpb24iKTtzKHQsZSxuLGMsZyx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksKEFycmF5LmlzQXJyYXkoZyl8fCJhdXRvIj09PWd8fCJvdXRzaWRlIj09PWcpJiZjKCJhdXRvbWFyZ2luIiksKCJpbnNpZGUiPT09Z3x8ImF1dG8iPT09Z3x8QXJyYXkuaXNBcnJheShnKSkmJmMoImluc2lkZXRleHRvcmllbnRhdGlvbiIpfW8oZSxuLGMpO3ZhciBtPWMoImhvbGUiKTtpZihjKCJ0aXRsZS50ZXh0Iikpe3ZhciB2PWMoInRpdGxlLnBvc2l0aW9uIixtPyJtaWRkbGUgY2VudGVyIjoidG9wIGNlbnRlciIpO218fCJtaWRkbGUgY2VudGVyIiE9PXZ8fChlLnRpdGxlLnBvc2l0aW9uPSJ0b3AgY2VudGVyIiksaS5jb2VyY2VGb250KGMsInRpdGxlLmZvbnQiLG4uZm9udCl9Yygic29ydCIpLGMoImRpcmVjdGlvbiIpLGMoInJvdGF0aW9uIiksYygicHVsbCIpfWVsc2UgZS52aXNpYmxlPSExfX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODI2LCIuLi9iYXIvZGVmYXVsdHMiOjg5NiwiLi9hdHRyaWJ1dGVzIjoxMTMyLCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sMTEzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXJzOnQucHRzLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZSxsYWJlbDp0LmxhYmVsLGNvbG9yOnQuY29sb3IsdmFsdWU6dC52LHBlcmNlbnQ6dC5wZXJjZW50LHRleHQ6dC50ZXh0LHY6dC52fTtyZXR1cm4gMT09PXQucHRzLmxlbmd0aCYmKHIucG9pbnROdW1iZXI9ci5pPXQucHRzWzBdKSxuKHIsZSx0LnB0cyksImZ1bm5lbGFyZWEiPT09ZS50eXBlJiYoZGVsZXRlIHIudixkZWxldGUgci5pKSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY1MX1dLDExMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZigiZSIpP3QucmVwbGFjZSgvWy5dPzArZS8sImUiKTotMSE9PXQuaW5kZXhPZigiLiIpP3QucmVwbGFjZSgvWy5dPzArJC8sIiIpOnR9ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSgoMTAwKnQpLnRvUHJlY2lzaW9uKDMpKTtyZXR1cm4gbi5udW1TZXBhcmF0ZShyLGUpKyIlIn0sci5mb3JtYXRQaWVWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByPWkodC50b1ByZWNpc2lvbigxMCkpO3JldHVybiBuLm51bVNlcGFyYXRlKHIsZSl9LHIuZ2V0Rmlyc3RGaWxsZWQ9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKG58fDA9PT1ufHwiIj09PW4pcmV0dXJuIG59fSxyLmNhc3RPcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9yLmdldEZpcnN0RmlsbGVkKHQsZSk6dHx8dm9pZCAwfSxyLmdldFJvdGF0aW9uQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuKCJhdXRvIj09PXQ/MDp0KSpNYXRoLlBJLzE4MH19LHsiLi4vLi4vbGliIjo3NTB9XSwxMTM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uZTp0KCIuL3N0eWxlX29uZSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJwaWUiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInBpZS1saWtlIiwicGllIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTEzMiwiLi9iYXNlX3Bsb3QiOjExMzMsIi4vY2FsYyI6MTEzNCwiLi9kZWZhdWx0cyI6MTEzNSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTEzOSwiLi9sYXlvdXRfZGVmYXVsdHMiOjExNDAsIi4vcGxvdCI6MTE0MSwiLi9zdHlsZSI6MTE0MiwiLi9zdHlsZV9vbmUiOjExNDN9XSwxMTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aGlkZGVubGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHBpZWNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGVkaXRUeXBlOiJjYWxjIn0sZXh0ZW5kcGllY29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTE0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigiaGlkZGVubGFiZWxzIikscigicGllY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHBpZWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjc1MCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTEzOX1dLDExNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IiksaD11LnJlY29yZE1pblRleHRTaXplLGY9dS5jbGVhck1pblRleHRTaXplLHA9dCgiLi4vYmFyL2NvbnN0YW50cyIpLlRFWFRQQUQsZD10KCIuL2hlbHBlcnMiKSxnPXQoIi4vZXZlbnRfZGF0YSIpLG09dCgiLi4vLi4vbGliIikuaXNWYWxpZFRleHRWYWx1ZTtmdW5jdGlvbiB2KHQsZSxyKXt2YXIgaT1yWzBdLG89aS50cmFjZSxzPWkuY3gsYz1pLmN5OyJfaGFzSG92ZXJMYWJlbCJpbiBvfHwoby5faGFzSG92ZXJMYWJlbD0hMSksIl9oYXNIb3ZlckV2ZW50ImluIG98fChvLl9oYXNIb3ZlckV2ZW50PSExKSx0Lm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LHU9ZS5fZnVsbERhdGFbby5pbmRleF07aWYoIWUuX2RyYWdnaW5nJiYhMSE9PXIuaG92ZXJtb2RlKXt2YXIgaD11LmhvdmVyaW5mbztpZihBcnJheS5pc0FycmF5KGgpJiYoaD1hLmNhc3RIb3ZlcmluZm8oe2hvdmVyaW5mbzpbZC5jYXN0T3B0aW9uKGgsdC5wdHMpXSxfbW9kdWxlOm8uX21vZHVsZX0sciwwKSksImFsbCI9PT1oJiYoaD0ibGFiZWwrdGV4dCt2YWx1ZStwZXJjZW50K25hbWUiKSx1LmhvdmVydGVtcGxhdGV8fCJub25lIiE9PWgmJiJza2lwIiE9PWgmJmgpe3ZhciBmPXQuckluc2NyaWJlZHx8MCxwPXMrdC5weG1pZFswXSooMS1mKSxtPWMrdC5weG1pZFsxXSooMS1mKSx2PXIuc2VwYXJhdG9ycyx5PVtdO2lmKGgmJi0xIT09aC5pbmRleE9mKCJsYWJlbCIpJiZ5LnB1c2godC5sYWJlbCksdC50ZXh0PWQuY2FzdE9wdGlvbih1LmhvdmVydGV4dHx8dS50ZXh0LHQucHRzKSxoJiYtMSE9PWguaW5kZXhPZigidGV4dCIpKXt2YXIgeD10LnRleHQ7bC5pc1ZhbGlkVGV4dFZhbHVlKHgpJiZ5LnB1c2goeCl9dC52YWx1ZT10LnYsdC52YWx1ZUxhYmVsPWQuZm9ybWF0UGllVmFsdWUodC52LHYpLGgmJi0xIT09aC5pbmRleE9mKCJ2YWx1ZSIpJiZ5LnB1c2godC52YWx1ZUxhYmVsKSx0LnBlcmNlbnQ9dC52L2kudlRvdGFsLHQucGVyY2VudExhYmVsPWQuZm9ybWF0UGllUGVyY2VudCh0LnBlcmNlbnQsdiksaCYmLTEhPT1oLmluZGV4T2YoInBlcmNlbnQiKSYmeS5wdXNoKHQucGVyY2VudExhYmVsKTt2YXIgYj11LmhvdmVybGFiZWwsXz1iLmZvbnQ7YS5sb25lSG92ZXIoe3RyYWNlOm8seDA6cC1mKmkucix4MTpwK2YqaS5yLHk6bSx0ZXh0Onkuam9pbigiPGJyPiIpLG5hbWU6dS5ob3ZlcnRlbXBsYXRlfHwtMSE9PWguaW5kZXhPZigibmFtZSIpP3UubmFtZTp2b2lkIDAsaWRlYWxBbGlnbjp0LnB4bWlkWzBdPDA/ImxlZnQiOiJyaWdodCIsY29sb3I6ZC5jYXN0T3B0aW9uKGIuYmdjb2xvcix0LnB0cyl8fHQuY29sb3IsYm9yZGVyQ29sb3I6ZC5jYXN0T3B0aW9uKGIuYm9yZGVyY29sb3IsdC5wdHMpLGZvbnRGYW1pbHk6ZC5jYXN0T3B0aW9uKF8uZmFtaWx5LHQucHRzKSxmb250U2l6ZTpkLmNhc3RPcHRpb24oXy5zaXplLHQucHRzKSxmb250Q29sb3I6ZC5jYXN0T3B0aW9uKF8uY29sb3IsdC5wdHMpLG5hbWVMZW5ndGg6ZC5jYXN0T3B0aW9uKGIubmFtZWxlbmd0aCx0LnB0cyksdGV4dEFsaWduOmQuY2FzdE9wdGlvbihiLmFsaWduLHQucHRzKSxob3ZlcnRlbXBsYXRlOmQuY2FzdE9wdGlvbih1LmhvdmVydGVtcGxhdGUsdC5wdHMpLGhvdmVydGVtcGxhdGVMYWJlbHM6dCxldmVudERhdGE6W2codCx1KV19LHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOmV9KSxvLl9oYXNIb3ZlckxhYmVsPSEwfW8uX2hhc0hvdmVyRXZlbnQ9ITAsZS5lbWl0KCJwbG90bHlfaG92ZXIiLHtwb2ludHM6W2codCx1KV0sZXZlbnQ6bi5ldmVudH0pfX0pKSx0Lm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsaT1lLl9mdWxsRGF0YVtvLmluZGV4XSxzPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7by5faGFzSG92ZXJFdmVudCYmKHQub3JpZ2luYWxFdmVudD1uLmV2ZW50LGUuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W2cocyxpKV0sZXZlbnQ6bi5ldmVudH0pLG8uX2hhc0hvdmVyRXZlbnQ9ITEpLG8uX2hhc0hvdmVyTGFiZWwmJihhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSxvLl9oYXNIb3ZlckxhYmVsPSExKX0pKSx0Lm9uKCJjbGljayIsKGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsaT1lLl9mdWxsRGF0YVtvLmluZGV4XTtlLl9kcmFnZ2luZ3x8ITE9PT1yLmhvdmVybW9kZXx8KGUuX2hvdmVyZGF0YT1bZyh0LGkpXSxhLmNsaWNrKGUsbi5ldmVudCkpfSkpfWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPWQuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmNvbG9yLGUucHRzKTshbiYmdC5faW5wdXQudGV4dGZvbnQmJihuPWQuY2FzdE9wdGlvbih0Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcixlLnB0cykpO3ZhciBpPWQuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LmZhbWlseSxlLnB0cyl8fGQuY2FzdE9wdGlvbih0LnRleHRmb250LmZhbWlseSxlLnB0cyl8fHIuZmFtaWx5LGE9ZC5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuc2l6ZSxlLnB0cyl8fGQuY2FzdE9wdGlvbih0LnRleHRmb250LnNpemUsZS5wdHMpfHxyLnNpemU7cmV0dXJue2NvbG9yOm58fG8uY29udHJhc3QoZS5jb2xvciksZmFtaWx5Omksc2l6ZTphfX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByLG4saT0wO2k8dC5sZW5ndGg7aSsrKWlmKChuPShyPXRbaV1bMF0pLnRyYWNlKS50aXRsZS50ZXh0KXt2YXIgYT1uLnRpdGxlLnRleHQ7bi5fbWV0YSYmKGE9bC50ZW1wbGF0ZVN0cmluZyhhLG4uX21ldGEpKTt2YXIgbz1zLnRlc3Rlci5hcHBlbmQoInRleHQiKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS50ZXh0KGEpLmNhbGwocy5mb250LG4udGl0bGUuZm9udCkuY2FsbChjLmNvbnZlcnRUb1RzcGFucyxlKSx1PXMuYkJveChvLm5vZGUoKSwhMCk7ci50aXRsZUJveD17d2lkdGg6dS53aWR0aCxoZWlnaHQ6dS5oZWlnaHR9LG8ucmVtb3ZlKCl9fWZ1bmN0aW9uIGIodCxlLHIpe3ZhciBuPXIucnx8ZS5ycHgxLGk9ZS5ySW5zY3JpYmVkO2lmKGUuc3RhcnRhbmdsZT09PWUuc3RvcGFuZ2xlKXJldHVybntyQ2VudGVyOjEtaSxzY2FsZTowLHJvdGF0ZTowLHRleHRQb3NBbmdsZTowfTt2YXIgYSxvPWUucmluZyxzPTE9PT1vJiZNYXRoLmFicyhlLnN0YXJ0YW5nbGUtZS5zdG9wYW5nbGUpPT09MipNYXRoLlBJLGw9ZS5oYWxmYW5nbGUsYz1lLm1pZGFuZ2xlLHU9ci50cmFjZS5pbnNpZGV0ZXh0b3JpZW50YXRpb24saD0iaG9yaXpvbnRhbCI9PT11LGY9InRhbmdlbnRpYWwiPT09dSxwPSJyYWRpYWwiPT09dSxkPSJhdXRvIj09PXUsZz1bXTtpZighZCl7dmFyIG0sdj1mdW5jdGlvbihyLGkpe2lmKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGFuZ2xlLG49dC5zdG9wYW5nbGU7cmV0dXJuIHI+ZSYmZT5ufHxyPGUmJmU8bn0oZSxyKSl7dmFyIHM9TWF0aC5hYnMoci1lLnN0YXJ0YW5nbGUpLGw9TWF0aC5hYnMoci1lLnN0b3BhbmdsZSksYz1zPGw/czpsOyhhPSJ0YW4iPT09aT93KHQsbixvLGMsMCk6Xyh0LG4sbyxjLE1hdGguUEkvMikpLnRleHRQb3NBbmdsZT1yLGcucHVzaChhKX19O2lmKGh8fGYpe2ZvcihtPTQ7bT49LTQ7bS09Mil2KE1hdGguUEkqbSwidGFuIik7Zm9yKG09NDttPj0tNDttLT0yKXYoTWF0aC5QSSoobSsxKSwidGFuIil9aWYoaHx8cCl7Zm9yKG09NDttPj0tNDttLT0yKXYoTWF0aC5QSSoobSsxLjUpLCJyYWQiKTtmb3IobT00O20+PS00O20tPTIpdihNYXRoLlBJKihtKy41KSwicmFkIil9fWlmKHN8fGR8fGgpe3ZhciB5PU1hdGguc3FydCh0LndpZHRoKnQud2lkdGgrdC5oZWlnaHQqdC5oZWlnaHQpO2lmKChhPXtzY2FsZTppKm4qMi95LHJDZW50ZXI6MS1pLHJvdGF0ZTowfSkudGV4dFBvc0FuZ2xlPShlLnN0YXJ0YW5nbGUrZS5zdG9wYW5nbGUpLzIsYS5zY2FsZT49MSlyZXR1cm4gYTtnLnB1c2goYSl9KGR8fHApJiYoKGE9Xyh0LG4sbyxsLGMpKS50ZXh0UG9zQW5nbGU9KGUuc3RhcnRhbmdsZStlLnN0b3BhbmdsZSkvMixnLnB1c2goYSkpLChkfHxmKSYmKChhPXcodCxuLG8sbCxjKSkudGV4dFBvc0FuZ2xlPShlLnN0YXJ0YW5nbGUrZS5zdG9wYW5nbGUpLzIsZy5wdXNoKGEpKTtmb3IodmFyIHg9MCxiPTAsVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgaz1nW1RdLnNjYWxlO2lmKGI8ayYmKGI9ayx4PVQpLCFkJiZiPj0xKWJyZWFrfXJldHVybiBnW3hdfWZ1bmN0aW9uIF8odCxlLHIsbixpKXtlPU1hdGgubWF4KDAsZS0yKnApO3ZhciBhPXQud2lkdGgvdC5oZWlnaHQsbz1NKGEsbixlLHIpO3JldHVybntzY2FsZToyKm8vdC5oZWlnaHQsckNlbnRlcjpUKGEsby9lKSxyb3RhdGU6ayhpKX19ZnVuY3Rpb24gdyh0LGUscixuLGkpe2U9TWF0aC5tYXgoMCxlLTIqcCk7dmFyIGE9dC5oZWlnaHQvdC53aWR0aCxvPU0oYSxuLGUscik7cmV0dXJue3NjYWxlOjIqby90LndpZHRoLHJDZW50ZXI6VChhLG8vZSkscm90YXRlOmsoaStNYXRoLlBJLzIpfX1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuIE1hdGguY29zKGUpLXQqZX1mdW5jdGlvbiBrKHQpe3JldHVybigxODAvTWF0aC5QSSp0KzcyMCklMTgwLTkwfWZ1bmN0aW9uIE0odCxlLHIsbil7dmFyIGk9dCsxLygyKk1hdGgudGFuKGUpKTtyZXR1cm4gcipNYXRoLm1pbigxLyhNYXRoLnNxcnQoaSppKy41KStpKSxuLyhNYXRoLnNxcnQodCp0K24vMikrdCkpfWZ1bmN0aW9uIEEodCxlKXtyZXR1cm4gdC52IT09ZS52VG90YWx8fGUudHJhY2UuaG9sZT9NYXRoLm1pbigxLygxKzEvTWF0aC5zaW4odC5oYWxmYW5nbGUpKSx0LnJpbmcvMik6MX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9ZS5weG1pZFswXSxuPWUucHhtaWRbMV0saT10LndpZHRoLzIsYT10LmhlaWdodC8yO3JldHVybiByPDAmJihpKj0tMSksbjwwJiYoYSo9LTEpLHtzY2FsZToxLHJDZW50ZXI6MSxyb3RhdGU6MCx4OmkrTWF0aC5hYnMoYSkqKGk+MD8xOi0xKS8yLHk6YS8oMStyKnIvKG4qbikpLG91dHNpZGU6ITB9fWZ1bmN0aW9uIEUodCxlKXt2YXIgcixuLGksYT10LnRyYWNlLG89e3g6dC5jeCx5OnQuY3l9LHM9e3R4OjAsdHk6MH07cy50eSs9YS50aXRsZS5mb250LnNpemUsaT1MKGEpLC0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJ0b3AiKT8oby55LT0oMStpKSp0LnIscy50eS09dC50aXRsZUJveC5oZWlnaHQpOi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKG8ueSs9KDEraSkqdC5yKTt2YXIgbCxjLHU9KGw9dC5yLGM9dC50cmFjZS5hc3BlY3RyYXRpbyxsLyh2b2lkIDA9PT1jPzE6YykpLGg9ZS53KihhLmRvbWFpbi54WzFdLWEuZG9tYWluLnhbMF0pLzI7cmV0dXJuLTEhPT1hLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImxlZnQiKT8oaCs9dSxvLngtPSgxK2kpKnUscy50eCs9dC50aXRsZUJveC53aWR0aC8yKTotMSE9PWEudGl0bGUucG9zaXRpb24uaW5kZXhPZigiY2VudGVyIik/aCo9MjotMSE9PWEudGl0bGUucG9zaXRpb24uaW5kZXhPZigicmlnaHQiKSYmKGgrPXUsby54Kz0oMStpKSp1LHMudHgtPXQudGl0bGVCb3gud2lkdGgvMikscj1oL3QudGl0bGVCb3gud2lkdGgsbj1DKHQsZSkvdC50aXRsZUJveC5oZWlnaHQse3g6by54LHk6by55LHNjYWxlOk1hdGgubWluKHIsbiksdHg6cy50eCx0eTpzLnR5fX1mdW5jdGlvbiBDKHQsZSl7dmFyIHI9dC50cmFjZSxuPWUuaCooci5kb21haW4ueVsxXS1yLmRvbWFpbi55WzBdKTtyZXR1cm4gTWF0aC5taW4odC50aXRsZUJveC5oZWlnaHQsbi8yKX1mdW5jdGlvbiBMKHQpe3ZhciBlLHI9dC5wdWxsO2lmKCFyKXJldHVybiAwO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHI9MCxlPTA7ZTx0LnB1bGwubGVuZ3RoO2UrKyl0LnB1bGxbZV0+ciYmKHI9dC5wdWxsW2VdKTtyZXR1cm4gcn1mdW5jdGlvbiBQKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXVswXSxhPWkudHJhY2Usbz1hLmRvbWFpbixzPWUudyooby54WzFdLW8ueFswXSksbD1lLmgqKG8ueVsxXS1vLnlbMF0pO2EudGl0bGUudGV4dCYmIm1pZGRsZSBjZW50ZXIiIT09YS50aXRsZS5wb3NpdGlvbiYmKGwtPUMoaSxlKSk7dmFyIGM9cy8yLHU9bC8yOyJmdW5uZWxhcmVhIiE9PWEudHlwZXx8YS5zY2FsZWdyb3VwfHwodS89YS5hc3BlY3RyYXRpbyksaS5yPU1hdGgubWluKGMsdSkvKDErTChhKSksaS5jeD1lLmwrZS53KihhLmRvbWFpbi54WzFdK2EuZG9tYWluLnhbMF0pLzIsaS5jeT1lLnQrZS5oKigxLWEuZG9tYWluLnlbMF0pLWwvMixhLnRpdGxlLnRleHQmJi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKGkuY3ktPUMoaSxlKSksYS5zY2FsZWdyb3VwJiYtMT09PXIuaW5kZXhPZihhLnNjYWxlZ3JvdXApJiZyLnB1c2goYS5zY2FsZWdyb3VwKX0hZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89MS8wLHM9ZVthXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKHI9dFtuXVswXSwoaT1yLnRyYWNlKS5zY2FsZWdyb3VwPT09cyl7dmFyIGw7aWYoInBpZSI9PT1pLnR5cGUpbD1yLnIqci5yO2Vsc2UgaWYoImZ1bm5lbGFyZWEiPT09aS50eXBlKXt2YXIgYyx1O2kuYXNwZWN0cmF0aW8+MT8oYz1yLnIsdT1jL2kuYXNwZWN0cmF0aW8pOih1PXIucixjPXUqaS5hc3BlY3RyYXRpbyksYyo9KDEraS5iYXNlcmF0aW8pLzIsbD1jKnV9bz1NYXRoLm1pbihvLGwvci52VG90YWwpfWZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYocj10W25dWzBdLChpPXIudHJhY2UpLnNjYWxlZ3JvdXA9PT1zKXt2YXIgaD1vKnIudlRvdGFsOyJmdW5uZWxhcmVhIj09PWkudHlwZSYmKGgvPSgxK2kuYmFzZXJhdGlvKS8yLGgvPWkuYXNwZWN0cmF0aW8pLHIucj1NYXRoLnNxcnQoaCl9fX0odCxyKX1mdW5jdGlvbiBJKHQsZSl7cmV0dXJuW3QqTWF0aC5zaW4oZSksLXQqTWF0aC5jb3MoZSldfWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1yLnRyYWNlLGE9aS50ZXh0dGVtcGxhdGUsbz1pLnRleHRpbmZvO2lmKCFhJiZvJiYibm9uZSIhPT1vKXt2YXIgcyxjPW8uc3BsaXQoIisiKSx1PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09Yy5pbmRleE9mKHQpfSxoPXUoImxhYmVsIiksZj11KCJ0ZXh0IikscD11KCJ2YWx1ZSIpLGc9dSgicGVyY2VudCIpLHY9bi5zZXBhcmF0b3JzO2lmKHM9aD9bZS5sYWJlbF06W10sZil7dmFyIHk9ZC5nZXRGaXJzdEZpbGxlZChpLnRleHQsZS5wdHMpO20oeSkmJnMucHVzaCh5KX1wJiZzLnB1c2goZC5mb3JtYXRQaWVWYWx1ZShlLnYsdikpLGcmJnMucHVzaChkLmZvcm1hdFBpZVBlcmNlbnQoZS52L3IudlRvdGFsLHYpKSxlLnRleHQ9cy5qb2luKCI8YnI+Iil9aWYoYSl7dmFyIHg9bC5jYXN0T3B0aW9uKGksZS5pLCJ0ZXh0dGVtcGxhdGUiKTtpZih4KXt2YXIgYj1mdW5jdGlvbih0KXtyZXR1cm57bGFiZWw6dC5sYWJlbCx2YWx1ZTp0LnYsdmFsdWVMYWJlbDpkLmZvcm1hdFBpZVZhbHVlKHQudixuLnNlcGFyYXRvcnMpLHBlcmNlbnQ6dC52L3IudlRvdGFsLHBlcmNlbnRMYWJlbDpkLmZvcm1hdFBpZVBlcmNlbnQodC52L3IudlRvdGFsLG4uc2VwYXJhdG9ycyksY29sb3I6dC5jb2xvcix0ZXh0OnQudGV4dCxjdXN0b21kYXRhOmwuY2FzdE9wdGlvbihpLHQuaSwiY3VzdG9tZGF0YSIpfX0oZSksXz1kLmdldEZpcnN0RmlsbGVkKGkudGV4dCxlLnB0cyk7KG0oXyl8fCIiPT09XykmJihiLnRleHQ9XyksZS50ZXh0PWwudGV4dHRlbXBsYXRlU3RyaW5nKHgsYix0Ll9mdWxsTGF5b3V0Ll9kM2xvY2FsZSxiLGkuX21ldGF8fHt9KX1lbHNlIGUudGV4dD0iIn19ZnVuY3Rpb24gTyh0LGUpe3ZhciByPXQucm90YXRlKk1hdGguUEkvMTgwLG49TWF0aC5jb3MociksaT1NYXRoLnNpbihyKSxhPShlLmxlZnQrZS5yaWdodCkvMixvPShlLnRvcCtlLmJvdHRvbSkvMjt0LnRleHRYPWEqbi1vKmksdC50ZXh0WT1hKmkrbypuLHQubm9DZW50ZXI9ITB9ZS5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxhPXIuX3NpemU7ZigicGllIixyKSx4KGUsdCksUChlLGEpO3ZhciB1PWwubWFrZVRyYWNlR3JvdXBzKHIuX3BpZWxheWVyLGUsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHU9bi5zZWxlY3QodGhpcyksZj1lWzBdLHA9Zi50cmFjZTshZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dFswXSxhPWkucixvPWkudHJhY2Uscz1kLmdldFJvdGF0aW9uQW5nbGUoby5yb3RhdGlvbiksbD0yKk1hdGguUEkvaS52VG90YWwsYz0icHgwIix1PSJweDEiO2lmKCJjb3VudGVyY2xvY2t3aXNlIj09PW8uZGlyZWN0aW9uKXtmb3IoZT0wO2U8dC5sZW5ndGgmJnRbZV0uaGlkZGVuO2UrKyk7aWYoZT09PXQubGVuZ3RoKXJldHVybjtzKz1sKnRbZV0udixsKj0tMSxjPSJweDEiLHU9InB4MCJ9Zm9yKG49SShhLHMpLGU9MDtlPHQubGVuZ3RoO2UrKykocj10W2VdKS5oaWRkZW58fChyW2NdPW4sci5zdGFydGFuZ2xlPXMscys9bCpyLnYvMixyLnB4bWlkPUkoYSxzKSxyLm1pZGFuZ2xlPXMscys9bCpyLnYvMixuPUkoYSxzKSxyLnN0b3BhbmdsZT1zLHJbdV09bixyLmxhcmdlQXJjPXIudj5pLnZUb3RhbC8yPzE6MCxyLmhhbGZhbmdsZT1NYXRoLlBJKk1hdGgubWluKHIudi9pLnZUb3RhbCwuNSksci5yaW5nPTEtby5ob2xlLHIuckluc2NyaWJlZD1BKHIsaSkpfShlKSx1LmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIiksdS5lYWNoKChmdW5jdGlvbigpe3ZhciBnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5zbGljZSIpLmRhdGEoZSk7Zy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksZy5leGl0KCkucmVtb3ZlKCk7dmFyIG09W1tbXSxbXV0sW1tdLFtdXV0seD0hMTtnLmVhY2goKGZ1bmN0aW9uKGksYSl7aWYoaS5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle2kucG9pbnROdW1iZXI9aS5pLGkuY3VydmVOdW1iZXI9cC5pbmRleCxtW2kucHhtaWRbMV08MD8wOjFdW2kucHhtaWRbMF08MD8wOjFdLnB1c2goaSk7dmFyIG89Zi5jeCx1PWYuY3ksZz1uLnNlbGVjdCh0aGlzKSxfPWcuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5kYXRhKFtpXSk7aWYoXy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInN1cmZhY2UiLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLGcuY2FsbCh2LHQsZSkscC5wdWxsKXt2YXIgdz0rZC5jYXN0T3B0aW9uKHAucHVsbCxpLnB0cyl8fDA7dz4wJiYobys9dyppLnB4bWlkWzBdLHUrPXcqaS5weG1pZFsxXSl9aS5jeEZpbmFsPW8saS5jeUZpbmFsPXU7dmFyIFQ9cC5ob2xlO2lmKGkudj09PWYudlRvdGFsKXt2YXIgaz0iTSIrKG8raS5weDBbMF0pKyIsIisodStpLnB4MFsxXSkrTChpLnB4MCxpLnB4bWlkLCEwLDEpK0woaS5weG1pZCxpLnB4MCwhMCwxKSsiWiI7VD9fLmF0dHIoImQiLCJNIisobytUKmkucHgwWzBdKSsiLCIrKHUrVCppLnB4MFsxXSkrTChpLnB4MCxpLnB4bWlkLCExLFQpK0woaS5weG1pZCxpLnB4MCwhMSxUKSsiWiIrayk6Xy5hdHRyKCJkIixrKX1lbHNle3ZhciBNPUwoaS5weDAsaS5weDEsITAsMSk7aWYoVCl7dmFyIEE9MS1UO18uYXR0cigiZCIsIk0iKyhvK1QqaS5weDFbMF0pKyIsIisodStUKmkucHgxWzFdKStMKGkucHgxLGkucHgwLCExLFQpKyJsIitBKmkucHgwWzBdKyIsIitBKmkucHgwWzFdK00rIloiKX1lbHNlIF8uYXR0cigiZCIsIk0iK28rIiwiK3UrImwiK2kucHgwWzBdKyIsIitpLnB4MFsxXStNKyJaIil9eih0LGksZik7dmFyIEU9ZC5jYXN0T3B0aW9uKHAudGV4dHBvc2l0aW9uLGkucHRzKSxDPWcuc2VsZWN0QWxsKCJnLnNsaWNldGV4dCIpLmRhdGEoaS50ZXh0JiYibm9uZSIhPT1FP1swXTpbXSk7Qy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLEMuZXhpdCgpLnJlbW92ZSgpLEMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZz1sLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksbT1sLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LCJvdXRzaWRlIj09PUU/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWQuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5jb2xvcixlLnB0cyl8fGQuY2FzdE9wdGlvbih0LnRleHRmb250LmNvbG9yLGUucHRzKXx8ci5jb2xvcixpPWQuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxkLmNhc3RPcHRpb24odC50ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxyLmZhbWlseSxhPWQuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5zaXplLGUucHRzKXx8ZC5jYXN0T3B0aW9uKHQudGV4dGZvbnQuc2l6ZSxlLnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bixmYW1pbHk6aSxzaXplOmF9fShwLGksci5mb250KTp5KHAsaSxyLmZvbnQpKTtnLnRleHQoaS50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwocy5mb250LG0pLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHYsXz1zLmJCb3goZy5ub2RlKCkpO2lmKCJvdXRzaWRlIj09PUUpdj1TKF8saSk7ZWxzZSBpZih2PWIoXyxpLGYpLCJhdXRvIj09PUUmJnYuc2NhbGU8MSl7dmFyIHc9bC5lbnN1cmVVbmlmb3JtRm9udFNpemUodCxwLm91dHNpZGV0ZXh0Zm9udCk7Zy5jYWxsKHMuZm9udCx3KSx2PVMoXz1zLmJCb3goZy5ub2RlKCkpLGkpfXZhciBUPXYudGV4dFBvc0FuZ2xlLGs9dm9pZCAwPT09VD9pLnB4bWlkOkkoZi5yLFQpO2lmKHYudGFyZ2V0WD1vK2tbMF0qdi5yQ2VudGVyKyh2Lnh8fDApLHYudGFyZ2V0WT11K2tbMV0qdi5yQ2VudGVyKyh2Lnl8fDApLE8odixfKSx2Lm91dHNpZGUpe3ZhciBNPXYudGFyZ2V0WTtpLnlMYWJlbE1pbj1NLV8uaGVpZ2h0LzIsaS55TGFiZWxNaWQ9TSxpLnlMYWJlbE1heD1NK18uaGVpZ2h0LzIsaS5sYWJlbEV4dHJhWD0wLGkubGFiZWxFeHRyYVk9MCx4PSEwfXYuZm9udFNpemU9bS5zaXplLGgocC50eXBlLHYsciksZVthXS50cmFuc2Zvcm09dixnLmF0dHIoInRyYW5zZm9ybSIsbC5nZXRUZXh0VHJhbnNmb3JtKHYpKX0pKX1mdW5jdGlvbiBMKHQsZSxyLG4pe3ZhciBhPW4qKGVbMF0tdFswXSksbz1uKihlWzFdLXRbMV0pO3JldHVybiJhIituKmYucisiLCIrbipmLnIrIiAwICIraS5sYXJnZUFyYysocj8iIDEgIjoiIDAgIikrYSsiLCIrb319KSk7dmFyIF89bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRpdGxldGV4dCIpLmRhdGEocC50aXRsZS50ZXh0P1swXTpbXSk7aWYoXy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRpdGxldGV4dCIsITApLF8uZXhpdCgpLnJlbW92ZSgpLF8uZWFjaCgoZnVuY3Rpb24oKXt2YXIgZSxyPWwuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxpPXAudGl0bGUudGV4dDtwLl9tZXRhJiYoaT1sLnRlbXBsYXRlU3RyaW5nKGkscC5fbWV0YSkpLHIudGV4dChpKS5hdHRyKHtjbGFzczoidGl0bGV0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwocy5mb250LHAudGl0bGUuZm9udCkuY2FsbChjLmNvbnZlcnRUb1RzcGFucyx0KSxlPSJtaWRkbGUgY2VudGVyIj09PXAudGl0bGUucG9zaXRpb24/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQudGl0bGVCb3gud2lkdGgqdC50aXRsZUJveC53aWR0aCt0LnRpdGxlQm94LmhlaWdodCp0LnRpdGxlQm94LmhlaWdodCk7cmV0dXJue3g6dC5jeCx5OnQuY3ksc2NhbGU6dC50cmFjZS5ob2xlKnQucioyL2UsdHg6MCx0eTotdC50aXRsZUJveC5oZWlnaHQvMit0LnRyYWNlLnRpdGxlLmZvbnQuc2l6ZX19KGYpOkUoZixhKSxyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UueCsiLCIrZS55KyIpIisoZS5zY2FsZTwxPyJzY2FsZSgiK2Uuc2NhbGUrIikiOiIiKSsidHJhbnNsYXRlKCIrZS50eCsiLCIrZS50eSsiKSIpfSkpLHgmJmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGc7ZnVuY3Rpb24gbSh0LGUpe3JldHVybiB0LnB4bWlkWzFdLWUucHhtaWRbMV19ZnVuY3Rpb24gdih0LGUpe3JldHVybiBlLnB4bWlkWzFdLXQucHhtaWRbMV19ZnVuY3Rpb24geSh0LHIpe3J8fChyPXt9KTt2YXIgaSxjLHUsZixwPXIubGFiZWxFeHRyYVkrKG4/ci55TGFiZWxNYXg6ci55TGFiZWxNaW4pLGc9bj90LnlMYWJlbE1pbjp0LnlMYWJlbE1heCxtPW4/dC55TGFiZWxNYXg6dC55TGFiZWxNaW4sdj10LmN5RmluYWwrbyh0LnB4MFsxXSx0LnB4MVsxXSkseT1wLWc7aWYoeSpsPjAmJih0LmxhYmVsRXh0cmFZPXkpLEFycmF5LmlzQXJyYXkoZS5wdWxsKSlmb3IoYz0wO2M8aC5sZW5ndGg7YysrKSh1PWhbY10pPT09dHx8KGQuY2FzdE9wdGlvbihlLnB1bGwsdC5wdHMpfHwwKT49KGQuY2FzdE9wdGlvbihlLnB1bGwsdS5wdHMpfHwwKXx8KCh0LnB4bWlkWzFdLXUucHhtaWRbMV0pKmw+MD8oeT11LmN5RmluYWwrbyh1LnB4MFsxXSx1LnB4MVsxXSktZy10LmxhYmVsRXh0cmFZKSpsPjAmJih0LmxhYmVsRXh0cmFZKz15KToobSt0LmxhYmVsRXh0cmFZLXYpKmw+MCYmKGk9MypzKk1hdGguYWJzKGMtaC5pbmRleE9mKHQpKSwoZj11LmN4RmluYWwrYSh1LnB4MFswXSx1LnB4MVswXSkraS0odC5jeEZpbmFsK3QucHhtaWRbMF0pLXQubGFiZWxFeHRyYVgpKnM+MCYmKHQubGFiZWxFeHRyYVgrPWYpKSl9Zm9yKG49MDtuPDI7bisrKWZvcihpPW4/bTp2LG89bj9NYXRoLm1heDpNYXRoLm1pbixsPW4/MTotMSxyPTA7cjwyO3IrKyl7Zm9yKGE9cj9NYXRoLm1heDpNYXRoLm1pbixzPXI/MTotMSwoYz10W25dW3JdKS5zb3J0KGkpLHU9dFsxLW5dW3JdLGg9dS5jb25jYXQoYykscD1bXSxmPTA7ZjxjLmxlbmd0aDtmKyspdm9pZCAwIT09Y1tmXS55TGFiZWxNaWQmJnAucHVzaChjW2ZdKTtmb3IoZz0hMSxmPTA7biYmZjx1Lmxlbmd0aDtmKyspaWYodm9pZCAwIT09dVtmXS55TGFiZWxNaWQpe2c9dVtmXTticmVha31mb3IoZj0wO2Y8cC5sZW5ndGg7ZisrKXt2YXIgeD1mJiZwW2YtMV07ZyYmIWYmJih4PWcpLHkocFtmXSx4KX19fShtLHApLGZ1bmN0aW9uKHQsZSl7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZih0LmxhYmVsRXh0cmFYfHx0LmxhYmVsRXh0cmFZKXt2YXIgaT1yLnNlbGVjdCgiZy5zbGljZXRleHQgdGV4dCIpO3QudHJhbnNmb3JtLnRhcmdldFgrPXQubGFiZWxFeHRyYVgsdC50cmFuc2Zvcm0udGFyZ2V0WSs9dC5sYWJlbEV4dHJhWSxpLmF0dHIoInRyYW5zZm9ybSIsbC5nZXRUZXh0VHJhbnNmb3JtKHQudHJhbnNmb3JtKSk7dmFyIGE9dC5jeEZpbmFsK3QucHhtaWRbMF0scz0iTSIrYSsiLCIrKHQuY3lGaW5hbCt0LnB4bWlkWzFdKSxjPSh0LnlMYWJlbE1heC10LnlMYWJlbE1pbikqKHQucHhtaWRbMF08MD8tMToxKS80O2lmKHQubGFiZWxFeHRyYVgpe3ZhciB1PXQubGFiZWxFeHRyYVgqdC5weG1pZFsxXS90LnB4bWlkWzBdLGg9dC55TGFiZWxNaWQrdC5sYWJlbEV4dHJhWS0odC5jeUZpbmFsK3QucHhtaWRbMV0pO01hdGguYWJzKHUpPk1hdGguYWJzKGgpP3MrPSJsIitoKnQucHhtaWRbMF0vdC5weG1pZFsxXSsiLCIraCsiSCIrKGErdC5sYWJlbEV4dHJhWCtjKTpzKz0ibCIrdC5sYWJlbEV4dHJhWCsiLCIrdSsidiIrKGgtdSkrImgiK2N9ZWxzZSBzKz0iViIrKHQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVkpKyJoIitjO2wuZW5zdXJlU2luZ2xlKHIsInBhdGgiLCJ0ZXh0bGluZSIpLmNhbGwoby5zdHJva2UsZS5vdXRzaWRldGV4dGZvbnQuY29sb3IpLmF0dHIoeyJzdHJva2Utd2lkdGgiOk1hdGgubWluKDIsZS5vdXRzaWRldGV4dGZvbnQuc2l6ZS84KSxkOnMsZmlsbDoibm9uZSJ9KX1lbHNlIHIuc2VsZWN0KCJwYXRoLnRleHRsaW5lIikucmVtb3ZlKCl9KSl9KGcscCkseCYmcC5hdXRvbWFyZ2luKXt2YXIgdz1zLmJCb3godS5ub2RlKCkpLFQ9cC5kb21haW4saz1hLncqKFQueFsxXS1ULnhbMF0pLE09YS5oKihULnlbMV0tVC55WzBdKSxBPSguNSprLWYucikvYS53LEM9KC41Kk0tZi5yKS9hLmg7aS5hdXRvTWFyZ2luKHQsInBpZS4iK3AudWlkKyIuYXV0b21hcmdpbiIse3hsOlQueFswXS1BLHhyOlQueFsxXStBLHliOlQueVswXS1DLHl0OlQueVsxXStDLGw6TWF0aC5tYXgoZi5jeC1mLnItdy5sZWZ0LDApLHI6TWF0aC5tYXgody5yaWdodC0oZi5jeCtmLnIpLDApLGI6TWF0aC5tYXgody5ib3R0b20tKGYuY3krZi5yKSwwKSx0Ok1hdGgubWF4KGYuY3ktZi5yLXcudG9wLDApLHBhZDo1fSl9fSkpfSkpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dS5zZWxlY3RBbGwoInRzcGFuIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmF0dHIoImR5IikmJnQuYXR0cigiZHkiLHQuYXR0cigiZHkiKSl9KSl9KSwwKX0sZm9ybWF0U2xpY2VMYWJlbDp6LHRyYW5zZm9ybUluc2lkZVRleHQ6YixkZXRlcm1pbmVJbnNpZGVUZXh0Rm9udDp5LHBvc2l0aW9uVGl0bGVPdXRzaWRlOkUscHJlcmVuZGVyVGl0bGVzOngsbGF5b3V0QXJlYXM6UCxhdHRhY2hGeEhhbmRsZXJzOnYsY29tcHV0ZVRyYW5zZm9ybTpPfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTUsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc3NCwiLi4vLi4vcGxvdHMvcGxvdHMiOjg2MiwiLi4vYmFyL2NvbnN0YW50cyI6ODk0LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MDgsIi4vZXZlbnRfZGF0YSI6MTEzNiwiLi9oZWxwZXJzIjoxMTM3LGQzOjE2OX1dLDExNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4vc3R5bGVfb25lIiksYT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fcGllbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTthKHQsZSwicGllIiksZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSh7b3BhY2l0eTplLm9wYWNpdHl9KSxyLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChpLHQsZSl9KSl9KSl9fSx7Ii4uL2Jhci91bmlmb3JtX3RleHQiOjkwOCwiLi9zdHlsZV9vbmUiOjExNDMsZDM6MTY5fV0sMTE0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuL2hlbHBlcnMiKS5jYXN0T3B0aW9uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ci5tYXJrZXIubGluZSxvPWkoYS5jb2xvcixlLnB0cyl8fG4uZGVmYXVsdExpbmUscz1pKGEud2lkdGgsZS5wdHMpfHwwO3Quc3R5bGUoInN0cm9rZS13aWR0aCIscykuY2FsbChuLmZpbGwsZS5jb2xvcikuY2FsbChuLnN0cm9rZSxvKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuL2hlbHBlcnMiOjExMzd9XSwxMTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17eDpuLngseTpuLnkseHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saW5kaWNlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx4Ym91bmRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHlib3VuZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDpuLnRleHQsbWFya2VyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sYmxlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LHNpemVtaW46e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLG1heDoyLGRmbHQ6LjUsZWRpdFR5cGU6ImNhbGMifSxzaXplbWF4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxkZmx0OjIwLGVkaXRUeXBlOiJjYWxjIn0sYm9yZGVyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxhcmVhcmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRyYW5zZm9ybXM6dm9pZCAwfX0seyIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExNTh9XSwxMTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXBvaW50Y2xvdWQyZCIpLGk9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmZpbmRFeHRyZW1lcyxvPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIik7ZnVuY3Rpb24gcyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0icG9pbnRjbG91ZCIsdGhpcy5waWNrWERhdGE9W10sdGhpcy5waWNrWURhdGE9W10sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmNvbG9yPSJyZ2IoMCwgMCwgMCkiLHRoaXMubmFtZT0iIix0aGlzLmhvdmVyaW5mbz0iYWxsIix0aGlzLmlkVG9JbmRleD1uZXcgSW50MzJBcnJheSgwKSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5wb2ludGNsb3VkT3B0aW9ucz17cG9zaXRpb25zOm5ldyBGbG9hdDMyQXJyYXkoMCksaWRUb0luZGV4OnRoaXMuaWRUb0luZGV4LHNpemVtaW46LjUsc2l6ZW1heDoxMixjb2xvcjpbMCwwLDAsMV0sYXJlYVJhdGlvOjEsYm9yZGVyQ29sb3I6WzAsMCwwLDFdfSx0aGlzLnBvaW50Y2xvdWQ9bih0LmdscGxvdCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zKSx0aGlzLnBvaW50Y2xvdWQuX3RyYWNlPXRoaXN9dmFyIGw9cy5wcm90b3R5cGU7bC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWRUb0luZGV4W3QucG9pbnRJZF07cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6dGhpcy5waWNrWFlEYXRhP1t0aGlzLnBpY2tYWURhdGFbMiplXSx0aGlzLnBpY2tYWURhdGFbMiplKzFdXTpbdGhpcy5waWNrWERhdGFbZV0sdGhpcy5waWNrWURhdGFbZV1dLHRleHRMYWJlbDpBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/dGhpcy50ZXh0TGFiZWxzW2VdOnRoaXMudGV4dExhYmVscyxjb2xvcjp0aGlzLmNvbG9yLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6ZSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy50ZXh0TGFiZWxzPXQudGV4dCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy51cGRhdGVGYXN0KHQpLHRoaXMuY29sb3I9byh0LHt9KX0sbC51cGRhdGVGYXN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixvLHMsbCxjPXRoaXMueERhdGE9dGhpcy5waWNrWERhdGE9dC54LHU9dGhpcy55RGF0YT10aGlzLnBpY2tZRGF0YT10LnksaD10aGlzLnBpY2tYWURhdGE9dC54eSxmPXQueGJvdW5kcyYmdC55Ym91bmRzLHA9dC5pbmRpY2VzLGQ9dGhpcy5ib3VuZHM7aWYoaCl7aWYobj1oLGU9aC5sZW5ndGg+Pj4xLGYpZFswXT10Lnhib3VuZHNbMF0sZFsyXT10Lnhib3VuZHNbMV0sZFsxXT10Lnlib3VuZHNbMF0sZFszXT10Lnlib3VuZHNbMV07ZWxzZSBmb3IobD0wO2w8ZTtsKyspbz1uWzIqbF0scz1uWzIqbCsxXSxvPGRbMF0mJihkWzBdPW8pLG8+ZFsyXSYmKGRbMl09byksczxkWzFdJiYoZFsxXT1zKSxzPmRbM10mJihkWzNdPXMpO2lmKHApcj1wO2Vsc2UgZm9yKHI9bmV3IEludDMyQXJyYXkoZSksbD0wO2w8ZTtsKyspcltsXT1sfWVsc2UgZm9yKGU9Yy5sZW5ndGgsbj1uZXcgRmxvYXQzMkFycmF5KDIqZSkscj1uZXcgSW50MzJBcnJheShlKSxsPTA7bDxlO2wrKylvPWNbbF0scz11W2xdLHJbbF09bCxuWzIqbF09byxuWzIqbCsxXT1zLG88ZFswXSYmKGRbMF09byksbz5kWzJdJiYoZFsyXT1vKSxzPGRbMV0mJihkWzFdPXMpLHM+ZFszXSYmKGRbM109cyk7dGhpcy5pZFRvSW5kZXg9cix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMucG9zaXRpb25zPW47dmFyIGc9aSh0Lm1hcmtlci5jb2xvciksbT1pKHQubWFya2VyLmJvcmRlci5jb2xvciksdj10Lm9wYWNpdHkqdC5tYXJrZXIub3BhY2l0eTtnWzNdKj12LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuY29sb3I9Zzt2YXIgeT10Lm1hcmtlci5ibGVuZDtpZihudWxsPT09eSl7eT1jLmxlbmd0aDwxMDB8fHUubGVuZ3RoPDEwMH10aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJsZW5kPXksbVszXSo9dix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJvcmRlckNvbG9yPW07dmFyIHg9dC5tYXJrZXIuc2l6ZW1pbixiPU1hdGgubWF4KHQubWFya2VyLnNpemVtYXgsdC5tYXJrZXIuc2l6ZW1pbik7dGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWluPXgsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWF4PWIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5hcmVhUmF0aW89dC5tYXJrZXIuYm9yZGVyLmFyZWFyYXRpbyx0aGlzLnBvaW50Y2xvdWQudXBkYXRlKHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpO3ZhciBfPXRoaXMuc2NlbmUueGF4aXMsdz10aGlzLnNjZW5lLnlheGlzLFQ9Yi8yfHwuNTt0Ll9leHRyZW1lc1tfLl9pZF09YShfLFtkWzBdLGRbMl1dLHtwcGFkOlR9KSx0Ll9leHRyZW1lc1t3Ll9pZF09YSh3LFtkWzFdLGRbM11dLHtwcGFkOlR9KX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wb2ludGNsb3VkLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHModCxlLnVpZCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9fSx7Ii4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc3MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6Nzk4LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTE2OCwiZ2wtcG9pbnRjbG91ZDJkIjozMDN9XSwxMTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBhKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YSgieCIpLGEoInkiKSxhKCJ4Ym91bmRzIiksYSgieWJvdW5kcyIpLHQueHkmJnQueHkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJihlLnh5PXQueHkpLHQuaW5kaWNlcyYmdC5pbmRpY2VzIGluc3RhbmNlb2YgSW50MzJBcnJheSYmKGUuaW5kaWNlcz10LmluZGljZXMpLGEoInRleHQiKSxhKCJtYXJrZXIuY29sb3IiLHIpLGEoIm1hcmtlci5vcGFjaXR5IiksYSgibWFya2VyLmJsZW5kIiksYSgibWFya2VyLnNpemVtaW4iKSxhKCJtYXJrZXIuc2l6ZW1heCIpLGEoIm1hcmtlci5ib3JkZXIuY29sb3IiLHIpLGEoIm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvIiksZS5fbGVuZ3RoPW51bGx9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuL2F0dHJpYnV0ZXMiOjExNDR9XSwxMTQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuLi9zY2F0dGVyM2QvY2FsYyIpLHBsb3Q6dCgiLi9jb252ZXJ0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InBvaW50Y2xvdWQiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsMmQiKSxjYXRlZ29yaWVzOlsiZ2wiLCJnbDJkIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsMmQiOjgzOSwiLi4vc2NhdHRlcjNkL2NhbGMiOjExODcsIi4vYXR0cmlidXRlcyI6MTE0NCwiLi9jb252ZXJ0IjoxMTQ1LCIuL2RlZmF1bHRzIjoxMTQ2fV0sMTE0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksdT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksaD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxmPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDt0KCIuLi8uLi9jb25zdGFudHMvZG9jcyIpLkZPUk1BVF9MSU5LOyhlLmV4cG9ydHM9Zih7aG92ZXJpbmZvOmgoe30saS5ob3ZlcmluZm8se2ZsYWdzOltdLGFycmF5T2s6ITF9KSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxkb21haW46cyh7bmFtZToic2Fua2V5Iix0cmFjZTohMH0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6ImgifSx2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIuM3MifSx2YWx1ZXN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxhcnJhbmdlbWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic25hcCIsInBlcnBlbmRpY3VsYXIiLCJmcmVlZm9ybSIsImZpeGVkIl0sZGZsdDoic25hcCJ9LHRleHRmb250Om4oe30pLGN1c3RvbWRhdGE6dm9pZCAwLG5vZGU6e2xhYmVsOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxncm91cHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGltcGxpZWRFZGl0czp7eDpbXSx5OltdfSxkaW1lbnNpb25zOjIsZnJlZUxlbmd0aDohMCxkZmx0OltdLGl0ZW1zOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn19LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMH0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0Oi41LGFycmF5T2s6ITB9fSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MCxkZmx0OjIwfSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MSxkZmx0OjIwfSxob3ZlcmluZm86e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm5vbmUiLCJza2lwIl0sZGZsdDoiYWxsIn0saG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOlsidmFsdWUiLCJsYWJlbCJdfSl9LGxpbms6e2xhYmVsOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITB9LGN1c3RvbWRhdGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsYXJyYXlPazohMH0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITB9fSxzb3VyY2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHRhcmdldDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sdmFsdWU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGhvdmVyaW5mbzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwibm9uZSIsInNraXAiXSxkZmx0OiJhbGwifSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxob3ZlcnRlbXBsYXRlOmwoe30se2tleXM6WyJ2YWx1ZSIsImxhYmVsIl19KSxjb2xvcnNjYWxlczp1KCJjb25jZW50cmF0aW9uc2NhbGVzIix7ZWRpdFR5cGU6ImNhbGMiLGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIixkZmx0OiIifSxjbWF4Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixkZmx0OjF9LGNtaW46e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6MH0sY29sb3JzY2FsZTpoKGMoKS5jb2xvcnNjYWxlLHtkZmx0OltbMCwid2hpdGUiXSxbMSwiYmxhY2siXV19KX0pfX0sImNhbGMiLCJuZXN0ZWQiKSkudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MTQsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9jb25zdGFudHMvZG9jcyI6NzIwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6Nzg4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODI2LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjgyNywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODc3fV0sMTE0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLGE9dCgiLi9wbG90Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCx1PXQoIi4uLy4uL2xpYiIpLGg9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBmKHQsZSl7dmFyIHI9dC5fZnVsbERhdGFbZV0sbj10Ll9mdWxsTGF5b3V0LGk9bi5kcmFnbW9kZSxhPSJwYW4iPT09bi5kcmFnbW9kZT8ibW92ZSI6ImNyb3NzaGFpciIsbz1yLl9iZ1JlY3Q7aWYoInBhbiIhPT1pJiYiem9vbSIhPT1pKXtzKG8sYSk7dmFyIGY9e19pZDoieCIsYzJwOnUuaWRlbnRpdHksX29mZnNldDpyLl9zYW5rZXkudHJhbnNsYXRlWCxfbGVuZ3RoOnIuX3NhbmtleS53aWR0aH0scD17X2lkOiJ5IixjMnA6dS5pZGVudGl0eSxfb2Zmc2V0OnIuX3NhbmtleS50cmFuc2xhdGVZLF9sZW5ndGg6ci5fc2Fua2V5LmhlaWdodH0sZD17Z2Q6dCxlbGVtZW50Om8ubm9kZSgpLHBsb3RpbmZvOntpZDplLHhheGlzOmYseWF4aXM6cCxmaWxsUmFuZ2VJdGVtczp1Lm5vb3B9LHN1YnBsb3Q6ZSx4YXhlczpbZl0seWF4ZXM6W3BdLGRvbmVGbkNvbXBsZXRlZDpmdW5jdGlvbihyKXt2YXIgbixpPXQuX2Z1bGxEYXRhW2VdLGE9aS5ub2RlLmdyb3Vwcy5zbGljZSgpLG89W107ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9aS5fc2Fua2V5LmdyYXBoLm5vZGVzLHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdLnBvaW50TnVtYmVyPT09dClyZXR1cm4gZVtyXX1mb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cyhyW2xdLnBvaW50TnVtYmVyKTtpZihjKWlmKGMuZ3JvdXApe2Zvcih2YXIgdT0wO3U8Yy5jaGlsZHJlbk5vZGVzLmxlbmd0aDt1Kyspby5wdXNoKGMuY2hpbGRyZW5Ob2Rlc1t1XS5wb2ludE51bWJlcik7YVtjLnBvaW50TnVtYmVyLWkubm9kZS5fY291bnRdPSExfWVsc2Ugby5wdXNoKGMucG9pbnROdW1iZXIpfW49YS5maWx0ZXIoQm9vbGVhbikuY29uY2F0KFtvXSksaC5jYWxsKCJfZ3VpUmVzdHlsZSIsdCx7Im5vZGUuZ3JvdXBzIjpbbl19LGUpfSxwcmVwRm46ZnVuY3Rpb24odCxlLHIpe2ModCxlLHIsZCxpKX19O2wuaW5pdChkKX19ci5uYW1lPSJzYW5rZXkiLHIuYmFzZUxheW91dEF0dHJPdmVycmlkZXM9bih7aG92ZXJsYWJlbDpvLmhvdmVybGFiZWx9LCJwbG90IiwibmVzdGVkIiksci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPWkodC5jYWxjZGF0YSwic2Fua2V5IilbMF07YSh0LGUpLHIudXBkYXRlRngodCl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInNhbmtleSIpLGE9ZS5faGFzJiZlLl9oYXMoInNhbmtleSIpO2kmJiFhJiYobi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIuc2Fua2V5IikucmVtb3ZlKCksbi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIuYmdzYW5rZXkiKS5yZW1vdmUoKSl9LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Ll9mdWxsRGF0YS5sZW5ndGg7ZSsrKWYodCxlKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjM0LCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo2NTYsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3NzAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCI6ODE4LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6ODM2LCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL3Bsb3QiOjExNTR9XSwxMTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwLG89aS5pc0FycmF5T3JUeXBlZEFycmF5LHM9aS5pc0luZGV4LGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIik7ZnVuY3Rpb24gYyh0KXt2YXIgZSxyPXQubm9kZSxhPXQubGluayxjPVtdLHU9byhhLmNvbG9yKSxoPW8oYS5jdXN0b21kYXRhKSxmPXt9LHA9e30sZD1hLmNvbG9yc2NhbGVzLmxlbmd0aDtmb3IoZT0wO2U8ZDtlKyspe3ZhciBnPWEuY29sb3JzY2FsZXNbZV0sbT1sLmV4dHJhY3RTY2FsZShnLHtjTGV0dGVyOiJjIn0pLHY9bC5tYWtlQ29sb3JTY2FsZUZ1bmMobSk7cFtnLmxhYmVsXT12fXZhciB5PTA7Zm9yKGU9MDtlPGEudmFsdWUubGVuZ3RoO2UrKylhLnNvdXJjZVtlXT55JiYoeT1hLnNvdXJjZVtlXSksYS50YXJnZXRbZV0+eSYmKHk9YS50YXJnZXRbZV0pO3ZhciB4LGI9eSsxO3Qubm9kZS5fY291bnQ9Yjt2YXIgXz10Lm5vZGUuZ3JvdXBzLHc9e307Zm9yKGU9MDtlPF8ubGVuZ3RoO2UrKyl7dmFyIFQ9X1tlXTtmb3IoeD0wO3g8VC5sZW5ndGg7eCsrKXt2YXIgaz1UW3hdLE09YitlO3cuaGFzT3duUHJvcGVydHkoayk/aS53YXJuKCJOb2RlICIraysiIGlzIGFscmVhZHkgcGFydCBvZiBhIGdyb3VwLiIpOndba109TX19dmFyIEE9e3NvdXJjZTpbXSx0YXJnZXQ6W119O2ZvcihlPTA7ZTxhLnZhbHVlLmxlbmd0aDtlKyspe3ZhciBTPWEudmFsdWVbZV0sRT1hLnNvdXJjZVtlXSxDPWEudGFyZ2V0W2VdO2lmKFM+MCYmcyhFLGIpJiZzKEMsYikmJighdy5oYXNPd25Qcm9wZXJ0eShFKXx8IXcuaGFzT3duUHJvcGVydHkoQyl8fHdbRV0hPT13W0NdKSl7dy5oYXNPd25Qcm9wZXJ0eShDKSYmKEM9d1tDXSksdy5oYXNPd25Qcm9wZXJ0eShFKSYmKEU9d1tFXSksQz0rQyxmW0U9K0VdPWZbQ109ITA7dmFyIEw9IiI7YS5sYWJlbCYmYS5sYWJlbFtlXSYmKEw9YS5sYWJlbFtlXSk7dmFyIFA9bnVsbDtMJiZwLmhhc093blByb3BlcnR5KEwpJiYoUD1wW0xdKSxjLnB1c2goe3BvaW50TnVtYmVyOmUsbGFiZWw6TCxjb2xvcjp1P2EuY29sb3JbZV06YS5jb2xvcixjdXN0b21kYXRhOmg/YS5jdXN0b21kYXRhW2VdOmEuY3VzdG9tZGF0YSxjb25jZW50cmF0aW9uc2NhbGU6UCxzb3VyY2U6RSx0YXJnZXQ6Qyx2YWx1ZTorU30pLEEuc291cmNlLnB1c2goRSksQS50YXJnZXQucHVzaChDKX19dmFyIEk9YitfLmxlbmd0aCx6PW8oci5jb2xvciksTz1vKHIuY3VzdG9tZGF0YSksRD1bXTtmb3IoZT0wO2U8STtlKyspaWYoZltlXSl7dmFyIFI9ci5sYWJlbFtlXTtELnB1c2goe2dyb3VwOmU+Yi0xLGNoaWxkcmVuTm9kZXM6W10scG9pbnROdW1iZXI6ZSxsYWJlbDpSLGNvbG9yOno/ci5jb2xvcltlXTpyLmNvbG9yLGN1c3RvbWRhdGE6Tz9yLmN1c3RvbWRhdGFbZV06ci5jdXN0b21kYXRhfSl9dmFyIEY9ITE7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGE9aS5pbml0MmRBcnJheSh0LDApLG89MDtvPE1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKTtvKyspaWYoaS5pc0luZGV4KGVbb10sdCkmJmkuaXNJbmRleChyW29dLHQpKXtpZihlW29dPT09cltvXSlyZXR1cm4hMDthW2Vbb11dLnB1c2gocltvXSl9cmV0dXJuIG4oYSkuY29tcG9uZW50cy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MX0pKX0oSSxBLnNvdXJjZSxBLnRhcmdldCkmJihGPSEwKSx7Y2lyY3VsYXI6RixsaW5rczpjLG5vZGVzOkQsZ3JvdXBzOl8sZ3JvdXBMb29rdXA6d319ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YyhlKTtyZXR1cm4gYSh7Y2lyY3VsYXI6ci5jaXJjdWxhcixfbm9kZXM6ci5ub2RlcyxfbGlua3M6ci5saW5rcyxfZ3JvdXBzOnIuZ3JvdXBzLF9ncm91cExvb2t1cDpyLmdyb3VwTG9va3VwfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL2d1cCI6NzQ3LCJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyI6NTQxfV0sMTE1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDo0LG5vZGVUZXh0T2Zmc2V0VmVydGljYWw6Myxub2RlUGFkQWNyb3NzOjEwLHNhbmtleUl0ZXJhdGlvbnM6NTAsZm9yY2VJdGVyYXRpb25zOjUsZm9yY2VUaWNrc1BlckZyYW1lOjEwLGR1cmF0aW9uOjUwMCxlYXNlOiJsaW5lYXIiLGNuOntzYW5rZXk6InNhbmtleSIsc2Fua2V5TGlua3M6InNhbmtleS1saW5rcyIsc2Fua2V5TGluazoic2Fua2V5LWxpbmsiLHNhbmtleU5vZGVTZXQ6InNhbmtleS1ub2RlLXNldCIsc2Fua2V5Tm9kZToic2Fua2V5LW5vZGUiLG5vZGVSZWN0OiJub2RlLXJlY3QiLG5vZGVDYXB0dXJlOiJub2RlLWNhcHR1cmUiLG5vZGVDZW50ZXJlZDoibm9kZS1lbnRlcmVkIixub2RlTGFiZWxHdWlkZToibm9kZS1sYWJlbC1ndWlkZSIsbm9kZUxhYmVsOiJub2RlLWxhYmVsIixub2RlTGFiZWxUZXh0UGF0aDoibm9kZS1sYWJlbC10ZXh0LXBhdGgifX19LHt9XSwxMTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCJ0aW55Y29sb3IyIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJsYWJlbF9kZWZhdWx0cyIpLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHU9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIik7ZnVuY3Rpb24gaCh0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkubGluay5jb2xvcnNjYWxlcyxyLGEpfXIoImxhYmVsIikscigiY21pbiIpLHIoImNtYXgiKSxyKCJjb2xvcnNjYWxlIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIHAocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgZD1uLmV4dGVuZERlZXAoZi5ob3ZlcmxhYmVsLHQuaG92ZXJsYWJlbCksZz10Lm5vZGUsbT1jLm5ld0NvbnRhaW5lcihlLCJub2RlIik7ZnVuY3Rpb24gdih0LGUpe3JldHVybiBuLmNvZXJjZShnLG0saS5ub2RlLHQsZSl9digibGFiZWwiKSx2KCJncm91cHMiKSx2KCJ4IiksdigieSIpLHYoInBhZCIpLHYoInRoaWNrbmVzcyIpLHYoImxpbmUuY29sb3IiKSx2KCJsaW5lLndpZHRoIiksdigiaG92ZXJpbmZvIix0LmhvdmVyaW5mbyksbChnLG0sdixkKSx2KCJob3ZlcnRlbXBsYXRlIik7dmFyIHk9Zi5jb2xvcndheTt2KCJjb2xvciIsbS5sYWJlbC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuYWRkT3BhY2l0eShmdW5jdGlvbih0KXtyZXR1cm4geVt0JXkubGVuZ3RoXX0oZSksLjgpfSkpKSx2KCJjdXN0b21kYXRhIik7dmFyIHg9dC5saW5rfHx7fSxiPWMubmV3Q29udGFpbmVyKGUsImxpbmsiKTtmdW5jdGlvbiBfKHQsZSl7cmV0dXJuIG4uY29lcmNlKHgsYixpLmxpbmssdCxlKX1fKCJsYWJlbCIpLF8oInNvdXJjZSIpLF8oInRhcmdldCIpLF8oInZhbHVlIiksXygibGluZS5jb2xvciIpLF8oImxpbmUud2lkdGgiKSxfKCJob3ZlcmluZm8iLHQuaG92ZXJpbmZvKSxsKHgsYixfLGQpLF8oImhvdmVydGVtcGxhdGUiKTt2YXIgdyxUPW8oZi5wYXBlcl9iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKTwuMzMzPyJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNikiOiJyZ2JhKDAsIDAsIDAsIDAuMikiO18oImNvbG9yIixuLnJlcGVhdChULGIudmFsdWUubGVuZ3RoKSksXygiY3VzdG9tZGF0YSIpLHUoeCxiLHtuYW1lOiJjb2xvcnNjYWxlcyIsaGFuZGxlSXRlbURlZmF1bHRzOmh9KSxzKGUsZixwKSxwKCJvcmllbnRhdGlvbiIpLHAoInZhbHVlZm9ybWF0IikscCgidmFsdWVzdWZmaXgiKSxtLngubGVuZ3RoJiZtLnkubGVuZ3RoJiYodz0iZnJlZWZvcm0iKSxwKCJhcnJhbmdlbWVudCIsdyksbi5jb2VyY2VGb250KHAsInRleHRmb250IixuLmV4dGVuZEZsYXQoe30sZi5mb250KSksZS5fbGVuZ3RoPW51bGx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2NTMsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3ODgsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6Nzk0LCIuLi8uLi9wbG90cy9kb21haW4iOjgyNiwiLi9hdHRyaWJ1dGVzIjoxMTQ4LHRpbnljb2xvcjI6NTQ4fV0sMTE1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2Fua2V5IixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdC5qcyIpLGNhdGVnb3JpZXM6WyJub09wYWNpdHkiXSxtZXRhOnt9fX0seyIuL2F0dHJpYnV0ZXMiOjExNDgsIi4vYmFzZV9wbG90IjoxMTQ5LCIuL2NhbGMiOjExNTAsIi4vZGVmYXVsdHMiOjExNTIsIi4vcGxvdCI6MTE1NCwiLi9zZWxlY3QuanMiOjExNTZ9XSwxMTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuL3JlbmRlciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuL2NvbnN0YW50cyIpLmNuLGM9cy5fO2Z1bmN0aW9uIHUodCl7cmV0dXJuIiIhPT10fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleT09PWUudHJhY2VJZH0pKX1mdW5jdGlvbiBmKHQsZSl7bi5zZWxlY3QodCkuc2VsZWN0KCJwYXRoIikuc3R5bGUoImZpbGwtb3BhY2l0eSIsZSksbi5zZWxlY3QodCkuc2VsZWN0KCJyZWN0Iikuc3R5bGUoImZpbGwtb3BhY2l0eSIsZSl9ZnVuY3Rpb24gcCh0KXtuLnNlbGVjdCh0KS5zZWxlY3QoInRleHQubmFtZSIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKX1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PXQubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKGUubGluayl8fC0xIT09dC5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YoZS5saW5rKX19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1lLm5vZGUuc291cmNlTGlua3MuaW5kZXhPZih0LmxpbmspfHwtMSE9PWUubm9kZS50YXJnZXRMaW5rcy5pbmRleE9mKHQubGluayl9fWZ1bmN0aW9uIG0odCxlLHIpe2UmJnImJmgocixlKS5zZWxlY3RBbGwoIi4iK2wuc2Fua2V5TGluaykuZmlsdGVyKGQoZSkpLmNhbGwoeS5iaW5kKDAsZSxyLCExKSl9ZnVuY3Rpb24gdih0LGUscil7ZSYmciYmaChyLGUpLnNlbGVjdEFsbCgiLiIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZChlKSkuY2FsbCh4LmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe2lmKCF0LmxpbmsuY29uY2VudHJhdGlvbnNjYWxlKXJldHVybi40fSkpLGkmJmgoZSx0KS5zZWxlY3RBbGwoIi4iK2wuc2Fua2V5TGluaykuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7aWYoIXQubGluay5jb25jZW50cmF0aW9uc2NhbGUpcmV0dXJuLjR9KSksciYmaChlLHQpLnNlbGVjdEFsbCgiLiIrbC5zYW5rZXlOb2RlKS5maWx0ZXIoZyh0KSkuY2FsbChtKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBpPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSkpLGkmJmgoZSx0KS5zZWxlY3RBbGwoIi4iK2wuc2Fua2V5TGluaykuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSksciYmaChlLHQpLnNlbGVjdEFsbChsLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKHYpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10LmhvdmVybGFiZWx8fHt9LG49cy5uZXN0ZWRQcm9wZXJ0eShyLGUpLmdldCgpO3JldHVybiFBcnJheS5pc0FycmF5KG4pJiZufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LHM9ci5fcGFwZXIsaD1yLl9zaXplLGQ9MDtkPHQuX2Z1bGxEYXRhLmxlbmd0aDtkKyspaWYodC5fZnVsbERhdGFbZF0udmlzaWJsZSYmdC5fZnVsbERhdGFbZF0udHlwZT09PWwuc2Fua2V5JiYhdC5fZnVsbERhdGFbZF0uX3ZpZXdJbml0aWFsKXt2YXIgZz10Ll9mdWxsRGF0YVtkXS5ub2RlO3QuX2Z1bGxEYXRhW2RdLl92aWV3SW5pdGlhbD17bm9kZTp7Z3JvdXBzOmcuZ3JvdXBzLnNsaWNlKCkseDpnLnguc2xpY2UoKSx5OmcueS5zbGljZSgpfX19dmFyIF89Yyh0LCJzb3VyY2U6IikrIiAiLHc9Yyh0LCJ0YXJnZXQ6IikrIiAiLFQ9Yyh0LCJjb25jZW50cmF0aW9uOiIpKyIgIixrPWModCwiaW5jb21pbmcgZmxvdyBjb3VudDoiKSsiICIsTT1jKHQsIm91dGdvaW5nIGZsb3cgY291bnQ6IikrIiAiO2kodCxzLGUse3dpZHRoOmgudyxoZWlnaHQ6aC5oLG1hcmdpbjp7dDpoLnQscjpoLnIsYjpoLmIsbDpoLmx9fSx7bGlua0V2ZW50czp7aG92ZXI6ZnVuY3Rpb24oZSxyLGkpeyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKHkuYmluZCgwLHIsaSwhMCkpLCJza2lwIiE9PXIubGluay50cmFjZS5saW5rLmhvdmVyaW5mbyYmKHIubGluay5mdWxsRGF0YT1yLmxpbmsudHJhY2UsdC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5saW5rXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBzPWkubGluay50cmFjZS5saW5rO2lmKCJub25lIiE9PXMuaG92ZXJpbmZvJiYic2tpcCIhPT1zLmhvdmVyaW5mbyl7Zm9yKHZhciBsPVtdLGM9MCxoPTA7aDxpLmZsb3cubGlua3MubGVuZ3RoO2grKyl7dmFyIGQ9aS5mbG93LmxpbmtzW2hdO2lmKCJjbG9zZXN0IiE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlfHxpLmxpbmsucG9pbnROdW1iZXI9PT1kLnBvaW50TnVtYmVyKXtpLmxpbmsucG9pbnROdW1iZXI9PT1kLnBvaW50TnVtYmVyJiYoYz1oKSxkLmZ1bGxEYXRhPWQudHJhY2Uscz1pLmxpbmsudHJhY2UubGluazt2YXIgZz12KGQpLG09e3ZhbHVlTGFiZWw6bi5mb3JtYXQoaS52YWx1ZUZvcm1hdCkoZC52YWx1ZSkraS52YWx1ZVN1ZmZpeH07bC5wdXNoKHt4OmdbMF0seTpnWzFdLG5hbWU6bS52YWx1ZUxhYmVsLHRleHQ6W2QubGFiZWx8fCIiLF8rZC5zb3VyY2UubGFiZWwsdytkLnRhcmdldC5sYWJlbCxkLmNvbmNlbnRyYXRpb25zY2FsZT9UK24uZm9ybWF0KCIlMC4yZiIpKGQuZmxvdy5sYWJlbENvbmNlbnRyYXRpb24pOiIiXS5maWx0ZXIodSkuam9pbigiPGJyPiIpLGNvbG9yOmIocywiYmdjb2xvciIpfHxvLmFkZE9wYWNpdHkoZC5jb2xvciwxKSxib3JkZXJDb2xvcjpiKHMsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpiKHMsImZvbnQuZmFtaWx5IiksZm9udFNpemU6YihzLCJmb250LnNpemUiKSxmb250Q29sb3I6YihzLCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpiKHMsIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246YihzLCJhbGlnbiIpLGlkZWFsQWxpZ246bi5ldmVudC54PGdbMF0/InJpZ2h0IjoibGVmdCIsaG92ZXJ0ZW1wbGF0ZTpzLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczptLGV2ZW50RGF0YTpbZF19KX19YS5sb25lSG92ZXIobCx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0LGFuY2hvckluZGV4OmN9KS5lYWNoKChmdW5jdGlvbigpe2kubGluay5jb25jZW50cmF0aW9uc2NhbGV8fGYodGhpcywuNjUpLHAodGhpcyl9KSl9fWZ1bmN0aW9uIHYodCl7dmFyIGUscjt0LmNpcmN1bGFyPyhlPSh0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50K3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KS8yLHI9dC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCk6KGU9KHQuc291cmNlLngxK3QudGFyZ2V0LngwKS8yLHI9KHQueTArdC55MSkvMik7dmFyIG49W2Uscl07cmV0dXJuInYiPT09dC50cmFjZS5vcmllbnRhdGlvbiYmbi5yZXZlcnNlKCksblswXSs9aS5wYXJlbnQudHJhbnNsYXRlWCxuWzFdKz1pLnBhcmVudC50cmFuc2xhdGVZLG59fSx1bmhvdmVyOmZ1bmN0aW9uKGUsaSxvKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbCh4LmJpbmQoMCxpLG8sITApKSwic2tpcCIhPT1pLmxpbmsudHJhY2UubGluay5ob3ZlcmluZm8mJihpLmxpbmsuZnVsbERhdGE9aS5saW5rLnRyYWNlLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5saW5rXX0pKSxhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIpe3ZhciBpPXIubGluaztpLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W2ldLGEuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fSxub2RlRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwobSxyLGkpLCJza2lwIiE9PXIubm9kZS50cmFjZS5ub2RlLmhvdmVyaW5mbyYmKHIubm9kZS5mdWxsRGF0YT1yLm5vZGUudHJhY2UsdC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5ub2RlXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBvPWkubm9kZS50cmFjZS5ub2RlO2lmKCJub25lIiE9PW8uaG92ZXJpbmZvJiYic2tpcCIhPT1vLmhvdmVyaW5mbyl7dmFyIHM9bi5zZWxlY3QoZSkuc2VsZWN0KCIuIitsLm5vZGVSZWN0KSxjPXQuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9aC5sZWZ0LTItYy5sZWZ0LGc9aC5yaWdodCsyLWMubGVmdCxtPWgudG9wK2guaGVpZ2h0LzQtYy50b3Asdj17dmFsdWVMYWJlbDpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXh9O2kubm9kZS5mdWxsRGF0YT1pLm5vZGUudHJhY2U7dmFyIHk9YS5sb25lSG92ZXIoe3gwOmQseDE6Zyx5Om0sbmFtZTpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXgsdGV4dDpbaS5ub2RlLmxhYmVsLGsraS5ub2RlLnRhcmdldExpbmtzLmxlbmd0aCxNK2kubm9kZS5zb3VyY2VMaW5rcy5sZW5ndGhdLmZpbHRlcih1KS5qb2luKCI8YnI+IiksY29sb3I6YihvLCJiZ2NvbG9yIil8fGkudGlueUNvbG9ySHVlLGJvcmRlckNvbG9yOmIobywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmIobywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpiKG8sImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpiKG8sImZvbnQuY29sb3IiKSxuYW1lTGVuZ3RoOmIobywibmFtZWxlbmd0aCIpLHRleHRBbGlnbjpiKG8sImFsaWduIiksaWRlYWxBbGlnbjoibGVmdCIsaG92ZXJ0ZW1wbGF0ZTpvLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp2LGV2ZW50RGF0YTpbaS5ub2RlXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dH0pO2YoeSwuODUpLHAoeSl9fX0sdW5ob3ZlcjpmdW5jdGlvbihlLGksbyl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwodixpLG8pLCJza2lwIiE9PWkubm9kZS50cmFjZS5ub2RlLmhvdmVyaW5mbyYmKGkubm9kZS5mdWxsRGF0YT1pLm5vZGUudHJhY2UsdC5lbWl0KCJwbG90bHlfdW5ob3ZlciIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltpLm5vZGVdfSkpLGEubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpKX0sc2VsZWN0OmZ1bmN0aW9uKGUscixpKXt2YXIgbz1yLm5vZGU7by5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsdC5faG92ZXJkYXRhPVtvXSxuLnNlbGVjdChlKS5jYWxsKHYscixpKSxhLmNsaWNrKHQse3RhcmdldDohMH0pfX19KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTUsIi4uLy4uL2xpYiI6NzUwLCIuL2NvbnN0YW50cyI6MTE1MSwiLi9yZW5kZXIiOjExNTUsZDM6MTY5fV0sMTE1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiZDMiKSxhPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiQHBsb3RseS9kMy1zYW5rZXkiKSxjPXQoIkBwbG90bHkvZDMtc2Fua2V5LWNpcmN1bGFyIiksdT10KCJkMy1mb3JjZSIpLGg9dCgiLi4vLi4vbGliIiksZj10KCIuLi8uLi9saWIvZ3VwIikscD1mLmtleUZ1bixkPWYucmVwZWF0LGc9Zi51bndyYXAsbT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlTnVtYmVyLHY9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiB5KHQsZSxyKXt2YXIgaSxvPWcoZSkscz1vLnRyYWNlLHU9cy5kb21haW4sZj0iaCI9PT1zLm9yaWVudGF0aW9uLHA9cy5ub2RlLnBhZCxkPXMubm9kZS50aGlja25lc3MsbT10LndpZHRoKih1LnhbMV0tdS54WzBdKSx2PXQuaGVpZ2h0Kih1LnlbMV0tdS55WzBdKSx5PW8uX25vZGVzLHg9by5fbGlua3MsYj1vLmNpcmN1bGFyOyhpPWI/Yy5zYW5rZXlDaXJjdWxhcigpLmNpcmN1bGFyTGlua0dhcCgwKTpsLnNhbmtleSgpKS5pdGVyYXRpb25zKG4uc2Fua2V5SXRlcmF0aW9ucykuc2l6ZShmP1ttLHZdOlt2LG1dKS5ub2RlV2lkdGgoZCkubm9kZVBhZGRpbmcocCkubm9kZUlkKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb2ludE51bWJlcn0pKS5ub2Rlcyh5KS5saW5rcyh4KTt2YXIgXyx3LFQsaz1pKCk7Zm9yKHZhciBNIGluIGkubm9kZVBhZGRpbmcoKTxwJiZoLndhcm4oIm5vZGUucGFkIHdhcyByZWR1Y2VkIHRvICIsaS5ub2RlUGFkZGluZygpLCIgdG8gZml0IHdpdGhpbiB0aGUgZmlndXJlLiIpLG8uX2dyb3VwTG9va3VwKXt2YXIgQSxTPXBhcnNlSW50KG8uX2dyb3VwTG9va3VwW01dKTtmb3IoXz0wO188ay5ub2Rlcy5sZW5ndGg7XysrKWlmKGsubm9kZXNbX10ucG9pbnROdW1iZXI9PT1TKXtBPWsubm9kZXNbX107YnJlYWt9aWYoQSl7dmFyIEU9e3BvaW50TnVtYmVyOnBhcnNlSW50KE0pLHgwOkEueDAseDE6QS54MSx5MDpBLnkwLHkxOkEueTEscGFydE9mR3JvdXA6ITAsc291cmNlTGlua3M6W10sdGFyZ2V0TGlua3M6W119O2subm9kZXMudW5zaGlmdChFKSxBLmNoaWxkcmVuTm9kZXMudW5zaGlmdChFKX19aWYoZnVuY3Rpb24oKXtmb3IoXz0wO188ay5ub2Rlcy5sZW5ndGg7XysrKXt2YXIgdCxlLHI9ay5ub2Rlc1tfXSxuPXt9O2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspdD0oZT1yLnRhcmdldExpbmtzW3ddKS5zb3VyY2UucG9pbnROdW1iZXIrIjoiK2UudGFyZ2V0LnBvaW50TnVtYmVyLG4uaGFzT3duUHJvcGVydHkodCl8fChuW3RdPVtdKSxuW3RdLnB1c2goZSk7dmFyIGk9T2JqZWN0LmtleXMobik7Zm9yKHc9MDt3PGkubGVuZ3RoO3crKyl7dmFyIG89blt0PWlbd11dLHM9MCxsPXt9O2ZvcihUPTA7VDxvLmxlbmd0aDtUKyspbFsoZT1vW1RdKS5sYWJlbF18fChsW2UubGFiZWxdPTApLGxbZS5sYWJlbF0rPWUudmFsdWUscys9ZS52YWx1ZTtmb3IoVD0wO1Q8by5sZW5ndGg7VCsrKShlPW9bVF0pLmZsb3c9e3ZhbHVlOnMsbGFiZWxDb25jZW50cmF0aW9uOmxbZS5sYWJlbF0vcyxjb25jZW50cmF0aW9uOmUudmFsdWUvcyxsaW5rczpvfSxlLmNvbmNlbnRyYXRpb25zY2FsZSYmKGUuY29sb3I9YShlLmNvbmNlbnRyYXRpb25zY2FsZShlLmZsb3cubGFiZWxDb25jZW50cmF0aW9uKSkpfXZhciBjPTA7Zm9yKHc9MDt3PHIuc291cmNlTGlua3MubGVuZ3RoO3crKyljKz1yLnNvdXJjZUxpbmtzW3ddLnZhbHVlO2Zvcih3PTA7dzxyLnNvdXJjZUxpbmtzLmxlbmd0aDt3KyspKGU9ci5zb3VyY2VMaW5rc1t3XSkuY29uY2VudHJhdGlvbk91dD1lLnZhbHVlL2M7dmFyIHU9MDtmb3Iodz0wO3c8ci50YXJnZXRMaW5rcy5sZW5ndGg7dysrKXUrPXIudGFyZ2V0TGlua3Nbd10udmFsdWU7Zm9yKHc9MDt3PHIudGFyZ2V0TGlua3MubGVuZ3RoO3crKykoZT1yLnRhcmdldExpbmtzW3ddKS5jb25jZW5yYXRpb25Jbj1lLnZhbHVlL3V9fSgpLHMubm9kZS54Lmxlbmd0aCYmcy5ub2RlLnkubGVuZ3RoKXtmb3IoXz0wO188TWF0aC5taW4ocy5ub2RlLngubGVuZ3RoLHMubm9kZS55Lmxlbmd0aCxrLm5vZGVzLmxlbmd0aCk7XysrKWlmKHMubm9kZS54W19dJiZzLm5vZGUueVtfXSl7dmFyIEM9W3Mubm9kZS54W19dKm0scy5ub2RlLnlbX10qdl07ay5ub2Rlc1tfXS54MD1DWzBdLWQvMixrLm5vZGVzW19dLngxPUNbMF0rZC8yO3ZhciBMPWsubm9kZXNbX10ueTEtay5ub2Rlc1tfXS55MDtrLm5vZGVzW19dLnkwPUNbMV0tTC8yLGsubm9kZXNbX10ueTE9Q1sxXStMLzJ9aWYoInNuYXAiPT09cy5hcnJhbmdlbWVudCkhZnVuY3Rpb24odCl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZSxyLG4saT0wLGE9dC5sZW5ndGg7Zm9yKHQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55MC1lLnkwfSkpLG49MDtuPGE7KytuKShlPXRbbl0pLnkwPj1pfHwocj1pLWUueTApPjFlLTYmJihlLnkwKz1yLGUueTErPXIpLGk9ZS55MStwfSkpfShmdW5jdGlvbih0KXt2YXIgZSxyLG49dC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3gwOnQueDAsaW5kZXg6ZX19KSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54MC1lLngwfSkpLGk9W10sYT0tMSxvPS0xLzA7Zm9yKF89MDtfPG4ubGVuZ3RoO18rKyl7dmFyIHM9dFtuW19dLmluZGV4XTtzLngwPm8rZCYmKGErPTEsZT1zLngwKSxvPXMueDAsaVthXXx8KGlbYV09W10pLGlbYV0ucHVzaChzKSxyPWUtcy54MCxzLngwKz1yLHMueDErPXJ9cmV0dXJuIGl9KHk9ay5ub2RlcykpO2kudXBkYXRlKGspfXJldHVybntjaXJjdWxhcjpiLGtleTpyLHRyYWNlOnMsZ3VpZDpoLnJhbmRzdHIoKSxob3Jpem9udGFsOmYsd2lkdGg6bSxoZWlnaHQ6dixub2RlUGFkOnMubm9kZS5wYWQsbm9kZUxpbmVDb2xvcjpzLm5vZGUubGluZS5jb2xvcixub2RlTGluZVdpZHRoOnMubm9kZS5saW5lLndpZHRoLGxpbmtMaW5lQ29sb3I6cy5saW5rLmxpbmUuY29sb3IsbGlua0xpbmVXaWR0aDpzLmxpbmsubGluZS53aWR0aCx2YWx1ZUZvcm1hdDpzLnZhbHVlZm9ybWF0LHZhbHVlU3VmZml4OnMudmFsdWVzdWZmaXgsdGV4dEZvbnQ6cy50ZXh0Zm9udCx0cmFuc2xhdGVYOnUueFswXSp0LndpZHRoK3QubWFyZ2luLmwsdHJhbnNsYXRlWTp0LmhlaWdodC11LnlbMV0qdC5oZWlnaHQrdC5tYXJnaW4udCxkcmFnUGFyYWxsZWw6Zj92Om0sZHJhZ1BlcnBlbmRpY3VsYXI6Zj9tOnYsYXJyYW5nZW1lbnQ6cy5hcnJhbmdlbWVudCxzYW5rZXk6aSxncmFwaDprLGZvcmNlTGF5b3V0czp7fSxpbnRlcmFjdGlvblN0YXRlOntkcmFnSW5Qcm9ncmVzczohMSxob3ZlcmVkOiExfX19ZnVuY3Rpb24geCh0LGUscil7dmFyIG49YShlLmNvbG9yKSxpPWUuc291cmNlLmxhYmVsKyJ8IitlLnRhcmdldC5sYWJlbCsiX18iK3I7cmV0dXJuIGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2NpcmN1bGFyOnQuY2lyY3VsYXIsa2V5OmksdHJhY2VJZDp0LmtleSxwb2ludE51bWJlcjplLnBvaW50TnVtYmVyLGxpbms6ZSx0aW55Q29sb3JIdWU6by50aW55UkdCKG4pLHRpbnlDb2xvckFscGhhOm4uZ2V0QWxwaGEoKSxsaW5rUGF0aDpiLGxpbmtMaW5lQ29sb3I6dC5saW5rTGluZUNvbG9yLGxpbmtMaW5lV2lkdGg6dC5saW5rTGluZVdpZHRoLHZhbHVlRm9ybWF0OnQudmFsdWVGb3JtYXQsdmFsdWVTdWZmaXg6dC52YWx1ZVN1ZmZpeCxzYW5rZXk6dC5zYW5rZXkscGFyZW50OnQsaW50ZXJhY3Rpb25TdGF0ZTp0LmludGVyYWN0aW9uU3RhdGUsZmxvdzplLmZsb3d9fWZ1bmN0aW9uIGIoKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC5saW5rLmNpcmN1bGFyKXJldHVybiBlPXQubGluayxyPWUud2lkdGgvMixuPWUuY2lyY3VsYXJQYXRoRGF0YSwidG9wIj09PWUuY2lyY3VsYXJMaW5rVHlwZT8iTSAiK24udGFyZ2V0WCsiICIrKG4udGFyZ2V0WStyKSsiIEwiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udGFyZ2V0WStyKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ucmlnaHRTbWFsbEFyY1JhZGl1cytyKSsiIDAgMCAxICIrKG4ucmlnaHRGdWxsRXh0ZW50LXIpKyIgIisobi50YXJnZXRZLW4ucmlnaHRTbWFsbEFyY1JhZGl1cykrIkwiKyhuLnJpZ2h0RnVsbEV4dGVudC1yKSsiICIrbi52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrcikrIiAwIDAgMSAiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50LXIpKyJMIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50LXIpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiIDAgMCAxICIrKG4ubGVmdEZ1bGxFeHRlbnQrcikrIiAiK24udmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIkwiKyhuLmxlZnRGdWxsRXh0ZW50K3IpKyIgIisobi5zb3VyY2VZLW4ubGVmdFNtYWxsQXJjUmFkaXVzKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5sZWZ0U21hbGxBcmNSYWRpdXMrcikrIiAwIDAgMSAiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi5zb3VyY2VZK3IpKyJMIituLnNvdXJjZVgrIiAiKyhuLnNvdXJjZVkrcikrIkwiK24uc291cmNlWCsiICIrKG4uc291cmNlWS1yKSsiTCIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnNvdXJjZVktcikrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ubGVmdFNtYWxsQXJjUmFkaXVzLXIpKyIgMCAwIDAgIisobi5sZWZ0RnVsbEV4dGVudC1yKSsiICIrKG4uc291cmNlWS1uLmxlZnRTbWFsbEFyY1JhZGl1cykrIkwiKyhuLmxlZnRGdWxsRXh0ZW50LXIpKyIgIituLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cy1yKSsiIDAgMCAwICIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudCtyKSsiTCIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQrcikrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtcikrIiAwIDAgMCAiKyhuLnJpZ2h0RnVsbEV4dGVudCtyKSsiICIrbi52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIkwiKyhuLnJpZ2h0RnVsbEV4dGVudCtyKSsiICIrKG4udGFyZ2V0WS1uLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5yaWdodFNtYWxsQXJjUmFkaXVzLXIpKyIgMCAwIDAgIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnRhcmdldFktcikrIkwiK24udGFyZ2V0WCsiICIrKG4udGFyZ2V0WS1yKSsiWiI6Ik0gIituLnRhcmdldFgrIiAiKyhuLnRhcmdldFktcikrIiBMIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnRhcmdldFktcikrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLnJpZ2h0U21hbGxBcmNSYWRpdXMrcikrIiAwIDAgMCAiKyhuLnJpZ2h0RnVsbEV4dGVudC1yKSsiICIrKG4udGFyZ2V0WStuLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyJMIisobi5yaWdodEZ1bGxFeHRlbnQtcikrIiAiK24udmVydGljYWxSaWdodElubmVyRXh0ZW50KyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgMCAwIDAgIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudCtyKSsiTCIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudCtyKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAwIDAgMCAiKyhuLmxlZnRGdWxsRXh0ZW50K3IpKyIgIituLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyJMIisobi5sZWZ0RnVsbEV4dGVudCtyKSsiICIrKG4uc291cmNlWStuLmxlZnRTbWFsbEFyY1JhZGl1cykrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ubGVmdFNtYWxsQXJjUmFkaXVzK3IpKyIgMCAwIDAgIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4uc291cmNlWS1yKSsiTCIrbi5zb3VyY2VYKyIgIisobi5zb3VyY2VZLXIpKyJMIituLnNvdXJjZVgrIiAiKyhuLnNvdXJjZVkrcikrIkwiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi5zb3VyY2VZK3IpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLmxlZnRTbWFsbEFyY1JhZGl1cy1yKSsiIDAgMCAxICIrKG4ubGVmdEZ1bGxFeHRlbnQtcikrIiAiKyhuLnNvdXJjZVkrbi5sZWZ0U21hbGxBcmNSYWRpdXMpKyJMIisobi5sZWZ0RnVsbEV4dGVudC1yKSsiICIrbi52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMtcikrIiAwIDAgMSAiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQtcikrIkwiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50LXIpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5yaWdodExhcmdlQXJjUmFkaXVzLXIpKyIgMCAwIDEgIisobi5yaWdodEZ1bGxFeHRlbnQrcikrIiAiK24udmVydGljYWxSaWdodElubmVyRXh0ZW50KyJMIisobi5yaWdodEZ1bGxFeHRlbnQrcikrIiAiKyhuLnRhcmdldFkrbi5yaWdodFNtYWxsQXJjUmFkaXVzKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ucmlnaHRTbWFsbEFyY1JhZGl1cy1yKSsiIDAgMCAxICIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi50YXJnZXRZK3IpKyJMIituLnRhcmdldFgrIiAiKyhuLnRhcmdldFkrcikrIloiO3ZhciBlLHIsbixpPXQubGluay5zb3VyY2UueDEsYT10LmxpbmsudGFyZ2V0LngwLG89bShpLGEpLHM9byguNSksbD1vKC41KSxjPXQubGluay55MC10Lmxpbmsud2lkdGgvMix1PXQubGluay55MCt0Lmxpbmsud2lkdGgvMixoPXQubGluay55MS10Lmxpbmsud2lkdGgvMixmPXQubGluay55MSt0Lmxpbmsud2lkdGgvMjtyZXR1cm4iTSIraSsiLCIrYysiQyIrcysiLCIrYysiICIrbCsiLCIraCsiICIrYSsiLCIraCsiTCIrYSsiLCIrZisiQyIrbCsiLCIrZisiICIrcysiLCIrdSsiICIraSsiLCIrdSsiWiJ9fWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1hKGUuY29sb3IpLGk9bi5ub2RlUGFkQWNyb3NzLHM9dC5ub2RlUGFkLzI7ZS5keD1lLngxLWUueDAsZS5keT1lLnkxLWUueTA7dmFyIGw9ZS5keCxjPU1hdGgubWF4KC41LGUuZHkpLHU9Im5vZGVfIitlLnBvaW50TnVtYmVyO3JldHVybiBlLmdyb3VwJiYodT1oLnJhbmRzdHIoKSksZS50cmFjZT10LnRyYWNlLGUuY3VydmVOdW1iZXI9dC50cmFjZS5pbmRleCx7aW5kZXg6ZS5wb2ludE51bWJlcixrZXk6dSxwYXJ0T2ZHcm91cDplLnBhcnRPZkdyb3VwfHwhMSxncm91cDplLmdyb3VwLHRyYWNlSWQ6dC5rZXksdHJhY2U6dC50cmFjZSxub2RlOmUsbm9kZVBhZDp0Lm5vZGVQYWQsbm9kZUxpbmVDb2xvcjp0Lm5vZGVMaW5lQ29sb3Isbm9kZUxpbmVXaWR0aDp0Lm5vZGVMaW5lV2lkdGgsdGV4dEZvbnQ6dC50ZXh0Rm9udCxzaXplOnQuaG9yaXpvbnRhbD90LmhlaWdodDp0LndpZHRoLHZpc2libGVXaWR0aDpNYXRoLmNlaWwobCksdmlzaWJsZUhlaWdodDpjLHpvbmVYOi1pLHpvbmVZOi1zLHpvbmVXaWR0aDpsKzIqaSx6b25lSGVpZ2h0OmMrMipzLGxhYmVsWTp0Lmhvcml6b250YWw/ZS5keS8yKzE6ZS5keC8yKzEsbGVmdDoxPT09ZS5vcmlnaW5hbExheWVyLHNpemVBY3Jvc3M6dC53aWR0aCxmb3JjZUxheW91dHM6dC5mb3JjZUxheW91dHMsaG9yaXpvbnRhbDp0Lmhvcml6b250YWwsZGFya0JhY2tncm91bmQ6ci5nZXRCcmlnaHRuZXNzKCk8PTEyOCx0aW55Q29sb3JIdWU6by50aW55UkdCKHIpLHRpbnlDb2xvckFscGhhOnIuZ2V0QWxwaGEoKSx2YWx1ZUZvcm1hdDp0LnZhbHVlRm9ybWF0LHZhbHVlU3VmZml4OnQudmFsdWVTdWZmaXgsc2Fua2V5OnQuc2Fua2V5LGdyYXBoOnQuZ3JhcGgsYXJyYW5nZW1lbnQ6dC5hcnJhbmdlbWVudCx1bmlxdWVOb2RlTGFiZWxQYXRoSWQ6W3QuZ3VpZCx0LmtleSx1XS5qb2luKCJfIiksaW50ZXJhY3Rpb25TdGF0ZTp0LmludGVyYWN0aW9uU3RhdGUsZmlndXJlOnR9fWZ1bmN0aW9uIHcodCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5ub2RlLngwLnRvRml4ZWQoMykrIiwgIit0Lm5vZGUueTAudG9GaXhlZCgzKSsiKSJ9KSl9ZnVuY3Rpb24gVCh0KXt0LmNhbGwodyl9ZnVuY3Rpb24gayh0LGUpe3QuY2FsbChUKSxlLmF0dHIoImQiLGIoKSl9ZnVuY3Rpb24gTSh0KXt0LmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZS54MS10Lm5vZGUueDB9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZUhlaWdodH0pKX1mdW5jdGlvbiBBKHQpe3JldHVybiB0Lmxpbmsud2lkdGg+MXx8dC5saW5rTGluZVdpZHRoPjB9ZnVuY3Rpb24gUyh0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC50cmFuc2xhdGVYKyIsIit0LnRyYW5zbGF0ZVkrIikiKyh0Lmhvcml6b250YWw/Im1hdHJpeCgxIDAgMCAxIDAgMCkiOiJtYXRyaXgoMCAxIDEgMCAwIDApIil9ZnVuY3Rpb24gRSh0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQuaG9yaXpvbnRhbD8wOnQubGFiZWxZKSsiICIrKHQuaG9yaXpvbnRhbD90LmxhYmVsWTowKSsiKSJ9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gaS5zdmcubGluZSgpKFtbdC5ob3Jpem9udGFsP3QubGVmdD8tdC5zaXplQWNyb3NzOnQudmlzaWJsZVdpZHRoK24ubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOm4ubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsLDBdLFt0Lmhvcml6b250YWw/dC5sZWZ0Py1uLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDp0LnNpemVBY3Jvc3M6dC52aXNpYmxlSGVpZ2h0LW4ubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsLDBdXSl9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdC5ob3Jpem9udGFsPyJtYXRyaXgoMSAwIDAgMSAwIDApIjoibWF0cml4KDAgMSAxIDAgMCAwKSJ9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gdC5ob3Jpem9udGFsPyJzY2FsZSgxIDEpIjoic2NhbGUoLTEgMSkifWZ1bmN0aW9uIEkodCl7cmV0dXJuIHQuZGFya0JhY2tncm91bmQmJiF0Lmhvcml6b250YWw/InJnYigyNTUsMjU1LDI1NSkiOiJyZ2IoMCwwLDApIn1mdW5jdGlvbiB6KHQpe3JldHVybiB0Lmhvcml6b250YWwmJnQubGVmdD8iMTAwJSI6IjAlIn1mdW5jdGlvbiBPKHQsZSxyKXt0Lm9uKCIuYmFzaWMiLG51bGwpLm9uKCJtb3VzZW92ZXIuYmFzaWMiLChmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KSkub24oIm1vdXNlbW92ZS5iYXNpYyIsKGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8KHIuZm9sbG93KHRoaXMsdCksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9W3RoaXMsdF0pfSkpLm9uKCJtb3VzZW91dC5iYXNpYyIsKGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8KHIudW5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpfSkpLm9uKCJjbGljay5iYXNpYyIsKGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksdC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHxyLnNlbGVjdCh0aGlzLHQsZSl9KSl9ZnVuY3Rpb24gRCh0LGUscixhKXt2YXIgbz1pLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybnt4OnQubm9kZS54MCt0LnZpc2libGVXaWR0aC8yLHk6dC5ub2RlLnkwK3QudmlzaWJsZUhlaWdodC8yfX0pKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oaSl7aWYoImZpeGVkIiE9PWkuYXJyYW5nZW1lbnQmJihoLmVuc3VyZVNpbmdsZShhLl9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIsImciLCJkcmFnY292ZXIiLChmdW5jdGlvbih0KXthLl9mdWxsTGF5b3V0Ll9kcmFnQ292ZXI9dH0pKSxoLnJhaXNlVG9Ub3AodGhpcyksaS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPWkubm9kZSxGKGkubm9kZSksaS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLm5vZGVFdmVudHMudW5ob3Zlci5hcHBseSgwLGkuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkKSxpLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksInNuYXAiPT09aS5hcnJhbmdlbWVudCkpe3ZhciBvPWkudHJhY2VJZCsifCIraS5rZXk7aS5mb3JjZUxheW91dHNbb10/aS5mb3JjZUxheW91dHNbb10uYWxwaGEoMSk6ZnVuY3Rpb24odCxlLHIsaSl7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueT0odFtlXS55MCt0W2VdLnkxKS8yLHRbZV0ueD0odFtlXS54MCt0W2VdLngxKS8yfShyLmdyYXBoLm5vZGVzKTt2YXIgYT1yLmdyYXBoLm5vZGVzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQub3JpZ2luYWxYPT09ci5ub2RlLm9yaWdpbmFsWH0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LnBhcnRPZkdyb3VwfSkpO3IuZm9yY2VMYXlvdXRzW2VdPXUuZm9yY2VTaW11bGF0aW9uKGEpLmFscGhhRGVjYXkoMCkuZm9yY2UoImNvbGxpZGUiLHUuZm9yY2VDb2xsaWRlKCkucmFkaXVzKChmdW5jdGlvbih0KXtyZXR1cm4gdC5keS8yK3Iubm9kZVBhZC8yfSkpLnN0cmVuZ3RoKDEpLml0ZXJhdGlvbnMobi5mb3JjZUl0ZXJhdGlvbnMpKS5mb3JjZSgiY29uc3RyYWluIixmdW5jdGlvbih0LGUscixpKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV07bz09PWkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz8oby54PW8ubGFzdERyYWdnZWRYLG8ueT1vLmxhc3REcmFnZ2VkWSk6KG8udng9KG8ub3JpZ2luYWxYLW8ueCkvbi5mb3JjZVRpY2tzUGVyRnJhbWUsby55PU1hdGgubWluKGkuc2l6ZS1vLmR5LzIsTWF0aC5tYXgoby5keS8yLG8ueSkpKSx0PU1hdGgubWF4KHQsTWF0aC5hYnMoby52eCksTWF0aC5hYnMoby52eSkpfSFpLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3MmJnQ8LjEmJmkuZm9yY2VMYXlvdXRzW2VdLmFscGhhKCk+MCYmaS5mb3JjZUxheW91dHNbZV0uYWxwaGEoMCl9fSgwLGUsYSxyKSkuc3RvcCgpfSgwLG8saSksZnVuY3Rpb24odCxlLHIsaSxhKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbiBvKCl7dmFyIHM7Zm9yKHM9MDtzPG4uZm9yY2VUaWNrc1BlckZyYW1lO3MrKylyLmZvcmNlTGF5b3V0c1tpXS50aWNrKCk7aWYoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55MD10W2VdLnktdFtlXS5keS8yLHRbZV0ueTE9dFtlXS55MCt0W2VdLmR5LHRbZV0ueDA9dFtlXS54LXRbZV0uZHgvMix0W2VdLngxPXRbZV0ueDArdFtlXS5keH0oci5ncmFwaC5ub2Rlcyksci5zYW5rZXkudXBkYXRlKHIuZ3JhcGgpLGsodC5maWx0ZXIoQihyKSksZSksci5mb3JjZUxheW91dHNbaV0uYWxwaGEoKT4wKXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobyk7ZWxzZXt2YXIgbD1yLm5vZGUub3JpZ2luYWxYO3Iubm9kZS54MD1sLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPWwrci52aXNpYmxlV2lkdGgvMixSKHIsYSl9fSkpfSh0LGUsaSxvLGEpfX0pKS5vbigiZHJhZyIsKGZ1bmN0aW9uKHIpe2lmKCJmaXhlZCIhPT1yLmFycmFuZ2VtZW50KXt2YXIgbj1pLmV2ZW50LngsYT1pLmV2ZW50Lnk7InNuYXAiPT09ci5hcnJhbmdlbWVudD8oci5ub2RlLngwPW4tci52aXNpYmxlV2lkdGgvMixyLm5vZGUueDE9bityLnZpc2libGVXaWR0aC8yLHIubm9kZS55MD1hLXIudmlzaWJsZUhlaWdodC8yLHIubm9kZS55MT1hK3IudmlzaWJsZUhlaWdodC8yKTooImZyZWVmb3JtIj09PXIuYXJyYW5nZW1lbnQmJihyLm5vZGUueDA9bi1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1uK3IudmlzaWJsZVdpZHRoLzIpLGE9TWF0aC5tYXgoMCxNYXRoLm1pbihyLnNpemUtci52aXNpYmxlSGVpZ2h0LzIsYSkpLHIubm9kZS55MD1hLXIudmlzaWJsZUhlaWdodC8yLHIubm9kZS55MT1hK3IudmlzaWJsZUhlaWdodC8yKSxGKHIubm9kZSksInNuYXAiIT09ci5hcnJhbmdlbWVudCYmKHIuc2Fua2V5LnVwZGF0ZShyLmdyYXBoKSxrKHQuZmlsdGVyKEIocikpLGUpKX19KSkub24oImRyYWdlbmQiLChmdW5jdGlvbih0KXtpZigiZml4ZWQiIT09dC5hcnJhbmdlbWVudCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPSExO2Zvcih2YXIgZT0wO2U8dC5ub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoO2UrKyl0Lm5vZGUuY2hpbGRyZW5Ob2Rlc1tlXS54PXQubm9kZS54LHQubm9kZS5jaGlsZHJlbk5vZGVzW2VdLnk9dC5ub2RlLnk7InNuYXAiIT09dC5hcnJhbmdlbWVudCYmUih0LGEpfX0pKTt0Lm9uKCIuZHJhZyIsbnVsbCkuY2FsbChvKX1mdW5jdGlvbiBSKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT0wO2k8dC5ncmFwaC5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgYT0odC5ncmFwaC5ub2Rlc1tpXS54MCt0LmdyYXBoLm5vZGVzW2ldLngxKS8yLG89KHQuZ3JhcGgubm9kZXNbaV0ueTArdC5ncmFwaC5ub2Rlc1tpXS55MSkvMjtyLnB1c2goYS90LmZpZ3VyZS53aWR0aCksbi5wdXNoKG8vdC5maWd1cmUuaGVpZ2h0KX12LmNhbGwoIl9ndWlSZXN0eWxlIixlLHsibm9kZS54Ijpbcl0sIm5vZGUueSI6W25dfSx0LnRyYWNlLmluZGV4KS50aGVuKChmdW5jdGlvbigpe2UuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlciYmZS5fZnVsbExheW91dC5fZHJhZ0NvdmVyLnJlbW92ZSgpfSkpfWZ1bmN0aW9uIEYodCl7dC5sYXN0RHJhZ2dlZFg9dC54MCt0LmR4LzIsdC5sYXN0RHJhZ2dlZFk9dC55MCt0LmR5LzJ9ZnVuY3Rpb24gQih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZS5vcmlnaW5hbFg9PT10Lm5vZGUub3JpZ2luYWxYfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCxjKXt2YXIgdT0hMTtoLmVuc3VyZVNpbmdsZSh0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIsImciLCJmaXJzdC1yZW5kZXIiLChmdW5jdGlvbigpe3U9ITB9KSk7dmFyIGY9dC5fZnVsbExheW91dC5fZHJhZ0NvdmVyLG09ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBnKHQpLnRyYWNlLnZpc2libGV9KSkubWFwKHkuYmluZChudWxsLGwpKSx2PWUuc2VsZWN0QWxsKCIuIituLmNuLnNhbmtleSkuZGF0YShtLHApO3YuZXhpdCgpLnJlbW92ZSgpLHYuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Fua2V5LCEwKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94Iikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgibGVmdCIsMCkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImdlb21ldHJpY1ByZWNpc2lvbiIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKS5hdHRyKCJ0cmFuc2Zvcm0iLFMpLHYuZWFjaCgoZnVuY3Rpb24oZSxyKXt0Ll9mdWxsRGF0YVtyXS5fc2Fua2V5PWU7dmFyIG49ImJnc2Fua2V5LSIrZS50cmFjZS51aWQrIi0iK3I7aC5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5fZHJhZ2dlcnMsInJlY3QiLG4pLHQuX2Z1bGxEYXRhW3JdLl9iZ1JlY3Q9aS5zZWxlY3QoIi4iK24pLHQuX2Z1bGxEYXRhW3JdLl9iZ1JlY3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigid2lkdGgiLGUud2lkdGgpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLmF0dHIoIngiLGUudHJhbnNsYXRlWCkuYXR0cigieSIsZS50cmFuc2xhdGVZKS5jbGFzc2VkKCJiZ3NhbmtleSIsITApLnN0eWxlKHtmaWxsOiJ0cmFuc3BhcmVudCIsInN0cm9rZS13aWR0aCI6MH0pfSkpLHYudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLFMpO3ZhciBUPXYuc2VsZWN0QWxsKCIuIituLmNuLnNhbmtleUxpbmtzKS5kYXRhKGQscCk7VC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zYW5rZXlMaW5rcywhMCkuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIGs9VC5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5TGluaykuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ3JhcGgubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKS5tYXAoeC5iaW5kKG51bGwsdCkpfSkscCk7ay5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobi5jbi5zYW5rZXlMaW5rLCEwKS5jYWxsKE8sdixjLmxpbmtFdmVudHMpLGsuc3R5bGUoInN0cm9rZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBBKHQpP28udGlueVJHQihhKHQubGlua0xpbmVDb2xvcikpOnQudGlueUNvbG9ySHVlfSkpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiBBKHQpP28ub3BhY2l0eSh0LmxpbmtMaW5lQ29sb3IpOnQudGlueUNvbG9yQWxwaGF9KSkuc3R5bGUoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSkpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gQSh0KT90LmxpbmtMaW5lV2lkdGg6MX0pKS5hdHRyKCJkIixiKCkpLGsuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fHV8fGY/MTowfSkpLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuc3R5bGUoIm9wYWNpdHkiLDEpLGsuZXhpdCgpLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpO3ZhciBSPXYuc2VsZWN0QWxsKCIuIituLmNuLnNhbmtleU5vZGVTZXQpLmRhdGEoZCxwKTtSLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNhbmtleU5vZGVTZXQsITApLFIuc3R5bGUoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmFycmFuZ2VtZW50KXtjYXNlImZpeGVkIjpyZXR1cm4iZGVmYXVsdCI7Y2FzZSJwZXJwZW5kaWN1bGFyIjpyZXR1cm4ibnMtcmVzaXplIjtkZWZhdWx0OnJldHVybiJtb3ZlIn19KSk7dmFyIEY9Ui5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5Tm9kZSkuZGF0YSgoZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaC5ub2RlcztyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ub3JpZ2luYWxYPSh0W2VdLngwK3RbZV0ueDEpLzIsdFtlXS5vcmlnaW5hbFk9KHRbZV0ueTArdFtlXS55MSkvMiwtMT09PXIuaW5kZXhPZih0W2VdLm9yaWdpbmFsWCkmJnIucHVzaCh0W2VdLm9yaWdpbmFsWCk7Zm9yKHIuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpLGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsTGF5ZXJJbmRleD1yLmluZGV4T2YodFtlXS5vcmlnaW5hbFgpLHRbZV0ub3JpZ2luYWxMYXllcj10W2VdLm9yaWdpbmFsTGF5ZXJJbmRleC8oci5sZW5ndGgtMSl9KGUpLGUubWFwKF8uYmluZChudWxsLHQpKX0pLHApO0YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Fua2V5Tm9kZSwhMCkuY2FsbCh3KS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKGUpe3JldHVybiF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QmJiF1fHxlLnBhcnRPZkdyb3VwPzA6MX0pKSxGLmNhbGwoTyx2LGMubm9kZUV2ZW50cykuY2FsbChELGssYyx0KSxGLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuY2FsbCh3KS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcnRPZkdyb3VwPzA6MX0pKSxGLmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKTt2YXIgQj1GLnNlbGVjdEFsbCgiLiIrbi5jbi5ub2RlUmVjdCkuZGF0YShkKTtCLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLm5vZGVSZWN0LCEwKS5jYWxsKE0pLEIuc3R5bGUoInN0cm9rZS13aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVMaW5lV2lkdGh9KSkuc3R5bGUoInN0cm9rZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvLnRpbnlSR0IoYSh0Lm5vZGVMaW5lQ29sb3IpKX0pKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gby5vcGFjaXR5KHQubm9kZUxpbmVDb2xvcil9KSkuc3R5bGUoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSkpLEIudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5jYWxsKE0pO3ZhciBOPUYuc2VsZWN0QWxsKCIuIituLmNuLm5vZGVDYXB0dXJlKS5kYXRhKGQpO04uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24ubm9kZUNhcHR1cmUsITApLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLE4uYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVYfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lWX0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVXaWR0aH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lSGVpZ2h0fSkpO3ZhciBqPUYuc2VsZWN0QWxsKCIuIituLmNuLm5vZGVDZW50ZXJlZCkuZGF0YShkKTtqLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLm5vZGVDZW50ZXJlZCwhMCkuYXR0cigidHJhbnNmb3JtIixFKSxqLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIixFKTt2YXIgVT1qLnNlbGVjdEFsbCgiLiIrbi5jbi5ub2RlTGFiZWxHdWlkZSkuZGF0YShkKTtVLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLmNuLm5vZGVMYWJlbEd1aWRlLCEwKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pKS5hdHRyKCJkIixDKS5hdHRyKCJ0cmFuc2Zvcm0iLEwpLFUudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKCJkIixDKS5hdHRyKCJ0cmFuc2Zvcm0iLEwpO3ZhciBWPWouc2VsZWN0QWxsKCIuIituLmNuLm5vZGVMYWJlbCkuZGF0YShkKTtWLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChuLmNuLm5vZGVMYWJlbCwhMCkuYXR0cigidHJhbnNmb3JtIixQKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKSxWLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWw/Ii0xcHggMXB4IDFweCAjZmZmLCAxcHggMXB4IDFweCAjZmZmLCAxcHggLTFweCAxcHggI2ZmZiwgLTFweCAtMXB4IDFweCAjZmZmIjoibm9uZSJ9KSkuZWFjaCgoZnVuY3Rpb24odCl7cy5mb250KFYsdC50ZXh0Rm9udCl9KSksVi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsUCk7dmFyIHE9Vi5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUxhYmVsVGV4dFBhdGgpLmRhdGEoZCk7cS5lbnRlcigpLmFwcGVuZCgidGV4dFBhdGgiKS5jbGFzc2VkKG4uY24ubm9kZUxhYmVsVGV4dFBhdGgsITApLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInhsaW5rOmhyZWYiLChmdW5jdGlvbih0KXtyZXR1cm4iIyIrdC51bmlxdWVOb2RlTGFiZWxQYXRoSWR9KSkuYXR0cigic3RhcnRPZmZzZXQiLHopLnN0eWxlKCJmaWxsIixJKSxxLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWx8fHQubm9kZS5keT41P3Qubm9kZS5sYWJlbDoiIn0pKS5hdHRyKCJ0ZXh0LWFuY2hvciIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWwmJnQubGVmdD8iZW5kIjoic3RhcnQifSkpLHEudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKCJzdGFydE9mZnNldCIseikuc3R5bGUoImZpbGwiLEkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL2d1cCI6NzQ3LCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2NvbnN0YW50cyI6MTE1MSwiQHBsb3RseS9kMy1zYW5rZXkiOjU2LCJAcGxvdGx5L2QzLXNhbmtleS1jaXJjdWxhciI6NTUsZDM6MTY5LCJkMy1mb3JjZSI6MTYwLCJkMy1pbnRlcnBvbGF0ZSI6MTYyLHRpbnljb2xvcjI6NTQ4fV0sMTE1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj10LmNkWzBdLnRyYWNlLGk9bi5fc2Fua2V5LmdyYXBoLm5vZGVzLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZighby5wYXJ0T2ZHcm91cCl7dmFyIHM9WyhvLngwK28ueDEpLzIsKG8ueTArby55MSkvMl07InYiPT09bi5vcmllbnRhdGlvbiYmcy5yZXZlcnNlKCksZSYmZS5jb250YWlucyhzLCExLGEsdCkmJnIucHVzaCh7cG9pbnROdW1iZXI6by5wb2ludE51bWJlcn0pfX1yZXR1cm4gcn19LHt9XSwxMTU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24ubWVyZ2VBcnJheShlLnRleHQsdCwidHgiKSxuLm1lcmdlQXJyYXkoZS50ZXh0dGVtcGxhdGUsdCwidHh0Iiksbi5tZXJnZUFycmF5KGUuaG92ZXJ0ZXh0LHQsImh0eCIpLG4ubWVyZ2VBcnJheShlLmN1c3RvbWRhdGEsdCwiZGF0YSIpLG4ubWVyZ2VBcnJheShlLnRleHRwb3NpdGlvbix0LCJ0cCIpLGUudGV4dGZvbnQmJihuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoZS50ZXh0Zm9udC5zaXplLHQsInRzIiksbi5tZXJnZUFycmF5KGUudGV4dGZvbnQuY29sb3IsdCwidGMiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5mYW1pbHksdCwidGYiKSk7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGkuc2l6ZSx0LCJtcyIpLG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShpLm9wYWNpdHksdCwibW8iKSxuLm1lcmdlQXJyYXkoaS5zeW1ib2wsdCwibXgiKSxuLm1lcmdlQXJyYXkoaS5jb2xvcix0LCJtYyIpO3ZhciBhPWkubGluZTtpLmxpbmUmJihuLm1lcmdlQXJyYXkoYS5jb2xvcix0LCJtbGMiKSxuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoYS53aWR0aCx0LCJtbHciKSk7dmFyIG89aS5ncmFkaWVudDtvJiYibm9uZSIhPT1vLnR5cGUmJihuLm1lcmdlQXJyYXkoby50eXBlLHQsIm1ndCIpLG4ubWVyZ2VBcnJheShvLmNvbG9yLHQsIm1nYyIpKX19fSx7Ii4uLy4uL2xpYiI6NzUwfV0sMTE1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0seDA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSxkeDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSx5MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0seHBlcmlvZDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx5cGVyaW9kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHhwZXJpb2QwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0seXBlcmlvZDA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx4cGVyaW9kYWxpZ25tZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsIm1pZGRsZSIsImVuZCJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImNhbGMifSx5cGVyaW9kYWxpZ25tZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsIm1pZGRsZSIsImVuZCJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImNhbGMifSxzdGFja2dyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxlZGl0VHlwZToiY2FsYyJ9LGdyb3Vwbm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwiZnJhY3Rpb24iLCJwZXJjZW50Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHN0YWNrZ2Fwczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5mZXIgemVybyIsImludGVycG9sYXRlIl0sZGZsdDoiaW5mZXIgemVybyIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHR0ZW1wbGF0ZTpuKHt9LHt9KSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyIsInRleHQiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6ImNhbGMifSxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJwb2ludHMiLCJmaWxscyJdLGVkaXRUeXBlOiJzdHlsZSJ9LGhvdmVydGVtcGxhdGU6aSh7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsInNwbGluZSIsImh2IiwidmgiLCJodmgiLCJ2aHYiXSxkZmx0OiJsaW5lYXIiLGVkaXRUeXBlOiJwbG90In0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLjMsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sZGFzaDp1KHt9LHMse2VkaXRUeXBlOiJzdHlsZSJ9KSxzaW1wbGlmeTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sY29ubmVjdGdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxjbGlwb25heGlzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZmlsbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsInRvemVyb3kiLCJ0b3plcm94IiwidG9uZXh0eSIsInRvbmV4dHgiLCJ0b3NlbGYiLCJ0b25leHQiXSxlZGl0VHlwZToiY2FsYyJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sbWFya2VyOnUoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmwuc3ltYm9sTGlzdCxkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjYsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1pbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGlhbWV0ZXIiLCJhcmVhIl0sZGZsdDoiZGlhbWV0ZXIiLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp1KHt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sZWRpdFR5cGU6ImNhbGMifSxhKCJtYXJrZXIubGluZSIse2FuaW06ITB9KSksZ3JhZGllbnQ6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhZGlhbCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIm5vbmUiXSxhcnJheU9rOiEwLGRmbHQ6Im5vbmUiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGEoIm1hcmtlciIse2FuaW06ITB9KSksc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBsZWZ0IiwibWlkZGxlIGNlbnRlciIsIm1pZGRsZSByaWdodCIsImJvdHRvbSBsZWZ0IiwiYm90dG9tIGNlbnRlciIsImJvdHRvbSByaWdodCJdLGRmbHQ6Im1pZGRsZSBjZW50ZXIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Zm9udDpvKHtlZGl0VHlwZToiY2FsYyIsY29sb3JFZGl0VHlwZToic3R5bGUiLGFycmF5T2s6ITB9KSxyOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjM2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODI3LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NzcsIi4vY29uc3RhbnRzIjoxMTYyfV0sMTE1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxsPXQoIi4vc3VidHlwZXMiKSxjPXQoIi4vY29sb3JzY2FsZV9jYWxjIiksdT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLGg9dCgiLi9jYWxjX3NlbGVjdGlvbiIpO2Z1bmN0aW9uIGYodCxlLHIsbixpLG8scyl7dmFyIGM9ZS5fbGVuZ3RoLHU9dC5fZnVsbExheW91dCxoPXIuX2lkLGY9bi5faWQscD11Ll9maXJzdFNjYXR0ZXJbZyhlKV09PT1lLnVpZCxkPShtKGUsdSxyLG4pfHx7fSkub3JpZW50YXRpb24sdj1lLmZpbGw7ci5fbWluRHRpY2s9MCxuLl9taW5EdGljaz0wO3ZhciB5PXtwYWRkZWQ6ITB9LHg9e3BhZGRlZDohMH07cyYmKHkucHBhZD14LnBwYWQ9cyk7dmFyIGI9YzwyfHxpWzBdIT09aVtjLTFdfHxvWzBdIT09b1tjLTFdO2ImJigidG96ZXJveCI9PT12fHwidG9uZXh0eCI9PT12JiYocHx8ImgiPT09ZCkpP3kudG96ZXJvPSEwOihlLmVycm9yX3l8fHt9KS52aXNpYmxlfHwidG9uZXh0eSIhPT12JiYidG96ZXJveSIhPT12JiYobC5oYXNNYXJrZXJzKGUpfHxsLmhhc1RleHQoZSkpfHwoeS5wYWRkZWQ9ITEseS5wcGFkPTApLGImJigidG96ZXJveSI9PT12fHwidG9uZXh0eSI9PT12JiYocHx8InYiPT09ZCkpP3gudG96ZXJvPSEwOiJ0b25leHR4IiE9PXYmJiJ0b3plcm94IiE9PXZ8fCh4LnBhZGRlZD0hMSksaCYmKGUuX2V4dHJlbWVzW2hdPWEuZmluZEV4dHJlbWVzKHIsaSx5KSksZiYmKGUuX2V4dHJlbWVzW2ZdPWEuZmluZEV4dHJlbWVzKG4sbyx4KSl9ZnVuY3Rpb24gcCh0LGUpe2lmKGwuaGFzTWFya2Vycyh0KSl7dmFyIHIsbj10Lm1hcmtlcixvPTEuNioodC5tYXJrZXIuc2l6ZXJlZnx8MSk7aWYocj0iYXJlYSI9PT10Lm1hcmtlci5zaXplbW9kZT9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KCh0fHwwKS9vKSwzKX06ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KCh0fHwwKS9vLDMpfSxpLmlzQXJyYXlPclR5cGVkQXJyYXkobi5zaXplKSl7dmFyIHM9e3R5cGU6ImxpbmVhciJ9O2Euc2V0Q29udmVydChzKTtmb3IodmFyIGM9cy5tYWtlQ2FsY2RhdGEodC5tYXJrZXIsInNpemUiKSx1PW5ldyBBcnJheShlKSxoPTA7aDxlO2grKyl1W2hdPXIoY1toXSk7cmV0dXJuIHV9cmV0dXJuIHIobi5zaXplKX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPWcoZSksbj10Ll9maXJzdFNjYXR0ZXI7bltyXXx8KG5bcl09ZS51aWQpfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5zdGFja2dyb3VwO3JldHVybiB0LnhheGlzK3QueWF4aXMrdC50eXBlKyhlPyItIitlOiIiKX1mdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBpPXQuc3RhY2tncm91cDtpZihpKXt2YXIgYT1lLl9zY2F0dGVyU3RhY2tPcHRzW3IuX2lkK24uX2lkXVtpXSxvPSJ2Ij09PWEub3JpZW50YXRpb24/bjpyO3JldHVybiJsaW5lYXIiPT09by50eXBlfHwibG9nIj09PW8udHlwZT9hOnZvaWQgMH19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxnLHYseSx4LGI9dC5fZnVsbExheW91dCxfPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSx3PWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxUPV8ubWFrZUNhbGNkYXRhKGUsIngiKSxrPXcubWFrZUNhbGNkYXRhKGUsInkiKSxNPW8oZSxfLCJ4IixUKSxBPW8oZSx3LCJ5IixrKSxTPWUuX2xlbmd0aCxFPW5ldyBBcnJheShTKSxDPWUuaWRzLEw9bShlLGIsXyx3KSxQPSExO2QoYixlKTt2YXIgSSx6PSJ4IixPPSJ5IjtMPyhpLnB1c2hVbmlxdWUoTC50cmFjZUluZGljZXMsZS5fZXhwYW5kZWRJbmRleCksKHI9InYiPT09TC5vcmllbnRhdGlvbik/KE89InMiLEk9IngiKTooej0icyIsST0ieSIpLHk9ImludGVycG9sYXRlIj09PUwuc3RhY2tnYXBzKTpmKHQsZSxfLHcsTSxBLHAoZSxTKSk7dmFyIEQ9ISFlLnhwZXJpb2RhbGlnbm1lbnQsUj0hIWUueXBlcmlvZGFsaWdubWVudDtmb3IobD0wO2w8UztsKyspe3ZhciBGPUVbbF09e30sQj1uKE1bbF0pLE49bihBW2xdKTtCJiZOPyhGW3pdPU1bbF0sRltPXT1BW2xdLEQmJihGLm9yaWdfeD1UW2xdKSxSJiYoRi5vcmlnX3k9a1tsXSkpOkwmJihyP0I6Tik/KEZbSV09cj9NW2xdOkFbbF0sRi5nYXA9ITAseT8oRi5zPXMsUD0hMCk6Ri5zPTApOkZbel09RltPXT1zLEMmJihGLmlkPVN0cmluZyhDW2xdKSl9aWYodShFLGUpLGModCxlKSxoKEUsZSksTCl7Zm9yKGw9MDtsPEUubGVuZ3RoOylFW2xdW0ldPT09cz9FLnNwbGljZShsLDEpOmwrKztpZihpLnNvcnQoRSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtJXS1lW0ldfHx0LmktZS5pfSkpLFApe2ZvcihsPTA7bDxFLmxlbmd0aC0xJiZFW2xdLmdhcDspbCsrO2ZvcigoeD1FW2xdLnMpfHwoeD1FW2xdLnM9MCksZz0wO2c8bDtnKyspRVtnXS5zPXg7Zm9yKHY9RS5sZW5ndGgtMTt2PmwmJkVbdl0uZ2FwOyl2LS07Zm9yKHg9RVt2XS5zLGc9RS5sZW5ndGgtMTtnPnY7Zy0tKUVbZ10ucz14O2Zvcig7bDx2OylpZihFWysrbF0uZ2FwKXtmb3IoZz1sKzE7RVtnXS5nYXA7KWcrKztmb3IodmFyIGo9RVtsLTFdW0ldLFU9RVtsLTFdLnMsVj0oRVtnXS5zLVUpLyhFW2ddW0ldLWopO2w8ZzspRVtsXS5zPVUrKEVbbF1bSV0taikqVixsKyt9fX1yZXR1cm4gRX0sY2FsY01hcmtlclNpemU6cCxjYWxjQXhpc0V4cGFuc2lvbjpmLHNldEZpcnN0U2NhdHRlcjpkLGdldFN0YWNrT3B0czptfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo3OTYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTU3LCIuL2NhbGNfc2VsZWN0aW9uIjoxMTYwLCIuL2NvbG9yc2NhbGVfY2FsYyI6MTE2MSwiLi9zdWJ0eXBlcyI6MTE4MywiZmFzdC1pc251bWVyaWMiOjI0MX1dLDExNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7bi5pc0FycmF5T3JUeXBlZEFycmF5KGUuc2VsZWN0ZWRwb2ludHMpJiZuLnRhZ1NlbGVjdGVkKHQsZSl9fSx7Ii4uLy4uL2xpYiI6NzUwfV0sMTE2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGE9dCgiLi9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EuaGFzTGluZXMoZSkmJm4oZSwibGluZSIpJiZpKHQsZSx7dmFsczplLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJsaW5lIixjTGV0dGVyOiJjIn0pLGEuaGFzTWFya2VycyhlKSYmKG4oZSwibWFya2VyIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLG4oZSwibWFya2VyLmxpbmUiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlci5saW5lIixjTGV0dGVyOiJjIn0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYyMywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjYyNiwiLi9zdWJ0eXBlcyI6MTE4M31dLDExNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtQVFNfTElORVNPTkxZOjIwLG1pblRvbGVyYW5jZTouMix0b2xlcmFuY2VHcm93dGg6MTAsbWF4U2NyZWVuc0F3YXk6MjAsZXZlbnREYXRhS2V5czpbXX19LHt9XSwxMTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2FsYyIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEsbyl7aVtuXT0hMDt2YXIgcz17aTpudWxsLGdhcDohMCxzOjB9O2lmKHNbb109cix0LnNwbGljZShlLDAscyksZSYmcj09PXRbZS0xXVtvXSl7dmFyIGw9dFtlLTFdO3Mucz1sLnMscy5pPWwuaSxzLmdhcD1sLmdhcH1lbHNlIGEmJihzLnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFtlLTFdLGE9dFtlKzFdO3JldHVybiBhP2k/aS5zKyhhLnMtaS5zKSooci1pW25dKS8oYVtuXS1pW25dKTphLnM6aS5zfSh0LGUscixvKSk7ZXx8KHRbMF0udD10WzFdLnQsdFswXS50cmFjZT10WzFdLnRyYWNlLGRlbGV0ZSB0WzFdLnQsZGVsZXRlIHRbMV0udHJhY2UpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUueGF4aXMsYT1lLnlheGlzLG89ci5faWQrYS5faWQscz10Ll9mdWxsTGF5b3V0Ll9zY2F0dGVyU3RhY2tPcHRzW29dO2lmKHMpe3ZhciBsLGMsdSxoLGYscCxkLGcsbSx2LHkseCxiLF8sdyxUPXQuY2FsY2RhdGE7Zm9yKHZhciBrIGluIHMpe3ZhciBNPSh2PXNba10pLnRyYWNlSW5kaWNlcztpZihNLmxlbmd0aCl7Zm9yKHk9ImludGVycG9sYXRlIj09PXYuc3RhY2tnYXBzLHg9di5ncm91cG5vcm0sInYiPT09di5vcmllbnRhdGlvbj8oYj0ieCIsXz0ieSIpOihiPSJ5IixfPSJ4Iiksdz1uZXcgQXJyYXkoTS5sZW5ndGgpLGw9MDtsPHcubGVuZ3RoO2wrKyl3W2xdPSExO3A9VFtNWzBdXTt2YXIgQT1uZXcgQXJyYXkocC5sZW5ndGgpO2ZvcihsPTA7bDxwLmxlbmd0aDtsKyspQVtsXT1wW2xdW2JdO2ZvcihsPTE7bDxNLmxlbmd0aDtsKyspe2ZvcihmPVRbTVtsXV0sYz11PTA7YzxmLmxlbmd0aDtjKyspe2ZvcihkPWZbY11bYl07ZD5BW3VdJiZ1PEEubGVuZ3RoO3UrKylpKGYsYyxBW3VdLGwsdyx5LGIpLGMrKztpZihkIT09QVt1XSl7Zm9yKGg9MDtoPGw7aCsrKWkoVFtNW2hdXSx1LGQsaCx3LHksYik7QS5zcGxpY2UodSwwLGQpfXUrK31mb3IoO3U8QS5sZW5ndGg7dSsrKWkoZixjLEFbdV0sbCx3LHksYiksYysrfXZhciBTPUEubGVuZ3RoO2ZvcihjPTA7YzxwLmxlbmd0aDtjKyspe2ZvcihnPXBbY11bX109cFtjXS5zLGw9MTtsPE0ubGVuZ3RoO2wrKykoZj1UW01bbF1dKVswXS50cmFjZS5fcmF3TGVuZ3RoPWZbMF0udHJhY2UuX2xlbmd0aCxmWzBdLnRyYWNlLl9sZW5ndGg9UyxnKz1mW2NdLnMsZltjXVtfXT1nO2lmKHgpZm9yKG09KCJmcmFjdGlvbiI9PT14P2c6Zy8xMDApfHwxLGw9MDtsPE0ubGVuZ3RoO2wrKyl7dmFyIEU9VFtNW2xdXVtjXTtFW19dLz1tLEUuc05vcm09RS5zL219fWZvcihsPTA7bDxNLmxlbmd0aDtsKyspe3ZhciBDPShmPVRbTVtsXV0pWzBdLnRyYWNlLEw9bi5jYWxjTWFya2VyU2l6ZShDLEMuX3Jhd0xlbmd0aCksUD1BcnJheS5pc0FycmF5KEwpO2lmKEwmJndbbF18fFApe3ZhciBJPUw7Zm9yKEw9bmV3IEFycmF5KFMpLGM9MDtjPFM7YysrKUxbY109ZltjXS5nYXA/MDpQP0lbZltjXS5pXTpJfXZhciB6PW5ldyBBcnJheShTKSxPPW5ldyBBcnJheShTKTtmb3IoYz0wO2M8UztjKyspeltjXT1mW2NdLngsT1tjXT1mW2NdLnk7bi5jYWxjQXhpc0V4cGFuc2lvbih0LEMscixhLHosTyxMKSxmWzBdLnQub3JpZW50YXRpb249di5vcmllbnRhdGlvbn19fX19fSx7Ii4vY2FsYyI6MTE1OX1dLDExNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO2lmKCJzY2F0dGVyIj09PXIudHlwZSl7dmFyIG49ci5maWxsO2lmKCJub25lIiE9PW4mJiJ0b3NlbGYiIT09biYmKHIub3BhY2l0eT12b2lkIDAsInRvbmV4dHkiPT09bnx8InRvbmV4dHgiPT09bikpZm9yKHZhciBpPWUtMTtpPj0wO2ktLSl7dmFyIGE9dFtpXTtpZigic2NhdHRlciI9PT1hLnR5cGUmJmEueGF4aXM9PT1yLnhheGlzJiZhLnlheGlzPT09ci55YXhpcyl7YS5vcGFjaXR5PXZvaWQgMDticmVha319fX19fSx7fV0sMTE2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikscz10KCIuL3N1YnR5cGVzIiksbD10KCIuL3h5X2RlZmF1bHRzIiksYz10KCIuL3BlcmlvZF9kZWZhdWx0cyIpLHU9dCgiLi9zdGFja19kZWZhdWx0cyIpLGg9dCgiLi9tYXJrZXJfZGVmYXVsdHMiKSxmPXQoIi4vbGluZV9kZWZhdWx0cyIpLHA9dCgiLi9saW5lX3NoYXBlX2RlZmF1bHRzIiksZD10KCIuL3RleHRfZGVmYXVsdHMiKSxnPXQoIi4vZmlsbGNvbG9yX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG0pe2Z1bmN0aW9uIHYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgeT1sKHQsZSxtLHYpO2lmKHl8fChlLnZpc2libGU9ITEpLGUudmlzaWJsZSl7Yyh0LGUsbSx2KTt2YXIgeD11KHQsZSxtLHYpLGI9IXgmJnk8by5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiO3YoInRleHQiKSx2KCJob3ZlcnRleHQiKSx2KCJtb2RlIixiKSxzLmhhc0xpbmVzKGUpJiYoZih0LGUscixtLHYpLHAodCxlLHYpLHYoImNvbm5lY3RnYXBzIiksdigibGluZS5zaW1wbGlmeSIpKSxzLmhhc01hcmtlcnMoZSkmJmgodCxlLHIsbSx2LHtncmFkaWVudDohMH0pLHMuaGFzVGV4dChlKSYmKHYoInRleHR0ZW1wbGF0ZSIpLGQodCxlLG0sdikpO3ZhciBfPVtdOyhzLmhhc01hcmtlcnMoZSl8fHMuaGFzVGV4dChlKSkmJih2KCJjbGlwb25heGlzIiksdigibWFya2VyLm1heGRpc3BsYXllZCIpLF8ucHVzaCgicG9pbnRzIikpLHYoImZpbGwiLHg/eC5maWxsRGZsdDoibm9uZSIpLCJub25lIiE9PWUuZmlsbCYmKGcodCxlLHIsdikscy5oYXNMaW5lcyhlKXx8cCh0LGUsdikpO3ZhciB3PShlLmxpbmV8fHt9KS5jb2xvcixUPShlLm1hcmtlcnx8e30pLmNvbG9yOyJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8Xy5wdXNoKCJmaWxscyIpLHYoImhvdmVyb24iLF8uam9pbigiKyIpfHwicG9pbnRzIiksImZpbGxzIiE9PWUuaG92ZXJvbiYmdigiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBrPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO2sodCxlLHd8fFR8fHIse2F4aXM6InkifSksayh0LGUsd3x8VHx8cix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx2KX19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2F0dHJpYnV0ZXMiOjExNTgsIi4vY29uc3RhbnRzIjoxMTYyLCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTE2NiwiLi9saW5lX2RlZmF1bHRzIjoxMTcxLCIuL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjExNzMsIi4vbWFya2VyX2RlZmF1bHRzIjoxMTc3LCIuL3BlcmlvZF9kZWZhdWx0cyI6MTE3OCwiLi9zdGFja19kZWZhdWx0cyI6MTE4MSwiLi9zdWJ0eXBlcyI6MTE4MywiLi90ZXh0X2RlZmF1bHRzIjoxMTg0LCIuL3h5X2RlZmF1bHRzIjoxMTg1fV0sMTE2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz0hMTtpZihlLm1hcmtlcil7dmFyIHM9ZS5tYXJrZXIuY29sb3IsbD0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yO3MmJiFpKHMpP289czpsJiYhaShsKSYmKG89bCl9YSgiZmlsbGNvbG9yIixuLmFkZE9wYWNpdHkoKGUubGluZXx8e30pLmNvbG9yfHxvfHxyLC41KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vbGliIjo3NTB9XSwxMTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxhPXtfZnVsbExheW91dDpyfSxvPW4uZ2V0RnJvbVRyYWNlKGEsZSwieCIpLHM9bi5nZXRGcm9tVHJhY2UoYSxlLCJ5Iik7cmV0dXJuIGkueExhYmVsPW4udGlja1RleHQobyx0LngsITApLnRleHQsaS55TGFiZWw9bi50aWNrVGV4dChzLHQueSwhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5fV0sMTE2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtpZigibGluZXMiPT09dC5tb2RlKXJldHVybihyPXQubGluZS5jb2xvcikmJm4ub3BhY2l0eShyKT9yOnQuZmlsbGNvbG9yO2lmKCJub25lIj09PXQubW9kZSlyZXR1cm4gdC5maWxsP3QuZmlsbGNvbG9yOiIiO3ZhciBvPWUubWNjfHwodC5tYXJrZXJ8fHt9KS5jb2xvcixzPWUubWxjY3x8KCh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9KS5jb2xvcjtyZXR1cm4oYT1vJiZuLm9wYWNpdHkobyk/bzpzJiZuLm9wYWNpdHkocykmJihlLm1sd3x8KCh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9KS53aWR0aCk/czoiIik/bi5vcGFjaXR5KGEpPC4zP24uYWRkT3BhY2l0eShhLC4zKTphOihyPSh0LmxpbmV8fHt9KS5jb2xvcikmJm4ub3BhY2l0eShyKSYmaS5oYXNMaW5lcyh0KSYmdC5saW5lLndpZHRoP3I6dC5maWxsY29sb3J9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi9zdWJ0eXBlcyI6MTE4M31dLDExNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi9nZXRfdHJhY2VfY29sb3IiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPW4uZmlsbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuY2QsaD11WzBdLnRyYWNlLGY9dC54YSxwPXQueWEsZD1mLmMycChlKSxnPXAuYzJwKHIpLG09W2QsZ10sdj1oLmhvdmVyb258fCIiLHk9LTEhPT1oLm1vZGUuaW5kZXhPZigibWFya2VycyIpPzM6LjU7aWYoLTEhPT12LmluZGV4T2YoInBvaW50cyIpKXt2YXIgeD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCh5LHQubXJjfHwwKSxyPWYuYzJwKHQueCktZCxuPXAuYzJwKHQueSktZztyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHIqcituKm4pLWUsMS15L2UpfSxiPWkuZ2V0RGlzdGFuY2VGdW5jdGlvbihjLChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKSxyPTEtMS9lLG49TWF0aC5hYnMoZi5jMnAodC54KS1kKTtyZXR1cm4gbjxlP3Iqbi9lOm4tZStyfSksKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApLHI9MS0xL2Usbj1NYXRoLmFicyhwLmMycCh0LnkpLWcpO3JldHVybiBuPGU/cipuL2U6bi1lK3J9KSx4KTtpZihpLmdldENsb3Nlc3QodSxiLHQpLCExIT09dC5pbmRleCl7dmFyIF89dVt0LmluZGV4XSx3PWYuYzJwKF8ueCwhMCksVD1wLmMycChfLnksITApLGs9Xy5tcmN8fDE7dC5pbmRleD1fLmk7dmFyIE09dVswXS50Lm9yaWVudGF0aW9uLEE9TSYmKF8uc05vcm18fF8ucyksUz0iaCI9PT1NP0E6dm9pZCAwIT09Xy5vcmlnX3g/Xy5vcmlnX3g6Xy54LEU9InYiPT09TT9BOnZvaWQgMCE9PV8ub3JpZ195P18ub3JpZ195Ol8ueTtyZXR1cm4gbi5leHRlbmRGbGF0KHQse2NvbG9yOm8oaCxfKSx4MDp3LWsseDE6dytrLHhMYWJlbFZhbDpTLHkwOlQtayx5MTpUK2sseUxhYmVsVmFsOkUsc3Bpa2VEaXN0YW5jZTp4KF8pLGhvdmVydGVtcGxhdGU6aC5ob3ZlcnRlbXBsYXRlfSksbChfLGgsdCksYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsImhvdmVySW5mbyIpKF8saCx0KSxbdF19fWlmKC0xIT09di5pbmRleE9mKCJmaWxscyIpJiZoLl9wb2x5Z29ucyl7dmFyIEMsTCxQLEkseixPLEQsUixGLEI9aC5fcG9seWdvbnMsTj1bXSxqPSExLFU9MS8wLFY9LTEvMCxxPTEvMCxIPS0xLzA7Zm9yKEM9MDtDPEIubGVuZ3RoO0MrKykoUD1CW0NdKS5jb250YWlucyhtKSYmKGo9IWosTi5wdXNoKFApLHE9TWF0aC5taW4ocSxQLnltaW4pLEg9TWF0aC5tYXgoSCxQLnltYXgpKTtpZihqKXt2YXIgRz0oKHE9TWF0aC5tYXgocSwwKSkrKEg9TWF0aC5taW4oSCxwLl9sZW5ndGgpKSkvMjtmb3IoQz0wO0M8Ti5sZW5ndGg7QysrKWZvcihJPU5bQ10ucHRzLEw9MTtMPEkubGVuZ3RoO0wrKykoUj1JW0wtMV1bMV0pPkchPShGPUlbTF1bMV0pPj1HJiYoTz1JW0wtMV1bMF0sRD1JW0xdWzBdLEYtUiYmKHo9TysoRC1PKSooRy1SKS8oRi1SKSxVPU1hdGgubWluKFUseiksVj1NYXRoLm1heChWLHopKSk7VT1NYXRoLm1heChVLDApLFY9TWF0aC5taW4oVixmLl9sZW5ndGgpO3ZhciBZPXMuZGVmYXVsdExpbmU7cmV0dXJuIHMub3BhY2l0eShoLmZpbGxjb2xvcik/WT1oLmZpbGxjb2xvcjpzLm9wYWNpdHkoKGgubGluZXx8e30pLmNvbG9yKSYmKFk9aC5saW5lLmNvbG9yKSxuLmV4dGVuZEZsYXQodCx7ZGlzdGFuY2U6dC5tYXhIb3ZlckRpc3RhbmNlLHgwOlUseDE6Vix5MDpHLHkxOkcsY29sb3I6WSxob3ZlcnRlbXBsYXRlOiExfSksZGVsZXRlIHQuaW5kZXgsaC50ZXh0JiYhQXJyYXkuaXNBcnJheShoLnRleHQpP3QudGV4dD1TdHJpbmcoaC50ZXh0KTp0LnRleHQ9aC5uYW1lLFt0XX19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY1NSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4vZ2V0X3RyYWNlX2NvbG9yIjoxMTY4fV0sMTE3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPXtoYXNMaW5lczpuLmhhc0xpbmVzLGhhc01hcmtlcnM6bi5oYXNNYXJrZXJzLGhhc1RleHQ6bi5oYXNUZXh0LGlzQnViYmxlOm4uaXNCdWJibGUsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIiksYXJyYXlzVG9DYWxjZGF0YTp0KCIuL2FycmF5c190b19jYWxjZGF0YSIpLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6dCgiLi9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLGFuaW1hdGFibGU6ITAsbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzeW1ib2xzIiwiZXJyb3JCYXJzT0siLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIiwiem9vbVNjYWxlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4MTIsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTU3LCIuL2F0dHJpYnV0ZXMiOjExNTgsIi4vY2FsYyI6MTE1OSwiLi9jcm9zc190cmFjZV9jYWxjIjoxMTYzLCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjoxMTY0LCIuL2RlZmF1bHRzIjoxMTY1LCIuL2Zvcm1hdF9sYWJlbHMiOjExNjcsIi4vaG92ZXIiOjExNjksIi4vbWFya2VyX2NvbG9yYmFyIjoxMTc2LCIuL3Bsb3QiOjExNzksIi4vc2VsZWN0IjoxMTgwLCIuL3N0eWxlIjoxMTgyLCIuL3N1YnR5cGVzIjoxMTgzfV0sMTE3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYz0odC5tYXJrZXJ8fHt9KS5jb2xvcjsocygibGluZS5jb2xvciIsciksaSh0LCJsaW5lIikpP2EodCxlLG8scyx7cHJlZml4OiJsaW5lLiIsY0xldHRlcjoiYyJ9KTpzKCJsaW5lLmNvbG9yIiwhbihjKSYmY3x8cik7cygibGluZS53aWR0aCIpLChsfHx7fSkubm9EYXNofHxzKCJsaW5lLmRhc2giKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MjUsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2MjYsIi4uLy4uL2xpYiI6NzUwfV0sMTE3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksaT1uLkJBRE5VTSxhPW4uTE9HX0NMSVAsbz1hKy41LHM9YS0uNSxsPXQoIi4uLy4uL2xpYiIpLGM9bC5zZWdtZW50c0ludGVyc2VjdCx1PWwuY29uc3RyYWluLGg9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGEsZixwLGQsZyxtLHYseSx4LGIsXyx3LFQsayxNLEEsUz1lLnhheGlzLEU9ZS55YXhpcyxDPSJsb2ciPT09Uy50eXBlLEw9ImxvZyI9PT1FLnR5cGUsUD1TLl9sZW5ndGgsST1FLl9sZW5ndGgsej1lLmNvbm5lY3RHYXBzLE89ZS5iYXNlVG9sZXJhbmNlLEQ9ZS5zaGFwZSxSPSJsaW5lYXIiPT09RCxGPWUuZmlsbCYmIm5vbmUiIT09ZS5maWxsLEI9W10sTj1oLm1pblRvbGVyYW5jZSxqPXQubGVuZ3RoLFU9bmV3IEFycmF5KGopLFY9MDtmdW5jdGlvbiBxKHIpe3ZhciBuPXRbcl07aWYoIW4pcmV0dXJuITE7dmFyIGE9ZS5saW5lYXJpemVkP1MubDJwKG4ueCk6Uy5jMnAobi54KSxsPWUubGluZWFyaXplZD9FLmwycChuLnkpOkUuYzJwKG4ueSk7aWYoYT09PWkpe2lmKEMmJihhPVMuYzJwKG4ueCwhMCkpLGE9PT1pKXJldHVybiExO0wmJmw9PT1pJiYoYSo9TWF0aC5hYnMoUy5fbSpJKihTLl9tPjA/bzpzKS8oRS5fbSpQKihFLl9tPjA/bzpzKSkpKSxhKj0xZTN9aWYobD09PWkpe2lmKEwmJihsPUUuYzJwKG4ueSwhMCkpLGw9PT1pKXJldHVybiExO2wqPTFlM31yZXR1cm5bYSxsXX1mdW5jdGlvbiBIKHQsZSxyLG4pe3ZhciBpPXItdCxhPW4tZSxvPS41LXQscz0uNS1lLGw9aSppK2EqYSxjPWkqbythKnM7aWYoYz4wJiZjPGwpe3ZhciB1PW8qYS1zKmk7aWYodSp1PGwpcmV0dXJuITB9fWZ1bmN0aW9uIEcodCxlKXt2YXIgcj10WzBdL1Asbj10WzFdL0ksaT1NYXRoLm1heCgwLC1yLHItMSwtbixuLTEpO3JldHVybiBpJiZ2b2lkIDAhPT1NJiZIKHIsbixNLEEpJiYoaT0wKSxpJiZlJiZIKHIsbixlWzBdL1AsZVsxXS9JKSYmKGk9MCksKDEraC50b2xlcmFuY2VHcm93dGgqaSkqT31mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dFswXS1lWzBdLG49dFsxXS1lWzFdO3JldHVybiBNYXRoLnNxcnQocipyK24qbil9dmFyIFcsWixYLEosSyxRLCQsdHQ9aC5tYXhTY3JlZW5zQXdheSxldD0tUCp0dCxydD1QKigxK3R0KSxudD0tSSp0dCxpdD1JKigxK3R0KSxhdD1bW2V0LG50LHJ0LG50XSxbcnQsbnQscnQsaXRdLFtydCxpdCxldCxpdF0sW2V0LGl0LGV0LG50XV07ZnVuY3Rpb24gb3QodCl7aWYodFswXTxldHx8dFswXT5ydHx8dFsxXTxudHx8dFsxXT5pdClyZXR1cm5bdSh0WzBdLGV0LHJ0KSx1KHRbMV0sbnQsaXQpXX1mdW5jdGlvbiBzdCh0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmKHRbMF09PT1ldHx8dFswXT09PXJ0KXx8KHRbMV09PT1lWzFdJiYodFsxXT09PW50fHx0WzFdPT09aXQpfHx2b2lkIDApfWZ1bmN0aW9uIGx0KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obixpKXt2YXIgYT1vdChuKSxvPW90KGkpLHM9W107aWYoYSYmbyYmc3QoYSxvKSlyZXR1cm4gczthJiZzLnB1c2goYSksbyYmcy5wdXNoKG8pO3ZhciBjPTIqbC5jb25zdHJhaW4oKG5bdF0raVt0XSkvMixlLHIpLSgoYXx8bilbdF0rKG98fGkpW3RdKTtjJiYoKGEmJm8/Yz4wPT1hW3RdPm9bdF0/YTpvOmF8fG8pW3RdKz1jKTtyZXR1cm4gc319ZnVuY3Rpb24gY3QodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1lPT09VVtWLTFdWzBdLGk9cj09PVVbVi0xXVsxXTtpZighbnx8IWkpaWYoVj4xKXt2YXIgYT1lPT09VVtWLTJdWzBdLG89cj09PVVbVi0yXVsxXTtuJiYoZT09PWV0fHxlPT09cnQpJiZhP28/Vi0tOlVbVi0xXT10OmkmJihyPT09bnR8fHI9PT1pdCkmJm8/YT9WLS06VVtWLTFdPXQ6VVtWKytdPXR9ZWxzZSBVW1YrK109dH1mdW5jdGlvbiB1dCh0KXtVW1YtMV1bMF0hPT10WzBdJiZVW1YtMV1bMV0hPT10WzFdJiZjdChbWCxKXSksY3QodCksSz1udWxsLFg9Sj0wfWZ1bmN0aW9uIGh0KHQpe2lmKE09dFswXS9QLEE9dFsxXS9JLFc9dFswXTxldD9ldDp0WzBdPnJ0P3J0OjAsWj10WzFdPG50P250OnRbMV0+aXQ/aXQ6MCxXfHxaKXtpZihWKWlmKEspe3ZhciBlPSQoSyx0KTtlLmxlbmd0aD4xJiYodXQoZVswXSksVVtWKytdPWVbMV0pfWVsc2UgUT0kKFVbVi0xXSx0KVswXSxVW1YrK109UTtlbHNlIFVbVisrXT1bV3x8dFswXSxafHx0WzFdXTt2YXIgcj1VW1YtMV07VyYmWiYmKHJbMF0hPT1XfHxyWzFdIT09Wik/KEsmJihYIT09VyYmSiE9PVo/Y3QoWCYmSj8obj1LLGE9KGk9dClbMF0tblswXSxvPShpWzFdLW5bMV0pL2EsKG5bMV0qaVswXS1pWzFdKm5bMF0pL2E+MD9bbz4wP2V0OnJ0LGl0XTpbbz4wP3J0OmV0LG50XSk6W1h8fFcsSnx8Wl0pOlgmJkomJmN0KFtYLEpdKSksY3QoW1csWl0pKTpYLVcmJkotWiYmY3QoW1d8fFgsWnx8Sl0pLEs9dCxYPVcsSj1afWVsc2UgSyYmdXQoJChLLHQpWzBdKSxVW1YrK109dDt2YXIgbixpLGEsb31mb3IoImxpbmVhciI9PT1EfHwic3BsaW5lIj09PUQ/JD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTAsaT0wO2k8NDtpKyspe3ZhciBhPWF0W2ldLG89Yyh0WzBdLHRbMV0sZVswXSxlWzFdLGFbMF0sYVsxXSxhWzJdLGFbM10pO28mJighbnx8TWF0aC5hYnMoby54LXJbMF1bMF0pPjF8fE1hdGguYWJzKG8ueS1yWzBdWzFdKT4xKSYmKG89W28ueCxvLnldLG4mJlkobyx0KTxZKHJbMF0sdCk/ci51bnNoaWZ0KG8pOnIucHVzaChvKSxuKyspfXJldHVybiByfToiaHYiPT09RHx8InZoIj09PUQ/JD1mdW5jdGlvbih0LGUpe3ZhciByPVtdLG49b3QodCksaT1vdChlKTtyZXR1cm4gbiYmaSYmc3QobixpKXx8KG4mJnIucHVzaChuKSxpJiZyLnB1c2goaSkpLHJ9OiJodmgiPT09RD8kPWx0KDAsZXQscnQpOiJ2aHYiPT09RCYmKCQ9bHQoMSxudCxpdCkpLHI9MDtyPGo7cisrKWlmKG49cShyKSl7Zm9yKFY9MCxLPW51bGwsaHQobikscisrO3I8ajtyKyspe2lmKCEoZj1xKHIpKSl7aWYoeiljb250aW51ZTticmVha31pZihSJiZlLnNpbXBsaWZ5KXt2YXIgZnQ9cShyKzEpO2lmKHk9WShmLG4pLEYmJigwPT09Vnx8Vj09PWotMSl8fCEoeTxHKGYsZnQpKk4pKXtmb3IobT1bKGZbMF0tblswXSkveSwoZlsxXS1uWzFdKS95XSxwPW4seD15LGI9dz1UPTAsZz0hMSxhPWYscisrO3I8dC5sZW5ndGg7cisrKXtpZihkPWZ0LGZ0PXEocisxKSwhZCl7aWYoeiljb250aW51ZTticmVha31pZihrPSh2PVtkWzBdLW5bMF0sZFsxXS1uWzFdXSlbMF0qbVsxXS12WzFdKm1bMF0sdz1NYXRoLm1pbih3LGspLChUPU1hdGgubWF4KFQsaykpLXc+RyhkLGZ0KSlicmVhazthPWQsKF89dlswXSptWzBdK3ZbMV0qbVsxXSk+eD8oeD1fLGY9ZCxnPSExKTpfPGImJihiPV8scD1kLGc9ITApfWlmKGc/KGh0KGYpLGEhPT1wJiZodChwKSk6KHAhPT1uJiZodChwKSxhIT09ZiYmaHQoZikpLGh0KGEpLHI+PXQubGVuZ3RofHwhZClicmVhaztodChkKSxuPWR9fWVsc2UgaHQoZil9SyYmY3QoW1h8fEtbMF0sSnx8S1sxXV0pLEIucHVzaChVLnNsaWNlKDAsVikpfXJldHVybiBCfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYiI6NzUwLCIuL2NvbnN0YW50cyI6MTE2Mn1dLDExNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXsic3BsaW5lIj09PXIoImxpbmUuc2hhcGUiKSYmcigibGluZS5zbW9vdGhpbmciKX19LHt9XSwxMTc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt0b25leHR4OjEsdG9uZXh0eToxLHRvbmV4dDoxfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzLGwsYz17fSx1PSExLGg9LTEsZj0wLHA9LTE7Zm9yKGE9MDthPHIubGVuZ3RoO2ErKykobz0oaT1yW2FdWzBdLnRyYWNlKS5zdGFja2dyb3VwfHwiIik/byBpbiBjP2w9Y1tvXToobD1jW29dPWYsZisrKTppLmZpbGwgaW4gbiYmcD49MD9sPXA6KGw9cD1mLGYrKyksbDxoJiYodT0hMCksaS5fZ3JvdXBJbmRleD1oPWw7dmFyIGQ9ci5zbGljZSgpO3UmJmQuc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLnRyYWNlLG49ZVswXS50cmFjZTtyZXR1cm4gci5fZ3JvdXBJbmRleC1uLl9ncm91cEluZGV4fHxyLmluZGV4LW4uaW5kZXh9KSk7dmFyIGc9e307Zm9yKGE9MDthPGQubGVuZ3RoO2ErKylvPShpPWRbYV1bMF0udHJhY2UpLnN0YWNrZ3JvdXB8fCIiLCEwPT09aS52aXNpYmxlPyhpLl9uZXh0dHJhY2U9bnVsbCxpLmZpbGwgaW4gbiYmKHM9Z1tvXSxpLl9wcmV2dHJhY2U9c3x8bnVsbCxzJiYocy5fbmV4dHRyYWNlPWkpKSxpLl9vd25maWxsPWkuZmlsbCYmKCJ0b3plcm8iPT09aS5maWxsLnN1YnN0cigwLDYpfHwidG9zZWxmIj09PWkuZmlsbHx8InRvIj09PWkuZmlsbC5zdWJzdHIoMCwyKSYmIWkuX3ByZXZ0cmFjZSksZ1tvXT1pKTppLl9wcmV2dHJhY2U9aS5fbmV4dHRyYWNlPWkuX293bmZpbGw9bnVsbDtyZXR1cm4gZH19LHt9XSwxMTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWFya2VyLHI9ZS5zaXplcmVmfHwxLGk9ZS5zaXplbWlufHwwLGE9ImFyZWEiPT09ZS5zaXplbW9kZT9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KHQvcil9OmZ1bmN0aW9uKHQpe3JldHVybiB0L3J9O3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1hKHQvMik7cmV0dXJuIG4oZSkmJmU+MD9NYXRoLm1heChlLGkpOjB9fX0seyJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sMTE3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NvbnRhaW5lcjoibWFya2VyIixtaW46ImNtaW4iLG1heDoiY21heCJ9fSx7fV0sMTE3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1PW8uaXNCdWJibGUodCksaD0odC5saW5lfHx7fSkuY29sb3I7KGM9Y3x8e30saCYmKHI9aCksbCgibWFya2VyLnN5bWJvbCIpLGwoIm1hcmtlci5vcGFjaXR5Iix1Py43OjEpLGwoIm1hcmtlci5zaXplIiksbCgibWFya2VyLmNvbG9yIixyKSxpKHQsIm1hcmtlciIpJiZhKHQsZSxzLGwse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KSxjLm5vU2VsZWN0fHwobCgic2VsZWN0ZWQubWFya2VyLmNvbG9yIiksbCgidW5zZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxsKCJzZWxlY3RlZC5tYXJrZXIuc2l6ZSIpLGwoInVuc2VsZWN0ZWQubWFya2VyLnNpemUiKSksYy5ub0xpbmV8fChsKCJtYXJrZXIubGluZS5jb2xvciIsaCYmIUFycmF5LmlzQXJyYXkoaCkmJmUubWFya2VyLmNvbG9yIT09aD9oOnU/bi5iYWNrZ3JvdW5kOm4uZGVmYXVsdExpbmUpLGkodCwibWFya2VyLmxpbmUiKSYmYSh0LGUscyxsLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxsKCJtYXJrZXIubGluZS53aWR0aCIsdT8xOjApKSx1JiYobCgibWFya2VyLnNpemVyZWYiKSxsKCJtYXJrZXIuc2l6ZW1pbiIpLGwoIm1hcmtlci5zaXplbW9kZSIpKSxjLmdyYWRpZW50KSYmKCJub25lIiE9PWwoIm1hcmtlci5ncmFkaWVudC50eXBlIikmJmwoIm1hcmtlci5ncmFkaWVudC5jb2xvciIpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYyNSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjYyNiwiLi9zdWJ0eXBlcyI6MTE4M31dLDExNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuZGF0ZVRpY2swLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLk9ORVdFRUs7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBuKGUsdCVpPT0wPzE6MCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoaXx8KGk9e3g6ITAseTohMH0pLGkueCl7dmFyIG89bigieHBlcmlvZCIpO28mJihuKCJ4cGVyaW9kMCIsYShvLGUueGNhbGVuZGFyKSksbigieHBlcmlvZGFsaWdubWVudCIpKX1pZihpLnkpe3ZhciBzPW4oInlwZXJpb2QiKTtzJiYobigieXBlcmlvZDAiLGEocyxlLnljYWxlbmRhcikpLG4oInlwZXJpb2RhbGlnbm1lbnQiKSl9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYiI6NzUwfV0sMTE3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89YS5lbnN1cmVTaW5nbGUscz1hLmlkZW50aXR5LGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuL3N1YnR5cGVzIiksdT10KCIuL2xpbmVfcG9pbnRzIiksaD10KCIuL2xpbmtfdHJhY2VzIiksZj10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcjtmdW5jdGlvbiBwKHQsZSxyLGgscCxkLGcpe3ZhciBtOyFmdW5jdGlvbih0LGUscixpLG8pe3ZhciBzPXIueGF4aXMsbD1yLnlheGlzLHU9bi5leHRlbnQoYS5zaW1wbGVNYXAocy5yYW5nZSxzLnIyYykpLGg9bi5leHRlbnQoYS5zaW1wbGVNYXAobC5yYW5nZSxsLnIyYykpLGY9aVswXS50cmFjZTtpZighYy5oYXNNYXJrZXJzKGYpKXJldHVybjt2YXIgcD1mLm1hcmtlci5tYXhkaXNwbGF5ZWQ7aWYoMD09PXApcmV0dXJuO3ZhciBkPWkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC54Pj11WzBdJiZ0Lng8PXVbMV0mJnQueT49aFswXSYmdC55PD1oWzFdfSkpLGc9TWF0aC5jZWlsKGQubGVuZ3RoL3ApLG09MDtvLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dmFyIG49dFswXS50cmFjZTtjLmhhc01hcmtlcnMobikmJm4ubWFya2VyLm1heGRpc3BsYXllZD4wJiZyPGUmJm0rK30pKTt2YXIgdj1NYXRoLnJvdW5kKG0qZy8zK01hdGguZmxvb3IobS8zKSpnLzcuMSk7aS5mb3JFYWNoKChmdW5jdGlvbih0KXtkZWxldGUgdC52aXN9KSksZC5mb3JFYWNoKChmdW5jdGlvbih0LGUpezA9PT1NYXRoLnJvdW5kKChlK3YpJWcpJiYodC52aXM9ITApfSkpfSgwLGUscixoLHApO3ZhciB2PSEhZyYmZy5kdXJhdGlvbj4wO2Z1bmN0aW9uIHkodCl7cmV0dXJuIHY/dC50cmFuc2l0aW9uKCk6dH12YXIgeD1yLnhheGlzLGI9ci55YXhpcyxfPWhbMF0udHJhY2Usdz1fLmxpbmUsVD1uLnNlbGVjdChkKSxrPW8oVCwiZyIsImVycm9yYmFycyIpLE09byhULCJnIiwibGluZXMiKSxBPW8oVCwiZyIsInBvaW50cyIpLFM9byhULCJnIiwidGV4dCIpO2lmKGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJwbG90IikodCxrLHIsZyksITA9PT1fLnZpc2libGUpe3ZhciBFLEM7eShUKS5zdHlsZSgib3BhY2l0eSIsXy5vcGFjaXR5KTt2YXIgTD1fLmZpbGwuY2hhckF0KF8uZmlsbC5sZW5ndGgtMSk7IngiIT09TCYmInkiIT09TCYmKEw9IiIpLGhbMF1bci5pc1JhbmdlUGxvdD8ibm9kZVJhbmdlUGxvdDMiOiJub2RlMyJdPVQ7dmFyIFAsSSx6PSIiLE89W10sRD1fLl9wcmV2dHJhY2U7RCYmKHo9RC5fcHJldlJldnBhdGh8fCIiLEM9RC5fbmV4dEZpbGwsTz1ELl9wb2x5Z29ucyk7dmFyIFIsRixCLE4saixVLFYscT0iIixIPSIiLEc9W10sWT1hLm5vb3A7aWYoRT1fLl9vd25GaWxsLGMuaGFzTGluZXMoXyl8fCJub25lIiE9PV8uZmlsbCl7Zm9yKEMmJkMuZGF0dW0oaCksLTEhPT1bImh2IiwidmgiLCJodmgiLCJ2aHYiXS5pbmRleE9mKHcuc2hhcGUpPyhSPWwuc3RlcHMody5zaGFwZSksRj1sLnN0ZXBzKHcuc2hhcGUuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSkpOlI9Rj0ic3BsaW5lIj09PXcuc2hhcGU/ZnVuY3Rpb24odCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdC5sZW5ndGg+MSYmdFswXVswXT09PWVbMF0mJnRbMF1bMV09PT1lWzFdP2wuc21vb3RoY2xvc2VkKHQuc2xpY2UoMSksdy5zbW9vdGhpbmcpOmwuc21vb3Rob3Blbih0LHcuc21vb3RoaW5nKX06ZnVuY3Rpb24odCl7cmV0dXJuIk0iK3Quam9pbigiTCIpfSxCPWZ1bmN0aW9uKHQpe3JldHVybiBGKHQucmV2ZXJzZSgpKX0sRz11KGgse3hheGlzOngseWF4aXM6Yixjb25uZWN0R2FwczpfLmNvbm5lY3RnYXBzLGJhc2VUb2xlcmFuY2U6TWF0aC5tYXgody53aWR0aHx8MSwzKS80LHNoYXBlOncuc2hhcGUsc2ltcGxpZnk6dy5zaW1wbGlmeSxmaWxsOl8uZmlsbH0pLFY9Xy5fcG9seWdvbnM9bmV3IEFycmF5KEcubGVuZ3RoKSxtPTA7bTxHLmxlbmd0aDttKyspXy5fcG9seWdvbnNbbV09ZihHW21dKTtHLmxlbmd0aCYmKE49R1swXVswXSxVPShqPUdbRy5sZW5ndGgtMV0pW2oubGVuZ3RoLTFdKSxZPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihQPVIoZSksST1CKGUpLHE/TD8ocSs9IkwiK1Auc3Vic3RyKDEpLEg9SSsiTCIrSC5zdWJzdHIoMSkpOihxKz0iWiIrUCxIPUkrIloiK0gpOihxPVAsSD1JKSxjLmhhc0xpbmVzKF8pJiZlLmxlbmd0aD4xKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZihyLmRhdHVtKGgpLHQpeShyLnN0eWxlKCJvcGFjaXR5IiwwKS5hdHRyKCJkIixQKS5jYWxsKGwubGluZUdyb3VwU3R5bGUpKS5zdHlsZSgib3BhY2l0eSIsMSk7ZWxzZXt2YXIgaT15KHIpO2kuYXR0cigiZCIsUCksbC5zaW5nbGVMaW5lU3R5bGUoaCxpKX19fX19dmFyIFc9TS5zZWxlY3RBbGwoIi5qcy1saW5lIikuZGF0YShHKTt5KFcuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksVy5lYWNoKFkoITEpKSxXLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtbGluZSIsITApLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2FsbChsLmxpbmVHcm91cFN0eWxlKS5lYWNoKFkoITApKSxsLnNldENsaXBVcmwoVyxyLmxheWVyQ2xpcElkLHQpLEcubGVuZ3RoPyhFPyhFLmRhdHVtKGgpLE4mJlUmJihMPygieSI9PT1MP05bMV09VVsxXT1iLmMycCgwLCEwKToieCI9PT1MJiYoTlswXT1VWzBdPXguYzJwKDAsITApKSx5KEUpLmF0dHIoImQiLCJNIitVKyJMIitOKyJMIitxLnN1YnN0cigxKSkuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpOnkoRSkuYXR0cigiZCIscSsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKSk6QyYmKCJ0b25leHQiPT09Xy5maWxsLnN1YnN0cigwLDYpJiZxJiZ6PygidG9uZXh0Ij09PV8uZmlsbD95KEMpLmF0dHIoImQiLHErIloiK3orIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKTp5KEMpLmF0dHIoImQiLHErIkwiK3ouc3Vic3RyKDEpKyJaIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSksXy5fcG9seWdvbnM9Xy5fcG9seWdvbnMuY29uY2F0KE8pKTooWChDKSxfLl9wb2x5Z29ucz1udWxsKSksXy5fcHJldlJldnBhdGg9SCxfLl9wcmV2UG9seWdvbnM9Vik6KEU/WChFKTpDJiZYKEMpLF8uX3BvbHlnb25zPV8uX3ByZXZSZXZwYXRoPV8uX3ByZXZQb2x5Z29ucz1udWxsKSxBLmRhdHVtKGgpLFMuZGF0dW0oaCksZnVuY3Rpb24oZSxpLGEpe3ZhciBvLHU9YVswXS50cmFjZSxoPWMuaGFzTWFya2Vycyh1KSxmPWMuaGFzVGV4dCh1KSxwPXR0KHUpLGQ9ZXQsZz1ldDtpZihofHxmKXt2YXIgbT1zLF89dS5zdGFja2dyb3VwLHc9XyYmImluZmVyIHplcm8iPT09dC5fZnVsbExheW91dC5fc2NhdHRlclN0YWNrT3B0c1t4Ll9pZCtiLl9pZF1bX10uc3RhY2tnYXBzO3UubWFya2VyLm1heGRpc3BsYXllZHx8dS5fbmVlZHNDdWxsP209dz9LOko6XyYmIXcmJihtPVEpLGgmJihkPW0pLGYmJihnPW0pfXZhciBULGs9KG89ZS5zZWxlY3RBbGwoInBhdGgucG9pbnQiKS5kYXRhKGQscCkpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKTt2JiZrLmNhbGwobC5wb2ludFN0eWxlLHUsdCkuY2FsbChsLnRyYW5zbGF0ZVBvaW50cyx4LGIpLnN0eWxlKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLG8ub3JkZXIoKSxoJiYoVD1sLm1ha2VQb2ludFN0eWxlRm5zKHUpKSxvLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9eShpKTtsLnRyYW5zbGF0ZVBvaW50KGUsYSx4LGIpPyhsLnNpbmdsZVBvaW50U3R5bGUoZSxhLHUsVCx0KSxyLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChlLGEseCxiLHUueGNhbGVuZGFyLHUueWNhbGVuZGFyKSx1LmN1c3RvbWRhdGEmJmkuY2xhc3NlZCgicGxvdGx5LWN1c3RvbWRhdGEiLG51bGwhPT1lLmRhdGEmJnZvaWQgMCE9PWUuZGF0YSkpOmEucmVtb3ZlKCl9KSksdj9vLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpOm8uZXhpdCgpLnJlbW92ZSgpLChvPWkuc2VsZWN0QWxsKCJnIikuZGF0YShnLHApKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHRwb2ludCIsITApLmFwcGVuZCgidGV4dCIpLG8ub3JkZXIoKSxvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9eShlLnNlbGVjdCgidGV4dCIpKTtsLnRyYW5zbGF0ZVBvaW50KHQsaSx4LGIpP3IubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsZSx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpOmUucmVtb3ZlKCl9KSksby5zZWxlY3RBbGwoInRleHQiKS5jYWxsKGwudGV4dFBvaW50U3R5bGUsdSx0KS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT14LmMycCh0LngpLHI9Yi5jMnAodC55KTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5lYWNoKChmdW5jdGlvbigpe3kobi5zZWxlY3QodGhpcykpLmF0dHIoe3g6ZSx5OnJ9KX0pKX0pKSxvLmV4aXQoKS5yZW1vdmUoKX0oQSxTLGgpO3ZhciBaPSExPT09Xy5jbGlwb25heGlzP251bGw6ci5sYXllckNsaXBJZDtsLnNldENsaXBVcmwoQSxaLHQpLGwuc2V0Q2xpcFVybChTLFosdCl9ZnVuY3Rpb24gWCh0KXt5KHQpLmF0dHIoImQiLCJNMCwwWiIpfWZ1bmN0aW9uIEoodCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5nYXAmJnQudmlzfSkpfWZ1bmN0aW9uIEsodCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC52aXN9KSl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LmdhcH0pKX1mdW5jdGlvbiAkKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIHR0KHQpe2lmKHQuaWRzKXJldHVybiAkfWZ1bmN0aW9uIGV0KCl7cmV0dXJuITF9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsYyl7dmFyIHUsZixkPSFhLGc9ISFhJiZhLmR1cmF0aW9uPjAsbT1oKHQsZSxyKTsoKHU9aS5zZWxlY3RBbGwoImcudHJhY2UiKS5kYXRhKG0sKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFjZSBzY2F0dGVyIHRyYWNlIit0WzBdLnRyYWNlLnVpZH0pKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpLHUub3JkZXIoKSxmdW5jdGlvbih0LGUscil7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgaT1vKG4uc2VsZWN0KHRoaXMpLCJnIiwiZmlsbHMiKTtsLnNldENsaXBVcmwoaSxyLmxheWVyQ2xpcElkLHQpO3ZhciBhPWVbMF0udHJhY2UsYz1bXTthLl9vd25maWxsJiZjLnB1c2goIl9vd25GaWxsIiksYS5fbmV4dHRyYWNlJiZjLnB1c2goIl9uZXh0RmlsbCIpO3ZhciB1PWkuc2VsZWN0QWxsKCJnIikuZGF0YShjLHMpO3UuZW50ZXIoKS5hcHBlbmQoImciKSx1LmV4aXQoKS5lYWNoKChmdW5jdGlvbih0KXthW3RdPW51bGx9KSkucmVtb3ZlKCksdS5vcmRlcigpLmVhY2goKGZ1bmN0aW9uKHQpe2FbdF09byhuLnNlbGVjdCh0aGlzKSwicGF0aCIsImpzLWZpbGwiKX0pKX0pKX0odCx1LGUpLGcpPyhjJiYoZj1jKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKGEuZHVyYXRpb24pLmVhc2UoYS5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7ZiYmZigpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7ZiYmZigpfSkpLmVhY2goKGZ1bmN0aW9uKCl7aS5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKChmdW5jdGlvbihyLG4pe3AodCxuLGUscixtLHRoaXMsYSl9KSl9KSkpOnUuZWFjaCgoZnVuY3Rpb24ocixuKXtwKHQsbixlLHIsbSx0aGlzLGEpfSkpO2QmJnUuZXhpdCgpLnJlbW92ZSgpLGkuc2VsZWN0QWxsKCJwYXRoOm5vdChbZF0pIikucmVtb3ZlKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL3BvbHlnb24iOjc2MiwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi9saW5lX3BvaW50cyI6MTE3MiwiLi9saW5rX3RyYWNlcyI6MTE3NCwiLi9zdWJ0eXBlcyI6MTE4MyxkMzoxNjl9XSwxMTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdLGg9c1swXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKGgpJiYhbi5oYXNUZXh0KGgpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspaT1zW3JdLGE9bC5jMnAoaS54KSxvPWMuYzJwKGkueSksbnVsbCE9PWkuaSYmZS5jb250YWlucyhbYSxvXSwhMSxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOmkuaSx4OmwuYzJkKGkueCkseTpjLmMyZChpLnkpfSksaS5zZWxlY3RlZD0xKTppLnNlbGVjdGVkPTA7cmV0dXJuIHV9fSx7Ii4vc3VidHlwZXMiOjExODN9XSwxMTgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPVsib3JpZW50YXRpb24iLCJncm91cG5vcm0iLCJzdGFja2dhcHMiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9ci5fc2NhdHRlclN0YWNrT3B0cyxvPWkoInN0YWNrZ3JvdXAiKTtpZihvKXt2YXIgcz1lLnhheGlzK2UueWF4aXMsbD1hW3NdO2x8fChsPWFbc109e30pO3ZhciBjPWxbb10sdT0hMTtjP2MudHJhY2VzLnB1c2goZSk6KGM9bFtvXT17dHJhY2VJbmRpY2VzOltdLHRyYWNlczpbZV19LHU9ITApO2Zvcih2YXIgaD17b3JpZW50YXRpb246ZS54JiYhZS55PyJoIjoidiJ9LGY9MDtmPG4ubGVuZ3RoO2YrKyl7dmFyIHA9bltmXSxkPXArIkZvdW5kIjtpZighY1tkXSl7dmFyIGc9dm9pZCAwIT09dFtwXSxtPSJvcmllbnRhdGlvbiI9PT1wO2lmKChnfHx1KSYmKGNbcF09aShwLGhbcF0pLG0mJihjLmZpbGxEZmx0PSJoIj09PWNbcF0/InRvbmV4dHgiOiJ0b25leHR5IiksZyYmKGNbZF09ITAsIXUmJihkZWxldGUgYy50cmFjZXNbMF1bcF0sbSkpKSlmb3IodmFyIHY9MDt2PGMudHJhY2VzLmxlbmd0aC0xO3YrKyl7dmFyIHk9Yy50cmFjZXNbdl07eS5faW5wdXQuZmlsbCE9PXkuZmlsbCYmKHkuZmlsbD1jLmZpbGxEZmx0KX19fXJldHVybiBjfX19LHt9XSwxMTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gbyh0LGUscil7aS5wb2ludFN0eWxlKHQuc2VsZWN0QWxsKCJwYXRoLnBvaW50IiksZSxyKX1mdW5jdGlvbiBzKHQsZSxyKXtpLnRleHRQb2ludFN0eWxlKHQuc2VsZWN0QWxsKCJ0ZXh0IiksZSxyKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy50cmFjZS5zY2F0dGVyIik7ZS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSksZS5zZWxlY3RBbGwoImcucG9pbnRzIikuZWFjaCgoZnVuY3Rpb24oZSl7byhuLnNlbGVjdCh0aGlzKSxlLnRyYWNlfHxlWzBdLnRyYWNlLHQpfSkpLGUuc2VsZWN0QWxsKCJnLnRleHQiKS5lYWNoKChmdW5jdGlvbihlKXtzKG4uc2VsZWN0KHRoaXMpLGUudHJhY2V8fGVbMF0udHJhY2UsdCl9KSksZS5zZWxlY3RBbGwoImcudHJhY2UgcGF0aC5qcy1saW5lIikuY2FsbChpLmxpbmVHcm91cFN0eWxlKSxlLnNlbGVjdEFsbCgiZy50cmFjZSBwYXRoLmpzLWZpbGwiKS5jYWxsKGkuZmlsbEdyb3VwU3R5bGUpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdHlsZSIpKGUpfSxzdHlsZVBvaW50czpvLHN0eWxlVGV4dDpzLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz8oaS5zZWxlY3RlZFBvaW50U3R5bGUoci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxuKSxpLnNlbGVjdGVkVGV4dFN0eWxlKHIuc2VsZWN0QWxsKCJ0ZXh0IiksbikpOihvKHIsbix0KSxzKHIsbix0KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vcmVnaXN0cnkiOjg4MixkMzoxNjl9XSwxMTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17aGFzTGluZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJsaW5lcyIpfSxoYXNNYXJrZXJzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJih0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKXx8InNwbG9tIj09PXQudHlwZSl9LGhhc1RleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJ0ZXh0Iil9LGlzQnViYmxlOmZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUGxhaW5PYmplY3QodC5tYXJrZXIpJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkodC5tYXJrZXIuc2l6ZSl9fX0seyIuLi8uLi9saWIiOjc1MH1dLDExODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7YT1hfHx7fSxpKCJ0ZXh0cG9zaXRpb24iKSxuLmNvZXJjZUZvbnQoaSwidGV4dGZvbnQiLHIuZm9udCksYS5ub1NlbGVjdHx8KGkoInNlbGVjdGVkLnRleHRmb250LmNvbG9yIiksaSgidW5zZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpKX19LHsiLi4vLi4vbGliIjo3NTB9XSwxMTg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scz1hKCJ4IiksbD1hKCJ5Iik7aWYoaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLHIpLHMpe3ZhciBjPW4ubWluUm93TGVuZ3RoKHMpO2w/bz1NYXRoLm1pbihjLG4ubWluUm93TGVuZ3RoKGwpKToobz1jLGEoInkwIiksYSgiZHkiKSl9ZWxzZXtpZighbClyZXR1cm4gMDtvPW4ubWluUm93TGVuZ3RoKGwpLGEoIngwIiksYSgiZHgiKX1yZXR1cm4gZS5fbGVuZ3RoPW8sb319LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODJ9XSwxMTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiKSxjPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGg9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGY9bi5saW5lLHA9bi5tYXJrZXIsZD1wLmxpbmUsZz11KHt3aWR0aDpmLndpZHRoLGRhc2g6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhsKSxkZmx0OiJzb2xpZCJ9fSxpKCJsaW5lIikpO3ZhciBtPWUuZXhwb3J0cz1oKHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDp1KHt9LG4udGV4dCx7fSksdGV4dHRlbXBsYXRlOm8oe30se30pLGhvdmVydGV4dDp1KHt9LG4uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOmEoKSxtb2RlOnUoe30sbi5tb2RlLHtkZmx0OiJsaW5lcyttYXJrZXJzIn0pLHN1cmZhY2VheGlzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6Wy0xLDAsMSwyXSxkZmx0Oi0xfSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0scHJvamVjdGlvbjp7eDp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjIvM319LHk6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fSx6OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX19LGNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsbGluZTpnLG1hcmtlcjp1KHtzeW1ib2w6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhjKSxkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITB9LHNpemU6dSh7fSxwLnNpemUse2RmbHQ6OH0pLHNpemVyZWY6cC5zaXplcmVmLHNpemVtaW46cC5zaXplbWluLHNpemVtb2RlOnAuc2l6ZW1vZGUsb3BhY2l0eTp1KHt9LHAub3BhY2l0eSx7YXJyYXlPazohMX0pLGNvbG9yYmFyOnAuY29sb3JiYXIsbGluZTp1KHt3aWR0aDp1KHt9LGQud2lkdGgse2FycmF5T2s6ITF9KX0saSgibWFya2VyLmxpbmUiKSl9LGkoIm1hcmtlciIpKSx0ZXh0cG9zaXRpb246dSh7fSxuLnRleHRwb3NpdGlvbix7ZGZsdDoidG9wIGNlbnRlciJ9KSx0ZXh0Zm9udDp7Y29sb3I6bi50ZXh0Zm9udC5jb2xvcixzaXplOm4udGV4dGZvbnQuc2l6ZSxmYW1pbHk6dSh7fSxuLnRleHRmb250LmZhbWlseSx7YXJyYXlPazohMX0pfSxob3ZlcmluZm86dSh7fSxzLmhvdmVyaW5mbyl9LCJjYWxjIiwibmVzdGVkIik7bS54LmVkaXRUeXBlPW0ueS5lZGl0VHlwZT1tLnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyI6NzIyLCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo3MjMsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzgxLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTU4fV0sMTE4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLGk9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1be3g6ITEseTohMSx0cmFjZTplLHQ6e319XTtyZXR1cm4gbihyLGUpLGkodCxlKSxyfX0seyIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE1NywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExNjF9XSwxMTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gaSh0LGUscixpKXtpZighZXx8IWUudmlzaWJsZSlyZXR1cm4gbnVsbDtmb3IodmFyIGE9bi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsIm1ha2VDb21wdXRlRXJyb3IiKShlKSxvPW5ldyBBcnJheSh0Lmxlbmd0aCkscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD1hKCt0W3NdLHMpO2lmKCJsb2ciPT09aS50eXBlKXt2YXIgYz1pLmMybCh0W3NdKSx1PXRbc10tbFswXSxoPXRbc10rbFsxXTtpZihvW3NdPVsoaS5jMmwodSwhMCktYykqciwoaS5jMmwoaCwhMCktYykqcl0sdT4wKXt2YXIgZj1pLmMybCh1KTtpLl9sb3dlckxvZ0Vycm9yQm91bmR8fChpLl9sb3dlckxvZ0Vycm9yQm91bmQ9ZiksaS5fbG93ZXJFcnJvckJvdW5kPU1hdGgubWluKGkuX2xvd2VyTG9nRXJyb3JCb3VuZCxmKX19ZWxzZSBvW3NdPVstbFswXSpyLGxbMV0qcl19cmV0dXJuIG99ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1baSh0LngsdC5lcnJvcl94LGVbMF0sci54YXhpcyksaSh0LnksdC5lcnJvcl95LGVbMV0sci55YXhpcyksaSh0LnosdC5lcnJvcl96LGVbMl0sci56YXhpcyldLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXSlyZXR1cm4gdFtlXS5sZW5ndGg7cmV0dXJuIDB9KG4pO2lmKDA9PT1hKXJldHVybiBudWxsO2Zvcih2YXIgbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspe2Zvcih2YXIgbD1bWzAsMCwwXSxbMCwwLDBdXSxjPTA7YzwzO2MrKylpZihuW2NdKWZvcih2YXIgdT0wO3U8Mjt1KyspbFt1XVtjXT1uW2NdW3NdW3VdO29bc109bH1yZXR1cm4gb319LHsiLi4vLi4vcmVnaXN0cnkiOjg4Mn1dLDExODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbGluZTNkIiksaT10KCJnbC1zY2F0dGVyM2QiKSxhPXQoImdsLWVycm9yM2QiKSxvPXQoImdsLW1lc2gzZCIpLHM9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLHU9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLmZvcm1hdENvbG9yLGg9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyIpLHA9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLGQ9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxtPXQoIi4vY2FsY19lcnJvcnMiKTtmdW5jdGlvbiB2KHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5saW5lUGxvdD1udWxsLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCx0aGlzLmVycm9yQmFycz1udWxsLHRoaXMudGV4dE1hcmtlcnM9bnVsbCx0aGlzLmRlbGF1bmF5TWVzaD1udWxsLHRoaXMuY29sb3I9bnVsbCx0aGlzLm1vZGU9IiIsdGhpcy5kYXRhUG9pbnRzPVtdLHRoaXMuYXhlc0JvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnRleHRMYWJlbHM9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgeT12LnByb3RvdHlwZTtmdW5jdGlvbiB4KHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKCJsZWZ0Iik+LTE/LTE6dC5pbmRleE9mKCJyaWdodCIpPi0xPzE6MH1mdW5jdGlvbiBiKHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKCJ0b3AiKT4tMT8tMTp0LmluZGV4T2YoImJvdHRvbSIpPi0xPzE6MH1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIGUoNCp0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBwW3RdfWZ1bmN0aW9uIFQodCxlLHIsbixpKXt2YXIgYT1udWxsO2lmKGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSl7YT1bXTtmb3IodmFyIG89MDtvPGU7bysrKXZvaWQgMD09PXRbb10/YVtvXT1uOmFbb109cih0W29dLGkpfWVsc2UgYT1yKHQsbC5pZGVudGl0eSk7cmV0dXJuIGF9ZnVuY3Rpb24gayh0LGUpe3ZhciByLG4saSxhLG8scyxmPVtdLHA9dC5mdWxsU2NlbmVMYXlvdXQsdj10LmRhdGFTY2FsZSx5PXAueGF4aXMsaz1wLnlheGlzLE09cC56YXhpcyxBPWUubWFya2VyLFM9ZS5saW5lLEU9ZS54fHxbXSxDPWUueXx8W10sTD1lLnp8fFtdLFA9RS5sZW5ndGgsST1lLnhjYWxlbmRhcix6PWUueWNhbGVuZGFyLE89ZS56Y2FsZW5kYXI7Zm9yKG89MDtvPFA7bysrKXI9eS5kMmwoRVtvXSwwLEkpKnZbMF0sbj1rLmQybChDW29dLDAseikqdlsxXSxpPU0uZDJsKExbb10sMCxPKSp2WzJdLGZbb109W3IsbixpXTtpZihBcnJheS5pc0FycmF5KGUudGV4dCkpcz1lLnRleHQ7ZWxzZSBpZih2b2lkIDAhPT1lLnRleHQpZm9yKHM9bmV3IEFycmF5KFApLG89MDtvPFA7bysrKXNbb109ZS50ZXh0O2Z1bmN0aW9uIEQodCxlKXt2YXIgcj1wW3RdO3JldHVybiBkLnRpY2tUZXh0KHIsci5kMmwoZSksITApLnRleHR9dmFyIFI9ZS50ZXh0dGVtcGxhdGU7aWYoUil7dmFyIEY9dC5mdWxsTGF5b3V0Ll9kM2xvY2FsZSxCPUFycmF5LmlzQXJyYXkoUiksTj1CP01hdGgubWluKFIubGVuZ3RoLFApOlAsaj1CP2Z1bmN0aW9uKHQpe3JldHVybiBSW3RdfTpmdW5jdGlvbigpe3JldHVybiBSfTtmb3Iocz1uZXcgQXJyYXkoTiksbz0wO288TjtvKyspe3ZhciBVPXt4OkVbb10seTpDW29dLHo6TFtvXX0sVj17eExhYmVsOkQoInhheGlzIixFW29dKSx5TGFiZWw6RCgieWF4aXMiLENbb10pLHpMYWJlbDpEKCJ6YXhpcyIsTFtvXSl9LHE9e307ZyhxLGUsbyk7dmFyIEg9ZS5fbWV0YXx8e307c1tvXT1sLnRleHR0ZW1wbGF0ZVN0cmluZyhqKG8pLFYsRixxLFUsSCl9fWlmKGE9e3Bvc2l0aW9uOmYsbW9kZTplLm1vZGUsdGV4dDpzfSwibGluZSJpbiBlJiYoYS5saW5lQ29sb3I9dShTLDEsUCksYS5saW5lV2lkdGg9Uy53aWR0aCxhLmxpbmVEYXNoZXM9Uy5kYXNoKSwibWFya2VyImluIGUpe3ZhciBHPWgoZSk7YS5zY2F0dGVyQ29sb3I9dShBLDEsUCksYS5zY2F0dGVyU2l6ZT1UKEEuc2l6ZSxQLF8sMjAsRyksYS5zY2F0dGVyTWFya2VyPVQoQS5zeW1ib2wsUCx3LCJcdTI1Y2YiKSxhLnNjYXR0ZXJMaW5lV2lkdGg9QS5saW5lLndpZHRoLGEuc2NhdHRlckxpbmVDb2xvcj11KEEubGluZSwxLFApLGEuc2NhdHRlckFuZ2xlPTB9InRleHRwb3NpdGlvbiJpbiBlJiYoYS50ZXh0T2Zmc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPVswLDBdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZVtyXT1bMCwwXSx0W3JdJiYoZVtyXVswXT14KHRbcl0pLGVbcl1bMV09Yih0W3JdKSk7ZWxzZSBlWzBdPXgodCksZVsxXT1iKHQpO3JldHVybiBlfShlLnRleHRwb3NpdGlvbiksYS50ZXh0Q29sb3I9dShlLnRleHRmb250LDEsUCksYS50ZXh0U2l6ZT1UKGUudGV4dGZvbnQuc2l6ZSxQLGwuaWRlbnRpdHksMTIpLGEudGV4dEZvbnQ9ZS50ZXh0Zm9udC5mYW1pbHksYS50ZXh0QW5nbGU9MCk7dmFyIFk9WyJ4IiwieSIsInoiXTtmb3IoYS5wcm9qZWN0PVshMSwhMSwhMV0sYS5wcm9qZWN0U2NhbGU9WzEsMSwxXSxhLnByb2plY3RPcGFjaXR5PVsxLDEsMV0sbz0wO288MzsrK28pe3ZhciBXPWUucHJvamVjdGlvbltZW29dXTsoYS5wcm9qZWN0W29dPVcuc2hvdykmJihhLnByb2plY3RPcGFjaXR5W29dPVcub3BhY2l0eSxhLnByb2plY3RTY2FsZVtvXT1XLnNjYWxlKX1hLmVycm9yQm91bmRzPW0oZSx2LHApO3ZhciBaPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bMCwwLDBdLHI9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxuPVsxLDEsMV0saT0wO2k8MztpKyspe3ZhciBhPXRbaV07YSYmITEhPT1hLmNvcHlfenN0eWxlJiYhMSE9PXRbMl0udmlzaWJsZSYmKGE9dFsyXSksYSYmYS52aXNpYmxlJiYoZVtpXT1hLndpZHRoLzIscltpXT1jKGEuY29sb3IpLG5baV09YS50aGlja25lc3MpfXJldHVybntjYXBTaXplOmUsY29sb3I6cixsaW5lV2lkdGg6bn19KFtlLmVycm9yX3gsZS5lcnJvcl95LGUuZXJyb3Jfel0pO3JldHVybiBhLmVycm9yQ29sb3I9Wi5jb2xvcixhLmVycm9yTGluZVdpZHRoPVoubGluZVdpZHRoLGEuZXJyb3JDYXBTaXplPVouY2FwU2l6ZSxhLmRlbGF1bmF5QXhpcz1lLnN1cmZhY2VheGlzLGEuZGVsYXVuYXlDb2xvcj1jKGUuc3VyZmFjZWNvbG9yKSxhfWZ1bmN0aW9uIE0odCl7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKXt2YXIgZT10WzBdO3JldHVybiBsLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkmJih0PWUpLCJyZ2IoIit0LnNsaWNlKDAsMykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqdCl9KSkrIikifXJldHVybiBudWxsfWZ1bmN0aW9uIEEodCl7cmV0dXJuIGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KT80PT09dC5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgdFswXT9NKHQpOnQubWFwKE0pOm51bGx9eS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0JiYodC5vYmplY3Q9PT10aGlzLmxpbmVQbG90fHx0Lm9iamVjdD09PXRoaXMuZGVsYXVuYXlNZXNofHx0Lm9iamVjdD09PXRoaXMudGV4dE1hcmtlcnN8fHQub2JqZWN0PT09dGhpcy5zY2F0dGVyUGxvdCkpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3JldHVybiB0Lm9iamVjdC5oaWdobGlnaHQmJnQub2JqZWN0LmhpZ2hsaWdodChudWxsKSx0aGlzLnNjYXR0ZXJQbG90JiYodC5vYmplY3Q9dGhpcy5zY2F0dGVyUGxvdCx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodCh0LmRhdGEpKSx0LnRleHRMYWJlbD0iIix0aGlzLnRleHRMYWJlbHMmJihBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/KHRoaXMudGV4dExhYmVsc1tlXXx8MD09PXRoaXMudGV4dExhYmVsc1tlXSkmJih0LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHNbZV0pOnQudGV4dExhYmVsPXRoaXMudGV4dExhYmVscyksdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXSwhMH19LHkudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHU9dGhpcy5zY2VuZS5nbHBsb3QuZ2wsaD1mLnNvbGlkO3RoaXMuZGF0YT10O3ZhciBwPWsodGhpcy5zY2VuZSx0KTsibW9kZSJpbiBwJiYodGhpcy5tb2RlPXAubW9kZSksImxpbmVEYXNoZXMiaW4gcCYmcC5saW5lRGFzaGVzIGluIGYmJihoPWZbcC5saW5lRGFzaGVzXSksdGhpcy5jb2xvcj1BKHAuc2NhdHRlckNvbG9yKXx8QShwLmxpbmVDb2xvciksdGhpcy5kYXRhUG9pbnRzPXAucG9zaXRpb24sZT17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixjb2xvcjpwLmxpbmVDb2xvcixsaW5lV2lkdGg6cC5saW5lV2lkdGh8fDEsZGFzaGVzOmhbMF0sZGFzaFNjYWxlOmhbMV0sb3BhY2l0eTp0Lm9wYWNpdHksY29ubmVjdEdhcHM6dC5jb25uZWN0Z2Fwc30sLTEhPT10aGlzLm1vZGUuaW5kZXhPZigibGluZXMiKT90aGlzLmxpbmVQbG90P3RoaXMubGluZVBsb3QudXBkYXRlKGUpOih0aGlzLmxpbmVQbG90PW4oZSksdGhpcy5saW5lUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5saW5lUGxvdCkpOnRoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCksdGhpcy5saW5lUGxvdD1udWxsKTt2YXIgZD10Lm9wYWNpdHk7aWYodC5tYXJrZXImJnQubWFya2VyLm9wYWNpdHkmJihkKj10Lm1hcmtlci5vcGFjaXR5KSxyPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuc2NhdHRlckNvbG9yLHNpemU6cC5zY2F0dGVyU2l6ZSxnbHlwaDpwLnNjYXR0ZXJNYXJrZXIsb3BhY2l0eTpkLG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6cC5zY2F0dGVyTGluZVdpZHRoLGxpbmVDb2xvcjpwLnNjYXR0ZXJMaW5lQ29sb3IscHJvamVjdDpwLnByb2plY3QscHJvamVjdFNjYWxlOnAucHJvamVjdFNjYWxlLHByb2plY3RPcGFjaXR5OnAucHJvamVjdE9wYWNpdHl9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKT90aGlzLnNjYXR0ZXJQbG90P3RoaXMuc2NhdHRlclBsb3QudXBkYXRlKHIpOih0aGlzLnNjYXR0ZXJQbG90PWkociksdGhpcy5zY2F0dGVyUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodFNjYWxlPTEsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuc2NhdHRlclBsb3QpKTp0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCksYz17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixnbHlwaDpwLnRleHQsY29sb3I6cC50ZXh0Q29sb3Isc2l6ZTpwLnRleHRTaXplLGFuZ2xlOnAudGV4dEFuZ2xlLGFsaWdubWVudDpwLnRleHRPZmZzZXQsZm9udDpwLnRleHRGb250LG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6MCxwcm9qZWN0OiExLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLnRleHRMYWJlbHM9dC5ob3ZlcnRleHR8fHQudGV4dCwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJ0ZXh0Iik/dGhpcy50ZXh0TWFya2Vycz90aGlzLnRleHRNYXJrZXJzLnVwZGF0ZShjKToodGhpcy50ZXh0TWFya2Vycz1pKGMpLHRoaXMudGV4dE1hcmtlcnMuX3RyYWNlPXRoaXMsdGhpcy50ZXh0TWFya2Vycy5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnRleHRNYXJrZXJzKSk6dGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSx0aGlzLnRleHRNYXJrZXJzPW51bGwpLGw9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5lcnJvckNvbG9yLGVycm9yOnAuZXJyb3JCb3VuZHMsbGluZVdpZHRoOnAuZXJyb3JMaW5lV2lkdGgsY2FwU2l6ZTpwLmVycm9yQ2FwU2l6ZSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy5lcnJvckJhcnM/cC5lcnJvckJvdW5kcz90aGlzLmVycm9yQmFycy51cGRhdGUobCk6KHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpLHRoaXMuZXJyb3JCYXJzPW51bGwpOnAuZXJyb3JCb3VuZHMmJih0aGlzLmVycm9yQmFycz1hKGwpLHRoaXMuZXJyb3JCYXJzLl90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmVycm9yQmFycykpLHAuZGVsYXVuYXlBeGlzPj0wKXt2YXIgZz1mdW5jdGlvbih0LGUscil7dmFyIG4saT0ocisxKSUzLGE9KHIrMiklMyxvPVtdLGw9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGM9dFtuXTshaXNOYU4oY1tpXSkmJmlzRmluaXRlKGNbaV0pJiYhaXNOYU4oY1thXSkmJmlzRmluaXRlKGNbYV0pJiYoby5wdXNoKFtjW2ldLGNbYV1dKSxsLnB1c2gobikpfXZhciB1PXMobyk7Zm9yKG49MDtuPHUubGVuZ3RoOysrbilmb3IodmFyIGg9dVtuXSxmPTA7ZjxoLmxlbmd0aDsrK2YpaFtmXT1sW2hbZl1dO3JldHVybntwb3NpdGlvbnM6dCxjZWxsczp1LG1lc2hDb2xvcjplfX0ocC5wb3NpdGlvbixwLmRlbGF1bmF5Q29sb3IscC5kZWxhdW5heUF4aXMpO2cub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5kZWxhdW5heU1lc2g/dGhpcy5kZWxhdW5heU1lc2gudXBkYXRlKGcpOihnLmdsPXUsdGhpcy5kZWxhdW5heU1lc2g9byhnKSx0aGlzLmRlbGF1bmF5TWVzaC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5kZWxhdW5heU1lc2gpKX1lbHNlIHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCksdGhpcy5kZWxhdW5heU1lc2g9bnVsbCl9LHkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCkpLHRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCkpLHRoaXMuZXJyb3JCYXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCkpLHRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCkpLHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCkpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgdih0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NTEsIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyI6NzIyLCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo3MjMsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NDYsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc3MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjExNzUsIi4vY2FsY19lcnJvcnMiOjExODgsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNzEsImdsLWVycm9yM2QiOjI2NCwiZ2wtbGluZTNkIjoyNzEsImdsLW1lc2gzZCI6MjkyLCJnbC1zY2F0dGVyM2QiOjMwOH1dLDExOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYyxyLG4pfWlmKGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPTAsbz1yKCJ4Iikscz1yKCJ5IiksbD1yKCJ6Iik7bi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxpKSxvJiZzJiZsJiYoYT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCxsLmxlbmd0aCksZS5fbGVuZ3RoPWUuX3hsZW5ndGg9ZS5feWxlbmd0aD1lLl96bGVuZ3RoPWEpO3JldHVybiBhfSh0LGUsaCx1KSl7aCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxoKCJtb2RlIiksYS5oYXNMaW5lcyhlKSYmKGgoImNvbm5lY3RnYXBzIikscyh0LGUscix1LGgpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsdSxoLHtub1NlbGVjdDohMH0pLGEuaGFzVGV4dChlKSYmKGgoInRleHR0ZW1wbGF0ZSIpLGwodCxlLHUsaCx7bm9TZWxlY3Q6ITB9KSk7dmFyIGY9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7aCgic3VyZmFjZWF4aXMiKT49MCYmaCgic3VyZmFjZWNvbG9yIixmfHxwKTtmb3IodmFyIGQ9WyJ4IiwieSIsInoiXSxnPTA7ZzwzOysrZyl7dmFyIG09InByb2plY3Rpb24uIitkW2ddO2gobSsiLnNob3ciKSYmKGgobSsiLm9wYWNpdHkiKSxoKG0rIi5zY2FsZSIpKX12YXIgdj1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt2KHQsZSxmfHxwfHxyLHtheGlzOiJ6In0pLHYodCxlLGZ8fHB8fHIse2F4aXM6InkiLGluaGVyaXQ6InoifSksdih0LGUsZnx8cHx8cix7YXhpczoieCIsaW5oZXJpdDoieiJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTE3MSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjExNzcsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExODMsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTE4NCwiLi9hdHRyaWJ1dGVzIjoxMTg2fV0sMTE5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3Bsb3Q6dCgiLi9jb252ZXJ0IiksYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxtYXJrZXJTeW1ib2xzOnQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6W3tjb250YWluZXI6Im1hcmtlciIsbWluOiJjbWluIixtYXg6ImNtYXgifSx7Y29udGFpbmVyOiJsaW5lIixtaW46ImNtaW4iLG1heDoiY21heCJ9XSxjYWxjOnQoIi4vY2FsYyIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyM2QiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyI6NzIzLCIuLi8uLi9wbG90cy9nbDNkIjo4NDEsIi4vYXR0cmlidXRlcyI6MTE4NiwiLi9jYWxjIjoxMTg3LCIuL2NvbnZlcnQiOjExODksIi4vZGVmYXVsdHMiOjExOTB9XSwxMTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW4ubWFya2VyLHU9bi5saW5lLGg9Yy5saW5lO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1vZGU6bCh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LG4udGV4dCx7fSksdGV4dHRlbXBsYXRlOm8oe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJhIiwiYiIsInRleHQiXX0pLGhvdmVydGV4dDpsKHt9LG4uaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjp1LmNvbG9yLHdpZHRoOnUud2lkdGgsZGFzaDp1LmRhc2gsc2hhcGU6bCh7fSx1LnNoYXBlLHt2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiXX0pLHNtb290aGluZzp1LnNtb290aGluZyxlZGl0VHlwZToiY2FsYyJ9LGNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsZmlsbDpsKHt9LG4uZmlsbCx7dmFsdWVzOlsibm9uZSIsInRvc2VsZiIsInRvbmV4dCJdLGRmbHQ6Im5vbmUifSksZmlsbGNvbG9yOm4uZmlsbGNvbG9yLG1hcmtlcjpsKHtzeW1ib2w6Yy5zeW1ib2wsb3BhY2l0eTpjLm9wYWNpdHksbWF4ZGlzcGxheWVkOmMubWF4ZGlzcGxheWVkLHNpemU6Yy5zaXplLHNpemVyZWY6Yy5zaXplcmVmLHNpemVtaW46Yy5zaXplbWluLHNpemVtb2RlOmMuc2l6ZW1vZGUsbGluZTpsKHt3aWR0aDpoLndpZHRoLGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyLmxpbmUiKSksZ3JhZGllbnQ6Yy5ncmFkaWVudCxlZGl0VHlwZToiY2FsYyJ9LHMoIm1hcmtlciIpKSx0ZXh0Zm9udDpuLnRleHRmb250LHRleHRwb3NpdGlvbjpuLnRleHRwb3NpdGlvbixzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyaW5mbzpsKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246bi5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6YSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjIyLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc5NSwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODc3LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExNTh9XSwxMTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGE9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGw9dCgiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWwodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7dmFyIGM7ZS54YXhpcz1yLnhheGlzLGUueWF4aXM9ci55YXhpczt2YXIgdSxoLGY9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGYpLGQ9ITE7Zm9yKGM9MDtjPGY7YysrKWlmKHU9ZS5hW2NdLGg9ZS5iW2NdLG4odSkmJm4oaCkpe3ZhciBnPXIuYWIyeHkoK3UsK2gsITApLG09ci5pc1Zpc2libGUoK3UsK2gpO218fChkPSEwKSxwW2NdPXt4OmdbMF0seTpnWzFdLGE6dSxiOmgsdmlzOm19fWVsc2UgcFtjXT17eDohMSx5OiExfTtyZXR1cm4gZS5fbmVlZHNDdWxsPWQscFswXS5jYXJwZXQ9cixwWzBdLnRyYWNlPWUscyhlLGYpLGkodCxlKSxhKHAsZSksbyhwLGUpLHB9fX0seyIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo5NTIsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTU3LCIuLi9zY2F0dGVyL2NhbGMiOjExNTksIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExNjAsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMTYxLCJmYXN0LWlzbnVtZXJpYyI6MjQxfV0sMTE5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxoPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxoLHIsaSl9cCgiY2FycGV0IiksZS54YXhpcz0ieCIsZS55YXhpcz0ieSI7dmFyIGQ9cCgiYSIpLGc9cCgiYiIpLG09TWF0aC5taW4oZC5sZW5ndGgsZy5sZW5ndGgpO2lmKG0pe2UuX2xlbmd0aD1tLHAoInRleHQiKSxwKCJ0ZXh0dGVtcGxhdGUiKSxwKCJob3ZlcnRleHQiKSxwKCJtb2RlIixtPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsZixwKSxsKHQsZSxwKSxwKCJjb25uZWN0Z2FwcyIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsZixwLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsZixwKTt2YXIgdj1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocCgibWFya2VyLm1heGRpc3BsYXllZCIpLHYucHVzaCgicG9pbnRzIikpLHAoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJih1KHQsZSxyLHApLGEuaGFzTGluZXMoZSl8fGwodCxlLHApKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fHYucHVzaCgiZmlsbHMiKSwiZmlsbHMiIT09cCgiaG92ZXJvbiIsdi5qb2luKCIrIil8fCJwb2ludHMiKSYmcCgiaG92ZXJ0ZW1wbGF0ZSIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vc2NhdHRlci9jb25zdGFudHMiOjExNjIsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTY2LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjExNzEsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTE3MywiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjExNzcsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExODMsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTE4NCwiLi9hdHRyaWJ1dGVzIjoxMTkyfV0sMTE5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uW2ldO3JldHVybiB0LmE9YS5hLHQuYj1hLmIsdC55PWEueSx0fX0se31dLDExOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbj1lLl9jYXJwZXQsaT1uLmFiMmlqKFt0LmEsdC5iXSksYT1NYXRoLmZsb29yKGlbMF0pLG89aVswXS1hLHM9TWF0aC5mbG9vcihpWzFdKSxsPWlbMV0tcyxjPW4uZXZhbHh5KFtdLGEscyxvLGwpO3JldHVybiByLnlMYWJlbD1jWzFdLnRvRml4ZWQoMykscn19LHt9XSwxMTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKSxpPXQoIi4uLy4uL2xpYiIpLmZpbGxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8mJiExIT09b1swXS5pbmRleCl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXt2YXIgbD0xLXMueTAvdC55YS5fbGVuZ3RoLGM9dC54YS5fbGVuZ3RoLHU9YypsLzIsaD1jLXU7cmV0dXJuIHMueDA9TWF0aC5tYXgoTWF0aC5taW4ocy54MCxoKSx1KSxzLngxPU1hdGgubWF4KE1hdGgubWluKHMueDEsaCksdSksb312YXIgZj1zLmNkW3MuaW5kZXhdO3MuYT1mLmEscy5iPWYuYixzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1wLl9jYXJwZXQsZz1wLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGYscCk7cy55TGFiZWw9Zy55TGFiZWwsZGVsZXRlIHMudGV4dDt2YXIgbT1bXTtpZighcC5ob3ZlcnRlbXBsYXRlKXt2YXIgdj0oZi5oaXx8cC5ob3ZlcmluZm8pLnNwbGl0KCIrIik7LTEhPT12LmluZGV4T2YoImFsbCIpJiYodj1bImEiLCJiIiwidGV4dCJdKSwtMSE9PXYuaW5kZXhPZigiYSIpJiZ5KGQuYWF4aXMsZi5hKSwtMSE9PXYuaW5kZXhPZigiYiIpJiZ5KGQuYmF4aXMsZi5iKSxtLnB1c2goInk6ICIrcy55TGFiZWwpLC0xIT09di5pbmRleE9mKCJ0ZXh0IikmJmkoZixwLG0pLHMuZXh0cmFUZXh0PW0uam9pbigiPGJyPiIpfXJldHVybiBvfWZ1bmN0aW9uIHkodCxlKXt2YXIgcjtyPXQubGFiZWxwcmVmaXgmJnQubGFiZWxwcmVmaXgubGVuZ3RoPjA/dC5sYWJlbHByZWZpeC5yZXBsYWNlKC8gPSAkLywiIik6dC5faG92ZXJ0aXRsZSxtLnB1c2gocisiOiAiK2UudG9GaXhlZCgzKSt0LmxhYmVsc3VmZml4KX19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi9zY2F0dGVyL2hvdmVyIjoxMTY5fV0sMTE5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL3NjYXR0ZXIvc2VsZWN0IiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsic3ZnIiwiY2FycGV0Iiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJjYXJwZXREZXBlbmRlbnQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjgxMiwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjExNzYsIi4uL3NjYXR0ZXIvc2VsZWN0IjoxMTgwLCIuLi9zY2F0dGVyL3N0eWxlIjoxMTgyLCIuL2F0dHJpYnV0ZXMiOjExOTIsIi4vY2FsYyI6MTE5MywiLi9kZWZhdWx0cyI6MTE5NCwiLi9ldmVudF9kYXRhIjoxMTk1LCIuL2Zvcm1hdF9sYWJlbHMiOjExOTYsIi4vaG92ZXIiOjExOTcsIi4vcGxvdCI6MTE5OX1dLDExOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYyx1PXJbMF1bMF0uY2FycGV0LGg9e3hheGlzOmkuZ2V0RnJvbUlkKHQsdS54YXhpc3x8IngiKSx5YXhpczppLmdldEZyb21JZCh0LHUueWF4aXN8fCJ5IikscGxvdDplLnBsb3R9O2ZvcihuKHQsaCxyLG8pLHM9MDtzPHIubGVuZ3RoO3MrKylsPXJbc11bMF0udHJhY2UsYz1vLnNlbGVjdEFsbCgiZy50cmFjZSIrbC51aWQrIiAuanMtbGluZSIpLGEuc2V0Q2xpcFVybChjLHJbc11bMF0uY2FycGV0Ll9jbGlwUGF0aElkLHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vc2NhdHRlci9wbG90IjoxMTc5fV0sMTIwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaD1hLm1hcmtlcixmPWEubGluZSxwPWgubGluZTtlLmV4cG9ydHM9dSh7bG9uOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sbGF0Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sbG9jYXRpb25tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJJU08tMyIsIlVTQS1zdGF0ZXMiLCJjb3VudHJ5IG5hbWVzIiwiZ2VvanNvbi1pZCJdLGRmbHQ6IklTTy0zIn0sZ2VvanNvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGZlYXR1cmVpZGtleTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyIsZGZsdDoiaWQifSxtb2RlOmMoe30sYS5tb2RlLHtkZmx0OiJtYXJrZXJzIn0pLHRleHQ6Yyh7fSxhLnRleHQse30pLHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsibGF0IiwibG9uIiwibG9jYXRpb24iLCJ0ZXh0Il19KSxob3ZlcnRleHQ6Yyh7fSxhLmhvdmVydGV4dCx7fSksdGV4dGZvbnQ6YS50ZXh0Zm9udCx0ZXh0cG9zaXRpb246YS50ZXh0cG9zaXRpb24sbGluZTp7Y29sb3I6Zi5jb2xvcix3aWR0aDpmLndpZHRoLGRhc2g6bH0sY29ubmVjdGdhcHM6YS5jb25uZWN0Z2FwcyxtYXJrZXI6Yyh7c3ltYm9sOmguc3ltYm9sLG9wYWNpdHk6aC5vcGFjaXR5LHNpemU6aC5zaXplLHNpemVyZWY6aC5zaXplcmVmLHNpemVtaW46aC5zaXplbWluLHNpemVtb2RlOmguc2l6ZW1vZGUsY29sb3JiYXI6aC5jb2xvcmJhcixsaW5lOmMoe3dpZHRoOnAud2lkdGh9LHMoIm1hcmtlci5saW5lIikpLGdyYWRpZW50OmguZ3JhZGllbnR9LHMoIm1hcmtlciIpKSxmaWxsOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwidG9zZWxmIl0sZGZsdDoibm9uZSJ9LGZpbGxjb2xvcjphLmZpbGxjb2xvcixzZWxlY3RlZDphLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6YS51bnNlbGVjdGVkLGhvdmVyaW5mbzpjKHt9LG8uaG92ZXJpbmZvLHtmbGFnczpbImxvbiIsImxhdCIsImxvY2F0aW9uIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MzYsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzgxLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTU4fV0sMTIwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksbz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vLi4vbGliIikuXztmdW5jdGlvbiBjKHQpe3JldHVybiB0JiYic3RyaW5nIj09dHlwZW9mIHR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdT1BcnJheS5pc0FycmF5KGUubG9jYXRpb25zKSxoPXU/ZS5sb2NhdGlvbnMubGVuZ3RoOmUuX2xlbmd0aCxmPW5ldyBBcnJheShoKTtyPWUuZ2VvanNvbj9mdW5jdGlvbih0KXtyZXR1cm4gYyh0KXx8bih0KX06Yztmb3IodmFyIHA9MDtwPGg7cCsrKXt2YXIgZD1mW3BdPXt9O2lmKHUpe3ZhciBnPWUubG9jYXRpb25zW3BdO2QubG9jPXIoZyk/ZzpudWxsfWVsc2V7dmFyIG09ZS5sb25bcF0sdj1lLmxhdFtwXTtuKG0pJiZuKHYpP2QubG9ubGF0PVsrbSwrdl06ZC5sb25sYXQ9W2ksaV19fXJldHVybiBvKGYsZSksYSh0LGUpLHMoZixlKSxoJiYoZlswXS50PXtsYWJlbHM6e2xhdDpsKHQsImxhdDoiKSsiICIsbG9uOmwodCwibG9uOiIpKyIgIn19KSxmfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYiI6NzUwLCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE1NywiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE2MCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExNjEsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX12YXIgZixwPWgoImxvY2F0aW9ucyIpO2lmKHAmJnAubGVuZ3RoKXt2YXIgZCxnPWgoImdlb2pzb24iKTsoInN0cmluZyI9PXR5cGVvZiBnJiYiIiE9PWd8fG4uaXNQbGFpbk9iamVjdChnKSkmJihkPSJnZW9qc29uLWlkIiksImdlb2pzb24taWQiPT09aCgibG9jYXRpb25tb2RlIixkKSYmaCgiZmVhdHVyZWlka2V5IiksZj1wLmxlbmd0aH1lbHNle3ZhciBtPWgoImxvbiIpfHxbXSx2PWgoImxhdCIpfHxbXTtmPU1hdGgubWluKG0ubGVuZ3RoLHYubGVuZ3RoKX1mPyhlLl9sZW5ndGg9ZixoKCJ0ZXh0IiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpLGgoIm1vZGUiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGgpLGgoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscix1LGgse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiYoaCgidGV4dHRlbXBsYXRlIikscyh0LGUsdSxoKSksaCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmbCh0LGUscixoKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxoKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExNjYsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTE3MSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjExNzcsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExODMsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTE4NCwiLi9hdHRyaWJ1dGVzIjoxMjAwfV0sMTIwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0LmxvY2F0aW9uPWUubG9jP2UubG9jOm51bGw7dmFyIGE9bltpXTtyZXR1cm4gYS5mSW4mJmEuZkluLnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXM9YS5mSW4ucHJvcGVydGllcyksdH19LHt9XSwxMjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxhPXJbZS5nZW9dLl9zdWJwbG90Lm1vY2tBeGlzLG89dC5sb25sYXQ7cmV0dXJuIGkubG9uTGFiZWw9bi50aWNrVGV4dChhLGEuYzJsKG9bMF0pLCEwKS50ZXh0LGkubGF0TGFiZWw9bi50aWNrVGV4dChhLGEuYzJsKG9bMV0pLCEwKS50ZXh0LGl9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTl9XSwxMjA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLG89dCgiLi4vLi4vbGliIikuZmlsbFRleHQscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPXQuY2QsYz1sWzBdLnRyYWNlLHU9dC54YSxoPXQueWEsZj10LnN1YnBsb3QscD1mLnByb2plY3Rpb24uaXNMb25MYXRPdmVyRWRnZXMsZD1mLnByb2plY3Q7aWYobi5nZXRDbG9zZXN0KGwsKGZ1bmN0aW9uKHQpe3ZhciBuPXQubG9ubGF0O2lmKG5bMF09PT1pKXJldHVybiAxLzA7aWYocChuKSlyZXR1cm4gMS8wO3ZhciBhPWQobiksbz1kKFtlLHJdKSxzPU1hdGguYWJzKGFbMF0tb1swXSksbD1NYXRoLmFicyhhWzFdLW9bMV0pLGM9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChzKnMrbCpsKS1jLDEtMy9jKX0pLHQpLCExIT09dC5pbmRleCl7dmFyIGc9bFt0LmluZGV4XSxtPWcubG9ubGF0LHY9W3UuYzJwKG0pLGguYzJwKG0pXSx5PWcubXJjfHwxO3QueDA9dlswXS15LHQueDE9dlswXSt5LHQueTA9dlsxXS15LHQueTE9dlsxXSt5LHQubG9jPWcubG9jLHQubG9uPW1bMF0sdC5sYXQ9bVsxXTt2YXIgeD17fTt4W2MuZ2VvXT17X3N1YnBsb3Q6Zn07dmFyIGI9Yy5fbW9kdWxlLmZvcm1hdExhYmVscyhnLGMseCk7cmV0dXJuIHQubG9uTGFiZWw9Yi5sb25MYWJlbCx0LmxhdExhYmVsPWIubGF0TGFiZWwsdC5jb2xvcj1hKGMsZyksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIsbil7aWYodC5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgaT1lLmhpfHx0LmhvdmVyaW5mbyxhPSJhbGwiPT09aT9zLmhvdmVyaW5mby5mbGFnczppLnNwbGl0KCIrIiksbD0tMSE9PWEuaW5kZXhPZigibG9jYXRpb24iKSYmQXJyYXkuaXNBcnJheSh0LmxvY2F0aW9ucyksYz0tMSE9PWEuaW5kZXhPZigibG9uIiksdT0tMSE9PWEuaW5kZXhPZigibGF0IiksaD0tMSE9PWEuaW5kZXhPZigidGV4dCIpLGY9W107ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdCsiXHhiMCJ9bD9mLnB1c2goZS5sb2MpOmMmJnU/Zi5wdXNoKCIoIitwKHIubG9uTGFiZWwpKyIsICIrcChyLmxhdExhYmVsKSsiKSIpOmM/Zi5wdXNoKG4ubG9uK3Aoci5sb25MYWJlbCkpOnUmJmYucHVzaChuLmxhdCtwKHIubGF0TGFiZWwpKTtoJiZvKGUsdCxmKTtyZXR1cm4gZi5qb2luKCI8YnI+Iil9KGMsZyx0LGxbMF0udC5sYWJlbHMpLHQuaG92ZXJ0ZW1wbGF0ZT1jLmhvdmVydGVtcGxhdGUsW3RdfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjU1LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYiI6NzUwLCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTE2OCwiLi9hdHRyaWJ1dGVzIjoxMjAwfV0sMTIwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIiksY2FsY0dlb0pTT046dCgiLi9wbG90IikuY2FsY0dlb0pTT04scGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJnZW8iLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dlbyIpLGNhdGVnb3JpZXM6WyJnZW8iLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dlbyI6ODMxLCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTE3NiwiLi4vc2NhdHRlci9zdHlsZSI6MTE4MiwiLi9hdHRyaWJ1dGVzIjoxMjAwLCIuL2NhbGMiOjEyMDEsIi4vZGVmYXVsdHMiOjEyMDIsIi4vZXZlbnRfZGF0YSI6MTIwMywiLi9mb3JtYXRfbGFiZWxzIjoxMjA0LCIuL2hvdmVyIjoxMjA1LCIuL3Bsb3QiOjEyMDcsIi4vc2VsZWN0IjoxMjA4LCIuL3N0eWxlIjoxMjA5fV0sMTIwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKS5nZXRUb3BvanNvbkZlYXR1cmVzLG89dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKSxzPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5maW5kRXh0cmVtZXMsYz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHU9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsaD10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksZj10KCIuL3N0eWxlIik7ZS5leHBvcnRzPXtjYWxjR2VvSlNPTjpmdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLnRyYWNlLG89ZVtpLmdlb10saD1vLl9zdWJwbG90LGY9aS5fbGVuZ3RoO2lmKEFycmF5LmlzQXJyYXkoaS5sb2NhdGlvbnMpKXt2YXIgcD1pLmxvY2F0aW9ubW9kZSxkPSJnZW9qc29uLWlkIj09PXA/cy5leHRyYWN0VHJhY2VGZWF0dXJlKHQpOmEoaSxoLnRvcG9qc29uKTtmb3Iocj0wO3I8ZjtyKyspe249dFtyXTt2YXIgZz0iZ2VvanNvbi1pZCI9PT1wP24uZk91dDpzLmxvY2F0aW9uVG9GZWF0dXJlKHAsbi5sb2MsZCk7bi5sb25sYXQ9Zz9nLnByb3BlcnRpZXMuY3Q6W2MsY119fXZhciBtLHYseT17cGFkZGVkOiEwfTtpZigiZ2VvanNvbiI9PT1vLmZpdGJvdW5kcyYmImdlb2pzb24taWQiPT09aS5sb2NhdGlvbm1vZGUpe3ZhciB4PXMuY29tcHV0ZUJib3gocy5nZXRUcmFjZUdlb2pzb24oaSkpO209W3hbMF0seFsyXV0sdj1beFsxXSx4WzNdXX1lbHNle2ZvcihtPW5ldyBBcnJheShmKSx2PW5ldyBBcnJheShmKSxyPTA7cjxmO3IrKyluPXRbcl0sbVtyXT1uLmxvbmxhdFswXSx2W3JdPW4ubG9ubGF0WzFdO3kucHBhZD11KGksZil9aS5fZXh0cmVtZXMubG9uPWwoby5sb25heGlzLl9heCxtLHkpLGkuX2V4dHJlbWVzLmxhdD1sKG8ubGF0YXhpcy5fYXgsdix5KX0scGxvdDpmdW5jdGlvbih0LGUscil7dmFyIGE9ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLHM9aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBzY2F0dGVyZ2VvIik7ZnVuY3Rpb24gbCh0LGUpe3QubG9ubGF0WzBdPT09YyYmbi5zZWxlY3QoZSkucmVtb3ZlKCl9cy5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxzLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ZVswXS50cmFjZTtpZihoLmhhc0xpbmVzKGEpfHwibm9uZSIhPT1hLmZpbGwpe3ZhciBzPW8uY2FsY1RyYWNlVG9MaW5lQ29vcmRzKGUpLGM9Im5vbmUiIT09YS5maWxsP28ubWFrZVBvbHlnb24ocyk6by5tYWtlTGluZShzKTtyLnNlbGVjdEFsbCgicGF0aC5qcy1saW5lIikuZGF0YShbe2dlb2pzb246Yyx0cmFjZTphfV0pLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtbGluZSIsITApLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMil9aC5oYXNNYXJrZXJzKGEpJiZyLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLmRhdGEoaS5pZGVudGl0eSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApLmVhY2goKGZ1bmN0aW9uKHQpe2wodCx0aGlzKX0pKSxoLmhhc1RleHQoYSkmJnIuc2VsZWN0QWxsKCJnIikuZGF0YShpLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgiZyIpLmFwcGVuZCgidGV4dCIpLmVhY2goKGZ1bmN0aW9uKHQpe2wodCx0aGlzKX0pKSxmKHQsZSl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3NDMsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo3NDQsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6Nzc3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo3OTgsIi4uL3NjYXR0ZXIvY2FsYyI6MTE1OSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTE4MywiLi9zdHlsZSI6MTIwOSxkMzoxNjl9XSwxMjA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHMsbCxjPXQuY2QsdT10LnhheGlzLGg9dC55YXhpcyxmPVtdLHA9Y1swXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKHApJiYhbi5oYXNUZXh0KHApKXJldHVybltdO2lmKCExPT09ZSlmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKWNbbF0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihsPTA7bDxjLmxlbmd0aDtsKyspKGE9KHI9Y1tsXSkubG9ubGF0KVswXSE9PWkmJihvPXUuYzJwKGEpLHM9aC5jMnAoYSksZS5jb250YWlucyhbbyxzXSxudWxsLGwsdCk/KGYucHVzaCh7cG9pbnROdW1iZXI6bCxsb246YVswXSxsYXQ6YVsxXX0pLHIuc2VsZWN0ZWQ9MSk6ci5zZWxlY3RlZD0wKTtyZXR1cm4gZn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMTgzfV0sMTIwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9zY2F0dGVyL3N0eWxlIikscz1vLnN0eWxlUG9pbnRzLGw9by5zdHlsZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZSYmZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLG89ZVswXS5ub2RlMztvLnN0eWxlKCJvcGFjaXR5IixlWzBdLnRyYWNlLm9wYWNpdHkpLHMobyxyLHQpLGwobyxyLHQpLG8uc2VsZWN0QWxsKCJwYXRoLmpzLWxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXQudHJhY2Usbz1yLmxpbmV8fHt9O2UuY2FsbChhLnN0cm9rZSxvLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsby5kYXNofHwiIixvLndpZHRofHwwKSwibm9uZSIhPT1yLmZpbGwmJmUuY2FsbChhLmZpbGwsci5maWxsY29sb3IpfSkpfSh0LGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi9zY2F0dGVyL3N0eWxlIjoxMTgyLGQzOjE2OX1dLDEyMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD10KCIuL2NvbnN0YW50cyIpLkRBU0hFUyxjPWkubGluZSx1PWkubWFya2VyLGg9dS5saW5lLGY9ZS5leHBvcnRzPXMoe3g6aS54LHgwOmkueDAsZHg6aS5keCx5OmkueSx5MDppLnkwLGR5OmkuZHkseHBlcmlvZDppLnhwZXJpb2QseXBlcmlvZDppLnlwZXJpb2QseHBlcmlvZDA6aS54cGVyaW9kMCx5cGVyaW9kMDppLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6aS54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6aS55cGVyaW9kYWxpZ25tZW50LHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCx0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24sdGV4dGZvbnQ6aS50ZXh0Zm9udCxtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsaW5lcyIsIm1hcmtlcnMiLCJ0ZXh0Il0sZXh0cmFzOlsibm9uZSJdfSxsaW5lOntjb2xvcjpjLmNvbG9yLHdpZHRoOmMud2lkdGgsc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImh2IiwidmgiLCJodmgiLCJ2aHYiXSxkZmx0OiJsaW5lYXIiLGVkaXRUeXBlOiJwbG90In0sZGFzaDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGwpLGRmbHQ6InNvbGlkIn19LG1hcmtlcjpvKHt9LGEoIm1hcmtlciIpLHtzeW1ib2w6dS5zeW1ib2wsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxvcGFjaXR5OnUub3BhY2l0eSxjb2xvcmJhcjp1LmNvbG9yYmFyLGxpbmU6byh7fSxhKCJtYXJrZXIubGluZSIpLHt3aWR0aDpoLndpZHRofSl9KSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGZpbGw6byh7fSxpLmZpbGwse2RmbHQ6Im5vbmUifSksZmlsbGNvbG9yOmkuZmlsbGNvbG9yLHNlbGVjdGVkOnttYXJrZXI6aS5zZWxlY3RlZC5tYXJrZXIsdGV4dGZvbnQ6aS5zZWxlY3RlZC50ZXh0Zm9udH0sdW5zZWxlY3RlZDp7bWFya2VyOmkudW5zZWxlY3RlZC5tYXJrZXIsdGV4dGZvbnQ6aS51bnNlbGVjdGVkLnRleHRmb250fSxvcGFjaXR5Om4ub3BhY2l0eX0sImNhbGMiLCJuZXN0ZWQiKTtmLnguZWRpdFR5cGU9Zi55LmVkaXRUeXBlPWYueDAuZWRpdFR5cGU9Zi55MC5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsZi5ob3ZlcnRlbXBsYXRlPWkuaG92ZXJ0ZW1wbGF0ZSxmLnRleHR0ZW1wbGF0ZT1pLnRleHR0ZW1wbGF0ZX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjIyLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzk1LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExNTgsIi4vY29uc3RhbnRzIjoxMjEyfV0sMTIxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L3BvaW50LWNsdXN0ZXIiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLGw9dCgiLi4vc2NhdHRlci9jYWxjIiksYz1sLmNhbGNNYXJrZXJTaXplLHU9bC5jYWxjQXhpc0V4cGFuc2lvbixoPWwuc2V0Rmlyc3RTY2F0dGVyLGY9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxwPXQoIi4vY29udmVydCIpLGQ9dCgiLi9zY2VuZV91cGRhdGUiKSxnPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbT10KCIuL2NvbnN0YW50cyIpLlRPT19NQU5ZX1BPSU5UUztmdW5jdGlvbiB2KHQsZSxyKXt2YXIgbj10Ll9leHRyZW1lc1tlLl9pZF0saT1vKGUsci5fYm5kcyx7cGFkZGVkOiEwfSk7bi5taW49bi5taW4uY29uY2F0KGkubWluKSxuLm1heD1uLm1heC5jb25jYXQoaS5tYXgpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG8sbCx5PXQuX2Z1bGxMYXlvdXQseD1hLmdldEZyb21JZCh0LGUueGF4aXMpLGI9YS5nZXRGcm9tSWQodCxlLnlheGlzKSxfPXkuX3Bsb3RzW2UueGF4aXMrZS55YXhpc10sdz1lLl9sZW5ndGgsVD13Pj1tLGs9Mip3LE09e30sQT14Lm1ha2VDYWxjZGF0YShlLCJ4IiksUz1iLm1ha2VDYWxjZGF0YShlLCJ5IiksRT1zKGUseCwieCIsQSksQz1zKGUsYiwieSIsUyk7ZS5feD1FLGUuX3k9QyxlLnhwZXJpb2RhbGlnbm1lbnQmJihlLl9vcmlnWD1BKSxlLnlwZXJpb2RhbGlnbm1lbnQmJihlLl9vcmlnWT1TKTt2YXIgTD1uZXcgQXJyYXkoayk7Zm9yKHI9MDtyPHc7cisrKW89RVtyXSxsPUNbcl0sTFsyKnJdPW89PT1nP05hTjpvLExbMipyKzFdPWw9PT1nP05hTjpsO2lmKCJsb2ciPT09eC50eXBlKWZvcihyPTA7cjxrO3IrPTIpTFtyXT14LmMybChMW3JdKTtpZigibG9nIj09PWIudHlwZSlmb3Iocj0xO3I8aztyKz0yKUxbcl09Yi5jMmwoTFtyXSk7aWYoVCYmImxvZyIhPT14LnR5cGUmJiJsb2ciIT09Yi50eXBlKU0udHJlZT1uKEwpO2Vsc2V7dmFyIFA9TS5pZHM9bmV3IEFycmF5KHcpO2ZvcihyPTA7cjx3O3IrKylQW3JdPXJ9Zih0LGUpO3ZhciBJLHo9ZnVuY3Rpb24odCxlLHIsbixhLG8pe3ZhciBzPXAuc3R5bGUodCxyKTtzLm1hcmtlciYmKHMubWFya2VyLnBvc2l0aW9ucz1uKTtzLmxpbmUmJm4ubGVuZ3RoPjEmJmkuZXh0ZW5kRmxhdChzLmxpbmUscC5saW5lUG9zaXRpb25zKHQscixuKSk7aWYocy5lcnJvclh8fHMuZXJyb3JZKXt2YXIgbD1wLmVycm9yQmFyUG9zaXRpb25zKHQscixuLGEsbyk7cy5lcnJvclgmJmkuZXh0ZW5kRmxhdChzLmVycm9yWCxsLngpLHMuZXJyb3JZJiZpLmV4dGVuZEZsYXQocy5lcnJvclksbC55KX1zLnRleHQmJihpLmV4dGVuZEZsYXQocy50ZXh0LHtwb3NpdGlvbnM6bn0scC50ZXh0UG9zaXRpb24odCxyLHMudGV4dCxzLm1hcmtlcikpLGkuZXh0ZW5kRmxhdChzLnRleHRTZWwse3Bvc2l0aW9uczpufSxwLnRleHRQb3NpdGlvbih0LHIscy50ZXh0LHMubWFya2VyU2VsKSksaS5leHRlbmRGbGF0KHMudGV4dFVuc2VsLHtwb3NpdGlvbnM6bn0scC50ZXh0UG9zaXRpb24odCxyLHMudGV4dCxzLm1hcmtlclVuc2VsKSkpO3JldHVybiBzfSh0LDAsZSxMLEUsQyksTz1kKHQsXyk7cmV0dXJuIGgoeSxlKSxUP3oubWFya2VyJiYoST0yKih6Lm1hcmtlci5zaXplQXZnfHxNYXRoLm1heCh6Lm1hcmtlci5zaXplLDMpKSk6ST1jKGUsdyksdSh0LGUseCxiLEUsQyxJKSx6LmVycm9yWCYmdihlLHgsei5lcnJvclgpLHouZXJyb3JZJiZ2KGUsYix6LmVycm9yWSksei5maWxsJiYhTy5maWxsMmQmJihPLmZpbGwyZD0hMCksei5tYXJrZXImJiFPLnNjYXR0ZXIyZCYmKE8uc2NhdHRlcjJkPSEwKSx6LmxpbmUmJiFPLmxpbmUyZCYmKE8ubGluZTJkPSEwKSwhei5lcnJvclgmJiF6LmVycm9yWXx8Ty5lcnJvcjJkfHwoTy5lcnJvcjJkPSEwKSx6LnRleHQmJiFPLmdsVGV4dCYmKE8uZ2xUZXh0PSEwKSx6Lm1hcmtlciYmKHoubWFya2VyLnNuYXA9dyksTy5saW5lT3B0aW9ucy5wdXNoKHoubGluZSksTy5lcnJvclhPcHRpb25zLnB1c2goei5lcnJvclgpLE8uZXJyb3JZT3B0aW9ucy5wdXNoKHouZXJyb3JZKSxPLmZpbGxPcHRpb25zLnB1c2goei5maWxsKSxPLm1hcmtlck9wdGlvbnMucHVzaCh6Lm1hcmtlciksTy5tYXJrZXJTZWxlY3RlZE9wdGlvbnMucHVzaCh6Lm1hcmtlclNlbCksTy5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHoubWFya2VyVW5zZWwpLE8udGV4dE9wdGlvbnMucHVzaCh6LnRleHQpLE8udGV4dFNlbGVjdGVkT3B0aW9ucy5wdXNoKHoudGV4dFNlbCksTy50ZXh0VW5zZWxlY3RlZE9wdGlvbnMucHVzaCh6LnRleHRVbnNlbCksTy5zZWxlY3RCYXRjaC5wdXNoKFtdKSxPLnVuc2VsZWN0QmF0Y2gucHVzaChbXSksTS5fc2NlbmU9TyxNLmluZGV4PU8uY291bnQsTS54PUUsTS55PUMsTS5wb3NpdGlvbnM9TCxPLmNvdW50KyssW3t4OiExLHk6ITEsdDpNLHRyYWNlOmV9XX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6Nzk2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo3OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODAyLCIuLi9zY2F0dGVyL2NhbGMiOjExNTksIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMTYxLCIuL2NvbnN0YW50cyI6MTIxMiwiLi9jb252ZXJ0IjoxMjEzLCIuL3NjZW5lX3VwZGF0ZSI6MTIyMSwiQHBsb3RseS9wb2ludC1jbHVzdGVyIjo1N31dLDEyMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtUT09fTUFOWV9QT0lOVFM6MWU1LFNZTUJPTF9TREZfU0laRToyMDAsU1lNQk9MX1NJWkU6MjAsU1lNQk9MX1NUUk9LRToxLERPVF9SRTovLWRvdC8sT1BFTl9SRTovLW9wZW4vLERBU0hFUzp7c29saWQ6WzFdLGRvdDpbMSwxXSxkYXNoOls0LDFdLGxvbmdkYXNoOls4LDFdLGRhc2hkb3Q6WzQsMSwxLDFdLGxvbmdkYXNoZG90Ols4LDEsMSwxXX19fSx7fV0sMTIxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgic3ZnLXBhdGgtc2RmIiksYT10KCJjb2xvci1ub3JtYWxpemUiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksdT10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikuZm9ybWF0Q29sb3IsaD10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksZj10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHA9dCgiLi9oZWxwZXJzIiksZD10KCIuL2NvbnN0YW50cyIpLGc9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLG09e3N0YXJ0OjEsbGVmdDoxLGVuZDotMSxyaWdodDotMSxtaWRkbGU6MCxjZW50ZXI6MCxib3R0b206MSx0b3A6LTF9LHY9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlO2Z1bmN0aW9uIHkodCxlKXt2YXIgcixpPXQuX2Z1bGxMYXlvdXQsYT1lLl9sZW5ndGgsbz1lLnRleHRmb250LGw9ZS50ZXh0cG9zaXRpb24sYz1BcnJheS5pc0FycmF5KGwpP2w6W2xdLHU9by5jb2xvcixoPW8uc2l6ZSxmPW8uZmFtaWx5LHA9e30sZD1lLnRleHR0ZW1wbGF0ZTtpZihkKXtwLnRleHQ9W107dmFyIGc9aS5fZDNsb2NhbGUsbT1BcnJheS5pc0FycmF5KGQpLHk9bT9NYXRoLm1pbihkLmxlbmd0aCxhKTphLHg9bT9mdW5jdGlvbih0KXtyZXR1cm4gZFt0XX06ZnVuY3Rpb24oKXtyZXR1cm4gZH07Zm9yKHI9MDtyPHk7cisrKXt2YXIgYj17aTpyfSxfPWUuX21vZHVsZS5mb3JtYXRMYWJlbHMoYixlLGkpLHc9e307dih3LGUscik7dmFyIFQ9ZS5fbWV0YXx8e307cC50ZXh0LnB1c2gocy50ZXh0dGVtcGxhdGVTdHJpbmcoeChyKSxfLGcsdyxiLFQpKX19ZWxzZSBBcnJheS5pc0FycmF5KGUudGV4dCkmJmUudGV4dC5sZW5ndGg8YT9wLnRleHQ9ZS50ZXh0LnNsaWNlKCk6cC50ZXh0PWUudGV4dDtpZihBcnJheS5pc0FycmF5KHAudGV4dCkpZm9yKHI9cC50ZXh0Lmxlbmd0aDtyPGE7cisrKXAudGV4dFtyXT0iIjtmb3IocC5vcGFjaXR5PWUub3BhY2l0eSxwLmZvbnQ9e30scC5hbGlnbj1bXSxwLmJhc2VsaW5lPVtdLHI9MDtyPGMubGVuZ3RoO3IrKyl7dmFyIGs9Y1tyXS5zcGxpdCgvXHMrLyk7c3dpdGNoKGtbMV0pe2Nhc2UibGVmdCI6cC5hbGlnbi5wdXNoKCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnAuYWxpZ24ucHVzaCgibGVmdCIpO2JyZWFrO2RlZmF1bHQ6cC5hbGlnbi5wdXNoKGtbMV0pfXN3aXRjaChrWzBdKXtjYXNlInRvcCI6cC5iYXNlbGluZS5wdXNoKCJib3R0b20iKTticmVhaztjYXNlImJvdHRvbSI6cC5iYXNlbGluZS5wdXNoKCJ0b3AiKTticmVhaztkZWZhdWx0OnAuYmFzZWxpbmUucHVzaChrWzBdKX19aWYoQXJyYXkuaXNBcnJheSh1KSlmb3IocC5jb2xvcj1uZXcgQXJyYXkoYSkscj0wO3I8YTtyKyspcC5jb2xvcltyXT11W3JdO2Vsc2UgcC5jb2xvcj11O2lmKHMuaXNBcnJheU9yVHlwZWRBcnJheShoKXx8QXJyYXkuaXNBcnJheShmKSlmb3IocC5mb250PW5ldyBBcnJheShhKSxyPTA7cjxhO3IrKyl7dmFyIE09cC5mb250W3JdPXt9O00uc2l6ZT1zLmlzVHlwZWRBcnJheShoKT9oW3JdOkFycmF5LmlzQXJyYXkoaCk/bihoW3JdKT9oW3JdOjA6aCxNLmZhbWlseT1BcnJheS5pc0FycmF5KGYpP2Zbcl06Zn1lbHNlIHAuZm9udD17c2l6ZTpoLGZhbWlseTpmfTtyZXR1cm4gcH1mdW5jdGlvbiB4KHQpe3ZhciBlLHIsbj10Ll9sZW5ndGgsaT10Lm1hcmtlcixvPXt9LGw9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkuc3ltYm9sKSxjPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmNvbG9yKSxoPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmxpbmUuY29sb3IpLGQ9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkub3BhY2l0eSksZz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5zaXplKSxtPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLmxpbmUud2lkdGgpO2lmKGx8fChyPXAuaXNPcGVuU3ltYm9sKGkuc3ltYm9sKSksbHx8Y3x8aHx8ZCl7by5jb2xvcnM9bmV3IEFycmF5KG4pLG8uYm9yZGVyQ29sb3JzPW5ldyBBcnJheShuKTt2YXIgdj11KGksaS5vcGFjaXR5LG4pLHk9dShpLmxpbmUsaS5vcGFjaXR5LG4pO2lmKCFBcnJheS5pc0FycmF5KHlbMF0pKXt2YXIgeD15O2Zvcih5PUFycmF5KG4pLGU9MDtlPG47ZSsrKXlbZV09eH1pZighQXJyYXkuaXNBcnJheSh2WzBdKSl7dmFyIGI9djtmb3Iodj1BcnJheShuKSxlPTA7ZTxuO2UrKyl2W2VdPWJ9Zm9yKG8uY29sb3JzPXYsby5ib3JkZXJDb2xvcnM9eSxlPTA7ZTxuO2UrKyl7aWYobCl7dmFyIF89aS5zeW1ib2xbZV07cj1wLmlzT3BlblN5bWJvbChfKX1yJiYoeVtlXT12W2VdLnNsaWNlKCksdltlXT12W2VdLnNsaWNlKCksdltlXVszXT0wKX1vLm9wYWNpdHk9dC5vcGFjaXR5fWVsc2Ugcj8oby5jb2xvcj1hKGkuY29sb3IsInVpbnQ4Iiksby5jb2xvclszXT0wLG8uYm9yZGVyQ29sb3I9YShpLmNvbG9yLCJ1aW50OCIpKTooby5jb2xvcj1hKGkuY29sb3IsInVpbnQ4Iiksby5ib3JkZXJDb2xvcj1hKGkubGluZS5jb2xvciwidWludDgiKSksby5vcGFjaXR5PXQub3BhY2l0eSppLm9wYWNpdHk7aWYobClmb3Ioby5tYXJrZXJzPW5ldyBBcnJheShuKSxlPTA7ZTxuO2UrKylvLm1hcmtlcnNbZV09RShpLnN5bWJvbFtlXSk7ZWxzZSBvLm1hcmtlcj1FKGkuc3ltYm9sKTt2YXIgdyxUPWYodCk7aWYoZ3x8bSl7dmFyIGssTT1vLnNpemVzPW5ldyBBcnJheShuKSxBPW8uYm9yZGVyU2l6ZXM9bmV3IEFycmF5KG4pLFM9MDtpZihnKXtmb3IoZT0wO2U8bjtlKyspTVtlXT1UKGkuc2l6ZVtlXSksUys9TVtlXTtrPVMvbn1lbHNlIGZvcih3PVQoaS5zaXplKSxlPTA7ZTxuO2UrKylNW2VdPXc7aWYobSlmb3IoZT0wO2U8bjtlKyspQVtlXT1pLmxpbmUud2lkdGhbZV0vMjtlbHNlIGZvcih3PWkubGluZS53aWR0aC8yLGU9MDtlPG47ZSsrKUFbZV09dztvLnNpemVBdmc9a31lbHNlIG8uc2l6ZT1UKGkmJmkuc2l6ZXx8MTApLG8uYm9yZGVyU2l6ZXM9VChpLmxpbmUud2lkdGgpO3JldHVybiBvfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10Lm1hcmtlcixuPXt9O3JldHVybiBlPyhlLm1hcmtlciYmZS5tYXJrZXIuc3ltYm9sP249eChzLmV4dGVuZEZsYXQoe30scixlLm1hcmtlcikpOmUubWFya2VyJiYoZS5tYXJrZXIuc2l6ZSYmKG4uc2l6ZT1lLm1hcmtlci5zaXplLzIpLGUubWFya2VyLmNvbG9yJiYobi5jb2xvcnM9ZS5tYXJrZXIuY29sb3IpLHZvaWQgMCE9PWUubWFya2VyLm9wYWNpdHkmJihuLm9wYWNpdHk9ZS5tYXJrZXIub3BhY2l0eSkpLG4pOm59ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49e307aWYoIXIpcmV0dXJuIG47aWYoci50ZXh0Zm9udCl7dmFyIGk9e29wYWNpdHk6MSx0ZXh0OmUudGV4dCx0ZXh0dGVtcGxhdGU6ZS50ZXh0dGVtcGxhdGUsdGV4dHBvc2l0aW9uOmUudGV4dHBvc2l0aW9uLHRleHRmb250OnMuZXh0ZW5kRmxhdCh7fSxlLnRleHRmb250KX07ci50ZXh0Zm9udCYmcy5leHRlbmRGbGF0KGkudGV4dGZvbnQsci50ZXh0Zm9udCksbj15KHQsaSl9cmV0dXJuIG59ZnVuY3Rpb24gdyh0LGUpe3ZhciByPXtjYXBTaXplOjIqZS53aWR0aCxsaW5lV2lkdGg6ZS50aGlja25lc3MsY29sb3I6ZS5jb2xvcn07cmV0dXJuIGUuY29weV95c3R5bGUmJihyPXQuZXJyb3JfeSkscn12YXIgVD1kLlNZTUJPTF9TREZfU0laRSxrPWQuU1lNQk9MX1NJWkUsTT1kLlNZTUJPTF9TVFJPS0UsQT17fSxTPWwuc3ltYm9sRnVuY3NbMF0oLjA1KmspO2Z1bmN0aW9uIEUodCl7aWYoImNpcmNsZSI9PT10KXJldHVybiBudWxsO3ZhciBlLHIsbj1sLnN5bWJvbE51bWJlcih0KSxhPWwuc3ltYm9sRnVuY3NbbiUxMDBdLG89ISFsLnN5bWJvbE5vRG90W24lMTAwXSxzPSEhbC5zeW1ib2xOb0ZpbGxbbiUxMDBdLGM9cC5pc0RvdFN5bWJvbCh0KTtyZXR1cm4gQVt0XT9BW3RdOihlPWMmJiFvP2EoMS4xKmspK1M6YShrKSxyPWkoZSx7dzpULGg6VCx2aWV3Qm94OlstaywtayxrLGtdLHN0cm9rZTpzP006LU19KSxBW3RdPXIscnx8bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByLG49e21hcmtlcjp2b2lkIDAsbWFya2VyU2VsOnZvaWQgMCxtYXJrZXJVbnNlbDp2b2lkIDAsbGluZTp2b2lkIDAsZmlsbDp2b2lkIDAsZXJyb3JYOnZvaWQgMCxlcnJvclk6dm9pZCAwLHRleHQ6dm9pZCAwLHRleHRTZWw6dm9pZCAwLHRleHRVbnNlbDp2b2lkIDB9O2lmKCEwIT09ZS52aXNpYmxlKXJldHVybiBuO2lmKGguaGFzVGV4dChlKSYmKG4udGV4dD15KHQsZSksbi50ZXh0U2VsPV8odCxlLGUuc2VsZWN0ZWQpLG4udGV4dFVuc2VsPV8odCxlLGUudW5zZWxlY3RlZCkpLGguaGFzTWFya2VycyhlKSYmKG4ubWFya2VyPXgoZSksbi5tYXJrZXJTZWw9YihlLGUuc2VsZWN0ZWQpLG4ubWFya2VyVW5zZWw9YihlLGUudW5zZWxlY3RlZCksIWUudW5zZWxlY3RlZCYmcy5pc0FycmF5T3JUeXBlZEFycmF5KGUubWFya2VyLm9wYWNpdHkpKSl7dmFyIGk9ZS5tYXJrZXIub3BhY2l0eTtmb3Iobi5tYXJrZXJVbnNlbC5vcGFjaXR5PW5ldyBBcnJheShpLmxlbmd0aCkscj0wO3I8aS5sZW5ndGg7cisrKW4ubWFya2VyVW5zZWwub3BhY2l0eVtyXT1nKmlbcl19aWYoaC5oYXNMaW5lcyhlKSl7bi5saW5lPXtvdmVybGF5OiEwLHRoaWNrbmVzczplLmxpbmUud2lkdGgsY29sb3I6ZS5saW5lLmNvbG9yLG9wYWNpdHk6ZS5vcGFjaXR5fTt2YXIgYT0oZC5EQVNIRVNbZS5saW5lLmRhc2hdfHxbMV0pLnNsaWNlKCk7Zm9yKHI9MDtyPGEubGVuZ3RoOysrcilhW3JdKj1lLmxpbmUud2lkdGg7bi5saW5lLmRhc2hlcz1hfXJldHVybiBlLmVycm9yX3gmJmUuZXJyb3JfeC52aXNpYmxlJiYobi5lcnJvclg9dyhlLGUuZXJyb3JfeCkpLGUuZXJyb3JfeSYmZS5lcnJvcl95LnZpc2libGUmJihuLmVycm9yWT13KGUsZS5lcnJvcl95KSksZS5maWxsJiYibm9uZSIhPT1lLmZpbGwmJihuLmZpbGw9e2Nsb3NlZDohMCxmaWxsOmUuZmlsbGNvbG9yLHRoaWNrbmVzczowfSksbn0sbWFya2VyU3R5bGU6eCxtYXJrZXJTZWxlY3Rpb246YixsaW5lUG9zaXRpb25zOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ci5sZW5ndGgsbz1hLzI7aWYoaC5oYXNMaW5lcyhlKSYmbylpZigiaHYiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMippXSxyWzIqaSsxXSksaXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaSsyXSxyWzIqaSsxXSkpO24ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKCJodmgiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlmKGlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKXx8aXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSkpaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmldLHJbMippKzFdKSxuLnB1c2goTmFOLE5hTik7ZWxzZXt2YXIgcz0oclsyKmldK3JbMippKzJdKS8yO24ucHVzaChyWzIqaV0sclsyKmkrMV0scyxyWzIqaSsxXSxzLHJbMippKzNdKX1uLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBpZigidmh2Ij09PWUubGluZS5zaGFwZSl7Zm9yKG49W10saT0wO2k8by0xO2krKylpZihpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSl8fGlzTmFOKHJbMippKzJdKXx8aXNOYU4oclsyKmkrM10pKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippXSxyWzIqaSsxXSksbi5wdXNoKE5hTixOYU4pO2Vsc2V7dmFyIGw9KHJbMippKzFdK3JbMippKzNdKS8yO24ucHVzaChyWzIqaV0sclsyKmkrMV0sclsyKmldLGwsclsyKmkrMl0sbCl9bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoInZoIj09PWUubGluZS5zaGFwZSl7Zm9yKG49W10saT0wO2k8by0xO2krKylpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4sTmFOLE5hTik6KG4ucHVzaChyWzIqaV0sclsyKmkrMV0pLGlzTmFOKHJbMippKzJdKXx8aXNOYU4oclsyKmkrM10pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmldLHJbMippKzNdKSk7bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2Ugbj1yO3ZhciBjPSExO2ZvcihpPTA7aTxuLmxlbmd0aDtpKyspaWYoaXNOYU4obltpXSkpe2M9ITA7YnJlYWt9dmFyIHU9Y3x8bi5sZW5ndGg+ZC5UT09fTUFOWV9QT0lOVFN8fGguaGFzTWFya2VycyhlKT8icmVjdCI6InJvdW5kIjtpZihjJiZlLmNvbm5lY3RnYXBzKXt2YXIgZj1uWzBdLHA9blsxXTtmb3IoaT0wO2k8bi5sZW5ndGg7aSs9Milpc05hTihuW2ldKXx8aXNOYU4obltpKzFdKT8obltpXT1mLG5baSsxXT1wKTooZj1uW2ldLHA9bltpKzFdKX1yZXR1cm57am9pbjp1LHBvc2l0aW9uczpufX0sZXJyb3JCYXJQb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgcz1vLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwibWFrZUNvbXB1dGVFcnJvciIpLGw9Yy5nZXRGcm9tSWQodCxlLnhheGlzKSx1PWMuZ2V0RnJvbUlkKHQsZS55YXhpcyksaD1yLmxlbmd0aC8yLGY9e307ZnVuY3Rpb24gcCh0LGkpe3ZhciBhPWkuX2lkLmNoYXJBdCgwKSxvPWVbImVycm9yXyIrYV07aWYobyYmby52aXNpYmxlJiYoImxpbmVhciI9PT1pLnR5cGV8fCJsb2ciPT09aS50eXBlKSl7Zm9yKHZhciBsPXMobyksYz17eDowLHk6MX1bYV0sdT17eDpbMCwxLDIsM10seTpbMiwzLDAsMV19W2FdLHA9bmV3IEZsb2F0NjRBcnJheSg0KmgpLGQ9MS8wLGc9LTEvMCxtPTAsdj0wO208aDttKyssdis9NCl7dmFyIHk9dFttXTtpZihuKHkpKXt2YXIgeD1yWzIqbStjXSxiPWwoeSxtKSxfPWJbMF0sdz1iWzFdO2lmKG4oXykmJm4odykpe3ZhciBUPXktXyxrPXkrdztwW3YrdVswXV09eC1pLmMybChUKSxwW3YrdVsxXV09aS5jMmwoaykteCxwW3YrdVsyXV09MCxwW3YrdVszXV09MCxkPU1hdGgubWluKGQseS1fKSxnPU1hdGgubWF4KGcseSt3KX19fWZbYV09e3Bvc2l0aW9uczpyLGVycm9yczpwLF9ibmRzOltkLGddfX19cmV0dXJuIHAoaSxsKSxwKGEsdSksZn0sdGV4dFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9ZS5fbGVuZ3RoLG89e307aWYoaC5oYXNNYXJrZXJzKGUpKXt2YXIgcz1yLmZvbnQsbD1yLmFsaWduLGM9ci5iYXNlbGluZTtmb3Ioby5vZmZzZXQ9bmV3IEFycmF5KGEpLGk9MDtpPGE7aSsrKXt2YXIgdT1uLnNpemVzP24uc2l6ZXNbaV06bi5zaXplLGY9QXJyYXkuaXNBcnJheShzKT9zW2ldLnNpemU6cy5zaXplLHA9QXJyYXkuaXNBcnJheShsKT9sLmxlbmd0aD4xP2xbaV06bFswXTpsLGQ9QXJyYXkuaXNBcnJheShjKT9jLmxlbmd0aD4xP2NbaV06Y1swXTpjLGc9bVtwXSx2PW1bZF0seT11P3UvLjgrMTowLHg9LXYqeS0uNSp2O28ub2Zmc2V0W2ldPVtnKnkvZix4L2ZdfX1yZXR1cm4gb319fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY1MSwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzI0LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzQ2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgwMiwiLi4vLi4vcmVnaXN0cnkiOjg4MiwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjExNzUsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExODMsIi4vY29uc3RhbnRzIjoxMjEyLCIuL2hlbHBlcnMiOjEyMTcsImNvbG9yLW5vcm1hbGl6ZSI6MTI1LCJmYXN0LWlzbnVtZXJpYyI6MjQxLCJzdmctcGF0aC1zZGYiOjU0Nn1dLDEyMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi9oZWxwZXJzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksbD10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYz10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLGg9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxmPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHA9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxkPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixnKXtmdW5jdGlvbiBtKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9dmFyIHY9ISF0Lm1hcmtlciYmYS5pc09wZW5TeW1ib2wodC5tYXJrZXIuc3ltYm9sKSx5PWwuaXNCdWJibGUodCkseD1jKHQsZSxnLG0pO2lmKHgpe3UodCxlLGcsbSk7dmFyIGI9eDxzLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyI7bSgidGV4dCIpLG0oImhvdmVydGV4dCIpLG0oImhvdmVydGVtcGxhdGUiKSxtKCJtb2RlIixiKSxsLmhhc0xpbmVzKGUpJiYobSgiY29ubmVjdGdhcHMiKSxmKHQsZSxyLGcsbSksbSgibGluZS5zaGFwZSIpKSxsLmhhc01hcmtlcnMoZSkmJihoKHQsZSxyLGcsbSksbSgibWFya2VyLmxpbmUud2lkdGgiLHZ8fHk/MTowKSksbC5oYXNUZXh0KGUpJiYobSgidGV4dHRlbXBsYXRlIiksZCh0LGUsZyxtKSk7dmFyIF89KGUubGluZXx8e30pLmNvbG9yLHc9KGUubWFya2VyfHx7fSkuY29sb3I7bSgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmcCh0LGUscixtKTt2YXIgVD1pLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTtUKHQsZSxffHx3fHxyLHtheGlzOiJ5In0pLFQodCxlLF98fHd8fHIse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsbSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTE2MiwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExNjYsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTE3MSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjExNzcsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjoxMTc4LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMTgzLCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjExODQsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjExODUsIi4vYXR0cmlidXRlcyI6MTIxMCwiLi9oZWxwZXJzIjoxMjE3fV0sMTIxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTTtlLmV4cG9ydHM9e3N0eWxlVGV4dFNlbGVjdGlvbjpmdW5jdGlvbih0KXt2YXIgZSxyLG89dFswXSxzPW8udHJhY2UsbD1vLnQsYz1sLl9zY2VuZSx1PWwuaW5kZXgsaD1jLnNlbGVjdEJhdGNoW3VdLGY9Yy51bnNlbGVjdEJhdGNoW3VdLHA9Yy50ZXh0T3B0aW9uc1t1XSxkPWMudGV4dFNlbGVjdGVkT3B0aW9uc1t1XXx8e30sZz1jLnRleHRVbnNlbGVjdGVkT3B0aW9uc1t1XXx8e30sbT1uLmV4dGVuZEZsYXQoe30scCk7aWYoaC5sZW5ndGh8fGYubGVuZ3RoKXt2YXIgdj1kLmNvbG9yLHk9Zy5jb2xvcix4PXAuY29sb3IsYj1BcnJheS5pc0FycmF5KHgpO2ZvcihtLmNvbG9yPW5ldyBBcnJheShzLl9sZW5ndGgpLGU9MDtlPGgubGVuZ3RoO2UrKylyPWhbZV0sbS5jb2xvcltyXT12fHwoYj94W3JdOngpO2ZvcihlPTA7ZTxmLmxlbmd0aDtlKyspe3I9ZltlXTt2YXIgXz1iP3hbcl06eDttLmNvbG9yW3JdPXl8fCh2P186aS5hZGRPcGFjaXR5KF8sYSkpfX1jLmdsVGV4dFt1XS51cGRhdGUobSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjcyNCwiLi4vLi4vbGliIjo3NTB9XSwxMjE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvZm9ybWF0X2xhYmVscyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5pO3JldHVybiJ4ImluIHR8fCh0Lng9ZS5feFtpXSksInkiaW4gdHx8KHQueT1lLl95W2ldKSxuKHQsZSxyKX19LHsiLi4vc2NhdHRlci9mb3JtYXRfbGFiZWxzIjoxMTY3fV0sMTIxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpO3IuaXNPcGVuU3ltYm9sPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uLk9QRU5fUkUudGVzdCh0KTp0JTIwMD4xMDB9LHIuaXNEb3RTeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P24uRE9UX1JFLnRlc3QodCk6dD4yMDB9fSx7Ii4vY29uc3RhbnRzIjoxMjEyfV0sMTIxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpO2Z1bmN0aW9uIG8odCxlLHIsbyl7dmFyIHM9dC54YSxsPXQueWEsYz10LmRpc3RhbmNlLHU9dC5keHksaD10LmluZGV4LGY9e3BvaW50TnVtYmVyOmgseDplW2hdLHk6cltoXX07Zi50eD1BcnJheS5pc0FycmF5KG8udGV4dCk/by50ZXh0W2hdOm8udGV4dCxmLmh0eD1BcnJheS5pc0FycmF5KG8uaG92ZXJ0ZXh0KT9vLmhvdmVydGV4dFtoXTpvLmhvdmVydGV4dCxmLmRhdGE9QXJyYXkuaXNBcnJheShvLmN1c3RvbWRhdGEpP28uY3VzdG9tZGF0YVtoXTpvLmN1c3RvbWRhdGEsZi50cD1BcnJheS5pc0FycmF5KG8udGV4dHBvc2l0aW9uKT9vLnRleHRwb3NpdGlvbltoXTpvLnRleHRwb3NpdGlvbjt2YXIgcD1vLnRleHRmb250O3AmJihmLnRzPWkuaXNBcnJheU9yVHlwZWRBcnJheShwLnNpemUpP3Auc2l6ZVtoXTpwLnNpemUsZi50Yz1BcnJheS5pc0FycmF5KHAuY29sb3IpP3AuY29sb3JbaF06cC5jb2xvcixmLnRmPUFycmF5LmlzQXJyYXkocC5mYW1pbHkpP3AuZmFtaWx5W2hdOnAuZmFtaWx5KTt2YXIgZD1vLm1hcmtlcjtkJiYoZi5tcz1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZC5zaXplKT9kLnNpemVbaF06ZC5zaXplLGYubW89aS5pc0FycmF5T3JUeXBlZEFycmF5KGQub3BhY2l0eSk/ZC5vcGFjaXR5W2hdOmQub3BhY2l0eSxmLm14PWkuaXNBcnJheU9yVHlwZWRBcnJheShkLnN5bWJvbCk/ZC5zeW1ib2xbaF06ZC5zeW1ib2wsZi5tYz1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZC5jb2xvcik/ZC5jb2xvcltoXTpkLmNvbG9yKTt2YXIgZz1kJiZkLmxpbmU7ZyYmKGYubWxjPUFycmF5LmlzQXJyYXkoZy5jb2xvcik/Zy5jb2xvcltoXTpnLmNvbG9yLGYubWx3PWkuaXNBcnJheU9yVHlwZWRBcnJheShnLndpZHRoKT9nLndpZHRoW2hdOmcud2lkdGgpO3ZhciBtPWQmJmQuZ3JhZGllbnQ7bSYmIm5vbmUiIT09bS50eXBlJiYoZi5tZ3Q9QXJyYXkuaXNBcnJheShtLnR5cGUpP20udHlwZVtoXTptLnR5cGUsZi5tZ2M9QXJyYXkuaXNBcnJheShtLmNvbG9yKT9tLmNvbG9yW2hdOm0uY29sb3IpO3ZhciB2PXMuYzJwKGYueCwhMCkseT1sLmMycChmLnksITApLHg9Zi5tcmN8fDEsYj1vLmhvdmVybGFiZWw7YiYmKGYuaGJnPUFycmF5LmlzQXJyYXkoYi5iZ2NvbG9yKT9iLmJnY29sb3JbaF06Yi5iZ2NvbG9yLGYuaGJjPUFycmF5LmlzQXJyYXkoYi5ib3JkZXJjb2xvcik/Yi5ib3JkZXJjb2xvcltoXTpiLmJvcmRlcmNvbG9yLGYuaHRzPWkuaXNBcnJheU9yVHlwZWRBcnJheShiLmZvbnQuc2l6ZSk/Yi5mb250LnNpemVbaF06Yi5mb250LnNpemUsZi5odGM9QXJyYXkuaXNBcnJheShiLmZvbnQuY29sb3IpP2IuZm9udC5jb2xvcltoXTpiLmZvbnQuY29sb3IsZi5odGY9QXJyYXkuaXNBcnJheShiLmZvbnQuZmFtaWx5KT9iLmZvbnQuZmFtaWx5W2hdOmIuZm9udC5mYW1pbHksZi5obmw9aS5pc0FycmF5T3JUeXBlZEFycmF5KGIubmFtZWxlbmd0aCk/Yi5uYW1lbGVuZ3RoW2hdOmIubmFtZWxlbmd0aCk7dmFyIF89by5ob3ZlcmluZm87XyYmKGYuaGk9QXJyYXkuaXNBcnJheShfKT9fW2hdOl8pO3ZhciB3PW8uaG92ZXJ0ZW1wbGF0ZTt3JiYoZi5odD1BcnJheS5pc0FycmF5KHcpP3dbaF06dyk7dmFyIFQ9e307VFt0LmluZGV4XT1mO3ZhciBrPW8uX29yaWdYLE09by5fb3JpZ1ksQT1pLmV4dGVuZEZsYXQoe30sdCx7Y29sb3I6YShvLGYpLHgwOnYteCx4MTp2K3gseExhYmVsVmFsOms/a1toXTpmLngseTA6eS14LHkxOnkreCx5TGFiZWxWYWw6TT9NW2hdOmYueSxjZDpULGRpc3RhbmNlOmMsc3Bpa2VEaXN0YW5jZTp1LGhvdmVydGVtcGxhdGU6Zi5odH0pO3JldHVybiBmLmh0eD9BLnRleHQ9Zi5odHg6Zi50eD9BLnRleHQ9Zi50eDpvLnRleHQmJihBLnRleHQ9by50ZXh0KSxpLmZpbGxUZXh0KGYsbyxBKSxuLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoZixvLEEpLEF9ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLHMsbCxjLHUsaCxmLHAsZD10LmNkLGc9ZFswXS50LG09ZFswXS50cmFjZSx2PXQueGEseT10LnlhLHg9Zy54LGI9Zy55LF89di5jMnAoZSksdz15LmMycChyKSxUPXQuZGlzdGFuY2U7aWYoZy50cmVlKXt2YXIgaz12LnAyYyhfLVQpLE09di5wMmMoXytUKSxBPXkucDJjKHctVCksUz15LnAyYyh3K1QpO2k9IngiPT09bj9nLnRyZWUucmFuZ2UoTWF0aC5taW4oayxNKSxNYXRoLm1pbih5Ll9ybFswXSx5Ll9ybFsxXSksTWF0aC5tYXgoayxNKSxNYXRoLm1heCh5Ll9ybFswXSx5Ll9ybFsxXSkpOmcudHJlZS5yYW5nZShNYXRoLm1pbihrLE0pLE1hdGgubWluKEEsUyksTWF0aC5tYXgoayxNKSxNYXRoLm1heChBLFMpKX1lbHNlIGk9Zy5pZHM7dmFyIEU9VDtpZigieCI9PT1uKWZvcihjPTA7YzxpLmxlbmd0aDtjKyspcz14W2lbY11dLCh1PU1hdGguYWJzKHYuYzJwKHMpLV8pKTxFJiYoRT11LGg9eS5jMnAoYltpW2NdXSktdyxwPU1hdGguc3FydCh1KnUraCpoKSxhPWlbY10pO2Vsc2UgZm9yKGM9aS5sZW5ndGgtMTtjPi0xO2MtLSlzPXhbaVtjXV0sbD1iW2lbY11dLHU9di5jMnAocyktXyxoPXkuYzJwKGwpLXcsKGY9TWF0aC5zcXJ0KHUqdStoKmgpKTxFJiYoRT1wPWYsYT1pW2NdKTtyZXR1cm4gdC5pbmRleD1hLHQuZGlzdGFuY2U9RSx0LmR4eT1wLHZvaWQgMD09PWE/W3RdOltvKHQseCxiLG0pXX0sY2FsY0hvdmVyOm99fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTE2OH1dLDEyMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9ob3ZlciIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJnbCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsImNhcnRlc2lhbiIsInN5bWJvbHMiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vc2NhdHRlci9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czpuLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODEyLCIuLi9zY2F0dGVyL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjoxMTY0LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTE3NiwiLi9hdHRyaWJ1dGVzIjoxMjEwLCIuL2NhbGMiOjEyMTEsIi4vZGVmYXVsdHMiOjEyMTQsIi4vZm9ybWF0X2xhYmVscyI6MTIxNiwiLi9ob3ZlciI6MTIxOCwiLi9wbG90IjoxMjIwLCIuL3NlbGVjdCI6MTIyMn1dLDEyMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1zY2F0dGVyMmQiKSxpPXQoInJlZ2wtbGluZTJkIiksYT10KCJyZWdsLWVycm9yMmQiKSxvPXQoImdsLXRleHQiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikuc2VsZWN0TW9kZSxjPXQoIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiKSx1PXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxoPXQoIi4uL3NjYXR0ZXIvbGlua190cmFjZXMiKSxmPXQoIi4vZWRpdF9zdHlsZSIpLnN0eWxlVGV4dFNlbGVjdGlvbjtmdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj10Ll9zaXplLGk9dC53aWR0aCxhPXQuaGVpZ2h0O3JldHVybltuLmwrZS5kb21haW5bMF0qbi53LG4uYityLmRvbWFpblswXSpuLmgsaS1uLnItKDEtZS5kb21haW5bMV0pKm4udyxhLW4udC0oMS1yLmRvbWFpblsxXSkqbi5oXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKHIubGVuZ3RoKXt2YXIgZCxnLG09dC5fZnVsbExheW91dCx2PWUuX3NjZW5lLHk9ZS54YXhpcyx4PWUueWF4aXM7aWYodilpZihjKHQsWyJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiwiT0VTX2VsZW1lbnRfaW5kZXhfdWludCJdKSl7dmFyIGI9di5jb3VudCxfPW0uX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsO2lmKGgodCxlLHIpLHYuZGlydHkpe2lmKCEwPT09di5lcnJvcjJkJiYodi5lcnJvcjJkPWEoXykpLCEwPT09di5saW5lMmQmJih2LmxpbmUyZD1pKF8pKSwhMD09PXYuc2NhdHRlcjJkJiYodi5zY2F0dGVyMmQ9bihfLHtjb25zdFBvaW50U2l6ZTohMH0pKSwhMD09PXYuZmlsbDJkJiYodi5maWxsMmQ9aShfKSksITA9PT12LmdsVGV4dClmb3Iodi5nbFRleHQ9bmV3IEFycmF5KGIpLGQ9MDtkPGI7ZCsrKXYuZ2xUZXh0W2RdPW5ldyBvKF8pO2lmKHYuZ2xUZXh0KXtpZihiPnYuZ2xUZXh0Lmxlbmd0aCl7dmFyIHc9Yi12LmdsVGV4dC5sZW5ndGg7Zm9yKGQ9MDtkPHc7ZCsrKXYuZ2xUZXh0LnB1c2gobmV3IG8oXykpfWVsc2UgaWYoYjx2LmdsVGV4dC5sZW5ndGgpe3ZhciBUPXYuZ2xUZXh0Lmxlbmd0aC1iO3YuZ2xUZXh0LnNwbGljZShiLFQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSkpfWZvcihkPTA7ZDxiO2QrKyl2LmdsVGV4dFtkXS51cGRhdGUodi50ZXh0T3B0aW9uc1tkXSl9aWYodi5saW5lMmQmJih2LmxpbmUyZC51cGRhdGUodi5saW5lT3B0aW9ucyksdi5saW5lT3B0aW9ucz12LmxpbmVPcHRpb25zLm1hcCgoZnVuY3Rpb24odCl7aWYodCYmdC5wb3NpdGlvbnMpe2Zvcih2YXIgZT10LnBvc2l0aW9ucyxyPTA7cjxlLmxlbmd0aCYmKGlzTmFOKGVbcl0pfHxpc05hTihlW3IrMV0pKTspcis9Mjtmb3IodmFyIG49ZS5sZW5ndGgtMjtuPnImJihpc05hTihlW25dKXx8aXNOYU4oZVtuKzFdKSk7KW4tPTI7dC5wb3NpdGlvbnM9ZS5zbGljZShyLG4rMil9cmV0dXJuIHR9KSksdi5saW5lMmQudXBkYXRlKHYubGluZU9wdGlvbnMpKSx2LmVycm9yMmQpe3ZhciBrPSh2LmVycm9yWE9wdGlvbnN8fFtdKS5jb25jYXQodi5lcnJvcllPcHRpb25zfHxbXSk7di5lcnJvcjJkLnVwZGF0ZShrKX12LnNjYXR0ZXIyZCYmdi5zY2F0dGVyMmQudXBkYXRlKHYubWFya2VyT3B0aW9ucyksdi5maWxsT3JkZXI9cy5yZXBlYXQobnVsbCxiKSx2LmZpbGwyZCYmKHYuZmlsbE9wdGlvbnM9di5maWxsT3B0aW9ucy5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIG49cltlXTtpZih0JiZuJiZuWzBdJiZuWzBdLnRyYWNlKXt2YXIgaSxhLG89blswXSxzPW8udHJhY2UsbD1vLnQsYz12LmxpbmVPcHRpb25zW2VdLHU9W107cy5fb3duZmlsbCYmdS5wdXNoKGUpLHMuX25leHR0cmFjZSYmdS5wdXNoKGUrMSksdS5sZW5ndGgmJih2LmZpbGxPcmRlcltlXT11KTt2YXIgaCxmLHA9W10sZD1jJiZjLnBvc2l0aW9uc3x8bC5wb3NpdGlvbnM7aWYoInRvemVyb3kiPT09cy5maWxsKXtmb3IoaD0wO2g8ZC5sZW5ndGgmJmlzTmFOKGRbaCsxXSk7KWgrPTI7Zm9yKGY9ZC5sZW5ndGgtMjtmPmgmJmlzTmFOKGRbZisxXSk7KWYtPTI7MCE9PWRbaCsxXSYmKHA9W2RbaF0sMF0pLHA9cC5jb25jYXQoZC5zbGljZShoLGYrMikpLDAhPT1kW2YrMV0mJihwPXAuY29uY2F0KFtkW2ZdLDBdKSl9ZWxzZSBpZigidG96ZXJveCI9PT1zLmZpbGwpe2ZvcihoPTA7aDxkLmxlbmd0aCYmaXNOYU4oZFtoXSk7KWgrPTI7Zm9yKGY9ZC5sZW5ndGgtMjtmPmgmJmlzTmFOKGRbZl0pOylmLT0yOzAhPT1kW2hdJiYocD1bMCxkW2grMV1dKSxwPXAuY29uY2F0KGQuc2xpY2UoaCxmKzIpKSwwIT09ZFtmXSYmKHA9cC5jb25jYXQoWzAsZFtmKzFdXSkpfWVsc2UgaWYoInRvc2VsZiI9PT1zLmZpbGx8fCJ0b25leHQiPT09cy5maWxsKXtmb3IocD1bXSxpPTAsYT0wO2E8ZC5sZW5ndGg7YSs9MikoaXNOYU4oZFthXSl8fGlzTmFOKGRbYSsxXSkpJiYoKHA9cC5jb25jYXQoZC5zbGljZShpLGEpKSkucHVzaChkW2ldLGRbaSsxXSksaT1hKzIpO3A9cC5jb25jYXQoZC5zbGljZShpKSksaSYmcC5wdXNoKGRbaV0sZFtpKzFdKX1lbHNle3ZhciBnPXMuX25leHR0cmFjZTtpZihnKXt2YXIgbT12LmxpbmVPcHRpb25zW2UrMV07aWYobSl7dmFyIHk9bS5wb3NpdGlvbnM7aWYoInRvbmV4dHkiPT09cy5maWxsKXtmb3IocD1kLnNsaWNlKCksZT1NYXRoLmZsb29yKHkubGVuZ3RoLzIpO2UtLTspe3ZhciB4PXlbMiplXSxiPXlbMiplKzFdO2lzTmFOKHgpfHxpc05hTihiKXx8cC5wdXNoKHgsYil9dC5maWxsPWcuZmlsbGNvbG9yfX19fWlmKHMuX3ByZXZ0cmFjZSYmInRvbmV4dCI9PT1zLl9wcmV2dHJhY2UuZmlsbCl7dmFyIF89di5saW5lT3B0aW9uc1tlLTFdLnBvc2l0aW9ucyx3PXAubGVuZ3RoLzIsVD1baT13XTtmb3IoYT0wO2E8Xy5sZW5ndGg7YSs9MikoaXNOYU4oX1thXSl8fGlzTmFOKF9bYSsxXSkpJiYoVC5wdXNoKGEvMit3KzEpLGk9YSsyKTtwPXAuY29uY2F0KF8pLHQuaG9sZT1UfXJldHVybiB0LmZpbGxtb2RlPXMuZmlsbCx0Lm9wYWNpdHk9cy5vcGFjaXR5LHQucG9zaXRpb25zPXAsdH19KSksdi5maWxsMmQudXBkYXRlKHYuZmlsbE9wdGlvbnMpKX12YXIgTT1tLmRyYWdtb2RlLEE9bChNKSxTPW0uY2xpY2ttb2RlLmluZGV4T2YoInNlbGVjdCIpPi0xO2ZvcihkPTA7ZDxiO2QrKyl7dmFyIEU9cltkXVswXSxDPUUudHJhY2UsTD1FLnQsUD1MLmluZGV4LEk9Qy5fbGVuZ3RoLHo9TC54LE89TC55O2lmKEMuc2VsZWN0ZWRwb2ludHN8fEF8fFMpe2lmKEF8fChBPSEwKSxDLnNlbGVjdGVkcG9pbnRzKXt2YXIgRD12LnNlbGVjdEJhdGNoW1BdPXMuc2VsSW5kaWNlczJzZWxQb2ludHMoQyksUj17fTtmb3IoZz0wO2c8RC5sZW5ndGg7ZysrKVJbRFtnXV09MTt2YXIgRj1bXTtmb3IoZz0wO2c8STtnKyspUltnXXx8Ri5wdXNoKGcpO3YudW5zZWxlY3RCYXRjaFtQXT1GfXZhciBCPUwueHB4PW5ldyBBcnJheShJKSxOPUwueXB4PW5ldyBBcnJheShJKTtmb3IoZz0wO2c8STtnKyspQltnXT15LmMycCh6W2ddKSxOW2ddPXguYzJwKE9bZ10pfWVsc2UgTC54cHg9TC55cHg9bnVsbH1pZihBKXtpZih2LnNlbGVjdDJkfHwodi5zZWxlY3QyZD1uKG0uX2dsY2FudmFzLmRhdGEoKVsxXS5yZWdsKSksdi5zY2F0dGVyMmQpe3ZhciBqPW5ldyBBcnJheShiKTtmb3IoZD0wO2Q8YjtkKyspaltkXT12LnNlbGVjdEJhdGNoW2RdLmxlbmd0aHx8di51bnNlbGVjdEJhdGNoW2RdLmxlbmd0aD92Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zW2RdOnt9O3Yuc2NhdHRlcjJkLnVwZGF0ZShqKX12LnNlbGVjdDJkJiYodi5zZWxlY3QyZC51cGRhdGUodi5tYXJrZXJPcHRpb25zKSx2LnNlbGVjdDJkLnVwZGF0ZSh2Lm1hcmtlclNlbGVjdGVkT3B0aW9ucykpLHYuZ2xUZXh0JiZyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9O3UuaGFzVGV4dChlKSYmZih0KX0pKX1lbHNlIHYuc2NhdHRlcjJkJiZ2LnNjYXR0ZXIyZC51cGRhdGUodi5tYXJrZXJPcHRpb25zKTt2YXIgVT17dmlld3BvcnQ6cChtLHkseCkscmFuZ2U6Wyh5Ll9ybHx8eS5yYW5nZSlbMF0sKHguX3JsfHx4LnJhbmdlKVswXSwoeS5fcmx8fHkucmFuZ2UpWzFdLCh4Ll9ybHx8eC5yYW5nZSlbMV1dfSxWPXMucmVwZWF0KFUsdi5jb3VudCk7di5maWxsMmQmJnYuZmlsbDJkLnVwZGF0ZShWKSx2LmxpbmUyZCYmdi5saW5lMmQudXBkYXRlKFYpLHYuZXJyb3IyZCYmdi5lcnJvcjJkLnVwZGF0ZShWLmNvbmNhdChWKSksdi5zY2F0dGVyMmQmJnYuc2NhdHRlcjJkLnVwZGF0ZShWKSx2LnNlbGVjdDJkJiZ2LnNlbGVjdDJkLnVwZGF0ZShWKSx2LmdsVGV4dCYmdi5nbFRleHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC51cGRhdGUoVSl9KSl9ZWxzZSB2LmluaXQoKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6NjMzLCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6NzYzLCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzIjoxMTc0LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMTgzLCIuL2VkaXRfc3R5bGUiOjEyMTUsImdsLXRleHQiOjMyNiwicmVnbC1lcnJvcjJkIjo1MDgsInJlZ2wtbGluZTJkIjo1MDksInJlZ2wtc2NhdHRlcjJkIjo1MTB9XSwxMjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX3NjZW5lLGk9e2NvdW50OjAsZGlydHk6ITAsbGluZU9wdGlvbnM6W10sZmlsbE9wdGlvbnM6W10sbWFya2VyT3B0aW9uczpbXSxtYXJrZXJTZWxlY3RlZE9wdGlvbnM6W10sbWFya2VyVW5zZWxlY3RlZE9wdGlvbnM6W10sZXJyb3JYT3B0aW9uczpbXSxlcnJvcllPcHRpb25zOltdLHRleHRPcHRpb25zOltdLHRleHRTZWxlY3RlZE9wdGlvbnM6W10sdGV4dFVuc2VsZWN0ZWRPcHRpb25zOltdLHNlbGVjdEJhdGNoOltdLHVuc2VsZWN0QmF0Y2g6W119LGE9e2ZpbGwyZDohMSxzY2F0dGVyMmQ6ITEsZXJyb3IyZDohMSxsaW5lMmQ6ITEsZ2xUZXh0OiExLHNlbGVjdDJkOiExfTtyZXR1cm4gZS5fc2NlbmV8fCgocj1lLl9zY2VuZT17fSkuaW5pdD1mdW5jdGlvbigpe24uZXh0ZW5kRmxhdChyLGEsaSl9LHIuaW5pdCgpLHIudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPW4ucmVwZWF0KHQsci5jb3VudCk7aWYoci5maWxsMmQmJnIuZmlsbDJkLnVwZGF0ZShlKSxyLnNjYXR0ZXIyZCYmci5zY2F0dGVyMmQudXBkYXRlKGUpLHIubGluZTJkJiZyLmxpbmUyZC51cGRhdGUoZSksci5lcnJvcjJkJiZyLmVycm9yMmQudXBkYXRlKGUuY29uY2F0KGUpKSxyLnNlbGVjdDJkJiZyLnNlbGVjdDJkLnVwZGF0ZShlKSxyLmdsVGV4dClmb3IodmFyIGk9MDtpPHIuY291bnQ7aSsrKXIuZ2xUZXh0W2ldLnVwZGF0ZSh0KX0sci5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXIuY291bnQsZT1yLmZpbGwyZCxpPXIuZXJyb3IyZCxhPXIubGluZTJkLG89ci5zY2F0dGVyMmQscz1yLmdsVGV4dCxsPXIuc2VsZWN0MmQsYz1yLnNlbGVjdEJhdGNoLHU9ci51bnNlbGVjdEJhdGNoLGg9MDtoPHQ7aCsrKXtpZihlJiZyLmZpbGxPcmRlcltoXSYmZS5kcmF3KHIuZmlsbE9yZGVyW2hdKSxhJiZyLmxpbmVPcHRpb25zW2hdJiZhLmRyYXcoaCksaSYmKHIuZXJyb3JYT3B0aW9uc1toXSYmaS5kcmF3KGgpLHIuZXJyb3JZT3B0aW9uc1toXSYmaS5kcmF3KGgrdCkpLG8mJnIubWFya2VyT3B0aW9uc1toXSlpZih1W2hdLmxlbmd0aCl7dmFyIGY9bi5yZXBlYXQoW10sci5jb3VudCk7ZltoXT11W2hdLG8uZHJhdyhmKX1lbHNlIGNbaF0ubGVuZ3RofHxvLmRyYXcoaCk7c1toXSYmci50ZXh0T3B0aW9uc1toXSYmc1toXS5yZW5kZXIoKX1sJiZsLmRyYXcoYyksci5kaXJ0eT0hMX0sci5kZXN0cm95PWZ1bmN0aW9uKCl7ci5maWxsMmQmJnIuZmlsbDJkLmRlc3Ryb3kmJnIuZmlsbDJkLmRlc3Ryb3koKSxyLnNjYXR0ZXIyZCYmci5zY2F0dGVyMmQuZGVzdHJveSYmci5zY2F0dGVyMmQuZGVzdHJveSgpLHIuZXJyb3IyZCYmci5lcnJvcjJkLmRlc3Ryb3kmJnIuZXJyb3IyZC5kZXN0cm95KCksci5saW5lMmQmJnIubGluZTJkLmRlc3Ryb3kmJnIubGluZTJkLmRlc3Ryb3koKSxyLnNlbGVjdDJkJiZyLnNlbGVjdDJkLmRlc3Ryb3kmJnIuc2VsZWN0MmQuZGVzdHJveSgpLHIuZ2xUZXh0JiZyLmdsVGV4dC5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSkpLHIubGluZU9wdGlvbnM9bnVsbCxyLmZpbGxPcHRpb25zPW51bGwsci5tYXJrZXJPcHRpb25zPW51bGwsci5tYXJrZXJTZWxlY3RlZE9wdGlvbnM9bnVsbCxyLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zPW51bGwsci5lcnJvclhPcHRpb25zPW51bGwsci5lcnJvcllPcHRpb25zPW51bGwsci50ZXh0T3B0aW9ucz1udWxsLHIudGV4dFNlbGVjdGVkT3B0aW9ucz1udWxsLHIudGV4dFVuc2VsZWN0ZWRPcHRpb25zPW51bGwsci5zZWxlY3RCYXRjaD1udWxsLHIudW5zZWxlY3RCYXRjaD1udWxsLGUuX3NjZW5lPW51bGx9KSxyLmRpcnR5fHxuLmV4dGVuZEZsYXQocixpKSxyfX0seyIuLi8uLi9saWIiOjc1MH1dLDEyMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGk9dCgiLi9lZGl0X3N0eWxlIikuc3R5bGVUZXh0U2VsZWN0aW9uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2QsYT1bXSxvPXJbMF0udHJhY2Uscz1yWzBdLnQsbD1vLl9sZW5ndGgsYz1zLngsdT1zLnksaD1zLl9zY2VuZSxmPXMuaW5kZXg7aWYoIWgpcmV0dXJuIGE7dmFyIHA9bi5oYXNUZXh0KG8pLGQ9bi5oYXNNYXJrZXJzKG8pLGc9IWQmJiFwO2lmKCEwIT09by52aXNpYmxlfHxnKXJldHVybiBhO3ZhciBtPVtdLHY9W107aWYoITEhPT1lJiYhZS5kZWdlbmVyYXRlKWZvcih2YXIgeT0wO3k8bDt5KyspZS5jb250YWlucyhbcy54cHhbeV0scy55cHhbeV1dLCExLHksdCk/KG0ucHVzaCh5KSxhLnB1c2goe3BvaW50TnVtYmVyOnkseDpjW3ldLHk6dVt5XX0pKTp2LnB1c2goeSk7aWYoZCl7dmFyIHg9aC5zY2F0dGVyMmQ7aWYobS5sZW5ndGh8fHYubGVuZ3RoKXtpZighaC5zZWxlY3RCYXRjaFtmXS5sZW5ndGgmJiFoLnVuc2VsZWN0QmF0Y2hbZl0ubGVuZ3RoKXt2YXIgYj1uZXcgQXJyYXkoaC5jb3VudCk7YltmXT1oLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zW2ZdLHgudXBkYXRlLmFwcGx5KHgsYil9fWVsc2V7dmFyIF89bmV3IEFycmF5KGguY291bnQpO19bZl09aC5tYXJrZXJPcHRpb25zW2ZdLHgudXBkYXRlLmFwcGx5KHgsXyl9fXJldHVybiBoLnNlbGVjdEJhdGNoW2ZdPW0saC51bnNlbGVjdEJhdGNoW2ZdPXYscCYmaShyKSxhfX0seyIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMTgzLCIuL2VkaXRfc3R5bGUiOjEyMTV9XSwxMjIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsZj1hLmxpbmUscD1hLm1hcmtlcjtlLmV4cG9ydHM9aCh7bG9uOmEubG9uLGxhdDphLmxhdCxtb2RlOnUoe30sby5tb2RlLHtkZmx0OiJtYXJrZXJzIn0pLHRleHQ6dSh7fSxvLnRleHQse30pLHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsibGF0IiwibG9uIiwidGV4dCJdfSksaG92ZXJ0ZXh0OnUoe30sby5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOmYuY29sb3Isd2lkdGg6Zi53aWR0aH0sY29ubmVjdGdhcHM6by5jb25uZWN0Z2FwcyxtYXJrZXI6dSh7c3ltYm9sOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMH0sYW5nbGU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoiYXV0byIsYXJyYXlPazohMH0sYWxsb3dvdmVybGFwOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5OnAub3BhY2l0eSxzaXplOnAuc2l6ZSxzaXplcmVmOnAuc2l6ZXJlZixzaXplbWluOnAuc2l6ZW1pbixzaXplbW9kZTpwLnNpemVtb2RlfSxjKCJtYXJrZXIiKSksZmlsbDphLmZpbGwsZmlsbGNvbG9yOm8uZmlsbGNvbG9yLHRleHRmb250OnMubGF5ZXJzLnN5bWJvbC50ZXh0Zm9udCx0ZXh0cG9zaXRpb246cy5sYXllcnMuc3ltYm9sLnRleHRwb3NpdGlvbixiZWxvdzp7dmFsVHlwZToic3RyaW5nIn0sc2VsZWN0ZWQ6e21hcmtlcjpvLnNlbGVjdGVkLm1hcmtlcn0sdW5zZWxlY3RlZDp7bWFya2VyOm8udW5zZWxlY3RlZC5tYXJrZXJ9LGhvdmVyaW5mbzp1KHt9LGwuaG92ZXJpbmZvLHtmbGFnczpbImxvbiIsImxhdCIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOm4oKX0sImNhbGMiLCJuZXN0ZWQiKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjIyLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzk1LCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjg1OCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODc3LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExNTgsIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyI6MTIwMH1dLDEyMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSx1PXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxoPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9jb252ZXJ0X3RleHRfb3B0cyIpLGY9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLHA9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikuTkVXTElORVMsZD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKS5CUl9UQUdfQUxMO2Z1bmN0aW9uIGcoKXtyZXR1cm57Z2VvanNvbjpvLm1ha2VCbGFuaygpLGxheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIGkuaXNBcnJheU9yVHlwZWRBcnJheSh0KT9lP2Z1bmN0aW9uKGUpe3JldHVybiBuKHRbZV0pPyt0W2VdOjB9OmZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfTp0P2Z1bmN0aW9uKCl7cmV0dXJuIHR9OnZ9ZnVuY3Rpb24gdigpe3JldHVybiIifWZ1bmN0aW9uIHkodCl7cmV0dXJuIHRbMF09PT1hfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGE9ZVswXS50cmFjZSx4PSEwPT09YS52aXNpYmxlJiYwIT09YS5fbGVuZ3RoLGI9Im5vbmUiIT09YS5maWxsLF89dS5oYXNMaW5lcyhhKSx3PXUuaGFzTWFya2VycyhhKSxUPXUuaGFzVGV4dChhKSxrPXcmJiJjaXJjbGUiPT09YS5tYXJrZXIuc3ltYm9sLE09dyYmImNpcmNsZSIhPT1hLm1hcmtlci5zeW1ib2wsQT1nKCksUz1nKCksRT1nKCksQz1nKCksTD17ZmlsbDpBLGxpbmU6UyxjaXJjbGU6RSxzeW1ib2w6Q307aWYoIXgpcmV0dXJuIEw7aWYoKGJ8fF8pJiYocj1vLmNhbGNUcmFjZVRvTGluZUNvb3JkcyhlKSksYiYmKEEuZ2VvanNvbj1vLm1ha2VQb2x5Z29uKHIpLEEubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLGkuZXh0ZW5kRmxhdChBLnBhaW50LHsiZmlsbC1jb2xvciI6YS5maWxsY29sb3J9KSksXyYmKFMuZ2VvanNvbj1vLm1ha2VMaW5lKHIpLFMubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLGkuZXh0ZW5kRmxhdChTLnBhaW50LHsibGluZS13aWR0aCI6YS5saW5lLndpZHRoLCJsaW5lLWNvbG9yIjphLmxpbmUuY29sb3IsImxpbmUtb3BhY2l0eSI6YS5vcGFjaXR5fSkpLGspe3ZhciBQPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHU9dFswXS50cmFjZSxoPXUubWFya2VyLGY9dS5zZWxlY3RlZHBvaW50cyxwPWkuaXNBcnJheU9yVHlwZWRBcnJheShoLmNvbG9yKSxkPWkuaXNBcnJheU9yVHlwZWRBcnJheShoLnNpemUpLGc9aS5pc0FycmF5T3JUeXBlZEFycmF5KGgub3BhY2l0eSk7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdS5vcGFjaXR5KnR9cCYmKHI9cy5oYXNDb2xvcnNjYWxlKHUsIm1hcmtlciIpP3MubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKGgpOmkuaWRlbnRpdHkpO2QmJihhPWModSkpO2cmJihvPWZ1bmN0aW9uKHQpe3JldHVybiBtKG4odCk/K2kuY29uc3RyYWluKHQsMCwxKTowKX0pO3ZhciB2LHg9W107Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGI9dFtlXSxfPWIubG9ubGF0O2lmKCF5KF8pKXt2YXIgdz17fTtyJiYody5tY2M9Yi5tY2M9cihiLm1jKSksYSYmKHcubXJjPWIubXJjPWEoYi5tcykpLG8mJih3Lm1vPW8oYi5tbykpLGYmJih3LnNlbGVjdGVkPWIuc2VsZWN0ZWR8fDApLHgucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpffSxwcm9wZXJ0aWVzOnd9KX19aWYoZilmb3Iodj1sLm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnModSksZT0wO2U8eC5sZW5ndGg7ZSsrKXt2YXIgVD14W2VdLnByb3BlcnRpZXM7di5zZWxlY3RlZE9wYWNpdHlGbiYmKFQubW89bSh2LnNlbGVjdGVkT3BhY2l0eUZuKFQpKSksdi5zZWxlY3RlZENvbG9yRm4mJihULm1jYz12LnNlbGVjdGVkQ29sb3JGbihUKSksdi5zZWxlY3RlZFNpemVGbiYmKFQubXJjPXYuc2VsZWN0ZWRTaXplRm4oVCkpfXJldHVybntnZW9qc29uOnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6eH0sbWNjOnB8fHYmJnYuc2VsZWN0ZWRDb2xvckZuP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1jYyJ9OmguY29sb3IsbXJjOmR8fHYmJnYuc2VsZWN0ZWRTaXplRm4/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibXJjIn06KGs9aC5zaXplLGsvMiksbW86Z3x8diYmdi5zZWxlY3RlZE9wYWNpdHlGbj97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9Om0oaC5vcGFjaXR5KX07dmFyIGt9KGUpO0UuZ2VvanNvbj1QLmdlb2pzb24sRS5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsaS5leHRlbmRGbGF0KEUucGFpbnQseyJjaXJjbGUtY29sb3IiOlAubWNjLCJjaXJjbGUtcmFkaXVzIjpQLm1yYywiY2lyY2xlLW9wYWNpdHkiOlAubW99KX1pZigoTXx8VCkmJihDLmdlb2pzb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5fZnVsbExheW91dCxuPXRbMF0udHJhY2UsYT1uLm1hcmtlcnx8e30sbz1hLnN5bWJvbCxzPWEuYW5nbGUsbD0iY2lyY2xlIiE9PW8/bShvKTp2LGM9ImF1dG8iIT09cz9tKHMsITApOnYsaD11Lmhhc1RleHQobik/bShuLnRleHQpOnYsZz1bXSx4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBiPXRbeF07aWYoIXkoYi5sb25sYXQpKXt2YXIgXyx3PW4udGV4dHRlbXBsYXRlO2lmKHcpe3ZhciBUPUFycmF5LmlzQXJyYXkodyk/d1t4XXx8IiI6dyxrPW4uX21vZHVsZS5mb3JtYXRMYWJlbHMoYixuLHIpLE09e307ZihNLG4sYi5pKTt2YXIgQT1uLl9tZXRhfHx7fTtfPWkudGV4dHRlbXBsYXRlU3RyaW5nKFQsayxyLl9kM2xvY2FsZSxNLGIsQSl9ZWxzZSBfPWgoeCk7XyYmKF89Xy5yZXBsYWNlKHAsIiIpLnJlcGxhY2UoZCwiXG4iKSksZy5wdXNoKHt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOmIubG9ubGF0fSxwcm9wZXJ0aWVzOntzeW1ib2w6bCh4KSxhbmdsZTpjKHgpLHRleHQ6X319KX19cmV0dXJue3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpnfX0oZSx0KSxpLmV4dGVuZEZsYXQoQy5sYXlvdXQse3Zpc2liaWxpdHk6InZpc2libGUiLCJpY29uLWltYWdlIjoie3N5bWJvbH0tMTUiLCJ0ZXh0LWZpZWxkIjoie3RleHR9In0pLE0mJihpLmV4dGVuZEZsYXQoQy5sYXlvdXQseyJpY29uLXNpemUiOmEubWFya2VyLnNpemUvMTB9KSwiYW5nbGUiaW4gYS5tYXJrZXImJiJhdXRvIiE9PWEubWFya2VyLmFuZ2xlJiZpLmV4dGVuZEZsYXQoQy5sYXlvdXQseyJpY29uLXJvdGF0ZSI6e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToiYW5nbGUifSwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSksQy5sYXlvdXRbImljb24tYWxsb3ctb3ZlcmxhcCJdPWEubWFya2VyLmFsbG93b3ZlcmxhcCxpLmV4dGVuZEZsYXQoQy5wYWludCx7Imljb24tb3BhY2l0eSI6YS5vcGFjaXR5KmEubWFya2VyLm9wYWNpdHksImljb24tY29sb3IiOmEubWFya2VyLmNvbG9yfSkpLFQpKXt2YXIgST0oYS5tYXJrZXJ8fHt9KS5zaXplLHo9aChhLnRleHRwb3NpdGlvbixJKTtpLmV4dGVuZEZsYXQoQy5sYXlvdXQseyJ0ZXh0LXNpemUiOmEudGV4dGZvbnQuc2l6ZSwidGV4dC1hbmNob3IiOnouYW5jaG9yLCJ0ZXh0LW9mZnNldCI6ei5vZmZzZXR9KSxpLmV4dGVuZEZsYXQoQy5wYWludCx7InRleHQtY29sb3IiOmEudGV4dGZvbnQuY29sb3IsInRleHQtb3BhY2l0eSI6YS5vcGFjaXR5fSl9cmV0dXJuIEx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NTEsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo3NDQsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6Nzc0LCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiOjg1NSwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjExNzUsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExODMsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX1pZihmdW5jdGlvbih0LGUscil7dmFyIG49cigibG9uIil8fFtdLGk9cigibGF0Iil8fFtdLGE9TWF0aC5taW4obi5sZW5ndGgsaS5sZW5ndGgpO3JldHVybiBlLl9sZW5ndGg9YSxhfSgwLGUsaCkpe2lmKGgoInRleHQiKSxoKCJ0ZXh0dGVtcGxhdGUiKSxoKCJob3ZlcnRleHQiKSxoKCJob3ZlcnRlbXBsYXRlIiksaCgibW9kZSIpLGgoImJlbG93IiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsdSxoLHtub0Rhc2g6ITB9KSxoKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkpe2EodCxlLHIsdSxoLHtub0xpbmU6ITB9KSxoKCJtYXJrZXIuYWxsb3dvdmVybGFwIiksaCgibWFya2VyLmFuZ2xlIik7dmFyIGY9ZS5tYXJrZXI7ImNpcmNsZSIhPT1mLnN5bWJvbCYmKG4uaXNBcnJheU9yVHlwZWRBcnJheShmLnNpemUpJiYoZi5zaXplPWYuc2l6ZVswXSksbi5pc0FycmF5T3JUeXBlZEFycmF5KGYuY29sb3IpJiYoZi5jb2xvcj1mLmNvbG9yWzBdKSl9aS5oYXNUZXh0KGUpJiZzKHQsZSx1LGgse25vU2VsZWN0OiEwfSksaCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmbCh0LGUscixoKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxoKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NTAsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTY2LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjExNzEsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMTc3LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMTgzLCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjExODQsIi4vYXR0cmlidXRlcyI6MTIyM31dLDEyMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHR9fSx7fV0sMTIyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9e30sYT1yW2Uuc3VicGxvdF0uX3N1YnBsb3QubW9ja0F4aXMsbz10LmxvbmxhdDtyZXR1cm4gaS5sb25MYWJlbD1uLnRpY2tUZXh0KGEsYS5jMmwob1swXSksITApLnRleHQsaS5sYXRMYWJlbD1uLnRpY2tUZXh0KGEsYS5jMmwob1sxXSksITApLnRleHQsaX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OX1dLDEyMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLG89aS5maWxsVGV4dCxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10LmNkLGM9bFswXS50cmFjZSx1PXQueGEsaD10LnlhLGY9dC5zdWJwbG90LHA9MzYwKihlPj0wP01hdGguZmxvb3IoKGUrMTgwKS8zNjApOk1hdGguY2VpbCgoZS0xODApLzM2MCkpLGQ9ZS1wO2lmKG4uZ2V0Q2xvc2VzdChsLChmdW5jdGlvbih0KXt2YXIgZT10LmxvbmxhdDtpZihlWzBdPT09cylyZXR1cm4gMS8wO3ZhciBuPWkubW9kSGFsZihlWzBdLDM2MCksYT1lWzFdLG89Zi5wcm9qZWN0KFtuLGFdKSxsPW8ueC11LmMycChbZCxhXSksYz1vLnktaC5jMnAoW24scl0pLHA9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChsKmwrYypjKS1wLDEtMy9wKX0pLHQpLCExIT09dC5pbmRleCl7dmFyIGc9bFt0LmluZGV4XSxtPWcubG9ubGF0LHY9W2kubW9kSGFsZihtWzBdLDM2MCkrcCxtWzFdXSx5PXUuYzJwKHYpLHg9aC5jMnAodiksYj1nLm1yY3x8MTt0LngwPXktYix0LngxPXkrYix0LnkwPXgtYix0LnkxPXgrYjt2YXIgXz17fTtfW2Muc3VicGxvdF09e19zdWJwbG90OmZ9O3ZhciB3PWMuX21vZHVsZS5mb3JtYXRMYWJlbHMoZyxjLF8pO3JldHVybiB0LmxvbkxhYmVsPXcubG9uTGFiZWwsdC5sYXRMYWJlbD13LmxhdExhYmVsLHQuY29sb3I9YShjLGcpLHQuZXh0cmFUZXh0PWZ1bmN0aW9uKHQsZSxyKXtpZih0LmhvdmVydGVtcGxhdGUpcmV0dXJuO3ZhciBuPShlLmhpfHx0LmhvdmVyaW5mbykuc3BsaXQoIisiKSxpPS0xIT09bi5pbmRleE9mKCJhbGwiKSxhPS0xIT09bi5pbmRleE9mKCJsb24iKSxzPS0xIT09bi5pbmRleE9mKCJsYXQiKSxsPWUubG9ubGF0LGM9W107ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdCsiXHhiMCJ9aXx8YSYmcz9jLnB1c2goIigiK3UobFswXSkrIiwgIit1KGxbMV0pKyIpIik6YT9jLnB1c2goci5sb24rdShsWzBdKSk6cyYmYy5wdXNoKHIubGF0K3UobFsxXSkpOyhpfHwtMSE9PW4uaW5kZXhPZigidGV4dCIpKSYmbyhlLHQsYyk7cmV0dXJuIGMuam9pbigiPGJyPiIpfShjLGcsbFswXS50LmxhYmVscyksdC5ob3ZlcnRlbXBsYXRlPWMuaG92ZXJ0ZW1wbGF0ZSxbdF19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NTUsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMTY4fV0sMTIyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi4vc2NhdHRlcmdlby9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZShlKX0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJtYXBib3giLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLGNhdGVnb3JpZXM6WyJtYXBib3giLCJnbCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvbWFwYm94Ijo4NTYsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMTc2LCIuLi9zY2F0dGVyZ2VvL2NhbGMiOjEyMDEsIi4vYXR0cmlidXRlcyI6MTIyMywiLi9kZWZhdWx0cyI6MTIyNSwiLi9ldmVudF9kYXRhIjoxMjI2LCIuL2Zvcm1hdF9sYWJlbHMiOjEyMjcsIi4vaG92ZXIiOjEyMjgsIi4vcGxvdCI6MTIzMCwiLi9zZWxlY3QiOjEyMzF9XSwxMjMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29udmVydCIpLGk9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyIpLnRyYWNlTGF5ZXJQcmVmaXgsYT1bImZpbGwiLCJsaW5lIiwiY2lyY2xlIiwic3ltYm9sIl07ZnVuY3Rpb24gbyh0LGUpe3RoaXMudHlwZT0ic2NhdHRlcm1hcGJveCIsdGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9ZSx0aGlzLnNvdXJjZUlkcz17ZmlsbDoic291cmNlLSIrZSsiLWZpbGwiLGxpbmU6InNvdXJjZS0iK2UrIi1saW5lIixjaXJjbGU6InNvdXJjZS0iK2UrIi1jaXJjbGUiLHN5bWJvbDoic291cmNlLSIrZSsiLXN5bWJvbCJ9LHRoaXMubGF5ZXJJZHM9e2ZpbGw6aStlKyItZmlsbCIsbGluZTppK2UrIi1saW5lIixjaXJjbGU6aStlKyItY2lyY2xlIixzeW1ib2w6aStlKyItc3ltYm9sIn0sdGhpcy5iZWxvdz1udWxsfXZhciBzPW8ucHJvdG90eXBlO3MuYWRkU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5hZGRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0se3R5cGU6Imdlb2pzb24iLGRhdGE6ZS5nZW9qc29ufSl9LHMuc2V0U291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuZ2V0U291cmNlKHRoaXMuc291cmNlSWRzW3RdKS5zZXREYXRhKGUuZ2VvanNvbil9LHMuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3VicGxvdC5hZGRMYXllcih7dHlwZTp0LGlkOnRoaXMubGF5ZXJJZHNbdF0sc291cmNlOnRoaXMuc291cmNlSWRzW3RdLGxheW91dDplLmxheW91dCxwYWludDplLnBhaW50fSxyKX0scy51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixpLG89dGhpcy5zdWJwbG90LHM9by5tYXAsbD1uKG8uZ2QsdCksYz1vLmJlbG93TG9va3VwWyJ0cmFjZS0iK3RoaXMudWlkXTtpZihjIT09dGhpcy5iZWxvdyl7Zm9yKGU9YS5sZW5ndGgtMTtlPj0wO2UtLSlyPWFbZV0scy5yZW1vdmVMYXllcih0aGlzLmxheWVySWRzW3JdKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWk9bFtyPWFbZV1dLHRoaXMuYWRkTGF5ZXIocixpLGMpO3RoaXMuYmVsb3c9Y31mb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWk9bFtyPWFbZV1dLG8uc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW3JdLCJzZXRMYXlvdXRQcm9wZXJ0eSIsaS5sYXlvdXQpLCJ2aXNpYmxlIj09PWkubGF5b3V0LnZpc2liaWxpdHkmJih0aGlzLnNldFNvdXJjZURhdGEocixpKSxvLnNldE9wdGlvbnModGhpcy5sYXllcklkc1tyXSwic2V0UGFpbnRQcm9wZXJ0eSIsaS5wYWludCkpO3RbMF0udHJhY2UuX2dsVHJhY2U9dGhpc30scy5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT1hLmxlbmd0aC0xO2U+PTA7ZS0tKXt2YXIgcj1hW2VdO3QucmVtb3ZlTGF5ZXIodGhpcy5sYXllcklkc1tyXSksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZHNbcl0pfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbMF0udHJhY2UsaT1uZXcgbyh0LHIudWlkKSxzPW4odC5nZCxlKSxsPWkuYmVsb3c9dC5iZWxvd0xvb2t1cFsidHJhY2UtIityLnVpZF0sYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGg9c1t1XTtpLmFkZFNvdXJjZSh1LGgpLGkuYWRkTGF5ZXIodSxoLGwpfXJldHVybiBlWzBdLnRyYWNlLl9nbFRyYWNlPWksaX19LHsiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyI6ODU0LCIuL2NvbnZlcnQiOjEyMjR9XSwxMjMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvPXQuY2Qscz10LnhheGlzLGw9dC55YXhpcyxjPVtdLHU9b1swXS50cmFjZTtpZighaS5oYXNNYXJrZXJzKHUpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocj0wO3I8by5sZW5ndGg7cisrKW9bcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBoPW9bcl0sZj1oLmxvbmxhdDtpZihmWzBdIT09YSl7dmFyIHA9W24ubW9kSGFsZihmWzBdLDM2MCksZlsxXV0sZD1bcy5jMnAocCksbC5jMnAocCldO2UuY29udGFpbnMoZCxudWxsLHIsdCk/KGMucHVzaCh7cG9pbnROdW1iZXI6cixsb246ZlswXSxsYXQ6ZlsxXX0pLGguc2VsZWN0ZWQ9MSk6aC5zZWxlY3RlZD0wfX1yZXR1cm4gY319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuLi8uLi9saWIiOjc1MCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTE4M31dLDEyMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD1vLmxpbmU7ZS5leHBvcnRzPXttb2RlOm8ubW9kZSxyOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRoZXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHIwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGRyOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHRoZXRhMDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkdGhldGE6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx0aGV0YXVuaXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhZGlhbnMiLCJkZWdyZWVzIiwiZ3JhZGlhbnMiXSxkZmx0OiJkZWdyZWVzIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRleHQ6by50ZXh0LHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsiciIsInRoZXRhIiwidGV4dCJdfSksaG92ZXJ0ZXh0Om8uaG92ZXJ0ZXh0LGxpbmU6e2NvbG9yOmwuY29sb3Isd2lkdGg6bC53aWR0aCxkYXNoOmwuZGFzaCxzaGFwZTphKHt9LGwuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOmwuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6by5jb25uZWN0Z2FwcyxtYXJrZXI6by5tYXJrZXIsY2xpcG9uYXhpczphKHt9LG8uY2xpcG9uYXhpcyx7ZGZsdDohMX0pLHRleHRwb3NpdGlvbjpvLnRleHRwb3NpdGlvbix0ZXh0Zm9udDpvLnRleHRmb250LGZpbGw6YSh7fSxvLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXSxkZmx0OiJub25lIn0pLGZpbGxjb2xvcjpvLmZpbGxjb2xvcixob3ZlcmluZm86YSh7fSxzLmhvdmVyaW5mbyx7ZmxhZ3M6WyJyIiwidGhldGEiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJvbjpvLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTpuKCksc2VsZWN0ZWQ6by5zZWxlY3RlZCx1bnNlbGVjdGVkOm8udW5zZWxlY3RlZH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTU4fV0sMTIzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHM9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxjPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LHU9ZS5zdWJwbG90LGg9clt1XS5yYWRpYWxheGlzLGY9clt1XS5hbmd1bGFyYXhpcyxwPWgubWFrZUNhbGNkYXRhKGUsInIiKSxkPWYubWFrZUNhbGNkYXRhKGUsInRoZXRhIiksZz1lLl9sZW5ndGgsbT1uZXcgQXJyYXkoZyksdj0wO3Y8Zzt2Kyspe3ZhciB5PXBbdl0seD1kW3ZdLGI9bVt2XT17fTtuKHkpJiZuKHgpPyhiLnI9eSxiLnRoZXRhPXgpOmIucj1pfXZhciBfPWMoZSxnKTtyZXR1cm4gZS5fZXh0cmVtZXMueD1hLmZpbmRFeHRyZW1lcyhoLHAse3BwYWQ6X30pLG8odCxlKSxzKG0sZSksbChtLGUpLG19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjExNTcsIi4uL3NjYXR0ZXIvY2FsYyI6MTE1OSwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE2MCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExNjEsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMjM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLlBUU19MSU5FU09OTFksaD10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBmKHQsZSxyLG4pe3ZhciBpLGE9bigiciIpLG89bigidGhldGEiKTtpZihhKW8/aT1NYXRoLm1pbihhLmxlbmd0aCxvLmxlbmd0aCk6KGk9YS5sZW5ndGgsbigidGhldGEwIiksbigiZHRoZXRhIikpO2Vsc2V7aWYoIW8pcmV0dXJuIDA7aT1lLnRoZXRhLmxlbmd0aCxuKCJyMCIpLG4oImRyIil9cmV0dXJuIGUuX2xlbmd0aD1pLGl9ZS5leHBvcnRzPXtoYW5kbGVSVGhldGFEZWZhdWx0czpmLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX12YXIgZz1mKHQsZSxwLGQpO2lmKGcpe2QoInRoZXRhdW5pdCIpLGQoIm1vZGUiLGc8dT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksZCgidGV4dCIpLGQoImhvdmVydGV4dCIpLCJmaWxscyIhPT1lLmhvdmVyb24mJmQoImhvdmVydGVtcGxhdGUiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscixwLGQpLHModCxlLGQpLGQoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscixwLGQse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiYoZCgidGV4dHRlbXBsYXRlIiksbCh0LGUscCxkKSk7dmFyIG09W107KGkuaGFzTWFya2VycyhlKXx8aS5oYXNUZXh0KGUpKSYmKGQoImNsaXBvbmF4aXMiKSxkKCJtYXJrZXIubWF4ZGlzcGxheWVkIiksbS5wdXNoKCJwb2ludHMiKSksZCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKGModCxlLHIsZCksaS5oYXNMaW5lcyhlKXx8cyh0LGUsZCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8bS5wdXNoKCJmaWxscyIpLGQoImhvdmVyb24iLG0uam9pbigiKyIpfHwicG9pbnRzIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZCl9ZWxzZSBlLnZpc2libGU9ITF9fX0seyIuLi8uLi9saWIiOjc1MCwiLi4vc2NhdHRlci9jb25zdGFudHMiOjExNjIsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTY2LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjExNzEsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTE3MywiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjExNzcsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExODMsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTE4NCwiLi9hdHRyaWJ1dGVzIjoxMjMyfV0sMTIzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHM9e30sbD1yW2Uuc3VicGxvdF0uX3N1YnBsb3Q7bD8oYT1sLnJhZGlhbEF4aXMsbz1sLmFuZ3VsYXJBeGlzKTooYT0obD1yW2Uuc3VicGxvdF0pLnJhZGlhbGF4aXMsbz1sLmFuZ3VsYXJheGlzKTt2YXIgYz1hLmMybCh0LnIpO3MuckxhYmVsPWkudGlja1RleHQoYSxjLCEwKS50ZXh0O3ZhciB1PSJkZWdyZWVzIj09PW8udGhldGF1bml0P24ucmFkMmRlZyh0LnRoZXRhKTp0LnRoZXRhO3JldHVybiBzLnRoZXRhTGFiZWw9aS50aWNrVGV4dChvLHUsITApLnRleHQsc319LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTl9XSwxMjM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPXIucmFkaWFsQXhpcyxhPXIuYW5ndWxhckF4aXM7aS5faG92ZXJ0aXRsZT0iciIsYS5faG92ZXJ0aXRsZT0iXHUwM2I4Ijt2YXIgbz17fTtvW2Uuc3VicGxvdF09e19zdWJwbG90OnJ9O3ZhciBzPWUuX21vZHVsZS5mb3JtYXRMYWJlbHModCxlLG8pO24uckxhYmVsPXMuckxhYmVsLG4udGhldGFMYWJlbD1zLnRoZXRhTGFiZWw7dmFyIGw9dC5oaXx8ZS5ob3ZlcmluZm8sYz1bXTtmdW5jdGlvbiB1KHQsZSl7Yy5wdXNoKHQuX2hvdmVydGl0bGUrIjogIitlKX1pZighZS5ob3ZlcnRlbXBsYXRlKXt2YXIgaD1sLnNwbGl0KCIrIik7LTEhPT1oLmluZGV4T2YoImFsbCIpJiYoaD1bInIiLCJ0aGV0YSIsInRleHQiXSksLTEhPT1oLmluZGV4T2YoInIiKSYmdShpLG4uckxhYmVsKSwtMSE9PWguaW5kZXhPZigidGhldGEiKSYmdShhLG4udGhldGFMYWJlbCksLTEhPT1oLmluZGV4T2YoInRleHQiKSYmbi50ZXh0JiYoYy5wdXNoKG4udGV4dCksZGVsZXRlIG4udGV4dCksbi5leHRyYVRleHQ9Yy5qb2luKCI8YnI+Iil9fWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvJiYhMSE9PW9bMF0uaW5kZXgpe3ZhciBzPW9bMF07aWYodm9pZCAwPT09cy5pbmRleClyZXR1cm4gbzt2YXIgbD10LnN1YnBsb3QsYz1zLmNkW3MuaW5kZXhdLHU9cy50cmFjZTtpZihsLmlzUHRJbnNpZGUoYykpcmV0dXJuIHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDAsaShjLHUsbCxzKSxzLmhvdmVydGVtcGxhdGU9dS5ob3ZlcnRlbXBsYXRlLG99fSxtYWtlSG92ZXJQb2ludFRleHQ6aX19LHsiLi4vc2NhdHRlci9ob3ZlciI6MTE2OX1dLDEyMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcnBvbGFyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9wb2xhciIpLGNhdGVnb3JpZXM6WyJwb2xhciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlci9zZWxlY3QiKSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9wb2xhciI6ODY1LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTE3NiwiLi4vc2NhdHRlci9zZWxlY3QiOjExODAsIi4uL3NjYXR0ZXIvc3R5bGUiOjExODIsIi4vYXR0cmlidXRlcyI6MTIzMiwiLi9jYWxjIjoxMjMzLCIuL2RlZmF1bHRzIjoxMjM0LCIuL2Zvcm1hdF9sYWJlbHMiOjEyMzUsIi4vaG92ZXIiOjEyMzYsIi4vcGxvdCI6MTIzOH1dLDEyMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIiksbz17eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHBsb3Q6ZS5mcmFtZXdvcmssbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbH0scz1lLnJhZGlhbEF4aXMsbD1lLmFuZ3VsYXJBeGlzLGM9MDtjPHIubGVuZ3RoO2MrKylmb3IodmFyIHU9cltjXSxoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF0scD1mLnI7aWYocD09PWkpZi54PWYueT1pO2Vsc2V7dmFyIGQ9cy5jMmcocCksZz1sLmMyZyhmLnRoZXRhKTtmLng9ZCpNYXRoLmNvcyhnKSxmLnk9ZCpNYXRoLnNpbihnKX19bih0LG8scixhKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuLi9zY2F0dGVyL3Bsb3QiOjExNzl9XSwxMjM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzO2UuZXhwb3J0cz17bW9kZTpuLm1vZGUscjpuLnIsdGhldGE6bi50aGV0YSxyMDpuLnIwLGRyOm4uZHIsdGhldGEwOm4udGhldGEwLGR0aGV0YTpuLmR0aGV0YSx0aGV0YXVuaXQ6bi50aGV0YXVuaXQsdGV4dDpuLnRleHQsdGV4dHRlbXBsYXRlOmEoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJyIiwidGhldGEiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsbGluZTppLmxpbmUsY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxtYXJrZXI6aS5tYXJrZXIsZmlsbDppLmZpbGwsZmlsbGNvbG9yOmkuZmlsbGNvbG9yLHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbix0ZXh0Zm9udDppLnRleHRmb250LGhvdmVyaW5mbzpuLmhvdmVyaW5mbyxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkfX0seyIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NzcsIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIjoxMjEwLCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlcyI6MTIzMn1dLDEyNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxpPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGE9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbD1lLnN1YnBsb3QsYz1yW2xdLnJhZGlhbGF4aXMsdT1yW2xdLmFuZ3VsYXJheGlzLGg9ZS5fcj1jLm1ha2VDYWxjZGF0YShlLCJyIiksZj1lLl90aGV0YT11Lm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLHA9ZS5fbGVuZ3RoLGQ9e307cDxoLmxlbmd0aCYmKGg9aC5zbGljZSgwLHApKSxwPGYubGVuZ3RoJiYoZj1mLnNsaWNlKDAscCkpLGQucj1oLGQudGhldGE9ZixuKHQsZSk7dmFyIGcsbT1kLm9wdHM9YS5zdHlsZSh0LGUpO3JldHVybiBwPHM/Zz1pKGUscCk6bS5tYXJrZXImJihnPTIqKG0ubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KG0ubWFya2VyLnNpemUsMykpKSxlLl9leHRyZW1lcy54PW8uZmluZEV4dHJlbWVzKGMsaCx7cHBhZDpnfSksW3t4OiExLHk6ITEsdDpkLHRyYWNlOmV9XX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc5OSwiLi4vc2NhdHRlci9jYWxjIjoxMTU5LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE2MSwiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyI6MTIxMiwiLi4vc2NhdHRlcmdsL2NvbnZlcnQiOjEyMTN9XSwxMjQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIikuaGFuZGxlUlRoZXRhRGVmYXVsdHMsbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLlBUU19MSU5FU09OTFksaD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGkpfXZhciBkPWEodCxlLGYscCk7ZD8ocCgidGhldGF1bml0IikscCgibW9kZSIsZDx1PyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxwKCJ0ZXh0IikscCgiaG92ZXJ0ZXh0IiksImZpbGxzIiE9PWUuaG92ZXJvbiYmcCgiaG92ZXJ0ZW1wbGF0ZSIpLGkuaGFzTGluZXMoZSkmJihzKHQsZSxyLGYscCkscCgiY29ubmVjdGdhcHMiKSksaS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGYscCksaS5oYXNUZXh0KGUpJiYocCgidGV4dHRlbXBsYXRlIiksbCh0LGUsZixwKSkscCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmYyh0LGUscixwKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vc2NhdHRlci9jb25zdGFudHMiOjExNjIsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTY2LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjExNzEsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMTc3LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMTgzLCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjExODQsIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyI6MTIzNCwiLi9hdHRyaWJ1dGVzIjoxMjM5fV0sMTI0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVycG9sYXIvZm9ybWF0X2xhYmVscyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5pO3JldHVybiJyImluIHR8fCh0LnI9ZS5fcltpXSksInRoZXRhImluIHR8fCh0LnRoZXRhPWUuX3RoZXRhW2ldKSxuKHQsZSxyKX19LHsiLi4vc2NhdHRlcnBvbGFyL2Zvcm1hdF9sYWJlbHMiOjEyMzV9XSwxMjQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJnbC9ob3ZlciIpLGk9dCgiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIikubWFrZUhvdmVyUG9pbnRUZXh0O2UuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89dC5jZFswXS50LHM9by5yLGw9by50aGV0YSxjPW4uaG92ZXJQb2ludHModCxlLHIsYSk7aWYoYyYmITEhPT1jWzBdLmluZGV4KXt2YXIgdT1jWzBdO2lmKHZvaWQgMD09PXUuaW5kZXgpcmV0dXJuIGM7dmFyIGg9dC5zdWJwbG90LGY9dS5jZFt1LmluZGV4XSxwPXUudHJhY2U7aWYoZi5yPXNbdS5pbmRleF0sZi50aGV0YT1sW3UuaW5kZXhdLGguaXNQdEluc2lkZShmKSlyZXR1cm4gdS54TGFiZWxWYWw9dm9pZCAwLHUueUxhYmVsVmFsPXZvaWQgMCxpKGYscCxoLHUpLGN9fX19LHsiLi4vc2NhdHRlcmdsL2hvdmVyIjoxMjE4LCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiOjEyMzZ9XSwxMjQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJwb2xhcmdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9wb2xhciIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJwb2xhciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlcmdsL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo4NjUsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMTc2LCIuLi9zY2F0dGVyZ2wvc2VsZWN0IjoxMjIyLCIuL2F0dHJpYnV0ZXMiOjEyMzksIi4vY2FsYyI6MTI0MCwiLi9kZWZhdWx0cyI6MTI0MSwiLi9mb3JtYXRfbGFiZWxzIjoxMjQyLCIuL2hvdmVyIjoxMjQzLCIuL3Bsb3QiOjEyNDV9XSwxMjQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvcG9pbnQtY2x1c3RlciIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL3NjYXR0ZXJnbC9wbG90Iiksbz10KCIuLi9zY2F0dGVyZ2wvc2NlbmVfdXBkYXRlIikscz10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciB1PWUucmFkaWFsQXhpcyxoPWUuYW5ndWxhckF4aXMsZj1vKHQsZSk7cmV0dXJuIHIuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYociYmclswXSYmclswXS50cmFjZSl7dmFyIGEsbz1yWzBdLHA9by50cmFjZSxkPW8udCxnPXAuX2xlbmd0aCxtPWQucix2PWQudGhldGEseT1kLm9wdHMseD1tLnNsaWNlKCksYj12LnNsaWNlKCk7Zm9yKGE9MDthPG0ubGVuZ3RoO2ErKyllLmlzUHRJbnNpZGUoe3I6bVthXSx0aGV0YTp2W2FdfSl8fCh4W2FdPU5hTixiW2FdPU5hTik7dmFyIF89bmV3IEFycmF5KDIqZyksdz1BcnJheShnKSxUPUFycmF5KGcpO2ZvcihhPTA7YTxnO2ErKyl7dmFyIGssTSxBPXhbYV07aWYoaShBKSl7dmFyIFM9dS5jMmcoQSksRT1oLmMyZyhiW2FdLHAudGhldGF1bml0KTtrPVMqTWF0aC5jb3MoRSksTT1TKk1hdGguc2luKEUpfWVsc2Ugaz1NPU5hTjt3W2FdPV9bMiphXT1rLFRbYV09X1syKmErMV09TX1kLnRyZWU9bihfKSx5Lm1hcmtlciYmZz49YyYmKHkubWFya2VyLmNsdXN0ZXI9ZC50cmVlKSx5Lm1hcmtlciYmKHkubWFya2VyU2VsLnBvc2l0aW9ucz15Lm1hcmtlclVuc2VsLnBvc2l0aW9ucz15Lm1hcmtlci5wb3NpdGlvbnM9XykseS5saW5lJiZfLmxlbmd0aD4xJiZsLmV4dGVuZEZsYXQoeS5saW5lLHMubGluZVBvc2l0aW9ucyh0LHAsXykpLHkudGV4dCYmKGwuZXh0ZW5kRmxhdCh5LnRleHQse3Bvc2l0aW9uczpffSxzLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyKSksbC5leHRlbmRGbGF0KHkudGV4dFNlbCx7cG9zaXRpb25zOl99LHMudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJTZWwpKSxsLmV4dGVuZEZsYXQoeS50ZXh0VW5zZWwse3Bvc2l0aW9uczpffSxzLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyVW5zZWwpKSkseS5maWxsJiYhZi5maWxsMmQmJihmLmZpbGwyZD0hMCkseS5tYXJrZXImJiFmLnNjYXR0ZXIyZCYmKGYuc2NhdHRlcjJkPSEwKSx5LmxpbmUmJiFmLmxpbmUyZCYmKGYubGluZTJkPSEwKSx5LnRleHQmJiFmLmdsVGV4dCYmKGYuZ2xUZXh0PSEwKSxmLmxpbmVPcHRpb25zLnB1c2goeS5saW5lKSxmLmZpbGxPcHRpb25zLnB1c2goeS5maWxsKSxmLm1hcmtlck9wdGlvbnMucHVzaCh5Lm1hcmtlciksZi5tYXJrZXJTZWxlY3RlZE9wdGlvbnMucHVzaCh5Lm1hcmtlclNlbCksZi5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyVW5zZWwpLGYudGV4dE9wdGlvbnMucHVzaCh5LnRleHQpLGYudGV4dFNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFNlbCksZi50ZXh0VW5zZWxlY3RlZE9wdGlvbnMucHVzaCh5LnRleHRVbnNlbCksZi5zZWxlY3RCYXRjaC5wdXNoKFtdKSxmLnVuc2VsZWN0QmF0Y2gucHVzaChbXSksZC54PXcsZC55PVQsZC5yYXd4PXcsZC5yYXd5PVQsZC5yPW0sZC50aGV0YT12LGQucG9zaXRpb25zPV8sZC5fc2NlbmU9ZixkLmluZGV4PWYuY291bnQsZi5jb3VudCsrfX0pKSxhKHQsZSxyKX19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIjoxMjEyLCIuLi9zY2F0dGVyZ2wvY29udmVydCI6MTIxMywiLi4vc2NhdHRlcmdsL3Bsb3QiOjEyMjAsIi4uL3NjYXR0ZXJnbC9zY2VuZV91cGRhdGUiOjEyMjEsIkBwbG90bHkvcG9pbnQtY2x1c3RlciI6NTcsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMjQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PWEubWFya2VyLGg9YS5saW5lLGY9dS5saW5lO2UuZXhwb3J0cz17YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc3VtOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToiY2FsYyJ9LG1vZGU6Yyh7fSxhLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpjKHt9LGEudGV4dCx7fSksdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJhIiwiYiIsImMiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6Yyh7fSxhLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6aC5jb2xvcix3aWR0aDpoLndpZHRoLGRhc2g6bCxzaGFwZTpjKHt9LGguc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOmguc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6YS5jb25uZWN0Z2FwcyxjbGlwb25heGlzOmEuY2xpcG9uYXhpcyxmaWxsOmMoe30sYS5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6YS5maWxsY29sb3IsbWFya2VyOmMoe3N5bWJvbDp1LnN5bWJvbCxvcGFjaXR5OnUub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6dS5tYXhkaXNwbGF5ZWQsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxsaW5lOmMoe3dpZHRoOmYud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDp1LmdyYWRpZW50LGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyIikpLHRleHRmb250OmEudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmEudGV4dHBvc2l0aW9uLHNlbGVjdGVkOmEuc2VsZWN0ZWQsdW5zZWxlY3RlZDphLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmMoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsiYSIsImIiLCJjIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246YS5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6bigpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjIyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjM2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc5NSwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODc3LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExNTh9XSwxMjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGE9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGw9WyJhIiwiYiIsImMiXSxjPXthOlsiYiIsImMiXSxiOlsiYSIsImMiXSxjOlsiYSIsImIiXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkLGc9dC5fZnVsbExheW91dFtlLnN1YnBsb3RdLnN1bSxtPWUuc3VtfHxnLHY9e2E6ZS5hLGI6ZS5iLGM6ZS5jfTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWlmKCF2W2g9bFtyXV0pe2ZvcihwPXZbY1toXVswXV0sZD12W2NbaF1bMV1dLGY9bmV3IEFycmF5KHAubGVuZ3RoKSx1PTA7dTxwLmxlbmd0aDt1KyspZlt1XT1tLXBbdV0tZFt1XTt2W2hdPWZ9dmFyIHkseCxiLF8sdyxULGs9ZS5fbGVuZ3RoLE09bmV3IEFycmF5KGspO2ZvcihyPTA7cjxrO3IrKyl5PXYuYVtyXSx4PXYuYltyXSxiPXYuY1tyXSxuKHkpJiZuKHgpJiZuKGIpPygxIT09KF89Zy8oKHk9K3kpKyh4PSt4KSsoYj0rYikpKSYmKHkqPV8seCo9XyxiKj1fKSxUPXksdz1iLXgsTVtyXT17eDp3LHk6VCxhOnksYjp4LGM6Yn0pOk1bcl09e3g6ITEseTohMX07cmV0dXJuIHMoZSxrKSxpKHQsZSksYShNLGUpLG8oTSxlKSxNfX0seyIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE1NywiLi4vc2NhdHRlci9jYWxjIjoxMTU5LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTYwLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE2MSwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEyNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksaD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGkpfXZhciBkLGc9cCgiYSIpLG09cCgiYiIpLHY9cCgiYyIpO2lmKGc/KGQ9Zy5sZW5ndGgsbT8oZD1NYXRoLm1pbihkLG0ubGVuZ3RoKSx2JiYoZD1NYXRoLm1pbihkLHYubGVuZ3RoKSkpOmQ9dj9NYXRoLm1pbihkLHYubGVuZ3RoKTowKTptJiZ2JiYoZD1NYXRoLm1pbihtLmxlbmd0aCx2Lmxlbmd0aCkpLGQpe2UuX2xlbmd0aD1kLHAoInN1bSIpLHAoInRleHQiKSxwKCJob3ZlcnRleHQiKSwiZmlsbHMiIT09ZS5ob3Zlcm9uJiZwKCJob3ZlcnRlbXBsYXRlIikscCgibW9kZSIsZDxpLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLGEuaGFzTGluZXMoZSkmJihzKHQsZSxyLGYscCksbCh0LGUscCkscCgiY29ubmVjdGdhcHMiKSksYS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGYscCx7Z3JhZGllbnQ6ITB9KSxhLmhhc1RleHQoZSkmJihwKCJ0ZXh0dGVtcGxhdGUiKSxjKHQsZSxmLHApKTt2YXIgeT1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocCgiY2xpcG9uYXhpcyIpLHAoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSx5LnB1c2goInBvaW50cyIpKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYodSh0LGUscixwKSxhLmhhc0xpbmVzKGUpfHxsKHQsZSxwKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHx5LnB1c2goImZpbGxzIikscCgiaG92ZXJvbiIseS5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NTAsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMTYyLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTE2NiwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMTcxLCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjExNzMsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMTc3LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMTgzLCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjExODQsIi4vYXR0cmlidXRlcyI6MTI0Nn1dLDEyNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksbltpXSl7dmFyIGE9bltpXTt0LmE9YS5hLHQuYj1hLmIsdC5jPWEuY31lbHNlIHQuYT1lLmEsdC5iPWUuYix0LmM9ZS5jO3JldHVybiB0fX0se31dLDEyNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGE9cltlLnN1YnBsb3RdLl9zdWJwbG90O3JldHVybiBpLmFMYWJlbD1uLnRpY2tUZXh0KGEuYWF4aXMsdC5hLCEwKS50ZXh0LGkuYkxhYmVsPW4udGlja1RleHQoYS5iYXhpcyx0LmIsITApLnRleHQsaS5jTGFiZWw9bi50aWNrVGV4dChhLmNheGlzLHQuYywhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5fV0sMTI1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4odCxlLHIsaSk7aWYoYSYmITEhPT1hWzBdLmluZGV4KXt2YXIgbz1hWzBdO2lmKHZvaWQgMD09PW8uaW5kZXgpe3ZhciBzPTEtby55MC90LnlhLl9sZW5ndGgsbD10LnhhLl9sZW5ndGgsYz1sKnMvMix1PWwtYztyZXR1cm4gby54MD1NYXRoLm1heChNYXRoLm1pbihvLngwLHUpLGMpLG8ueDE9TWF0aC5tYXgoTWF0aC5taW4oby54MSx1KSxjKSxhfXZhciBoPW8uY2Rbby5pbmRleF0sZj1vLnRyYWNlLHA9by5zdWJwbG90O28uYT1oLmEsby5iPWguYixvLmM9aC5jLG8ueExhYmVsVmFsPXZvaWQgMCxvLnlMYWJlbFZhbD12b2lkIDA7dmFyIGQ9e307ZFtmLnN1YnBsb3RdPXtfc3VicGxvdDpwfTt2YXIgZz1mLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGgsZixkKTtvLmFMYWJlbD1nLmFMYWJlbCxvLmJMYWJlbD1nLmJMYWJlbCxvLmNMYWJlbD1nLmNMYWJlbDt2YXIgbT1oLmhpfHxmLmhvdmVyaW5mbyx2PVtdO2lmKCFmLmhvdmVydGVtcGxhdGUpe3ZhciB5PW0uc3BsaXQoIisiKTstMSE9PXkuaW5kZXhPZigiYWxsIikmJih5PVsiYSIsImIiLCJjIl0pLC0xIT09eS5pbmRleE9mKCJhIikmJngocC5hYXhpcyxvLmFMYWJlbCksLTEhPT15LmluZGV4T2YoImIiKSYmeChwLmJheGlzLG8uYkxhYmVsKSwtMSE9PXkuaW5kZXhPZigiYyIpJiZ4KHAuY2F4aXMsby5jTGFiZWwpfXJldHVybiBvLmV4dHJhVGV4dD12LmpvaW4oIjxicj4iKSxvLmhvdmVydGVtcGxhdGU9Zi5ob3ZlcnRlbXBsYXRlLGF9ZnVuY3Rpb24geCh0LGUpe3YucHVzaCh0Ll9ob3ZlcnRpdGxlKyI6ICIrZSl9fX0seyIuLi9zY2F0dGVyL2hvdmVyIjoxMTY5fV0sMTI1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL3NjYXR0ZXIvc2VsZWN0IiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVydGVybmFyeSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvdGVybmFyeSIpLGNhdGVnb3JpZXM6WyJ0ZXJuYXJ5Iiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy90ZXJuYXJ5Ijo4NzgsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMTc2LCIuLi9zY2F0dGVyL3NlbGVjdCI6MTE4MCwiLi4vc2NhdHRlci9zdHlsZSI6MTE4MiwiLi9hdHRyaWJ1dGVzIjoxMjQ2LCIuL2NhbGMiOjEyNDcsIi4vZGVmYXVsdHMiOjEyNDgsIi4vZXZlbnRfZGF0YSI6MTI0OSwiLi9mb3JtYXRfbGFiZWxzIjoxMjUwLCIuL2hvdmVyIjoxMjUxLCIuL3Bsb3QiOjEyNTN9XSwxMjUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5wbG90Q29udGFpbmVyO2kuc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7dmFyIGE9e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxwbG90OmksbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkUmVsYXRpdmU6bnVsbH0sbz1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpO24odCxhLHIsbyl9fSx7Ii4uL3NjYXR0ZXIvcGxvdCI6MTE3OX1dLDEyNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuaWRSZWdleCxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9bi5tYXJrZXIsaD11LmxpbmUsZj1jKGkoIm1hcmtlci5saW5lIix7ZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7d2lkdGg6Yyh7fSxoLndpZHRoLHtlZGl0VHlwZToiY2FsYyJ9KSxlZGl0VHlwZToiY2FsYyJ9KSxwPWMoaSgibWFya2VyIikse3N5bWJvbDp1LnN5bWJvbCxzaXplOmMoe30sdS5zaXplLHtlZGl0VHlwZToibWFya2VyU2l6ZSJ9KSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLG9wYWNpdHk6dS5vcGFjaXR5LGNvbG9yYmFyOnUuY29sb3JiYXIsbGluZTpmLGVkaXRUeXBlOiJjYWxjIn0pO2Z1bmN0aW9uIGQodCl7cmV0dXJue3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOnt2YWxUeXBlOiJzdWJwbG90aWQiLHJlZ2V4OnNbdF0sZWRpdFR5cGU6InBsb3QifX19cC5jb2xvci5lZGl0VHlwZT1wLmNtaW4uZWRpdFR5cGU9cC5jbWF4LmVkaXRUeXBlPSJzdHlsZSIsZS5leHBvcnRzPXtkaW1lbnNpb25zOmwoImRpbWVuc2lvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxheGlzOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG1hdGNoZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0pLHRleHQ6Yyh7fSxvLnRleHQse30pLGhvdmVydGV4dDpjKHt9LG8uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOmEoKSxtYXJrZXI6cCx4YXhlczpkKCJ4IikseWF4ZXM6ZCgieSIpLGRpYWdvbmFsOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxzaG93dXBwZXJoYWxmOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xvd2VyaGFsZjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6by5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6ImNhbGMifSx1bnNlbGVjdGVkOnttYXJrZXI6by51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6by5vcGFjaXR5fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjIyLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc4OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6ODA1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NzcsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE1OCwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjEyMTB9XSwxMjU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtbGluZTJkIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLG89dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5zaG91bGRTaG93WmVyb0xpbmU7ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBuPXIubWF0cml4T3B0aW9ucy5kYXRhLmxlbmd0aCxpPWUuX3Zpc2libGVEaW1zLGE9ci52aWV3T3B0cy5yYW5nZXM9bmV3IEFycmF5KG4pLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPWFbb109bmV3IEFycmF5KDQpLHU9bCh0LGUuX2RpYWdbc11bMF0pO3UmJihjWzBdPXUucjJsKHUucmFuZ2VbMF0pLGNbMl09dS5yMmwodS5yYW5nZVsxXSkpO3ZhciBoPWwodCxlLl9kaWFnW3NdWzFdKTtoJiYoY1sxXT1oLnIybChoLnJhbmdlWzBdKSxjWzNdPWgucjJsKGgucmFuZ2VbMV0pKX1yLnNlbGVjdEJhdGNoLmxlbmd0aHx8ci51bnNlbGVjdEJhdGNoLmxlbmd0aD9yLm1hdHJpeC51cGRhdGUoe3JhbmdlczphfSx7cmFuZ2VzOmF9KTpyLm1hdHJpeC51cGRhdGUoe3JhbmdlczphfSl9ZnVuY3Rpb24gaCh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2wsaT1lLl9zcGxvbUdyaWQ7aXx8KGk9ZS5fc3Bsb21HcmlkPW4ocikpLGkudXBkYXRlKGZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5fZnVsbExheW91dCxuPXIuX3NpemUsaT1bMCwwLHIud2lkdGgsci5oZWlnaHRdLGE9e307ZnVuY3Rpb24gbyh0LGUscixuLG8scyl7dmFyIGw9ZVt0KyJjb2xvciJdLGM9ZVt0KyJ3aWR0aCJdLHU9U3RyaW5nKGwrYyk7dSBpbiBhP2FbdV0uZGF0YS5wdXNoKE5hTixOYU4scixuLG8scyk6YVt1XT17ZGF0YTpbcixuLG8sc10sam9pbjoicmVjdCIsdGhpY2tuZXNzOmMsY29sb3I6bCx2aWV3cG9ydDppLHJhbmdlOmksb3ZlcmxheTohMX19Zm9yKGUgaW4gci5fc3Bsb21TdWJwbG90cyl7dmFyIHMsbCx1PXIuX3Bsb3RzW2VdLGg9dS54YXhpcyxmPXUueWF4aXMscD1oLl9ncmlkVmFscyxkPWYuX2dyaWRWYWxzLGc9bi5iK2YuZG9tYWluWzBdKm4uaCxtPS1mLl9tLHY9LW0qZi5yMmwoZi5yYW5nZVswXSxmLmNhbGVuZGFyKTtpZihoLnNob3dncmlkKWZvcihlPTA7ZTxwLmxlbmd0aDtlKyspcz1oLl9vZmZzZXQraC5sMnAocFtlXS54KSxvKCJncmlkIixoLHMsZyxzLGcrZi5fbGVuZ3RoKTtpZihmLnNob3dncmlkKWZvcihlPTA7ZTxkLmxlbmd0aDtlKyspbD1nK3YrbSpkW2VdLngsbygiZ3JpZCIsZixoLl9vZmZzZXQsbCxoLl9vZmZzZXQraC5fbGVuZ3RoLGwpO2ModCxoLGYpJiYocz1oLl9vZmZzZXQraC5sMnAoMCksbygiemVyb2xpbmUiLGgscyxnLHMsZytmLl9sZW5ndGgpKSxjKHQsZixoKSYmKGw9Zyt2KzAsbygiemVyb2xpbmUiLGYsaC5fb2Zmc2V0LGwsaC5fb2Zmc2V0K2guX2xlbmd0aCxsKSl9dmFyIHk9W107Zm9yKGUgaW4gYSl5LnB1c2goYVtlXSk7cmV0dXJuIHl9KHQpKX1lLmV4cG9ydHM9e25hbWU6InNwbG9tIixhdHRyOnMuYXR0cixhdHRyUmVnZXg6cy5hdHRyUmVnZXgsbGF5b3V0QXR0cmlidXRlczpzLmxheW91dEF0dHJpYnV0ZXMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6cy5zdXBwbHlMYXlvdXREZWZhdWx0cyxkcmF3RnJhbWV3b3JrOnMuZHJhd0ZyYW1ld29yayxwbG90OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1pLmdldE1vZHVsZSgic3Bsb20iKSxuPW8odC5jYWxjZGF0YSxyKVswXTthKHQsWyJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiwiT0VTX2VsZW1lbnRfaW5kZXhfdWludCJdKSYmKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmaCh0KSxyLnBsb3QodCx7fSxuKSl9LGRyYWc6ZnVuY3Rpb24odCl7dmFyIGU9dC5jYWxjZGF0YSxyPXQuX2Z1bGxMYXlvdXQ7ci5faGFzT25seUxhcmdlU3Bsb21zJiZoKHQpO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dWzBdLnRyYWNlLGE9ci5fc3Bsb21TY2VuZXNbaS51aWRdOyJzcGxvbSI9PT1pLnR5cGUmJmEmJmEubWF0cml4JiZ1KHQsaSxhKX19LHVwZGF0ZUdyaWQ6aCxjbGVhbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPXt9O2lmKG4uX3NwbG9tU2NlbmVzKXtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldOyJzcGxvbSI9PT1vLnR5cGUmJihhW28udWlkXT0xKX1mb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbD1yW2ldO2lmKCFhW2wudWlkXSl7dmFyIGM9bi5fc3Bsb21TY2VuZXNbbC51aWRdO2MmJmMuZGVzdHJveSYmYy5kZXN0cm95KCksbi5fc3Bsb21TY2VuZXNbbC51aWRdPW51bGwsZGVsZXRlIG4uX3NwbG9tU2NlbmVzW2wudWlkXX19fTA9PT1PYmplY3Qua2V5cyhuLl9zcGxvbVNjZW5lc3x8e30pLmxlbmd0aCYmZGVsZXRlIG4uX3NwbG9tU2NlbmVzLG4uX3NwbG9tR3JpZCYmIWUuX2hhc09ubHlMYXJnZVNwbG9tcyYmbi5faGFzT25seUxhcmdlU3Bsb21zJiYobi5fc3Bsb21HcmlkLmRlc3Ryb3koKSxuLl9zcGxvbUdyaWQ9bnVsbCxkZWxldGUgbi5fc3Bsb21HcmlkKSxzLmNsZWFuKHQsZSxyLG4pfSx1cGRhdGVGeDpzLnVwZGF0ZUZ4LHRvU1ZHOnMudG9TVkd9fSx7Ii4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiOjc2MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4MTIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODAyLCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6ODM2LCIuLi8uLi9yZWdpc3RyeSI6ODgyLCJyZWdsLWxpbmUyZCI6NTA5fV0sMTI1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGE9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbz10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjQXhpc0V4cGFuc2lvbixzPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksbD10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLm1hcmtlclNlbGVjdGlvbixjPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IikubWFya2VyU3R5bGUsdT10KCIuL3NjZW5lX3VwZGF0ZSIpLGg9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxmPXQoIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIscCxkLGcsbSx2LHk9ZS5kaW1lbnNpb25zLHg9ZS5fbGVuZ3RoLGI9e30sXz1iLmNkYXRhPVtdLHc9Yi5kYXRhPVtdLFQ9ZS5fdmlzaWJsZURpbXM9W107ZnVuY3Rpb24gayh0LHIpe2Zvcih2YXIgaT10Lm1ha2VDYWxjZGF0YSh7djpyLnZhbHVlcyx2Y2FsZW5kYXI6ZS5jYWxlbmRhcn0sInYiKSxhPTA7YTxpLmxlbmd0aDthKyspaVthXT1pW2FdPT09aD9OYU46aVthXTtfLnB1c2goaSksdy5wdXNoKCJsb2ciPT09dC50eXBlP24uc2ltcGxlTWFwKGksdC5jMmwpOmkpfWZvcihyPTA7cjx5Lmxlbmd0aDtyKyspaWYoKGQ9eVtyXSkudmlzaWJsZSl7aWYoZz1pLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pLG09aS5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzFdKSxnJiZtJiZnLnR5cGUhPT1tLnR5cGUpe24ubG9nKCJTa2lwcGluZyBzcGxvbSBkaW1lbnNpb24gIityKyIgd2l0aCBjb25mbGljdGluZyBheGlzIHR5cGVzIik7Y29udGludWV9Zz8oayhnLGQpLG0mJiJjYXRlZ29yeSI9PT1tLnR5cGUmJihtLl9jYXRlZ29yaWVzPWcuX2NhdGVnb3JpZXMuc2xpY2UoKSkpOmsobSxkKSxULnB1c2gocil9Zm9yKHModCxlKSxuLmV4dGVuZEZsYXQoYixjKGUpKSx2PV8ubGVuZ3RoKng+Zj8yKihiLnNpemVBdmd8fE1hdGgubWF4KGIuc2l6ZSwzKSk6YShlLHgpLHA9MDtwPFQubGVuZ3RoO3ArKylkPXlbcj1UW3BdXSxnPWkuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVswXSl8fHt9LG09aS5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzFdKXx8e30sbyh0LGUsZyxtLF9bcF0sX1twXSx2KTt2YXIgTT11KHQsZSk7cmV0dXJuIE0ubWF0cml4fHwoTS5tYXRyaXg9ITApLE0ubWF0cml4T3B0aW9ucz1iLE0uc2VsZWN0ZWRPcHRpb25zPWwoZSxlLnNlbGVjdGVkKSxNLnVuc2VsZWN0ZWRPcHRpb25zPWwoZSxlLnVuc2VsZWN0ZWQpLFt7eDohMSx5OiExLHQ6e30sdHJhY2U6ZX1dfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgwMiwiLi4vc2NhdHRlci9jYWxjIjoxMTU5LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE2MSwiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyI6MTIxMiwiLi4vc2NhdHRlcmdsL2NvbnZlcnQiOjEyMTMsIi4vc2NlbmVfdXBkYXRlIjoxMjYzfV0sMTI1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIikscz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLGw9dCgiLi4vcGFyY29vcmRzL21lcmdlX2xlbmd0aCIpLGM9dCgiLi4vc2NhdHRlcmdsL2hlbHBlcnMiKS5pc09wZW5TeW1ib2w7ZnVuY3Rpb24gdSh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEuZGltZW5zaW9ucyxyLGkpfXIoImxhYmVsIik7dmFyIGk9cigidmFsdWVzIik7aSYmaS5sZW5ndGg/cigidmlzaWJsZSIpOmUudmlzaWJsZT0hMSxyKCJheGlzLnR5cGUiKSxyKCJheGlzLm1hdGNoZXMiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBwPWkodCxlLHtuYW1lOiJkaW1lbnNpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6dX0pLGQ9ZigiZGlhZ29uYWwudmlzaWJsZSIpLGc9Zigic2hvd3VwcGVyaGFsZiIpLG09Zigic2hvd2xvd2VyaGFsZiIpO2lmKGwoZSxwLCJ2YWx1ZXMiKSYmKGR8fGd8fG0pKXtmKCJ0ZXh0IiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpLHModCxlLHIsaCxmKTt2YXIgdj1jKGUubWFya2VyLnN5bWJvbCkseT1vLmlzQnViYmxlKGUpO2YoIm1hcmtlci5saW5lLndpZHRoIix2fHx5PzE6MCksZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPWUuZGltZW5zaW9ucyxzPW8ubGVuZ3RoLGw9ZS5zaG93dXBwZXJoYWxmLGM9ZS5zaG93bG93ZXJoYWxmLHU9ZS5kaWFnb25hbC52aXNpYmxlLGg9bmV3IEFycmF5KHMpLGY9bmV3IEFycmF5KHMpO2ZvcihpPTA7aTxzO2krKyl7dmFyIHA9aT9pKzE6IiI7aFtpXT0ieCIrcCxmW2ldPSJ5IitwfXZhciBkPW4oInhheGVzIixoKSxnPW4oInlheGVzIixmKSxtPWUuX2RpYWc9bmV3IEFycmF5KHMpO2UuX3hheGVzPXt9LGUuX3lheGVzPXt9O3ZhciB2PVtdLHk9W107ZnVuY3Rpb24geCh0LG4saSxhKXtpZih0KXt2YXIgbz10LmNoYXJBdCgwKSxzPXIuX3NwbG9tQXhlc1tvXTtpZihlWyJfIitvKyJheGVzIl1bdF09MSxhLnB1c2godCksISh0IGluIHMpKXt2YXIgbD1zW3RdPXt9O2kmJihsLmxhYmVsPWkubGFiZWx8fCIiLGkudmlzaWJsZSYmaS5heGlzJiYoaS5heGlzLnR5cGUmJihsLnR5cGU9aS5heGlzLnR5cGUpLGkuYXhpcy5tYXRjaGVzJiYobC5tYXRjaGVzPW4pKSl9fX12YXIgYj0hdSYmIWMsXz0hdSYmIWw7Zm9yKGUuX2F4ZXNEaW09e30saT0wO2k8cztpKyspe3ZhciB3PW9baV0sVD0wPT09aSxrPWk9PT1zLTEsTT1UJiZifHxrJiZfP3ZvaWQgMDpkW2ldLEE9VCYmX3x8ayYmYj92b2lkIDA6Z1tpXTt4KE0sQSx3LHYpLHgoQSxNLHcseSksbVtpXT1bTSxBXSxlLl9heGVzRGltW01dPWksZS5fYXhlc0RpbVtBXT1pfWZvcihpPTA7aTx2Lmxlbmd0aDtpKyspZm9yKGE9MDthPHkubGVuZ3RoO2ErKyl7dmFyIFM9dltpXSt5W2FdO2k+YSYmbHx8aTxhJiZjP3IuX3NwbG9tU3VicGxvdHNbU109MTppIT09YXx8IXUmJmMmJmx8fChyLl9zcGxvbVN1YnBsb3RzW1NdPTEpfSghY3x8IXUmJmwmJmMpJiYoci5fc3Bsb21HcmlkRGZsdC54c2lkZT0iYm90dG9tIixyLl9zcGxvbUdyaWREZmx0LnlzaWRlPSJsZWZ0Iil9KDAsZSxoLGYpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGYpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3OTQsIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiOjExMjksIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMTc3LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMTgzLCIuLi9zY2F0dGVyZ2wvaGVscGVycyI6MTIxNywiLi9hdHRyaWJ1dGVzIjoxMjU0fV0sMTI1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksYT10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLm1hcmtlclN0eWxlO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUudHJhY2Usbz10Ll9mdWxsTGF5b3V0Ll9zcGxvbVNjZW5lc1tyLnVpZF07aWYobyl7aSh0LHIpLG4uZXh0ZW5kRmxhdChvLm1hdHJpeE9wdGlvbnMsYShyKSk7dmFyIHM9bi5leHRlbmRGbGF0KHt9LG8ubWF0cml4T3B0aW9ucyxvLnZpZXdPcHRzKTtvLm1hdHJpeC51cGRhdGUocyxudWxsKX19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE2MSwiLi4vc2NhdHRlcmdsL2NvbnZlcnQiOjEyMTN9XSwxMjU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZ2V0RGltSW5kZXg9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5faWQsbj17eDowLHk6MX1bci5jaGFyQXQoMCldLGk9dC5fdmlzaWJsZURpbXMsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKHQuX2RpYWdbb11bbl09PT1yKXJldHVybiBhfXJldHVybiExfX0se31dLDEyNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9oZWxwZXJzIiksaT10KCIuLi9zY2F0dGVyZ2wvaG92ZXIiKS5jYWxjSG92ZXI7ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscil7dmFyIGE9dC5jZFswXS50cmFjZSxvPXQuc2NlbmUubWF0cml4T3B0aW9ucy5jZGF0YSxzPXQueGEsbD10LnlhLGM9cy5jMnAoZSksdT1sLmMycChyKSxoPXQuZGlzdGFuY2UsZj1uLmdldERpbUluZGV4KGEscykscD1uLmdldERpbUluZGV4KGEsbCk7aWYoITE9PT1mfHwhMT09PXApcmV0dXJuW3RdO2Zvcih2YXIgZCxnLG09b1tmXSx2PW9bcF0seT1oLHg9MDt4PG0ubGVuZ3RoO3grKyl7dmFyIGI9bVt4XSxfPXZbeF0sdz1zLmMycChiKS1jLFQ9bC5jMnAoXyktdSxrPU1hdGguc3FydCh3KncrVCpUKTtrPHkmJih5PWc9ayxkPXgpfXJldHVybiB0LmluZGV4PWQsdC5kaXN0YW5jZT15LHQuZHh5PWcsdm9pZCAwPT09ZD9bdF06W2kodCxtLHYsYSldfX19LHsiLi4vc2NhdHRlcmdsL2hvdmVyIjoxMjE4LCIuL2hlbHBlcnMiOjEyNTl9XSwxMjYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9jb21wb25lbnRzL2dyaWQiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzcGxvbSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsiZ2wiLCJyZWdsIiwiY2FydGVzaWFuIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksZWRpdFN0eWxlOnQoIi4vZWRpdF9zdHlsZSIpLG1ldGE6e319LG4ucmVnaXN0ZXIoaSl9LHsiLi4vLi4vY29tcG9uZW50cy9ncmlkIjo2NTksIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMTc2LCIuL2F0dHJpYnV0ZXMiOjEyNTQsIi4vYmFzZV9wbG90IjoxMjU1LCIuL2NhbGMiOjEyNTYsIi4vZGVmYXVsdHMiOjEyNTcsIi4vZWRpdF9zdHlsZSI6MTI1OCwiLi9ob3ZlciI6MTI2MCwiLi9wbG90IjoxMjYyLCIuL3NlbGVjdCI6MTI2NH1dLDEyNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1zcGxvbSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyIpLnNlbGVjdE1vZGU7ZnVuY3Rpb24gcyh0LGUpe3ZhciByLHMsbCxjLHUsaD10Ll9mdWxsTGF5b3V0LGY9aC5fc2l6ZSxwPWUudHJhY2UsZD1lLnQsZz1oLl9zcGxvbVNjZW5lc1twLnVpZF0sbT1nLm1hdHJpeE9wdGlvbnMsdj1tLmNkYXRhLHk9aC5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2wseD1oLmRyYWdtb2RlO2lmKDAhPT12Lmxlbmd0aCl7bS5sb3dlcj1wLnNob3d1cHBlcmhhbGYsbS51cHBlcj1wLnNob3dsb3dlcmhhbGYsbS5kaWFnb25hbD1wLmRpYWdvbmFsLnZpc2libGU7dmFyIGI9cC5fdmlzaWJsZURpbXMsXz12Lmxlbmd0aCx3PWcudmlld09wdHM9e307Zm9yKHcucmFuZ2VzPW5ldyBBcnJheShfKSx3LmRvbWFpbnM9bmV3IEFycmF5KF8pLHU9MDt1PGIubGVuZ3RoO3UrKyl7bD1iW3VdO3ZhciBUPXcucmFuZ2VzW3VdPW5ldyBBcnJheSg0KSxrPXcuZG9tYWluc1t1XT1uZXcgQXJyYXkoNCk7KHI9YS5nZXRGcm9tSWQodCxwLl9kaWFnW2xdWzBdKSkmJihUWzBdPXIuX3JsWzBdLFRbMl09ci5fcmxbMV0sa1swXT1yLmRvbWFpblswXSxrWzJdPXIuZG9tYWluWzFdKSwocz1hLmdldEZyb21JZCh0LHAuX2RpYWdbbF1bMV0pKSYmKFRbMV09cy5fcmxbMF0sVFszXT1zLl9ybFsxXSxrWzFdPXMuZG9tYWluWzBdLGtbM109cy5kb21haW5bMV0pfXcudmlld3BvcnQ9W2YubCxmLmIsZi53K2YubCxmLmgrZi5iXSwhMD09PWcubWF0cml4JiYoZy5tYXRyaXg9bih5KSk7dmFyIE09aC5jbGlja21vZGUuaW5kZXhPZigic2VsZWN0Iik+LTEsQT0hMDtpZihvKHgpfHwhIXAuc2VsZWN0ZWRwb2ludHN8fE0pe3ZhciBTPXAuX2xlbmd0aDtpZihwLnNlbGVjdGVkcG9pbnRzKXtnLnNlbGVjdEJhdGNoPXAuc2VsZWN0ZWRwb2ludHM7dmFyIEU9cC5zZWxlY3RlZHBvaW50cyxDPXt9O2ZvcihsPTA7bDxFLmxlbmd0aDtsKyspQ1tFW2xdXT0hMDt2YXIgTD1bXTtmb3IobD0wO2w8UztsKyspQ1tsXXx8TC5wdXNoKGwpO2cudW5zZWxlY3RCYXRjaD1MfXZhciBQPWQueHB4PW5ldyBBcnJheShfKSxJPWQueXB4PW5ldyBBcnJheShfKTtmb3IodT0wO3U8Yi5sZW5ndGg7dSsrKXtpZihsPWJbdV0scj1hLmdldEZyb21JZCh0LHAuX2RpYWdbbF1bMF0pKWZvcihQW3VdPW5ldyBBcnJheShTKSxjPTA7YzxTO2MrKylQW3VdW2NdPXIuYzJwKHZbdV1bY10pO2lmKHM9YS5nZXRGcm9tSWQodCxwLl9kaWFnW2xdWzFdKSlmb3IoSVt1XT1uZXcgQXJyYXkoUyksYz0wO2M8UztjKyspSVt1XVtjXT1zLmMycCh2W3VdW2NdKX1pZihnLnNlbGVjdEJhdGNoLmxlbmd0aHx8Zy51bnNlbGVjdEJhdGNoLmxlbmd0aCl7dmFyIHo9aS5leHRlbmRGbGF0KHt9LG0sZy51bnNlbGVjdGVkT3B0aW9ucyx3KSxPPWkuZXh0ZW5kRmxhdCh7fSxtLGcuc2VsZWN0ZWRPcHRpb25zLHcpO2cubWF0cml4LnVwZGF0ZSh6LE8pLEE9ITF9fWVsc2UgZC54cHg9ZC55cHg9bnVsbDtpZihBKXt2YXIgRD1pLmV4dGVuZEZsYXQoe30sbSx3KTtnLm1hdHJpeC51cGRhdGUoRCxudWxsKX19fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspcyh0LHJbbl1bMF0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjYzMywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODAyLCJyZWdsLXNwbG9tIjo1MTF9XSwxMjYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT1lLnVpZCxhPXIuX3NwbG9tU2NlbmVzO2F8fChhPXIuX3NwbG9tU2NlbmVzPXt9KTt2YXIgbz17ZGlydHk6ITAsc2VsZWN0QmF0Y2g6W10sdW5zZWxlY3RCYXRjaDpbXX0scz1hW2UudWlkXTtyZXR1cm4gc3x8KChzPWFbaV09bi5leHRlbmRGbGF0KHt9LG8se21hdHJpeDohMSxzZWxlY3RCYXRjaDpbXSx1bnNlbGVjdEJhdGNoOltdfSkpLmRyYXc9ZnVuY3Rpb24oKXtzLm1hdHJpeCYmcy5tYXRyaXguZHJhdyYmKHMuc2VsZWN0QmF0Y2gubGVuZ3RofHxzLnVuc2VsZWN0QmF0Y2gubGVuZ3RoP3MubWF0cml4LmRyYXcocy51bnNlbGVjdEJhdGNoLHMuc2VsZWN0QmF0Y2gpOnMubWF0cml4LmRyYXcoKSkscy5kaXJ0eT0hMX0scy5kZXN0cm95PWZ1bmN0aW9uKCl7cy5tYXRyaXgmJnMubWF0cml4LmRlc3Ryb3kmJnMubWF0cml4LmRlc3Ryb3koKSxzLm1hdHJpeE9wdGlvbnM9bnVsbCxzLnNlbGVjdEJhdGNoPW51bGwscy51bnNlbGVjdEJhdGNoPW51bGwscz1udWxsfSkscy5kaXJ0eXx8bi5leHRlbmRGbGF0KHMsbyksc319LHsiLi4vLi4vbGliIjo3NTB9XSwxMjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jZCxvPXJbMF0udHJhY2Uscz1yWzBdLnQsbD10LnNjZW5lLGM9bC5tYXRyaXhPcHRpb25zLmNkYXRhLHU9dC54YXhpcyxoPXQueWF4aXMsZj1bXTtpZighbClyZXR1cm4gZjt2YXIgcD0haS5oYXNNYXJrZXJzKG8pJiYhaS5oYXNUZXh0KG8pO2lmKCEwIT09by52aXNpYmxlfHxwKXJldHVybiBmO3ZhciBkPWEuZ2V0RGltSW5kZXgobyx1KSxnPWEuZ2V0RGltSW5kZXgobyxoKTtpZighMT09PWR8fCExPT09ZylyZXR1cm4gZjt2YXIgbT1zLnhweFtkXSx2PXMueXB4W2ddLHk9Y1tkXSx4PWNbZ10sYj1bXSxfPVtdO2lmKCExIT09ZSYmIWUuZGVnZW5lcmF0ZSlmb3IodmFyIHc9MDt3PHkubGVuZ3RoO3crKyllLmNvbnRhaW5zKFttW3ddLHZbd11dLG51bGwsdyx0KT8oYi5wdXNoKHcpLGYucHVzaCh7cG9pbnROdW1iZXI6dyx4Onlbd10seTp4W3ddfSkpOl8ucHVzaCh3KTt2YXIgVD1sLm1hdHJpeE9wdGlvbnM7cmV0dXJuIGIubGVuZ3RofHxfLmxlbmd0aD9sLnNlbGVjdEJhdGNoLmxlbmd0aHx8bC51bnNlbGVjdEJhdGNoLmxlbmd0aHx8bC5tYXRyaXgudXBkYXRlKGwudW5zZWxlY3RlZE9wdGlvbnMsbi5leHRlbmRGbGF0KHt9LFQsbC5zZWxlY3RlZE9wdGlvbnMsbC52aWV3T3B0cykpOmwubWF0cml4LnVwZGF0ZShULG51bGwpLGwuc2VsZWN0QmF0Y2g9YixsLnVuc2VsZWN0QmF0Y2g9XyxmfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTE4MywiLi9oZWxwZXJzIjoxMjU5fV0sMTI2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx1Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHY6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzdGFydHM6e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjFlMyxlZGl0VHlwZToiY2FsYyJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowLGRmbHQ6MX0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmkoe2VkaXRUeXBlOiJjYWxjIn0se2tleXM6WyJ0dWJleCIsInR1YmV5IiwidHViZXoiLCJ0dWJldSIsInR1YmV2IiwidHViZXciLCJub3JtIiwiZGl2ZXJnZW5jZSJdfSksc2hvd2xlZ2VuZDpzKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfTtzKGwsbigiIix7Y29sb3JBdHRyOiJ1L3YvdyBub3JtIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpO1sib3BhY2l0eSIsImxpZ2h0cG9zaXRpb24iLCJsaWdodGluZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xbdF09YVt0XX0pKSxsLmhvdmVyaW5mbz1zKHt9LG8uaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ1IiwidiIsInciLCJub3JtIiwiZGl2ZXJnZW5jZSIsInRleHQiLCJuYW1lIl0sZGZsdDoieCt5K3orbm9ybSt0ZXh0K25hbWUifSksbC50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9bH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjIyLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc5NSwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODc3LCIuLi9tZXNoM2QvYXR0cmlidXRlcyI6MTA5OX1dLDEyNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2Z1bmN0aW9uIGEodCl7dmFyIGUscixpLGEscyxsLGMsdSxoLGYscCxkLGc9dC5feCxtPXQuX3ksdj10Ll96LHk9dC5fbGVuLHg9LTEvMCxiPTEvMCxfPS0xLzAsdz0xLzAsVD0tMS8wLGs9MS8wLE09IiI7Zm9yKHkmJihjPWdbMF0saD1tWzBdLHA9dlswXSkseT4xJiYodT1nW3ktMV0sZj1tW3ktMV0sZD12W3ktMV0pLGU9MDtlPHk7ZSsrKXg9TWF0aC5tYXgoeCxnW2VdKSxiPU1hdGgubWluKGIsZ1tlXSksXz1NYXRoLm1heChfLG1bZV0pLHc9TWF0aC5taW4odyxtW2VdKSxUPU1hdGgubWF4KFQsdltlXSksaz1NYXRoLm1pbihrLHZbZV0pLGF8fGdbZV09PT1jfHwoYT0hMCxNKz0ieCIpLHN8fG1bZV09PT1ofHwocz0hMCxNKz0ieSIpLGx8fHZbZV09PT1wfHwobD0hMCxNKz0ieiIpO2F8fChNKz0ieCIpLHN8fChNKz0ieSIpLGx8fChNKz0ieiIpO3ZhciBBPW8odC5feCksUz1vKHQuX3kpLEU9byh0Ll96KTtNPShNPShNPU0ucmVwbGFjZSgieCIsKGM+dT8iLSI6IisiKSsieCIpKS5yZXBsYWNlKCJ5IiwoaD5mPyItIjoiKyIpKyJ5IikpLnJlcGxhY2UoInoiLChwPmQ/Ii0iOiIrIikrInoiKTt2YXIgQz1mdW5jdGlvbigpe3k9MCxBPVtdLFM9W10sRT1bXX07KCF5fHx5PEEubGVuZ3RoKlMubGVuZ3RoKkUubGVuZ3RoKSYmQygpO3ZhciBMPWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQ/ZzoieSI9PT10P206dn0sUD1mdW5jdGlvbih0KXtyZXR1cm4ieCI9PT10P0E6InkiPT09dD9TOkV9LEk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbeS0xXTx0WzBdPy0xOjF9LHo9TChNWzFdKSxPPUwoTVszXSksRD1MKE1bNV0pLFI9UChNWzFdKS5sZW5ndGgsRj1QKE1bM10pLmxlbmd0aCxCPVAoTVs1XSkubGVuZ3RoLE49ITEsaj1mdW5jdGlvbih0LGUscil7cmV0dXJuIFIqKEYqdCtlKStyfSxVPUkoTChNWzFdKSksVj1JKEwoTVszXSkpLHE9SShMKE1bNV0pKTtmb3IoZT0wO2U8Qi0xO2UrKyl7Zm9yKHI9MDtyPEYtMTtyKyspe2ZvcihpPTA7aTxSLTE7aSsrKXt2YXIgSD1qKGUscixpKSxHPWooZSxyLGkrMSksWT1qKGUscisxLGkpLFc9aihlKzEscixpKTtpZih6W0hdKlU8eltHXSpVJiZPW0hdKlY8T1tZXSpWJiZEW0hdKnE8RFtXXSpxfHwoTj0hMCksTilicmVha31pZihOKWJyZWFrfWlmKE4pYnJlYWt9cmV0dXJuIE4mJihuLndhcm4oIkVuY291bnRlcmVkIGFyYml0cmFyeSBjb29yZGluYXRlcyEgVW5hYmxlIHRvIGlucHV0IGRhdGEgZ3JpZC4iKSxDKCkpLHt4TWluOmIseU1pbjp3LHpNaW46ayx4TWF4OngseU1heDpfLHpNYXg6VCxYczpBLFlzOlMsWnM6RSxsZW46eSxmaWxsOk19fWZ1bmN0aW9uIG8odCl7cmV0dXJuIG4uZGlzdGluY3RWYWxzKHQpLnZhbHN9ZnVuY3Rpb24gcyh0LGUpe2lmKHZvaWQgMD09PWUmJihlPXQubGVuZ3RoKSxuLmlzVHlwZWRBcnJheSh0KSlyZXR1cm4gdC5zdWJhcnJheSgwLGUpO2Zvcih2YXIgcj1bXSxpPTA7aTxlO2krKylyW2ldPSt0W2ldO3JldHVybiByfWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe2UuX2xlbj1NYXRoLm1pbihlLnUubGVuZ3RoLGUudi5sZW5ndGgsZS53Lmxlbmd0aCxlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCksZS5fdT1zKGUudSxlLl9sZW4pLGUuX3Y9cyhlLnYsZS5fbGVuKSxlLl93PXMoZS53LGUuX2xlbiksZS5feD1zKGUueCxlLl9sZW4pLGUuX3k9cyhlLnksZS5fbGVuKSxlLl96PXMoZS56LGUuX2xlbik7dmFyIHI9YShlKTtlLl9ncmlkRmlsbD1yLmZpbGwsZS5fWHM9ci5YcyxlLl9Zcz1yLllzLGUuX1pzPXIuWnMsZS5fbGVuPXIubGVuO3ZhciBuLG8sbCxjPTA7ZS5zdGFydHMmJihuPXMoZS5zdGFydHMueHx8W10pLG89cyhlLnN0YXJ0cy55fHxbXSksbD1zKGUuc3RhcnRzLnp8fFtdKSxjPU1hdGgubWluKG4ubGVuZ3RoLG8ubGVuZ3RoLGwubGVuZ3RoKSksZS5fc3RhcnRzWD1ufHxbXSxlLl9zdGFydHNZPW98fFtdLGUuX3N0YXJ0c1o9bHx8W107dmFyIHUsaD0wLGY9MS8wO2Zvcih1PTA7dTxlLl9sZW47dSsrKXt2YXIgcD1lLl91W3VdLGQ9ZS5fdlt1XSxnPWUuX3dbdV0sbT1NYXRoLnNxcnQocCpwK2QqZCtnKmcpO2g9TWF0aC5tYXgoaCxtKSxmPU1hdGgubWluKGYsbSl9Zm9yKGkodCxlLHt2YWxzOltmLGhdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pLHU9MDt1PGM7dSsrKXt2YXIgdj1uW3VdO3IueE1heD1NYXRoLm1heChyLnhNYXgsdiksci54TWluPU1hdGgubWluKHIueE1pbix2KTt2YXIgeT1vW3VdO3IueU1heD1NYXRoLm1heChyLnlNYXgseSksci55TWluPU1hdGgubWluKHIueU1pbix5KTt2YXIgeD1sW3VdO3Iuek1heD1NYXRoLm1heChyLnpNYXgseCksci56TWluPU1hdGgubWluKHIuek1pbix4KX1lLl9zbGVuPWMsZS5fbm9ybU1heD1oLGUuX3hibmRzPVtyLnhNaW4sci54TWF4XSxlLl95Ym5kcz1bci55TWluLHIueU1heF0sZS5femJuZHM9W3Iuek1pbixyLnpNYXhdfSxmaWx0ZXI6cyxwcm9jZXNzR3JpZDphfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjIzLCIuLi8uLi9saWIiOjc1MH1dLDEyNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc3RyZWFtdHViZTNkIiksaT1uLmNyZWF0ZVR1YmVNZXNoLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMsbD10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKSxjPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn07ZnVuY3Rpb24gdSh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciBoPXUucHJvdG90eXBlO2Z1bmN0aW9uIGYodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU+Mj90LnNsaWNlKDEsZS0xKToyPT09ZT9bKHRbMF0rdFsxXSkvMl06dH1mdW5jdGlvbiBwKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiAxPT09ZT9bLjUsLjVdOlt0WzFdLXRbMF0sdFtlLTFdLXRbZS0yXV19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXQuZnVsbFNjZW5lTGF5b3V0LGk9dC5kYXRhU2NhbGUsdT1lLl9sZW4saD17fTtmdW5jdGlvbiBkKHQsZSl7dmFyIG49cltlXSxvPWlbY1tlXV07cmV0dXJuIGEuc2ltcGxlTWFwKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBuLmQybCh0KSpvfSkpfWlmKGgudmVjdG9ycz1sKGQoZS5fdSwieGF4aXMiKSxkKGUuX3YsInlheGlzIiksZChlLl93LCJ6YXhpcyIpLHUpLCF1KXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O3ZhciBnPWQoZS5fWHMsInhheGlzIiksbT1kKGUuX1lzLCJ5YXhpcyIpLHY9ZChlLl9acywiemF4aXMiKTtpZihoLm1lc2hncmlkPVtnLG0sdl0saC5ncmlkRmlsbD1lLl9ncmlkRmlsbCxlLl9zbGVuKWguc3RhcnRpbmdQb3NpdGlvbnM9bChkKGUuX3N0YXJ0c1gsInhheGlzIiksZChlLl9zdGFydHNZLCJ5YXhpcyIpLGQoZS5fc3RhcnRzWiwiemF4aXMiKSk7ZWxzZXtmb3IodmFyIHk9bVswXSx4PWYoZyksYj1mKHYpLF89bmV3IEFycmF5KHgubGVuZ3RoKmIubGVuZ3RoKSx3PTAsVD0wO1Q8eC5sZW5ndGg7VCsrKWZvcih2YXIgaz0wO2s8Yi5sZW5ndGg7aysrKV9bdysrXT1beFtUXSx5LGJba11dO2guc3RhcnRpbmdQb3NpdGlvbnM9X31oLmNvbG9ybWFwPW8oZSksaC50dWJlU2l6ZT1lLnNpemVyZWYsaC5tYXhMZW5ndGg9ZS5tYXhkaXNwbGF5ZWQ7dmFyIE09ZChlLl94Ym5kcywieGF4aXMiKSxBPWQoZS5feWJuZHMsInlheGlzIiksUz1kKGUuX3pibmRzLCJ6YXhpcyIpLEU9cChnKSxDPXAobSksTD1wKHYpLFA9W1tNWzBdLUVbMF0sQVswXS1DWzBdLFNbMF0tTFswXV0sW01bMV0rRVsxXSxBWzFdK0NbMV0sU1sxXStMWzFdXV0sST1uKGgsUCksej1zKGUpO0kudmVydGV4SW50ZW5zaXR5Qm91bmRzPVt6Lm1pbi9lLl9ub3JtTWF4LHoubWF4L2UuX25vcm1NYXhdO3ZhciBPPWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gSS5saWdodFBvc2l0aW9uPVtPLngsTy55LE8uel0sSS5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxJLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLEkuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixJLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxJLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLEkub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPUkudHViZVNjYWxlKmUuc2l6ZXJlZioyLEl9aC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LHI9dGhpcy5zY2VuZS5kYXRhU2NhbGU7ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWVbbl0sYT1yW2Nbbl1dO3JldHVybiBpLmwyYyh0KS9hfWlmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgaT10LmRhdGEucG9zaXRpb24sYT10LmRhdGEudmVsb2NpdHk7cmV0dXJuIHQudHJhY2VDb29yZGluYXRlPVtuKGlbMF0sInhheGlzIiksbihpWzFdLCJ5YXhpcyIpLG4oaVsyXSwiemF4aXMiKSxuKGFbMF0sInhheGlzIiksbihhWzFdLCJ5YXhpcyIpLG4oYVsyXSwiemF4aXMiKSx0LmRhdGEuaW50ZW5zaXR5KnRoaXMuZGF0YS5fbm9ybU1heCx0LmRhdGEuZGl2ZXJnZW5jZV0sdC50ZXh0TGFiZWw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQsITB9fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1kKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0saC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1kKHQsZSksYT1pKHIsbiksbz1uZXcgdSh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjcsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NDYsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODUyLCJnbC1zdHJlYW10dWJlM2QiOjMyM31dLDEyNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygidSIpLGM9cygidiIpLHU9cygidyIpLGg9cygieCIpLGY9cygieSIpLHA9cygieiIpO2wmJmwubGVuZ3RoJiZjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmgmJmgubGVuZ3RoJiZmJiZmLmxlbmd0aCYmcCYmcC5sZW5ndGg/KHMoInN0YXJ0cy54Iikscygic3RhcnRzLnkiKSxzKCJzdGFydHMueiIpLHMoIm1heGRpc3BsYXllZCIpLHMoInNpemVyZWYiKSxzKCJsaWdodGluZy5hbWJpZW50IikscygibGlnaHRpbmcuZGlmZnVzZSIpLHMoImxpZ2h0aW5nLnNwZWN1bGFyIikscygibGlnaHRpbmcucm91Z2huZXNzIikscygibGlnaHRpbmcuZnJlc25lbCIpLHMoImxpZ2h0cG9zaXRpb24ueCIpLHMoImxpZ2h0cG9zaXRpb24ueSIpLHMoImxpZ2h0cG9zaXRpb24ueiIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSkscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYyNSwiLi4vLi4vbGliIjo3NTAsIi4vYXR0cmlidXRlcyI6MTI2NX1dLDEyNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic3RyZWFtdHViZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LGNhbGM6dCgiLi9jYWxjIikuY2FsYyxwbG90OnQoIi4vY29udmVydCIpLGV2ZW50RGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnR1YmV4PXQueCx0LnR1YmV5PXQueSx0LnR1YmV6PXQueix0LnR1YmV1PWUudHJhY2VDb29yZGluYXRlWzNdLHQudHViZXY9ZS50cmFjZUNvb3JkaW5hdGVbNF0sdC50dWJldz1lLnRyYWNlQ29vcmRpbmF0ZVs1XSx0Lm5vcm09ZS50cmFjZUNvb3JkaW5hdGVbNl0sdC5kaXZlcmdlbmNlPWUudHJhY2VDb29yZGluYXRlWzddLGRlbGV0ZSB0LngsZGVsZXRlIHQueSxkZWxldGUgdC56LHR9LG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg0MSwiLi9hdHRyaWJ1dGVzIjoxMjY1LCIuL2NhbGMiOjEyNjYsIi4vY29udmVydCI6MTI2NywiLi9kZWZhdWx0cyI6MTI2OH1dLDEyNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGw9dCgiLi4vcGllL2F0dHJpYnV0ZXMiKSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxwYXJlbnRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxicmFuY2h2YWx1ZXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlbWFpbmRlciIsInRvdGFsIl0sZGZsdDoicmVtYWluZGVyIixlZGl0VHlwZToiY2FsYyJ9LGNvdW50Ont2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJicmFuY2hlcyIsImxlYXZlcyJdLGRmbHQ6ImxlYXZlcyIsZWRpdFR5cGU6ImNhbGMifSxsZXZlbDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsYW5pbTohMH0sbWF4ZGVwdGg6e3ZhbFR5cGU6ImludGVnZXIiLGVkaXRUeXBlOiJwbG90IixkZmx0Oi0xfSxtYXJrZXI6dSh7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnUoe30sbC5tYXJrZXIubGluZS5jb2xvcix7ZGZsdDpudWxsfSksd2lkdGg6dSh7fSxsLm1hcmtlci5saW5lLndpZHRoLHtkZmx0OjF9KSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyIix7Y29sb3JBdHRyOiJjb2xvcnMiLGFuaW06ITF9KSksbGVhZjp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToic3R5bGUiLG1pbjowLG1heDoxfSxlZGl0VHlwZToicGxvdCJ9LHRleHQ6bC50ZXh0LHRleHRpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsImN1cnJlbnQgcGF0aCIsInBlcmNlbnQgcm9vdCIsInBlcmNlbnQgZW50cnkiLCJwZXJjZW50IHBhcmVudCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToicGxvdCJ9LHRleHR0ZW1wbGF0ZTphKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOmMuZXZlbnREYXRhS2V5cy5jb25jYXQoWyJsYWJlbCIsInZhbHVlIl0pfSksaG92ZXJ0ZXh0OmwuaG92ZXJ0ZXh0LGhvdmVyaW5mbzp1KHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwibmFtZSIsImN1cnJlbnQgcGF0aCIsInBlcmNlbnQgcm9vdCIsInBlcmNlbnQgZW50cnkiLCJwZXJjZW50IHBhcmVudCJdLGRmbHQ6ImxhYmVsK3RleHQrdmFsdWUrbmFtZSJ9KSxob3ZlcnRlbXBsYXRlOmkoe30se2tleXM6Yy5ldmVudERhdGFLZXlzfSksdGV4dGZvbnQ6bC50ZXh0Zm9udCxpbnNpZGV0ZXh0b3JpZW50YXRpb246bC5pbnNpZGV0ZXh0b3JpZW50YXRpb24saW5zaWRldGV4dGZvbnQ6bC5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6dSh7fSxsLm91dHNpZGV0ZXh0Zm9udCx7fSkscm90YXRpb246e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxzb3J0Omwuc29ydCxkb21haW46cyh7bmFtZToic3VuYnVyc3QiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjIyLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc5NSwiLi4vLi4vcGxvdHMvZG9tYWluIjo4MjYsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vcGllL2F0dHJpYnV0ZXMiOjExMzIsIi4vY29uc3RhbnRzIjoxMjczfV0sMTI3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0ic3VuYnVyc3QiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjg2Mn1dLDEyNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMtaGllcmFyY2h5IiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2Uscz10KCIuLi9waWUvY2FsYyIpLm1ha2VQdWxsQ29sb3JGbixsPXQoIi4uL3BpZS9jYWxjIikuZ2VuZXJhdGVFeHRlbmRlZENvbG9ycyxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmNhbGMsdT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQUxNT1NUX0VRVUFMLGg9e30sZj17fTtyLmNhbGM9ZnVuY3Rpb24odCxlKXt2YXIgcixsLGgsZixwLGQsZz10Ll9mdWxsTGF5b3V0LG09ZS5pZHMsdj1hLmlzQXJyYXlPclR5cGVkQXJyYXkobSkseT1lLmxhYmVscyx4PWUucGFyZW50cyxiPWUudmFsdWVzLF89YS5pc0FycmF5T3JUeXBlZEFycmF5KGIpLHc9W10sVD17fSxrPXt9LE09ZnVuY3Rpb24odCl7cmV0dXJuIHR8fCJudW1iZXIiPT10eXBlb2YgdH0sQT1mdW5jdGlvbih0KXtyZXR1cm4hX3x8aShiW3RdKSYmYlt0XT49MH07dj8ocj1NYXRoLm1pbihtLmxlbmd0aCx4Lmxlbmd0aCksbD1mdW5jdGlvbih0KXtyZXR1cm4gTShtW3RdKSYmQSh0KX0saD1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKG1bdF0pfSk6KHI9TWF0aC5taW4oeS5sZW5ndGgseC5sZW5ndGgpLGw9ZnVuY3Rpb24odCl7cmV0dXJuIE0oeVt0XSkmJkEodCl9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh5W3RdKX0pLF8mJihyPU1hdGgubWluKHIsYi5sZW5ndGgpKTtmb3IodmFyIFM9MDtTPHI7UysrKWlmKGwoUykpe3ZhciBFPWgoUyksQz1NKHhbU10pP1N0cmluZyh4W1NdKToiIixMPXtpOlMsaWQ6RSxwaWQ6QyxsYWJlbDpNKHlbU10pP1N0cmluZyh5W1NdKToiIn07XyYmKEwudj0rYltTXSksdy5wdXNoKEwpLHA9RSxUW2Y9Q10/VFtmXS5wdXNoKHApOlRbZl09W3BdLGtbcF09MX1pZihUWyIiXSl7aWYoVFsiIl0ubGVuZ3RoPjEpe2Zvcih2YXIgUD1hLnJhbmRzdHIoKSxJPTA7STx3Lmxlbmd0aDtJKyspIiI9PT13W0ldLnBpZCYmKHdbSV0ucGlkPVApO3cudW5zaGlmdCh7aGFzTXVsdGlwbGVSb290czohMCxpZDpQLHBpZDoiIixsYWJlbDoiIn0pfX1lbHNle3ZhciB6LE89W107Zm9yKHogaW4gVClrW3pdfHxPLnB1c2goeik7aWYoMSE9PU8ubGVuZ3RoKXJldHVybiBhLndhcm4oWyJNdWx0aXBsZSBpbXBsaWVkIHJvb3RzLCBjYW5ub3QgYnVpbGQiLGUudHlwZSwiaGllcmFyY2h5IG9mIixlLm5hbWUrIi4iLCJUaGVzZSByb290cyBpbmNsdWRlOiIsTy5qb2luKCIsICIpXS5qb2luKCIgIikpO3o9T1swXSx3LnVuc2hpZnQoe2hhc0ltcGxpZWRSb290OiEwLGlkOnoscGlkOiIiLGxhYmVsOnp9KX10cnl7ZD1uLnN0cmF0aWZ5KCkuaWQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLnBhcmVudElkKChmdW5jdGlvbih0KXtyZXR1cm4gdC5waWR9KSkodyl9Y2F0Y2godCl7cmV0dXJuIGEud2FybihbIkZhaWxlZCB0byBidWlsZCIsZS50eXBlLCJoaWVyYXJjaHkgb2YiLGUubmFtZSsiLiIsIkVycm9yOiIsdC5tZXNzYWdlXS5qb2luKCIgIikpfXZhciBEPW4uaGllcmFyY2h5KGQpLFI9ITE7aWYoXylzd2l0Y2goZS5icmFuY2h2YWx1ZXMpe2Nhc2UicmVtYWluZGVyIjpELnN1bSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YS52fSkpO2JyZWFrO2Nhc2UidG90YWwiOkQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9dC5kYXRhLmRhdGEsbj1yLnY7aWYodC5jaGlsZHJlbil7dmFyIGk9dC5jaGlsZHJlbi5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZS5kYXRhLmRhdGEudn0pLDApO2lmKChyLmhhc0ltcGxpZWRSb290fHxyLmhhc011bHRpcGxlUm9vdHMpJiYobj1pKSxuPGkqdSlyZXR1cm4gUj0hMCxhLndhcm4oWyJUb3RhbCB2YWx1ZSBmb3Igbm9kZSIsdC5kYXRhLmRhdGEuaWQsIm9mIixlLm5hbWUsImlzIHNtYWxsZXIgdGhhbiB0aGUgc3VtIG9mIGl0cyBjaGlsZHJlbi4iLCJcbnBhcmVudCB2YWx1ZSA9IixuLCJcbmNoaWxkcmVuIHN1bSA9IixpXS5qb2luKCIgIikpfXQudmFsdWU9bn0pKX1lbHNlIWZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTAsYT1lLmNoaWxkcmVuO2lmKGEpe2Zvcih2YXIgbz1hLmxlbmd0aCxzPTA7czxvO3MrKylpKz10KGFbc10scixuKTtuLmJyYW5jaGVzJiZpKyt9ZWxzZSBuLmxlYXZlcyYmaSsrO2UudmFsdWU9ZS5kYXRhLmRhdGEudmFsdWU9aSxyLl92YWx1ZXN8fChyLl92YWx1ZXM9W10pO3JldHVybiByLl92YWx1ZXNbZS5kYXRhLmRhdGEuaV09aSxpfShELGUse2JyYW5jaGVzOi0xIT09ZS5jb3VudC5pbmRleE9mKCJicmFuY2hlcyIpLGxlYXZlczotMSE9PWUuY291bnQuaW5kZXhPZigibGVhdmVzIil9KTtpZighUil7dmFyIEYsQjtlLnNvcnQmJkQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS52YWx1ZS10LnZhbHVlfSkpO3ZhciBOPWUubWFya2VyLmNvbG9yc3x8W10saj0hIU4ubGVuZ3RoO3JldHVybiBlLl9oYXNDb2xvcnNjYWxlPyhqfHwoTj1fP2UudmFsdWVzOmUuX3ZhbHVlcyksYyh0LGUse3ZhbHM6Tixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxCPW8oZS5tYXJrZXIpKTpGPXMoZ1siXyIrZS50eXBlKyJjb2xvcm1hcCJdKSxELmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPXQuZGF0YS5kYXRhO3IuY29sb3I9ZS5faGFzQ29sb3JzY2FsZT9CKE5bci5pXSk6RihOW3IuaV0sci5pZCl9KSksd1swXS5oaWVyYXJjaHk9RCx3fX0sci5fcnVuQ3Jvc3NUcmFjZUNhbGM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9mdWxsTGF5b3V0LG49ZS5jYWxjZGF0YSxpPXJbdCsiY29sb3J3YXkiXSxhPXJbIl8iK3QrImNvbG9ybWFwIl07clsiZXh0ZW5kIit0KyJjb2xvcnMiXSYmKGk9bChpLCJ0cmVlbWFwIj09PXQ/ZjpoKSk7dmFyIG89MDtmdW5jdGlvbiBzKHQpe3ZhciBlPXQuZGF0YS5kYXRhLHI9ZS5pZDshMT09PWUuY29sb3ImJihhW3JdP2UuY29sb3I9YVtyXTp0LnBhcmVudD90LnBhcmVudC5wYXJlbnQ/ZS5jb2xvcj10LnBhcmVudC5kYXRhLmRhdGEuY29sb3I6KGFbcl09ZS5jb2xvcj1pW28laS5sZW5ndGhdLG8rKyk6ZS5jb2xvcj0icmdiYSgwLDAsMCwwKSIpfWZvcih2YXIgYz0wO2M8bi5sZW5ndGg7YysrKXt2YXIgdT1uW2NdWzBdO3UudHJhY2UudHlwZT09PXQmJnUuaGllcmFyY2h5JiZ1LmhpZXJhcmNoeS5lYWNoKHMpfX0sci5jcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0KXtyZXR1cm4gci5fcnVuQ3Jvc3NUcmFjZUNhbGMoInN1bmJ1cnN0Iix0KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjcsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4uL3BpZS9jYWxjIjoxMTM0LCJkMy1oaWVyYXJjaHkiOjE2MSwiZmFzdC1pc251bWVyaWMiOjI0MX1dLDEyNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtDTElDS19UUkFOU0lUSU9OX1RJTUU6NzUwLENMSUNLX1RSQU5TSVRJT05fRUFTSU5HOiJsaW5lYXIiLGV2ZW50RGF0YUtleXM6WyJjdXJyZW50UGF0aCIsInJvb3QiLCJlbnRyeSIsInBlcmNlbnRSb290IiwicGVyY2VudEVudHJ5IiwicGVyY2VudFBhcmVudCJdfX0se31dLDEyNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLG89dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGw9cy5oYXNDb2xvcnNjYWxlLGM9cy5oYW5kbGVEZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gdShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBoPXUoImxhYmVscyIpLGY9dSgicGFyZW50cyIpO2lmKGgmJmgubGVuZ3RoJiZmJiZmLmxlbmd0aCl7dmFyIHA9dSgidmFsdWVzIik7cCYmcC5sZW5ndGg/dSgiYnJhbmNodmFsdWVzIik6dSgiY291bnQiKSx1KCJsZXZlbCIpLHUoIm1heGRlcHRoIiksdSgibWFya2VyLmxpbmUud2lkdGgiKSYmdSgibWFya2VyLmxpbmUuY29sb3IiLHMucGFwZXJfYmdjb2xvciksdSgibWFya2VyLmNvbG9ycyIpO3ZhciBkPWUuX2hhc0NvbG9yc2NhbGU9bCh0LCJtYXJrZXIiLCJjb2xvcnMiKXx8KHQubWFya2VyfHx7fSkuY29sb3JheGlzO2QmJmModCxlLHMsdSx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLHUoImxlYWYub3BhY2l0eSIsZD8xOi43KTt2YXIgZz11KCJ0ZXh0Iik7dSgidGV4dHRlbXBsYXRlIiksZS50ZXh0dGVtcGxhdGV8fHUoInRleHRpbmZvIixBcnJheS5pc0FycmF5KGcpPyJ0ZXh0K2xhYmVsIjoibGFiZWwiKSx1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIik7byh0LGUscyx1LCJhdXRvIix7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksdSgiaW5zaWRldGV4dG9yaWVudGF0aW9uIiksdSgic29ydCIpLHUoInJvdGF0aW9uIiksYShlLHMsdSksZS5fbGVuZ3RoPW51bGx9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvZG9tYWluIjo4MjYsIi4uL2Jhci9kZWZhdWx0cyI6ODk2LCIuL2F0dHJpYnV0ZXMiOjEyNzB9XSwxMjc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLG89dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9saWIvZXZlbnRzIiksYz10KCIuL2hlbHBlcnMiKSx1PXQoIi4uL3BpZS9oZWxwZXJzIikuZm9ybWF0UGllVmFsdWU7ZnVuY3Rpb24gaCh0LGUscil7Zm9yKHZhciBuPXQuZGF0YS5kYXRhLGk9e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6bi5pLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZX0sbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dO3MgaW4gdCYmKGlbc109dFtzXSl9cmV0dXJuInBhcmVudFN0cmluZyJpbiB0JiYhYy5pc0hpZXJhcmNoeVJvb3QodCkmJihpLnBhcmVudD10LnBhcmVudFN0cmluZyksYShpLGUsbi5pKSxpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGYpe3ZhciBwPWFbMF0sZD1wLnRyYWNlLGc9cC5oaWVyYXJjaHksbT0ic3VuYnVyc3QiPT09ZC50eXBlLHY9InRyZWVtYXAiPT09ZC50eXBlOyJfaGFzSG92ZXJMYWJlbCJpbiBkfHwoZC5faGFzSG92ZXJMYWJlbD0hMSksIl9oYXNIb3ZlckV2ZW50ImluIGR8fChkLl9oYXNIb3ZlckV2ZW50PSExKTt0Lm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbihpKXt2YXIgYT1yLl9mdWxsTGF5b3V0O2lmKCFyLl9kcmFnZ2luZyYmITEhPT1hLmhvdmVybW9kZSl7dmFyIGw9ci5fZnVsbERhdGFbZC5pbmRleF0seT1pLmRhdGEuZGF0YSx4PXkuaSxiPWMuaXNIaWVyYXJjaHlSb290KGkpLF89Yy5nZXRQYXJlbnQoZyxpKSx3PWMuZ2V0VmFsdWUoaSksVD1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYXN0T3B0aW9uKGwseCx0KX0saz1UKCJob3ZlcnRlbXBsYXRlIiksTT1vLmNhc3RIb3ZlcmluZm8obCxhLHgpLEE9YS5zZXBhcmF0b3JzO2lmKGt8fE0mJiJub25lIiE9PU0mJiJza2lwIiE9PU0pe3ZhciBTLEU7bSYmKFM9cC5jeCtpLnB4bWlkWzBdKigxLWkuckluc2NyaWJlZCksRT1wLmN5K2kucHhtaWRbMV0qKDEtaS5ySW5zY3JpYmVkKSksdiYmKFM9aS5faG92ZXJYLEU9aS5faG92ZXJZKTt2YXIgQyxMPXt9LFA9W10sST1bXSx6PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09UC5pbmRleE9mKHQpfTtNJiYoUD0iYWxsIj09PU0/bC5fbW9kdWxlLmF0dHJpYnV0ZXMuaG92ZXJpbmZvLmZsYWdzOk0uc3BsaXQoIisiKSksTC5sYWJlbD15LmxhYmVsLHooImxhYmVsIikmJkwubGFiZWwmJkkucHVzaChMLmxhYmVsKSx5Lmhhc093blByb3BlcnR5KCJ2IikmJihMLnZhbHVlPXkudixMLnZhbHVlTGFiZWw9dShMLnZhbHVlLEEpLHooInZhbHVlIikmJkkucHVzaChMLnZhbHVlTGFiZWwpKSxMLmN1cnJlbnRQYXRoPWkuY3VycmVudFBhdGg9Yy5nZXRQYXRoKGkuZGF0YSkseigiY3VycmVudCBwYXRoIikmJiFiJiZJLnB1c2goTC5jdXJyZW50UGF0aCk7dmFyIE89W10sRD1mdW5jdGlvbigpey0xPT09Ty5pbmRleE9mKEMpJiYoSS5wdXNoKEMpLE8ucHVzaChDKSl9O0wucGVyY2VudFBhcmVudD1pLnBlcmNlbnRQYXJlbnQ9dy9jLmdldFZhbHVlKF8pLEwucGFyZW50PWkucGFyZW50U3RyaW5nPWMuZ2V0UHRMYWJlbChfKSx6KCJwZXJjZW50IHBhcmVudCIpJiYoQz1jLmZvcm1hdFBlcmNlbnQoTC5wZXJjZW50UGFyZW50LEEpKyIgb2YgIitMLnBhcmVudCxEKCkpLEwucGVyY2VudEVudHJ5PWkucGVyY2VudEVudHJ5PXcvYy5nZXRWYWx1ZShlKSxMLmVudHJ5PWkuZW50cnk9Yy5nZXRQdExhYmVsKGUpLCF6KCJwZXJjZW50IGVudHJ5Iil8fGJ8fGkub25QYXRoYmFyfHwoQz1jLmZvcm1hdFBlcmNlbnQoTC5wZXJjZW50RW50cnksQSkrIiBvZiAiK0wuZW50cnksRCgpKSxMLnBlcmNlbnRSb290PWkucGVyY2VudFJvb3Q9dy9jLmdldFZhbHVlKGcpLEwucm9vdD1pLnJvb3Q9Yy5nZXRQdExhYmVsKGcpLHooInBlcmNlbnQgcm9vdCIpJiYhYiYmKEM9Yy5mb3JtYXRQZXJjZW50KEwucGVyY2VudFJvb3QsQSkrIiBvZiAiK0wucm9vdCxEKCkpLEwudGV4dD1UKCJob3ZlcnRleHQiKXx8VCgidGV4dCIpLHooInRleHQiKSYmKEM9TC50ZXh0LHMuaXNWYWxpZFRleHRWYWx1ZShDKSYmSS5wdXNoKEMpKTt2YXIgUj17dHJhY2U6bCx5OkUsdGV4dDpJLmpvaW4oIjxicj4iKSxuYW1lOmt8fHooIm5hbWUiKT9sLm5hbWU6dm9pZCAwLGNvbG9yOlQoImhvdmVybGFiZWwuYmdjb2xvciIpfHx5LmNvbG9yLGJvcmRlckNvbG9yOlQoImhvdmVybGFiZWwuYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OlQoImhvdmVybGFiZWwuZm9udC5mYW1pbHkiKSxmb250U2l6ZTpUKCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpUKCJob3ZlcmxhYmVsLmZvbnQuY29sb3IiKSxuYW1lTGVuZ3RoOlQoImhvdmVybGFiZWwubmFtZWxlbmd0aCIpLHRleHRBbGlnbjpUKCJob3ZlcmxhYmVsLmFsaWduIiksaG92ZXJ0ZW1wbGF0ZTprLGhvdmVydGVtcGxhdGVMYWJlbHM6TCxldmVudERhdGE6W2goaSxsLGYuZXZlbnREYXRhS2V5cyldfTttJiYoUi54MD1TLWkuckluc2NyaWJlZCppLnJweDEsUi54MT1TK2kuckluc2NyaWJlZCppLnJweDEsUi5pZGVhbEFsaWduPWkucHhtaWRbMF08MD8ibGVmdCI6InJpZ2h0IiksdiYmKFIueD1TLFIuaWRlYWxBbGlnbj1TPDA/ImxlZnQiOiJyaWdodCIpLG8ubG9uZUhvdmVyKFIse2NvbnRhaW5lcjphLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjphLl9wYXBlci5ub2RlKCksZ2Q6cn0pLGQuX2hhc0hvdmVyTGFiZWw9ITB9aWYodil7dmFyIEY9dC5zZWxlY3QoInBhdGguc3VyZmFjZSIpO2Yuc3R5bGVPbmUoRixpLGwse2hvdmVyZWQ6ITB9KX1kLl9oYXNIb3ZlckV2ZW50PSEwLHIuZW1pdCgicGxvdGx5X2hvdmVyIix7cG9pbnRzOltoKGksbCxmLmV2ZW50RGF0YUtleXMpXSxldmVudDpuLmV2ZW50fSl9fSkpLHQub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oZSl7dmFyIGk9ci5fZnVsbExheW91dCxhPXIuX2Z1bGxEYXRhW2QuaW5kZXhdLHM9bi5zZWxlY3QodGhpcykuZGF0dW0oKTtpZihkLl9oYXNIb3ZlckV2ZW50JiYoZS5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsci5lbWl0KCJwbG90bHlfdW5ob3ZlciIse3BvaW50czpbaChzLGEsZi5ldmVudERhdGFLZXlzKV0sZXZlbnQ6bi5ldmVudH0pLGQuX2hhc0hvdmVyRXZlbnQ9ITEpLGQuX2hhc0hvdmVyTGFiZWwmJihvLmxvbmVVbmhvdmVyKGkuX2hvdmVybGF5ZXIubm9kZSgpKSxkLl9oYXNIb3ZlckxhYmVsPSExKSx2KXt2YXIgbD10LnNlbGVjdCgicGF0aC5zdXJmYWNlIik7Zi5zdHlsZU9uZShsLHMsYSx7aG92ZXJlZDohMX0pfX0pKSx0Lm9uKCJjbGljayIsKGZ1bmN0aW9uKHQpe3ZhciBlPXIuX2Z1bGxMYXlvdXQsYT1yLl9mdWxsRGF0YVtkLmluZGV4XSxzPW0mJihjLmlzSGllcmFyY2h5Um9vdCh0KXx8Yy5pc0xlYWYodCkpLHU9Yy5nZXRQdElkKHQpLHA9Yy5pc0VudHJ5KHQpP2MuZmluZEVudHJ5V2l0aENoaWxkKGcsdSk6Yy5maW5kRW50cnlXaXRoTGV2ZWwoZyx1KSx2PWMuZ2V0UHRJZChwKSx5PXtwb2ludHM6W2godCxhLGYuZXZlbnREYXRhS2V5cyldLGV2ZW50Om4uZXZlbnR9O3N8fCh5Lm5leHRMZXZlbD12KTt2YXIgeD1sLnRyaWdnZXJIYW5kbGVyKHIsInBsb3RseV8iK2QudHlwZSsiY2xpY2siLHkpO2lmKCExIT09eCYmZS5ob3Zlcm1vZGUmJihyLl9ob3ZlcmRhdGE9W2godCxhLGYuZXZlbnREYXRhS2V5cyldLG8uY2xpY2socixuLmV2ZW50KSksIXMmJiExIT09eCYmIXIuX2RyYWdnaW5nJiYhci5fdHJhbnNpdGlvbmluZyl7aS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixhLGUuX3RyYWNlUHJlR1VJW2EudWlkXSx7bGV2ZWw6YS5sZXZlbH0pO3ZhciBiPXtkYXRhOlt7bGV2ZWw6dn1dLHRyYWNlczpbZC5pbmRleF19LF89e2ZyYW1lOntyZWRyYXc6ITEsZHVyYXRpb246Zi50cmFuc2l0aW9uVGltZX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246Zi50cmFuc2l0aW9uVGltZSxlYXNpbmc6Zi50cmFuc2l0aW9uRWFzaW5nfSxtb2RlOiJpbW1lZGlhdGUiLGZyb21jdXJyZW50OiEwfTtvLmxvbmVVbmhvdmVyKGUuX2hvdmVybGF5ZXIubm9kZSgpKSxpLmNhbGwoImFuaW1hdGUiLHIsYixfKX19KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY1NSwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NTEsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9saWIvZXZlbnRzIjo3MzksIi4uLy4uL3JlZ2lzdHJ5Ijo4ODIsIi4uL3BpZS9oZWxwZXJzIjoxMTM3LCIuL2hlbHBlcnMiOjEyNzYsZDM6MTY5fV0sMTI3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxvPXQoIi4uL3BpZS9oZWxwZXJzIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5kYXRhLmRhdGEucGlkfXIuZmluZEVudHJ5V2l0aExldmVsPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIGUmJnQuZWFjaEFmdGVyKChmdW5jdGlvbih0KXtpZihyLmdldFB0SWQodCk9PT1lKXJldHVybiBuPXQuY29weSgpfSkpLG58fHR9LHIuZmluZEVudHJ5V2l0aENoaWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIHQuZWFjaEFmdGVyKChmdW5jdGlvbih0KXtmb3IodmFyIGk9dC5jaGlsZHJlbnx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKHIuZ2V0UHRJZChvKT09PWUpcmV0dXJuIG49dC5jb3B5KCl9fSkpLG58fHR9LHIuaXNFbnRyeT1mdW5jdGlvbih0KXtyZXR1cm4hdC5wYXJlbnR9LHIuaXNMZWFmPWZ1bmN0aW9uKHQpe3JldHVybiF0LmNoaWxkcmVufSxyLmdldFB0SWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YS5kYXRhLmlkfSxyLmdldFB0TGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YS5kYXRhLmxhYmVsfSxyLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSxyLmlzSGllcmFyY2h5Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4iIj09PXModCl9LHIuc2V0U2xpY2VDdXJzb3I9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4uaXNUcmFuc2l0aW9uaW5nO2lmKCFpKXt2YXIgbz10LmRhdHVtKCk7aT1uLmhpZGVPblJvb3QmJnIuaXNIaWVyYXJjaHlSb290KG8pfHxuLmhpZGVPbkxlYXZlcyYmci5pc0xlYWYobyl9YSh0LGk/bnVsbDoicG9pbnRlciIpfSxyLmdldEluc2lkZVRleHRGb250S2V5PWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG89KGF8fHt9KS5vblBhdGhiYXI/InBhdGhiYXIudGV4dGZvbnQiOiJpbnNpZGV0ZXh0Zm9udCIscz1yLmRhdGEuZGF0YS5pO3JldHVybiBuLmNhc3RPcHRpb24oZSxzLG8rIi4iK3QpfHxuLmNhc3RPcHRpb24oZSxzLCJ0ZXh0Zm9udC4iK3QpfHxpLnNpemV9LHIuZ2V0T3V0c2lkZVRleHRGb250S2V5PWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXIuZGF0YS5kYXRhLmk7cmV0dXJuIG4uY2FzdE9wdGlvbihlLGEsIm91dHNpZGV0ZXh0Zm9udC4iK3QpfHxuLmNhc3RPcHRpb24oZSxhLCJ0ZXh0Zm9udC4iK3QpfHxpLnNpemV9LHIuaXNPdXRzaWRlVGV4dD1mdW5jdGlvbih0LGUpe3JldHVybiF0Ll9oYXNDb2xvcnNjYWxlJiZyLmlzSGllcmFyY2h5Um9vdChlKX0sci5kZXRlcm1pbmVUZXh0Rm9udD1mdW5jdGlvbih0LGUsYSxvKXtyZXR1cm4gci5pc091dHNpZGVUZXh0KHQsZSk/ZnVuY3Rpb24odCxlLG4pe3JldHVybntjb2xvcjpyLmdldE91dHNpZGVUZXh0Rm9udEtleSgiY29sb3IiLHQsZSxuKSxmYW1pbHk6ci5nZXRPdXRzaWRlVGV4dEZvbnRLZXkoImZhbWlseSIsdCxlLG4pLHNpemU6ci5nZXRPdXRzaWRlVGV4dEZvbnRLZXkoInNpemUiLHQsZSxuKX19KHQsZSxhKTpmdW5jdGlvbih0LGUsYSxvKXt2YXIgcz0ob3x8e30pLm9uUGF0aGJhcixsPWUuZGF0YS5kYXRhLGM9bC5pLHU9bi5jYXN0T3B0aW9uKHQsYywocz8icGF0aGJhci50ZXh0Zm9udCI6Imluc2lkZXRleHRmb250IikrIi5jb2xvciIpO3JldHVybiF1JiZ0Ll9pbnB1dC50ZXh0Zm9udCYmKHU9bi5jYXN0T3B0aW9uKHQuX2lucHV0LGMsInRleHRmb250LmNvbG9yIikpLHtjb2xvcjp1fHxpLmNvbnRyYXN0KGwuY29sb3IpLGZhbWlseTpyLmdldEluc2lkZVRleHRGb250S2V5KCJmYW1pbHkiLHQsZSxhLG8pLHNpemU6ci5nZXRJbnNpZGVUZXh0Rm9udEtleSgic2l6ZSIsdCxlLGEsbyl9fSh0LGUsYSxvKX0sci5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiEhKHQmJnQuZHVyYXRpb24+MCl9LHIuZ2V0TWF4RGVwdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4ZGVwdGg+PTA/dC5tYXhkZXB0aDoxLzB9LHIuaXNIZWFkZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHIuaXNMZWFmKHQpfHx0LmRlcHRoPT09ZS5fbWF4RGVwdGgtMSl9LHIuZ2V0UGFyZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZmluZEVudHJ5V2l0aExldmVsKHQscyhlKSl9LHIubGlzdFBhdGg9ZnVuY3Rpb24odCxlKXt2YXIgbj10LnBhcmVudDtpZighbilyZXR1cm5bXTt2YXIgaT1lP1tuLmRhdGFbZV1dOltuXTtyZXR1cm4gci5saXN0UGF0aChuLGUpLmNvbmNhdChpKX0sci5nZXRQYXRoPWZ1bmN0aW9uKHQpe3JldHVybiByLmxpc3RQYXRoKHQsImxhYmVsIikuam9pbigiLyIpKyIvIn0sci5mb3JtYXRWYWx1ZT1vLmZvcm1hdFBpZVZhbHVlLHIuZm9ybWF0UGVyY2VudD1mdW5jdGlvbih0LGUpe3ZhciByPW4uZm9ybWF0UGVyY2VudCh0LDApO3JldHVybiIwJSI9PT1yJiYocj1vLmZvcm1hdFBpZVBlcmNlbnQodCxlKSkscn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL3NldGN1cnNvciI6NzcwLCIuLi9waWUvaGVscGVycyI6MTEzN31dLDEyNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic3VuYnVyc3QiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbXSxhbmltYXRhYmxlOiEwLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLGNyb3NzVHJhY2VDYWxjOnQoIi4vY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi9wbG90IikucGxvdCxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxtZXRhOnt9fX0seyIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTE3NiwiLi9hdHRyaWJ1dGVzIjoxMjcwLCIuL2Jhc2VfcGxvdCI6MTI3MSwiLi9jYWxjIjoxMjcyLCIuL2RlZmF1bHRzIjoxMjc0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMjc4LCIuL2xheW91dF9kZWZhdWx0cyI6MTI3OSwiLi9wbG90IjoxMjgwLCIuL3N0eWxlIjoxMjgxfV0sMTI3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3N1bmJ1cnN0Y29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRzdW5idXJzdGNvbG9yczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDEyNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXIoInN1bmJ1cnN0Y29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHN1bmJ1cnN0Y29sb3JzIil9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMjc4fV0sMTI4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZDMtaGllcmFyY2h5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbD10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IiksYz1sLnJlY29yZE1pblRleHRTaXplLHU9bC5jbGVhck1pblRleHRTaXplLGg9dCgiLi4vcGllL3Bsb3QiKSxmPXQoIi4uL3BpZS9oZWxwZXJzIikuZ2V0Um90YXRpb25BbmdsZSxwPWguY29tcHV0ZVRyYW5zZm9ybSxkPWgudHJhbnNmb3JtSW5zaWRlVGV4dCxnPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSxtPXQoIi4uL2Jhci9zdHlsZSIpLnJlc2l6ZVRleHQsdj10KCIuL2Z4IikseT10KCIuL2NvbnN0YW50cyIpLHg9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gYih0LGUsbCx1KXt2YXIgaD10Ll9mdWxsTGF5b3V0LG09IWgudW5pZm9ybXRleHQubW9kZSYmeC5oYXNUcmFuc2l0aW9uKHUpLGI9bi5zZWxlY3QobCkuc2VsZWN0QWxsKCJnLnNsaWNlIiksdz1lWzBdLFQ9dy50cmFjZSxrPXcuaGllcmFyY2h5LE09eC5maW5kRW50cnlXaXRoTGV2ZWwoayxULmxldmVsKSxBPXguZ2V0TWF4RGVwdGgoVCksUz1oLl9zaXplLEU9VC5kb21haW4sQz1TLncqKEUueFsxXS1FLnhbMF0pLEw9Uy5oKihFLnlbMV0tRS55WzBdKSxQPS41Kk1hdGgubWluKEMsTCksST13LmN4PVMubCtTLncqKEUueFsxXStFLnhbMF0pLzIsej13LmN5PVMudCtTLmgqKDEtRS55WzBdKS1MLzI7aWYoIU0pcmV0dXJuIGIucmVtb3ZlKCk7dmFyIE89bnVsbCxEPXt9O20mJmIuZWFjaCgoZnVuY3Rpb24odCl7RFt4LmdldFB0SWQodCldPXtycHgwOnQucnB4MCxycHgxOnQucnB4MSx4MDp0LngwLHgxOnQueDEsdHJhbnNmb3JtOnQudHJhbnNmb3JtfSwhTyYmeC5pc0VudHJ5KHQpJiYoTz10KX0pKTt2YXIgUj1mdW5jdGlvbih0KXtyZXR1cm4gaS5wYXJ0aXRpb24oKS5zaXplKFsyKk1hdGguUEksdC5oZWlnaHQrMV0pKHQpfShNKS5kZXNjZW5kYW50cygpLEY9TS5oZWlnaHQrMSxCPTAsTj1BO3cuaGFzTXVsdGlwbGVSb290cyYmeC5pc0hpZXJhcmNoeVJvb3QoTSkmJihSPVIuc2xpY2UoMSksRi09MSxCPTEsTis9MSksUj1SLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQueTE8PU59KSk7dmFyIGo9ZihULnJvdGF0aW9uKTtqJiZSLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueDArPWosdC54MSs9an0pKTt2YXIgVT1NYXRoLm1pbihGLEEpLFY9ZnVuY3Rpb24odCl7cmV0dXJuKHQtQikvVSpQfSxxPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksLXQqTWF0aC5zaW4oZSldfSxIPWZ1bmN0aW9uKHQpe3JldHVybiBvLnBhdGhBbm51bHVzKHQucnB4MCx0LnJweDEsdC54MCx0LngxLEkseil9LEc9ZnVuY3Rpb24odCl7cmV0dXJuIEkrXyh0KVswXSoodC50cmFuc2Zvcm0uckNlbnRlcnx8MCkrKHQudHJhbnNmb3JtLnh8fDApfSxZPWZ1bmN0aW9uKHQpe3JldHVybiB6K18odClbMV0qKHQudHJhbnNmb3JtLnJDZW50ZXJ8fDApKyh0LnRyYW5zZm9ybS55fHwwKX07KGI9Yi5kYXRhKFIseC5nZXRQdElkKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLG0/Yi5leGl0KCkudHJhbnNpdGlvbigpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5zZWxlY3QoInBhdGguc3VyZmFjZSIpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPXguZ2V0UHRJZCh0KSxpPURbcl0sYT1EW3guZ2V0UHRJZChNKV07aWYoYSl7dmFyIG89KHQueDE+YS54MT8yKk1hdGguUEk6MCkrajtlPXQucnB4MTxhLnJweDE/e3JweDA6MCxycHgxOjB9Ont4MDpvLHgxOm99fWVsc2V7dmFyIHMsbD14LmdldFB0SWQodC5wYXJlbnQpO2IuZWFjaCgoZnVuY3Rpb24odCl7aWYoeC5nZXRQdElkKHQpPT09bClyZXR1cm4gcz10fSkpO3ZhciBjLHU9cy5jaGlsZHJlbjt1LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7aWYoeC5nZXRQdElkKHQpPT09cilyZXR1cm4gYz1lfSkpO3ZhciBoPXUubGVuZ3RoLGY9bi5pbnRlcnBvbGF0ZShzLngwLHMueDEpO2U9e3JweDA6UCxycHgxOlAseDA6ZihjL2gpLHgxOmYoKGMrMSkvaCl9fXJldHVybiBuLmludGVycG9sYXRlKGksZSl9KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSChlKHQpKX19KSksdC5zZWxlY3QoImcuc2xpY2V0ZXh0IikuYXR0cigib3BhY2l0eSIsMCl9KSkucmVtb3ZlKCk6Yi5leGl0KCkucmVtb3ZlKCksYi5vcmRlcigpO3ZhciBXPW51bGw7aWYobSYmTyl7dmFyIFo9eC5nZXRQdElkKE8pO2IuZWFjaCgoZnVuY3Rpb24odCl7bnVsbD09PVcmJnguZ2V0UHRJZCh0KT09PVomJihXPXQueDEpfSkpfXZhciBYPWI7ZnVuY3Rpb24gSih0KXt2YXIgZT10LnBhcmVudCxyPURbeC5nZXRQdElkKGUpXSxpPXt9O2lmKHIpe3ZhciBhPWUuY2hpbGRyZW4sbz1hLmluZGV4T2YodCkscz1hLmxlbmd0aCxsPW4uaW50ZXJwb2xhdGUoci54MCxyLngxKTtpLngwPWwoby9zKSxpLngxPWwoby9zKX1lbHNlIGkueDA9aS54MT0wO3JldHVybiBpfW0mJihYPVgudHJhbnNpdGlvbigpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7eC5zZXRTbGljZUN1cnNvcihlLHQse2hpZGVPblJvb3Q6ITAsaGlkZU9uTGVhdmVzOiEwLGlzVHJhbnNpdGlvbmluZzohMX0pfSkpKSxYLmVhY2goKGZ1bmN0aW9uKGkpe3ZhciBsPW4uc2VsZWN0KHRoaXMpLHU9by5lbnN1cmVTaW5nbGUobCwicGF0aCIsInN1cmZhY2UiLChmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpO2kucnB4MD1WKGkueTApLGkucnB4MT1WKGkueTEpLGkueG1pZD0oaS54MCtpLngxKS8yLGkucHhtaWQ9cShpLnJweDEsaS54bWlkKSxpLm1pZGFuZ2xlPS0oaS54bWlkLU1hdGguUEkvMiksaS5zdGFydGFuZ2xlPS0oaS54MC1NYXRoLlBJLzIpLGkuc3RvcGFuZ2xlPS0oaS54MS1NYXRoLlBJLzIpLGkuaGFsZmFuZ2xlPS41Kk1hdGgubWluKG8uYW5nbGVEZWx0YShpLngwLGkueDEpfHxNYXRoLlBJLE1hdGguUEkpLGkucmluZz0xLWkucnB4MC9pLnJweDEsaS5ySW5zY3JpYmVkPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5ycHgwJiZvLmlzRnVsbENpcmNsZShbdC54MCx0LngxXSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEvKDErMS9NYXRoLnNpbih0LmhhbGZhbmdsZSkpLHQucmluZy8yKSl9KGkpLG0/dS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIiwoZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUscj1EW3guZ2V0UHRJZCh0KV0saT17eDA6dC54MCx4MTp0LngxLHJweDA6dC5ycHgwLHJweDE6dC5ycHgxfTtpZihyKWU9cjtlbHNlIGlmKE8paWYodC5wYXJlbnQpaWYoVyl7dmFyIGE9KHQueDE+Vz8yKk1hdGguUEk6MCkrajtlPXt4MDphLHgxOmF9fWVsc2UgZT17cnB4MDpQLHJweDE6UH0sby5leHRlbmRGbGF0KGUsSih0KSk7ZWxzZSBlPXtycHgwOjAscnB4MTowfTtlbHNlIGU9e3gwOmoseDE6an07cmV0dXJuIG4uaW50ZXJwb2xhdGUoZSxpKX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBIKGUodCkpfX0pKTp1LmF0dHIoImQiLEgpLGwuY2FsbCh2LE0sdCxlLHtldmVudERhdGFLZXlzOnkuZXZlbnREYXRhS2V5cyx0cmFuc2l0aW9uVGltZTp5LkNMSUNLX1RSQU5TSVRJT05fVElNRSx0cmFuc2l0aW9uRWFzaW5nOnkuQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkd9KS5jYWxsKHguc2V0U2xpY2VDdXJzb3IsdCx7aGlkZU9uUm9vdDohMCxoaWRlT25MZWF2ZXM6ITAsaXNUcmFuc2l0aW9uaW5nOnQuX3RyYW5zaXRpb25pbmd9KSx1LmNhbGwoZyxpLFQpO3ZhciBmPW8uZW5zdXJlU2luZ2xlKGwsImciLCJzbGljZXRleHQiKSxiPW8uZW5zdXJlU2luZ2xlKGYsInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLF89by5lbnN1cmVVbmlmb3JtRm9udFNpemUodCx4LmRldGVybWluZVRleHRGb250KFQsaSxoLmZvbnQpKTtiLnRleHQoci5mb3JtYXRTbGljZUxhYmVsKGksTSxULGUsaCkpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChhLmZvbnQsXykuY2FsbChzLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgaz1hLmJCb3goYi5ub2RlKCkpO2kudHJhbnNmb3JtPWQoayxpLHcpLGkudHJhbnNmb3JtLnRhcmdldFg9RyhpKSxpLnRyYW5zZm9ybS50YXJnZXRZPVkoaSk7dmFyIEE9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRyYW5zZm9ybTtyZXR1cm4gcChyLGUpLHIuZm9udFNpemU9Xy5zaXplLGMoVC50eXBlLHIsaCksby5nZXRUZXh0VHJhbnNmb3JtKHIpfTttP2IudHJhbnNpdGlvbigpLmF0dHJUd2VlbigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUscj1EW3guZ2V0UHRJZCh0KV0saT10LnRyYW5zZm9ybTtpZihyKWU9cjtlbHNlIGlmKGU9e3JweDE6dC5ycHgxLHRyYW5zZm9ybTp7dGV4dFBvc0FuZ2xlOmkudGV4dFBvc0FuZ2xlLHNjYWxlOjAscm90YXRlOmkucm90YXRlLHJDZW50ZXI6aS5yQ2VudGVyLHg6aS54LHk6aS55fX0sTylpZih0LnBhcmVudClpZihXKXt2YXIgYT10LngxPlc/MipNYXRoLlBJOjA7ZS54MD1lLngxPWF9ZWxzZSBvLmV4dGVuZEZsYXQoZSxKKHQpKTtlbHNlIGUueDA9ZS54MT1qO2Vsc2UgZS54MD1lLngxPWo7dmFyIHM9bi5pbnRlcnBvbGF0ZShlLnRyYW5zZm9ybS50ZXh0UG9zQW5nbGUsdC50cmFuc2Zvcm0udGV4dFBvc0FuZ2xlKSxsPW4uaW50ZXJwb2xhdGUoZS5ycHgxLHQucnB4MSksdT1uLmludGVycG9sYXRlKGUueDAsdC54MCksZj1uLmludGVycG9sYXRlKGUueDEsdC54MSkscD1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnNjYWxlLGkuc2NhbGUpLGQ9bi5pbnRlcnBvbGF0ZShlLnRyYW5zZm9ybS5yb3RhdGUsaS5yb3RhdGUpLGc9MD09PWkuckNlbnRlcj8zOjA9PT1lLnRyYW5zZm9ybS5yQ2VudGVyPzEvMzoxLG09bi5pbnRlcnBvbGF0ZShlLnRyYW5zZm9ybS5yQ2VudGVyLGkuckNlbnRlcik7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWwodCkscj11KHQpLG49Zih0KSxhPWZ1bmN0aW9uKHQpe3JldHVybiBtKE1hdGgucG93KHQsZykpfSh0KSxvPXtweG1pZDpxKGUsKHIrbikvMikscnB4MTplLHRyYW5zZm9ybTp7dGV4dFBvc0FuZ2xlOnModCksckNlbnRlcjphLHg6aS54LHk6aS55fX07cmV0dXJuIGMoVC50eXBlLGksaCkse3RyYW5zZm9ybTp7dGFyZ2V0WDpHKG8pLHRhcmdldFk6WShvKSxzY2FsZTpwKHQpLHJvdGF0ZTpkKHQpLHJDZW50ZXI6YX19fX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBKGUodCksayl9fSkpOmIuYXR0cigidHJhbnNmb3JtIixBKGksaykpfSkpfWZ1bmN0aW9uIF8odCl7cmV0dXJuIGU9dC5ycHgxLHI9dC50cmFuc2Zvcm0udGV4dFBvc0FuZ2xlLFtlKk1hdGguc2luKHIpLC1lKk1hdGguY29zKHIpXTt2YXIgZSxyfXIucGxvdD1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHM9dC5fZnVsbExheW91dCxsPXMuX3N1bmJ1cnN0bGF5ZXIsYz0hcixoPSFzLnVuaWZvcm10ZXh0Lm1vZGUmJnguaGFzVHJhbnNpdGlvbihyKTsodSgic3VuYnVyc3QiLHMpLChhPWwuc2VsZWN0QWxsKCJnLnRyYWNlLnN1bmJ1cnN0IikuZGF0YShlLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidHJhY2UiLCEwKS5jbGFzc2VkKCJzdW5idXJzdCIsITApLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIiksYS5vcmRlcigpLGgpPyhpJiYobz1pKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7byYmbygpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7byYmbygpfSkpLmVhY2goKGZ1bmN0aW9uKCl7bC5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKChmdW5jdGlvbihlKXtiKHQsZSx0aGlzLHIpfSkpfSkpKTooYS5lYWNoKChmdW5jdGlvbihlKXtiKHQsZSx0aGlzLHIpfSkpLHMudW5pZm9ybXRleHQubW9kZSYmbSh0LHMuX3N1bmJ1cnN0bGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKSwic3VuYnVyc3QiKSk7YyYmYS5leGl0KCkucmVtb3ZlKCl9LHIuZm9ybWF0U2xpY2VMYWJlbD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXIudGV4dHRlbXBsYXRlLHM9ci50ZXh0aW5mbztpZighKGF8fHMmJiJub25lIiE9PXMpKXJldHVybiIiO3ZhciBsPWkuc2VwYXJhdG9ycyxjPW5bMF0sdT10LmRhdGEuZGF0YSxoPWMuaGllcmFyY2h5LGY9eC5pc0hpZXJhcmNoeVJvb3QodCkscD14LmdldFBhcmVudChoLHQpLGQ9eC5nZXRWYWx1ZSh0KTtpZighYSl7dmFyIGcsbT1zLnNwbGl0KCIrIiksdj1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PW0uaW5kZXhPZih0KX0seT1bXTtpZih2KCJsYWJlbCIpJiZ1LmxhYmVsJiZ5LnB1c2godS5sYWJlbCksdS5oYXNPd25Qcm9wZXJ0eSgidiIpJiZ2KCJ2YWx1ZSIpJiZ5LnB1c2goeC5mb3JtYXRWYWx1ZSh1LnYsbCkpLCFmKXt2KCJjdXJyZW50IHBhdGgiKSYmeS5wdXNoKHguZ2V0UGF0aCh0LmRhdGEpKTt2YXIgYj0wO3YoInBlcmNlbnQgcGFyZW50IikmJmIrKyx2KCJwZXJjZW50IGVudHJ5IikmJmIrKyx2KCJwZXJjZW50IHJvb3QiKSYmYisrO3ZhciBfPWI+MTtpZihiKXt2YXIgdyxUPWZ1bmN0aW9uKHQpe2c9eC5mb3JtYXRQZXJjZW50KHcsbCksXyYmKGcrPSIgb2YgIit0KSx5LnB1c2goZyl9O3YoInBlcmNlbnQgcGFyZW50IikmJiFmJiYodz1kL3guZ2V0VmFsdWUocCksVCgicGFyZW50IikpLHYoInBlcmNlbnQgZW50cnkiKSYmKHc9ZC94LmdldFZhbHVlKGUpLFQoImVudHJ5IikpLHYoInBlcmNlbnQgcm9vdCIpJiYodz1kL3guZ2V0VmFsdWUoaCksVCgicm9vdCIpKX19cmV0dXJuIHYoInRleHQiKSYmKGc9by5jYXN0T3B0aW9uKHIsdS5pLCJ0ZXh0Iiksby5pc1ZhbGlkVGV4dFZhbHVlKGcpJiZ5LnB1c2goZykpLHkuam9pbigiPGJyPiIpfXZhciBrPW8uY2FzdE9wdGlvbihyLHUuaSwidGV4dHRlbXBsYXRlIik7aWYoIWspcmV0dXJuIiI7dmFyIE09e307dS5sYWJlbCYmKE0ubGFiZWw9dS5sYWJlbCksdS5oYXNPd25Qcm9wZXJ0eSgidiIpJiYoTS52YWx1ZT11LnYsTS52YWx1ZUxhYmVsPXguZm9ybWF0VmFsdWUodS52LGwpKSxNLmN1cnJlbnRQYXRoPXguZ2V0UGF0aCh0LmRhdGEpLGZ8fChNLnBlcmNlbnRQYXJlbnQ9ZC94LmdldFZhbHVlKHApLE0ucGVyY2VudFBhcmVudExhYmVsPXguZm9ybWF0UGVyY2VudChNLnBlcmNlbnRQYXJlbnQsbCksTS5wYXJlbnQ9eC5nZXRQdExhYmVsKHApKSxNLnBlcmNlbnRFbnRyeT1kL3guZ2V0VmFsdWUoZSksTS5wZXJjZW50RW50cnlMYWJlbD14LmZvcm1hdFBlcmNlbnQoTS5wZXJjZW50RW50cnksbCksTS5lbnRyeT14LmdldFB0TGFiZWwoZSksTS5wZXJjZW50Um9vdD1kL3guZ2V0VmFsdWUoaCksTS5wZXJjZW50Um9vdExhYmVsPXguZm9ybWF0UGVyY2VudChNLnBlcmNlbnRSb290LGwpLE0ucm9vdD14LmdldFB0TGFiZWwoaCksdS5oYXNPd25Qcm9wZXJ0eSgiY29sb3IiKSYmKE0uY29sb3I9dS5jb2xvcik7dmFyIEE9by5jYXN0T3B0aW9uKHIsdS5pLCJ0ZXh0Iik7cmV0dXJuKG8uaXNWYWxpZFRleHRWYWx1ZShBKXx8IiI9PT1BKSYmKE0udGV4dD1BKSxNLmN1c3RvbWRhdGE9by5jYXN0T3B0aW9uKHIsdS5pLCJjdXN0b21kYXRhIiksby50ZXh0dGVtcGxhdGVTdHJpbmcoayxNLGkuX2QzbG9jYWxlLE0sci5fbWV0YXx8e30pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6Nzc0LCIuLi9iYXIvc3R5bGUiOjkwNiwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTA4LCIuLi9waWUvaGVscGVycyI6MTEzNywiLi4vcGllL3Bsb3QiOjExNDEsIi4vY29uc3RhbnRzIjoxMjczLCIuL2Z4IjoxMjc1LCIuL2hlbHBlcnMiOjEyNzYsIi4vc3R5bGUiOjEyODEsZDM6MTY5LCJkMy1oaWVyYXJjaHkiOjE2MX1dLDEyODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49ZS5kYXRhLmRhdGEsbz0hZS5jaGlsZHJlbixzPW4uaSxsPWEuY2FzdE9wdGlvbihyLHMsIm1hcmtlci5saW5lLmNvbG9yIil8fGkuZGVmYXVsdExpbmUsYz1hLmNhc3RPcHRpb24ocixzLCJtYXJrZXIubGluZS53aWR0aCIpfHwwO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsYykuY2FsbChpLmZpbGwsbi5jb2xvcikuY2FsbChpLnN0cm9rZSxsKS5zdHlsZSgib3BhY2l0eSIsbz9yLmxlYWYub3BhY2l0eTpudWxsKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX3N1bmJ1cnN0bGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTtvKHQsZSwic3VuYnVyc3QiKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZTtlLnN0eWxlKCJvcGFjaXR5IixyLm9wYWNpdHkpLGUuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5jYWxsKHMsdCxyKX0pKX0pKX0sc3R5bGVPbmU6c319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9saWIiOjc1MCwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTA4LGQzOjE2OX1dLDEyODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtmdW5jdGlvbiBjKHQpe3JldHVybntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzdGFydDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QifSxlbmQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90In0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6InBsb3QifSxwcm9qZWN0Ont4Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx6Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHVzZWNvbG9ybWFwOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfSxoaWdobGlnaHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGhpZ2hsaWdodGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxoaWdobGlnaHR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfX19dmFyIHU9ZS5leHBvcnRzPWwocyh7ejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6YSgpLGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGkoIiIse2NvbG9yQXR0cjoieiBvciBzdXJmYWNlY29sb3IiLHNob3dTY2FsZURmbHQ6ITAsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb250b3Vyczp7eDpjKCkseTpjKCksejpjKCl9LGhpZGVzdXJmYWNlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaWdodHBvc2l0aW9uOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MWU0fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDowfX0sbGlnaHRpbmc6e2FtYmllbnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouOH0sZGlmZnVzZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxzcGVjdWxhcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MixkZmx0Oi4wNX0scm91Z2huZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjV9LGZyZXNuZWw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjUsZGZsdDouMn19LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxvcGFjaXR5c2NhbGU6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7emF1dG86cyh7fSxpLnphdXRvLHt9KSx6bWluOnMoe30saS56bWluLHt9KSx6bWF4OnMoe30saS56bWF4LHt9KX0saG92ZXJpbmZvOnMoe30sby5ob3ZlcmluZm8pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0pLCJjYWxjIiwibmVzdGVkIik7dS54LmVkaXRUeXBlPXUueS5lZGl0VHlwZT11LnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLHUudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjIyLCIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc4MSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6Nzk1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4Nzd9XSwxMjgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5zdXJmYWNlY29sb3I/bih0LGUse3ZhbHM6ZS5zdXJmYWNlY29sb3IsY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSk6bih0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjIzfV0sMTI4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zdXJmYWNlM2QiKSxpPXQoIm5kYXJyYXkiKSxhPXQoIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIikuZDIsbz10KCIuLi9oZWF0bWFwL2ludGVycDJkIikscz10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLGw9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxjPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsdT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksaD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cztmdW5jdGlvbiBmKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLnN1cmZhY2U9ZSx0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPVshMSwhMSwhMV0sdGhpcy5jb250b3VyU3RhcnQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJFbmQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJTaXplPVswLDAsMF0sdGhpcy5taW5WYWx1ZXM9WzEvMCwxLzAsMS8wXSx0aGlzLm1heFZhbHVlcz1bLTEvMCwtMS8wLC0xLzBdLHRoaXMuZGF0YVNjYWxlWD0xLHRoaXMuZGF0YVNjYWxlWT0xLHRoaXMucmVmaW5lRGF0YT0hMCx0aGlzLm9iamVjdE9mZnNldD1bMCwwLDBdfXZhciBwPWYucHJvdG90eXBlO3AuZ2V0WGF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWwodGhpcy5kYXRhLngpP2wodGhpcy5kYXRhLnhbMF0pP3RoaXMuZGF0YS54W2VdW3RdOnRoaXMuZGF0YS54W3RdOnQ7cmV0dXJuIHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuZ2V0WWF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWwodGhpcy5kYXRhLnkpP2wodGhpcy5kYXRhLnlbMF0pP3RoaXMuZGF0YS55W2VdW3RdOnRoaXMuZGF0YS55W2VdOmU7cmV0dXJuIHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuZ2V0WmF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZGF0YS56W2VdW3RdO3JldHVybiBudWxsPT09aSYmdGhpcy5kYXRhLmNvbm5lY3RnYXBzJiZ0aGlzLmRhdGEuX2ludGVycG9sYXRlZFomJihpPXRoaXMuZGF0YS5faW50ZXJwb2xhdGVkWltlXVt0XSksdm9pZCAwPT09cj9pOm4uZDJsKGksMCxyKX0scC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5zdXJmYWNlKXt2YXIgZT0odC5kYXRhLmluZGV4WzBdLTEpL3RoaXMuZGF0YVNjYWxlWC0xLHI9KHQuZGF0YS5pbmRleFsxXS0xKS90aGlzLmRhdGFTY2FsZVktMSxuPU1hdGgubWF4KE1hdGgubWluKE1hdGgucm91bmQoZSksdGhpcy5kYXRhLnpbMF0ubGVuZ3RoLTEpLDApLGk9TWF0aC5tYXgoTWF0aC5taW4oTWF0aC5yb3VuZChyKSx0aGlzLmRhdGEuX3lsZW5ndGgtMSksMCk7dC5pbmRleD1bbixpXSx0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5nZXRYYXQobixpKSx0aGlzLmdldFlhdChuLGkpLHRoaXMuZ2V0WmF0KG4saSldLHQuZGF0YUNvb3JkaW5hdGU9W3RoaXMuZ2V0WGF0KG4saSx0aGlzLmRhdGEueGNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnhheGlzKSx0aGlzLmdldFlhdChuLGksdGhpcy5kYXRhLnljYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC55YXhpcyksdGhpcy5nZXRaYXQobixpLHRoaXMuZGF0YS56Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQuemF4aXMpXTtmb3IodmFyIGE9MDthPDM7YSsrKXt2YXIgbz10LmRhdGFDb29yZGluYXRlW2FdO251bGwhPW8mJih0LmRhdGFDb29yZGluYXRlW2FdKj10aGlzLnNjZW5lLmRhdGFTY2FsZVthXSl9dmFyIHM9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocykmJnNbaV0mJnZvaWQgMCE9PXNbaV1bbl0/dC50ZXh0TGFiZWw9c1tpXVtuXTp0LnRleHRMYWJlbD1zfHwiIix0LmRhdGEuZGF0YUNvb3JkaW5hdGU9dC5kYXRhQ29vcmRpbmF0ZS5zbGljZSgpLHRoaXMuc3VyZmFjZS5oaWdobGlnaHQodC5kYXRhKSx0aGlzLnNjZW5lLmdscGxvdC5zcGlrZXMucG9zaXRpb249dC5kYXRhQ29vcmRpbmF0ZSwhMH19O3ZhciBkPVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTcsMTAwOSwxMDEzLDEwMTksMTAyMSwxMDMxLDEwMzMsMTAzOSwxMDQ5LDEwNTEsMTA2MSwxMDYzLDEwNjksMTA4NywxMDkxLDEwOTMsMTA5NywxMTAzLDExMDksMTExNywxMTIzLDExMjksMTE1MSwxMTUzLDExNjMsMTE3MSwxMTgxLDExODcsMTE5MywxMjAxLDEyMTMsMTIxNywxMjIzLDEyMjksMTIzMSwxMjM3LDEyNDksMTI1OSwxMjc3LDEyNzksMTI4MywxMjg5LDEyOTEsMTI5NywxMzAxLDEzMDMsMTMwNywxMzE5LDEzMjEsMTMyNywxMzYxLDEzNjcsMTM3MywxMzgxLDEzOTksMTQwOSwxNDIzLDE0MjcsMTQyOSwxNDMzLDE0MzksMTQ0NywxNDUxLDE0NTMsMTQ1OSwxNDcxLDE0ODEsMTQ4MywxNDg3LDE0ODksMTQ5MywxNDk5LDE1MTEsMTUyMywxNTMxLDE1NDMsMTU0OSwxNTUzLDE1NTksMTU2NywxNTcxLDE1NzksMTU4MywxNTk3LDE2MDEsMTYwNywxNjA5LDE2MTMsMTYxOSwxNjIxLDE2MjcsMTYzNywxNjU3LDE2NjMsMTY2NywxNjY5LDE2OTMsMTY5NywxNjk5LDE3MDksMTcyMSwxNzIzLDE3MzMsMTc0MSwxNzQ3LDE3NTMsMTc1OSwxNzc3LDE3ODMsMTc4NywxNzg5LDE4MDEsMTgxMSwxODIzLDE4MzEsMTg0NywxODYxLDE4NjcsMTg3MSwxODczLDE4NzcsMTg3OSwxODg5LDE5MDEsMTkwNywxOTEzLDE5MzEsMTkzMywxOTQ5LDE5NTEsMTk3MywxOTc5LDE5ODcsMTk5MywxOTk3LDE5OTksMjAwMywyMDExLDIwMTcsMjAyNywyMDI5LDIwMzksMjA1MywyMDYzLDIwNjksMjA4MSwyMDgzLDIwODcsMjA4OSwyMDk5LDIxMTEsMjExMywyMTI5LDIxMzEsMjEzNywyMTQxLDIxNDMsMjE1MywyMTYxLDIxNzksMjIwMywyMjA3LDIyMTMsMjIyMSwyMjM3LDIyMzksMjI0MywyMjUxLDIyNjcsMjI2OSwyMjczLDIyODEsMjI4NywyMjkzLDIyOTcsMjMwOSwyMzExLDIzMzMsMjMzOSwyMzQxLDIzNDcsMjM1MSwyMzU3LDIzNzEsMjM3NywyMzgxLDIzODMsMjM4OSwyMzkzLDIzOTksMjQxMSwyNDE3LDI0MjMsMjQzNywyNDQxLDI0NDcsMjQ1OSwyNDY3LDI0NzMsMjQ3NywyNTAzLDI1MjEsMjUzMSwyNTM5LDI1NDMsMjU0OSwyNTUxLDI1NTcsMjU3OSwyNTkxLDI1OTMsMjYwOSwyNjE3LDI2MjEsMjYzMywyNjQ3LDI2NTcsMjY1OSwyNjYzLDI2NzEsMjY3NywyNjgzLDI2ODcsMjY4OSwyNjkzLDI2OTksMjcwNywyNzExLDI3MTMsMjcxOSwyNzI5LDI3MzEsMjc0MSwyNzQ5LDI3NTMsMjc2NywyNzc3LDI3ODksMjc5MSwyNzk3LDI4MDEsMjgwMywyODE5LDI4MzMsMjgzNywyODQzLDI4NTEsMjg1NywyODYxLDI4NzksMjg4NywyODk3LDI5MDMsMjkwOSwyOTE3LDI5MjcsMjkzOSwyOTUzLDI5NTcsMjk2MywyOTY5LDI5NzEsMjk5OV07ZnVuY3Rpb24gZyh0LGUpe2lmKHQ8ZSlyZXR1cm4gMDtmb3IodmFyIHI9MDswPT09TWF0aC5mbG9vcih0JWUpOyl0Lz1lLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjxkLmxlbmd0aDtyKyspe3ZhciBuPWRbcl07ZS5wdXNoKGcodCxuKSl9cmV0dXJuIGV9ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9bSh0KSxyPXQsbj0wO248ZC5sZW5ndGg7bisrKWlmKGVbbl0+MCl7cj1kW25dO2JyZWFrfXJldHVybiByfWZ1bmN0aW9uIHkodCxlKXtpZighKHQ8MXx8ZTwxKSl7Zm9yKHZhciByPW0odCksbj1tKGUpLGk9MSxhPTA7YTxkLmxlbmd0aDthKyspaSo9TWF0aC5wb3coZFthXSxNYXRoLm1heChyW2FdLG5bYV0pKTtyZXR1cm4gaX19cC5jYWxjWG51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WGF0KGUtMSwwKSxpPXRoaXMuZ2V0WGF0KGUsMCk7cltlLTFdPWkhPT1uJiZudWxsIT1uJiZudWxsIT1pP01hdGguYWJzKGktbik6MH12YXIgYT0wO2ZvcihlPTE7ZTx0O2UrKylhKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoYS9yW2UtMV0pO3JldHVybiByfSxwLmNhbGNZbnVtcz1mdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTE7ZTx0O2UrKyl7dmFyIG49dGhpcy5nZXRZYXQoMCxlLTEpLGk9dGhpcy5nZXRZYXQoMCxlKTtyW2UtMV09aSE9PW4mJm51bGwhPW4mJm51bGwhPWk/TWF0aC5hYnMoaS1uKTowfXZhciBhPTA7Zm9yKGU9MTtlPHQ7ZSsrKWErPXJbZS0xXTtmb3IoZT0xO2U8dDtlKyspMD09PXJbZS0xXT9yW2UtMV09MTpyW2UtMV09TWF0aC5yb3VuZChhL3JbZS0xXSk7cmV0dXJuIHJ9O3ZhciB4PVsxLDIsNCw2LDEyLDI0LDM2LDQ4LDYwLDEyMCwxODAsMjQwLDM2MCw3MjAsODQwLDEyNjBdLGI9eFs5XSxfPXhbMTNdO2Z1bmN0aW9uIHcodCxlLHIpe3ZhciBuPXJbOF0rclsyXSplWzBdK3JbNV0qZVsxXTtyZXR1cm4gdFswXT0ocls2XStyWzBdKmVbMF0rclszXSplWzFdKS9uLHRbMV09KHJbN10rclsxXSplWzBdK3JbNF0qZVsxXSkvbix0fWZ1bmN0aW9uIFQodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9WzAsMF0sbz10LnNoYXBlWzBdLHM9dC5zaGFwZVsxXSxsPTA7bDxvO2wrKylmb3IodmFyIGM9MDtjPHM7YysrKXIoaSxbbCxjXSxuKSx0LnNldChsLGMsYShlLGlbMF0saVsxXSkpfSh0LGUsdyxyKSx0fWZ1bmN0aW9uIGsodCxlKXtmb3IodmFyIHI9ITEsbj0wO248dC5sZW5ndGg7bisrKWlmKGU9PT10W25dKXtyPSEwO2JyZWFrfSExPT09ciYmdC5wdXNoKGUpfXAuZXN0aW1hdGVTY2FsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xK2Z1bmN0aW9uKHQpe2lmKDAhPT10Lmxlbmd0aCl7Zm9yKHZhciBlPTEscj0wO3I8dC5sZW5ndGg7cisrKWU9eShlLHRbcl0pO3JldHVybiBlfX0oMD09PWU/dGhpcy5jYWxjWG51bXModCk6dGhpcy5jYWxjWW51bXModCkpO3I8Yjspcio9Mjtmb3IoO3I+Xzspci0tLHIvPXYociksKytyPGImJihyPV8pO3ZhciBuPU1hdGgucm91bmQoci90KTtyZXR1cm4gbj4xP246MX0scC5yZWZpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YVNjYWxlWCxyPXRoaXMuZGF0YVNjYWxlWSxuPXRbMF0uc2hhcGVbMF0sYT10WzBdLnNoYXBlWzFdLG89MHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMF0qZSsxKSxzPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzFdKnIrMSksbD0xK24rMSxjPTErYSsxLHU9aShuZXcgRmxvYXQzMkFycmF5KGwqYyksW2wsY10pLGg9WzEvZSwwLDAsMCwxL3IsMCwwLDAsMV0sZj0wO2Y8dC5sZW5ndGg7KytmKXt0aGlzLnN1cmZhY2UucGFkRmllbGQodSx0W2ZdKTt2YXIgcD1pKG5ldyBGbG9hdDMyQXJyYXkobypzKSxbbyxzXSk7VChwLHUsaCksdFtmXT1wfX0scC5zZXRDb250b3VyTGV2ZWxzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49W1tdLFtdLFtdXSxpPVshMSwhMSwhMV0sYT0hMTtmb3IodD0wO3Q8MzsrK3QpaWYodGhpcy5zaG93Q29udG91clt0XSYmKGE9ITAsdGhpcy5jb250b3VyU2l6ZVt0XT4wJiZudWxsIT09dGhpcy5jb250b3VyU3RhcnRbdF0mJm51bGwhPT10aGlzLmNvbnRvdXJFbmRbdF0mJnRoaXMuY29udG91ckVuZFt0XT50aGlzLmNvbnRvdXJTdGFydFt0XSkpZm9yKGlbdF09ITAsZT10aGlzLmNvbnRvdXJTdGFydFt0XTtlPHRoaXMuY29udG91ckVuZFt0XTtlKz10aGlzLmNvbnRvdXJTaXplW3RdKXI9ZSp0aGlzLnNjZW5lLmRhdGFTY2FsZVt0XSxrKG5bdF0scik7aWYoYSl7dmFyIG89W1tdLFtdLFtdXTtmb3IodD0wO3Q8MzsrK3QpdGhpcy5zaG93Q29udG91clt0XSYmKG9bdF09aVt0XT9uW3RdOnRoaXMuc2NlbmUuY29udG91ckxldmVsc1t0XSk7dGhpcy5zdXJmYWNlLnVwZGF0ZSh7bGV2ZWxzOm99KX19LHAudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLGw9dGhpcy5zY2VuZSxmPWwuZnVsbFNjZW5lTGF5b3V0LHA9dGhpcy5zdXJmYWNlLGQ9Yyh0KSxnPWwuZGF0YVNjYWxlLG09dC56WzBdLmxlbmd0aCx2PXQuX3lsZW5ndGgseT1sLmNvbnRvdXJMZXZlbHM7dGhpcy5kYXRhPXQ7dmFyIHg9W107Zm9yKGU9MDtlPDM7ZSsrKWZvcih4W2VdPVtdLHI9MDtyPG07cisrKXhbZV1bcl09W107Zm9yKHI9MDtyPG07cisrKWZvcihuPTA7bjx2O24rKyl4WzBdW3JdW25dPXRoaXMuZ2V0WGF0KHIsbix0LnhjYWxlbmRhcixmLnhheGlzKSx4WzFdW3JdW25dPXRoaXMuZ2V0WWF0KHIsbix0LnljYWxlbmRhcixmLnlheGlzKSx4WzJdW3JdW25dPXRoaXMuZ2V0WmF0KHIsbix0LnpjYWxlbmRhcixmLnpheGlzKTtpZih0LmNvbm5lY3RnYXBzKWZvcih0Ll9lbXB0eXBvaW50cz1zKHhbMl0pLG8oeFsyXSx0Ll9lbXB0eXBvaW50cyksdC5faW50ZXJwb2xhdGVkWj1bXSxyPTA7cjxtO3IrKylmb3IodC5faW50ZXJwb2xhdGVkWltyXT1bXSxuPTA7bjx2O24rKyl0Ll9pbnRlcnBvbGF0ZWRaW3JdW25dPXhbMl1bcl1bbl07Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248djtuKyspbnVsbD09KGE9eFtlXVtyXVtuXSk/eFtlXVtyXVtuXT1OYU46YT14W2VdW3JdW25dKj1nW2VdO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHY7bisrKW51bGwhPShhPXhbZV1bcl1bbl0pJiYodGhpcy5taW5WYWx1ZXNbZV0+YSYmKHRoaXMubWluVmFsdWVzW2VdPWEpLHRoaXMubWF4VmFsdWVzW2VdPGEmJih0aGlzLm1heFZhbHVlc1tlXT1hKSk7Zm9yKGU9MDtlPDM7ZSsrKXRoaXMub2JqZWN0T2Zmc2V0W2VdPS41Kih0aGlzLm1pblZhbHVlc1tlXSt0aGlzLm1heFZhbHVlc1tlXSk7Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxtO3IrKylmb3Iobj0wO248djtuKyspbnVsbCE9KGE9eFtlXVtyXVtuXSkmJih4W2VdW3JdW25dLT10aGlzLm9iamVjdE9mZnNldFtlXSk7dmFyIGI9W2kobmV3IEZsb2F0MzJBcnJheShtKnYpLFttLHZdKSxpKG5ldyBGbG9hdDMyQXJyYXkobSp2KSxbbSx2XSksaShuZXcgRmxvYXQzMkFycmF5KG0qdiksW20sdl0pXTtmb3IoZT0wO2U8MztlKyspZm9yKHI9MDtyPG07cisrKWZvcihuPTA7bjx2O24rKyliW2VdLnNldChyLG4seFtlXVtyXVtuXSk7eD1bXTt2YXIgdz17Y29sb3JtYXA6ZCxsZXZlbHM6W1tdLFtdLFtdXSxzaG93Q29udG91cjpbITAsITAsITBdLHNob3dTdXJmYWNlOiF0LmhpZGVzdXJmYWNlLGNvbnRvdXJQcm9qZWN0OltbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sY29udG91cldpZHRoOlsxLDEsMV0sY29udG91ckNvbG9yOltbMSwxLDEsMV0sWzEsMSwxLDFdLFsxLDEsMSwxXV0sY29udG91clRpbnQ6WzEsMSwxXSxkeW5hbWljQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxkeW5hbWljV2lkdGg6WzEsMSwxXSxkeW5hbWljVGludDpbMSwxLDFdLG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxvcGFjaXR5OnQub3BhY2l0eX0sVD1oKHQpO2lmKHcuaW50ZW5zaXR5Qm91bmRzPVtULm1pbixULm1heF0sdC5zdXJmYWNlY29sb3Ipe3ZhciBrPWkobmV3IEZsb2F0MzJBcnJheShtKnYpLFttLHZdKTtmb3Iocj0wO3I8bTtyKyspZm9yKG49MDtuPHY7bisrKWsuc2V0KHIsbix0LnN1cmZhY2Vjb2xvcltuXVtyXSk7Yi5wdXNoKGspfWVsc2Ugdy5pbnRlbnNpdHlCb3VuZHNbMF0qPWdbMl0sdy5pbnRlbnNpdHlCb3VuZHNbMV0qPWdbMl07KF88YlswXS5zaGFwZVswXXx8XzxiWzBdLnNoYXBlWzFdKSYmKHRoaXMucmVmaW5lRGF0YT0hMSksITA9PT10aGlzLnJlZmluZURhdGEmJih0aGlzLmRhdGFTY2FsZVg9dGhpcy5lc3RpbWF0ZVNjYWxlKGJbMF0uc2hhcGVbMF0sMCksdGhpcy5kYXRhU2NhbGVZPXRoaXMuZXN0aW1hdGVTY2FsZShiWzBdLnNoYXBlWzFdLDEpLDE9PT10aGlzLmRhdGFTY2FsZVgmJjE9PT10aGlzLmRhdGFTY2FsZVl8fHRoaXMucmVmaW5lQ29vcmRzKGIpKSx0LnN1cmZhY2Vjb2xvciYmKHcuaW50ZW5zaXR5PWIucG9wKCkpO3ZhciBNPVshMCwhMCwhMF0sQT1bIngiLCJ5IiwieiJdO2ZvcihlPTA7ZTwzOysrZSl7dmFyIFM9dC5jb250b3Vyc1tBW2VdXTtNW2VdPVMuaGlnaGxpZ2h0LHcuc2hvd0NvbnRvdXJbZV09Uy5zaG93fHxTLmhpZ2hsaWdodCx3LnNob3dDb250b3VyW2VdJiYody5jb250b3VyUHJvamVjdFtlXT1bUy5wcm9qZWN0LngsUy5wcm9qZWN0LnksUy5wcm9qZWN0LnpdLFMuc2hvdz8odGhpcy5zaG93Q29udG91cltlXT0hMCx3LmxldmVsc1tlXT15W2VdLHAuaGlnaGxpZ2h0Q29sb3JbZV09dy5jb250b3VyQ29sb3JbZV09dShTLmNvbG9yKSxTLnVzZWNvbG9ybWFwP3AuaGlnaGxpZ2h0VGludFtlXT13LmNvbnRvdXJUaW50W2VdPTA6cC5oaWdobGlnaHRUaW50W2VdPXcuY29udG91clRpbnRbZV09MSx3LmNvbnRvdXJXaWR0aFtlXT1TLndpZHRoLHRoaXMuY29udG91clN0YXJ0W2VdPVMuc3RhcnQsdGhpcy5jb250b3VyRW5kW2VdPVMuZW5kLHRoaXMuY29udG91clNpemVbZV09Uy5zaXplKToodGhpcy5zaG93Q29udG91cltlXT0hMSx0aGlzLmNvbnRvdXJTdGFydFtlXT1udWxsLHRoaXMuY29udG91ckVuZFtlXT1udWxsLHRoaXMuY29udG91clNpemVbZV09MCksUy5oaWdobGlnaHQmJih3LmR5bmFtaWNDb2xvcltlXT11KFMuaGlnaGxpZ2h0Y29sb3IpLHcuZHluYW1pY1dpZHRoW2VdPVMuaGlnaGxpZ2h0d2lkdGgpKX0oZnVuY3Rpb24odCl7dmFyIGU9dFswXS5yZ2Iscj10W3QubGVuZ3RoLTFdLnJnYjtyZXR1cm4gZVswXT09PXJbMF0mJmVbMV09PT1yWzFdJiZlWzJdPT09clsyXSYmZVszXT09PXJbM119KShkKSYmKHcudmVydGV4Q29sb3I9ITApLHcub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LHcuY29vcmRzPWIscC51cGRhdGUodykscC52aXNpYmxlPXQudmlzaWJsZSxwLmVuYWJsZUR5bmFtaWM9TSxwLmVuYWJsZUhpZ2hsaWdodD1NLHAuc25hcFRvRGF0YT0hMCwibGlnaHRpbmciaW4gdCYmKHAuYW1iaWVudExpZ2h0PXQubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2VMaWdodD10LmxpZ2h0aW5nLmRpZmZ1c2UscC5zcGVjdWxhckxpZ2h0PXQubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9dC5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPXQubGlnaHRpbmcuZnJlc25lbCksImxpZ2h0cG9zaXRpb24iaW4gdCYmKHAubGlnaHRQb3NpdGlvbj1bdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc3VyZmFjZSksdGhpcy5zdXJmYWNlLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgZih0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYyNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjc0NiwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzczLCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyI6MTA0MiwiLi4vaGVhdG1hcC9pbnRlcnAyZCI6MTA0NSwiZ2wtc3VyZmFjZTNkIjozMjUsbmRhcnJheTo0NjksIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIjo0NjN9XSwxMjg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgaT1uKCJvcGFjaXR5c2NhbGUiKTsibWF4Ij09PWk/ZS5vcGFjaXR5c2NhbGU9W1swLC4xXSxbMSwxXV06Im1pbiI9PT1pP2Uub3BhY2l0eXNjYWxlPVtbMCwxXSxbMSwuMV1dOiJleHRyZW1lcyI9PT1pP2Uub3BhY2l0eXNjYWxlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPDMyO24rKyl7dmFyIGk9bi8zMSxhPWUrKDEtZSkqKDEtTWF0aC5wb3coTWF0aC5zaW4odCppKk1hdGguUEkpLDIpKTtyLnB1c2goW2ksTWF0aC5tYXgoMCxNYXRoLm1pbigxLGEpKV0pfXJldHVybiByfSgxLC4xKTpmdW5jdGlvbih0KXt2YXIgZT0wO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyKXJldHVybiExO2lmKCF0WzBdfHwhdFt0Lmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rdFswXVswXXx8MSE9K3RbdC5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07aWYoMiE9PW4ubGVuZ3RofHwrblswXTxlKXJldHVybiExO2U9K25bMF19cmV0dXJuITB9KGkpfHwoZS5vcGFjaXR5c2NhbGU9dm9pZCAwKX1mdW5jdGlvbiBsKHQsZSxyKXtlIGluIHQmJiEociBpbiB0KSYmKHRbcl09dFtlXSl9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixjKXt2YXIgdSxoO2Z1bmN0aW9uIGYocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX12YXIgcD1mKCJ4IiksZD1mKCJ5IiksZz1mKCJ6Iik7aWYoIWd8fCFnLmxlbmd0aHx8cCYmcC5sZW5ndGg8MXx8ZCYmZC5sZW5ndGg8MSllLnZpc2libGU9ITE7ZWxzZXtlLl94bGVuZ3RoPUFycmF5LmlzQXJyYXkocCkmJmkuaXNBcnJheU9yVHlwZWRBcnJheShwWzBdKT9nLmxlbmd0aDpnWzBdLmxlbmd0aCxlLl95bGVuZ3RoPWcubGVuZ3RoLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiLCJ6Il0sYyksZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxbImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRwb3NpdGlvbi54IiwibGlnaHRwb3NpdGlvbi55IiwibGlnaHRwb3NpdGlvbi56IiwiaGlkZXN1cmZhY2UiLCJjb25uZWN0Z2FwcyIsIm9wYWNpdHkiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtmKHQpfSkpO3ZhciBtPWYoInN1cmZhY2Vjb2xvciIpLHY9WyJ4IiwieSIsInoiXTtmb3IodT0wO3U8MzsrK3Upe3ZhciB5PSJjb250b3Vycy4iK3ZbdV0seD1mKHkrIi5zaG93IiksYj1mKHkrIi5oaWdobGlnaHQiKTtpZih4fHxiKWZvcihoPTA7aDwzOysraClmKHkrIi5wcm9qZWN0LiIrdltoXSk7eCYmKGYoeSsiLmNvbG9yIiksZih5KyIud2lkdGgiKSxmKHkrIi51c2Vjb2xvcm1hcCIpKSxiJiYoZih5KyIuaGlnaGxpZ2h0Y29sb3IiKSxmKHkrIi5oaWdobGlnaHR3aWR0aCIpKSxmKHkrIi5zdGFydCIpLGYoeSsiLmVuZCIpLGYoeSsiLnNpemUiKX1tfHwobCh0LCJ6bWluIiwiY21pbiIpLGwodCwiem1heCIsImNtYXgiKSxsKHQsInphdXRvIiwiY2F1dG8iKSksYSh0LGUsYyxmLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKHQsZSxjLGYpLGUuX2xlbmd0aD1udWxsfX0sb3BhY2l0eXNjYWxlRGVmYXVsdHM6c319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MjUsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9yZWdpc3RyeSI6ODgyLCIuL2F0dHJpYnV0ZXMiOjEyODJ9XSwxMjg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0sY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzdXJmYWNlIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCIyZE1hcCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo4NDEsIi4vYXR0cmlidXRlcyI6MTI4MiwiLi9jYWxjIjoxMjgzLCIuL2NvbnZlcnQiOjEyODQsIi4vZGVmYXVsdHMiOjEyODV9XSwxMjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbz10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXM7dCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKS5GT1JNQVRfTElOSzsoZS5leHBvcnRzPWEoe2RvbWFpbjpzKHtuYW1lOiJ0YWJsZSIsdHJhY2U6ITB9KSxjb2x1bW53aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sY29sdW1ub3JkZXI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxoZWFkZXI6e3ZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZm9ybWF0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6Mjh9LGFsaWduOmkoe30sbi5hbGlnbix7YXJyYXlPazohMH0pLGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsZGZsdDoxfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoiZ3JleSJ9fSxmaWxsOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoid2hpdGUifX0sZm9udDppKHt9LG8oe2FycmF5T2s6ITB9KSl9LGNlbGxzOnt2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjIwfSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6ImdyZXkifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6IndoaXRlIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfX0sImNhbGMiLCJmcm9tLXJvb3QiKSkudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1OTgsIi4uLy4uL2NvbnN0YW50cy9kb2NzIjo3MjAsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzgxLCIuLi8uLi9wbG90cy9kb21haW4iOjgyNiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4Mjd9XSwxMjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsaT10KCIuL3Bsb3QiKTtyLm5hbWU9InRhYmxlIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9bih0LmNhbGNkYXRhLCJ0YWJsZSIpWzBdO2UubGVuZ3RoJiZpKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInRhYmxlIiksYT1lLl9oYXMmJmUuX2hhcygidGFibGUiKTtpJiYhYSYmbi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIudGFibGUiKS5yZW1vdmUoKX19LHsiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjgzNiwiLi9wbG90IjoxMjk1fV0sMTI4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZ3VwIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih7fSl9fSx7Ii4uLy4uL2xpYi9ndXAiOjc0N31dLDEyOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjZWxsUGFkOjgsY29sdW1uRXh0ZW50T2Zmc2V0OjEwLGNvbHVtblRpdGxlT2Zmc2V0OjI4LGVtcHR5SGVhZGVySGVpZ2h0OjE2LGxhdGV4Q2hlY2s6L15cJC4qXCQkLyxnb2xkZW5SYXRpbzoxLjYxOCxsaW5lQnJlYWtlcjoiPGJyPiIsbWF4RGltZW5zaW9uQ291bnQ6NjAsb3ZlcmRyYWc6NDUscmVsZWFzZVRyYW5zaXRpb25EdXJhdGlvbjoxMjAscmVsZWFzZVRyYW5zaXRpb25FYXNlOiJjdWJpYy1vdXQiLHNjcm9sbGJhckNhcHR1cmVXaWR0aDoxOCxzY3JvbGxiYXJIaWRlRGVsYXk6MWUzLHNjcm9sbGJhckhpZGVEdXJhdGlvbjoxZTMsc2Nyb2xsYmFyT2Zmc2V0OjUsc2Nyb2xsYmFyV2lkdGg6OCx0cmFuc2l0aW9uRHVyYXRpb246MTAwLHRyYW5zaXRpb25FYXNlOiJjdWJpYy1vdXQiLHVwbGlmdDo1LHdyYXBTcGFjZXI6IiAiLHdyYXBTcGxpdENoYXJhY3RlcjoiICIsY246e3RhYmxlOiJ0YWJsZSIsdGFibGVDb250cm9sVmlldzoidGFibGUtY29udHJvbC12aWV3IixzY3JvbGxCYWNrZ3JvdW5kOiJzY3JvbGwtYmFja2dyb3VuZCIseUNvbHVtbjoieS1jb2x1bW4iLGNvbHVtbkJsb2NrOiJjb2x1bW4tYmxvY2siLHNjcm9sbEFyZWFDbGlwOiJzY3JvbGwtYXJlYS1jbGlwIixzY3JvbGxBcmVhQ2xpcFJlY3Q6InNjcm9sbC1hcmVhLWNsaXAtcmVjdCIsY29sdW1uQm91bmRhcnk6ImNvbHVtbi1ib3VuZGFyeSIsY29sdW1uQm91bmRhcnlDbGlwcGF0aDoiY29sdW1uLWJvdW5kYXJ5LWNsaXBwYXRoIixjb2x1bW5Cb3VuZGFyeVJlY3Q6ImNvbHVtbi1ib3VuZGFyeS1yZWN0Iixjb2x1bW5DZWxsczoiY29sdW1uLWNlbGxzIixjb2x1bW5DZWxsOiJjb2x1bW4tY2VsbCIsY2VsbFJlY3Q6ImNlbGwtcmVjdCIsY2VsbFRleHQ6ImNlbGwtdGV4dCIsY2VsbFRleHRIb2xkZXI6ImNlbGwtdGV4dC1ob2xkZXIiLHNjcm9sbGJhcktpdDoic2Nyb2xsYmFyLWtpdCIsc2Nyb2xsYmFyOiJzY3JvbGxiYXIiLHNjcm9sbGJhclNsaWRlcjoic2Nyb2xsYmFyLXNsaWRlciIsc2Nyb2xsYmFyR2x5cGg6InNjcm9sbGJhci1nbHlwaCIsc2Nyb2xsYmFyQ2FwdHVyZVpvbmU6InNjcm9sbGJhci1jYXB0dXJlLXpvbmUifX19LHt9XSwxMjkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoImZhc3QtaXNudW1lcmljIik7ZnVuY3Rpb24gbyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZT1NYXRoLm1heChlLG8odFtyXSkpO3JldHVybiBlfXJldHVybiB0fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdCtlfWZ1bmN0aW9uIGwodCl7dmFyIGUscj10LnNsaWNlKCksbj0xLzAsaT0wO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspQXJyYXkuaXNBcnJheShyW2VdKXx8KHJbZV09W3JbZV1dKSxuPU1hdGgubWluKG4scltlXS5sZW5ndGgpLGk9TWF0aC5tYXgoaSxyW2VdLmxlbmd0aCk7aWYobiE9PWkpZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGE9aS1yW2VdLmxlbmd0aDthJiYocltlXT1yW2VdLmNvbmNhdChjKGEpKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09IiI7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5jYWxjZGF0YS5jb2x1bW5zLnJlZHVjZSgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gci54SW5kZXg8dC54SW5kZXg/ZStyLmNvbHVtbldpZHRoOmV9KSwwKX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcCgoZnVuY3Rpb24ocil7cmV0dXJuIGkoe30sdFtyXSx7YXV4aWxpYXJ5QmxvY2tzOmV9KX0pKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByLG49e30saT0wLGE9MCxvPXtmaXJzdFJvd0luZGV4Om51bGwsbGFzdFJvd0luZGV4Om51bGwscm93czpbXX0scz0wLGw9MCxjPTA7Yzx0Lmxlbmd0aDtjKyspcj10W2NdLG8ucm93cy5wdXNoKHtyb3dJbmRleDpjLHJvd0hlaWdodDpyfSksKChhKz1yKT49ZXx8Yz09PXQubGVuZ3RoLTEpJiYobltpXT1vLG8ua2V5PWwrKyxvLmZpcnN0Um93SW5kZXg9cyxvLmxhc3RSb3dJbmRleD1jLG89e2ZpcnN0Um93SW5kZXg6bnVsbCxsYXN0Um93SW5kZXg6bnVsbCxyb3dzOltdfSxpKz1hLHM9YysxLGE9MCk7cmV0dXJuIG59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bChlLmNlbGxzLnZhbHVlcykscD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZShlLmhlYWRlci52YWx1ZXMubGVuZ3RoLHQubGVuZ3RoKX0sZD1sKGUuaGVhZGVyLnZhbHVlcyk7ZC5sZW5ndGgmJiFkWzBdLmxlbmd0aCYmKGRbMF09WyIiXSxkPWwoZCkpO3ZhciBnPWQuY29uY2F0KHAocikubWFwKChmdW5jdGlvbigpe3JldHVybiBjKChkWzBdfHxbIiJdKS5sZW5ndGgpfSkpKSxtPWUuZG9tYWluLHY9TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLncqKG0ueFsxXS1tLnhbMF0pKSx5PU1hdGguZmxvb3IodC5fZnVsbExheW91dC5fc2l6ZS5oKihtLnlbMV0tbS55WzBdKSkseD1lLmhlYWRlci52YWx1ZXMubGVuZ3RoP2dbMF0ubWFwKChmdW5jdGlvbigpe3JldHVybiBlLmhlYWRlci5oZWlnaHR9KSk6W24uZW1wdHlIZWFkZXJIZWlnaHRdLGI9ci5sZW5ndGg/clswXS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2VsbHMuaGVpZ2h0fSkpOltdLF89eC5yZWR1Y2UocywwKSx3PWYoYix5LV8rbi51cGxpZnQpLFQ9aChmKHgsXyksW10pLGs9aCh3LFQpLE09e30sQT1lLl9mdWxsSW5wdXQuY29sdW1ub3JkZXIuY29uY2F0KHAoci5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSkpKSxTPWcubWFwKChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5jb2x1bW53aWR0aCk/ZS5jb2x1bW53aWR0aFtNYXRoLm1pbihyLGUuY29sdW1ud2lkdGgubGVuZ3RoLTEpXTplLmNvbHVtbndpZHRoO3JldHVybiBhKG4pP051bWJlcihuKToxfSkpLEU9Uy5yZWR1Y2UocywwKTtTPVMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9FKnZ9KSk7dmFyIEM9TWF0aC5tYXgobyhlLmhlYWRlci5saW5lLndpZHRoKSxvKGUuY2VsbHMubGluZS53aWR0aCkpLEw9e2tleTplLnVpZCt0Ll9jb250ZXh0LnN0YXRpY1Bsb3QsdHJhbnNsYXRlWDptLnhbMF0qdC5fZnVsbExheW91dC5fc2l6ZS53LHRyYW5zbGF0ZVk6dC5fZnVsbExheW91dC5fc2l6ZS5oKigxLW0ueVsxXSksc2l6ZTp0Ll9mdWxsTGF5b3V0Ll9zaXplLHdpZHRoOnYsbWF4TGluZVdpZHRoOkMsaGVpZ2h0OnksY29sdW1uT3JkZXI6QSxncm91cEhlaWdodDp5LHJvd0Jsb2NrczprLGhlYWRlclJvd0Jsb2NrczpULHNjcm9sbFk6MCxjZWxsczppKHt9LGUuY2VsbHMse3ZhbHVlczpyfSksaGVhZGVyQ2VsbHM6aSh7fSxlLmhlYWRlcix7dmFsdWVzOmd9KSxnZENvbHVtbnM6Zy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLGdkQ29sdW1uc09yaWdpbmFsT3JkZXI6Zy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLHByZXZQYWdlczpbMCwwXSxzY3JvbGxiYXJTdGF0ZTp7c2Nyb2xsYmFyU2Nyb2xsSW5Qcm9ncmVzczohMX0sY29sdW1uczpnLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj1NW3RdO3JldHVybiBNW3RdPShyfHwwKSsxLHtrZXk6dCsiX18iK01bdF0sbGFiZWw6dCxzcGVjSW5kZXg6ZSx4SW5kZXg6QVtlXSx4U2NhbGU6dSx4OnZvaWQgMCxjYWxjZGF0YTp2b2lkIDAsY29sdW1uV2lkdGg6U1tlXX19KSl9O3JldHVybiBMLmNvbHVtbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jYWxjZGF0YT1MLHQueD11KHQpfSkpLEx9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi9jb25zdGFudHMiOjEyOTAsImZhc3QtaXNudW1lcmljIjoyNDF9XSwxMjkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O3Iuc3BsaXRUb1BhbmVscz1mdW5jdGlvbih0KXt2YXIgZT1bMCwwXSxyPW4oe30sdCx7a2V5OiJoZWFkZXIiLHR5cGU6ImhlYWRlciIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITAsdmFsdWVzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5oZWFkZXJSb3dCbG9ja3MsY2FsY2RhdGE6bih7fSx0LmNhbGNkYXRhLHtjZWxsczp0LmNhbGNkYXRhLmhlYWRlckNlbGxzfSl9KTtyZXR1cm5bbih7fSx0LHtrZXk6ImNlbGxzMSIsdHlwZToiY2VsbHMiLHBhZ2U6MCxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSksbih7fSx0LHtrZXk6ImNlbGxzMiIsdHlwZToiY2VsbHMiLHBhZ2U6MSxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSkscl19LHIuc3BsaXRUb0NlbGxzPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzW3QucGFnZV0scj1lP2Uucm93c1swXS5yb3dJbmRleDowLG49ZT9yK2Uucm93cy5sZW5ndGg6MDtyZXR1cm5bcixuXX0odCk7cmV0dXJuKHQudmFsdWVzfHxbXSkuc2xpY2UoZVswXSxlWzFdKS5tYXAoKGZ1bmN0aW9uKHIsbil7cmV0dXJue2tleVdpdGhpbkJsb2NrOm4rKCJzdHJpbmciPT10eXBlb2YgciYmci5tYXRjaCgvWzwkJj4gXS8pPyJfa2V5YnVzdGVyXyIrTWF0aC5yYW5kb20oKToiIiksa2V5OmVbMF0rbixjb2x1bW46dCxjYWxjZGF0YTp0LmNhbGNkYXRhLHBhZ2U6dC5wYWdlLHJvd0Jsb2Nrczp0LnJvd0Jsb2Nrcyx2YWx1ZTpyfX0pKX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzQwfV0sMTI5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKGUsbyxzKSxzKCJjb2x1bW53aWR0aCIpLHMoImhlYWRlci52YWx1ZXMiKSxzKCJoZWFkZXIuZm9ybWF0IikscygiaGVhZGVyLmFsaWduIikscygiaGVhZGVyLnByZWZpeCIpLHMoImhlYWRlci5zdWZmaXgiKSxzKCJoZWFkZXIuaGVpZ2h0IikscygiaGVhZGVyLmxpbmUud2lkdGgiKSxzKCJoZWFkZXIubGluZS5jb2xvciIpLHMoImhlYWRlci5maWxsLmNvbG9yIiksbi5jb2VyY2VGb250KHMsImhlYWRlci5mb250IixuLmV4dGVuZEZsYXQoe30sby5mb250KSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb2x1bW5vcmRlcnx8W10sbj10LmhlYWRlci52YWx1ZXMubGVuZ3RoLGk9ci5zbGljZSgwLG4pLGE9aS5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSxvPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gYS5pbmRleE9mKHQpfSkpLHM9by5sZW5ndGg7czxuO3MrKylvLnB1c2gocyk7ZSgiY29sdW1ub3JkZXIiLG8pfShlLHMpLHMoImNlbGxzLnZhbHVlcyIpLHMoImNlbGxzLmZvcm1hdCIpLHMoImNlbGxzLmFsaWduIikscygiY2VsbHMucHJlZml4IikscygiY2VsbHMuc3VmZml4IikscygiY2VsbHMuaGVpZ2h0IikscygiY2VsbHMubGluZS53aWR0aCIpLHMoImNlbGxzLmxpbmUuY29sb3IiKSxzKCJjZWxscy5maWxsLmNvbG9yIiksbi5jb2VyY2VGb250KHMsImNlbGxzLmZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODI2LCIuL2F0dHJpYnV0ZXMiOjEyODd9XSwxMjk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJ0YWJsZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsibm9PcGFjaXR5Il0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMjg3LCIuL2Jhc2VfcGxvdCI6MTI4OCwiLi9jYWxjIjoxMjg5LCIuL2RlZmF1bHRzIjoxMjkzLCIuL3Bsb3QiOjEyOTV9XSwxMjk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJkMyIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxsPXQoIi4uLy4uL2xpYiIpLnJhaXNlVG9Ub3AsYz10KCIuLi8uLi9saWIiKS5jYW5jZWxUcmFuc2l0aW9uLHU9dCgiLi9kYXRhX3ByZXBhcmF0aW9uX2hlbHBlciIpLGg9dCgiLi9kYXRhX3NwbGl0X2hlbHBlcnMiKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtmdW5jdGlvbiBwKHQpe3JldHVybiBNYXRoLmNlaWwodC5jYWxjZGF0YS5tYXhMaW5lV2lkdGgvMil9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiJjbGlwIit0Ll9mdWxsTGF5b3V0Ll91aWQrIl9zY3JvbGxBcmVhQm90dG9tQ2xpcF8iK2Uua2V5fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4iY2xpcCIrdC5fZnVsbExheW91dC5fdWlkKyJfY29sdW1uQm91bmRhcnlDbGlwcGF0aF8iK2UuY2FsY2RhdGEua2V5KyJfIitlLnNwZWNJbmRleH1mdW5jdGlvbiBtKHQpe3JldHVybltdLmNvbmNhdC5hcHBseShbXSx0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX19kYXRhX199KSl9ZnVuY3Rpb24gdih0LGUscil7dmFyIG89dC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyS2l0KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtvLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhcktpdCwhMCkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImdlb21ldHJpY1ByZWNpc2lvbiIpLG8uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5zY3JvbGxiYXJTdGF0ZTtlLnRvdGFsSGVpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzO3JldHVybiB6KGUsZS5sZW5ndGgtMSkrKGUubGVuZ3RoP08oZVtlLmxlbmd0aC0xXSwxLzApOjEpfSh0KSxlLnNjcm9sbGFibGVBcmVhSGVpZ2h0PXQuZ3JvdXBIZWlnaHQtTSh0KSxlLmN1cnJlbnRseVZpc2libGVIZWlnaHQ9TWF0aC5taW4oZS50b3RhbEhlaWdodCxlLnNjcm9sbGFibGVBcmVhSGVpZ2h0KSxlLnJhdGlvPWUuY3VycmVudGx5VmlzaWJsZUhlaWdodC9lLnRvdGFsSGVpZ2h0LGUuYmFyTGVuZ3RoPU1hdGgubWF4KGUucmF0aW8qZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0LG4uZ29sZGVuUmF0aW8qbi5zY3JvbGxiYXJXaWR0aCksZS5iYXJXaWdnbGVSb29tPWUuY3VycmVudGx5VmlzaWJsZUhlaWdodC1lLmJhckxlbmd0aCxlLndpZ2dsZVJvb209TWF0aC5tYXgoMCxlLnRvdGFsSGVpZ2h0LWUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQpLGUudG9wWT0wPT09ZS5iYXJXaWdnbGVSb29tPzA6dC5zY3JvbGxZL2Uud2lnZ2xlUm9vbSplLmJhcldpZ2dsZVJvb20sZS5ib3R0b21ZPWUudG9wWStlLmJhckxlbmd0aCxlLmRyYWdNdWx0aXBsaWVyPWUud2lnZ2xlUm9vbS9lLmJhcldpZ2dsZVJvb219KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0LndpZHRoK24uc2Nyb2xsYmFyV2lkdGgvMituLnNjcm9sbGJhck9mZnNldCkrIiAiK00odCkrIikifSkpO3ZhciBzPW8uc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhcikuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7cy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXIsITApO3ZhciBsPXMuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhclNsaWRlcikuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJTbGlkZXIsITApLGwuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwICIrKHQuc2Nyb2xsYmFyU3RhdGUudG9wWXx8MCkrIikifSkpO3ZhciBjPWwuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhckdseXBoKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtjLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhckdseXBoLCEwKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5zY3JvbGxiYXJXaWR0aCkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpLmF0dHIoInkxIixuLnNjcm9sbGJhcldpZHRoLzIpLGMuYXR0cigieTIiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5iYXJMZW5ndGgtbi5zY3JvbGxiYXJXaWR0aC8yfSkpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uRHJhZ0luUHJvZ3Jlc3N8fCF0LnNjcm9sbGJhclN0YXRlLmJhcldpZ2dsZVJvb218fHI/MDouNH0pKSxjLnRyYW5zaXRpb24oKS5kZWxheSgwKS5kdXJhdGlvbigwKSxjLnRyYW5zaXRpb24oKS5kZWxheShuLnNjcm9sbGJhckhpZGVEZWxheSkuZHVyYXRpb24obi5zY3JvbGxiYXJIaWRlRHVyYXRpb24pLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKTt2YXIgdT1zLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7dS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSwhMCkuYXR0cigic3Ryb2tlIiwid2hpdGUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjAxKS5hdHRyKCJzdHJva2Utd2lkdGgiLG4uc2Nyb2xsYmFyQ2FwdHVyZVdpZHRoKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKS5hdHRyKCJ5MSIsMCkub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKHIpe3ZhciBuPWkuZXZlbnQueSxhPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLnNjcm9sbGJhclN0YXRlLHM9bi1hLnRvcCxsPWkuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLG8uc2Nyb2xsYWJsZUFyZWFIZWlnaHRdKS5yYW5nZShbMCxvLnRvdGFsSGVpZ2h0XSkuY2xhbXAoITApO28udG9wWTw9cyYmczw9by5ib3R0b21ZfHxTKGUsdCxudWxsLGwocy1vLmJhckxlbmd0aC8yKSkocil9KSkuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLHQuc2Nyb2xsYmFyU3RhdGUuc2Nyb2xsYmFyU2Nyb2xsSW5Qcm9ncmVzcz0hMCx0fSkpLm9uKCJkcmFnIixTKGUsdCkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24oKXt9KSkpLHUuYXR0cigieTIiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxhYmxlQXJlYUhlaWdodH0pKSxlLl9jb250ZXh0LnN0YXRpY1Bsb3QmJihjLnJlbW92ZSgpLHUucmVtb3ZlKCkpfWZ1bmN0aW9uIHkodCxlLHIscyl7dmFyIGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbCkuZGF0YShoLnNwbGl0VG9DZWxscywoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQ2VsbCwhMCksZS5leGl0KCkucmVtb3ZlKCksZX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbHMpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGxzLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShyKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LmNhbGNkYXRhLmNlbGxzLmZvbnQsbj10LmNvbHVtbi5zcGVjSW5kZXgsaT17c2l6ZTpfKHIuc2l6ZSxuLGUpLGNvbG9yOl8oci5jb2xvcixuLGUpLGZhbWlseTpfKHIuZmFtaWx5LG4sZSl9O3Qucm93TnVtYmVyPXQua2V5LHQuYWxpZ249Xyh0LmNhbGNkYXRhLmNlbGxzLmFsaWduLG4sZSksdC5jZWxsQm9yZGVyV2lkdGg9Xyh0LmNhbGNkYXRhLmNlbGxzLmxpbmUud2lkdGgsbixlKSx0LmZvbnQ9aX0pKX0obCksZnVuY3Rpb24odCl7dC5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbi5jb2x1bW5XaWR0aH0pKS5hdHRyKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jZWxsQm9yZGVyV2lkdGh9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcyk7Zi5zdHJva2UoZSxfKHQuY2FsY2RhdGEuY2VsbHMubGluZS5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKSxmLmZpbGwoZSxfKHQuY2FsY2RhdGEuY2VsbHMuZmlsbC5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKX0pKX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFJlY3QpLmRhdGEoYS5yZXBlYXQsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSkpO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLmNlbGxSZWN0LCEwKSxlfShsKSk7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFRleHQpLmRhdGEoYS5yZXBlYXQsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSkpO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChuLmNuLmNlbGxUZXh0LCEwKS5zdHlsZSgiY3Vyc29yIiwoZnVuY3Rpb24oKXtyZXR1cm4iYXV0byJ9KSkub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKCl7aS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pKSxlfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsVGV4dEhvbGRlcikuZGF0YShhLnJlcGVhdCwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY2VsbFRleHRIb2xkZXIsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKSxlfShsKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24odCl7by5mb250KGkuc2VsZWN0KHRoaXMpLHQuZm9udCl9KSl9KGMpLHgoYyxlLHMsdCksSShsKX1mdW5jdGlvbiB4KHQsZSxyLGEpe3QudGV4dCgoZnVuY3Rpb24odCl7dmFyIGU9dC5jb2x1bW4uc3BlY0luZGV4LHI9dC5yb3dOdW1iZXIsYT10LnZhbHVlLG89InN0cmluZyI9PXR5cGVvZiBhLHM9byYmYS5tYXRjaCgvPGJyPi9pKSxsPSFvfHxzO3QubWF5SGF2ZU1hcmt1cD1vJiZhLm1hdGNoKC9bPCY+XS8pO3ZhciBjLHU9InN0cmluZyI9PXR5cGVvZihjPWEpJiZjLm1hdGNoKG4ubGF0ZXhDaGVjayk7dC5sYXRleD11O3ZhciBoLGYscD11PyIiOl8odC5jYWxjZGF0YS5jZWxscy5wcmVmaXgsZSxyKXx8IiIsZD11PyIiOl8odC5jYWxjZGF0YS5jZWxscy5zdWZmaXgsZSxyKXx8IiIsZz11P251bGw6Xyh0LmNhbGNkYXRhLmNlbGxzLmZvcm1hdCxlLHIpfHxudWxsLG09cCsoZz9pLmZvcm1hdChnKSh0LnZhbHVlKTp0LnZhbHVlKStkO2lmKHQud3JhcHBpbmdOZWVkZWQ9IXQud3JhcHBlZCYmIWwmJiF1JiYoaD1iKG0pKSx0LmNlbGxIZWlnaHRNYXlJbmNyZWFzZT1zfHx1fHx0Lm1heUhhdmVNYXJrdXB8fCh2b2lkIDA9PT1oP2IobSk6aCksdC5uZWVkc0NvbnZlcnRUb1RzcGFucz10Lm1heUhhdmVNYXJrdXB8fHQud3JhcHBpbmdOZWVkZWR8fHQubGF0ZXgsdC53cmFwcGluZ05lZWRlZCl7dmFyIHY9KCIgIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP20ucmVwbGFjZSgvPGEgaHJlZj0vZ2ksIjxhX2hyZWY9Iik6bSkuc3BsaXQobi53cmFwU3BsaXRDaGFyYWN0ZXIpLHk9IiAiPT09bi53cmFwU3BsaXRDaGFyYWN0ZXI/di5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLzxhX2hyZWY9L2dpLCI8YSBocmVmPSIpfSkpOnY7dC5mcmFnbWVudHM9eS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybnt0ZXh0OnQsd2lkdGg6bnVsbH19KSksdC5mcmFnbWVudHMucHVzaCh7ZnJhZ21lbnQ6bi53cmFwU3BhY2VyLHdpZHRoOm51bGx9KSxmPXkuam9pbihuLmxpbmVCcmVha2VyKStuLmxpbmVCcmVha2VyK24ud3JhcFNwYWNlcn1lbHNlIGRlbGV0ZSB0LmZyYWdtZW50cyxmPW07cmV0dXJuIGZ9KSkuYXR0cigiZHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5uZWVkc0NvbnZlcnRUb1RzcGFucz8wOiIwLjc1ZW0ifSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBvPWkuc2VsZWN0KHRoaXMpLGw9dC53cmFwcGluZ05lZWRlZD9DOkw7dC5uZWVkc0NvbnZlcnRUb1RzcGFucz9zLmNvbnZlcnRUb1RzcGFucyhvLGEsbChyLHRoaXMsZSxhLHQpKTppLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitQKHQpKyIgIituLmNlbGxQYWQrIikifSkpLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24odCl7cmV0dXJue2xlZnQ6InN0YXJ0IixjZW50ZXI6Im1pZGRsZSIscmlnaHQ6ImVuZCJ9W3QuYWxpZ25dfSkpfSkpfWZ1bmN0aW9uIGIodCl7cmV0dXJuLTEhPT10LmluZGV4T2Yobi53cmFwU3BsaXRDaGFyYWN0ZXIpfWZ1bmN0aW9uIF8odCxlLHIpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuPXRbTWF0aC5taW4oZSx0Lmxlbmd0aC0xKV07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bltNYXRoLm1pbihyLG4ubGVuZ3RoLTEpXTpufXJldHVybiB0fWZ1bmN0aW9uIHcodCxlLHIpe3QudHJhbnNpdGlvbigpLmVhc2Uobi5yZWxlYXNlVHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKG4ucmVsZWFzZVRyYW5zaXRpb25EdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS54KyIgIityKyIpIil9ZnVuY3Rpb24gVCh0KXtyZXR1cm4iY2VsbHMiPT09dC50eXBlfWZ1bmN0aW9uIGsodCl7cmV0dXJuImhlYWRlciI9PT10LnR5cGV9ZnVuY3Rpb24gTSh0KXtyZXR1cm4odC5yb3dCbG9ja3MubGVuZ3RoP3Qucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2NrczpbXSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K08oZSwxLzApfSksMCl9ZnVuY3Rpb24gQSh0LGUscil7dmFyIG49bShlKVswXTtpZih2b2lkIDAhPT1uKXt2YXIgaT1uLnJvd0Jsb2NrcyxhPW4uY2FsY2RhdGEsbz16KGksaS5sZW5ndGgpLHM9bi5jYWxjZGF0YS5ncm91cEhlaWdodC1NKG4pLGw9YS5zY3JvbGxZPU1hdGgubWF4KDAsTWF0aC5taW4oby1zLGEuc2Nyb2xsWSkpLGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPW8ucm93cyxsPTAsYz0wO2M8cy5sZW5ndGg7YysrKWwrPXNbY10ucm93SGVpZ2h0O28uYWxsUm93c0hlaWdodD1sO2U8aStsJiZlK3I+aSYmbi5wdXNoKGEpLGkrPWx9cmV0dXJuIG59KGksbCxzKTsxPT09Yy5sZW5ndGgmJihjWzBdPT09aS5sZW5ndGgtMT9jLnVuc2hpZnQoY1swXS0xKTpjLnB1c2goY1swXSsxKSksY1swXSUyJiZjLnJldmVyc2UoKSxlLmVhY2goKGZ1bmN0aW9uKHQsZSl7dC5wYWdlPWNbZV0sdC5zY3JvbGxZPWx9KSksZS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAgIisoeih0LnJvd0Jsb2Nrcyx0LnBhZ2UpLXQuc2Nyb2xsWSkrIikifSkpLHQmJihFKHQscixlLGMsbi5wcmV2UGFnZXMsbiwwKSxFKHQscixlLGMsbi5wcmV2UGFnZXMsbiwxKSx2KHIsdCkpfX1mdW5jdGlvbiBTKHQsZSxyLGEpe3JldHVybiBmdW5jdGlvbihvKXt2YXIgcz1vLmNhbGNkYXRhP28uY2FsY2RhdGE6byxsPWUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gcy5rZXk9PT10LmtleX0pKSxjPXJ8fHMuc2Nyb2xsYmFyU3RhdGUuZHJhZ011bHRpcGxpZXIsdT1zLnNjcm9sbFk7cy5zY3JvbGxZPXZvaWQgMD09PWE/cy5zY3JvbGxZK2MqaS5ldmVudC5keTphO3ZhciBoPWwuc2VsZWN0QWxsKCIuIituLmNuLnlDb2x1bW4pLnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5CbG9jaykuZmlsdGVyKFQpO3JldHVybiBBKHQsaCxsKSxzLnNjcm9sbFk9PT11fX1mdW5jdGlvbiBFKHQsZSxyLG4saSxhLG8pe25bb10hPT1pW29dJiYoY2xlYXJUaW1lb3V0KGEuY3VycmVudFJlcGFpbnRbb10pLGEuY3VycmVudFJlcGFpbnRbb109c2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgYT1yLmZpbHRlcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT09PW8mJm5bZV0hPT1pW2VdfSkpO3kodCxlLGEsciksaVtvXT1uW29dfSkpKX1mdW5jdGlvbiBDKHQsZSxyLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWkuc2VsZWN0KGUucGFyZW50Tm9kZSk7by5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LmZyYWdtZW50cztvLnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLmVhY2goKGZ1bmN0aW9uKHQscil7ZVtyXS53aWR0aD10aGlzLmdldENvbXB1dGVkVGV4dExlbmd0aCgpfSkpO3ZhciByLGksYT1lW2UubGVuZ3RoLTFdLndpZHRoLHM9ZS5zbGljZSgwLC0xKSxsPVtdLGM9MCx1PXQuY29sdW1uLmNvbHVtbldpZHRoLTIqbi5jZWxsUGFkO2Zvcih0LnZhbHVlPSIiO3MubGVuZ3RoOyljKyhpPShyPXMuc2hpZnQoKSkud2lkdGgrYSk+dSYmKHQudmFsdWUrPWwuam9pbihuLndyYXBTcGFjZXIpK24ubGluZUJyZWFrZXIsbD1bXSxjPTApLGwucHVzaChyLnRleHQpLGMrPWk7YyYmKHQudmFsdWUrPWwuam9pbihuLndyYXBTcGFjZXIpKSx0LndyYXBwZWQ9ITB9KSksby5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5yZW1vdmUoKSx4KG8uc2VsZWN0KCIuIituLmNuLmNlbGxUZXh0KSxyLHQsYSksaS5zZWxlY3QoZS5wYXJlbnROb2RlLnBhcmVudE5vZGUpLmNhbGwoSSl9fWZ1bmN0aW9uIEwodCxlLHIsYSxvKXtyZXR1cm4gZnVuY3Rpb24oKXtpZighby5zZXR0bGVkWSl7dmFyIHM9aS5zZWxlY3QoZS5wYXJlbnROb2RlKSxsPVIobyksYz1vLmtleS1sLmZpcnN0Um93SW5kZXgsdT1sLnJvd3NbY10ucm93SGVpZ2h0LGg9by5jZWxsSGVpZ2h0TWF5SW5jcmVhc2U/ZS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCsyKm4uY2VsbFBhZDp1LGY9TWF0aC5tYXgoaCx1KTtmLWwucm93c1tjXS5yb3dIZWlnaHQmJihsLnJvd3NbY10ucm93SGVpZ2h0PWYsdC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbCkuY2FsbChJKSxBKG51bGwsdC5maWx0ZXIoVCksMCksdihyLGEsITApKSxzLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9aS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3QoIi4iK24uY24uY2VsbFJlY3QpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSxhPWUudG9wLXQudG9wKyhyP3IubWF0cml4LmY6bi5jZWxsUGFkKTtyZXR1cm4idHJhbnNsYXRlKCIrUChvLGkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0KCIuIituLmNuLmNlbGxUZXh0SG9sZGVyKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpKyIgIithKyIpIn0pKSxvLnNldHRsZWRZPSEwfX19ZnVuY3Rpb24gUCh0LGUpe3N3aXRjaCh0LmFsaWduKXtjYXNlImxlZnQiOnJldHVybiBuLmNlbGxQYWQ7Y2FzZSJyaWdodCI6cmV0dXJuIHQuY29sdW1uLmNvbHVtbldpZHRoLShlfHwwKS1uLmNlbGxQYWQ7Y2FzZSJjZW50ZXIiOnJldHVybih0LmNvbHVtbi5jb2x1bW5XaWR0aC0oZXx8MCkpLzI7ZGVmYXVsdDpyZXR1cm4gbi5jZWxsUGFkfX1mdW5jdGlvbiBJKHQpe3QuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dC5yb3dCbG9ja3NbMF0uYXV4aWxpYXJ5QmxvY2tzLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtPKGUsMS8wKX0pLDApO3JldHVybiJ0cmFuc2xhdGUoMCAiKyhPKFIodCksdC5rZXkpK2UpKyIpIn0pKS5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFJlY3QpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybihlPVIodCkscj10LmtleSxlLnJvd3Nbci1lLmZpcnN0Um93SW5kZXhdKS5yb3dIZWlnaHQ7dmFyIGUscn0pKX1mdW5jdGlvbiB6KHQsZSl7Zm9yKHZhciByPTAsbj1lLTE7bj49MDtuLS0pcis9RCh0W25dKTtyZXR1cm4gcn1mdW5jdGlvbiBPKHQsZSl7Zm9yKHZhciByPTAsbj0wO248dC5yb3dzLmxlbmd0aCYmdC5yb3dzW25dLnJvd0luZGV4PGU7bisrKXIrPXQucm93c1tuXS5yb3dIZWlnaHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gRCh0KXt2YXIgZT10LmFsbFJvd3NIZWlnaHQ7aWYodm9pZCAwIT09ZSlyZXR1cm4gZTtmb3IodmFyIHI9MCxuPTA7bjx0LnJvd3MubGVuZ3RoO24rKylyKz10LnJvd3Nbbl0ucm93SGVpZ2h0O3JldHVybiB0LmFsbFJvd3NIZWlnaHQ9cixyfWZ1bmN0aW9uIFIodCl7cmV0dXJuIHQucm93QmxvY2tzW3QucGFnZV19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9IXQuX2NvbnRleHQuc3RhdGljUGxvdCxzPXQuX2Z1bGxMYXlvdXQuX3BhcGVyLnNlbGVjdEFsbCgiLiIrbi5jbi50YWJsZSkuZGF0YShlLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9YS51bndyYXAoZSkudHJhY2U7cmV0dXJuIHUodCxyKX0pKSxhLmtleUZ1bik7cy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi50YWJsZSwhMCkuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIikuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJvdmVyZmxvdyIsInZpc2libGUiKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHMuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCt0LnNpemUubCt0LnNpemUucn0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQrdC5zaXplLnQrdC5zaXplLmJ9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QudHJhbnNsYXRlWCsiLCIrdC50cmFuc2xhdGVZKyIpIn0pKTt2YXIgZj1zLnNlbGVjdEFsbCgiLiIrbi5jbi50YWJsZUNvbnRyb2xWaWV3KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKSx4PWYuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24udGFibGVDb250cm9sVmlldywhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpO2lmKHIpe3ZhciBiPSJvbndoZWVsImluIGRvY3VtZW50PyJ3aGVlbCI6Im1vdXNld2hlZWwiO3gub24oIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKGUpe2YuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZT09PXR9KSkuY2FsbCh2LHQpfSkpLm9uKGIsKGZ1bmN0aW9uKGUpe2lmKCFlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nKXtlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nPSEwO3ZhciByPWUuc2Nyb2xsWStpLmV2ZW50LmRlbHRhWTtTKHQsZixudWxsLHIpKGUpfHwoaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSxpLmV2ZW50LnByZXZlbnREZWZhdWx0KCkpLGUuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmc9ITF9fSkpLmNhbGwodix0LCEwKX1mLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnNpemUubCsiICIrdC5zaXplLnQrIikifSkpO3ZhciBfPWYuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbEJhY2tncm91bmQpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO18uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQmFja2dyb3VuZCwhMCkuYXR0cigiZmlsbCIsIm5vbmUiKSxfLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLGYuZWFjaCgoZnVuY3Rpb24oZSl7by5zZXRDbGlwVXJsKGkuc2VsZWN0KHRoaXMpLGQodCxlKSx0KX0pKTt2YXIgTT1mLnNlbGVjdEFsbCgiLiIrbi5jbi55Q29sdW1uKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5zfSksYS5rZXlGdW4pO00uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24ueUNvbHVtbiwhMCksTS5leGl0KCkucmVtb3ZlKCksTS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIgMCkifSkpLHImJk0uY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKGUpe3JldHVybiB3KGkuc2VsZWN0KHRoaXMpLGUsLW4udXBsaWZ0KSxsKHRoaXMpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITAsdihmLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsY2RhdGEua2V5PT09dC5rZXl9KSksdCksZX0pKS5vbigiZHJhZyIsKGZ1bmN0aW9uKHQpe3ZhciBlPWkuc2VsZWN0KHRoaXMpLHI9ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9PT1lP2kuZXZlbnQueDplLngpK2UuY29sdW1uV2lkdGgvMn07dC54PU1hdGgubWF4KC1uLm92ZXJkcmFnLE1hdGgubWluKHQuY2FsY2RhdGEud2lkdGgrbi5vdmVyZHJhZy10LmNvbHVtbldpZHRoLGkuZXZlbnQueCkpLG0oTSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jYWxjZGF0YS5rZXk9PT10LmNhbGNkYXRhLmtleX0pKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiByKHQpLXIoZSl9KSkuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtlLnhJbmRleD1yLGUueD10PT09ZT9lLng6ZS54U2NhbGUoZSl9KSksTS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB0IT09ZX0pKS50cmFuc2l0aW9uKCkuZWFzZShuLnRyYW5zaXRpb25FYXNlKS5kdXJhdGlvbihuLnRyYW5zaXRpb25EdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiIDApIn0pKSxlLmNhbGwoYykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIgLSIrbi51cGxpZnQrIiApIil9KSkub24oImRyYWdlbmQiLChmdW5jdGlvbihlKXt2YXIgcj1pLnNlbGVjdCh0aGlzKSxuPWUuY2FsY2RhdGE7ZS54PWUueFNjYWxlKGUpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITEsdyhyLGUsMCksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuZ2RDb2x1bW5zT3JpZ2luYWxPcmRlcjtlLmdkQ29sdW1ucy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiByW24uaW5kZXhPZih0KV0tcltuLmluZGV4T2YoZSldfSkpLGUuY29sdW1ub3JkZXI9cix0LmVtaXQoInBsb3RseV9yZXN0eWxlIil9KHQsbixuLmNvbHVtbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54SW5kZXh9KSkpfSkpKSxNLmVhY2goKGZ1bmN0aW9uKGUpe28uc2V0Q2xpcFVybChpLnNlbGVjdCh0aGlzKSxnKHQsZSksdCl9KSk7dmFyIEU9TS5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQmxvY2spLmRhdGEoaC5zcGxpdFRvUGFuZWxzLGEua2V5RnVuKTtFLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkJsb2NrLCEwKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKSxFLnN0eWxlKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5kcmFnSGFuZGxlPyJldy1yZXNpemUiOnQuY2FsY2RhdGEuc2Nyb2xsYmFyU3RhdGUuYmFyV2lnZ2xlUm9vbT8ibnMtcmVzaXplIjoiZGVmYXVsdCJ9KSk7dmFyIEM9RS5maWx0ZXIoayksTD1FLmZpbHRlcihUKTtyJiZMLmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKChmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0fSkpLm9uKCJkcmFnIixTKHQsZiwtMSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24oKXt9KSkpLHkodCxmLEMsRSkseSh0LGYsTCxFKTt2YXIgUD1mLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxBcmVhQ2xpcCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7UC5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXAsITApLmF0dHIoImlkIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGQodCxlKX0pKTt2YXIgST1QLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxBcmVhQ2xpcFJlY3QpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO0kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXBSZWN0LCEwKS5hdHRyKCJ4Iiwtbi5vdmVyZHJhZykuYXR0cigieSIsLW4udXBsaWZ0KS5hdHRyKCJmaWxsIiwibm9uZSIpLEkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCsyKm4ub3ZlcmRyYWd9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0K24udXBsaWZ0fSkpLE0uc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJvdW5kYXJ5KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeSwhMCk7dmFyIHo9TS5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7ei5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCwhMCksei5hdHRyKCJpZCIsKGZ1bmN0aW9uKGUpe3JldHVybiBnKHQsZSl9KSk7dmFyIE89ei5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnlSZWN0KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtPLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCwhMCkuYXR0cigiZmlsbCIsIm5vbmUiKSxPLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uV2lkdGgrMipwKHQpfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhbGNkYXRhLmhlaWdodCsyKnAodCkrbi51cGxpZnR9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybi1wKHQpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4tcCh0KX0pKSxBKG51bGwsTCxmKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9ndXAiOjc0NywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NzQsIi4vY29uc3RhbnRzIjoxMjkwLCIuL2RhdGFfcHJlcGFyYXRpb25faGVscGVyIjoxMjkxLCIuL2RhdGFfc3BsaXRfaGVscGVycyI6MTI5MixkMzoxNjl9XSwxMjk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxzPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIiksbD10KCIuLi9zdW5idXJzdC9hdHRyaWJ1dGVzIiksYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtsYWJlbHM6bC5sYWJlbHMscGFyZW50czpsLnBhcmVudHMsdmFsdWVzOmwudmFsdWVzLGJyYW5jaHZhbHVlczpsLmJyYW5jaHZhbHVlcyxjb3VudDpsLmNvdW50LGxldmVsOmwubGV2ZWwsbWF4ZGVwdGg6bC5tYXhkZXB0aCx0aWxpbmc6e3BhY2tpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNxdWFyaWZ5IiwiYmluYXJ5IiwiZGljZSIsInNsaWNlIiwic2xpY2UtZGljZSIsImRpY2Utc2xpY2UiXSxkZmx0OiJzcXVhcmlmeSIsZWRpdFR5cGU6InBsb3QifSxzcXVhcmlmeXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGZsaXA6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIngiLCJ5Il0sZGZsdDoiIixlZGl0VHlwZToicGxvdCJ9LHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjMsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp1KHtwYWQ6e3Q6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0scjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCJ9LGI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9LGNvbG9yczpsLm1hcmtlci5jb2xvcnMsZGVwdGhmYWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGVkaXRUeXBlOiJzdHlsZSJ9LGxpbmU6bC5tYXJrZXIubGluZSxlZGl0VHlwZToiY2FsYyJ9LGEoIm1hcmtlciIse2NvbG9yQXR0cjoiY29sb3JzIixhbmltOiExfSkpLHBhdGhiYXI6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AiLGVkaXRUeXBlOiJwbG90In0sZWRnZXNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyI+IiwiPCIsInwiLCIvIiwiXFwiXSxkZmx0OiI+IixlZGl0VHlwZToicGxvdCJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MTIsZWRpdFR5cGU6InBsb3QifSx0ZXh0Zm9udDp1KHt9LHMudGV4dGZvbnQse30pLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDpzLnRleHQsdGV4dGluZm86bC50ZXh0aW5mbyx0ZXh0dGVtcGxhdGU6aSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpjLmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiLCJ2YWx1ZSJdKX0pLGhvdmVydGV4dDpzLmhvdmVydGV4dCxob3ZlcmluZm86bC5ob3ZlcmluZm8saG92ZXJ0ZW1wbGF0ZTpuKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLHRleHRmb250OnMudGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6cy5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6dSh7fSxzLm91dHNpZGV0ZXh0Zm9udCx7fSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgbGVmdCIsIm1pZGRsZSBjZW50ZXIiLCJtaWRkbGUgcmlnaHQiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxkZmx0OiJ0b3AgbGVmdCIsZWRpdFR5cGU6InBsb3QifSxzb3J0OnMuc29ydCxkb21haW46byh7bmFtZToidHJlZW1hcCIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdHMvZG9tYWluIjo4MjYsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vcGllL2F0dHJpYnV0ZXMiOjExMzIsIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiOjEyNzAsIi4vY29uc3RhbnRzIjoxMjk5fV0sMTI5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0idHJlZW1hcCIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODYyfV0sMTI5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zdW5idXJzdC9jYWxjIik7ci5jYWxjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uY2FsYyh0LGUpfSxyLmNyb3NzVHJhY2VDYWxjPWZ1bmN0aW9uKHQpe3JldHVybiBuLl9ydW5Dcm9zc1RyYWNlQ2FsYygidHJlZW1hcCIsdCl9fSx7Ii4uL3N1bmJ1cnN0L2NhbGMiOjEyNzJ9XSwxMjk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Q0xJQ0tfVFJBTlNJVElPTl9USU1FOjc1MCxDTElDS19UUkFOU0lUSU9OX0VBU0lORzoicG9seSIsZXZlbnREYXRhS2V5czpbImN1cnJlbnRQYXRoIiwicm9vdCIsImVudHJ5IiwicGVyY2VudFJvb3QiLCJwZXJjZW50RW50cnkiLCJwZXJjZW50UGFyZW50Il0sZ2FwV2l0aFBhdGhiYXI6MX19LHt9XSwxMzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQsbD10KCIuLi9iYXIvY29uc3RhbnRzIikuVEVYVFBBRCxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHU9Yy5oYXNDb2xvcnNjYWxlLGg9Yy5oYW5kbGVEZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gZihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBwPWYoImxhYmVscyIpLGQ9ZigicGFyZW50cyIpO2lmKHAmJnAubGVuZ3RoJiZkJiZkLmxlbmd0aCl7dmFyIGc9ZigidmFsdWVzIik7ZyYmZy5sZW5ndGg/ZigiYnJhbmNodmFsdWVzIik6ZigiY291bnQiKSxmKCJsZXZlbCIpLGYoIm1heGRlcHRoIiksInNxdWFyaWZ5Ij09PWYoInRpbGluZy5wYWNraW5nIikmJmYoInRpbGluZy5zcXVhcmlmeXJhdGlvIiksZigidGlsaW5nLmZsaXAiKSxmKCJ0aWxpbmcucGFkIik7dmFyIG09ZigidGV4dCIpO2YoInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHxmKCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShtKT8idGV4dCtsYWJlbCI6ImxhYmVsIiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB2PWYoInBhdGhiYXIudmlzaWJsZSIpO3ModCxlLGMsZiwiYXV0byIse2hhc1BhdGhiYXI6dixtb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMSxtb2R1bGVIYXNDbGlwb25heGlzOiExLG1vZHVsZUhhc1RleHRhbmdsZTohMSxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITF9KSxmKCJ0ZXh0cG9zaXRpb24iKTt2YXIgeT0tMSE9PWUudGV4dHBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpO2YoIm1hcmtlci5saW5lLndpZHRoIikmJmYoIm1hcmtlci5saW5lLmNvbG9yIixjLnBhcGVyX2JnY29sb3IpO3ZhciB4PWYoIm1hcmtlci5jb2xvcnMiKSxiPWUuX2hhc0NvbG9yc2NhbGU9dSh0LCJtYXJrZXIiLCJjb2xvcnMiKXx8KHQubWFya2VyfHx7fSkuY29sb3JheGlzO2I/aCh0LGUsYyxmLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSk6ZigibWFya2VyLmRlcHRoZmFkZSIsISh4fHxbXSkubGVuZ3RoKTt2YXIgXz0yKmUudGV4dGZvbnQuc2l6ZTtmKCJtYXJrZXIucGFkLnQiLHk/Xy80Ol8pLGYoIm1hcmtlci5wYWQubCIsXy80KSxmKCJtYXJrZXIucGFkLnIiLF8vNCksZigibWFya2VyLnBhZC5iIix5P186Xy80KSxiJiZoKHQsZSxjLGYse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KSxlLl9ob3ZlcmVkPXttYXJrZXI6e2xpbmU6e3dpZHRoOjIsY29sb3I6YS5jb250cmFzdChjLnBhcGVyX2JnY29sb3IpfX19LHYmJihmKCJwYXRoYmFyLnRoaWNrbmVzcyIsZS5wYXRoYmFyLnRleHRmb250LnNpemUrMipsKSxmKCJwYXRoYmFyLnNpZGUiKSxmKCJwYXRoYmFyLmVkZ2VzaGFwZSIpKSxmKCJzb3J0IiksbyhlLGMsZiksZS5fbGVuZ3RoPW51bGx9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MjcsIi4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9kb21haW4iOjgyNiwiLi4vYmFyL2NvbnN0YW50cyI6ODk0LCIuLi9iYXIvZGVmYXVsdHMiOjg5NiwiLi9hdHRyaWJ1dGVzIjoxMjk2fV0sMTMwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi9wYXJ0aXRpb24iKSxsPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksaD10KCIuLi9zdW5idXJzdC9meCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmLHApe3ZhciBkPXAuYmFyRGlmWSxnPXAud2lkdGgsbT1wLmhlaWdodCx2PXAudmlld1gseT1wLnZpZXdZLHg9cC5wYXRoU2xpY2UsYj1wLnRvTW92ZUluc2lkZVNsaWNlLF89cC5zdHJUcmFuc2Zvcm0sdz1wLmhhc1RyYW5zaXRpb24sVD1wLmhhbmRsZVNsaWNlc0V4aXQsaz1wLm1ha2VVcGRhdGVTbGljZUludGVycG9sYXRvcixNPXAubWFrZVVwZGF0ZVRleHRJbnRlcnBvbGF0b3IsQT17fSxTPXQuX2Z1bGxMYXlvdXQsRT1lWzBdLEM9RS50cmFjZSxMPUUuaGllcmFyY2h5LFA9Zy9DLl9lbnRyeURlcHRoLEk9dS5saXN0UGF0aChyLmRhdGEsImlkIiksej1zKEwuY29weSgpLFtnLG1dLHtwYWNraW5nOiJkaWNlIixwYWQ6e2lubmVyOjAsdG9wOjAsbGVmdDowLHJpZ2h0OjAsYm90dG9tOjB9fSkuZGVzY2VuZGFudHMoKTsoej16LmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIGU9SS5pbmRleE9mKHQuZGF0YS5pZCk7cmV0dXJuLTEhPT1lJiYodC54MD1QKmUsdC54MT1QKihlKzEpLHQueTA9ZCx0LnkxPWQrbSx0Lm9uUGF0aGJhcj0hMCwhMCl9KSkpLnJldmVyc2UoKSwoZj1mLmRhdGEoeix1LmdldFB0SWQpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBhdGhiYXIiLCEwKSxUKGYsITAsQSxbZyxtXSx4KSxmLm9yZGVyKCk7dmFyIE89Zjt3JiYoTz1PLnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3Uuc2V0U2xpY2VDdXJzb3IoZSx0LHtoaWRlT25Sb290OiExLGhpZGVPbkxlYXZlczohMSxpc1RyYW5zaXRpb25pbmc6ITF9KX0pKSksTy5lYWNoKChmdW5jdGlvbihzKXtzLl9ob3Zlclg9dihzLngxLU1hdGgubWluKGcsbSkvMikscy5faG92ZXJZPXkocy55MS1tLzIpO3ZhciBmPW4uc2VsZWN0KHRoaXMpLHA9aS5lbnN1cmVTaW5nbGUoZiwicGF0aCIsInN1cmZhY2UiLChmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpO3c/cC50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIiwoZnVuY3Rpb24odCl7dmFyIGU9ayh0LCEwLEEsW2csbV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geChlKHQpKX19KSk6cC5hdHRyKCJkIix4KSxmLmNhbGwoaCxyLHQsZSx7c3R5bGVPbmU6bCxldmVudERhdGFLZXlzOmMuZXZlbnREYXRhS2V5cyx0cmFuc2l0aW9uVGltZTpjLkNMSUNLX1RSQU5TSVRJT05fVElNRSx0cmFuc2l0aW9uRWFzaW5nOmMuQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkd9KS5jYWxsKHUuc2V0U2xpY2VDdXJzb3IsdCx7aGlkZU9uUm9vdDohMSxoaWRlT25MZWF2ZXM6ITEsaXNUcmFuc2l0aW9uaW5nOnQuX3RyYW5zaXRpb25pbmd9KSxwLmNhbGwobCxzLEMse2hvdmVyZWQ6ITF9KSxzLl90ZXh0PSh1LmdldFB0TGFiZWwocyl8fCIiKS5zcGxpdCgiPGJyPiIpLmpvaW4oIiAiKXx8IiI7dmFyIGQ9aS5lbnN1cmVTaW5nbGUoZiwiZyIsInNsaWNldGV4dCIpLFQ9aS5lbnN1cmVTaW5nbGUoZCwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksRT1pLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LHUuZGV0ZXJtaW5lVGV4dEZvbnQoQyxzLFMuZm9udCx7b25QYXRoYmFyOiEwfSkpO1QudGV4dChzLl90ZXh0fHwiICIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5jYWxsKGEuZm9udCxFKS5jYWxsKG8uY29udmVydFRvVHNwYW5zLHQpLHMudGV4dEJCPWEuYkJveChULm5vZGUoKSkscy50cmFuc2Zvcm09YihzLHtmb250U2l6ZTpFLnNpemUsb25QYXRoYmFyOiEwfSkscy50cmFuc2Zvcm0uZm9udFNpemU9RS5zaXplLHc/VC50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1NKHQsITAsQSxbZyxtXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBfKGUodCkpfX0pKTpULmF0dHIoInRyYW5zZm9ybSIsXyhzKSl9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NzQsIi4uL3N1bmJ1cnN0L2Z4IjoxMjc1LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMjc2LCIuL2NvbnN0YW50cyI6MTI5OSwiLi9wYXJ0aXRpb24iOjEzMDYsIi4vc3R5bGUiOjEzMDgsZDM6MTY5fV0sMTMwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi9wYXJ0aXRpb24iKSxsPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksaD10KCIuLi9zdW5idXJzdC9meCIpLGY9dCgiLi4vc3VuYnVyc3QvcGxvdCIpLmZvcm1hdFNsaWNlTGFiZWw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHAsZCl7dmFyIGc9ZC53aWR0aCxtPWQuaGVpZ2h0LHY9ZC52aWV3WCx5PWQudmlld1kseD1kLnBhdGhTbGljZSxiPWQudG9Nb3ZlSW5zaWRlU2xpY2UsXz1kLnN0clRyYW5zZm9ybSx3PWQuaGFzVHJhbnNpdGlvbixUPWQuaGFuZGxlU2xpY2VzRXhpdCxrPWQubWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yLE09ZC5tYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcixBPWQucHJldkVudHJ5LFM9dC5fZnVsbExheW91dCxFPWVbMF0udHJhY2UsQz0tMSE9PUUudGV4dHBvc2l0aW9uLmluZGV4T2YoImxlZnQiKSxMPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigicmlnaHQiKSxQPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigiYm90dG9tIiksST0hUCYmIUUubWFya2VyLnBhZC50fHxQJiYhRS5tYXJrZXIucGFkLmIsej1zKHIsW2csbV0se3BhY2tpbmc6RS50aWxpbmcucGFja2luZyxzcXVhcmlmeXJhdGlvOkUudGlsaW5nLnNxdWFyaWZ5cmF0aW8sZmxpcFg6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ4Iik+LTEsZmxpcFk6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ5Iik+LTEscGFkOntpbm5lcjpFLnRpbGluZy5wYWQsdG9wOkUubWFya2VyLnBhZC50LGxlZnQ6RS5tYXJrZXIucGFkLmwscmlnaHQ6RS5tYXJrZXIucGFkLnIsYm90dG9tOkUubWFya2VyLnBhZC5ifX0pLmRlc2NlbmRhbnRzKCksTz0xLzAsRD0tMS8wO3ouZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5kZXB0aDtlPj1FLl9tYXhEZXB0aD8odC54MD10LngxPSh0LngwK3QueDEpLzIsdC55MD10LnkxPSh0LnkwK3QueTEpLzIpOihPPU1hdGgubWluKE8sZSksRD1NYXRoLm1heChELGUpKX0pKSxwPXAuZGF0YSh6LHUuZ2V0UHRJZCksRS5fbWF4VmlzaWJsZUxheWVycz1pc0Zpbml0ZShEKT9ELU8rMTowLHAuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLFQocCwhMSx7fSxbZyxtXSx4KSxwLm9yZGVyKCk7dmFyIFI9bnVsbDtpZih3JiZBKXt2YXIgRj11LmdldFB0SWQoQSk7cC5lYWNoKChmdW5jdGlvbih0KXtudWxsPT09UiYmdS5nZXRQdElkKHQpPT09RiYmKFI9e3gwOnQueDAseDE6dC54MSx5MDp0LnkwLHkxOnQueTF9KX0pKX12YXIgQj1mdW5jdGlvbigpe3JldHVybiBSfHx7eDA6MCx4MTpnLHkwOjAseTE6bX19LE49cDtyZXR1cm4gdyYmKE49Ti50cmFuc2l0aW9uKCkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTt1LnNldFNsaWNlQ3Vyc29yKGUsdCx7aGlkZU9uUm9vdDohMCxoaWRlT25MZWF2ZXM6ITEsaXNUcmFuc2l0aW9uaW5nOiExfSl9KSkpLE4uZWFjaCgoZnVuY3Rpb24ocyl7dmFyIHA9dS5pc0hlYWRlcihzLEUpO3MuX2hvdmVyWD12KHMueDEtRS5tYXJrZXIucGFkLnIpLHMuX2hvdmVyWT15KFA/cy55MS1FLm1hcmtlci5wYWQuYi8yOnMueTArRS5tYXJrZXIucGFkLnQvMik7dmFyIGQ9bi5zZWxlY3QodGhpcyksVD1pLmVuc3VyZVNpbmdsZShkLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7dz9ULnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1rKHQsITEsQigpLFtnLG1dKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHgoZSh0KSl9fSkpOlQuYXR0cigiZCIseCksZC5jYWxsKGgscix0LGUse3N0eWxlT25lOmwsZXZlbnREYXRhS2V5czpjLmV2ZW50RGF0YUtleXMsdHJhbnNpdGlvblRpbWU6Yy5DTElDS19UUkFOU0lUSU9OX1RJTUUsdHJhbnNpdGlvbkVhc2luZzpjLkNMSUNLX1RSQU5TSVRJT05fRUFTSU5HfSkuY2FsbCh1LnNldFNsaWNlQ3Vyc29yLHQse2lzVHJhbnNpdGlvbmluZzp0Ll90cmFuc2l0aW9uaW5nfSksVC5jYWxsKGwscyxFLHtob3ZlcmVkOiExfSkscy54MD09PXMueDF8fHMueTA9PT1zLnkxP3MuX3RleHQ9IiI6cy5fdGV4dD1wP0k/IiI6dS5nZXRQdExhYmVsKHMpfHwiIjpmKHMscixFLGUsUyl8fCIiO3ZhciBBPWkuZW5zdXJlU2luZ2xlKGQsImciLCJzbGljZXRleHQiKSx6PWkuZW5zdXJlU2luZ2xlKEEsInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLE89aS5lbnN1cmVVbmlmb3JtRm9udFNpemUodCx1LmRldGVybWluZVRleHRGb250KEUscyxTLmZvbnQpKTt6LnRleHQocy5fdGV4dHx8IiAiKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsTD8iZW5kIjpDfHxwPyJzdGFydCI6Im1pZGRsZSIpLmNhbGwoYS5mb250LE8pLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCkscy50ZXh0QkI9YS5iQm94KHoubm9kZSgpKSxzLnRyYW5zZm9ybT1iKHMse2ZvbnRTaXplOk8uc2l6ZSxpc0hlYWRlcjpwfSkscy50cmFuc2Zvcm0uZm9udFNpemU9Ty5zaXplLHc/ei50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1NKHQsITEsQigpLFtnLG1dKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSl9fSkpOnouYXR0cigidHJhbnNmb3JtIixfKHMpKX0pKSxSfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vbGliIjo3NTAsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6Nzc0LCIuLi9zdW5idXJzdC9meCI6MTI3NSwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTI3NiwiLi4vc3VuYnVyc3QvcGxvdCI6MTI4MCwiLi9jb25zdGFudHMiOjEyOTksIi4vcGFydGl0aW9uIjoxMzA2LCIuL3N0eWxlIjoxMzA4LGQzOjE2OX1dLDEzMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidHJlZW1hcCIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOltdLGFuaW1hdGFibGU6ITAsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxtZXRhOnt9fX0seyIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTE3NiwiLi9hdHRyaWJ1dGVzIjoxMjk2LCIuL2Jhc2VfcGxvdCI6MTI5NywiLi9jYWxjIjoxMjk4LCIuL2RlZmF1bHRzIjoxMzAwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMzA0LCIuL2xheW91dF9kZWZhdWx0cyI6MTMwNSwiLi9wbG90IjoxMzA3LCIuL3N0eWxlIjoxMzA4fV0sMTMwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3RyZWVtYXBjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZHRyZWVtYXBjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMzA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJ0cmVlbWFwY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHRyZWVtYXBjb2xvcnMiKX19LHsiLi4vLi4vbGliIjo3NTAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzMDR9XSwxMzA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLWhpZXJhcmNoeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYT1yLmZsaXBYLG89ci5mbGlwWSxzPSJkaWNlLXNsaWNlIj09PXIucGFja2luZyxsPXIucGFkW28/ImJvdHRvbSI6InRvcCJdLGM9ci5wYWRbYT8icmlnaHQiOiJsZWZ0Il0sdT1yLnBhZFthPyJsZWZ0IjoicmlnaHQiXSxoPXIucGFkW28/InRvcCI6ImJvdHRvbSJdO3MmJihpPWMsYz1sLGw9aSxpPXUsdT1oLGg9aSk7dmFyIGY9bi50cmVlbWFwKCkudGlsZShmdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlInNxdWFyaWZ5IjpyZXR1cm4gbi50cmVlbWFwU3F1YXJpZnkucmF0aW8oZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBuLnRyZWVtYXBCaW5hcnk7Y2FzZSJkaWNlIjpyZXR1cm4gbi50cmVlbWFwRGljZTtjYXNlInNsaWNlIjpyZXR1cm4gbi50cmVlbWFwU2xpY2U7ZGVmYXVsdDpyZXR1cm4gbi50cmVlbWFwU2xpY2VEaWNlfX0oci5wYWNraW5nLHIuc3F1YXJpZnlyYXRpbykpLnBhZGRpbmdJbm5lcihyLnBhZC5pbm5lcikucGFkZGluZ0xlZnQoYykucGFkZGluZ1JpZ2h0KHUpLnBhZGRpbmdUb3AobCkucGFkZGluZ0JvdHRvbShoKS5zaXplKHM/W2VbMV0sZVswXV06ZSkodCk7cmV0dXJuKHN8fGF8fG8pJiZmdW5jdGlvbiB0KGUscixuKXt2YXIgaTtuLnN3YXBYWSYmKGk9ZS54MCxlLngwPWUueTAsZS55MD1pLGk9ZS54MSxlLngxPWUueTEsZS55MT1pKTtuLmZsaXBYJiYoaT1lLngwLGUueDA9clswXS1lLngxLGUueDE9clswXS1pKTtuLmZsaXBZJiYoaT1lLnkwLGUueTA9clsxXS1lLnkxLGUueTE9clsxXS1pKTt2YXIgYT1lLmNoaWxkcmVuO2lmKGEpZm9yKHZhciBvPTA7bzxhLmxlbmd0aDtvKyspdChhW29dLHIsbil9KGYsZSx7c3dhcFhZOnMsZmxpcFg6YSxmbGlwWTpvfSksZn19LHsiZDMtaGllcmFyY2h5IjoxNjF9XSwxMzA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2Jhci9jb25zdGFudHMiKS5URVhUUEFELHM9dCgiLi4vYmFyL3Bsb3QiKS50b01vdmVJbnNpZGVCYXIsbD10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IiksYz1sLnJlY29yZE1pblRleHRTaXplLHU9bC5jbGVhck1pblRleHRTaXplLGg9dCgiLi4vYmFyL3N0eWxlIikucmVzaXplVGV4dCxmPXQoIi4vY29uc3RhbnRzIikscD10KCIuL2RyYXdfZGVzY2VuZGFudHMiKSxkPXQoIi4vZHJhd19hbmNlc3RvcnMiKTtmdW5jdGlvbiBnKHQpe3JldHVybiBpLmlzSGllcmFyY2h5Um9vdCh0KT8iIjppLmdldFB0SWQodCl9ZnVuY3Rpb24gbSh0LGUscixsKXt2YXIgdT10Ll9mdWxsTGF5b3V0LGg9ZVswXSxtPWgudHJhY2Usdj1oLmhpZXJhcmNoeSx5PWkuZmluZEVudHJ5V2l0aExldmVsKHYsbS5sZXZlbCkseD1uLnNlbGVjdChyKSxiPXguc2VsZWN0QWxsKCJnLnBhdGhiYXIiKSxfPXguc2VsZWN0QWxsKCJnLnNsaWNlIik7aWYoIXkpcmV0dXJuIGIucmVtb3ZlKCksdm9pZCBfLnJlbW92ZSgpO3ZhciB3PWkuaXNIaWVyYXJjaHlSb290KHkpLFQ9IXUudW5pZm9ybXRleHQubW9kZSYmaS5oYXNUcmFuc2l0aW9uKGwpLGs9aS5nZXRNYXhEZXB0aChtKSxNPXUuX3NpemUsQT1tLmRvbWFpbixTPU0udyooQS54WzFdLUEueFswXSksRT1NLmgqKEEueVsxXS1BLnlbMF0pLEM9UyxMPW0ucGF0aGJhci50aGlja25lc3MsUD1tLm1hcmtlci5saW5lLndpZHRoK2YuZ2FwV2l0aFBhdGhiYXIsST1tLnBhdGhiYXIudmlzaWJsZT9tLnBhdGhiYXIuc2lkZS5pbmRleE9mKCJib3R0b20iKT4tMT9FK1A6LShMK1ApOjAsej17eDA6Qyx4MTpDLHkwOkkseTE6SStMfSxPPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1tLnRpbGluZy5wYWQsaT1mdW5jdGlvbih0KXtyZXR1cm4gdC1uPD1lLngwfSxhPWZ1bmN0aW9uKHQpe3JldHVybiB0K24+PWUueDF9LG89ZnVuY3Rpb24odCl7cmV0dXJuIHQtbjw9ZS55MH0scz1mdW5jdGlvbih0KXtyZXR1cm4gdCtuPj1lLnkxfTtyZXR1cm57eDA6aSh0LngwLW4pPzA6YSh0LngwLW4pP3JbMF06dC54MCx4MTppKHQueDErbik/MDphKHQueDErbik/clswXTp0LngxLHkwOm8odC55MC1uKT8wOnModC55MC1uKT9yWzFdOnQueTAseTE6byh0LnkxK24pPzA6cyh0LnkxK24pP3JbMV06dC55MX19LEQ9bnVsbCxSPXt9LEY9e30sQj1udWxsLE49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9SW2codCldOkZbZyh0KV19LGo9ZnVuY3Rpb24odCxlLHIsbil7aWYoZSlyZXR1cm4gUltnKHYpXXx8ejt2YXIgaT1GW20ubGV2ZWxdfHxyO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLmRlcHRoLXkuZGF0YS5kZXB0aDxrfSh0KT9PKHQsaSxuKTp7fX07aC5oYXNNdWx0aXBsZVJvb3RzJiZ3JiZrKyssbS5fbWF4RGVwdGg9ayxtLl9iYWNrZ3JvdW5kQ29sb3I9dS5wYXBlcl9iZ2NvbG9yLG0uX2VudHJ5RGVwdGg9eS5kYXRhLmRlcHRoLG0uX2F0Um9vdExldmVsPXc7dmFyIFU9LVMvMitNLmwrTS53KihBLnhbMV0rQS54WzBdKS8yLFY9LUUvMitNLnQrTS5oKigxLShBLnlbMV0rQS55WzBdKS8yKSxxPWZ1bmN0aW9uKHQpe3JldHVybiBVK3R9LEg9ZnVuY3Rpb24odCl7cmV0dXJuIFYrdH0sRz1IKDApLFk9cSgwKSxXPWZ1bmN0aW9uKHQpe3JldHVybiBZK3R9LFo9ZnVuY3Rpb24odCl7cmV0dXJuIEcrdH07ZnVuY3Rpb24gWCh0LGUpe3JldHVybiB0KyIsIitlfXZhciBKPVcoMCksSz1mdW5jdGlvbih0KXt0Lng9TWF0aC5tYXgoSix0LngpfSxRPW0ucGF0aGJhci5lZGdlc2hhcGUsJD1mdW5jdGlvbih0LGUpe3ZhciByPXQueDAsbj10LngxLGk9dC55MCxhPXQueTEsbD10LnRleHRCQixoPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09bS50ZXh0cG9zaXRpb24uaW5kZXhPZih0KX0sZj1oKCJib3R0b20iKSxwPWgoInRvcCIpfHxlLmlzSGVhZGVyJiYhZj8ic3RhcnQiOmY/ImVuZCI6Im1pZGRsZSIsZD1oKCJyaWdodCIpLGc9aCgibGVmdCIpfHxlLm9uUGF0aGJhcj8tMTpkPzE6MCx2PW0ubWFya2VyLnBhZDtpZihlLmlzSGVhZGVyKXtpZigocis9di5sLW8pPj0obi09di5yLW8pKXt2YXIgeT0ocituKS8yO3I9eSxuPXl9dmFyIHg7Zj9pPCh4PWEtdi5iKSYmeDxhJiYoaT14KTppPCh4PWkrdi50KSYmeDxhJiYoYT14KX12YXIgYj1zKHIsbixpLGEsbCx7aXNIb3Jpem9udGFsOiExLGNvbnN0cmFpbmVkOiEwLGFuZ2xlOjAsYW5jaG9yOnAsbGVmdFRvUmlnaHQ6Z30pO3JldHVybiBiLmZvbnRTaXplPWUuZm9udFNpemUsYi50YXJnZXRYPXEoYi50YXJnZXRYKSxiLnRhcmdldFk9SChiLnRhcmdldFkpLGlzTmFOKGIudGFyZ2V0WCl8fGlzTmFOKGIudGFyZ2V0WSk/e306KHIhPT1uJiZpIT09YSYmYyhtLnR5cGUsYix1KSx7c2NhbGU6Yi5zY2FsZSxyb3RhdGU6Yi5yb3RhdGUsdGV4dFg6Yi50ZXh0WCx0ZXh0WTpiLnRleHRZLGFuY2hvclg6Yi5hbmNob3JYLGFuY2hvclk6Yi5hbmNob3JZLHRhcmdldFg6Yi50YXJnZXRYLHRhcmdldFk6Yi50YXJnZXRZfSl9LHR0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49MCxpPXQ7IXImJm48azspbisrLChpPWkucGFyZW50KT9yPU4oaSxlKTpuPWs7cmV0dXJuIHJ8fHt9fSxldD1mdW5jdGlvbih0LGUscixpKXt2YXIgbyxzPU4odCxlKTtpZihzKW89cztlbHNlIGlmKGUpbz16O2Vsc2UgaWYoRClpZih0LnBhcmVudCl7dmFyIGw9Qnx8cjtsJiYhZT9vPU8odCxsLGkpOihvPXt9LGEuZXh0ZW5kRmxhdChvLHR0KHQsZSkpKX1lbHNlIG89dDtlbHNlIG89e307cmV0dXJuIG4uaW50ZXJwb2xhdGUobyx7eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0pfSxydD1mdW5jdGlvbih0LGUscixvKXt2YXIgcz1OKHQsZSksbD17fSxoPWoodCxlLHIsbyk7YS5leHRlbmRGbGF0KGwse3RyYW5zZm9ybTokKHt4MDpoLngwLHgxOmgueDEseTA6aC55MCx5MTpoLnkxLHRleHRCQjp0LnRleHRCQixfdGV4dDp0Ll90ZXh0fSx7aXNIZWFkZXI6aS5pc0hlYWRlcih0LG0pfSl9KSxzP2w9czp0LnBhcmVudCYmYS5leHRlbmRGbGF0KGwsdHQodCxlKSk7dmFyIGY9dC50cmFuc2Zvcm07cmV0dXJuIHQueDAhPT10LngxJiZ0LnkwIT09dC55MSYmYyhtLnR5cGUsZix1KSxuLmludGVycG9sYXRlKGwse3RyYW5zZm9ybTp7c2NhbGU6Zi5zY2FsZSxyb3RhdGU6Zi5yb3RhdGUsdGV4dFg6Zi50ZXh0WCx0ZXh0WTpmLnRleHRZLGFuY2hvclg6Zi5hbmNob3JYLGFuY2hvclk6Zi5hbmNob3JZLHRhcmdldFg6Zi50YXJnZXRYLHRhcmdldFk6Zi50YXJnZXRZfX0pfSxudD1mdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPWlbMF0scz1pWzFdO1Q/dC5leGl0KCkudHJhbnNpdGlvbigpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5zZWxlY3QoInBhdGguc3VyZmFjZSIpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgcj1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvPU4odCxlKTtpZihlKWE9ejtlbHNle3ZhciBzPU4oeSxlKTthPXM/Tyh0LHMsaSk6e319cmV0dXJuIG4uaW50ZXJwb2xhdGUobyxhKX0odCxlLDAsW28sc10pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYShyKHQpKX19KSksdC5zZWxlY3QoImcuc2xpY2V0ZXh0IikuYXR0cigib3BhY2l0eSIsMCl9KSkucmVtb3ZlKCk6dC5leGl0KCkucmVtb3ZlKCl9LGl0PWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhbnNmb3JtO3JldHVybiB0LngwIT09dC54MSYmdC55MCE9PXQueTEmJmMobS50eXBlLGUsdSksYS5nZXRUZXh0VHJhbnNmb3JtKHt0ZXh0WDplLnRleHRYLHRleHRZOmUudGV4dFksYW5jaG9yWDplLmFuY2hvclgsYW5jaG9yWTplLmFuY2hvclksdGFyZ2V0WDplLnRhcmdldFgsdGFyZ2V0WTplLnRhcmdldFksc2NhbGU6ZS5zY2FsZSxyb3RhdGU6ZS5yb3RhdGV9KX07VCYmKGIuZWFjaCgoZnVuY3Rpb24odCl7UltnKHQpXT17eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0sdC50cmFuc2Zvcm0mJihSW2codCldLnRyYW5zZm9ybT17dGV4dFg6dC50cmFuc2Zvcm0udGV4dFgsdGV4dFk6dC50cmFuc2Zvcm0udGV4dFksYW5jaG9yWDp0LnRyYW5zZm9ybS5hbmNob3JYLGFuY2hvclk6dC50cmFuc2Zvcm0uYW5jaG9yWSx0YXJnZXRYOnQudHJhbnNmb3JtLnRhcmdldFgsdGFyZ2V0WTp0LnRyYW5zZm9ybS50YXJnZXRZLHNjYWxlOnQudHJhbnNmb3JtLnNjYWxlLHJvdGF0ZTp0LnRyYW5zZm9ybS5yb3RhdGV9KX0pKSxfLmVhY2goKGZ1bmN0aW9uKHQpe0ZbZyh0KV09e3gwOnQueDAseDE6dC54MSx5MDp0LnkwLHkxOnQueTF9LHQudHJhbnNmb3JtJiYoRltnKHQpXS50cmFuc2Zvcm09e3RleHRYOnQudHJhbnNmb3JtLnRleHRYLHRleHRZOnQudHJhbnNmb3JtLnRleHRZLGFuY2hvclg6dC50cmFuc2Zvcm0uYW5jaG9yWCxhbmNob3JZOnQudHJhbnNmb3JtLmFuY2hvclksdGFyZ2V0WDp0LnRyYW5zZm9ybS50YXJnZXRYLHRhcmdldFk6dC50cmFuc2Zvcm0udGFyZ2V0WSxzY2FsZTp0LnRyYW5zZm9ybS5zY2FsZSxyb3RhdGU6dC50cmFuc2Zvcm0ucm90YXRlfSksIUQmJmkuaXNFbnRyeSh0KSYmKEQ9dCl9KSkpLEI9cCh0LGUseSxfLHt3aWR0aDpTLGhlaWdodDpFLHZpZXdYOnEsdmlld1k6SCxwYXRoU2xpY2U6ZnVuY3Rpb24odCl7dmFyIGU9cSh0LngwKSxyPXEodC54MSksbj1IKHQueTApLGk9SCh0LnkxKSxhPXItZSxvPWktbjtpZighYXx8IW8pcmV0dXJuIiI7cmV0dXJuIk0iK1goZSxuKzApKyJMIitYKHItMCxuKSsiTCIrWChyLGktMCkrIkwiK1goZSswLGkpKyJaIn0sdG9Nb3ZlSW5zaWRlU2xpY2U6JCxwcmV2RW50cnk6RCxtYWtlVXBkYXRlU2xpY2VJbnRlcnBvbGF0b3I6ZXQsbWFrZVVwZGF0ZVRleHRJbnRlcnBvbGF0b3I6cnQsaGFuZGxlU2xpY2VzRXhpdDpudCxoYXNUcmFuc2l0aW9uOlQsc3RyVHJhbnNmb3JtOml0fSksbS5wYXRoYmFyLnZpc2libGU/ZCh0LGUseSxiLHtiYXJEaWZZOkksd2lkdGg6QyxoZWlnaHQ6TCx2aWV3WDpXLHZpZXdZOloscGF0aFNsaWNlOmZ1bmN0aW9uKHQpe3ZhciBlPVcoTWF0aC5tYXgoTWF0aC5taW4odC54MCx0LngwKSwwKSkscj1XKE1hdGgubWluKE1hdGgubWF4KHQueDEsdC54MSksQykpLG49Wih0LnkwKSxpPVoodC55MSksYT1MLzIsbz17fSxzPXt9O28ueD1lLHMueD1yLG8ueT1zLnk9KG4raSkvMjt2YXIgbD17eDplLHk6bn0sYz17eDpyLHk6bn0sdT17eDpyLHk6aX0saD17eDplLHk6aX07cmV0dXJuIj4iPT09UT8obC54LT1hLGMueC09YSx1LngtPWEsaC54LT1hKToiLyI9PT1RPyh1LngtPWEsaC54LT1hLG8ueC09YS8yLHMueC09YS8yKToiXFwiPT09UT8obC54LT1hLGMueC09YSxvLngtPWEvMixzLngtPWEvMik6IjwiPT09USYmKG8ueC09YSxzLngtPWEpLEsobCksSyhoKSxLKG8pLEsoYyksSyh1KSxLKHMpLCJNIitYKGwueCxsLnkpKyJMIitYKGMueCxjLnkpKyJMIitYKHMueCxzLnkpKyJMIitYKHUueCx1LnkpKyJMIitYKGgueCxoLnkpKyJMIitYKG8ueCxvLnkpKyJaIn0sdG9Nb3ZlSW5zaWRlU2xpY2U6JCxtYWtlVXBkYXRlU2xpY2VJbnRlcnBvbGF0b3I6ZXQsbWFrZVVwZGF0ZVRleHRJbnRlcnBvbGF0b3I6cnQsaGFuZGxlU2xpY2VzRXhpdDpudCxoYXNUcmFuc2l0aW9uOlQsc3RyVHJhbnNmb3JtOml0fSk6Yi5yZW1vdmUoKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsPXQuX2Z1bGxMYXlvdXQsYz1sLl90cmVlbWFwbGF5ZXIsZj0hcjsodSgidHJlZW1hcCIsbCksKG89Yy5zZWxlY3RBbGwoImcudHJhY2UudHJlZW1hcCIpLmRhdGEoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRyYWNlIiwhMCkuY2xhc3NlZCgidHJlZW1hcCIsITApLG8ub3JkZXIoKSwhbC51bmlmb3JtdGV4dC5tb2RlJiZpLmhhc1RyYW5zaXRpb24ocikpPyhhJiYocz1hKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7cyYmcygpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7cyYmcygpfSkpLmVhY2goKGZ1bmN0aW9uKCl7Yy5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKChmdW5jdGlvbihlKXttKHQsZSx0aGlzLHIpfSkpfSkpKTooby5lYWNoKChmdW5jdGlvbihlKXttKHQsZSx0aGlzLHIpfSkpLGwudW5pZm9ybXRleHQubW9kZSYmaCh0LGwuX3RyZWVtYXBsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpLCJ0cmVlbWFwIikpO2YmJm8uZXhpdCgpLnJlbW92ZSgpfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vYmFyL2NvbnN0YW50cyI6ODk0LCIuLi9iYXIvcGxvdCI6OTAzLCIuLi9iYXIvc3R5bGUiOjkwNiwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTA4LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMjc2LCIuL2NvbnN0YW50cyI6MTI5OSwiLi9kcmF3X2FuY2VzdG9ycyI6MTMwMSwiLi9kcmF3X2Rlc2NlbmRhbnRzIjoxMzAyLGQzOjE2OX1dLDEzMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vc3VuYnVyc3QvaGVscGVycyIpLHM9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgcyxsLGM9KG58fHt9KS5ob3ZlcmVkLHU9ZS5kYXRhLmRhdGEsaD11LmksZj11LmNvbG9yLHA9by5pc0hpZXJhcmNoeVJvb3QoZSksZD0xO2lmKGMpcz1yLl9ob3ZlcmVkLm1hcmtlci5saW5lLmNvbG9yLGw9ci5faG92ZXJlZC5tYXJrZXIubGluZS53aWR0aDtlbHNlIGlmKHAmJiJyZ2JhKDAsMCwwLDApIj09PWYpZD0wLHM9InJnYmEoMCwwLDAsMCkiLGw9MDtlbHNlIGlmKHM9YS5jYXN0T3B0aW9uKHIsaCwibWFya2VyLmxpbmUuY29sb3IiKXx8aS5kZWZhdWx0TGluZSxsPWEuY2FzdE9wdGlvbihyLGgsIm1hcmtlci5saW5lLndpZHRoIil8fDAsIXIuX2hhc0NvbG9yc2NhbGUmJiFlLm9uUGF0aGJhcil7dmFyIGc9ci5tYXJrZXIuZGVwdGhmYWRlO2lmKGcpe3ZhciBtLHY9aS5jb21iaW5lKGkuYWRkT3BhY2l0eShyLl9iYWNrZ3JvdW5kQ29sb3IsLjc1KSxmKTtpZighMD09PWcpe3ZhciB5PW8uZ2V0TWF4RGVwdGgocik7bT1pc0Zpbml0ZSh5KT9vLmlzTGVhZihlKT8wOnIuX21heFZpc2libGVMYXllcnMtKGUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoKTplLmRhdGEuaGVpZ2h0KzF9ZWxzZSBtPWUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoLHIuX2F0Um9vdExldmVsfHxtKys7aWYobT4wKWZvcih2YXIgeD0wO3g8bTt4Kyspe3ZhciBiPS41KngvbTtmPWkuY29tYmluZShpLmFkZE9wYWNpdHkodixiKSxmKX19fXQuc3R5bGUoInN0cm9rZS13aWR0aCIsbCkuY2FsbChpLmZpbGwsZikuY2FsbChpLnN0cm9rZSxzKS5zdHlsZSgib3BhY2l0eSIsZCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll90cmVlbWFwbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTtzKHQsZSwidHJlZW1hcCIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLnRyYWNlO2Uuc3R5bGUoIm9wYWNpdHkiLHIub3BhY2l0eSksZS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwobCx0LHIse2hvdmVyZWQ6ITF9KX0pKX0pKX0sc3R5bGVPbmU6bH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9saWIiOjc1MCwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTA4LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMjc2LGQzOjE2OX1dLDEzMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eTpuLnkseDpuLngseDA6bi54MCx5MDpuLnkwLG5hbWU6aSh7fSxuLm5hbWUse30pLG9yaWVudGF0aW9uOmkoe30sbi5vcmllbnRhdGlvbix7fSksYmFuZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ3aWR0aCIsImNvdW50Il0sZGZsdDoid2lkdGgiLGVkaXRUeXBlOiJjYWxjIn0sc3Bhbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNvZnQiLCJoYXJkIiwibWFudWFsIl0sZGZsdDoic29mdCIsZWRpdFR5cGU6ImNhbGMifSxzcGFuOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHBvaW50czppKHt9LG4uYm94cG9pbnRzLHt9KSxqaXR0ZXI6aSh7fSxuLmppdHRlcix7fSkscG9pbnRwb3M6aSh7fSxuLnBvaW50cG9zLHt9KSx3aWR0aDppKHt9LG4ud2lkdGgse30pLG1hcmtlcjpuLm1hcmtlcix0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsYm94Ont2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMjUsZWRpdFR5cGU6InBsb3QifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sbWVhbmxpbmU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90aCIsInBvc2l0aXZlIiwibmVnYXRpdmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInZpb2xpbnMiLCJwb2ludHMiLCJrZGUiXSxkZmx0OiJ2aW9saW5zK3BvaW50cytrZGUiLGV4dHJhczpbImFsbCJdLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NDAsIi4uL2JveC9hdHRyaWJ1dGVzIjo5MTd9XSwxMzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL2JveC9jYWxjIiksbz10KCIuL2hlbHBlcnMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbCh0LGUscil7dmFyIGk9ZS5tYXgtZS5taW47aWYoIWkpcmV0dXJuIHQuYmFuZHdpZHRoP3QuYmFuZHdpZHRoOjA7aWYodC5iYW5kd2lkdGgpcmV0dXJuIE1hdGgubWF4KHQuYmFuZHdpZHRoLGkvMWU0KTt2YXIgYT1yLmxlbmd0aCxvPW4uc3RkZXYocixhLTEsZS5tZWFuKTtyZXR1cm4gTWF0aC5tYXgoZnVuY3Rpb24odCxlLHIpe3JldHVybiAxLjA1OSpNYXRoLm1pbihlLHIvMS4zNDkpKk1hdGgucG93KHQsLS4yKX0oYSxvLGUucTMtZS5xMSksaS8xMDApfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGEsbz10LnNwYW5tb2RlLGw9dC5zcGFufHxbXSxjPVtlLm1pbixlLm1heF0sdT1bZS5taW4tMipuLGUubWF4KzIqbl07ZnVuY3Rpb24gaChuKXt2YXIgaT1sW25dLGE9Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP3IucjJjKGkpOnIuZDJjKGksMCx0W2UudmFsTGV0dGVyKyJjYWxlbmRhciJdKTtyZXR1cm4gYT09PXM/dVtuXTphfXZhciBmPXt0eXBlOiJsaW5lYXIiLHJhbmdlOmE9InNvZnQiPT09bz91OiJoYXJkIj09PW8/YzpbaCgwKSxoKDEpXX07cmV0dXJuIGkuc2V0Q29udmVydChmKSxmLmNsZWFuUmFuZ2UoKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWEodCxlKTtpZihyWzBdLnQuZW1wdHkpcmV0dXJuIHI7Zm9yKHZhciBzPXQuX2Z1bGxMYXlvdXQsdT1pLmdldEZyb21JZCh0LGVbImgiPT09ZS5vcmllbnRhdGlvbj8ieGF4aXMiOiJ5YXhpcyJdKSxoPTEvMCxmPS0xLzAscD0wLGQ9MCxnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciBtPXJbZ10sdj1tLnB0cy5tYXAoby5leHRyYWN0VmFsKSx5PW0uYmFuZHdpZHRoPWwoZSxtLHYpLHg9bS5zcGFuPWMoZSxtLHUseSk7aWYobS5taW49PT1tLm1heCYmMD09PXkpeD1tLnNwYW49W20ubWluLG0ubWF4XSxtLmRlbnNpdHk9W3t2OjEsdDp4WzBdfV0sbS5iYW5kd2lkdGg9eSxwPU1hdGgubWF4KHAsMSk7ZWxzZXt2YXIgYj14WzFdLXhbMF0sXz1NYXRoLmNlaWwoYi8oeS8zKSksdz1iL187aWYoIWlzRmluaXRlKHcpfHwhaXNGaW5pdGUoXykpcmV0dXJuIG4uZXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29tcHV0aW5nIHRoZSB2aW9saW4gc3BhbiIpLHJbMF0udC5lbXB0eT0hMCxyO3ZhciBUPW8ubWFrZUtERShtLGUsdik7bS5kZW5zaXR5PW5ldyBBcnJheShfKTtmb3IodmFyIGs9MCxNPXhbMF07TTx4WzFdK3cvMjtrKyssTSs9dyl7dmFyIEE9VChNKTttLmRlbnNpdHlba109e3Y6QSx0Ok19LHA9TWF0aC5tYXgocCxBKX19ZD1NYXRoLm1heChkLHYubGVuZ3RoKSxoPU1hdGgubWluKGgseFswXSksZj1NYXRoLm1heChmLHhbMV0pfXZhciBTPWkuZmluZEV4dHJlbWVzKHUsW2gsZl0se3BhZGRlZDohMH0pO2lmKGUuX2V4dHJlbWVzW3UuX2lkXT1TLGUud2lkdGgpclswXS50Lm1heEtERT1wO2Vsc2V7dmFyIEU9cy5fdmlvbGluU2NhbGVHcm91cFN0YXRzLEM9ZS5zY2FsZWdyb3VwLEw9RVtDXTtMPyhMLm1heEtERT1NYXRoLm1heChMLm1heEtERSxwKSxMLm1heENvdW50PU1hdGgubWF4KEwubWF4Q291bnQsZCkpOkVbQ109e21heEtERTpwLG1heENvdW50OmR9fXJldHVybiByWzBdLnQubGFiZWxzLmtkZT1uLl8odCwia2RlOiIpLHJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vLi4vbGliIjo3NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uL2JveC9jYWxjIjo5MTgsIi4vaGVscGVycyI6MTMxM31dLDEzMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiKS5zZXRQb3NpdGlvbk9mZnNldCxpPVsidiIsImgiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxhPWUueGF4aXMsbz1lLnlheGlzLHM9MDtzPGkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPWlbc10sYz0iaCI9PT1sP286YSx1PVtdLGg9MDtoPHIubGVuZ3RoO2grKyl7dmFyIGY9cltoXSxwPWZbMF0udCxkPWZbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fCJ2aW9saW4iIT09ZC50eXBlfHxwLmVtcHR5fHxkLm9yaWVudGF0aW9uIT09bHx8ZC54YXhpcyE9PWEuX2lkfHxkLnlheGlzIT09by5faWR8fHUucHVzaChoKX1uKCJ2aW9saW4iLHQsdSxjKX19fSx7Ii4uL2JveC9jcm9zc190cmFjZV9jYWxjIjo5MTl9XSwxMzEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vYm94L2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWZ1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxvLHIsaSl9aWYoYS5oYW5kbGVTYW1wbGVEZWZhdWx0cyh0LGUsbCxzKSwhMSE9PWUudmlzaWJsZSl7bCgiYmFuZHdpZHRoIiksbCgic2lkZSIpLGwoIndpZHRoIil8fChsKCJzY2FsZWdyb3VwIixlLm5hbWUpLGwoInNjYWxlbW9kZSIpKTt2YXIgdSxoPWwoInNwYW4iKTtBcnJheS5pc0FycmF5KGgpJiYodT0ibWFudWFsIiksbCgic3Bhbm1vZGUiLHUpO3ZhciBmPWwoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxwPWwoImxpbmUud2lkdGgiKSxkPWwoImZpbGxjb2xvciIsaS5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpO2EuaGFuZGxlUG9pbnRzRGVmYXVsdHModCxlLGwse3ByZWZpeDoiIn0pO3ZhciBnPWMoImJveC53aWR0aCIpLG09YygiYm94LmZpbGxjb2xvciIsZCksdj1jKCJib3gubGluZS5jb2xvciIsZikseT1jKCJib3gubGluZS53aWR0aCIscCk7bCgiYm94LnZpc2libGUiLEJvb2xlYW4oZ3x8bXx8dnx8eSkpfHwoZS5ib3g9e3Zpc2libGU6ITF9KTt2YXIgeD1jKCJtZWFubGluZS5jb2xvciIsZiksYj1jKCJtZWFubGluZS53aWR0aCIscCk7bCgibWVhbmxpbmUudmlzaWJsZSIsQm9vbGVhbih4fHxiKSl8fChlLm1lYW5saW5lPXt2aXNpYmxlOiExfSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2xpYiI6NzUwLCIuLi9ib3gvZGVmYXVsdHMiOjkyMCwiLi9hdHRyaWJ1dGVzIjoxMzA5fV0sMTMxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGguc3FydCgyKk1hdGguUEkpKk1hdGguZXhwKC0uNSp0KnQpfTtyLm1ha2VLREU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIubGVuZ3RoLGE9aSxvPXQuYmFuZHdpZHRoLHM9MS8obipvKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsaT0wO2k8bjtpKyspZSs9YSgodC1yW2ldKS9vKTtyZXR1cm4gcyplfX0sci5nZXRQb3NpdGlvbk9uS2RlUGF0aD1mdW5jdGlvbih0LGUscil7dmFyIGksYTsiaCI9PT1lLm9yaWVudGF0aW9uPyhpPSJ5IixhPSJ4Iik6KGk9IngiLGE9InkiKTt2YXIgbz1uLmZpbmRQb2ludE9uUGF0aCh0LnBhdGgscixhLHtwYXRoTGVuZ3RoOnQucGF0aExlbmd0aH0pLHM9dC5wb3NDZW50ZXJQeCxsPW9baV07cmV0dXJuW2wsImJvdGgiPT09ZS5zaWRlPzIqcy1sOnNdfSxyLmdldEtkZVZhbHVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LnB0cy5tYXAoci5leHRyYWN0VmFsKTtyZXR1cm4gci5tYWtlS0RFKHQsZSxpKShuKS90LnBvc0RlbnNpdHlTY2FsZX0sci5leHRyYWN0VmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZ9fSx7Ii4uLy4uL2xpYiI6NzUwfV0sMTMxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9ib3gvaG92ZXIiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe3ZhciBjLHUsaD10LmNkLGY9aFswXS50cmFjZSxwPWYuaG92ZXJvbixkPS0xIT09cC5pbmRleE9mKCJ2aW9saW5zIiksZz0tMSE9PXAuaW5kZXhPZigia2RlIiksbT1bXTtpZihkfHxnKXt2YXIgdj1hLmhvdmVyT25Cb3hlcyh0LGUscixzKTtpZihnJiZ2Lmxlbmd0aD4wKXt2YXIgeSx4LGIsXyx3LFQ9dC54YSxrPXQueWE7ImgiPT09Zi5vcmllbnRhdGlvbj8odz1lLHk9InkiLGI9ayx4PSJ4IixfPVQpOih3PXIseT0ieCIsYj1ULHg9InkiLF89ayk7dmFyIE09aFt0LmluZGV4XTtpZih3Pj1NLnNwYW5bMF0mJnc8PU0uc3BhblsxXSl7dmFyIEE9bi5leHRlbmRGbGF0KHt9LHQpLFM9Xy5jMnAodywhMCksRT1vLmdldEtkZVZhbHVlKE0sZix3KSxDPW8uZ2V0UG9zaXRpb25PbktkZVBhdGgoTSxmLFMpLEw9Yi5fb2Zmc2V0LFA9Yi5fbGVuZ3RoO0FbeSsiMCJdPUNbMF0sQVt5KyIxIl09Q1sxXSxBW3grIjAiXT1BW3grIjEiXT1TLEFbeCsiTGFiZWwiXT14KyI6ICIraS5ob3ZlckxhYmVsVGV4dChfLHcpKyIsICIraFswXS50LmxhYmVscy5rZGUrIiAiK0UudG9GaXhlZCgzKSxBLnNwaWtlRGlzdGFuY2U9dlswXS5zcGlrZURpc3RhbmNlO3ZhciBJPXkrIlNwaWtlIjtBW0ldPXZbMF1bSV0sdlswXS5zcGlrZURpc3RhbmNlPXZvaWQgMCx2WzBdW0ldPXZvaWQgMCxBLmhvdmVydGVtcGxhdGU9ITEsbS5wdXNoKEEpLCh1PXtzdHJva2U6dC5jb2xvcn0pW3krIjEiXT1uLmNvbnN0cmFpbihMK0NbMF0sTCxMK1ApLHVbeSsiMiJdPW4uY29uc3RyYWluKEwrQ1sxXSxMLEwrUCksdVt4KyIxIl09dVt4KyIyIl09Xy5fb2Zmc2V0K1N9fWQmJihtPW0uY29uY2F0KHYpKX0tMSE9PXAuaW5kZXhPZigicG9pbnRzIikmJihjPWEuaG92ZXJPblBvaW50cyh0LGUscikpO3ZhciB6PWwuc2VsZWN0QWxsKCIudmlvbGlubGluZS0iK2YudWlkKS5kYXRhKHU/WzBdOltdKTtyZXR1cm4gei5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoInZpb2xpbmxpbmUtIitmLnVpZCwhMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwxLjUpLHouZXhpdCgpLnJlbW92ZSgpLHouYXR0cih1KSwiY2xvc2VzdCI9PT1zP2M/W2NdOm06Yz8obS5wdXNoKGMpLG0pOm19fSx7Ii4uLy4uL2xpYiI6NzUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuLi9ib3gvaG92ZXIiOjkyMiwiLi9oZWxwZXJzIjoxMzEzfV0sMTMxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuLi9ib3gvZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLHN0eWxlT25TZWxlY3Q6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLHNlbGVjdFBvaW50czp0KCIuLi9ib3gvc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InZpb2xpbiIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInN5bWJvbHMiLCJvcmllbnRlZCIsImJveC12aW9saW4iLCJzaG93TGVnZW5kIiwidmlvbGluTGF5b3V0Iiwiem9vbVNjYWxlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4MTIsIi4uL2JveC9kZWZhdWx0cyI6OTIwLCIuLi9ib3gvc2VsZWN0Ijo5MjcsIi4uL3NjYXR0ZXIvc3R5bGUiOjExODIsIi4vYXR0cmlidXRlcyI6MTMwOSwiLi9jYWxjIjoxMzEwLCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjEzMTEsIi4vZGVmYXVsdHMiOjEzMTIsIi4vaG92ZXIiOjEzMTQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzMTYsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMzE3LCIuL3Bsb3QiOjEzMTgsIi4vc3R5bGUiOjEzMTl9XSwxMzE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2JveC9sYXlvdXRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3Zpb2xpbm1vZGU6aSh7fSxuLmJveG1vZGUse30pLHZpb2xpbmdhcDppKHt9LG4uYm94Z2FwLHt9KSx2aW9saW5ncm91cGdhcDppKHt9LG4uYm94Z3JvdXBnYXAse30pfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIjo5MjR9XSwxMzE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vYm94L2xheW91dF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YS5fc3VwcGx5KHQsZSxyLChmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSksInZpb2xpbiIpfX0seyIuLi8uLi9saWIiOjc1MCwiLi4vYm94L2xheW91dF9kZWZhdWx0cyI6OTI1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMzE2fV0sMTMxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uL2JveC9wbG90Iikscz10KCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9dC5fZnVsbExheW91dCxoPWUueGF4aXMsZj1lLnlheGlzO2Z1bmN0aW9uIHAodCl7dmFyIGU9cyh0LHt4YXhpczpoLHlheGlzOmYsY29ubmVjdEdhcHM6ITAsYmFzZVRvbGVyYW5jZTouNzUsc2hhcGU6InNwbGluZSIsc2ltcGxpZnk6ITAsbGluZWFyaXplZDohMH0pO3JldHVybiBhLnNtb290aG9wZW4oZVswXSwxKX1pLm1ha2VUcmFjZUdyb3VwcyhjLHIsInRyYWNlIHZpb2xpbnMiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXRbMF0scz1hLnQsYz1hLnRyYWNlO2lmKCEwIT09Yy52aXNpYmxlfHxzLmVtcHR5KXIucmVtb3ZlKCk7ZWxzZXt2YXIgZD1zLmJQb3MsZz1zLmJkUG9zLG09ZVtzLnZhbExldHRlcisiYXhpcyJdLHY9ZVtzLnBvc0xldHRlcisiYXhpcyJdLHk9ImJvdGgiPT09Yy5zaWRlLHg9eXx8InBvc2l0aXZlIj09PWMuc2lkZSxiPXl8fCJuZWdhdGl2ZSI9PT1jLnNpZGUsXz1yLnNlbGVjdEFsbCgicGF0aC52aW9saW4iKS5kYXRhKGkuaWRlbnRpdHkpO18uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImNsYXNzIiwidmlvbGluIiksXy5leGl0KCkucmVtb3ZlKCksXy5lYWNoKChmdW5jdGlvbih0KXt2YXIgZSxyLGksYSxvLGwsaCxmLF89bi5zZWxlY3QodGhpcyksdz10LmRlbnNpdHksVD13Lmxlbmd0aCxrPXYuYzJsKHQucG9zK2QsITApLE09di5sMnAoayk7aWYoYy53aWR0aCllPXMubWF4S0RFL2c7ZWxzZXt2YXIgQT11Ll92aW9saW5TY2FsZUdyb3VwU3RhdHNbYy5zY2FsZWdyb3VwXTtlPSJjb3VudCI9PT1jLnNjYWxlbW9kZT9BLm1heEtERS9nKihBLm1heENvdW50L3QucHRzLmxlbmd0aCk6QS5tYXhLREUvZ31pZih4KXtmb3IoaD1uZXcgQXJyYXkoVCksbz0wO288VDtvKyspKGY9aFtvXT17fSlbcy5wb3NMZXR0ZXJdPWsrd1tvXS52L2UsZltzLnZhbExldHRlcl09bS5jMmwod1tvXS50LCEwKTtyPXAoaCl9aWYoYil7Zm9yKGg9bmV3IEFycmF5KFQpLGw9MCxvPVQtMTtsPFQ7bCsrLG8tLSkoZj1oW2xdPXt9KVtzLnBvc0xldHRlcl09ay13W29dLnYvZSxmW3MudmFsTGV0dGVyXT1tLmMybCh3W29dLnQsITApO2k9cChoKX1pZih5KWE9cisiTCIraS5zdWJzdHIoMSkrIloiO2Vsc2V7dmFyIFM9W00sbS5jMnAod1swXS50KV0sRT1bTSxtLmMycCh3W1QtMV0udCldOyJoIj09PWMub3JpZW50YXRpb24mJihTLnJldmVyc2UoKSxFLnJldmVyc2UoKSksYT14PyJNIitTKyJMIityLnN1YnN0cigxKSsiTCIrRToiTSIrRSsiTCIraS5zdWJzdHIoMSkrIkwiK1N9Xy5hdHRyKCJkIixhKSx0LnBvc0NlbnRlclB4PU0sdC5wb3NEZW5zaXR5U2NhbGU9ZSpnLHQucGF0aD1fLm5vZGUoKSx0LnBhdGhMZW5ndGg9dC5wYXRoLmdldFRvdGFsTGVuZ3RoKCkvKHk/MjoxKX0pKTt2YXIgdyxULGssTT1jLmJveCxBPU0ud2lkdGgsUz0oTS5saW5lfHx7fSkud2lkdGg7eT8odz1nKkEsVD0wKTp4Pyh3PVswLGcqQS8yXSxUPVMqe3g6MSx5Oi0xfVtzLnBvc0xldHRlcl0pOih3PVtnKkEvMiwwXSxUPVMqe3g6LTEseToxfVtzLnBvc0xldHRlcl0pLG8ucGxvdEJveEFuZFdoaXNrZXJzKHIse3Bvczp2LHZhbDptfSxjLHtiUG9zOmQsYmRQb3M6dyxiUG9zUHhPZmZzZXQ6VH0pLG8ucGxvdEJveE1lYW4ocix7cG9zOnYsdmFsOm19LGMse2JQb3M6ZCxiZFBvczp3LGJQb3NQeE9mZnNldDpUfSksIWMuYm94LnZpc2libGUmJmMubWVhbmxpbmUudmlzaWJsZSYmKGs9aS5pZGVudGl0eSk7dmFyIEU9ci5zZWxlY3RBbGwoInBhdGgubWVhbmxpbmUiKS5kYXRhKGt8fFtdKTtFLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtZWFubGluZSIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIiksRS5leGl0KCkucmVtb3ZlKCksRS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1tLmMycCh0Lm1lYW4sITApLHI9bC5nZXRQb3NpdGlvbk9uS2RlUGF0aCh0LGMsZSk7bi5zZWxlY3QodGhpcykuYXR0cigiZCIsImgiPT09Yy5vcmllbnRhdGlvbj8iTSIrZSsiLCIrclswXSsiViIrclsxXToiTSIrclswXSsiLCIrZSsiSCIrclsxXSl9KSksby5wbG90UG9pbnRzKHIse3g6aCx5OmZ9LGMscyl9fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vbGliIjo3NTAsIi4uL2JveC9wbG90Ijo5MjYsIi4uL3NjYXR0ZXIvbGluZV9wb2ludHMiOjExNzIsIi4vaGVscGVycyI6MTMxMyxkMzoxNjl9XSwxMzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVQb2ludHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy50cmFjZS52aW9saW5zIik7ZS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSksZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykscz1yLmJveHx8e30sbD1zLmxpbmV8fHt9LGM9ci5tZWFubGluZXx8e30sdT1jLndpZHRoO28uc2VsZWN0QWxsKCJwYXRoLnZpb2xpbiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIubGluZS53aWR0aCsicHgiKS5jYWxsKGkuc3Ryb2tlLHIubGluZS5jb2xvcikuY2FsbChpLmZpbGwsci5maWxsY29sb3IpLG8uc2VsZWN0QWxsKCJwYXRoLmJveCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGwud2lkdGgrInB4IikuY2FsbChpLnN0cm9rZSxsLmNvbG9yKS5jYWxsKGkuZmlsbCxzLmZpbGxjb2xvcik7dmFyIGg9eyJzdHJva2Utd2lkdGgiOnUrInB4Iiwic3Ryb2tlLWRhc2hhcnJheSI6Mip1KyJweCwiK3UrInB4In07by5zZWxlY3RBbGwoInBhdGgubWVhbiIpLnN0eWxlKGgpLmNhbGwoaS5zdHJva2UsYy5jb2xvciksby5zZWxlY3RBbGwoInBhdGgubWVhbmxpbmUiKS5zdHlsZShoKS5jYWxsKGkuc3Ryb2tlLGMuY29sb3IpLGEobyxyLHQpfSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uL3NjYXR0ZXIvc3R5bGUiOjExODIsZDM6MTY5fV0sMTMyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vaXNvc3VyZmFjZS9hdHRyaWJ1dGVzIiksYT10KCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGM9ZS5leHBvcnRzPWwocyh7eDppLngseTppLnksejppLnosdmFsdWU6aS52YWx1ZSxpc29taW46aS5pc29taW4saXNvbWF4OmkuaXNvbWF4LHN1cmZhY2U6aS5zdXJmYWNlLHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sc2xpY2VzOmkuc2xpY2VzLGNhcHM6aS5jYXBzLHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOmkuaG92ZXJ0ZW1wbGF0ZX0sbigiIix7Y29sb3JBdHRyOiJgdmFsdWVgIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOmkuY29sb3JiYXIsb3BhY2l0eTppLm9wYWNpdHksb3BhY2l0eXNjYWxlOmEub3BhY2l0eXNjYWxlLGxpZ2h0cG9zaXRpb246aS5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOmkubGlnaHRpbmcsZmxhdHNoYWRpbmc6aS5mbGF0c2hhZGluZyxjb250b3VyOmkuY29udG91cixob3ZlcmluZm86cyh7fSxvLmhvdmVyaW5mbyksc2hvd2xlZ2VuZDpzKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSksImNhbGMiLCJuZXN0ZWQiKTtjLnguZWRpdFR5cGU9Yy55LmVkaXRUeXBlPWMuei5lZGl0VHlwZT1jLnZhbHVlLmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIixjLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2xpYi9leHRlbmQiOjc0MCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzgxLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uL2lzb3N1cmZhY2UvYXR0cmlidXRlcyI6MTA5NCwiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIjoxMjgyfV0sMTMyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1tZXNoM2QiKSxpPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxzPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLGw9dCgiLi4vaXNvc3VyZmFjZS9jb252ZXJ0IikuZmluZE5lYXJlc3RPbkF4aXMsYz10KCIuLi9pc29zdXJmYWNlL2NvbnZlcnQiKS5nZW5lcmF0ZUlzb01lc2hlcztmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgaD11LnByb3RvdHlwZTtoLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5fbWVzaFhbZV0sbj10aGlzLmRhdGEuX21lc2hZW2VdLGk9dGhpcy5kYXRhLl9tZXNoWltlXSxhPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgscz1sKHIsdGhpcy5kYXRhLl9YcykuaWQsYz1sKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1sKGksdGhpcy5kYXRhLl9acykuaWQsaD10LmluZGV4PXUrbypjK28qYSpzO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX21lc2hYW2hdLHRoaXMuZGF0YS5fbWVzaFlbaF0sdGhpcy5kYXRhLl9tZXNoWltoXSx0aGlzLmRhdGEuX3ZhbHVlW2hdXTt2YXIgZj10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShmKSYmdm9pZCAwIT09ZltoXT90LnRleHRMYWJlbD1mW2hdOmYmJih0LnRleHRMYWJlbD1mKSwhMH19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDtmdW5jdGlvbiBuKHQsZSxyLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSkpfXRoaXMuZGF0YT1jKHQpO3ZhciBsPXtwb3NpdGlvbnM6cyhuKHIueGF4aXMsdC5fbWVzaFgsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll9tZXNoWSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksbihyLnpheGlzLHQuX21lc2haLGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6cyh0Ll9tZXNoSSx0Ll9tZXNoSix0Ll9tZXNoSyksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfSx1PW8odCk7bC52ZXJ0ZXhJbnRlbnNpdHk9dC5fbWVzaEludGVuc2l0eSxsLnZlcnRleEludGVuc2l0eUJvdW5kcz1bdS5taW4sdS5tYXhdLGwuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKGwpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyB1KHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjI3LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NDYsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc3MywiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo4NTIsIi4uL2lzb3N1cmZhY2UvY29udmVydCI6MTA5NiwiZ2wtbWVzaDNkIjoyOTJ9XSwxMzIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi9pc29zdXJmYWNlL2RlZmF1bHRzIikuc3VwcGx5SXNvRGVmYXVsdHMsbz10KCIuLi9zdXJmYWNlL2RlZmF1bHRzIikub3BhY2l0eXNjYWxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKHQsZSxyLHMsbCksbyh0LGUscyxsKX19LHsiLi4vLi4vbGliIjo3NTAsIi4uL2lzb3N1cmZhY2UvZGVmYXVsdHMiOjEwOTcsIi4uL3N1cmZhY2UvZGVmYXVsdHMiOjEyODUsIi4vYXR0cmlidXRlcyI6MTMyMH1dLDEzMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4uL2lzb3N1cmZhY2UvY2FsYyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LHBsb3Q6dCgiLi9jb252ZXJ0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InZvbHVtZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg0MSwiLi4vaXNvc3VyZmFjZS9jYWxjIjoxMDk1LCIuL2F0dHJpYnV0ZXMiOjEzMjAsIi4vY29udmVydCI6MTMyMSwiLi9kZWZhdWx0cyI6MTMyMn1dLDEzMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLmxpbmUsYT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGw9dCgiLi9jb25zdGFudHMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2Z1bmN0aW9uIGgodCl7cmV0dXJue21hcmtlcjp7Y29sb3I6Yyh7fSxuLm1hcmtlci5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksbGluZTp7Y29sb3I6Yyh7fSxuLm1hcmtlci5saW5lLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOiJzdHlsZSJ9KSx3aWR0aDpjKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9fWUuZXhwb3J0cz17bWVhc3VyZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LGJhc2U6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSx4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHhwZXJpb2Q6bi54cGVyaW9kLHlwZXJpb2Q6bi55cGVyaW9kLHhwZXJpb2QwOm4ueHBlcmlvZDAseXBlcmlvZDA6bi55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50Om4ueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50Om4ueXBlcmlvZGFsaWdubWVudCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOmwuZXZlbnREYXRhS2V5c30pLGhvdmVyaW5mbzpjKHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbIm5hbWUiLCJ4IiwieSIsInRleHQiLCJpbml0aWFsIiwiZGVsdGEiLCJmaW5hbCJdfSksdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsImluaXRpYWwiLCJkZWx0YSIsImZpbmFsIl0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx0ZXh0dGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpsLmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiXSl9KSx0ZXh0Om4udGV4dCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24saW5zaWRldGV4dGFuY2hvcjpuLmluc2lkZXRleHRhbmNob3IsdGV4dGFuZ2xlOm4udGV4dGFuZ2xlLHRleHRmb250Om4udGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6bi5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6bi5vdXRzaWRldGV4dGZvbnQsY29uc3RyYWludGV4dDpuLmNvbnN0cmFpbnRleHQsY2xpcG9uYXhpczpuLmNsaXBvbmF4aXMsb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixvZmZzZXQ6bi5vZmZzZXQsd2lkdGg6bi53aWR0aCxpbmNyZWFzaW5nOmgoKSxkZWNyZWFzaW5nOmgoKSx0b3RhbHM6aCgpLGNvbm5lY3Rvcjp7bGluZTp7Y29sb3I6Yyh7fSxpLmNvbG9yLHtkZmx0OnUuZGVmYXVsdExpbmV9KSx3aWR0aDpjKHt9LGkud2lkdGgse2VkaXRUeXBlOiJwbG90In0pLGRhc2g6aS5kYXNoLGVkaXRUeXBlOiJwbG90In0sbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3Bhbm5pbmciLCJiZXR3ZWVuIl0sZGZsdDoiYmV0d2VlbiIsZWRpdFR5cGU6InBsb3QifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4uYWxpZ25tZW50Z3JvdXB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYxNSwiLi4vLi4vbGliL2V4dGVuZCI6NzQwLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3OTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg3NywiLi4vYmFyL2F0dHJpYnV0ZXMiOjg5MiwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTU4LCIuL2NvbnN0YW50cyI6MTMyNn1dLDEzMjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxhPXQoIi4uLy4uL2xpYiIpLm1lcmdlQXJyYXksbz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCl7cmV0dXJuImEiPT09dHx8ImFic29sdXRlIj09PXR9ZnVuY3Rpb24gYyh0KXtyZXR1cm4idCI9PT10fHwidG90YWwiPT09dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGgsZixwPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxkPW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKTsiaCI9PT1lLm9yaWVudGF0aW9uPyhyPXAubWFrZUNhbGNkYXRhKGUsIngiKSxoPWQubWFrZUNhbGNkYXRhKGUsInkiKSx1PWkoZSxkLCJ5IixoKSxmPSEhZS55cGVyaW9kYWxpZ25tZW50KToocj1kLm1ha2VDYWxjZGF0YShlLCJ5IiksaD1wLm1ha2VDYWxjZGF0YShlLCJ4IiksdT1pKGUscCwieCIsaCksZj0hIWUueHBlcmlvZGFsaWdubWVudCk7Zm9yKHZhciBnLG09TWF0aC5taW4odS5sZW5ndGgsci5sZW5ndGgpLHY9bmV3IEFycmF5KG0pLHk9MCx4PSExLGI9MDtiPG07YisrKXt2YXIgXz1yW2JdfHwwLHc9ITE7KHJbYl0hPT1zfHxjKGUubWVhc3VyZVtiXSl8fGwoZS5tZWFzdXJlW2JdKSkmJmIrMTxtJiYocltiKzFdIT09c3x8YyhlLm1lYXN1cmVbYisxXSl8fGwoZS5tZWFzdXJlW2IrMV0pKSYmKHc9ITApO3ZhciBUPXZbYl09e2k6YixwOnVbYl0sczpfLHJhd1M6XyxjTmV4dDp3fTtsKGUubWVhc3VyZVtiXSk/KHk9VC5zLFQuaXNTdW09ITAsVC5kaXI9InRvdGFscyIsVC5zPXkpOmMoZS5tZWFzdXJlW2JdKT8oVC5pc1N1bT0hMCxULmRpcj0idG90YWxzIixULnM9eSk6KFQuaXNTdW09ITEsVC5kaXI9VC5yYXdTPDA/ImRlY3JlYXNpbmciOiJpbmNyZWFzaW5nIixnPVQucyxULnM9eStnLHkrPWcpLCJ0b3RhbHMiPT09VC5kaXImJih4PSEwKSxmJiYodltiXS5vcmlnX3A9aFtiXSksZS5pZHMmJihULmlkPVN0cmluZyhlLmlkc1tiXSkpLFQudj0oZS5iYXNlfHwwKSt5fXJldHVybiB2Lmxlbmd0aCYmKHZbMF0uaGFzVG90YWxzPXgpLGEoZS50ZXh0LHYsInR4IiksYShlLmhvdmVydGV4dCx2LCJodHgiKSxvKHYsZSksdn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzI1LCIuLi8uLi9saWIiOjc1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6Nzk2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTYwfV0sMTMyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2V2ZW50RGF0YUtleXM6WyJpbml0aWFsIiwiZGVsdGEiLCJmaW5hbCJdfX0se31dLDEzMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiKS5zZXRHcm91cFBvc2l0aW9ucztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9dC5fZnVsbExheW91dCxvPXQuX2Z1bGxEYXRhLHM9dC5jYWxjZGF0YSxsPWUueGF4aXMsYz1lLnlheGlzLHU9W10saD1bXSxmPVtdO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBwPW9baV07ITA9PT1wLnZpc2libGUmJnAueGF4aXM9PT1sLl9pZCYmcC55YXhpcz09PWMuX2lkJiYid2F0ZXJmYWxsIj09PXAudHlwZSYmKHI9c1tpXSwiaCI9PT1wLm9yaWVudGF0aW9uP2YucHVzaChyKTpoLnB1c2gociksdS5wdXNoKHIpKX12YXIgZD17bW9kZTphLndhdGVyZmFsbG1vZGUsbm9ybTphLndhdGVyZmFsbG5vcm0sZ2FwOmEud2F0ZXJmYWxsZ2FwLGdyb3VwZ2FwOmEud2F0ZXJmYWxsZ3JvdXBnYXB9O2ZvcihuKHQsbCxjLGgsZCksbih0LGMsbCxmLGQpLGk9MDtpPHUubGVuZ3RoO2krKyl7cj11W2ldO2Zvcih2YXIgZz0wO2c8ci5sZW5ndGg7ZysrKXt2YXIgbT1yW2ddOyExPT09bS5pc1N1bSYmKG0uczArPTA9PT1nPzA6cltnLTFdLnMpLGcrMTxyLmxlbmd0aCYmKHJbZ10ubmV4dFAwPXJbZysxXS5wMCxyW2ddLm5leHRTMD1yW2crMV0uczApfX19fSx7Ii4uL2Jhci9jcm9zc190cmFjZV9jYWxjIjo4OTV9XSwxMzI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlR3JvdXBpbmdEZWZhdWx0cyxhPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQsbz10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksdT10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxoPXUuSU5DUkVBU0lORy5DT0xPUixmPXUuREVDUkVBU0lORy5DT0xPUjtmdW5jdGlvbiBwKHQsZSxyKXt0KGUrIi5tYXJrZXIuY29sb3IiLHIpLHQoZSsiLm1hcmtlci5saW5lLmNvbG9yIixjLmRlZmF1bHRMaW5lKSx0KGUrIi5tYXJrZXIubGluZS53aWR0aCIpfWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsaSl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbCxyLGkpfWlmKG8odCxlLGksYykpe3ModCxlLGksYyksYygibWVhc3VyZSIpLGMoIm9yaWVudGF0aW9uIixlLngmJiFlLnk/ImgiOiJ2IiksYygiYmFzZSIpLGMoIm9mZnNldCIpLGMoIndpZHRoIiksYygidGV4dCIpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKTt2YXIgdT1jKCJ0ZXh0cG9zaXRpb24iKTtpZihhKHQsZSxpLGMsdSx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITAsbW9kdWxlSGFzQ2xpcG9uYXhpczohMCxtb2R1bGVIYXNUZXh0YW5nbGU6ITAsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiEwfSksIm5vbmUiIT09ZS50ZXh0cG9zaXRpb24mJihjKCJ0ZXh0dGVtcGxhdGUiKSxlLnRleHR0ZW1wbGF0ZXx8YygidGV4dGluZm8iKSkscChjLCJpbmNyZWFzaW5nIixoKSxwKGMsImRlY3JlYXNpbmciLGYpLHAoYywidG90YWxzIiwiIzQ0OTlGRiIpLGMoImNvbm5lY3Rvci52aXNpYmxlIikpYygiY29ubmVjdG9yLm1vZGUiKSxjKCJjb25uZWN0b3IubGluZS53aWR0aCIpJiYoYygiY29ubmVjdG9yLmxpbmUuY29sb3IiKSxjKCJjb25uZWN0b3IubGluZS5kYXNoIikpfWVsc2UgZS52aXNpYmxlPSExfSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcixhO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG4uY29lcmNlKGEuX2lucHV0LGEsbCx0KX1pZigiZ3JvdXAiPT09ZS53YXRlcmZhbGxtb2RlKWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXI9KGE9dFtzXSkuX2lucHV0LGkocixhLGUsbyl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6NzE5LCIuLi8uLi9saWIiOjc1MCwiLi4vYmFyL2RlZmF1bHRzIjo4OTYsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjoxMTc4LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMTg1LCIuL2F0dHJpYnV0ZXMiOjEzMjR9XSwxMzI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lng9InhWYWwiaW4gZT9lLnhWYWw6ZS54LHQueT0ieVZhbCJpbiBlP2UueVZhbDplLnksImluaXRpYWwiaW4gZSYmKHQuaW5pdGlhbD1lLmluaXRpYWwpLCJkZWx0YSJpbiBlJiYodC5kZWx0YT1lLmRlbHRhKSwiZmluYWwiaW4gZSYmKHQuZmluYWw9ZS5maW5hbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdH19LHt9XSwxMzMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikub3BhY2l0eSxhPXQoIi4uL2Jhci9ob3ZlciIpLmhvdmVyT25CYXJzLG89dCgiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIikscz1vLklOQ1JFQVNJTkcuU1lNQk9MLGw9by5ERUNSRUFTSU5HLlNZTUJPTDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIGM9YSh0LGUscixvKTtpZihjKXt2YXIgdT1jLmNkLGg9dVswXS50cmFjZSxmPSJoIj09PWgub3JpZW50YXRpb24scD1mP3QueGE6dC55YSxkPXVbYy5pbmRleF0sZz1kLmlzU3VtP2QuYitkLnM6ZC5yYXdTO2lmKCFkLmlzU3VtKXtjLmluaXRpYWw9ZC5iK2Qucy1nLGMuZGVsdGE9ZyxjLmZpbmFsPWMuaW5pdGlhbCtjLmRlbHRhO3ZhciBtPXcoTWF0aC5hYnMoYy5kZWx0YSkpO2MuZGVsdGFMYWJlbD1nPDA/IigiK20rIikiOm0sYy5maW5hbExhYmVsPXcoYy5maW5hbCksYy5pbml0aWFsTGFiZWw9dyhjLmluaXRpYWwpfXZhciB2PWQuaGl8fGguaG92ZXJpbmZvLHk9W107aWYodiYmIm5vbmUiIT09diYmInNraXAiIT09dil7dmFyIHg9ImFsbCI9PT12LGI9di5zcGxpdCgiKyIpLF89ZnVuY3Rpb24odCl7cmV0dXJuIHh8fC0xIT09Yi5pbmRleE9mKHQpfTtkLmlzU3VtfHwoIV8oImZpbmFsIil8fF8oZj8ieCI6InkiKXx8eS5wdXNoKGMuZmluYWxMYWJlbCksXygiZGVsdGEiKSYmKGc8MD95LnB1c2goYy5kZWx0YUxhYmVsKyIgIitsKTp5LnB1c2goYy5kZWx0YUxhYmVsKyIgIitzKSksXygiaW5pdGlhbCIpJiZ5LnB1c2goIkluaXRpYWw6ICIrYy5pbml0aWFsTGFiZWwpKX1yZXR1cm4geS5sZW5ndGgmJihjLmV4dHJhVGV4dD15LmpvaW4oIjxicj4iKSksYy5jb2xvcj1mdW5jdGlvbih0LGUpe3ZhciByPXRbZS5kaXJdLm1hcmtlcixuPXIuY29sb3IsYT1yLmxpbmUuY29sb3Isbz1yLmxpbmUud2lkdGg7aWYoaShuKSlyZXR1cm4gbjtpZihpKGEpJiZvKXJldHVybiBhfShoLGQpLFtjXX1mdW5jdGlvbiB3KHQpe3JldHVybiBuKHAsdCl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MTUsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6NzE5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuLi9iYXIvaG92ZXIiOjg5OX1dLDEzMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi4vYmFyL3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJ3YXRlcmZhbGwiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJiYXItbGlrZSIsImNhcnRlc2lhbiIsInN2ZyIsIm9yaWVudGVkIiwic2hvd0xlZ2VuZCIsInpvb21TY2FsZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODEyLCIuLi9iYXIvc2VsZWN0Ijo5MDQsIi4vYXR0cmlidXRlcyI6MTMyNCwiLi9jYWxjIjoxMzI1LCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjEzMjcsIi4vZGVmYXVsdHMiOjEzMjgsIi4vZXZlbnRfZGF0YSI6MTMyOSwiLi9ob3ZlciI6MTMzMCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTMzMiwiLi9sYXlvdXRfZGVmYXVsdHMiOjEzMzMsIi4vcGxvdCI6MTMzNCwiLi9zdHlsZSI6MTMzNX1dLDEzMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt3YXRlcmZhbGxtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJncm91cCIsIm92ZXJsYXkiXSxkZmx0OiJncm91cCIsZWRpdFR5cGU6ImNhbGMifSx3YXRlcmZhbGxnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSx3YXRlcmZhbGxncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMzMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ITE7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWZvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2lmKGwudmlzaWJsZSYmIndhdGVyZmFsbCI9PT1sLnR5cGUpe2E9ITA7YnJlYWt9fWEmJihvKCJ3YXRlcmZhbGxtb2RlIiksbygid2F0ZXJmYWxsZ2FwIiwuMiksbygid2F0ZXJmYWxsZ3JvdXBnYXAiKSl9fSx7Ii4uLy4uL2xpYiI6NzUwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMzMyfV0sMTMzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0scz10KCIuLi9iYXIvcGxvdCIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLmNsZWFyTWluVGV4dFNpemU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuX2Z1bGxMYXlvdXQ7bCgid2F0ZXJmYWxsIix1KSxzLnBsb3QodCxlLHIsYyx7bW9kZTp1LndhdGVyZmFsbG1vZGUsbm9ybTp1LndhdGVyZmFsbG1vZGUsZ2FwOnUud2F0ZXJmYWxsZ2FwLGdyb3VwZ2FwOnUud2F0ZXJmYWxsZ3JvdXBnYXB9KSxmdW5jdGlvbih0LGUscixzKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSx1PXJbMF0udHJhY2UsaD1pLmVuc3VyZVNpbmdsZShzLCJnIiwibGluZXMiKTtpZih1LmNvbm5lY3RvciYmdS5jb25uZWN0b3IudmlzaWJsZSl7dmFyIGY9ImgiPT09dS5vcmllbnRhdGlvbixwPXUuY29ubmVjdG9yLm1vZGUsZD1oLnNlbGVjdEFsbCgiZy5saW5lIikuZGF0YShpLmlkZW50aXR5KTtkLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGluZSIsITApLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciBnPWQuc2l6ZSgpO2QuZWFjaCgoZnVuY3Rpb24ocixzKXtpZihzPT09Zy0xfHxyLmNOZXh0KXt2YXIgdT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxpWzJdPW8uYzJwKHQubmV4dFMwLCEwKSxhWzJdPXMuYzJwKHQubmV4dFAwLCEwKSxuP1tpLGFdOlthLGldfShyLGwsYyxmKSxoPXVbMF0sZD11WzFdLG09IiI7aFswXSE9PW8mJmRbMF0hPT1vJiZoWzFdIT09byYmZFsxXSE9PW8mJigic3Bhbm5pbmciPT09cCYmIXIuaXNTdW0mJnM+MCYmKG0rPWY/Ik0iK2hbMF0rIiwiK2RbMV0rIlYiK2RbMF06Ik0iK2hbMV0rIiwiK2RbMF0rIkgiK2hbMF0pLCJiZXR3ZWVuIiE9PXAmJihyLmlzU3VtfHxzPGctMSkmJihtKz1mPyJNIitoWzFdKyIsIitkWzBdKyJWIitkWzFdOiJNIitoWzBdKyIsIitkWzFdKyJIIitoWzFdKSxoWzJdIT09byYmZFsyXSE9PW8mJihtKz1mPyJNIitoWzFdKyIsIitkWzFdKyJWIitkWzJdOiJNIitoWzFdKyIsIitkWzFdKyJIIitoWzJdKSksIiI9PT1tJiYobT0iTTAsMFoiKSxpLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwicGF0aCIpLmF0dHIoImQiLG0pLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSkpfWVsc2UgaC5yZW1vdmUoKX0pKX0odCxlLHIsYyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjM3LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uLy4uL2xpYiI6NzUwLCIuLi9iYXIvcGxvdCI6OTAzLCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MDgsZDM6MTY5fV0sMTMzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0scz10KCIuLi9iYXIvc3R5bGUiKSxsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0LGM9cy5zdHlsZVRleHRQb2ludHM7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUscil7dmFyIHM9cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLndhdGVyZmFsbGxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7bCh0LHMsIndhdGVyZmFsbCIpLHMuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLHMuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcykscz1lWzBdLnRyYWNlO3Iuc2VsZWN0QWxsKCIucG9pbnQgPiBwYXRoIikuZWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuaXNCbGFuayl7dmFyIGU9c1t0LmRpcl0ubWFya2VyO24uc2VsZWN0KHRoaXMpLmNhbGwoYS5maWxsLGUuY29sb3IpLmNhbGwoYS5zdHJva2UsZS5saW5lLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsZS5saW5lLmRhc2gsZS5saW5lLndpZHRoKS5zdHlsZSgib3BhY2l0eSIscy5zZWxlY3RlZHBvaW50cyYmIXQuc2VsZWN0ZWQ/bzoxKX19KSksYyhyLHMsdCksci5zZWxlY3RBbGwoIi5saW5lcyIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9cy5jb25uZWN0b3IubGluZTtpLmxpbmVHcm91cFN0eWxlKG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLHQud2lkdGgsdC5jb2xvcix0LmRhc2gpfSkpfSkpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjE1LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYzNywiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzI0LCIuLi9iYXIvc3R5bGUiOjkwNiwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTA4LGQzOjE2OX1dLDEzMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uL2xpYiIpLGE9dCgiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxvPXQoIi4vaGVscGVycyIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb24scz10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9ImFnZ3JlZ2F0ZSI7dmFyIGw9ci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZ3JvdXBzOnt2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMifSxhZ2dyZWdhdGlvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImFnZ3JlZ2F0aW9uIix0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxmdW5jOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb3VudCIsInN1bSIsImF2ZyIsIm1lZGlhbiIsIm1vZGUiLCJybXMiLCJzdGRkZXYiLCJtaW4iLCJtYXgiLCJmaXJzdCIsImxhc3QiLCJjaGFuZ2UiLCJyYW5nZSJdLGRmbHQ6ImZpcnN0IixlZGl0VHlwZToiY2FsYyJ9LGZ1bmNtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzYW1wbGUiLCJwb3B1bGF0aW9uIl0sZGZsdDoic2FtcGxlIixlZGl0VHlwZToiY2FsYyJ9LGVuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sYz1sLmFnZ3JlZ2F0aW9ucztmdW5jdGlvbiB1KHQsZSxyLGEpe2lmKGEuZW5hYmxlZCl7Zm9yKHZhciBvPWEudGFyZ2V0LGw9aS5uZXN0ZWRQcm9wZXJ0eShlLG8pLGM9bC5nZXQoKSx1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5mdW5jLG49ZS5kMmMsYT1lLmMyZDtzd2l0Y2gocil7Y2FzZSJjb3VudCI6cmV0dXJuIGg7Y2FzZSJmaXJzdCI6cmV0dXJuIGY7Y2FzZSJsYXN0IjpyZXR1cm4gcDtjYXNlInN1bSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1uKHRbZVtpXV0pO28hPT1zJiYocis9byl9cmV0dXJuIGEocil9O2Nhc2UiYXZnIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiYocis9bCxpKyspfXJldHVybiBpP2Eoci9pKTpzfTtjYXNlIm1pbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEvMCxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPW4odFtlW2ldXSk7byE9PXMmJihyPU1hdGgubWluKHIsbykpfXJldHVybiByPT09MS8wP3M6YShyKX07Y2FzZSJtYXgiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMS8wLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89bih0W2VbaV1dKTtvIT09cyYmKHI9TWF0aC5tYXgocixvKSl9cmV0dXJuIHI9PT0tMS8wP3M6YShyKX07Y2FzZSJyYW5nZSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEvMCxpPS0xLzAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiYocj1NYXRoLm1pbihyLGwpLGk9TWF0aC5tYXgoaSxsKSl9cmV0dXJuIGk9PT0tMS8wfHxyPT09MS8wP3M6YShpLXIpfTtjYXNlImNoYW5nZSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0W2VbMF1dKSxpPW4odFtlW2UubGVuZ3RoLTFdXSk7cmV0dXJuIHI9PT1zfHxpPT09cz9zOmEoaS1yKX07Y2FzZSJtZWRpYW4iOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJnIucHVzaChsKX1pZighci5sZW5ndGgpcmV0dXJuIHM7ci5zb3J0KGkuc29ydGVyQXNjKTt2YXIgYz0oci5sZW5ndGgtMSkvMjtyZXR1cm4gYSgocltNYXRoLmZsb29yKGMpXStyW01hdGguY2VpbChjKV0pLzIpfTtjYXNlIm1vZGUiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxpPTAsbz1zLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9bih0W2VbbF1dKTtpZihjIT09cyl7dmFyIHU9cltjXT0ocltjXXx8MCkrMTt1PmkmJihpPXUsbz1jKX19cmV0dXJuIGk/YShvKTpzfTtjYXNlInJtcyI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsaT0wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmKHIrPWwqbCxpKyspfXJldHVybiBpP2EoTWF0aC5zcXJ0KHIvaSkpOnN9O2Nhc2Uic3RkZGV2IjpyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgaSxhPTAsbz0wLGw9MSxjPXM7Zm9yKGk9MDtpPHIubGVuZ3RoJiZjPT09cztpKyspYz1uKGVbcltpXV0pO2lmKGM9PT1zKXJldHVybiBzO2Zvcig7aTxyLmxlbmd0aDtpKyspe3ZhciB1PW4oZVtyW2ldXSk7aWYodSE9PXMpe3ZhciBoPXUtYzthKz1oLG8rPWgqaCxsKyt9fXZhciBmPSJzYW1wbGUiPT09dC5mdW5jbW9kZT9sLTE6bDtyZXR1cm4gZj9NYXRoLnNxcnQoKG8tYSphL2wpL2YpOjB9fX0oYSxuLmdldERhdGFDb252ZXJzaW9ucyh0LGUsbyxjKSksZD1uZXcgQXJyYXkoci5sZW5ndGgpLGc9MDtnPHIubGVuZ3RoO2crKylkW2ddPXUoYyxyW2ddKTtsLnNldChkKSwiY291bnQiPT09YS5mdW5jJiZpLnB1c2hVbmlxdWUoZS5fYXJyYXlBdHRycyxvKX19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBlLmxlbmd0aH1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHRbZVswXV19ZnVuY3Rpb24gcCh0LGUpe3JldHVybiB0W2VbZS5sZW5ndGgtMV1dfXIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXt9O2Z1bmN0aW9uIG8oZSxyKXtyZXR1cm4gaS5jb2VyY2UodCxuLGwsZSxyKX1pZighbygiZW5hYmxlZCIpKXJldHVybiBuO3ZhciBzPWEuZmluZEFycmF5QXR0cmlidXRlcyhlKSx1PXt9O2ZvcihyPTA7cjxzLmxlbmd0aDtyKyspdVtzW3JdXT0xO3ZhciBoPW8oImdyb3VwcyIpO2lmKCFBcnJheS5pc0FycmF5KGgpKXtpZighdVtoXSlyZXR1cm4gbi5lbmFibGVkPSExLG47dVtoXT0wfXZhciBmLHA9dC5hZ2dyZWdhdGlvbnN8fFtdLGQ9bi5hZ2dyZWdhdGlvbnM9bmV3IEFycmF5KHAubGVuZ3RoKTtmdW5jdGlvbiBnKHQsZSl7cmV0dXJuIGkuY29lcmNlKHBbcl0sZixjLHQsZSl9Zm9yKHI9MDtyPHAubGVuZ3RoO3IrKyl7Zj17X2luZGV4OnJ9O3ZhciBtPWcoInRhcmdldCIpLHY9ZygiZnVuYyIpO2coImVuYWJsZWQiKSYmbSYmKHVbbV18fCJjb3VudCI9PT12JiZ2b2lkIDA9PT11W21dKT8oInN0ZGRldiI9PT12JiZnKCJmdW5jbW9kZSIpLHVbbV09MCxkW3JdPWYpOmRbcl09e2VuYWJsZWQ6ITEsX2luZGV4OnJ9fWZvcihyPTA7cjxzLmxlbmd0aDtyKyspdVtzW3JdXSYmZC5wdXNoKHt0YXJnZXQ6c1tyXSxmdW5jOmMuZnVuYy5kZmx0LGVuYWJsZWQ6ITAsX2luZGV4Oi0xfSk7cmV0dXJuIG59LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgbj1yLmdyb3VwcyxhPWkuZ2V0VGFyZ2V0QXJyYXkoZSx7dGFyZ2V0Om59KTtpZihhKXt2YXIgcyxsLGMsaCxmPXt9LHA9e30sZD1bXSxnPW8oZS50cmFuc2Zvcm1zLHIpLG09YS5sZW5ndGg7Zm9yKGUuX2xlbmd0aCYmKG09TWF0aC5taW4obSxlLl9sZW5ndGgpKSxzPTA7czxtO3MrKyl2b2lkIDA9PT0oYz1mW2w9YVtzXV0pPyhmW2xdPWQubGVuZ3RoLGg9W3NdLGQucHVzaChoKSxwW2ZbbF1dPWcocykpOihkW2NdLnB1c2gocykscFtmW2xdXT0ocFtmW2xdXXx8W10pLmNvbmNhdChnKHMpKSk7ci5faW5kZXhUb1BvaW50cz1wO3ZhciB2PXIuYWdncmVnYXRpb25zO2ZvcihzPTA7czx2Lmxlbmd0aDtzKyspdSh0LGUsZCx2W3NdKTsic3RyaW5nIj09dHlwZW9mIG4mJnUodCxlLGQse3RhcmdldDpuLGZ1bmM6ImZpcnN0IixlbmFibGVkOiEwfSksZS5fbGVuZ3RoPWQubGVuZ3RofX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcyNSwiLi4vbGliIjo3NTAsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3ODcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4vaGVscGVycyI6MTMzOX1dLDEzMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9yZWdpc3RyeSIpLGE9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4vaGVscGVycyIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb24scz10KCIuLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGw9cy5DT01QQVJJU09OX09QUyxjPXMuSU5URVJWQUxfT1BTLHU9cy5TRVRfT1BTO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9ImZpbHRlciIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMifSxvcGVyYXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXS5jb25jYXQobCkuY29uY2F0KGMpLmNvbmNhdCh1KSxkZmx0OiI9IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHByZXNlcnZlZ2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBhKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1pZihhKCJlbmFibGVkIikpe3ZhciBvPWEoInRhcmdldCIpO2lmKG4uaXNBcnJheU9yVHlwZWRBcnJheShvKSYmMD09PW8ubGVuZ3RoKXJldHVybiBlLmVuYWJsZWQ9ITEsZTthKCJwcmVzZXJ2ZWdhcHMiKSxhKCJvcGVyYXRpb24iKSxhKCJ2YWx1ZSIpO3ZhciBzPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpO3ModCxlLCJ2YWx1ZWNhbGVuZGFyIixudWxsKSxzKHQsZSwidGFyZ2V0Y2FsZW5kYXIiLG51bGwpfXJldHVybiBlfSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe2lmKHIuZW5hYmxlZCl7dmFyIGk9bi5nZXRUYXJnZXRBcnJheShlLHIpO2lmKGkpe3ZhciBzPXIudGFyZ2V0LGg9aS5sZW5ndGg7ZS5fbGVuZ3RoJiYoaD1NYXRoLm1pbihoLGUuX2xlbmd0aCkpO3ZhciBmPXIudGFyZ2V0Y2FsZW5kYXIscD1lLl9hcnJheUF0dHJzLGQ9ci5wcmVzZXJ2ZWdhcHM7aWYoInN0cmluZyI9PXR5cGVvZiBzKXt2YXIgZz1uLm5lc3RlZFByb3BlcnR5KGUscysiY2FsZW5kYXIiKS5nZXQoKTtnJiYoZj1nKX12YXIgbSx2LHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQub3BlcmF0aW9uLGk9dC52YWx1ZSxhPUFycmF5LmlzQXJyYXkoaSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZihuKX12YXIgcyxoPWZ1bmN0aW9uKHIpe3JldHVybiBlKHIsMCx0LnZhbHVlY2FsZW5kYXIpfSxmPWZ1bmN0aW9uKHQpe3JldHVybiBlKHQsMCxyKX07byhsKT9zPWgoYT9pWzBdOmkpOm8oYyk/cz1hP1toKGlbMF0pLGgoaVsxXSldOltoKGkpLGgoaSldOm8odSkmJihzPWE/aS5tYXAoaCk6W2goaSldKTtzd2l0Y2gobil7Y2FzZSI9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk9PT1zfTtjYXNlIiE9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCkhPT1zfTtjYXNlIjwiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZih0KTxzfTtjYXNlIjw9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk8PXN9O2Nhc2UiPiI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPnN9O2Nhc2UiPj0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZih0KT49c307Y2FzZSJbXSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU+PXNbMF0mJmU8PXNbMV19O2Nhc2UiKCkiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPnNbMF0mJmU8c1sxXX07Y2FzZSJbKSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU+PXNbMF0mJmU8c1sxXX07Y2FzZSIoXSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU+c1swXSYmZTw9c1sxXX07Y2FzZSJdWyI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8PXNbMF18fGU+PXNbMV19O2Nhc2UiKSgiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPHNbMF18fGU+c1sxXX07Y2FzZSJdKCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8PXNbMF18fGU+c1sxXX07Y2FzZSIpWyI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8c1swXXx8ZT49c1sxXX07Y2FzZSJ7fSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi0xIT09cy5pbmRleE9mKGYodCkpfTtjYXNlIn17IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTE9PT1zLmluZGV4T2YoZih0KSl9fX0ocixhLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUscyxpKSxmKSx4PXt9LGI9e30sXz0wO2Q/KG09ZnVuY3Rpb24odCl7eFt0LmFzdHJdPW4uZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChuZXcgQXJyYXkoaCkpfSx2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9eFt0LmFzdHJdW2VdO3QuZ2V0KClbZV09cn0pOihtPWZ1bmN0aW9uKHQpe3hbdC5hc3RyXT1uLmV4dGVuZERlZXAoW10sdC5nZXQoKSksdC5zZXQoW10pfSx2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9eFt0LmFzdHJdW2VdO3QuZ2V0KCkucHVzaChyKX0pLGsobSk7Zm9yKHZhciB3PW8oZS50cmFuc2Zvcm1zLHIpLFQ9MDtUPGg7VCsrKXt5KGlbVF0pPyhrKHYsVCksYltfKytdPXcoVCkpOmQmJl8rK31yLl9pbmRleFRvUG9pbnRzPWIsZS5fbGVuZ3RoPV99fWZ1bmN0aW9uIGsodCxyKXtmb3IodmFyIGk9MDtpPHAubGVuZ3RoO2krKyl7dChuLm5lc3RlZFByb3BlcnR5KGUscFtpXSkscil9fX19LHsiLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiOjcyMSwiLi4vbGliIjo3NTAsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3OTksIi4uL3JlZ2lzdHJ5Ijo4ODIsIi4vaGVscGVycyI6MTMzOX1dLDEzMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLGE9dCgiLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4vaGVscGVycyIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb247ZnVuY3Rpb24gcyh0LGUpe3ZhciByLHMsbCxjLHUsaCxmLHAsZCxnLG09ZS50cmFuc2Zvcm0sdj1lLnRyYW5zZm9ybUluZGV4LHk9dC50cmFuc2Zvcm1zW3ZdLmdyb3Vwcyx4PW8odC50cmFuc2Zvcm1zLG0pO2lmKCFuLmlzQXJyYXlPclR5cGVkQXJyYXkoeSl8fDA9PT15Lmxlbmd0aClyZXR1cm5bdF07dmFyIGI9bi5maWx0ZXJVbmlxdWUoeSksXz1uZXcgQXJyYXkoYi5sZW5ndGgpLHc9eS5sZW5ndGgsVD1pLmZpbmRBcnJheUF0dHJpYnV0ZXModCksaz1tLnN0eWxlc3x8W10sTT17fTtmb3Iocj0wO3I8ay5sZW5ndGg7cisrKU1ba1tyXS50YXJnZXRdPWtbcl0udmFsdWU7bS5zdHlsZXMmJihnPW4ua2V5ZWRDb250YWluZXIobSwic3R5bGVzIiwidGFyZ2V0IiwidmFsdWUubmFtZSIpKTt2YXIgQT17fSxTPXt9O2ZvcihyPTA7cjxiLmxlbmd0aDtyKyspe0FbaD1iW3JdXT1yLFNbaF09MCwoZj1fW3JdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHQpKS5fZ3JvdXA9aCxmLnRyYW5zZm9ybXNbdl0uX2luZGV4VG9Qb2ludHM9e307dmFyIEU9bnVsbDtmb3IoZyYmKEU9Zy5nZXQoaCkpLGYubmFtZT1FfHwiIj09PUU/RTpuLnRlbXBsYXRlU3RyaW5nKG0ubmFtZWZvcm1hdCx7dHJhY2U6dC5uYW1lLGdyb3VwOmh9KSxwPWYudHJhbnNmb3JtcyxmLnRyYW5zZm9ybXM9W10scz0wO3M8cC5sZW5ndGg7cysrKWYudHJhbnNmb3Jtc1tzXT1uLmV4dGVuZERlZXBOb0FycmF5cyh7fSxwW3NdKTtmb3Iocz0wO3M8VC5sZW5ndGg7cysrKW4ubmVzdGVkUHJvcGVydHkoZixUW3NdKS5zZXQoW10pfWZvcihsPTA7bDxULmxlbmd0aDtsKyspe2ZvcihjPVRbbF0scz0wLGQ9W107czxiLmxlbmd0aDtzKyspZFtzXT1uLm5lc3RlZFByb3BlcnR5KF9bc10sYykuZ2V0KCk7Zm9yKHU9bi5uZXN0ZWRQcm9wZXJ0eSh0LGMpLmdldCgpLHM9MDtzPHc7cysrKWRbQVt5W3NdXV0ucHVzaCh1W3NdKX1mb3Iocz0wO3M8dztzKyspeyhmPV9bQVt5W3NdXV0pLnRyYW5zZm9ybXNbdl0uX2luZGV4VG9Qb2ludHNbU1t5W3NdXV09eChzKSxTW3lbc11dKyt9Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyloPWJbcl0sZj1fW3JdLGEuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycyhmKSxmPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKGYsTVtoXXx8e30pO3JldHVybiBffXIubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9Imdyb3VwYnkiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGdyb3Vwczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxlZGl0VHlwZToiY2FsYyJ9LG5hbWVmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxzdHlsZXM6e19pc0xpbmtlZFRvQXJyYXk6InN0eWxlIix0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZTp7dmFsVHlwZToiYW55IixkZmx0Ont9LGVkaXRUeXBlOiJjYWxjIixfY29tcGFyZUFzSlNPTjohMH0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlLGkpe3ZhciBhLG89e307ZnVuY3Rpb24gcyhlLGkpe3JldHVybiBuLmNvZXJjZSh0LG8sci5hdHRyaWJ1dGVzLGUsaSl9aWYoIXMoImVuYWJsZWQiKSlyZXR1cm4gbztzKCJncm91cHMiKSxzKCJuYW1lZm9ybWF0IixpLl9kYXRhTGVuZ3RoPjE/IiV7Z3JvdXB9ICgle3RyYWNlfSkiOiIle2dyb3VwfSIpO3ZhciBsPXQuc3R5bGVzLGM9by5zdHlsZXM9W107aWYobClmb3IoYT0wO2E8bC5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdPXt9O24uY29lcmNlKGxbYV0sY1thXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLCJ0YXJnZXQiKTt2YXIgaD1uLmNvZXJjZShsW2FdLGNbYV0sci5hdHRyaWJ1dGVzLnN0eWxlcywidmFsdWUiKTtuLmlzUGxhaW5PYmplY3QoaCk/dS52YWx1ZT1uLmV4dGVuZERlZXAoe30saCk6aCYmZGVsZXRlIHUudmFsdWV9cmV0dXJuIG99LHIudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9W107Zm9yKG49MDtuPHQubGVuZ3RoO24rKylmb3Iocj1zKHRbbl0sZSksaT0wO2k8ci5sZW5ndGg7aSsrKWEucHVzaChyW2ldKTtyZXR1cm4gYX19LHsiLi4vbGliIjo3NTAsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3ODcsIi4uL3Bsb3RzL3Bsb3RzIjo4NjIsIi4vaGVscGVycyI6MTMzOX1dLDEzMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saT0wO2k8dC5sZW5ndGgmJihyPXRbaV0pIT09ZTtpKyspci5faW5kZXhUb1BvaW50cyYmITEhPT1yLmVuYWJsZWQmJihuPXIuX2luZGV4VG9Qb2ludHMpO3JldHVybiBuP2Z1bmN0aW9uKHQpe3JldHVybiBuW3RdfTpmdW5jdGlvbih0KXtyZXR1cm5bdF19fX0se31dLDEzNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixvPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0ic29ydCIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMifSxvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXNjZW5kaW5nIiwiZGVzY2VuZGluZyJdLGRmbHQ6ImFzY2VuZGluZyIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gaShpLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsci5hdHRyaWJ1dGVzLGksYSl9cmV0dXJuIGkoImVuYWJsZWQiKSYmKGkoInRhcmdldCIpLGkoIm9yZGVyIikpLGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgcz1uLmdldFRhcmdldEFycmF5KGUscik7aWYocyl7dmFyIGw9ci50YXJnZXQsYz1zLmxlbmd0aDtlLl9sZW5ndGgmJihjPU1hdGgubWluKGMsZS5fbGVuZ3RoKSk7dmFyIHUsaCxmPWUuX2FycmF5QXR0cnMscD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKTtmb3IoaT0wO2k8bjtpKyspYVtpXT17djplW2ldLGk6aX07Zm9yKGEuc29ydChmdW5jdGlvbih0LGUpe3N3aXRjaCh0Lm9yZGVyKXtjYXNlImFzY2VuZGluZyI6cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSh0LnYpLGk9ZShyLnYpO3JldHVybiBuPT09bz8xOmk9PT1vPy0xOm4taX07Y2FzZSJkZXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQudiksaT1lKHIudik7cmV0dXJuIG49PT1vPzE6aT09PW8/LTE6aS1ufX19KHQscikpLGk9MDtpPG47aSsrKXNbaV09YVtpXS5pO3JldHVybiBzfShyLHMsaS5nZXREYXRhVG9Db29yZEZ1bmModCxlLGwscyksYyksZD1hKGUudHJhbnNmb3JtcyxyKSxnPXt9O2Zvcih1PTA7dTxmLmxlbmd0aDt1Kyspe3ZhciBtPW4ubmVzdGVkUHJvcGVydHkoZSxmW3VdKSx2PW0uZ2V0KCkseT1uZXcgQXJyYXkoYyk7Zm9yKGg9MDtoPGM7aCsrKXlbaF09dltwW2hdXTttLnNldCh5KX1mb3IoaD0wO2g8YztoKyspZ1toXT1kKHBbaF0pO3IuX2luZGV4VG9Qb2ludHM9ZyxlLl9sZW5ndGg9Y319fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MjUsIi4uL2xpYiI6NzUwLCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6Nzk5LCIuL2hlbHBlcnMiOjEzMzl9XSwxMzQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IudmVyc2lvbj0iMS41Ny4xIn0se31dfSx7fSxbMjZdKSgyNil9KSk7"></script> <!doctype html> <html> <style> div.cabecalho { font-size: 250%; text-align: center; vertical-align: middle; background-color: #1659bf; color: #ffffff; border-bottom: 30px solid #0f4098; } </style> <div class="cabecalho"> <!--<img src="SPElogoBranco.png" width="125" height="104">--> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAMVCAYAAADkr94jAAAatHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHja3ZpZkiM5dkX/sQotAdPDsByMZtqBlq9zQWZW1tTqbpPpQxGVRYbT6Q684Q6Au/Nf/3ndf/BTinmXrbbSS/H85J57HLxp/vPzeQ0+v/+/n9N8+h793XEX7PtB5JDeff7y5Xxew+C4/faFmr/H5++Pu7o+b2L7Xuj7ARd+P0l31vvvhdv3Qil+jofv365/vzDKL9P5/ovre9nvxf/4d65lEZZdfU2uWGQg8aTAv3en9Pk33uvgX+OM8I6k1N+R+uf4ue84wl8FcPWf0/xd/PyPkaXfwvG50I9plT/E6XuchPz+ePp5+/i7EYX4PSX+9sFLdQw/CuFP8bt3t3vPZ3YjF0ftlO+kfkzxvePESTjT+1rht/LPeF/fb+e3+eEXWdtMdTo/+aOHSDRvyGGHEW4473WFxRBzPLHyGuOK6R1rqcYeV1IKsn7DjdWRh50amVhkLXE4/hxLePftuh83a9x5B86MgYsFvvG7X/fHA//u7+8udK/KPAQFk9SHT4KjSpZhKHP6P2eRkHC/MbUX3+A+L/6PP0psIoP2wtyY4PDzc4lp4bfaSi/PyZvj1Ow//RLq/l6AEHFvYzAhkQFfQrJQgq8x1hCIYyM/g5HHlOMkA8Gcxc0oY06pkBy6gXvznRreudHi5zDwQiIslVRJDY1CsnK2XHLNjRIazpJlMytWrVm3UVLJxUoptQinRk01V6ul1tpqr6Ollpu10mprrbfRY0/AmLleeu2t9z4GNx15cK3B+YMDM84087RZZp1t9jkW5bPyslVWXW31NXbcaedtboMCu+2+xwmHUjr52Cmnnnb6GZdau+nma7fcetvtd/zM2jerv8/aHzP3j7MWvlmLL1E6r/6WNQ7X+uMSQXBiyhkZizmQ8aoMUNBROfMt5ByVOeXM95hcShYZpSk5OyhjZDCfEO2Gn7n7LXN/mzdHdP/VvMW/ypxT6v43MueUul8y9+e8/UXW9nhwm16C1IXEFIRMtB8nnDZiG+Klf+vV/btf/D+6UDcLfZ1geYZbQudwJv4rEsE9b561pxtsWR5z5H0461pqt8bl0l2lRVsnzkETt0H9es8Xa7972b3zNIup9FD1UVwtXLhzeDs7hr0ABcukzY29crpnxlAtnNlOHOgGbpd2+w62hGz8J57/+1f3P5yQqP7aqSLGvdZG1JQyIbAdYu1IFoqv0ARrue3zGrTCOWstapRWMMLE6+7rolUOxb5nJSrhjMohTX0epjm2zVTCyBT4dFbp6kJp1rNA2uOJKNiBnAqbxl493OzLKDTYCkaxrlLOIHDz3NRvmznPXg9MW3JbdfZFbOPId4bSZ9FdzxyHNC1EyqgXUu3j3LHuIYY9FQYVhmLZj6ffwKNpOZyTIs3F6cF2LtQ5TACPkoOxU95Nhw+YkNo+x98JxOd2V5yN0RYwgPT7Q8PHsfcm3xTK7kYr1uLJeR9UDTnuNG7uxzrVdLnF2uXarC3TvtJZvsD9ccZ8UaGZy2hKFMeuI+5dxh1l95JtG426IgqtRxAn3Q4/dV7bqSvpQtRRH4l4th24GYB6SmXIOeuSrfq7AtOYs5c1KWKim8D2MuIhJmNXYPIQLJuupTtOrjeCPP16EIVQnwvI7UxRVBAJoD/JFDjG1KpZawwINXJB4L7CXacv10HUCVKtTHWBRyB59RTCO2HMBDaGdSfhS3efWpAHY+3rF52n0AOeae8zEKNMVSUWNzedJ1AM6+4OJk7SSH2Nc+4BnatCdFAanitOWjkNKvWAgQ0R5UhYvaoPKxsROweSvHiKvcP/qyVrk4/wA3wbIKX2T002yaBVKqjcQHLPMEcPnxInVVzPaWUlsLZRCH5XFDNIznRm2Zl+AJuP5eP5k9INl6TPfQszBCQkRo+JDgq9BpFAQBDX3dTfSKeCDIRBrUYEU6cB0qQAqniIPKhZSru+Tzem1Zl7W4SxnaGZI1K8MQx1S4IAdiRjtXBJdOQx6CAmwCt0X8kUs+/JjlujdCKTJtAwbTR7GLKApIdG/p99ddFa3Mdmq3uibUtSfKzAoyNntWuH8xL1V6+HGMPtu6C6EGKRRjoLNLi51uMaHTDByoNa7hEUiM0M4Dkdxqu5D/jVq1YypFqNArFJRV7oD4YM/TXVWcldGzftQcOBXCTXSiNDl0vyMW88LRAKc8cfIqE3KLx4KRGV0kS91RtsS/e3WOedlOshPSdSXmQUcE3tlElxVnTJhs/voBJuhnoJy2y72A7lQupcpvfoJlg65+qbCyXzl68MkTj1iUWZCEcGAaKR1D0pC4Y65951cgKqNB4abnakXxaCpvjpfTiJcgQYm/mhqxag2zLWYXf/8mnURBDqCFhVMIAC+mYNR+bizSHtmWkopEuIg56H4cRlF/YyaMwOcgKM7cidnc5Fe/mQgDm0CCSJ2nHkh34CSQNTbEBMbLmq5HoGSbuIluBHq5QCcacpEnQC3Id4geNJLKIvrSNrcgI725roQ9Ah3bnm2YIQRNLth7LfGfgE2wfVvvM64oQcwOKwxs0l3NaWAw6LWBlVjwqkEpg2CI5POgls5EIoOl8HrQhfXygdrIThILQaATLuIJM76f4EVNP35PoO8se51GAkcVJicoDgIMqygl8NybU6VVJtBTIXWlTpNFLuxoBH4qdjQDJm8ReyZeyCnKsIubEHaVbh3wIgh1rTRFCO6Gh7aRgKnS6bEL4ZVwRY8xROTqP4qCYanI45m2o/1E0imMgBsTT1RHyv2+mmcRqzC52SEJKiWbj1A+C6wE8CyBsQyiogymEwe4RKc4OVQcIHtHY06aXwCocnoUodoL70msg2wx+gP7Ux6+IrPjO/5skvZDMM9boRFeRuluImTXfKM92g/aHDuAp0Rss129D6zJhlqoUy5YwFxZ09UoNKxkFk4CRibjU7W6RjAui3awbw/T+awN+P3/0yAfhWcVkJidPAc1gEQIBi+uNdepdeQD+UgnJSSdgR5jaA5UJHKHrDCFP2zUOGF9Gg2B7FVijEcGGU1iqVA2Oc4dsNReYgV6VLkv2k4FaN5Az1c2Ay6CR05n9QA/R53kj+vaX8O/0fuMopCcMiR+LXCrkLeimZQPfPw19/m7d6f85UjvnXuQ4ZBs3sIv4Uo2/5/CieCsuSsPD34fYJmlbVvohmU72RtS0NAY0fmKogGsCaDj7y3SWTN0qgAWh1f8Nm1q9ePd1UN9ZNoWcGyHRh9lEBgHaQ404DsuYH+5ggReqGprr5oS9wnlM5SDDq7EYatxZ7E1m3O64HkpKKYshLrBXQ5G8qhB6JfMDAJk5LRCIQ6lMwnygp3tQK/oq9cBcbLyLNC/lRt5YIc6MIjhCn0KANyO/4spIJPHoJScus8qR+KshgK4+KPE4VwV4DjSIZgT7xqOfbakWUD0SLibeWVjzB34vElHpIJC6gLRqsgN+GMwvCCp19GW5QDU2FDg3A/GXRZZHkBcHWLNpEmfH//YWp8ie74ZgZPnOqVpBWEuKEAqSSvDZk3KAnK12ONGZiCU9AQ89FgvEWIBb1nlGo1SEtUYvUqvm4stBzo3JXU5/MpJ6Bt5csPXK3IgI6aL5xy2iMOVW6DDbA/ZE/PRlhvFiPg7rm73FpsVUSXUbojMCtKS+PKsQXwFa1Y9wmaF8GmUE2YNejlhISeklD74KCrMaISFCkjjAAlU/c0NhPezfKH4NRUern9cOkaTxNe7+FXlV7aCBG09Rznmp/pyw1HbwNG2HdMyghJkTMYQZILiKj42QA/4wA9nj8J6z5Pv4JH3Bi3xwAJFOYIgJ6H1cCs9cBo6MBYai8EkQLfZbg+CY8K6aCS2Z6wgnqgq+e+vaWOQQdRvRMGGgBZeoivLE7OuPiWHFnUrV0bRDKQupGLU/FlxgFNMO2YzuKcSCjuVEZIZMEioJIaCW3IbdzowfNVaOMsEcA3L2d+w5GsLUg8xDI4qsDrT79g/Cjkh0dfyIqAr7BopUra4l7wt0xDvxADlQ1ommNBR6TCAQJFAl8o7r6YOLo69aDqxE+ilveFZX6sg99AY01aFFzUS6RccWOSC9B661Xa4sq64BoKBmkDjc0h1aLAB94g1AzPoNSGHZE0KEYGSaGkrlT1l0hPl6RnZ7OfZwcxgtvoUVwG1q9ArX6CYjGhjgw6IGuY2i4ezRejNQfkh71GqTuPHlgdoSW+Y2sxSZYpKGz0esZLSZHNYx3e61Oq6dMzYGomiQ1rO0LHNIvcRch7OfJ3Sf41MMfav9JiU/1r/f5K/6P68UCYPhV/iTkXeZ6J4/y1HtC8CP78BOELcUdFDMPgzDCPAkq49s10LK5NEyeT3C+F8YTo4Bii+rtgIUDVwAXbHuDRUGiCOfSUjctWZLdI3CN3ErFj0R+vJZNsMe0qLANzJa/TvmpMLBQFtj8qpsskFDAO0p4yysDFEil1VEaU4yOZ4aiRzs4FmQNKnrJIU3qB+ca6KQiEByd/MFJSDiwOzMiuUOCiGylNEsB5juAAcxhqK5LctJUL6ZvI402Bs/jj7Gu0BrNvmkhHCRVWJrvw5deo5xjRik9D3YBYSCFOrpIp6YV1IZdJCQGaALUwENn0FofQe4AiJvXsyTlI66V3lQJDk0LQxYckpW7ozJBmxjwt+i3DzMUZvzxk97/fEXPzCKt3xk9OhpsaVx3BlU2LHFnK9ABmo8CQ04DUmgpmwQTn4Y69lvrVowxqjpRRxQCsZzyAnBLMRc2AIrqxuZFWID+zYWMZxujyf8WZCWkKl5HT+OHpW7D1lK2PEPHjmC5cNkNlwmTgzJ2NDJwd9NFRDRjOifyCjMmM4UBo5zjlqKouM4c+LDjw+QMxnbQ9aQ2O3VFv6cD7EC+zAj0XRV3tfdbY9AaJOO6MDxQWunI7LVY4QH/yt0dNwYUQSPGDArLMiED4HxgLcDWnDZmlRTOIM0MGxFJSdJVRIR7bOmEgvJH2gEt0CtVMB6co56pG0ItlMMakcvQwtucg4hxXmW+dTZCpDXP/elVtchbC4Xtrz709hbJWk/McWDcr0qOVAPMtDL4BBWbrIx00xay4B/rclwVpYnWNWaC8AGFhtZbcWpY/ST+AwcpUtjLb4RsFXeQfXH33JXoPxJzf8tilUKS5GTuvCN2gUBubh61IhJSQMcg5d5VuISLb2L3ew3gTFfhwJCARDvHBy5cqQJlIHrtDLhjkLswFEwqYzBfPC3SkbAObeppORI1ovU+rS6FzDV3ZFT+0C4fYS1dEOiPVcgMevVjx453WQNZ5ajNn05M5fmCjTVOSH1DOIGMqhyvnon47hjLoWmzp683pgh1Q69JN5auhPdzJc9viW/NItM0C+SUSUdt0SZYFvIGHAz6Bx54CEGla/dGmM0YqGmaFd5m4rSxMBnPSqF0rX2vIYVjWgnrnEOwBwwhbdQZThjEMANsgMrUDqWXzqCfGDrUX0rVFijtr3VTwgtTV9hirnblmejNXgjiUmNkvxwIBSBRRksr/IITSVngj66/b8UITwKUTOTI0PrMQVfTAwQyyiHAAbaBVKclwr1eRjBLUvhIlQuJap+ImjrTa1lgG71xlbFykA9JKwXpSTwslVrPyaxgxZNJ9NcT5Q2JfZTRH28ZAvOaGyK9ETDsjFYngWYVK7TW+481tpTLIsMo+9UaBELCB5bFd6ontEbvwzcg8d3KyNIp2p4CXpliSMrbIjTdcb0OHFMPVj7rEaP9edsBKflaxadGexWopwCgWp6EWuDg6l0sAuv63ANtLipE9GndZm0JUm4OjewDis5LNPOg+zydjuGHz3d92uSai6RmjgnQ4u691j20oMicNoiLFNT3oOwWEA1JuyutD2AyhWVLkga+BM/mdeQQDoB8HzfO5OWuMYjbEoel7qH3CnE/HdIyBQFgYcOhR8OWqRuTn9Nl7BmAhcXrS7gG0DG+V7hGDDuhJQMTqoRVQSFtCwgiayfReKgm8wO0OyxWbtjE4lcSlk4akMFhosFQigbDikzsWm1OUjZDgv1zSgQ0Lw3QMh7eaSkAUEFDQVB44kmbcKx6zaHjEYE3zVmrpvTn2Yyiy8Nj8VEXhImqDNisC50Da7c/4I9UDCQHfL49LRR8wd7Oa0MedPfJCyZUq9P+aUACrbXivlwgpKXJ+cGDRVtOaBLtoILjR+sMYKth37VWiAihejUcxoNyQET2/JTk2W7mH58wgveZ9+9TDLbR9E8zov3IhCA5KzHv3PvM2HuPxDMnAMf3dd0KRJAezfLrgAfCPmRgBvwpgRAdaATPi8ihwqaWOhkyron6SN1hujtTK+AZqgrNHKHEw3Qm8a04Asq6BN2cLHpNyS/5aG38fBaDWqQ6ogMUhJ90vGSLlav1ZYiJjtE+5NLjPKGKTZASRt5JAeelvFYwG4s+yFDMdVhZgIkppQJRBfvHng1SDyawmYDkLmlrOUGLGMXJK9YNPGfZf0oXjZFAgUNtYxYgIcNgT0yJdvbQRHYRHyAmpQZhz9wLHR6niwspAYZTlMt/nEbIT4SXX4wcmfxaOe+/Zk5Wrs7PYhp+1933GA3S4VmBhdMli+pwyAkYQRLjh+UpG0mdhqEcpYhtcY7IuBkDomBoZRQ+OXpmgpiiiX6KTgAfB3gyKuFVECQH8n9IPRSUomorbcB1iyTo/qE1Iq3gAMv4uhnT8cJrmqKnhll/pggZBnrzlc+4a5EE1d5FwSoViVFZz9onlKo1/hIR8nqo58JjgsyA5+XGH5P38bnM5Khl9yukqZX383HZfoVPOLUSIh0AO7SP9Spl7/hWqb2W1OaN/dNS5XQFXIv4n4Zxneuv9MutPzf+3pY+2t8K/nHrz32/d2Wa775oSMpUCwcX9/A2UZQYi0SRlOaqBxn6oE4F5f7nsh2+DZVFL1gUGp94q2sMBXBBVvWCqxtHRgUY0W4zBdLx0ThZsK1pk5x6X9oa+hg1+8VcuD+5DV7RniBMVIs82i01+Vi0Qj4YEyLypAOYqgIBBwiSVncnI09oGVr0wFyEbVG4TBfdYXHh2iiPDS52HMVqyO7V5tv0DlqapeHBQ27oiAVilRaEtPbt77GOjPLAeslDPCOqjR7YknCiUSSKovZD2tjECA3xRuoyMk5P30GW2kLDMpp2mhhHnyEAk4kg0hZqOwCN5oI3er5a9h/aCjIuCCsR7AJqQum3oeXQTSCl1ipiMKoBGptasQE2XqNUIR9y6ECZWyv4VNoJIBuKzRqADckRMSQcMp6BmSaj52GgjGL1YdZgrmNi5JrWi7VlhH3bKAA4FzHmQJH0WVvEIoR/defxt1f3z54IPOHG19A+BJzep9YS81tCRMmn4hKIXKkxXN98G6UVOJ6A53rPiZTIZLXkngUFOM+OiZsNPNLaklY74Q2soXdYZJx03Rbwk1B5M+0JQAfFNqnsvr+qgEbnDliAtgai6DWqMUBSBIZSEw7tpa21MMbCS4BYqMCorbelrWoGW+XvpMKMRO0D9Bft5wJEYWM/u54loFfxIuHiEzsGBtVB+yypV7rES51OOAcRW9U4t0iPoRQGoRnW/Xgcg4rnlOPqRruBwfRBr1A2RJJIroR4bQLM+55woLe1EYtmmirQdxuOYMj9PmBTcVqXasKMKIEAiDF6AOeZJDES3csv0QKvQHD0wXpKpROPrYULSEiPbTnKqOYeqPXP1lggBp9HCbBdy6AzmjoiAk0PFRT/FiNrKmPpqrRpKsBW2w6lMKALtJoWEgstfo6eokinbFgZn86dNrqrv1GCwQFJEcZnJQuDsxDb/Zi73BPVTwdiF4EumYSL5tSOGuDG34g0kXsGn8SJfJGhzSQxH/D23ImcLii70ctACrXYl2wMEdZWBCPYHAeTEOeIwoaUEfs89yatsSPmcPIFDGUPLoZKkKFaUsbnzOOGjI/QAgUT2VOPkIiEILGuJfiKK7uoQbAG6cr7nSRnST/5IHi7YFlOJ1f2dg4WVjRc7TYHGqW0ybvZdx5FhAxZ0zsHeamHMccKxdXa9MwI+ljSZtuH4eJlUHpYR+uBuAwtZF0pciOKMiKDwox37WBjlET5O3T/0g4L8kGPTNSqdX6gvuEPEWs5KhRBD5rQcpDJ0tokngR6Ydh0z9WDJiW5ge+OenCgQhti2A5Vn0zYiE3Tszbl8O28WxFlSezgra4eC4iUi54XhB4H7oiUzYzvlG2rWhMGBij3dj56VU87eebpG9lPDTqWRgVGYB2PdNvICaSCd9iXI5tDENbyLWGVg54colXBZO1wzecnsAAx5VvxtZKsiH7ZEPzLwjpPOUg5URkyDB9TTKIbnAxMqAe7PUfEAw09j4BEy6MdiN+mw2GUpA095g+zOCRH7ar8uOztJ8OrOEE9X4KupQGsB/QT7hp8xM9pgU0O5Bgk1qoeqdj47+oOOHcY+AInB8IOPW5oh1jeZk82EmmSAPEaHkobId8NdHL66765+6eeC+wY6w1hQ0kAws7awQDOY59yvDBzOSg2GgiYJM+mZ8+GH5Qs8/Vv6+VqLdjUHkSRzhe7taF9AOw3iLu8YYEOeAQFp+5VbIhpIl5wBPSl4gCuZvCQsgmMBkuKTcJYxSETqY17CoHT9m6UrKPlDQ3fLoiBvgNC8CARRtjyo7hPLQHvI28OmDC1tyH5WYPw2l+g/hKK2X0eW6xPEn6W7GLEDORtTY+Kww9tFT1ZZ/LxFCCW8qHBc1N6Hn7uqidZUDt+MbycBDTU/8DkaZWHmYPwpk2PUqFKLS+mM7Vm7rN/tyfwWXvAmZJyCLErz7Ps5ObxV+VEA02Rg3BAVbPQTCSD6aDj9WDe7kUCGpGIJ8kSdWNGF2HRuZ6Mq1h3LS+NSPiPCpLqeY+J+YwMUR/TgEARmCDtQzi1QIv3I/VuwyedOVw8pLQ63g5kC1o3jUDtTNQwYhSpy7ja9mMGmaByJ/PQdlLTvnTarmt9AEyWhMCyA2kDEagJqKTOhFJt6zlGrx3NjxfXQx4R8TTQgNTJ/GywNKwzIHr9wQm+BxfxRZwiINVy/NSCLV2OSAEgbMSYUXx4/kU9ICpMiy4Amwx50oMQwCeaUZsPF+cN9Xk9FJiMXl2tC/lftFDlx97Mq6xU+TyuHLPL4P45n4WiFPxfye5/6tX9u1/8f3ch2ozCdv8NJDsbalf18A8AAAGPaUNDUElDQyBwcm9maWxlAAB4nH2Ru0vDUBTGv6aKRVocdBDpEKE6iAUfIA4uVrEIFUKtYNXB5KYPIUlDkuLiKLgWHEQXX4P+AaKrg6sgCIog4uBf4GuREs9NAy3SeuFyfvlyzse93wWEc43pdtsIoBuOlU4mxOXsitjxBgFRRNCPUZnZ5rQkpdByfT8gwOt9nHu17mu6ImrOZkBAJJ5jpuUQF4knNh2T8xFxDyvKKvEF8bBFByR+5bpS40/OBY+FEGcrk54hjhKLhQZWGpgVLZ14ijim6gb5C+s1Vjlvc9a1MvPPyW8YzhlLi1SHaEeRhIYN6DBhIwcRCsr0rcFBnKpBio00dSUo2+Y+fZ6PRHOK58VoZhYl8pQ9B/C3+JuxnR8fqzmFybn9xXU/BoCOXaBacd2fY9etngDBZ+DaqM+XKMfJL9IrdS12CHTRPS9v6pqyB1ztAL1PpmzJnhSkLeTzwPsZPVcW6L4DOldr+fn/cfoIZLaA1C2wfwAMFsh7rcW9Q35+81iA9G+Pn+AvPJ900oEWoegAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfkAhwNJxt5dqCpAAAgAElEQVR42uzdzW4cV7om6i8yJat1yueYhnbv7tPe3ZXWDRRrIGjo1EADAgJMAZoXeQWmdAOSboCirkD0XIBpQIAGHDg9JDjYrBvQzjrdxv6pJszqXbUFWsyIM8hIi5b1w5+MjBWRzwMYtlWuTMaKyGC8+a31rQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYkcwQAAAAKbly8/pCRCy+8cdv+7OJL2b8I37/lj8bln9NHOxv7+w5mwjoAABACkG7FxG98l+P//Obofp94bst9iLi4Ng//6X858Ek4O9v7wxdNQI6AADAWUJ3v/z7J8cC9ptBnNM5KAN8xLhSP/l3FXkBHQAAmKPwvRjjavYkZB8P3n0jlIRh+ddeRPyp/Pve/vbOgaER0AEAgOYE8P4bYfsL4bs1JpX27ycBXsVdQAcAAOoL4L0YV74nlXABnEEZ3P8YEQPr3AV0AABgeiF8Er778XoK+iSYw4cclKF9EtgHhkRABwAA3h3CJ13Nj1fC56HTOfUYxHhq/JZp8QI6AADMaxDvxbjy3Y+I3x77Z6jLpML+bZgSL6ADAEALg/hkGvpiRPzu2D9TbdDcO+F/98dTvvbky5T36bdkHPfKsK66LqADAECjgngvVMSnGaqHMd5K7H2he9iUKu+xLvoRv16y8MU7/jwlw4jYioivhXUBHQAAUgtbi2UQP75enF8Gukl43ouIvxz758m+3fbwfvc1tngssC/E6y99UrjWJmH9sWnwAjoAAMwqJPXidSX8d/G6a7rgPfb9G6H7QHV1pgF+EtjrnLGxFxGPYzwN3pctAjoAAEwt8ExCzxcxv1XxwTvCt2p3M67jSWif9DyY5ZdKmzGeAj9wJgR0AAA4bRifBJj+HB3+z4E7xtPOBxERQlWrr/eF8hpfjPGXT/0ZXGOq6gI6AAAI48dC+PfHwvjQemHe+Fz0jwX2KmaLHJRBfdO1J6ADACCMtzmMD8u/9mLc7VwI57yfneWI+DKq6SS/GREPXZ8COgAA7QwUvXi91rbNa8aPV8OHZQgfuAKo8LO1cCys96f8uRLUBXQAAFoQGvpvhPFeyw5xWP41CeJ7OqKTyGdvEtaXpxjWBXUBHQCAhgSC3hthvN+iw5usCd+LiD+GijjN+myuHAvr07BRBvW5byYnoAMAkMpD//GGVW2qjg+PBfFBWCNOez6zCxGxEhFfTeHzehARj/e3dx4I6AAAMPuH+378soN0Gxyviu+pilfj3vNrVVwvw/Wl3aHRPdfn+as4f1V9GBGr8/rZEdABAJjFw/vCG2F8sQWHNQhT1M8aqnvxy4rrb+PXFdhUGv4Ny78mDspzPjFp4BcRsbe+tHsw55/1XkTcj/OvVd+KiLvzNttEQAcAQCD/sOOV8YHGbRH3nl87HrIn4fuTY+d6IdrxRcxZDY5dO385FvTnolJf3gPWYlxVP2tQP4hxNX1LQAcAgPkM5MMyXM3tNPV7z69NqteTEH48ePdd8VO7zobHAvygjeF9SkF9Y397566ADgAA7Q7kk27q35cBaW8eOkkfC+CTv//ujX+nXpMZG3+aXJdNnzpf3jPul2H9LAYRcbvtn08BHQCAkz5gL7cgkO/F6+r4oM3rW8sQ3ivP1WSN9+Qvmuf4l0l7ETFoYmgv16g/irM1k9uLiBttDukCOgAA73qQ7kezu6wfvBHGBy0M4b03QviiED5Xhsev8fWl3cb0RijvL0/OcK0OY1xJb2UfCAEdAIDJA/PiG4G8aVOdJ2Hl+xhPVW/NA/yxIN6P19XwvquWNxwc+wwkH9iPrU+/f4bjvNHGkC6gAwDMbyBfiPE000kg7zXsEPbeCOTDFgTxyTrwxRivCxfEOY/hsc/IVqpT4ssvB5/E6ZbOtDKkC+gAAPMVyvtl4PsymreO/HggHzR9HWq5RnwyJf2L0KCN6g0i4tsyrA8TuzedpYncQUR83qY16QI6AEC7A3nvWCDvNywAHg/jg4aH8X78cp1439VJzfYi4uvUwnrZjPLJKe5VrWocJ6ADALQvlB8P5E2qkrcikB8L47+L19PVQVg/+T3stFPeB/vbOzcEdAAAUgjkvWhmlbzxU9aPTVP/XTR7+zmY2IqIb9eXdjdrvq8tlCH9pNuxbexv79wV0AEAqOPhdbF8cG3SWvJh+fDfyEBeNnCbhPCmbj0HJ3UQEZsR8bjOqvqVm9efRMTKCf/z2/vbO1sCOgAAVT+kTsLhl2Uwb0KVfBi/rJAPmzTmZXW8H68buPVcicyprTKoD2q6/61FxKMTfqnQ6KZxAjoAQLqhvBevt0FbbsiPfbxC3pjtj1TH4USGEfGwjunvV25eX4nxlPcP3oP2t3duC+gAAEzjIbRpU9cn68i/bVJjt3vPr/Xil9Vxa8fhdEH9cURsznJv9VOE9MZOdRfQAQDqD+XHq+S9xH/cg3hdJd9qylTSY83cJtXxnisPpnI/eLy+tPsgsZA+jIjfN3Gqu4AOADD7QN609eSDiPg2GjRt/Y314/1o1v7v0DTDmOHU9ys3rz+KiLUP/GcP97d3HjRtIAV0AIDZhfLlY6E89Yft46E8+SqUQA7J3DtWZ9FM7gTd3RvZME5ABwCo7gGyF81p8rYXEV9HQ6rkb6wh74cp65CSQRnUhxXeXxci4rt4f/+IxlXRBXQAgGpC+R8i7cZjjVpLfqzL+pcCOTTGwyrXp5f323+Md8+YGe5v73wuoAMACOUpalTH9XvPrx0P5LqsQzMNo8Jp72WTzW/e85/caNIOEwI6AEC7Q/nxKvkw8UB+fB35sqsMWmUjxhX1qc/W+UDTuM397Z1VAR0AQCivQ2Omrpu2DnNnL8bV9Kn2uSjXo//jO+4hB/vbO58K6AAAQvmsDCehfH97Zyvl8Syr5JPGeX1XGMylu+tLuxtTvlf3Y9w07m1up35vFNABAJodyvdivA3aVspd11XJgXfYinE1fWqzfN6z9drG/vbOXQEdAKA5oXzhWCjvJxzKv47E15MfW0v+ZaiSA++/p01tynt5H/+n+HVX98Z0cxfQAQChfBwkU21KthWvK+Upryc/vt97z9UFnNBBRNyeVpf3KzevP4iI+2/5n36f8mwjAR0AmOdgPgnlK0L5mQP58S83+vHufYgBTmJ1fWl3cwr393c1jLu7v72zkfogCOgAwLyE8n6Mp68vJxgmJ53Xv025kdG959d6b4RygGmaSvO4Kzevr0TEkzf+eGt/e+e2gA4AUF8o70XEV5HmtOumhPLFeL0uf9FVBVRsc31p99z7ll+5ef3H+OWXsY1Yhy6gAwBtDOWpdmBvSii3nhxodEh/x1r0T1Pu5SGgAwBtCuYrkWaztyaF8sn4WU8ONDqkl2vRf3zjj2/sb+8MBHQAgGpCeT/SXFeefCjX5A1ogIfrS7sPzvE74s190ZNvFHfBOQcAGhbKe+UD1x8ivenXWxHxdUNC+bKrCUjc/XvPrw3P0d392zcCevJfRKqgAwBNCOWTYDlpVpZaKE92SzShHGiB2+tLu2f64vPKzev/FK+/zE2+k7sKOgCQcjDvR5pT2IVygNl5UlbS9854v14r/zn5CrqADgCkFsp7keYU9r2I+LoM5UOhHGBmFsqQfmN9afe0X4p+eyygJ09ABwBSCeaTUN5P6McalqF8UyinBQ5i/EXT2+xFxF+m/H6fxNu3OlyI9LZAJH2LEfEkIk41RX1/e2dw5eb1g6Zcd9agAwB1hvLFiPgq0prCfhARmzFu9raX4rjZEm2u7ZXX6Juh+s3wfXDG6cB1XdP9Y//ai9ezZ3577J/7Tj8RcXd9afdUndiv3Lz+TXm/jP3tnaQzsIAOAMw6lE+qvl9FOtWMJmyLJpS317D8KyLi+7f82d4ZpvW21r3n13rHQnwvXlfqjwd72u33p/kC6srN62sR8agJAd0UdwBgVsG8H+Mp7CsJ/VipN3tbjNdN8gSPZppUtg8i4o/lnw0iItaXdgeG5/TWl3aH8frLi3d9bhZiXHGfhPfJn9EOTyLi96f47xvzWVNBBwCqDOULZSD/KqGAmXqzt16ku8877374nwTwnwN5k6aYz4OyZ8NiGdx/eyy400wP15d2H5zi91ERYYo7ADCfwbwfaVXLk15XXgaHSSgXGNIP4ZOKuKnn7Qju/fJz97syvPeMSmN8Xs6oOMnvpe8iom+KOwAwL6E8xWr5VhnKU11XvhI6sKdkWP71fbyuhAvhLVcuNRgc+1xOpsd/Uf7dl2bpehIRN0743+5FAxoNqqADAOcN5v1Iq1q+FxGPI9115ZPx0uwtjSA+jIih9eC85zMrsKftxkk+v+VWnk9U0AGANoby1Krlkynsj60r5w2DGH9p86cYV8MFcU6lnEGxVf41+Tz3Yzz7pR++aKvbk4j4/AT/3bAJB6OCDgCcJpj3I61qebJT2Muq23I5Xn1XT+WGZRCfrBHfO+naVKZ+n1iOiL0Uvyyr6LNuC8T6ra4v7W5+4LpciIgfNYkDAJr+sJ3avuXDGE9h3zSFfW7tldfBH6OskFsnntx9Y7Iv+cRCGdpb3dm+3OLtK5//2f9eWF/a/fwE12UhoAMATX3A7pUPmisJPGhOppg+TrQLey9MYa/swbsM5N+HKepNv6f04/Vskk+inO3Q1tB+rLK+4uzPxEmq6P+0v73zecoHIaADAG8+wEyCZj+BH2cQr/csT7FantJYtcFBec5VxucrsH8Zr7vmty60H1vuksospLbaW1/a/f0Hrrnv9rd3bqR8EAI6ADCZxr4WaVSAU2/4Zgrr9Azil9XxoSGZ63vQcow7pU8+W4NjoX24v70zaEFYd/+o1ns7ugvoAEDqD8X9SKfp2yDGDd82E3yoVgE7v2GYqs7J703varx2PLQPmtqIrrynrEQ6O2G0xeb60u7qe66rlRR/xwjoAODhdyWRsJl6tbwfaXWtb5K9ODZdXXWcCsL65B4yiPEXP4MmTo0vl8r48m96Pn3X0pgrN6/3U5+JIaADwPw85PbidcWm7qmVg0i7Wj4Zp54r51Tn9PtJMLd2nIruYyvHwvrbTAL7t9GwCnv5heD90NPivO6uL+1uCOgAQKoPtP1IowqsWt7OQD4wXZ0a7mu9ONnOCZOZHF83pbouqJ/bO5vFXbl5fTH160BAB4D2PsCuRBrTJvdivG95cp3YVcsFclpzrzvJbgqT7Rq/3d/e2WpAUF8pg7p70+l93tRlNQI6ALTrQXXSjT2Faeybke6+5f1QLRfIadv97zSf60lY/zr1Kc/3nl97kMg9vUneOc1dQAcAZvFgOtm6p+7AOYxxtXxTtbxxJlOBvxXIafj9sBfjyvNJ74fDiPi6vG8NEw3pCxHxKHypeFJb60u7twV0AGDWD6KTrb/6dT8MxbgSldy0UfsOvzeUbMXrKrmmbsx7UE/6Xlbez/plUNfx/QPWl3YbmXUFdABo3kPnZE/uutcmpt70bSVsXfTm+RpE2d3atmfM0T1zsQy1/VP834YxrqpvpDYbqLy/PSh/B/BuN5o4G0hAB4DmPGT2Io1t0oYR8TDSbPrWi9dT/VXLX68j31pf2t0zHMz5PXS5DOq9U/zfkv0ispwd9CR8CfkuD9eXdh8I6ADAtB8qU1lfvlU+pA5SG6N7z68tx7g51PKcXy7D+GWV3LR1+PU99UGcrfq8GREPUwrq5dr0+zFuDsovDdaXdm8I6ADAtB4i+1H/XrgpV480fSsfQo8FclVyONn9tRfj6vNZ7q8pBvXl8njMHDqmievQBXQASO/BcSXqX18+jLSnsd+P+W36NgxVcpjW/XYtxtPeT+sgxjtWJLNGvbw3fhOmvB/3+6Z9cSmgA0AaD4mp7F8+iHFlaJDaGJUVohQ61tdhrwzk1pLD9O+/51nLfRARd/e3dzYTuU/aju2Xbq8v7W416QcW0AGg3gfDXtRfDT6I8fryh6axJ+N4x/UtVXKo/F583mA7KIN6El+g6fL+s8Y1ihPQAaCeh8EUGr8NI9FthOZ0GvtwEsqbVvGBFt2bV2JcTT9zINzf3kkiEJZbTT6Z81O6ub60uyqgAwDvevjrR/2N3/Zi3PRtM7Xxuff8WgrjM+tzYeo6pHWfXoyI7+LsXw7uRcRqCtX08p76Tcxv87jGdXIX0AFgNg98KzGumNfZvCfJbdLKaezLUX9jvJk9MB4L5UOfDkjynt2L8zdcu7u/vbORwD32vF84NNlwfWn3cwEdADgezOsOnpuR5vryXrxeX972B8etsJ4cmnb/XiiD7eI5P/urdS8jmueQ3rSt1gR0AKjmoa7ujuzJbQH0xoNi3evvZzH+WxHxvVAOcx/ShxFxu+4p7/Ma0gV0ABDM6wzmwxhXyzdTG5852CZtEso1eQMh/W33h9X97Z1a7w3lmvTv5uwUNmovdAEdAM7/8NaL8TT2lRp/jEFEfJ1oMF+J9q4vF8pBSD+N1brv03PY3f3G+tLuQEAHAMF8FlJu/Fb3bAKhHEgxpG/sb+/crfke/SDmZ590AR0AWv6Q1o+IP9QczDcj3cZvbdy/XCgHprEF28/38P3tnVr35773/NqTaHcvkEYG9As+ZgBwqmBe5x7dB2Uwf5xgMO9H/V9aCOVApfa3d/au3Lx+O86/jnvlys3rUXNIvxvj2QCLzmw6VNABoBnBPNWO7HWPjVAO1PF7YS0iHk3hpWqd7j4nnd1NcQeAljyA1d11fBgRDyNiK8FgvlKOTVsqL5NQvunKB074O+K7Kf1+qLVx3Bw0jRPQAaAFD179qLcqPEyxI3v5MFf32Ex1nMM+5cDZfk8sRMQ/xXSqz7fr3ILt3vNr38S4d4iALqADAAA0MqQvR8Q3U3ipg4i4sb+9U8t+3eXOG9P6skFAP4eOjxUAAMDplVXvaVS+FyLiSVmVn7lyFtGqMyqgAwAANNndGFfAz2sxptN47qwhfSsiBi08P0MBHQAAYA6U214+ntLLrZTT5uvSuir6+tKugA4AADBHNmI6VfSIeqe6D8tjQUAHAABonnIrzGlV0Rei3m3PHsb0vmyo21BABwAAmD/TrKIvl9t9zlzZMO5xS86JgA4AADBvyir65hRfss4q+jS/bKhT445BQAcAAJiOaVaee1duXl+p4yDKKvpmC87HHwV0AACAOVR2dN+a4kver/Fw2jDNfSigAwAAzK9vp/hadVbRh9H8KrqADgAAMMe2pvx6f6jxWL5u8olYX9odCOgAAABzqmwWN82Q3r9y8/pijQF32NBT0cifW0AHAACYrm+n/Hpf1XgsTa2iC+gAAADEYMqv16/xWDYbeg6+F9ABAADmXNnNfTjFl+xduXl9uY5jKZvF7TXwNDTxZxbQAQAAKjCY8ut90aJj8TML6AAAADPzxym/3nKNx9K0dejD9aXdAwEdAACAiOlPse7V2M19LyKaFHgHTb1oBHQAAIAp29/eqSIk9oXeE/m+qdeNgA4AAFCNaVed61yH3qTQOxDQAQAAOG7a09wXW3QsVRmWnecFdAAAACrTq+uN15d2Bw0Zo60mn2ABHQAAoBpTnxZ+5eb1fo3HszePYy6gAwAA8Da9Gt97mPrgrC/tqqADAADQ+oD+x8THZqvpJ1dABwAAaI5PanzvYeJj862ADgAAwNtUsWa7zk7uqQd0FXQAAADe6sDxzC6cry/tNn68BXQAAIBq9Nt0MOtLuyl3cf+2DWMsoAMAADRHzxC81VYbDkJABwAAENAbHc7bML1dQAcAAOA0Upzm/nVbBldABwAAqMZvK3jNuivFqVWqD9aXdrfacsEI6AAAANXoVfCae4b1FzbbdDACOgAAAE31WEAHAADgQxYNQaUG60u7QwEdAACAD1kwBJX6um0HJKADAABM2ZWb16uqnn9f86Gl8qXDcH1pd1NABwAA4EN6LT2uVKbtf93GwRXQAQAAmhNkDwxtRERsCOgAAACcxBcVva5t1iI215d2W/lFhYAOAAAwfVVV0Id1HdC959d6iYztw7ZeNAI6AADAFF25eb0XFTVT29/eGdZ4aCkE9NZtrSagAwAAVKdfVTit+bhS6OD+sM0XjoAOAAAwXVWtPx/WfFx1d3AfrC/tDgR0AAAATqpf0ev+sebj+qTm93/Y9gtHQAcAAJiScv15r6KXr7uDe50V9NZXzwV0AACA6Vqu6oX3t3fqDqi9Gt/74TxcPAI6AADA9FS1/nyrzoO69/zaQo0BfS6q5wI6AADAlFy5eX0hqqugf1/z4dU5vf3hvFxDAjoAAMB0LFf42oM5DehzUz0X0AEAAKbny4pe92B/e6fuBnG/q+l9H87TBSSgAwAAnFPF09u3EjjEOiroc1U9F9ABAACmo8rp7d/WeWBlg7g6AvrdebuIBHQAAIDz+0OFrz2o+djqCOeb60u7e/N2EQnoAAAA53Dl5vVeRPQrevmt/e2dg5oPsT/j9zuIOVt7LqADAABMx0qFr/1tAsf3xYzf7/H60u5QQAcAAOC0qpzeXmuDuHL9eX+GbzmMiI15vZAEdAAAgDO6cvN6PyJ6Fb385hxOb3+4vrR7MK/Xk4AOAABwdl9V+NrzNr19sL60uznPF5OADgAAcAZlc7iqtlcb7m/vpLD/+fIM3+vuvF9TAjoAAMDZrFT42rWH83vPry1GddP337Qxj9uqCegAAADndOXm9YWodnr74wQOsz+j95nbbdUEdAAAgPNbjoiFil57b397Z5jAMf5hRu9zd54bwwnoAAAA53O/wteuvXp+7/m1XkQszuCt5r4xnIAOAABwRlduXl+J6tZmD/e3d1IIrLNqDrfqihLQAQAAzqrV1fPSLKa3P1xf2h26nAR0AACAU7ty8/pyVFc9P4iIzbqPcUbT24frS7sPXFECOgAAwFlV2rl9f3vnoOXHOGFqu4AOAABwNuXa836Fb7GZyKFWvf58Y31pd+CKEtABAADOqsq155spbK127/m1flQ3hT8iYhj2PBfQAQAAzqrizu2RUGitujncqj3PBXQAAIDzmIfq+UJErFT4Fqa2C+gAAABnN0fV8yrD+TBMbRfQAQAAzqn11fNSld3bTW0X0AEAAM7uys3razEH1fN7z69Vub/7Q1PbBXQAAIDzhPOFUD0/r731pd0HrqaTuWAIgFkYjfIfI4qLRiJZf+l2u5+l/APmef6iKIq/d6rmQ7fb/dgonOTeOvprRHxkJJiBP6f+e6IiaxGxUOHrp1I970U1+7sfRMSqj4+ADszu4fCHiPhk8oBYFEUnIrJj/1yGq5HBSlin00n+Ab8oir/P8/w3ztZ8ePXqVfH637Iiy6KIiMiybHIz+Skie9Xtdj6d86H6KM9zX34yi98Tn8zbMV+5eb0X81M9r+o4H64v7e75BAnoQHVh/O8iolMURacoik6e5wYGqFiRFcWvvvi7OAnyWZblkWVFFpFHxE+q78CUPKnwtQ8i4m4KB1nh1mqD9aXdDZeRgA5MSTml+LMiolvkRSfP88yoAMnF96LoRFFEEdGNiIuT0D6utmd/U2UHTuvKzevLUc2U74nH+9s7qXQ0X6vgNQ8i4rYrSUAHphPK/6Eoiu5oNNJIEmhsaC+r7Quvjo7yzjis/1VYB04Qzhci4lGFbzGMiCQqy2X1vIrmcLdtqSagA+cL5od5nndHo1HXaAAtS+tZXhQXImLh6OholGXZUZZlP3Q6nasGB3iLqrdVu5tY9XzaTfA2bKl2dqpjMOdGo9Hhq6OjfDQafVQUhXAOtDyrF508zz8ajfLeaDT6Kc/zF0YFmLhy8/piVNsYbrC/vbOV0CFPu3q+t760e9eVJKADZwzmeZ5/FEVhbTkwb1E9y/P8oqAOvOFRxa+fTHi99/zaSky3em7d+RSY4g7zF8z/WhTF5TzPfUEHEEWW58XFiKw3Go1+6na79hSHOXXl5vW1qLYx3Mb+9k5KW45Ne6bA6vrS7tCVdD4e0GFO5Hn+YjQavcrz/DfH9ycHYBLU84tHR0ejcktJYL7C+UJUO7V9GBEPUznee8+vPYjprrPfWF/a3XIlnZ8KOsyB0Sj/cZTnn5jKDvCBmF4UnaKI/3c0Gh12u91LRgTmxpOYfrO045JpDFdB53brzqdIFQ1aH85Hh3k+WhDOAU4c07M8zz86Go2OjAW0X7nn+XKFb5FaY7hpdm4/iIgbriIBHThZOH+V57n1lABniel53j06OhppIAetDucLMa6eV+UgIlZTOd4Kquf2OxfQgZM4Go2O8jy3jAXgPCF9vC3bb4V0aK2qp7Y/3N/eGSZ0vNOsnt+13/n0mfIKLQ3nRZ7b05wT63Q6r1LvXj0ajf6a5/lvnC1qeWDKsrzT6fyp0+lcTexz8VOe5xedIWbwe+Jv3W734zYdUzm1/ZsK32Jvf3vn96kc773n13oR8U9Termt9aVdW6pV8VkzBLx9TK4AACAASURBVNAuo9HolXAOMF0q6dAuM5jaHpHQnuelaXWp34uEpu0L6EDK4fzQtHaASkP6/zAS0ApVT23f2N/eGaRysPeeX1uMiJUpvNRBjPc7t+5cQAfeH87zHzWEA6g8pHdHo9FPRgKaawZd24eR0J7npUdTep3V9aXdPVeRgA68R57nL/Ii/8RIAMzknntxNBr91UhAI8N5L6qf2r6ayp7nERH3nl9bjoj+FF7q7vrS7parSEAHPqAoiv9un3OAGYb0ovi/rEeHRpqrqe2laVTPN9eXdjdcPgI68AFlZ2vrzgFmqSiyoij+wUBAc1y5ef1BTKeS/C57+9s7STWGu/f82oOI6J33uCK9hncCOpDqM2Jx2SgAzF451f0HIwGNCOf9mF4X83dJqrN5ua3aV+d8mYOIuKEpnIAOnMBoNDosisLnGKAmRVH8V6MAyYfzWWyp9nB/eye15mmP4nzT+YVzAR04jbwoLhoFgFoDekfDOEjekzj/NO/3Gexv7zxI6YDvPb/Wj/N3qr+rY7uADpzQaDQ61BgOIImQbqkRJOrKzetrUe2WageR3tT2acwYeLi+tLvpChLQgRNSPQdIJqB3RqP8RyMByYXzxZje/t/vsrq/vTNM7NDX4nwzBjbXl3YfuIIEdOCk4TzPVc8BUgrpUfzfRgGSCucLEfFNxW+zsb+9k9S+4PeeX1uM8zXD21tf2l11BQnowOkCetcoACQU0PO8a190SErV686T21KtdJ4ZA3sRccOlI6ADpzAajX4oikJAB0gtpBfFZ0YB6jejdee3Uzvue8+vrcXZ93k/iIhVHdsFdOD0/rMhAEgyoF8wClB7OO9H9evO76a27rzc8/ysU9sn26np2C6gA2d4AFQ9B0jz/twZjUY/GAmoLZz3ovp155v72zubCR7+kzj7nue2UxPQgbMop7f73AKkyywnqM835wipJ7EXEcmtO7/3/NpynH1q+6rt1AR04Oz+zhAApMuXqFCPKzevP4qIxQrf4iAibu9v7yS1Rvuce55vCucCOnC+Bz/T2wHcp4FfW6z49VPc7zzi7FPbN22nJqAD537w85kFSN1oNPqrUYBWSW6/84iIe8+vrcTZutUPhHMBHTj3A1/+Y0SRGQmA5H1kCKA1Binud152bT9Lt/q9SHCLOAR0aKDiN8YAoAF3a9PcoS2S3O+8dJap7Xsx3k7NXucCOnDuBz6fV4CGBPQw2wna4UZqTeEiIu49v7YWp+/afhARt4VzAR2Y3hOfBz6AZtywM/uhQ+Ot7m/vJLc3+L3n1xbj9FPbD2JcOR86rem7YAigKfnc1j0ADfKJITiNrMiyKIxD0ufo1Rwd7Ob+9s5moj/babdUm4TzPdewgA5MyWiU/5jno/l5BMiyPMuyUUT8FJG96nY7n7oKaJOLFy/OxYyYsor8SUR8VER0irzozFGzS43iTnXfj+LChQvW7pOCwf72TpIdzu89v3aWvd5vC+cCOjB1xcU5eDorOln2KsuyHzqdzlXnHJqv2+1+9uaf5Xl+mOd5t+2N1PQNgUYaRqJN4e49v7YcEWun/L+tri/tDpxWAR2YvhZXYrKi08mOut2uahPMgU6ncylivFd4URSXW7t8R98QaJqDiLidaFO4hTj91PbV9aXdTae1gb8nDQE0I8W28qCyLO90sn8WzmH+dLvdjy9cuNDNOp1Wrt/RyR0a526KTeFK38TptlQTzgV0oNoHvfZVmMbhvPOnt02BBebHhW73QjtDugo6NMjDVJvC3Xt+7UGcbks14VxABzh1PC+yrPN/rDUHfg7pWZa37bhstQaNsLm/vfMg0XDej4j7p/i/bAjnAjowA22bKjlec64zO/BalmX/0sLDstUapG0vIu4mGs4XYjy1/aQ215d27zqlAjowm4jenoCeZYU158Cbut3uZ21djw4kaRgRN1JsClc6zbrzzfWl3VWnVEAHOP1NJ8uOjALwNlnEv7bskC46q5CkZDu2R5x63blwLqADs9S2NYxZlv0vZxV4m263+1nL1qJrFAdpupFqx/ZTrjsXzgV0oAatWcNYdm7XGA54333CNHegSqsJh/PTrDsXzgV0gPMHdKMAfMBPhgCoyN1Ut1MrfRcnW3cunAvoAFMhoAPvlWXZvxkFoAKb+9s7G6n+cPeeX3sSEYvCOQI6MEuvDAHw3gcTy2CAasJ5sqH23vNrKxGxIpwjoAMzlgnowIfvFC1ZDlN4zoIUJLvXeRnOFyPikXCOgA7MXLfb+dQoAHOjKHRxh/rD+Y2Et1ObNIX70Lpz4VxABwAAaKyDlMN56buI6AnnCOgAAIBwXpMTNoUTzgV0AACAxofzvVR/wBM2hRPOBXQAAIBGW008nPcj4olwjoAOAAC0PZxvJRzOezFuCvc+D4Xz+XbBEAAAAC0I58OEw/lJOravri/tbjqV800FHQAAaLSUw3npm3h/UzjhHAEdmK08z18YBQBgnpQd2/vCOQI6kJSiKP7eKAAAcxTOV+L9HduFc37BGnQAAIDph/PleHfH9oOIuL2+tDswUgjoQF0+MgQAwByE88UPhPMb60u7e0aKN5niDsxM4Z4DALQ/nC9ExHfx9o7twjkCOpBIQC8K9xwAYF7D+Z5wzoeY4g7MMqFno1H+Y7fb+dRgAAAt9K7t1Cbh/MAQ8T6qWcCsU/rHxgAAaJv3bKcmnCOgA2nK86JrP3QAoGXh/FG8fTu1LeGc0zDFHRLX7XY/fvXqVdGeIyqyoij+uzMLALQknK9ExNpb/qfN9aXdVSPEaaigAzOX5/mFPM8PjQQA0IJw/rbt1DaEcwR0oDFGo/ziaJT/aCQAgIaG83ftdb66vrR71wghoENLZVmWt++oiizP809Go5FKOgDQxHD+3TvC+aYR4qysQQdqDunFR0dHR0dZlv1rt9v9zJgAAA0J58f3Oj8Ie5wjoMP8JNlWH1xRdIui+G9Ho9FRJ8tGnU7nklMOMEe/5IrIjo6ORkYiIsuyo2636/dguuF8IcZ7nQvnCOgwx7+s86Iouq1/QMvz7iii++rVqyLLsryc2l9ExE/zcJ673a494oF5jehZUURmHCKyLDMOaYfz7yKid+yP7XGOgA7z+OQydwdcFJ2iKCZ9Mi7OwzH/cju9rMiy8XmffFGRZVlRFPEf3W7nUx8JAKglnC8e++NBRNwWzhHQYf68ioiPDMM8eV1NOvZFRUTER5MZBpFlRRaRR2R/E9oBoFJvhnN7nFMJXdyhAbIs+zejwC/ie1F0ijzv5nl+Mc9HC69eHeVHR0dHo9HoMM/zF0YIAKbj3vNrT94I5w+Fc6qigg4N0Ol0rr56dZRHFNal8a7InhVFdMteBZ8fHR2Nsiw7yrLsh06nc9X4AMCZw/nKsT+yjRoCOhCRZVFooMOJ4/p4Df9HEfH50Wh0lEX276bBA8CZw/lBjNebD4wMVTLFHRoT0DPbz3C2sJ7n3TwfLYxnwI/+akQA4FThfBjjTu3COZVTQYfmBPTCKHCuoD6uqv9mPP29839U1AHgg+HcNmrMlAo6NMcPhoBpBfU8Hy2MRqNXGspBhXyxCk0M5yvHwvmmcM6sqaBDQ3Q6natHR0ejN7bcgjPL8/xCZFlvNBr9tdvtfmxESEVb7nPjbRCBhoXzJ+W/Plxf2n1gVBDQgXc/7GVZLqAz5SSU5UXxm9Fo9Krb7V40IAAI5zq1Ux8P+tCwgG4UqEKe5xeOjo5GprxTN40MgRrD+UFE/F44R0AHTvaB7XQuRVjTSDXGa9Pz3wrp1OwjQwDUEM73ynC+Z1QQ0IETyzqq6AjptPoa7BoFYMbhfCvGzeCGRoW6WYPOXHj57NJiRAwv3zpsfBfOTpaNRhEeYJlJSO90OleNCLMyGo1+yPO8TcUDM54g/XC+sb60e9eIkMyzviFgDsL5SkT02hDOI8pp7rbuYYYh3WgwwzT7X1p2SK+cVUg6nK8K5wjoMNtw/igi4vKtw61WfXCz7MjZZSYhvSj+h5FgFkaj0Q9FnpsdBMwinD8KzeBIlCnutDWYL0TENxHx9eVbh228+f45Iv6bM03lIT3Pu6PR6Kdut6txF9Vea0XxX1t4WH9xZiG5cP5VRHy+vrR7YERIkQo6bQznixHxXYvDeXS73c+yTmfkbDMLeZ5fHI3yH40EVTkajY6KomjdM0m32/3M2YWkwvkXMW4GJ5yTLBV02hbOl2O8puhuW8P5RBbxr4UqOjNSFPn/YxSoLJy3cmq7XiGQWDhfWF/aXTUapE4FnTaF87UYT2tvfTiPUEVn1gG96IxGo5+MBNMyGo3+enR0NGrruvMs08EdEgnnyxFxsL60u2E0aAIVdNoSzp9ExEpErM5DOP/5AVAVnRnK8+KCrdeYRjAvIv5T3vaGcHbbgFTs2d+chj3fQ6OD+UKM15svzls4P/aw+yrPc1+2MROdTudVXQ3jRqPRX/M8/00bxvHixYtz8ft3NBr9EBGfRMRHRUSnKIpOFEXmszLVMf4pz/OL7k6uHaAdPNTT5HC+GOMp7b15DecREVmW/c/Ist68PPRSrzzPL6qin9+rV6+KOble5vYcZyroAJyBNeg0NZwvx7hyPtfhPCKi0+lc7WTZf7gqmJWiKP7BKMAHPyf/2ygAIKAzD+F80gxuYd7D+US32/240+kcuTqYhcladCMB75IVtlgD4CxMcadp4XzSDC6E81+F9ItHR0ejNu4lTGqKrCgK4QPeFc91cAdAQKflwXwhxlXzvnD+bp1O50+jPLceneojelH4/QHvDOiZLTABONvzvCGgAeG8F+P15sL5hwP61U7W+UuE5kRUHtA7ZYdu4Nd+MgQACOi0MZwvRsQ/xngbtYiIu8L5+3W7nU87HSGdmfjPhgDedh/ufmwUABDQaVs4X4lx5Xyh/KPNy7cON4yMkE4aiqLoGgX4JdPbARDQaWM4X4uIJ2+E81Ujc9qQnv1zlmW50aCigG6aO/w6oLvnAiCg06pw/iQiHh37I+H8zCG9+1mn0/lT1umo6FCVvzME8At/NgQAnJUuvKQUzBdiXDVfFs6np9PpXI2IGI1GP+V5cSFCh3emp4gwzR1KWZbl9j8H4FzP7oaAhML5d2+E8z3hfHq63e5Hprwz9YBeFH6PwOuAfmQUABDQaXo4XyzD+eLxcB4RN4zO1EP6ZxcuXOh2u92fItNAjqkk9Mw6dPg5oPssAHAupriTSjhfeDOcX751eGCEqtHpdC5FRIxGo8O8KC5GYdo75wol1qHjc9DpjCZLigDgzM/phoAaw/nKW8L5gXA+O91u99LFCxc6nU7nJ1PfOavCFzwQWWT/bhQAOC8VdOoM50/e+GPhvMagHhExGuU/RhQf53nR1UyOUwR0jeKY73CeZXm32/nUSJxrFIssC0uvytuqIQABHWYZzh9ExP13hPM9I1RnUH/9gJnn+WFRFJ28KLqmwAO8N6C/NArnHcMoLly44Ms+QEA3BMw4nD+JiJW3/E+rwnlaJuvUIyLKJmB/V0R0i6LoCOwcp5M7cx7O8263+7GRAEBAp0nBfCEiHr0nnG8ZpXS9ua9vnucviqL4+4j4qIjoRFFkRRGZafHzazQa/WD/Z+Y0oP+LUQBAQKdp4fzNbdQmHl6+dbhplJrlfZ2Ky3XsF7Msu3i8eVhZZRXg31BEZC2ZkfCJs8kc3guPfDEFgIBOW8L55uVbhw+MUrtolHQ6o9Hop7woLrbgUC46m8yVLCuyLPufBgKAabJukCrD+eJ7wvnW5VuHq0YJ2hNXDAFz9QCVZf9h33MApk0FnarD+cJb/ue9iBDOAWhmOO90XmkMB0Alv2MMATMO58Ow1zm0TuH3CXMiy7JRt9v9yEgAIKDThHDef084P4iI28I5tDGh6+DPXITzvNPp/H9GAgABnSaE85X3hPMow7m9zgFoajj/k3XnAAjoNCWcP3nPf7J6+dbhwEgBIJwDgIBOfeF8w17nAAjnAPB+urhTdTjfunzr8K6RAqBx4bzTGV3odj0rATAzKuicJ5w/+kA4t50aAE2M5kWn0/lJOAdAQKcp4fxJRKy95z9JvmP72p2rK2t3ri46mwD8HM3HU9r/0u12LxkNAAR0mhLOVz7wn924fOtwmHI4j3H1f8EZBaCsmr+6cOFCt9vtfGo8ABDQaUs4X015O7Wyav7E2QQgIqLT6bzqdjvDbrf7kdEAoE7WVjHtcJ50x/YynH/nbALMu6zodLKjiPhzt9v9zHgAIKDTtnA+SLlj+7Fwblo7wLzG8izLsyw7yrLsB1unASCg09ZwPoyI2wmH84Ww5hxgXlN50cmyUUT2V+vLARDQaXs4T7pjexnOv4sIHdsB5iaTZ3k2DuV/E8oBENCZl3AeEXE35aZwEfGNcA7Q7jAeEUX595+63e7HRgUAAZ15DOepN4V7EhF9ZxSg0RG8yLIo3gjjRVEUr4RxAAR0hPOxvcSbwj044XEAzFSn0/mbUfhAJM+yf9PEDQABHeH8ZKH2ICJuJBzOVyLivjMKpEjVFwB4m44h4AzhPCLtpnD9GHdsBwAAENBpdTh/ePnW4SDRcL4Y46ZwAAAAAjqtDudbl28dPkg0nE+2U7PXOQAAIKDT6nA+jIhV4RympygK92EAAAR04fxU4Twi4XXnEfEo7HVOM2WGAAAAAX2+w/mDU4bzh5dvHe6leCy2U6PJikJABwBAQJ/ncL4Sp9uCbJDwuvPTHgskYzQa/RBRCOgAAAjocxzOT7MF2UFE3E40nC/GeGo7NNXfGQIAAAR04fykklx3rikcbVAURbc1B5NlhTMKACCgU10430h1v3PhnKYbjUY/tCmgZxG5swoAIKDz4XB+lqnge5dvHd5N8XjW7lx9Ejq203BFxH8xCgAACOjzF87PUm1Odb/zldCxnYYbjfIfizzvGgkAAAR04fxD7qa4pVrZFO6JM0uT5Xn+Ii/yT1p4aD85uwAAAjpvD+cLZZg9bTgfXL51uJFgOJ80hYNmh/M8/20UtlYDAODXLhiC1obz7+L067QPItGp7aEpHA03GuU/jvL8k7aG8263+7GzDAAgoPP2MHuWJmoPL986HKZ2MGt3rj4KTeFobDAf/RARf5/noxbfb22xBpxPURSdV69euZckrNPp/M2XsSCgc0ovn106a4fzrUSnti9HxJozS5Pkef6iKIrPiohuPgfN4LIsPFQDAAjovCWcr5zh/5rk1HZN4X5tNBodRoT1y4nm1KIoOkVENhqN5uscZSroAAACOsfD+Uqcffuxu5dvHR4kFs7P2uTuNAYbT18MmnSei6K4UBSF5o6klc8jcqMAAHB+HvTbE87PWmkeXL51uJngYVW97vwgIm67emAqbLEGACCgU+51ftZwnurU9pU4+2yAk7qx8fTFgSsIzi/Lsn8zCgAAArpwfr69wZPr2r5252ovxtXzKt3dePpizxUEUwnneafTuWokAAAE9HkO5+ddoz1IsWt7RHwT1a4739p4+mLDFQRTS+gaxAEACOhzH87Putf5xN3UjmsG+53vRYJT+qHR+TxiZBQAAAT0eXbeIPvw8q3DpKZ4z2C/84OIWLXuHKbufxsCAAABfS69fHbpQZyvgdowIpKa4l2uO696v3PrzmHKsizLu93uZ0YCAEBAn8dwvhIR988bVFPb8zyq3+98a+Ppi01XEEw9oJveDgAgoM9lOF+M83c3H1y+dbiV0nGt3bn6ICL6Fb7FMKw7h6oi+t+MAQCAgD5v4XzSFO68VeakguranauLcf4ZAR9y27pzqCCaZ1ne7XY+NRIAAAK6cH56ye15HtWvO39o3TlUFtBNbwcAENDnzjS2HhtGeo3hHkS1W6oNNp6+eODygcoC+v8yCgAAAvrcePns0lqcr2P7xMOUGsOt3bnaj2qnth+EdedQXTjvdEadTueqkQAAENDnJZwvx/mbwkWMG8NtJhTOF6L6qe2rG09fDF1FUFFAj+zfjQIAgIA+L+F8cYoh9mFih7cWEb0KX39r4+mLLVcRVBTONYcDABDQ5yicTyrM09gXfOvyrcNBMsm8+q7tprZD9QH9pVEAABDQ58WTmF7ztLsJHluVVm2pBpWG81G32/3YSAAACOitVzaFW57Sy22mtK3a2p2ra1Ft13ZT26HaeF5kWfavxgEAQECfh3Dej+k0hYsYT/VOpnq+dudqL0xth2b/suhkR91u9zMjAQAgoLc9nC9ExDdTfMnHKW2rFtNbU/8uprZDhcaN4bofGQkAAAF9HnwzxQB7EBEbqRzY2p2ryxHRr/AtTG2HauN5kWXZvxgHAAABvfVePrv0aMoBNpnqebnn+aMK3yKpqfzQyl8SneyVqe0AAAL6PITz5RjvCz7NwLqR0CFWvef5w42nL4auJKgqnHdedbvdS0YCAEBAb3s478X0tx1LqXrei2obww02nr7YcCVBNbJOZ2TdOQCAgD4vprnuPCK96nnVe56b2g4VhvML3e4FIwEAIKC33stnlx7E9PcET6l6XnVjuI2Npy/2XEkgnAMACOicJ5z3Y/pTv1OrnlfZGG4YEQ9dSVDBL4RO55VwDgBQHw9isw3n097vfGIroer5g6i2Mdxde57DtGVFt9t51el0NIQDAKiRCvpsPYnprjufSKKiXG6r9lWFbzGw5zlMOZpnWd7pZP8snAMA1E8FfUZePru0FhHLFbz05uVbh8NEDvN+VPMFxITGcDC9aF50OtmRTu0AAOlQQZ9NOF+M6rYc+zqFYyyr5ysVvoXGcDCtaN7pjDqd7J+FcwCAtKigz0ZVU9sHl28dDhI5xiqr5wehMRxMJZhnEf/a7XY/MxoAAAL63KloS7WJVKrnvYhYq/AtHmsMB2eO5UXWyXLBHABAQJ/3cF7l1PaDy7cONxM51PsVvvZw4+mLB64mOGUsz7I8y7KjLMt+6HQ6V40IAICAPs/hvKot1SYep3CcZfV8pcK3MLUdThfKRxHxZ9VyAAABndfuR7X7gW8mdJxVGW48fbHpUoL3BvI8y7I8IlpfKe92ux876/Arf+50Op8YBmbwO+ffjAII6I308tmlflS7JnuQwtZqqucws6eiIosoyup4ERGvhFUgIsJsGQABnfeH84UYd22v0teJHO5XFb626vlbc1qWG4XWBvDj5/an8u9/8fANACCgc3ZrUe3U9iSaw81g33PV87fodrsXjQIAALRTxxBMT8Vd2ye2Ejnctahu33PVcwAAQEDnXJ7M4D0eJ3KsVU5vVz0HAAAEdM7m5bNLDyJiseK3GV6+dbhX97Gu3bm6EqrnAAAAAnqC4bwX1VaUJ1KZ3l7lNH7VcwAAQEDnzJ5EdRXl42rv3r525+pyVNcET/UcAAAQ0Dmbl88uLUdEfwZvlcT09oj4Q4Wv/bUrCgAAENA5SzhfiIhHM3q72qe3r9252ouI5Ype/iAiNlxVAACAgM5Z3I9q9zw/7vsEjne5wtfe2nj64sAlBQAACOicStkYbm1Gb3dw+dZhCg3iqmyE99hVBQAACOicxZMZvteg7oNdu3N1MaqbLTDYePpizyUFAAAI6JzKDBvDTXybwGFXWT3XHA4AABDQDcGZPJrx+w0SOObKmsPZWg0AAEBAP7WXzy49iNk1hosYb682rPOYy73Pq9rnXTgHAAAQ0E8dzhei2qnebzNI4NC/rPC1TW8HAAAQ0E/tflRXSX6XNm+vtqc5HAAAgIB+KjPeVu0XIbbO4167c7Uf1X0poXoOAAAgoJ/a/Tre9PKtw7orzFVOb99yWQEAAAjoJ/by2aV+RKzU8NaDBA6/X9Hr7m08fTF0dQEAAAjop3G/pvetdf352p2rvYhYrOjlTW8HAAAQ0E+urJ73a3r7Yc2HX+Vxm94OAAAgoJ/K/Rrfu+6A/kVFr2t6OwAAgIB+cjVXz+PyrcNBzUNQ1bEPXF0AAAAC+mnMbfW8XH/eq+jlv3VpAQAACOgnUnf1POqf3l5Vc7iDjacvBq4wAAAAAf2k7tf8/nXvf15VQBfOAQAABPSTefns0mLUWz2PiPhLze//u4pe93tXGAAAgIB+Ul8l8DMMa37/qiroey4vAAAAAf2DXj671IuIFQG9mgZx1p8DAAAI6Cf11bwPwNqdq6rnAAAAAnp9Xj67tBBpVM8j6q2gLwjoAAAAAnqdlisMp6dy+dZhnQG9V9Hr/sklBgAAIKCfxH1DUGlAHxhaAAAAAf29Xj671K8wmDJ2YAgAAAAE9A/5yhBUa+PpC2vQAQAABPR3K7dWWzYSP/utIQAAABDQ6yCc/1KvgtccGFYAAAAB/UNMbwcAAEBAr9PLZ5cWQ3M4AAAABPTaqZ7Phg7uAAAAAvp7Jbn+vNz2rU3+6FIDAAAQ0N8VgpcjYsFl8CtDQwAAACCgz9KXCf9sdX5x8CcfDQAAAAF9llLeXm3R5QkAACCgt14Dprd/UuN7a+gGAAAgoM/Ml4n/fHVW0PcqeM3f+rgBAAAI6G/TT/zn69X43gctOx4AAAABPUUvn11abEBgrO3n23j6Ys9HAwAAQECfhX4Tfsia90Kfdki3nR0AAICA/itfNuTnrHMd+rBFxwIAACCgJ6rfkJ/zixrf+/tpv+Danauq6AAAAAL6WM3Txk+rzp91UMFrqqIDAAAI6EmE3tNaKBvazVzZKG7a3dwFdAAAAAH9Z1807Oft1/jeW1N+vd/5yAEAAAjoKQTes6izod2016GroAMAAAjoP+9/3jT9l88u1dVcbdoV9EWN4gAAAAT0iOZWcJfreNONpy8OKgjpyz52AAAAAnpT10D/ocb3/nbKr/eFjx0AAICA3tQKev/ls0u9Ot544+mLzZhuN3cVdAAAAAG90U3KVmp878dTfK2FtTtXhXQAAIB5Dehlo7UmNyj7qsb33pzy633powcAADCnAT2av8XXwstnl1bqeOONpy+GUw7pKugAAABzHNB7LTiG+zW+98MpvtbC2p2rKz5+AAAAAnpjj+Hls0v9Ot64rKJPTNbWogAAFbRJREFUM6R/5eMHAAAwnwH9ty05jjqr6BsxvY7ui2t3rvZ9BAEAAOYvoPdachz9l88u1bKGe+Ppi4OIuDvFl7zvIwgAADB/Ab1NHtX1xuW+6IMpvVxfFR0AAGD+AnqbgmDv5bNLazW+/+2Y3lR3VXQAAIBQQW+y++Xe7jNXTnVfndLL9XV0BwAAENCbbCEintT15htPX2zFuGncNDxau3N1wSkFAAAEdJpqua6GcWVIvxsRe1N4qVq/bAAAABDQmYYndU11L92IiOEUXmd57c7VZacTAAAQ0Fvs5bNLvRYfXt1T3Q9iek3jnqzdudrzsQQAAAT09mp76Fuus6v7xtMXezGupJ83pC9ExDc+lgAAgIDeXsM5OMZHL59dWmxBSF9cu3PVenQAAGDuZPNyoC+fXSrm4DAPIuLzy7cOD+r6AdbuXF2MiO9iXA0/j7sbT19s+IgCAAACuoDeVHsRcaMlIX114+mLTR9TmIt7dC8ilqdw30jV1uVbh3sp/mBrd66uRL1LwQ58IQsAAnqbbV2+dXi75ge+xRg3rzvvtPsbG09fDHxUodWh/A9TuFekajMivr586zCp+9janasLEbEWEV9FfV+KDCPicURslg1HAUBAF9Bba/PyrcPVBB4Avzvng/dBGdL3fFxBKG+IgzKYP75863CYWDDvRcT9qHe2wjAiHpohBQDzHdB/jPZOnUw2pJcPhE8iYuWcD7u3VdKhsfffxTKQL0e7d9UYRlkRrnOZ0Tvuw/3yHKzU+GMMIuJrwRwABPR4+ezSdxHRn8NznEpIX4mIR3G+L0msSYfm3HP7EfHlHITyn4Pn5VuHyd2f1u5cXY7xNPZ+zePz0JesACCgC+hphfRprEsX0iHd++zysVA+DzOWNiPd9eXLMZ7K3qt5fB5bogTw/7d3N7ltHFsbgN8LXEDQKNxBiLuBMCtwZy4gDnDnkVeQZAWxVxBmBVbmAiwDmodeQegNKJ0VXGUkaPR9g+4224z+KJFiNfk8gCFblmWRrG7Uy1N1CgT0myaOv6RpiLOvigjp7eTxdTtxfPRjmZ5evHL5wtbvq10Q7EL5PrjMYhl7XVgwH6dZwr7Nxm+XSc7SVMxrVwkACOi3TSSfGgp3wVmSVyXsjVxDNX2WZl+6zr/wvPfSSZrVSLvc5O0mdZI3aU7JKG1/+aQN5cdb/DG6Ny6m7ssAIKA/ZFJZpekovu+2fk760sTydR5f7dE8Dp7n/vkyyYvsx37yZWdpurEXd58pZH95nfaNC8EcAAT0VSaY4yR/esk/BdtvDo+ui9gX2Dv25/iR3+LN9PTitZcV1na/7C9dr7J/J2CUfEzaKItl7OMt/iiz6MgOAAL6Eyed/+cl/8yrkroOt8cA/ZzHVYPmaRrIaUYEj7s/TnqhfLKnT0Odcpexj7NYxr7NN0zO0jR+m7lqAEBAf+oEdJ87ud/mJMlPJU1G26D+No+rDqmmw8Puh12VvFu6Ptrjp6PkZexVG8y32YRP4zcAENA3MiHd907ut6mTfFfKkvfexPS4nZiuWs2bJ/lJhQf+cQ9UJf88dJbajb2UY9I0fgMAAX2jk9OXSd552W/15vDo+nVpP9QTlr6fRMWH/Q7k4/a62de95DeZp6mWnxR4rxunjGXsdXvvPDFcAEBA3+RkdZTkf172eyevr0qrpreT18ccJaQCxL7d46rsb8f1u+4D3TL2Eu9tL9McW7fts+TtLwcAAf3ZJ7B/xNLOh5imqagXF2of2cVYUGdX72lVL5RXnpHP1FksYy+t6Vsp3djtLwcAAX2rk9nXaZZL87DJ7U+HR9dnpf6Avar6Q5tcCeoM/R42yedVcv7pJMlvhTZ9W/Wetcn7+2/uhQAgoJcwuf3DS7+SWRvUiz7CbMVlop8aRKkaMaBAXsU+8nsDZ6Erf47zuKaXm7ifO78cAAT0oia8f8bezMc4SbPsvehA2+uA/NDjo07S7Lt0hjoC+fCcpamWF7fSp6Cmb+5zACCgb31iVN3W6MZxa/sR1HtjoR/Wx3d86TxNVf3Mkk8E8qLVaarlJyXeh9p7zg/Zfk8AK4UAQEAvZ4I0Pb04u2NCbJn7ngX1dlyMc/+xU13TpN90M2YDgbzqBfKJQL7yPed9wdXy4zTbbMZb/nHmaarlJ4YMAAjopUyWXk9PL17fMUnWzX29k+ZfS9+jfss46aqXX7UflyfWdS+sWxrKqmF8tBTGK8/KyuoU2om9vYeUckTap3uxexUACOhDDOjHSd4aAms1a4P62YDHzbgNUpP8s8IprHNfIL/vDR9WC5uldmIfp5xqeR3d2AFAQB9A0Ho3Pb347o6J9CjJn7G8dFMTxmIrXmsK7WnD+ofYs76vYbyrjnfjovKsPNmnPhAFd2L/NmVUy2fRjR0ABPQBharfp6cX39wzwdYsbvOK7bC85tCeNqzP7Fvf2UBeZVEdn0R1fF0us6iWzwu91kvpxN71x3ij6RsACOi7GNDHaarobF7dC+vzHR1z4za0Ve1Euvs1U2EfZBif9MK4fhXrV/LxaN1RjT8U8to7YQIABPThB/Q0VYbZPRPxt2kqIwjrm5rod9XWbmJ9qcpeTBAf9QK4MP481363hL0u8Hqtsmj4VsL2p5M4TQIA9sq/PQV5I6A/u3GarQU/Xp0fdGH9fYnNoJ6qrXbNbgjtPH8YH98QxseemY3rlmX/WvAS9q5aXsJ4qLM4u1y1HAD2zK5X0D/c1cm9N3G3F72sifyHJLMhna9OUUG8XxX/Mo4325ai+08U1vDt0/M1Pb04M3QAYH/tegX9ywd+XVdFV9ncrlH7Ohy3QWuepvrcBXbVJO4L4hPX8VbN0xz5VeqZ5ZM0lfJSlrDX3fOl6RsAsA8BffyQLzo8ur68Oj94k+QXQ6IoXeD68YbAPldh35sgPs6i+d4Xgnhx6iyWsBd3TRa4hD1RLQcAbrHrS9yr6enFgx/j1fnBH9EgamjBYJ7kYxvc56rsgw/hXfB+0X50PZap247yW4m9I3pd2Etawl5HtRwA2PeAnuTr6enFgxoTXZ0fTJL8YVgMPrTXaavsSepd7xQ/kAA+6oXvSRaV8C6YMwyl7yvvh/JRSc+ZajkA8BD70MW9aoPavQ6PruftUvefDY3B6gJf1QuHacfAZRvcuxCv4r6+AN49310I/7J9HVTBdyOUv09zNFqp+8q7o9HGhfxYdRbnlteGEAAgoC+8SDJ96BcfHl2/vjo/+Fao2Dnd61ktBct+eJ8n+bsX4C/3ufreW3beD97dNZWofu+yrtnbWeH7yr8v7F59EueWAwAC+p2qR/ybV0l+jyZUex3eewG+H+LTC/LpBftOUaG+3bYxuuOa+GIp4Gi+JpSXGspL3FfePW9dtdyKHADgSfZhD3qywj70XrA5TvLWEGFN6vbXplSeYh45Lrt95UWuFuntKz8u6Me6zKJarscFALA2u1xB71cyvs8D96F3Do+uT67OD14UNilkuMaxHByhfNVQXlKzt7TP2/vp6cWJYQQACOir+ZjFMsjqMd/g8Oj6VbtE2H50QCjfbCgvsdlb99xp+AYACOhrNPnxv/+ZPHIp4jdp9qML6YBQvh+hvDvn/VdL2AEAAX09lidVKy9zT5LDo+vLq/MDTeMAoXw9oXycMjuwJ5awAwAC+sYsd9M9TvLTY75Rez76N0I6UKCu+/pMKH/S83eiCzsAsG3/2uUH9+N///N/S5969ZTKSLsfXUgHSgmVRR6JNoBQXqddaWAJOwBQkl3fg17n832N36c5GudRVNKBLTpL8j5NpVwoX123r/z99PTizHACAEq06xX0d1l0cu98Mz29mD3l+6qkA88YKD+kqZQXufy68FCeLN7YOLOEHQAo3a5X0D/cENB/TvKkgK6SDmxI3YXyw6PrYqu8Awjl9pUDAIO06xX0SZI/bvirJ1fRk+Tq/GCc5F0cwQY8LUy+T1MlL3Y/dMFHonXqOK8cABDQiw/p/8s/q9yz6enFN+v4/lfnB6M2pFeGE/AAl2lW8RS9n3xAoVyzNwBAQB9QQH+b5oi1Zd+ts1HQ1fnBL0l+NKSAO4Jk0UvX23vmyyTftqG8xC08l2mafQrlAICAPsCAfpzk7S0T5q/XuT/x6vzgZft/2ZcO9Bu81QXfI0dtGH9ReCjXgR0A2Hn/3oPHeHZLQB+naRj307r+o8Oj67Or84N57EuHfVRnOFXy8VIoL5FQDgDsnX/tw4O85bi1zloaxi2z5B32wiCq5O19cNLeB79NuW8gCuUAgIC+BwH9ODdX0ZMNLHXvhfSq/X/HhhrshHnaBm+HR9ezAdz7ukBeFXwfEsoBAFr/3pPHeZbkl9y8t3Lc/t2rdf+nh0fXs6vzg6/TLKVXTYfhqdtA3lXJiz5Tu126XmXR5K1UQjkAwA3+tS8P9I5u7p1X09OLk039/1fnB5P2jYDKsIOig2M/kNcDuLd1R6FVKbv3hVAOACCgf5rEVkl+v+fLvt70sT1X5wfHub2aD2wvkM8Oj66LP7ZrIF3XO3WcUw4AIKDfMrH9PXdXsC/bkF5vOKSP0ix5/9kQhGfXD+Szgdy7htDgrdPt0xfKAQAE9DsnuVXur6LP03R23/he06vzg3Eb0o8NRRDIe/eqIVXJu/vmb0nONv0GJwCAgL5bIf2+vejPGtIFdVirwS1Z792bqiw6rk8G8COfJXmfZCaUAwAI6I+dBI+S/Jn7K1LPGtIFdXiUug3kHwcYyMdZVMmrlF8lv1wK5ZeGHwCAgL6OifHLJO8e8KXPHtJ7Qf2HNqhrJgcLs/a6/JBkPoQu6737ziiLI9CqlHsueV8dTd4AAAT0Z5gsv8vDzgneSkhvg3q3D/XngUzmYd3hcJ5FdXw2wPtMP5BPBvJjn6U9Zs7SdQAAAf25Js6jJH88MPjWSb7bZgXp6vygSnPW8bFhy46aZaDV8aVAXmWxbH0ILF0HABDQi5hMT9qQ/tBJ7HfT04vZNn/mtqp+3Ib1iSHMQM2Xwvggl0+395B+IB8N6Pl/n6ZKbuk6AICAXswE+zjJ2xX+yU/T04tpCT/71fnBpA3qL2MJPOWH8Y9tGJ8N+H4x1EDeVcm7peuq5AAAAnqxk+5fkvy4wj85S/KqpEmusE4hZr0wXg85jA88kCeq5AAAAvqAJ+IPOR+9r25DenEBpA3rVSyDZ3Pq9teHNgjWQ12mvnQfqHqBfDKwQF6neYPEXnIAAAF9L0N6kryZnl68LvUx9TrBv2g/OraNVVxmsUT9r+73h0fXlztwvY/aEN4F8mqAr80szZskM1VyAAABXUhv1Cm0mn5DYB/ykl0E8adc2+N2zH+VYR171tctW58N4X4DAICAvq2QniQnaZrIDSbUtIF9ksWSXkvid9s8zRtKH9uPg98nfsd1XC2N7fFAX69ZFlVyy9YBAAT0vQzpqzaO61ymWfY+HeLjbpfEd1X2rwYcbPZZF7g/ZFEZr4d4rvgK1+t4KYxXA30o9VIgrw1nAAABnTzqCLblifab6enFyS48F1fnB1UbfL7MotJuefx2zHvB++/+n3dpSfod1+UuvYkkkAMAIKCvEAYmSX5/QhitM5D96U8I7qNeeB8L708y642bv3pBPLu6FP0B12DVjqkujA95G4ZADgCAgP7EgDBK8i5PWzZbZ4cq6g8M711QH2dR4XzRfux/bpd9Ctjt7z/e8PmdXn6+4rU2WQrj1cAfkkAOAICAvqHwcJzklzytOlwneZPkTMOnT0G+H9a7anzfixv+2U1ft07dsvGbXr+/7vnavVhqLozfOm7mAjkAAAL684SKUZKf87gGcn2Xabq+/2oSzx5cN1V2Z5l632wpkHtjBgAAAX0LgWOcpoFctaZJ/m9RVWc3rovlyvh4Rx7eZXutfoxzyAEAENCLDCRVmmXv66gIXiY5S/J+enpx5tml4HE/6gXxrrN/tWMP03J1AAAE9IEGluM0S9/Ha/qWwjqljO0qi6Z+L7KbDf5UxwEAENAF9ZXC+odYBs9mxu1NFfFdDOKdWRbV8bnqOAAAAvruB/Xvs5llv/Mk76PSx+rjsso/z62vdvxhz7Oojs+npxdzIwEAAAF9fwPRD0lebvC/mWWxT1ZgN+b6IfyL7H41fDmMz3th3PUAAICAzj9C07gN6sd52jnqDw3s/ZCiYrhbY2nSC+CjNN3S+3/eF8Y5AAACOk8OWMfZ3PL3+8LMX1FZLHlsdEE7vfGxrwG8c5nFfvFaGAcAQEBnE2FsnKai/n22s/y47gJPF9yTXAo/Gw/e497r/eKGz+2zeTsmP6Z5U6nWwA0AAAGd5w5wkyz2qpdQJa17v/7KooqZNBXMyz1/vfqBO/l8NcRXvdewMrpv1I2nbol6bVUHAAACOiWGv5dJvi0orN+lH6rmSf6+5e+SAqrzbQO1myx//oulAC5sP22M1Gne6JnFGzwAACCgDzSsT7LYrz7Z8Ydbt78eYxxLxEsL4panAwCAgL6zYX3cBvVv248jzwrPrL80vetbIIgDAICAvveBfZJmGfyLWH7Nes3aMP4x7coGe8QBAEBAZ7XAXrWBfRJLvlkxhMf+cAAAENDZSGAft0F90gvtlsXvjzqfd+Kft4FcCAcAAAGdwkL7V2mq7BPPzCB1gbsL4J8CuT3hAAAgoDPc4D7phfUve79Xcd+OWfuxC9+fzqG3FxwAAAR09je8V+1vu48v2o8C/Gq6ineSfLgpjKt8AwCAgA5PCfCjLJbJj7NoTvdl7/f9rxm62dKf+2H7U6U7Ue0GAAAEdIYR7KsbPv3Qqnw//N9mnuTvB/44/er2Z5/XUA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGD9/h9MXm/aIAMabgAAAABJRU5ErkJggg==" width="125" height="104"> Levantamento Sistemático da Produção Agrícola | <strong>LSPA</strong> </div> </html> <style type="text/css"> code{white-space: pre-wrap;} span.smallcaps{font-variant: small-caps;} span.underline{text-decoration: underline;} div.column{display: inline-block; vertical-align: top; width: 50%;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} ul.task-list{list-style: none;} </style> <style type="text/css">code{white-space: pre;}</style> <style type="text/css"> pre:not([class]) { background-color: white; } </style> <script type="text/javascript"> if (window.hljs) { hljs.configure({languages: []}); hljs.initHighlightingOnLoad(); if (document.readyState && document.readyState === "complete") { window.setTimeout(function() { hljs.initHighlighting(); }, 0); } } </script> <style type="text/css"> h1 { font-size: 34px; } h1.title { font-size: 38px; } h2 { font-size: 30px; } h3 { font-size: 24px; } h4 { font-size: 18px; } h5 { font-size: 16px; } h6 { font-size: 12px; } .table th:not([align]) { text-align: left; } </style> <link rel="stylesheet" href="data:text/css,%0A%0A%40font%2Dface%20%7B%0Afont%2Dfamily%3A%20%27Open%20Sans%27%3B%0Afont%2Dstyle%3A%20normal%3B%0Afont%2Dweight%3A%20400%3B%0Asrc%3A%20local%28%27Open%20Sans%27%29%2C%20local%28%27OpenSans%27%29%2C%20url%28data%3Aapplication%2Ffont%2Dwoff%3Bbase64%2Cd09GRgABAAAAAE8YABIAAAAAhWwAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABlAAAABYAAAAWABAA3UdQT1MAAAGsAAAADAAAAAwAFQAKR1NVQgAAAbgAAABZAAAAdN3O3ptPUy8yAAACFAAAAF8AAABgoT6eyWNtYXAAAAJ0AAAAmAAAAMyvDbOdY3Z0IAAAAwwAAABZAAAAog9NGKRmcGdtAAADaAAABJsAAAe0fmG2EWdhc3AAAAgEAAAAEAAAABAAFQAjZ2x5ZgAACBQAADWFAABReBn1yj5oZWFkAAA9nAAAADYAAAA293bipmhoZWEAAD3UAAAAHwAAACQNzAapaG10eAAAPfQAAAIIAAADbLTLWYhrZXJuAAA%2F%2FAAAChcAAB6Qo%2Buk42xvY2EAAEoUAAABuQAAAbz3ewp%2FbWF4cAAAS9AAAAAgAAAAIAJ2AgpuYW1lAABL8AAAAKwAAAEyFNwvSnBvc3QAAEycAAABhgAAAiiYDmoRcHJlcAAATiQAAADyAAABCUO3lqQAAQAAAAwAAAAAAAAAAgABAAAA3AABAAAAAQAAAAoACgAKAAB4AR3HNcJBAQDA8d%2BrLzDatEXOrqDd4S2ayUX1beTyDwEyyrqCbXrY%2BxPD8ylAsF0tUn%2F4nlj89Z9A7%2BtETl5RXdNNZGDm%2BvXYXWjgLDRzEhoLBAYv0%2F0NHAAAAHgBY2Bm2cY4gYGVgYN1FqsxAwOjPIRmvsiQxviRg4mJm42NmZWFiYnlAQPTewcGhWgGBgYNBiAwdAx2ZgAK%2FP%2FLJv9PhKGFo5cpQoGBcT5IjsWDdRuQUmBgBgD40BA5AHgBY2BgYGRgBmIGBh4GFoYDQFqHQYGBBcjzYPBkqGM4zXCe4T%2BjIWMw0zGmW0x3FEQUpBTkFJQU1BSsFFwUShTWKAn9%2Fw%2FUpQBU7cWwgOEMwwWg6iCoamEFCQUZsGpLhOr%2Fjxn6%2Fz%2F6f5CB9%2F%2Fe%2Fz3%2Fc%2F7%2B%2Bvv877MHGx6sfbDmwcoHyx5MedD9IOGByr39QHeRAABARzfieAFjE2EQZ%2FBj3QYkS1m3sZ5lQAEsHgwiDBMZGP6%2FAfEQ5D8REAnUJfxnyv%2B3%2F1r%2Fv%2Fq3Eigi8W8PA1mAA0J1MzQy3GWYwdDP0Mcwk6GDoZGRn6ELAE09H%2F8AAAB4AXVUR3fbxhPfhRqr%2F6Cr3h8pi4wpN9K9V4QEYCrq7b2F0gC1R%2BXkS3rjKWXlfJeBfaF88jH1M6TfoqNzdWaXxZ0NM7%2FftJ2ZpXfzzeVILi0uzM%2FNzkxPTU68Md64GQZ%2Bvfa6d%2BP6tatXLl%2B6eOH8uVMnTxyvVg4fGisfhNfcV0f3luz%2F7Srmc9nMyPDQ4IDFWUUgjwMcKItSmEAASaNaEcFo069WAghjFIlAegyOQaNhIEhQxALHEqIeg2P0yHLjKUuvY%2Bn1LbktrrKrOgUI%2FMUH0ebLc5Lk73yIBO4YeUrL5GGUIimuSx6mKl2tCDD8oKmCmGrkaT5Xh%2Fp6rlphaS5PYp4kPAy3Un74OjeCdTi4nFosU6Qg%2BqRBsoazczLwHdeNqpVx3AW%2BoVjdhMThOo6YkGJTl862RFq5r263bbYSHyuswVrylsSBhHzVQKDU11g6hkfAxyOf%2FDVKJ1%2FHCvgBHtNRJ%2Bb7eSYepeQ4VLZBqAeMjgM7%2FzyJJF1kuGw%2FYFpEq458Xrr65YTUa6VCEKGKVdJ%2B2FoBYYNKCwV1K6B2s1mJnPB7Ww6GtyO04ya%2FHHWPHs5P4J65NyVa5VA0E0LocwPci45b6tvMvohm1BYc1h12Xd2GrbbHVkjB1pzs6IKtOHeYd%2BJYhFasmfs9Zt%2BSZlo9pu8eg0utWZAKB8vjaxBQx7cSbK3Qdr2nBwM27vrXcUHtLolLJyJjK3CAbDcFDo3hsPZ63IH2RrsoWyskdB47jiKitFtcAgqj4wQQxN3PB81RCiCo0Y1jnUVYlOj5JHhJd2JBevIEeSQxDWzTN8PEE3AL90KtP11dVrC5II1L1w331pHFq10vPBGYeyUCFRvB7PAEzMltdubhb%2BlZ4dw9w86yyNfG%2B%2Bu0ZWOBkmsb%2BGrsrKGIN4R0XPQimnAEcj3CI6ZDR35zzHJEZlcW5cQCTMwty4umkB5B4ajHwVNhQDqdMLSAmClnhLScgYgMbQJESALUrtIvjpQz9LVxuIPSiYgQkjusZ01l4BERrPtdO9KfDErKQLne6EUbJlXHqTccNzL163tuES26ickjo5va6FIkCyIyaFEYA%2BlejuqlFxLWIYKmQG9W0tlMe0yXu80wPe%2FOavEJrd8srSFziSal30wMj5H2mH7T6H218RQ93qOFysDEgtLBoRuQUeXjyPQKexdLjoa4vtAQJiBsEXYutEo9T1%2Fm5mUdBMbXFCzIq8Z6Yl5%2B7nyic%2B1mE3xisVatpBarpcC%2FmUs9%2Fs3Csty2GRPfLMo7FrfqcS1KDxIntwVjnkEtjRJoFKEVHWmelIyxd7Y9xlqGHTSA0VfbnBks08M4W21bHczuJBrTiYixiBnsMF7PepCwTAdrGcy8UqZb5uWGvIyX9QpW0XJSrqE7hNzjjGU5u1vgRe6k5DVv4DZvpVnP6Vi0yMKLOhUvPUq9tCzvFhi5mV9KVNMvWpfRJg1bggjEml6Uz6KmiiN92dh%2BGg19OHK4TmOC61TIcAFzsF7DPNQ0fkPjNzr4sMZHaEX5fk7uLZr9LHK9AW9KF2wU%2F%2F%2FBUfaOnlREfyrK%2Frv6Hyn3ISkAAAEAAwAIAAoADQAH%2F%2F8AD3gBhXwHfFRV1vg5974yvZdMQspkSIYkQkgmhdAyIIQQWsSADCLSpajUiMgiAkuJNGmhKyJGDCyybCiyiGBHRGQtyLIuf2UX19UPy7oWyFz%2B972ZBxOE72N%2BL2%2BYd%2Bbe0%2B5p99wBAscBBIN4ACjI4D4oUJEIVAbIL8wPYX4oP1TQ3um3%2B0v5dZz2bj44nsyKLhYPXKkaL1wCAhuuXcQ69dsWyAu7qF5PBMFqQzQRkzQgYvIQCuXleXYHlCXl2x1YZg%2BF7HxMDNAQLQoVetwuKZCZjRUTQqc%2Ff7RjebisqAeuEQJXmpZUdA%2F3KgcgsJA2kL1xDNPDZqCyQAWdXiIy5YOHThUq4%2FKB1XFpgPr5heVtJuSQvJzxOeKB6HfEplzKWCEA4Sc%2BVgqkw8bwIF16K7fg0ttNJr3DajEKBqfT5UlNkwXJKyD4hCRRlFySwU%2BTvTTJkJTh1wkms6l%2FpBWa08Fmt%2FWP%2BNz2AWYcYEez3WwXvU5qECE%2FVB5ylJXl5993Hyc3zw6hkHaPoerldxVjh7eMX%2FF3hYWxu0KF382pcKpXsV%2B9QlS93Mj%2FSz%2FujinsVE1dDTszcEk1u4LpPdjXmDdw6UAsqFlUg7rmf2J%2Bd3aGLmC757GBuEe55mHNXGxifZVrLtuNNUBhwbU6wSQ5IAOyoS2MCxcH7VmpXkHIdZlFP4BPtOvFdvlZZsncL0Kl1pZcS99Iam5eK1erfhFvrkviL9HDKc5X6OV%2FChUq7aGEvw5U6QuFVCbEhOSSZHegODM7WOzxhOzZ2cVFJaXFIbfHK2cH7WlELuK3EnR5vHZJEkzvHZw35S933n0ucur5ky%2FMO7SraN2mrVuqGiNPnIt%2BNnTy6HF4fMkfvf%2B6EEjfkpWPh7rtXrJgp%2BNAk9hzQScj6194%2F%2ByxlZE72Ow0KvcdloMLbPcBiDD%2B2jdSW%2FEk6MENfk55AfQMtwabaPC0aZWZ2a6Nob1NKgxRc3qemb%2FaF0jtk3xZPtkpc4Xjr3KVXE7WDfpi%2BsfVJ1RotwUyJVFVbE4ZV3JUPi0pLsq%2B%2BXMM4A9Vd%2B%2FYcXcVvrtx7bLN61av2oINVTU11dU1NVV4cuPaFRvXrV7xDGPNH6%2BheQJpbMQaHLiz8R9fXb5w8dLl5vO7XnzhD7uef37Xxa8u%2F%2F3ipa9pxpUqrt5AYeq1b8QPxVNg5BQWw13h9k4PpEqB3Lx2eW0DlmxfqkdfUhoy9Y6EnNZgW0t7MZ%2F6smlubka%2BI0NfFckQoDwPkjih%2Bd4yrpTleTdRqoinJE6Ts7AULcTt8mRxQbYjMeLcXMpYwucgMgaCkrrMn668Z97YBwZHJm%2F%2B%2FhnWZ%2FKwOzazl5c2DerS%2Bo2Xth9eshXXd7jTu7NHHeb98%2BVHfqw%2F%2Bz%2FCmp5zhvSZe3e%2FkSOubt2EO3tExnWrrbsy%2F51x94%2BaWFa%2F84V1k%2Fbfx2Z1fWE0%2B2It%2B2zfxGEfAaBiMbBctRiug0CpIBLFUpyK2R%2BOumYgYrZB%2BcZAdoT4%2BTfM0CpsksEggGCxGoNUsV4J5sVpc5SGJE6pwxvIJgM3r97%2B1Kq1S7et2UQKUI%2Fv7znOCn%2F8jpW80ohvKaN24aOatFEFAx8XLFYDFYItR0UbkQMljuIiEgx5HMS0efW2pWtXPbVdGZb9yjruPIInv%2FsR3z%2F%2BEisAhMFkrmCRXGCB9uEUKgoomw16o95qEwxoJiaT2cDtl84CUP5G4XWJOTBmWLK8olOmNOjMKhUpWZWHK5LZgl9279229we2OBUX50kuVjv5QDo7PBwnsvrhWJF%2BYDIuVagZDxeFHOF1MEKbsBMEQS%2BKJjOVdXJ1BKw61EH%2BfeqSTzTz3I7ZA3Zuv%2Bwhshy3sDFL2TjctJR6n2SDsfFJ3A0I5ewXfAgugw7s%2B0XQG0SAfFVWHOEsr6TyphSHW5NHFc9J6Wa%2B7B3Dfp42HguHAUINniPlZCpQ%2Fl0CogDIrW%2F8u85iv7sGv8ZzGzYAxjwV%2FMCxTwobJQCTWU8HRPQeruaaXpRqestVdUOXso7dupeF7px4Z8%2Bed3arKFc44AIg51W9ch4kIIiUEocmSk4sBpCcj15oUDRJXYYExl37RmirrkIv55rLASYJJF%2BS3t0nopeptU%2BE%2BmLrLK%2BlPgQyid3mCBU6UP1rVz8R2n770zc%2FXf7x8s%2FNn9fvaFi3rmFHPfmMLWRP4lycho%2FjNPY4W82Os88wiJ34K4tdAIQjAOQkx8YArcM2PaAOjSZBL8uolzAJFFvGDXd8ej67P2AvKpUkOYghcnK7zl300RBcsExwzJ%2Fhbrd7GuYBwhgAIYtbTx%2F3%2Bd4klJ3gtKCQnGIz9InYZEzqG8EkjSzNavCB%2FcXYlcQshhyMsZrI6PYLWc3lOG%2FvlA4rHr%2F3uTFD3r38%2Fr%2B3fMKOke9W4oJ9G566u7au84CpOz%2Fct5R99wF7W6dIYjjnawrHIAh3hlungFOWgXoyzVKbHOr1eD19Il6vISsrrU8kSzbY%2B0QMGpdjgYh60zDTHJKHoyP4404pw27zB4o1o62gq%2BBLL299am8j%2Bzv774zj995%2FdgTOZsOfWr3rnTWPj2h8qGbo1%2FM%2F%2FkYYvmxfms7TtPrM54E7ns4vwBw0rFy%2FaNJjRRVTet31OgCBPABhongUDOCAzuE0h6gnxChToCJ1ulB0iH0jeqvscFBZotflk%2BhMQ5oJDqhrC%2Fl%2F%2FFxmAUlGYeK5Z6Jl5MDec2yJQdc%2Bl5ViNduL1avoZ805eGll04jy6COKheT8S%2BU6kQwdw%2BlW6nPpXF4qtEoBziwAye3mMnRLkqlPRLqZdQlsKxTcLghkqhzjrLL5M%2BWgUwldSkjbL1HPLrCf51d8MHbv66zu%2FmcGl5Kz0YNZ0%2Bmcf759kbEB29qGGrZiYWop2b2R9fYqnKnlWOVzqXqgNfQIB5LtRr8fQLLT7CyT0ZLaL2K0WFzU5e0TcfmojkckcgvcyhJ4pNlr8Bd63VyEhIbiGhfIBFGTq8R9lqcWB2Dl1G79Rn%2F9i8n08OU3L%2F760UX2E369YuvqVUPrI9VryFR8CXc5V%2FrYefbW7svv%2FYNdxUHv%2FOnFVQ1V8yse2Dde0UcAIY%2FzU4L0sA1FEQg3jJT0jVAJFBlqbOOrALk1dCOmkuHNF%2BmpaKOYunHhldNAlZhEyFGpz4R20C%2Bc47Vmu%2B6gqXo9lewuq5TfXrLnZORk9Ink5JjAlNwvYvJBoF8E5N8qd9nN3jrmj7mOx8OPLDXqolpgwv0zZkpuzaeTynf%2BvWjNvnr22b%2BbsfDJR7%2Be%2BcL6dQ1bXlu3CDvOWfHIMytnrhJPHt7x4L7eg%2F48%2B8C5U0euLuu%2Ff8ozr1xteHTRssdGru8V3kwfeHTMsN937%2FzksLEzFdlO5NQpNsMLWdAtnJlizzQYAAQu26AljUvWZbEQlyuJi1Ymcr8Iaal2jjKNg5qJ9Ctqx02jMyDFKHJw8TpUIvjHKhXZQlZ0%2FIwe1eO%2B%2B6%2FRVHpg2mv%2FuPbBuguPMtfKLU%2BtuXfjkIFraEVzg2tlMuZg6O57%2FvXBP1C3kZ3H9od2PPV81RMVE%2FaNAy3HEcaokRS34Ta%2BLAA8XotzQMRiizkRDVfN87X0JXae6NzkVR6Znehb6J8XL%2BY3IKovXMjn0oEDMrkmmc2iXu9yGm0DIkab6hgTZklwj%2FT6FDccpXsmn6Rjlxv%2BknyrTFMR8%2BU%2FcF9%2BDiRwh%2FUCiChwdeXD58cDhSwsRjeikNNcTo83%2F0AtP2DDKLywji1nhxSezMTjgo9eVHOy3LBbJgIQ0OsEsToiIFRHrIjI4wHOlfxEz6a4ZOTXTLq9eTjdTofW1bEH6up%2Bg5GIBDhGEr2BkRNVlMZTa%2FP3HKVyrMMKrF3H%2FKPYUAWjlGsXaRnXrxTIhrJwqp%2FbMtnphFYWIdgGoLWtddqASGuPzdA7YhNaqFZLvVJSEa48LZwUd4YSN4mJ%2Baq%2FctSSXgtmD6gf2emV91%2F9KNj38bHd9l3PX0tq19dMnzFw3OSsgsWjj%2BzqPXn0w4On3e9nZ%2BNJLYFZ1yqkQ2ITFEM5zzwyA%2B1KLJ1kVwpAjsvSTgx3S%2BrQQeiisxv5Ky%2B9kGbnqUmllmSFEhOP6%2FG4ug6C2nJQUPdSt0td36R1IFMgbsUalrqlQAbw4KK1v1BwIH%2FudKqm8NCQbeMHP2LUtVk3rv7Fb4712N3Tt%2FDeaWvZt3%2B8wA7swe6Y%2F5cvjv3I1rHJn%2BAyhLM44ODVn14%2F7bBUDpq%2Fhpxb8c388XfdM%2BrU3veu%2BTws17Pv7O79aFvzMnvxc3aaHRq8sAZX4jgUsP7CfvYntoNhGYquJiAAAKJNPAIyWLjk0ojFqENR0SwqyILNaiG9I0bRYhFECoKD518xh6iplZYz%2B5W8H0OIlBsz%2FtURB6IHmnaT7itJORvb6A94cnbjGZYvHrnSg0zENwfPGTGddQIKJwCEo9xyW8ALGdA7nO0UUg1Wn89iEGQLjwd01iRrUlXEarWAxVcVsTjAWxUBevt4QnM9%2FgxBMbluwe4SAjxpj%2FmcgN0ef3cCt2IAhVVLsR%2F7%2BTIjjZjU9PTeY1ew4I9%2FOvhn8cCeI%2FNf9BnK2Pk3%2FkZ7TF00%2B6HoquhndauXPAGAMIdb09Oqr8gOu6jFpbdQb5IDekccglHi%2FHK2DL%2B4emRymUNIE3%2BRo3WokKfbtNP37Cs0%2F7rxjQ0X2Cvs2Rex%2FNNLuysbxBB7lX3FPmdvl64rwyU44QusOVSzuj8AUTgmDuEc04FdsYcWQQ8COJyiuSoiUsFSFREct4ppwc9rSBlA%2BZuAPZTBx2Az2Uo2CY%2FhIHysic%2F1z59PI%2FdU5CtWz%2BaJB9gi9gKmYebVKZgHgMq89Bc%2Br1GJWSSDAQXQoWAyS%2FreEUlCQsTeEUKRr3B03DZmUZBwxy%2F6S%2FMZmh%2BdTYZHt5OF4oH1LKc%2BeilhJj0UhpMlAKQ6pAbjTRPxSW45Q0CbAac3asPzwaNfrY9LTuyi2ilOhUvnI8SSohNapUJK7wiAaDLZe0dMgujtHRGdt4%2B8%2FHaphRyV9%2Brq5lT1xe9nfPc0a2IrDuKQL%2F%2F9bve3DrL%2Fso%2FQj0kbVrGXCYuWZWXjUhzzD7xn%2F%2BD6GvYau8Q%2BZe8H8LUY7WK6yuVQ2KdHBJ0giCCaTTraO6LTiQaJoshJV81RgnG%2FQbydi5f%2FDYnpjc2ssZGSRrI3Ws1z7dXkYQC8NoLNxfFqVpwaNht1OotVT4GzFDJj9GrpGI15%2BJJiPpxLMg0v6dVv9AONx9jclFWuR6fyFGvI0TNxvRC%2BUjHmnkjBViRGg4Ix0Yn6RGzLWkgJZRVRDKHw1TvRrzc2NpL1J6JN5M0l0dc5snnk4%2BjCBF0QIT1soQCCJCMFzgtw3EBXxTekkO0%2B0aio0pV%2FbIp9V%2BKIgpPrUZJOFCUev%2FJSmsuNBjuVjDK1gKQgp2DnLbuZlRjwuJUAn2MY4nce4COtZjadZSsCntbhh6zRomMm0bbpo%2Bbh4oGrVQLPOume7Uev%2FBCXo1IDsUG7sFsvcaytVpDB7jBS2aqjKCdypaUI4xPzabNJKZdj%2BWvNn%2BtsW4%2FRVB2xkGeEk582NR%2FnE3ZMwaxy2guAqFp99FZ5bu%2BIXqDW3hHqvLVNiOltBiTmueJRtpW9oZgjHIE9sBOOujo9%2Bv1%2Ffvn5h%2F9Eeb77LHuYa%2B94HIt1bArbxs6yU1iIuRjEAnYqZp%2BE8erqdUBRONnA%2Bc75DE6XQaiKGAySLDuqIjKVEtavhpXmSgW%2FmlplYChutYXx7Ay7tLsRZ5PWUePGL949euKoYPr7t1HOh2jK6mdXrVC5wHaoXLBCCp%2BZp8MeAIEa%2BOqmZtns6x0xC7KTL2yZM%2BMtlRs3J6I2pViG8q258sX7OOxndrH0tpz5ki3rzuqxivyf%2FDnN%2BWMCN1SGs8yIxKS3y0aDQdYTwePVm8EMVRGzmVDK5UepkSi6cntnp2Ku8ktw20SOf5bGNm4BcRXyGdhfcfkJ9jQ7%2FVXTzl2vfEZGRLeJB94%2Fzf4%2BLjqZjFi9cuWqJwDVHIFw29ha4V6a0wSQ5BSFrGxTGvV4uH30CFSfoEoJiY4mt0CGlozy8D%2Bo5jgx%2B6jmBbwy4BEI%2B9d3rHnZ0I%2FGN%2B7usnL1ey%2BxM389WLx%2F1%2BINHRbWXfoDLjz%2B6Z07su%2BYN73vyIFFvd959sV3qtf2nfFA35F3FQw8AoDgABCGcv7JvJ7iABSRUp1epgK3CYLmFeJ5qGYSi7k3IEsbWYFQyQrE9PWqJzjM14yPj2OHrLDdhgYZZafDrqOCmQ8UpzGUuFzsLkUnVHMYs4uij%2F2F%2FcJfFxrfee3ld8QDzf2vsC8wo5nuaa44%2BMabh%2BghQAAA4XW1%2FpMcNqJgMuooCJQqiPLlrxWvQhjgF8%2F%2FSgXTwej3O6M%2FNmF1x8zWHdVaFh%2F5uU3bnwXkmg1yXz6aT6km%2BQwpyW6LRdQn2Q0U9TGTotqUGOKqNclWAjJldKcyenwSZ0h8cyc75y5CT3v2xU42u%2BnL9p6UYpSa0Nne7yy%2B1EQ%2F7PaW6%2Fdbm0N88llHNx18ic5qnrv59RXv0YUK93QAQr1q9QNhhyCJ3ORLiskXFJMvtDT5KhocAz63Yu7rj%2FPIY0oTXmKdjuAkfHg%2F60QWROeQZnI4%2Bgq5M9oX4lybrUY5GWGrIBJRpnoDiChTUeOcJmE%2BqKL%2BGCJdcNEhlrSb%2BQ6T8%2BR887zoCZJPFyv1ZQBBscZ6pWKmQyqDLKBgMIoCNwcUdUrMcuuKmVot8AvlzU6qi9roq82%2F0LSFwoaNC69OAIQGdoRMVnSRY2mRUFAYoxcJlTDIOdBSfeJRD5nMSvEEu4B%2BdkS6svyKX6HWC0A%2Bi1c2Kd5c2XRy3h0mgYbo%2F4spg%2FKNEDuCzdrMFFACSacHOUgFevPMXj5rMb9CfMoLfOrSA%2BKF5b9KyigFJCgExOMgQVJYD1TWiQQEwrO%2BG5rpVFUTC3DfaPxsA1vG9pEg3dQ8jnwV9QJea2Zv0k3XKtUKsJLHIlEqwBgjmU%2FLQUfRp9mbCwCxTjhHHZIf9OA8AILRID2BkJ%2Bs1ZoxwDW1OMStBHU83G1fm5MZ0%2B4QzhUdK3f33F8MRKk50lPCUEXzoVc4K1NnTEvz%2BRw6yqMpYkzrFSFGI7jd1ooIt4LJFRHRA24o%2F98LVH4tX7NllapJZ7zS6LZn8QVeLKsVKjrQrxv43GPPvUychyc%2FVveH0F3HR77xCrNs%2FmPDWy89tOWB3js3Y1%2Bb1GPe7Jq5dxTuORZ11TZuHC3LD00fOhwI7OVWtVZygRPSeVUt0%2BD1Wq2mVGqiGX4zmNwOu8HOhccRljzgqoiArYV5DSXF1SDB1sddEk825YBijeRQiVcrvHAqyJ5Pv%2F3%2Bk0l%2F7GwKzGzQ6Wa811i%2FqXFjfb0wlJ1jP%2FDXxwMGLpdcbNHcsTuWvv7ll29fOPPJXwAQpnMOLxWGxbIaK6VuPU3ySmaOmQ0cHDPPzVmNGM9qlJ1DHgNzu6hmOGTcZXYV9f8d8HTbUOn8QrbvuW11Tz3swiw0oRPvyPQu96Sywe9%2B2mlNGRBlVqGU88fB%2BdM97E%2BVvGCx2CV7ht%2FhtgIgmqhez9mjt1FnRYR6bscerSYTkLTqvTcUDPLPA6osi%2BJOiG7ST%2F%2Fn2W%2B%2F%2B%2BTCTLMsNCxmTzdu3Ny4evOmNS9gNlr5647tA%2Frh0V%2B%2Fmfny%2B4Gv3r54%2Bi%2BfxLF0cN44IRk6hdOTDF4jpdzqtkrxGit4uRskyaUyyqIw6paZQyiRZQ632%2B%2BJsUuivNbh53Kb%2Bx%2F2JYp%2Fe%2F%2B7qFl8eecf%2FzBk65bfb7WQLstc2AZl1GMH9v3fJxx%2Fp2pttp%2F%2Bc%2FeGrS8oUksFoBYpHVxK3cVlMjkJ4UaSuj0GvhQMgKIsVkScspUqq0GtY98IAxWmOZS1p2QNgeJSXkPW3DX3mE%2BzrxreeANH3lObN6LH8KHopW83l9G3%2B3TugmsDC9PnPNkLgEKQuYQCzplcKIVu8HC4a56vQ5YpvYtY4ESnSHIzW6Vn%2BQzd72xlLbYWV0R0nXpFDJm6XKvOqvPk5pJekVxrm%2FJekTY2T7teEU9KnHUa%2Bzj%2F8pXd%2BrzbxD1uragaVBdAqDC%2BjaAUkrJv%2FOXKcGMXmJOnbhQXF%2FF3QsHJVnf87VhB3sSqoa%2Fte5X9jf3r7FdPzMgtC%2FccNOnTtwb3ZPb6ZWdOPLzh7amPD50%2F4z8%2F1T4uVE5ICkzt9ewxXYdBbfPqVx54ddvqMauTndXFnYfmBnY%2B2PS66ypEhs2ZFOn5IO08%2FZFvfn4cEPYCCD24nnuUzM5i0nFz7dF7vEkWvcMhVEQcNgOA3q0Y7xjlCatesVT2mALbtRUfM1P06cfm%2F%2BGZhgadoWD%2FjBMnyJuLfn%2Fkk%2BjrfHXnDOow4N5XP4gWAxDYDoDjxAtAwcr9tZ3PJCDa7Ga5MmImVlQ04%2F3EwqZSIqAJJVQc3NDQ1CG3TceObXI7CJWYU1Zc0qFDaSkAubaKudSxTZAEd4Q9TqPRrNP5kj22yognrLcC1z6ISzW5xSTOhATTljhb3v2det7Zv%2FeNGZnLt9g16B6h%2BaqNHZHv0yaP8TSV89QGJTzetxgMRqNOEkSdYHeYAGw2nY7KRje1xiKGfD5zeUyFyuJsRTUiQi0bdclYkzcER73JeuD5E2zOnB07dKSgy2icydpGlxLpQTZOcjW%2FXTo9NjcO5nNT4GQCoiASQHfca2tMVBjHYVRo6SRfJQGoCAfcdruDiz%2BgdwRo66xWHrfb4RPMPm5p0302p1UPDkUPuCLEt534Igi1bHVIVIgEzfAqepHh1bRDypryyOa1DVNmblnVsDhFl79rIuIAXcHhmYdfJicWLNj3cnSLcv%2Fzx9HjQmV99dDDg8e8%2BheuMZq2cnxdUBBOApeiri69x23S22xcWW02g%2FV2ytpSV72Jmrp7m4JG6NDUt95RNPXwJ%2Bq8d0XUSWM2dhSfU9EknsU6wSyDnOwzeLgds1GbYvxvmcVylSHFilGFxE4PYRT74fKaf%2FwOTZcvobX5lZ3PPffii88%2F10Cy2I%2FswyeR%2FAFNmMfeZ1f%2F8rfzH545p1j5vdyW1apU%2B6E8nOEzCrKsS3foHJkBwQhWq7siYrXprboUaHXDzMdZ0GLBqpaeO2hPAhMUr62Y%2BgRHrThpU8Niry7c%2BPBf%2F%2Bf7yzvryabGFc8%2B6xowcMRg1kUqqh9azT5h%2F1GcNr14%2BGTWl29fevfUeYVXHNNSlVexqMKW6qHJyT6bL8OfnOK1pqalecxOp8wtv80MFRHz%2F%2BY2VT5yJ1l63Ul6r3vQ0njtQyL9GzaIW15cvXnjnI8uf%2FfJ57P0SQsajObpM%2Fd9mHXp3YunT59birloRDO2a6z%2F9T38eEzFCzE9okGOpw1ywy6zXm8wEF4DsZrB4FYtg03rc2nRkaE5IY15ZEfvjt4eRQtfaahz6rrsFoaZNlk%2FfTbaJFSenDQjlrnS6XyW1twOtIplrqLzeuZaEfHYJKq%2Frj%2F5t8pdueG5kbsG25Hfpq50%2Bj%2Fe%2F%2BtjA%2FbXzF82%2BdmN88r%2FevSPL3Z6ftEjj7Yds%2BJ13jSzsaHnpjbt7h4Uvrdr2aAH%2ByzaXLm4R1W3O7p2KO71FCCkX%2FuG7BQrwKPWJlwu3jPioEKS1%2BC0OXtFLGGbVeaCkj1xU3kqIVjV5ONWqo52xVGXhtxKNuHyEMcdA5NSJuSy17ZurRiBXdlrw2vN8lyzHQeQZdU9%2F83mRWePngiAsIOvrjKhElx8fh86ZZPJ4DS4PSaz2aZzWdVV7TFqEbMS%2F4daVmW0rJcrhBY127EvX9TPNNQl6UP7Z7zztlAZLeMO6GMSvnpozV2Dj54hp7RcjgiVau%2BHAQ0ms6hHK6jhiJZl%2BNX0NFTicIYQt7ER%2B76ptuiMte%2FtYyP4oI%2F8o0cx9iPtrx6K5UpSgI%2FWinsblz4lNc3rsZipYBZ0yQ7ubnTuxCyYK7c2A1U2Z2Rlk8LhUHSq1BmbsoRPKeSfcBbp2qSdPsY%2B3jNxsk5nLHCcaHqjg0snBF7dzc6QBZ3OvHR%2FdK5QyUaz6j5l%2B4tJbXTp7trW9eRvHClACAIIOpXGzLBdFiVAUWlxQZ3RLaD1pnQ4ngmjmhUfYgteQT9m%2FJktwFVH2Cn27hFSQLxsGO6IfhU9jUdYD0AgfL1LfHw3z%2FsVMqnHK5jB7OBLO0UHfIJCVam1GRJo46KKOdrSUrLvuwFOnfnuS%2FtYTsWfl%2FStKu2xq3cXzuCVn9wf%2Bpn87mrGy5vtC03HtkAsZ6YPCZW3yJl7RUQr6npF0P2%2F5cz0oeZ%2FksHR0%2BTL6D5y31Q6eN685sPxrixetlPl5%2FYlJxu9AFbZRbmnpqlpTq09K3F7TdV%2FbpXcPJZTfEtxCddDvj7d3EK4ZLfHjedrpx794PFH58%2F49MClCxdM44aRZaRxE%2BaPjywnw0Zg4ebdS6Xj7NzZoCl4FhAvMxuZrfluorSo0RSABN%2BtlHzx8nKeJv3cDAiV7Ijaw5Oq4OwWDQ4H8UFqqsXiE2laujso0QScEzYFFXSDxYr7U7DPVNCV5Dj2pcRw4eKhDx%2BZ%2F9jjp45OnvHwVFIePIvB49LSPRvZ%2ByPvJcsjvOq5cRenZNg4zJn2qEvdpyXVQg6tAS%2FXAzu1JvkcpuoIdVglCaojEuTngS3pjfw38rSkOlOZT8nQVNOmbD9lKoU5HFg8t2TMUz2mRrqPyi95omTcisrHK%2FsMJSfuLFn%2FUKvsVinhsvqH%2FRkZSeoOPFuKdcJwrcuYCALV8343AGpSu4xtNPOWXcZcCQNO1%2FXt0PNKk%2FGszp3Ly0IVZPfVC2Lfxb3C5ZVhQDjK7fd5dVemazjNozNTahCARxo62irVJxKnwUz4SzDKgg%2B07k9ljt9sw2apra1KOJCldLR6NAOuqD89OWHNwpPHcdniPisKChY%2BtHv7My8sX%2FFdifTO%2Bxlov4LNXXfvoH7vstCH5z462QkQypUYSDzBpV4Zzk5y6s3mZI%2BdGD1OMS3dlORL6h%2FR%2B3xOcNr6RpxJIPa5uRWkRdPQzZ6Nm29lf5Lfinl2ypuduEqQxqONXTatnD0HG9jQblU05erVU2%2B99f%2FEEzUL%2B%2F1uGTs397MxS%2B7YtDz%2FxwtzsfO%2BU4psZqMkeIVtnHNByAibW0GmBSxtctLd7iwZeNSYn1gJchaVBku9il8r9co82Ja9clCxDnKwNLs0IXQ6VLV4%2BOLx8%2BeOq7t%2FUVXVgmF14%2BYuGrN42MKqeVtnzHh627QZW8mHj01aNmxh794Lhz059ZEFD%2FCHvfj7JZN%2BN2XbM1Onbd8BiscDEJT9Fw8MDrdzWGSj0WYS9URPTS6LW%2FYmGSwW2So5HBScbqsz3UmsTqvThG7JlATlWg%2B33RHrzL7lpjuGUOGj1uaovjBEKnH2HjYCJfY6dmGv72BvYGd%2BARu7j1wgZ5vZ3Ma57Ec08RslQBKsgaxUVYkkUR726QUqUDlmFjgmiYqtbgjFLYRiI5p%2FYebmnxVpXPuF1kupUABdeGdcdiE4pdy0Dj5fmkmCgNS13E07lbRqK%2Fn1%2FmCviN%2Btt%2FWK6OGGznh%2Fs4t9I39VVFmLztSUlwuwZdCiRC2l%2FKk33lG0dHD%2FqprTbw5%2FZmTxqMV9Z8yYvelw%2FcCqjf%2F%2B6K9P9H9t4KLl7R%2BcvmJR99W%2Ff6Ggbs3LPQbRnMF1WW0mD5q1NDW4IJjSKdy5prTH%2BklDl%2BfctXrZxm5rs9r27dWuY8e8oqHTRvWb0MVZPfnuKWXOMUCwWLTQ8eKH6u5TWpiTanKAI8lnpW495N90QCAhzctKeI%2FFxVnZpaXZWcU4pzgrq7Q0K6tYnFrUrl1RYUFBYfwOQGEM7xzvEdt5hxKeSwWDXmrNT0936a1esbSDZAKH1ZRuIuCwOYjJYXKk5AWcoRQByhNPBdhblgFRMxHuG90bnN2obu8KDjc3eYHM1py5DiFU2NqhNXTQOXMWz10weE77sRWvffDZq0880vHB5vXv4PB3les1tv2D02z76xP2YNvdezD3pT3s7N497JOXhMCeTTu3t%2F2dq9X3n575qfMjIXZI%2FQ7b%2Fu6brOGD0zj0rT%2BwD%2F%2BwB3P2xr8GQKCCushU8W1OdzqUhlt5pRQDokeJazP8rQwGh88D1EYJNTvSOakf3feGku9qVGpqG4xTV8ojfbXWGSt18iYUtdZJXEnDlt0%2FedPztWvHjM%2BbtnB%2BHauecmLUlAeov2bk6HHjJkhCcGFoRIcJs1jnI2OaCgRBqd8NhFraSI%2BCBGbICTupxI21YNTrBbMkWKwmUYegHGS5WbPRiyhjVuw2EAfPVEriM1kjLsUhtexzTK9lO0kQ1%2Fdk29mzvXB9yo23qh9EHfeDXhAhJWwiKKAki0J1RCSQr20nattixUJOXfM71Bv9Hhc%2BCdeuaV3LRAIbAAjXdUoX16r7wqGgF3iOLui5Zpn1JodXKu1gsnFoi9Pi0DmtjnQHAR63E4fT4bythikCCP22ZKVVoUS%2Bhp0Bqm51Fnr%2BL2UjHz5YPXLwfRNx36B%2Bl3eeXrwWxYbNVy%2F8n%2BpGrtwd7tNtSfXsNFaLo9jTdPZ89ub%2FpXB47YrkEiRpzW3r%2BoJ09UfBJLnmAoG5dBi5LJ5U83Z%2F2GIGp7L7nGwzHPNQhS3J7yWaAKe27LkytvA6c%2FfPn39g4Oqa%2Bfun195VPX3qwLunC2vmH9i%2FoGZlTdOCgdOm3l0zdZoiv%2FGASic8yQYLAMhwBiA6Q93NqCLLub9OUmpcstOLaHGCwAsItnQvZqjyadHEUVx6cz%2B0JMt%2Bsjy645vIQH91edGont0XbPj9msiaPXiIVI2%2FNHhk35IePbMLh0yeP6V6%2FZPPA4KflKlzBqAsnGkVRaCONIPUOstxn%2FMhJ%2BnrRKMzxUmcTl2yP92s88eVhKvIfTe2KDHRmKtlyd%2F2PpPpA3vsPbRzw4w1sz%2F8snbmA6Or7%2Bw%2BpUPP8mXDl2wVvqx%2BwJu%2F%2FYmVHWb32L5q0oAeXXrkBYa2LZl5056LnkfvwhP6xD0X5YAIN3pyAOvaT85494494cnCD133dnN3O1oEqNZDegiV4IHicLJoMOhs4HS6dC6%2BLeC2ulLMRKks6LWkMWHX6XqfaELKyMnTOhsGs13PNCxJNkz%2BZ%2F0Qg6GhAeewK698pKaNLwyr2caOScrsU1mzMEJygRWCYYcgIoBopDa7TidSq4jaQa%2F8RJkG7MortqVTEvILI6Z9PL1rzacn%2F%2Fov0pY1S3t%2FraYhx5WrKDBA2ED6Yh0dqvitsEECMJuofkCEQsyAJOqq2jzatUOseZR82L1nz%2B7xMwlZzIVNAOBQIge7xQhgUfrILXa7jtog%2F71CzQq3qDNoZYbSkOzBpo31obZtOw24a8BDQx4ubWIXRk7UT9S1Kckrtu%2BbHgSEvqQKP1d3kPleHwFKDSZuX2mGBGlK3sc5EGO7FpnEzw8MXLlQ8pQsvpNv4K4ld9471NP2%2FhFAoDt1kaPi26q3zgo7lONnEnBvHfMfbr3iP964r4XTTjgzJSYsWHJ0V%2F3qF3eu3%2FB8lN07fsKwYRMeGCZM3nHw8LPP7T%2Bw%2FTH%2Bb%2FYjjwCBau4hdsY9BF%2BZRr1AgMrEoJdu5R%2F4fBhELEUxdqM72c5aTGef1%2BIQVnvjPTGxCb3wfhzek01IufGW24c%2BAOIZzq8gnCYLACAbHrsGKMNHNDV6EPR%2FosTBA8ziYuCw7Tjs%2BThseQz2CwV2Ou3PYeV9xMZBVchkAMkvnuAQM34FFf4CxEZ9KD5qXmxUIBBiM2mNMBxSoY3Sba1zpQWwlbVVwCXk5EIqmmhqKj93lzEgkm2zG3tH7IEWecP9w%2B9rGZ4ohslCYnXDUm9MGF2J0ihbnJBfkf59Rs7q4vv9Y9X1ozq9%2BdbRTwPhSMnYbk2zOnXtXqqkXKHH1tZM7NOvw5ip2e0XjzjcWDEhMjB%2FyIz70jFvcU%2FeGRvmVKrdoPJ0bltbq9R1v%2FYaDgTdn4hNzIa84ltA1MLCGETS7SCOQSAGkdoSIv86xGsg3HKMrOsQE6CUQxiaKGmtgtyAkWIwIMNxKIN5QK4xAIk3MIIVnNA%2FfAdPM%2BwIOhPaRNEtuvROycm7kHm7iMHM7wabASUqOtByowkglmHm5an5G8bOiYau9y%2FSAF7vYVQ2zqR5UUeUXdxLDtMT0SMkNXqR9Lhag0cfURpetbZG%2FAvZr2jRHOZSOkc5ztkqzrMIAf55rM9N5VmbON8PqhxBs8aRmyFqoTwG4b4dxLFrV2MQyS0hsq5DTACHylWC%2FhhXgUA%2BgFip9id54Z5wod3t1glmAKcgCUk%2BrogS11erXC6%2FJJ%2BWL8jcIsuyoNfbqiJ6Kri17tNEXW55EDWhHZV7uVhLarxnM5QhVqpNqbM3bcJ9eBf%2Bbn%2F07S9xNlt4lIyKtaWSunqyntWxHSQcba5nhhhNYrmqS%2B3jurSmJdWx7jiVLwUx3sKsmLb5bgdRi4YYhP92EMegKQaR3RIiX4PgeGy65RhZ1yEmwMdxnW4b5z7CQrQJJmEDGMEX1st6ino0mXXgy0%2B0x2rMHLeOu0ewbTh8BHua7RiLw9m2MThS2DCa%2F3fbaLyfPTsaR%2BCIsWwrAOXzv877434CJ6RAQFkZnnRvmsAPExtcAA6rqFMCF0%2Ba32f2945YHTpRoDazQHnjnES1lrm3%2BFq4%2BYgL%2Fygm0lglwc7fxSoM1BZEj3qKzovZ1zsLv1479tEH9ykddGe2jnx04rGmh6Mjpu%2F9zy%2FNwbFk68SdWpPhmOUDNr2FDyl9dMMXV699l61D26bmvgOVZjp2ZRN9qTc7xVdOrI9LlUxpXLoVMfk7Nb7fDFELp2MQKbeDOAZzYhAZLSGyrkNMgA3xlRNMtEfCbHWUTvF5CmKjOFSQeO%2FfrHjvH9%2BpMOtFUbKDBB6vWeALiC8fs96sl2LdkZoVarkRrHVH8v9lCDcaJGexM%2BzzQ42NZ9GHnuYrO3mL5LvvUdvFy4zXWq%2FB6ei%2FV%2B5Y9yQAqv0oW6R0aK94ppxcMTUAXpMJUu25YkGhw5Hbrl12RaQd5LrV3S5tj%2Bvm0xpaZCBL2vZIQjWCo6Q2%2F2lnOTKUqE%2F1UYJv5ZAOKb36Lxv32p%2BOTCrfUnn27ofnjujZq094yVz2TcPf%2Fv7%2B58IPi6dX3OnPyC0L3b917LZdPTcF8w%2F0mVQxcHZN%2BcTisqHF1YMuXO0r7Nv3562c52pXkOTnPL8TACXovgLUVWlXOH6L57V56vN2t3t%2B7FP1eajFc%2FGz689fe%2BUW3xc%2FvP58whegruiOKsCNGRZehzj%2BcwyiTQwCqAIhKbtXOVDENWdkOJQLre3tedlIaF%2BWlJTe3ghi5y4pbYNtKyK%2BAqGgV6RD66BdECyZQU%2BxzqKriLgsNtBaO9R97viBxZsNL1corarUot3Jy%2F%2BqHSkOv7bLFExMz5TiAMaaVIb%2Fwg7NmPnUc0VVb4%2Ba%2F3xO8a6Hj%2F0reqcOO967tWbwurHswpy73lz03Mt7Jg1ZtfPpwzvoK7OWGon8BOY%2F%2ByddrEUqp%2Fie%2B4eMYP%2F9%2ByRWGwjyVpav5k5sXH9%2F5MVNo2XdQ6Sw4ektO5V1zXc4lW4kzreeMU%2BJFaqnVDtxVIn1ikl8vyqRVppEbn5e21993vp2z4%2F9rD7PafGcS1R7PsEQk1d7TaLX%2FgqAo9URXolZHHYXKGOgqI3xIgApTICovZYRgzDHIa79iUMMSoA4xl6IQTg0iG84RDrHQ4OYwA4CqBbHZ9d89VRlx1zyq6euqsJ5fsnUqhXwYN5jsTttkj7YRp9eETFSj91nsfLIR0%2B9LqSttY3QmLJw6%2F3b430QyITiIlAqxdlBMcj%2FlHpUk%2B6gRVqnV4kwil39%2Be%2FsK5T%2F9sUYXdkp9n3vr4YN77ll3OW%2Bpzc8v7NpC3vppe0vPUtC7Ev2FzR%2FcQmlWcInr25%2BcGHXgtrefZ6cNHMlm8b%2BtaaRbXjh4Aku21jXgbraqmOrzaLyJC1RNqNUrt0Vk%2F1HquySb%2Fe8drD6PPN2z4%2Bp45Ngi%2Bd8fu35a9%2Ff4vtcJtrzCSkx3Wh3fS2Ph2YhR9gJVO1CD4WTPAaDTSACKjsZTifKZjMqJ%2FQQ8tX1yhOfG8nPjUN6iccXE96Pp8ejezqVFHXsFCrqot3J8iefZP%2Fq3KW8Y1m4nPwYfwOUY3tEGCUsjvv7PvxEa3orl8vQ6iZn76u47uxt1M%2Bb2Kjnf3P2ZWVxBdGcfXw7QXSpTl4Si1SnX6L2X2yaUjNt%2BDw0Xd40o6Z25NzmV4rxTJ9pvAljfYjl95r63Iuxboyetf0XbEBQGjL6zuy7cMOvu8aRRcWffLRjTHRO6DzXjNjutSq5e2KSf0PVDI8mmZuf107VNOfWz4851OeBFs%2B5ZLXnE%2FyxtZarrfrYDqw6wr2xGWIjpKsAWu%2BI2t%2BVyXex0jOkFJfNZpfsrQMOsKeYPHqqT%2BNdjB7q5euvRZPnb3oYUWsXUUomXo%2FW9JUVbx7J4HugOKR748Sz333%2Fyd8fMwk63mSElTs38OYRzF9LmyID2Efsvwpjn83sV86KdcDaFQ1NOXQi58u3ce%2FZMxo1nF6Nmgn7Y%2FTmxejV%2BpuEyuv9TaJArLfsb%2BIw6gkU6UvxFLggHe4Ot0uSrE5nKpjtqZKY4bc6eDxpBaOR51hGGj%2BVwg8UUAc4b5zk4det2ia1fWVJO2TlvZF9aafq7NnSl1EYN4y9zJ7BYRgeN5RaonxdR8%2BRfs09fmXXEH%2Becs89LqzDiTgeF3ljSZmwlZ1m55QTGn6hNi32qy1yujAU0iAXCmBQuG26zkI8nqx8t7tVlk4oDOW1Mbbh0RHvSCKixdiunWg32pIyxcyKCIieFj7YoVjVRAeseV9R9a0q5rdyvYktTFkxnyvWs%2FNzup6pu8B%2BROnrBae6djz2%2BInL0aAOq4Y%2Fe8%2BQDVf9G154buPm5xvWCb3mrjKRjN%2B7vp4xEwtQh3q8Y%2Ba0KbPYz19MYDO5tw1mkLIPz3985rOPP%2F10x9NP7wBEE68Q7pH8YFF6wGWwWXmN0KJs3CSfKkwsE%2FIgzx1QzhIE0DR3nLfB89CcmUMWLuFF2u%2BWPJGTu3C%2Bt3TBoiIAgpP5iG2lhdp%2BkEMyxSpMejflw753u9KSrHUfcfpp29njxj46a8zY3z3YPRTq3rmsqJu4b9TM2lGjps8c3qFLlw78AkQdn%2Bk78TN1N5wPn%2BSzg2gC%2FnKrZc73En4mKLYb3o4vKU6BwvQ0olRTQpJEXXkDB%2FTOLAxZRpmn39tucP%2FKjIL21tHmqcL5rLZZnbvMquO3Tl1n1aldEci5Ff%2FFEyCCePMvngykw%2BK%2FeMIh5f8VUtYgffQ49lB7%2BR0HUNTpQenhP6WBBkscHEs5y%2BQZ1WF29yx63DMUTVyicNM3RdTpRZly061Rq55Od5RisXIk%2FbGKDPGARzmLjqmfcouq%2Fe4LkcAKAEQZizSpY1khOWwS0KwXbHbQUZP2M1%2Bx3pUgbyrhA%2FvjeGG9tcNjs9M6maNnb2B4FnXTeR1Tw7TF6DZldL0ZRcHuMIs2WRn9LW10DWe%2Fei9JQJ4ELUkjOsxJ7m6%2BQYbnXvbTY2Ow6D6FHh%2F7lTTBZZSVLOtqB8g4iCCHzeZK%2BdC1Y38ymWJ3vb5SBnteXszG7cAfyXB6EYzgPBD%2FURrIP3Wr6u%2BOqQ9OmDF94qRp5JtZj%2F9u9sx5C%2Ficym8TiHvgB8gGOwAEwU4c%2FM4nELJA1RaoJelK5ZPTbBAIlYikk0WuCInpvPM3e2CJ%2B16ASv2UpGqjUBAIkMRRWhRNSeqtK6QAyGYBkJXxUyYgEkE7ZYLxAQJIVjbPWkkXx4%2BZIJRzr1gnnuT0TQ2Xp3rTPZ5kI5Hl5NZ2wZDslYJtjN4kb%2F%2BILklMTUvtHyFp1rT0tPw0qqdJaUlpzsxM6BvJlJ0W3iDhg5ZN3bwwdMsfKruRW2ZQbuRlt9evdcorVpPyolGwuJT%2FdUDsCHUKOz4AWfRHQvA065Z1snHLxtW7%2FoddaNewgZANO4LY%2Bn9OPN%2BrQSxmD80rC7ed1%2FRm9%2FpuaEacl3tH9TwUsfXIpYPVzprl6o4iBXdYT0AUtDAtYc3y%2BEuJtrjkUwGEVlI650ylKvE%2B5ABA%2FHNTwuf9lc%2BBgItUcf0%2FAgZwQedwuks0ypTyaYjSqY%2BiqLe60l3E5aIWOZ1mxPuV70toergeGwR4g0v8V2eKi0otVJZJ05xV7GHcsHQO%2B0ESk9LSjDup6913x%2FKzVKdeX9THFGzb1v5TDDfpQ45bECoJ9%2B43cBcf0nCXXr%2FF8%2F43notvxJ6rVEnqc1TWG05X9cp%2BAAQRKWiHl2Knck80KgqljCAC4Aq1QvJpPHP6XaxCImp1FiUv6pwAUXstt2Ud9NrbHGJCAsQx9ufEKktsFtJBzroOMYF9EK%2FV%2BGK1mv8PflNJUQAAAAABAAAAARmahXJJOF8PPPUACQgAAAAAAMk1MYsAAAAAyehMTPua%2FdUJoghiAAAACQACAAAAAAAAeAFjYGRg4Oj9u4KBgXPN71n%2FqjkXAUVQwU0Ap6sHhAB4AW2SA6wYQRRF786%2B2d3atm3b9ldQ27atsG6D2mFt2zaC2ra2d%2FYbSU7u6C3OG7mIowAgGQFlKIBldiXM1CVQQRZiurMEffRtDLVOYqbqhBBSS%2Fohgnt9rG%2BooxYiTOXDMvUBGbnWixwgPUgnUoLMJCOj5n1IP3Oe1ImajzZpD0YOtxzG6rSALoOzOiUm6ps4K8NJPs6vc%2F4cZ1UBv4u85FoRnHWr4azjkRqYKFej8hP3eqCfDER61uyT44DbBzlkBTwZD8h8%2FsMabOD3ZmFWkAiUs5f4f2SFNZfv6iTPscW%2BjOHynEzEcLULuaQbivCdW5SDNcrx50uFYLzFHYotZl1umvNM1tgNWX%2BV%2F3gdebi3ThTgVEMWKYci4kHZhxBie3TYx3rHbGr%2BPdo7x4dIHTKe5DFn%2BO%2Fj%2BW2VnE3ooW6isf0LIUENvZs1gf%2FLHojJwdpplCP5gn%2F5gi26FoYa19ZVFOJ6Sxuoz%2Fq2Ti20IKVJdnqvYJwnhfPH%2F2f6YHoQF30aZaK9J8T026RxH5fA%2FWPW%2F8IW4zkpnIfoFLifGB86v0ffm5nbyRs5iaHR3hNBD0HSfTzoPugRM%2BhdN0x052KoHLBS0tdgpidAiEesDsgWYO73RWQz2LWIwjqnMe%2FuYISQtlbyf2NlT9Q9PoBcBnrO6I5ELoMeyHkNnIXGdv809H%2FDXNOTeAEc0jWMJFcQxvFnto%2F5LjEvHrdbmh2Kji9aPL4839TcKPNAa6mlZUyOmZk6lzbPJ3bo56%2F%2FCz%2BVaqqrat5rY8x7xnzxl3nvo%2B27jFnz8c%2FmI9Nmh2XBdMsilrBitsnD9rI8aiN5DI%2FjSftC9mIf9pMfIB4kHiI%2BhWfQY5aPAYYYYYwpcyfpMMX0aZzBWZzDeVygchGXcBlX8ApexWt4HW%2FgLbzNbnfwLt7DJ%2Fp0TX4%2BUucji1hCnY%2FU%2BcijVB7D46jzkb3Yh%2F3kB4gHiYeIT%2BEZ9JjlY4AhRhhjytxJOkwxfRpncBbncB4XqFzEJVzGFbyCV%2FEaXscbeAtvs9sdvIv3cjmftWavuWs2mg6byt3ooIsFOyx77Kos2kiWsIK%2FUVPDOjawiQmO4CgdxnAcJzClz2PVbNKsy2ZzvoncjQ66qE2kNpHaRJawgr9RU8M6NrCJCY6gNpFjOI4TmNIn36TNfGSH5RrssKtyN%2B59b410iF0sUFO0l2UJtY%2F8jU9rWMcGNjHBEUypf0z8mm7vZLvZaC%2FLzdhmV2XBvpBF25IlLJOvEFfRI%2BNjgCFGGGNK5Rs6Z7Ij%2F45yNzro4m9Ywzo2sIkJjuBj2ZnvLDdjGxntLLWzLGGZfIW4ih4ZHwMMMcIYUyq1s8xkl97bH0y3JkZyM36j%2F%2B58rvTQxwBDjDDGNzyVyX35Ccjd6KCLv2EN69jAJiY4go%2Flfr05F%2BUa7CCzGx10sYA9tiWLxCWs2BfyN%2BIa1rGBTUxwBEfpMIbjOIEpfdjHvGaTd9LJb0duRp2S1O1I3Y4sYZl8hbiKHhkfAwwxwhhTKt%2FQOZPfmY3%2F%2FSs3Y5tNpTpL9ZQeGR8DDDHCGN%2FwbCbdfHO5GbW51OZSm8sSlslXiKvokfExwBAjjDGlUpvLTBY0K5KbiDcT672SbXZY6k7lbnTQxQI1h%2B1FeZTKY3gcT2KvTWUf9pMZIB4kHiI%2BxcQzxGfpfA7P4wW8yG4eT%2FkYYIgRxvgb9TWsYwObmOAITlI%2Fxf7TOIOzOIfzuEDlIi7hMq7gFbyK1%2FA63sBbeJtvdwfv4j28zyaP8QmVL%2FimL%2FENJ5PJHt3RqtyMbbYlPfQxwBAjjPEN9ZksqkMqN6PuV7bZy7LDtuRudNDFwzx1FI%2FhcTzJp73Yh%2F3kB4gHiYeIT%2BEZ9JjlY4AhRhjjb1TWsI4NbGKCIzjJlCmcxhmcxTmcxwVcxCVcxhW8glfxGl7HG3gLbzPxDt7Fe%2FgY%2F%2Begvq0YCAEoCNa1n%2BKVyTUl3Q0uIhoe%2B3DnRfV7nXGOc5zjHOc4xznOcY5znOMc5zjHOc5xjnOc4xznOMc5znGOc5zjHOc4xznOcY5znOMc5zjHOc5xjnOc4xznOMc5znGOc5zjHOc4xznOcY5znOM8XZouTZemS1OAKcAUYAowBZgCTAHm3x31O7p3vNf5c1iXeBkEAQDFcbsJX0IqFBwK7tyEgkPC3R0K7hrXzsIhePPK%2F7c77jPM1yxSPua0WmuDzNcuNmuLtmq7sbyfsUu7De%2Fxu9fvvvDNfN3ioN9j5pq0ximd1hmd1TmlX7iky7qiq7qmG3pgXYd6pMd6oqd6pud6oZd6pdd6p%2Ff6oI%2F6pC%2FKSxvf9F0%2F1LFl1naRcwwzrAu7AHNarbW6oEu6rCu6qmu6ob9Y7xu%2BkbfHH1ZopCk25RVrhXKn4LCO6KiOGfvpd%2BR3is15xXmVWKGRptgaysQKpUwc1hEdVcpEysTI7xTbKHMcKzTSFDtCmVihkab4z0FdI0QQBAEUbRz6XLh3Lc7VcI%2FWN54IuxXFS97oH58%2BMBoclE1usbHHW77wlW985wcHHHLEMSecsUuPXMNRqfzib3pcllj5xd%2B0lSVW5nNIL3nF6389h%2BY5NG3Thja0oQ1taEMb2tCGNrQn%2BQwjrcwxM93gJre4Y89mvsdb3vGeD3zkE5%2F5wle%2B8Z0fHHDIEceccMaOX67wNz3747gObCQAQhCKdjlRzBVD5be7rwAmfOMQsUvPLj279OzSYBks49Ibl97In%2FHCuNDGO%2BNOW6qlWqqlWqqlWqqlWqqYUkwpphTzifnEfII92IM92IM92IM92IM92IM92I%2FD4%2FA4PA6Pw%2BPwODwOj8M%2Ff7kaaDXQyt7K3mqglcCVwNVAq4FWA60GWglZCVkJWQlZCVkJWQlZDbQyqhpoNdAPh3NAwCAAwwDM%2B7b2sg8kCjIO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO47AO67AO67AO67AO67AO67AO67AO67AO67AO67AO67AO63AO53AO53AO53AO53AO53AO53AO53AO53AO53AO53AO5xCHOMQhDnGIQxziEIc4xCEOcYhDHOIQhzjEIQ5xiEMd6lCHOtShDnWoQx3qUIc61KEOdahDHepQhzrUoQ6%2Fh%2BP6RpIjiKEoyOPvCARUoK9LctP5ZqXTop7q%2F6H%2F0H%2B4P9yfPz82bdm2Y9ee%2FT355bS3%2FdivDW9reFtDb4beDL0ZejP0ZujN0JuhN0Nvht4MvRl6M%2FRm6M3w1of3PVnJSlaykpWsZCUrWclKVrKSlaxkJStZySpWsYpVrGIVq1jFKlaxilWsYhWrWMUqVrGa1axmNatZzWpWs5rVrGY1q1nNalazmtWsYQ1rWMMa1rCGNaxhDWtYwxrWsIY1rGENa1nLWtaylrWsZS1rWcta1rKWtaxlLWtZyzrWsY51rGMd61jHOtaxjnWsYx3rWMc61rEeTf1o6kdTP%2F84rpMqCKAYhmH8Cfy2JjuLCPiYPDH1Y%2BrH1I%2BpH1M%2Fpn5M%2FZh6FEZhFEZhFEZhFEZhFEZhFFZhFVZhFVZhFVZhFVZhFVbhFE7hFE7hFE7hFE7hFE7hFCKgCChPHQFlc7I52ZxsTgQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQti5bl63L1mXrsnXZuggoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCyt5GQBFQBPTlwD7OEIaBKAxSOrmJVZa2TsJcwJ6r0%2F%2B9sBOGnTDshOF%2BDndyXG7k7vfh9%2Bn35fft978Thp2wKuqqqKtarmq58cYbb7zzzjvvfPDBBx988sknn3zxxRdfPHnyVPip8FPhp8JPhZ8KP78czLdxBDAMAMFc%2FbdAk4AERoMS5CpQOW82uWyPHexkJzvZyU52spOd7GQnu9jFLnaxi13sYhe72MVudrOb3exmN7vZzW52s8EGG2ywwQYbbLDBBnvZy172spe97GUve9nLJptssskmm2yyySabbLHFFltsscUWW2yxxX6%2B7P%2BrH%2Fqtf6%2B2Z3u2Z3u2Z3u2Z3u2Z3s%2BO66jKoYBGASA%2FiUFeLO2tqfgvhIgVkOshvj%2F8f%2FjF8VqiL8dqyG%2Bd4klllhiiSWWWGKJJY444ogjjjjiiCOO%2BPua0gPv7paRAHgBLcEDFOsGAADAurFtJw%2Fbt23btm3btm3btm3btq27UCik%2F1sq1CH0I9wl%2FDTSONInsjxyKcpGc0VrRNtGx0dXRF%2FFpFiV2KbYl3j%2B%2BJz4vkTaxKjEgcSXpJzMm6yb3ALkAnoCV0ARLAcOBjdCAJQJqgWNhJZDT2EbbgTPhz8h%2BZFJyDbkFSqgVdGh6Br0BhbFFCwHVhNrj43DXuH58V74WcIkahHvyDRkLXIGeY18SxWl%2BlMHaIVuSc%2Bh3zHpmNbMJOYuy7DF2E7sFvYMJ3Clf%2B3DHecNvjm%2Fm38g1BYmioxYS5wqbhZ3S0Wl2tJkab50U04pl5CHy9vlmwqlZFJaK4uVnco55YlaUK2kNla7qEPV6epi9aMW01jN0zJohbRZ2mptj3ZWu6e91wE9vT5LX63v0c%2Fq9%2FUPRiZjprHS2GmcNG4ar8yIOcycZC4yN5mHzMvmE%2FOrhVq6NcCaYC2wNlgHrAvWQ%2Ft%2Fe6w9115r77XP2fecrE4xp65zwM3lNnZnuBfdZ17E071sXj6vrTfP2%2BHd8F74lJ%2FeL%2BHv86%2F6D%2F23Qfogf1A%2BqB10CAYGk4LFwdaf2C%2BJfQAAAAABAAAA3QCKABYAVgAFAAIAEAAvAFwAAAEOAPgAAwABeAFljgNuBEAUhr%2FajBr3AHVY27btds0L7MH3Wysz897PZIAO7mihqbWLJoahiJvpl%2BWxc4HRIm6tyrQxwkMRtzNIooj7uSDDMRE%2BCdk859Ud50z%2BTZKAPMaqyjsm%2BHDGzI37GlqiNTu%2Ftj7E00x5rrBBXDWMWdUJdMrtUveHhCfCHJOeNB4m9CK%2Bd91PWZgY37oBfov%2FiTvjKgfsss4mR5w7x5kxPZUFNtEoQ3gBbMEDjJYBAADQ9%2F3nu2zbtm3b5p9t17JdQ7Zt21zmvGXXvJrZe0LA37Cw%2F3lDEBISIVKUaDFixYmXIJHEkkgqmeRSSCmV1NJIK530Msgok8yyyCqb7HLIKZfc8sgrn%2FwKKKiwIooqprgSSiqltDLKKqe8CiqqpLIqqqqmuhpqqqW2Ouqqp74GGmqksSaaaqa5FlpqpbU22mqnvQ466qSzLrrqprs9NpthprNWeWeWReZba6ctQYR5QaTplvvhp4VWm%2BOyt75bZ5fffvljk71uum6fHnpaopfbervhlvfCHnngof36%2BGappx57oq%2BPPpurv34GGGSgwTYYYpihhhthlJFGG%2BODscYbZ4JJJjphoykmm2qaT7445ZkDDnrujRcOOeyY46444qirZtvtnPPOBFG%2BBtFBTBAbxAXxQYJC7rvjrnv%2FxpJXmpPDXpqXaWDg6MKZX5ZaVJycX5TK4lpalA8SdnMyMITSRjxp%2BaVFxaUFqUWZ%2BUVQQWMobcKUlgYAHQ14sAAAeAFNSzVaxFAQfhP9tprgntWkeR2PGvd1GRwqaiyhxd1bTpGXbm%2FBPdAbrFaMzy%2BT75H4YoxiYFN0UaWoDWhP2IGtZtNuNJMW0fS8E3XHLHJEiga66lFTq0cNtR5dXhLRpSbXJTpJB5U00XSrgOqEGqjqwvxA9GsekiJBw2KIekUPdQCSJZAQ86hE8QMVxDoqhgKMQDDaZ6csYH9Msxic9YIOVXgLK2XO01WzXkrLSGFTwp10yq05WdyQxp1ktLG5FgK8rF8%2FP7PpkbQcLa%2FJ2Mh6Wu42D2sk7GXT657H%2BY7nH%2FNW%2BNzz%2Bf9ov%2F07DXE7QQYAAA%3D%3D%29%20format%28%27woff%27%29%3B%0A%7D%0A%40font%2Dface%20%7B%0Afont%2Dfamily%3A%20%27Open%20Sans%27%3B%0Afont%2Dstyle%3A%20normal%3B%0Afont%2Dweight%3A%20700%3B%0Asrc%3A%20local%28%27Open%20Sans%20Bold%27%29%2C%20local%28%27OpenSans%2DBold%27%29%2C%20url%28data%3Aapplication%2Ffont%2Dwoff%3Bbase64%2Cd09GRgABAAAAAFIkABIAAAAAjFQAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABlAAAABYAAAAWABAA3UdQT1MAAAGsAAAADAAAAAwAFQAKR1NVQgAAAbgAAABZAAAAdN3O3ptPUy8yAAACFAAAAGAAAABgonWhGGNtYXAAAAJ0AAAAmAAAAMyvDbOdY3Z0IAAAAwwAAABdAAAAqhMtGpRmcGdtAAADbAAABKQAAAfgu3OkdWdhc3AAAAgQAAAADAAAAAwACAAbZ2x5ZgAACBwAADiOAABYHAyUF61oZWFkAABArAAAADYAAAA29%2BHHDmhoZWEAAEDkAAAAHwAAACQOKQeIaG10eAAAQQQAAAICAAADbOuUTaVrZXJuAABDCAAAChcAAB6Qo%2Buk42xvY2EAAE0gAAABugAAAbyyH8b%2FbWF4cAAATtwAAAAgAAAAIAJoAh9uYW1lAABO%2FAAAALcAAAFcGJAzWHBvc3QAAE%2B0AAABhgAAAiiYDmoRcHJlcAAAUTwAAADnAAAA%2BMgJ%2FGsAAQAAAAwAAAAAAAAAAgABAAAA3AABAAAAAQAAAAoACgAKAAB4AR3HNcJBAQDA8d%2BrLzDatEXOrqDd4S2ayUX1beTyDwEyyrqCbXrY%2BxPD8ylAsF0tUn%2F4nlj89Z9A7%2BtETl5RXdNNZGDm%2BvXYXWjgLDRzEhoLBAYv0%2F0NHAAAAAADBQ8CvAAFAAgFmgUzAAABHwWaBTMAAAPRAGYB%2FAgCAgsIBgMFBAICBOAAAu9AACBbAAAAKAAAAAAxQVNDACAAIP%2F9Bh%2F%2BFACECI0CWCAAAZ8AAAAABF4FtgAAACAAA3gBY2BgYGRgBmIGBh4GFoYDQFqHQYGBBcjzYPBkqGM4zXCe4T%2BjIWMw0zGmW0x3FEQUpBTkFJQU1BSsFFwUShTWKAn9%2Fw%2FUpQBU7cWwgOEMwwWg6iCoamEFCQUZsGpLhOr%2Fjxn6%2Fz%2F6f5CB9%2F%2Fe%2Fz3%2Fc%2F7%2B%2Bvv877MHGx6sfbDmwcoHyx5MedD9IOGByr39QHeRAABARzfieAFjE2EQZ2Bg3QYkS1m3sZ5lQAEscUDxagaG%2F29APAT5TwRIgnSJ%2Fpny%2F%2FW%2F%2Fv8P%2Fu0Bigj9C2MgC3BAqKcM3xgZGLUZLjNsYmQCsoGY4S3DfYZNDAyMIQAKyCHTAAAAeAGNVEd320YQ3oUaqwO66gUpi6wpN9K9V4QEYCquKnxvoTRA7VE5%2BZLemEvKyvkvA%2BtC%2BeRj6m9Iv0VH5%2BrMLEiml1XhzPdNn3n0rj6%2FEKn2%2FNzszO1bN29cv%2FbcdOtqGPjNxrPelcuXLl44f%2B7smdOnjh09crhe279vqrpXPuM%2BPbmzYj%2B2rVws5HMT42OjIxZnNQE8DmCkKiphIgOZtOo1EUx2%2FHotkGEMIhGAH6NTstUykExAxAKmEqSGMFl6aLn6J0svs%2FSGltwWF9lFSiEFfO1L0eMLMwrlT30ZCdgy8g2S0cMoZVRcFz1MVVStCCB8raOD2Md4abHQlM2VQr3G0kIRxSJKsF%2FeSfn%2By9wI1v7gfGqxXBmDUKdBsgy3Z1TgO64b1WvTsE36hmJNExLGmzBhQoo1Kp2ti7T2QN%2Ft2WwxPlRalsvJCwpGEvTVI4HWH0HlEByQPhx468dJ7HwFatIP4BBFvTY7zHPtt5Qcxqq2FPohw3bk1s9%2FRJI%2BMl61HzISwWoCn1UuPSfEWWsdShHqWCe9R91FKWyp01JJ3wlw3Oy2Ao74%2FXUHwrsR2HGHn4%2F6rYez12DHzPMKrGooOgki%2BHtFumcdtzK0uf1PNMOxwDhN2HVpDOs9jy2iAt0ZlemCLTr3mHfkUARWTMyDAbOrTUx3wAzdY%2BniaOaUhtHq9LIMcOLrCXQXQSSv0GKkDdt%2BcVypt1fEuSORsRUwgrZrAsamYJy8fu%2BAd0Mu2iYFhexjy9FIVLaLcxLDUJxABnH%2F97XOJAYQOOjWoewQ5hV4Pgpe0t9YkB49gh5JjAtb880y4Yi8AztlY7hdKitYm1PGpe8GO5vA4qW%2BFxwJfMosAk2X9n9X2cVVfnA36pzHNHJGbbITj75NTwpn4wQ7ySKfAu9u4kVOBVotr8LTsbMMIl4VynHBizBEJNVKBAfMNA9867j0InNX8%2BranLw2s6DOmqIHBIbDfQR%2FCiOVk4XBY4VcNSeU5YxEaGgjIEIUZOMi%2FoeJag4mEB3PUOweCaG4wwbWWAYcEMGKn9mR%2FsegY3R6zdYg2jipGKfZctzINQ%2FvxkJa9BOjR44W0OpTKAskcnjLTcKyuU%2FSVIWSKzKSHQHebYW9mfGYjfSHYfbT3%2Bv877XhsIwGzEUaleEwITyE2u%2F0q0Yfqq0%2F0dMDWuicvDanKbjsB2RY%2BTQwOnfvbMUhiNPFyDCRwhZhdjE69Ty6FjoOoeX0spZz6qKxxu%2Bed523KNd2do1fm2%2FUa6nFGqnkH8%2BkHv94bkFt2oyJj%2BfVPYtbzbgRpXuRU5uCMc%2BgFqEIGkWQQpFmUckZe2fTY6xr2FEDGH2px5nBcgOMs6WelWF2lmiKEiFjITOaMd7AehSxXIZ1DWZeymhkXmHMy3l5r2SVLSflBN1D5D5nLM%2FZRomXuZOi16yBe7yb5j0ns%2BiihRdlFbd%2FS91eUBslhm7mPyZq0MNzmezgspUUgVimQ3kn6ug48mntu3E1%2BMuBy8u4JnkZCxkvQUGuNKAoG4RfIfxKho8TPoEnyndzdO%2Fi7m8Dpwt4XrnSBvH45462t2hTEX4Bafun%2Bq8jIzK%2FAAEAAgAIAAr%2F%2FwAPeAF8egd8lFXW9zn3PmX6PNMnPZNJMRRDMkzmDYgZMRRDCEmMMUPJIgZEepHlRYyIiNhRUdYuS4ksy9reLDYsdOmLLC%2FLy7L2CgKrrCJkLt%2B9T2YyYPl%2BD8804J5zT%2Fn%2FzznPBQKbACSTvAEoqJAdtUhUJpQYjBJVAUrKSkIOJ1ZUOEKOUGkfV8ARiPB7E72m87WJZF58ibzhXPVE6QsAAnMufI4H9XXsUBh1UpOJSJLmQNWqNsasLkKhsrKnA%2FT1HCF9PQzSAPYtD5V5PW4lmFeIK86EcCRbObLp2lGjGxpH4%2Bf0wLkjjU3NDSNGxYSMxbSdDkzomhE1SypQalCISvniob1lDuTL7injC1O%2BMr%2FxmeJtxeRt%2FiJviJ8mmrjFOr0BJCZ3QAbkQFu0ypCZ45HcRqNJQkiT%2FLKsOO02s2Ryudze7CxVUnw%2Bv9%2BtmKTcgEEymzPRlgN2e5rHaeOXyeeiisnJFagMOSsqSkr45kL8Tr450SfM5%2Fy1V66pGvBwTV1BcYcDEX67QjQkbo8cigTplyVI2OHh%2F6zdXHO4%2BiR6SjoxMPzo8O21h2tPx7O2lmylNV%2FtY5Nwubj3fXUA%2F8BuFveBr74CoNB84V6pSnFCLhRCL7g7OijfR7Oy3FalR49AcXYRFBnsQUcgkAYO6H15j6wiAGu%2BI%2BAo6pleFDAWKJZMX%2BaImNunWOpiskIVH796ewAqEzvV9gqX9nQ4Qd8S%2F1V%2FScSM%2FrmsTP9FfNUNIvzuVlRPMFxY5PB6fY6iwsJw3%2FJIOOTx%2BlT%2BWzaR%2BxYWecrR7fWFFanqi%2F33nnn9%2Bv%2BMvXr7mk933%2Fv5Gy3PrN6yZjg7WFV1D5s2oGoh7nx%2Bk2vvTrkeDT0HKlieXvvakkfecj%2F5uKnhm6iNHRk27a6bevTL%2BclH3ulVkX3cBTJUXjip%2FCDvBiO4wQ95PB6qo%2Flen0%2BWTRpofo8nLa04mB3UgpeX5PbMLEzzKz4%2FtapOlXt5a1llpXhN7FF7r8zJ37o%2FiN15Q2XhvsE8RdajOqwFyrwFGETXr%2F0F9u9dNnZsWW9869X1azow9qe%2Fkpc7D52mPRf%2F%2FHcJFrR1npvf9sWX336EO7%2F9x7lqeUMn6frt8y%2B%2F%2FZD%2FJjzecOGEAnxvWdzjpTAzWtHbGjRhlhdMXqvLVZSWnl5kpSoChLJVtcwXSPea8vNLSrT0dEnTegyPaZIUqIlJLnSKhAV%2FpfBuhb9EbE53bYVIM%2F3S45hfiZ%2B7th8IFPHN5QuXcscms1vF8kiAZ2qBsEEEFQX7FnJDeNy%2B8nIF2JLZ7%2F77DPtk3rJhVV9vefPD%2B57CzCF98cr82%2Bs631s4%2FvbxrKPf1XjT0Iqrh%2F%2BuafTMxR%2B9e%2B%2BmxqZnxzzx5l8embstxo7PeX0Ju3DjoqYJA7C611hyd3hAtH%2FzpD5jAAVm4DM6Zjj5C5WIAIu9DuxCIB0kuvEBAKGBbSTz%2BL%2B3Qm7UZjaZqCSBqtrN%2BVQgmAMTua3joeaMhBTicTt9wULS8PSj5x58eNk9Z5c9RUrRiPte3MTKzvyHRd5Yh9vFygP4yq3JlfmyfHG%2Bso1LyP%2F5yqgRNVjuDPclRSGvk7Q%2B%2FejZJY89%2FOA5sTT7ifVb%2Bzru%2FOEM7tv0EisFhErSJGUpbrBBOOo3ms0ypVZUVc0umUyqilarYrDxpN1aJrKQuykJwvwz%2FyPMUOCTXSqlRa6CiEzJy8U4J8DWf%2FjpM%2FeeOMZeLMKpxYqbPTyx088Oz8MKtnMuFqefm4gzAKEZPpUqpG1g5qivGRSjkSKAxWo2giJRKOFCysqS4vjNhQXCAa4Bxz1HEI%2ByNlx0FBextqOk9SjezW49yhaIHbGzuBtOggKe1wgFWVapDCXbdSNt5ghfoNCgMxLA3X1v%2B%2BdV%2Beg%2FvIsdR9MJYWVcS5rISqDg%2BCuVQQLkSiTc7QoHPANIGq49dw6wi7GwgmvujZoUrrSRNsaMLqjsmfjnkYu4aU6SlJZ28xECNyqt0mMrM2pBricBidueiNS5iDcRA0ir4h%2By4yQgGJP%2FDwLVF05IQ%2BW9XLoPLou6LYoTFPCnGT0jYkaV2kfEaBok8y%2B1kkYCeeDQnIEyQI2nUrlDE3kkDT3PzsfZhXMoxZHGw2OmTRl7w%2BSpLeQoW8gexttwNi7C6ewO9hD7%2FusTaELr8eOAMA%2BA1nJtTNAj6jJKAAZEs8WgqihJRgX9wJHOkYoXkf8iwR2RiKKqRRiitWw3lYdnr30cDzNae%2F8Tw%2F1L3sS5gFALINXpKDQgmp1pQxW86M3O8aoqMTlNtTGnSjATM2tjXEgCYfS3hKyuCkFHkzBeScI6WKhFVxLuD%2BEQLt4TkOo6CU5f1drrhvrrVly%2FdspDayfe%2B8EtQx7fuJG0HcbZLyyc1r%2B5qXbojtE1xa0dt4x%2F5c31r9hA6MYtP5DrVgijoiV5Po6KKs3MBOCVStFlgez8bG57v8%2Fvq4tZ%2FGilfr8pX7VqJm1EzJQGeg3j5%2FxX8ruWMbrG4oduFyXxMEFyQlkpkMeJTvhKbCMY1j%2Fo2ykPlEmSr335KxvYPvbZydev29P65KNrX58%2Bc92zfxv6%2BKil76PnU1Sl6fe%2Bl694%2F%2FzIweMjUO1ZPnH2TU3fxqa09%2Bl%2F6OHXAQgEAaSZuhddMDiaZ1epkRAzpTKAxyVzrnGh7JLreGi7qF1VqO5WvoGQ0DwF584uo3cpz4sCBzc9T9SAQPKgoqI082X2QfxhshCzXmZ5Jmoo6MvOYAk7gCWH6cudN5%2B98oSroZZNBoRWbuEw1ygDmqI9OZ36aJrbbTPYqIFmZrldRpdFA27ONADF4%2FHXxjyKYhkRU9LgYsIJ6e%2BpgHAkGUjkgUhLSBg2N9w3IMwpylMaKScT%2Fn6efcC%2BPLN8xActmMGOhu%2B4bH6EpsV%2FyAgOoO0n9%2F%2BHnR2B5h7hr455LAPJ1%2Bwc%2B1i1AYGhXOs6eQf4IR%2BuigYUp8WSlweZTnAWFNpz6mJ2u4d60kbEPGnUwENEvUTbVJbqTCjIAQJlPo8IXEUNdQEJcCAhMvd%2Fgvy8Q3E6TmsbErv%2B%2BZ2tRuuN%2F7f1X%2BzsNyv%2FvYhoN066sbVlcRuZiq%2FiWvuP7rEb%2F7LuhyPfsFPLMffdxfMnz7%2B1fu5qEc0RPdM6QIHLo14FgCDKRFYNMiWU1MaoAsLfupYpQwobhpDby4OfkoJ4iZQWPyy9jNLm8wLSdEtUyzvBB3lwOVwbLXYqnl6U%2Bo3%2BQo%2FHnp1ttBtL%2BihOZyBQXGwBS0Z9zJIGwfoYXGwTYYlLnVeWdKFwoCSqAj0%2FLqoW8qk7kShFiku3kK9cfCPVHyDedt%2FqpeyLL06zk4uXtU1DyfXfE2fPmrng0Ccjbhg%2Bflxtq7zz3ZUzXhrU%2FO6sjqN73mrbXD2iY%2FKzm89vbBp7Y%2F3VcwaOI3vqq674XdnlYysH1Ym8GajvcgekQQFURnOzZJfFEgyCCwqLtNy6mKZRrzd9RMyrUkMdR%2BNfdbfu7DIBzCIaw0J5kS16edcXuNOdBXwbyU1J1ewxtvTOqxtHP%2F3%2BJIOl3xOz3v0nmr9Y%2Bf2d8VNjp4xrbbm7jQ5mdazJdtYzasufW2r%2B83%2FH0fEE%2B3DTXbdNum1%2BHfd4stOSZuvMURh1OXnyAPjtnsaYXeumMPAnaOwXTOb4NVYT72PqU%2BxG7xcf6mPNQAQX6%2FIUcHKmcllV1UUlBRXFZdIaYyZNUjgzJ6Rpm8u6mKrApzM0vUgYbrTrbF2SFHbS18Xa5GhSmF5P7JYqZODSiqKajIK%2FVYNEqQIEZRigFxShVFwJURhGD6JU0ZlDP443kvW7ccNSPH2abWFfCns140peoYDeNeZHHSqlRgkMcp00ViJSV30QKhkjagSue7JMQH4304%2FFkrTgKC9Tjh69VLueUScBrhFPNVAUJJTKEur6Ce0u1dCFuorNZH28UayJb2IaDjjNtKWsWmioXPicrpB365FYFc3LTU9PA%2BB2dlqdhUV2QCMFCAazGmNBl900ImaXkg7mVCR4KJVkyfpRJFR5F86oRckaXOFoe0m%2F7W6YevPVY5uWvzf1w3P7vm99YGyIHU4139VjH6ob1tLvqqpxR9u2r5m2onVI9RVXsHUX9eMTLkxQdnCc6AuVEIv2VCsq3G5XOGzt77rMZaWBtEDvNOgN0au8hkhEMg3QTPzqkVUq5feAklS7rOucMleiPU7ivc6kQtuiYCqrfNTdlVF8fxLxCKgtj3iUQC44%2BjrzOa06UfyDSESH3x2j106vnpWmTXnhlT1o%2BUfT%2Fqt9NdGau79%2FZhf73%2BexCP2T2Pz%2FZefZXez6I%2FgIyv%2FEkRs7Yf3IFpM1FG27n5x%2B%2BNQ9Q%2FotPPTGQSQBH%2FPd%2F9Yf%2Fvjjne1sx152gh0p6f3eKHwYW3%2FEZZ93sA627uCCpcfMzwj7AIC8WN4IKljh6miAWKkBQZHNZgqip6CSZLOSmpjVSs0yBZocIpTouZRiZWGortKL8gsDiITjI5Uik%2BLHJ7FXiYTziRJnywoMgWdwNFstbzxXRcbikdvy72CqiPvXAaQznI%2Ft4Idczsm9VLdbktKzzeY83vfZ7QGDlqalDY9ZNLRSTbODPb0mZneCvyYG9BLcSxY9KQVDSTe5ArmSp7voCQYwWfE4HPqnwOu4AyOYNn%2FC%2FfPZh2fjx7C84%2FaZ8xev2nXHraxT3vDKpkVrHaacdQ%2B%2B%2FxGdXTuy8Zr4NrZo3PgNgDCXI%2FUBnh9eKI36VZeLN%2BNWnxscUBNzSKpskmtiJleyNBOvSfVEKuQRD2%2B0Iw4l2BUdoTI%2BZiikBS%2B9h9OfOtrxL7aJvdiOkQOHDrc2tEs72U%2FHmW846xyGi3DSZ3j9azd1FvUDImwoz%2BE2NIBd1OtGAIdVkjTZUhOTqWTlLbMzaamUcEELnGVzAbVA0BHKleew8ew2Ng534wR8gL3Dxq5ZjO%2FxGuQP7A55A7ubrcHDnUMBdY8RLs0Mg6L5BgnAqphMiBbFWBOzKNxLAnII3zehaKqJofOXXkp5iCsitPAkbol0bqDV8RN4ijmIm4tl7zK2BLqkUsalGqFvNN1AqVkBQDQJoSl5QlZS0MVSLhaCX7P9dHD8OHKMEwKWxLu8KBdxL6ZDTbQo3e8nNquVEFemy2DIsGlmjQdbOr9BNkt%2Br%2BzlsmTu1FB3wd0z5VlnstgW8BBwKLpv9YJL5RlPdMKNOALkU1L14E93sr%2ByVfg43vTxgZtW%2FGXnd1vevKGVHafhuOnyAlyMU3AcPjDybB377rOT591Y2mUHeYJu%2FUg004jIzW%2BQJFm2GGhNrMaABoNsUijK3QmbMnfKFN2XPIHtjr%2FNdmE5uRrDZG78Xj5t2EIGAOCFiawBT%2BozgRw%2BbSAGXiPLwM0MRsr79e4NCw4Rxa5IJL6kRnJurq0bOKEZy79hDV4k7gVL5JHn1l4AdgYS%2BtfxVS0wMJpjIcRkNiOAzUBl2cq%2FUrNZoXwP3VtwpgBXF1eWAOXEQAdVfSMRDKBcx1awhYvEZm7FB7CZETKxJf4D39CN6%2FHf8XkJ6VIlly6LPUkqBVCQArccJKJUl6GXoPq6r3PD1MsbzldfSPxvRcyR3dAvmukGo9nI1bbxUPHKisdJjEQxq9QGilBcN36X0mUp6hA6Y9DpEYujXuXykscVRBpkK4wudhzbcaSC07GdfUgtRrZEms9Wzok3cw1WSi3nqklH6R3oPr8kYcedOm6WR9NMYETFagVwUFlRVM1MVW5RVLtHv11adI%2FEnAKwL1KEcM%2FJO9nv43fpSiwh81U7%2BqQGdrQtXseFv4FZvycdQPQ8%2BVKfDHgE0jgAfBZF8RpdNTGjRO01Mer6daQROSBexQQy16Hxpkj%2Bkj3BXubXE3gz1vNr%2FPlDb76Bs9nSNzaSY%2BxxdivejVP5tZCj0mP%2FOYvf4smfoAvtpHU62rkEFkhGowdsNrvdbQXBV3ZNM9TENGr%2FTSzoRn%2FZLXHoEyAo4ckJSx%2Bau%2BBBspEdYacX8yA6iCb0UGXmlKkTd504Fz8rb%2FgchAXYat0CdkjjEZynUFmSCDVIJg9AhmYypVOVEwBXRFK5UWSV22N7Ev4uHU92T9OQe%2BLX7PPaKziWzWZnfL9pJMZW1bO5OPS3LSUP1S3lg9poocvnk0ySppm8njQw8cTzu4wWMA6PAZgtFm40C%2FWaRcikzJbSWfPzuXKqQ0sxKLdfgl3BF0A82brsgaXLW7gB12EPzH7oTqxuZWvZKtp73M0Tm%2BPz4vvlDUeOLdxZwVwPk1KRVS2cQX0ce4s4n%2BRlpKcHICC7LeCGy4rdAbAELNlGX3ZNzCdRYyq%2BuhvwVHHWrRpn%2BIvGGoVFl%2FMhDadWMcJP9LZen9cr%2Bdin7JuOx%2FZeN2FqnzFL7767DtWvZu2f2TrnyermlsJrn977BC7f%2Flkz5g4srx3e8%2Borqypveeqmzf8qL%2F13n8KGgcUDKqrHbRP6FwNIYiqrimdLCgBFNBhVKlHOuxSdv3y2lARgcoLtYrOlOn53IGEMEF7k%2BdXC13JCQdThQHSbDQaX08hRhsdSYuuXVBAOtyLx4BHI6%2B6CYLnlEXbyLfYFex%2FD9zz7BAf0ztqVZ%2B7EwHn6YufCPz33%2FDraBqjXfyHBI2K%2BRonRKAOiVZYkC3BDJ%2Bq9VNpUJOaj%2BsXtVx6h57CC2dmLTMMKdPlKFXO0a4DY%2BdTwvZeN%2FqJLhrqRy8gSsx%2BT0e52yQh%2Bv2ynlszMrKwci9mcnemSzdRvt6NJiOSi%2BEtCbgo1UyM3WkiKOMKJUtMlGvCIi78nPihD2fPbzWFJ6WPdxqngfix9q9Sr9HQdwoJDth5mUy%2Fnm1hKoRixV%2FmpUJxwVT85trLi1EAa6twb%2BaS%2B9uuhNBsStmnSbVMVzTXLnPpUo6oYTYpJ0C2VLGYDkWXJqFCUkhDL9evG%2BooUZ3VpjZj8Izex59h6fnXg56wfNmF%2FDGMtC5Pi%2BGHyHdka%2F47Y4j27dJCYyF2B7wZVlZEQEERvNFFF4QqiSgVDdslOjEH5Z65AarLLowIDZAGWchEZbA%2FLwDo6mozsXBTfQUqoXleVJiZ0RugfzTJISFUVEExmlYuSRP1I0IAGUcZdOgxNpl1qFqqPbALSzPPvkbfjTVJ6vIrs30m%2FRXi%2F0ykkLWUbyWw9T7KjVgXRIIFRJlTBfN2EuvH0BNZX4iUpmc0y8bOPPmIblXMHz60Xa1gA6MDkVFt%2FZIKYnGpfnBa6sUmAHY9%2FmJhqI4S4fJ%2BQL55xoKIY%2BVYNoOZTiaaCvQtCfCFHMMy1CH34IX7GMmfKjQd%2FUoR8AzFIA%2BR3QIHeUTdBWVYkSTznFd6SVJko0DW%2BxLKLeyTRZYcwiGjADQ%2FjqVO8uP6KGOiGzmqyKN4maq1OtpHWXhja9SRIRonoRhEaJZ5K0NrOFyl%2F%2FvMAAGKNdIQ%2BqATAwK1gBjVKRVTIdwCUpB%2FrioP0XWLww7EvHPD6PGRL5ZkqbKpcLx3ptW2gZ%2Fz7GYIdmjju9pfm6E8Zq6OFTovBQvLy%2FP78LIMhaEkbFrNYZLfbPjjm5jWdnDM4JnvBk0Az%2Fy%2BZVYSeXlcUJWdMvMcN9%2B1u8h0omny9N6YT%2BhuGr1r0xzd%2BOr%2F5xbv%2FOn7T8Y9PswO%2FX3znY5MWPHHDsNfXvfono1K6rn7f%2BK3vx32E27h55MJbxwOBFVznDsUNTsjh7BvIojRg1Mw2n89szrWA2WPUFFDSh8QUL7iGxEC7mCz83SHi7H5mUeZ0aISzRVANCgTlw1AfH9d2D8WobftHX%2B7YNsMT%2BhpLLZbJM2ZOJJNvaZk%2BQ5rNdrPv2XH2t6XzFTdbPuiJ9jP3rwh0PPOXNWvWAMLoCyfoMWk2eDi6esRYymclxCubh8RkDexcM%2B%2BlZZJuOTk32SdwmnJoYkjgUBQyIf4DZqJx81Mjh9525cmTzcuHVf%2FBTQZgFvauOZFVwBH49ZIydr4kH4iQK81M2CcaDRi9Gi%2BobTZhqFy7xwIOIyi6fTTdPt5ft4%2BoT4Q%2BecShOXlPGioU%2FBLkji3iOnVPiAnZ9vHnOw9ON%2Fmw7Jv%2B1omT5kyVp7dNmDnLjWVoRx7zq9vG4YSfTjyy5vt7ViWNk9BynD61y%2BDMEKROSUpzOLKcJlOm3%2BOkzuoYFVUUVMesmuoZHFNTel5aloiry3bI3RbgrbNeR4XKwOMJ6AVAxMMtOP2GaQZcT2aVs%2B%2FY3zDt7LdoiJfID985vmNc3Qb61PyZM%2Bd3NmAPdGAahth3Jx%2B789Eel5%2B4rCjB7nSOkgMeuCKa7SZElSn1%2BqwAPhndyHVz283akJgZqJ4bgp8v7QVDiRwWFgxH9KfOeieocBWpiZ1l%2B9eu3bj%2Fufm1o2uv6ocGOq9zCZ23rKHh3ZdLPsoafsVgoKAwtzSV26sYyiEKd0SrzFlZAwZIfRwOUqzmSkGUpIHpPXr4fJFg8Kp0K1jRqlj7qv2GxYy5Eke5wr7FpDpWXFxYWDksVqi5e1fH3BkXz%2Bn4pxIOWz79gRHv0LneqJs2FQ76ewKfPao%2BpSsqEvmsj%2BykQFfCF6ZeRcGFyUQK8v26El%2F4WGzqS33OfxjpXbL2ndc3sTfYvm9%2BvP3WksHVg5tvOnmsZKGTFc2buvrNabOfa5w5%2Fdrrmura10otT%2FceNqZjJ5Xzew187smt%2F1i1bPw9We5Roeh1xYVrZ732vkM6L1UOHVlb2WcEHT5q0qRRuwBhBYC0lmeDB8LRdATw2Y0Wg8Fo9Nolp1MaEnNqJkCjR6D%2FJfU5336yUOPaKqJJEuCQeFQirWX7O%2B6YxfZjqapqE%2F61bQ958LsXt8S%2F40CwpeDekav%2Fvh0ILAPAD7lsA1jEZFcyGsFksprtJg9Rr4kR6DJ%2FZWoO7uobKtNnnyJUlrW3X3ttO14phMgLHn98yIjzPqkFgFxoY259XSt4oSTqd%2FL0JgaDT%2FNcE9PAaBctOk%2FsjOTEKYEwCRGJxwB6tajQpMDBcxoHXzN8CJbum6GLZe60066mRmnd%2BeJXN6mThXRIWPMH%2FUn%2BNdGgxLmTUKrIsmYzWa0Gg8lkN4P41WCzUcXkofbu2oTf3cjSZdpuokXRuGOyi1dx22KswGZWhYd5AffOIrF9jYxdh40sI74Et93MVivueDXr0gYPcG0ouF4DRIkAevQioLvExgPivyvuhO7qQJ5BQRgeLXS7XPrsKDMzI6PAajSaTPkuq9WRKzu46XwOzWzPRJNH7%2BG7krl7%2BOC8ePqbjJDCRIiEfKFykdziVfBd8q%2Bke9n%2B%2BuvnTGL7vy529F437Xwso%2FdL097ZwvbVXz9jOnlw3rz12%2BLfSS1Lh1%2B%2FurZpy%2BF4kfhtxYuQjGCut1tMFxHAq6vrscoOoatQFU0Xx29SyV%2FXLRG8TS0ierkyof%2BZtWWXEPbn7boC9dce3JHE5yf0pzhpostXLJYMcLnSvcYhMa9mp0Nidu8vu%2FxUrvPeVQMOCCQs6MzrxGVT5986ecr8W6dQmX3ELvzxh7swGyl%2FI6Xt6%2F70Qnv7mhfYKbbnQTS8jE7s8wA7B4LrOep1cC1ckMMn1Hl%2BRVFNlKpZmqrlcuQEq9U9hBOEwa5mQEaKzBKmSBWoSQVlTvPepDFCnPndRKFJtuemosq2GZrG9p%2FtaZv8wfaPbt58TGf7vePdSx%2Fwsv5K9SPtbB87%2FT%2Fs7H10mU722JDgM67pTN1euaIq8dIsyh%2BTpOUZ%2Bfg6PcNnz%2FZanE5V4I0FhsQsv8m6iSfIBUmS5S2dL8HBXl8ook%2BLIkFBaLdMkafPPzxZ2v7R5zsmPXeFIQMJ22e1lq48uri9oOMZ9uLa9lNYiho3Z9%2B6xqU%2FbcBDAybXN3ZFFJ3LddVEh0mcejw5BCxZZVnUS7wGFxqlMrTMRy%2BJIqpdWewrCD%2B6iu3%2Fsre97yvSbCP7xLR8SXyH1LKxZTYkqp%2F1XIZ4dpmjpLktAEU5bnchWNw5lhxTli9rcMynUdPgGPX%2BvJ2%2F2BgiqPTHK2HB5clePsGgXCkPt082oetPnbx1%2FbDrDtW395oycuG8yJd%2F3%2FXu6MZHa5Zcv2zRrf2wZn1HILfzsvKx%2Bb0rCstHz73%2B8VXN%2F8y%2F%2FJriK%2FqHR%2F%2B30LeE6xuRa8AjToRYDHa7y2UyEIfB4fWZnHbn4JjVYrfL3HVyQt3QpktOVnRhgnBcxKOXvoLpIyFPwCO6cjK3bsas9tdeeHRt8xasYDuu%2BTD4aeiNN0jGwgknTn4e%2F%2FyqK4UOT%2FGc4zM%2BcENZ1E8cDrfby3t%2Fj9NoJ7JNtumyPcmJ1sVDgItr7tQYgH%2BgrxdrpR2zt72PpSLjsXRp7XUHt5Mj8dki4Ynt%2FEpI9JkPcrlm6BV1m0GWiYgIK0G0GNEuC5llKWndDU1X%2Fx0SbTfiOtaElf%2FINyryZYexkjVJLfFF86aMXUzaumS4AZRtXEaWOMsoSyaOIVng81ETVTMyMjNzVEXJ9plMVLbbMxQ7yDqidR3RdPz2LIDSIO1WQ8wBsin%2FpGskRZpuUfew19lm7LMwJ1eRcrT7sG6R5NCsqBgvN92NPdk7uARPdt4vtTDH4m9q1lxH%2FPGvvE03jMkcer4XnuKKI5gApOW6bWqi%2BYoMaKSUSAQlGWWzQVWtfIZmMSoUAA1mj4T2S2cBqaROkYZeq3KlhdkClOu%2FmD2BI48cxZHsMWxja46fYO2kPwmyZ7A1fiy%2BDRewhcJLzK17ycs1KTC73ZrXK0koahm%2FJgob%2FpNT8no0p9XJMTHDAFyVskQJkKKvhBlTUzxHyokifvTqgNsSaw9mmBRz7n4cwoqu%2BvcfR9RErqqfl%2Bfkfr2%2FYcZNo8ic866XXnR8Z72xNZI450HXce2MIn%2BoKqkIYDYgmvQhAm8c7YR%2FMwyOoefSIULSSMJGySlCWEwR6LrOB4nC0uhAZiCmDrLp6%2B3xekDI4T38Id7D54ipCHUbcnIcfn%2BuNTMzIFGXy8qjKd9qSbTzYosp2hbbF7bnuBrm%2BREWRw08Coc18VTQ4xFQ6%2BEJhDmL2m6%2Fc%2FOZG4cpn31T3XpmM9quH32qucGAVz7Z9jEdXMUObcyzBF8xskNVg%2BknbU8BIO5gJWSlYgMK7tcIpZJMAaCyhONDYlbqCOKOo0cV29lA1ylOauB7yBN7yOHlOmgGQ75bkoI52TabW3Z7qCzl%2F3%2F2IIuHzuFynuSi2BZnlftyiBSnzxyCyzwcrImh4e0Xbhz2%2B9mfKtWtL7xTP39x26LeM2aFPyFVQ7CnuWmyw5K3EXsOrqIfh2dPY5tNjY2nGm7QTxGQIqmCtoEHIlG%2FAg4zmKnd7qNeu82mSJSaHQ5QoCRU1lYi9ElBdqqp5pwa1sv%2FRAMmELwQB0baym968pqFwxaOC99ePv7pgf89chFZcXX5l1NzcyPRii%2Bnphf8lzhBwpbiQanl0rP6Dg26zurbad4v56mukCugE0Wi7Vh7JsTasSV5lIO0dJbKBcljHAhLOdJqfN6cwad7QYchPV3OyCA%2Bn4mYMrPSXCNiBtuIGMiGNH4pGWmKygXqpwH4S8%2BePzvOII575nOCTh4R15lS69q26gmSEBt94OCr7YtF6z7vlm8b7mpdcN%2BrL%2FfHcyhjZk77c8arjmflv%2FBn9kZObzbAuFFEB4A0ST%2Bd2BztZXeaidFqTfd6iV%2FzO51ado7Fn%2BavjxnT0sDFqcleG3P6QR7xs%2BNNXUfUIJTSVqjbjT%2BpBpRfbpXXFSKawsFwiBuQbNyyZcyzs2sbcS679w9k3%2Fmvbhr%2B6qufy7sbvojGrt10dOm6WtZ5ttes1keObtl5BAjMBCYFpHXcnkW8R87TLC6j7EsnBrDZ8jIhM%2FOyYp9LSycWo2xQPZ4ctYBHz%2FYyHc11H2qb9S%2BiA4oURXyC3SM%2B0WGqPrVIoJJaFCmMXFRdbixfuGzBqEk3j1qwfGE43Pbogt%2BNn93Y9siC8v1T6%2BqnzxxRO50cnPC7BcsWhCMLly6MTZs8uu2RtlBo%2FiNtYyYOnz6ttm7aDBHpCoDEp%2BPghZnR%2F7I53U6Plce2UaYyMYkJqxeRED%2FHBp%2FidDkbYkCRuuwmm93WEFPtdgt6FMsl5xX9mtiW3kNfypcpEhAfkgPKkCfoEXdAGF7cGCBD0YAVbOGWH374gX38448%2FvsOW4BViZBv3vHrfq8eO8RdyHMhFiKNCMGoniiKGmUaJSlTVsUcEbCpFdAhyJGBIAFHnAbag8wAAgUm89lnw%2F0o5D7g2jvTvPzOzu9KCJNSFaAKEBMYHAokSuQpiY04OODjYsWxCcjbkNaluuPdyiXuaS0jHpPfeE0N68fVO%2FObSe%2B8uy39mVlqEzr76oeyi%2BbG7U3bK83yfkUZBGZwCMyKlaRaXRRTLC6E4JyfkAld4DKmpsbkrK0ttpSafxzc15nHqTVNjepQycUvmivi5NiuyMYtA0qyNo3NOVr9OFfZJmt75WUW7VMhOWtE4fsubj9zRP33SzuaW6LxFB3rWTJj4xSuvXdHyYsOAb%2Fbpj257c%2BOS5s4tvmrim7appHXPputbn8kPlVdURssit194%2FxklXdGr7p3261Hh7uKKUGH0uu2nzi8Pxya1V5qmAUYu4UfygiRwVi0%2FYrQaWIvIdGcQ4pBB7dzU9snCdpLZJF%2FSOXJNjdRPPa0uMhVd2TKurqk5Mq5FXFPXEB0%2F7ucNExvqGieOb6wDIIw7lSbR99oBPqhmvm9ikm0mm7%2Fc7yzPc%2BbV1IrpYEmnX1mlhbZglpActKMVbEo36zBrHWyifBGnSASrw44ZvIhr6bwgFCxiuH4R45HIul%2Bc91p4c3j55tf%2FfvilPddGFx5b8zJqf5X9DCi9v%2Fm10vvcrj6U09uHsg%2F0Ke%2F29invHSBfX7VJ%2BTAv99nwkcNvfNd82xjlI%2F4%2FSu%2BrLyi3%2FObXaPaLTJb0b6xlBfCX%2BDHKMLqgAOoieZk65HLlmXXU56PLK%2FRmGI2e9HQbys4GEGweShSEA0F1mAtak3BQbR1SPGxVVo3K6irbp3YM1ToJV3pGr452r7n58XnrWi6tr79h3tY9yqTy%2FKbYvMvxsYvGRLrPu%2FBCWegef0l%2BcNcmpeGP%2FqIz6oqkNPas06Fd6BEEkMAIbZHRaUaDTKd2RMKCgERqGDdkGNkrBpBGCE4XBIMoIpOMsR4lWko4kLBqJI%2BK5j8Faab66Q897w8yR4ALIR3yqYfpaPGg8hFyDSo70RG06A12%2FoayC49HL1E%2Fs9K3DL2QNXzKGb8fhTCZCCJkRZgzSkcQkogAAdYJoQTf6LXQWZQQHjx2hLz1I7pgEIaGErEHWAIzAAhaezTEW%2BS5kUqBYFHUgcViJEbamxB9uT%2FROLFE8QLBIegdsp5%2BnaSN8spKbara53ErgY4FlFnoIwadmhP5X7VaYcvuz5QHAu8h%2FcO3K%2Bs89eFTJuceP%2Bdft9utd0xUFqDpyj3kqh3K1%2BH6uhrlzX%2FZctHQEckuSNLhJG8MjPTGCNLRbwWDZH%2BFr%2F6Jm7D5hAmyIDMiQ0ZGTrbVkMkqRQ3FUq17vL06HSowmDyctbXd2N5201ln3XjW5a88G6uvnz2nLjJHWMg%2B7W0766bZL10emd02YWJ7G%2BNFAYSwiCGdcx%2BZGTqdRB35BoSomd9sMRrSZYQkAYOKeoYC8S5MM5WnxriwyfZwnAs9I2%2Fh3kG0RVlFY12UNylYiiCAo%2FgZTriVRKwOA5LAgiyuTNnkwQ4Hyucer4lJXb96j39EPHUF%2BJnjK%2F5%2BbriipGXeqiuf3np9%2B4YudA6O3jbYEQv6S2bt37Cle8be7rMBwVgcxo%2BIr4APJkRy7enY7QbIl%2FLTzVK65C8mdrvDIed4PSa5IIE5pbQ8dlABTRX6S6xu1DgHrezj3QjuuaN9%2Fn1P7N541ards5oXtJ3REgwFWsOdE%2Fb9v3W9wlu7a432i6at2N7wzOzzq6tvrAr76ePuDExYn%2BqLI0JEDyCnCdwXdyjui3uFjR%2FVNMjMIUk6ao6YiGZWHZ0i%2FDX75U5H1aEgAOK2LmrkhkxmMUmXJFnOsjrBQR%2FdrXNlOGl7yiCq4Y2Z%2BzTTkbYwT8qwtv73xo0CxS6XhZtDZ7WvpVaAD0ZnlC6fNWF%2Bvigy%2Byj67YoVdz%2FPrAF7Z8wo%2F9mM65SDUhQQLFSOCbslO2RAIOJINwsiAoTMFr0emUykKWYSWc8XiHtk4gMlbe5qgAb7UsMIa0IFwu6bbumd0PqX1%2F72IW5Tjkmn%2F3QfCVmPHEWCwiKd8Cj0e7KGEUURmUU6Ebk1RiCQCHSypSLhfEr%2F%2B2Eqe2hQsaNeALBCVcRlNjI7Fh1Y7Gaz0W60ySYW9pXNXt9QQI0EXB1%2F3PjAIiZPQYprQ3RWgnr3Xd88KXuOu%2FGW5v7s6Kwj6xc5btOZJpzh7hmf2cktXDiKGxPRSYI8MjopD%2BWfMDoJeePRSb4QbvyciNkVzReismdxFD2z4Oyi0vHr6MwOwnTUfEt8ic9KPBFjIvYqgzhkDw%2FxTGK3kxc9YlKPgt969IarH3%2FwwP4nFG9dY%2BPEiY2NdULbnf0v3Hr7wAu3dHR2dnTMm5cy6s2OlKZTy49OL2AW1Ib01FNiGh70BD7YIdHEB79%2FOej1B9UBL%2B6NL0aoFonqQehRdg4ip%2FLxIFqsSMPn2KuMXYbaUNsyJZw1fMrGrnIA6Qpa2n5Y%2BTuAYvg1fgUA6eAP5Nrjj4L8IMFW%2BuJUVye0D51Au5h8T7W6B7CZSZlyNlXeJ75ClUs8XEnM8as%2BEb9qmXpVwDBeWUH%2BLLTzNU5DpKiQug4YJk0jh0pMoyDbnI1lQp0JPk9rzJdhoRy8xZvKwaN4g9Cm5HHsnddbrUub3bCVWHLF4ldiF1wYPjM27aFzzp37w3lvHP3F7rOrUcnw6jY6d1dT86yJ4eiY0sOnTO6%2F%2FYLru%2Bj0cyyamXhHhoZU2lu3GPuhiOexHiQ0HfQPYqfoh9HVJ1B0w2%2F%2FheIgzFQV2SMV52iKgYTCOlIxU1N0cUXaQwR7uWRYkxbXSNDfPYvXhpfEa4MpdD7OPtrg4sg4yUbMNmIRLCjNZEJsvgbgEETRbiYUvqb4syENGQkj%2FJFkkzkxTAQrMmlscsKiQLvUAAeUNb8G7yQ062PCs0QKkEYsI9rR6nzH9imOvcoLeLew9%2FghbKIUT%2BhoLlq5jiPvcYqZDnXNrC6WKXZGjNP8%2BVlGYAXOBfY556p5%2BZaodTT0KC89ZE%2BUXqqiG9pSFPdShT1JcXDoO1XhHnmNmZqia%2BgnXgMYFag1wGbucZ7cAJnQGCmivUCW3ep0GlBamtthAIqVWwGovcRJi9eKLYy8TgmP0%2BBgddahWmkscQqUlpiPo4MhBwPPA1tV5FzFz7cKwm9%2Bd%2BCzzzahATIdd1Du%2FG5GoOPWnR9%2BofQoyl1qHsRXeDuriLez36eUA%2BdUeTlUxtt7N1fgvJMpulHDv1AchOdUhXek4hxNMZBQZI1UzNQUXVzB2vvoeGkj2IAMglnogXTIjaRLBGTZYORGZXcgqMUn8260FqnLBlSM7lL%2BuB%2BVocqr6Rhetkf5tfL7vfj3qKxH%2BSMavZf%2B%2BVuaSiUAhD7DLeIHkgA2yIZCCEdyXJ4cuz0tB9LAW%2BTMK3Ab3QxXJQWpdOWImbyK8arGGFaJqpEG2V2IO%2FyqihEFV1Wm94Xts3tnv8iA1RevaL1x1sDRP56CjrR2UWL1%2FZBiOG0%2BWqzyvXWXXHDpANrEwNWGNfM3DSi%2FfHYJ%2Frbsp%2B8e6j5uKR4aUmlIXgO18Vocrdaz1uOkKrqR6V8oDkKPqsgfqZipKbq4gr0RJcl9kqDwq4yNv3kb1KtYuCSJSmbrqZpIDiOjjbIoSpJTMDbFZEdTTJAFWdIRyZowKGrdjOZBjePIDroW0tZGwh2UUz1yNcPaH1CQ4fikjst3rbt0NcHv%2FagMUij5c2Vc18rz5%2FNZJM3JfMkD1dAaGU3tegXFxQDlWSZTbXkgUGPKKtBBcbEui2SWhkqnxEIQcFgyozFLwnGq7ZUx0g03TH%2FaTYLqcnOkuuX8iaFL8zhXsVAn4a3SSDRSWl1%2FRVfoo3fmXTau%2BubIbfnTo2vnNjQ0TVjXsWQjbb4%2BhL9FfuGvkV%2BcNqai1JldVTJn7srmu%2B7JLfy6KLhqVGhcaeOylsh5lbWnl49r6TrnKPVMv%2FLO%2FazH5ASbVEBr5VQ%2BUtQfAPb2jbbEazY1vfvCE6Xna%2BkHfxhi6RUj001a%2BkAasPTikemClt4lAX%2B3T%2BGCYcUDmqJ%2FlKrwqwogTCEpQjeUQBBOgS2RydU1JDM%2FP2g3GoNBuabG7%2FGMKZPlsC%2FfW50fjVVXsyDp7OxQNJZtNo6aSoF3p%2BS0NFDHPHgbYiBJgQZGv%2FERLZmZ0t5q6wkJKnqMhzBz8MufZG0ZXsZRzHYYrWJk1TDShwoZfiVWbn2rce4L19%2F03NdfPRtr2nHzvKc%2Femdx%2Fd3LDyM4XkaJq%2Bcfm%2FbY8bqFq1fv6FyOvX%2B1oHvwefbOru7Y0zcz5q91cn3Tq52bInXKZx9RCGvWp8UlOEsQzpxD6T%2F05acLVrNap952xtZhP0xWx0%2B0iY%2BfnCrjtT1FbQ2389oqStRWanr34n%2BeflDP00eNTBe09C6rWpeVidoeugYAvcGv8LTaXynTgF0DGRLXuBwA%2Fy5J0T00eaRi6JdU8UmS4qDyuqqwJBTvUMXlkqApuriC9Vdu9UkSBIfk5fPVpZGx4MYuV46oJ%2BkEY0tOTnr6qEKLpcQNmZh%2BSJ2ImdjppB56CnnSKS02%2BRpiJifBU2MEnYC8izsQ2clwI9I%2B1YYLf3Gtkw8SVgdtm4XAwyNdtX46hDAvXCL2GCmnN3ZetuitjjuuvUr5%2F0PfKX9DwuFDDfpT17zfga0rz19x8fIFq84TXdXF99Wdtr1n%2Fm5lz4fKh8pLyPrJR8gyV%2Bhdtuva4%2FMv2Lj1ih27%2Blg74MwMf2tPV9%2FaEPAZUHI97ucl3KK2k5t4PReeOJ319ZfAyRW8pRiS%2BgUt3aSlD6jpeSPTBS29y6C2pIDWK8yCw0JYeIl7wbKhNGJ1pqWZBQEIyYUcNwVKAXHz0vPBYdBQiw8WTxJRTWOGj2%2BK1tf%2FPFpXNzVaf2ojO%2BKOwcEvTpva%2FPOG6c1EmNrUMqWhpRkIfcaHKAN0OZ81eEfOGnzxWQOjb0jBFAZx%2FC%2BzhmCNsJ9hQWsvOLVn0n5GBm1eUrt%2FzK5jR21o%2FOiJKy9AhwzKa%2F6alefjSoYJlXV2dVyL7IwUqpp%2BQes1ytH2RjTouvnWlnFKMOP2oSGVpeD1c2ZST4ByefGmpvMavgVOruA1XMnTC0emC1p6V0B9A0u1np977PkV5qi9zXh%2BBQ8XJOgmziYWsLhqD%2B1vHQZzli2Dxi8VWsCcbXDIRM6dEpOdxEnL%2BCQocxLLTDtnDWdWTT4Wyh0nAU7ot8Herhf%2F%2FuZLf5xv0ulUfvGjOONEDrXMYEgzK%2BCtE9qVsXpQVixvbB7mnLQ8CVqeut5Qc%2F0zNdcJKk9oH6byMk5M5VGJGk2mO108BE7wQmekxuJwGFF%2Bvs6WAeDL0umKLHa6drMgI7HQX0YznaWSNBddcwhCLotpRQ5tBcd%2BThplmiAy%2BBMMx2M6XcOLuERnVGvx%2B3WnH9vn31Wm9Cv3oTPQhPGbvaRDW9Q9dstdd%2FXVrfR7t8jpaBvqQuejTSZZXeCR145%2B8%2B1PDivZbnPyN%2BhT3SphMXhgNARhQWRMoMKEHQ6%2FX19RkWu3V%2BXr9aEchzvgiMYCATCbfxaNmc3YJNDOmfLEZnDT4VwQvFNiQupwHj45Cp00iOdT56kG4bniI7dDo6KTeT2fSk%2BLtyhf7dl5pPfHLSgb4QUvT7nsi2%2BR%2BbhTt2fL%2BU90tDx99FwN5Pu4fbWMBnC3%2FZprdiD9%2FciByqY1XcvYaf26naXlbOCeHGf7BhavuJhFHD0h%2FFXwSAVgZP0Zi5ozAMh6jE0ZWF4vsh39sg5pyx2NKqQzEZ2XGU%2BdFNAgrdc1Ne977elTUafn6kbhr2ed0XJ29tMLqh5sYBENqFX4M4lKD8Q9ehmS1eqmkUWyR8ay7CDxvRTYHVKNZ7qk8YhEdy1YcOklCy%2B67Pqa0tKaiorSGvGlCzavv%2BiCDZu7ykKhsrKqKkDwa%2BHPgkEygQuqIm4KNEUEQjLdBhvobPTrYvM6MzavFyCQ9fpZmoNENQebXw6qkISXvbF5mNVHiE23yjF6xRM27knfvXTUtKZoET%2B%2FfAk7F%2Buray7vKyjOr%2BKHAr4bGHqI3IN7%2BG5S%2BAS7SU0nbeih999Xlbp%2FqtQllG7Sj%2Fp4jIw7kiaIOqTTySBou5KZB5gLq7jGWhvCumKTs7N6sN5L%2Bp1zkG2h8t3HkHQFCVwRmQhIknSCRC8wvD8WUrffQHtNwbWDkz3iI84XlPdRySFI3luLeVIwEfnuWhIEtNuffHstwOzeZBl%2F%2BgzwRczUIGsiggSSZNFlkHRtI0Z%2BoT8E%2BbOoWSnwxY%2FoUzVPdILhSZyRP8ezp2Vz%2BE4SGJn%2FndpNDXwrMFMaMYjsRi%2BqN9Luoz60qB5QH885cqO31JNM8Ua1DBJFgVlJkOt5SRihMGIaeQcIpN7Ap91gROGgt0eWkkvbi2wunXrfKIyCdLA9wszuRplAgHssUq3uc6%2FavnXvvku37cGf9hzou3r%2FLbcAELbTizQXhfm75mXsYF6m6kEvys4gbKuXAofMQuS5LUhtbJnmP9AJy8gdX3yp56m7v%2BAps89kZzPacGPqPmctKUf%2BVkA7vpHbtCsijrgDV9RLQAg9pa0JI9VZmsxW0W%2FVN5vqlE12xKZeO24nRzp2bfoHPRPEf7z2SBs4vvHEBm8ApCxj83oe25YVSSeAEcaCFtqW8B8j5EX48mN%2F%2FIKMjge2AeK7BW0S%2B6EYdkQaJaL3%2BXI8RW5ntmywWIrSafaLika5cnP12dklBpdLzpRy83Knx0heRt66PJxOMvMy82yFPiiEabFCndlkMzXHbNp2YiNNoxZenyxzKUghO%2FCtQOhvro%2FH5DgKdA420DrVfS4oWELdb%2F7qWvq7BuL7XXhXXu9CVyrtGKN5yj0hZNq9ecn93ynPj9q6VMBLtvjQpG%2Be6ps7ebnwys5f3ucNFDzwTXgIxqK0Tx5wFVff9zVyT%2F%2FQ4%2BXsWgfzjp%2B0n6MTYDbdHRriMbs%2FSh7wQyNfQ04lboD45x8nfd7MPgcMBhzF34tPQRpYGbthFXUmWnBEBixim90k62TJikTRaiW6PJLPDTwBLSYu4RpNwn%2B8DhpfWI1CfA%2BzWrZnHP5%2BzefKBrTh0zXKHkmuzliH39q3rwfXHT%2FUN3Nu1gWuZ9Wn05u0pyuGRuJWn14KAMTT4QTpzcPp0q6k3PF0dS8BvtMDAcsjIIiIQGKXQLYPAt8FgTU2uvZ8EQDruB3sL%2FEV7krVDmZIWNNupYoPkxTdQ3NGKoYYgS4mKQ4q76sKS0JxHADfqZupKbq4gq9wuaT6%2FwCVeR0IAAAAAQAAAAEZmiehT9dfDzz1AAkIAAAAAADJQhegAAAAAMnoSqH7DP2oCo0IjQABAAkAAgAAAAAAAHgBY2BkYODo%2FbuCgYGr9zfPv0quXqAIKrgJAJZXBsIAeAFtkQOsGEEQhv%2Fbnd272rZtG0Ft27ZtW1G9dYMiamrbZlgrqN17M89K8uVfTna%2FoRs4AwCUGVBCU0zQl7DAlEIZWoPOfhXUs0BbVQAL1CG0ZepQd9STPdUW9dQ61FGN%2BU5LpOW1pswUpmU0hZj%2BTGOmWnQ2lPNyV2rEoO%2FA%2BmUw0CwATG8cNjkwyXzEYZrG9Of5NUyy%2BXBY7Q4Hm9a8tgCH%2FWU4bOcwPfmsjc7GvDcYPWk7StjU2G8qAf5xwHQE6D%2BzHRXUbqzi96bmrEQNEeim4V965jWnB%2Bho0sNRHnTn7E5H0V3nQAlaAGsawqkxWKfGhDPoO2Ts%2FGdwsk5fIecd011vh9O%2FOaegHO9toBWAfYLM5JBSxvoNquliyEeDvUucbeXvMd55vIqRtTGMJTnzAkP5bdnsXvTX6VGOPkbfYe%2ByRgh%2F6xHoLms6QDmmlvyFPThTB2PEtbczfMbr3XUu1JD7fmqUjaYre68jzpPD3wJIH6QH0RyQ5L6Ui%2FGeGFqDOZLiPj7iXnpkDsKJ5%2BTwO3LmEe8JYecb2fcazoXMC%2FEd4z0J7EFS3MdH3EuPJJX07gom%2Bff4%2FDMcpS1ee85bBLQNGO84cgiqPerpVcghUBEeK%2FS1jzBBfUZbwUv5X%2F7bkOlslqCEwJ5TBw4lBFsBJdRuHA4vYk%2Fown8RLYvLrQAAeAEc0jWMJFcQxvFnto%2F5LjEvHrdbmh2Kji9aPL4839TcKPNAa6mlZUyOmZk6lzbPJ3bo56%2F%2FCz%2BVaqqrat5rY8x7xnzxl3nvo%2B27jFnz8c%2FmI9Nmh2XBdMsilrBitsnD9rI8aiN5DI%2FjSftC9mIf9pMfIB4kHiI%2BhWfQY5aPAYYYYYwpcyfpMMX0aZzBWZzDeVygchGXcBlX8ApexWt4HW%2FgLbzNbnfwLt7DJ%2Fp0TX4%2BUucji1hCnY%2FU%2BcijVB7D46jzkb3Yh%2F3kB4gHiYeIT%2BEZ9JjlY4AhRhhjytxJOkwxfRpncBbncB4XqFzEJVzGFbyCV%2FEaXscbeAtvs9sdvIv3cjmftWavuWs2mg6byt3ooIsFOyx77Kos2kiWsIK%2FUVPDOjawiQmO4CgdxnAcJzClz2PVbNKsy2ZzvoncjQ66qE2kNpHaRJawgr9RU8M6NrCJCY6gNpFjOI4TmNIn36TNfGSH5RrssKtyN%2B59b410iF0sUFO0l2UJtY%2F8jU9rWMcGNjHBEUypf0z8mm7vZLvZaC%2FLzdhmV2XBvpBF25IlLJOvEFfRI%2BNjgCFGGGNK5Rs6Z7Ij%2F45yNzro4m9Ywzo2sIkJjuBj2ZnvLDdjGxntLLWzLGGZfIW4ih4ZHwMMMcIYUyq1s8xkl97bH0y3JkZyM36j%2F%2B58rvTQxwBDjDDGNzyVyX35Ccjd6KCLv2EN69jAJiY4go%2Flfr05F%2BUa7CCzGx10sYA9tiWLxCWs2BfyN%2BIa1rGBTUxwBEfpMIbjOIEpfdjHvGaTd9LJb0duRp2S1O1I3Y4sYZl8hbiKHhkfAwwxwhhTKt%2FQOZPfmY3%2F%2FSs3Y5tNpTpL9ZQeGR8DDDHCGN%2FwbCbdfHO5GbW51OZSm8sSlslXiKvokfExwBAjjDGlUpvLTBY0K5KbiDcT672SbXZY6k7lbnTQxQI1h%2B1FeZTKY3gcT2KvTWUf9pMZIB4kHiI%2BxcQzxGfpfA7P4wW8yG4eT%2FkYYIgRxvgb9TWsYwObmOAITlI%2Fxf7TOIOzOIfzuEDlIi7hMq7gFbyK1%2FA63sBbeJtvdwfv4j28zyaP8QmVL%2FimL%2FENJ5PJHt3RqtyMbbYlPfQxwBAjjPEN9ZksqkMqN6PuV7bZy7LDtuRudNDFwzx1FI%2FhcTzJp73Yh%2F3kB4gHiYeIT%2BEZ9JjlY4AhRhjjb1TWsI4NbGKCIzjJlCmcxhmcxTmcxwVcxCVcxhW8glfxGl7HG3gLbzPxDt7Fe%2FgY%2F%2Begvq0YCAEoCNa1n%2BKVyTUl3Q0uIhoe%2B3DnRfV7nXGOc5zjHOc4xznOcY5znOMc5zjHOc5xjnOc4xznOMc5znGOc5zjHOc4xznOcY5znOMc5zjHOc5xjnOc4xznOMc5znGOc5zjHOc4xznOcY5znOM8XZouTZemS1OAKcAUYAowBZgCTAHm3x31O7p3vNf5c1iXeBkEAQDFcbsJX0IqFBwK7tyEgkPC3R0K7hrXzsIhePPK%2F7c77jPM1yxSPua0WmuDzNcuNmuLtmq7sbyfsUu7De%2Fxu9fvvvDNfN3ioN9j5pq0ximd1hmd1TmlX7iky7qiq7qmG3pgXYd6pMd6oqd6pud6oZd6pdd6p%2Ff6oI%2F6pC%2FKSxvf9F0%2F1LFl1naRcwwzrAu7AHNarbW6oEu6rCu6qmu6ob9Y7xu%2BkbfHH1ZopCk25RVrhXKn4LCO6KiOGfvpd%2BR3is15xXmVWKGRptgaysQKpUwc1hEdVcpEysTI7xTbKHMcKzTSFDtCmVihkab4z0FdI0QQBAEUbRz6XLh3Lc7VcI%2FWN54IuxXFS97oH58%2BMBoclE1usbHHW77wlW985wcHHHLEMSecsUuPXMNRqfzib3pcllj5xd%2B0lSVW5nNIL3nF6389h%2BY5NG3Thja0oQ1taEMb2tCGNrQn%2BQwjrcwxM93gJre4Y89mvsdb3vGeD3zkE5%2F5wle%2B8Z0fHHDIEceccMaOX67wNz3747gObCQAQhCKdjlRzBVD5be7rwAmfOMQsUvPLj279OzSYBks49Ibl97In%2FHCuNDGO%2BNOW6qlWqqlWqqlWqqlWqqYUkwpphTzifnEfII92IM92IM92IM92IM92IM92I%2FD4%2FA4PA6Pw%2BPwODwOj8M%2Ff7kaaDXQyt7K3mqglcCVwNVAq4FWA60GWglZCVkJWQlZCVkJWQlZDbQyqhpoNdAPh3NAwCAAwwDM%2B7b2sg8kCjIO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO47AO67AO67AO67AO67AO67AO67AO67AO67AO67AO67AO63AO53AO53AO53AO53AO53AO53AO53AO53AO53AO53AO5xCHOMQhDnGIQxziEIc4xCEOcYhDHOIQhzjEIQ5xiEMd6lCHOtShDnWoQx3qUIc61KEOdahDHepQhzrUoQ6%2Fh%2BP6RpIjiKEoyOPvCARUoK9LctP5ZqXTop7q%2F6H%2F0H%2B4P9yfPz82bdm2Y9ee%2FT355bS3%2FdivDW9reFtDb4beDL0ZejP0ZujN0JuhN0Nvht4MvRl6M%2FRm6M3w1of3PVnJSlaykpWsZCUrWclKVrKSlaxkJStZySpWsYpVrGIVq1jFKlaxilWsYhWrWMUqVrGa1axmNatZzWpWs5rVrGY1q1nNalazmtWsYQ1rWMMa1rCGNaxhDWtYwxrWsIY1rGENa1nLWtaylrWsZS1rWcta1rKWtaxlLWtZyzrWsY51rGMd61jHOtaxjnWsYx3rWMc61rEeTf1o6kdTP%2F84rpMqCKAYhmH8Cfy2JjuLCPiYPDH1Y%2BrH1I%2BpH1M%2Fpn5M%2FZh6FEZhFEZhFEZhFEZhFEZhFFZhFVZhFVZhFVZhFVZhFVbhFE7hFE7hFE7hFE7hFE7hFCKgCChPHQFlc7I52ZxsTgQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQti5bl63L1mXrsnXZuggoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCyt5GQBFQBPTlwD7OEIaBKAxSOrmJVZa2TsJcwJ6r0%2F%2B9sBOGnTDshOF%2BDndyXG7k7vfh9%2Bn35fft978Thp2wKuqqqKtarmq58cYbb7zzzjvvfPDBBx988sknn3zxxRdfPHnyVPip8FPhp8JPhZ8KP78czLdxBDAMAMFc%2FbdAk4AERoMS5CpQOW82uWyPHexkJzvZyU52spOd7GQnu9jFLnaxi13sYhe72MVudrOb3exmN7vZzW52s8EGG2ywwQYbbLDBBnvZy172spe97GUve9nLJptssskmm2yyySabbLHFFltsscUWW2yxxX6%2B7P%2BrH%2Fqtf6%2B2Z3u2Z3u2Z3u2Z3u2Z3s%2BO66jKoYBGASA%2FiUFeLO2tqfgvhIgVkOshvj%2F8f%2FjF8VqiL8dqyG%2Bd4klllhiiSWWWGKJJY444ogjjjjiiCOO%2BPua0gPv7paRAHgBLcEDlNxQAADArI3Ydv7Vtm3btm3btm3btm3bD7VvBoIgLXVVqCf0ztXT9dzd3j3cvcX90CN5Snmae%2Fp45np2e356gbeH94HP8Q3x3feH%2FX38NwJwoHigQ2Ba4GBQCK4NfgxVDE0OnQr7w1nCI8P7wi8jdqR4ZGzkRDQSLRmdH%2F0UqxTrEVsbux%2FPHe8b3xh%2FlgglzESJRJfE6MS6ZChZJzkj%2BRouCA9GJKQuMhI5hsZRHR2A7kZ%2FYZWxldhtPDPeFd%2BIPybyE0OIy2SIrEy2IneSX8mvFKB6UpfodPQYeiOTjmnK3GOzsCPYpexaLjdXiRvBHeJ%2B8BX5Lvxe%2FqOACmWEnsJ60SsyYjqxiLhE3CoeE6%2BLL8RvUlRqJXWThkszpJXSbjkq83JaOZ9cXm4gd5IXKZACK4qSSSmiVFWmq0lVUtOr%2BdXyagO1oxbRSM3UsmnFtOpaC62nNkqbo7M60HPppfXaemu9j77X4IwUI49RxqhrtDWOGzeM92Y985lFWWWtcdZia4d10%2FpiU3YZu6%2B91j7rME5xp5szGVAgDcgBioDhYDpYDjaDE%2BAmeAW%2Bp8R%2FA5ajfCcAAAABAAAA3QCKABYAWAAFAAIAEAAvAFwAAAEAAQsAAwABeAF9jgNuRAEYhL%2FaDGoc4DluVNtug5pr8xh7jj3jTpK18pszwBDP9NHTP0IPs1DOexlmtpz3sc9iOe9nmddyPsA8%2BXI%2BqI1COZ%2FkliIXhPkiyDo3vCnG2CaEn0%2B2lH%2BgmfIvotowZa3769ULZST4K%2BcujqTb%2Fj36S4w%2FQmgDF0tWvalemNWLX%2BKSMBvYkhQSLG2FZR%2BafmERIsqPpn7%2ByvxjfMlsTjlihz3OuZE38bTtlAAa%2FTAFAHgBbMEDjJYBAADQ9%2F3nu2zbtm3b5p9t17JdQ7Zt21zmvGXXvJrZe0LA37Cw%2F3lDEBISIVKUaDFixYmXIJHEkkgqmeRSSCmV1NJIK530Msgok8yyyCqb7HLIKZfc8sgrn%2FwKKKiwIooqprgSSiqltDLKKqe8CiqqpLIqqqqmuhpqqqW2Ouqqp74GGmqksSaaaqa5FlpqpbU22mqnvQ466qSzLrrqprs9NpthprNWeWeWReZba6ctQYR5QaTplvvhp4VWm%2BOyt75bZ5fffvljk71uum6fHnpaopfbervhlvfCHnngof36%2BGappx57oq%2BPPpurv34GGGSgwTYYYpihhhthlJFGG%2BODscYbZ4JJJjphoykmm2qaT7445ZkDDnrujRcOOeyY46444qirZtvtnPPOBFG%2BBtFBTBAbxAXxQYJC7rvjrnv%2FxpJXmpPDXpqXaWDg6MKZX5ZaVJycX5TK4lpalA8SdnMyMITSRjxp%2BaVFxaUFqUWZ%2BUVQQWMobcKUlgYAHQ14sAAAeAFFSzVCLEEQ7fpjH113V1ybGPd1KRyiibEhxt1vsj3ZngE9AIfgBmMR5fVk8qElsRjHOHAYW%2BQwyumxct4bKxXkWDEvx7JjdszQNAZcekzi9Zho8oV8NCbnIT%2FfEXNRJwqmlaemnQMbN8E1OE7Mzb%2FP%2F8xzKZrEMA2hl3rQATa0Uxs2bN%2B2f8M2AEpwj5yQBvklvJ3AqRcEaMKrWq%2F19eWakl7NsZbyJoNblqlZc7KywcRbRnBjc00FeF6%2Fenoi05EcG62tsXhkPcdk87BHVC%2BZXleUPrOsUHaUI2tb4y%2F8OwbsTEAJAA%3D%3D%29%20format%28%27woff%27%29%3B%0A%7D%0Ahtml%20%7B%0Afont%2Dfamily%3A%20sans%2Dserif%3B%20%0A%2Dwebkit%2Dtext%2Dsize%2Dadjust%3A%20100%25%3B%20%0A%2Dms%2Dtext%2Dsize%2Dadjust%3A%20100%25%3B%20%0A%7D%0A%0Abody%20%7B%0Amargin%3A%200%3B%0A%7D%0A%0A%0Aarticle%2C%0Aaside%2C%0Adetails%2C%0Afigcaption%2C%0Afigure%2C%0Afooter%2C%0Aheader%2C%0Ahgroup%2C%0Amain%2C%0Amenu%2C%0Anav%2C%0Asection%2C%0Asummary%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%0Aaudio%2C%0Acanvas%2C%0Aprogress%2C%0Avideo%20%7B%0Adisplay%3A%20inline%2Dblock%3B%20%0Avertical%2Dalign%3A%20baseline%3B%20%0A%7D%0A%0Aaudio%3Anot%28%5Bcontrols%5D%29%20%7B%0Adisplay%3A%20none%3B%0Aheight%3A%200%3B%0A%7D%0A%0A%5Bhidden%5D%2C%0Atemplate%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%0A%0Aa%20%7B%0Abackground%2Dcolor%3A%20transparent%3B%0A%7D%0A%0Aa%3Aactive%2C%0Aa%3Ahover%20%7B%0Aoutline%3A%200%3B%0A%7D%0A%0A%0Aabbr%5Btitle%5D%20%7B%0Aborder%2Dbottom%3A%201px%20dotted%3B%0A%7D%0A%0Ab%2C%0Astrong%20%7B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0A%0Adfn%20%7B%0Afont%2Dstyle%3A%20italic%3B%0A%7D%0A%0Ah1%20%7B%0Amargin%3A%200%2E67em%200%3B%0Afont%2Dsize%3A%202em%3B%0A%7D%0A%0Amark%20%7B%0Acolor%3A%20%23000%3B%0Abackground%3A%20%23ff0%3B%0A%7D%0A%0Asmall%20%7B%0Afont%2Dsize%3A%2080%25%3B%0A%7D%0A%0Asub%2C%0Asup%20%7B%0Aposition%3A%20relative%3B%0Afont%2Dsize%3A%2075%25%3B%0Aline%2Dheight%3A%200%3B%0Avertical%2Dalign%3A%20baseline%3B%0A%7D%0Asup%20%7B%0Atop%3A%20%2D0%2E5em%3B%0A%7D%0Asub%20%7B%0Abottom%3A%20%2D0%2E25em%3B%0A%7D%0A%0A%0Aimg%20%7B%0Aborder%3A%200%3B%0A%7D%0A%0Asvg%3Anot%28%3Aroot%29%20%7B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%0A%0Afigure%20%7B%0Amargin%3A%201em%2040px%3B%0A%7D%0A%0Ahr%20%7B%0Aheight%3A%200%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20content%2Dbox%3B%0Abox%2Dsizing%3A%20content%2Dbox%3B%0A%7D%0A%0Apre%20%7B%0Aoverflow%3A%20auto%3B%0A%7D%0A%0Acode%2C%0Akbd%2C%0Apre%2C%0Asamp%20%7B%0Afont%2Dfamily%3A%20monospace%2C%20monospace%3B%0Afont%2Dsize%3A%201em%3B%0A%7D%0A%0A%0Atable%20%7B%0Aborder%2Dspacing%3A%200%3B%0Aborder%2Dcollapse%3A%20collapse%3B%0Awidth%3A%20100%25%3B%0Amargin%3A%2020px%20auto%3B%0A%7D%0Ath%2C%20td%20%7B%0Aborder%2Dbottom%3A%201px%20solid%20%23bbbbbb%3B%0Atext%2Dalign%3A%20left%3B%0Apadding%3A%2010px%3B%0A%7D%0Ath%20%7B%0Abackground%2Dcolor%3A%20%2363a0e1%3B%0Acolor%3A%20white%3B%0A%7D%0Atr%3Anth%2Dchild%28odd%29%20%7B%0Abackground%2Dcolor%3A%20%23eeeeee%3B%0A%7D%0Atr%3Anth%2Dchild%28even%29%20%7B%0Abackground%2Dcolor%3A%20%23ffffff%3B%0A%7D%0A%0Abody%20%7B%0Afont%2Dfamily%3A%20%27Open%20Sans%27%2C%20%27Helvetica%20Neue%27%2C%20Helvetica%2C%20Arial%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%2016px%3B%0Afont%2Dweight%3A%20400%3B%0Aline%2Dheight%3A%201%2E5%3B%0Acolor%3A%20%23666%3B%0Abackground%3A%20%23ffffff%3B%0A%0A%7D%0Ap%20%7B%0Amargin%2Dtop%3A%200%3B%0A%7D%0Aa%20%7B%0Acolor%3A%20%232879d0%3B%0A%7D%0Aa%3Ahover%20%7B%0Acolor%3A%20%232268b2%3B%0A%7D%0Aheader%20%7B%0Apadding%2Dtop%3A%2040px%3B%0Apadding%2Dbottom%3A%2020px%3B%0Abackground%3A%20%232e7bcf%20url%28data%3Aimage%2Fjpeg%3Bbase64%2C%2F9j%2F4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP%2FsABFEdWNreQABAAQAAABGAAD%2F4QNYaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI%2BIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKDEzLjAgMjAxMjAzMDUubS40MTUgMjAxMi8wMy8wNToyMTowMDowMCkgIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVBMjI2RDk5Nzc1NjExRTFCREEzRUU0NTcyQzU1NEZDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVBMjI2RDlBNzc1NjExRTFCREEzRUU0NTcyQzU1NEZDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkFEREYyMzQ3NUNGMTFFMUJEQTNFRTQ1NzJDNTU0RkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RUEyMjZEOTg3NzU2MTFFMUJEQTNFRTQ1NzJDNTU0RkMiLz4gPC9yZGY6RGVzY3JpcHRpb24%2BIDwvcmRmOlJERj4gPC94OnhtcG1ldGE%2BIDw%2FeHBhY2tldCBlbmQ9InIiPz7%2F7gAOQWRvYmUAZMAAAAAB%2F9sAhAAEAwMDAwMEAwMEBgQDBAYHBQQEBQcIBgYHBgYICggJCQkJCAoKDAwMDAwKDAwNDQwMEREREREUFBQUFBQUFBQUAQQFBQgHCA8KCg8UDg4OFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT%2FwAARCAMgAFADAREAAhEBAxEB%2F8QAewABAQEBAQEAAAAAAAAAAAAAAQIAAwQFAQEBAQEBAAAAAAAAAAAAAAABAAIDBxAAAQMDBAIBAgUFAQEAAwAAAREhAgAxEkFRYQNxIjLRBIHhUmITkaGxwSNCM%2FGSwhEBAQADAQEBAAMAAAAAAAAAAAERMUEhAmFRgRL%2F2gAMAwEAAhEDEQA%2FAPhT7u%2FtMuzs75T7CQs5SkZWRyXr2qSTzDyi23dAnMl56MFO1OBQZzMQszc6mnETGc1n7n%2B7PRMHKhOYx%2F6nkKd6MRAzkkh%2FIf6mpHKeT9n%2FAJXXalZTnPD%2FAOl11PFWPwWkzkJSTs31O4pwXb7P7v7n7X7jq7ujuMZAhRlJJDJUKEKCj1j7%2BJ9Syxr5%2BrLK84BQgwujPW2VEFfjaN32tRBhJJQempsDUiQVkcFO7uP61RMAVgDFANlYrTSmIIB9P8800YVr8NOTpWSkiWIAgpWz8UpREll67u%2B9CMAc%2Bv015Z6rpYR6JcgLt55poIQyUK42481IIABFdTp45oyikCZOf%2FwaV1gix9iTo3NSAxxIU6aeeaVhSAFjYf681lXCPURuynQLpzSlEjKfsh1bkc0cJh%2F9OtT%2BCc%2BaroAgmJtcBfXmrKL5BRGz22qISRiLX%2FbxakFJEzDcW3o8LDJY28sWWpB0NlXgjWpMFyFkTjalMshFWvxxUIQSs2Gp03oNMAcutUuFtvpVUj1xLG4ZfPFKZlsfjvxUGyigZHLLwOKkTj7rEn8efFSZlgoQ%2FhueKlNhY4ljcM30qUJxyRDkm%2FHigj1ERcqSL%2FlUMk4kzQFdX58VExxz62RwQ6a%2BKv5ECs03W781dRWS%2FJk5vjSqCTiCZoHsvFURJKy9tNPPig5AJWHt%2BDu9SYGSH3umppwipVDLTm%2BNCCkxHtqd6dAkkmYJt538VQmJ94e%2BoS7vRVEAHE%2BjqNCmtKOJJ%2BCERu%2B1Sb2xHo6lnSocYqsvW9i%2B9SIBJgcE%2Fqz1QgAgH1RwjHmoKQmXw0a%2B1CQigejvvxzTCognL1%2FsXepUwUT6%2FRFIUod6qohIoSpRQ6eeamSyov8A524opCxEYkkop04p6ioyk55Zr0Kt6kwKngJzUoPTEubh0F35pRQEsdNANvNS8BxwF0Uqyf7qgJwBm5H4DeomIH8nWi6MnPJqXQ6GwVEtzV4isl0tx%2Bmoj2xAYuV%2BOwqRlkMrDa2%2BtEqwwyBhYjdlvUA6GyKNqkSCJ3ZONqoR7IFAX8DtSChWSprtvQqYLnC1xoN6roxBQCxVQyroeKQzEhnSy7jxUdVpYABtSj%2F2o9RKLNiur8jimIBFhddP6%2BKsiVhgI2Nw6%2BeKvUVipYvHdrVYSfXENqdRxxT6sqkADJQfxIsDWfUvpge7u6erqCz7JRjEKB7Skg03otxLk%2FM9kaff3dpl2dvfLs7JEZTlKRJQI5NX%2BZPJDmtnLIDPSynanATlLF%2B3Uup4qx%2BLJzms%2FwDow5LPViBs5rGJ7NtS71YaAnPEn%2BQ33NWPweseyap%2FIbPfarCYzmR%2F9FP41YTGUll%2F0IA0dnqWa7%2FZ%2Fd%2Fc%2FafcdXf09xEomJMQZASGS4yARQdRWfv5n1MWNfP1ZcyvOhATC5DPzW2KU9h66XfagpQ4hIhVLPxSFFTmkX%2FF3oTAFYetgmpR6v7MAVD6uqC%2FNIx4SCqYqEYvtQoHxAENU1qWCQfYgeLu9JMAcoHB1C33oSAI4m9xpweaQf8A0x%2F87ft81cI9cQ5Yk2qGTLH3Kv45qkwW9VgR%2BDc%2BagBjiXKEghtf61IkDJiUTbRKl4k4p8iqkWHHNSURH2c%2Fh5G5qUaCGfWCtxfyaKYfbEkpcM1qmWQ5L6huNqmg%2BI%2BJQ8cVInIGdv7b%2FSpMMlhZWVU3pSQqaK23NSUklJa3F0oQKoLFDxSCpWaon4XWpGOWcCoVRst6DEAxxKA3Cvx4pwyVGTscd%2BPFRBMTEMbll8UAkhZ3%2Frz4qPjMsGfy1zxTgyxmxJxZQf8ANQYItigCKvFSyPXAMXUIoqiJIWbHyvPipGOOXWg1CPyeKr7EFkYn3fd9akSSvy0LPtehAqi56l32FJJJWXsn9WegMslgkz%2FffxSR7YoZ2IOvPFVUZ1%2BVhztUmMjiEn7ONeKsIkn39v8ALPQiCTLr99Rv%2BqqxJGSH1dQzjepYKFUxQJztUgAcQMNSLH600MhWZxVfLuKNmlD6nDjVnqQQ4kYahkPPNOQUJPx02O1CCEgejrZ%2BKUSCskit0vvQVQXKAME8Kz1JzAjiXP4jyd6R4fXL8P8AVCBxQOSHdOBzSiyzuvjnzUayBYOV4HPmgD0xLlFGnB5pJ9RL5FU%2F1UgRExCk3KM%2BnNQJAykST%2FTmpHrxM%2Bty6MnPmikDLFGuALJrSj7KyW4ulA6PYRbFVsceK0mKrIN%2FbeskhVgG5Lb1IexBsybc1JvZdA122pDe2IsxOyVLDFVmWF0tuy1FUBLPrVLhbb0LKFjiWIQjXzxUPCoBsbXXjxRUFGIYopsX0pRkYrM6OL81JkivWgPD8nipQLHFXuNePFLR9V1THcbeKGalY4hrk%2F1binNUUShmoO9%2BRxQfF9EJdvf0dXXEy7OyUYwCgKTJAFPNH1cS2mTNkHZ3fcdpl2dvdLs7CQs5SkSQiXL0SSeYVoM5r%2F8AQol1O1awBnIgEdhcnWT1L1sp5SAmUCoHZ6PCwnIGB%2FkJO6l3NOBlhKaEHsLJqajmsZSV%2Bw2UubpUutlIBP5Dcq5qxBkmcgZH%2BS3JZ6MF2%2B0%2B7%2B4%2B07%2Brv6e2QkCFAlNJASXEoig6is%2FfzPqYrXzbL484BxQwsea0ywUFoaXfahYCFPiLnf61rK0ogrP0b8XU0IAAmHp5KFnpQC4pgjhn55qSkkSmDY7HagA%2FEDDUsh0Sk1iqy9GLq%2B4oRgufWMWUKXZ6qY5oMShLkKU880sscQbm1k%2FbRGgscUUopdPHNLMUUJmVP9ORQWAAlBCUNm5p2PEsIG4cafnVhK9SS7EbW9fNCSRERDm5VhxzSeKOKzUlPHIoDRTPqxJVr%2BfNRmwFQtEqR%2BmpZIUlkRLstqsIEyQfF1X48UIlVlZNLb1JhksLL%2BDPpSgMjEsGK6c1ZRfIlrcbURJWSAtfePFKUVWaJ%2BKb0Ix%2BUPjptutVUc1ilira8Gr1H1U%2BpXF%2F%2FwBfFVpSscAgNzc%2FlT1KOPuUP9eRxRERisWL%2FwCFPFQSsREsTZX88UorEHWyX48ULA%2F54htTr44pHGJis1HlDyOKGlQxy61B0R%2F3HimrqBI4n31G%2FwBKERIq02Sz7UFjIiI9nU6l7f4pwNqMpLP23GrPUgJFY%2B%2Fm%2B9GFIM5J89Q7804SspL8haz7Vnw4QZHFDPU78VoYUZFZe%2B%2B7PQsGEpZ9ayuQzu9Vwol8SvXchn%2BtRYtL4aMUO1qAHQLDUqCrW5pXCVJn6X8uFqycEXh6My3Z6EkKYfBAoZ6UXyeP%2FlNdqkEliBhuiLxUiQVmcF%2FrvQjAHLrOLKDqzmirrkMcT7bacHmtXaJxyVXIt5HmrKHrjFyxOnjmnPqUcQZueW581lRgYiUHP9OfNIwmOOBchxoOeakfVXJHrqOKEwTAKTrpwOaSxMQZueW580RUxTPrQm40581cU2FlibXH6TvV1QrISRkThmoQdAVipJ%2FT5qyiShmicW3qwsNFSYWXW25tVVgDJCqXCWpTeyoEAS7bVeJvfEIiqduKsxE5LOw2LWWhGK5wCi420NJjmDAwKA3DL54qBGIlqpFwePFBAIEIsQpOvA4pVJxJmxUakvccUJokGUGdjfmoAYkE4lFDKv8AqnCY45IWOLu1qjG9cQxR9X04qBOOU1Ba5%2FELpUV9HWe37jo6oRJ7OyUYwCj5SkgvzWfrVtantjdnf3dxl2dvfLsnIhZylKRLIFN6pMeSD%2FVuxnPJf5DZw98agkzkg%2F6FVuppws0mc1n%2FANCE5LOKMHLZSWIMzeyl3qwsj%2BSaH%2Fo%2B6nY1WRH%2BSQJTs0cEnarETfyTEB%2F0Lkup2qwmM5LM%2FwAhTZSz%2BKQ7%2FZ%2FefcfZ%2Fc9Xd09xEgYqMpASAkuMkRQUesfXzPqYw18%2FVl28oXF4ah35rYwUKtFUjdDdKLUCCIhIb71InIymMVVXfepMPlFYu2%2B%2Fmmph8fgzb81dTe2S46JrtapBCgGGpZ2tVkEiSy9FP4u4oODASy6%2FTUCx3opm0JEgqSXCtsvNOGSAMlUrjtx5pIOOIClCToOKESI5TWTuLc%2BaeBgIrByujDfzR6QBERKrcOl70o%2BuVz8Wb9tHEPTEexRTp%2BdVVJRZ3Ul258vUjERz61JVRpz5oXQ6OBcJatA%2ByiwCcbVESySPxv8Atom0o5ZTYapbfWrzAD5Qtovx3v8AjUQ%2BJRLj9NRZ1FkTjaqBvbG0bn9PDVKl1k44tvzUqYZZQsijZb0VTaFjiUW%2B978VocIxVg6bhwnihCRikWNzr%2BVU2eKOOU2OqvzTwAGOXWxuz6r4oLNiVDKNR9KkGUMVx%2FtjVEFhhrc6%2BOKVVMsmTd7v4oFMMc%2Btiqh154opmwssT7a8tWhCrvNWcPteoiRkkffU%2Fqo6lEyyn77pdnq4Apyh7bbu9RCnE%2B6FQ7%2FSospUe2ln2vVAyyx%2Bep3e1VVKvJJ%2F5Z%2BKqqYE5Q99Qz70HqUb4I7X5rTM0pJKPXS77WegpkCkf%2BetkP1qm0qQ9p%2Bm%2B7vVwBDlD0Tl2eosksT6q4Z6iEKj10u%2B1qoAhw%2BGpUPZqTVIVl6%2BLu9ApiDl1%2Bmod9%2BazVNoZC6u7eea2Jo%2Bq6qm3HmpCQjjFzc6D60TaUccp%2Bx105p9wgMcoOVbTnzQQkcTe40%2FOpMyhz8bJ%2B2qaTeuA9jco2rPelU%2Bqyvy3PJoopjjn1uVUMnNFM3A6OBcJatA%2ByiwCcbVESySPxv%2B2ibSjllNhqlt9avMAPlC2i%2FHe%2F41EPiUS4%2FTUWdRZE42qgb2xtG5%2FTw1SpdZOOLb81KmGWULIo2W9FU2hsSiorve%2FFbCvVbOm4slCEkxiUKKdfyokRIjlNjy%2FNPuEAAZQQHcP%2B7xQmYxLEuNfypwcxmEkIcR30xqiCDEMbnXxxUslgZsQl358UCunR1nt7%2Bjq64k9vZKMYBQFMpINqLq2tT2xuz7j7jtMuzt7pdkyRlOUpSkwRyXpkk1Bm3o%2Fknkv8hs4BO16sJMpzAH%2FUqTf2%2BlU2lGXYsv%2Bh11LPVjxZGc1h7qDyXepN%2FJNCf5Cqh1OtGImHZMH5sQ4U7U4Tfydgh%2F9HUgFTxUmzkTL3PhSgenIrv9n959x9p9x09%2FR2mMomKxWSSAkDjJEUFHrn9%2FM%2BpjDfz9WV5kb4I7X5roxNKSSj10u%2B1noKZApH%2FnrZD9aptKkPafpvu71cAQ5Q9E5dnqLJLE%2BquGeohCo9dLvtaqAIcPhqVD2ak1SFZevi7vQKYg5dfpqHffms1TaGQuru3nmtiaPquqptx5qQkI4xc3Og%2BtE2lHHKfsddOafcIDHKDlW0580EJHE3uNPzqTMoc%2FGyftqmk3rgPY3KNqz3pVPqsr8tzyaKKY459blVDJzRTNwOjgXCWrQPsosAnG1REskj8b%2Ftom0o5ZTYapbfWrzAD5Qtovx3v%2BNRD4lEuP01FnUWRONqoG9sbRuf08NUqXWTji2%2FNSphllCyKNlvRVNoWOJRb73vxWhwjFWDpuHCeKEJGKRY3Ov5VTZ4o45TY6q%2FNPAAY5dbG7Pqvigs2JUMo1H0qQZQxXH%2B2NUQWGGtzr44pVUyyZN3u%2FigUwxz62KqHXniimbSyF1d2881oTR9V1VNuPNSEhHGLm50H1om0o45T9jrpzT7hAY5Qcq2nPmghI4m9xp%2BdSZlDn42T9tU0m9cB7G5RtWe9Kp9VlflueTRRTHHPrcqoZOaKZuB0cC4S1aB9lFgE42qIlkkfjf9tE2lHLKbDVLb61eYAfKFtF%2BO9%2FxqIfEolx%2Bmos6iyJxtVA3tjaNz%2BnhqlS6yccW35qVMMsoWRRst6KptCxxKLfe9%2BK0OEYqwdNw4TxQhIxSLG51%2FKqbPFHHKbHVX5p4ADHLrY3Z9V8UFmxKhlGo%2BlSDKGK4%2F2xqiCww1udfHFKqmWTJu938UCmGOfWxVQ688UUzYWWJ9teWrQhV3mrOH2vURIySPvqf1UdSiZZT990uz1cAU5Q9tt3eohTifdCod%2FpUWUqPbSz7XqgZZY%2FPU7vaqqlXkk%2F8s%2FFVVMCcoe%2BoZ96D1AQxJEbEb881vDM0pXsLc7VlA%2FGJxCKd%2FrVCSmU%2FUa%2F5px4AHlBIjdfx80LLXiWBcb%2FAFpwstaSEBRH%2FwDmrBH%2FAI%2BOpZ%2BOalaSUMlAbzvQK6dMJdvf0dMICXZ2SjGAXWUkFzrRfJbWp7Zhuzv%2B57TLs7ezsn2SI9pylKRACOSVpkk0M2jLuyVZInKKlXi9TKXegeak81Ta9UZdqyeeqOd6vMLNGXasFMkN1XepZbPuQlZKoS680Yi9Ydnat5IQ7khUpxKm%2Fk7sLyuVuqNViJsu0mTyQ2DnWnIrv9n93939n9x09%2FTOUTExJCyEZASBxkhCgpXP7ksxW%2Fn6svjyshdXdvPNdGJo%2Bq6qm3HmpCQjjFzc6D60TaUccp%2Bx105p9wgMcoOVbTnzQQkcTe40%2FOpMyhz8bJ%2B2qaTeuA9jco2rPelU%2Bqyvy3PJoopjjn1uVUMnNFM3A6OBcJatA%2ByiwCcbVESySPxv%2B2ibSjllNhqlt9avMAPlC2i%2FHe%2F41EPiUS4%2FTUWdRZE42qgb2xtG5%2FTw1SpdZOOLb81KmGWULIo2W9FU2hY4lFvve%2FFaHCMVYOm4cJ4oQkYpFjc6%2FlVNnijjlNjqr808ABjl1sbs%2Bq%2BKCzYlQyjUfSpBlDFcf7Y1RBYYa3OvjilVTLJk3e7%2BKBTDHPrYqodeeKKZsLLE%2B2vLVoQq7zVnD7XqIkZJH31P6qOpRMsp%2B%2B6XZ6uAKcoe227vUQpxPuhUO%2F0qLKVHtpZ9r1QMssfnqd3tVVSrySf%2BWfiqqmBOUPfUM%2B9B6jEodHCOOa0zNKQqHFkuNqkmUSkXFzqKJsqMTlNg668058AETlCzXcb0EIcCF1GopWGQqC3xS%2F7aJpDE4aXOo4alVRBWTjhwNaBTCJy6y1xchb0UzaVjiUW%2B978VocIxVg6bhwnihCRikWNzr%2BVU2eKOOU2OqvzTwAGOXWxuz6r4oLNiVDKNR9KkGUMVx%2FtjVEFhhrc6%2BOKVVMsmTd7v4oFMMc%2Btiqh154opmwssT7a8tWhCrvNWcPteoiRkkffU%2Fqo6lEyyn77pdnq4Apyh7bbu9RCnE%2B6FQ7%2FSospUe2ln2vVAyyx%2Bep3e1VVKvJJ%2F5Z%2BKqqYE5Q99Qz70HqUb4I7X5rTM0pJKPXS77WegpkCkf%2BetkP1qm0qQ9p%2Bm%2B7vVwBDlD0Tl2eosksT6q4Z6iEKj10u%2B1qoAhw%2BGpUPZqTVIVl6%2BLu9ApiDl1%2Bmod9%2BazVNoQGJclwreea6Dikityqf680JMhHGJdFOg%2BtE2VEDKbnVW5p4AADKCElENhZfNCYAGJu5Gn50nxkAkhLiNvw80IIMbm5RtW5pXhIiDNV5ZdfNArp0dR7e%2Fo6utT2dkoxhFgplJA5NF8mWp7Y3Z3%2Fc9pl2dvZ2T7JEe05SlIgBHJK0ySaGbRl3ZKskTlFSrxeplLvQPNSeapteqMu1ZPPVHO9XmFmjLtWCmSG6rvUstn3ISslUJdeaMResOztW8kIdyQqU4lTfyd2F5XK3VGqxE2XaTJ5IbBzrTkV3%2Bz%2B7%2B7%2Bz%2B46e%2FpnKJiYkhZCMgJA4yQhQUrn9yWYrfz9WXx5WQuru3nmujE0fVdVTbjzUhIRxi5udB9aJtKOOU%2FY66c0%2B4QGOUHKtpz5oISOJvcafnUmZQ5%2BNk%2FbVNJvXAexuUbVnvSqfVZX5bnk0UUxxz63KqGTmimbgdHAuEtWgfZRYBONqiJZJH43%2FbRNpRyymw1S2%2BtXmAHyhbRfjvf8aiHxKJcfpqLOosicbVQN7Y2jc%2Fp4apUusnHFt%2BalTDLKFkUbLeiqbQscSi33vfitDhGKsHTcOE8UISMUixudfyqmzxRxymx1V%2BaeAAxy62N2fVfFBZsSoZRqPpUgyhiuP9saogsMNbnXxxSqplkybvd%2FFAphjn1sVUOvPFFM2FlifbXlq0IVd5qzh9r1ESMkj76n9VHUomWU%2FfdLs9XAFOUPbbd3qIU4n3QqHf6VFlKj20s%2B16oGWWPz1O72qqpV5JP%2FLPxVVTAnKHvqGfeg9RiUOjhHHNaZmlIVDiyXG1STKJSLi51FE2VGJymwddeac%2BACJyhZruN6CEOBC6jUUrDIVBb4pf9tE0hicNLnUcNSqogrJxw4GtAphE5dZa4uQt6KZtKxxKLfe9%2BK0OEYqwdNw4TxQhIxSLG51%2FKqbPFHHKbHVX5p4ADHLrY3Z9V8UFmxKhlGo%2BlSDKGK4%2F2xqiCww1udfHFKqmWTJu938UCmGOfWxVQ688UUzYWWJ9teWrQhV3mrOH2vURIySPvqf1UdSiZZT990uz1cAU5Q9tt3eohTifdCod%2FpUWUqPbSz7XqgZZY%2FPU7vaqqlXkk%2F8ALPxVVTAnKHvqGfeg9SjfBHa%2FNaZmlJJR66Xfaz0FMgUj%2FwA9bIfrVNpUh7T9N93ergCHKHonLs9RZJYn1Vwz1EIVHrpd9rVQBDh8NSoezUmqQrL18Xd6BTEHLr9NQ7781mqbQgMS5LhW8810HFJFblU%2F15oSZCOMS6KdB9aJsqIGU3OqtzTwAAGUEJKIbCy%2BaEwAMTdyNPzpPjIBJCXEbfh5oQQY3NyjatzSvCREGaryy6%2BaBXTo6j29%2FR1dans7JRjCLBTKSByaL5MtT2xuzv8Aue0y7O3s7J9kiPacpSkQAjklaZJNDNoy7slWSJyipV4vUyl3oHmpPNU2vVGXasnnqjnerzCzRl2rBTJDdV3qWWz7kJWSqEuvNGIvWHZ2reSEO5IVKcSpv5O7C8rlbqjVYibLtJk8kNg51pyK7%2FZ%2Fd%2Fd%2FZ%2FcdPf0zlExMSQshGQEgcZIQoKVz%2B5LMVv5%2BrL48rIXV3bzzXRiaPquqptx5qQkI4xc3Og%2BtE2lHHKfsddOafcIDHKDlW0580EJHE3uNPzqTMoc%2FGyftqmk3rgPY3KNqz3pVPqsr8tzyaKKY459blVDJzRTNwOjgXCWrQPsosAnG1REskj8b%2Ftom0o5ZTYapbfWrzAD5Qtovx3v%2BNRD4lEuP01FnUWRONqoG9sbRuf08NUqXWTji2%2FNSphllCyKNlvRVNoWOJRb73vxWhwjFWDpuHCeKEJGKRY3Ov5VTZ4o45TY6q%2FNPAAY5dbG7Pqvigs2JUMo1H0qQZQxXH%2B2NUQWGGtzr44pVUyyZN3u%2FigUwxz62KqHXniimbCyxPtry1aEKu81Zw%2B16iJGSR99T%2BqjqUTLKfvul2ergCnKHttu71EKcT7oVDv8ASospUe2ln2vVAyyx%2Bep3e1VVKvJJ%2FwCWfiqqmBOUPfUM%2B9B6jEodHCOOa0zNKQqHFkuNqkmUSkXFzqKJsqMTlNg668058AETlCzXcb0EIcCF1GopWGQqC3xS%2FwC2iaQxOGlzqOGpVUQVk44cDWgUwicustcXIW9FM2lY4lFvve%2FFaHCMVYOm4cJ4oQkYpFjc6%2FlVNnijjlNjqr808ABjl1sbs%2Bq%2BKCzYlQyjUfSpBlDFcf7Y1RBYYa3OvjilVTLJk3e7%2BKBTDHPrYqodeeKKZsLLE%2B2vLVoQq7zVnD7XqIkZJH31P6qOpRMsp%2B%2B6XZ6uAKcoe227vUQpxPuhUO%2F0qLKVHtpZ9r1QMssfnqd3tVVSrySf%2BWfiqqmBOUPfUM%2B9B6lG%2BCO1%2Ba0zNKSSj10u%2B1noKZApH%2FnrZD9aptKkPafpvu71cAQ5Q9E5dnqLJLE%2BquGeohCo9dLvtaqAIcPhqVD2ak1SFZevi7vQKYg5dfpqHffms1TaEBiXJcK3nmug4pIrcqn%2BvNCTIRxiXRToPrRNlRAym51VuaeAAAyghJRDYWXzQmABibuRp%2BdJ8ZAJIS4jb8PNCCDG5uUbVuaV4SIgzVeWXXzQK6dHUe3v6OrrU9nZKMYRYKZSQOTRfJlqe2N2d%2F3PaZdnb2dk%2ByRHtOUpSIARyStMkmhm0Zd2SrJE5RUq8XqZS70DzUnmqbXqjLtWTz1RzvV5hZoy7Vgpkhuq71LLZ9yErJVCXXmjEXrDs7VvJCHckKlOJU38ndheVyt1RqsRNl2kyeSGwc605Fd%2Fs%2Fu%2Fu%2Fs%2FuOnv6ZyiYmJIWQjICQOMkIUFK5%2FclmK38%2FVl8eVkLq7t55roxNH1XVU2481ISEcYubnQfWibSjjlP2OunNPuEBjlByrac%2BaCEjib3Gn51JmUOfjZP21TSb1wHsblG1Z70qn1WV%2BW55NFFMcc%2Btyqhk5opm4HRwLhLVoH2UWATjaoiWSR%2BN%2F20TaUcspsNUtvrV5gB8oW0X473%2FGoh8SiXH6aizqLInG1UDe2No3P6eGqVLrJxxbfmpUwyyhZFGy3oqm0LHEot9734rQ4RirB03DhPFCEjFIsbnX8qps8UccpsdVfmngAMcutjdn1XxQWbEqGUaj6VIMoYrj%2FAGxqiCww1udfHFKqmWTJu938UCmGOfWxVQ688UUzYWWJ9teWrQhV3mrOH2vURIySPvqf1UdSiZZT990uz1cAU5Q9tt3eohTifdCod%2FpUWUqPbSz7XqgZZY%2FPU7vaqqlXkk%2F8s%2FFVVMCcoe%2BoZ96D1GJQ6OEcc1pmaUhUOLJcbVJMolIuLnUUTZUYnKbB115pz4AInKFmu43oIQ4ELqNRSsMhUFvil%2F20TSGJw0udRw1KqiCsnHDga0CmETl1lri5C3opm0rHEot9734rQ4RirB03DhPFCEjFIsbnX8qps8UccpsdVfmngAMcutjdn1XxQWbEqGUaj6VIMoYrj%2FbGqILDDW518cUqqZZMm73fxQKYY59bFVDrzxRTNhZYn215atCFXeas4fa9REjJI%2B%2Bp%2FVR1KJllP33S7PVwBTlD223d6iFOJ90Kh3%2BlRZSo9tLPteqBllj89Tu9qqqVeST%2FAMs%2FFVVMCcoe%2BoZ96D1KN8Edr81pmaUklHrpd9rPQUyBSP8Az1sh%2BtU2lSHtP033d6uAIcoeicuz1FklifVXDPUQhUeul32tVAEOHw1Kh7NSapCsvXxd3oFMQcuv01DvvzWaptCAxLkuFbzzXQcUkVuVT%2FXmhJkI4xLop0H1omyogZTc6q3NPAAAZQQkohsLL5oTAAxN3I0%2FOk%2BMgEkJcRt%2BHmhBBjc3KNq3NK8JEQZqvLLr5oFdOjqPb39HV1qezslGMIsFMpIHJovky1PbG7O%2F7ntMuzt7OyfZIj2nKUpEAI5JWmSTQzaMu7JVkicoqVeL1Mpd6B5qTzVNr1Rl2rJ56o53q8ws0ZdqwUyQ3Vd6lls%2B5CVkqhLrzRiL1h2dq3khDuSFSnEqb%2BTuwvK5W6o1WImy7SZPJDYOdaciu%2F2f3f3f2f3HT39M5RMTEkLIRkBIHGSEKClc%2FuSzFb%2Bfqy%2BPKyF1d28810Ymj6rqqbceakJCOMXNzoPrRNpRxyn7HXTmn3CAxyg5VtOfNBCRxN7jT86kzKHPxsn7appN64D2Nyjas96VT6rK%2FLc8miimOOfW5VQyc0UzcDo4Fwlq0D7KLAJxtURLJI%2FG%2FwC2ibSjllNhqlt9avMAPlC2i%2FHe%2FwCNRD4lEuP01FnUWRONqoG9sbRuf08NUqXWTji2%2FNSphllCyKNlvRVNoWOJRb73vxWhwjFWDpuHCeKEJGKRY3Ov5VTZ4o45TY6q%2FNPAAY5dbG7Pqvigs2JUMo1H0qQZQxXH%2B2NUQWGGtzr44pVUyyZN3u%2FigUwxz62KqHXniimbCyxPtry1aEKu81Zw%2B16iJGSR99T%2BqjqUTLKfvul2ergCnKHttu71EKcT7oVDv9KiylR7aWfa9UDLLH56nd7VVUq8kn%2Fln4qqpgTlD31DPvQeoxKHRwjjmtMzSkKhxZLjapJlEpFxc6iibKjE5TYOuvNOfABE5Qs13G9BCHAhdRqKVhkKgt8Uv%2B2iaQxOGlzqOGpVUQVk44cDWgUwicustcXIW9FM2lY4lFvve%2FFaHCMVYOm4cJ4oQkYpFjc6%2FlVNnijjlNjqr808ABjl1sbs%2Bq%2BKCzYlQyjUfSpBlDFcf7Y1RBYYa3OvjilVTLJk3e7%2BKBTDHPrYqodeeKKZsLLE%2B2vLVoQq7zVnD7XqIkZJH31P6qOpRMsp%2B%2B6XZ6uAKcoe227vUQpxPuhUO%2F0qLKVHtpZ9r1QMssfnqd3tVVSrySf%2BWfiqqmBOUPfUM%2B9B6lG%2BCO1%2Ba0zNKSSj10u%2B1noKZApH%2FnrZD9aptKkPafpvu71cAQ5Q9E5dnqLJLE%2BquGeohCo9dLvtaqAIcPhqVD2ak1SFZevi7vQKYg5dfpqHffms1TaGQuru3nmtiaPquqptx5qQkI4xc3Og%2BtE2lHHKfsddOafcIDHKDlW0580EJHE3uNPzqTMoc%2FGyftqmk3rgPY3KNqz3pVPqsr8tzyaKKY459blVDJzRTNx%2F%2F9k%3D%29%200%200%20repeat%2Dx%3B%0Aborder%2Dbottom%3A%20solid%201px%20%23275da1%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0Aheader%20h1%20%7B%0Amargin%2Dtop%3A%200%3B%0Amargin%2Dbottom%3A%200%2E5em%3B%0Afont%2Dsize%3A%202em%3B%0Afont%2Dweight%3A%20bold%3B%0Aline%2Dheight%3A%201%3B%0Acolor%3A%20%23fff%3B%0Aletter%2Dspacing%3A%20%2D1px%3B%0A%7D%0Aheader%20h2%20%7B%0Amargin%2Dtop%3A%200%3B%0Amargin%2Dbottom%3A%201em%3B%0Afont%2Dsize%3A%201%2E5em%3B%0Afont%2Dweight%3A%20normal%3B%0Aline%2Dheight%3A%201%2E3%3B%0Acolor%3A%20%239ddcff%3B%0Aletter%2Dspacing%3A%200%3B%0A%7D%0Aheader%20h3%20%7B%0Amargin%2Dtop%3A%200%3B%0Amargin%2Dbottom%3A%201em%3B%0Afont%2Dsize%3A%201%2E2em%3B%0Afont%2Dweight%3A%20normal%3B%0Aline%2Dheight%3A%201%2E2%3B%0Acolor%3A%20%239ddcff%3B%0Aletter%2Dspacing%3A%200%3B%0A%7D%0A%2Einner%2C%20%2Etoc%20%7B%0Aposition%3A%20relative%3B%0Awidth%3A%20840px%3B%0Afont%2Dsize%3A%201%2E1em%3B%0Amargin%3A%200%20auto%3B%0A%7D%0A%2Etoc%20%7B%0Apadding%2Dtop%3A%201em%3B%0Apadding%2Dbottom%3A%200%3B%0A%7D%0A%2Etoc%20ul%20%7B%0Amargin%2Dbottom%3A%200%3B%0A%7D%0A%23content%2Dwrapper%20%7B%0Apadding%2Dtop%3A%2030px%3B%0Aborder%2Dtop%3A%20solid%201px%20%23fff%3B%0A%7D%0A%23main%2Dcontent%20img%20%7B%0Amax%2Dwidth%3A%20100%25%3B%0A%7D%0Acode%2C%20pre%20%7B%0Amargin%2Dbottom%3A%2030px%3B%0Afont%2Dfamily%3A%20Monaco%2C%20Consolas%2C%20%22Bitstream%20Vera%20Sans%20Mono%22%2C%20%22Lucida%20Console%22%2C%20Terminal%2C%20monospace%3B%0Afont%2Dsize%3A%201em%3B%0Acolor%3A%20%23222%3B%0A%7D%0Acode%20%7B%0Apadding%3A%200%203px%3B%0Abackground%2Dcolor%3A%20%23f2f8fc%3B%0Aborder%3A%20solid%201px%20%23dbe7f3%3B%0A%7D%0Apre%20%7B%0Apadding%3A%2020px%3B%0Aoverflow%3A%20auto%3B%0Atext%2Dshadow%3A%20none%3B%0Abackground%3A%20%23fff%3B%0Aborder%3A%20solid%201px%20%23f2f2f2%3B%0Afont%2Dsize%3A%200%2E9em%3B%0A%7D%0Apre%20code%20%7B%0Apadding%3A%200%3B%0Acolor%3A%20%232879d0%3B%0Abackground%2Dcolor%3A%20%23fff%3B%0Aborder%3A%20none%3B%0A%7D%0Aul%2C%20ol%2C%20dl%20%7B%0Amargin%2Dbottom%3A%2020px%3B%0A%7D%0A%0Ahr%20%7B%0Aheight%3A%201px%3B%0Amargin%2Dtop%3A%201em%3B%0Amargin%2Dbottom%3A%201em%3B%0Aborder%3A%200%3B%0Abackground%3A%20%23aaa%3B%0Abackground%2Dimage%3A%20linear%2Dgradient%28to%20right%2C%20%23eee%2C%20%23aaa%2C%20%23eee%29%3B%0A%7D%0Aform%20%7B%0Apadding%3A%2020px%3B%0Abackground%3A%20%23f2f2f2%3B%0A%7D%0A%0A%23main%2Dcontent%20h1%20%7B%0Amargin%2Dtop%3A%200%3B%0Amargin%2Dbottom%3A%200%3B%0Afont%2Dsize%3A%202em%3B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23474747%3B%0Aletter%2Dspacing%3A%20%2D1px%3B%0A%7D%0A%23main%2Dcontent%20h1%3Abefore%20%7B%0Apadding%2Dright%3A%200%2E3em%3B%0Amargin%2Dleft%3A%20%2D0%2E8em%3B%0Acolor%3A%20%239ddcff%3B%0Acontent%3A%20%22%2F%22%3B%0A%7D%0A%23main%2Dcontent%20h2%20%7B%0Amargin%2Dbottom%3A%208px%3B%0Afont%2Dsize%3A%201%2E5em%3B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23474747%3B%0A%7D%0A%23main%2Dcontent%20h2%3Abefore%20%7B%0Apadding%2Dright%3A%200%2E3em%3B%0Amargin%2Dleft%3A%20%2D1%2E2em%3B%0Acontent%3A%20%22%2F%2F%22%3B%0Acolor%3A%20%239ddcff%3B%0A%7D%0A%23main%2Dcontent%20h3%20%7B%0Amargin%2Dtop%3A%2024px%3B%0Amargin%2Dbottom%3A%208px%3B%0Afont%2Dsize%3A%201%2E2em%3B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23474747%3B%0A%7D%0A%23main%2Dcontent%20h3%3Abefore%20%7B%0Apadding%2Dright%3A%200%2E3em%3B%0Amargin%2Dleft%3A%20%2D1%2E7em%3B%0Acontent%3A%20%22%2F%2F%2F%22%3B%0Acolor%3A%20%239ddcff%3B%0A%7D%0A%23main%2Dcontent%20h4%20%7B%0Amargin%2Dbottom%3A%208px%3B%0Afont%2Dsize%3A%201%2E1em%3B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23474747%3B%0A%7D%0Ah4%3Abefore%20%7B%0Apadding%2Dright%3A%200%2E3em%3B%0Amargin%2Dleft%3A%20%2D2em%3B%0Acontent%3A%20%22%2F%2F%2F%2F%22%3B%0Acolor%3A%20%239ddcff%3B%0A%7D%0A%23main%2Dcontent%20h5%20%7B%0Amargin%2Dbottom%3A%208px%3B%0Afont%2Dsize%3A%201em%3B%0Acolor%3A%20%23474747%3B%0A%7D%0Ah5%3Abefore%20%7B%0Apadding%2Dright%3A%200%2E3em%3B%0Amargin%2Dleft%3A%20%2D2%2E4em%3B%0Acontent%3A%20%22%2F%2F%2F%2F%2F%22%3B%0Acolor%3A%20%239ddcff%3B%0A%7D%0A%23main%2Dcontent%20h6%20%7B%0Amargin%2Dbottom%3A%208px%3B%0Afont%2Dsize%3A%200%2E9em%3B%0Acolor%3A%20%23474747%3B%0A%7D%0Ah6%3Abefore%20%7B%0Apadding%2Dright%3A%200%2E3em%3B%0Amargin%2Dleft%3A%20%2D3em%3B%0Acontent%3A%20%22%2F%2F%2F%2F%2F%2F%22%3B%0Acolor%3A%20%239ddcff%3B%0A%7D%0Ap%20%7B%0Amargin%2Dbottom%3A%2020px%3B%0A%7D%0Aa%20%7B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0Ap%20a%20%7B%0Afont%2Dweight%3A%20400%3B%0A%7D%0Ablockquote%20%7B%0Apadding%3A%200%200%200%2030px%3B%0Amargin%2Dbottom%3A%2020px%3B%0Afont%2Dsize%3A%201%2E1em%3B%0Aborder%2Dleft%3A%2010px%20solid%20%23e9e9e9%3B%0A%7D%0Aul%2C%20ol%20%7B%0Apadding%2Dleft%3A%2030px%3B%0A%7D%0Adl%20dd%20%7B%0Afont%2Dstyle%3A%20italic%3B%0Afont%2Dweight%3A%20100%3B%0A%7D%0A%0A%2Eclearfix%3Aafter%20%7B%0Adisplay%3A%20block%3B%0Aheight%3A%200%3B%0Aclear%3A%20both%3B%0Avisibility%3A%20hidden%3B%0Acontent%3A%20%27%2E%27%3B%0A%7D%0A%2Eclearfix%20%7Bdisplay%3A%20inline%2Dblock%3B%7D%0A%2A%20html%20%2Eclearfix%20%7Bheight%3A%201%25%3B%7D%0A%2Eclearfix%20%7Bdisplay%3A%20block%3B%7D%0A%0A%0A%40media%20only%20screen%20and%20%28max%2Dwidth%3A%20850px%29%20%7B%0A%2Etoc%2C%20%2Einner%20%7B%0Awidth%3A%2093%25%3B%0Afont%2Dsize%3A%201em%3B%0A%7D%0Aheader%20%7B%0Apadding%3A%2010px%200%3B%0A%7D%0Aheader%20h1%2C%20header%20h2%20%7B%0Awidth%3A%20100%25%3B%0A%7D%0Aheader%20h1%20%7B%0Afont%2Dsize%3A%201%2E75em%3B%0A%7D%0Aheader%20h2%20%7B%0Afont%2Dsize%3A%201%2E2em%3B%0A%7D%0Aheader%20h3%20%7B%0Afont%2Dsize%3A%201em%3B%0A%7D%0A%23main%2Dcontent%20h1%3Abefore%2C%0A%23main%2Dcontent%20h2%3Abefore%2C%0A%23main%2Dcontent%20h3%3Abefore%2C%0A%23main%2Dcontent%20h4%3Abefore%2C%0A%23main%2Dcontent%20h5%3Abefore%2C%0A%23main%2Dcontent%20h6%3Abefore%20%7B%0Apadding%2Dright%3A%200%3B%0Amargin%2Dleft%3A%200%3B%0Acontent%3A%20none%3B%0A%7D%0A%7D%0A" type="text/css" /> <style type="text/css"> .main-container { max-width: 940px; margin-left: auto; margin-right: auto; } code { color: inherit; background-color: rgba(0, 0, 0, 0.04); } img { max-width:100%; } .tabbed-pane { padding-top: 12px; } .html-widget { margin-bottom: 20px; } button.code-folding-btn:focus { outline: none; } summary { display: list-item; } </style> <!-- tabsets --> <style type="text/css"> .tabset-dropdown > .nav-tabs { display: inline-table; max-height: 500px; min-height: 44px; overflow-y: auto; background: white; border: 1px solid #ddd; border-radius: 4px; } .tabset-dropdown > .nav-tabs > li.active:before { content: ""; font-family: 'Glyphicons Halflings'; display: inline-block; padding: 10px; border-right: 1px solid #ddd; } .tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before { content: ""; border: none; } .tabset-dropdown > .nav-tabs.nav-tabs-open:before { content: ""; font-family: 'Glyphicons Halflings'; display: inline-block; padding: 10px; border-right: 1px solid #ddd; } .tabset-dropdown > .nav-tabs > li.active { display: block; } .tabset-dropdown > .nav-tabs > li > a, .tabset-dropdown > .nav-tabs > li > a:focus, .tabset-dropdown > .nav-tabs > li > a:hover { border: none; display: inline-block; border-radius: 4px; background-color: transparent; } .tabset-dropdown > .nav-tabs.nav-tabs-open > li { display: block; float: none; } .tabset-dropdown > .nav-tabs > li { display: none; } </style> <!-- code folding --> <style type="text/css"> #TOC { margin: 25px 0px 20px 0px; } @media (max-width: 768px) { #TOC { position: relative; width: 100%; } } @media print { .toc-content { /* see https://github.com/w3c/csswg-drafts/issues/4434 */ float: right; } } .toc-content { padding-left: 30px; padding-right: 40px; } div.main-container { max-width: 1200px; } div.tocify { width: 20%; max-width: 260px; max-height: 85%; } @media (min-width: 768px) and (max-width: 991px) { div.tocify { width: 25%; } } @media (max-width: 767px) { div.tocify { width: 100%; max-width: none; } } .tocify ul, .tocify li { line-height: 20px; } .tocify-subheader .tocify-item { font-size: 0.90em; } .tocify .list-group-item { border-radius: 0px; } </style> </head> <body> <div class="container-fluid main-container"> <!-- setup 3col/9col grid for toc_float and main content --> <div class="row-fluid"> <div class="col-xs-12 col-sm-4 col-md-3"> <div id="TOC" class="tocify"> </div> </div> <div class="toc-content col-xs-12 col-sm-8 col-md-9"> <div class="fluid-row" id="header"> </div> <div id="sumário-executivo" class="section level1" number="1"> <h1 number="1"><span class="header-section-number">1</span> <strong>Sumário executivo</strong></h1> <hr /> <blockquote> <p>Em Maio de 2021, a estimativa do IBGE projeta aumento na produção de grãos (3.4%) em relação a safra de 2020. Esse desempenho resulta em 262.8 milhões de toneladas de grãos em 2021 (aumento de 8.6 milhões de toneladas).</p> </blockquote> <blockquote> <ul> <li>Nessa atualização de Maio, a estimativa da safra de grãos do IBGE para 2021 indica queda de -0.64% em relação ao volume estimado no mês anterior.</li> </ul> </blockquote> <blockquote> <p><strong>Produtos em destaque:</strong> Em 2021, destaque para a alta na produção de Trigo (27.84%) e da Soja (9.4%), em relação a safra do ano anterior, e de queda na safra de Algodão (-19.7%) e de Milho (-3.9%).</p> </blockquote> </div> <div id="tabelas" class="section level1" number="2"> <h1 number="2"><span class="header-section-number">2</span> <strong>Tabelas</strong></h1> <hr /> <div id="produção-de-grãos---principais-impactos-negativos" class="section level2" number="2.1"> <h2 number="2.1"><span class="header-section-number">2.1</span> Produção de Grãos - Principais impactos negativos</h2> <table class="table table-condensed"> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> V1 </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Algodão </td> <td style="text-align:center;"> -19.70 </td> </tr> <tr> <td style="text-align:left;"> Amendoim </td> <td style="text-align:center;"> -7.81 </td> </tr> </tbody> </table> <p>Fonte: IBGE</p> </div> <div id="produção-de-grãos---principais-impactos-positivos" class="section level2" number="2.2"> <h2 number="2.2"><span class="header-section-number">2.2</span> Produção de Grãos - Principais impactos positivos</h2> <table class="table table-condensed"> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> V1 </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Cevada </td> <td style="text-align:center;"> 16.09 </td> </tr> <tr> <td style="text-align:left;"> Trigo </td> <td style="text-align:center;"> 27.84 </td> </tr> </tbody> </table> <p>Fonte: IBGE</p> </div> <div id="safra-de-cereais-leguminosas-e-oleaginosas---mil-toneladas-estimativa-de-maio-de-2021" class="section level2" number="2.3"> <h2 number="2.3"><span class="header-section-number">2.3</span> Safra de Cereais, Leguminosas e Oleaginosas - mil toneladas, estimativa de Maio de 2021</h2> <table class="table table-condensed"> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:center;"> Safra 2021 </th> <th style="text-align:center;"> Safra 2020 </th> <th style="text-align:center;"> Variação % </th> <th style="text-align:center;"> Diferença (mil toneladas) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> LSPA Total </td> <td style="text-align:center;"> 262757 </td> <td style="text-align:center;"> 254084 </td> <td style="text-align:center;"> 3.41 </td> <td style="text-align:center;"> 8673 </td> </tr> <tr> <td style="text-align:left;"> Soja </td> <td style="text-align:center;"> 132910 </td> <td style="text-align:center;"> 121522 </td> <td style="text-align:center;"> 9.37 </td> <td style="text-align:center;"> 11388 </td> </tr> <tr> <td style="text-align:left;"> Milho </td> <td style="text-align:center;"> 99171 </td> <td style="text-align:center;"> 103235 </td> <td style="text-align:center;"> -3.94 </td> <td style="text-align:center;"> -4064 </td> </tr> <tr> <td style="text-align:left;"> Arroz </td> <td style="text-align:center;"> 11352 </td> <td style="text-align:center;"> 11046 </td> <td style="text-align:center;"> 2.77 </td> <td style="text-align:center;"> 306 </td> </tr> <tr> <td style="text-align:left;"> Trigo </td> <td style="text-align:center;"> 7875 </td> <td style="text-align:center;"> 6160 </td> <td style="text-align:center;"> 27.84 </td> <td style="text-align:center;"> 1715 </td> </tr> <tr> <td style="text-align:left;"> Feijão </td> <td style="text-align:center;"> 2887 </td> <td style="text-align:center;"> 2888 </td> <td style="text-align:center;"> -0.03 </td> <td style="text-align:center;"> -1 </td> </tr> <tr> <td style="text-align:left;"> Algodão </td> <td style="text-align:center;"> 5693 </td> <td style="text-align:center;"> 7090 </td> <td style="text-align:center;"> -19.70 </td> <td style="text-align:center;"> -1397 </td> </tr> <tr> <td style="text-align:left;"> Sorgo </td> <td style="text-align:center;"> 2834 </td> <td style="text-align:center;"> 2749 </td> <td style="text-align:center;"> 3.09 </td> <td style="text-align:center;"> 85 </td> </tr> <tr> <td style="text-align:left;"> Aveia </td> <td style="text-align:center;"> 1022 </td> <td style="text-align:center;"> 925 </td> <td style="text-align:center;"> 10.49 </td> <td style="text-align:center;"> 97 </td> </tr> <tr> <td style="text-align:left;"> Cevada </td> <td style="text-align:center;"> 440 </td> <td style="text-align:center;"> 379 </td> <td style="text-align:center;"> 16.09 </td> <td style="text-align:center;"> 61 </td> </tr> <tr> <td style="text-align:left;"> Amendoim </td> <td style="text-align:center;"> 637 </td> <td style="text-align:center;"> 691 </td> <td style="text-align:center;"> -7.81 </td> <td style="text-align:center;"> -54 </td> </tr> </tbody> </table> <p>Fonte: IBGE</p> </div> </div> <div id="gráficos" class="section level1" number="3"> <h1 number="3"><span class="header-section-number">3</span> <strong>Gráficos</strong></h1> <hr /> <div id="produção-de-grãos---variação-anual" class="section level2" number="3.1"> <h2 number="3.1"><span class="header-section-number">3.1</span> Produção de Grãos - Variação anual</h2> <div id="htmlwidget-5a6cda5deed7c0317c7f" style="width:800px;height:400px;" class="dygraphs html-widget"></div> <script type="application/json" data-for="htmlwidget-5a6cda5deed7c0317c7f">{"x":{"attrs":{"axes":{"x":{"pixelsPerLabel":60,"drawAxis":true,"drawGrid":false},"y":{"drawAxis":true}},"series":{"Variação %":{"axis":"y","strokeWidth":3}},"labels":["year","Variação %"],"retainDateWindow":false,"colors":["#3689e6","#3689e6"],"stackedGraph":false,"fillGraph":false,"fillAlpha":0.15,"stepPlot":false,"drawPoints":false,"pointSize":1,"drawGapEdgePoints":false,"connectSeparatedPoints":false,"strokeWidth":1,"strokeBorderColor":"white","colorValue":0.5,"colorSaturation":1,"includeZero":false,"drawAxesAtZero":false,"logscale":false,"axisTickSize":3,"axisLineColor":"black","axisLineWidth":0.3,"axisLabelColor":"black","axisLabelFontSize":14,"axisLabelWidth":60,"drawGrid":true,"gridLineColor":"gray","gridLineWidth":0.2,"rightGap":5,"digitsAfterDecimal":2,"labelsKMB":false,"labelsKMG2":false,"labelsUTC":false,"maxNumberWidth":6,"animatedZooms":false,"mobileDisableYTouch":true,"disableZoom":false,"legend":"always","labelsDivWidth":622,"labelsShowZeroValues":true,"labelsSeparateLines":false,"highlightCircleSize":3,"highlightSeriesBackgroundAlpha":0.5,"highlightSeriesOpts":{"strokeWidth":3},"hideOverlayOnMouseOut":true},"scale":"yearly","annotations":[{"x":"2021-05-01T00:00:00.000Z","shortText":"Mai/21 3.42","width":120,"height":20,"attachAtBottom":true,"series":"Variação %"}],"shadings":[],"events":[],"format":"date","data":[["2007-12-01T00:00:00.000Z","2008-12-01T00:00:00.000Z","2009-12-01T00:00:00.000Z","2010-12-01T00:00:00.000Z","2011-12-01T00:00:00.000Z","2012-12-01T00:00:00.000Z","2013-12-01T00:00:00.000Z","2014-12-01T00:00:00.000Z","2015-12-01T00:00:00.000Z","2016-12-01T00:00:00.000Z","2017-12-01T00:00:00.000Z","2018-12-01T00:00:00.000Z","2019-12-01T00:00:00.000Z","2020-12-01T00:00:00.000Z","2021-05-01T00:00:00.000Z"],[14.08,9.71,-8.23,11.73,6.96,1.38,16.1,2.44,8.66,-12.17,30.76,-5.86,6.62,5.22,3.42]],"fixedtz":false,"tzone":"UTC"},"evals":[],"jsHooks":[]}</script> <p>Fonte: IBGE</p> <p>–</p> </div> <div id="produção-de-grãos---safra-anual-em-mil-toneladas" class="section level2" number="3.2"> <h2 number="3.2"><span class="header-section-number">3.2</span> Produção de Grãos - Safra anual em mil toneladas</h2> <div id="htmlwidget-e31b6109206fd1e6733c" style="width:800px;height:500px;" class="plotly html-widget"></div> <script type="application/json" data-for="htmlwidget-e31b6109206fd1e6733c">{"x":{"data":[{"orientation":"v","width":[0.7,0.7,0.7,0.7,0.699999999999999,0.699999999999999,0.699999999999999,0.699999999999999,0.699999999999999,0.699999999999999,0.699999999999999,0.699999999999999,0.699999999999999,0.699999999999999,0.699999999999999,0.700000000000001],"base":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"x":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"y":[116.5,132.9,145.8,133.8,149.5,159.9,162.1,188.2,192.8,209.5,184,240.6,226.5,241.5,254.1,262.8],"text":["Ano: 2006<br />Produção: 116.5","Ano: 2007<br />Produção: 132.9","Ano: 2008<br />Produção: 145.8","Ano: 2009<br />Produção: 133.8","Ano: 2010<br />Produção: 149.5","Ano: 2011<br />Produção: 159.9","Ano: 2012<br />Produção: 162.1","Ano: 2013<br />Produção: 188.2","Ano: 2014<br />Produção: 192.8","Ano: 2015<br />Produção: 209.5","Ano: 2016<br />Produção: 184.0","Ano: 2017<br />Produção: 240.6","Ano: 2018<br />Produção: 226.5","Ano: 2019<br />Produção: 241.5","Ano: 2020<br />Produção: 254.1","Ano: 2021<br />Produção: 262.8"],"type":"bar","marker":{"autocolorscale":false,"color":"rgba(54,137,230,1)","line":{"width":1.88976377952756,"color":"transparent"}},"showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":27.1466060245095,"r":7.30593607305936,"b":26.4890717779342,"l":43.1050228310502},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[0.4,16.6],"tickmode":"array","ticktext":["2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019","2020","2021"],"tickvals":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"categoryorder":"array","categoryarray":["2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019","2020","2021"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"y","title":{"text":"","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[48.0225,273.0275],"tickmode":"array","ticktext":["50","100","150","200","250"],"tickvals":[50,100,150,200,250],"categoryorder":"array","categoryarray":["50","100","150","200","250"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"x","title":{"text":"Produção de Grãos","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","showSendToCloud":false},"source":"A","attrs":{"a7619079516":{"x":{},"y":{},"type":"bar"}},"cur_data":"a7619079516","visdat":{"a7619079516":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script> <p>Fonte: IBGE</p> <p>–</p> </div> <div id="produtos-selecionados---variação-anual" class="section level2" number="3.3"> <h2 number="3.3"><span class="header-section-number">3.3</span> Produtos selecionados - Variação % anual</h2> <div id="htmlwidget-946dcff6413a48bdc963" style="width:800px;height:500px;" class="plotly html-widget"></div> <script type="application/json" data-for="htmlwidget-946dcff6413a48bdc963">{"x":{"data":[{"orientation":"v","width":[0.600000000000001,0.6,0.6,0.600000000000001,0.6,0.6,0.600000000000001,0.6,0.6,0.6],"base":[0,-3.9,0,0,0,-19.7,0,0,0,-7.8],"x":[8,7,3,10,6,1,9,4,5,2],"y":[9.4,3.9,2.8,27.8,0,19.7,3.1,10.5,16.1,7.8],"text":["Produtos: Soja<br />Var_interanual: 9.4","Produtos: Milho<br />Var_interanual: -3.9","Produtos: Arroz<br />Var_interanual: 2.8","Produtos: Trigo<br />Var_interanual: 27.8","Produtos: Feijão<br />Var_interanual: 0.0","Produtos: Algodão<br />Var_interanual: -19.7","Produtos: Sorgo<br />Var_interanual: 3.1","Produtos: Aveia<br />Var_interanual: 10.5","Produtos: Cevada<br />Var_interanual: 16.1","Produtos: Amendoim<br />Var_interanual: -7.8"],"type":"bar","marker":{"autocolorscale":false,"color":"rgba(54,137,230,1)","line":{"width":1.88976377952756,"color":"transparent"}},"showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":27.1466060245095,"r":7.30593607305936,"b":30.7397982204415,"l":28.4931506849315},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[0.4,10.6],"tickmode":"array","ticktext":["Algodão","Amendoim","Arroz","Aveia","Cevada","Feijão","Milho","Soja","Sorgo","Trigo"],"tickvals":[1,2,3,4,5,6,7,8,9,10],"categoryorder":"array","categoryarray":["Algodão","Amendoim","Arroz","Aveia","Cevada","Feijão","Milho","Soja","Sorgo","Trigo"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":15.9402241594022},"tickangle":-60,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"y","title":{"text":"","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-22.075,30.175],"tickmode":"array","ticktext":["-20","-10","0","10","20","30"],"tickvals":[-20,-10,0,10,20,30],"categoryorder":"array","categoryarray":["-20","-10","0","10","20","30"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"x","title":{"text":"","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","showSendToCloud":false},"source":"A","attrs":{"a76353bc21a":{"x":{},"y":{},"type":"bar"}},"cur_data":"a76353bc21a","visdat":{"a76353bc21a":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script> <p>Fonte: IBGE</p> <!-- > **Prognóstico para a safra de 2021** - O terceiro prognóstico da LSPA/IBGE para a safra de 2021 aponta que a produção de cereais, leguminosas e oleaginosas deve chegar a 260.5 milhões de toneladas, alta de 2.5% ante 2020 (aumento de 6.4 milhões de toneladas). Destaque para a maior produção de soja (6.8% ou 8.2 milhões de toneladas) e declínios para milho de 2ª safra (-1.8% ou 1.4 milhão de toneladas) e o algodão herbáceo (-14.0% ou 607 mil toneladas).--> </div> </div> <!doctype html> <html> <style> div.a { text-align: center; } </style> <div class="a"> <body> <!--<p><img src='rodape.png' align='c' style='zoom:100%' /></p>--> <p> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiUAAAA8CAYAAAC5K8qRAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AABTYUlEQVR4Xu2dCbwP1f//35+7b/Z93/fKkp02KYqsRVKWtCpFkhYtCIUU0qpEi4pQSkgoKlpkLQnZd67l7tvn/36emXHnXp970V996Tcvj2PmzsznzJmzvN+v8z7vc47PrxAPHjx48ODBg4f/MYLsowcPHjx48ODBw/8UHinx4MGDBw8ePJwX8EiJBw8ePHjw4OG8gEdKPHjw4MGDBw/nBTxS4sGDBw8e/s9ix6E9cvhErP2Xh/81PFLiwYMHDx7+T2LphhVS7qpScs3QHvYVD/9reKTEgwcPHjz8n8MXq5bIVe2byIMDhsmqsXPtqx7+1/DWKfHgwYMHDx48nBfwSIkHDx48XKA4nnBC8nUpJZKRJhIUbF30WQeDQOfuawB7OVqA69mfCfSbnJ47m3PHRu9c81lqyKfHIP2b2+aoJ0H6AOfB/M1z/nSJDA2XXeOOmd+4MefHr6TjsB4SFp1XUrZtEsmTVypXqytT+42VptXr20+JrNy0Whrf01wjDJG3H58svVvcaK77OpSVsPAofQ+JykRS/HEZc+dQaVK1rjQf2FbCY/JL8i6NPzhUila6WB7ucKcMan+X/bTG0zxUJDxSNr23RqqUqGBfFdlxcLeU61JVJD1Nnus/XgZ3use+kzPmrFwgHR/pKBIWJvOenyPX1bvSvmOh98uD5J33x4pERMu3kxbLZTUbmuuvLnhf+mpeSEaGTHr6Xenb+lZz3cE7S2ZK72G9TCYvn7REmlW/1L4jxsem8E1VJKpAMUnYqd+ZnCZRlWtKi0uayKePvqH5k3WQJTUtVcKuK6IZlSD9ej4hE+542r5z9sgaswcPHjx4uGAQEhwiUri4SFElJoFCkQDnzrGYHfibo/NcoGedo+t+sP4mRI/h+neEnkfpeYwe82jIp+cF9FhIQ2E9L6rH4hpK6nnpYiWlTNGSUq5ISalQtIRU0lBF46iq96oXLS3VCHpuQmENer+6Plu1MIHnSkplvjkAMlQBS/wxSctIl8YtOkk+JQSbN66SZnc2lZ+3rLOfEnll/rsiSmxQ9CM+edm+qti2U1J2/CFJ+3dKUlK8JKlyTtq+UeTQHilVoKikKpkg/pT0FGnYvJ1UuriJHNj+uzwy9n55avo4OxKg5Ck0TDKy9fnHff6W9d48BWTU7Nfsq7lj0vz3lHBEamGHythP37CvZsI46WralE3JtG9m21dFPlz2uUi+wias3vabfTUTYz9904pX0/nqAn2HCz5ImRKxhBNHpGGztlL/qnaSsH+7fP71DAlukcd+KhMTv5ymn6zfmr+wTJz1qn3178EjJR48ePBwoYIOvTEruEKgaxhR3CH7/exBuQ5Hnx4xwARrCNPzCA2Reh4dKhKl9zlG2udRnOv9aHPul6gQDUF+fYbzDBOizVGfcUKwzz73S4w+Fx2cITHBfskTpno7TI96LY95X4b9t97nWf1NIBhlqsrxotJV5IdRn8jRd1dLs8atjdXi8ffH2E+JKu9ZEpy3oJQoWUG2bF0vyakp5rp/tV/8P/hlxRvLRY4elBqVLjF/E7pd1k7ikxN5SqoULycrn58tmyctkVcHv27iH/7RSyYOAzLNh40nK6YumWVIQOlSFeXYnr9k24Fd9p2csWjJJ1Kx0sXGErL4hy/tq5nYpPEI5DQ6r0xflukb8+2P8yUsb35Ni09ilWBkx4afvpby5WqYtL4P8XHB5COFnhBvvvOn0Z+Kf3Gc5NXvhhx1Hn2v/aSF1xZ8YK5XKVvdkLbVf51Kgs4UVD8PHjx48HAhgo44UtwJqkcCBvczznPu51WnoUdD9EgI13uQDXR/RmKQpKf5zDmEBPIRxVEvWATDJiAnSYdFPEywn40J8RkiAYmBdEA+opVkQFii9X401zi3r/GMCZxDTPS35nd6hKhATHJDSnqqfSbSrXlbM4Tx555t5m+GbkTPuzVrK1fWaiySGC/Tl39m7jk4ePyIOSanZcbjRmp6un0mUqd8LRO/JMXbVwJj58E9cnTTGmnTtI10bnKdSHqKTFk8074bGDO+n6cvS5YuTa6XxtUuFUlLkYWrl9l3LcQlKVFS4tHikmYSv3uLJKUky6qtG4yl4+ZmN+hvUmVv7AH7aQuvL1QSoejftrfUqlLHpH3Zbz+Za1mRNZ/fuHek+dZZrvzK0Lz486fFUqnSRdKvTU9Dil+a+7Z99+xBtfTgwYMHDxcqVKlnIRru4L7nCnSsQ/QYriEC4qDPnLR06DUIRUqqT6oXSpeM5/fIp7fGSq3C6XJcCQrRRSmpiArNJCCWtcOn57blwxAPCEaGIRVRem6IjJ5DPPLou/JoHMYSEmYfISH6TB4lHDxjCAlWEY7Ew3Nh6XqPd2eSgkAIcfxrFOt3bKLrL/lj8pq/JzF0ExImXZrfIG0ubWH0rhkiOWOo1rVNIAwTPf7+aM1jn1xs+3LkhLGfTRYJDZUbGlytJKONvtcvU5bMsO8GxhtfTTeWlZuatZHr6l2hDMAvr3PNhf1HD5rr/a5XQqAEZsHqb2XOjwvN7zo3aW1IyY4De+ynLUycN82kpWPjVpqeliYPXv/KIiq5oVHVurAQkWMWaQMvffGOxhUi3S9vLx0aXGtIy7Rv59h3zx7ULw8ePHjwcCEC5Yj+JSDNCUoKOP7doReOCSk+6VknUdYO3C8+VXjtaiTKjwP3yfp++6VVxWRJSNaIMoKs+CARkA1IBkQkt6EXvW/IhyEZWFBs4mGTD/OMko4YrC56bgUlIvYRIhRj/s6FlOhH7zt6SF76fIp0GXufvDZjoirrFBl28wBz+92ls0TyFZQb6rcwihRC8fPa71WvZ5j7p0VIqPy180/xNfZJ6BVRsuTnRRJVpIwsfuZ9+4HAmLb0E83caOlxZSdpWr2eMsIo2fnXBjly4lSHXQeL8BGJzif1KtYyVg2IzKwlWa0raYf3GgtKh4bX6Hf65dOfFllWDy34dvWVcOi3x2Wz4mz4+WuRvIWkbOGS0ufqLoa0vf/VR/bdnFFE803IJyqVjdewuoSESK8rb5QyRUqI5C8i/kO75Q+Glf4GqMIePHjw4OFCBVJcdUT2oRdjmTCkwDqeydBLuBIGCMnrbY/KW90OSWqcT1JSRVKSNBwNkuqF0+Td7odk68C9cke9ePH5fZKR5tO4lVTYQy+WxcMiGVzLMvRiW0Asy4qLeCgRiXasICEcrXNzdBETi5BYxCVHBIfIoUN7ZMDQ22XGjFfMTJen73teScjV1tCNKvGYfIVkwrypMmrWK5KnVCWj1I2/x5kgQ9OTp4Dc2esxiS5b2fzdRglO4byqsHOAGbrZ9rv49Jm3v54hz89+TQqVrGAsFO8sDTyEY4ZulITgfzJu7lvy5iIlDarwIRkLfv3WfkqRkmyIEihYs67MVVKydO130rC+khSgccTu3mKdK6YtVaITFi41KtQ0zq7zVi01PjEM4azbttF+KjA2MwQG07WHtdIZuvlVfx+VR+b+8rWJrwL5GRZxivPsmcIjJR48ePBwgYIRfywbTjBDLxAP/tZzQ0j03CInFgHBohFo6CVYfBKiPeZveh2Ung3jlISEiD/dp0o3M6QoYUk5EWxIyONXH5O1D+6VJ686LgXC/ZKa6lNCZBGRk0MvxgJikQgz9MJ7XQTk5NG2gjAsY4iJ+du+Zp4hpOl5msaVqtctx9SAUKVdveJF4v/JL/HfJoh/Sbw80/VBc+sVFKUq0Lh9O+TBYb3k8dH3yQk9RylPRumfCTLSpGSBYvLGPSMl7v0NaGaZ8cUUWaOkIyeYoZvovOI/dljuH9pDHn3+XjnMsFJkjCEcgWCGbjStu/5cLQNH3CEPj7xTJDFOmL0zxSYye2P3GytHiaJlzd8dG10rh/YqcUg4IV3xpQFRMarpM1X9GwzT6Ht/X7NMBo26Sx4c3kuvak0KDbNm0eQCQ4aUlITb05zHM3QTk88QvweH9Tbx/fX7Tybd4z+fYp45W3ikxIMHDx4uUDB6Y8gIQaW5RUgsHw6sIJGGeKjSdxEQ4/fhmvUCUcBNoFL+dNnQd5/UKZEiyXHBxkqfU0hL80lyQpCkJvnkxoviZe4d+2Vi21ipWThVEpUvhCg5gVAEHHrBEmKsJK6jEhHuWeRFiUeoRT5iwlL0PEXJSIo+o+caOOdezvA7Lh8ShQXAhWkM3agSXzBunqz9aKOs+/gP+XTkJ8Yp9PvV39hPnR5prAtjo9UV7c3xxQDkwsxiUTDbB4vKh8+8J+v1nWv03cteWSKiJGW3kpnDJ46a59xY9M0cY8HZ8O5aWf3hb7Jhxp/y2sOTRFIS5aPFmmbFkbhj5nv4ZtCpcSuRA0dEYmOtoRtFqBIoCjidQlZ8t/xzE++f03+XX6f/Jr/N3Cxj+4421o83T7FuODkpsnbbRhk8+WnzHQNuuN1ce23h+0oCU+XVhyaa9BHfFv02vksO75ONu7ea584GHinx4MGDhwsUqAzLMdUagnGsH05g1oshIkpWzBBKgFkvKelB0qFaoizoeUDCfPq3Eg38SM4k+FXP8XzKiSCpWzxVxrY7IlM7HZbmZZMlNT1DgoMylBhZxATSgaNrTBjkQ4MhIRYBiQ5N1XRpgIAQwu2jTUggJtyDmESHJeu1JCsDsiGNdUSSkySB8aZsWLp+pciuvyRGlfS1tZvLxeWqyUVlq0q7hi0luHAJEVXw7zK0oXDiScwWTxqzbriuwcGAtqqgkxJk6tzJcjwhzrqYpMwsOVG/P1i2HdgtRzeuMWuCdG3WVmrpOy/RdzevXl9KVqltZv+wkJkbU/k7MU6qVq0rNUtXltrla0jNMpXl7mu7aSI0bccPyw+bVsmxeH1fcoqUL1bG/O76elfJiR/iJG5ZvFQuUc5cM2u3aHp3KUl4e/EMMxbXoM7ler+81KlQQ2qUriQD2/Ux1hWIxKot6ySM4aAk/caICPE11PrQ2Ce1u9fSPDoqxTQto259xOTBnyuUWCnZuadVd5M+4qtYrKzU1PyVdCUrf2MIxyMlHjx48HChQlmJNSzD0SIohnwYEmBZTJjRYvw48O/QZ5xZL1guUtN8MrjxCXnuulhJSwzSzjKEJHvQ15wMDiFx/s58LjVFQ3ywFIn0y/1N4+TdTsekvZKdEH2fLyhdIoz1A5KRaoiGO0A0HMJhLCIOAVFywtGQFIJ5RslLeGBH1wqqnC9u3Npy+syG7Qd3ScVLL5cXew+xr2Tig/7jpYQSgLhkyyG0HAu5NWgpnbE8uFC+SEkTfyem9NpopQq+ffs7pe4ll52cetuwRQdprs8UylNANuzcJJXqXyHP9nzc3HPj9XtGSolq9SQlLdm+YuFo/Akpe0kzGdl9kH0lEy8Pfk1KKJmJPXFc0pUVVm/UUlrqsw5iIqIlOiLK/kvk/utuk3pNWku+yDxmBeBiNRvIc7cOtu9mYsj9Y6RcrUay/+hhLatwubZND+l2TTdpdUNPqdPseul2Uz+ZOvQD2ff2j+b5Ndt/l0qNrpC7uz1k/nZjev+XpEzNhha5O0t4y8x78ODBwwWKxNREuWzExdq79EtwcLAE+5Qw6HXlIUoE9JpPCYPeo/cZojeC9BpLqKcroUhN98mL18ZKzRIpkprk7p+iEjL0fz1y6iM2ZT0mELt1X7vCeqpKB3ai8Jm3cJ+g/+shJESf1eMvu4Jl2Q5VtikM14iEajp8+juWjQ8YNCrzTRzNNY7WufjSJSQoVDq0zMWvxMMFC4+UePDgwcMFiiQlJa1HX6x6P0NClTycVOgocL1vaIKeQ1ZQ8HoqycolCkdmyEQlJBFhuARwFQriWB8i9cG8SmoKaAR59Txa4wjT+8omTIzEky5+P34dScpNTujxmPgzjmo0xzXodbOaqXk7j0tosKoZ5TR7YkWW70mVPfGpEhns0+uk1SYd+ribgJBmrgXrm933IFnB+jEtLwtsLfFwYcMjJR48ePBwgQJScuO4WkZRhwYrKUGB20o9U8FjlbDoQXyaSP1iqTK42QnlDj5JzVDxj2OIko6goMLKAEroD4qILzi/XovSEGHuSZASEmMxUXbgz1BCkqHxZVgExJ8skpGkl5WQKDHxZ+xTorLX+tvHc8ZuQ3Ity4f+eSI5Q9YeSpW/4lKMU2yYJtTZcM+y5ugvNBhiwpHf8Xb9j5iC9eHGDS0LTXbEJSXo8zx9KlB32Z1fcwJLz+e6donGFXmGceWG+OQE/cYg867o8Mxhl7+Dr9Ysl4PHjmg+aelo2ZYvWkqaujbaywmp6anWvj5aHRi6Ccoh/0grjCHGNTx0ruGREg8ePHi4QJGspKTnxFqqsDOMIglGoet1o9g5niQkfklI80nnKknSrnqSpCWr0lIy4hMlHCEllW9U0FBU/MEFxBcUrVpfQ1CEsZBASPxm6MYhF6oyNF4cHI3FJANSosGvxCQ9TnmIEp70IyJpSkzStqoSO2x+47acWESDNPhl84kk+Stef6vXsZwwzGQREr6D5/TILzlyTQNTl2vVOZUwvP/tp3Jr/w4ieZVM5QScVaPzyuUNWsq4Xk/IpewrEwC+i/RFhXOJx1adlS9qLP3a9JYHWFH1LFHmzqay67eVZjouU5kLVq4jh6f+Yt89M/y6dYPc8tKDsvHnxWaqr8k0B8y4SUmWsJIV5eZmbeTRTn2NY2t2+K4poAw3XvMmTSrXvUL+nLTEvpOJvq8/Ka9OfpaxNylZq4HsfnOFfefcwiMlHjx48HCBIjktUfq+WkOVeJoqcXxK0EkWEXGsJoj4dL9P+tVOlKqFtUecwlBNkCr5EuILq6xkpJSSkUJ6zKshj/hDtBdsCEm4MgJVlhqvDyuJ2a5eIzRQtWEsJtq7Tk/Rv1T5pScqIVFykRanpOSE+NKP6rkSkrRtetysjx+14jkZh4UQTSRX9qvy3KMkK1kJT5hesHxg+A7r1ZATvo9nITTlqp9KSmavXCidhnRRUsLKo5pG1vVw719DRBAAAtePHZHWrbrJl0PesR/IhO8KJSSFS1p/pCrpYpEyN1jVNFSfYXpw/AkJKlBE9r71oxTNV8h+IHccjT8mBVrps8WsNUZMek/Eyu4PN0rJQoF3Qc6Oe14bIq9PHWGlMzRUK0SiITcmLsPo9FqYliNgJtGhgzJtzCy57YqO1jUb4V2qSUqK/lZJSeOLmpjNDLPjsXdHy3MsqR+Vx+yafGJh7D9iMfFIiQcPHjxcoEhJS5CHJ1c1FhEUtSEjGqxhD7+kqXhn5s2DFydJ3vAMSUlVRR4UJUGh1cUXqj3mkKIaCoovJL+SkRjlH1Gqt1XRBqsiCwrVv0MsVkDAOmIogX3kQEjX/1SZ+dNTlXjgY5KgJCRBSQlDREdV+R/S4x4NG/WZHfxAAxFmBU65eKLEK9E5EqTkJCjdIibcU/3Pd5mk6H+s/1GkQi6kJI/2/JVEDOn+sNStUEvzKVV/b+2W+/W672TGAhYmwxqkER87JI/e/qSM6v6IHYuFk6RECUmTWo2lfcNrJNEmJgy3bNq7Vd5fyD40+v0RGhf39Fn//EPmmdOh/5ThMv7jCZZ1g6ET8jrhhDx662AZdeups26yY+SsV+SJlwaIFCllESz9tm5tepn9fJjSe+DYYVmxaZXM+P5LSWZBNRZR02dSlzIjCnKYibMmJZpnifqdDPWca3ikxIMHDx4uUKSkJcoz0yqpkk63lLpNRghJKtor5/FLrypKGFTKs7OtL7iI+MIu0V51WQkKK2YIiT80n5KSPBqUkIRE6j3V+oYz+OXA8VBZGxsmfx4PkZ1xIUpyzGWDYhFpUi4mTarlS5OLi2ON0BvcS1ZykppoWUw0+NJi9W9V1Kn7xZ+yWTJS1in1QLnzEkhOVnAFcpLuy5D48CRJj0ox11CjjuUEn4nIEqchJYnx8v1L86VJtXr23UwcOXFUCnWpqmRCe/omc5RMfLHPvmvhJClRovCYkoSR2UiLg0sfaSerNvxoLdWuSr9/1/7yopKc0yH8ZiUCiQlaBqFSuXhZ2bxri77Up3+GS+qMP+2ncoavhZKMfIU1/ZoP+rv0T/7SfDEFdwp2H94nj743Wq6tc9kpVhJwPpGSwF/gwYMHDx7Oe+ArYtbuCE02a3o4a3n4gpPl2hIphpCkKZNITVVCElRGCUkjkbBqEhReTvxh2sOOKKHnRSUospD4orW3Hx4kS3aEy11fF5BK00rKxTOLyO1L8sroXyJkxh/BMntTkAmz/vDJK6tD5eFvIqT1pzFSZFJ+uX5GHnlrdZikSbj48uSXoBiNN6Ko+MNLii+8jL63vL7/In1fI+UBtnUAR9tswa8hnQW/0kVi4iMl38F8Ep0YLtGq82OUQ0TpMfJMdKFGl8iwSwAU1PTd2b6PNdyBCUaJyYYdORMBnF5zwi+jP7OsJLwwMlpemjvZupELVv65RlL27bRYlmLBU9NEWNU1KFjSVOFzPzd8yX41SkRMSIqXt/u9kCMhAaUKFZd3HxwXkJCcb/BIiQcPHjxcwLAWHYOYKCHREKIEpUsZv1xe1CepyX7JSMtQklJegsLqKymoqKSgjBIFJSNKGIIiCouPLf3DguXln6Ok4lsF5bYF0fIN1v70BCnui5MCGQmSNyPR/B2VniiRGqL17+j0eMkriVLIFy/FgxNk68EUGbbMJ8UmhkiPWT7ZdDhMyUlBCY4qogSomBIem5yEVtV0NFQVXsAmJunixy8lDX+UePGnMuxz3ISM1GMm+A4nS8Yf+vguVf3KIwwB+P9E7XI1rPdjh1EStP/4mQ27BELNWg3ErLSKz0pS4skl3XMCGwHibMtKq52btDaroEp4hCFHEhJmNrbLDX+yMR7+IkB/4l4s7UKHR0o8ePDwn8P2bdukQ/v28uILL9hX/ruICUuWmPBUCVdiki88RfqUCZUqUUGSgkNrOoSknBKSukoIUHylNBRRYqJkJKqgsFDJlF9CpMykKBm70mdIR0FJkPC0RPGlJEpGkpIBVZwmJCVJugaOaSjelGTzdzrPpCRJUCpkJUGKhSTJ8i0p0uTNFOnxYapk+KIkOH8h804/VpkwDSFKioIrK+FQMpIaL74QTVd0Ywkq0F2CivaToNLPSVCp5ySkymwJqTxTQqpqqD5TfCVmij9kpmSEfmx//d/H4nU/mKETQwQkQ+qVr2Xd+BswUZwFPmXzvzAlIemp0vPKG821tpe1F+OMGh4pM9mMLxewRDz71xhLiRKSnhMG2ncufHikxIMHD/8pbN26VUaMGCFjxo6VAQP/O8I6EHw+lo9Pl1AN5bSzfGvRSIlWBZmKdSQ9Te8XFV9oLfGFlVYlWEKJSRENSkjy5JPYBJ80nRwkjy9Jlzz+RInJSBS/ko90VYzpHCEcJ88hISlKPiApPMcRMqLExZCWZPGfJDAQGqwqJ2T26qMSPGifvPZNkvjyKhGJukikUBslHY9IcM05Et4kVcIa+yW0zmYJq/mNEpCpElJ+vISUHCwhpQZLUMEOElSo88kQXFhDMT3Pc5OdA7lA9XVMDuuIsA/OrAXvGwKAH8jVja+T/FiM/iZ+37LOclTFvyMiUtjzJie8y0Z7DovxBckN9VuY035MKWa2EERD77/Hczng+kuvNBYVM71ZiVVSwgnxXZNfhs+YYD9x4eKCc3Q9cuSIPP/cc3Lo4EEpXLSoXHfddXLllVfKr7/+Kl988YX9lDbK1FSpW7eudOjQwfz9ycyZsmDBAi1vn3Ts1Elat25trr81ebLs3r1b64Bf61SI3NKtm1SsZM3jfvvtt2XPnj3mHKRow2unva8vPv/cLOkckyePJCYkSGJiolxxxRVydcuW8vWiRbJj507p3bu3/SuRdevWyWeffqr1h50aM6RmjRrS9eabzb01q1fLb7/9Jt1uucX8DX5dtUq++/57uf/+++0rmWBzpZdeekniTpwQ5vjn1TTc0r27FC9uTSH7/rvvZOnSpeYeSFVBUu/SS6W9pvtM8e2338qH06ebPKxWvbp00vyqWLGivP7aa3Lo8GGTVyBBv500lixZ0vw9+vnnZePvv0uxEiWkb9++UqZMGTlw4IBMfecdSaSHpWkvXKiQ3HnXXRIeHi4HtQzfmTJFe3RMKcSKmy7F9DuI75eff5aIiAgJ0+fIX753yJNPSnR0tEycOFHq168vTZo0Me8FM2bMkD/++MPkMV72N7RrJ3Xq1DH33nvvPalVq5apDw7eeOMN800ttcyyY/v27fLuu+/af+HYnipVq1Y1+cy3j9f8X69lGhEZacr9pi5d5LDmC3UpCUGuaait7ybfwJzZs2X9hg3mHCTrM5RH/QYNzN+vTJokq375RfLkyyd33nmn1KxZ09SryRpf79tvl5iYGPPcCc2DiRMmyN333iuFCmovV0HeUE979epl8iYQ+Ja//vpL5WWGqeO0mUu1ToB9+/aZdAOnDAppGd0XoO4FAu2R8iDdTj3g+/mmhg0bSqPGjeXYsWPynqaBcmfcm+fbtmkjVTRPHZCGzjfeaNoU9aybtsOC+o38dpLGtfnPP03d6NSxo9kU7ct580z+R2odIQ/i4+NNXVz6zTeyU9tfpN5L0utH9ffUxXz588vE8eNVWaeZbyyhdfT2Pn0kNDRU4uLi5H2tI3ffc4+dGivPvtF2lEfzvqe2ZacuOUhWWfCapvO4xk+bzq9ld9NNN0mp0qr8XVioMof09LnjDvvKuUVaeoLMWRotlUOCpU5YjJltY1qnP138wfnEF3WpBEVU06OmK6K4nmu9icknX/+RITd/kib5QjMkLBjPFL/49Duslq3Qcwf4eGBJMODgYyqwOZgLtIm09AxJSk2X5NQ0DelSs3heaVG9uDQsV0iaVSoqRfOce4fIQMji6Krttse1N0vVEhXMwmDIBXbVnf/rUvlj7fdKjlRmqjIvXbaK7HzjBzuGTLgdXQff8rA8d9up+8WATqPvldlsoMcsmrij8kDXATK+z1P23VNRd2BbWb1pFY1N2jS7QT5/PNMHxde+jP4XZCwol1SpLWvGfWnfORULVn8rre+9QoTN+CBElJmmlTQ0u7KTDO/2kFx1UaaMzA2eo+vfBMqr5dVXy1UtWsjoMWOkdatWptGDLZs3y7GjR+Wqq66SpqqsmjVrJhepIgKYcFFaw4YPl8GPPiovvfiivKlKCUBUIBM9evSQRo0aSTclCxtsBbJo4UKpoQSiefPmJs7ml11mhFlTjfvaa681RKO63r/s8suldu3a5jdvvfWWEbBurrdDldyuXbukZ8+e0lUV2DcqOAf072/ucf2nn34y5w7eePNN+ejDD+XQoVPHOBH4CMsuXbtKd1WSZcuWleuvv94QH/DHxo1G0bSw84G0V6lc2dw7E0DsxmoP8/5+/WTYsGFSsEAB+UUVJpg7d65UrFBBLtN8IO7L9Zg3r9W7aKNpyKuCeZwqbBT1jZ07y84dO4zQ/lkJBt9NepO0DDvbyhqF9uPKldKkaVNpRtB8ravCv7KSQuIoraRm5YoV0lgVW8trrjFKd//+/TJ71iyTP258t2yZlChWzChn6sAg7SEv+uorc+/HH380isHBUa0nEAXqRCDwDpTg1VrPTF3SPITUgFtvvdWUwYhRo4wiJt9RahCGjZr3EJebtQ7x7ofsMuYbihQuLJdrPXHKpJJdJndpHLxvtNZRlNo9d98tKzVPUN6QS+q8gxU//CCfffaZfDYnswcFcVz89ddGMeeErzUt5C11nHx+csgQmaJEBpAX5A9p4h51u169U2cr5ATaHG3wQ1d5UKeNUtd6DiCkS5YsMflGu1iuZfWcdiwcQG7nz59vSATEifqN0k/Rb6M9litXToYOHSrXaB2gfhYpUkSu0I4I7XuZxkXbg1wWVDK1UL+1qN6vfcklhnhRV/MrIYHcLF++XG7WdkMZ8Tek0VKo6bJMibiDB5TcrFu7VkZpGnspKRw8eLB8+WVW5QD5XKrf1FoJHvUawkT5UdfdoI7N0vrK+/4JIGWahEVIneBISVFiwCqe5KHfHyw+fDdCy4kvvJhIGEM2qqiVkLyzIlnaTz0hBXxJEpJuWz4SLasIlhLOOXI9gzLhmn6vZQnhmvV3YnycHIk9IbsPxEre4Ay5o1FZmXv3ZXLixS6ycnBrGdW+jnSsU+ZfIyRZgLVBCee0+e/JkMlPy9Apw+Xpt4fJ+BkT5I/tGy1CkpYiVza8JiAhyYLgUFm3Y5PM/elr+XD55yZ8/N0XMvSj8ZK/R22Z/fXHFiHRvAnKWzBXQnIiMV5W/7xI06Z5ovW7/w2323cs3HJVZ2sIR++vVeLE8zmBjQCXsTmevleOHzEkh/Jl3ZPv1iyXFg9cI742xWXQ1FH2Ly4MXFCkBOvBVSqMsHIUUiEPORmpysEBPS+EbwslLpCGylWqmB7UB9rr//Cjj4w1gd4xlganJ4zFA+JRQa8j9O7RXhVWFQct9B1YYpw4S5UqZZ5rqAQGgYYC5O/CKgh3qBIurOniN59//rkdA+3DZ5R7ufLlpaYK0okvv3xS0YdqzzUsLMycA5QbveQbtdf4qUv5OCAurAzVq1eXKvp9N6oghKCN0QBQZuX1PSgX0nyNppl3nilQeAMfesj01ktoz5feJMIW8G6UF4SBuBHI9OIhZxWUrNyjPU0UAOVDuujB05ONUTKBxYX0PqxkIUS/+U9V+iEqNCAy5BdlCTkkX2vou/mbsiT+q/VdBIByI2/27d1rFKqDIC3Hsqq8UGCQx8dU8c5W4gHIX97pAAVEuZHXe3bvtq9mBb1+yJLJQy1fLB9YwPyqwAY+/LAUUwLENYguacQKlEd7+ZWVbJD+F8aNk036jZAG0taoYUNDSoivleZPAa0PPyhZQbkNtclfU33fHUpS3nnnHQnHSqTpJs8d8D0P67sdZQ9MfdDncvO85/3kP3WcfMVy9PHHH0uctg3yJb++GyXPPZQ7332mgABjsYJ4QzoAxKFDx44niRI9VOosaSWfqAc8i1I39zXt3OfIM3w34SclS6W0HFD6ZZR8U0+eUXJCHlMfWmhasYjQLkk7caCQqTeXO3VU8xoyy3WOVatVM1avR5RoYG3a8NtvVhvU3wI6JFjKaFOQHwgPVp9J2mbdIJ0R+hvaCd+DZWfEyJHyghJ6B3uUnPFcgwYN5LvvvrOvnlvg6ljcHyqp+I4oITGB86AyEhRWwfhvSFhhJSb5RfIoIfkuQR6YeVRKhSWLzyYdlt+Ikg+OWh/TtcecztBMUoohKviLMHSTrs8kxCXIodjjsmP/Ebm0dD558aZ6cvSlbvLrk+1kaLu60qSSvu98ArNiWKnUCQyPxClB5BgSKkt/Xiy+zhVly77t9g8CIDxC5v3wpbR7vLN0G3qrCV2f6S7PKNE5dkzJAA6rxw9LwSIlJX3mFvtHgfHc7FctAqP1kZk6LS/O2tYGtb/LsnYAJUOT5k+zznNA8xoNxP/lQRnbb6yEsVbKob0WScFfpQBlHy5jPxhrrD7j5r5l/+r8xgVFSqpq4/9GFcrX2jMMBAhGdtA7wozsBmTlgw8+MOcQC5SjA8zwbjO4I6wCQn/r7snO195UYxXQ7Tt0kE9VUbvhcymNBHof+luQaU+xQO+4Tt260vr6680wSkDYv3XQpHFj2W1bAnhPoHw4UzTUuF588cUsw1ZuuAmUA9KMYnADKwJWqXglWAhmN5I1zxia4Tuy33PDDOvQeF2Y9cknclvPnoZ4LVy40L5qwf3dx2JjA6YVzFLlznBZMy2rTzS+QAiUh6VKlJDjSmSwtAWCU6bAfJf+jWmfLwwNkJbvtHyz182OqsxHjhghCUoY3GDYLD4uzih77m376y/7zpmBISgHWBSKFC0qf27aZL4zN0JzOmABYJguKipKtmyxBPLaNWsM6YOwBAKWkbvuuksmvaoCWhHo/ZAWiPcW/c552awUDhhOheRgVXEjp3LPXtMYRoMwucHwJ5YxN+hMRCvxxHrmBqXNcJADLK2kySHLc1QGQNgYqgvUwTgXIA3p6VhH9DzDZ9qLX2LEF1ZJfKFF9VhIQz7x5csv89cmyb0fHJKi4amSnqpEI9n2ETHEI9nyHTE+I5AR/Zvrep6UkCiHjhyTnftjpX7Z/PJ2r+aS9HpvmXVfS+neuLKEsNTq+QbaYlKCfDl6jviXKplaGCuJGpIWHZMt03+XB268XyuvEgp8SlJTpHK3mrL9YGCZFxD4c7AYGcMmmk9Th0yVw++ssm/mjPGfT7HemZwgfdv0sq9mok6FmhJarLRl9YiIlJEzX7Hv5I6B7e6Q5I82yrr3Vkt7HGYP6bccj7XyAetJweIy8IV+0mZkH/sX5y8uKFKClYLhEYQ2QwcOsQD0kj6fO1fuUWHX5/bbpe+995rrCHAEsBv0DhkaAPS0GO/+4P33TW9owfz5ZuwbML59f9++ctcdd0iP226T9/WZ3IDgoVeN2fg37XFh8QC8j+GD6Zpehh2Iz/E5cSsy8KE+w3h7Ne3N0WM7dOCAfSdnoBCcWBDIkASGAcgHjgjuM0WfPn3khrZtTRp6q/Jfu3atfUfzQwXzo0o0GHLo2aOHvPHaa+Y6vf18+bTiu4DFxBAPxQlVptOmTTPf/tCAAWY4CUXGt+NXcrfGd6fmCab6zZs3m98EAkovSgkj4/wo58WLF9t3rO/GgjB9+nR5W+vIy1qW99p1wI3DR44YxVG6dGlTVitWrrTvZAI/A/x6nDzkexmiwR8DCxt5cqkSR6xTKS5l77bGTJs61Vgg6E3j+zBq1CgTTy/N07G2VeuIEieG39zA2lJAe/CO1cEBQ0DlK1Qw72jctOkppPdsEanpwopDfHuVgN6tdd6UQdeuWYa6Tgd8hrD6kJdfffWV7Nu/35QF1gOn/mcnnpBNLHmlleRh/QlEItJU2ePbMu6FF2TiSy/JlVdckaW95wTq6NNPPy333nOP3K5tDCsHgKwnablTZyCzWAMhZ1g6eJcDrDvUXTfII+oc9Tg3QK6wSjmkBL8orDVYWxiiI6/+ERhCwkwbgn5rSGklJCXEr4REwvKLLya/7D3kl26v75ZikalKNCyyYZxYtSzSNF+MJcQQk2RJ02Oatuljx+Nkx77DUjA8SCZ0byLJb98lcx5sLR0urWC/+DyH5kkk02wVkWEREqEhXMlExWJlZHyfp2XDVCURxw5pAWunNDqfNH/CmgVzCjS/rm9ynXw28hOZ/vR7MmPodLmvk8oWSA1sMDRceo7oJVv25mJtUazb/ofE795qERmtK7df3cXIwEQtB0KSBtC31W2WhUefO3Fgl/y+K2eZmB0Xlakmcx59XfzfJsubj1jymUXkeJ8ULCbzFk6Xd7+xLMjnKy4oUgIwmX+tguVlFTbTlSTcYTuQ4dCJCffV11+XCRMnGs97gEJ2WzMCAZGJ0Ppi3jx5/PHHT/pJQGieVAE3Ud/1ivbqGDbICQhyhocw+QKcCT93Od4ChNuqX3815wyLZAcKmvRWtP0Nrldi8JkSrdOBiu1YFFA09Nhes/NhrAr1s+0J91HlSTqvbdXKKOWPPvrIXKeHO3DgQJP3k155xTgAAvf7cwJpQCgzVj/OtjSgDHBmfHH8eBk/YYLxpWEYKCcs0XKHjALqwT5Vpu4hHMB75i9YYPw6MNVnx3fLlxtFBKpqTzxFhe+2bdvM3w5IF0MwTh6SXpQdgDC8PWWKzFPyulNJ43WaR/TUIWAMSV3XurVc07KlOafOAOqRsQxonpF39/XrZ66Tb1iNcoWt0CEhEDHAsNkvSpqA2wJ3NoDEUtcgP5B28t+UweTJhvyfKfALwtqCQyv+TFiy8Puik0AwyEZK+G7a5ICHHzZO0MePH8+xjmI1/FLL8yWtI3NmzZLevU7tXboBQb5VOxCPPPKI8QVxHN1JAd+KUzuWHJzLnXroJu2kLZCVjPSeth3pd/JbvhsSQltkOBGigp/OPzWEo4k2xMRH79oXo4SkrLGQBEFIIrSzEB4j7SdslzBJFn8qm/ElS6ohH0zttSwkqZpvaVhFlJQdOnxU9h+MlVsaVpLdL/eWNc/dIj0uq2G/7MKCWYQtB9QsXVk6X9fDHu4Ik107/pA/9ihpyI70VLm4bFW5ocHVcnPztnJj0+vk5TuHyp6ZShawRlC5IvNIzf5ZrcXZMXKWEmSGemgP4VFS/57LJOiqKIm6toAJkRp8V0bK+Jkvm6Ed85zqjLGfnX4xtkC445qu4p+zQ2rXqG99I/HlKyj9Jj9jP3F+4oIjJQ4uueQSmatKf/OmTcaXg14sPVx6ZQy/OEMw9NiwWuQEekbdVYgxJszMBqwwDhBW9JAQMiilk0I2ABgf361KEgsDTp/0knDCAwhDLAPM0nj++eeNEHEcdN3AdMxsgfZt25o4UKA4PZ4Ou5QQRUZZi+eQZqfHTh44yvTvgCGOyW+9ZaxIDoiTnq07P+jtMzYfCE4e4iDa74EHpJMSO6wGDigvLD0ErASBFIIDhDqOnm1UKeM4S9k5fgkoDXxdumpP/3UlEzNnzjT+RNmBAyqOxeQvZcVQ2lfZhoFQTM7eEDnlIT4lE15+WS7WevjR9OlG8VDXvlSy8tWiRYYUO+SWmVB8H/WTuPCzAczCQkHmBtKB0ma22TNKkPn2Jx57zPjCoGCz72FxpoAAF9dvoHwoA0iVUwZnQ2IhqhBx81v9XqyVzS+/3MQJ4Qo0RAIor7LaJi6+6CJjQcM6Qb7nBGa/fKxlynARhCInQCjLlC5t/GfwoylpEyy+k7K8Tdv6w4MGmeHG0S5nWwe0U2byucE3YCUhv3ID5JP8wBkex9iDhw7J9VpeEFXqXPZ6dk5AlsFFNBgria+4GbaRMCUjoVpv8+WVF+fulTVbj0poeoqSEGvIxjiymnPLapKs6d6//7A+kyrje14hydMHyMQ+LaRY/sAzus4G/rQ/9R1fSnrCy5IW94ikHesiqbHNJPVIbUk9GKUhWlL3+yR13xmEAxoOhknqoTPb9O50uKJmY600WDupoz7Ztj+wjxlb+2dHiQJF5Y4b71MlYi0VnxJ7wFppNQd8OP8Da+iGeg5JwNk1SmVE9gCclWgjouTtzy2n9L+L1S9o5xjLC1ad4FA5tjt3v5f/NS4oUoLSZjaHGwg+hCJCB+fA7Likdm3zm0WqKBzgL+GevUHvADAjguGBn12zYRjCORMw+2C6BqwjWFzmqPLEE9/pebnN8ZAg/BqAW1wTx6vau4ZsEcenGgfTXFEgbmTvHb/40kvGHA7Ih0Dm8DOFe1o1wAKFogLEHUhBYxXCDI/PgwOcXxlugSA505NBWyVcTo8R5Rd8hgrwr61bjfxlnP4LFfhYkIYrgWTWBkAJOhYxhhMgCG7iRxlAQJjRZOLQ/KWsyLslS08VJBCI7MCiwlRgN/DVKKT1D0uRexjADeqAQ5LduLJFC1OnIZUO8CNCgTnvxxeFZyDh1Ae+ffacOdJG85FZSGaITL89+/BZdrjr8ccffWTqCMNBpDk3Ing60CFw/GXqX3qpVKpUyVi/KFt3meSE/g89ZNpmdmsJ3w/5wJfGDeI8XXqdYcPsoP46uFk7ISs1n7NbRpjlhZULwueAYaMCSpqYYeMGZIsp+Q5eHDfu5Cytb7/5xrKoaXlBVOd+/rmxpp7zIRwVIAzbZGAl8YdJUGhx8YfmVWKiISKvJMYFyfCPt0vBkHQlIiniQznpUQvGnKcmJMoBJSPl8kbIvCE3yc7J98sdLa2ZhGeLlMQFknD0OTl+oKPE7q4oh/7yyaGtPjm8s6oc2XO9xB7oJ0cPjZGjsTOUXH4vx46vlWP6/mNKiI4liRzTpJ02qKg+Fp+q4Yj91v8/HIrD0pEphXMjxoEwqvsgZaPHrT/CImXwe6cSXfDh8rlKHjXfeZcSwc5XdpKbr7lZurbsekq4tVV3qVu1nkVMmB6spGnerzmTnTNB1Wp1Yez2X+c3LihSwng1nvW3du8ujw4eLA3r1ze+GfiFgLcnTza9X3on16pwuf8+ZbGK1998Ux579FHzN2P6HTt0MN78gJ6XmzBg9n8Oa4aNDu3amV41cV6pPUCGBhzExsYaIWmUrwo2lKEbjRs1Mn4kKCxmejhAMbMuxbbt2810RHr8KMu9e/caReEGswhYt8EBjYZnGf/Hb4axdnpyQ4YMMfdREMysCJQPpwMKitktKJcBDz5o/Ax4xyDtWQIICRYPJz+u0ncz5RETO0MLrbT3ybPcN4Jc8wNS454OSU+0gCrQKe+8Y3rXzFDheSwA12uPkqnMrEkCMH8fU2UF5qgidqZdO+Dv33//3Sg0eqjkgwOmTDv+BFhMUEhfKglhho4bzMRgGMjd+4YoMbXUyUO+C7+XA1r/+g8YYK5T/5iKTdm10b+ZyeIuYzeY3cEaGk6+8Y2QT/KC2V5dunSR/prf1Et8KLDCUCcNAdfyZjYOdcYN0oRFBiJo0kAeaqC88atyg3U5+j/wgClLVjmdNm2aIWOA+vu7fjvfRBkwzb6zlmV28p8TGL4pVtTy2WL9H2aWAdokU4FxdCbvT2gZYUrnHP8cp83hN8LQz6ZNm8w986zmI+lav369tNbvvKNPHzMl+Aptf3Xr1ZNq9rAccfAs3+eA3zl+T3fq75AV+LpAjqknDrBmFNF3sxYMBMgpO6xbjz3+uLHEPf3UUyaeT5T8Od/lAKJNZ8Fph5QHQzZMI0YecI93uIEfG87w5xx8PjvlBan8CSksQSFKUEOUBOfLK09/uEPS4hMkJC1FglTJBWl7DFIywrWD+w5L+XwR8v2Y3vLzhLvkmroVrfjOAMmJP8mRwyNk57Ym8udGn/yx3ifb/motu/Y8JvsPz5FDx/+SWNWpsaqHzZGgzfOUoCTjrIP5rbs79/cxZrbKVmdTPu321Cp75ssngMJ5C0q9BtdYBEJl77r1K2U/firZYIZg7N2ACxQqJjMHvSLTB4yXDx+acEpgj5oVz83UxrXfIjFhEfLcJ9ZQsINft26Qpo/dqIQudz8nB5t+1442vjP6/mhWgz0HCAnK9KE7l7ggdwmm0eOsiAJ3CAlgPNkBQgMzOULKAQt70UOsaC+OBhDo7jgA5Mcx1XLfiQOBiSJ1gCLkb6MQtbHTm3IDXwOsMCzclB30mJweJWQAoYl/BNfcgLQcURJS1GU6NvHqt2LS51vc3wiy5EO2NJ8JIFGQBWLN7peRW35APuhholRRNoBn6C27e6/kCbMWsMBwj2cAVZHycXqu/O34ayDkITnO0JQDZngwDZs4+J2718u04eKqGIiDeFFKgYYniJvvcFszSJczc4Z0MEMLcgH26ztxUiU9zqJ17rQGQm75xu+o0+QZeeeAciQ+FH/2egFYDwSHXeDETzoYVnN/I+QuRYPJD01vdqsN96lnJ79VvzOQpSgQsDpiqQz0PHWB91Em7rTiWMt0czdw6sb/AuzWZxl2cfILXxWsXOW0I4FzqgPykfc78TqACOmHmHOeocyp07RrN1GArJL35K07fYBfr161ylhOHRKUHfyWjgRHCKZTppDqBC071ktxAznBOx2/s3MBf5rKnnmF9UPTJCimtgQXuFR8+aopPykn/uhiUr7nMiVt2jZMVlqLnB0+GieXVCkpk/p3lPo1sjpa54SExHVa52fob99XUrlVy8bSl074N0HZ+HxB0qhuJhl1kH2X4FWvLJG6FU5dEuHgsSPS9PHOsvkv7Yzgv6HPXlytnqx9MZM0uhdPe6jrg/JCL6vjlx1z9J0dH+tkTcHVZ/vc0Ecm9820mCQrCYxomdeKK/64vNRvrDzYNnNxzZxQ5b6rZPPOTRaZOH5Y/IsyOz2+tlqPGXaKPyb1Gl8nj3S4W7o2a2PfzcQvW9ZLY01bGsNFONgePyKj7nteHu2YuVAgOOvF0+Ji5cDMrbLrcOAZdgBZkuHPkPqVLravnBn+J6SE1TQxUb/5Zu6bDv1XgJPiPO2l44DHYk4ePHjwcC5gSMlcLLRKyPM3F19BJSb5KouveAX55Lt4uXXEz9qbDzWdtNhj8ZI/b5RMHdJdrmkYmGi5sffQLNl9cJrsO/SpEnSGWxmysgjBv85EXPD7lUD7QuX6pqcODWYhJRnpUrlUZcmjpAPl6NN/+IZs2LJB5MRhfUaJfmiYsv942KskfrZbIsIy/QbPlJQAX+cKmO70RPMmMU788zOtJc/OeFmenPy0SLQq8xPH5PDsbVKQabqnwfgvpkr/8f1FYrRTq+Tj5f7j5b7rbpOlG1bKVd0bi5RRYmIWYUvWb1AiTihSSmpXqGkIwdo/Vpm0mO+ks6ZxFCxeTg5PzeozBc6ElLAI29jpL1jOutCGo6fZwFDTVaxqHdn31o/2hTND1i7jPwz8IzBdM2UTJ7f/C8BUPuLZZ02v+oF+/YzJ3YMHDx7OGYyhMUoVD1bASD2qMg2NlA++2i4Rwely9HicHDh4VMb2ay97PhuWKyHZtn+2LPzlenlznk/m/dRZ1u/8VI4khcvx1Eg5mhyp55FyODFcDieE/c/CIY6ahkBgOXnjRJqqhEXPN29dL7+u/0HWqCJfvWGFbNj4i7EqGYfSZFXiB3dLo0uaGxLhJiQG+N/YIdU4w+aMZ7oqeYg9qMpaC0NDnu4X2XdERs1+RTWtkgIlNzVrNTwjQgLua91dzEJvvDskTB59b7S5fmWtRvLLrHVycZXaIvu263ckWQ60rFKr5GrNptWydvMai3BBaCAbB3ZKyyZtAhISkAKxIei3ppB3AVC5RDmRY0rmmGIMAWLYK7egLPZMl7l345xYShwz8+mALwSzDZi7/3fAOgOsXpl9uOJcIdBQjoPc7uUGVqXEXMtQEw50mHnPJK/OBH83TR48XKjAWZQhmOzDeAAfL4ausg9XMjyVfXjJEXtuWWJ8XdLSAg63MpyX3YE8u9wL9J5/GlhKkmblF19YcQkpfJkEFbhIggpXkJTIElKq8+dyaP9RubltY5mey6JZR+O3yvKNY2Tddqae+iU0OEaCITf/Q2tIbsBSEuwLkQfbnjpTZu32jdJz4iBJz7D2wDoFtrarUqq8XF6jodx6eQcpkANJqNz3SolW5ZqgSn9guz5yTyslCbmg85i+MmfFQqlQvLQ83uk+uf3qmwyZqf1QGwkJDpEEJQejbh0kNzW53v7F6TFt6Sy567UnzHnTanVl8dCsa/Xwna/Mf09m/DBPft68ThJZQp9hGsiREq9S5apJp0at5OEOd0rZwjlP9W/xdHc5oIQjTYnc1Zc0k0l3DrXvZMWYOW/ID5tWSRiLx+WCNCV+ZQuXlHG5WJdyQq6kZOTIkfLF3LlmvJmxWdaQGD58uDDVDgx95hkzW4Oix8GS/VJwFAXsS8FS0Kx94EaXm24yPhQ9e/UyjmQ4T9LYuUYjx8mStSBwbFz+/ffGT4O9OZ584gkzXRYhctFFF8krr7xycrVVnDMHP/KIRKswWuJagtvByxMnmoXPEGQ4xfHB+Bc4m6ThnIm3PHETx8MaFzNKwJNPPmmm8jEmjV/BvX37GmdPwJoZjBOzhgLLrwMc5HB6fX+6tfX0BP3+mTNmmHFnhGWv3r3NHjiANRr4Dnxfltqrt7LvB+sr4Hexeu1ak++8hxVM37On5vKb96ZNM/fI93bt2skgTbMD1mhYunixXH3NNVmm33r4d4ATM+uSUN4oOeob/kLUUxZSY+8f/ma2FrOEwG1ap3C2RanhD8IRp0tmbdyubeXPzZtNeWM2RUGy8i4b1THdFLL/sdYx2iezgdjThdlYOHziRIsPh+O7w1RZnDPZfsAB06yHaVtm5dKPPv44oML/p8HOvjd17mxmCdFWAM6x47XtsvQ9K++yki6Kn3bKSqnPjx5t8umHH36QYUOHGt8b8oetJLiHU/PHmscs+V+ydGkzWwngQMu7PtI8Y1YTTrbID3xgiJtOxHht08zGQy7dojJt565dJi8HPPSQiQMncPY9YkuD0fouZtqxwCKOrs7ml2yCiLxDxrG0f/bN+s4FDCmZmV+CIisrKWkqvsLVJahoJVm7K0hq91goq6YPlrrVA/uN/PLXTPlizXA5cHyjRIbmV7kVZb7/fAczjYKDwmTETVlX2PXw30Cuwzc4iLH+xQsvvCDPPvus6Zmz4idA2bE6YncVpu998IHZ8RTl73iX4+CGN3p20LMnXhanQrmbnUG10TKr5pZbbjHEBmGOYHCc/FgFlB2BmbHQW5U60xDZQ8UBG47xPCRlgwqc7CAe1kFgMTDW3mBmBkoDsDEeq2VCNlhenWl/CDhmUwwfNsyQBDYygxCwf8lrmgZneXN2vMXy4WxuBnBkc5w8WSEWQsL0zXdVKCFIJ9ub7QEEQFH9LqYy48wHSAvXSAdOnCgo4nOcaJnOiaCFcLC4F6vHsmsxu/o6YDlsPP3Ji3NgCPNwlqC3znAd5X2L1nHWp2HROcoUgk2Z0j6YFeKAesl+LISHeLZYsZPkgJ471gGUYtdu3cx0VmbaMPuEukFcEFyAQofks2YIYKow68jQhtk3JkyVOG3Zvf4NdZzZaFgKNv3xh3313wXkgs4InZLHtQPCHj/MgmmucoF9otiZmZ2h31dZA6lnxV2GRVkbhM4RMuUtbYfMnGPG1kM2eYDkIBuS9DlnBWBmafEuZBEO88x8Aix2x0rAlF+/++83M3IoK5aYp006G3XSEUG2cc2ZtUOeUxZuywmdGZ5Bnn2vxOmfgj/dp7JE36uKGt8Shidi8pQX/6+TAhKSj38aLd3eLCZjFvWVrUfjJNFfQY6kFJADieGyPyHs/A+JYZrWf9ci5eHfw2l9ShBy9AbYRAzhSuNjSIJFqOiRPKgNmt4em9zRmN1Lsee0sBO9NvaxYREjFjPCW51t5ZluyeZx3AdYEKZMmWIEFhYLtuBne3FmD/zk2o2TjfqYMkna5s2bZ1/NBNwfQsV0YEhPfyUiD2i66RnR22EDMnaX5ciGaIBN+XDGxSrT9777zGZ/7ICLkHcTAATb9m3bTu7SixBjIS3ApnzMKMDywdRTNg9EWWEFAnjuO8uxL1u+3Fz7WQUwK2oyYwFz9EnYPRim4KJwsFgxFXeYCmafPuvsTsqibViBIGAoGWcFWQ//LujR0wu/T+vOAK3Xztb1rN/CQmDUC3ZINtYPBdOLWfgNKwczUZid5SyTj/WDOv8g9faBB8yGgKz2S53m9yi+77UNYDGhrbh7u5BSyA1tmKnL9OSps86eP9QVZv7QKaBzgDXnfwWsElhysPyxoSOO4ViWIOKkjdWWWQflHs0XOikM5bAWCDIKqxBtlVWdsdYyo4o8IT8MYShcWN6dZm1uRtsij5BXrCECyWDaMaSngXY8KCtm+5gOlj4H8YAkEmfs4cPyx6ZN5veQENIMAlkYsOCw8jBy8h9ZOM2ATfgyJMMfonUhVXwQk3ytpWL5rNPnk1MTZOSiQdJ0fHGZtHKSHMkoLEczism+5CjZnRR6QQYP/02claMrwysIOMydNHTWDHCDKXUIVBCokQYCAoG+PEL8JFy9ezYN428253JAbxISBOjlQWLoPSI42PclEBBOCCkUAc8gyDAZI9RruuJmOWh6qmx9zveiWNxg+ilmWcC0VoZtMBM7a4nw3Qg9BCYKwVnS3EF5fdZZmAlhRw8PYbhm9WozZZFptewWSy+Y9zsgTqwwXGMlUAcs3sTuvCgqgBUHAY7ViR7aon9MGHrIDZQXi63Ry2dPHkgGZUudu1TrGDtPU4+YpusGZB/iQh2AWAIWy6OOs7sxdXjFihXWda1rKEUW7MJaAoEPtIEk9dAh+ux+TDthmjlYrfUOMsOKxsSRfev9fxPkGUR91apV5luRM7R9LIZYOwrYFkgA0Wd4maEp2pCz7hCACNA5YB8l5BX5znLz5D0+bZARwCrQLBOAbKh1cea0ReQa0guylq5yCWstuyjTJhlGW65pY6o5BAk/N5Bd3iEHN27caIZyGAYineTzPwF4rS85TnwFLxVflfu0N5jHvmNhyKKhUnZsJZm8Zo4clWJyKKOA7EoOlZ3JKqcuwLDDPuaGLVs2m4UI9+49dZM92uLixV+fsmEkdW/rVmu104SEeFm7Nutqy2vWrDadz9Wrf9UOX+b0XDp/7IdFW4K4upGSkiq//rrKyG10Db/NDurKkiWLtRN6+gXhfv/9N5MGVh02w5U26MCSBitkTffOnTvMNX7jrA/kIDEx4eTvSKfTSQIHDuzXd/Fdv54cUnUD3U2cDjF3wDuI7+/itKSEXhWWAczDM+zx5lraI4FEoPzcYNEpZy0HhMK5AL4c2QcgMIuz4BJYsGCBNbxRoIDZWZeeH2tsZAcKmuXH6Wn2VSWOwMOMSyE4S1EDLBdmq34VMtxzm2MB952CQ9hTWOxjg1WF9RHIHwSUs0CUs9S4AxQMecTwEAtf0QPG8ZeZSb9oHMTNgmnEzVb5DoiTd3E/T7bVO+lhO+svsCsyRIn3YnFBiXn49wFpZ+Xa+/r2NWGF9ppRiChIrI6XX365UYZuyx5+JvhNsBbHsOHD7avaluz6hDWAoQaGHHkWJY6PFAob5cdmkqwOSx3MCfyGOu3sucPQH+tw4O/QWNsURGrrWe5AfK5Au1ijecRiZMxUM0NSrnbotrxC5BkOIz+BW9giJMkzhDZyCEsTw8tYY5EBtCUT9FnIGjLO3c5JBzKHvMKfjmcYpqWDwfLx5A/EknJK0HLhPvG5wXNYsNiHCv800snQ3TkHM0ni0ySkwSgJqZF17Ymnvp0kvqdLy4gV78vx4OKyLyOPbEsJlr+Sgy7skBQk2zTkhLlzP5M333zDEJIJEyYaguEA0jFixLNm+G3MmNFZFk2kIzlpkrVI3nffLTfExY23335Lli371rTrI0cyrdh79uyWqVOnGMLw3HMjT3ZaAe9mE9kFC+YrCdor77wzxb5jgQ7GhAnjDZl55plnzDO5gVW/Fy36SuX8MkMaHDCJ4oMP3tc6ttKk3Y2lS781evKnn36Uxx571FhYHUDQpkx5WztPPxkSl87cbxuQLN63bt167QQ8cgr5WLp0iX7bZO3IZK6ADuAGEydOONkROlucljnQq8DUy5AD5lEc4VB4CApHIDgwe13YCcnOyP4ucC5FwOT0gfTsICU4f/62fr1JWyBTKVYJNuBiV9hVKvgu1p4RpmEEj2PdcQMHUgRN9p1B6e24BRgFDAnASvSqpsEhLZAklEOsKg83KDDyKEbJCM5zfBfWGAQjO9BeqsIW/xHe7V6hFJICgXF6k4FAXpDvpPG1114zSg82S2/dw78LekYdO3Y09Y3N89opaZg1e7axRrwzderJFW/dlomhTz9tyAe+FG5iwSJu1KuFX31lfBO+XbbM/O20Mcq4Y+fOZkdidkmGgOcEiC3voC7he4EAZQ2LN1RZYwWgbn8ZYAj03wDt4sqrrjJ5tkIV+IiRI029h+DhO5JdKAK+g3xwb70AUaMNYs0w5xoH5AT/N1YAXqlx0zaIm44V+UFnxgH5CcVABhjnVz3nPXXr1DFtaeuWLcaRmGukieCQEqczxlYVpJuVpFkCAb+g+f9Ivvokstt6Ca5gOdeCeZu/E98zF8vw+S8qsyqmwiOvJCUHS6Iq8v9CSNEQp+QkJ6Bc7777Xu2s3Wx8H6OiMhcL/PbbZYYodut2i5LwJoZkOMA/j/w8eHC/kvMd5r4bERGRZp2ptm1vyLK7NzI5MjLKxBkTk0flb6a1hPrAkD/WDXSFOy1g5coVZkJIly5dpVati0z6cgP1Fitrz569pHr1TIs5aeA9rVq1MvfcCA4OMtbUu+66W98faYi/A35HPW3e/HK55ZbuGn+m3AkJCTYjA927WxM7slv6aAtYdLOTbdoCMujvGiZO+yt6ZDNmzjT7bbA0NaZSxkhp9CtcvXCsBJjD3MMdf3cHUwf0VnCIxUcD/wwHMFqsCDBWMhVBy2wTzKUUmntLewekt6AKBoDwBqSV37P7rBvMRqil7yVzl9ub6gEK5fDhw8Y/BCDUCOC2Hj3k60WLDMlASKJ8UCzuzb0gJPREIXfO3/SmyFPIH2SD4SOciylQVg11QJw8g+MeJmfS4QDrCFj89dfmeyBZizUtsG+UDOny8O+CeuHs60O5YV7doeVCuf6g7QaHZgApYJbJrFmzZLUKi9vvuEMaaq8+C2ylihKkTlHHgaMIHcsADtVsAmksBPY9wG8RPIAl5eklYhnBIZp0JWnbZf8ZnFypLziR8s5/G+SZ0zadIRa+kdVf96psYYacAwQhhKFhw4aGVJCnDiBt+kOpU7u2GWIFkMQGmq/MUIJ0ET/tD4sLbYthYAc4zkMEeZ78IScgFY2aNDHtjnRWrlLF5CsdBzo8TllQPvu198leTQh03sHzkJ9dmt5zPYTjC8srQQWsFUshXw1evU3aTLhZhYvWkeACetQ6mKJp+48FH8cAyMjwm/JE+TK8N3DgQ1qGmcMc6AFH8cbERBsC6gDZWa5cWdmw4XdjsahaNXNY3wGEZ/78rOTSKfsBA/qbzmWDBg3N38DIAY0XK+TXKp+dduiA+/nyWXoJPZDMmiO5wOirJZaFwg3SQB1Hd23ZcupOx+QJyJs33ynknjgXLlwgP/yQ1aoeFBRs6vvAgQOMHxw6zQH1GG7QqFFjI8P4juwg3r+DXFkDBUhPwxk3daP7LbfIHlWimJIxATNtESbItvcAosDf9BSYKXPP3XefHON1MgjwMeY9GhwgEHgmUSvMHSqkOWdmD7MGntBe5I3aK3zqiSeMsqVSfaC9Q3YQ5QiTZRlwekQO6IEhhNi59ZFBg0x67tJ4eTdmWIQI38MuwewB8vhjj5leI8MiEAX2DflUSRke+ViHHKdF0uWkmzFrKhwF5Xwfs4sOatyY7+fOnSt9br9djul9/F8ABAbvf4Dz7e16n91LUToolcO2AOMdTpw4BpPu3j17mtlCOO9i0mfq8UoV1BAtppqSH1i1+G5vCOffBeVDeWH6d4DTI0r0qWeeMeXyoYbB2jZoIwwpMF0VocSO1gMfekgGaR29ukULoxRRsNQr6u2ghx+Wh7SuPDlkiBFCiAKnDuIXgnCiTjlCgnso7XHjxpkdqvHH4hmGSBiOxeIynRldM2bIh3rE0ZN2Cnn+N+EsO4A523zjgAEmjZidmcLMvTFjxpg9h5AJtKlnhw0zs/eYBcdMN2boDB861Pjk1NCeIX5o5BHEwGk/vbSNQda5xr3LLr/c9HoxU5NH41RGMNMOfxGcfzFvm/anz9MZY6fru1WWMYuJGTxYWJwZOMRJ20UeUmbMdhr7wgsyWtN9q3ZaIIPs/P1P4N3V8yT4ocry89afVNsWphKqgFLl818MGeni1xAIQUE+KVAgv9ajlcYxGmuk0z5A0aJFTP1mmIJhicqVrSn5DqpUqWqGP7ASFCzISrmZQJnfcENbufnmWyQ+PtOCTvy0txEjRpohlSNHMjuMFANyvmXLa8wQvVaLLMiTJ+9JH5ANG9abOpYb0Ks33thZCZA1u8wB9TsyMsLUTTq6TvsHljzKMARj+/Zt+l1Zt2ogfb169db63tzUYQfpmtdswcBMNmcih4NVq3419xjignC7rfG8Ghmze/cus32DO//PBLmSElgfez8E2sn1Tv34uzTAkpgZw6JmWFJQ8qDrzTcbpkSPgZ47CatcubKJE+HrgEaMqYfrDjBDOSZoem5M9ausQmKuskDGzpii+860abJWMwrTlxtMm+T3bgtF69atjc8FwojeKgI3QuPnuVEqqJn5EKu9S3a6pQf0sQrrKppWyAfCj2GWkSNGmKm7TBmENQKTTle6qRB8M0ISkAfMvEAYMW3RVFxl75jfIFMQhor2OhWYg1m7BSXBc+48Me/RcgCMT7O5Gw6NzBCi8IepcGajtRQVsvgquNFJCRy9uX9byfxfBsSbhupMywX05JmlRr1yQD2qUaOGIR6s64Nvh9OzpodPLx6hyvAg7YAGznT43Xv2mNk7DFVST5y2kl+fpX7gwOm0Mbbxp07y/tXaJpjW/ubkyVJQe/F7lCThFOoGM19IO23r3wTpZD0SnHARsOQB6S6p7Zb1U1g3hAUIUShIPdYWelXJHGAGDnlEL3bd+vVmHRhnM0YsHJiuyT+AP1qzpk1NXiOzAA7CyBEIAwT+ak0HMgekqhJApkFAADN7sEiBfJrHWHIpb+LHAkqaKSesNHyLgyu0s1TRSf85xq0zn5IeU++X0HxFJSKmkESER/2nQ2hYlMSEZx0GcaNHj95GwT/55BAjOxl2ccDQS5EixeSpp4ZIoUIFzYw0N7COofjr1KlrX8kEQ/RTpryj5P457axmOsliMaMO0A5r1KipCnqVfQf4T1o269atpx3XrI7ovXr1VLKTLk888bipkxCD3BAREW5IRHYgJ5KTU2T48GEyefIbRi84IF046eLn0br19VKzZuawT/78BQz5GjPmeW1jL2ncmQaI4GD8I9lEtayRCZs2ZS4XsH79GmnfvoPceeddxgq0cWOmb05YWKjxc5s8+U3jr0L+nA3OyYquHjx48ODBgwcP/784OwrjwYMHDx48ePDwD8EjJR48ePDgwYOH8wIeKfHgwYMHDx48nBfwSIkHDx48ePDg4byAR0o8ePDgwYMHD+cFPFLiwYMHDx48eDgPIPL/AGt9b8iBeLAnAAAAAElFTkSuQmCC" align="c" style="zoom:100%" /> </p> </body> </div> </html> </div> </div> </div> <script> // add bootstrap table styles to pandoc tables function bootstrapStylePandocTables() { $('tr.odd').parent('tbody').parent('table').addClass('table table-condensed'); } $(document).ready(function () { bootstrapStylePandocTables(); }); </script> <!-- tabsets --> <script> $(document).ready(function () { window.buildTabsets("TOC"); }); $(document).ready(function () { $('.tabset-dropdown > .nav-tabs > li').click(function () { $(this).parent().toggleClass('nav-tabs-open') }); }); </script> <!-- code folding --> <script> $(document).ready(function () { // move toc-ignore selectors from section div to header $('div.section.toc-ignore') .removeClass('toc-ignore') .children('h1,h2,h3,h4,h5').addClass('toc-ignore'); // establish options var options = { selectors: "h1,h2,h3,h4", theme: "bootstrap3", context: '.toc-content', hashGenerator: function (text) { return text.replace(/[.\\/?&!#<>]/g, '').replace(/\s/g, '_'); }, ignoreSelector: ".toc-ignore", scrollTo: 0 }; options.showAndHide = true; options.smoothScroll = true; // tocify var toc = $("#TOC").tocify(options).data("toc-tocify"); }); </script> <!-- dynamically load mathjax for compatibility with self-contained --> <script> (function () { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"; document.getElementsByTagName("head")[0].appendChild(script); })(); </script> </body> </html>